Index: ChangeLog ================================================================== --- ChangeLog +++ ChangeLog @@ -1,16 +1,772 @@ -2000-04-27 Eric Melski - - * doc/library.n: Added entries for auto_qualify and auto_import - [Bug: 1271]. - - * doc/Init.3: Manual entry for Tcl_Init [Bug: 1820]. - - * doc/expr.n: Added documentation for each of the math library - functions that expr supports [Bug: 1054]. - -2000-04-26 Eric Melski +2001-08-07 Miguel Sofer + + * generic/tclExecute.c: Avoid panic when there are extra items in + the tcl stack [Bugs #406709 and 439843, Patch #414470] + * tests/foreach.test: test to exercise the patch + +2001-08-06 Jeff Hobbs + + * generic/tclCmdMZ.c (Tcl_RegexpObjCmd, Tcl_RegsubObjCmd): + reordered the retrieval of arguments to avoid shimmering bug when + the pattern and string referenced the same object. + + * unix/configure: regenerated + * unix/tcl.m4: added GNU (HURD) configuration target. (brinkmann) + [Patch: #442974] + +2001-08-03 Jeff Hobbs + + * win/configure: regenerated + * win/tcl.m4: fixed DLLSUFFIX definition to always be ${DBGX}.dll. + This is necessary for TEA compliant builds that build shared + against a static-built Tcl. + * win/Makefile.in ($(TCLSH)): added $(TCL_STUB_LIB_FILE) to build + target, otherwise it wouldn't get generated in a static build. + +2001-08-06 Andreas Kupries + + * generic/tclIOCmd.c (Tcl_GetsObjCmd): Applied patch from SF item + [442665] to fix the bug reported by it. The function can corrupt + a freed object if it is called with objc == 3. This is because + it retrieves resultPtr and does not increment its reference + count, but then calls Tcl_ObjSetVar2, which causes the retrieved + resultPtr object to be released. + +2001-07-18 Andreas Kupries + + * doc/bgerror.n: Fixed Tk! Bug #415757. + +2001-07-18 Andreas Kupries + + * generic/tclIO.c: Aftermath to [SF #427196]. Squash empty buffers + if they are smaller than the requested buffersize, to prevent + reusage of old buffers and to honor changes in the requested + buffersize made by the user. + +2001-07-17 Andreas Kupries + + * generic/tclIO.c (GetInput): Fixed [SF #427196]. Memory was + overwritten because a buffer was used after a change of the + requested buffersize together with that requested buffersize and + not its actual size, which was smaller. Note that the continous + reuse of the smaller buffer negatively impacts performance. The + system never allocates a buffer with the newly requested bigger + buffersize. + +2001-07-16 Jeff Hobbs + + * win/tclWinPipe.c (PipeClose2Proc): constrained the mutex lock to + just the TerminateThread call and waiting for termination. (jsmith) + +2001-07-02 Jeff Hobbs + + * tests/util.test: added util-4.6 + * generic/tclUtil.c (Tcl_ConcatObj): Corrected walking backwards + over utf-8 chars. [Bug #227512] + +2001-06-27 Jeff Hobbs + + * generic/tclUtf.c (Tcl_UtfBackslash): Corrected backslash + handling of multibyte utf-8 chars. [Bug #217987] + + * generic/tclCmdIL.c (InfoProcsCmd): fixed potential mem leak in + info procs that created objects without using them. + + * generic/tclCompCmds.c (TclCompileStringCmd): fixed mem leak when + string command failed to parse the subcommand. + +2001-05-22 Jeff Hobbs + + * generic/tclObj.c (TclAllocateFreeObjects): simplified + objSizePlusPadding to use sizeof(Tcl_Obj) (max) + +2001-05-04 Daniel Steffen + + ** Mac 8.3.3 binary release + + ** detailed change log for changes to mac code for 8.3.3 + ** (expands on log entries below marked 2001-04-04 Jeff Hobbs) + + * generic/tcl.h: MAC_TCL: addition of ConditionalMacros.h and use of + DLLIMPORT and DLLEXPORT like on other platforms. ( => no longer need + the .exp files and can remove use of #pragma export that never worked + well) + + * mac/tclMacShLib.exp: + * mac/tclMacOSA.exp: + * mac/tclMacMSLPrefix.h: removed files + + * mac/MW_TclBuildLibHeader.h: + * mac/MW_TclBuildLibHeader.pch: + * mac/MW_TclHeaderCommon.h: + * mac/MW_TclStaticHeader.h: + * mac/MW_TclStaticHeader.pch: new precompiled header files + + * mac/MW_TclAppleScriptHeader.pch: + * mac/MW_TclHeader.pch: + * mac/MW_TclTestHeader.pch: + * mac/tclMacCommonPch.h: revised precompiled header handling: now + include a common header file 'MW_TclHeaderCommon.h' from all .pch + files, the .pch files themselves now only setup #defines (e.g. + BUILD_tcl, STATIC_BUILD, TCL_DEBUG, TCL_THREADS) like in makefiles on + other platforms. + + * mac/tclMac.h: + * mac/tclMacPort.h: + * mac/tclMacInt.h: use of BUILD_tcl and TCL_STORAGE_CLASS like on other + platforms, standardize #include'd files to what's done on other + platforms, removed use of #pragma export. + + * mac/tcltkMacBuildSupport.sea.hqx: new archive of mac build support + files & suggested build environment directory hierarchy: + - 'Building MacTclTk' & 'CW Pro6 changes' readme's. + - projects for MoreFiles 1.5.1 static & shared libraries. + - project & sources for 'pseudoCarbonSupport', see below. + + * mac/tclMacProjects.sea.hqx: updated mac build project files: + - build support for CodeWarrior Pro6, UnivIntf 3.4 & shared runtime + libraries: the MSL libraries and MoreFiles are no longer compiled into + Tcl.shlb, all non-static binaries now use the Pro6 shared runtime + libraries and MoreFiles.shlb. These shlbs are merged into the standard + Wish and TclShell, but 3rd party applications linking with Tcl.shlb or + Tk.shlb need to setup access to them. (see the "(sh-ppc)" targets + for how to do this.) + - Merging the full MSL.shlb and the other shlbs into Wish & TclShell + makes them a bit larger than before, use unmerged binaries to avoid + copying the shared code with every application, e.g. when deploying + numerous Wish based droplets. + - Note that using CW Pro5 to compile extensions is in principle still + possible, but need to link with Pro6 runtime libraries. + - Tclapplescript now loads and runs on CFM68k. + - Highly experimental "pseudoCarbon" support for Tcl only on OS 8/9: + binaries in "Build:(Carbon):" link against CarbonLib instead of + InterfaceLib, however the actual code has not been carbonized! i.e. it + will not run on OSX and may not even run properly with CarbonLib. + This should in principle allow you to build & test OS9 CFM Carbon + binaries that need to link with Tcl.shlb. On OSX you can use the + native Tcl.framework, but you have to build a MachO binary as there + is no CFM glue lib for Tcl.framework. + the library pseudoCarbonSupport.shlb manually loads the symbols + from InterfaceLib that are not in CarbonLib but are needed by the + uncarbonized code in Tcl.shlb and TclShell. + + * generic/tclMain.c: MAC_TCL: workaround for broken/non-standard isatty + on MW Pro6, #include instead of defining isatty + + * mac/tclMacPort.h: MW Pro6 changes for MSL fcntl.h, stat.h & isatty + + * mac/tclMacAppInit.c: add EXTERN to InstallConsole to enable DLL + export via the TCL_STORAGE_CLASS mechanism. + + * mac/tclMacFCmd.c: fix for FSpDirectoryCopy API change + + * mac/tclMacLibrary.c: emit compile time error when + TCL_REGISTER_LIBRARY and USE_TCL_STUBS are both defined at the same + time in an extension, this use is not currently supported and will + result in a crash when dynamically loading the extension. + + * mac/tclMacApplication.r: + * mac/tclMacLibrary.r: + * mac/tclMacOSA.r: + * mac/tclMacResource.r: fixed obsolete copyrights/dates in version + strings; updated version strings to standard usage; added support for + '(Support Libraries)' subfolder for shared runtime libraries in + unmerged binaries; commented out demo setting of "Tcl Environment + Variables" + + * mac/tclMacChan.c: + * mac/tclMacSock.c: cast for *BlockMode + + * mac/tclMacUtil.c: + * mac/tclMacMath.h: removed obsolete hypot() definition + + * generic/tclIntPlatDecls.h: + * generic/tclInt.decls: + * generic/tclStubInit.c: + * mac/tclMacNotify.c: + * mac/tclMacOSA.c: + * mac/tclMacUtil.c: + * generic/tclThreadTest.c: renamed routines conflicting with standard + Apple or MoreFiles headers (at compile or link time): + GetGlobalMouse -> GetGlobalMouseTcl + FSpGetDirectoryID -> FSpGetDirectoryIDTcl + FSpOpenResFileCompat -> FSpOpenResFileCompatTcl + FSpCreateResFileCompat -> FSpCreateResFileCompatTcl + NewThread -> NewTestThread + the renamed MoreFiles *Tcl routines are just wrappers calling into the + MoreFiles DLL. + + * mac/tclMacCommonPch.h: + * mac/tclMacThrd.c: + * mac/tclMacPanic.c: removed OLDROUTINENAMES define, renamed obsolete + apple API names to modern equivalents; UH3.4 support: added #include + , updated New*Proc() calls to New*UPP(). + + * mac/tclMacUnix.c: added missing (Tcl_Obj ***) cast to + Tcl_ListObjGetElements call + + * mac/tclMacAlloc.c: modernized TclpSysAlloc() to use temporary + memory instead of system heap memory when available (MacOS + >= 7.5 and possibly earlier, use of system heap has been + discouraged for a long time and has many disadvantages, e.g. memory + isn't paged out, and errors can very easily bring the system down); + fixed crashing bug in TclpSysRealloc() and CleanUpExitProc() where + memory was being accessed after having been deallocated; fixed + memory leak in (de)allocation code (for every block ever allocated + with TclpSysAlloc, a Ptr was leaked), if temporary memory is + available, don't track allocated memory, instead use + RecoverHandle() to get Handle from Ptr, otherwise use doubly linked + list to correctly track memory and free all allocated memory; added + new option for ConfigureMemory: MEMORY_DONT_USE_TEMPMEM, disables + use of temporary memory even when it would be available, only + necessary when writing e.g. a driver (using tcl??); increased + fraction of application heap reserved for OS routines to 512K + +2001-04-06 Jeff Hobbs + + * unix/install-sh: added -S option + * unix/tcl.m4: added Rhapsody/Darwin target + * unix/tclLoadDyld.c (TclpLoadFile): + * unix/tclMtherr.c (matherr): added support for Mac OS X + +2001-04-05 Jeff Hobbs + + * generic/tclObj.c (TclAllocateFreeObjects): simplified + objSizePlusPadding to use sizeof(Tcl_Obj) (max) + + * win/README: + * win/README.binary: removed note about use of registry (hasn't + been used for loading since 8.0). + + * win/configure: + * win/tcl.m4: added -link50compat + + * mac/tclMacProjects.sea.hqx: fixed accidental swap with Tk + project files. + +2001-04-04 Jeff Hobbs + + ** Start changes for improved mac build (steffen) ** + + * mac/tclMacShLib.exp: + * mac/tclMacMSLPrefix.h: removed files + + * generic/tcl.h: addition of ConditionalMacros.h and use of + DLLIMPORT and DLLEXPORT. + + * generic/tclIntPlatDecls.h: + * generic/tclInt.decls: + * generic/tclMain.c: + * generic/tclStubInit.c: + * generic/tclThreadTest.c: NewThread -> NewTestThread + * mac/MW_TclAppleScriptHeader.pch: + * mac/MW_TclHeader.pch: + * mac/MW_TclTestHeader.pch: + * mac/tclMac.h: + * mac/tclMacAppInit.c: + * mac/tclMacApplication.r: + * mac/tclMacChan.c: cast for *BlockMode + * mac/tclMacCommonPch.h: + * mac/tclMacFCmd.c: + * mac/tclMacInt.h: + * mac/tclMacLibrary.c: + * mac/tclMacLibrary.r: + * mac/tclMacMath.h: + * mac/tclMacNotify.c: + * mac/tclMacOSA.c: + * mac/tclMacOSA.r: + * mac/tclMacPanic.c: + * mac/tclMacPort.h: + * mac/tclMacResource.r: + * mac/tclMacSock.c: cast for *BlockMode + * mac/tclMacThrd.c: + * mac/tclMacUnix.c: + * mac/tclMacUtil.c: changed mac declarations to use Tcl ending, + fixed copyrights, updated headers, fixed comments, updated + resource files. Mac builds are now meant to be build with + MetroWerks CW 6. + + * mac/MW_TclBuildLibHeader.h: + * mac/MW_TclBuildLibHeader.pch: + * mac/MW_TclHeaderCommon.h: + * mac/MW_TclStaticHeader.h: + * mac/MW_TclStaticHeader.pch: + * mac/tcltkMacBuildSupport.sea.hqx: new files + + * mac/tclMacProjects.sea.hqx: new mac build project files. + + ** End changes for improved mac build (steffen) ** + + * unix/configure: + * unix/tcl.m4: extended test of termios vs. termio vs. sgtty to + better detect result on Linux and when certain configure + redirections are being used. (max) [Patch #402923; Bug #227412, + #219194] + +2001-04-03 Jeff Hobbs + + * generic/tclListObj.c (Tcl_SetListObj): set objPtr->length = 0 in + empty object case to maintain sanctity of Tcl_Obj bytes/length + pairing. (porter) [Patch #405998] + + * README: + * mac/README: + * win/README: + * win/README.binary: + * unix/README: updated patchlevel information to 8.3.3 and + updated links and notes. + + * generic/tcl.h: + * tools/tcl.wse.in: + * win/configure.in (TCL_PATCH_LEVEL): + * win/configure: + * unix/configure: + * unix/configure.in (TCL_PATCH_LEVEL): + * unix/tcl.spec: updated patchlevel information to 8.3.3 + + *************************************************************** + ** START OF ASYNC BACKPORT LOG (8.4aCVS 2001-04-03 -> 8.3.3) ** + *************************************************************** + + * doc/CrtChannel.3: + * doc/CrtSlave.3: + * doc/DetachPids.3: + * doc/Eval.3: + * doc/ObjectType.3: + * doc/StrMatch.3: + * doc/after.n: + * doc/append.n: + * doc/bgerror.n: + * doc/binary.n: + * doc/break.n: + * doc/case.n: + * doc/cd.n: + * doc/close.n: + * doc/concat.n: + * doc/continue.n: + * doc/dde.n: + * doc/encoding.n: + * doc/eof.n: + * doc/error.n: + * doc/eval.n: + * doc/exec.n: + * doc/exit.n: + * doc/fblocked.n: + * doc/fileevent.n: + * doc/filename.n: + * doc/flush.n: + * doc/for.n: + * doc/foreach.n: + * doc/format.n: + * doc/gets.n: + * doc/glob.n: + * doc/global.n: + * doc/http.n: + * doc/if.n: + * doc/incr.n: + * doc/join.n: + * doc/lappend.n: + * doc/library.n: + * doc/lindex.n: + * doc/linsert.n: + * doc/list.n: + * doc/llength.n: + * doc/load.n: + * doc/lrange.n: + * doc/lreplace.n: + * doc/lsort.n: + * doc/man.macros: + * doc/memory.n: + * doc/open.n: + * doc/package.n: + * doc/packagens.n: + * doc/pid.n: + * doc/pkgMkIndex.n: + * doc/proc.n: + * doc/puts.n: + * doc/pwd.n: + * doc/read.n: + * doc/regexp.n: + * doc/regsub.n: + * doc/rename.n: + * doc/resource.n: + * doc/return.n: + * doc/scan.n: + * doc/seek.n: + * doc/set.n: + * doc/split.n: + * doc/string.n: + * doc/subst.n: + * doc/switch.n: + * doc/tclvars.n: + * doc/tell.n: + * doc/time.n: + * doc/unknown.n: + * doc/update.n: + * doc/uplevel.n: + * doc/upvar.n: + * doc/variable.n: + * doc/vwait.n: + * doc/while.n: doc clarifications and cleanup from 8.4aCVS docs + +2001-04-02 Jeff Hobbs + + * win/configure: + * win/tcl.m4 (SHLIB_LD): added -incremental:no. [Bug #219381] + +2001-03-30 Jeff Hobbs + + * generic/tclCkalloc.c (TclFinalizeMemorySubsystem): set curTagPtr + to NULL to allow for reuse. + * generic/tclEvent.c (Tcl_Finalize): moved the tsdPtr + initialization inside the subsystemsInitialized check to prevent + it potentially getting called twice during finalization. (wu) + [Patch #403532, Bug #219391] + + * win/tclWinSock.c (SocketEventProc): Fixed race condition in + readability of socket on Windows. + [Patch #410674, Bug #219205 #219333] + + * win/tcl.m4: added imm32.lib to LIBS_GUI for Tk IME support. + + * win/Makefile.in (install-doc): improved install-* targets to use + their base build dependency. + +2001-03-29 Mo DeJong + + * tests/interp.test: Print out warning when + testinterpdelete command is not defined. + Add tests that checks to make sure a + child interp inherits the parent's cwd. + +2001-03-29 Jeff Hobbs + + * unix/tclUnixPipe.c (TclpCreateTempFile): prevent potential race + condition and security leak in tmp filename creation. + (max) [Patch #402924] + + * unix/configure: + * unix/tcl.m4: corrected IRIX-5.x config to not use -n32. + (english) [Patch #403626] + + * unix/tclUnixThrd.c (Tcl_ConditionWait): fixed handling of + timeout for threads (corrects excessive CPU usage issue for Tk on + Unix in threaded Tcl environment). (ruppert) [Bug #411603] + +2001-03-26 Donal K. Fellows + + * win/tclWinInt.h (tclWinTCharEncoding): Removed as now a static + variable in win/tclWin32Dll.c instead. + +2001-03-23 Jeff Hobbs + + * generic/tclVar.c (Tcl_ArrayObjCmd): Corrected retrieval of + resultPtr to prevent possible corruption. + + * generic/tclNamesp.c (Tcl_Import): Correctly freed a DString. + (lavana) [Patch #403755] + +2001-03-14 Don Porter + * library/package.tcl (pkg_mkIndex): Added patch from Vince + Darley to make [pkg_mkIndex -verbose] even more verbose. + [Bug 219349, Patch 403529] + +2001-03-13 Donal K. Fellows + + * generic/tclCmdMZ.c (Tcl_StringObjCmd): A missing + {return TCL_OK;} was causing memory corruption. [Bug #408002] + + * generic/tclExecute.c (TclDeleteExecEnv, GrowEvaluationStack, + TclExecuteByteCode): Added some casts to ClientData that are + apparently needed on some architectures. + +2001-03-02 Donal K. Fellows + + * generic/tclExecute.c (TclExecuteByteCode): Fixed bug that could + pass pointers to freed memory to command implementations, which + most obviously caused some weird behaviour with [info level], but + could have caused problems with user code and command traces too. + [Bug 404865, Patch 405436] + +2001-02-15 Donal K. Fellows + + * generic/tclCmdMZ.c (Tcl_SplitObjCmd): Improved efficiency of + splitting strings into individual characters by adding hash so + that only one Tcl_Obj per character is created. Improves + performance of splitting of short strings and makes a huge + difference to splitting of long strings, such as is done in the + mime package in tcllib. [Bug #131523] + +2001-01-30 Don Porter + * generic/tclIO.c (CopyData): Moved code that updates the count + of how many bytes are left to copy. Corrects bug that when + writing occurs in the background, the copy loop could be + escaped without updating the count, causing CopyData() to try + to copy more bytes than the toRead value originally passed to + TclCopyChannel(), leading to hangs and misreporting of number + of bytes copied. [Bug 118203, Patch 103432] + +2001-01-04 Don Porter + * tests/unixInit.test: + * unix/tclUnixInit.c (TclpInitLibraryPath): + * win/tclWinInit.c (TclpInitLibraryPath): Several entries in + the library path ($tcl_libPath) are determined relative to the + absolute path of the executable. When the executable is + installed in or near the root directory of the file system, + relative pathnames were being incorrectly generated, and in + the worst case, memory access violations were crashing the program. + [Bug 119416, Patch 102972] + +2000-12-14 Don Porter + + * generic/tclExecute.c: + * tests/expr-old.test: Re-wrote Tcl's [expr rand()] and + [expr srand($seed)] implementations, fixing a range error + on some 64-bit platforms. Added tests that detect the bug. + The rewrite changes the seed -> sequence map on 64-bit + platforms, only for seed >= 2^31, a slight incompatibility. + [Bug 121072, Patch 102781] + +2000-12-10 Don Porter + + * library/init.tcl: + * library/msgcat/msgcat.tcl: + * library/msgcat/pkgIndex.tcl: + * library/opt/optparse.tcl: + * library/opt/pkgIndex.tcl: Where [uplevel] is used in a proc + to evaluate a Tcl built-in command in the caller's context, + the built-in commands are now fully namespace-qualified. This + prevents problems when the caller context is in a namespace where + the built-in command name has been used by a command in the + namespace. (For example, [::ns::set] might be called instead + of the intended [::set]). [Bug #119422, Patch #102545] + +2000-12-09 jeff hobbs + + * docs/scan.n: + * tests/scan.test: + * generic/tclScan.c (Tcl_ScanObjCmd): changed %o and %x to use + strtoul instead of strtol to correctly preserve scan<>format + conversion of large integers. [Patch #102663, Bug #124600] + + * generic/tclExecute.c (TclExecuteByteCode): Commited patch fixing + handling of {!} in expressions. [Patch #102702] + +2000-12-08 jeff hobbs + + * library/init.tcl: Added support for PATHEXT variable in + auto_execok, recognizing the proper set of executable extensions + on Windows. [Patch #102719] + +2000-12-08 Andreas Kupries + + * generic/tclEncoding.c (LoadTableEncoding): Changed dangerous + code to something less critical. This fixes bug 119417, part A + without affecting the speed when loading encodings. + +2000-11-24 Donal K. Fellows + + * generic/tclExecute.c (TclExecuteByteCode): Logical negation "!" + can now handle string booleans, provided those values are placed + in variables. + + * tests/expr.test (expr-13.17): Check that [expr {!$var}] can + negate the string-versions of booleans "yes", "false", etc. + + * library/tcltest/tcltest.tcl (getMatchingFiles, + getMatchingDirectories): + * tools/man2html.tcl (doDir): + * tools/man2help.tcl (doDir): + * library/package.tcl (tclPkgUnknown,tclMacPkgSearch): + * library/safe.tcl (AddSubDirs): [glob] uses -directory instead of + unsafe [file join] to fix Bug #123313 + + * generic/tclIndexObj.c: + * generic/tclTestObj.c (TestindexobjCmd): Changed internal + representation of index objects to fix Bug #119082; fix + shouldn't be visible to outside world... + + * generic/tclTest.c (TestGetIndexFromObjStructObjCmd): + * tests/indexObj.test: (indexObj-6.*) Added to test for presence + of Bug #119082. + +2000-11-23 Donal K. Fellows + + * generic/tclCmdIL.c (Tcl_LsortObjCmd): Fixed memory leak from Bug + #119398 + + * library/init.tcl (unknown): Added specific level parameters to + all uplevel invokations to boost performance; didn't dare touch + the "namespace inscope" stuff though, since it looks sensitive + to me! Should fix Bug #123217, though testing is tricky... + +2000-11-16 Andreas Kupries + + * win/tclWinPort.h (line 69): Changed reference to winsock2.h into + winsock.h. This was a leftover from a foray into using winsock + version 2 (History lesson from Scott Redman and Jeff + Hobbs). This code was no problem when compiling Tcl itself, but + could trip extensions. Fixes bug 122568. + +2000-11-02 David Gravereaux + + * generic/tclEvent.c: tclLibraryPath Tcl_Obj didn't have a way + to share its data among threads. This caused Tcl_Init() to + always fail in threads. Added a way to pass the data around + with a global char*. [BUG: 5301] + +2000-11-02 Jeff Hobbs + + * unix/configure: + * unix/dltest/configure: + * win/configure: + * tools/configure: checked in configure scripts so people doing + CVS checkouts aren't required to have autoconf. Changes to + configure.in in the future will require the corresponding + configure script to also be re-autoconf'ed and checked in. + + * win/makefile.vc: + * win/tcl.m4: makefile fixes for Win64 support + + * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): minor cast + changes. + +2000-11-01 Jeff Hobbs + + * unix/tcl.m4: removed use of -lbsd and -ldl for AIX-5. + + * tests/subst.test: added tests for non-zero return code handling + by subst. + * generic/tclParse.c (Tcl_EvalEx): corrected handling of non-zero, + non-error return code cases for subst. [BUG: 119829] + + * generic/tclVar.c (TclVarTraceExists): Corrected excessive mem + use when info exists was called on a non-existent array element. + [BUG: 119213, 119336] + +2000-10-30 David Gravereaux + + * win/configure.in: + * win/Makefile.in: + * win/makefile.vc: + * win/tcl.rc: + * win/tclsh.rc: Added logic to derive filenames better in the resource + scripts based on compile options. + +2000-10-30 Jeff Hobbs + + * unix/tclUnixInit.c: added default encoding map from + "ja_JP.eucJP" to "euc-jp". (takahashi) + + * tests/clock.test: corrected clock-2.* test numbering + + * unix/configure.in (SC_TCL_LINK_LIBS): removed code that was + commented out (it had been moved to tcl.m4's SC_TCL_LINK_LIBS + already). + + * unix/tcl.m4: consolidated gettimeofday check for AIX. + +2000-10-27 Jeff Hobbs + + * unix/configure.in: + * unix/tcl.m4: added support for AIX-5. + + * generic/tclIO.c (Tcl_NotifyChannel): removed #ifdef around code + for old channel structures, placed preserve/release around statePtr + * generic/tclIO.c (CloseChannel): the statePtr for a channel was + not being freed when the last channel in a stack was freed, + causing a mem leak. + + * unix/tclUnixChan.c: updated channel types to strict + TCL_CHANNEL_VERSION_2 style to avoid compiler warnings. They work + either way, but this avoids compiler warnings (that worries people). + +2000-10-26 David Gravereaux + + * win/tclWinFile.c (TclpMatchFilesTypes): NULL was being set to + "attr" which was a DWORD. Changed NULL to zero because a 'void *' + can't be set to a DWORD to avoid the compiler warning. + +2000-10-20 Jeff Hobbs + + * win/tclWinFile.c (TclpMatchFilesTypes): made the stat call only + occur when necessary (for 'glob' command). Significantly speeds + up glob command from 8.3. [BUG: 6216] + +2000-10-06 David Gravereaux + + * win/tclWinChan.c: moved Win2K bug case test with GetStdHandle() + from TclpGetDefaultStdChannel into Tcl_MakeFileChannel to enable + a more general method in detecting invalid OS handles rather than + just a specific known case. [BUG: 5971] + +2000-10-06 Jeff Hobbs + + * tests/cmdAH.test: extra tests for 'file channels' that include + multiple interpreter tests and channel sharing + * generic/tclIO.c (Tcl_GetChannelNamesEx): corrected function (and + consequently 'file channels') to return channels that are actually + registered for this specific interp, rather than this thread. + +2000-09-29 Jeff Hobbs + + * win/tclWinSerial.c (SerialGetOptionProc): corrected reporting of + space parity on Windows (Eason) [Bug 6057]. + + * win/Makefile.in: commented use of TESTFLAGS + * unix/Makefile.in: added TESTFLAGS to test target to + conform with Windows makefile and TEA style. + + * tests/stack.test: prevented possible crash on systems with low + default stacksize (Tru64, AIX) in infinite recursion test. A + solution to check remaining stack space in the core is best, but + hard to do in a cross-platform manner. + + * generic/tclIOGT.c (FLUSH_DELAY): renamed DELAY define to + FLUSH_DELAY to avoid defn conflict using Tru64's cc. + +2000-09-28 Jeff Hobbs + + * tools/tcl.wse.in: added tclPlatDecls.h and tkPlatDecls.h to the + Windows .exe install. + + * tests/fCmd.test (fCmd-6.20): corrected test to remove + c:/tcl8975@ after creating it. + + * tests/fileName.test: cleaned up the testing of glob patterns for + c:/globTest (Windows) to directly create/remove directory. +2000-09-27 Jeff Hobbs + + * generic/tclIO.c (StopCopy): fixed a bug introduced by a partial + fix in 8.3.2 that didn't set nonBlocking correctly when resetting + the flags for the write side. [Bug: 6261] + + *************************************************************** + ** END OF ASYNC BACKPORT LOG (8.4aCVS 2001-04-03 -> 8.3.3) ** + *************************************************************** + +2000-08-08 Jeff Hobbs + + 8.3.2 RELEASE finalized + + * changes: updated for release notes version of ChangeLog + + * library/msgcat1.0/pkgIndex.tcl: + * library/msgcat1.0/msgcat.tcl: bumped msgcat version to 1.1. + +2000-08-07 Jeff Hobbs + + * doc/ChnlStack.3: + * doc/CrtChannel.3: updated the docs to be aware of the + TCL_CHANNEL_VERSION_2 style of Tcl channels. + + * generic/tclIO.c (Tcl_CreateChannel): added assertion to verify + that the new channel versioning will be binary compatible with + older channel drivers. + + * BACKPORTED FROM 8.4 (HEAD) BRANCH: * doc/memory.n: Man page for Tcl "memory" command, which is created when TCL_MEM_DEBUG is defined at compile time. * doc/TCL_MEM_DEBUG.3: Man page with overall information about @@ -17,22 +773,331 @@ TCL_MEM_DEBUG usage. * doc/DumpActiveMemory.3: Man page for Tcl_DumpActiveMemory, Tcl_InitMemory, and Tcl_ValidateAllMemory [Bug: 1816, 1835]. - * generic/tclCkalloc.c: Fixed some function headers. + * doc/Init.3: Man page for Tcl_Init [Bug: 1820]. + + * unix/Makefile.in: add tclsh.ico and tcl.spec to dist target * unix/mkLinks: Regen'd with new mkLinks.tcl. - * unix/mkLinks.tcl: Fixed indentation, made link setup more intelligent (only do one existance test per man page, instead of one per function). + * doc/AddErrInfo.3: + * doc/ChnlStack.3: + * doc/Exit.3: + * doc/GetIndex.3: + * doc/Notifier.3: + * doc/Object.3: + * doc/RegExp.3: + * doc/SetResult.3: + * doc/SplitList.3: + * doc/Thread.3: Added missing entries to NAME section. + + * doc/AddErrInfo.3: + * doc/CrtObjCmd.3: + * doc/RecEvalObj.3: Changed Tcl_EvalObj to Tcl_EvalObjEx + + * doc/library.n: Added entries for auto_qualify and auto_import + [Bug: 1271]. * doc/library.n: Fixed .SH NAME macro to include each function documented on the page, so that mkLinks will know about the functions listed there, and so that the Windows help file index will get set up correctly [Bug: 1898, 5273]. + + * doc/expr.n: Added documentation for each of the math library + functions that expr supports [Bug: 1054]. + + * doc/regsub.n: correct regsub docs [Bug: 5346] + + * doc/scan.n: minor doc fixes [Bug: 5396] + + * doc/RegExp.3: Replaced instances of "Tcl_GetRegExpInfo" with + "Tcl_RegExpGetInfo", the correct name of the function [Bug: 5901]. + + * doc/package.n: Corrected information about [package forget] + arguments [Bug: 5418]. + + * generic/tclCkalloc.c: Fixed some function headers. + + * tests/clock.test: Added test for "2 days 2 hours ago" style + specifications. + + * generic/tclDate.c: Regenerated from tclGetDate.y. + + * generic/tclGetDate.y: Tweaked grammar to properly handle the + "ago" keyword when it follows multiple relative unit specifiers, + as in "2 days 2 hours ago". [Bug: 5497]. + + * generic/tclClock.c (FormatClock): correct code to handle locale + specific return values from strftime, if any. [Bug: 3345] + + * unix/tclUnixInit.c (TclpSetInitialEncodings): attempt to + correct setlocale calls for XIM support and locale issues. + [BUG: 5422 3345 4236 2522 2521] + + * library/init.tcl (auto_import): added check to see if a valid + pattern was coming in, to avoid simple error cases [Bug: 3326] + + * library/history.tcl: Corrected an off-by-one error in HistIndex, + which was causing [history redo] to start its search at the wrong + event index. [Bug: 1269]. + + * generic/tclPosixStr.c (Tcl_SignalMsg): clarified #defines for + Linux on Sparc to compile correctly. [Bug: 5364] + + * generic/tclEnv.c: cast cleanup [Bug: 5624] + * win/tclWinFCmd.c: cast cleanup [Bug: 5627] + + * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Corrected + caching of the index ptr to account for offsets != sizeof(char *). + [Bug: 5153] + + * tests/opt.test: + * library/opt0.4/optparse.tcl: Applied patch from [Bug: 5922], which + corrected an incorrect use of [string match]. + + * tests/stringObj.test: Tweaked tests to avoid hardcoded + high-ASCII characters (which will fail in multibyte locales); + instead used \uXXXX syntax. [Bug: 3842]. + +2000-08-05 Jeff Hobbs + + * generic/tclIOGT.c (TclChannelTransform): fixed segfault that + would occur when transforming a channel with a proc that did not + yet exist. (Kupries) + + * generic/tclTest.c (TestChannelCmd): added some lint init'ing of + statePtr and chan vars. + +2000-07-28 Mo DeJong + + * win/Makefile.in: + * win/configure.in: + * win/tcl.m4: + * win/tclConfig.sh.in: Back port of gcc for windows + build system from 8.4. + +2000-07-26 Jeff Hobbs + + * merged core-8-3-1-io-rewrite back into core-8-3-1-branch. + The core-8-3-1-io-rewrite branch should now be considered defunct. + + * generic/tclStubInit.c: + * generic/tclDecls.h: + * generic/tcl.decls: + * generic/tcl.h: + * generic/tclIO.c: moved the Tcl_Channel* macros from tcl.h to + tclIO.c and made them proper stubbed functions. These are: + Tcl_ChannelName, Tcl_ChannelVersion, Tcl_ChannelBlockModeProc, + Tcl_ChannelCloseProc, Tcl_ChannelClose2Proc, Tcl_ChannelInputProc, + Tcl_ChannelOutputProc, Tcl_ChannelSeekProc, Tcl_ChannelSetOptionProc, + Tcl_ChannelGetOptionProc, Tcl_ChannelWatchProc, + Tcl_ChannelGetHandleProc, Tcl_ChannelFlushProc, + and Tcl_ChannelHandlerProc. These should be used to access the + Tcl_ChannelType structure instead of direct pointer dereferencing. + + * unix/Makefile.in: undid 07-25 Makefile.in changes because we + don't really want to force all private makefiles on everyone. + This needs to be addressed again in the future. Best possible + solution is to create a tcl/ subdir in the installing include dir + (as is done already with the lib dir). + + * tests/iogt.test: added RCS string, marked tests 2.* to be + unixOnly due to underlying system differences. + + * tests/all.tcl: corrected additional sets by Kupries for testing. + +2000-07-25 Brent Welch + + * unix/Makefile.in: Need to install all the Tcl headers because + Itcl depends on internal headers. + +2000-07-25 Andreas Kupries + + * tests/iogt.test: (line 866f) New tests iogt-6.[01], highlighting + buffering trouble when stacking and unstacking transformations. + iogt-6.0 is solved, see the changes below. iogt-6.1 remains, for + now, due to the perceived complexity of solutions. + + * generic/tclIO.h: (line 139f) struct Channel, added a buffer + queue, to hold data pushed back when stacking a transformation. + + * generic/tclIO.c: + (line 91f, line 7434f) New internal function 'CopyBuffer'. + Derived from 'CopyAndTranslateBuffer', with translation + removed. + (line 1025f, line 1212f): Initialization of new queue. + (line 1164f, Tcl_StackChannel): Pushback of input queue. + (line 1293f, Tcl_UnstackChannel): Discard input and pushback. + (line 3748f, Tcl_ReadRaw): Modified to use data in the push back + area before going to the driver. Uses 'CopyBuffer', s.a. + (line 4702f, GetInput): Modified to use data in the push back + area before going to the driver. + (line 4867f, Tcl_Seek): Modified to take pushback of the topmost + channel in a stack into account. + (line 5620f, Tcl_InputBuffered): See above. Added + 'Tcl_ChannelBuffered'. Analogue to 'Tcl_InputBuffered' but for + the buffer area in the channel. + + * generic/tcl.decls: New public API 'Tcl_ChannelBuffered'. S.a. + +2000-07-19 Jeff Hobbs + + * tests/socket.test: removed doTestsWithRemoteServer constraint + from socket-12.*. It requires 'exec', not a remote server. + Cleaned up some coding errors. + +2000-07-18 Brent Welch + + * win/Makefile.in: Added rules for static tcldde and tclreg libraries. + +2000-07-17 Jeff Hobbs + + * README: + * win/README: + * win/README.binary: + * win/configure.in: + * unix/configure.in: + * unix/tcl.spec: + * tools/tcl.wse.in: + * generic/tcl.h (TCL_RELEASE_SERIAL): updated to patchlevel 8.3.2 + + * unix/Makefile.in: + * win/Makefile.in: + * win/makefile.vc: added tclIOGT.c to objects list to compile. + + * generic/tclStubInit.c: + * generic/tclIntDecls.h: + * generic/tclInt.decls: commented out internal decls for + TclTestChannelCmd and TclTestChannelEventCmd as they were moved to + tclTest.c. Added new decls for TclChannelEventScriptInvoker and + TclChannelTransform. + + * generic/tclIO.h: new file that contains the main internal + structures of Tcl_Channel code to allow for multiple files to + access them. + * generic/tclTest.c: + * generic/tclIO.c: broke into 3 files - tclIO.c core code, tclIO.h + header code, and tclIOGT.c - the giot test code from Kupries. The + channel test code also moved to tclTest.c. + * generic/tclIO.c (CloseChannel): stopped masking out of the + TCL_READABLE|TCL_WRITABLE bits from the state flags in + CloseChannel, instead adding extra intelligence to + CheckChannelErrors with a new CHANNEL_RAW_MODE bit for special + behavior when called from Raw channel APIs. + +2000-07-13 Jeff Hobbs + + * generic/tclIO.c (StackSetBlockMode): moved set of chanPtr + outside of blockModeProc check to avoid infinite loop when + blockModeProc was NULL (Kupries). updated TransformSeekProc to + not call Tcl_Seek directly (Kupries). + + * win/tclWinChan.c: updated fileChannelType to v2 channel struct + * win/tclWinConsole.c: updated consoleChannelType to v2 channel struct + * win/tclWinPipe.c: updated pipeChannelType to v2 channel struct + * win/tclWinSerial.c: updated serialChannelType to v2 channel struct + * win/tclWinSock.c: updated tcpChannelType to v2 channel struct + +2000-07-11 Brent Welch + + * win/tclConfig.sh.in: Cleaned up unix-specific autoconf variables. + +2000-07-11 Jeff Hobbs + + * tests/iogt.test: made tests [345].0 not run by default as they + were failing in the new design, but I'm not convinced that the + returned result isn't correct. + + * generic/tclDecls.h: + * generic/tclStubInit.c: + * generic/tcl.decls: added Tcl_GetTopChannel C API that returns + the current top channel of a channel stack. Tcl_GetChannel was + changed earlier to return the bottommost channel of a stack + because that is the one that is guaranteed to stay around the + longest, and this was needed to compensate for certain + operations that want to look at the state of the main channel. + Most channel APIs already compensate for grabbing the top, so it + shouldn't be needed often. + + * generic/tclIO.c (Tcl_StackChannel, Tcl_UnstackChannel): Added + flushing of buffers (Kupries), removed use of DownChannel macro, + added Tcl_GetTopChannel public API to get to the top channel of + the channel stack (necessary for TLS). Rewrote Tcl_NotifyChannel + for new channel design (Kupries). Did some code cleanup in the + transform code. tclIO.c must still be broken into bits (separate + out test code and giot code, create tclIO.h). + +2000-07-10 Andreas Kupries + + * tests/iogt.test: Reverted some earlier changes as a fix by Jeff + revived the original and correct behaviour. IOW, the tests showed + a genuine error and I didn't see it :(. + + * generic/tclIO.c (Tcl_Read|Write_Raw): Changed to directly use + the drivers and not DoRead|DoWrite. The latter use the buffering + system, encoding and eol-translation and this wreaks havoc with + the data going through the transformations. Both procedures use + CheckForchannelErrors and let it believe that there is no + background copy in progress or else stacked channels could not + be used for that. + + * generic/tclIO.c (TclCopyChannel, CopyData): Moved access to the + topmost channel from the first to the second procedure to make + the decision about that at the last possible time (Callbacks can + change the stacking). + + test suite: failures of iogt-[345].0 + +2000-07-06 Jeff Hobbs + + * tests/iogt.test: new tests for stacked channel stuff based off + new 'testchannel transform|unstack' code (Kupries IOGT extension). + * generic/tcl.decls: + * generic/tcl.h: + * generic/tclDecls.h: + * generic/tclStubsInit.c: + * generic/tclIO.c: complete rewrite of Tcl Channel code for + stacked channels. Channels are now designed to work in a more + stacked fashion with a shared ChannelState data structure. + +2000-06-02 Jeff Hobbs + + * generic/tclIO.c (CloseChannel): removed the &ing out of + (TCL_READABLE|TCL_WRITABLE) from the flags, as CloseChannel does + this on the next pass through for the top channel, and it appeared + to be causing hangs by not allowing the final flush. + +2000-06-01 Jeff Hobbs + + * generic/tclIO.c (CloseChannel): Rewrote CloseChannel code to + unstack a channel during the close process. Fixed a refcount bug + in Tcl_UnstackChannel. [Bug: 5623] + (CloseChannel): further extended CloseChannel in the stacked case + to effect certain operations on the next channel that would have + been done in Tcl_Close. Also added CHANNEL_CLOSED and removed + (TCL_READABLE|TCL_WRITABLE) bits from chanPtr->flags. Changed + final reset of the WatchProc to check the chanDownPtr's (next) + interestMask. + +2000-05-29 Sandeep Tamhankar + + * tests/http.test + * doc/http.n + * library/http2.3/http.tcl: Fixed bug 5741, where unsuccessful + geturl calls sometimes leaked memory and resources (sockets). + Also, switched around some of the logic so that http::wait never + throws an exception. This is because in an asynchronous geturl, + the command callback will probably end up doing all the error + handling anyway, and in an asynchronous situation, the user + expects to check the state when the transaction completes, as + opposed to being thrown an exception. For the http package, this + menas the user can check http::status for "error" and http::error + for the error message after doing the http::wait. 2000-04-26 Jeff Hobbs 8.3.1 RELEASE Index: README ================================================================== --- README +++ README @@ -1,13 +1,13 @@ README: Tcl - This is the Tcl 8.3.1 source distribution. + This is the Tcl 8.3.3 source distribution. You can get any release of Tcl from: - http://dev.scriptics.com/registration/.tml + ftp://ftp.scriptics.com/pub/tcl/ Tcl/Tk is also available through NetCVS: - http://dev.scriptics.com/software/tcltk/netcvs.html + http://tcl.sourceforge.net/ -RCS: @(#) $Id: README,v 1.31 2000/04/26 17:31:19 hobbs Exp $ +RCS: @(#) $Id: README,v 1.31.2.2 2001/04/03 22:08:32 hobbs Exp $ Contents -------- 1. Introduction 2. Documentation @@ -20,38 +20,40 @@ 9. Support and Training 10. Thank You 1. Introduction --------------- -Tcl provides a powerful platform for creating integration -applications that tie together diverse applications, protocols, -devices, and frameworks. When paired with the Tk toolkit, Tcl -provides the fastest and most powerful way to create GUI applications -that run on PCs, Unix, and the Macintosh. Tcl can also be used for a -variety of web-related tasks and for creating powerful command -languages for applications. - -Tcl is maintained, enhanced, and distributed freely as a -service to the Tcl community by Scriptics Corporation. -The official home for Tcl/Tk is on the Scriptics Web site: - - http://dev.scriptics.com +Tcl provides a powerful platform for creating integration applications that +tie together diverse applications, protocols, devices, and frameworks. +When paired with the Tk toolkit, Tcl provides the fastest and most powerful +way to create GUI applications that run on PCs, Unix, and the Macintosh. +Tcl can also be used for a variety of web-related tasks and for creating +powerful command languages for applications. + +Tcl is maintained, enhanced, and distributed freely by the Tcl community. +The home for Tcl/Tk sources and bug/patch database is on SourceForge: + + http://tcl.sourceforge.net/ + +with the Tcl Developer Xchange hosted at: + + http://dev.scriptics.com/ Tcl is a freely available open source package. You can do virtually anything you like with it, such as modifying it, redistributing it, and selling it either in whole or in part. See the file "license.terms" for complete information. 2. Documentation ---------------- +---------------- Extensive documentation is available at our website. The home page for this release, including new features, is http://dev.scriptics.com/software/tcltk/8.3.html Detailed release notes can be found at - http://dev.scriptics.com/software/tcltk/relnotes/tcl8.3.1.txt + http://dev.scriptics.com/software/tcltk/relnotes/tcl8.3.3.txt Information about Tcl itself can be found at http://dev.scriptics.com/scripting/ There are many Tcl books on the market. Most are listed at @@ -69,54 +71,52 @@ "doc" directory and invoke your favorite variant of troff using the normal -man macros, for example ditroff -man Tcl.n -to print Tcl.n. If Tcl has been installed correctly and your "man" -program supports it, you should be able to access the Tcl manual entries -using the normal "man" mechanisms, such as +to print Tcl.n. If Tcl has been installed correctly and your "man" program +supports it, you should be able to access the Tcl manual entries using the +normal "man" mechanisms, such as man Tcl 2b. Windows Documentation ------------------------- -The "doc" subdirectory in this release contains a complete set of -Windows help files for Tcl. Once you install this Tcl release, a -shortcut to the Windows help Tcl documentation will appear in the -"Start" menu: +The "doc" subdirectory in this release contains a complete set of Windows +help files for Tcl. Once you install this Tcl release, a shortcut to the +Windows help Tcl documentation will appear in the "Start" menu: Start | Programs | Tcl | Tcl Help 3. Compiling and installing Tcl ------------------------------- -There are brief notes in the unix/README, win/README, and mac/README -about compiling on these different platforms. There is additional -information about building Tcl from sources at - http://dev.scriptics.com/support/howto/compile.html +There are brief notes in the unix/README, win/README, and mac/README about +compiling on these different platforms. There is additional information +about building Tcl from sources at + http://dev.scriptics.com/doc/howto/compile.html 4. TclPro Development tools -------------------- -A high quality set of commercial development tools is now available to -accelerate your Tcl application development. Scriptics' TclPro -product provides a debugger, static code checker, packaging utility, -and bytecode compiler. Visit the Scriptics Web site at: - - http://dev.scriptics.com/tclpro - -for more information on TclPro and for a free evaluation download. +A high quality set of commercial quality development tools is available to +accelerate your Tcl application development. The TclPro product provides a +debugger, static code checker, packaging utility, and bytecode compiler. +TclPro was open-sourced when Scriptics/Ajuba was acquired by Interwoven. +Visit its home at SourceForge for more information and source/binaries: + + http://tclpro.sourceforge.net/ 5. Tcl newsgroup ---------------- -There is a network news group "comp.lang.tcl" intended for the -exchange of information about Tcl, Tk, and related applications. The -newsgroup is a great place to ask general information questions. For -bug reports, please see the "Support and bug fixes" section below. +There is a network news group "comp.lang.tcl" intended for the exchange of +information about Tcl, Tk, and related applications. The newsgroup is a +great place to ask general information questions. For bug reports, please +see the "Support and bug fixes" section below. 6. Tcl contributed archive -------------------------- Many people have created exciting packages and applications based on Tcl @@ -138,68 +138,48 @@ Resource". 8. Mailing lists ---------------- -A couple of Mailing List have been set up to discuss Macintosh or -Windows related Tcl issues. To subscribe send a message to: - - wintcl-request@tclconsortium.org - mactcl-request@tclconsortium.org - -In the body of the message (the subject will be ignored) put: - - subscribe mactcl Joe Smith - -Replace Joe Smith with your real name, of course. (Use wintcl -instead of mactcl if you're interested in the Windows list.) If you -would just like to receive more information about the list without -subscribing put the line: - - information mactcl - -(or wintcl) in the body instead. +Several mailing lists are hosted at SourceForge to discuss development or +use issues (like Macintosh and Windows topics). For more information and +to subscribe, visit: + + http://sourceforge.net/projects/tcl/ + +and go to the Mailing Lists page. 9. Support and Training ------------------------ -Scriptics is very interested in receiving bug reports, patches, and -suggestions for improvements. We prefer that you send this -information to us via the bug form on the Scriptics Web site, rather -than emailing us directly. The bug form is at: +We are very interested in receiving bug reports, patches, and suggestions +for improvements. We prefer that you send this information to us via the +bug form at SourceForge, rather than emailing us directly. The bug +database is at: - http://dev.scriptics.com/ticket/ + http://tcl.sourceforge.net/ The bug form was designed to give uniform structure to bug reports as well as to solicit enough information to minimize followup questions. -The bug form also includes an option to automatically post your report -on comp.lang.tcl. We strongly recommend that you select this option -because someone else who reads comp.lang.tcl may be able to offer a -solution. We will log and follow-up on each bug, although we cannot promise a -specific turn-around time. Enhancements may take longer and may not -happen at all unless there is widespread support for them (we're -trying to slow the rate at which Tcl/Tk turns into a kitchen sink). -It's very difficult to make incompatible changes to Tcl/Tk at this -point, due to the size of the installed base. - -The Tcl community is too large for us to provide much individual -support for users. If you need help we suggest that you post -questions to comp.lang.tcl. We read the newsgroup and will attempt to -answer esoteric questions for which no-one else is likely to know the -answer. In addition, Tcl/Tk support and training are available -commercially from Scriptics at: - - http://dev.scriptics.com/training - -Also see the following Web site for links to other organizations that -offer Tcl/Tk training: +specific turn-around time. Enhancements may take longer and may not happen +at all unless there is widespread support for them (we're trying to slow +the rate at which Tcl/Tk turns into a kitchen sink). It's very difficult +to make incompatible changes to Tcl/Tk at this point, due to the size of +the installed base. + +The Tcl community is too large for us to provide much individual support +for users. If you need help we suggest that you post questions to +comp.lang.tcl. We read the newsgroup and will attempt to answer esoteric +questions for which no-one else is likely to know the answer. In addition, +see the following Web site for links to other organizations that offer +Tcl/Tk training: http://www.scriptics.com/resource/community/commercial/training 10. Thank You ------------- We'd like to express our thanks to the Tcl community for all the helpful suggestions, bug reports, and patches we have received. Tcl/Tk has improved vastly and will continue to do so with your help. Index: changes ================================================================== --- changes +++ changes @@ -1,8 +1,8 @@ Recent user-visible changes to Tcl: -RCS: @(#) $Id: changes,v 1.56 2000/04/26 00:24:19 hobbs Exp $ +RCS: @(#) $Id: changes,v 1.56.2.3 2001/04/04 23:05:06 hobbs Exp $ 1. No more [command1] [command2] construct for grouping multiple commands on a single command line. 2. Semi-colon now available for grouping commands on a line. @@ -4871,5 +4871,102 @@ 2000-04-24 (bug fix) fixed hang in threaded Unix case when backgrounded exec process was running (dejong) --- Released 8.3.1, April 26, 2000 --- See ChangeLog for details --- + +2000-05-29 (bug fix) corrected resource cleanup in http error cases. +Improved handling of error cases in http. (tamhankar) + +2000-07 (feature rewrite) complete rewrite of the Tcl IO channel subsystem +to correct problems (hangs, core dumps) with the initial stacked channel +implementation. The new system has many more tests for robustness and +scalability. There are new C APIs (see Tcl_CreateChannel), but only +stacked channel drivers are affected (ie: TLS, Trf, iogt). The iogt +extension has been added to the core test code to test the system. +(hobbs, kupries) + **** POTENTIAL INCOMPATABILITY **** + +2000-07 (build improvements) cleanup of the makefiles and configure scripts +to correct support for building under gcc for Windows. (dejong) + +2000-08-07 (bug fix) corrected sizeof error in Tcl_GetIndexFromObjStruct. +(perkins) + +2000-08-07 (bug fix) correct off-by-one error in HistIndex, which was +causing [history redo] to start its search at the wrong event index. (melski) + +2000-08-07 (bug fix) corrected setlocale calls for XIM support and locale +issues in startup. (takahashi) + +2000-08-07 (bug fix) correct code to handle locale specific return values +from strftime, if any. (wagner) + +2000-08-07 (bug fix) tweaked grammar to properly handle the "ago" keyword +when it follows multiple relative unit specifiers, as in +"2 days 2 hours ago". (melski) + +2000-08-07 (doc fixes) numerous doc fixes to correct SEE ALSO and NAME +sections. (english) + +2000-08-07 (bug fix) new man pages memory.n, TCL_MEM_DEBUG.3, Init.3 and +DumpActiveMemory.3. (melski) + +--- Released 8.3.2, August 9, 2000 --- See ChangeLog for details --- + +2001-04-04 (build improvements) redid Mac build structure (steffen) +Corrected IRIX-5* configure (english). Added support for AIX-5 (hobbs). +Added support for Win64 (hobbs). + +2001-04-03 (doc fixes) numerous doc corrections and clarifications. +Update of READMEs. + +2001-03-30 (bug fix) corrected Windows memory error on exit (wu) +Fixed race condition in readability of socket on Windows. + +2001-03-29 (bug fix) prevent potential race condition and security leak in +tmp filename creation on Unix. (max) +Fixed handling of timeout for threads (corrects excessive CPU usage issue +for Tk on Unix in threaded Tcl environment). (ruppert) + +2001-03-13 (bug fix) Correctly possible memory corruption in string map {} +$str (fellows) + +2001-02-15 (feature enhancement) improved efficiency of [string split] +(fellows) + +2001-01-30 (bug fix) Fixed possible hangs in fcopy. (porter) + +2001-01-04 (bug fix) corrected parsing of $tcl_libPath at startup on +Windows (porter) + +2000-12-14 (feature enhancement) improved (s)rand for 64-bit platforms +(porter) + +2000-12-09 (feature enhancement) changed %o and %x to use strtoul instead +of strtol to correctly preserve scan<>format conversion of large integers +(hobbs) +Fixed handling of {!} in expressions (hobbs, fellows) + +2000-11-23 (mem leak) fixed potential memory leak in error case of lsort +(fellows) + +2000-11-02 (bug fix) Corrected sharing of tclLibraryPath in threaded +environment (gravereaux) + +2000-11-01 (mem leak) Corrected excessive mem use of info exists on a +non-existent array element (hobbs) + +2000-10-20 (feature enhancement) call stat only when necessary in 'glob' to +speed up command significantly in base cases (hobbs) + +2000-10-06 (bug fix) corrected [file channels] to only return channels in +the current interpreter (hobbs) + +2000-09-29 (bug fix) corrected reporting of space parity on Windows (Eason) + +2000-09-27 (bug fix) fixed a bug introduced by a partial fix in 8.3.2 that +didn't set nonBlocking correctly when resetting the flags for the write +side (mem leak) Correct mem leak in channels when statePtr was released +(hobbs) + +--- Released 8.3.3, April 6, 2001 --- See ChangeLog for details --- Index: compat/string.h ================================================================== --- compat/string.h +++ compat/string.h @@ -7,11 +7,11 @@ * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: string.h,v 1.3 1999/04/16 00:46:30 stanton Exp $ + * RCS: @(#) $Id: string.h,v 1.3.12.1 2001/04/03 22:54:36 hobbs Exp $ */ #ifndef _STRING #define _STRING @@ -57,14 +57,15 @@ size_t numChars)); extern int strncmp _ANSI_ARGS_((CONST char *s1, CONST char *s2, size_t nChars)); extern char * strncpy _ANSI_ARGS_((char *dst, CONST char *src, size_t numChars)); -extern char * strpbrk _ANSI_ARGS_((CONST char *string, char *chars)); +extern char * strpbrk _ANSI_ARGS_((CONST char *string, + CONST char *chars)); extern char * strrchr _ANSI_ARGS_((CONST char *string, int c)); extern size_t strspn _ANSI_ARGS_((CONST char *string, CONST char *chars)); extern char * strstr _ANSI_ARGS_((CONST char *string, CONST char *substring)); -extern char * strtok _ANSI_ARGS_((CONST char *s, CONST char *delim)); +extern char * strtok _ANSI_ARGS_((char *s, CONST char *delim)); #endif /* _STRING */ Index: doc/AddErrInfo.3 ================================================================== --- doc/AddErrInfo.3 +++ doc/AddErrInfo.3 @@ -3,17 +3,17 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: AddErrInfo.3,v 1.4 2000/04/26 17:00:43 ericm Exp $ +'\" RCS: @(#) $Id: AddErrInfo.3,v 1.4.2.1 2000/08/07 21:29:36 hobbs Exp $ '\" .so man.macros .TH Tcl_AddErrorInfo 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_AddObjErrorInfo, Tcl_AddErrorInfo, Tcl_SetErrorCode, Tcl_SetErrorCodeVA, Tcl_PosixError, Tcl_LogCommandInfo \- record information about errors +Tcl_AddObjErrorInfo, Tcl_AddErrorInfo, Tcl_SetObjErrorCode, Tcl_SetErrorCode, Tcl_SetErrorCodeVA, Tcl_PosixError, Tcl_LogCommandInfo \- record information about errors .SH SYNOPSIS .nf \fB#include \fR .sp \fBTcl_AddObjErrorInfo\fR(\fIinterp, message, length\fR) @@ -80,32 +80,32 @@ See the Tcl overview manual entry for details on the various formats for \fBerrorCode\fR. .PP The \fBerrorInfo\fR variable is gradually built up as an error unwinds through the nested operations. -Each time an error code is returned to \fBTcl_EvalObj\fR -(or \fBTcl_Eval\fR, which calls \fBTcl_EvalObj\fR) +Each time an error code is returned to \fBTcl_EvalObjEx\fR +(or \fBTcl_Eval\fR, which calls \fBTcl_EvalObjEx\fR) it calls the procedure \fBTcl_AddObjErrorInfo\fR to add additional text to \fBerrorInfo\fR describing the command that was being executed when the error occurred. By the time the error has been passed all the way back to the application, it will contain a complete trace of the activity in progress when the error occurred. .PP It is sometimes useful to add additional information to \fBerrorInfo\fR beyond what can be supplied automatically -by \fBTcl_EvalObj\fR. +by \fBTcl_EvalObjEx\fR. \fBTcl_AddObjErrorInfo\fR may be used for this purpose: its \fImessage\fR and \fIlength\fR arguments describe an additional string to be appended to \fBerrorInfo\fR. For example, the \fBsource\fR command calls \fBTcl_AddObjErrorInfo\fR to record the name of the file being processed and the line number on which the error occurred; for Tcl procedures, the procedure name and line number within the procedure are recorded, and so on. The best time to call \fBTcl_AddObjErrorInfo\fR is just after -\fBTcl_EvalObj\fR has returned \fBTCL_ERROR\fR. +\fBTcl_EvalObjEx\fR has returned \fBTCL_ERROR\fR. In calling \fBTcl_AddObjErrorInfo\fR, you may find it useful to use the \fBerrorLine\fR field of the interpreter (see the \fBTcl_Interp\fR manual entry for details). .PP \fBTcl_AddErrorInfo\fR resembles \fBTcl_AddObjErrorInfo\fR Index: doc/ChnlStack.3 ================================================================== --- doc/ChnlStack.3 +++ doc/ChnlStack.3 @@ -1,27 +1,27 @@ '\" -'\" Copyright (c) 1999 Scriptics Corporation +'\" Copyright (c) 1999-2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: ChnlStack.3,v 1.1 1999/07/02 19:51:14 welch Exp $ +'\" RCS: @(#) $Id: ChnlStack.3,v 1.1.10.2 2000/08/08 00:57:52 hobbs Exp $ .so man.macros -.TH Tcl_StackChannel 3 8.2 Tcl "Tcl Library Procedures" +.TH Tcl_StackChannel 3 8.3 Tcl "Tcl Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME -Tcl_StackChannel, Tcl_UnstackChannel \- stack an I/O channel on top of another, and undo it +Tcl_StackChannel, Tcl_UnstackChannel, Tcl_GetStackedChannel \- stack an I/O channel on top of another, and undo it .SH SYNOPSIS .nf .nf \fB#include \fR .sp Tcl_Channel \fBTcl_StackChannel\fR(\fIinterp, typePtr, clientData, mask, channel\fR) .sp -void +int \fBTcl_UnstackChannel\fR(\fIinterp, channel\fR) .sp Tcl_Channel \fBTcl_GetStackedChannel\fR(\fIchannel\fR) .sp @@ -41,62 +41,50 @@ An existing Tcl channel such as returned by \fBTcl_CreateChannel\fR. .BE .SH DESCRIPTION .PP -These functions are for use by extensions that add processing -layers to Tcl I/O channels. Examples include compression -and encryption modules. These functions transparently stack and unstack -a new channel on top of an existing one. -Any number of channels can be stacked together. -.PP -\fBTcl_StackChannel\fR -replaces an existing \fIchannel\fP with a new channel by -the same name that was registered for \fIchannel\fP -with \fBTcl_RegisterChannel\fP. -.PP -\fBTcl_StackChannel\fR -works by creating a new channel structure under the existing -\fIchannel\fP and pushing the existing channel functions -down to the newly created channel. -The hidden channel does no buffering, newline translations, -or character set encoding. -Instead, -the buffering, newline translations, and -encoding functions all remain at the top of the channel stack. -The top-most channel gets changed to use the -I/O channel functions -defined in \fItypePtr\fP, and the channel functions are passed -the new \fIclientData\fP. -The existing \fIchannel\fP structure is modified in place, -so C applications that continue to use \fIchannel\fP will -also see the effects of the new processing module. -A pointer to a new channel structure is returned, -although this new data structure is the one that has been -pushed down below the top of the channel module stack. -(This pointer can also be obtained with the -\fBTcl_GetStackedChannel\fP call.) -If an error occurs when stacking the channel, -NULL is returned instead. -.PP -The \fImask\fP parameter specifies the operations that -are allowed on the new channel. -These can be a subset of the operations allowed on the original channel. -For example, a read-write channel may become -read-only after the \fBTcl_StackChannel\fR call. -.PP -Closing a channel closes the channels stacked below it. -The close of stacked channels is executed in a way that -allows buffered data to be properly flushed. -.PP -\fBTcl_UnstackChannel\fP reverses the process. -The old channel is associated with the channel name, -and the processing module added by -\fBTcl_StackChannel\fR is destroyed. -If there is no old channel, then \fBTcl_UnstackChannel\fP -is equivalent to \fBTcl_Close\fP . +These functions are for use by extensions that add processing layers to Tcl +I/O channels. Examples include compression and encryption modules. These +functions transparently stack and unstack a new channel on top of an +existing one. Any number of channels can be stacked together. +.PP +The implementation of the Tcl channel code was rewritten in 8.3.2 to +correct some problems with the previous implementation with regard to +stacked channels. Anyone using stacked channels or creating stacked +channel drivers should update to the new \fBTCL_CHANNEL_VERSION_2\fR +\fBTcl_ChannelType\fR structure. See \fBTcl_CreateChannel\fR for details. +.PP +\fBTcl_StackChannel\fR stacks a new \fIchannel\fP on an existing channel +with the same name that was registered for \fIchannel\fP by +\fBTcl_RegisterChannel\fP. +.PP +\fBTcl_StackChannel\fR works by creating a new channel structure and +placing itself on top of the channel stack. EOL translation, encoding and +buffering options are shared between all channels in the stack. The hidden +channel does no buffering, newline translations, or character set encoding. +Instead, the buffering, newline translations, and encoding functions all +remain at the top of the channel stack. A pointer to the new top channel +structure is returned. If an error occurs when stacking the channel, NULL +is returned instead. +.PP +The \fImask\fP parameter specifies the operations that are allowed on the +new channel. These can be a subset of the operations allowed on the +original channel. For example, a read-write channel may become read-only +after the \fBTcl_StackChannel\fR call. +.PP +Closing a channel closes the channels stacked below it. The close of +stacked channels is executed in a way that allows buffered data to be +properly flushed. +.PP +\fBTcl_UnstackChannel\fP reverses the process. The old channel is +associated with the channel name, and the processing module added by +\fBTcl_StackChannel\fR is destroyed. If there is no old channel, then +\fBTcl_UnstackChannel\fP is equivalent to \fBTcl_Close\fP. If an error +occurs unstacking the channel, \fBTCL_ERROR\fR is returned, otherwise +\fBTCL_OK\fR is returned. .SH "SEE ALSO" Notifier(3), Tcl_CreateChannel(3), Tcl_OpenFileChannel(3), vwait(n). .SH KEYWORDS channel, compression Index: doc/CrtChannel.3 ================================================================== --- doc/CrtChannel.3 +++ doc/CrtChannel.3 @@ -1,18 +1,19 @@ '\" '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. +'\" Copyright (c) 1997-2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: CrtChannel.3,v 1.5 2000/04/14 23:01:49 hobbs Exp $ +'\" RCS: @(#) $Id: CrtChannel.3,v 1.5.2.2 2001/04/03 22:06:43 hobbs Exp $ .so man.macros -.TH Tcl_CreateChannel 3 8.0 Tcl "Tcl Library Procedures" +.TH Tcl_CreateChannel 3 8.3 Tcl "Tcl Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME -Tcl_CreateChannel, Tcl_GetChannelInstanceData, Tcl_GetChannelType, Tcl_GetChannelName, Tcl_GetChannelHandle, Tcl_GetChannelMode, Tcl_GetChannelBufferSize, Tcl_SetChannelBufferSize, Tcl_NotifyChannel, Tcl_BadChannelOption \- procedures for creating and manipulating channels +Tcl_CreateChannel, Tcl_GetChannelInstanceData, Tcl_GetChannelType, Tcl_GetChannelName, Tcl_GetChannelHandle, Tcl_GetChannelMode, Tcl_GetChannelBufferSize, Tcl_SetChannelBufferSize, Tcl_NotifyChannel, Tcl_BadChannelOption, Tcl_ChannelName, Tcl_ChannelVersion, Tcl_ChannelBlockModeProc, Tcl_ChannelCloseProc, Tcl_ChannelClose2Proc, Tcl_ChannelInputProc, Tcl_ChannelOutputProc, Tcl_ChannelSeekProc, Tcl_ChannelSetOptionProc, Tcl_ChannelGetOptionProc, Tcl_ChannelWatchProc, Tcl_ChannelGetHandleProc, Tcl_ChannelFlushProc, Tcl_ChannelHandlerProc, \- procedures for creating and manipulating channels .SH SYNOPSIS .nf \fB#include \fR .sp Tcl_Channel @@ -24,26 +25,66 @@ Tcl_ChannelType * \fBTcl_GetChannelType\fR(\fIchannel\fR) .sp char * \fBTcl_GetChannelName\fR(\fIchannel\fR) -.VS .sp int \fBTcl_GetChannelHandle\fR(\fIchannel, direction, handlePtr\fR) -.VE .sp int \fBTcl_GetChannelBufferSize\fR(\fIchannel\fR) .sp \fBTcl_SetChannelBufferSize\fR(\fIchannel, size\fR) .sp -.VS \fBTcl_NotifyChannel\fR(\fIchannel, mask\fR) .sp int \fBTcl_BadChannelOption\fR(\fIinterp, optionName, optionList\fR) +.VS 8.3.2 +.sp +char * +\fBTcl_ChannelName\fR(\fItypePtr\fR) +.sp +Tcl_ChannelTypeVersion +\fBTcl_ChannelVersion\fR(\fItypePtr\fR) +.sp +Tcl_DriverBlockModeProc * +\fBTcl_ChannelBlockModeProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverCloseProc * +\fBTcl_ChannelCloseProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverClose2Proc * +\fBTcl_ChannelClose2Proc\fR(\fItypePtr\fR) +.sp +Tcl_DriverInputProc * +\fBTcl_ChannelInputProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverOutputProc * +\fBTcl_ChannelOutputProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverSeekProc * +\fBTcl_ChannelSeekProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverSetOptionProc * +\fBTcl_ChannelSetOptionProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverGetOptionProc * +\fBTcl_ChannelGetOptionProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverWatchProc * +\fBTcl_ChannelWatchProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverGetHandleProc * +\fBTcl_ChannelGetHandleProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverFlushProc * +\fBTcl_ChannelFlushProc\fR(\fItypePtr\fR) +.sp +Tcl_DriverHandlerProc * +\fBTcl_ChannelHandlerProc\fR(\fItypePtr\fR) .VE .sp .SH ARGUMENTS .AS Tcl_EolTranslation *channelName in .AP Tcl_ChannelType *typePtr in @@ -59,24 +100,21 @@ .AP int mask in OR-ed combination of \fBTCL_READABLE\fR and \fBTCL_WRITABLE\fR to indicate whether a channel is readable and writable. .AP Tcl_Channel channel in The channel to operate on. -.VS .AP int direction in \fBTCL_READABLE\fR means the input handle is wanted; \fBTCL_WRITABLE\fR means the output handle is wanted. .AP ClientData *handlePtr out Points to the location where the desired OS-specific handle should be stored. -.VE .AP Tcl_EolTranslation transMode in The translation mode; one of the constants \fBTCL_TRANSLATE_AUTO\fR, \fBTCL_TRANSLATE_CR\fR, \fBTCL_TRANSLATE_LF\fR and \fBTCL_TRANSLATE_CRLF\fR. .AP int size in The size, in bytes, of buffers to allocate in this channel. -.VS .AP int mask in An OR-ed combination of \fBTCL_READABLE\fR, \fBTCL_WRITABLE\fR and \fBTCL_EXCEPTION\fR that indicates events that have occurred on this channel. .AP Tcl_Interp *interp in @@ -85,11 +123,10 @@ Name of the invalid option. .AP char *optionList in Specific options list (space separated words, without "-") to append to the standard generic options list. Can be NULL for generic options error message only. -.VE .BE .SH DESCRIPTION .PP @@ -149,19 +186,17 @@ .PP \fBTcl_GetChannelName\fR returns a string containing the name associated with the channel, or NULL if the \fIchannelName\fR argument to \fBTcl_CreateChannel\fR was NULL. .PP -.VS \fBTcl_GetChannelHandle\fR places the OS-specific device handle associated with \fIchannel\fR for the given \fIdirection\fR in the location specified by \fIhandlePtr\fR and returns \fBTCL_OK\fR. If the channel does not have a device handle for the specified direction, then \fBTCL_ERROR\fR is returned instead. Different channel drivers will return different types of handle. Refer to the manual entries for each driver to determine what type of handle is returned. -.VE .PP \fBTcl_GetChannelMode\fR returns an OR-ed combination of \fBTCL_READABLE\fR and \fBTCL_WRITABLE\fR, indicating whether the channel is open for input and output. .PP @@ -175,62 +210,98 @@ output. The \fIsize\fR argument should be between ten and one million, allowing buffers of ten bytes to one million bytes. If \fIsize\fR is outside this range, \fBTcl_SetChannelBufferSize\fR sets the buffer size to 4096. .PP -.VS \fBTcl_NotifyChannel\fR is called by a channel driver to indicate to the generic layer that the events specified by \fImask\fR have occurred on the channel. Channel drivers are responsible for invoking this function whenever the channel handlers need to be called for the channel. See \fBWATCHPROC\fR below for more details. -.VE .PP -.VS \fBTcl_BadChannelOption\fR is called from driver specific set or get option procs to generate a complete error message. -.VE .SH TCL_CHANNELTYPE .PP A channel driver provides a \fBTcl_ChannelType\fR structure that contains pointers to functions that implement the various operations on a channel; -these operations are invoked as needed by the generic layer. The -\fBTcl_ChannelType\fR structure contains the following fields: +these operations are invoked as needed by the generic layer. The structure +was versioned starting in Tcl 8.3.2/8.4 to correct a problem with stacked +channel drivers. See the \fBOLD_CHANNEL\fR section below for details about +the old structure. .PP -.VS +The \fBTcl_ChannelType\fR structure contains the following fields: .CS typedef struct Tcl_ChannelType { char *\fItypeName\fR; - Tcl_DriverBlockModeProc *\fIblockModeProc\fR; + Tcl_ChannelTypeVersion \fIversion\fR; Tcl_DriverCloseProc *\fIcloseProc\fR; Tcl_DriverInputProc *\fIinputProc\fR; Tcl_DriverOutputProc *\fIoutputProc\fR; Tcl_DriverSeekProc *\fIseekProc\fR; Tcl_DriverSetOptionProc *\fIsetOptionProc\fR; Tcl_DriverGetOptionProc *\fIgetOptionProc\fR; Tcl_DriverWatchProc *\fIwatchProc\fR; Tcl_DriverGetHandleProc *\fIgetHandleProc\fR; Tcl_DriverClose2Proc *\fIclose2Proc\fR; + Tcl_DriverBlockModeProc *\fIblockModeProc\fR; + Tcl_DriverFlushProc *\fIflushProc\fR; + Tcl_DriverHandlerProc *\fIhandlerProc\fR; } Tcl_ChannelType; .CE -.VE .PP The driver must provide implementations for all functions except \fIblockModeProc\fR, \fIseekProc\fR, \fIsetOptionProc\fR, -.VS \fIgetOptionProc\fR, and \fIclose2Proc\fR, which may be specified as -.VE NULL. Other functions that can not be implemented for this type of device should return \fBEINVAL\fR when invoked to indicate that they -are not implemented. +are not implemented, except in the case of \fIflushProc\fR and +\fIhandlerProc\fR, which should specified as NULL if not otherwise defined. +.PP +.VS 8.3.2 +The user should only use the above structure for \fBTcl_ChannelType\fR +instantiation. When referencing fields in a \fBTcl_ChannelType\fR +structure, the following functions should be used to obtain the values: +\fBTcl_ChannelName\fR, \fBTcl_ChannelVersion\fR, +\fBTcl_ChannelBlockModeProc\fR, \fBTcl_ChannelCloseProc\fR, +\fBTcl_ChannelClose2Proc\fR, \fBTcl_ChannelInputProc\fR, +\fBTcl_ChannelOutputProc\fR, \fBTcl_ChannelSeekProc\fR, +\fBTcl_ChannelSetOptionProc\fR, \fBTcl_ChannelGetOptionProc\fR, +\fBTcl_ChannelWatchProc\fR, \fBTcl_ChannelGetHandleProc\fR, +\fBTcl_ChannelFlushProc\fR, or \fBTcl_ChannelHandlerProc\fR. +.PP +The change to the structures was made in such a way that standard channel +types are binary compatible. However, channel types that use stacked +channels (ie: TLS, Trf) have new versions to correspond to the above change +since the previous code for stacked channels had problems. +.VE .SH TYPENAME .PP The \fItypeName\fR field contains a null-terminated string that identifies the type of the device implemented by this driver, e.g. \fBfile\fR or \fBsocket\fR. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelName\fR, which returns +a pointer to the string. +.VE + +.VS 8.3.2 +.SH VERSION +.PP +The \fIversion\fR field should be set to \fBTCL_CHANNEL_VERSION_2\fR. +If it is not set to this value \fBTCL_CHANNEL_VERSION_2\fR, then this +\fBTcl_ChannelType\fR is assumed to have the older structure. See +\fBOLD_CHANNEL\fR for more details. While Tcl will recognize and +function with either structure, stacked channels must be of the newer +style to function correctly. +.PP +This value can be retrieved with \fBTcl_ChannelVersion\fR, which returns +either \fBTCL_CHANNEL_VERSION_2\fR or \fBTCL_CHANNEL_VERSION_1\fR. +.VE .SH BLOCKMODEPROC .PP The \fIblockModeProc\fR field contains the address of a function called by the generic layer to set blocking and nonblocking mode on the device. @@ -253,10 +324,15 @@ \fIinstanceData\fR to record that the channel entered blocking or nonblocking mode and to implement the blocking or nonblocking behavior. For some device types, the blocking and nonblocking behavior can be implemented by the underlying operating system; for other device types, the behavior must be emulated in the channel driver. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelBlockModeProc\fR, which returns +a pointer to the function. +.VE .SH "CLOSEPROC AND CLOSE2PROC" .PP The \fIcloseProc\fR field contains the address of a function called by the generic layer to clean up driver-related information when the channel is @@ -277,11 +353,10 @@ calling the \fIcloseProc\fR. If the close operation is successful, the procedure should return zero; otherwise it should return a nonzero POSIX error code. In addition, if an error occurs and \fIinterp\fR is not NULL, the procedure should store an error message in the interpreter's result. .PP -.VS Alternatively, channels that support closing the read and write sides independently may set \fIcloseProc\fR to \fBTCL_CLOSE2PROC\fR and set \fIclose2Proc\fR to the address of a function that matches the following prototype: .PP @@ -304,10 +379,15 @@ flags cleared. In all cases, the \fIclose2Proc\fR function should return zero if the close operation was successful; otherwise it should return a nonzero POSIX error code. In addition, if an error occurs and \fIinterp\fR is not NULL, the procedure should store an error message in the interpreter's result. +.PP +.VS 8.3.2 +These value can be retrieved with \fBTcl_ChannelCloseProc\fR or +\fBTcl_ChannelClose2Proc\fR, which returns a pointer to the respective +function. .VE .SH INPUTPROC .PP The \fIinputProc\fR field contains the address of a function called by the @@ -347,10 +427,15 @@ return an \fBEAGAIN\fR error. If the input device has no data available whatsoever and the channel is in blocking mode, the function should block for the shortest possible time until at least one byte of data can be read from the device; then, it should return as much data as it can read without blocking. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelInputProc\fR, which returns +a pointer to the function. +.VE .SH OUTPUTPROC .PP The \fIoutputProc\fR field contains the address of a function called by the generic layer to transfer data from an internal buffer to the output device. @@ -383,10 +468,15 @@ error, some data may have been written to the device. .PP If the channel is nonblocking and the output device is unable to absorb any data whatsoever, the function should return -1 with an \fBEAGAIN\fR error without writing any data. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelOutputProc\fR, which returns +a pointer to the function. +.VE .SH SEEKPROC .PP The \fIseekProc\fR field contains the address of a function called by the generic layer to move the access point at which subsequent input or output @@ -412,10 +502,15 @@ The function should store an \fBEINVAL\fR error code if the channel type does not implement seeking. .PP The return value is the new access point or -1 in case of error. If an error occurred, the function should not move the access point. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelSeekProc\fR, which returns +a pointer to the function. +.VE .SH SETOPTIONPROC .PP The \fIsetOptionProc\fR field contains the address of a function called by the generic layer to set a channel type specific option on a channel. @@ -442,21 +537,24 @@ be NULL, which indicates that this channel type supports no type specific options. .PP If the option value is successfully modified to the new value, the function returns \fBTCL_OK\fR. -.VS It should call \fBTcl_BadChannelOption\fR which itself returns \fBTCL_ERROR\fR if the \fIoptionName\fR is unrecognized. -.VE If \fIoptionValue\fR specifies a value for the option that is not supported or if a system call error occurs, the function should leave an error message in the \fIresult\fR field of \fIinterp\fR if \fIinterp\fR is not NULL. The function should also call \fBTcl_SetErrno\fR to store an appropriate POSIX error code. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelSetOptionProc\fR, which returns +a pointer to the function. +.VE .SH GETOPTIONPROC .PP The \fIgetOptionProc\fR field contains the address of a function called by the generic layer to get the value of a channel type specific option on a @@ -463,13 +561,11 @@ channel. \fIgetOptionProc\fR must match the following prototype: .PP .CS typedef int Tcl_DriverGetOptionProc( ClientData \fIinstanceData\fR, -.VS Tcl_Interp *\fIinterp\fR, -.VE char *\fIoptionName\fR, Tcl_DString *\fIdsPtr\fR); .CE .PP \fIOptionName\fR is the name of an option supported by this type of @@ -476,29 +572,31 @@ channel. If the option name is not NULL, the function stores its current value, as a string, in the Tcl dynamic string \fIdsPtr\fR. If \fIoptionName\fR is NULL, the function stores in \fIdsPtr\fR an alternating list of all supported options and their current values. On success, the function returns \fBTCL_OK\fR. -.VS It should call \fBTcl_BadChannelOption\fR which itself returns \fBTCL_ERROR\fR if the \fIoptionName\fR is unrecognized. If a system call error occurs, the function should leave an error message in the \fIresult\fR field of \fIinterp\fR if \fIinterp\fR is not NULL. The function should also call \fBTcl_SetErrno\fR to store an appropriate POSIX error code. -.VE .PP Some options are handled by the generic code and this function is never called to retrieve their value, e.g. \fB-blockmode\fR. Other options are specific to each channel type and the \fIgetOptionProc\fR procedure of the channel driver will get called to implement them. The \fIgetOptionProc\fR field can be NULL, which indicates that this channel type supports no type specific options. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelGetOptionProc\fR, which returns +a pointer to the function. +.VE .SH WATCHPROC -.VS .PP The \fIwatchProc\fR field contains the address of a function called by the generic layer to initialize the event notification mechanism to notice events of interest on this channel. \fIWatchProc\fR should match the following prototype: @@ -506,19 +604,17 @@ .CS typedef void Tcl_DriverWatchProc( ClientData \fIinstanceData\fR, int \fImask\fR); .CE -.VE .PP The \fIinstanceData\fR is the same as the value passed to \fBTcl_CreateChannel\fR when this channel was created. The \fImask\fR argument is an OR-ed combination of \fBTCL_READABLE\fR, \fBTCL_WRITABLE\fR and \fBTCL_EXCEPTION\fR; it indicates events the caller is interested in noticing on this channel. .PP -.VS The function should initialize device type specific mechanisms to notice when an event of interest is present on the channel. When one or more of the designated events occurs on the channel, the channel driver is responsible for calling \fBTcl_NotifyChannel\fR to inform the generic channel module. The driver should take care not to starve @@ -525,10 +621,15 @@ other channel drivers or sources of callbacks by invoking Tcl_NotifyChannel too frequently. Fairness can be insured by using the Tcl event queue to allow the channel event to be scheduled in sequence with other events. See the description of \fBTcl_QueueEvent\fR for details on how to queue an event. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelWatchProc\fR, which returns +a pointer to the function. +.VE .SH GETHANDLEPROC .PP The \fIgetHandleProc\fR field contains the address of a function called by the generic layer to retrieve a device-specific handle from the channel. @@ -539,11 +640,11 @@ ClientData \fIinstanceData\fR, int \fIdirection\fR, ClientData *\fIhandlePtr\fR); .CE .PP -\fIInstanceData is the same as the value passed to +\fIInstanceData\fR is the same as the value passed to \fBTcl_CreateChannel\fR when this channel was created. The \fIdirection\fR argument is either \fBTCL_READABLE\fR to retrieve the handle used for input, or \fBTCL_WRITABLE\fR to retrieve the handle used for output. .PP @@ -552,13 +653,54 @@ channel, according the \fIdirection\fR argument. The handle should be stored in the location referred to by \fIhandlePtr\fR, and \fBTCL_OK\fR should be returned. If the channel is not open for the specified direction, or if the channel implementation does not use device handles, the function should return \fBTCL_ERROR\fR. +.PP +.VS 8.3.2 +This value can be retrieved with \fBTcl_ChannelGetHandleProc\fR, which returns +a pointer to the function. +.VE + +.VS 8.3.2 +.SH FLUSHPROC +.PP +The \fIflushProc\fR field is currently reserved for future use. +It should be set to NULL. +\fIFlushProc\fR should match the following prototype: +.PP +.CS +typedef int Tcl_DriverFlushProc( + ClientData \fIinstanceData\fR); +.CE +.PP +This value can be retrieved with \fBTcl_ChannelFlushProc\fR, which returns +a pointer to the function. + +.SH HANDLERPROC +.PP +The \fIhandlerProc\fR field contains the address of a function called by +the generic layer to notify the channel that an event occured. It should +be defined for stacked channel drivers that wish to be notified of events +that occur on the underlying (stacked) channel. +\fIHandlerProc\fR should match the following prototype: +.PP +.CS +typedef int Tcl_DriverHandlerProc( + ClientData \fIinstanceData\fR, + int \fIinterestMask\fR); +.CE +.PP +\fIInstanceData\fR is the same as the value passed to \fBTcl_CreateChannel\fR +when this channel was created. The \fIinterestMask\fR is an OR-ed +combination of \fBTCL_READABLE\fR or \fBTCL_WRITABLE\fR; it indicates what +type of event occured on this channel. +.PP +This value can be retrieved with \fBTcl_ChannelHandlerProc\fR, which returns +a pointer to the function. .VE -.VS .SH TCL_BADCHANNELOPTION .PP This procedure generates a "bad option" error message in an (optional) interpreter. It is used by channel drivers when a invalid Set/Get option is requested. Its purpose is to concatenate @@ -577,16 +719,42 @@ bad option "-blah": should be one of -blocking, -buffering, -buffersize, -eofchar, -translation, -peername, or -sockname when called with optionList="peername sockname" .CE -"blah" is the optionName argument and "" +``blah'' is the optionName argument and ``'' is a space separated list of specific option words. The function takes good care of inserting minus signs before -each option, commas after, and an "or" before the last option. -.VE +each option, commas after, and an ``or'' before the last option. + +.SH OLD_CHANNEL + +The original (8.3.1 and below) \fBTcl_ChannelType\fR structure contains +the following fields: +.PP +.CS +typedef struct Tcl_ChannelType { + char *\fItypeName\fR; + Tcl_DriverBlockModeProc *\fIblockModeProc\fR; + Tcl_DriverCloseProc *\fIcloseProc\fR; + Tcl_DriverInputProc *\fIinputProc\fR; + Tcl_DriverOutputProc *\fIoutputProc\fR; + Tcl_DriverSeekProc *\fIseekProc\fR; + Tcl_DriverSetOptionProc *\fIsetOptionProc\fR; + Tcl_DriverGetOptionProc *\fIgetOptionProc\fR; + Tcl_DriverWatchProc *\fIwatchProc\fR; + Tcl_DriverGetHandleProc *\fIgetHandleProc\fR; + Tcl_DriverClose2Proc *\fIclose2Proc\fR; +} Tcl_ChannelType; +.CE +.PP +It is still possible to create channel with the above structure. The +internal channel code will determine the version. It is imperative to use +the new \fBTcl_ChannelType\fR structure if you are creating a stacked +channel driver, due to problems with the earlier stacked channel +implementation (in 8.2.0 to 8.3.1). .SH "SEE ALSO" -Tcl_Close(3), Tcl_OpenFileChannel(3), Tcl_SetErrno(3), Tcl_QueueEvent(3) +Tcl_Close(3), Tcl_OpenFileChannel(3), Tcl_SetErrno(3), Tcl_QueueEvent(3), Tcl_StackChannel(3) .SH KEYWORDS blocking, channel driver, channel registration, channel type, nonblocking Index: doc/CrtObjCmd.3 ================================================================== --- doc/CrtObjCmd.3 +++ doc/CrtObjCmd.3 @@ -2,11 +2,11 @@ '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: CrtObjCmd.3,v 1.3 1999/04/16 00:46:30 stanton Exp $ +'\" RCS: @(#) $Id: CrtObjCmd.3,v 1.3.12.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Tcl_CreateObjCommand 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -57,11 +57,11 @@ .SH DESCRIPTION .PP \fBTcl_CreateObjCommand\fR defines a new command in \fIinterp\fR and associates it with procedure \fIproc\fR such that whenever \fIname\fR is -invoked as a Tcl command (e.g., via a call to \fBTcl_EvalObj\fR) +invoked as a Tcl command (e.g., via a call to \fBTcl_EvalObjEx\fR) the Tcl interpreter will call \fIproc\fR to process the command. .PP \fBTcl_CreateObjCommand\fR deletes any existing command \fIname\fR already associated with the interpreter (however see below for an exception where the existing command @@ -118,11 +118,11 @@ it can call \fBTcl_SetObjResult\fR to set the interpreter's result. In the case of a \fBTCL_OK\fR return code this gives the result of the command, and in the case of \fBTCL_ERROR\fR this gives an error message. Before invoking a command procedure, -\fBTcl_EvalObj\fR sets interpreter's result to +\fBTcl_EvalObjEx\fR sets interpreter's result to point to an object representing an empty string, so simple commands can return an empty result by doing nothing at all. .PP The contents of the \fIobjv\fR array belong to Tcl and are not guaranteed to persist once \fIproc\fR returns: \fIproc\fR should @@ -250,12 +250,11 @@ The command corresponding to \fItoken\fR must not have been deleted. The string returned by \fBTcl_GetCommandName\fR is in dynamic memory owned by Tcl and is only guaranteed to retain its value as long as the command isn't deleted or renamed; callers should copy the string if they need to keep it for a long time. -.PP .SH "SEE ALSO" Tcl_CreateCommand, Tcl_ResetResult, Tcl_SetObjResult .SH KEYWORDS bind, command, create, delete, namespace, object Index: doc/CrtSlave.3 ================================================================== --- doc/CrtSlave.3 +++ doc/CrtSlave.3 @@ -2,11 +2,11 @@ '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: CrtSlave.3,v 1.3 1999/08/21 19:40:47 hobbs Exp $ +'\" RCS: @(#) $Id: CrtSlave.3,v 1.3.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_CreateSlave 3 7.6 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -218,13 +218,14 @@ field in \fIinterp\fR contains an error message. If the operation succeeds, it returns \fBTCL_OK\fR. After executing this command, attempts to use \fIcmdName\fR in a call to \fBTcl_Eval\fR or with the Tcl \fBeval\fR command will fail. .PP -.SH "SEE ALSO" For a description of the Tcl interface to multiple interpreters, see \fIinterp(n)\fR. +.SH "SEE ALSO" +interp .SH KEYWORDS alias, command, exposed commands, hidden commands, interpreter, invoke, master, slave, Index: doc/DetachPids.3 ================================================================== --- doc/DetachPids.3 +++ doc/DetachPids.3 @@ -3,32 +3,41 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: DetachPids.3,v 1.2 1998/09/14 18:39:48 stanton Exp $ +'\" RCS: @(#) $Id: DetachPids.3,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_DetachPids 3 "" Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_DetachPids, Tcl_ReapDetachedProcs \- manage child processes in background +Tcl_DetachPids, Tcl_ReapDetachedProcs, Tcl_WaitPid \- manage child processes in background .SH SYNOPSIS .nf \fB#include \fR .sp \fBTcl_DetachPids\fR(\fInumPids, pidPtr\fR) .sp \fBTcl_ReapDetachedProcs\fR() +.sp +Tcl_Pid +\fBTcl_WaitPid\fR(\fIpid, statPtr, options\fR) .SH ARGUMENTS .AS int *statusPtr .AP int numPids in Number of process ids contained in the array pointed to by \fIpidPtr\fR. .AP int *pidPtr in Address of array containing \fInumPids\fR process ids. +.AP Tcl_Pid pid in +The id of the process (pipe) to wait for. +.AP int* statPtr out +The result of waiting on a process (pipe). Either 0 or ECHILD. +.AP int options +The options controlling the wait. WNOHANG specifies not to wait when +checking the process. .BE - .SH DESCRIPTION .PP \fBTcl_DetachPids\fR and \fBTcl_ReapDetachedProcs\fR provide a mechanism for managing subprocesses that are running in background. These procedures are needed because the parent of a process must @@ -55,8 +64,14 @@ for any code outside of Tcl to invoke \fBTcl_ReapDetachedProcs\fR. However, if you call \fBTcl_DetachPids\fR in situations where the \fBexec\fR command may never get executed, you may wish to call \fBTcl_ReapDetachedProcs\fR from time to time so that background processes can be cleaned up. +.PP +\fBTcl_WaitPid\fR is a thin wrapper around the facilities provided by +the operating system to wait on the end of a spawned process and to +check a whether spawned process is still running. It is used by +\fBTcl_ReapDetachedProcs\fR and the channel system to portably access +the operating system. .SH KEYWORDS background, child, detach, process, wait Index: doc/Eval.3 ================================================================== --- doc/Eval.3 +++ doc/Eval.3 @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: Eval.3,v 1.6 2000/04/14 23:01:50 hobbs Exp $ +'\" RCS: @(#) $Id: Eval.3,v 1.6.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_Eval 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -64,13 +64,13 @@ .AP int numBytes in The number of bytes in \fIscript\fR, not including any null terminating character. If \-1, then all characters up to the first null byte are used. .AP char *script in -Points to first byte of script to execute. This script must be in -writable memory: temporary modifications are made to it during -parsing. +Points to first byte of script to execute (NULL terminated and UTF-8). +This script must be in writable memory: temporary modifications are made +to it during parsing. .AP char *string in String forming part of a Tcl script. .AP va_list argList in An argument list which must have been initialised using \fBTCL_VARARGS_START\fR, and cleared using \fBva_end\fR. @@ -108,15 +108,18 @@ \fIobjv\fR. \fBTcl_EvalObjv\fR evaluates the command and returns a completion code and result just like \fBTcl_EvalObjEx\fR. .PP \fBTcl_Eval\fR is similar to \fBTcl_EvalObjEx\fR except that the script to be executed is supplied as a string instead of an object and no compilation -occurs. The string is parsed and executed directly (using -\fBTcl_EvalObjv\fR) instead of compiling it and executing the bytecodes. -In situations where it is known that the script will never be executed -again, \fBTcl_Eval\fR may be faster than \fBTcl_EvalObjEx\fR. -\fBTcl_Eval\fR returns a completion code and result just like +occurs. The string should be a proper UTF-8 string as converted by +\fBTcl_ExternalToUtfDString\fR or \fBTcl_ExternalToUtf\fR when it is known +to possibly contain upper ascii characters who's possible combinations +might be a UTF-8 special code. The string is parsed and executed directly +(using \fBTcl_EvalObjv\fR) instead of compiling it and executing the +bytecodes. In situations where it is known that the script will never be +executed again, \fBTcl_Eval\fR may be faster than \fBTcl_EvalObjEx\fR. +\fBTcl_Eval\fR returns a completion code and result just like \fBTcl_EvalObjEx\fR. Note: for backward compatibility with versions before Tcl 8.0, \fBTcl_Eval\fR copies the object result in \fIinterp\fR to \fIinterp->result\fR (use is deprecated) where it can be accessed directly. This makes \fBTcl_Eval\fR somewhat slower than \fBTcl_EvalEx\fR, which doesn't do the copy. Index: doc/Exit.3 ================================================================== --- doc/Exit.3 +++ doc/Exit.3 @@ -2,17 +2,17 @@ '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: Exit.3,v 1.3 1999/04/16 00:46:31 stanton Exp $ +'\" RCS: @(#) $Id: Exit.3,v 1.3.12.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Tcl_Exit 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_Exit, Tcl_Finalize, Tcl_FinalizeThread, Tcl_CreateExitHandler, Tcl_DeleteExitHandler, Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler \- end the application or thread (and invoke exit handlers) +Tcl_Exit, Tcl_Finalize, Tcl_CreateExitHandler, Tcl_DeleteExitHandler, Tcl_ExitThread, Tcl_FinalizeThread, Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler \- end the application or thread (and invoke exit handlers) .SH SYNOPSIS .nf \fB#include \fR .sp \fBTcl_Exit\fR(\fIstatus\fR) Index: doc/GetIndex.3 ================================================================== --- doc/GetIndex.3 +++ doc/GetIndex.3 @@ -2,17 +2,17 @@ '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: GetIndex.3,v 1.5 1999/08/13 19:01:04 welch Exp $ +'\" RCS: @(#) $Id: GetIndex.3,v 1.5.8.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Tcl_GetIndexFromObj 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_GetIndexFromObj \- lookup string in table of keywords +Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct \- lookup string in table of keywords .SH SYNOPSIS .nf \fB#include \fR .sp int Index: doc/Notifier.3 ================================================================== --- doc/Notifier.3 +++ doc/Notifier.3 @@ -3,11 +3,11 @@ '\" Copyright (c) 1995-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: Notifier.3,v 1.7 1999/05/06 20:13:22 stanton Exp $ +'\" RCS: @(#) $Id: Notifier.3,v 1.7.12.1 2000/08/07 21:29:37 hobbs Exp $ '\" .so man.macros .TH Notifier 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -335,14 +335,14 @@ to that event source. However, the first element of the structure must be a structure of type \fBTcl_Event\fR, and the address of this structure is used when communicating between the event source and the rest of the notifier. A \fBTcl_Event\fR has the following definition: .CS -typedef struct Tcl_Event { +typedef struct { Tcl_EventProc *\fIproc\fR; struct Tcl_Event *\fInextPtr\fR; -}; +} Tcl_Event; .CE The event source must fill in the \fIproc\fR field of the event before calling \fBTcl_QueueEvent\fR. The \fInextPtr\fR is used to link together the events in the queue and should not be modified by the event source. @@ -595,8 +595,8 @@ \fBTcl_GetServiceMode\fR returns the current value of the service mode. .VE .SH "SEE ALSO" \fBTcl_CreateFileHandler\fR, \fBTcl_DeleteFileHandler\fR, \fBTcl_Sleep\fR, -\fBTcl_DoOneEvent\fR, \fBThreads.3\fR +\fBTcl_DoOneEvent\fR, \fBThread(3)\fR .SH KEYWORDS event, notifier, event queue, event sources, file events, timer, idle, service mode, threads Index: doc/Object.3 ================================================================== --- doc/Object.3 +++ doc/Object.3 @@ -2,17 +2,17 @@ '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: Object.3,v 1.4 1999/08/09 16:30:34 hobbs Exp $ +'\" RCS: @(#) $Id: Object.3,v 1.4.10.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_Obj 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_NewObj, Tcl_DuplicateObj, Tcl_IncrRefCount, Tcl_DecrRefCount, Tcl_IsShared \- manipulate Tcl objects +Tcl_NewObj, Tcl_DuplicateObj, Tcl_IncrRefCount, Tcl_DecrRefCount, Tcl_IsShared, Tcl_InvalidateStringRep \- manipulate Tcl objects .SH SYNOPSIS .nf \fB#include \fR .sp Tcl_Obj * Index: doc/ObjectType.3 ================================================================== --- doc/ObjectType.3 +++ doc/ObjectType.3 @@ -2,11 +2,11 @@ '\" Copyright (c) 1996-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: ObjectType.3,v 1.2 1998/09/14 18:39:49 stanton Exp $ +'\" RCS: @(#) $Id: ObjectType.3,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_ObjType 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -53,11 +53,11 @@ in the table of all object types supported by Tcl. The argument \fItypePtr\fR points to a Tcl_ObjType structure that describes the new type by giving its name and by supplying pointers to four procedures that implement the type. -If the type table already containes a type +If the type table already contains a type with the same name as in \fItypePtr\fR, it is replaced with the new type. The Tcl_ObjType structure is described in the section \fBTHE TCL_OBJTYPE STRUCTURE\fR below. .PP Index: doc/RecEvalObj.3 ================================================================== --- doc/RecEvalObj.3 +++ doc/RecEvalObj.3 @@ -2,11 +2,11 @@ '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: RecEvalObj.3,v 1.2 1998/09/14 18:39:49 stanton Exp $ +'\" RCS: @(#) $Id: RecEvalObj.3,v 1.2.18.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_RecordAndEvalObj 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -31,25 +31,25 @@ .BE .SH DESCRIPTION .PP \fBTcl_RecordAndEvalObj\fR is invoked to record a command as an event -on the history list and then execute it using \fBTcl_EvalObj\fR +on the history list and then execute it using \fBTcl_EvalObjEx\fR (or \fBTcl_GlobalEvalObj\fR if the TCL_EVAL_GLOBAL bit is set in \fIflags\fR). -It returns a completion code such as TCL_OK just like \fBTcl_EvalObj\fR, +It returns a completion code such as TCL_OK just like \fBTcl_EvalObjEx\fR, as well as a result object containing additional information (a result value or error message) that can be retrieved using \fBTcl_GetObjResult\fR. If you don't want the command recorded on the history list then -you should invoke \fBTcl_EvalObj\fR instead of \fBTcl_RecordAndEvalObj\fR. +you should invoke \fBTcl_EvalObjEx\fR instead of \fBTcl_RecordAndEvalObj\fR. Normally \fBTcl_RecordAndEvalObj\fR is only called with top-level commands typed by the user, since the purpose of history is to allow the user to re-issue recently-invoked commands. If the \fIflags\fR argument contains the TCL_NO_EVAL bit then the command is recorded without being evaluated. .SH "SEE ALSO" -Tcl_EvalObj, Tcl_GetObjResult +Tcl_EvalObjEx, Tcl_GetObjResult .SH KEYWORDS command, event, execute, history, interpreter, object, record Index: doc/RegExp.3 ================================================================== --- doc/RegExp.3 +++ doc/RegExp.3 @@ -4,17 +4,17 @@ '\" Copyright (c) 1998-1999 Scriptics Corportation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: RegExp.3,v 1.6 1999/12/21 23:57:33 hobbs Exp $ +'\" RCS: @(#) $Id: RegExp.3,v 1.6.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_RegExpMatch 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_RegExpMatch, Tcl_RegExpCompile, Tcl_RegExpExec, Tcl_RegExpRange, Tcl_GetRegExpFromObj, Tcl_RegExpMatchObj, Tcl_GetRegExpInfo \- Pattern matching with regular expressions +Tcl_RegExpMatch, Tcl_RegExpCompile, Tcl_RegExpExec, Tcl_RegExpRange, Tcl_GetRegExpFromObj, Tcl_RegExpMatchObj, Tcl_RegExpExecObj, Tcl_RegExpGetInfo \- Pattern matching with regular expressions .SH SYNOPSIS .nf \fB#include \fR .sp int @@ -36,11 +36,11 @@ \fBTcl_GetRegExpFromObj\fR(\fIinterp\fR, \fIpatObj\fR, \fIcflags\fR) .sp int \fBTcl_RegExpExecObj\fR(\fIinterp\fR, \fIregexp\fR, \fIobjPtr\fR, \fIoffset\fR, \fInmatches\fR, \fIeflags\fR) .sp -\fBTcl_GetRegExpInfo\fR(\fIregexp\fR, \fIinfoPtr\fR) +\fBTcl_RegExpGetInfo\fR(\fIregexp\fR, \fIinfoPtr\fR) .VE 8.1 .SH ARGUMENTS .AS Tcl_Interp *interp .AP Tcl_Interp *interp in @@ -97,11 +97,11 @@ .AP int eflags in OR-ed combination of the values TCL_REG_NOTBOL and TCL_REG_NOTEOL. See below for more information. .AP Tcl_RegExpInfo *infoPtr out The address of the location where information about a previous match -should be stored by \fBTcl_GetRegExpInfo\fR. +should be stored by \fBTcl_RegExpGetInfo\fR. .VE 8.1 .BE .SH DESCRIPTION .PP @@ -168,11 +168,11 @@ If there is no range corresponding to \fIindex\fR then NULL is stored in \fI*firstPtr\fR and \fI*lastPtr\fR. .PP .VS 8.1 \fBTcl_GetRegExpFromObj\fR, \fBTcl_RegExpExecObj\fR, and -\fBTcl_GetRegExpInfo\fR are object interfaces that provide the most +\fBTcl_RegExpGetInfo\fR are object interfaces that provide the most direct control of Henry Spencer's regular expression library. For users that need to modify compilation and execution options directly, it is recommended that you use these interfaces instead of calling the internal regexp functions. These interfaces handle the details of UTF to Unicode translations as well as providing improved performance @@ -183,11 +183,11 @@ contain a compiled regular expression it will attempt to create one from the string in the object and assign it to the internal representation of the \fIpatObj\fR. The return value of this function is of type \fBTcl_RegExp\fR. The return value is a token for this compiled form, which can be used in subsequent calls to -\fBTcl_RegExpExecObj\fR or \fBTcl_GetRegExpInfo\fR. If an error +\fBTcl_RegExpExecObj\fR or \fBTcl_RegExpGetInfo\fR. If an error occurs while compiling the regular expression then \fBTcl_GetRegExpFromObj\fR returns NULL and leaves an error message in the interpreter result. The regular expression token can be used as long as the internal representation of \fIpatObj\fR refers to the compiled form. The \fIeflags\fR argument is a bitwise OR of @@ -249,11 +249,11 @@ an empty string before any newline in addition to its normal function. .TP \fBTCL_REG_NOSUB\fR Compile for matching that reports only success or failure, not what was matched. This reduces compile overhead and may improve -performance. Subsequent calls to \fBTcl_GetRegExpInfo\fR or +performance. Subsequent calls to \fBTcl_RegExpGetInfo\fR or \fBTcl_RegExpRange\fR will not report any match information. .TP \fBTCL_REG_CANMATCH\fR Compile for matching that reports the potential to complete a partial match given more text (see below). @@ -292,11 +292,11 @@ The last character in the string will not be treated as the end of a line or the end of the string, so '$' will not match there. Note that this flag has no effect on how `\fB\eZ\fR' matches. .RE .PP -\fBTcl_GetRegExpInfo\fR retrieves information about the last match +\fBTcl_RegExpGetInfo\fR retrieves information about the last match performed with a given regular expression \fIregexp\fR. The \fIinfoPtr\fR argument contains a pointer to a structure that is defined as follows: .PP .CS Index: doc/SetResult.3 ================================================================== --- doc/SetResult.3 +++ doc/SetResult.3 @@ -3,17 +3,17 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: SetResult.3,v 1.5 2000/04/14 23:01:53 hobbs Exp $ +'\" RCS: @(#) $Id: SetResult.3,v 1.5.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_SetResult 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_SetObjResult, Tcl_GetObjResult, Tcl_SetResult, Tcl_GetStringResult, Tcl_AppendResult, Tcl_AppendResultVA, Tcl_AppendElement, Tcl_ResetResult \- manipulate Tcl result +Tcl_SetObjResult, Tcl_GetObjResult, Tcl_SetResult, Tcl_GetStringResult, Tcl_AppendResult, Tcl_AppendResultVA, Tcl_AppendElement, Tcl_ResetResult, Tcl_FreeResult \- manipulate Tcl result .SH SYNOPSIS .nf \fB#include \fR .sp \fBTcl_SetObjResult\fR(\fIinterp, objPtr\fR) Index: doc/SplitList.3 ================================================================== --- doc/SplitList.3 +++ doc/SplitList.3 @@ -3,17 +3,17 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: SplitList.3,v 1.3 2000/04/14 23:01:53 hobbs Exp $ +'\" RCS: @(#) $Id: SplitList.3,v 1.3.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Tcl_SplitList 3 8.0 Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_SplitList, Tcl_Merge, Tcl_ScanElement, Tcl_ConvertElement \- manipulate Tcl lists +Tcl_SplitList, Tcl_Merge, Tcl_ScanElement, Tcl_ConvertElement, Tcl_ScanCountedElement, Tcl_ConvertCountedElement \- manipulate Tcl lists .SH SYNOPSIS .nf \fB#include \fR .sp int Index: doc/StrMatch.3 ================================================================== --- doc/StrMatch.3 +++ doc/StrMatch.3 @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: StrMatch.3,v 1.3 1999/05/22 01:20:11 stanton Exp $ +'\" RCS: @(#) $Id: StrMatch.3,v 1.3.10.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH Tcl_StringMatch 3 8.1 Tcl "Tcl Library Procedures" .BS .SH NAME @@ -16,25 +16,22 @@ .nf \fB#include \fR .sp int \fBTcl_StringMatch\fR(\fIstring\fR, \fIpattern\fR) -.VS 8.1 .sp -\fBTcl_StringCaseMatch\fR(\fIstring, pattern, nocase\fR) -.VE 8.1 +int +\fBTcl_StringCaseMatch\fR(\fIstring\fR, \fIpattern\fR, \fInocase\fR) .SH ARGUMENTS .AP char *string in String to test. .AP char *pattern in Pattern to match against string. May contain special characters from the set *?\e[]. -.VS 8.1 .AP int nocase in Specifies whether the match should be done case-sensitive (0) or case-insensitive (1). -.VE 8.1 .BE .SH DESCRIPTION .PP This utility procedure determines whether a string matches Index: doc/Thread.3 ================================================================== --- doc/Thread.3 +++ doc/Thread.3 @@ -3,17 +3,17 @@ '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: Thread.3,v 1.11 2000/04/25 23:03:53 hobbs Exp $ +'\" RCS: @(#) $Id: Thread.3,v 1.11.2.1 2000/08/07 21:29:38 hobbs Exp $ '\" .so man.macros .TH Threads 3 "8.1" Tcl "Tcl Library Procedures" .BS .SH NAME -Tcl_ConditionNotify, Tcl_ConditionWait, Tcl_ConditionFinalize, Tcl_GetThreadData, Tcl_MutexLock, Tcl_MutexUnlock, Tcl_MutexFinalize \- Tcl thread support. +Tcl_ConditionNotify, Tcl_ConditionWait, Tcl_ConditionFinalize, Tcl_GetThreadData, Tcl_MutexLock, Tcl_MutexUnlock, Tcl_MutexFinalize, Tcl_CreateThread \- Tcl thread support. .SH SYNOPSIS .nf \fB#include \fR .sp void @@ -57,10 +57,12 @@ is allocated and initialized to zero the first time each thread calls \fBTcl_GetThreadData\fR. .AP Tcl_ThreadId *idPtr out The refered storage will contain the id of the newly created thread as returned by the operating system. +.AP Tcl_ThreadId id in +Id of the thread waited upon. .AP Tcl_ThreadCreateProc threadProc in This procedure will act as the \fBmain()\fR of the newly created thread. The specified \fIclientData\fR will be its sole argument. .AP ClientData clientData in Arbitrary information. Passed as sole argument to the \fIthreadProc\fR. @@ -67,10 +69,13 @@ .AP int stackSize in The size of the stack given to the new thread. .AP int flags in Bitmask containing flags allowing the caller to modify behaviour of the new thread. +.AP int *result out +The refered storage is used to place the exit code of the thread +waited upon into it. .BE .SH INTRODUCTION Beginning with the 8.1 release, the Tcl core is thread safe, which allows you to incorporate Tcl into multithreaded applications without customizing the Tcl core. To enable Tcl multithreading support, Index: doc/after.n ================================================================== --- doc/after.n +++ doc/after.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: after.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: after.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH after n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -101,9 +101,9 @@ In applications that are not normally event-driven, such as \fBtclsh\fR, the event loop can be entered with the \fBvwait\fR and \fBupdate\fR commands. .SH "SEE ALSO" -bgerror +bgerror(n), concat(n), update(n), vwait(n) .SH KEYWORDS cancel, delay, idle callback, sleep, time Index: doc/append.n ================================================================== --- doc/append.n +++ doc/append.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: append.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: append.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH append n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -26,7 +26,10 @@ This command provides an efficient way to build up long variables incrementally. For example, ``\fBappend a $b\fR'' is much more efficient than ``\fBset a $a$b\fR'' if \fB$a\fR is long. +.SH "SEE ALSO" +concat(n), lappend(n) + .SH KEYWORDS append, variable Index: doc/bgerror.n ================================================================== --- doc/bgerror.n +++ doc/bgerror.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: bgerror.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: bgerror.n,v 1.2.18.2 2001/08/06 22:24:11 andreas_kupries Exp $ '\" .so man.macros .TH bgerror n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -29,40 +29,39 @@ For example, if an error occurs while executing a command specified with the \fBafter\fR command, then it is a background error. For a non-background error, the error can simply be returned up through nested Tcl command evaluations until it reaches the top-level code in the application; then the application can report the error -in whatever way it wishes. -When a background error occurs, the unwinding ends in -the Tcl library and there is no obvious way for Tcl to report -the error. +in whatever way it wishes. When a background error occurs, the +unwinding ends in the Tcl library and there is no obvious way for Tcl +to report the error. .PP When Tcl detects a background error, it saves information about the -error and invokes the \fBbgerror\fR command later as an idle event handler. -Before invoking \fBbgerror\fR, Tcl restores the \fBerrorInfo\fR -and \fBerrorCode\fR variables to their values at the time the -error occurred, then it invokes \fBbgerror\fR with -the error message as its only argument. -Tcl assumes that the application has implemented the \fBbgerror\fR -command, and that the command will report the error in a way that -makes sense for the application. Tcl will ignore any result returned -by the \fBbgerror\fR command as long as no error is generated. -.PP -If another Tcl error occurs within the \fBbgerror\fR command -(for example, because no \fBbgerror\fR command has been defined) -then Tcl reports the error itself by writing a message to stderr. -.PP -If several background errors accumulate before \fBbgerror\fR -is invoked to process them, \fBbgerror\fR will be invoked once -for each error, in the order they occurred. -However, if \fBbgerror\fR returns with a break exception, then -any remaining errors are skipped without calling \fBbgerror\fR. -.PP -Tcl has no default implementation for \fBbgerror\fR. -However, in applications using Tk there is a default -\fBbgerror\fR procedure -which posts a dialog box containing -the error message and offers the user a chance to see a stack -trace showing where the error occurred. +error and invokes the \fBbgerror\fR command later as an idle event +handler. Before invoking \fBbgerror\fR, Tcl restores the +\fBerrorInfo\fR and \fBerrorCode\fR variables to their values at the +time the error occurred, then it invokes \fBbgerror\fR with the error +message as its only argument. Tcl assumes that the application has +implemented the \fBbgerror\fR command, and that the command will +report the error in a way that makes sense for the application. Tcl +will ignore any result returned by the \fBbgerror\fR command as long +as no error is generated. +.PP +If another Tcl error occurs within the \fBbgerror\fR command (for +example, because no \fBbgerror\fR command has been defined) then Tcl +reports the error itself by writing a message to stderr. +.PP +If several background errors accumulate before \fBbgerror\fR is +invoked to process them, \fBbgerror\fR will be invoked once for each +error, in the order they occurred. However, if \fBbgerror\fR returns +with a break exception, then any remaining errors are skipped without +calling \fBbgerror\fR. +.PP +Tcl has no default implementation for \fBbgerror\fR. However, in +applications using Tk there is a default \fBbgerror\fR procedure which +posts a dialog box containing the error message and offers the user a +chance to see a stack trace showing where the error occurred. +.SH "SEE ALSO" +after(n), tclvars(n) .SH KEYWORDS background error, reporting Index: doc/binary.n ================================================================== --- doc/binary.n +++ doc/binary.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1997 by Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: binary.n,v 1.4 2000/04/08 02:35:17 hobbs Exp $ +'\" RCS: @(#) $Id: binary.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH binary n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -20,15 +20,15 @@ .SH DESCRIPTION .PP This command provides facilities for manipulating binary data. The first form, \fBbinary format\fR, creates a binary string from normal -Tcl values. For example, given the values 16 and 22, it might produce -an 8-byte binary string consisting of two 4-byte integers, one for -each of the numbers. The second form of the command, -\fBbinary scan\fR, does the opposite: it extracts data from a binary -string and returns it as ordinary Tcl string values. +Tcl values. For example, given the values 16 and 22, on a 32 bit +architecture, it might produce an 8-byte binary string consisting of +two 4-byte integers, one for each of the numbers. The second form of +the command, \fBbinary scan\fR, does the opposite: it extracts data +from a binary string and returns it as ordinary Tcl string values. .SH "BINARY FORMAT" .PP The \fBbinary format\fR command generates a binary string whose layout is specified by the \fIformatString\fR and whose contents come from @@ -540,9 +540,9 @@ native byte order for the machine. Refer to the \fBbyteOrder\fR element of the \fBtcl_platform\fR array to decide which type character to use when formatting or scanning integers. .SH "SEE ALSO" -format, scan, tclvars +format(n), scan(n), tclvars(n) .SH KEYWORDS binary, format, scan Index: doc/break.n ================================================================== --- doc/break.n +++ doc/break.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: break.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: break.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH break n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -28,7 +28,10 @@ aborts its execution and returns normally. Break exceptions are also handled in a few other situations, such as the \fBcatch\fR command, Tk event bindings, and the outermost scripts of procedure bodies. +.SH "SEE ALSO" +catch(n), continue(n), for(n), foreach(n), while(n) + .SH KEYWORDS abort, break, loop Index: doc/case.n ================================================================== --- doc/case.n +++ doc/case.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: case.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: case.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH case n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -52,8 +52,11 @@ backslash at the end of each line. Since the \fIpatList\fR arguments are in braces in the second form, no command or variable substitutions are performed on them; this makes the behavior of the second form different than the first form in some cases. + +.SH "SEE ALSO" +switch(n) .SH KEYWORDS case, match, regular expression Index: doc/cd.n ================================================================== --- doc/cd.n +++ doc/cd.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: cd.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: cd.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH cd n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -22,7 +22,10 @@ Change the current working directory to \fIdirName\fR, or to the home directory (as specified in the HOME environment variable) if \fIdirName\fR is not given. Returns an empty string. +.SH "SEE ALSO" +filename(n), glob(n), pwd(n) + .SH KEYWORDS working directory Index: doc/close.n ================================================================== --- doc/close.n +++ doc/close.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: close.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: close.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH close n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -53,7 +53,10 @@ .VE .PP The command returns an empty string, and may generate an error if an error occurs while flushing output. +.SH "SEE ALSO" +file(n), open(n), socket(n), eof(n) + .SH KEYWORDS blocking, channel, close, nonblocking Index: doc/concat.n ================================================================== --- doc/concat.n +++ doc/concat.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: concat.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: concat.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH concat n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -34,7 +34,10 @@ .CE as its result. .PP If no \fIarg\fRs are supplied, the result is an empty string. +.SH "SEE ALSO" +append(n), eval(n) + .SH KEYWORDS concatenate, join, lists Index: doc/continue.n ================================================================== --- doc/continue.n +++ doc/continue.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: continue.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: continue.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH continue n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -28,7 +28,10 @@ continues with the next iteration of the loop. Catch exceptions are also handled in a few other situations, such as the \fBcatch\fR command and the outermost scripts of procedure bodies. +.SH "SEE ALSO" +break(n), for(n), foreach(n), while(n) + .SH KEYWORDS continue, iteration, loop Index: doc/dde.n ================================================================== --- doc/dde.n +++ doc/dde.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: dde.n,v 1.5 2000/04/12 18:41:54 hobbs Exp $ +'\" RCS: @(#) $Id: dde.n,v 1.5.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH dde n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -126,9 +126,11 @@ when using \fBwish\fR unless a blocking command is called (such as \fBexec\fR without adding the \fB&\fR to place the process in the background). If for any reason the event queue is not flushed, DDE commands may hang until the event queue is flushed. This can create a deadlock situation. + .SH "SEE ALSO" -tk, winfo, send +tk(n), winfo(n), send(n) + .SH KEYWORDS application, dde, name, remote execution Index: doc/encoding.n ================================================================== --- doc/encoding.n +++ doc/encoding.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1998 by Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: encoding.n,v 1.2 1999/04/16 00:46:34 stanton Exp $ +'\" RCS: @(#) $Id: encoding.n,v 1.2.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH encoding n "8.1" Tcl "Tcl Built-In Commands" .BS .SH NAME @@ -71,9 +71,9 @@ .CE would return the Unicode string "\\u306F", which is the Hiragana letter HA. .SH "SEE ALSO" -Tcl_GetEncoding +Tcl_GetEncoding(3) .SH KEYWORDS encoding Index: doc/eof.n ================================================================== --- doc/eof.n +++ doc/eof.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: eof.n,v 1.2 1998/09/14 18:39:51 stanton Exp $ +'\" RCS: @(#) $Id: eof.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH eof n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -21,7 +21,10 @@ .PP Returns 1 if an end of file condition occurred during the most recent input operation on \fIchannelId\fR (such as \fBgets\fR), 0 otherwise. +.SH "SEE ALSO" +file(n), open(n), close(n), fblocked(n) + .SH KEYWORDS channel, end of file Index: doc/error.n ================================================================== --- doc/error.n +++ doc/error.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: error.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: error.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH error n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -52,7 +52,10 @@ If the \fIcode\fR argument is not present, then \fBerrorCode\fR is automatically reset to ``NONE'' by the Tcl interpreter as part of processing the error generated by the command. +.SH "SEE ALSO" +catch(n), tclvars(n) + .SH KEYWORDS error, errorCode, errorInfo Index: doc/eval.n ================================================================== --- doc/eval.n +++ doc/eval.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: eval.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: eval.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH eval n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -26,5 +26,8 @@ Tcl interpreter recursively, and returns the result of that evaluation (or any error generated by it). .SH KEYWORDS concatenate, evaluate, script + +.SH "SEE ALSO" +catch(n), concat(n), error(n), subs(n), tclvars(n) Index: doc/exec.n ================================================================== --- doc/exec.n +++ doc/exec.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: exec.n,v 1.4 1999/12/09 14:43:47 hobbs Exp $ +'\" RCS: @(#) $Id: exec.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH exec n 7.6 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -299,11 +299,9 @@ .TP \fBUnix\fR\0\0\0\0\0\0\0 The \fBexec\fR command is fully functional and works as described. .SH "SEE ALSO" -open(n) -.VE +error(n), open(n) .SH KEYWORDS execute, pipeline, redirection, subprocess - Index: doc/exit.n ================================================================== --- doc/exit.n +++ doc/exit.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: exit.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: exit.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH exit n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -22,7 +22,10 @@ Terminate the process, returning \fIreturnCode\fR to the system as the exit status. If \fIreturnCode\fR isn't specified then it defaults to 0. +.SH "SEE ALSO" +exec(n), tclvars(n) + .SH KEYWORDS exit, process Index: doc/expr.n ================================================================== --- doc/expr.n +++ doc/expr.n @@ -1,16 +1,16 @@ '\" '\" Copyright (c) 1993 The Regents of the University of California. -'\" Copyright (c) 1994-1997 Sun Microsystems, Inc. +'\" Copyright (c) 1994-2000 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: expr.n,v 1.3 2000/04/28 00:47:49 ericm Exp $ +'\" RCS: @(#) $Id: expr.n,v 1.2.18.1 2000/08/07 21:29:39 hobbs Exp $ '\" .so man.macros -.TH expr n 8.0 Tcl "Tcl Built-In Commands" +.TH expr n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME expr \- Evaluate an expression .SH SYNOPSIS @@ -346,15 +346,14 @@ comparison, and the second is done using string comparison after the second operand is converted to the string \fB18\fR. Because of Tcl's tendency to treat values as numbers whenever possible, it isn't generally a good idea to use operators like \fB==\fR when you really want string comparison and the values of the -operands could be arbitrary; it's better in these cases to use the -\fBstring compare\fR command instead. +operands could be arbitrary; it's better in these cases to use +the \fBstring\fR command instead. .SH "PERFORMANCE CONSIDERATIONS" -.VS .PP Enclose expressions in braces for the best speed and the smallest storage requirements. This allows the Tcl bytecode compiler to generate the best code. .PP @@ -381,9 +380,8 @@ additional instructions to handle this situation. The most expensive code is required for unbraced expressions that contain command substitutions. These expressions must be implemented by generating new code each time the expression is executed. -.VE .SH KEYWORDS arithmetic, boolean, compare, expression, fuzzy comparison Index: doc/fblocked.n ================================================================== --- doc/fblocked.n +++ doc/fblocked.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: fblocked.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: fblocked.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ .so man.macros .TH fblocked n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME @@ -23,10 +23,11 @@ For example, if \fBgets\fR is invoked when there are only three characters available for input and no end-of-line sequence, \fBgets\fR returns an empty string and a subsequent call to \fBfblocked\fR will return 1. .PP + .SH "SEE ALSO" -gets(n), read(n) +gets(n), open(n), read(n) .SH KEYWORDS blocking, nonblocking Index: doc/fileevent.n ================================================================== --- doc/fileevent.n +++ doc/fileevent.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: fileevent.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: fileevent.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH fileevent n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -100,10 +100,10 @@ .PP \fBfileevent\fR is based on the \fBaddinput\fR command created by Mark Diekhans. .SH "SEE ALSO" -bgerror, fconfigure, gets, puts, read +bgerror(n), fconfigure(n), gets(n), puts(n), read(n) .SH KEYWORDS asynchronous I/O, blocking, channel, event handler, nonblocking, readable, script, writable. Index: doc/filename.n ================================================================== --- doc/filename.n +++ doc/filename.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: filename.n,v 1.3 1999/08/21 19:40:48 hobbs Exp $ +'\" RCS: @(#) $Id: filename.n,v 1.3.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH filename n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -193,5 +193,8 @@ more than 3 characters. .SH KEYWORDS current directory, absolute file name, relative file name, volume-relative file name, portability + +.SH "SEE ALSO" +file(n), glob(n) Index: doc/flush.n ================================================================== --- doc/flush.n +++ doc/flush.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: flush.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: flush.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH flush n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -27,9 +27,9 @@ nonblocking mode, the command may return before all buffered output has been flushed; the remainder will be flushed in the background as fast as the underlying file or device is able to absorb it. .SH "SEE ALSO" -open(n), socket(n) +file(n), open(n), socket(n) .SH KEYWORDS blocking, buffer, channel, flush, nonblocking, output Index: doc/for.n ================================================================== --- doc/for.n +++ doc/for.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: for.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: for.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH for n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -54,7 +54,10 @@ for {set x 0} {$x<10} {incr x} { puts "x is $x" } .CE +.SH "SEE ALSO" +break, continue, foreach, while + .SH KEYWORDS for, iteration, looping Index: doc/foreach.n ================================================================== --- doc/foreach.n +++ doc/foreach.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: foreach.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: foreach.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH foreach n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -80,7 +80,11 @@ lappend x $i $j $k } # The value of x is "a d e b f g c {} {}" # There are 3 iterations of the loop. .DE + +.SH "SEE ALSO" +for(n), while(n), break(n), continue(n) + .SH KEYWORDS foreach, iteration, list, looping Index: doc/format.n ================================================================== --- doc/format.n +++ doc/format.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: format.n,v 1.4 1999/11/19 06:33:58 hobbs Exp $ +'\" RCS: @(#) $Id: format.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH format n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -208,7 +208,10 @@ converted as if the \fBl\fR modifier were present (i.e. type \fBdouble\fR is used for the internal representation). If the \fBh\fR modifier is specified then integer values are truncated to \fBshort\fR before conversion. +.SH "SEE ALSO" +sprintf(3), string(n) + .SH KEYWORDS conversion specifier, format, sprintf, string, substitution Index: doc/gets.n ================================================================== --- doc/gets.n +++ doc/gets.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: gets.n,v 1.2 1998/09/14 18:39:52 stanton Exp $ +'\" RCS: @(#) $Id: gets.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH gets n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -42,9 +42,9 @@ only of the end-of-line character(s). The \fBeof\fR and \fBfblocked\fR commands can be used to distinguish these three cases. .SH "SEE ALSO" -eof(n), fblocked(n) +file(n), eof(n), fblocked(n) .SH KEYWORDS blocking, channel, end of file, end of line, line, nonblocking, read Index: doc/glob.n ================================================================== --- doc/glob.n +++ doc/glob.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: glob.n,v 1.7 2000/01/26 03:37:30 hobbs Exp $ +'\" RCS: @(#) $Id: glob.n,v 1.7.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH glob n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -152,8 +152,10 @@ When using the options, \fB\-dir\fR, \fB\-join\fR or \fB\-path\fR, glob assumes the directory separator for the entire pattern is the standard ``:''. When not using these options, glob examines each pattern argument and uses ``/'' unless the pattern contains a ``:''. +.SH "SEE ALSO" +file(n) .SH KEYWORDS exist, file, glob, pattern Index: doc/global.n ================================================================== --- doc/global.n +++ doc/global.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: global.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: global.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH global n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -25,11 +25,15 @@ Global variables are variables in the global namespace. For the duration of the current procedure (and only while executing in the current procedure), any reference to any of the \fIvarname\fRs will refer to the global variable by the same name. +.PP +Please note that this is done by creating local variables that are +linked to the global variables, and therefore that these variables +will be listed by \fBinfo locals\fR like all other local variables. .SH "SEE ALSO" -namespace(n), variable(n) +namespace(n), upvar(n), variable(n) .SH KEYWORDS global, namespace, procedure, variable Index: doc/http.n ================================================================== --- doc/http.n +++ doc/http.n @@ -1,22 +1,22 @@ '\" '\" Copyright (c) 1995-1997 Sun Microsystems, Inc. -'\" Copyright (c) 1999 by Scriptics Corporation. +'\" Copyright (c) 1998-2000 by Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: http.n,v 1.10 2000/04/09 23:55:54 welch Exp $ +'\" RCS: @(#) $Id: http.n,v 1.10.2.2 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH "Http" n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Http \- Client-side implementation of the HTTP/1.0 protocol. .SH SYNOPSIS -\fBpackage require http ?2.2?\fP +\fBpackage require http ?2.3?\fP .sp \fB::http::config \fI?options?\fR .sp \fB::http::geturl \fIurl ?options?\fR .sp @@ -30,11 +30,15 @@ .sp \fB::http::size \fItoken\fR .sp \fB::http::code \fItoken\fR .sp +\fB::http::ncode \fItoken\fR +.sp \fB::http::data \fItoken\fR +.sp +\fB::http::error \fItoken\fR .sp \fB::http::cleanup \fItoken\fR .sp \fB::http::register \fIproto port command\fR .sp @@ -55,13 +59,12 @@ The \fB::http::geturl\fR procedure does a HTTP transaction. Its \fIoptions \fR determine whether a GET, POST, or HEAD transaction is performed. The return value of \fB::http::geturl\fR is a token for the transaction. The value is also the name of an array in the ::http namespace - that contains state -information about the transaction. The elements of this array are -described in the STATE ARRAY section. +that contains state information about the transaction. The elements +of this array are described in the STATE ARRAY section. .PP If the \fB-command\fP option is specified, then the HTTP operation is done in the background. \fB::http::geturl\fR returns immediately after generating the HTTP request and the callback is invoked @@ -260,33 +263,50 @@ any. This sets the \fBstate(status)\fP value to \fIwhy\fP, which defaults to \fBreset\fR, and then calls the registered \fB\-command\fR callback. .TP \fB::http::wait\fP \fItoken\fP This is a convenience procedure that blocks and waits for the transaction to complete. This only works in trusted code because it -uses \fBvwait\fR. +uses \fBvwait\fR. Also, it's not useful for the case where +\fB::http::geturl\fP is called \fIwithout\fP the \fB-command\fP option +because in this case the \fB::http::geturl\fP call doesn't return +until the HTTP transaction is complete, and thus there's nothing to +wait for. .TP \fB::http::data\fP \fItoken\fP This is a convenience procedure that returns the \fBbody\fP element (i.e., the URL data) of the state array. +.TP +\fB::http::error\fP \fItoken\fP +This is a convenience procedure that returns the \fBerror\fP element +of the state array. .TP \fB::http::status\fP \fItoken\fP This is a convenience procedure that returns the \fBstatus\fP element of the state array. .TP \fB::http::code\fP \fItoken\fP This is a convenience procedure that returns the \fBhttp\fP element of the state array. .TP +\fB::http::ncode\fP \fItoken\fP +This is a convenience procedure that returns just the numeric return +code (200, 404, etc.) from the \fBhttp\fP element of the state array. +.TP \fB::http::size\fP \fItoken\fP This is a convenience procedure that returns the \fBcurrentsize\fP -element of the state array. +element of the state array, which represents the number of bytes +received from the URL in the \fB::http::geturl\fP call. .TP \fB::http::cleanup\fP \fItoken\fP This procedure cleans up the state associated with the connection identified by \fItoken\fP. After this call, the procedures like \fB::http::data\fP cannot be used to get information -about the operation. +about the operation. It is \fIstrongly\fP recommended that you call +this function after you're done with a given HTTP request. Not doing +so will result in memory not being freed, and if your app calls +\fB::http::geturl\fP enough times, the memory leak could cause a +performance hit...or worse. .TP \fB::http::register\fP \fIproto port command\fP This procedure allows one to provide custom HTTP transport types such as HTTPS, by registering a prefix, the default port, and the command to execute to create the Tcl \fBchannel\fR. E.g.: @@ -307,23 +327,40 @@ .SH "ERRORS" The \fBhttp::geturl\fP procedure will raise errors in the following cases: invalid command line options, an invalid URL, -or a URL on a non-existent host, +a URL on a non-existent host, +or a URL at a bad port on an existing host. These errors mean that it cannot even start the network transaction. It will also raise an error if it gets an I/O error while writing out the HTTP request header. +For synchronous \fB::http::geturl\fP calls (where \fB-command\fP is +not specified), it will raise an error if it gets an I/O error while +reading the HTTP reply headers or data. Because \fB::http::geturl\fP +doesn't return a token in these cases, it does all the required +cleanup and there's no issue of your app having to call +\fB::http::cleanup\fP. +.PP +For asynchronous \fB::http::geturl\fP calls, all of the above error +situations apply, except that if there's any error while +reading the +HTTP reply headers or data, no exception is thrown. This is because +after writing the HTTP headers, \fB::http::geturl\fP returns, and the +rest of the HTTP transaction occurs in the background. The command +callback can check if any error occurred during the read by calling +\fB::http::status\fP to check the status and if it's \fIerror\fP, +calling \fB::http::error\fP to get the error message. +.PP +Alternatively, if the main program flow reaches a point where it needs +to know the result of the asynchronous HTTP request, it can call +\fB::http::wait\fP and then check status and error, just as the +callback does. .PP -The \fBhttp::wait\fP procedure will raise errors if an I/O error -occurs while reading the HTTP reply headers or data. If the -\fB-command\fP flag is not passed to \fBhttp::geturl\fP, -then it will call \fBhttp::wait\fP and so these errors will -occur in \fBhttp::geturl\fP. -If you get an error from \fBhttp::wait\fP, you must still call -\fBhttp::cleanup\fP to delete the state array. +In any case, you must still call +\fBhttp::cleanup\fP to delete the state array when you're done. .PP There are other possible results of the HTTP transaction determined by examining the status from \fBhttp::status\fP. These are described below. .TP @@ -334,16 +371,15 @@ the numeric error (e.g., 200, 404 or 500) while the \fBhttp::code\fP procedure returns a value like "HTTP 404 File not found". .TP eof If the server closes the socket without replying, then no error -is rasied, but the status of the transaction will be \fBeof\fP. +is raised, but the status of the transaction will be \fBeof\fP. .TP error -In this case \fBhttp::wait\fP should have raised an error. The error message will also be stored in the \fBerror\fP status -array element. +array element, accessible via \fB::http::error\fP. .PP Another error possibility is that \fBhttp::geturl\fP is unable to write all the post query data to the server before the server responds and closes the socket. The error message is saved in the \fBposterror\fP status array @@ -422,11 +458,12 @@ The error, if any, that occurred while writing the post query data to the server. .TP \fBstatus\fR Either \fBok\fR, for successful completion, \fBreset\fR for -user-reset, or \fBerror\fR for an error condition. During the +user-reset, \fBtimeout\fP if a timeout occurred before the transaction +could complete, or \fBerror\fR for an error condition. During the transaction this value is the empty string. .TP \fBtotalsize\fR A copy of the \fBContent-Length\fR meta-data value. .TP @@ -466,13 +503,12 @@ return $token } proc ::http::Progress {args} { puts -nonewline stderr . ; flush stderr } - .DE + .SH "SEE ALSO" safe(n), socket(n), safesock(n) + .SH KEYWORDS security policy, socket - - Index: doc/if.n ================================================================== --- doc/if.n +++ doc/if.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: if.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: if.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH if n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -37,7 +37,10 @@ \fIBodyN\fR may also be omitted as long as \fBelse\fR is omitted too. The return value from the command is the result of the body script that was executed, or an empty string if none of the expressions was non-zero and there was no \fIbodyN\fR. +.SH "SEE ALSO" +expr(n), for(n), foreach(n) + .SH KEYWORDS boolean, conditional, else, false, if, true Index: doc/incr.n ================================================================== --- doc/incr.n +++ doc/incr.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: incr.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: incr.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH incr n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -24,8 +24,11 @@ If \fIincrement\fR is supplied then its value (which must be an integer) is added to the value of variable \fIvarName\fR; otherwise 1 is added to \fIvarName\fR. The new value is stored as a decimal string in variable \fIvarName\fR and also returned as result. + +.SH "SEE ALSO" +expr(n) .SH KEYWORDS add, increment, variable, value Index: doc/join.n ================================================================== --- doc/join.n +++ doc/join.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: join.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: join.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH join n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -23,7 +23,10 @@ This command returns the string formed by joining all of the elements of \fIlist\fR together with \fIjoinString\fR separating each adjacent pair of elements. The \fIjoinString\fR argument defaults to a space character. +.SH "SEE ALSO" +list(n), lappend(n) + .SH KEYWORDS element, join, list, separator Index: doc/lappend.n ================================================================== --- doc/lappend.n +++ doc/lappend.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: lappend.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: lappend.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lappend n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -29,7 +29,10 @@ This command provides a relatively efficient way to build up large lists. For example, ``\fBlappend a $b\fR'' is much more efficient than ``\fBset a [concat $a [list $b]]\fR'' when \fB$a\fR is long. +.SH "SEE ALSO" +list(n), lindex(n), linsert(n), llength(n), lsort(n), lrange(n) + .SH KEYWORDS append, element, list, variable Index: doc/library.n ================================================================== --- doc/library.n +++ doc/library.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: library.n,v 1.13 2000/04/28 00:47:49 ericm Exp $ +'\" RCS: @(#) $Id: library.n,v 1.11.2.2 2001/04/03 22:06:43 hobbs Exp $ .so man.macros .TH library n "8.0" Tcl "Tcl Built-In Commands" .BS .SH NAME auto_execok, auto_import, auto_load, auto_mkindex, auto_mkindex_old, auto_qualify, auto_reset, tcl_findLibrary, parray, tcl_endOfWord, tcl_startOfNextWord, tcl_startOfPreviousWord, tcl_wordBreakAfter, tcl_wordBreakBefore \- standard library of Tcl procedures @@ -302,9 +302,9 @@ It is used to detect errors where \fBunknown\fR recurses on itself infinitely. The variable is unset before \fBunknown\fR returns. .SH "SEE ALSO" -re_syntax(n) +info(n), re_syntax(n) .SH KEYWORDS auto-exec, auto-load, library, unknown, word, whitespace Index: doc/lindex.n ================================================================== --- doc/lindex.n +++ doc/lindex.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: lindex.n,v 1.4 1999/09/21 04:20:36 hobbs Exp $ +'\" RCS: @(#) $Id: lindex.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lindex n 8.2 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -30,8 +30,11 @@ string is returned. If \fIindex\fR has the value \fBend\fR, it refers to the last element in the list, and \fBend\-\fIinteger\fR refers to the last element in the list minus the specified integer offset. +.SH "SEE ALSO" +list(n), lappend(n), linsert(n), llength(n), lsearch(n), lsort(n), +lrange(n), lreplace(n) .SH KEYWORDS element, index, list Index: doc/linsert.n ================================================================== --- doc/linsert.n +++ doc/linsert.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: linsert.n,v 1.3 1999/09/21 04:20:36 hobbs Exp $ +'\" RCS: @(#) $Id: linsert.n,v 1.3.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH linsert n 8.2 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -27,7 +27,10 @@ value \fBend\fR, or if it is greater than or equal to the number of elements in the list, then the new elements are appended to the list. \fBend\-\fIinteger\fR refers to the last element in the list minus the specified integer offset. +.SH "SEE ALSO" +list(n), lappend(n), llength(n) + .SH KEYWORDS element, insert, list Index: doc/list.n ================================================================== --- doc/list.n +++ doc/list.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: list.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: list.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH list n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -39,7 +39,11 @@ while \fBconcat\fR with the same arguments will return .CS \fBa b c d e f {g h}\fR .CE +.SH "SEE ALSO" +lappend(n), lindex(n), linsert(n), llength(n), lsearch(n), lsort(n), +lrange(n), lreplace(n) + .SH KEYWORDS element, list Index: doc/llength.n ================================================================== --- doc/llength.n +++ doc/llength.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: llength.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: llength.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH llength n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -20,7 +20,10 @@ .SH DESCRIPTION .PP Treats \fIlist\fR as a list and returns a decimal string giving the number of elements in it. +.SH "SEE ALSO" +list(n), lindex(n), lrange(n) + .SH KEYWORDS element, list, length Index: doc/load.n ================================================================== --- doc/load.n +++ doc/load.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: load.n,v 1.5 2000/04/14 23:01:55 hobbs Exp $ +'\" RCS: @(#) $Id: load.n,v 1.5.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH load n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -127,9 +127,9 @@ be loaded into the process's address space multiple times. The behavior of this varies from system to system (some systems may detect the redundant loads, others may not). .SH "SEE ALSO" -\fBinfo sharedlibextension\fR, Tcl_StaticPackage, safe(n) +\fBinfo sharedlibextension\fR, Tcl_StaticPackage(3), safe(n) .SH KEYWORDS binary code, loading, safe interpreter, shared library Index: doc/lrange.n ================================================================== --- doc/lrange.n +++ doc/lrange.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: lrange.n,v 1.2 1998/09/14 18:39:53 stanton Exp $ +'\" RCS: @(#) $Id: lrange.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lrange n 7.4 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -33,7 +33,10 @@ Note: ``\fBlrange \fIlist first first\fR'' does not always produce the same result as ``\fBlindex \fIlist first\fR'' (although it often does for simple fields that aren't enclosed in braces); it does, however, produce exactly the same results as ``\fBlist [lindex \fIlist first\fB]\fR'' +.SH "SEE ALSO" +lappend(n), lindex(n), linsert(n), list(n), llength(n), lreplace(n) + .SH KEYWORDS element, list, range, sublist Index: doc/lreplace.n ================================================================== --- doc/lreplace.n +++ doc/lreplace.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: lreplace.n,v 1.4 2000/01/21 18:24:06 ericm Exp $ +'\" RCS: @(#) $Id: lreplace.n,v 1.4.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lreplace n 7.4 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -41,7 +41,11 @@ Each \fIelement\fR argument will become a separate element of the list. If no \fIelement\fR arguments are specified, then the elements between \fIfirst\fR and \fIlast\fR are simply deleted. If \fIlist\fR is empty, any \fIelement\fR arguments are added to the end of the list. +.SH "SEE ALSO" +lappend(n), lindex(n), linsert(n), list(n), llength(n), lrange(n), +lsearch(n), lsort(n) + .SH KEYWORDS element, list, replace Index: doc/lsort.n ================================================================== --- doc/lsort.n +++ doc/lsort.n @@ -4,11 +4,11 @@ '\" Copyright (c) 1999 Scriptics Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: lsort.n,v 1.5 1999/12/21 23:57:33 hobbs Exp $ +'\" RCS: @(#) $Id: lsort.n,v 1.5.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH lsort n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -75,18 +75,102 @@ .CE returns \fB{Second 18} {First 24} {Third 30}\fR. This option is much more efficient than using \fB\-command\fR to achieve the same effect. .RE -.VS 8.3 .TP 20 \fB\-unique\fR If this option is specified, then only the last set of duplicate elements found in the list will be retained. Note that duplicates are determined relative to the comparison used in the sort. Thus if \fI-index 0\fR is used, \fB{1 a}\fR and \fB{1 b}\fR would be considered duplicates and only the second element, \fB{1 b}\fR, would be retained. -.VE + +.SH "NOTES" +.PP +The options to \fBlsort\fR only control what sort of comparison is +used, and do not necessarily constrain what the values themselves +actually are. This distinction is only noticeable when the list to be +sorted has fewer than two elements. +.PP +The \fBlsort\fR command is reentrant, meaning it is safe to use as +part of the implementation of a command used in the \fB\-command\fR +option. + +.SH "EXAMPLES" + +.PP +Sorting a list using ASCII sorting: +.CS +% lsort {a10 B2 b1 a1 a2} +B2 a1 a10 a2 b1 +.CE + +.PP +Sorting a list using Dictionary sorting: +.CS +% lsort -dictionary {a10 B2 b1 a1 a2} +a1 a2 a10 b1 B2 +.CE + +.PP +Sorting lists of integers: +.CS +% lsort -integer {5 3 1 2 11 4} +1 2 3 4 5 11 +% lsort -integer {1 2 0x5 7 0 4 -1} +-1 0 1 2 4 0x5 7 +.CE + +.PP +Sorting lists of floating-point numbers: +.CS +% lsort -real {5 3 1 2 11 4} +1 2 3 4 5 11 +% lsort -real {.5 0.07e1 0.4 6e-1} +0.4 .5 6e-1 0.07e1 +.CE + +.PP +Sorting using indices: +.CS +% # Note the space character before the c +% lsort {{a 5} { c 3} {b 4} {e 1} {d 2}} +{ c 3} {a 5} {b 4} {d 2} {e 1} +% lsort -index 0 {{a 5} { c 3} {b 4} {e 1} {d 2}} +{a 5} {b 4} { c 3} {d 2} {e 1} +% lsort -index 1 {{a 5} { c 3} {b 4} {e 1} {d 2}} +{e 1} {d 2} { c 3} {b 4} {a 5} +.CE + +.PP +Stripping duplicate values using sorting: +.CS +% lsort -unique {a b c a b c a b c} +a b c +.CE + +.PP +More complex sorting using a comparison function: +.CS +% proc compare {a b} { + set a0 [lindex $a 0] + set b0 [lindex $b 0] + if {$a0 < $b0} { + return -1 + } elseif {$a0 > $b0} { + return 1 + } + return [string compare [lindex $a 1] [lindex $b 1]] +} +% lsort -command compare \\ + {{3 apple} {0x2 carrot} {1 dingo} {2 banana}} +{1 dingo} {2 banana} {0x2 carrot} {3 apple} +.CE + +.SH "SEE ALSO" +lappend(n), lindex(n), linsert(n), list(n), llength(n), lrange(n), +lreplace(n), lsearch(n) .SH KEYWORDS element, list, order, sort Index: doc/man.macros ================================================================== --- doc/man.macros +++ doc/man.macros @@ -57,11 +57,11 @@ '\" the option's class in the option database. '\" '\" .UL arg1 arg2 '\" Print arg1 underlined, then print arg2 normally. '\" -'\" RCS: @(#) $Id: man.macros,v 1.3 1999/04/16 00:46:35 stanton Exp $ +'\" RCS: @(#) $Id: man.macros,v 1.3.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" '\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. .if t .wh -1.3i ^B .nr ^l \n(.l .ad b @@ -197,11 +197,11 @@ '\" # SO - start of list of standard options .de SO .SH "STANDARD OPTIONS" .LP .nf -.ta 4c 8c 12c +.ta 5.5c 11c .ft B .. '\" # SE - end of list of standard options .de SE .fi Index: doc/memory.n ================================================================== --- doc/memory.n +++ doc/memory.n @@ -1,11 +1,11 @@ '\" '\" Copyright (c) 1992-1999 by Karl Lehenbauer and Mark Diekhans '\" Copyright (c) 2000 by Scriptics Corporation. '\" All rights reserved. '\" -'\" RCS: @(#) $Id: memory.n,v 1.2 2000/04/28 00:47:49 ericm Exp $ +'\" RCS: @(#) $Id: memory.n,v 1.2.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH memory n 8.1 Tcl "Tcl Built-In Commands" .BS .SH NAME @@ -76,7 +76,5 @@ .SH "SEE ALSO" ckalloc, ckfree, Tcl_ValidateAllMemory, Tcl_DumpActiveMemory, TCL_MEM_DEBUG .SH KEYWORDS memory, debug - - Index: doc/open.n ================================================================== --- doc/open.n +++ doc/open.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: open.n,v 1.9 1999/12/21 23:57:33 hobbs Exp $ +'\" RCS: @(#) $Id: open.n,v 1.9.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH open n 7.6 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -106,10 +106,22 @@ .PP If a new file is created as part of opening it, \fIpermissions\fR (an integer) is used to set the permissions for the new file in conjunction with the process's file mode creation mask. \fIPermissions\fR defaults to 0666. +.PP +'\" Not versioned as advice applies to all recent versions of Tcl. +'\" Prior to that, Tcl didn't really support binary files anyway... +.VS +Note that if you are going to be reading or writing binary data from +the channel created by this command, you should use the +\fBfconfigure\fR command to change the \fB-translation\fR option of +the channel to \fBbinary\fR before transferring any binary data. This +is in contrast to the ``b'' character passed as part of the equivalent +of the \fIaccess\fR parameter to some versions of the C library +\fIfopen()\fR function. +.VE .SH "COMMAND PIPELINES" .PP If the first character of \fIfileName\fR is ``|'' then the remaining characters of \fIfileName\fR are treated as a list of arguments that describe a command pipeline to invoke, in the same style as the @@ -249,11 +261,13 @@ input, but is redirected from a file, then the above problem does not occur. .LP See the PORTABILITY ISSUES section of the \fBexec\fR command for additional information not specific to command pipelines about executing applications on the various platforms + .SH "SEE ALSO" -close(n), filename(n), gets(n), read(n), puts(n), exec(n) -.VE +file(n), close(n), filename(n), fconfigure(n), gets(n), read(n), +puts(n), exec(n), fopen(1) + .SH KEYWORDS access mode, append, create, file, non-blocking, open, permissions, pipeline, process, serial Index: doc/package.n ================================================================== --- doc/package.n +++ doc/package.n @@ -2,21 +2,21 @@ '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: package.n,v 1.3 1999/03/10 05:52:45 stanton Exp $ +'\" RCS: @(#) $Id: package.n,v 1.3.14.2 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH package n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME package \- Facilities for package loading and version control .SH SYNOPSIS .nf -\fBpackage forget \fIpackage\fR +\fBpackage forget ?\fIpackage package ...\fR? \fBpackage ifneeded \fIpackage version\fR ?\fIscript\fR? \fBpackage names\fR \fBpackage present \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? \fBpackage provide \fIpackage \fR?\fIversion\fR? \fBpackage require \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? @@ -41,12 +41,12 @@ primarily by system scripts that maintain the package database. .PP The behavior of the \fBpackage\fR command is determined by its first argument. The following forms are permitted: .TP -\fBpackage forget \fIpackage\fR -Removes all information about \fIpackage\fR from this interpreter, +\fBpackage forget ?\fIpackage package ...\fR? +Removes all information about each specified package from this interpreter, including information provided by both \fBpackage ifneeded\fR and \fBpackage provide\fR. .TP \fBpackage ifneeded \fIpackage version\fR ?\fIscript\fR? This command typically appears only in system configuration @@ -187,7 +187,10 @@ \fBpkg_mkIndex\fR to create package index files. Once you've done this, packages will be loaded automatically in response to \fBpackage require\fR commands. See the documentation for \fBpkg_mkIndex\fR for details. +.SH "SEE ALSO" +msgcat(n), packagens(n), pkgMkIndex(n) + .SH KEYWORDS package, version Index: doc/packagens.n ================================================================== --- doc/packagens.n +++ doc/packagens.n @@ -1,10 +1,10 @@ '\" '\" Copyright (c) 1998-2000 by Scriptics Corporation. '\" All rights reserved. '\" -'\" RCS: @(#) $Id: packagens.n,v 1.2 2000/02/10 10:09:18 hobbs Exp $ +'\" RCS: @(#) $Id: packagens.n,v 1.2.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pkg::create n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -45,8 +45,11 @@ specifies a Tcl library that must be loaded with the \fBsource\fR command. Any number of \fB\-source\fR parameters may be specified. .PP At least one \fB\-load\fR or \fB\-source\fR paramter must be given. + +.SH "SEE ALSO" +package(n) .SH KEYWORDS auto-load, index, package, version Index: doc/pid.n ================================================================== --- doc/pid.n +++ doc/pid.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: pid.n,v 1.2 1998/09/14 18:39:54 stanton Exp $ +'\" RCS: @(#) $Id: pid.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pid n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -28,7 +28,10 @@ that isn't a process pipeline. If no \fIfileId\fR argument is given then \fBpid\fR returns the process identifier of the current process. All process identifiers are returned as decimal strings. +.SH "SEE ALSO" +exec(n), open(n) + .SH KEYWORDS file, pipeline, process identifier Index: doc/pkgMkIndex.n ================================================================== --- doc/pkgMkIndex.n +++ doc/pkgMkIndex.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: pkgMkIndex.n,v 1.9 2000/02/10 10:09:18 hobbs Exp $ +'\" RCS: @(#) $Id: pkgMkIndex.n,v 1.9.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pkg_mkIndex n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -229,8 +229,11 @@ if you load a package before computing the index it masks any other files that provide part of the same package. If you must use \fB\-load\fP, then you must specify the scripts first; otherwise the package loaded from the binary file may mask the package defined by the scripts. + +.SH "SEE ALSO" +package(n) .SH KEYWORDS auto-load, index, package, version Index: doc/proc.n ================================================================== --- doc/proc.n +++ doc/proc.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: proc.n,v 1.2 1998/09/14 18:39:54 stanton Exp $ +'\" RCS: @(#) $Id: proc.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH proc n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -68,7 +68,10 @@ \fBreturn\fR, then its return value is the value of the last command executed in the procedure's body. If an error occurs while executing the procedure body, then the procedure-as-a-whole will return that same error. +.SH "SEE ALSO" +info(n), unknown(n) + .SH KEYWORDS argument, procedure Index: doc/puts.n ================================================================== --- doc/puts.n +++ doc/puts.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: puts.n,v 1.3 1999/04/16 00:46:35 stanton Exp $ +'\" RCS: @(#) $Id: puts.n,v 1.3.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH puts n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -61,9 +61,9 @@ be used in an event-driven fashion with the \fBfileevent\fR command (don't invoke \fBputs\fR unless you have recently been notified via a file event that the channel is ready for more output data). .SH "SEE ALSO" -fileevent(n) +file(n), fileevent(n) .SH KEYWORDS channel, newline, output, write Index: doc/pwd.n ================================================================== --- doc/pwd.n +++ doc/pwd.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: pwd.n,v 1.2 1998/09/14 18:39:54 stanton Exp $ +'\" RCS: @(#) $Id: pwd.n,v 1.2.18.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH pwd n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -19,7 +19,10 @@ .SH DESCRIPTION .PP Returns the path name of the current working directory. +.SH "SEE ALSO" +file(n), cd(n), glob(n), filename(n) + .SH KEYWORDS working directory Index: doc/read.n ================================================================== --- doc/read.n +++ doc/read.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: read.n,v 1.4 1999/05/05 01:19:42 stanton Exp $ +'\" RCS: @(#) $Id: read.n,v 1.4.12.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH read n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -50,9 +50,9 @@ for the channel. See the \fBfconfigure\fR manual entry for a discussion on ways in which \fBfconfigure\fR will alter input. .SH "SEE ALSO" -eof(n), fblocked(n), fconfigure(n) +file(n), eof(n), fblocked(n), fconfigure(n) .SH KEYWORDS blocking, channel, end of line, end of file, nonblocking, read, translation, encoding Index: doc/regexp.n ================================================================== --- doc/regexp.n +++ doc/regexp.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: regexp.n,v 1.9 2000/04/14 06:42:32 hobbs Exp $ +'\" RCS: @(#) $Id: regexp.n,v 1.9.2.1 2001/04/03 22:06:43 hobbs Exp $ '\" .so man.macros .TH regexp n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -125,9 +125,9 @@ portion of the expression that wasn't matched), then the corresponding \fIsubMatchVar\fR will be set to ``\fB\-1 \-1\fR'' if \fB\-indices\fR has been specified or to an empty string otherwise. .SH "SEE ALSO" -re_syntax(n) +re_syntax(n), regsub(n) .SH KEYWORDS match, regular expression, string Index: doc/regsub.n ================================================================== --- doc/regsub.n +++ doc/regsub.n @@ -1,13 +1,14 @@ '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. +'\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: regsub.n,v 1.4 1999/09/21 04:20:36 hobbs Exp $ +'\" RCS: @(#) $Id: regsub.n,v 1.4.2.2 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH regsub n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -53,10 +54,35 @@ Without this switch only the first matching range is found and substituted. If \fB\-all\fR is specified, then ``&'' and ``\e\fIn\fR'' sequences are handled for each substitution using the information from the corresponding match. +.TP 15 +\fB\-expanded\fR +Enables use of the expanded regular expression syntax where +whitespace and comments are ignored. This is the same as specifying +the \fB(?x)\fR embedded option (see METASYNTAX, below). +.TP 15 +\fB\-line\fR +Enables newline-sensitive matching. By default, newline is a +completely ordinary character with no special meaning. With this +flag, `[^' bracket expressions and `.' never match newline, `^' +matches an empty string after any newline in addition to its normal +function, and `$' matches an empty string before any newline in +addition to its normal function. This flag is equivalent to +specifying both \fB\-linestop\fR and \fB\-lineanchor\fR, or the +\fB(?n)\fR embedded option (see METASYNTAX, below). +.TP 15 +\fB\-linestop\fR +Changes the behavior of `[^' bracket expressions and `.' so that they +stop at newlines. This is the same as specifying the \fB(?p)\fR +embedded option (see METASYNTAX, below). +.TP 15 +\fB\-lineanchor\fR +Changes the behavior of `^' and `$' (the ``anchors'') so they match the +beginning and end of a line respectively. This is the same as +specifying the \fB(?w)\fR embedded option (see METASYNTAX, below). .TP 10 \fB\-nocase\fR Upper-case characters in \fIstring\fR will be converted to lower-case before matching against \fIexp\fR; however, substitutions specified by \fIsubSpec\fR use the original unconverted form of \fIstring\fR. @@ -64,13 +90,11 @@ .TP 10 \fB\-start\fR \fIindex\fR Specifies a character index offset into the string to start matching the regular expression at. When using this switch, `^' will not match the beginning of the line, and \\A will still -match the start of the string at \fIindex\fR. If \fB\-indices\fR -is specified, the indices will be indexed starting from the -absolute beginning of the input string. +match the start of the string at \fIindex\fR. \fIindex\fR will be constrained to the bounds of the input string. .VE 8.3 .TP 10 \fB\-\|\-\fR Marks the end of switches. The argument following this one will @@ -79,7 +103,10 @@ The command returns a count of the number of matching ranges that were found and replaced. See the manual entry for \fBregexp\fR for details on the interpretation of regular expressions. +.SH "SEE ALSO" +regexp(n), re_syntax(n) + .SH KEYWORDS match, pattern, regular expression, substitute Index: doc/rename.n ================================================================== --- doc/rename.n +++ doc/rename.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: rename.n,v 1.2 1998/09/14 18:39:54 stanton Exp $ +'\" RCS: @(#) $Id: rename.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH rename n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -26,7 +26,10 @@ (names of containing namespaces). If a command is renamed into a different namespace, future invocations of it will execute in the new namespace. The \fBrename\fR command returns an empty string as result. +.SH "SEE ALSO" +namespace(n), proc(n) + .SH KEYWORDS command, delete, namespace, rename Index: doc/resource.n ================================================================== --- doc/resource.n +++ doc/resource.n @@ -1,11 +1,11 @@ '\" '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. -'\" RCS: @(#) $Id: resource.n,v 1.5 1999/08/21 19:40:48 hobbs Exp $ +'\" RCS: @(#) $Id: resource.n,v 1.5.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH resource n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -147,9 +147,9 @@ .SH "PORTABILITY ISSUES" The resource command is only available on Macintosh. .SH "SEE ALSO" -open +open(n) .SH KEYWORDS open, resource Index: doc/return.n ================================================================== --- doc/return.n +++ doc/return.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: return.n,v 1.2 1998/09/14 18:39:54 stanton Exp $ +'\" RCS: @(#) $Id: return.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH return n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -83,7 +83,10 @@ If the \fB\-errorcode\fR option is specified then \fIcode\fR provides a value for the \fBerrorCode\fR variable. If the option is not specified then \fBerrorCode\fR will default to \fBNONE\fR. +.SH "SEE ALSO" +break(n), continue(n), error(n), proc(n) + .SH KEYWORDS break, continue, error, procedure, return Index: doc/scan.n ================================================================== --- doc/scan.n +++ doc/scan.n @@ -1,22 +1,23 @@ '\" '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. +'\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: scan.n,v 1.4 1999/11/19 06:33:59 hobbs Exp $ +'\" RCS: @(#) $Id: scan.n,v 1.4.2.3 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH scan n 8.3 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME scan \- Parse string using conversion specifiers in the style of sscanf .SH SYNOPSIS -\fBscan \fIstring format varName \fR?\fIvarName ...\fR? +\fBscan \fIstring format \fR?\fIvarName varName ...\fR? .BE .SH INTRODUCTION .PP This command parses fields from an input string in the same fashion as the @@ -45,13 +46,11 @@ must match the next character of \fIstring\fR. When a \fB%\fR is encountered in \fIformat\fR, it indicates the start of a conversion specifier. A conversion specifier contains up to four fields after the \fB%\fR: a \fB*\fR, which indicates that the converted value is to be discarded -.VS 8.1 instead of assigned to a variable; a XPG3 position specifier; a number -.VE 8.1 indicating a maximum field width; and a conversion character. All of these fields are optional except for the conversion character. The fields that are present must appear in the order given above. .PP When \fBscan\fR finds a conversion specifier in \fIformat\fR, it @@ -58,11 +57,10 @@ first skips any white-space characters in \fIstring\fR (unless the specifier is \fB[\fR or \fBc\fR). Then it converts the next input characters according to the conversion specifier and stores the result in the variable given by the next argument to \fBscan\fR. -.VS 8.1 .PP If the \fB%\fR is followed by a decimal number and a \fB$\fR, as in ``\fB%2$d\fR'', then the variable to use is not taken from the next sequential argument. Instead, it is taken from the argument indicated by the number, where 1 corresponds to the first \fIvarName\fR. If @@ -69,11 +67,10 @@ there are any positional specifiers in \fIformat\fR then all of the specifiers must be positional. Every \fIvarName\fR on the argument list must correspond to exactly one conversion specifier or an error is generated, or in the inline case, any position can be specified at most once and the empty positions will be filled in with empty strings. -.VE 8.1 .PP The following conversion characters are supported: .TP 10 \fBd\fR The input field must be a decimal integer. @@ -80,25 +77,33 @@ It is read in and the value is stored in the variable as a decimal string. .TP 10 \fBo\fR The input field must be an octal integer. It is read in and the value is stored in the variable as a decimal string. +.VS 8.4 +If the value exceeds MAX_INT (017777777777 on platforms using 32-bit +integers), it will be truncated to a signed integer. Hence, 037777777777 +will appear as -1 on a 32-bit machine. +.VE 8.4 .TP 10 \fBx\fR The input field must be a hexadecimal integer. It is read in and the value is stored in the variable as a decimal string. -.VS 8.1 +.VS 8.4 +If the value exceeds MAX_INT (0x7FFFFFFF on platforms using 32-bit +integers), it will be truncated to a signed integer. Hence, 0xFFFFFFFF +will appear as -1 on a 32-bit machine. +.VE 8.4 .TP 10 \fBu\fR The input field must be a decimal integer. The value is stored in the variable as an unsigned decimal integer string. .TP 10 \fBi\fR The input field must be an integer. The base (i.e. decimal, octal, or hexadecimal) is determined in the same fashion as described in \fBexpr\fR. The value is stored in the variable as a decimal string. -.VE 8.1 .TP 10 \fBc\fR A single character is read in and its binary value is stored in the variable as a decimal string. Initial white space is not skipped in this case, so the input @@ -124,26 +129,23 @@ \fIchars\fR. The matching string is stored in the variable. If the first character between the brackets is a \fB]\fR then it is treated as part of \fIchars\fR rather than the closing bracket for the set. -.VS 8.1 If \fIchars\fR contains a sequence of the form \fIa\fB\-\fIb\fR then any character between \fIa\fR and \fIb\fR (inclusive) will match. If the first or last character between the brackets is a \fB\-\fR, then it is treated as part of \fIchars\fR rather than indicating a range. -.VE 8.1 .TP 10 \fB[^\fIchars\fB]\fR The input field consists of any number of characters not in \fIchars\fR. The matching string is stored in the variable. If the character immediately following the \fB^\fR is a \fB]\fR then it is treated as part of the set rather than the closing bracket for the set. -.VS 8.1 If \fIchars\fR contains a sequence of the form \fIa\fB\-\fIb\fR then any character between \fIa\fR and \fIb\fR (inclusive) will be excluded from the set. If the first or last character between the brackets is a \fB\-\fR, then @@ -150,11 +152,10 @@ it is treated as part of \fIchars\fR rather than indicating a range. .TP 10 \fBn\fR No input is consumed from the input string. Instead, the total number of chacters scanned from the input string so far is stored in the variable. -.VE 8.1 .LP The number of characters read from the input for a conversion is the largest number that makes sense for that particular conversion (e.g. as many decimal digits as possible for \fB%d\fR, as many octal digits as possible for \fB%o\fR, and so on). @@ -166,14 +167,12 @@ .SH "DIFFERENCES FROM ANSI SSCANF" .PP The behavior of the \fBscan\fR command is the same as the behavior of the ANSI C \fBsscanf\fR procedure except for the following differences: -.VS 8.1 .IP [1] \fB%p\fR conversion specifier is not currently supported. -.VE 8.1 .IP [2] For \fB%c\fR conversions a single character value is converted to a decimal string, which is then assigned to the corresponding \fIvarName\fR; no field width may be specified for this conversion. @@ -181,13 +180,16 @@ The \fBl\fR, \fBh\fR, and \fBL\fR modifiers are ignored; integer values are always converted as if there were no modifier present and real values are always converted as if the \fBl\fR modifier were present (i.e. type \fBdouble\fR is used for the internal representation). -.VS 8.3 .IP [4] +.VS 8.3 If the end of the input string is reached before any conversions have been performed and no variables are given, and empty string is returned. .VE 8.3 +.SH "SEE ALSO" +format(n), sscanf(3) + .SH KEYWORDS conversion specifier, parse, scan Index: doc/seek.n ================================================================== --- doc/seek.n +++ doc/seek.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: seek.n,v 1.3 1999/05/05 01:19:43 stanton Exp $ +'\" RCS: @(#) $Id: seek.n,v 1.3.12.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH seek n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -55,7 +55,10 @@ Note that \fIoffset\fR values are byte offsets, not character offsets. Both \fBseek\fR and \fBtell\fR operate in terms of bytes, not characters, unlike \fBread\fR. .VE 8.1 +.SH "SEE ALSO" +file(n), open(n), close(n), gets(n), tell(n) + .SH KEYWORDS access position, file, seek Index: doc/set.n ================================================================== --- doc/set.n +++ doc/set.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: set.n,v 1.2 1998/09/14 18:39:55 stanton Exp $ +'\" RCS: @(#) $Id: set.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH set n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -42,7 +42,10 @@ or local variable of the procedure unless the \fBglobal\fR command was invoked to declare \fIvarName\fR to be global, or unless a \fBvariable\fR command was invoked to declare \fIvarName\fR to be a namespace variable. +.SH "SEE ALSO" +expr(n), proc(n), trace(n), unset(n) + .SH KEYWORDS read, write, variable Index: doc/split.n ================================================================== --- doc/split.n +++ doc/split.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: split.n,v 1.2 1998/09/14 18:39:55 stanton Exp $ +'\" RCS: @(#) $Id: split.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH split n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -38,7 +38,10 @@ .CS \fBsplit "Hello world" {}\fR .CE returns \fB"H e l l o { } w o r l d"\fR. +.SH "SEE ALSO" +join(n), list(n), string(n) + .SH KEYWORDS list, split, string Index: doc/string.n ================================================================== --- doc/string.n +++ doc/string.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: string.n,v 1.13 1999/12/21 23:57:34 hobbs Exp $ +'\" RCS: @(#) $Id: string.n,v 1.13.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH string n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -332,7 +332,10 @@ contiguous range of alphanumeric (Unicode letters or decimal digits) or underscore (Unicode connector punctuation) characters, or any single character other than these. .VE 8.1 +.SH "SEE ALSO" +expr(n), list(n) + .SH KEYWORDS case conversion, compare, index, match, pattern, string, word, equal, ctype Index: doc/subst.n ================================================================== --- doc/subst.n +++ doc/subst.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: subst.n,v 1.2 1998/09/14 18:39:55 stanton Exp $ +'\" RCS: @(#) $Id: subst.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH subst n 7.4 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -41,8 +41,11 @@ .CS \fBset a 44 subst {xyz {$a}}\fR .CE returns ``\fBxyz {44}\fR'', not ``\fBxyz {$a}\fR''. + +.SH "SEE ALSO" +eval(n) .SH KEYWORDS backslash substitution, command substitution, variable substitution Index: doc/switch.n ================================================================== --- doc/switch.n +++ doc/switch.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: switch.n,v 1.4 1999/09/21 04:20:36 hobbs Exp $ +'\" RCS: @(#) $Id: switch.n,v 1.4.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH switch n 7.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -108,7 +108,10 @@ {format 3} }\fR .CE will return \fB3\fR. +.SH "SEE ALSO" +for(n), if(n), regexp(n) + .SH KEYWORDS switch, match, regular expression Index: doc/tclvars.n ================================================================== --- doc/tclvars.n +++ doc/tclvars.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: tclvars.n,v 1.7 2000/01/21 02:25:06 hobbs Exp $ +'\" RCS: @(#) $Id: tclvars.n,v 1.7.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH tclvars n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -391,8 +391,11 @@ Changes to \fIx\fR represent major changes with probable incompatibilities and changes to \fIy\fR represent small enhancements and bug fixes that retain backward compatibility. The value of this variable is returned by the \fBinfo tclversion\fR command. + +.SH "SEE ALSO" +eval(n) .SH KEYWORDS arithmetic, bytecode, compiler, error, environment, POSIX, precision, subprocess, variables Index: doc/tell.n ================================================================== --- doc/tell.n +++ doc/tell.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: tell.n,v 1.3 1999/05/05 01:19:43 stanton Exp $ +'\" RCS: @(#) $Id: tell.n,v 1.3.12.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH tell n 8.1 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -26,7 +26,10 @@ that this value is in terms of bytes, not characters like \fBread\fR. .VE 8.1 The value returned is -1 for channels that do not support seeking. +.SH "SEE ALSO" +file(n), open(n), close(n), gets(n), seek(n) + .SH KEYWORDS access position, channel, seeking Index: doc/time.n ================================================================== --- doc/time.n +++ doc/time.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: time.n,v 1.2 1998/09/14 18:39:56 stanton Exp $ +'\" RCS: @(#) $Id: time.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH time n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -26,8 +26,11 @@ \fB503 microseconds per iteration\fR .CE which indicates the average amount of time required per iteration, in microseconds. Time is measured in elapsed time, not CPU time. + +.SH "SEE ALSO" +clock(n) .SH KEYWORDS script, time Index: doc/unknown.n ================================================================== --- doc/unknown.n +++ doc/unknown.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: unknown.n,v 1.2 1998/09/14 18:39:56 stanton Exp $ +'\" RCS: @(#) $Id: unknown.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH unknown n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -69,7 +69,10 @@ auto-exec step is skipped. Under normal circumstances the return value from \fBunknown\fR is the return value from the command that was eventually executed. +.SH "SEE ALSO" +info(n), proc(n) + .SH KEYWORDS error, non-existent command Index: doc/update.n ================================================================== --- doc/update.n +++ doc/update.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: update.n,v 1.3 2000/04/14 06:42:32 hobbs Exp $ +'\" RCS: @(#) $Id: update.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH update n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -42,7 +42,10 @@ you are performing a long-running computation but you still want the application to respond to events such as user interactions; if you occasionally call \fBupdate\fR then user input will be processed during the next call to \fBupdate\fR. +.SH "SEE ALSO" +after(n), bgerror(n) + .SH KEYWORDS event, flush, handler, idle, update Index: doc/uplevel.n ================================================================== --- doc/uplevel.n +++ doc/uplevel.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: uplevel.n,v 1.2 1998/09/14 18:39:56 stanton Exp $ +'\" RCS: @(#) $Id: uplevel.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH uplevel n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -72,9 +72,9 @@ the outermost procedure call or the outermost \fBnamespace eval\fR command. Also, \fBuplevel #0\fR evaluates a script at top-level in the outermost namespace (the global namespace). .SH "SEE ALSO" -namespace(n) +namespace(n), upvar(n) .SH KEYWORDS context, level, namespace, stack frame, variables Index: doc/upvar.n ================================================================== --- doc/upvar.n +++ doc/upvar.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: upvar.n,v 1.3 2000/01/21 03:29:13 ericm Exp $ +'\" RCS: @(#) $Id: upvar.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH upvar n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -104,9 +104,9 @@ invoked). In particular, if the array is \fBenv\fR, then changes made to \fImyVar\fR will not be passed to subprocesses correctly. .VE .SH "SEE ALSO" -namespace(n) +global(n), namespace(n), uplevel(n), variable(n) .SH KEYWORDS context, frame, global, level, namespace, procedure, variable Index: doc/variable.n ================================================================== --- doc/variable.n +++ doc/variable.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: variable.n,v 1.3 2000/01/26 21:36:35 ericm Exp $ +'\" RCS: @(#) $Id: variable.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH variable n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -40,11 +40,12 @@ is not defined, it will be visible to the \fBnamespace which\fR command, but not to the \fBinfo exists\fR command. .PP If the \fBvariable\fR command is executed inside a Tcl procedure, it creates local variables -linked to the corresponding namespace variables. +linked to the corresponding namespace variables (and therefore these +variables are listed by \fBinfo locals\fR.) In this way the \fBvariable\fR command resembles the \fBglobal\fR command, although the \fBglobal\fR command only links to variables in the global namespace. If any \fIvalue\fRs are given, they are used to modify the values of the associated namespace variables. @@ -57,9 +58,9 @@ After the variable has been declared, elements within the array can be set using ordinary \fBset\fR or \fBarray\fR commands. .SH "SEE ALSO" -global(n), namespace(n) +global(n), namespace(n), upvar(n) .SH KEYWORDS global, namespace, procedure, variable Index: doc/vwait.n ================================================================== --- doc/vwait.n +++ doc/vwait.n @@ -2,11 +2,11 @@ '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: vwait.n,v 1.3 2000/01/21 02:25:06 hobbs Exp $ +'\" RCS: @(#) $Id: vwait.n,v 1.3.2.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH vwait n 8.0 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -33,8 +33,11 @@ if an event handler sets \fIvarName\fR and then itself calls \fBvwait\fR to wait for a different variable, then it may not return for a long time. During this time the top-level \fBvwait\fR is blocked waiting for the event handler to complete, so it cannot return either. + +.SH "SEE ALSO" +global(n) .SH KEYWORDS event, variable, wait Index: doc/while.n ================================================================== --- doc/while.n +++ doc/while.n @@ -3,11 +3,11 @@ '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: while.n,v 1.2 1998/09/14 18:39:56 stanton Exp $ +'\" RCS: @(#) $Id: while.n,v 1.2.18.1 2001/04/03 22:06:44 hobbs Exp $ '\" .so man.macros .TH while n "" Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! @@ -49,7 +49,10 @@ puts "x is $x" incr x } .CE +.SH "SEE ALSO" +break(n), continue(n), for(n), foreach(n) + .SH KEYWORDS boolean value, loop, test, while Index: generic/tcl.decls ================================================================== --- generic/tcl.decls +++ generic/tcl.decls @@ -8,11 +8,11 @@ # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: tcl.decls,v 1.33 2000/04/09 16:04:17 kupries Exp $ +# RCS: @(#) $Id: tcl.decls,v 1.33.2.1 2000/07/27 01:39:14 hobbs Exp $ library tcl # Define the tcl interface with several sub interfaces: # tclPlat - platform specific public @@ -985,11 +985,11 @@ Tcl_Channel Tcl_StackChannel(Tcl_Interp *interp, \ Tcl_ChannelType *typePtr, ClientData instanceData, \ int mask, Tcl_Channel prevChan) } declare 282 generic { - void Tcl_UnstackChannel(Tcl_Interp *interp, Tcl_Channel chan) + int Tcl_UnstackChannel(Tcl_Interp *interp, Tcl_Channel chan) } declare 283 generic { Tcl_Channel Tcl_GetStackedChannel(Tcl_Channel chan) } # Reserved for future use (8.0.x vs. 8.1) @@ -1355,10 +1355,70 @@ } declare 393 generic { int Tcl_CreateThread (Tcl_ThreadId *idPtr, Tcl_ThreadCreateProc proc, \ ClientData clientData, int stackSize, int flags) } + +declare 394 generic { + int Tcl_ReadRaw (Tcl_Channel chan, char *dst, int bytesToRead) +} +declare 395 generic { + int Tcl_WriteRaw (Tcl_Channel chan, char *src, int srcLen) +} +declare 396 generic { + Tcl_Channel Tcl_GetTopChannel (Tcl_Channel chan) +} +declare 397 generic { + int Tcl_ChannelBuffered (Tcl_Channel chan) +} +declare 398 generic { + char * Tcl_ChannelName(Tcl_ChannelType *chanTypePtr) +} +declare 399 generic { + Tcl_ChannelTypeVersion Tcl_ChannelVersion(Tcl_ChannelType *chanTypePtr) +} +declare 400 generic { + Tcl_DriverBlockModeProc * Tcl_ChannelBlockModeProc(Tcl_ChannelType \ + *chanTypePtr) +} +declare 401 generic { + Tcl_DriverCloseProc * Tcl_ChannelCloseProc(Tcl_ChannelType *chanTypePtr) +} +declare 402 generic { + Tcl_DriverClose2Proc * Tcl_ChannelClose2Proc(Tcl_ChannelType *chanTypePtr) +} +declare 403 generic { + Tcl_DriverInputProc * Tcl_ChannelInputProc(Tcl_ChannelType *chanTypePtr) +} +declare 404 generic { + Tcl_DriverOutputProc * Tcl_ChannelOutputProc(Tcl_ChannelType *chanTypePtr) +} +declare 405 generic { + Tcl_DriverSeekProc * Tcl_ChannelSeekProc(Tcl_ChannelType *chanTypePtr) +} +declare 406 generic { + Tcl_DriverSetOptionProc * Tcl_ChannelSetOptionProc(Tcl_ChannelType \ + *chanTypePtr) +} +declare 407 generic { + Tcl_DriverGetOptionProc * Tcl_ChannelGetOptionProc(Tcl_ChannelType \ + *chanTypePtr) +} +declare 408 generic { + Tcl_DriverWatchProc * Tcl_ChannelWatchProc(Tcl_ChannelType *chanTypePtr) +} +declare 409 generic { + Tcl_DriverGetHandleProc * Tcl_ChannelGetHandleProc(Tcl_ChannelType \ + *chanTypePtr) +} +declare 410 generic { + Tcl_DriverFlushProc * Tcl_ChannelFlushProc(Tcl_ChannelType *chanTypePtr) +} +declare 411 generic { + Tcl_DriverHandlerProc * Tcl_ChannelHandlerProc(Tcl_ChannelType \ + *chanTypePtr) +} ############################################################################## # Define the platform specific public Tcl interface. These functions are # only available on the designated platform. Index: generic/tcl.h ================================================================== --- generic/tcl.h +++ generic/tcl.h @@ -10,11 +10,11 @@ * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tcl.h,v 1.70 2000/04/19 08:32:44 hobbs Exp $ + * RCS: @(#) $Id: tcl.h,v 1.70.2.3 2001/04/04 21:22:17 hobbs Exp $ */ #ifndef _TCL #define _TCL @@ -57,14 +57,14 @@ */ #define TCL_MAJOR_VERSION 8 #define TCL_MINOR_VERSION 3 #define TCL_RELEASE_LEVEL TCL_FINAL_RELEASE -#define TCL_RELEASE_SERIAL 1 +#define TCL_RELEASE_SERIAL 3 #define TCL_VERSION "8.3" -#define TCL_PATCH_LEVEL "8.3.1" +#define TCL_PATCH_LEVEL "8.3.3" /* * The following definitions set up the proper options for Windows * compilers. We use this method because there is no autoconf equivalent. */ @@ -103,10 +103,11 @@ * The following definitions set up the proper options for Macintosh * compilers. We use this method because there is no autoconf equivalent. */ #ifdef MAC_TCL +#include # ifndef HAS_STDARG # define HAS_STDARG 1 # endif # ifndef USE_TCLALLOC # define USE_TCLALLOC 1 @@ -223,11 +224,11 @@ #ifdef STATIC_BUILD # define DLLIMPORT # define DLLEXPORT #else -# if defined(__WIN32__) && (defined(_MSC_VER) || (defined(__GNUC__) && defined(__declspec))) +# if (defined(__WIN32__) && (defined(_MSC_VER) || (defined(__GNUC__) && defined(__declspec)))) || (defined(MAC_TCL) && FUNCTION_DECLSPEC) # define DLLIMPORT __declspec(dllimport) # define DLLEXPORT __declspec(dllexport) # else # define DLLIMPORT # define DLLEXPORT @@ -245,11 +246,11 @@ * * The convention is that a macro called BUILD_xxxx, where xxxx is the * name of a library we are building, is set on the compile line for sources * that are to be placed in the library. When this macro is set, the * storage class will be set to DLLEXPORT. At the end of the header file, the - * storage class will be reset to DLLIMPORt. + * storage class will be reset to DLLIMPORT. */ #undef TCL_STORAGE_CLASS #ifdef BUILD_tcl # define TCL_STORAGE_CLASS DLLEXPORT @@ -384,10 +385,11 @@ typedef struct Tcl_ThreadDataKey_ *Tcl_ThreadDataKey; typedef struct Tcl_ThreadId_ *Tcl_ThreadId; typedef struct Tcl_TimerToken_ *Tcl_TimerToken; typedef struct Tcl_Trace_ *Tcl_Trace; typedef struct Tcl_Var_ *Tcl_Var; +typedef struct Tcl_ChannelTypeVersion_ *Tcl_ChannelTypeVersion; /* * Definition of the interface to procedures implementing threads. * A procedure following this definition is given to each call of * 'Tcl_CreateThread' and will be called as the main fuction of @@ -1138,19 +1140,26 @@ * Bits passed to Tcl_DriverClose2Proc to indicate which side of a channel * should be closed. */ #define TCL_CLOSE_READ (1<<1) -#define TCL_CLOSE_WRITE (1<<2) +#define TCL_CLOSE_WRITE (1<<2) /* * Value to use as the closeProc for a channel that supports the * close2Proc interface. */ #define TCL_CLOSE2PROC ((Tcl_DriverCloseProc *)1) +/* + * Channel version tag. This was introduced in 8.3.2/8.4. + */ + +#define TCL_CHANNEL_VERSION_1 ((Tcl_ChannelTypeVersion) 0x1) +#define TCL_CHANNEL_VERSION_2 ((Tcl_ChannelTypeVersion) 0x2) + /* * Typedefs for the various operations in a channel type: */ typedef int (Tcl_DriverBlockModeProc) _ANSI_ARGS_(( @@ -1174,10 +1183,14 @@ typedef void (Tcl_DriverWatchProc) _ANSI_ARGS_(( ClientData instanceData, int mask)); typedef int (Tcl_DriverGetHandleProc) _ANSI_ARGS_(( ClientData instanceData, int direction, ClientData *handlePtr)); +typedef int (Tcl_DriverFlushProc) _ANSI_ARGS_(( + ClientData instanceData)); +typedef int (Tcl_DriverHandlerProc) _ANSI_ARGS_(( + ClientData instanceData, int interestMask)); /* * The following declarations either map ckalloc and ckfree to * malloc and free, or they map them to procedures with all sorts * of debugging hooks defined in tclCkalloc.c. @@ -1222,52 +1235,64 @@ * struct Tcl_ChannelType: * * One such structure exists for each type (kind) of channel. * It collects together in one place all the functions that are * part of the specific channel type. + * + * It is recommend that the Tcl_Channel* functions are used to access + * elements of this structure, instead of direct accessing. */ typedef struct Tcl_ChannelType { char *typeName; /* The name of the channel type in Tcl - * commands. This storage is owned by - * channel type. */ - Tcl_DriverBlockModeProc *blockModeProc; - /* Set blocking mode for the - * raw channel. May be NULL. */ + * commands. This storage is owned by + * channel type. */ + Tcl_ChannelTypeVersion version; /* Version of the channel type. */ Tcl_DriverCloseProc *closeProc; /* Procedure to call to close the - * channel, or TCL_CLOSE2PROC if the - * close2Proc should be used - * instead. */ + * channel, or TCL_CLOSE2PROC if the + * close2Proc should be used + * instead. */ Tcl_DriverInputProc *inputProc; /* Procedure to call for input - * on channel. */ + * on channel. */ Tcl_DriverOutputProc *outputProc; /* Procedure to call for output - * on channel. */ + * on channel. */ Tcl_DriverSeekProc *seekProc; /* Procedure to call to seek - * on the channel. May be NULL. */ + * on the channel. May be NULL. */ Tcl_DriverSetOptionProc *setOptionProc; - /* Set an option on a channel. */ + /* Set an option on a channel. */ Tcl_DriverGetOptionProc *getOptionProc; - /* Get an option from a channel. */ + /* Get an option from a channel. */ Tcl_DriverWatchProc *watchProc; /* Set up the notifier to watch - * for events on this channel. */ + * for events on this channel. */ Tcl_DriverGetHandleProc *getHandleProc; /* Get an OS handle from the channel - * or NULL if not supported. */ - Tcl_DriverClose2Proc *close2Proc; /* Procedure to call to close the + * or NULL if not supported. */ + Tcl_DriverClose2Proc *close2Proc; /* Procedure to call to close the * channel if the device supports * closing the read & write sides * independently. */ + Tcl_DriverBlockModeProc *blockModeProc; + /* Set blocking mode for the + * raw channel. May be NULL. */ + /* + * Only valid in TCL_CHANNEL_VERSION_2 channels + */ + Tcl_DriverFlushProc *flushProc; /* Procedure to call to flush a + * channel. May be NULL. */ + Tcl_DriverHandlerProc *handlerProc; /* Procedure to call to handle a + * channel event. This will be passed + * up the stacked channel chain. */ } Tcl_ChannelType; /* * The following flags determine whether the blockModeProc above should * set the channel into blocking or nonblocking mode. They are passed * as arguments to the blockModeProc procedure in the above structure. */ -#define TCL_MODE_BLOCKING 0 /* Put channel into blocking mode. */ -#define TCL_MODE_NONBLOCKING 1 /* Put channel into nonblocking +#define TCL_MODE_BLOCKING 0 /* Put channel into blocking mode. */ +#define TCL_MODE_NONBLOCKING 1 /* Put channel into nonblocking * mode. */ /* * Enum for different types of file paths. */ Index: generic/tclCkalloc.c ================================================================== --- generic/tclCkalloc.c +++ generic/tclCkalloc.c @@ -11,11 +11,11 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This code contributed by Karl Lehenbauer and Mark Diekhans * - * RCS: @(#) $Id: tclCkalloc.c,v 1.8 2000/04/27 01:47:01 ericm Exp $ + * RCS: @(#) $Id: tclCkalloc.c,v 1.7.2.2 2001/04/03 22:54:36 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -1014,14 +1014,15 @@ if (tclMemDumpFileName != NULL) { Tcl_DumpActiveMemory(tclMemDumpFileName); } if (curTagPtr != NULL) { TclpFree((char *) curTagPtr); + curTagPtr = NULL; } allocHead = NULL; Tcl_MutexUnlock(ckallocMutexPtr); #endif #if USE_TCLALLOC TclFinalizeAllocSubsystem(); #endif } Index: generic/tclClock.c ================================================================== --- generic/tclClock.c +++ generic/tclClock.c @@ -9,11 +9,11 @@ * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclClock.c,v 1.9 2000/03/30 04:36:11 hobbs Exp $ + * RCS: @(#) $Id: tclClock.c,v 1.9.2.1 2000/08/07 21:30:56 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" #include "tclPort.h" @@ -256,11 +256,11 @@ unsigned long clockVal; /* Time in seconds. */ int useGMT; /* Boolean */ char *format; /* Format string */ { struct tm *timeDataPtr; - Tcl_DString buffer; + Tcl_DString buffer, uniBuffer; int bufSize; char *p; int result; time_t tclockVal; #ifndef HAVE_TM_ZONE @@ -358,10 +358,19 @@ Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "bad format string \"", format, "\"", (char *) NULL); return TCL_ERROR; } - Tcl_SetStringObj(Tcl_GetObjResult(interp), buffer.string, -1); + /* + * Convert the time to external encoding, in case we asked for + * a localized return value. [Bug: 3345] + */ + Tcl_DStringInit(&uniBuffer); + Tcl_ExternalToUtfDString(NULL, buffer.string, -1, &uniBuffer); + + Tcl_SetStringObj(Tcl_GetObjResult(interp), uniBuffer.string, -1); + + Tcl_DStringFree(&uniBuffer); Tcl_DStringFree(&buffer); return TCL_OK; } Index: generic/tclCmdIL.c ================================================================== --- generic/tclCmdIL.c +++ generic/tclCmdIL.c @@ -12,11 +12,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCmdIL.c,v 1.24 2000/04/04 08:04:41 hobbs Exp $ + * RCS: @(#) $Id: tclCmdIL.c,v 1.24.2.2 2001/07/16 23:14:13 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclCompile.h" @@ -1504,23 +1504,23 @@ cmdName = Tcl_GetHashKey(&nsPtr->cmdTable, entryPtr); if ((simplePattern == NULL) || Tcl_StringMatch(cmdName, simplePattern)) { cmdPtr = (Command *) Tcl_GetHashValue(entryPtr); - if (specificNsInPattern) { - elemObjPtr = Tcl_NewObj(); - Tcl_GetCommandFullName(interp, (Tcl_Command) cmdPtr, - elemObjPtr); - } else { - elemObjPtr = Tcl_NewStringObj(cmdName, -1); - } - realCmdPtr = (Command *) TclGetOriginalCommand((Tcl_Command) cmdPtr); if (TclIsProc(cmdPtr) || ((realCmdPtr != NULL) && TclIsProc(realCmdPtr))) { + if (specificNsInPattern) { + elemObjPtr = Tcl_NewObj(); + Tcl_GetCommandFullName(interp, (Tcl_Command) cmdPtr, + elemObjPtr); + } else { + elemObjPtr = Tcl_NewStringObj(cmdName, -1); + } + Tcl_ListObjAppendElement(interp, listPtr, elemObjPtr); } } entryPtr = Tcl_NextHashEntry(&search); } @@ -2017,12 +2017,11 @@ ClientData dummy; /* Not used. */ Tcl_Interp *interp; /* Current interpreter. */ register int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { - Tcl_Obj *listPtr, *resultPtr; - Tcl_ObjType *typePtr; + Tcl_Obj *listPtr; int index, isDuplicate, len, result; if (objc < 4) { Tcl_WrongNumArgs(interp, 1, objv, "list index element ?element ...?"); return TCL_ERROR; @@ -2036,72 +2035,57 @@ result = Tcl_ListObjLength(interp, objv[1], &len); if (result != TCL_OK) { return result; } - result = TclGetIntForIndex(interp, objv[2], /*endValue*/ len, &index); + /* + * Get the index. "end" is interpreted to be the index after the last + * element, such that using it will cause any inserted elements to be + * appended to the list. + */ + + result = TclGetIntForIndex(interp, objv[2], /*end*/ len, &index); if (result != TCL_OK) { return result; + } + if (index > len) { + index = len; } /* * If the list object is unshared we can modify it directly. Otherwise - * we create a copy to modify: this is "copy on write". We create the - * duplicate directly in the interpreter's object result. + * we create a copy to modify: this is "copy on write". */ - + listPtr = objv[1]; isDuplicate = 0; if (Tcl_IsShared(listPtr)) { - /* - * The following code must reflect the logic in Tcl_DuplicateObj() - * except that it must duplicate the list object directly into the - * interpreter's result. - */ - - Tcl_ResetResult(interp); - resultPtr = Tcl_GetObjResult(interp); - typePtr = listPtr->typePtr; - if (listPtr->bytes == NULL) { - resultPtr->bytes = NULL; - } else if (listPtr->bytes != tclEmptyStringRep) { - len = listPtr->length; - TclInitStringRep(resultPtr, listPtr->bytes, len); - } - if (typePtr != NULL) { - if (typePtr->dupIntRepProc == NULL) { - resultPtr->internalRep = listPtr->internalRep; - resultPtr->typePtr = typePtr; - } else { - (*typePtr->dupIntRepProc)(listPtr, resultPtr); - } - } - listPtr = resultPtr; + listPtr = Tcl_DuplicateObj(listPtr); isDuplicate = 1; } - - if ((objc == 4) && (index == INT_MAX)) { + + if ((objc == 4) && (index == len)) { /* * Special case: insert one element at the end of the list. */ - result = Tcl_ListObjAppendElement(interp, listPtr, objv[3]); } else if (objc > 3) { result = Tcl_ListObjReplace(interp, listPtr, index, 0, (objc-3), &(objv[3])); } if (result != TCL_OK) { + if (isDuplicate) { + Tcl_DecrRefCount(listPtr); /* free unneeded obj */ + } return result; } - + /* * Set the interpreter's object result. */ - if (!isDuplicate) { - Tcl_SetObjResult(interp, listPtr); - } + Tcl_SetObjResult(interp, listPtr); return TCL_OK; } /* *---------------------------------------------------------------------- @@ -2304,67 +2288,55 @@ Tcl_Interp *interp; /* Current interpreter. */ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { register Tcl_Obj *listPtr; - int createdNewObj, first, last, listLen, numToDelete; - int firstArgLen, result; - char *firstArg; + int isDuplicate, first, last, listLen, numToDelete, result; if (objc < 4) { Tcl_WrongNumArgs(interp, 1, objv, "list first last ?element element ...?"); return TCL_ERROR; } - /* - * If the list object is unshared we can modify it directly, otherwise - * we create a copy to modify: this is "copy on write". - */ - - listPtr = objv[1]; - createdNewObj = 0; - if (Tcl_IsShared(listPtr)) { - listPtr = Tcl_DuplicateObj(listPtr); - createdNewObj = 1; - } - result = Tcl_ListObjLength(interp, listPtr, &listLen); + result = Tcl_ListObjLength(interp, objv[1], &listLen); if (result != TCL_OK) { - errorReturn: - if (createdNewObj) { - Tcl_DecrRefCount(listPtr); /* free unneeded obj */ - } + return result; + } + + /* + * Get the first and last indexes. "end" is interpreted to be the index + * for the last element, such that using it will cause that element to + * be included for deletion. + */ + + result = TclGetIntForIndex(interp, objv[2], /*end*/ (listLen - 1), &first); + if (result != TCL_OK) { return result; } - /* - * Get the first and last indexes. - */ - - result = TclGetIntForIndex(interp, objv[2], /*endValue*/ (listLen - 1), - &first); - if (result != TCL_OK) { - goto errorReturn; - } - firstArg = Tcl_GetStringFromObj(objv[2], &firstArgLen); - - result = TclGetIntForIndex(interp, objv[3], /*endValue*/ (listLen - 1), - &last); - if (result != TCL_OK) { - goto errorReturn; + result = TclGetIntForIndex(interp, objv[3], /*end*/ (listLen - 1), &last); + if (result != TCL_OK) { + return result; } if (first < 0) { first = 0; } - if ((first >= listLen) && (listLen > 0) - && (strncmp(firstArg, "end", (unsigned) firstArgLen) != 0)) { + + /* + * Complain if the user asked for a start element that is greater than the + * list length. This won't ever trigger for the "end*" case as that will + * be properly constrained by TclGetIntForIndex because we use listLen-1 + * (to allow for replacing the last elem). + */ + + if ((first >= listLen) && (listLen > 0)) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "list doesn't contain element ", Tcl_GetString(objv[2]), (int *) NULL); - result = TCL_ERROR; - goto errorReturn; + return TCL_ERROR; } if (last >= listLen) { last = (listLen - 1); } if (first <= last) { @@ -2371,19 +2343,33 @@ numToDelete = (last - first + 1); } else { numToDelete = 0; } + /* + * If the list object is unshared we can modify it directly, otherwise + * we create a copy to modify: this is "copy on write". + */ + + listPtr = objv[1]; + isDuplicate = 0; + if (Tcl_IsShared(listPtr)) { + listPtr = Tcl_DuplicateObj(listPtr); + isDuplicate = 1; + } if (objc > 4) { result = Tcl_ListObjReplace(interp, listPtr, first, numToDelete, (objc-4), &(objv[4])); } else { result = Tcl_ListObjReplace(interp, listPtr, first, numToDelete, 0, NULL); } if (result != TCL_OK) { - goto errorReturn; + if (isDuplicate) { + Tcl_DecrRefCount(listPtr); /* free unneeded obj */ + } + return result; } /* * Set the interpreter's object result. */ @@ -2576,11 +2562,10 @@ } if (TclGetIntForIndex(interp, objv[i+1], -2, &sortInfo.index) != TCL_OK) { return TCL_ERROR; } - cmdPtr = objv[i+1]; i++; break; case 6: /* -integer */ sortInfo.sortMode = SORTMODE_INTEGER; break; @@ -2614,16 +2599,13 @@ sortInfo.compareCmdPtr = newCommandPtr; } sortInfo.resultCode = Tcl_ListObjGetElements(interp, objv[objc-1], &length, &listObjPtrs); - if (sortInfo.resultCode != TCL_OK) { + if (sortInfo.resultCode != TCL_OK || length <= 0) { goto done; } - if (length <= 0) { - return TCL_OK; - } elementArray = (SortElement *) ckalloc(length * sizeof(SortElement)); for (i=0; i < length; i++){ elementArray[i].objPtr = listObjPtrs[i]; elementArray[i].count = 0; elementArray[i].nextPtr = &elementArray[i+1]; Index: generic/tclCmdMZ.c ================================================================== --- generic/tclCmdMZ.c +++ generic/tclCmdMZ.c @@ -11,11 +11,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCmdMZ.c,v 1.26 2000/04/10 21:08:26 ericm Exp $ + * RCS: @(#) $Id: tclCmdMZ.c,v 1.26.2.2 2001/08/07 00:51:12 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclCompile.h" @@ -147,11 +147,11 @@ cflags = TCL_REG_ADVANCED; eflags = 0; offset = 0; all = 0; doinline = 0; - + for (i = 1; i < objc; i++) { char *name; int index; name = Tcl_GetString(objv[i]); @@ -233,15 +233,22 @@ Tcl_AppendResult(interp, "regexp match variables not allowed", " when using -inline", (char *) NULL); return TCL_ERROR; } + /* + * Get the length of the string that we are matching against so + * we can do the termination test for -all matches. Do this before + * getting the regexp to avoid shimmering problems. + */ + objPtr = objv[1]; + stringLength = Tcl_GetCharLength(objPtr); + regExpr = Tcl_GetRegExpFromObj(interp, objv[0], cflags); if (regExpr == NULL) { return TCL_ERROR; } - objPtr = objv[1]; if (about) { if (TclRegAbout(interp, regExpr) < 0) { return TCL_ERROR; } @@ -272,16 +279,10 @@ * one to know where to move the offset. */ numMatchesSaved = (objc == 0) ? all : objc; } - /* - * Get the length of the string that we are matching against so - * we can do the termination test for -all matches. - */ - stringLength = Tcl_GetCharLength(objPtr); - /* * The following loop is to handle multiple matches within the * same source string; each iteration handles one match. If "-all" * hasn't been specified then the loop body only gets executed once. * We terminate the loop when the starting offset is past the end of the @@ -400,10 +401,11 @@ if (info.matches[0].end == 0) { offset++; } offset += info.matches[0].end; all++; + eflags |= TCL_REG_NOTBOL; if (offset >= stringLength) { break; } } @@ -527,25 +529,30 @@ return TCL_ERROR; } objv += i; + /* + * Get the length of the string that we are matching before + * getting the regexp to avoid shimmering problems. + */ + + objPtr = objv[1]; + wlen = Tcl_GetCharLength(objPtr); + wstring = Tcl_GetUnicode(objPtr); + subspec = Tcl_GetString(objv[2]); + varPtr = objv[3]; + regExpr = Tcl_GetRegExpFromObj(interp, objv[0], cflags); if (regExpr == NULL) { return TCL_ERROR; } result = TCL_OK; resultPtr = Tcl_NewObj(); Tcl_IncrRefCount(resultPtr); - objPtr = objv[1]; - wlen = Tcl_GetCharLength(objPtr); - wstring = Tcl_GetUnicode(objPtr); - subspec = Tcl_GetString(objv[2]); - varPtr = objv[3]; - /* * The following loop is to handle multiple matches within the * same source string; each iteration handles one match and its * corresponding substitution. If "-all" hasn't been specified * then the loop body only gets executed once. @@ -906,19 +913,38 @@ if (stringLen == 0) { /* * Do nothing. */ } else if (splitCharLen == 0) { + Tcl_HashTable charReuseTable; + Tcl_HashEntry *hPtr; + int isNew; + /* * Handle the special case of splitting on every character. + * + * Uses a hash table to ensure that each kind of character has + * only one Tcl_Obj instance (multiply-referenced) in the + * final list. This is a *major* win when splitting on a long + * string (especially in the megabyte range!) - DKF */ + Tcl_InitHashTable(&charReuseTable, TCL_ONE_WORD_KEYS); for ( ; string < end; string += len) { len = Tcl_UtfToUniChar(string, &ch); - objPtr = Tcl_NewStringObj(string, len); + /* Assume Tcl_UniChar is an integral type... */ + hPtr = Tcl_CreateHashEntry(&charReuseTable, (char*)0 + ch, &isNew); + if (isNew) { + objPtr = Tcl_NewStringObj(string, len); + /* Don't need to fiddle with refcount... */ + Tcl_SetHashValue(hPtr, (ClientData) objPtr); + } else { + objPtr = (Tcl_Obj*) Tcl_GetHashValue(hPtr); + } Tcl_ListObjAppendElement(NULL, listPtr, objPtr); } + Tcl_DeleteHashTable(&charReuseTable); } else { char *element, *p, *splitEnd; int splitLen; Tcl_UniChar splitChar; @@ -1019,14 +1045,14 @@ } for (i = 2; i < objc-2; i++) { string2 = Tcl_GetStringFromObj(objv[i], &length2); if ((length2 > 1) - && strncmp(string2, "-nocase", (size_t) length2) == 0) { + && strncmp(string2, "-nocase", (size_t)length2) == 0) { nocase = 1; } else if ((length2 > 1) - && strncmp(string2, "-length", (size_t) length2) == 0) { + && strncmp(string2, "-length", (size_t)length2) == 0) { if (i+1 >= objc-2) { goto str_cmp_args; } if (Tcl_GetIntFromObj(interp, objv[++i], &reqlength) != TCL_OK) { @@ -1199,29 +1225,30 @@ * character. Otherwise, use the Unicode string rep to * get the index'th char. */ if (objv[2]->typePtr == &tclByteArrayType) { - string1 = (char *)Tcl_GetByteArrayFromObj(objv[2], &length1); if (TclGetIntForIndex(interp, objv[3], length1 - 1, &index) != TCL_OK) { return TCL_ERROR; } - Tcl_SetByteArrayObj(resultPtr, - (unsigned char *)(&string1[index]), 1); + if ((index >= 0) && (index < length1)) { + Tcl_SetByteArrayObj(resultPtr, + (unsigned char *)(&string1[index]), 1); + } } else { string1 = Tcl_GetStringFromObj(objv[2], &length1); - + /* * convert to Unicode internal rep to calulate what * 'end' really means. */ length2 = Tcl_GetCharLength(objv[2]); - + if (TclGetIntForIndex(interp, objv[3], length2 - 1, &index) != TCL_OK) { return TCL_ERROR; } if ((index >= 0) && (index < length2)) { @@ -1643,10 +1670,11 @@ if (mapElemc == 0) { /* * empty charMap, just return whatever string was given */ Tcl_SetObjResult(interp, objv[objc-1]); + return TCL_OK; } else if (mapElemc & 1) { /* * The charMap must be an even number of key/value items */ Tcl_SetStringObj(resultPtr, "char map list unbalanced", -1); Index: generic/tclDate.c ================================================================== --- generic/tclDate.c +++ generic/tclDate.c @@ -8,11 +8,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclDate.c,v 1.17 2000/02/28 18:49:42 ericm Exp $ + * RCS: @(#) $Id: tclDate.c,v 1.17.2.1 2000/08/07 21:30:36 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -925,21 +925,21 @@ }; # define YYNPROD 56 # define YYLAST 261 static CONST TclDatetabelem TclDateact[]={ - 24, 39, 23, 35, 55, 83, 40, 27, 54, 25, - 36, 41, 59, 37, 57, 27, 26, 25, 27, 32, - 25, 31, 62, 50, 26, 82, 78, 26, 51, 77, - 76, 75, 29, 74, 73, 72, 70, 52, 49, 48, - 47, 44, 38, 63, 80, 46, 45, 81, 69, 21, - 66, 61, 68, 67, 56, 43, 64, 11, 10, 9, - 8, 7, 34, 6, 5, 4, 3, 2, 42, 1, + 24, 40, 23, 36, 54, 81, 41, 28, 53, 26, + 37, 42, 58, 38, 56, 28, 27, 26, 28, 33, + 26, 32, 61, 50, 27, 80, 76, 27, 51, 75, + 74, 73, 30, 72, 71, 70, 69, 52, 49, 48, + 47, 45, 39, 62, 78, 46, 79, 68, 25, 65, + 60, 67, 66, 55, 44, 21, 63, 11, 10, 9, + 8, 35, 7, 6, 5, 4, 3, 43, 2, 1, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 58, 0, 0, 60, 0, 0, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 57, 0, 0, 59, 77, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -947,68 +947,68 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 14, 0, 0, 0, - 16, 27, 22, 25, 0, 12, 13, 17, 0, 15, - 26, 18, 30, 0, 0, 28, 0, 33, 27, 0, - 25, 0, 0, 0, 0, 0, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, - 65 }; + 16, 28, 22, 26, 0, 12, 13, 17, 0, 15, + 27, 18, 31, 0, 0, 29, 0, 34, 28, 0, + 26, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, + 64 }; static CONST TclDatetabelem TclDatepact[]={ -10000000, -43,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, --10000000,-10000000, -26, -268,-10000000, -259, -226,-10000000, -257, 11, - -227, -212, -228,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, -229, --10000000, -230, -240, -231, -212,-10000000, -264,-10000000, 10,-10000000, --10000000, -249,-10000000,-10000000, -246,-10000000,-10000000, 5, -2, 3, - 8, 7,-10000000,-10000000,-10000000, -10, -232,-10000000,-10000000,-10000000, - -212, -233,-10000000, -234, -235,-10000000, -237, -238, -239, -242, --10000000,-10000000,-10000000,-10000000, -1,-10000000,-10000000,-10000000, -11,-10000000, - -243, -263,-10000000,-10000000 }; +-10000000,-10000000, -26, -268,-10000000, -259, -226,-10000000, -257, 10, + -227, -212, -228,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000, + -229,-10000000, -230, -240, -231,-10000000,-10000000, -264,-10000000, 9, +-10000000,-10000000, -249,-10000000,-10000000, -246,-10000000, 4, -2, 2, + 7, 6,-10000000,-10000000, -11, -232,-10000000,-10000000,-10000000,-10000000, + -233,-10000000, -234, -235,-10000000, -237, -238, -239, -242,-10000000, +-10000000,-10000000, -1,-10000000,-10000000,-10000000, -12,-10000000, -243, -263, +-10000000,-10000000 }; static CONST TclDatetabelem TclDatepgo[]={ - 0, 49, 46, 70, 22, 69, 67, 66, 65, 64, - 63, 61, 60, 59, 58, 57 }; + 0, 48, 70, 22, 69, 68, 66, 65, 64, 63, + 62, 60, 59, 58, 57, 55 }; static CONST TclDatetabelem TclDater1[]={ - 0, 5, 5, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, - 11, 11, 11, 11, 11, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 10, 10, 13, 13, 13, - 14, 12, 12, 12, 12, 12, 3, 3, 1, 1, - 1, 2, 2, 15, 4, 4 }; + 0, 4, 4, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, + 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 9, 9, 12, 12, 12, + 13, 11, 11, 15, 15, 15, 15, 15, 2, 2, + 1, 1, 1, 14, 3, 3 }; static CONST TclDatetabelem TclDater2[]={ 0, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 5, 9, 11, 13, 15, 5, 3, 3, 3, 5, 5, 7, 5, 7, 11, 3, 11, 11, 5, 9, 5, 3, 7, 5, 7, 7, 15, 5, - 9, 9, 7, 5, 7, 5, 3, 3, 3, 3, - 3, 3, 1, 3, 1, 3 }; + 9, 5, 2, 7, 5, 5, 7, 3, 3, 3, + 3, 3, 3, 3, 1, 3 }; static CONST TclDatetabelem TclDatechk[]={ --10000000, -5, -6, -7, -8, -9, -10, -11, -12, -13, - -14, -15, 268, 269, 259, 272, 263, 270, 274, 258, - -3, -1, 265, 45, 43, 266, 273, 264, 261, 58, - 258, 47, 45, 263, -1, 271, 269, 272, 268, 258, - 263, 268, -1, 44, 268, -2, 257, 268, 268, 268, - 263, 268, 268, -2, 272, 268, 44, 263, -1, 258, - -1, 46, -4, 45, 58, 261, 47, 45, 45, 58, - 268, -2, 268, 268, 268, 268, 268, 268, 268, -4, - 45, 58, 268, 268 }; +-10000000, -4, -5, -6, -7, -8, -9, -10, -11, -12, + -13, -14, 268, 269, 259, 272, 263, 270, 274, 258, + -2, -15, 265, 45, 43, -1, 266, 273, 264, 261, + 58, 258, 47, 45, 263, -1, 271, 269, 272, 268, + 258, 263, 268, -1, 44, 268, 257, 268, 268, 268, + 263, 268, 268, 272, 268, 44, 263, -1, 258, -1, + 46, -3, 45, 58, 261, 47, 45, 45, 58, 268, + 268, 268, 268, 268, 268, 268, 268, -3, 45, 58, + 268, 268 }; static CONST TclDatetabelem TclDatedef[]={ 1, -2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 53, 18, 19, 27, 0, 33, 0, 20, - 0, 52, 0, 46, 47, 48, 49, 50, 12, 0, - 22, 0, 0, 32, 52, 17, 0, 39, 30, 24, - 35, 0, 43, 21, 0, 45, 51, 0, 54, 25, - 0, 0, 34, 42, 37, 0, 0, 36, 44, 23, - 52, 0, 13, 0, 0, 55, 0, 0, 0, 0, - 31, 41, 40, 14, 54, 26, 28, 29, 0, 15, - 0, 0, 16, 38 }; + 0, 42, 0, 48, 49, 47, 50, 51, 52, 12, + 0, 22, 0, 0, 32, 44, 17, 0, 39, 30, + 24, 35, 0, 45, 21, 0, 41, 0, 54, 25, + 0, 0, 34, 37, 0, 0, 36, 46, 23, 43, + 0, 13, 0, 0, 55, 0, 0, 0, 0, 31, + 40, 14, 54, 26, 28, 29, 0, 15, 0, 0, + 16, 38 }; typedef struct #ifdef __cplusplus TclDatetoktype #endif { char *t_name; int t_val; } TclDatetoktype; @@ -1082,22 +1082,22 @@ "ordMonth : tNEXT tUNUMBER tMONTH", "iso : tISOBASE tZONE tISOBASE", "iso : tISOBASE tZONE tUNUMBER ':' tUNUMBER ':' tUNUMBER", "iso : tISOBASE tISOBASE", "trek : tSTARDATE tUNUMBER '.' tUNUMBER", - "relspec : sign tUNUMBER unit ago", - "relspec : tUNUMBER unit ago", - "relspec : tNEXT unit", - "relspec : tNEXT tUNUMBER unit", - "relspec : unit ago", + "relspec : relunits tAGO", + "relspec : relunits", + "relunits : sign tUNUMBER unit", + "relunits : tUNUMBER unit", + "relunits : tNEXT unit", + "relunits : tNEXT tUNUMBER unit", + "relunits : unit", "sign : '-'", "sign : '+'", "unit : tSEC_UNIT", "unit : tDAY_UNIT", "unit : tMONTH_UNIT", - "ago : tAGO", - "ago : /* empty */", "number : tUNUMBER", "o_merid : /* empty */", "o_merid : tMERIDIAN", }; #endif /* YYDEBUG */ @@ -1810,22 +1810,25 @@ TclDateDay = 1; TclDateMonth = 1; TclDateRelDay += ((TclDatepvt[-2].Number%1000)*(365 + IsLeapYear(TclDateYear)))/1000; TclDateRelSeconds += TclDatepvt[-0].Number * 144 * 60; } break; -case 41:{ *TclDateRelPointer += TclDatepvt[-3].Number * TclDatepvt[-2].Number * TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break; -case 42:{ *TclDateRelPointer += TclDatepvt[-2].Number * TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break; -case 43:{ *TclDateRelPointer += TclDatepvt[-0].Number; } break; +case 41:{ + TclDateRelSeconds *= -1; + TclDateRelMonth *= -1; + TclDateRelDay *= -1; + } break; +case 43:{ *TclDateRelPointer += TclDatepvt[-2].Number * TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break; case 44:{ *TclDateRelPointer += TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break; -case 45:{ *TclDateRelPointer += TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break; -case 46:{ TclDateval.Number = -1; } break; -case 47:{ TclDateval.Number = 1; } break; -case 48:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelSeconds; } break; -case 49:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelDay; } break; -case 50:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelMonth; } break; -case 51:{ TclDateval.Number = -1; } break; -case 52:{ TclDateval.Number = 1; } break; +case 45:{ *TclDateRelPointer += TclDatepvt[-0].Number; } break; +case 46:{ *TclDateRelPointer += TclDatepvt[-1].Number * TclDatepvt[-0].Number; } break; +case 47:{ *TclDateRelPointer += TclDatepvt[-0].Number; } break; +case 48:{ TclDateval.Number = -1; } break; +case 49:{ TclDateval.Number = 1; } break; +case 50:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelSeconds; } break; +case 51:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelDay; } break; +case 52:{ TclDateval.Number = TclDatepvt[-0].Number; TclDateRelPointer = &TclDateRelMonth; } break; case 53:{ if (TclDateHaveTime && TclDateHaveDate && !TclDateHaveRel) { TclDateYear = TclDatepvt[-0].Number; } else { TclDateHaveTime++; Index: generic/tclDecls.h ================================================================== --- generic/tclDecls.h +++ generic/tclDecls.h @@ -6,11 +6,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclDecls.h,v 1.34 2000/04/09 16:04:17 kupries Exp $ + * RCS: @(#) $Id: tclDecls.h,v 1.34.2.1 2000/07/27 01:39:15 hobbs Exp $ */ #ifndef _TCLDECLS #define _TCLDECLS @@ -907,11 +907,11 @@ EXTERN Tcl_Channel Tcl_StackChannel _ANSI_ARGS_((Tcl_Interp * interp, Tcl_ChannelType * typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan)); /* 282 */ -EXTERN void Tcl_UnstackChannel _ANSI_ARGS_((Tcl_Interp * interp, +EXTERN int Tcl_UnstackChannel _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan)); /* 283 */ EXTERN Tcl_Channel Tcl_GetStackedChannel _ANSI_ARGS_((Tcl_Channel chan)); /* Slot 284 is reserved */ /* Slot 285 is reserved */ @@ -1226,10 +1226,62 @@ /* 393 */ EXTERN int Tcl_CreateThread _ANSI_ARGS_((Tcl_ThreadId * idPtr, Tcl_ThreadCreateProc proc, ClientData clientData, int stackSize, int flags)); +/* 394 */ +EXTERN int Tcl_ReadRaw _ANSI_ARGS_((Tcl_Channel chan, + char * dst, int bytesToRead)); +/* 395 */ +EXTERN int Tcl_WriteRaw _ANSI_ARGS_((Tcl_Channel chan, + char * src, int srcLen)); +/* 396 */ +EXTERN Tcl_Channel Tcl_GetTopChannel _ANSI_ARGS_((Tcl_Channel chan)); +/* 397 */ +EXTERN int Tcl_ChannelBuffered _ANSI_ARGS_((Tcl_Channel chan)); +/* 398 */ +EXTERN char * Tcl_ChannelName _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 399 */ +EXTERN Tcl_ChannelTypeVersion Tcl_ChannelVersion _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 400 */ +EXTERN Tcl_DriverBlockModeProc * Tcl_ChannelBlockModeProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 401 */ +EXTERN Tcl_DriverCloseProc * Tcl_ChannelCloseProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 402 */ +EXTERN Tcl_DriverClose2Proc * Tcl_ChannelClose2Proc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 403 */ +EXTERN Tcl_DriverInputProc * Tcl_ChannelInputProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 404 */ +EXTERN Tcl_DriverOutputProc * Tcl_ChannelOutputProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 405 */ +EXTERN Tcl_DriverSeekProc * Tcl_ChannelSeekProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 406 */ +EXTERN Tcl_DriverSetOptionProc * Tcl_ChannelSetOptionProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 407 */ +EXTERN Tcl_DriverGetOptionProc * Tcl_ChannelGetOptionProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 408 */ +EXTERN Tcl_DriverWatchProc * Tcl_ChannelWatchProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 409 */ +EXTERN Tcl_DriverGetHandleProc * Tcl_ChannelGetHandleProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 410 */ +EXTERN Tcl_DriverFlushProc * Tcl_ChannelFlushProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); +/* 411 */ +EXTERN Tcl_DriverHandlerProc * Tcl_ChannelHandlerProc _ANSI_ARGS_(( + Tcl_ChannelType * chanTypePtr)); typedef struct TclStubHooks { struct TclPlatStubs *tclPlatStubs; struct TclIntStubs *tclIntStubs; struct TclIntPlatStubs *tclIntPlatStubs; @@ -1575,11 +1627,11 @@ void *reserved278; #endif /* MAC_TCL */ void (*tcl_GetVersion) _ANSI_ARGS_((int * major, int * minor, int * patchLevel, int * type)); /* 279 */ void (*tcl_InitMemory) _ANSI_ARGS_((Tcl_Interp * interp)); /* 280 */ Tcl_Channel (*tcl_StackChannel) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_ChannelType * typePtr, ClientData instanceData, int mask, Tcl_Channel prevChan)); /* 281 */ - void (*tcl_UnstackChannel) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan)); /* 282 */ + int (*tcl_UnstackChannel) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan)); /* 282 */ Tcl_Channel (*tcl_GetStackedChannel) _ANSI_ARGS_((Tcl_Channel chan)); /* 283 */ void *reserved284; void *reserved285; void (*tcl_AppendObjToObj) _ANSI_ARGS_((Tcl_Obj * objPtr, Tcl_Obj * appendObjPtr)); /* 286 */ Tcl_Encoding (*tcl_CreateEncoding) _ANSI_ARGS_((Tcl_EncodingType * typePtr)); /* 287 */ @@ -1687,10 +1739,28 @@ int (*tcl_GetChannelNamesEx) _ANSI_ARGS_((Tcl_Interp * interp, char * pattern)); /* 389 */ int (*tcl_ProcObjCmd) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[])); /* 390 */ void (*tcl_ConditionFinalize) _ANSI_ARGS_((Tcl_Condition * condPtr)); /* 391 */ void (*tcl_MutexFinalize) _ANSI_ARGS_((Tcl_Mutex * mutex)); /* 392 */ int (*tcl_CreateThread) _ANSI_ARGS_((Tcl_ThreadId * idPtr, Tcl_ThreadCreateProc proc, ClientData clientData, int stackSize, int flags)); /* 393 */ + int (*tcl_ReadRaw) _ANSI_ARGS_((Tcl_Channel chan, char * dst, int bytesToRead)); /* 394 */ + int (*tcl_WriteRaw) _ANSI_ARGS_((Tcl_Channel chan, char * src, int srcLen)); /* 395 */ + Tcl_Channel (*tcl_GetTopChannel) _ANSI_ARGS_((Tcl_Channel chan)); /* 396 */ + int (*tcl_ChannelBuffered) _ANSI_ARGS_((Tcl_Channel chan)); /* 397 */ + char * (*tcl_ChannelName) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 398 */ + Tcl_ChannelTypeVersion (*tcl_ChannelVersion) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 399 */ + Tcl_DriverBlockModeProc * (*tcl_ChannelBlockModeProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 400 */ + Tcl_DriverCloseProc * (*tcl_ChannelCloseProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 401 */ + Tcl_DriverClose2Proc * (*tcl_ChannelClose2Proc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 402 */ + Tcl_DriverInputProc * (*tcl_ChannelInputProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 403 */ + Tcl_DriverOutputProc * (*tcl_ChannelOutputProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 404 */ + Tcl_DriverSeekProc * (*tcl_ChannelSeekProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 405 */ + Tcl_DriverSetOptionProc * (*tcl_ChannelSetOptionProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 406 */ + Tcl_DriverGetOptionProc * (*tcl_ChannelGetOptionProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 407 */ + Tcl_DriverWatchProc * (*tcl_ChannelWatchProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 408 */ + Tcl_DriverGetHandleProc * (*tcl_ChannelGetHandleProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 409 */ + Tcl_DriverFlushProc * (*tcl_ChannelFlushProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 410 */ + Tcl_DriverHandlerProc * (*tcl_ChannelHandlerProc) _ANSI_ARGS_((Tcl_ChannelType * chanTypePtr)); /* 411 */ } TclStubs; #ifdef __cplusplus extern "C" { #endif @@ -3308,12 +3378,84 @@ #endif #ifndef Tcl_CreateThread #define Tcl_CreateThread \ (tclStubsPtr->tcl_CreateThread) /* 393 */ #endif +#ifndef Tcl_ReadRaw +#define Tcl_ReadRaw \ + (tclStubsPtr->tcl_ReadRaw) /* 394 */ +#endif +#ifndef Tcl_WriteRaw +#define Tcl_WriteRaw \ + (tclStubsPtr->tcl_WriteRaw) /* 395 */ +#endif +#ifndef Tcl_GetTopChannel +#define Tcl_GetTopChannel \ + (tclStubsPtr->tcl_GetTopChannel) /* 396 */ +#endif +#ifndef Tcl_ChannelBuffered +#define Tcl_ChannelBuffered \ + (tclStubsPtr->tcl_ChannelBuffered) /* 397 */ +#endif +#ifndef Tcl_ChannelName +#define Tcl_ChannelName \ + (tclStubsPtr->tcl_ChannelName) /* 398 */ +#endif +#ifndef Tcl_ChannelVersion +#define Tcl_ChannelVersion \ + (tclStubsPtr->tcl_ChannelVersion) /* 399 */ +#endif +#ifndef Tcl_ChannelBlockModeProc +#define Tcl_ChannelBlockModeProc \ + (tclStubsPtr->tcl_ChannelBlockModeProc) /* 400 */ +#endif +#ifndef Tcl_ChannelCloseProc +#define Tcl_ChannelCloseProc \ + (tclStubsPtr->tcl_ChannelCloseProc) /* 401 */ +#endif +#ifndef Tcl_ChannelClose2Proc +#define Tcl_ChannelClose2Proc \ + (tclStubsPtr->tcl_ChannelClose2Proc) /* 402 */ +#endif +#ifndef Tcl_ChannelInputProc +#define Tcl_ChannelInputProc \ + (tclStubsPtr->tcl_ChannelInputProc) /* 403 */ +#endif +#ifndef Tcl_ChannelOutputProc +#define Tcl_ChannelOutputProc \ + (tclStubsPtr->tcl_ChannelOutputProc) /* 404 */ +#endif +#ifndef Tcl_ChannelSeekProc +#define Tcl_ChannelSeekProc \ + (tclStubsPtr->tcl_ChannelSeekProc) /* 405 */ +#endif +#ifndef Tcl_ChannelSetOptionProc +#define Tcl_ChannelSetOptionProc \ + (tclStubsPtr->tcl_ChannelSetOptionProc) /* 406 */ +#endif +#ifndef Tcl_ChannelGetOptionProc +#define Tcl_ChannelGetOptionProc \ + (tclStubsPtr->tcl_ChannelGetOptionProc) /* 407 */ +#endif +#ifndef Tcl_ChannelWatchProc +#define Tcl_ChannelWatchProc \ + (tclStubsPtr->tcl_ChannelWatchProc) /* 408 */ +#endif +#ifndef Tcl_ChannelGetHandleProc +#define Tcl_ChannelGetHandleProc \ + (tclStubsPtr->tcl_ChannelGetHandleProc) /* 409 */ +#endif +#ifndef Tcl_ChannelFlushProc +#define Tcl_ChannelFlushProc \ + (tclStubsPtr->tcl_ChannelFlushProc) /* 410 */ +#endif +#ifndef Tcl_ChannelHandlerProc +#define Tcl_ChannelHandlerProc \ + (tclStubsPtr->tcl_ChannelHandlerProc) /* 411 */ +#endif #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #endif /* _TCLDECLS */ Index: generic/tclEncoding.c ================================================================== --- generic/tclEncoding.c +++ generic/tclEncoding.c @@ -6,11 +6,11 @@ * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclEncoding.c,v 1.5 2000/01/21 02:25:26 hobbs Exp $ + * RCS: @(#) $Id: tclEncoding.c,v 1.5.2.1 2001/04/03 22:54:36 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -1326,18 +1326,35 @@ unsigned char used[256]; unsigned int size; TableEncodingData *dataPtr; unsigned short *pageMemPtr; Tcl_EncodingType encType; - char *hex; + + /* + * Speed over memory. Use a full 256 character table to decode hex + * sequences in the encoding files. + */ + static char staticHex[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, - 10, 11, 12, 13, 14, 15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0 ... 15 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 16 ... 31 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 32 ... 47 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 48 ... 63 */ + 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 64 ... 79 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 ... 95 */ + 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 96 ... 111 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 112 ... 127 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 128 ... 143 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 144 ... 159 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 160 ... 175 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 176 ... 191 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 192 ... 207 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 208 ... 223 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 224 ... 239 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 240 ... 255 */ }; - hex = staticHex - '0'; - Tcl_DStringInit(&lineString); Tcl_Gets(chan, &lineString); line = Tcl_DStringValue(&lineString); fallback = (int) strtol(line, &line, 16); @@ -1381,19 +1398,19 @@ int ch; char *p; Tcl_ReadChars(chan, objPtr, 3 + 16 * (16 * 4 + 1), 0); p = Tcl_GetString(objPtr); - hi = (hex[(int)p[0]] << 4) + hex[(int)p[1]]; + hi = (staticHex[(unsigned int)p[0]] << 4) + staticHex[(unsigned int)p[1]]; dataPtr->toUnicode[hi] = pageMemPtr; p += 2; for (lo = 0; lo < 256; lo++) { if ((lo & 0x0f) == 0) { p++; } - ch = (hex[(int)p[0]] << 12) + (hex[(int)p[1]] << 8) - + (hex[(int)p[2]] << 4) + hex[(int)p[3]]; + ch = (staticHex[(unsigned int)p[0]] << 12) + (staticHex[(unsigned int)p[1]] << 8) + + (staticHex[(unsigned int)p[2]] << 4) + staticHex[(unsigned int)p[3]]; if (ch != 0) { used[ch >> 8] = 1; } *pageMemPtr = (unsigned short) ch; pageMemPtr++; @@ -1508,11 +1525,10 @@ encType.fromUtfProc = TableFromUtfProc; encType.freeProc = TableFreeProc; encType.nullSize = (type == ENCODING_DOUBLEBYTE) ? 2 : 1; encType.clientData = (ClientData) dataPtr; return Tcl_CreateEncoding(&encType); - } /* *------------------------------------------------------------------------- * Index: generic/tclEnv.c ================================================================== --- generic/tclEnv.c +++ generic/tclEnv.c @@ -10,11 +10,11 @@ * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclEnv.c,v 1.7 2000/04/19 08:32:44 hobbs Exp $ + * RCS: @(#) $Id: tclEnv.c,v 1.7.2.2 2001/04/03 22:54:37 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -354,11 +354,12 @@ void TclUnsetEnv(name) CONST char *name; /* Name of variable to remove (UTF-8). */ { char *oldValue; - int length, index; + int length; + int index; #ifdef USE_PUTENV Tcl_DString envString; char *string; #else char **envPtr; Index: generic/tclEvent.c ================================================================== --- generic/tclEvent.c +++ generic/tclEvent.c @@ -9,11 +9,11 @@ * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclEvent.c,v 1.8 2000/04/18 23:10:04 hobbs Exp $ + * RCS: @(#) $Id: tclEvent.c,v 1.8.2.1 2001/04/03 22:54:37 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -96,10 +96,15 @@ * the standard channels. */ Tcl_Obj *tclLibraryPath; /* Path(s) to the Tcl library */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; +/* + * Common string for the library path for sharing across threads. + */ +char *tclLibraryPathStr; + /* * Prototypes for procedures referenced only in this file: */ static void BgErrorDeleteProc _ANSI_ARGS_((ClientData clientData, @@ -594,10 +599,16 @@ } if (tsdPtr->tclLibraryPath != NULL) { Tcl_DecrRefCount(tsdPtr->tclLibraryPath); } tsdPtr->tclLibraryPath = pathPtr; + + /* + * No mutex locking is needed here as up the stack we're within + * TclpInitLock(). + */ + tclLibraryPathStr = Tcl_GetStringFromObj(pathPtr, NULL); } /* *------------------------------------------------------------------------- * @@ -617,10 +628,21 @@ Tcl_Obj * TclGetLibraryPath() { ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); + + if (tsdPtr->tclLibraryPath == NULL) { + /* + * Grab the shared string and place it into a new thread specific + * Tcl_Obj. + */ + tsdPtr->tclLibraryPath = Tcl_NewStringObj(tclLibraryPathStr, -1); + + /* take ownership */ + Tcl_IncrRefCount(tsdPtr->tclLibraryPath); + } return tsdPtr->tclLibraryPath; } /* *------------------------------------------------------------------------- @@ -742,13 +764,14 @@ { ExitHandler *exitPtr; ThreadSpecificData *tsdPtr; TclpInitLock(); - tsdPtr = TCL_TSD_INIT(&dataKey); if (subsystemsInitialized != 0) { subsystemsInitialized = 0; + + tsdPtr = TCL_TSD_INIT(&dataKey); /* * Invoke exit handlers first. */ Index: generic/tclExecute.c ================================================================== --- generic/tclExecute.c +++ generic/tclExecute.c @@ -3,15 +3,16 @@ * * This file contains procedures that execute byte-compiled Tcl * commands. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. + * Copyright (c) 1998-2000 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclExecute.c,v 1.10 2000/03/27 22:18:55 hobbs Exp $ + * RCS: @(#) $Id: tclExecute.c,v 1.10.2.2 2001/08/07 15:41:20 msofer Exp $ */ #include "tclInt.h" #include "tclCompile.h" @@ -110,10 +111,21 @@ static char *resultStrings[] = { "TCL_OK", "TCL_ERROR", "TCL_RETURN", "TCL_BREAK", "TCL_CONTINUE" }; #endif +/* + * These are used by evalstats to monitor object usage in Tcl. + */ + +#ifdef TCL_COMPILE_STATS +long tclObjsAlloced = 0; +long tclObjsFreed = 0; +#define TCL_MAX_SHARED_OBJ_STATS 5 +long tclObjsShared[TCL_MAX_SHARED_OBJ_STATS] = { 0, 0, 0, 0, 0 }; +#endif /* TCL_COMPILE_STATS */ + /* * Macros for testing floating-point values for certain special cases. Test * for not-a-number by comparing a value against itself; test for infinity * by comparing against the largest floating-point value. */ @@ -423,11 +435,11 @@ void TclDeleteExecEnv(eePtr) ExecEnv *eePtr; /* Execution environment to free. */ { - ckfree((char *) eePtr->stackPtr); + Tcl_EventuallyFree((ClientData)eePtr->stackPtr, TCL_DYNAMIC); ckfree((char *) eePtr); } /* *---------------------------------------------------------------------- @@ -493,11 +505,11 @@ * storage if appropriate, and mark new space as malloc'ed. */ memcpy((VOID *) newStackPtr, (VOID *) eePtr->stackPtr, (size_t) currBytes); - ckfree((char *) eePtr->stackPtr); + Tcl_EventuallyFree((ClientData)eePtr->stackPtr, TCL_DYNAMIC); eePtr->stackPtr = newStackPtr; eePtr->stackEnd = (newElems - 1); /* i.e. index of last usable item */ } /* @@ -620,15 +632,19 @@ */ valuePtr = POP_OBJECT(); Tcl_SetObjResult(interp, valuePtr); TclDecrRefCount(valuePtr); if (stackTop != initStackTop) { - fprintf(stderr, "\nTclExecuteByteCode: done instruction at pc %u: stack top %d != entry stack top %d\n", + /* + * if extra items in the stack, clean up the stack before return + */ + if (stackTop > initStackTop) goto abnormalReturn; + fprintf(stderr, "\nTclExecuteByteCode: done instruction at pc %u: stack top %d < entry stack top %d\n", (unsigned int)(pc - codePtr->codeStart), (unsigned int) stackTop, (unsigned int) initStackTop); - panic("TclExecuteByteCode execution failure: end stack top != start stack top"); + panic("TclExecuteByteCode execution failure: end stack top < start stack top"); } TRACE_WITH_OBJ(("=> return code=%d, result=", result), iPtr->objResultPtr); #ifdef TCL_COMPILE_DEBUG if (traceInstructions) { @@ -730,19 +746,23 @@ { int objc = opnd; /* The number of arguments. */ Tcl_Obj **objv; /* The array of argument objects. */ Command *cmdPtr; /* Points to command's Command struct. */ int newPcOffset; /* New inst offset for break, continue. */ + Tcl_Obj **preservedStack; + /* Reference to memory block containing + * objv array (must be kept live throughout + * trace and command invokations.) */ #ifdef TCL_COMPILE_DEBUG int isUnknownCmd = 0; char cmdNameBuf[21]; #endif /* TCL_COMPILE_DEBUG */ - + /* * If the interpreter was deleted, return an error. */ - + if (iPtr->flags & DELETED) { Tcl_ResetResult(interp); Tcl_AppendToObj(Tcl_GetObjResult(interp), "attempt to call eval in deleted interpreter", -1); Tcl_SetErrorCode(interp, "CORE", "IDELETE", @@ -749,11 +769,11 @@ "attempt to call eval in deleted interpreter", (char *) NULL); result = TCL_ERROR; goto checkForCatch; } - + /* * Find the procedure to execute this command. If the * command is not found, handle it with the "unknown" proc. */ @@ -781,18 +801,30 @@ } objc++; objv[0] = Tcl_NewStringObj("unknown", -1); Tcl_IncrRefCount(objv[0]); } - + + /* + * A reference to part of the stack vector itself + * escapes our control, so must use preserve/release + * to stop it from being deallocated by a recursive + * call to ourselves. The extra variable is needed + * because all others are liable to change due to the + * trace procedures. + */ + + Tcl_Preserve((ClientData)stackPtr); + preservedStack = stackPtr; + /* * Call any trace procedures. */ if (iPtr->tracePtr != NULL) { Trace *tracePtr, *nextTracePtr; - + for (tracePtr = iPtr->tracePtr; tracePtr != NULL; tracePtr = nextTracePtr) { nextTracePtr = tracePtr->nextPtr; if (iPtr->numLevels <= tracePtr->level) { int numChars; @@ -805,18 +837,18 @@ CACHE_STACK_INFO(); } } } } - + /* * Finally, invoke the command's Tcl_ObjCmdProc. First reset * the interpreter's string and object results to their * default empty values since they could have gotten changed * by earlier invocations. */ - + Tcl_ResetResult(interp); if (tclTraceExec >= 2) { #ifdef TCL_COMPILE_DEBUG if (traceInstructions) { strncpy(cmdNameBuf, Tcl_GetString(objv[0]), 20); @@ -847,10 +879,18 @@ if (Tcl_AsyncReady()) { result = Tcl_AsyncInvoke(interp, result); } CACHE_STACK_INFO(); + /* + * If the old stack is going to be released, it is + * safe to do so now, since no references to objv are + * going to be used from now on. + */ + + Tcl_Release((ClientData)preservedStack); + /* * If the interpreter has a non-empty string result, the * result object is either empty or stale because some * procedure set interp->result directly. If so, move the * string result to the result object, then reset the @@ -2305,19 +2345,22 @@ case INST_UMINUS: case INST_LNOT: { /* - * The operand must be numeric. If the operand object is - * unshared modify it directly, otherwise create a copy to - * modify: this is "copy on write". free any old string - * representation since it is now invalid. + * The operand must be numeric or a boolean string as + * accepted by Tcl_GetBooleanFromObj(). If the operand + * object is unshared modify it directly, otherwise + * create a copy to modify: this is "copy on write". + * Free any old string representation since it is now + * invalid. */ - + double d; + int boolvar; Tcl_ObjType *tPtr; - + valuePtr = POP_OBJECT(); tPtr = valuePtr->typePtr; if ((tPtr != &tclIntType) && ((tPtr != &tclDoubleType) || (valuePtr->bytes != NULL))) { if ((tPtr == &tclBooleanType) @@ -2330,10 +2373,15 @@ valuePtr, &i); } else { result = Tcl_GetDoubleFromObj((Tcl_Interp *) NULL, valuePtr, &d); } + if (result == TCL_ERROR && *pc == INST_LNOT) { + result = Tcl_GetBooleanFromObj((Tcl_Interp *)NULL, + valuePtr, &boolvar); + i = (long)boolvar; /* i is long, not int! */ + } if (result != TCL_OK) { TRACE(("\"%.20s\" => ILLEGAL TYPE %s\n", s, (tPtr? tPtr->name : "null"))); IllegalExprOperandType(interp, pc, valuePtr); Tcl_DecrRefCount(valuePtr); @@ -2340,16 +2388,16 @@ goto checkForCatch; } } tPtr = valuePtr->typePtr; } - + if (Tcl_IsShared(valuePtr)) { /* * Create a new object. */ - if (tPtr == &tclIntType) { + if ((tPtr == &tclIntType) || (tPtr == &tclBooleanType)) { i = valuePtr->internalRep.longValue; objPtr = Tcl_NewLongObj( (*pc == INST_UMINUS)? -i : !i); TRACE_WITH_OBJ(("%ld => ", i), objPtr); } else { @@ -2369,11 +2417,11 @@ TclDecrRefCount(valuePtr); } else { /* * valuePtr is unshared. Modify it directly. */ - if (tPtr == &tclIntType) { + if ((tPtr == &tclIntType) || (tPtr == &tclBooleanType)) { i = valuePtr->internalRep.longValue; Tcl_SetLongObj(valuePtr, (*pc == INST_UMINUS)? -i : !i); TRACE_WITH_OBJ(("%ld => ", i), valuePtr); } else { @@ -3842,15 +3890,25 @@ { Tcl_Obj **stackPtr; /* Cached evaluation stack base pointer. */ register int stackTop; /* Cached top index of evaluation stack. */ Interp *iPtr = (Interp *) interp; double dResult; - int tmp; + long tmp; /* Algorithm assumes at least 32 bits. + * Only long guarantees that. See below. */ if (!(iPtr->flags & RAND_SEED_INITIALIZED)) { iPtr->flags |= RAND_SEED_INITIALIZED; iPtr->randSeed = TclpGetClicks(); + + /* + * Make sure 1 <= randSeed <= (2^31) - 2. See below. + */ + + iPtr->randSeed &= (unsigned long) 0x7fffffff; + if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { + iPtr->randSeed ^= 123459876; + } } /* * Set stackPtr and stackTop from eePtr. */ @@ -3859,15 +3917,24 @@ /* * Generate the random number using the linear congruential * generator defined by the following recurrence: * seed = ( IA * seed ) mod IM - * where IA is 16807 and IM is (2^31) - 1. In order to avoid - * potential problems with integer overflow, the code uses - * additional constants IQ and IR such that + * where IA is 16807 and IM is (2^31) - 1. The recurrence maps + * a seed in the range [1, IM - 1] to a new seed in that same range. + * The recurrence maps IM to 0, and maps 0 back to 0, so those two + * values must not be allowed as initial values of seed. + * + * In order to avoid potential problems with integer overflow, the + * recurrence is implemented in terms of additional constants + * IQ and IR such that * IM = IA*IQ + IR - * For details on how this algorithm works, refer to the following + * None of the operations in the implementation overflows a 32-bit + * signed integer, and the C type long is guaranteed to be at least + * 32 bits wide. + * + * For more details on how this algorithm works, refer to the following * papers: * * S.K. Park & K.W. Miller, "Random number generators: good ones * are hard to find," Comm ACM 31(10):1192-1201, Oct 1988 * @@ -3879,33 +3946,21 @@ #define RAND_IM 2147483647 #define RAND_IQ 127773 #define RAND_IR 2836 #define RAND_MASK 123459876 - if (iPtr->randSeed == 0) { - /* - * Don't allow a 0 seed, since it breaks the generator. Shift - * it to some other value. - */ - - iPtr->randSeed = 123459876; - } tmp = iPtr->randSeed/RAND_IQ; iPtr->randSeed = RAND_IA*(iPtr->randSeed - tmp*RAND_IQ) - RAND_IR*tmp; if (iPtr->randSeed < 0) { iPtr->randSeed += RAND_IM; } /* - * On 64-bit architectures we need to mask off the upper bits to - * ensure we only have a 32-bit range. The constant has the - * bizarre form below in order to make sure that it doesn't - * get sign-extended (the rules for sign extension are very - * concat, particularly on 64-bit machines). + * Since the recurrence keeps seed values in the range [1, RAND_IM - 1], + * dividing by RAND_IM yields a double in the range (0, 1). */ - iPtr->randSeed &= ((((unsigned long) 0xfffffff) << 4) | 0xf); dResult = iPtr->randSeed * (1.0/RAND_IM); /* * Push a Tcl object with the result. */ @@ -4048,15 +4103,20 @@ DECACHE_STACK_INFO(); return TCL_ERROR; } /* - * Reset the seed. + * Reset the seed. Make sure 1 <= randSeed <= 2^31 - 2. + * See comments in ExprRandFunc() for more details. */ iPtr->flags |= RAND_SEED_INITIALIZED; iPtr->randSeed = i; + iPtr->randSeed &= (unsigned long) 0x7fffffff; + if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { + iPtr->randSeed ^= 123459876; + } /* * To avoid duplicating the random number generation code we simply * clean up our state and call the real random number function. That * function will always succeed. @@ -4447,11 +4507,11 @@ fprintf(stdout, " Mean code/compile %.1f\n", totalCodeBytes / statsPtr->numCompilations); fprintf(stdout, " Mean code/source %.1f\n", totalCodeBytes / statsPtr->totalSrcBytes); - fprintf(stdout, "\nCurrent ByteCodes %ld\n", + fprintf(stdout, "\nCurrent (active) ByteCodes %ld\n", numCurrentByteCodes); fprintf(stdout, " Source bytes %.6g\n", statsPtr->currentSrcBytes); fprintf(stdout, " Code bytes %.6g\n", currentCodeBytes); @@ -4469,10 +4529,33 @@ currentCodeBytes / statsPtr->currentSrcBytes); fprintf(stdout, " Code + source bytes %.6g (%0.1f mean code/src)\n", (currentCodeBytes + statsPtr->currentSrcBytes), (currentCodeBytes / statsPtr->currentSrcBytes) + 1.0); + /* + * Tcl_IsShared statistics check + * + * This gives the refcount of each obj as Tcl_IsShared was called + * for it. Shared objects must be duplicated before they can be + * modified. + */ + + numSharedMultX = 0; + fprintf(stdout, "\nTcl_IsShared object check (all objects):\n"); + fprintf(stdout, " Object had refcount <=1 (not shared) %ld\n", + tclObjsShared[1]); + for (i = 2; i < TCL_MAX_SHARED_OBJ_STATS; i++) { + fprintf(stdout, " refcount ==%d %ld\n", + i, tclObjsShared[i]); + numSharedMultX += tclObjsShared[i]; + } + fprintf(stdout, " refcount >=%d %ld\n", + i, tclObjsShared[0]); + numSharedMultX += tclObjsShared[0]; + fprintf(stdout, " Total shared objects %d\n", + numSharedMultX); + /* * Literal table statistics. */ numByteCodeLits = 0; @@ -4509,11 +4592,11 @@ tclObjsAlloced); fprintf(stdout, "Current objects %ld\n", (tclObjsAlloced - tclObjsFreed)); fprintf(stdout, "Total literal objects %ld\n", statsPtr->numLiteralsCreated); - + fprintf(stdout, "\nCurrent literal objects %d (%0.1f%% of current objects)\n", globalTablePtr->numEntries, (globalTablePtr->numEntries * 100.0) / (tclObjsAlloced-tclObjsFreed)); fprintf(stdout, " ByteCode literals %ld (%0.1f%% of current literals)\n", numByteCodeLits, @@ -4660,11 +4743,11 @@ sum += statsPtr->byteCodeCount[i]; fprintf(stdout, " %10d %8.0f%%\n", decadeHigh, (sum * 100.0) / statsPtr->numCompilations); } - fprintf(stdout, "\nByteCode longevity (excludes current ByteCodes):\n"); + fprintf(stdout, "\nByteCode longevity (excludes Current ByteCodes):\n"); fprintf(stdout, " Up to ms Percentage\n"); minSizeDecade = maxSizeDecade = 0; for (i = 0; i < 31; i++) { if (statsPtr->lifetimeCount[i] > 0) { minSizeDecade = i; Index: generic/tclGetDate.y ================================================================== --- generic/tclGetDate.y +++ generic/tclGetDate.y @@ -9,11 +9,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclGetDate.y,v 1.15 2000/02/28 18:49:42 ericm Exp $ + * RCS: @(#) $Id: tclGetDate.y,v 1.15.2.1 2000/08/07 21:30:36 hobbs Exp $ */ %{ /* * tclDate.c -- @@ -145,11 +145,11 @@ %token tSTARDATE tSEC_UNIT tSNUMBER tUNUMBER tZONE tEPOCH tDST tISOBASE %token tDAY_UNIT tNEXT %type tDAY tDAYZONE tMINUTE_UNIT tMONTH tMONTH_UNIT tDST %type tSEC_UNIT tSNUMBER tUNUMBER tZONE tISOBASE tDAY_UNIT -%type unit ago sign tNEXT tSTARDATE +%type unit sign tNEXT tSTARDATE %type tMERIDIAN o_merid %% spec : /* NULL */ @@ -355,26 +355,30 @@ yyRelDay += (($2%1000)*(365 + IsLeapYear(yyYear)))/1000; yyRelSeconds += $4 * 144 * 60; } ; -relspec : sign tUNUMBER unit ago { *yyRelPointer += $1 * $2 * $3 * $4; } - | tUNUMBER unit ago { *yyRelPointer += $1 * $2 * $3; } - | tNEXT unit { *yyRelPointer += $2; } - | tNEXT tUNUMBER unit { *yyRelPointer += $2 * $3; } - | unit ago { *yyRelPointer += $1 * $2; } +relspec : relunits tAGO { + yyRelSeconds *= -1; + yyRelMonth *= -1; + yyRelDay *= -1; + } + | relunits + ; +relunits : sign tUNUMBER unit { *yyRelPointer += $1 * $2 * $3; } + | tUNUMBER unit { *yyRelPointer += $1 * $2; } + | tNEXT unit { *yyRelPointer += $2; } + | tNEXT tUNUMBER unit { *yyRelPointer += $2 * $3; } + | unit { *yyRelPointer += $1; } ; sign : '-' { $$ = -1; } | '+' { $$ = 1; } ; unit : tSEC_UNIT { $$ = $1; yyRelPointer = &yyRelSeconds; } | tDAY_UNIT { $$ = $1; yyRelPointer = &yyRelDay; } | tMONTH_UNIT { $$ = $1; yyRelPointer = &yyRelMonth; } ; -ago : tAGO { $$ = -1; } - | { $$ = 1; } - ; number : tUNUMBER { if (yyHaveTime && yyHaveDate && !yyHaveRel) { yyYear = $1; Index: generic/tclIO.c ================================================================== --- generic/tclIO.c +++ generic/tclIO.c @@ -2,355 +2,25 @@ * tclIO.c -- * * This file provides the generic portions (those that are the same on * all platforms and for all channel types) of Tcl's IO facilities. * - * Copyright (c) 1998 Scriptics Corporation + * Copyright (c) 1998-2000 Ajuba Solutions * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIO.c,v 1.20 2000/04/05 19:00:41 kupries Exp $ + * RCS: @(#) $Id: tclIO.c,v 1.20.2.8 2001/07/18 17:17:19 andreas_kupries Exp $ */ #include "tclInt.h" #include "tclPort.h" - -/* - * Make sure that both EAGAIN and EWOULDBLOCK are defined. This does not - * compile on systems where neither is defined. We want both defined so - * that we can test safely for both. In the code we still have to test for - * both because there may be systems on which both are defined and have - * different values. - */ - -#if ((!defined(EWOULDBLOCK)) && (defined(EAGAIN))) -# define EWOULDBLOCK EAGAIN -#endif -#if ((!defined(EAGAIN)) && (defined(EWOULDBLOCK))) -# define EAGAIN EWOULDBLOCK -#endif -#if ((!defined(EAGAIN)) && (!defined(EWOULDBLOCK))) - error one of EWOULDBLOCK or EAGAIN must be defined -#endif - -/* - * The following structure encapsulates the state for a background channel - * copy. Note that the data buffer for the copy will be appended to this - * structure. - */ - -typedef struct CopyState { - struct Channel *readPtr; /* Pointer to input channel. */ - struct Channel *writePtr; /* Pointer to output channel. */ - int readFlags; /* Original read channel flags. */ - int writeFlags; /* Original write channel flags. */ - int toRead; /* Number of bytes to copy, or -1. */ - int total; /* Total bytes transferred (written). */ - Tcl_Interp *interp; /* Interp that started the copy. */ - Tcl_Obj *cmdPtr; /* Command to be invoked at completion. */ - int bufSize; /* Size of appended buffer. */ - char buffer[1]; /* Copy buffer, this must be the last - * field. */ -} CopyState; - -/* - * struct ChannelBuffer: - * - * Buffers data being sent to or from a channel. - */ - -typedef struct ChannelBuffer { - int nextAdded; /* The next position into which a character - * will be put in the buffer. */ - int nextRemoved; /* Position of next byte to be removed - * from the buffer. */ - int bufLength; /* How big is the buffer? */ - struct ChannelBuffer *nextPtr; - /* Next buffer in chain. */ - char buf[4]; /* Placeholder for real buffer. The real - * buffer occuppies this space + bufSize-4 - * bytes. This must be the last field in - * the structure. */ -} ChannelBuffer; - -#define CHANNELBUFFER_HEADER_SIZE (sizeof(ChannelBuffer) - 4) - -/* - * How much extra space to allocate in buffer to hold bytes from previous - * buffer (when converting to UTF-8) or to hold bytes that will go to - * next buffer (when converting from UTF-8). - */ - -#define BUFFER_PADDING 16 - -/* - * The following defines the *default* buffer size for channels. - */ - -#define CHANNELBUFFER_DEFAULT_SIZE (1024 * 4) - -/* - * Structure to record a close callback. One such record exists for - * each close callback registered for a channel. - */ - -typedef struct CloseCallback { - Tcl_CloseProc *proc; /* The procedure to call. */ - ClientData clientData; /* Arbitrary one-word data to pass - * to the callback. */ - struct CloseCallback *nextPtr; /* For chaining close callbacks. */ -} CloseCallback; - -/* - * The following structure describes the information saved from a call to - * "fileevent". This is used later when the event being waited for to - * invoke the saved script in the interpreter designed in this record. - */ - -typedef struct EventScriptRecord { - struct Channel *chanPtr; /* The channel for which this script is - * registered. This is used only when an - * error occurs during evaluation of the - * script, to delete the handler. */ - Tcl_Obj *scriptPtr; /* Script to invoke. */ - Tcl_Interp *interp; /* In what interpreter to invoke script? */ - int mask; /* Events must overlap current mask for the - * stored script to be invoked. */ - struct EventScriptRecord *nextPtr; - /* Next in chain of records. */ -} EventScriptRecord; - -/* - * struct Channel: - * - * One of these structures is allocated for each open channel. It contains data - * specific to the channel but which belongs to the generic part of the Tcl - * channel mechanism, and it points at an instance specific (and type - * specific) * instance data, and at a channel type structure. - */ - -typedef struct Channel { - char *channelName; /* The name of the channel instance in Tcl - * commands. Storage is owned by the generic IO - * code, is dynamically allocated. */ - int flags; /* ORed combination of the flags defined - * below. */ - Tcl_Encoding encoding; /* Encoding to apply when reading or writing - * data on this channel. NULL means no - * encoding is applied to data. */ - Tcl_EncodingState inputEncodingState; - /* Current encoding state, used when converting - * input data bytes to UTF-8. */ - int inputEncodingFlags; /* Encoding flags to pass to conversion - * routine when converting input data bytes to - * UTF-8. May be TCL_ENCODING_START before - * converting first byte and TCL_ENCODING_END - * when EOF is seen. */ - Tcl_EncodingState outputEncodingState; - /* Current encoding state, used when converting - * UTF-8 to output data bytes. */ - int outputEncodingFlags; /* Encoding flags to pass to conversion - * routine when converting UTF-8 to output - * data bytes. May be TCL_ENCODING_START - * before converting first byte and - * TCL_ENCODING_END when EOF is seen. */ - Tcl_EolTranslation inputTranslation; - /* What translation to apply for end of line - * sequences on input? */ - Tcl_EolTranslation outputTranslation; - /* What translation to use for generating - * end of line sequences in output? */ - int inEofChar; /* If nonzero, use this as a signal of EOF - * on input. */ - int outEofChar; /* If nonzero, append this to the channel - * when it is closed if it is open for - * writing. */ - int unreportedError; /* Non-zero if an error report was deferred - * because it happened in the background. The - * value is the POSIX error code. */ - ClientData instanceData; /* Instance-specific data provided by - * creator of channel. */ - - Tcl_ChannelType *typePtr; /* Pointer to channel type structure. */ - int refCount; /* How many interpreters hold references to - * this IO channel? */ - CloseCallback *closeCbPtr; /* Callbacks registered to be called when the - * channel is closed. */ - char *outputStage; /* Temporary staging buffer used when - * translating EOL before converting from - * UTF-8 to external form. */ - ChannelBuffer *curOutPtr; /* Current output buffer being filled. */ - ChannelBuffer *outQueueHead;/* Points at first buffer in output queue. */ - ChannelBuffer *outQueueTail;/* Points at last buffer in output queue. */ - - ChannelBuffer *saveInBufPtr;/* Buffer saved for input queue - eliminates - * need to allocate a new buffer for "gets" - * that crosses buffer boundaries. */ - ChannelBuffer *inQueueHead; /* Points at first buffer in input queue. */ - ChannelBuffer *inQueueTail; /* Points at last buffer in input queue. */ - - struct ChannelHandler *chPtr;/* List of channel handlers registered - * for this channel. */ - int interestMask; /* Mask of all events this channel has - * handlers for. */ - struct Channel *nextChanPtr;/* Next in list of channels currently open. */ - EventScriptRecord *scriptRecordPtr; - /* Chain of all scripts registered for - * event handlers ("fileevent") on this - * channel. */ - int bufSize; /* What size buffers to allocate? */ - Tcl_TimerToken timer; /* Handle to wakeup timer for this channel. */ - CopyState *csPtr; /* State of background copy, or NULL. */ - struct Channel* supercedes; /* Refers to channel this one was stacked upon. - This reference is NULL for normal channels. - See Tcl_StackChannel. */ - -} Channel; - -/* - * Values for the flags field in Channel. Any ORed combination of the - * following flags can be stored in the field. These flags record various - * options and state bits about the channel. In addition to the flags below, - * the channel can also have TCL_READABLE (1<<1) and TCL_WRITABLE (1<<2) set. - */ - -#define CHANNEL_NONBLOCKING (1<<3) /* Channel is currently in - * nonblocking mode. */ -#define CHANNEL_LINEBUFFERED (1<<4) /* Output to the channel must be - * flushed after every newline. */ -#define CHANNEL_UNBUFFERED (1<<5) /* Output to the channel must always - * be flushed immediately. */ -#define BUFFER_READY (1<<6) /* Current output buffer (the - * curOutPtr field in the - * channel structure) should be - * output as soon as possible even - * though it may not be full. */ -#define BG_FLUSH_SCHEDULED (1<<7) /* A background flush of the - * queued output buffers has been - * scheduled. */ -#define CHANNEL_CLOSED (1<<8) /* Channel has been closed. No - * further Tcl-level IO on the - * channel is allowed. */ -#define CHANNEL_EOF (1<<9) /* EOF occurred on this channel. - * This bit is cleared before every - * input operation. */ -#define CHANNEL_STICKY_EOF (1<<10) /* EOF occurred on this channel because - * we saw the input eofChar. This bit - * prevents clearing of the EOF bit - * before every input operation. */ -#define CHANNEL_BLOCKED (1<<11) /* EWOULDBLOCK or EAGAIN occurred - * on this channel. This bit is - * cleared before every input or - * output operation. */ -#define INPUT_SAW_CR (1<<12) /* Channel is in CRLF eol input - * translation mode and the last - * byte seen was a "\r". */ -#define INPUT_NEED_NL (1<<15) /* Saw a '\r' at end of last buffer, - * and there should be a '\n' at - * beginning of next buffer. */ -#define CHANNEL_DEAD (1<<13) /* The channel has been closed by - * the exit handler (on exit) but - * not deallocated. When any IO - * operation sees this flag on a - * channel, it does not call driver - * level functions to avoid referring - * to deallocated data. */ -#define CHANNEL_NEED_MORE_DATA (1<<14) /* The last input operation failed - * because there was not enough data - * to complete the operation. This - * flag is set when gets fails to - * get a complete line or when read - * fails to get a complete character. - * When set, file events will not be - * delivered for buffered data until - * the state of the channel changes. */ - -/* - * For each channel handler registered in a call to Tcl_CreateChannelHandler, - * there is one record of the following type. All of records for a specific - * channel are chained together in a singly linked list which is stored in - * the channel structure. - */ - -typedef struct ChannelHandler { - Channel *chanPtr; /* The channel structure for this channel. */ - int mask; /* Mask of desired events. */ - Tcl_ChannelProc *proc; /* Procedure to call in the type of - * Tcl_CreateChannelHandler. */ - ClientData clientData; /* Argument to pass to procedure. */ - struct ChannelHandler *nextPtr; - /* Next one in list of registered handlers. */ -} ChannelHandler; - -/* - * This structure keeps track of the current ChannelHandler being invoked in - * the current invocation of ChannelHandlerEventProc. There is a potential - * problem if a ChannelHandler is deleted while it is the current one, since - * ChannelHandlerEventProc needs to look at the nextPtr field. To handle this - * problem, structures of the type below indicate the next handler to be - * processed for any (recursively nested) dispatches in progress. The - * nextHandlerPtr field is updated if the handler being pointed to is deleted. - * The nextPtr field is used to chain together all recursive invocations, so - * that Tcl_DeleteChannelHandler can find all the recursively nested - * invocations of ChannelHandlerEventProc and compare the handler being - * deleted against the NEXT handler to be invoked in that invocation; when it - * finds such a situation, Tcl_DeleteChannelHandler updates the nextHandlerPtr - * field of the structure to the next handler. - */ - -typedef struct NextChannelHandler { - ChannelHandler *nextHandlerPtr; /* The next handler to be invoked in - * this invocation. */ - struct NextChannelHandler *nestedHandlerPtr; - /* Next nested invocation of - * ChannelHandlerEventProc. */ -} NextChannelHandler; - - -/* - * The following structure describes the event that is added to the Tcl - * event queue by the channel handler check procedure. - */ - -typedef struct ChannelHandlerEvent { - Tcl_Event header; /* Standard header for all events. */ - Channel *chanPtr; /* The channel that is ready. */ - int readyMask; /* Events that have occurred. */ -} ChannelHandlerEvent; - -/* - * The following structure is used by Tcl_GetsObj() to encapsulates the - * state for a "gets" operation. - */ - -typedef struct GetsState { - Tcl_Obj *objPtr; /* The object to which UTF-8 characters - * will be appended. */ - char **dstPtr; /* Pointer into objPtr's string rep where - * next character should be stored. */ - Tcl_Encoding encoding; /* The encoding to use to convert raw bytes - * to UTF-8. */ - ChannelBuffer *bufPtr; /* The current buffer of raw bytes being - * emptied. */ - Tcl_EncodingState state; /* The encoding state just before the last - * external to UTF-8 conversion in - * FilterInputBytes(). */ - int rawRead; /* The number of bytes removed from bufPtr - * in the last call to FilterInputBytes(). */ - int bytesWrote; /* The number of bytes of UTF-8 data - * appended to objPtr during the last call to - * FilterInputBytes(). */ - int charsWrote; /* The corresponding number of UTF-8 - * characters appended to objPtr during the - * last call to FilterInputBytes(). */ - int totalChars; /* The total number of UTF-8 characters - * appended to objPtr so far, just before the - * last call to FilterInputBytes(). */ -} GetsState; - +#include "tclIO.h" +#include + + /* * All static variables used in this file are collected into a single * instance of the following structure. For multi-threaded implementations, * there is one instance of this structure for each thread. * @@ -365,25 +35,14 @@ * invocations. */ NextChannelHandler *nestedHandlerPtr; /* - * List of all channels currently open. - */ - Channel *firstChanPtr; -#ifdef oldcode - /* - * Has a channel exit handler been created yet? - */ - int channelExitHandlerCreated; - - /* - * Has the channel event source been created and registered with the - * notifier? - */ - int channelEventSourceCreated; -#endif + * List of all channels currently open, indexed by ChannelState, + * as only one ChannelState exists per set of stacked channels. + */ + ChannelState *firstCSPtr; /* * Static variables to hold channels for stdin, stdout and stderr. */ Tcl_Channel stdinChannel; int stdinInitialized; @@ -394,83 +53,87 @@ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; - /* * Static functions in this file: */ static ChannelBuffer * AllocChannelBuffer _ANSI_ARGS_((int length)); -static void ChannelEventScriptInvoker _ANSI_ARGS_(( - ClientData clientData, int flags)); static void ChannelTimerProc _ANSI_ARGS_(( - ClientData clientData)); -static int CheckChannelErrors _ANSI_ARGS_((Channel *chanPtr, - int direction)); + ClientData clientData)); +static int CheckChannelErrors _ANSI_ARGS_((ChannelState *statePtr, + int direction)); static int CheckFlush _ANSI_ARGS_((Channel *chanPtr, - ChannelBuffer *bufPtr, int newlineFlag)); + ChannelBuffer *bufPtr, int newlineFlag)); static int CheckForDeadChannel _ANSI_ARGS_((Tcl_Interp *interp, - Channel *chan)); + ChannelState *statePtr)); static void CheckForStdChannelsBeingClosed _ANSI_ARGS_(( - Tcl_Channel chan)); + Tcl_Channel chan)); static void CleanupChannelHandlers _ANSI_ARGS_(( - Tcl_Interp *interp, Channel *chanPtr)); + Tcl_Interp *interp, Channel *chanPtr)); static int CloseChannel _ANSI_ARGS_((Tcl_Interp *interp, - Channel *chanPtr, int errorCode)); + Channel *chanPtr, int errorCode)); static void CommonGetsCleanup _ANSI_ARGS_((Channel *chanPtr, - Tcl_Encoding encoding)); + Tcl_Encoding encoding)); static int CopyAndTranslateBuffer _ANSI_ARGS_(( - Channel *chanPtr, char *result, int space)); + ChannelState *statePtr, char *result, + int space)); +static int CopyBuffer _ANSI_ARGS_(( + Channel *chanPtr, char *result, + int space)); static int CopyData _ANSI_ARGS_((CopyState *csPtr, int mask)); static void CopyEventProc _ANSI_ARGS_((ClientData clientData, - int mask)); + int mask)); static void CreateScriptRecord _ANSI_ARGS_(( - Tcl_Interp *interp, Channel *chanPtr, - int mask, Tcl_Obj *scriptPtr)); + Tcl_Interp *interp, Channel *chanPtr, + int mask, Tcl_Obj *scriptPtr)); static void DeleteChannelTable _ANSI_ARGS_(( - ClientData clientData, Tcl_Interp *interp)); + ClientData clientData, Tcl_Interp *interp)); static void DeleteScriptRecord _ANSI_ARGS_((Tcl_Interp *interp, - Channel *chanPtr, int mask)); -static void DiscardInputQueued _ANSI_ARGS_(( - Channel *chanPtr, int discardSavedBuffers)); + Channel *chanPtr, int mask)); +static void DiscardInputQueued _ANSI_ARGS_((ChannelState *statePtr, + int discardSavedBuffers)); static void DiscardOutputQueued _ANSI_ARGS_(( - Channel *chanPtr)); + ChannelState *chanPtr)); static int DoRead _ANSI_ARGS_((Channel *chanPtr, char *srcPtr, - int slen)); + int slen)); static int DoWrite _ANSI_ARGS_((Channel *chanPtr, char *src, - int srcLen)); + int srcLen)); static int FilterInputBytes _ANSI_ARGS_((Channel *chanPtr, - GetsState *statePtr)); + GetsState *statePtr)); static int FlushChannel _ANSI_ARGS_((Tcl_Interp *interp, - Channel *chanPtr, int calledFromAsyncFlush)); + Channel *chanPtr, int calledFromAsyncFlush)); static Tcl_HashTable * GetChannelTable _ANSI_ARGS_((Tcl_Interp *interp)); static int GetInput _ANSI_ARGS_((Channel *chanPtr)); static void PeekAhead _ANSI_ARGS_((Channel *chanPtr, - char **dstEndPtr, GetsState *gsPtr)); -static int ReadBytes _ANSI_ARGS_((Channel *chanPtr, - Tcl_Obj *objPtr, int charsLeft, int *offsetPtr)); -static int ReadChars _ANSI_ARGS_((Channel *chanPtr, - Tcl_Obj *objPtr, int charsLeft, int *offsetPtr, - int *factorPtr)); -static void RecycleBuffer _ANSI_ARGS_((Channel *chanPtr, - ChannelBuffer *bufPtr, int mustDiscard)); + char **dstEndPtr, GetsState *gsPtr)); +static int ReadBytes _ANSI_ARGS_((ChannelState *statePtr, + Tcl_Obj *objPtr, int charsLeft, + int *offsetPtr)); +static int ReadChars _ANSI_ARGS_((ChannelState *statePtr, + Tcl_Obj *objPtr, int charsLeft, int *offsetPtr, + int *factorPtr)); +static void RecycleBuffer _ANSI_ARGS_((ChannelState *statePtr, + ChannelBuffer *bufPtr, int mustDiscard)); +static int StackSetBlockMode _ANSI_ARGS_((Channel *chanPtr, + int mode)); static int SetBlockMode _ANSI_ARGS_((Tcl_Interp *interp, - Channel *chanPtr, int mode)); + Channel *chanPtr, int mode)); static void StopCopy _ANSI_ARGS_((CopyState *csPtr)); -static int TranslateInputEOL _ANSI_ARGS_((Channel *chanPtr, - char *dst, CONST char *src, int *dstLenPtr, - int *srcLenPtr)); -static int TranslateOutputEOL _ANSI_ARGS_((Channel *chanPtr, - char *dst, CONST char *src, int *dstLenPtr, - int *srcLenPtr)); +static int TranslateInputEOL _ANSI_ARGS_((ChannelState *statePtr, + char *dst, CONST char *src, int *dstLenPtr, + int *srcLenPtr)); +static int TranslateOutputEOL _ANSI_ARGS_((ChannelState *statePtr, + char *dst, CONST char *src, int *dstLenPtr, + int *srcLenPtr)); static void UpdateInterest _ANSI_ARGS_((Channel *chanPtr)); static int WriteBytes _ANSI_ARGS_((Channel *chanPtr, - CONST char *src, int srcLen)); + CONST char *src, int srcLen)); static int WriteChars _ANSI_ARGS_((Channel *chanPtr, - CONST char *src, int srcLen)); + CONST char *src, int srcLen)); /* *--------------------------------------------------------------------------- * @@ -520,16 +183,17 @@ void TclFinalizeIOSubsystem() { ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); Channel *chanPtr; /* Iterates over open channels. */ - Channel *nextChanPtr; /* Iterates over open channels. */ + ChannelState *nextCSPtr; /* Iterates over open channels. */ + ChannelState *statePtr; /* state of channel stack */ - - for (chanPtr = tsdPtr->firstChanPtr; chanPtr != (Channel *) NULL; - chanPtr = nextChanPtr) { - nextChanPtr = chanPtr->nextChanPtr; + for (statePtr = tsdPtr->firstCSPtr; statePtr != (ChannelState *) NULL; + statePtr = nextCSPtr) { + chanPtr = statePtr->topChanPtr; + nextCSPtr = statePtr->nextCSPtr; /* * Set the channel back into blocking mode to ensure that we wait * for all data to flush out. */ @@ -544,14 +208,14 @@ /* * Decrement the refcount which was earlier artificially bumped * up to keep the channel from being closed. */ - chanPtr->refCount--; + statePtr->refCount--; } - if (chanPtr->refCount <= 0) { + if (statePtr->refCount <= 0) { /* * Close it only if the refcount indicates that the channel is not * referenced from any interpreter. If it is, that interpreter will * close the channel when it gets destroyed. @@ -586,11 +250,11 @@ * channel with CHANNEL_DEAD to prevent any further IO operations * on it. */ chanPtr->instanceData = (ClientData) NULL; - chanPtr->flags |= CHANNEL_DEAD; + statePtr->flags |= CHANNEL_DEAD; } } } @@ -735,21 +399,21 @@ Tcl_CloseProc *proc; /* The callback routine to call when the * channel will be closed. */ ClientData clientData; /* Arbitrary data to pass to the * close callback. */ { - Channel *chanPtr; + ChannelState *statePtr; CloseCallback *cbPtr; - chanPtr = (Channel *) chan; + statePtr = ((Channel *) chan)->state; cbPtr = (CloseCallback *) ckalloc((unsigned) sizeof(CloseCallback)); cbPtr->proc = proc; cbPtr->clientData = clientData; - cbPtr->nextPtr = chanPtr->closeCbPtr; - chanPtr->closeCbPtr = cbPtr; + cbPtr->nextPtr = statePtr->closeCbPtr; + statePtr->closeCbPtr = cbPtr; } /* *---------------------------------------------------------------------- * @@ -776,20 +440,20 @@ Tcl_CloseProc *proc; /* The procedure for the callback to * remove. */ ClientData clientData; /* The callback data for the callback * to remove. */ { - Channel *chanPtr; + ChannelState *statePtr; CloseCallback *cbPtr, *cbPrevPtr; - chanPtr = (Channel *) chan; - for (cbPtr = chanPtr->closeCbPtr, cbPrevPtr = (CloseCallback *) NULL; - cbPtr != (CloseCallback *) NULL; - cbPtr = cbPtr->nextPtr) { + statePtr = ((Channel *) chan)->state; + for (cbPtr = statePtr->closeCbPtr, cbPrevPtr = (CloseCallback *) NULL; + cbPtr != (CloseCallback *) NULL; + cbPtr = cbPtr->nextPtr) { if ((cbPtr->proc == proc) && (cbPtr->clientData == clientData)) { if (cbPrevPtr == (CloseCallback *) NULL) { - chanPtr->closeCbPtr = cbPtr->nextPtr; + statePtr->closeCbPtr = cbPtr->nextPtr; } ckfree((char *) cbPtr); break; } else { cbPrevPtr = cbPtr; @@ -885,46 +549,48 @@ Tcl_Interp *interp; /* The interpreter being deleted. */ { Tcl_HashTable *hTblPtr; /* The hash table. */ Tcl_HashSearch hSearch; /* Search variable. */ Tcl_HashEntry *hPtr; /* Search variable. */ - Channel *chanPtr; /* Channel being deleted. */ + Channel *chanPtr; /* Channel being deleted. */ + ChannelState *statePtr; /* State of Channel being deleted. */ EventScriptRecord *sPtr, *prevPtr, *nextPtr; /* Variables to loop over all channel events * registered, to delete the ones that refer * to the interpreter being deleted. */ - + /* * Delete all the registered channels - this will close channels whose * refcount reaches zero. */ hTblPtr = (Tcl_HashTable *) clientData; for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); - hPtr != (Tcl_HashEntry *) NULL; - hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch)) { + hPtr != (Tcl_HashEntry *) NULL; + hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch)) { chanPtr = (Channel *) Tcl_GetHashValue(hPtr); + statePtr = chanPtr->state; /* * Remove any fileevents registered in this interpreter. */ - for (sPtr = chanPtr->scriptRecordPtr, + for (sPtr = statePtr->scriptRecordPtr, prevPtr = (EventScriptRecord *) NULL; - sPtr != (EventScriptRecord *) NULL; - sPtr = nextPtr) { + sPtr != (EventScriptRecord *) NULL; + sPtr = nextPtr) { nextPtr = sPtr->nextPtr; if (sPtr->interp == interp) { if (prevPtr == (EventScriptRecord *) NULL) { - chanPtr->scriptRecordPtr = nextPtr; + statePtr->scriptRecordPtr = nextPtr; } else { prevPtr->nextPtr = nextPtr; } Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, - ChannelEventScriptInvoker, (ClientData) sPtr); + TclChannelEventScriptInvoker, (ClientData) sPtr); Tcl_DecrRefCount(sPtr->scriptPtr); ckfree((char *) sPtr); } else { prevPtr = sPtr; @@ -937,13 +603,13 @@ * be inaccessible from the interpreter structure. Instead, we * emulate the behavior of Tcl_UnregisterChannel directly here. */ Tcl_DeleteHashEntry(hPtr); - chanPtr->refCount--; - if (chanPtr->refCount <= 0) { - if (!(chanPtr->flags & BG_FLUSH_SCHEDULED)) { + statePtr->refCount--; + if (statePtr->refCount <= 0) { + if (!(statePtr->flags & BG_FLUSH_SCHEDULED)) { (void) Tcl_Close(interp, (Tcl_Channel) chanPtr); } } } Tcl_DeleteHashTable(hTblPtr); @@ -974,28 +640,30 @@ static void CheckForStdChannelsBeingClosed(chan) Tcl_Channel chan; { - Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = ((Channel *) chan)->state; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); if ((chan == tsdPtr->stdinChannel) && (tsdPtr->stdinInitialized)) { - if (chanPtr->refCount < 2) { - chanPtr->refCount = 0; + if (statePtr->refCount < 2) { + statePtr->refCount = 0; tsdPtr->stdinChannel = NULL; return; } - } else if ((chan == tsdPtr->stdoutChannel) && (tsdPtr->stdoutInitialized)) { - if (chanPtr->refCount < 2) { - chanPtr->refCount = 0; + } else if ((chan == tsdPtr->stdoutChannel) + && (tsdPtr->stdoutInitialized)) { + if (statePtr->refCount < 2) { + statePtr->refCount = 0; tsdPtr->stdoutChannel = NULL; return; } - } else if ((chan == tsdPtr->stderrChannel) && (tsdPtr->stderrInitialized)) { - if (chanPtr->refCount < 2) { - chanPtr->refCount = 0; + } else if ((chan == tsdPtr->stderrChannel) + && (tsdPtr->stderrInitialized)) { + if (statePtr->refCount < 2) { + statePtr->refCount = 0; tsdPtr->stderrChannel = NULL; return; } } } @@ -1026,42 +694,36 @@ { Tcl_HashTable *hTblPtr; /* Hash table of channels. */ Tcl_HashEntry *hPtr; /* Search variable. */ int new; /* Is the hash entry new or does it exist? */ Channel *chanPtr; /* The actual channel. */ + ChannelState *statePtr; /* State of the actual channel. */ - chanPtr = (Channel *) chan; + /* + * Always (un)register bottom-most channel in the stack. This makes + * management of the channel list easier because no manipulation is + * necessary during (un)stack operation. + */ + chanPtr = ((Channel *) chan)->state->bottomChanPtr; + statePtr = chanPtr->state; - if (chanPtr->channelName == (char *) NULL) { + if (statePtr->channelName == (char *) NULL) { panic("Tcl_RegisterChannel: channel without name"); } if (interp != (Tcl_Interp *) NULL) { hTblPtr = GetChannelTable(interp); - hPtr = Tcl_CreateHashEntry(hTblPtr, chanPtr->channelName, &new); + hPtr = Tcl_CreateHashEntry(hTblPtr, statePtr->channelName, &new); if (new == 0) { if (chan == (Tcl_Channel) Tcl_GetHashValue(hPtr)) { return; } - /* Andreas Kupries , 12/13/1998 - * "Trf-Patch for filtering channels" - * - * This is the change to 'Tcl_RegisterChannel'. - * - * Explanation: - * The moment a channel is stacked upon another he - * takes the identity of the channel he supercedes, - * i.e. he gets the *same* name. Because of this we - * cannot check for duplicate names anymore, they - * have to be allowed now. - */ - - /* panic("Tcl_RegisterChannel: duplicate channel names"); */ + panic("Tcl_RegisterChannel: duplicate channel names"); } Tcl_SetHashValue(hPtr, (ClientData) chanPtr); } - chanPtr->refCount++; + statePtr->refCount++; } /* *---------------------------------------------------------------------- * @@ -1086,19 +748,26 @@ Tcl_Channel chan; /* Channel to delete. */ { Tcl_HashTable *hTblPtr; /* Hash table of channels. */ Tcl_HashEntry *hPtr; /* Search variable. */ Channel *chanPtr; /* The real IO channel. */ + ChannelState *statePtr; /* State of the real channel. */ - chanPtr = (Channel *) chan; - + /* + * Always (un)register bottom-most channel in the stack. This makes + * management of the channel list easier because no manipulation is + * necessary during (un)stack operation. + */ + chanPtr = ((Channel *) chan)->state->bottomChanPtr; + statePtr = chanPtr->state; + if (interp != (Tcl_Interp *) NULL) { hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); if (hTblPtr == (Tcl_HashTable *) NULL) { return TCL_OK; } - hPtr = Tcl_FindHashEntry(hTblPtr, chanPtr->channelName); + hPtr = Tcl_FindHashEntry(hTblPtr, statePtr->channelName); if (hPtr == (Tcl_HashEntry *) NULL) { return TCL_OK; } if ((Channel *) Tcl_GetHashValue(hPtr) != chanPtr) { return TCL_OK; @@ -1114,11 +783,11 @@ */ CleanupChannelHandlers(interp, chanPtr); } - chanPtr->refCount--; + statePtr->refCount--; /* * Perform special handling for standard channels being closed. If the * refCount is now 1 it means that the last reference to the standard * channel is being explicitly closed, so bump the refCount down @@ -1130,24 +799,24 @@ /* * If the refCount reached zero, close the actual channel. */ - if (chanPtr->refCount <= 0) { + if (statePtr->refCount <= 0) { /* * Ensure that if there is another buffer, it gets flushed * whether or not we are doing a background flush. */ - if ((chanPtr->curOutPtr != NULL) && - (chanPtr->curOutPtr->nextAdded > - chanPtr->curOutPtr->nextRemoved)) { - chanPtr->flags |= BUFFER_READY; + if ((statePtr->curOutPtr != NULL) && + (statePtr->curOutPtr->nextAdded > + statePtr->curOutPtr->nextRemoved)) { + statePtr->flags |= BUFFER_READY; } - chanPtr->flags |= CHANNEL_CLOSED; - if (!(chanPtr->flags & BG_FLUSH_SCHEDULED)) { + statePtr->flags |= CHANNEL_CLOSED; + if (!(statePtr->flags & BG_FLUSH_SCHEDULED)) { if (Tcl_Close(interp, chan) != TCL_OK) { return TCL_ERROR; } } } @@ -1199,32 +868,39 @@ name = chanName; if ((chanName[0] == 's') && (chanName[1] == 't')) { chanPtr = NULL; if (strcmp(chanName, "stdin") == 0) { - chanPtr = (Channel *)Tcl_GetStdChannel(TCL_STDIN); + chanPtr = (Channel *) Tcl_GetStdChannel(TCL_STDIN); } else if (strcmp(chanName, "stdout") == 0) { - chanPtr = (Channel *)Tcl_GetStdChannel(TCL_STDOUT); + chanPtr = (Channel *) Tcl_GetStdChannel(TCL_STDOUT); } else if (strcmp(chanName, "stderr") == 0) { - chanPtr = (Channel *)Tcl_GetStdChannel(TCL_STDERR); + chanPtr = (Channel *) Tcl_GetStdChannel(TCL_STDERR); } if (chanPtr != NULL) { - name = chanPtr->channelName; + name = chanPtr->state->channelName; } } - + hTblPtr = GetChannelTable(interp); hPtr = Tcl_FindHashEntry(hTblPtr, name); if (hPtr == (Tcl_HashEntry *) NULL) { Tcl_AppendResult(interp, "can not find channel named \"", chanName, "\"", (char *) NULL); return NULL; } + /* + * Always return bottom-most channel in the stack. This one lives + * the longest - other channels may go away unnoticed. + * The other APIs compensate where necessary to retrieve the + * topmost channel again. + */ chanPtr = (Channel *) Tcl_GetHashValue(hPtr); + chanPtr = chanPtr->state->bottomChanPtr; if (modePtr != NULL) { - *modePtr = (chanPtr->flags & (TCL_READABLE|TCL_WRITABLE)); + *modePtr = (chanPtr->state->flags & (TCL_READABLE|TCL_WRITABLE)); } return (Tcl_Channel) chanPtr; } @@ -1253,98 +929,132 @@ ClientData instanceData; /* Instance specific data. */ int mask; /* TCL_READABLE & TCL_WRITABLE to indicate * if the channel is readable, writable. */ { Channel *chanPtr; /* The channel structure newly created. */ + ChannelState *statePtr; /* The stack-level independent state info + * for the channel. */ CONST char *name; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); - chanPtr = (Channel *) ckalloc((unsigned) sizeof(Channel)); - + /* + * With the change of the Tcl_ChannelType structure to use a version in + * 8.3.2+, we have to make sure that our assumption that the structure + * remains a binary compatible size is true. + * + * If this assertion fails on some system, then it can be removed + * only if the user recompiles code with older channel drivers in + * the new system as well. + */ + + assert(sizeof(Tcl_ChannelTypeVersion) == sizeof(Tcl_DriverBlockModeProc*)); + + chanPtr = (Channel *) ckalloc((unsigned) sizeof(Channel)); + statePtr = (ChannelState *) ckalloc((unsigned) sizeof(ChannelState)); + chanPtr->state = statePtr; + + chanPtr->instanceData = instanceData; + chanPtr->typePtr = typePtr; + + /* + * Set all the bits that are part of the stack-independent state + * information for the channel. + */ + if (chanName != (char *) NULL) { - chanPtr->channelName = ckalloc((unsigned) (strlen(chanName) + 1)); - strcpy(chanPtr->channelName, chanName); + statePtr->channelName = ckalloc((unsigned) (strlen(chanName) + 1)); + strcpy(statePtr->channelName, chanName); } else { panic("Tcl_CreateChannel: NULL channel name"); } - chanPtr->flags = mask; + statePtr->flags = mask; /* * Set the channel to system default encoding. */ - chanPtr->encoding = NULL; + statePtr->encoding = NULL; name = Tcl_GetEncodingName(NULL); if (strcmp(name, "binary") != 0) { - chanPtr->encoding = Tcl_GetEncoding(NULL, name); + statePtr->encoding = Tcl_GetEncoding(NULL, name); } - chanPtr->inputEncodingState = NULL; - chanPtr->inputEncodingFlags = TCL_ENCODING_START; - chanPtr->outputEncodingState = NULL; - chanPtr->outputEncodingFlags = TCL_ENCODING_START; + statePtr->inputEncodingState = NULL; + statePtr->inputEncodingFlags = TCL_ENCODING_START; + statePtr->outputEncodingState = NULL; + statePtr->outputEncodingFlags = TCL_ENCODING_START; /* * Set the channel up initially in AUTO input translation mode to * accept "\n", "\r" and "\r\n". Output translation mode is set to * a platform specific default value. The eofChar is set to 0 for both * input and output, so that Tcl does not look for an in-file EOF * indicator (e.g. ^Z) and does not append an EOF indicator to files. */ - chanPtr->inputTranslation = TCL_TRANSLATE_AUTO; - chanPtr->outputTranslation = TCL_PLATFORM_TRANSLATION; - chanPtr->inEofChar = 0; - chanPtr->outEofChar = 0; - - chanPtr->unreportedError = 0; - chanPtr->instanceData = instanceData; - chanPtr->typePtr = typePtr; - chanPtr->refCount = 0; - chanPtr->closeCbPtr = (CloseCallback *) NULL; - chanPtr->curOutPtr = (ChannelBuffer *) NULL; - chanPtr->outQueueHead = (ChannelBuffer *) NULL; - chanPtr->outQueueTail = (ChannelBuffer *) NULL; - chanPtr->saveInBufPtr = (ChannelBuffer *) NULL; - chanPtr->inQueueHead = (ChannelBuffer *) NULL; - chanPtr->inQueueTail = (ChannelBuffer *) NULL; - chanPtr->chPtr = (ChannelHandler *) NULL; - chanPtr->interestMask = 0; - chanPtr->scriptRecordPtr = (EventScriptRecord *) NULL; - chanPtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE; - chanPtr->timer = NULL; - chanPtr->csPtr = NULL; - chanPtr->supercedes = (Channel*) NULL; - - chanPtr->outputStage = NULL; - if ((chanPtr->encoding != NULL) && (chanPtr->flags & TCL_WRITABLE)) { - chanPtr->outputStage = (char *) - ckalloc((unsigned) (chanPtr->bufSize + 2)); - } + statePtr->inputTranslation = TCL_TRANSLATE_AUTO; + statePtr->outputTranslation = TCL_PLATFORM_TRANSLATION; + statePtr->inEofChar = 0; + statePtr->outEofChar = 0; + + statePtr->unreportedError = 0; + statePtr->refCount = 0; + statePtr->closeCbPtr = (CloseCallback *) NULL; + statePtr->curOutPtr = (ChannelBuffer *) NULL; + statePtr->outQueueHead = (ChannelBuffer *) NULL; + statePtr->outQueueTail = (ChannelBuffer *) NULL; + statePtr->saveInBufPtr = (ChannelBuffer *) NULL; + statePtr->inQueueHead = (ChannelBuffer *) NULL; + statePtr->inQueueTail = (ChannelBuffer *) NULL; + statePtr->chPtr = (ChannelHandler *) NULL; + statePtr->interestMask = 0; + statePtr->scriptRecordPtr = (EventScriptRecord *) NULL; + statePtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE; + statePtr->timer = NULL; + statePtr->csPtr = NULL; + + statePtr->outputStage = NULL; + if ((statePtr->encoding != NULL) && (statePtr->flags & TCL_WRITABLE)) { + statePtr->outputStage = (char *) + ckalloc((unsigned) (statePtr->bufSize + 2)); + } + + /* + * As we are creating the channel, it is obviously the top for now + */ + statePtr->topChanPtr = chanPtr; + statePtr->bottomChanPtr = chanPtr; + chanPtr->downChanPtr = (Channel *) NULL; + chanPtr->upChanPtr = (Channel *) NULL; + chanPtr->inQueueHead = (ChannelBuffer*) NULL; + chanPtr->inQueueTail = (ChannelBuffer*) NULL; /* * Link the channel into the list of all channels; create an on-exit * handler if there is not one already, to close off all the channels * in the list on exit. */ - chanPtr->nextChanPtr = tsdPtr->firstChanPtr; - tsdPtr->firstChanPtr = chanPtr; + statePtr->nextCSPtr = tsdPtr->firstCSPtr; + tsdPtr->firstCSPtr = statePtr; /* * Install this channel in the first empty standard channel slot, if * the channel was previously closed explicitly. */ - if ((tsdPtr->stdinChannel == NULL) && (tsdPtr->stdinInitialized == 1)) { - Tcl_SetStdChannel((Tcl_Channel)chanPtr, TCL_STDIN); - Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr); - } else if ((tsdPtr->stdoutChannel == NULL) && (tsdPtr->stdoutInitialized == 1)) { - Tcl_SetStdChannel((Tcl_Channel)chanPtr, TCL_STDOUT); - Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr); - } else if ((tsdPtr->stderrChannel == NULL) && (tsdPtr->stderrInitialized == 1)) { - Tcl_SetStdChannel((Tcl_Channel)chanPtr, TCL_STDERR); + if ((tsdPtr->stdinChannel == NULL) && + (tsdPtr->stdinInitialized == 1)) { + Tcl_SetStdChannel((Tcl_Channel) chanPtr, TCL_STDIN); + Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr); + } else if ((tsdPtr->stdoutChannel == NULL) && + (tsdPtr->stdoutInitialized == 1)) { + Tcl_SetStdChannel((Tcl_Channel) chanPtr, TCL_STDOUT); + Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr); + } else if ((tsdPtr->stderrChannel == NULL) && + (tsdPtr->stderrInitialized == 1)) { + Tcl_SetStdChannel((Tcl_Channel) chanPtr, TCL_STDERR); Tcl_RegisterChannel((Tcl_Interp *) NULL, (Tcl_Channel) chanPtr); } return (Tcl_Channel) chanPtr; } @@ -1377,57 +1087,40 @@ *---------------------------------------------------------------------- */ Tcl_Channel Tcl_StackChannel(interp, typePtr, instanceData, mask, prevChan) - Tcl_Interp* interp; /* The interpreter we are working in */ + Tcl_Interp *interp; /* The interpreter we are working in */ Tcl_ChannelType *typePtr; /* The channel type record for the new * channel. */ - ClientData instanceData; /* Instance specific data for the new + ClientData instanceData; /* Instance specific data for the new * channel. */ - int mask; /* TCL_READABLE & TCL_WRITABLE to indicate + int mask; /* TCL_READABLE & TCL_WRITABLE to indicate * if the channel is readable, writable. */ - Tcl_Channel prevChan; /* The channel structure to replace */ -{ - ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); - Channel *chanPtr, *pt; - int interest = 0; - - /* - * AK, 06/30/1999 - * - * Tcl_StackChannel differs from Tcl_ReplaceChannel of the - * original "Trf" patch. Instead of seeing the - * newly created structure as the *new* channel to cover the specified - * one use it to *save* the current state of the specified channel and - * then reinitialize the current structure for the given transformation. - * - * Advantages: - * - No splicing into the (thread-)global list of channels (or the per- - * interp hash-tables). - * - Users of the C-API still have valid channel references even after - * the call to this procedure. - * - * Disadvantages: - * - Untested code. - */ + Tcl_Channel prevChan; /* The channel structure to replace */ +{ + ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); + Channel *chanPtr, *prevChanPtr; + ChannelState *statePtr; /* * Find the given channel in the list of all channels. + * If we don't find it, then it was never registered correctly. + * + * This operation should occur at the top of a channel stack. */ - pt = (Channel*) tsdPtr->firstChanPtr; + statePtr = (ChannelState *) tsdPtr->firstCSPtr; + prevChanPtr = ((Channel *) prevChan)->state->topChanPtr; - while (pt != (Channel *) prevChan) { - pt = pt->nextChanPtr; + while (statePtr->topChanPtr != prevChanPtr) { + statePtr = statePtr->nextCSPtr; } - /* - * 'pt == prevChan' now (or NULL, if not found). - */ - - if (!pt) { + if (statePtr == NULL) { + Tcl_AppendResult(interp, "couldn't find state for channel \"", + Tcl_GetChannelName(prevChan), "\"", (char *) NULL); return (Tcl_Channel) NULL; } /* * Here we check if the given "mask" matches the "flags" @@ -1440,193 +1133,97 @@ * W | | | + | + | restrict the capabilities of the * RW| | + | + | + | superceded one ! * --+---+---+---+----+ */ - if ((mask & Tcl_GetChannelMode (prevChan)) == 0) { + if ((mask & (statePtr->flags & (TCL_READABLE | TCL_WRITABLE))) == 0) { + Tcl_AppendResult(interp, + "reading and writing both disallowed for channel \"", + Tcl_GetChannelName(prevChan), "\"", (char *) NULL); return (Tcl_Channel) NULL; } - chanPtr = (Channel *) ckalloc((unsigned) sizeof(Channel)); - /* - * If there is some interest in the channel, remove it, break - * down the whole chain. It will be reconstructed later. + * Flush the buffers. This ensures that any data still in them + * at this time is not handled by the new transformation. Restrict + * this to writable channels. Take care to hide a possible bg-copy + * in progress from Tcl_Flush and the CheckForChannelErrors inside. */ - interest = pt->interestMask; + if ((mask & TCL_WRITABLE) != 0) { + CopyState *csPtr; - pt->interestMask = 0; + csPtr = statePtr->csPtr; + statePtr->csPtr = (CopyState*) NULL; - if (interest) { - (pt->typePtr->watchProc) (pt->instanceData, 0); + if (Tcl_Flush((Tcl_Channel) prevChanPtr) != TCL_OK) { + statePtr->csPtr = csPtr; + Tcl_AppendResult(interp, "could not flush channel \"", + Tcl_GetChannelName(prevChan), "\"", (char *) NULL); + return (Tcl_Channel) NULL; + } + + statePtr->csPtr = csPtr; } + /* + * Discard any input in the buffers. They are not yet read by the + * user of the channel, so they have to go through the new + * transformation before reading. As the buffers contain the + * untransformed form their contents are not only useless but actually + * distorts our view of the system. + * + * To preserve the information without having to read them again and + * to avoid problems with the location in the channel (seeking might + * be impossible) we move the buffers from the common state structure + * into the channel itself. We use the buffers in the channel below + * the new transformation to hold the data. In the future this allows + * us to write transformations which pre-read data and push the unused + * part back when they are going away. + */ + + if (((mask & TCL_READABLE) != 0) && + (statePtr->inQueueHead != (ChannelBuffer*) NULL)) { + /* + * Remark: It is possible that the channel buffers contain data from + * some earlier push-backs. + */ + + statePtr->inQueueTail->nextPtr = prevChanPtr->inQueueHead; + prevChanPtr->inQueueHead = statePtr->inQueueHead; + + if (prevChanPtr->inQueueTail == (ChannelBuffer*) NULL) { + prevChanPtr->inQueueTail = statePtr->inQueueTail; + } + + statePtr->inQueueHead = (ChannelBuffer*) NULL; + statePtr->inQueueTail = (ChannelBuffer*) NULL; + } + + chanPtr = (Channel *) ckalloc((unsigned) sizeof(Channel)); /* * Save some of the current state into the new structure, * reinitialize the parts which will stay with the transformation. * * Remarks: - * - We cannot discard the buffers, and they cannot be used from the - * transformation placed later into the 'pt' structure. Save them, - * and believe that Tcl_SetChannelOption (buffering, none) will do - * the right thing. - * - encoding and EOL-translation control information is initialized - * to values for 'binary'. This is later reinforced via - * Tcl_SetChanneloption to get the handling of flags and the event - * system right. - * - The 'interestMask' of the saved channel is cleared, but the - * transformations WatchProc is used to establish the connection - * between transformation and underlying channel. This should - * reestablish the correct mask. - * - TTO = Transform Takes Over. The hidden channel no longer - * needs to perform this function. */ - chanPtr->channelName = (char *) ckalloc (strlen(pt->channelName)+1); - strcpy (chanPtr->channelName, pt->channelName); - - chanPtr->flags = pt->flags; /* Save */ - - chanPtr->encoding = (Tcl_Encoding) NULL; /* == 'binary' */ - chanPtr->inputEncodingState = (Tcl_EncodingState) NULL; - chanPtr->inputEncodingFlags = TCL_ENCODING_START; - chanPtr->outputEncodingState = (Tcl_EncodingState) NULL; - chanPtr->outputEncodingFlags = TCL_ENCODING_START; - - chanPtr->inputTranslation = TCL_TRANSLATE_LF; /* == 'binary' */ - chanPtr->outputTranslation = TCL_TRANSLATE_LF; /* == 'binary' */ - chanPtr->inEofChar = pt->inEofChar; /* Save */ - chanPtr->outEofChar = pt->outEofChar; /* Save */ - - chanPtr->unreportedError = pt->unreportedError; /* Save */ - chanPtr->instanceData = pt->instanceData; /* Save */ - chanPtr->typePtr = pt->typePtr; /* Save */ - chanPtr->refCount = 0; /* None, as the structure is covered */ - chanPtr->closeCbPtr = (CloseCallback*) NULL; /* TTO */ - - chanPtr->outputStage = (char*) NULL; - chanPtr->curOutPtr = pt->curOutPtr; /* Save */ - chanPtr->outQueueHead = pt->outQueueHead; /* Save */ - chanPtr->outQueueTail = pt->outQueueTail; /* Save */ - chanPtr->saveInBufPtr = pt->saveInBufPtr; /* Save */ - chanPtr->inQueueHead = pt->inQueueHead; /* Save */ - chanPtr->inQueueTail = pt->inQueueTail; /* Save */ - - chanPtr->chPtr = (ChannelHandler *) NULL; /* TTO */ - chanPtr->interestMask = 0; - chanPtr->nextChanPtr = (Channel*) NULL; /* Is not in list! */ - chanPtr->scriptRecordPtr = (EventScriptRecord *) NULL; /* TTO */ - chanPtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE; - chanPtr->timer = (Tcl_TimerToken) NULL; /* TTO */ - chanPtr->csPtr = (CopyState*) NULL; /* TTO */ + chanPtr->state = statePtr; + chanPtr->instanceData = instanceData; + chanPtr->typePtr = typePtr; + chanPtr->downChanPtr = prevChanPtr; + chanPtr->upChanPtr = (Channel *) NULL; + chanPtr->inQueueHead = (ChannelBuffer*) NULL; + chanPtr->inQueueTail = (ChannelBuffer*) NULL; /* * Place new block at the head of a possibly existing list of previously - * stacked channels, then do the missing initializations of translation - * and buffer system. - */ - - chanPtr->supercedes = pt->supercedes; - - Tcl_SetChannelOption (interp, (Tcl_Channel) chanPtr, - "-translation", "binary"); - Tcl_SetChannelOption (interp, (Tcl_Channel) chanPtr, - "-buffering", "none"); - - /* - * Save accomplished, now reinitialize the (old) structure for the - * transformation. - * - * - The information about encoding and eol-translation is taken - * without change. There is no need to fiddle with - * refCount et. al. - * - * Don't forget to use the same blocking mode as the old channel. - */ - - pt->flags = mask | (chanPtr->flags & CHANNEL_NONBLOCKING); - - /* - * EDITORS NOTE: all the lines with "take it as is" should get - * deleted once this code has been debugged. - */ - - /* pt->encoding, take it as is */ - /* pt->inputEncodingState, take it as is */ - /* pt->inputEncodingFlags, take it as is */ - /* pt->outputEncodingState, take it as is */ - /* pt->outputEncodingFlags, take it as is */ - - /* pt->inputTranslation, take it as is */ - /* pt->outputTranslation, take it as is */ - - /* - * No special EOF character, that condition is determined by the - * old channel - */ - - pt->inEofChar = 0; - pt->outEofChar = 0; - - pt->unreportedError = 0; /* No errors yet */ - pt->instanceData = instanceData; /* Transformation state */ - pt->typePtr = typePtr; /* Transformation type */ - /* pt->refCount, take it as it is */ - /* pt->closeCbPtr, take it as it is */ - - /* pt->outputStage, take it as it is */ - pt->curOutPtr = (ChannelBuffer *) NULL; - pt->outQueueHead = (ChannelBuffer *) NULL; - pt->outQueueTail = (ChannelBuffer *) NULL; - pt->saveInBufPtr = (ChannelBuffer *) NULL; - pt->inQueueHead = (ChannelBuffer *) NULL; - pt->inQueueTail = (ChannelBuffer *) NULL; - - /* pt->chPtr, take it as it is */ - /* pt->interestMask, take it as it is */ - /* pt->nextChanPtr, take it as it is */ - /* pt->scriptRecordPtr, take it as it is */ - pt->bufSize = CHANNELBUFFER_DEFAULT_SIZE; - /* pt->timer, take it as it is */ - /* pt->csPtr, take it as it is */ - - /* - * Have the transformation reference the new structure containing - * the saved channel. - */ - - pt->supercedes = chanPtr; - - /* - * Don't forget to reinitialize the output buffer used for encodings. - */ - - if ((chanPtr->encoding != NULL) && (chanPtr->flags & TCL_WRITABLE)) { - chanPtr->outputStage = (char *) - ckalloc((unsigned) (chanPtr->bufSize + 2)); - } - - /* - * Event handling: If the information in the old channel shows - * that there was interest in some events call the 'WatchProc' - * of the transformation to establish the proper connection - * between them. - */ - - if (interest) { - (pt->typePtr->watchProc) (pt->instanceData, interest); - } - - /* - * The superceded channel is effectively unregistered - * We cannot decrement its reference count because that - * can cause it to get garbage collected out from under us. - * Don't add the following code: - * - * chanPtr->supercedes->refCount --; - */ + * stacked channels. + */ + + prevChanPtr->upChanPtr = chanPtr; + statePtr->topChanPtr = chanPtr; return (Tcl_Channel) chanPtr; } /* @@ -1634,222 +1231,154 @@ * * Tcl_UnstackChannel -- * * Unstacks an entry in the hash table for a Tcl_Channel * record. This is the reverse to 'Tcl_StackChannel'. - * The old, superceded channel is uncovered and re-registered - * in the appropriate data structures. * * Results: - * Returns the old Tcl_Channel, i.e. the one which was stacked over. + * A standard Tcl result. * * Side effects: - * See above. + * If TCL_ERROR is returned, the posix error code will be set + * with Tcl_SetErrno. * *---------------------------------------------------------------------- */ -void +int Tcl_UnstackChannel (interp, chan) - Tcl_Interp* interp; /* The interpreter we are working in */ + Tcl_Interp *interp; /* The interpreter we are working in */ Tcl_Channel chan; /* The channel to unstack */ { - ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); - Channel* chanPtr = (Channel*) chan; + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; + int result = 0; - if (chanPtr->supercedes != (Channel*) NULL) { + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + + if (chanPtr->downChanPtr != (Channel *) NULL) { /* * Instead of manipulating the per-thread / per-interp list/hashtable * of registered channels we wind down the state of the transformation, * and then restore the state of underlying channel into the old * structure. */ - - Tcl_DString dsTrans; /* storage to save option information */ - Tcl_DString dsBuf; /* storage to save option information */ - Channel top; /* Save area for current transformation */ - Channel* chanDownPtr = chanPtr->supercedes; - int interest; /* interest mask of transformation - * before destruct. */ - int saveInputEncodingFlags; /* Save area for encoding */ - int saveOutputEncodingFlags; /* related information */ - Tcl_EncodingState saveInputEncodingState; - Tcl_EncodingState saveOutputEncodingState; - Tcl_Encoding saveEncoding; - - /* - * Event handling: Disallow the delivery of events from the - * old, now uncovered channel to the transformation. - * - * This is done before everything else to avoid problems - * after our heavy-duty shuffling of pointers around. - */ - - interest = chanPtr->interestMask; - (chanPtr->typePtr->watchProc) (chanPtr->instanceData, 0); - - /* 1. Swap the information in the top channel (the transformation) - * and the channel below, with some exceptions. This additionally - * cuts the top channel out of the chain. Without the latter - * a Tcl_Close on the transformation would be impossible, as that - * procedure will free the structure, making 'top' unusable. - * - * chanPtr -> top channel, transformation. - * chanDownPtr -> channel immediately below the transformation. - */ - - memcpy ((void*) &top, (void*) chanPtr, sizeof (Channel)); - memcpy ((void*) chanPtr, (void*) chanDownPtr, sizeof (Channel)); - top.supercedes = (Channel*) NULL; - memcpy ((void*) chanDownPtr, (void*) &top, sizeof (Channel)); - - /* Now: - * chanPtr -> channel immediately below the transformation, now top - * chanDownPtr -> transformation, cut loose. - * - * Handle the exceptions mentioned above, i.e. move the information - * from the transformation into the new top, and reinitialize it to - * safe values in the transformation. - */ - - chanPtr->refCount = chanDownPtr->refCount; - chanPtr->closeCbPtr = chanDownPtr->closeCbPtr; - chanPtr->chPtr = chanDownPtr->chPtr; - chanPtr->nextChanPtr = chanDownPtr->nextChanPtr; - chanPtr->scriptRecordPtr = chanDownPtr->scriptRecordPtr; - chanPtr->timer = chanDownPtr->timer; - chanPtr->csPtr = chanDownPtr->csPtr; - - chanDownPtr->refCount = 0; - chanDownPtr->closeCbPtr = (CloseCallback*) NULL; - chanDownPtr->chPtr = (ChannelHandler*) NULL; - chanDownPtr->nextChanPtr = (Channel*) NULL; - chanDownPtr->scriptRecordPtr = (EventScriptRecord*) NULL; - chanDownPtr->timer = (Tcl_TimerToken) NULL; - chanDownPtr->csPtr = (CopyState*) NULL; - - /* The now uncovered channel still has encoding and eol-translation - * deactivated, i.e. switched to 'binary'. *Don't* touch this until - * after the transformation is closed for good, as it may write - * information into it during that (-> flushing of data waiting in - * internal buffers!) and rely on these settings. Thanks to Matt - * Newman for finding this goof. - * - * But we also have to protect the state of the encoding from removal - * during the close. So we save it in some local variables. - * Additionally the current value of the options is lost after we - * close, we have to save them now. - */ - - saveEncoding = chanDownPtr->encoding; - saveInputEncodingState = chanDownPtr->inputEncodingState; - saveInputEncodingFlags = chanDownPtr->inputEncodingFlags; - saveOutputEncodingState = chanDownPtr->outputEncodingState; - saveOutputEncodingFlags = chanDownPtr->outputEncodingFlags; - - Tcl_DStringInit (&dsTrans); - Tcl_GetChannelOption (interp, (Tcl_Channel) chanDownPtr, - "-translation", &dsTrans); - - Tcl_DStringInit (&dsBuf); - Tcl_GetChannelOption (interp, (Tcl_Channel) chanDownPtr, - "-buffering", &dsBuf); - - /* - * Prevent the accidential removal of the encoding during - * the destruction of the transformation channel. - */ - - chanDownPtr->encoding = (Tcl_Encoding) NULL; - chanDownPtr->inputEncodingState = (Tcl_EncodingState) NULL; - chanDownPtr->inputEncodingFlags = TCL_ENCODING_START; - chanDownPtr->outputEncodingState = (Tcl_EncodingState) NULL; - chanDownPtr->outputEncodingFlags = TCL_ENCODING_START; - - /* - * A little trick: Add the transformation structure to the - * per-thread list of existing channels (which it never were - * part of so far), or Tcl_Close/FlushChannel will panic - * ("damaged channel list"). - * - * Afterward do a regular close upon the transformation. - * This may cause flushing of data into the old channel (if the - * transformation remembered its own channel in itself). - * - * We know that its refCount dropped to 0. - */ - - chanDownPtr->nextChanPtr = tsdPtr->firstChanPtr; - tsdPtr->firstChanPtr = chanDownPtr; - - Tcl_Close (interp, (Tcl_Channel)chanDownPtr); - - /* - * Now it is possible to wind down the transformation (in 'top'), - * especially to copy the current encoding and translation control - * information down. - */ - - /* - * Move the currently active encoding from the save area - * to the now uncovered channel. We assume here that this - * channel uses 'encoding binary' (==> encoding == NULL, etc. - * This allows us to simply copy the pointers without having to - * think about refcounts and deallocation of the old encoding. - * - * And don't forget to reenable the EOL-translation used by the - * transformation. Using a DString to do this *is* a bit awkward, - * but still the best way to handle the complexities here, like - * flag manipulation and event system. - */ - - chanPtr->encoding = saveEncoding; - chanPtr->inputEncodingState = saveInputEncodingState; - chanPtr->inputEncodingFlags = saveInputEncodingFlags; - chanPtr->outputEncodingState = saveOutputEncodingState; - chanPtr->outputEncodingFlags = saveOutputEncodingFlags; - - Tcl_SetChannelOption (interp, (Tcl_Channel) chanPtr, - "-translation", dsTrans.string); - - Tcl_SetChannelOption (interp, (Tcl_Channel) chanPtr, - "-buffering", dsBuf.string); - - Tcl_DStringFree (&dsTrans); - Tcl_DStringFree (&dsBuf); - - /* - * Event handling: If the information from the now destroyed - * transformation shows that there was interest in some events - * call the 'WatchProc' of the now uncovered channel to renew - * that interest with underlying channels or the driver. - */ - - if (interest) { - chanPtr->interestMask = 0; - (chanPtr->typePtr->watchProc) (chanPtr->instanceData, - interest); - chanPtr->interestMask = interest; - } - - } else { - /* This channel does not cover another one. + Channel *downChanPtr = chanPtr->downChanPtr; + + /* + * Flush the buffers. This ensures that any data still in them + * at this time _is_ handled by the transformation we are unstacking + * right now. Restrict this to writable channels. Take care to hide + * a possible bg-copy in progress from Tcl_Flush and the + * CheckForChannelErrors inside. + */ + + if (statePtr->flags & TCL_WRITABLE) { + CopyState* csPtr; + + csPtr = statePtr->csPtr; + statePtr->csPtr = (CopyState*) NULL; + + if (Tcl_Flush((Tcl_Channel) chanPtr) != TCL_OK) { + statePtr->csPtr = csPtr; + Tcl_AppendResult(interp, "could not flush channel \"", + Tcl_GetChannelName((Tcl_Channel) chanPtr), "\"", + (char *) NULL); + return TCL_ERROR; + } + + statePtr->csPtr = csPtr; + } + + /* + * Anything in the input queue and the push-back buffers of + * the transformation going away is transformed data, but not + * yet read. As unstacking means that the caller does not want + * to see transformed data any more we have to discard these + * bytes. To avoid writing an analogue to 'DiscardInputQueued' + * we move the information in the push back buffers to the + * input queue and then call 'DiscardInputQueued' on that. + */ + + if (((statePtr->flags & TCL_READABLE) != 0) && + ((statePtr->inQueueHead != (ChannelBuffer*) NULL) || + (chanPtr->inQueueHead != (ChannelBuffer*) NULL))) { + + if ((statePtr->inQueueHead != (ChannelBuffer*) NULL) && + (chanPtr->inQueueHead != (ChannelBuffer*) NULL)) { + statePtr->inQueueTail->nextPtr = chanPtr->inQueueHead; + statePtr->inQueueTail = chanPtr->inQueueTail; + statePtr->inQueueHead = statePtr->inQueueTail; + + } else if (chanPtr->inQueueHead != (ChannelBuffer*) NULL) { + statePtr->inQueueHead = chanPtr->inQueueHead; + statePtr->inQueueTail = chanPtr->inQueueTail; + } + + chanPtr->inQueueHead = (ChannelBuffer*) NULL; + chanPtr->inQueueTail = (ChannelBuffer*) NULL; + + DiscardInputQueued (statePtr, 0); + } + + statePtr->topChanPtr = downChanPtr; + downChanPtr->upChanPtr = (Channel *) NULL; + + /* + * Leave this link intact for closeproc + * chanPtr->downChanPtr = (Channel *) NULL; + */ + + /* + * Close and free the channel driver state. + */ + + if (chanPtr->typePtr->closeProc != TCL_CLOSE2PROC) { + result = (chanPtr->typePtr->closeProc)(chanPtr->instanceData, + interp); + } else { + result = (chanPtr->typePtr->close2Proc)(chanPtr->instanceData, + interp, 0); + } + + chanPtr->typePtr = NULL; + /* + * AK: Tcl_NotifyChannel may hold a reference to this block of memory + */ + Tcl_EventuallyFree((ClientData) chanPtr, TCL_DYNAMIC); + UpdateInterest(downChanPtr); + + if (result != 0) { + Tcl_SetErrno(result); + return TCL_ERROR; + } + } else { + /* + * This channel does not cover another one. * Simply do a close, if necessary. */ - if (chanPtr->refCount == 0) { - Tcl_Close (interp, chan); + if (statePtr->refCount <= 0) { + if (Tcl_Close(interp, chan) != TCL_OK) { + return TCL_ERROR; + } } } + + return TCL_OK; } /* *---------------------------------------------------------------------- * * Tcl_GetStackedChannel -- * - * Determines wether the specified channel is stacked upon another. + * Determines whether the specified channel is stacked upon another. * * Results: * NULL if the channel is not stacked upon another one, or a reference * to the channel it is stacked upon. This reference can be used in * queries, but modification is not allowed. @@ -1862,12 +1391,90 @@ Tcl_Channel Tcl_GetStackedChannel(chan) Tcl_Channel chan; { - Channel* chanPtr = (Channel*) chan; - return (Tcl_Channel) chanPtr->supercedes; + Channel *chanPtr = (Channel *) chan; /* The actual channel. */ + + return (Tcl_Channel) chanPtr->downChanPtr; +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_GetTopChannel -- + * + * Returns the top channel of a channel stack. + * + * Results: + * NULL if the channel is not stacked upon another one, or a reference + * to the channel it is stacked upon. This reference can be used in + * queries, but modification is not allowed. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_Channel +Tcl_GetTopChannel(chan) + Tcl_Channel chan; +{ + Channel *chanPtr = (Channel *) chan; /* The actual channel. */ + + return (Tcl_Channel) chanPtr->state->topChanPtr; +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_GetChannelInstanceData -- + * + * Returns the client data associated with a channel. + * + * Results: + * The client data. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +ClientData +Tcl_GetChannelInstanceData(chan) + Tcl_Channel chan; /* Channel for which to return client data. */ +{ + Channel *chanPtr = (Channel *) chan; /* The actual channel. */ + + return chanPtr->instanceData; +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_GetChannelType -- + * + * Given a channel structure, returns the channel type structure. + * + * Results: + * Returns a pointer to the channel type structure. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_ChannelType * +Tcl_GetChannelType(chan) + Tcl_Channel chan; /* The channel to return type for. */ +{ + Channel *chanPtr = (Channel *) chan; /* The actual channel. */ + + return chanPtr->typePtr; } /* *---------------------------------------------------------------------- * @@ -1888,14 +1495,14 @@ int Tcl_GetChannelMode(chan) Tcl_Channel chan; /* The channel for which the mode is * being computed. */ { - Channel *chanPtr; /* The actual channel. */ + ChannelState *statePtr = ((Channel *) chan)->state; + /* State of actual channel. */ - chanPtr = (Channel *) chan; - return (chanPtr->flags & (TCL_READABLE | TCL_WRITABLE)); + return (statePtr->flags & (TCL_READABLE | TCL_WRITABLE)); } /* *---------------------------------------------------------------------- * @@ -1916,40 +1523,14 @@ char * Tcl_GetChannelName(chan) Tcl_Channel chan; /* The channel for which to return the name. */ { - Channel *chanPtr; /* The actual channel. */ - - chanPtr = (Channel *) chan; - return chanPtr->channelName; -} - -/* - *---------------------------------------------------------------------- - * - * Tcl_GetChannelType -- - * - * Given a channel structure, returns the channel type structure. - * - * Results: - * Returns a pointer to the channel type structure. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -Tcl_ChannelType * -Tcl_GetChannelType(chan) - Tcl_Channel chan; /* The channel to return type for. */ -{ - Channel *chanPtr; /* The actual channel. */ - - chanPtr = (Channel *) chan; - return chanPtr->typePtr; + ChannelState *statePtr; /* State of actual channel. */ + + statePtr = ((Channel *) chan)->state; + return statePtr->channelName; } /* *---------------------------------------------------------------------- * @@ -1975,44 +1556,18 @@ { Channel *chanPtr; /* The actual channel. */ ClientData handle; int result; - chanPtr = (Channel *) chan; + chanPtr = ((Channel *) chan)->state->bottomChanPtr; result = (chanPtr->typePtr->getHandleProc)(chanPtr->instanceData, direction, &handle); if (handlePtr) { *handlePtr = handle; } return result; } - -/* - *---------------------------------------------------------------------- - * - * Tcl_GetChannelInstanceData -- - * - * Returns the client data associated with a channel. - * - * Results: - * The client data. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -ClientData -Tcl_GetChannelInstanceData(chan) - Tcl_Channel chan; /* Channel for which to return client data. */ -{ - Channel *chanPtr; /* The actual channel. */ - - chanPtr = (Channel *) chan; - return chanPtr->instanceData; -} /* *--------------------------------------------------------------------------- * * AllocChannelBuffer -- @@ -2072,12 +1627,12 @@ * *---------------------------------------------------------------------- */ static void -RecycleBuffer(chanPtr, bufPtr, mustDiscard) - Channel *chanPtr; /* Channel for which to recycle buffers. */ +RecycleBuffer(statePtr, bufPtr, mustDiscard) + ChannelState *statePtr; /* ChannelState in which to recycle buffers. */ ChannelBuffer *bufPtr; /* The buffer to recycle. */ int mustDiscard; /* If nonzero, free the buffer to the * OS, always. */ { /* @@ -2086,34 +1641,45 @@ if (mustDiscard) { ckfree((char *) bufPtr); return; } - + + /* + * Only save buffers which are at least as big as the requested + * buffersize for the channel. This is to honor dynamic changes + * of the buffersize made by the user. + */ + + if ((bufPtr->bufLength - BUFFER_PADDING) < statePtr->bufSize) { + ckfree((char *) bufPtr); + return; + } + /* * Only save buffers for the input queue if the channel is readable. */ - if (chanPtr->flags & TCL_READABLE) { - if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) { - chanPtr->inQueueHead = bufPtr; - chanPtr->inQueueTail = bufPtr; + if (statePtr->flags & TCL_READABLE) { + if (statePtr->inQueueHead == (ChannelBuffer *) NULL) { + statePtr->inQueueHead = bufPtr; + statePtr->inQueueTail = bufPtr; goto keepit; } - if (chanPtr->saveInBufPtr == (ChannelBuffer *) NULL) { - chanPtr->saveInBufPtr = bufPtr; + if (statePtr->saveInBufPtr == (ChannelBuffer *) NULL) { + statePtr->saveInBufPtr = bufPtr; goto keepit; } } /* * Only save buffers for the output queue if the channel is writable. */ - if (chanPtr->flags & TCL_WRITABLE) { - if (chanPtr->curOutPtr == (ChannelBuffer *) NULL) { - chanPtr->curOutPtr = bufPtr; + if (statePtr->flags & TCL_WRITABLE) { + if (statePtr->curOutPtr == (ChannelBuffer *) NULL) { + statePtr->curOutPtr = bufPtr; goto keepit; } } /* @@ -2121,11 +1687,11 @@ */ ckfree((char *) bufPtr); return; -keepit: + keepit: bufPtr->nextRemoved = BUFFER_PADDING; bufPtr->nextAdded = BUFFER_PADDING; bufPtr->nextPtr = (ChannelBuffer *) NULL; } @@ -2144,22 +1710,22 @@ * *---------------------------------------------------------------------- */ static void -DiscardOutputQueued(chanPtr) - Channel *chanPtr; /* The channel for which to discard output. */ +DiscardOutputQueued(statePtr) + ChannelState *statePtr; /* ChannelState for which to discard output. */ { ChannelBuffer *bufPtr; - while (chanPtr->outQueueHead != (ChannelBuffer *) NULL) { - bufPtr = chanPtr->outQueueHead; - chanPtr->outQueueHead = bufPtr->nextPtr; - RecycleBuffer(chanPtr, bufPtr, 0); + while (statePtr->outQueueHead != (ChannelBuffer *) NULL) { + bufPtr = statePtr->outQueueHead; + statePtr->outQueueHead = bufPtr->nextPtr; + RecycleBuffer(statePtr, bufPtr, 0); } - chanPtr->outQueueHead = (ChannelBuffer *) NULL; - chanPtr->outQueueTail = (ChannelBuffer *) NULL; + statePtr->outQueueHead = (ChannelBuffer *) NULL; + statePtr->outQueueTail = (ChannelBuffer *) NULL; } /* *---------------------------------------------------------------------- * @@ -2176,20 +1742,20 @@ * *---------------------------------------------------------------------- */ static int -CheckForDeadChannel(interp, chanPtr) +CheckForDeadChannel(interp, statePtr) Tcl_Interp *interp; /* For error reporting (can be NULL) */ - Channel *chanPtr; /* The channel to check. */ + ChannelState *statePtr; /* The channel state to check. */ { - if (chanPtr->flags & CHANNEL_DEAD) { + if (statePtr->flags & CHANNEL_DEAD) { Tcl_SetErrno(EINVAL); if (interp) { Tcl_AppendResult(interp, - "unable to access channel: invalid channel", - (char *) NULL); + "unable to access channel: invalid channel", + (char *) NULL); } return 1; } return 0; } @@ -2221,10 +1787,12 @@ Channel *chanPtr; /* The channel to flush on. */ int calledFromAsyncFlush; /* If nonzero then we are being * called from an asynchronous * flush callback. */ { + ChannelState *statePtr = chanPtr->state; + /* State of the channel stack. */ ChannelBuffer *bufPtr; /* Iterates over buffered output * queue. */ int toWrite; /* Amount of output data in current * buffer available to be written. */ int written; /* Amount of output data actually @@ -2239,11 +1807,11 @@ * but not yet deallocated. This can occur if the exit handler for the * channel deallocation runs before all channels are deregistered in * all interpreters. */ - if (CheckForDeadChannel(interp,chanPtr)) return -1; + if (CheckForDeadChannel(interp, statePtr)) return -1; /* * Loop over the queued buffers and attempt to flush as * much as possible of the queued output to the channel. */ @@ -2253,34 +1821,34 @@ /* * If the queue is empty and there is a ready current buffer, OR if * the current buffer is full, then move the current buffer to the * queue. */ - - if (((chanPtr->curOutPtr != (ChannelBuffer *) NULL) && - (chanPtr->curOutPtr->nextAdded == chanPtr->curOutPtr->bufLength)) - || ((chanPtr->flags & BUFFER_READY) && - (chanPtr->outQueueHead == (ChannelBuffer *) NULL))) { - chanPtr->flags &= (~(BUFFER_READY)); - chanPtr->curOutPtr->nextPtr = (ChannelBuffer *) NULL; - if (chanPtr->outQueueHead == (ChannelBuffer *) NULL) { - chanPtr->outQueueHead = chanPtr->curOutPtr; + + if (((statePtr->curOutPtr != (ChannelBuffer *) NULL) && + (statePtr->curOutPtr->nextAdded == statePtr->curOutPtr->bufLength)) + || ((statePtr->flags & BUFFER_READY) && + (statePtr->outQueueHead == (ChannelBuffer *) NULL))) { + statePtr->flags &= (~(BUFFER_READY)); + statePtr->curOutPtr->nextPtr = (ChannelBuffer *) NULL; + if (statePtr->outQueueHead == (ChannelBuffer *) NULL) { + statePtr->outQueueHead = statePtr->curOutPtr; } else { - chanPtr->outQueueTail->nextPtr = chanPtr->curOutPtr; + statePtr->outQueueTail->nextPtr = statePtr->curOutPtr; } - chanPtr->outQueueTail = chanPtr->curOutPtr; - chanPtr->curOutPtr = (ChannelBuffer *) NULL; + statePtr->outQueueTail = statePtr->curOutPtr; + statePtr->curOutPtr = (ChannelBuffer *) NULL; } - bufPtr = chanPtr->outQueueHead; + bufPtr = statePtr->outQueueHead; /* * If we are not being called from an async flush and an async * flush is active, we just return without producing any output. */ if ((!calledFromAsyncFlush) && - (chanPtr->flags & BG_FLUSH_SCHEDULED)) { + (statePtr->flags & BG_FLUSH_SCHEDULED)) { return 0; } /* * If the output queue is still empty, break out of the while loop. @@ -2291,16 +1859,16 @@ } /* * Produce the output on the channel. */ - + toWrite = bufPtr->nextAdded - bufPtr->nextRemoved; written = (chanPtr->typePtr->outputProc) (chanPtr->instanceData, (char *) bufPtr->buf + bufPtr->nextRemoved, toWrite, &errorCode); - + /* * If the write failed completely attempt to start the asynchronous * flush mechanism and break out of this loop - do not attempt to * write any more output at this time. */ @@ -2326,12 +1894,12 @@ * This used to check for CHANNEL_NONBLOCKING, and panic * if the channel was blocking. However, it appears * that setting stdin to -blocking 0 has some effect on * the stdout when it's a tty channel (dup'ed underneath) */ - if (!(chanPtr->flags & BG_FLUSH_SCHEDULED)) { - chanPtr->flags |= BG_FLUSH_SCHEDULED; + if (!(statePtr->flags & BG_FLUSH_SCHEDULED)) { + statePtr->flags |= BG_FLUSH_SCHEDULED; UpdateInterest(chanPtr); } errorCode = 0; break; } @@ -2339,12 +1907,12 @@ /* * Decide whether to report the error upwards or defer it. */ if (calledFromAsyncFlush) { - if (chanPtr->unreportedError == 0) { - chanPtr->unreportedError = errorCode; + if (statePtr->unreportedError == 0) { + statePtr->unreportedError = errorCode; } } else { Tcl_SetErrno(errorCode); if (interp != NULL) { Tcl_SetResult(interp, @@ -2355,11 +1923,11 @@ /* * When we get an error we throw away all the output * currently queued. */ - DiscardOutputQueued(chanPtr); + DiscardOutputQueued(statePtr); continue; } else { wroteSome = 1; } @@ -2368,15 +1936,15 @@ /* * If this buffer is now empty, recycle it. */ if (bufPtr->nextRemoved == bufPtr->nextAdded) { - chanPtr->outQueueHead = bufPtr->nextPtr; - if (chanPtr->outQueueHead == (ChannelBuffer *) NULL) { - chanPtr->outQueueTail = (ChannelBuffer *) NULL; + statePtr->outQueueHead = bufPtr->nextPtr; + if (statePtr->outQueueHead == (ChannelBuffer *) NULL) { + statePtr->outQueueTail = (ChannelBuffer *) NULL; } - RecycleBuffer(chanPtr, bufPtr, 0); + RecycleBuffer(statePtr, bufPtr, 0); } } /* Closes "while (1)". */ /* * If we wrote some data while flushing in the background, we are done. @@ -2383,49 +1951,56 @@ * We can't finish the background flush until we run out of data and * the channel becomes writable again. This ensures that all of the * pending data has been flushed at the system level. */ - if (chanPtr->flags & BG_FLUSH_SCHEDULED) { + if (statePtr->flags & BG_FLUSH_SCHEDULED) { if (wroteSome) { return errorCode; - } else if (chanPtr->outQueueHead == (ChannelBuffer *) NULL) { - chanPtr->flags &= (~(BG_FLUSH_SCHEDULED)); + } else if (statePtr->outQueueHead == (ChannelBuffer *) NULL) { + statePtr->flags &= (~(BG_FLUSH_SCHEDULED)); (chanPtr->typePtr->watchProc)(chanPtr->instanceData, - chanPtr->interestMask); + statePtr->interestMask); } } /* * If the channel is flagged as closed, delete it when the refCount * drops to zero, the output queue is empty and there is no output * in the current output buffer. */ - if ((chanPtr->flags & CHANNEL_CLOSED) && (chanPtr->refCount <= 0) && - (chanPtr->outQueueHead == (ChannelBuffer *) NULL) && - ((chanPtr->curOutPtr == (ChannelBuffer *) NULL) || - (chanPtr->curOutPtr->nextAdded == - chanPtr->curOutPtr->nextRemoved))) { - return CloseChannel(interp, chanPtr, errorCode); + if ((statePtr->flags & CHANNEL_CLOSED) && (statePtr->refCount <= 0) && + (statePtr->outQueueHead == (ChannelBuffer *) NULL) && + ((statePtr->curOutPtr == (ChannelBuffer *) NULL) || + (statePtr->curOutPtr->nextAdded == + statePtr->curOutPtr->nextRemoved))) { + return CloseChannel(interp, chanPtr, errorCode); } return errorCode; } /* *---------------------------------------------------------------------- * * CloseChannel -- * - * Utility procedure to close a channel and free its associated - * resources. + * Utility procedure to close a channel and free associated resources. + * + * If the channel was stacked, then the it will copy the necessary + * elements of the NEXT channel into the TOP channel, in essence + * unstacking the channel. The NEXT channel will then be freed. + * + * If the channel was not stacked, then we will free all the bits + * for the TOP channel, including the data structure itself. * * Results: - * 0 on success or a POSIX error code if the operation failed. + * 1 if the channel was stacked, 0 otherwise. * * Side effects: * May close the actual channel; may free memory. + * May change the value of errno. * *---------------------------------------------------------------------- */ static int @@ -2434,167 +2009,152 @@ Channel *chanPtr; /* The channel to close. */ int errorCode; /* Status of operation so far. */ { int result = 0; /* Of calling driver close * operation. */ - Channel *prevChanPtr; /* Preceding channel in list of - * all channels - used to splice a + ChannelState *prevCSPtr; /* Preceding channel state in list of + * all states - used to splice a * channel out of the list on close. */ + ChannelState *statePtr; /* state of the channel stack. */ ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); if (chanPtr == NULL) { return result; } - + statePtr = chanPtr->state; + /* * No more input can be consumed so discard any leftover input. */ - DiscardInputQueued(chanPtr, 1); + DiscardInputQueued(statePtr, 1); /* * Discard a leftover buffer in the current output buffer field. */ - if (chanPtr->curOutPtr != (ChannelBuffer *) NULL) { - ckfree((char *) chanPtr->curOutPtr); - chanPtr->curOutPtr = (ChannelBuffer *) NULL; + if (statePtr->curOutPtr != (ChannelBuffer *) NULL) { + ckfree((char *) statePtr->curOutPtr); + statePtr->curOutPtr = (ChannelBuffer *) NULL; } /* * The caller guarantees that there are no more buffers * queued for output. */ - if (chanPtr->outQueueHead != (ChannelBuffer *) NULL) { + if (statePtr->outQueueHead != (ChannelBuffer *) NULL) { panic("TclFlush, closed channel: queued output left"); } /* * If the EOF character is set in the channel, append that to the * output device. */ - if ((chanPtr->outEofChar != 0) && (chanPtr->flags & TCL_WRITABLE)) { + if ((statePtr->outEofChar != 0) && (statePtr->flags & TCL_WRITABLE)) { int dummy; char c; - c = (char) chanPtr->outEofChar; + c = (char) statePtr->outEofChar; (chanPtr->typePtr->outputProc) (chanPtr->instanceData, &c, 1, &dummy); } /* - * Remove TCL_READABLE and TCL_WRITABLE from chanPtr->flags, so - * that close callbacks can not do input or output (assuming they - * squirreled the channel away in their clientData). This also - * prevents infinite loops if the callback calls any C API that - * could call FlushChannel. - */ - - chanPtr->flags &= (~(TCL_READABLE|TCL_WRITABLE)); - - /* * Splice this channel out of the list of all channels. */ - if (chanPtr == tsdPtr->firstChanPtr) { - tsdPtr->firstChanPtr = chanPtr->nextChanPtr; + if (tsdPtr->firstCSPtr && (statePtr == tsdPtr->firstCSPtr)) { + tsdPtr->firstCSPtr = statePtr->nextCSPtr; } else { - for (prevChanPtr = tsdPtr->firstChanPtr; - (prevChanPtr != (Channel *) NULL) && - (prevChanPtr->nextChanPtr != chanPtr); - prevChanPtr = prevChanPtr->nextChanPtr) { + for (prevCSPtr = tsdPtr->firstCSPtr; + prevCSPtr && (prevCSPtr->nextCSPtr != statePtr); + prevCSPtr = prevCSPtr->nextCSPtr) { /* Empty loop body. */ } - if (prevChanPtr == (Channel *) NULL) { + if (prevCSPtr == (ChannelState *) NULL) { panic("FlushChannel: damaged channel list"); } - prevChanPtr->nextChanPtr = chanPtr->nextChanPtr; + prevCSPtr->nextCSPtr = statePtr->nextCSPtr; } /* * Close and free the channel driver state. */ - + if (chanPtr->typePtr->closeProc != TCL_CLOSE2PROC) { result = (chanPtr->typePtr->closeProc)(chanPtr->instanceData, interp); } else { result = (chanPtr->typePtr->close2Proc)(chanPtr->instanceData, interp, 0); } - - if (chanPtr->channelName != (char *) NULL) { - ckfree(chanPtr->channelName); - } - Tcl_FreeEncoding(chanPtr->encoding); - if (chanPtr->outputStage != NULL) { - ckfree((char *) chanPtr->outputStage); - } - + + /* + * Some resources can be cleared only if the bottom channel + * in a stack is closed. All the other channels in the stack + * are not allowed to remove. + */ + + if (chanPtr == statePtr->bottomChanPtr) { + if (statePtr->channelName != (char *) NULL) { + ckfree(statePtr->channelName); + statePtr->channelName = NULL; + } + + Tcl_FreeEncoding(statePtr->encoding); + if (statePtr->outputStage != NULL) { + ckfree((char *) statePtr->outputStage); + statePtr->outputStage = (char *) NULL; + } + } + /* * If we are being called synchronously, report either * any latent error on the channel or the current error. */ - - if (chanPtr->unreportedError != 0) { - errorCode = chanPtr->unreportedError; + + if (statePtr->unreportedError != 0) { + errorCode = statePtr->unreportedError; } if (errorCode == 0) { errorCode = result; if (errorCode != 0) { Tcl_SetErrno(errorCode); } } - /* Andreas Kupries , 12/13/1998 - * "Trf-Patch for filtering channels" - * - * This is the change to 'CloseChannel'. - * - * Explanation - * Closing a filtering channel closes the one it - * superceded too. This basically ripples through - * the whole chain of filters until it reaches - * the underlying normal channel. - * - * This is done by reintegrating the superceded - * channel into the (thread) global list of open - * channels and then invoking a regular close. - * There is no need to handle the complexities of - * this process by ourselves. - * - * *Note* - * This has to be done after the call to the - * 'closeProc' of the filtering channel to allow - * that one to flush internal buffers into - * the underlying channel. - */ - - if (chanPtr->supercedes != (Channel*) NULL) { - /* - * Insert the channel we were stacked upon back into - * the list of open channels, then do a regular close. - */ - - chanPtr->supercedes->nextChanPtr = tsdPtr->firstChanPtr; - tsdPtr->firstChanPtr = chanPtr->supercedes; - chanPtr->supercedes->refCount --; /* is deregistered */ - Tcl_Close (interp, (Tcl_Channel) chanPtr->supercedes); - } - /* * Cancel any outstanding timer. */ - Tcl_DeleteTimerHandler(chanPtr->timer); + Tcl_DeleteTimerHandler(statePtr->timer); /* * Mark the channel as deleted by clearing the type structure. */ + if (chanPtr->downChanPtr != (Channel *) NULL) { + Channel *downChanPtr = chanPtr->downChanPtr; + + statePtr->nextCSPtr = tsdPtr->firstCSPtr; + tsdPtr->firstCSPtr = statePtr; + + statePtr->topChanPtr = downChanPtr; + downChanPtr->upChanPtr = (Channel *) NULL; + chanPtr->typePtr = NULL; + + Tcl_EventuallyFree((ClientData) chanPtr, TCL_DYNAMIC); + return Tcl_Close(interp, (Tcl_Channel) downChanPtr); + } + + /* + * There is only the TOP Channel, so we free the remaining + * pointers we have and then ourselves. + */ chanPtr->typePtr = NULL; + Tcl_EventuallyFree((ClientData) statePtr, TCL_DYNAMIC); Tcl_EventuallyFree((ClientData) chanPtr, TCL_DYNAMIC); return errorCode; } @@ -2631,18 +2191,19 @@ ChannelHandler *chPtr, *chNext; /* Iterate over channel handlers. */ CloseCallback *cbPtr; /* Iterate over close callbacks * for this channel. */ EventScriptRecord *ePtr, *eNextPtr; /* Iterate over eventscript records. */ Channel *chanPtr; /* The real IO channel. */ + ChannelState *statePtr; /* State of real IO channel. */ int result; /* Of calling FlushChannel. */ ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); NextChannelHandler *nhPtr; if (chan == (Tcl_Channel) NULL) { return TCL_OK; } - + /* * Perform special handling for standard channels being closed. If the * refCount is now 1 it means that the last reference to the standard * channel is being explicitly closed, so bump the refCount down * artificially to 0. This will ensure that the channel is actually @@ -2649,23 +2210,30 @@ * closed, below. Also set the static pointer to NULL for the channel. */ CheckForStdChannelsBeingClosed(chan); - chanPtr = (Channel *) chan; - if (chanPtr->refCount > 0) { + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = (Channel *) chan; + statePtr = chanPtr->state; + chanPtr = statePtr->topChanPtr; + + if (statePtr->refCount > 0) { panic("called Tcl_Close on channel with refCount > 0"); } /* * Remove any references to channel handlers for this channel that * may be about to be invoked. */ for (nhPtr = tsdPtr->nestedHandlerPtr; - nhPtr != (NextChannelHandler *) NULL; - nhPtr = nhPtr->nestedHandlerPtr) { + nhPtr != (NextChannelHandler *) NULL; + nhPtr = nhPtr->nestedHandlerPtr) { if (nhPtr->nextHandlerPtr && (nhPtr->nextHandlerPtr->chanPtr == chanPtr)) { nhPtr->nextHandlerPtr = NULL; } } @@ -2672,66 +2240,65 @@ /* * Remove all the channel handler records attached to the channel * itself. */ - - for (chPtr = chanPtr->chPtr; - chPtr != (ChannelHandler *) NULL; - chPtr = chNext) { + + for (chPtr = statePtr->chPtr; + chPtr != (ChannelHandler *) NULL; + chPtr = chNext) { chNext = chPtr->nextPtr; ckfree((char *) chPtr); } - chanPtr->chPtr = (ChannelHandler *) NULL; - - + statePtr->chPtr = (ChannelHandler *) NULL; + /* * Cancel any pending copy operation. */ - StopCopy(chanPtr->csPtr); + StopCopy(statePtr->csPtr); /* * Must set the interest mask now to 0, otherwise infinite loops * will occur if Tcl_DoOneEvent is called before the channel is * finally deleted in FlushChannel. This can happen if the channel * has a background flush active. */ - chanPtr->interestMask = 0; + statePtr->interestMask = 0; /* * Remove any EventScript records for this channel. */ - for (ePtr = chanPtr->scriptRecordPtr; - ePtr != (EventScriptRecord *) NULL; - ePtr = eNextPtr) { + for (ePtr = statePtr->scriptRecordPtr; + ePtr != (EventScriptRecord *) NULL; + ePtr = eNextPtr) { eNextPtr = ePtr->nextPtr; Tcl_DecrRefCount(ePtr->scriptPtr); ckfree((char *) ePtr); } - chanPtr->scriptRecordPtr = (EventScriptRecord *) NULL; + statePtr->scriptRecordPtr = (EventScriptRecord *) NULL; /* * Invoke the registered close callbacks and delete their records. */ - while (chanPtr->closeCbPtr != (CloseCallback *) NULL) { - cbPtr = chanPtr->closeCbPtr; - chanPtr->closeCbPtr = cbPtr->nextPtr; + while (statePtr->closeCbPtr != (CloseCallback *) NULL) { + cbPtr = statePtr->closeCbPtr; + statePtr->closeCbPtr = cbPtr->nextPtr; (cbPtr->proc) (cbPtr->clientData); ckfree((char *) cbPtr); } /* * Ensure that the last output buffer will be flushed. */ - if ((chanPtr->curOutPtr != (ChannelBuffer *) NULL) && - (chanPtr->curOutPtr->nextAdded > chanPtr->curOutPtr->nextRemoved)) { - chanPtr->flags |= BUFFER_READY; + if ((statePtr->curOutPtr != (ChannelBuffer *) NULL) && + (statePtr->curOutPtr->nextAdded > statePtr->curOutPtr->nextRemoved)) { + statePtr->flags |= BUFFER_READY; } /* * If this channel supports it, close the read side, since we don't need it * anymore and this will help avoid deadlocks on some channel types. @@ -2748,11 +2315,11 @@ * The call to FlushChannel will flush any queued output and invoke * the close function of the channel driver, or it will set up the * channel to be flushed and closed asynchronously. */ - chanPtr->flags |= CHANNEL_CLOSED; + statePtr->flags |= CHANNEL_CLOSED; if ((FlushChannel(interp, chanPtr, 0) != 0) || (result != 0)) { return TCL_ERROR; } return TCL_OK; } @@ -2783,21 +2350,83 @@ Tcl_Channel chan; /* The channel to buffer output for. */ char *src; /* Data to queue in output buffer. */ int srcLen; /* Length of data in bytes, or < 0 for * strlen(). */ { + /* + * Always use the topmost channel of the stack + */ Channel *chanPtr; + ChannelState *statePtr; /* state info for channel */ - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_WRITABLE) != 0) { + statePtr = ((Channel *) chan)->state; + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) { return -1; } + if (srcLen < 0) { srcLen = strlen(src); } return DoWrite(chanPtr, src, srcLen); } + +/* + *---------------------------------------------------------------------- + * + * Tcl_WriteRaw -- + * + * Puts a sequence of bytes into an output buffer, may queue the + * buffer for output if it gets full, and also remembers whether the + * current buffer is ready e.g. if it contains a newline and we are in + * line buffering mode. + * + * Results: + * The number of bytes written or -1 in case of error. If -1, + * Tcl_GetErrno will return the error code. + * + * Side effects: + * May buffer up output and may cause output to be produced on the + * channel. + * + *---------------------------------------------------------------------- + */ + +int +Tcl_WriteRaw(chan, src, srcLen) + Tcl_Channel chan; /* The channel to buffer output for. */ + char *src; /* Data to queue in output buffer. */ + int srcLen; /* Length of data in bytes, or < 0 for + * strlen(). */ +{ + Channel *chanPtr = ((Channel *) chan); + ChannelState *statePtr = chanPtr->state; /* state info for channel */ + int errorCode, written; + + if (CheckChannelErrors(statePtr, TCL_WRITABLE | CHANNEL_RAW_MODE) != 0) { + return -1; + } + + if (srcLen < 0) { + srcLen = strlen(src); + } + + /* + * Go immediately to the driver, do all the error handling by ourselves. + * The code was stolen from 'FlushChannel'. + */ + + written = (chanPtr->typePtr->outputProc) (chanPtr->instanceData, + src, srcLen, &errorCode); + + if (written < 0) { + Tcl_SetErrno(errorCode); + } + + return written; +} /* *--------------------------------------------------------------------------- * * Tcl_WriteChars -- @@ -2824,20 +2453,26 @@ Tcl_Channel chan; /* The channel to buffer output for. */ CONST char *src; /* UTF-8 characters to queue in output buffer. */ int len; /* Length of string in bytes, or < 0 for * strlen(). */ { + /* + * Always use the topmost channel of the stack + */ Channel *chanPtr; + ChannelState *statePtr; /* state info for channel */ - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_WRITABLE) != 0) { + statePtr = ((Channel *) chan)->state; + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) { return -1; } if (len < 0) { len = strlen(src); } - if (chanPtr->encoding == NULL) { + if (statePtr->encoding == NULL) { /* * Inefficient way to convert UTF-8 to byte-array, but the * code parallels the way it is done for objects. */ @@ -2881,19 +2516,25 @@ int Tcl_WriteObj(chan, objPtr) Tcl_Channel chan; /* The channel to buffer output for. */ Tcl_Obj *objPtr; /* The object to write. */ { + /* + * Always use the topmost channel of the stack + */ Channel *chanPtr; + ChannelState *statePtr; /* state info for channel */ char *src; int srcLen; - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_WRITABLE) != 0) { + statePtr = ((Channel *) chan)->state; + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) { return -1; } - if (chanPtr->encoding == NULL) { + if (statePtr->encoding == NULL) { src = (char *) Tcl_GetByteArrayFromObj(objPtr, &srcLen); return WriteBytes(chanPtr, src, srcLen); } else { src = Tcl_GetStringFromObj(objPtr, &srcLen); return WriteChars(chanPtr, src, srcLen); @@ -2925,10 +2566,11 @@ WriteBytes(chanPtr, src, srcLen) Channel *chanPtr; /* The channel to buffer output for. */ CONST char *src; /* Bytes to write. */ int srcLen; /* Number of bytes to write. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; char *dst; int dstLen, dstMax, sawLF, savedLF, total, toWrite; total = 0; @@ -2939,14 +2581,14 @@ * Loop over all bytes in src, storing them in output buffer with * proper EOL translation. */ while (srcLen + savedLF > 0) { - bufPtr = chanPtr->curOutPtr; + bufPtr = statePtr->curOutPtr; if (bufPtr == NULL) { - bufPtr = AllocChannelBuffer(chanPtr->bufSize); - chanPtr->curOutPtr = bufPtr; + bufPtr = AllocChannelBuffer(statePtr->bufSize); + statePtr->curOutPtr = bufPtr; } dst = bufPtr->buf + bufPtr->nextAdded; dstMax = bufPtr->bufLength - bufPtr->nextAdded; dstLen = dstMax; @@ -2964,11 +2606,11 @@ *dst++ = '\n'; dstLen--; sawLF++; } - sawLF += TranslateOutputEOL(chanPtr, dst, src, &dstLen, &toWrite); + sawLF += TranslateOutputEOL(statePtr, dst, src, &dstLen, &toWrite); dstLen += savedLF; savedLF = 0; if (dstLen > dstMax) { savedLF = 1; @@ -3012,10 +2654,11 @@ WriteChars(chanPtr, src, srcLen) Channel *chanPtr; /* The channel to buffer output for. */ CONST char *src; /* UTF-8 string to write. */ int srcLen; /* Length of UTF-8 string in bytes. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; char *dst, *stage; int saved, savedLF, sawLF, total, toWrite, flags; int dstWrote, dstLen, stageLen, stageMax, stageRead; Tcl_Encoding encoding; @@ -3023,20 +2666,20 @@ total = 0; sawLF = 0; savedLF = 0; saved = 0; - encoding = chanPtr->encoding; + encoding = statePtr->encoding; /* * Loop over all UTF-8 characters in src, storing them in staging buffer * with proper EOL translation. */ while (srcLen + savedLF > 0) { - stage = chanPtr->outputStage; - stageMax = chanPtr->bufSize; + stage = statePtr->outputStage; + stageMax = statePtr->bufSize; stageLen = stageMax; toWrite = stageLen; if (toWrite > srcLen) { toWrite = srcLen; @@ -3052,11 +2695,11 @@ *stage++ = '\n'; stageLen--; sawLF++; } - sawLF += TranslateOutputEOL(chanPtr, stage, src, &stageLen, &toWrite); + sawLF += TranslateOutputEOL(statePtr, stage, src, &stageLen, &toWrite); stage -= savedLF; stageLen += savedLF; savedLF = 0; @@ -3065,11 +2708,11 @@ stageLen = stageMax; } src += toWrite; srcLen -= toWrite; - flags = chanPtr->outputEncodingFlags; + flags = statePtr->outputEncodingFlags; if (srcLen == 0) { flags |= TCL_ENCODING_END; } /* @@ -3076,14 +2719,14 @@ * Loop over all UTF-8 characters in staging buffer, converting them * to external encoding, storing them in output buffer. */ while (stageLen + saved > 0) { - bufPtr = chanPtr->curOutPtr; + bufPtr = statePtr->curOutPtr; if (bufPtr == NULL) { - bufPtr = AllocChannelBuffer(chanPtr->bufSize); - chanPtr->curOutPtr = bufPtr; + bufPtr = AllocChannelBuffer(statePtr->bufSize); + statePtr->curOutPtr = bufPtr; } dst = bufPtr->buf + bufPtr->nextAdded; dstLen = bufPtr->bufLength - bufPtr->nextAdded; if (saved != 0) { @@ -3099,11 +2742,11 @@ dstLen -= saved; saved = 0; } Tcl_UtfToExternal(NULL, encoding, stage, stageLen, flags, - &chanPtr->outputEncodingState, dst, + &statePtr->outputEncodingState, dst, dstLen + BUFFER_PADDING, &stageRead, &dstWrote, NULL); if (stageRead + dstWrote == 0) { /* * We have an incomplete UTF-8 character at the end of the * staging buffer. It will get moved to the beginning of the @@ -3183,12 +2826,12 @@ * *--------------------------------------------------------------------------- */ static int -TranslateOutputEOL(chanPtr, dst, src, dstLenPtr, srcLenPtr) - Channel *chanPtr; /* Channel being read, for translation and +TranslateOutputEOL(statePtr, dst, src, dstLenPtr, srcLenPtr) + ChannelState *statePtr; /* Channel being read, for translation and * buffering modes. */ char *dst; /* Output buffer filled with UTF-8 chars by * applying appropriate EOL translation to * source characters. */ CONST char *src; /* Source UTF-8 characters. */ @@ -3203,11 +2846,11 @@ int srcLen, newlineFound; newlineFound = 0; srcLen = *srcLenPtr; - switch (chanPtr->outputTranslation) { + switch (statePtr->outputTranslation) { case TCL_TRANSLATE_LF: { for (dstEnd = dst + srcLen; dst < dstEnd; ) { if (*src == '\n') { newlineFound = 1; } @@ -3295,29 +2938,30 @@ Channel *chanPtr; /* Channel being read, for buffering mode. */ ChannelBuffer *bufPtr; /* Channel buffer to possibly flush. */ int newlineFlag; /* Non-zero if a the channel buffer * contains a newline. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ /* * The current buffer is ready for output: * 1. if it is full. * 2. if it contains a newline and this channel is line-buffered. * 3. if it contains any output and this channel is unbuffered. */ - if ((chanPtr->flags & BUFFER_READY) == 0) { + if ((statePtr->flags & BUFFER_READY) == 0) { if (bufPtr->nextAdded == bufPtr->bufLength) { - chanPtr->flags |= BUFFER_READY; - } else if (chanPtr->flags & CHANNEL_LINEBUFFERED) { + statePtr->flags |= BUFFER_READY; + } else if (statePtr->flags & CHANNEL_LINEBUFFERED) { if (newlineFlag != 0) { - chanPtr->flags |= BUFFER_READY; + statePtr->flags |= BUFFER_READY; } - } else if (chanPtr->flags & CHANNEL_UNBUFFERED) { - chanPtr->flags |= BUFFER_READY; + } else if (statePtr->flags & CHANNEL_UNBUFFERED) { + statePtr->flags |= BUFFER_READY; } } - if (chanPtr->flags & BUFFER_READY) { + if (statePtr->flags & BUFFER_READY) { if (FlushChannel(NULL, chanPtr, 0) != 0) { return -1; } } return 0; @@ -3394,35 +3038,41 @@ Tcl_Channel chan; /* Channel from which to read. */ Tcl_Obj *objPtr; /* The line read will be appended to this * object as UTF-8 characters. */ { GetsState gs; - Channel *chanPtr; - int inEofChar, skip, copiedTotal; + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; + int inEofChar, skip, copiedTotal; Tcl_Encoding encoding; char *dst, *dstEnd, *eol, *eof; Tcl_EncodingState oldState; int oldLength, oldFlags, oldRemoved; - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_READABLE) != 0) { + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) { copiedTotal = -1; goto done; } - bufPtr = chanPtr->inQueueHead; - encoding = chanPtr->encoding; + bufPtr = statePtr->inQueueHead; + encoding = statePtr->encoding; /* * Preserved so we can restore the channel's state in case we don't * find a newline in the available input. */ Tcl_GetStringFromObj(objPtr, &oldLength); - oldFlags = chanPtr->inputEncodingFlags; - oldState = chanPtr->inputEncodingState; + oldFlags = statePtr->inputEncodingFlags; + oldState = statePtr->inputEncodingState; oldRemoved = BUFFER_PADDING; if (bufPtr != NULL) { oldRemoved = bufPtr->nextRemoved; } @@ -3454,11 +3104,11 @@ dst = objPtr->bytes + oldLength; dstEnd = dst; skip = 0; eof = NULL; - inEofChar = chanPtr->inEofChar; + inEofChar = statePtr->inEofChar; while (1) { if (dst >= dstEnd) { if (FilterInputBytes(chanPtr, &gs) != 0) { goto restore; @@ -3485,11 +3135,11 @@ * On EOL, leave current file position pointing after the EOL, but * don't store the EOL in the output string. */ eol = dst; - switch (chanPtr->inputTranslation) { + switch (statePtr->inputTranslation) { case TCL_TRANSLATE_LF: { for (eol = dst; eol < dstEnd; eol++) { if (*eol == '\n') { skip = 1; goto goteol; @@ -3534,12 +3184,12 @@ } break; } case TCL_TRANSLATE_AUTO: { skip = 1; - if (chanPtr->flags & INPUT_SAW_CR) { - chanPtr->flags &= ~INPUT_SAW_CR; + if (statePtr->flags & INPUT_SAW_CR) { + statePtr->flags &= ~INPUT_SAW_CR; if (*eol == '\n') { /* * Skip the raw bytes that make up the '\n'. */ @@ -3547,11 +3197,11 @@ int rawRead; bufPtr = gs.bufPtr; Tcl_ExternalToUtf(NULL, gs.encoding, bufPtr->buf + bufPtr->nextRemoved, - gs.rawRead, chanPtr->inputEncodingFlags, + gs.rawRead, statePtr->inputEncodingFlags, &gs.state, tmp, 1 + TCL_UTF_MAX, &rawRead, NULL, NULL); bufPtr->nextRemoved += rawRead; gs.rawRead -= rawRead; gs.bytesWrote--; @@ -3575,11 +3225,11 @@ dst = dstEnd; PeekAhead(chanPtr, &dstEnd, &gs); eol = objPtr->bytes + offset; if (eol >= dstEnd) { eol--; - chanPtr->flags |= INPUT_SAW_CR; + statePtr->flags |= INPUT_SAW_CR; goto goteol; } } if (*eol == '\n') { skip++; @@ -3598,14 +3248,14 @@ * pointing at the EOF character, but don't store the EOF * character in the output string. */ dstEnd = eof; - chanPtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF); - chanPtr->inputEncodingFlags |= TCL_ENCODING_END; + statePtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF); + statePtr->inputEncodingFlags |= TCL_ENCODING_END; } - if (chanPtr->flags & CHANNEL_EOF) { + if (statePtr->flags & CHANNEL_EOF) { skip = 0; eol = dstEnd; if (eol == objPtr->bytes) { /* * If we didn't produce any bytes before encountering EOF, @@ -3630,24 +3280,24 @@ * remove the correct number of bytes from the channel buffer. */ goteol: bufPtr = gs.bufPtr; - chanPtr->inputEncodingState = gs.state; + statePtr->inputEncodingState = gs.state; Tcl_ExternalToUtf(NULL, gs.encoding, bufPtr->buf + bufPtr->nextRemoved, - gs.rawRead, chanPtr->inputEncodingFlags, - &chanPtr->inputEncodingState, dst, eol - dst + skip + TCL_UTF_MAX, + gs.rawRead, statePtr->inputEncodingFlags, + &statePtr->inputEncodingState, dst, eol - dst + skip + TCL_UTF_MAX, &gs.rawRead, NULL, &gs.charsWrote); bufPtr->nextRemoved += gs.rawRead; /* * Recycle all the emptied buffers. */ Tcl_SetObjLength(objPtr, eol - objPtr->bytes); CommonGetsCleanup(chanPtr, encoding); - chanPtr->flags &= ~CHANNEL_BLOCKED; + statePtr->flags &= ~CHANNEL_BLOCKED; copiedTotal = gs.totalChars + gs.charsWrote - skip; goto done; /* * Couldn't get a complete line. This only happens if we get a error @@ -3654,20 +3304,20 @@ * reading from the channel or we are non-blocking and there wasn't * an EOL or EOF in the data available. */ restore: - bufPtr = chanPtr->inQueueHead; + bufPtr = statePtr->inQueueHead; bufPtr->nextRemoved = oldRemoved; for (bufPtr = bufPtr->nextPtr; bufPtr != NULL; bufPtr = bufPtr->nextPtr) { bufPtr->nextRemoved = BUFFER_PADDING; } CommonGetsCleanup(chanPtr, encoding); - chanPtr->inputEncodingState = oldState; - chanPtr->inputEncodingFlags = oldFlags; + statePtr->inputEncodingState = oldState; + statePtr->inputEncodingFlags = oldFlags; Tcl_SetObjLength(objPtr, oldLength); /* * We didn't get a complete line so we need to indicate to UpdateInterest * that the gets blocked. It will wait for more data instead of firing @@ -3677,11 +3327,11 @@ * on the channel (e.g. gets, read, fconfigure) that changes the blocking * state. Note that this means a file event will not be delivered even * though a read would be able to consume the buffered data. */ - chanPtr->flags |= CHANNEL_NEED_MORE_DATA; + statePtr->flags |= CHANNEL_NEED_MORE_DATA; copiedTotal = -1; done: /* * Update the notifier state so we don't block while there is still @@ -3719,10 +3369,11 @@ static int FilterInputBytes(chanPtr, gsPtr) Channel *chanPtr; /* Channel to read. */ GetsState *gsPtr; /* Current state of gets operation. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; char *raw, *rawStart, *rawEnd; char *dst; int offset, toRead, dstNeeded, spaceLeft, result, rawLen, length; Tcl_Obj *objPtr; @@ -3755,24 +3406,24 @@ * seen EOL. Need to read more bytes from the channel device. * Side effect is to allocate another channel buffer. */ read: - if (chanPtr->flags & CHANNEL_BLOCKED) { - if (chanPtr->flags & CHANNEL_NONBLOCKING) { + if (statePtr->flags & CHANNEL_BLOCKED) { + if (statePtr->flags & CHANNEL_NONBLOCKING) { gsPtr->charsWrote = 0; gsPtr->rawRead = 0; return -1; } - chanPtr->flags &= ~CHANNEL_BLOCKED; + statePtr->flags &= ~CHANNEL_BLOCKED; } if (GetInput(chanPtr) != 0) { gsPtr->charsWrote = 0; gsPtr->rawRead = 0; return -1; } - bufPtr = chanPtr->inQueueTail; + bufPtr = statePtr->inQueueTail; gsPtr->bufPtr = bufPtr; } /* * Convert some of the bytes from the channel buffer to UTF-8. Space in @@ -3802,13 +3453,13 @@ Tcl_SetObjLength(objPtr, length); spaceLeft = length - offset; dst = objPtr->bytes + offset; *gsPtr->dstPtr = dst; } - gsPtr->state = chanPtr->inputEncodingState; + gsPtr->state = statePtr->inputEncodingState; result = Tcl_ExternalToUtf(NULL, gsPtr->encoding, raw, rawLen, - chanPtr->inputEncodingFlags, &chanPtr->inputEncodingState, + statePtr->inputEncodingFlags, &statePtr->inputEncodingState, dst, spaceLeft, &gsPtr->rawRead, &gsPtr->bytesWrote, &gsPtr->charsWrote); if (result == TCL_CONVERT_MULTIBYTE) { /* * The last few bytes in this channel buffer were the start of a @@ -3825,17 +3476,17 @@ /* * Some raw bytes were converted to UTF-8. Fall through, * returning those UTF-8 characters because a EOL might be * present in them. */ - } else if (chanPtr->flags & CHANNEL_EOF) { + } else if (statePtr->flags & CHANNEL_EOF) { /* * There was a partial character followed by EOF on the * device. Fall through, returning that nothing was found. */ - bufPtr->nextRemoved = bufPtr->nextAdded; + bufPtr->nextRemoved = bufPtr->nextAdded; } else { /* * There are no more cached raw bytes left. See if we can * get some more. */ @@ -3842,13 +3493,13 @@ goto read; } } else { if (nextPtr == NULL) { - nextPtr = AllocChannelBuffer(chanPtr->bufSize); + nextPtr = AllocChannelBuffer(statePtr->bufSize); bufPtr->nextPtr = nextPtr; - chanPtr->inQueueTail = nextPtr; + statePtr->inQueueTail = nextPtr; } extra = rawLen - gsPtr->rawRead; memcpy((VOID *) (nextPtr->buf + BUFFER_PADDING - extra), (VOID *) (raw + gsPtr->rawRead), (size_t) extra); nextPtr->nextRemoved -= extra; @@ -3887,10 +3538,11 @@ Channel *chanPtr; /* The channel to read. */ char **dstEndPtr; /* Filled with pointer to end of new range * of UTF-8 characters. */ GetsState *gsPtr; /* Current state of gets operation. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; Tcl_DriverBlockModeProc *blockModeProc; int bytesLeft; bufPtr = gsPtr->bufPtr; @@ -3912,28 +3564,28 @@ * Don't peek ahead if last read was short read. */ goto cleanup; } - if ((chanPtr->flags & CHANNEL_NONBLOCKING) == 0) { - blockModeProc = chanPtr->typePtr->blockModeProc; + if ((statePtr->flags & CHANNEL_NONBLOCKING) == 0) { + blockModeProc = Tcl_ChannelBlockModeProc(chanPtr->typePtr); if (blockModeProc == NULL) { /* * Don't peek ahead if cannot set non-blocking mode. */ goto cleanup; } - (*blockModeProc)(chanPtr->instanceData, TCL_MODE_NONBLOCKING); + StackSetBlockMode(chanPtr, TCL_MODE_NONBLOCKING); } } } if (FilterInputBytes(chanPtr, gsPtr) == 0) { *dstEndPtr = *gsPtr->dstPtr + gsPtr->bytesWrote; } if (blockModeProc != NULL) { - (*blockModeProc)(chanPtr->instanceData, TCL_MODE_BLOCKING); + StackSetBlockMode(chanPtr, TCL_MODE_BLOCKING); } return; cleanup: bufPtr->nextRemoved += gsPtr->rawRead; @@ -3963,23 +3615,24 @@ static void CommonGetsCleanup(chanPtr, encoding) Channel *chanPtr; Tcl_Encoding encoding; { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr, *nextPtr; - bufPtr = chanPtr->inQueueHead; + bufPtr = statePtr->inQueueHead; for ( ; bufPtr != NULL; bufPtr = nextPtr) { nextPtr = bufPtr->nextPtr; if (bufPtr->nextRemoved < bufPtr->nextAdded) { break; } - RecycleBuffer(chanPtr, bufPtr, 0); + RecycleBuffer(statePtr, bufPtr, 0); } - chanPtr->inQueueHead = bufPtr; + statePtr->inQueueHead = bufPtr; if (bufPtr == NULL) { - chanPtr->inQueueTail = NULL; + statePtr->inQueueTail = NULL; } else { /* * If any multi-byte characters were split across channel buffer * boundaries, the split-up bytes were moved to the next channel * buffer by FilterInputBytes(). Move the bytes back to their @@ -4001,11 +3654,11 @@ nextPtr->nextRemoved = BUFFER_PADDING; } bufPtr = nextPtr; } } - if (chanPtr->encoding == NULL) { + if (statePtr->encoding == NULL) { Tcl_FreeEncoding(encoding); } } /* @@ -4034,19 +3687,146 @@ Tcl_Read(chan, dst, bytesToRead) Tcl_Channel chan; /* The channel from which to read. */ char *dst; /* Where to store input read. */ int bytesToRead; /* Maximum number of bytes to read. */ { - Channel *chanPtr; - - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_READABLE) != 0) { + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ + + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) { return -1; } return DoRead(chanPtr, dst, bytesToRead); } + +/* + *---------------------------------------------------------------------- + * + * Tcl_ReadRaw -- + * + * Reads a given number of bytes from a channel. EOL and EOF + * translation is done on the bytes being read, so the the number + * of bytes consumed from the channel may not be equal to the + * number of bytes stored in the destination buffer. + * + * No encoding conversions are applied to the bytes being read. + * + * Results: + * The number of bytes read, or -1 on error. Use Tcl_GetErrno() + * to retrieve the error code for the error that occurred. + * + * Side effects: + * May cause input to be buffered. + * + *---------------------------------------------------------------------- + */ + +int +Tcl_ReadRaw(chan, bufPtr, bytesToRead) + Tcl_Channel chan; /* The channel from which to read. */ + char *bufPtr; /* Where to store input read. */ + int bytesToRead; /* Maximum number of bytes to read. */ +{ + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ + int nread, result; + int copied, copiedNow; + + /* + * The check below does too much because it will reject a call to this + * function with a channel which is part of an 'fcopy'. But we have to + * allow this here or else the chaining in the transformation drivers + * will fail with 'file busy' error instead of retrieving and + * transforming the data to copy. + * + * We let the check procedure now believe that there is no fcopy in + * progress. A better solution than this might be an additional flag + * argument to switch off specific checks. + */ + + if (CheckChannelErrors(statePtr, TCL_READABLE | CHANNEL_RAW_MODE) != 0) { + return -1; + } + + /* + * Check for information in the push-back buffers. If there is + * some, use it. Go to the driver only if there is none (anymore) + * and the caller requests more bytes. + */ + + for (copied = 0; copied < bytesToRead; copied += copiedNow) { + copiedNow = CopyBuffer(chanPtr, bufPtr + copied, + bytesToRead - copied); + if (copiedNow == 0) { + if (statePtr->flags & CHANNEL_EOF) { + goto done; + } + if (statePtr->flags & CHANNEL_BLOCKED) { + if (statePtr->flags & CHANNEL_NONBLOCKING) { + goto done; + } + statePtr->flags &= (~(CHANNEL_BLOCKED)); + } + + /* + * Now go to the driver to get as much as is possible to + * fill the remaining request. Do all the error handling + * by ourselves. The code was stolen from 'GetInput' and + * slightly adapted (different return value here). + * + * The case of 'bytesToRead == 0' at this point cannot happen. + */ + + nread = (chanPtr->typePtr->inputProc)(chanPtr->instanceData, + bufPtr + copied, bytesToRead - copied, &result); + if (nread > 0) { + /* + * If we get a short read, signal up that we may be + * BLOCKED. We should avoid calling the driver because + * on some platforms we will block in the low level + * reading code even though the channel is set into + * nonblocking mode. + */ + + if (nread < (bytesToRead - copied)) { + statePtr->flags |= CHANNEL_BLOCKED; + } + } else if (nread == 0) { + statePtr->flags |= CHANNEL_EOF; + statePtr->inputEncodingFlags |= TCL_ENCODING_END; + } else if (nread < 0) { + if ((result == EWOULDBLOCK) || (result == EAGAIN)) { + if (copied > 0) { + /* + * Information that was copied earlier has precedence + * over EAGAIN/WOULDBLOCK handling. + */ + return copied; + } + + statePtr->flags |= CHANNEL_BLOCKED; + result = EAGAIN; + } + + Tcl_SetErrno(result); + return -1; + } + + return copied + nread; + } + } + +done: + return copied; +} /* *--------------------------------------------------------------------------- * * Tcl_ReadChars -- @@ -4079,23 +3859,29 @@ * will be appended to the object. Otherwise, * the data will replace the existing contents * of the object. */ { - Channel *chanPtr; - int offset, factor, copied, copiedNow, result; + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; + int offset, factor, copied, copiedNow, result; Tcl_Encoding encoding; #define UTF_EXPANSION_FACTOR 1024 - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_READABLE) != 0) { + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) { copied = -1; goto done; } - encoding = chanPtr->encoding; + encoding = statePtr->encoding; factor = UTF_EXPANSION_FACTOR; if (appendFlag == 0) { if (encoding == NULL) { Tcl_SetByteArrayLength(objPtr, 0); @@ -4111,43 +3897,43 @@ } } for (copied = 0; (unsigned) toRead > 0; ) { copiedNow = -1; - if (chanPtr->inQueueHead != NULL) { + if (statePtr->inQueueHead != NULL) { if (encoding == NULL) { - copiedNow = ReadBytes(chanPtr, objPtr, toRead, &offset); + copiedNow = ReadBytes(statePtr, objPtr, toRead, &offset); } else { - copiedNow = ReadChars(chanPtr, objPtr, toRead, &offset, + copiedNow = ReadChars(statePtr, objPtr, toRead, &offset, &factor); } /* * If the current buffer is empty recycle it. */ - bufPtr = chanPtr->inQueueHead; + bufPtr = statePtr->inQueueHead; if (bufPtr->nextRemoved == bufPtr->nextAdded) { ChannelBuffer *nextPtr; nextPtr = bufPtr->nextPtr; - RecycleBuffer(chanPtr, bufPtr, 0); - chanPtr->inQueueHead = nextPtr; + RecycleBuffer(statePtr, bufPtr, 0); + statePtr->inQueueHead = nextPtr; if (nextPtr == NULL) { - chanPtr->inQueueTail = nextPtr; + statePtr->inQueueTail = nextPtr; } } } if (copiedNow < 0) { - if (chanPtr->flags & CHANNEL_EOF) { + if (statePtr->flags & CHANNEL_EOF) { break; } - if (chanPtr->flags & CHANNEL_BLOCKED) { - if (chanPtr->flags & CHANNEL_NONBLOCKING) { + if (statePtr->flags & CHANNEL_BLOCKED) { + if (statePtr->flags & CHANNEL_NONBLOCKING) { break; } - chanPtr->flags &= ~CHANNEL_BLOCKED; + statePtr->flags &= ~CHANNEL_BLOCKED; } result = GetInput(chanPtr); if (result != 0) { if (result == EAGAIN) { break; @@ -4158,11 +3944,11 @@ } else { copied += copiedNow; toRead -= copiedNow; } } - chanPtr->flags &= ~CHANNEL_BLOCKED; + statePtr->flags &= ~CHANNEL_BLOCKED; if (encoding == NULL) { Tcl_SetByteArrayLength(objPtr, offset); } else { Tcl_SetObjLength(objPtr, offset); } @@ -4201,12 +3987,12 @@ * *--------------------------------------------------------------------------- */ static int -ReadBytes(chanPtr, objPtr, bytesToRead, offsetPtr) - Channel *chanPtr; /* The channel to read. */ +ReadBytes(statePtr, objPtr, bytesToRead, offsetPtr) + ChannelState *statePtr; /* State of the channel to read. */ int bytesToRead; /* Maximum number of characters to store, * or < 0 to get all available characters. * Characters are obtained from the first * buffer in the queue -- even if this number * is larger than the number of characters @@ -4227,11 +4013,11 @@ ChannelBuffer *bufPtr; char *src, *dst; offset = *offsetPtr; - bufPtr = chanPtr->inQueueHead; + bufPtr = statePtr->inQueueHead; src = bufPtr->buf + bufPtr->nextRemoved; srcLen = bufPtr->nextAdded - bufPtr->nextRemoved; toRead = bytesToRead; if ((unsigned) toRead > (unsigned) srcLen) { @@ -4252,12 +4038,12 @@ } dst = (char *) Tcl_SetByteArrayLength(objPtr, length); } dst += offset; - if (chanPtr->flags & INPUT_NEED_NL) { - chanPtr->flags &= ~INPUT_NEED_NL; + if (statePtr->flags & INPUT_NEED_NL) { + statePtr->flags &= ~INPUT_NEED_NL; if ((srcLen == 0) || (*src != '\n')) { *dst = '\r'; *offsetPtr += 1; return 1; } @@ -4267,11 +4053,11 @@ toRead--; } srcRead = srcLen; dstWrote = toRead; - if (TranslateInputEOL(chanPtr, dst, src, &dstWrote, &srcRead) != 0) { + if (TranslateInputEOL(statePtr, dst, src, &dstWrote, &srcRead) != 0) { if (dstWrote == 0) { return -1; } } bufPtr->nextRemoved += srcRead; @@ -4305,12 +4091,12 @@ * *--------------------------------------------------------------------------- */ static int -ReadChars(chanPtr, objPtr, charsToRead, offsetPtr, factorPtr) - Channel *chanPtr; /* The channel to read. */ +ReadChars(statePtr, objPtr, charsToRead, offsetPtr, factorPtr) + ChannelState *statePtr; /* State of channel to read. */ int charsToRead; /* Maximum number of characters to store, * or -1 to get all available characters. * Characters are obtained from the first * buffer in the queue -- even if this number * is larger than the number of characters @@ -4338,11 +4124,11 @@ Tcl_EncodingState oldState; factor = *factorPtr; offset = *offsetPtr; - bufPtr = chanPtr->inQueueHead; + bufPtr = statePtr->inQueueHead; src = bufPtr->buf + bufPtr->nextRemoved; srcLen = bufPtr->nextAdded - bufPtr->nextRemoved; toRead = charsToRead; if ((unsigned) toRead > (unsigned) srcLen) { @@ -4383,40 +4169,40 @@ dstNeeded = spaceLeft; } dst = objPtr->bytes + offset; - oldState = chanPtr->inputEncodingState; - if (chanPtr->flags & INPUT_NEED_NL) { + oldState = statePtr->inputEncodingState; + if (statePtr->flags & INPUT_NEED_NL) { /* * We want a '\n' because the last character we saw was '\r'. */ - - chanPtr->flags &= ~INPUT_NEED_NL; - Tcl_ExternalToUtf(NULL, chanPtr->encoding, src, srcLen, - chanPtr->inputEncodingFlags, &chanPtr->inputEncodingState, + + statePtr->flags &= ~INPUT_NEED_NL; + Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen, + statePtr->inputEncodingFlags, &statePtr->inputEncodingState, dst, TCL_UTF_MAX + 1, &srcRead, &dstWrote, &numChars); if ((dstWrote > 0) && (*dst == '\n')) { /* * The next char was a '\n'. Consume it and produce a '\n'. */ - + bufPtr->nextRemoved += srcRead; } else { /* * The next char was not a '\n'. Produce a '\r'. */ *dst = '\r'; } - chanPtr->inputEncodingFlags &= ~TCL_ENCODING_START; + statePtr->inputEncodingFlags &= ~TCL_ENCODING_START; *offsetPtr += 1; return 1; } - Tcl_ExternalToUtf(NULL, chanPtr->encoding, src, srcLen, - chanPtr->inputEncodingFlags, &chanPtr->inputEncodingState, dst, + Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen, + statePtr->inputEncodingFlags, &statePtr->inputEncodingState, dst, dstNeeded + TCL_UTF_MAX, &srcRead, &dstWrote, &numChars); if (srcRead == 0) { /* * Not enough bytes in src buffer to make a complete char. Copy * the bytes to the next buffer to make a new contiguous string, @@ -4431,36 +4217,36 @@ * There isn't enough data in the buffers to complete the next * character, so we need to wait for more data before the next * file event can be delivered. */ - chanPtr->flags |= CHANNEL_NEED_MORE_DATA; + statePtr->flags |= CHANNEL_NEED_MORE_DATA; return -1; } nextPtr->nextRemoved -= srcLen; memcpy((VOID *) (nextPtr->buf + nextPtr->nextRemoved), (VOID *) src, (size_t) srcLen); - RecycleBuffer(chanPtr, bufPtr, 0); - chanPtr->inQueueHead = nextPtr; - return ReadChars(chanPtr, objPtr, charsToRead, offsetPtr, factorPtr); + RecycleBuffer(statePtr, bufPtr, 0); + statePtr->inQueueHead = nextPtr; + return ReadChars(statePtr, objPtr, charsToRead, offsetPtr, factorPtr); } dstRead = dstWrote; - if (TranslateInputEOL(chanPtr, dst, dst, &dstWrote, &dstRead) != 0) { + if (TranslateInputEOL(statePtr, dst, dst, &dstWrote, &dstRead) != 0) { /* * Hit EOF char. How many bytes of src correspond to where the * EOF was located in dst? */ if (dstWrote == 0) { return -1; } - chanPtr->inputEncodingState = oldState; - Tcl_ExternalToUtf(NULL, chanPtr->encoding, src, srcLen, - chanPtr->inputEncodingFlags, &chanPtr->inputEncodingState, + statePtr->inputEncodingState = oldState; + Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen, + statePtr->inputEncodingFlags, &statePtr->inputEncodingState, dst, dstRead + TCL_UTF_MAX, &srcRead, &dstWrote, &numChars); - TranslateInputEOL(chanPtr, dst, dst, &dstWrote, &dstRead); + TranslateInputEOL(statePtr, dst, dst, &dstWrote, &dstRead); } /* * The number of characters that we got may be less than the number * that we started with because "\r\n" sequences may have been @@ -4475,19 +4261,19 @@ */ char *eof; eof = Tcl_UtfAtIndex(dst, toRead); - chanPtr->inputEncodingState = oldState; - Tcl_ExternalToUtf(NULL, chanPtr->encoding, src, srcLen, - chanPtr->inputEncodingFlags, &chanPtr->inputEncodingState, + statePtr->inputEncodingState = oldState; + Tcl_ExternalToUtf(NULL, statePtr->encoding, src, srcLen, + statePtr->inputEncodingFlags, &statePtr->inputEncodingState, dst, eof - dst + TCL_UTF_MAX, &srcRead, &dstWrote, &numChars); dstRead = dstWrote; - TranslateInputEOL(chanPtr, dst, dst, &dstWrote, &dstRead); + TranslateInputEOL(statePtr, dst, dst, &dstWrote, &dstRead); numChars -= (dstRead - dstWrote); } - chanPtr->inputEncodingFlags &= ~TCL_ENCODING_START; + statePtr->inputEncodingFlags &= ~TCL_ENCODING_START; bufPtr->nextRemoved += srcRead; if (dstWrote > srcRead + 1) { *factorPtr = dstWrote * UTF_EXPANSION_FACTOR / srcRead; } @@ -4512,12 +4298,12 @@ * *--------------------------------------------------------------------------- */ static int -TranslateInputEOL(chanPtr, dstStart, srcStart, dstLenPtr, srcLenPtr) - Channel *chanPtr; /* Channel being read, for EOL translation +TranslateInputEOL(statePtr, dstStart, srcStart, dstLenPtr, srcLenPtr) + ChannelState *statePtr; /* Channel being read, for EOL translation * and EOF character. */ char *dstStart; /* Output buffer filled with chars by * applying appropriate EOL translation to * source characters. */ CONST char *srcStart; /* Source characters. */ @@ -4533,11 +4319,11 @@ CONST char *eof; dstLen = *dstLenPtr; eof = NULL; - inEofChar = chanPtr->inEofChar; + inEofChar = statePtr->inEofChar; if (inEofChar != '\0') { /* * Find EOF in translated buffer then compress out the EOL. The * source buffer may be much longer than the destination buffer -- * we only want to return EOF if the EOF has been copied to the @@ -4557,11 +4343,11 @@ *srcLenPtr = srcLen; break; } } } - switch (chanPtr->inputTranslation) { + switch (statePtr->inputTranslation) { case TCL_TRANSLATE_LF: { if (dstStart != srcStart) { memcpy((VOID *) dstStart, (VOID *) srcStart, (size_t) dstLen); } srcLen = dstLen; @@ -4593,11 +4379,11 @@ for ( ; src < srcEnd; ) { if (*src == '\r') { src++; if (src >= srcMax) { - chanPtr->flags |= INPUT_NEED_NL; + statePtr->flags |= INPUT_NEED_NL; } else if (*src == '\n') { *dst++ = *src++; } else { *dst++ = '\r'; } @@ -4616,21 +4402,21 @@ dst = dstStart; src = srcStart; srcEnd = srcStart + dstLen; srcMax = srcStart + *srcLenPtr; - if ((chanPtr->flags & INPUT_SAW_CR) && (src < srcMax)) { + if ((statePtr->flags & INPUT_SAW_CR) && (src < srcMax)) { if (*src == '\n') { src++; } - chanPtr->flags &= ~INPUT_SAW_CR; + statePtr->flags &= ~INPUT_SAW_CR; } for ( ; src < srcEnd; ) { if (*src == '\r') { src++; if (src >= srcMax) { - chanPtr->flags |= INPUT_SAW_CR; + statePtr->flags |= INPUT_SAW_CR; } else if (*src == '\n') { if (srcEnd < srcMax) { srcEnd++; } src++; @@ -4655,13 +4441,13 @@ * EOF character was seen in EOL translated range. Leave current * file position pointing at the EOF character, but don't store the * EOF character in the output string. */ - chanPtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF); - chanPtr->inputEncodingFlags |= TCL_ENCODING_END; - chanPtr->flags &= ~(INPUT_SAW_CR | INPUT_NEED_NL); + statePtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF); + statePtr->inputEncodingFlags |= TCL_ENCODING_END; + statePtr->flags &= ~(INPUT_SAW_CR | INPUT_NEED_NL); return 1; } *srcLenPtr = srcLen; return 0; @@ -4691,56 +4477,64 @@ int len; /* The length of the input. */ int atEnd; /* If non-zero, add at end of queue; otherwise * add at head of queue. */ { Channel *chanPtr; /* The real IO channel. */ + ChannelState *statePtr; /* State of actual channel. */ ChannelBuffer *bufPtr; /* Buffer to contain the data. */ int i, flags; chanPtr = (Channel *) chan; - + statePtr = chanPtr->state; + + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + /* * CheckChannelErrors clears too many flag bits in this one case. */ - flags = chanPtr->flags; - if (CheckChannelErrors(chanPtr, TCL_READABLE) != 0) { + flags = statePtr->flags; + if (CheckChannelErrors(statePtr, TCL_READABLE) != 0) { len = -1; goto done; } - chanPtr->flags = flags; + statePtr->flags = flags; /* * If we have encountered a sticky EOF, just punt without storing. * (sticky EOF is set if we have seen the input eofChar, to prevent * reading beyond the eofChar). Otherwise, clear the EOF flags, and * clear the BLOCKED bit. We want to discover these conditions anew * in each operation. */ - if (chanPtr->flags & CHANNEL_STICKY_EOF) { + if (statePtr->flags & CHANNEL_STICKY_EOF) { goto done; } - chanPtr->flags &= (~(CHANNEL_BLOCKED | CHANNEL_EOF)); + statePtr->flags &= (~(CHANNEL_BLOCKED | CHANNEL_EOF)); bufPtr = AllocChannelBuffer(len); for (i = 0; i < len; i++) { bufPtr->buf[i] = str[i]; } bufPtr->nextAdded += len; - if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) { + if (statePtr->inQueueHead == (ChannelBuffer *) NULL) { bufPtr->nextPtr = (ChannelBuffer *) NULL; - chanPtr->inQueueHead = bufPtr; - chanPtr->inQueueTail = bufPtr; + statePtr->inQueueHead = bufPtr; + statePtr->inQueueTail = bufPtr; } else if (atEnd) { bufPtr->nextPtr = (ChannelBuffer *) NULL; - chanPtr->inQueueTail->nextPtr = bufPtr; - chanPtr->inQueueTail = bufPtr; + statePtr->inQueueTail->nextPtr = bufPtr; + statePtr->inQueueTail = bufPtr; } else { - bufPtr->nextPtr = chanPtr->inQueueHead; - chanPtr->inQueueHead = bufPtr; + bufPtr->nextPtr = statePtr->inQueueHead; + statePtr->inQueueHead = bufPtr; } done: /* * Update the notifier state so we don't block while there is still @@ -4770,24 +4564,30 @@ int Tcl_Flush(chan) Tcl_Channel chan; /* The Channel to flush. */ { int result; /* Of calling FlushChannel. */ - Channel *chanPtr; /* The actual channel. */ + Channel *chanPtr = (Channel *) chan; /* The actual channel. */ + ChannelState *statePtr = chanPtr->state; /* State of actual channel. */ - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_WRITABLE) != 0) { + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + + if (CheckChannelErrors(statePtr, TCL_WRITABLE) != 0) { return -1; } /* * Force current output buffer to be output also. */ - - if ((chanPtr->curOutPtr != NULL) - && (chanPtr->curOutPtr->nextAdded > 0)) { - chanPtr->flags |= BUFFER_READY; + + if ((statePtr->curOutPtr != NULL) + && (statePtr->curOutPtr->nextAdded > 0)) { + statePtr->flags |= BUFFER_READY; } result = FlushChannel(NULL, chanPtr, 0); if (result != 0) { return TCL_ERROR; @@ -4813,35 +4613,35 @@ * *---------------------------------------------------------------------- */ static void -DiscardInputQueued(chanPtr, discardSavedBuffers) - Channel *chanPtr; /* Channel on which to discard +DiscardInputQueued(statePtr, discardSavedBuffers) + ChannelState *statePtr; /* Channel on which to discard * the queued input. */ int discardSavedBuffers; /* If non-zero, discard all buffers including * last one. */ { ChannelBuffer *bufPtr, *nxtPtr; /* Loop variables. */ - bufPtr = chanPtr->inQueueHead; - chanPtr->inQueueHead = (ChannelBuffer *) NULL; - chanPtr->inQueueTail = (ChannelBuffer *) NULL; + bufPtr = statePtr->inQueueHead; + statePtr->inQueueHead = (ChannelBuffer *) NULL; + statePtr->inQueueTail = (ChannelBuffer *) NULL; for (; bufPtr != (ChannelBuffer *) NULL; bufPtr = nxtPtr) { nxtPtr = bufPtr->nextPtr; - RecycleBuffer(chanPtr, bufPtr, discardSavedBuffers); + RecycleBuffer(statePtr, bufPtr, discardSavedBuffers); } /* * If discardSavedBuffers is nonzero, must also discard any previously * saved buffer in the saveInBufPtr field. */ if (discardSavedBuffers) { - if (chanPtr->saveInBufPtr != (ChannelBuffer *) NULL) { - ckfree((char *) chanPtr->saveInBufPtr); - chanPtr->saveInBufPtr = (ChannelBuffer *) NULL; + if (statePtr->saveInBufPtr != (ChannelBuffer *) NULL) { + ckfree((char *) statePtr->saveInBufPtr); + statePtr->saveInBufPtr = (ChannelBuffer *) NULL; } } } /* @@ -4867,58 +4667,113 @@ { int toRead; /* How much to read? */ int result; /* Of calling driver. */ int nread; /* How much was read from channel? */ ChannelBuffer *bufPtr; /* New buffer to add to input queue. */ + ChannelState *statePtr = chanPtr->state; /* state info for channel */ /* * Prevent reading from a dead channel -- a channel that has been closed * but not yet deallocated, which can happen if the exit handler for * channel cleanup has run but the channel is still registered in some * interpreter. */ - if (CheckForDeadChannel(NULL, chanPtr)) { + if (CheckForDeadChannel(NULL, statePtr)) { return EINVAL; } + /* + * First check for more buffers in the pushback area of the + * topmost channel in the stack and use them. They can be the + * result of a transformation which went away without reading all + * the information placed in the area when it was stacked. + * + * Two possibilities for the state: No buffers in it, or a single + * empty buffer. In the latter case we can recycle it now. + */ + + if (chanPtr->inQueueHead != (ChannelBuffer*) NULL) { + if (statePtr->inQueueHead != (ChannelBuffer*) NULL) { + RecycleBuffer(statePtr, statePtr->inQueueHead, 0); + statePtr->inQueueHead = (ChannelBuffer*) NULL; + } + + statePtr->inQueueHead = chanPtr->inQueueHead; + statePtr->inQueueTail = chanPtr->inQueueTail; + chanPtr->inQueueHead = (ChannelBuffer*) NULL; + chanPtr->inQueueTail = (ChannelBuffer*) NULL; + return 0; + } + + /* + * Nothing in the pushback area, fall back to the usual handling + * (driver, etc.) + */ + /* * See if we can fill an existing buffer. If we can, read only * as much as will fit in it. Otherwise allocate a new buffer, * add it to the input queue and attempt to fill it to the max. */ - bufPtr = chanPtr->inQueueTail; + bufPtr = statePtr->inQueueTail; if ((bufPtr != NULL) && (bufPtr->nextAdded < bufPtr->bufLength)) { - toRead = bufPtr->bufLength - bufPtr->nextAdded; + toRead = bufPtr->bufLength - bufPtr->nextAdded; } else { - bufPtr = chanPtr->saveInBufPtr; - chanPtr->saveInBufPtr = NULL; + bufPtr = statePtr->saveInBufPtr; + statePtr->saveInBufPtr = NULL; + + /* + * Check the actual buffersize against the requested + * buffersize. Buffers which are smaller than requested aare + * squashed. This is done to honor dynamic changes of the + * buffersize made by the user. + */ + + if ((bufPtr != NULL) && ((bufPtr->bufLength - BUFFER_PADDING) < statePtr->bufSize)) { + ckfree((char *) bufPtr); + bufPtr = NULL; + } + if (bufPtr == NULL) { - bufPtr = AllocChannelBuffer(chanPtr->bufSize); - } - bufPtr->nextPtr = (ChannelBuffer *) NULL; - - toRead = chanPtr->bufSize; - if (chanPtr->inQueueTail == NULL) { - chanPtr->inQueueHead = bufPtr; - } else { - chanPtr->inQueueTail->nextPtr = bufPtr; - } - chanPtr->inQueueTail = bufPtr; - } - + bufPtr = AllocChannelBuffer(statePtr->bufSize); + } + bufPtr->nextPtr = (ChannelBuffer *) NULL; + + /* SF #427196: Use the actual size of the buffer to determine + * the number of bytes to read from the channel and not the + * size for new buffers. They can be different if the + * buffersize was changed between reads. + * + * Note: This affects performance negatively if the buffersize + * was extended but this small buffer is reused for all + * subsequent reads. The system never uses buffers with the + * requested bigger size in that case. An adjunct patch could + * try and delete all unused buffers it encounters and which + * are smaller than the formally requested buffersize. + */ + + toRead = bufPtr->bufLength - bufPtr->nextAdded; + if (statePtr->inQueueTail == NULL) { + statePtr->inQueueHead = bufPtr; + } else { + statePtr->inQueueTail->nextPtr = bufPtr; + } + statePtr->inQueueTail = bufPtr; + } + /* * If EOF is set, we should avoid calling the driver because on some * platforms it is impossible to read from a device after EOF. */ - if (chanPtr->flags & CHANNEL_EOF) { + if (statePtr->flags & CHANNEL_EOF) { return 0; } - nread = (*chanPtr->typePtr->inputProc)(chanPtr->instanceData, + nread = (chanPtr->typePtr->inputProc)(chanPtr->instanceData, bufPtr->buf + bufPtr->nextAdded, toRead, &result); if (nread > 0) { bufPtr->nextAdded += nread; @@ -4928,18 +4783,18 @@ * will block in the low level reading code even though the * channel is set into nonblocking mode. */ if (nread < toRead) { - chanPtr->flags |= CHANNEL_BLOCKED; + statePtr->flags |= CHANNEL_BLOCKED; } } else if (nread == 0) { - chanPtr->flags |= CHANNEL_EOF; - chanPtr->inputEncodingFlags |= TCL_ENCODING_END; + statePtr->flags |= CHANNEL_EOF; + statePtr->inputEncodingFlags |= TCL_ENCODING_END; } else if (nread < 0) { if ((result == EWOULDBLOCK) || (result == EAGAIN)) { - chanPtr->flags |= CHANNEL_BLOCKED; + statePtr->flags |= CHANNEL_BLOCKED; result = EAGAIN; } Tcl_SetErrno(result); return result; } @@ -4968,21 +4823,21 @@ Tcl_Seek(chan, offset, mode) Tcl_Channel chan; /* The channel on which to seek. */ int offset; /* Offset to seek to. */ int mode; /* Relative to which location to seek? */ { - Channel *chanPtr; /* The real IO channel. */ + Channel *chanPtr = (Channel *) chan; /* The real IO channel. */ + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; int inputBuffered, outputBuffered; int result; /* Of device driver operations. */ int curPos; /* Position on the device. */ int wasAsync; /* Was the channel nonblocking before the * seek operation? If so, must restore to * nonblocking mode after the seek. */ - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_WRITABLE | TCL_READABLE) != 0) { + if (CheckChannelErrors(statePtr, TCL_WRITABLE | TCL_READABLE) != 0) { return -1; } /* * Disallow seek on dead channels -- channels that have been closed but @@ -4989,11 +4844,17 @@ * not yet been deallocated. Such channels can be found if the exit * handler for channel cleanup has run but the channel is still * registered in an interpreter. */ - if (CheckForDeadChannel(NULL,chanPtr)) return -1; + if (CheckForDeadChannel(NULL, statePtr)) return -1; + + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; /* * Disallow seek on channels whose type does not have a seek procedure * defined. This means that the channel does not support seeking. */ @@ -5006,25 +4867,36 @@ /* * Compute how much input and output is buffered. If both input and * output is buffered, cannot compute the current position. */ - for (bufPtr = chanPtr->inQueueHead, inputBuffered = 0; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { + for (bufPtr = statePtr->inQueueHead, inputBuffered = 0; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + inputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); + } + + /* + * Don't forget the bytes in the topmost pushback area. + */ + + for (bufPtr = statePtr->topChanPtr->inQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { inputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); } - for (bufPtr = chanPtr->outQueueHead, outputBuffered = 0; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { + + for (bufPtr = statePtr->outQueueHead, outputBuffered = 0; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { outputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); } - if ((chanPtr->curOutPtr != (ChannelBuffer *) NULL) && - (chanPtr->curOutPtr->nextAdded > chanPtr->curOutPtr->nextRemoved)) { - chanPtr->flags |= BUFFER_READY; + if ((statePtr->curOutPtr != (ChannelBuffer *) NULL) && + (statePtr->curOutPtr->nextAdded > statePtr->curOutPtr->nextRemoved)) { + statePtr->flags |= BUFFER_READY; outputBuffered += - (chanPtr->curOutPtr->nextAdded - chanPtr->curOutPtr->nextRemoved); + (statePtr->curOutPtr->nextAdded - statePtr->curOutPtr->nextRemoved); } if ((inputBuffered != 0) && (outputBuffered != 0)) { Tcl_SetErrno(EFAULT); return -1; @@ -5042,18 +4914,18 @@ /* * Discard any queued input - this input should not be read after * the seek. */ - DiscardInputQueued(chanPtr, 0); + DiscardInputQueued(statePtr, 0); /* * Reset EOF and BLOCKED flags. We invalidate them by moving the * access point. Also clear CR related flags. */ - chanPtr->flags &= + statePtr->flags &= (~(CHANNEL_EOF | CHANNEL_STICKY_EOF | CHANNEL_BLOCKED | INPUT_SAW_CR)); /* * If the channel is in asynchronous output mode, switch it back * to synchronous mode and cancel any async flush that may be @@ -5060,24 +4932,19 @@ * scheduled. After the flush, the channel will be put back into * asynchronous output mode. */ wasAsync = 0; - if (chanPtr->flags & CHANNEL_NONBLOCKING) { + if (statePtr->flags & CHANNEL_NONBLOCKING) { wasAsync = 1; - result = 0; - if (chanPtr->typePtr->blockModeProc != NULL) { - result = (chanPtr->typePtr->blockModeProc) (chanPtr->instanceData, - TCL_MODE_BLOCKING); - } - if (result != 0) { - Tcl_SetErrno(result); - return -1; - } - chanPtr->flags &= (~(CHANNEL_NONBLOCKING)); - if (chanPtr->flags & BG_FLUSH_SCHEDULED) { - chanPtr->flags &= (~(BG_FLUSH_SCHEDULED)); + result = StackSetBlockMode(chanPtr, TCL_MODE_BLOCKING); + if (result != 0) { + return -1; + } + statePtr->flags &= (~(CHANNEL_NONBLOCKING)); + if (statePtr->flags & BG_FLUSH_SCHEDULED) { + statePtr->flags &= (~(BG_FLUSH_SCHEDULED)); } } /* * If the flush fails we cannot recover the original position. In @@ -5109,20 +4976,15 @@ * NOTE: Even if there was an async flush active we do not restore * it now because we already flushed all the queued output, above. */ if (wasAsync) { - chanPtr->flags |= CHANNEL_NONBLOCKING; - result = 0; - if (chanPtr->typePtr->blockModeProc != NULL) { - result = (chanPtr->typePtr->blockModeProc) (chanPtr->instanceData, - TCL_MODE_NONBLOCKING); - } - if (result != 0) { - Tcl_SetErrno(result); - return -1; - } + statePtr->flags |= CHANNEL_NONBLOCKING; + result = StackSetBlockMode(chanPtr, TCL_MODE_NONBLOCKING); + if (result != 0) { + return -1; + } } return curPos; } @@ -5147,18 +5009,18 @@ int Tcl_Tell(chan) Tcl_Channel chan; /* The channel to return pos for. */ { - Channel *chanPtr; /* The actual channel to tell on. */ + Channel *chanPtr = (Channel *) chan; /* The real IO channel. */ + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *bufPtr; int inputBuffered, outputBuffered; int result; /* Of calling device driver. */ int curPos; /* Position on device. */ - chanPtr = (Channel *) chan; - if (CheckChannelErrors(chanPtr, TCL_WRITABLE | TCL_READABLE) != 0) { + if (CheckChannelErrors(statePtr, TCL_WRITABLE | TCL_READABLE) != 0) { return -1; } /* * Disallow tell on dead channels -- channels that have been closed but @@ -5165,14 +5027,20 @@ * not yet been deallocated. Such channels can be found if the exit * handler for channel cleanup has run but the channel is still * registered in an interpreter. */ - if (CheckForDeadChannel(NULL,chanPtr)) { + if (CheckForDeadChannel(NULL, statePtr)) { return -1; } + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + /* * Disallow tell on channels whose type does not have a seek procedure * defined. This means that the channel does not support seeking. */ @@ -5184,25 +5052,25 @@ /* * Compute how much input and output is buffered. If both input and * output is buffered, cannot compute the current position. */ - for (bufPtr = chanPtr->inQueueHead, inputBuffered = 0; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { + for (bufPtr = statePtr->inQueueHead, inputBuffered = 0; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { inputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); } - for (bufPtr = chanPtr->outQueueHead, outputBuffered = 0; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { + for (bufPtr = statePtr->outQueueHead, outputBuffered = 0; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { outputBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); } - if ((chanPtr->curOutPtr != (ChannelBuffer *) NULL) && - (chanPtr->curOutPtr->nextAdded > chanPtr->curOutPtr->nextRemoved)) { - chanPtr->flags |= BUFFER_READY; + if ((statePtr->curOutPtr != (ChannelBuffer *) NULL) && + (statePtr->curOutPtr->nextAdded > statePtr->curOutPtr->nextRemoved)) { + statePtr->flags |= BUFFER_READY; outputBuffered += - (chanPtr->curOutPtr->nextAdded - chanPtr->curOutPtr->nextRemoved); + (statePtr->curOutPtr->nextAdded - statePtr->curOutPtr->nextRemoved); } if ((inputBuffered != 0) && (outputBuffered != 0)) { Tcl_SetErrno(EFAULT); return -1; @@ -5242,39 +5110,58 @@ * *--------------------------------------------------------------------------- */ static int -CheckChannelErrors(chanPtr, direction) - Channel *chanPtr; /* Channel to check. */ - int direction; /* Test if channel supports desired operation: - * TCL_READABLE, TCL_WRITABLE. */ +CheckChannelErrors(statePtr, flags) + ChannelState *statePtr; /* Channel to check. */ + int flags; /* Test if channel supports desired operation: + * TCL_READABLE, TCL_WRITABLE. Also indicates + * Raw read or write for special close + * processing*/ { + int direction = flags & (TCL_READABLE|TCL_WRITABLE); + /* * Check for unreported error. */ - if (chanPtr->unreportedError != 0) { - Tcl_SetErrno(chanPtr->unreportedError); - chanPtr->unreportedError = 0; + if (statePtr->unreportedError != 0) { + Tcl_SetErrno(statePtr->unreportedError); + statePtr->unreportedError = 0; + return -1; + } + + /* + * Only the raw read and write operations are allowed during close + * in order to drain data from stacked channels. + */ + + if ((statePtr->flags & CHANNEL_CLOSED) && + ((flags & CHANNEL_RAW_MODE) == 0)) { + Tcl_SetErrno(EACCES); return -1; } /* * Fail if the channel is not opened for desired operation. */ - if ((chanPtr->flags & direction) == 0) { + if ((statePtr->flags & direction) == 0) { Tcl_SetErrno(EACCES); return -1; } /* * Fail if the channel is in the middle of a background copy. + * + * Don't do this tests for raw channels here or else the chaining in the + * transformation drivers will fail with 'file busy' error instead of + * retrieving and transforming the data to copy. */ - if (chanPtr->csPtr != NULL) { + if ((statePtr->csPtr != NULL) && ((flags & CHANNEL_RAW_MODE) == 0)) { Tcl_SetErrno(EBUSY); return -1; } if (direction == TCL_READABLE) { @@ -5283,14 +5170,14 @@ * (sticky EOF is set if we have seen the input eofChar, to prevent * reading beyond the eofChar). Also, always clear the BLOCKED bit. * We want to discover these conditions anew in each operation. */ - if ((chanPtr->flags & CHANNEL_STICKY_EOF) == 0) { - chanPtr->flags &= ~CHANNEL_EOF; + if ((statePtr->flags & CHANNEL_STICKY_EOF) == 0) { + statePtr->flags &= ~CHANNEL_EOF; } - chanPtr->flags &= ~(CHANNEL_BLOCKED | CHANNEL_NEED_MORE_DATA); + statePtr->flags &= ~(CHANNEL_BLOCKED | CHANNEL_NEED_MORE_DATA); } return 0; } @@ -5312,16 +5199,16 @@ int Tcl_Eof(chan) Tcl_Channel chan; /* Does this channel have EOF? */ { - Channel *chanPtr; /* The real channel structure. */ + ChannelState *statePtr = ((Channel *) chan)->state; + /* State of real channel structure. */ - chanPtr = (Channel *) chan; - return ((chanPtr->flags & CHANNEL_STICKY_EOF) || - ((chanPtr->flags & CHANNEL_EOF) && (Tcl_InputBuffered(chan) == 0))) - ? 1 : 0; + return ((statePtr->flags & CHANNEL_STICKY_EOF) || + ((statePtr->flags & CHANNEL_EOF) && + (Tcl_InputBuffered(chan) == 0))) ? 1 : 0; } /* *---------------------------------------------------------------------- * @@ -5340,23 +5227,23 @@ int Tcl_InputBlocked(chan) Tcl_Channel chan; /* Is this channel blocked? */ { - Channel *chanPtr; /* The real channel structure. */ + ChannelState *statePtr = ((Channel *) chan)->state; + /* State of real channel structure. */ - chanPtr = (Channel *) chan; - return (chanPtr->flags & CHANNEL_BLOCKED) ? 1 : 0; + return (statePtr->flags & CHANNEL_BLOCKED) ? 1 : 0; } /* *---------------------------------------------------------------------- * * Tcl_InputBuffered -- * * Returns the number of bytes of input currently buffered in the - * internal buffer of a channel. + * common internal buffer of a channel. * * Results: * The number of input bytes buffered, or zero if the channel is not * open for reading. * @@ -5368,20 +5255,67 @@ int Tcl_InputBuffered(chan) Tcl_Channel chan; /* The channel to query. */ { - Channel *chanPtr; + ChannelState *statePtr = ((Channel *) chan)->state; + /* State of real channel structure. */ + ChannelBuffer *bufPtr; int bytesBuffered; + + for (bytesBuffered = 0, bufPtr = statePtr->inQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + bytesBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); + } + + /* + * Don't forget the bytes in the topmost pushback area. + */ + + for (bufPtr = statePtr->topChanPtr->inQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + bytesBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); + } + + return bytesBuffered; +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelBuffered -- + * + * Returns the number of bytes of input currently buffered in the + * internal buffer (push back area) of a channel. + * + * Results: + * The number of input bytes buffered, or zero if the channel is not + * open for reading. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +int +Tcl_ChannelBuffered(chan) + Tcl_Channel chan; /* The channel to query. */ +{ + Channel *chanPtr = (Channel *) chan; + /* real channel structure. */ ChannelBuffer *bufPtr; + int bytesBuffered; - chanPtr = (Channel *) chan; for (bytesBuffered = 0, bufPtr = chanPtr->inQueueHead; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { bytesBuffered += (bufPtr->nextAdded - bufPtr->nextRemoved); } + return bytesBuffered; } /* *---------------------------------------------------------------------- @@ -5404,11 +5338,11 @@ Tcl_SetChannelBufferSize(chan, sz) Tcl_Channel chan; /* The channel whose buffer size * to set. */ int sz; /* The size to set. */ { - Channel *chanPtr; + ChannelState *statePtr; /* State of real channel structure. */ /* * If the buffer size is smaller than 10 bytes or larger than one MByte, * do not accept the requested size and leave the current buffer size. */ @@ -5418,20 +5352,20 @@ } if (sz > (1024 * 1024)) { return; } - chanPtr = (Channel *) chan; - chanPtr->bufSize = sz; - - if (chanPtr->outputStage != NULL) { - ckfree((char *) chanPtr->outputStage); - chanPtr->outputStage = NULL; - } - if ((chanPtr->encoding != NULL) && (chanPtr->flags & TCL_WRITABLE)) { - chanPtr->outputStage = (char *) - ckalloc((unsigned) (chanPtr->bufSize + 2)); + statePtr = ((Channel *) chan)->state; + statePtr->bufSize = sz; + + if (statePtr->outputStage != NULL) { + ckfree((char *) statePtr->outputStage); + statePtr->outputStage = NULL; + } + if ((statePtr->encoding != NULL) && (statePtr->flags & TCL_WRITABLE)) { + statePtr->outputStage = (char *) + ckalloc((unsigned) (statePtr->bufSize + 2)); } } /* *---------------------------------------------------------------------- @@ -5452,14 +5386,14 @@ int Tcl_GetChannelBufferSize(chan) Tcl_Channel chan; /* The channel for which to find the * buffer size. */ { - Channel *chanPtr; + ChannelState *statePtr = ((Channel *) chan)->state; + /* State of real channel structure. */ - chanPtr = (Channel *) chan; - return chanPtr->bufSize; + return statePtr->bufSize; } /* *---------------------------------------------------------------------- * @@ -5498,11 +5432,11 @@ * only. */ { if (interp) { CONST char *genericopt = - "blocking buffering buffersize encoding eofchar translation"; + "blocking buffering buffersize encoding eofchar translation"; char **argv; int argc, i; Tcl_DString ds; Tcl_DStringInit(&ds); @@ -5510,16 +5444,16 @@ if (optionList && (*optionList)) { Tcl_DStringAppend(&ds, " ", 1); Tcl_DStringAppend(&ds, optionList, -1); } if (Tcl_SplitList(interp, Tcl_DStringValue(&ds), - &argc, &argv) != TCL_OK) { + &argc, &argv) != TCL_OK) { panic("malformed option list in channel driver"); } Tcl_ResetResult(interp); Tcl_AppendResult(interp, "bad option \"", optionName, - "\": should be one of ", (char *) NULL); + "\": should be one of ", (char *) NULL); argc--; for (i = 0; i < argc; i++) { Tcl_AppendResult(interp, "-", argv[i], ", ", (char *) NULL); } Tcl_AppendResult(interp, "or -", argv[i], (char *) NULL); @@ -5558,34 +5492,43 @@ Tcl_DString *dsPtr; /* Where to store value(s). */ { size_t len; /* Length of optionName string. */ char optionVal[128]; /* Buffer for sprintf. */ Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ int flags; - /* - * If we are in the middle of a background copy, use the saved flags. - */ - - if (chanPtr->csPtr) { - if (chanPtr == chanPtr->csPtr->readPtr) { - flags = chanPtr->csPtr->readFlags; - } else { - flags = chanPtr->csPtr->writeFlags; - } - } else { - flags = chanPtr->flags; - } - /* * Disallow options on dead channels -- channels that have been closed but * not yet been deallocated. Such channels can be found if the exit * handler for channel cleanup has run but the channel is still * registered in an interpreter. */ - if (CheckForDeadChannel(interp,chanPtr)) return TCL_ERROR; + if (CheckForDeadChannel(interp, statePtr)) { + return TCL_ERROR; + } + + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + + /* + * If we are in the middle of a background copy, use the saved flags. + */ + + if (statePtr->csPtr) { + if (chanPtr == statePtr->csPtr->readPtr) { + flags = statePtr->csPtr->readFlags; + } else { + flags = statePtr->csPtr->writeFlags; + } + } else { + flags = statePtr->flags; + } /* * If the optionName is NULL it means that we want a list of all * options and values. */ @@ -5626,11 +5569,11 @@ if ((len == 0) || ((len > 7) && (optionName[1] == 'b') && (strncmp(optionName, "-buffersize", len) == 0))) { if (len == 0) { Tcl_DStringAppendElement(dsPtr, "-buffersize"); } - TclFormatInt(optionVal, chanPtr->bufSize); + TclFormatInt(optionVal, statePtr->bufSize); Tcl_DStringAppendElement(dsPtr, optionVal); if (len > 0) { return TCL_OK; } } @@ -5638,15 +5581,15 @@ ((len > 2) && (optionName[1] == 'e') && (strncmp(optionName, "-encoding", len) == 0))) { if (len == 0) { Tcl_DStringAppendElement(dsPtr, "-encoding"); } - if (chanPtr->encoding == NULL) { + if (statePtr->encoding == NULL) { Tcl_DStringAppendElement(dsPtr, "binary"); } else { Tcl_DStringAppendElement(dsPtr, - Tcl_GetEncodingName(chanPtr->encoding)); + Tcl_GetEncodingName(statePtr->encoding)); } if (len > 0) { return TCL_OK; } } @@ -5659,26 +5602,26 @@ if (((flags & (TCL_READABLE|TCL_WRITABLE)) == (TCL_READABLE|TCL_WRITABLE)) && (len == 0)) { Tcl_DStringStartSublist(dsPtr); } if (flags & TCL_READABLE) { - if (chanPtr->inEofChar == 0) { + if (statePtr->inEofChar == 0) { Tcl_DStringAppendElement(dsPtr, ""); } else { char buf[4]; - sprintf(buf, "%c", chanPtr->inEofChar); + sprintf(buf, "%c", statePtr->inEofChar); Tcl_DStringAppendElement(dsPtr, buf); } } if (flags & TCL_WRITABLE) { - if (chanPtr->outEofChar == 0) { + if (statePtr->outEofChar == 0) { Tcl_DStringAppendElement(dsPtr, ""); } else { char buf[4]; - sprintf(buf, "%c", chanPtr->outEofChar); + sprintf(buf, "%c", statePtr->outEofChar); Tcl_DStringAppendElement(dsPtr, buf); } } if (((flags & (TCL_READABLE|TCL_WRITABLE)) == (TCL_READABLE|TCL_WRITABLE)) && (len == 0)) { @@ -5697,26 +5640,26 @@ if (((flags & (TCL_READABLE|TCL_WRITABLE)) == (TCL_READABLE|TCL_WRITABLE)) && (len == 0)) { Tcl_DStringStartSublist(dsPtr); } if (flags & TCL_READABLE) { - if (chanPtr->inputTranslation == TCL_TRANSLATE_AUTO) { + if (statePtr->inputTranslation == TCL_TRANSLATE_AUTO) { Tcl_DStringAppendElement(dsPtr, "auto"); - } else if (chanPtr->inputTranslation == TCL_TRANSLATE_CR) { + } else if (statePtr->inputTranslation == TCL_TRANSLATE_CR) { Tcl_DStringAppendElement(dsPtr, "cr"); - } else if (chanPtr->inputTranslation == TCL_TRANSLATE_CRLF) { + } else if (statePtr->inputTranslation == TCL_TRANSLATE_CRLF) { Tcl_DStringAppendElement(dsPtr, "crlf"); } else { Tcl_DStringAppendElement(dsPtr, "lf"); } } if (flags & TCL_WRITABLE) { - if (chanPtr->outputTranslation == TCL_TRANSLATE_AUTO) { + if (statePtr->outputTranslation == TCL_TRANSLATE_AUTO) { Tcl_DStringAppendElement(dsPtr, "auto"); - } else if (chanPtr->outputTranslation == TCL_TRANSLATE_CR) { + } else if (statePtr->outputTranslation == TCL_TRANSLATE_CR) { Tcl_DStringAppendElement(dsPtr, "cr"); - } else if (chanPtr->outputTranslation == TCL_TRANSLATE_CRLF) { + } else if (statePtr->outputTranslation == TCL_TRANSLATE_CRLF) { Tcl_DStringAppendElement(dsPtr, "crlf"); } else { Tcl_DStringAppendElement(dsPtr, "lf"); } } @@ -5733,11 +5676,11 @@ * let the driver specific handle additional options * and result code and message. */ return (chanPtr->typePtr->getOptionProc) (chanPtr->instanceData, - interp, optionName, dsPtr); + interp, optionName, dsPtr); } else { /* * no driver specific options case. */ @@ -5771,40 +5714,46 @@ Tcl_Channel chan; /* Channel on which to set mode. */ char *optionName; /* Which option to set? */ char *newValue; /* New value for option. */ { int newMode; /* New (numeric) mode to sert. */ - Channel *chanPtr; /* The real IO channel. */ + Channel *chanPtr = (Channel *) chan; /* The real IO channel. */ + ChannelState *statePtr = chanPtr->state; /* state info for channel */ size_t len; /* Length of optionName string. */ int argc; char **argv; - - chanPtr = (Channel *) chan; /* * If the channel is in the middle of a background copy, fail. */ - if (chanPtr->csPtr) { + if (statePtr->csPtr) { if (interp) { Tcl_AppendResult(interp, - "unable to set channel options: background copy in progress", - (char *) NULL); + "unable to set channel options: background copy in progress", + (char *) NULL); } return TCL_ERROR; } - /* * Disallow options on dead channels -- channels that have been closed but * not yet been deallocated. Such channels can be found if the exit * handler for channel cleanup has run but the channel is still * registered in an interpreter. */ - if (CheckForDeadChannel(NULL,chanPtr)) return TCL_ERROR; - + if (CheckForDeadChannel(NULL, statePtr)) { + return TCL_ERROR; + } + + /* + * This operation should occur at the top of a channel stack. + */ + + chanPtr = statePtr->topChanPtr; + len = strlen(optionName); if ((len > 2) && (optionName[1] == 'b') && (strncmp(optionName, "-blocking", len) == 0)) { if (Tcl_GetBoolean(interp, newValue, &newMode) == TCL_ERROR) { @@ -5818,20 +5767,20 @@ return SetBlockMode(interp, chanPtr, newMode); } else if ((len > 7) && (optionName[1] == 'b') && (strncmp(optionName, "-buffering", len) == 0)) { len = strlen(newValue); if ((newValue[0] == 'f') && (strncmp(newValue, "full", len) == 0)) { - chanPtr->flags &= + statePtr->flags &= (~(CHANNEL_UNBUFFERED|CHANNEL_LINEBUFFERED)); } else if ((newValue[0] == 'l') && (strncmp(newValue, "line", len) == 0)) { - chanPtr->flags &= (~(CHANNEL_UNBUFFERED)); - chanPtr->flags |= CHANNEL_LINEBUFFERED; + statePtr->flags &= (~(CHANNEL_UNBUFFERED)); + statePtr->flags |= CHANNEL_LINEBUFFERED; } else if ((newValue[0] == 'n') && (strncmp(newValue, "none", len) == 0)) { - chanPtr->flags &= (~(CHANNEL_LINEBUFFERED)); - chanPtr->flags |= CHANNEL_UNBUFFERED; + statePtr->flags &= (~(CHANNEL_LINEBUFFERED)); + statePtr->flags |= CHANNEL_UNBUFFERED; } else { if (interp) { Tcl_AppendResult(interp, "bad value for -buffering: ", "must be one of full, line, or none", (char *) NULL); @@ -5839,13 +5788,13 @@ } } return TCL_OK; } else if ((len > 7) && (optionName[1] == 'b') && (strncmp(optionName, "-buffersize", len) == 0)) { - chanPtr->bufSize = atoi(newValue); /* INTL: "C", UTF safe. */ - if ((chanPtr->bufSize < 10) || (chanPtr->bufSize > (1024 * 1024))) { - chanPtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE; + statePtr->bufSize = atoi(newValue); /* INTL: "C", UTF safe. */ + if ((statePtr->bufSize < 10) || (statePtr->bufSize > (1024 * 1024))) { + statePtr->bufSize = CHANNELBUFFER_DEFAULT_SIZE; } } else if ((len > 2) && (optionName[1] == 'e') && (strncmp(optionName, "-encoding", len) == 0)) { Tcl_Encoding encoding; @@ -5855,32 +5804,32 @@ encoding = Tcl_GetEncoding(interp, newValue); if (encoding == NULL) { return TCL_ERROR; } } - Tcl_FreeEncoding(chanPtr->encoding); - chanPtr->encoding = encoding; - chanPtr->inputEncodingState = NULL; - chanPtr->inputEncodingFlags = TCL_ENCODING_START; - chanPtr->outputEncodingState = NULL; - chanPtr->outputEncodingFlags = TCL_ENCODING_START; - chanPtr->flags &= ~CHANNEL_NEED_MORE_DATA; + Tcl_FreeEncoding(statePtr->encoding); + statePtr->encoding = encoding; + statePtr->inputEncodingState = NULL; + statePtr->inputEncodingFlags = TCL_ENCODING_START; + statePtr->outputEncodingState = NULL; + statePtr->outputEncodingFlags = TCL_ENCODING_START; + statePtr->flags &= ~CHANNEL_NEED_MORE_DATA; UpdateInterest(chanPtr); } else if ((len > 2) && (optionName[1] == 'e') && (strncmp(optionName, "-eofchar", len) == 0)) { if (Tcl_SplitList(interp, newValue, &argc, &argv) == TCL_ERROR) { return TCL_ERROR; } if (argc == 0) { - chanPtr->inEofChar = 0; - chanPtr->outEofChar = 0; + statePtr->inEofChar = 0; + statePtr->outEofChar = 0; } else if (argc == 1) { - if (chanPtr->flags & TCL_WRITABLE) { - chanPtr->outEofChar = (int) argv[0][0]; + if (statePtr->flags & TCL_WRITABLE) { + statePtr->outEofChar = (int) argv[0][0]; } - if (chanPtr->flags & TCL_READABLE) { - chanPtr->inEofChar = (int) argv[0][0]; + if (statePtr->flags & TCL_READABLE) { + statePtr->inEofChar = (int) argv[0][0]; } } else if (argc != 2) { if (interp) { Tcl_AppendResult(interp, "bad value for -eofchar: should be a list of one or", @@ -5887,15 +5836,15 @@ " two elements", (char *) NULL); } ckfree((char *) argv); return TCL_ERROR; } else { - if (chanPtr->flags & TCL_READABLE) { - chanPtr->inEofChar = (int) argv[0][0]; + if (statePtr->flags & TCL_READABLE) { + statePtr->inEofChar = (int) argv[0][0]; } - if (chanPtr->flags & TCL_WRITABLE) { - chanPtr->outEofChar = (int) argv[1][0]; + if (statePtr->flags & TCL_WRITABLE) { + statePtr->outEofChar = (int) argv[1][0]; } } if (argv != (char **) NULL) { ckfree((char *) argv); } @@ -5907,15 +5856,15 @@ if (Tcl_SplitList(interp, newValue, &argc, &argv) == TCL_ERROR) { return TCL_ERROR; } if (argc == 1) { - readMode = (chanPtr->flags & TCL_READABLE) ? argv[0] : NULL; - writeMode = (chanPtr->flags & TCL_WRITABLE) ? argv[0] : NULL; + readMode = (statePtr->flags & TCL_READABLE) ? argv[0] : NULL; + writeMode = (statePtr->flags & TCL_WRITABLE) ? argv[0] : NULL; } else if (argc == 2) { - readMode = (chanPtr->flags & TCL_READABLE) ? argv[0] : NULL; - writeMode = (chanPtr->flags & TCL_WRITABLE) ? argv[1] : NULL; + readMode = (statePtr->flags & TCL_READABLE) ? argv[0] : NULL; + writeMode = (statePtr->flags & TCL_WRITABLE) ? argv[1] : NULL; } else { if (interp) { Tcl_AppendResult(interp, "bad value for -translation: must be a one or two", " element list", (char *) NULL); @@ -5924,18 +5873,18 @@ return TCL_ERROR; } if (readMode) { if (*readMode == '\0') { - newMode = chanPtr->inputTranslation; + newMode = statePtr->inputTranslation; } else if (strcmp(readMode, "auto") == 0) { newMode = TCL_TRANSLATE_AUTO; } else if (strcmp(readMode, "binary") == 0) { newMode = TCL_TRANSLATE_LF; - chanPtr->inEofChar = 0; - Tcl_FreeEncoding(chanPtr->encoding); - chanPtr->encoding = NULL; + statePtr->inEofChar = 0; + Tcl_FreeEncoding(statePtr->encoding); + statePtr->encoding = NULL; } else if (strcmp(readMode, "lf") == 0) { newMode = TCL_TRANSLATE_LF; } else if (strcmp(readMode, "cr") == 0) { newMode = TCL_TRANSLATE_CR; } else if (strcmp(readMode, "crlf") == 0) { @@ -5957,14 +5906,14 @@ * Reset the EOL flags since we need to look at any buffered * data to see if the new translation mode allows us to * complete the line. */ - if (newMode != chanPtr->inputTranslation) { - chanPtr->inputTranslation = (Tcl_EolTranslation) newMode; - chanPtr->flags &= ~(INPUT_SAW_CR); - chanPtr->flags &= ~(CHANNEL_NEED_MORE_DATA); + if (newMode != statePtr->inputTranslation) { + statePtr->inputTranslation = (Tcl_EolTranslation) newMode; + statePtr->flags &= ~(INPUT_SAW_CR); + statePtr->flags &= ~(CHANNEL_NEED_MORE_DATA); UpdateInterest(chanPtr); } } if (writeMode) { if (*writeMode == '\0') { @@ -5975,28 +5924,28 @@ * in CRLF mode if they are being set into AUTO mode. * A better solution for achieving this effect will be * coded later. */ - if (strcmp(chanPtr->typePtr->typeName, "tcp") == 0) { - chanPtr->outputTranslation = TCL_TRANSLATE_CRLF; + if (strcmp(Tcl_ChannelName(chanPtr->typePtr), "tcp") == 0) { + statePtr->outputTranslation = TCL_TRANSLATE_CRLF; } else { - chanPtr->outputTranslation = TCL_PLATFORM_TRANSLATION; + statePtr->outputTranslation = TCL_PLATFORM_TRANSLATION; } } else if (strcmp(writeMode, "binary") == 0) { - chanPtr->outEofChar = 0; - chanPtr->outputTranslation = TCL_TRANSLATE_LF; - Tcl_FreeEncoding(chanPtr->encoding); - chanPtr->encoding = NULL; + statePtr->outEofChar = 0; + statePtr->outputTranslation = TCL_TRANSLATE_LF; + Tcl_FreeEncoding(statePtr->encoding); + statePtr->encoding = NULL; } else if (strcmp(writeMode, "lf") == 0) { - chanPtr->outputTranslation = TCL_TRANSLATE_LF; + statePtr->outputTranslation = TCL_TRANSLATE_LF; } else if (strcmp(writeMode, "cr") == 0) { - chanPtr->outputTranslation = TCL_TRANSLATE_CR; + statePtr->outputTranslation = TCL_TRANSLATE_CR; } else if (strcmp(writeMode, "crlf") == 0) { - chanPtr->outputTranslation = TCL_TRANSLATE_CRLF; + statePtr->outputTranslation = TCL_TRANSLATE_CRLF; } else if (strcmp(writeMode, "platform") == 0) { - chanPtr->outputTranslation = TCL_PLATFORM_TRANSLATION; + statePtr->outputTranslation = TCL_PLATFORM_TRANSLATION; } else { if (interp) { Tcl_AppendResult(interp, "bad value for -translation: ", "must be one of auto, binary, cr, lf, crlf,", @@ -6017,35 +5966,35 @@ /* * If bufsize changes, need to get rid of old utility buffer. */ - if (chanPtr->saveInBufPtr != NULL) { - RecycleBuffer(chanPtr, chanPtr->saveInBufPtr, 1); - chanPtr->saveInBufPtr = NULL; - } - if (chanPtr->inQueueHead != NULL) { - if ((chanPtr->inQueueHead->nextPtr == NULL) - && (chanPtr->inQueueHead->nextAdded == - chanPtr->inQueueHead->nextRemoved)) { - RecycleBuffer(chanPtr, chanPtr->inQueueHead, 1); - chanPtr->inQueueHead = NULL; - chanPtr->inQueueTail = NULL; + if (statePtr->saveInBufPtr != NULL) { + RecycleBuffer(statePtr, statePtr->saveInBufPtr, 1); + statePtr->saveInBufPtr = NULL; + } + if (statePtr->inQueueHead != NULL) { + if ((statePtr->inQueueHead->nextPtr == NULL) + && (statePtr->inQueueHead->nextAdded == + statePtr->inQueueHead->nextRemoved)) { + RecycleBuffer(statePtr, statePtr->inQueueHead, 1); + statePtr->inQueueHead = NULL; + statePtr->inQueueTail = NULL; } } /* * If encoding or bufsize changes, need to update output staging buffer. */ - if (chanPtr->outputStage != NULL) { - ckfree((char *) chanPtr->outputStage); - chanPtr->outputStage = NULL; + if (statePtr->outputStage != NULL) { + ckfree((char *) statePtr->outputStage); + statePtr->outputStage = NULL; } - if ((chanPtr->encoding != NULL) && (chanPtr->flags & TCL_WRITABLE)) { - chanPtr->outputStage = (char *) - ckalloc((unsigned) (chanPtr->bufSize + 2)); + if ((statePtr->encoding != NULL) && (statePtr->flags & TCL_WRITABLE)) { + statePtr->outputStage = (char *) + ckalloc((unsigned) (statePtr->bufSize + 2)); } return TCL_OK; } /* @@ -6071,31 +6020,32 @@ static void CleanupChannelHandlers(interp, chanPtr) Tcl_Interp *interp; Channel *chanPtr; { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ EventScriptRecord *sPtr, *prevPtr, *nextPtr; /* * Remove fileevent records on this channel that refer to the * given interpreter. */ - for (sPtr = chanPtr->scriptRecordPtr, + for (sPtr = statePtr->scriptRecordPtr, prevPtr = (EventScriptRecord *) NULL; - sPtr != (EventScriptRecord *) NULL; - sPtr = nextPtr) { + sPtr != (EventScriptRecord *) NULL; + sPtr = nextPtr) { nextPtr = sPtr->nextPtr; if (sPtr->interp == interp) { if (prevPtr == (EventScriptRecord *) NULL) { - chanPtr->scriptRecordPtr = nextPtr; + statePtr->scriptRecordPtr = nextPtr; } else { prevPtr->nextPtr = nextPtr; } Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, - ChannelEventScriptInvoker, (ClientData) sPtr); + TclChannelEventScriptInvoker, (ClientData) sPtr); Tcl_DecrRefCount(sPtr->scriptPtr); ckfree((char *) sPtr); } else { prevPtr = sPtr; @@ -6128,85 +6078,124 @@ int mask; /* OR'ed combination of TCL_READABLE, * TCL_WRITABLE, or TCL_EXCEPTION: indicates * which events were detected. */ { Channel *chanPtr = (Channel *) channel; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelHandler *chPtr; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); NextChannelHandler nh; - - /* Walk all channels in a stack ! and notify them in order. - */ - - while (chanPtr != (Channel *) NULL) { - /* - * Preserve the channel struct in case the script closes it. - */ - - Tcl_Preserve((ClientData) channel); - - /* - * If we are flushing in the background, be sure to call FlushChannel - * for writable events. Note that we have to discard the writable - * event so we don't call any write handlers before the flush is - * complete. - */ - - if ((chanPtr->flags & BG_FLUSH_SCHEDULED) && (mask & TCL_WRITABLE)) { - FlushChannel(NULL, chanPtr, 1); - mask &= ~TCL_WRITABLE; - } - - /* - * Add this invocation to the list of recursive invocations of - * ChannelHandlerEventProc. - */ - - nh.nextHandlerPtr = (ChannelHandler *) NULL; - nh.nestedHandlerPtr = tsdPtr->nestedHandlerPtr; - tsdPtr->nestedHandlerPtr = &nh; - - for (chPtr = chanPtr->chPtr; chPtr != (ChannelHandler *) NULL; ) { - - /* - * If this channel handler is interested in any of the events that - * have occurred on the channel, invoke its procedure. - */ - - if ((chPtr->mask & mask) != 0) { - nh.nextHandlerPtr = chPtr->nextPtr; - (*(chPtr->proc))(chPtr->clientData, mask); - chPtr = nh.nextHandlerPtr; - } else { - chPtr = chPtr->nextPtr; - } - } - - /* - * Update the notifier interest, since it may have changed after - * invoking event handlers. Skip that if the channel was deleted - * in the call to the channel handler. - */ - - if (chanPtr->typePtr != NULL) { - UpdateInterest(chanPtr); - - /* Walk down the stack. - */ - chanPtr = chanPtr-> supercedes; - } else { - /* Stop walking the chain, the whole stack was destroyed! - */ - chanPtr = (Channel*) NULL; - } - - Tcl_Release((ClientData) channel); - - tsdPtr->nestedHandlerPtr = nh.nestedHandlerPtr; - - channel = (Tcl_Channel) chanPtr; - } + Channel* upChanPtr; + Tcl_ChannelType* upTypePtr; + + /* + * In contrast to the other API functions this procedure walks towards + * the top of a stack and not down from it. + * + * The channel calling this procedure is the one who generated the event, + * and thus does not take part in handling it. IOW, its HandlerProc is + * not called, instead we begin with the channel above it. + * + * This behaviour also allows the transformation channels to + * generate their own events and pass them upward. + */ + + while (mask && (chanPtr->upChanPtr != ((Channel*) NULL))) { + upChanPtr = chanPtr->upChanPtr; + upTypePtr = upChanPtr->typePtr; + + if ((Tcl_ChannelVersion(upTypePtr) == TCL_CHANNEL_VERSION_2) && + (Tcl_ChannelHandlerProc(upTypePtr) != + ((Tcl_DriverHandlerProc *) NULL))) { + + Tcl_DriverHandlerProc* handlerProc = + Tcl_ChannelHandlerProc(upTypePtr); + + mask = (*handlerProc) (upChanPtr->instanceData, mask); + } + + /* ELSE: + * Ignore transformations which are unable to handle the event + * coming from below. Assume that they don't change the mask and + * pass it on. + */ + + chanPtr = upChanPtr; + } + + channel = (Tcl_Channel) chanPtr; + + /* + * Here we have either reached the top of the stack or the mask is + * empty. We break out of the procedure if it is the latter. + */ + + if (!mask) { + return; + } + + /* + * We are now above the topmost channel in a stack and have events + * left. Now call the channel handlers as usual. + * + * Preserve the channel struct in case the script closes it. + */ + + Tcl_Preserve((ClientData) channel); + Tcl_Preserve((ClientData) statePtr); + + /* + * If we are flushing in the background, be sure to call FlushChannel + * for writable events. Note that we have to discard the writable + * event so we don't call any write handlers before the flush is + * complete. + */ + + if ((statePtr->flags & BG_FLUSH_SCHEDULED) && (mask & TCL_WRITABLE)) { + FlushChannel(NULL, chanPtr, 1); + mask &= ~TCL_WRITABLE; + } + + /* + * Add this invocation to the list of recursive invocations of + * ChannelHandlerEventProc. + */ + + nh.nextHandlerPtr = (ChannelHandler *) NULL; + nh.nestedHandlerPtr = tsdPtr->nestedHandlerPtr; + tsdPtr->nestedHandlerPtr = &nh; + + for (chPtr = statePtr->chPtr; chPtr != (ChannelHandler *) NULL; ) { + + /* + * If this channel handler is interested in any of the events that + * have occurred on the channel, invoke its procedure. + */ + + if ((chPtr->mask & mask) != 0) { + nh.nextHandlerPtr = chPtr->nextPtr; + (*(chPtr->proc))(chPtr->clientData, mask); + chPtr = nh.nextHandlerPtr; + } else { + chPtr = chPtr->nextPtr; + } + } + + /* + * Update the notifier interest, since it may have changed after + * invoking event handlers. Skip that if the channel was deleted + * in the call to the channel handler. + */ + + if (chanPtr->typePtr != NULL) { + UpdateInterest(chanPtr); + } + + Tcl_Release((ClientData) statePtr); + Tcl_Release((ClientData) channel); + + tsdPtr->nestedHandlerPtr = nh.nestedHandlerPtr; } /* *---------------------------------------------------------------------- * @@ -6226,18 +6215,19 @@ static void UpdateInterest(chanPtr) Channel *chanPtr; /* Channel to update. */ { - int mask = chanPtr->interestMask; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ + int mask = statePtr->interestMask; /* * If there are flushed buffers waiting to be written, then * we need to watch for the channel to become writable. */ - if (chanPtr->flags & BG_FLUSH_SCHEDULED) { + if (statePtr->flags & BG_FLUSH_SCHEDULED) { mask |= TCL_WRITABLE; } /* * If there is data in the input queue, and we aren't waiting for more @@ -6245,17 +6235,17 @@ * notifier. Also, cancel the read interest so we don't get duplicate * events. */ if (mask & TCL_READABLE) { - if (!(chanPtr->flags & CHANNEL_NEED_MORE_DATA) - && (chanPtr->inQueueHead != (ChannelBuffer *) NULL) - && (chanPtr->inQueueHead->nextRemoved < - chanPtr->inQueueHead->nextAdded)) { + if (!(statePtr->flags & CHANNEL_NEED_MORE_DATA) + && (statePtr->inQueueHead != (ChannelBuffer *) NULL) + && (statePtr->inQueueHead->nextRemoved < + statePtr->inQueueHead->nextAdded)) { mask &= ~TCL_READABLE; - if (!chanPtr->timer) { - chanPtr->timer = Tcl_CreateTimerHandler(0, ChannelTimerProc, + if (!statePtr->timer) { + statePtr->timer = Tcl_CreateTimerHandler(0, ChannelTimerProc, (ClientData) chanPtr); } } } (chanPtr->typePtr->watchProc)(chanPtr->instanceData, mask); @@ -6281,27 +6271,28 @@ static void ChannelTimerProc(clientData) ClientData clientData; { Channel *chanPtr = (Channel *) clientData; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ - if (!(chanPtr->flags & CHANNEL_NEED_MORE_DATA) - && (chanPtr->interestMask & TCL_READABLE) - && (chanPtr->inQueueHead != (ChannelBuffer *) NULL) - && (chanPtr->inQueueHead->nextRemoved < - chanPtr->inQueueHead->nextAdded)) { + if (!(statePtr->flags & CHANNEL_NEED_MORE_DATA) + && (statePtr->interestMask & TCL_READABLE) + && (statePtr->inQueueHead != (ChannelBuffer *) NULL) + && (statePtr->inQueueHead->nextRemoved < + statePtr->inQueueHead->nextAdded)) { /* * Restart the timer in case a channel handler reenters the * event loop before UpdateInterest gets called by Tcl_NotifyChannel. */ - chanPtr->timer = Tcl_CreateTimerHandler(0, ChannelTimerProc, - (ClientData) chanPtr); + statePtr->timer = Tcl_CreateTimerHandler(0, ChannelTimerProc, + (ClientData) chanPtr); Tcl_NotifyChannel((Tcl_Channel)chanPtr, TCL_READABLE); - } else { - chanPtr->timer = NULL; + } else { + statePtr->timer = NULL; UpdateInterest(chanPtr); } } /* @@ -6337,23 +6328,22 @@ Tcl_ChannelProc *proc; /* Procedure to call for each * selected event. */ ClientData clientData; /* Arbitrary data to pass to proc. */ { ChannelHandler *chPtr; - Channel *chanPtr; + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ - chanPtr = (Channel *) chan; - /* * Check whether this channel handler is not already registered. If * it is not, create a new record, else reuse existing record (smash * current values). */ - for (chPtr = chanPtr->chPtr; - chPtr != (ChannelHandler *) NULL; - chPtr = chPtr->nextPtr) { + for (chPtr = statePtr->chPtr; + chPtr != (ChannelHandler *) NULL; + chPtr = chPtr->nextPtr) { if ((chPtr->chanPtr == chanPtr) && (chPtr->proc == proc) && (chPtr->clientData == clientData)) { break; } } @@ -6361,12 +6351,12 @@ chPtr = (ChannelHandler *) ckalloc((unsigned) sizeof(ChannelHandler)); chPtr->mask = 0; chPtr->proc = proc; chPtr->clientData = clientData; chPtr->chanPtr = chanPtr; - chPtr->nextPtr = chanPtr->chPtr; - chanPtr->chPtr = chPtr; + chPtr->nextPtr = statePtr->chPtr; + statePtr->chPtr = chPtr; } /* * The remainder of the initialization below is done regardless of * whether or not this is a new record or a modification of an old @@ -6378,18 +6368,18 @@ /* * Recompute the interest mask for the channel - this call may actually * be disabling an existing handler. */ - chanPtr->interestMask = 0; - for (chPtr = chanPtr->chPtr; + statePtr->interestMask = 0; + for (chPtr = statePtr->chPtr; chPtr != (ChannelHandler *) NULL; chPtr = chPtr->nextPtr) { - chanPtr->interestMask |= chPtr->mask; + statePtr->interestMask |= chPtr->mask; } - UpdateInterest(chanPtr); + UpdateInterest(statePtr->topChanPtr); } /* *---------------------------------------------------------------------- * @@ -6416,31 +6406,30 @@ Tcl_ChannelProc *proc; /* The procedure in the callback to delete. */ ClientData clientData; /* The client data in the callback * to delete. */ { - ChannelHandler *chPtr, *prevChPtr; - Channel *chanPtr; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); + ChannelHandler *chPtr, *prevChPtr; + Channel *chanPtr = (Channel *) chan; + ChannelState *statePtr = chanPtr->state; /* state info for channel */ NextChannelHandler *nhPtr; - chanPtr = (Channel *) chan; - /* * Find the entry and the previous one in the list. */ - for (prevChPtr = (ChannelHandler *) NULL, chPtr = chanPtr->chPtr; - chPtr != (ChannelHandler *) NULL; - chPtr = chPtr->nextPtr) { + for (prevChPtr = (ChannelHandler *) NULL, chPtr = statePtr->chPtr; + chPtr != (ChannelHandler *) NULL; + chPtr = chPtr->nextPtr) { if ((chPtr->chanPtr == chanPtr) && (chPtr->clientData == clientData) && (chPtr->proc == proc)) { break; } prevChPtr = chPtr; } - + /* * If not found, return without doing anything. */ if (chPtr == (ChannelHandler *) NULL) { @@ -6451,12 +6440,12 @@ * If ChannelHandlerEventProc is about to process this handler, tell it to * process the next one instead - we are going to delete *this* one. */ for (nhPtr = tsdPtr->nestedHandlerPtr; - nhPtr != (NextChannelHandler *) NULL; - nhPtr = nhPtr->nestedHandlerPtr) { + nhPtr != (NextChannelHandler *) NULL; + nhPtr = nhPtr->nestedHandlerPtr) { if (nhPtr->nextHandlerPtr == chPtr) { nhPtr->nextHandlerPtr = chPtr->nextPtr; } } @@ -6463,11 +6452,11 @@ /* * Splice it out of the list of channel handlers. */ if (prevChPtr == (ChannelHandler *) NULL) { - chanPtr->chPtr = chPtr->nextPtr; + statePtr->chPtr = chPtr->nextPtr; } else { prevChPtr->nextPtr = chPtr->nextPtr; } ckfree((char *) chPtr); @@ -6475,18 +6464,18 @@ * Recompute the interest list for the channel, so that infinite loops * will not result if Tcl_DeleteChannelHandler is called inside an * event. */ - chanPtr->interestMask = 0; - for (chPtr = chanPtr->chPtr; - chPtr != (ChannelHandler *) NULL; - chPtr = chPtr->nextPtr) { - chanPtr->interestMask |= chPtr->mask; + statePtr->interestMask = 0; + for (chPtr = statePtr->chPtr; + chPtr != (ChannelHandler *) NULL; + chPtr = chPtr->nextPtr) { + statePtr->interestMask |= chPtr->mask; } - UpdateInterest(chanPtr); + UpdateInterest(statePtr->topChanPtr); } /* *---------------------------------------------------------------------- * @@ -6511,25 +6500,26 @@ Channel *chanPtr; /* The channel for which to delete the * script record (if any). */ int mask; /* Events in mask must exactly match mask * of script to delete. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ EventScriptRecord *esPtr, *prevEsPtr; - for (esPtr = chanPtr->scriptRecordPtr, + for (esPtr = statePtr->scriptRecordPtr, prevEsPtr = (EventScriptRecord *) NULL; - esPtr != (EventScriptRecord *) NULL; - prevEsPtr = esPtr, esPtr = esPtr->nextPtr) { + esPtr != (EventScriptRecord *) NULL; + prevEsPtr = esPtr, esPtr = esPtr->nextPtr) { if ((esPtr->interp == interp) && (esPtr->mask == mask)) { - if (esPtr == chanPtr->scriptRecordPtr) { - chanPtr->scriptRecordPtr = esPtr->nextPtr; + if (esPtr == statePtr->scriptRecordPtr) { + statePtr->scriptRecordPtr = esPtr->nextPtr; } else { prevEsPtr->nextPtr = esPtr->nextPtr; } Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, - ChannelEventScriptInvoker, (ClientData) esPtr); + TclChannelEventScriptInvoker, (ClientData) esPtr); Tcl_DecrRefCount(esPtr->scriptPtr); ckfree((char *) esPtr); break; @@ -6562,15 +6552,16 @@ * be stored. */ int mask; /* Set of events for which script * will be invoked. */ Tcl_Obj *scriptPtr; /* Pointer to script object. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ EventScriptRecord *esPtr; - for (esPtr = chanPtr->scriptRecordPtr; - esPtr != (EventScriptRecord *) NULL; - esPtr = esPtr->nextPtr) { + for (esPtr = statePtr->scriptRecordPtr; + esPtr != (EventScriptRecord *) NULL; + esPtr = esPtr->nextPtr) { if ((esPtr->interp == interp) && (esPtr->mask == mask)) { Tcl_DecrRefCount(esPtr->scriptPtr); esPtr->scriptPtr = (Tcl_Obj *) NULL; break; } @@ -6577,13 +6568,13 @@ } if (esPtr == (EventScriptRecord *) NULL) { esPtr = (EventScriptRecord *) ckalloc((unsigned) sizeof(EventScriptRecord)); Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask, - ChannelEventScriptInvoker, (ClientData) esPtr); - esPtr->nextPtr = chanPtr->scriptRecordPtr; - chanPtr->scriptRecordPtr = esPtr; + TclChannelEventScriptInvoker, (ClientData) esPtr); + esPtr->nextPtr = statePtr->scriptRecordPtr; + statePtr->scriptRecordPtr = esPtr; } esPtr->chanPtr = chanPtr; esPtr->interp = interp; esPtr->mask = mask; Tcl_IncrRefCount(scriptPtr); @@ -6591,11 +6582,11 @@ } /* *---------------------------------------------------------------------- * - * ChannelEventScriptInvoker -- + * TclChannelEventScriptInvoker -- * * Invokes a script scheduled by "fileevent" for when the channel * becomes ready for IO. This function is invoked by the channel * handler which was created by the Tcl "fileevent" command. * @@ -6606,12 +6597,12 @@ * Whatever the script does. * *---------------------------------------------------------------------- */ -static void -ChannelEventScriptInvoker(clientData, mask) +void +TclChannelEventScriptInvoker(clientData, mask) ClientData clientData; /* The script+interp record. */ int mask; /* Not used. */ { Tcl_Interp *interp; /* Interpreter in which to eval the script. */ Channel *chanPtr; /* The channel for which this handler is @@ -6618,16 +6609,15 @@ * registered. */ EventScriptRecord *esPtr; /* The event script + interpreter to eval it * in. */ int result; /* Result of call to eval script. */ - esPtr = (EventScriptRecord *) clientData; + esPtr = (EventScriptRecord *) clientData; + chanPtr = esPtr->chanPtr; + mask = esPtr->mask; + interp = esPtr->interp; - chanPtr = esPtr->chanPtr; - mask = esPtr->mask; - interp = esPtr->interp; - /* * We must preserve the interpreter so we can report errors on it * later. Note that we do not need to preserve the channel because * that is done by Tcl_NotifyChannel before calling channel handlers. */ @@ -6681,10 +6671,11 @@ int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument objects. */ { Channel *chanPtr; /* The channel to create * the handler for. */ + ChannelState *statePtr; /* state info for channel */ Tcl_Channel chan; /* The opaque type for the channel. */ char *chanName; int modeIndex; /* Index of mode argument. */ int mask; static char *modeOptions[] = {"readable", "writable", NULL}; @@ -6703,12 +6694,13 @@ chanName = Tcl_GetString(objv[1]); chan = Tcl_GetChannel(interp, chanName, NULL); if (chan == (Tcl_Channel) NULL) { return TCL_ERROR; } - chanPtr = (Channel *) chan; - if ((chanPtr->flags & mask) == 0) { + chanPtr = (Channel *) chan; + statePtr = chanPtr->state; + if ((statePtr->flags & mask) == 0) { Tcl_AppendResult(interp, "channel is not ", (mask == TCL_READABLE) ? "readable" : "writable", (char *) NULL); return TCL_ERROR; } @@ -6717,11 +6709,11 @@ * If we are supposed to return the script, do so. */ if (objc == 3) { EventScriptRecord *esPtr; - for (esPtr = chanPtr->scriptRecordPtr; + for (esPtr = statePtr->scriptRecordPtr; esPtr != (EventScriptRecord *) NULL; esPtr = esPtr->nextPtr) { if ((esPtr->interp == interp) && (esPtr->mask == mask)) { Tcl_SetObjResult(interp, esPtr->scriptPtr); break; @@ -6751,543 +6743,10 @@ } /* *---------------------------------------------------------------------- * - * TclTestChannelCmd -- - * - * Implements the Tcl "testchannel" debugging command and its - * subcommands. This is part of the testing environment but must be - * in this file instead of tclTest.c because it needs access to the - * fields of struct Channel. - * - * Results: - * A standard Tcl result. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - - /* ARGSUSED */ -int -TclTestChannelCmd(clientData, interp, argc, argv) - ClientData clientData; /* Not used. */ - Tcl_Interp *interp; /* Interpreter for result. */ - int argc; /* Count of additional args. */ - char **argv; /* Additional arg strings. */ -{ - char *cmdName; /* Sub command. */ - Tcl_HashTable *hTblPtr; /* Hash table of channels. */ - Tcl_HashSearch hSearch; /* Search variable. */ - Tcl_HashEntry *hPtr; /* Search variable. */ - Channel *chanPtr; /* The actual channel. */ - Tcl_Channel chan; /* The opaque type. */ - size_t len; /* Length of subcommand string. */ - int IOQueued; /* How much IO is queued inside channel? */ - ChannelBuffer *bufPtr; /* For iterating over queued IO. */ - char buf[TCL_INTEGER_SPACE];/* For sprintf. */ - - if (argc < 2) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " subcommand ?additional args..?\"", (char *) NULL); - return TCL_ERROR; - } - cmdName = argv[1]; - len = strlen(cmdName); - - chanPtr = (Channel *) NULL; - - if (argc > 2) { - chan = Tcl_GetChannel(interp, argv[2], NULL); - if (chan == (Tcl_Channel) NULL) { - return TCL_ERROR; - } - chanPtr = (Channel *) chan; - } - - - if ((cmdName[0] == 'i') && (strncmp(cmdName, "info", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " info channelName\"", (char *) NULL); - return TCL_ERROR; - } - Tcl_AppendElement(interp, argv[2]); - Tcl_AppendElement(interp, chanPtr->typePtr->typeName); - if (chanPtr->flags & TCL_READABLE) { - Tcl_AppendElement(interp, "read"); - } else { - Tcl_AppendElement(interp, ""); - } - if (chanPtr->flags & TCL_WRITABLE) { - Tcl_AppendElement(interp, "write"); - } else { - Tcl_AppendElement(interp, ""); - } - if (chanPtr->flags & CHANNEL_NONBLOCKING) { - Tcl_AppendElement(interp, "nonblocking"); - } else { - Tcl_AppendElement(interp, "blocking"); - } - if (chanPtr->flags & CHANNEL_LINEBUFFERED) { - Tcl_AppendElement(interp, "line"); - } else if (chanPtr->flags & CHANNEL_UNBUFFERED) { - Tcl_AppendElement(interp, "none"); - } else { - Tcl_AppendElement(interp, "full"); - } - if (chanPtr->flags & BG_FLUSH_SCHEDULED) { - Tcl_AppendElement(interp, "async_flush"); - } else { - Tcl_AppendElement(interp, ""); - } - if (chanPtr->flags & CHANNEL_EOF) { - Tcl_AppendElement(interp, "eof"); - } else { - Tcl_AppendElement(interp, ""); - } - if (chanPtr->flags & CHANNEL_BLOCKED) { - Tcl_AppendElement(interp, "blocked"); - } else { - Tcl_AppendElement(interp, "unblocked"); - } - if (chanPtr->inputTranslation == TCL_TRANSLATE_AUTO) { - Tcl_AppendElement(interp, "auto"); - if (chanPtr->flags & INPUT_SAW_CR) { - Tcl_AppendElement(interp, "saw_cr"); - } else { - Tcl_AppendElement(interp, ""); - } - } else if (chanPtr->inputTranslation == TCL_TRANSLATE_LF) { - Tcl_AppendElement(interp, "lf"); - Tcl_AppendElement(interp, ""); - } else if (chanPtr->inputTranslation == TCL_TRANSLATE_CR) { - Tcl_AppendElement(interp, "cr"); - Tcl_AppendElement(interp, ""); - } else if (chanPtr->inputTranslation == TCL_TRANSLATE_CRLF) { - Tcl_AppendElement(interp, "crlf"); - if (chanPtr->flags & INPUT_SAW_CR) { - Tcl_AppendElement(interp, "queued_cr"); - } else { - Tcl_AppendElement(interp, ""); - } - } - if (chanPtr->outputTranslation == TCL_TRANSLATE_AUTO) { - Tcl_AppendElement(interp, "auto"); - } else if (chanPtr->outputTranslation == TCL_TRANSLATE_LF) { - Tcl_AppendElement(interp, "lf"); - } else if (chanPtr->outputTranslation == TCL_TRANSLATE_CR) { - Tcl_AppendElement(interp, "cr"); - } else if (chanPtr->outputTranslation == TCL_TRANSLATE_CRLF) { - Tcl_AppendElement(interp, "crlf"); - } - for (IOQueued = 0, bufPtr = chanPtr->inQueueHead; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { - IOQueued += bufPtr->nextAdded - bufPtr->nextRemoved; - } - TclFormatInt(buf, IOQueued); - Tcl_AppendElement(interp, buf); - - IOQueued = 0; - if (chanPtr->curOutPtr != (ChannelBuffer *) NULL) { - IOQueued = chanPtr->curOutPtr->nextAdded - - chanPtr->curOutPtr->nextRemoved; - } - for (bufPtr = chanPtr->outQueueHead; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { - IOQueued += (bufPtr->nextAdded - bufPtr->nextRemoved); - } - TclFormatInt(buf, IOQueued); - Tcl_AppendElement(interp, buf); - - TclFormatInt(buf, Tcl_Tell((Tcl_Channel) chanPtr)); - Tcl_AppendElement(interp, buf); - - TclFormatInt(buf, chanPtr->refCount); - Tcl_AppendElement(interp, buf); - - return TCL_OK; - } - - if ((cmdName[0] == 'i') && - (strncmp(cmdName, "inputbuffered", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - - for (IOQueued = 0, bufPtr = chanPtr->inQueueHead; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { - IOQueued += bufPtr->nextAdded - bufPtr->nextRemoved; - } - TclFormatInt(buf, IOQueued); - Tcl_AppendResult(interp, buf, (char *) NULL); - return TCL_OK; - } - - if ((cmdName[0] == 'm') && (strncmp(cmdName, "mode", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - - if (chanPtr->flags & TCL_READABLE) { - Tcl_AppendElement(interp, "read"); - } else { - Tcl_AppendElement(interp, ""); - } - if (chanPtr->flags & TCL_WRITABLE) { - Tcl_AppendElement(interp, "write"); - } else { - Tcl_AppendElement(interp, ""); - } - return TCL_OK; - } - - if ((cmdName[0] == 'n') && (strncmp(cmdName, "name", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - Tcl_AppendResult(interp, chanPtr->channelName, (char *) NULL); - return TCL_OK; - } - - if ((cmdName[0] == 'o') && (strncmp(cmdName, "open", len) == 0)) { - hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); - if (hTblPtr == (Tcl_HashTable *) NULL) { - return TCL_OK; - } - for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); - hPtr != (Tcl_HashEntry *) NULL; - hPtr = Tcl_NextHashEntry(&hSearch)) { - Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr)); - } - return TCL_OK; - } - - if ((cmdName[0] == 'o') && - (strncmp(cmdName, "outputbuffered", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - - IOQueued = 0; - if (chanPtr->curOutPtr != (ChannelBuffer *) NULL) { - IOQueued = chanPtr->curOutPtr->nextAdded - - chanPtr->curOutPtr->nextRemoved; - } - for (bufPtr = chanPtr->outQueueHead; - bufPtr != (ChannelBuffer *) NULL; - bufPtr = bufPtr->nextPtr) { - IOQueued += (bufPtr->nextAdded - bufPtr->nextRemoved); - } - TclFormatInt(buf, IOQueued); - Tcl_AppendResult(interp, buf, (char *) NULL); - return TCL_OK; - } - - if ((cmdName[0] == 'q') && - (strncmp(cmdName, "queuedcr", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - - Tcl_AppendResult(interp, - (chanPtr->flags & INPUT_SAW_CR) ? "1" : "0", - (char *) NULL); - return TCL_OK; - } - - if ((cmdName[0] == 'r') && (strncmp(cmdName, "readable", len) == 0)) { - hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); - if (hTblPtr == (Tcl_HashTable *) NULL) { - return TCL_OK; - } - for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); - hPtr != (Tcl_HashEntry *) NULL; - hPtr = Tcl_NextHashEntry(&hSearch)) { - chanPtr = (Channel *) Tcl_GetHashValue(hPtr); - if (chanPtr->flags & TCL_READABLE) { - Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr)); - } - } - return TCL_OK; - } - - if ((cmdName[0] == 'r') && (strncmp(cmdName, "refcount", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - - TclFormatInt(buf, chanPtr->refCount); - Tcl_AppendResult(interp, buf, (char *) NULL); - return TCL_OK; - } - - if ((cmdName[0] == 't') && (strncmp(cmdName, "type", len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "channel name required", - (char *) NULL); - return TCL_ERROR; - } - Tcl_AppendResult(interp, chanPtr->typePtr->typeName, (char *) NULL); - return TCL_OK; - } - - if ((cmdName[0] == 'w') && (strncmp(cmdName, "writable", len) == 0)) { - hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); - if (hTblPtr == (Tcl_HashTable *) NULL) { - return TCL_OK; - } - for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); - hPtr != (Tcl_HashEntry *) NULL; - hPtr = Tcl_NextHashEntry(&hSearch)) { - chanPtr = (Channel *) Tcl_GetHashValue(hPtr); - if (chanPtr->flags & TCL_WRITABLE) { - Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr)); - } - } - return TCL_OK; - } - - Tcl_AppendResult(interp, "bad option \"", cmdName, "\": should be ", - "info, open, readable, or writable", - (char *) NULL); - return TCL_ERROR; -} - -/* - *---------------------------------------------------------------------- - * - * TclTestChannelEventCmd -- - * - * This procedure implements the "testchannelevent" command. It is - * used to test the Tcl channel event mechanism. It is present in - * this file instead of tclTest.c because it needs access to the - * internal structure of the channel. - * - * Results: - * A standard Tcl result. - * - * Side effects: - * Creates, deletes and returns channel event handlers. - * - *---------------------------------------------------------------------- - */ - - /* ARGSUSED */ -int -TclTestChannelEventCmd(dummy, interp, argc, argv) - ClientData dummy; /* Not used. */ - Tcl_Interp *interp; /* Current interpreter. */ - int argc; /* Number of arguments. */ - char **argv; /* Argument strings. */ -{ - Tcl_Obj *resultListPtr; - Channel *chanPtr; - EventScriptRecord *esPtr, *prevEsPtr, *nextEsPtr; - char *cmd; - int index, i, mask, len; - - if ((argc < 3) || (argc > 5)) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " channelName cmd ?arg1? ?arg2?\"", (char *) NULL); - return TCL_ERROR; - } - chanPtr = (Channel *) Tcl_GetChannel(interp, argv[1], NULL); - if (chanPtr == (Channel *) NULL) { - return TCL_ERROR; - } - cmd = argv[2]; - len = strlen(cmd); - if ((cmd[0] == 'a') && (strncmp(cmd, "add", (unsigned) len) == 0)) { - if (argc != 5) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " channelName add eventSpec script\"", (char *) NULL); - return TCL_ERROR; - } - if (strcmp(argv[3], "readable") == 0) { - mask = TCL_READABLE; - } else if (strcmp(argv[3], "writable") == 0) { - mask = TCL_WRITABLE; - } else if (strcmp(argv[3], "none") == 0) { - mask = 0; - } else { - Tcl_AppendResult(interp, "bad event name \"", argv[3], - "\": must be readable, writable, or none", (char *) NULL); - return TCL_ERROR; - } - - esPtr = (EventScriptRecord *) ckalloc((unsigned) - sizeof(EventScriptRecord)); - esPtr->nextPtr = chanPtr->scriptRecordPtr; - chanPtr->scriptRecordPtr = esPtr; - - esPtr->chanPtr = chanPtr; - esPtr->interp = interp; - esPtr->mask = mask; - esPtr->scriptPtr = Tcl_NewStringObj(argv[4], -1); - Tcl_IncrRefCount(esPtr->scriptPtr); - - Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask, - ChannelEventScriptInvoker, (ClientData) esPtr); - - return TCL_OK; - } - - if ((cmd[0] == 'd') && (strncmp(cmd, "delete", (unsigned) len) == 0)) { - if (argc != 4) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " channelName delete index\"", (char *) NULL); - return TCL_ERROR; - } - if (Tcl_GetInt(interp, argv[3], &index) == TCL_ERROR) { - return TCL_ERROR; - } - if (index < 0) { - Tcl_AppendResult(interp, "bad event index: ", argv[3], - ": must be nonnegative", (char *) NULL); - return TCL_ERROR; - } - for (i = 0, esPtr = chanPtr->scriptRecordPtr; - (i < index) && (esPtr != (EventScriptRecord *) NULL); - i++, esPtr = esPtr->nextPtr) { - /* Empty loop body. */ - } - if (esPtr == (EventScriptRecord *) NULL) { - Tcl_AppendResult(interp, "bad event index ", argv[3], - ": out of range", (char *) NULL); - return TCL_ERROR; - } - if (esPtr == chanPtr->scriptRecordPtr) { - chanPtr->scriptRecordPtr = esPtr->nextPtr; - } else { - for (prevEsPtr = chanPtr->scriptRecordPtr; - (prevEsPtr != (EventScriptRecord *) NULL) && - (prevEsPtr->nextPtr != esPtr); - prevEsPtr = prevEsPtr->nextPtr) { - /* Empty loop body. */ - } - if (prevEsPtr == (EventScriptRecord *) NULL) { - panic("TclTestChannelEventCmd: damaged event script list"); - } - prevEsPtr->nextPtr = esPtr->nextPtr; - } - Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, - ChannelEventScriptInvoker, (ClientData) esPtr); - Tcl_DecrRefCount(esPtr->scriptPtr); - ckfree((char *) esPtr); - - return TCL_OK; - } - - if ((cmd[0] == 'l') && (strncmp(cmd, "list", (unsigned) len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " channelName list\"", (char *) NULL); - return TCL_ERROR; - } - resultListPtr = Tcl_GetObjResult(interp); - for (esPtr = chanPtr->scriptRecordPtr; - esPtr != (EventScriptRecord *) NULL; - esPtr = esPtr->nextPtr) { - if (esPtr->mask) { - Tcl_ListObjAppendElement(interp, resultListPtr, Tcl_NewStringObj( - (esPtr->mask == TCL_READABLE) ? "readable" : "writable", -1)); - } else { - Tcl_ListObjAppendElement(interp, resultListPtr, - Tcl_NewStringObj("none", -1)); - } - Tcl_ListObjAppendElement(interp, resultListPtr, esPtr->scriptPtr); - } - Tcl_SetObjResult(interp, resultListPtr); - return TCL_OK; - } - - if ((cmd[0] == 'r') && (strncmp(cmd, "removeall", (unsigned) len) == 0)) { - if (argc != 3) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " channelName removeall\"", (char *) NULL); - return TCL_ERROR; - } - for (esPtr = chanPtr->scriptRecordPtr; - esPtr != (EventScriptRecord *) NULL; - esPtr = nextEsPtr) { - nextEsPtr = esPtr->nextPtr; - Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, - ChannelEventScriptInvoker, (ClientData) esPtr); - Tcl_DecrRefCount(esPtr->scriptPtr); - ckfree((char *) esPtr); - } - chanPtr->scriptRecordPtr = (EventScriptRecord *) NULL; - return TCL_OK; - } - - if ((cmd[0] == 's') && (strncmp(cmd, "set", (unsigned) len) == 0)) { - if (argc != 5) { - Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], - " channelName delete index event\"", (char *) NULL); - return TCL_ERROR; - } - if (Tcl_GetInt(interp, argv[3], &index) == TCL_ERROR) { - return TCL_ERROR; - } - if (index < 0) { - Tcl_AppendResult(interp, "bad event index: ", argv[3], - ": must be nonnegative", (char *) NULL); - return TCL_ERROR; - } - for (i = 0, esPtr = chanPtr->scriptRecordPtr; - (i < index) && (esPtr != (EventScriptRecord *) NULL); - i++, esPtr = esPtr->nextPtr) { - /* Empty loop body. */ - } - if (esPtr == (EventScriptRecord *) NULL) { - Tcl_AppendResult(interp, "bad event index ", argv[3], - ": out of range", (char *) NULL); - return TCL_ERROR; - } - - if (strcmp(argv[4], "readable") == 0) { - mask = TCL_READABLE; - } else if (strcmp(argv[4], "writable") == 0) { - mask = TCL_WRITABLE; - } else if (strcmp(argv[4], "none") == 0) { - mask = 0; - } else { - Tcl_AppendResult(interp, "bad event name \"", argv[4], - "\": must be readable, writable, or none", (char *) NULL); - return TCL_ERROR; - } - esPtr->mask = mask; - Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask, - ChannelEventScriptInvoker, (ClientData) esPtr); - return TCL_OK; - } - Tcl_AppendResult(interp, "bad command ", cmd, ", must be one of ", - "add, delete, list, set, or removeall", (char *) NULL); - return TCL_ERROR; -} - -/* - *---------------------------------------------------------------------- - * * TclCopyChannel -- * * This routine copies data from one channel to another, either * synchronously or asynchronously. If a command script is * supplied, the operation runs in the background. The script @@ -7312,27 +6771,31 @@ int toRead; /* Amount of data to copy, or -1 for all. */ Tcl_Obj *cmdPtr; /* Pointer to script to execute or NULL. */ { Channel *inPtr = (Channel *) inChan; Channel *outPtr = (Channel *) outChan; + ChannelState *inStatePtr, *outStatePtr; int readFlags, writeFlags; CopyState *csPtr; int nonBlocking = (cmdPtr) ? CHANNEL_NONBLOCKING : 0; - if (inPtr->csPtr) { + inStatePtr = inPtr->state; + outStatePtr = outPtr->state; + + if (inStatePtr->csPtr) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "channel \"", Tcl_GetChannelName(inChan), "\" is busy", NULL); return TCL_ERROR; } - if (outPtr->csPtr) { + if (outStatePtr->csPtr) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "channel \"", Tcl_GetChannelName(outChan), "\" is busy", NULL); return TCL_ERROR; } - readFlags = inPtr->flags; - writeFlags = outPtr->flags; + readFlags = inStatePtr->flags; + writeFlags = outStatePtr->flags; /* * Set up the blocking mode appropriately. Background copies need * non-blocking channels. Foreground copies need blocking channels. * If there is an error, restore the old blocking mode. @@ -7362,34 +6825,34 @@ /* * Make sure the output side is unbuffered. */ - outPtr->flags = (outPtr->flags & ~(CHANNEL_LINEBUFFERED)) + outStatePtr->flags = (outStatePtr->flags & ~(CHANNEL_LINEBUFFERED)) | CHANNEL_UNBUFFERED; /* * Allocate a new CopyState to maintain info about the current copy in * progress. This structure will be deallocated when the copy is * completed. */ - csPtr = (CopyState*) ckalloc(sizeof(CopyState) + inPtr->bufSize); - csPtr->bufSize = inPtr->bufSize; - csPtr->readPtr = inPtr; - csPtr->writePtr = outPtr; - csPtr->readFlags = readFlags; + csPtr = (CopyState*) ckalloc(sizeof(CopyState) + inStatePtr->bufSize); + csPtr->bufSize = inStatePtr->bufSize; + csPtr->readPtr = inPtr; + csPtr->writePtr = outPtr; + csPtr->readFlags = readFlags; csPtr->writeFlags = writeFlags; - csPtr->toRead = toRead; - csPtr->total = 0; - csPtr->interp = interp; + csPtr->toRead = toRead; + csPtr->total = 0; + csPtr->interp = interp; if (cmdPtr) { Tcl_IncrRefCount(cmdPtr); } csPtr->cmdPtr = cmdPtr; - inPtr->csPtr = csPtr; - outPtr->csPtr = csPtr; + inStatePtr->csPtr = csPtr; + outStatePtr->csPtr = csPtr; /* * Start copying data between the channels. */ @@ -7419,51 +6882,57 @@ int mask; /* Current channel event flags. */ { Tcl_Interp *interp; Tcl_Obj *cmdPtr, *errObj = NULL; Tcl_Channel inChan, outChan; + ChannelState *inStatePtr, *outStatePtr; int result = TCL_OK; int size; int total; - inChan = (Tcl_Channel)csPtr->readPtr; - outChan = (Tcl_Channel)csPtr->writePtr; - interp = csPtr->interp; - cmdPtr = csPtr->cmdPtr; + inChan = (Tcl_Channel) csPtr->readPtr; + outChan = (Tcl_Channel) csPtr->writePtr; + inStatePtr = csPtr->readPtr->state; + outStatePtr = csPtr->writePtr->state; + interp = csPtr->interp; + cmdPtr = csPtr->cmdPtr; /* * Copy the data the slow way, using the translation mechanism. + * + * Note: We have make sure that we use the topmost channel in a stack + * for the copying. The caller uses Tcl_GetChannel to access it, and + * thus gets the bottom of the stack. */ while (csPtr->toRead != 0) { /* * Check for unreported background errors. */ - if (csPtr->readPtr->unreportedError != 0) { - Tcl_SetErrno(csPtr->readPtr->unreportedError); - csPtr->readPtr->unreportedError = 0; + if (inStatePtr->unreportedError != 0) { + Tcl_SetErrno(inStatePtr->unreportedError); + inStatePtr->unreportedError = 0; goto readError; } - if (csPtr->writePtr->unreportedError != 0) { - Tcl_SetErrno(csPtr->writePtr->unreportedError); - csPtr->writePtr->unreportedError = 0; + if (outStatePtr->unreportedError != 0) { + Tcl_SetErrno(outStatePtr->unreportedError); + outStatePtr->unreportedError = 0; goto writeError; } /* * Read up to bufSize bytes. */ - if ((csPtr->toRead == -1) - || (csPtr->toRead > csPtr->bufSize)) { + if ((csPtr->toRead == -1) || (csPtr->toRead > csPtr->bufSize)) { size = csPtr->bufSize; } else { size = csPtr->toRead; } - size = DoRead(csPtr->readPtr, csPtr->buffer, size); + size = DoRead(inStatePtr->topChanPtr, csPtr->buffer, size); if (size < 0) { readError: errObj = Tcl_NewObj(); Tcl_AppendStringsToObj(errObj, "error reading \"", @@ -7492,46 +6961,49 @@ /* * Now write the buffer out. */ - size = DoWrite(csPtr->writePtr, csPtr->buffer, size); + size = DoWrite(outStatePtr->topChanPtr, csPtr->buffer, size); if (size < 0) { writeError: errObj = Tcl_NewObj(); Tcl_AppendStringsToObj(errObj, "error writing \"", Tcl_GetChannelName(outChan), "\": ", Tcl_PosixError(interp), (char *) NULL); break; } + /* + * Update the current byte count. Do it now so the count is + * valid before a return or break takes us out of the loop. + * The invariant at the top of the loop should be that + * csPtr->toRead holds the number of bytes left to copy. + */ + + if (csPtr->toRead != -1) { + csPtr->toRead -= size; + } + csPtr->total += size; + /* * Check to see if the write is happening in the background. If so, * stop copying and wait for the channel to become writable again. */ - if (csPtr->writePtr->flags & BG_FLUSH_SCHEDULED) { + if (outStatePtr->flags & BG_FLUSH_SCHEDULED) { if (!(mask & TCL_WRITABLE)) { if (mask & TCL_READABLE) { - Tcl_DeleteChannelHandler(outChan, CopyEventProc, + Tcl_DeleteChannelHandler(inChan, CopyEventProc, (ClientData) csPtr); } Tcl_CreateChannelHandler(outChan, TCL_WRITABLE, CopyEventProc, (ClientData) csPtr); } return TCL_OK; } - /* - * Update the current byte count if we care. - */ - - if (csPtr->toRead != -1) { - csPtr->toRead -= size; - } - csPtr->total += size; - /* * For background copies, we only do one buffer per invocation so * we don't starve the rest of the system. */ @@ -7611,39 +7083,40 @@ DoRead(chanPtr, bufPtr, toRead) Channel *chanPtr; /* The channel from which to read. */ char *bufPtr; /* Where to store input read. */ int toRead; /* Maximum number of bytes to read. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ int copied; /* How many characters were copied into * the result string? */ int copiedNow; /* How many characters were copied from * the current input buffer? */ int result; /* Of calling GetInput. */ - + /* * If we have not encountered a sticky EOF, clear the EOF bit. Either * way clear the BLOCKED bit. We want to discover these anew during * each operation. */ - if (!(chanPtr->flags & CHANNEL_STICKY_EOF)) { - chanPtr->flags &= ~CHANNEL_EOF; + if (!(statePtr->flags & CHANNEL_STICKY_EOF)) { + statePtr->flags &= ~CHANNEL_EOF; } - chanPtr->flags &= ~(CHANNEL_BLOCKED | CHANNEL_NEED_MORE_DATA); + statePtr->flags &= ~(CHANNEL_BLOCKED | CHANNEL_NEED_MORE_DATA); for (copied = 0; copied < toRead; copied += copiedNow) { - copiedNow = CopyAndTranslateBuffer(chanPtr, bufPtr + copied, + copiedNow = CopyAndTranslateBuffer(statePtr, bufPtr + copied, toRead - copied); if (copiedNow == 0) { - if (chanPtr->flags & CHANNEL_EOF) { + if (statePtr->flags & CHANNEL_EOF) { goto done; } - if (chanPtr->flags & CHANNEL_BLOCKED) { - if (chanPtr->flags & CHANNEL_NONBLOCKING) { + if (statePtr->flags & CHANNEL_BLOCKED) { + if (statePtr->flags & CHANNEL_NONBLOCKING) { goto done; } - chanPtr->flags &= (~(CHANNEL_BLOCKED)); + statePtr->flags &= (~(CHANNEL_BLOCKED)); } result = GetInput(chanPtr); if (result != 0) { if (result != EAGAIN) { copied = -1; @@ -7651,11 +7124,11 @@ goto done; } } } - chanPtr->flags &= (~(CHANNEL_BLOCKED)); + statePtr->flags &= (~(CHANNEL_BLOCKED)); done: /* * Update the notifier state so we don't block while there is still * data in the buffers. @@ -7683,21 +7156,21 @@ * *---------------------------------------------------------------------- */ static int -CopyAndTranslateBuffer(chanPtr, result, space) - Channel *chanPtr; /* The channel from which to read input. */ +CopyAndTranslateBuffer(statePtr, result, space) + ChannelState *statePtr; /* Channel state from which to read input. */ char *result; /* Where to store the copied input. */ int space; /* How many bytes are available in result * to store the copied input? */ { + ChannelBuffer *bufPtr; /* The buffer from which to copy bytes. */ int bytesInBuffer; /* How many bytes are available to be * copied in the current input buffer? */ int copied; /* How many characters were already copied * into the destination space? */ - ChannelBuffer *bufPtr; /* The buffer from which to copy bytes. */ int i; /* Iterates over the copied input looking * for the input eofChar. */ /* * If there is no input at all, return zero. The invariant is that either @@ -7704,18 +7177,18 @@ * there is no buffer in the queue, or if the first buffer is empty, it * is also the last buffer (and thus there is no input in the queue). * Note also that if the buffer is empty, we leave it in the queue. */ - if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) { + if (statePtr->inQueueHead == (ChannelBuffer *) NULL) { return 0; } - bufPtr = chanPtr->inQueueHead; + bufPtr = statePtr->inQueueHead; bytesInBuffer = bufPtr->nextAdded - bufPtr->nextRemoved; copied = 0; - switch (chanPtr->inputTranslation) { + switch (statePtr->inputTranslation) { case TCL_TRANSLATE_LF: { if (bytesInBuffer == 0) { return 0; } @@ -7768,14 +7241,14 @@ /* * If there is a held-back "\r" at EOF, produce it now. */ if (bytesInBuffer == 0) { - if ((chanPtr->flags & (INPUT_SAW_CR | CHANNEL_EOF)) == + if ((statePtr->flags & (INPUT_SAW_CR | CHANNEL_EOF)) == (INPUT_SAW_CR | CHANNEL_EOF)) { result[0] = '\r'; - chanPtr->flags &= ~INPUT_SAW_CR; + statePtr->flags &= ~INPUT_SAW_CR; return 1; } return 0; } @@ -7796,18 +7269,18 @@ end = result + copied; dst = result; for (src = result; src < end; src++) { curByte = *src; if (curByte == '\n') { - chanPtr->flags &= ~INPUT_SAW_CR; - } else if (chanPtr->flags & INPUT_SAW_CR) { - chanPtr->flags &= ~INPUT_SAW_CR; + statePtr->flags &= ~INPUT_SAW_CR; + } else if (statePtr->flags & INPUT_SAW_CR) { + statePtr->flags &= ~INPUT_SAW_CR; *dst = '\r'; dst++; } if (curByte == '\r') { - chanPtr->flags |= INPUT_SAW_CR; + statePtr->flags |= INPUT_SAW_CR; } else { *dst = (char) curByte; dst++; } } @@ -7839,20 +7312,20 @@ end = result + copied; dst = result; for (src = result; src < end; src++) { curByte = *src; if (curByte == '\r') { - chanPtr->flags |= INPUT_SAW_CR; + statePtr->flags |= INPUT_SAW_CR; *dst = '\n'; dst++; } else { if ((curByte != '\n') || - !(chanPtr->flags & INPUT_SAW_CR)) { + !(statePtr->flags & INPUT_SAW_CR)) { *dst = (char) curByte; dst++; } - chanPtr->flags &= ~INPUT_SAW_CR; + statePtr->flags &= ~INPUT_SAW_CR; } } copied = dst - result; break; } @@ -7865,20 +7338,20 @@ * If an in-stream EOF character is set for this channel, check that * the input we copied so far does not contain the EOF char. If it does, * copy only up to and excluding that character. */ - if (chanPtr->inEofChar != 0) { + if (statePtr->inEofChar != 0) { for (i = 0; i < copied; i++) { - if (result[i] == (char) chanPtr->inEofChar) { + if (result[i] == (char) statePtr->inEofChar) { /* * Set sticky EOF so that no further input is presented * to the caller. */ - chanPtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF); - chanPtr->inputEncodingFlags |= TCL_ENCODING_END; + statePtr->flags |= (CHANNEL_EOF | CHANNEL_STICKY_EOF); + statePtr->inputEncodingFlags |= TCL_ENCODING_END; copied = i; break; } } } @@ -7886,22 +7359,114 @@ /* * If the current buffer is empty recycle it. */ if (bufPtr->nextRemoved == bufPtr->nextAdded) { - chanPtr->inQueueHead = bufPtr->nextPtr; - if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) { - chanPtr->inQueueTail = (ChannelBuffer *) NULL; + statePtr->inQueueHead = bufPtr->nextPtr; + if (statePtr->inQueueHead == (ChannelBuffer *) NULL) { + statePtr->inQueueTail = (ChannelBuffer *) NULL; } - RecycleBuffer(chanPtr, bufPtr, 0); + RecycleBuffer(statePtr, bufPtr, 0); } /* * Return the number of characters copied into the result buffer. * This may be different from the number of bytes consumed, because * of EOL translations. */ + + return copied; +} + +/* + *---------------------------------------------------------------------- + * + * CopyBuffer -- + * + * Copy at most one buffer of input to the result space. + * + * Results: + * Number of bytes stored in the result buffer. May return + * zero if no input is available. + * + * Side effects: + * Consumes buffered input. May deallocate one buffer. + * + *---------------------------------------------------------------------- + */ + +static int +CopyBuffer(chanPtr, result, space) + Channel *chanPtr; /* Channel from which to read input. */ + char *result; /* Where to store the copied input. */ + int space; /* How many bytes are available in result + * to store the copied input? */ +{ + ChannelBuffer *bufPtr; /* The buffer from which to copy bytes. */ + int bytesInBuffer; /* How many bytes are available to be + * copied in the current input buffer? */ + int copied; /* How many characters were already copied + * into the destination space? */ + + /* + * If there is no input at all, return zero. The invariant is that + * either there is no buffer in the queue, or if the first buffer + * is empty, it is also the last buffer (and thus there is no + * input in the queue). Note also that if the buffer is empty, we + * don't leave it in the queue, but recycle it. + */ + + if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) { + return 0; + } + bufPtr = chanPtr->inQueueHead; + bytesInBuffer = bufPtr->nextAdded - bufPtr->nextRemoved; + + copied = 0; + + if (bytesInBuffer == 0) { + RecycleBuffer(chanPtr->state, bufPtr, 0); + chanPtr->inQueueHead = (ChannelBuffer*) NULL; + chanPtr->inQueueTail = (ChannelBuffer*) NULL; + return 0; + } + + /* + * Copy the current chunk into the result buffer. + */ + + if (bytesInBuffer < space) { + space = bytesInBuffer; + } + + memcpy((VOID *) result, + (VOID *) (bufPtr->buf + bufPtr->nextRemoved), + (size_t) space); + bufPtr->nextRemoved += space; + copied = space; + + /* + * We don't care about in-stream EOF characters here as the data + * read here may still flow through one or more transformations, + * i.e. is not in its final state yet. + */ + + /* + * If the current buffer is empty recycle it. + */ + + if (bufPtr->nextRemoved == bufPtr->nextAdded) { + chanPtr->inQueueHead = bufPtr->nextPtr; + if (chanPtr->inQueueHead == (ChannelBuffer *) NULL) { + chanPtr->inQueueTail = (ChannelBuffer *) NULL; + } + RecycleBuffer(chanPtr->state, bufPtr, 0); + } + + /* + * Return the number of characters copied into the result buffer. + */ return copied; } /* @@ -7929,10 +7494,11 @@ DoWrite(chanPtr, src, srcLen) Channel *chanPtr; /* The channel to buffer output for. */ char *src; /* Data to write. */ int srcLen; /* Number of bytes to write. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ ChannelBuffer *outBufPtr; /* Current output buffer. */ int foundNewline; /* Did we find a newline in output? */ char *dPtr; char *sPtr; /* Search variables for newline. */ int crsent; /* In CRLF eol translation mode, @@ -7968,23 +7534,23 @@ /* * Make sure there is a current output buffer to accept output. */ - if (chanPtr->curOutPtr == (ChannelBuffer *) NULL) { - chanPtr->curOutPtr = AllocChannelBuffer(chanPtr->bufSize); + if (statePtr->curOutPtr == (ChannelBuffer *) NULL) { + statePtr->curOutPtr = AllocChannelBuffer(statePtr->bufSize); } - outBufPtr = chanPtr->curOutPtr; + outBufPtr = statePtr->curOutPtr; destCopied = outBufPtr->bufLength - outBufPtr->nextAdded; if (destCopied > srcLen) { destCopied = srcLen; } destPtr = outBufPtr->buf + outBufPtr->nextAdded; - switch (chanPtr->outputTranslation) { + switch (statePtr->outputTranslation) { case TCL_TRANSLATE_LF: srcCopied = destCopied; memcpy((VOID *) destPtr, (VOID *) src, (size_t) destCopied); break; case TCL_TRANSLATE_CR: @@ -8025,35 +7591,35 @@ * contains a newline and this channel is line-buffered, or if it * contains any output and this channel is unbuffered. */ outBufPtr->nextAdded += destCopied; - if (!(chanPtr->flags & BUFFER_READY)) { + if (!(statePtr->flags & BUFFER_READY)) { if (outBufPtr->nextAdded == outBufPtr->bufLength) { - chanPtr->flags |= BUFFER_READY; - } else if (chanPtr->flags & CHANNEL_LINEBUFFERED) { + statePtr->flags |= BUFFER_READY; + } else if (statePtr->flags & CHANNEL_LINEBUFFERED) { for (sPtr = src, i = 0, foundNewline = 0; - (i < srcCopied) && (!foundNewline); - i++, sPtr++) { + (i < srcCopied) && (!foundNewline); + i++, sPtr++) { if (*sPtr == '\n') { foundNewline = 1; break; } } if (foundNewline) { - chanPtr->flags |= BUFFER_READY; + statePtr->flags |= BUFFER_READY; } - } else if (chanPtr->flags & CHANNEL_UNBUFFERED) { - chanPtr->flags |= BUFFER_READY; + } else if (statePtr->flags & CHANNEL_UNBUFFERED) { + statePtr->flags |= BUFFER_READY; } } totalDestCopied += srcCopied; src += srcCopied; srcLen -= srcCopied; - if (chanPtr->flags & BUFFER_READY) { + if (statePtr->flags & BUFFER_READY) { if (FlushChannel(NULL, chanPtr, 0) != 0) { return -1; } } } /* Closes "while" */ @@ -8106,49 +7672,99 @@ static void StopCopy(csPtr) CopyState *csPtr; /* State for bg copy to stop . */ { + ChannelState *inStatePtr, *outStatePtr; int nonBlocking; if (!csPtr) { return; } + inStatePtr = csPtr->readPtr->state; + outStatePtr = csPtr->writePtr->state; + /* * Restore the old blocking mode and output buffering mode. */ nonBlocking = (csPtr->readFlags & CHANNEL_NONBLOCKING); - if (nonBlocking != (csPtr->readPtr->flags & CHANNEL_NONBLOCKING)) { + if (nonBlocking != (inStatePtr->flags & CHANNEL_NONBLOCKING)) { SetBlockMode(NULL, csPtr->readPtr, nonBlocking ? TCL_MODE_NONBLOCKING : TCL_MODE_BLOCKING); } - if (csPtr->writePtr != csPtr->writePtr) { - if (nonBlocking != (csPtr->writePtr->flags & CHANNEL_NONBLOCKING)) { + if (csPtr->readPtr != csPtr->writePtr) { + nonBlocking = (csPtr->writeFlags & CHANNEL_NONBLOCKING); + if (nonBlocking != (outStatePtr->flags & CHANNEL_NONBLOCKING)) { SetBlockMode(NULL, csPtr->writePtr, nonBlocking ? TCL_MODE_NONBLOCKING : TCL_MODE_BLOCKING); } } - csPtr->writePtr->flags &= ~(CHANNEL_LINEBUFFERED | CHANNEL_UNBUFFERED); - csPtr->writePtr->flags |= + outStatePtr->flags &= ~(CHANNEL_LINEBUFFERED | CHANNEL_UNBUFFERED); + outStatePtr->flags |= csPtr->writeFlags & (CHANNEL_LINEBUFFERED | CHANNEL_UNBUFFERED); - if (csPtr->cmdPtr) { Tcl_DeleteChannelHandler((Tcl_Channel)csPtr->readPtr, CopyEventProc, - (ClientData)csPtr); + (ClientData)csPtr); if (csPtr->readPtr != csPtr->writePtr) { Tcl_DeleteChannelHandler((Tcl_Channel)csPtr->writePtr, CopyEventProc, (ClientData)csPtr); } Tcl_DecrRefCount(csPtr->cmdPtr); } - csPtr->readPtr->csPtr = NULL; - csPtr->writePtr->csPtr = NULL; + inStatePtr->csPtr = NULL; + outStatePtr->csPtr = NULL; ckfree((char*) csPtr); } + +/* + *---------------------------------------------------------------------- + * + * StackSetBlockMode -- + * + * This function sets the blocking mode for a channel, iterating + * through each channel in a stack and updates the state flags. + * + * Results: + * 0 if OK, result code from failed blockModeProc otherwise. + * + * Side effects: + * Modifies the blocking mode of the channel and possibly generates + * an error. + * + *---------------------------------------------------------------------- + */ + +static int +StackSetBlockMode(chanPtr, mode) + Channel *chanPtr; /* Channel to modify. */ + int mode; /* One of TCL_MODE_BLOCKING or + * TCL_MODE_NONBLOCKING. */ +{ + int result = 0; + Tcl_DriverBlockModeProc *blockModeProc; + + /* + * Start at the top of the channel stack + */ + + chanPtr = chanPtr->state->topChanPtr; + while (chanPtr != (Channel *) NULL) { + blockModeProc = Tcl_ChannelBlockModeProc(chanPtr->typePtr); + if (blockModeProc != NULL) { + result = (*blockModeProc) (chanPtr->instanceData, mode); + if (result != 0) { + Tcl_SetErrno(result); + return result; + } + } + chanPtr = chanPtr->downChanPtr; + } + return 0; +} /* *---------------------------------------------------------------------- * * SetBlockMode -- @@ -8171,27 +7787,25 @@ Tcl_Interp *interp; /* Interp for error reporting. */ Channel *chanPtr; /* Channel to modify. */ int mode; /* One of TCL_MODE_BLOCKING or * TCL_MODE_NONBLOCKING. */ { + ChannelState *statePtr = chanPtr->state; /* state info for channel */ int result = 0; - if (chanPtr->typePtr->blockModeProc != NULL) { - result = (chanPtr->typePtr->blockModeProc) (chanPtr->instanceData, - mode); - } + + result = StackSetBlockMode(chanPtr, mode); if (result != 0) { - Tcl_SetErrno(result); if (interp != (Tcl_Interp *) NULL) { Tcl_AppendResult(interp, "error setting blocking mode: ", Tcl_PosixError(interp), (char *) NULL); } return TCL_ERROR; } if (mode == TCL_MODE_BLOCKING) { - chanPtr->flags &= (~(CHANNEL_NONBLOCKING | BG_FLUSH_SCHEDULED)); + statePtr->flags &= (~(CHANNEL_NONBLOCKING | BG_FLUSH_SCHEDULED)); } else { - chanPtr->flags |= CHANNEL_NONBLOCKING; + statePtr->flags |= CHANNEL_NONBLOCKING; } return TCL_OK; } /* @@ -8238,31 +7852,385 @@ int Tcl_GetChannelNamesEx(interp, pattern) Tcl_Interp *interp; /* Interp for error reporting. */ char *pattern; /* pattern to filter on. */ { - Channel *chanPtr; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); - char *name; - Tcl_Obj *resultPtr; - - resultPtr = Tcl_GetObjResult(interp); - for (chanPtr = tsdPtr->firstChanPtr; - chanPtr != NULL; - chanPtr = chanPtr->nextChanPtr) { - if (chanPtr == (Channel *) tsdPtr->stdinChannel) { + ChannelState *statePtr; + char *name; /* name for channel */ + Tcl_Obj *resultPtr; /* pointer to result object */ + Tcl_HashTable *hTblPtr; /* Hash table of channels. */ + Tcl_HashEntry *hPtr; /* Search variable. */ + Tcl_HashSearch hSearch; /* Search variable. */ + + if (interp == (Tcl_Interp *) NULL) { + return TCL_OK; + } + + /* + * Get the channel table that stores the channels registered + * for this interpreter. + */ + hTblPtr = GetChannelTable(interp); + resultPtr = Tcl_GetObjResult(interp); + + for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); + hPtr != (Tcl_HashEntry *) NULL; + hPtr = Tcl_NextHashEntry(&hSearch)) { + + statePtr = ((Channel *) Tcl_GetHashValue(hPtr))->state; + if (statePtr->topChanPtr == (Channel *) tsdPtr->stdinChannel) { name = "stdin"; - } else if (chanPtr == (Channel *) tsdPtr->stdoutChannel) { + } else if (statePtr->topChanPtr == (Channel *) tsdPtr->stdoutChannel) { name = "stdout"; - } else if (chanPtr == (Channel *) tsdPtr->stderrChannel) { + } else if (statePtr->topChanPtr == (Channel *) tsdPtr->stderrChannel) { name = "stderr"; } else { - name = chanPtr->channelName; + /* + * This is also stored in Tcl_GetHashKey(hTblPtr, hPtr), + * but it's simpler to just grab the name from the statePtr. + */ + name = statePtr->channelName; } + if (((pattern == NULL) || Tcl_StringMatch(name, pattern)) && (Tcl_ListObjAppendElement(interp, resultPtr, Tcl_NewStringObj(name, -1)) != TCL_OK)) { return TCL_ERROR; } } return TCL_OK; } + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelName -- + * + * Return the name of the channel type. + * + * Results: + * A pointer the name of the channel type. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +char * +Tcl_ChannelName(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->typeName); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelVersion -- + * + * Return the of version of the channel type. + * + * Results: + * TCL_CHANNEL_VERSION_2 or TCL_CHANNEL_VERSION_1. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_ChannelTypeVersion +Tcl_ChannelVersion(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + if (chanTypePtr->version == TCL_CHANNEL_VERSION_2) { + return TCL_CHANNEL_VERSION_2; + } else { + /* + * In version == TCL_CHANNEL_VERSION_2) { + return (chanTypePtr->blockModeProc); + } else { + return (Tcl_DriverBlockModeProc *) (chanTypePtr->version); + } +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelCloseProc -- + * + * Return the Tcl_DriverCloseProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverCloseProc * +Tcl_ChannelCloseProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->closeProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelClose2Proc -- + * + * Return the Tcl_DriverClose2Proc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverClose2Proc * +Tcl_ChannelClose2Proc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->close2Proc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelInputProc -- + * + * Return the Tcl_DriverInputProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverInputProc * +Tcl_ChannelInputProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->inputProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelOutputProc -- + * + * Return the Tcl_DriverOutputProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverOutputProc * +Tcl_ChannelOutputProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->outputProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelSeekProc -- + * + * Return the Tcl_DriverSeekProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverSeekProc * +Tcl_ChannelSeekProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->seekProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelSetOptionProc -- + * + * Return the Tcl_DriverSetOptionProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverSetOptionProc * +Tcl_ChannelSetOptionProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->setOptionProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelGetOptionProc -- + * + * Return the Tcl_DriverGetOptionProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverGetOptionProc * +Tcl_ChannelGetOptionProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->getOptionProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelWatchProc -- + * + * Return the Tcl_DriverWatchProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverWatchProc * +Tcl_ChannelWatchProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->watchProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelGetHandleProc -- + * + * Return the Tcl_DriverGetHandleProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverGetHandleProc * +Tcl_ChannelGetHandleProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->getHandleProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelFlushProc -- + * + * Return the Tcl_DriverFlushProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverFlushProc * +Tcl_ChannelFlushProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->flushProc); +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_ChannelHandlerProc -- + * + * Return the Tcl_DriverHandlerProc of the channel type. + * + * Results: + * A pointer to the proc. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +Tcl_DriverHandlerProc * +Tcl_ChannelHandlerProc(chanTypePtr) + Tcl_ChannelType *chanTypePtr; /* Pointer to channel type. */ +{ + return (chanTypePtr->handlerProc); +} ADDED generic/tclIO.h Index: generic/tclIO.h ================================================================== --- /dev/null +++ generic/tclIO.h @@ -0,0 +1,379 @@ +/* + * tclIO.h -- + * + * This file provides the generic portions (those that are the same on + * all platforms and for all channel types) of Tcl's IO facilities. + * + * Copyright (c) 1998-2000 Ajuba Solutions + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id: tclIO.h,v 1.1.4.1 2000/07/27 01:39:17 hobbs Exp $ + */ + +/* + * Make sure that both EAGAIN and EWOULDBLOCK are defined. This does not + * compile on systems where neither is defined. We want both defined so + * that we can test safely for both. In the code we still have to test for + * both because there may be systems on which both are defined and have + * different values. + */ + +#if ((!defined(EWOULDBLOCK)) && (defined(EAGAIN))) +# define EWOULDBLOCK EAGAIN +#endif +#if ((!defined(EAGAIN)) && (defined(EWOULDBLOCK))) +# define EAGAIN EWOULDBLOCK +#endif +#if ((!defined(EAGAIN)) && (!defined(EWOULDBLOCK))) +error one of EWOULDBLOCK or EAGAIN must be defined +#endif + +/* + * The following structure encapsulates the state for a background channel + * copy. Note that the data buffer for the copy will be appended to this + * structure. + */ + +typedef struct CopyState { + struct Channel *readPtr; /* Pointer to input channel. */ + struct Channel *writePtr; /* Pointer to output channel. */ + int readFlags; /* Original read channel flags. */ + int writeFlags; /* Original write channel flags. */ + int toRead; /* Number of bytes to copy, or -1. */ + int total; /* Total bytes transferred (written). */ + Tcl_Interp *interp; /* Interp that started the copy. */ + Tcl_Obj *cmdPtr; /* Command to be invoked at completion. */ + int bufSize; /* Size of appended buffer. */ + char buffer[1]; /* Copy buffer, this must be the last + * field. */ +} CopyState; + +/* + * struct ChannelBuffer: + * + * Buffers data being sent to or from a channel. + */ + +typedef struct ChannelBuffer { + int nextAdded; /* The next position into which a character + * will be put in the buffer. */ + int nextRemoved; /* Position of next byte to be removed + * from the buffer. */ + int bufLength; /* How big is the buffer? */ + struct ChannelBuffer *nextPtr; + /* Next buffer in chain. */ + char buf[4]; /* Placeholder for real buffer. The real + * buffer occuppies this space + bufSize-4 + * bytes. This must be the last field in + * the structure. */ +} ChannelBuffer; + +#define CHANNELBUFFER_HEADER_SIZE (sizeof(ChannelBuffer) - 4) + +/* + * How much extra space to allocate in buffer to hold bytes from previous + * buffer (when converting to UTF-8) or to hold bytes that will go to + * next buffer (when converting from UTF-8). + */ + +#define BUFFER_PADDING 16 + +/* + * The following defines the *default* buffer size for channels. + */ + +#define CHANNELBUFFER_DEFAULT_SIZE (1024 * 4) + +/* + * Structure to record a close callback. One such record exists for + * each close callback registered for a channel. + */ + +typedef struct CloseCallback { + Tcl_CloseProc *proc; /* The procedure to call. */ + ClientData clientData; /* Arbitrary one-word data to pass + * to the callback. */ + struct CloseCallback *nextPtr; /* For chaining close callbacks. */ +} CloseCallback; + +/* + * The following structure describes the information saved from a call to + * "fileevent". This is used later when the event being waited for to + * invoke the saved script in the interpreter designed in this record. + */ + +typedef struct EventScriptRecord { + struct Channel *chanPtr; /* The channel for which this script is + * registered. This is used only when an + * error occurs during evaluation of the + * script, to delete the handler. */ + Tcl_Obj *scriptPtr; /* Script to invoke. */ + Tcl_Interp *interp; /* In what interpreter to invoke script? */ + int mask; /* Events must overlap current mask for the + * stored script to be invoked. */ + struct EventScriptRecord *nextPtr; + /* Next in chain of records. */ +} EventScriptRecord; + +/* + * struct Channel: + * + * One of these structures is allocated for each open channel. It contains data + * specific to the channel but which belongs to the generic part of the Tcl + * channel mechanism, and it points at an instance specific (and type + * specific) * instance data, and at a channel type structure. + */ + +typedef struct Channel { + struct ChannelState *state; /* Split out state information */ + + ClientData instanceData; /* Instance-specific data provided by + * creator of channel. */ + Tcl_ChannelType *typePtr; /* Pointer to channel type structure. */ + + struct Channel *downChanPtr;/* Refers to channel this one was stacked + * upon. This reference is NULL for normal + * channels. See Tcl_StackChannel. */ + struct Channel *upChanPtr; /* Refers to the channel above stacked this + * one. NULL for the top most channel. */ + + /* + * Intermediate buffers to hold pre-read data for consumption by a + * newly stacked transformation. See 'Tcl_StackChannel'. + */ + ChannelBuffer *inQueueHead; /* Points at first buffer in input queue. */ + ChannelBuffer *inQueueTail; /* Points at last buffer in input queue. */ +} Channel; + +/* + * struct ChannelState: + * + * One of these structures is allocated for each open channel. It contains data + * specific to the channel but which belongs to the generic part of the Tcl + * channel mechanism, and it points at an instance specific (and type + * specific) * instance data, and at a channel type structure. + */ + +typedef struct ChannelState { + char *channelName; /* The name of the channel instance in Tcl + * commands. Storage is owned by the generic IO + * code, is dynamically allocated. */ + int flags; /* ORed combination of the flags defined + * below. */ + Tcl_Encoding encoding; /* Encoding to apply when reading or writing + * data on this channel. NULL means no + * encoding is applied to data. */ + Tcl_EncodingState inputEncodingState; + /* Current encoding state, used when converting + * input data bytes to UTF-8. */ + int inputEncodingFlags; /* Encoding flags to pass to conversion + * routine when converting input data bytes to + * UTF-8. May be TCL_ENCODING_START before + * converting first byte and TCL_ENCODING_END + * when EOF is seen. */ + Tcl_EncodingState outputEncodingState; + /* Current encoding state, used when converting + * UTF-8 to output data bytes. */ + int outputEncodingFlags; /* Encoding flags to pass to conversion + * routine when converting UTF-8 to output + * data bytes. May be TCL_ENCODING_START + * before converting first byte and + * TCL_ENCODING_END when EOF is seen. */ + Tcl_EolTranslation inputTranslation; + /* What translation to apply for end of line + * sequences on input? */ + Tcl_EolTranslation outputTranslation; + /* What translation to use for generating + * end of line sequences in output? */ + int inEofChar; /* If nonzero, use this as a signal of EOF + * on input. */ + int outEofChar; /* If nonzero, append this to the channel + * when it is closed if it is open for + * writing. */ + int unreportedError; /* Non-zero if an error report was deferred + * because it happened in the background. The + * value is the POSIX error code. */ + int refCount; /* How many interpreters hold references to + * this IO channel? */ + + CloseCallback *closeCbPtr; /* Callbacks registered to be called when the + * channel is closed. */ + char *outputStage; /* Temporary staging buffer used when + * translating EOL before converting from + * UTF-8 to external form. */ + ChannelBuffer *curOutPtr; /* Current output buffer being filled. */ + ChannelBuffer *outQueueHead;/* Points at first buffer in output queue. */ + ChannelBuffer *outQueueTail;/* Points at last buffer in output queue. */ + + ChannelBuffer *saveInBufPtr;/* Buffer saved for input queue - eliminates + * need to allocate a new buffer for "gets" + * that crosses buffer boundaries. */ + ChannelBuffer *inQueueHead; /* Points at first buffer in input queue. */ + ChannelBuffer *inQueueTail; /* Points at last buffer in input queue. */ + + struct ChannelHandler *chPtr;/* List of channel handlers registered + * for this channel. */ + int interestMask; /* Mask of all events this channel has + * handlers for. */ + EventScriptRecord *scriptRecordPtr; + /* Chain of all scripts registered for + * event handlers ("fileevent") on this + * channel. */ + + int bufSize; /* What size buffers to allocate? */ + Tcl_TimerToken timer; /* Handle to wakeup timer for this channel. */ + CopyState *csPtr; /* State of background copy, or NULL. */ + Channel *topChanPtr; /* Refers to topmost channel in a stack. + * Never NULL. */ + Channel *bottomChanPtr; /* Refers to bottommost channel in a stack. + * This channel can be relied on to live as + * long as the channel state. Never NULL. */ + struct ChannelState *nextCSPtr; + /* Next in list of channels currently open. */ +} ChannelState; + +/* + * Values for the flags field in Channel. Any ORed combination of the + * following flags can be stored in the field. These flags record various + * options and state bits about the channel. In addition to the flags below, + * the channel can also have TCL_READABLE (1<<1) and TCL_WRITABLE (1<<2) set. + */ + +#define CHANNEL_NONBLOCKING (1<<3) /* Channel is currently in + * nonblocking mode. */ +#define CHANNEL_LINEBUFFERED (1<<4) /* Output to the channel must be + * flushed after every newline. */ +#define CHANNEL_UNBUFFERED (1<<5) /* Output to the channel must always + * be flushed immediately. */ +#define BUFFER_READY (1<<6) /* Current output buffer (the + * curOutPtr field in the + * channel structure) should be + * output as soon as possible even + * though it may not be full. */ +#define BG_FLUSH_SCHEDULED (1<<7) /* A background flush of the + * queued output buffers has been + * scheduled. */ +#define CHANNEL_CLOSED (1<<8) /* Channel has been closed. No + * further Tcl-level IO on the + * channel is allowed. */ +#define CHANNEL_EOF (1<<9) /* EOF occurred on this channel. + * This bit is cleared before every + * input operation. */ +#define CHANNEL_STICKY_EOF (1<<10) /* EOF occurred on this channel because + * we saw the input eofChar. This bit + * prevents clearing of the EOF bit + * before every input operation. */ +#define CHANNEL_BLOCKED (1<<11) /* EWOULDBLOCK or EAGAIN occurred + * on this channel. This bit is + * cleared before every input or + * output operation. */ +#define INPUT_SAW_CR (1<<12) /* Channel is in CRLF eol input + * translation mode and the last + * byte seen was a "\r". */ +#define INPUT_NEED_NL (1<<15) /* Saw a '\r' at end of last buffer, + * and there should be a '\n' at + * beginning of next buffer. */ +#define CHANNEL_DEAD (1<<13) /* The channel has been closed by + * the exit handler (on exit) but + * not deallocated. When any IO + * operation sees this flag on a + * channel, it does not call driver + * level functions to avoid referring + * to deallocated data. */ +#define CHANNEL_NEED_MORE_DATA (1<<14) /* The last input operation failed + * because there was not enough data + * to complete the operation. This + * flag is set when gets fails to + * get a complete line or when read + * fails to get a complete character. + * When set, file events will not be + * delivered for buffered data until + * the state of the channel changes. */ +#define CHANNEL_RAW_MODE (1<<16) /* When set, notes that the Raw API is + * being used. */ + +/* + * For each channel handler registered in a call to Tcl_CreateChannelHandler, + * there is one record of the following type. All of records for a specific + * channel are chained together in a singly linked list which is stored in + * the channel structure. + */ + +typedef struct ChannelHandler { + Channel *chanPtr; /* The channel structure for this channel. */ + int mask; /* Mask of desired events. */ + Tcl_ChannelProc *proc; /* Procedure to call in the type of + * Tcl_CreateChannelHandler. */ + ClientData clientData; /* Argument to pass to procedure. */ + struct ChannelHandler *nextPtr; + /* Next one in list of registered handlers. */ +} ChannelHandler; + +/* + * This structure keeps track of the current ChannelHandler being invoked in + * the current invocation of ChannelHandlerEventProc. There is a potential + * problem if a ChannelHandler is deleted while it is the current one, since + * ChannelHandlerEventProc needs to look at the nextPtr field. To handle this + * problem, structures of the type below indicate the next handler to be + * processed for any (recursively nested) dispatches in progress. The + * nextHandlerPtr field is updated if the handler being pointed to is deleted. + * The nextPtr field is used to chain together all recursive invocations, so + * that Tcl_DeleteChannelHandler can find all the recursively nested + * invocations of ChannelHandlerEventProc and compare the handler being + * deleted against the NEXT handler to be invoked in that invocation; when it + * finds such a situation, Tcl_DeleteChannelHandler updates the nextHandlerPtr + * field of the structure to the next handler. + */ + +typedef struct NextChannelHandler { + ChannelHandler *nextHandlerPtr; /* The next handler to be invoked in + * this invocation. */ + struct NextChannelHandler *nestedHandlerPtr; + /* Next nested invocation of + * ChannelHandlerEventProc. */ +} NextChannelHandler; + + +/* + * The following structure describes the event that is added to the Tcl + * event queue by the channel handler check procedure. + */ + +typedef struct ChannelHandlerEvent { + Tcl_Event header; /* Standard header for all events. */ + Channel *chanPtr; /* The channel that is ready. */ + int readyMask; /* Events that have occurred. */ +} ChannelHandlerEvent; + +/* + * The following structure is used by Tcl_GetsObj() to encapsulates the + * state for a "gets" operation. + */ + +typedef struct GetsState { + Tcl_Obj *objPtr; /* The object to which UTF-8 characters + * will be appended. */ + char **dstPtr; /* Pointer into objPtr's string rep where + * next character should be stored. */ + Tcl_Encoding encoding; /* The encoding to use to convert raw bytes + * to UTF-8. */ + ChannelBuffer *bufPtr; /* The current buffer of raw bytes being + * emptied. */ + Tcl_EncodingState state; /* The encoding state just before the last + * external to UTF-8 conversion in + * FilterInputBytes(). */ + int rawRead; /* The number of bytes removed from bufPtr + * in the last call to FilterInputBytes(). */ + int bytesWrote; /* The number of bytes of UTF-8 data + * appended to objPtr during the last call to + * FilterInputBytes(). */ + int charsWrote; /* The corresponding number of UTF-8 + * characters appended to objPtr during the + * last call to FilterInputBytes(). */ + int totalChars; /* The total number of UTF-8 characters + * appended to objPtr so far, just before the + * last call to FilterInputBytes(). */ +} GetsState; Index: generic/tclIOCmd.c ================================================================== --- generic/tclIOCmd.c +++ generic/tclIOCmd.c @@ -6,11 +6,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIOCmd.c,v 1.7 1999/09/21 04:20:40 hobbs Exp $ + * RCS: @(#) $Id: tclIOCmd.c,v 1.7.2.1 2001/08/06 22:24:11 andreas_kupries Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -226,24 +226,25 @@ Tcl_AppendResult(interp, "channel \"", name, "\" wasn't opened for reading", (char *) NULL); return TCL_ERROR; } - resultPtr = Tcl_GetObjResult(interp); - linePtr = resultPtr; if (objc == 3) { /* * Variable gets line, interp get bytecount. */ linePtr = Tcl_NewObj(); } + else { + linePtr = Tcl_GetObjResult(interp); + } lineLen = Tcl_GetsObj(chan, linePtr); if (lineLen < 0) { if (!Tcl_Eof(chan) && !Tcl_InputBlocked(chan)) { - if (linePtr != resultPtr) { + if (objc == 3) { Tcl_DecrRefCount(linePtr); } Tcl_ResetResult(interp); Tcl_AppendResult(interp, "error reading \"", name, "\": ", Tcl_PosixError(interp), (char *) NULL); @@ -255,10 +256,11 @@ if (Tcl_ObjSetVar2(interp, objv[2], NULL, linePtr, TCL_LEAVE_ERR_MSG) == NULL) { Tcl_DecrRefCount(linePtr); return TCL_ERROR; } + resultPtr = Tcl_GetObjResult(interp); Tcl_SetIntObj(resultPtr, lineLen); return TCL_OK; } return TCL_OK; } ADDED generic/tclIOGT.c Index: generic/tclIOGT.c ================================================================== --- /dev/null +++ generic/tclIOGT.c @@ -0,0 +1,1359 @@ +/* + * tclIOGT.c -- + * + * Implements a generic transformation exposing the underlying API + * at the script level. Contributed by Andreas Kupries. + * + * Copyright (c) 2000 Ajuba Solutions + * Copyright (c) 1999-2000 Andreas Kupries (a.kupries@westend.com) + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * CVS: $Id: tclIOGT.c,v 1.1.4.3 2001/04/03 22:54:37 hobbs Exp $ + */ + +#include "tclInt.h" +#include "tclPort.h" +#include "tclIO.h" + + +/* + * Forward declarations of internal procedures. + * First the driver procedures of the transformation. + */ + +static int TransformBlockModeProc _ANSI_ARGS_ (( + ClientData instanceData, int mode)); +static int TransformCloseProc _ANSI_ARGS_ (( + ClientData instanceData, Tcl_Interp* interp)); +static int TransformInputProc _ANSI_ARGS_ (( + ClientData instanceData, + char* buf, int toRead, int* errorCodePtr)); +static int TransformOutputProc _ANSI_ARGS_ (( + ClientData instanceData, + char* buf, int toWrite, int* errorCodePtr)); +static int TransformSeekProc _ANSI_ARGS_ (( + ClientData instanceData, long offset, + int mode, int* errorCodePtr)); +static int TransformSetOptionProc _ANSI_ARGS_(( + ClientData instanceData, Tcl_Interp *interp, + char *optionName, char *value)); +static int TransformGetOptionProc _ANSI_ARGS_(( + ClientData instanceData, Tcl_Interp *interp, + char *optionName, Tcl_DString *dsPtr)); +static void TransformWatchProc _ANSI_ARGS_ (( + ClientData instanceData, int mask)); +static int TransformGetFileHandleProc _ANSI_ARGS_ (( + ClientData instanceData, int direction, + ClientData* handlePtr)); +static int TransformNotifyProc _ANSI_ARGS_ (( + ClientData instanceData, int mask)); + +/* + * Forward declarations of internal procedures. + * Secondly the procedures for handling and generating fileeevents. + */ + +static void TransformChannelHandlerTimer _ANSI_ARGS_ (( + ClientData clientData)); + +/* + * Forward declarations of internal procedures. + * Third, helper procedures encapsulating essential tasks. + */ + +typedef struct TransformChannelData TransformChannelData; + +static int ExecuteCallback _ANSI_ARGS_ (( + TransformChannelData* ctrl, Tcl_Interp* interp, + unsigned char* op, unsigned char* buf, + int bufLen, int transmit, int preserve)); + +/* + * Action codes to give to 'ExecuteCallback' (argument 'transmit') + * confering to the procedure what to do with the result of the script + * it calls. + */ + +#define TRANSMIT_DONT (0) /* No transfer to do */ +#define TRANSMIT_DOWN (1) /* Transfer to the underlying channel */ +#define TRANSMIT_SELF (2) /* Transfer into our channel. */ +#define TRANSMIT_IBUF (3) /* Transfer to internal input buffer */ +#define TRANSMIT_NUM (4) /* Transfer number to 'maxRead' */ + +/* + * Codes for 'preserve' of 'ExecuteCallback' + */ + +#define P_PRESERVE (1) +#define P_NO_PRESERVE (0) + +/* + * Strings for the action codes delivered to the script implementing + * a transformation. Argument 'op' of 'ExecuteCallback'. + */ + +#define A_CREATE_WRITE (UCHARP ("create/write")) +#define A_DELETE_WRITE (UCHARP ("delete/write")) +#define A_FLUSH_WRITE (UCHARP ("flush/write")) +#define A_WRITE (UCHARP ("write")) + +#define A_CREATE_READ (UCHARP ("create/read")) +#define A_DELETE_READ (UCHARP ("delete/read")) +#define A_FLUSH_READ (UCHARP ("flush/read")) +#define A_READ (UCHARP ("read")) + +#define A_QUERY_MAXREAD (UCHARP ("query/maxRead")) +#define A_CLEAR_READ (UCHARP ("clear/read")) + +/* + * Management of a simple buffer. + */ + +typedef struct ResultBuffer ResultBuffer; + +static void ResultClear _ANSI_ARGS_ ((ResultBuffer* r)); +static void ResultInit _ANSI_ARGS_ ((ResultBuffer* r)); +static int ResultLength _ANSI_ARGS_ ((ResultBuffer* r)); +static int ResultCopy _ANSI_ARGS_ ((ResultBuffer* r, + unsigned char* buf, int toRead)); +static void ResultAdd _ANSI_ARGS_ ((ResultBuffer* r, + unsigned char* buf, int toWrite)); + +/* + * This structure describes the channel type structure for tcl based + * transformations. + */ + +static Tcl_ChannelType transformChannelType = { + "transform", /* Type name. */ + TCL_CHANNEL_VERSION_2, + TransformCloseProc, /* Close proc. */ + TransformInputProc, /* Input proc. */ + TransformOutputProc, /* Output proc. */ + TransformSeekProc, /* Seek proc. */ + TransformSetOptionProc, /* Set option proc. */ + TransformGetOptionProc, /* Get option proc. */ + TransformWatchProc, /* Initialize notifier. */ + TransformGetFileHandleProc, /* Get OS handles out of channel. */ + NULL, /* close2proc */ + TransformBlockModeProc, /* Set blocking/nonblocking mode.*/ + NULL, /* Flush proc. */ + TransformNotifyProc, /* Handling of events bubbling up */ +}; + +/* + * Possible values for 'flags' field in control structure, see below. + */ + +#define CHANNEL_ASYNC (1<<0) /* non-blocking mode */ + +/* + * Definition of the structure containing the information about the + * internal input buffer. + */ + +struct ResultBuffer { + unsigned char* buf; /* Reference to the buffer area */ + int allocated; /* Allocated size of the buffer area */ + int used; /* Number of bytes in the buffer, <= allocated */ +}; + +/* + * Additional bytes to allocate during buffer expansion + */ + +#define INCREMENT (512) + +/* + * Number of milliseconds to wait before firing an event to flush + * out information waiting in buffers (fileevent support). + */ + +#define FLUSH_DELAY (5) + +/* + * Convenience macro to make some casts easier to use. + */ + +#define UCHARP(x) ((unsigned char*) (x)) +#define NO_INTERP ((Tcl_Interp*) NULL) + +/* + * Definition of a structure used by all transformations generated here to + * maintain their local state. + */ + +struct TransformChannelData { + + /* + * General section. Data to integrate the transformation into the channel + * system. + */ + + Tcl_Channel self; /* Our own Channel handle */ + int readIsFlushed; /* Flag to note wether in.flushProc was called or not + */ + int flags; /* Currently CHANNEL_ASYNC or zero */ + int watchMask; /* Current watch/event/interest mask */ + int mode; /* mode of parent channel, OR'ed combination of + * TCL_READABLE, TCL_WRITABLE */ + Tcl_TimerToken timer; /* Timer for automatic flushing of information + * sitting in an internal buffer. Required for full + * fileevent support */ + /* + * Transformation specific data. + */ + + int maxRead; /* Maximum allowed number of bytes to read, as + * given to us by the tcl script implementing the + * transformation. */ + Tcl_Interp* interp; /* Reference to the interpreter which created the + * transformation. Used to execute the code + * below. */ + Tcl_Obj* command; /* Tcl code to execute for a buffer */ + ResultBuffer result; /* Internal buffer used to store the result of a + * transformation of incoming data. Additionally + * serves as buffer of all data not yet consumed by + * the reader. */ +}; + + +/* + *---------------------------------------------------------------------- + * + * TclChannelTransform -- + * + * Implements the Tcl "testchannel transform" debugging command. + * This is part of the testing environment. This sets up a tcl + * script (cmdObjPtr) to be used as a transform on the channel. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + + /* ARGSUSED */ +int +TclChannelTransform(interp, chan, cmdObjPtr) + Tcl_Interp *interp; /* Interpreter for result. */ + Tcl_Channel chan; /* Channel to transform. */ + Tcl_Obj *cmdObjPtr; /* Script to use for transform. */ +{ + Channel *chanPtr; /* The actual channel. */ + ChannelState *statePtr; /* state info for channel */ + int mode; /* rw mode of the channel */ + TransformChannelData *dataPtr; + int res; + Tcl_DString ds; + + if (chan == (Tcl_Channel) NULL) { + return TCL_ERROR; + } + chanPtr = (Channel *) chan; + statePtr = chanPtr->state; + chanPtr = statePtr->topChanPtr; + chan = (Tcl_Channel) chanPtr; + mode = (statePtr->flags & (TCL_READABLE|TCL_WRITABLE)); + + /* + * Now initialize the transformation state and stack it upon the + * specified channel. One of the necessary things to do is to + * retrieve the blocking regime of the underlying channel and to + * use the same for us too. + */ + + dataPtr = (TransformChannelData*) ckalloc(sizeof(TransformChannelData)); + + Tcl_DStringInit (&ds); + Tcl_GetChannelOption(interp, chan, "-blocking", &ds); + + dataPtr->readIsFlushed = 0; + dataPtr->flags = 0; + + if (ds.string[0] == '0') { + dataPtr->flags |= CHANNEL_ASYNC; + } + + Tcl_DStringFree (&ds); + + dataPtr->self = chan; + dataPtr->watchMask = 0; + dataPtr->mode = mode; + dataPtr->timer = (Tcl_TimerToken) NULL; + dataPtr->maxRead = 4096; /* Initial value not relevant */ + dataPtr->interp = interp; + dataPtr->command = cmdObjPtr; + + Tcl_IncrRefCount(dataPtr->command); + + ResultInit(&dataPtr->result); + + dataPtr->self = Tcl_StackChannel(interp, &transformChannelType, + (ClientData) dataPtr, mode, chan); + if (dataPtr->self == (Tcl_Channel) NULL) { + Tcl_AppendResult(interp, "\nfailed to stack channel \"", + Tcl_GetChannelName(chan), "\"", (char *) NULL); + + Tcl_DecrRefCount(dataPtr->command); + ResultClear(&dataPtr->result); + ckfree((VOID *) dataPtr); + return TCL_ERROR; + } + + /* + * At last initialize the transformation at the script level. + */ + + if (dataPtr->mode & TCL_WRITABLE) { + res = ExecuteCallback (dataPtr, NO_INTERP, A_CREATE_WRITE, + NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE); + + if (res != TCL_OK) { + Tcl_UnstackChannel(interp, chan); + return TCL_ERROR; + } + } + + if (dataPtr->mode & TCL_READABLE) { + res = ExecuteCallback (dataPtr, NO_INTERP, A_CREATE_READ, + NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE); + + if (res != TCL_OK) { + ExecuteCallback (dataPtr, NO_INTERP, A_DELETE_WRITE, + NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE); + + Tcl_UnstackChannel(interp, chan); + return TCL_ERROR; + } + } + + return TCL_OK; +} + +/* + *------------------------------------------------------* + * + * ExecuteCallback -- + * + * Executes the defined callback for buffer and + * operation. + * + * Sideeffects: + * As of the executed tcl script. + * + * Result: + * A standard TCL error code. In case of an + * error a message is left in the result area + * of the specified interpreter. + * + *------------------------------------------------------* + */ + +static int +ExecuteCallback (dataPtr, interp, op, buf, bufLen, transmit, preserve) + TransformChannelData* dataPtr; /* Transformation with the callback */ + Tcl_Interp* interp; /* Current interpreter, possibly NULL */ + unsigned char* op; /* Operation invoking the callback */ + unsigned char* buf; /* Buffer to give to the script. */ + int bufLen; /* Ands its length */ + int transmit; /* Flag, determines whether the result + * of the callback is sent to the + * underlying channel or not. */ + int preserve; /* Flag. If true the procedure will + * preserver the result state of all + * accessed interpreters. */ +{ + /* + * Step 1, create the complete command to execute. Do this by appending + * operation and buffer to operate upon to a copy of the callback + * definition. We *cannot* create a list containing 3 objects and then use + * 'Tcl_EvalObjv', because the command may contain additional prefixed + * arguments. Feather's curried commands would come in handy here. + */ + + Tcl_Obj* resObj; /* See below, switch (transmit) */ + int resLen; + unsigned char* resBuf; + Tcl_SavedResult ciSave; + + int res = TCL_OK; + Tcl_Obj* command = Tcl_DuplicateObj (dataPtr->command); + Tcl_Obj* temp; + + + if (preserve) { + Tcl_SaveResult (dataPtr->interp, &ciSave); + } + + if (command == (Tcl_Obj*) NULL) { + /* Memory allocation problem */ + res = TCL_ERROR; + goto cleanup; + } + + Tcl_IncrRefCount(command); + + temp = Tcl_NewStringObj((char*) op, -1); + + if (temp == (Tcl_Obj*) NULL) { + /* Memory allocation problem */ + res = TCL_ERROR; + goto cleanup; + } + + res = Tcl_ListObjAppendElement(dataPtr->interp, command, temp); + + if (res != TCL_OK) + goto cleanup; + + /* + * Use a byte-array to prevent the misinterpretation of binary data + * coming through as UTF while at the tcl level. + */ + + temp = Tcl_NewByteArrayObj(buf, bufLen); + + if (temp == (Tcl_Obj*) NULL) { + /* Memory allocation problem */ + res = TCL_ERROR; + goto cleanup; + } + + res = Tcl_ListObjAppendElement (dataPtr->interp, command, temp); + + if (res != TCL_OK) + goto cleanup; + + /* + * Step 2, execute the command at the global level of the interpreter + * used to create the transformation. Destroy the command afterward. + * If an error occured and the current interpreter is defined and not + * equal to the interpreter for the callback, then copy the error + * message into current interpreter. Don't copy if in preservation mode. + */ + + res = Tcl_GlobalEvalObj (dataPtr->interp, command); + Tcl_DecrRefCount (command); + command = (Tcl_Obj*) NULL; + + if ((res != TCL_OK) && (interp != NO_INTERP) && + (dataPtr->interp != interp) && !preserve) { + Tcl_SetObjResult(interp, Tcl_GetObjResult(dataPtr->interp)); + return res; + } + + /* + * Step 3, transmit a possible conversion result to the underlying + * channel, or ourselves. + */ + + switch (transmit) { + case TRANSMIT_DONT: + /* nothing to do */ + break; + + case TRANSMIT_DOWN: + resObj = Tcl_GetObjResult(dataPtr->interp); + resBuf = (unsigned char*) Tcl_GetByteArrayFromObj(resObj, &resLen); + Tcl_WriteRaw(Tcl_GetStackedChannel(dataPtr->self), + (char*) resBuf, resLen); + break; + + case TRANSMIT_SELF: + resObj = Tcl_GetObjResult (dataPtr->interp); + resBuf = (unsigned char*) Tcl_GetByteArrayFromObj(resObj, &resLen); + Tcl_WriteRaw(dataPtr->self, (char*) resBuf, resLen); + break; + + case TRANSMIT_IBUF: + resObj = Tcl_GetObjResult (dataPtr->interp); + resBuf = (unsigned char*) Tcl_GetByteArrayFromObj(resObj, &resLen); + ResultAdd(&dataPtr->result, resBuf, resLen); + break; + + case TRANSMIT_NUM: + /* Interpret result as integer number */ + resObj = Tcl_GetObjResult (dataPtr->interp); + Tcl_GetIntFromObj(dataPtr->interp, resObj, &dataPtr->maxRead); + break; + } + + Tcl_ResetResult(dataPtr->interp); + + if (preserve) { + Tcl_RestoreResult(dataPtr->interp, &ciSave); + } + + return res; + + cleanup: + if (preserve) { + Tcl_RestoreResult(dataPtr->interp, &ciSave); + } + + if (command != (Tcl_Obj*) NULL) { + Tcl_DecrRefCount(command); + } + + return res; +} + +/* + *------------------------------------------------------* + * + * TransformBlockModeProc -- + * + * Trap handler. Called by the generic IO system + * during option processing to change the blocking + * mode of the channel. + * + * Sideeffects: + * Forwards the request to the underlying + * channel. + * + * Result: + * 0 if successful, errno when failed. + * + *------------------------------------------------------* + */ + +static int +TransformBlockModeProc (instanceData, mode) + ClientData instanceData; /* State of transformation */ + int mode; /* New blocking mode */ +{ + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + + if (mode == TCL_MODE_NONBLOCKING) { + dataPtr->flags |= CHANNEL_ASYNC; + } else { + dataPtr->flags &= ~(CHANNEL_ASYNC); + } + return 0; +} + +/* + *------------------------------------------------------* + * + * TransformCloseProc -- + * + * Trap handler. Called by the generic IO system + * during destruction of the transformation channel. + * + * Sideeffects: + * Releases the memory allocated in + * 'Tcl_TransformObjCmd'. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + +static int +TransformCloseProc (instanceData, interp) + ClientData instanceData; + Tcl_Interp* interp; +{ + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + + /* + * Important: In this procedure 'dataPtr->self' already points to + * the underlying channel. + */ + + /* + * There is no need to cancel an existing channel handler, this is already + * done. Either by 'Tcl_UnstackChannel' or by the general cleanup in + * 'Tcl_Close'. + * + * But we have to cancel an active timer to prevent it from firing on the + * removed channel. + */ + + if (dataPtr->timer != (Tcl_TimerToken) NULL) { + Tcl_DeleteTimerHandler (dataPtr->timer); + dataPtr->timer = (Tcl_TimerToken) NULL; + } + + /* + * Now flush data waiting in internal buffers to output and input. The + * input must be done despite the fact that there is no real receiver + * for it anymore. But the scripts might have sideeffects other parts + * of the system rely on (f.e. signaling the close to interested parties). + */ + + if (dataPtr->mode & TCL_WRITABLE) { + ExecuteCallback (dataPtr, interp, A_FLUSH_WRITE, + NULL, 0, TRANSMIT_DOWN, 1); + } + + if ((dataPtr->mode & TCL_READABLE) && !dataPtr->readIsFlushed) { + dataPtr->readIsFlushed = 1; + ExecuteCallback (dataPtr, interp, A_FLUSH_READ, + NULL, 0, TRANSMIT_IBUF, 1); + } + + if (dataPtr->mode & TCL_WRITABLE) { + ExecuteCallback (dataPtr, interp, A_DELETE_WRITE, + NULL, 0, TRANSMIT_DONT, 1); + } + + if (dataPtr->mode & TCL_READABLE) { + ExecuteCallback (dataPtr, interp, A_DELETE_READ, + NULL, 0, TRANSMIT_DONT, 1); + } + + /* + * General cleanup + */ + + ResultClear(&dataPtr->result); + Tcl_DecrRefCount(dataPtr->command); + ckfree((VOID*) dataPtr); + + return TCL_OK; +} + +/* + *------------------------------------------------------* + * + * TransformInputProc -- + * + * Called by the generic IO system to convert read data. + * + * Sideeffects: + * As defined by the conversion. + * + * Result: + * A transformed buffer. + * + *------------------------------------------------------* + */ + +static int +TransformInputProc (instanceData, buf, toRead, errorCodePtr) + ClientData instanceData; + char* buf; + int toRead; + int* errorCodePtr; +{ + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + int gotBytes, read, res, copied; + Tcl_Channel downChan; + + /* should assert (dataPtr->mode & TCL_READABLE) */ + + if (toRead == 0) { + /* Catch a no-op. + */ + return 0; + } + + gotBytes = 0; + downChan = Tcl_GetStackedChannel(dataPtr->self); + + while (toRead > 0) { + /* + * Loop until the request is satisfied (or no data is available from + * below, possibly EOF). + */ + + copied = ResultCopy (&dataPtr->result, UCHARP (buf), toRead); + + toRead -= copied; + buf += copied; + gotBytes += copied; + + if (toRead == 0) { + /* The request was completely satisfied from our buffers. + * We can break out of the loop and return to the caller. + */ + return gotBytes; + } + + /* + * Length (dataPtr->result) == 0, toRead > 0 here . Use the incoming + * 'buf'! as target to store the intermediary information read + * from the underlying channel. + * + * Ask the tcl level how much data it allows us to read from + * the underlying channel. This feature allows the transform to + * signal EOF upstream although there is none downstream. Useful + * to control an unbounded 'fcopy', either through counting bytes, + * or by pattern matching. + */ + + ExecuteCallback (dataPtr, NO_INTERP, A_QUERY_MAXREAD, + NULL, 0, TRANSMIT_NUM /* -> maxRead */, 1); + + if (dataPtr->maxRead >= 0) { + if (dataPtr->maxRead < toRead) { + toRead = dataPtr->maxRead; + } + } /* else: 'maxRead < 0' == Accept the current value of toRead */ + + if (toRead <= 0) { + return gotBytes; + } + + read = Tcl_ReadRaw(downChan, buf, toRead); + + if (read < 0) { + /* Report errors to caller. EAGAIN is a special situation. + * If we had some data before we report that instead of the + * request to re-try. + */ + + if ((Tcl_GetErrno() == EAGAIN) && (gotBytes > 0)) { + return gotBytes; + } + + *errorCodePtr = Tcl_GetErrno(); + return -1; + } + + if (read == 0) { + /* + * Check wether we hit on EOF in the underlying channel or + * not. If not differentiate between blocking and + * non-blocking modes. In non-blocking mode we ran + * temporarily out of data. Signal this to the caller via + * EWOULDBLOCK and error return (-1). In the other cases + * we simply return what we got and let the caller wait + * for more. On the other hand, if we got an EOF we have + * to convert and flush all waiting partial data. + */ + + if (! Tcl_Eof (downChan)) { + if ((gotBytes == 0) && (dataPtr->flags & CHANNEL_ASYNC)) { + *errorCodePtr = EWOULDBLOCK; + return -1; + } else { + return gotBytes; + } + } else { + if (dataPtr->readIsFlushed) { + /* Already flushed, nothing to do anymore + */ + return gotBytes; + } + + dataPtr->readIsFlushed = 1; + + ExecuteCallback (dataPtr, NO_INTERP, A_FLUSH_READ, + NULL, 0, TRANSMIT_IBUF, P_PRESERVE); + + if (ResultLength (&dataPtr->result) == 0) { + /* we had nothing to flush */ + return gotBytes; + } + + continue; /* at: while (toRead > 0) */ + } + } /* read == 0 */ + + /* Transform the read chunk and add the result to our + * read buffer (dataPtr->result) + */ + + res = ExecuteCallback (dataPtr, NO_INTERP, A_READ, + UCHARP (buf), read, TRANSMIT_IBUF, + P_PRESERVE); + + if (res != TCL_OK) { + *errorCodePtr = EINVAL; + return -1; + } + } /* while toRead > 0 */ + + return gotBytes; +} + +/* + *------------------------------------------------------* + * + * TransformOutputProc -- + * + * Called by the generic IO system to convert data + * waiting to be written. + * + * Sideeffects: + * As defined by the transformation. + * + * Result: + * A transformed buffer. + * + *------------------------------------------------------* + */ + +static int +TransformOutputProc (instanceData, buf, toWrite, errorCodePtr) + ClientData instanceData; + char* buf; + int toWrite; + int* errorCodePtr; +{ + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + int res; + + /* should assert (dataPtr->mode & TCL_WRITABLE) */ + + if (toWrite == 0) { + /* Catch a no-op. + */ + return 0; + } + + res = ExecuteCallback (dataPtr, NO_INTERP, A_WRITE, + UCHARP (buf), toWrite, + TRANSMIT_DOWN, P_NO_PRESERVE); + + if (res != TCL_OK) { + *errorCodePtr = EINVAL; + return -1; + } + + return toWrite; +} + +/* + *------------------------------------------------------* + * + * TransformSeekProc -- + * + * This procedure is called by the generic IO level + * to move the access point in a channel. + * + * Sideeffects: + * Moves the location at which the channel + * will be accessed in future operations. + * Flushes all transformation buffers, then + * forwards it to the underlying channel. + * + * Result: + * -1 if failed, the new position if + * successful. An output argument contains + * the POSIX error code if an error + * occurred, or zero. + * + *------------------------------------------------------* + */ + +static int +TransformSeekProc (instanceData, offset, mode, errorCodePtr) + ClientData instanceData; /* The channel to manipulate */ + long offset; /* Size of movement. */ + int mode; /* How to move */ + int* errorCodePtr; /* Location of error flag. */ +{ + int result; + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + Tcl_Channel parent = Tcl_GetStackedChannel(dataPtr->self); + Tcl_ChannelType* parentType = Tcl_GetChannelType(parent); + Tcl_DriverSeekProc* parentSeekProc = Tcl_ChannelSeekProc(parentType); + + if ((offset == 0) && (mode == SEEK_CUR)) { + /* This is no seek but a request to tell the caller the current + * location. Simply pass the request down. + */ + + result = (*parentSeekProc) (Tcl_GetChannelInstanceData(parent), + offset, mode, errorCodePtr); + return result; + } + + /* + * It is a real request to change the position. Flush all data waiting + * for output and discard everything in the input buffers. Then pass + * the request down, unchanged. + */ + + if (dataPtr->mode & TCL_WRITABLE) { + ExecuteCallback (dataPtr, NO_INTERP, A_FLUSH_WRITE, + NULL, 0, TRANSMIT_DOWN, P_NO_PRESERVE); + } + + if (dataPtr->mode & TCL_READABLE) { + ExecuteCallback (dataPtr, NO_INTERP, A_CLEAR_READ, + NULL, 0, TRANSMIT_DONT, P_NO_PRESERVE); + ResultClear(&dataPtr->result); + dataPtr->readIsFlushed = 0; + } + + result = (*parentSeekProc) (Tcl_GetChannelInstanceData(parent), + offset, mode, errorCodePtr); + return result; +} + +/* + *------------------------------------------------------* + * + * TransformSetOptionProc -- + * + * Called by generic layer to handle the reconfi- + * guration of channel specific options. As this + * channel type does not have such, it simply passes + * all requests downstream. + * + * Sideeffects: + * As defined by the channel downstream. + * + * Result: + * A standard TCL error code. + * + *------------------------------------------------------* + */ + +static int +TransformSetOptionProc (instanceData, interp, optionName, value) + ClientData instanceData; + Tcl_Interp *interp; + char *optionName; + char *value; +{ + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + Tcl_Channel downChan = Tcl_GetStackedChannel(dataPtr->self); + Tcl_DriverSetOptionProc *setOptionProc; + + setOptionProc = Tcl_ChannelSetOptionProc(Tcl_GetChannelType(downChan)); + if (setOptionProc != NULL) { + return (*setOptionProc)(Tcl_GetChannelInstanceData(downChan), + interp, optionName, value); + } + return TCL_ERROR; +} + +/* + *------------------------------------------------------* + * + * TransformGetOptionProc -- + * + * Called by generic layer to handle requests for + * the values of channel specific options. As this + * channel type does not have such, it simply passes + * all requests downstream. + * + * Sideeffects: + * As defined by the channel downstream. + * + * Result: + * A standard TCL error code. + * + *------------------------------------------------------* + */ + +static int +TransformGetOptionProc (instanceData, interp, optionName, dsPtr) + ClientData instanceData; + Tcl_Interp* interp; + char* optionName; + Tcl_DString* dsPtr; +{ + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + Tcl_Channel downChan = Tcl_GetStackedChannel(dataPtr->self); + Tcl_DriverGetOptionProc *getOptionProc; + + getOptionProc = Tcl_ChannelGetOptionProc(Tcl_GetChannelType(downChan)); + if (getOptionProc != NULL) { + return (*getOptionProc)(Tcl_GetChannelInstanceData(downChan), + interp, optionName, dsPtr); + } else if (optionName == (char*) NULL) { + /* + * Request is query for all options, this is ok. + */ + return TCL_OK; + } + /* + * Request for a specific option has to fail, we don't have any. + */ + return TCL_ERROR; +} + +/* + *------------------------------------------------------* + * + * TransformWatchProc -- + * + * Initialize the notifier to watch for events from + * this channel. + * + * Sideeffects: + * Sets up the notifier so that a future + * event on the channel will be seen by Tcl. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + /* ARGSUSED */ +static void +TransformWatchProc (instanceData, mask) + ClientData instanceData; /* Channel to watch */ + int mask; /* Events of interest */ +{ + /* The caller expressed interest in events occuring for this + * channel. We are forwarding the call to the underlying + * channel now. + */ + + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + Tcl_Channel downChan; + + dataPtr->watchMask = mask; + + /* No channel handlers any more. We will be notified automatically + * about events on the channel below via a call to our + * 'TransformNotifyProc'. But we have to pass the interest down now. + * We are allowed to add additional 'interest' to the mask if we want + * to. But this transformation has no such interest. It just passes + * the request down, unchanged. + */ + + downChan = Tcl_GetStackedChannel(dataPtr->self); + + (Tcl_GetChannelType(downChan)) + ->watchProc(Tcl_GetChannelInstanceData(downChan), mask); + + /* + * Management of the internal timer. + */ + + if ((dataPtr->timer != (Tcl_TimerToken) NULL) && + (!(mask & TCL_READABLE) || (ResultLength(&dataPtr->result) == 0))) { + + /* A pending timer exists, but either is there no (more) + * interest in the events it generates or nothing is availablee + * for reading, so remove it. + */ + + Tcl_DeleteTimerHandler (dataPtr->timer); + dataPtr->timer = (Tcl_TimerToken) NULL; + } + + if ((dataPtr->timer == (Tcl_TimerToken) NULL) && + (mask & TCL_READABLE) && (ResultLength (&dataPtr->result) > 0)) { + + /* There is no pending timer, but there is interest in readable + * events and we actually have data waiting, so generate a timer + * to flush that. + */ + + dataPtr->timer = Tcl_CreateTimerHandler (FLUSH_DELAY, + TransformChannelHandlerTimer, (ClientData) dataPtr); + } +} + +/* + *------------------------------------------------------* + * + * TransformGetFileHandleProc -- + * + * Called from Tcl_GetChannelHandle to retrieve + * OS specific file handle from inside this channel. + * + * Sideeffects: + * None. + * + * Result: + * The appropriate Tcl_File or NULL if not + * present. + * + *------------------------------------------------------* + */ +static int +TransformGetFileHandleProc (instanceData, direction, handlePtr) + ClientData instanceData; /* Channel to query */ + int direction; /* Direction of interest */ + ClientData* handlePtr; /* Place to store the handle into */ +{ + /* + * Return the handle belonging to parent channel. + * IOW, pass the request down and the result up. + */ + + TransformChannelData* dataPtr = (TransformChannelData*) instanceData; + + return Tcl_GetChannelHandle(Tcl_GetStackedChannel(dataPtr->self), + direction, handlePtr); +} + +/* + *------------------------------------------------------* + * + * TransformNotifyProc -- + * + * ------------------------------------------------* + * Handler called by Tcl to inform us of activity + * on the underlying channel. + * ------------------------------------------------* + * + * Sideeffects: + * May process the incoming event by itself. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + +static int +TransformNotifyProc (clientData, mask) + ClientData clientData; /* The state of the notified transformation */ + int mask; /* The mask of occuring events */ +{ + TransformChannelData* dataPtr = (TransformChannelData*) clientData; + + /* + * An event occured in the underlying channel. This + * transformation doesn't process such events thus returns the + * incoming mask unchanged. + */ + + if (dataPtr->timer != (Tcl_TimerToken) NULL) { + /* + * Delete an existing timer. It was not fired, yet we are + * here, so the channel below generated such an event and we + * don't have to. The renewal of the interest after the + * execution of channel handlers will eventually cause us to + * recreate the timer (in TransformWatchProc). + */ + + Tcl_DeleteTimerHandler (dataPtr->timer); + dataPtr->timer = (Tcl_TimerToken) NULL; + } + + return mask; +} + +/* + *------------------------------------------------------* + * + * TransformChannelHandlerTimer -- + * + * Called by the notifier (-> timer) to flush out + * information waiting in the input buffer. + * + * Sideeffects: + * As of 'Tcl_NotifyChannel'. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + +static void +TransformChannelHandlerTimer (clientData) + ClientData clientData; /* Transformation to query */ +{ + TransformChannelData* dataPtr = (TransformChannelData*) clientData; + + dataPtr->timer = (Tcl_TimerToken) NULL; + + if (!(dataPtr->watchMask & TCL_READABLE) || + (ResultLength (&dataPtr->result) == 0)) { + /* The timer fired, but either is there no (more) + * interest in the events it generates or nothing is available + * for reading, so ignore it and don't recreate it. + */ + + return; + } + + Tcl_NotifyChannel(dataPtr->self, TCL_READABLE); +} + +/* + *------------------------------------------------------* + * + * ResultClear -- + * + * Deallocates any memory allocated by 'ResultAdd'. + * + * Sideeffects: + * See above. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + +static void +ResultClear (r) + ResultBuffer* r; /* Reference to the buffer to clear out */ +{ + r->used = 0; + + if (r->allocated) { + ckfree((char*) r->buf); + r->buf = UCHARP (NULL); + r->allocated = 0; + } +} + +/* + *------------------------------------------------------* + * + * ResultInit -- + * + * Initializes the specified buffer structure. The + * structure will contain valid information for an + * emtpy buffer. + * + * Sideeffects: + * See above. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + +static void +ResultInit (r) + ResultBuffer* r; /* Reference to the structure to initialize */ +{ + r->used = 0; + r->allocated = 0; + r->buf = UCHARP (NULL); +} + +/* + *------------------------------------------------------* + * + * ResultLength -- + * + * Returns the number of bytes stored in the buffer. + * + * Sideeffects: + * None. + * + * Result: + * An integer, see above too. + * + *------------------------------------------------------* + */ + +static int +ResultLength (r) + ResultBuffer* r; /* The structure to query */ +{ + return r->used; +} + +/* + *------------------------------------------------------* + * + * ResultCopy -- + * + * Copies the requested number of bytes from the + * buffer into the specified array and removes them + * from the buffer afterward. Copies less if there + * is not enough data in the buffer. + * + * Sideeffects: + * See above. + * + * Result: + * The number of actually copied bytes, + * possibly less than 'toRead'. + * + *------------------------------------------------------* + */ + +static int +ResultCopy (r, buf, toRead) + ResultBuffer* r; /* The buffer to read from */ + unsigned char* buf; /* The buffer to copy into */ + int toRead; /* Number of requested bytes */ +{ + if (r->used == 0) { + /* Nothing to copy in the case of an empty buffer. + */ + + return 0; + } + + if (r->used == toRead) { + /* We have just enough. Copy everything to the caller. + */ + + memcpy ((VOID*) buf, (VOID*) r->buf, (size_t) toRead); + r->used = 0; + return toRead; + } + + if (r->used > toRead) { + /* The internal buffer contains more than requested. + * Copy the requested subset to the caller, and shift + * the remaining bytes down. + */ + + memcpy ((VOID*) buf, (VOID*) r->buf, (size_t) toRead); + memmove ((VOID*) r->buf, (VOID*) (r->buf + toRead), + (size_t) r->used - toRead); + + r->used -= toRead; + return toRead; + } + + /* There is not enough in the buffer to satisfy the caller, so + * take everything. + */ + + memcpy((VOID*) buf, (VOID*) r->buf, (size_t) r->used); + toRead = r->used; + r->used = 0; + return toRead; +} + +/* + *------------------------------------------------------* + * + * ResultAdd -- + * + * Adds the bytes in the specified array to the + * buffer, by appending it. + * + * Sideeffects: + * See above. + * + * Result: + * None. + * + *------------------------------------------------------* + */ + +static void +ResultAdd (r, buf, toWrite) + ResultBuffer* r; /* The buffer to extend */ + unsigned char* buf; /* The buffer to read from */ + int toWrite; /* The number of bytes in 'buf' */ +{ + if ((r->used + toWrite) > r->allocated) { + /* Extension of the internal buffer is required. + */ + + if (r->allocated == 0) { + r->allocated = toWrite + INCREMENT; + r->buf = UCHARP (ckalloc((unsigned) r->allocated)); + } else { + r->allocated += toWrite + INCREMENT; + r->buf = UCHARP (ckrealloc((char*) r->buf, + (unsigned) r->allocated)); + } + } + + /* now copy data */ + memcpy(r->buf + r->used, buf, (size_t) toWrite); + r->used += toWrite; +} Index: generic/tclIndexObj.c ================================================================== --- generic/tclIndexObj.c +++ generic/tclIndexObj.c @@ -8,11 +8,11 @@ * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIndexObj.c,v 1.4 1999/06/28 23:49:31 redman Exp $ + * RCS: @(#) $Id: tclIndexObj.c,v 1.4.10.2 2001/04/03 22:54:37 hobbs Exp $ */ #include "tclInt.h" /* @@ -33,10 +33,20 @@ (Tcl_DupInternalRepProc *) NULL, /* dupIntRepProc */ (Tcl_UpdateStringProc *) NULL, /* updateStringProc */ SetIndexFromAny /* setFromAnyProc */ }; +/* + * DKF - Just noting that the data format used in objects with the + * above type is that the ptr1 field will contain a pointer to the + * table that the last lookup was performed in, and the ptr2 field + * will contain the sizeof(char) offset of the string within that + * table. Note that we assume that each table is only ever called + * with a single offset, but this is a pretty safe assumption in + * practise... + */ + /* * Boolean flag indicating whether or not the tclIndexType object * type has been registered with the Tcl compiler. */ @@ -88,11 +98,12 @@ * is cached). */ if ((objPtr->typePtr == &tclIndexType) && (objPtr->internalRep.twoPtrValue.ptr1 == (VOID *) tablePtr)) { - *indexPtr = (int) objPtr->internalRep.twoPtrValue.ptr2; + *indexPtr = ((int) objPtr->internalRep.twoPtrValue.ptr2) + / sizeof(char *); return TCL_OK; } return Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, sizeof(char *), msg, flags, indexPtr); } @@ -149,11 +160,11 @@ * See if there is a valid cached result from a previous lookup. */ if ((objPtr->typePtr == &tclIndexType) && (objPtr->internalRep.twoPtrValue.ptr1 == (VOID *) tablePtr)) { - *indexPtr = (int) objPtr->internalRep.twoPtrValue.ptr2; + *indexPtr = ((int) objPtr->internalRep.twoPtrValue.ptr2) / offset; return TCL_OK; } /* * Lookup the value of the object in the table. Accept unique @@ -181,11 +192,11 @@ if (key[0] == '\0') { goto error; } for (entryPtr = tablePtr, i = 0; *entryPtr != NULL; - entryPtr = (char **) ((long) entryPtr + offset), i++) { + entryPtr = (char **) ((size_t) entryPtr + offset), i++) { for (p1 = key, p2 = *entryPtr; *p1 == *p2; p1++, p2++) { if (*p1 == 0) { index = i; goto done; } @@ -211,11 +222,14 @@ if ((objPtr->typePtr != NULL) && (objPtr->typePtr->freeIntRepProc != NULL)) { objPtr->typePtr->freeIntRepProc(objPtr); } objPtr->internalRep.twoPtrValue.ptr1 = (VOID *) tablePtr; - objPtr->internalRep.twoPtrValue.ptr2 = (VOID *) index; + /* + * Make sure to account for offsets != sizeof(char *). [Bug 5153] + */ + objPtr->internalRep.twoPtrValue.ptr2 = (VOID *) (index * offset); objPtr->typePtr = &tclIndexType; *indexPtr = index; return TCL_OK; error: @@ -223,14 +237,14 @@ int count; resultPtr = Tcl_GetObjResult(interp); Tcl_AppendStringsToObj(resultPtr, (numAbbrev > 1) ? "ambiguous " : "bad ", msg, " \"", key, "\": must be ", *tablePtr, (char *) NULL); - for (entryPtr = (char **) ((long) tablePtr + offset), count = 0; + for (entryPtr = (char **) ((size_t) tablePtr + offset), count = 0; *entryPtr != NULL; - entryPtr = (char **) ((long) entryPtr + offset), count++) { - if ((*((char **) ((long) entryPtr + offset))) == NULL) { + entryPtr = (char **) ((size_t) entryPtr + offset), count++) { + if ((*((char **) ((size_t) entryPtr + offset))) == NULL) { Tcl_AppendStringsToObj(resultPtr, (count > 0) ? ", or " : " or ", *entryPtr, (char *) NULL); } else { Tcl_AppendStringsToObj(resultPtr, ", ", *entryPtr, @@ -308,11 +322,11 @@ * leading objects in objv. The * message may be NULL. */ { Tcl_Obj *objPtr; char **tablePtr; - int i; + int i, offset; objPtr = Tcl_GetObjResult(interp); Tcl_AppendToObj(objPtr, "wrong # args: should be \"", -1); for (i = 0; i < objc; i++) { /* @@ -321,21 +335,28 @@ * abbreviated. Otherwise, just use the string rep. */ if (objv[i]->typePtr == &tclIndexType) { tablePtr = ((char **) objv[i]->internalRep.twoPtrValue.ptr1); + offset = ((int) objv[i]->internalRep.twoPtrValue.ptr2); Tcl_AppendStringsToObj(objPtr, - tablePtr[(int) objv[i]->internalRep.twoPtrValue.ptr2], + *((char **)(((char *)tablePtr)+offset)), (char *) NULL); } else { Tcl_AppendStringsToObj(objPtr, Tcl_GetString(objv[i]), (char *) NULL); } - if (i < (objc - 1)) { + + /* + * Append a space character (" ") if there is more text to follow + * (either another element from objv, or the message string). + */ + if ((i < (objc - 1)) || message) { Tcl_AppendStringsToObj(objPtr, " ", (char *) NULL); } } + if (message) { - Tcl_AppendStringsToObj(objPtr, " ", message, (char *) NULL); + Tcl_AppendStringsToObj(objPtr, message, (char *) NULL); } Tcl_AppendStringsToObj(objPtr, "\"", (char *) NULL); } Index: generic/tclInt.decls ================================================================== --- generic/tclInt.decls +++ generic/tclInt.decls @@ -8,11 +8,11 @@ # # Copyright (c) 1998-1999 by Scriptics Corporation. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: tclInt.decls,v 1.20 2000/03/31 08:52:04 hobbs Exp $ +# RCS: @(#) $Id: tclInt.decls,v 1.20.2.2 2001/04/04 21:22:18 hobbs Exp $ library tcl # Define the unsupported generic interfaces. @@ -575,18 +575,20 @@ } declare 153 generic { Tcl_Obj *TclGetLibraryPath(void) } -declare 154 generic { - int TclTestChannelCmd(ClientData clientData, - Tcl_Interp *interp, int argc, char **argv) -} -declare 155 generic { - int TclTestChannelEventCmd(ClientData clientData, \ - Tcl_Interp *interp, int argc, char **argv) -} +# moved to tclTest.c in 8.3.2/8.4a2 +#declare 154 generic { +# int TclTestChannelCmd(ClientData clientData, +# Tcl_Interp *interp, int argc, char **argv) +#} +#declare 155 generic { +# int TclTestChannelEventCmd(ClientData clientData, \ +# Tcl_Interp *interp, int argc, char **argv) +#} + declare 156 generic { void TclRegError (Tcl_Interp *interp, char *msg, \ int status) } declare 157 generic { @@ -600,10 +602,19 @@ } declare 160 generic { int TclpMatchFilesTypes(Tcl_Interp *interp, char *separators, \ Tcl_DString *dirPtr, char *pattern, char *tail, GlobTypeData *types) } + +# new in 8.3.2/8.4a2 +declare 161 generic { + int TclChannelTransform(Tcl_Interp *interp, Tcl_Channel chan, \ + Tcl_Obj *cmdObjPtr) +} +declare 162 generic { + void TclChannelEventScriptInvoker(ClientData clientData, int flags) +} ############################################################################## # Define the platform specific internal Tcl interface. These functions are # only available on the designated platform. @@ -637,27 +648,27 @@ declare 6 mac { OSErr FSpFindFolder(short vRefNum, OSType folderType, \ Boolean createFolder, FSSpec *spec) } declare 7 mac { - void GetGlobalMouse(Point *mouse) + void GetGlobalMouseTcl(Point *mouse) } # The following routines are utility functions in Tcl. They are exported # here because they are needed in Tk. They are not officially supported, # however. The first set are from the MoreFiles package. declare 8 mac { - pascal OSErr FSpGetDirectoryID(CONST FSSpec *spec, long *theDirID, \ + pascal OSErr FSpGetDirectoryIDTcl(CONST FSSpec *spec, long *theDirID, \ Boolean *isDirectory) } declare 9 mac { - pascal short FSpOpenResFileCompat(CONST FSSpec *spec, \ + pascal short FSpOpenResFileCompatTcl(CONST FSSpec *spec, \ SignedByte permission) } declare 10 mac { - pascal void FSpCreateResFileCompat(CONST FSSpec *spec, OSType creator, \ + pascal void FSpCreateResFileCompatTcl(CONST FSSpec *spec, OSType creator, \ OSType fileType, ScriptCode scriptTag) } # Like the MoreFiles routines these fix problems in the standard # Mac calls. These routines are from tclMacUtils.h. Index: generic/tclInt.h ================================================================== --- generic/tclInt.h +++ generic/tclInt.h @@ -9,11 +9,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclInt.h,v 1.42 2000/04/09 16:04:18 kupries Exp $ + * RCS: @(#) $Id: tclInt.h,v 1.42.2.1 2001/04/03 22:54:37 hobbs Exp $ */ #ifndef _TCLINT #define _TCLINT @@ -1547,10 +1547,12 @@ extern Tcl_Obj * tclFreeObjList; #ifdef TCL_COMPILE_STATS extern long tclObjsAlloced; extern long tclObjsFreed; +#define TCL_MAX_SHARED_OBJ_STATS 5 +extern long tclObjsShared[TCL_MAX_SHARED_OBJ_STATS]; #endif /* TCL_COMPILE_STATS */ /* * Pointer to a heap-allocated string of length zero that the Tcl core uses * as the value of an empty string representation for an object. This value Index: generic/tclIntDecls.h ================================================================== --- generic/tclIntDecls.h +++ generic/tclIntDecls.h @@ -9,11 +9,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIntDecls.h,v 1.19 1999/12/12 22:46:42 hobbs Exp $ + * RCS: @(#) $Id: tclIntDecls.h,v 1.19.2.1 2000/07/27 01:39:18 hobbs Exp $ */ #ifndef _TCLINTDECLS #define _TCLINTDECLS @@ -504,17 +504,12 @@ int index, int * startPtr, int * endPtr)); /* 152 */ EXTERN void TclSetLibraryPath _ANSI_ARGS_((Tcl_Obj * pathPtr)); /* 153 */ EXTERN Tcl_Obj * TclGetLibraryPath _ANSI_ARGS_((void)); -/* 154 */ -EXTERN int TclTestChannelCmd _ANSI_ARGS_((ClientData clientData, - Tcl_Interp * interp, int argc, char ** argv)); -/* 155 */ -EXTERN int TclTestChannelEventCmd _ANSI_ARGS_(( - ClientData clientData, Tcl_Interp * interp, - int argc, char ** argv)); +/* Slot 154 is reserved */ +/* Slot 155 is reserved */ /* 156 */ EXTERN void TclRegError _ANSI_ARGS_((Tcl_Interp * interp, char * msg, int status)); /* 157 */ EXTERN Var * TclVarTraceExists _ANSI_ARGS_((Tcl_Interp * interp, @@ -527,10 +522,16 @@ /* 160 */ EXTERN int TclpMatchFilesTypes _ANSI_ARGS_((Tcl_Interp * interp, char * separators, Tcl_DString * dirPtr, char * pattern, char * tail, GlobTypeData * types)); +/* 161 */ +EXTERN int TclChannelTransform _ANSI_ARGS_((Tcl_Interp * interp, + Tcl_Channel chan, Tcl_Obj * cmdObjPtr)); +/* 162 */ +EXTERN void TclChannelEventScriptInvoker _ANSI_ARGS_(( + ClientData clientData, int flags)); typedef struct TclIntStubs { int magic; struct TclIntStubHooks *hooks; @@ -718,17 +719,19 @@ void (*tclHandleRelease) _ANSI_ARGS_((TclHandle handle)); /* 149 */ int (*tclRegAbout) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_RegExp re)); /* 150 */ void (*tclRegExpRangeUniChar) _ANSI_ARGS_((Tcl_RegExp re, int index, int * startPtr, int * endPtr)); /* 151 */ void (*tclSetLibraryPath) _ANSI_ARGS_((Tcl_Obj * pathPtr)); /* 152 */ Tcl_Obj * (*tclGetLibraryPath) _ANSI_ARGS_((void)); /* 153 */ - int (*tclTestChannelCmd) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, int argc, char ** argv)); /* 154 */ - int (*tclTestChannelEventCmd) _ANSI_ARGS_((ClientData clientData, Tcl_Interp * interp, int argc, char ** argv)); /* 155 */ + void *reserved154; + void *reserved155; void (*tclRegError) _ANSI_ARGS_((Tcl_Interp * interp, char * msg, int status)); /* 156 */ Var * (*tclVarTraceExists) _ANSI_ARGS_((Tcl_Interp * interp, char * varName)); /* 157 */ void (*tclSetStartupScriptFileName) _ANSI_ARGS_((char * filename)); /* 158 */ char * (*tclGetStartupScriptFileName) _ANSI_ARGS_((void)); /* 159 */ int (*tclpMatchFilesTypes) _ANSI_ARGS_((Tcl_Interp * interp, char * separators, Tcl_DString * dirPtr, char * pattern, char * tail, GlobTypeData * types)); /* 160 */ + int (*tclChannelTransform) _ANSI_ARGS_((Tcl_Interp * interp, Tcl_Channel chan, Tcl_Obj * cmdObjPtr)); /* 161 */ + void (*tclChannelEventScriptInvoker) _ANSI_ARGS_((ClientData clientData, int flags)); /* 162 */ } TclIntStubs; #ifdef __cplusplus extern "C" { #endif @@ -1350,18 +1353,12 @@ #endif #ifndef TclGetLibraryPath #define TclGetLibraryPath \ (tclIntStubsPtr->tclGetLibraryPath) /* 153 */ #endif -#ifndef TclTestChannelCmd -#define TclTestChannelCmd \ - (tclIntStubsPtr->tclTestChannelCmd) /* 154 */ -#endif -#ifndef TclTestChannelEventCmd -#define TclTestChannelEventCmd \ - (tclIntStubsPtr->tclTestChannelEventCmd) /* 155 */ -#endif +/* Slot 154 is reserved */ +/* Slot 155 is reserved */ #ifndef TclRegError #define TclRegError \ (tclIntStubsPtr->tclRegError) /* 156 */ #endif #ifndef TclVarTraceExists @@ -1378,11 +1375,19 @@ #endif #ifndef TclpMatchFilesTypes #define TclpMatchFilesTypes \ (tclIntStubsPtr->tclpMatchFilesTypes) /* 160 */ #endif +#ifndef TclChannelTransform +#define TclChannelTransform \ + (tclIntStubsPtr->tclChannelTransform) /* 161 */ +#endif +#ifndef TclChannelEventScriptInvoker +#define TclChannelEventScriptInvoker \ + (tclIntStubsPtr->tclChannelEventScriptInvoker) /* 162 */ +#endif #endif /* defined(USE_TCL_STUBS) && !defined(USE_TCL_STUB_PROCS) */ /* !END!: Do not edit above this line. */ #endif /* _TCLINTDECLS */ Index: generic/tclIntPlatDecls.h ================================================================== --- generic/tclIntPlatDecls.h +++ generic/tclIntPlatDecls.h @@ -7,11 +7,11 @@ * versions. Use at your own risk. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * - * RCS: @(#) $Id: tclIntPlatDecls.h,v 1.8 2000/03/31 08:52:05 hobbs Exp $ + * RCS: @(#) $Id: tclIntPlatDecls.h,v 1.8.2.1 2001/04/04 21:22:18 hobbs Exp $ */ #ifndef _TCLINTPLATDECLS #define _TCLINTPLATDECLS @@ -146,19 +146,19 @@ /* 6 */ EXTERN OSErr FSpFindFolder _ANSI_ARGS_((short vRefNum, OSType folderType, Boolean createFolder, FSSpec * spec)); /* 7 */ -EXTERN void GetGlobalMouse _ANSI_ARGS_((Point * mouse)); +EXTERN void GetGlobalMouseTcl _ANSI_ARGS_((Point * mouse)); /* 8 */ -EXTERN pascal OSErr FSpGetDirectoryID _ANSI_ARGS_((CONST FSSpec * spec, +EXTERN pascal OSErr FSpGetDirectoryIDTcl _ANSI_ARGS_((CONST FSSpec * spec, long * theDirID, Boolean * isDirectory)); /* 9 */ -EXTERN pascal short FSpOpenResFileCompat _ANSI_ARGS_(( +EXTERN pascal short FSpOpenResFileCompatTcl _ANSI_ARGS_(( CONST FSSpec * spec, SignedByte permission)); /* 10 */ -EXTERN pascal void FSpCreateResFileCompat _ANSI_ARGS_(( +EXTERN pascal void FSpCreateResFileCompatTcl _ANSI_ARGS_(( CONST FSSpec * spec, OSType creator, OSType fileType, ScriptCode scriptTag)); /* 11 */ EXTERN int FSpLocationFromPath _ANSI_ARGS_((int length, CONST char * path, FSSpecPtr theSpec)); @@ -248,14 +248,14 @@ VOID * (*tclpSysRealloc) _ANSI_ARGS_((VOID * cp, unsigned int size)); /* 2 */ void (*tclpExit) _ANSI_ARGS_((int status)); /* 3 */ int (*fSpGetDefaultDir) _ANSI_ARGS_((FSSpecPtr theSpec)); /* 4 */ int (*fSpSetDefaultDir) _ANSI_ARGS_((FSSpecPtr theSpec)); /* 5 */ OSErr (*fSpFindFolder) _ANSI_ARGS_((short vRefNum, OSType folderType, Boolean createFolder, FSSpec * spec)); /* 6 */ - void (*getGlobalMouse) _ANSI_ARGS_((Point * mouse)); /* 7 */ - pascal OSErr (*fSpGetDirectoryID) _ANSI_ARGS_((CONST FSSpec * spec, long * theDirID, Boolean * isDirectory)); /* 8 */ - pascal short (*fSpOpenResFileCompat) _ANSI_ARGS_((CONST FSSpec * spec, SignedByte permission)); /* 9 */ - pascal void (*fSpCreateResFileCompat) _ANSI_ARGS_((CONST FSSpec * spec, OSType creator, OSType fileType, ScriptCode scriptTag)); /* 10 */ + void (*getGlobalMouseTcl) _ANSI_ARGS_((Point * mouse)); /* 7 */ + pascal OSErr (*fSpGetDirectoryIDTcl) _ANSI_ARGS_((CONST FSSpec * spec, long * theDirID, Boolean * isDirectory)); /* 8 */ + pascal short (*fSpOpenResFileCompatTcl) _ANSI_ARGS_((CONST FSSpec * spec, SignedByte permission)); /* 9 */ + pascal void (*fSpCreateResFileCompatTcl) _ANSI_ARGS_((CONST FSSpec * spec, OSType creator, OSType fileType, ScriptCode scriptTag)); /* 10 */ int (*fSpLocationFromPath) _ANSI_ARGS_((int length, CONST char * path, FSSpecPtr theSpec)); /* 11 */ OSErr (*fSpPathFromLocation) _ANSI_ARGS_((FSSpecPtr theSpec, int * length, Handle * fullPath)); /* 12 */ void (*tclMacExitHandler) _ANSI_ARGS_((void)); /* 13 */ void (*tclMacInitExitToShell) _ANSI_ARGS_((int usePatch)); /* 14 */ OSErr (*tclMacInstallExitToShellPatch) _ANSI_ARGS_((ExitToShellProcPtr newProc)); /* 15 */ @@ -450,25 +450,25 @@ #endif #ifndef FSpFindFolder #define FSpFindFolder \ (tclIntPlatStubsPtr->fSpFindFolder) /* 6 */ #endif -#ifndef GetGlobalMouse -#define GetGlobalMouse \ - (tclIntPlatStubsPtr->getGlobalMouse) /* 7 */ -#endif -#ifndef FSpGetDirectoryID -#define FSpGetDirectoryID \ - (tclIntPlatStubsPtr->fSpGetDirectoryID) /* 8 */ -#endif -#ifndef FSpOpenResFileCompat -#define FSpOpenResFileCompat \ - (tclIntPlatStubsPtr->fSpOpenResFileCompat) /* 9 */ -#endif -#ifndef FSpCreateResFileCompat -#define FSpCreateResFileCompat \ - (tclIntPlatStubsPtr->fSpCreateResFileCompat) /* 10 */ +#ifndef GetGlobalMouseTcl +#define GetGlobalMouseTcl \ + (tclIntPlatStubsPtr->getGlobalMouseTcl) /* 7 */ +#endif +#ifndef FSpGetDirectoryIDTcl +#define FSpGetDirectoryIDTcl \ + (tclIntPlatStubsPtr->fSpGetDirectoryIDTcl) /* 8 */ +#endif +#ifndef FSpOpenResFileCompatTcl +#define FSpOpenResFileCompatTcl \ + (tclIntPlatStubsPtr->fSpOpenResFileCompatTcl) /* 9 */ +#endif +#ifndef FSpCreateResFileCompatTcl +#define FSpCreateResFileCompatTcl \ + (tclIntPlatStubsPtr->fSpCreateResFileCompatTcl) /* 10 */ #endif #ifndef FSpLocationFromPath #define FSpLocationFromPath \ (tclIntPlatStubsPtr->fSpLocationFromPath) /* 11 */ #endif Index: generic/tclInterp.c ================================================================== --- generic/tclInterp.c +++ generic/tclInterp.c @@ -7,11 +7,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclInterp.c,v 1.5 1999/04/16 00:46:49 stanton Exp $ + * RCS: @(#) $Id: tclInterp.c,v 1.5.12.1 2001/04/04 14:47:16 dgp Exp $ */ #include #include "tclInt.h" #include "tclPort.h" @@ -947,11 +947,11 @@ } /* *---------------------------------------------------------------------- * - * Tcl_ObjGetAlias -- + * Tcl_GetAliasObj -- * * Object version: Gets information about an alias. * * Results: * A standard Tcl result. Index: generic/tclListObj.c ================================================================== --- generic/tclListObj.c +++ generic/tclListObj.c @@ -8,11 +8,11 @@ * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclListObj.c,v 1.7 1999/08/10 22:45:11 redman Exp $ + * RCS: @(#) $Id: tclListObj.c,v 1.7.8.1 2001/04/04 07:38:47 hobbs Exp $ */ #include "tclInt.h" /* @@ -263,10 +263,11 @@ objPtr->internalRep.otherValuePtr = (VOID *) listRepPtr; objPtr->typePtr = &tclListType; } else { objPtr->bytes = tclEmptyStringRep; + objPtr->length = 0; } } /* *---------------------------------------------------------------------- Index: generic/tclMain.c ================================================================== --- generic/tclMain.c +++ generic/tclMain.c @@ -7,11 +7,11 @@ * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMain.c,v 1.7 1999/12/12 02:26:42 hobbs Exp $ + * RCS: @(#) $Id: tclMain.c,v 1.7.2.1 2001/04/04 21:22:18 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" @@ -35,11 +35,15 @@ * Note: "exit" should really be declared here, but there's no way to * declare it without causing conflicts with other definitions elsewher * on some systems, so it's better just to leave it out. */ +#if !defined(MAC_TCL) extern int isatty _ANSI_ARGS_((int fd)); +#else +#include +#endif extern char * strcpy _ANSI_ARGS_((char *dst, CONST char *src)); static char *tclStartupScriptFileName = NULL; Index: generic/tclNamesp.c ================================================================== --- generic/tclNamesp.c +++ generic/tclNamesp.c @@ -17,11 +17,11 @@ * mmclennan@lucent.com * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclNamesp.c,v 1.17 2000/03/27 22:18:56 hobbs Exp $ + * RCS: @(#) $Id: tclNamesp.c,v 1.17.2.1 2001/04/03 22:54:37 hobbs Exp $ */ #include "tclInt.h" /* @@ -1263,10 +1263,11 @@ cmdName) != NULL)) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "import pattern \"", pattern, "\" would create a loop containing command \"", Tcl_DStringValue(&ds), "\"", (char *) NULL); + Tcl_DStringFree(&ds); return TCL_ERROR; } } dataPtr = (ImportedCmdData *) @@ -1275,10 +1276,11 @@ Tcl_DStringValue(&ds), InvokeImportedCmd, (ClientData) dataPtr, DeleteImportedCmd); dataPtr->realCmdPtr = cmdPtr; dataPtr->selfPtr = (Command *) importedCmd; dataPtr->selfPtr->compileProc = cmdPtr->compileProc; + Tcl_DStringFree(&ds); /* * Create an ImportRef structure describing this new import * command and add it to the import ref list in the "real" * command. Index: generic/tclObj.c ================================================================== --- generic/tclObj.c +++ generic/tclObj.c @@ -8,11 +8,11 @@ * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclObj.c,v 1.12 1999/12/04 06:15:41 hobbs Exp $ + * RCS: @(#) $Id: tclObj.c,v 1.12.2.3 2001/07/16 23:14:13 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -521,27 +521,24 @@ #define OBJS_TO_ALLOC_EACH_TIME 100 void TclAllocateFreeObjects() { - Tcl_Obj tmp[2]; - size_t objSizePlusPadding = /* NB: this assumes byte addressing. */ - ((int)(&(tmp[1])) - (int)(&(tmp[0]))); - size_t bytesToAlloc = (OBJS_TO_ALLOC_EACH_TIME * objSizePlusPadding); + size_t bytesToAlloc = (OBJS_TO_ALLOC_EACH_TIME * sizeof(Tcl_Obj)); char *basePtr; register Tcl_Obj *prevPtr, *objPtr; register int i; basePtr = (char *) ckalloc(bytesToAlloc); memset(basePtr, 0, bytesToAlloc); prevPtr = NULL; objPtr = (Tcl_Obj *) basePtr; - for (i = 0; i < OBJS_TO_ALLOC_EACH_TIME; i++) { + for (i = 0; i < OBJS_TO_ALLOC_EACH_TIME; i++) { objPtr->internalRep.otherValuePtr = (VOID *) prevPtr; prevPtr = objPtr; - objPtr = (Tcl_Obj *) (((char *)objPtr) + objSizePlusPadding); + objPtr++; } tclFreeObjList = prevPtr; } #undef OBJS_TO_ALLOC_EACH_TIME @@ -646,19 +643,11 @@ TclNewObj(dupPtr); if (objPtr->bytes == NULL) { dupPtr->bytes = NULL; } else if (objPtr->bytes != tclEmptyStringRep) { - int len = objPtr->length; - - dupPtr->bytes = (char *) ckalloc((unsigned) len+1); - if (len > 0) { - memcpy((VOID *) dupPtr->bytes, (VOID *) objPtr->bytes, - (unsigned) len); - } - dupPtr->bytes[len] = '\0'; - dupPtr->length = len; + TclInitStringRep(dupPtr, objPtr->bytes, objPtr->length); } if (typePtr != NULL) { if (typePtr->dupIntRepProc == NULL) { dupPtr->internalRep = objPtr->internalRep; Index: generic/tclParse.c ================================================================== --- generic/tclParse.c +++ generic/tclParse.c @@ -7,16 +7,16 @@ * code analysis, etc. This file also includes a few additional * procedures such as Tcl_EvalObjv, Tcl_Eval, and Tcl_EvalEx, which * allow scripts to be evaluated directly, without compiling. * * Copyright (c) 1997 Sun Microsystems, Inc. - * Copyright (c) 1998 by Scriptics Corporation. + * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclParse.c,v 1.13 1999/11/10 02:51:57 hobbs Exp $ + * RCS: @(#) $Id: tclParse.c,v 1.13.2.1 2001/04/03 22:54:38 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -1454,19 +1454,55 @@ for (i = 0; i < objectsUsed; i++) { Tcl_DecrRefCount(objv[i]); } if (gotParse) { - p = parse.commandStart + parse.commandSize; + next = parse.commandStart + parse.commandSize; + bytesLeft -= next - p; + p = next; Tcl_FreeParse(&parse); - if ((nested != 0) && (p > script) && (p[-1] == ']')) { + + if ((nested != 0) && (p > script)) { + char *nextCmd = NULL; /* pointer to start of next command */ + /* * We get here in the special case where the TCL_BRACKET_TERM - * flag was set in the interpreter and we reached a close - * bracket in the script. Return immediately. + * flag was set in the interpreter. + * + * At this point, we want to find the end of the script + * (either end of script or the closing ']'). */ + while ((p[-1] != ']') && bytesLeft) { + if (Tcl_ParseCommand(NULL, p, bytesLeft, nested, &parse) + != TCL_OK) { + /* + * We were looking for the ']' to close the script. + * But if we find a syntax error, it is ok to quit + * early since in that case we no longer need to know + * where the ']' is (if there was one). We reset the + * pointer to the start of the command that after the + * one causing the return. -- hobbs + */ + + p = (nextCmd == NULL) ? parse.commandStart : nextCmd; + break; + } + + if (nextCmd == NULL) { + nextCmd = parse.commandStart; + } + + /* + * Advance to the next command in the script. + */ + + next = parse.commandStart + parse.commandSize; + bytesLeft -= next - p; + p = next; + Tcl_FreeParse(&parse); + } iPtr->termOffset = (p - 1) - script; } else { iPtr->termOffset = p - script; } } Index: generic/tclPlatDecls.h ================================================================== --- generic/tclPlatDecls.h +++ generic/tclPlatDecls.h @@ -4,16 +4,25 @@ * Declarations of platform specific Tcl APIs. * * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * - * RCS: @(#) $Id: tclPlatDecls.h,v 1.5 1999/04/30 22:45:02 stanton Exp $ + * RCS: @(#) $Id: tclPlatDecls.h,v 1.5.12.1 2001/04/03 22:54:38 hobbs Exp $ */ #ifndef _TCLPLATDECLS #define _TCLPLATDECLS +/* + * Pull in the definition of TCHAR. Hopefully the compile flags + * of the core are matching against your project build for these + * public functions. BE AWARE. + */ +#if defined(__WIN32__) && !defined(_INC_TCHAR) +#include +#endif + /* !BEGIN!: Do not edit below this line. */ /* * Exported function declarations: */ Index: generic/tclPosixStr.c ================================================================== --- generic/tclPosixStr.c +++ generic/tclPosixStr.c @@ -9,11 +9,11 @@ * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclPosixStr.c,v 1.5 1999/08/21 19:41:04 hobbs Exp $ + * RCS: @(#) $Id: tclPosixStr.c,v 1.5.2.1 2000/08/07 21:32:40 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -984,11 +984,11 @@ case SIGPOLL: return "SIGPOLL"; #endif #ifdef SIGPROF case SIGPROF: return "SIGPROF"; #endif -#if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) +#if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) case SIGPWR: return "SIGPWR"; #endif #ifdef SIGQUIT case SIGQUIT: return "SIGQUIT"; #endif @@ -1116,11 +1116,11 @@ case SIGPOLL: return "input/output possible on file"; #endif #ifdef SIGPROF case SIGPROF: return "profiling alarm"; #endif -#if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) +#if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ)) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) case SIGPWR: return "power-fail restart"; #endif #ifdef SIGQUIT case SIGQUIT: return "quit signal"; #endif Index: generic/tclScan.c ================================================================== --- generic/tclScan.c +++ generic/tclScan.c @@ -6,11 +6,11 @@ * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclScan.c,v 1.6 1999/11/30 01:42:59 hobbs Exp $ + * RCS: @(#) $Id: tclScan.c,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $ */ #include "tclInt.h" /* @@ -692,16 +692,16 @@ fn = (long (*)())strtol; break; case 'o': op = 'i'; base = 8; - fn = (long (*)())strtol; + fn = (long (*)())strtoul; break; case 'x': op = 'i'; base = 16; - fn = (long (*)())strtol; + fn = (long (*)())strtoul; break; case 'u': op = 'i'; base = 10; flags |= SCAN_UNSIGNED; Index: generic/tclStubInit.c ================================================================== --- generic/tclStubInit.c +++ generic/tclStubInit.c @@ -6,11 +6,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStubInit.c,v 1.35 2000/04/09 16:04:18 kupries Exp $ + * RCS: @(#) $Id: tclStubInit.c,v 1.35.2.2 2001/04/04 21:22:18 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -227,17 +227,19 @@ TclHandleRelease, /* 149 */ TclRegAbout, /* 150 */ TclRegExpRangeUniChar, /* 151 */ TclSetLibraryPath, /* 152 */ TclGetLibraryPath, /* 153 */ - TclTestChannelCmd, /* 154 */ - TclTestChannelEventCmd, /* 155 */ + NULL, /* 154 */ + NULL, /* 155 */ TclRegError, /* 156 */ TclVarTraceExists, /* 157 */ TclSetStartupScriptFileName, /* 158 */ TclGetStartupScriptFileName, /* 159 */ TclpMatchFilesTypes, /* 160 */ + TclChannelTransform, /* 161 */ + TclChannelEventScriptInvoker, /* 162 */ }; TclIntPlatStubs tclIntPlatStubs = { TCL_STUB_MAGIC, NULL, @@ -288,14 +290,14 @@ TclpSysRealloc, /* 2 */ TclpExit, /* 3 */ FSpGetDefaultDir, /* 4 */ FSpSetDefaultDir, /* 5 */ FSpFindFolder, /* 6 */ - GetGlobalMouse, /* 7 */ - FSpGetDirectoryID, /* 8 */ - FSpOpenResFileCompat, /* 9 */ - FSpCreateResFileCompat, /* 10 */ + GetGlobalMouseTcl, /* 7 */ + FSpGetDirectoryIDTcl, /* 8 */ + FSpOpenResFileCompatTcl, /* 9 */ + FSpCreateResFileCompatTcl, /* 10 */ FSpLocationFromPath, /* 11 */ FSpPathFromLocation, /* 12 */ TclMacExitHandler, /* 13 */ TclMacInitExitToShell, /* 14 */ TclMacInstallExitToShellPatch, /* 15 */ @@ -789,8 +791,26 @@ Tcl_GetChannelNamesEx, /* 389 */ Tcl_ProcObjCmd, /* 390 */ Tcl_ConditionFinalize, /* 391 */ Tcl_MutexFinalize, /* 392 */ Tcl_CreateThread, /* 393 */ + Tcl_ReadRaw, /* 394 */ + Tcl_WriteRaw, /* 395 */ + Tcl_GetTopChannel, /* 396 */ + Tcl_ChannelBuffered, /* 397 */ + Tcl_ChannelName, /* 398 */ + Tcl_ChannelVersion, /* 399 */ + Tcl_ChannelBlockModeProc, /* 400 */ + Tcl_ChannelCloseProc, /* 401 */ + Tcl_ChannelClose2Proc, /* 402 */ + Tcl_ChannelInputProc, /* 403 */ + Tcl_ChannelOutputProc, /* 404 */ + Tcl_ChannelSeekProc, /* 405 */ + Tcl_ChannelSetOptionProc, /* 406 */ + Tcl_ChannelGetOptionProc, /* 407 */ + Tcl_ChannelWatchProc, /* 408 */ + Tcl_ChannelGetHandleProc, /* 409 */ + Tcl_ChannelFlushProc, /* 410 */ + Tcl_ChannelHandlerProc, /* 411 */ }; /* !END!: Do not edit above this line. */ Index: generic/tclTest.c ================================================================== --- generic/tclTest.c +++ generic/tclTest.c @@ -6,23 +6,24 @@ * These commands are not normally included in Tcl applications; * they're only used for testing. * * Copyright (c) 1993-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * Copyright (c) 1998-1999 by Scriptics Corporation. + * Copyright (c) 1998-2000 Ajuba Solutions. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclTest.c,v 1.17 1999/10/13 02:22:18 hobbs Exp $ + * RCS: @(#) $Id: tclTest.c,v 1.17.2.2 2000/08/06 00:20:10 hobbs Exp $ */ #define TCL_TEST #include "tclInt.h" #include "tclPort.h" #include "tclRegexp.h" +#include "tclIO.h" #include /* * Declare external functions used in Windows tests. */ @@ -274,10 +275,14 @@ Tcl_Interp *interp, int argc, char **argv)); static int TesttranslatefilenameCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); static int TestupvarCmd _ANSI_ARGS_((ClientData dummy, Tcl_Interp *interp, int argc, char **argv)); +static int TestChannelCmd _ANSI_ARGS_((ClientData dummy, + Tcl_Interp *interp, int argc, char **argv)); +static int TestChannelEventCmd _ANSI_ARGS_((ClientData dummy, + Tcl_Interp *interp, int argc, char **argv)); /* * External (platform specific) initialization routine, these declarations * explicitly don't use EXTERN since this code does not get compiled * into the library: @@ -327,13 +332,13 @@ (Tcl_CmdDeleteProc *) NULL); Tcl_CreateCommand(interp, "testaccessproc", TestaccessprocCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateCommand(interp, "testasync", TestasyncCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "testchannel", TclTestChannelCmd, + Tcl_CreateCommand(interp, "testchannel", TestChannelCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); - Tcl_CreateCommand(interp, "testchannelevent", TclTestChannelEventCmd, + Tcl_CreateCommand(interp, "testchannelevent", TestChannelEventCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateCommand(interp, "testchmod", TestchmodCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); Tcl_CreateCommand(interp, "testcmdtoken", TestcmdtokenCmd, (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); @@ -4240,5 +4245,581 @@ modeString, permissions)); } else { return (NULL); } } + +/* + *---------------------------------------------------------------------- + * + * TestChannelCmd -- + * + * Implements the Tcl "testchannel" debugging command and its + * subcommands. This is part of the testing environment. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + + /* ARGSUSED */ +int +TestChannelCmd(clientData, interp, argc, argv) + ClientData clientData; /* Not used. */ + Tcl_Interp *interp; /* Interpreter for result. */ + int argc; /* Count of additional args. */ + char **argv; /* Additional arg strings. */ +{ + char *cmdName; /* Sub command. */ + Tcl_HashTable *hTblPtr; /* Hash table of channels. */ + Tcl_HashSearch hSearch; /* Search variable. */ + Tcl_HashEntry *hPtr; /* Search variable. */ + Channel *chanPtr; /* The actual channel. */ + ChannelState *statePtr; /* state info for channel */ + Tcl_Channel chan; /* The opaque type. */ + size_t len; /* Length of subcommand string. */ + int IOQueued; /* How much IO is queued inside channel? */ + ChannelBuffer *bufPtr; /* For iterating over queued IO. */ + char buf[TCL_INTEGER_SPACE];/* For sprintf. */ + int mode; /* rw mode of the channel */ + + if (argc < 2) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " subcommand ?additional args..?\"", (char *) NULL); + return TCL_ERROR; + } + cmdName = argv[1]; + len = strlen(cmdName); + + chanPtr = (Channel *) NULL; + + if (argc > 2) { + chan = Tcl_GetChannel(interp, argv[2], &mode); + if (chan == (Tcl_Channel) NULL) { + return TCL_ERROR; + } + chanPtr = (Channel *) chan; + statePtr = chanPtr->state; + chanPtr = statePtr->topChanPtr; + chan = (Tcl_Channel) chanPtr; + } else { + /* lint */ + statePtr = NULL; + chan = NULL; + } + + if ((cmdName[0] == 'i') && (strncmp(cmdName, "info", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " info channelName\"", (char *) NULL); + return TCL_ERROR; + } + Tcl_AppendElement(interp, argv[2]); + Tcl_AppendElement(interp, chanPtr->typePtr->typeName); + if (statePtr->flags & TCL_READABLE) { + Tcl_AppendElement(interp, "read"); + } else { + Tcl_AppendElement(interp, ""); + } + if (statePtr->flags & TCL_WRITABLE) { + Tcl_AppendElement(interp, "write"); + } else { + Tcl_AppendElement(interp, ""); + } + if (statePtr->flags & CHANNEL_NONBLOCKING) { + Tcl_AppendElement(interp, "nonblocking"); + } else { + Tcl_AppendElement(interp, "blocking"); + } + if (statePtr->flags & CHANNEL_LINEBUFFERED) { + Tcl_AppendElement(interp, "line"); + } else if (statePtr->flags & CHANNEL_UNBUFFERED) { + Tcl_AppendElement(interp, "none"); + } else { + Tcl_AppendElement(interp, "full"); + } + if (statePtr->flags & BG_FLUSH_SCHEDULED) { + Tcl_AppendElement(interp, "async_flush"); + } else { + Tcl_AppendElement(interp, ""); + } + if (statePtr->flags & CHANNEL_EOF) { + Tcl_AppendElement(interp, "eof"); + } else { + Tcl_AppendElement(interp, ""); + } + if (statePtr->flags & CHANNEL_BLOCKED) { + Tcl_AppendElement(interp, "blocked"); + } else { + Tcl_AppendElement(interp, "unblocked"); + } + if (statePtr->inputTranslation == TCL_TRANSLATE_AUTO) { + Tcl_AppendElement(interp, "auto"); + if (statePtr->flags & INPUT_SAW_CR) { + Tcl_AppendElement(interp, "saw_cr"); + } else { + Tcl_AppendElement(interp, ""); + } + } else if (statePtr->inputTranslation == TCL_TRANSLATE_LF) { + Tcl_AppendElement(interp, "lf"); + Tcl_AppendElement(interp, ""); + } else if (statePtr->inputTranslation == TCL_TRANSLATE_CR) { + Tcl_AppendElement(interp, "cr"); + Tcl_AppendElement(interp, ""); + } else if (statePtr->inputTranslation == TCL_TRANSLATE_CRLF) { + Tcl_AppendElement(interp, "crlf"); + if (statePtr->flags & INPUT_SAW_CR) { + Tcl_AppendElement(interp, "queued_cr"); + } else { + Tcl_AppendElement(interp, ""); + } + } + if (statePtr->outputTranslation == TCL_TRANSLATE_AUTO) { + Tcl_AppendElement(interp, "auto"); + } else if (statePtr->outputTranslation == TCL_TRANSLATE_LF) { + Tcl_AppendElement(interp, "lf"); + } else if (statePtr->outputTranslation == TCL_TRANSLATE_CR) { + Tcl_AppendElement(interp, "cr"); + } else if (statePtr->outputTranslation == TCL_TRANSLATE_CRLF) { + Tcl_AppendElement(interp, "crlf"); + } + for (IOQueued = 0, bufPtr = statePtr->inQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + IOQueued += bufPtr->nextAdded - bufPtr->nextRemoved; + } + TclFormatInt(buf, IOQueued); + Tcl_AppendElement(interp, buf); + + IOQueued = 0; + if (statePtr->curOutPtr != (ChannelBuffer *) NULL) { + IOQueued = statePtr->curOutPtr->nextAdded - + statePtr->curOutPtr->nextRemoved; + } + for (bufPtr = statePtr->outQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + IOQueued += (bufPtr->nextAdded - bufPtr->nextRemoved); + } + TclFormatInt(buf, IOQueued); + Tcl_AppendElement(interp, buf); + + TclFormatInt(buf, Tcl_Tell((Tcl_Channel) chanPtr)); + Tcl_AppendElement(interp, buf); + + TclFormatInt(buf, statePtr->refCount); + Tcl_AppendElement(interp, buf); + + return TCL_OK; + } + + if ((cmdName[0] == 'i') && + (strncmp(cmdName, "inputbuffered", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + + for (IOQueued = 0, bufPtr = statePtr->inQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + IOQueued += bufPtr->nextAdded - bufPtr->nextRemoved; + } + TclFormatInt(buf, IOQueued); + Tcl_AppendResult(interp, buf, (char *) NULL); + return TCL_OK; + } + + if ((cmdName[0] == 'm') && (strncmp(cmdName, "mode", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + + if (statePtr->flags & TCL_READABLE) { + Tcl_AppendElement(interp, "read"); + } else { + Tcl_AppendElement(interp, ""); + } + if (statePtr->flags & TCL_WRITABLE) { + Tcl_AppendElement(interp, "write"); + } else { + Tcl_AppendElement(interp, ""); + } + return TCL_OK; + } + + if ((cmdName[0] == 'n') && (strncmp(cmdName, "name", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + Tcl_AppendResult(interp, statePtr->channelName, (char *) NULL); + return TCL_OK; + } + + if ((cmdName[0] == 'o') && (strncmp(cmdName, "open", len) == 0)) { + hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); + if (hTblPtr == (Tcl_HashTable *) NULL) { + return TCL_OK; + } + for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); + hPtr != (Tcl_HashEntry *) NULL; + hPtr = Tcl_NextHashEntry(&hSearch)) { + Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr)); + } + return TCL_OK; + } + + if ((cmdName[0] == 'o') && + (strncmp(cmdName, "outputbuffered", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + + IOQueued = 0; + if (statePtr->curOutPtr != (ChannelBuffer *) NULL) { + IOQueued = statePtr->curOutPtr->nextAdded - + statePtr->curOutPtr->nextRemoved; + } + for (bufPtr = statePtr->outQueueHead; + bufPtr != (ChannelBuffer *) NULL; + bufPtr = bufPtr->nextPtr) { + IOQueued += (bufPtr->nextAdded - bufPtr->nextRemoved); + } + TclFormatInt(buf, IOQueued); + Tcl_AppendResult(interp, buf, (char *) NULL); + return TCL_OK; + } + + if ((cmdName[0] == 'q') && + (strncmp(cmdName, "queuedcr", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + + Tcl_AppendResult(interp, + (statePtr->flags & INPUT_SAW_CR) ? "1" : "0", + (char *) NULL); + return TCL_OK; + } + + if ((cmdName[0] == 'r') && (strncmp(cmdName, "readable", len) == 0)) { + hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); + if (hTblPtr == (Tcl_HashTable *) NULL) { + return TCL_OK; + } + for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); + hPtr != (Tcl_HashEntry *) NULL; + hPtr = Tcl_NextHashEntry(&hSearch)) { + chanPtr = (Channel *) Tcl_GetHashValue(hPtr); + statePtr = chanPtr->state; + if (statePtr->flags & TCL_READABLE) { + Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr)); + } + } + return TCL_OK; + } + + if ((cmdName[0] == 'r') && (strncmp(cmdName, "refcount", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + + TclFormatInt(buf, statePtr->refCount); + Tcl_AppendResult(interp, buf, (char *) NULL); + return TCL_OK; + } + + if ((cmdName[0] == 't') && (strncmp(cmdName, "type", len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "channel name required", + (char *) NULL); + return TCL_ERROR; + } + Tcl_AppendResult(interp, chanPtr->typePtr->typeName, + (char *) NULL); + return TCL_OK; + } + + if ((cmdName[0] == 'w') && (strncmp(cmdName, "writable", len) == 0)) { + hTblPtr = (Tcl_HashTable *) Tcl_GetAssocData(interp, "tclIO", NULL); + if (hTblPtr == (Tcl_HashTable *) NULL) { + return TCL_OK; + } + for (hPtr = Tcl_FirstHashEntry(hTblPtr, &hSearch); + hPtr != (Tcl_HashEntry *) NULL; + hPtr = Tcl_NextHashEntry(&hSearch)) { + chanPtr = (Channel *) Tcl_GetHashValue(hPtr); + statePtr = chanPtr->state; + if (statePtr->flags & TCL_WRITABLE) { + Tcl_AppendElement(interp, Tcl_GetHashKey(hTblPtr, hPtr)); + } + } + return TCL_OK; + } + + if ((cmdName[0] == 't') && (strncmp(cmdName, "transform", len) == 0)) { + /* + * Syntax: transform channel -command command + */ + + if (argc != 5) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " transform channelId -command cmd\"", (char *) NULL); + return TCL_ERROR; + } + if (strcmp(argv[3], "-command") != 0) { + Tcl_AppendResult(interp, "bad argument \"", argv[3], + "\": should be \"-command\"", (char *) NULL); + return TCL_ERROR; + } + + return TclChannelTransform(interp, chan, + Tcl_NewStringObj(argv[4], -1)); + } + + if ((cmdName[0] == 'u') && (strncmp(cmdName, "unstack", len) == 0)) { + /* + * Syntax: unstack channel + */ + + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " unstack channel\"", (char *) NULL); + return TCL_ERROR; + } + return Tcl_UnstackChannel(interp, chan); + } + + Tcl_AppendResult(interp, "bad option \"", cmdName, "\": should be ", + "info, open, readable, writable, transform, unstack", + (char *) NULL); + return TCL_ERROR; +} + +/* + *---------------------------------------------------------------------- + * + * TestChannelEventCmd -- + * + * This procedure implements the "testchannelevent" command. It is + * used to test the Tcl channel event mechanism. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * Creates, deletes and returns channel event handlers. + * + *---------------------------------------------------------------------- + */ + + /* ARGSUSED */ +int +TestChannelEventCmd(dummy, interp, argc, argv) + ClientData dummy; /* Not used. */ + Tcl_Interp *interp; /* Current interpreter. */ + int argc; /* Number of arguments. */ + char **argv; /* Argument strings. */ +{ + Tcl_Obj *resultListPtr; + Channel *chanPtr; + ChannelState *statePtr; /* state info for channel */ + EventScriptRecord *esPtr, *prevEsPtr, *nextEsPtr; + char *cmd; + int index, i, mask, len; + + if ((argc < 3) || (argc > 5)) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " channelName cmd ?arg1? ?arg2?\"", (char *) NULL); + return TCL_ERROR; + } + chanPtr = (Channel *) Tcl_GetChannel(interp, argv[1], NULL); + if (chanPtr == (Channel *) NULL) { + return TCL_ERROR; + } + statePtr = chanPtr->state; + + cmd = argv[2]; + len = strlen(cmd); + if ((cmd[0] == 'a') && (strncmp(cmd, "add", (unsigned) len) == 0)) { + if (argc != 5) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " channelName add eventSpec script\"", (char *) NULL); + return TCL_ERROR; + } + if (strcmp(argv[3], "readable") == 0) { + mask = TCL_READABLE; + } else if (strcmp(argv[3], "writable") == 0) { + mask = TCL_WRITABLE; + } else if (strcmp(argv[3], "none") == 0) { + mask = 0; + } else { + Tcl_AppendResult(interp, "bad event name \"", argv[3], + "\": must be readable, writable, or none", (char *) NULL); + return TCL_ERROR; + } + + esPtr = (EventScriptRecord *) ckalloc((unsigned) + sizeof(EventScriptRecord)); + esPtr->nextPtr = statePtr->scriptRecordPtr; + statePtr->scriptRecordPtr = esPtr; + + esPtr->chanPtr = chanPtr; + esPtr->interp = interp; + esPtr->mask = mask; + esPtr->scriptPtr = Tcl_NewStringObj(argv[4], -1); + Tcl_IncrRefCount(esPtr->scriptPtr); + + Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask, + TclChannelEventScriptInvoker, (ClientData) esPtr); + + return TCL_OK; + } + + if ((cmd[0] == 'd') && (strncmp(cmd, "delete", (unsigned) len) == 0)) { + if (argc != 4) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " channelName delete index\"", (char *) NULL); + return TCL_ERROR; + } + if (Tcl_GetInt(interp, argv[3], &index) == TCL_ERROR) { + return TCL_ERROR; + } + if (index < 0) { + Tcl_AppendResult(interp, "bad event index: ", argv[3], + ": must be nonnegative", (char *) NULL); + return TCL_ERROR; + } + for (i = 0, esPtr = statePtr->scriptRecordPtr; + (i < index) && (esPtr != (EventScriptRecord *) NULL); + i++, esPtr = esPtr->nextPtr) { + /* Empty loop body. */ + } + if (esPtr == (EventScriptRecord *) NULL) { + Tcl_AppendResult(interp, "bad event index ", argv[3], + ": out of range", (char *) NULL); + return TCL_ERROR; + } + if (esPtr == statePtr->scriptRecordPtr) { + statePtr->scriptRecordPtr = esPtr->nextPtr; + } else { + for (prevEsPtr = statePtr->scriptRecordPtr; + (prevEsPtr != (EventScriptRecord *) NULL) && + (prevEsPtr->nextPtr != esPtr); + prevEsPtr = prevEsPtr->nextPtr) { + /* Empty loop body. */ + } + if (prevEsPtr == (EventScriptRecord *) NULL) { + panic("TestChannelEventCmd: damaged event script list"); + } + prevEsPtr->nextPtr = esPtr->nextPtr; + } + Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, + TclChannelEventScriptInvoker, (ClientData) esPtr); + Tcl_DecrRefCount(esPtr->scriptPtr); + ckfree((char *) esPtr); + + return TCL_OK; + } + + if ((cmd[0] == 'l') && (strncmp(cmd, "list", (unsigned) len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " channelName list\"", (char *) NULL); + return TCL_ERROR; + } + resultListPtr = Tcl_GetObjResult(interp); + for (esPtr = statePtr->scriptRecordPtr; + esPtr != (EventScriptRecord *) NULL; + esPtr = esPtr->nextPtr) { + if (esPtr->mask) { + Tcl_ListObjAppendElement(interp, resultListPtr, Tcl_NewStringObj( + (esPtr->mask == TCL_READABLE) ? "readable" : "writable", -1)); + } else { + Tcl_ListObjAppendElement(interp, resultListPtr, + Tcl_NewStringObj("none", -1)); + } + Tcl_ListObjAppendElement(interp, resultListPtr, esPtr->scriptPtr); + } + Tcl_SetObjResult(interp, resultListPtr); + return TCL_OK; + } + + if ((cmd[0] == 'r') && (strncmp(cmd, "removeall", (unsigned) len) == 0)) { + if (argc != 3) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " channelName removeall\"", (char *) NULL); + return TCL_ERROR; + } + for (esPtr = statePtr->scriptRecordPtr; + esPtr != (EventScriptRecord *) NULL; + esPtr = nextEsPtr) { + nextEsPtr = esPtr->nextPtr; + Tcl_DeleteChannelHandler((Tcl_Channel) chanPtr, + TclChannelEventScriptInvoker, (ClientData) esPtr); + Tcl_DecrRefCount(esPtr->scriptPtr); + ckfree((char *) esPtr); + } + statePtr->scriptRecordPtr = (EventScriptRecord *) NULL; + return TCL_OK; + } + + if ((cmd[0] == 's') && (strncmp(cmd, "set", (unsigned) len) == 0)) { + if (argc != 5) { + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " channelName delete index event\"", (char *) NULL); + return TCL_ERROR; + } + if (Tcl_GetInt(interp, argv[3], &index) == TCL_ERROR) { + return TCL_ERROR; + } + if (index < 0) { + Tcl_AppendResult(interp, "bad event index: ", argv[3], + ": must be nonnegative", (char *) NULL); + return TCL_ERROR; + } + for (i = 0, esPtr = statePtr->scriptRecordPtr; + (i < index) && (esPtr != (EventScriptRecord *) NULL); + i++, esPtr = esPtr->nextPtr) { + /* Empty loop body. */ + } + if (esPtr == (EventScriptRecord *) NULL) { + Tcl_AppendResult(interp, "bad event index ", argv[3], + ": out of range", (char *) NULL); + return TCL_ERROR; + } + + if (strcmp(argv[4], "readable") == 0) { + mask = TCL_READABLE; + } else if (strcmp(argv[4], "writable") == 0) { + mask = TCL_WRITABLE; + } else if (strcmp(argv[4], "none") == 0) { + mask = 0; + } else { + Tcl_AppendResult(interp, "bad event name \"", argv[4], + "\": must be readable, writable, or none", (char *) NULL); + return TCL_ERROR; + } + esPtr->mask = mask; + Tcl_CreateChannelHandler((Tcl_Channel) chanPtr, mask, + TclChannelEventScriptInvoker, (ClientData) esPtr); + return TCL_OK; + } + Tcl_AppendResult(interp, "bad command ", cmd, ", must be one of ", + "add, delete, list, set, or removeall", (char *) NULL); + return TCL_ERROR; +} Index: generic/tclTestObj.c ================================================================== --- generic/tclTestObj.c +++ generic/tclTestObj.c @@ -10,11 +10,11 @@ * Copyright (c) 1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclTestObj.c,v 1.6 1999/06/15 22:06:17 hershey Exp $ + * RCS: @(#) $Id: tclTestObj.c,v 1.6.10.1 2001/04/03 22:54:38 hobbs Exp $ */ #include "tclInt.h" /* @@ -418,11 +418,12 @@ Tcl_GetIndexFromObj((Tcl_Interp *) NULL, objv[1], tablePtr, "token", 0, &index); if (Tcl_GetIntFromObj(interp, objv[2], &index2) != TCL_OK) { return TCL_ERROR; } - objv[1]->internalRep.twoPtrValue.ptr2 = (VOID *) index2; + objv[1]->internalRep.twoPtrValue.ptr2 = + (VOID *) (index2 * sizeof(char *)); result = Tcl_GetIndexFromObj((Tcl_Interp *) NULL, objv[1], tablePtr, "token", 0, &index); if (result == TCL_OK) { Tcl_SetIntObj(Tcl_GetObjResult(interp), index); } Index: generic/tclThreadTest.c ================================================================== --- generic/tclThreadTest.c +++ generic/tclThreadTest.c @@ -9,11 +9,11 @@ * Copyright (c) 1998 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclThreadTest.c,v 1.9 2000/04/17 20:32:22 welch Exp $ + * RCS: @(#) $Id: tclThreadTest.c,v 1.9.2.1 2001/04/04 21:22:18 hobbs Exp $ */ #include "tclInt.h" #ifdef TCL_THREADS @@ -124,11 +124,11 @@ char *script, int wait)); #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT -Tcl_ThreadCreateType NewThread _ANSI_ARGS_((ClientData clientData)); +Tcl_ThreadCreateType NewTestThread _ANSI_ARGS_((ClientData clientData)); static void ListRemove _ANSI_ARGS_((ThreadSpecificData *tsdPtr)); static void ListUpdateInner _ANSI_ARGS_((ThreadSpecificData *tsdPtr)); static int ThreadEventProc _ANSI_ARGS_((Tcl_Event *evPtr, int mask)); static void ThreadErrorProc _ANSI_ARGS_((Tcl_Interp *interp)); static void ThreadFreeProc _ANSI_ARGS_((ClientData clientData)); @@ -353,11 +353,11 @@ ctrl.script = (char *) script; ctrl.condWait = NULL; ctrl.flags = 0; Tcl_MutexLock(&threadMutex); - if (Tcl_CreateThread(&id, NewThread, (ClientData) &ctrl, + if (Tcl_CreateThread(&id, NewTestThread, (ClientData) &ctrl, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_NOFLAGS) != TCL_OK) { Tcl_MutexUnlock(&threadMutex); Tcl_AppendResult(interp,"can't create a new thread",0); ckfree((void*)ctrl.script); return TCL_ERROR; @@ -375,11 +375,11 @@ } /* *------------------------------------------------------------------------ * - * NewThread -- + * NewTestThread -- * * This routine is the "main()" for a new thread whose task is to * execute a single TCL script. The argument to this function is * a pointer to a structure that contains the text of the TCL script * to be executed. @@ -401,11 +401,11 @@ * A TCL script is executed in a new thread. * *------------------------------------------------------------------------ */ Tcl_ThreadCreateType -NewThread(clientData) +NewTestThread(clientData) ClientData clientData; { ThreadCtrl *ctrlPtr = (ThreadCtrl*)clientData; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); int result; Index: generic/tclUtf.c ================================================================== --- generic/tclUtf.c +++ generic/tclUtf.c @@ -6,11 +6,11 @@ * Copyright (c) 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUtf.c,v 1.11 2000/01/11 22:09:00 hobbs Exp $ + * RCS: @(#) $Id: tclUtf.c,v 1.11.2.1 2001/07/16 23:14:13 hobbs Exp $ */ #include "tclInt.h" /* @@ -109,11 +109,11 @@ * None. * *--------------------------------------------------------------------------- */ -static int +INLINE static int UtfCount(ch) int ch; /* The Tcl_UniChar whose size is returned. */ { if ((ch > 0) && (ch < UNICODE_SELF)) { return 1; @@ -779,11 +779,12 @@ * from src, unless NULL. */ char *dst; /* Filled with the bytes represented by the * backslash sequence. */ { register CONST char *p = src+1; - int result, count, n; + Tcl_UniChar result; + int count, n; char buf[TCL_UTF_MAX]; if (dst == NULL) { dst = buf; } @@ -881,19 +882,29 @@ } count = 4; result = (unsigned char)((result << 3) + (*p - '0')); break; } + if (UCHAR(*p) < UNICODE_SELF) { result = *p; count = 2; + } else { + /* + * We have to convert here because the user has put a + * backslash in front of a multi-byte utf-8 character. + * While this means nothing special, we shouldn't break up + * a correct utf-8 character. [Bug #217987] test subst-3.2 + */ + count = Tcl_UtfToUniChar(p, &result) + 1; /* +1 for '\' */ + } break; } if (readPtr != NULL) { *readPtr = count; } - return Tcl_UniCharToUtf(result, dst); + return Tcl_UniCharToUtf((int) result, dst); } /* *---------------------------------------------------------------------- * Index: generic/tclUtil.c ================================================================== --- generic/tclUtil.c +++ generic/tclUtil.c @@ -8,11 +8,11 @@ * Copyright (c) 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUtil.c,v 1.17 1999/12/12 02:26:43 hobbs Exp $ + * RCS: @(#) $Id: tclUtil.c,v 1.17.2.1 2001/07/16 23:14:13 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -1069,11 +1069,11 @@ } else { p = concatStr; for (i = 0; i < objc; i++) { objPtr = objv[i]; element = Tcl_GetStringFromObj(objPtr, &elemLength); - while ((elemLength > 0) + while ((elemLength > 0) && (UCHAR(*element) < 127) && (isspace(UCHAR(*element)))) { /* INTL: ISO space. */ element++; elemLength--; } @@ -1081,11 +1081,11 @@ * Trim trailing white space. But, be careful not to trim * a space character if it is preceded by a backslash: in * this case it could be significant. */ - while ((elemLength > 0) + while ((elemLength > 0) && (UCHAR(element[elemLength-1]) < 127) && isspace(UCHAR(element[elemLength-1])) /* INTL: ISO space. */ && ((elemLength < 2) || (element[elemLength-2] != '\\'))) { elemLength--; } if (elemLength == 0) { Index: generic/tclVar.c ================================================================== --- generic/tclVar.c +++ generic/tclVar.c @@ -12,11 +12,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclVar.c,v 1.16 2000/01/21 03:29:14 ericm Exp $ + * RCS: @(#) $Id: tclVar.c,v 1.16.2.1 2001/04/03 22:54:38 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -2868,15 +2868,14 @@ }; Interp *iPtr = (Interp *) interp; Var *varPtr, *arrayPtr; Tcl_HashEntry *hPtr; - Tcl_Obj *resultPtr = Tcl_GetObjResult(interp); + Tcl_Obj *resultPtr; int notArray; char *varName, *msg; int index, result; - if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "option arrayName ?arg ...?"); return TCL_ERROR; } @@ -2913,10 +2912,17 @@ VarErrMsg(interp, varName, NULL, "trace array", msg); return TCL_ERROR; } } + /* + * We have to wait to get the resultPtr until here because + * CallTraces can affect the result. + */ + + resultPtr = Tcl_GetObjResult(interp); + switch (index) { case ARRAY_ANYMORE: { ArraySearch *searchPtr; char *searchId; @@ -4767,11 +4773,10 @@ Tcl_Interp *interp; /* The interpreter */ char *varName; /* The variable name */ { Var *varPtr; Var *arrayPtr; - char *msg; /* * The choice of "create" flag values is delicate here, and * matches the semantics of GetVar. Things are still not perfect, * however, because if you do "info exists x" you get a varPtr @@ -4780,29 +4785,29 @@ * known to be an array. Otherwise you get NULL, and no trace * is triggered. This matches Tcl 7.6 semantics. */ varPtr = TclLookupVar(interp, varName, (char *) NULL, - 0, "access", - /*createPart1*/ 0, /*createPart2*/ 1, &arrayPtr); + 0, "access", /*createPart1*/ 0, /*createPart2*/ 1, &arrayPtr); + if (varPtr == NULL) { return NULL; } - if ((varPtr != NULL) && - ((varPtr->tracePtr != NULL) - || ((arrayPtr != NULL) && (arrayPtr->tracePtr != NULL)))) { - msg = CallTraces((Interp *)interp, arrayPtr, varPtr, varName, - (char *) NULL, TCL_TRACE_READS); - if (msg != NULL) { - /* - * If the variable doesn't exist anymore and no-one's using - * it, then free up the relevant structures and hash table entries. - */ - - if (TclIsVarUndefined(varPtr)) { - CleanupVar(varPtr, arrayPtr); - } - return NULL; - } - } + + if ((varPtr->tracePtr != NULL) + || ((arrayPtr != NULL) && (arrayPtr->tracePtr != NULL))) { + CallTraces((Interp *)interp, arrayPtr, varPtr, varName, + (char *) NULL, TCL_TRACE_READS); + } + + /* + * If the variable doesn't exist anymore and no-one's using + * it, then free up the relevant structures and hash table entries. + */ + + if (TclIsVarUndefined(varPtr)) { + CleanupVar(varPtr, arrayPtr); + return NULL; + } + return varPtr; } DELETED library/dde/pkgIndex.tcl Index: library/dde/pkgIndex.tcl ================================================================== --- library/dde/pkgIndex.tcl +++ /dev/null @@ -1,5 +0,0 @@ -if {[info exists tcl_platform(debug)]} { - package ifneeded dde 1.1 [list load [file join $dir tcldde83d.dll] dde] -} else { - package ifneeded dde 1.1 [list load [file join $dir tcldde83.dll] dde] -} Index: library/history.tcl ================================================================== --- library/history.tcl +++ library/history.tcl @@ -1,10 +1,10 @@ # history.tcl -- # # Implementation of the history command. # -# RCS: @(#) $Id: history.tcl,v 1.3 1998/09/14 18:40:03 stanton Exp $ +# RCS: @(#) $Id: history.tcl,v 1.3.18.1 2000/08/07 21:31:47 hobbs Exp $ # # Copyright (c) 1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -303,11 +303,12 @@ # The index into history, or an error if the index didn't match. proc tcl::HistIndex {event} { variable history if {[catch {expr {~$event}}]} { - for {set i $history(nextid)} {[info exists history($i)]} {incr i -1} { + for {set i [expr {$history(nextid)-1}]} {[info exists history($i)]} \ + {incr i -1} { if {[string match $event* $history($i)]} { return $i; } if {[string match $event $history($i)]} { return $i; Index: library/http/http.tcl ================================================================== --- library/http/http.tcl +++ library/http/http.tcl @@ -7,11 +7,11 @@ # defined in the safe base. # # See the file "license.terms" for information on usage and # redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: http.tcl,v 1.32 2000/04/22 07:07:59 sandeep Exp $ +# RCS: @(#) $Id: http.tcl,v 1.32.2.1 2000/05/31 01:28:57 sandeep Exp $ # Rough version history: # 1.0 Old http_get interface # 2.0 http:: namespace and http::geturl # 2.1 Added callbacks to handle arriving data, and timeouts @@ -278,19 +278,19 @@ # Validate URL, determine the server host and port, and check proxy case if {![regexp -nocase {^(([^:]*)://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \ x prefix proto host y port srvurl]} { unset $token - error "Unsupported URL: $url" + return -code error "Unsupported URL: $url" } if {[string length $proto] == 0} { set proto http set url ${proto}://$url } if {![info exists urlTypes($proto)]} { unset $token - return -code error "unsupported url type \"$proto\"" + return -code error "Unsupported URL type \"$proto\"" } set defport [lindex $urlTypes($proto) 0] set defcmd [lindex $urlTypes($proto) 1] if {[string length $port] == 0} { @@ -343,16 +343,21 @@ # Wait for the connection to complete if {$state(-timeout) > 0} { fileevent $s writable [list http::Connect $token] http::wait $token - if {$state(status) != "connect"} { - - # Likely to be connection timeout. If there was a connection - # error, (e.g., bad port), then http::wait will have - # raised an error already + if {[string equal $state(status) "error"]} { + # something went wrong while trying to establish the connection + # Clean up after events and such, but DON'T call the command + # callback (if available) because we're going to throw an + # exception from here instead. + set err [lindex $state(error) 0] + cleanup $token + return -code error $err + } elseif {![string equal $state(status) "connect"]} { + # Likely to be connection timeout return $token } set state(status) "" } @@ -447,20 +452,29 @@ # geturl does EVERYTHING asynchronously, so if the user # calls it synchronously, we just do a wait here. wait $token + if {[string equal $state(status) "error"]} { + # Something went wrong, so throw the exception, and the + # enclosing catch will do cleanup. + return -code error [lindex $state(error) 0] + } } } err]} { # The socket probably was never connected, # or the connection dropped later. # Clean up after events and such, but DON'T call the command callback # (if available) because we're going to throw an exception from here # instead. - - Finish $token $err 1 + + # if state(status) is error, it means someone's already called Finish + # to do the above-described clean up. + if {[string equal $state(status) "error"]} { + Finish $token $err 1 + } cleanup $token return -code error $err } return $token @@ -499,10 +513,19 @@ proc http::size {token} { variable $token upvar 0 $token state return $state(currentsize) } + +proc http::error {token} { + variable $token + upvar 0 $token state + if {[info exists state(error)]} { + return $state(error) + } + return "" +} # http::cleanup # # Garbage collect the state associated with a transaction # @@ -529,25 +552,23 @@ # # Side Effects # Sets the status of the connection, which unblocks # the waiting geturl call - proc http::Connect {token} { +proc http::Connect {token} { variable $token upvar 0 $token state global errorInfo errorCode if {[eof $state(sock)] || - [string length [fconfigure $state(sock) -error]]} { - set state(status) error - set state(error) [list \ - "connect failed [fconfigure $state(sock) -error]" \ - $errorInfo $errorCode] + [string length [fconfigure $state(sock) -error]]} { + Finish $token "connect failed [fconfigure $state(sock) -error]" 1 } else { set state(status) connect + fileevent $state(sock) writable {} } - fileevent $state(sock) writable {} - } + return +} # http::Write # # Write POST query data to the socket # @@ -778,15 +799,11 @@ if {![info exists state(status)] || [string length $state(status)] == 0} { # We must wait on the original variable name, not the upvar alias vwait $token\(status) } - if {[info exists state(error)]} { - set errorlist $state(error) - unset state - eval error $errorlist - } + return $state(status) } # http::formatQuery -- # DELETED library/http2.3/http.tcl Index: library/http2.3/http.tcl ================================================================== --- library/http2.3/http.tcl +++ /dev/null @@ -1,864 +0,0 @@ -# http.tcl -- -# -# Client-side HTTP for GET, POST, and HEAD commands. -# These routines can be used in untrusted code that uses -# the Safesock security policy. These procedures use a -# callback interface to avoid using vwait, which is not -# defined in the safe base. -# -# See the file "license.terms" for information on usage and -# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# RCS: @(#) $Id: http.tcl,v 1.32 2000/04/22 07:07:59 sandeep Exp $ - -# Rough version history: -# 1.0 Old http_get interface -# 2.0 http:: namespace and http::geturl -# 2.1 Added callbacks to handle arriving data, and timeouts -# 2.2 Added ability to fetch into a channel -# 2.3 Added SSL support, and ability to post from a channel -# This version also cleans up error cases and eliminates the -# "ioerror" status in favor of raising an error - -package provide http 2.3 - -namespace eval http { - variable http - array set http { - -accept */* - -proxyhost {} - -proxyport {} - -useragent {Tcl http client package 2.3} - -proxyfilter http::ProxyRequired - } - - variable formMap - variable alphanumeric a-zA-Z0-9 - variable c - variable i 0 - for {} {$i <= 256} {incr i} { - set c [format %c $i] - if {![string match \[$alphanumeric\] $c]} { - set formMap($c) %[format %.2x $i] - } - } - # These are handled specially - array set formMap { - " " + \n %0d%0a - } - - variable urlTypes - array set urlTypes { - http {80 ::socket} - } - - namespace export geturl config reset wait formatQuery register unregister - # Useful, but not exported: data size status code -} - -# http::register -- -# -# See documentaion for details. -# -# Arguments: -# proto URL protocol prefix, e.g. https -# port Default port for protocol -# command Command to use to create socket -# Results: -# list of port and command that was registered. - -proc http::register {proto port command} { - variable urlTypes - set urlTypes($proto) [list $port $command] -} - -# http::unregister -- -# -# Unregisters URL protocol handler -# -# Arguments: -# proto URL protocol prefix, e.g. https -# Results: -# list of port and command that was unregistered. - -proc http::unregister {proto} { - variable urlTypes - if {![info exists urlTypes($proto)]} { - return -code error "unsupported url type \"$proto\"" - } - set old $urlTypes($proto) - unset urlTypes($proto) - return $old -} - -# http::config -- -# -# See documentaion for details. -# -# Arguments: -# args Options parsed by the procedure. -# Results: -# TODO - -proc http::config {args} { - variable http - set options [lsort [array names http -*]] - set usage [join $options ", "] - if {[llength $args] == 0} { - set result {} - foreach name $options { - lappend result $name $http($name) - } - return $result - } - regsub -all -- - $options {} options - set pat ^-([join $options |])$ - if {[llength $args] == 1} { - set flag [lindex $args 0] - if {[regexp -- $pat $flag]} { - return $http($flag) - } else { - return -code error "Unknown option $flag, must be: $usage" - } - } else { - foreach {flag value} $args { - if {[regexp -- $pat $flag]} { - set http($flag) $value - } else { - return -code error "Unknown option $flag, must be: $usage" - } - } - } -} - -# http::Finish -- -# -# Clean up the socket and eval close time callbacks -# -# Arguments: -# token Connection token. -# errormsg (optional) If set, forces status to error. -# skipCB (optional) If set, don't call the -command callback. This -# is useful when geturl wants to throw an exception instead -# of calling the callback. That way, the same error isn't -# reported to two places. -# -# Side Effects: -# Closes the socket - -proc http::Finish { token {errormsg ""} {skipCB 0}} { - variable $token - upvar 0 $token state - global errorInfo errorCode - if {[string length $errormsg] != 0} { - set state(error) [list $errormsg $errorInfo $errorCode] - set state(status) error - } - catch {close $state(sock)} - catch {after cancel $state(after)} - if {[info exists state(-command)] && !$skipCB} { - if {[catch {eval $state(-command) {$token}} err]} { - if {[string length $errormsg] == 0} { - set state(error) [list $err $errorInfo $errorCode] - set state(status) error - } - } - if {[info exist state(-command)]} { - # Command callback may already have unset our state - unset state(-command) - } - } -} - -# http::reset -- -# -# See documentaion for details. -# -# Arguments: -# token Connection token. -# why Status info. -# -# Side Effects: -# See Finish - -proc http::reset { token {why reset} } { - variable $token - upvar 0 $token state - set state(status) $why - catch {fileevent $state(sock) readable {}} - catch {fileevent $state(sock) writable {}} - Finish $token - if {[info exists state(error)]} { - set errorlist $state(error) - unset state - eval error $errorlist - } -} - -# http::geturl -- -# -# Establishes a connection to a remote url via http. -# -# Arguments: -# url The http URL to goget. -# args Option value pairs. Valid options include: -# -blocksize, -validate, -headers, -timeout -# Results: -# Returns a token for this connection. -# This token is the name of an array that the caller should -# unset to garbage collect the state. - -proc http::geturl { url args } { - variable http - variable urlTypes - - # Initialize the state variable, an array. We'll return the - # name of this array as the token for the transaction. - - if {![info exists http(uid)]} { - set http(uid) 0 - } - set token [namespace current]::[incr http(uid)] - variable $token - upvar 0 $token state - reset $token - - # Process command options. - - array set state { - -blocksize 8192 - -queryblocksize 8192 - -validate 0 - -headers {} - -timeout 0 - -type application/x-www-form-urlencoded - -queryprogress {} - state header - meta {} - currentsize 0 - totalsize 0 - querylength 0 - queryoffset 0 - type text/html - body {} - status "" - http "" - } - set options {-blocksize -channel -command -handler -headers \ - -progress -query -queryblocksize -querychannel -queryprogress\ - -validate -timeout -type} - set usage [join $options ", "] - regsub -all -- - $options {} options - set pat ^-([join $options |])$ - foreach {flag value} $args { - if {[regexp $pat $flag]} { - # Validate numbers - if {[info exists state($flag)] && \ - [string is integer -strict $state($flag)] && \ - ![string is integer -strict $value]} { - unset $token - return -code error "Bad value for $flag ($value), must be integer" - } - set state($flag) $value - } else { - unset $token - return -code error "Unknown option $flag, can be: $usage" - } - } - - # Make sure -query and -querychannel aren't both specified - - set isQueryChannel [info exists state(-querychannel)] - set isQuery [info exists state(-query)] - if {$isQuery && $isQueryChannel} { - unset $token - return -code error "Can't combine -query and -querychannel options!" - } - - # Validate URL, determine the server host and port, and check proxy case - - if {![regexp -nocase {^(([^:]*)://)?([^/:]+)(:([0-9]+))?(/.*)?$} $url \ - x prefix proto host y port srvurl]} { - unset $token - error "Unsupported URL: $url" - } - if {[string length $proto] == 0} { - set proto http - set url ${proto}://$url - } - if {![info exists urlTypes($proto)]} { - unset $token - return -code error "unsupported url type \"$proto\"" - } - set defport [lindex $urlTypes($proto) 0] - set defcmd [lindex $urlTypes($proto) 1] - - if {[string length $port] == 0} { - set port $defport - } - if {[string length $srvurl] == 0} { - set srvurl / - } - if {[string length $proto] == 0} { - set url http://$url - } - set state(url) $url - if {![catch {$http(-proxyfilter) $host} proxy]} { - set phost [lindex $proxy 0] - set pport [lindex $proxy 1] - } - - # If a timeout is specified we set up the after event - # and arrange for an asynchronous socket connection. - - if {$state(-timeout) > 0} { - set state(after) [after $state(-timeout) \ - [list http::reset $token timeout]] - set async -async - } else { - set async "" - } - - # If we are using the proxy, we must pass in the full URL that - # includes the server name. - - if {[info exists phost] && [string length $phost]} { - set srvurl $url - set conStat [catch {eval $defcmd $async {$phost $pport}} s] - } else { - set conStat [catch {eval $defcmd $async {$host $port}} s] - } - if {$conStat} { - - # something went wrong while trying to establish the connection - # Clean up after events and such, but DON'T call the command callback - # (if available) because we're going to throw an exception from here - # instead. - Finish $token "" 1 - cleanup $token - return -code error $s - } - set state(sock) $s - - # Wait for the connection to complete - - if {$state(-timeout) > 0} { - fileevent $s writable [list http::Connect $token] - http::wait $token - if {$state(status) != "connect"} { - - # Likely to be connection timeout. If there was a connection - # error, (e.g., bad port), then http::wait will have - # raised an error already - - return $token - } - set state(status) "" - } - - # Send data in cr-lf format, but accept any line terminators - - fconfigure $s -translation {auto crlf} -buffersize $state(-blocksize) - - # The following is disallowed in safe interpreters, but the socket - # is already in non-blocking mode in that case. - - catch {fconfigure $s -blocking off} - set how GET - if {$isQuery} { - set state(querylength) [string length $state(-query)] - if {$state(querylength) > 0} { - set how POST - set contDone 0 - } else { - # there's no query data - unset state(-query) - set isQuery 0 - } - } elseif {$state(-validate)} { - set how HEAD - } elseif {$isQueryChannel} { - set how POST - # The query channel must be blocking for the async Write to - # work properly. - fconfigure $state(-querychannel) -blocking 1 -translation binary - set contDone 0 - } - - if {[catch { - puts $s "$how $srvurl HTTP/1.0" - puts $s "Accept: $http(-accept)" - puts $s "Host: $host" - puts $s "User-Agent: $http(-useragent)" - foreach {key value} $state(-headers) { - regsub -all \[\n\r\] $value {} value - set key [string trim $key] - if {[string equal $key "Content-Length"]} { - set contDone 1 - set state(querylength) $value - } - if {[string length $key]} { - puts $s "$key: $value" - } - } - if {$isQueryChannel && $state(querylength) == 0} { - # Try to determine size of data in channel - # If we cannot seek, the surrounding catch will trap us - - set start [tell $state(-querychannel)] - seek $state(-querychannel) 0 end - set state(querylength) \ - [expr {[tell $state(-querychannel)] - $start}] - seek $state(-querychannel) $start - } - - # Flush the request header and set up the fileevent that will - # either push the POST data or read the response. - # - # fileevent note: - # - # It is possible to have both the read and write fileevents active - # at this point. The only scenario it seems to affect is a server - # that closes the connection without reading the POST data. - # (e.g., early versions TclHttpd in various error cases). - # Depending on the platform, the client may or may not be able to - # get the response from the server because of the error it will - # get trying to write the post data. Having both fileevents active - # changes the timing and the behavior, but no two platforms - # (among Solaris, Linux, and NT) behave the same, and none - # behave all that well in any case. Servers should always read thier - # POST data if they expect the client to read their response. - - if {$isQuery || $isQueryChannel} { - puts $s "Content-Type: $state(-type)" - if {!$contDone} { - puts $s "Content-Length: $state(querylength)" - } - puts $s "" - fconfigure $s -translation {auto binary} - fileevent $s writable [list http::Write $token] - } else { - puts $s "" - flush $s - fileevent $s readable [list http::Event $token] - } - - if {! [info exists state(-command)]} { - - # geturl does EVERYTHING asynchronously, so if the user - # calls it synchronously, we just do a wait here. - - wait $token - } - } err]} { - # The socket probably was never connected, - # or the connection dropped later. - - # Clean up after events and such, but DON'T call the command callback - # (if available) because we're going to throw an exception from here - # instead. - - Finish $token $err 1 - cleanup $token - return -code error $err - } - - return $token -} - -# Data access functions: -# Data - the URL data -# Status - the transaction status: ok, reset, eof, timeout -# Code - the HTTP transaction code, e.g., 200 -# Size - the size of the URL data - -proc http::data {token} { - variable $token - upvar 0 $token state - return $state(body) -} -proc http::status {token} { - variable $token - upvar 0 $token state - return $state(status) -} -proc http::code {token} { - variable $token - upvar 0 $token state - return $state(http) -} -proc http::ncode {token} { - variable $token - upvar 0 $token state - if {[regexp {[0-9]{3}} $state(http) numeric_code]} { - return $numeric_code - } else { - return $state(http) - } -} -proc http::size {token} { - variable $token - upvar 0 $token state - return $state(currentsize) -} - -# http::cleanup -# -# Garbage collect the state associated with a transaction -# -# Arguments -# token The token returned from http::geturl -# -# Side Effects -# unsets the state array - -proc http::cleanup {token} { - variable $token - upvar 0 $token state - if {[info exist state]} { - unset state - } -} - -# http::Connect -# -# This callback is made when an asyncronous connection completes. -# -# Arguments -# token The token returned from http::geturl -# -# Side Effects -# Sets the status of the connection, which unblocks -# the waiting geturl call - - proc http::Connect {token} { - variable $token - upvar 0 $token state - global errorInfo errorCode - if {[eof $state(sock)] || - [string length [fconfigure $state(sock) -error]]} { - set state(status) error - set state(error) [list \ - "connect failed [fconfigure $state(sock) -error]" \ - $errorInfo $errorCode] - } else { - set state(status) connect - } - fileevent $state(sock) writable {} - } - -# http::Write -# -# Write POST query data to the socket -# -# Arguments -# token The token for the connection -# -# Side Effects -# Write the socket and handle callbacks. - -proc http::Write {token} { - variable $token - upvar 0 $token state - set s $state(sock) - - # Output a block. Tcl will buffer this if the socket blocks - - set done 0 - if {[catch { - - # Catch I/O errors on dead sockets - - if {[info exists state(-query)]} { - - # Chop up large query strings so queryprogress callback - # can give smooth feedback - - puts -nonewline $s \ - [string range $state(-query) $state(queryoffset) \ - [expr {$state(queryoffset) + $state(-queryblocksize) - 1}]] - incr state(queryoffset) $state(-queryblocksize) - if {$state(queryoffset) >= $state(querylength)} { - set state(queryoffset) $state(querylength) - set done 1 - } - } else { - - # Copy blocks from the query channel - - set outStr [read $state(-querychannel) $state(-queryblocksize)] - puts -nonewline $s $outStr - incr state(queryoffset) [string length $outStr] - if {[eof $state(-querychannel)]} { - set done 1 - } - } - } err]} { - # Do not call Finish here, but instead let the read half of - # the socket process whatever server reply there is to get. - - set state(posterror) $err - set done 1 - } - if {$done} { - catch {flush $s} - fileevent $s writable {} - fileevent $s readable [list http::Event $token] - } - - # Callback to the client after we've completely handled everything - - if {[string length $state(-queryprogress)]} { - eval $state(-queryprogress) [list $token $state(querylength)\ - $state(queryoffset)] - } -} - -# http::Event -# -# Handle input on the socket -# -# Arguments -# token The token returned from http::geturl -# -# Side Effects -# Read the socket and handle callbacks. - - proc http::Event {token} { - variable $token - upvar 0 $token state - set s $state(sock) - - if {[eof $s]} { - Eof $token - return - } - if {[string equal $state(state) "header"]} { - if {[catch {gets $s line} n]} { - Finish $token $n - } elseif {$n == 0} { - set state(state) body - if {![regexp -nocase ^text $state(type)]} { - # Turn off conversions for non-text data - fconfigure $s -translation binary - if {[info exists state(-channel)]} { - fconfigure $state(-channel) -translation binary - } - } - if {[info exists state(-channel)] && - ![info exists state(-handler)]} { - # Initiate a sequence of background fcopies - fileevent $s readable {} - CopyStart $s $token - } - } elseif {$n > 0} { - if {[regexp -nocase {^content-type:(.+)$} $line x type]} { - set state(type) [string trim $type] - } - if {[regexp -nocase {^content-length:(.+)$} $line x length]} { - set state(totalsize) [string trim $length] - } - if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} { - lappend state(meta) $key [string trim $value] - } elseif {[regexp ^HTTP $line]} { - set state(http) $line - } - } - } else { - if {[catch { - if {[info exists state(-handler)]} { - set n [eval $state(-handler) {$s $token}] - } else { - set block [read $s $state(-blocksize)] - set n [string length $block] - if {$n >= 0} { - append state(body) $block - } - } - if {$n >= 0} { - incr state(currentsize) $n - } - } err]} { - Finish $token $err - } else { - if {[info exists state(-progress)]} { - eval $state(-progress) {$token $state(totalsize) $state(currentsize)} - } - } - } -} - -# http::CopyStart -# -# Error handling wrapper around fcopy -# -# Arguments -# s The socket to copy from -# token The token returned from http::geturl -# -# Side Effects -# This closes the connection upon error - - proc http::CopyStart {s token} { - variable $token - upvar 0 $token state - if {[catch { - fcopy $s $state(-channel) -size $state(-blocksize) -command \ - [list http::CopyDone $token] - } err]} { - Finish $token $err - } -} - -# http::CopyDone -# -# fcopy completion callback -# -# Arguments -# token The token returned from http::geturl -# count The amount transfered -# -# Side Effects -# Invokes callbacks - - proc http::CopyDone {token count {error {}}} { - variable $token - upvar 0 $token state - set s $state(sock) - incr state(currentsize) $count - if {[info exists state(-progress)]} { - eval $state(-progress) {$token $state(totalsize) $state(currentsize)} - } - # At this point the token may have been reset - if {[string length $error]} { - Finish $token $error - } elseif {[catch {eof $s} iseof] || $iseof} { - Eof $token - } else { - CopyStart $s $token - } -} - -# http::Eof -# -# Handle eof on the socket -# -# Arguments -# token The token returned from http::geturl -# -# Side Effects -# Clean up the socket - - proc http::Eof {token} { - variable $token - upvar 0 $token state - if {[string equal $state(state) "header"]} { - # Premature eof - set state(status) eof - } else { - set state(status) ok - } - set state(state) eof - Finish $token -} - -# http::wait -- -# -# See documentaion for details. -# -# Arguments: -# token Connection token. -# -# Results: -# The status after the wait. - -proc http::wait {token} { - variable $token - upvar 0 $token state - - if {![info exists state(status)] || [string length $state(status)] == 0} { - # We must wait on the original variable name, not the upvar alias - vwait $token\(status) - } - if {[info exists state(error)]} { - set errorlist $state(error) - unset state - eval error $errorlist - } - return $state(status) -} - -# http::formatQuery -- -# -# See documentaion for details. -# Call http::formatQuery with an even number of arguments, where -# the first is a name, the second is a value, the third is another -# name, and so on. -# -# Arguments: -# args A list of name-value pairs. -# -# Results: -# TODO - -proc http::formatQuery {args} { - set result "" - set sep "" - foreach i $args { - append result $sep [mapReply $i] - if {[string compare $sep "="]} { - set sep = - } else { - set sep & - } - } - return $result -} - -# http::mapReply -- -# -# Do x-www-urlencoded character mapping -# -# Arguments: -# string The string the needs to be encoded -# -# Results: -# The encoded string - - proc http::mapReply {string} { - variable formMap - - # The spec says: "non-alphanumeric characters are replaced by '%HH'" - # 1 leave alphanumerics characters alone - # 2 Convert every other character to an array lookup - # 3 Escape constructs that are "special" to the tcl parser - # 4 "subst" the result, doing all the array substitutions - - set alphanumeric a-zA-Z0-9 - regsub -all \[^$alphanumeric\] $string {$formMap(&)} string - regsub -all \n $string {\\n} string - regsub -all \t $string {\\t} string - regsub -all {[][{})\\]\)} $string {\\&} string - return [subst $string] -} - -# http::ProxyRequired -- -# Default proxy filter. -# -# Arguments: -# host The destination host -# -# Results: -# The current proxy settings - - proc http::ProxyRequired {host} { - variable http - if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} { - if {![info exists http(-proxyport)] || ![string length $http(-proxyport)]} { - set http(-proxyport) 8080 - } - return [list $http(-proxyhost) $http(-proxyport)] - } else { - return {} - } -} DELETED library/http2.3/pkgIndex.tcl Index: library/http2.3/pkgIndex.tcl ================================================================== --- library/http2.3/pkgIndex.tcl +++ /dev/null @@ -1,11 +0,0 @@ -# Tcl package index file, version 1.1 -# This file is generated by the "pkg_mkIndex" command -# and sourced either when an application starts up or -# by a "package unknown" script. It invokes the -# "package ifneeded" command to set up package-related -# information so that packages will be loaded automatically -# in response to "package require" commands. When this -# script is sourced, the variable $dir must contain the -# full path name of this file's directory. - -package ifneeded http 2.3 [list tclPkgSetup $dir http 2.3 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister}}}] Index: library/init.tcl ================================================================== --- library/init.tcl +++ library/init.tcl @@ -1,11 +1,11 @@ # init.tcl -- # # Default system startup file for Tcl-based applications. Defines # "unknown" procedure and auto-load facilities. # -# RCS: @(#) $Id: init.tcl,v 1.39 2000/02/01 19:26:08 ericm Exp $ +# RCS: @(#) $Id: init.tcl,v 1.39.2.2 2001/04/03 22:54:38 hobbs Exp $ # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. # Copyright (c) 1998-1999 Scriptics Corporation. # @@ -163,11 +163,11 @@ # then concatenate its arguments onto the end and evaluate it. set cmd [lindex $args 0] if {[regexp "^namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} { set arglist [lrange $args 1 end] - set ret [catch {uplevel $cmd $arglist} result] + set ret [catch {uplevel 1 ::$cmd $arglist} result] if {$ret == 0} { return $result } else { return -code $ret -errorcode $errorCode $result } @@ -186,11 +186,11 @@ # if {[info exists unknown_pending($name)]} { return -code error "self-referential recursion in \"unknown\" for command \"$name\""; } set unknown_pending($name) pending; - set ret [catch {auto_load $name [uplevel 1 {namespace current}]} msg] + set ret [catch {auto_load $name [uplevel 1 {::namespace current}]} msg] unset unknown_pending($name); if {$ret != 0} { append errorInfo "\n (autoloading \"$name\")" return -code $ret -errorcode $errorCode -errorinfo $errorInfo $msg } @@ -226,11 +226,11 @@ set errorInfo $savedErrorInfo set redir "" if {[string equal [info commands console] ""]} { set redir ">&@stdout <@stdin" } - return [uplevel exec $redir $new [lrange $args 1 end]] + return [uplevel 1 exec $redir $new [lrange $args 1 end]] } } set errorCode $savedErrorCode set errorInfo $savedErrorInfo if {[string equal $name "!!"]} { @@ -242,11 +242,11 @@ catch {regsub -all -- $old $newcmd $new newcmd} } if {[info exists newcmd]} { tclLog $newcmd history change $newcmd 0 - return [uplevel $newcmd] + return [uplevel 1 $newcmd] } set ret [catch {set cmds [info commands $name*]} msg] if {[string equal $name "::"]} { set name "" @@ -254,11 +254,11 @@ if {$ret != 0} { return -code $ret -errorcode $errorCode \ "error in unknown while checking if \"$name\" is a unique command abbreviation: $msg" } if {[llength $cmds] == 1} { - return [uplevel [lreplace $args 0 0 $cmds]] + return [uplevel 1 [lreplace $args 0 0 $cmds]] } if {[llength $cmds]} { if {[string equal $name ""]} { return -code error "empty command name \"\"" } else { @@ -284,11 +284,11 @@ proc auto_load {cmd {namespace {}}} { global auto_index auto_oldpath auto_path if {[string length $namespace] == 0} { - set namespace [uplevel {namespace current}] + set namespace [uplevel 1 [list ::namespace current]] } set nameList [auto_qualify $cmd $namespace] # workaround non canonical auto_index entries that might be around # from older auto_mkindex versions lappend nameList $cmd @@ -453,11 +453,17 @@ # a canonical namespace as returned by [namespace current] proc auto_import {pattern} { global auto_index - set ns [uplevel namespace current] + # If no namespace is specified, this will be an error case + + if {![string match *::* $pattern]} { + return + } + + set ns [uplevel 1 [list ::namespace current]] set patternList [auto_qualify $pattern $ns] auto_load_index foreach pattern $patternList { @@ -501,17 +507,23 @@ md rename ren rmdir rd time type ver vol] if {[string equal $tcl_platform(os) "Windows NT"]} { # NT includes the 'start' built-in lappend shellBuiltins "start" } + if {[info exists env(PATHEXT)]} { + # Add an initial ; to have the {} extension check first. + set execExtensions [split ";$env(PATHEXT)" ";"] + } else { + set execExtensions [list {} .com .exe .bat] + } if {[lsearch -exact $shellBuiltins $name] != -1} { return [set auto_execs($name) [list $env(COMSPEC) /c $name]] } if {[llength [file split $name]] != 1} { - foreach ext {{} .com .exe .bat} { + foreach ext $execExtensions { set file ${name}${ext} if {[file exists $file] && ![file isdirectory $file]} { return [set auto_execs($name) [list $file]] } } @@ -537,11 +549,11 @@ foreach dir [split $path {;}] { # Skip already checked directories if {[info exists checked($dir)] || [string equal {} $dir]} { continue } set checked($dir) {} - foreach ext {{} .com .exe .bat} { + foreach ext $execExtensions { set file [file join $dir ${name}${ext}] if {[file exists $file] && ![file isdirectory $file]} { return [set auto_execs($name) [list $file]] } } Index: library/msgcat/msgcat.tcl ================================================================== --- library/msgcat/msgcat.tcl +++ library/msgcat/msgcat.tcl @@ -8,13 +8,13 @@ # Copyright (c) 1998 by Mark Harrison. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: msgcat.tcl,v 1.4 2000/04/11 21:16:18 ericm Exp $ +# RCS: @(#) $Id: msgcat.tcl,v 1.4.2.3 2000/08/08 17:53:42 hobbs Exp $ -package provide msgcat 1.0 +package provide msgcat 1.1 namespace eval msgcat { namespace export mc mcset mclocale mcpreferences mcunknown # Records the current locale as passed to mclocale @@ -65,11 +65,11 @@ } set ns [namespace parent $ns] } # we have not found the translation return [uplevel 1 [list [namespace origin mcunknown] \ - $::msgcat::locale $src]] + $::msgcat::locale $src] $args] } # msgcat::mclocale -- # # Query or set the current locale. @@ -168,20 +168,27 @@ # # This routine is called by msgcat::mc if a translation cannot # be found for a string. This routine is intended to be replaced # by an application specific routine for error reporting # purposes. The default behavior is to return the source string. +# If additional args are specified, the format command will be used +# to work them into the traslated string. # # Arguments: # locale The current locale. # src The string to be translated. +# args Args to pass to the format command # # Results: # Returns the translated value. -proc msgcat::mcunknown {locale src} { - return $src +proc msgcat::mcunknown {locale src args} { + if {[llength $args]} { + return [eval [list format $src] $args] + } else { + return $src + } } # Initialize the default locale namespace eval msgcat { Index: library/msgcat/pkgIndex.tcl ================================================================== --- library/msgcat/pkgIndex.tcl +++ library/msgcat/pkgIndex.tcl @@ -1,1 +1,1 @@ -package ifneeded msgcat 1.0 [list source [file join $dir msgcat.tcl]] +package ifneeded msgcat 1.1 [list source [file join $dir msgcat.tcl]] DELETED library/msgcat1.0/msgcat.tcl Index: library/msgcat1.0/msgcat.tcl ================================================================== --- library/msgcat1.0/msgcat.tcl +++ /dev/null @@ -1,194 +0,0 @@ -# msgcat.tcl -- -# -# This file defines various procedures which implement a -# message catalog facility for Tcl programs. It should be -# loaded with the command "package require msgcat". -# -# Copyright (c) 1998 by Scriptics Corporation. -# Copyright (c) 1998 by Mark Harrison. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# RCS: @(#) $Id: msgcat.tcl,v 1.4 2000/04/11 21:16:18 ericm Exp $ - -package provide msgcat 1.0 - -namespace eval msgcat { - namespace export mc mcset mclocale mcpreferences mcunknown - - # Records the current locale as passed to mclocale - variable locale "" - - # Records the list of locales to search - variable loclist {} - - # Records the mapping between source strings and translated strings. The - # array key is of the form ",," and the value is - # the translated string. - array set msgs {} -} - -# msgcat::mc -- -# -# Find the translation for the given string based on the current -# locale setting. Check the local namespace first, then look in each -# parent namespace until the source is found. If additional args are -# specified, use the format command to work them into the traslated -# string. -# -# Arguments: -# src The string to translate. -# args Args to pass to the format command -# -# Results: -# Returns the translatd string. Propagates errors thrown by the -# format command. - -proc msgcat::mc {src args} { - # Check for the src in each namespace starting from the local and - # ending in the global. - - set ns [uplevel {namespace current}] - - while {$ns != ""} { - foreach loc $::msgcat::loclist { - if {[info exists ::msgcat::msgs($loc,$ns,$src)]} { - if {[llength $args] == 0} { - return $::msgcat::msgs($loc,$ns,$src) - } else { - return [eval \ - [list format $::msgcat::msgs($loc,$ns,$src)] \ - $args] - } - } - } - set ns [namespace parent $ns] - } - # we have not found the translation - return [uplevel 1 [list [namespace origin mcunknown] \ - $::msgcat::locale $src]] -} - -# msgcat::mclocale -- -# -# Query or set the current locale. -# -# Arguments: -# newLocale (Optional) The new locale string. Locale strings -# should be composed of one or more sublocale parts -# separated by underscores (e.g. en_US). -# -# Results: -# Returns the current locale. - -proc msgcat::mclocale {args} { - set len [llength $args] - - if {$len > 1} { - error {wrong # args: should be "mclocale ?newLocale?"} - } - - set args [string tolower $args] - if {$len == 1} { - set ::msgcat::locale $args - set ::msgcat::loclist {} - set word "" - foreach part [split $args _] { - set word [string trimleft "${word}_${part}" _] - set ::msgcat::loclist [linsert $::msgcat::loclist 0 $word] - } - } - return $::msgcat::locale -} - -# msgcat::mcpreferences -- -# -# Fetch the list of locales used to look up strings, ordered from -# most preferred to least preferred. -# -# Arguments: -# None. -# -# Results: -# Returns an ordered list of the locales preferred by the user. - -proc msgcat::mcpreferences {} { - return $::msgcat::loclist -} - -# msgcat::mcload -- -# -# Attempt to load message catalogs for each locale in the -# preference list from the specified directory. -# -# Arguments: -# langdir The directory to search. -# -# Results: -# Returns the number of message catalogs that were loaded. - -proc msgcat::mcload {langdir} { - set x 0 - foreach p [::msgcat::mcpreferences] { - set langfile [file join $langdir $p.msg] - if {[file exists $langfile]} { - incr x - uplevel [list source $langfile] - } - } - return $x -} - -# msgcat::mcset -- -# -# Set the translation for a given string in a specified locale. -# -# Arguments: -# locale The locale to use. -# src The source string. -# dest (Optional) The translated string. If omitted, -# the source string is used. -# -# Results: -# Returns the new locale. - -proc msgcat::mcset {locale src {dest ""}} { - if {[string equal $dest ""]} { - set dest $src - } - - set ns [uplevel {namespace current}] - - set ::msgcat::msgs([string tolower $locale],$ns,$src) $dest - return $dest -} - -# msgcat::mcunknown -- -# -# This routine is called by msgcat::mc if a translation cannot -# be found for a string. This routine is intended to be replaced -# by an application specific routine for error reporting -# purposes. The default behavior is to return the source string. -# -# Arguments: -# locale The current locale. -# src The string to be translated. -# -# Results: -# Returns the translated value. - -proc msgcat::mcunknown {locale src} { - return $src -} - -# Initialize the default locale - -namespace eval msgcat { - # set default locale, try to get from environment - if {[info exists ::env(LANG)]} { - mclocale $::env(LANG) - } else { - mclocale "C" - } -} DELETED library/msgcat1.0/pkgIndex.tcl Index: library/msgcat1.0/pkgIndex.tcl ================================================================== --- library/msgcat1.0/pkgIndex.tcl +++ /dev/null @@ -1,1 +0,0 @@ -package ifneeded msgcat 1.0 [list source [file join $dir msgcat.tcl]] Index: library/opt/optparse.tcl ================================================================== --- library/opt/optparse.tcl +++ library/opt/optparse.tcl @@ -6,21 +6,21 @@ # WARNING: This code will go away in a future release # of Tcl. It is NOT supported and you should not rely # on it. If your code does rely on this package you # may directly incorporate this code into your application. # -# RCS: @(#) $Id: optparse.tcl,v 1.2 1999/04/16 00:47:18 stanton Exp $ +# RCS: @(#) $Id: optparse.tcl,v 1.2.12.2 2001/04/03 22:54:38 hobbs Exp $ -package provide opt 0.4.1 +package provide opt 0.4.2 namespace eval ::tcl { # Exported APIs namespace export OptKeyRegister OptKeyDelete OptKeyError OptKeyParse \ OptProc OptProcArgGiven OptParse \ Lempty Lget \ - Lassign Lvarpop Lvarpop1 Lvarset Lvarincr Lfirst Lrest \ + Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \ SetMax SetMin ################# Example of use / 'user documentation' ################### @@ -107,13 +107,13 @@ # singleStep :== { instruction parameters* } # # instruction :== single element list # # (the difference between singleStep and program is that \ -# llength [Lfirst $program] >= 2 +# llength [lindex $program 0] >= 2 # while -# llength [Lfirst $singleStep] == 1 +# llength [lindex $singleStep 0] == 1 # ) # # And for this application: # # singleStep :== { instruction varname {hasBeenSet currentValue} type @@ -172,11 +172,11 @@ if {$state == "args"} { # more items after 'args'... return -code error "'args' special argument must be the last one"; } set res [OptNormalizeOne $item]; - set state [Lfirst $res]; + set state [lindex $res 0]; if {$inflags} { if {$state == "flags"} { # add to 'subprogram' lappend flagsprg $res; } else { @@ -237,11 +237,11 @@ # (otherwise one should really use OptKeyRegister once + OptKeyParse # as it is way faster or simply OptProc which does it all) # Assign a temporary key, call OptKeyParse and then free the storage proc ::tcl::OptParse {desc arglist} { set tempkey [OptKeyRegister $desc]; - set ret [catch {uplevel [list ::tcl::OptKeyParse $tempkey $arglist]} res]; + set ret [catch {uplevel 1 [list ::tcl::OptKeyParse $tempkey $arglist]} res]; OptKeyDelete $tempkey; return -code $ret $res; } # Helper function, replacement for proc that both @@ -250,21 +250,21 @@ # and add a first line to the code to call the OptKeyParse proc # Stores the list of variables that have been actually given by the user # (the other will be sets to their default value) # into local variable named "Args". proc ::tcl::OptProc {name desc body} { - set namespace [uplevel namespace current]; - if { ([string match $name "::*"]) + set namespace [uplevel 1 [list ::namespace current]]; + if { ([string match "::*" $name]) || ([string compare $namespace "::"]==0)} { # absolute name or global namespace, name is the key set key $name; } else { # we are relative to some non top level namespace: set key "${namespace}::${name}"; } OptKeyRegister $desc $key; - uplevel [list proc $name args "set Args \[::tcl::OptKeyParse $key \$args\]\n$body"]; + uplevel 1 [list ::proc $name args "set Args \[::tcl::OptKeyParse $key \$args\]\n$body"]; return $key; } # Check that a argument has been given # assumes that "OptProc" has been used as it will check in "Args" list proc ::tcl::OptProcArgGiven {argname} { @@ -275,19 +275,19 @@ ####### # Programs/Descriptions manipulation # Return the instruction word/list of a given step/(sub)program proc OptInstr {lst} { - Lfirst $lst; + lindex $lst 0; } # Is a (sub) program or a plain instruction ? proc OptIsPrg {lst} { expr {[llength [OptInstr $lst]]>=2} } # Is this instruction a program counter or a real instr proc OptIsCounter {item} { - expr {[Lfirst $item]=="P"} + expr {[lindex $item 0]=="P"} } # Current program counter (2nd word of first word) proc OptGetPrgCounter {lst} { Lget $lst {0 1} } @@ -297,19 +297,19 @@ set lst [lreplace $lst 0 0 [concat "P" $newValue]]; } # returns a list of currently selected items. proc OptSelection {lst} { set res {}; - foreach idx [lrange [Lfirst $lst] 1 end] { + foreach idx [lrange [lindex $lst 0] 1 end] { lappend res [Lget $lst $idx]; } return $res; } # Advance to next description proc OptNextDesc {descName} { - uplevel [list Lvarincr $descName {0 1}]; + uplevel 1 [list Lvarincr $descName {0 1}]; } # Get the current description, eventually descend proc OptCurDesc {descriptions} { lindex $descriptions [OptGetPrgCounter $descriptions]; @@ -346,11 +346,11 @@ # ^hasBeenSet flag } # empty state means done/paste the end of the program proc OptState {item} { - Lfirst $item + lindex $item 0 } # current state proc OptCurState {descriptions} { OptState [OptCurDesc $descriptions]; @@ -359,15 +359,15 @@ ####### # Arguments manipulation # Returns the argument that has to be processed now proc OptCurrentArg {lst} { - Lfirst $lst; + lindex $lst 0; } # Advance to next argument proc OptNextArg {argsName} { - uplevel [list Lvarpop1 $argsName]; + uplevel 1 [list Lvarpop1 $argsName]; } ####### @@ -960,11 +960,11 @@ # Gets the value of one leaf of a lists tree proc ::tcl::Lget {list indexLst} { if {[llength $indexLst] <= 1} { return [lindex $list $indexLst]; } - Lget [lindex $list [Lfirst $indexLst]] [Lrest $indexLst]; + Lget [lindex $list [lindex $indexLst 0]] [lrange $indexLst 1 end]; } # Sets the value of one leaf of a lists tree # (we use the version that does not create the elements because # it would be even slower... needs to be written in C !) # (nb: there is a non trivial recursive problem with indexes 0, @@ -975,17 +975,17 @@ proc ::tcl::Lvarset {listName indexLst newValue} { upvar $listName list; if {[llength $indexLst] <= 1} { Lvarset1nc list $indexLst $newValue; } else { - set idx [Lfirst $indexLst]; + set idx [lindex $indexLst 0]; set targetList [lindex $list $idx]; # reduce refcount on targetList (not really usefull now, # could be with optimizing compiler) # Lvarset1 list $idx {}; # recursively replace in targetList - Lvarset targetList [Lrest $indexLst] $newValue; + Lvarset targetList [lrange $indexLst 1 end] $newValue; # put updated sub list back in the tree Lvarset1nc list $idx $targetList; } } # Set one cell to a value, eventually create all the needed elements @@ -1015,16 +1015,16 @@ proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} { upvar $listName list; if {[llength $indexLst] <= 1} { Lvarincr1 list $indexLst $howMuch; } else { - set idx [Lfirst $indexLst]; + set idx [lindex $indexLst 0]; set targetList [lindex $list $idx]; # reduce refcount on targetList Lvarset1nc list $idx {}; # recursively replace in targetList - Lvarincr targetList [Lrest $indexLst] $howMuch; + Lvarincr targetList [lrange $indexLst 1 end] $howMuch; # put updated sub list back in the tree Lvarset1nc list $idx $targetList; } } # Increments the value of one cell of a list @@ -1032,18 +1032,10 @@ upvar $listName list; set newValue [expr {[lindex $list $index]+$howMuch}]; set list [lreplace $list $index $index $newValue]; return $newValue; } -# Returns the first element of a list -proc ::tcl::Lfirst {list} { - lindex $list 0 -} -# Returns the rest of the list minus first element -proc ::tcl::Lrest {list} { - lrange $list 1 end -} # Removes the first element of a list # and returns the new list value proc ::tcl::Lvarpop1 {listName} { upvar $listName list; set list [lrange $list 1 end]; @@ -1050,11 +1042,11 @@ } # Same but returns the removed element # (Like the tclX version) proc ::tcl::Lvarpop {listName} { upvar $listName list; - set el [Lfirst $list]; + set el [lindex $list 0]; set list [lrange $list 1 end]; return $el; } # Assign list elements to variables and return the length of the list proc ::tcl::Lassign {list args} { @@ -1061,11 +1053,11 @@ # faster than direct blown foreach (which does not byte compile) set i 0; set lg [llength $list]; foreach vname $args { if {$i>=$lg} break - uplevel [list set $vname [lindex $list $i]]; + uplevel 1 [list ::set $vname [lindex $list $i]]; incr i; } return $lg; } Index: library/opt/pkgIndex.tcl ================================================================== --- library/opt/pkgIndex.tcl +++ library/opt/pkgIndex.tcl @@ -6,6 +6,6 @@ # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. -package ifneeded opt 0.4.1 [list source [file join $dir optparse.tcl]] +package ifneeded opt 0.4.2 [list source [file join $dir optparse.tcl]] Index: library/opt0.4/optparse.tcl ================================================================== --- library/opt0.4/optparse.tcl +++ library/opt0.4/optparse.tcl @@ -6,21 +6,21 @@ # WARNING: This code will go away in a future release # of Tcl. It is NOT supported and you should not rely # on it. If your code does rely on this package you # may directly incorporate this code into your application. # -# RCS: @(#) $Id: optparse.tcl,v 1.2 1999/04/16 00:47:18 stanton Exp $ +# RCS: @(#) $Id: optparse.tcl,v 1.2.12.1 2000/08/07 21:32:11 hobbs Exp $ package provide opt 0.4.1 namespace eval ::tcl { # Exported APIs namespace export OptKeyRegister OptKeyDelete OptKeyError OptKeyParse \ OptProc OptProcArgGiven OptParse \ Lempty Lget \ - Lassign Lvarpop Lvarpop1 Lvarset Lvarincr Lfirst Lrest \ + Lassign Lvarpop Lvarpop1 Lvarset Lvarincr \ SetMax SetMin ################# Example of use / 'user documentation' ################### @@ -107,13 +107,13 @@ # singleStep :== { instruction parameters* } # # instruction :== single element list # # (the difference between singleStep and program is that \ -# llength [Lfirst $program] >= 2 +# llength [lindex $program 0] >= 2 # while -# llength [Lfirst $singleStep] == 1 +# llength [lindex $singleStep 0] == 1 # ) # # And for this application: # # singleStep :== { instruction varname {hasBeenSet currentValue} type @@ -172,11 +172,11 @@ if {$state == "args"} { # more items after 'args'... return -code error "'args' special argument must be the last one"; } set res [OptNormalizeOne $item]; - set state [Lfirst $res]; + set state [lindex $res 0]; if {$inflags} { if {$state == "flags"} { # add to 'subprogram' lappend flagsprg $res; } else { @@ -251,11 +251,11 @@ # Stores the list of variables that have been actually given by the user # (the other will be sets to their default value) # into local variable named "Args". proc ::tcl::OptProc {name desc body} { set namespace [uplevel namespace current]; - if { ([string match $name "::*"]) + if { ([string match "::*" $name]) || ([string compare $namespace "::"]==0)} { # absolute name or global namespace, name is the key set key $name; } else { # we are relative to some non top level namespace: @@ -275,19 +275,19 @@ ####### # Programs/Descriptions manipulation # Return the instruction word/list of a given step/(sub)program proc OptInstr {lst} { - Lfirst $lst; + lindex $lst 0; } # Is a (sub) program or a plain instruction ? proc OptIsPrg {lst} { expr {[llength [OptInstr $lst]]>=2} } # Is this instruction a program counter or a real instr proc OptIsCounter {item} { - expr {[Lfirst $item]=="P"} + expr {[lindex $item 0]=="P"} } # Current program counter (2nd word of first word) proc OptGetPrgCounter {lst} { Lget $lst {0 1} } @@ -297,11 +297,11 @@ set lst [lreplace $lst 0 0 [concat "P" $newValue]]; } # returns a list of currently selected items. proc OptSelection {lst} { set res {}; - foreach idx [lrange [Lfirst $lst] 1 end] { + foreach idx [lrange [lindex $lst 0] 1 end] { lappend res [Lget $lst $idx]; } return $res; } @@ -346,11 +346,11 @@ # ^hasBeenSet flag } # empty state means done/paste the end of the program proc OptState {item} { - Lfirst $item + lindex $item 0 } # current state proc OptCurState {descriptions} { OptState [OptCurDesc $descriptions]; @@ -359,11 +359,11 @@ ####### # Arguments manipulation # Returns the argument that has to be processed now proc OptCurrentArg {lst} { - Lfirst $lst; + lindex $lst 0; } # Advance to next argument proc OptNextArg {argsName} { uplevel [list Lvarpop1 $argsName]; } @@ -960,11 +960,11 @@ # Gets the value of one leaf of a lists tree proc ::tcl::Lget {list indexLst} { if {[llength $indexLst] <= 1} { return [lindex $list $indexLst]; } - Lget [lindex $list [Lfirst $indexLst]] [Lrest $indexLst]; + Lget [lindex $list [lindex $indexLst 0]] [lrange $indexLst 1 end]; } # Sets the value of one leaf of a lists tree # (we use the version that does not create the elements because # it would be even slower... needs to be written in C !) # (nb: there is a non trivial recursive problem with indexes 0, @@ -975,17 +975,17 @@ proc ::tcl::Lvarset {listName indexLst newValue} { upvar $listName list; if {[llength $indexLst] <= 1} { Lvarset1nc list $indexLst $newValue; } else { - set idx [Lfirst $indexLst]; + set idx [lindex $indexLst 0]; set targetList [lindex $list $idx]; # reduce refcount on targetList (not really usefull now, # could be with optimizing compiler) # Lvarset1 list $idx {}; # recursively replace in targetList - Lvarset targetList [Lrest $indexLst] $newValue; + Lvarset targetList [lrange $indexLst 1 end] $newValue; # put updated sub list back in the tree Lvarset1nc list $idx $targetList; } } # Set one cell to a value, eventually create all the needed elements @@ -1015,16 +1015,16 @@ proc ::tcl::Lvarincr {listName indexLst {howMuch 1}} { upvar $listName list; if {[llength $indexLst] <= 1} { Lvarincr1 list $indexLst $howMuch; } else { - set idx [Lfirst $indexLst]; + set idx [lindex $indexLst 0]; set targetList [lindex $list $idx]; # reduce refcount on targetList Lvarset1nc list $idx {}; # recursively replace in targetList - Lvarincr targetList [Lrest $indexLst] $howMuch; + Lvarincr targetList [lrange $indexLst 1 end] $howMuch; # put updated sub list back in the tree Lvarset1nc list $idx $targetList; } } # Increments the value of one cell of a list @@ -1032,18 +1032,10 @@ upvar $listName list; set newValue [expr {[lindex $list $index]+$howMuch}]; set list [lreplace $list $index $index $newValue]; return $newValue; } -# Returns the first element of a list -proc ::tcl::Lfirst {list} { - lindex $list 0 -} -# Returns the rest of the list minus first element -proc ::tcl::Lrest {list} { - lrange $list 1 end -} # Removes the first element of a list # and returns the new list value proc ::tcl::Lvarpop1 {listName} { upvar $listName list; set list [lrange $list 1 end]; @@ -1050,11 +1042,11 @@ } # Same but returns the removed element # (Like the tclX version) proc ::tcl::Lvarpop {listName} { upvar $listName list; - set el [Lfirst $list]; + set el [lindex $list 0]; set list [lrange $list 1 end]; return $el; } # Assign list elements to variables and return the length of the list proc ::tcl::Lassign {list args} { Index: library/package.tcl ================================================================== --- library/package.tcl +++ library/package.tcl @@ -1,11 +1,11 @@ # package.tcl -- # # utility procs formerly in init.tcl which can be loaded on demand # for package management. # -# RCS: @(#) $Id: package.tcl,v 1.14 2000/04/23 03:36:51 jingham Exp $ +# RCS: @(#) $Id: package.tcl,v 1.14.2.1 2001/04/03 22:54:38 hobbs Exp $ # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution @@ -31,17 +31,34 @@ # Results: # Returns 1 if the extension matches, 0 otherwise proc pkg_compareExtension { fileName {ext {}} } { global tcl_platform - if {[string length $ext] == 0} { - set ext [info sharedlibextension] - } + if {![string length $ext]} {set ext [info sharedlibextension]} if {[string equal $tcl_platform(platform) "windows"]} { - return [string equal -nocase [file extension $fileName] $ext] + return [string equal -nocase [file extension $fileName] $ext] } else { - return [string equal [file extension $fileName] $ext] + # Some unices add trailing numbers after the .so, so + # we could have something like '.so.1.2'. + set root $fileName + while {1} { + set currExt [file extension $root] + if {[string equal $currExt $ext]} { + return 1 + } + + # The current extension does not match; if it is not a numeric + # value, quit, as we are only looking to ignore version number + # extensions. Otherwise we might return 1 in this case: + # pkg_compareExtension foo.so.bar .so + # which should not match. + + if { ![string is integer -strict [string range $currExt 1 end]] } { + return 0 + } + set root [file rootname $root] + } } } # pkg_mkIndex -- # This procedure creates a package index in a given directory. The @@ -146,14 +163,27 @@ set c [interp create] # Load into the child any packages currently loaded in the parent # interpreter that match the -load pattern. + if {[string length $loadPat]} { + if {$doVerbose} { + tclLog "currently loaded packages: '[info loaded]'" + tclLog "trying to load all packages matching $loadPat" + } + if {![llength [info loaded]]} { + tclLog "warning: no packages are currently loaded, nothing" + tclLog "can possibly match '$loadPat'" + } + } foreach pkg [info loaded] { if {! [string match $loadPat [lindex $pkg 1]]} { continue } + if {$doVerbose} { + tclLog "package [lindex $pkg 1] matches '$loadPat'" + } if {[catch { load [lindex $pkg 0] [lindex $pkg 1] $c } err]} { if {$doVerbose} { tclLog "warning: load [lindex $pkg 0] [lindex $pkg 1]\nfailed with: $err" @@ -326,13 +356,21 @@ set what [$c eval set ::tcl::debug] if {$doVerbose} { tclLog "warning: error while $what $file: $msg" } } else { + set what [$c eval set ::tcl::debug] + if {$doVerbose} { + tclLog "successful $what of $file" + } set type [$c eval set ::tcl::type] set cmds [lsort [$c eval array names ::tcl::newCmds]] set pkgs [$c eval set ::tcl::newPkgs] + if {$doVerbose} { + tclLog "commands provided were $cmds" + tclLog "packages provided were $pkgs" + } if {[llength $pkgs] > 1} { tclLog "warning: \"$file\" provides more than one package ($pkgs)" } foreach pkg $pkgs { # cmds is empty/not used in the direct case @@ -418,11 +456,11 @@ # The procedure is used on the Macintosh to search a given directory for files # with a TEXT resource named "pkgIndex". If it exists it is sourced in to the # interpreter to setup the package database. proc tclMacPkgSearch {dir} { - foreach x [glob -nocomplain [file join $dir *.shlb]] { + foreach x [glob -directory $dir -nocomplain *.shlb] { if {[file isfile $x]} { set res [resource open $x] foreach y [resource list TEXT $res] { if {[string equal $y "pkgIndex"]} {source -rsrc pkgIndex} } @@ -458,11 +496,12 @@ set dir [lindex $use_path end] # we can't use glob in safe interps, so enclose the following # in a catch statement, where we get the pkgIndex files out # of the subdirectories catch { - foreach file [glob -nocomplain [file join $dir * pkgIndex.tcl]] { + foreach file [glob -directory $dir -join -nocomplain \ + * pkgIndex.tcl] { set dir [file dirname $file] if {[file readable $file] && ![info exists procdDirs($dir)]} { if {[catch {source $file} msg]} { tclLog "error reading package index file $file: $msg" } else { @@ -490,11 +529,11 @@ set dir [lindex $use_path end] if {![info exists procdDirs($dir)]} { tclMacPkgSearch $dir set procdDirs($dir) 1 } - foreach x [glob -nocomplain [file join $dir *]] { + foreach x [glob -directory $dir -nocomplain *] { if {[file isdirectory $x] && ![info exists procdDirs($x)]} { set dir $x tclMacPkgSearch $dir set procdDirs($dir) 1 } Index: library/safe.tcl ================================================================== --- library/safe.tcl +++ library/safe.tcl @@ -10,11 +10,11 @@ # Copyright (c) 1996-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: safe.tcl,v 1.6 1999/08/19 02:59:40 hobbs Exp $ +# RCS: @(#) $Id: safe.tcl,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $ # # The implementation is based on namespaces. These naming conventions # are followed: # Private procs starts with uppercase. @@ -494,11 +494,11 @@ # check that we don't have it yet as a children # of a previous dir if {[lsearch -exact $res $dir]<0} { lappend res $dir } - foreach sub [glob -nocomplain -- [file join $dir *]] { + foreach sub [glob -directory $dir -nocomplain *] { if {([file isdirectory $sub]) \ && ([lsearch -exact $res $sub]<0) } { # new sub dir, add it ! lappend res $sub } Index: mac/MW_TclAppleScriptHeader.pch ================================================================== --- mac/MW_TclAppleScriptHeader.pch +++ mac/MW_TclAppleScriptHeader.pch @@ -10,11 +10,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: MW_TclAppleScriptHeader.pch,v 1.4 1999/05/11 07:11:46 jingham Exp $ + * RCS: @(#) $Id: MW_TclAppleScriptHeader.pch,v 1.4.12.1 2001/04/04 21:22:18 hobbs Exp $ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created @@ -31,17 +31,6 @@ #pragma precompile_target "MW_TclAppleScriptHeader68K" #endif #include "tclMacCommonPch.h" -/* #define TCL_REGISTER_LIBRARY 1 */ #define USE_TCL_STUBS - -/* - * Place any includes below that will are needed by the majority of the - * and is OK to be in any file in the system. The pragma's are used - * to control what functions are exported in the Tcl shared library. - */ - -#pragma export on -#pragma export off - ADDED mac/MW_TclBuildLibHeader.h Index: mac/MW_TclBuildLibHeader.h ================================================================== --- /dev/null +++ mac/MW_TclBuildLibHeader.h @@ -0,0 +1,7 @@ +#if __POWERPC__ +#include "MW_TclBuildLibHeaderPPC" +#elif __CFM68K__ +#include "MW_TclBuildLibHeaderCFM68K" +#else +#include "MW_TclBuildLibHeader68K" +#endif ADDED mac/MW_TclBuildLibHeader.pch Index: mac/MW_TclBuildLibHeader.pch ================================================================== --- /dev/null +++ mac/MW_TclBuildLibHeader.pch @@ -0,0 +1,35 @@ +/* + * MW_TclBuildLibHeader.pch -- + * + * This file is the source for a pre-compilied header that gets used + * for all files in the Tcl projects. This make compilies go a bit + * faster. This file is only intended to be used in the MetroWerks + * CodeWarrior environment. It essentially acts as a place to set + * compiler flags. See MetroWerks documention for more details. + * + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id$ + */ + +/* + * To use the compilied header you need to set the "Prefix file" in + * the "C/C++ Language" preference panel to point to the created + * compilied header. The name of the header depends on the + * architecture we are compiling for (see the code below). For + * example, for a 68k app the prefix file should be: MW_TclHeader68K. + */ +#if __POWERPC__ +#pragma precompile_target "MW_TclBuildLibHeaderPPC" +#elif __CFM68K__ +#pragma precompile_target "MW_TclBuildLibHeaderCFM68K" +#else +#pragma precompile_target "MW_TclBuildLibHeader68K" +#endif + +#define BUILD_tcl 1 + +#include "MW_TclHeaderCommon.h" Index: mac/MW_TclHeader.pch ================================================================== --- mac/MW_TclHeader.pch +++ mac/MW_TclHeader.pch @@ -10,11 +10,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: MW_TclHeader.pch,v 1.7 1999/05/11 07:11:48 jingham Exp $ + * RCS: @(#) $Id: MW_TclHeader.pch,v 1.7.12.1 2001/04/04 21:22:18 hobbs Exp $ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created @@ -28,22 +28,6 @@ #pragma precompile_target "MW_TclHeaderCFM68K" #else #pragma precompile_target "MW_TclHeader68K" #endif -#include "tclMacCommonPch.h" - -/* - * Place any includes below that will are needed by the majority of the - * and is OK to be in any file in the system. The pragma's are used - * to control what functions are exported in the Tcl shared library. - */ - -#pragma export on -#include "tcl.h" -#include "tclMac.h" -#include "tclInt.h" -#include "MoreFiles.h" -#include "MoreFilesExtras.h" - -#pragma export reset - +#include "MW_TclHeaderCommon.h" ADDED mac/MW_TclHeaderCommon.h Index: mac/MW_TclHeaderCommon.h ================================================================== --- /dev/null +++ mac/MW_TclHeaderCommon.h @@ -0,0 +1,54 @@ +/* + * MW_TclHeaderCommon.h -- + * + * Common includes for precompiled headers + * + * Copyright (c) 1998 by Scriptics Corporation. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id$ + */ + +#pragma once + +#include "tclMacCommonPch.h" + +/* + * Place any includes below that will are needed by the majority of the + * and is OK to be in any file in the system. + */ + +#include "tcl.h" + +#ifdef BUILD_tcl +# undef TCL_STORAGE_CLASS +# define TCL_STORAGE_CLASS DLLEXPORT +#endif +#include "tclMac.h" +#undef TCL_STORAGE_CLASS +#define TCL_STORAGE_CLASS DLLIMPORT + +#include "tclInt.h" + + +#if PRAGMA_IMPORT +#pragma import on +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef PRAGMA_IMPORT_OFF +#pragma import off +#elif PRAGMA_IMPORT +#pragma import reset +#endif ADDED mac/MW_TclStaticHeader.h Index: mac/MW_TclStaticHeader.h ================================================================== --- /dev/null +++ mac/MW_TclStaticHeader.h @@ -0,0 +1,7 @@ +#if __POWERPC__ +#include "MW_TclStaticHeaderPPC" +#elif __CFM68K__ +#include "MW_TclStaticHeaderCFM68K" +#else +#include "MW_TclStaticHeader68K" +#endif ADDED mac/MW_TclStaticHeader.pch Index: mac/MW_TclStaticHeader.pch ================================================================== --- /dev/null +++ mac/MW_TclStaticHeader.pch @@ -0,0 +1,35 @@ +/* + * MW_TclStaticHeader.pch -- + * + * This file is the source for a pre-compilied header that gets used + * for all files in the Tcl projects. This make compilies go a bit + * faster. This file is only intended to be used in the MetroWerks + * CodeWarrior environment. It essentially acts as a place to set + * compiler flags. See MetroWerks documention for more details. + * + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * RCS: @(#) $Id$ + */ + +/* + * To use the compilied header you need to set the "Prefix file" in + * the "C/C++ Language" preference panel to point to the created + * compilied header. The name of the header depends on the + * architecture we are compiling for (see the code below). For + * example, for a 68k app the prefix file should be: MW_TclHeader68K. + */ +#if __POWERPC__ +#pragma precompile_target "MW_TclStaticHeaderPPC" +#elif __CFM68K__ +#pragma precompile_target "MW_TclStaticHeaderCFM68K" +#else +#pragma precompile_target "MW_TclStaticHeader68K" +#endif + +#define STATIC_BUILD 1 + +#include "MW_TclHeaderCommon.h" Index: mac/MW_TclTestHeader.pch ================================================================== --- mac/MW_TclTestHeader.pch +++ mac/MW_TclTestHeader.pch @@ -1,7 +1,7 @@ /* - * MW_TclHeader.pch -- + * MW_TclTestHeader.pch -- * * This file is the source for a pre-compilied header that gets used * for all files in the Tcl projects. This make compilies go a bit * faster. This file is only intended to be used in the MetroWerks * CodeWarrior environment. It essentially acts as a place to set @@ -10,11 +10,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: MW_TclTestHeader.pch,v 1.1 2000/02/10 08:39:11 jingham Exp $ + * RCS: @(#) $Id: MW_TclTestHeader.pch,v 1.1.2.1 2001/04/04 21:22:18 hobbs Exp $ */ /* * To use the compilied header you need to set the "Prefix file" in * the "C/C++ Language" preference panel to point to the created @@ -28,26 +28,14 @@ #pragma precompile_target "MW_TclTestHeaderCFM68K" #else #pragma precompile_target "MW_TclTestHeader68K" #endif +#define BUILD_tcl 1 + +#define STATIC_BUILD 1 + #define TCL_DEBUG 1 -/*#define TCL_THREADS 1*/ - -#include "tclMacCommonPch.h" - -/* - * Place any includes below that will are needed by the majority of the - * and is OK to be in any file in the system. The pragma's are used - * to control what functions are exported in the Tcl shared library. - */ - -#pragma export on -#include "tcl.h" -#include "tclMac.h" -#include "tclInt.h" -#include "MoreFiles.h" -#include "MoreFilesExtras.h" - -#pragma export reset - +#define TCL_THREADS 1 + +#include "MW_TclHeaderCommon.h" Index: mac/README ================================================================== --- mac/README +++ mac/README @@ -1,16 +1,8 @@ Tcl 8.3 for Macintosh -by Ray Johnson -Scriptics Corporation -rjohnson@scriptics.com -with major help from -Jim Ingham -Cygnus Solutions -jingham@cygnus.com - -RCS: @(#) $Id: README,v 1.12 2000/04/26 17:31:20 hobbs Exp $ +RCS: @(#) $Id: README,v 1.12.2.1 2001/04/03 22:08:32 hobbs Exp $ 1. Introduction --------------- This is the README file for the Macintosh version of the Tcl @@ -73,6 +65,5 @@ http://dev.scriptics.com/doc/howto/compile.html#mac If you have comments or Bug reports send them to: Jim Ingham jingham@cygnus.com - Index: mac/tclMac.h ================================================================== --- mac/tclMac.h +++ mac/tclMac.h @@ -6,11 +6,11 @@ * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMac.h,v 1.4 1999/03/10 05:52:51 stanton Exp $ + * RCS: @(#) $Id: tclMac.h,v 1.4.14.1 2001/04/04 21:22:18 hobbs Exp $ */ #ifndef _TCLMAC #define _TCLMAC @@ -19,20 +19,10 @@ #endif #include #include #include -/* - * "export" is a MetroWerks specific pragma. It flags the linker that - * any symbols that are defined when this pragma is on will be exported - * to shared libraries that link with this library. - */ - -#pragma export on - typedef int (*Tcl_MacConvertEventPtr) _ANSI_ARGS_((EventRecord *eventPtr)); #include "tclPlatDecls.h" -#pragma export reset - #endif /* _TCLMAC */ Index: mac/tclMacAlloc.c ================================================================== --- mac/tclMacAlloc.c +++ mac/tclMacAlloc.c @@ -12,16 +12,17 @@ * Portions contributed by Chris Kingsley, Jack Jansen and Ray Johnson *. * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacAlloc.c,v 1.4 1999/05/11 07:11:51 jingham Exp $ + * RCS: @(#) $Id: tclMacAlloc.c,v 1.4.12.1 2001/05/17 13:30:02 das Exp $ */ #include "tclInt.h" #include "tclMacInt.h" #include +#include #include #include /* @@ -28,16 +29,17 @@ * Flags that are used by ConfigureMemory to define how the allocator * should work. They can be or'd together. */ #define MEMORY_ALL_SYS 1 /* All memory should come from the system heap. */ +#define MEMORY_DONT_USE_TEMPMEM 2 /* Don't use temporary memory but system memory. */ /* * Amount of space to leave in the application heap for the Toolbox to work. */ -#define TOOLBOX_SPACE (32 * 1024) +#define TOOLBOX_SPACE (512 * 1024) static int memoryFlags = 0; static Handle toolGuardHandle = NULL; /* This handle must be around so that we don't * have NewGWorld failures. This handle is @@ -47,10 +49,19 @@ * If we can get it, we lock it and try * to do the normal allocation, unlocking on * the way out. If we can't, we go to the * system heap directly. */ +static int tclUseMemTracking = 0; /* Are we tracking memory allocations? + * On recent versions of the MacOS this + * is no longer necessary, as we can use + * temporary memory which is freed by the + * OS after a quit or crash. */ + +static size_t tclExtraHdlSize = 0; /* Size of extra memory allocated at the start + * of each block when using memory tracking + * ( == 0 otherwise) */ /* * The following typedef and variable are used to keep track of memory * blocks that are allocated directly from the System Heap. These chunks * of memory must always be freed - even if we crash. @@ -57,14 +68,15 @@ */ typedef struct listEl { Handle memoryHandle; struct listEl * next; + struct listEl * prec; } ListEl; -ListEl * systemMemory = NULL; -ListEl * appMemory = NULL; +static ListEl * systemMemory = NULL; +static ListEl * appMemory = NULL; /* * Prototypes for functions used only in this file. */ @@ -97,17 +109,32 @@ unsigned int size) /* New size of block. */ { Handle hand; void *newPtr; int maxsize; + OSErr err; - hand = * (Handle *) ((Ptr) oldPtr - sizeof(Handle)); + if (tclUseMemTracking) { + hand = ((ListEl *) ((Ptr) oldPtr - tclExtraHdlSize))->memoryHandle; + } else { + hand = RecoverHandle((Ptr) oldPtr); + } maxsize = GetHandleSize(hand) - sizeof(Handle); if (maxsize < size) { + HUnlock(hand); + SetHandleSize(hand,size + tclExtraHdlSize); + err = MemError(); + HLock(hand); + if(err==noErr){ + newPtr=(*hand + tclExtraHdlSize); + } else { newPtr = TclpSysAlloc(size, 1); - memcpy(newPtr, oldPtr, maxsize); + if(newPtr!=NULL) { + memmove(newPtr, oldPtr, maxsize); TclpSysFree(oldPtr); + } + } } else { newPtr = oldPtr; } return newPtr; } @@ -134,10 +161,35 @@ long size, /* Size of block to allocate. */ int isBin) /* Is this a bin allocation? */ { Handle hand = NULL; ListEl * newMemoryRecord; + int isSysMem = 0; + static int initialized=0; + + if (!initialized) { + long response = 0; + OSErr err = noErr; + int useTempMem = 0; + + /* Check if we can use temporary memory */ + initialized=1; + err = Gestalt(gestaltOSAttr, &response); + if (err == noErr) { + useTempMem = response & (1 << gestaltRealTempMemory); + } + tclUseMemTracking = !useTempMem || (memoryFlags & MEMORY_DONT_USE_TEMPMEM); + if(tclUseMemTracking) { + tclExtraHdlSize = sizeof(ListEl); + /* + * We are allocating memory directly from the system + * heap. We need to install an exit handle + * to ensure the memory is cleaned up. + */ + TclMacInstallExitToShellPatch(CleanUpExitProc); + } + } if (!(memoryFlags & MEMORY_ALL_SYS)) { /* * If the guard handle has been purged, throw it away and try @@ -155,10 +207,11 @@ */ if (toolGuardHandle == NULL) { toolGuardHandle = NewHandle(TOOLBOX_SPACE); if (toolGuardHandle != NULL) { + HLock(toolGuardHandle); HPurge(toolGuardHandle); } } /* @@ -165,59 +218,59 @@ * If we got the handle, lock it and do our allocation. */ if (toolGuardHandle != NULL) { HLock(toolGuardHandle); - hand = NewHandle(size + sizeof(Handle)); + hand = NewHandle(size + tclExtraHdlSize); HUnlock(toolGuardHandle); } } - if (hand != NULL) { - newMemoryRecord = (ListEl *) NewPtr(sizeof(ListEl)); - if (newMemoryRecord == NULL) { - DisposeHandle(hand); - return NULL; - } - newMemoryRecord->memoryHandle = hand; - newMemoryRecord->next = appMemory; - appMemory = newMemoryRecord; - } else { + if (hand == NULL) { /* * Ran out of memory in application space. Lets try to get * more memory from system. Otherwise, we return NULL to * denote failure. */ + if(!tclUseMemTracking) { + /* Use Temporary Memory instead of System Heap when available */ + OSErr err; + isBin = 1; /* always HLockHi TempMemHandles */ + hand = TempNewHandle(size + tclExtraHdlSize,&err); + if(err!=noErr) { hand=NULL; } + } else { + /* Use system heap when tracking memory */ + isSysMem=1; isBin = 0; - hand = NewHandleSys(size + sizeof(Handle)); + hand = NewHandleSys(size + tclExtraHdlSize); + } + } if (hand == NULL) { return NULL; } - if (systemMemory == NULL) { - /* - * This is the first time we've attempted to allocate memory - * directly from the system heap. We need to now install the - * exit handle to ensure the memory is cleaned up. - */ - TclMacInstallExitToShellPatch(CleanUpExitProc); - } - newMemoryRecord = (ListEl *) NewPtrSys(sizeof(ListEl)); - if (newMemoryRecord == NULL) { - DisposeHandle(hand); - return NULL; - } - newMemoryRecord->memoryHandle = hand; - newMemoryRecord->next = systemMemory; - systemMemory = newMemoryRecord; - } if (isBin) { HLockHi(hand); } else { HLock(hand); } - (** (Handle **) hand) = hand; - - return (*hand + sizeof(Handle)); + if(tclUseMemTracking) { + /* Only need to do this when tracking memory */ + newMemoryRecord = (ListEl *) *hand; + newMemoryRecord->memoryHandle = hand; + newMemoryRecord->prec = NULL; + if(isSysMem) { + newMemoryRecord->next = systemMemory; + systemMemory = newMemoryRecord; + } else { + newMemoryRecord->next = appMemory; + appMemory = newMemoryRecord; + } + if(newMemoryRecord->next!=NULL) { + newMemoryRecord->next->prec=newMemoryRecord; + } + } + + return (*hand + tclExtraHdlSize); } /* *---------------------------------------------------------------------- * @@ -236,17 +289,31 @@ void TclpSysFree( void * ptr) /* Free this system memory. */ { - Handle hand; - OSErr err; + if(tclUseMemTracking) { + /* Only need to do this when tracking memory */ + ListEl *memRecord; - hand = * (Handle *) ((Ptr) ptr - sizeof(Handle)); - DisposeHandle(hand); - *hand = NULL; - err = MemError(); + memRecord = (ListEl *) ((Ptr) ptr - tclExtraHdlSize); + /* Remove current record from linked list */ + if(memRecord->next!=NULL) { + memRecord->next->prec=memRecord->prec; + } + if(memRecord->prec!=NULL) { + memRecord->prec->next=memRecord->next; + } + if(memRecord==appMemory) { + appMemory=memRecord->next; + } else if(memRecord==systemMemory) { + systemMemory=memRecord->next; + } + DisposeHandle(memRecord->memoryHandle); + } else { + DisposeHandle(RecoverHandle((Ptr) ptr)); + } } /* *---------------------------------------------------------------------- * @@ -269,17 +336,17 @@ static pascal void CleanUpExitProc() { ListEl * memRecord; + if(tclUseMemTracking) { + /* Only need to do this when tracking memory */ while (systemMemory != NULL) { memRecord = systemMemory; systemMemory = memRecord->next; - if (*(memRecord->memoryHandle) != NULL) { - DisposeHandle(memRecord->memoryHandle); - } - DisposePtr((void *) memRecord); + DisposeHandle(memRecord->memoryHandle); + } } } /* *---------------------------------------------------------------------- @@ -302,25 +369,22 @@ void FreeAllMemory() { ListEl * memRecord; + if(tclUseMemTracking) { + /* Only need to do this when tracking memory */ while (systemMemory != NULL) { memRecord = systemMemory; systemMemory = memRecord->next; - if (*(memRecord->memoryHandle) != NULL) { - DisposeHandle(memRecord->memoryHandle); - } - DisposePtr((void *) memRecord); + DisposeHandle(memRecord->memoryHandle); } while (appMemory != NULL) { memRecord = appMemory; appMemory = memRecord->next; - if (*(memRecord->memoryHandle) != NULL) { - DisposeHandle(memRecord->memoryHandle); - } - DisposePtr((void *) memRecord); + DisposeHandle(memRecord->memoryHandle); + } } } /* *---------------------------------------------------------------------- Index: mac/tclMacAppInit.c ================================================================== --- mac/tclMacAppInit.c +++ mac/tclMacAppInit.c @@ -7,11 +7,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacAppInit.c,v 1.5 1999/04/16 00:47:19 stanton Exp $ + * RCS: @(#) $Id: tclMacAppInit.c,v 1.5.12.1 2001/04/04 21:22:18 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" #include "tclPort.h" @@ -20,11 +20,11 @@ #if defined(THINK_C) # include #elif defined(__MWERKS__) # include -short InstallConsole _ANSI_ARGS_((short fd)); +EXTERN short InstallConsole _ANSI_ARGS_((short fd)); #endif #ifdef TCL_TEST extern int Procbodytest_Init _ANSI_ARGS_((Tcl_Interp *interp)); extern int Procbodytest_SafeInit _ANSI_ARGS_((Tcl_Interp *interp)); Index: mac/tclMacApplication.r ================================================================== --- mac/tclMacApplication.r +++ mac/tclMacApplication.r @@ -8,11 +8,11 @@ * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacApplication.r,v 1.3 1999/08/16 00:09:09 jingham Exp $ + * RCS: @(#) $Id: tclMacApplication.r,v 1.3.2.1 2001/04/04 21:22:18 hobbs Exp $ */ #include #include @@ -40,25 +40,25 @@ resource 'vers' (1) { TCL_MAJOR_VERSION, MINOR_VERSION, RELEASE_LEVEL, 0x00, verUS, TCL_PATCH_LEVEL, - TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham © Scriptics Inc" + TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham" "\n" "© 2000 Ajuba Solutions" }; resource 'vers' (2) { TCL_MAJOR_VERSION, MINOR_VERSION, RELEASE_LEVEL, 0x00, verUS, TCL_PATCH_LEVEL, - "Tcl Shell " TCL_PATCH_LEVEL " © 1996-1997 Sun Microsystems, 1998-1999 Scriptics Inc" + "Tcl Shell " TCL_PATCH_LEVEL " © 1993-2000" }; #define TCL_APP_CREATOR 'Tcl ' type TCL_APP_CREATOR as 'STR '; resource TCL_APP_CREATOR (0, purgeable) { - "Tcl Shell " TCL_PATCH_LEVEL " © 1996-1999" + "Tcl Shell " TCL_PATCH_LEVEL " © 1993-2000" }; /* * The 'kind' resource works with a 'BNDL' in Macintosh Easy Open * to affect the text the Finder displays in the "kind" column and Index: mac/tclMacChan.c ================================================================== --- mac/tclMacChan.c +++ mac/tclMacChan.c @@ -7,11 +7,11 @@ * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacChan.c,v 1.6 1999/04/16 00:47:19 stanton Exp $ + * RCS: @(#) $Id: tclMacChan.c,v 1.6.12.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclMacInt.h" @@ -134,11 +134,11 @@ * This structure describes the channel type structure for file based IO: */ static Tcl_ChannelType consoleChannelType = { "file", /* Type name. */ - StdIOBlockMode, /* Set blocking/nonblocking mode.*/ + (Tcl_ChannelTypeVersion)StdIOBlockMode, /* Set blocking/nonblocking mode.*/ StdIOClose, /* Close proc. */ StdIOInput, /* Input proc. */ StdIOOutput, /* Output proc. */ StdIOSeek, /* Seek proc. */ NULL, /* Set option proc. */ @@ -151,11 +151,11 @@ * This variable describes the channel type structure for file based IO. */ static Tcl_ChannelType fileChannelType = { "file", /* Type name. */ - FileBlockMode, /* Set blocking or + (Tcl_ChannelTypeVersion)FileBlockMode, /* Set blocking or * non-blocking mode.*/ FileClose, /* Close proc. */ FileInput, /* Input proc. */ FileOutput, /* Output proc. */ FileSeek, /* Seek proc. */ Index: mac/tclMacCommonPch.h ================================================================== --- mac/tclMacCommonPch.h +++ mac/tclMacCommonPch.h @@ -9,11 +9,11 @@ * Copyright (c) 1998 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacCommonPch.h,v 1.2 1998/11/11 07:46:04 jingham Exp $ + * RCS: @(#) $Id: tclMacCommonPch.h,v 1.2.22.1 2001/04/04 21:22:19 hobbs Exp $ */ #if !__option(enumsalwaysint) #error Tcl requires the Metrowerks setting "Enums always ints". #endif @@ -46,21 +46,10 @@ */ #define MAC_TCL - -/* -* The following defines control the behavior of the Macintosh -* Universial Headers. -*/ - - -#define SystemSevenOrLater 1 -#define STRICT_CONTROLS 1 -#define STRICT_WINDOWS 1 - /* * Define the following symbol if you want * comprehensive debugging turned on. */ @@ -73,16 +62,10 @@ # define TCL_MEM_DEBUG # define TCL_TEST #endif - /* -* For a while, we will continue to use the old routine names, so that -* people with older versions of CodeWarrior will still be able to compile -* the source (albeit they will have to update the project files themselves). -* -* At some point, we will convert over to the new routine names. +* for Metrowerks Pro 6 MSL */ - -#define OLDROUTINENAMES 1 +#include Index: mac/tclMacFCmd.c ================================================================== --- mac/tclMacFCmd.c +++ mac/tclMacFCmd.c @@ -7,11 +7,11 @@ * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacFCmd.c,v 1.7 1999/10/15 04:47:03 jingham Exp $ + * RCS: @(#) $Id: tclMacFCmd.c,v 1.7.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclMac.h" #include "tclMacInt.h" @@ -746,11 +746,11 @@ FSMakeFSSpecCompat(dstFileSpec.vRefNum, dstFileSpec.parID, tmpName, &tmpDirSpec); err = FSpDirCreateCompat(&tmpDirSpec, smSystemScript, &tmpDirID); } if (err == noErr) { - err = FSpDirectoryCopy(&srcFileSpec, &tmpDirSpec, NULL, 0, true, + err = FSpDirectoryCopy(&srcFileSpec, &tmpDirSpec, NULL, NULL, 0, true, CopyErrHandler); } /* * Even if the Copy failed, Rename/Move whatever did get copied to the Index: mac/tclMacInt.h ================================================================== --- mac/tclMacInt.h +++ mac/tclMacInt.h @@ -6,28 +6,26 @@ * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacInt.h,v 1.6 1999/08/16 00:09:18 jingham Exp $ + * RCS: @(#) $Id: tclMacInt.h,v 1.6.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #ifndef _TCLMACINT #define _TCLMACINT -#ifndef _TCL -# include "tcl.h" +#ifndef _TCLINT +#include "tclInt.h" #endif -#ifndef _TCLMAC -# include "tclMac.h" +#ifndef _TCLPORT +#include "tclPort.h" #endif #include #include -#pragma export on - /* * Defines to control stack behavior. * * The Tcl8.2 regexp code is highly recursive for patterns with many * subexpressions. So we have to increase the stack space to accomodate. @@ -44,10 +42,15 @@ # define TCL_MAC_68K_STACK_GROWTH (512*1024) #endif #define TCL_MAC_STACK_THRESHOLD 16384 +#ifdef BUILD_tcl +# undef TCL_STORAGE_CLASS +# define TCL_STORAGE_CLASS DLLEXPORT +#endif + /* * This flag is passed to TclMacRegisterResourceFork * by a file (usually a library) whose resource fork * should not be closed by the resource command. */ @@ -63,12 +66,11 @@ */ EXTERN char * TclMacGetFontEncoding _ANSI_ARGS_((int fontId)); EXTERN int TclMacHaveThreads(void); -#include "tclPort.h" -#include "tclPlatDecls.h" +# undef TCL_STORAGE_CLASS +# define TCL_STORAGE_CLASS DLLIMPORT + #include "tclIntPlatDecls.h" -#pragma export reset - #endif /* _TCLMACINT */ Index: mac/tclMacLibrary.c ================================================================== --- mac/tclMacLibrary.c +++ mac/tclMacLibrary.c @@ -11,11 +11,11 @@ * Copyright (c) 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacLibrary.c,v 1.4 2000/02/10 09:59:10 jingham Exp $ + * RCS: @(#) $Id: tclMacLibrary.c,v 1.4.2.1 2001/04/04 21:22:19 hobbs Exp $ */ /* * Here is another place that we are using the old routine names... */ @@ -23,10 +23,19 @@ #include #include #include #include #include "tclMacInt.h" + +#if defined(TCL_REGISTER_LIBRARY) && defined(USE_TCL_STUBS) +#error "Can't use TCL_REGISTER_LIBRARY and USE_TCL_STUBS at the same time!" +/* + * Can't register a library with Tcl when using stubs in the current + * implementation, since Tcl_InitStubs hasn't been called yet + * when OpenLibraryResource is executing. + */ +#endif /* * These function are not currently defined in any header file. The * only place they should be used is in the Initialization and * Termination entry points for a code fragment. The prototypes Index: mac/tclMacLibrary.r ================================================================== --- mac/tclMacLibrary.r +++ mac/tclMacLibrary.r @@ -8,11 +8,11 @@ * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacLibrary.r,v 1.4 1999/08/16 00:09:22 jingham Exp $ + * RCS: @(#) $Id: tclMacLibrary.r,v 1.4.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include #include @@ -40,18 +40,18 @@ resource 'vers' (1) { TCL_MAJOR_VERSION, MINOR_VERSION, RELEASE_LEVEL, 0x00, verUS, TCL_PATCH_LEVEL, - TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham © Scriptics Inc." + TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham" "\n" "© 2000 Ajuba Solutions" }; resource 'vers' (2) { TCL_MAJOR_VERSION, MINOR_VERSION, RELEASE_LEVEL, 0x00, verUS, TCL_PATCH_LEVEL, - "Tcl Library " TCL_PATCH_LEVEL " © 1996-1997 Sun Microsystems, 1998-1999 Scriptics Inc." + "Tcl Library " TCL_PATCH_LEVEL " © 1993-2000" }; /* * Currently the creator for all Tcl/Tk libraries and extensions * should be 'TclL'. This will allow those extension and libraries @@ -94,11 +94,11 @@ 'shlb', 0, "" }; type TCL_CREATOR as 'STR '; resource TCL_CREATOR (0, purgeable) { - "Tcl Library " TCL_PATCH_LEVEL " © 1996-1999" + "Tcl Library " TCL_PATCH_LEVEL " © 1993-2000" }; /* * The 'kind' resource works with a 'BNDL' in Macintosh Easy Open * to affect the text the Finder displays in the "kind" column and @@ -123,11 +123,11 @@ * A similar string should be placed in all shared libraries. */ resource 'STR ' (-16397, purgeable) { "Tcl Library\n\n" "This is the core library needed to run Tool Command Language programs. " - "To work properly, it should be placed in the ÔTool Command LanguageÕ folder " + "To work properly, it should be placed in the ŒTool Command Language¹ folder " "within the Extensions folder." }; /* * The mechanisim below loads Tcl source into the resource fork of the DELETED mac/tclMacMSLPrefix.h Index: mac/tclMacMSLPrefix.h ================================================================== --- mac/tclMacMSLPrefix.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * tclMacMSLPrefix.h -- - * - * A wrapper for the MSL ansi_prefix.mac.h file. This just turns export on - * after including the MSL prefix file, so we can export symbols from the MSL - * and through the Tcl shared libraries - * - * - * Copyright (c) 1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * RCS: @(#) $Id: tclMacMSLPrefix.h,v 1.2 1998/09/14 18:40:05 stanton Exp $ - */ - -#include -/* - * "export" is a MetroWerks specific pragma. It flags the linker that - * any symbols that are defined when this pragma is on will be exported - * to shared libraries that link with this library. - */ - -#pragma export on Index: mac/tclMacMath.h ================================================================== --- mac/tclMacMath.h +++ mac/tclMacMath.h @@ -10,11 +10,11 @@ * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacMath.h,v 1.2 1998/09/14 18:40:05 stanton Exp $ + * RCS: @(#) $Id: tclMacMath.h,v 1.2.18.1 2001/04/04 21:22:19 hobbs Exp $ */ #ifndef _TCLMACMATH #define _TCLMACMATH @@ -133,13 +133,13 @@ # define floor floord # endif #endif #endif -#if (defined(THINK_C) || defined(__MWERKS__)) +#if (defined(THINK_C)) #pragma export on double hypotd(double x, double y); #define hypot hypotd #pragma export reset #endif #endif /* _TCLMACMATH */ Index: mac/tclMacNotify.c ================================================================== --- mac/tclMacNotify.c +++ mac/tclMacNotify.c @@ -12,11 +12,11 @@ * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacNotify.c,v 1.6 1999/08/10 04:21:40 jingham Exp $ + * RCS: @(#) $Id: tclMacNotify.c,v 1.6.10.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclMac.h" @@ -264,11 +264,11 @@ /* * Check for mouse moved events. These events aren't placed on the * system event queue unless we call WaitNextEvent. */ - GetGlobalMouse(¤tMouse); + GetGlobalMouseTcl(¤tMouse); if ((notifier.eventProcPtr != NULL) && !EqualPt(currentMouse, notifier.lastMousePosition)) { notifier.lastMousePosition = currentMouse; theEvent.what = nullEvent; if ((*notifier.eventProcPtr)(&theEvent) == true) { @@ -294,11 +294,11 @@ /* * Process events from the OS event queue. */ while (needsUpdate || (GetEvQHdr()->qHead != NULL)) { - GetGlobalMouse(¤tMouse); + GetGlobalMouseTcl(¤tMouse); SetRect(&mouseRect, currentMouse.h, currentMouse.v, currentMouse.h + 1, currentMouse.v + 1); RectRgn(notifier.utilityRgn, &mouseRect); WaitNextEvent(everyEvent, &theEvent, 5, notifier.utilityRgn); @@ -479,11 +479,11 @@ * Set up mouse region so we will wake if the mouse is moved. * We do this by defining the smallest possible region around * the current mouse position. */ - GetGlobalMouse(¤tMouse); + GetGlobalMouseTcl(¤tMouse); SetRect(&mouseRect, currentMouse.h, currentMouse.v, currentMouse.h + 1, currentMouse.v + 1); RectRgn(notifier.utilityRgn, &mouseRect); WaitNextEvent(everyEvent, &macEvent, sleepTime, Index: mac/tclMacOSA.c ================================================================== --- mac/tclMacOSA.c +++ mac/tclMacOSA.c @@ -10,11 +10,11 @@ * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "License Terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacOSA.c,v 1.6 1999/12/21 23:58:13 hobbs Exp $ + * RCS: @(#) $Id: tclMacOSA.c,v 1.6.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #define MAC_TCL #include @@ -2118,11 +2118,11 @@ "Error getting a location for the file: \"", fileName, "\".", NULL); return TCL_ERROR; } - FSpCreateResFileCompat(&fileSpec, + FSpCreateResFileCompatTcl(&fileSpec, 'WiSH', 'osas', smSystemScript); myErr = ResError(); if ((myErr != noErr) && (myErr != dupFNErr)) { sprintf(idStr, "%d", myErr); @@ -2130,11 +2130,11 @@ " creating new resource file ", fileName, (char *) NULL); result = TCL_ERROR; goto rezEvalCleanUp; } - fileRef = FSpOpenResFileCompat(&fileSpec, fsRdWrPerm); + fileRef = FSpOpenResFileCompatTcl(&fileSpec, fsRdWrPerm); if (fileRef == -1) { Tcl_AppendResult(interp, "Error reading the file: \"", fileName, "\".", NULL); result = TCL_ERROR; goto rezEvalCleanUp; @@ -2305,11 +2305,11 @@ Tcl_AppendResult(interp, "Error finding the file: \"", fileName, "\".", NULL); return TCL_ERROR; } - fileRef = FSpOpenResFileCompat(&fileSpec, fsRdPerm); + fileRef = FSpOpenResFileCompatTcl(&fileSpec, fsRdPerm); if (fileRef == -1) { Tcl_AppendResult(interp, "Error reading the file: \"", fileName, "\".", NULL); return TCL_ERROR; } DELETED mac/tclMacOSA.exp Index: mac/tclMacOSA.exp ================================================================== --- mac/tclMacOSA.exp +++ /dev/null @@ -1,1 +0,0 @@ -Tclapplescript_Init Index: mac/tclMacOSA.r ================================================================== --- mac/tclMacOSA.r +++ mac/tclMacOSA.r @@ -6,11 +6,11 @@ * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacOSA.r,v 1.3 1999/08/16 00:09:26 jingham Exp $ + * RCS: @(#) $Id: tclMacOSA.r,v 1.3.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include #include @@ -18,16 +18,16 @@ * The folowing include and defines help construct * the version string for Tcl. */ #define SCRIPT_MAJOR_VERSION 1 /* Major number */ -#define SCRIPT_MINOR_VERSION 0 /* Minor number */ -#define SCRIPT_RELEASE_SERIAL 2 /* Really minor number! */ -#define RELEASE_LEVEL alpha /* alpha, beta, or final */ -#define SCRIPT_VERSION "1.0" -#define SCRIPT_PATCH_LEVEL "1.0a2" -#define FINAL 0 /* Change to 1 if final version. */ +#define SCRIPT_MINOR_VERSION 1 /* Minor number */ +#define SCRIPT_RELEASE_SERIAL 0 /* Really minor number! */ +#define RELEASE_LEVEL final /* alpha, beta, or final */ +#define SCRIPT_VERSION "1.1" +#define SCRIPT_PATCH_LEVEL "1.1.0" +#define FINAL 1 /* Change to 1 if final version. */ #if FINAL # define MINOR_VERSION (SCRIPT_MINOR_VERSION * 16) + SCRIPT_RELEASE_SERIAL #else # define MINOR_VERSION SCRIPT_MINOR_VERSION * 16 @@ -37,18 +37,18 @@ resource 'vers' (1) { SCRIPT_MAJOR_VERSION, MINOR_VERSION, RELEASE_LEVEL, 0x00, verUS, SCRIPT_PATCH_LEVEL, - SCRIPT_PATCH_LEVEL ", by Jim Ingham © Cygnus Solutions" + SCRIPT_PATCH_LEVEL ", by Jim Ingham © Cygnus Solutions" "\n" "© 2000 Ajuba Solutions" }; resource 'vers' (2) { SCRIPT_MAJOR_VERSION, MINOR_VERSION, RELEASE_LEVEL, 0x00, verUS, SCRIPT_PATCH_LEVEL, - "Tclapplescript " SCRIPT_PATCH_LEVEL " © 1996-1999" + "Tclapplescript " SCRIPT_PATCH_LEVEL " © 1996-2000" }; /* * The -16397 string will be displayed by Finder when a user * tries to open the shared library. The string should @@ -58,11 +58,11 @@ */ resource 'STR ' (-16397, purgeable) { "TclAppleScript Library\n\n" "This library provides the ability to run AppleScript " " commands from Tcl/Tk programs. To work properly, it " - "should be placed in the ÔTool Command LanguageÕ folder " + "should be placed in the ŒTool Command Language¹ folder " "within the Extensions folder." }; /* @@ -69,8 +69,8 @@ * We now load the Tk library into the resource fork of the library. */ data 'TEXT' (4000,"pkgIndex",purgeable, preload) { "# Tcl package index file, version 1.0\n" - "package ifneeded Tclapplescript 1.0 [list tclPkgSetup $dir Tclapplescript 1.0 {{Tclapplescript" + "package ifneeded Tclapplescript 1.1 [list tclPkgSetup $dir Tclapplescript 1.1 {{Tclapplescript" ".shlb load AppleScript}}]\n" }; Index: mac/tclMacPanic.c ================================================================== --- mac/tclMacPanic.c +++ mac/tclMacPanic.c @@ -9,16 +9,17 @@ * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacPanic.c,v 1.2 1998/09/14 18:40:05 stanton Exp $ + * RCS: @(#) $Id: tclMacPanic.c,v 1.2.18.1 2001/04/04 21:22:19 hobbs Exp $ */ #include #include +#include #include #include #include #include #include @@ -149,11 +150,11 @@ SetPortWindowPort(macWinPtr); GlobalToLocal(&event.where); part = FindControl(event.where, macWinPtr, &okButtonHandle); - if ((inButton == part) && + if ((kControlButtonPart == part) && (TrackControl(okButtonHandle, event.where, NULL))) { done = true; } } @@ -173,11 +174,11 @@ BeginUpdate(macWinPtr); if (stopIconHandle != NULL) { PlotIcon(&iconRect, stopIconHandle); } - TextBox(msg, strlen(msg), &textRect, teFlushDefault); + TETextBox(msg, strlen(msg), &textRect, teFlushDefault); DrawControls(macWinPtr); EndUpdate(macWinPtr); } } } Index: mac/tclMacPort.h ================================================================== --- mac/tclMacPort.h +++ mac/tclMacPort.h @@ -8,11 +8,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacPort.h,v 1.10 1999/12/08 03:50:04 hobbs Exp $ + * RCS: @(#) $Id: tclMacPort.h,v 1.10.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #ifndef _MACPORT #define _MACPORT @@ -53,19 +53,19 @@ /* * The following definitions are usually found if fcntl.h. * However, MetroWerks has screwed that file up a couple of times * and all we need are the defines. */ - +#ifndef _FCNTL # define O_RDWR 0x0 /* open the file in read/write mode */ # define O_RDONLY 0x1 /* open the file in read only mode */ # define O_WRONLY 0x2 /* open the file in write only mode */ # define O_APPEND 0x0100 /* open the file in append mode */ # define O_CREAT 0x0200 /* create the file if it doesn't exist */ # define O_EXCL 0x0400 /* if the file exists don't create it again */ # define O_TRUNC 0x0800 /* truncate the file after opening it */ - +#endif /* * MetroWerks stat.h file is rather weak. The defines * after the include are needed to fill in the missing * defines. */ @@ -96,10 +96,11 @@ # define S_IROTH 00004 /* read permission: other */ # define S_IWOTH 00002 /* write permission: other */ # define S_IXOTH 00001 /* execute permission: other */ # endif +#if __MSL__ < 0x6000 # define isatty(arg) 1 /* * Defines used by access function. This function is provided * by Mac Tcl as the function TclpAccess. @@ -107,10 +108,11 @@ # define F_OK 0 /* test for existence of file */ # define X_OK 0x01 /* test for execute or search permission */ # define W_OK 0x02 /* test for write permission */ # define R_OK 0x04 /* test for read permission */ +#endif #endif /* __MWERKS__ */ /* * Many signals are not supported on the Mac and are thus not defined in @@ -145,10 +147,15 @@ #define WIFTERMSIG(stat) (1) #define WIFEXITSTATUS(stat) (1) #define WEXITSTATUS(stat) (1) #define WTERMSIG(status) (1) #define WSTOPSIG(status) (1) + +#ifdef BUILD_tcl +# undef TCL_STORAGE_CLASS +# define TCL_STORAGE_CLASS DLLEXPORT +#endif /* * Make sure that MAXPATHLEN is defined. */ @@ -283,11 +290,13 @@ #define TclpMutexLock(a) #define TclpMutexUnlock(a) #endif /* TCL_THREADS */ typedef pascal void (*ExitToShellProcPtr)(void); -#include "tclMac.h" -#include "tclMacInt.h" -/* #include "tclPlatDecls.h" - #include "tclIntPlatDecls.h" */ + +#include "tclMac.h" // contains #include "tclPlatDecls.h" +#include "tclIntPlatDecls.h" + +# undef TCL_STORAGE_CLASS +# define TCL_STORAGE_CLASS DLLIMPORT #endif /* _MACPORT */ Index: mac/tclMacProjects.sea.hqx ================================================================== --- mac/tclMacProjects.sea.hqx +++ mac/tclMacProjects.sea.hqx @@ -1,2945 +1,3131 @@ (This file must be converted with BinHex 4.0) -:"h4ME#jcC@%!39"36'&eFh3J!*!$UFJ!!AiC1AC6G(9QCNPd)#KM+6%j16FY-6N -j1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbiX)'KdG(!k,bphN!-ZB@aKC'4TER0jFbj -MEfd[8h4eCQC*G#m0#KS!"4!!!+R)!*!$FJ!"!*!$FSj4$D@P8Q9cCA*fC@5PT3# -PN!3"!!!c!%#d(A&cY-HdK!#3$3-"C3#3!mN!#PS8!!#Sr`!&G'0X!!#4V!"p!"! -"f3(!!q$rN!3$"rrirr$$3!!!J!#3"k@3"!%!!%!!!,5K[,#dal4p!*!$FJ!!(`# -3"()!%$&`!!(IL!!!(G-!N!32!%*239p8Bfa6D'9XE(-Zci!!!*Hm68e3FN0A588 -"!*!2J!#3"d,"e+(92U!T@-GR[pQ)D4N"!E`GDf!YSX,#m4G4!EiQITp3)KPT0%H -pm)+Aj!6+&jhVJA"R3l-mrA84h-+P`2rGA3*P&NEJ'N"$CKFN#JhQ2'YNhclN-hc -Rc'&RLkSTPJJj9LE05Hm!SM3R(BPj-(BUe@0PJ9eGrpqbkL`STMcK4QGqpk0,HQD --k+DFK%5Gj!aG2TfSA0YaL([!F2MV`A%B-k5mP1aP[9-#V31iE"9ebe!3E*!!K,8 -2k,YB%jrr,R99GBfm6%BD*9C#P+fFPGrf0bNqh%-!j(fTpX[@AHCR!HlaC"fJ$rY -TAcFE,a9ZCIU1V35f!RiqD*dk2N)LK#DZK(dS@-mc2b!k(YP54-)BG9NTjd3KKcD -p2FXr$r6XM"K5,P8AAXRU5T1r@cd%ieJ06bHaj4$m6RR&2K$(NpIPqqbLC$ZiYTB -82amS&&H1Y,6Z#)LLqa[`B&mML8SfKSpFVh08GI1Arp$#NpH#%I9k!ZrNS1'J,-X -RR!XkSAVmQ1G*LA9Xb"Y#YScYHfF%"8i0ji8ad"!`L["[L4cGAGIeDfbf`[q3!0K -`0j!!D3"[XcTY08L#DVG*E`NeT+-j-,`aRhqV($LiZcQNE5TK3CbYPNjJR*`PGrH -K1Ujee25i5Q1VjI+p&9Qp"lXM5Q1Y`3q#,#P@Hb*+YeYJ1l9N5c6T-)PIB+4,8`@ -DD+flMpEG&)93AS@#p[Z@8FGkpkij15JlpSS%Z0DQ@"1cUI#FeU-&b12aPm2$F6* -5pUCSGME'*Gj*,m)1b&d`"#33f5ZATdml1IBj&%'AbA+V@"`I!K+Tfm*Tc+a%!9k -Y0%e+fS))CMZNN6F!jh`'2idk+aL3!'Kj!!S)cb6qS&TpHqHc'HXcEC&#&1FPi-5 -"LekVkNF%h,,L)B(h0`Tkr9XARqjl"p58(NJ3()h`EViHGIi$e8Q'18LXclRVi*F -12,-!ITU6EiX(Mf81Z'80T)C44e-Bk#frX*GZZ,&c(je`'%D1b0+B+0cA$L%fUQm -)L'jV4ZVi,#bh4SHpq%$9#IQ3!"Iea,imB'"6`YacX',r&m"$`rHKG&'26b"6*Z* -jrfU%95I@"TD1"VHMXKrc51#8!ae(208a!E9h&D+Yhdj@YM4jUQk&kemGG-M9i5q -Yd4VApaVaM)#fMV2'lZ@bl@Kj''4j#f#XKXR56QS4Z3lk0FH@YKi$#$'q[GaiRQR -r[,mm)l+8,k5(V&q84[CCNN0Zlepc#`p)2#bkk[%8imkMICp"Aj!!Q3(RA4@Re(j -%*Q(*&'EZjM0c2"m16Hq2,8&K"2&5V&aN*#*(N!"`SrPK-IakirFQf'B-M@-aX1- -kUpXGEAi@FlE8(k5S"3IaSm1j*!IAkTi3N@M4@-`5,a8Ml0UcY`iZPbreqLY2P6H -Z)dHjSV@Y`8"DEMRYmckLi1TeIJiGlRGKSaLPcEdc*)[Sh[efC3h*)$h,k55Y8`H -3!!KP)I,eb'Qqi2Df[aFC,'SQAjPib3Ala@*hlLK35cbDD0a,6GGCk-cLDi[VG4( -(KchdSjc@1TNLGY1GD%$2K"NNpEZ1Lc46B&AJ(QQbD*f8lR-C,D03Irm%aH1eC"5 -CLM-IPN(F8SFhIKb5$Q-XjKfb3YkcLh9hEbL%m[YrYY&0BQXk$9N*GfcQbfG4'+h -Q381VK%k*$!jZ[QEHL22P-FqVe$3!iDq0d5&QebUiG@XQ-9H&4dBRZVX&Nc6%DPq -kR""%REJJ`SML`QNL!Cei9E`"*Ae8H5H!YljA(%lpF+dVReV[1TApefMDXURr06[ -PITeTB2qQZ-#-G`J3HG8b4(XQ(jBalM4K#AJTqL!,`#f5i`K!5Vef)#aqD&iZTRS -I%Lh@NrGrE@[d['!m0k80AqD*KP-kC0[jqr&I[!prJHbGX+*@G8a8%8$V'bVY@-m -eJh0)90*ak54S3E8m6(eRCU1EhSLSjSr@dF)G6XqilPrpBmZhd'BTFG3HJ0Z'+cN -+caa@MMf)IM@3!!!U!h(V`P&$qeh#P-*@(`L`Q"$UXI2cTfejh,[`qF'qlAfQR(" -T8jHqNeSR2E)CDHQ$N3ZYTa68NXYSlkD&kM$p*c`!'SFHXf[F"DpF`-G*f#S(DPB -QfL*i%,EFbh8MP0mG`pk)2)V",mSlKp2lUEQ4H*5@*Dc9XQfLqcFqSik40!)DM5` -q#Q2Z5('ZT)R-fRA-iL"N5"($Kce3E*1H"m-c`1DU%VUPi2%mj6m53DBb`08X!!+ -eE1ETDiVH,,F8XPUi,fZ+KDbV[hq4#%'JK3@"0k*''GEmT-XGX*!!(riZ9R@G864 -qH*bd64[9`"TAA4@9#X@-3rbK5Td@i)C+-arQ)hHJLe!3@r`qJG&V)XM9dP@XGhK -V@1YjiP@)Ger#4VqKlmY(CEQ6BNJ*6*`')Ebc*f[8hU8[iMQV6&TjSdBeUJSEkPe -VEPQQH[b-QH@4A)SAT(M)B`%V$1,A"UU(P!q@(iM9dD#dimpkh,DpEAG0qcbTN!" -KHD)mdD$ld$86afR[!J0e0Qm&*8b%!dd%e3"T*QQAc1m0Rr$(#%XDSU3lbl`IB'd -r1XqSUNZI9e'j3p63TXR`#N6!G4*CHA)&5'1&d4852r+p1CQD(jr3"rbU`jkp6#M -LraP$Yrk-&,36P($P@(#&LJ24TF4534lM(Jr#"ddFSY-A,J)SbmRhD0TXeeHmr)X -)Ya4GD5+Kq6$mS6`0ikqXT6I8j2I9*K6qS#b0-@R`"L$3X0I-qmb)9pQU1R))dpV -@0LMbK9IBb$`am3*IdDX`qjQ"pLA`YmH(hMXmMFP1lKGGG53h%[laIjJfA+Zd)TR -S2K'GVfYCHk`lAapUFji'T#DbLQZLh`'K"6LAT)Fl3Ph*RcUD#JT$d2@8K'$3+%& -!A"05,Z)qrrmd1QlM)h5&dhp8UhAbMkEE&lbCHLR(`kSPJUe`!#rHf"0PlS2!Tmf -hZL9+')[iQ%%"RGPPJY(rK$+MDq*@5dY#$%5Gr%kj5E*Q4)U0h-e+&!#hP,G$rf) -KNa%Y#iBMR3Am#E#H5TH%"#U0&dXh2f1#p,BYmM&lCa[)%KdaLq#1a5RGhrQPXa" -5mLbrF2mDDmVeq5RF@Ra(HS"FA!51bXYkTl9@1bXlVZZaK'VlTl5Y`ePra*J+-%H -@"QlHP3Sj5$XG0'Gb2$MAd2'25k)r1rAr)d4d9ZN(GMRVh(@9Y80cZSVLHIVIX,q -mi0eR'PC&+!QK"qSUr&ke`#Ikkc'rV!e6k#eY+dqYdYeaR(@-jXlpBhb*32dFMPX -PAMc''f#"*@IQE4B'f4Jd9i,lI*`f4M8cEN["XG#Q`)Vm#EF92*R4Lb`$6$-DSr* -[UB6T-4m`mdNRQB$pFYP`+M[#r4G6)LCHI6!MDl-YEZU*eZQ!h5XF$m6YpA-i2Re -[Q`*rT)3VlSUJRXeGPr-&9eDI-+qTm"%(9+DYG8B+U$r8`iZ%Ppidi6-TBC1pAmh -pNqD082SfKeE1[kkG4Zb6Y-dihHX6`$iUU%h1*+N0#,6%P'"1cI[M0pD'fhZ!cZ# -'A,mbVL8qbNIm2Zd)4!HS51i4P0eF2!NcV"YmS6dDFLqm(bh@fYT,@'5(!2d,"J0 -K6X&0mP1RNamU5I0Q43hKaMQq+q"SZPLdKj823&c@%-m&8Dei$J9Vq%V#"01&3%A -rkK'-AUMSrh(qbFG99Qi[J!FZ`Npi43DH[`Q@f,fQRee5l6e"IqhqV9T$CUHr1V! -$SpH!M`+#+Y2h#-qb9k6r-6fV!@ma(MV&lU3-PZf[(*H4YTf2b%lJp&p8q(b0%*- -H+K0IE$9$!`Ze9VTCVHhCc"!0ZMJq6V1`0Q,jj25bX(NUECF1%Gp'2,X%I"`JK1$ -6l1SC@N)@5K)#)6PM,M(5P0q5S$),2(hhRapTE(lX`qKBL'SIMrI#JE*QEQSUqID -KDXa02Jq!K)p8G#H&ZkqdK5aQ'hYHTqG6-q6XGRX+!5QM-I5"qrZRk%!G&qkebcf -&-rSRcMC)$UX()"NDi&SVTN5*4$R!$#c'i)J-%mN-4Td&CVUYJrhRDP5rDHamm4I -YTYiK(H`U$ceX)p8)5c&CM8-bfMVl-'j(B`8`3DpA08-S!Ck``HcVDrN"EQ&ER8B -,4JA,2I&bFqEI[fE%E%B-p&qUH)&Z"JTJ!cl[DFHL$cEUP@4[28K23N%DUa'4SJf -pcq!NkC*0lXD2VPHlb6aRKIb)@r89h2l*G+r#1MppQ,qMjaXEpM"d8F15*Iq+V0% --`6cpc%Ze[J'X&,KJZHf@N!""TAP%pq0UGKY)f&T"V%HrE,M#,kH$K,Jk5)%R,re -4KA3-a5K)V6PJak*%56#EBFNr)XDrp[#`dG3'4fImalPP,p4-XLUV%ke-iFQI@@B -+C4bG-KT$"5@6S&Gp!*Idqa2&&UB,pPX*4&[VH1pP3"@h*PJ3#AGr5Pb&Nh3!*+% -#p100)P98!B1FY,jG#ELbTba`X56'hD#!)r0q"99epkK#kV11)188HS-q[[Pf0-r -EEcP1X9Xm*A'6beXh#C,Bch(d"QK9BC'4e'D@ZECK,JVU(iDQ@@2kN99fK#Z,P(6 -c#A)k1ffp@F1RR$,(!TC"E,6`4qM$%l8m,l9&ZVMHpRie6ULhKZ504NkT)b[mXNN -%EEGVF%39#kkHKKJU0a-+&%,+jp*53q+99&pS0%JUDFV,i&6N[6)$EK'eH'Ch#`j -5R4lj3pB@b8'(UGfBr3163[)'Z#rUbK&(*9`-`UJZSU9I*Y%4$JM,elfZT%2GZ,r -cBA"pr*2(U!d#2%YB@SmLb,fG"1elYU#SHa)Q3XZMb2m['233mIhkKEp,d3mR3&@ -3!)5PNQZaqcXbQb5I8K+Ea&l+Rb[)D[h(L`hNIXl+HT5#'6+q&6jLq-D6EG"NpL[ -HFM6GL)6bR+IKA!',UCHk'SBMR!`#d1Ck3dr)l[al!Ar$lqUP`rG1X#2UYT@bK[2 -IHS,P1)k5li@J#IU$RNe`qPr0dShA2`EICXCX*LaEi-CNXqXBl(jN6S*qK`*C`lA -41M@[K)efH!mr5+HE@@BSqDVMc'IM@V-0KrNiB,35Y5G@2,EVYp!hLHlZm*l"RAI -P5iF0[I@Nfk5JGBTF,J[TSGfGZA1FD8dXLJ(9R2JUaS5pY@f29p`G%#I1Pr%GTik -j8k%a5M!6Pk&G62(9G8`&f4ND!85F11Na!A[5Y%f&afA%jNCEiIqHJZ8KCfD6B!Z --S!@+RQfC1D+THFZ6NqG@T4kLpQli#R61*VmVmR(#AY(#(QRiVabA6$Z$PrUCAq6 -Hb@1"@"CaRBqm1ZG8DHF5CqHB3Gm++3NV9&4XQ"$A2&r,1ECU,VI[P4dBB)EUh@K -A[&)06m'EI)imXYPr@5pXd%-`1((b*i3d1X6PJm!jDqPia*DQDZSHP+$0@Icf!bI -F3rSp$I6-YNHE04EVKG-m,2@EK-lrGa)X3*5P)CFl5&RjrBkVDZ4Z40l[clm"pY' -I5SPJdr$X,FK!LfLS9iGaER&$TVjFEVUS`"p0Ujp[TVL+CASq3PYLeV4Hpe[)Bkd -#DD-L[Xc+Za8@Abdd4)&S`Tbr4LYj#@KK!'$FAPfjbpLC+TG&D[[D,$e$CPV8iKh -H&1cZ3UG8C$hh`1fQZr0kD$GEQ@fV(RV8$kUNA690Z$Y8Uq6G@L'UaC!!hVJV3U@ -kp+1Y*a+jCGl2JUqrFLZY`+'V(Eq%"'A'Dh0*VcG5,Hrb'*fDrFSAZ@[5CXM1m4i -b(2IiK"4*&iMV@3p4"cNaQ#[GI@,ZPrcUi!YVm8mGVE1eXGq**fqQcq@5PEZmreE -)YpcjhiYVHpmL#EIVCcI--UVEJ(TEQDSFQARq-Ra+2*hM*VXlde[A"&Vm'ph8!6G -c&rR+C5&'F6"VbQq9iA%KS'%0I$`,%q*c*5R`kF'P1$T81GjqCbR[ZCHY&a1%pUb -rcKd+J5KqVdB28GUmLU5lQ3f)[C!!5C68k[TE9Bq!m3VpD*&6AiFq[,$f!*ZIR8D -FT@LQqi#QBl4#6@0hcG4,#UGJeM[2prG*d1$A-R'B6m&D--abPfr9,+rpbdV''Kh -R(8+R@hM4GSVV8KFXQeI,G+ReH*'d8NE"`CA$rlB,&r1AQ+CEH%+pLarE$1EH-bC -[-lN55d3NU[c#!(m%cTNiBKDJQVRCZ5XV#`#aRjFicE!HGcLc4FU`fA9C#dK0c@f -kh%flCGXcDb*p5PKBJb(IX&Z@JGa'K35ldSVr%#$r`6aDiaR+5230LiIX2-(C$Fq -j!C4kVrLLi,pHa6!5qr1&l"!%0B(@kJcf*SGRZcREc'!UB0J1Ec,Kb")89I&(ajN -55Bq'VBYK+J[94JX(HY8M%4RaEi[5354QQ$rQbQ6G"D'&p#[m-lbT9L&'N!!hT)q -l-ID0RG5K,fNGJ)$A**)PGUB`PC0XJ!U6#qb2P,%C9$UJ[6ei)cZf82Vk19G9fl# -fZH[c9SNl!l0Jc-2PCBqaMpAcPG`HBG&GGlS&fjIbpYAbR#bCkJNkIk,86pIab9L -eAmZQGU#T6-+!(S`55j3TUlb4FDSbl&*HLeL["r,,9FT"1JCSG94+Q+`8dH6JjZ& -*"@61,Q5MDl)3UUSd#Fr2cHj@`HG'[b@c95d2!#Q@Mk-ib%DLUh!r!YS"6IJL20# -r@0@U8)q"-SL1Jq1q9FL**C(mAFf1GTdj5HLhqNUVh,+kddDR%R3pANKSZ"9C+a5 -iErNp3N1QN!"XV,Va(c*)I+Qc"BdHki[de,pKmAR#hp,%&bq13(RNSLEZr%258,2 -T(4d8UU@[PVK'*"CqkGBQVlZ&Z@AHrT!!MTV8HkG+A%ZCkccaQbk)P6ZpM$EXi0I -l"5*LDi9EG(iRf(U6MSqp6U2Z%QNLD6cBK'$&$[-Z83Zk$"kl4rdqe`Q(*A1l@aa -II!G$@IiF#a+c2Z"I8DL+QJb#+IZ((iHG4VlKipm,i[b0YMj#[M6DLQT)9"aNaBj -11[,D)e,C$2h0AZHSM6MZGFXPbGhH"13Z`mE)J@k"9*UMY"p@i[1QG@0@M3aeG$h -46r#12LT`+-IMJm8Sh2,IILF`J+h)CfF,ZKR)BbmBmc-abU2bUDfER5MD9j!!&YF -jE@!VFTfrj6mChl"AfQBVR$aJE0)3#I`')!m,aLE%P&kE$GDe49mBZN3HJ`F,bK0 -dlYTUMCr@i!P9P!jlY-,qED69e3CP""V42DAL!Mb1q[@,RKN*-!XlU"3ZBV8iBb3 -Q4mq0YTUZ!ldDJB!,A"'i,$da@j)d9ha56KY+mf4H)qX2-pYK538'%Z,HL2YKl#Q -!`RAhHGk,1cGpr3YDmG)d0DAQH&+Kb6-CTM(N(IJ8q'EF!m-r1Sr`N9FXC1Ih'Ip -d+mATYZ9eZ(Q3!*p2%c6Ma&FCV+aX&F)lE*1p#FNE'qR%rTM5ZU8[fPG&I*FTa15 -UZ$I"L(N8,p,HRXRm(L9K2&S`,0&Jm)Z"+JK6ULKblaYmCcq%FrY6hAm!$Hb@4`4 -BpU05UJr`lZ-$pAh3VPjfHYq*XUB5b[%UZDR9#2%([T8JfUc,rlh`U,8Gk22IFRC -Hd8cmd%K*JA,+0`'Z-hk8)443$l`P(r,Vc0N$90mLrr3E(ShP*EqEI+mX`h&X"pE -bid1rJ3R95Td%9!U[RfS#&A6Qb8-S3G5S`qZ8&C!!)),UiXFm`apqDjN9rM`EA82 -iJdih$J33S5crQ$BNY-('3)$HGD5c8d"V*Hp@'f&0r5IHqr!49ILQ3FClrIap*Zk -3!"LYVCLa4dm`iE6N$ABmZ#`ALdHQpkkB14k$`L,[NAaK#i"IjPdFCDh'pP$rT,) -1@6PG!5TrScr#N!$'83,jEYL-kabUYIYai#bhA!F6`+5B,)P-$jr'(P8iCC[ZB(U -#VjLJc`bFSTRTH`@F2Kk1,@T*6,jBNTT28Q5C9G,J54@-E#9PIlGN$MZ+5KY200) -Ib%SZ8(RXJ38[lNBV%qCD&j1H%#f$*dc95dqJXXVISRS85pTX)k$0,P49fFqeY&S -eX&+Gf)HBYfb8@31F9H5k@KheFrEEEX+,1BFi&)PVh3rBmYV6Nb+'&0(iI%X`QHp -pGY`YVU3K##VYVkZV11ZAXiLHN!#8d"5RjX"BVPfL&N6G0%TN$rQ9#EEN%HBqGD4 -*#JGk&DJl+JHJecIYd8QdRq%#Y$hr8&l&Q*rjL1k3!26P+f``b+2a03-aFd5b,3& -aYEHXrKm4HRGhkZTSH2d)(dZBH6!HY90AQGV$bQE+'m6!T4`bS6[r0GVG*I8El3C --*2VACNPb8$UlJ(!G0"arkf94[,AX-8@&bjbrj$,,-Lp9%SikMI&bL5*RI004"4c -8AVfFmfqUDUL4m%&f3%X!3`T%f1j'")&lFrTYJK",JXHNJ@Q(Y&T`L*()#&r-Mr, -,P+,KS@(rYUB+Tr!JE@&rAGI'!$D%5HI[b20drJ*de`ZYl0XR-!)(UJqk)j&P@G, -B"([GEJqKmfF$BQ2#)E'Q"TQbM9&MH&'R[&rMC#18(&i$h)N#YQ589r(&$jMDYVa -Y@8AB4f61fk+c@2+`(dZdj-iNcc%ZH1[Z@cifGKfZLJNcC4GpUh*e[-GV3F(k&9D -$NdVcLem-R''#jFV9d#Ci4N(5#MDbeFLK%!G@C16P8i3A+JPG'Gf1Lq1plQRLaKc -f8A[fjM"KkH-H,1La[lZZFb'V5lK9#9FEX2PX-+Z5D0#[(cM08i"jXr0fF2eQ3a$ -Q#(2k8)6IAhh**[hPlC'2G0YD+P@l0&9HI,(MQd"c!#k)j4!ifdE*[(@&9h"KrZ0 -UHJ5"$)3fi@5Jfd!41`*1rRCkQ$G-6l8rPiX+cG(pDP96%Q9IT(L4+1T(%mqND#c -J%Vr+$DacXMim"UJ5,Kp$(Z*V'0@@G#S)b8fPL#,DD5XdqM1iTL40RhDIMVYGfUl -DNXSYA#"fkI1A6#BFJZb-%I)D2eA()U9DQ6YK1c"`r'Xrq3erN!#d'8XB'HCad%[ -jdBjNYR+EjG!8@[LbcV[5Y*kQd3iGcH[qR5a#N!$!X2QVY)5T'e2p,3Vkl#GcIkV -clhT)r*kZcQ"4[LkD`2qeCa8cSK%YIcL6jBE(Rm`qKIV4EC8b#Jp9H"i,RjEdZ-E -+$0+01PA2L6-Hck2cL4DCD2ehmZGDb#GI([4cQC`E"5XX8bjX`prQk)YS+ka@paT -CL!c#hrb0$af'0%DpP`'YH,qcb'p`LRd5A0i-BfKkK5p2B4[#(,DR-!f6dSeejHJ -HmS)#64ENXXQqfI4FmVNUYhU!8bL6ah&'Qhcc*DbII[+ji6ZQe,3[kd&&4$H00jA -aZJM-ff-Mr!0iAGekE#)*"epF(&Cii6TZ-kDZ*!YbApmSYV9BU)08fNDd`,%Q0Z* -D+3c%1q0ff9Y,5&PC3S$b1#@j*chXb&@*G[brB1jbpE68GEE4#Ml#*3ZCaJ)lRh" -DlD04hAqS1dfLY19e#S6pRQr0qIE,*!)#+JZ`ff4RjV)$4"TeH`j-(1%,kYdk,!@ -ILX5S#p1[`bHi8U-6E$a5i@JXV-DZMD1D[c9UI-k+"P"5FUhFQU53!)`E8L)Y!rE -Sik5T4BQf2T6l%ac8`&+YZL)XmbX1bN-+N!"e+S%km%pBM-)FQZPkbkjBVRbkLCj -Y+(idXd+BYbE5QKUm1[[M6m")XmmQX(,@22TpE%cD1Nc'+9*EjAq$&+qZPREJG$A -a4emGRqQ29VNqaX!bCT@9EUPCH!NJ!N@*3b2fCIMFZ$XFa95YjThQ"3NjRZ,!fT, -ep)%-DfSl#M6d"6LF"QQkYJaCa38NB0%ipCabYBr,-1LfrN$PT#H@+Jlih@kGXP+ -cVB0@`9e02"rq,l9"`1jRaJV6+9jpdlFFbkX!'*40Afr5TVS*!FD!LiK%Q`3&3ZJ -#`9r1dN)JhpF'F$$E$"NS#3D89@fbR5M2Ip8mVr3-SlYe*V'4PD&RAC&a$4IA)U+ -B5H"YjiGr6@4T95--CkVd'-S+HPa`P$h1fYi(f#ZL8#3QE$E[T6EUk9k6fk6K`Sr -3l`eG1"JR"IE%#EbYhr6*c8KfC492L0',)b)Z6U#rS(e9@CIf@1MVGZ3c"#,)Qrl -5&-63@ih9f"@M(U@r@)IF`BdX$iaPk&+-CeDL4H-)L62T,fIhMVC,Z4f'VakpJib -'4EqkZE#kMkaTYC)ZM)rSfdI88ZB-pkH3!#+@IeC,$*),2La-lTdVpFm`pi14%34 -iYQ+4c5idRU1VVABG6U"4Jkpbh'QY+`cl"RB)C-(a-5!qBkii$Kb&TbTM)k@C3d` -l%6RMe@[R[%RX4iID,ceFErkARL+rKT*e)N*,G`%UXFj[ErHP'$+Zi+@3"!%!!$d -!!,5KS6qdal4d!*!$b3!!0EX!N!0b!!hP13!!qB`!!"CD!*!%$`"0B@08Bf`J690 --,Xq!!!#A[%e08(*$9dP&!3#3$i!!N!G#`G85SALlVSheFKi[2H,GN!$TYB6+EZH -KB2IdYYS#)!ai'fB6hBT%(!2UY2HIX%FI&0A4p[KU9$*AL#4$i`0J12CBP*VaF"m -5,[)@LXma''!95*BV1k$iH$G!XSaN[IAq#c,V-!&61BM5CqcDp9,UKj,rhli@SB2 -F-EBJVSD+f"mi(ckFmc3%d1)YS'"'3&*03rLVFHCa"1GSM0Z--,l$)pC"Q*&Sj,R -J3H)JkS3r)YTfU-+JF8&RchX,P+'))E,c!@Zb2MMFrY#3!*[*4UVAEmN2C%QNT$" -`J`95i5J3!eprCV(je,aEj[R2ce(0"ERd2RFVI9qYJ1C**Qhi$CX8H(CLGb#Frf! -lpqm3)NPPE*dd@,B"beYhUmh+K)+`D[reEYA[U(+N-GQEcDiq[##rP&G!DmZ"c1A -C,NH'1Q$%&BFU(mr)aI"jrkAGq!5H5G6MRckP94TPA'*KLY-h)8mE1R-#`@5PN6M -hZTEj[kHcaGk&c#C#JmFi5Q!chmVqjdH6,BKd%q[eZ-+SU4+fR8mUK5Q!)`XR@!p -8DIiT9PJ*JNP5PBkV$qcbTG4A4H1jP0(6f425N4jQ8c&'brrbR10'%-2-HpC(1FD -6!UM)RdM0Y#2eRlb+d6B2ah+i%Y[JCILYfihkcVF8"8mENJ"GL-9@Z2VNeU$"R`* -Q91GjKZ55"I+l0SlPP,N,+R9*(FqZpDXVDYV4a3a+&4V$I94j"482qcZ,'B+@aB` -Ui5a5MSpS`bTIB[[L*PfL19Z3!#JV@LArZJUJEAhcBGG'CIrS)%q6S68RDP0*BJQ -[-"k0cLaMqp@*cq%D6qmk`"Za%b5PR+AKNQ4U!X9dFPNhX&2C)*DJj6de4Y"e#*S -U"4SRXc*dj,caGC@,Ylm46&`0[!lM&kG)YCQ#c4kr`jZD@#8e,*13!+'k+&FbdDa -2,SH"j$3J)aefY3de0B*'Gerk!mC@M6dF)l!M3QAepEBNk9KMeJBIZJp)GF-D0Gq -NXG22[ml2SKR2M)D-Db&mk),1&@4hS*D8"DZUZ9DCej9@V!eLCr(lLUVpHXB'kQ3 -K243--c*C%a#C!&XalC(GqAdCjG,*b8`l-(YBII*Fp-!UPP%lKeA)dAIDTGdajGc -#-F"DJ6,$8!912S*KQ9k$B58jJ[8TA-C[9R+G4+mXdTUPBN*@,SErRTId%Ekr'kq -b2`ZpeVHj3h@&lMA+mHGje-m@eCCmlFml6",6SeGrMHV!P*Q5"e#E*QU0V'iq06+ -p%)J+QJjF6C%,83NZ"![J'%F)5qE8(Rj(Ek"`j*@8$eY#86%T[LQqHj@(KVeEl55 -hDbP$KS"669Z[J9*DJ#JNHkTYlGh,62$!'qVE%PadD)[+AHrPjUDp%,5@B1G'l%K -%jKU2`fjFK+hl+0FiXPl!,A2DD('M8PJmAMi)ama9pc&NDBI69lZZT#aQ911i@YD -el1Ze!`X85lZAQk`pZARjRmjdZYCJ`PFN`F[J,kIf&fMqhQ"D6Ril`q5YlRdT(kH -lj#k+l@"dBrGQQrGjGIkI1hHD#acM%&FaJhcdZPX%K1m"FiGj5`(R)f-V+6F%Prk -L'+TN#!CFQ!Fk@"-9miaK5r03M+2dc#XP%hQ'2j[J2MINI!Y15%9kfAXajAa"!q[ -qCZ%i4ahb@FRe4X#0R@Vj&*hQ2&AJSf,A-,3VV34CR"#SACbXAcLYeLcN)3(4b$M -9eS[C5ECA'$-pc[b,aQ5J(XD2MZLiVSk4'+YpQ[@DLqTmqUmhD3VaXR3e0Yc98NT -MJb0M`51ZHE#SlQ[SA1A+KHCIX"Z!&Nr-G09IJ*3kjI`iq0A$BY'IhiNSA''J%IL -lP9@96ck*(3A$8(MQ0kr4)Dc%N!$GQZh8r@ULaMK+3CPXr[fL"(,8HQ6CAqBNmA, -2%lUm2acV5TpDSMq!b06X8%DJZed8f&MHmKNR!KCYJarfFC0Ic091KfJAb(#r6(" -+G&C+C!BlESZK[!2p)3`jpl08(H!Qie*&mDebU+TLbh1Y&QH9lG%+q#jD,[6KK#0 -*TpY@bY1Ih)hq(,e!dk1bMKTH%ecI4QmCeLSR'G`b`c3Z,EHm'P@9#XCr09Lfa3q -4D36)p$[1N!"k2'L(MVL-1*Sma-X"2'C+"K#&Y@1dPQACY'!a+6#M4T+`6pCMUcG -"qN1$&+(KVaX3[8ca8D("-0$ll!PeZRdk!EY9J(c0rklG0!D3!"8qY[3BQ"BQKk! -elcE0aAjMN3cQk!RMM[NC[!rqDi#LRkfaH%,N*a`D[bE&ERA@me0Y0+TacIp(jAK -4I8(a"%ZjD`&M3TSJ[lmJ'h"QF9a'CdqF'AmMf-e#%"@M-p!`!rE%IRI-48c!,l" -,9ZJ3XK0B3$lRhilVJ(C'9IaJ[&ae*@)9Xc%D@bhE2X+['9DM*QFZ3$mG4fFLb!C -[d%mKa[&Nf"qd8$F)MbD5V8m6'!h2&"T(Y-[HAAi$Adji6$`f[p@)HR0A2"Re[&c -EXHHG0LIS8$qGl5H%4JeQiVTH)-+-p&jjCfX5l$5mlj54AY`l5!L@Qih5$Yrl'Pk -Q9k%U-LDdK6AeklC+Af"d3'Q-&C*"r9H`khb8kq5i1G6'6a"ifQJTAd64Sh`XHIH -AVd3FX@'[dp4!VjkfXIQaX@,9M-l0U%hN5EE84Z1D!k[93*Yfq-mrTBX'PA5A-kj -I&!4`M0Zp6HC$D3K,3UELb!iSf)'&P24#`FJ%VR2qekYB(hUkD4QZ"M%hqj-l83q -S%%e`Zp94i[Ue9%269K`")j1SYEd8S([El)*'9m)JD3kY-$[Qj0*JH"0eVV+,h!Q -U@!,M$(Y&9'DG-pcYZTKZb!iT&)9Vh'!(9MK`5!hV"K%&MMPBaL9'C1"&E8hqmje -HC#P!#%Y0MBc5A"Uef%I(#c2Bhj6m$rDCl$L)L1f1QBf+0a8-YkA%GEX3l23rDV8 -MY[h60ZZ-pkYATLBREfYLImlkJ@!N9$GdI15X`#BY#dk5pU2c3ATjQRGRrH%N#-9 -8VR90$R@JbPPL`H!8-aCeEHaSNJZThIl&Y-Ec[iXNGfEbXHiN!RTBf!K-NckC8qK -UI'3+qZY4c5[4CF)hjZE@6N9[L!4(p[`$SXkb(dA)2rl[H%PVV26#(a99Eb`Mq%1 -*LcBkc2'5%'3V,(`UlYA'I[%YQmb-5SL2d)15icBp29dQT5EDJjeAB(H3!$mU9'( -,DF0a[UPCPmf[4,5#@Ma9'N1D86#d(+DLAJ!Ged"NJ9#+pXP#+rV"!VX[E[BFNF* -BpCrY6r8b4fSD4fCchZD%-C'202hPP1jpEDMNbp(-(F*SA8E9hCHlbNb'iiEMN!" -SY!rfAm1FaLhHJbPF$K)f1pV[eLC!m9apKMV)XNr"1+je(5*c@a4&5YX21ED#'U` -LX'DYkN)diqFLi%d5`@ND(KiaLPBN6qehf&+MBihDl01`AS0BK'9"B%jl33eE$hY -`LVd9Shi%bV'G%f,dF8PI)(5Y9$H!(UG(h9`T$@Ade`K#MRlf2KRCYN6`L)&MJ4E -mSI1GVHU$YT2A5'iSMVA5l9BN8RC-3UE&%RdjlmXl#IVJ36)'&14hFf*k(002X3S -FRAamS(H!aa#iaBLD!0#P0F'$1ELb*feE*@qm6(2ILeHa58I3Ia"CU'3)lhmXjEe -0Bq8kMfAQ`+Q(KZ5jA2kmAZ10i2iF%mA0Vc(8$bbSeha6&CVf,IhN[Zd@`m9Kdqd -FP)pilSqN9i"dbEG*KREZ)f["8D#mQ8#XYS$HeqBZSM,LS[GY,hqJV3(Qrh9dE@Z -)ALmd1[4[FI"()Ye2Z&hDB@XXp+SeQT3pAS33H4E"iCXlD0&T++Mf,eRhC[$0RS4 -Rp6jM*'0Th)NpYCR@hB(FNTKXHK$L&`jS-QI'*m`Ur5efp*P!Yb!Lk1k#bk(ZdjQ -)U36!DA()GRfI3h[G-p$f,,CER4Np`qiEqYBr@d6ENXQJ(*q6)f"L+aU5E#K@f(@ -kaRp0d)51PeH5DB-lAGDkGq[6MK6m-J'-I%5E@jY'6EUa&[[LSXAG'PR,#i8eYX6 -j06PRE2dTi3PQj(@GkRpTV[RVGHS`mU&+l)Z+-KKaEXH84m1K2)VI&-Zhfkh@m3E -FfLcip*i1hm9CBY6qQSfT%jiLLEdBAV5E[YXNCM+)h`K&m0jDFX1'4@J@pkZ$E)" -q@BU+Ni6)L+03P4GH"!H+!$hCjr)'X1*!a@M`5"KaHcAe+G1)(NdGB9NX[QSfi#6 -L4AmT6H'pR(RA6Vkpd9A#-P$iL@c4"[RN-(CQ&8i!c!BTdf#+)Da5k+8(@aNGm'X -IX*qrFaGpZmrm"I5pe`2JE6Sh[A4MDP+Z3k@6l,aZd)F@5e`r1lBDf&f#G3EV+Ba -XiJKI@TZCL35X$ciC)JP*VA,$I%$ckm&$Ap28HX(&`VQYFkF)T6ASL+p9fX("#5N -eVI@,VfS2q1A'XqFlAqDd8MCGCT6H0T@MMU!pcBJq+'-Q2K6&kTVcbf!DMZqfhmd -4'85i'L'TTXNdhQC(Uk[3G3Ffb(&#[XNM!'$G3SYpTf$*`"Qp(ehj'i11Sh-'C@I -Dbjr#LE,fZ$&+A5U(iV5rq$KJb`Bqr@3"r0Jk5)qUVpccDE0B+l!CVSNe'#UcI!D -S$0R*&dm"J`@!R$$ANlZBbYecPB*B$pHj3L[Y&K8-[VrSjp+B-@9)lk1mPIM@%C! -!R`&&h"MN`IZ9EDB&aVK(B6Ke#C5YXq*8,M49[DM$P([hI0-4dXqjHfdC$45Hmei -&@eMV$9&+6qY93d0+dSTY8F)%G5jk(X96X1r*Q482V`!HY&@4IS2LhM,LkKUhGT0 -6Ulf@-Yj4"k!4qcepB*!!IAdM2k8ZXq@&ef@,Vmb+AYm0PbKGBF%51Y#*PFUYP%# -[r@IR5eTbX9b83i&j$RLNE1DQ$p(5H3!Z`k*'hqbD0SAQ0@!MDkRG5b9ZM6b`HA` -ri-qDkNm&qrZEi#m41aLSlkC9f@hQUBC+%**fZIB62KbXNqK',8Xda'lAhdeA,Rq -RdYV[J2M5FJim`IVS8&a(d3U)q%[YVecd$Xc,##P0a@CjI-p`QTBIYlaT5TN[%rS -mT2Hq--FfPf&V-P[0)D4"5+U2@U9,'C!!"NZe`I'(+ri6eVjAFYih@@-S,U0[9q@ -Hr4dr3ba3h'aj`AZFCabAQdiFI[TlqAS8&QL"+(50p!$F`D2&QpCTp-XJ(D5`Naj -*#Q&bVX`r&-pfJp@Yc%[Sq-,(HYLm8*5'EjM[NJbHRBN$BAhYGk2EUQqqldBTMV) -!rI`N,M&bG@"mRRdP@bViI+KSrXBShZ$H6NEZb"[H-+bBiL@c-D"DDJ#*cSZRa,` -@Ik#83cHiqr`I-p$!"X"@YJ0+DMm*H1Fa[QVDXAZMif4,[kEc0MKKmm`CXZ%3qmp -MIX[cX+pFiB!(Zkm[E0VerEU9JEi@2DKGI*5U@*NG(jA[[4cHKpe5Gq%"*3a%YFY --jjHdeQ,!5,l'KmHR)be-Lm,@q*!!JepD$LHk,R@AciA1L)C$(h!cb43IYJ[2U+Y -fJCM"2NF4HY8hT4ZVbHF$RCq-k3KCjY3+DVp@GSqM`BQrCJ618ABfTSZCF")(q2Z -fQPfV6)3GmY@VHP0,!!2Lf88@mMH'CK''2f1bGGKNQ-"dXCdc@KN&6d8ibDMU*b' -IC(@E(EKS[Y+HXbM&2AAY&L6PEJf%F$"J-R-PI@Vc+BhL3@G1-aXSN9(6c*B$%dF -[(!69Y&2EX-Dh-+6V%X9013Re-P5dc)I#(Np,Ga,l*Ghk")Uph`(,1jd8e694I9m -1j$$"9hDerIZ41i&k0%r2UPbae2@PhIi[Th5-0ABcD21Nf'J68G5hk9(c+,h*G[c -pYF5[4cd)D[MNHk$XTq!9cLCDpi*id1Dq22Lc4Hi$h#qPP#!$Y#,&$DS4!A#h63( -*P(mPQeI&S!eBYMbN#Kc)`-8YZVq%-qR$!+`+Hf@3!"$Zb1fH%KmD(cEpFZfkHGP --`$d1[i+a9(,Y0*!!!D**lIY`QmD`Fdeh*+Pep&P+$)*b%ErH[MGGcQaCkp(!!aA -8)DQ+S!2Z$aj*c6[D%"D3!-K5&D6S$M&X5,@B0Ip(L8)@J,!$EZH-4IP`UrD5c%0 -9hA)5fVN9Yb33"f$TPV483jGM%SfLG`i"-A)Q@LmM$``,T@h!C0r2$Gba)3q[9fk -3!&kU0Br-fMSISK+T&id&J(-R)j,fECe#%iQDGhf&qQZmha2,h8Gf4qXq8X8)`p, -"0BU,04rP*$!DeMH"ZEkkK$$88YT5$&P0e%,ZlBj,ZQIR'E!&qC!!QK1TQF5K#Sp -Q(HYCLj2@NAE#(MF8'f924E6e8jE"(@QEZaUq$pIFijq[D##k'Mp"0I$mTc+m6C, -*PGB`!L@0!8q([Fhc8!-%q[RIFHeFZSf@&242@I2q)#Udh2R'IVmm8B3D&1BDLf+ -)FT5I'+Dcj(mmejQ*`QfPiNlSMLThdFJ!UjkL"@)MjI@#m12USZEFEU'HdKJXe(- -c@1G*ZBT4J-cP&,XiLLE!9*SABVeH``$PI99KU$Mc(50#@Z#(fKD`j&NAj(pFjB6 -pBj1aE!rf#mYDMAX,ha4@`3T(b9@3!183De68j9M@[`p@%UE-Bi"0D2h0j+*HbIY -'(2L%J9F%cTGcb&PkheT#NM+9Hh&6C9+Q3*jbAShH@U(kU8ic-DU9Fi4+e9"3KpZ -lf(R!PLBKHC!!5aK,FqZ(L1l,q3--ce2bCkpMSfFS3rYTQPcrc2J0I9LiHf"CHe1 --6KF"'AC#NJlpiDA+I(qHZVP!(34eR'QIKjNU&f!dRe#q%,$b4fb"haq,"1i2Ed- -Q"0NJBEMYbU@!+Ur&L0'&!"Qjac,$@I4aG(jUk3U+JCYm0Jp11Z#h#IHm$)T+0Xb --C@m5`9Z&("dQI)F,[BRPX#KJV5l`4@i-F-([jX9XR`RlcK-DhQBL,D09+c83%(Y -Bbr+9(&5e6Xh*H[KI)+Q9X6(9M@Kjc!mIPDKd*('aKm*)cq)m%3KY3mi4`1jacHc -25EA9CJfEM8FFEmIaH423T+LX)3bdPYR6Cp!9ac0S'DR0QN@VC8)qk!SS#+DpVT' -FiZkVd-pK@2NRNjaXKf63C`@c[X6Fe)H&B5b`iB+N*ph8#rSSqA5iTMM3BpcBImp -C#bDEV-Za@*XK,dlAFj!!TXe,Db*NYlQRaS544#`a8l(e6FZ!$95SbCp1kG'Ce96 -VZjSLZiHa%*S5rT'k%ULIBE6S(AHZS5+mJ(DTiGFbA%K$1q%%`ZVaFe40!SI"M5Y -"HGU(S(AY`U)&U6XfJchUb!HEJEkQ5UYK85pRRU$3`&bEP@DUD03)LNaj!Rq@f(@ -IX$c0i$he#M#Nf(+#rX[9JD@bK*I*-G#pf(&&5f'rMD@29*0L5`Sc2ELrKTpP'T! -!0FBRXl4rUY&TN`'3!*pl3HjR&@hBHB'*ZTQ8U0Ek1VJU4JS'`lKj8hYIc,*fH-Y -IIC[,2%Dd9hM(h[8AAZk(6lFa9b%kR%1CMU(kX5P3h(L@B33miTYB9a#X2'G*`hV -Z5rbb,Gh@d9@P@Y@XVL6f"6!femcT5fmYpr2qlGbH[%B$8X,mfC%"JM,*6XV4eF# -,pNSRkiH@T4(K$4STQM"6PZi0V)!D*k*@BYDaALFd1`FCP01LUkFGlDJACYVBfMC -KfdUkmbHP"68Vc(G1dqNb'U`8b')kk)UI"Rbr1lR'd2mTa*+!eB*$M,((ab*R6I, -hIENAm8i`r!#PN!3"!!""!!#dSDNkY-HdE!!!(`#3!dj(!*!$FJ!4[0d!!@3N!!! -B*`#3"!m!9'0XBA"`E'9cBh*TF(3Zci!!!*Hm68e3FN0A588"!*!2J!#3"d,"e*[ -NQ5PPB(k"b!MVQ3Um6kV5IVS@9jdaTUYQBIBJ9jD'%2H3!'1(cUbG-d3198EqHdH -"Y&"%+@Ye[BDJSH01*!'D9,5KK"dLDYe+cfkNj24GLGRILEbR9qCAa(C#"m"j4Jp -R8bA,%$8I2(CE8Idk"+3-rLX(B')(if+Dhm&VY8AQ%GK[4A[hCE`U6h--hdG(b9[ -RL(Hk%CFGY2K@dKhDDmD6V[#X#8)%%pH)&D%6"4MY@TAh2,S,9`T"Ef*8@2+`0-L -'YpTY[VVd,*D6T"I)*be"$efIb9m92Uk*E'mJ8c1PG32REY,-p2T%p,14U+UfS,H -UU'AI+F83'QqZiHN!&[icIE1Ai1ZAD)q91ce*0%!6QYHhS[hYr&Me6qA944RpXac -%P"PJ-KYD+$ESM*EMlU28H5Gf6k6rr+"9((G62AU)Z9+UrJ!RXU)$QdB$S-de6HS -(T1,*@ccJU@,ejq)Zm4(!ENa842hfHAC+2&h-DVSBT`m9U%dJmIchAH9AQSGeJ$% -1qZS,+hH3!0-$((JLDPHJNPq[ST1[iXlUBQ!eS)eXfRB@C$2H"pK&,3e9G-cjaUR -A6SbY4QcG22`e2am*9##l"4UVU5iTJ2YckHYDPc(0%TMNf5DMak1VfN0Q'N"L*UH -N(Ce0-6me95J!,&-Y+XEQCS$PH[bk&IC%3&)q@hlc8CS0H$'rM'Xqc9IHrbB`0iP -I%b5&#`5dTiJm56MXMG6'a%R+f'%$hGh0iQdfYS!cfKILrP5H'6HhmE$9NFq%aYU -bTTQfFD[2SN%4Q!U5beN,@IfGU'A+%1BaXpf)5@T408Rj`dr1kKN54CJl1bNe,DU -VC6!$*'ece*($8MC#pRcr#@@r"hJX)`NC3m!Hee(p4c"Q'Hjlhq"hY2Z"'Hl$5Md -@kG9U$K,f)*FC$Q3F#IY!)IeG,l!Q,,UqUkc*U-1,l5a@M1-p9[62Gd9I+!59Z1B -AVlp%4-)Vp'(Xb---"rkV&NX+GpYp*#d%3)RM9qa(#EZYFq-kiTTXdA[9PV*qQQ1 -Ud,1r+$2*G)QR3hfJ2c![ih'bVF2!EC!!M*l5,mR&&XAdF%G1ATeeYSjH8[S$(Q1 -pILG[,RahqL%8rdj$E%PlA1XqK1%$Nh!(h-q2r!"[4H`A0lhBL84`K0'i+U`+BEI -ThkI),TNB8I-rV!a*V#(M,h4j"-efc`3K$REe0ch8*dP3*mc@kV84pFKMr'JS+MH -2Q5-*"G#iG#1AG2,9Ib1q,J$"A%!S#NFp`1T#"Jk(*'0F%@qPFAj$iUl6&Y#K")a -Y6IY-j&)k09ChAf*crUHRQL*IqbB2UXMbfpk6IUpU!+HjlUX#,-(la'`!FEN&8Rr -UUaGfb69YRhq6%-mM#G@8#Vd+pF6,`C-LrqLbfM&@GiUeNK#**)K[qQI9Yd%bA,, -f%cX!H3[rbJL,A$JGEZ4"S!(#b*qJ+hYTTj`lVj`4JXhDdj0Zl"&3V*-4d8MaJYd -`G&6ZcelfT84Aq2@1R@$@ZBU5(1&ecQ8j+q+)),HKldD*jBGcfJS8aEH1BaE(MFB -BXHBXM)d-TFN)%UYkHDdkR[j"@PTFI1VbH5*CYVeTd9,hG`#Q`q1((1-mUEE5XJ& -f8ri$kmB,kYBLY(C[U`RbM4(#Y-[qeFh#[[8Vf"'dpX2a1PTSFDhp[IhSJdDI[bY -R0eId+$@C[-&C9#!+"dC6JbL()M`"mCairBS,Mj+Mp$SeL43#LpYqENCPT*G)bUc -iVUhS*S8e)8LAA5I&5SUf[iTV'bpdi35Hf)i0ME!j$rK8m$Jl0r9mh[4DrYb[BDF -e+fic2bVJ#*1TXBQXj(i@0G![-%[aBEZiEjMPGj@eDPCdEalb[*k2`TB$l4S`0SQ -P1S39[VQQ)Zkc-Y"H"UpDKG!TD8dhA06E1kChFV0UcV8Jq*j@45bPe$P0eB@9Hcj -81dM&$mXLjeJ,kQeP+14Ji1L`fkC5%GZ!FC%@Icf@i)AK(Rb!a9Ehp@%"XK-kc(X -L'5$9pH&SfkI#dVVZ(8Qb"5dVMbMDJG(1H(#j$V+Q(J)E3ViQ['(,c&qe'QmQpP4 -91%iH!UYAF#[&lY$U"Z%NJPrQSpLK2+&Q+L9c$QcNPmScR2h98Xk(50pHmSV4dIl -CNHPkL-FZ&BXmG@I8'4#iEkIj!qb5cZaDlLc)QcbrjLHKMedPm+hqBNf!8pf&([A -PX'YHRB%8[#`G1i83&ITF$YP3a14(GF0ZB*F%#6Ya&$pV+r`Jj`,dLU66,$*dVac -0Td%l%*q0YeJ+Kd'`Hh*jjZQQU,G2RK%DAHM[Y(h!YRaeiVb'$Kh6K"#JTl4ar2B -8aU3fe**0+Ip"2N,*da-@C+dfj@598XHf!*j9+Ld`KEEZh""b1K3L@h`bl#FKq)R -(CZfhY)AleH!Vk5Pd$h3XE3)Ca8HDiFQlmE*)UG6IlB%iK#lcrZjelh(U)LQPYAD -`,FL!rpI8%CaHj%Ec$PqEJh$cBZXPmMZ-@E8#ZE*qEJT!!pKQILQ4NlaKJGF'Gc& --#CarG52li)CIjmBSMjLq03*9C4,8[kNR6"G35UYN8hL42jadU%m3%mCm'maD[T@ -*NkfiIe4A4f#lE5afLpZCf1H8DVq0KGm"m58d`ClCV&H#3Y`B-GIB9i-(,EQ`L9m -%8[F#-4TGb#`288q1!H!8AR0J+YiTjdpL)5"+Kq6&r%[[pLq@r@2k6!apk6BQpFD -*,(a-9ed2cS1S1*rVRd[PlhG1"%SadSCGM84&kChh%3NSrP234i-RIUfS!R1CK%! -FYN`LBMUUDrYIAC65C9,q+%3PY,%-pCTP3[UND@5jl4fCJ'''A(pIJaMTaLK2VZ+ -T-+I#ld-3bk4GTQil4C(8S(BQ&J&22,VHme-Kk*e+%kAMRE!VJ@hRBP4Fd'hLr+G -q$2j`3#ZrIfhS93R+cSPbKTI-"#e*NLG0fj5lh`C!iJr!AKmAjpY`K2D+53KlI8Q -2NQC62kqCXcFG!3am0!NNUY90H&m1qfXQa+)@'b,mNBpa28edf81U[)cJU@,!Q62 -($0fm+3G8JSD9+aYj0Icf%k,e#lFiYDVM@8U%0m$&#r*JarJU0-Q(2["f$i49-5R -He@)&HfRXbqZLrYi#q6i%RhELmIpR#RpmVNLhVPA+EcPIjJ1-(p$qRJ2cl@Qe6&p -j095T5mV@ADB!'qd9Gb'If#D[9#BMll)[PD-rA324+eYNaV'GD[UIAJHRY(bk6Jm -b-Q1amcLep4XiI'D`GP26PXJZ1T9i(6f!RKN$hJ*D"1KL&2ALkXAMmaR),$k"Q2f -"E`a,8fK'b')9HAe4*-#'$#UAXSDjkNMMdqV+MM0kqf9(cQ#cZK#[[G,T"0M2IX` -P#l4XMJX'`rRdlX-2V`D-2KA-%"@"(5qG'8,k4DB[JqIQKDbU'i#4GLLZDKdIP+b -IMaMEGPPUU#4"6[GbVlIIH6%b`e16Kj,a5GP,hMp9@pdm*r!'6Xme*&XiJEAR"Bq -jc4Ui9mYUVAP3Rji#'$B52A@SEDD,jAMGrT91&C4-`Kp#IAY*(8LLbl5!3)e14cf -Y!I%DMR$)Q,H,Pi`RCr%HhC43`d19KfRhqeIh!!a"8TD0iGe2(c-b%FlDFlZUCrS -(DKXikM4Pm%SmLk58ch-$G*kU(-P-m!Iaf6GEhd5bf#3#2cj#&rI(&9,adJN+Yqf -8P)`HSh$[NlTTJ$C,r-+qY4*MC('QYeG6(6&(@,@l%-M29"P(beF0R)XjS#TYUhc -ZZp#)m-e@X)Z9k6#R")L)'lm0@c(jY)16,5'$e#3lRjI#N`%GA1AGr0DMf"-))m@ -'h,2(RJ2f"eIHV!)JCk,+VXQrak&9*H)5S98kaTcjXSRPE-4e`pR6446FJY*irIL -)YhLcGP(JGeV2i,B[YeD2,bql[U*UVELf#RIPX[X*b6I(laEQL1#cHq&f`*fhK9I -Fi-N-Lp"ZaIJTL&1)j6iKlbZJFUfb8ikA)Q-'FflQCGJT66p-2j`!N!$*RdE#K%, -4SXVVEfcUJM8fa3fBHaeCj@)#+6@Gi03*`#p6#M""26`eI-mLaN,S8lYpB$YY[*Y -YeY-Vi*Qj@4r,FL2eN`4`[VFF(d6lX4hqUmL-fN6&[!p#G)D)RUbX"f'r$pPLVLe -8i`l5SE)A'lfM,)Q[)0G+#r#8H#Y[BEJh$&!+9*U(8*R*i%9)E+N8rb5@J`66)Sr -0V,U$XJaF2Eh90aKBmPY'M-)C*(UF[[e'6LP5PJMkJhq(e"b$j0)&rlch@"rNJ(U -$q8lGU!%,aI4NMG2)'+CLlKT-VX63k6+`+I`dpUrE80@L(Z0r2C%5r!XTqmV"!eH -dd+,-!kB-Jl'HJ!'$%J,B$!j2i04RYbEa2MKP4%"TH4lR,cV5ZFb2HmGl!-IPI*c -+4d6kN!$&P+XkCeiMMD!M+mIK)@mRZC[F&`9%5RSGHLYS'b3KVjQeb(R205!)R1` -prcp)2U)Z)CHaIilL#+bX(NLDf#kX#,&6#dX&0IHTAM"X6@e@4VXTJH"TIa&@kV+ -E2@kRcH2,fN%0!3l9N!"X%RPrT*CI*fe-NLR@r4"cIk9"-,qPme,bHNC,XRVEB&5 --ehG0J+rI92X(V2Qk6ZD+NI59Eh(L*`-ETcl03[hQDiF@[AbYJ9lhm6p'mQ)m%82 -Q%RJ*[D5BUZ4Y'Dakc&HRmMb3!-,1Q,aL6rp"h00,%-r!5%BU'ET-NAIT206NR5G -fb8Y5Q5eQRaq$Rh#TH!C$GjEe!HB3jfZZee0dX%f@56aNpCi-l(P2XCp"mkQ3!*' -1%C4)%[F3Fph9@%P`Mal5lGrCU"16F$(3)LJ!Q+bH1@kC0**A[IZIp!Zb)Brj$cd -D&#bdepmjQNViC@(J9RdGb"Jd+Sb,IR&CK&V%B+ijfTfa-ZV*Uj,aaRNm3"@iU'Z -aCrQRlhFBjf-81C8R'1fJiGHN&N,EI266)UaQQ)qYZi"DQ&Mec``DjL$6m"j"Le+ -(hV&iL,$Zf!3dr4DiQ54NrG*2[%11R4X3,8+FNh4e*-cFI(RK+$#lj90B@640#Tm -J`dm+EQK%TP(ca*CD!R"[[p0I')1RA"lCMQT!C%UJRY,eSa!NZp$!S1+Ekql@c!B -!HfaQA`UM*ZjiUj96DIB&D`lm0"@M4qp4@`+'rbI2f`3Dp!EB"KmmD#&Kc9FkrP5 -Z2K&(-[V$)ll![q!rKD%Q%H*pZICBrLTe'CJQ)ZPF$0lkr%PF4Zc%NU+9ETj0*qH -4le,*HQBXPNDii'M&1)0)qh!hJJ"0GPa2rFh5CZqS(l3!j4GeJUqfG4a3@h,f9TS -C*R`F9U"&p&0*Sh68G,56pIjA[aXKPM6q1rUVpL`,S@k!$[`kD#3Im1@V+@9MF9K -+!C,@&&QEdX,mhep--PaRZA31$K[P2q`LEk*B#Kl6QdYMfYK531iiaCT!,'cIR3# -C4+'dJa[F4CSacKI5QG&8Dl8aHPr8h8Sr-4Q)E%!102R4X8f!mm8Jf#U5mY6&6") -M[%rfHiccSLk1pTG%NSl9`TL80Pbh'aUa*id"%!q8!R9-@pUj00I`CG,"Cbm5-r1 -4QJ,29pV6*hkSDU#M5UaT8Yba!G[@GBZppRQ9PePPHUK%rkZEfJUrLQGEX"B,H10 -Cc8MVpKT&l--aH#6R"Q#3!!,CZrS#@D[rQP2FrmaV8@cccAjh3jpm'c0`,meXfcM -JeRI*q,I&)km64(jYN[SBbIqcJqU9aLNF1%h2I(3L4kT,Nk8Y2X5Lh,8rk*d!PbM -*i#[MZ9!%#6VYCq*P8G[M!B"rBU!hqY[hfd)8hl9)!fAc#aYkS-Y-ZT86l-BTm%9 -hK!ld6,AB1CP[A)4*%83RL)6pF4Ch0Q)#&,LV6DIcQji-a,R,F,Hajar'fp%82eE -H51-dQCETH'(aJl8M-LHLSX-2lHHS-+J(Im+i0iX`TC[+3Rp)lZ2b[b"NNQFD9)8 -53aLiA1jGXT!!BddLX#+GR3i"T*@$!2Z9jF"6#+r5V-FD[1ii+Ic`Cb3YM8bcECC -6+bY"%[Sc`9aG&4SIBh)Kki#[jX#TI6M0q[XQdi'-&@Y0Zqi$&@1@qDbPjc#(C!E -*RmF+I""!2Qq&LA#A'0,LEQfCL-)fK+TR5K`UN5b*Vr0m8%aTXqXN(m5pTj4'fra -V)PR`epJHMaqaT!5FFUTrkEX(b`kAmDj+6P3JTH`C6p6,JqMUQR3"P&aZSC-pB)R -%L)LV$Aj,riCVJd6UdJ!$SmVH1cQGBDDLc'(ZNFpU@b2PXE-K[@9N%RVE@BDKKp8 -jA"L[,QS')eDC*@$",J3C'q)S-RI%j`@CKekRN9XCj(ZSJi5dVKM-20#D3fShS5Z -c4(rd0lZ,6aHIM%f$HX'+FeGfj6FRG6&&QBl$YeDrV4ZFrpHBANXA-ZHD1$4PdH@ -8H38*RG%i@i3Ver)Tr4XV!Q'J!,9qVqe!!h1C9-fa6'#JL!6XRJpTB@pc+Nkc!Qd -QIbrVcbqlfFjRQ`#2p`6rSf(0YRB(29@a(e3jH`pS[a"5+blaH!k3!+JrRRCamFB -BC(U1VaAa+4dP&LLl+4-!2K!1-!rmd3*qR`i%L+EYQ$bccmjEJf9*K[9MFX&E9K[ -18UicamTB,8k!F,$AG+4#GRTH&+fLTMbQ[$akjB'KQ90!4+cSDE8TCTJ,G"dQjeP -Fdh[**dre54q%fi2*@A*[k@RQCapGpMc0P+6$caTc[S)2dhMRpm)"PfLR*Xc2EF& -9m#lecBLNi'b+U#&0c"`!SV59TD*'))9dC,cP)dq`#irkN!"m9Z8eeP,PHER*Uq4 -Y-22V33Q99"dN"CpcB,0&KI'VZ&h[C05-!reF'QJ$+l[4MYaFa1[U[Ji,L)'rZBM -L(Xb`BX8`I&9YhI8hZC8Qp(@SD+MqEQUSUCpcETVP4IE[DRaE$+13!(&G#83kM0G -c"R'%R0AT!lGRADL+V-BrV*r(ipiHFJY1(KmN61aQ`Yi3bdi6FrEakmfP$8hDd4m -Y64"bZ$(R19%Tcc)YKE-V)UP)PFiC81"ZFC6TLKlp#C[MXSG+SFMAV1Z'%8630EQ -*U9Mh5GDc2!04b,NB&V1V)0LkF'0E9aEZDl0k$EUm!PJN1S#KN!$L-X`U04TVe2M -'R'020"!eq0Fe6rh6XdMB$!L#$PDE5U4(CGq[Amjm6k9JQHfV"&*1U5iR261,8PX -HLjQejH%I8j!!F[(h5(V(Aad6e4AfA#GGNr*0XDM(-XUPZlR+[,a%`@3hR4#[6,@ -"hJSRpMb$4H+Ap)&cl$$DL[UGU$p3@6@-9BEZ(A@U4Ni"(kYLH'a(V@Y$%TEjI8P -HXGfRQ)FL0T3(-12)@C,$(rbd1BF'b13F1hEV)Sk!(l)BpLGJkT[S'%iDN3CVLa0 -3jpM8SMQH$T8r+i$ec,K8d``(q"D9'YT!Le*EUJDMrf2)K8d#%raE%iL[Ra90AZa -c9Fi*YDIZ@c3XhM)VQA3[9bbaDjS9*JQLiJ2iTTrmcMDT8[TkG&!)!bHr[fTePi* -P3KdJL%b$12m(+F0h$cU@Hi&khQAi#+Q#UBd#9d5X38jPC#CL%iIT8MJc,%LihdP -B"lXC#5SM+Qc+BQa&K)jpcGBY+!66,KbhmeD1aQ[&dTbTbD4Ub3T([MD20KmL`K' --AP[bFjm6$`YIP`G-3aQRiCk8N!!ce0"D30#,aZCMcIY$IE2K$QPXXI1*r$#Dlmm -dVrK`@JpAq%0'29RKlG3D&bIfI$AVK0Rb"0G5DV[a"krQm)3Nl2V+mV()m",T"j! -!j8DY$pN4P2S8I4ZZAh6I8TU'dZ@N#*-DrFIXEI&k'2[""!%5'0qe%J6B9FV13cG -8Rdf0-ii#Um,$FU54l+mCp2$24Y&MmqhDRIXNlFUb[(I#B$Qh+*'PBfQXli,qCSm -M`!TJ99F1ck15eLf@QI(E0eN+A#ZG!BFBhBbr"AKPfY'YA"GEFkJJ[54FUB&`jP$ -hC$Pil!SArkF@-QM1P[fJ!Me)Q"DmZFNqfTFSDECk(GA)3CKD5'm0KY(AY)HJmmU -P5G$rFD`Z`S'-U1q5qZm-$F,fkNQRRZ9a$"lFSaTKikR86hQdd#N[F5B3Ba&26GG -%j6cLjGK*)a)T0$Yd130a4qXTI`BrI`5ifqk`!hLQfhZMM4Trq%$l"921q00QH9V -2&VH6L3,4Si)XZ2jlrcINL2b9d@@maDJ(1GE$lmR*)kpQf2Y'UQUpfdPa`VGZKk# -RiQF[Z$+Tf+XZ"PMKrclZQqX0c%r*#2YPcN5b+clJEi[C9MZb`#ES,0mL&*rU#*I -V#6KM-AUVHE%SLj)qJ#2CM3"9"!VCa&DCaLU*$Z9i54XT99Q5&Y3*'X@PT$@iZI) -9Qd)!TC!%!3!!2`!!Y+'MYV6(Y'%!!$@l!!##NJ#3!h)!$e(4!!0UM`!!-qJ!N!3 -2!&4ME%aTBR*KFQPPFbl2J!!!Pla069"b3eG*43%!N!q!!*!(3X(8i[Ll,+1JY&J -'afJB[4rBRPmle+j!mC!!&r@qkkE0`!2"AS94-8UC`0DdB5ZPDZ#,Zr4V%6$1%f! -RTHLph1C(aL-T3q*h8JC83H+M`C9c'q"i)Zki56+3!$S%drKB"ZDFG0NU39(fX-e -1YU1L@+U[-0C*%'8hQSNPc[85M&*cqY4'HbZiQ4P,E9mYFq1Cfre-b1QYr2SHE5P -KDQ-rM&Q-ULC"$VSYBqd),N0rQ)``+QXK'(VU"S(NRr!`!J0d-)S6bbcY1R52Nm4 -[qLN5%CL9M`P)!'KA3KU%(#lKfcQlE)`m2V8p'%k'BGVd-3r3#00IbMpUE"d"L+d -3"kJM+VK+YdY"fD5RLZpFTaZEqU%QHj8JDmAXh-8mUkrQZH$ki#'+X*83LjDQr3h -5DI6KDMhlF6d1LJm6'4dj'M`k&J'aC#rh5"kl@hdKE`3XIE)-DR`M'dfDCE-51i[ -"NmVKR8@j4PS@e6FLSChHUrKIhIqq%Vp2[(aT2m`RcTGBGfrb8&4F$c[+BeM3p$M -(!pM@apV-XR29RV*,i56!*S9RS"i4l@mj1j3qTZV#0B)[Q1E&)`,"CA"V3-I@XXb -H1LJCbIkp3Cl5PIGlArjRMRa-5h9NLeUGG@@ANBXqcNBZ3Y0VNElLa(AYLp*26(& -bMciBqFJH(&E,&FljjB3!BFqMekDIf"X9XBYE1+h56ehj&YP*25+iMpF$b!piVRc -%b[0hh8GPN6cCbCXIp61bRD4kF1LKLri-`*EfUpd6T,(%rI"(PD8,rJTS2d'3!*- -dHRpAaZIpCi3@RHP5TpbU,UCK!!+Z-($"5TK6Ur5IMJLAiRcmGJjV@(jP@mab"'d -%qLm`@B6UckMl2+mN6EZMpijUL65k#*3F6903bDUJU`YHa4PM4JX-i2h--e)q1R( -,6T-&V[fRka&B6I9AVHS-%mm(&QNCGXN6-ibIK")-8X6I1l6fK`M@Ldpldr5+'T9 -2R0a%5pCAP5-YG*KrVq5#,ZQ'YJ'ZB'"!mXCBN!!L*+aKqREM$Ik+Llj3TPG9BZE -dABqi(1k"mRp28!R64XlVT"H%0R)9KqT!5MR9b`VYfla"5pmHpQ)--VkXfMEeLKX -5*cT*DNX!&KpXek-k4"ALVK,"9eikJT2Ne!V)+Yq-eF*[SX[0BSf"+GYCDYK5H&B -cTiJp)0cpf$"jPf`!MTq@Fd`+*p&80EMX4h2JX&C#m*IkADa0(8)MX5"eqDl+J)" -Mq*(JG4kJM1r+0+l"qJHCS)-"SN31PK088Dc*!4K'kPQBJ9@%fQ-l0'l*'@jr,dC -6Ei669Lh#P`PdY'jH#qb'X%q!@dqN`)41)Mk8'Zfk-DJjhFhJUe(9!ccR(b3l!5# -[jfp#SGrU0*YF(`if9aUfTHe&LjA4)6ihU#-5CX"b[5HeUQike0&Hr56i"Hj%%&E -l!YK431Q"3ZhE,E)Rb-Up-(Nr*m&CJVZ9D9&F3"C#keR0f8IEkT5Z**fQP@F4VN* -%Ymaq*1PNElGPp#THq[f`JiD[+C3X"m11)`*XifMaQG5YplEjPUHMplY[JJ9)f9X -K4"U,Mjdp2i),heaZ(3IeDGfZhk"p)#YIX*YBf(`kRF!GVemc`DCViZ+l9EfFLZj -KNfMSZZqXRcjYDGrcDSSqM2G'YP6RXRfc'N2H#&&h,m$-!ekq9ZGVaA!"a)`@ad@ -+4N6FX4jUaIfGYRr6jB+Kr8if"N%FEZb"FmUEI(3e8C@@-&"pLYi1XX1@k6-idDm -*bYEN$J#QED6[B#VR8efZC(8T21Pk9hlY$9c+UlbfU2-Fc`d43QeD%m!CrL9QblD -F@U25%T%H!(cHhEaLa`3b!HkX$I-II2-Ze-QeXrYG[&q8jff3!%`+"p6i8j!!Y)! -ae4H,B#R"(LjiKL%6"KX-P`1Q3c0&QQ6"M4B`#02PqAZ'PR*j"KCGlDQXcX*pfm2 -5!25rKDB+d,,N"GDGRj4R`"K6EBRrRaj+aR("q$%pZRr65j6D8Hcid&l+iTNj"AR -l!DR#'V+ejc!S'J#rF!!'Ar%p2p%ljY0j%HJFR%5N53J#hF+(Smh)KKD9L6VCq&5 -[8eA%%'5k0E,9#UR3c(jMD6Bpr9m2*18jeAkclNa(d)DRF"+d)dmRS)lV,#)$8HY -%9L0[b5-"rPrrSkk+ER,LUNT91M6LP!*[35#XVKJN'Np[5l)+[!dGXK4$Z5UrL90 -'9Y$YjUP@mT%Gafjf,0hQA$8H!p5%$Q%)cbRip"JdJc1TCq"K+aGD8M5SUV**D+! -BG#-"ERZ'[,r+A%Z1RP$f$bSPRj["HE+&Fj[#r`Iq@P*90pKc+kqf$ICh2A),c6d -Za16Zl'c"Kc&ec@#LSbrh"Hb(82l+"G6(a,S[BJ0%091iYB8X8ND*Mje,@$GfC$Z -*ZA"'KAlRh@cIPd6BTPamUYFS(bE(lBU1TpATeGfp"AZla&IIF9AXVUYpKVjRdXD -+`PGdFl2@ISA8rkLReqY*E"66mY,fr6V6YR&!)cCj1baGK5Ni65dP!#N%jkbDk'X -cP8H0l05Sq-k!9KEFUB&+Ee6K3!"+#&Bc5QD0L1Q'U%r@MB8"A[GBcV029pAA09e -CPRp15Gi8q`%-,Kc%3YXT4$k5M,&PG#j0$XBSYBC#II&rHGTbRUPM54fA,4p("3i -UpiQ-[N5$pX!E@9J)8!k2LED2%Q@U2JC'E`V9"XkAdY31Y3lqeRd(5`!`#KiqAKT -iXXi+ESFrEif%BRG3J2SI4V$J3fBMH''ke5q$KDhEC+Y(9Tp$)Q(Fb1f`f)"604" -k!MDNh28k,,N`)*eEGCc-(Gl-I%RBY+T3Gc,KTJe[Iq9+YY4L$%UcFHh!`A9fPYb -[BJNA4T9hdY8$XIQY4M6"Qf9Vl"qq6P4I[kCCAb9lV6$FCZ$fN!#i$%UHK$#K&9M -F-DqbQrZ0L,,hp%HVf5B1``ffI%PG0)NPk44,G6VNe5TqA#YJHGhm9H!J-cH3!*& -I-3Qkf))Ve,YXFpDC-53Xr*0i3dL8AJHQB!mP&ASFQ9[hTc`j2)4C$m0G#bhUHTZ -*M)lMk*EEG6[UN@LCm'+A%,`3p&B8TdiJc)3l3@1@SmdEGq++1"T@SlFlN56Q*8@ -1`60,lF,BEV+BFXlM'c3Yejf4Z`p-!rG+a*68,f%`'N`q65mmR[A[j!49B+ESP") -2rGJMM*0Aa"5ehPR8m5+@)ZmBUhdRI*8&pj1hU6)+0%NVP2K#JDV'Pa!eZM))f4, -PD0"R+8hJMHM6$'$5@N16KALdIZ2"INGSpTk)ZL8ZTJ`hh50@8$2LK1$2aC@ePdp -M99Qm!*pB[ZC9pSa,Tbq90BRPd2(Zb)h!#RXKBqBcm90-kXk2Npd[4B501A%KAeV -$CT0-P)R0Yk#`$$)Q8f4rSU,l'B*,l"G(Ec'K#01#)U'!kk0k'!V-i'RZjNek&L5 -P*,K4+YYFCdjX5*mQ&,,8VR'&L,%ppe*lYRP4pkA1b,'!SZ3UQd"S+8@Jl!iUqR4 -qBX-`#EAKj9lCY6409%!3mXUM,*',4'1ad*Eb&-BEdPZReBFU4qZ'I4Baq0Y2caB -AYEGHkRQ1JV-4C$i8ZR6dp1('pXdC5M8&hCeHUhAamFKk2rSZj)IfhDV`DKGb'1j -"PF0qF[2cPJ@UE1YI@Y%hkS&&#$&#kR)@fhYDV!URT"P988"TpMr@S[3pAQ+1*$0 -kR1UCpkcR`FK5'%k@#T91"m+Dmq0("UmYhk&f$ZkV8`H,3T[YEGPGZ3JDMZ3%`#j -5pQ1-9BNS'Af*1Z83"3'l')`41TUb@-0&h#T@De!jrb52QAiMT9,!i*Q#0G@%99- -%,5'Al$AT&[a8KEH)abq[Nbk6r-M**JPjUKXTA`XYe(Z%2jTVNkG95U3Z-5ACM'E -aV"j)SZMrpZRip)H63Y-@G@89frDM3qG5B$,QEETh9T[SZmV"d+mee[BYS9KTi)J -[@`qM!2eqJZZ9)I5LN4@L3EiXrUZ)k[T'3lIJ1Nj1%@X5[@Z$diEiR)V@4QA(jMN -R+AY1h03Ca0[F`hEpFj4'r#G4M6aB3Bdp'8&I"&[RK)X&R3J90CG-4C!!2`C66pG -U'+j1+$B0(j%1jeQflN`Bp2F8GL880i'H4#jR!lSGF38miV``l)'56Mc4-k*`2%% -a3&DV$Ib0&Z$9QmN6Y)*$`qMQc8[FipGpL[ENE8Beh#NFC3(iCmEfB*iC8UP2IE! -(LYc5aP-9pd+F`QS!j3'hdJS"0"A%S33%Nfa1QS0BKk(hip(Z4rdNkUqY9ddehA& -X'q@20"lJVBK"0M`Cik1%*)MVFC0'6A6GVL6E!ZRr3c)T[pe#*-BqZi+F"F`#Q&@ -$qD&4e2)YfBH"kCBrXZ0JUef2Fi8p5P8(4E8T0-C#d[#eC(1EANVjk1cLFmU,GfY -RrY*K'"jT@1(a6L2SiUrRl8DPHJ*cJ*GdSpiAj)2N5U[-,9)X@5"IfZF)!!Xe15A -"U0j(F8SG5Z(a-I6Tf3!j4H6MIi02LALcY@G[JII1%'1Xl@#rqqK!3JFcJR[R0*D -I,EdH[F-0VY6$Ja!L)brY2`U66e-6f#RFDrlU-I8X9(#94&EeGfD#V&UpTqIM9#3 -RZQpr#3Xa,LK(L#C`9b(FFLX1P@b59'IH+FJKQY%fVZ8*95I-[ZGiir4L`4#YA'@ -0rN#%"LJ2B[T6+LT9i"!c%iqfrPh9+%M9-83)beV#CF(RN!!CrqBqTchRcHNmCTf -f"@Qi-5m+0V#Nl+C4[0ZZ9-dXCeE$"SjqZ)`Y`5AcE!Z(1ElUKKrfVbB+b`'K,3h -NUSMfT[*KYI'h[8#4Xq`1[Cc*48R"@l+jkqj2E!B4H+bIT`)9aX5eFX(kNjK4F2H -TGd5rb+ikf"SA#j66V2pa8iFP-fQ&!B[FkLHd#G)Z)GU-Jh#NNefMj1"SbFUVMe! -aCcQjL1kkKEAS,qmAc$hBr-[R#GQ&[KQ$McIG6Q8#q9h)#GV(@a2'fTN0"2UrRUK -(Ya8YhVX4",YQRqh[RX$FZY#6[4Y0`5QYMj2*T,3C9Q0E@8MPG2,EhCd5MXSe%`! -&%"D$CTqCY'hla0Z,1*!!GQS#fEiNbR)IVMjCla-GD(A)k*e-pVc6Pcr#d&9Ldc@ -E-#6m[k9UP@LB`%he'R*IGe#qc1YaBAa)R(Aeb@bbZ#lm&"FF&lC0)0-c$+fG4e[ -R2Gl**+L"q+*JmQe1G[LGkNCp9RNee2*RT8*X!b`@2%B(92!Q3)PE$)A+Lk,r9Gr -NSdBlQi8mCGVJ%S`pIP0iC,2S'4@AV6EqmNZeZe1eSiK`Br-3*+!'&-pc%fb+eQ' -(!$NP5MSb@E6i-J#K$kESC-)kdI,HFblkf$UNLrf6f3(0Z4k0cq(1r&G$c5B%iKU -Y$r&6%H%KrA#eE&Fimam%$G[KM,HAaA0a5C4i(9h0UiYii+F9iUTfCH+5aHTMT5j -*!b`fiTQJ*,jDSP+2GZE5FcfXTaK$)HfZi0Jq2!Ml1f$f*C3'F+-GQ+pS#EpbLI# -&44h"RSqD+D')@pIAf'jrbUVTbK&M#@bGb8qE5A-EU`9'"LmT-Zl4XRaF+`G"eYi -c&Vd`[k#hYGdXA[,3S"fh&J)5Jj&6$F35MpMDTX`2'Y-F6DF*cac'!b5#dhi$q+' -MC'H")GF4ARiLF2DcmmQ59D-j!hSd3T-b!,P0%ALefe,1G4em&6!GhX"lr1[-LdQ -SB2p4-fmFeY(M5c-Gq##FrVApBB2mr0L,+MY%L2KhFj9)aYLjC0jjL$d0Qll,*#C -pkQ*U&FKhp#rq&9APbI#TR+hRRN%2QBZqKrkfp,T$ddEChm-6ha(KE$hhKcMCK9d -FdDdqJCjHrfhb(6V(+[39DVR(UNKLBqh6rAVS@1B@J5&L``cYKZU+,ApikCq0('" -+X4%0@fY-fJdG[349AEh`+aqd`6D9FE8e#Ee)EVdaC@LB)mHNR[!Z#hFcUKSX(@B -b%%"p[24Y@rK1ZIkXTK)`*$NJV$,(h0,H,U'+e#ck%bfN9mrHB+)j`bQ'LKL8QP& -IBY0*NGal-J6338l)6M*#-&-8"d8X#*P,E"@5I[!(0!EarU4Q'eR'F50@I4V0AA" -IT!h2XQfH,ePZ"LE8#I2ZFFIafhUckr+JA052NGReZ(21QPLkVLN9ArM@+G-0i`& -kUfAG"'m@!XHm"5UFN!!R(3)HL*YqhMEcEh&00-G4B[rqGq6Xj`h@4mU[6(j28"k -YeBRl-@&[2"GjZ(1YG3UUm6KY'29F+(9TJ#eb4AF6l&+d5)`ES[)h62hS[!"PX-# -BHF8rZkIHe5ce@SJ%65bra3&5impQ'$DG3S(1N!$JRdBKN38iMTEcdBaV[ANG#8A -8$(&c6K"&Mbic6")3)PadNLiP*CpPC'I(6LX++%"[4")mc0B023,[&AcX2%INm'V -QfhpB%ZdI5&&"(KShjRd058$fl9Sc$#'hD",d,%%Sb*6K)ccJR1"'e$-[b`CFG$B -8CC(f*#eq6a,**BMIIE%MXDBl1P%lDAC9PGak$[0J[P'CS!ekZF*941H'RT8r'jM -peI@"a!+88XC9Kl0IRH)(MRYb!mQEH2HMB-0I+2F1f!cXDE8$%m[Nf,T6(&V)G'- -Y)5pja!$r9`-(G#E*,ja8%cYJKE$!fI3)dfX`dHJ!mXM`eh5fV1YPB)a@JFY4P@C -DU"j@Q4@[T,2EbeZXaZap"JCLKG"M4Cc%91Fd$8NiMcAQ9"14crM+%NUD(N@N+!6 -KiC!!6*9U2hGLba+,c@9r&RcP4-6p`8-HmMr!@P+preLe4J!D6Y&58CIbNXHb!$0 -iTJ10"q*HX6Bed25K'B&CN9KmV[A$,jIC9LXEE6&Y)5BqMPcpIVMC1Bp8Z#SNLi1 -$"AM[("EV(r0eKU-*L[AQ2X3bU&DD)8'f&3!0ADN),k[q'0d`1r8N+&@-[@HYS[[ -qD-5d!X'd0XC-ff(@@,0I4LZLp+rQQBG+ZNf$mRQ(rK[5)@-R0%PiPV&@JHHBL&m -0d5a,V[62J#,cfJQL&[IAV#TkTUVQFNafqCam0l@"hk+HrQE95dQ!5l50Ar4F`09 -VEV,kP$[jA"%`PP0$VXIc%CPVVQEqqa(iqU#C@Gl$kV"K@h0rPY3T8lf2SB(P'4* -&[C-''F3YRUGU-#PJQhUap3p)IYAT[Z`d,p1bc(TaMS9cZjH94YTPh+b8m&D!%1a -e4#B6fQAIrcL+Z(N9%pd!cY3AmhYY4F(qpf6Ql9mr6R4*Zlm`EE`5B#[-Mff@J[K -L3QqH!A-IYmi$8,qLE-2d4QLdM'6&c!XKKZIj!DFD*hqYhpE$9MmMffCD-QkcbZi -ZUl'[68V8a*jG9C`5mje,)X,[E&A!EMLq@cCN-)L'mIR'AJ[8"Zla+i0%Hh8I$ZQ -qJN9@3`[$@$,N-9-!kAUB*H8KNL-i"a'!Ai',LZHiCSV'hXJAR-"9k!`,P%[Eh[0 -#)k1)lhDG2hC`C@ieb)LK9Y'M2phUS1ErIbQq0e*J#I5`aD)BK8+[UEGXA2Ij(EA -SY3,QcM6JXkDl`Dk$[e0hF,)-%pXfM3TQ)&N!#Jp%%GC4(ibmE%)qXEVp1p#ASdm -H6Bj[E%i*#2-UJeN"q--)'K3UaZa-(M(SfJHd45`I+LiP3!%H40b5H'Uqa,!iN!! -Ta%-Xep250*Y2HUMmLLY8#IJHP2`*,'CYaH8YU8dP[MTcGK01MJU&FKQqLrIDh2T -'AfI19jbRJRd0H)p-K`+Fp56Mer%5`&CRfe[GA22E9GTj4U1MijYHNlU%%hIr3CT -#3BK$d$4+Y0-QI&fb#KX3Rq(YdGr@p%QI0bF2(mETr0jUi4`m-3rm*cFaG5''i1A -YG5i,VkrG4BKAK+80Ur1r4)&3LZS-6lCQC#D[D(2ih"I([Zq%h-QA(PkdVc0Liq9 -k3@Se,Jc1Pj,NEE"VU`&YY$Hj4c''I'2S`I`304ZL3Dc82P2!6EdEI@[Fe+h)4hQ -LIXM#r!PE#clf6FZqaId5N!$``TjKp+F,fZFH)&[IER2bZe*R"SG+N!$bcd)$mQ2 -rmpC@mk("PFILDGf1PQ#+KF,,MBA%#F0p*1eNip1aHeFf9%C8f0VJ0H*GI1`N)m( -R#P#Q%5aI@'d"rcGS%6F*SHl,8dl$bGl,FM4[UF,PN!$e*3%bbEbJ5j@(Z-mjqDL -TcV[lqe#54QaXfY((eDY+*F,"FM)ZN!"fIpYh+k0a[NM[l"8TbjAC6qk,)iC$hb4 -hA,6%U"dVkNlPqPaf2T'TVh#%c)c&X'm13N-h#$UEAja(Q$,ET&NmVar*lbbMA!( -[F`KC)jGZMYq"L`!r[`NZI#kMJ&`,[1f1Q!!2jcIPKNdh+l2d0&ki0l&-FGPHImH -elmSFMV39d9[#'9YlhU(HqYeeYdI*R&eR@cLQG[1l"9L'@Y%MkSU[5a-T%q`T9mM -YCZ1l'p'qT318Y`[LH5ddakK@q*lU[B34cQfG66rI"q95Xp`BmQ-Ef&8XY,1ZaF4 -Y3K[,Hc"5-[d0Zbc3bZeFllSRZLee8lC83lIlJ+hH!cdXBf6bAc4"f5FJYfeRL%1 -#r3ikdB"DfX(!UBH!Jc3H9(`B,hlaA'YQjADS[Ne$+1N6p[*babfdG(a0HqRcUH2 -4963FV!G299J(cZ*)kcUmb3fmBPGCA"*iKm3lU@b,MEj(K6lhrM3lNQ5kKZ$aIi$ -Jq4(fL&3!)NZ@A#PN%[U4A)23p1)EaKfm2#Mdqp+BD50K%X"m6NB'$9'YV&!&!@c -+TfhRkCd8C!1KHF8Y+NdP6TX4!QKBeeB0Ne$F1'TdJS68#LfRC4iK@$d1%ZGm13# -S+eEd2kQZ[`EQ`p[$3$RF@[&k,66LaIUHGBbkeir)'!LTl!CmcYY[`fmA#j[4hFj -4,AkLXam([IBpk,1[@Q5m$4Ad[V@PDm'&P*8"0%[1jJ#VMfEaPjJCFphM1S1'`!X -,[IJCV9DQiiqpa+rd0TRYAjDm!VA"mZ&9Vr4QbDGVYj4"iPA!BQGAR@A)MI')dfA -f5A3JU1025cdA-k0c8"5p!4Ycr-MSGa++Kq0RY%'NaVk'r$TlM6S!K%1@RN+RBlC -FqD@)kNTNjHfCmbG*`#D!V9$Yc%k3!"8N"4EGUj0blNUAi*Zb[D1Pb&#d!K4rRHT -`m)N+3#)Y0Nm1BBmM!39U+NlpXbCHJ6GQcca(FTImYDhIfaYPrqp,%AF#!1""Jc0 -X&+FiMNiKKC(4BG`pC+&KXT!!#m$@F$2GLh!fM*2+#-mTB''A5!PM,2E,l(BRecE -#+NaNRZ@kfT&rYAe#e$DQEFLH(I'Y6,4N%kRSM+rN[GRZP4#AfY(4$$aIY&81dPe -+ZKGh4Dp'PR"2)km4&jS*hBjm3A5a@pD`Pa&rA(Zp$hXTq%`Bk2-0eRG&i+Z6&$M -cTI,GekJC0A64%4jC0-Q6TCFmAa2V8#&@rXm(YL)Jd%85k1`15F'$LR,HhUK(lRl -)[l5i*hZPEdML(G%k,H0'!`&),F5I0[Aa3+6Uj%IT!XQ$0q)MA2pUR*33ENJVQri -Q9RI`5`d[P#hHCPPELKaFZPjr(%$L,R',pPENcTCf3P8D56LF9SYHHDMk!pRq$(T -)NhU6lLIB48Dm$I)4dP8",!#Y2kcQd2cFBkc%G2DGh6X$GmfJ!DN1*SQ0*+5e,#H -jANYC@RFZ%EqQ2!)j%Q)qJMB-!D$I)Q9,4Lp99r$T95S*r0*HI,lJTaPThB5*DjX -Q*fpAkALGC0IT5F'D('-)RMG5S5X'aPB%EVa'JV!!&DE#!3TbB0TZU,YaiJjZULL -T`fJfV(YUb+2$8hqA'pZ9cl5-ICdM&"GeGi*`C*NTUB"T3HU(j"XINdHmq3LTC&p -d"b!"2p8GJE+2Uh*V1V@F&c0RNVIb,(@XbhIX@$M",kf#,mYIRND%a@V#er0b@I2 -`$iV+QZ!8M8R$aJV5b@-QMf1qTEr02&1#rfGH-Zr+p6eJ0ScH2Y6FEGr%PHV8-cX -MaHHPIE@NjrCQKZU5$!*2bL$'02M$ieS#@-1HP%0I6RP!m09iT3+*+SpVXDr5C0d -UIK55#(p!Ti1H[Me%'-(2)P"Dl,k1`Tr28#3X$R@0Ihr5(8S3E+aAdM2)#Zl1mA! --YZ$Q8'UEaR$Vr@''Y3aT&S+CpDJ4[Y[mRFZ6bk*Qd&**f%-j0q8T6@95G(A&54e -Jl,3DY+A,eJJaRf$1kZ9H0ffNi$Q+#)1DXShfA4R$I1qZ)[r8j4BHAXdM0d$$j*b -5EMZShcfL#,'hP9TiZrTr4%R#0c#S6D+,6RM'NBpeXS"SBZ'6mE8DleSS,1m94Vi -B[+0F6dc,5F6Ammb1DJ$mVi*i(cR-Uc86ajbc40IMKp(r+r@8h(IrTTm#Y9Jme!D -mimbL$kT,Fl1j0S)rP3Gr1&mMU@1V(c+bVEr(E993*)brMd+MQ!68R!VJPlML2[h -XB)aK$N0K3hjVYq0GC)D8%K&Y1kbGZim$i28q6DkUG'kGN!!Qr%Z+`&$q%5((!Cm -2[!X9I1I2*MilY1P6GTR,Nf0rSd*Zl`SLQ&K'cDh,Ydia!EVLZ["p8KZ$FT,(RGI -A9!i2arpLe1D%NJEpVCJ2`*N!I3cd$&8"8*Cb(f+%E(GjR"#***5J[Q&U!%Z,@mR -kU&eM'8-ij8Q3!0dlV9#baDbf&bS"kSPC2LID+,$UHeV[jDU8V!!e%cI@5Erje)i -34kp4NBE5![#GZK%EqN'ARpTI2hIfQPa6NXe0V6h-CI6*Y*(1C,qi2hjG&DD+YNE -SP"P%9XJYrR%P2jR)#FjkVrq4+UH3!,d(4[[Pc$J`VN-QX+kjAm)L2rYHAq*HmfH -IL5IAl[UchSYA9X@5SrH#1B$HZA,*YTm6[4i!chP4P[FbG"dr`[ZMBl8RJa%,lXe -3jiXak64r,P#UCJZe88EMbH!K5bQ@E-MP!(3f3)M4X5e)lJdqYS)"fA#KleZ#+B" -41TZRb`"CcDjE)#PDdeLZMBqa4PrREI%S48DM1ZQ,-aM'SbMCak"MNIMAPq+ZeZ" -*L40S$,(bEQ52$#R4QSleQeJD3&G+6KIrKKLZrNci1T!!+M+YiqTHc8Bame[0(3) -'e,"cpDae-[5Pj*)*%CR!3qN&'*8,J[kTQ9kj9GGkb0a[JdFp()MZ650JSN%h3ac -YS&(K,BKM$QSH4FFJY+m$Q"D'C[k(TeLrmUUm$5*c"b)YLQ*3*2JZ3p6)X`jGelM -Z'`q8aDUbGG*QSRRhCi8p"m5IV*5rDPlK,Emc`TTJN!$69PD%cRXA%3qL@P#E4`% -@d[FPJ(LXj8Var-Cc`FahmIp"rRD,R'f#I&I+rP@PL*!!ELcEc%Sa2kIP!!!MQQm -4@HpU*V**$6h630I-ArB`m5%8fX(SlQ)KDA@bUXQ3!0&J39LDb6d*Ak(BdB"3J#h -`0f,b-%XppMJ3Mi-`bm"9B!"LEhFaHir`rTK5a0e)c9Ul93XcC`$CLElkMe"K62B -&MPGf[SSC)PI5,5LjMa58b5+C%G3##S1E+L$3&d4Qk$kJVcT![T[Gb1Pe[DSaNlK -QJh8p-I!bG0MpUb!+XBSRAVS(j#SUSqL(j4RC(E&j*B8U+i'Y*FL&pZKJHq0Zbf- -2j-h@5FJ8[E,mK0qY9S5Y&b1#-jpm`V'&V1K!@9)DUc$Z%DG5Xpre6%hKZ,9@GUr -T9@iM@Xf0V4ZThIZFRA4MVB*M5(H"S)1iXcJm%CXAE(T[hiJlLKbbCXIM!C!!&"` -&FbK8*59qNR&%V3EXEANirdBK02rcREr'(e@c+A1@AT*LU'!@@AUG3(Ji1(JH2Fp -'1CpZK"[X8CR1d@&8!m6S&jmP`AL-H!4`fdLNYcY#PM&lf9D8`,RmIrcF4T,92XH -R0B$rNBQL'NDmRY#mfPkDLc9hll8HP4M1XAZ[L1mDc$L*LbjJfDr(1k"$9PF5H4V -4*+p33pE(e3bTUK(TTc0&d$"'58K'*AD4(fU"UbI%P#IcXf6mmpplQZI1p$CAl1$ -FeEI&p,[d9r[V$&YJN!"c[BR@MSf86VjJjSL%p1B2kHk9(,jC4YE`X(H2NC5"0C( -3cJ8XDqhm4UmUjpZdJ%9@&Rff2dhT--)N6aE*p+rYhpPJ3*9P+hFB[c&NYEEhrIK -+!2R[LTmc'KphXQH#KIK[e)b'4P0G&EV6Q*lh(j86Bk#j#(aac(EA)%S*V4mm2r1 -I!0m5G#VJSa"Aq*+baC*HqT!!+3iT$Y6UAMfc&@'@D33+"X8kq(BqH+8afcrN4KE -68[#aKaG(PqMHpiddePhD1)lp[hf*[Cr#9DP!`p)`,&G#,TTbKerFFTQ))ANAY'p -pLR-H(rSKZS!1JiYF4'kG`b0CaK&i)4D6I$[34!%eZc&mF!Jj(A,*HBRRBHZS[jQ -*k"0UT"(KP+SN#9Y+r(@E"$#U2m,('Ec(9"PD9dQb,m`k4FM4+akqb*Zq3M1dP+! -!TYe+Kf9Fh-&$U[fDNb9$ii3q%pc@L4Y0kS([ZQ3dGc!Gp3'TU&#K!jP5mh%DKb4 -rFJ1Ej%!UKMNBb56RamXJjRJHSHK0LDHM"6dK$V!Q&(F'-hN8TLP-4`mfcq-[ij9 -H%L@G)39*r&qL0@Z&Y*NXN!!MUI5CE-mFFFPUFYj0qe6hPfT!Mm%4ZfD-[Pe`C"V -i#PQKX2I$FJ'H04"rSC5'@DiAG0032[r2Y2IRhdFAFMCCYkd!86cH*MMMH!'rM%M -rF(NqS0SjkHG-QX$f-a*a10X+[))aKTCSRJXBEX)%b&)Uhf5IhV#2k"EHM)URbr% -($GZM%5U,B*2UETY@%ZIEkpTf(rV3"-QA(M"0p#2(6H4M#Ke)maGajc,U,RrcbQr -`R+li[HEm5cf,*r)'Vk8BQf,3'PhfrHc3UC[UHR8H-B6miP-F-TTF1A)0rh&,GK0 -%f!3c(H(-$1i$1'ZZaP2%2CBUldr@e0-afD-[13[5Bk@3!+mQ%V)L1Xb(16r$ddJ -'UVIiPCqh*&Ak)b3l,C`r(S&lBC)QrQ!!S-`ppB-c[FiA4S0XaKGM5hqT1)V'IX1 -6d-3Fe[abXTE-Sj+m1fJk**1G9J-bZ-"M&hN)bMjF9fDqN@-5$h@e6FE3!mACXRr -ie5ZcE$l''@[Zj"LPqHd*FB8LBjbiJNNDN5Ye5T!!aQ9f9D55`TU"fRFGG!Gfj9c -I-d)A1f)qQ`jp2X$US4-UML1(BX-`8(-a)Y66m*-j#002M)UUDN&CYE(2Y8fBSbK -lMYURSR#e93#J)+P48-jj6$UTiSLYI4%[3XPjb9B#XYFSNdiZTN6!!++)GDHKM#h -0bViKlp8"H$PKf"%$U-[dMhrb4eY&l'TN,!r%QTh`qFLTCcIMZ#)Ih(8p%ASYqMQ -6`fAeF`6+EDbR-D8!qSDDUQU8[p,")MH![38q(ZTkKj-PKJ$jV)#'*)*1i!h4Fqf -#lEARaV12&PD,cS$Fq+4!!JB,'DDQ+H4FBGH'4MQ`'-NQ#)a&I"a'21&%ie9J5-S -+%[MahQ($!pZ'rek@%6IY1@dLia4DS4mII+Fmf1pGkfpDJJiGHGi3iZD5fXK@fm3 -6!paD8*mIA"TqVIJ5([-pBB+TUqhq2UhX3(qdCC&&HjfN,C6f62(fb!eJV2Ya8(@ -ADf(P"rUkH#*20M,AIb8L2r*p*afXE%Sl-DU&rP5NrGJ+cAf0`0I-R@)PVEc3cT& -h-V*c"bf[M"@ENJ`h2rXr!"M!l4JEHM)K'9[r(%XS+%li2NFdG[@V@p$bM"TS1b" -"Hq4[mbUdC*HK#!Rfc3&Z1G)*iM6q4Tfa4`kIBDe%lciQZ-V&#TbQC,M1BBC)C,- -k1KL4e5jLN!$61LA%*DqjL#1r+bAa*lN[JkeQ5V&1%c-%XiGI4'd*ILIae0#Yh8Z -phq)m%-!HEQS6eQR4`i-Y,P6dd)M4Ji$X(r-3N!$PMh#P6D3El,pFASLCT&DQ00H -YMII"T"-R1FD@Y@pT6@UYT"Bpq&GC-YH(T`Dm$UB'Cr,-ZjLXV3,R0)%EZHT+m3c -IiRK*1#&TT%VkJN$FJpVUP%BfQLEP+M(UekFEU4cTDZk-R#ChT3[4,,6"RLMe(J) -5p*bAmeVKjVZMTJ@[-f4CAcdaJmI)r54pDHZ10D0!F&d(VMPG[M0j3J$4k@))Y@` -k1K&$kN4#QAT-kVY2`-D41e6@FG-4J-hrTQR'44B'p+mhYeBrLSPDQFcYE1bf1T' -a,l,632j9&%"MY5rQkhcZ*DA6FIaA!AcerL@12bK9'EE`9PIe*Thc84!lUI$hKeJ -@b8!Fr6`(L+EpT50`kblFJP!S1HkbeIlc5)i`DjJLLGJr*CAiFmCMk9C!%PMc-Z' -,*("j&XNC4DIFrA(!!UpG,FPa''!%iM3LreS!F[fp)Ue"CMqYJYL&)2Sr(HCa+r$ -m'05QYA0EEP@Gela[jKPfAm3(QH6iqKp2Rq)@V-4mIT(fT$QRCf-ciMdE#44)!re -SD[[1IXeD,(,T)H0$(GMi#36PmG9k@5J($Gje(UrBUfD![bf6LS[I*`XYe95bFj* -bF@!d9T!!&@+G,f`RFaS#QbleLE!k(5Xe&-m9$2f)2RC@%HIGHKBQjeF%PI4V1%( -TPiHG+VX8#l'lij1h`@0`AHllQ'jE*6)P&ib"14b+YL4jP)(R@C@5Dp%MQhM1FXA -fXN1)hbF3#A4j[BZ6r,3PA,Q`(f9GRQKMG)jh*!@qSH3+0p&9S!L"&kD2'a(@&AC -8VP-X$RGjZe@8'Dp[HEb9BCU5iY8p48K&XK14r4H3!,qKjIdTYNCF6jS!h5iN2Nj -[ej!!hU"6[HGU[r`@b8ca9("Z,ikB!*Ld!GE4%U1&RP,dUB'lbPGdS1d-S)Lq9eE -@qS1LH&mpkPU&#,E2[ZSNT%@hCNUTCH42[HBGI$jFK&"2D"@X(f`183C!8kL*LX$ -,JM(#l"6dhhKVlhh3)(X"%Bc01%)#[FrSD4@-cip!r06`H%[2V5Rm1pmmhr,aF'j -)difVa8(V0%hPR*!!#,D!5i-Z86q%L1D$-3Ja1d8ZS2bj'()!q8NcmHP%[@RhaTP -Y[UQJNBDF6,QiP&`XU"$c8H23-,G#aME4BYL`,VjSQ#T)(U%*6,)XYG(SU#,$T[2 -2`bMjMPX5f,KfbD[NB3j-KLYF+"j00iYiqGGG%IdYb#9M5V358c(5XKi!T%%EG36 -Q"ANh2miSGYa)U2bJX'0D8MRP'Ej&#`hP3CSZ`j%Y2D$1dLpLA3#8NQ`p*R(fUTi -RdPD3!%#13ZNU'H5QlDA`lBqQ`#j5[DqG!G,N'MeDGI!G*2q1I,0YP*m8b)CI*!k -H-9J#kN9[rmYBKKre)JDC!E-Caelr%QP&DU2C5k,L-h+dQDJAdqjZ+Ya@Dq&9YU$ -#A[+&+15kkr-Q+6h22bSlYG@[&@1c`,`M,pX")PbVQr#@T2h$)Ld+pXUmZ8#+X&5 -%DFPqdlURHAAqqZ+iT-9d8$!JlFD"V`G1K2R1%HCYQ+,b&G6r4a3!0H3FG(MLUDF -(HiT0hN%adBAZ6b-QJk85KSQHYH2LHmrC'1iDjVkGJmhKG+f9ERQ[2`+,c51QX9- -"LK!XC"%Ra$4+RZKIN!!IA9i%m2"SNkp[Q%mQ*2BJKV(C'Tk4[f#d65fKX,CLNI8 -Sm40cFN%GM28DPG'Ydd*eGM[r6[DeTPNeF-&TB'`D%D1V[XGd`9a(TH+!S%Vj-X& -ri-lkZ%+Xcf,J[qbTKp9C'C0#%b9%DhGD)9b&DZX2Q"59I&Xa"X@VCDiXZEFU!,2 -Zl9#0PZ1b!cRRBDr@Vb`T@S*VRq*K80mYf[IEGeLHVLLD!)%b+4BRk!TeB5EZ*8# -FNC!!5DdHYQNZHa+ABP2[-q0mF44D@f9aH2Np+%Bp8!E9H'U,6r+4P#%[0Qh33+4 -'G*a``"'Y0$-X1R4LJbq2[HQTkj,f(rlcCNfY0A@m!3Y65hCkX1JK3iS-Vq@ad3Z -&AbU&pa2l-C2a8pFZk-qKF5HKN!"lpLQL&09TPT1I#GDCe&l$bG[jHa-QhPYfdRq -Tc)UX3VUYqF$cpL3DdeV@T*8EVZJB#*Y4Skjf%!DTQ1RZqi+q+VbH+9VE)`cf)@J -$a`Ca295a+$4Ve#@XQl$D"0L4bF,PQVI2(m4Y(X0l92LH@,'*i2@1Y1Z2XAH6&IU -Nki)+5K%%#`@p`'@J@pJSI[r!92@`H"iNa&T&h+ecT,dBD&dRNSHrR&&REJ1A8f# -e$S+rFGMH9+[ed@eckCaN-NC!I4lfhENA'f!Lbm"[,#h+,[cD4YVUDb'KA%T3q$" -lNlhF`'STEidFAq8f4rTBhQ2Y01HjjVV4fm`0HKfD%18qp[C'L&RcHqIF1J3H9[m -f2rXl,CBRHK8T*2k2NSB4m#$k2SCKINSq1B*`reEYYpdb$93p-$Vc$rdNB&I8VA" -%[0[T)#pYhYZRJGA*qKM&80@29YJTVeYK#L1S$@MZM&H&*5j1QF9RM!(!@d4kKi` -*#iUYNV)@9-Jj8##ULUHb[r'kG2fA)@ieKk24Ar&LF'jpfL`ZB-Brq1U5iq1bKDT -IpiJBCEc@$NaQ@f2D'"#b+-8i(FmZ[CFa!$!HVI#,mQSam,ImZZ**2S%@5cj2XXN -+9-9F`A!l3M(Bj&f53kcKIk@CMpPf#FGX`dc'1DNJDC(Re+rV@#b8UJL(3cY(Q96 -%aARcT1Q[+6`$Q%RFqD*A+i3R!DF"6JdJRHjHR&@((&hIh@UDS-dBdc3B&I&Mjj5 -A,'Vd-MZcVbJX-VUIFkBPfH#U1acKb-XlC%kC2(@4VFL%(UA6RA,N*9"L@!qSl3@ -$b`2E13RIP4Er5*,"!"A@*j3D$(G(LEJe&rjP5''H+I1rh$HD44`Bd'A9"hh"4L9 -JQ!2[NQp!Jh,NiVbGPJF[q41MbRQC2$Y9GAJ*PQ#ld1INkcR@d(6r`L8$M,4Aq4d -*C(HcB'@KlZABX'ibhl[c5#CR[A0F&B$2HlXSj(%''B&L4Yr%#pd"#l))Y)9D`Kc -1YACrC`0*KU901-9Ib#B'KhAhbXNll+#9M@K&kdS9U+B*K3)Q`+6AVX[kKV)jUd& -ffP"KQMM+-a`MjE@F,*JN`r0VZ1D5D2-%4K@TmFbVd3pTj9Nq1ZLH@8JaJ!@a4%8 -jP[q3!%j)bTMLLCeQi8UR@!HpCaiYCR5LmT3YTV[48G1j+FXZf@0X0de9&Yam!Cj -ED(ES%j6pCPc,Jr4@4('rUi3Y8lpA8R+X31'b"`'q!0liH2N6N!"Q3l"Q&ICkq"( -!fMH[B4'KZVE"U!pG2X9hiB`A6)!Nd(Z-FQa4eUZY"NGjr)hB'4b4[m&c--3jJLN -&"&(#fabR-9k8QNcTi"&GpfVY2kbU4mAm(8!FEMGdN!#0R-iE@S``NJm`c*(beKD -&CkdjGY&V(5K,MQ-$J5Y``'3+TEEaAHk6*k*FVh$kj[`D"XiNJ9,)(p)&2-emq0T -Iad8f"%MG"ZL'`GU"ahD064f,-`f9b`N6B6*bI1#"%RXKVGl'V@94GrC*M*-JKdQ -&EEY(jAFPifB8iQEZ5T`9aYHL'Y%+q$`'q2-#-Qk'DEXA4Hm[r*8H6P$VYPG3*+Z -&-fFeX-jDTpVM2jH&c0GVhS@Yi[Dlik[V3B&ep@BIU5JErTMB4`!J8J6k,I!kqcQ -FV2JlP$1iJ,6BGT+41S2"S!hLaC!!,c)GGdI*+P(H-Zr2FMQcJ"VdK-ck45"@V[l -d5Q@`"Lek6(#c6JV&KM&E9G93-cDhA[4E0APMTU$m%@NiFG("mSZq[T1F[jeUbq% -q`%Jh02Ca3QQNSiSHEMffJ"bM!89*GASkp'lPh6Ic`Um6J1cch9VlG@D&0,T+QdR -#AYc&Q+#-5+49hEB5IZAmJ9flLqlDKB`MPqVZPir4TG`P2N#eSTF)0qCUmIfeL2U -q2%dSkQ"(!dIP@IJJlidb8h!(%)edHb9N-ZjA!dqJN!",'RhN"&G"PM'8q5*Z,HN -eFiCLIQ2rR!ded#5V@eqUD96f1UGRV*RREZ`A!X#PN!3"!!!m!!#dSF5TY-Hd@!! -!6NF!!+QB!*!$FJ!-ljF!!V*0!!!QTJ#3"!m!9'0X8fKPE'ac,Xq!!!#(`de08(* -$9dP&!3$rN!3!N!U!!*!(3X(8e6'MS9UQ,qMq(Ic5F[,,iVKcE9IiKE054!XmHpr -rE-T+GQ438MaVIL$%'i9qM)JeQMh80fq54mPjdPN'Al[3X@c6ISZ8"rDEQ#aD-5p -GF"Er!GXThhkkG@`E93j41J4'aCYQ0e*j'P+a%)9*rZTIVj[rC[GKpU1R&3AB&PL -N9([LfI4M0mIYhpIc*TTJYdbcJHfkaeaD`ASBfGCEH(+0'XD*m5#+TlKU@#XJ3h, -hhCRS@FpBj,8*TG@dk3Z"hd*rNfF#dh6mDVhK@h,c%N`1KrYK3h1ELE1(c2[ICYT -XHj2AeR-*QFVI02!H(SiZ%6i`IL)c+S20#p+9f2Mq&lmSfl5q(Z@TD8qm%RNC)DY -Rc,4%&rlZ1&$1#hp8$U-f"3e9)#!1e'J"R1[P'@L!Jd(T3M`KGCC&,QCKGN&@L'` -IdHL14cHVqaE$%fed)3'KL6$I4SEST09i-%pp1G1BNB6!+,hCe8!p#r2,5V'(3FJ -BLD4dRZQh)ca'[fP-!!4Bpb8elpFME,G&Gk9G#9$NPhBUl,Ze!['(CV$URSc-f`X -UGRHc9dS5lNMXHJYfDbba+Gq3!,)5pa6(!"J4HJ#S0ZLArd0!DSXLRE!rC1B@+&J -1fD1!Z1B'-[AKNp%cRdj*KTN)6eY3SR)"5`Z'%&bfTZGIXaK,0&JRILLZ*dA%Lm- -kZJcEjEHQc!S6'PB&VZ'IRV9V8EB%ZXk6S&RMJ&DU4GB29I$N&Y`AKi0(icd"+E0 -C"SjpL*r45XYL0Q&4Re5J*$BQ&UcDD[3hGV`qLJ&qVbQfZqM-(ijD%J#AHMTDhM* -1YK9'`4ehY&r4a&+Y2FS(3bX94JKIh'hjlXZ*j*2N,l!8#!&2PMribX#E4DZTP[- -+26*(rB[-ER4`$m&LAAMD2RHF1c5bcbCZCkV#LJaC3`8rJ`'Ed8X0EC06C&Ibedk -&h$K"Fe2AA'mEa9j,rXhqkBe&Xi+F0YLC!aJGBil8d$X-fZX&9Qikek%jpK1hR9F -XSZmJNF&Pa9M0l6-,'2@*Rpl#q6SC#lG+"MEkQ#+[Sk@$i84I6FGR%5i1kl5Z,jZ -eaa91ErjSdY&CV$im%*!!hKR(me`pCUlRTdiNrda-+DfBNJKHFFBSc5[A"%Zj8VJ -8``&qfL`X[q#"d"j&26TbmB0E'*e0-rJ,,18E#a[Eple3%'3'$BV1h'pqD48aCc9 -Ka6P'X4IHdFe'lId!48LjpKN4*m#B(L4))d0p`J&K5K)IJU(T+#a#KZBm6i"q4-a -4,Q3A2B2&DE19&(P9&NKAP-5p23c+BK"`R2+[HmV",LIrK'hk,bU@qLDPXCZ(TZS -LX0`RJ*JUEC(&dX$SllY'kh-3H-JCjK#)2`Jb$$6pUNIF3AL3!*jC$S90&r5(jdH -AJMk%PF(Fid-a4eAX`ALQa-L1#Vq5@8BGM0#TGqVYQEG&K+NTEeq-!0Yi6j-m6qe -1H4K[Ja!UJ$CIrM'(EHmD%'aDqB@DGlhkEPCiJ-"-6h"eSaIJSN"!9p&Q6,McaGp -hdY[-GHG15T4L%r08Tmm#*c6!*1`!9rJeh&j`hN0MPp%2TJiG8UqCp8@NYCSSa"d -8HqGZj(H$9%deTYD51i2fVBmm+b(D`YBPRA`SicGif'JjShC@RHI60D!`eITp8@* -k'a(0rJ9J,G4bAeJSV$dUrT0EJ(ZS3@jpr9MR$qp'US42QVB1SiC"Cd'0'&aC3rB -jjX-CI9SD+GB)ij!!G6!Sd+JD+$d+5hUlZ"f`GMJ[C)&jSQhbTZDZm@$`-2lj3f4 -`8iDVmeT!pM`XdIe-`5+a26fl[ZK[`c-ljlPV`TQ69@LGB`Kila%)YCbHQCH4L,2 -SiQr')P*J%3a`bRV9+ek,Yek-8M`(cplreH#PQkVT[Fk&dkLCp"`Ek&$2AFS04[6 -B4!PMh&TQq0RBAc'a8NPI!l@pmI!eVpE'Gff"Xa&$BX#l,%hp85YIek$6j[)V+N4 -pmbK%qj-QeH!`pJ2ii6*jQqeaD"@4F#"H)@&N+-aLp5fRb)HXKKc"E,C,*54QY)6 -(5P)S[*SBX'h#mU,2e51qN!$)Fd5M-c!h*VMK(rF%Kh55S1Gr3$"Ze@Q'HGZEEL- -kKi4'%L-4LZdqQlp-bf8,L1HQIYrpA"EI0mYP20fEVmZEKP4dkr"rL39Ra([#,4` -0NE3`$##CkcHFr1Zl%3QM,2%j0Q,'XRS[lTRhIpUc638`N['`Yl@RQ&#GMF*GRl, -C4h#BXC91A5ejS(DK-bJldf$9kqj2TRjb2GG&KcA,@#&+DdDD!fKR"`BiaGCL9jk -[maHKjk*VJBdK85i3'5!0Td4kU&#J$ppETeRmN3LiiBY1m`@DpAPYZYimYbm%IU' -8@F*j1'6QTECe,-3jGH`#l-d*,9"a$GU"`4`C)af9Q!UM@1D&BNAa8#2jqJC#dd@ -h!p6p*,edVp"!*8Bmk2Y$bQRLTIdZ12jm@jT4eGM5[ML(6eUP0"YbLZcRFk`e@A0 -PFbGAb4ZM3!h&rUDZXa$[BeUAk32)TeCCSq1j$5(f6(,J'rNE!h[mTaiTcb(lfI@ -YDq(3RJi`",[+HBP10#K-80)dmIlP"jrrLX4[B!h&QA4&V`J)62[Q)*SjBerhcEf -kB'8)#*r18`fI@L&b`*d6)d'FNikqQlcR5jpb`B*l3dQZl(+,LBLVB*`[Pd`&E@% -h8*d-*k5$RalaHQfeeF'MAeQKAHA%A#q9RH`J,P0S38CQ0f`6SQ19Ef1qi!e3e5C -"1r,CTP0l%RZiZHUY-B4ZLpaFGk3f29dmb`03l$)HNFU3!*@ThZX&TbB2D'1iL&2 -,UV+LfPYD0''1CG6b#5bq3&`HIU"I5q@%53*%e@e(m09&YLlT3JDa+T6Rq%ZXIk, -5D$UDTP*2daYTMfbSBdr%f[E4i9m*[18R@0KpAcNpaDH54`EL*DNFZ4m[BBjF(i# -`3ddrETd9X&4&%q`+rirJhQ![(HH0IcT!l`$U&cFMED"4[M9Jc'-ar9l%FbYQAii -lkeNL!!1*'`kVj,`4+EfAVfkprNSXN@6#ja6R+MCF@26HU$ceRQ"C2&HFprVHI@% -EbHfE(EpcV2PL4"D&MrXi#pc'iXZ$ifr0pXRADkpZIVA'G)@HN!$K&6@2NM-@`Sd -"pNAI15*D*+kTD651iLQ6T0bj@1H`JUPU88"DTbGP*Nfp*'&&[T*RSH-kT9[D9El -'ISA@A01Ph6-c4-3!X3jDrAN69ClYrKGc6ACL1R'811@+3i5pqMHQBGa-I#ZpQZQ --6j4qDViYI#Ui#aq)-LSiEeL1L[$!,e"'S9%`6Tc3JIZ8ML3$DUkaRV'0rG5DTh3 -K@i%KKd9$RH#rh,h)cbmAI+BN1'@mbm2AACXk911m$,BlU9#U#R*F!!IEj[i3AS% -2TP3-dZ"r%[lhDGYCp52!q0'ejPkRF-N[T0-ZPPZ95--YFTQ#BNAeli2fD`Y8,H5 -GKTVJl"M5Y!pS-5U$-Nj'A*8NK3iQ46TlMb#0p,hJq!ZC`$"b%`bA9#KD"mS-ek" -GYKf[f**jb184L%!,-52j)2(EH)(m3L@3!(Hh*cb2*J$j&#Jii-IHp,MjpDX1B4$ -Km%EGe-fcb8fRdCp2hYbPM'0cIlT28MY!40jMqa!f'-ZRV9EX8(#!4T)41r5Hqk0 -XUdrkFTq8p2&J9B%P$fSV8CM$%q,MS6d*r60Y0`qLECfmkhS8AZYPP`HZ[8I!Xf0 -UBP,cJ6-C%Bkr@Y)'@(mi-QZkFV(L"%84cFPe1fkcceA%X-6a[8b$%UleZfSh0Pa -IPiS"CIm*r8)+%FmbpUTUihp"qRNQhiKQ3h,!#CkqYC&LCZ,RfKhA5&dCrr+I6!V -D&CU6`Yd4*`k1@[SiJa,dXCErfIS`h&FpT$56ad,C$-B`b53,p)[6hMkR@bA3&dB -cYh(Y)pXpp!h%`k*j"JBi%@[0`j0`d-9Tfa@N2$rD05&U9h-V,k0ZklQ"l&SiY+Q -d*miS,K(PUI*#E!M9b6c$NP@U'Bl!QYii$MK-#A%@HBdm6ekG!bB$qf&$E3,9@c8 -,"-4fMiY%@9"'pST%QT!!8jl*@dX)JEKLf&Fp+*51)&J-RXr*3)`A2a0`qHqJM!p -DJ%IeQ"03[bqj%[LD6m-G!2kq0b",5r)*Ch`Fk![iCG0j"5YLYZ,J,i9"V(G&c!I -K"KdUc%+2l+-Am0flZ59$`S+Y`[hahNfEI+JPE&2`$BER'ViBT'%,edHlehk,Be- -[9#2G1pc%RfQeNK##FHT*$56,G@`UK@ISPF`"fZ3q[JLUpTSqUIT@AD%NVJHe!9S -bS'cjaZ@5)`+ZkM5e%Q"jMIRZb0`$kX"!T34F!1EdfI$RiBlD!(4$YG%RRP!AdaG -L,T!!L$UD0RGr2h*c-C0Vb@04mIhQ![,!@)bi8EQB!&5L-Cr`2d+6*DpVb3iLZ[B -0IFfkM8P%ka6@TE6PJ88!FTGV9Ni!Q$CV(VBlCRB$1('TbEpHA)mF@8dBI3V%YYp -NURD[AH)8G'T+CJ4bF"(f,G6P*b[cbr8&+pdH`S`C#KPSaK"RhG24(DE[3c+$Gk0 -JhbjmY82QGSMU#Hlbd%r-'V9"6h214BZb-$4ffdqd(G9@e#kF@!CQQ"[0T)rE38K -`*bAD@e[B9MFkfiHY)TVj4JPrC`p`11FZFQ%U)kMP[2B8N8XjJJ,)cj95!lkAdGZ --#DplA'Y"Vajq%A)Pcp!%ZS,D!kF$A5eX%r'Q&Jaq%m4E2GG0Y@*K`dQVNI"1kX9 -EiFHR9CJd*T@0QrpJ1T(BEZ2EdGBQD+qA$b2UPQ[KaZU&Ih$VqUpUTb!qK&Iq[J' -VKQ*Tf39NM6`VpIC2@U#)`#"4UdV2Zd,0-PH-e45'"4(9(0S4@L)SY9GQ%2UrcHJ -Z%Rm&rD)@h'h+1h$'QQl1SbT1T(Z3!%bGeedr0G,ac5r9TiaFrbHXXRUV5h1XR0E -JU)iJ66#,EPM8!1bf[`3@'TY-4V[U,&SlD'1m8mlSaA5kh89kTIUcAC(#lLH[D8# -lZ!5)3'6S&,HjG3$'*(hHiK"0H)6erb["$JY1V@aI5Zl'*h0TJET1'S1'['ijL9h -FQ2eHXaLhK1GcqlcIb!#8*KijeKS1FDHHRbGc&QMNY3&ZN!$4P6IijGUaQA#$#I) -ehb*`UlX!,d@"Z(381`hKCD[Im6p@-qi)iNmZ(lmr'G`Li'%Be#l26%hQ[XY0a)S -1qccm2QSDXf`1RY*-I%@Aj(BB`"Bf+I5@I"k4"%PJa8c5&-p&),G!JHFI5k-Ce3k -Q$N4X*1Ze$l38(2kEQh')m&3HB2LmMNa`5U&cC+2brRS1kJd+`M0DFRAQi)jJ2q- -l4`dR$$J'G,3JLRk3!*,ir9-5Ym-RMcLIVeZamH2"H8)AD8IrL$3"rK@`V%9Ck1k -pbQV+hGlQ!iIj4EC@LeLMQh+6)N2jl86Ad3,&ddU%a#ejrXRhJ44-j)HEpY!YF46 -VB$ZU3fXQ5rq#[0MRT%PBA*d`FGj911G)*#KjXkc9cXP%#5RrM8B0f`NdYpU2k8F -erK[r#%KCEY(F`pS(Z2dH`iIBG*h,aU6cR5a,T3I`cKI8E)N-"D+&9N"i-MkCHP+ -aQ0"(A'5il3R"he(KLGGRB8Q(fR!PF)N9d8PRrQI)jr"`K+5HYBpNkr`NU8"NNP% -*V(NQZ'TC-&mNiC,29h*QhFD&5dLYTkHqCBmD$p"bqi$MT#3ejmiSjmlB&qJTrj3 -Pk013!"D[hrL*+,R2JI0NR4H0`fT`cJ"D-pieRq$4R1%PYcEJE8[e'I2,Ndl@$M' -i&FCC1YK&Jk3eX4+hE+Y*V&q&+jZ@NVZiKK*@QkB!64$1q1[&er6ZHI'5XY-f)dD -3!,Km*+lUAd#jMPblFZ@ebK-cV8D'!"'1dI&6M),A#2d"(5Y8'%I)S'Z'Aid0RcT -XZHYP8bchLe,lAN*MEJGeZA,+NGrakB*4b*@$bp2Q[0"re3YGIMj)(S5GK"1UAl` -BjFET,eH3!&%8CCF-jFLk9IUSP)#L$bZCFbHNk2R(Q)J8N!!K01TEDak9ZH5p"D9 -e(V+XApPYA#%IqqbS9#02KkLeirm+1`hL0AfKAlakHQ#'m8GL)NJ9"+%Yj5dMN!# -Y,B"6P[%LL#Lh%U'emr4h,!V""*Jc[9q6I$aHQI@Z#5#U#cB(ZZ"pbeUe)E$fGdi -Hq#+r#8BI"Tam9$ZbYH&09`8KUI-lCNfBpmakB,@iD23,Ul8@ER*2J#MkQM9BChK -1HBXEAdAFR,EkfdYq+[QQ[1b@pN3NecG#cE"lF-%%B-*!5-TSASqE!fmDG!3F*N` -i#C56MS$(p!4X-,-[G@2cBpqAQXdR&8iZ8)5#&LXfba"YMYM-q+bEI&1pVQQe0,H --%HTUC0V*BdbCR9848'P$6"el$+GC[I(K9!YVIm-$-$69X&@#krJPKc%EHVQI[!- -6TN$*4@QV#M'KZEmJG$pfHIidGF#d2-#NX,"2Vj!!D(Chb(B%kLL2a$T"aDejQ9p -km`Qc3birp[MUeU"ed"Vmj9jfSq&-!#,*5d`8jEb)D-,U56@R,X$#)m!B8`991GI -C-khpIhrLYSSKl3J-EHB+0YiRHR"33d)5(#!'X#+eE(,'&C99QahDL`)d%Z3iQEU -T'82[j,fa2a1'0ijQp1Er2089qc+jpl[Gkq,4jb+rK8G94Ya-iPZN"K1Z`U8H,*U -mJcDlQ3GH`dZpTIrAYK,ic`'69q"M'4m1Ff3@0l[a!r!1NF[Fl0!#QkVhd(%Xp2# -@12YkAp%5ALV*MmaJe0!ZFmFZSrII+`p#U%pRMdQ(Me5(p+E01rA'#5mU6paTAPI -#K2$R'f%kZKLa1mXA-2`CXSi'p5a@"K$Q)D-1MqBcZLCRkSdRpb4+0#jB3eB4V,k -hVP++0iB)SMBjNLaKkTb"[[(V5$`dQ353!&4@aA(*9i+YbNI`1q)a$E9TTQcpX," -BC((5+[Xp)ZNUa5,T)08!TD1rhZ,ch49+[R0)*qR%fK`mQdACh$fRRF0YcHN[&`S -i(3GPT(B@![*C9YVadD2BhM4FBR!k5j4)QTEBPi1-rR,NQS%1"bJ2kj2Ad(q3!!6 -m0T@3!'[k%-eG1dDQZ)ef8Ur[HLA*dlFkJi(4E#1SkAcTj-(m,RBJbi(bLkaS-QD -SY$a,c5M#K@DTp#SPkSB0C6SZf2Ph&[q%R%E40f0TT1QrV5)2a1l+L$$M%*QIq%c -YkERiUJq'%AL,X'(FJh%MCkm(e3$PD1FNE+fDUf$qTfZVU&Tb#)((Af#EeLIK8P$ -eX9Hem%r))%SM40r&mJ*)*UQ1@q`TkFq2HlH0l-l@R&+,!j,dP5THrqq6-m)(2a* -B2%cAiY9&R5SDZ[fhma&(A#i$'De6MH3NG1qAbjTc(ZV6%`%RQ''de1-5[d[NQDe -&1k3"V1eFH[@U8X#'BTYAY(*CbeG,5XhMjBJ1!rQ19%V*Nr0hI+$G@'j4UIbk+Q# -I!Q,h2eMFR59'L+K,#`fNfjq0+[#r!Em1r5)[B*&H`*SR3(ZD#D)IP4r@ECJaaBD -C((3IN!$BI(4TD1MMKX#q3!`Q5ZpKDH,G(,mmUXI)B-*jHPHJ9+qE[TaKKPEZT"[ -)aSi51)`F4a$C910Q8&`[#NK)T"XiNDMehG3E'hi(SM%Y(@(lVDM[ZmKM)50iUqB -Rec[UAZUUEaD9$APaY!GNf@X9iJVU&lFDNj[P[*[5)'j$drDc#&)HSRVr9T@Rb)* -D@qFrXXbP5NV3R"-jb*BTa%5GTAjh`TFFJ#kZF'!lIUN!XqHY%,0T2UZjmf&Ne') -JSKHeLBhapVXja)p6'8QakcRMA5h[BiA-pUN,66J0a-@CYc9dr1'CrZTKIDSkB`N -l1b1CRYi"5e,2(3h+8l$FaiSTcF6D$4TRCSY`rUHcY(pb'@dBAEPiR%9S`H3Y%i' -'+QlR%1d0PS![Sh,eGADD5jmr5"Gf402rVhQb4[pYDBQYkKGdf,9p$42h"ETLTFC --Q)9j6hIBZd8N0r9PFl)U(09Nj24(18-`HNR2@5!"dEUbNRZ&$h`a66Rm'dKA+iK -AMD`aQjYDa1J8!QJTrE)58RAI,+eq(kf--U2S(ZH&Rb@iif8J96(33[Ij#6CZSNh -$e'A,*@9lIFeq!rCaV)ED31Ul-J2hP+&CHjNk(IkF+)Al5ffjL+%R[[m5mC!!NCP -$#l+,LbV9Q+HfJ5T%+HN8iL&5M6i#1+9&l'#@A-6)il6!Ib+pH8q,8Sil35-+5-0 -V8$RDQa`5r!GLqU-9fDU-D"ZX)0QPqFmA4m3C"$c-hhcmqBf(TV"3EBcP#HPHdVp -6#5R+6l@hi4mcM-3mUm)RH6@I@B6J()F-ef$Hi0KEpX&-k$4*kFN&,fYc`8RiSY! -8Fd1Q5&@MMA'9Pe10UK6*4LkFV%(RJIj"d%kp+S996-ZQ!S1FmbTF'X[A"1GJ,EX -UlbV'2a`NIZ@F*G9Iq2R(SYG)R9KGdLJk(`[fmda`&,#b!26'B8I*l*`*#F%*VDL -R9%*c65"p,1$XR`hq'V4[6I*m$4%@fI#B$Ui2f1N8%HE94D!'JQ1Ma!F)``R@K`6 -N$Q0JEJKPF6ml+60r!hTF%[`!S+Ah0B[jqL4qI+",h,69B'fPiab8'ha-kBL2-Y* --6BLJ$(L!ce$IiRh)p[SVr[TrG"jVhAp*E)C`,k1JI*!!Z`LC$[p6mVj9jl9S9a` -NRLc!&%m%QbRbp$M9-CMbX"RjcGqZ$3%`-11(IfST#i)YCV!(Z@&+%A'YBT@&dR* -EMK6$@lk@aYUH-KT2Q@NTj1Y!"S+a0IDJ,c(ec2BG5XIPTf0#J5R#`*('DJGVJM% -mY*L83PG-eV%cZ!FPLjbA2SE%-[Y8%-HN3-&iHqbM(q8jGH'a+D3M02mcLCPE%qc -9MLDhmpc#a`kY9TU)&Sh$60*m-flVTT1*YVPV1ZkLQZE'Dpm4)*b!pT-EC+GM -Pb$#20IPqE1LaI),66S8Bc0)TjG"m9YAD,98ZBcMfa5RBY+X)`crZjHhYDT[+NeY -!V1bdCUF#%*L%R`mqD3b'DVbN9'aQlLf@YhiJq1HqUMCN"S*X4K4*kdjdFj!!3Rr -ARbcqG)P3TQ+EG4)95NqXAC!!"LE1!3i#3hiDfG"am@Fk,1qaV%(4%mG2dma%dNQ -eA*F9TlV-Hq[I`dELGc-(DBdYSF@HFV5k8KRq!M,4&!9Gjb`eB10F[ZipUIaK2p+ -eCCJPH[eCi-%ZKSR`Q@1XPp8,%*`*dQM8@c6-Bh3,"Dc)arN0N3PY*aFB#UK3`UV -9[$@F#N&iX`1l2NP&0B0D*0IKH)kPHq&rTH,)+Dh6UFF(-4pbjSK"N!#*XqVr5mI -@b0RlaLa%AFh0N!"FeQr+MEh!Z%b6blDMq9UrAacc1"lq(LpZIaA$bZdLhcl+qek -C1QUd'*'$PC&@e4HAST'R@X8rb$[J`!e`A@qjm5K%*('eSDB8@a**)35hH%ihJX` -Ucf)E0ATH4,&(hV%6"LB24"*XqRe$@Rj!U3h*P(Xmch%*jZZCqJ(cRXZ5VJRZc9) -E1ZI-"S&qEi2)elrVXI9*FN$K`3$lhNl!Tl'8#fYJCNpI0SMPPh6FPU2+9ZYbT"M -SVPATih0c6%,#3'f[&9a`&Vpd'83bQ*A[`Lb[Pr*hM4`JccCPcB9p#iTh`+C#kC) -ej'K8AJc9q0Ki)TmX8b#DAQYJPUcd5f)kMj!!3U%-1&4T4mhCDDrD**1A`!5(YSP -(D+F1YBAmZ%`*2Z-iIYD43iqCiY@0b[J!YDF&TCFK!LENqhQI&lJ6mIUSLH!3[%# -Sf9fS8A(ldNXT-aB`DM2V5D,1CP6BMZTrfhTqVP,k!R1Z0cMQdQ&ZCK,Bp3-CL,A -+`3J''6e"a[!qim+B0ihcQ0ID60QH,P"+33JiDGIXTih@-kppSYEpSYKB$#pYk9f -0-0CVe1IXpHei)!6H%UPkYH-2A(SrFH&UU4@1(&qZ(9[MRqBBc&e4lLGLjAQGV(p -eeIXEXr'eRj6GVb8c*p$3(9r[+Lk2P40T5VYR!Q'&(ApEc+m*GSlf1qFVK*MH02D -S+`9q,&P!HJB"e(@L+B0f[+4De1Uq4,-5`M#-0Q-HE0G&Kl5VaHE5K%&-`3D%TIZ -*G-GR5M26e(X-NE#[AiSY5b"0B0X$S+5XGC2R!*FYMT84[-Nda%5ckc1C3!YC$0e -PJDP(13k#lY&[Q1QrSA[&6)[MQ8CK&Ye0USA"FR(Xjk)6lh0,$+9p!h8dNiUAkiZ -dN!!T@D0eVQA5AY%Q@rBQ2S3,,VJLHBblYf%Y@!21KrkX'r1`pq+[)aC0j%&XkGK -DllRTf%Xh[41&4d#bX[NIpIJjKiUR*Z8'")5db,ajKC6+Q8kpB1U4C*R%rYi25kR -ilfQCY`,ecYlRU"5k41a6YRDj(MT5p9If&8NdAa!r-lKVUhd*j`Y#hf"mA51qqKF -`ir8[[-V%"KXe(mR8j2[&C'!8eU%aUVief*p+lrM4VHji$GE6L(P'F#YF3$P-adF -H-kpNHc,[(qP)[iqS@ZB!"kdVqMMVlm85fEbEmcL%VF0*Jhj(dk415IPb9ip@[2+ -pRia-ke-i3kbR6'E9QrBZbCKSq+B)iEhP3"k&*J5TT3T2`-qTKm&%+PSlCR5Q2MV -3+IPQ4P,HM!++PA+1#YBUK0!%q4Jf4rH-NZ9L'C+jhi"YKLQACk2k)"ri4lZ(adj -[)@SGM8E)kF%Pl$dX*96IN!"RU+ZS5Z62bFU@6FPr3c!$+hc[&%rBZI(NKd4clXL -0@lT9h`LJ`r)b3k8[2hQk1+%#*4d1QL@CMe0MGT!!09kjSiTPFq1rC+cI&8lGfE" -8-Y1d'4Y,00KGTF%X$UFdBlR#EJja`YZX3mUhJ9KjV5E6P!Ic9CR",j!!Z88ZkIA -63AHVEVHfU3d8`%RH1LS+1@9`h&'+dq5,R`M!qqMj8l[fSIBmXm4!3j-2S9%f*J8 -Dam0(-B@A-&VbG4)M[SUc%dMLMAG4-K(,aqrGqiHM*hbDQN)B+,DBfplPVRp*L4! -d,rkm3UQ[VdB`XDdS`pMrHN0j$"0V1N[cEhH%A[Eijdp08iiTpI3(SMIAmc!k0`p -0fkKk0bM4B4FQ2K(0Tb%*hNS,4!r4Ck%ZCX#!1INi)lE6NEfl-C!!b[NEhFYqK[9 -TV)kj1l,GQdVeM1LBapB@iNe+)FqVHJAep%pTGDJri+eVq$j3K!5Cl2C`brI,*pX -2"D4$#e1SaPfLcF*VY))(r"@Fq%Fd[M4fCk@TEbCU&RK*PAAeR6h$e+TQ'm`brFN -[LHLj)L9AGpTh)Yeq"PRP@2,C&TEYT+6k8A99,aZEN!#h'PEJ4SXlYamaB4Ui@a( -VhZ)rB%!&2q9l'-b(*BJbJ'T8N!#,r,qC"PlF@3%e$CKGCi&K2ie1ih43@3,ThXr -[!3dqr#BbPQ#9LLZr)#K,cZJ@!$YH+k3XG`P"G``r&6QQ`pKLSiE'2FQ55i-`K"A -M5fMmPC`TC15T6DI8`S(-AXQ["Pd#!D'@Z'BFS+5K5c-@"QFQeYrAT&YaFC[#2dR -Hk0iAkYNKGdYKS!AeY[SF%3q4ApFK6KMf6@bhrMA5qNaG`!J&6IKpCLU(blQ2(,a -#6EkID[iEeFqh(pB#Y1VGT!c+raUfH3f81@XEZJ**`Y0KD5,Nf@XA(e3)3(!TiPj -!A8S3ES$af,H$',`4CZqXF*-)I#iRUB+h%ha-I@HGMNcUBX#mh3D*plk@LHJP,I6 -lXD+3!*ppE!9"&djYc#&aDkdf3[E2i%bTk)A0RBH,1,@[V*Y[q@GiTl!`i'Xh+lX -U`X*%jY*L"2[[L3"18aV5rpVSSqCi9LZF1Q@aH-Mq#9A"c49+Fef29jTmidV&XUE -Q'6$9Q"D'PB4'G@,8N!"QFJKKN!!@(38(*6@R-)lGQE'ZdXrL0j,#!Z-eRcrBGHF -eZf`a``RjTYlP[J652C''R'YS&833G5'RjBUM4EQ8i6hQLQfA)jVND$j4r`c3GSh -P0kTjQY'QMD85L0e)eNP[[fPmma"GZ)f9++dReXCEl!QZ+$IlA"@4Er8eZjeKRSi -'iRecRYFp-X@Xq2EG6B-ar(%Q$Q5"8*1!8mA,fP6T&GGFJ@#3!&!M*p&`2@D-`X4 -&EDY(p4+9*9fjljQ`&#j33NkDha)210&'#ZLf&@U4B5LaBia0$'QGUjr$D1C[&9% -JaceLAI2)*E"Sr!"#$l![@QY[fhlq0YA10m0R'aZVMdBLLGLp&X"2CXe%CpBIl(S -mID$Y+a(k&2NL5-Ql0D!'A0cXC&mZXFmjkYGHD6,QmJJ61k!m%!I3UDTViTNk#Sb -U10lb,0R-D@BTXQ`fkGV--BiAMKL*A4&ME(lSNjG5L$4`r!AHY6S9+#q22B!A2MG -eN!#p`@53!(S`$Y5(cH$%0S`B$mpX9Rd)G[qmp*4+K@ZTb#%9'aICGU!I*qk0dX5 -mTqA'DXAVdF8m"p#ZFTQ*@6C+l9kS8)"AF11F[R)$&kUb45,Ge(HJ(BV14jha$DR -2lZ)0XNl1m&Q,,(e4ah8(VhZJI8YM@QE'lNTCZm-5ID%d6fZmmjpH3N3ZBC+$`0e -4reG%J`aDBre&8r2$P8FrT!9'C9+#--*iM06DYQTH1ZfkiR@2Ca!49MfjD&pMU)p ---JB#j"-SPaI80P#pT,1DNDAI$Lc$Ve4mNXk#PSE#YXPYiZ"'NFipV%2JfRM)T@2 -YGaC0X8QcD&B50%E(iRE+k1-E6aeNd#)(168#pdp(@$p@kjXm!-hY3JG(iE44%jb -TY6$i$"NaIMJ`MmPGIk,8(p&I(M,FpDR6@+lPl$H-J+e(21@e"#6q*PR+Z@q`)ZU -I*Qr[FdKTR3D-VkR,Iql8PL-'c!S[#jkD6-Ib`3Mb%8cjCQPB'5J*qDb,fHD#391 -6q1Z4D@jrkGMZX,IKLj0T14$1,ETQ9()$X@YbN!#1XC15$`Y[krI(eLXeiIp%pD& -jDG"DlHY43lQeUA&2NPb1fKmH3!D&$dVbP'd4U&JD4iKDr)kqT9"pf0N!iPXp)ph -B)rL"$j+Z1bRIqVNZe9i(iD+@TB4HX84dU[RASAL5[Aqb!@1rQp'e-mk5e`+4[pp -84TV6HSqq4DQ@4%LQZHre5m&c9DMd1*B90eIcSjT9-SUCZ(+*6&-VqLCef`eTq0S -00,9alS%&V#2HU0Zf3%VEfCd)NFf*"-hHFrIXaec&,GPN&2,"BK$(505UJ16MbPm -5h1pCK)16AeQqFTRq6TQ6bZ2B8'Pl'Sf+!mqGr1mhe45m9+LMjNF"U1c-[2j842L -r%U*21Sa,HMEihri0jR3PcS5kS'B*9!"NH8`Q$UlKa4,$)eCDF[8#I$U#+8kB1Er -44+UBpFiqV&d,FP48B4rMhJ#PN!3"!!!`!%!!N!U#NJ#3"h)!!#k8rj!%!*!+HmX -!!!%!!!&jh!!"H0`!!!3p!*$cI!!"!*!&D3"M!(d!R`3#6dX!N!Fp!'!!miKF9'K -PFQ8JDA-JEQpd)'9ZEh9RD#"bEfpY)'pZ)0*H-0-JG'mJBfpZG'PZG@8J9@j6G(9 -QCQPZCbiJ)%&Z)'&NC'PdD@pZB@`JAM%JBRPdCA-JBA*P)'jPC@4PC#i!N!05!!% -!N!9Y!'B!J3#L"!*25`#3"33!5!"R!31)-P0[FR*j,#"LGA3JB5"NDA0V)(*PE'& -dC@3JCA*bEh)J+&i`+5"SBA-JEf0MGA*bC@3Z!*!$6!!#!*!&-3"R!%8!V33%8A9 -TG!#3"3S!8!!F!4#)'P9Z8h4eCQCTEQFJGf&c)(0eBf0PFh0QG@`K!*!&#!!1!#J -!,U!#!!%!N!0p384$8J-!!(i08`U6K!'ME3$X#h)$Y,)b+b[M@dhH@qpUpkCZ*YH -!-3"!!`#3!lUe$)!!#@NUrZ!"94)XqdV)@`lMjA1kK9'1XMr2MrqZ)$NhV"Vi%FU -'0AQ'BU0RDr#XAMm&lZ`,`,#T"L)i6&Fq[H[,VD-C!m8F@8XE1!X!N!0D!!%!N!9 -G!(!!F3#X"!*25`#3"dS!93%6L$T6Eh*bH5iJ)%PZFh4KE'aKG'P[EL"MB@iJEfj -XH5"LC5"`CA*QEh*YC@3JEfiJ5%C6)(C[E(9YCA-Z!*!$EJ!"!*!&D!"k!(`!YJ3 -#6dX!N!G)!&i"*BK18fpYC5"TG'9YFb"hCA*P)(0VDA"`C@3JBQ9MBA9cC5"dD'9 -j)'&bC5"ZEh3JFh9`F'pbG'9N)'*j)(4SDA-JFf9XCLePH(4bB@0dEh)Z!*!$@J! -"!*!&A3"`!(%!V!3#6dX!N!G+!&8"%iJk9'KP)'CTE'8JdPi`db"YBANJBQ8JC'& -YB@GPC#iJ)&"XC@&cC5"eFf8JDA3JGfPdD#"MBA9dD@pZ,J#3!bJ!!3#3"F`!MJ$ -J!0)%#%0[ER4TER9P!*!&"!!%!--"BX!#!qJ!N!28384$8J-!!4)08`UE*!!lLSL -+&Fm@d(1X4'`3p5`rIcrXejfrjql1$+GBf'%P+PL&999LjEra",'U"3ZbC6Y1)2Q -3!"m"9#5BqM@mKDIGaGRG6G,)HT+pI4mZ3pc&PmHP#aEjM6KA6jAe#b3m5Sk53El -SG,A`G'S9QL)q"HC1abaeLk9cJ@A[I"3FZ$A+c+Ce3%m()3a-9j4CR+h"Zf9c)KI -FIJai(r!m3+*2iaUXL26-$cGj+&$EM-KaUkHFa@0E8ER-cGETJDZ80pr*q`cTre6 -rb@d!N!3k!!%!N!93!&N!C!#6"!*25`#3"3-!4!")!1L)'94SDA-JBA*MD'PfC5" -TFb"NB@eKCf9N,L!!N!4)!!%!N!9(!&S!@`#8"!*25`#3"3)!43!a!1L)*eP[G5" -SBACP)'9ZG'9bC@3JB@iJD@jMEh*bC@0d)("KFh0hEh*N,J#3"!`!+!!S!,B"(!3 -"998!N!--!#!!#!#L!4`!JP99!*!$$!"L!*)!m!'B!)9993#3!``!+!!S!(8"2!# -(998!N!--!%B!TJ#k!GB!KP99!*!$$!!J!!J!SJ%F!)"993#3!``!+!!S!+i"6J# -e998!N!-1!#J!+!$#!D3!L&99+!S!N!--!#J!+!#8!4)#!&99!*!$$!!S!#J!M3% -A!J&993#3!aS&!)!!N!-$05i`$e0dG@CQ5A3J8d9")$8Z-!#3!``,9@j6G(9QCL" -KFcS!N!-)"b"QEfaNCA)!!!3c384$8J-!"RF093e$)K)4jPjZ%'3Y'84UmN3N#a" -CUkBQ*lFpLicJGZI)5EFc8r+CIhHrlpZ+2"[Ic,He3*,9cZc*j%RB[MZ6%C,P9Z5 -*V-M[(j%rNjr*[0R@GK&*&K1b0bh*)LK!iJIr6PQ'N94%1+J,1hML*hBK,0+!l9$ -&S4Cf%PiIcijT$+G2[eNUFK-MbHfpC'm6p0EIcBDF5mJT4aqj[p)@X[AQGIR'*!P -,+@RBhU3A&C159eN[%2cJbH(#&ajm5X-QD0&L4-VGcEkQ`r)XP,P*,SMR)FNFrFA -JLaU$lM`9cA8P820dQ"q1j-RJ+KhQ[L68+ciKBT!!RHr$(BZ5%%MI@aB0YUmG+cH -9Fc#*FlDI2+6+KXfGMlqi[`EXLf[bq5DTS"GBJ&RSpE(k4UNSE)5VZ#(4a%4T(NC -4T5D'+#Hca)G5#DG%eC'a54-U)Z$aJ`C3q')!Y4*YQG#!*634DR+,6CR$@+QN(kF --V(@SLpVJf!+P0U0c9&M$',E[r55!`Li$a$PLQ,KZKIc2X5Gal+,YACH#6FZ"UHV -$eS-Ujc5-Gh6@aB"d'i-,eVDeLc'L6-mKjM,F%r*FlYZBmf)r3FhBZqB8*mKFDkB -mH&M*CEjpUU5NcqMUMHZl,G$)FrP&YX*lJ%6&V")5fb&&5#AJ#$hRCZLJ)NBKdc[ -fS@lc&8+41k84G`VH8bAIPL!j2GVYU6-RjVbF3lRZ&DPJc0[DAFTb'rRhYdi*$'i -YhrbA$q+6*eD"#2hXL3&E#6aS*Xkh8XD5XZL!8d`D3&(YeTiH)j,QXMTfCIrBQ', -QaYKL5NVMZKb[jqBq*1K-Xm!cl6p*FZL0,qj368Vlrpap[%LPH%SI@AC!''TAaj9 -1(AL#-@"3aPPimHVhYlZRfC3AeqX$cDJ8$@fJmqd&j*@%XYf`G)B2KUU3!"Si!i4 -'pV`UFE3TZ%Vi1,Y29L@qKkdk$`8SRBhC9E-k+AX1V!#*JeYF)Z3(X`,GA!A9[Q0 -'IDaq[E"flB1d$rZ$9epp#4ZUUbq"F")bcdZiN!#&AS+9c([M)*1*kmMQF"*$DeK -5eBS,0G(8$DlUGG,@)I*P,r@PJf6iV!k3!+U,`iQMEf'*D&FHY3@1%H!C2CVf%Lk -!`1`-EZQV3EfDc)k)alY-h[lIZ!qhTr,*MDZ6TKGp,[+bNp-`jPQCpEJ64GUkaD! -DXF'80&)2BbYeEc[GB!TTEhMfk&f2mYQTP@l1bb2j`E4mDbafS5aG4rV(QBS,DAF --pIPCbZIRk[pq5'N+mhpAIXl%CM(qp[IPf*a9Cbj2D@i@qUC8h'a@H[,JJMDNfrH -5e-ha@AMdST,jr-qAljL($06eY9h'+bI[Gal`F%%Abe@eJpQRlELVUi0e"4+H`Fl -,5pZHa$lSC'#l'ZAeThN#F3DQm&#m#9iTh-1AH$!(GljqYG"C`e[Aj!i!N!-B!$3 -!!!%F!@J!!3%!!3#3"32S!*!$P!#3!c`!"33JEfBJ"b"TG'9YFbi%8h4[F"Y*G'9 -YFb"bC@eKD@jTEQFJG'mJ9@j6G(9QCMS,9@j6G(9QCQPZCcS!N!-k384$8J-!!'S -08`28kJD[er@b"3!X[(9ef5d!N!2`eUkkbhrK!`15,GMbI`'+QqmlTQ0ea1KZmTL -e$!!!#-*"4%05!`!2J!jG#k`5*(CYCpqGIhLhX@ahRMGQBYMCR-G-PQM[8aXM+$T -[4l%R@JehNa3*TD-X)kfLDJZV5Tp[``K[RC!!lER"++2CdY%'ULV3kRe$V432k"M -Y!L@Y5+XZMFQ@d*6hP3B%l(eihqpZpYNLUCT@eIX$$Ij!)b0JBM-L4#&%0Hl9p+F -Ea)r9peLe3(dD1m-cUEmJTNI22emfpX%chrkrLXhTX3#1T0H(,mLU#Ub-SIi1V$r -ATi"k(6EqLD"rqSK63-,!Dd"UNF"d"JTe3&bP4!2-EdKf'3D*&BJDK+N1i45NHCU -q`IDZM0k4f4m'G[@2[Ih`h5l5j3k1$`4@V[jbZ%DN(0MYq9raa&(HBZTdm2RPHAQ -1XJD(EFLEbk*ijaf262LVa'*DY['r,[pE`&Cpr&ZfL5bUMq9Y,V[Fc$ZJP-r"FbS -AF@JTUdh0+19`pYLM1ecZECDaj5#rS#kd"'2KJ(qY9pP8)qTV%D86m-ZIf!p#2eA -c4VjbShi'lB9U!iC43VK4E[TSV`lc2YUTC$DLDXM4,#Z`pPH5fCZSRi@*$TAEHQ` -XG2r+Y6A5mMIZR6iiXM99)ZCG5j`hP6[1fbhcMEcC2K5jkeh-LIRP)pe2TA*(lhG -pG%'&2*)#lf*@G9qj!rlmR1#acl$T[2,RT66IYec1VcqH#kp[m+aSl$+c@#pX24l -46aT(r`8DYMk4l*hTrN@r8-fSE`5RVNZZAH)k)Dj6G,f2VY85kRV5K2SkH+hf-f) -RDi,B%8d51`deXC2f%l%6[LZ,(E0GTGd,Y)[URrMTd3a6%eAi4aiMp[,J1`@#f*- -kNmf8PGlcc2RfV$qfh3iTDD2bdXGYJYL'$L)MYN+&iXrd9Q0UeL&+bl11KeQ(J-0 -QZB3S"cGmpCBJ0RpQa)CAI'LiPK@ph#bZbES[3L3qfa-1qJP'0EJT[JMY%mV6I4' -[NLDLkr-bA)PXeeZViCDC4@48J[6VB(43%H*9i%3P"&XlkT*-PBI*DF"54V@#qq$ -&T'9(+*S3VPrI20+ljHUe9IhhaXF')NdVY(1V0KqEG$i!bA%,a`YY*GBdMB,9KhH -Yr)fmJ-AMcD@LRY6DSB$,[-Mm%k3R6jLC%I+XBQQIlei"kHB$*SA'ph+DC&TQ&d0 -R3))#`X!Z)5#@6PKp0fd1RSmB0*R2D8-QRhNaj!)T)N+cABL)TGh$[L*K5lHlCAl -&j%4Z1PUBUqEQ,cHNfP`J5@&fFJh63QN@p@IKd*@L*m'`6k+UJULmJH-R8+p"MEM -Xi#ZHbV)NU2$K)Pj3"!Tm*pF#Gjpb&53Q`f`lF$!'RQhJ&*e+3f#*5La9IhcpTCH -QYqhlH["9ppYRVamE12+(DhSq9Dc9Piqjj4li(B5FTULJM[KmRXA3*Ii"Ehmj044 -D$-eDQ(`UAN2JA0QRR+#UkK#`rc,B-kQ*kF93`K)k3i9XBR9q32CP9DAS$&0!d8M -+eU#JI966E1$XUUT9E2[`2AED@H!+I1SH6Vdk14ZbH8)ZUQpVZrL@Q5+*XTf84I@ -8)I)#Z*QT2@cF#H0kl@(1h8I&A&Ap6aSHV-2J'03)bG,#QV$XRQa$G3ULM"rTY&& -G'X+i&IY#T(h,*5k@+,C"`#5#+L8K)bSYPAaPrH9$'RH*N`(D,4Hjel@4DldEarB -9LU'Vh2+b0h98@pKjlY1E2eRTP8d2(%*hRXHM0eZb+Cmh4GUC%!G#DI2@radS9q! -cRX(QHC%UTT3X-H@F6+53!*I-2A$BA"'64c*+15Mei@6*mZVFNRqK+5ahl&RD5[j -EmUc3dh,"Xl,jJZ+c1`L"SN*5[+E@JT,#NdD1$TU3!+A"'#4Li08SH&-qq325'G% -drDK'rI5Vk8,3%4,&D(5U'`Bh@Be0`IZpR3l#I4!kRdTQAU$lTKR%F51M+TN2#@5 -LVGEpfVKrX2I%qZHZq%&4eC2*C+c91UjG(aalpf(KqcqE5LD$00R8HR'mIM#mZqh -K,jr60b"@+LRUSZU,VGViS2Xr2DA"KmjdUS1Q1LTlkje0Al[F-6$P6fGZd'T6[GC -qVGICfc-3r12h"b(h2@86NT,Eq0TV[FkpE6dl"`DFX)N1*5P4%i"+V%Ie`2iU)3% -,4(q(8CLd1fBep2Rh'&8[MBjDMCMb2XURErdmfFAk4RqP*l[Q@fr4cN%[90Q@Z)i -DSrSC8%JVaZC`E1R+0jeR-ACdVYT*ArX1`'D&Z%j!Jd#c%`)SLJ[MjDmI1S0((e1 -J")AX3UTMeqeGHrSXJrB[A3jqGFkj020kf3NN#Z-)!Y2eD06"rmKLlV5BqP,mJpZ -M`Y,-EmVSIiYZU[HR-AYmp%#Nf2*6epbQ[[-*aqP4rp*#XCNj$%X)A,&Pb6@RDf8 -f`2#)rdf`aa)1[YKLGZ9-fVp"G8D&BZ'@JYAlSjZ5'jY+G,5@lGV6R4[@$Jd%qER -fjqm2X,U)fC9[AkB1KBp&fj!!((2$Q!CMdSE$hf)kJpYI%6eTK'Hi3*!!IrXLe`* -pd9'S95jIkb&f-R(8B#a+B#EeT"%IV%ViC#HhDD9ZUEl4(FlN"-UpmJ6XTA-Nr-L -2m3P*68aTjJ3(i12pGeNq2hmT-VJMre&lBE6aUTl'Jl2FEJRM#8N@*%e9m1&i1mA -,1I2Xm1iK$c(E'BT6$l)*VQ`66Qk6b!&TCdc"ZALFYIBeUPXQlAcm1df%cF54&LF -*5BYRic*R"Y`KCq0"`1P@"!e`8aAHRV!f8hafZ1bq2AXVRBP`h!pE%64`4kRL$Sk -l5h&ErJFlmZ2EQKBD&Eb2IUE5dq"U##3kU*YFmfE$66@C0LP9)VGFDGa4!0E3!&& -AGDC0iM!LZa@EXd`#')4Y25DN,D*F0d`d6NXC"JRAEfj)2,j9Bc-0BY!NPbIDJj' -4)libH6KHC-Qd4a8GCN4cl*AaVeZ+bQ3ZlM0RQL1MG0)D$#d0Y#I6'P9d+Y-BR%K -R'k1+rS+8BBX`+8SPZ)0GHc*YB6Im@fGm5iSKZY*MDVfcXXS-RdIN81k9+`#3""8 -!9!"N!)X"KJ!"!3#3"`4,!*!%'!!m!%!!X!'B!!%"!*!(!3F!N!B")N&%3e)$!!1 -+$9-+Qb3!IiC&X0dj141`a3jG5dj2(GX"&32EXIVB$&EecMiSU&KpE-&ZV1V'`$p -MIe6d[rp[Mr0f9KR'kJ!,Q680A&D0p-'14[HZ8aVX",2c+"6FaH)b3VE8Z5$*F`Z -3!0p[JRD#kG&%G-mTHE-6hEc*lLZ&K$2-5eVUQP++(3Xq(j[6I`6`H[ijkXV6kQV -rRepZakZIr82rqj'@*3+i-fUMJQe@`8JQ[%@VE)a9Y9jE2Q+EYiAYB49ph"I'dPT --T*5d!R%I6(k-`pHZ'qD(TKRU8p[f6Gd2ZK"S@S!R"-J!R!"-[ISY!2lU#3-4I`$ -`SR,K!K!FJS!"JQ*J,6L,N8'-h`a#j")kiZTMNXbp+(%I60pdq8A%+fc,'!#3!hG -"4%05!`!!J!e6#eXJ!`1QB-1UDV-`X!%LBQ!h5l(E@C@J)',$(ZVC`*K9-3YM+VV -hTe1X#JZ*BmLfiRI@!&)SrH'p`)*+Z-9!Tf0)-Sk[fIFQ)JkrkFEqqpLI1PG2++D -4"4f4ZS)CZ+2&'UkSDLHN6c)+ldA1"3#3!d`!!J#3"3J!0!!D!4Z)'e"XC@&cC5" -TER0PFR3JC'PcDb"H-#"hDA4S1J#3"JX!#`!V!#ZJ!J4,!*!&(3!d!#d"')J#AM% -!N!-k!!%!N!8f!)F!5J$""!*25`#3"3)!43![!6q)'9i`)'&`F'9KFR-JG'mJBQ8 -JC'&YB@GPC#j,!*!$UN&%3e)$!!#f$9X,8c!$Gh-YCJEX'G2+9FBh011qY99@aMp -[6qr9HVIZ2IrL'aS!!2!0!!$S0Jd!!!Zb,4Z"TIJ(GQIlqH@Y,A269XhI@GL6%@d -lV3-R+QGCfFQZmRMAGd5&i&,%Ii)B&,j%$*hc3NQSKJ%P3S!ZU!lHe3A!Ni8FS"L -dp)0C(qm)NQG"[L$ILXeK[1,pDj-&TB85+iUjFYcRZF,59(MPm@%"!*!$$!!S!#J -!I`&`"+p993!!!3!!!3#3!`+!!!!%3!!!#5!!!"13!!!!*mJ!!%%%!!#"!J!"!!% -!!JI!J!32i%!)''!J%"[m%#3DP!K-'[3NRc)%-N`ek2NN05Jb%$Ii*!J`i!J%(q! -3!J$$r!%$mJ3!J!)N!%##C!!JJL3!%qBN!!R+*!!%NJ3!!L2m!!&!!*!$J!!!!3# -3!`1!!!!(`!!!$q!!!"r`!!!rq!!!Ir`!!2rq!!(rr`!$rrq!"rrr`!rrrq!Irrr -`2rrrq(rrrrcrN!2qIrq3!crrrriIrrrm$rrrq!Irrr!$rrrm!Irrr!$rrr`!Irr -m!$rrr!!Irr`!$r[m!!Icr!!$ir`!!F!!N!1!!*!$!3!Irr`!%!!'!"!!"3!3!!5 -!%!!%3"!!"#!3!!I`%!!!%"!!H"!3!rr3%"rrN!!3rrm3%2rrd"(rrj!!&2rrd"Z -lZl!4N!-3"%4%3!lZlZ!6rrr3&rrrN!!Arrr3&rrJ8"2rjP!4rqP3%rrL8"(rj&! -3rqp3%2mJ8"!!2p!3!!!3(rrrm"rrr!!Irri!(rrr!"rrri!Irrr!(rrri"rrrr! -Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr! -Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr! -Irrr`!!!"!"rrr!!3!!B!%!!&!"!!")!3!!4!%!!%)"!!"r!3!!!3%!"i%"!$rp! -3(rq3!"$rra!3rrr3%IrrN!!8rrr3'lZlX"'3!a!%4%4!$ZlZS"2rrp!Arrq3!"I -rrp!Arq"3%rrZ8"(ri9!6rqC3%IrK8"$rlP!3rb"3%!!rd"!!!"!Irrr`(rrm!"r -rrJ!Irrm!(rrrJ"rrrm!IrrrJ(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"r -rrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"r -rrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!!!!%!(rrm!"!!"J!3!!8!%!!%J"! -!"%!3!!3J%!!(m"!!!"!3!(J3%!2rd"!Irj!!%2rr%"$rrp!4rrq3!"6rrp!EZlZ -`%C!$%!4%4%!1lZlJ%rrrd"Irrj!!&rrrd"Iri&!6rq"3%IrZ8"2rk9!4rqP3%2r -T8"$r)&!3!$r3%!!!%"rrrr!Irr`!(rrq!"rrr`!Irrq!(rrr`"rrrq!Irrr`(rr -rm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rr -rm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rrrm"rrrr!Irrr`(rr -rm!!!!3!!!3#3!`+!!!!%3!!!#5!!!"13!!!!*mJ!!%%%!!#"!J!"!!%!!JI!J!3 -2i%!)''!J%"[m%#3DP!K-'[3NRc)%-N`ek2NN05Jb%$Ii*!J`i!J%(q!3!J$!)!% -$m%!!J!#!!%#"!!!JJJ!!%q3!!!R)!!!%N!!!!!)J!!!"3!#3!i!!!!%!N!-$J!! -!"m!!!!rJ!!!Im!!!2rJ!!(rm!!$rrJ!"rrm!!rrrJ!Irrm!2rrrJ(rrrm$rrrrK -rrrrmrj!$rRrrN!-rrrrq(rrrr!rrrrJ(rrr`!rrri!(rrm!!rrq!!(rr!!!rrJ! -!(r`!!!ri!!!(m!!!!q!!!!(!!*!$J!#3"!G"8&"-!*!'"e0PCc)!!3#3"!G6C@F -c!!*r!*!$"e0PCdi!!rm!N!-(39"36!#3"KaKGA0d!*!$!8P$6L-!N!@%4P*&4J# -3"B3!N!-d399c-J#3!`&*3diM!!-!N!1!!!%!J3!#!))!!`#$4P*&4J!$!*!$J!! -"!)%!!J##!!-!J`#3!b!IU5!a16N`,6Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,J# -3"cd&%i!!N!-&05ia,M-`05ia,M-J3fp`HA*TCfKd)+NJ-6Nj-#dj15`J3@aKC'4 -TEL"6HA0dC@ec,#"*EQ-Z!!!mp%&%3e)$!([3%&804MB5!$%clP2rGhjIKQ'-daM -6DD6N'Q-D3c)c)TZ6T4'553M$Q#EM*#,k8+k+-dK*Q)h)b@+aH3-%M)JDN!"R8fT -T("!5&*T55fNHfaHSZUM,ad0U@C5kP,,mr9%U2)S83`LC[qqlGfEZK%$4YpFkkja -pIJ-EV+FJ5T!!"%%3"%'L'P"GTCqYqq$9Q0%C"Vkr!U![a6BfGk$4@63@TX3rMrT -3#cR,I['[PIf$#d4pjhFb"AAmT,+IVl*aN!#Z[X0'EE(FmkjLXqi8B!ka`[CUClr -hf@fRZMEAr"R'cSkDbUl0U,38MF9V3Q5Skepp-&*0br+BI$$hMXhkaIhKe"d`@AE -pDe4kUX(A9l4P@YBfDpFRU(k,UQ@ScUEU+[imf"mU((HB2`rfTaZT1KY'BIHi`mA -ICa@FArD9-#$@Z)EZqRdi&!Q$&ELcl15VN@R&hiFGD5f-c#mAc4EdaaRi$dUUpiR -6Q+33peckDHXr#!Nr)IbNUrB*jAIrZId1ke9I'ZBU3lJde#RqZHQ2&CfZcVh$fN2 -824)ZTFT"aiLel(GPfPTbPA!+KeXGR4ehD2)"CaJQ1r(N0@r64cU#FEkd"893Rqe -B1q+l9IL,0m!NUBQ81#dD4H6%p+CHVjGqrYMd4mkDk9ere$Zf`Lh#cjEbkGcPQ%l -GjE&Zah6jU2kKlf#IH,,S*ijF5kj)9`T[3(Rl4!NC$Clff$mSUGNR,*Gqh[S"*[m -"*[q"50IpGEI3XP[qi*4SkTEjNP1b'UaP0aLdqNXAq#Kp'JPEI(ppc,TiK$k9aUj -ArI@akB[2+[X!AMbLkEVmHP&afA@j-&mjGD+NVTA0TP@R21pk8P`BiM9iKVSfkmj -Z913U&kK8XDP82TclDrf$Jir(h9a2+Zi-a+i)m4rpSMiCiL*"89Yh$4Q1bUj2A*K -NdSaU'3SD8pRhhbR+5rL`%#LDkeGHBDGc$QarZmTkKI1qCY1@iUFK0JQS9j5A@"q -F0HZpAiS!Q#+J$(@Y#kH8NB-`K4HhPEpU'djp%dY8h-R*+YQ1Bc04"!+a*ijU-ed -$9eD%cFT)e`lPRDj(P@1+66&e[3IM[mR(K`UmjfZXebd4Q&$1[FUaQMrrISN``rJ -FUM&TPNI1&@1"[bm5)GYV(frf,R8K3A&4b9-0f'bqHNRCpfGNZ!DNSA#Sb-X6`d3 -B,#p%N8i+8c"CYM+Uj$8,$2R#AlPRe'CpHc(C4-`RAY8F$#$L#iXLkGZk,keSLa" -[aCH'bG8"3*d+@Z)mp4+VMVPrK3J"Lk[,h'lQK)bJ@89*HJX(Pjc-1EL3!,M""&V -60NIAh3Il[&i2LL)8&%88YjdXUDVXZPY**HrKB,Fqk"1l3m8EDS5@bTB%'lSYa8p -A#@[NNih9NVAc`l)E1Uf45+4XipUcmNF'!+T,Jr&,8L4LM542(dHfccS5pKXf(J8 -DAjSV5NJqG*3q@L29dTiREcKlR5(rkUIQYUZ1d-Fr`I4$X3eFKVf@A)2V`PjRlSA -LIZpSei9+-bV6i4CiDh-0I!M"E*dr0lpKEkMiZ[b'IAMY#Z3h*-eVeaD[,EF#iHc -LkiVRH,ec0T1+e-Z&PC)2V02Rc6')`5dQd6A8pD@emURRmJVcFM`)DUqALcf+@ST -m46HMk14rj0QkMRFG9rUqM$kp'm8m[8qYVQQfPL8l10S2qbX-iC!!CQ*@,pUX@3$ -'RCTIGUQBK$GYm+5h96ieB,`CVclMfZ,9Mh-aT58b$3HE8I!ik@4*9"U%#Yr9GLX -8H100Ga4k[f2FZ&mSIFNA&5@fU@X%"ST3'Bb$iG"qkBj1BaNG+GbaCla(rSf2[,K -l4c,SL+3k-UeipI$D@mpY&mCPp-UlpCcADh`Z8QPFFHXjB6(Q&kqHX4P,cV0QKJ3 -U+h&K!!90P@0Ri'GTF8((89pVC,Aad+'9S5BZeXXeh$TLM!#"P8dXq&PVV63f&KH -FLJkG'mb&H"XLDlc2iUF,%Id5ld3FkH+IJhfqdU+r*eb6XqM[1,CXU0*idVX'RF[ -i*hj-GrQBlX,%B8UJB0G-lZIiH6pqp(hmI"JrfU#lTU+rIef@+pU&EmMSi!)DJi( -9(aE5HbA"8d0!hE$0DXb10QdE-GS`p3&A1YNbZ-$B'28C03LihEA'HhIBb8`!8S! -QDkB)hAPr'S@c9i`3i,"F1%@--F2$4903j,#-ILj'KUJf&EhLSH*1N5VkQSXP43U -"0k2VeKS$Ii$Um(8F3Ble`5F&&r-J'f,K!Xd"&2GB2fN`-'#aPU%)bQrG10S!!e+ -1#iDlF-I4leSheB@12STMQkCFcMjAMd)miErKXPE0RaTMRmlSRd+lc0D0fHF#%MY -6,Ya`a[FS)hB,U+SjeV*'NAh1a$&!k2T(XG9(%pl-2RI#cKd6$$2Ip*heQE')N!" -eihc$`i2#r2!4%I,CV@9Vcc`m)[a)iP[L%aQ@#eLK('@A()C!6!#G+!K8A!$cVUj -(Uafq@kaPefr$iMkDB2"YidAdEF1@(cjVB*4ZX@[SU3(VaS'KTrS`r3X0KZac9M- -[**UDDr$jV@93%SGak(VVaZZ(RMS%0"FQ''+,29l,#ehlTZ,!`Xaia4DkaMY-RAj -DfURbE-9aX&kdm1+3!09N-S(H,KFAZh%4BIX++*!!3mD0iETk"aH2La5-C%-rH+1 -e8D310JS8Jm08MB*B$X4PEb[(UUeDAA@,IM604j91P$'QX%A3iD,rR`p$$(A+fr' -L9bTijD*66ppJYU0mFT%am`'N$AKDS-M299aJjK5![1Ub*mhA!%DA9eQjbJXT1Z0 -V25ji-eqkZR8m&mkS,Vaj%4F1U#jFl[Q#GbNRK,`A9FPK+49N&hU(LelKPkI2fq[ -Yc5X#H%k,G0j2j8lK&-kmI&3N)HAp9-mJ,H9#@6CA)j0N34&1%l)#,GALDd2B'68 -Y0b3940@PA(!8E[rH3K&+8N)pD'BMZhHrV83l%8d[0i6p86X1Ci0)+L3AeeD,2Hq -L1-I2Rj0(29F1Q[9Pp[*5LejKGP"XPRTBiVmEKRP!1(fe-YVH3&3k@D*4dE%P%#` -N,MK&0Vh8qQ-P(EBK+NQpBk!SjC*fHT[$1'mE)QVM6#9P-bJMffc'ZlFKSf"FV&@ -hZN8(a0@15T-R"D'9+T8[e#,l9#r+NB&F24a!N!!lA8-6`mNDS!jm)+0eDU8!-AI -MCai11@dPR(N`rUjEi#%)1#Mi'"p(P1C2&"`lQA5*LM"jm5"$DRVS#Df&e-iV(J[ -3fQc6HA05dTH!C8f*bkF9,La(-8)+PdYaaBiXmHSj*ii,CY$NJ(2)k0VM40!i282 -'NjaGPTc("B4hkEd5#021a83hIZKV9ENRQ+9mD45&U3VP@kR)RcFk,f9+YqBDVGZ -1'%rHfJRJ[@$L6J$[3`5ZYa1i&U)V[[(*4QcXm41a`(+Ai@3*-QKRj3kae&SjF5F -jUqGS+)DbF`H@F*`@&1pS`J)T#2*G2#eRf1$)25mi!k)qGU2SGUf0#@bXC5M)F4c -dmrAc+,)X,m(&L#r$@JC`1D`5C(b#Q3*#j1@DD,N4f49CY&KlI,&$aMCpSfCpid4 -AZkpe3-K,jJAlc-%%$UI&p6+T@BSMH4DFX@RPDZ2*j+@#5Q0f-N$U3S3rG0fST4J -jN!!kI+dHmd%lYYr*!CKFSNEUiH!h23$f3I(h-K!fJCR%8F89IF#S"6(L&INSQ-h -*"j@hZajpS%)S!(Y)9U8cP9D3!%99hBJ&L#%Cb32RSPmm[9F-!&N0)kXq&Yp84dB -!Y`N**J"b-3DX9m,Api$m[)km82`QMT`AV+2'm6S3aBb0E4%MK$P0aFC861DQK-f -4[`4apjhU,,l2Sc1Y0mSU!AHrp1AHSr(ZVp#GeVX(iYfjk$E,h5mQ8,M4EGHl%bJ -#k2EVh3N8)34VE5+"J&3Y[IpHfBc!d4LUVdl,JR'c&pN,*L"4M0TaFE"60*'LXKX -CK32V&h)%V8kmLUYc83i+jjdY$S24I9j!8H[!M`,6BYAJS[8,JGSGE8+dZ`[U8LN -V4XHC[IfqY#C#@BTlrHd-9TdL#8)&G"dG"$TF)J3`c"f+&(VVk1VfS+X@U)aZVaR -QT&fk%QR%PA%8#D1JbP[MDleYC$e8%a#ThXY(G-4')&`'8q!R30S@rBY4`bCPk'# -`jIDQj1[VGj!!#8e-Um'9-8cQ*S-CT%`TVi04H`8l46pe&AS*C-'B'J8j@eqN1$H -E5H4`*(3E%j!!Q63Kq6l32k&)c!3L19BDQSQ-%@3mhQCNA['UYPQHCqB3TQ4leGZ -fkBLFS)`meV`R0ArkI%2pS0C8rlCYM+mahMeQ[U&Um"`E@eEb"PQ1)eQq,-Ad@22 -"SbB6-EA*G49JUd(TV,B098"KG([Rl"IA!l&@lHZX0r&Khbk62rp(`TaX)A+h1BV -jXHEEpTK-hRl0lqKFIQ6I2"HZKGfm"5m28qL2*jJ!ZkbDU%6(6&E+f5%80CM$(CE -$BQ4[Nqm`EiCTMUQahBF-KdNi$MZb9Zd9jRdJ!b%Ke!&*Fp&B'+*08#P0-"f(pSQ -FcHJHNd#rJ3[14G%%)K!&ZUllI1le1@TPb,[1Nli0E1Pp##q,Yaq'IC1h&i'pVLZ -AQ$P,CfD66#MPN4855q3[V@5J5#ebaTAbIKKB,rNLDhT"YT!!+@P4Df&[q8&chT2 -l*DfF`3IF0!GRPG@$"IDH`!m8PYkM4AQ@0Db-pCBRUe'mmfE[L8S6+NrdRYMRY"6 -DXp"4LJUZ&2U*j0%-4FMPk(b2N!!bqb`If6I*N5Z6BUiFfAFQJZJE!(9Sl!c2d0L -PeXcY6PiZ4r3`&ii8&lbV*++DmT)`*59l3f6ef&iqp$!bD#*b*l*S)KHUj0$BAXr -3#l8i,P`MP,8aAC1L1lD0M1hYkA05f'[d,K1MLp4,Ed'jH)q8)4"GKK9@82(Cja, -[)10damM%-+XE*f-,FEVXB--aljA`G5Le)pE+&983pHfqeZL18DYA9'e$apMKSC& -HFq)3Uf*!@j!!ieC2,5R-EkJ3&IDD%AA"(,2pKQl(SVIL`m3GH)@-$eNUK63a&#j -&PXZR#A0je,YY"%YB2FF`1,cGf3P&!1"VB,Z6!CLeF)1C9%X$-QQAf-A"HST%qi5 -CZNd8ADkH)r4Z1hHRPXVG`m2l4AfDPfMC#3Mb&BQ`"KqB2Ej#4H1$F$5JL&k6q!# -5m,KVK)k$PMpBKS4j)XJm[Xc#dSBQlRc(`1S+'bJk&rAqIe&cPa[*eGal&++XCjC -$`Y[P%VD5C!Zkh(UA`PeKm`G!`-QhSYbK(1`,5A,fJ!mK5i$0X)@lpqLHeY''4NR -H,[q#V@5IqBiX@ZK4I@)MYK)9'U&R-KbG#ia,C'"TG)-JRdA5JQY0-!MFMTmYZ0T -&kNplNXc6%m-!h[1hiI0B'!53!-4`Q*FaZ+Mh++YMYq*5c'63Dm+28cBCr#HrT6+ -5Dp`,9%hKGM+A31ahMFK)S4L+8'E8Q`pffT[0#cf5'DdJ3R!L)[Ad&6pGQ59h!(5 -P3"$TU(E1@p2VV,LDAHK,pcS"cP*+a8')IhK,1E&BIEdiS%8jk,56L+EbeUl*+9M -,9`cCK8,d1ZHKf'6pFqKqIbjA055)%DH`i!9cB*-Hh$Y2P""M!LP)ipcVfcMCM)K -NLXbKp#(''#iNTX)hA,@)&YBX"p$jmRSPhBC+YTZhm`KC5609a`)P-Jd'U5GB&'B -!VUA(%k+3!!TG4j)DLaE*qAD!M5fX@P0b6L9VJMi8c0l$hHV%)rN)e'cK3l'J4"* -l2cL*55N@$5Am*4iNNZ&Cf-4jC&([9bHR)qXNa)HZ)f&rC'MD0)dB!JS)JTNA1@f -DV351U3ELQ`rac6G85j-*X%1p6&e%C4beD11E@(h`a1kD%$baX%PR2j[([Akjajf -cZBFY9M+MHY)m+D"@3&$1fDD@@""9#`SNj!"TbR`SF!+6'CkE!%TSN!$3k'YPi!* -`Sa!#fEMhCR("PU8`lR(@,e0&I%Z+BP5UVT2mC9I$*NZGm+B[*ee4%eaRS#j8D6% -MHViH,h[b+$jRK2D'B9k+(kj0ASUDqA"lRI32PM31Pq*P6r,R$1QV*)T[TNh8&`& -6kCE5Nb@b+#J`*XT%dP!++6ZUY)+G3NU*4h3p3BAAPZ+eVXc3bcqUmI@*YV&C09C -8S#lqF(2BbF9Q81khGl8GK,%%PrI"L!ffVV&Ur[3Y9p"q"Ujcm8M&513%$0QpZeD -*%"S)VARNR$F(qKYRMlH()biB13U94eKe$p&@[NHiS4+F+c9EUq#%4%Jl(AQ*VS4 -`f"NfSGZ-EMmUD4(#4l0P3)3N6f(+15"j(#1hM)J-3PCU'K$Q+c9Krbf-e'6*21J -0[IbCl'jh$S3ZSEML(hB"X1FVlr`%KE5$M`b+P'XJ01T(JCB"D32Qm+3&"S9N#JZ -rpjDG)N1mqdKQb#P+ACRT'C@jf,S8erXLBCL@Hj@5Kc06*d3JDM*UbDU(Gi+1Vpf -BNHbiFkIi5[MZ2(I%FHTYF6SUiE2rNCf`,jC#`0H88c8JmMkdDQ%Y&bNb8c!iP3[ -fZ0UeQSVfS&)*#ibfE1"VeUT48(IFelI`Ba"[@PBdK2fZKR#,0U1cAbLrAi[L5Mj -Q)%)%*a-Kf&iYAS[M$Qh4rNrh[)KS@k[miXZGU1aimAqrZ"q9jZLHI5!D%+16dDG -"EL!Qr6ml&+iXqG&R1e#41VlB[IG(U%3U+rQ!Y'22&j9FDGk,'PH%rJGf1PZ$3)k -D,5q*Tp'SV-Ab8QJr9&UcBd6c1`FX2cc*aI-D$$%$dPHS(Z#SP`-0MJ["D*Bmi3% -pf)iU*8X",ZrkLqq[EUYPT$83EVH-(!b%RAJ0K%[403!L$+'9BPZBZM8BC*LCJ8V -)39ei@XlF9*%SRdp2bj+MUXqENhjF%CUI#"+jk(fGc!kL[FED%JL,R2NV4(,'U*m -S80pc9K!lqc2-GY0fC(5)3GU$'-6%$!+P+!2(Df9QV'cRU9PqBF'1B3YHk8TcaBL -m`"a0[6$1G#N$NZRcCM5HHKA*Y$h[9D89akiA)VKS@PC``@MR["Y%!!hk-N6(``K -XdGjP4Q#RLVqT1BD#Z1[iiX89BL24@P"J#6%k!pB4japF(M6M+mA,(cC2l01FAAf -D4AE(pH&+A`V6D39EaB#$[+!lSA#,PSFjFp`HU4FGq,NMNJGQlqM5,#2HGFP3Pf# -Qh*8R!PKSLdiBNiSKS%N%ZL4j%XUaFM#X%"p[e%+fMI%Y6%*jQ$2H!6C`hrQaU)V -X&)hBaZf5NZDZN!!@kNScF[jFN`IL*JL$0VN1+-S)4BS@bH+k%8G,qFM*9qP!2Ke -SS301H4*Gb)CKLp0GPQ4Tja)3pba#SPSM,&h[hXD0eQ6dTBP!8@p!#,Chfd5HU!8 -6r5jrSN3+)F@1a!0A2K43(A,hF+J8$-"('dNdlUjF1E(AF',(33E'+#ifSBKJ%3" -!#3X8c06U0U$Kb!L#fkQCR8Z%"-$F(h%5)jJ9@p'I`!cQQQB!G"-A+4)L#a#CLri -E1Th-+MA0LF!A3PF*lf15PD)Z&RlNZdTVZ)B,1Ad"N!$CQm,Y+dBq!m&)a@$Bl`a -F9kE0F$SG)ehZ''#L5GhX551Mj[6HMBcDcFDQieb3!'&"-i2&e'`&'8BI"bkC)@, -EbaH(1+Yh0fAe&XHcHMFEE`aQ-cTF5aR$GZm%('caINjAhd#@H0*[q2U[L-5N#pG -VSaeXD1#YXB4RDHY!I'XR-He&)c1QTSC+AKL8!(%E%`&1B"-U6"'INc!))5%"2%c -@%p'NM"33*KNBiUhbD0)6q4*pHKH0*4J8G-$)&Y!hDJN53"-YfNQE@,a[d)6pX3P -$e*r6-Y[Mbj3EhYAHaTFQd+A2DG2%mVEh*1bTA"KmR4FL29biq6BqY*J$1aSbDR( -!8C*J+*VXBK,E3a3Ja&c4$(fb6Kq6f(16*fjH)8pq5Bq6[jf0!$!mTQ$)+i8"Y#A -@C0!biKH9aaQ82j8P0e6,kj!!QiceRj8EUS8$8+AY-,pGDH9#$6)FL5BdAGTmcU[ -qa)dXN@(,1pkDY1!$0A2SIqKi+mLS6*C1llr$-$hp2EP"hb)QkN4"`Xdi[*X1,iS -9MmL&6pi32Rh&ahN$(*f*$La%ZG,eRJH0q(M$SNrkB2SYqZAa9XXD,[Eb$LHEk!V -3kFdT*JkdDU@a6LaRe3#@N``GK`(biIY6QXr28j&9@99NF$X6!9(6%lQjM$0)@(9 -"`VT$&YDF!lU`,,*!mZj!jU%X*Tl)Af6Kp)j4#fI169KkTrGhbCEi`@PX,1KG`8* -,AJX@eSBZA%lf*+cemr!T1b'X$@[3JF+,SPp-A6`EcJ5,CmkNB2()$BKL,!XJkH( -LVhi$#!e-XZ,2S*hC6bD*Fecir,YK0#h6@RjSSND!+Cp8-BJ#L5e4+FLSR'LS9h' -pdrU4ic)Dk8TlqFVeq`A)VYa9&ErlT(`kLK[Ch0Y!"J!UJ&+@#6mU6DLJb&qc1$U -McVQ'j8FUel(bIeTPj#q0&jKPLX!Y4mhD!FXM`Uf)C,B[a-@mA!`mfZ#id(3"*V& -Uj@f3!0rQ9Qfr-Iq%Yd&dS*6CBKGII'V"kpTRIM2D#G5Mm)+0`hba6PTKf(Fc&Q# -UL,JLKH-S-a50EIj"LEAb"4K8+Nk9IeTFF-YL4#6qb1SAGQT()F+K&hD#!!f"h(4 -@D8ffb&fbbHl'BDK,6VN,"biTVAb0M!#lb[mhNGI&MImZI%)4Q(liVa'P0HEFmT! -!dXV'3*!!ep(KIL-hM03,Z*`3500qqAUpI-9$KC2pLi'QMaZ%ZQU6TG9VqTG8VHQ -r(91%`8Za`1a9Ld0'2Ja69KF&5(D-!HN6IkM5LiFXe3"'95KUKS(4&6p@ZH)S(eZ -ISarcUBj96ACXVRiXP6MQ6-HDA-U-K1CG*Xii4)APl%(m*5f@#e6K"V1A,'I,Mj` -SjmiGqelmJMT6VV0*[qX#'Va+XB+$50M6PpbhGiHFN!$ZFVQ1[92'6IT0ELDC1E# -a6-S9D-C+"AkM6R@qCadmF#6V9(&Z9NPflK'(6(c$5,lBqp+,1K,re*!![+8M'F` -q09Majm(L`F1-4NE%#3NUPeQ[f2@+RbSljB3@&4J#)k9r+Y8r&HXG0LjHCi-bJR5 -RF)!CLSH1bBJ(PiM4b&C94qh+EcN6ka[&NBQHV8*ddhbUde&42ZJS&k)Md,RRdbp -fIkTmZDm`q9,ik6eIl!BpY[,&LpI,#mhaC'$+9"$Z2iiQZHEckl43j$!Ak3'PaBe -SKj@Z0`PPLBdZ[Fa4%dJqqQ[QlQS$#A!r)RZ)brZqV',FKQbcGaR-ES8iHS`,5!i -CQ$L&%FVSaKb!b(*c6cNUE%FkjB9-pf3!E@N3@L1KAFAER@a'iF3N8URb#2@B'1T -$VFP[G'A'b*8l!9j&#-&PpLil8&D$iS("k!S3b4rBD%!@ilbNqCKd1+FGNkf@Tmi -*&LLI`-rdU#A[[N1Y"mS-EZm6)(k8`U(cdQf(4BZESYqlHaPd[TC9mKkBjP6f%6f -`8D#I3FTKE2Nk`B[cC(2Rhi3MqU3F6,6`rTLi[4D`eRr0cA"Q*0hR*,l#l#%I1ZL -A$q8XBF(9#8G@9-Ur(*lTZXaAIR1B)cNa5em5)VRT&Cf$a6%Z&R+#)[BTjFRacd' -pb,bi`$N`G%a@AH6T)#%i1"&dPK4RR6SX6`Z63S'Da%$Ga1,UR3KaAI,dX@hGd`H -LrL3Mp9LXHd(!)PKN@Me-cL$)i3LZZ'$4$J4,Hb4mN!!,BHJB2L`X,TM4HkJ9iV4 -Nhqmdm"*JTPVl-ZpZ3bP4d!5mie#J4`[J*UlR"59#ELlH!Y1-MC-KJQDGkdhkF-Q -9qr9'C,LDA,N(0VPJ8Uqf[22M6p*R3pf2[F-Afp'JeTP#"VP-3VF*Y$QPI#b5&6Z -i-ZXE1KLCj[0[l!84cfiQV9a[FVGb)fIAQe"mhSpN4H`i@0CLPe'&I45`,BNVQ2) -iA&[Fd5Th-[&F*iL5PGrk4J(4*UHGXkhBF!",F)Ch8G#$@#fRPJ2G,C++M&)RiQ" -NEh5d%TT&)%!%'KN&6D!'#HCflcJN'$60B6(Kd(-!%f#qQVR-I0FNTchTGi1iF[d -hQ)+6f+0&4P`kbGe+SRf6#dUq#l2Cd'%HjX)jV,-*9-i'X-RK)m9(()2ChEP&$V! -CB*K!6"%i,eb0`LB,2pPh@i9haY#2@'8K"@J'9*99lPB3*fEEQQX`a%--L2f"$@$ -f5+2`bd[jJl`8CrEp!8--Y%eK3!5SF5VVJmN@)5Ll!-$SLjTl"SbMF6hh50EJHpR -PI,&im-qih0jdUR$hThX+2pfYf-$DRqljY2$,6emNK%j@J`d9)"$&6dTcFY%TQMY -BEQ-6AdSc4`S6+[iBfa((RmY,XLUiSPS3-fc5&&h(i!r')*%!Jdpd@Spd[RfUZ1* -8VTcSd+`l,8l,30m8BAB[ABAVlj6Y#DhJbXEGdZIqGcCY#K%S%eSM(k%06Z[*(35 -qlaSS1%fb%0%d5!lf6b(+&S#0XN65Ib+Va0&j*,%!HF*KQ6QJUT8@!&58kSXZM3h -lm)VM52D4`BUJLajZG'[L3$p34Y'MaE9A&)HCV+biD%)%$S,99RmX0[(X%L$)+V% -G+Bi4ech*M*2U`!*NjMP3jV+r`b"ECL+6%`A-bG$j2e,b3q4#"'XJA!0`+8Af`Bk -%Br1eXZUqp*kq9UKA[j568I4hq4$%RYqZH*23&6VYm3!eD9SN#f,m+KLGKk)-q3A -$p)b"9[9RU!6j2@frIVkqI9+p2CCVq8pCS[J24a#G0`Ul,m-miVdTl2q(%4$NbJ( -c"3)'`fSiYm3%c*&hj-MK8m9b`ZURi!$JATr2dAmXqXLCrTYMhJdF3FEBk3`Z(LR -1e40$$MHcSJ3CFHF-0pk#!8F-V(*([BSK+ZT(#'e!M[TbrJEdCpfYlj4aSc3A9"! -#P2)#N`3@eiJQ!VVF8!L&5$R$V,C(4YKSBLhc#+@96B*'0ah'KZpXG*hjHK1Z@3i -%!@)%hN5)CmS!XfJ!"42&43d*FH(c'5`-SRIBH*-mTIjBiV0L5FDAK-KP'LZ@Imq -XDifDmbr[NcrY`+G$L[d$!bCEcK&`64XYSXce&LfrCY9EHdedp$-Ye(L,dR6#i*' -*bIba+4`d&c9!46EcB$+kN!$F,+$Ha4$r-$B`Zp%S#B&f'Q!T"L#E%!86J#cRL%c -%%V-HJ5)6U,3q9H0ZV[p9*!a#A8@IEMYYd%50UhJ465LZcA5h@YlN55DE2%em%BE -@+PP99!cR"6B1a#*2E!aM69YLBqXJ5$RL!*Q9%PV!H4BGa%r+f@`+K((beVVLFaF -!FUdEE)X"Gije[A6*F,S9acU#PbF2fi-#Yd)hIlj%KqZSNI9XHCRUbH')3NFHl6j -*(8fpZp9MDI8lqHT@I6PZ@XUe1YiJj,BV(("[8X#"8$8Q$&d%Xa)LL#N`DKR)K-F -8!#bkFUHcE"@65$S-Ki5(Pf0L"6I"Z1aH0b8Q@SiUAZNXXAd!'q+TiX-Plj@VK-U -*UJP%4Xl)BH8++`c*HYGE$&b5LZ[bee`*H&Mj!T(@NTNe'2$Vk`XVk!-PJF0*4rf -4hrjH2e$3f-SLa#,pLF93F,IRla5K!icq8Sf9KqPCmI%hM*`M"FXZThAMUJZ%e(b -SchXBD$'FQ)b+6*4%@Kf-8ZjF1`C-X*48#K6e!)c-C8I1BNMFX6R4%H+1PBQ10(I -N*6V-h0'Jk'6GD2DfG25BYJYNY$,F4X%88!A6%qm9f`Blhcj5A1li)#E-*eQB6ME -+p#$-fQ"K2[Lb,XcD)'(QaS6jB''G,%a60f'DTLT-%`Zc)&LB@6)LbP4-,NUpXe( -F1mEMCc'#`E)5$*BiI"ZTkB%Y#69p60CJ46P5Ubk&1+")Xb!S#Sd`BidiEiN-YM5 -Y'#R-M$PYJhh)"*bAd0'8IlM5!D2$L2-4$854[PB8iRcaU4#PU2`20(,dJkTF1@5 -J)dHM8cRLDmdraY%3'KiHeXE*U,q@Sfp@ZFTL5H(P8aA)HKp"G&p5I'!`VU!MdNk -Ep+%f,!aN+!#VA9-S!#mK!Z"+1`8J329MkcJ!9j`jPSM8!`ab2*69BB-"J1`N'Ac -SLE`X`6i[bf$Zci-fYI"bBNa%3hiJSZ[PM%,0&3)D!Fm94#+p,-,J5%TIDSZqe"3 -LV&k9UV%hNR90d0,XHX4ElMU@2%!Uf3J+dpTAMAc0fB3"lM)KJbpZT1LbRXfB[#9 -rd*0A63XQMBqb3TGe'YIVlF4%5$)c$9U$RZ8SG@8&4lR**Ke`dT!!IA,Qh0dU#bE -18K$-2d%`ZP41(DP)k,3)S0R)f$-5*jT+PXF-M'M)FakUYb*r![!HpX3cK[DG!-V -S!TLp$eXeaE1m&MN!X&&L"e2'Rlq)4PmU$-ZEkF`!B&Y[B!2+Pp(#h6+Srp1(%"p -2Tim"Y+a@4Hr-Uk[rP@Y+%T'a34JNV4i(##`6-4-+-r2Uh"K+$+LDSUDm1QD,4X( -)jHb!XdaPk1M8$4daTT3c[S`+Q5-CPD`d*9"4"1-ISS`S+m5kJD-cEZ#)4Gi@AMM -`M%B%IQQb#0b05+RFBp)9XRiXZ63fNH+#"6NF85,UDS*!@e@,MdFaf$+fpL#&`6@ -&Qefa1Z"eZeZeP*b!&KhJ+*14$F8cd,VD*kmlPZ%Sa9#B#'#ZHTbaE$qQiDHXHKe -RrM9Cp5K0'!AqC@f`83"Ua@6C2(f$&Qa36aZdH*``fr02U@UMP,LNEp5ZAC+cQGf -23De@q%!LHrRV8jhMc9hU'eZ`m@RDf1*aaTNPV@rQe&TNFjQm`EHLh"N60Fad2H3 -CTiVibRJ32kY'$09MXYaN((%UMMK&JM+4JF5Z)bl9%DGD#I(5AZk-C3(!'RS13%F -@L!Xp3)Y-+&3bBUI`kiK2kd)2G$q'M-[YI##KXVl'3YFe9RfM*Qa844Xed8EU65b -L5YmNS(96$Z80[M1'2`DTTYheXS[EU'2U'mfH',c4Ur'**$6JH1Dl,4bJM8cBL%& -#5NGZd8TM'DZP(+Kk*ZVbU8l+3qN)R2(%j25S&`Qb!"e4NjkB9![XVq82#H$jbUR -1)0Kj88)i2A8Kc$%(#f%+E6*C2("aQc90IE2KTZ$0AL'"*q*L[8',$d0kF)1E8Xj -dFV(20D%P6ppLmBYrrXb%4ZUGMPS8f[M&fKhe)#B*XG+f[EV*i'T"i`X,0f-[Vbh -[[1E9GMQQ1fV,RbM[e2KJQJqDF[5$TA+$p`1e"rLSLBmHH1*!jr,$P@m`3&*UIAB -8h3bV#kFZqIT8#mX8qd(SBTV5J3badfiQ8Q%,[rlj-hceh4UL*[U`k*9+Tk8kD8$ -+NXUPck5SG&iD)df3!2+NjG)RdRaTPV4)kJfP3S&3GHKS+"+bKEi*l3eG#c@(hJK -0$+d)PBAQKfD&&S9kdkRdkA4GHL#GP5j2*p1ldfI68p,'G(jk8hTYHR&kYMPNGTT -Vc%I0@HCbFp+mfhc@h'DHC(l1A'$HE*jRAQ+HB6IC1qcepZ0fUrf!IBGpMpeJIpR -qV(f0[F`qhhk2IBEIj'rherZ2qh2p"r`lrGImBrb6r2Rq6IkerXAqf4RqM+D-QJa -IaU'-l)b[-RCQl-qSc4LGdC@a)U-XBeh'[4N,-fDB3UC58iHTfV6,G-MN-Kd`IGE -8+hk-RpVbUjV)51VZCA*2k1kEj,Tdpc9bqh4h&,PZhAf$A%9hRb@h4AHI)YHXZeh -XqQISVT(F*ESlNGbCZMZ@h*Yep`9bhpIGDH6Qkfi4Z8EGc50hLZiZ)rH-lMj2EUE -ZVLChUqiq4qj*h9e$EV(ZrT,F%Ghp"EQlG2H(j&ETlJTbfhAhFh*0ZVZFAAZrl[k -!h0YeYi$FZhAhqq5ZeGhr)(H6lUiLph08&q2(`%)p`&dX!$k86`HQk#k*f(j'GdQ -SpNcG*6(DYkT3'3R9#If![1!B!rb+h$lp)`R)lYCG#J+lSU1UMD-Ue3q3!#$X3RF -TL-a,pH1[aDCJRU9[GBB1c0IG"R)rdBmhifF5(9qKSk2J-%p8SCY)"dDVZPkJ,S0 -qKCM*[%Gh+5$-1e3ER+AM$PAA+1SD8A@p5PdXJ(pRi4%54AAJH6S3%`#aS6NQ!!V -X0!YJA8aikA[dkBiMGjlZVL4hXhlahmJYd&e+@1RRG*IB0ce*YB3*[)6d'&3ra-p -S1R"H*C4Q1V"AGH8-GAfPSk6%NXl@A@,#p#%9XibMiihk!8VBk8[k`NNJDDIZAL8 -hT,[ra'jS0USIa4B@HNKhhb*hVQUEYhLEd)HUVLR8T8i!ce+A8GAe-qTU8h8e80G -j9GI2U@Z[[Uc[dGEIk!GqMCrTG#"E2d$#$ah5&dS"%r,Tabm`dp0a&X#r-2[(Q$T -N8@hjIHk5qP9G"G5e4,r'JAQ"ZZDTZSJGT8p8ejkLVPJ#S+9,%e8(+1LPdDSZ5M+ -53G@96ef&q[61%K*0GkH6kp$G#q6QkZi6j"lAh@CbkhAh&A)lG2GPFLfkqbUl)NG -haj!!Zd9h+GKTDHa1)IF'A34M@ILm@"%$J-3biR2GR8$Z10hp+EN0Z[YcFM(FM[K -%"a6R82N[1SL*kJj(9cYdB6+J2k&rB-#6V6Z-DN4hH-ZMqJ9QK(Vp`mrJR0BGASK -6GcJD06Gpj,MUH-*RGZ6QCe@+aj1NbPcP"X-*JRbp)6Bhe`TadbFc0k4Z)39Q%bN -`lhiQc&YM#S`i$HU+m[6@G*GCNrqPPe2PU0Q&Lh9#SUYGG,893rc0M9pG,LB*Ul# -*G4KrG*di)(D,R@+-@#BQ`[e-E%)ML'ZSVK1&iS`i+6D,9A"'LhcUA#FDf[[%8ba -B9)bSR%9PV(B0ViRDEVc'DB9ij@Nlm5V52X2VHHdNAXpT"r$kK@E$kh20KGF2Y&b -mrN-lK0FUE3#[-QdAAKZe4V`fDG9ir9G0`@ZceS(A69S6AVeD+9l$QJQ[2fQJm(D -L5DEpT'V5XVThm$-4USqVHq1NY9$VRX18Qd%bhLEG+aUNQk4jdQaTXE4%@K5k*,T -#IUNrK)3PmN+AT$BSITC3LmJ2AB*V%'9L*83a9k`9Xk3'X83-Lbe3)8e5!1-R+9) -p$[QN%5L69ZQ%C*0@5Ph56NQ$8TP*#0l(BN&m,Ne!j3)R6P61SX*#j'6#3Ua&KF9 -i'C8pU*a"C5XUEk,#BQa'j5Y8AZ2%LFTd9&L-6k!5338$*NVASr)++Lc'Pe'T3q9 -99'T3DH2%LFSS9&T3'Be+#T@h8!QK-J@"fBr+2k'b&*8h8&Q)bUmjFD,5J-T-9$# -!U*L2bJ48EN,PTj`i8AN@P3*8ISE+#P3QSE)-P9qKBN4P'LSXJ$@SX!"qU624qcS -6r4XadAmK*VUCQ1KILBRQ%420*5CkM*MS)@+L"iQ*PK!6rBfBD#%adGq*L@iR*PT -!6,5)Q1KIL)Qq48bdP*MS,Q+Lf6%Q5JI3E18A6&,[l"2I33F6q#2L8V(@k(!T$ep -!cJ0KC2#"B"dKqhG#pYXBXY$03$CD4rB*1PC4!q2P-V,LJZrG)2B#b4Rmr!bNp&a -Ya1Y0`9DH"R*q6Um*p2STaMS8iPQ3!&lc"Cl1$*VJic6"166"ITVJ"TVJHPT8$Lh -+'er8!"C9T#rUrd*(25fU"Yd'[I[lk'LKEJZpr!"'D3C'8Rpl#jVf,%Ee$3c,M8R -mk3QD6!K0dG$8rRYQ+4-TlbdKIMdG!jqK+MAK0B9H$AKbL$$mR&i6-+kH-$`VJBc -%m$0k6C)`18-AJ)i`2#9ei'9%$NiBaSQEmFURVZq,'AJ9m1Y#VEJ(Y'e'0'`4c@F -&L$bEcd!dS[P9F4k[8@)2AK2)Q54JpQKqRNAp@M0rH+f,aIRD4)bD,Pjl33c3FYX -JT#kGH9r3QAHCcVbVGHE0ejPhKFkm2p5CGlR1[0mMjPe*c&Y!c2YMBYk2L(Nr*1E -p#6([@Q,HkiKjja2crTkBp`CLhYm4mrjR#YbC&,Mh8Z$qG`VF@45iLbP`raX&lMe -ki*j%i2a,dYBpD#aAK4MlEfJ)MBUa+acJbR-BF)3UCm00@J")YK$D2a,DZ`RYr6T -D2cd53X5'jC!!'qh63fCNi`%-"k++Klf`PP&68dYX##!d(2$ad#Ua62Vk-da!@U8 -6MR#"d0"@%+mhh,B9K1c2SP'm8A%C-f48+1Dkfl)eNSXKkIc4G3aX"ZT%,KU14p" -`TdiFUMG3a9eY3-2k"JcNrLbDhS0FHrdC%)q0id'e3m+lM*UrVf$A,)K!r8aA50r -JR+A3ZLdRP0crl4&J+hH11GYY%ZXRl(+[0eShPPrB[IfaS[N'$&SIK$CXaX!!e@K -NHFCDaY'2G9[B[(qGe[*!iISe`PHrC[hbkMAV9l"J1G+AL9i(-A6ETBIN"l[)`d+ -JF@J9GFqZDSCM)QG596-'6E,X`b!"22$Kip%6*BS,!kKJd#VUX*dSdA*8JpJNN!! -&AMm#qBVF&)-ECX3lTqJ,(ZPa`DjR[Q"jJp1p28b!N!$ra[Q235iM)d-AL&fNE`B -Ar2KQ)(6C5UU1"3m%JNdZbCp4P)$$1FYjUj-PqdcFI&6HU[XP1VJZK[5%#LN6@D1 -jeU0L@6K3mkJBTdKY4F*ihk!`+UG!XRAT2UZB00N#kS$U3&8c[h#S#JrVDU,&V1i -hM(ma)1j86h*eIqEND'M3N!!1$$"La-qi'jR!DCRLiSAJmk3(H(![Jc"DYb**Vqj -9d'`K"b,03BF4Jr40`L"p(F8B'1DJQcVj82d$q)KTmB"1cU$!A!$fSBD#$!bk"i3 -Xj%da)DrH)#j#b,'*$FYAD6+Q4"$fX%&@E)2qZDpMJlAbe@qr`FEHClS"Alf)$3b -a$AShAa36VZiYNkr4%$(Q"#Y5JPSFbeLikX#1+4IB)'Q1`+'1*J6[*-Fb-HNh0Uq -hBKQTp'8ie*'8PpemJKY8VicbSd`@UPLN9apbDL&q[$%@`5!A)!D0-3N$4K#G4p& -FiVIKV8cbLL5iPiDBUrca[83NZ(S1$j%hJ`K+9fmBd"Y1J,"Gf)iXq-4[VG```Kd -dr4-mD+4qG%4h'%@HlJ#pQ!Q'2-528p%(bfSG2c!3"`BAh03iAQ$J(Pc`8909-b0 -AA$3X,VD5382rXa`X(19G4))Xk&dSSq)NK@eC!$QHSE)CFR%8Sij[d+"2K3mk+A& -9p`MB5`N)UMEA,!3#9dm1!'2*8"k`fHQ,2IDRQSN33+EI)e2XiL(NUqZ%F6Q1l+8 -"jCP0DYlQS993Z)lAG@!CVSb5@@BGX8`,"T!!Zd*XdkB2,9'!S3f%b+HKB(MJQei -9#rA("K[dA!PLS2la-K#+YVf0e1bJmK-I&6h,$$5E'ZV)$(3l2mi2B0N*"NVU$(4 -2%!2GVQ+Jf5S'![SFEVKr5*%IZUBD--a*$90BD&8rSL"Srk#%L+-jN!$6e!!)aFG -SSSqQm"!#Ger"0Ni@3`b9APL4bH4BFV',mNk0VHBP&,H-5Ja!'%ZXmH)C&ZF54Nf -$T@4KQ"CXU,#)fN#ZI9aZ`$#R8%q1`rbS#dbpcATY6M806UHH1KrP49e5dLUP,V% -TEcDV@N5pbhPS&5Z'-mVNJ9!QfdiNYKYq&YZYX&iEAYR6GX2'i1eL"6Db3116[") -db3jGb'KS%rP,X)L9G#*JQ2K,4h3PD1&e[qRdHR8NPaJ*JbKj+M+DGJB39aP!"#( -%mVPCP9b8U(#59%ekf*+Bp10jQ230eQZ2Ip,6T"pI`j2Z2T!!(5I91*!!5B0Jd53 -r&Ld+FL*A)0PI,9Jj9&4+Fbc"-a#CXA9`!5P#!1hM5qa"&kkrL!XjFB!J"d36U8J -B*""$MS8JK[6#CSIKlme`5d&!b5"c)Y3&r`1GJJ&'LJC$#6$TCEK&ChSDHPJ88j1 -m!R%p(KhM2E`)!reb![GES`0#"QbfNZ"%`B#3!*@'PVC%Ce3NR&L$03a$i0bMj&r -ie'adDk8BZ$C9XlePES8Kf9mcU*a5*D)V2*`@#AdRKSP*R5K*kX'B-c-4M$Q6$Lr -i#!qar-l,&)aAJS2a1jR%ZLlei'd*B$TCC()'3(lC9#16[8'4#6*1FQ3bfcDeb%5 -&T)1'61D"6&CHY0*4-+03hVTE9&2!!kFP9$IeB)[B)(rbLFU+#8p4AVDhjZ)A)9V -',a`qF0I,mL+*X&'2#Y&SRKGSU3S5[Vji[lS6`fl[P,[LL3f6H0`3Hf#QkQ*lpm5 -JQMa2[)`lr,p%XkEEFD&raSF*ChK6`TPG(0qmhQa1'I$"1jQ5JBNYA5j(r('KGe# -c[Dd8eFm+$J"@'Z5)IcLE&!4j5A-aC'PF*AJmKbke*)35'f$8X`fLhSELq`*TAEe -Jd&IGJQ&`c#HQcaZp[2E,iITd`fJkP!DK'4d8eG@T0jiATRZZFT5GL)L80,B)a)B -(e3[ADC!!'$a@f96RchE$2Q@TVm1!QhA#dR#CNf3qb-ChP$)3H32!)0[[!bKlil, -5mTlKQ[5Re9V([+X!$'Cp%d[aU"Sc(SjJU*G1P#brr19LJ"-,(LJ,SLRcC)C`0)G -D*Tcl,!bmLC@UE#AlT3qA#AjNY'8aJbB,9&CRF!6$MCS#"0LBk"4+5&l`!US&e&f -6(&NNYmV#R6'2-Mb9(qiN49*@+rUTUBkX9Lb9QcCpTq$`JJr2k'V&`L#JX95P9[5 -Ve!T'RdYU49T@5JFAV0Z+KVFqM#N"3IkTk#SQC--d9Z+RN!!H$"%m1#XP3%bB"hk -#X%E)G@C[K@X#`5-Q@3'#9%5"J83#3f3!)-M-!3A-cH39)PF'KH%@([c*Np)&BLS -HGE*%9bH[k%RjlHj44R8hK9+aGHYB)cGQL@mH!aSemQEBIYF*2,BC5PhQj)"MkXV -Ve$G6-5J%F8hXKa95#m5R&bJHaB-QK826VmklkUKGHDEb(X8HBl9Z5[ANLchaIrG -L"aImT+"ljMJ1@"Ed0kZF0T9M8!'lHQk+P-KXhq5B#X)mPC1[FXT86KG&YYkHP)J -&-j!!QAGG[0+ai-0[Id%9dDJ"16SIDpE9VY"eC8'!@A@3!"5"Pi4re0m`Q*0*(r, -E(#ad9e[5j&Mpr!b&Ijc"(jh1)#9d3!rk%e"23[8fT9&FiL5UJ1bhZP%F$HrL`EJ -ff"`-++VjN!"L%cbXhQPfUQdBrVX'`iT[%kHY'cIK3GH)YPCfcjM&KKf1E4U3!"q -AcXT-Cm4jClB)9C@lYSV6b9)!93`Sa%0lEF#`EAUh#Bp1A-APXP#iMSC0!T%(L2r -mU0M&kHVbRTDJG!BhZ"jrTP%1&QD'$F2-$"[+9-jQPE05VD69Y!8EG[J4m[S@1jN -0VX`LF0f#L!l0U+jXiQK1#p4A82F9[IXj2$kF(k4TUGl+)#Sj+kiDmHH[iLl8b#Z -"RK5Nf%2SHej%UN'pL05eRKD4fM'e4D4De)[B[[EE,b)ZS)prZ*DEam80jM,K1e4 -+iG)CqT*Z3QFPqAK#j63G$f,dMb(U8pd"M+eCTIcd'##a4Jf+65CQR%aK#JE@pkS -'0lE!1'M'MmRk)ed9`r93AN`SSG'83ELpUTN&1P5#a`Mc4&JGE0C9k!*T!QHUUDU -SKlXJ`2T0200G)"8R-Ye5*#'%M&e!IVe@c4Hf[k%1aZfCR$AM)ImHaf#@hRY4d4, -UHB``h"P2B$3S1%JKY9b249IqEk*PC$*iMf8$N!$%#q`jLFAi9b3@iap(&ijL5I9 -NeN$QKBDjA+-H6,cRJ,qB3*5C3bCEeCGi8X8D6DUPR1k"dGV'Bf!G6d*AEmM-S3p -#XM#aTGHBf0+q,"("#RNJLVdBQ10YU"2q4bZ%531a2jNbU,%N(UCMjH6aJ%ZBUkB -RNNBX-aDem$#5!2aLmLcCYkb*,0Qh,)FAc0pM[ICJEdpCXJFI#Xk5G6G`6HEm)a1 -NIF,rqa1NqBe%JV4(e!R5A[8r+d'Q#a1,-EHV&T2kAb9"TJhrTa0NZ[6r9)*FX$+ -4)"HF3i+FBVefcpkH%Z3p"ej2JS`YJ*K#(Z6(@Hp3-!Lh-U@k4HQXkDcjq$jNP!8 -'9&)F*""Z,$Bc-@"5l`39NqBS$L3$5KV-&)T$3AEf,`jKURKHQ"0#l%dQ&LcGK!A -le-b5q%meL2KJ1p`-Ci1TbSVrJ%8*S@PLFc3%ba[4)a-e4Fk3!-V#$Xd+5JK,+#& -82%"6UAT,U@"$SM*GUEJ6JH&i$Y1ck-DTJZ&#f6`F$aaZ91BFXN(mQBP*X--''aY -P5KkhUKPp-L20H*NY!BKLB1Maa%0[*K2!qSD,&i"dqTN+S$rRiJAJR8`!cf65r@2 -q-B8Tck`!TV[a0jB!P)SUQeC6lkTb3*!!1L1[hdZLYF#&D,fX2$I99rcJjZ6FqM( -9YbLGGhB+Fi+"rpHF4'r6kjT%h2!PGXB0A`ALY0V`j@h[E[L5*a',(Z1'3fEVrPM -dq$JAqK3mISJcT0d,U984lN8XB2hmLer!KP4X!IfcUDL`H1S,!$+rapiS0qR'idM -VD)MBQY$mbiX[+0*McD[b6H*6Fa@'5Dk6&([E@4Ll&bZKZYE'9RA%9X8)3QX0b"a -rJiH2`V6dTpIJq%!'K(E-KJZ6(FE(lki4Yp4ceYXjUaNEAZ$,$aX#P"LCm!2%!BF -8jmH'khk*")L(eZ8-b!0laMjmN!$i0"+8)*A""E-@%XQ'(p8C24&Xp&M`$H+(@5I -TSR0``B0l,`C&G`6hha4(N!"jF3Kd3SI+*Cm6Nq2!R#j9!BRmXD#RMc,Ma$r"9*X -Sd)mf&MmGGIH`3(0mJE@[Fi&PXDfmE6dNCZIV)K#+)Efj"k62D'*hRie2E1)c#EL -l3h%%Rc`6"2rp6"c"[4H$!)aX8PE2Up8(Q@@((Z!B$5@%MZ,G)3*P-5&GC1#V%&5 -0$i&q)0h6JI%*qGlEij1Fr6SQ18BebHEZN`36c(Zpc+fk2(0mLHCe6fiN0VNP9Dp -MFP08Nf[V2VQ$h31`BA`6p$Eh0-'$h31`i4mhb6p1L8qbr(9-mPR9*"Yk#-"Chci -4pca"A(kSTm[2C()c&mFR9rZk%r!Z(&k$`bML#(-4XSQ1`qKk83$b'3*"e3,D[fe -!Q%Q*j@,'lS!ALrpE0+KJPj0$RT,Lamm`+Gc&NbX#!!!d%%&%3e)$!'EP%&8,0#F -!BQZ6lq%XZ1++Zd5d+X%"84'*d%b4c-ijZmH`d6)e06-"!B9%3+j(mASQhl1l)#) -UQTQ3!cR@1%dj6Y2A1%eI!fCP69qC@D'TSC+Tik5CB`Di21qlZlKFMih0ehIrlZ[ -phIrl[J%G9!B!!C!$!2%"%5%M)HB1R1q1L)Vkmi+(K@$c12,2*idE$&F,*m,&`#A -!jF"4Z%+i)EGf'H[6Fe-j6&i'0lC9+643$)Z502906FHhUi(b,eTGi'6kNpc)I`c -V*aR9,c9li'Mk[r)PrPRB9e+m@X5r$[ZE0%Rp@CXBD+#$j560(cL'6TI2m"r#jNJ -Me3!q-q`EU9QGUldF'%6Rb5@m9pJAdJ2UppV$JChd1lQE9K0i+reFp[&2``C*AR@ -q9KTi0SSq)6r+(`ZE)&eA6r,aBFp)9pAIDFm'RUCMjBXm-Qb8K%5J24LiPEVP1+d -Lm#%D+erM6iH0NiV9@ViNE+Pd3rfMGL+`LLk8EpEU!fqLLq6Eq6r#&NJ0DUM@(VL -4hL*IjRH',CD@U@em9YKXDB-k3fX*&'Qfh&-,$mb)SKr,QIchBEfP2HTZrN(BVkA -YkSGDAQ!@l5kRm&I#AT*fURr9%J16D9rjIHhE`"hdRh)ZrdhBF#PIcH&p`[iMl9A -rS#d2A%0IPer6AJeF6hmPrj[rApJEdNVeH5deX)$qPlb2rbAX4HQ`QXCI#2ZlP+l -q@6XBQ%!(b#YiBGL9*k6(eHHdeB&Vk3@jKhBJF$pp6hk%[aXf3PURpYH1"(j#hj& -$q%GK`k4GkMBq01`Yk6EeEHf1`%0dL"bM039ZTUIN2r&cB4(52HVpr(MB-HP*pEb -f+R!6lC)Yh"-@,!RU8HhH`#dd@RCU5U#CZN4CG8PK9"*9&pSGQ[+qaR8qQ9rLcIa -"[Tj(D9&ke15S5e(083p'FB24APe8&kp0E"bY6jTm5ABf*Nd5T%-'39,K!JeE+'c -1C%%k85G)*Bf#C)F,JMX$0`P%,`)436'3!2a`54-YcNP*GSY6Sd8@CafGC((Ua&q -L)%iQhNLKJY#Uf5K"[N6mC1)RXVP*GN%bJV0@,BM9JM4C&b6G+%L'4PAlVhITD2( -$Sf[cd[25$ZGPL4qUcY@T"H,Zk-fTBQhQME2L0HI9ff%maD+FNL&QAFK0&PI[68r -0fjRH)'j1cUa[%22&9#QK3VbTCCqV2S-JGH8QTqp0VdGpGa0M&V%jpDE4452jk(Y -6mX6ND&%Z5%r06IjrJM393ZRkpDq+'M8+9*0&665+QZSdFN3+X@E*b%@0HG%SZic -N*eq#)aNeJ4TPd4LYF8)ebT*Q"(q##6jB!K%TPKZaJ2-`,!&%r%KXT*VCS8kK4MD -$+&1SCQ'UQ!5+#p`d'9USdH`d-SD8#BM)#@j@0C4KG3a6P%Sla"+#@@5dJ1Y4)d8 -96MP9+*8pL,RAFNUNANk))TA*JK)(&#Hm6,f@S`b"HkNFl8!d8fTa-+"Ha8A)-K8 -YNTFU4ah6[@B*T"L'3QE,`8b$9hCLA(%4&*PS--F`P@![+P4N0)Z(-B&ZQ4+4H)G -i4pN#b"DR68,mX"r"T,Ia8'LeD"#V,8j$04F0+L@JKJ@b4#JbrRFDH,9-JH9#"#+ -Y0T0C!TQ)qE*BV8U'DYN$&JE1TMZV554MN!$--5J%PB)6-"6#5D8'-eR*VQSVFj@ -Sf@,9kf!$&-bM(H*Cm4NA@)RSB4iXC5+D6D0-"+69#X-5$5kEC$JUX[QL4*c5a3i -)hkFN1%*(,X*a5Za)J8!P5c3CTbb(BE0`Y16m0,E,CNb3!)0Y$-Li,5Cl+NFc[Q" -a6Z)1$R`+ebCS8%lCd0PX$aQH)TI(0TP+$Ue1)YdT8E0+5b59AD*M-ah5f2KMYcA -FRMMCUC!!4)"MeVLU5)5L'JK&2Pm0HE$J`1#+3A%C#!S1#c@G6'Ul+bSEXEPUYX" -XVPQSSRJBHi8UCXR'MZK4R)aSdp1P12Jc2BU%fG&N&QJf4%*bJVG-0#Y+-&2$kPN -CI%pCTc,a'6Q'c5F!4(DL['#'-++SNKLTKi9FPCdL['1"dcL&!-8&H#3ae@Z*YLf -41JLDkL),*3Bm1(-@8@@m&+H+P+'U9'4H)@c0`3c(5LFU))1A5!0P(TX54Q%m*)B -+#+NiQ&TFC,k#P1N#+U&6*SG9*V0$QcR'3F&&MaT&AQhNKQVK13-R!6*rY9(%3L3 -,!N(*MP8E&4G"*8N2D2)j0XbQ!V!k-89fBJU4%JXcdN)-id2iQ6(Gl#)mNC80j0# -1%8h--AcX9E#0(3(S$)9`)c`FiLK)P8CXVj'Y&I#jem0@&JmMQCe%$KGKLJ3V4i1 -CPhY9"U5-J)4'VmSJS4Ij"!F"8+pkMA)%'H"'d)d!GdBfJCbi8@CRL!(&`c$N8f` -'F9i&cB*l2@aP3d,&3E!8Qm9Q'FNHQ$eX"Q%9604cJ&a-BHaYdmd3MFPNMV%*`Ud -)4d(QE#MD)5)U++BC-0k'U4!pU&cdPRUIp!`++-m8hUVde9U%R-bmK&4m2@MK,Bq -J[@C#8$)bGfa25ba)cYU8LmCCFPkDI,3Mp%PKpHCMFQCqDN(bGLZCJeaXeX*8"#[ -)3JXlJ[9)a&P`1B,db*IblfpEBFP)cGL5Qj+DPlBj1D%JGA9U@Pl'6Qkk!2S(jLY -PN6$`!PLqMZ",XY$#NV"'q5SX'fiX0+6)p$EPk,Bq+p)5YkIPLHP6iF*Q$[6kT)& -9F&Xadbj,fjVNpqlS08@m*`Y51kE*jeSY-5[0+Q(P%3V@11+"rFP#'cJFkff)"m$ -e%k4eVmM5(Fr$jIZHLid4FP,"*Fp%2YP&+)64121a5S0-GS@@B04YeYkXmdP[GTV -3Y$HVS#`8j1Y`p`[5DT4+Bh%dX8[JjX[5S9+I&!NZN3D#8%-Ab&*)!Y`KZ#cCFk! -f269,V)M*XqB#L2(Q"I2j9MN$mprX$Hh[)qJ$KcZYET+2VNf"K&PLRTMfAQ+DL"C -pfDZ*&F%%UID'I+jPmj-G(-@@'*1&Xj)-BSXD2!fX2f+X-r-cdUSDa26F0ANKU6I -iI9*c[R8#+!p*IUU3!%j92Xjqihh5MeMmL&,9rR9bm+i&,@bDCdp'9NL'Q#)PCTB -VYBd@RC+i26Fc"%FN*C+d59MqZ!AX$X&P#G)R2@925$[$l8SX5!e*h"f5PT'm2Bp -Tehl-![T+S"k(kbe)Zl,NSb(YeJ6dR(!i,cReBN&bHZlfC"6Q8K+6Yfq&NKpIehj --dTiHj'SYU6-aXd8q,UHPjbARCPSr6iVT-BPTh1aBA%P-Bd`YZHN*'DQCq3a`r&+ -MrG)!3Gb)6m1TfY2cI9)F8ZM6ih`d6YAL$'rPNKdAGf2[aEcNV(5a)$N[*b%[-c8 -[+fA[IFa6jBNY+5KA[T@APTFeGE$dbhIPJk9ICTQeAaBLL#3,l5F$eJ0pdNqi`%r -Y@K`q$-@9qS,MLUHQpaM4HlI`jUImUF#ER`kEYCpH4A#",,5IKQ'p&[%(F+pVF8h -3MA`3&qll1'l&2rUia-S`TI90IVVCE!9!JkZeRq)BD"Q-qr`d%`(Z-aMhSDCJ"F` -,Ti#9`Hd-V'4Q``f'kq@l%KG$10lYl3D[QD+f8"XFBe2E`k`0cNF`$1i&,DjRDl@ -aq1S@&qK3q`*6Qh84VKfZ&-k2FF$FZ$kqMq+'rk[UjZF5l@I4V2eFM4LlpI0T,5i -*Nl0pcm8YQBE+i1FXlHFdc%HYpr-DZ'JY&PaM)9UXehFq0UD5YJqdRer3BN8YY[D -i5DlPCD([ch2-V@$&c`ZKC3+#5,,3[XE'r2b96rSD'r0eZaDVbZGh,DJNfpFAYDr -[d@*cY&LbE6MDQa9k3+(M&2UQ3Yp4k%F+lD[3"S@qT0$r9@JlShk!iUY#r3VpMd) -r9UK6S38+AFU`(e(SES9qUp"SK4j8k$b&HKM((Xamc0Bj#[f,3Umc2&fKXdNER[S -B8l5h,!TebD5iE'CM33UGcpJ"HiG#,l%jYc25``TGMVD43XHMI-[iVQ%kCLKdN8+ -lf-"4KIj*SEp@k#b&lP-SFQ`I9N+jQDd$fAeZ++3iHTP*A+23E+ET8i@Z9'L43Nm -Tp0q-86mQBTK#cbVdV`SYCU,N+r5-3JmVG+p#(e6S$`VpLC&1-Z'J0G1Ucmi@jjL -JQ2bH3Yp5k2F+2DE3Z3UGS0$I-jQkf0&IBc,pR3RN8fJmZkh#lSR0k+I3#`Up3k' -$Q8U95C!!TG$Rf3D-91J`KES9'U,31S9H9+M-6U5A3YpAk""fBHaP-c[hiHaZh46 -D8k(2XH&&6&DFrMrBk3a8k"rC(CBb(4[BR3-8ZP'Kqa8k8k&$&IUC3YFVp"D&[Xk -8,@6rRf5Le,+M`@9fX4ac2c[@i`Spa(B,bUi`1D$l$pBXXTQGi&jfbFFBkT-+AD[ -3rJae(c[p+RC`3"fNd,F9ZJULXqd*"bq@H`VB2Rh&N!"%aRSrfirI+A5C3NmS0%+ -K[f)A!!ZA3NmVG+`5p6#RDU$B-ccE@lKL81Q!K2Q'Q+E"YF2cPrL((%SUlT-ccZL -ap'[[RK9D-Q*GVp22TikeGfhkXZ'9P!9"rBr-ZrM'bXKUTc+`VIHH@68AeRDlrN, -DK++)HlkZH[rEK51(ETY6mIUDZ,VS,EmXqf$hiXiH"lilqH,KmI((lrqU[Qrbc3( -$GXhFqYUV8@j0NX0D2XkBiE[bq+GRrhc`LBQR0[pmicHj5mHmIFIdDrrCqh4MX2$ -MaJrcERRJh8HqH2Dr#Rihq[bUrlhpTChrH2QG6qEHpArr(U@lc'pZq(hQl&ZI@rh -jShp2Ifc5Z6rplF3rGrcac&ZhrI$3(jE(6MjkldqAIlhpcSIIfrrpeErXHqE5X5F -rZqQ[LBZD2`VjjX&IVIHH9h*66CZEjeS$Tmr@P&r$I4CYeMj$#q'cRQ5KIIB+eYm -LIKjZX"BlA*E#N`"TPjMAQKqpEJU$H#@!p0RiU94NJiaQEC!!hAGdN!$)Q%$TS02 -D)(b%-`+1$QT`""93M"EZ)!9ZPcCS&kN)C'Ph1&`6h$S#j1$3-Sd0p!A($RC8+i- -ZD)1'D,&*CHX3e&b&NBBb,CBKL@NiU9@*@ANTI&YH@Z+6D9PjD@a0f'@EblCaSK1 -R)-c(AF$mdaUbd$i0`,SIeX[J+V6)BUJPGHB3Z*ibmR4KTR(Ur-kAdIrT5Zh6,V2 -fk4l%)q"kDT&0PAN'CaV,D@b8`fb1pZP#,6+QJm&j-,!9keJV$6MGLV4ZILeb`(Z -9LhXQTF&Z&l9Z@maDY`E%pm0Ydb)(Qeh6eSLG4Mc6`QHh&l9ZJ9VNN[,DF4FFClN -P)che2V4!ZlR,f94R)KRlh'r@2XI[HTqI*J[YFa8hAB`BTrlj%5ebR+fK1JUSFA# -M$'MT'Hj'XY8TLI[ZJf5IpjfkC)-Kf5!%S@5KIBjmphN2a"#TPedEjAG)*MSNUr9 -jiJa-X"jl-Y*4BL"Yk6d&Zbq5FK1+6@6S'&Q%T+CPj+DQX`&aUfcEM5'f5HNX`8l -$0!La@qXee+ce`VRekJhA9h1M26F+%SmDlT2FN!$0$4P(!D5-3XSFKF,U+,6B4U& -40`S*f!fjh8Mc[BCUE[bB1JS*Ga35lLJNh&'iB5aDY@jFbihfQMXFMK$3!(1AqMb -a6DEAc,A*2'hAM-P06!r"4&)iqL,FE+0HF("+62rAYriLfDapF4K"Gl*!A3Xl!&E -l!PpH[X$&[[K5Fk[%eZ$R)$(9D5TViV6*DQ0YX,%fD&mXm%RI"F"Gepc&a0C3!-A -8)`4"FcFj8XP4NKNcN5V+,C*q9+fMKm$G10PPjPAmXVDKZK5r4paZf,c4)&bRlI" -UQi&UkpF(VmDRSSbpF[#U4"Dm[DiJ,ad4hjqAP@`,eq8AT+8cT#eTZ53iZMSMY5# -0K$lTHj4B[Zm,pb,FDh$)%0phJj[MZr,GarGN*"GNT1hP@r,fT*&)IQj94PTQ2TF -6dR*6q#T`[`IP3GPe6`%+Jm&b`AEm(LLr[4SAc0Zj"`RTbFc84",FRhLB8H5M5%f -fd#FP'H'`8dRiQT)8"0F'"fLG"(L@K'mT549`&VK0F!GmVZmq4T8P*C!!DLYTK1p -mdK#qQKI`C*l&-rKH*@)96qaBGDh$8"j2Gk`,pf19KH%TY12VH$k3!0)k+"&EX-U -e$Uq'6@8)M+)P)@-P[3#(G*+%Y*5%a*q%c`I6MEjMdc[j2F"+"Ri'CQ$k&QMDJpK -+L9R&SNbHVm6)H+UHD%T42+ZBXZKlf$AbE&%+N89'Y"dZRDFUKD[",3(5j2'Gi*V -(dj5Z*m%V&IHeVBrIMrL`#F*a#fcQ&!T1E$Ubk(5!cZRi*MCp0e`D(!T0dce`D'& --afHckB!$dh("kGem`EK8"YqT1"-i1HmjITpR6J$,[fr[6%c1fjY3N!#FQATaRbf -90)KRYpU+84&Xe*U5jc3j8R*`5Q*Q"ViI9(KfCf6QNGTYMM@4$`ZjPp3Z5)AP-bE -)KeLUQj0UeZEJJmQFhLBdEFk,)#2$c(R0*mi4T$8VC@P0$P`Uh$UiBMLr,1f0K%2 -bh,Y!pZc0R[T05KdhZAZj5L[*p31!c!rV61Ak)4pNY%0q!!cpS8Z3!2EfK2,qF%2 -J)1"HI2[E#q(f%Z&+i2"02LI5"[C-90SJdPNVQ1aIRPK@*0jD*R`iQ'G+dqD9J)c -fd$`NYAR&H(6K$9R+k31(Vk)j)f34BZ9!V"b8jR-J@Ni$4"+R)P,T0)K8@NQNH4& -3r%SVN3*"aJR0!mbC&bT)qr$jBYmmZ#3iL,B2Tl82FZf$A2Z`QrZDC-qqLdcaZkQ -j1r0DEBYMjiCf5&3@4EC*-KFeip`$6)5jHl$'JFa&ShVZUi*d'#9m0fT'ph#Iacf -!F6`qK4(Kde%[Pk1))A#(&M64jhDcDCQ*0EkQc%AVC@iFY,`"$@MkZ3ZKC3KM9jK -FX,15X-j+pbQ$iY!d%j!!FZCDTQRQ,UcafAmQ%[M-0G#%e(!B"hJBUH%`$["`XH` -T#'@-Vh6`XdPYU`l,DV2GfD%+9F6-AMC9f9JM)Fj%df"QT#!9G*HP!Z6a!Z6a!UJ -Y#)FULqd+Q@McCKif56kfr*'Eh((,,JH1&A"mXm8"(ETh5(3hA-L-+GRX'c4+[SN -`S@RIi02F0qdJSDElCU$J+6!bjQpCHGTBQ6"Nich,k+k-+,G@20BRC3HC+XiZ"IN -lN!!"HV2A#Cl8IMBBQCQk0b(2HYIXI-GGEI51!mr1k@#GM5p)fIM+Q2f"i&RcKLe -6fV"0XS,T"2a-Nih28pQc"#QeLa#&i18ATkferaj+Kf,LET&pTaDR$#@+QE4!6)[ -1bq)f6ZG-2fKEHEAk)&jZHkHmNS-06mT-&&0L-P,c@Z@j'DLDCL#McHLV4IP0-,X -)CU@8-!0IIQHJ46XM9)X5R4hT+Q4lAUTTbkjrENGE1L3AjH'-e-5dZfhjYA4)JrE -[,,4(CUh3SQTY'TkcDZM)Q)cq8AP+@Z0F-0AM''[CUYT8cF,[GV23D*h96iXU0EN -,#ZkYlT,ifpjP&JjU0K,&l&)YUYMN,N4$TEXNr[IZ-KXR0K[PipRGY5M(lbCA#-K -m#[E&`5q'm5-*#VF,0@UK*4eTB6B1-45T-K6hE,+KMqM3rK6Y'G%k4@8SlKXk&!i -jGSATIIrlHqFid9$Nme[Li8CU8BG-,r88ETiMQpb#GXdYD#$H8UK&K6Y0fJ*2AD+ -k"HhU@r"Tr4Dh&T9[dr(Z&"e2EE*DM!ECBK5&&kGU83QYl[18*Dc&U0FA!qJ[RU9 -&jE5kce1IY"DMq(%RLNCh(Y+L5"f"6%lU`Q'D'i"UCVEQR[mNQJ5DHmQ6D)*SlZa -ldGc4h%RhSYfPZ3H&S%'SZ3H(S+QUZ30$d*!!eYap-NrYcNK"aC5D9T!!Tm6X4K% -J"@83P%a5@@%Q6jE`+l,VNG8@2!K6bfmSdBqJ#)BABmM(YQ6NTK6J%dPDAN*L'Ri -DY),kSpD#2DU(h3kNUIqL@Jkkl#clqma5LlCdR9PELREr8K5hPqB,d[)FfE-m[mb -hK+98@hTFLaT36X8Md%NVY!&INJIrI0+!,jr8STE8d2NS`pp,EefKrG8amYG@)li -9@Pr(5&q6NIA6mSGRGqpr@RBeML$'X)QBLHZ)+HV(c&KL*[8NaYl%6$BaSiZ*m3B -b`j!!EQ8X4UV-p#)Q))ZC9'Ek-c1!'FDkfFL-KCP`CYL%jX(%L!CQ'TKC`3aM*$* -'iTI-K",6`TPjKCPaa,3aTQf-Y-(26!ic3iKC9N[-CAE9bdbJbr1)UAfH'$@"'*Q -TAlZ5Q54L9VFc`ijJ04YBc84CcF4GabDXBbVAX30ka-i-1ij(8TKKKrJ)%rd!%hT -r+62XZ2FciIE2*qB38hEEF'Ek--1B([%b`jKq`S6BaBjX&jXF`TL'P$$$KN2BPS3 -`PAZ#Q2%``bEXBFSbf@&PXXYNXZ2)A%"-&Q1Aa5kFa86-BT1cf$&P-B(bQ%"jE*2 -b,M,$@1aQ&pM0VVfE6G[1$QKl&c2GQ@&UYNF5Nmq%cQHLl'##lMM06$icl$)lf13 -GE2)1PVf5Q5J*M(8#%b+"LC[!Q"i8L8PM@5fGX8jRLe55lD688ThEm4hV&EM"eES -@9+eACm&jUR@p1pcBDYf)JFCDZ%h9qX63DRe58V8H[k4DpjkZeNHUeAS3J[CaeAV -Y)EJ"F21UpDT5Z(biPGAk#8`mF35ZUeT[D))$iiC"F0P`8(!l[U2GAJ,A$RF4,J% -#'(@p1NRAkaTdr6,9`8$A'lTdrF'HZLlAkVVLdA8K80I[23fATHY0IPhIh!HZRkl -rLF-"FC-GcJ)h50GA'H$!i-RqF*'krVJ)PkVVGhKe2E`8$Nc#RiI$B-BEZVkR80H -c9X""84B)@9rUHPk-VZm'B[j+A8r%iL!'$f,5`3@kRPDXkqN3,"f6pZA$B@$046J -XZ0fSSrHrV[FckShj4VdZbDK26S!E!8F@5ibkS46Z#"b)%h1-HP'f8Cp8E04(Bj, -h$D0HBc6U$a6#$6$U$hpTe2fTF&L-D6,UCm$dc(bM(P3#Ci($K!!-"%"*!*!!QL& -!-`DD3@L'3[%L(!JL&)SHZ2j`8#3Z-1SY)K`3@X,KBZ$!S#A8U,G"J,CDZ"9`+q% -J40YBSll"$lF*$N*[J)!E`+aGKCYRe$GLdNCFE#-8E`6#4LKIaZ%1`AA"JF&P#() -C#*GI-HUeAMJ`Z2'm86m"a3f"4[ef-+U(!$IK8MH0-qUP8&B+`8Xak5`%28X##(- -GM"m&Jj-3iL3ZFa+(HK8#AqeTe)["j"S'Vd'`DphK"K[e#J2FD6J`Um#&+U#`)Y+ -SE`@MV8$FQJ)(T9Y"9,&j-SJbQ-Z$M,U#`lB!)HL94VfdHk2q8%UMIPG@SrjJ!Pa -5SfiCdDJ,Ja[erH&`r4YelUr6HA'GAYd!&`2A"ql,1Pd[JHZ##i5,V0103$4ki(V -#$BGl!fi3A+mk[A&*R9k(`FP0GFJXF)2Vp%P$kR5l!@iPh20`B'aI!$Hr6KpYJ3Z -Ydbm"m6)QAZi1ekp1VcA#YF-"i3B8hNL"J`"9%+BU(`j+6hMKXZ$!X-&HTpHr8UF -r#i'Z3SKL%Hi3A#%FQ&rMF,MFY33i)&h,VY-V`,KL"4`Z@`(Q&H2Up)I!j#j-H"! -APa%S'$4$U4N##a")J%"EJZVdGCL`(m4$Z15Kr$Um#B(A-Ur'C!HGaNZ%q1412(( -[Uh%ZSILGC'P[KGj6dl@%Cq0YHrCD2MNH2I+SKLVIjhQk$jf-Cl[aqIVT2TB)dGq -1&c6`4QkEI+Z&@QU'B1,eNAa$!kpYi+-lqCL4r%pq[V@'Ef"-&XZHrI1j(8`QbG* -D[i8aPPh,FcLL"6lAdm-*D5'TV!KT53Gq83Gq*66SrUUFfC!!CN$CS@J-cDk[iQ+ -lH[j'!lmeL)pXi-e"[$eHGUhJ$eE*,S9Aa&ZNeK+1*A8KB6A2bUTE1IF`'B8%*%S -Lp6Z*jX[4Dj2Z6R2prkMQU(U9DDkSDUAjA"@[hm4[a22k(2iR4@Tpc1ATGZa+NZ` -"emN-Raj'GiSL)Sr2mda#TDdU+pPmq6`j#32HqVCT5Xk+,*rMHA!8r8(Fi$A0Bfd -N@lLU4j)H-f5f@jEfc`HPF`U&(XDMhY8PTK5P%SC5$SZ4riV&b(r&`N6(84a@+aC -P8-TS,81C#T14pd80VK)ae91mZd1ELX!QP(232L-)IBLAmFP&0JJ55VeEk-@DL0$ -IBS3"SrE@`'M'5J+-BTE`+$ppJEq-6*[+ICZi2CllAZ9Y,2FX--NpN!$4E-XqM6l -A-`Q1M'a,#j(b+C)@mU@a[#4HMMk0GhEbSNk&+4Y1[B*8R8!L"R9k!(84hQ*@dm6 -(a21D!$kTM@rXj$8bNID&'PFfG5KFEV4dj'"6SUmedY&``c,Z+q'0XJhJ)4'ci8N -ek*R#MM01MPQ1RPZ'GQe9["a9a!q9m1eHIUL0(kcKK`*iX*HBYjPjL4MY'PZXCZB -a4TV-c"PQEQ,'c)BrBHBBc!UqR#hq`Xc[QIQ'QEma%mE-&elq0Za5YKV&12QBf3K -6DTE)q4CCchGF$AS*r(mXLGT)dM-*k$$6`"[pLQ5Vhb8hZXcjDlLKaK4BM#50!G% -r%Zre-k@ANT45(RS`3HrNBVcUQMb5PbJ55`JeV&FI-%i66&p0a")q`d!pk#pL5d% -aDeILbmXfhYLJ@#Z!SkJ!`[&E,VUY8!0K`Kj`F$FTdAB-(#SlF-V!ehX-dQPHGj( -FL6ecp8lN!,kpIJY[kq600AbNR6pJjpi!BV"S0V$d1i'8NdR9&NGU,-kJ'kQaF+N -j"!apMXG-epA%c1'*4VSBVjHdTGR)Ti4jYek%qDNjk''%jPBGB)6N!"`(%a4A["@ -+(,bS(,8$eSrNMI'+!`"((,aBGPVDk5R6D*Ujc#bD4LS%l'DmkED*(C[mhk*M9l2 -pJ1mPI(*0"aMIJMfIkNJ`b3GSRYK9DI*Tam'58VB08!j0L16KrQAmXTdM5leXjlG -Hjr&qIQXppp[0MVBMF&M,`M%VdNTDdSTNUbTL#%2$GGiBS$Kd5@[4R$'fmdCl"bN -"i0cBCN)LdfD3!)CZPCAd)@(8AXT,krL0%Yj@a&mZiNJ+Yd*11j'ccFk[L[K8k+L -"G[ER0Q&YN8e'h(pSM@XHRmTf1qeSfNjpR0SKTEmMm8C1ipd-CHjQ+(-h`hfjflG -fapeX%EQESI,G+ZA*5PHV0&cQCZq"SbDfmBIY2-M1D`l`dDL55l#f&Ki)JN1eVIV -'Cb&#bTj#HSq3!-5!Zf%5b8fcbK,b8FR+a%(#@i8",pY04$Z+D5)Ib3#4icEE$CD -KiI@RHC[hY`F*Rq)jl)Xe)`!51U9NhSRMXR0l!$'GpR)if0,effL-KH-P2PIp[06 -2ErKjQjqImI-52arYJ-"ii,**F3hR*UXZde@#k@UGkDVBG"9%1eD@+f,RGAC&1jm -83-`$YQ3j`HH+95Y*1)*)12*)HIJh@r((@r(M'(l'b,6lK0pjC&UPHCG))pAM(A& -fIX21f`1)UEI,adlcCVCA$`5`(5-(MUSPe-B$SD-XLA#qV6L%F%,(X%1&6l5Um1m -UZi&6Qa*"f[)SQCZ!Fjbb(rf5V8Iqp(!P'Se%hXDbR+1XYE[GFQjf3"!IEH#Sc%G -lcEB6`5G6!Q(Ae4bGa6--"dcJ`RR8Y+,Ib`dPTX!lb!E6bp+M3HF"8e5L9Ne#[pB -bY$r2X*cN$6Am,MX[Y[0(!iM"SX(,0h[jM4VHEQGR'd!-&MF-[)'eKN1YZAQ"06R --Gj6VAIdFr'QX8(BRE3Q(Y+5RB*%181Lqd,I9h2p"bD5i*-Zr&SfK3ECI"V55MG& -&dDp'%kJbjFa*!iQA1i!Y#NFpD$KY5PGURP[#-cZETMA[Gm-Gl[3Ne2)Q!cIlq6X -Ph'cJ@i2iU4VbPHCD#MpYjcICH98!-9KFSm0j!Z`K[Yr1epVjUJ"LX,L'ccTfEVE -c*U)0Q@#JlF33IQdl"i4I@C0*E%rb+`%,Zj2I#&K)%PBI0RN33YZ8i4eX"R5`HIi -qXhN4N`G0da32TYMDQfJLhbG%dq&M')lb+Maq'Cp)Iq(a0NJpPSM"[R[i6U'YZ%K -D9X8IVC(lqhRlD3CiVPH#0lbGpM$EB)6e(0b16%9J"2Z+!YSFmXX+'jeT8m')RN` -,DcREI5-JBY5ZBVk+l!ih"a#c#Z#YP'cC0HaV!$&ElI+3!'+q9Z4RDhL$R65bfN4 -LX$KVUkUqXkD"QGD-2FYD9IAPCG))l8JM8kQNb&`NK"r4H8jE9c1X,`q[2m4["*9 -E96T+pe1T,%NUR'005*'fp2AM!S@QY+B(hfRBa8IAi&G&EZJ!J+5S2U@!)I*f"XP -XCD)B3QV9ASjQB&NN,93k"5i$&,Z-Y10VPh#+3%klDESXX8(1GP0BMFpLJ*`0P@M -"iD33eL(I8Aalb+JqDGUUf$qII'ZGCT!!$B#3!,'XQ*qaXmSRJ*JcGYR9cMHbSa! -$E0@Sp30IT4eLhdQYKe6%mY+LCE[,X+[k,GK0XKf`SGlN[M'VQhL,35P$DM)K[3Y -54K#G8ejMD)%9aSfeDKiRRbHE0T955h8EM`mLf@bb-TAGY0$@!*`4,l3%d0lP#9" -HDm6f9@kGD3dC4p9UkGX'pBFeAPlJ*@pT20$1ei[m3#PrUC-IL1FrH2Q"%QdL5#I -jic9mNjhIDqH+Ppp9`i[pr0%'4l@PX!%-2flR"kUdUe[jMY-%2KIBq4UE42emVVJ -QpZ'@r'4-S[G"kNQLC*mVdNqL0*!!DNN83Aj+*P%2mMXb4c)+`i@VFdJGK&8J[[T -9HpJ+hmF'NBM!QYI*$p-Xl'ePfC[mpX`!83r3mJRY@r+$pP2%d`1H8k$[8m[8rK3 -bGGappe0iGm,60ih)ji%XqNXVIH`p@5-YNF@8ihJDR6ehiRKUa5bp,!UNN!!SV8A -IkCFh`GA#RGiX[Ac4A1Ej%fIP*bQ9(M0@"2"PRAb$Pcq!BNB3phD59K@k4d,cB%I -*'p!-)U`eTC!!m3(%Ca2TUKc"L"V2J'Pl@T0UbLPrI+A8A@1$KQf9`(!l+EQ4eka -S5N4j*a1ca0T2a5`&E-0ai#RHYAKZ1#!DEJpFmQBTi2$8MZ1+G6E['&+NCMriq0( --6Z(Xpl&@+UYXFTD9j$b6a*32hQlh1*kkHEbI,$@MKhNchKM5l0mX0BY6%kHV03[ -2$03r4VNRVH'cmdIb*LmIJrr!35H[m[)J2i(N*Chm35qr&QpQ1q)Srclq*IXS6hD -Y4eNbfeNV3R,(#Rj)"hf1G8A+(`%eRY#@FX5lZkjjP9&PVqS8fDm10AMLD4"Hqp5 -E9-5#G"-HR+pY3f-#4liQCj9N'5&,0bTNUE%*lbZNUk3l6XY5[91@kVahX,--q"U -lfmQf4`VSLm8"fii(S"2rfPpXD5%)6&Hh#AJJ"bmL3LTQCL@-Y,Srb)0*Z!k[KaT -C,d[V,JJ!X34PA6BCH+4)!$JPK%G84[J@K"4'k-N)A`XNVB*`J,`'66U`6*!!$L$ -0M8%2MIhe!KlB)B2lej("rHJ%-1C&$0`XN!$IAD3a3r%qP6CF$(PK$*icZb1ICTL -P1ei3R(Fm6bh5(Gd%kBjH'&["hLXMM8&hKQd[#UjYIB$RZBh6$,`Pk6D-MS(#fci -3R,F0TaBmrB1qcG*Y-`AT0YcERb9,4q)&k3MHh1-(Nb0i6md4&B[V@2`L1)mXJDC -2F)#Ii!$p!E,d5B+!"i@)d*rdC#D8L,i,r6VmH,29VNe3X5Z,M1`D`NE3mq,K#4K -CJ2HrK@aaKT5!B3J1rq([C'G)%eNG%U33l1,$!r#''1cB`reP9cLRQ@CAH"Dp#5D -*YTLP$-L3!!%C5M!hBjEJbQ"kp`5"K*hCNbC)Hh"kYk+9Z@HQi-SdBUU8U3K5TJ9 -Nj*r-#%(+3Vq!'[6bcA*LiF%#Pml#D@D4dm`DM#LE42-&8SkHBCEbqL)F3'HETGh -)(EY*lN!AB)3HQQf@YYF*q&l%3M$IMPi"m@[a,5K*F1D65qDA#P)qY)mH+%Zj11& -FD"Z0$*MV`5)3#faZlJ3"Rp!)hfqaaD1Mm8%YLh$m&Ya'TmR5$VcdFJFbp1KG@13 -,cKhG`AP()+MBG[YAXT3b6*!!8Y!A`Ikk,1dX%D5Gf'hl"eJi"Aaf**ah3TIp!Mj -#ML@FNm(0rUSX*9m3T'6dKE%MK5@UJT5)VCmd5rBN$U*iDj58'#Q3!+pSJ$S*$9# -CX%@3!"))5U$X5@!Sj2XBKJq+'$jB)H$E*)BKpF&N,2#fRdNa@23@R!FKXH[JmcK -0QUC)Ne,`iHqkJ)pr3)'SDEX&CeSq80*bb(QR!HT0!UFd*)e*RE+8IP+3!0*aK*2 -`8VadG1dS3RHCG16[e#jbXp5"#2Z4R&CJ*)3#S"Ta,J@l"0)P3c,Li![3-B4dd6! -LEa8-&9`&h4PU+%M$3(),q%&A-J*D()BZp"L4M"$qm&U"p5!aiY32T`QZ`bbh(hk -$'A*[DGp&JIA6-D,kh(GBB2efM)""qhS)V"q2%HPYhiX#kpGMa%hfI5HipM&SNB2 -+&jf1m%T)+3H!L24"dLGJF9JJAC*d*-JFE!ek+%NkYMIR"F'9m`DEL(iRT2Z8MZ5 -d&m+5lP6kqeL!#qPHTC1Z9K#&G,I58BhYl5'ipM,iXcGEB"h#G0**$)Q)G"$68FQ -Y!4[5B8c(4Uc"P8N(-RdV&VMb'REP08ceFXLU!piZVa"Fbbmb%RX%9D%iUq@$9RQ -#KY-Sj*QA&`ZZ!#1"6mhY!TkkT(ILa@S!*L+"h6L3!2DqJUGp!'d"EMXfZ2Pq@GS -i6T!!PL&C0'2VPL8,RQ8*G%DY)Y8H%&beK849,4*Jl6c#UUT8a[XLR&A),9)9GV8 -+ZrSbpV%+QIrP)l*diKl"H3+`4cUa$G%4%Rf,+)9%Da#Y*&'%i'TSSY[08N2hqbN -JadJSeJILPE,)H(jNRFEGJY5BM`9&pB%pUd[#I9b6ffQi@CS-X$Gj"!Z6"*H"!'h -*J,D$!GSIMT!!*31"B,YPD5*H3$B48RALNN@!4%9XhbIKT$Zh%'!J5+1KlS([m,B -ml18$b*Je513e1185l1-$KB,d!#UN@pYNem1NdT!!r+KHr(Dk!5&faTp+GXBrJ&i -f5f13!#V(B"0U8QAAQAb#I1B$`A9Q1*!!R@IQim*"0B)VU)5-"#N),B4,d"Z#*bL -8AXDV)ep'C4T!'1`LMp!#cp0XTaTUM'C&F$EMS4kT18'3!*U4XfUDm!"Y%Z%N9JK -1%@01m3Ma(Q#*U#(&IQad)F)&"#kd%,M3!Z5@Lb6D*EKDBJK+#cDdC3"$#F9)@lA -JE$15D*RJDPY"80V@)&a*0UN0p@EE@(,I$AibC32ChJf("1H'(")G&k30k(rP3pC -Z4hAP`rkeca&F'aNXf)KkG@-TUK"T)rCY@5eKXq`3'9U'lSR,!2KmVq'CAF*HZSc -VALEA[C`XZ#iRN!#kmI)VJR3C((fiI'dmmU#AjFCY#)q`N!"S4KUk!8jH5(!#fqK -&DlS"X0D,M(!l!*8A)+JHRC,UN8ZpU(0ZHN0`h6516#m0%X45[!a9+YdNZ-i5+#Z -G4H)kba,A@3KmPP5FVV0NrqRe,G*eT*j,!f6ASdb-4cm3T%Ia*Sa,Df6AXi'NCR` -@pG9*)pRGNlM#5EBA*jF)VU[XhPFhND'VJ%aA)H)P-#['14A2)fMA[)+VJNP3F4d -KZCbVJM9l+JB)8J8biL@8pLXBc(X)J$RH,6XI)NRTS8+XAT!!TBX!'[()pAFK0GQ -AbA6V&YG@eJMDLNE3eK%XI"dKJb4EF94&5#SUX)X!M@49F-NXimV(%E)8,`0D&!( -D+'Mm&+(YDdQjheP-8PeePH#UEL!ieG%)BmM0Ue%A9(q*qlRd%Y*Fd,X)@Ap0F1R -NC*ak*'3eGJSZSjmN#L2*VXCKJXIBLfE@++l'*B!XRMS2MF,[BT1h#*l*6A3fIVF -fe,-%(S8%rJ[#`55F#$Jl%3Pd)S$e4#6FL6LFSLT"+X,@6N5#,KSS1)[k38%4@Qj -&Bd(&m8`#%*id"1+ll!CQf0RDRaGFpMiXA)"`2JP()i'1YV!3&IGS$`'MSj&l,Z' -!*k+KFJNjEL)JdbAXi8481[L[rNN6d@,`!Uj-a(PkM`Y1Eb(dHpr(LlMalVmke!- -2I!9JJJ1Yfb5l1[d%LRELa$Vl)(3p[))CFJ68,e+b'Z0RCJ!a)jZBb5EQ6!ia39j -QKK2cXXT-%M%"#F3d'jMT5BaBc-`JBPVbL@RMc!`KCN-T-i1*D3pRCK`a'`Z*K-Y -UN9c$@8,&0Lq,)8Pi'4TlbeKMlc*Ji@A@@VU-r(Vj0!Z4+Lqc9(NC4hHCjH[DkSk -8#Q+YKiA[)hb&KGd3pQ*KR1#k3B#,G10qK#NXl)d`N!#&i`9A&31I9IFJC$QeDKK -#PTZVd()l`9,NL5d)XeL)&XB*YV8RENC9`d4Y3"2dGM4U'fm'2)!3pDqJTH1T(dG -Rip@C0k'LD84fZJi)H6fFC,6Vq-'a-9Q@RN@KjeNdU4Zafmpf#DjRKj08m#`NIMD -5Y101)N1H"0KTV*+PUkM9Vk*@Ed3lq#Ukp9i&@q0LfA9e#C'J1!$*A@3KkY9L"J@ -,NH#+@B)V4KB[CX@EBVIJZXB++0G1)LaQ)3$+Y33@SQUj0Tb&U05ZX8UY!NQVJTe -I"Fk[JX([#ZaE"B2e&8L(&H`N+mB$Q+!kV%ELH3LCXaUYj,Y3m,S,Z9P$iHc"V`A -T3G,44!&3'#biP"L5rmdi!M1kQRA*NRNKBRcQ[3F!!9@Zj3KH##@l,)2)53MYCMc -5UQp0r@2NEr#[m)FIe%dfebXbmJQh1bjbIIr)"HcI12`ELhpZfcphh1I%Iep1Q!3 -rh[-C-q-'%9)[+pdNI)cipHr(%E3&a#qDi(C2m(M')rkm)jcp(4Q,!hp(-![6((( -SP2K[(60q+5GmXb1mCF*LjdbRbGrkMZKjChDVNIHYdHf4ija-d3p1UljECVT0rL) -MalR(&ik,mlJM2*iPj&k4B4j2R-Fc`B%rS9[VpEc)b#mBhK-iCHJB(cQE'%,kaKB -aa%AcE#,-Mhc'iiiF(mQZ-6B@("CkaMQ3!"llplFH-2KGT)2`c!,2Z-J*(VH(X9[ -U)8F8&rPTa!@h*a5m2-kEfEBmr9e-i8+bYK+@f1EB"2c'dh'bMkhr#jNhJE#C'4Q -jP0$rL09-XRZliAqAEHAM112j6h3`QNfL@kbXlR4%BqHkekal9E!H(c*JmlZakSl -jMbe8Gbj5(eQNEZZDU9VNYSr9$(RGq+RmUEqEfY"ifIMLX(2Rc`mpGfcS1F9bEUJ -U2mhqhJKqPrhVqm5)*ci-2RC8AA(ZpH!lKjqDX&$Gj3M#Jp8MFeAjT39[2l(JcVP -U&M-lJcmk&U'ZHZ,Qh`blF'T#le-Me,h(hMVfeq#22JJqrRT%K$ULQaV5$ArUVjJ -*A8TX0hNb#p5P%@j2Y(U1Q#(r*!ErjCIAPZmCpIrRhjT2RF[$iQCp[ri[khr00Z& -RCJ)(rYL4UGHr8@lmRilihbrmllp[GRrQARrFielrjhrAVpq2,,6qlalhUrpdcR$ -hFUlIj[aEiC),'2fRfahQGRrMG[I$CR[(*'`HFBYUQIrBSYL&D[kaKEdA[4AEh@& -(G%hrqmaIcq`E21a8jErhi04Y9f)ArAABXI&MHhI*(kL@L2FM4KcYLMMDTHk)rA- -XqIYp4%6%1l%4lb`DXZLG#*2&aq0M4icr*r%M6VdAm9D%HQMSd+&rIq,prXHZU)r -rrNje&9bDZREZ5pKpE2NMC0pl4"`EVqjriZCr2R(crd9m116+fqHk6MdI%Ia@42# -aL)LhKJH2rBhD0#*BlE2qX2S(fej2YpN*cYGqTqBlKcYrie3h6H#f2iY+CCqm#Gd -(CTq,MSNTM)Nj&H%KiERcm#YH1YrMijk&r@(JPjXVj$h[fl(RqZF,H`mjI+H` -p*Ac[r(-alhed2SD!E$AC&8%B!`!!(,Y"4%05!`!`G3p9$@Be%4!KiZj#[lbmTSr -`90k&UP2MdMj&)AT+[lp%L''CdS'3!!Ci[(EE+N95THRShU+5b+L&$+IVpPM'T,5 -&#VUlU,Dac1KdT9*&N9@jaKJ$afLLlfG@BVb!*Bbe$)Hj!f'-C+r-iPVA)hrr[jF -dDB8dRTRGfHm!&@C1-b-2)5)KN!33)H8Ejr2P,KFH2(1!39$K6*3C[Z2$i8QPS5P -3`dX#9Z6E0-NISXNP#bH[lDpql9G,PS)P9Kdj-cTh1+P-bJdeTVbV$%%(MS0cGM% -Q&Cp,$kl*dFI#f%FGUHV6jT,k$r#LARL1[GJ2VVP3LSpVXBr#f-FplLV!B`62-A" -1JS!L3B+Fl!$)AV9jH"`%bZc,p)9LE$d%5GL`@N`VljSUNZF2)IkA4V@4B+TYM3G -IQT@r+G[+PAH5r-"9p5T0rqPUGl2FA,jcrG9dPIXZ,XaaIj(b,!m'PY$rH8F#5ij -9mUX$eApFiBL-MK"-PcLB#G*4&#a3D*D2qjih"Gfqr)hqEMm+rZ+3!'l(p`albD' -Mhh1@[@bJiU[!pH2d+&'63D&9aaj++[!ilH[%`cJ6a124Tp9,[2ZU6j-MrKe#C,T -Ur)B$3Q+#+PG[,pY+"BV-HXF$J'p436XH51E-B-F$dpb8hpcL0Y+'HDj95*je$mN -Y2U[i'hU8KreKAH12qVA@U1KN%dC&'Am8VeV&fkh4lQErG[1Fd'5'6a`IJe#PaH0 -#&(m[d@E'%LIXd$m-*48cM##@ea&"--m`C5PTBa!&fbJP(MB,N!!(!E5JilXLjkA -bBE!B+mac9VqTih1[HbKj(HKp*00("FR)HBXlA![YU0aKX&m,,5H!3ZfjpQ@c$+0 -%8V(!!P#pX-er6q(Ll@h2Y9fUf0i)k&cV5$i`FQ1KDQDVeR2&jP2L34pNZfAQi&` -h-XJbN!!!V5&N+DP$rF2Bb'R!i[X'UPGCCK8#A0F4hKVXZ0mpC*icf`M!p4[*ENG -iebGFBkpC#Njk2q&'b2RFkm[YVETj&Q&!TlIfZIEPcBBJXLeMFTDK)lKheQc14XF -E&F!5Jh$)3(NSZ2JeGjmiMC!!S"8c"3!(lNLB`LHiYHH1Q&jhGVDZYP3",M@K8NX -"HPHL-!Q&CZ#*Q,T3LVS`fb$8'F*8499CGdc8cAfqSmPZbhNH)"I#D)*[8lIGeb- -qlqlEfY6GX[H)'B@56BDZfQP$[Ab1hDqC8E&bcZ%5cB*BTD2HjQ90ChD+9ZU4hNf -'-1F`'qUF-R5l``@BUh4P)$!@YFqA3b,TmaS)kNjfZjd`b'$(j`YE%-,4-e&(Y#D -8d4&J1-AT9Dd*)96`64$0h,dJ+X8FJp0#0!(dFNl%j4jZ,SD![4`5C)5#c-KclFQ -XBCKULN&BCQE+(ErrkGIB3&J5%MFrVe[4h@fQ0N3KE!j'*RbLFCSl`Q5'A`!bl`e -1DcX1!h52lQa1L#D%Tp2bQN-6UhUi'Dh[GFYB@&'b1pQdr#a(L*@C9*0-kV8[TfS -eQ-KF@8*cC+b'&))JBF''0TMrl$DN-%9LbM)@02N0JMN3PJM5KmDcIBP!4#%#%B9 -Fph!+09cTFQAl&&YG5i'@Mb!$P299DH08rp9ie85S%i%'K"H4dC!!SI*iS"D"[QS -3$+r-Viri@Xh+lU(I1a"m+TYE(@U(!B**J)GjNDS*hKV,$1lKfRJPmPX)r4G6f&) -TM2jQS&E'N9GC-[D2#0&i&K)6%K,m-)k%IDdb6126mV#d2'j&-aU1VafSl4q"L,I -'+jqVl)%4-$-)qr%`IMTTB@C"3a1bJK`@q!-%j`&1Jm`XSqNAX#%HH!0AF)qMK'" -1(,Fi3U%m%PL#!m8X8BXH'+(Ke-@fAI!T4kHA1Rd9L8j-$Q@VS(id1r1T@PG3[aZ -"TjP2H9h"Tb8V(EJK4A("V#3k6U'Mj-hU@8RU1&(pBHN*C1Q6Z3r,c*PCb9fBF%3 -5aKR1VQI#dMX(`8-$LDNNAq'UH'2"+4ldVhI,paiTM*b2A)X8VdD'B2J-2#)qp4U -AMr[T4I@TjiP`di[LJlJ)QQJN[5![Ve'B55p-*@K#kQ@[MPh@LFX8"-I5I#"fq#P -ff"K,N!"5+AL*S163b$P+'J3P%@4$P5["cqGZEhDeBXZIj*Vbj5elGK*BRDebNJH -9,ckbNp$fmNdcFfFVlmbHQ9ZT[2Gqir[fS@Z+KLSCG)5hfl0"aBCN+m@JI1@Gr*Q -j0k#Qm4B'pI4KN!#k[LQV+EDGKdh[#h!@`H-+9dNY'-P50KPN@lYmIFMd)KQFY$Q -@S5#C1f3+D5(m9VhU+JM062dl[V6PTG!c4%[2c2cPCY8d$aqECX,@58&1-+pPR`b -5FF5dfaNE'U@KjJ5S@KKAM"Xmlcr6B*JKR5!$NX(PJSCfRjQGD@L[+rK`Skmi8&e -rib3Qk`-(AkUIl[K[l0%jCZ3$FF*KaF3qSahV'kMq6SqFBaPYdGMNXV,p-QHCK)% -"K3KAANHeF[U'mL)R*qU958rpk-NVZ1BTei&*TIi'AH4BA#r+1ApDQ+QA,`Qf4V" -9!*KMkNj-84Id6SJ,TJBTK@`H&iAXK'RXY"pmUH&3`'&`li3q`F-&DqmQ[[NNZ$' -4G6+4eCQ`"NP-rDIA)ha04mY6&,i`KdF-cX6[h96KN`+NGlYLk"'[Q"kl)T5GX)c -i*6)fl8I'[p-ZA3H4$iShf+9e@0lde-'q9JVjP[83QI6VG($+dVr,+NU#F'e$K6D -Cb'dE@2CBQe"eQU1Up[N)kU5TeiTic`M-E*p+51Je!2)QchcUmh09pB,`--H@`X8 -#$MMd!KkThpdrF[&X&PdC!jeEFI3DCIZZVAR$0qh%p+#B"0H4@FJkENrJF-(5I&) -b8&e+*'pVr!@*,35HS&Hk&Ji2(Q`NJ-,D05B)ZL3))SpFNiB4`bIcd4%iECh#BJ3 -j+#dSm!5@C)k1N!"JNkU6cr*!I5"38+q3!-M9Gd(JTYI2e"q&U5)q5Jl9Ac4qF'T -&%)HTNiJf`',[bGcilZXMm59)"3'Pd1@L`S!fL1&L8XQ%Dri"6L#0@)DAK"N,VB& -64bFQ@lk"l2p6(l+,QaPNX@$,i)j!Pf&`29fdR[Yf)Y%+kUG4R&Yh`jkYQXePMdp -(0K+&NAZc9@)G#F*MFfCcbSUNK1%U&FA,&'Dd6ZNU-Ya*6d1lQ'D9h40E4#G-dCQ -L$Z#BY$KmpX#N6TL8J1pY,!0I9VTPP,,$`PM'[4'%J6&CV@$i%X6EJSH'@HQr@&k -#M(XMCGbi"Uj4YVGF'j%T4)VlNZ@S++GN%(IIR5SYXipY'N3H*UY06@T8H9Q1qQj -JLqM19*DFqBGA@0*[aXpM$PjcIlE+Ej)+E2)aJ21ESD*rLJSTikLP#P%d1kAb3S" -6#frD0e&ifje5H-+LpV46X89"YC++-Aamj@I-(EQT)3PR@E,E)aB*cXZfiSV,Epq -dba0(mq8*C0(6A+f$3dc*G%rES[I1l"H6E0"UD9""%3Bj+@1L3GeJ8blEC2[4i)Y -(r[c9RDf,[Liah"A@YpdYiVYrrXU[p4`5&EFcL3PcX+Fpj2RfI(2ad$8$H4'bRm% -h[`SC3pGDLD(8CYR,"CL&!SrANi-pKrT(4*!!D189-%[,A!&V(k"6cjYI1E6[fqj -`epP8aMC,c$X@*QU"p`2[GqINA2R'H1Ha5TKLTJ'K$e6bCB[c8TJ&FX[BM`VNq2j -,$H9qL2PhXSV0iU,KV@j`&2*@BEdQN4#q-6qUI$RGYkCC[Z)2&KVcMa-VU8l`VL! -)&pc82Me@+G!eFk$5%EYb)6Pp"!SD2JY80h`XAf%*21"`[[1Pa8(i$Q5b"MBA15J -G@qb@*K@0*V'T1FUc1@a`F5GeV-mU1MVK-L-T0NUKEKJCPFHA6#J*%J-h*i5ILGr -N1-%819lILi+pQ6,Sj[J,JXGTBh(&`F,4N8NBXU%HJU-MbbT--*(%Y0""JN'))A$ -M"@4qdb-C%0ReCiSYT2emhP8BBI*J`mIp-!M)Ef[$C`9IT'FD2PEKqV61"@LScq* -lfK'bIY*3iG5Q(bdbY6hYq8mL@cPVBQ$)f0XaQ@[iq+qK!+kLQ,UN5e0D!GFE2SX -2hh$&$+0)8p"3pk"0l%8&aX@qi'bi`)SD(QUqPMU%&1feNjTZ+*lYe$dZPqqVI%f -r%Z%PQmbSY`A,UrQACS2V,86X#SSc)$ZPbNqV'qTPr25-&($eJca1aJ$jX@)C6K[ -F&-ZJj%C*MN$9B"2+0P&8Z#rqpie&k[c$&TQX#56,a8`3(M0"''ETaD#FAjHff$- -LFP@,(lJJ(9JhGQ"G`fG"$cpipq4,alCdRTq1EkR[YdQqAL3IP#e%%QE(NV!,LC* -GD4)q[T)NM!dIPi66m56-CdQ)KhVA#9MTe-mL!EIN"m%QA2%jIX&[p(8IcRBTYQZ -4Rlre2l,Bl,PdM*9CHL1,65SffPCEMMD`PLhLVc$FHjDBlejHeh,41Ghe83ZpTPN -QHFY14IjEKiRe$V'T@[YdC&PMZEEJH%(!l2-fNk#&)(!KCA@G`9[M!PGa0i(VcH0 -k-qY%8DAEihpAj'9e-%I0JfpEH2c`bkaRDh[&$R3pKUkEijRSNmLmPeEH%a'6f8# -)&IjaF4eB-)eHm+(5a`YcA#i`C3%pd+89E)ePR*Z*!!#B)-FkK)q*j'Bi%H[[S0U -HjhQmN!",dqiF#2IM1jUcRPiBE8rll8X'YLYX-T!!6C!!JpdXZkqS''iq5SXqiA, -jYI0Fl#AbHXQXE6iIqDGUHH,L-!R$X8f'#X)8*##RC`5AkILd%ERbHXL3!(9(#Qk -P!J8C$3ic4Z'kq9H46+1Y@B9IIQr0)FFkfe8K5jH(Y0qm[XeZ4Ilp6!V`VNa-Q*U -9i[kiMJ%a[C)VN`!(AreSPSTJ*+EhF2&d9U8#'K(%*q%'C(!LEUZE$I@KXhT!i!8 -(3%VQ*lX)pPhRXVT3M6kqdDGmkp+UrBe)!M@0JrS,[-T3I89Q(il1SCF0-dXV[39 -,+fRUbDX'&m[TFm-,q,b$5YENkmd'TT&JNNMm1iL%Dc1U(GJ68FL2(3i&Rh[pKHC -@E31!ZbR$93#00,cXEX29$Aelfk53!)(rCMB32r3#@aUbQ&qR!Nq&(+)-JNU#"2+ -BFqI!1,IrGK@hTAUXdJUSY&p4j56`CjeV@L*1U,X`CR"21`k#5'@[T*+Pri#Mq9h -+PfDI4UkJ96SpqK!1ILTl8Jd1r#X`T@QZmb*%!Srb'Uq(ZIHehpGN%(#b[A[ma2c -B+kY)Q&JB)f1GfDKhJS*eHekrVkQ9*`k0*f3iF[ameeFiFVfCZRDcVRZTDiS+FJQ -(BGHQA#qI2dC(,i8IEU6$+pMKrrrE(Hi%+E*M5"4$l+fF`NClfPSh+9aTmNl33&3 -k[VNM,qD!ZDIprlBBDUbVV@"&*Rb-b!*M1rreZe4`'&p"-e%U&T,DBe'#Be'3!fB -e0-@1KKUB)*C)BYA+YRXRU+UMQ,2mc(IG99E91##C!0Y159618b&I&eZP`UDd*DS -`prd*l6Y3X+5#A&ec`B&aQpXNE@l-[I#C1('cT[P(TXIX[b%ShlTq1!k%d&'#3Gb -+",!#rY,-IB"iZL#HE`%'@HBV"[ba$m8Y&B@5%*bc2f5GY62PA(#9iP(K+N-SX8b -a2@p('(09!'kEr`p-!Rif%k6VAQe19!V+&plMbBRVK`$Rm8J&B&d0aB0Rm,1UTSC -H8B!STCqDRd("aYZRq+1ZhcNZ100F[ra11[+Zh34FqFH(q'YFqJFSPAeXiJ`**B( -QDB+*H"+2,ZlKK)`qcLP@dd-1`U$LG1a1S&Bm6m!cZa6A9$(SM`U6MULY'5lS5qC -G"f$9,PjrN3SjRB#SAk-*df[f[i&$h-!$2"1"H9#!`P`@'dBMNHT9l5L`$8[(jXe -K5S6Bkpqb9c935bkaLXeVTmU,E-Hfmp#PcTf0bCahBX(CLhccfY5`aF%eA!ejj[f -+%Zfrp"2J6FCr(UE&cfB+iESfikH-PM$[GVBV,T!!'GfkL&"'"U&L(@$i4Dk(KN6 -0ZEfl8@ldPjT$&YcC3aHj4S%h8fA1iA!CGH4X9hh$MQ2[f3%8r#'Nr[ceUrCN*29 -&e+Cf3lPKAM8[*i*%9XcG12$Y`-p3E'%"V5[IJIdh)GR$D)i"G(h4YM1F2fCkGkh -PfU,j4)EN6lKqNI0Rc+%hYeQ''iQqqiMjk%i%C+aF'V")Er5"`qNZ-HX1EQf@`Ji -,PaVm6&(XdbM4@I"LD*FYEBM#G04lR&L5lZBjc8p[1FqY+c"%82kBDhi0j+F09cr -d"'V3qcm`TmPCR5b!B-&36lZlA64`-BDklFRZkiHSH!BfB"(R46eS"`-CkQF3B@+ -5S1cq%9ra`rKBeR5R%kkXThpq"%BkI6`R2S33G5F,Bp[0lPdfA+U$Z!J2fV"JcFm -h2j0JB#K"j(PFTbBi!hpRrKiKHd&bfdq!DP5i*9-K84%8@5pNSe+BeCI&K1"qPMB -,mD'YeFL!bIe"HTNXTqlPr9bJ`bMZ[5BZSdfa6'!ec&qc-jFpbD9Xi#0ZS6*pa'H -MULLm(e9(j-q#P[GMN[iAiVk2q(%@1Y2&5ij1pR%U0R((i@3IcmFq[,%"FQ`Li#K -Q(rQa!jYL!p+aMp!S2BTSHGJLQM2XDEqNlfaNRBR&M*NQ$[e"$,9XKKZf-QNCc`J -+M)L(R4kAfFYPpL+c&jQp$,+A3IYB)%B5AQ,bb[PXFm,XcaF3c[c-R%J1rQJ0VQ$ -"PZJ"AhSf'SEN"F8LE*,Fa2[HYI[d&`m42,QRrI0D`qbHf$Y%%&EjIML%9k(*N98 -Sj(AGj3%H1a#P!h4**IIecUi%aHS5cC4$`XZ(AM`%TT%*Ae9bG#4f8#Yrq20Z2V[ -R#%%3RbZmdZa1!#XN11k,%)m-!X`3'"6@Z-j%hUqS,@4'4pF#qp'`L3`[1BK#5DF -CIGNZ[9aCbddBYP@a2@$hGH,(+D4j9,%V0M'E"6KL'U*P1X8N30EC$lip0P5RiB+ -6$65bAJa665G,V*5JYeYLYR8QP1kii&D9@)$R`!c(K*MJ4rm1+HR&KbMam`A*50` -9&q$SUB3!4aq(!!rJdFER406)dXJ+09qY99q,r#,k12[2SdimEL$JM)CEJ2H`G4! -"P3!PXaa+6NLL#9L"4eZPB3MI6[1JY%'iSNJ"epD9(!m2R"JGLBNb9aq1A`)9'P5 -SF4@N)(1hkp42k!#Th,@#UfkM&jFL``j26m1p2KM5k,#fBkYG&'iH*l9`!cNhF++ -lDA4%EMUk)PE"J'R&0MhZ5MH26BdY`iT2KH06[I'Tc[J8A!p5,XDfV8Hq2,+',Jr -iTPk2rlL)PTeLjXli`L1clXT3riZ$jf0,99H520CGE+-c4Cf8A2(06kr-F'B1L4% -H5ia1*)CcLP(#Gf%8LG$"*@GPLZmZ!J4Sm*S8J3Y2@G,`)bRTLBYG#@"#iIYVN88 -FM8ejUG*B%+XIJTPBp%[HlkY!4JL(6VET#LJ`b"#-m,V(MQFIL34,&4$C$Lrc"0J -bbbT6#q*MJ9m%qB'f)lXNiT+"B`&M8%R*ac&!Q"V2GATE("4F84IB#lC43lSaTj2 -h#G!Pi00k&Zlr)kj5G[JD6,@9ZB1[SBPNR@a("K`$MQR+kL(PB2$q(SCbTJa#!iP -c#&Y,*[6f(!4E-Vc+h3lMGf+EmpR38VaZ[S*JQ%4Qim15l9Bi0V!Z-C!!1UY@Z!f -kkZ8Y,%J@PEBJ(5-J%Fh(+D4)bPUa-5G6mRj##69+CSIU*22'J9r+e-!8'%0VH#R -!bM9S3f!0l"S,cM)#kSieMb"hLCKJl'6%H!@)kmqiX[`9X-%D(N2F3%2H#R-Lp#` -B0M!pb[p"BB3G@8jJD`@Z634`Yp-&a'aJFcXbD(3I)mG[ZABNQ!S3EJqBLAB%$RI -%'k,5rjP6I$CB366STB'heka(%#Z&h5Lk0eGJqSUe(!*LVAM4IFlZR'mB2kTSa!L -p%$mqV0&aN4STP",Sq"-)-CDMFFrbEVBmP,'A$r*q!11Im2lrbDhiFIdTRmLfFJF -[VrV#f%B2ISC%NjU)dl8)H+N`J@HFf'i324#rdRL(*&lqBCTN*Q1LiaCSm0LLR&- -@a9ej&PfJ*ikB1phBmNq)j(c#P5G18H,KJF4$GI6S!Nq65[pTFl#r[EqGQ%Pd+03 -``l8GcF-&N8hXHJU[e!R"3P)(@DJN,#8e18l%%rU$-RjGq49DmA$P9bjU2[P0Q+@ -%9fBZmZXmKdF2pq!abK8m4$k8@FH@jC!!R-9)2"J*FH*54N,L6S$S[-MB9!j5m`Q -4'ZPk#f3+bF6KD&@4r'IchYkFe158-9iJ$(V6"CIVedm([lF&j&K`P)@d9a[IYIF -d@T'&C,DL-kG0M4`C6F22"[%9J9T,lS(c10qE4!AFF!ZZDjeZji+Q!X1LLC[LX*X -q2K!,Ni2pKmc"AErNQU@i$I'1fbQhA(`eX)L1LGV@jQ3,A#2Ir[k@%L1p#H'mjU- -V&M5GJ@0C[hf"rFc`r9r4`2ZhN!$5Qdh*PJII0M@22@PRejHBdE'ARJII&S0`c`[ -qk1frE$Pcbpf0BR56qCq`IA2Z--,qKLrNTNXrZ2pVHMcapp5&-"&F)9J$I`0Lm@T -mQ6iMYN$eHeZ53kEZ,j,TF+fIL95k!mP0bkXG1!&hACXTaeNqFXR1K#@('kQ4Y+r -ca81QNlD*JVhF8F9)d*S%#8Sihm3*Y,9MM"LXL8qQXc%#Q()dGQ%G%3`C#lfp&d5 -fGLU4[5f-%GN$iiKXD5U4[5dNfphKZa2Mbp4T)a,VhDk`+T-JXEH&Zb5a+@3kPEM -KCa&Bi2QT%e4"8i+-"EDR"Nk-QhJQ2N&&DE1kBrmE%('Zi3%`B&,Tf%r%1XCXcdE -4ZbM`!l$FV35L))0$ASNU85%aa!aqHm0R['b(kjdUM[jPRrpa`9Rh$Aq[ITUri9q -&,,29M&i+5bb'ml65U,bccHlBZFhZMU$phK[q[9B,P%kciBp*$pRT1ddAHSq)5f@ -RRc*9hA[)H`5+9rZBF`i-m(FTi*)"&c824%6hE8T2ZNUY5@64IA'f"KA&PP5`%HH -2[Q492)`X@"mii@dC(8'e@+Zm)QA%k@Xp)`Q3!)NjN!#q'KGG!Xl9ArH-`1RB&RH -85h85"JaQ!pbp)&A`BT2,aLDPL5qQ6$`mC@*rI)+bra4&@q-G##cBr"9`QKcVM14 -,M"Ycc%a-*e1FFHJ3DiLG-Q"d["-[QNe'EBfA&[p66D,$%88c9rfHaAmc$h!9$@T --@63MQJ3k$5clFHPpj'5S"P#FkKP*9%!kp#r8&CRL-'ca5#U3!0`Vr3%!P[Q$H&E -J6q%Nh8(m-4c6$DM$VePAV1$#PUG9FTN$Fa$1G-%N$jf'F`N9U(`DQ!%6T#"D5Hi -Q6JVNq2@E66pjErN%6b*$06%GCY1Dh(*d36BihQ'4*d!H-[Sq&VV)Je14`05lNd- -S1"E,hU0P@5IFjE5X8b`fKdEE*hlX@'hqm1Aj#+i1MD+`qQNdm5GQaLY1U)#SGXB -2KlE6iD`cIQ`--"eViJjR@D'3!"Flj65F51i`4jp4[+Lqdh,8A`acUjP*RX521E" -X9pPp14lY(m'!U*mFJ94r&Ujai65kCei"L&J"YYR-p-(TS%+j"jQS,LAHYL'3!1T -NBB3@+fMM(4LN4$CPZ"l5d*X`$kV#[qd1R1,&l*2pd4Imq4fCQ+jiPH"r'(MDFr+ -e25r02ILRA'l&RPPEFrhrGZ(2ZC%rN[r0`Yd[cDh"U%GIr[T#hRX(&le8mfDJlD8 -PEqCmbc"pE1!rEXcGQbZrF#[hbp`Va`pqrB[+JiGAVAeSpaphrmf1hrhZGprkai- -IIR$VUCamiErRVZpIm9pE1VlhJp`(&flq12ILKEr0[AlKCZjFfj([eGArG@l*Kff -($ZHkrh&&rC,F,3!!4)K"4%05!`"kK""9$@C&!4!a41j%[frl(-YBC-KL&l(kC5c -,-R8ZP&J,"Q5+M1&4MaTUL#GC1E"CSV*M10iH(QkkJ4#5F&*#1*4bZ-m0"[$pDq! -!6DQePQ-)T9b8`fd)*BE5e()&5LQKA*35,b,ZlrrhIGmfK35HqhPrer-#'kdR+4H -5)!J#)!J0,qlPhh3im1#(Nf3!%)T@RPa,N!"2Mm@YQIaR2a5p%BmS6D&A4I5D!"K -DH($K'k'Qd-IL(3(%Si+[[1lj)-%%#8`cGBdMIhS`ERfbCf*&3#6JD#3X0K&TTXe -L#S#!i9ji('![!VY4-&p,*)!Z$@2*[96N#f92UFdX6UahEc6TkRUj%SN65&ij)EB -$9"d!+F3PcK4ra9eLe#3&I`@aS#5iSR'@2&`[qYY1Z5f4,A%F%A*RmN6)Yc%LaHm -NiVrFB,+l*92BA3!b85m2c+RNJB1"q"dDeR6+@6c,NVd$RFhZ5Zib4CrUXClJVSj -jfh2&GKZQ-1e9TlfB6V"TVdh(&A`%E!AS5P)8!#b6H!!0NKJ3HHe62@(AkAU!GZG -YY`"J#4"F[pq@DNXe0#Pd1UJ`M1%%k"5ZY)VY*JpG#Q"0VU',VZe'9qHd%54d#1c -hd4"Al(9FN4IXEH1#9DS,4Nd9!6!Y4!#,H$'6DdHR6'V+RM,*23C'jMd#[q+#0%) -F%pI2!C3mjA[Bi"!#dijHkj4DdC2E%bN`4R+)fqC0U8diNiVMeN5$VF#`2$+#*Aq -U&k@f&%63BM6GDNeb36KX2i2$YV,$5[32%d#B[+&r-#A!2H8r&G[2M8hj%jXX+$@ -j`hh+"&%%m*XI)!3pKqchYp&fm*2$q32k5*GX0$8kjAYJ@baZ)'(bpSp1f3Sd*ZE -f%&+BV$9Pa!8(R2Mrhb(BCJ9RV-)9Y5MH,k2PbHe"FkF0+""BeaJ)!'0Ni%h&"I$ -Q'!I`pfjp(pII6,--Q2@D(L-JFC6!V[F10'Ph"e`Gc`*mlFEr-"rKFC42KVR0VA[ -9(GQ%)+$&jjf)MJ)$2PXLL1T%&clr,Y+!c`*mGN5Lq26JXbF5J#2iCG6SFL13!$@ -XrGN2!GKBK8ADE!TPfK&-0b0S4F@#1HmI$)6F-pIjC`%-0`!(@L8!i8-@*L3maN1 -kL&6)K$h)I5AX`1[X`1C-1jCpFf,N&qZi&!PARH!P%@p&*IG%T*!!1a(91r`jmDM -*Shp"9bN!0Q8Q3RIFmMEB"LlK8F!pRk+S$f#5ZrY-paQ`13hD3@@2pTRrhNV!VV# -10`3j&I+jilj&P*SX)II$p4GqcaX5!GXjpH*&XVJ6)XbjUP3!dK*)!CG(hC@+ep6 -3Ve1mrEh+pBjjL`T$[,[(*,dpS(M4@F)k5aES,%&R!HXX@+#c303*MK(Q8HBHNC' -J6VPVXS0)9lEaAD03GZ5KJ9m!2R%["%NH2NU3!$@$j,MaSSpR+Qi*Q@*"a10'*d8 -pJK+!PiimkmF*9fM3iDKpNC`Kf'j`4-VF#G#0c9V6H#YpM!rb-3,S'aT*0!d!A$3 -KfAaY*pdR`@EkBjjaPXMHB1$j&#cT998-,(,k*eN`i4-$D)J*i5U@+H6T,bUF*@a -0mNpQJ,AVd9lHcJ2G23#LrbR"r5%5H"6d2Md'L(FR26J)'f%)q8p"dTrkHaiB@%I -LP+DD,-ND6bqraq-Q$km%j)3VVSD086mA639iD%e42$idZI$i)Y+**Q1'*[)d$B3 -[+5iR-3-E3`Uf0Z,amhX41jY#KX8QA66*VK(T%"X@Q5)")P5d2S*XSXTh(ba5hTa -(H)aB%q&J5qQQ133Xmq@S$A1-$FI380[,id4mZHdJBI$*@D&,4&GiBpBBL*%00-% -YE#+"#CGcc&bTZ$`EJCM,kD%A,)SL0(D+KJQKFCJeTX95m#V4kpZ2m2@+&ipQT35 -2E8S"(Le+!alGbJK-+&c+2BM@C%a-91lLNDYdi*&3QMjp""c-46ckP%%m)XT%2!i -UBhLiP@Bd'P+'m3JT'MadbRSF9U`3NEbC4Gb*,"r!bj@+MEdqBKfcM4PHd`&JPPq -b$CmDBZarqpQT%iU96I66",dQ1&r-%+3,EHc#)@@pJ)KkE6-BK&"@H2(#6mFBSN& -P$&-k0Q($4+25pa&YD!K4S"A)Aaq0+4G`9'XJiDi-*%bdTBc!3GTN))dGLbA(S,6 -!)d"RBm!##YEYMmB#kCM-$Q3lRE8TEim&FS3PJbMS-!dD&LkLh08liNI+8fa$LRb -)FK(6MbL2db'ePB'$EimT'@rhqE-`0-HIL8I-Rd4N2U2`FXa9QHk#r4bNk1rDjMX -fM'C2fHVB)JHbr'%%iK&Eq(-%3-I5U5XGZaEkQVQe(N,'TI8Rq,e&l[Q1,C%4)3[ -raKB89EI3&$*aPr-@'Z`%djX23#J%6memAJ)'ZSiGFi@1LI"la`"1A`G(Ieki!Xf -h1&B5+02&(DXr*k,eFQ+k3j*)62VU1HH2H-ALQkI!,+hHVp"4-`,"(-I+aQKS#') -k&Makp@a)`PAX1KbqqY)TDNE#[Y%M$M@(h3-jKC4YiR,H')hHQS*r*PFQ")KVVlZ -4&d2`$GE#m-@e'-[Eb#8`UREmK2%6a3pe[iMZ5@"b'dap%))0#*lDIKF)mVAd+K) -a5R[6h-r&)BK',4KfN!#,DF+T45(-Ljm5%!HBm,8[3N#1ICk1i[Si'ajXL'Jid#* --')qmiB'6YBeF4%&e("h-N!$p"T!!p@&3)hF"A,)Sam8-!EjVIip,(kAcBJM,G1j -4A(Li)$,ai)'hdlNA36QGPbJMH"3JS+Ic"J6dG$k#J*lMU)06TI01,XRCNFbQ!,M -lPDQjXC((R)ik5m3V#mK%`pY$%!2T#0BGH1MJcZPFSecXIMhMG@G*MH@5*C'"MKM -V$V&ZC'Y!X&(*a@08HHSM0J#2IZAaVjp3FKdr-IR%SDPVF&9*l4PaE'#GNN#%D4` -r5GC30UlNCTA8QK[j`r8eCbqGGF1j)d(h[8KF#c-ZDrfFmpNMj&E-&31#+dUVB4D -c%Lkc5!Yc"M,'@9d)Gpi!Gpk3!0YM+U&Td52H!@"Q3l+'AKXp$fme("r(mD*6UV) -F@2$SUr,4#,jq"0q)8iNG(@FaGAldZ#+biUhidGpl&,c'f'Z-AK1H6p'0ReKZbP2 -R4HNQ)KT"1ZiqSF4-!$eVGBTB@kR%-4PNVc%)0NcZX63U0HD(Ye`kbkBl%93UBY) -$!(D$8qGDMT!!8ba+F%Rka8T(4IT`)d$DerI40KlHmVF65LIE6!bEkA5IcePJ+rj -GmPBSDZX4YG3%BQ0eZ1"d2B*(3aXC4L@cab*k"#"Q!eG,XbeK([&J%0!)l*Fc+SU -F+!`iP28(ZKDi0PHq0K%@MpkFleMj,SC$9#abV&DA%X6qJGml('*aXUEYpH!G&"I -9B1c[`TDqLSb`l!a%990Bc46@-`1Ae3QA-diI3BL+#KC!F2fLK#[c'D"Ap$QbC`4 -02+cT2!!3`U,qD%G9H)f@LSe#-)[+`5``0dPajJRC2M%#kUBY&$K-dQ'BEab'k9i -NN!$%2qT6'X8lZ@GLlS%r+"SbVD(riKfiXje06T3R'I*Fb6@Jcj8@C!Ia3!+2)-Y -@'J0T%2ZD`!NmqJ128(E%-T-[!YNqAH!%KSa-AFAA$k`,C'(V8V)'"@621d8)AdN -4`GbiNk,"+G(Lk%H'XTNL)q&PABZS'dZrcRr@bBlQmprak&[XD0&`Y,M!d9RUd@+ -CSd8FhEV!`5jfm#!lYX4`E-N#ahDTajBXH#`6i6i%m%8QBS`E@!5$cEVY88&CK4r -!R)P&3M2,c'-3(`&VI@fP2iXbDCBpGiQk3)kFh5C+p*XS'53QG'43#KH2C#84E43 -'1K"23iaCJ&QN+C!!T,K66$![9BC16dV!2ElHjkM[NS$f"XU1V5F8&eM!$H-KZ2U -2iV-H,([8@UrMK1V+"h3Nd'f)f1XdMRT6b8GSSJa4TKd'-da"LMZ1Z(5X3!23lJB -``2FSQ(`d%d9AA)"LVmDa!8GCBA#'BQq%*VCJBMLh4mL5e8`iar'+'LclY(k$U43 -a%EX)D%!&dV*-!S!&1a#`mV&i1DCFbZ4&pp3eJ5b)eC8NT!2C*Lq%4-&h,+B5J!N -J4T`FV0!*4"FCHkbQ&q&kHC%4q&F6Q%3[LLmL'M*-VI,a5N)qARPm@XFVZFEMP9c -jH#8$SV5Tl2'P&U"2IrXbF-&K)`B+C'0Q8N('3J"Ff68DlXYdZ-qDJ[h&ibA+b[p -(5FJU(N9%H8efm3ia)`0lU0Lj[SD+R963YYDEZ$m1Sp15dr@K-5"HJKr[GdL3!*C -!Z$`2dF'BP-!+!,QcTJSNNm01*a$Hce!m+aEAISRA-qLm51J,6%kJdURmNU,L2VN -6IXCP+[Z9U!BXadf6&apDI%!1Zlq-M,#1$p@1,``G3R(3PHRF#91(6!l!mbk`Q1F -*C)UI9EKdLcJdTjcI256KJLf)LVP@qU(L63k+Je9(+r3,-[J!kIAS$#b(VlqihbY --V'BZ`iSeb$T80TFVUrUp"&cHIUQCCr4!G#hlf3pr[4P$RN+!M3-BFSq@')aRFc0 -(3(f+"382!RBA#KrjDRE,q@TNQL)qeMhC-el#m0D1H@ZGfRBK%m8'pS(&fMFp&M+ -!+CPV$5'!l$Xb4S-!DP,J*[(D,`Q%YlC"E4*A$pcA[a(6663Y0dF`DK@DXSM)q4c -CYX1'V*p$X0L-P`C[G'R`(5qe[r1PY"MBF!SLT"Xr,ILaiUF2!*00iKd#fikf1ES -"K$b+!8%'J,3#*1J6@eKRUk-&R9&$CapEEJep1&V`Bm920beq[lHG!!R-b9FZBLi -HT-aiSBi!M$K1ab,$cNMlVq0&a#8J6SRl+#YR6BqV6BqcK4)4E,SkUTkq4!%'BYN -V"#%Ql(3%SLJYI!5!'!&kJ++G!+Vp1Rj3"Nl!dV%9JR1-&@4DK5""*+a)P,TTHQ9 -(GimqN!#,!4Y)Q!%-4X!,#")$iir!#*+&%XadiK(,e0)"UjVFR-#9,#[`#)cR6JY -!-Lj4dXqZ6&DD8'$+'@PQQ8"TJHmJe"R`b6@H!j!!H!m4$"21Sa$d1bfdlB4(k0B -lh-1jU8#ImFXell(X0+Z-')Q2LIMT`%mLN98'R321q%i,EH$h$pJ'QPMfeX+%mJP -LR(GD%K2,$0,NRNVSbNb11%8dYCHCPT`P1be'%+`D84)Crf04!3aUqUcTM2d+-Vf -`5AT&-Zd0KdrA&`41IrA!SP@-J"m-+MB1Jf!0#d2EcTZL2JbhBhK&`,5+$EmL$pF -C!8I*C#+EkALbTl2#qeLihFGKk3e$EJM)C*DS!'C#6-5[`1GcQ"lRp#3RYL'3!*N -miiZrq+XhN@JF6b`"XM"%5(,jZAETbPqpMb'ik8dM!(M,4bJB#YhNS))C,81L5Lj -J-r'VFAb-M`Pd"-"Q1Bi*JL!5,U@Z"#pHDZLZ3[F*S6[#LhITCdFJcAKV+cPPC2P -8@*C3@#C5P&T)RZqS3M&CikJ5#XViA-d5'f`)@5R60i,AYi&39hb0XN`Kde-[1a" -p[qedkiI)2LU#GiiTd9pPYIcP(lJAA9D!2kJJ@B@A39D8r0Mq+jLU!HJ'PK5&4l# -N%J(j&4eq02KC$lFUJ"X5`5HF'(%fJ"$KBBpS)ST"BIQ9X@-&DS&D)NDlQ*`r5J3 --ElIi")RRkP[DGTL'`P#I)P-Sp1Be0+Y4'ae`1&"8imTbHG$X(dB#af#)9hf9M0I -E$PdcXH38`Q(raFK4R&G#e(!q`bJ1JpbGFZ5Df2CT'S*CPpMfGMF50D4KBckRY`* -&+%bPF5r[G)BV,1RE`2*eU8"iei&'!a!qM[mPq0q!JR)*3*%"hT@JMf*mZ)3*@bV -%%m6GQL$!Neh)i(bf%`#fR1$ddB!I1hkk3%ESK+(k@qrFMBmBL%iN1Z)G9H[1pJr -qhCe$rba[9GKSDdp%Kif'M0[%T6'a$3aKR-3)Mb9Vk"UZ)mLMlB4#L8-'E9RrchF -@@,)i$K)j*C*5M-He`!hac`l!@*!!$X)4)Ic%fF,rk0V!!XHdi"JVMK(eMm(`1!f -RBBpHqqId"BBe8,C3DN#)"VKG*JR4I'Rm[HUVB*+5BDbh*AMRp#Tq%-i8YQErY&a -JDjqYG)pp"i!+J,c$#%U5Ba+j@'*%kfmDk2SQjrYje-@ef4imITF6f+pX[3G#)48 -&*X&3J-KK1c%"UJk1V!-l[38!'6Z1&GeMh6d),VVQARi!aF8$`9lqQ0VJ!&!i+&` -IQ#02-T!!cN%'*%,a"&-(8F!RN!$133E53G#@36U"(GX%aLJ'aQM$,"aZmQaM"8k -PcK!!Qe$JDf0"X*8&`3a1!0TF"+f$&,3Zch(@G-L44Y'["Z(e&)a4r'c,#YHE!I5 -lL%3Z8@ar138jqN&%M#&CK8rYZ&5k`e35d2%rFJ9!QRh"X85$f0+pcaLF2Xe!iTm --"+55$bTjP&dMST!!ZqR6$#@1Ra!5mN9c,5K)D9K'&`H6VX(VH[BDBYPHR,+pKq6 -K",l@B@J3"K*JR9S'YF`T@dmpV(q"jf%FK*re$+6GCL)`F4F&"j!![P`IAGI'Q`D -%)0()+5R$A%[fZT!!UqQ8GJ!!4%mT9$er`e(i@3rb925JDaZ"9Z*)cL3)Xa%5CS` -TNBMX)N5S3S5@"PEdFP'"E''l)2"9"Qk#bX!"f%-0H)Rf2)"D(qXc2IPhCDBRFaP -M#eSK@Yhi'IS1NG5*H86JY1ENha@b&mBfkS!'@#6''JNX8K40,ZUc50pDhmb*25T -0p,2q*NSQ0bc*aF$6XjLTl,!pSF-55A(39m+q@'#f1@#Q!ZBHmrS[I0ckP4JSXJM -!m*r!i&dXEMX2NXkZiC5@[iDe+U-e!B4qlD#3!05["-5GNArF!2")5S4)h8KGJNe -3XAH5X!@BV'a'&ZPP*2**F2eAX%!&*Nm&P[PIZA)rK-3cjIpIkK!bXJRD`HRchKU -#5G-%)Mq)JdFH&88NB0SkI9lX$"2hVcR$p6"%*2CB(-c-,Y8pdDQ`cQCa-1X[fIT -GF6NK)),ZeTXhA3#jFdJ[&,!9*"ec9Ce+$i5+LDJ2Y*')MAqpr2Z8i!FN@Jr%"k% -I@(`+"K3Z*,k`T1pd[dRJdK%BRNCD#,40*KCS($@5[8X0H!kIF@T)aKGkMF,b#bd -4J#cAhF@Q%PDN'JFN1XZrc``XhQ$Jp5&M8Cjl`6Bd!5bb#B@je4@R$NSShUTJ%f' -a)b2p4rX&0QFPLPq&9`%N`6(,9F!)0C%3AI@P,K69#irriiC%'!H3!0XAB(J95`! -*8ZLdQcXGB#JQQ3SSdY9J-%NY1Z%UN!!VNP5R@5BE#)%!6UED"ErHr,-I6[4E[aH -mTj'Hqr+jP-0+4p9I"`QS!QFDb2'Ki(S@l-!XQ#p8rDda0K3lNdZ&b-R%*-19LJ3 -JM-Q6p11Y-'C-G*Be+I!"B(DkRV0QGS[fRT@',DZeN!""K`C*)TGmAcY!4ScB@!& -,S*EIMX,ShlD08%$bZSXM(MS!6TF[(U9#Kf0Y4p@b'5'!@QK#MMbJC"HM!,cF3rI -C)(9(pE[j)Kc9J1-,qip5)J&1"E2&C(kFX,(NL[PNfN3G*'`B)Xr$M*N+%@Z%B6! -d''-&Z9@Q-%2T4"*-3aaQQ!d0*I(i(4"kPbFDh38!M`-i6N,[J898TUlM#YL$3,, -'RXrVm@0T'QMY!a2qCP0Ia8"f,4EhSRBJk#&3qCphdI++3h%N@!3,CJ1Bh#d55(# -BL8*Li4Y!'+3)#4N'A5SeL%M*8A8B`!`S&RU)#Icc(&SZ[+!)q1FC-*USHNj6"J# -eQ"`$!*J`@1MmAfpZPRlf3jBe,Yr2+H)*r!V@HlQl,kFVL624`3-Ab5Rql%2aSN" -`Li#94"`9*J$"%ac$kraarAQ3!$5H6F6+ZJC0bkl""PUf5GE[YTfR)QBMQAHY%ee -,b)"V0BVLbdd8I5YYU8KbpbbZ(F&`#NTHFJ0Y(bh'LYHQi4DcY(dL+rc%lL4V-K& -4L@(KJMRRdh8S4N)X44Ql&ZP#C"&T@k%)[(Qf$D4YfdKEAaZ5Z,!)'jM9Pcf*h!U -ZXJlAL3ZkQ8*&Jr`)QEU[lUKk*Jq1R3q3!#"0kMH,0@!6TcmfEBTHZ$IIT-('!") -I,kPZZ@`LGemJeicBXH62XU@TFeJQ$YkE$f1r4E3B+1+ILR59(HJHSf'QZh$hNfc -*@TKVVk6Pk6pUF1c&UVZ[aXY5i4!ipl$BhSM#+!lZBa%[Afa@,pi2Jme#&[%(5+K -KHk)3mH*TeIRFBJYF$je`[SR-CEh-C@qba*Fd0+MY#c'hVAQqc'$CFIhNZ14JMR` -'9%ALbTUeY-b#)pHX-6Tbc6*bj$p(Y&,TM*db44*`KrNa$T!!`R8K1e4LM)P!&[h -FQ@%95!ELUd5!r0!*j6VFTJ518-aE$l*T[KT6'KV!pp)a+1"h`M"NcGY@jESFPA5 -3!(!)Rh4B1DE!f!6')bq'3`$eB8"k5-F6LBL`m)aKm*GP&hi[UFL)%6Fa'fKbJKQ -Jl*@4M+bR3@!Z@`&SQ3b3!)"QHd)J&S*C4[%dEd,Yr1h[lE53!00'A,-U!8"mMEf -)Z$*$3'P4)4MB$(Fa@%mIfp*+"0B5X2YH%GFY2!lfp$SYSja*%-25bC,db%A!Z&T -X(#3`@5qhpIIb[[kMa+)+aABU0))Cf'FS-Qi3XQDjd(LkCfSD!Vq&#L*aY5!b6"R -hqQLIBmc81(dND$8U#AL*)5d,cl(YfC%9KT%dr!%f01p&hmY@LL*N)8)"aP9pYDa -"AUGf@K[D9RC$IVd0*CAHMSpY4dhHAJC"E!ANB@*!`&BD1[Y(IhUrqPH8DIHVaNX -[HVUifi@SNi$m2+(!MF+3!)[36K$b[ajI6-K(baJ6-Z!F4Gd1paL##b9M(JU09RL -#SaA4hUB+6bp)*"94)H1(-+MLQpaM'BMZhJ&dpP9%S4BMZ`)"lhDq-i!LXKFG2R4 -dN5'$%F#%$0"2KkL0DiA%!X4`AkN$k@)[c#Z*B*9[1'iqCBhdJbDA!$TC1`X"&fl -Ea9$XG#03QaTkXb[#&5)HpSTi,ikT#10kZj`)@`958F)a$`4)5rGRBA[#-mI(%Mk -lC[q[3fZG5[!*Sq%H,B8HNSeB@Lc-P5jaY#)mq`%HpYQ9A!$NSZ1f!+4NLa)Z*03 --3-Tel$"LT%JC3!d"@"MB8"'Q!LleBbFqeJN[NKIXh6V+)Q!LK85j6T!!J-E$V%X -pT*`#X[%#1*d)"LZ-DqaUNb`biaD+$@`L@EdNbhL*Ir*K*BPBRa%8U#%ZkFU`GTM -2@6r-UG"pZRi$%U[#e6d8%1DF2E4#$i93Z$LM"e'DT'r!jd-"#LjaNJMlR!bUT$f -@N!!L+Y-l'EY-C+k#Q&XJDp*MB$8cRS`+!j)eeL5*!PNDJ-NH)Z($"-j,![MF,4* -3[AHQl!3$fPlDQ)m-ikLi"P20R4e9AFdb3L#1l659X1KKAHI5-mK-G'IT#%CK2if -ZM*qK6`M2JSjj5#E6p1%admcMJ2r5jarrj9HIJ5('jp@UCANS@Z%c[,ieNpZ"9PM -I%&4`B8FbC@LP,f*"%iHrk#4AcHdjiQ(La)P-aQf)b!UpT,04&,E#c['DMH)&A6K -B[(6I9JZ+F#ib$[J0-5TeYHHK*N&U+SH43aZb`VS2EZ*4NIAeaH9Lf`HB6Pc65Ne -pBYZ9kp`AlH0MNB0*r$"2$-AEF&"aL)U#kiG(b"`,%E9qq0`ehj,UNaBfrF*[ceM --++iMLDpp[FqA3PG,5iK39IrK53qF)RFQMJ`IHSA)Qf)E`#&88$k6K)b#&(%!l** -5LZ'VN!!,!Q,6D$I-kjY'!8j!N[VaBP-S[26e,CES!"p1pa+cP$4meC*JLK55NUj -DQL'S%2b#&-$bLM)jFeF["&)6SD5M6A`c9pl%0h10QrKQVV`*#C[iTVS*2pY%"G[ -%3'iIVLeKQkJ3Qi40m%Pd5AG2iR#3!+l`krL5-q)QMdFS(00a,eKmZBd&BM%kKN5 -Yae0daYLT8DjBI%qKS*E2'L#J8"-BSkPU&UjBNLkLZe$Y,Q6G2VhZae@dT%1@-N5 -6Sq3@-4C83,)HL`'NZA'1,pI(QmDLBcbF[FVf"HFKfC(UXH!H'4!IZK*m!d6Y0lL -Rm3fiX64NU6mENmDG2fP"C"6ZZHNb2haL4Y*1XqM2HQ&aHFcramp1)Y$Z6"(pD(S -qjKqAFY+LJHU'29qkc'ZqpmZlbmbL+mZ1TUjV89VZ4QAC+G'&aLP3UA3+af)T(E9 -lbVR(CBk,cMq[-)[&@EFaS2MD&4UJ8eD!p)N"Tf,&imkb!9((-Jb)ZXaIr@$AbKU -c+'9j-8#keN!$JNV0q9*S3i'+B`d'K&hQEablr9m[M6UDfj%iTjcEAHB,Afl4h3M -p)05bl0RR-TGVKcCH"ZTGMXdi[-YPhMldMmTPS#ikDM"!G*PrC,PDFd28iilRd6c -Z-VrHpq*rAFE#"ael-5$S-MXFMmqq$23ENA#SR$Hkc*pP2$cK-Y$A1VCLJ0CPIZ6 -QPGJ0dGrNf)(QQl!i9rrMrAG#R`"%HPXBGK4Kd,$,22QI"ejlTbeJ8,hH0JBGUc" -Sd'8qrBVR`fPZSaK!SNRB"JD3!"X[kRcl!%2r(+(rHaPp#FhUJ6if5bj32rD6-BE -fYaRDRaM3PYJLZQLE51+6lc+((V[ih`cC!SCXL3&C2eZqBYSFQKDkc(qBpEe+KQ+ -8S@JhS1KL5bHJL'4$,[21r[#r6`2*BKEK!T)Jjl[-J6jlff@JZFTPVTQqe(`CD+j -aQArcd,0E,`20jehQ$hrl,dY[L'D4brcaeqlY[!`dPlR-DrrdkTHAJ@D0bcccS[h -Tbd"cKmYFrErr8(a$0'YGj[`r[P9i'@KZGTP04`,2A!DD@ehQIp+e[$P00+@I@f+ -Zf@BKZKh,IfGM+(B4LRm`"+KI@',&V"%fr19r,$)cp$jLk"de"U0I@Q)5D`CRc2j -rra*MU)8*0HY8fe3ji2c!%[1cCSL3!1e,KU--V8mB@YpH!#d%NaN6e[@p*&*`P6[ -2rGr90d!+blASjhF50d!+VMcKhqUF,iN8LmcJhqrImT*S)CLYQrlbmKZJ"9IEm8I -YqCG%#d*!1[2eiKXJK@$`c)lDhldN8R#%TArqpC)E))9!fTjmV2!'5`9(RI6Hh82 -64!ZZEdNa,X6D0f*#&)i3BNrV1ElPP$&k"R51Rc(8'KKUARfhYj`e1Xf[EKe2CFK -GB8jr@prT,HH0cTcrrX,I-I51-[3qQLCk@**$Mcrem3h33c4p2lVj`3h4JrXirVM -frlS"HR$UmbRrrX%0N80J1e+q[qF'b#'kmKUA&Yd!16M4@mU!rBB,"pIZm&bCIN2 -N%1KHE0YrmJE)34$mB0[U6fqiF(!QhF0lIRj$p1$N[crld,[63ZrKGjqTjY+IUlR -REp8m#S+4R$Mi+TK3!YGk+"QEmcBBp#YVc1-X4,LeeUZ&#E1(Ker)ZPe[eJl%2%X -qBj-@-,8$B),$f4Z)'GG*+miIHh9Cb[kMcb',cV"!VCPdea)FFhTV8kJB*%VGa"" -88-)[I,cLr)4ec"'P9TTi$i4-QLJATBXd-30!Z"DS2&!!lV*6-52VpJ2,([15c`D -HVNKlk+Z%PjKcpP+[(4!p!U*"VBH,d[0RXQk21l[NXjM@ajGJf@0Qjqhk,`%dGRU -iBb'BH8j0iNFRQCHm'BI&rj)h8bbrII2mZmlEXHJibj,24TdqlVK1`jrr$+a'(3S -"',3%a45@*!B0-9fK(RK92R$FI-FVaNZG[Yp@RrUeFccVQ,2NXlMdKcG6j[Mi*%[ -X**Ym$j-Dad*jQK"J(H@XilVFBEACE'VA$0Ce9Hl#&CARhfdD3),m'IJTEb,9!cQ -11IKj"6m9q+PVDQQkdh5KDDMe2)XSRMHRjDmq1H)CN!"'+!Mc%3&JSmL!#,c`0q@ -#X9a!3A(Y"E83KB4#SX8i`4EQTR%#LBAdAXeAM5qA0I#+1[#QX@!P)b&H-4E%`[9 -i$HZrbS8m[,bJeqMbKUMAKLe'3%Pl1-5)Xa9TSBh(P*Mr@[[ceH210[UARGeRKL% -#6-pM%UE1Nr1rDGi2N!!b,aH,ej`*&PrV@[,H'B[i`Z`8jrMk&,MRda2@K1!Uc[% -aUHJcFV1T6pHY1BZS4#!0ia!f9592qH5T#MB9,)kpm*-8iD"r`e6TJhk``%%rAq# -JA`J(Z4U,GG)[ccGGL&iJKh#dLX@,cd#FY*1B#(dPZ[$UBLrQPVpk#XX#ii"3@X` -km!H1")AL-J$LPJHIH+P'`CV5M4a*T%3`VJ*1i'K*!-*X'6fQ(*pTFK51([[X9rr -b4`C+C#lil-&-!B`3*X)@!RMK#h1Xh#U)(8rfZN`P%3be3'a&`e,@Mq[0XmrC4S6 -1G-PA%&N(8Ke!I0Z4!,Hl"b5i(Hk"5+ekU5Dh4eB[b""E4)J&"F!Ff`B$4m'3!,& -IkTMhVG9ZcSJShRC5ME`HSJQJ-@e"L--X`%1*fQ&!XJNQ&3("K8$Sc80KA`-5P)k -Ad+6#S4C2EH!JBclq+C+A$YIa!#i+X%Y@X-1(b45AViU539TH*1`HRC%'%2VF0Rb -JSa)Gjp$KX3N6Pc#4kFJcHI!"!mY)K[cH"RN0NQVUFM(Vk"eYRjVCLqmZVYiX -`JJ!K+'JdpJRak#R"R&e)RJ[MTDGRr)J),qF'CU54+@QL%CHd1r+1a+1Mh$%Ml@" -$%j!!3'$&BqV6-p+Zc#HbIB+4QDZhpK1`9E)+TXQ,V0R*ikVrL6f#YLCEUlU-NUf -IVeHMi4U5%#-LmKCCFr,bbkm4Q,$m84#kH-,HK!G,IX6K![a+(Cr#fHXFA(eSX@c -qJB(,mD0h@IPdH[3$)4!NUV@MbC0JUQ8CM`6ib9ZXpGr"CrRl3)qATj!!%Naml'2 -'A*B2XY%d#56q!qbBC,am@!lb&K"lP+(UJX1X`T)5Q(K[q68NJik6)C@46&cp1N@ -3!$@*M%qK,1XHSVH)L!$PMm,N@PJB-R"F48S(U[p*Q"a2j,I4Z4+E**9c!*21*92 -&[1Th+4Y8ScQ!D&j+#mi%)L9SiM!ZmeDIJUP@1a'Vbam9QYePB1(i%b&$i-YE+a- -0'NC6P`J,$6[bl#NT@0iJ-h8a'XDI!GRf1R@kJmVl*KXD2+Q5ETZ&)FJh-qN6#@Z -5"PEQV39)1#G[,8eCdj4E(9@rb4#@c+Pd%`NiPlU-ad5k3"b*d[)%B)$pVD8C2@T -c-P&TC!B0@%kSXh$$8)6,'de!+F,AZUa*Ri3T`J"S6(*E3$DaZrfNQU"jTr%3CBd -k1Bj)3Z3i$*J0Yk'Nb@ci[,86C(5&ijip`!c@3X+fP&Yd0Fa@0A"$6jQQ`e#4C0c -UA5+r4,CHhX)Xl@-'E@'DZS+!S,bI4'SeY&J3$V-`@K*&@"*-MaLL`+FA"9&jD41 -NIIbb&jE[H+Q&rA55F@'hLrS,qqPq[80ZUT-RhQPKM3j&+QQ@cKHfcT1%THNR4FL -+-)48-5pGb84VJkQ6(BE'5+*ebqQ#)R2p"3SEYUASEbXXP6D%eP2Z)*C9lJ#e'bY -!Q08m*CM,&L6#+K()Jb2ci+4fH@)mQL*DZbN3kK2FS#*T-,T#Hd(d61q%-SePT(+ -iIl$ld82AL+`(TFe2K$a"0i,83+JE@G-e,*@RDq2T,@[1*U5ZFkHh(,kpi@cB6q5 -D"JkcNaJe'0PiqVYVcLHNNA1R[`Zfm[a9lTXN0dUXMaEcfp0Z@+2Id"XZ2PhrK)8 -QSIEQ3[VCA[H8e62A+92aX8Mp@0lpC[HEZiraSe2bHNPTY@-blh92PS6Zb4le)kS -fHh9bQ*SGG8`Z`(5$fMfLIR5Uc8SQakMC4XIN1+D$DRHMqU'9Vjbm5Efb'G2Ee1k -*kSH004P5QeK,!p0&&C4q68Q80&(L`[#9fBKChN4QK9I@"mL!m-M5dN64)'0S28X -K['I"6'Td5MP)h6AZdHQc"H+q,AYb65)G5M$+%`G#%Q9l$MAE)h%03Jq-#FKe2dP -hFaMffN3hh2)DCB9rq[MUU9km6&l61c"j&4!A*krGR6fjCA+4EGlN(GEXb9Xa[%J -GVQ($BFL9FfRmk'5SU[qNLkCJ,S-KT45S42Z2aP49$Q3-#)E6,YT%Hbcm%d[XbQa -cb#`LS658BNZB!(PJY[RPU5!NABP[r+NP$KCdpXNBLR8`VMYTmLjqNjmN1C!!##a -qmlL05k%Rp)LNDX)0PH(A6*2`98)NVfN4['KaEc0#"6&Z5)392S`LRhLkpBbY@R, -K*h!0MLJ'PTaK**Z6dC-N@V*ABRUBTKZ*pHAK6EQmpQb0*C!!`TJ-%+TLJ5@II3K -feXITpF1c'(bq#XQL$KX2U5p!BMX89rIU4h3*BmcM[9)Jf#ZjBRGD2dXd0jd-R+5 -$G9mdmTVc`L@0Al6`iqIaFaCTYiYVcj*bc0JAABb8f65I4hm5KVPrZ!d+Z@"'1H& -PQa4iZ8pbJI9ebKZhc8Ze'4E+c`4b'Vr)P1a$iGdFG,1AZflk,)!bqBcq)#2Umpk -a9&Yh$beirbJ1UH,E525$K1d!fiSTLJ)d,U&$5`q#FBU$2N@r858j'DD'"18dd83 -BMB0J$Ne3'H'!@,j2U-b0QebcjVe9Q,li5CBpNFS34J*QKTiljlf9VcEcLRiNamY -r&bmJSa,KGR4+5NI9jK*Q+K4Q+0U-K`KNFe*%JNEEDNpK8j4pCL+4Ph#J[GqVLRP -UiU1$Zh[++Yk4QBp-$[16ZrUE$S)pCiafPF-R,"'8(a`d*NS0bZTB4&,T8RSS8e@ -5[(1-CGe9d45@I*813'*dTCNba6%H#630,$J8)[r0XSU-QS@%KKibp)MSh0QTqdc -KmD1TqeL!'0XpP[TD4JqQEb+JM#DR4Mb-GEYArM)Lrli*CYS`)I4L`'YLGZVpMT[ -Dp['SQJ!'(!1m39d-aMab8P#&UkUr,EC(,BpH1aL*0$"$jE"JNZ$)BN-,`%b6-Td -#0Y!V+`F+j3L&&)E#%%0RM!SMrff*$"2lcj)bDkME*'9kBHjhMd`Ebi0PTf`QS(U -cHVm04f!$$daG6e)a`5YNJ@`6$fJ6l@0FC+bkU+SB!U[1L2C!eK3#XqQ&59SR3i3 -5Q%#"$2FDMbCe9UPhM!bqBl9UB'erLLTd-#j"VRXdpBjT@hJdYB@bY@CZ``4EB$+ -p@+kbc+[",P2LS1c8PZV(S$V1DhKpJLU)k$FXBYkH-+'ZBDKV$-XI&Tca54BXDD$ -YC6f$qJBJN@jL4k!c(8X`e(%c85+,6@'#(H4KQfNL48XkY8S9YX!H8ZHcjT!!S0C -RlepBT3iY24GJ`V13!!b#D"[9i9!6*A'(-5L5qc"c8%b$15U`eQm+)S(1Z&Z@@qD -@Bd&8P-!$RpXFb@4BGV55#LF!Lc8CAfNJUJX)@lr#3$X'QQpCJNeD1ij'PN&('`q -#QZJQ(,C`0a))TYl%)jDkVaI+2P2[ia&-IF#5%SCTfpJUNXfm!F8r@$`X#%8%IPS -kUR5Af#CK4NJQQp92U%Zh5AbLejSkK1++U$Hp66@*T`TECS`IA(-)8E83MHci!3Z -2!$FkPl&dr&le1JM))Ih"iN`SMUm8qk#%lchQ9!"VG93&Fm!fcJ"L0RDBHJ%1SJC -ha`rZr3YH8$8+pq0)#BNE0Bk-MUUAbp8M%MLL%8IFT84rXMSV`5&BXFf%)0M&62P -p"R0q3iDC9f!`9Q&L&m9H%fS$UJ,rbdefE-K$99i`GrplHX``840pi4*28PS5Bbc -aJiX"$P`-F"$#K&dYXSp3j8SUJ%e$&B`)K@N`qL8r,95k6Dji%aMK1U0S&B5*S)) -1@G(e3cUJe!JhISJ5mJJG@D1eCQ3Qea-PmP5'K5EN5NVkrAT(,$b8$P%dq1brNB% -c,8Yj)Y`1GY8I'BElek%LP-0L0`Lj!3"VdVJ,MJZ$8LKVb%[h8C*qI1DRPm!8hZ9 -B-iS"$S"S`,j534P9flaDNYY6#SQ&TBbpQ1SeGAN(88R&--!eP,9UiBj"l8!r!Z` --'!#Y28BIKS)fZG"j+K5Sbql2k*%ccE`L#U#b5[k3!*!!'++!*FFF+C1pN6%8-iZ -(H4SP0r8Yd'"%D!!RFM)&6-f#ZHN9+10"m#"e2[2@GP'#6b6)K3S@5P"2"Ca`*4P -!5hYB)T!!aeL$LD4m6$mcSX+@V-6Lh-c8bA+K,e,kU!3lkJ`TYS'DJQCLD52E+(N -bXR#!GbK4)BSMImQk"P3@)JZK!R)jBcT,(q4M"ifaKH!m$bM-3I8d594JI,'#ML@ -M9[PJ"-N!SLq%3bqTKlDfpV$%V1Qlaj*Ik6d41*KDK%FLG9QrefCLABq-ji)+!Z( -$IdVp1+pfT12MKr93G082FaNB&b,VpeFjafJ+JE26j1SpiGqIZSbF!@E94a'3!%- -G9GqZ3qC,Qikb4++%8JZ5-B`Q9m`j%8Jc0E,Q)GQJ@A@0Nh!09!4`TB@'`[64*EK -*Ic&YPJb&#cD`#1G+Q"d!XepfbE3@i*D`!0Za!'AF!bS19)D)%LPI&"C'DD+&86T -SBDJCkha+@!,PFA9*6USI+@V(493(aKJI+*hkQR&j!YH4X%CrH3kR,J2b*D@AU1( -51bm4e0Lpj"+&GD@A#)XfKah'!`8X8)kSb-aE5iQX[,38qDKb#L#)RH6mLfVGA$$ -Z4I,!b9#M8)RN,j13!+aP$JVfYjbI*#HB!JN0`!kh!"S@C58X!3J24ae%eK5ih5C -mT)*j+6ET@-+9#DBBXTar-m8m'XM%1Y0))#I2iDKcjF`ZFY5cai5%5jK%*+c(M`B -)lR56NMi4Rj1#P19@i1F9S%r'm,AXX3&EX11D6P84@30$EU++A+Z-h1J*TF'a$)m -44a&YKfh&QjaJ`jT0%i(F"*11N!#2a$r[bd1M[-8!pL`P`I$K1'4UPAJY`JZTeJq -$NC!!Pc!X*'%a0H#SHe#L8#+l'cVIdlDVUK@1!A3EC+Ej3A)h8HI2ZPN1Fh%ZX1[ -rUj@CJSFMV3$Q"NdGD$i4#fpM`-a'(19PL6UeB"1#62(!(FG%HS%TQC!!!#"S8%( -3MHePB(Z0cQ"bJJdi,JJjJ)"'krmJQ'BLbI`XZ)@Z&F&QCd[T$"6!%5d%E!&85(G -"k@3R"#iaqc(4cl+c[5B2@!jImRb`&0R*mm%BPYY'NrrNM0DILN4C)j6U%3JEGPq -BXN+HL,MF&c$T%J"Fb[[%&Jjb5LK%5J-)m%j*me$ifHIZ-lNDS"`J)68JL6eH25( -hKGmV#E"Kq!KN)4!E!(MY@'B#m#"kLTK+aARI)J0JHk,[4XI3%He"J!$6P(pmTf0 -B%21JNK)%fQL0#R+bU8"9!M[&%l(G-e2,%5KISHUR5,8F#R[KGqHP&QPRLKlk5"5 -`*[)VU9*G!GCE*YUYS-T[YJP-*aAE5c)9*>reF*aXIY9$%HC6AYI4G@1PBd[3j -QkB4K8J[&)qFF4D63%8Njm-R!F%@)q#)!e69F!D#p5#$k-M$G#XTXK8C0&QSfX"I -%e6YXDN@b*MVJr`fV1%Y(%apS@*9m43$m&hG8M3bcSU6AG*)"b4%)1ZFk%5b0eH9 -X6j-065PceT&KF*PXFA4Xq`Qe%#JD9D"Yrp%a+KT-*[0NJ&G[bL"-E+iplkDk1A` -+iP`#`$B2#P#mB09HV9Fc0kimKk3G$8%%E&NSjBAe"9)H%VI*3JdCYTH%8Gk)+C! -!UAap)1mS#DN)%MhP(5h9,+`L#f`TN4aVl(9VmVbSINX9,pYINDmKY!6P+RND"J# -&`QG"m%+T9K%6"mA8L+P[QEGf-L8qQ)VY)Z'3!#"FCjB@VL51&p8aN!!6pbp%dh" -C33Y8MTTF$(NA5qSjJ5&RR`Ud&K"m-ih#MKep3$ekb+$djD4YIPkFK&0HI&V#D9+ -&+Tabh@KSDN,cE4#4%dNij380`QQ6L!0)1!QEbpY'%k2GH34BeH6&C3'9ec)k-bm -AMB+#J-+Jie3afcFf#)J&jX1B2!Z&N!"+Z-C2YL%E,3YL#(('QUFb8N55$$c"d'Z -P!#G,p3%RHG&T!dlbSJ,J41-hJNkUGY"fDE'qdD`L06)Yi%K9[J!F+3Z1#!QZ9&5 -UF5d$Y&5jdY`cf@+5fY%a8[KR")eSC0")V'dQ+8kQLPIJ2+55j6rh)CK38''*'EP -b-[SP!ij!bBTlr[B68$R%'eb8'2$F31TNYiY)5JEhJYXj*Req$1+TP)ZY[5KX6TP -)cNF90C'V)'0C"ZAa4G0d1d5)bF9cS%+MlTdGEN(Re(HrEcd[A-ZhIYkhIG,Sc1e -Eb&d3R$BiabJC!J%)YNm#JrJm`"L9b2U$P29##+dCj*N)QJQ!IfB0C5pATqm#S-F -FK94bTFih0H$B("cV4!-NA0QHJdB!`59bffD@FJG4F!Gap+hmGqIRLFEPlUKDIS* -B`(kSd5SG#GrDVaF*)Q1Mq2DEHNVj8He#P`S8)a!1XT%GbR*1%ShcEd2K"hhZa-- -2h3NFLG#55!d'4iB,!!6"`@mVVl'Q!3*qS+,$Fq8SSQ35@HJ9%FV9CMqG@SIS+XI -@kXSIPB&$JLJpA8m9&NDeQ3TMiP,d"L3*!q"k$pKKD8%LA$0`+LPESm6c8BPV3)k -8q$N-X+SNhp(8FHcchkP56"K0V(5XAEJlCU%1QkRkh`8"aii%Z![*d&JLQqT'5Qk -P,EE@"hNE&2XpaEUU2aF8ZlXY+SN$bQ3*h#'Jb(F5f!F%+DR#%PQ2j#,HdHcT`e6 -NR$l)+[R+9ipI8rff,A[f+[bXY1+Mh)R)RCYSGISaX!-[HdDK9P``JbRr$eB&DD' -UHQC[GEUf(54mEb3Q9%e+R@#Ddp6TU,"TQ9NHbF$'*Y*#LDb5a6BHd3)NRf,5#F4 -KKRLRX,$SJ1Tbr@M`9P)dK%QTMaj6T4Bm25S3)UaRKZ"K"(3l!flCpB"VH3b)1HK -IN`LTa'Hr(ZPjG#iAb-P%,QiDS'c(#+#L"'ZL*l+e00!@4EV4e+m381V!PXp,(BF -URa'Ge8mL%"'$@eGYafHGX%NN'r+J81aPbGF!3RVKQK&)d9m-m%(&Kh"eIJZNM&[ -a),rqLMP5%V1+Er#&8'pf&CR+JeHJp)%DfXVj$2U)@BqRm9[m1KjAqF,i'rcU+qM -+6R1AmeY(0ZP`N!"B$#B+e5UB'Q+")R2,S)p88RaA,#kbY)cjP%4",#"2YXc%4## -,4dQC`RH2Z'+$V#QZq@)Uhb!U6CD@)+"kYeU1HGJ!9)-p3pFqM3eFr6pa!p43#fI -k))hIR-EN!lf0dY5me#f)lLe(10p&cF64e#e)TX5f2KFIk4)U"Vr+Y[Krc',!8EI -Sp"@X8q+[%K5Y0aJ9UL0$Cd'8,8f3!,q'kK')[@brEd'@R#i-fVJ1aEiI)*X*%EL -IQP+RcG3rH0,M+#Vr+59(TD)%%PdTU!kh!ba2G[dk-LdCjT5K#!0SBXl!%Hhp[J4 -ETVBJ6brERE18KXU6(9@,8D9J+5Aa"Q64S%9&Mhd)KLaChPSc@j3arPUC384@44G -Pe@#T0!)iI)&KEMe#,,P"N!"I04#M5"8(c%F)+1J1mK`NL5Cam"(FCTH*b&flN!! -JYSY0YS2YRJ2#!iL5Q3T0YI[P,MQM#5$*A`"9a5Z,mE%0)-b,HX)Q@a$f"N*B(K0 -()P1cM`1`k5k)C#Q$L9-9pFeJRHL+'#+jLAdHea0UKS8$)@qck4S)Z9p,(SH(0hN -5(VEN,AKmN!#m&9R'fNUlB%LN,[-ZB8)f+9)GC3-!lQ4Fp08H#aa`kqkTH"%-Kl* -R,kqdliBj8I*@)R2,(BRZGlkdV0N5QhVV(Dm5KL3EL,43b)3&G+Q,Y3J%bp(8$9" -lj#%&V3C!,a51(%UAA`')h5!X#T!!''CS68hH3PIZ6Z0ENbF*&fFGV68$X,@eQFr -#Y%Rca3$I+PVC%T)Chr,+&i6Y#JJCPYI&1ZhkJ&jFm(@pcBmD,RY0hFjEf2`E-2p -kAhEZmT65$S`Jq"@1CK'%lAV+(Qii8,eJpc(P$IP`Bq!Q9ap2fH`EKU[5KD[d(39 -(I++(VXq!VPX2AEXHZU,a%%5!3DMS)bdFDMK)24KSq[64(!kL-T@ql''JHp0Dhba -C2lj[F3pN#k"`'094m9cGMPY[1hCQe,DS2-8S,!6'J"K09JckLJRQX#h)@r#6MKr -a#c$lh-SH$b#bBDk,B)4V)6T[XHN0*-MaXa!relmJ4@YZpRJ0Mk-F&EYFZ4M0GMK -QViUi!GcBa4ae$j'J+)&EhX-Yahc%e!Cf6jfpdNM!3U20)&k0*YF5m5UVHSG-VR, -YX1bfc9l&MP`0J#HBYpPlGq1"U!!c"kFF64k(6Aq(1H8@`E6248580mK*585!6Ia -2J6&"`A!A@rj0dHal2(P$YS3UCjM"KhFQUrSF5mj)#LmM!5Za6DMf[()Q'eJ(%jc -,(S5UdYNJ3I3)BSFYGC!!Phpal([$I"Gle,)&h@-8B#8C#`S`98KjNG%maJ)6$SP -XJk0mNcRM"5B`PT(V+&p2h[S8%hG-E$$fLe@2K%Ge+d0TA)*%-MUVRe#GY*b+*kq -++1CdbFI,V*f--V&i8"$h*9`U@[kQRK,2I%(dUfk0M--NZ09$M&ci%'8*Z#*F(43 -%Yhj&)d)9Fe5S'Q4!XaI*B+BH)-&C-*Fd`E6'-XA*(ZQl,daZJD(-Bf5XBmZH2Jk -0"QhcTUq`c8YZe3HHQ8$fIT`8S@pkNKlE8,cIT`03,TV0T5NV`)M8-+8PMQ#a+%h -[T+6U%GrL&*J*m"mATUp#a6V(U!VC(aI#a-mamqRN4M*C5K`154ARMd$P&*Dd%5" -ETL!9KLCZpXF&9$frcpf88cJHSQH*Qa90$e`kK8U29TMLF,-rQ6UGpqT23DhGD'S -j9&@IJQ+f3(#!M(bJ'Z9`G`qC#Bfrai#p9F@SR16jLFa`U%VD4@4*phQK@&#!"IR -19hh+kDqJl*`lR&$E!N8DbLiBiT+LQ#dbXKHHRMkhqrAZedR0%DQMrR&KYLI%YT4 -J'f"(Ac0XC(6+-C!!@SB[R4)DdjACRU!k)%J$8#b5qUcCdqF#N!"(!f!UlIGF!SM -MIpphRk)"B!VRBJ(baimQ$`*pUeSirdqf"#'f"1)l,!'l[LC6Ea%%K2,G+E5d4h, -GEA6`p('iELmlH+M-`UDB[-edl-Fl8Ee0L!PA3V%QaJlY`+'5LM3TA5J4LYajDi5 -&m+F,'r3I*$!32`NAAJB(K#VZa$@iH`e6NAA2Q[drZr%cM*mar&Jlj[h2Q`4q3h- -BFAeM%M@Pa#K%b(15+I'X)3Z%cL`BR9XLMIS%i!49i1FY4@`jDb48SV,qH5r@JMQ -BP9a4+J&qS9bj19Ah$P&@P-0-I*5*`S)'H5dQbB!F,Zb"'9%4&X-P4$T9@KKrR43 -eUF#RG(&dEKcCI@(kJG(XZA&(IQR$)%C`B%U1QBTX1maHRJ'`(k#ea8kRJ`!$I'X -C3k-+UV)3&338I[#!+J+NDikif1'&T3i[*!8+G2J`9j(ad!!#Im9ITdqUIPhBNUl -dPR$"I4JkdXI2d#(HqH"MQ*f&Bb"m&TdN"8!j"9!1m`c8b!,dmYZY)%Bk3&XL4iQ -bSMq8SZdX!!1)EAa,!q$P1LI2e3-m%c-la6Rlk5RT8*58258G$Q2""d!$H5N-D"e -PjNp4DYBdEiU6M!i0NC-[9jC%a'452$Z,44!KQKLbd@2XT4BDeG16NTTMJJ+Me6I -Pa3931ZdqY[E`5N28!5!j0jicPlPq!`8SQ+G*3Ar#-db,0URQ9%L#NXRSTe6a&UQ -HE(cl$[l-L`%HKp+0J(U)p$-mS,5YK4CM0CMKEcc(PN*I)3HCP-&FjUm9c&c5,jM -$kTP,%Z-Hkk8r,+5PGb#C'&Fa14I%R("b(iN9E+'Q'3Y-6P-df0T6LU$2M!T*6*( -!8+Z`!RYDC-HIBP(+-#a-$Pr!8$#Bj*C"BRh)6B+14%5c$XV)+ZQ2iL!`'+Yk,!k -9Vb*[C&@2qCLa9Sf!e&r,@h[d+dC$KZ@,M$"hXE2&,9(02#$1(eS'Yk%M4KK)TF# -`3'%3&a3D#%21&Z1!2*Ce#3P8qJGi*pXm'dL9m2-SLY%ecM#FHiG3pD#"qFir0#+ -)Nrq45H,%`)E[J")UEA[f$*-+e2()!S(pd3hdCap%+A!2Ei3+m8*DA0XY)4#Q&Ke -*`0bLb&'Bb*8GF2a'jRTH1BJcaFX$A)Y!r%"``,eKS`1LmjMM'A4I)mGY,ZGMFN! -R)Y5IkMqiC3#"Ub)PqlkU+Vh3H%RCS-i%#NZk*iL9jdD!`RS)PK+K5@V4"lF)+@- -5%&TdZ&Y*mX6Gj(3f[(L6-l$3eUR)mJJ3EA5F"4[Z"QY9ZUN3LCQF9CN*Sirq`Ca -r5%pRLVIS6m!Bp,aGhL!)`&"l+@-G"T5&3@bR#PU9j)B)`%be%+bCiIK'GCj'Jq8 -XlVk*#Z%$!)9)N8#@%PD-&8)*J3,4@)HIHZFJU96!jeD+f-4K4VUY)p@Fb#bfPAq -I%8N14ZF2GI3e1AC%,NERrph8J6C(6D5E'Gm0XJ&cdIKVDQ1G-+8Hmh0dIDjfKF& -#r0cNY6e`"U$d5dTiid!#P3h9Fc+am3PABm#`-!"r'-!elH$fmV)"PB3I,D-cl5r -r#N1#Pl@$aD0k5p-9Ek-N"SBQAYC%NC[)39%@2J4qBQVTSCCAL"ifM,*0'XL&J3Q -eUN59!DePLXFj,4NPS8&!*)9hcq1$e#P"#@3H&8KK(T%RY3['JcY)Z$1#9!2!eBq -T8ddqlTEJqJALUlUN6b6f"jUJqNK(3fi23qA4(!)bl#$6,[D(V4LF"5Kh8*0)cX% -X22l"HC!!'T!!ZLAKcbM4$Kke'jV'"55hPp-V",hpb4l"q5Ki1J2Pa`f,arNFTYk -1%K#LFq%EG-PIdRrd+,hfKpRNfi``qh`TC,*Bj+hY(ac&2k(E&6CdY`U,XcfS)Y! -R0+FP)Q',+!m,S'*EURE`e@mE"RB*LjLr9adB&4Bh[iMFRL'MSdTH)8TU+@MRDFA -LVriTJkNdC+ThmaFH9iqBV`kG,+#5rjr#NZ6IerU*V+@[d0fS)%T3jmX,f-HmYA1 -e4XAcqB*+hhj"C9D*DZ"FSC8GC$-8E2&"YC,E*%j*"1N2Mk!r-J*1X`BrT)jqXr0 -HFJ,+Mm*9T)44JK,$a8d$lVl)$P*ia`f+XZ3%#$+T5[e[!+*5%M[paJZ2k`FB4Y` -KjD`Z%N!`CRXY3D40VjcN6ZG[1GCGM!,[80*3c5Rm)5M5`VLa`JUBYj)KFi0cU+8 -B19h6"r8$YDcDK+&NTU46ReM!$)SpTC5&$aQ*6$i$3jNNfYUS-#`S2q6ecA8XL1! -2Nb%5!FKkDff8A!mIj8lKchC"CG*V(BAdCm23(`e$aSSSZ0-IV`-J&2l!K(a-03K -U6GP%hP-pP@m3-5#4`9bYN!#TDiT4T*GA`X4fN!!%+YcZeFT'['V8ep[X9869a@Q -SiUfl'5!*kV+CU#-5X,A0kNX2$2YTm5Tl9F9k#jPU3J-cXahQBXPec$$ljbCbRMG -KQ"P)),MR,D1%6H5N)1mY)m#DdSZPHSeHUEZMkPrZ`f34i&ZQ`RFGA'39I[D#c,L --+Y6(5b'*'lM0XS@2iHL`$5"0pLSAL[FQb)4(-"AE@rdIBCJ*`X#(QpDT$9Dba9M -TG236L1Ch*'6T@'H!@!0KSDJ"IPk8K6D-+Pl8Mf"+)PMp#eDJAiT#pY+&Ep#M2ec -qhkc3XF6BZ,`E"A&e3[mI!!!FPN&%3e)$!%6B$e80Gc3"%#(q8!CIS@,&aZXB-m` -3I6,X1S+8Q-8MaLJJFl8c,DPNi6a2+p!L6U#Tb)MC*A8`jicCiEBMhV,EHGkLk+E -(R%HmaYXjBjcc&X2-cMQc'1)a3p`dhSB-!GYrrlrh[GIAdJ,ZlRIhq`XEY%AP8)) -JH!)J-e01LQ5R%rr%i-H85"Qh#!H15d(f#H"RUjF+4jpMUlIDGej-&NN)Qr,$LF! -VekHFY&3#28qdEVi`hMdQVZLA@T!!6,40Y0SY6d-)KQL"Kad6fM[hfqbGE3LcpED -0Q$bUAlTL`,DQFlpc$4YHLm,T#BUba)S`USU9Q6j+rr#AUr4,"j%@YBMaG9C+'[A -KdJ2SS-6P!8bUX@k3!qiX,D[[FZ[cQNYTb(,-Z[R1r&ZVR8jPFR-TMTqYVPKDHY5 -6@B@()@JdEPlA#(+GTNm5@CKq`UaAhIPKT(G41IRD6r,$RheeA@-`R8ql)8db5*1 -m9[[!'#BG`U3"A,jDhrm'ACCJM#A!aRV'f,34LE(ePLS0B`QCXEaeMH-05)4$QCB -9kaUYpQqYj8!dCYZ)`ASFZT1VZKk2LeKf@9E$Z8-AAF4$Kj3`+THf09MN@1eMlI5 -"aaUVr3Yf()63eVB@!hIJeGPiYBbrHJFH#khfclMSJikKUp@[p*i!#FJ9AZY8CF) -6G63C(IdB(Z,$1(Kf9C+IEB-Q$E-&A6(+&R6pNf`"YPC8X`ABI8&5!@e'HTQff3e -ee!Hc!#l0YNpfVKDHS*8[2U*Lb1`f+DK[b4JqD,JrR$Pd#qU`E*1CGeZRRJQ2Sp1 -hH@QTUl`@ra*9b4m(bj*TdfdSJL#P@"1,M@QS(LN6a,+,r*,&QNZbqX-+Fe`-[@` -"m4jCb*JQd9r01J!HRdZkYGIr)6BabS!5H'(QMlE(G+mNCF4F+5"X-fGZ6dPIX#" -Q'K#LjdK1mUAMZHPUZTB%UYY6,UA%CSUL$q"NmMbjd)CC!K4Z0&kPa3Clc"h,ha# -9X5'AXrB08CET(IkQk[-eL,+J%'eU4aH5f1CMp@NeCc2+c&Ac(mdiMQhCX+dJIF# -j-PRIMmp51"m'k!12rHLQS'`r(PHa5(ZY9'c3jedJ8E`+i$%*1%fpb"BiSLb(,HL -#8e$60)"9Z`EdVN"B4bhPDJF+XNVr3lfJiblm"&-GB2YDBLGH2SfK*2V!ic`@1Pc -r'-#,f$NIFMfQ0ZrRi'98A$$@2H%p+@Tf3Y9GbXQ-UE)5eHb-M$dkA5aG+0V0hT0 -b-cYaNdpM#MqHRCQEF61QdfAV)K@"-TCe+IhQTH2(Xc-LPT*55)jZ5MX38),jifE -KFYB!YF@LeEj"8VYc8cbe[e)UYXKUVib[GY%B6qh$LYU(1+STjiLL8P+iqD*D'9R -KVfJ9AKP4iDmLpHMqXeFi138Fc*'615&CQ(d-#+U1iPqL,0P[,-rdFZ64$NAeR!N -E!6cCEViY9hkB"%IC#(I0A,085SHC$iJUp9UQ`p+&&-%eVVB%K4DN#Vim48HG#@X -2'ljT[LNG4Qk-AR*86*fC+`)L!)%2U2Xbbha6Z4Y+4&hBK3X$Z($Sk(-*"jMGI1& -6A"fJSrX,-4epNGT[1P5IYqifIGkbZIKia,Tj@6@)UKX[cLAQ-@d+!S%fQNMZqXl -VIfcT2INfMKF"r(2JU#1b-L6@KQMDm-R#6'Jf8KNPF1dNDZ2VaYHCa)dcHT(q$62 -QRBe)T#X)$G1Tm,UZUB2IVN09mead-DU$jRjP-*')3LQMkU#Khp*Z'4'9H&4&)44 -#D59-`%[`D'3)CC!!#AKM#%)TN33mk*D3!+JX3-F3A0jaKSY-$dqk&bfLV%"XV%# -@45k3!&)9bTJM#3-PPEpNk,bq4!rc#h8PdRi1)BcX`dSI!d,iaYF)!al$H$b2abN -m4[$SKLP!'!JN+5"`54+1Z%Zck1X2"ee4D1LiK)D+"aNDHJMG$I5"aa`X1U!Z$p# -3!*8'3Y4&8kdQ0&5Ldk)K"CRF'65*DlD#+[*LHGQkRkUj1@URERXX*cI$9#[-eLe -B%'&8c#b51'S%GPa5(J"S"#aim0(02ZjL(hhd-Cj*bVDdN!"SScJ1&aC[&-a%fId -&)8d5VRdeRV`UefL0*cX+SI[INP3jT65#+LFVU[6A-e91,NL9aBCSK!j$*80QNQ[ -IFRlpFZAkhHckhEMq$,mH6SFT6p)(QDQ`kmPFC3PGIk68lf2A,d&`DlUq9A-pMLK -G`aDlTHYV)'lCF0e&Up5BfKp'ak4GrPp[KZ"Y8BqK@M24)JRF#+TP%pQLfh"XAKS -%8)H$Yc,'Yd)!Vh,'VeVYM45JAX9M1Q0m1KjVLA&-Daec-pEA@VCT@*qZB4f(60R -0&PZC#'lN)KL3!+T2Z5`+biQpV'B"CPp8YqIZLSNL"%ak,CD8ZcdP0bG6qfl"VeC --j(0cFP0%"B6F*JH!j)S&'MbYUDji85M6U-Sb[,Sr$)1E(4MBJC!!P3Mk($2%K`S -*)8#A''H"ISpekSL!k0b!#BK`hHUGpi-0cK)M%!SKci4"Rq4dNQ''M44E4am%,Q1 -9,"5QiI1BHQAm1EV+DPmjQ"qQJ02qA"D%dmC!`dDJ88+&E)0J0lA3"ai-0'`!$GY -T*TbP5K(E6QZ&dkB"$6ULF6&Eb+#KA2rZBU1!'Xc+dPaR&U0M6J`&&kX[qCj6$iM -Z$p,FiQLU-6@a2cM1TUda#e41"B`KK(BD[8BG[IUAD[ZFIHbe,``kKI,Lm#NJFHA -D8AkYF%S9"e,h`fV9QE!8MJTr@ARJ@08fpll+Dpi[,riha`IY,`fpF2JcSdpFqAc -2&fE28QIf[Mfmd[bZiCfZcikX',0dIfR#jqlkdmkrlI[@JZqZrYUd@`1GihX(ApR -aQ[k)mG9$hlH'qhrJ1pVaSqHrN[rATrlbc&rGZ"QmP*@4(NYNRXJpm1,a[*aXe`p -efe2f*,qFp00G2h[bEhlbBmrPae,6(Mhlq-PR,Rlch$HHrXrUU8mppr&reApel[p -pp292rrq6rjhd2a2rjDh[V&hAX'V0'fpZh[L2YHq[Ifr42p9mHrkrflqhr"mqr0H -PVfrj`m)r,VP[`rfEr[RKhdhqEGhGFhjjlhp2[fIHlHGrImH[V[kQj4GErkleJB1 -rE[[jk8GZZllrLl[rrU%(QbmdhGNiTE5iC*R0UF"+GM,L[$djD[SH(3&35#@S+0( -AQL#3!"[2f#9@CblQS5bK)r[3`[j`NZ#11m'4P[fG-NPiRFe@qje$#+e'8&8L*!p -RThMi5MPFaCmrHRC@1Fb*&'"!9GJ(-JVMdP1($Z!NUr(bQA$#bp25%2ZZr[l`'$V -9EEcEClbFF+ai$3%-VZ!6Q[[$5!)GUi%*@j)rH-+AjJV-pq3&Nm3S,JTD+hl91`I -l`eede6(09DpSVVU)j(MJD*V4NeL6*)aR%dJJ-U5(c6ETCG4Y0`a4L#'E28'4aG9 -5`%AUdqF8ed&pLbdVlMY2e3--Y',J)K$,N!!8AP%e0l-G3eGS1L90KTI3X5YIjB! -h$F0[3H5Ad!+G"c'e4r1bJk%P[$Ml,0$5Ui*!Eab[6F*VGNahKb+N89&im!S0"N) -(GI[U,U0L*4`"A@IYC8TF*`j6!HLfNlPJ+*%ZRUbJSZ,*%LSUhQ5e2r3mIH#a48& -&a9[`Q-Z)G+1#LSVRDSNdRmT3%4haB"TE6*C48EQP8Nj31+a6ApYIh2VD)`'hi98 -3[Rc0&NDY8ipk[V*d8,``)&Cc-dc6LdLrQ!99e8+'mBU"UJX"c5!8J@Z(3`mfSUU -Cq6%"!$T!!SYVV2EQG[SJm6%FBNc6F)mXP,L84%#6!%VLiC0'j@E""@6cKBNe(P` -lPNQUAF48Z`JNHLYAEDh9[VZ%2["SB+UP4c8,*%mce9D(U,C"SeSFm9!A@bc5)(N -)@1mFeN(LXiJY5!#AXJ8%Z*d4+",Z$l)Sh5L&kcRC+HSPQ35V%JU+T5-,SiYGbLX -+%Hhel98c6X3bAYbq*dr0bpfHGbNPim4h9G"i&mKmqU@85fVZGT8&#d8L096Fi1k -Sh3M6MbUBYEL$J9ib,20V+h)0AUALd(!Y6X9K!-Ka15V!8S$UB"9mHq@pRGI['aN -qZA+[F+"Di+C!,4'GJ'L5!YB['Z@!eHlGa!*@5[2T!3`1I9ia9D,ZL!TBlGk&TS" -eGe*d`)T`F*jD,SH##&&ie8-6XSS@+@6G[bP#b,TF#3Y%-`[mPKF8XRka84ZbmS3 -P!MpXI@MP!55j[Ec5aU[jZf+kE$9EKa!`me*+ER*-cGU65-4d2*UM#'fFVf2T4h* -3V%HjC%"@FL!MHc*5U#Tb*+`TfS*+Z9$`&q(X"3XLM&C!H16+MN%TD!!)#BG,UG+ -iEDa+8aQ[`Jj$5QiU"M,Nf(S5iH&3M5HV[4I+3K$N9FXRMLQ+-k#,*P@R@35kh(U -ARS+J!%--$N)-P0iLSF`-h!1&`lKV9*XBS'X39!iPfVQa9"SYb,(JFJD(MQ*"&i) -JHKd1aEadq+E*f,0(P33ET-jdb)$QN!"d%-XKHfUk@5f[IY4#b4#[hT8IaD4"e1- -9BT)RC2J@G@VYj9KJiPK`-3cG+R[hYFmlkNQ8pRCL%pk[B[Um9,V-GUmDb%F`&qJ -,!F`V$$#IL!1B*q)"TPZJ`,C8&$!I@@m#c(d6SJ#c24jJlKXa!HCY,Fm#-,G+J2R -)K!)!Xl%LJ(PE-"*J+X)&*3c01'#'1Ek0!*Pr%D#T2Gd%QpVK'3A1,G(!@@@Z+(! -#q"`F00-b$@UJ1Y9#BZd1&@fSdL%K15AF#ic+#6b3!"@!bdC+ZD'*3F"%hL-#+%m -m14%qb#!*iN3J'SNj%QS$Cbj$j5rU@A)jK$dHF2H4!iC2'SD`GI85q198"!5eQ`' -`'4M3[4X(k&`XSFJC**1ri8H642$%1%a5M@QC(@S!eR1)U*'JD!a1ikNqZrm+Vlj -9NTYhkcHrPaUX8Ml**)DR#ZfLK8m*I%maE'hFkU%$A(kBTM3Ql'VJJC-VdH81q0+ -mDA4mAM82[E"GQ,-DqfA8)59UCf,VJB#Q!-TTf'`)"06bPT-`k[8HHAfir,h(bKi -MC2M!aH&Z3q$pamaP-rF'!NVM!2BLQZdB@)+C(%($)i%!YMQX(XSrkAMLb0,HX[F -[PehQKcbMPV@Fl1dH&HpjKXA4Y%6,1q1"J''@38DdD+L$SjC@'ch2)b3eA4+[!i@ -`NaA'Rq)8aPb6F%QSEjp20HT280AL`Vc1kaY!Y1JIh-,$3%0$ieeL9$A5%5B#)!2 -5MX)[S")iQXP&eSX'@QMZS4aZ,cqKJ0NqPB'C0f*5cfBT4iMV4b%l&6$jmL33-Vp -%b%"B+XR)@L&*@X8E!45C2IMRb$aXN4#lFX30HTNDF@L%GT!!+@T[(%9Y++`SGjH -XU&CXfFihEUq3!+)1&Ak"+fSaVc3`i0HU+l"I8GHfKq+V5pQi[#QZ0RR6CcA)KTa -G9mQ"caEeY'&*1CU*@UAYd#M,aj6eJcM+fUe49U8L4[H["LRPcJ[9Q"m1G8J`TFa -@TLNEp4XMZ@bd!+T"P0i34-NBMjVNd%i#md'fLCZ40e%m'V8*&2(p6eGS%dp,QbK -I80!QCK9QmYPX*)GY*#r14VUM(86hf`Yf%&'$#A++iK9[&`rSb1@&TUlQC"(XX9` -c-@Y!3$QI+V'9,k6e#9pUcD1a&N-jTA#pS8(BNic*Rm9KdP8)Z"$%G&lI"&4#U$N -#!-e@ZVQL%FB8T'K-1"h2!4Fp3-*ZUNKV%+b-9)P`1EVeH@mDV*ZEh'D*G#p5YY9 -89Z2T$kGIi55@1XiT(4G+KY'!%!(N6ZELDY+iZ(DMXYd&&eGE4"GAQq3b9ebI*NG -@aUAY+A'5F&ZTm4@T+PNJL'cLTLUPB1m+qd!#PU228G9R-)Lli$L&fCK6q$`8USZ -p`Lq(TCZEKXk%JeiD9&,eG`E02Z-EH+RUm4GK(Z4eqDQ4f@1H9#`0[Zi4C'+A6KJ -42IVAYb$"CYhXR-m$ap%3JEM)"1+C1!*4(5fdQha&#HfS,,4%C2'D#L,E!j%GQM@ -K6fM&eTGk*Pb6&QY6QX)a)6%KYlQ-ZDr'B8iKQ-Gk@HL5)R3LH%8YH`$)I01"1E9 -Zi@-K3H@AK(p8V(mdYV9VPZD#YHb#lm5jB"+EZ)K0I#r1a0V#"+RdBZIehpB","# -@iF'V,I%"L%rPL+Td9d%!"#Df-'CHMm0-A3Jc$MUdD6C(AL"I!3"#kD,1kh@*PIU -!Jclk6q,6cBQM)`*cIB8R+i53!"reP!,d6@T4K0#%B!1DK1iXQD3eM@L$1l0XG%% -[XFYf'9-jS,5cN!#C[8L$CQfKeM%&r6DbJNSFTJeL8j-)VB'X!c`ZE*684"@2*M- -24mpS940&B1j5$L!!CDrCYff3!*F!ikXI&D8Bj6!BmahJVb-3Z#@`3#$3I+"lPYb -aK(8id1(URL89P+e0FRkMNlC`&Fe)"&XJN!#!J`S024'5LBPM3"PShJYA#kU8c6Z -S1AC(1$2+i55HP"a1GlKNKa1FJmcKe+C8S8@b8S@Qkd-F6[BTTdd1Tepp%Ze`ZM9 -Qfmdf9-8V0S6i+L8RGmDP(-SdCVYL1@SLpcL[[1l!"daJ-$BMe93SCXk-+JC+5BG -5q-+bqKEqP(rSZ%(++U3UQk5Uhqm`UDTa#929HDDU%UDUmp'UDPaU8Y8G+G'U)Z0 -19PaETH,L,,"dJih5$CXi#dJ@R&p)(hJJMGXi5"pic'%X,'%XK"JJm+R6f!*(r2i -KYYLY+DbY5Q%G1d@&YD`M3Q&PS'DI%SXU,Q9d4JSXIY(2q'%JZ+FP`bCP!i&6LUY -4I#U"8b#*`!Q+2G3pDkGJJhSbHXcR)"'59-U4NNUhhc!PPCUZXU65DDCQ&dXURBj -1+MA0-b@9cTq,6LSa`Z#9!JT*XFHcYj-D+$mHT4(UQN'&(*38JZB2$P6(Zi5h'KH -E"6@,2FkEX4Ma5HB)NSV+RqF)Ka`X[&,5l#09NBSbGGkpcYZjQNUCQNUK*KeA8j2 -92Sr-MjZiSChp`RaQNRH3!+NT`G4d--S3dRjK29[JL0X6TS"(84-Cfpm0PPAP4aU -iUL!CX#XJ%cL6GQK`4T8M)3TH349L$DqL#M&48CDNN!#b(9%+bCG!-N30+C)DlTP -J8N2cqSUUSIP0NaVQ"H1TJDHZ[")S[Uc,"3JUQP$8`)GQ3!dm5$f0ULiRYE4G[i& -!TP"k96CiQYjK!S8(lp@#!X`IXf43U!`&K3FRQd$KRXHL3B(pG!'VRNZ')k(5cda -1CU#!H8"`P38%[iS6%(6,PBq05X"4+!KD($RFP9k%H9feP1T4,Pd&iLrD5@L8-!8 -rJ+0j!6q085B0G*0$H5QrhU-*BTJKBN1))5)'N!!m,KQP9*PbLA0([pbjbNfGF0l -RV8++`MQLk4T9AN1e)@r9-$SGQNi$kbc$iLiNlT[l65TDc93dS!e@q%&*INTTP%R -"VY"eAVplR%)T[$B8Vc*18j3J9b3A(15Z@U!SB0@hiK4DIdL3!$Y+c5QNB,IU-+j -UB-Q"dEL"l@aP'NXZ0aA"N!#H-I4D()D#@U08CQ6N*J0#I&cM4V"fTe8c@)C+%!@ -*2HMB5@jkeK&J(AhSQ+hTF,11$R48D6SFV-1&SY[2Le(T8&R(1A4-eh3-X)i'G(b -S&#A[m,!10&H`VAAjmI0$,5"-V8LEYA%96Y)DcXT+4,YU1GbP9bI*5lVJ+AP*E+6 -*5f)f@9jL5lB6mK)EYjf5Pe#2l4!c'lEEaPN`h4djQ#D8`e%jQ%i%L(djI6G+k6X -[*58VXi5rUrZlC9A@BM6d80(b,PpNL5G&[DJ9$iXfId!FGMPTqd(Kcb'686pq))` -I+I`hH#UXQBber$lH@5ChM[21HEacTk*!I)k!I25BQ1M`8!HIe)kZ2JelFKIF3`G -%KkQVhp4e&9dZ8jI18AGClYb#cR1D6PA6Z4DG$CV1!8hR4A3Z0(9@NC+N+k-*3,T -%!1Sk)TKTFQ1d9bJ880aEd33Ja%cclN)%)"6aErpTAPEfm6KfIpr[f2(pl26Bm38 -,-Q-TSN+1*8ZjC#!X9"i1HZ%JDL8K8F[aBh&GSX8m+a5T'aY%k`dY8QF1(#iHVFR -q&qL(pYVJbQRK$JarSJVZPpDJJbr,%Qke[-i$FYdkREY$Pf@CTZ,k$FUdc+8%B(! -CYBBkIiN"R5!@d!$(@GXJ@K*P1Vr$Vd&)cc1%p+-i#-NP(63Ma!`(TV1$-q)Fl0% -35mG-RRk0J1`,ZN4bS,FIpHMm[eLeXP0*Mb3,3hY`51-'3hUJ,R8kZG88Ske@F[f -'+NV$Z)iarX-iM$GS$F@"qKq5NXIi0d3rd%EZ3$)!Kh'*pi'6KGbm@N$B*3(#l`i -9B2LG9K($lmQl)KPqbiJ,5P#5fh(-`%r"pa[@TFGd$#"#"fE-q(ZfSKEQG293%HB -AN!$`TjqC1Q6!+3lml+3AKP9Zr2KA!-BiE3M8r8F[SmLD6Be$+%'R[L1mGDZ%iqd -"qYNr8V1+aQLGZpd#ABklUfP#l5SaP'%BAi@8$MTlhm'4l6!`pF$8`X-2q$TrAER -JS&N6D1LiLbP2D5b"i`%fJH-bf%M*cP8H*LJrML-SmfPLjr8je-cEhAY5!U%SC3h -4P#+5S(QVRQDAI521CA8K6JelqBFi0SZ#U2`i58,UCXk-088%,*qbblmHjr+@8)G -+8bdRZ%J[0Df*Nk6XNXNb64Z4'[-d65M3BGM)+Nf88(Z,('"5UTd0cQ8!J04ldbH -Q4([6*r*QC+HCrbPfD)Z5d&FD+cCjp-T25Y*L&e[3%5bTiQbKihM$P$l&H*0hikG -0,3i6Q('6eeE@Q@8bbH#[8U+qN9ha&P[3a$1(KCCpBcNeK8KmT0d'@p#V%l5*5YS -%Uh!jf)6R04[Tefc%U0R)Z8)E'5aJ)p-d'cNAYC'R0"[T#pR)Z3JE1DIC5%M#eFN -6N!"5XTp-9`MGmB+i,DSJEL1&d#&m#LQb66&[NDHd-B@2"$ZNBP,lhjq$UZJ#[M' -*i5bfD1C(RC@0H%d+Ef4($3FVf8XRmLQPYPXU1U1!qqFMNiP0U2!TEQ+c&U$@-)" -D&3HJGM2%XD&)a,'K5-3aRehflFLA,A1%)Sj0YXlV[dbRCMXJT$IL1N1lT'P!m6G --MAJH&[(0DSKS5MrB4Jh0b)J@VjM0BMkDYI!','ZPiiaTq643[m[rmmfFN!!Hdj! -!d4Zd*'*HL*Lk*'+k4"4!6(G9K*MH0aD*Q1*(9!eUZH3%MGHXC!IFGc2HY%6jkEM -CA%%M[#%H'Nf8Jl!G%(H0Nr-TeC[+M9Y1SqX`0C*!dKP0*T3T2MkPjQcX)*CpipA -*rQ#[QDS&l)MHmJHHkIhFD!RF@#8dq1jPcC(6F@3h(AN&"j)"Yd%jYNrYGLZI0fD -QJV3'P'(jXSG"("h+"!1QlK)ib!S&NFQm%5Ec[BU"6f1TBP`0YdZe$"VfaK))5MY -GUalc23U$T*'ADK%M5GI`)rNe'f'%raY[NJD!PM#KrQ-FSHi1&HS0%0GlKbSLe-U -d8+'qIf4'KITqAm@%ZXkM&HSk6m&#rBH4rkK3,ccel)Akk2(XPjq08"I$U6j,&ZU -a-3V1re`&Hj40lD1THrFAPlb0)dG0NeS`D8+dm(GLSJ8#5%d*J-5hN!"3dU$#$SN -D@0TNhXBQ,$H!"2$#ak+,AP-@@m`"`l'DabQ0P@JaE0Y&a[X`ClZ!VD+Sac@J3Xe -!q)p)hjR66ifDqYJ40@0#1YJJ#&$!kXJ(Mc-fKX#'R4RDdm&Ve'28j-REU!'@HaQ -`r$)bX0L5%(E2'U`Df,#MTr2K6[[!NS'2"qS(XJE5"hbGlJ&VlFF$1`DU"pd$8`H -1$1M(p@m1R1NFU[Q`Xk'Qmd"R[@"r!!!aY%&%3e)$!&L-$e8,ECFJN@bVrb3[)3V -[kRGTTSkVZMc(F44A84YhUlTQHe)S"I9#&h*TcGEHV[aFfS4"1Lj6Fef@lA*"rAc -T#8jE)eDRBE9H$V0@CFYeVC-CVY[9j#bXB9P18f'%X&cl-%*3T-TAfceI$jIQqr[ -phdY6`*klhChCRId!&AGH*$-M2a%5%3)4)JEh+Q8UNF#2R(F))-AN"Q`+M+Ja@p& -`NJ98[SRE)*DLMMl3[EP!cVGLKAlIRjI*9XlH"NH,)5S0'@SjT1AR`4kjFLb5VdS -NI[4,&MaSc*9VXCSRVG"-HF$Kqd5MY%*S[NB8!aR4$D45')JI"T)rJBCdRSpHB4A -R+fT$D"#@c26)%Pb4QK1AbqMEpLGGEmdX""B!YVm351+R90Y3Ni5`k)Z&T--h"a2 -YUrX(`'F4[K"6aN%+RS3*PdbQB-)Q62GCQ!eDeALB-e[VrX%Cj@4TQ59M3BB@9dj -lU@CH*X9,C#2ja)0Q%NLM`cGdfP%1r5Lj!3$aL$J1$9&j4'UQ&IjpIe'j[Y[KkM8 -BpJ`Y(G(@(aF$e0rhCj8"rIS!GE(YY'0Da6%q$NB-H)fmHRq2E$eBlD[49Lc9f50 -Vd*LZ!BJF*ZKi"%fX%9r@+R[#k3TBU6TekT5-"9l`eQM$P2`ajkP,cJ@jkPKe`R! -(V2$-)!###%p$)mj(dm2%N!!(V*XCU&AUB'0@J)h-@'4KTKU6ii9@KL2Uhf56Imr -KEE0#'X'8KMepFNPP9P%,2"P0Z6LDFAEhl[c*$Ef6)3jIS!QqQDYm`2'+fcS*36M -NcQQY9UUV(-$a5@A)F@9)$&1$1qiXKfB'VE$,!@MhpV'`GZ1*"c8eVcjeCc+P6&J -9%`k[Ye)#fLFMl@3MjDCN[LK9Q',F@6j@lM[1CSXJSYSBAIp6@l6$-HfcLY,XZNT -*9C6aVU[jA(f4'a5&k+6%dXJX8f)jHG)$-'%bL+1jk@&Ri'314[[E1b6ZEPQj+S* -&+l-bXRIEBYMBPNMi8KBP11$&U`KRYB)SIF'kZCE&8kHr+1dhVZC2q8rHF&LR#&a -ML%Zpi3"m-R*%PUU!PHamq,X1c6MeKF4)S1#48%'pcEh6`cCeY*ICKI#0kNmLL5+ -@U'TqE-*`RjF4'&(3eFX6cB*%1LKQq#`cX*Ej$"f@R*jJL&LQ*jP))YiLPRCDMM5 -K$V"JR)aLD@D@+f)j+IANZYHY*0G!%3Re,JY49XD$a(Saj)6#HLPITQ6b-BYmmHA -`fTm@NK$kXVk-%q)0KpC%fBMjY18`El#!d!F0H&--X*Qrhij`#,'XUBbh-RVlN!! -$QajL"X2dHUeFdI6kq4L#ammd&'9%3)06UT4G9hPMJ6+I5-i(Y%#f+#e[bM+kUTR -K@PL!KTcdNcKm(TRN"*md8E&CJ%CiLB!5@2Fq6!H3!")!PL[h)i2q0#-G!$KjHU* -IiLaPNH3lVQB5I1![PFbS$Rf0R-a+S[+,CC'SAMdV4c+CYLfIh0`$XmGa8qFp3DR -@*S)r1"9&-VbS-,N2f4r#&FKq2UGKFMlh4E0q-LhM&0ciQje+eL[6$5i$*aS-plc -+`J+*!@Bb"$fFT3e2E*`2F2!8)[K'3h$e`EAPe!KLSZKZ&S%(T3%dB*e#+%MP+K1 -SpUS""0c%"CMiKPpP)XTpUL(C&1)%#pcfaXp&Ahr"QcdA`dr9Z4"q20VjSdLDpfp -1KNQdJ''*Vf2EmDc8CXpq9,'J2&ThpU1qJmSMkqa(hhK0H45QV6hKfQK8maCpN3i -dU2j9*[b@@NZ%X8!P!FD3!&LFNeZB4+%S5eDGBp@,*APel4eV#S#AFd0rrQlaXF6 -!h'1*[X!JXRmV6H$m!'b$-EpD9JNQeYpNpV*)*q#i5#$b!SY@llM@H*6CTNi'56d -a3`eNp4*[1bqe$brdq&k9mMKhSFIIq)(bf(r@Bd#a9cj8(SD*l(L##Bcdc*XLi1I -+Hr,,dKcXNI'*Kk"%P-Z*#5a3NMTC)T63C)K8S!8#"14-#$+#$`KM8@#LfA#HBVM -H'j(PN!"XH)J&0,m9%X'm6,#4A#FSY1A*Hkc(8!hZ!,*#pE#QjPFR)j0aU1l(j0# -DMNpSBK2#FB)-Hbq8U!R$MJX$a(5e-BCUAB6K0PYPU%jl#ip*"J1Fb%U%Xi3'0F! -XDBI*UEM3c-T!0@$#'&FXbk%K[%,,F[bBhlS,8D%qMQ$pe0p&l%T6-)kQS"4+cdk -%QDk%6ef*lHH'rUNVdIH`'2MH6J5jB"E4%prEkB[6aADkH-JUYdNmm+'bG3*J(EC -fckkL`4fIPY'#%(BLl#3UQpeFV4BK#`i)Z9CrX[1B-,RrL8[miP&G%'C98UH5SE' -*V50c@bA6Z`3Mp'Q("A&dRa++H*3*lElrFbr&aKTMDrH,*SPPIJk[M4l*XFZqkA$ -$&a)9fLTHQ2cL@,LK,h&2Up56BLQ[pV$CL-[V8M[D`lP$XX%*JV8LPJXP`VPZI'U -k!JCC-mT`1bHa`cSjbXd26QJ(+9iLR+*$m[rcrk,rMrpLCrdA8[j6m9m3rqNA&4` -)+6P#ebc(&6KM[B!rZN%68C)K5'(3+K[bRfj9$,Rc6lGHd*!!ph'SP`hjIc2VC(4 -crC!!%V3E-A$j)EPBaB[[*kDErR3V"KbTac808D0FbQkjD2(Lla,6pV!MNFM+ZY4 -6l9hPB8a`Fe8BQCeLSj%13&lUNDMQiFq)T-qB0Q%)-q(2%!J9J1M+TkVPM4j9+Tp -"c@ldr!-X,6%bV4i*DkNM-3iE*1iP4UU#)'E#e-#pBbf)DLJ2XGNpl@4R%UqE+YF -kUP`HUP`qUPbP9,QN[!ke0`C#rjpjQj!!F2pYCVHeQjVM)jd8+[eIr9!*2l2`b*Q -Q!d2&N!"-GI',)8pc+2kV9aXLR*!!eY+jChJ!-4FKp%r#0&+aYe"R1G3DiHT1+Si -6CS@5a+6N5@SemLfdd+5f`SXS+`!XBM,rR65R"3l,Q[%Hq6#lG-6ZKL@$%RDS$`j -CmNFp2cJ9PEL@,dr4j6%YjNU+4c3P@[I`M[fq9*bJQL3HqdQ)QlF48-ddQMJ-6-S -LJJDHFFlilJX(r[j6TcM35eNiDr2I,NdNC%a$-2,E15c#YLJ['Kk6X8SNiX%&Vem -*d313!2JbQVS)m1-K%cc2hHD`pCGc-JcLcr4a8l$[2Lcj8kJ4C8-I-G&a3U+C'8T -ma!U``%'Llch182*H*%cF5K)BdJc(6LLKK$0rKKdX[!D(kYMC%bphi[V[q@5X!Qi -Yhi0DXeM03E8PSDK5I*dQBcZJm[C0KTkk!lM'DGepAb%BrQd(Kh,Q*"`qEb)Nm%) -59h"L!!MGdd4%le3d)Z0cLDFj8EYZ0dC*P"rJ*KHZr"lqI&5)'cNdZ*M!*9F@GT& -T#RehJTRLFKb9liG"1Y3`89`IMTfU&-`kZ@-rZ4(ZTb4ITL3r6`B%pcqUCP,ZS%S -RSd08"3&,!(k`&H*eIcjf#NV59iM2jZSUR+HJf,XQF$%$JdGLcrbDb08leYd[Sj& -H(fI)$["Ha*V!#l@5iBdL,PQK5rb&Z#YA&h9Fk*+"&TF-Y,a%YZNEN6p-hdKGY-8 -P)bdZ'6RVNZhk4Z6Qp)h8a9TF-YcLNZ%@PfMem9S&L`Fj1'5TI!Qca$Y4kH!3p0T -Gqqi!h-b5DF)CjR8d6@`ar-3d#iDR`N$X,8fRlj!!EMV--UGJfFU1r9lla+QmI+j -m`ahhh8G1*5VUirMTQmP91S`j0Q!dXPq(kE6"YI3-6+1ER8$ajaVqA!CBH)f$BNa -5*Uk"N!#lc-dQ3$!0%&VAB&5(B-VAm((SFa`kJp-PQVrY)#+DdC!![QbK`LEfVRe -Tp[BSJi41,@AFBM(Qbjf3!!!"pfT&&L+ch($C`d6Er#U8eJ&@C,06A0hRGq0eh'D -3!*0S'cDcpb#ZAT4pcbTE2ir'S&@AFplfIBM$pilaieQp1[$PF2#,k4@#UJ()X(9 -)EVdD+!"%c&K3+N1U2R6Y&**1T8U!a[BhZ%)La#U(MP)BpFV"m8fe&3j9hp%5(") -KHXi%J,#,T6)r0ErE2H8*D,-im)h*F$lme"dbpTGV+r3+(l+5PB!4cN!Xr!q#k9! -&N!#)lhiC+KC`EK`2,[T5"'aGI(`E`VIE%$JDY-V'"UGr``p4eHB`k5S5B43IIL6 -A99Gj&N&M!'40r(NNqXc20q,+3Re"2[0LIAe1MTe#T))JH8pJAC,KImrZ3PQ6Sk% -AKVi(m-29r*4R0cjf9PE*a$+J&+dQ(hcU$QqXS9#3!!FAPY6+d"aJN`iF1lfL2`c -B#Y+h`3SMbG[&NG#c#qcfP,fjpN8Sl$C@f!6XGc1Bc!2`mF2PQeT92RJmZZAR)P# -"i"hF&[0"HM(#,b#F)`b(i*M0f)(N`!-PNm18-ldGJp01*B%lZ3,#8BS2k+3K2BN -I5ZNDE-C@&f@LN!$1Y)T$1P$,![Y6ZBS$MI,aZa9Ybk'j8+QFQ+XB)%9VeS@F-15 -+BIcTj#DAYI[T0XP#IF'rHYm@DF*-2F3L-"a'hFfUB&ihEpf3!!r`KiG0[3dLIJ( --Qr)Z3F9BAKKpS[[8&bVkE+EerEqi"NGQQ"dhH0!J6+%#HN5c,Y%0S+!8*M08P0i -m6f!RGFqIf%cr)CjQKD%8H,*G1&!1U11EB)a6c"j@%4Y'49!8f6jFX@Fbq,kF*(M -ej&8f3q!RFa8lf,b4c@l4Z,3mJ"$XmEQ+!ka3TU)j&5#4qP`r"-##iZDfqUR$LGf -*()Mm96KA`UbpFB+HSMjZ)"UfT28NE`kK`P@PD5dD1#j5)Z1N2(bN5QbN3)k3!2S -iARH6P-TQ0%G[Hq[U(XC2Bef+AJl@RH5AQSf6[')!41(AT+`Bd9l,[)M4Lr(-#j9 -H6'9H41K&9HC&P&i8ji*D&NEG8p'Q@A0"@iaCVY9J'D@P8@45l%GL'V)GU$MJkM9 -K*,j'"(m2j&e3p+pC`HIkBADHEpf48K'SqcMamkBY4mEXS+C[fA[9Nb%QrlUU*b8 -+(8!-Ged%G*TFdr&a"PAX4HQVXC)Fq(BcQEM[FqaNFqLqYb"+"dQ8eT4+RH#!idf -%0q+9pekN$8Nj$&B-XB$dTQMEIiE+h#dDl)+TB2B"C[D8c+NfqeGMDaVE&SKYUm5 -fU66#HTEB0NpXZd4XUb1QZBKTPiKT'V&X9R0PQ,8Q`kD&$)2@C9K6b$!P$kEi&DD -dCTKLCTJ5&Naa8c9l`JRApQ`q1&0qm"CFrRUp3aBPNIrQFhrrr"F5XmprdT5MEph -AMQ3SFcX#Jli9iaDlb5k+Dri-Vk6FCGed1EMDSqL1HPb+UUb9-+"1i[Xk9b)"UN% -d-0%BF9A[[AAXKp6NL9Dd(9Y43"M!&ArcV'F6VV!$#&4Cd3PRElMUI!a1!AMj9$r -$dYMLA%ARYY[1fikHLQ'h)qC)$#F5q"Ka1k"bFVV+i5eTGK)Cb3Y9rjCZVZ4F6+j -L,05SQ4#(Hr`)ZmIl$c(*T!Lq#+SE-hH1Q"XKYNjSTA#K4m#"A0R*RB%cp)@*l&% -&P"ZhGM28NaPJ#'*%pLXJAY9T!`"Ub62LXA+*r8+(22T$r4"[mM0i68NArpEKa!# -b$h8)S*@61-i3ek0eRNd%"JR)m#F%%0V63$*5b&cP!JK8H1XrcH``2$SN#i+!Q!@ -iDE*-E"JJ&Vqd@l0V4[0(Y9MM!`5m4I4,U6'&3NJSI&*#8*VTC,MXjj*EZ#A8p$K -#Ma[e4P0LA!&b,3KM,4fU`XqFc0Bj3-Bd6L*`I(-AMQjDdr&0QfF6")"8ed1NA1+ -U6$pfVfFZT$ANEcjh4bHDmbB#Ni8PK*8ie!YiH-&GIL4kIbmlTmJQba2)4VIlBM2 -AAEG39-Rp3IRLG`8%J0!EAU!Jd!-!bLVKG[A#a$[Lm"qr#p2Nb5`'aP&SiVcm`%T -j9c!!$2ca#3mlldp2[!140`kcVX2,-r6b')BX4h[`iZ[dBJR*XmbK0KqE4TDR9cL -j1L6'0ciV(k#L2PhcQrLKaCGPCFQDMQFqj1-6ifcU[(R[(+l0bPCFUiT(r[1beIS -h$%!!#MqTEaf@49Q$Ri*%%j!!VrmXIk3qb`m`#"9-IafA2[a%j1%!M0khNYPJa[N -rmD@0cdDh3ffc#q#i,89Uqc*pV0$(Y5are2a-$%M5bjejrLKjQPkHDT-Ii'8A$DL -M!5cqadRY(q)PNEVG0-"(!rD)LG%H35,JJ9q3!,hdNDH26QA3HiSEdVMYM#Jq44q -(k3-"J&L%f&SLL*DamZNi'CXT`)*j'!L#c@j-FJC-l`))LXY-#L0jVPR*ZPcAE9C -!&U$da-kZkrL)VqPipJ&&'FRS05[1d+`9KjVi+-Y+kD22A3GTr#9LldQq$RqkF19 -jGN&%Nf%A*VI5C"Y-[aN((m,"lRaCV*a""SD3!!!5a(N4Nej$!"3#F-$JEJS3lD' -V$kcTf')`m)YD2%LLSikcMQ)9IKCDajBB#ND5X8[60FY6B,HKcS)$L[JmA*2ffC+ -+L"4C(q,L9PBFP@B[h#-q'UfqEj3E%8V'6MZklAU,SaI)F"$!pkil(MfUmJ6,P!j -S,SP%bd`8cY&A10K88j5I@NJdd`8rmDRid"#%!053!'MfcLUE@L'"%!HFXrHq83j -0*Lkl18[*cie5TT,(SfhY@pUa94kBj%9L$iD-+%-'a%Z`@ba-465B1%VHHeBFML9 -2'JmXSfSC#"FXFp9kC2di95fPUKYJkM4AcdFH'0q%Mf1e9If4CRUe*#Vk)cdJ,am -5BZ14AH1E@+%L8jSh3ZVd*eU03UT3jJ+M2U&QEj!!3%Z4))+jB[YK&N*TEPX&!GD -c!+qK)J!)IUdd@XhP5r@X0-F'IF[,b5F(1mSABj[,mm(RlR#6#L)J#A8@I+UIQhT -I4P,)IYF2*"5#HMkYS)1TZ&#[F'%f$Mf!H+Ub@4f1TBCXfD(H4QX[VRfMR08p055 -bXTmGfRef8550b#4fCd(SQTa!(++3!&SNV6#5D69550KGrYQlY)&)fN2D!)5amGF -rPqV6EePPMGBBM[cVYh"*T$ESDEGRDje(NK38@RPI46",)5!5p8bbSp!G#kqP`%9 -I25VH!!9JAS-#-pR*k@X[m+#mp18Rb[k!JJSbLKm!C2Lj*d-D"b&9VZ4bMZ'$[!b -8qqb6C@FI9F(1"LZX"1hfXa`()P9c(2cRi+Yl&N'SH$jJ'hVDH3,KSKN("qkA3c[ -qPK,ZidMZBC!!S2hji0Sl$%F8NQ2ETZ-Fb"cEYQM3S'%-qVLfK'CJD-[2+I(0X@h -(5UbE@pSjbIPcfV5#bYAbb9XlrKE+X(CiPLpEBKHP6Q8+[9TF!IPi#m8J1QQ+bXH -!D4rhbF3j,)Dp5eC`VFj8KZa'BJiZ'HC0a46`@EY8#(2Sh"pFQeDij3f(HaEZRL0 -N%M#j[-P+19C1NdeZa-FFI!%9ZiNr$QMb4pf*!8UZ%@6B5(c#iN)L)XJrd!*))&# -rb'lq)29J!'iNGVB4X%i@jLB,U$acXNKKpNjf!',5N!$C"5A3"hHd'PYdDql5VaD -#UlfV[d+LXmShA3MC#-FZFMEVd`X0%43i"&*jjGp,!D`2jdA96HAed2"91[,VE&j --TSPL(l+SNfaV1YD@8MKGqM3QG%'!YeTPA,RpjYKYZ"+a#KU#kJ&!2A1GXhVI4GS -qJ'j8qk*Q@I&CaeMe0#ZTiQb2,+,T2Mal8G0GV9+ZYaMU3-0p(@r&PpI-c*AQ8re -mVA+`8A[`8MF4EES6`4iff$NN*K+b@)U%a-#X*4+63rDhN!#8HqLeff*h*b3R&8G -QNMPbUNf0XkU&f+pKXCrZ1!4`dUmR,a8@1'#A$))rTi6J8E6R,MZ'E,j14EJ)mS1 -CBH-FAX[R#Q8#LS8V9*K&ec++br[Fj1)8*iDX4l0PrC'B)P$c4CdY(8NU*'+bFpe -Teb),fAb5XYI%KBL9)KCl80L8aH-GGY"Cdr(FC8@e[mC9jVlV5!L%&E)jc8h*BhE -eMYdk*N6j,l99I[Rp88fYr2lRHl(*!5A4KbM4c!c$M3acbX&Z2(50LL&M2G*BP"A -l@M454K4"NTqi@mN%mA+KI#+%aCaCrLNdPB%f4[53!!+lGhPGb'`0KdFB*UXAEVA -4VR*ZZ-V@I-jN-$m'YcJ4D2d43[X$!EcdLKG2i%8E"SA!U*&#'4hSd--Kj(*D3N, -$C%HZ3$N9AiF,'MYH9EhTUkP%)AcTYqi%CVhR&-DpTVRB9H`fULU5fcJK5k6QFHq -HhEhZ661*Brj&Q!-E`rfhf!311RcjbPlPSShHSVM)DjM,-NSCGfMf#F#c@P)*"pf -"ND"i0j`6f`1c[Mb-d#65)fk,96VS)LTH*LUYiVi5Uh9E3L+h+mE2a4bc%#D&8NQ -QYCF-[QL4q)$U(i,U(l+iF"SFlH[-qriB4YpZj8"d-VMeSTDL4Q3lrVbSZ"2C)8$ -'X29@C29eE+f9R!T8@`&Ed2$bMj!!+%e)I(CLFq2LMeL!8I95#[Z6i'S9JJ[%U`m -+D%)h@+9EJQjbCCK,[)JrlES6!%L3!$p#!CFaEKDLkX@2QSUEl()4MK3!,MS6V`2 -#2!3(eMf*EVM[VNmFB#IH4"XH2TVS"%Q88SJa'4f`iLl(f+fP"9cr+2imLcrVZ81 -%,h*d@iZM+rPSC2!3+CG(De#Gl(1*e`qU[T9!#'Ddmb"HBh&jBQ0!pGS2UYjiIG# -e844X!)RDr19Q1$&*Q&+RYjjraM$GQ`A3(8edXRX9%)V()5"i-GH%UF,&PUB#r!6 -`GQ$(+KI&eCL`lCi&p&N`,c`3$Z3(B%b(k$#rFYLMA[Z&0M3Ki00QEUj``9)q!Z` -VjT0k!E8N-lLbY['Hq'Mb*!QKEL+%!9EqAY1E$j**l"')QC0#5'N,C(iQLMdF%-8 -e)5,F'B'Mm@2p)"$%CQh@'TbI&`8!$rLHaBD'))EXT'DXM!Lb)))X)B)5!e!Sh*6 -U3q'I6YI&I2cJV89jlld@JQLrlQKP[5+(XZc1`NfGrD5XYe0eHE&49*Gb%SlPpBm -*Gd--D"HN%T,T)fY+U5jl,e!GQUNkb0"[)&3+5T8Bdf6S25U5de-UL3Lkc2!lQjG -T(TGfU6L3!+"KSSXp*'1l%(Q*[IPF%Z*0#B@fLQ+Z"1(N#CjE*Q$Z9@fHVViI$,f -XACS)3E6HMcqAYB!Z*N0V&*%rL+S!9ECBSMZUK*V1HX3QIPPFU'A%DSM*r[Zp9#9 -FJf"0cqrC)([qrR#L4lJMFN)TS[GA'(`Ca0I3a203BMfk%N-c'#38`KF[@h"["pQ -E`q0I+S8&VX'KcRcDL8#ZLZ)-e`iZ6!r"35JmYV!BA`CdJb)%`eYl%[Xj20$KU#h -+RpJDN!!q06$Mqbi)C6MTV12NLREN['&EV#2Rqj!!Jcd`[K#&U(E55j!!9SQG6h% -!GbI-`1#YF2K+[,k[Ki!"Cm%NXBe3iSPB35LG8c$aVX"j+"XTVje3QHcLX22a%), -1%5iDc`94p5[G$+YH)mG,C%QiAMlRH-,*F#q)[K`QKIpp20(PLl`k"#F0TmD%DM0 -F!Rk&60hJiSK`iZ[@QYa6Xe2VKNM9r#*0eBM3"bZEb+Y"ZU"*85GAX`c6Gd%-G-' -C[d6lJ,BIa2D6[$N8,ZSj%81PCbM#'AMHPqH#"0iiAVh)Vdl%L)cp5@+lCY$b!5a -Pe&$%`Xf-8*M3J@q)J6%)cJ+*"5H*"HHDMKm&&$IAlA"lKi!NB2ZkU"JF9T3&ECX -L(QkQ#3Gak#rj82N'#BLE3M``8b!FR0cXP`83NB@#ir22)`2V&3&Kk@BmirKUJN* -QIm3AY8&Fr%"ETX#&U0ClU$+h*2`1S0-1Z`l5m0981@3IKdDhYbaBElH6k$"*G"J -+i2FZ!$mI!Akr&XhRVcNBaS3kkZ#`TRH"QXJ,"2QpQJeTlVbU3(kmB4hdFbY%T4h -NAlQVQJ%q0&lhA4MJLrVBHEBakLch4P)%9-Yi,8$((FR`4KlH-drJ(`*FVi"FpPM -##G*1BL9!%2m4%H5A,l+S1[UBI&0ad6-8d$[1LK*GB,J*&J+Tc`B`L9$R*l1X+,0 -F8+$RVc*a*+G-E2c,6f-#pjrC8A!1%erpUdhmQf&PSZ+%5P"d'SL4[6#)S3S3`fj -[#@)!%&1+JP(R*-XN8,Si%F(Z1$YZVRj"4K*lS"T+X`(ZH+08FV-j'jUTeZE3k(h -qf%Sf1&1pV$ijk1T&!lB93G%l5S!d0[Em8Ndak"VNac[q9Rr8A,ei[aAFdXq1h)@ -bXHHRCHKPVZTMcbr+N!!Mcb)6i3!8S&KKN3P")80R@+"5jdaV)1+l&9'&VQ5d*)R -lEQdZm!Uk'FZb)+C,Kj8Vfj3,4j3,4h$K2QdV4&Bh-TA8Vf)#L3iKB4Pl3e4HhI& -mV32#p4#)3!F&893)2j!!$!dm+,6(X8l'0U*-EbLfJ0*P3D9)%5i9c4jPSkR!M&I -'G[%'X58UF+CXD3"EfX%1T@-,ddpLNB,LZ((@aK3K(P08,J4cT1A@SZYTDb(DQT- -+'i%%*ZEe3ENi`9Uckq9mlSJXKRDmhB*piCRUSYVGkaVFm6EB&pjb*`0AJ(dF@ZI -(1pl@(h@!IIR`FC9K$3*+`-$S9S*+`-#SFcjJ*Fp%3%$[`lBmY8-C'P1bY%p*hU6 -)a&39H4!Db!T2'U+Xa#JVPeXQFP8SYNdQ!KYpE0STe)+i0XHCE8$f$Ql%4LD`NH6 -B4QbN8V"#+&$4k3NQf!1hf!')*chaAil)E'"q5V1R'H1fk3JCcVDPL+[A5Sle6Zr -J(cJ)Y$%BGbE&34J'cE9cr#+6SA#kZE6)N!"`0)`L1qXb@hfHLr659T&NmQf4('+ -VqQ6HX#dZ!(V&aHi*l68i5h6CJJFG)"&8Q!dAm$f%)&Z5!fCD&AFJ9NJb)0IJ3-- -RpJFiPf%4`L+%44!,&BX)&N%X([i$Zj1KL!8@0aNX4&FZiUMZPSddFQ5h+i%U!`8 -*9*!!0@Sa2PI@I-Zl!Z%-Kka[KG%ee#fIHfm[[3+mCie`Ce'qC*j"2aJXYTfb*3i -kDVYfXJr8!RBS9Y#aFS-K)bZApGM-RcQ2`d(!E')B!q4MhXVYr`b6bfi2`Y5"4*m -1J-$9VP5%'[)"VC)G4q8qJL-CK0cQi@krKT63-EN,2p22RA$BpYcRY#)Bh'icRRC -#18'"EH!KGlN$2k-D,!JZlS9MD)dH0Ubi`TIjiL`#B4TSa#&3$C!!&GeKGDGr,Uk -#$30jer22b1XJl9ke44XBXKrfVcBD[hM39N#(I@L3!2KAja%@j3mi$Z+a&4)2V0k -*R19#b2Bk&p&!Pf#iE2qbCHM&,J3S-95j6K65@MNZ,B-6&&d#EN54Qee)a$!$H!e -"lMCUbfeNfF1%`Shqr#N3q#RIDa#6+GrA5@J1Z&q"bJHJEL8A(*pcZ"`Je!C-"RF -BPZPlRi11B24N'6UTZbcFJ!V"9HF@"fh9`ih`V[jmlL%-PJBDJ,KZIi#""Uriq!c -#RLXZ('Ma+`Jd"#r8p!)NST!!!$YT[V*Z6FHI6lPch%NA$R$TPr0f[HS-IQMMFFV -%#XJE3i#r*ihj6@Q&'[Yd!"Z91!QLL)PXGMG"b!#0BBNX!8kZD"C`XUq9P5dpQU2 -XeZ$KI['3!1'j5+C3!LGkE8GB$#fP(i!2qjNN-TPGdf'BR15@QA9SVC0ml*!!FVP -G+A$#"ap4$YBI)X44N98HIMK*'mSm4!'&#N0j1)'+"@CmkYhXd3cF@AA19QIMkRE -6cd%J$"ZL!(5BQB3U!rDL!m%4UAk@`p-4JKh6R&G&X$Jp1jPNQTlIP*B`Xr1E4,K -BGhSp2D&T+QFdQjR+@@[0I&*Q1!Y$6qD2+PY(GfXhphNfe3BA%+4Lq$L#SU0-'KT -D$3&!RSRF)cPTR`#F`meHX1%l6-M-8aGS,%$-5NZB(Nm@C+8*XR)@aP[+BLA!iT+ -&f`I+Sh8fpcrjmk[@5Craq8f[lSeC$8GA(d3iRF--8Rl-QV'DQ3"'H"G%ejYC#MT -(V$[C'3j%FfG$EmBTM0`R3[EX'22Q$R6m#&,80i%QbE$e*2rr1hB8HI-[P+iKhkb -fMNj+[D2)0krcjm3l@"C%jiJmmI&9C&ZG+"*4#!,c#SKHGmj+q36Nr%0YeNS*NF2 -9C,4rUT4$Hp,k$$YU"2a6F,J`)%j!bZ%9LYb)!ND6+2KL'q)&KmlkpSR3#lXhJ#d -[ch1J$-[@8S6*3))MV+pDZrGrNeNRXYXkM5"FL"021"YBhr%ShFrTaY!S(lSEI3p -r0Y[N3lRSEbFHLqlk)SaY%SbP!(J*X4GZ#IKST%kHfN(S"a#XIS#VqA1"q8eRXjd --m3!cRT850R`fkrHXkBLm`-@r6f2pr93%r[jrmQGA,H0#l)p@@l2%rPh%p+[%FR6 -9q6XrXAa!9-6IM5MXAV*fkjdkqJpCXrm'PNHh%mZ4F,qlRQ%jIqlA@Ikl9iRPR3$ -31ffjIr,lClqj#XH"b1NEJZ-i'q6X"0`0!)V1`UQJPCNeF)fk)6h!4E-9dj!!FLX -hLGdj9+Y"AILM%%['5(Kkp$I)%!c,2NX1#`ImXhHh4&mRSm%Re*L"cH5L(eJQ,q4 -@Z&p63)PHrf$L)IFX+f#i5(``QB,bkX2dRXQ(aBHYlKG1I)"T9lCbB$N[B9KmQ*X -0blH--0bCD!mU&dLhp%EVri@6dUFhLD+(J#a[c!XcK(+cTXJ-"`3,rY"p)62-##8 -"NThd*YdcT0KFPXP&4'lqfUXf2U!9eR5%E9#U"NJ#&`I6RZQhCS@Ui8*'h&(SP8i -BhXcqEh,BLJ[-Xp(T4bR#TNphfX&&bI`XZmiM3q+JAA63UcJS`P8@"b'VdGrJ)0G -C"c@M8Xp3Q$YXRC'Yk(CiPSr0A["BS5cC`#N-cbjb&,#!kRp!Jq!*ESB4#0,Y!bE -G-S+kMBN&[8XZ*UM#"d6AYli`N8VV44Hfr)1UD!GM4iL`BN"ba&B8VKhC'G[jRcQ -eqYT'2JEFa4Ckd5%"0I'CD,2-,B+d'PC)UjFcC&9R5l,UH&3cd*9aVpGN-Xp96HD -JM98[2DX[&h2F#5`48D-JSKS8)UUYPQa#GD[pD,-%39DY%%qM'H*Tq%,%%bG')a* -$,6#TK-V!hH+Z#Q'1erFcbDQmVUIApd6M2$%#8INLJ"#B8&U9Zf(dRM[mTAm&C0r -,+XdEd3`8dc6SCd8,0h)iV!IG&XJcGV$3"0`Q!"F(AI%d(Sm@9)@X'UJPUe")0%@ -G-%`4kE105,D+#j!!E"AZhHaB#-+Y`PY$K4SMF-U&J)UD3XMVT"NUS*[)-Gj'LJN -bX4',ZQDfLX+0$9eXPh[Y4MNL``mJ6'ai$9`R(1H+RNf+3N"5a&hNDS(%53cJFi% -VCS[#`3`ZJDL2E@9a&,*4plFTEadP*N6m[@Q4P&k0&EIK8",4S54LJ"*4j83-,,a -5eD!UT#'%60GS2XI0k,1)3hXQbG))40R*"'+k`ed*9iJN9h"dBAZakLLfq!BU+lD -P0,ffG9h2jMa6k(lBB#GPfjrr`,AZU#d"m"@LqD9I9KjGC4#mrrhJ5frS,hcM"&" -ajb`QGbqGGh#&c!S'jc,$'L"D!T0P,ehR9qKm22C5!UmqQjG#j01J*)ScJ(QQaB! -Ea"m,Sd4ccUZq(hlTMBjY@!4IfTafJCST8P9EN!!U%RJ,(I0'-(NCIriNMA!cZA- -)([*TG!+EZ)H$e2a4+$afpEN(XUILmqMFeL%RUaD2RcXmm4!'(F'I8TYXrbDka#8 -(%`SkA%@ikNML28!aQbHiQmGhi8Ur$S,M1N*DT3KmRI3ff-[3cFYZI`!313SXl*r -MB5"[(,X-"(K3E1iVjeqE6Zb(Jf[2iZ&MMBRY2SEZU80P,bSmGi'PZ62$c-b`-!q -$Z`)GK)k*-TGkEp"N+"YcVqd*3@,30TYSF!1libD'-,`*3Xe#YU"SBZ(j63ebp8% -[#'Mc"9h`LXjeD`8[([T%&m5S90Y*X)GCYE#ScA3ac!rl-`m4mRCr*c2*4JmL3ZR -Sda5'm3#22Z"El2bRZK@'dF1QY-Q4#db1YjJF5CmX"p)Q'kG2PSGD6$EF'804"Za -Y-F"XFIQlDCI(,h"jDB[*mI6,Z42iNrZYlr#MQ0)Bd9pD@Ea+kmL%e9dH)@[iLCB -eSS[G3Y,)4H%8i3QibJp@,`iIV&j5V96,MNbiSfQ3!*!!283d-pK33b4P$jS`15) -8(a0XS+kP-`iYNFVM#D8MC0%K+m(jL4pcPl64$CmAa!P))9-4#T9(heH!ZbPQ -9!+B)(dpJH$XAE+I150#jI(ecY#$8bFS"S@5SDpmcdKa(m8N3632q[jMr%q(k`K9 -&%E%3UL[$%+S35U(cll3J9IP!cS!i&0@hNNQXHdIJUQT`GqC%&ST(0EB#%Ba,I&( -+I-F[1SElDPI*pB*-[HHE9`M@d'ZeemN2E"j5[4k3!)8'%G(@1bfD8+GGH*@k*%A -M%851kCp"df6EVMPd9$q$`U!3EZa%baHTBQ[$Ah9V$D,"G'mE0`3)6[(i(EBFE89 -&NqBNZIdJqc%'aq&FpY,QLCa@j#B-%pYp0r3-bBXLQD5'Ua*l@E"L-(Gi$%&UYQc -J#Z1cQ5K%ddI1Xhej8fXPYC1QBUkJm6466JUTh,FM[F($KNJ%kB`E(Fp$Q!HiDhQ -aT@rX*1"#IT("hm`-2T3qQ)QBNNTbKXEaaUKSQ1Bph*hmIbaqCHRp+ZP3rSN$!'G -#DDdlbSj@dF1#a+#1`6N!QeS@X#,q`34US!bXqHP)YRM8#Vp6NPd9M1#TAVd6TcP -U#-%dM9CKbRbKhq311p"eaj396MGIShjm8rjUSrYR$eV'*FIa2QGe0JHRFp8fcee -eAh)iUpfj,+$LVUX2j86K*PV52cG#5j1EX,5-%hM05cZ@F9S1B@QRTBAP%#hG@&U -dc',TTQ84bb`Y#eJ@DGQ%CB'@P9JfdE)+bdTDjV#XSZ8#PMPDVQ+j3-XT,>kF& -bLTDc@(TS1BrP,#h(iE,Qc`DTS*(m6c8EA+KqD%'Dq"2((c[q$1'2C3A28Z!TBU5 -[lLZ#NHl[+!6rbf`@q#F3VZXLakdileHFbh55a%9-Z-VXR$bT'dL)35FM$e)#T,[ -q!"9!(8PrS+[pbqF@Mj2Dhi8rfeRYFc28@iI2,Yk3!#f+6ZGq1[)fEi)ISBS2kT2 -rp8[([R,kC0m5EkQ#L`YfSBV(S**h*F,N8Q"30lX@LSN-falHTE%LpMAJTB8!DY1 -&TYN5&ji'N4j#XliDS6'I1bH+!6amR%b8!C8Z[k[1rBXr6M*dALYNKfRBfq-%,&3 -iq)L+Pe'FlQdQ2LT'6e(RQK@$I&`&"j&Vr[e`aFZ*F6Vq3hk-*[md,QdAPqkD%q3 -NGki2KrH-NL!KJf#lVLb8C0Ym3VTRP3,B)mY*G*!!9$R2EU0p1K(UFC!!!TRDlkk -&!k#5`#`@@#"!Vd1`-r#UBM2MqH"89B&l5YQfiD,rVK#c%)S+i4l0LHk$I$(A,H8 -eLmU2eEj'8#4PcEV3F1)MDJR1[GZm56V35&0d1d@LZ!jc-P@F)q*,9ZaJ&i3@6U, -F2ETp6R3&R46GMb!%A,2P6MDqS6TrPd@QY9$N,XCU%)*K4fGdH80KX-2F3((emT! -!MX(&!af$5qc+h'VeDMjVPMX-DUlf95kV0ZY*"iF8E5Dk`TZb3RTL+4[YBm@"C0S -S93TGA45(jN'F2I5m9,q0Be!3PS[$T"L`SZC3UcA)#@'4bl5pKF2V8A*ijHTjl[a -5ACUBC@J4lVF`N[GB2Hi2#(!Z$d)#lKA9LqV"kQ0LJ)d'Y#6im3q-6#UGPkY&*FL -qQVR#*',"YH(Rk)[S-ENd9JlhiB!9fY*IGllVYTjKjD)NL+flFNQ(*m109!9'G&% -3pY',Iq(,SGELZPTM%!kQU+(jrR)fadepDKCkPYQPU3mK-j1EU&BC`(X`L8('LEX -r[LXMq)0`cSq4F(!NLALcj',&aQ@L`kJUEXja@1MH!-0!@IPMr*-!-,GUhaUDY)* -*UG-Q-5$-NbkR69V"T0C'mqN(S8K)&,VDN4JhCfiaJC%iFe4d4BN-"lp,$G*r%GN -0IM41+[qPAkGhb#5k2G8Cq4mY'GQQ-c+fQ8%&BQ5E`XK`1L0MjfM!@Bb-I8L-"%J -9@a+-M%ePVSKR'-QK-%0Rj$2pGHECM)c9%#-0(A48HeSb8[eYKT&Y#QJMJQ'G'@C -'RK(-0%pMCKaQ11TQ%jM+2mRrNkPP#5Sf%2*Y"A2-L4aqNX5SH!--`,[FNP(rFHi -r[m+-kKY+Be3FM-)r!8E6D[KD6%eHB#UCa6GfT%fYSDNU6E8V8q1R6B9+T+RYD92 -Y2&9ZTDQYbY5D#d`p4P-2TdeYTDQM0(9)Q@Srfb!a9@bh+@hU%+CHSSNPAhhLIk8 -MVr5P65c"a")!m$hL(br*'(0%0qB+hCMCK$k4EXba0M,QYTE',$Skb41`Ci8b(8J -+'(#$CJPc!2M6HXMakA)3Tjr!&VJj&"C$cZl%j'JP!i3I1dkJc$)6b4mV9CT-3b" -kBpiDJ%IFR9A%E)BX)cJHDMI(VbE3Q2lBU`5-$GNXd9ca-QY#e2a3k6SdYTRBPaH -*f1rMIkK,YJ-3$RKfcb9,ZA&ATM6ZGU-Sr+h&iHCE[JrKa+!H[1Ac,)GQHb(NJif -KYHdH4iXUdqLHr5b%2(I&b!i1RYh&QeTbiQj$qEI[X[-K%jedCHrLXaM8,`BeS&R -QZNkK5e9d`N+Efii'6F4VFPKUq!UD#![m3Qq8%236iBFI4e!,AG49XD,`,R2PXMa -`8BjR5(IpPCRq#Mp6JU6RbmNKap!,&6(F`*f@iH%RU1N-d*!!5C6K!B8*8[k@f#$ -PHi#mb+d2*[ab&Ni[P0J1$$CSDT`RIV++!bM+F5DZlrM(eqQaSErqa`rSY5BDkM6 -T1,eU6AZe$YI-YXMDE)YX66&Sc8P-hDIT3F@8q'HH!1P)11X(p[phELa3jk`ml6- -8U)YB5G%e'X-flNcR29cN(1V%AS0"h*8XB1-jr*X9(0M$TIZAdcYjik&eAh2HVQY -pUTdlhiRGC[qAFqCc,cR3lE)dq38++F0j%J&0iI4NT)2Tr-mVFI%A[$i0D)mj3JN -Tkdcq*e8Z2)$YTDle3J03-5ArXhYFL$#4B)0jp(i'!#3TH$%GaCbNAdhE)Na"fNq -lL$YM0849"Q5!%"XjV*JSF))#a34NV-#iba'ZiX+8EE@&Lp-lq!)!!#'"384$8J- -!@r8293YXU3$CE)[rlLlVZUc0RYV8(P,VjlTm,U9d'BENGK`QpfYYBGhfYXeZP8h -5BhBLlPC$CBmA1Bf(ZDbh,@a+JbfY8*8B!NcNH3X@SiK1NY0FL+GA1`iDK'SDJlN -SjAR,-!k$[D6DprIrIprZYp[ZSMecjR5Hpmcc"aTX*5e#!#4"%#4")-pDaHc3%'l -LMcHS)XA-+V&i4CK@ZD+H92m)V`qRh"HArXRc6%IHdL,&hCDhjlRVVU9&qV5V@J5 -RAK2L"b-YLjDHaU8-Ph1iQ(%jL8XeK,FEV@ejDep(8B*4FEYUPNkjrMBdp')e1JH -[$3dphIXY9&`Zr41b,!%LKCkrJdL@NdL@"C(AF@R'T4kAqEM-`f@1MdKERA!l#4h -VJe#K61Jc4UM%5DM%JY!+A1T`fBA,EP`DF@Rb)j6P*25l2JKpaJJY@V!mN!$5DaB -XYq@RK9MQ+L-5%+UqlPU`[#0[`BYBA[5[4m8iZT%JrIKI1r+@4$#CTCU-`0%J*N[ -m*jI-YCaX`f*[cB)A(h@*E[jMDC!!IZMi%204Xb9%$hqaC#jrX@!jUZLMF,@,+Yb --Ie(qSXVd&+mD$E55S$hIda@qZ'!jFprXUPN5SFrI9-1*S2DjC#lrC%F(%cq4)YG -S3@4@Ga[pN!#(3iaNY6##a#JrJLfTL-KX1RC+k#(PGQf"IN)%849Sp!3,rb%GmlV -d4j`9J6T%I@Kk`LQ1k*'bb#bUf1Qc1#jXdCRC31c8Z$X8##T"S"r53kKqb&&AK&) -A%F95$[23pQKJSN`BIme3&T!!Sa`44e-flJi'J[&31PBfT!I6ej!!SH1ZXU'Km(@ -!,"!FUAA6GMS#`90$k34$4q+i(+a5JN6Bi54XX3RCQ[-+A)l-"L"1eCkqMHKM86m -Q`),*$A`i#-(N@893"[K[)eY-PCCBV)9j`Z&$6*Y*f4fHi!Ha5iSJpb1c+-JC5NX -J%@[j@(Xp8ZX6M%0`"adk`86,)4Eb#HV"r!VD%2@''h+%-PVq3&8`LN[RLb!Z581 -6B&$8U#bR$$6+'HLkL500V9*FB-JKIS3FbM$a31[3N!"l#3)T!dH&q))1k-Rfcb4 -N+LSR+5%$b8Sh`M'Jd('SZXd9G9AbX*TH4Z(J#CDKBMSHBSZU!,aZ`19CA$ELXYc -e%Qj$Z$`RSpZ5)`j6eZJHij0!HF%4&11"$'iaYV&H!'dE@K+dP%L`4D[m&kQ$#j@ -69%a,PIX19(dNP*-)Q2@"I[-iQM48JF6(r`R(GTI@T-c"bUT!JE[da+Kjb"KY@B) -0AL+5kDP6ihV3(JeN$Z15cTa#4IqT',*f(6q1-p$pPq@%Zh`"C+c3AN4QdA4T9C5 -V#!MSj!82"!3Np!0G50k"8qBKUQaY@ckd+Q+0ZeVbkA2'1T&Xb6F204F#I"fLcS$ -(S6be(4q(YlD'd[%bJ6"rLVe)kGG&X$R,`j1k3qr!4,)jhi0%@ajdKc`)6IfTX!K -R6"cJM(i!"A''MM#Q*4J8Dk%33UX1Me-5G!CHh%9"4JRBAB93!jJNjSBGUS!k3jN -B$V*%bcCcDTJP@#'1X3)`(MCM9*!!kITh&jTHkKEj#)#e*AP!P@X"P@-!j3e(L!9 -4L!@45"X44+ZF366'JiJc5%q3!,+BXbKHh+%a"Pqe2a*BiKf40RG1)00Z%YQjrkd -VZGek)KM28!"f"HqSZP)92q#GeLIec0ekmiHh"4GhTNG4KCcb2Pl3C)pk0RVEpQf -jF`NDKiS6%q'8IYJlile9G%hPFLD#cFP"SJhZL(U#r@$8TdAjQlC5Hi@liYjDICd -k!lKMLKcJFHjBGHGe9#lp@ZMNf!iiTQ6S5&fK1bTk+q$B*!Uj$$VfkGCp5d@rZqU -%&bkJBMHmARD[HbUAXd+`rj5Y!3j9ZD[ZcE*dL!!NfLKUpP"BjTka'Uf+HqBicj! -!PV+f[,dfa4UCaFF6!"Z#p$&MM9Lp0Up9XG'#h-rZFiP[J$Q1KJYB"RGKHPCVNYX -4kD&&%CP-T!p#RqlKK$lGidmS)T1LX$C%6Y[N"'1Xqd&3h-##E[GFeV34-aJRp[S -V&1fhh#5mqe%YQBL*(JMPQ$-Sm-p'-#BjS+1iG#5I3)Ulq)14b1cqDCkSF((JNX$ -&L%XFPbjFVL&!18L4r[jT`#a(+I%jNUV0lN5iG`SGPhjFFR$*CKf46X'5KQ,P`ZC -aaR$'F*!!E[HLqLj2bVCSkBEV08Xhe(FT&qXCb"1I-8iLQ$1jUd9-6pl0%YNkmrB -SUVp#peMeNb+QQ*03D2"-G5`I'Ql,khN2(AAkF"ZYQ"U6TmENUEbpclMq"N$Q0#8 -`'IL*d%Yj'9[1P%@Q%8$*pJ'%4[fP638*#`#G*P#GNN0C6LSk+1jfSdPP@p"L,CV -Y#`"V(d`Jq)G0"`XMkH96+U)1QDMM54,95(S*JG(D%Z!J6iZ9&KE0pJ8ZSYKA!jD -3!,ebSSa2jGSdd#3KJd-*fha"AE!#bi8bdD-FG1FNRkr58m4Z#23h@[rek0!31`J -(rS[l2NJIJ('mE`5'Mq0,@-5mU"Y"J1DVaB&XkVEJ`k&e,9iYpJ6ekE5#jLd95(# -h[j2PTQ2c"LlCXP3BMG2Tf2YIkflr"%)U@UkD"EZT8r*X,clcD,RSjNd(G9#Sif' -+J@`k*+MEXq!jeZf4Y'i2G9d-X6l,S)kl,-1D8#kCC#Ll95MREJUPEY0Vfb&DE)P -SDA"!L-Em%5(T6XV+E2m*VB6j[0U+"i5VTMl$-qTAY8#@4+2+@'ZL1jb8A`bM5Y1 -G(UA#'iC`"TfG&c8!R3TdK%0MBN!#T$1cPZ*1B5d)HbMmC!,cq`Up*dP`f#6"-II -&qQpj@M@`)9'2iikbcBNbB+@Q[Tm&rl)CCj!!N@2DJKm88jHirP[B`2+f2!LVQER -&SCe!&KJSQT%#hS`BH6-bLUNcr,MIh`CL+Bh%Ve40$JNci-k"cJJ6[YK-`MUj1N- -6j6XJ2QSKAY$b-5NEm59+R"8+U4Dp2@1+K*,f*r&fR5RaqacqiMP4NqkAqB[rhab -6iT+&H,0*9iVmaFqi6#*2@SM[0LAHYFeIr&YPTX6M&Uld*db+9eQ)ccIT5Uqrq!1 -55A',c(bJbH5QC2Q,pjMl%%qdjHhHJ#C[#E(!hDZT)I)YZ6eT-V4fq41iIBl*$,h -K,kjhQh6HBY2eE5E&MIlL$eDEG+A4Ap`V6'lk#J[aAT2LVrZ,2hV0C,$8@iJAQa6 -IibpZ6*YdjE5&q*K*m9CrmIhj+2iDQfNSDR$9l&h-K5l8-H"4CSU*I$8MrG9m)1c -a!4-3"#"(`%3,P'i)4+A+!3BX1AJcGl'%-qLpmeMe*Q0krcP(R`DLIM9`4K8'K!L -9"+M-3$FUNlY'$4*2#1TUTfrJ9FaSlLD`a'K(1(Z#FAFkpQi*`'L`8&iC+B0TbDR -FSPPE9D4L4qPYa3a)mVN`Rc9Ec-A1HQUfD+01T15'PKUZDDh+3!0UqTeU(!$QV5T -JhJTJhSS+N!"f6Qq2hPD1l""kd"DP,KdM0mE!E`$h!,eLReDLb9mI81,6pRSkM$+ -CMThr,$k05AiBKrS`HJH!c+#ae&HCdFkaZ-Ua1"b,$a,(fR9q"SPM0e51hB"M0`D -*Be'9Be%i&KdNMT@T(#Z$Bf@$a,'M+XH1`V'MJm3aXmSa-a`c$a,(UP@19F1akN( -L@+[+X9BieMT)((1T((2"-GFJF5bYFL`0ap+$a,')bV%)()X-%XHU9)j9`E'U3H+ -B8H@B%BiC"iPMee51AB0Me`D*BpdUalVK@2FJFHbdbV(6F1cd)((XR-UaFh$Xh#" -a6&)j*X%aDC!!1(C5jGK*1(CbN!!iGPEPf&NiGRD3!$JfUA*X%Sj0$K,(CP51cF# -aQ8(L@*(+X5)i9M4)("Y416B#adEqIcMQ2F'UU6CiVBqH%+2Xaecf)bQ56je!BD$ -$[8!N-5!hEqq2(k@LTdXJrBLk`)993,$UM1XVXEc)D1A&Lhi+*e3)iS"i$UTp%lQ -I+8ND(*!!qh8mZEhU&LU+[PGNkmGadr8'Va[$Ad1'#Qr06V8DG3'0bSPPEARIr,U -p%qd%A4!-EPT`BP9EhPhrm53%SCCf9maId2a3mdFLH8Y#$i[N25Kmf,G,4`(Me1G -k6C0J!JjrJDDd8b#I+F,JaGd1(JK-B"NAk01"bEDmEamclF#G14U"1frdjF#G6JI -[b1l,J6Z-KKfiK',4aK@EhUK,mb!S23R"QEDmAfCY@M#1SYBl[ZX[k"I85IT49q@ -e8YKD&1VTp!U,8i%-Vl3eA"MB"p)4JdK("Sc8D"#TFD")GkibK(6RUJ%ME65)Y(( -!5,FB4,TP`%MR'83kEm")$3E6cJ%(dmibJdM,"ScdT%'N*`H-0+dKEIrbjY8QATi -fm6*Mq18p[5CHHJfrh,AGa-YZ`brrVGl%5a-,[eYLiQA%m-[l9jKiZGfAJ6!q!P- -UP)8S9SVKNX%PKD'bMRZXAB,8#QAeQr93'V!piUHqmN!LES9khCL5p#Q`2*!!m$l -X"8Zr2cD4C%SX6D`JBKeABT',)BDCQQi6J)d#U2(%,Xk5dMe6[A&!E5G'Vrma"`S -eXDrH4+&kCMp8D`30Sh1N[A%)K,RbXaP&VIM(8C-C&IDC*N8'-U#K8T63#L8Za+R -JB9+j,U$8&@PiGDYR)`SF(-C*Aj!!bN(VAi53!230AqF+Hf4f4S&EqV5rbSmLGP6 -FiX8!d1%$V"J&+Qj3A39ip44[9-*4VP+hSq,X0BLYJYLU1!kU"k%Q0-Q-XSaKNmH -`)*X0Bq+&1@PDTM)Jd+XTe%'9+K%3X5dAJ35$V1#m[d1N#JQ64"PXCLVhYliAc9K -iQa!d`(S9C63+NhBcmRZm(BA&qZ0U`9[13Pec(8)L!5FlFLYjSG-r4N%d`ibp0-S -[BGL&AP2'ZFc96#(e&qGi0J*e%bPBF9%A'RXXE')L%4c1Q2klkY8k'N6*L6#P,(i -!(p)))lh0Kj!!%rQU%X2$Y[N1'5BLfpL5CL,#KEp#L+I&q'8FC6Qf6,e9+qLiCe0 -Ybd@#!MbGE+-"C5jQ$'IB#k+&Y,R1cGQ@Md@9pp$JLeiYSF56lLSNP,pMD4f@&XX -*SiiPM(Z(LVf8B(CKDS[mDTImDJY20*LDid`f'!)q0-F[iG6j%Jk'Pka8@T&drXS -b[i3'VI$XK%2,b+50[-dPI#X9Pe2"EEfF`2L@rc[%j#d'JQ@d6&[#XQBLhSV%8[[ -DCjk0E-KjAdP[2Npk81Q-+3qal"R$SJSSf)jjaYa(!SQ,"iEQdC!!2#eC`C!!6`a -*2k1hIV9mU"H*20@hBQBR$EG'SQA!IBNkS4&JVjk+#qUfG!RA14`)#Cb5&2eJ!C! -!Eh40B$,H`CJ)*Id5*(dN64l5806*8*(N9fpk$hLYUS&'G5U6!Jk`LP&pdMaNLlT -c2"X98Pm8k&MC4ka'&j5+m`-Cqf8-j[cb(D(EcH-`24E63lDSdGi-KRV,D8U'AD( -99fh(ePcGIa"+)4PRm5k8b$`[NCTbPmC)9l'`1-M#CD9cHU9c'U(5j@1[+f9N@TL -XmS@*ERr3MF2C(h`B60d1"EF-1N'6e18ce!f5@68b#FQNakFk-j&NUM03DcGfQ-H -KR"RV$+hqa(CNc5Il$q!i$h'aVU6lQ(bF&CfDibZBi`IBFHUFdhA1D4bRdhHF1KQ -CGT`9UXEL)"S$(!@Ud5N-F)3b)8bZCE`(k8L'$N4UQ5hAZS95DUPmq8$#8[Q56F% -G9F2P9,jm)0'RmU92QAXA+F`48cE1C3UT3561B4KlXTR*&-FZ'V,$c(djKqii&HP -FF4H-@J9CF"S9'qYDXd4DRQ14d1T864`E9N@$(G$!*rAF"fm93Ib!qU$qH#"Qbff -RS0Q0"LZ)4P#h&hVkrFPSUV*2Qq&%bV$kT8ma8&2QeQfEIa4i)NkSS8aUcr,dacP -U4eqSMBAlIdeZbUl%E)@qSm"C"`h2L+0U!%G+`'"GEX5kZF3c&SHTSl!M6XI8AXB -He9mV4K*qK,rd@jMajNGqaTCZi!)mFa*N,SkCEL$RN6PMkIk,)fLNHFB-Zf`m-q` -9N3E+#UL,ldjl+I'$B4arj@[24S[-f-8c3kf!1c"#RS%5NJHVN!$K)CQ3!,dpSFK -a6ZL9V85)('2Xh#!KPLA*GXUf1S'06`kiElG`aF!@IMFb`)8P!e[iEpd$A&JrX)@ -l"NK`e`!ciKl[!"If$QcKcCN",M`p`)@V"lC`CrV*,U4"!$RG!2k6[SC4(TJJK08 -ic4['8cSDU9%pY#hU"!YGZN0Z&SHGRD9KCfI*B"G+8AHK3JDl8*0bTifDZKQp&G@ -GVDV1`KID3#P@19b+3C,VD2%IG@f3!'4AL!DQS$[`04"riDUjRiEe0()9,qUJ'+G -pB-P[dF'Recj&pBI4[2pfL@+&k#kRk#iZ'RG(DTRc$SDZQBZLL@fPJcecPJ'jcLE -fYdXd)Zb$$H#5PGrLJ9&034Q)GK60`J5U"ZMNb&[#A5E90NFIfI1'PMhad1TD@p@ -D@S#JShU`cdaULQ[CdF5bSj9PdKlRp"lR0$)TlXZN2A,(9-ZN*[p-FS)Z1FL'E$5 -DQA!'R4h@9%CfmiVhE9'@M64Bj!!bNJmB@DN'!"R3XPZHfYd(d,,E!QKa,QFN$[J -",9mi"k$*JeB4"LAY``"GdPA+T$S-&"i'drjK%,G#G*G6G"FAeDHKU*pNJ4$d"8, -FHX!r%0DE#J6&2a$@$c!3NR'%`5@%JC&YlJ',c@9Kl,Hj#VQThYceKMGA#bhGpU" -&F-R9*j2BRLCeD,%0fk-1+dbT#HlK5DH[N!!#'A5Jh"@"IYfQ!,!2NpNikYl*46P -rT%&p$X9f(i(q##c&TU!)D&pPLjdem6Rr03`#Q5(mV`f!(Ld!%M5!P!d&PJIA9[T -#3-lqV5e2qE+I!I-e5cI5!)bK"-bQBZJ*(`6K'hk"!4IApZjPYhhXeX4ZGl,E(Hc -f5hCVC,G[XpYGl2C0h1EXhFPZGHbfPYe@XpXDGPZ"@hVI3qb@C,I(f5h&EZ[CM5R -eNX-Be(5&+M04HFQ'H+X(&k)"0j-!KZC-S"[9Sm1`idiV1KV*IC@S$JL'8bhhkID -TI(X&kq*8H1jLhC3*EE!9'j61$cf($c[(Ca5IAIa69LiZp`F0e!1QKVjN!kCJVX4 -98lH5Ge`TiIKh-GHD@30D&ljBZB%CUPfK0D83l[82aV9QPX4ZGJS2DiQ0K"r*@mX -#jEq8X5S!KaD8Dme%LJ+'!![RJ[QD%cM'36Bmjd[Im"aI9jY%LfCpR6)1p$"6hDc -$KieL$9CVN@k(-B@86@0bC@LUh9il#S-cHM*aTfIB0kLQY8J$!["MQdm4RC+[2JQ -([(i%$A@NTaj64eTAE(*#M@kU%peRTrD'h+NpJdjYHG`QEh$8ek&&SD#*lL`0SUB -$(iBahZY5IDdfd3(9I6SS#ZPV23I*,66q90Q5E9p8RkpIV-qRiY"&FeKaD$l%mZq -p@4Bl4lIJ$NcfdN"B[DDqGbUr"6r$B4l'(A-L$,N&fLbJc5+dp6kd@IjS)bFaZ8a -'ZibKAECJ&AGdlTb!SVNI-B-BKUM0R8FrAqKe[MK(&G5X%`r$%Q6NJBZI%KdBL!K -(M-``6l35@lAFj4Z)',[Ta8-L'*Qe9CMGReDD(pdHVGRVA(iZ-X[-6Ra14L9Sf!! -KkaZ9,8P$'Q&@BdL0LN`C`&b%2i+MIJMLjN`PX[5l56+L'ML6!"0BRE3,MbR%[p- -3%c1LUJG[)ThMq*rLH8qQi+m`9C6#Mj3RL"r2fhkQMpXrG%FpZl@#'0@#&&[`2&[ -`2&Z3!2*I3'cZ`@Ta4RKaka%+%PajjA`aN6YI+*JU&aISF'#!U2C36JMCm-H"D[- -i#YrldH"3`3N@)QJ2BZ!rIC`*&`$!I')U(i24BpYPFaY)C!S#1+MJ!`d+'3caiX% -)#UV+br'!Jk"BjdPS#"L*lTPC-J%0jZIR!&"l8Ia`4NN#c46!ADA2j66ibp+PEj! -!5rTkFXM2N@c0%HIKK$b-@`if%#FQSEJRX)QMkXb9cA0XJ5&AbYEe-'8FKCQ'EXV -`QeQ'Ha,ITdG$2%m)Q$!HE)!-[U#&`CSNV([[MNf)fdAb3dc5DlDTRGL`d1%S6'" -F5#EdmI3cA%M3`b#5a'aNGfX9i@CQ5c`C!2k+4b%R2!iIfA5#,f96$YQ4K*db"*Y -T@b,)M%##*`2CZ-S*-Y1L$G@-P,PK8+#'M-6%DDYS+DSr4lAPC5)RNCE9'9c@1$D -2QfDJm18)if&89#(cY'eUMa`ZR@5Eji#4D4Ma)"-,E-Md5l3K*h9XL#)kbARR0U4 -&8N1Be[Q(,E4QI5bNEHH4#Cm)EHAhUj+*&M6FC,E"PfJejjJCeHLEP+h6cX`1SK& -R@6bHS9$f-0$PK9UHHCiTCdE(N!#`*HG2-VEI,aZK5INCm1!Q0Yjb(N)A55hS)V0 -D5!3X3kC"Bb![#,lYP!!fVaBpRKk0K-Y"'aNBp9XkSmlN4*8+c3AY"ea+BDY0)dU -b$qHf1B-NZmmJZD!+NQ`RqBr%8`L8X(JU$EB("Tp0bpaRif*'&5iDi[4NRkLl9+J -66Y393"a+MfV'Mc5Nc'!1K9!"@&c#pT&)P#GF&DkYRRR%9V5$p1"K!b"j6GX!6Xi -cURB!!k($)Zi0%jL'aV'4%P`JZdpQJ1b0(5dEIfIFR-!'VkY,"JV8)M"2%hX(Md[ -aM+Sb!mCqZS*b52@S@8FJiCINFA!ZjS#9hl2U)!(Cm6Ip'aPbp@!cEC5&i(YJSXB -b1J*XmcS4KQklflF&GYS#-Ql#AKq1ES[qiSeN`FMaNDSA+Y)&[KIPcb86YLTlK5& -@"L)1(iQclr%I,`L0[6%RVM#QPA%I`im'pZ1SQVP0B,YBdJ&EHfX6E!e$rJjfiQ2 -lqE1acJUBGN')k'mE01kbVqRmPI2kff$m%-[Pc3%FmF#d0$kVmAN@i0NC&2ldS"$ -a$*UD(QC!k`3"qKEZH6IYAY0jJ)eR8,M8Sb9jQJD!(d4Sa9RaBS)ClLPMM`G#B(B -Lj"#F0cB4R!m"`E8R&CVGkXNAR1b-![DdLC!!25f`'AiKkar%GKE%%m(r-EBirX& -MB)Zdi#D%FP`1jH@8f@#*Ca"+TCLi5f16B"Npq9C8b5R[P[L#`qHkaqJq(p$$Em- -afHM,5'0F'`UEe#GY-,$3DBA3"5q&dr4M#LJ+jfcrlI3%QbV5hk"AB181'-'@AI( -S2KEFK3hhCm))l43,ce+%CcF"2[Kd8hK1U-*6RrjU+`Uj[Dl$IX`mj8-N"f'(C4# -U-TF$DX&Y4qa4ld1UX"cM$,1I-@Jpa9KVN9q3!*(4*VF'dXB&!lPDT[*4@Xm!m*E -,$&!$B"C`D'"DaiV),!b%9&'f`93)C5BaHQB-$Nbk@`f3!)!S3hl36%E2$)*LlfN -"KmcPc@fYLXdje#c9bC!!JMlQLN",F5%XRP%63$E,!$XCfbU6Ul900T`b%d$QP21 -`e4SH!Y,2L3Y(ak2rK!,9jBmiaTRTUh'B[XUi,iRRmI#Q4kp,Qd[)-%cL%NY@'Id -5(ZEdZAiV!RZY111p*#jmBH8[qG&JkT0qTPk!+93GaS5d$TZYNAIBf!-J6SJF!$c -k,ijUS!iCh3*4E#G!,jNS%PI+f8P4,)jBVMULFi'i`c`1-#+l6-J"!&EdMYMhNG! -4A,%Gd8#ePLf(4D")frL!61D`m,M3a2C$KD(mE%Vq[(!fbEF2!!@QmM'&J$Vc95@ -&1**eH6kk(j5`e9QDc[#I-LZ5d'Rq"6SG%p39J-Na0(d`)&A)f%iLN!$Gae%BJ,M -rK1MhC4NH9[&j1+5%S63'8"&'jA"MB6$$+VjZe`cqXBiAa2!i-9Ca&1C,f)8a@ZU -@*9JedqFN#,DGM(e)MkHK"9p9fU,Tc"Zk*cEe18*Y3fkaR'Q%2$%4&MN!CF2LEE2 -q9[5fCmbKH,+eUMMUVJSN2kK+E,9AH6BLmC6V)CI8)RP$jh,Z@I!I86ed[cAkiE& -SI0hU@SKQke[prf(CLV,ELdYhdHX-QpKS$Rf0"m3&-N"DkYR)(X!$4pV)J%c6G4F -U!kJcpJ5+`A1k*Yh)!PBNK3hlBi2ja6pI2MAmjQA&[@qVqGNr&pi()pd!bNETm#r -9'PhD5hHp309IS08FUlcX!5XF'MlCl5imH80aIqIi(iql#e%pB(q3!&9jT$1Ak%0 -h,f82[m-2[4$Qm0I$d&8f'GbQ6SG-!*h&b@m@m3lEHP*931-!0Iq)&8Sh`IYZa6# -!**+1!j@C`8HRN@e8S,pHiGRQq0k2N!#ml-Tm*T6N+Jli$1)6J`J89MR3I`hLr@A -$aBA'k8qh6"6J1+8`50KM(UmXK8Nl!QQC8CQAdNd9jP"PBE4+3A*4VZ0K)V(+3ZT -)R-cF9q8D6RZ0dqp[95rB@i8&Pk-9aZMqLZjKQ2aKbS#1EUhc5D&(AD1DM$QcR4k -l0*3qbkZPU2+$UL#TfQAc0L1UAFcMVeDb#KBfhG+F&%l4Fr*,aqYi5!-DRR%'(SY -d$TrJ&68GVDMQ#NeGTJk`eL%-Kdi"FI1LcA9JU1-8m%!DiZ6GQ%B93#F(*'$+'"m -SrT0'8!&ZML&4eD8,+(LHY5*iPP%PeHDk8q01"1Id%"'L4e-4LfG9@9C86)!3Uj+ -T@IXLEdl#"9UA!5"4&'T3PhQ(P`ZDf@1UqNE#PV*TSI1P!+(m&M,$R&3T+&qd4Si -5AEX'VV8XA3``DE9$$`C5-$Kj$CGiZSX-8S,er&5XBiaSA6VK,MhTF%lTBTfb$QB -TajhQA,Xj%k$#'c@6'+RhCa,Y"#Tp!U3L4UaMj#-4a!1%RL2RmEGGqULN4$U*bc[ -5Ikrlj$HrD8fm*pdLYEce%qR!(#R[N!"0qR&Milj22jEq6f1MG1lmZpEcKE8Y(kj -erZeFUrUlHHhUPSqPYNmHqHFPfTpdPr5G(hemr-GMEEVdcU%hT-$pap['m`l95cm -kp0DKGhmXE5iY,0hqp#*TT,"d'I[rmM,ehm,P1elj@(VPd1m2IA$PkV)edX,jdV[ -&KaCGZ5SGr,2d`rR5qDrCVpDYdLI(TAFDIR-eUhle$aH[UChhmZ,5imG+Abje(@c -VSHGGG46qX+0DqS-dq9MrY38PU@APck9ET3dleajD['+9p1fV8X26E4IS!$qA!Jr -rbmqP[bb8MKhkrFqPh)95GE(8)Gfd82*m,6hFpT!!p26$9pXZcQQlMX")5PNPAdS -,hpZ`3ITmAZQmV"r1HAraLS8V2PkbH2Zq$aEm,PqDbC@QYeepGGr,#kA[II$"6ej -r3rV`VCqmGRA1STp+eXCpqk5&4dU[I2$HqGVD`[0(2V(QrZ`6DprrhZel[Z()NAH -Pllcbf,F!reUbN!-Nr1(HmVqPAlrFpX613hrkXR$*cMHN"ZP8@p(h&V9m18pD++@ -PIhK0+PiQr8hkD28bUFcD8*KlT,!LkdMTmIa2VY4,IpMmdrHN`jZ[p%TrH$GADQf -8T*F[pdTc$PQIPMa5mk(0dVf,RelkHqR2KfEHNQllTI6hV!qNYJETRqGGNHlZPIk -P@ITrGDqmMp0A[Gr3F1cbFFQ@$`#3!aJ!!$5S!!"I5!#3!`J!N!-J!!!r2!!(UI! -!N!-+@-!!5S!!!%U!!*!$'Qi!N!-"GJ"1F8U$CL*"l3!J)$`r2!!!)MbTm!!"5N& -Q"%T!C`T)3%K"))!K33!%3UG"q[r1d2`"!#m),c`!!"PZ,`0K!!+X9)pR3%)i#Pj -#Tbmm4%&836mm"0@S(h!"%F!+ANUICaK1F6!mUA#R4N2k!#SLL%(k!#!`2+P`TNG -+JfF%F!&1G8lY!#*1F8U$CJ+Tp(!!6R9J"J#3"3&1F4mkrrC+(fB551IJi%(krqT -3d%kk"Dj-h`F(,cVrhNjeB(*"6%&%4%008!!$!*!d8(*"E8MRB2"d8*r#,dJ!)#" -2)P3aD3!8!"JK3!!N-A`!!3!XdT%K33!ZS!,I`NcI$`C1G8Si#PjR$#!U!!KR$#" -!)""R"Lmkri41G8MR(`C"q[qHF!`L+J!%`VJ$'Q'NCJ!"2NKkrij1ZJGZ@%q`H[p -DCJ!"$U%D,JJ)+J"!!!4R"L"i!UDJ'b`U!!3U+J!)'#S!"*I8PG3J1[p@S4ir1!) -JCJ!!l&42,%JJ1[p%)JE#Z!-D@%&K!2p-)$Vr2-#i!aT"q[mi))"+K@B%S5*J"#" -&S#GQ!!#d+NJJ$P#!3IVr###!)$Vr#P'!3IVr!##!3QG)HJ#m,a9)H[m#,cVqiLm -krZ)[1[l+,cVqbLmkrXTK!!e1-"pR)$m!5S9R##"0S#UJ+f!%)%fJ)b"1S"mJ4k! -E-Gm#)'"J)%kJ(b"(S"Yb!")%j`RM'H34!!%!)!)"!1!J6D"T!J!!(i!")%fJDYA -8ep4"q[jf5T!!C`K`!D#BF!1JQ#"0*8J!#(!!60pJq%je60pJq'!!rVir!#"1S"m -J4k!E-Gm#)0A8ep3`1!)J-F!+B*()*8J!#%cIB2K1G8j@!!")j`!i+'i!$%IkrLT -&q[iU)"5`NQd%)")SJ%U!Ea)J8b*Z!!LL,L!8dC14NR!!B!3`22rC60mF!%jH6R9 -19[r)51FH1#BZ!!JS,J!-+'i!%%(krESY52r83Llrb+%D,8Mrc&92U"``(cS!$%8 -!!'pF5'lrl$!&8d8r!+J298m[,[rXU!d`(c`!$%B!!'rF3LHTQeP2,blrl$!'8dB -r!+J1)"mY32r`FJ%I!DQE)'lrm%U3!'F398m[#+QQ-"p)`()%`)&Ra#mZrr#TSf# -m%#i!&'F+@8mZZ!+Q)&qJ'cmmS2a1ZJ5'9%mY32r35S"R!!'H,`"1ZJ2@@%p+!'F -+F!%G3!!@6[S#'%KZrq4)E[rJ5'lrf%kk"@T2l`!-)#lri+%H,8Mrh#!)C`!"C#! -Zrq5K(Le)rqJJ#'F!!93[,[rN,`K1ZJ@i8%mJ!fB!!+CC6bmm3dp%48*RU"mJ(be -!rr"+J'F!!)iJ3#*3FKM6`5m*6VS%Y&K2FJ1`3@Cf)!dJ3(!SdF!Y52rd)Qlrm#4 -4F"M9`#e+rrJ[#Nkk",TB6be!rr`JE[r`S#P35LCZrp3R5J!S@8m[,[r`6VS9c#! -IFZM3J9'!*d!!,&925(Vq-LmZrr4)E[rm,``["#mZrp`[,[rJ,blrk%kk#XC86bm -Zrr#TSb4Zrp3PE[r3!!`PE[rF!"!PE[rJ!"3PE[rS!"Jr2+'B6VS$9P42*N!r2+L -I6VS$5P42)J!J#l#"CJ4`!'!#F!%J!#9!!"`P4!!J*8`!*%Kkqm`r2+$m2cbJr%k -k![K86am!6VS98MmmSCK1ZJ--9%p+J'F%F!'JQ#"m!!!"@M!35-$JJ()'X)&Q$%( -k!+iLI!!!!c`LL"em!!(rb#"ZrmbJ'e92U"``(cS!$%8!!'pd5'lrl$!&8d8r!+J -298m[,[rXU!d`(c`!$%B!!'rF3LHTQeP2,blrl$!'8dBr!+J1)"mY32r`FJ%I!DQ -E98m[,[r`UDB`(dM!FJ6!J@F),blrm+QLB-)NE[r`5T*R%&92,`UTTM!I5-"b"-# -"CkS[#UQMB+33,[r)(8!!&NcI((K1AL"I6qm!$Nl36PErr%MR!$"#,[rm2cbJr%k -k!La86b4!5S"RA#m!6VS"J&K25J"R8#!+*N!J3#mS!!`r2+$m2cbJr%kk!Gj86am -!6VS81#",)'J!%+!I)%XJD!!BS"mJI!!!!9S`%%M!i)"b"V#"CJT`!#"m!!!$2## -!(A`!!Irm%#lrr%cI$!"1ANje6PErk%MR(cKC6kPe)"mU!%KZrqLSG#!0)%!J%(+ -'d)%Y32rm)%"F5%2Zrq`Lf#,B@8m[2%4"9%%r2!69UD!J(bK!)%!N8$)U!!L5DJ! -%2!%d+J!'P'S!!Mi#0LlrmNM$1#lrlNM%PS3i!8M%PS4U!P+$iS-p3rrf0Llrm%M -$1#lrl%M%PS3i!NM%PS4U!P+$iS-p3rrd0LlrpYC"282rqM)Zrr653Me"rrKC6d+ -R5'lrp%Kk!'Cb!4m"FJ%r!A,r,`&#*d+RU4-J(bC!,`#SF`D&!*!$H#m-)%Y`%0( -!,`LSpPP2UA8J(l#&C!*Jp&92UA33(fB#B2C`rcm!3QFJ(k!b,`ZT&#m-UD-[,[r -SU(0-haci6Pj1G3!#!!"19J!!51F!-#4Z!!JJ#LC!)%!L+!!#$)&"6%&%CKBL+!! -'$)&%3de3CJS`+!!+FJ1`3@F%F!"J!R!"60m-!%jH6R8[#PP22cbSER!"(`"1ZK* -i)&mN5&P22cbUER!"(`"1ZK*Q)PmJ5V(*CJB`2!)!B!3`2!3!*&p1G8j@!!![!cB -Z!!J`!dM!!S!!!!J!5S"["(!"B!*`!#BI6Pj1G8j@rra)ja`!0Li!#$m$6VVrc&4 -2(8$rr()"X!&Q%!*$"rp1Z[q!X%0Z"(!!B#KC6cmmU*p`!4m!6VS4m#!I+J"C6cm -$(blrr%kk%H!J(bJ!X)9Q!R!!60m!1%jH6R919J!!51FB-$JZ!!JNEJ!+)%SJ%#C -!)%!b%!a"384Q+$)S!!)-3805CKif"(,rYN&R'L!S!!4b'1+S!S!!N!2r-J0)`E# -"C`4`!'!#F!%G3!!160m-'%jH)&pF6dl36PB!!&925'i!#($r2`"1Z[q5%"pR%L" -Z!!JJ+!!%FKMLU!*!!2pJ!R$r6Pj1G8j@!!"96dKZ!!K`rcm!6VVrC"!ICa!JEJ! -))#J!"!+!!2q3!f!#F2p1ANje6PB!!%MR'$JQEJ!)+'i!$#",-,`$!A!!*%`NJ#B -m!!!"*0H5"T)!!!*)"T)!N!-J+$`!N!1!fC,CNLJm!!!%N!$CNYH5fC)'NJ#3!h` -'NJ!!J!"`!#4Z!"!NJ!D5!*!$*!D5!*!$)!D5!*!$5!D5!*!$2N*!60mF'%jH6R9 -19[rN51FI1#CZ!!JU,J!-)!XS3#e!rqK`*0R!,8crl(!JfF!Y62r`F%MC`#e-rr4 -`2YR!)!b3!)Z`K@-'F'91qJ#b3N!q!%*!28$rj$B(F#5f3'4)F!5f3'3%F!"J$(! -!-!0CJ'S#9S$NJ(J!1!-Y42rif+lrk#4%&)!J,[rid)$3V[r`)%!`V[rNF!%8%R) -!%J,MB0&Zrq454f#`3N!q!(!"2!!f"h!IYN"N4(!"YN"N"(!!B!a`!$!$8i"U!P+ -!iS"i!$J$,86rr0LZrq`N4"5!)#lrr0#!d+lrp#"!-)C`!435FJ!5!Z0Jh%"54f# -d3N"-haci6Pj1G8j@rr")jami*'i!##CZ!!`k,J!3+'i!%N*!2!!b"A!!-!(3J$3 -'FJ!b!V#"Ea4#3$3'FJ!b!Y+"dS`J36#!8NCJfN*!2!"`!Me!rr)f"VC&C!!!Z%* -!2J"#3$e!rr"`!$!$jB$3LL"!)"!Y32rd-JC`!$!"d)XJ3"J3GJ!@",C(B`!!JM! -ZrrCb!F""d@lrm(!!-!06J$3(FJ!b!V#"Ecii,[r`GJ!f"#e$rrc@JpD-)%0+8'B -5)#lrr0#!d)`J3$#Zrr*8E[rb-Llrm(!!-!(3J0#-)%!`%$e!rr"J&M!&d%$34M3 -Zrr"b!$)#dS(5M#""-)"54b!Zrr6LL#e!rr4J!2pX8NCJ!2p%60mFq%jH6R919[r -m51FF-#4Z!!Jf,J!-*Qi!$M)$F!!`!HD!1!!`!h)(`%%k!(!!,8$rr$3%FJ!b!Y+ -+)%%5%(!!%!%d"A)!-J,LS()"`)(4V[rm)Llrr11*dSXJ36)3F!!`!5e!rra546! -&FJL`3@B'3N!k!&*%-Li!%R!!-!(3J,#ZrraM!Q#U%#lrra)Z!"25!C!!!8cI$$K -1ANje6PErr%MR(b!NEJ!)1#i!$$SZ!!ib"(!!-!(QJ$`!-J4d"m*#2J&f!$B!eSS -J3a!3G!!8!#e#rra`!$!"0!9b!$)#d)(QJ()#X)&R$()"X)&R)%U!Cc4J-M3'FJ! -b!P5"dSSJ34)3F!!3!A)3ikL"V[rm0!Cb!$)#8S(5LL""%K"`!"!"iBL"V[rm)#l -rr$3(FJ!b!Z+S,8$rr($rFL!f"A3!0!15JZ+S`'lrrNcI"2K1ANje6PErf%MR(cJ -QEJ!)+'i!$L!m!!!"*0'Z!")J2!!!!NM4VJ!5)#i!%Le!rqab)01Z!")L,J!5,8( -rm#3m!*!$J0@Z!")N,J!5,8,rp#4,'"*f!"B%,82rq1D$HJI'49*$282rh#BZrrM -LJhS$aN983ce$rqCf!6SZrqEVBce$rqKq3-J(I!!F"$e'rq*i!HYN8d3p42rJ+Ll -rq(i"bSGR#(S!1J46K@!#H[mp4IrHH!Jp42rN5NCR4LmZ!")[!$m$8NS[#NkkrcT -2l`!1jd$4E[rN,bi!%LmZrr!r!bmZrqa1ZJX)6qm!$LmZrr3r!bmZrq`[,[r`6VV -mV%r[!!j#3$e!rpJ`,[rBX'i!$'3!!6S`,[rLCcSN3$mZrqJ[,[rd2blrj#m,6VV -pMNr[!!`5!#!+F!!3!6e!rpTd!$3!e+lrl#"#%""b!")!dflrj'!F2blrjMmZrq3 -[#dkkrI"36ce!rpS`,[rQd@lrj$!ZrpU`E[rHCKBb,[rB8Qlrf(!!-!(3M#"!3K" -J!2pk-#lrfV"Zrq"Q!!#8-#lriQFk*%!r,[rS,blrp$mZrq3[#dkkr3C2l`!-%J! -J#R!!%!%p32rDG!!d!05Zrq`J3K!3FJ!5!00Zrq4J($mZrqBr,[rN,`Y1Z[eS8%m -p32rD-#lrjY&Zrq4@E[rD-#lrfP0ZrpT+3'F!r`!i,[rBGJ!f"#e$rra6JpD-)%- -3%#)Zrrc5M#""%)"5E[rBB-i3,[rGd#lrfc3ZrpK5E[rBFJ!b!Y+-)%%3J'!!rVi -b,[rNF!!`!9k!jS"-haci6Pj1G8j@ria)jami*Qi!##SZ!!`SEJ!3,#i!&#e,rmK -`*0I!,8[ri(!Jem!Y5rr-F%MA`#e,rq3Y62q8*M`!!!%NeklrP#!m!!!#50'Zrj4 -`)0'Zrj3S2!#3!i$CV[q8fDlrP#eZrj6rY#Jm!!!%N!$CV[q8,@lrP2qieklrP#e -Zrj6r[0QZrj3YE[q8rp4`I0'Zrj3YE[q8rk3J2!!!J!$4V[q8)#lrP*!!M,#&B`T -`C6e!!#K1qJCkF!!Z!%*!28$rM#4Zrk69r!!!J!!Y5[qS,@lrT2q3!#em!!#!!2r -S5'lrk#mZrk3JEJ!N6T!!8%mJ,[rSCJT`Cce!!#K1qJBd*'lrN!"55VAZrkKMD#" +:%R4ME%eKBe"bEfTPBh4c,R0PB3""8&"-BA9cG#%!N!1irJ!"Nl91Je0dG@CQ5A3 +J+'-T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S[,hH3!bj +KE'&NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!!Z2i!N!0b!!%!N!0bm(`0TD9 +5CA0PFRCPC+@P!+@3"!%!!$J!3,Ea6[1fm8mc!*!0#+H$!*!$cJ!0K$!!!,J`!!) +Y2L"#G@PXC!!!&e)!43!L!9-#3J(!rj!%!alrq2r`bd3!!)!!N!HPN!3"!!!f!%# +d(A&cY`Y3"!#3!h)!!,IR!*!$FJ!'V@`!!!%S!!f#5J!!YVm!"#dq)(4ME!!!UV8 +!I3!3!GN"`!(!rj!%!alrq2r`bd!!!)!!N!HPN!3"!!"!!!#f"X)LY[%qG3#3!mi +!!##e!*!$cJ!3)r8!!PXD!!!I+3#3"!m!3Np"Ae4ME&0SC@aXFbl2J!!!3,*069" +b3eG*43%!rj!%!*!+J(!!N!C#`G6(%)!JUNrXG&95kD&*R9PD2))ceM6*#M!miQp +GY(1#221Vi@,r,&UQT,,!FY-0H0eEpm[QB!9+8K1eYGiE!3LDrUVYRm8p8,HYeA[ +&bZ&kE"8DUX`JDH'd1,E`4N95fQ*N5lTpDGCiMC3"TBiQ9BCHV@p%3heS@2cM#fe +T%9DP@E$KbF5+`5+3!'SH8!1+kHlHFj5-1Q0[9Nd*a%aQ,"51dVCKV@13!1pSRq$ +ee(YjGd6h1cm5V8MeVbemGTMEajYl9@DMLp-'QZ@C&lV&`I1r'S5UAIebG))CVF1 +F42HdK2f#k6N'mrbq2ibj`)5M2NkfcfPi'[`JqP-(k,H-+,CF#"e`S9`QXjVS!Pi +K,#S5@0#0JPJ(8[8CUqJ$QLe@&lYJ&T`Ea,ij%6-d%p5bY*rqYdHT(CXBbb9K9H& +-M@5#QCRqDfNbV)HU'S2dp1pdDMEAhCJ[f*m"9bH+SI0b1Ip$8Gekb[XAF%*M"@I +B@1$T$5k-CJb`NbriU[j'[U,Z5k`d!'21!&I3iCcbCL6IE6YSCPTLX08QhIM%a"L +'GPf2%jk'#SC6dh!H6R+fSN2R64-CL#5RrG5@aF*Jj-c"j!e+V2HD-K@6[acJeHJ +mB)AX1R4!h3bSJ(EMc006')VUdlKTMfBam4@rlB+&*am,B2",F&VMAV(e$*5QhY5 +21!j('V4B9T2$LFQ$18!GfX*!R8!SRVT-cPIAhJ3D44JVeNXcTZU4a-'b3NN)GpR +i+kF%!+-GKb[2-e&ZIY+#)5`AC!,`@YaaPUb2"rV5dL'mjKr,hqMehJQGFS5fMb2 +)[[-Y@4(CC8TL9'DHf9mp0'$@U9h[ENADJ$55i63IBqK+kVIML(EUL*JP4VG-8BB +XFUF+UMr'M5XL)ZK&V&r"%&dS0$f5L6[f0A@QV[0d,QT"0GIQPD9+*Z8I(3`c)6T +5+RE+*E9mRL0D1ZrT&lYH"%#aS4-i@VpXp)KL(LDe9-06V('C[4Hllq*+pJ6$r'd +MpcYLC#k8YDJPG4AHY5GmX*c`0%kMP8$UkX%Uaq&Z4K1q2R@TKYp`qPUPbE$lm'm +YC[hT@BC,+YkCMkXc&BPiVqbjM54+bbaIG#@VlF1&im@5)8c#Z1$5N9Miq$541A@ +CmPP2KR2L!ViSIpIYY@PB',qm`2F!hGcJAXPSX2jaceJPjFrk4@'SHmDe0+#cp9h +&&hPm"TbNffUBqTBXXZY,Qe(PfeIirjjHkfGhrBNYrGkXNT!!YcmD+Pl5TrPA9h+ +BJMpSL`960-FYB1+T2!KXBiNkkV0!MGU,2-NlfK9#kTFl8VlrB2l"T2f0eG9brii +DI)l)r(ShG1'2HQ[dIiJ+S#f,m$`r-CU4-EESh"F1*5GRI[9!D1DcY#rp@mkA3d+ +fQ'#DLYRj5l!4Sq!%,1I2LaL%CI@Vb2M88*%U'6A3N9Tc([pV(#I,,Y0p$ekDhh9 +S!p4)f'DlH61b"$'jqZ,hr0GEdd&4lVR[#Y@'S2F56D0kR(FfjhL[2$%8!AMlN!$ +p,!+"PQiIJN!8aD`bZe+p%BqkR'P#G$Fc3Fp"YV0&[%0"JFL5S$6XqqU#C"6V"'p +M*p[-,flmGU`M(9@UG[UFfF6+i9lH(M9H@1d(2!KP4G8kk!"rp'K[1k6+$lVr[e[ +B(qI[D1''j`Eil@Da%M3aB8&BEqf*!`TXU4prHH'!5FSmq`Z!IN*(MiYjG'pdfk8 +Q(jZ04L)T4,h!iAFbCiBm@S03bbN(b2pRb44RJ9K&3!lM@QZCm2'EGr6ZGR+KX0& +V-B8H%+JDqcUKK2U*AYpJZB0JVMUj$a6Z3[p2)hQal$$Zm`2d"d*d@a6@YUqj1@" +@$rJTa0Q6dQbi['!Q+P!U'+fMdr500idC6ThKd6L-AE)VFM+X@X(0JUTT'q%RDUe +jSLH@&c&4#UHIU)DkcLCr`J$"i8IS(+$HRf2!6P)9bA2SPd-l`DDa%`VRV0P#FJ` +C6NHiSf&l(-ZdcHiH#kFH&'TZ,Tq8Xc*KEk8bD8kNE2+rDCFm$-1-[[%85$TNSM[ +Z(H-6idblV8TlX`kV*"YZ-Cm8'A)#2UIDam2E-ej)d`Td[mje*GMf`iR'1k'T`f3 +MQCMX'L(j''-phNUYYi$e$[XSfQJB-H!4-1E*9%EjN98b2Tj#RP`B[%YV42,b&0( +U2,rZCDZfmL5D3[!IKJG,a[!'`hDZVQ#aBK#HkYYkT-0@%kmdaH`h4icH22h(mrR +qhpldhS'dcl!AlC%-*d9rC1qVc%k2l%m`&-2BF'AXj%fY8b6@,V2c[f"jKS,q*Fk +G)S1H[%5CGSD['$VEfhK,*HkEB%ke`H*f25rBq%GcL*bm5beBI,[Rd+5$jU8[!EQ +%XZR'V1@!4S`+MDMB&!Z9"(+NjQYdckdX3NP@rk0D5N2024BSU*hkjj*$YAE`H"6 +jVZSIhMb#Fc!bmX"eriG%[@RhV#I$rkYi*e1M%(Q+[F,mqAHa[@dKq9IYT)h201- +)Br@3!'#(eE1-8)mVcBJS,%2hdSN91d*XLXPJX4Q[Xi,NVBV(Z%50lCJ1c31*BS4 +h#,-9P(*r[PCIID%Q+&pmJ6BJJ86NYR3CeG0X[1)+fKQb!rRQ6$[0)pKC-+#*J`& +)N!!Z!iAf0([6,Z#i+NUrK!C%PcBU&TN)Km&V'IkNlT%ELqb"lQSAcB8QbNq19KI +afFYA9d!bhUr!GH1e*B`2qp8C(@jHa-JCf2mreLCMfJVRZ@,eB"A'iHk,5-+S1ml +9f2I94&SCPaD8UZ'9T0p`THEk#NqK*kX,U$UQK[%$e2Cc#LVe[Q!paS$(aEa5bEq +f+($@JF)$qK*44$ZXCr,c'Fm5SVSFi&HZ*+Z[mZmp$9E!M``AlRG(cG&SAq,Q@lK +ib*T*-1p1b0NJ"4dbmQ0!pM%@BiGI-08k2Db9bA0i4XlLTB(@j*!!j$p#fl)CIK# +jMKUK$2M"([Ji"iB[lXD23HEJ9@MQcjq%!MA6pBL@Xhp+ITqjLr6qe4#Z-VjBF%Z +-P`LH4KMe,#[+mAkAQr4Y69a&RUbH(`6-6mK)b0LcDL+iaX&JGe"X19+Me%eajm" +03V+af((U[XmT2![a")(NUL0)FL-aA-Ma&"L'SaVk6rc+'Rl8-E20)6lhhFLCr&C +UAcIHf#qjeT`a1TSqZ"G'q1rDHcjT+4+[,#J@R85Fb6ER6a6aXAm&E+q'hQV)UfP +mG-fm2(Ub9fAmP)QPGHLR90@8fFT%31-[F(hjUjN8%kBQ)6V(9(,J+p$a!AL-pXJ +25TDa84AM4!U%1*l4d9J(P0d'JSX(YBbXTkT%b"qBVF%rF#VNKl8(UClC@H*C$Q5 +T9DhX'QTXK6k4'*LZR!h[(id[RTB2je+4Ze`,fRk#1ARaq')ZH9@6D&+SX4h328B +F5Jmp92XhdGT"+h)48q[Q&GAUB$dGrlQR#A4&fCU%jPcUp`G0Pi*+Srl-!+pN831 +l-mHilFH63G(RdXPVUF%XIa5bf3#-RpIAcqpZeNTK3,dqR,@03Ni9CLBb0l%E@2% +S+CS6lr"rkhLqGG8hH[HT8,@[K`GbNaXJ1%28er%1hfm(4B4f*kDrFPGEd#ZV*hi +SJY+fccV20[F4ZCcdrfRJJGk(B([[dQ(hdZaZ*("YkU-eb511rdHTUFIpf#AGEdY +H5l'61GaGqX5%1Qe$FYIHC%B9p3#FqRpJF4+kPVhM,b##T8lec#LFBl)EA&Peh*d +lE*!!bMZ@0!e+r8ZX"22QAmX@VUfp5TVhq&9m+XNN+RJ$j''(df545KP6E5SQ1GY +!0FMec!ReMY!YbP&i$P[SeY6EbmQY6KKGC!`$%@KQD0f,*k9NAJCS#JAk+!hIAh3 +d*X`))0h61m2ITRc)UKdfZ@PihcN&YSlA'LiV%RYib"NdA!42BCJhk[FbLc68XP" +j5pS&6EJG82%IKDp[**fKZ'hBAX&G'Xbhj&22Ub``@#9i)NH)ZX(FBa3F'9bd#pA +!5Q1P(,Jbe)pe5NZ,EZX0*#4)8(Gbi1(cUp2kpTEbM#,JS4(,Yr40+1D`D9!#MJU +fkHj&c)@"bChmD(S9LkQ`i9eAE9$!C$LQ3d#K8`L@181hf*BME"251CfMSF9ZIVH +)'AU830JU,[e6@bX(D3pmE`1Vf1I#Ki5!PB*'TH59'hl[J#5iIXGE,5S4qq!U6P1 +!2$Qrq%Ea-AX%$B5GFPhhIkhrL%4qDE8!T!p0i$5N4#aEE-cMM)bj59!G&4"D8P+ +,!rDSVbU[6Jf&H+rZZK6cba4GMHPkq8b!$aDPl)rQh-)'*8IaFMici6!QfU,2"XD ++T#[J4CMeJSNqP+JFSc3Z-GlLAbjSclaaH!KL*!5h`XqUPq3NbGN*Y60FDK$Kdid +G(2+e&VL9a2+0l,5E,8UT+Cq(P2VYC!9JG,eI8$X1KLb9XH&bKZ[T9kE4qpJfa!m +Y(b2DT!m1Kc$),V'HU8l`a-e8`lmcZ0l'aPh+"lf-E`M#mjL(l6ZC"BKfLal49'2 +fQ@AdGhR5rL4H#L5U244(Lrj'Y0'H5RSjY43[&(P0l[V)Sb#*k8a82Ik6%biG0[P +KBPGK%VpbEDbI"ifA23qdHH`1EGDb1'+``Ie%0V*j*%5fl(FEmJi*HHF[AJB6c(m +d5h2k!X[`#abSEEI2NEH83(9K8kIHJbr!"baG!"c0M6R64r`J82[QmVU8F"!cY*) +MF@BqrbTpqA!#,TXDX@&Mfp55qjN4`PM0Pe1#)dMcNC4dBi4`LeBMD6UJ[LYXX#D +-VEiE&!k['Fbc84d8i(cG5F00QlA[eE6TjE,kGfG6*[,LG6$1Sl[c3p*Dl0l#P[c +bD3ZU8E6Sk)XiPS%f@4r6a6a8k8%aYqAGbEM-AE`M+jJcmbd[MU9Lj+V-3HAH-p0 +Qj0c[p!b8Ui-k"DT"ilN5*-j!kL'YYkkENp[4TDXV'52VI,+8TMMUSdYGlcm3%$a +*8[5CR#mHK&K!@m6c%`UpHI+ieVZ'PlGrVK$Xe8+Ue,Ih"R!KBCrLjTVBZZV)am1 +8H!h9mfFBcIZ,NRdS3qLJ*+U4LkNS*MkD"e5B(rK2@A8$!1j%(B@)YLJp-h-m56! +NVYl[X9BYcXjh!k%'A1&G&ai92c&KAc3LMBkC8NUa%Mm9H!PY",[YjZ*EQT!!E$$ +$F*rD`eb5p'cNBJfL&YrRCp'CPUi*cP&YAHq+Qbfei5NbfqqBKZDXd4`c&EK)@`[ +MBNVfPr4b`L!YKpJiY2Ri$"%,dFQTFh'd9lqHHmlZ6[CMK3Q@mHQd0ec@iQF&-h4 +d6KFPjJ4'(2kNJVTABmCF!(jSPBA3hC%V(IT#%HKF,!QMN4'9CIM+1DCJdH!)PU) +iN6%Zi)4ARJ4JRQj@-d,L(4S#Jh[M#mJiMmc@!fi+QkDfGl3e0VFJNqLGpeEP1Gi +TE&X!2Z-@E1LBB[X06,HA$NGMF66PQj2rc"Q8T++D2(,-'+8XqeG-+hm@9HFb!)( +[P*dkQBHTb5re!b`"8bBh6`jbkd,bhK#9VeXqe[TLGP,U&BMENXa%$m*QbM@D3Ad +!aA-NHJP&[L)P1!X4b*dIEad&hIc@(9&*#I$NRRf+a"beNLmXT[HGPQEYmLZP"Nh +qlQ21(0PRMc0Df*1T+pPGFl++8d$&r4ZX[,64pbMX5F8-(Gq#'$ISrUhAGYZF[5a +l0K8kRFC54k%j!8BQLleHc36&GplF!EpSeYkLd3%K,AmVCPGGHEE#!$MGXMiRXQ0 +(@0X!I%lPf@+RI[%a2Va8e(9CNIrqP$S-Z200rd`S1r,kFCPiUC1SM'(&r)jdQ!P +*1aK#MN@BM4M5ZB%%M-PpM`SR+%0-EJV-@9d'J&UG"YUN)iQE9U6&dC2,#kb&l"i +'2NIT"48%l6%2C@XPhAVUjm+mZ1%E%JAedi+B)YhAX`(Y+8keA(,b,pZYQ)5k+#T +4e*16bGE00ED5HiGLUcC'%K'6$6Hq9Q[&2&,#m'+@8Ffq@m)M6d&,X,#2GJ+J*6p +3q*VB'QqRJGpVkZLY*dQff4)!rlEd3d%T@Bqcp1NS@pfHmVb4RiT[d64$TjMI#b* +XHi[drAaGhCEi+&E*`14)T+IKqih$b2R[RKVZX&%LiP,,DkVTJj@fbAD[`@+E(a$ +hGbHadLd$6i485Qc*,b9Ul@"(R'GUj9j5CH&$46QBDfY`55-d8((!KVl+B%Ub'p! +rl4`N9f3hS5AV(I`*C%&&JDd0pB'0cP8PrG5D)(DQ6mT*eA6mr5'f*''4jpaN"Ub +DM+TUKhNP`X5[rq3Tel4XKHaXVYpCT)4F[q3h+(ESLhBql8)FH*FILj1'H5K+H5R +cUQNaef1I&UK&-*bJCeLaf*)9)5[P4a6AVdFflp-i,TH-1KBH!Xe#AR#r-KaE*0B +*8,&QCjpBEq&$`6P[NB%Z"E[""![J058!FT-m3&A!1"Q(%fFkjH"QK8+RM8dP+19 +`6Y(8r!XLlbBM"@fP(LFNi%C"CjFqFZ-"apCi0Ahb0"%@j589(c1H&dj6*m(fD,` +(1T28!0l"0qRFaHMrGr#-jkC8m2$KG2D%6f'1)2$2Srf3!&["&e5bQ9VKUA)c1(k +kmdlEZlb!B18r@!'0%DZK*2U%1!AIT[)I62XB&4&5U-c[D*2kH#,+[l[AKr1MNIN +5Ikf9+T[deeI"Y61j'Y%+r!-4U[J+)`j*29!9bd1PPR9hY5HHHUHp-'AM,&00!k@ +h+10Zb9Eca+,mSCJNL2aGhcFS,F%6GLPpNf1B3TK&i4rfBlS9CU0((pI!i$CV$Dj +k5S+e)Y++AU6cLX6DN!!@S'2*c$me[iF3LMe44&6ZSS8IZI%6j9589m*fI[cB%le +P+HH(6fM5hS&k)3ka-*`H%fDdcG!!3X(bEr4ldcj*5)&TB#9Q+RMc-fp'5A[p35V +i-'(U0QCYZ03-dmi9i9(mE6%(E,6#Fam5K)Je!&XSU&ik4&l3ihcK#8V&C4A%%Z! +BmB!Mi$)YaU[F*HAZpdMI1e@B"NVpi0N+fUkd$&FSrCZSLcI@Z(eFeY5!@qF)Kj@ +%R[5b'N2i+8B4V+dS1bV#)a%5'-RjqU`q[@D5JM+c'fRZ2E#428,j@QINrIhID*' +08qjK8jT![QX9+Bd#G"kd(q218mT5UD*iRjVI-K4le`LRl%elA!R41D0*3@4,U4p +,,NcdF6*E#8I1-J)d5"JqS*3YG63QqCl8Y-eD`Bmi&b6(#fZ#DNj[5rSHmmZ8`(V +J[0"DDBNAcEDmUB#,MJe3jp%2$SF3R-lJRS2QN!")d(8a()HqGrVUS9mb8hBAa@L +)L5Qp+d5+NAlXbDS``hN*0r+f9eM,Prd8crc"p04hQBfKTe8b29j%Viibm+Si8&C +(*8D[2fQ+KM1bY(+&92-("3h0VJTPK8IITX(*#(I6hKbPbq9@Vf8YJTAKCE2%HD$ +9+Tbm'KPI3`8Vb'Sl-*JKMVj(Z-)llYL,l6jSQf%%d3,pVL#bdDDeiLprIeU"Ea( +BK'bdF'Tc&8'@bRF`hi0LlE(SXlK[2pE@(DYhBV`#!da1E+`4UGdA,df&dipcBBS +-hb1!X`D2(rD+RK*qCA+81$6Jh[RZ&ZpLCZqPDYbZBF5EG*I`VN4r(RDSdbC6mTL +C2bA#Y@05Jdm)03kdEqCf19b#BA"A-j1I#VhJc!m8B(Xa3'L-ISF30m!!BcbpQGP +@l8H[NN8R)D#IJCcTd8Lk6EGqHUR,q$QLEFi@Z3eq+iM$HqEl+GUcVAAf2,4K3KJ +a!l6Vf![&58LBcHV1iqq8cYY)V2p$Yb&chcf@$3)Sr-qD%I*(Re1Q('@&Uj!![Hd +490SJ@RP)8DJ[DDBGDmBkCCb8UYUX#Ul8i5Pp4L+qT[[NI@JR"+9#F-1CMqL@0pI +YRhlHq8`"H&4C$"lS3T0d9MfDmD82P9lQ95r5PjJMU$emEFIXMIi+a!TL"!GU84f +D*(-MMERc4[4Q1p0SNCEA!G`pZ!I3J8K@2&#X'L3rTEiHRdf!Yek(rkh'SeY#+LE +LBkpc"jj!8jhL4Dd*!)LL!aH-4c4fVCA)fi,HT(`E93@!IV*CcA8#IZ$DT!cra8+ +UGriU59U,iSVfXe+qDpCIcY[SZf)1#[kd4ZPM0VkF"*1B8KE!GSBcH)fj00fBPb( +rU"[BPVCf5SXJh,rSI[BjT"h(V36qm12Qm'@&*6!["#ILhfM%!H+d5"0IG8AY9Mm +I$Z'a3(B[))mcpbpi"5Z3!"2l8PiMRe-FVH!DZa9@Mj1HdbXakIDi"$fI*62YjLe +QBIHS(MU69h%PIDK"Hm`'El4h%Niacl5V,k*3T"krihHa8HJcFSVM1'bm*a4HV'a +%*ZLd#*DPpRjZM5bMrS&LZ[)ebeGH9l%AVUr@PCe,8HU@JCr!iCK1lPa2A(pd&Z# +@M8Y`cYYCm3"PYRrKC*c(Vif0e(GcTbYV+J%k`TPhl8R5093++V3%3G,8%m55CBC +X8#p)KEZp"+dq$XHTc&P"GD#TfRS&+3UTY83U2!*rM@Gl3G#(P)m!irPl'$&j)S5 +ZdbIVrG-MAAEq((!r(CIGC1HC+)!b&%P@lZFIbYrIhQiTVr48TQHaL0TbTpI$!4r +KbEHmap363)m"lr-$q#R-daYdkGARVl+Z)rA@S[Uh*lj2JpEj$iNfmIX@EZ5``j! +!Z4M2m#Bf(84P!d@6Gjl58V%FcBXaJpa6dRS*ma4K)12GqlC9R)1M$$QNTA$r9k# +FdM+P6E(#Ik$ErC!!PMe1ceIa"J1eYC3YAEL@)fUh[9EM*4CrDa55NSkCacU5P9G ++mNIrL8N&mU6e)M+-K9hZG9U903)`G39X0EcHU`VaQeRf&cB+iab"1rbfCUCG$HA +C[Lmra9UPYDifprR6k0J(53`h*a#UeNV1G-rM4'0CVSPReMrfjq3J[@+"L2`RriT +S'')3q@HpJS!RL@8)$c)l-E`"&6-Vr%R4chVJZi#`r6TGEdKfr68`ITPNE8phR5Y +FPXqPjS3,q[4&ai'dmJrlU%KqURhBB`r,0Bb'k$XhGC!!F%'M,68rPFbZa2%Pb3@ +SfUL*@+C&TlUK4e34DiLkQQQ2S+iL2XTSYAE,"2`P6+b(k0mi+$K1UcA'-TClFqq +T-G*0LNRUm#IA`@0Pd$-D5H)Ph#N!HGU3!m5ilKHp`mBQY9GkYf,1jMU1dm,C8[l +3'pEpT1ZU0f2QVJ)*+8V$U3S"E"X)LF@B@r*EC%+fj8m65c0qYBRr%!b5aaJH`+a +"9`D#lF5`GZa3dI5DC[&j4F[aAQe)hSAMST(*@LQdVQUDjpSY9+2pcS*+%CX,FH$ +q-9[JNi@d0(!fUGE%6qX%DqaKAZ[FAb#USb#Gf"B[qQ"Lb40dYYSDT%b`KNMT8VG +FLD!Rf&(E&,T1Hmqh2d,51eJP-6DPHm-rBm6)`C5dAq!2DEj6kfpbG@4H6D!ha)Z +T#QM2d-'%'hR5%bBf*[KV8d,hSAB6aK#l5IZkld$eA!B[YAG5eS6rQGe&ZSPRq,X +,05"I$GSApK9Kr6ER-M%9FdpVjCaekRdl-@lYT(EDMa&XMRaAa1NS3@%clH0(%IK +-MkRcS&CHDjK8jUa`1E3N6&*Kli@Cjm,qR#E4m0a(2$`L91I8-`%&TB3d5`S%j(Q +XH$F3j,AHU1qU,U4Z!JCEf6-K#h(#qH60p94FfmiBDC%MekF-9RhdU$LN[QC5Dq4 +(&hUXKED[*[q@AQm&,%**F(hmE361qZ8H+52G*cIk`$Zj,aeY6&d,X+B@HGUqVJ[ +QR"dQT&861VrKPk!N*aR$E!3c[fYi*2dR34JXPLHk!qVP%qr!S9*p@LG#e0"`3D1 +ZY8-q0aj2dJlHl30X*j!!"Li"J4+3!)I*'iD0CL,[Jpf5KBFH4pV,p6kQEkLXC39 +rdZmhcjFl)UH2h"8-l*I`+Bpa%KDlXSl#U66BPDK2*#B2e4V2ZQL*b(Qh*+pS1X8 +p()Y!iB4e'&+A,IK[f0e,SYBb-#Q#ZG1#cc@C`iA3-Pf26c3I4K3XCB#I65"54,! +A`+86,`SeR)%##Mi3C&a!5V2k0!Q[i&*Ua8S$ccj5p)4A[)-b)NL0%LI`FfPAqYL +C9CJ8UAB+NCh+E8-9DF0dQmeQq,4USX*FdH(hJVBDrf-"d51&'fM(6-Y5NKAJ%@' +*!rK`Q`FS&bjZ!K0BN!"*"G'4iB@2ADJeBq'0X8U8VLqaf8Zm`eL#UN(pJ0[$AGB +ZV3Y`i@QEk,H'"1MEcpbLCRe(MdU`rA5ZTLakeR%UbZJrGML2T-JFm8b!(Afr,,N +,[d4NTYb8h`JbI[4i&ZmY-VFqSQP5N5m93X"dBrYGILPrqLTXLVUDjiU2'F&R"+A +ada@'lZ'3!26+K)ZQ#MmeNl3@ZJGEEKZFB!Z*$+)H@r(me5fGRHMrIFSBQi62F*P +)6fdeRR@1KCK5j94-IjPF(LjV8D-8BUf4RH$PrCm9L95%@kG[E@&[)8bM3XDBdh* +dLXNGX%KS%K2C8JqjGQDV!-8Jc'-!hJ!R'BTQX+hVPQ4&EH3cUZhIk`EX3RY`HL@ +a29QFA-kXjSMeS6%)A3J3AI#h&Y$)CB,jJd!PZjI'G4Iab%CR(he'+2%)J[4q!4R +(""k#J4PI+6MTGP0TTjf@GH4IG2F8!AI(!Q23#59Tl@$08Bf&Vb$8G"ihR-8HCX` +F(2Mp8ij)j0IcDLX#epMeU,F@$qQkhk83D,dSqH$q0EVRN3aM``('1la'Bh9)S%V +6&)iS0#X81VB"#JF`mr4(&9CBqd8!cMEe$A36Emq"F'$b8+P-m"ll(kMJF`JrjI5 +PN!3"!!""!!#dSDNkY`1GhJ!!!5J!!$k3!!#3!mi!%I[i!!(Mj!!!(AB!N!32!&4 +ME'&`F'aPFf0bDA"d,Xq!!!"!XNe08(*$9dP&!3$rN!3!N!U!F!#3"N,"e4bL'T9 +`EhBGJSRVa%A9D6'YD+kU#)ShAT,ZqjVJ$G@)r6[S8+KmFUK8i[&0qQJq5)PNf2M +FUDTMf@'qMjEYVMBI#h`P6lYe'A'%liY#F`&aeIQFZH1cX+LpLaDDrN$&i3(Y)5f +N%6,3mSR0jrPZ&Rf95F(i(DHBXa6%h,Q4iRlD'm$2'Gc0cm!6Aa%*TVLC'++8SCD +'akR#)12Cfcd98e3IEedNI&qQb8lbD'IMk%f(*PSaD(1`YmS,Q*-HUdQ"`l[l,$, +GA,Tm3*UMDr-M-$CGfD9Y)p5BQZFVY0lkMMfCbRGI3L'Yh"9a$bYFU5BGK0`bTY- +Zl16)'kUFV6&qd8rmipfjJ3IeePb*pV%`e[m+AD-S(K)LTLb'HH!mr2kD*K!kGTX +Pl&N4`3hA$$@5a`U#`RZp(iEdTPHS9hYX`$f,A%MG'QdJ4L5'ciSX8r5X,e`!V3V +MNH1jL[BbQbS[*c9QPZLD(MDeVPD0NcpM6b'PVDmbET-%!PJcfk3Xm3D)@KGfC*T +U5fa,HGp2ej*+DAf&V'%GHhj1L1dIkL!kdb5NZh-AY[+3!",rB*Hr"a'qk-rjk-U +&*%le[i!08,lFBLNrHT%YLmNlaa,P1qZj+$!$$e4hRRc5`r03+Gm*jDb'Z6q+Phd ++hNYpAa2mNaD"2INLQCS5`)QXBI@[RhS'4F4r2,VDb4j#JJ0H3-`G5f&U),h8m'R +d`jhlcZEaa0b'j"bG+efhYV%&iRjU%Vc[kT4U!&FSSh#I*FVS[AC)r,CicPLfPa, +9L3Q'm0@EJBqp+BVrIQU%Hc0H!,YQhYAfRMVfjIEFCET"f,!Q-8BZ4Skl%3BmdiH +K3GAB*232R9hCcR!p$f(aRp4CFAHY+I6blBcBFGXq(0RAPJ8)QrB1IJ3C*8H#G42 +@H[h#ZbG0$#2T8U#!aNp*FVR8Fr@@G6M(EL0!,YpSBFkMpBh1-mGMU(QYlP008hI +'2(`V@hriYjLhKbj!@N"ckNhlGDkjp6lrShmKi$lfdehbhc[LPNMC)`4pajh*h6! +3[PGdSiGl""1JLVV+@"SkP-r*1Yd8)M1Q@da0d,@`Tm9H9*!!l+CfbTU1rFP*)F" +-&1C2C4FPe3`VQc@$E-m4)UT1@6eSE"J)aZDNV[e*-CmYh,Y81'h25!*&"J6+(c" +ZXZl`QRdAK&$I9,-Tqm04T-E[a"p@rIDa@*!!,DAH9E"39$KaSmqCpkkDVlME3!R +a-RZ!+X,!)@U*$D3q%'eA-5Y[*l-E@'&V98K)9B%%fHTJh10P[lZaRDX$9R8@6aZ +BL`$9FFDaIhQ+!ZEQaLrS,MZGLEk1$M*9KraG6V$$HA48CbKmjCcZFkK64iF#R6+ +!BScfbcrqQ-$Xii('*KFD+`1X9k235Q%2XP6K#pVi%r(%`IB!DXl'(VTP"QiB6)j +kclFfHK$T4iFb[@TmHRr&9@&6L92MmDMAZqD3!*8hJ)YY*0#"cCqc2b%PbrN!GQk +5rbdabZ4d(l[)#V3+((r0,k3*k2eYL"5L8'1KjhbJq51C`12IkhHcJJA)K#j)e)) +3UVfB'fSKEL*!Z,3"RDE3[Y90E@Uh#S5(rR,1c%k`hrTaj`dPQa8B&V6E8mGdha% +&SU*cb[AZh@'Z'rpN$SLVhG"5#(rMQmCfFb+FMChpEMX,bS-8131$!cH@1ad00-C +R+hSQ(MPMjFH'pq2VfMNe"A(G%9!a6B),IaD'Sl2b*0213mb'"+9fF1GX#Y4#EEP +r!BMZm`'CGMd[ELl1B*8d(,0KrRjeVdch3b#`N!$6@+MPM%%@PXc9GDb1"V$-r9" +TCF0JP'KDC`53!,Mhq@kHCECr(BGh0CC+JK2cLHUY+ekVh!DrGk@F1I9qCY'4qYF +2XY@1e1Z"dp`$8pS[#&RTk#S%kf`YV[p&RTcPC5@,"e,'BZFhL@GiCM$J*FEh`#Q +(GlkbIrrD`IlmB(HmKj-R-QATkpf2#cYIdQ,GHI0bS@%A%"A`HBBFjd5)S&lE@MK +j`C!!2+jfjCK"aa1%aJ&hG(@lFd"0V)+N8"AAeSH6a"DQPipBXJCP6R9-)MCrU*! +!hDDGDM#b3[rem'iEF,NPj$Icc`,-qEXCdlr,Q1PDJahj#Vck!C+D+C6Y`%jR&jC +a'c[@(JGBJ!(Q9a`CU6aI1cBUE&QJD-HYUS(kc3C$*CN9VJV!'KP-#eIdTrX&[b5 +Ir(MQL81NLC8UXiBHmAVJ,BNkk*)Ec4U23Y"fK0ce+Mp0QAF8Ai00Lar4H83e1aq +pTTP5#'SaTb+D*!SU'QYp2[j61I2D4!YDpr[dH+qM8&BM8%'hibIb*&A$"('#$hj +8Bc&FP!eKI@6[+1pIMT`ErZFJ0Vf%4rBaBGH-,+L`HUY3-VMp9a4iD!%2IrI5#4* +H`8cGp,CpC1G$'198SPMl`4$DER8*9Hl8M6Z*eMrBm#&a*8hjK%iCXS*4lQZYBbm +Z5hA*2,Mf4bkd1*')f@eU5494M3AcQ*C'BXL-'i")f,`P65KR+$rJ(U*bI)LGR3Q +Y*bDGi#l5VaK-[l#(@Te93N1&8$&[qPlG[@jj64P#9S3SFe4MDK!8&A)NaFB,pfd +6Sp(%6Z1&Daikraapr`Y)R'@80U)MIP#Ri81ck9+`XNlNhpa6Y)6USLLLBa8fL!3 +0mB6@f*dFY-lP1AA+IL-L''QT2GTY1h#4hcf6@!0jVf%PE9#1AFeDKeSa`YV'X5F +%IDIME1XX!cp"K`GQj%FiB4l0U$[J+V'BYY&'d%(UCG)0P'!CB+)RLYr9h2acYah +IfG&MNP$KjD(3MZRS#j&9C5(SI4"N+"&R@#*m4,9[Tr100Z4+Paa-B$&R,6kiNjT +&1a*kGAeilSN%`M8EQDCJ3U5r3X0b1#%CDL"de!dUB2)fJGf12mP,V1&rVZF$M5[ +$f'f68Mh@'cI9-kqYKNmF"([IVei#!-%K6qHXjDRSKeTdU$&Qi%'Q@KTjF9CZ52F +(hi0p'pc9bH%&1`b"[2lr%8!!3`DRSMRE!qhc'kK`dIAYX2%!XeaK)D`-"3Dch"H +j#Sml!cG`Sr,P"DV@LA9C'ij(2BDq1LQ&#&f`2&B[QQa&KIaiZh50+E8RC65%TdJ +b6$DjA)cJla3(AIj4"i)$+VP%L`8)qA#8R2piQ+mDP4DE`RRZJb@GS@%A6S`TbKY +mQ4#cf-+3!0CUa1`)XV9TI+SpRQSZ1Tjl'6B5Dc+@dcqTZ1"kZHhfjB4jZAiF3CZ +rYra(X68PHpDXIpLYN!!EGEdiKPG[UTEaFG,[rVHb1AQrXI[+CKU6Gk+`&c-**[U +b$el9h*iZLdF%R8ZUaE6Nr,IVpbmbhSrT2JH5CCMH%HTNqVbUc,LEl'"9NAP$!pm +R,RmhC!C(&G0D&M[Jq53aAXRT`m$Q2G()A5el8mEF"e(HS[GE[6MV4XP@)N8'[!c +8LRU4(cDN)2JK*LQ$$GpXQYVp-LUFVUV'refBcr4eVK*kRVaejlTXFJP*m5SeYh) +K`-QPhBT&6Mk8h[N&rFJMB0V62#i"Vj!!IPV-8@e&P[jIfe4A(fpJ++m(l)")%)4 +F!XDQ#SS%Z53"aImD,a,T&hfS[ZeLK13dDSjCJAUQ#"m)#@B$Xi96cbppUhhU#5) +hhJaV2hHe2$fS%f@`L))"`fZTN!$X9DVUYc3`DNqa$d2#KTSJ%`,lFP39HT!!(FU +6Ni'%d5J5bf98C-pIIC4lbAS!bTHFRAqDNC8%d"j8LX,BJc5BCXb+#ZXpJNi2TbX +ie5%4'8Z$9))B-*42DNM&L3H,c*ah#cad0Ea#4UU+6lLmZA-YEbV-jFf6Y@1Y1p@ ++dqUI%'arkRQc8C@rVl!CFfqh'!h!pQ#SQ&SD)A3$fl`!)f9+5qidVZjcGE%GH#q +%I'`J)9&Gf5Q2HBG$P@lLfmF4l2I`!),N18qB!e98)fH4642b)r1SPK`bSBhi0A@ +3!*Vh$EZdrPNYU%`0UCUm@ULDEPXh)a0Y(T+Ki$`3N!$4K*bScI*'-U@S3@),YRP +%RY8Pj,192VYDe,CClCPk[4bhcP@UZlARcb'1S[CZiUp3G8B59rif+c8eleURS@m +I*IpDMk,*aZ5VM,d1dU!-p+3X6T-#Tkem)[TC"k&hh1F!ciG*#D'Z+VEFJ8mrLAp +Pk5#M'*8b+ah'0QAQ3VmUm(Ua9V5%aIA$0e`FASLH8PGK8H%c+MHhqUa5`FFL+c1 +D#X3'`5[[adQd+j0c8$2f53Y+Q)HKi+d[hEAE)d-iBcX#N!"lG6b+NrkZ$ilYGdm +j8SYQ-U[5jN"l)0m-T-U@3aE8I*F1"2mf6Pb`l#ND"DGVCa#108R%Yr$)!jG9A2N +GIaF)'1RX0S"2`p(***b6r'jV[YfX5hc56#T-m%%JfI%D+29VlhHEYlimFXVCRLT +U''qbiVUR826HNR2iT@PU5B2j-ZA%Ek&*AH`Bi,+QjJP*J)0)Y%$"r#fY%288Fk6 +pXa+6!9jNA#f+1#!0fVX%8jHk-4IpILDHB(TM9",'4XA!6&`E'C@f!!Dm(V&SYeZ +MVdd!(i+jc+60J(pHkFiL#bL6(r$d#kP"Tc8d`56%aS#3!2&Kl[L)KZZhjG-4e#e +5XVl9bl2lDell2G'T-Ycl6I@"piFYqm5PpiJ%UK$dE1&6+MFT%a$p+LVQP&)cJr@ +%E@Cramc+J6B9[SjhaAq*Bp0Hr(1Pp[GYJFi89qBp,l8p*hGR)m%Yk@JHkQH0JeX +9!pJLU[MCb@R)G4aX1ZiVpRDf25p4&"9k)Ba,9rkebkfp("![[iJb"r5$S,eGHU$ +3!(br0@+V"lCc#(l'&bma,!KceQ&dUF9Q[DfT!rR(fJT%Me3XQJ@ZV*q(U-"X8S8 +Kbk4K*Z-[Nk4XQ,l2#%Dp9P"9#'Z1i@krV,`c"`pd+Qq(2K@Q+`jEqV18q(`PClr +KZ+)%0B6YQF02D9ZMNa98)jrmjS&`p6KVpbqcC[)Nc"KAQH5YiZ&krb"[""GpM%) +qJ!,jm6NGeTJm8DM85Vbf(C88"lI,RZr-1S0,MlFqPQV$a3['bb6448MXJA2'S+6 +%2mKl$X"bD@Qe*K"HekXi05mcR,))K%le*k`*6ShA'BbIdlM-[K'2Y%'6,%r-cPG +8Y@GcLBfI,I-pURYK3G039K6@J@FCdDZX$!T)bA$G`EY65mYQ(jU&-f!mcrF#,JA +HLf6`P6qFIh@(*`[$#2ZrAERGfUVD8cX"!*phNrGm2'(JQPlCdH"k+P8(+!CH#cY +%i9PI0LhqV,iE%I$GN4BH-*i!Y8,(KrYr5Y2F$T)kTc"'c@j)$M,)d"@2i6Q6FB$ +Q%%`D!)HdDf6b,D%2dNA3#ZRM$e,k-$PY2bLb1$$KF(5qBVVrbS#aIb4CJNiAMSa +*Nba(-kQhH493`jQ8j0$Y-3bf6d@e'$8(D!iZ#Hf((PdJjP+ZUai)U'N@+*l2`QC +!@Ih5Ec-h*TeKf"kfFGfSd10,C`c*I0iKb&QLc`BDZQ83FBH#Uk,-A4p!h4cNI`P +"c3Rb16BDTeiT66ZH$IDpY51"@b,Df!NB42)(9+Vrlm[Sk@@(VjE+L@pfZdZVPGV +PUGH"0A*(rqCm2BGZe4&Gk231k&%DcGCqS1mGal$e'qB%+-5GClN(IFfHQTL1l3R +l"f43RXJU%"pqC6NpG3i!k2Q&'`4mip1!8UVHQGRhMCcVchamXrRCdGlD'H#0U$Q +'2%&SFRK9J[p`LI'0iKf@"`GG92bTZi(Gc1Yh,QHjk91RrjRAP2Z)jK3-kTYQV`& +fk08K3L6q`mVdjUUJ8VN+(M`ES-K6F+L+UQ!Q"N'A2Y(E`d586-#'1JP('9-lJC@ +Q@"KKEeAST*fL--kS29)V(Z$!b)1RE6a[DlmFJ#cf'!hE*N9I1JHPBTHCrCc!50V +Heqi-NV0YFE4Ql853!"U%-,G@RM$fcYCA-XlfXSJVVc,P,PlqUZ!H)'$!lf)TYc# +F"bV$KX#4RFVmG3hY4`3'&4LelX"d9,,iYp%!*+0#$'NY@VD&@r4,F$6,*-+$RBi +P32mh@Cbp!2h1BrK*aL#Gl@*j"[Gm'bd4i-*lq!QF,B6LHBGTdHTlRTrB(d(ma-E +@*RE6#5TIB0a!Rp4&+5T,AEm0@!f,U5"D0ZdHpTEhACC'p3aHeP#Tm0q%X(hm+"C +@&FX+4Hpp6U&jAXTU0UY5P0m@lJCabqN1f1Ep&)SHrKMrU1mCF5fleMS24-Q-Uc+ +%Z'D'b)ciCLZ)-[LFS3GmmAB#T'@ed9DTEqfT0P[U1M)J'mcJUp`CFH#*6j3NFX! +$Pcdm4YKlc)49clSJ@"Fr#DR(CdhD(l,1I`JXY-D#PC0+##M6!HjZ,fC,$6P`BDT +)3hPiiBYaeF,PB#"'a(*A2+F4r)ah*TS!bHBJcA#XrR#E#bb-M(pVh'1@5#LZ)+! +l$4eZTlk&1RNRNb#+ebaCc$FQ8mATIpa(X$cZS**qIdi5LUdB*MU!1ahP4Ve&'-' +RD9j!KC!!`3IA11kSLLpAVk*plF&lBZZc6-66i9E%!@@(3c)iPh*FGFQX'!qbf!Y +"'!0mpFpL#1b@UVQFHL`$PjM06+ACN!"V9ir99fj4-+6d-fm22A8mT#5IL@Q%lMc +miQXU,H-eXB6XKEb9b)+[&KlpH11Irfh(#YUlTXF@8f9Hqlm@fdDMbmZ#3A*!3q` +#aVDpZ$)YRAdB-$BMh0L-i`NljpdH+dl+$1Q)")Am&PbC1d8p-l2+MLRB8UEU+q8 +p'6M`$eX3iV!i3,%U(j-kB@1q1FIE#pL$fAa(c3V@PN)GbXhbY)NSIeAk&eq'E6i +f1iL!1"R@UM+Q*G"kNBEj62[UZiUaC(1MdHRGF(q"rYrP46`PA9CJ#qP50pba3`q +kqCXN01'"6pE[m@"--&S*B`CS+kL$'f+F"P[ce)m%a2(3P6mcf(MHj3k%S!JSpCG +1jRcQ9aV2f"P%,eHPab%)ZIB86$k*'6@`EEP,c(96$dplQA%!BMbrf$E5iN5MML, +3fI[![BCVEYJPChY3YBDE1q*bUMk3!$*VD1*E$DAUU`)k8GcHTPY,`A-"LQQX$dZ +mV&F@CMN(Tlf!H[TZ1K6ibh*9eQYFI1kVKG0+C0+0FlV4'DUcD2!3'dB-cK%8da5 +@TTpd$42a8f2"R%l0LaFE6+eEK1`+IKTaPJU-HF2f`TPV6em!-af6LZ@BRCUMh`@ +Yq,d@NmPk,ke@BSACbEe,b8Rj3)hMaXZHf4QQ`Nq9Qj*)-I,JDJD3!,iAb1iL902 +f#GUj%Zb"d&5@IQq-eM9qGL*%"QNlQVe-f[U%D*JQllH('1FXR-B3UK3FJkUJTY$ +ZQ2`&+"V`0J')2#kimmIkXcQimMr%QPHb0q(8(3A)K1c"JU+UEM2jqDfB(@8)D!4 +mQjYA)q36BGVciZVC+PGPUMBR`rKHHj*Q3TZIq-FKbI8%GMpZkQKVP2FppHCY6XX +6Th@%15ci0aZ'"$a-044AhImebJ$YDb-$T&Rf*EZbHrYBFM")#kYl5M[F4+r&L"N +Ge!b5MMTEDJ-,cQ$(bF2C*JVAH%IDqhT0FE5Y%AfUY*HkelJBM,bJ2#EK(5EJrVP +3XF3RH2SC6+&rYl%pm)19P%B3aUb)PY31A&ZaXZR+D(!A[-i46SN2emSR"dQIFU5 +,E(Cifq,rXS#-VH(b,N$)kHH9SS9ii(D1(ac9mCLr1q["8!5fQq)eL`4JckkC4%& +!VVd[ZD#%bTkSLGi3dMXB2U$deC9Ua54I1R*VV%6d("J*0h&(hf$j`NfEG%6e#Cf +"4jYJZ*8DEeXlaCG`(,hEAMhm1hXY3$bcFDGBpp[e8e,QFD163I&*bL0%M#@jQh" +6F`*5MVVJZI5$Ik`lX,d'99M)YUIkEd%5bV+Pd(lk#2@YC3[@6EN@a%RK-4US-VY +VUNb"M'Qbk@Y(XX%[U%48iI[d&p`r"X[2IUNl-cmrN!$Z[e36DdJdXpbNkHrqCjJ +rrG4),E!(51"66MfeJh52*aJ)[N93i*9C`c5HN!$c1Dr84jKTbT-K!#QUXp%3-G0 +[h4c0f4"mYMY0Y8-)3KXS0aIL9QlfTBhmd5$)9EYSSm-r#jN&-FC6fi*CS1i*YF& +FUE8`$a*Ba!1(PdBFZp3LiaPb`1mPqh@m$j(QefPJLBY5Zj3!NLqj6G-jJ"&XX"3 +0`6!Pc52rC(Y2Y$L@H8Bjbfl`d(qL1ri#QQY-4P5G$f1Z80F+[Ih*Vc5LhH4$2Y# +9L1'64rL'M8hMfV$`iaD'd2F0NhiHXER(N9"e'$!d+N'T[eUB[ShXjB9@,RPe6kS +jkVp9%D+kA(&C,Lj8QPcU`m20Ie#133bL-m)CBJ5L*J1$D[c,K%#CS,@1!aTQ&+" +AB`SYT9HBF,$QZ*M3Gl"[4&K8lCBpE[+66"BLrTjb[HGZ$3S1%(DdkB-iF()$6@c +HUlddk3*Y%cd%!!1+f[8Cd&N[aMM[9h@$hkPiqeH2+r@jQ!`CcKmA2EBl8Emf#J0 +16TLV`TURKZMSNF&SP6Nh`Hp5-#Se`eNSj4P)i!`I')j%V"3m&eb5+@H&6d&2c2F +)FMa$4`23+Pi*l[S2*RJHcNj`4J5j(KLl`il1CiPTa!SF'K[KeQeUa(h"Q#,@,-` +2ZMBV3EBDQpI0EpB,pe1i)"9j4F'rTSeJL4LcC#&KTjlPDLb)pS-V54D2ITBPVPQ +N5@mq,CZ'FSdFlQXBN326XSb[BTG0DC0ViaE3HB`i"qmJ`[&E8T4LrA9LkMVebG# +*$NMb3kqTcAK40k24Ic0m*@8lZ1)9Z5R+[XU+HC@2JU'Z(QSDVr[b@1,!B6a0#Ip +`cLDVB$0$S-*(DB(1QR2j30MiANC$`BC03GLVE&Kl!'"e+e9k-e*'CG@6VJrIl0! +V'Ge''hQ!,D%5X'V"5IE+P!V"5DICq&d&d,6D(,*,5,kPA(c8SK2P0MYdB4,Cf*[ +GSh`%Y5N2)&[8Y3*Q@rCcPAUc#Y1cAGee+CK6"22@MN"cdDX6j&QXDEl,`d@S"RP +pCP!l8&S"CBJq[bZQi"paZNAi+Pdj9!LmljkQef2[PY,09$l(&)E6CM[SAQj!,@$ +F*[Xj2BJK8KK[8F9jcZ5iKEP#j(hEk12dlRF"M'A!SaGHq60*RF+1$!qeUbcL++k +$NZfFVDd6V6YYe0UZ#c6$bMXP8i-NZ2AGS&Q6c9&q1QYIXqfE['-kc0'09F0Bl'a +48(M`Ihf@cl-(PX5,STGmjZ6#[C-MSdEkA'm%IM'[4DI9&Pb0S54I1H$aJe+8[[2 +YMR*Gm#b5bRmUEfS,I8(YU`%5V+J#d)YSG""Zp'Y4`+YJq2Cq-Crcp%Uji`VNmlh +'X%Im)#N0JpS`hXlFY$Eb5QiFlX%9&iZ++BJ&CdBAbrBH5abPAZMT*ZQXH2ml,CA +QE1h&MF"QDHZ$ii8TqZAXE1kC1$&i4fR5JAP5EF*j+V,2Bkai4A[a6Sc$+r+j9ef +e4PQ)D,d3l)aeV+Li-ikDcq6'K@)[5["B1[3BP3hiEdJT),M3i+8Cf9MfB(Mh)QL +1GN8[!1FLHYdG5V%@N`U83+j,),jEGahCf`lqr,E6JjK$BE3CYr8qcalSiG#NBf3 +!XELMq!U"e0HPYpP8"cLk*iTbllE[$LDmDi1p8rlK'jY9@ES4m1-I9BkrpDJaKHQ +HlXHNZ"DH$T1"a*ARkjd5-lfFr9U@d$ST`VHi@kihfY6pe''iA"ERcE$J-*4XF8p +DF!$F*C0BJe%i&Ep*5#4+ZEbabb9@lY!2%SM[G[fC1NTQSBT&L1rbqGSaU@M[0jr +VG%aJf%['0*BGDA8(C!RA'k8VYTP+QGrHXPXMLr0'H"@K%jLph(XCjfX,JVMJ0PB +`M4k(HB$21kp)K+3c5Ze6#p1d0U!9JpY@"9b%-$J`,i`'a"U`L%5E*08M&2J1rUq +M5PMHLRbldEEJ%$jH@D3!)alHjVTF43T!8!4cqJ'-[a+L&hb0INc$)P2&S'I,UQ@ +0[HZ128+qI,Gk+iAef!(b$RqcB2VF-JfaMjDMipe["#B)*a08b#i#!9ir)-*h$P* +"`cANV-*erJ0jk)jl"B8iHJjpJEjbJ4@YRhQMF9%9b+A[RfFYh[pA"aSJYBK#"J' +T`,(,j"c4#rM&f@#DK4B)@F2!iJHmE@5j,H15,CHUC89FC$h&AE%NJ4iph'f0,UJ +H2[%`,iF2V$[b*Z4+fU!K!LbB,UN)!+@3"!%!!$m!!,5KSlDh!al-!!!JY3!!K-m +!N!21!!q@%!!&*98!!%AF!*!%$`"8Bfa-D@*bBA*TCA-Zci!!!%#b68e3FN0A588 +"!2q3"!#3#S"`!*!'3X(9&S(3%pJ,JrR3lUbT4H'R$MeND'E1Nm%f4Z11Xpb#i#K +G356)GE+bb+*@@V)Y--!X6-`Nb2VHFJ9I%dlHe[8TrLe*D&@8h1BI$'A$XC&Sf"@ +(,4"$qHkTAb[fKirA9eFC365P'&D96hQ"aPq8N!"&,PbJG"be963G`HcQk8R5k#J +290!j%0A502pf$XP$5T4Dm8,[SRlqX#5P#5cVBYdVMrIRrA$$c3G,M3)e2,a$8K) +X5$'-N!!C$I9CBpU)fYa4IaEHc6M,V5-,IB`[*i!H9V%*Z-2TbF(FDETIpV6JZIH +Rbdm"TS``p!U@TDUZ1R`",4acYC-2XRmN1*YZX"QR2#AG[MfKKMEMX`UDqD1E1ca +J4l#ihlDVS@mi8*l@R+Vr)3e"m'mNYD4`-Ihc1`+BZ!dlk9XKi)13!$"-h3XJZqm +3Mi$9X,2fJ*0eVU4TAi@h%)Tp!$,'SB"J(BG'P5Ni@V+FX*ja`H!UREL$8$25j4c +ZJk[#b68rd%C@D'I+@p"%UV`'S&&EQ,!BP5DC+`[M9*GiPTSCVq0'Z$$$`&L@'cr +cK*Bbb3crpH!#eeH*&$jIAVa0[+h5RZBT2P4*S5Am*2Xm0(c`*rIR),*F#mQmc#[ +Va"JF5+L[LPfA0mmH,EFmYH+q#R8(94$XX$T(4!J&39N8Q5P#S2h)Qp3Tb358S1j +ZC&1X5A,,d&cfPp4KZXp+9J`Cc#B(+CpIREJ3)#51"SHdeaS9-#!H"F`F9B6MhM2 +(Gb(DXZbZI'E5Z*H@9)#)pk+5E8i-+f$+)er@Pp2JdfaMa,BaGA5FC)LEEXNb`1b +#Ej[8+HS"Lph[3lAEB"IN8lS'm-T*Kp3&2q#Z#fNlbBjhr2fV+`L3!0E5I2c"0%2 +kXF0F9Sbe1A[I6M0r3aQ*IFdbJ$F$ZH3"Z(Km2[CCP$fE5bU8M#`m#Ta),*I(aXm +%jP*I5#Qp6qGkSebQ@-mC`9VTqY*i0HDj"$YPF2MA1(VbC4f(GX,*c'hZke$[5Ch +fSCX@"(RRCTk,K@Q+L&(TSr39Yq#c6+fMpB(XQ$PMljVqEI[-X3Br'@S(0E[MK+- +cFpUfb)c*-cEe[0dqYQj&JS'4T-mjNKmA+P+UZaJ3C"j4i!J$8fchP!**2MaPp6U +p#@1Ui!I$c#THD*a9b1B$$'B6TYXRF+&lkh)-p-k5d0TaRc)Rm'22l3&-SM*fjP4 +9J[5A@Xa*IEK'S51'*fr6N!!e5!3*Q*DJ*[FGJUT39JkS6S$9m+j%E6q`FB0%-8e +N"@#q-cE&P*a@iQR-L9mIMEh'!M5%Sa'[-a040pFba[ar@-"l-FGpHkGU#qAdClE +!kV!&%#,MMcN%&-6LAlVA@M(SMdE0JV4Mjp%rppehcjIe$qHB6rT,KApH9L0j-*H +',a!rQe%p#J[4+bUTZL(q-RQGRmP94Q"IU@am4BlY,+"i-XKdij,0AL(3lYjZeII +YN4!CGP)5cYj'1TBA(TYQ&Z1j)mAM5ar4%MjYqd'HXYHFLRY9+Y["Q-D05bGYfTR +Jj0ET(2%9Pf*fic#pJQl8#cHI"rj'0ppBSLQ`jAV)bF,2hM#TM8bk"QBh8`p+Jj! +!hCU9qII2D@VXM-3NER6VX[pdd-dajc,lfGX'SQ!fHZN9p-EC13%@$Y6NJ6EMGGU +LEl%lXBMlB)bA,!5I,Kf$GSXMGf-31QeNcJUqT&jhLF1M9Xelf)%jAC6LSiN&TL3 +9TLjZ(Ea6QIhYBKiI"aYJq`9L'3Q%'d(d0Z0!SfU5P#'K8RA-86RUdFX@#ENX-TR +Z'KkKc+JN[0ek!`T%@1EdFKSRTMeqrJ,LP*K+Vk9V#-R$b*m3l(6*rMXY58c9U[C +J"&rUX"fVm#H-bdJ"J3i&UZYBbC!!&Hl3Tb(pq31X+@qU63@rJGKKeKDb`82aIYf +84ST#5fS2MD[4QhI-%m%8hm$TcpUh'`Cm9$5k2G#cY4cqEeBaR6cjXZqR00&b0Af +)G4IB%Kp!$8[-9I`UmbfFk(M#3hiFj0P8Fb0MUh,M@9T3"c8@R('rfhiCi"RNpQY +,E$0dR1I0,V-mBfkRR(CC16mNQd'pN@MiP[b1ITbkJ+EHiHBeTK"ah&2jHDPS&h, +bSM&@QpIfSAP5bN&'C3QHSY(iJ(6!K&#(9C(VKi111CNf9&f2*2VhNMpH0eJSb,a +p(6*VT*!!R$TM8ESGN!"IKm)BXS(&6BlC1L[93jVk5)H4X!DVR$"+$Q$[*EeR8fm +h'i!3HMZ-kJQj*,E&,"mH0#-aS@c2434,SGr5V5$j"%TpI6l0"`SbCHdVkh9(ac6 +F8jTI[&[J`b'Ue%4Dr(#Ji``[i[ZNjSIIXC!!2+)LT3l5*BeLPeq*Bm[3b(Z9ppi +hAb+jcTl"9m1@D**X+6C5ZG+@ZAXl1e$X(TaAJfp4L01(jK,(A&X2bJ[2Z9fGLQ" +cb"6k@G4h-N+&!jJh0j%ImYPjUTKHAUhjkK@eG'p5VerSA)5(TX,lC&I(41-mVE, +FECL')eJEkJH$f-ShMU5cCCL`R5RSGB9U0cEBI9k8Kf+$DN3&"8LSG4MjjdBb["8 +&XhcifNNEFFql0+84CFCZMF2JX8*F%6B)S)Fj1)GG@"%9iPV18Tib&XGc0X0$$4i +@3D2frkX-L5@jm-1Tbqr2T%#i9AJ$hNGD2djkUkS!r1#d3MSDk[6kS#1Q'T@[')& +LbJEeT@jZ&&29DCVXf*XTCSE9H4Db`0iC-3K4FMkFBC,emab[DRU$SBeMdT-SR&2 +aDa!ZSi4qGMAK"XYh"N,@cLS*PF`3Lh&I0q*S#4j%hh,3SpC8bbJ%15160l1k*!@ +("Jc29RkEFU)D$aCbah1%QBMMh+TjlSKb[(hYerI$MpKe8iR%LDHqZmcdEJPR-%G +RN5N4ILk-%@(JQ@R8fj83IkhSq69T50J9&Z2j!@&RC*50h+T@i9&[B8C(HUQ[-$E +DBQ3mNf#NiSMc9mkD6dl682PLd"c%BQm"*qC`&@3XjpURf9TfeR1p#KkFLQm6Qj* +ejPS6lFDHKB%UCZ&Mpjc%(HAX`e8#B'ET,qEr@G,23E9SrL@fpJ2hB9QGUd+'Y,b +Hf-5l!peI4UIblf@6A!DEe,M2iUd&3rJHcd2LLIQppdp9KpJGT3T!Lj64fM[eST6 +Yic26Mf3GIq"S#@Gl()9L*8J"RCN1%6DCq8B[69NcEH+2jG#SdpBk@6+)L)aRQpj +)3V5h6iZAAhGp331cpZ4Z,mI4CR&rQj3qB"KhG#fJ[9bVlB65TY!KY"E`FMTcl20 +,H[2Pj03r$)mGYR[KS%'*h[Ve6L(b@Kjq4#SD2#p"-(%JJE`YNGal$D9bHllV0PP +4`1q@JIGaE0MiSLI'lC[90r3mc@[Y%bM'h2'qSl#(52r0)(PP&H61($)VZBLEeh4 +&jBV"3GKi-43i2E("f6Himh)CB&h15BNG4F$d5FI'jam$pdK)QK8YUqI$cMDA[#X +a%9TSfJD2ZhGC&`cXCqJ8GHD$[#*&0)&*DHM#i$*%r%%'kYP#T$*rRLm!JU0p&fM +rm3)@F+p@,9r$8qS*-pmQLN$FE,8Ic6a9i`IhaCY*G5P5*FShPb58pTCH(rMQiR6 +VFe3Q5U1jTi9XP6EY(V+@8`LP#8&9dIAb@K6Napea1,2&G1L8'4Ta)V%JZcZ"IM+ +bc2'jmfJrrBqQY0jE5`2)Q!)KcUJZ8KMYp5CNP4Xh)CrpV6A-E3CL1H,Saq-VqGi +G*GbU`8"lSL35j,6&Yq@6(%MFd5k%KccK#5GLNEbjZSS90('3!"eMiK4YK)!#Xh[ +%b3-c)rGC(+c#FH%MkATLZ"SXD,XAfl9jDF0SLDB15@UdrY-9ClV#*[6+bp&,3'P +9R%hiVmE,"T%'qH8e"DPbr12&cNP'RV8!@ZVPkb6[Mlm8Je1,kjNE'qB&Giqd,fm +E)lD4GV&iQ$`3UFhG*YEKGjH(he8fD(+eBJN6ZBCGkpch48VbbL9S,BbcBR8(jZ6 +T-9p05H("1(LceEY@A+$N`k["#EklE#P6dc8j0r13!$#d"@Aj6A2LR8l3al-SJQm +k`qG)&R31mRJjMhhi6E"*)Fi)J02Tjc"H2K'KbrM#I6p`NUD'cl9X,S40N4d-qSX +MI(HQ,Q6I-d('D[GXdJ8b5YMhJMQE,!4XhGp0%-liUDG$EX8U)HHd%4QMGk9'QRc +5'Fd0ha+#c2"p'h%$!E0I"(8U0TDUq'1Jd8+N0j,CJ0i4jRakr$-`U0F"MbcEI0* +(e2qrbX6B3m!Z)@ppfh,rUh$@$YchXlDZ,9hfMGH,"H6@29iT[cCFlRlA+9mUTcG +'#aRJI[Klll`%,+0!(4Gh#$hc!QF[Cep'+cb'Y6mrHG!HTD2ml$L16'YBCBqFQbL +'p%RHU8pij`M-L+FdQmpeSTBrY5B*JAj+),2Q"*!!IiK+K[RX2L[K-((`'TNbjSe +``UlKMK%ZSG%8lVQV%TF'U$QGkZC"LeSIf0Z2q5`)@pml%h2$,mArJ"q06m%M[re +e"P,*Q9E5C`j5hk3UrLYpYkJ4TL!YPPEQ&I66!,&fM)BA`m[38qf&Y"P,aUaqeEr +T`[(VGAG@S+0Y'Fe)`JIhdJjXZ``Z-DUk!icK+26E5NV)#R*ci5QNN!")3FVQN!" +!C0)hM-a6LFeh$H9PV5S`Pp2MQ$PM$-efkH9G6+0jdfScDX(PMbK8QPD5HhRbhce +UhXpAJ'9k[9DV5Pk)55rmMT+Z+($(A-PA+%%+(VX)Pp0Cm"NmmplYbX!c2GMdHJq +9YV$GGTFTq&CZ1QUaZHSTL6pj,+j-LkU+l!2aj+@U!-[[,B$C#9clV$mIEVLJ@E2 +$1T'90#*p$(F$RL4jliiaNJ44'ab+PZB&9lVH-@FLde2SQEMeD(c60*01F*%P*@N +6c@e'apH50+3B(&l(`0Qk(2&APAZk$Z6ZI&Sa+EZFe61CQ9(KIf"3UiZ%fYTN*A1 +m5+*%kcMVjeeP1)Uhqfj9IRe5YT!!8YE$8ka(QYR-KSZ`Zfbdfac'$PZ,MK)PVVi +*8qUhG%4Y9GYRdaA)EAESR`HI5Pi#(cm2MefI-pLjqq,'eXCMMBiSAP)I*jAVe2V +2Y64Hm`j*RFhG*YIEE"@%G[q$kDP"TcAiJKrXhfalc2#iD!$)PH$'89h%44'TfHA +4PTNkHcG5(,,f%@4C'aZUVEl0@e`UPH'%d`U%["qFimGAKX(PViSMKQEmK5(CmDC +Xp*a$EiKGHjQdG20JJ*U'GFri'+4!%ZKmQ[G&T$HFAMHdfPE6kDS8`k0J,5*#1dA +43bF`G(ahGj`FjBY$0Yd9Y9`KUT-SEk1rK(M9aR3(YLXdGi)jX(ZL3Jk&TLmfi&% +pbM%'i483[RBbEA82fcX6)ALb"F,0@C'$`[2PPd(&L'8N#D9`i6NCqPZZ$YcTp)0 +k`jQ`H4$i%*PlTGMJN!$Xb4&k4MVY8m1K5NZE,hYaLQR@+C@(b[Q8-AX*kaIb!8k +8Y$Eq'$"H8rG5R0CR8r9GXLjc-(U9-QPGEkFJNZVD$i&3c"VAR'dfEPE`P[hH&m0 +,FAfSjYdPb@mVmf(Hh2F*cK1e[eIVpMULCIqic#FSbK,DI`Y'ifp(me1Z10&mqRa +lphaBI8HH9Jj8dGheU$arU-KI%rkffrh@pb94`,G`$31J1R!J-E3HJRU6XS#)8Dl +8Rh`1e1(0*(2M%0ri!3!bJ2+h16G1918JX3f8rdfViE4epr8H'PNiJciS3c*&C[p +l8jbFP`f$U#LT&F4alDh#NMaJa'CJm`)[G3HcXU['DX!FL`CZdEl-3IdXN!#&hXZ +,FNPDdDd0VYmTY+,k#(l!@YbFbV$T'dS4pcPR3jm6"GL#@))9(ji'(%fYibbTVp( +F,h9*aa2Z2KSY-N(VEiaaHbZ"Q4X[PXQqZBJa4KPk[id85AmEN!$b%,q1flcai[3 +"ZIQdr+T,`cLiXlV44Jrbi2)UFUSPqRk'#j0fBqKP,fZkDbr6lFU('+V-,%1N%Nl +C(SKpf'3AG*G"+E)cDi8RZd4qDY#Y-ATI-BUqeeEE(NL)38Arfkh2,0#DE83JH"D +VZjUY1(6,0fV,b$cAmbr'qPr!&3&0PU'GHlZB&kCe[AD3!'VrUe0YrrA"r1[9Xj8 +J*L)d)jkpIV6QkI#4#"hVT,[Ip)m8lre1-M6FiS#1Ndr82#)X2cm0`0#frdA1M2f +E4UXHI0FC-ZIc19rI'!McD"r-mX#P5(`F`EN(PRrTG@)YTD2,RhT%pp@6ZF5E+JX +[kjcRPfriJQm+EiCN,0bkVkNip-8h+%3E$Be1C9fX8m[B$Ya$r,jD`a6DcB!!cPk +Cp"5-91AQ'kk2%pJF!MLXlVP3K[Nfb53M9"[`C)DZ`YTfQ#F6Yq48p50hk2Q!M[I +pF,#!##ElhHcQ-F$dHK@Ld"p!eYeUY@%#qA*#k#RQUK)5X$dLrk`A6h)IZA-Grr4 +Ph!-F[3h!j8f#0h3FDK3U""MMDfTpje6Jkq4LLA``59aLLCGDLQ3[&kP#6VSd#R! +ZG96m$-"MX21Bf"*ECY+$$&dZfdQML8b!c[9G,'!5i+kc1C[HLS*9HEK&UVUS"*Q +6-IIDiZ)%fXDbTF"6ACG`-mX'8m6QFrk"+P9#L(eeBAbECINYB%aPTqGR[I*$5H* +4,JMdd-fm8[Ei!XmQRXfUJ$ihd@1`MN9iECP[50r"[$$NhB&r(+a3NR$B1%aGlLc +r[p[YMf+-&+p30CUYIpBCb'2R'flT*4JJ4$fK-V@G@AXXT!b1DTMrD9"[1C8Eq,9 +9L25&"fbSA5dLhK14+(XIcTD0*'XE(Pjq1QLMAr4PGp%bCV8YCrIL+EGh8fLFqZ8 +83`pmmRc$e28'SiRa#q5E)3jlc$jcXLICmp)XJVNM-GGl-DfmK6A%Jq!%0l$%8M[ +XHbQjP!`&rEi1NNJ9C%p9`hHeZVL-`3K`JM)l%-1V3rqdH`i#bLlaEM!LKc+!Xar +l'"C@Q&(fhCXSVBDicT!!$c[1+dN5PIQPM85Ml29j9f,N1DT,!DPAMY,X@aN@Dim +r!ZdU"Pl"99GBpXLN"Ulqre1@-9bBPf05AlBMI&)m[U#PSh5KcN2NDPpra%Ed@UD +kEVH-+93+JN6-N!#YZ&@!AfTjk'VeCVFF3P(LkeRpVq`PA)rE39BLUplI4mXE6HJ +bIJafVMY!m+p)p@eIXb0qD3eIA&*h+cmZhU#!+"8()*5+JiJp%5X!XA3ea#rER`A +CAhC3[2h9['I(p0J'Y6`3'+JYc5eERlZffNNH0$lb#Y)KB-D,PIc550efI8'2dpP +,2-86`aRm9Cq#pS,U5&-`-PeM1FQ%F+Ep&mlB1fdFC0Y54m6KVZ8!0rJFEl5Ce+, +8r$%Q+E+SZS0'!HFI*'fMX15P2AX%i*[T@Sa6%er%qm2``bhk'UX!Ee`f"QU$-31 +lj@VdK2K8a'mf8!`%%8SjNCLVSfFB8cH)+J$ccUrMbc1#l8(UI8LKQDGDN!!RTAE +P`p,(K`8EDqLN)Ji(pCRSrcfD0YXE-B2dKZ6C&aL2I4fk)Qi!M5'8@JX)`p-J[I4 +jM)K8m(Tm["MH!&SAD95d4JZ`*JJFP(k(SbYqPqmaZD4RZHCU'`3Q3pf)Y[-HK(Q +Lh)q-Q!GYma!)6r'p8%%H3c*T99Mqr'9Jj+'d3bLqr2FJX!90Y1'liR0dI4VR5D` +NV0)*eB*TYN6IVjeA9HZDE`RR*4pV2Y1rA``EfX1#UQRaRF#UacQXHhV`2$X$ZbN +hQNmfC`jM32lcqA"FEAdY(DA%r8f!%AMU#Gp(HV[GM%J!I'9KPr8Dd+Ca!QLNc6" +)GXFD3p+265-pJM%j*@HMqFE,e"S"DU5(c2'lAH,59YCjRjQX'l--CY6,"C)kJPh +&bCJXMNS+DMf"2bVT,Z4&T9LqHS6@rQ'c4Rb!+Dm(qD[I%65f4ki8Y@qPDFX9NRY +S`K('(B'SAY@*G9NE&XRJ4VTiBjMSYl`*dlYYlQj-bT8cK!,YF*-bKjS8FDN*I)3 +ph!jrh@r4TKMP[$!2J`jfj+%cVJ)IiL6UC4*e'LFBB69mHdNM[L+8GFhfM-S,hS4 +,@E6Y'6db"kM[+K0arY4hq!j*B#haEaX0Z@LU5PNAi["ZUjT5(,&RQ%hXB,Ucmk9 +Eb'p*hi'TFHY+[B4hE"pHYcr4%pkh92P518LIZb3"cfmZ'5m$S`PT(0Nh"d!+"9C +iB6"T3'ZRC&)6m95$N4$#(2eY&UNPf@clA'PEVm9%!qV[pC2!I&rG3*!!A'+f*X0 +I$,5@ji@EN`C2QBCq$S1SZPU#T4+V2@KZ&pKqNL*4i#Lp"JdG9fk+E+6X`8PJ2N8 +l,XYLCKAC4kZh*NS1IQDhh21),D[-QX-AJQ-[[NHTRV2,5m8R9jPk-rK&d'ik@A` +iC-EVHd+P'a64R,bABL)FMjiR+i%VKZ1[36hUb[`fUpJ8`*`fDNdDU9,X-lAhEf9 +N!LD+FqUa8@"F(*0-mRHUq*fq0V@bd9TL6CfYl)R`cV((D$X'&Z8ZrrJ9kfK6,l$ +ULd6j9+!4iBjV*GCDXdPp'VXIFN`b0q`iTSfFR-2rQ2LeDU3@[U4l,qZ&%)QPqXh +[XX)@e3UNF8YD*!piGK'0jhZ$dS(YQ"r&I6CBMrV&(FmE%cKbCYI&VeRHK94bTC& +rPhPZd55'kTJ+b2%"&UHmM+a#8-5*d32PSc9j03+RmmEaMJS193%e$iQCJFUIqQE +@fG'Z6NAN@Jqci'-%9deA+lBVMG4%@mZKhXB[iAq,9GHCfh"Ql3CI`h6CTa)F8PE +X%p@H1J6"V'*+XlYp13aMpI&iNrXN(a%C49fV6HT@E26c,EGYjj!!@%U,HF2[H-[ +mD&4PCT9PVK2MX65B'GBqHr(pJb8adqeF"Ul$)0heD*8-cAS4j2-KX'dQQ91D&ST +Bm&bm0GfrmU[CB!8rT[l6f1P5l+85K66b4(k,h$!MIbH,IPAP1F,I5$EAEbV4ehH +IUU,&R%0J100SUBAqk8Ql!M05VYj"X%'Sd[ZEkPZ[G5D9eJD[8K0Mk)@UG%,*a!e +p%5(apUPVkP39i(EC9@AfepAPFRH6bkemN!#HKIc1bRqf48N$9p+Z8MBk[5`a`B, +1#VJqH`%AYT!!YUPfr5)Q2,IS338J5U!ihZHcDAf!4QFTT4Q5a[h`+ffAiU)E'mL +$)mj4pk6B3HS1%G,F1GNKJY58E1Sjk83A&JR2Nj2aaf@@E0214aDYh3HP$YDlN!" +Vd%P'T`pqq5LZR5(1`2KZi#b*%8NhXpI0d+@H@TZr8B3ih'G$I691T`,!'$2rF*T +I3HFQKS(f6Y1L3*h+HJq$fpPa,Ea1@+IM*C!!b0j[80aeJkYcX5Gd1Am6,AK)r!4 +E@fM'NX16@,3k)kGideZ8DN9cHb8J"K0U2h+!bqE%$kU[mYFDjZ0`(5JCVp3Ejf1 +Vb9L'UU9k&HN%*%kbdAPa!1TDX44I1UCCEjcB`$6fdh[Vl5m5T%*UC!-Jhe%#0"m +PmCeSVSZkXHZ[YLkdIh%CA,N&ii#9LVTfK2b3!$H,NHYXaq'fiI8*jpEJ1Q!UNV6 +9ZQ#ehm-iUV$U4K`!p!BVQTJ!d,TA8VR$31X0dNMXZ[LrS5M*G5dLiLQH+&HbU+i +D$29V@MedCkfA,DHS1)4D&c!P8JPqX%89P'#ZaX,X[mTXDNXb[N0bIG96aFIrIQA +ILYe(YNR)DqeIVX"!m`jl!C5XkhJHDb$Vq[LK!G$l4LImAeX!(F#UX'GQSKqFAc@ +h+[NNCBQJbLdqlM6IBlEjUTj`DfH(r$m1MleP`,",`PIS5e1m"GG9ARKV,VP$5l2 +K@qC[Za1TZa&S%CJj8R@,aF5l(#d3Y&d%MNEUjLY"4G*b@AHr,0h#"-X+#2&-&)q +NqKNBhY&K3h5)ELiJQ3SR$F$62E-I[rXPb%V`FPGFQb)bRD!3KM$MIN6e!PjLViR +5SGhZS)iY4F`M8"-rqB&ZZc65ANrVmYTqYCdZTqLbJ8b6Tf&+6BD%5R*4B@m)X00 +M3TBP)$(Bb)MERq95ISXYehD'N4H)r+&'*ZZB@--Qr`#c[HeMZ35dC&pc(m,hBf! +#j',3Vi13!0`5$cr4fQibHC%jAH22&V!TK#!#-TA@bXS%UI%`5`VL$#U$LKRF,h# +@8Xp!I&kqrH`(6%ldAY(FP1(QEb@ST+ecfK"HQ8M!8JT4j8ZPk,MYk3!j49--DF' +JplIPCBhKi#0G&fl&I,aL`EX&+FrGMelbf,1Yp-(5hr@PM3lbJ8+XXIiJ$`[@X8r +!G6JbAQ,`ICj2hC'$`c9mS1!K1D+i43Pq6bC84FP--DKQBGQ0H&6(ai"G$"m`D2& +@QS11lTH1[eGZpA6GiC!!'e6rQkEJ-(hQAl1UhG'B+8e,GV!JCTm!Aa'h'rq691q +T[5,'VS)E$E&DSii"Aq[(JC+41`l[MSKpS"Ze82V$3I!p1e1`mFYApjdpS8AKNY9 +F'JiCeCGA1%JdMC-6V0`dl(D"'*DkC9@lRc3LCUiFDfIe[&jffENIrPNJp0&PGd- +iV,kGfd*a!XMN88H!+NJ2J'BSY8i5A'Kd*0ZJ#3l'N@"leN`5&TN[q%qNY$JA-N# +AIN8(I)BAQ6[lMKYUk$`)c("$1Ve%lZ*QipMMGSB265q"H$'R2&BP!p,i&[Rkd1R +#F"YN!5'5bDBK#bc-3*%5*a5eXV2ilIp&G@NME2iVaJUkQpPbPNC[ih+2iZR-hGr +UTM!(9mK`@F-ehK@`YE)S2ZdL)CIqQGj`(0NCb%EHRAa+6'm)qaY@B%$C2C8&SBE +V9*-[Nmm%VJ(KqYH#E#NFZ4I$peTppCh&EkCh@r0FF(GmRXEbliN(hM5H5jGN0h+ +$`Z[JmmN0#-[65'H#YCh'08i[)hJ4pYQZC8El4"15,J@`9LBBpGJ#me!UqR-VcUM +P1b#'bMEXLZ`5I+P3H&((ME*SV&EpXlG,#Ml&NY+DX-Q5cepSCLFjH*+4JqVIh8G +IE-IFA`$j"'2fPkQpM[1`2B@MJi!UpmI#UI2,*3DL%XbkLl,rPPc1r30YrBpPCBP +8A(PUA-6HGJ1e[#$+U"J$@R$cjdNCaj*qZd5eJrS5TP`13G#NM"q-92'XbqUjTD" +c`NS4L"qlU#BGBBjKm@Q%'9*)qp`qjE9iaV!lqUBSYV*X(SHiaMjAXhRUjSC!V6S +CY+p4rrD[KTUR[##'qX1'%XF-)XUeXb`N)))+MBiV-X%RjSJAi0)#)3ECp+)+Af, +ibYH0V`3*RjYLX[h0Ij+Ui$A0)a!SI0@qZ+++eeRMDp4f-%*,PP9@L)`F!p2`D,* +!8$`QdA*UDS`K5RS9SZTK4E(TXZpJ,Ii0'd52c-B"M2KN1Re)8J2CI5Q&D-!C6[L +Fl1pmr"!GY*fSiFhB6RV0AU(!4dNT+FBl06relkcBB*SY*MKD`AqIaa4lkCmUdkH +ETQ8b,CCb4NL$e)01cdZ0*BBH')c$19!j#8pe9JaKiq-0l83#DhMGq",p%#RVMC4 +A#PURdiF#V6MB$KCARI*RNb!+-ZKSUR)002SQJl$'E%mR`[2#fmIi+%ZYlYVc4,U +j+H-Ai#cDGl(RNIbd@VQL"4EYMDKecSKp#,T'm52qLQp%LU$390@G(%j")(@D$ml +rZh@9mI,0f,05f,m,6,QUhZ8j'V0-1Sf2q5NH(jE431j"#-c55A+EQI&[qUp&M1J +8)9h[ibR$qN*VbFhKpE+e!m8p%9V@bFD3!(,jB"i8-D-kQeU-Er,dL6[QrU6$Gjk +fTJhfPf$@`A!dh5Vr82'E'I1"'4QNK"[5CQQ,eGC3qaG0j#Xfek1Blj!!6$R+d(k +'VL+$L81l@'(l&GD2KNQ@8l$DN5+!p0dP!f[4Y)GQ6Sc#j$%!0TrJi-Y!ERqLEIb +JPA`PK3efSG0(B5YKN!#b2r)RB-)2(Y[El86GhJkDLGL3!*%rI3BE+ZR)l6K$&#i +T59jQpkUVkGS21H4D)BfS"Vp0pE+5jf5GXYhU2UPE1FVjB-+Pk#SR,P[RLIr+hL* +ILM&HVLhmJ44d2l81iira2iX+U1BII3jIlZ3`@[+#6E*N$YA(0Uh"pTN&!rJ%1B[ +&9pY@!XRr(S!X6S43K(UJ[)krB,K)%MPJh,eX4a"q)Ie@P`(Q#cL)28N)KKNaDRX +U#E*2KVKr*DbFbDK(V`RNN!$VlE(!Mmp00!5qRhb-J&rSqE6QJ@af!05rDk3K-,d +Jq%cYmkHmL)6rSSr18AUVUXH2N!#dpjBTa[HK0B`)mA,j4a918FI&j0e$e5J3"P8 +U,"G-D*UX43#T!TZm1*iPU6l-Bi%mIK5dTm@fSJ@b4DFSNeT5[k"db0,3N!"X'$9 +5!9*-Aa8&1E34)R[mB'CcZc!(h1,3-X,-H`(hNKd5@La1%rD,!(Xmp*+[$edRq3Q +3!&a56G@-5M("50AYffArLUhNBrmV,RBd+f$)qFq-%FB&K"kMGmJ5-8SM"JBrq3' +rm&Ael$QA0ERp5,6H@Q5R0R1cDP0e41EcpGI6FHKK'pe6fqk()$SmR,pb+S0%c#P +"*1(Mh#!,,!iq&UL3!-@-lL2C6828CHpZdc+mIc!Gd@AR$%Z6CKG5G6K3*KDG0S# +2VPk5-1eid"9ihI%f"1aj%0+)b6F*TecbM%BIVmE0&6A-ZpkB[`'j&XQqmi!["-b +#9FY)mGa$IDi@Yl%[lZV1-Qj)#iKM0Q)"+L1`49GD&Y+ZPEpG4Ia$E#ZAXbaG"1N +P6k$FjXmi(D`ZVXeK-iV3*))aHCkqb3M'1-"VVN-2d$@l"AKq@r8-4LD,V-acYfm +l2L3VTFj-QR!ID(EVfG&Nbe3KaN+8UXk$)f6I#Cf!TjfS$GH!6mrl+Z9HKq5R+$@ +l9-P#aMjITd5Rp0a!d$+bC[CAJ#Sb%6E!MSa0eFh%4A1R4b&'jI$GZSNb5`MI&IE +aqkqU`MK`G&USj0(X)f6fc2NU'`GKCbqhM@e[MA`&GA-j9m"A)VrJ"Y(I(N24Mpm +9-R2#dIjPdpb0+5jc2RPI`U8HD3('QZ,eQ#c%#P52#0#QZAEj`1jJX3AP!"r[dSA +&PYH*-DI8SQ)rr+A29G[PaCi3PF8lXHPdhmQMHXiZja,*cZq(ZJ&Xj!53!'i4HAM +(NB5RA-JlD2Rc4[&GR-5k1f&LNX#iVr"Ib0)I9kPX*@fr+-MQRXc#9lkiKH+#[5L +rCJcX"f#Tm4*I3[eVDNB-!V33VP,C'5DUhIU`-4I#GH-*YPJ,j+9AbX[+lV%L5Hk +p'9G4L@ET$U6C9&'[GG&6f+QD(hiCiUdKc4VTG#Q15j%I*kR@AH,2Uh`9idlG&`8 +V6bXCJ,FiTp4G2%0E,*fQY9pRkH9B)4f4#XKRD0*PA)M43T3-X&fePXBIacP6jM" +,-4*4D'HA*Lbj-U#3!"HA451mEf32h93aX@J+Y*&P03db1K246Rl6bZ`piX'`k8A +*La&GPDc#LL-Bi[X*faA!4+ZfrGT43Ge(m@#he-P3VMjZ`dF6S#"$piP#3IEX@G$ ++'3$a$eeKef[6XL#F()PN6A2cYNSK6N$eI4'('),)HJX!"8b@)MBIXAfD9MJmp#[ +EB%B(3ffpM3i1PFQ&5Z%%D+)cmd'UpKa@qIUpj[-ap9Ymbi*885%D534-hq68LZ4 +jI'(mjiCUa8QlkLASUXpmMMRq9fJc)fkV+#5Di"JDIrGEq*THTVA#pJ2mE)P+4iC +L3C&kHZ0TGedD[AJE&rV[CKB2Xe5SYl"5N!"#$JC)lGYeZfXF0T&$fIJm2d+(UN% +%!c+U&PLT$keE3"ke"ZiMRkJmba3"pq@[lPJdrd#[f0fDV*eiRA8i8@Z!3c+5$"j +`2Z$6e%KVMb"jNd5UTLAXBHS2`[1T&2`S@ZMd-11ccG51jM`[!TAU3!32Mi8e)1` +*5K+E)kD(9V9lh*DXk(LTKePM5h#M9GeD6$'-@K%Z)pI8EI!E-@Yr53URmZ*RB1# ++(UUfV'%f00Ga)SLi5M#XG#PHaiF%DjBbbDR",'G'S[-fHGPLQR!(JU`k#qBNLle +rbmacTJS-!D-pcL"N8Y6)d**KA$"@DP6p$@CfceDq'2F1#aH*`(@+UpI0Cr$44`! +JXj+jFTAlP-HG9FjJI'K0Dq(SHp0e*,5+IQK[,R--'d[MXN`HSGY"rmr,HaZSN9a +`2lP4La94Pdhh9U$#KR2#&(qTD[6f*NKC(V'X+CqPcM"&k1*KXMjGhlkap[kd,C9 +,LArDI-Bh0$@3!0(M#%+B+IF0mla-0'0G,,I0%q",BXdh`b$XN39PMYlG)(Ze@fa +p@LLV([aDE')b9ca45JlG-$Cl`N#B(D6ccb`!)I,`MXT)4X5$V50bDI!LJ-4MNiL +"lR[%-5[JlJp0293$qH&9LEaAbT@IeGE8,4XmUMQ"l#[#*R6e[(B#8YX9R30E,9e +4K0UC-3e%EpaaqCQP)XbK$4CXIfBMi9N29SaGfU1d9dM`3lii+e8hNbPN30T6E%" +J#j+j&VJT(ckKf6m)L`4Rk&RB-aCY5hAADNR*2!-)QKYlZq-bBh'2EAr-kZR6(l8 +b+QCPUKlN6i`5A`$Cpqb4'D[K81`rk8!p8U&I2Nc+e6F2JHZI)afK8hiU8mcV"LK +!D4&)jT)Ql-C2qqS-M)&1&VTUci+HeCJ,qBpVk[3P`mF3NP`rmbZiU+U03D5B"6j +h19&Xi"8M,Ja2cITH0R@E0)UmPcI"E&p80AkrXqZQch8``cTCQN*PTHd1K6KP8cS +e6NZ2JAf)[fplTF-4k8D%M-k6k"0jK)PiEheU(mU&$%3kU+3bm&PaDrLDc6TNC&$ +M3d2@lLX36F!SqbTNU22QXFl&!le0I6ddfZ8C%80"C"B2hGTp4d0-DqlcX+(*kSV +@a65%BF`*b!p!UQpS-5QHShR&K"S,+82-!$6HD!@V%@C9k@c5dI"jV0-Z$T*YNDA +[brPV8q,%IlKX5'k$A$6`l'$,5b(8MCUFE@fMeE$U)h55@X-)R@fXmeXT`2Rh-bp +(PK59em)K%FKpp`!faJ[H3QAiie`adUj[R0MS#"kf*9G#Ulhcc0ahkef-CSFAjkl ++iZ3m`e4a*SHr`UipJ[#"-f5p)3kYZQ1qeGKfT0VH'C(Dr1aT#861KUa+'TaaRKF +j16ZjF$6d1S`"fqNPP@pqB9")5qIqdAQU,d9V[TFHMRPq,KbHiG',SDqS%FUE9LX +clqR1)%S#1SGjP%hBLk9MK!5C[CbbP!`KPHD0HbXAq-Ye'(Y(LV`-fJi+ecjf%lf +IkN!J,@cYV6a-D-el12rQhieX`S*[mY6UeIr16LKe@&M(f#1Ca1M$33Fr5[FeJP@ +T$CNce0pH[J1BlBXQ*-AEDF8E6N,G6rYb)QdNA!L6&cL0(F`l[(l0eqK@M5%q$-6 +Bl3kUYMlmaZ0cdFU-HSl0Dh`*-9B-SkIMJ(cm,1LEpC+5DbL+6eq20,V)l+iK@Q9 +*2T!!II'([&+D$CmUC@3LbH`R6!IGh*MIJC0CDC!!!9*6db[NPSH9VZJfSNT9UME +p""#b1Zrk3kTTX%PY!+prJRp3b0T!k`BUbP,H)!Ji(Rq&T5DfYZY4*iBKR*T8[!G +4ci4Uk*pM'E6'Db23EC-&##Ufc`1m(SNF30U+S3l3kPrHZ(6fiEkF)Vi!CcS4TQZ +Ym4-255@RlA9R`"EFA&DadLX,-5'$Daq9abd'8m1jYDL*kh&IM'dr[LJB2dqra`- +VJdD)[`$mGHSYGFr"h-pQ%UUSX'E[P0ClS1IHR+0mVZrqqRpm53BlKe9H3`IC`UU +T%LfHARf"S5@#ZUH1qAhK!FrpVV)CIH'[62eSULXi5)AIpr`KN!!`fYVTH,4ZCbc +[06T[$aUk$*4$H3FE#H$qU%ckVH4bI5%JAq"C!B%$ZRP,hM-'ERfC6&,pKa*iT5a +J[@mD,d"Z@dJ*dH*@NPV@kYNqZq80NIVE`2(i%hrP#(QGaA!68jM4j-HJ#G[pR!6 +XD(JZ)F0CHbf`Dd0#l99Ij3K5S6qY%HH0h2[)I*!!CHR`e%TRGarZ+B4R[hQ#GYN +Le!Ac)N8C8ZJ-&#(#e,(iLBS*-He!F1FLFC%(Xqa&&V9SV@!-jp"3N6L"%A@"$mm +hBBrr-X@%KT+5PVA5)P4-5A#Ck@S&i)'H"M@`f,EJJ52R-'d$D0b3!2@$B#lbm6q +P[,9GrIVEiLERQL5Va8i,b'M@Geh%LrFEPkpGV@TJ%0VMLc%p)L"`6MbHU%['Mb! +'k#0d[j+%JYS(Sb+)hhip!$*6-qqNi*P6TAbkX6ehklHlBKEk6dpmfHiBPYe2bIq +RMe*Gb-K5if)HLFN2kqX(r*P[aSrQ$[c`[pP#"Qr9%E0VX,HPlVj,GNhQYpU4QM( +*5ebj&`f$hIHjN!$f0SB@#JEcBFbc5+9@3iVkb-F&fkNf3jA8ITHAGi+%'em1ccR +DJ*&,AHMXkYc,3`r@95Z(0PVl8ArCSVQTBAl'1lZC64U$R,CkpTDRG,d*0H-6#99 +jHlb9,M#d5,E'+P4h8!beM8q$N!#-6Q`&hI4pDebB2jR9Yi2Y6&1#mU'AE5q'6EC +&F++[DZ[DT,&'5p3DQP0hZ'["H`diHB,205iZc$5BiQ4UXPRZK$lM2UK-*eG+*3- +83(A,+iR&KK`CDYK53RT2b!,@bpD,JECC%3kk$p)V(b+hYjkSS6-r%r!@#ETTJar +C`[-[mVZGbL4m2(hHhGSk1"8bD[dE1FR41)Fd3L#l'qJ2SU$K&eIaX"64&F0E0$D +q1f8)5YkdUL)8&imBh0@ZL"QDdFM'Mb,`,M$c9ND!Elf[ES(ITNS38@CY+5-Um&f +RN6#004h-#qpk@6Zrq3$pKZ*2BAZdDG3[Xqc1fh$DM)mTTalb+T6faT%cPA0q#9+ +T"4S8Q4r164EN8)ViG4b)3bbqjBCjl@c+[hS"DHPZfVC4-b-'cQcD5L6$(mr""*4 +"bV)'Z3&4qCQ#5$hpaGR5i3cUCfE%kVJI3Y[H4Y)BGb'28BPbG*1kErpiLI*VG%k +V`K4lQ2F*Rk#V8ei$3Z3rpeGQ[XYl#00lVUB`%rShh83)28,3b6M'B'Vr3cJIC#! +DIU+da[T"QjY2@pU1*3McN9pmd5V5r!XUC`99DrRj(&MpG&q9`0TSGNE5('LA+6' +GXEZ`,BrE-+KaZ3k+YG,p`lR5Hq-XEJ&V-N`"m2A5E@iGmidSI5*8NMl`rYK4jSR +SPS4Z$c`[8hTRc'a"h"RSZpUcM65L6aV'0[#QP#B!%1[E1`1qcT8K!$8+1UhiE0$ +m'aK[jl)`N!"Pab`lkZikhA2@ll&a(%@R%8rGUecmX3h[B-qK"dCT[R%G&SkiQSY +mC$2552cic'rXq8i40PBi$XT2R*S3+%`$c*!!,i-q#D)dL#a[RF"AK6r*Dk9,Q[i +lYjYebS!)fUVqBS6LMIhUE[pj`8dGkURYXP+l@idIb[hEJ!lcmKDpRQVbJNk,Y)h +&)f"iU-!Z!93qZ#2-@Y5H9G6T%bEk+r!p#bLAEP&3+5mi4KX-V,*D0&8GN!$+KU1 +!M(DdjL5jk%3r[afj)LAerEKFh4plpdT9G43iF'HQ*d!K4RmlEJ"Eq*8IcZh!r!r +$V-#p$$`2cNa&Hka(4)d4+!+C@FpkpN#'[04k9-pp'MeCcYEF"lENU&[iYpXq6!C +UTfMre,G6`QcT)BXPPB+0Ekca4(AU34"1lACDEA"L(kDX'Hre9UTP"PMQ"+%Pa@m +(q'JrH2$IlqZZcJ`ZZDUSQk&fV$k9I0Y!V'UjI&*h-5qij[-8BmA0V05hiaP-jZ% +ZllrG!%e942[rU06d"[PlC9-RbT28,kQ8*YH)G03AbkeBAY,(-V#$'D'pedMBhm` +Y)&MGDV!MED`G,QXUZ)(D*IRcU#1HZZaY+8"0+DGbDe6hXKS+rkIQYRl3*,cF$GM +-mh(4M2L3!%5,m8d3d+U@SR(Y*I#E0@IifU(3q@8hhrmKGLeUVr(9(JZ['M&ZKP@ +4p$4A[Q%$3"3PZ5cLNV9-U[d6cUp)3[bVDPeDHaQi`B%T2RSpA3,S(11[3)c"93h +G5e2$)*2Zm2Q!caj2LFK[i&J0)K&qZqq)qJE[06dcb0)!#AYZ1ZS*13HRKhaKiL& +MDlip(I0'r#&[X5lAk'"(F%DASJ2,PBSGXK#RXY0jqSBd6r3,b`HC@#'[!meUF4i +H,dSLR4j!4q[V%N0[PHSe+GQPGSMa+"EV8EQ&qV9B4DUmfbKY@S6AbU[9pc3bQrN +*[rqH0NIU"MTjJ4,1'[a$Ul[,*Jr5MA%'$(kidL!eBHZ5ZVN+DL5Nf8D-TmlX(3Z +4eJV2Vff3!&b,RKMV3A5pTJc-T`Ei3)KHNfSL89Z9"VZfZ$"H$#e!(CT9hf#@B"1 +rT*!!4aHTVhGRR(hY1rUj(V(6J'rfY-#XBL4HIpkhUdak@,V0Q#Aaf2'+cke$AS+ +8'Y$IFqXfHTI8ACPPf#d)5J@lq!TPUL"5NJ"(J4r"`Pc13ba$dbf8KI-2)UlLI-B +Pd9qNfkXhqA@Q2b!D8b,Jb!D1Tq[ppGQFj3C'PNFjQYNfSKP2RZ-6k#lKlHq8MIm +"A`!9"BYAr8"YS6JH)D02ENN93+mq694G"1kK1hT"(Qbq(!J-QXkVpFN@V9f[P8K +ETVLecId$9majEa9+ZVUTBB-ZI%bM#cM4r0m1rY-'!F)ZG!$ZH*F'''NHmfY!D'C +K(*'He4bS#G`p+iapQm8iiel)-rbUQ4AV)5'K%$E+VfF,HdM3$bbCPP,ImKm1SG5 +m0(piE061hTYEk&&Gfj0jIc[(8rYX-c`TrmlC3Dc4f+L4"8&'L"j8%STr5mpmK+' +U-PDMV'#lf$NS1*iKYi2rFS1Cmc*jITqDZi'j"$LhBX1,$&m@T@T4DUZ&db8"92P +L+#+b&V!bdreqc!pl3F%8!Ej)fH&P1*RfYUi0iA`'1fdGNl'9Cprlhf@r5TN6)#i +1hZ6hh#[V*c)NBa)6+je*H&KPTXQRRNY$"M)#XJ5K[j+pQVLB0cKMf[R[edIfPC- +(%hr`f%B(+$8'"SN6dmf-p(cB#mal&HVq8""%XjS8emBP6r&fefa+,Q1')hR$,dl +5`,+hG5m2A[cPR3IiF-I4"EjClQ`X(mh5,0-HF2CEcaIABB[X5NZRDDcl9rZ884Y +TaKbQ4`,ZVqPXAES4"Tc&Nrf,[2q'ed,*YD&R(H*DDGh"5,2%JU#D"!-DU3f09,A +FmdlPMHfF8+Y9LjfBbDq+EMRp5Z(9*&AM!PrFQJ*h'&KlU@lhIiT5#QYYe13(hHq +r(bXBpd*3M68I3A@`Z6+(hkU8VNM"1(Ujd8-qRL!bkG'cKbkb6Ka!-"KcVChA))# +4iqG`cc%-mT*fV),JR&q+eel0Ij6I&mj%Iqr2@CD"0kXE(hA@ljhN%ERTE[IDaKA +,hF2EFcK@1@[T`JP9#$q%fBf0!j1*a$H9"H80rLNZ-bNhI1JJr&j(hPl8HKB!$VR +eIEIQB(&pr)S(RGa[&S4M@A(Qf@MXM5b"qm49**Va#3i3S(5F5L[%kZ1LbUVHlLd +&`bRBQD`%QEaEaZLEIa!T4q@GBiUCZr&@(#8@ma8U10rBk),@pKlSRIP[KM)je,D +@Um5fij@kNZXk3&9i@3!MBL8j,c50TJDQ5c!B3&PpF-K69l4Fe8mL2e9kqD-Jp-L +fMeMDH,F,XJ8c)3AA@EE(Z,pKX@P5T9N&T)AU`lZ,6DjI'Z!AlK2Pl2d&YlGk39# +@PrarV1F"jFSK$&Zc1bfRM"-ZCYcl1jKU$Di$@%Sei&I)0iHkkdA9l$afRT)[*!D +NpTla!ab4F+%$ZR2Fmk'J#i[9,kq)dTBNR#aZpHFfXK!J0j2m92&8TU@MbNh4C&M +[jTb$(fr@B&rl@k+lUqm[3YRh'e,ZVAc4emL&G!R2jBH9&TpS,@[-JkIJqNSdhme +X-69P@6a3!,G#aVGL(k-M&&a4b&*HZ'4bPJ$k6Zc&349Ph`K+CL!fA3F6NelRLU( +cpBBmjL"b+@IDGqHmj`GaLih&"4ShC&NAVVU-`N-0$['G,`90h(J9[!I9C9ik,NN +h5Kc8("UHYSkk)YD%"JU,GQP%&FNGD,0fZ3[aEqCTfrNMhMQaQJHd6(0KFrVclFa +"(**ickD&"kK,F(5ileTXCHFLBdja,[@hhI9Z@+XI"0PKT3aYMAEV*05cJY"#F8f +9@$EY39(K`c@Fkf01h3V%*L+8@`i-2N"!jflR-&@QrRRdU)Mm8q[Y`J%&T0G(iH* +kF,,LF&"BQhVlGKSkC(8VK+``lefd6dEq-h8mSCJalaQb5P"!EJJfhSC+BcLrm4L +0%f3"UE'T69FD4m%M%eHEk,1(mUj([8f-4I09F+l3')q(6$mS6IF-'q(4BY!!#'@ +Ei*mKhJh0&LQh`%L3!!9K*-Scb@&%R1m$@hV9k++*l%$(SP9S@A%i'"Md)Y@BiVI +9L28*U),*9HZ*rF5,C&*L3&E2qkN*-,8@mj!!jIL5%2*0A*&MkbpB8a$DC8bZ)YH +-N9YE,d69H,)R@3I(Z,JAmNNPj3`&S5bA2I0aadk*V#qS&Pq6ep3YNRUU*MdDXpj +-i,+mpe@H!H$&Rar#)dHcr*bk1FfPKV)r0Kp-X0IS$L!N%T4dQA6Qr6(QN!!X,j4 +((EM*f*!!&ZM$ZUp3hS*2,mLMEVpffX[iRFU4,Pr%8MHb[J*Bkh4"M`9p([HQUZS +i,I8&DMc8MaID83@Y&,c'J6Iirm$h8RRXJVETi[Ar#a5e!2KHQPQ`p(#bjX5Y412 +E"GCj!-38B`$I"4IU`Rc804LSerVUKZ8qJHVJl816H9N2`,M`U"S3H0YKc#pdIT2 +*TIp@FkN65*b$YlLV``XZe)eV&,EDp1$q`V21Amm6"ITpmBN@kZX-RGTIZHj3`b( +HpKlC%fK*EcPl)F5eq+S!'XB+LYEm%md5MUM8-T*[02,ZIh2MmKBL@#jP'K8[SRL +*(GbNmmPB@Qq,AZ4Z"CJQGAe11j8ZKc`2JHSSq14S@$cY)p!5ZBf5+RZCr[J@@Xe +IEerLeSY!EE1""BL#Gi5a%+Rf-q,cB+IZ1k-eYQ!cG!(B,p`@@VL(9eMMHFJ$1QI +91$N#Q-NS4Q''X&ViTU[C@I)[q12mHX3CD%,a,p5p1KY0JMZqMCpRY+AjQrM$-!c +liZ644@2Y0`bH6MSa[X0RE450fBYm%eR[6RRNIVZbZ1L2d&A5(K#bJSiiQ(#h2%a +39G*jUPSe"QDCm+G2YcUh#h3#Tb(cDZ0PPi(C*C*`6@9+VdKpRCpI*'Y4PC%RJ%r +*mIL)$q&RBVp6fGSINN3i$"*1!$'0f*Q+jI4Q8,`41Il&TM")6A"'&ZFM4Ahi"V0 +Nc9PUVXPQF`H"kL$A%EhkAf)T,!$H@*B3B-EmdTa42k3bHXDN31Mqj68"3'hKBdm +"JJXUX9p'0(fkNNcVP6i9&#dIFfDTZZ&a9qc3[DhA"ai9J9'CiSTaNe,E@$i'Tl' +c1[HJpeV`0CZ!pLG@$Hj,&0pkfmP1*D(!%A`cIa,$35r)'kD)AhlhY(CMNq&Kl[6 +H(El9%EeArQ-(b4&-Y'Qm+acNbKlEflN&YMU$3M"&d1e32mSf&k8p5LD&PQ-DK'@ +F&@Hk@Mc!lU0+hBZF!@9Ci!B4P*3d+$VlDY9hp0X"KUb1p`m(%@)1R@'@)2!MTr+ +fDJ#X0X4TNLYD(lUVPAGkY*Q`[TbG#%1GI&+dD6Th&jbd#cZ,mC6QEqcV#1!QVKY +)[kpVMhrXZ%FAKJ&0pJ6NmS#+C5jp,aSaQIP$S,3S1mURIX`bQ%e(ai52*T0JL6- +NKkpcA*!!e(C)b*DJ`"MBq-'"jNS-Zj!![hX&T%8q,'(hE8#'Pj&YemDjEJiNHRK +!"%KiIDT,K22!c[%P[PkMjR["+iJq@K8SY4bLhA9j!$2(mBZFZVRISHIKGbdR6r9 +F50[Lr*LXH$R'VP#d(K!+"ZfFdVPQ#`)KE8V3Sk$j9LbrZkIkI!("qU'CGHUC8Yl +GbY*DCB30k#6rcmX!fQiikI1KiYBc[h-`q22dG#LCLTTr6@TeGheG2elT)BcXB`% +LYcCQ#[aE5!%(GA9i*48r2F[-&F2q#`S603Tfc*P9$A3,055XC2c"$@rQ!Ii`NX1 +QlC%)eX%PSTCr,TNY`6CGK$*CC'`e1&GM2aL$Cc*dT'H2AVT(mmfR&pMH4"-8h+H +F+U2EV-)8LM!cbqrDDaek'*pr%PA@AS+3!(CTf"SEeU$l&%DYZ`Dcp*AJMUG!IiE +fh@[0lA!8VYDNRXq4EYl2U8-r1P686i-1VCi`%8f+QNI%8b+rP+e22i@2X!+#k*m +V43Lal4mfR9-0,LkE)B"C+3HCDfhh3B(2ZX9mf9C),BQk%'&9CF0j2`*LLXGbMHN +$YqiBN!$!lKfQU8XGUA&a5%mX5"6J$'c,KXYMb@mkK03''LkV$8J$f0SAiAT5@bP +kIB0)CD,HNCR[G4B062VdXIhP0#Zpj#ABe4M0["V'GHlN%5YM-D%j3EalF1JMC-c +`+HhEjqh-HBBdjp(r3`MRS#6*Cp51$kCNm-3bMA'qS%U$VA`pU,Virkm2U,+h*,X +BZ98@*bG*8Jid"A+@-CF#k03fGG1i!V!VU01DCpJ2&-)0`C&`09(#Q#JCc8c0eN5 +((2,P9+!c+'45U'6@rCdH`*GK29HllapmqVJeC4$Q-mTCdi)0ETc&2qHM,b5d'cq +[HAbfcRqNN3a@#UFi8$c0bR-fI`ehR6H+dfXE1-B)l-9Cp8lUcDd*%Q`Ud2qII(d +-#-m$b+K!LG4#b@0#R*FL!",raI@6Drq&Fbh(!1Z-E8khqC!!-4a#3P`ZTIii5i( +1Tm0Br1I[0KYJYV0`0E@+54b6F#GQmMRFqY41@h2)!Y6GfNfG3Jm*(X4&#F+K6h0 +4TZMGcS'Ea5LdV+B[&UI9Q@iEYV16h#J55FLdK"Uaqaq--YYd3cTF5B!%NRFp5Z% +*#`I!Q#DLUJ5(&QU#"+j+('E(jPlP8R4`j6Z%XTdPi"#J6K[lI1DfkZ9R40LbX2K +66DaBi,T53V&&-KIc%5BPcr`rSJ!B)a'R2['R"F2j2TRp0haK(M3R1BUp"SGIjHY +)U$cZTflJbAJLE-9f01Fi'apAaGrNV0#HD*QhViL1B(f(lC@M5e1L`(kcbRD2rNC +TGZHNS[j'PQ[QilIaEVi5B!AM@l63CKaSAhQ2D+GBILE9TH,1D3N`EEcP%!8cd@* +0h5Q(Zk$#U6bR0Mm![L[%hf08a)aVrIbICA)ikP5Pk&eCm,Q*``UdR)U"8$)%1R& +a%&(iJ"Pj2jRd#j&64(K5JNSaDaYN6MK"X3M@N4G5i'Hhbp+L3#kZ4rTI%$)TFTQ +6PbUZ4@!RN8HT0cd6"hmNc6&3rpZP%3#IH(U3!"RLjHKfB+Bihf9)b,U``jd13ZU +9%B*rF6CcjV#pNJlN[A'EMGaad[5mIKM0f,YbJFcL(DeH(EUR!DFZc-'UQmF`4&K +D,8YB*43e%j!!1X$A,E(#Hlaqk+DK1l`2QHCKQQI3'bSeL8lqVIPC2q3"Q#`f,1d +[NQ5TUjEZ"I@PY,"12QS@@rLDP3@K'9FD$`SlfpX90-Tj4)'ij*R)Mja!H'MAeqC +i9p[DK&`5hqb-Ti#!UD1$Ph6R,JTKU"K,kH'bj$'p4l#+U"1iPcG$hm)ZIbhb`Hk +P2IUp`3*N4[(4M)5TH[c9jc&X+UXAaD+C#jMBD*DY0dq48A8@c,8cYDc#B$966T- +)4ErJbP$D`AKjA6E0`cJUaeFCc$5i,aJ&0#!&I663U*4'Y4RJV8HZpea-EGK%0-I +9#Ye6434CpFpE#9hS&(*!"PXaQrSqDMZ*-m8lDYRQBRQ6"MZ6CD#C%$Y""#HfS[2 +Cqj8DJ4l*)IT!DRp`'Jk+"LaZ1L*6f"Yd5R4e#1+PfhG6'[e9"NY(K@Gkpm[(+$r +jI@Y&["1M0F'HN!!PV2C%(@U@1pfTN!!GD3JIFrialkpGRI$KfZ9(8TjZ[9cI49) +KeRUMjLJ`$V6+bY+)A$S14b08mlDHHA+p%&QZ!Urm"G[5*N&RNHY8Y8p@q[4i*5T +X"H!NLAj#E@i'D5FqUDAlJjAjM+NQ-md$Gm6&8MC!qFCK!pDQUer,BlS`i9Da-Qh +M5em+Xiim9[EUadKXlG,H*-aSY109a8H#XD6eakc[lSmeKXKf&#*V,RY$!'eT*FM +Xh*Ab1q#eJGq4p8EhY#!!TC!%!3!!2!!!Y+(%UEEa5r%!!$k3!!!!YlF!N!21!!c +TR!!%(IF!!$+)!*!%$`"8Bfa6D'9XE(-Zci!!!%#b68e3FN0A588"!2q3"!#3#S" +`!*!'3X(9%JSR5P-XqP+QSIBSScBKNV"2X`if)YU*R#6B"KBZ5`haYSZiDZTXIEN +Kcpm!'#[L8%JERXN4rX9R4'V[84K`G0,4jZP9rCklGh4"N!$Adl5Lm!U84KLR9cZ +CcL-9ASZhCfh%P8C'BrjAVi,Yf1F9Fe(4#%,QMX$%AC+*cI"Sh$IcJ*a[2F#q*&0 +Gq"61M`!C9S*9lk@h3I`l6pc$#0`iNJ`4jAHC+fj'4D28UkZ6bEKPf**LQU!DX%5 +GV"XJ-PNK9pL@`pNp4@#(CR!AD,&rL,iMi98HSXXbjG8+JH[if``)UX&TH$fNXQQ +hDKH96,Uca+pZbcc&(j2(NBADq6qMHF&paUr"&9p+[#ZUkkX$N!#YX1Cl5NSL&KA +ea[`ikU5@UBCYqarfGAB@5MMX+6m+efTp@2$MRcA[lF82-RmGd'J1Y$j'Yr+*VJS +fMje55Nl@j6b3!',(L%["*[)fYrpH*meqIqY'rA3fH%eHPN$&p&SmB%*eTiUQ3r1 +Uea@ChjQK-clDXf1NAQ@PH-8-Np*Q$8T1YQfSJVYiI#bc66-QT!mEeM@PVM--Vmh +G-hI4NEd`QIbU5+$$b$N42J*DJUF[b*CZ8mTIp43Sp`#D[YXkRhPkKERm9HKBeF` +G$ED#4XAe+ITVrV"1Q`imjp*ML[LD-kELTF)S9[!IJ,4ldaqR8rM##cN%&4'GekG +BAl,a9`2&1Tjf)I-$E*D(8T3qpq53!)PiLfLiRpQmkE4HU#AYai@Kp6k[!cK#hS( +UcFH(N!#[`G)5*BViUi&YrBkb'@r#QNqTpD&e6@aSmNZSPV5+hUYRp2VfDe[hSKF +qLYS1$"q9jTXHb9+m%X)R@jD0iSQdiN"MfbcY0blJM!jVcYBlLqYYqrck%['$jh" +[$G&4A-jp#LGrPiY8Z1G,4E4JBeT-2Di2')CIj5qGmi)"Saj(YY*FGYTCZD23Bkd +%kHYAJ%`84)&5(&8iF(VUI-m3&ie&pAH)83Zc-3E,cB+&BDhqHh'SSj8'Ah)R*X* +QeT&hFC-"p-%r"61S`e4--K22rArH`DK1&CiY&HT4(3)cGX)X5[fFNjQrMr3dB)G +54e!qlaLN9a`'(UN(%hiki6$9'G@%M@,J&@rQ9Ud,U!a2YlhT*qMmc!BiBkR)D'H +lERk&8YI2pY00akeJadY"l3R!3QI,Fd+*&eNS6hDd+[HpmXdTQqd4B0hf)`'CFre +3D5'U3UZQR#C@"m@[@%PA*+&&$kibrZPjTmrSLZ(Cbp*cCcLS0Jf1("2Iekr"dGl +&F@q'KA*j'A-YMha8!-Uf&Tp3&1[EU+60Q3Re1EfhCfPNj,bTY%MkCG"pI8mrM'5 +U2NSF8RQ$DLSr-K-$9A'3!)T3J+pm`dTE"+'Mc(YGBAVXU$XJVDk8q2iVlJk906S +2!pLb-4#+l#P4GDGG"Aa0jTA&J$aC641ZfpMpkVffT5"DPXkMR8H'R44iPKbKbq! +UMeCTINBJZ[m(9h3YV5F)EI,S)m0(G`SPKcm'44l)lAR4&1$4Cmc*1RGSNT9Nk%6 +4@33eh@%M)P9DCRMJTp@*J4$"2N)JD4a4DcmXa"k2ZYa-XjIPU[%[m5J*GC5k`f[ +ErK2D,ZfiGIQp!'`h4a5pI9kk-!'%!X%TVD[@HM*(9mYPaAQRmN$fTZN-#hkE1&L +pdcbd"K3cf'`+8ZFTeHN+ZFH*RlrEY&I5@&*KDY9,iNRXZ44Q&fCS&G3IkPILR'Q +d2'epZSZ3!1Je,`,2PY#41Y1TKK5b6%@,2rj03NI5ECX&I(Rraki18)P22TB3$S5 +9Z4$!DMrJ#khcMak5UhpDXCq+0`ZX'`N"MmGiI+DTRUM@P%TmNke#JjQ0mXM"#Z& +%ZS66G"i19Ym8SJlcV1LabkiD%ak5-UI!M5+@#D`,i##Lp[jdk+AR820BYIUTkqD +Y34G2ea@K$S@)eb+Z%VCJL%F4*f48B-(04i[#iHL,r!f![Ue9LDcQ89+XH+`8*iR +&,J(69ZL0R0C9*3Vd5PJAYe`,hXj9"m4DC0e`Pceqb-+YfTUqR3%br1e&Z9dF@j& +jS*2imlI5i-KmM$%QPiL*+J51"UZ$HQKfclK[X*k!'fY2C-fGYVZD[i`qk1f!JLq +j#(RV+3iRS8q`bmHi&`jUFcLCi[I0`F-)%iPl6'pEaqKdP5$4,2klj6,"kMBR,#B +cA3YqM+fi3[,aI62rQacAQAF-R0qrH!2,@$ZhS%k)&![5JX$6JB[B2,C+f(H*hC9 +T4,H5qFmbA6JKF5rV2&`X$G3i(ECK*QR03Cc015B9+Nk6dqbpKiX!M(9HQV#Dm2E ++fddQF6&5mCEI6(fUDJ#l"rYr$IEHal*br@[XX[S`Re!VT2`R[9Jp2M!`F8i+0G9 +F1KDBCeMV@mN-jYXVD)2`5TH8bF-lLqIZfSRi)cAf-*VIH%[@!GLS6Z2dpj9V+Tr ++e-d5AQBeXCP$4+6A((kTkJ&9#`K$cd5Xpk0d@m@cYekFr#P4JTJ4!#Ih9E)L"6b +$8jXXcT`"+Y3FG2ThEV`EDq[PCKLL-lkU[a0ae,aE6$lYi+Ne5mBJ3clJa2i['G2 +k9QF91+D#4V55H6lCYZPc##A0j[*#UpRL`QaDCTj"kT@l"1+a'TBEqjBjV-Iq($p +4,lrmk01QD4+!''8GXdTj3Shqf3J@LAFdb(`CH@qM-TJf6qXGfKpVmIYhK$$mad* +CHVV!1+#"9U[L[TV4FKp*9+Z%KePeC`YTeNj`QQIP2c#"$GARmmk[&#ap,QPfUCq +[MVF$32[EUaZ1K%K"pFliIB1TV@i+dbT,0P!KHAI3(*Q94K8[pKSQrr(dmRKK@XV +TbTjY4IS%'`5MJ&XjYVJRi5S4F-R3)IAUZflXGJ8pj0"ZR'HJ'H%21[i)QJY!'eK +c4["!Ze%648#BFf@jI2H+2MrbZD*9N@'2lM"[0PBCpl[UB2P%Q+&E)Q3638eYq2- +QRC`Q#&E-(lDEE%'IeaZmNZ5!kFd-65V)ahHkA5#mkYM&!5'e,Bp@U)2afM@f5a# +j9HAc0pqNjFN4+eU@m"Y$*&dIY8r+ZQI)N!!A(2)BNl&XGq2*LmUR,4qVQIq(5IM +Cr4+L+S$k61!k'C10i1RiTVG")Q[FSP+0NPAEZFXr6f(F*3QiJXi95MeBhl9B!A* +AId-B(e`3#j(DY0pA[1m(ZAdfNrDl*VP5Q8,&`)qJT)a6j+k-9[-'cq3G(Y*,DAU +[I@%a5A*2jN8CS9"JlM#TmBqXGl3H!h,*5R4$I2fKUZS@qXFa$6*NYi#*#9Zp&Ik +YrIMrjECfq60&NJAmEBa1&qAMPNNiILr)pVaq`XHl0ei8i6#Bc,3$S01E,"d,Gp* +$Jma1($6#ZDh'hlaT[0T5p'r#fqe0YNf#X`FE`)G91P9dD)jJVJERf"RDplpPF*U +qTDp"L(2ASp8*bbY00LNaV5qPJ4$UC8JiEa9FQLST"1f2QEURZ@X*!)#3!-,B`fX +eI2%GNT!!$"VMh568`&['Z40lEldl46k&r14"0elrqLPVHM,PV%@$%T0Y#''&MbF +Z`(*9aP"D!ec--EK*-q!EDlc&@MP%qUAJ,AEF&-cP4JFKkdr$AN5$5E4C,r'MKJX +&rA0Ec@6lDQ,+#)$f920"mchhT@VG,kmX)P5BHcPlp`IY)M@EM3#kBc$$%ENjhGQ +ALV%MM4S[BNYKSbIVlC4`l%ei'+&l9,&5)keM@94plF[HZ82EQTMTF)'Ic"#FA$( +UK$P@XE5G3dK$k@-fA$FDKTM3&!((`jUHK6I3669[G0"MrR82Ec5j*UiDUhA*eN* +h`!j+XC16DG6f8UeV8BDbB&LH[afUG"M3G[Ul65IcBVP4H%RpVJrhPmJ[K*lBDf` +S+2kI[[N9,Fi1[l1l`#E`5@UfL)8DmSFDfi2fQJrlLcQIHSNVlDP-A)44e0P3RE$ +*)X%&`f!%R,Y*S8218@UNKqIN8-Ik*`c#3b6$ZZ4%,h@ZqLbY*INHpG3NM3aK&Jc +UAY&Bjq3m(e[hG@&eAhSp2$Tlk-NXNA"QGT!!+M%HA(*Y$8C&Lb,[cA"jjU+rTTI +CD6!Yc0EPRccDpe3+@)l1rrN2,)J32p`B$Jdp[@201Ll,m+RGY0@q3ime5Rh-4dI +4Hr9E'j!!mHX2(3!*,B'XH6BXeJDMa"f!9)#P3fIKmGY5E+D2GZ"F5@ckH3kGlc6 +i2%2&R!dHN5rcr9q(V&*R5&MHbaiacGSqDRjD3bA4Dr,AUYUmrqp)0b(8GbmNMe1 ++'kClL"j&AYKA@f6G*eHHDKRaQ4#SRZGac6!pqmlh3dKRrlYBI(9'r#XUYm[V&r" +mD5rA,I3"@9C06,1SVCIUSKPFiarmHFRe,'Xr@pQK4jXj[ahMreq$bKEPlT!![KH +FRAQPlaBRTI8['I2a[3[HUNbLLMb+)dbPTjXh36[m1V9G+)[*PREVFFV%b[YASl8 +(pqhpp[eId399a&LqTQ%R4Sk6%fq65E*fC-qYQSFPSa&B3(q"jI3#9L8'Y0Ei3ZR +qSP@XfHSj#eKhB9`NSZSBJi30*#CK1dU'@Y%%ENNa6dCkid6Q!DUpa5+f26CVH2C +pF!*mX'6qC54,Vr0[LjjFEl4bA8*085FeP8F4*GQ%M(-MI![F[kAU!mQMELQS0e" +l$[!mjLiVHfd%SpfUrMf2Ve,qRNaA`dLV%CY#"0+mfj5$BYQecPM)!@H""[XD`PM +B@RX!qe6S48GZ3SqSBCA'irdbkjMlFbUX3BRPDE+$kk(+1kkT+#2QKk"Gm+@U))A +'"dBH4rSD#![QlMS[DhdC+KP+km!X@T@$lT!!*dq#QB`ha0fVS!0)d5@K2$5V2A' +N2q+fXFeNjL+8lh%i5aCI)Z5d-NSH1SjYa*BX8TeGPFai&A-)ZrYpeA*`B6,+PRI +4B6(0[cjrZd)pLCM)QX6L9UcPra'iIjV8dSYa-0F56-SS2l)%BRd'"eka&PXAppR +V!8b0P4!C)F%(Xf(q1TfAIMV-J%LXj6ZhcI6-Hl6#4'VYM2T&4m6N9YIibj84#1! +6$q8ACi5k6Di,GdU'KlBX6$)bRm)i)FE(lJ0C00a%LYUkB1"0Q54CBrALckdE#!R +lAN$)Mrp%$S,af08i0%&K,KjLk&ZA05%Gj'-1Fl6GA8rHrm%&3ji3U&YK5CSG@UU +ah&D(*9aiK8L#al&fa!3NJm&[lR(me8@J+[RkIjLZ8*L3!+Td64Y-bVULJeTE9I3 +AP8A#A@1PL4*T$IGB&RdN+'rql!Ld*59e)+qX$X6q!Ma54G-'YT!!,VrDEI,cBC1 +c`A-mcc3iak%CJ2DqYmiQj1pl&Pk4r53'D!9Fl,*NN8JIhkZh39J@YJkSD,!qh9b +qa*5f[Gfi*QaISKA2!l5mDiM(Vrb-#UTGaI@X$A$4e+SDer4Nq8FB29bN0LXD(qP +Ma!FK!'T$j%d#Y+$)T&+4FX*6I#$!9$aEd9fj#cVUJ,RBFmIBNNcp2LQV-pLUka8 +hA6DAFdU8P'd[HT!!mG&m6LqfCfYVR)C4Ejc4"0j6Q2PUKd3PZ%q`IF$iqU4KP3p +hMX#(16V'NG6H&P+6fP!jkHGGfkl5mDR(k6dA52IDQ"qmi&eq[I%G-6F8'%N%Q%c +"me6+S-CBV,88%m5f9'#rZ'H(@jFY5J@!XC'IjlE-*$Jj"d1)GdI`H"1E1eQ+@a9 +EAEX4DKF1jEX46i"9(fJ1NSp1FVMkD'eE5'"iA(A`!kl5AMmYjr+e9"@"R"q8rh9 +%[4SK$IKf8f0,%+iaIl2$i&AcY&EI(8"!G*KF5E)LS(m-jNh2GDN2J5Y9-cQSkb2 +@X-caX6eBdB("AmIKAM1f5l@9DA0A8kA-a'He2fU01Tp0Z%@r!46R5D#I`,f4!jF +1%M0@)D,@S!ZT(kr[+,bj%lYXbZ6CmdY+Bdpl@j*c$3l$2!X[kNrQR(Yr9Z%"Pf` +J$9$c8KRDcXGb&l(-Qm'mQE4"V'e0eRITT&96j[S8i'(-$!*Mp9)4meF'XGDpGL0 +4GX"B3d+FkiY6C-$8DI#mm`%RX`V9X020F9EVHB9-+1Mh)Mcr9(Ghbhf),%`[$ci +J[%,pDSZAN!#pj'!Q1i1&hf1E(KTeGX)YCZAU+lHCKL)GrkQi2!0(8lQ0IHki4F" +4)eDTEU!N[Sp[@5SV+Q!ISpH%aNkl#DpUl$)U,&i9$lQ&bf!1i+2NCp*jQ,P9cJ5 +Mrd+,DlAhlkRCMQTMY`K5i,kIFMdXM6GaZ%VpqU2%LbE'G[qI9XQlYNpiTb-EM36 +hHPqKeRD0&)!+'ME6Xa+iS5B5Y&XT40k#35L`!'VQH0$6pV-S@UG21P"QT995jdS +!p*de0$iG"'rM1,T4+ISmbi(A(Y`STfUQ-FpDe6RTpVYl1'rC)q(#Ee2PL6S8lAY +pGBKdS-q$mB,N5(5**Qlhk99%1eU2!e4*9)3UR5fL%B3-[#9kc[9%d6%d'!m6XJZ +9XKZ)rCek(r`1Yp!46Tb,KVBclRFV-T!!@YGY-d01(m+XYPI!99VUF-BM"LPchTG +8m3P5`h"f,4@d#N`PfHNE5`NC*2$#&YVf3eEp001EeJ+EXN[qkf4eYk@cLJ#i"Fm +IhB9hI6p'2)De15TJ$p*P36%$F5bB3fhp&X,&lcqXR1e(q4*,ejPQRDARS+mPSL( +(2,fCZBl%98mDVUNBYJ56IRX-UUSKB3N*SiDklS%3-m4'd4LAYN0"4MNHeKlaVe5 +,6#X&#KGKA4d$%%dj)p6R"B5FZhmdN!#%M+d"N!!i-chq*B(*ShIfpXPp',c-A@3 +#h[9p(eZ`QD+KEV4FYN"F)I*6UcV1QV1!A('fQFeE'q%DdE(jiSPJTQ(PVal@[+j +`&Q!"Eq-jP$T)RPm&HhRTj2M#82"$b&!"Tak06(Lh'H0d6F,-6BJ3CEMbp8B6Q@B +r1S*jZd*h,[BGi'rq(Ra6JA*"(ZcYpC2KDNaG41THr)F5a%mpL`5!A,K@k"K+ZaU +8a%"3"mK[G"-c"di"lE9Y6U(36h-CET9bj(-fcQ+)F+DQZ6ih14'22LG!&f#IV6b +69Yf4f`(c"cQ#2q@Y!!F%cDkd*Q[(`TTje2V$bf`j6"f6bpJePAjUZPBMGZqK32F +"e23TqJh"XHrBUHD4d0FEH@biVqd(+HFZZ848lrEE9(4"dL$HT(rUS$S-M)h26rF +ReCFIjT2R-ca*d18C5N"P1%p#8$#!cfH#pK!P,!-RS'4cHSI"h%3alZZeG5&PQZ3 +S(NHUq8V#lPb4$KaAN!"Z3BD)1chl9PI0Jrp3mcE)#Vq4!*`HkjPHS`LALr#T6D" +lehTmdPBXEm,VarZLBcjfIfD,hi*RU2`92l)82kD!4l'4S%+VB2Q`Ef1r*&Y5!$@ +Vjb4XLCaj[PiT6SUr##hCee*X*C4rCE'*#!<9aYZ@*ADj`V6K'"2a9%3dCZrhf +J*d#k8)5,GTX3#BlVcAHf$P"YI%bm1j!![TY9#KI0`Z2LJiYjHM*&8"iB6QAH9E3 +MN`Z*6eS3Sp`KV)!&09eUrj1!%hM4T-[-AS&idU3,U&!PeEDH+'-(%@(f)`h1PKi +#J&[+23kd8@`mLbZ!$A583cMBd',cLJ2RqQqI"1p#3'M,HJHCrQVbphM(4Fc4pU2 +$Kar-[jeHKX&6qbpG)M3Kl#[8jPp)#UpGIiiPi+UjT$NFX+Nkha&T@%pD"Ufhm8a +bRjLMX9"0c[,j,lYFrkpY4K!0Gpk*R#[M-kM@%-dPGl1`jIQ""CB'8LNpR*+Q8e3 +RXZMl%MRmm+R58C08Nd`FU,mY6$$BCa68'Ua9hQ0KiRAUNH$"61'ZPPbZ)BiD33" +2[R+TTbH[3$lE4R`d[`R2R9E9YI0K%[@D-LJA'IC2J+ia@jbhr@pL3"-rjD59,9) +Pb&-H&U0fBYZCq"@dX"ea2bKX-Iark%'2CFbIh85TiA*A5)`kEha#+p2HKA$+`LG +A+P`,S"dRh#'JQ#D92h'dl-h[jV3QED%%4"0ZD&YMTR"9YBpa(9k8@2L+8Zj#QL0 +rKda"V&Z8KF0QD)e11SFINM4AP-jKSlfNUjEKX@AGF!Q+T$ica4XjB!LTGGTYUT3 +92I'6r0J+FBK0Tpp2Ee44KXVQV1b9m00Cbm'ErHGI'iY"EZdeF*04!-q&(3DK*c" +0d$"3J!M)b(Jq*B0hiDf6V-'Z!6eQla,1prXA,$p3@6bDYma#hRKBTb!qaM9jr$G +m+2S$'k`l4MU4)SjEpTRIp5pj4&Vq%!'&+!I,`kH*'rG-eGVR9Sbli8VqIC9!fcB +20CfbD6e[T+M8b*,daL#pCYF%R*64f+HX5!AMrbS,R3PS"'E'd+dZ*M&ATbf)T2! +CHp%(KdL(YI#-&!$YF`+CecSBZ6d1Z,X(Q"T-QV"P&0a"j)289kMIU`5M,4Qh8F5 +e!L&GZN8[@CD6'$&iLCLRr*8![a0rM6JCb[FbU44MNEF+lmHY%9P-JR[d5KqCRM+ +TP'Aa&b,-aE+N[)*lf9'C6+0Y3EITjJUBFE*5kKA%DYhbb')AlGeD130"rIc-$PI ++cBf6j4!,IK)ehJMkic2Q1XRTf2(`bm5j2)DqS5Y3ASba@&S9G"BRFhD0@0a*Clp +ll5JBcHr+*#-Ca9XXQ-R1c)#IJI5LBl(0JGZb0V@bP[Q`Z`6V3%a-k%Q[DC!!B8G +alqbr'[h*VUdhS-56B(Ccj$RRa-j2`8a9E(X+FqMC2Tk"F*E4`P5&a[N$I)dmEa` +D&&J%l1)D)98TTe%dMFAVXm@80e+9XJ-iVZ!9pcFei0q98r$`D[d3X8VTXdR'3%p ++Ve*UV+%#B)q4LG3JZTp()H,TMA`rr80k)$m30DH*9c#p4NR&"r9(aYaN+L1V+9b +jDN$@@N$'Z,V6l-ccJ)F'q*V`H,BqpLQpiJBc,LcllCKH5E!M6EGqBZ82RZ0fDpQ +3!)YV&EfA%5961d6PRH5bC%BRr9a18A%d!l5@BqY+[lZ3!(NmqHR"83&Q%-@%$bc +hf&1[9#M2rpV4l2N%Cd4*%%pXA4,*p%MMC1@SfQGS4*bf"a`62V2$hSY%BHYc-8e +[AT-EA%8N3Ppa-TJ&$cLVUT!!dZZ@0ISAhGlB9c$Zj3&rY2)mpCpIajJ(V5'6rfa +D)4%Xq2&KBVM0(E`8j6(j391RlZc-E$r23p-FTi`13Sqe,-l"RS94N!"@2mMDa$d +-,BLieLUR`i`V+dYf,#cqDj0bF,MU[`pd$`di*,eiF,-Z&9!Jr+p)4UfkJ$,Vj!B +X3jmb8D)hDb(C92J3)"HCHX0Ci1ACf3BaADB(!SK#CP"$G50FJC4M#,TfQk#X@Iq +lBf$lFJVl4Xlla6)8D'2f-3&X[Er"Ha@kN!#$jGGTaJ#Y8AU+8G2#9e'[hk[-15! +K$GQ$`kH3!2S$)d3"Ri0)0#9&i2E+*MYLDG9,HH)%H+(q%Q%Kjbi1jGT#4f+iRM, +RNHp&JUJjkh"2$8Yp,$lfAdkZr@U6#dj99*8iGfAUhZ1VK*5AFHA"I8cD0J[Z11L +XidMa)&ah,%PfrMR@K0%XD$lpYX!S+JAdV3I'8`Ujf%GGfILhB&E#eTSNY*8S9)$ +dU+VG2r+NBAN!ReH5bGFi5jA2)'J+L,jfe(b6#K[pe9C%8UC&J`Ul4CJCR,E8-!L +R1U#(hfUF4cb!a'06Xl&Ef4pC()jF[ANe46eI0(diXHTT3Bb'cp%`iB-B#CdZLVf +k[jMGI6Merke,83l@qQ[$Jd+1BfL6LVcJ3!)3*Hf&F4e`Ci,*XD8rdcm8rHL[d&G +3"+LX02[8rajrEUj+3k)jP6Y%Z5G5%!CLB2'EH!(4PrZap9GYr+$G8A2bU*H2(Di +bG)(Th#A*l06cF)`PQ42%TmhS[*!!1FIH$c391bFZT6KQiHk9lUGFj,Z0kk@`bPe +C[,MK3q`3VVbmV[34h9aHkqia3kVm-CRPSISfdA-B1k&mV5GrF#%Ali#`rbeC#5q +CYI+-qM2#M2&KXbH1a6i-MQi*+`9AG442MX@rK@``qb%B'qi"5I"5U2d%"%L(kc! +'i1KUk4M`$+#1aLfDI9G5RT`0rahmCE5r%EPk,+P*jF50H0Q-23Z1EPYRDZ5H"CN +%)d31ii90eU-miLJk*e*#R[$&i##3!,YkH1E"cYXSFlJAL(X1A$k+fUKDAGjK'AJ +(JRN,j[8NKBI$VdkmCGF2",@63$L6URKG2klM2Uc1QmmF*Xkmm!PG3MZKh*LQL"Q +!(JeS(paHKCj6mIDjMIhE2#H8hS@e!VEA@E(BP3`+TjHT4akfM`*1dCkhDiiZjep +eK`UJlHHhr%EZPJ9X%1LCA8[$+JR'lq2p3'M5+l[j`hQGiB!fNbQ,-pM(2lADT,# +$V,mS38SjhbmS0R&bmAL$IiIhlD'pfZ%SEAeL+&"U"V03lcfhh9!JZd5ehjaY*FR +mD@q"f*Bi23KdM5(C'$R0YbVc00+lAGSVQT!!VKB#a*qq1AASfDdXR0@arih6U,f +$(#KDmM`De*mIqJ5`N4H*KlcFqGIE64!)2MRBFDZLYpMq3'cFd9Q@4q8Cj#T6QjE +LD@ji(Ui,rcec%+0pR'i-c'pPapiG,!-dbH&F'YQ`NFp!a8N%!'Z*Y0(BreV0%2T +KR!+93eKZ@M5mKbB`f4(4j2VjDRDT"&IT*RR3Z6KF6`ea8(Ym#qG(`q0ZjJqa(*Q +Y"T!!(H!X'GQ#IP1#kE,-3jZ,hl)4$XbS,kVVjBJq`41KN`C669Hflja'B%e+kRR +p(20cY'fBd4ae!@X!BD(ISm@cHrej6l#QAdS8C0P,#[$@eSVcqB9pllIkcrR5)+h +8I2M"$["4MV6aeiT601lZ$2Ml%Y"R"aA3Z`"kE$MkZG%5a-Hce#HfrBVf+J%k#GS +qe4TN[`Q5S5bN,f[KNf"Vf%lXThaG5MmH)@i$Z"5mG@if$irlDKkN&airaVbmGiS +q6-,fc@jHAe)3Fppj+SpNQfZqc2jjq"89A4K8T*1p$l0&DSXCX$6[69eF4e&[*EG +8I3f(@(Q*-pRmI2T$krjAmFe@[ZkPq@-*qjj,4a+jQ`+b)DirV5Jjk@-(2"lRBik +6ma)Dc8H3!2i)&I(hldYQ@PSIP[m3kV"D`qb+ESlRkr85NlQeGf(`6-9m@hG8D&M +@(qm5+e9Y3h`lKM4kZKk)Ld'd9A&lp*!!PEI-q)4m'D%cjlPePfH-hLNT[2C(R8c +C-hAUY$hDHH[Db'8ZYIIKM9Z-V-9l2856KqhUj'"bkBI3'0![#Q%"5!5kjl)K)m) +AXCaDh[9Q,@GkkZ$3LA"a3,p5Gfq`Y5MC89k+SkM&KjMb&p02Y-cUli`f[bP4[eR +P(e+rU4HNLZ15R$YLmkSI,rNrLK"Qb*(bKA$V1rmV8%Gm*FDQXhbj#MecL[DAki) +VTJ#V,Sp*&1B4jSNJ`#8RLVPc2LIVq)i!DG5100'eA)*Ued`0@,p+a9*IC!V4%!U +L3b9$A(`leR*F'T)#9dNNE8ef)"2CP[cN)m*E+"Y*m*HBqHU2SNZLUjS)80-#U)F +0$N6GFm0YI8k4J$*BV5%"qfejM1cBESb5@6Qb#HbpLB`l&a@kKG!F!L-6P*EFI9" ++0j%T5FHM6B%!Z#[Er"3T8mqPQ+(,FE`S@Qq$ib`1"$a(+4i*N!$m98,c6kHQ@kd +GN5k4LbE-Q*223"8keG2@LC)8hA6AG5GE+cI@&@'KY1D$6heRKU4@b`Ka$`r"rqV +rc-hS&H!2$mDJLq"*DZPpB'6Y6'4[IZ92XH8,p''2mVULEeaVF#I[YC)013Ye`(% ++UkDDkYC"KkK+V&p@k9LQCI+IAaaa0SPHFdqii)V-PLPjRr6AYR$N)&R34!,+R3i +9U"K!"U[2LT[l[P#I%N&5HHrJ4AY3#`V9XaA+L"%C[ifk*rcXXSAE+iE5FLma5FT +KARS!2`#b@09i21N"6E5bY3i-%SG188Fc4V*"!YcjepUa(p2,VEeJ42"fekFZcZS +"!Gdd6CH3!)haZ%%L'(q)LmQ8P``'UQ9,@`5URY!G8Ae%r#GpfQ"(mLU!A4%XV3` +BjbLHfh*VUq"q@!5)ba01"jRQibeBK5d0"PDIa!SIrd0ljZN,+M#ZCNH6MBkH&&I +9JAPPaF'!DqE$9S@bhqQ5K+qS2L&e1BTcFF&FRh`(2KbJ&(8Cf08mq+#Q4bre+J1 +mA$iVZ!0EL[8%5J%9K"cLNJeE'SiRiU9J53V+'-%-r0EZ@H4@dX`YH*m`14GI)d+ +a,dKd&6Sk+5QliMZ%cHpSNX6P86'qfUQ)%i89f[VH9UIecNa@*[#+hdZD0YlGZk5 +-c"b*pp`G`FFjhk#G0KlemiF06-@@QK-+*Gd5IRlU2NHD9CEP0SLCE[(2,!V5i`J +B%#rCJp+Zr3&Se"T,-DGc9q%YQk!4MS!46q*"ieIP4FQ8Cj+TM,!5DV@3!*qU5j2 +haScS8)YqG*hXNdTK,a`cYK@1EP14YhSd-`f9dE*"5139p2jPLB9P8ArbqLT+,EH +m+b6H'd`Y#&El%`ZS(c#c&TUX$TdVZXDFikq4Z8+6LlA''c(%VBdI(aZ&V)MI"2i +Laa6"F@B34jfJKf*A((r2h`jpb4r#T&EQ@ki)i0NZ0XKAM5)!GK9BC@FC!ql'YcL +3!)'"EJFF$fRacVH$e5iad)JqF(bdcBBpHF&BZ(M#*YYDNK5qX+d36FETT#J*24q +1EifrpRQ1C!5K$NkI0$U,TqG8*`1`VdN16F,0$0%!9[@0T*J*C%p)`4VAh`+1JRL +E&6@KN66hZp*)DI%#B[pFjDB`Y,ZNR1$C4Mb(mlDeKmLI9L4bJ'2l2eh*'e"#*KU +dGYe4MqX!rX'-3EiZ-,S*E1#Ei+feJ84BEYr%0kbZk#K3@"N6XK@E!6kjDk#pdBh +BH3NMUP`jchchLhN2Z#lP@qT(jGc+*&9+(R$q,V*[Jrr&qlYTXJ42Se$mbZ10edU +G4-AB0a`6U*Zp9LkFQCb%C'-1Qk31ZcpA2MUjcL)MUf$"I)CpAqbJHPLF5m23'Xh +K8XMcMX!0$"2H-q*ETHqC0Kc*X!bBf3qL'TSb`NQ4`qF#,PY,EQJM95LP#*S(Y"- +[1U*l%&VE!K$KUEMpKTSFMADH`S9lNK9*'ZjSZZf40AC*`Cd)VA@1HdX9p(e`&YL +9,$-SUSMR&d))j%4C,%0(X$Z'J43U)qFPH6E80VXS(L$Nr0+`8pDXi1"Bp)[FES* +#fQp)khY@m3QkXeHqRP2F,X,pZHXqAN+m5mPR!+3Q8b4)k)d4XpC$PCN(epfeP@E +*j6BRGl3`V9#%2[R!b",d&BKBEk(3m[CX$c#5PY90,qT`G&3VZFpffQQL*1qMhBL +lrPQ1%A8jJrV(X6S+XFPChf"1#`+L%CA1-5IXF2[%NHcmK%%H8@Hd+MD'2GTVDFI +ji1i'f!34Daij@mS6hM&@@$bY$F55-r9Dh*0&,fE(T91cmee`Lq8&6FqpV)ali9I +aYcQYEB'F9X)9hP8mf(kU,N@*UDDC#NV[1RfV1,U#DjC&(*!!RC5hKIeXr*ihec@ +2UU#$`'0$BI6@"C5Rb8mGAIjZ'l#2#G+0!+S2kIa8)5f(RmJXpbiTkXd)6b5USrZ +ml2'J8R'2VR#$HaXm[NjY886)$[[ReMQr)$*(54YN!*6*ZJVYD[4hY*46AZ)BGJ# +c9AI(&m%M(6P@I5A6qGbMLG3Pp5h2&8!E'b&[(5qV6!'KqKiNSSLIG#GDH',UMD( +44,YZ$L)mLmKYjbri!JcNLM$`TG(r3L)&dDj&bCqk`48"-BFQ2GVp5PS8lieT-D& +KUN2P!P4cTS!1KY9*"994$iSdK)rp4a#ff-f8aCXcp2jQhmBjFKpfrr5KPmR-,-' +K'rFq3[paJDde2EANNPjL`G@L!U,l!Z@L[CdEb'3TL[dG@C+rhMkmYRcLJS-*m&N +$r2Kl+[LU,aTm[C1!CYFF0`ka`8dk)EGXr(1kF-T9&Bi+!h!KNQq(,+QiC`E%)GM +EYi[XAX@h,Ljf6r2(B!NSQ[QEiCj8ljG%,SAFPfliQkqG#q$8d*R1d0#(ZBr0Z$@ +aFlbYCKIXIe3iIajp2kT@eR-1J#[#S6LRd5fPqM3JS6r"T5i!q$&0XmbT(KE%G)N +SQSY(mh#0"QCk,5FBPRYXq2IPHl3HE*!!5,iLaY&qHMqi-fRY(895Iqk`J$"[ee( +3D#i-Dk5+,dFa2K'0PUbRSJB&-$Vd%`V&!PY[!2kQN6(dC@S'[K@DT8`#DpX8KNl +p0C!!NdSpK9F)a-'Y-!q)@mYTb%hT$1akCCF1@4TL!jfZ5A-49[mID[Z*(L#Y"#J +bP1),DLS2T`da3PH0MPC2,c+T)-*liDU@)"UqDpJB4M#A6Ld[*A,Vflj3"GTPbiD ++j812SSG5TD6#LFEUY'EjpTh+k+r`kA%&(Q2!C,ULF&k9XYSJU[@5l`%IqSY0E4j +Jb+#&2Ark'MpXcNjBGDq4aT5Cq*P!r)[Y'm*aL3L6c&d,ChK[PIk8M"PHZZ-5E8C +dk'2miKKZ+G@EmfjlAU)D5qT2c1&SDl`#N!$0qX5F525N+QT1b8CMRjJQ`BTe'T@ +E,6LCeqHl""%G"TMS`ZNYUN#RUINV!01"9@be[2"Beq8'A(L8f936j21(VLdLhMa +"D9q)0V$'Qf+)dI[edGf3!,bTrdM04cP)[cJZ82#a`T[pI!*ShZc(QY!l(,UNSD# +ZBJDFf9pNU5(3!p%JF[Km3-2E$q(1LG"LKZ*e9M+%p5ZG4PPQ[K%(p%G*1S-[R42 +X&RhZEMSdr9b#M"-$52QVR,j%qj!!`TqGYk0+AkUS@ZhYPN0(8XD-k8MaY!rVSXq +mQ#6NKrDRIT&bGk'*A&KGeJX9IM6C,A,T3elP0JPG"jfpKi(HR[CQ1r"IPpmQ0&$ +eFZ!3`eih3[kVPJ,Rah"N1%$9JT&c5-41+mGr+3ILIMG4r4A*ak&j-cD'*4+,f6l +1i984H2e&,`iLm%C"qQl,#bhlLU!AB6FM"$MTmF4JXGi`jcP8c*&CN!$dGB*-)'2 +NNU3F+McqcFpm-0FRVV5mb'#JJY1i`25dcEBaLT-C#LPKmK2q(pJ&46%#UPLF6h& +)b&d4hpL'5Q9c,9&lBF*dk"J-,4D1k#@9H!#&jR14r81GdDr8V[U!M%MDQ%E&,*+ +95#3$T#m@k-V2m5292Ui+J-1H'e8#cZ(G(2!Z)r&0"Me,5LPiQRP09m#AqET!pNF +P1IGNC-Q@Y2#6GS4RTl[eSrSlSp@q2#bGi9Zb"Ae"-!`iT!rfe($a64CJDJYR$Yh +6q3MfI%X"NF$%EMYBk1FLQaDFI,`USj+V)GSL2(P4FdSH5XBhU&blaVG@qhX9CEc +Y"*aKpqKH+)m!j8ZFG#QkhTa6K9'8`UFA5d@GaHq*Xq!KM0A9KrJda+96IeE'!"M +0c(q5jfl"YiP)Y(N9pKT93d+[E$YM(&TEcaAl)fPA$j2-Q9&!kMheCE'Za!'Cf&l +Zk0$K21S-jVX+YeTXL$Pklej'81d8%heQmXaEP$jd%Flmm)Nk'Cf#E$(Z[3G4$25 +)*8HCHB$$+j)rK[Z&l90ipNB#Mq6JC0lfj0BqAcEihTU$RV[VIDN+i(,i&&accl[ +BFJj8pT!!paHQT$ef3ehI*QVU-HKHHVB4Nc(9*k&U+eS2EI@)d,3H$f2IXf%pX4% +GfrBYqa@A%l'4Yj[aJV"J"A#0J399j5jLG"1Kd40Eh'QIXZ0&iS0pS48lU"QA*BC +deMZ8jRkbk14Abmrb)BFD&B6hf"#IA4(D6bbbi#2pI"%Nb5lZ+qa(5h[PIRP6$92 +AKB9J8@HE`pD(jk9CNkACFBG'k1YTi'ZjAYYEP$k4+$1ra96MZQC*(`+`!,0Rah! ++"3RiLr"m2!$9$ZZ8f(EXCl,becip!r!Kiq3A[M&'lY+TX@%e0r`Ul8jHl5Y(Z)j +iJlclTAlUJS+GJLA+EF-JLDR*3`KF#T*4-"Qeq5R%T1lE1PF(P4r(062h(9%&V,! +#i%ck2%N[Vq%P8KM5c2'$+5BL8r!@20#$!q6*mi"`H9U"SP*-A92%cPk)CbQq(ZX +QYk[cUcAP&Am3aGBAaP-Cd83&BTZi@UcmB!59%M1Ipl"EJ2A[*2QP)QSkKYpI#%a +U3UcHPVahBCKJ[)&&RVFF'2bXrPQrpMR%JF[pQ&f9S1mR!2USrVchU2L6$dTbpS$ +ST9mDeGc-I1mQ"eBNkH6&J,6J$hSK(M'N,K,Mi%FY$RNFU)&h`V!8I1iqG@H[@48 +H$`h)r$+a-6-)'+5i@FfKXKf2)N$U"(rD,8Xk%S1MA#)8"re8EFBP#Jc#*6jB!2- +eIb9DDVbNH(HS'(RHKr&9VMCBH!)TDKkMU0MmphRVhLF$6)+2MU8I$P1cUSQS%69 +k&P4VJ+bca%2e#"@er4R5d9k@CcmFb)0Zc2iCQK$LMm(`N!"rCNI$H+D!4)ER"(! +&N!#3!2EPEIN'YlTF)@'-YXc!f*Sb4)&41+p)U$5r,I1Y,N6NGHY%Z*!!TZ["1E[ +TZVlSXk##D(G)$!H%5dL[eZLNmqCdTGelXZ2Yk&,*cD'jekSh3#'ZXrBY`*a`+qV +D6F(+j#P1(bTRXED`9Y0)p&L3!!53!"1jR2Y0Q@,BPV!9hI!&BV1!20DZC4Y9!`R +@iCkMYJA9%`9@U-KaYiU,hMDefKpNU#d-3iiEi!VclZrNM4G@l&VCZ@$X@GP)E,l +G!Ap5ehKCkRFNI$Z2+-F)SiJ'5cQUFHrC4')YL6cB1DNJ&ZI'HcEZQfK1Tqi%T2H +Kj8[#(im'3[KP4UAV*B-Hh5@9JXMe*!@0RA(4Z094NGJDabZiiUT"CAYMDVK)q"k +Y5,Uh[Nr#2#)kR$*!b#bN*hMEKq[QA#$(2Ad!`fd0D&dhT1,-UM-RRe,`a#+H+Uj +`T@%[DkP"ZU1rYeAN$ZmBVI9fa'TpI'm)5(U06Q,A%d%Y)4p8aYEMCY,J@L)rRkE +1)3-TpH53!("(!,9a[fVJBdSkic(2Ef)!mQ)DF3TeihNN$i2U9dM6J9m#G,)k+&3 +R5PC'!2eV8p'U-m8Q`iApMZJGH2+afHQf5+YUEDE@ck)JUVmP*KLBpZ6iJq)+FQL +5eMF4lr$0-h3mMH4AQ29$Gf4%N3"k*$p*Zq+)#+ZDf-TXHf2*,Jd`2E6frmPp`A@ +`cCdh)L*iLk*4$9jk"EEQH*p4I8QNa6erk0EVPNbL(rfE@I6+8,Km9lj[66cHQGN +jKMf'QLT+[VSQ5dN'-CA!$@fm#ridjGN`UChVfA(r0j%Z(QNGX`F$cGTrm$I-jlQ +mHP38[Vf1U#2KmX&`3KBKT-C'*HBpIZT3DP4E#VNeY2,$'N9[VRT+IE3h!BbBY`b +*fbaB&-9iKVlUM-da#1"65MXKq1HSlZTbhj!!0N5,N!#`+ijabBiHf9(UIHpH,6# +rm#m!+lGRUUHrMP(e6,S@KD1cfTXc`-8PljDIi1el#*UHK`#%l2iCXdlV@CIk'c' +@LD-9ZA-iYU)[23ilcb4Z''ANkL9Y#()9rkS@RiV'%82'e`!!TC!%!3!!-!"!!*! ++K-m!N!I1!!#V%Iq3"!#3#U@3"!%!!$8!!,Ea6[1fm8lc!*!$cJ!!Z-i!N!0b!!8 +Ph`#3$NPMEfi0!!%5,@PMEfj038063!#3$i!!N!N"jJ#3!i!!N!32!%,"e1([a#" +i(T,V1b+63jBp6KE&40bkJ6-15jfD#UKj(*k(jm"JiedH0VMYC24mX`HVe+GMeF+ +dQmZ$01k[6XH0K4dq8mdCCkBT6YB8X60cfjDl4FpQHiI,ZRhD$mE*L4*AjH@8Sa( +[GeP4F4lYQSHRkQ1Y`b))1"iN"5,R8eJ!TC!%!3!!-!"!!*!+YqF!N!Gb!!"S%rq +3"!#3#YkI!!!"!!!"MdN!!Bj*!!!%E!#3mh`!!3#3"@N!B`"p!*m%!Np,!*!(23" +J!21)A&4SCA*P)'Pc)'j[G#"PEQpeCfJJFQp[E5"[EL$5AM$6)(4[)'0[ER4TER9 +P)&9Z8h4eCQCTEQFZ)#""EL"KC'4TG'P[EQ&X)&ia)'*jG'9c)'&bC5"ZC@9NC@3 +Z!*!$8J!"!*!&E3"Q!)%!SJ3#6dX!N!8%!%J!C`%$L$*6Eh*bH5`JBR9d)'%JC'P +cDb"bC@aKG'9N)'9bFQpb)#KH-#NJD'&c)'pMBh9bFQ9N,J#3!d`!!J#3"6%!C`" +&!+d%"&&eDA3!N!8+!&!!(!%3L"T9EP0dG@CQD@jR)(GKFb"cG@0MCA0cCR9X)3# +3"3J!$J!S!#kJ!J!"!*!$I8&%3e)$!!"q$9-+Ni3"Sfd!l!Yb!l5b-LXVieY0hP[ +[D[HQELEAJ$%!3!-!N!1kY3b!!!PT+[lJ!985,2Y+b&X1iq9cZS94MV)rcirrVL! +j0k`Dq"(+KM9jKQ+MCf[`V&ir"HlX#m#`U3BL1%aA2VhVbkfM'32&(&P,'cJ,!*! +$@J!"!*!&A3"`!(%!V!3#6dX!N!G+!&8"%iJk8fpbFRNZ)#"*ER0dB@aXBA4TEfi +JBf&Z)'pZE(NJBQ8JF'9bCQpbE@9N)'pZ)%K'8b"fEfaeE@9c,J#3!fi!!3#3"@J +!HJ"m!,B%!Np,!*!(5!"H!5@)6P0[E@8JDA4PEA-JGf9bC5"cDfP`F'9N)'*PBf& +eFf8JG'KPH5"KFQ8JEQpd)(0eF("[FR4PC#"LH5"dD'Pc)(0PE'BYCAKdFQ&MG'p +b,J#3!eS!!3#3"9d!F!"a!+`%!Np,!*!(5J"9!41)1P4SC5"QD@aP)0*H-0-JE@& +j)'*P)'4KE@&RC@3Z)#"3E'9KFf8JGA0P)'Pd)(GTG'JJBf&eG'P[ELi!N!-S!!% +!N!@N!)d!Z!$4"!K$EfjdD@jeC3#3#Ci"AX!#!qJ!N!28384$8J-!!4)08`UE*!! +lLSL+&Fm@d(1X4'`3p5`rIcrXejfrjql1$+GBf'%P+PL&999LjEra",'U"3ZbC6Y +1)2Q3!"m"9#5BqM@mKDIGaGRG6G,)HT+pI4mZ3pc&PmHP#aEjM6KA6jAe#b3m5Sk +53ElSG,A`G'S9QL)q"HC1abaeLk9cJ@A[I"3FZ$A+c+Ce3%m()3a-9j4CR+h"Zf9 +c)KIFIJai(r!m3+*2iaUXL26-$cGj+&$EM-KaUkHFa@0E8ER-cGETJDZ80pr*q`c +Tre6rb@d!N!3k!!%!N!93!&N!C!#6"!*25`#3"3-!4!")!1L)'94SDA-JBA*MD'P +fC5"TFb"NB@eKCf9N,L!!N!4)!!%!N!9(!&S!@`#8"!*25`#3"3)!43!a!1L)*eP +[G5"SBACP)'9ZG'9bC@3JB@iJD@jMEh*bC@0d)("KFh0hEh*N,J#3"!`!+!!S!,B +"(!3"998!N!--!#!!#!#L!4`!JP99!*!$$!"L!*)!m!'B!)9993#3!``!+!!S!(8 +"2!#(998!N!--!%B!TJ#k!GB!KP99!*!$$!!J!!J!SJ%F!)"993#3!``!+!!S!+i +"6J#e998!N!-1!#J!+!$#!D3!L&99+!S!N!--!#J!+!#8!4)#!&99!*!$$!!S!#J +!M3%A!J&993#3!``,9@j6G(9QCL"KFcS!N!-)"b"QEfaNCA)!!!3c384$8J-!"RF +093e$)K)4jPjZ%'3Y'84UmN3N#a"CUkBQ*lFpLicJGZI)5EFc8r+CIhHrlpZ+2"[ +Ic,He3*,9cZc*j%RB[MZ6%C,P9Z5*V-M[(j%rNjr*[0R@GK&*&K1b0bh*)LK!iJI +r6PQ'N94%1+J,1hML*hBK,0+!l9$&S4Cf%PiIcijT$+G2[eNUFK-MbHfpC'm6p0E +IcBDF5mJT4aqj[p)@X[AQGIR'*!P,+@RBhU3A&C159eN[%2cJbH(#&ajm5X-QD0& +L4-VGcEkQ`r)XP,P*,SMR)FNFrFAJLaU$lM`9cA8P820dQ"q1j-RJ+KhQ[L68+ci +KBT!!RHr$(BZ5%%MI@aB0YUmG+cH9Fc#*FlDI2+6+KXfGMlqi[`EXLf[bq5DTS"G +BJ&RSpE(k4UNSE)5VZ#(4a%4T(NC4T5D'+#Hca)G5#DG%eC'a54-U)Z$aJ`C3q') +!Y4*YQG#!*634DR+,6CR$@+QN(kF-V(@SLpVJf!+P0U0c9&M$',E[r55!`Li$a$P +LQ,KZKIc2X5Gal+,YACH#6FZ"UHV$eS-Ujc5-Gh6@aB"d'i-,eVDeLc'L6-mKjM, +F%r*FlYZBmf)r3FhBZqB8*mKFDkBmH&M*CEjpUU5NcqMUMHZl,G$)FrP&YX*lJ%6 +&V")5fb&&5#AJ#$hRCZLJ)NBKdc[fS@lc&8+41k84G`VH8bAIPL!j2GVYU6-RjVb +F3lRZ&DPJc0[DAFTb'rRhYdi*$'iYhrbA$q+6*eD"#2hXL3&E#6aS*Xkh8XD5XZL +!8d`D3&(YeTiH)j,QXMTfCIrBQ',QaYKL5NVMZKb[jqBq*1K-Xm!cl6p*FZL0,qj +368Vlrpap[%LPH%SI@AC!''TAaj91(AL#-@"3aPPimHVhYlZRfC3AeqX$cDJ8$@f +Jmqd&j*@%XYf`G)B2KUU3!"Si!i4'pV`UFE3TZ%Vi1,Y29L@qKkdk$`8SRBhC9E- +k+AX1V!#*JeYF)Z3(X`,GA!A9[Q0'IDaq[E"flB1d$rZ$9epp#4ZUUbq"F")bcdZ +iN!#&AS+9c([M)*1*kmMQF"*$DeK5eBS,0G(8$DlUGG,@)I*P,r@PJf6iV!k3!+U +,`iQMEf'*D&FHY3@1%H!C2CVf%Lk!`1`-EZQV3EfDc)k)alY-h[lIZ!qhTr,*MDZ +6TKGp,[+bNp-`jPQCpEJ64GUkaD!DXF'80&)2BbYeEc[GB!TTEhMfk&f2mYQTP@l +1bb2j`E4mDbafS5aG4rV(QBS,DAF-pIPCbZIRk[pq5'N+mhpAIXl%CM(qp[IPf*a +9Cbj2D@i@qUC8h'a@H[,JJMDNfrH5e-ha@AMdST,jr-qAljL($06eY9h'+bI[Gal +`F%%Abe@eJpQRlELVUi0e"4+H`Fl,5pZHa$lSC'#l'ZAeThN#F3DQm&#m#9iTh-1 +AH$!(GljqYG"C`e[Aj!i!N!-B!$3!N!2c!9i!!3%!!3#3"32S!*!$P!#3!c`!"33 +JEfBJ"b"TG'9YFbi%8h4[F"Y*G'9YFb"bC@eKD@jTEQFJG'mJ9@j6G(9QCMS,9@j +6G(9QCQPZCcS!!!FL384$8J-!$%-1A3ZVJL3qkK$[IhHFK&$&)G4%DP3id51JI+m +$XhQ`E%%LLLY5&L[+BUmfRPPS56c20V5eRIKlp5'd&R#V8-'DN`[NHa2f&Rp[Uq2 +[+Bkr"`Z$C0@51V1le%jX88M#[#6,5*F+)D6h2b'G@&alE[hp!!hQjM3a!53d)c8 +I9H31TRe)rcV)$iI*09++@dDQTRq#k&TppEhe[XIrZIY,JQEAQSTlA2-l*paR2Y5 +,b2iCjXre,L1E3r2Sef%ELF&(C*Jd)T(#pFK,#LST),jM##,K-*&P)-*'4#N(P,) +Al$TU(bITSp*QRrABYfrHDa1r,6ZbNYQXrAKQ61GrVaVm%1D2fkBE,&GRSiHmj'j +dIq'+@IR4JL(UGe5X`5E*!eQHbRapb*ZBmZmrGfA-)@dYfHQr'i"Y)IkTiB`XAjf +#C%06d@6BATL+H`a'2eQEE-kf+IpU1*1YDdKN$-N9qrQPKCPeRHf6%JDc)IYAk2D +PL!&Dh!UIjADp8-!q4hB[5KibK#-S)IaD0Zdmaq,MV3&H(T28'jD(r@GCA+CH%l) +[SjdNfmEk-UZA@RA5k`r[AePd(Z6H@GNEi(ZR#f0fIc4Z%cldphL%jIr[+@JqArA +Vk3,h[p@GN`4mj-([2DIj5KfmRVaKJ-K3(i2,4hV#!Ej`Fk``mZU3!'(1Y[VK-#C +LRRM[*[A0b2i&[YCHQ2FM@iU%X,h2T5G"SY-3c&2Z4+H4+(5KA("K63c*QPKGd%6 +$!8eN1%f`#K8QC%qL3NCVUAUH+PkT+F,G*ERBE&L6qA'pV%RTqhC*Nm,EpS)Q*pq +ZHNZ6(BrcT3(Q1ld"T[#(RS!AT@fTJ+6j(l-"$q6QQlA0q1#b),24mMSm[r52PEZ +cdS("#!a5B2!#JqS1GX"hm#+(KEAh#0-q(T9LIif+X83hfXl(N!$2KDajX'+)-G- +JaQE+,D[E-L)rLl1$A@L+48kN6+2A(p8riYX1elZ3!%30["K#[P"0iMMN%'I5pDl +"+9($iJJJXeh`r)K66A46"'G#6q'"1'GX)pR$1GJ()$K)%EikjmV"McEMQFiXRPT +$L%b1QR+#U2TXMQl#UCS'[kGY`ZS#8XBc2MHLTK+h,m4QE(`P8j&K"NN8q8LR%p@ +EX,5+E$ebj+ZL'$'q5jcDiK"r'aCE2rM![3Mp3ipm$r,r,VUNla@b)ak5[2,NL@E +bC-H1&*8aQNammYm8+D,i%Pf)49MDQ)macSk`RPqK$Jp1l$GJp$"20l0kARafiHF +(YhA#D1kmr%!GMCe)G9dBhH`JPG8R1i'mL'`Aj[Am0lr)$TlmJMAL"!0#e4+YcRI +(qI(aKj4VB",1ikHNqkKTHrD`(NAIr,B64)dBRD*kI)8(FJf)PpYLUHcfFR"8l3, +`e[%Q&bL%`-&&YGEjP4ij#NEd6V+N-r)qKQTKU%paAR`@8ArV[!i4'Bam-j0c+VV +aMi`"$`5'lajYHZ$Xd+0%Q9YU+YAP[#8f$94@-k#0MSPSJTCL5S9dc+@K(98LMU4 +HI-Z"*Rm343l'9e"2HEK`Nqj%)qGMQq)+R0&[,r0r@fTq,F''-FqLM!jk'3SQjA! +,p!IDJk%SKZCHi*)1@H!J&`-")$(rh0QR)14RcfEf0$DQ@cqEZhqaEpcchI[hrLL +qclAmDE2-8SaQ2eRA5HPZ"UHTC@-&[Q%8j"YUe1!Y622V3R*TYr#bIG*FD*Ghq3h +4Z'5eDXNV+ZjIikS%GB("F9T)XRmAZ(cKCrPf15FCGQ@Pb-e3mKCMK@#Y%`52'qF +!Gr3)R,f`(j*[q!dYLM3a&%UHIUZL4'kX5P[LF`-A#jZmTbUCk4B59h['2-(LKXP +J,FYEfQK)*'5VB5rk8$c0c%VchKF+rK9N1l%I82R'JS*$-Y3DHCC$hSKLHIN04aP +S9dcrbk&2&L(5F,9FTUfDSCL5h%8pT3QY4p2A4bbAG0+APYepe@I2P&9YYedrVaA +XD'RZ$-&aIf-`D)LDeqZmFX8E`V8*,pFBA!U9mYJZGlSf+Nrk2F&Jb8i'[Rp08(r +[j6c"a9#4MqhD(UBSDr"2$0'm9X&64eP(U2J[cqZ'jp+,JQ9G0j%2YNR99Z&5ifj +Z8A#%cJ*bX*(#@jJU5Y!)f+hZ%ai6K'2DqN[dA!"'Z2k132HllH*P%+r4m525"`N +bLV420j*)$p3L@B%)&fQ2cAHj)&`fiLXClN$MN@6qkSB9MT1F$'G-&b43k21PXRr +Hr1KIqH54*!+d@bP*RklP@V1Rq[VIc)8S4r4Mlr4%IYqf3j8Y'eD[XY"H*eIG-"K +BFc53!+V`6R-(`TQN3UR%li#bUaf'@A0FScBST8KK4j+M&2I6pMUVhE0JN!$FUHS +SGAbJl2@'`P*aRfPNY'bJYShE9AC2VVC-'LV0Nq(bS+A3*b'"X"%i4N195-SpCUG +3N@C&-%3)+h4$prRk"ap0Q11q$`#3!aS'!)!!N!-$0Li`$e0dG@CQ5A3J8d9")$B +Z-!#3!`i'!)!!N!-$0Li`!cBZ-!#3!a8!9!"N!)X"KJ!"!3#3"`4,!*!%'!!m!%! +!X!'B!!%"!*!(!3F!N!B")N&%3e)$!!1+$9-+Qb3!IiC&X0dj141`a3jG5dj2(GX +"&32EXIVB$&EecMiSU&KpE-&ZV1V'`$pMIe6d[rp[Mr0f9KR'kJ!,Q680A&D0p-' +14[HZ8aVX",2c+"6FaH)b3VE8Z5$*F`Z3!0p[JRD#kG&%G-mTHE-6hEc*lLZ&K$2 +-5eVUQP++(3Xq(j[6I`6`H[ijkXV6kQVrRepZakZIr82rqj'@*3+i-fUMJQe@`8J +Q[%@VE)a9Y9jE2Q+EYiAYB49ph"I'dPT-T*5d!R%I6(k-`pHZ'qD(TKRU8p[f6Gd +2ZK"S@S!R"-J!R!"-[ISY!2lU#3-4I`$`SR,K!K!FJS!"JQ*J,6L,N8'-h`a#j") +kiZTMNXbp+(%I60pdq8A%+fc,'!#3!hG"4%05!`!!J!e6#eXJ!`1QB-1UDV-`X!% +LBQ!h5l(E@C@J)',$(ZVC`*K9-3YM+VVhTe1X#JZ*BmLfiRI@!&)SrH'p`)*+Z-9 +!Tf0)-Sk[fIFQ)JkrkFEqqpLI1PG2++D4"4f4ZS)CZ+2&'UkSDLHN6c)+ldA1"3# +3!d`!!J#3"3J!0!!D!4Z)'e"XC@&cC5"TER0PFR3JC'PcDb"H-#"hDA4S1J#3"JX +!#`!V!#ZJ!J4,!*!&(3!d!#d"')J#AM%!N!-k!!%!N!8f!)F!5J$""!*25`#3"3) +!43![!6q)'9i`)'&`F'9KFR-JG'mJBQ8JC'&YB@GPC#j,!*!$UN&%3e)$!!#f$9X +,8c!$Gh-YCJEX'G2+9FBh011qY99@aMp[6qr9HVIZ2IrL'aS!!2!0!!$S0Jd!!!Z +b,4Z"TIJ(GQIlqH@Y,A269XhI@GL6%@dlV3-R+QGCfFQZmRMAGd5&i&,%Ii)B&,j +%$*hc3NQSKJ%P3S!ZU!lHe3A!Ni8FS"Ldp)0C(qm)NQG"[L$ILXeK[1,pDj-&TB8 +5+iUjFYcRZF,59(MPm@%"!*!$$!!S!#J!I`&`"+p993!!!3#3!i!!(rp!!#!#)!! +L"*!!!#B*b!!L%q3!)L!#!#*!!3!JKq#!)3r`3#)F-#!N'Im3+"U+#$)bLL3Q-[) +b6M3'15CPp$)5C43N#'Im#!4``"!#2q!J!3'!3!#'`)!!3!%!!#!#!!!6j!!!#FJ +!!!53!!!!!L!!!!&!!*!$J!#3"i!!(rr!!$rri!!rrr!!2rri!$rrr!!rrri!2rr +r!$rrri!rrrr!2rrri$rrrr!rrrri2rrrr$rrrrjrrj!$2rrrrKrrrr`2rrri"rr +rm!2rrq!"rrr!!2rrJ!"rr`!!2ri!!"rm!!!2q!!!"r!!!!2J!!!"`!#3!i!!N!F +"!!IrrJ!)!)-!#B%#J!T#!N!)K!)J#3J#%![3!rJ))!!)#%!!#!L!!!J*!!!)#J! +!#!`!!!J)!!!)#!(i#!J$r!J)"``)#!Crb!J'S)J)$+#)#!`"L!J0!BJ)'Ad)#"P +(#!JCr`J)($!)#!ri#!J!B!J)!E!)#!!!#!J!!!J2rrri"rrq!!rrr`!2rrq!$rr +r`!rrrq!2rrr`$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr +rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr +rq!rrrrJ2rrri$rrrq!rrrrJ!!!%!"rrq!!J!J`!,J3+!#%)#3!Q%!L!)5!)3#j! +!!rJ))!!)#%!!#!L!!!J*!!!)#J!!#!`!!!J)!!!)#!(i#!J$r!J)"``)#!Crb!J +'S)J)$+#)#!`"L!J0!BJ)'Ad)#"P(#!JCr`J)($!)#!ri#!J!B!J)!E!)#!!!#!J +!!!J2rrri"rrq!!rrr`!2rrq!$rrr`!rrrq!2rrr`$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ!!!%!"rrq!!J +!J`!,J3+!#N)#3!T%!L!+5!)3#P!$q!JJ!!J)3!!)#)!!#!N!!!J+!!!)$!!!#!J +!!!J)!IJ)#!2m#!J($!J)"Rr)#!DJL!J-S)J)$!')#!d"L!JCI3J)'8F)#"Rr#!J +F-!J)$rJ)#!"J#!J"X!J)!!!)#!!!#!rrrrJ(rri!$rrr!!rrri!2rrr!$rrri!r +rrr!2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!!!!3#3!i!!!!&!!!!#)!!!"*!!!!!*b!!!%q3!!#!#!!"!!3! +!Kq#!!3r`3!)F-#!%'Im3#"U+#")bLL3Q-[)b6M3'15CPp$)5C43N#'Im#!4``"! +#2q!J!3'!3!#'`)!!3!%!!#!#!!!6j!!!#FJ!!!53!!!!!L!!!!&!!*!$J!#3"i! +!!!(!!!!$i!!!"r!!!!ri!!!Ir!!!2ri!!(rr!!$rri!"rrr!!rrri!Irrr!2rrr +i(rrrr$rrrrjrrj!$2rrrrKrrrr`2rrri"rrrm!2rrq!"rrr!!2rrJ!"rr`!!2ri +!!"rm!!!2q!!!"r!!!!2J!!!"`!#3!i!!N!J(39"36!#3"JG6C@Fb!!%!N!3(8f9 +R-`!#I`#3!`G6C@G1!!2r!*!$"d&38%`!N!BFBA9cG!#3!`&*3diM!*!&K%C548B +!N!@%!*!$0%&9Fc)!N!-"5801)`!$!*!$J!!"!)%!!J##!!-!JdC548B!!`#3!i! +!!3#"!!)!JJ!$!)-!N!-J(kNJ-6Nj-#dj1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbi +!N!GA384$8J-!!3%08`,FeJD6pp*'c886E3#dq6FZ[0Y0'fE#E,kV#pq%hE$Ej0e +feG9eB3!*1+@)rh3&qKSdTMBHqm5GDpP1JSQ`da$k`,2S!'L3!-@qrJ5q"J!!"!# +3%B%!N"k"!2m!N"b"!&3Vr`#3'S%!92p8+rm!N"L"!&6rN!08+rm!N"D"!&6rN!9 +8+rm!N"5"!2AfN!08pT!%+rm!N"+"!2AfN!6ipT!&+rm!N"#"!2AfpS'3"PEhp[B +Vr`#3$S%!pIEfrIq3"[a@pT!$+rm!N!b"!2AfpPErIrH3")(rprD3"#[r!*!+J3$ +epT!$r2hh9Rq3"DZ3!hrfpL[r!*!)J3"8pT!%rhrfIbTr!*!$9&4r9L[f9#[r!*! +'J3"8rrD3!eErq2Gr+Rm!N!089+[h+rEr9#[r!*!%J3"8rrrfN!2mrIG@9#T8N!9 +rUrIfp[rr9#[r!!#"!&6rN!08q2ErIrCr+T!&9&4rIrIi92q3!e6ir`!!rbY8rrr +fpPErprGr+S'3"+a8UeEfN!2rre6ir`#3"2mV92rfp[cppPDV+S(fN!1"IrrhpT! +$re6ir`#3"[mV92EfrIhh9UZVrj!'IrIfN!08q2m!N!Mr+rEf9[jrpj!%ri(hN!6 +fN!2hq2m!N!Vr+rEf9[hrN!D"pT!&prMr!*!-rb[fN!ErJIH3!rD3!rIir`#3$[m +VpT!$rrrirrripT!$prMr!*!3rb[fN!2hprMhN!2fprMr!*!5rb[fN!48pT!$prM +r!*!8rbY8rj!&92Mr!*!@rbY8rj!$92Mr!*!BrbY8re6ir`#3'[mV92Mr!*!FrrM +r!*!Hr`#3-8'q384$8J-!L*3393eP94%!)9AZ4TmqRj95PcUATCN,r9RRV)1Y&6P +H1jc3GFqEVLjEl3C1JUk`V3AFmqjV$&`iAPc"J3XJ$Z3-4`bCdm0Y##l%,r%icjZ +FCiMR%66'8q2A)&qI0c'k%%2)(0[kr[[m2Qer(3-KPpIhrcNG9MB5%3)"N!34!C! +$%8)1!&d$hjVfq3GkSM-)I$p%JIi-VY(dH,DTQlm%+I%l&pq,KG6e2rZA[*+*Ki9 +Zk1YTJNrm1+q%MK*aN!!IIC1)fQ+kp4CCBci[B"bL3I2"8)RUN6Ap6DF6h`'adj2 +)DcU0"36Mmj9TS#RE"L,9@i0@[`hNhLm(IrBACr*6N!!XQl+0J6[RfmDDYl`eZ-E +FY"[,Ar&P"-ZGI0P*VbG+3ZHARDAA%bA"9VlF#D*`cl+cRIm'%,b12Zk6)#!Q(!2 +2j$P$*LG-J5E2RrM!p&ER[i'19!mLFeAc6N(d(66I2qpZca(Mf+)36klmC[al)S# +I%(k#V6P#rY0r$hpUIYB@",(+iU`)$BRrQIVVj*!!BbLV12B!RhBj+rKLAm4PV[p +6I@`Z(mV1**MMND'46f-5JpS*JThiaJ(9e$mc!FYX`5JbS%jQc(ACRK+qcZdJ5-C +%8Sb,EF+8If@U8+AL2hqGqLXec0M8ApR%13bEmE0Pp!T04Dl`k9(pG15+a-THM1d +E%ppSrR'N,pSRJRP#jC&[cqrQ*)1$9[IRhBNF%9hjRr(2XIR2XIR24E$MKqNLeYE +b!h@!Ecek4d!G-&[-pGGEBVU94iL9[h)jSlBI2Q(HkZ+[+[6(@hria*@Y4q8F&#j +@-A9AJdj-(R)FbQf3!2[cZc[L4$4YlEIHBNe59SM+BKeS1Xd'k9K)5mT1D59#UF6 +Fpehf)N,XfQ'I0DNGG1Q2r%H*d0P$P"dSUMS1S,'4el6EJ5hD[9K'N!$*Q'clbaY +LY"XNB2b(E,N5qH21Jd12#M'9APmSe-rAqEGd(S6+!K$l`QLhqIk0'dqp,6``#)m +md"4c*QAA2K$"1fY'2p!8*qr9"bHDT!"P(`CE&M)rS()$Dq`Q4pHkf8k[l+V1N!$ +IV2j)cTBeXVrk&-MqIKXac9$Y5CM[fLb`QD+0FREL1hrF,,`J1iF5rPMdRVfG32# +2c5+NqHR,Fe621"#8+*2Nc[Qi,%1*8YYIbXSFAB%"CkKCaEG"aA%TXR+5f)!rHSi +%f3p%3F!A[Vb8Lh2BjD(9YZ(0rb!@SB*"LpCq"(P0CF5DY`MaNKBaE+d$"90r'), +RP3LfC[Im"KA"`BkdY9i+[SL86Kk3!,G34%Q"Qb)+34U4(jYD%fNblKY6UDc)J*! +!N3(4@A1LZc@[b5JRl8p5G*[[YiRd81IfK)JPf`+#b0[4cS1Y`Qakrl2fJ(RS[IV +VKm`QNkRqXlP(TCGK4bDd4`)QNpPN(jq&TTlCjI4C2YX%)EBJ,H53!-5dLEmdQpS +$+GqirZKGPSCR-ldecdC#,rmB@fG-RBqU9#8H)X0CJj5Y',!KUXG844BaXF8[UJH +U8mejcBHEFTZ+V)JFPBSb+*TEQQh0Gb16ilqD00@cUQI*BmD8R&4Nb"6HZ6K40d[ +BakQ#RV3iIIJ*aIaNR-ecBP%8ZHUB6aTUX`cQ@i0VmTSqE,`ARfQ0*cXAIlXB*,b +Sk5d`eL'6F-q*EQ0J!Z"fGFe6!,BE6hbDUrTkik3mCMmMbrT,(5klhaLU"aP2RiR +hUDXa!UEFM*49-VdXMje*cl#(-38U-IeGjq,LM8rYA5XDarKRk90l9DV'`kDmaVk +RpSTSSkPcmDl032`jFeT)B$%("mc)'XTE8SHIUXiC2lM'&MFYETjlq,R3P#hHjhV ++eAbp+Drj*L+*i'FZ92a&j`cc030l*rUJj2QQ4DT(m&10LRQckN@`9022[M&E4I1 +[$81rZ[RAB'XFb'XZ95h#C#2pD0RBN!$Bf"!N#Ep""!fpI2J#IVl3XRk"RrHdV22 +Cd0rmke2eI@*Bf!DDRk3-&BZ&`"9RD(rJ9,GbBiLUkpHBQamh6Uea0@r&YMpd"1d +Y%`mhIf'deFDJi'(()YAM6M@C!6,ZTmaT)[6'Ai,)5PfA!X8CXT*f@5NE#8!A8#L +K,&pcAZ0SmmG@RM8TNXe28aDL5#,UGP8rPE$3#e6c6aZbA!c%rbii5Fb2,%@3!*k +(JX3"NTTca2DUZAkEX+d4AR0pcE'f[AiUAAecMm8fdDXHrD[A%Q,M6qPIk8r[X'` +pBX0NUpKiKIk9AVRHXK8Jjaf[f3+ck%$)A+pcBH($`F[Ea-DVp+rdkXf@VFGXlXS +((cPkmq90U+VRp[dpUY@r(a3KQfpZ,`DqF))pCB3#L'RV2JYPq*ZV@j%pKb,C8Ie +4Hk3,5-kIA)SVjpdQ3Q-$64qDhpXad$60r0RbBf0Hmh[,Mfd,D0%iX[9B5[,Q)iF +(QZifIapXFm(ffQ'hqI[,AqX*E2b!rT9qm2L4VDr01JC8qZ6)$8!-Rl0!V@aZ,jr +`F@6k4p[Nb$kGD'QZ(XMQfIH&e3l+$U1XZq%D!(B$MC01R5j#fGBL#H,93(e*I*Y +)lYXQN!!p$4)b-NJT`KT[Pl0MZ[B@aKJN4RN)1Ap*L!pMEIlrjHaf-lEG)GpZ8"# +b**1%dN4EC,5bHXM!c#KBV#e%9*BG-0FN#Q$Y3@Z3!)kJ+TR4DUBPSG"mE&DF,V% +&fq2P-Pp9-,pf(F`R&Fb(9QG@28-'hR4'BHE2m-cNA&9ammIdXBkT#P@&6FdSH)- +Lf240D9+SKEUT!BX!`0"[kS94aLL4M&[*h%%Z"MMHdLkHYMM94[pdLee'Y9P"Q6I +1iCrI*d*f([cfHBR3VGU[kBlP'i2689`Eh@"ZJk055-SbE4FTYb",a8H[lCZXkrC +j'CU&K'Vcaa6eXLDU!cAm9LHDk%*YUj,%&VU-J42G-Cjp'r8Se80CPfJS9jMr33j +'k4Vh5C[YUC!!"&"fLLMqkHKR6D6ar"T8S)eCFP*MN9eV0)h'03$E'p0MlI%H-3, +&$@-aC8e#I49bhZ*K0'CdBK60ZFA&1N5hfM'`j&&l3Jik2Cp,9C%k9S&#a)LImf# +50Gd%bMFk`b)388&43Nc%M#V,CbK5e14'a)X8fJCFJUBHZ$3jP$I-`F"eeLM%aM4 +A*SISqUclB+Kq`q&aQ6+Z3G*2iR!&$VM42&hmk2PCJNc62NXpd(acLKT4T,B10*G +5dcAJRb@Ja2&6h9#UQl*XIP&PLbZ')l2LYL!bT46Cih'Hq3j(TH5H`0l!8i200kh +TDbjpDJJ&mm0,5P!`cq9&m9TH&!Xa6h[Yk3jF#k3Sfhkk`h+LflPA'ST59')PI,$ +i851bJl`d!6H2BSk-BH+b,Fk9AqqJ,DQG4b1$Hp"#81d0BjYCkGMZTA&NTZ6[Fp2 +425)b10U03fCEQENH!%Ua3S&mDk6!0-%3VH#)QKLLJj83(@K-X%XkfDADU9FhfZ* +G3N+AN!#eHF1G$-E&8UC'UVC*CE96cbeZ,V@hc-KVIY`H*3#!90Vm4I8[V&j#rY% +dLLbRKbl#P8PEA2R#[PPjJC9-`2m+6!MCdBe`0)*"L8fb`rK+E8aKLZXN4TLEQYM +NfkXrHQ95b#M`%-!ULPr*&Ufr!#*L3",`bPlMmB0CSJZ#%L5SI694[*LG3R$a0-A +EXq9ecUjb"&Gc`ERL4eV"K#J6#qB11+GmU442TYfUckcUiB'E+[8!&$l@2p6j[*@ +CUfSr9I8dI5%eDj0f1SET)*[ZdNil-1f9TXmB4'c#Y*Y0'd5Xa,5264Y%8!CQP5& +`%(LlrfDT-3qbC5'@(l`e#"*M)B"pFZ13!'YMXm5q)6(&!C!!G!$ZZ`XHS1TA'@a +Pae"T!E+He5d45fh2AJ(`+iUI&K$iKLG+#ak!D0Ni"3**+m!J33$2,1(dfB)a3"e +b6m&Q+PE9`JjR!8aei8JKM[$M))lC6,QUFAj`VH*J#i"!@@8"3DF99a&SZ!!(DRP +eHaNEEAmRZk$%N9Y3!MI4VF6#a#k!Z'8JaY9$j'AMZl8aA2%**UT3p25SUU6M"5R +QY!!DA2ZQidJG1CT*K3Ymc`*0)qpN&aA5X[QEMYbL3XTB!M%c$HjNBkE1[VDQ@m" +3p!kjEad!H6e39*3R!Ul2f@YN5af!SeSf"1rPVS6$U#cfSKQ*6kYQ)++ULMD5H3L +rhD0cD#lEYK'ip84G5[+1bhGBN!"9[M2QN4fD1L,-Sr'QIePhKd8hJDd9fr!Mqjq +SJm#Gh,f`"!54VqMk`8M[)+C,#)4S3Y%Z*jhTlC'19q(5TYS2TjXZA"8ES@CN`fh +#Dipb"c69i8fEr$&rrTA)d25qR+d1-$[E54`KZDq-#CVD9`Ee'03A)UA-@+5b1&[ +JUZI+LZ,LZS6Qq8-C+-Mb&kP+)S3Q8!5KXEJ"P9H180h,&G%"-AZE[`3$C@!ID-J +Y+XS44H6N@@HiB([*[TkL`ZCjh&%6SUZIYr88P)5"2d%81+MqpV&UUh0'p)YCFB8 +Cqb9(*DX%L%40lmBjQ5#j4Fh!l*)RLDKN@P3)Ti'dJ15@#$*2)%q)+`4ilr-fIB0 +!I+"93Nk*r'@-Zb1@l!Xf9E4Q@j0J,$,R&YV`XkQj+EU)`$&9LEdGC['DULM2Mm8 +P99'11TVV(X4%"4BiNZ[MMSKH!%D1b*!!iBVTVTcU5*q%bR-ZU1b!#48j0MU`T-i +kX+6+R,C@6GZJ+KpN2"FfIC1KkKRYG[,Jj@i`,9jbPCKZ3$0-Q0j!3dcdiF!S'0A +d`Y3N-J"F$LbjDKeB2)aT[m2&+blrJB!aBieVbG9bANIY`Yh"TMaFM#l`%X#18aa +JJR1N8bD3!"@[A3la*KT-RlU@2%U!b!NpBKk('d6)bkHkk6L-e'A1qhFd%C1S')d +C&aIrHp8D6#bj-Z!Up"UB#&b$f"P&8H9@lF+l3#%SYj!!+YAPR62@[Pk*,HdT[&L +b#jq&M@P4K0-P#jd9D+KUBX*l`UKDi`)+LaqYQ5KHUai#Q)!#VQZYQSSiFqjf,`F +r,8"a'Jh"f-8VfM(KjG22m5TemD0U0ZhQdl9XfTmQfVf%B[3m!0E6A)8*S(BHk&* +8')N4Jp0JYK`)%!-#FY-"`9mJUZP&G%"iPj4SZP-(JGV!NT)h,36-%(PLU,6`lih +HkKi%BQrK*ULbMS`3362T%*TZH`ZQVNT6KF8djI4q$J%8X#G()r+qX9#!QJc%JQB +#VX)&2B@E8Z,,,G*9$8Fdh6P*Bl`'diK+3R@6Y,9LMDCE)8M`TNGNk1('!caE306 +f`('H90+#3k5F2IJjLS-0($`DYR-bmT*(8F6IY!D[Pa``jb)`JTN3Q5JYh%6!'U, +XU*j881M(6e3L&A6YMHDCqTU,)'V+1Fa**9$leh558!#0)Q3aUKTJ6PPQ3V-hc6K +*$YZYf66X2*Jh5-0f+Y68FN5R[QC4BA5bULhAj5f%Lb#Ua-PpK!M-Kb+[A5GfarB +USmd"8mmjKbUYGZkLSKIQdR&,@ki3KG&VN!$08E!-dmpG5m[6#"JZY3#Jl`)CEiS +*5-[[*J1P#q$+eP0`KB+25pL6R)M*AbL[b[h+m5bUN!"&ck'B5PdUHfZ`D1ZKkka +#!ZM+5[94BhS,C+P,T")[#VTRKJdU#H3kHZda8M'#p4i8*dF*r1E"1QP2K,fBXE1 +6TT@"+'$M4G"4BY*(+B,DLI#J&NL5QRJ"8'`&)&Um"CI)[D@&SbHZS*NPa(Z1AUI +202$f+c&Z'!"9%0f%j0Z[D,Sam#5J[MZJ2P4dJG881+*%NkPS,P9#X49Y6"HqXDr +Y$pqBdmr-8'2Y+@L`pK60,1H+1@5`9LpY#U*YF!#RKP@,2STdJNF5@SYmbm5NbmG +QLMFE#LH3!2'+E(%UC&$XZ,J!LF$h@ZH-,4q#`#F-lS$F@CD$P-C!HdI!9rqXdar +Y%+VJ)E[$k-G3lHN)j8@pU,bAiZ1fEm,VXP#@Fj[4TQ@ZXUmdHSPjZ#2`[@J3c"A +iZ1hdZLa`fSlXPVF6$)NMR62q8(UL@e)&Mib%j03-m*%hAH8ic#NNGeY&p5@Hf4c +YR1Y)#efp,@%E%c9I$LE-@!#`r18FTjUbZ3$mVkfZf3Ib#3lRJ2J-XdkBBllJUqZ +3!0i&3r9@ek6,P!m#G1'16d3)#AS@hE0A936hC@T+Vh@D(!"HFZ9l#,`2mDYXpe$ +#)Jc@*FkeBK!5SGLik3)r%J)cULe-Hc(Y`b)S3RMTMAD*8-#DQe4h"D`4ekXZ8FD +&9ILlK(GG`ZPlPB6kSfRl9+'V*kAK@R9AD#@b',kh!`9mJrcQMj'T1R(2K%JkZN) +AEr1dG!@fB`rIL),iB%m#mCYI25r+a#hhT)A8SX+4&Yb9eiHV+h"mc13%QEP3lVi +K,CN[2%CrEFcHHX0jq0d0ejEC4pii,di,faYlHb2pYiYaB`#[IIHF"hfa!JSq)2F +Ri*4pq*2lUMV[)T1J3PA+KU0Pp@+H%9F"&mXSL,B`P84GV"hCDV0XBrHp$&I,k1c +j6TpM[V-PYQZS4-KrR)[-4@+cF,F"0EN-D$lSR![f5+adIfE+'96HXEcMUHHab$M +cqc2lXDJMNMB@bqh'Jh!1%![qR`bC&TY[1jQ"4@$NH(V@E9LBm[+))C!!NA)mMaC +e@9M43V$rB%a(%iKLScGk34a%%V#@k)A3IJ#qhSJVjP0h4ApjJM,6Bb$CG!91BlQ +E+Q#+-J`FL%4[`1VXBT'f5Hjq"SAPepkerE$(((A&2FlKU'ZIakR'TmYCJDNZZ%b +)@!@Z64TK$XBJQ6*%#5QLFmHP4P!V9q@5i&Z$8SAe3ThGKb-LjZ2ZJj442Ndb"M' +F-,GiR+,SMYR#[Z[LMf8rAXlQaZ`VmlVpDq%bc-eM1-`mr'3H!)h+`&iPQ@)HN@L +kSMq,iNCR&*pJRRI5*5&B&&-L4SdcZ5[JIk%15Cdq3#!GE[T!MS0YkHq@MBaJ'%@ +Q)95MpTKGkKmiV%K)9i'2cqPpF5bQVKk,4DAKXM%F'8X#a6K-44rFdB#F*RHrJ5D +JD,Q"QX8!r-3)IMi&'$PZ(+Q149fUDIC3Y5"$fp%N2$#d&ZDDNY3,`&%rNX2!+3+ +6H$N+)hcjXeK)mjRf!Vq3!'qJ"VF(JU*[[#aD6HI&0Pc5i`MB[G@K@+Jk5+,TGD) +*cNAh*U3V%%a8p9a%NU2S&m29[`"V"E'Fq)!c0(#'&XkJPVC3lEF2iiVakULpBQJ +cR'Y+%8`@L@Me,Hp3SM&*I!8r2LeF2$qqYY)9dLDMf15Yp)S(1LLSA"D2JU9R0CB ++iH'-flK5HUVlT)#ES)",dHP&4UdIj2j5"'8NhS"Ca([3$%0L-k&@alcUc5+!iVA +%T'EXQZE(B!$H4"f+C6r2d%1a`J#ijmN9T,QDP'Uk9Bil%j5*D22!IGh[(*lY1JP +(M-N*TdrYZDXqYNZYMVLUHr4&#"#qfaU%@j0Dp6JDfRIA6Xd5)#G%iEbrP5F'38D +5MD+-0mJ8jR3h$P@S(Rm(c+UY'2K9K9c!,eBcR#TV%'c$URPJDe'p`!pqKFEXJKr +4iGp`TieU(+ibMK$CJ+l&pBr`DchDDp8E*U`fH9fL8%Q,GmLTEKk438&BH)'VJB[ +M)P"LfAAF#9%5L6,!lKQJLjViKPqN3rc9,8Kmi-8P)b#5HGJe,3U%TcM#DRj&928 +9hka2[eQSq!@1iV!@45NC@p8lG'JH2r3#[p+!h0V9eE`+pSN0BMHYaRlh1m5bP5, +B'+U0DB0rYpk!q#DhFQ8p`#1"'j1aM'e5E50(G8Si4)N8T%e[,RI6$b'K+Q8$*%' +)U`!*Xd@Im#lUmSQm@96%hMNS*IGU'T%5AT9m)5AhiU4,0mKRkq+8,6&LLj2C)J( +3R,dUj5Y+USJ'eJZci[BS%4pSZ$da+`jR*(pd5286%*@[R*+5aC@5Db5DAMH$1Cd +cPqSc1+5X)P8)Vdi61ed!eXfB!#,bZZT69L5&S`ZEham$mEEjl9Rak#,8TL&9XAf ++(i%iPLKKGPFm9U'Ia*CfG3%GHfJ@#)Jhr#8CXrPS+`!`dm+#i%0%q1!*1+4%*qS +`CA@%+HY659Q2,QI+LNS+DIS8)(fpAMfQGbAP&-jA+UI%"p5(9(qbYfJChk+QI1% +RT$6lJA"PE@r!BAYjbLUi&UrD$-VD$J&fC$Sdrfc9kYQq-&`pMei6VKi*m$DB+bm +@15QTj(8i![!-M'2'(DPRdP1%P2b3!!TY-NI*d5`bmF+Y2%RGL#d`13((-I8[rA` +L+8hBYaJ$#P+a)4(Fj&*eT(H@1cSN!PPdB'brF26QE%S6VC0rHRrd#M)0LBaE`j[ +Y2'Y*EK3q,+D`3+*Q*"*6Af-"ZDihEaU"kZ1+jN283pNd9+!I%#06AHj0ANGI6L5 +k5I6)`MkSGYH%)U,&NKCSElYfCZ45V0A@eqTrGBP+95G'EN$HNeXFcicLFq#NchX +$NZ1*b+9)(bU@@hGicCr0YZ6-aI@q592Z)VVBBp0Ir(Qh1HpeN!"!*[Y(-j(&8)q +Ua'GDr(T*E"081["k#9bl%2&6pmTaHiXd*4(MIM%AS)eDQX,"%MP1ahLcIFISllR +MQTEBlX!VC'FajKpkj,Mfi%`j6K%(ac@*X&G,53jCGT8DcDQTrG,a9ZQ)P@FjPQb +&Q"CGh&l4[UKNFqZLNSH`1C!!Tq3SL&3J3jE8%L-)6ddm)YVd"XPIdBX1PYN6E8I +Ke,T)9E`r%(0SfI,qI5&Rmc)fQi+YY6*E`H1-,@PJ8`F0#4Q4dK%E*2$H++*(pq% +rHc4kK#mS%HV+k0(4h[a4QXc)1A1F6bBG4qdqaa%N)JhSX`&-6ZZB25FV3`T@Ah[ +4NIeQ25@6prH3!(2,lXrU!hd#581ji9rX(cTPRYMG1pMIf6IBhGEA'q%Z[ec)mD` +,CjL3!0LUK,c%K%bdp8p-IQHLFq+XAJ`&)S"4AVC`Xi@2,mj,JF`Sd+P%NVfUB+m +kfB5'XXD*0)bS2#mL-!+EP"d[SK1EaA)dIGU0E[P'DQED,P,&`TSqU(MUqSFLNk- +6N9%K4Ma$+CR(dc2Pe*aFq`AR`C6MkI"`PSqI@8TS&PR,X&eH)2Lf)BQVGmqd@-K +dPV,R)$$DJ`U)`+RAZ-"Z$GrD9DUNi*C4NVKQ4`eFDNY3f809ULmN!1-G0'Y9M5# +2jB)eQc)l$PXSF6S*P-4GhJeepC!$4bBe[81mf&&GXCC"E%@Bf&SZpK1klJ4P&#c +Ji&36&heC,rT`h(i[!f9UDI%'#PS43P4j9Bflka-Jm%mBCm2TI2GR&M3BpJ4L0R, +&,4V"CYZPV9-`KFK,q,PLM$BpIcLqZpl5SlS%Gm+!-l3Rm-jCdG,$+q,(#kN3rHP +JpbNB6(pE,dFG@I0P(#M8)bp,KC2k40h3EdA%q!dTLMMD*ATP)fXcqmh[pj@Tbq` +pH`0dK%a$BYVRNjL+lL1eG5#V`4KS115mbA')M[cS,&9fBL0$#*8GmU-R1[AfbiY +`EMJ9Y$(k-@3HU"-$f4,`)Qd&!5"#aMr8h6RBIeDlTI[-p`HS%2H6UJTIKkT@@XH +)rQf&'eLQRB4DSqBXJBBGU5ZQ!eNB5GHTQZZF86S(86*XFU)k+T6Bm1+qcKQlGKf +13jA4YVqS,B3#5%KcVp,Y'Z6R+0"A,81Q(,qH%S[Z%6cS8F,V&K"00"6i%#R6(+r +a&bXGI8prKUE6P+0[pda(b&R4(Rhc(pi2(Je9CRZ6$JiMDDSkLFCVI3$6I[J!94# +ED9$2q0cJ[Cc4p*E0peNKh(c5b9QaS+)R6XQ&(Dm"q2R#0'KbJl'qa5f*FYTiT,B +BMQ$$bh$XJC'i0%QZE80`lj9[Y&f%S*PU0c8rF@%A8&!lGr"SI`B4IS`L[%IBC8N +NFm8JBI0'iPa-+Gck)%B5`6H3!%"3H3JCJ9#qUSR8"+EA86c!m",AN!$K(3LShAC +I$a`@#ql&&Y6F1&SN`49e2A'ZfYFS+q0@%,3'cP+(%HTLCL3!1qI$5-lfG[C'*YS +Uf`T&ebiBLdGIkHm4MQe#)kRH2[E1T'VA`'d%Y(!3D"H!PIGli[B4Z8e6Pd"A#IU +Lk`G%Q(+EYJQIK-J2*%68U(`YqJ*Y)49!+#hk"cq[K),Jc338KMDMYrc#F$N1pr8 +16TaU'k9MR42I`G(KUIlFp-b8h-ad@31McNc*c%h02--&UJN-YNc#j4)rbCLDXN# +4D#$k$K(HNM'[+GF!i&r@p%Dq-pSp1%N,"8*NV(!dR%D&(SJd`P$iA4Sbp`lGhYm +jfGmR"6HiJ!A&Z&63qdeNkK@Ii2LEp5QKfE6i,$h`JZr0Q60$[!!6X@h%`LmBC`% +GlV+hC2'Sp%XU4!)E+FScSFJ@&"IeKN"rDE!l-Y4V3%$DX&-b$)"N&5qLN!#SB%K +Ak$Y2q$M5fpBl-4Pfd%T*9rd8jE[VHB8BG@5*6LFjJA8fcc0KJ%M9k,,e'frVKS$ +"ENe[*ppiXIRqEj!!f54(J)"N1V[V(HihUD#@6-L[4PDZ2E6RVccSS8VKlQ9`-d1 +a8S(QJaZ"4Q1,%qMqc*0MFB"5EdY"b2LR"LJLjFECVh&aZ@Uh0N,pXCL*h&C1KiZ +cmST#qR61q*ASLLYI!`KS+1rkJM[BpAEPp8!hqRH$S[-([DM#Y`QhVFcV8RhSp(h +2"9GC+@+1)f,31B9kLel"9''EHXrfGdV"US4("iVXJJDUm[A94Y'9(f@VYP1eU$H +RBcMBfpR(Ma948L8H'%dp4FAEAN@R(4B#V)dU'GPG1KFAkT'UZk,I3RK96rc0HNV +Bj3$3`BY)#6dl,a!AL5PHh&*L'f6X&"86F'jb%B(%A'm9FTa)GE8pR"NA[[QCipM +6-h%XZMZX#%E8[3MPS*P#9b'cS,0j[N&CH(d-L%(a%3eGdL6VXJf[jDKGLa)UPEF +)M2ceaSkidGY`+%GkPB&AKfAhjaCXGT5Uh8304k,Hm4*(2r(*5ePqcRSb&YVfUMb +9El&+6Q!qr4EfHC[R!b$f8SFX6%NpT+$#*k(mBPcJl8(f2U*X(%@5[QLF3XA,LmC +4UX#%2LLcLK003$PqCk+R6[FENa21Xc,ElM#rB)SR8#)NTT!!P@V[L8GISdhDTka +6G"!%d&B*1*3YH`3ZpZJV69`-mNb0i@,c"&`a@&&-J!LrIJmT$XVRi0K1(JA,T)X +CU2-e&-8SqQ&@89afBD9P2!kfNA$NT)j[N!!&GQm2[9l*Q6Yi-Z@G%T,+VB&&jL` +I9GiL%q2TL9ZMFCqDMTjMk24`92Cdd!@K(VG-dIBDMcDiP1T9`45`dD!!2GLLe!# +"XNcpT,K4YEVq%h*`M&J1#bZKibH3!0CJYM5mDk&HX940I$c8VINFe-,qcV2GTdD +e+U8!03Ah),ATV,b1`!5lc[%5&5YffA(SD9TiV!4``EAUYi-*G*Mep*(Cr!8hrl2 +fL+lhaMmbK[CYF9)J823C81&423cRNG"Z%VmbBDCZEQDrI#m*TqSJZN0YrZb6)eb +Spr#BkLc%SMXZ543R4ZV)-6PFT$3jpc*-i"N15#$V"38)1D3r)c8S!M6aS@%L4"- +c$"0"QQJd6(KTBKiAMQkHN!"Xl*RPPfZ1F(+9j4dH54j&*&dkeDQC',UpYh-dmVP +HQGmJCDU*(&11-U[#PAPr#90Q9CJbqr6+[2qQ$NQCrNV+p+p5QAj5jSa`C3j+JRJ +MBR99XXPYiZE,9KqT%HBeD$![!r-l($$hE$%!jTF(*bC(%9+C&[592DQ"9jdQ-LZ +AqPA64-[8E&GZQRj3-c%'S(p2!"06$@Ic)L!XZ06ha1$1#2FF!H+&%"9Br"H5#2U +mJ$F1@cM,*Z-U@'caKQbUIT!!E1pXE*NNqQQTfLC!UeiI$+lf6k+4hBYU[VYcp`3 +$b9&9"rfXQiSS&5mmmYSG#hRNV86"6iYK(RNSSKmi6*%hqeLfS5Vh8'&Mj3dE)JZ +JF+f9#Ji@[1X0TR09+Ykq-k%a++j)EckmX`a8EiA8-%LXii@&alS198FKU5qmDQ+ +)YM"%NkLQ#KAJ4CCTm)$JL,PCCA[DN@hIcF%`&c+fKMpa28h0JLkDmU-K,hl"+dN +GN5lT5RV"!PCl#lD-Pa)30cL1icSh0am%PTXXXIQXL9(K'!b[D1e6V-$NRGe*cI# +HZ+3@V6&",Am,Y6#Gp2G1'Z"B4-p101&*L"U*$%Ie4%9Nb1m(X#e,Ve"S&eZec8! +hLR5D3[(k2+kDdMCZSj,kFC(K"RrCGiiEM4GbRA39-`38X6S,%8P5MERT8J'rG3c ++Smf-8E%X!9,'0jSkG,pa,,5M!VB)5b#Q!`-[M,Pc%E)9QcTkd!8A4%dCr8dGC", +E"!QA`(pe[B+F-F6)'AU$P"Uj*!T0)8Q8"#BC42&Ua6I!'jd%!M0#aT!!PT!!SDq +`Si3ij#a(TEebY8Ul"eA4U0A23,!5S&bKh`LDZakU(P&K68'GF3AbfSS&9c,FP5# +#Bb%PJ#)!3'AVLFH58Y!T09)e5D)'Y%eP"ZC*@1XE'"AS3"+45dZV@Yr!abCm[&( +H3FhmQ!4X+&`(rr"!H2-IJ%3j66Tq33XZd2%,@UaUN!$TkDG#F9&5V'3A$FG@5Nh ++bQa`r0K%$)DQj(IlKeE3NQ6A4R(Y1,mfDP9V$5A)VP,(@L5#Q#6q9e8dU9Fcb($ +PY!pA+AMG#J3[8JS'X,&Dfj'*6@V&*VQ5r*`-iQCL+jMBC*b,rCUD*[AJ2Sb#3IY +-Q%HVF!p(d3"!5B,9`XF%Mc1&HbUciC)LBM!!U$mPK62iP&ddKBYDq896r#,P*9( +4bLlaa#S"Jp)&Ahq%ASB"STAKX2@lD'69&qfF(Rl4"pU0'-!peXbZFAVi0AjF3d9 +"NSQ1aLVd6DKRCY1%&*!!$[82mGB5%k$@"L1e9BNL-['CS#N@M"6SP9bP&iBLmq2 +qSE!5Fle8-,jU&6aD%Dk#KIb5e8VrpEYXDY@A&F[KPhh-e@fSIeQb%aZk`+"%-4A +8`0`[dX3"i6LEBapr0HS6rh25Mi6G3j'U@!6$Z4RYF1J)%CLfYRd+#6MX88Vi29S +e1R4!&E0&VN5U4Lq0$X@),FMC"'HVN!!5L1qZfNf-IQ,FI@Rhd25cH34fYXK90MF +bXa3*4PEDaK4)(4$lKFdGk@dBc",q"4idIp9H,hIDjBQ3!2lRT2#RkC-KJA*A%4J +2G!5k!S1"dF$*J$'`*h!j-#r3&*JHH$p`4f"MS$43'%U'2+(fd+D3!#QN#GdEbJS +G#0@&[JUp'*SGUJrG%GSB+Jd9"T2"m@"(X#Xi'"`0fS2T`D2"KF(DB%0`CR"ZF'Y +`TcIN9AX6hNhH3HqSeqj0paleeRJAH&rhc[$1m9lVhHcGjIDl4p`kpbbhfEhERH& +1F9[F9pf2Z"HjkpehZ*pdlr,jIF-qR@q@VmqhfhIHGm"hfEI!eq#EkC[VfqVE@HB +VQbT,P0R+$THePCdZ1eqf[kbUE(PCGGRXX[UbD@8hPpeAYXXImPIi4rcYrKhq`hk +(IlIrj&5Kq!Im9)dq'a0PGMBma)IjE2JD(cVBm+Gm1-D'&rQ`K`friN1C$4rK`aB +f[*-2[@aB682I,MDXjF20E2JL(pl%KPrbiGeXq+pmq!8E[X@($@cBc)HeE0M%K`[ +CX*%2Ml(K%Mj-Bm2&I(L1$9rR`a0XZ)J21pR`E6jdXH(2q(!('rk5$e[CF$BI$V2 +K#hcSCm2T0(5AX1(rjX1(f(!'(cl1K[r'Kh2Cm$riF#BEIX+(,f#j&6m@8ZTZQL) +&%&-$CeM)KPc&lQ0Xb*AU6Q0$VNEh1B@S@LiURc&)#1X0i$Gm1-CHFJ@jHpL3!%H +"@fDLUV5L+KJ$9i4EX#'2)ZmcM2fRqLei0l+VMR''1pK`2KqqcpMVm,1!XmpQiRK +dH&p8L(Z4-baA62dVRl+`)pbB[#PXb#2#Qk'ii#KRMbLQ,[)TPf,U!cj&#[J*+Bm +,N48-5cL$AJ(F$,ek"I$)$T)#TZQ9&hb5EAFC(el,KXrai4afm"rjF!BEmS!9I*d +0ZIN'&bK3Q%FS"#pMq4jqPR1'23UPe('',-@4BhcU0"2*!dZ`M3fj%3B2+iaP'@I +IaKKi`!kZC)KcK369E2JX(iEBm'pT'0U*j6rV%3Xp`)B[mH%eLQYHSQY#lbQQ&[) +TC3"iK%r9+UDqaDGU&&2cqG3HaG4rmUNXKYE2qGAh-SE[iZF+CfKM$&cjSF--84i +a)4YM2d*'cpP*!AmJmpFEG5LUZ2,ID#T3STLD`DFfXf-8Q8Iie,@++@k1JIF9aql +N8rS!`&%2[+KJi&%I@+kBiN%QB&&-0I#TA,DpSea)M!f[m''%$Br`B4mEAZ,$@@a +BaiFk0[bB$dIBm#SI4YR`!aU+)MDmc)GEf*!!4cY(MBB,qI"kTS)[5IQ%V0!AJ0a +Na!YX1)m2Pl(K0rP`2K[q*aqLLaVa2LXSpQ,a6kb)-E)"99FC6*P8d1Hc&e6`Y,% +"LA+a!9fjL4dJ3p#a&pr#B*`0#"%e'e!ekTek2r*Xj*)%R15*EpXj12-X*H`PPk@ +`K018P#T%LC!![(C+K-J"Q*NFJ,RPT2#fDC04Mm0cBM4i2VM!Dj,q"@IcaBLh"`F +l4)!IVHC(iqJ8laVYdHPLJ6!,MCL'(MZRLGdLAC`APd@MH"($Nf)QNL%F`(+Db"A +(a!Na4hb#`A,4`#HRLIR$Bq*18L`@Y9JFaH,,f!&mASbPil-XPSY28q`m2XfaNrJ +XLCh!jrABERaq&Y2Jmd,-JFrrM[AKmaqa`rKm%Z[#Tckf!jr2BY[`Q4PVaqIl-4Q +I1E%4I$k-6H&6'+[!TcMQaqHa',bXe8K#k6BV0Lf"HrY1LT!!6J[Z,3[-"9Mh1VC +F"lIYQX$0BRlJ`m#eJCf"VB(0JG,35P%GmJ9+3JKBSLQd-P!$`#mDDK%0SC8B@N5 +pH!kUZ%E-&4X$mm9Q85bf!)6d"ccSFdJ1k-"N#lJ!6*S$q3&0i,P!GH"m)!DJ-Sd +,q!,)`J%m-!q,)a3iX6L+"5Q4JJNTX3S,8Z-K,&+`1)E&15aH`i,8@)I&D5aq5S% +6LbYBN!!D,f&K`J*G$!D@B[%a&U6'UeKdB2%"&JNXDLK`BR%4LaBXPQ14a1)P,%* +B,%4NPQ$aYeJmJm9A@0b(aAFTF')a(iZEX%#AQq)1,1CKm5%@hk6!LF8M@-c!iPY +Bc-CL!4D0@2`'LeSXhX+#&,!)#e,!fmb)[Q"'p)rFL2k*'p(Gh)MqK4[4YGb)VZ& +'p!3hSJHi%Gh2M@Jc0k,IFL1kMa[4VlN42F50k'&Z4+AFL2l!MHKAh)LHi8Ed0@j +%1r9'&23LiFM2i0EZ8iq*VdXZkk%Y#X0DlUbJ$JEii"8RQ[Fi2Sf,qJNAGD0H9'J +'4#eRSYjRSTBT4"ec*L$+c!HhmN%VIYVadi-I*,4bbM%E41lLfrJfhmDMI"XPI"[ +Eq6B+q19&r(+9p[,$Z,bCAIl[l2)16&VBj,qab@(q3B*0C'QMZ!PjKeZ3!(aQ+a) +i9D1VDU$kf#@1FJL*[)+%UZ8P*0$UQ+5(Mh4m6TpCNiE2k#RkH#B0(c00L4SqX0& +(A+CMBZ[,&XlFml+&[r4,(kk-$kRE0eS'9cScq')M1DRaJbp+"d39MUIT"hM9pV, +PHaCR#KI`IjhlqF,Ml-'VT@!k6"1h2!&Q-["kU+UD'HUr-N0YC)DkQ"PU!c28fFa +3ImN-G6Sce*pc3hf1'qS-EUMr`!heRlQK[XF0pFIF81Gb3lf,'qSGh&$rb!heHQk +SIq+'qYmmLQrL8A`cMq,rbk0i)irLV6b+raH2iLGC&*p!02h"VUNF5G&RKAMpU(- +EAaaaVU6&PrrS60+LYKUChKi)fF,&rT@,ICb,r3X6kq-G)3P&eb9)6-mI`5+4#N! +Q%#Yj0aC4Hj5j0e(b""YeGb)G+6K'cTqYc"'%-RS'cX%&IIiljq#1rJJ5G0I+MYU +b@C6KHfhdR+N2(EAjM01S'%(A2AhSZ-H%j$%GiV$1`KFpl4C+kSl1c4p"BRJiAKF +FJ`2B-ZTS1L48M6a4qQ`DHJ9h-Mp@(B,`Y'LZH8e4b*jbhBGa68q4Ykh(,`VQfA) +,DK2qd52TDjpSjNR6Y5+GAL64EdF#aQ2QHUTBc'ZFh[h6BLf[j"BX%MEGSS,TlBX ++CT-DU6VAZkK59U4(TXF*95-R!-NCRd9#cAQj#DMa@Q3#N!"c++Qh#!53!"meSIZ +a@)8Fr0G%+a+3!-R"1l'3!"hkK'N-0*!!A-DDm#U*"-KUdlZFZ)0ZEhKL+M`QSeA +4@828ld'd)42Fll`h`ETYL(PEhUF1lp"C6$#aGUE&[J81VSGHVFSAaRMp)IY1[0U +",L5pFZLaZLU,($+l6#iXqRAp0rkc,[V,pc1Qj*RKrhjfGqC$)&$E$!BMMq8SZZY +#G#5TLc"k))fqSbeYadqETHiUN!!iYA8#REqpkQUY`m$2"dGEkp"p8c3((Dj3jiM +IVX[[PKhSeJ8GCI'*mrRGX5*T`pr+cXj)cmjqHFFpk1$VKRY1(Xr)cNa,c655Iq2 +JIURc9Ze9RJd92emTrZr#*!Y*Q*6JK*+IF2E89E+RG4lmc`I2(bq(DBLi1011cS- +,P%b90X8jaHS+E1Rmh43B[N@kkhK@9NiUZdC#UU@2@-04el)15@V@GhJ#*&C122b +6eYBkC-8JiHYf$D&bSM[(6d-*&@9(5R5)%b+*f5`GjCf4q0%a4(GP9NRmY!9DmEB +0%+q6MPkRq0(I@IcSGB[rPiIdiJ[%HSM(Um*Lk4M[U!8G+H5[524q*RT'3A5p4-m +S1#`G#aG+"3B5qhdN'TfHa%GLQ4bSD4Decdq)@VNI6S8VRcH,"DXKd!&4SV@12Q" +UaB2CTU4YPPbcBQ6JH+`R35mZQ8Z(T@5HHM%da(96NNX[&$[#XeDE4#eE,+2&VH5 +DedK,3SmG@X!28GGa&SNGQE5iT[!mNYm88F(,*Q[aF+X&H(c95#Fk0)1lDT'#fFL +V1I2cB*1ZBQMITfqS16UJT+5M8G6D[5B-q-38ZS0F%'N8#hkN8DNQ'hN6D6kB4Zc +F8%SfjP-5m4SM28aPTrQF&Ue#IBGEq&&"#&#D45J9-LDMBiLFmj(-j%ERS141+jE +Pir&a5,cT-'YiKZrL%L59hel(R1iIJPPD0'""TR!%bZFG9NU-MaDMdPK*$fTKAB# +aDKp1iKPbCNT+6STm)9IZ68XI[*!!PGQIDcbB2TQ1PhP,Pa+,lL-KhN!TX(5TYPa +kiieH`lUr@c(5CY3`p5&*MYUQll+[RG`IN!!3S&a9lU#ZhpXl41edX'6aMZ"*ZBR +EU9*"eMiqGd(4Y,JS+ASC9h3,ZTKEaj@pQA8eX4cG(5#a,h8`))k5))AL5r3G$eV +A+G4HXJ+e2d5CY8cYI9cYZa4UhmAGR`eUceHSICGHlE,d%$6r"LJmpIcaP)jYmTN +,"c+cdcrD)1@V#LPCN!#835C6GmJeF18Ham2ZCNS*'lDAjN[)8PFK4Tj`#SLYGX@ +T-jNT5XNX5dM0%eGT-j2@BI1ZGJiN1NGDEq0&!d!G$Ua%V8'H+!SCl(*3V`!*8'* +Lk(KAZc#UTP-A+adr'P+TQ*!!P55%!JCe1D8A-dcQqbbCEjK!J#&KQ9X'P0#j!b( +"91(AUk,N18N9*8mb9E6S95%cd(Cpe-%ZpSGYBJFkF1)SVhCT(l[8q$Hje"!&&*! +!Q,+Q2ZrQc[N+PEI(BITUMU!856'kbU!d#%SMTd"*CI+E#8hL!V)",bUlbk2#@cr +"1llP5BB-hHCTUi*fG#cS*DFSG)dE0CrM(A#28b9!PkkJ5UTdJD'+%S-1NGpYP`E +$qGdS8*'N(X"-k1+Fm1iBHC&#MelebT3B2S"(1rU9AIlaV1)Qi5FhjI+Ucjp8kkY +2-A,Ge5F1pH$3bGBk8SEXB"f0YdSL[Rlj1MDX&c,#98P&PAqp3BdCSN9#Ya+3!#& +PcfF4@P)ebP`$r3bjT+%3CLUI)8j(B+C@kXbfKJb49F@+M'(435mU(pFhrf5rqNB +l(Y+SI#&VP%-Mh1-F(RZ*FY+UKX"06$!DrrS'!BC6X5J(8KG,)+VqQ1%"Hb3J[bj +mdkU&+e"8K@PjZ*)8eG"QK@TJ@19Ic#jS$jYBr1hjKXGA#Qe54ri`UIPNVNjrC!N +8FAYX%1kcDC4-"Tdm2Y"U*S-Bk+D+"JC,kVIakQNPCq*6K3XT`&,(-Ymf-S65U#% +i,X)DJP%FJ4)$akJaL1STbJXmfR,5X&hqJ%pYelLY,ePI"F0Ap-#crP+H+1Ff!LD +C#MUP!)1#LJ9H&R$E!FK&j4BHR0GJNahFE!l`EPCeBBK*3GLb)T-PpiV@QK9&"k) +i@,q)*r[clckbh#)(&%a4-ZH@'L9ibT0*Bp-TFX146'pY6`aG4$U6LE8YedaDl#@ +*#ENrc#625j8D,k6AD9'$#PA(5#&R5rN,#Lj-)DV$j5Y%0F`93YXI9hD15!KT"a$ +dfcSHU25QAD+rPT+'UPS-Pa,SJ844'bN`k#m[QPRqj8Ack(*chNqq,d9$d9BbEkP +cqIEX2hma()kfD+L-YTLZ4&[%9Q"#QaMDlc2MD5N2EAddlkK4UR'Z4DR'2kY4F5E +IfdLLq"$3,0Qjc6$iqVf'`GG@9LlbjkV$LRb!G&+4riGjekPFFVkE4L+NiPP4!*Q +[UkKQKE'KLpSdP8VKVVDi4+F&TY#dJI28989ahK8@'(4HEp+#$BB9UG,&CHV+aA6 +K&kY0[ElDe$cpP05*Xa,d+M'A9pA16GGAYHJQEEfV[8I(TD1V4cJH@+!f&-N5!E+ +GZLPYQ9k9%@VhSX1U'GXID4GiM,ThqU(mlS`)&F2YjmMP8`iDM(9lPk+i@bFCl2D +VfS#d6Q,lYZD9)H%P%ijTp)9dE($kS956EM@4*3mS4,,LFrZB9L3,Q,Z+p#+9#Gc +e$jP99MC5GeN0!))bI3##d)aN93`[cVBIE9G8-P)PXIfNcLa(88Qdm)S$&e*&8l+ +,'!QBFY"MaJHTFdF+r#8f'4d#S[(#L`dUmX&mZAdjVkKNIY8kkE+[heG19A@lXNU +3!#9N!A+0+N!ZCI'0*PbrdXb"")%',3555!DNfKJQ$Tfq9$DrSQX9VQ#m1c&b6iF +E@#"01)lPM&Z6$*ceG&kN$XbFS5[2A[YXT1UjBhP2bR!PmkC9lVD!9h4VF'"'S%3 +RG!#U@pXkTYVG-kSdh5I4GHLebkGAT4EVJ[1AFeCdF5baLrEfj&HSq*pmPTUI"L" +D$N*pR[#Z#k6(S2B!A1dSDqZ"5fpdQe[AJDkQSIEjadJj$8KiP9&"B2eA5-M89QB +$mI5V3h,,+A5Iq0MLEHlTadkZ[2CC4*1AA4AY[*M`iM%pkM$ae+i`ULNHEU`d +2-c8!bYb)e$P4#I3!mJP0prl!Hif#rRL"k0Bk&19N(QSjV#0cIBGYP(J$aPF9IRf +l!0($,c9ml)05BYBY2YC82XqEbS@+TM)RG5LDbKQ+TR+KYUNFP-J6%`rI1)TZ+'c +S0`PUHUcj@D#U!B,2i3GGdUAT5H8AU18Xfp''PM0c-ml)"h-cdibCUHQC'9Qrhe# +5"5ZbS"$UmK$+G2'KZZdFKRiVVk)QUBS+!lYieH9(p%8cI,4%akFp@[$$3,)GjS4 +l(49rq@(&AcJJDK#l6fV5%8QL1Ub)@#49(Arc+k5M2-ZJK9qR$cVqcSXR+KHjIlC +V&4YlEX9A82GU0+b[86EIbTZFH2KkPk'#$D[Q(blCU"KX9JbZNBlqD5cmU+(L,Ri +SA04fS4Mi&3123Q`a#BKVUqp!6cjrE(jJ&Lh#Uh3Nhq!Ur!@4H(H!L09Uj`Rh8@$ +[`*'q%peiD[Spq+&K"@pN*""ScL&S*AM33Z),8Ff#8SHHP##Tq8,1QHb6ampNb[E +M&l*!F#*#8fT@j['8e3-%Rp!I@,U8R3J2%"`-ZVid[1(lUfe5KIl!`[8"JakB3b, ++Dk6qbPkjQBNN1$Zd%8k*P2%31#6JpaqeU!2P[CLTH-%%h+-&r[N@+%VL-&29)Mc +@X4!2'JmMIM-bmSj`P!fJ&fY3Y+i'f$K!2!caTQd+*ePXfcFQ#qeN*qm+G3BkH(0 +4jKh)QdL+K!)dK#+`'PeYjUj)CC4&b4pmacGR#pXF%U9TZk9Kh6a33q&D-M"LL*2 +bCK5K`a9$%0%(9P-,b+`"RU83)S""LqSch,`dfSNlC(pq0bGU5a-cHF1GSkfGr%* +UpNjp)UKEQIQ%L2jPB5&ebLUU`LBhBp+SR#TUN3*(d3kZ2*im@I[bR%3U+$Tm3RY +P`9Dq56h,P(5mB#G(T-)!QT!!+4SDdT8+-A45'8BFJVVH9"3Pk[)+ELh"CR[6kU$ +VLJSj$U`J$cLFC%B25GD5+(Ph)CTbb4"+8X8IXPC%UM#3!%J8*,aa!`R2+&B[FVH +(&EQ4*Yj*MAmedjj#d6M#-K6,09)k0SRMGZV8aNqNZ98eAUK#I+*16a#pUel"V#6 +DeUmb#'S"imT%*d6pZbc4af*9fUS3f4$N`LpKC+'-&C1p($9fIf6acir+p+0H6D@ +H$5)d$KZBmeI%V(q)"$)YN!$98@&Yi4NJNQY!0)a!8)R8UL9-+`(dMi3ADVJ3TJ+ +ZQ[!'16qX,MqLL*chd1#6G5XJV1Nh9e'q@9%eZVfBUY&#[f+J9Jb%NR#3!+JTeh3 +hA0',#h3V9V5qH5eQDC[AKJdA58dB-#`Zm'ZdcHm#9q8UE89SUY*AP9'kRPHVVrY +URJKd5XSLj!fZh4VUP,qBZIV385*-UYP%G!@"TM*"Z,b)B)mM`1CZeK)PpGH!f+[ +T0PbLUUe-N!#SI(PjB+%")G8"a4B9ekJ@K9ecpfT(&aI)Ub`5p&YlqCGc&G9S)8[ +%A%L91c[8SP$CdV!!pA+##YIq94CT'NhGkSJ8[9MqYX+99f5[908`Y4Gp@-jfZeD +J`+PbYYE"ARBTYMCFU4KdV5kXS(3&NA&['0UZkd*2UAaPeEaDGK')l`Q&djRmmKY +Y`UZlQ,MdEVr`YQIV$1"8P$U8ah9K"9PBC)cp6bALQ+aHY6'8&mP53Q[q)#p**EV +9!pQ+SMmm%PFG!-S2H1&"52Aq#JLS(MVH@[-+@#NVB%9Ne!dMZp)II+-mS*T0AIb +p3Th99,V%ZUjGRiddqFB&MJ3qmN[+4`k9L4kTJB"1+&Yj"pBGJCZ1EMfdcIe&3jE +)p#EFX9#V@`l9(!(KrdNj)(@*CSL@9MTq3D#VE4[m#4qM5Ne(K!5G1+SJ#(-95Ub +k@aH*9ce8hDNh%[[Z'b`MB53Y1*f89kKZePI"+0$h6ccm[ciN9jMIEN1&h2Vc15" +kEKBD,)CT%S0U$*KV9X&Q&24*j`iF-K&a%kr(CGi%CmfVF@,EhJ53!,Q5qpEU$Pl +kLYlbrbTpZZk"UpDC#kRC4"BjHG#HrD$HVf`6H49NTkFF[j!!IJE6f3E(XV$0E(e +r[6G6V0r-e[p$QdNYGc1TfXdB3#-JYR[LiFG+3C!!pG*#8jGIPiJNkYSMp2LKLrr +dVPNX*66`3'a-!'d2f+l5RjH%2pA'`4f#D)Yc6R4[+,)jClJRah8U2JcCdlKq2ee +2Lh"NmjAS*U3T"F*4KR$dGdAi`Zq#-*5lFDDNh)dcedHj'mrr1C@l3BB!j@l85-V +GU&PIjA+%rfc+A3q%pHJQk(+@BF+[C@"LT@[jTIH%AIVhl0+F-aYii@0ArkBAVNF +KSlr3p1FT,MK#IkG%D0-0%N+5cYHRZ!K(kmp4)+m2@UY@PYT+h4"f(R`N)bIl`3X +CQEPk59fTkEmhCS*aD$"9k*f"2&eX!hh)M!UeM`k[%6Xm`46hR#-1VefHYBDFpBQ +N,J[U`TQ4SEJj&cfAAiijkl[PY4aQQlKRJiUf@@FbFp06IKrQKUdRpie,&fh(Re* +4@C8F-*'80qE-6)H2mHm3U82rAekl`LhcDk0iQKPPd5(bd&%N2Q[KdSd)c$d14lm +(biR""bN+k5&[XkcSXQNS!0!'53l8r!p$`%1`5V-10rL&lBIi8lELNUMdR+bF"c0 +6bT1e5P&EbK&ed'KFS5KH0(MjSfiV11"+IkL!F9JLZ8E6K#Fiak,f%M"m!L*eh(( +0BS2F#fI+%5QCc`dfDBU)c*[bMTqjlF&+4C!!22(`%q2FQGfR)$f9%l5qU`aCfSX +S#XJG(d&hUDaqfA,Afb!B`)Rp`+KbqR2YLrmUPrfr'XTRhhZL-V,h&ki2XTChPGM +ZZ#IlE'CZCJUX+M8R)c0eIcS`4pPC6S&-9l6q@Dj)$Eq#`'VmS4e`iJ)!2%cQ[d* +h'L)8d"@[V-L+8a'pQU&8r*qU5@A&eLU-R[K68mY$C'Up%(Pq"D@K!3q0&+5!5*6 +q2!4N6PU3!!"&48&"(Caiq,iXDJEJmX#UJe3U+ejA,1VAjBJU,dMT4D',mS-@(IM +bMUGPCfAQ1Y22CaY+Nl#SdKGKa35m$0"$1)Tl5e@m!diS6%f20q811AJm!!qB6E+ +D'PJ-!1R"*GGe3@6SJU5[8eN-Y68iGMcV`H1r2j1GQi1Z`[H[%M[T8$X1SGrFR!c +d$lC+IQ-3l!0J2jKlj[`&HrSU-,ZJ34a'H$3L)%l*Em0!m'G2B1(KBRC3)C1l5JP +mCa&Z$%a@ZD,ZJDLFJqNE+%Y86[a`re8H50AV'e`AK#9EfP41)&d[8hR3S0kAZh[ +H"V##2`EL)KiAL$mR`L[rX+%Zbc[ahc([a"m`K(PFKf%m@+jKL28cM!Fhc$!Hh"$ +$H,!F`kJF"C[2DD1Jm'm3"BU#'!!!-!0"4%05!`"@X!p9#b`T!#TYFlqAGePA4&a +@)L+L&4(4e)aac"K(hrIGIFRcbmK-c8a"cLdB!F+#CUE2ZlX#)Tl0e"ScTh%FafR +-QXBaTk"a(+I-2,mDac`hRMXP-j!$)k6PITi&A$ahdhcrllUqll[1mehA"4XFJ34 +"%!4"N!")LQ4%+pE9eIeQr92kH8H`q"9S`60JMX1FKZN+`f&#B5l$G),THl$0FbU +Qb8d)39(NbGfRFV1$4eZ5kM4$qS8Kir29ZqTN)a!pM[p5,DCI*lA620)XScCk'Ap +228!I*mh4LU3mqL$T8ffdp&YM6,5Cce4R'#A4Mr%rU)r3GdQ,Y'`TRCBN,G!HPjB +DMdCRmF9U+8e2HN0l@[Ucm94d'Ap0R@*iS`rbU@S"68ZDVCQN`FETk"IUq$hU[qR +ZT)&DTA5'KL6GVpdT2@$m-rSX(k3HTCUNZc68!q0%p$&Z981-mZJrmD(UEA4(8V" +fA'UJP+5(Y6h53mEcdI[iF(@%F5Vk1Ak[HT)H6"UTlCIQ'MR4HrNhkQiDPM4+UjG +bDAl53Zf3!$621"aYiC&U*b-m1UU12k-Qdlq51QXlT'EUNr4hEE2d4b-S1S(IVQC +3[k5rDZp)Ic2bSc2j6fTrBf2dkrahDK2p*DQ[eLMYSTj*2pGqP&iehSkq`(ZVRaX +hSfr`,p9[k6G*hE@,dLH'1cU@reIG3[p)HPp,Nb+S4p+(@ScdJl%TZTAh8P2TFY+ +YHl62T!('9p%Vq6QeQl%LHK9r3[fHRNcUSLfAAMDf4Ar%rk2ZT'H61QMETDh82ZN +9l8fTSr&@p'VH93deMN4[i0I9YA3P+8aE)kfMUdQAY#qNDmEAdHYjQqSLCp*j6CF +5MIZLihLmDMH8D!Hh@96*TL9ac5,Cd23`P2i'b651$Y$MG)*Z8*e4*pH0UcY3phM +GL6SbHfS,m`*&aTMLCI,SF3G8Hr'-dEUffUaV%Nbd1BiMlKURDmm(G+fd@0GUBE* +J(S%C$D3*(3Xkam&8!M0MM-XqHNDYbfl`2*Fp`%Hll,+`"cL3!11%pA!X)A#&l&3 +`(a"fR,"Mf0iCYEVQJ@5M8,F8kYSi@GGNMkkCLb8MqJkqc2,(a*9"-8%4D8%*PMp ++pUrFXCEQq!eZ5d2bRKFXYpR[2)RJ2'j4-k)X#HHD-LeIr4MM$RSRCVpP3fEbUIf +@4SYEDbfh2(GiLqe8P'"UDmU-q6(Q&,+mjjL`X!hZjjEPCG1bqc+#,*Ra&M8faYf +8UIb[3*hDbIQ0'cFY"[ISh&!YKX9M-55lKp"64(4S(V)Bc&SmUXdMV[S+(XeMk0b +M@Mca"JQX4p8-$q3,6XM"%)bSXH6"!-E*Z(3JFChB``e(aA)+pl!GBM'&'bkf&00 +!X8'DS@)9lR(B28`JC`ULCiHdUQ8iikSqjRJaV9C,2mpk(KHN*RSiFR&1A1&FGD* +2*YGe#cH43&Ui+JCF',$BB99ZFL8b"M*a0Ek#dF'jUd)!0bNfJ9DjaD@CZ**BXGh +Nd)!+C5aLYhUHV@"5l6KAE)*&&5Xi3YQ5%'p4Z)AKA%iQ"'ZVA+K%eHSPXJ'BAAD +rKVLf(mDdpmY3H+(&E#PdfFf&C$&,A,JDeP%eJ9(aEcG6)I*55k%025"jS82XdX9 +'l&FYKC*Q,P5G%'%QYYeH+(SU$X8HXb*B155"3a'5*16-BU6D#UZ%5f+CZ+Te+m5 +!"IYiYAT9r%`+SLE@B4BL9D'DId99+-J,&FCP-G[mQS&8S[!YQM"+'b-32P&T-!) +2+!)j08C5-($0&5r11B-`&"C)+qKRX&*fB)0khLp!R2[lSNc9H#BA)UjS9#'"aNX +pJK@8khjfYYXTMXIVjI4[jPV&URDKhA@,8D@Yd&5e@5S+Xd)E[hb8YS(8#k2D&9% +*3'D$*%86'-NX-1Ue3ZL$!B'$&,0L-`X@%!XjR5TbZeX51r'E3ME!EM*FA&'F6,c +#&BIQ&bI@8H`-k9qR6DQ3!-r@866XMKHlJ2-c#T3GXP@aXU+FCmZ`I&D&h1Y9@jR +k$"h+pJX(SYVabZ#!-KD,*2US2Da,NQUh`&B-3)hVk1#0!4C96$+ji[e$e!l"*YR +%3!Q&$','CC'B,-8ZS@C)%VF`U`LaM[1-T`S[PS!1*U%0&R2k&f%B*N0MV2#3!%U +&8*G0l&G3-feJ&AM1p+M5b9'aQL1d!S1%*RSX91JKFk%q`%bL!q![p&J`X)L"m+# +La!SpLNf`LUS(0[8+1fCEi9MYf+,DX89SLB%$G5'8b4(b(0MZX!QC!'@c)0SPX4) +cM"pPGGi[6MKdaL+N#4N9kLLSP4i8ViH0&FLjcmP',LG$1Ha#$jX3LJUVaN1BL8` +5Fe)HH%+25@+Hd!3i!5(JkL@64`d6"q3"hJ0hjf%E"-8p+U-K$K3Rie#[Xah#Q"3 +d#qjcXT'I#4Q(i&,m%BAP%@AJF,)G3Y4jX6c"j@),%qrIlS"U6#G(U&m4UQ*)"*V +B8Ab&LXLJf-V`mAj14Db$c%8qI+T!Zar[*2Ih9Aib$Rq2*TUq+cQSeBe[#)ITX-p +!hq@1DmS)fT!!f4VVrXSG%46eMRV&Cd3&fUbV$T[J8G([l,Jd!E[JD+r`8X5q$Q0 +@,h5LIA$'V1P!Ad"r-8b`VRhr5B&@d`#$PkLDikUf+J@G)c#TJX(,4kVDMMBB0`` +bUaApBp`*P[,3S#U9SFCl4ahA@L3*5VbhhQ'mYabG(6#C@1HX1Q$PI#8UqIA0%IQ +aQ3RVQp$`c!b+8"1VZq"XllLN*MHkBc-h9k'&V0XKUamkhFA!H'mQa[(SciDCUf[ +,&kPrH@Ze+mSG"9+iJb*mL6%T5Y$#BFca&QKcFX6!Q(-DmQS`aS[NR2@3!(G4eGi ++9K2IkT%DNEmj)XJ5Ff[LBYM@1BhBCSITKUhTUVBe@ReLkj(afR`4krBTb"C$l2V +!F@XLI$LC!G'4k!`5!q0M`VK(JIDa'5C,elk+9V8hSHHEC`ZF3b0CJF4Rj'pZ5Yi +CC)R3mKNT3Iq2Mi*r(Fa@AG[@4h9Zcf5mL4P"QC[GMB,CRXm)[0liH#[i)m$VK1N ++rJK9fjkTfJkc,FiG83NlSb`Cp[cN`rT%N!#UI9+Jq(L4ilS[3(`m(%X-4!HdRJd +h[U1VkNa1QkMbJRHfTF!jZj+GYqA(ZRIQ0qq-L-VF(-4%'E12J581NPE$C1KDmQ) +eFAYQ9B%0d01#-Ye(Bc0MQMCRiMdS)cpcmc%)RZddCRFf3Lb1LDAKUKS4%j6CP&c +eGFm5%`VU1#S'Yr)MQ&4A8daVP$ZjN3(Ql%KMGJJdQ9@J65Z%+6*#S&$),TK`Q%B +MT(9L5fN+hU0H#BS)5[!&UCEJ0@fEBk*J0kh4B8aV4FFZ"XDdUaLMXNlV"Y2I#-' +hMj!!b`AR3lU1EGe,BYfA"-TT)mB#P00U(-B86i%fT83-M#Nj@"[IAkEXKj'-N!# +q@,XR6(6"-b'p(ZaTXdcSPeUQC)UlfSP0#6@QF1DHTL!p8a,33AUQ)$dcI&d6K2Z +iTLRpQ@[D#%$GZ"@QZH"@5+53!2K5UH06A9@V6LdcTKDa9DGQBG84k-!I6$eZK!5 +hA,9'+Y#'P[KARAVF[qT-Q&i`h@&ZacRUj9"6`E0$*q*[@LClDRYMDKq(-48&0I8 +RQ0l'8+`cp(M"J+(5Lh!B8iFE8i1arl8#E6V%6DmeKN+YSB#kSH%&eiC'YPaYqRj +MqR&MD+-aY2AUKLr'9mC*+q[dm*D9GAUV`jJ11*jZ&`0M1XTP1RcjG*6,p2l'd0$ +UUT[BP"qcFdG86""UFA088dCXK#!ZfrmZ1SYJ4ZRDkae8Chi*fh%q)cmj#Pm1bTh +08FP"EX&Y0Gl`kYIbVdk3!0JhkSdhcKT$CaY$!3C$)a8q3Z%V&"kXm&mSr$m+IeE +K2bPm[m,rU[$h&*l$X(h`qUI`%SArA1(2+0bZm&L&2mbi[eGiXm)h+MaHiCX8[PM +K6LDa'`[2X2%ZKIp$iC@-6eEi3Y%'jJ9-+0SV,SAE92'kk@"R@3SIc-5"qh@&(f" +l6M,88`Tr'fd,K3r"qb'6Hi'Y-8rKpbUmM4dN+RbY`[qZm2N+hk,`%)AhC#hm%@` +FcG+c4a'[FlZCaPk&4l+9TLRmSX,c&(jGiGmb3HfBLNN+Id(KIe2iFDC+Sm)I8AL +D`Rp8q!Q&IkI`Ac,8'DBF9NfZ@Uq@$Di`4E(j#B@rS[!r+rb5`TFUI+$#rm9dDQ1 +N[ihTp#&6U%$K45be#NXR#U1G`XmTr#f&cf4,5Nb$")9r`JSJ@q%G&'j9q%k&"a4 +q91%USmKdKIGAH&H@B*6PiicZI9RDTLLmNm)(X10lQDkJrS1-1ZmUr#'@KSIC'SG +BQY-9[PIKUa5q41&SmRbXm"X+rdEK[GPL`pRr'DC+!b-0%V1G3F`k4YDV#Pr05JZ +,h@*kB1eAUd"N!k2JMbb4Gc2@,a5q8Z%[-pBYM2Vl'1(!1P[K(4Aq094Ra4-1@3a +kBPNjc@&-&LCk&5Z2"a4HVr$R&4kQm#pC!L$#T[#c#KqNe$e&A)UfG!U20&e1RAf +k9qYJFqL4Q3ep'e0+ZUkHFEcRVQ#2dp8ZjrD%ZD9GPNmrqiPl8'hEqPRlqf@-c(T +jfq+Mh5r@&0U9Gh-lljM[2EGb5Q@2L)&jB@Xqf0Grir$XpPXAPIHq%"+)MjYFhkG +j9&Qh&DqGH6pY50(9GA01rC3j)Vh$pLA(2VpCCc8d0HR`-e(c#Qjp0Zf&(cEG-qE +kKYrZq8[6`ipeI1X2YrhmacZ+cqZrh[[(S'qHI[,l0rljhpJ(PPhlqVf6IhhR`8I +rmp(5hrrQflYNQq-AKrk9[2$JJ+qQr[[$Q,Y(AeRlkI1rHrfK4ejjmlXr[IVfd(' +*prebppmh$h[UL99r[[-I@qirF1Q,Mjrl@rkpMcqlFm'*,fqBVLP0lTGS&#p+Q(L +1Z3M1D"&mfD)`-6!@GF-B[Qa4"jJHaY$"UVCj"ebhj&MTq(HPV`qL#4c5SXLaC)b +,4N$QN!##a1rbQ"!XqPfkX@J%AJ@3!#pm9eE43ADjD!ikb#kr1f*mKfaXD,#U4G6 +$&-&N#bH(A!EEDm`&jfY-&IR8GaH0lqa'M@A56!NjiH@De%PD,9hc)d#TVr-6JM* +SDe"%rKF4#8%4E#c%IH#BY*d6RcqHBC($q'iq1M9LB#`fBiamDV%**XHS`G@9'M5 +kDd5q(+PUc6I9bmh(aLl`fL3+,'if&UFjM-AVdEm*%fE8A*j%k2RQBa0T[Na%@MY +MmA5MCQDeK'Z3!1"rH@"Y0F%cb&KDD03-IQ,#P`UIGikPpFC5015APU%2fLje'AI +4@YqANU8*aY*-ikl8LEAPcP8N2biUa[dVY"bApTY)3IJEidXR3aP!bY,jBQ!X"A3 +YlB,qN!!#E8QHF9G&!r-ZeX"%Ta'Y[GDAd1bVM2`Y[i*Q5lD09E-P+,NP+,8Pjm6 +!@0)"BaIkI@"k'hIYUY#-9fJ@@R!TT2AVU'5IPXI%AK1@$'cCp&K3k$!@j"9F@e$ +Uff34"mB##mj3#aDFV4JE#ij!#4"U!9T"#c+-ZmDr8S4@08c%AUHai*aaedb(Ire +Z`10Y!`8X+[$4j-DSL2d@GR4*$(Dk)k+Dh$(X`(+X5QGIHBXV**fVN!#8(r1cT'! +AAQN@i1dRdL)'b-M34hjCDbcSMbj5&(P%ebjZ%ad[,PCSpR1#3hGq@qZVG2k,8pU +rKYQrKYQ)G+1,BSVXV@Y[pa)G,`p@RID,6%,(P[6BiKGB)IkFVrL+XfUU2$QH!#p +UQjm-mr$Q25qZQJcc9JSb4++P1'mV$$i8[%fLibG$JZ!!'9VSQ[qVk&T0$,'5fCM +A(YdT-'L@APJZ1RjLV'0#Z[TAm#q`)lEjCe0kIX#BAkjVhiiXd+c`k9C!SK8Zc4U +UD[NS6L[UUa99`SVkDN@eX1,9cES,,qfpI-Ze'Elqa5eAlM$QS`l14c(1lkjV2q) +p`KTGX5kFS"A1d%Sqk`k'`8Z60G+rVR8'Nrl+K1PmFD6N#b9M)9*l%fm&9T!!e)T +X`3T9V(MeXq)0b3VJYZ),Pa@9e)UFbJThDZf+C5AIiUY+lBXX[S9)md+NHH(l-1r +LFLZq!9Q$aHTHE[BL(laVF0A5AYlJj4B[&lTdpAB`9EqE9,bC@(#e-cNM+#U#$Nr +JL#b(l@0lRE%F9LEQq*m&pCSb0eZ5mr&0*5)ffCdI8@l*Y"bc["1eDfG-di@JUNm +RNkl5iQY(pG,M[mN`G%8GQr4eD@l2#[Gc+pRpBfY3&E'1qGrU`KLfbPA066(Q"M2 +SRc[,BFbGAU"p!r3hTEUQ@990kqEPH*q9[2`)4ZZp2"@ad-YAUpU0%Lm2ae@2@9l +HH*pY(cPSYh'Sm$3ZKjdd0jcHDmlT9-Pcc$RKP9+ZQ4XhEYJRX[US"-IB%M(USX0 +h#`0`8GLMh%cE8CFGaLJ!cLMrPmC11qm616&SPSbF2cR0A9&4r+%TdehPN!$D+KL +U94KK$+2a)LFAD--`')E[ClED0relZSj0*KA`B3lrAQ-B2K!-3j0Pf%DBH&f,akY +rI!*-YUUGR`[c2S`GTN4e1P1Bi0XR8ESDhLHk#&B!J!p$24df50IXr5[dDrm5fe9 +I&3FjM"4m[NL"BdhCS@ZKP9lHeFXlU9TL$F`FQ2B`#JcFlkM2M6UZDXi1AJirj9c +ZjCG9,I1UUYQ'`-a4cpXbrfI!HciY503)5hQAk[SKK2Mj,(kqqm5lA#PlEhFjY$c +qQG&l[lJ%@k$eh[q&8CILjB2KQSf(,cSd,djIV6KpYFAT,!FZPAjQG+milHjl1Mc +V4QUG85KlLJ2Mc'2b4YFZ+cTJ+[!H,(fkl+Q5al)IbASdrA(,iGa$1A[VGcIXfII +mrT1RRM[p3Z@rcrlcc*h(Eb[rdp(I(cXK4He)6JKUhYcBY2(eM(FbmeXh4F5iBp1 +fl2Va`T[E2YUq-hcX$'pIr2EQME"CEGHZGQ[rE',SpE!Vk&qkI1[FJ#j2GRZLDmI +fVlcmR`l2GRUQmlpZrf1I[rIp5rrIpI[VjerfqU((Kjrmprerp2ajleHlrqEc,k1 +6h[e&Zep2rZA-hhi3HZ89bmH*XkG0Q6VpMGIqE*P4YqLla8ZA,)LF0hrKh1ZA%fp +G1YIPb3&2G"cFpH81rhPJb2h"Gi3-VER,@NIr8aUSLX1PapehC-1DYHZrA[G&kQF +V[eVqrBT9UpqkHkZI#'2Pf-U)`$@lcANqIYLRhr"Ck$mm+QAiJ`q0G)kijplcl`d +FG(Gm5aVmp,H@02MTEcidq(6@HjBjifR`"emDI$0U@-V$`amDqH#)H`II-r$Z35e +S--Q[X2TR[)LIZ(BfdCp8jqqGRXL[*@mRRaprN6pI!H%q2mRR9bI4f(p9Zid**%Z +rmUpPDR`4)-'%bTSRiCI'FM4HSdNhmE%)Q*!!6*fVU$8aZPAmA(@Lc'@8C$%&-0h +,6'-SMdC6,5fM)Ncq-P%"l[BiL,[*RUBbHST+k$(+TNFSLakPG%`0Xp"KbU9$P%0 +lUCjf8`2YSAhd21fRNlLliMN8p`ZBPrY[h%Id6pbEGLFGTpZSR2k%ZF5rTf1B@)D +#LU)GP%`*&%60Y*NDUBNfdZZ83Hp3*ZAM4VY0&%%aj+CB5U-YY)YqT![d*QfMMfJ +ll85Trlm)H*XZdVGd%r2D`ULZMDl49HT'lHPC5U43ZJlX&I+M,p&PZNARD!"eS5I +"p!4eTBjJIB9HT[p3"fcT4-p3CrSAh8jrT$ldGqT,Ik(qp$[U4hqPcqP,kN8r8!r +kN!!qSIr5qr32kNNrTpld+R@Rhc#'D-bqSRIT&p51INf6kCFdNhj,(d#2+eMPBra +Qdc5D3P0T1Ve"Vp'ID3CqLqJl@Na,D3NYS%LD4r0T)Ff&jTH4JP[3qKc6G`$dl8L +$SI2,d28rp!!0SIXTQ1kJ%"T+0A3A@DP1qEm2!LTQ9cM)46V&dAedK$E3'PT,kqP +V@NGI8#Tp4L[T+eT1hp-+@N@Vk5hDfJ)%rPm%M!F"h(5PNCeXj+6c&%r$k&2k"YK +Cj%Fr6+-SKBE6Jr33M366#,U(lJAVHc53!!E4hGMb8L$`%rhY*8&!-%46hF4!i&2 +Sm"l0`@p#%2J$IK-(J@qJl6$Sqc!d&[Sq#(h["3MF!fh[KVi6"3%be[%l90Zii(8 +)jKS4mTDc`%8BRF2#"b,8CV$36J46(!XA4$LB,F*MJdA)GSU3!'j#X+4VE&$*!YZ +3!"l2`Q3@)PQB+m,M4eKJairhCf%@#b0%X*5bS,#`QJ@V#)IAX0#&K4!4FK0BL'C +KL3Kl-d@Slb2#lM`@cSM3B"EK4#F4T,-LT-i@i5ZfqDY")La2Cf%P#aGCk-A#)K' +q,f+"EIkqNB93&MjKJBPBY9L%0pZc`",fjZFLE'1UE#YRB6X,%5*ma%Mj%52+GNE +klBamfeRLYhGQSBF)iB`SiI8XX!),CiN2lmd#)h%i8c6+aF*P%ACdCB'TPF`1NX0 +CH*Q&ReKJ*%KQ6!NQ&PJL%pL')*EX)%DDS$NX-(@$'1JdlaHKFEi)6DGCB0ZD@!% +d-H8f-Y*[c'+"-@eN6"Y[XX#+Fq0d%6+1Xj!!bJ*60)1"9`CMbQ#%IUGCK2bM,$! +JbrHM''MQpf4K#JX-D&V,@'#%Df@Jd-U@Eph+!LZUeViXX-fYM*5Y$&Jh-4*[FV2 +!90R%#,H*JF8Q9V5EKSX3`BSYJS&e"#Zf#!E+-5cC-3aFBKJjBKMjh!%@'&RG$+c +GV,+j@59dX`5lql(!5101BB&9fPK'd&J,#`a3BPPLBKP)aE*+&FZ+0TDT'2XD#fa +c'L[JY!B@',R6GV#`Li9c,,"+NXE)NFDUCGS3%EB`TEH`T'jK5Gh##QP,0aBBiED +`C1m5br"G&Z&T,,ZB9pJPT'UlHXP8@bK6IjKfKE*4@LJA,SGa&mVb6CJ2d%M[@bJ +A"f!U#q8a4`[P2!b@V5Q8LrS8bL8G#Z9$f`VPh6MBh30Q4+(FF!`'!KUk&-TlbQ( +!X!I#Rdq!!I,jff&k`Xb%Q3'68LM[*b`DN!$P`NKC$Tb5jC)d@GiG,F[2pjIPrG0 +Pq85B,+Y&XUaNb,,H@CE[Li0abr)4Nba[!--'E&cVKHNKbqZcB&E#,*EPVi(mZTX +XI`&"UAQbr0Pq'!Klkl)XKiq3!1@SG"J)LZSZbcXZbR*bUL`(PF%FJ3%LU%f@Qa9 +ChJa"66KS4@H69CBMS'4%-ma2XKc6(JE+EZN+!q8ZG)#C,-YCjccbkAL2r#HA4rj +pZ8FqJFk*IKlCYGdMkjFpmLU#`3(9&XZ8A5c,ETKfaE+R2mb)BMP3#Y-2jV9LfE` +9jJ*-Mf*jc1aLZAC8X9c8!@C)X9a3@#`IR&%X2eeI,*H%&m[CABVP4il$3'"@AV' +FVX$-K"PH,$pH!R1j@$jm"ZBL$$EQ&X'8``3AbiH`d+%G-&MX8'HBhX9b6LA-DTJ +fQ$i`%*B$"IIQ`NJ`f,!AKhXA&m[ebf&f`8$aqMN`mi[Ph9"S0aCU5#Q@pd38bbH +4X*2BF2*p'#akLQ!@&F[23C(R)2ad'3`%RiD#,jb#k9NX9hB[PXp#mAq'&XYR`SV +P1k(Jm3DB6iVPfm``50KYqf'J4,N*"K[+"aI,4jZ,j424aE,NJVN*%e)X+dLNFK8 +'a(EXJeN(JifZ!!b)k)*`9cc-Z@)jVV9B[LqY@$i#jBl-,CBhp#f@eh3VPYIQ`)$ +!Dk(!HK6B&e!f&B@B#Z'IT4E,bb(mHbcqIAXB%'%&$PI"8&P!TNT!1X(d$-L"Z)! +m,LdJQ`(pjPDBQS!mCL2-r)#FY`mQ!kB(6%K!(Jh'dCm(j0S!c%fBb3&j@5h-5TM +C!EN)`Jm!F3"#6""Q'K'3!![Q"Q6[D`(ji*U!r&4U3-lU(j!!(fd,b1P6!V)&3Jl +YJ%N*b!hC!IRj8TJK!IRNdB"m#TdA"JIN5M$GD3V)+K4e()1C'C!!AHYK)%![KqN +--c)Jakd1S$,#B-14b)#m!4Xfp![)DhS(j29)8#S3Rrd%-cdJEiAL@kd"qFd9!6R +K6%"ZcS2C$Y-RJ#F!S!%VV"5kX(3G&GA6Z2dZ2Jjc@h$a"V0!H5dqSUMDbUfBY&P +i9%c(jq2%E%fY0G)9'TPeP[*bD&`C'!ZmpK4ZLZ0V[)NTG0LF3mZ+9&XTQ8mT'MI +`&3CIZ[[b2%b!cLZ)[cq8`SmhN!$&+eh2+`-R@8cdU#*N4$*QeCECRJkkq'PIM$L +IbB&1m#E14#0Z'a@ABhDcAfBSC%k!X`QFKFH[TkIUb95TaUqMR$9dZ%b0hdV2ZbQ +pc$'aG2U6dPhBk4aIYHHZa`HP5Tp4SGIES6Y&,AI48jMYQ8fVQLNhMaiY%c0ccj6 +3(K2K1MmNil,Td,i3ac5fpb0$A-B3kDKPp,YTGr'$$Xh)pGVEqH#`lQ*I&KF2DBN +Um0h!Y'hV4h@m[eC'*9jk1PYeDZ@8AS*@+D8I8@eCP0kX1XXSRIIf*fde@cCGp!b +KCGXG`AKk%@qM-VccZ&3Rri#+6UR1,#V#j"A0cf5l)eMXl56dkH)0kd4e*6Q8Ck* +aakS+(LIl['%TG'p*($Y*pcPClfe,)8Y*0TQ,m-C9M8mA'k*5XkQXL!kDe&Yj915 +P,"-pAdTl6AM"DP(`[IaEr*fY!LbUS1'Qk"4i1d6qcm[Nfj'6P)R!qC3*BfP4*K8 +FicIiP!N2U5k6%PBQ*Da-XPQCP+*-1[L@5@&eQ9`4CE,pCR@46'C&NLf+a0'b5$S +,GH+pBChr0bb50K5*ZC&UXfPF,ZjH(ErEc#C3eB*D&j8fI$ALR9I3lrNS+Lp5"ab +RqZ98@85(q9A+EU#$1A3iPEQM`D+HZN3eVDQSTK!i4,AG`+4ih2l@e@ZI24j9i$X +8L[88RZN$Ee[2RkP6VG!TbTcfXa5[rCPFY5*H,bQEJ-VCATib8AbB+"2FHea%il` +qK9AjNLIK*3Q6R$51rH3b6XiHSDaX+M!4lYXl91UUVKJ-Y1eHfb`5rR1dm*q#E0f +mpVQJk+6iX,NdV'3ejCA3Z#+I9CUpee1ScTQ&5d@"Bm+$32M)JPXeJfPh[8,H-MU +3!#Xf(8"TqS,bA1&IPf#fADShG#l!fGi06kcc&r2J&lPpU9eXKek4$GXTEdeeiL1 +&`TfpSC&NbDUR!(G@b&@[4q!aV9Qj[MJYBS4L,r(*jL*'Z+jDkL[*DhUTY4Ih8(L +jd0a5T&fJ3%P92Hf)UQc"ajmlXqPd0Zh*TPam5-UQ8Y`aUE!9-&IPXQ,[5q-(E6k +$9Tr"FTr"FCp"9V8Jh9NN8A&*PGF1aH+(5cG5FAC9$Za(AC`3C@UX4Y88R"FS,GI +#*DdS@l@jD%bf[a4aS98N@A4V#Uic0QmQ"E)G@J95Zb0B1Eq2DXe8V&BT&BjE3#S +'1-B0G,KK4K$Albdh$GH[Pq#6E+e[6DJ9lBFSI,-UcU[1bQmK+cqFRN[,5XQE4AR +(D9N@Fl[cKG)KiV@B8-C(UM&DaLHSBkB*4*IkUal`*Ppm#6UiBDK%LMGRq4lXppF +mq08d'VI$TiA6"N'+[GiR*5ZhaYQcUK&)Z'9#K+ZMFIBBPHA5SbA#[HiTTB1j9&4 +#"me8T[S,!q3P"Ulq6806I3"Y2!l30Qdb*Kffi2c9TCqH92TT[r3c,D@IGS9C5Y# +-Dd'E"Rm'-LRqjbNdc"RH3*9Q1PP#hq+"E'CUb+)Q,c9ikG"&j)*dL2HP1f[Td!j ++aDL%'QVTC#e9eMUBUjM&9"AG6m4h&0EY+EkLX1lF!PX0-FEC"EDKJaNbZX!@B[Q +9YR4rdBXiXDADlIe+M,l(Ph"FCh+*Y[8B2SZ+DKRa"`R&rIlY'[cEa-L*QR#SD+Y +2R4EeVNj,hdH([1TPq*'cG+#@5K9kV)4+H9G'3ZXS[f"djiZ[8Z5[R99eGllUE*c +[dfCq6MN#X-&YIG"!E6Y0ZHRdG#kC5ZKTFj@DIMqhZ"U3!-C$$Z"P0ZE5@Vfi*IY +5r39k,+ID5H*aLY@-a0bN(k$Z+R&9lH[QLjB+Mr+"d[R4I!QCUr-XF(k-fI9'1e% +9)dZ18YjURab0(@1'YD$6X"+&LSq$6KAB#&&(cb0V0Shh4["!Z+1qUXELjDA%4AR +H#56#NDm4bmdVN5K[qD5RS5accDS8ZDI2D4b2UrBZ%h-km(*j[[JmjN019@FdSR8 +60i&2FF9(PI+8kYaNL0rVP[&HeEKJN5VF2jIQifY#CNL&fYEpdXGZ%q@ED1-C5Pe +"2jC4DK(ph85TkfQYPq,b5+fPSbDkddZ9*A5b([929-UMYH)JVTE@eP,U2RVM'!9 +9dXCDbUmPYapUf`'kqSTfmf,ae9MdqJ-9,(TT!2P`dEX!9+MSR40INd@[JrL86#$ +KV1eiIcSP(+iBC@*8cNDk9KJ[HJ*%ha9INeQhIjA)62(jQF&[R`*R65qIZ[Er9fM +YrdHK0JJYH*(-m6@p+ZB6DIR*LZEGMTZk6U[D9pe8cBYE@Vc0-2Ell#eQ(S%9Xb( +#("01Se6JVdp2N!$&R4'+K&Zb*+GSVCAi`ADZraA"1AGXmcYmPV)FaLh`b[@5SJP +DV9irH*G1J#raANX4ZmGVT4e-eEA2d,lk+U"U"c&IjL"Q&Kdm9j'SYKEFDUM[aR- +kkJ,U`haXD$pTFThc5$3TVR%[bkYE*RbI2jqDP"khi%r1CP1fLBV18%%*M5j"bmd +K1'Ba0[(Y)E0U*+ThZYHC-MC#Y93IY+UBl6AKJ@UbPHDbUZV&V*`ZUPD+q8,M3RA +Ye#j9bmV!&(p-3jcqYEDkl'YY99p9Hr3SCSZRk0TQ60h*c3%3VRk,dI$JE*A4j1! +Rk(cLKa9[H`%[1LSPlK2'P4`4PUHcX*+&LbcdBQ'4#0mAXA#@K8B%lIY3(@$+ZTK +ZD9UKDL[kUq,Z9@h9BKdhJQ+`6h@qYCVMVPRE@ceiP-2j9M#2+P5F@ip`!hI5ESd +@dIEQ@CcChlb)j`Qmf9lBrYb&5d#3!'ar-`6pEAPLN@hP1UlrL1@hp@&KZ!JICB[ +$MijKX9*9qbK$e3jB9IY(%+&pp+jZrfJf"(id&mp*f+jS"`!6fl0eqrC+5-9p'pL +j(I1GF+1LGQ#bDYpq$XcE1f2VpKj!KDZfR6PJFZj-jC&SL1lXMQdlCiPY1`IVp[" +kF)B[ejhK#6cFSfMK[B'FM+FQK#rLi3%&&j6%!aUL,%"&A4BS,5T%YqqSKC3G&L& +PKd[(P5E@ABcebP9lFKNd50k(,FNZ,ZjV6`lAlFPT!KXQl-[#rL4X0-3N,aB%5$! +*%3PRG5h""6'jUKC8T'Y"k5VZ+0+#jZMf)+6H(P3$ECZcG([cIQaY2XDIFpLDEf) ++Q+djKCp`f$E[i)FG$(#@c8!Mi+S3fMKCeaT"XQAG9AY6&J3dRGDe*Ua5Z`0YQTZ +#TkN28,f"LJ22)2"X01[fM9e%lhEdTL-T'fZiT9Da[Gj"E(JGmNBhS,9YdTdCi4b +2h0!bR,Sp3fc*Z&e(Xeb`[91Ufpmj#Y`lm'1M8Imc0qTD*J!fElKUcjb"Nda!G4l +QTH@M)C+(`XSrUY[cih#5[`fpCY'lS0[b@6VbH`)h4H"'S@F&09T"CkfeAVHhZX4 +`Ul#C!QF(VUrSpG4a,8Z3!(F6!rT0j6cFBGq8J,00EYfqk@A4kiAHjk)(4I,La#8 +YX9a%NBi,@Q*A4*S!RSM1SL5G%Cqc!SfBMq-4iL!QLah%('F(-GYdCd`M*TmSpKJ +"J$%!TKL!VM0QVUJmGRF!@(HkERF$G*hZ0AjX"X$DE4&(AA5RZjr!DZlTi%S4b'$ +G(QX'Hkb&XH1q)CFp9L3f0N+JireS!8kaR`[-Dhj--$DRQA4l@S2S(8G["hM5GSQ +K8hHQc4*UDQP$G2X@SG8@D,AP#)"U5lK)rjB`(9Hf@,HhlY`bQH1@IQh,#$(a&Ui +,d2NMjJb1`a-e,L`(6@e[%`Zp4,Li6B4[D`Aa[KAH"jr'9#d`Ahbe41GG-Dp8&ep +R&MUd'lM9`i-M$Tp6'#bQQZSfV4ZA(6C-A-C@qcVGCZm[40Q%3,Y0P+m0YF%f"$d +RDZhj%Ki1hFlEG9ZmF(+BfUME3LY&0l6,eml(c[!kN!!cqh2GpSJChNR,@U2EXMV +c1SIfD!pG5mI0dk8E9@IZ$$i2I)Hf`EP#fj`5AFYCMN&reERA`aFf+0VZSlTY0kX +XZhZJ1d,8X`CiUi0PUVh"$@dDi0HpH!&YQ)c1qkTp6cRS[@HEX$H&l35Q2Hh@FF` +@0@@S0YN0-MRPGM`+c`R`G0"YR[l!D"lF,h6JGP8V"N81#(U9kVC!2`&TJGIi3[# +D8h@Rq3,(`e@FjKlm8+fLM8'Z8!628iZjl-[3I#QkUYU+@$8Y`N61)Z3P"AK`bM+ +Nkq!-G0#dH"Th'pAH9,@5F$b1#XM4m"ACA35CXkI`3`lE)mI&i"%hh`f#jH&49Y" +Np%C-AK#ZPUGE1,MXk6-",HR-GcpH!Scf1$j$i-%Ub5J15epG1h`'ZjCMTS+!!HI +K'G`S91bj45"$,LD2jk+fMck'@3["3Y0$@hAl)3'IKbi)+kV1SGkk,8H8SbeRY5M +kR$BFjI6"SMNc'9T82r[HA+$h5N$[h5(3Hp[iCSHfGl&ZUemZ%2@lK2ckIVUcIJk +VSI@!YV`dc)VS)Pc"EZ'%GL-ccS-VE-MNmabfKK3!TQe2"!VBYQFi80Sq91Tp6Pk +AT@Ml"qZfNfe#mXRh19TK*i0efbN'RkG%eUSp"jIpA$cNR9CYc`NplDIKSfbRdBC +bD+F[kYVT3DSP6l@pF%TXHS&Tpd*294Z$E,F50@X-I0"Cc-)G!erm6p5`-Ae8l8` +B1ZG8lFi,k+$8MMISYZ2-[akISGZ2Md35EM2VYYZB(VH*[%3V0qQfmP#"+1r1%)0 +el8q0f)m+Hl4CS)lL8kTjT'Sl0P`!mSPXhAELP#M%%eeeQb3b2%eU4&F![%hU,)k +NJEUQSNPUlUhDP+f#4EQUfa`Xlh)&@+JAD"ID*fC!X!Z1fh91P,eV#R1),T&ekAJ +%KKP6M2A2dGQP1Z0DHALTiV`[MBIMd4e(LN68MU"%c#Y8jiDq2"aPYQ'3!'jE)ab +-YJEYR,8L+lHYAFH#@bbj&UdK-eT*kp&Q-H-HZLmZkVB[@$XSPE8T8U(51&53!-m +`XAdFDZIbGQMY('@YRfB@fJZ(pIemSHb+E(i)+Uc+AXFV`Gj(%GqFabQUc8MKN3i +ZapRNRR!MYN#Ff$T1C!dfFk%!&R-V'p3)JSlCL*U,XKXcAhIQKBL'NMBk$8q&3aB +B#"0e6hFZ@mQMi('@cFDRZc)q$'fS!l9m)9!(DR5RD34$&FaP+1pVZRB3,m-"6-8 +[KBF*S'D9BDTc!*qDRd+LLTfUPShPLVHUcNFqi!Y4!E0!#`rQpMq+jh9ii((6Tk$ +6'8m(!J"jS0dKY*B1S9RRb3(FC`Zrf)"QTpbU1[HGC4+H4aY-KRNH,U33,Z)Nh%J +K)2@83'$5q!X!UFUEiZe)YGeT%K,Zl)$ApAM9HGXqPL(Hj[E(bDcDP50r0h)"IHq +LIYTqRb(mlc'i!!2PGD*'%GrYe$J!''i*rJR2*m$0`@'UcA&-9%A(6"&Fkd9fiCU +Lfr54SKZh@VFGBHli5#5!JV9VeqF+a(Ud-El'$E50UQeGYS#DGEL&HLA!iK4Zp9@ +ee$J(VRJ@0V[le[6$lr+-'G,+#V0maS`E(@YUDJCC3kc@J8lR9+YeL,$S[b(k`I0 +JlaeiSa9-09CV-%-1[h%qe'Sp"d4mX$8Bb*!!qGEaIb%eRdj`r)hrT)DG4SB))BY +#@!baKV4M[DA9L'm@ep3m8-08'!)80,YrVY-CiR31V1!B1+AP'"[ZVK'LlkQTZFG +ZY`qT@5L#3#h`paMM[B[Yl'p`cIe1Dmd3ra+$KN,#F'G`"G2Ghfjd3X$G051`IA" +0"IVqNFlJQS&1Uj-*IGJTD"95-bhXR08j&a+GpK'-,(Hm&RTjZ"KA)9,mHraU,Q$ +lr-Ym*lB0&&+Jr--#I3m8"1,qlm6S)A3IU0kj825qU4M1VHJ-HPJ`49BY9d'X`AF +XX9jBIY04943SpI3HjhZ&2GRaMNj5i`$TJV$RT0GH[ZH(5r'A,X9,H[bPlRH`[rI +$`X)'$,dFP[K(kCdVYpr6mIV!3Cqc),NlcT&fMZaicmKK`k5Y,#5IlpSP,+ccd1$ +,!kjG(pMK9Y[9EVGkGlebrC1`-+PjbJp6TNM*-+%26d(i(B*d)FcU[#VY4(Jb&%q ++hICfa&hr4rqp[9H!Fdd`!rIIrVQ#h*rHm0B)l)e90lSRrAE)Dr%I$)Urd5Rq2B5 +V0jq`IQbpFG9T[I($YkG'@ZIH@!AJZ2'KdhVc2IXXqf6l2#Z+1-PUA@#ecV(qf[l +TjC4c6T4IARRX3eFNj3(*eI2$)AF2Z9[km$F9REmR2[0+m+$qL9Ia8ceAVNZ6H`k +58U8DP-pD88Kr(5)p+`9*@lZFPkk*-[K@@*YGfQ*reNlq[pXNVKDT1B6C[2'KSFq +'KRCliYc,k(CGqGF"LGFPKl$V3UA88(ri-,4AD-r%kkm#r9ES*iQI*%T2I#QYq%% +0501N*-JE*fAD`SM8dfeAfS4m!!!F%8&%3e)$!#la$e80C884!$&PlN1rE@q@19r +#b`cjKT!!Nlb%1FG-XZ'40%FP,PN5jc+5X83*h(c*e'36bC)eaM6PHR!a-B4S)BB +@,*G$!k@RmIN-,&#V(S%"PX-9,cIbI+ceH$NL&+5)jECFVpM8IIjqllYN#CCblqP +prJ%ETLIP34!%3"!!SJ%Ajr%4R3i[2Pc)A&#*C)3"[[jRd`XYcXEZ&MlCl3dq6TA +mHUVmBRcKN6ZGlrhpLr83L80DQaTjGMTX@@KbqP66kA)N(6J'RMM0K&4mVKqGCk1 +2FI&MQ&K9#-m5qeS83SIZB`A0k,a$qr"4,AiNa!qrV`hZ-G(0)cQ!JRjb1$Ri6PF +A0a`P&b3V+-fJ5NLNR$MFkc!1@Ai9VRLCYeil%[V[JP!"1DP'ErRJQI@T9Qjj*a" +DZcG%VN2GGhYl(4RAMqm0Y2P@1T@0HfSYmlQrqmIdYr&#pir2lqIEqjarGQL$8rh +NRLXK`dm$dCa!8pQ8&Ap99@6(jCIF[4idpk0QfB([39D`iF$GeFi+kkM4UR!jLek +6SE"IDC*"`@3CAUhaDVaL4Akm2MX3bZ@pfq1#+HJjS`5(f[5*l9D+A@&Y%m2$M)` +b!NIp$MKXSC,e1m)fe9qrBiLVTZ0lI,&!60h3T)6EI@C6IYcEq*%Fi3P23KEiCak +K+4,9X)TB@6Rr$%@Kl0fQ51pHcfTeJj+Q*KUbLK8BemCdD1lQ%5%PP3QYr,14X%9 +0)'PPe3D4[)ZT*X0@-TF%)j1DB#!96KdNc2cD'k1Fhfek!b)&T[+k94QI0rV-i4j +iki2*#QSi"UHmA+ZEjB!b*b"ZYAJeFARjPhfa5@RirhMKP*jeaC0G1'IePIZZj*D +Y,S#EA+J2lqJIQa95ap[LlBEN$VVAFVAc@4mk`[*i+LRd1IqNp9UNC6hpRQP-h`V +Rp`*Xp6Qe$@QX(L5a1ZYIm*R9$HS9Npf6m2D'cGV%kFeF30&,#8MV9KiEd9af6-Y +U1a*p'Q[GjEh95T5+ArE*50beUhY6%Ah``@A%R$-%LM`d56b#Vb,U4E)[,&iDVJ3 +q[rM55(&DIDNq1C6I"LHS#QE#a&Xb8m'XY[ZXb'TDMj@IX9+U-UQNcTDK-8"`C+4 +(R6hb63iF9dL0)EADkiL246fQJJ0,!k%e"Eel9rekZ%*025q((%631BG(8#ZL&M9 +eG8R9T$"5%4A#&GEYhaB8ABS'-0KA22MFLZF90UMXh)UVP9+,efKej[p9eZTGEd, +rH[%aE%r&aTpkfha@EkI[m(dA9&2p`l2bND+T5%DdNCD4C!85#"PF4M(8-S*8`"H +TYKGK0KUK"28"K6DLj1*S!PE3aA-jVUh3Y32IK#X!2'%N04a6Ji%fEbRdC5N#8re +cMh`)-K+%*,kf3MN3HH$A3a@Uhdb*DJja*G(!%LS3b42NTT05B'TPmej5409rAfC +cQJ%j8ffHDUp90GY[4pilmY5`ck3ZL,H'Hm0l,lGcT&29pG@#"&5Vic)T9'GT4*T +QL3%Tf8$)!k,HpVC*k3K$a9$EV#a2M,N`H042(`)2S#18%Jk'G--%PlZiQ&+JG-5 ++[8CK(-N%PN!3L&&!B[`l!f0Ifr*m-XK)*K3D`%5G#B%TMhIA)CRRK*%B-2'HrRL +6ZVrAr*`@#DEbCjdMQ5DEaam'F2+#EAEH*"Vm(#k8CQ,k'ZRp4NT0@JSMprE9Q6" +N*pY-Glm5dHmQa%%*$%R%Qd`!5Yb3!%C"LJA$rpTAjqi[(U)Vhp%2F3@*2Cl!6c9 +G5M8k'f(dE6!+5#6'iAk'FGP'e9q"(0lp%LEJAGT*fP`-ph)N1hQ`qmF!aPCXC1Z +1IPT-"iaNijBk(+d&Ul,L)e5Y5E@"p94UF-Y[9KLh&L+Y0,LPES9abm@9,PbRapE +i34S1pZ&JmVMcJc3kD("ZU@P!Klh3YZ89GI#$Y01Sd!D,%85CN!!3C2JF8S-lI62 +HQhNSE!DkDlBYi4BNT!+m,aS,@f%iMP&DU$DQMr!X$@MZhd#JfPJI4K+VIT)8cQH +G@-L&aEdR&R,rSf#C'QbjC((Y(fbjdI,*dik8B(%pl6!IQHq(1[LeL611XF'@2CE +r@$rBdQajTqk0X3V,Ip5p-4aFq`6p(A[LcS*9EiaRTIc0ADVe+i4Mi,8"6#ZE1eL +&Rj%aZmHX@J%'cFEk`4Q@hLk[0e'k#+NYjjm8#$k$@h[MAUq9dVVB9$Njk0V90X3 +6jiIB0PG6!K'#BIR@6R8Qk[9Ta)84@UMDN4P,J(fTT4[r9Cha@FKXP&BlNp(C'PG +6Jmj@E&YQ[,(EZE(j&#ShAMpkbmEhk[mrHe@,J&a,bEX68U!$3l@NF,kLchREI*1 +0G@He*CA,rlM%a*Q4MQ&"*Y#h"iLXLC[cJUIX'pFXl0Til&3(*MQQ@l[3XV'CTY( +1H5S+93SSJa[2j#UZ!JJYF0Z+l'UVX20ElG&YqUNrhGZ8*'"!I"Z1k1l@YL2F9"% +RYaK9j0AbJAi-EUL+PP6XKU+B"VIFKN#DZ9DJ-CJd@`VR+"MJN!#02,Led0fIENR +K+"R$i5IB*()8$qXq+CaHE"X68T9)RA-0('eI)Z(j,edBERcr'@,6jpcRTL''!Lk +KG*qP)Nf-p(JA51P'mq**GN&CZQ#8"rG,bb!ZR$$aUAk3!"E!G456AlT5peNi!6G +0'5i$&X&QCTTUD31TqY4mhPek%k26G%KU$S#X1'8VIGc6Eb"8%K)YK6SG#BT#*jD +r&lBN%bdR%4K330Z!Uma#NPp'4Ij(k#Lfh"E0J4(CVp14Xi-BY%54lL4(2"S[-`l +2M9iNePA"BV1iX-8TDRD9$ipc-P35X(Q)dX&rI)D"S6TH6D`*&+IXcYCS%d0+HjA +V`,82N!"S!"*bFll0$2RbA@p2pHXPB5j5PdZ1mNCdZ3E$iCe4ph[5-bCK[Lq+jKZ +"4+k[G4F0i4e02$!%dp+"cM2E"0-5ApS@55jJC-,%J2L,qYX&G$5CK2JB3)$Mj2l +*ST-hXqdlL*pG@Ylb!JbU5La!k#kiB`q#aEG9@%KQUikC,4'P$fD4bH[q@PFhHZa +J&S5pa3rL+VURZl0e6d&aXTkU4$1-5"j$k-'Ri[9LHQBa$,2Spc3e"R4rK$!FLr[ +aXRLN"+TKbM2kKK*'&QL[hd`3[S#D[&bU83&3@V5b+$4crmU%'h3eRhT0[Sk"+mY +q04P@0"C(BjNPrb(E4-68P9e'JQF+!&k"N!#,56mY+MVcqS@IAcS3S+90KbeTLfh +M%%L0VDBZMj*D+#hY49FjfjAYTk9,0bhlF$,Q+r-qlXZ22[Vc5ajKS#EDip1%8D& +f$Q51G$cqU6TRP@0Y*[dYbQaql@k(fRRmdNKX9F(DeqK[d@[AC0jGm+8M3m'f8+T +V,0`j812ZMeBR+b`hSqYHVKX+,)#cVZ2i*Dh`#pG5VN[T#eXT%Ljah9kE-GDpZ(Y +aVbfMa+5HharMb8(RHM$Ce,Gm6SiHL#J3i%kSCqJAYf`qk+(0KdT!Z%D9eHP%"km +Sie`b4A`A#5lcN!"i&EIC$b%(3Y-*(V,c5S4'IA*q[d)6R3$6E((5F45@GKZGi@k +R-f$UBLM@Tp@m-pI(4fpaATe-a8"HF&3D0UG9UT`3U"*%R,$-Yi(%15%kQ%K0b$L +-R4FNaV&&B$FG(6"ea-2&62c,DH!)IZchfML*BcEqe$!DPDVHSSG+6q$2)X+dL@E +lHC&SImj8rd+!dkN#T4*k4[efkVKT+$@qS3,l[#MNF4MP*QFi`jE#9CPMpLe"5Qk +TZeSF!-P#Qc2JaL#*JG%9'(3'U!RpZFj,#Am"+G0eFQM-,frJFRBYULSQeXNmeDj +L)C!!TjiBr$XB4&qPUPaCUK+-A(D'DIQk("PLrAfCBD0cq$TAG!KQ"G2'56!4%#J +630E0G9mQL"Xql8,6%Na@1BK&,a&PeHRL0djSj+iJRaa@)pCm,24pNaEMFMlDq$U +M*KQ"i4eia1P8"rU0224H(LG``"ReC`PP3TZpfETpB$!fQ6JKq$Yd%5KLrIF+@-6 +B-fd!@86(3*!!+!&"!Q!CaL+E4jB)(HL2mP#VBF!KDF$R*3-qGiEp(AcdHdAH%%f +8aED5!Ld%$"YrRNqRj0#$'h3(5cE82j(#KQl3hp$IdBCH[G)0p@-MapIRBP2Rr1F +f&D*)9la`61MG!(,+M`6A9pk9rEfkHQU$0fDrjIfR8Pr9F)Z,L,YL)c,QP9`[jEH +#i6"INCqZU*80q4BA*AGeZX@1D%)kp%B@1e)9&YF)1kKc$!9R&@3)fl+-BkTJ*G( +F0`+%(,%FAK(M63D%9%SKj$$8-SdGK!TjEiIRNbJ[Ia9!mehhVJq[Ima0G@c+,2X +[(1h#N8eI"$d&%H,pq[@$lpI,Sj9#aR4U9)d43,Zee3*q3PqGdqQUZA@8MSfVp0e +%e0c9-Q1FT!kT'ZR09ir`3Tl(AkB!U'VTd'H$B6HI5C[@+*@cA46NpD8MhYTBDFQ +IL-KG1Te(+%5`@FUZ94Xb#i2hE$ECde[4P8-N5ITKN!$#!reJ,q0c&KQZJ4S+Bd' +6mS*aFbNRNKm12(5+1Cr2,4LpjAeA'H,VCVmplcAYjki#"BChYQXSG1mVCack93( +r[EpH8kSUA(&[cI@P&i8qrL)Pe95b3!d&fJ`Z0YdZJ#YP#(4#UN[Q5REJj5!#F*5 +lM(QFZTVQ#ejq2m*1C(l(er`EFfK6KfaAZ"%Z@RkMZS#DejrVI"a1q&hH"9#9cGV +EQq'QI0$'!QdLmRVH*SILY8cNfq@chA'1+XDaU9EMqrAhjjrMdB4d1,jHTSpb*$$ ++dE9jS&"TF9r+(SLK'aNHqqS9)3k"1UUNa-'%#PmjVKE'HA3SC4pLbalmb5XKh8% +6AP"%#&49PfH(a[QU+mA6H"jP"lMH1-3GHCpqXl#3!!00Dr-BUN!9E$iEa1mdU*F +#pG`[UQIj$e62FS3118Y8%i10FdN0*F!0FbaII`,'"ee-kNMSUPd+SC4!3BKY-Vd +UN!#)R*Fk&I,hr40q$J64mPE%0dhbHQXAJIZ10*QDmpIdkKIRXJ+8K4@hLBC+6N@ +XGNS3hC&@b`h,5jXT,-pmZI)5P[IXTD-(f0',M+cH$Qa5Q6i6UG+cU'4Udm[RDA" +ZBNd"$9r%K[qrMcYF9LUX(-H41abeR")96H[0h**QYG-5+"NrQ*I(I5D[()ephmj +$!aI%Sc6M6FR%H9*p*SMqmaJe6%ST**V$HHc+pf9fh2*qmh@Zma%&4Y[LJ0LKN35 +dmJIF09DlE1HA5E@,lY4h`SJ"QG9HKKjK-iJMd9Dq(f58ICIL-!4fjPT+-bjLb5) +$+C-L+5bm-LPldq&365)T"DHFQXlP%E1T)1lAV1iYm1a5cA$*lFkDQ6Q3!+lp,IB +p+BaJ1C)aekSK&T,UL+Hd0YIfH+[fr&`(81eDEqLH+jRX-bcF8j2QL!U'Sj(32Dp +YGi5$0)QkAChYEH[Er8K(iIK%jmb'STaqMqGN8Fl-6,[lJ(Y("NY-PKY-+!4CZEX +"L4+i5mRChR%Ejf8j8!29Ci8$M`I,PReBK%G-e-l6lbllG#N2#UDYA%ED-UDDMhr +SMIN#A(lJJ[TC-ec(2YX4(SMXf+Y'GML+e[RmQrDZZM!F85[[bjceAB`AYDVB$M" +bH5fc@RKX8[#CSmT3a*S9&3*`cjrEHf$2)apL8VpT#aFm!P$c5G9kqJBN4Z3Am-$ +'iXI9K43m5l#"@jj%r8bSiQI0@%lA8"eNi(bp24HS#2HA!1Ih-XkEpL"'(pf#QlP +B)2#,PH5#FrI('pIJBhRDdQU%fEAHd`P`YQECSYFMIGE)8Q`1aYapfL85!M63+YH +jF(("``qH-D#G)bA"Zrfjl-Q1`J0&fKaNJUe)#qG15T!!rqVqaeiX1CQGl8NR0-@ +'aF,cZI`Y%NiH5G$A8#!aK93l["*,qqlFh+,XR0%$0*+BfEpD*j9Qja6P(Xe*cc8 +%ILZ5Q9p#JEaaHIb`j"KeF#3#Ph$&4b"*5%#jGY`%*k)RKNGCG!$dpE6JXTXVY,R +ape!eLaPfJ[9KQ+-RQffT8e`b5)YKNP*i68$DYh!h(i$&Q3pGFk15rJSaif+HKF3 +#Q%@cYGAX`b0@A+h9X)qGiNHIZ+"GV"M60V+2FA(!X,M!*hj-6p'V#H5KDILhc&b +jZB!Gq0P9%VL)R&))K$$eV'(V#%YJl#XUe)2K98')V4"554jcP8XArE0LiAflmA, +3DcBVc'B&%bZB@+'6&6T4q)-dcf2TH88pkHhZ3VEV*`eE)k@,#%'4'*V2*p6HF3A +*SDI$jMrFbLQF0B)f-F!G@4[h6L#`2Xr[fl$K9Yi8B!+YDfrFrhV0@5YAAlr3Dep +PKY%+C6bJEA0PaF0j5Q%P@ec,&NH`@(LpaPH(T9fV1Z%)Mf6-8eNLF$q2"bEfUcb +[XS5YmQE0kc83GCK5e*UQqNAf3XDGkSDAHN#SfCdjXJ&S[er0i%)*XRpIZUdlAGZ +EFr6!cHfj4ie&$+lVHqERT[r)RTkG!hL[$1FCQ[V5JBj**2L!S-J(F*NTY@GR+*m +5QYV+EBlXK"Vj'c-@d@SemUC$+Sc1ifVBJQeUXVKf11)Dr,6#V%FX$SZ,EIMZ&*` +&DN`UU"VT)h`cRlMZhC*K#RiDbGP3-XKDGBKMT-4flMbDXAXPGmYJ@iY(3F436#L +Hl#A&NcdqJj,92Z@&i`c#SkK`j2lcV+(L`mp(VaN['iY)#XTe"N@,E#j@Y%Jp&+d +2VeHi+eJ@[$%8#ldDZK6D&h`S8XrqaL*Q[$*p-VRH92X)VSQ(#d+@Rm3i(U[apc9 +)+S6Q1)qm5XYJdqe`1[SPm[lP5j184QYG+B0%Am08[kKd20)U63-Q!Q-5-M!K&NQ +ZfUY1'CShK+3KR&%6IjR(3`&-1`LQZR)IR02iV%CMhS[!D)3mN!$i4-b%DrlL-Z@ +RDhirPkE#ic!GI3fpq92pfFG%dm"$[aQ5'3RYqL4iE5@9*9IcmC,+K+%b8&aCA6+ +BUm*)T(KkA-IlPL4SI(*hr+TJ!2KX!"i&9bEd0U$D!)lJQKm'`"miY*jYA@LP@cI +d&X48kl'80P1m4,#2YSCYab)DAQU`l66#eV`@Y9hFXQVGlGLbDRaUG$GKbqJ"K*Z +S19S+D)Q9!Ndbj*cIkC-r(Z+3!01!Vp"$e859#irm)%B$"T5G[q`BNVejB[&9&BK +iHK%239b*U9dQ#"ra%GAZG5ql&5l4f0Rj5)P"&"'[3-aL"$,@e8`c9N-`Q%1P1aa +*N919BKI,bd2Gl-,rh&A961l)rK'%!QBT2ik4G1GaJiLQ-"'0ZJdNM'%3`je`3UK +-M)(B*CQ@K`q+cQ4+%LS3621PcR'E`lLTf,hV5%V%c$ij1lYA@h6J1Fpc"iiDHN- +)*q0&K6-Rp3mN)[E3Sl(NkS6`8$EB,kRU`rABU1h-SEf)+NC@Qa`3T%6A-9@Gh8m +N`@N1ZEDX4fq4VH-B`ZGCGf2pGK5LjQ&E100V`YCAieTlk1#&+432dY!hEdV+M-9 +`-9-+%QI&,k80-$b'Hf9QCRGf85'ZN!"60-QPlTc%DI-m[Sr,jRQ)-IIfR6BBGR0 +kGYbdfkKGbAlNP3K6c,$la""l*1%L%Y*0(f%GbL)Br5hFF[PQhX8&[-`mKSG"bk" +q3"pe#%d0+*md*0`%dXY+YZ)aL3M,dHc*M+)G*94r,0ciB4ZeQKSX*2`er4XQG"a +QJ8aK"m"e"UKL%lZJVh9R)25*U!Y4V`Z1CU3AG'F-MdV5(bS@Z62GQ6!$@rN%2AT ++!eVI'dF+68mSV(h4C[6&'`8E6aLR8C!!idfpYRJB2k&SpH'j0,hBe5N'*Kr&L%P +d14+Hqh`prd$(!-!*[1Yb,lG!HFbA1lNl+Z$6AC@S`59m!JVa`iM*!!&jF3mM*KZ +&UAJ#K%cLamV8C690bFa'J(IT+ih('Kf6,Mb3!1Qc*"A$!JPG252*``b%$'($265 +NbZ8d95l(G8[)$CZ8L`G1(i&!2['246cKfmSYCjF3`Z!&K)'`fL8V2-")D98l#Ha +RdF$!JB8H+0#YaQ20&(b$#KMQeA3S6Bm,h3dNmeZd3$+*[#Ch[k(CD4"j'6**H*C +l9I6Lr*PbhQ2j1jj8iCDrkqJ4`5m!cNQq2jR1HlJ0V`(HKGF8Yq!9jHENjc69CH' +0QCNFiL5T5M*"L-H-T`DN-Y-T0D3I&pX[4h-1c#Idl@+#0JC!-B&q2&k'9ic5I8b +PRarSaqCcK#'9)6hriV#YVaPUAC30e6K!2,KK`Q5%(VEhK2)%1#'A3B$m&+lAf%# +rTp9%S$J#0`dq[*qJ1I"EUZKVL'j56BEQr@Xc-pNr!Mc%K[!m&TJK0Gq*@E0SM1B +9'b0af'3'39%d%0)!N!"pM)jVL1P4N5YMDeMJ(9Xj`aTLH&6N5%2ZTP58#HUVfFI +-C,QqQG6dK60p"M0jGfNcfCZ5$+eQ8l'C$-p)SB#r&lGUCZR4bCQM'4RT"fCQrZp +NcQ5lH!efj9Qdp2KNcR`$UT4H3SJZ,GQpdL@UFBqeVi%Y3@2+q&cfdCbLUbcC+5f +TfkeRl`aV1(0D1&Zd,`%aZ)#A`'-,,5eD-Z*pZaI2c13@aCml#HicmBcdT8FcCY+ +A,J%6,U8GdC!!U)@E43dNH9MYk'j!H*Y-+9f@X0XGYXYPh1eCEldJ(qCf6iKpl"3 +rmMa0UVe*3G#J'qP44")9$`3E2+j&M36QQ(XTMRpiJG!aFNUdr(*"2#DQDRFVQK8 +IHGE*VI`Pcqej20UN4R)6NR#NDE88@0kjaU&Y[XEK#q,TXTFmUp310Gm`"4Zd5hU +C0*i5PMkcp8+da9SMNTc!8#)F&Bd8e'J[AXUZNN$P6QN"PZiX2QE,h5cYDr8dEMX +Fhaa96*(L+dSXFI"A`j!!2aM3KHRE$!@d(mdY%K%Hk+RG5D'b#1Y#)!D&-SEQ$[3 +MF(E-%2jP3$XfB0!j"UGjLhk3!+9BZEA+SQqV9(aDTH+5SB,%#ce'EjF%X6LGBbc +i4-'2M&$"NN9"kRSedC*$&T*Bc')A(HZRYr'`Am49N!!ljki5`V84Z2APR$PhEhc +E`CB8&,XBbI"CPP#kq,S6Ge$!A+JEMG'"rY)"[pr38E"8X+ZA"kZ'Zl)'*!30K0D +8`E88aVpZ8AdG3'@rYm1,LPRj"d,H#2kP"F)ZNNJ!mrGDU3Y6iJ,%$K@"2C(pR)@ +)Y([NKp,q-IHbRBI4SDUSM+&5-19RRd[jU`4ZPSLAQ&B$SpTSSK$*F0MFm9F8V0R +P*L[Fm4U%3jUR-ZdhD!qVIhRc8c6Lc&-AYQhKi31#Eb%2*iQX"5a&%QMPTM4'PXC +8i8P!l&C(ZLJ8m#cq9BEDq@5TJ%9$b!!4J,!"TC!!0fT-!4k-,`A+"Z06+)6LV8$ +C4S!eP+5T&Z)aMZ8h$0aKia&h2aC%2)6H)8m+`EH*!)i(EqCKASCQTjUX3+K#Q58 +((D3XEG)06k)l$4F'L8"&+"8kQC!!JL(*CBL&ai"Q#!Si'1TH`K[CTiDpZP86#A, +5pX)SI'2HfZ&lSQidmje$GHq8MaBqXHphYY'DZUGa&R0rF-MccZLqiphEMpXq4-h +%BapGY0@-*Q`Y@D1h2PmlqZ5Il[e`eCrrGYHCLaF[(RVrcY'lPcekl,Y0ccbH[rc +h0VYYik'k2EDV$bfh04bUXh8de$cph5mhYcae[1'0RelC#J!!4fT"4%05!`"ki"" +9$@4@!4!a0Hj&rlpYcM&A'6,XBUcq-TCP%CphSBQea1#B)XZ`DUDPKR*JTE"CSV* +$2&i2(fqkJ6a[J1C3`NRTZERp%TU6UP3PchXSAdYb$0#%8JlAT$3"5K2+)5QPK() +**BD+HrrqIVmpViEdpRXrcrrhm`!EVDFS*i)J#)"!0-qALNGe1Vc%j5e1"Y!I[i$ +-9E,%&a&J59Bq(8`B4L!UPD6(NT,r[k2i9#8p8,CTj[@C$k@dd[k5IG**DEr-l&% +B@AT6&C3aGFb`1EKG9rC"*'(iH[V4H5&*da@c5PUSD23C[N!F2b%S-d`c,i!&*S2 +$BPB'Y1!#%-VeR2P,&&CQMh4)RSb6b(L1QSB#NC`kSFDLc+*AVcjj3S4-Ck'dkC@ ++49bb"rb4BL!*e3M3#6CrTdMZ'*[+`k4-)b+m1ZC2l$FQIMmpB$Aj!`i-D*HZL0$ +mBK'k(NVX$cEI8D3p'HaBi#[FJXBa%iB0f*p*0e`9mHc+CqG*A5iXB9Q[,1ZaA%6 +,HKFZKNM)0B5QHP8&ml*HK$"K3qd*hH*RdKdG,aFa5CrGNHS#8pAMqV(VadTcD9$ +(@@*dC(DRI0LJe"9)mR&JfCbb0I'"mp(8ZIDVm8A3)EAlN!"3VA1&qT2**$1RE5` +dU9jSDLYGfX*+PmN-8HC0CX"Lm+Q4,RaqmJ4BbC@(X+PH"+BY9`b9f9)5B$(N6&T +$885i+LZcMI8M(8a`*G%kA8-fdML[k%kDRHM5DkL2!dNXp@(3AKUdfA*3QC8TfTV +'Fd-L1IJI8YF6jXS-@KbDX+Jej3D!NX#'mi19B!'16Ci-E'SBiSN*N@UrLlGB@hN +)SXYC%bi3d$I99[+fHNV5q8*Bc!iFQ!"k[Irh`F&LZcNi+"XCr8e-U**d6-phi5, +-i(8'!I!DLFfTaX(Q0!YaUUK(@'k&QEm)ARTF%-8F-i[Yc(jY2k$9["5+Chm0E'` +6rMY%LdJJRc)UA+Dk(jKLMii)S`E4rE%k4&1)$X3N4&X4r@+X$G%K4,0MGN56L+E +(3L0!N!#@&h1$LJ0)!Jb1V5#8+9!hBNd99TS5qm'!k`0UXdT$meqp(NUC$Qhc,*! +!&f0EQ5@IqPq%*T,ZJ9TCE8L)(kUrCKTd0JekBm3+mTZ8)D2rBj[`aa`j9d9c6$q +[@#4MrT6*D,Fii!'T)4"h(p)kJD(0@Afjm4%)%F+2ej!!5(i2'Aq`P[CRlXhF#k' +R66-ZYN[VRjZU+p1X$em4E8$GrV&aSI[3c&'Y,l(r1d@(YQ'LI#QpUd8jI*%PkJY +ZRA`dNXPZ+PEeJEDQ1PAIG%9p2l[bqA"+C+B(r%rfUASd0P0MmiXDQp%i4)e$,fS +FNZTN%(%)1`&+V#99Tji+@*XmcXN4HA+2HXTp49dD*K!c5ZL"8Y)3D8C4$4ANkY` +fJ3*b+"BhS5'3!%6KR@BS-XDPFCdZrhQR!J*!b-8lXlUa181"b1*)Id5BNAJcE*2 +mV2)&#mjZ6%S[Dcpb16*1Qdj$f24%9mlaaEC'3VYb*Ap',J*@Xr4bb8HZQr*RE(R +3-mdRK6#GQVLVr"PE(R'U30)X53[!F4MU2Cm5`qfXrBVS%U(-G$$A[f-8RSZ-!MN +J2TB(6RJR[`38(JiJr-HJkMri5a(UfmB)PTHd[KQ0b5ZLA53#59%-MST3iffVl4i +K"4ai2399Ehkqaile!jfBB,C0H#S3aq[K'(F$6+Ra))X)Ue-UYYU5p)MfQ*@@VJL +9&Z1m5)G)2)J,j1DN!'+9$2HK`-J*RfALclp24&PJN3If6C`kc#bdm(PPiV"lSKN +609G%JP8bUh5-'PDHPCXN0$P@Ac*$4GR'#m*(#dBXa)0QEl%D6kl'aH,"*(q!*+S +m15MC&Z6*$TV-T&,akHI2*qm6&e8pAQ0U-eihe#'m"Y3f[$,9&MK@a09f)0Yra-* +4p44H*@SfANC9qpKpN!"VcZ(9SilM&912iR9G0H0P8XF`U9FGa5ZP0Z*9Tel%B"d +UUmjl+0QZAJU$k9bXZZMc2S2CCECp9S2Yl2`SY%8EIfI`AP80p0(%8D-3TA3a2XK +&"r@U&q8,+-H0384)'Fb'SXI-G-')DXC5RE,N`P+0fV1EYp),iQZJ4p6Y0UZ(-94 +@b'JU$KN$CR`F$ehRcB8+(+Y$3VGUYcP863Hd"eU)p%N-84JU0-ChjiP3U"#I"D( +lJX(mh#I0S@'CD%!)f3'$MA3ap43RM$bFHNiCVP9*("l`2[8[mS$UAr$j+r8C(M# +r1(6p5E0kr-NHcb8--q`C`5[UU@G9S!e4$#TLq9#HJ,,k6kiUhI6'@LkUjF"@KQb +SD(%jAN&!e0elF)9Zmmc`'#1FZ-CM&-P@djQB95l@recFb%9k2,J3$Ak)`Q@k(!4 +ErBBUd3baqKhU['C-a%4l&F6UE3$cAI+`YBGe+jLj'4HkjDq`'RX*Lq'ibXB)a'r +*$q&pqIb6Yr55jfBZa+IPH5S2pNN)Kkc3cB'c`iV)rTHhLULdrq"f%De,rZ1q9-G +'&*hiDFB3bfHI2)`1QIXbpifY(LicpH%+0HJf4pT[[rRIq"H)M`#0Y)G09d4()$N +fRJqhQ(BpJBiISUX92`lmf2($cFmE4A`VLZDfJ!X)XJh"9-2"e$U22i%mUR5,QJ5 +#Z!DLr"84[j5Ilfd533dbD(Vm0%0a3)MBZJ["1IV+IFM+ch2G4dK"XJe@cCrr%i2 +04V1%$1`m(T5Zq@GFXeIZ"ME+SZ%i13Mmb6T,q!%L(8#@piQN'XFV$T5*P`J"i23 +8Q*[9&Vb'++Lh89"[39!IeVe$J03Tr-j#54CE`2+G'KL["A$TAJ[UjXm5dCMHL55 +0BA4mMC!!3BU3!%%GJA5MHLlcb2%M`HD0[YNqie8d4+Nj4FdSi(CcB#["UeCpCMG +e`+Y*rF[IVUSPZYF$B6QaJmhjHb9chcE9L14Ue,dqSj%Q[)R21VAN8R1qGhd40Ef +CldfCFGJq%i!mPM,&Be%0(,i-4I0c#m1FS5E`$$&iGN#p#C!!JXT4!lF(GYTCRJm +'cA36JNC*HU#CPk@N0!!'c[3CMIbC-UbIZR'I-RJ8JhF'rI0m"bB0l*rR("J"f%1 +)FNp3MGVR3(6HI9b9+"XXlAirUH)c5Tp4rM3kT)'X)ipPBSSFLCBFHbCAkVJ*!%$ +`6TLZUY%!@0@D1PA+,eB6@)bmJNAGI&U-iN2595'6L3PhqP)(0hV4d+LEMk9'AG@ +G[[A[cYk(5Cfk3HV3L5"@(1fi9U9l*hA`6GmY"UC&+'5Ar(k&VVMDJ#`MJ4kQq'L +J`CY-@Qarr4HNKJFa%*&"!KPD6ER$NiMJHFe*"!D3!#)!#%p!8&rZ'(Uj#!'X,B- +GVfE6DaZr3MH-)V4hSK$N%,%N1Z&DS@&RNFG*DXm&d5iHD*PdU0Pj+%KT[eQP@r% +MG!Eb@+4EVL5!A4VSfkV65IiCM4P(8J-QUa-0H2cBcY4B#a@,80N'((,KFZNLZFm +X0mD$#Bi`QTP(`3bSDj%a2V)HPjXk#R%$36[%a6hB%iXiD$ZZcF-R&q61B"UD@Dm +'df6"!@*$@0NXL[5!iK3#X5K8,hEhU$A)K1q0Q[TqUMDb``lrTi"JTF@McN@kY&# +eYQX,Y4H"+a%biK@KiUNQ9-$"+R59JeAS2Ll83Y9i24`U$0H&VU+,&@,6aEjYS8X +X&XpS4%Blp%,*),Bcq3RS@jRi36m6aCd%kMZF"%Bp05cL4K"mQqGXN!!'&X8[12" +0'PLb$5a0'MLQ$#a0'PM#`0SA$4ZRB@r3S-ff3CXR$6UN$0VmiN%*kBH"#"B&@," +ZSd5eCqFd[k1`aNSIK(X8NAq-a)%Sd!2)jVQ8[jF,GbV@@k@kd,#cD$Bf@dj4Mc- +kLE#$+N!k9J"0UaUc!TAeNZ-0LKrqH,Q)J3*)pr-@J@*X1KICKUYU(#,Mp(iJYDB +'4$q(S0r'Q@S'ZK@RH#KFXLeQc@R8I4jShSdTDLmAl3k)cKa`K1j@R"5F1M#)Td0 +FEZIJX,X(f9iFJ)acSfikKV,$E3dCjeLbU6dljrkdNR5j#&H+l@&GMK,dHM3H#pE +ICQBkF$CfSKJ"CJ-9m5$@F1!F#`55kH$fd#@Jfa@-`N1&J@B&+3ap(4N&BaZMLU# +!5(895F31)m[j3clH59J%mHA-C,%PkRN3rRLJa(Q!DR3HS2lPK3j35p`(U#A1!p6 +M3,$Db3G-)%'2*3'FV!QGLi8X-,V)-B0GMU#3!,Bf0SV`L!lXQVUQMRjr8c`lCpQ +@P%&U3%)K%bPR@2[Zj1aUG!0R9bp#53j@TI#J3"20,aHPc,JiEd$r$8DA)D#51A" +'*Q%Q0!qXmNX(CFA,j@!3&hkEVRK@kXJrJmqpD$`RJhcS5&$pI9%XM`%*2h2XM4" +*EJE#L'J3F5$b&#**4"l@hB5!&m`raL#)B6Ec"l0@mE-9#qp*[I-(aDREIJcd(JM +qTS&r1--cV,X'CiJ2,E-fL%"&fh!D'`ihG66TjBAPb6&"f4bV)ZEDQr6-IPkD-bD +1TlmS8!YeX`XCDk#RprliK@qZ`b$2)'JQ`%"TCl*#,1dF%`L5ca$i-d1P&3A[0PX +4[!2&Ti6)KUqRpr[425ZlFRQDTNXZ6V'P)`$m)m`F64QB86A@PC8H-b0)(,PeJlZ +!0DAL8SRm-mc`@eimeK@,+N-GD9U0T4eMAFk*')U(,`DlYLm@Sb,D&6K2KDM,mUM +)6cSUXYDMV#pi&,D1lIQ3!##Cq"R!M`%r2@#MD+6pc0LYcG"PJNRCJ!jc`D!dJ'R +B*Je38jCZ!%efTDQ(#0[)%Gd!IJcib@3b0qQlQ,P!),cLAJ,J#)V8r62VQ!'*`HU +)l&C5rqr$K`6a$3SXk3J+j!DDHN'CHJ'NN4!N@S&FI"`BJ'MeF[!J4"CQaS8PDT& +CCDa8`2@Xc'KYUK2ARD`,H%*Q!5@D+50cQ3",LYQjLCG@p'5Q@c+qL1(!D!UX-@C +f!%ABa(i%-DJce-K)%+rSL)B(f(V8**L&5@Jp+BZFGrNL!&(*E`QN!3-[U($cM)d +45Tq)aR9mEHiZi[d#V-9f*#RF1r8l$%9hqAM$aU6FE$&i%X,"N!!XhXQ#ABRh6Yp +GAN@)BU4`&$rCq$%D,dfkcS&JiLiIEq#AEp-'Y&48$4$#[FSLmedqip&*R4T,6KV +V*Lff"#9-Y8jDpJHElr**(NZf,,1),SkVBp,,LBH%3k0Q(#5f@PL1aKCGF!R(4)B +5b'mhqV8IDIGDe`55B8I!rjSrX-cK-2L'3JE[0E0'MEMC9"hZ6N#V$VPMaV'!2Bc +19R5H&`TXTFjVR*hVR#bQ'HaN1k,lHRVR22hjF"FmaH%)$Y3iJbSP`-f)N!$l4N3 +I`2+FB(+'mBB)*2Xl(Vj(Ec6@pE-!J!)-56CMm)NZrjTlp1F4##f@%66dJbeMAA) +MJkl6"9GAj-ai%q+9Xpl6Z$[BEF1kDBb)MV*L!-Y'd6(2eP5%TY+MB04hI'*Cp*! +!B&iXZ0!Uimbd(jPT9Pj*(XSq9qQ+N!#"EY39h6c*a4SZZ$`ljqj5cYK%$(,@*QD +AQI&(Zh#J!BAjG0d+ZC!!1mVCSM(l`SbAXjj#JA%c0A"CYArPdX![rP2SdG4UbeS +f-a2Z5FT-3XMdXa*!VF02)hiZ!X5'&'@3!-2B%Qa$eB!N[Ha'1cSjR*mNCJdT@@X +r"rb1me`NX)T$RjNk!8I[KH0Gl-c2#5CRJ0-H(40bmYRlG$TNdi5k8qiJRAMV#l( +3C6MVGFpQ"rH-fq8"VR*"!e9S@1(a+4#0%$1GD$$5GDYFbRLX!-'X9FTi-K-9(JU +`QA"32`rC)5`9#,hS$$VQqDT[)"2CUM$Qi`GUE)cj"2ihihmE-X[0B%H'4+Z4)af +)a18&eiq"QS$SYJq"4GPk20dBGPd&Sq@Ui%JEIUciDB9LS401l0ppi@C%SP"#-HT +)C1GXUfiDrq,qfrmQEj%hL'+N$KY-1EFRGH(!U*3"%5r"+%4%Cc6b%D+1HBqZUbT +A'KPhAITr[M'"6!N-)JQZ1+@kKaS!S1'I&Fba#!q#lLRm*)M3[bV[Qc!%Sr-H$#& +C$S'Z#Hl+A6iVrlIU#9hDZ!#B-$R&NddG!6q5marlipfc)HTm169!l*rV!"H(SI" +G1i2-eqieQEm"eN4BA(ENq4PmM+fD$ZfKYKm+!5DZTT!!@ERIZU@iX%m98"%QZ9) +)%0)'I#$2KU'B*@2&B!8QFfBk!2r4X5[L!$*d"b*Aa(Nd(X#4erQid$[m'AaICYG +!J&i"K[Pe,15#@A1GQ$8)QNjQ6@MV85k+SK"HGLj!ad$b+'8%e5ffJ+4&9Lb$JP) +@"DAMJPQ[*3JLecQ)I([!X0hS6""19L8SAZ6JL)aKaL9(N4GX2#-UYGLafI-FI2J +(a0k-DK4KZD%SE@*$`"kU%hm9+M0[M*h531B4G`#4f4-)0!-P[0`CE(k`@0MT-!Q +Cd('&IC&3)LP8il1Aq*!!l@QNSL`"iES4RaIT-d8&@i),YVmlKf%fGD2523)A#BK +$!q1M")*C*qq`2#aj"`E$cd9LN@B%Q!hFbS!2T9GmprZDK,C2"RkZb[#QVh$V$Aa +S$ieeD2UNj)4V0fX1TC+m+!m)TC6pH[`SXd35U0BN)kX@4PBNI2KCh5)RXmUZXQf +@QDFGq5AT-KTAK,4TLT!!"RB+9,C3J@[1J&Ae*lGi8hE++Gk-E#)K)![)XaFrVQq +`3RdF`b&)'SE,6R&a!C'`$TH!)%3#N!!X#0R4I-j5%(VkNL`)696j'AjVCmFEURM +4GrqleH``1fU91M+138($c%Gr!MS94cJDHXXEmP)PN!#(@i6KA5Qd`bGA#RNGVZp +bKeMqD1l!23k048'R15TAqQZ'1UIP(kER#90ZM0AG3Pf16E$)maj[i8BAP#qX)(m +2660!Q+&!FKj)r(1KjUC3J@E`Irfi&d9@N@EmJmV[pX+YUBL9$G,iVFmN#C@BTRp +3'Ge,#Zfc38F4Ncj2'KmTR0"i0+K5djJdIZNAKCC0#@G93"56dfrHM2Yd1J&mC6q +'kTAL9McRC(8SeG(NN4dPZ+#md5ATXk"i-ad+K(DHP26BNVV!9lh*Y)HCSUe`TBL +C8RjR&hDX#1LGkZk*A4#9h&2P+4KD+C!!Ek"!&JY0m8!cCC+Q!A`k"rq9h#NH)LE +kBAF'A1K4r'["`0$!I@Mj[*2ArFL5+Zb0'e!G0M8dbH,*#K5DbGP!@"KL#50)dk' +B(mNbGF*"NR,3KAqBER5J-`2i%$*MQkR+)l+TDjm1*M!bJ-K8)h%9B(p2"RC0"e3 +26VE!4UG$%,,'l2,Pq1Dk2hlKU1H"``rdA9DcFql*![#Kk$Ee$EFLkm[J)%)S1,0 +c[QU'b$F8h9Z5MJ*!rcHYlJ((N!$#)Y'('h82K2cLCmD@bBi$B6#bH*,9TfNh&!( +-0ZElZ)*()jc4lrjA64ql+k*`'D+UD'9Gb$aqp9`,"aDpU32+8Rq-Uh8fF!C#YcJ +lCp2FP+%NR4HFL3UJI9Zbar6-'YRdj3JhfbFd'c&3'`B[E@T!C3!i&Mc098H4HDA ++S"$@f)@T+FkSK#ka#ml+($LfbjhJ4$!6'6'S(R4EiG###iNYpA$qd(RK(Q3!'Hk +j,#!ZlU$11b#',L&@d$e!4RCQ"E%,`6c+8X5NbfSp#(XV$!I-(9+[3f-@miHBf0S +pfTjjIB9mb!j#A$Z`Q6#B2Kf"@,e)l%IP[5ASU$%0a4)DX-mCJ9lc5HV"E8+&5"' +Dd@JY%dAim@RlXRSJM'2!"6h$qC4mjc9pN53ce,rNNa-3@B*-#KJpd[kSL4P1B-m +a5Q9a[JdU46RC8lD1KNNGp9+[dK&1$-K%*TNGpk8#6KKmS'MqdR%iAq4mGGF%GK3 +jSS%9ihKEI(2GQ2q2Ak##0`e"!4AQ0Mh!P9!KN!#RQAU'@qZGJ*I*J,GaUJAJ(@9 +NfH*`G#LJCdG8L*paPXlB14RiH*QRF5FiM#)TkTL"XPAUZ*XU'5'MRKCJi&MQqM% +UlL%$Z2%"G%TMm'-Jdr3`!6BDeJ*d#c3p%Q9rS[YR0)iJN8`pYmbF1$8L`mF*9+H +qkDY1)HYC&*2X*1E&`NJ`9SQV8[cQX3`Sa&dY'6hD2NU`[RPp`d8-ZR)&P[9EeJ, ++,UMpP)#`rM9@qr'#aB4S'cEamT6!Q(fi(4@#!Sd%`[Cq4L"J+$apr3B(V1CB'`L +Y)k,-eIPHbH2*F"SNFS!4F$,@1VQMb8`G85A-Q%P%-mP9R*P!63d@3DGGUGiX"aj +dIRCfA9HJ&B2f8R)lMrADMRelP)'ENrX!1TGQjfcB1!RF6&$kQ0Mj%!"hP!"96i" +kNkT`FYH)TLG&S,VKbj-kfbQ*6*+(J49JKFT&M#Jfc'ALbS#lBEiEF$Gm`S$lT4U +0he)FJ-XF96Ul,&#%&U[[+iAS%!NI+0`I-)d5m`c+@6r3bT,89I9pJ%XcNVe$C&f +APhGKUBkRLjdm#$*q,A!L56jT80qANh#d5aNJjl+DTm)TKCe-0#PQ&K5NkS64H%! +Q0)NBRXN#aLq(4Q9'5bm,*TK`P3C`b&H,DEJ$"03X-'!q"UZJFDP49L4#a%B'0Hf +Gr+UPAlR,CqU*a4F8Jj@i%&%*4aeA,K+'!(cFe!(408bEf)6!f)aL5#rKS*NA)0k +qcd5c@lLlGBl+MN'F(8`Sf8F869H%UqQ+k'PUB2'@-qQFGB4!FGU@FCc1"AQ,,H[ +iF[V"!J4Vhf!A$9-a#J%JeQM[dCN$N3pD)JDh+B%AQ$i`m`PXaiU#di'UipH`JFV +R4amaF#*BCQVFcRUkKFiNYmcmhZJL`Fm&X[5!q6BZ2"EAAi!LB#EFk6ppjDT`kBU +"e1EAAK8pZQN3!KB'9mi`ZV2&TbL$a0Y6+XCEA$Te!Q$#K5fa2P(dfaUEDSZ@G-m +L8,@L38k@5#XR)$,VhC9b0KbCU$K[b-MEqZE%5ePF5$r$f0r"@lC2F%mNKKiREll +*M-$$DV$H91f8kNMYP1!9lC6U+e#66!R+SJ833ikiD$)I"dKFk80Mcj3J6'd86UQ +'XZe'-)5XY4i0H@M`XH1$M5QrV-R$3bK6(A,e!aEGem6!r&J'9de@9j8j"eZeJP% +*rf"+$eJVLaF!F3#S@qQ#R5B%m%$EPF)Tj90bmDUIX[F+KTP5MX2VhG@k`E$LLQL +X2Kl)r-KKR4qQDY6aYrjdHh&3MCa`Xc@C#1i,VJSL+`#51+C,Y92+hlU'9reEa8* +Qpk*K95Da0BNFMNrj@MDfjMBDM)8d0Lf`QGN`a'K8PD8b14+DMmJfqF1c$-QcM3X +)1&DKLQq`BdCM2pc$P#jIjJ$Z2S#V`M,V$F(-UN`TB+G`1IY"#l193`BX$MP5MmU +SKh!3KQXa1Ka$mhqS%CaTRmTL5"pPb9&3cMpfHjI&i9'(rhLkZmUVl(iA4JB-B1" +M9EpJ&b`r&0fUT(l3bB*hJ"9G3e'6V-MN9ppbFVkdbaeQ0"VUr4`BQH@FC"8rA1I +dM)DIk''NG@9rC4E%fUi*MXq0A'P-X$XT8&QVMB%*j9K@S*Q5KCUHk$c1MUCC%a- +@M)-#2M#aPk0!T82CP4$%Y%rP"3jG!+HBShrpVeNI3FK'G(E1TM4Nc4"eA-`D%9C +FbZ(1ZXP!5p9QNK12B3'GKhjq,`0R5IUY*+%FL#q5bCCma)CNN!#%1XSq$R)%qe0 +CNGAh(TR+k[eiRIMYhZYq,Ca'T)lIlT@b(V`TXdN#pG*Kl4Q0ApX6c9Tp8i6Y2F) +F1hjCe!ZifK3PXMM,Q1)XimA4&RE@3U*F((fL2(ahpfNI,6rqZldq,eIZJ%[paA! +iejFkAE*2HkLN"iBm(,IIB8DRP!8f#M0-l29!,`TlCUq&)$IIQB'3!,5eQES9H)% +4!39H[k5YFGclm6TIEDpZ2LSXMHVHV,CViM$E-FV#UP&2(rAmJFS5A"R`035c)ab +3!0*@!'8ZbK-)!!Z3!#%SC3%XT@95d(CqD0[1$bffmd2EGZ,BcJpj1f!#P8UR5kT +dTDLUXULN&pGSeLfkr4SfYN$5bKY6(f9e')ZGQHN4,5Q#dP*#HY5HP,28j+"4pVJ +[A")CNRSNcAKbael,TKTeM5rm60f3!(5)'eeQJePZAZ-V10Fi*"hQCEI4"Lcr"CG +*+m'"Z)jIPhClM`8aiBkr+X`&*33AHcRXPN6!kP`phe"L%$G#fN1'Ar0R58Q*'!p +Pp4VHimq#NJ*a0(6UX1&crU`[JHp5U!5ZFM!EJS@T*91aF-j-@DdbQ!B5UqFR5m* +B2#i[PPSZRTFA&lXA-eef+!B+K@l%pE!%a"eHTPae,T)pc0GNN!"[G+4J*U)ZJN` +N6+K)RPjIdGQSCmkadllDjh4Elra4h([(e8rU(r"+lI@2Eaq-Y2reb&lIKT15(a1 +24Iec6Q,LVd#-dMZlK6rZhIljldpYmNVa5pDGJp&iZCd61(A`MQP5!cUFM$E-bD8 +15GddG%M'[3NTq+@0AUNMEpA@`CU1mM9h9ahaEGSRa6%p&p22dR5l,Kr6lA([Zfp +XAR'A9r*FeQmEV218YpeGZFHh%3VCAPqdSFJEl9!k1(5Ed-%4prijEeA&"UrN(hR +mhX'8rkrlc[VZ1MCKLc#@TGZ1bGDipr#CpqVZH&GUH0ZkBV#a!9H[q0Mh`%QTR6E +DVQ`dM'T(h5)Fp`jUHPI64PI44YFS'rhFYY%ce+&99i31VA([dYjr8'QMHYTSQm9 +'cpJf+ZR@BES8prl+0hX$Ej4)lL'5Rf@5dcEpb[5%EJ1Q*q,HI6h29h!#%G(ECD+ +MJRrCHX@3!!"Y'"'&q"(G,R5-a,dkh9rHSLf[SLf[S5ecThBLIrXFI&#A'YdbG+Q +*HcmkIXFl['e+J,L5!'Fi!BVB%%1(XQf0ELikD1,HqfkZLDie!FlB%Z"4h94-IK3 +NQ[h2VrjGZ6*Y"4&j-j'$kkG)pPj8XN&5f*@N'09Y3FI4Z2I6Iq[lQ,DrLVE[6)T +eR"50JK-MBCpcQMU0khDJdhMFqr*VbDI@NK`0f,DGbBZ+4+9alk,1*`p3-Mc"bI" +,14RLP'#j0'Pah&YNIYfmrPh*IZNh10jH[T+2Malmqc3&K&FU`bf,He2Rcce(j"i +LFMF6Z6qLC)@MYp4HP1[cXK0!h2I6"CmAEr+"c(BLXe8KmdSLh%SQ()EF([IHeH6 +iGb,[%dcHAmVNP3(@`dQ"DE[LhP#20H2[ldSVkBSVj5X556X)91h+J$[LhJdIh1X +P8Ji4+CZ9cDcM*'-R,fPPd8Qkj+DillGrrpV8M6k3!0"1*,35#6rLC+,Yf)[1dY3 +0FGp6[rZ[HeQK1B'-+`NS9bU%h",h6[PHqef6#8Q)``)9B'Tqh,[i1cmi`aXL3Uj +8#,P2$Ki@K&`ApadkCler,B4X8!+G[2'TF@rh2rfdirq#N!$6iYkb[hkhP"13!+l +BB%YU*b'G#9-8p`CZKGBc)I1'3"`QT%`FMd+FZ%,'ZA(IpqX'pM!CkqdJ$T2a+h* +3I`06hr,+bDaEmLdA)Ee@4RSrr6if!GI&rq',aQR+ZVMhc$m[mP)5lkBNEP#)pfZ +Ti3qqU*qQ!3!,rrpI4$R`FM(A'$FFGKdQ`V9('elh46YS'K*LkGfMGL,'5LC'q@r +ZRJ9bR*%mr`,bdL3%M%rHfGE$`DHqPDrp8k9!q,d[fNj60X@pqarirlU*@,Z*@!f +fB,%5&rI30""Ud4rf'jP3I+@DGN1[UjF)&BqZI0ejF3$`1rmb0dJ%@%P)rcG1T'm +M%T)`m[qqr4jGZj@[r9-&dIc"5D5YFHqf$ajC3Q#cQm#Q`BRHIqrF2%"Vbemeaj` +NLXB0"ed(kGUI5b[raAPY"(RrhVpe%2*B5D$r'b9jj@[,*0J3pklIN[mY3Kj-*-p +2Mda+f,PalleIqZEG&0af8h"VF"H9YX4&S1bDN9I+&kGN@cNTf@3L!6LRIHA8E8, +-+`R8Iq-'GGmaj9)J`Z+(SMe%TKBQdrdf32HG9)L!41QVdrf4NUk0NNj[L5kLpY- +)b+p6YILiEpE##cpq!!(ZdKVD`+S*k')PTYTTk[DiVqc9QGmLC0&!*0[Y4KDqXfk +#h2l,-e1)C#e-X[YYL-+AUj!!!dRdVrCee`K0Y"'Dd&ZLL@J$$[A6SEZJH[MVi[r +Mld9)m$@8i+[FD-*haJh+ah,rr8%LA!-4E[GD#)F!GQ[`lI5I5$JN9&V0[6XQ%mk +*(SJF-Z%@ahhI9IZX6,Lm0B3H9VR4JidF!1RXj*S2+*!!04"Uf+fJ"NZ#)+!pRr( +fD3SF,4`ilTH43jbZE`[iEpaBrKL$d%JEVVm59jY&'r"EE!!J9(I(RApJ8K$"iJV +"6[,e36#2%karHIE[2f*58&,kPD3mmk@EAad8rRX'4I+13@'(S&Nkb8%M15+#Ub$ +b$fhhcJ(V9YZ(c%(48ekrF,4F@PANIFVhU0$ffIXJV'kS&jG4I`6LYFS1E-b%[E6 +UQZp1lpdI(ETrbVV[['[8-m1A2SUNeE[fAPVeU0m`*aA+2(hZp$3[$jc3e)Llpq6 +k%UGaD-1G*qIiDY5STPAXqLMK1AjkQNqCi2hGRQ2ASTj6Z&+M-U&F[q@NHi,"jA, +aP%a-L4ad$U'e'#)BrPhaXAm-pPpD9Ei5AEh4e6rpk26m'M((Pr"H@TA`C1&+882 +di@VKE2MG4bH[BASc6BGp9QF$)aYZ5RKi'p'(epQDF%Mhb@YCaj!!YHY"&K(LI0S +ZLd`(X92N$+aSN9NVDPaK'q"$l,9d)9)bl)mV@5"8"j*mlJ@U%(66[B!U34DIhYR +ZMfqViaUPimh*9j!!eVLc9)iLDBdlfm@IcJ`D2Kjh,hpE(C3M(6ihBk1,@5T3adj +CPeUGTdBpj9flZZHFVI&X1R[%#aF%rf8ekXI5X6VraQ0l['p$rETp,i*E+`FhkI' +hFS2p4EN(ljmqN!$5f%@`2qVImG%Fhm(lT`kFRGmUSRlA3F0"ARK2@5J2Bc!X6+1 +&5%IdmGGcHB![B-&bJ$p0'Z"cC8(ZrQZjHlbQSmlrqf2D`rE$P)Q,54dlpdBlbVX +)kEdVaI%CT`r[`$e*Yc1IA9+f((NC,Kfqk)EAepeHBX%@Qc4"@Qmj39H2#U[%c'! +cG3#LHM"'TYIQU4F1"A5PYANIcIU[[a*$Mm#VV"1Q%dTr-kal9UKi,4%K[,iQ2(L +9#6pH5d8(AQNLMTG1Y)q`!lAH'%RXKa1"h@&PCFpE,Dj@#[c*DVr*'YX'KLJE[%U +0J''"K5e`CmaA,K)Y!GZU9@(4k"Da'81ZdNK9'a9@(p4pqLBr&+9R6D3H#HLlf!M +b4E$iiF#J'8S*U2f6A'8GUXL,F*m)b8!$*NDDh5`DS5DU%mfmU!SB`&-Qk0Je6c` +'jHrSA"(#35%kC*J'(`9l&1k`GRBN5iXj6,@cPS#*2$m$%63-SZ%*0#4GmJ+-!m& +E$P9'%B'lC1bFqm"!GP"m%%faFqN5GYPT'Xmk9*+&c5rTALV"a8'ha1f#P1UbRj3 +GcP1b`hP'hrfc[XDUN5IkCLeKGe"M$BlSdUAG5YKVK@l@NZYY@P`"!41[JrI2@V+ +QLY9TaML6VAYU%l0"r3ECYAL4SE!iUr[lp)UiY+iXKBKq9j1iU"Kc,!HEp&6D)X0 +`@YPJ1E2a"Mq$)SUV#BRj11*kTaC4UME%M##aCUliEf&V[Vh6kH5"!CEJaq,)`3r +ieB4V3DA3VDNY2Q8Sb[,eSl*pFBQKk"Z)$Vk+5iV"A$CjLFJ4+2V0$aCLBMf8qJG +SN!!Cq(KU%%SSA1mcZQiF),-94'8QlV,"FP4a6U41-++8&6(GqcL"$2AX5JUc@1d +JFRR#d)4Y`A9D*JdcHEHbBB(ZlmZ,rDaZVRhM1LfbF6Q`-YmSB#*friJ,-#@C3dM +QHjRNK!#j5T+!ZjLqqb4Br9fXH"[m6*l'bS5ALa)R8NTJ6&[XC15he9EmA#Ber-! +,+lQkGB3F@GbZkkHK6[f3!"Y0%IA9J!X6[UiS9FIN,M$"1X*49(@TleZ4YKJXfq' +daEaN+&!ACZImGUT-VU#DbDTC,6HjKiQe3P&MCq+%f(Akm[&dC6U8Ck%8Z6'!Q$' +(C))lL("Zd`Jc!GqlCUKIbDS"0Qb5Cr*"b@%eHGMd`2FbhB1S1jA&F9EY--J3XaN +!`e@0UA[Pdlh1kmV$I8e,6QNTH9[U3MiDlU@0!-6NT+N4Q%*bEr8G9SR%TRjlK,P +h2VQZ1AKT$3+#qQSp'mbS)f+S-M'`d')MIYL#q(BR8BeXArcE*URBmT0)1QCfNh4 +TR59*(dZc'15QXVMYK8MU"L8f1[2E&RR6SPiQ5K1E1PEP,QaXqEIR#+@f"6TT-%a +'GDQ&`6K-P9Z5aQ(EPQUj,FF%)a-@4KZN58BE2$#UJB!Hd$`MZlN1'91+@LD*!Dm +"10['--@jb)CpIrXDXCJYM2l##0+iID2QX*6mS"0Q-XkaBV&T221cfq@XIZZHQHT ++$5!Sp58b4p5-`i8J9R!9XeK"XL3lJ'rh'If1PTH,Q+P9!r@P`m0+P6D"DNq4&ji +k@l40FdieMYNla+UI0(f$jI5NSq1%i+@-`p9#9hjPS$)S$3#S$q,kj4`0R8DdrU8 +md9#CGi@09HXUhkD'DfJic9(2ha%pbp%1+k*l-2N(P4rcj!CGj8eU5+"K)8IMYa' +GcG(f6a&p(j1E+fIbj0@kbKR8X!!0Rh)dq6bLa4c9Mb*D4CGi8lR%Dp4J3--mMMC +mK1KFMYUR)eT%NkFTNpqcV()J1GRNUV&Cba8#(@[H!L`),9FmAh-aa#k&Yqke9'K +'5-K0EJH#0m#*UVBbP9fjU048fpdRUqYGK9@RM&N`K*%bjGiD52QjJ03T"D41Gm9 +8&E[59h899j+U,Ve8@$QpkVbVXNS,099YCGa3@08,YFib(SS$`mSHNi$6Er`l8fD +I((kY[lEU&"Be["KJFbM6*aK-JE0X9$'QR&"8H**,FN5Yb+#[HFZEmV)4jQL030B +dqT!!3,EXNB03"De*V2i2A`)Lk&ZRSf#F`kAZG%#rFimicGM"'0Uj"blprY5*b)R +*TL38BEpaVFUUCPC6V8e*a84X$r-PSD4bA"EPJJAMV(dmM'[3(mG2k*+)lSpk*9A +VZ`#$$j+DaC'NT*lLL&e55cMLN!$8Faba5ZTaMS3P'!a&T,A[Td,+p0UpM+J+jqA +aB'Z3!*L2PSKmlaCIk$5,+G(ADm3MhKUK2CCcKKh+5cl5RV@IT5jhbXiN!QCf`M[ +FPel&K#93iBXRD[bK5)dr$JI@[FC'l@Pjf$TNacBF#e%&["V0J(MU'(l1eN#Bccr +,4M3jkrEkie*laKNi9Njrb1822G6MMm1pFTRc))"#N4X&%5S[%1I)!2mj11+KQ6k +b64c9mi3V"F*B9F5*d95,cMRL"KF68%6VM*%8PRJl64'eQ5FM`JTqkBUjULL6+rI +V1#Tjh#L,A946XL&aZp'"b3D)NFr#B)31L2a$[X)EZB(iJXTCHkThITf+-MBL3ZT +FUQTe9q@XMj9TA-%Ik19(q)"5P*@`YC93l+jV)EFI"eh4j4j%9RkcD4*-FZ@Ic%` +R-eCq90q5"l3fkC@#JDG)2("QqN362%iaC86!PH'8jCECU!S*j$Qk&TP!-(K`h9d +",H)dab+a5CH*AFP)bBblc&6)jk"k*9G9i`%5F'dHid,8,')KEGq,Zk+3!0JcfD6 +4Q&aT--NZ(V%k8f(9e)!$!AXU(p0iqL9ceA[(dl%m$8'SY[KEU*V*)Plli#1QbJT +V`!TR%C!!%KhHN`SVV0NhiD!9dRMkmF!#K4!NB!V"MP6#h[dEUF[ZqkcmHSc02I8 +V!4IE+8G([`B,k$T%hI4d3BLPU@%j)d2(pp*9c*aKHFiA'q8X!P9"4L8$RS"%e-2 +P[KfLF'6bNLZ!DdlVIK[SF"SZl`L`%cS1S-*5hS"$hN"3G*RCa5&e`LR13r@1L`C +5%%IeF"$VT'Y`*4)BM4&kpm"XfUUL`GN0&@&N"f[V-raS"rIQcjPU+aS#iilDUQe +Fc"PmBm+&*5)Y1diX8B6Uj4#SZDT2BG@fl[1SR+QhIClJKd8df3LBYXA4K8Xh8ND +Nd8CkKfcqRVI)h9b2@,MDYjPUUkB(D!!d6XIflGNhMFe14#S[d$"*E%@VC#Q6#)a +fHT!!`d$kB5*`NJhlE,mY'rKCpSYqd6dcFB)hd1e)D@%H)J3h6KL*)%G1,%1!'M) +824T"pCXj#hd,[A$ahX[r9qc02lh6KmcQ$(B6DbKQNed3%,6Z6qk14`Fi$1qLZaA +G[3Yp%Dh'LJ03K2!"NiF$8e',)@HqK1U!9G2`LPC0[3,cRa9@[#)9$USik1$YBmZ +S,"0j!!(%l`*K1$N3fCDG8fHNE8)XCDI,lK-+#HGF19&K4kE'Cl%i9A'1j`HiI0) +r[[dfNQXQ*TAM*`q!)K#TCJ&3Y(G[DkUYX&YfPRTJ5,jBkS04[Um3B-'e#PFDJ*! +!q3QZjD,"P!-`8"!66[@2,rX&2ZSaT!G$HTSiih8m1qH4kFS34JbKaa#Rf#hArDJ +"S(A1fJ83!&[*T6pXFqZh&D0TGT[6#5&FC)kIaE1"FL!VL`"-XJ"%m!!-![M(q6A +V@CibSGTN[6TJQUF1"(US-N5F'!aaBM#NX'"9X[BYr,JPKHh@b)mFNE2Gb"JdrdH +TQKQ)*l33R1G14+bb16SmQU1bSZ9f(Dj9Jb$e(&IRN4XZeHClVjJV@Sc0cUAM2Pj +`2VDNb@-a41IY!L#MmDrp#cYd-QN'M@eGX9%%J4Yi,-TP+411(b'`H!T%(!!-0di +B3NQV$R1&I%6,UT[K(KrAEDp&"pff%48L,@HPmD#E(m"pF-)&1LdFY@3$E$*aB4l +-k!)lKi[5'pNj$ed'-[E&r!k2X8E6ei6!1fX*LKip4fbCFJDNBjb48-M[1ClZ($j +Y"lXP1JheTq5+%808%E0P8J((VNhN1JmA-kjS'Rl4K"Cj!N"T,KPJ'T0G5)H#-(& +A@j&JJ@VjI+lUL5Ui-,l#9H3j8l3QLpfBr@P8+54#%ikb!6,,!SNcD%iM&%qB+a, +1M'*XiP"k'JT'XhHIKGQ"M5cBaUM5-N!HV##Z0SJXc#mZPB0)%8dAQ3Rp-SQN%`C +bc+'"USN33U6K#R#60Y4c*[2jU6`XXVkGcS%4-%0)4SM56dH93I(i)DV'@[f5ZEM +hbYA3pBVcH"NVcMATA3&UZUpIb)B&j)MRT")jTM48)r+&)KLkDZ+LcF-9b$flJQC +H3K$Y$-5[A2@mAA'1`3)1d!d)cLQBjh+K!1C0fkRb*kkdI#1U1Y3@QqCI$48%DQK +kbZQHV)$'D8ccJAL,Z#ZF&q-bQ$4em'ECqAIe!8T`SEE4!(KdQ8`31QTYC'L9bE# +d4bD$HNiQJkTP-UMC6!B''@Tm4Yk`qKH&!+H95+l5F!k2"#04"dpIqCkE'+%0U&K +M5Bc,&HF!D[1S@V2HQ94`Cje!S0p%NCAZX%M%Y4!+"Zeq)U%FQbF5#XHkL"3L0%U +"Y%@jC1AbfCbPCP+8hFKLpNBC"i&&bda#GZH&QIp2B4bK'"9NTV&lV0-aPNa$0)* +KXC!!X`018bSKS",GA##[#lMiSiJm'@L%XfiG9A&j*a"&iI0F)*TX"(DF'fJ*$DI +TS!iFIQX(e*(mHXFBPaF4Y#lLTa%*GGl%jV-N4!FL"L6H22bmKZZcJhX*[CJjC-8 +aRBTCXMDkh&(PFPR1bp9H9GYdQr"UdHhJ,(U0q$SMF-pFQ+2M"hTPjb6B1-dQZ4T +()Sb2(CRT[('RmbdG-"BiLQeN"ZTiQl(%+ceT1fVldRD#PA3[)j+RVU)SM1!6Jcc +e2J[L%%+Fa2j%VKi6D-03l6#Sd1`%6'cM88fABQDK(QcK#$RQ4aL&X,Q6Qi0`(KH +bJ2qRX#cJac,"+)i%6*Kq&%RN)LCT$Blj-LU$)Y1SLj!!@B,pZU2m!CHr!A,qMbJ +'#M+aYH2B@Nd`-X0)dbr)#"%XTYTeAj6G-V0cl)mLf1h03K#l+h1L@G3Z#DKi#&A +9@Q'SXK1SQE-'8FP$KGqb3")#5VMB$!'NX0MX+Ua)Z@U,!d&ldFQBR5D""i$JqZK +,KbY,R!ZS0R3BL`QCIDDq+JZ6ii)V)$Q0LL(4NSKN-S2Ge)2#"QB%`'T"CI`fVY* +XB`GfHG#FP!fB3*JM3bQ'c(jQ+09@R(F@#L$'%3BISfRbB$bP+`+fBS(k$rpcJe( +!61+a*d!"2qL9Q9a8jERM`*LYbM1bfIMIb$m[(DT))9MhmX1YJ%"@)G[Sq&&PaAR +0)5R*%H-36A&q-PZLa1+"-"ZG&3EC-$#5S(Q%RcM5pA-rR*'lZ'S6&eQG@bJDldF +PLTBL!U!K9![j%1kR'lAlE01UY(e83104)ea!%dY`BhhRE2-0[kB$kPNaK-$a*SU +j@rkriF%[0'%(J'J(Q2k0X+$8k&c8qRLjEeP5i1&M0-b-4RZIjlIdf+iDARL`N4i +)k,a8$9e+MmHEP"2M(X'R8`SLk,XV`#de1&A-,!BdXN[aT!)iCFlMM%H#(CM"i#e +`XP*KLU8VVB$0Ak)b#k*b%G%"%d"T"6!G-B+%+P13!#d-T%5!+"K0,$8iNGc5VCB +)EZPL*iU%%*!!C05fG&(-pR#[TEpNY"G$PDLP[a`4&P1EPF``)$d3'P(reVId9BK +@3djNYA5Kma#q9P-lQ4#2%L0@(p$,D"c&[CC34MY2!TQ#5+E'XDk$f#cFEf9%IAJ +LSQE8[XK)6#lKYal%CLBME41Z'SM6YH08RI3G,,dDi-N,Ai4%$eY84H#Kir,3RK` +&HF%XcY)b4Pj,bpD'[+BG9j!!9jB*%`2CVUUd)D$30NCHD8*"AKFPG'IN*@mXEBJ +ADM26*%CJ5mYN"*D@U$fFTX%8)5-`G,R!,1)rPbYALJ!8(Vk"`RNbUb)P5-arNX' +!+UUR'He14J`qPdeJ`Y`lJ3P6m!*-Q!+C#G2SFE0KFKEb4TP)LhI+9`TpZ(CQ6-k +#r$-rQ4Q6Xe"QaNaQJ+3)`*iA%bBAd'!jm8p-KiM8E168c+B&hFbB4LFcTM(M%,C +96QDEFeUi5J-8I,SJ3)a0`(am")'*!a3V!b!DE,DI8B`)&CMf"GJmE0`TkV,5b`D +#!%cGY&IbJ-`QJ1(6'f9#U"mcJ+)DD5Q$%icBEkSGAQU3!![PP&)S,l!9bUdhhB9 +bDkjF++m9M*(FJEJBKL'2Z5m-`#m'GNY`IRT8[U,BLZSmd9GkPRj5HhMTT`b'#+$ +&360AI@#'aY*2)+EP3@PG@4%*M(1"$r*CE`K8Zcf%LJ2KmBlRHZ'BRlbPcqaEd&Z +ia!MQeB*$K8[NUBrAZp#4`C10JeA8"0T`e!#1bXD%'J`rJ%N(N!"*[TjaD!,i9F[ +J*pA1qKJQqDSjfH6N`Z0h5Yd*'Gi13%%&X0$`a!4G2XmL35-N"SUP9JX(%ca5SP9 +Klc&$LXd*LXe)N!!4r&c#TaB4k35V))mmKdUI!)NLCY[JFBe2$,CTZNCBp98P`8$ +E@rGAh%"#cm#'EJaqjQ4Ub8T2IZLLA6qLNV$TXjKH,Nm(k1kKSDj(@#92V&ifm-D +9rZeqd3K&UemmJ3ipLMUlYS+#8rHrmi-piHk`3VGijNY4(cHi!Yhr,U01'K)X1P3 +#SkSph68hZVK)Lk$5C`a9RlQKqa8f4`qKDV'LUS'j+fE5b"F8@jKC"B8Ec2E&,L, +"2kdY(*c1fH6"cI5BXM*Pm1hG6lS+haM!6lB"NF%J*QZ0@8%21X,%HFX`+R6TC@H +H`AqQKkL@+ZC[PR9ADlVJQU"R8e98Z4Q0%1d,P'@l['@R52pi'EBecQ55k$'4'3M +38#lN"L+XmND90EjiUda@0-$NZMX*p(Xj#4aXH-K@08M*)#F9TSR$`V9#bG5#*@H +e-326L0NklYRZC*reHrM"[)',LQVGBk&BVhh$+#[,@4N14Uj&Kq2TXFf@V""N2QX +VqK%`EL$V8&PKaL1VNC6GAdHJ-I0QZUf)hT!!YiMU5NPNhr98L3i-VmH(,!EU!-0 +Ml#Q!XeL)aj-Z6%6%qkpjBme4Jr53!*J*XfZc!GlAAS2a#jlS'K5IF#4UZ&!J&SV +hmCSYCX)!dqcAd&4BB"S8#fmpLSS6#b98B0BYJr$D&JhYm!k-KpQJaUqPMKfq!A0 +B03j&3ml&J80BJ+U&&5ALelILdA'DLQ-H2LLQXr*P)!,,9!X(mT,8!BrarU5ZDbd +EQ2fri`Ci)KMJb3F,a-fe,&kcf#J[99BBN!$FKPY!16a0UUd`2$JSEre04+VpH,$ +jE0VLrcE%!+!DkVSQ96aV"PYJRYYm&bXP1B$b8'2MDYH("H*M&169m[69RGaJMm" +iHc@,Ve#p)iVXChU!MGPjZ*QRZ`*0ikH6ZKf$rm'9NH%kU1+a[J-3UJVAC3mH'Hh +LBN5HbLidmf'3!1$$(L-4+b-LULFh$pr,(Cf,f6Nlac2"LV-`)@Dl-LB-b&FGBXH +J*!m3"kSL`TM&aj1kX(S269aX3fKVP"RjNcUC,)%&'TlC0P8r8$%HaJbQT#NLKQ1 +0K!af!fL3!$A$4`mUj4+bJk-0AK$RAFi(lRB*bbBZBT!!"$QK5h#IK*QC%$1"6eQ +JQN)Cd6Z0h"%UNZL4!1L1V4U!M2h(+@ZUA(SG4#iq))S%2NA4#bmQ&Y5-k`,$8%T +rVcJ,,hha+EaFa59i29Km$N9&9V&9GST55,YCAR#k4e(JJBY8IS'BMN1RJPee5R' +!+RcMA,(e*EK&&CpM0Ebc`@KkiH-Q1er4dRIAFSJmfIB!!cBD"B,&RBjj8+(@9Jc +!C&15cErDQ0!`P()l*Rp#X6!JN`'(Mp*e$KDAm&%[&BLTaDH#$A`F(c8Q&Q!Td2K +`RjJU'BKJl*DiT2KaHB[b9@c%M&1MeFf#aY"rXpKZVHfBMj9YI"IEI3MZDkmkJAF +`Gf*#)@KPB'"+$2FfR82EKP1'IbP2IFJj0*%ZJX"EG%QIlqhR`[3Kfd(9N`r#!#X +YVKUfAG9NF9@Va98Pja$X#YQkPZ[+3pU'8BE&&F1@9ab0L'Z&MiljJ@CZh[#B$K9 +'P1cq)XlZ+jX`@@c#5JjiL`Cc,3ca,C&G%#J6e8m)eq'+L!(m910(HKL#[c$3kaT +3-9b*!8Sh$89!L3YTH6SMD2c-a-rl$l140a1p2XDV38`&ZbPK,p6ThKL)C3)BM9# +(e4CICh8B9f*,Zd05E5SaldlI5qBhXYdU08`p$h9DEI%"9UGGkYlL(FL,K0MBh"E +I5kih"QKJ,9La%-cHb(`*,b3$"$@!i6Ib35D!B3N(J,KCIBK"NJ-r4,pL&MF!b$e +%mS[dm(9-*rA&)rE#GP&m[0!Il'#9S4"k2%bI4#!mLVhi%,VG-'Uqr5lGUlQ,M1c +NC*C4Lia@C04%4)q)`BIc2Km9QqQ96k5pNi1%M+Cq-12&D%T"4RU`8ip6--)JX9' +!bJm*'!m6HYM%`+2qVIMF-i68#%Q3!)"&$fh#UcX,9c3E'HR#J%Ah#39%"cQ,B4p +'YUA91EK6G(0HQ%8i'+`l!m#b$qka9DNZXp`Ze0)3k3LiRQ29CF9cM2*aJ+-l-K% +a1pPHR%%D*rEEma[`N`pfS`%1RXpH+D`FUJcakbYTB$*1"pYX%cX1Z3UlXr#cf9A +CABfIHbeCE`%SiIr#4Y4V[Xi[Z"+(hNk"a@F[&2l+%MCl+aY$UI0)(4pdF[9hJ-I +l1ir"k*Ai@@Re0McZTlPZR$rB8!Xb%,j)4ml*@k')ae$Br3l8Q@5@eE2md2hGlf6 +ZbGa$IrT!cLjKdJkApX03e+jjP!%eITL,ac'9%,Xm%'J0STTE3+m"#a@2GYKVK,M +I4'DU0mc06'GhT[lf*M,lk%F@qCpH)`HR((m9XrK-*f@4I`J%qFDl2HV,lm*J1Kl +2$9-`-(kK&X&jQ-h2c'-(UTq9&LEPbaY$G4jPQ!+kH!FZAPZ*UhT'2c`Q6qEK#j- +4T30[X()G1SbL3`pYY,B5!1&*ITL,5dQQBp`"`Pf4Fq[BFPPrEIGQ0%p6-YfId+B +6Y1P1E2UBXZN1fR3(XC!!F)NlhV0YZd1jeRC6,T2bPK($peJ-$hE)2m9Sq0j*Jlq +BS(6K1klbi*AVL+6b&Sj`4TNb35*YSd`@MeEHVXF%F,m-`$d(`#Z"-QiB)(i+JKP +BQSE#CihiJ9R%Cc2a8`+$1X['@!#"HpQIPr0%%pL0JA'!Rk(A$'4MJ&Zm,eCMUB! +fmZ-%p4281fIG#P,mk3#9cqp!X@mS0PNB#5YP!`r14mm$JCdI*YFL&8G9T!a&q9K +LCM6!e8iN!(L$#)5)IPE+eF`6qk"3+&2B8$'TpSeF&1HPeFGV#pr)eC90G%NL"h8 +B8JjBSH"G$j8"'(#r@ac8FHCH6*rNh*6$PAh"Z#Kpm"SE"H)$EX9Tf0)*`jDb%BE +P1dDGV,!N6fF'@')I4rNKm#q`'4a`Fbp-UL'5%Rp%Xl6r`5P`+(0%pm+F)"YQ,aX +HJJ'Dp6"*#kE*leJ"US-QLi($6PPi"-,[a#$1B502Amr1H4k2LH#+#'j$&VJS'"C +I5B1TTF+[3#5X(!)`i0&%D@H*X@NRTbXl6p0@9[)MP4aZ9e8PB46ep3*+(,kQdHc +LeifeNPJ[%b0fZBRq2)APQjeN"E-kpL'fK-I"PVPCPQrN$XmM-,F#c%r'r*,(Q#6 +LH2,hTS4VPV"rMare&BCCcKVm`4[5)hdL!6338SE`ra%['%EDb#4BIJ!-A[Y%!T! +!maSFG1iC)1G-MqbXDq'Fk8GeMbMF8C,G$ecTkpl*6TMGfk!+FR6IaFJ%epmq"U) +bU0`c25[G`S'!a!TRm&8HRJ9Kmjj2m'GJR,"ma"SE!DEMEFl#Nbj`-@ALKpHB-SE +,aZU%!kBqmHGi)#-Y2FQE6m#JV#4U(Z2(R)@*JETGZ4!8S*D2B80K&)ke%(KBLDM +0LNX*K-1r`m@YLBGS)BE)N!#01'cqAH@18!p0GhG)QmB&d`Lamj[kK1`i34fj%Vb +`)`0m+ZJ!5'[PaahD"1Qbff%CEIbIFaPY+#+e&NEDTRF9cRT@BFJNPD$2TT[iMdf +`Fb!H@`f6j+9-9YG#1FK9R,pPK&[(H9fTXF3*E[fVhB#'S*cXla-D"0GV-X!Y1qm +'1$6QkGDMZCa"G'a3Q-F!TXjJcFUTla3pZ0$''&G34q'(R&@PJ+eIHm#Q)$N%&9X +c"mZ[[YEI)bi#K66,%bV12lJ35aV,bLK#!-5DZr0IBN$EJJppp`S8kKX2SRKKGV- +c#9mml58)5LqHf13KJiP*FU%E(rl2kQSbf-9rFXCimXR"YV%ZMFF59"8MSc"C59f +B"HVRD6%b1U5VBK#ID$$8fFPd,CB-mN-erFlXUB9"p6IP3)$%QiZISZ!iJ'%DSP- +j1BhPT1#GUaL2[$(iVe#9'1dSNAUdZLfa8rDU,alXbp"YL!f3!'[I+%er%e1r4e- +MmS)ba"r3m!Se1#!-r!(QaDm&3c!9jMIU%cJHMb!U%Rc"0[P36"rPk9$2j@R'P`j +1$*!!l&l-K!X@r1,RF%Gi4$2H88[ND%PNJ%4@@k1H'P@CS*C"VFN$CqBNh"$jmBe +K@`FZrVL,i#j'jE',#V(bb43j'h#NbMS)BU0Xb!i4$9I5334+H&BJT%PGXK2L&Rb +m6fLkMIl8(ARTHTL9Fd25$qVU9rVT6cl*4a+Qf23XV[(C-'IpYl"l'2fT,!Sia(U +j16Cmr4*HraRNDN&EfHL5r%HCD-BEV$40NUqfG"d$"$Z)bN$&!5iB'V``aJmfJ#& +Y,TJJA-jQC[2-KhMSAe6rkM2qE(,3iT083@1AlIJB*F[LT[&Dr*1EiJjU'T!!LE$ +d("ej9*l)K'"NL@4db-aCeimeicriMCa)-TQ@4UL,A5EHdKEqT-2Vq''`3!EjM#, +6XU51Glm2pafqFT`QA*!!"bME,RFYfb&IS@b$[2QbI)f(e9#@IdU*daL8E2JA5M* +#iNrId0LFT'@c[dfb8DaQfIRjDE2'&J5$BS*j-+VQ'"e`+RQ8rcIY9Y&ebaq''M` +bi4'L-bpB2'L6(Q!!-)dc!S!Dpf1MLjeEjBThGCk"[-`1C#"lkhYKpJ#Q-fFQC+0 +r3*AXS0`@l"hS3-QLIE#S,jmHJY#,4ea0B+Z6Sh"bJJ(`AVI#a5fXe8ZZ$-jJbNB ++aCYMF`PXm3I)-!XG+V2&E'U*b6`BP2mm&c`dHV'ZP2mm'2lMB1#qYcJIaUhK)&U +'acI$e$9AG(`Q[ILKa!PXm$`"3bNC8iTbiJ`@`fPfR0%A!1-(a6AiE&3q9p'RK-F +4&iJf+40SAZ)Q9i!EBL&AaS+HkY#SK`P9I)@(MmdJ)i++Q,"d%cD56Hl9A`a`%Yq +%LfA)H"iUhNeFR3Q!"'1(5cFamdQpJU4YidpZcXljVh`i(i+953CkYb&iEm82c+Z +PEH)(jH1MP)-mP(DECTjRi('"d8HI6L5+2aC$5#B4Df-A5(,f@YEpc`kiqm(a4J5 +f+G0@%$P@"(90c1Ei&L-h(M`BiZ*A*K92`-rc6P3*TiARhFDI@J9-Z#9ap'+)cRD +aDqCcr2#!d%RqmeXL(RV)!cq3!#SZ6V)GdifSA$mK#+!iS)T4"H*p%0L4e8G+P*H +c"[VCUA`Q*GN3+@-i3I#Sj18,q)rRQ9LSN!$49(rhri"!F"hCC#M-qGAN'(b1XK% +rGdiFc%4'QMk&a6m!!$'*384$8J-!@#)293eQ4K%3)H2ZBIpY[jDUp1E[ZVkjRZE +aZDkVHUUfHN(c4(C50`EXbJ+pELDcXmLIapEbN!#1kjZjK4$#&HhRPae`bSb)6Sm +i&`i6Dj,a21YN(VF3AXr#HS4`HJ-MK19CKp'!J5EG*1pm-alVlprIrrGe(5#rZb6 +[*5mr!"9hAL6c)$)L%L(a!"%L"PpjA5CM-Ic)[QB"T*JF`#BKL'Dc"i'6c+,ccC` +$Xa5a9),[cI[c[JNMq2[1JSchF2@f@SBmSY%MV8-I'AUlS891h!iA+Q+ahrf#&3q +#ZABef[bF%Ha[peYmAbq54K$KDeJaN!!kh8!@KB&iB5#&-`LN#hcT#5Ca[TcDLS# +`Y,p&PZ+)j*JiA%EHX6lRH+0r`$m!X2eKIa`rPp@YcA%SLmTS8&TmBc$4bZ+r"R` +@jJ1aC!5Xi(+BF1PN%LCX`R6h`f`39H0PhZ`TrQYEK)YPD*95!c)i2A(84bha-5i +qSKVa4cmbid!D,El@SbjPd5mPY`)JVK1A3b!U,dV90%+rlm`TajGE(0dTKMf$XaI +9A9I%!pV[1c2+!jhk!pTdb9'Ak4'AmA%bSXU6+QLIY-LH$4fqCRA#d'`YXKR"G$0 +!j"""ah8)XHTm'@2q8C[$Eb5,YDNP'I8rl'P@DkRiSlDPZlB"1@iCYm&`Uia3IaF +!JM![3a$RSq8K%XK$aXE"ELqJaSb!'PQXU%"r"jEDXcd-4JarbJErSF96BJ49!LP +6eX'PTBXCK56`8S4aGS4`9ZIj`[+YhC0"6PdJr2iXGhHrj3QRX4a+X0@C9hZ-C&X +l312PbL-AP8HL@"VBHhmdf0pPK"`@`,VRESI8RBpqT'S&lIRlNdPPJ9mX1,[,5!T +BR`bdKJf8`mK#6QS`3lZY[E(GGi90&JP%V5Lbki[Z5)0P`@INT0PfJSST*qeY*`V +ji4`(%pR)T-3dPCJQaA4bZ3Y!`Q3!PqD``mUJb4J-pXr[NkUlCH3V#"*Gc-M`LY2 +6SG6T@-bA0+L`!5fH3#UV"`cT`mE'hDbDDV`jDGejSV$NAEl6BL`4X-E`PVE6!ZL +NlU+mV!&5X[,&2fY48dX[aHVm@CF%qHPHeVe3kpDDZPPB50eShML++'b)EZE&*P, +1Dc)-!`SiZRQKQC8S"m8%pl2idN($dU1,#lR+p!)6"F3Ea04+dlTYX(j@LC-46-h +%G%*-*k9H@1YH9!UV+SGLqLbV6bE$A54imFM$LZ#P[%k&j'-"qHbMSGeIc-DKlZA +`2"I$kaCe'e8LkP0(3lc",*)Hp-#RiJ'hqIXe5)53!-#fcI0@QXjYYf$6V5aH'&k +hNFqC(LpIKS$aQh-j'4DJi*3QCGX*hTKrhLF+mb(9RmP*`j-d8QdG,'ie*1"#,[K +*A,`2PH6LRM64T9PeKRQ+9")%p``-"f!5S*A0"e""EjU*9J'@2,V3lh+9-LMb[5F +5"9le*bTQG)E++ec-5U(bKc&4U"kp+KF6PAD2,Vr4!U2(jDDZZ3*5'b`%Ef!UJQ, +BT!Lj%Y9[a4'SIL'[BR%KrdZV[MbYiT6@q-T1THU,k4#eRKKJQ1F99K3S#SL5SHI +D$'ehjNkIRj1Q8,dlj`,M(qeZTq#(QD&l'53FP-#RbPK##NMMlZ,[m'Kq*0V%!9M +iZPGMjXQj0"II&Z6LmTrcf#p&hR[BNlN8a8r&T5"qA1UeUbLBCcC1KNLY3&baVf( +6pSa8Hipp9AeDHEAbf&H9+j4AaV'[[ZT@AS9SDimklU3kH)ZqF!-#UAq4-DqK$9A +$T,`B#V0cB3Z$b1CNkELYX@1kY+$Y[Qp-!HLbEHdXh-Zp'kXDHcG@kHp#p@qP+CX +2)$5BmL[cLa$Km%B@,LYc!Sac""i2X&VeM+K&9ePSfQ5!b"+,-i@UhZ9Y&k6kfX& +HVhY&HCdrf1Z[EP*HHipj$3Kfmi,b-N6XaU2-@+4AhK5*2NI"94L9CPH,Y-mm#`+ +L(%j#+'Gb1FL1F*+1#*m"YJ0-6"$kJBm2BC*P9MPP@f+3!0i6PZh3DRL*#HLp%G4 +6H)2Z%T61FK9FaV[S!2F"8k&M'&0pij2K56[)pEZbp96$eamA'dJi5k`!i64KdRC +KHPLX&8A4RA-`f@A'2,V4LZblNX0r'bS4jXSJK!Cm*Dd+)6%cdYm"B$$+(FU`U%L +Sd,3G2qD[ld&&D'mK26reYf'V%[cC+A&G`dNfjpP"`VZd1EUH!rZPcC%2-DRk``% +NY@!1N60r11#cdl&@1VE9D(G,[2#KNp8!8+dec[H1)m#f,mK)9UJiN@B5RFaUMRH +)&!8RJ"cM[ce`@jMDIm8KA['U1!"c+Lh@b-$BY&D5QBf6bGf&mIR8Xi)C1U+N(Pj +QaVVbrpj(XE'Lk1le)J3ac"rMFkT&FUkbFL%dpe+X@Kh("j-rh!l09FE@UBYk8F` +@Y"Bf'(&iFA*[I5LrAFlC`+"@4r2"@#KIMPY9*lTJCCSBAZFLYKM,QcMFi)+f%,% +P9LR5+[mArbrb2rJ[HXar3H8r$Im&m*pq80D#&*)PZ-q`E)EceF2i3p"#MF++*&K +3',6'K[`2Ka4$V[Q(3`Fej"fFfQ9$rLmX1KQj-GbU*1RU8MKmZjbZi-N2B`[ErZ% +3(VJiM'2Q)UPf+F[PY-'6[idY@%1@@#`MLj22elHeKl$!b9fKVRH+M8CD!(&T&b1 +ULfr$NQkMkNa+Q!RI"X'H!$4AEM@eN!"UdD4b'e#YUCDrKUA&kKDdLb%eH6(+DB, +BZPKG43!X6)J#f[['J1L'FMZEh5-fGKla1+PcVD61jD,1jD21GCNkPj3A31iD`GM +r'fm6ZZhrpCmhcP2iA9G$UG(rhbq9G$-VMlaT@[#SH#64AEcLN8FipIl#hBEB*C5 +eY1fTVDSN9j!!bH8`M'6d$I4B6Ub'ZE-6BH0LQD!#-DP`iQUcI!2aQ&3RH"*KaBp +*9"BqNaE`F",@Y,I)MpQ")hS[*"Q#X)*XF)+5EiEja9*%iPJq2%Q(4p@S)bjHdC* +)mFGlerZ5GJ*QiRMY*39ZRN2ke$UBmL8b%8B`PlU8qYR$CArj[591kP)&MYRk&bl +(BM+U)[(iK6`Q)AH%*h2[bZJL#R$$J-HVT1-"2R`AB5f5qAM*6-k@FjbLrQjHKX$ +ZQ6i1qbU2B-UhJS$3GYjR0Z1-4%!CM,h2C#r,kD!r[-@Jm3S8LYf)%qba$#kF)$i +a@q%QZe*i8Tb8BlG1I$b!`rrJNp&U1,$m!H6-B2)'NQB(J8VbFDU-lJ@Tfc%CI2i +qJ"QEFHmCK8Ai*bEL%f-5VTdE!Iir(-F4A"5!22GX)bCh+K+@pV(B)ebJEHH+)U6 +%bcM!`T&r`*rhXrC8(Z%9-l6NY-,1-0Z#2jYKJ6JX9q8c)5@d6Jf(SNZ,3P$,pki +RKm(e91#M91$Ab(MJk%FG6-Upe0eNT*8k(`!)!!hZV,hiMaUA3"jp@AY[[VMDYJ5 +#hMD$JaN#["KppA2%S0ihlRdAiIL`RF%j!(PKB`BIY%8'-R)iC))1m@EYMRaaa(+ +`3kU'(&)ep""CSQp%[TLqNH,)N!"$kSBF8RI-)@[dMFJEk4XTMJijT(E))E9$$P' +(lB1N&5rbF,h5q"!@L@GQdF,*jYeVGp`(M*NK`i6EbhX)4Ga4r%49!iDR`8#X3df +RmMRGG&KN0L'bLEhV2GDCTB,FdVle[[2HddZakQ%lILVlmiZ@e"JE-%,Upf!k*A! +L[3R6+'Gh6rcCKcqV!3[Zir3A-j'aI@$I$R'B","P$ZTU(iaU1daj(fkfrjL6C(# +[4,KE$rCK'F,Qe3DkDfc&lMGlcc8a('K6NkPEV-"mq6-5F0m+0FF+T*G$P6h-V2@ +0Jeb9-3RVRH,1hRFHRqhZ&,Q$PQ!c+cEJk'PCZ9rCqM8%IdCahRE1paSZ[U+4ArI +UhB%2KbYI91m3e!h!J+e%FH[G3)%ESUN"T6-NKi2lPP"d'R8#"0GIEHC1J#*Z[8S +*dmd0)`m'1abk[L8G"K+TH+i#!+q6Pf9KUZqmFmVP9hYaZGFR3iA3mrI*e+m2GZH +*#Hl1'3R3i#D8`RmR1!iG!%AifHq#Y!+fYH2&59q5!+b6Eje'Q[Bd%N4GaRaMem) +hq#8kfKJ@R8!401('Lm)ki@M2)$N-)'`Ehek-[2UP1cJb1jb9VfiD(Xl,aL9N*!K +kGrPAaKRQGjh2cQqcc(A$c2F!E$K4Q(+Gamf"a3SC'`9XSMBA!XrIjih0CE0b`m# +XYKJF!d65J-XZ61J[rHkXp'de3LM`HR&*d0F"GQr+E0bp#B5kK!Ne!IMP$"Vc!lK +jFA5M@P%)A)NFrT*)5#"*"rI%3S!qe2%(+1B`Jaqic!hX3(+#JBV*BXVqlSDZ"CY +5`$AFrH!3a4HSS8GDBLp+kHKDKUe1beKf8'69fh8iPTAepr,9C8AbVA[9*D2"XH" +P160@A8ANe5`1fQ$%eEAi8m-"PR(qN4,*#Rh!1hlNX$4KSLi5%-30JbjR-Y#RQlC +Za'9mif)c,i&k(i$STMbc)#k'"`BI+epkUEV5E4Srr10pF&H'bA'3!)2`,iR1ja* +"A+`FS!$$UUdjk5R`!RC&GrfTfr4Zjf9'#!5"&eZ&Qf49DZ3"6('+KF2NB@Z65(f +LfQHVpd`'RT'6"+)Z[mj'#+aNV(S[QcDU@5j#5F-&`-"U(kXZBf)b&FPV!)5d,Ch +Sr!1+-p[ipml'cXIbB1h(i8)*SrEB#@D+q$JN6,RMaR1m153%aj9!@S3e$L)J)d3 +iI%4'h%3m,K,TZ&+mN3M+$B5Ijcc&a4rMTkJi54qlLTIc4pA049jG"9E`Te*@ekQ +2*cj%kF0)iS0'(kB5(m,dS5,a)8)IFQ-"0316EUNZ8BfaJ$[+)PHE-Bh30*9M"Za +hBKQUlDmZFh5E-"*I%9+mC38(L2cM4Q",*ic1pH[l8LV+G!FAIX&djmQ8,46ZcRr +B-4PNTUqYBe+LD3&8F0Y*J+6a8`e2cE+Dc8PIXa(Rp,D6QF-G2fCAQZe(hS!Dl5) +efRaCkX`'h'[#["'2A,H*0L4P,864bXV4Nk4Yr`fkFVN)dB93)H`b&[D8c'YZk`Z +*08eX!b5fF4,E9"Slh8YLkb1ah5@a&C23(#5dZb3dP86@UcS5`MU9%00!3N!V%k, +**S45J&#mLP"k%N)a%d)*#D%iUCXpDS-$HkB3k'rIF!Z1IGfH9S1+b,YabemHIbR +@HrbETQakidJpLQ(HDI&hq5C5YpJCGPSFmcIi*19DBk2$`YdH$A5d+e*dCE@8SA0 +5hKHi%`N)$DU"fF@`Sf2&VGX[8U!6U5kj2D&!,S!S[P,MHS!MV!$p0#Cb`U8E$MP +`@f19mh`R!p$BiPKecHPcYR1@PZTDTb9ULGA'BVLTFeT!E[)kZH%YU9C5'I'$GIq +K`$5j%*0$'#Xe#JlXF)+[BbGilhCQPa6&&dChBq'1NA$$*0BCp6)FjC&D))GeFPV +J#Ved+R09JH"'M2--lL3H5!P'4(BUN!"Ga9%2!-+50m9Vj4$V`5lbmRlp)TliGr# +CLXlqkl1a+P3Ia"#J+KHaR3'YPbfZ"`3!#B$`Y`3(TU9@6#,(h1Am5%PiKVr0iNL +jG2J9c!!*#a$6j,cB-'!VrQJeHNme&DkUdD+(#'BE"-`iL%*6)c3a+5ASc,3a22B +PbA&Y+38G&qPeN4iXa8B8f0D!-PE6i5RmM-P-X38X60%NdX-Eeq,5fdieI(l%p3! ++3'UlS&,ZFPHQ(k[(04C8j`SEYpcA'HD#LI4MGKB**%lS!J`HF,CIM(c5c5iSFT[ +KmQFLDhc4rJZ1@fL3!14Fe6lp-a(i)m''$fMZma$!X88i9cdmmlDiq'0p-%eHc'T +J"%dMVXP94Y)cJ3FJ`-G@ZYK&If(QEDLm%CKe-6i@k10Y2$)DDF'(C[S`Lq)CjB5 +DMddM`mZVEG`GBL0hpXZ(U%(23hd2q+A"Kf9NkDQ'9mrbj@-ME1UmHFmBMXh)RP- +0LcEabRY0pKMrK!H3!'V#6r,ACf910Z-R+a(mmI%ri*[N$rJ&(N)(dcrET3mrBAR +@$k2h653fQ($aMhhVc[l)'T!!EAEd'h%RL@b[TTX*ZYQAiC[QliX(i[6a3)&[5Kq +KMdXPFK8qYY%$aI3!Urm4)[[EH8TXEMNpi+-(pSL&N4E")Z#&9l#mG&1JQaVPS3m +9Ck-4pdh45)TZcY)0i2jSQ-4D+TL@a[B&1aQE+5##2KJ)8XT1,,,j6Fm!')V9c!D +MH2BCmH*mfcNQ3!D!mpL"YJZiXCpUf,pG)8BbXXq`-aaVf%%QhXm`8AVraaI!&Rq +,a,ZFMm1I0KajM4d0%5kXaH)H@Zb'k5r$KEIM`Xl#I,5G`38'MJ!1f(N5PCk8!#B +%d)#(bbNCY)H1,M[9F,L8`9ldiLj5(F9FG65Hm,,5ZMh,m#q+M"fApKQZ,$X(e@3 +Y)-6Ai)#d`aeA9+5SHLXhUM,Xk$3Vi!6aIP2(N5B1)*5+(AATNM9$,Me!KS-d[@I +PPFK9M4FBTV5!FNN8@Q+KF)(HA)6&c6Rj[B(B-MVJYci00bT5$J!CBXXm[FUQ*NJ +Kf!(LV$M5a%R)f'SR9bRqibDU92a+T+6qF$ffbJr'H4,EJdIUP%HUa%H)@da-46@ +BZ*4FYepF(&0H01)I4GG+)6N`bPhVkE8Me,@8VTk#8"HiHcjpIH3"EQi2G[@RVp# +R@G(4Rli*p[*CS6DHIQhN!4089%VeK)QFrPCY9PJ9UTbrb5I)l%j5D%P54$"AE$r +%5LM015XVQYH-lfiQ0hmNZLD+M'AYXm0--KZlI+1MmHHk'YURScID#i%YpcQFJJ+ +)JjJ&RZrN)1ql+!MCkIK!JKaSep)D-jL+Qr3%0eMMC!0BT`Uhd@#CRF[-EqmZ-PE +Jf0IEQGK6%*'4RHbdlV1+CQI%*,(,#P,8j1KK%3h4`QN0MNbML*+rc[BIh+-0K00 +HdJDJLP0rrb@T2I+'-9pN01+5Irm'$JN2TMHYeXbJJdLF%N!6cfK)A#RX3fbB'AB +dV'290HXrk4Y'YkZLK-[M)&mQ1c,pp!`r9*!![X,-r)r3'%&'m!0J$$rVC&$PG+2 +'A9abUM0CN!$qGTpeF[lB5e9cBR5#5D$9HSb$3,KLM*2mR'CepL,KC#rihDf2f-i +J1G4[i36pD($[Ae("2BALVJ8$fPN)l,l23%3fhRKk`Fj*bmE6dbPkU"B22DA1)J3 +-([i5&ElCH2TfUE(aF$dA1GmZQ%C!19SqGf[[Ai%8$MkHiF0Qf3fT4PP#RkBR`$c +H3P1('PULm@8JY+Gm-RB*NeV2V"(BV3Z9`EUkU)9EIhQ5839`9ZpQ3j`Np`CfTc9 +JHGhLl)9,CafC"%bZB$**MVE6BT-$q+L&$k#Q0IDh!%RqVMa@4F99K`URBPmhZ#' +)51GAT6&Z"12Rf*%IE"l%ld44CiS!jf4JE$+,MM-QFj41Vf%A(fB,@9JJ!*9`1'Y +f4`lPlrjN)$$H2Ii6&$Q6Hp1"*)e`h5*hXNUp@4""J+eJNbIqic+Jp0U#k,E*JTi +%2N'Ar"SE&l0SSQ'(c1RXfUQ'hGFTE5jp+M1jB,jlM(RZf&kcm4bFKCMmY),X!*, +Z[m!92A+5YJpS'edqTaU'[GI5f,(!"#VAfb*c#0TVHdqUZM09d[%'Ja`)f9Ib9R` +&e8`FD6lIbFFU&di0ARLfR"Jfh9PJ$j[V'!S6"CQlM),%JaP$&#DRjQqK+2I3CkI +"$NdS6QT`c1abH+P%Xc1CKFT[CT@IlKS%80+V&bme"bLc5JDqYbM*GM6HZFF1)$F +Z8#-YJ[TJC0Ji*p3+qHbmJ'$Kl"4La6@+"[%q*cNaf8NJZa#bl,SB9C4T)DH,T5& +1c8"-GTmlkPK8)91)8r@fF60KT4(&(M3RCH9iRpe`6M9XfDQ3!2A(ZF-FZB##3#) +KNeHG9$aQ@hIMVGY#MIp#(HH22fa5YF8IrUBEQka5#Vf9#Xe-#$b9%%ila)fAMLE +a5'1,6%h,kKe$!T3k4Bd8CZiY-M-mQQfI#@)bCVCr$f%b8-D`RNCJ"bk2!j9YjS3 +)!f6$`R%fdYE13D[X+H40K[#MF(`6UGAI)BPIjFG(MrM`+$k8i+%J"&@ARDF,@[3 +8#$Q9PT,+-0PCbpp1$G6KC-EZ94@IqTSAdFaHHShlrPl2*89`MkX1GJBlKkk+iNk +GND95G6R2pjjIqDNCafAqACJ$'m-RYpJ%0PKmKF9ZjD!lRT`ib*-b4f@%+Qj4V61 +!CG@iNJ#k$b0"!fki(pElHhd&'+&*E)IG(9fdd%(8J%ad@X90*6V%1DPH-AjZb*L +"-XPHPQ4D+mMJF`DT$j!!r9D3!2e@JjZI`C@qf$cb&c$kHL-2KT1"V8eUNJ,)H[c +CT,J0@D&!'V(e(P6e2@bYKa`)0(F@@e$am4p4+0Y3q1bUjX6"ll-#SqkP01FRaG8 +M&"FB9ar)ciaZX-V!!qANY$!@fi3rpAV5(qc(2k)*5b1(K1KkpUZQiJJlQS2,"%# +,QYKl!#qh`d9e6k`F$VUlBQAXTKXV`FZABc9JKj)+)bBM9BEGB@Qm06Z!ier'Rrh +iXiZ(22JPPbiCFZP&[M3UZ*e)bm[0k%l@XGKl'c6IK$m)-cU`!Cma@6ecakpjV"X +dMhdii,JMQLk!29hfh@9`9T)`T4V2-2mdBVNR!i!l%UYK0bUJ%fp"3I"NE"Z@#LG +D@JVB%k"EfGjaEQbV-P0EhJ[3-fXHr%'iL*I"Q,E6aEc+a9lf@!qfS4N"R#lM8)@ +EM[)P),jF)Dih3BZcJ"F(!rIBqj2,53Q9%a--S2,hCrA336*lA3FeXe`S+A@!c-p +%`iBbd5!6+X+C8$JU[pB["'EB(+cDR1dhSSPIQ@mr0Y3+0@3P-Q-N9*!!!49N#"8 +8U`*"i6#U%XelDK`R#rB0YkEPZJq(++,eZNZ9mB4XcE$c#SFjkiP8Vk(ZXUP)G*G +f8SlY`qm+Td)m8#mB*466qmD8dPe@(+3l,+2Z))2IJ&,*+PfL8CA"$kR46FYP55c +3DJEHfEa-miUd5X9P"%'*V[C3M29#jF9@&2*aU$FP!GSM'V)5I&-JD'k83,PAe$i +kqK-)G,9kGbB)eIS*rUa@rEUD$*j59(iAZJ*)fA5TlTS5h(E-+cEaeH*!0D&@Jmc +bIq+K,Z(SJQKDIXm'fI+ACf-Y`Zf3!!Y+8Edr`F1V`AUecK`(%@[4L4K#B$"35&a +F0q$!$UBhMpHr8*S$l)2MR2Q)$HPE$3d@pQdB@'L&3e#SF@$D2JVB"Sd%DJqea0C +cBU$"-YKB2hE),hfD[prh-l$*F-YCbF89DFKl3ZjS3plh'LGjB(a"5NdGS)pJV@) +(RZI%l3'B3BUh`QNVmIP)#i%#YUa*DKXTa$24V#!k5c$a0[me%"XTpjh4Q1hLC21 +9)&,0B@lmcNe0p51G$+RZ)`G,9%Qi@'ka2'TMU"G-Aak,3[ma%Q[cK9pTK9Z'6@8 +fG4QF!(k#5ZhN"SG`ebYAYcQRHUG@YK+TqANDU4&*$bBfi9F#G-!fKCbFb$"%h`B +ed!Chr9*e&@drJ1h(HA0S2Y4b*ST1cc#%cArF9q#Q!Kil2QhL6fHLa-6q0VC'6G( +d)8aP*+@SKBd*T6#MJpj3!ie3R&P5#cC5#lC6$ErV8paCem#a(3U531d,SQ0`1P& +QeG1+HYLBTKc%4Ar"&j@[Ni,B+03$#`A+`FBK[mb#LFaQ,EmjMJVX8K5%SCYa[q@ +&&)A-r)i2+S'kq%!GTD5&k0ClU$-2CIc+-#b(93GSq'MU(,+58k*VKMDGYeT*GCL +N1P)+f2GCJ(dq![Xq*d,RRlSC`J3jDZ"dTQH!`Z-"J[YHb349Cd&6i$lHX!li14@ +QdJVfVph4`H!H3YFG"`Ih)MjfNLf+f0Spi55"e0)q#-la8$'mNBma!"!$IdKZ23& +ff@8)GdFVU48r`IXA4A*IEQ*9GI9GqDRLNTG5!'ml%dS-FZ%N5!LX2K[!**+Fhm` +`SFa`8i#@2m[#ZVbbX1K2[S`Ch(r6X(!-#erjXbhm5Ufb8(%h*4Jk$F$)("c!d!5 +!BE@Q!aL!`T5QAM6ib#LTNcBZ3JMEcJkDibr*F'`2#-2PM*m(eVJX1@61"2Xle$% +%[-G[6f3#r4fMfR0GMQi%Vce)KYjA%U24aZ1ccEQ!SiYIlrdVrG@bMZP2M-$K6RE +AcXih(Pq3!-(Vh0%EMdr,S+A!#K1*!$53!*KJK3Ne)B-h@Ch5i%ZRS1$,&8@&S@, +81#RlFRA-r`5'%FZ`'UC$Dj8M5j3$kj3$kh$J$[83&&Bj+KAAMf,fL#j#UM,kZZL +kZR[jEJY8khD`J"C+RfK3I@!Bj[LKi"l,5KQpJcDl`HJ!@Sm&P#C$1&3%2FT'Nrj +qMibZj3eL5p5J60P5&EDdPpe('`F@RX-N#E+amjL0+5SmUK"FU1A`d+e&GY(@JV3 +e'c8Q!J0-`UX%DE&"Y'EEp8,qSX`&plic4(bKrSkF9YlYk0Vl$X3A1R`r!99!I*a +5jpGlhp&I08"mKG!9M5%0!NNJ`-JKJNNJ`)LYcfr%EiE"2Zr!YPb$Mc)XTP4TKe+ +mF9'*U3Vb'%bK+VbSPDS5TDUX(PV)&F(SD4Rchr'aB5I4"qcU'&Gf$YAEF!FEQF& +'iSehX*&&)3T"2X@J*PKJpGpLYapHp1Mr[LJcrViTeCTQM+FA`Q3iTfI$MQiMhYL +pX*Gri"K3`N$Fc55RAaJZ9braKd5&3ZRQ-U4#`V%`JZUX6'ce1$ICTDfLb13lSMM +%9[A&[''hA8$cLN[GSqVMF**SF`Ff@-!JD$!EEX#l(HQe1+I+e!SH)#`ECc"ZcS+ +`*rSM1*4K%X3NL%N!%`f6-#B"6$lq%EZ3!+%K"5BE'5M%8#hL8Z9$3c4b@,FU+DS +8QJYSB'UdR(eXIYNYc`48-pb`M&8BqZQ@clQLQci"fM-fm@"3[RL"!6mB,,DGG-F +f@!D(EV+Q`8PS20!`dF#!NC(2Z0cQpfeAi"TJ-YK9"HDaB16AIiHCCDF,#@TrV&+ +(2q"HGeNN'3TqGC%G4H81JL)CJ$cYiQ'p@T@N-EN([pV*Jfbipaba'@%mA1p12@) +$D3,jfXU2h1-"qP)G%%&JHJ8F3C[eK'(eCMl-CfF9#00!#)F803"@$(G9RRil23i +a9"8Faeq9&m$B[H+1c$&BAqXG,dVpr#0h&J2b)4caM[FK)FShF"E%Db-SAKMG-hR +$J@6Y"@k)J5'rF0Mk8519eVLLMJYVT@L)0A&&'LNZ8!cjG`F0DpDHD[LMA3cHc39 +i@+M$je"P&l-*1cX,5f$[Nll(S5D6[Uq4dUab2J'#$bMGL!pBIQaa@-#Q9CN-l6! +S8rN-TaXKk-Pj$%,hRR$rb3E'EBFYY&8AKq"YRBAmXhKBTK$qiEMeISBC21,Q1dK +i6MK`3B-r3D%KED%09N8d"@#Rc#G@BZ0McM`2`BAM(IV4[&Q2eSmIfVDGUM!"eLB +PB0rNjVi(D8d@+hAS'Pdi$SD)'@af-d'U!)'`4)8!*&H[%N#bViF*,EdDSmSfiq9 +DmC+KZA"D3mM"3DiB9%Sr(MI@Qh&8-!2hP%SZEX2-@05H5EjSUh)dNXA9imTP,bU +Ae9mLX9'G8ekq0NRE5Ea%3i4U8hNjJdi&3Ab[,h-e!A4@A()AZlQVE@6h,a12Y9, +D1F3#3RH"D$%iB*h8IX"*k6!"MJPA9C%J6Up-SSKmI3r5#U@[ld%L4Ac3)UD&A-Q +aa%+ZPT'ijBV%HIZY0`TAP@eM',@0Ke`2"JXDD5N'MF0S%XS-B8TY*YM(0C0r1Lq +Y-`"a10L&#$l$l%[I!leaK,PS#*2MaB+C0-&-pX)m(QGeiQFeb8TYPI*UTG[jGpl +#Z,(FPrV0JeG@4)fjUq-I)B(1U38TRc6kM@A-pL+K#eDVjdP+-iH0qjPq6Mhc)%) +p,e,LZ&)NkGN9jY-e'0!4$+K["S&)VI%FrrpPGJhjp)q9)4mrp4YA*k8q!15RGrP +fjQdF9L8'2H5&EifMfYT-MPK"X*@E5rS`4+'4p!QJq8@eedJ+9F-GT+PckM)Rmk6 +a(AE0m(ZRi'+4JKS"#iG2D&)M'K"0SR',Zj8RR#`MpdZN@pLK!@+jhXHT-DlSD56 +'`(JMNDmCjpGrRN@R9$H(Y&Z3!!Y2Z"FBRh%pd"0I`KL+j,2h)KrLc`fhI$BIqI1 +CGb0VIiPJY`R"8XUlP-3,4`6F&0(J6I9Jlre)6cr%(Ac,hEi("a&l'BZG54'fHkc +JpjaU#&rL4Ye(#Ii6DYMqbGpj-q0'kQ$#Mh3B[56mY56b%b4`$-"TIBN%AL@ki*G +A+-+H0FlV3c9kYaZpr`5"4pD3!-"4E&rq@N,JI1[6"IlP-!Qm"U"jM6[rGej[lqI +(i5J32RT$F"&RFqbGJAX"J0"H1"(dX+LUGY,JSQAFi&Sa$#N2F4MXc+06AG&92TU +U*%b%PdHqJ3V"V+`'15L8HA[[(Bkm4bD$@a#[&$D6Mk`b6*l)3h#eTK35IIjJjPP +R,j0GZ%5XQNb#C&9LHF[Naq,'AIac'fiJXXeYR%JZ5*J9,[DM@MBVhbJ5EcFM,HK +DB0M5!pAr!kHNEcm3c3S"8qlS%dB)NQC-N4&@#4(mU2lJ4NJ+5F"LbceaCcm4-iG +KFM13!)fImfK&$kRC8`fK@4$5&0J!"bI2AZddHJ@"iBC%22MRjLGKG2hV2mq*+Qi +%c`DRAkJ[l8,-!1'JH+'ARH44(A'KYA5K9c#BE#9h9e`)&Bem!aGb((-K'cTd2b@ +e3mC0fB1KK([jXTNAZ#b$UC)'D5&h1%T3J0JrT%,P"*TJ!)*C@mA-fZ!!Skf*)ED +BJ3UY&N2CqN,%'Zd53p,b$lUJ&5+Y)dD+iFFkGdiiF@6khGHqEe1("d0k2(!2'qM +'!!-8d$16CTL("5Y9Ul"5ea0X9-e30ZT+4%eKD1*ZMmPXRD1$$%&Yl*MGVdqRmcb +S+c&06@#DjK5QU@53!%e#4aZm+6%%!pDK-%Y0#@DTpQ$-%KG'%3T$bc"VK'l!`pc +f##@1caZBa93qDr4jR3M&Bh93NCX!Hm"mdMVEcP6hTE2IqKF!p0e-bMaK0BAQPbR +kQ9"$4CcmDX%`"2+Q&3)d!Di*H-9#4cb#edeC6@'MUJEC+$6q60+J#P2%l*`Q&Uh +k)#aDYI-mZa##8D[f0&1$a6$FEk'D)K0#ZHZX',UHNpJ[hND5'6#a%B1'@MCb`Q% +03fDhHkbTGQ5"(d*+119*i6MK)MIUHU!3!K5&h8P1&5LF@"9ZQlP,TK8e!dPJiD1 +V@3d&&fJ`fk5RQ)S5LRhGV#K)MmVN1Q94LY#L&+'ILP$M)[322&%aTbQX)*4,@e- +Kcd(c-FbJ09&JD3bKh-m-BHZ3!#%,1"cLVSd"D8p@A-8@hd%haED831Ydfi9-hM@ +&`B46l)cXrU-2(#Z[ZQ-!@U'5hrc&iY9a"V`lR`QmqEVq`6G#B"32Y@,bB0%&#hI +'M""[2[(B(*5+Ih,qc3[m#81*4pq-iG-2#P+SHRSSMLB,%0e2UaKFJpTM044EP[G +Sci6HI,hK0#D"0fqN(D!0TSae&crr'aKN0ibPSrMcT`P@cH5"([L"Ef-iepJkA16 +&`P831AER@3G'TrSh'+E@)LFVTUpF1M[c,"kkL$qAhE,qmaMFPYa)+,P`!QQTLl% +2!EVFQ1%"'cm,CrQ98"NAN!#kZS`%eh,2R(8H!lDFprS"KD0"`[SaIJ`-M@9Y#SN +F0)MleEA(&f,ViF6D-RhfGP&XMBmKHKSDfB1ZcS0CUFl%BfELX4!r"UF%ZK#''%S +FkYP*Ld&Jc![Z4`963G[F4Jr2XFYYV"@2Ei-k-e!Y%*F)6'01MRrN!EYXMZMU9Jb +6UkYE[*S43`PM`3P5jL%Q*kaJ%d-&mdYhiL85fml2*"EedBZ`)$4(,9ZT[rie1rG +TD3Z0Y)AKSaC'Kba-Zk!X59ZB1RDK2$4NBFUCD"*(VcF0H@fQ(AXKl9Ml8FGH'V, +32RJX$pfqI,ha'Ai4T5kSIc)bq*!!'(b%b9N"+@MiI-iAB9$FE$b9Mm$*`H9hY'r +SQ+lGd$'V'FRd`8GiB'L`KZm4-mcJ361aLSd)62,%!ViVLTZ'JPEJK2$LPCJbE,% +B2T@JqGKM2)"XC1Y["0-"&XG81[hLe@FddF9j3(%Q&!!G3PGLH,`HC+#%KJr"82$ +$bb*C35`QYJX53J2ahT6Q#"SrJKQUm[jahjm+0aEZ$)S#KFUF+)2+K0)*ARYl#![ ++&q6YLiZLLbibkl6Z*&a1-BQ8%lXRAM@lXm3)c[*"5I0YVaM'lB@1NVX%qlRZ6*r +#L!D[$4iR9lPG4&KGB2G5a"`EE`m*M)ikm)3B3"6X%LVXl8I!FAVY')D9ldG66LJ +[GSEPJc5aYGSAh0UF#)2@%AY2i)M,Dh(RD5XD!TAPj-+$kNGV1,#&D'l-j08F"bE +-4&IZdLXN,iKLNUrKU0J+9TaiQ)FRKU)ddi0@BACZ%deK+XN&YV*JUMe%90))b1B +2qKldYa1jDIIY63pLf!L*dHahBT!!H+KU2`m$,cEde4+#)H3[HIMcLBHI6(qB'C6 +54A*TaZ96A5,B,,Kik2IrR2l9l$-9dU,mF`3!`34*@RQ9ADBLC`Al3)0iFbSe15S +J3[cM"K4f9*hkiT2,FPH0d0ZPQA%K"PlUd3GF'U2`"SDC-S8Kmi&HN`IC`(!E8dB +ShAK6QC%(K40&cZprC+6Z@Uj8fMSbHEL1Dqiq(PElVXA@iFaR!2ZfRAJf,jSSdC6 +qD4#DQKb@dY413$42VCMDDGU+UC@Q"UDY0(9LDY!dJkQ6TMP--c60BTUMk6C-Xc4 +Ga(3E65X`AD4T(Y-+QJjJQUIT1+B$0*h#G*bQ,NbRD0U,UBZQICMfdR3%cQIH6)# +D#mPre6+"JBjR"k5*2hEmXH*2+riB4Q!)H8k5'(h&[a*LG(j'BH5[Xe(J(bZiS+X +EABP@AdS-DF604,Ll(*KFVTY(N!#66+N#f!3`jIS,',p@Qrj#*qZV,deI)E+q&Rr +@-&RRd0*6M0XfhT!!1i,KiElic@EH",p#pql5&rr,YflrkZM&[PRH8M8hq'Y$pik +#j+k0KFJe)%8$iKTSkP(VrRLYbS6@0iH2"K+Kf`kfc"dlq$)Smb"#p3kNZ)UFHH( ++rl'E$*3KNMD[SpMjmlq)-`JqU'"VkE'Z%B)+ULemLHVVD",h$M-Ae8e,0!aQG4G +IVTU6`FhrFEEkHQb%,[mD[dBB[i"$km@KDmF%UmM$i-0T28%J5-%JDDi6#UABETb +4cPkP!AAGD"`$'LhfXI0RTFjJZLa%2+E@1`G$I*!!)`L,P4@Bb`Y3kJbKDYM-5#% +`9C(Pd8e1EchT[5G8,"5L`T*(+X4`2lkSijEbQGAN5i1INGj)'Vd1K%4mL8&QFX9 +T6j`ZQ%SMFJG%S6M1FM&9Ab,Q5PE[C9H#S5RLUpBa-@4cA!`EJN4Zmq(l'I[@MX) +p9TI'3)k(!fY'+S@GP6&%$D@ccR,JiHMQ4aUkTXXDZQEC(ER(k&Cp4Lm2m,1X`lF +iUVQ0jbbF'R5E',*ZbJMU4D9XXj**"JVTMY3S"A95A,3!jZ[Cie,l!Lk$KUcFS#A +*!"5&16e'&aH$3@l2k@Q'Uq5dbPhcdVACiM3&bd!K('KK)"mb@9c[&e"E!3`%A#3 +kTV80(EI&!fjkB#JMMhm'C&)CBPc,+BRbmF34*M%*MUeI`XK"lmVCaRBi!2Z0i1( +1iQYYjr6U+JI&`9VGNl-kf"JU*[1[dp9!D)%qr$XI$S*Qe`ND3fS`3a9"qI9-RJ0 +i#[CFSqb@9)R%PmQ"Tc%2#"iLBXK`jYjMpf3BIj!!P(N-a3CRN!#`*d0Z8QaB*JC +hUZ!`MC-lkcBcV*14Mf(JITKDKqm8,CV!SZ44LaMHj8@IT#fD`++H)[14Md"#5!d +kkP%B'rY[-@-4ZhP9$"L*#JG@8CMjlk+kJFB4)[9[ILjpq#3a1+NZb2mF+XJ5AC! +!d4X-&C!!)%X83BE5"4Qp4!mF)mMSDb4)J%l4@5()k&6L#(Y#N!#Fd%VTJRbeXpJ +m9T!!d@B5C%S(%E82KJT5Zj%3C)N#aBL89Ne#Q1&AK6$0Si4TKaNf1GN%TJV2mIp +NDKN#IP0)h2C!11C-(Mpa%T4p$JEJ'4dUU2qmp+qrBN&9PUB*bJj"i4rUSQA0I#b +@aJqbP-cLUf9T5jYTU8C,VFT5qe&,33jTk3GT5kfm9"kLT6h+dZD$,,e05peT5hY +SD4-YE9@@@Sme5#`9fje,@pU+TAGTBHN,,rbIG-R0e@N,5l'`&("kLrJR4K,'(0D +0Z9ShCMDK*p1019T'aP`be*M&!#8&JZZ-B'+B4`(YE980B3k!G(Uf@llG$VEdkpJ +#"d%KmFM3`8HZ,M,Spf3R35fMc"SrH9d*NeV"l%Bpc3#%H!#UX,N-QSbJG4$F2(q +D3CMmj#N#ZeVGKJK52#bB)!8G'KeRlD-J4TiN&Vq5rc%Y@3pieqmk2aDrc1(F[", +1R8FcpP[6YFYZq9k$)i+fiCE204VXlBD#$a3&GpHl,%-k6*'cp`G3m$aN)MXTZ-l +R0UVaQAYcl9qiaqk$c'c5NGh6qr&3ThKS$X'Bi`+P(c8aH!TYEJh#Q,$(j"668h% +%"J2m33p�!*ddZNUc#FA!86#FmSGbh$"5GMHi*PecqCkCr`-b9BqDG5+!a0J@f +VG##""aR$ba#&b3!#Q6Pj+U3)3FSr*c&)q5'!,(,-J`&Icm"aK3VEFUUK0N0,lEc +`Q`1F$"'AUah&m3hr[*0HTr62rea1RcY%8%k,,26TPE42-cLQGdM9HSG8DiT"D#j +L'Zj-*!H6iKpL!P3Mi@c[ArrI1%5Ji90jdAFSj4BfiQ)S-iCMdZ#&)-(@eQBma)1 +p!JJH`lmU`5Nk(,TqG("!0Rk`q+HfFm8pcpIcJ$R4FqbrFXRFmUB&`b*,NcqJH6& +F(j'@&#j,U8&JR2ra)fkiJSr(31C45c!QCE(*rpc*`9kcP46h(2dDA9(b2iI(cIj +L-6D5Plr1S6i$S4PP-CSQ5Dq@YM@)AeU21BD(58f*VJYS!!NbFM-ad8J%$B!*VTL +!1EFMhF50(dX''`1R$m-&!!!M'd&%3e)$!&IL$e80CN3#%#(LlP6[`8P1[0SVZCJ +V`qJR15mAJKa0VH05US$'R#FpVQ!TilVa&1j1M2cq&T!!8XI0R!%YBpfZ'MIMGM* +C0jY*%aX-BXE3@qYDif3F3qeTV10BQf%FkY"8$68(*D,`prpqlrIGGm$KQI6CCjp +jIJ!GCMiN%4![%!!3%!!385q9LEpSDX)ImD0A+*!!dQ%9$PbA,1b4[-EAP+`aC6H +q&NN-HY*%(BLQc$'cjC2P,j9CH`'FXb0&RmfI'"(YTNe@K")E&dF54hV!!N&Di'F +A1Q`H@0QiDk"-"+IX%'@[k@m'9MBYTS(ETXE0b*61Z'MV[Mf')Q+[lL5&IILd!Y1 +Q3`L(@NA(eb-8,1SdjAlf'T!!#5$I!-*Z1Y&f,P,da53HD,pGHAl5TH[#Mc&Z#K@ +pNfBfQqV%HA4`'8fD2A--J9X81d,2CSipGr@G00DT3qQN9cTj)SP)+6VeS*0KB&j +Ed16q4K0lHU2XkAEekGahdMTH%CfN$1[YGp)LLAe[Fa(S`Y"lQ$+$+qSpr%c(XXA +D$mF-"9fRiqG%*2&JR[90I',LR`AT!cp3iU*fA!+LY(%c"[CJiP&-E1-6pq"RGb6 +4[S-qk"*k9[Y40d,"h6R#%eNUGHKFbDFQTPDc+j2UI2[lQjSB1X3@G(ND@k#E9XB +@10$*D@b"BhS2XJ9YiP@fS1e4%I5"q'@`H+bai'5rF-8MI,'%&+bEF+UPBrSS2QM +B2DB,lSFDV$I8BpXM5dq0G3!jAP4j2QQS'(r-A@NciQeTY0db+,XZY-mm-p5-!Sf +%&R-#r)QCXLFQh'25d6J$jE-&Y[Al9Hc)a+irB!L`p,F[l0rR@i)YH*NB3C)AT54 +Rp29&kp+M5FQSLaBYqPC+0286jeU)cN[CD@F2jQ4S'I*+5dY*2TXFA56fIJ%2p9k +apNT"CYe*kc#1YFI3BKcAVS!*[B6%8!$-kE-1mm9f($)B3K@BCDH",lCNMQNK`aR +M'@FScM'KK1+)rE$C,C'%f13'Zp+8Q!IXAa6V-JTqiEb0,PcT51m'Dkq%%q@Bb8f +"GU"LEXlJ)U)`1!,'&Ic+P#2mf("%G'XKS)B4BV,6!9+58h1bG9Tk9MBq$k3RCkA +fDGRD-5hhE0fCP*`689&6+AcJB*BZ*re-0$8e+e8CLQEVNLmUBj+U+1LVK(PPDKX +e`[QJAG%&*jmh1dL&X@%VA,@N(2GB&DTU95ia,%&PX&KB#2$!MG144%'f9LMG`Ke +jGI`b!N"fI-50TVPAKB88%[G+ch9mRIiR05NXD[-3#"F("jj%Z(ahTA#!6*i1G`C +P+Q9)[k%&@h-XV645+-K$al!1!qd!mL4!eK@)LF-k4+#8Cpd%GF1!Kcmr+KdXCY$ +'Y9T6lLm@+X1QT#-#ReZ*BH)MFKDUHH$i6)#Qh(Fqa35[!@U$%+LU"Z+L+AG1+6i +14)VQV'@++!lGISGASfD`cMXR6,Na%cjZiSU)dZ@2i(#51U(c,0la!E$C"[C8Kdh +(@G34Mll8e$6263q6UhKJH@"aGmZ,8*b`i)m$'Aj*C3'&!B,8cG"5-kZG)Z&9Jp0 +k!XLNaP[jb&*LqpMEB2Y#c[B93$4,E1rV9GKHkRkYQ3+9PeD51a61L##BIp6)VT* +%b(b+#B8p**!!C4(V8e"f@8K!N!!lp12IIF(FTBAL3M5MBZ&#VKrA2&c)2I8,ZE@ +AVT!!-L3HqSH(cCe@5mIA1F[8,5#J1862LGRS[$Sqf[%q'eL2$cV@3@)"%aIb@+V +#*04C#bNZLmYR8b"fNY$fpCe05STQCfK*@5PDeS&N,FZXTCl0eNAp&PR-1T0P2X0 +R+5+Ej&1bLi5hQe`bAbZqPY'&T3HQ#kT!0c9+f8P9(6+L%3&3K`aJbCL6!ab(QVN +aC#i2D*2"J!63P)cPi1aD$A"@S'BX#FURP%(Qi!*LLekiZ@R`3d-,$rR3iJ&qh9C +TB43EQc2(-VSfe'jXMXk$SQNB"9&6EZ#l6V%cFE'$1$CcF(kI(N-iZak95d"1ieS +FdE6a+'!N`8mEr6m"N!!*SN"abia`eJpbKB*KRDcIGSHVD*f6pGY#USTipfZe"!j +"U,@1f)P!!@"+0)k-1K4e8iCFlT5@A%afXiRh8$MIl9BcSff82lA$Q4PYrG@HZKG +SRK*+aN#)CR,%bp[S`-)AP!00SdN&PPF8B!R5cB0TUkeGr"*"E%rLTS*-&@"b%9& +"CkLC1ZMD`3CH--%9'`"+4%'[G-$ZS4AhVYdP3P5kDYP(e#e65&1N*Fpq!eMLGHG +&&cP,''mUeI[YmDC5)M9dlGbNSPla0r`8`1+(I2K+@,"pF#m('kjfX&HUEA@ijPC +ap(`RiU,#c$F4EJNT"3aE0Nk0*KdmQakY#6QH01LSr`'jZ$`a3J,Jj'9@TIdQE*@ +fbmmUEC9I9CS,iVJ'i!d'2LHh$#aIYTUUYaG0`NY!F"(#pJk8Z'5,#mTL8)J3,9# +`d0K(*rZ)X)papQ&J(hUBqS`ePCMU,-Lq,ejM6de9'jLJDJ@XY!E-YCX1$R"jL)X +SM!,+ml(pFl53!!S'XI--I*iL"Q3N0(8F*"+*Nc`-Q$-@b)hQCUAq4-[*eJC58k, +C1HR1U!k)`Vjk4QYQD8e5@DRb1dL&-$ccJY!ci2PTq0#cMbRf-8%I(6UU&(qI6m3 +"9Ale%JLEBA5Q9L)R40,aI&GZ9j)hhj9e!G[Ej953!-qS+#Jf6DDJG8i&q6TY&46 +6m1a@'""UZ['Nip[iaGZNLcI*,VE`LdX`BC!!A9b#RdUCiKYP&k2MCc[Si[c&3XX +5iQCe0B3!bV1bdhaIrJBBSF)k40N1G4R86rhSd*TlM!%fbaKJ)kXZ%jmT$"$MK86 +R36E*$N)G"b8'!32F3#9A4bV0B@@Ll1L2YFX(Xp)rd-+3!2if'Da-LpEPT#46,5L +E@r98reJZ*cXR@Hb9b4V[bjc0(S$ITiRd0dJK!Bre1A'5''VdQ(X-aR2(-(!-aFI +l80#QSllZji6f9dX`U1'R$`9D0iUcRC'P)`*Ch!F6+T'd[h[Y0hHJN!$a$4(K*+2 +H90I84)C0M6XK6"lkS0$%R6ZXB%V$Up'e[@-'24C*2*HC1BD+BIHf'CI"4)eEC%b +dPM+[%8cheGP5jM@#14YM-ZCFim`mhT%UJkh5aEHhFN,9+#fR5Sh#1p)N3V8Bc01 +#ic1d$i6qDmef-9PVVSJIBYd54J'b3,42("(H'fUhHhCTSZ-6)(rf8A"a8p2N,8` +Xr-Y$68+D1MSGKjBH0[#(4G-%1aJT-k'pH@T-0FAbY3eCER5pD6rHHmAcTCPIF(a +Yq+RJ-kXIp2kKrBmkrh,V!Qe4piZ'ZFEhp3q02MGeHm3kmDY(IRlRpbIrl-Krk[Y +YrlH2l4mFk0Khk*-,ljSZKDlfI#Fbj[lQq15jEqAp+222crqr8rrhf62aXjI6-k* +QhF@F`amFc-h15[V[U5R*"p*qA2H6%hpap,qprFHZZkr@0YqlqIf@2lRedq[rjBI +ripV5kFr2q*m2r21drrU$Irh`lpllrr2rckIrqq0rI1hVVlbeq"Y[&#ejThKK`Db +Arf(MkrRI6Ib(EGrEr*mhr@EA4l[rrV'rfI(AfaqZr0fUA`5@VAKKhFmfr1hDIe[ +cbcfrI[bI5[rPrPqeIQlR[jGpqHQ[V&qqmY'+Vflj,&CHq-@5PqBec*l6f#6*39B +DDV!$f9V'!9l!YJNhl*fYRHBjSe*Je4%D&AI!d$Fik%Ld[qdH5a2NU2B*AJa+@"- ++Dj+BEdR9(aD'U4ZKHm5f+,kZEEI8#@rRj-d&)*FBUb2F0,iBPG'S'1mjM*XZK1k +H'M0lZ0-'3M04i"iE!9*lNk0$SEYQaqeh1D#,8BGI$EV(%#+pN3m$cc4I2(Zm&XC +2VPcc#G'1Kl3ENrGJE**h'JpfZ-H-p1#3!1c"IFi(*`)JDILejX9T)R66,*UQR)$ +YUr2C!XSBf5f4m%UBZQ%q6(Z11)XV$B&)iJm)2+f)5q'@KPDSY!r!)kL%($Qa4dA +kGZT1)Mj+a6B2!JNRN38R-C`2aPp,#`Kj1lTfbLBlN!"930&%3jGl$02k-0#(D5p +M@L@kffR!#A+mSZCJ1`eDE!G6M`IZ'Q''j,#N$K6I*GH1H69P3QS+'G3Q(Gr)+kb +0[-*Uq&3'E"B6X'QSM#5@Aj1!68-PIYk3!!'Ea8jJ`cYk1E""%980p$NL5ppGfG$ +klPFXG[e99%DCXX0j)dXRA6rDG%Jm-bMZF"0Njm4JC#P#9f3U)ar'&$d&K5bb3@` +4caTX,`kK-+'E3H`0a$L1YbQ5H(3kI4"EM#6BS@Ri3`S"Vlj2fFSZ`103SfDV4U2 +JQ9i8-r0!`)L1e$9I9UeZiqVD&NQX[mc8Y3dr(mZUe4dbGD(M9jlQkZ,Xm0!TKU$ +-IS`YL&e@X!ABc6Z6,F#+$`BTM!jfj5CIf9R*fPQe5Y38X"(03)`b0ASfGfr!Bpr +i2LhpBM6pJj3$Z9TZ6NVZfH6dLlmP1Mm*e@l'fH5c@Nk+aLT[2dJi%-TV'1Rplf& +*lc)r5HqBAk6hI!$!5ZZ3!*'+q$b3!%j%q*8,)#%,L"6ZEZ'NpMlKB15c296V(M- +6LEDU"QQ%D[2Tpdbj$5f-p)0arjHfXNaFCd[k2@fN6!3"&T2),NCfJj!!i'4ATHc +bh3Vjph5(M2`,b"KNMbhjpqAYP,K!)EYak#!2VjKH[!K,B3mY*#2K%p(8,#dV&D5 +BlQab6PT8Zhc!E)kQFUU+++81[SjQA-T'GNjbMT!!afkVc0",Br,FV8'%eA0hAem +pSkG$pZXTd``Y%!c+kKD*Z$rq+52ZHqXMlVNj-#IZ89%ilVHJ5JKZG&dHlMk-SF0 +3eY#R)h-2NpVd3&'RDme@!C5G"mm34QD#lL""6fVL)Zl4@IjfX3JU34hR)8-B0Jp +cJlqEY#$h@&*62$L*"6f(#X[MF%JQd[)MGQSX511S%l*,1Q5AC#!"8M"4Qf(8KUl +GXe)icF1,q$C(e)X(-)@1b%0YI)1T@[(GU1A6NIK-9+#phFH(edkkc21k"l!&ccq +MqpTDHUaaJfE*"0&PFCTrjaB,595,[a419)YRqLHUaHeqLHU1qN69rXM!mK@Q*b1 +U1f1fSRSmQBR6"PY4hAR8Ee&p6"(9RG2#L'UTVDMZe15L+KG4E#4iqU)kaL&[2E, +kq4"@qHe1DC82RkDiVM"9&pHZ@rk*+m64`B@e@DIA,0GUVF6UGPYfKq!kN!$8L)Z +[2-M+Mm'CTfN*U4K*Cbc1#V`HNE9cFAX94e'%&!iK%YUD"b2Qe21$T@Ym@Jphc(K +XMdC%@r`)Z5Kj*`4NiU2GKhR'qb'5mSe!H)a-$(mH9Jc[q#Q'Jhk*B3A%X)35IaK +Ci0KB@bF-9cYJYKeUeThA,,!`"8@03'p*NJmKhK)LH#")4E&@ATMV*B14qbf[Zq* +GdLFj6VJi&-8HjedXVdXQi#AhAFjVc!NN'TXY,*QhaTXpcI4%lR91TS(XKGRh9A* ++HEabGm)LU00L8618Za--HSY&DbYYJHQljp*[p'fcQYZD#GcU*hSX#jXA(E*Bp![ +8+8M@TQGZ#A),'DBX&Qba@q[*E((miG+QlVD&Gp[ZdR5kXRZL8mab'F4NXrRq3ae +dNIk-M0dBZ2T#-4h$G*')rpM6%!&'C0!Rc"`-$,K`dHr35q'r'JkY#p6GS%j#`#D +)!TYAaaPeq1R--54G#[&(%N0,*-(k3LS6V2TGB)h@)3SP)aZDT)-qp5'U-jp5RD' +#kD8%!e,9C&49&))Jk$Vaai'JZJeBISUEqP"b*"QVpM"@rI1`V(VH6eBeqm1U$CU +YmQIHN5QrBQ$j#i1+mPmBp&[j2G6GS%j5P6q6&b`B%*&R3@qHP!9IUUJU#i4686` +M9%@ZPM-4"I0j'&pD&(*A"Hmi[&,@8CB4`aYN'C!!bM,JMm0QJ-[2$,MZ9`E819A +((4&Jq"Gf'9VQFRHY&XSFFfjI9I"@UC1N0-'9GQUXIT99!piH'I"Q5UM@a9%G[20 +MJ4A@"IGq,1SN(F[HA0@a&Y4mq%NF6A*EVaX-llEQK#%(`TMJ'HA%)DC0)HQh(J' +,HkL!C+%32BK6FPAUHTpT2L,'DcIHLjEUKc5,-qN2Cj&TM%Aq-5b,[1BRLa6ia5) +lC*R"(,5ampKi!6PbhH'bSS"P49(Xh0iBK"1k5aIP#)Z`S0K[dBlVfXDA+Q!2"LZ +0NU$i&%IcIEKjKb6Q!$LF&bNU0r*NX3hNp#T[j`%AMbiT6B!J,*3'THf92c)1"CX +[)$M9`Gh[K!`bj%ae#'3M%PN@PEH&"*%jZTP1YaeGM8I[Fa1Q)Ce(Q45EIBSC+r% +$D9VSe*KaJ8`j9CLkP"raap4&d*'QR)cPi)aPbRdG3BAbQdEZ`#aR"LlP*cDkh'- +CAXQ-S$bC$@FEN!!3'H6f-3#`QE+J1(q`r#+kpI)*PrQ%K1LZH3'44H4%p0KP4cP +5ce(bk!K4Q09S3q-ZUc6SCLjF@S3-*M+HJ+YA)rGZq5%bNX&KKVNTQ5)@h*!!6!+ +PjFF-,CQf4Ld`#D(+Ad0Qmd[bp!*L"IGqqNNbVH(2m#hV0,l&+KiC*h1!lC5&@Jm +U"350eSc5NPpcA9BYH&M@p$L6M",V5`aTC!*5ISUljrAND*F'ZSHQ8qC`ahIjHjQ +5@84#E1"NjT4c8SCQdk@SI"UjF2X&lck6$L&R+e+qRS%A#JR$`!6J-4lKahj[kF1 +DrEkVY)AqApm5D'Pe'BPd@ihMHY4(L$66Fm2(UdZh9jq`p!d#Yh+P@cPB*-F+a0D +aX",%llA-PX`r@9KT,Y3ZkFp80`,@-m#(i`8"pS3[aVG9E"3*1"JZpe*4Z"KQ@aR +-`-#hKaI2@Td'"VkGFJ1$mXA8p-H+HdJF1,X!#VZF*bPXD@@pQp83$V"mVS@#!FX +fkHhD)925+C!!Q438p$e'Ph)`h+YrIV`fmcS!EZ%[FCLim%9ZBdT6$-&Z1jN'`pP +I-6@Xp5#*3da[[ppFHThqAhppE8YVF`LQ`HDfSljY))JcZ[EFh(McmMbBq(6aJhe +-$@X`Khf3!)SrfVZQT"jKI42&p3,e!%KQSGhiTNXrQ'42Z,#mU9N#YA6S4Fpl"!P +3S0Qj2'Hcc,0CCYSXcpXX6pNXRj8YhE8EVdH[afI+RqA9cdS8hbcjY4N'$8SN-Pp +5*#Q40Y)[6%Pf')22+H29b[G"B!eEhq3ERmj$il``B,LTK0h6SYbB%'imQ&!QfpS +#2"&6!+Z(J`%R8hDpU)%KjcNCNPHFQeR&qA$BLV25ciTcV9m9CePe8Z&Rr9@6#Pk +99+#L$#CeSbLcP8"DZRI")f5Z+A1E!'#G'SZ@b3Y8XXffXXeq0HaQYrLjf8Dr0PZ +L'2XKQDiR&Hk)d+[TlGMbZ8"aTaKR4E$HA`QIA45r'YeCMF56`'DL2'eJqCS%#)I +&h*66J4plH"+$GqA%ARP'955'+AGKVk51K3q'8mG#VhrU@'M`4afc[6)b%K9T4E* +#6TSZ@M"3EKKBrNZh9*5a1'MKEQ&,Hld&QL28DDlD'CpfUI"#em9Q5i4@qFDU#bp +1SYILF6,5!V8B8Z&5(jE#Gd1failY$09b3$E-`LA5Y+05T546p`46plI$U[ZBRqS +1qDAZ6(SBUVRP$$#L#JG"&BXlYd!"V2*YdU(&ZAV9I)FZ-E4`)L$%Tb6H0+Y,*)e +CiDeDaG*952"`Q%pq1h0X[m!#PHf@NSN&+X,-%$"hfp)iS9ERM5X9-J*)1[iY*,% +9E)&L*)`2d!J'L[MLda&8N@Mk"+jf%*YEeTeFF'j-Kc"RidTCQ21mBNU`$'6qR'R +lKjJa!CbK,hUj14b&1XrCQK-XSf3p@rH20-k6$YZeR3Hrb15d9b%mdXpQNdFU#iD +QQMRR)!pYAX!(6-!`GKT"c1qF6EF0DN)*MjqZ%U#!,@LUKbqXrI[aRr3(L28R&h# +eP-V8NUqS*I#KM9U3!)5rZde9bdCEY35i!4!PC'&U,j68cUpr[-Ee#"N(MURAPh# +$L-5LMpAVAjCGMmkrf-@8ALJTr3D40)NjaI8S24hafq4S0E9,Sdp%mH'cp)PI6SB +,XNc&"LdRH3!a@4%)5ai*"&5kjZ3#0U32lF[N,%h'h+TkHa5R`+T54Edm+)Q%%GS +&9Ed4@mI!UJa5,kY12089HM!VKEC,IY"U1bI8%pciHQAM5-ET3,"d9(LZi5"'3Fe +l(16*F8%mcXj+8e3ae-0"!lR+HC&R5bQBc1hCer4[A"RVCFT`+dk-hke6P8&ZM*@ +4a))q94Q(E"dC[mXNC9"!GaN13Kq+3T!!caN5*HE8!3eq[P6!Jj!!-*[RBFLMNN+ +8EEIP9G[f6NQdE$BmVQbiXVAkKVH'`QfimU*m`pc9S,,!Me0c)%V5RU80mk%RYZ% +YDQ@6m,Qj8IS&cU$e''G@GXSF@c"@@INKFciGXfAJKcrQQj!!'NVbb%hcE$PflqC +jeBr,+qXm9PQRKkfX-rbXV*2mUUcVP+#2YN5UQQY8`c2$NmJDEckUq&SHM%TN"%F +,U[4KBL*@[Dq@6d#cAQh+`!5CqQcLclYN&a`ejFk1NjY#ZUcT@6Fl2JDZ%a)Q9,N +,dA4Gdb%CkN0T'J,"Z3YI)3H4$2N'3lCKJFBRQM`+%UUBB+TSF@kEAe2RSl"bQd) +-Ldd$brG-XD35`IT*B1V!JV#2lB8%hXBbqUr$C[4f2c0kJemC2Ff'[2IbC%mmH3D +)LJ#12Td&Flff58'UEA#kXX%hQrHb`IYXJiq'h@#&RaZFlGF'Ae%25`DQGM,,aJH +#I-aTf5BEES2E33)-R5MfPr%ND4,+SU+1!,9+KV+VU(0![5a$1948%P!ri'`QS63 +9G4dSP``eU+,!USeQLH%ibU@LN!#)Y,'(LjJ2$E1@-[Gm+h1dP0%(&$#rRUa#Dc8 +UQ8cAp+P,HQj+AG+aYUT,1Vj$AG)ffp3Pe$%RTLkKYMNlH6#1#+-pM!LIU0G*YS@ +jK%G&QGQ#+Vp9GIPibHAM)HGBlfAK-dlmYUdVdS!NZ"TD-mJ8Pm94mB!S&T9L*e, +cVNjU3S1@T3J%(CT,66'Ld99qTI$GiBR$YT-"Vdr2N@dUdXZ45cM5Nq4M9l5KQZY +d(Z+FLa$F!,J-U#1bicP4Ui!kjd5jRDLAJ8TbSP)GJEXUFKU3!0GP5%e&(JAU&4P +U8%9G"QUh%p9&#P+HUejj(9-UVlq2b`cRCFE*`QeEHHfQ`0"@+A18DL[P*lQAX`k +'XI$qcVN,hmR+L"lXkp0&r6$dGJCH14$81'(T3G#UPE*H'd,LY&&4+JqB%KZ(`0E +2bUX3CKE!-ldecIF-08PF"J1"8Zl#pTQli04[M6[iXXeXeiB#,K!8V4ZidFfFkmk +ZH(k(e%fhU30-!61%9PX$)dB1!@'QUQba+&@D9l3*kqB@f#@!9["-1)"@X0SrJ&E +3l4G!fe3MDDkI&6)UFXFLlTBlRDQU3GI`T#[9pbp[c4f3!%)q-'!HeLb6c6#Uk*5 +CBb"3%DMGi**3)+YDjm+!5+jDQHT'Q1Tq'eCerAkUcZ5AkXTiSL#qD94CHa3R*Ii +%U5&G-QqKK$aShXlcZ4DVB)Nh&-1N06@)A!M1,K%Qi8lF9X"qdk)Nh&("(&6PG)r +@-")k$`ZPXG5-D#S6-pZ"dc%-fLTYPKN'6D1XcUc#a8H0I2ES!9`FU&`mF2,CZmQ +akTZmLkcfG*HK1-)AjTM6B8EK(1dKi3Qm*4`[BTS'9`fTFD!#!Hb(K'2C08)A[b@ +#k5-GEi'd4iIZKp4Vfl@Rd"aQLp(&,rPAISAdb%kR5if(ZMbKfPaH$@jm49Kb9B' +8-G8jaP4R`c,9C6qC+YXITTTMNN*D[qjeKV6UFchrZVHUJ,,U2Npdc82R(L)Q`cR +1#Ff-ZeUV)V8iH908[Si4$H4'fL%rAVL&drQT9ZXdH4HVeS[+9e9TqP*#aKC8U'- +(f1QQ4Ta,@+'4KYDSfD@BC4590kT0"("#MBDPN!"#B4pVfTX@)qiaYS6j8k'H#Ti +5LTjK5d*CZ$2BUc0aTc-0G5)$(8l"i`NYbKM5XCH,1XhjDZ)%E2q8QM(+F489Xf- +q+cYbTXf4af92PGJm09MMb$e9(2R#ALkb2I)ZfC(ANh0EF9h`T"[Ni&h2,kQ3!)c +'bUN4pI@%+,bMAKjML"*T8GM,$Lc%BME8VENAVJ$!2m%5XFeQ8qKBUpR8fHV8S'k ++$5J61m0fpTMAmF3(8Z2S-A+$YMdQ1db'G"Mc9MD`ZXC"28KXFPlHC)HLKY$c4"+ +cDa9&a'5+U*!!+D*#YLhE)hTee'cDE(8,20'dk3-+K4BHVYRG[+,MHF29c&Yc3h# +jhDV[B2cCSj0NVLFGi98%SLUF5EY&CSeNpR(&p5SPfQE2Tm&X!0AEA$H"&elN35L +l-'RmHEiJ`DB'(MAP%!H4&[$clI5MjQ5&kQ!fjIik,MA!8*K[1NJZDmN"8&KJ$'A +qp(ddp'(m+9@Pj2BZI)-VISq8)B@[%@Z6f6#C&r-1mhQ(Y8bpVb&4beDfq)(LP#q +F`BCqb-a"P-aSS36[jN#F&`AQV,G*l#dC%)GNrda#Sj)ef-!TA[#RE-Ph0TmJH&" +"ZmUfXpQC`GT9+5aJ2&-[Z'A'*Y6%"8rUcaQD'L#K)CC*TGKDR$,5kQ"CZ&Xf3@) +VKijFNJif+$(K&5NFAhKiFRU0#9jc`2B*q4&4rCeJ&HRh`eDN,Aj@T$2mUNL6@%@ +DYTH+0-frLR4Afm$baiFTb6+)eE``eHQSdJR%8CicqI*(A98C66HY84)3m#B`,(c ++P&&3iQ!N!ckUA%E',9RC*haI,Z*%j3dC5CP(b`fZHJM,N!"#@,lq5KM#-Y1@X(a +p3L%XkCpd31)lPU3JA#,G#fG6NTp-3PfT-8$DGKSPejMU+1jA2LcX`miq21c$`6k +#l-2,2MVGYCjDER#m-BfE[-+-ST,)a@qkH22YpZ)Pe25b+-!%29a)51j+8mH,28) +GmY8BDUXa0&4Mb&*Mk%D0SDiD3fmU3c#q320[8G&d-4kXH6LiqA(`k%i-6(4F5r0 +4dm#LT'Np6-JQU*2fmrlCJH,qfHqMk@qp-RLRAf"3216UYk"`bJHl$fQrkVF%5,' +(&VRklD-+iK-Jl!&5p#G!H+B8a!8J2!&5r!8J(#-+iPdJ(!(+L(H"#-*-CJ+Z$8+ +"GB!-"LKc,J(TjFJ5KL`"dKZJ$#0N*prfqP`d4a[IbM['@-FB1[)YmBj3!-[@05a +ETja+dT1D*Q#5RpFpi4%[eREbJI(L(N9Ykc#3!+H4m4%kR%"6Gr`+0``U+6&T"a+ +6GNZ*3f26P35Rj5ZF58CMC-3b6!pU0mE[i5($8m9(N!"1JDie6Z"`cIRd6$%PQPH +5PA)`0jq"ZD+`B'k*Rf!Zi4HBZfB,TVjh#L"SPapJDPG0-,8jIVTJD[20[B1TJ%X +1TJ+ZUX(8V$Er`&6"VG-$8j-(XhlmC-"83q[r'M$9d2SI0jKUD$dp-093pUF"6$@ +8R4kB3R,S#P+%8@+6LIH6m1r"@0LRR5GBT%m26pT(R`lKB*p"RX#3!$kp`XXq1dA +RZeq"H#P2I-`Bja(+"QUdJC*kkp'%3d1&&@#10ap@K(ph"`018%M!)VU+0jTQi4d +#4T!!JkacB*3-)YP%rC!!m3E!QS2)5r2M018S*Bb'HF5MfG,6-'XeXH6i"%)TkIa +k!J39dh!P-S!pXCeIbam!S1iD[iN$'kKC#I9)`5JV82,VM9UAXlN)"NJIBi$dKE# +!G*fIJ,68,d#DAp-NE9RA`2*r5MDdr&jUYLkX-4TeNN"SS+6+!!SMc@A0PUdfMR- +MFM38aaZENM9F9VK(D[KYf8VKX5@QT@[3A"`lD-'f"8U5%RP6F8YXhBHm%6dP#Ca +(Gd*T1K*QY1fXkDpDAMcN$9,YYAKBCp[`Pel34XL)e-V0P3[d#b3c-RBNeR`9Ejk +6#N+@m-hA!8)I1*K-DG)eeKLPV2A**pCS9-&kaPB[K@@VHIkaeDbZUYNUG([@JfB +(1P*@hLI%V!FcaaLc"3!L(pahD&r1*pmEq0R!4`2I'Y`dm,9p(`kQ$Ajrm29p'`E +[$@B0*R9F(2blJG&p(hHNG(`mF&+`r`#3!bXE384$8J-!DEX393YNQ3"CEC2[eQk +8@TCQ$00EKVb-@ZUFfj!!a4L1`0Y0TGDaP@l)3NKDYlAGG0I6XqY6#)G9Gcd-Vir +0H3`B$M''L"M8"A91)Y+)0a(a"m-B%'*!"%')HRYbFc`lBZccrIr[fq[ETTY!cVP +rpc8G9MBN$a%3%!!3%!!3%#(Zhp8V8Bm(Ia69&(+NK"ACT5,IK)[F8U9XfXGFC"$ +q-p4,VKN6'DE0NQ!L0LR%K&(4mZK`%-l"Qr6eKa4RI@c`6M%KTFdp#J6%020d0A$ +#((2hUA5hA2*ikQdT+cbHZkDaQrmBTN'1&M*QqBIbT$M(`[SDaCHb3P%qSeZ[kGE +*EYd3$B6DY"M#,XiN+8jd!c!m!2k0h9k@BlGrGIVUp*bbID9TkIEm)qRD[GPF[+b +[ReXISk2X!K-P-PLMA1fHS0KN*pDYJR,k6mplKq#`(DG8K[2JYYEK9M`BjfQ0(PE +-I$PA-#UDNq*8!N+&VG(-P5IVbF9'KfU$80hU4UHPL4#TkSAeC[B5LMdl%-H2ZGj +kc&dl&G%4Sfd%r['`'dYTmQkP,Dr6@0D*(c0qE2MaiUFI2clm0%AX36XGpHA5M0) ++MKV!@@A(TXPG)iCqmMI9c6SJ5E3"C5Fd66Sih*9'#4d&$,`b3L,0Z`iS6X9*5"A +RUSC#c4c!A#&F+qcf)qQQG4[X)DfQ*bdh)dGE&XK*PEirp#Hl[6LYm%LaePkD'EB +r*)qrqV3pS64$KHpG$E6[$I8mAV`P`06(kLhZJe1IeD5%,BH%UHI#MIKc1AK`kVN +39,RA"FFm4h3NHXJppD6SETKqcIM"k91l,bkCfKh0A1k,2UFS4ij*bTGe0a!fP85 +0&dbADpbFkAM1G"bBMJq0ePZ-'%i3hGlTec`*KT2!F")B4SMK,eEl-9a1$)1h4`M +4r`EIC`0$U,I"IA$YFjV+D1EDBTVfh(!dmc&kI)'86$FYJ%dZ+jZece%e`C5rmLP +IQUBmMmFY&8lj+jY5FLY0+6'ETUc(ipQ+TT6F+NdTj&11dj6$UaKC*@8djFp['8` +TP+Cm`kFmDjS#XNVd&8ljKNeCH6G0@GPLQJ+b9MC90'APhA`clZ$bKY$dj3eZ&lC +m1bmZ@9j(S1*U(k0Tlfl"akF)'0D2CbX[,PN6Sq2kIebqfI#M'T-l-jIAh4&9kYM +$QKJpL,K4cmD@3R3l#A%,BR9&9),Z1TFdC6-0`c)"!T'9CIpLI"a$3,"q2$2qiT+ +e36UQrmFem``rUM%C*!3B1I5`0XM)@4[XLK`qC4i0!lJ#j'b(%p&-PIa0Zlf3!%6 +,eAkLT@i("-lHE&-e-R8*La-!CS4#Xk$16h'"-L8+--LhbcHc@a,rH+`6[qdX9mb +GT4#S(G,(TrK(Tr((0E'L(jG[0[k)3@2Sq0m(+0F'jGXempLYa#C3G,NeBiUbAKZ +XJ)4jaKm"T#Ke2IlG$UqL",#bUJ%-3MkLFACXF@ahebJMUV--J69eEL8TMVmiK8j +T"1+BGb'14pcB)&64Lcb)rSLmS'YIBA&DZYBNqrk!p8S,lCV5BQeqVXDqAjD"GBA +P4e,Y1DP(5R25mGR1ZN%Q!JRKNA)PXJEZ*98,)q4)2PX`l''E80*bIdjr,U0`V&E +VkZMAbdHrHi2IdDprK8F[V*!!QX,(jqL6ABd(-r@d4B6PSZ9+NjmCB'6Xm)@LTCR +jZDCMe6h%9NV25G8HbC`mP1AZFM[Vl&#pdp#9jlUZ6GIQd05ai"RBAka`mbrAp3G +M!05'5EE-i[VdmV6pQ8FbRKYE2NJHm4#Mh)`bEDUQ1'hr@$)#3KC5&dU1i2UjU0S +"9'aG5JF#TB8f`H1"'ZCYaf+1@15!BSlr+6CefKXXXNKdhCcl#KDA$a(12e*i3(1 +NY(KX'1dh-ESf,A[XBE(re9E1VZ["@#YRec`$KF@e8Dh*eY&`949V)Q+&0Yb++KE +EmU+Y1K*`f4k(M43V"-A#pP5l@(A9UX)KUU"BAE-TP3r"JMbqTAj8mA8mJNf5+,E +ac&P`%K6RUCGkYMUFkUABp[@Q95)dk1rF+Bk)cP3aDlI@1DRDdB+0`PMRLqd,%Pb +DaChU'a'bh,Mj*8a'L190fhZf#@clIr+)iLYVTpX3"J5MhP'!ieh(f4H8-jEka2U +B"-"p+4e"*4!ApT5i9,B%-!Me%CZ-,d@R(1LjVMqF(Xl0b4JV0HSK2@,(pKNIfiC +MQbGlE(2R#0*`ZMlfCKcFE$Uf!+CQ(0T@eN+6F@Jc2l$AG04+1QS51fTlF#4diHb +SdB(er-!mpF"elH&dPABX$mbV$DSIdLZ3!))iM9G$Q#MD!q'dp,(Kb&lm@82c5`d +0RheTB@e'CPUCYZLL"fM40-eBeIeLJhAq6-c+5P-RXhaALLfDj`h6[kA$[F1cA&4 +9+d"hK*3F5A%fE&p#3+UJl,fZS2)f+IB(K')HPK#D"lGEPGY,Yr&FZ4Y'YlrVk,r +CFSZIBQpA2SqcpAJmISUpZMD+2CQZZfIrC"5lbXFfipKcb69J2ID0qTXNa6BGqhU +6FYYS%JjYhQkJfYZKf[b`81hi#pZ09AY6E94lBXC+V9@lDik2RfTh[HMBUABVG`J +!`DT1kXJ$`dR$P(ME18b)$ja,1XFFGHSPmmVjR`#p4VKRTJI6m+mkKlP"c$peE%# +LlmhdJBl&AX"3N!#-C'8V62%kQ!LYl%2'!RVJ`Gh,`5Mb+d96"pL8dR&@i@%8(i, +"BflY8IB45pTF-(9qj9+Nk@GJPc+J68kJe9Tme!jNpehQIl+Y),X[qp8%QD,mSFB +!C,bkq)2X6l8'f@3U5Uh9dJ"NTaM)M!&QS'#E*(!jkD%LF&Q"pAqK9QQ2PeVpNMB +dG+3#5%q$-&d8'YDC"led'cm-Cr%&Z)rAL`P",e,5G-TT6IR"FUA1ma6rFm+0V6T +91cB-RN*5!L8VF1F&A!X*P9ja,jm3ibQpLab+FYA"[Ci*iYjlbjA6RKq%N9,@AZh +j`4lA[@V2'dMcI!--*K#$SeXrMm2`,'`GM40lq2"*d["*I2KP$,q-iH1-KZm4%m3 +!A%@RUmhh"MaAlXh`A2%mLA5E*bR*fDeScSSIim@2`SfFdBrfZ!jql-R`lKB6$JD +`T4[Jbec!Y!ZHCq!'Ri-29hZQB6ZNf[--Rc*YN`XE%Gl"CqJI$c(#e*8!P3A-rBh +YR99+SaJ2`%3m,r!r``$2-0,QI`R3rMI!H$m!pB*R$D9Q@&8#(9NI0l6lB'M(Ff$ +pYf0%M+I$e*M&Lb"l[%6fH*!!IG'6#V,M1B(,3Gjb5X&$#RC&T29+MRNX$cIAJNM +m[8Gac#N5ZbPlA,HUPG2FXA''[hUC[hKjMdYddr)`*(rThBeA9h[HiJ0qc!(b&Kr +fB`i3!"k+NNmQThV*ZhZ`'Ebe%j9Th9*f5aX+5F1dJ4l0[$q2d2AchK!F&C+,ZJf +h2$fG(KGlD4"la-"05G`PLYYa!0Y@caKbQaji#`2JC,aI0"fdk@##*jZMFED%aTG +!j%ZTLIVG51%CaH&(068JC2Dej8U$jh9XmEdqa*f)f04U&ipK+ie5DE*0LMXLEe# +jpQQ+Fp2,ZkU(%`[@Ub4k*%'pe#TklP[kbNA2UbfHdaj(mFc5S,-EE4DP%5lB[Ke +,2De*&k"8VD48#$NV@H%1)Mak30'Cc,2qP!iIdL5KNKBFS4pK6(Z#5p@#Rl`%R[# +*,E(Y&m%)bHX`%-XkXE8AmCk*ZU*k8Mqik%k%A0MUSUfc&U4rE09H485SqLJeAM, +XEXl05#m[eH5-TE[1Nd9+3#JRCdAdU)'M)X[UU,!L-AQH#BNj3(UP&@QdkBLMY[2 +*mkb6BEa@qRFa5@b",GC"k'CZ-5&jVjp$T1U(+Z)1B9ZVTcJ+F8`ET5@kIkT%90k +`Mi5%iJXfNTM3f-+HL)Zf"#'SaqZ!9"4qB!6l8MTd-X&'MTZ`9cm+SGET2J4ADj1 +lVpM(JKM*h4Sc-6b1P%L)2S6HKjMMYFcVGT(i8eN(R3kE1EY6iNlD5VJ6&FedDcE +GfJDa@!5QrDkpLT-9JJ'`l!DQH0A"9@9$A%iD-3+Mea")`3U!9'2K`$DlZe9HpfL +'-C!!llG9Sh")[mD*Pa%1a&2ZdH)cIN!dRV#'",[5MiS6Sjq[A5V4dANB46)10q, +&f93clf,1L!F3L2e4-Emjl'Jj215`JMJ9l)GH81UGBQ)R&r21MIA+C&!bD-5f#QL +4@H@[U9BL6a1,T$L6Q#ie#&bUMU+a#eXQbHNII+2lqS0(dG&[eZ6"mDi-288GZ@, +6p%Xh*&bF52bfi@8qYJeZ8HR3f@`QFF"%%$Vr"EccAm"&NFFd[!k-+cf8%2+493d +`I+1N#*1-+NXM''bN4,jl-j6[H1EcU4X`5)qIUr$cGrbXNQlQ3``4%4XNYVD8$R5 +6lq(R*Ykjhd6GJD3)*%M0+(b"Sc@q$Y0S[ZI[Y,e"+Fa&a#J(3106M2c'l%'i$E( +FPi0h)Zh!3L+F"YrXib6HaBfF4k'Nq%2TU5"q!86qA5%b&@D4d4!X9fbG1rr@@rN +LdM5S#eK8ReFrP`i%iQIKjLjqN!"%[f2mP`q19Dq6MS$Zi",)MjH1iA-85i+8*cV +m@f[B`ih'Mf")hJ85'q9Ahjh'dcQZ"a',1MkT0JrH@IqT62kP6IaP*a')p&pAL&` +3[m-3+N6Q0iJG$5RKfmNe`3Y2BS!1Kh*8Fa$f&`&JI`8%9SFSc@mf'Gi`*fe)Ki* +KqVIH&HpT[[3I6Q$rh&SPrYA3[9le1J&I+YpLLU3KYDNH6N!BKkUBj#KajX0K`,H +@FK2'NI-!,VmmHZNGT3G@@&+dX#'Z5d@FZV@L!eAYZ&c9D'109l3fTQL@M5EA66Z +j*1N4U0Gjk'8*VfMSD14`a%jT6"raD[C4NU5UPMB`G(Sf5kiP*j!!G!%r0i4E-1b +#TK+!hm`0efGKI'lfP!$d*IMiE$L'BX&)qNqe%1Y%*eMI`)hPKPdN`0a[,rAFJ-H +(-(@BLKbML1Q`BN2PHG[c(T(jq`c2Hai2VfV[JB`BVk`6+2$aUqCA5G8mb8MF9hZ +Z3P8I3#V!N!#mbFL2YS%IEB0mY+%5,2Ir2E-ikh&J%TD+q6k!RacTCTBN"XC*bhT +j"AS*2crMa2fXBM%`p"QBcr)m`)'R0`*H(hkZim$Vim$6Fq"0![$dR[%!hRKmR#3 +"lcSMi&eR!,cV*1#j*1#jZ212`2D!",B()&l@i3M(CI9I[)m,`+X#FF9lVB!*+U5 +5!-VCLLTqimRE,Al92LYK)0ci*A96XB`[ZAKDaL[a-SLQM5E40-HkJ!i,&(5p`1N +QjqejrN[)BNfhN`6E`4fHhh%8,C)+3FcK3SdA[2(mVYiQ)@L4(i,qka3*Z%p"CXh +AXQ$695MBRZA&80R58a"!hK@)B`H#8,V%dEI+#(h2ifFM4prc((fV12V'!(fVN!" +#6@R(5-k9d,I4#(dE$G#h88,IB3PpKdhSZdY#hefBGX*3H(P1'!Q[IEPM*lQbjC3 +aCR#6b'!EpP"F[ZfaNX3&#Z9jhh8dq@pH-&9418QS'@eVA5UbX9CEmrm*Q4ceNPQ +$R@iN+AH4&-F"f83"6kh6mCk`LJJXXjN&Q46@hFB6"#A(RSlIk*!!e8cN!'Pb`'R +``@c`JF)Z*+3UCP0SFJm,6D3"FRKbMd&i-Yp+&V'%iPFFSQcf(rKlK#R'D6bZRSV +#dBR$A`T(rf6IZf2NS[,r4+Jj-AI$@)5DVZ1Q821G9cA8I,q+S@BYNN+q*k(QL(' +S+D8d29kKjNLY3meABF[RF3JeIfF3DSiBKjS5%)dRE#S5DPBl'K"UE[F,0A9bU1Q +rjIHQkhXDH)kmSX$ceGiZQq)AH)j`JhL6aN`T06$06YSb2"k%R'HN'l1)&a!p9!b +GKC4K'-E[UkV4K@aL(fAK4)BB0b+[Sd#1-h4+Nbja)f8p*Uhh-e"l*5@CBK#'pN+ +`YPd,eI,F`+GZ`D$94Q(SPc`%4B&CbF$CiKI!r48rrq5'`Mm0$&!Nf,1$0Sk$#IU +2b35L%N!Dpl!M0,iJKD)&KU%S*h0a"D(S$HJ5&XGA244G20&3p(SFiEKdP$11$(m +$L!MQ4P[[iab-eK8*4KZk#%E29NKLeq&SJF'%@SDMNdreNX24l8A$d4L4aX,0Vf& +@mBek(T!!0Sc5JkN581-"93p,*dZ239Jk)S@PNYSj'db"U6GH#N`EG*k&H(@@9cm +)3,q`G$f[H1Z66)TV@FV0mdfbH9iNjH%#GaQa-(8l%)+05L!e#mEk*XmDU%m-#f6 +aSVq8r%"&M"BBQH`,H&Uje@c(kejXpVbYPlClM)*@&(hkb2-1(H'K$-mlRSAB1(N +("+E`L[d%PRM#6b6-Vc"NR5q&V"'rN!"e#crf&ZZaKeT4V6rah-HC6c-+@QG*35[ +Gh#F*M@Pq3G&[m,1##id94B4'Zm4q$&lI&h8K8A)@"qrU,X(EKjpe8L",i&h0`6X +&i&hYH9d#la3Uh'N#lcSMm+iV!YjeIZ!e#'XISQ#D!$X,JQT4"8(YI!5ed3U#@Pr +&)U6afFQ%Y38'BDe9c&88eRDe4'#X!Y[&Y3jXccLUZa#6(aQ(YPi[4qYLSr#fMU2 +ibbj4r$aeAe+`5bMqNU2iCD$i5mqE%STIaXqE*K6h'U'iY`L+Hre3E"$k!X@,23Z +[T6mR$)9N,F,HLDE$'i@p)ccXCGeiM5R`G6BBK,hE&4+4&2D5k'bS6GJlX9$%+1a +pi(X5pMk`B5*KlmJV#AYjQ-6#hRFHYl$hrDU([42GK$81HaI#U&JS(qADBXkq)4I +&$c4(#V8jFK'i`TcR`PVLBEI6K`V$,cp@ecr,#KFBXJ*4X&F,Xh-3KL1TTfZ149M +HXR9L,2G2R+9,$Ql30+-0D4I(`JY,A#L9I4R#lKj+3U!8"5VBVelbB6ie2XJ6&*C +aGpFFpC,lIaRfK&aZRfBaU[V,)CG"NX)FPU6!ELP"!G0i3aSpQ#UD[6GUN!!#mH% +8[J!@V1'&ccj2V8p%ZS,,P+lJJj!!mE,LG&4B2SK#1%J-QBdN"TFZ!HNL,YATX%8 +rfQNj[[ZNDjYD3A0Uf`5SD+ALj%CH!@rZ3fE3YJhUbT0Yd2!H$kfSmDN,pG4%ci9 +k(K+9E8GLc#LDY)53!(jhq[dlpbNNa#$-BpA[eRr+#J)CTij!3GHaY"')f`IGdkH +18l@%m%H0`Rik-aQUeL0%STcmAPk)UJ50(f4&8#`3"m#IcS06*p%Kd-J4#Z"0(5q +kNDM2#m$DPh%6!dIE48HVNBifM6Thdp(k)%TYBMYrpHE"c+N6d!e$U(YHjidZ)25 +!m(fcUb4QIX3)#&V$6+%+$VQ+(9)A#rDCa(#KFAR82rh"P-Z!8TPGHjZNlkH2&*- +ZjU5PFKI8em@&XSlk[c-9E@A0E[%Qf%*"Vmjb1a@'5f4&XaB,*328ECGe"N0"K-) +hIB#NDb"A6'cV3i"VBH&e'5qL,MHEjBT$@`5P,fKIY31B5%9b'+UTHrV+,%dX0(h +PRN1C+rHXc!SHA*NP(JX')MY&5aC%2*,L,61(%ELE)f%c'UUK*Q5Y4BiMV-La9lh +NRfFL[%Y3,jRC&"N@Mp9iJaGe&`hCei"pCD+BQ296aDNp@jdBHKV-P2T2TH+qHYi +4jl%&hpCAQj%SpE%ZJ+,"`B3R&+I'+BiiKMUf"+1kR5Mqfmi+#NZL'%AK2Sr$YK% +DZKA2FD+2L3%UBKIj&a$Z0UR$AVZpYU*5"LB%H(ND5RQPSY4Z%6!@'"fd!'!XQ!J +BXiU!d3Bh&(IKMA5LH4%V#2eB!i3&rmFJI,mS#+[B493-5803VM)km#U!FYABJh, +R$AkJp'-08+lkR`c+r@-*bYSA)jqCC#e'[[,S+bp'2[-AeQ,N+l1V8)`mLaTITLB +38*Mk'Fe4fB%pq0E&*5ZRbDjY-L+$EYi*'$L`X3a2)m`B3b+8PZR#k@hNd1E&XCp +4B`&6X`@&a8I55EEDr8!Y&jTX*F!DGj,qUTDL4e([Q%ckqd%d(G6+8VGRjXX'5"" +#2TSj-eqDFSDk#Z2M&5'l8bl`qHqC4`jSl9e6+$Fp5P8S+$8Q"j1T2p*6FU&-GdY +l2HqLpbD*lSi21XhcAU0r5erE1$aVprGG2LAqh0VeRmGT&r!N5ECaXEdX$GREGN- +*f80&1HKrjY4mU)'piD@+-iqN(c!LK6A`d)j$YUcF8"JjV2K!'%La-9,18R"SdIH +j8Ha%N`F52Y(1iP9$fMJ"!HQ&4c)UTU+,j4PaBdH%ULJ4rbS6NC'@8hXUH"1fAmI +"bA8QQ+DF@[Y*@A"IqhDRl9LMSR8f@"bmf(X[LVX[+liqbk`dI,r1a8Qi3G`C(mF +EV-eeGB+%R,6FF"J9[!*FX*@UZY$5L5f%k("b#d'm`@'R5e1mR@NS9,5q,1Ee49f +Rp6pCVedNMZM)$AF('1d[,G0Q9+JjKI6rIX9IA@R$JY39KP!rN!"eGZhk-YrYPP[ +1`2R2K'NG3Lcpf[@"11eX)`AGKD8bMU5Q@J2D)NTD'#MND,KGJC1abGE6U*6ebm# +B8pc3B&CSbi#+9F2-0)F4U#PS4Vl#J4Cji((p-F@R9$JSchK3Nh*'mHCpLeYb`lB +lSlZMIkR'9KBeGFm@mLE5UdT&MfBm`d254kFm4Gq0cml*N!!NQNMrV-)"AU1M08b +'N@!dd#'4F8QC8X8TJY(!Xri$H92-,QPS$%aGE$"[jKNhEc*TTRQZ!J55NN$*R'4 +@GJlINDDdd-2XNrc"V*MIK5+LX0H6LKN0VbqC@8E"rZ!fG0FlS"URMF0XL@XK&8( +VSX,QIeeXd($%D9SX-JcAVNePJaZ0'4F[)b#,UI+BUGY9J`[qMIbB9Xq@R$QS1+L +N2P45hGRfk'Md!bR"bN29e'Y4,rPM-EBp'j!!aYlBl`T409dJlZ31K-N*Jd,5HDT +G99hQNBNY8j%Sm&[Qd`BXSF05G4!+N3kiD2fl&AaZ`1G+-TXLMFmVUhHA1Cp[M#3 +'TbTLC+T5QDUipi"6Gmh39`0KmaTA)9,pijXl3k'6lG03f1*aH!MXIRC!1mE4B[` +aY2[C2GUPhM`FIKi1Ic81RjCV`TqK+GDc0e6+4%Z)rN+qK#34mkNAi)K!C4Y`F"% +(EqSdilB5YlSDml`Vp'rTP4Z'C`e8*aU!SkPcUU+6`$('"!j&15FQK*V*%5Tq&Gq +"CY!HpdF1S(-1VrpR$U)j"#)cJHJdQ38CNiF3k8L)LrS!),AIZ(*4%S-8iSa"*6Z ++30%GL'09jmI'pGD3!29HrdTUa'LHHXQMPk[!U0$+L!Vl!ePQmIGCEF9j9&`5kEQ +m!B$Q6*bZe'TbPq*r!e&NTSG(U3J-#4ZGm@URVlCrV-h3TX*#Ui$m#YK%UXLQd"J +)e%`GDci,U3ENH(A#9E-9Phm)KDPal[YKSMVj0XYKUH%X9j,F"*&$&m9P,Tc-M4* +Nc@c0CFeX'EK4CNY&Rkb0Dqhh%kZ[IZ0DJ5lHb8%0JJ0b!G*@+"VeQm[F+@*#K,C +ah5)9*XD,VKa(iNlHH*KNk,ZqSTj(PI(UZ&5JkS3Cl[U8ZK$hB*[X()HjrlP9AH1 +U!9b%+c-G8J-A204FV%M&GAa5ibkLR`iEJN4@K$QbLDYMc49kEAfh)*D#m"LZQQ0 +dpL*VB#*D*ZiB4FMMlX%dIkFS%U6ZN9bLD*jUpQUV5a30keAUqVBG3aMXR$PX$6Z +hZ@'@1b2C40%jPMM3RR8XBeE5DM,YpaJklUqZbYB8%l8"2YJNe9Kc3Ci**U!H +heJ!BfdRBI*!!3V%S(VUMcr('rD3`&)%QECVfDr*i),J!(fk8(Ql%``h5``eiq)I +dm!mmc*FHjZ2Klp,$hr&`PI4`&4kZN4kZ`F-mk@%H(Zk6(Zl$`bcTB4BH(T!!(Kk +SAG$qQ-mSD0HrmU$pXEZ0J[Ee%`RDFfQcN!$!Ule%E&IH,hriDPdJ,L9hi%Kq@QU +1SX$PFVpQZhYk`Hbd-`Ri)aiXQ$d6"H0@cKEK[%&$M2LBm5"2m*RJRVjL'C)!-PF +X5fNEa%0p2A-VKi**B0QR29`+MQ#jBJia@c&(2,KL$M%VQ#-c@c%R!ilY&IG`0[G +`0[FmH8p+EVIG,NfAc#-[8Z$l`aEA+"c9YPhB[YVA'R3(cJI1Na#XMi9Rpil#(FZ +GXI&KHL5(GVK96aYGcjUhNM#LP`NC9%b4'8j[$%)M$d"NCd#-j"EQd'+RpL&B%L[ +VP3JQ2k(B)MRQV8%hA&EQMLdm25`hXM1lpChQ'SXZXD5l,"+")a`I6YCB#R$"'*e +Pl5FD'kU2DAK*YhDqD'RV6Je!c0Q3!+l#bBKIKHC)q!,E3#$)Ll(`0Mj'R5+EHTQ +4PjkEcqmB+'i'H6iB,Ne%42LlIfN@Gllp353D[ZX[EE[3i,*%p-JrpEmk9qPfce$ +Y%d0hPT2j63kafhBUYMY$j16'V6Pb(XZfdl*IadH'63m2NXUJfD,cGf)3IQcK9M' +NE`XU@8mSjN,RYKlD(2XFi$[(##`Zc@$%+@IN-$1eG90(H'Kh4pLjqbG)[Z&%"8G +Zd[rUI1A1jGGTR-%R&G[b[fR-Jmf$B)V'Jj'UFeXT*a0rF'XM9hS5QZ@j`"E*cC! +!PZ&Q3$d3fqLDLNQii*Uifce9mD+T,HIZ0YcfUfaBZJf2@6iNQpbfflFe*IGNJJ4 +%Beacjb@CJ0AeLZk&9Yfl'rV#3rSq1CJ,+XmlecG(G[lcVq'&HMJEFGNLLra5Td$ +9mY#8akHb`U'*#c6YJ5f"Tr'+S6M-'bc9UFkLm8XEDcEM0JM4A34@0feFFiGLlQ8 +6FHRKBNRK@mi!M%e33M(Xe(GSmQZf)58f%H64*Gaf!$6KP0cJMYpX#RrkPqC`+i& +lijj0VY&Q$'R@a!khEZPBX1I1[ZK@F@pPi)[hi25%d@%&XJkh)J6jE50dX4['6QE +EE#)R8jZUdYV4T()f3bj!j3@#qi(1jSL#p!*pj3iX1%-6BJ3`B[5lGc-bR(F#p2c +@$19FlU2N0qGZh!6M9i)Nh8qK!ZXd3i-RZNDq)6%CfX-jc#5$`'K&bQ$QLYE10[' +VfhBScM[`!'A!(r'e3cY@Y$TLp+IcY6YfN!#*f#HT$c@q%L4h#*SMl4aCmBPQU2Q +pP8Y@Y'UF0&am8@AZE'B-"i(b`@Ca4p"1,T*ZN`*50`9"C-XE946[piG'2CjPLQd +8+B"+@4iZmG")&f%Lp'Y@SH1089)0R-dmf3NE49`a3QAXjRLUb0fLl29P@J"(h'r +2YeEf"LVd!`4rCq2S*PH`-4`SFC80C3IimI2SX)iB@qliXU5iB"61pVP-6*&`+i% +KNqmc,GZ,TJ2Q"Z!`1q6'a!D),HGD1[S#QB@9B-E!H#VFm6X$`qc&Ek4Z(!l`e,4 +-HcDXVA"D@R%k*jNU92pAjeQ9`B866%+AL@VG6UM%#536Y$2"6"H2JrSd2qZ5Qmb +PG'i*3"2BM@BM&iKBqU8bl@3@2d@,L`M1)RFLb)8be#Z9e08me[5f2K+p-`$cT6e +T9'I"LlT1*dXLU94U&#Je8Pj&*,V!#(-prarc"m6%""FZP,1lX"b#p!2GHCJq6Th +leEN0p"9dDkFj@SaCKrTSb3+ApK(GH5)leFD5Cp9,9Qap'i9hB(`&!-kT5J2V'%l +Z,6eFN6MchDb$bbaEZBK$1ja*-%)+6ZDhLKCrKX&SdV!ZkQl6()mHrXi8H[AYCmE +)rabZ49aLcrfViFUS(XPdiR&F-X[Xi&fTTr8V&p+5lZR&aLH5Kfa3NRGP9hV5F2! +F0iIMG6#MU@%bdCddc"Lqj)mi6HPKECN9GCa`dC!!F(6j6EmkCdLq$Z4A4RF")*A +RX+&MeSM"H&*m96me,Lb4BU0210#F`41$-aJ*[cC8(MmLH+8fDr+SXZ,iadTFq6C +@-Aje$YX18MAlpM08-`cScZ5m*'Fa1@lJBVUH!5h)J*EJ$l5JSV0`YLhe%T'I$3D +)X84`NZ65lG1NDLPpJLS1`&(CF+P4VmI"jN49dQ$()b$#MHSlJ[6Z&TA8Q04R#d( +QQD%$#fp"-mX())@F)#N'9eL,LN6C#-bA06b3!-SpMbL&YhL*-c"aaJ&[[*6AV`R +,S@`2,3F@mqA#K'$#fQ,J6%JJ8cJHmBT$#AY3J6[EIfpV9"l@j,@[3P*X$!maM4- +2$iGHBd-d9h'A'l3AZDJj$"m3I4#"f[3Z'FBi`iFj`iFj`jJa`rqd-Xa*-f*("X0 +YD**3LH#2L#3NRH,66i16"`P*q15$ScVhLThkZE!G#6dDEDU4`3R8-Q"mMNBkXZ$ +fS@*pZii5)cJBScapVNCTUUF'k#kP`%3+$j93JKqDJdFBUB0D1S1iFBqUj+*-Z8L +`d+(*,amZ&QY4%M9HQ3PI*J5M8'%$Ve$mH+6-L#LIb8@)j5*)Tf[5QB-)aP5KA6f ++VN+'3pMF-L48)%,&Z85Q!ANq+hQQBbZbDPk@N5j64#5*"#Bk+P6YBBh0UN6Sp$f +i'"FQ)P8#VYK(jU)#0"DJQ%jiRaiT*JqDUCN866Y2RRqB@-J6`TB59qCf,ddb*bK +r011DL[1'DT6E&I0ZI+6A(!80!+rP@aFFSUI0[aFEf@3f8+(,m*TC8-#2X5l)Nf` +dH8M'dfPUF"NlPmCQAGVKC42j*jXa-3Q%4!!E@m)4Z'#pl2-jZafYLpR*cF!0!J$ +"($f-KZKCGcAEMD6Y6(,E4JLFa!4+h',-5+li2eqF41k[h!%01"BbN!"#&(SjSZR +L"ITh#*`l65"fZNHYS#9Pdr#N)ZdT"M#%M%1TqcB4J&qN!MLUQf%qMUT1)F`ENX& +K+SE",pIV"cB4,MS*m8Pa-JT8&5%TMj!!1-[mYF)14XU)0'Y4dbN[mr0b!N0&Nif +"kZf6@Ce9`+c"E9(PK@-&VUS`iJp)kMFK"@hFq5(&9L&5USf3!0*[)Q5U-KI-kT@ +j$M6PJK#@GcRfNB#%([!ZY#SmKB)b'AiU,`&8&TrB0UB+GbbP$GHp2%ULHI!NUUN +6$Fl%m3f+*PPd!ke19'5TX@$'TP[$jE44bMd@jS6pBM86`a991[C+VQ3*#T(&2M+ +%fR"09kh0Z++`&emV6'5Cd0l#"XR6qD8dT)AJR*-D[-PI`iXR$@8VNd-BBm%B3P6 +j'1VBjfi0PbTdc%4blTl'F6D9BTNGGBff)46+bi1i(d,9hDBmM-$ZMN2#&j9K6`d +kiIjY)"@S%,FT2[U!i#(5m4JFmpZ8ZSh$Q'c4iM*lCiDq(MJj)$E5N!"ZZbC(5cf +@)MXTmU2NT"L3!,kE4#b-+#YB!F3m!M9%Pl3m%iJbU$3kJm2lM!l[0i8,(Pa+8!* +H9+IFb,X8UXLU-KPThbUU*-EF4j8LcqC8,*Up-!Yp5+2aPF9`mBZkJUQ+Vp$-31T +SS*GYI9!e',T)db1aif[$%,VBK$'U(ARX84)@af!`l8-A48dJ4*(J!1-C$S"Q,Kk +mA4m$5FffAHL%C%5bc`!ZPCT5*&2+"K"lB4c@XiYYj'pJJ3i"QifVCi0XFQ8Vqa` +G0@m+NX`VE5BDp19Gc#Nb"rUC@AZfAVNl,-*-KUXdE+PjmGM!"PGPSXVfmS#i)r5 +DGc4K3,-)RGPCd4)9"S915ij[jT0S1XYbhl"VGlHVa[R)&3b[%hFN[BB%c#Vr!G[ +e,pbqSHpqQKicI9`8YQaaSG,'T-Al0)Z`3AUBLb,N"KFMC-h%%G58*V2J8"6Z-HT +#i38Y6E2$"M8jY[CaTaC8)c-[R&IL5Z1LKB)G5Mp5,rQLi@dp'C@k3'3Nh,K#VaS +DE!ihVY9MiCLQKDX8&cam5N`6Smd!FZI"'@a*1FQkEhSj!(Fi54-bpf$+62mLLZB +*'JNPERUSCYd),R*$c9MCh%*m('e[!r&44cXGiVYk(1)HFKTq%FeZ*%-3*NTKZ9D ++3G)SjjH,ABj`l33BC9L!UMKGL)%*a2TfS,ZI,k',Z&$Sj#6[PU8,&2-Jf'j(3e9 +P9TjG-1@Xq'IP&'2&Lr1D',eKYqp2,B@PEq*%$6br)CZqTXqS1XiIRH)'EITckAE +*ULH6FFVY(*Ad@6,*kA-%33)A$H9Fi$U*EEJ"hU$%f@CHd+8"2cT(TAY2@XZ3!%l +j8%P%)#SUL3k[HdqacI6*Ub4f$MRb8N&`UNGXT'T"f4G@daH%fATGA@k,B22TkIe +3X-,`FiD6d#J!AJr6kd`8p&,iIaH%R[&A$3YIAIR2FkX(K%pQ,IMC!Q(,Sr5IfRh +AA8+UqMCebV([U`qTXj)[*#mAi[%cjQRe6jI1QL'N#LI96VAPXH5X+fUhm)C`6I) +cqYi[2K3bK,m,1A15e`SpDN8Hf+lqG(Ebe-[UR`Y6K'A*,bGrmq%h(`PKiBr55'( +Cdm+Xj-[*%i36kj+rQ5HX6,iXr#pq9J[Pdi6IMKH5a`XPR,D2Ir$JqDI(MAYkF-Z +9`EL"+pd$3N!S%cjqqYGA[K&q[5#j3qKEX--Mi&*abN2U(d`6hRrd8H&r(hhdihY +Q#+-cK1GR#*-H%jDH'1J@hTJKV&FApLa,[LdjIh#r-&Ypp0M"j1mNIcAiTYV@,*` +EI($DmVd6fS5r6#[TX3Yad`6DY"S[1!!5HlHkM,%9hRpVdD)[m#2m1eiFZ9#`iN, +"FRA+B*[`@h@Hm0)9B8!pmkRAe@ZZ##GAR4$1G3JG"6p8(def*,mP("EqCHPJBQp +b6R,cB&Rh0m,,dSK[IUM15IjPmT[#EiA8TB-e(bBA*JqS0h,+mM(1mF-RKHR#%R@ +Mm%2K'Z(idbGA#"H&`Cl9VkZr&Ei8TJirqFePSHI#clU&eaHTAlc5*hamcB3([KR +6*rcN"m,&mGhMZfHF(bGd,jmf45KF1H2e'5H&Lr1&Mhrpia-[#4GI%ljpjMG#GSI +`c+rlIR5ZHmaj!*!$'!!!*)J!!&Hi!*!$#!#3!b!!!$mm!!HTm!#3!`TB`!"G`!! +!AF!!N!3Z399c-J#3"306C@Fb"h0PCfePER46C@Fc"h0PCfePER46C@Fd"h0PCfe +PER3!!"TZ!*!$!AB!6R&+JfBL3Hd!)#!m2c`!!#)mUI!!!8T"CJ4+3'F+5%")35# +!)8%!"%+R3IVrcY$m!3![##mm!!!CELm$B3!#V&52Cd"#1!TH3UF[2%4"9%%r2!6 +9U"p`!4(!#Pj+RfFB6R%`2+P`TdC$qJ!U)SK"qJ!J-$bTF+C(5S0R"(!"6R91l3! +L6R&+JfB#UI4`!%jeB!B!N!8"6R%I1[rf5KpQ%NMRi1""q[rU80"1ZJ@Z60m("bm +krpj1G@"b38a"4%4$69!!!`#30&"b3@e)jf$`G&#I`Lp)!#!J6b*8-@N!&!!B)8! +!*$&m!!%!,0+4)8%!,U!#hm*-h`m'6R9+1!THC``J+J!)C``J3#!3C`B[1[q%6R9 +)jam'3IVrRR!-)LS!"-+i!aTKT'B!!6j)H[q16VS(EPK2X(Vr@QB!!3kK'Li)##S +!3!!%C`BJH!+QS"XX+J!%+LS!#"JU!!5Ae*A8)$Vr9U%H2cJ#)'B!!1a86ba))$V +r4#)'`VJ$'PK"B3$r6#!krcc!Z!-D3IVr1##!5S9Q"+%LB!3J4D!RCJ!!Y#T))!j +3J%(kr`JJJ#!kr`T4J%(kr`!JJ%*R5(S![#m95(Vr!LmkrZ)[1[lL,cVqbLmkrXS +[1[l+B3!06M!ICb!r!%U&C`JJ6D!US#YJ"#"0S#-J6U!I)%HJ'c(I!L"JB#"1S"m +J4k!EFJ!5"1F*iaRN%3!"!#!#!3$J)%fJD3)!!"q!!5"0S'V9e0I83IVqGNU3!'F +)F!'JQ(!$S*JJ659)!!K`!%cIB2K1G8cIB2KJ!2kq2`!J6U!I)%HJ'c(I!L$9e0I +8-$J#)$(!#Q#4b#9)!!K-hf$i6R919J!!51F!1#KZ!!a(q[iU4IVq+L!8X**Y"#! +5+)"+J'm5)&-LEJ!)SLiJ&0'6NC*`!'!%-$crf8cI(!"1ANje6PErb%MR(MJQ,J! +)+#i!$#KZ!"""q[fk,8Mre%)ZrmLK'Le)rma96kJF-"mk!!a&!!"[A%KZrq``"90 +&2`#S$e92,blrl+J0-"mm!!a'!!"[h%)RUCYC6bmZrq``"P0'2`#S$L!I,8$rm() +"(`'TQb"Zrr"+N!"R%&92,`LTTM!I5-"b"-#"Cm3[,[r`UD0J["!Z!"4R#PP2,VJ +#TL"IS"Xr2+$m6VS%KP42,8$rd%U!C`!"RLm!6VS$ePK25J"R#R!"(8!!&Nlk!KK +)E[rN5'lri%KZrpK1ZJ9U6qm!$#!Zrq#K(Le)rp`J#'F!!@3J,[rNS4iY52rS)!K +R!!&8,blrj#m)6VS&Z&"2)!0Q!!#Q@8m[2%024%9#CkJI)"mY32r`5S"R!!#1)%! +L8()Bdm%[#8kk",4B6h)$X%&QGL!0)%"`+0(!,8Mrp#*Zrr!N8A!BeF!Y5[ri,`T +1ZJ5k@%mY32rm)'lrm+!T8%SQE[r8*dS!+&P2,blrm%kk&F`J(h,Sd)&4J#G!!#a +96dKkrM)[,[rd5'lrr#m-,`3[,[rF,blri#mZrqK1ZJV'9%m[,[r`UD-NE[r8*@l +rd!!-*@lrh!!3*@lri!!8*@lrk!!B2cbKQ%kk!eC86bC!2cbSRdkk!dT86b)!)!Z +`J@B%F!"J!R!")!!P3!!F*83!)#9-!#4)H[[-2cbJr$mmS2a1ZJ,i9%mI!%kk&9) +r2+'B6VS$$&425S"R"(!"S*JJI!!!!9S`%%M!i)"b"V#"CJa"qJ#Z)R`!!!-m)SJ +GI!!"rmJJE[r-S"Y96kJF-"mk!!a&!!"[G%KZrq``"90&2`#S$e92,blrl+J0-"m +m!!a'!!"[h%)RUCYC6bmZrq``"P0'2`#S$L!I,8$rm()"(`'TQe92,blrm+QQ-"p +)`()%`)&R##mZrr#TSQ$#*'lrm%U5Ca"96bm+UDB`(dM!FJ6!J@HU,`UTSf#N%#l +rb"e!!"C-haai6PiJAdr[!!j1d%j@rra)j`!`3Llrr$mmS2a1ZJ)X9%mN3%U!Ce` +[!%kk!B"B6dS!Ce!J#LC!)%![+!!-2cbJr$mmS2a1ZJ(H9%mI!%kk&$JJ5b"S!"# +J(b",)'J!'+!I)(`!!!&D-"")`1#!FJD`J@B+F!!JI!!!!c`JJ"em!!(rr"!Zrra +-h``!6Pj1G8j@rqK)jami@8qTG5!I+J")E[rSU(3J$5"!)""bKY#",8$rr#"!A%K +$l[rX)YJLf&P2,ca%394"2c`%eDQJ)"mS3#"!*&!b+J!)NQS!"$`"0#S!"T4U!!) +q!MBZrr*)`cJZrqj)a*D%1!&)a*D%DJ*5Jq+$282rpMBZrr")`cJZrqa)a*D%1!* +)a*D%DJ*5Jq+$282rp$BZrrE@36e$rrSb,[rddN)p3Iri@8p#TdKZrr4)HJ"QFJ% +I!A)"2`&brbm"3LG#TkN6)"mQ3#m!U(-'K3#3!hJ[$#",F"$4`#m)U2CC6kPe)"q +`K@3#B2496kPd%"pQ!Q$fF2mr!%*R)"qJ-Lm,U43[$+QM,blrk+Kc60mFq%jH6R8 +!!J!!6PB!!%MR!$!NEJ!))!SQ3#"!)LJ!!Jb"38a"4'B@)LJ!"Jb"4%008'B+-#J +!#R)$X%&R"(!!B!*`!8cI$!"1ANje,`TC6cmmU'j`!4m!6VS5H#"I*%KC6cmmUQj +`!4m!6VS5CL*I)%Uab@B'-$`#!'!%-$`%!#4I6R919J!!,`-f,J!)-!0)`!+!!!! +)!%U!E`4`!@!#F!!Q(djH6R919[rm51FF!$BZ!!Jr!dkkrma86ae!rrab!E!"CK! +#3`Ir6VVrJ,"$EJ4`!'!S@8mr2+LIF!%I!%kk%I!J(bS!@8mr!amZrra1ZK(J)"m +S!,#&CJ*`!%cI!$K1ANje6PB!!%MR'$!i,J!)*'i!#L"+)"!Q3#"!-K!-38&%CLJ +b+!!#$%&$8QBH0J4brlC"CaSJ+!!%FKMLU!+!!*!$rc)$5-'`J@F%F!"J!R!"(8! +!$NcI$"K1AL"IA%p1d%j@!!"96dKZ!!K`rcm!6VVrNK!ICa)JEJ!))#J!"()BiUJ +#3!$rB!*`rdjH6R919J!!98p)EJ!)F2mr!%kkrf33(fF3)'i!##!S!!3#J!$rN!0 +J!R$r6Pj1G8j@!!")jaJi*Qi!##KZ!!`J5c#m!`&`!#4-*)!Q2!!!!56ANJD5!!! +#5!D5!*!$)#Jm!*!$J0Q5fC)S2!!!"*!!fC,ANYQ5"T)!N!0m"T)!!)!!F!!NEJ! +3*)!'NJ#3!b3'NJ#3!b!'NJ#3!dJ'NJ#3!cj#3%cI("K1ANje6PErj%MR(cJQEJ! +)+Li!$#!,+%!Y32rSF#6C`#e-rqa`)0R!,8crm(")fF!Y62rdF$lC`#!-N!#,X)9 +M"R"P6[S!XN*!2J"#3$e!rq3f"h!NYN"N5(!%YN"N"(!!B!a`!$!$@B"U!PD!j)" +i!$J$,86rq0LZrqJN4"5!)#lrq0#!d+lrm#"!-+lrj(!"&"*b!")#if$4E[rN8NG +JX%*!2J"`!6`!0JG`(lC!C%4`!EC!C!4`!'!-F!!`!e1!DJ*5J1+!H!!i!be%rrc +BV[rX*%38J#!Zrrc3J0#Zrr3J3$#'F!%8%R)!%J,MB0a!8NGJY%*!60mFq%jH6R9 +19[r`51FI1#4Z!!JQEJ!-1Li!%#KZ!"*#3$`!-J9`!$!"d)!d"R)!-J+`J@m83N! +d"R)!-J,5JG+-)%%`J&*'B0T#3$`!F!)p32rb0JDf4@3!!,K#3$i!3N!p32r`F!! +`!q@!d)SJ3#!3,8$rp$)'F!!`!G#,)%!B%(B!&J5f4f-!!))`,[rfFJ(!3G&Zrr" +`!$!$8i!d"h)!-J+`J@mq1#lrm(B!0J3Y3rrmeS2@M#"$5P"Q%L!Zrrc3J0#-)%! +`V[rb9'lrmM)Zrr"`!$!"d)$3M#"!-"!p32r`B"B`"G"!d%Bd,[r`FJ!b!Y+"dS` +J36#!8NFJ,[rdiSJY32rdB!$rE&*'B!$r4%cI(2K1ANje6PErr%MR($!NEJ!)0Li +!$#CZ!!ib!h!!-!(QJ$J!-!0b"m""1J"`!#e!rr`d"()!-J,5LL""%K"`!"!"0!9 +b!$)#iU"b!F#"dDlrr#)ZrrcMLG+,)%%b%(!!-!%Y32rm8N8`"A))X%&Q"N*!1J" +54$)Z!"*`!$!"d)#`V[rmB`*JUK!Zrrm5,J!6dJ'3!!&-h``i6Pj1G8j@rra)jam +J*'i!#$JZ!!`k,J!1-J4`!$!"jS!m!$)%G!I#3Mi"GJ!f!0D+)%-3%(3!&!!Y3[r +mF!!`!63&FJ!b!Y#"jS"b!V#"C`ab!E#"Cb"+J'FdB$)d"R)!-J*8JG++)%%5%(! +!%!&b%11SJDlrr$3'FJ!b!P+"dSSJ34)3F!!3!H')JDlrr#!Zrr`d"h)!-J,LU#e +!rra`rh)J0J9d!$3$NS,LU-"Zrrj-h`6i6Pj1G8j@rpK)jami*Qi!##KZ!!iJ2!! +!!564VJ!5)$`!!!*)dDi!%L!Z!")Y32rXFL$6VJ!5)Li!%Le"rr!N2!#3!i$9VJ! +5*#i!%Le#rr3N5aJ5GJ!@"#e$rrMQJhS(aN953ce$rp`Q,[riiS0k!mC&9%-p3rr +QGJ%k,[rQkf-p3rrSIN$)"h`!(!3p4[rLH!(VC&0%286ri#SZrrKq!FU(C`Kk!$S +%8i9J!RVr28ArhRJ)286rj%T'CdB[,J!5,`!r!e*+,`T1Z[mk6qm!$ZG!d@lrj#m +Z!")[,[r`2`-[,[rX6VS,#%r[!!i[,[rd2`-[,[rX,blrm%kkr+a2l`!13N!p32r +B-#lrf,"Z!!aN!!%k-#lriQFk*%!r,[rS,blrp$mZrq3[#dkkrBj2l`!-%J!J#R! +!%!%p32rDG!!d!05Zrq`J3K!3FJ!5!00Zrq4J($mZrqBr,[rN,`Y1Z[h`8%mp32r +D-#lrjY&Zrq3`,[rDX'lrhQB@-Llrf&*ZrpK`!$!"d)`J3%)3B!$rHM!ZrpU`E[r +JCJ!!P$!Zrq*R1L4!2blrk#mZrr3r,[rN,`Y1Z[d'6qm!$")!)!T`!"!"28$rfR3 +!0!$8V[rX)%)3%()!%J$6E[rNB"`r,[rQ2blrj#m,6VVpD&"228$rfM!ZrqE4E[r +N9QlrfM!ZrpT6E[rD5N"R!2m!1#lrf(B!0J3Y3rrm8i2@M#"$%"!L,[rmdS`J34# +!8Qlrf'$1%#lrhG!ZrpXd,[rB8Qlrf()!-J,5M#""%)"J!2kq-Llrj(!!-!&HJ1D +!60mFq%jH6R919[q-51FI1#CZ!!JU,J!-+'i!%#`Z!"3Y5rr)F#6A`#e,rq"`)0I +!,8[rc(")em!Y5rrN,8crP#Bm!!!"*0HZrj3J2!!!!NM4V[q8F#$4V[q8+$`!N!1 +!fDlrP0QZrj3YE[q8rl3S2!!!"*!!fDlrP#eZrj6rZ0HZrj3YE[q8rlcCV[q8,@l +rP2r8F(c4V[q8,@lrP2qN)$`!!)!!dDlrP#!Zrj53!)b`K@-+F'8p3!!S6[S'HR! +!,J"#3$e!ri`NE[qNeI`!!)!!,8VrU#eZrk6rN!!YI!!!J!$rk%KZrqJ[,[qN)'i +!*%k3!&"2)#lrk'B+F'Fp3!!S6[S'0#4Zrj!!8NUel[qSBfJJE[q3!&*)NHlrU#e +)rr3JE[q3!*(Zrk3Y52r`)'lrU*(Zrj!!,8Mrl#!)C`iJE[q3!#*Zrk3J,[rXSLi +NE[qNeHlrl#e+rj!!5'lrm#mZrk3JEJ!N6T!!8%mJ,[r`X+lrp'3+F'Fp3!!S6[S +&`#"Zrj!!8UlrN!!3%"e!rk"b!")!dN&636e"rp!`,[r3d%!p32r5)'i!(#!3d+i +!)#e!rl!N3#m-,blrZ$mm!53[,[q3!%kkqr*2l`!1-J!J#R!!-!(4V[q3!#m-,bl +rY$mm!53[,[qi6VS(ZNr[!!i[,[qm2c`"*#mZrlJ[,[qd6VVjA%r[!!iN3#m-,bl +rZ$mZrp![,[q3!%kkqk"2l`!1-J!J#R!!-!(4V[q3!#m-,blrY$mZrp![,[qi6VS +(D%r[!!i[,[r82blrd#mZrlJ[,[qd6VVj#Nr[!!j`!#i!3N!p32q-,@i!)2qX)'l +rV,(Zrl"N!!5S3N!p32qB$'i#52qBC!!!`M!ZriaQ!!#-*'lrN!"55VAZrkKMD#" Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj! !)QlrT#!ZrqbL,L4Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[r -dC!T`Cce!!#K1qJA!)'lrN!"5V[q3!"!3(8$rS()!%J$5390"28(rd$!Zrp$33$e -!rp)JEJ!F)"$3VJ!J,8$rX#4!,``[,[qi2c`"*#mZrj!!6VVlmNr[!!ib!#!+F!! -`!G'Zrj!!,``[,[qd2c`"*#mZrlK1ZJHk6qm!$LmZrl`r2!%N,blrZ#mZrl41Z[P -F6qm!$L4!,``[,[qi2blrd#mZrj!!6VVlS%r[!!ib!#!+F!!`!G'Zrj!!,``[,[q -d2blrd#mZrlK1ZJGS6qm!$LmZrp3r,[r3,blrZ#mZrl41Z[N+6qm!$R!!,J"#3$e -!ri`YEJ!Jrk`JE[qXXHlrX'3!"+K#3$e!rjJ-EJ*)rjKN!!$#-#lrM'B!!)`NE[q -3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q3!#e -)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i!*%k -3!&"2)#lrm,#Zrr4N#R"R28!!+%lk"%)JE[q3!&+Zrj!!%K"`!"!",J"`#$e!ri` -`"h)"`%(4E[qB-LlrQ(!!-!(3J0#Zrl`J3$!328$rQ#!(iSJZ!&0ZriaJ!2mi"'i -#52qB$'i"!2qBC"!JE[qX8UlrV"#ZrjPJ!2m)"'i"!2qB1#lrQ(B!0J3Y3rrieS2 -@V[r-)%-`%$e!rjSL,[ridUlrb#""%K"`!"!"28$rR%T!C`!!`JaZ!"MrM')!!*J -NE[q3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q -3!#e)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i -!*%k3!&"2)#lrm,#Zrr4N#R"R28!!+%lk!bJJE[q3!&+Zrj!!%K"`!"!"0#lrM() -!-J,MU)k!8'lrM'!!rf*`rh)J1#lrR(B!0J55Jq+S`%I4E[qD)!IQU#i!Q@lrM%* -!28$rQ$!ZrjL`E[r5C!!!`M!ZriaQ!!#-*'lrN!"55VAZrkKMD#"Zrj!!8NL4l[q -S,8Mrp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)QlrT#!Zrqb -L,L4Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T`Cce!!#K -1qJ*B)'lrN!"5V[q3!")3F!!3!5i!F!Jp32q--!Gb!F""d@lrQ$)ZrjK`!$!"d)$ -3V[r8)%!`%$e!rjJJ"q+),J"6E[q-B!$r0M!Zrp+4E[qB1#lrQ(B!0J3Y3rrmeS2 -@V[rN)%-`%$e!rjiL,[rmdUlri#""%K"`!"!"28$rR%T!C`!!`JaZ!"MrM')!!*J -NE[q3!&*+YHlrU'0S)'lrN!"55*(ZrkJY52rd)'lrN!#4l[qN,8Mrm#"ZrkL4l[q -3!#e)rq`J#'F1)'lrN!!LE[qN)#lrl+)Z*'lrT0AZrq`Y5[q3!%KZrr![,[qN)'i -!*%k3!&"2)#lrm,#Zrr4N#R"R28!!+%lk!9SJE[q3!&+Zrj!!%K"`!"!"0#lrM() -!-J,MU)k!8'lrM'!!rf*`rh)J1#lrR(B!0J55Jq+S`%I4E[qH)!IQU#i!Q@lrM#" -Zrk`b,[qHF!!`!C(!,8MrP,(Z!#"PB#"Zrj45V[q8%"!JE[qX8UlrV"#!)'lrP&+ -Zrj33%#"Zrka5V[qX%)!JE[q88UlrP"!3)'lrV&+Zrk`3J$!ZrjT6E[qD5N"R!2[ -H)'lrP&+Zrj33%#"Zrka5V[qX%)"Jh&CZrjSJEJ!BdFBb,[qHF!!`!5*Zrkb6lJ! -JN!#*NF!Y52q8-#lrQQFQ)'i!'0('XHlrP'-D)'lrP&+Zrj33%#"Zrka5V[qX%)" -6E[qDB03YEJ!Jrj3`,[qD8flrQNT!C`$lCL"Zrj45V[q8%"!JE[qX8UlrV"#!B0` -JE[qXXHlrX'F)F'Fp3!!SB"3JE[qXNHi!)#*Z!"`LL%*!28!!+%cI(2K1AL"I6qm -!)%l3!(!m!$iJ!!"i)$i`)#BQ)(JJ2$dc-J!!1N0[EA"bCA0cD@pZ1N4PBfpYF(* -PFh0TEfi`-c!a,Q-!!$`!2L!!!(JJ2M!J*LBJH#!m26-b!!!k3fpYF(*PFh0TEfi -k4'9MEfe`FQ9cFfP[EM!c-$%ZB`!!6PErk%MR(cJq,J!)+'i!$$BZ!!T`!$!$1!G -b!$)%N!#"FJ'`J@m!!E3p42rS282rkP*ZrqJ`,[rSX'i!#Q3FFJ!b!0+-)%%3%$3 -(FJ!b!Y+-)%%5%,!"C!*JeP0ZrqS`,[rUX%GM(()!-J$5M#""%"!d"h)!-J,5M#" -"%K#`!@-#B0J`,[rSX'lrkQ8#B()i,[rSGJ!f"#e$rr$@M#4$%K*`!"!"28$rl$S -ZrqTi!$J&,86rp0L-*N33%a5!&Ulrl5!Zrr$3J0#Z!"!J3$!328$rl#)Zrr65JG+ -Z!"!J36)3*#lrm05#e+i!%#"#-)%L,[rddS(5VJ!3)%%`J'!!rc)`,[rUX%GQ"P* -(B!$r"$J(GJ!f"#e$rrM@M#4$%K*`!"!"28$rl$`ZrqTk!$S',8Arr0U-*N83%a5 -!&Ulrl5!ZrrM3J0#Z!"!J3$!328$rl#)Zrrc5JG+Z!"!J36)3*#lrq05#e+i!%#" -#-)%L,[rmdS(5VJ!3)%%`J#!Zrr`L,[riN!#"0#i!#R)!-J)N,[rm8S+5JV#"E"i -[,J!3,``r"Mm%6VVqA%r[!!``,[rU8N!q!'!!rP`[,J!3,``r,J!+-#lrkP*!2`" -1Z[if6qm!$$eZrqS!#Q!!rMK-haci6Pj1G8j@rq4)jami*'i!#$SZ!!`QEJ!1+'i -!%Le-rr!J2!!!!56C`#e-rr4#3$`!0JDf4@3XH!!i!be%rrMBLL"%%"!L,[ridUl -rm#""%)!J,[rid)$3V[rd)%!`Je*'B-i[,[rd,blrm$m&3QG1Z[fb6qm!$%*!2!! -f"VC&C"*`!$!$d+lrm#"!5K"Q"&*'B1K`!#e!rq3f"VC&C!!!U%T$Cc)J,[rNH!! -i!be%rrcBV[r`)%38%()!%J)Q,[rm8i2@V[r`)%-@%(3!&!15JZ1S,8$rj$3'FJ! -b!Y+Zrr!J34)3F!!3!6i!,@lrj2rXF!!Y32rS-!G64dT!Cb!J,[rSiiJL,[rXG!( -#JS#",8$rk#!ZrqcLL#e!rqaJf$3'FJ!b!Y+"dUlrp#""-K"`!$!"jB$3Lb"!)+l -rk&*'8Ulrj'!!re4-haci6Pj1G5*I)&qJ*5k!DJ*#Pdl4)Pm5(c!I5J&R"+G'B!+ -M4Lk)6Y%LAa)I-"mJAdS"C`5Q4f!#SNG1d3#3!`S!1+!"!!8!N!B"!!!"HG`!!AM -F!!!%23Dfe$3%LJ#3!a`$XJ!64%P86!!0!+*"6&*8!!S"5RCPFR-!!3(18e45)!! -"!HC3Ff9d!!!"rN4-6dF!!J)+8e45)`!!!Lj%6%GB!!!#1P"*3e3!!!*'BfPMEJ! -!!P**3dp1!!!#ANP$6L-!"!*U4P*&4J!%!UC#6N4-!!%#iN&9Fc)!!!,kBA9cG!! -!!`C$6d4&!!F$%N4"9%%!!!0b8dPD43!!!hj'C@&d!!!$LJ3"rrmJ!*!)KIrr*!! -!J!Dfdj`!Krrr!*!$eJ#3"BErrb3!!5B'YY1N!)$rr`!!!DF!N!@errmJ!!)&!*! -&J[rr!!!#G`#3"!2SrrmJ!!,9!*!&L2rr!!!$!3#3"!)!rrm!!!2C!*!%!J(rr`! -!""F!N!3%5`!S"!!8V!Dfdl`%Vrrr!!!8r!#3"!%(!$3J!"8k!*!%"!(rrb!!"'- -!N!@#rrmJ!!4c!*!&KIrr*!!%J`Dfdk!!Krrr)!!%N`#3"BErrb3!"+-'YY2!!)$ -rrb!!",-!N!@"rrmJ!!6$!*!&L2rr)!!%d`#3"!)!rrmJ!!6P!*!%!J(rrb!!"28 -!N!3%Vrrr!!!9k!#3"3,rrb!!"38!N!8"rrm!!"[$!*!%!J#3!b!!"5-!N!3#!3! -()!!&-`#3"B$rr`!!"6m!N!3$k2rr)!!*GJ#3"!4,!"!%!",@"VE6V!%(!"`J!", -[!*!&J2rr!!!*NJ#3"BMrr`!!#G)!N!3$k2rr!!!+%!#3"!4,rrm%!"-,"VE6X!4 -,rrm%!"3a"VE6Y!#!rrmJ!"Ai!*!&JIrr!!!@r!#3"B,rr`!!'!#3"S2rr`!!'33 -!N!@%rrm!!"S)!*!&J2rr!!!E$!#3"B(rr`!!'aF!N!@#rrm!!"XL!*!&Jrrr!!! -E,3#3"B6rr`!!'cJ!N!3"!2rr!!!E3`#3"B$rr`!!'f-!N!G!!!!EQ`#3"B6rr`! -!'lm!N!8"!%mF!"`%"VE6Z!!#!&NF!)d3"VE6b!!$!'-F!+R2"VE6c!!%!'dF!1j -E"VE6D!!&!(FF!3Ve"VE6E!!'!)%F!6bY"VE6F!!!rrmS!9ib!*!&"rrr!!&HA!# -3"[rr+!"Br!#3"2q3"!!"ANi!N!Err`!"H-i!N!3'F(*[EA"d#-3JFh9QCQPi#dP -ZFf9bG#"%DA0V#d9iDA0dD@jR)&"A#dPZFf9bG#"%DA0V#d9iDA0dD@jR)&"A$Np -hEQ9b)(*PFfpeFQ0P#90PCfePER3J-3P6C@GYC@jd)$)*8f9RE@9ZG#!c#90PCfe -PER3J0!P6C@GYC@jd)$8*8f9RE@9ZG#!f*A8: +dC!T`Cce!!#K1qJ4#)'lrN!"5V[q3!")3F!!3!5i!F!Jp32q--!Gb!F""d@lrQ$) +ZrjK`!$!"d)$3V[qm)%!`%$e!rjJJ"q+),J"6E[q-B!$r1!4Z!NMrQ!aZ!3$rQ'3 +3)'lrV&+Zrk`3V[qCB!$r#!4Z!3$rQ$JZrjKf!$B%,82rq0D$eUlrc#"$-"!p32q +D)Llrq0+ZrmJJ34)3F!!3!6e!rja+3'F!!-)-EJ!BriaL!!#B*'lrN!"55VAZrkK +MD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L" +Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!Zrr# +`V[rdC!T`Cce!!#K1qJ-S)'lrN!"5V[q3!")3F!!3!63Zriab!$)#ikL1J&"Zria +J!2pLF2pb)$JZrjaf!$B%NS2LU-"(d@lrQL!(jUJZ!*PZria#3$e!rjJ`,[qBX'l +rdQ3!!-)`,[q-CJ!!M#4Zrj!!8NUel[qSBfJJE[q3!&*)NHlrU#e)rr3JE[q3!*( +Zrk3Y52r`)'lrU*(Zrj!!,8Mrl#!)C`iJE[q3!#*Zrk3J,[rXSLiNE[qNeHlrl#e ++rj!!5'lrm#mZrk3JEJ!N6T!!8%mJ,[r`X+lrp'3+F'Fp3!!S6[S#@#"Zrj!!8Ul +rN!!5%(!!%!%Z!(!)28$rM$!(FJ(!3G&ZrjJb,[qBF!!`!G#!d+lre#"!-"!p32q +B)!ILL#i!8flrM'!!rcB`,[r5N@lrQ$JZrjKf!$B%,82rr0D$eUlrj#"$-"!p32q +H)Llrr0+Zrq!J34)3F!!3!6e!rja+3'F!!-)-EJ!BriaL!!#B*'lrN!"55VAZrkK +MD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHlrT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L" +Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8VrN!")E[r`,blrT#"Z!#41N!"36b!Zrr# +`V[rdC!T`Cce!!#K1qJ&D)'lrN!"5V[q3!")3F!!3!63Zriab!$)#ikL1J&"Zria +J!2pLF2pb)$JZrjaf!$B%NS2LU-"(d@lrRL!(jUJZ!*PZri`JE[qX-LlrRR!!-!' +4`#e)rj5alJ!JC@!JE[q88UlrP"!3)'lrV&+Zrk`3J#"Zrj45V[q8%"!JE[qX8Ul +rV"#!)'lrP&+Zrj33%#"Zrka5V[qX%)!`,[qD8flrQNT!C`$lhL"Zrj45V[q8%"! +JE[qX8UlrV"#!B0a@E[qD)'i!'0('-LlrRR!!-!%LE[qXNqi!)*!!LC(!,8MrP$! +ZrjTR*L"Z!"M4aV(Zrj4M'L"Zrj45V[q8%"!JE[qX8UlrV"#!8flrQQ$8,@i!)2q +8-#lrQP0ZrjT+3'F!qfBJE[q88UlrP"!3)'lrV&+Zrk`3J'$F)'lrV,(Zrl"R#(" +R28!!+'!8)'lrV*(Z!#!LEJ!F)SK#3$e!!#K-haci6PiJAdr[!#"1d!"`2!!q)!! +!H#!q-#!Q*L"i)$`p-c)!!$T$Efe`FQ9cFfP[EMT%C@0[EA"bCA0cD@pZ-$-`-5j +M!!!m!$iJ!!"i)$i`)#BQ)(JJ2$dc-J!!1N0[EA"bCA0cD@pZ1N4PBfpYF(*PFh0 +TEfi`-c!a,Q-!!%j@rqK)jami2Li!##KZ!!`f,J!+F!!`!cJ(FJ!b"*!!JA)"X)& +[!!'d286rk$e$rqT5E[rS-#lrk,"Z!!TN(()!-J$5M#""%"!d"h)!-J,5M#""%K# +`!@3#B0C6E[rU-#lrkV"(Baab!$)!dS`J34!30!Gb!$)#dS`J34)3X!&M!Q$B-#l +rk,"ZrqTP!Q"b1#lrk(B!0J3Y3rr`eS`N3a)5F!!3!6e!rq`k,[rUH!!i"5e%rr6 +BM#C%%"-8J"DZrqdJ,[r`d)$3VJ!3)%!`%$e!rq`L,[rddS(5VJ!3)%%b%#3Zrr$ +8JY5Z!"!J3M#")Llrp0+"dUi!%#""-)"J!2mb-#lrkV"(CJC54f!!r`3i"hB!0J3 +Y3rrieS`N3a)5F!!3!6e!rq`m,[rUHJ!k"Le&rrcDM#C&%"-8J"DZrqdJ,[rid)$ +3VJ!3)%!`%$e!rq`L,[rmdS(5VJ!3)%%b%#3ZrrM8JY5Z!"!J3M#")Llrr0+"dUi +!%#""-)!J,[rm)Llrq*!!J63Z!!Tb!$)#*#lrr&+#NS+`J@`H,bi!%#m-2`Br"%k +krPa2l`!--#lrkP*!2J"J!2jF,bi!%#m-2bi!#M!ZrqT53$m!6VVq0Nr[!!`pE[r +U!!TJ!2ii60mFq%jH6R919[rN51FI1#4Z!!Jk,J!-*Qi!$LKZ!")Y62r`)$`!!!% +NfF!Y62rd3N!m!$B'YN9N,(J!1!-Y42rif)SJ4"!3)Llrq0+Zrr!J34#!)#lrq0# +!d+lrp#"!-)054Q$1,blrp#mZrr!r"8*R6VVpXNr[!!a#3$`!0JDf4@35F!!`!p# +Zrr!J3%S3CJ454Q$SF!!Y32rN0JDf4@3!!+K+3fFb)#lrj(J!1!-Y42rmf+lrm#" +%&""b!")#*Llrr&1$eUlrm#"$&K"d!"3$NS,MU#e!rq3d"R)!-J,5V[r`)%%5%(! +!%!%q!#eZrq6rl(!!,8$rk$!(8dG+3'FJ)#lrk11))Llrl(3"`S+!J5e!rqJJ,[r +XiSJY32rXB0Jd"R)!-J,5JG+Zrr3J36)3F!!`!H@!d)XJ3##ZrqK54P+Zrq4J!2p +860mFq%jH6R8LAb"IS#8ZJ'S#3TG1d5*I%Km`(dS"C`5R4Q!#SdBZL%l4)Pm5(c! +I)&p+!@F%TNGJ!U*(6Y%!N!-+!$LJ!3!&!*!'!3!!!Bp*!!'153!!"'`"'h`i"$B +!N!-F!p)!&%4*9%`!$3#U38a59!!+!9*69&)J!!%"eP"cCA3!!!(Z4%a24`!#!IT +69&)M!!!#(P"*3e3!!!)UGQ9bF`!"!MCMD@0Z!!!#6NP$6di!!!*D5801)`!%!QC +'8N9'!!3#SN*14%`!!3,H399c-J!!![CKGA0d!!%$!QPME$J!!!-D3dp%43!(!bC +%394"!!!$KP0*@N8!!!15DfPZC!!!!jj'C@&d!!!$UJ3"rrmJ!*!)KIrr*!!!J!% +6ZY3!Krrr!*!$eJ#3"BErrb3!!5B"("1J!)$rr`!!!DF!N!@errmJ!!)&!*!&J[r +r!!!#G`#3"!2SrrmJ!!,9!*!&L2rr!!!$!3#3"!)!rrm!!!2C!*!%!J(rr`!!""F +!N!3%5`!S"!!5i!%6ZX!%Vrrr!!!6-!#3"!%(!$3J!"0Z!*!%"!(rrb!!"'-!N!@ +#rrmJ!!4c!*!&KIrr*!!%J`%6ZX`!Krrr)!!%N`#3"BErrb3!"+-"%lSS!)$rrb! +!",-!N!@"rrmJ!!6$!*!&L2rr)!!%d`#3"!)!rrmJ!!6P!*!%!J(rrb!!"28!N!3 +%Vrrr!!!8(!#3"!)!N!-J!!8&!*!%!J%!"b!!"48!N!@!rrm!!!8K!*!%!qMrrb! +!#9J!N!3%5`!3"!!4#J%F%U!""`!F)!!4)`#3"B$rr`!!#A3!N!3$k2rr!!!*Y!# +3"3,rrb!!%0S!N!8"rrmJ!"$i!*!%"%[rr`3!%6m"%lVm"%[rr`3!%Q8"'c1B!)$ +rr`!!&#`!N!@"rrm!!"8`!*!&J[rr!!!@0!#3"B2rr`!!&cJ!N!@%rrm!!"Jm!*! +&J2rr!!!C3!#3"B(rr`!!'8X!N!@#rrm!!"P@!*!&Jrrr!!!CB3#3"B6rr`!!'@` +!N!3"!2rr!!!CG`#3"B$rr`!!'CF!N!G!!!!Cc`#3"B6rr`!!'I-!N!G2!!!Cp`# +3"B6rr`!!'P)!N!8"!&iF!"j@!4Ym9!!#!'JF!*!!(`%6ZHJ!!`"b(!#X0!%F%NJ +!"!"m(!$cSJ%E-iJ!"3#'(!%P,`%5mj`!"J#3!"`"5%i"($M8!!$rrbJ"Ffd!N!8 +(rrm!!A2*!*!'rrmS!'!B!*!%rj!%!!&cL3#3"B$rr`!"FjF!N!Err`!"MMX!N!3 +'F(*[EA"d#-3JFh9QCQPi#dPZFf9bG#"%DA0V#d9iDA0dD@jR)&"A#dPZFf9bG#" +%DA0V#d9iDA0dD@jR)&"A$NphEQ9b)(*PFfpeFQ0P$NphEQ9b)(*PFfpeFQ0P#90 +PCfePER3J-3P6C@GYC@jd)$)*8f9RE@9ZG#!c#90PCfePER3J03P6C@GYC@jd)$B +*8f9RE@9ZG#!f8%3: Index: mac/tclMacResource.r ================================================================== --- mac/tclMacResource.r +++ mac/tclMacResource.r @@ -10,11 +10,11 @@ * Copyright (c) 1994-97 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacResource.r,v 1.4 1999/08/16 00:09:30 jingham Exp $ + * RCS: @(#) $Id: tclMacResource.r,v 1.4.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include #include @@ -38,24 +38,10 @@ # define MINOR_VERSION (TCL_MINOR_VERSION * 16) + TCL_RELEASE_SERIAL #else # define MINOR_VERSION TCL_MINOR_VERSION * 16 #endif -resource 'vers' (1) { - TCL_MAJOR_VERSION, MINOR_VERSION, - RELEASE_LEVEL, 0x00, verUS, - TCL_PATCH_LEVEL, - TCL_PATCH_LEVEL ", by Ray Johnson & Jim Ingham © Scriptics Inc." -}; - -resource 'vers' (2) { - TCL_MAJOR_VERSION, MINOR_VERSION, - RELEASE_LEVEL, 0x00, verUS, - TCL_PATCH_LEVEL, - "Simple Tcl Shell " TCL_PATCH_LEVEL " © 1996 - 1999" -}; - /* * The mechanisim below loads Tcl source into the resource fork of the * application. The example below creates a TEXT resource named * "Init" from the file "init.tcl". This allows applications to use @@ -81,10 +67,29 @@ * A good example of something you may want to set is: "TCL_LIBRARY=My * disk:etc." */ resource 'STR#' (128, "Tcl Environment Variables") { - { "SCHEDULE_NAME=Agent Controller Schedule", + { + /* + "SCHEDULE_NAME=Agent Controller Schedule", "SCHEDULE_PATH=Lozoya:System Folder:Tcl Lib:Tcl-Scheduler" + */ }; }; + +data 'alis' (1000, "Library Folder") { + $"0000 0000 00BA 0002 0001 012F 0000 0000" /* .....†...../.... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 985C FB00 4244 0000 0000" /* ......ò\š.BD.... */ + $"0002 1328 5375 7070 6F72 7420 4C69 6272" /* ...(Support Libr */ + $"6172 6965 7329 0000 0000 0000 0000 0000" /* aries).......... */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ + $"0000 0076 8504 B617 A796 003D 0027 025B" /* ...vÖ..ßñ.=.'.[ */ + $"01E4 0001 0001 0000 0000 0000 0000 0000" /* .”.............. */ + $"0000 0000 0000 0000 0001 2F00 0002 0015" /* ........../..... */ + $"2F3A 2853 7570 706F 7274 204C 6962 7261" /* /:(Support Libra */ + $"7269 6573 2900 FFFF 0000" /* ries)... */ +}; + DELETED mac/tclMacShLib.exp Index: mac/tclMacShLib.exp ================================================================== --- mac/tclMacShLib.exp +++ /dev/null @@ -1,1066 +0,0 @@ -AddrToName -AddrToStr -BuildAFPVolMountInfo -BumpDate -ChangeCreatorType -ChangeFDFlags -CheckObjectLock -CheckVolLock -ClearHasBeenInited -ClearHasCustomIcon -ClearIsInvisible -ClearIsStationery -ClearNameLocked -CloseResolver -ConfigureMemory -CopyDirectoryAccess -CopyFileMgrAttributes -CopyFork -CreateFileIDRef -DTCopyComment -DTGetIcon -DTOpen -DTSetComment -DeleteDirectory -DeleteDirectoryContents -DeleteFileIDRef -DetermineVRefNum -DirectoryCopy -EnumCache -##EnvStr -ExchangeFiles -FSMakeFSSpecCompat -FSReadNoCache -FSWriteNoCache -FSWriteVerify -FSpBumpDate -FSpCatMoveCompat -FSpChangeCreatorType -FSpChangeFDFlags -FSpCheckObjectLock -FSpClearHasBeenInited -FSpClearHasCustomIcon -FSpClearIsInvisible -FSpClearIsStationery -FSpClearNameLocked -FSpCopyDirectoryAccess -FSpCopyFile -FSpCopyFileMgrAttributes -FSpCreateCompat -FSpCreateFileIDRef -FSpCreateMinimum -FSpCreateResFileCompat -FSpDTCopyComment -FSpDTSetComment -FSpDeleteCompat -FSpDirCreateCompat -FSpDirectoryCopy -FSpExchangeFilesCompat -FSpFileCopy -FSpFilteredDirectoryCopy -FSpFindFolder -FSpGetDInfo -FSpGetDefaultDir -FSpGetDirAccess -FSpGetDirectoryID -FSpGetFInfoCompat -FSpGetFLockCompat -FSpGetFileLocation -FSpGetFileSize -FSpGetForeignPrivs -FSpGetFullPath -FSpGetIOACUser -FSpLocationFromFullPath -FSpLocationFromPath -FSpMoveRename -FSpMoveRenameCompat -FSpOpenAware -FSpOpenDFCompat -FSpOpenRFAware -FSpOpenRFCompat -FSpOpenResFileCompat -FSpPathFromLocation -FSpRenameCompat -FSpResolveFileIDRef -FSpRstFLockCompat -FSpSetDInfo -FSpSetDefaultDir -FSpSetDirAccess -FSpSetFInfoCompat -FSpSetFLockCompat -FSpSetForeignPrivs -FSpSetHasCustomIcon -FSpSetIsInvisible -FSpSetIsStationery -FSpSetNameLocked -FSpShare -FSpUnshare -FileCopy -FilteredDirectoryCopy -FindDrive -FlushFile -FreeAllMemory -GetCPanelFolder -GetCatInfoNoName -GetDInfo -GetDirItems -GetDirName -GetDirectoryID -GetDiskBlocks -GetDriverName -GetFileLocation -GetFileSize -GetFilenameFromPathname -GetForeignPrivs -GetFullPath -GetGlobalMouse -GetIOACUser -GetObjectLocation -GetParentID -GetSystemFolder -GetTempBuffer -GetTrapType -GetUGEntries -GetUGEntry -GetVolMountInfo -GetVolMountInfoSize -GetVolumeInfoNoName -HCopyFile -HCreateMinimum -HGetDirAccess -HGetLogInInfo -HGetVInfo -HGetVolParms -HInfo -HMapID -HMapName -HMoveRename -HMoveRenameCompat -HOpenAware -HOpenRFAware -hypotd -HSetDirAccess -InstallConsole -LocationFromFullPath -LockRange -MXInfo -NumToolboxTraps -OnLine -OpenOurRF -OpenResolver -PBXGetVolInfoSync -ReadCharsFromConsole -RemoveConsole -ResolveFileIDRef -RestoreDefault -RetrieveAFPVolMountInfo -SIOUXBigRect -SIOUXCantSaveAlert -SIOUXDoAboutBox -SIOUXDoContentClick -SIOUXDoEditClear -SIOUXDoEditCopy -SIOUXDoEditCut -SIOUXDoEditPaste -SIOUXDoEditSelectAll -SIOUXDoMenuChoice -SIOUXDoPageSetup -SIOUXDoPrintText -SIOUXDoSaveText -SIOUXDragRect -SIOUXDrawGrowBox -SIOUXHandleOneEvent -SIOUXIsAppWindow -SIOUXMyGrowWindow -SIOUXQuitting -SIOUXSetTitle -SIOUXSettings -SIOUXSetupMenus -SIOUXSetupTextWindow -SIOUXState -SIOUXTextWindow -SIOUXUpdateMenuItems -SIOUXUpdateScrollbar -SIOUXUpdateStatusLine -SIOUXUpdateWindow -SIOUXUseWaitNextEvent -SIOUXYesNoCancelAlert -SIOUXisinrange -SIOUXselstart -SearchFolderForDNRP -SetDInfo -SetDefault -SetForeignPrivs -SetHasCustomIcon -SetIsInvisible -SetIsStationery -SetNameLocked -Share -StrToAddr -TclAccess -TclAllocateFreeObjects -TclChdir -TclCleanupByteCode -TclCleanupCommand -TclCompileBreakCmd -TclCompileCatchCmd -TclCompileContinueCmd -TclCompileDollarVar -TclCompileExpr -TclCompileExprCmd -TclCompileForCmd -TclCompileForeachCmd -TclCompileIfCmd -TclCompileIncrCmd -TclCompileQuotes -TclCompileSetCmd -TclCompileString -TclCompileWhileCmd -TclCopyAndCollapse -TclCopyChannel -TclCreateAuxData -TclCreateExecEnv -TclDate_TclDates -TclDate_TclDatev -TclDateact -TclDatechar -TclDatechk -TclDatedebug -TclDatedef -TclDateerrflag -TclDateexca -TclDatelval -TclDatenerrs -TclDatepact -TclDateparse -TclDatepgo -TclDateps -TclDatepv -TclDater1 -TclDater2 -TclDates -TclDatestate -TclDatetmp -TclDatev -TclDateval -TclDeleteCompiledLocalVars -TclDeleteExecEnv -TclDeleteVars -TclDoGlob -TclEmitForwardJump -TclExecuteByteCode -TclExpandCodeArray -TclExpandJumpFixupArray -TclExprFloatError -TclFileAttrsCmd -TclFileCopyCmd -TclFileDeleteCmd -TclFileMakeDirsCmd -TclFileRenameCmd -TclFindElement -TclFindProc -TclFixupForwardJump -TclFormatInt -TclFreeCompileEnv -TclFreeJumpFixupArray -TclFreeObj -TclFreePackageInfo -TclGetCwd -TclGetDate -TclGetDefaultStdChannel -TclGetElementOfIndexedArray -TclGetEnv -TclGetExceptionRangeForPc -TclGetExtension -TclGetFrame -TclGetIndexedScalar -TclGetIntForIndex -TclGetLoadedPackages -TclGetLong -TclGetNamespaceForQualName -TclGetOpenMode -TclGetOriginalCommand -TclGetRegError -TclGetSrcInfoForPc -TclGetUserHome -TclGlobalInvoke -TclGuessPackageName -TclHasSockets -TclHideUnsafeCommands -TclInExit -TclIncrElementOfIndexedArray -TclIncrIndexedScalar -TclIncrVar2 -TclInitByteCodeObj -TclInitCompileEnv -TclInitJumpFixupArray -TclInitNamespaces -TclInterpInit -TclInvoke -TclInvokeObjectCommand -TclInvokeStringCommand -TclIsProc -TclLoadFile -TclLooksLikeInt -TclLookupVar -TclpAccess -TclMacCreateEnv -TclMacExitHandler -TclMacFOpenHack -TclMacInitExitToShell -TclMacInstallExitToShellPatch -TclMacOSErrorToPosixError -TclMacReadlink -TclMacRemoveTimer -TclMacStartTimer -TclpStat -TclMacTimerExpired -TclMatchFiles -TclNeedSpace -TclObjIndexForString -TclObjInterpProc -TclObjInvoke -TclObjInvokeGlobal -TclPlatformExit -TclPlatformInit -TclPreventAliasLoop -TclPrintByteCodeObj -TclPrintInstruction -TclPrintSource -TclRegComp -TclRegError -TclRegExec -TclRenameCommand -TclResetShadowedCmdRefs -TclServiceIdle -TclSetElementOfIndexedArray -TclSetEnv -TclSetIndexedScalar -TclSetupEnv -TclSockGetPort -TclStat -TclTeardownNamespace -TclTestChannelCmd -TclTestChannelEventCmd -TclUnsetEnv -TclUpdateReturnInfo -TclWordEnd -Tcl_AddErrorInfo -Tcl_AddObjErrorInfo -Tcl_AfterCmd -Tcl_Alloc -Tcl_AllowExceptions -Tcl_AppendAllObjTypes -Tcl_AppendElement -Tcl_AppendObjCmd -Tcl_AppendResult -Tcl_AppendStringsToObj -Tcl_AppendToObj -Tcl_ArrayObjCmd -Tcl_AsyncCreate -Tcl_AsyncDelete -Tcl_AsyncInvoke -Tcl_AsyncMark -Tcl_AsyncReady -Tcl_BackgroundError -Tcl_Backslash -Tcl_BeepObjCmd -Tcl_BinaryObjCmd -Tcl_BreakCmd -Tcl_CallWhenDeleted -Tcl_CancelIdleCall -Tcl_CaseObjCmd -Tcl_CatchObjCmd -Tcl_ClockObjCmd -Tcl_Close -Tcl_CommandComplete -Tcl_Concat -Tcl_ConcatObj -Tcl_ConcatObjCmd -Tcl_ContinueCmd -Tcl_ConvertCountedElement -Tcl_ConvertElement -Tcl_ConvertToType -Tcl_CreateAlias -Tcl_CreateAliasObj -Tcl_CreateChannel -Tcl_CreateChannelHandler -Tcl_CreateCloseHandler -Tcl_CreateCommand -Tcl_CreateEventSource -Tcl_CreateExitHandler -Tcl_CreateInterp -Tcl_CreateMathFunc -Tcl_CreateNamespace -Tcl_CreateObjCommand -Tcl_CreateSlave -Tcl_CreateTimerHandler -Tcl_CreateTrace -Tcl_DStringAppend -Tcl_DStringAppendElement -Tcl_DStringEndSublist -Tcl_DStringFree -Tcl_DStringGetResult -Tcl_DStringInit -Tcl_DStringResult -Tcl_DStringSetLength -Tcl_DStringStartSublist -Tcl_DbCkalloc -Tcl_DbCkfree -Tcl_DbCkrealloc -Tcl_DbDecrRefCount -Tcl_DbIsShared -Tcl_DbIncrRefCount -Tcl_DbNewBooleanObj -Tcl_DbNewDoubleObj -Tcl_DbNewListObj -Tcl_DbNewLongObj -Tcl_DbNewObj -Tcl_DbNewStringObj -Tcl_DeleteAssocData -Tcl_DeleteChannelHandler -Tcl_DeleteCloseHandler -Tcl_DeleteCommand -Tcl_DeleteCommandFromToken -Tcl_DeleteEventSource -Tcl_DeleteEvents -Tcl_DeleteExitHandler -Tcl_DeleteHashEntry -Tcl_DeleteHashTable -Tcl_DeleteInterp -Tcl_DeleteNamespace -Tcl_DeleteTimerHandler -Tcl_DeleteTrace -Tcl_DoOneEvent -Tcl_DoWhenIdle -Tcl_DontCallWhenDeleted -Tcl_DumpActiveMemory -Tcl_DuplicateObj -Tcl_EchoCmd -Tcl_Eof -Tcl_ErrnoId -Tcl_ErrnoMsg -Tcl_ErrorObjCmd -Tcl_Eval -Tcl_EvalFile -Tcl_EvalObj -Tcl_EvalObjCmd -Tcl_EventuallyFree -Tcl_ExecCmd -Tcl_Exit -Tcl_ExitObjCmd -Tcl_ExposeCommand -Tcl_ExprBoolean -Tcl_ExprBooleanObj -Tcl_ExprDouble -Tcl_ExprDoubleObj -Tcl_ExprLong -Tcl_ExprLongObj -Tcl_ExprObjCmd -Tcl_ExprString -Tcl_FconfigureCmd -Tcl_FcopyObjCmd -Tcl_FileEventCmd -Tcl_FileObjCmd -Tcl_Finalize -Tcl_FindCommand -Tcl_FindExecutable -Tcl_FindNamespace -Tcl_FindNamespaceVar -Tcl_FirstHashEntry -Tcl_Flush -Tcl_FlushObjCmd -Tcl_ForCmd -Tcl_ForeachObjCmd -Tcl_ForgetImport -Tcl_FormatCmd -Tcl_Free -Tcl_FreeResult -Tcl_GetAlias -Tcl_GetAliasObj -Tcl_GetAssocData -Tcl_GetBoolean -Tcl_GetBooleanFromObj -Tcl_GetChannel -Tcl_GetChannelBufferSize -Tcl_GetChannelHandle -Tcl_GetChannelInstanceData -Tcl_GetChannelMode -Tcl_GetChannelName -Tcl_GetChannelOption -Tcl_GetChannelType -Tcl_GetCommandFromObj -Tcl_GetCommandFullName -Tcl_GetCommandInfo -Tcl_GetCommandName -Tcl_GetCurrentNamespace -Tcl_GetDouble -Tcl_GetDoubleFromObj -Tcl_GetErrno -Tcl_GetGlobalNamespace -Tcl_GetHostName -Tcl_GetIndexFromObj -Tcl_GetInt -Tcl_GetIntFromObj -Tcl_GetInterpPath -Tcl_GetLongFromObj -Tcl_GetMaster -Tcl_GetOSTypeFromObj -Tcl_GetObjResult -Tcl_GetObjType -Tcl_GetPathType -Tcl_GetServiceMode -Tcl_GetSlave -Tcl_GetStdChannel -Tcl_GetStringFromObj -Tcl_GetStringResult -Tcl_GetVar -Tcl_GetVar2 -Tcl_GetVariableFullName -Tcl_Gets -Tcl_GetsObj -Tcl_GetsObjCmd -Tcl_GlobCmd -Tcl_GlobalEval -Tcl_GlobalEvalObj -Tcl_GlobalObjCmd -Tcl_HashStats -Tcl_HideCommand -Tcl_IfCmd -Tcl_Import -Tcl_IncrCmd -Tcl_InfoObjCmd -Tcl_Init -Tcl_InitHashTable -Tcl_InitMemory -Tcl_InputBlocked -Tcl_InputBuffered -Tcl_InterpDeleted -Tcl_InterpObjCmd -Tcl_IsSafe -Tcl_JoinObjCmd -Tcl_JoinPath -Tcl_LappendObjCmd -Tcl_LindexObjCmd -Tcl_LinkVar -Tcl_LinsertObjCmd -Tcl_ListObjAppendElement -Tcl_ListObjAppendList -Tcl_ListObjCmd -Tcl_ListObjGetElements -Tcl_ListObjIndex -Tcl_ListObjLength -Tcl_ListObjReplace -Tcl_LlengthObjCmd -Tcl_LoadCmd -Tcl_LrangeObjCmd -Tcl_LreplaceObjCmd -Tcl_LsCmd -Tcl_LsearchObjCmd -Tcl_LsortObjCmd -Tcl_MacConvertTextResource -Tcl_MacEvalResource -Tcl_MacFindResource -Tcl_MacSetEventProc -Tcl_MacSourceObjCmd -Tcl_Main -Tcl_MakeSafe -Tcl_MakeTcpClientChannel -Tcl_Merge -Tcl_NamespaceObjCmd -Tcl_NewBooleanObj -Tcl_NewDoubleObj -Tcl_NewIntObj -Tcl_NewListObj -Tcl_NewLongObj -Tcl_NewOSTypeObj -Tcl_NewObj -Tcl_NewStringObj -Tcl_NextHashEntry -Tcl_NotifyChannel -Tcl_ObjGetVar2 -Tcl_ObjSetVar2 -Tcl_OpenCmd -Tcl_OpenFileChannel -Tcl_OpenTcpClient -Tcl_OpenTcpServer -Tcl_PackageCmd -Tcl_ParseVar -Tcl_PidObjCmd -Tcl_PkgProvide -Tcl_PkgRequire -Tcl_PopCallFrame -Tcl_PosixError -Tcl_Preserve -Tcl_PrintDouble -Tcl_ProcObjCmd -Tcl_PushCallFrame -Tcl_PutEnv -Tcl_PutsObjCmd -Tcl_PwdCmd -Tcl_QueueEvent -Tcl_Read -Tcl_ReadObjCmd -Tcl_Realloc -Tcl_RecordAndEval -Tcl_RegExpCompile -Tcl_RegExpExec -Tcl_RegExpMatch -Tcl_RegExpRange -Tcl_RegexpCmd -Tcl_RegisterChannel -Tcl_RegisterObjType -Tcl_RegsubCmd -Tcl_Release -Tcl_RenameObjCmd -Tcl_ResetResult -Tcl_ResourceObjCmd -Tcl_ReturnObjCmd -Tcl_ScanCmd -Tcl_ScanCountedElement -Tcl_ScanElement -Tcl_Seek -Tcl_SeekCmd -Tcl_ServiceAll -Tcl_ServiceEvent -Tcl_SetAssocData -Tcl_SetBooleanObj -Tcl_SetChannelBufferSize -Tcl_SetChannelOption -Tcl_SetCmd -Tcl_SetCommandInfo -Tcl_SetDoubleObj -Tcl_SetErrno -Tcl_SetErrorCode -Tcl_SetIntObj -Tcl_SetListObj -Tcl_SetLongObj -Tcl_SetMaxBlockTime -Tcl_SetOSTypeObj -Tcl_SetObjErrorCode -Tcl_SetObjLength -Tcl_SetObjResult -Tcl_SetPanicProc -Tcl_SetRecursionLimit -Tcl_SetResult -Tcl_SetServiceMode -Tcl_SetStdChannel -Tcl_SetStringObj -Tcl_SetTimer -Tcl_SetVar -Tcl_SetVar2 -Tcl_SignalId -Tcl_SignalMsg -Tcl_Sleep -Tcl_SocketCmd -Tcl_SourceObjCmd -Tcl_SourceRCFile -Tcl_SplitList -Tcl_SplitPath -Tcl_StaticPackage -Tcl_StringMatch -Tcl_StringObjCmd -Tcl_SubstCmd -Tcl_SwitchObjCmd -Tcl_Tell -Tcl_TellCmd -Tcl_TimeObjCmd -Tcl_TraceCmd -Tcl_TraceVar -Tcl_TraceVar2 -Tcl_TranslateFileName -Tcl_Ungets -Tcl_UnlinkVar -Tcl_UnregisterChannel -Tcl_UnsetObjCmd -Tcl_UnsetVar -Tcl_UnsetVar2 -Tcl_UntraceVar -Tcl_UntraceVar2 -Tcl_UpVar -Tcl_UpVar2 -Tcl_UpdateCmd -Tcl_UpdateLinkedVar -Tcl_UplevelObjCmd -Tcl_UpvarObjCmd -Tcl_ValidateAllMemory -Tcl_VarEval -Tcl_VarTraceInfo -Tcl_VarTraceInfo2 -Tcl_VariableObjCmd -Tcl_VwaitCmd -Tcl_WaitForEvent -Tcl_WaitPid -Tcl_WhileCmd -Tcl_Write -Tcl_WrongNumArgs -TclpAlloc -TclpCopyDirectory -TclpCopyFile -TclpCreateDirectory -TclpDeleteFile -TclpFree -TclpGetClicks -TclpGetDate -TclpGetSeconds -TclpGetTime -TclpGetTimeZone -TclpListVolumes -TclpRealloc -TclpRemoveDirectory -TclpRenameFile -TrapExists -TruncPString -UnlockRange -UnmountAndEject -Unshare -VolumeMount -WriteCharsToConsole -XGetVInfo -_Ctype -_Stderr -_Stoul -abort -abs -acosf -appMemory -asctime -asinf -atan -atan2 -atan2_d_dd -atan2_d_pdpd -atan2_r_prpr -atan2_r_rr -atan2f -atan_d_d -atan_d_pd -atan_r_pr -atan_r_r -atanf -atexit -atof -atoi -atol -bsearch -builtinFuncTable -calloc -ccommand -ceilf -chdir -clearerr -clock -close -closeUPP -completeUPP -cos -cos_d_d -cos_d_pd -cos_r_pr -cos_r_r -cosf -coshf -creat -ctime -cuserid -difftime -div -environ -errno -exec -exit -exp -exp_d_d -exp_d_pd -exp_r_pr -exp_r_r -expf -fabsf -fclose -fcntl -fdopen -feof -ferror -fflush -fgetc -fgetpos -fgets -fileno -floorf -fmodf -fopen -fprintf -fputc -fputs -fread -free -freopen -frexpf -fscanf -fseek -fsetpos -fstat -ftell -fwrite -getStdChannelsProc -getc -getchar -getcwd -getenv -getlogin -gets -gmtime -instructionTable -isalnum -isalpha -isatty -iscntrl -isdigit -isgraph -islower -isprint -ispunct -isspace -isupper -isxdigit -labs -ldexpf -ldiv -localeconv -localtime -log -log10 -log10_d_d -log10_d_pd -log10f -log_d_d -log_d_pd -logf -longjmp -lseek -malloc -mblen -mbstowcs -mbtowc -memchr -memcmp -memcpy -memmove -memset -mkdir -mktime -open -panic -panicProc -perror -pow -power_d_dd -powf -printf -putc -putchar -puts -qsort -raise -rand -read -realloc -remove -rename -resultUPP -rewind -rmdir -scanf -setbuf -setlocale -setvbuf -signal -sin -sin_d_d -sin_d_pd -sin_r_pr -sin_r_r -sinf -sinhf -sleep -sprintf -sqrt -sqrt_d_d -sqrt_d_pd -sqrt_r_pr -sqrt_r_r -sqrtf -srand -sscanf -stat -strcasecmp -strcat -strchr -strcmp -strcoll -strcpy -strcspn -strerror -strftime -strlen -strncasecmp -strncat -strncmp -strncpy -strpbrk -strrchr -strspn -strstr -strtod -strtok -strtol -strtoul -strxfrm -system -systemMemory -tanf -tanhf -tclBooleanType -tclByteCodeType -tclCmdNameType -tclDoubleType -tclDummyLinkVarPtr -tclExecutableName -tclFreeObjList -tclIndexType -tclIntType -tclListType -tclMemDumpFileName -tclNsNameType -tclPlatform -tclStringType -tclTraceCompile -tclTraceExec -tclTypeTable -tcl_MathInProgress -tclpFileAttrProcs -tclpFileAttrStrings -tell -time -tmpfile -tmpnam -tolower -toupper -ttyname -uname -ungetc -unlink -utime -utimes -vfprintf -vprintf -vsprintf -wcstombs -wctob -wctomb -write -#DTGetAPPL -#DTGetComment -#FSpDTGetAPPL -#FSpDTGetComment -#TclMacInitializeFragment -#TclMacTerminateFragment -#_Aldata -#_Assert -#_Atcount -#_Atfuns -#_Clocale -#_Closreg -#_Costate -#_Daysto -#_Dbl -#_Defloc -#_Environ -#_Environ1 -#_Fgpos -#_Files -#_Flt -#_Fopen -#_Foprep -#_Fread -#_Freeloc -#_Frprep -#_Fspos -#_Fwprep -#_Fwrite -#_Genld -#_Gentime -#_Getdst -#_Getfld -#_Getfloat -#_Getint -#_Getloc -#_Getmem -#_Getstr -#_Gettime -#_Getzone -#_Isdst -#_Ldbl -#_Ldtob -#_Litob -#_Locale -#_Locsum -#_Loctab -#_Locterm -#_Locvar -#_MWERKS_Atcount -#_MWERKS_Atfuns -#_Makeloc -#_Makestab -#_Makewct -#_Mbcurmax -#_Mbstate -#_Mbtowc -#_Nnl -#_PJP_C_Copyright -#_Printf -#_Putfld -#_Putstr -#_Puttxt -#_Randseed -#_Readloc -#_Scanf -#_Setloc -#_Skip -#_Stdin -#_Stdout -#_Stod -#_Stof -#_Stoflt -#_Stold -#_Strerror -#_Strftime -#_Strxfrm -#_Times -#_Tolower -#_Toupper -#_Ttotm -#_WCostate -#_Wcstate -#_Wctob -#_Wctomb -#_Wctrans -#_Wctype -#__CheckForSystem7 -#__RemoveConsoleHandler__ -#__aborting -#__ctopstring -#__cvt_fp2unsigned -#__getcreator -#__gettype -#__initialize -#__myraise -#__ptmf_null -#__ptr_glue -#__system7present -#__terminate -#__ttyname -#_atexit -#_exit -#_fcreator -#_ftype Index: mac/tclMacSock.c ================================================================== --- mac/tclMacSock.c +++ mac/tclMacSock.c @@ -6,11 +6,11 @@ * Copyright (c) 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacSock.c,v 1.7 2000/04/24 06:43:29 jingham Exp $ + * RCS: @(#) $Id: tclMacSock.c,v 1.7.2.2 2001/04/04 21:22:19 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include "tclMacInt.h" @@ -73,11 +73,11 @@ * described below. */ int checkMask; /* OR'ed combination of TCL_READABLE and * TCL_WRITABLE as set by an asynchronous * event handler. */ int watchMask; /* OR'ed combination of TCL_READABLE and - * TCL_WRITABLE as set by Tcl_WatchFile. */ + * TCL_WRITABLE as set by TcpWatch. */ Tcl_TcpAcceptProc *acceptProc; /* Proc to call on accept. */ ClientData acceptProcData; /* The data for the accept proc. */ wdsEntry dataSegment[2]; /* List of buffers to be written async. */ rdsEntry rdsarray[5+1]; /* Array used when cleaning out recieve * buffers on a closing socket. */ @@ -194,11 +194,11 @@ * based IO: */ static Tcl_ChannelType tcpChannelType = { "tcp", /* Type name. */ - TcpBlockMode, /* Set blocking or + (Tcl_ChannelTypeVersion)TcpBlockMode, /* Set blocking or * non-blocking mode.*/ TcpClose, /* Close proc. */ TcpInput, /* Input proc. */ TcpOutput, /* Output proc. */ NULL, /* Seek proc. */ Index: mac/tclMacThrd.c ================================================================== --- mac/tclMacThrd.c +++ mac/tclMacThrd.c @@ -122,11 +122,11 @@ } #if TARGET_CPU_68K && TARGET_RT_MAC_CFM { ThreadEntryProcPtr entryProc; - entryProc = NewThreadEntryProc(proc); + entryProc = NewThreadEntryUPP(proc); NewThread(kCooperativeThread, entryProc, (void *) clientData, stackSize, kCreateIfNeeded, NULL, (ThreadID *) idPtr); } #else Index: mac/tclMacUnix.c ================================================================== --- mac/tclMacUnix.c +++ mac/tclMacUnix.c @@ -10,11 +10,11 @@ * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacUnix.c,v 1.3 1999/04/16 00:47:22 stanton Exp $ + * RCS: @(#) $Id: tclMacUnix.c,v 1.3.12.1 2001/04/04 21:22:19 hobbs Exp $ */ #include #include #include @@ -204,11 +204,11 @@ return TCL_ERROR; } resultObjPtr = Tcl_GetObjResult(interp); Tcl_IncrRefCount(resultObjPtr); - if (Tcl_ListObjGetElements(interp, resultObjPtr, &objc, &objv) != TCL_OK) { + if (Tcl_ListObjGetElements(interp, resultObjPtr, &objc, (Tcl_Obj ***)&objv) != TCL_OK) { Tcl_DecrRefCount(resultObjPtr); return TCL_ERROR; } Tcl_ResetResult(interp); Index: mac/tclMacUtil.c ================================================================== --- mac/tclMacUtil.c +++ mac/tclMacUtil.c @@ -8,11 +8,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacUtil.c,v 1.4 2000/04/17 01:52:56 jingham Exp $ + * RCS: @(#) $Id: tclMacUtil.c,v 1.4.2.1 2001/04/04 21:22:19 hobbs Exp $ */ #include "tcl.h" #include "tclInt.h" #include "tclMacInt.h" @@ -51,11 +51,11 @@ * None. * *---------------------------------------------------------------------- */ -#if defined(THINK_C) || defined(__MWERKS__) +#if defined(THINK_C) double hypotd(double x, double y); double hypotd( double x, /* X value */ @@ -418,11 +418,11 @@ } /* *---------------------------------------------------------------------- * - * GetGlobalMouse -- + * GetGlobalMouseTcl -- * * This procedure obtains the current mouse position in global * coordinates. * * Results: @@ -433,13 +433,31 @@ * *---------------------------------------------------------------------- */ void -GetGlobalMouse( +GetGlobalMouseTcl( Point *mouse) /* Mouse position. */ { EventRecord event; OSEventAvail(0, &event); *mouse = event.where; } + +pascal OSErr FSpGetDirectoryIDTcl (CONST FSSpec * spec, + long * theDirID, Boolean * isDirectory) +{ + return(FSpGetDirectoryID(spec, theDirID, isDirectory)); +} + +pascal short FSpOpenResFileCompatTcl (CONST FSSpec * spec, SignedByte permission) +{ + return(FSpOpenResFileCompat(spec,permission)); +} + +pascal void FSpCreateResFileCompatTcl ( + CONST FSSpec * spec, OSType creator, + OSType fileType, ScriptCode scriptTag) +{ + FSpCreateResFileCompat (spec,creator,fileType,scriptTag); +} ADDED mac/tcltkMacBuildSupport.sea.hqx Index: mac/tcltkMacBuildSupport.sea.hqx ================================================================== --- /dev/null +++ mac/tcltkMacBuildSupport.sea.hqx @@ -0,0 +1,3572 @@ +(This file must be converted with BinHex 4.0) +:'(4ME(4V6@&M3R9TE'46GA"`Eh*d,R0PB3""8&"-BA9cG#%!!!%41J!"NlA2`e0 +dG@CQ5A3J+'-T-6Nj0bda16Ni)%&XB@4ND@iJ8hPcG'9YFb`J5@jM,L`JD(4dF$S +[,hH3!bjKE'&NC'PZFhPc,Q0[E5p6G(9QCNPd,`d+'J!&%!!"%6S!N!0b!!%!N!0 +bqh30TD95CA0PFRCPC+@P!+@3"!%!!$d!3,5KD[qh'$r`!*!0$4A`!*!$d`!+5%X +!!4"R!"08Bf`[9'XJ4QpXC'9b!!!$X!#I!$X#13)b!F$rN!3"$[rm!&R,3!!!J!# +3"!-%L+@3"!%!!%3!3,BJ!3+h'#Jr!*!$FJ!!J,B!N!0b!"3)93!!!6X!##TV!!" +rH`!%+&"bEcBJ3R9TE'3J8h9`F'pbG#N!!,16!)8!,`+M!MB"`!&!!)%$$[rirr$ +,4!!!J!#3"k@3"!%!!%%!%,B4*!Dh'"8A!*!$d`!!&&S!N!26!"'M)3!!0"-!!"( +%!*!%$`"#G@PXC'PZCb"0B@08Bfa8D`!"-BY849K83eG*43!!rj!%!*!+J!#3#3' +D!*!$k!#3"!m!3X(8T5mNI+IfD!VL20iHrJ63rlBYUTaK0b4ST-icL,Cb*Xq!EJ2 +C-5d'f19IHNm$-YRY0eq3!%"q"%&CZ2+(kI`j-M2a0rFX+fVZ6Jp8(%kTFX0[d6, +bV3PeU99AFF5L@%DHPXYFXTF3&-%hMI224pj!)aj)-@8i0FTpL$lbdS@A"mR@QR' +,NHAmcR,DY4a)"i11#"qhl-UDq9RcX5CX"aQU)q**0k1Db%Z2%C1JrFYi)[AAHX& +IcTi*J'$-hfA9q9deRFQ0Q1c+8YjdbU-ri-T%GGGcJ+I!VpZfY!Z",jVEEHEAZK* +N,J"#`G6!fa05l1!E-BbSe2lUk3B$6KYQ"'DMi6%EG,E+cilQFDAiMpc46Mr'SB) +'afT[c,K8TFI4eHqikm!lLK8(qI6l4iE!qNf8ULJ3N[VkeGUIfM"+-+BFNS!&9UF +*(#kBUQVGedj!j%XiSMFH(0HflRj!QC6b!FVSU(HGXp3A113hV(5#KEpF`M"K[5A +ZC0PeE&(2aS8)0"XKAXMa5m%T[T!!XJ$$qC!!P8`S4#B*,B3B$XAcY,f$*IQ0f!- +SGT!!IHTIk3qblNmM-l8ZkLh6d&Zf-)'`J@)dhAjC$TB'GQ1D61%RF`E$TdjMX6I +lq[5YdI$di+pRPHpB0jRb-&YF4E)de#Xj*+S5hDX4`2FZ8Z1)m'(2hDSIl66$mYf +*P`0AFJS*EF5KrI(&,L"-LcQS"@"aL9Zd88QSpK9ViK3K,aEq*ji@0TB-426D@A- +YM*JQ%Pb)X@2&k5EdS[rIfPF)N!#ILDjq"cVM1kN"5!JX(X(["I$fL2V`&Z4YM2I +bR&aZj8)3rF3pPpQ-@db!Z9dC&Chd$TQ!KJ"%["4F6,dA+LMqKRHQ&d&l0ILdjJS +J0mbNE+(BDfCYlX&*#p%1"L"%1c3#UVBffH&bPe0c6K6%pJYb%dRUN!#lN!#P9Kc +k91b*BZJUTK(!!8T%%mdlTqm)"b%e9C,2c1K@a)a88V5UEj!!r!3"VPphmKbl-`f +#!"fXk,j6AL'TrS#rNb*8&8bK9piVj+4d6!V6NdhH+-X3@@#imD8HaN)($HU*E3# +XSZQhi2&eek$#b)`IFp"EPdKkDk@6FLJjQ+T2SalaY(+GrLDe$JGKlqe&5bdeb)q +Qij&G"8"a,6M1FX@J`!*0(18Z[aG+(m'(J[[rf++p`4p(9'TEI$iNJrim04U66(% +QB-q`$T!!DVYJ3!!8bXCPCAYGlGH!8C@+S[Cqp$eK8r+bG8AbZR(h'I34[aq,lpa +G$'+[ZUT1HY"BS-kV)3T5mpIYl059ALR,'I[S&frTK-b,%8pRVCHQMX0EhEZU)qY +%Me8#Cm2Nh$QLp'I4pKiECL4j#&i6!$VJh3H5'lJMPD-Abda$+kLH"`r`$#+&iRX +hA2c1!'HR",prm)+!Qa8Cdd-cJ%+A6!CKGFZ!+PTMQf@GD0aTU+SM%hmYVB'F"S$ +![I'&prQ%TfjdZ(*BYE9M-'QXDpS"YhR`iK4dl9eVZJr20TF8rI*#Hf*!NTLXl6- +%KiiHGccR&)[(+X$q+!ir@VZaDcH%JfmY(LZfNI*'pJ#6`I!+HjJejMVj(MXEcck +)fppEYF1+ra0*)'9#RlKU1cmGP@-+5)9Qb!lqEm(99$hmlc&ZH@XpfL%iJ5`[2DI +N#E`p@d8)T6Q6I(dGp@0*NCGXqFC-fq89#-rfmTUjNdYkZ*[8N!$@@fcK`&lG0,Y +TGfZ-@0[L*1jK5,6[UMI"VVAL6f&HfL%SjkdrN9+DC"9jc98c(b5J,9(XYS*ifFV +UQDVk,-J-YDJ[kHYSRd6)MaKH$9%NJ%HFZP,TBHN4qZ,Lq0ee$!jiSB'Cd*9Dl8k +`*K9Y9YY3p6jr-b%N@%jfBZUiC)X1E$%1ISPQbC`IFfUG9qb##$QkCPH9B&Zd9P[ +c3fTG53ZPDhXM(1-1%mGaEP$Dim,#*%9SHm2Z-a'V'hj#@BD`J"&BA3'06QT+mbY +IEhjdb#2mqHGckiHjrE!+!'V6IQXafZ0FF(jp-G8FMF4qpqGbPeAJ+SaFI0KFIkq +JX6FX*LdS)1dM!TV[U"F1R9DjHI43YGDr6F&"&K8DC3l4RHLE[@G")A5hb&T*T54 +NQYM!HhG5J$ILGZckEq65GrQr"d[brUZ#-8R8e"jeAQ#h$Zme$'N1XBV2+C`ImC6 +XT-+&B+-%cJ1-4i!BZIY[I*R*(LVr5VaZda4TRBePAJKcSJ*-#Upj6S0l5U@SemC +a%BH!,(%6k&Aj"@I*,d&)2h+I0"Diq9!0-4@66V[NE6B+"lR!i-'5NFUAI@GFG1r +00-[JSN1`@AAe8M$`6G3QD&eQ18*Ee`R$YbZ@D'rlcb5(8d&D@`+8KR(Yp*[j6kL +c*#R-#mGZ6Y32b@!6MeN!9#G#bLqU@4B$$rb9Hi(++hY,A5NGhjH46"GXFQXd2Ca +UP*T$DqIkd$HP),)kAB*V3MT8kI&L0YbE0DeA"ZMP1S@FYBH@&V'pUD`L$#5YbC9 +kXl[IE""4$ejh0pliViqjq1Pk3&!@e9p9qZK1Q1m(H0%)36)+YAIaTpXRef)6h+A +4PQ6R`1[XS99[Dmdmqm%5jNXJIlHaPqejXEchT@2KGM0")LFcTUD,qi"mh%BKLcB +2!"!Vkpa,P9cQS2SkeL0eC2a*a0("4%*,k5VJ,lBZ++BHQ+CM66[Df%A'$E*@H+H +K&rNZ$hIk8@6UicFj"Mr1rp*M&6NI!'Nfr#BB&0(F&%!+jrqN1"EH-Vm'VKR[,HN +F*q4+T`iS&dM4U4(ZU2'ZE"-+hj0RF``0Br210D4"Nq'0SJ*HIjU2![$m!PHrcj' +ehp(r15dIS%EIj,2D`q$N-@%CVMmM2"j@ajrQmGSK#ihfC5&C&[D,cEXSMi$NL#@ +[EkJMX[(SHki#Q(XcTE36NaNPf!i'm61(j!GNl'B!e@GYrIEHcVDj6h'Z1S@,Bd# +qeAIp1`SfrGFklASa"E)eM`06Q0J$VQ%2e+,ZH1Sh&G`T#e"M1BJKH[95Bb9M[I` +Zb6fb"5G6T0SUdi5LMYPAQ[cAAqN+X-flm5EQ@V$Pl)L3!'iqlYFka3ed+b6Thlj ++dkL"F'-#!UE&ma2ICKq2E)r+,BB*p+rLhi1eMYlfY6DS!c#J!)MeJ$0ibrrYK(E +#Dj!!Rd%lEip1@PEZ,pLRV9pH0[L[9aZTB)Qj!pP-KR4Cq-L-U*bBa86D8hDSk"E +HbAk*+*1X!9M35AA1-8b*8[K[a4i%$I5F1(J`-#`pE0H40+18B&cLP26G9Qm[*0( +[p4CiRmA$XHdk-P!Hl0F#&3))9JFDZK6RDeY080&,**!!@hMXi9QP0Hm%)S@LYc" +Yfd(Qq!Q&ZjPXEbV6kN[ml[j45Q8YA6#mU(1Ip`Q#LMEa50M4E["ZiYlqrE2Lpf, +*i"f"h@8L`q4DmA%00+kYR4k5[+R3fH2#d3-R)bZ"TRcaXe3SbJ@N(*d4!hCadLM +rhBU1Tk[k+RVhLI'q*9C$"R!-BfTKZX!b!4L!VB+FIjd,S(-kH+fNHmMNjT`@bMd +Hrb$jhGik3,EBCVU,$aLbhT1'fmYbB9dH%4*1T,qQb0PDrkS55R!#!$CmaE6+lU` +`TQD65%D8BS99CrNVVr[HHME-JGiEf+(Yc@m6"m60EUJ0+&f#`A%#fa+cJlG6XHh +#Nqp20l"dC,prArRre5k08TBC,+(PU'6jNDXrX%r1a`2HaI)jiarlS[kXb5pK')m +YfR%A120J`K`SNM-'m$L'#4MYYk%k&I5c50XbY2!'L,YJM-5aRRk1[mmYmmC%(aS +lD$&ADT!!j!B"iI8M'6%"$61B*"T$F9S-FJIj0F-G%Ijc3$4"j#VP(p*aJK-%KMi +1*$L[,lI(556"+10"bC%2eAViDM#CM"kk"j!!c1%(PV0'pppS`d+1"hdkLcLN,5j +0pRIjr3e&4i-2VlR-N!"aLdU''dh$XS4alQ%c-*Z6Z!T%jbJ9V@r9X!4&fH)l"D' +Tj46)`XjSJZM-IPI6EQ@KE6[p8+I+5qjL8m0I2"RNZaSlSZcdfSk@ACS9l0qRP6[ +*(+SlG`2-3MM6e#9jKMMBm(30*9c63HG#r@(5-TX+hVD3!)CiUakJe[GrNRfNhdT +aGLCUJi,FGXYFpRN6m[)km,0df25828LR$fm)k4-q8AYdp-ri9,"5T[IKX10I`Yq +Qm3BXHME@Qj&R-"Q$pk6b8Ui#1pV'4DTDh0kBepFQp"NPeh0jaKaiSDB$#8'ACJj +fAAe'M&-`*bpiQ@lS-YL$C9T$K`Y`Z5FYHZ"E[k"bQSFSQjJ%VVe&*D$NBS"$-EK +kAD06hm-frHXU)bi`h-A-q6q6Kd#!&%pfQIh[818X)SKeCk-1QD1aFP)qh1[SaHH +mR0TIF-0,2[PMi+%),ec*!!b"N!"*@r5#m)J&SK)Ge06bA08ZAl!9b3+Qjp0dDP, +ACqKDCMb-`19#qqjm[$R!348+@$Bi4&K%iqMr2e33!jB(-82hNF3YAkh0f!aA#6k +YL&pK!CX+l152k@HBKHTm!9A81D'bAe#!+4'Vh9aHKXkZeZ4YV(J6JkS9+U"rHlP +Z1B33i`P$f!d0@'j1Iq"rP$Fi@[L(#`hQfaZ$mAZNkFDF(e$dH9+cJU@'&1k'(Dc +fm(5bD#9mdmKR1YApiC956"290Z8AHE0R0NT5-BI6mDVYBQ25B2qL'*`pJRNPkqb +-I52F,*%2'!16ib"YG-ld%Lp5!("b[*S6p(a3a3-CB*IY4(DFrK$Q564cNQ5+9([ +JUN99FFfQ6rVr"[VB$j)CKfhiaHE6m1*YCZYr,!YFSMI%mr5k4NQK49TmYQV-jeR ++0$$E([FmCY@M,l1jP5KKE+%k(KiC@ThaUqJ@L-I,ed*%0CCQ+"aaa6I#NqqlLR, +U*4pk3'HAN`UfE![rJ`BK`4rLeCT22hBfTfNNaE8fF+1#hpR&ZRL,)RBC`@QSS51 +kS64p!A"e)1pBJ30-ffj3e#&p(9d%2DT4VqE6b@SKc4B9*AFb4Gm!F652(69rd*j +-q*!!RS-KGh,@`@+iaL&1X0d$"dJX0!Lm*X&XV[&aQha5'aB95SlH3p)AUPTcaIm +ei-9bNFk@JKiSkjFq0XQiJFibrKcU5VXUQ!`jGdJ11""DQ'P!cBjM8cHj-Zh6V%5 +8JAP4N6(Q$d*k@bH,3V6efdpH&C)UeIr0'$[G*8"Q"Kap['ZUTZ0B,B'6GfElkNU +GL-l0`@-Y5LXGl"VdbEh,0ajhpqkKB4f!E3`4e1eJ2bVHfQ4#XlHmracc`9MeEdZ +%MXk*GJZ$F*m6lbdjZ(QDUamBfUSF'9[IR[&#Hb5,)fb8i1X,4ElH*Ra2iamF +ClTZ(['5QZk[DG5'1m[L6SSSA[5Gb21lGH&+T@Pdm(k3`NZcM0+pq&)mrS)!!Hb# +h+Fh*Y#pm1H'U2-K54!$*HbbFbaLQjrJPk@CfdbG'S%eVD1#2[FeV40"!eV@p+YF +khdN1[6+',B4(+r&G)2lc6,#IdFadM#I`TTN"NqM$"KHl3'f5,6C`Q5,QCHiaAYJ +chh0`LEcP6#ZZ)A-*$cK$I(5iT%d1Y[U8LYh9$f+V'TN26Qp),UMARShlbd`*Y'3 +8&mD,M@I+KY2QVj[ViR9A#4TEY!hmbN)#$if@$c9EjmR0cEST&M'%2,jAQZmFbiN +j++SM%#dJ&QacLc!h@QbGB"%'M1X3Ibl`(93&UD5EU"Rc$1Q3!"*!kbG2dSV$4+0 +,2UQBN`!25-U@*Fh`mi*aPS1IDN"2@JZZk`cPfAYkSZMFI$`$i'L0U$9ZSXUB4X+ +V%m%6YdHpP*Y6h-VcId!Pr4R-f$0q)MA)lpK`CpNaNUjdXQ#Rq'NG`dpaVk(D3k# +dRE845q@XVEr+E4Jm9Sr24d`5ej+cB*)5Id2cVF+mQmqHmEa5[VjcZpVZ,2TG)j8 +mI!FHbR9rj0(8'MVQ*2BKTc3QDjAS+L*hT6MB&!cNj[8[+(LGI&E$4`+SMr"LREf +M*Qr!cFG6A!KpXkc,`0bA&&*(KDj-N!!GT@1%iM51G'+8`MP%HAC!m@5,aA9-al6 +jJT5[Di%MH6B*[QMG%L!l)![)e*J3k0j,l1#[-i@TJ6+e81-N8E1A9IU3!$0F32p +)Y4H0qrHIjQ5)1f$[`T!!5dij(q`b*2B@)la+*j+,mEb`Nm#c1N,kr9rl`P2lhXc +6U[Llqq6L3HJ[&eTFdEmlcbXh5bq*,rUfN!!ZZl#&$ZFXIZ3[I9#,'C@leLBh""h +549RKrhlB8(NGV6j)-h'ECLd(H'+Z@349V#d2TYL6Kq"S(L-r4qV5B'c9KMBaZIe +cF(#-9HRZj*p@5Na-'R$@e-(9ijPV*Lf+XNK*b)CQadGr8(`N$E8+5TD5Q&$b8U1 +J,3JN64I#B)83&&)mD"dG)5$)5lQeLh*I`F6GGpkl-jJH$aQMPF"dLT1eCJ1eY*c +(pNYf9qTPH%)*pGI8!+@3"!%!!$m!%,BJ"!bh'"3c!!!"1`!!'48!N!26!!qHIJ! +!"a`!!!1I!*!%$`"$9b"3FQmf)'0SB@jRCA-!!IAj9%9B9%0A588!!2q3"!#3#S! +!N!N"QJ#3!kX!N!32!%,"e-qA86ACe@bPCNZbK1CcE,LC2i3rm@k''#TXf-IG,d1 +UYIT)3r1I0@,jHqY4mp)`CR1@#)c)qb9TmBf!*Y-FA5JhlBXVIaQS2`Hj&KME4$( +"K(I12hVhfecX"MLL6'C5pi%`iZpE-3FfL##H$DaHB2qi-8h!lcBP*VFH4-2'qAa +[#p!0MqFC+8#H$fdAc`))UKbMQA[Hm`%r&4Hr0!)R%id`!#c[al5(!%,"e4#Fe3G +e%hK30hE['[YC4A2R3+G4'(0A9@Z1JKFUE90FD0aJCieK5RSh4Y,A)lC`G6@Tm$% +5k*MqG#%[B%Dl40bV'*K&Y"8r%6q0Z$`i(X*TF(qa)J*U65bRF2iC3#K-Nme(1+) +ECI@YESB6H3j%%i&9h!LQa+KiGP[99%bTZC!!1Sp3heZk+($1'66+T8CJVmII#C4 +FDABB(ZSe[b1dMUV,K")h"a[G%0@DUVa,ZSRBiEN+"EidqCFTe8jZY$`-X4Zj@R) +cX,TNUGp6AEbFA(C$,aH9-`'A(c8EU`iFm@4Y*'0YG%ClZleM$6QAG&XTCN[#RG* +c*2(riRT!D4N+NBEV8*q6f4K8BNAfbHfajALdM2FpG%3ElT%"+k2@edDCYUhrd0% +V%i3-02'%B1hYaP6j5j1VkkH58Al5S!!X-)Be)X-+*GrpCB(PQM"#diCY!EfB4IR +JC895FmhRBaSVCqM@fc5*5,e3@1rd%$,p-k(HC(DPeF9M1h2q,+BBAcXmb`JpB!D +X@K1DKHS`P5&i8'b@UaLJ"CiQ0!iR%b$bN!!Kka@-a)4'"BIlEkCN)-!q6+l*%VV +KXT@%#!r!cX2S*0Xh(l9GlV(S)1BCb[ESMj'%"Zfpkj-q9GIeCel`5H4BF((,CRf +9&,(4PJXACGrYG3jMkd+0&m)!$IDC+[h9RD0&)VCMApKaYG*Gp,b3!$J`iUiEGmZ +FprcZbB9Dfh[)H"Gib1!EViQJ3ch*+`G&)PP3%l0(2-dFa$BdPdHb2lFcRCX)``k ++kjQpDLI5&0TJ@fe`B&#f[A%[0$@l8Ji(reDHT3Z([(,Tq5H0'hYbRbZ&FN[Q,J8 +Sqd3ecHe93b`MHS44,6YYb#C#!`3KN!"I5a8(G*6HH$ZmY%,Y*f(09kHN&HDMGGQ +KG1mU`ZMECfiK#@DiaP,ShI%+4V$MT#'[`5mrN3CUR6DYc2qR-4qep4!b)4JCH'f +CNeC3j#UJS$X`%`)6q"Gd0)3b&9Y3-1+bidZV@0H+lZPCJ,Z,m#`HL",'2Rikiie +b(5BTH`YCbcXj[$Uk9@%AS)1i2MmJEH)I&(H0hXfG'$T4A*hT%H%BiU-X#-Xe&kh +`PI61,M*+G#*pUDTf8U(GAf!q`N(bK)Xc58CeN@LA29CY0FI2[m-rhIVm[fH@R!( +63@(L26p$E6m9ZL-24hbcB%k50McfMHR2hReeZ)U#8(ST5cY2jpML!'Tafi2,'#D +pS5(,#*AleSYeb3#PN!3"!!!r!%#d6(DpY`Y4k`!!&&S!!(BJ!*!$d`!26NB!!"P +i!!ICb3!!A+J!"de[FQ9'D@aPFb!a,M8Z-3!!1Ud!S!)`!XS$SJ(!rj!%!alrr2r +bbd3!!)!!N!HPN!3"!!!e!!#h!2CaY`$fF3!!'48!!"Rm!!!C&3!&@M)!N!j*Bfp +Z$3!"Z%KTBfpZ68&$8d!!N!q!!*!*!4i!N!-G!*!%$`"#`G5I66Y4QLC-XLL#I[0 +id6aLSH3I'-#V81EJ!+@3"!%!!$d!%,9j5)QeI4Y3!!!CH!!!(bX!!"N9!!e9$J! +!#GF!!!09!*!%$`"0Eh*P4QPXCA-ZCAK`!!%eq&4&@&4$9dP&!!$rN!3!N!U!!*! +*!CS!!!&V!*!%$`"#`G5+FbDmfpl-A2J+m9VJ)2h"&*)F*b'Ff6'aAaD*bSC'dZC +6H@BC!VKk4hfECk[!-kFd4TMrEli58LAU!p+mhU#6S4Z9h*Dk$)E4Iibj$pZ0+Mf +ZlD[U$%bA$BbR5LQQ[&,*AQdZjAjkdTIm[p-Lp+qk$-)LZ4QBE61dJ+C0CC)e,6A +iN8",j@!pii-mf9QP5dhPU4,JMj6Y@TIIHGb%PKdl[#lGJ,f3!-cBVhcM"jNaQ[b +F,5HV#0MpZKlNMXp&UMqVe6jm2@iGQ@HH&22K-K2J+dDF)YV([Kr+Dj%k'MSc'Ti +bl'N6G0rD@)6KfhZd$i34j-bkXS0X)5*R)1MM#X8l!M8+L)Yb3C64!!,D8"8,Q(@ +9L&+)TR4lTkK3-#3+84#q3"j+XL6q9Z3rC&ae'Ja3m#iI"D%bQ)XTPkSZRD)1ImH +)RekeiLL[5'4A`cB"@bXHR&I"6FE"PLH)*PJP"%)%HZH9+R8LlIG!3X(8hC5Z1SU +feJYkk[H8!d*rLMc%d&BRlY%mUHF*PkL#Dp[(EphbCLGA)mhj*(2*XL3-[Nf4kE, +H@b`U)6@h,9ED'KYZdFrc8XX3lZ9HFEkM9-,EjjQePQdS4(MZTdFY%m!4fK2"P9l +,l,4fGMph%,aRD%0C'l$H2bf0qZ@m9alk+bD+A-6d2kTkml9HaI)GpE"Irlkj"3F +h&32[4)d8r$$%bE[lR(8,0*3[%YbS+fKBTIAhA*H,cU#K-3,KPKhS2LJlI3Dj6I- +!14"lGN2icXVS0Np),J'Ie[pVbNL+pVf*89ilI!GU+3$a0ZZVTH&Qk"r9UQ'h$eB +kpb!JG-bj5pZL4!Hd3j-UQYVHY-!k@q9PM[K*hYbZmjjJ"mbBehSR+(NqeRLH(k) +Ik@kH%)Zm-%T$!9KmTEXilF!HJeCZ%KG&,[dMh+k[DTRdjC,NeE6""%mQCHQ)`Uc +&pJ#NZD+JC9P%Rm@e3Z@U@l4Da`8i$j)3)eV@jKS8CZ2r06a(SE@qRjflX%C,AZA +JA3'L%UE-kJZJp[hZI)-$$a#,!)k1-@NeN@UA,8U*62,pJ"513KbR$Lh!r9lGU86 +kp[@c&26R&&1*$!UXTK)l@'pGMX03Nb'bAFZ%Ik"dZCBHk`ae)3e$&VBld2rASR" +ANhH3!$[bEC4!@23%cpk3!+)0GJdUJYHi#B"XKAHI&B)MZNDCAF%9FYCY8mBKNDR +J"eB$GR`mDU%")N)Y3AB"2H4q3*TS!8l3HIe`Sa1kC*DeDB0Zb@V-iZQE1lDdVVJ +r!$)qPKjF&SKbKeVMplUkYX4VBe9E-Vl+8UKZ'0@FUN3j-[klkF!41H-T0)$+)p5 +'$j&+mDdjdC!!UfaZ2&1fPGeq8dCdREF9hI&I#3#ADbhdXFd1f[![bdA3-*S892$ +-NEIT-BRX8B(2q2A$[`N`BH&k05C%m-i&JMLZcH&aQY+M39ahpe1X%SI[@N(5SF+ +'[pR)G0PimGK&iK@pBZ4JZK@XkEmQq96XV5hYF%BT4bcX*A(b1P[Pa1"EF,S8*mM +$#)dFUKLeT82kEIRR1Aj6S,6G9UbF`CR3`d)YqM&+39QiP8B6J6CNr,DE85QYKYE +QA@2B((#H,YjKaDq)ik#R1L(@r!r*-B1E6X%HJ@@YB+@3"!%!!$d!!,F%NCHh",H +3!!!!'I`!!'`P!!!C&3!0P1B!"lj`!!"-Q3#3"!m!6@pbC8CTE'9c,QeMF!!!mUa +069"b3eG*43!!XH#ai!#3#S!!N!G#`G5m(BkF1YTr8-$(lcLF'JB@B*9aKf[hH%- +%Z9SEId80JPA`RDIrD#%'$[85$9$LaMZLMK3*`)YV-B(N+e84F5jm0MA@3bTF8$D +*'A"*6&"k)F66+H4aEReKRM#(6j(XQXQC9%0)(GQ21Cca+KBR50,BY)&[@3J`DeT +T0j!!&5Ei32+`'Rd*dINrRfd,*iK(RL'B*m[0iR#emk*3VCYMYTTfGi+H5+eIbmH +&b@3KZd9L8VqjKA#05*BCl[HG`V(FNEM-[@b4"QbE36%6l,(1f)#AD&6pG)*A`rC +j8rUHG,GJ)jU1Ef9d[!V8EG&-[leM,F6d@#QQJael4r'FTl-#kh&`JZHV*3B*C$e +'ZLYYcie,jdb+CJCkh'HQlj0'j6,ci'0VhmXA&cHC4,j)ZJUeVRX@YKUHdSr++0p +(jMB*"+dC!HLh#4r)95(S-Jl)T8dNrcXS3fLeNdZpC,h5dF,JV5EU1J'r'rb1c)@ +c,e(`jIhC[83Dj@J2,U$KLb@E19$8"*mlB`N8CT!!!iCC&pE"hPkTqUkepVL#!6p +k"-43%2-Q,LG2$ZQcLcfJ1U0(b8RD%rR`XbRY"4D&b,`E!N,5U-L!fQBN,A!"Lcj +!8#C,3VL%BiXJGYlBQ53Cjff$TDd)C5@U$JaZi#HZFr59$IBYY)@#4-0K$IMU$mm +cJfkD+M#[0IVA@JZppHA[L-NX&&*Gc8'+ld+,ZqY5+5%)D[V'HrTN!-0N30%3SIX +$d8p#VY@KVED&k0hc$))Ab'l2hr+h,6ECajHF4JVA52LjJkdP(RhHLC6NQ[90q'h +E)$I9i&"+VlZ"``TbAXqm*BSdcJJPA$Rq1JNcB8Kc"BHZ,a'5Y,j3kQkFY'mm@[b +)I02le)j)JdU*+D[M-Vf)6UQEZ!FlAXjRU6-9(RCFkcYeYkX4i'qReAj@["CFm(S +qIKmaHLNd0abK@!`E0pGF-%*P9q@M`dQpTQ`iH)+b9KJjH3*)aYljAEeUZ4SKq6E +*X$@M"q#*'B#aAR',$b'HcJp"Bq(R,6`jFEScFcQc,4QckZLT[V'[h3firD"dRiX +f!bV6P*U@BE4[J$'HkQr*,pL2&5iXkUCpiUYe`NM[GkBHbbT401C2Ei3Fm08QcQH +qpi"34YU&6,lFQ,X#UJE&0Pld-5[`rC6AA'RC'6hi9[)e`$*h0a4lNSL#6*3YbB4 +',qM6H,9+RMV@%*DTIY52BFXLGC!![1%RAj[beX#ELIYQU+)D`cp,JFd9##cl"eh +j1mNYdV)aFMYjaRR5[Am1IMTp5M,5K@cR[l+jmN(48i"UBdNVIRl[bL$i05I,j1q +&lVIT8M'4C@B(dQ%!E`jAl3aE1+@*+[0M6l$9TYNe$"5)M#FcAC@ZE*!!A0BERdi +S8S9jdFfJGpSccr&IQ39"%AFMh#"1(rMr1-J3Zd,JAZdNUmjc5CN5)6+FIdq9-EL +mPBp,KEU(4TL!j1(-!XG92LB"DN$qaF$H(D#`D[C3Ml[V"dj1lZG`Q3J+iZS!%TQ +Z+4TD@2IpCCb'b*K[E,N-rS'-UVIJ2a+Y*`a0S%G)`Fba)eJRqVEU`(kIjNb,%KV +cSXDJfSRX#JqcYF5%aUVMPlGj[R*QH0I+(3!MP%ARh'9pj*pYCLU$#Q1UqTFf8MS ++*2a-iHaM&JA8h2j%[kSYfjRm5rEUpKf8e#l,*BQ8lj(SY$Q,#$c(%4GL*J!aCQ* +Y5Qr&@AK92HK,4#1$MbF9+1RD(K,ji3"&6DqeZkmKf*i$`1aSFZC3,fkMFTMb,`K +ejbQ8GVJUhq@R`TrLkNcJldYrK8VHB&*kHh*M*"(c@&Z'(M-dCL)60qcYb6*VL&M +B[5+JGB!"6H5%49#-&rG3T@2lFN6T',$FM0ICjBBmYmjl(!`4lFhA-rI#Ui$-&KK +@Rh-bF#+J9Jari#phE#BdbZ1-VEeHD31%a%&"l2B&(ciGr%*3MlU3!#4&%T`cGKb +96VH)B66)P&lAab[[)M0Q0NaA(M3R$,T88aX(1)[4)laCSeHdm#qIXAFGE[J1AM) +VA"'-2C'Ia"UXprq8YNAjIB,bqlq4d*QVXL!%h$KfXpeGU'4kNQcUrVE3[l0L#Dq +S3c-r)p1hFIh-YK&d"G@Eh,B[*TSP-NHFrMBml`r`N!"$+BcD$U+SHd#pIMMGb1+ +#iHHrKLRqck!br"'E8X0@#4+M"`KfhMK64XdY1VjbRq#,e'-&!Q!Fd9-*0l6jBmY +4amk08hcV,YU%L6J#JbE"$DD'p#+-,[RG1rJZN!!rf![-F521f,19!aP1JeCLGbC +&#i2*R[AbiFi8G+kH"5bjBRkCGJcH*`U2+`E6BRr29#jr316J)pJ'h3%h2bRUr-` +Ee1qGEHpI0j08aaeXiUSN12+A'@e50q#e`'1pX`#KKAVKS[ImVS51'6hjc!hMrlZ +R2+X$pbN&&HRlQaGX0Dm53m)`q#H05l$@A,J,)cm!)H,aDY&#Mq52J&AQq0QPESc +!jGajQQaa!cI2EBIEY2mMR4iH(eVTbq#"bqj"paNVfJa*RBqQEF')%dI)Q55RFL` +hG,Idjckp6Dljbp$bBKfH2$STa6JG6,kPd8%Gcfl-EDV,*BQ(NYaj',Hh!'b9i#m +lY2T[1SlD)E&qQY1SZeFQ`&AG2LT(AC(UZd91@AVcN!#GUCVIpb&a[blkRC!!%-* +krhUhe"1ZciAp&K4Fm%H"$Ai8"Zc8c&k*-(a!L6D)r"k9[@6Lh2!p%$*l@P&-VhR +*S0qq#0ViK6NqY"SZTak8J&#Pd[K!&%Xq&CN4DT1D-rU&(MUjJceKkdbK`%A6ep( +[J61'4a0%d&4*RJeNRNUhrVf+FQPIXh+K4m@MUrk*BF0lqREYaQ1%(e'$q)hA+QX ++P,PYK@hRZ%TNTRV[GTq5K-[6)UKfMh6FeP4G@BI$(Aq9`DB4$N6TI`!cX&(#''d +FhYV02U3SAQi!ZU(TUHr4DR$)eM$2FN,*r%QpBS"48LQa4(K!&BRX&A[a@hBA`21 +ZPHAPEEp5Z'phe+@Fm$RQ&`Vq)`64YSGN62G1L25YMQDCrC@PekGrPp0bidE)Tqh +mQqh22SANdSlRq"+M[@f(VVDbe"RKUV'YCX6b"G!m1+-9-#H&LFq)-"HlECelhDP +81$Q0PpdD#mR4Cj&p4$+m+Z`4`UZplEKTGDmVIpN+RU(XK3I+k5E9H+[9PN*!Q,T +`CCL+fq!mP&mb#3b4F92mZZNSaZ,cBCc!+2A)qK,616j6rKA@l6%T'mae[9`cqJc +jZ6eUmRZ"GqBeB,3%I)#'V,cA*ed4l$NTK-VHU(@lK#58+J883ACcQimZ,E$HG%l +1GpS(SpBBkJUM)3lX*3!(h+EkH%ZRTKJpSUb4F81l[rAc9rba%X4Y44Cp','&M"M +--Td*)iD$*0b0AV-3Gk[dQL[YD6%RekH$%*1cY688(BY&e1l`pb(eJTT-P',#d&Q +YYkVXaN,1Qf!B$EL,[INf%AL14P*9F`a#ED"ZjMB1"r0-FfP-6jjB8Bq`(-Q`k84 +VQ,rB(YYCej-TEZH(m+3qLa)3@`fd-k8i!ZcNf6Y"QlV,lH01"N-mSP+X[LqTmYf +S!d*%G$b1q3KPS`f[h+[i'-@ip$0`kf2FG'eHFHD[qk@&Q5Q4*S(P@LM-H0E*d8% +9LXEK(`eAXU,`B9YlM#UmGCUr[k!5Pr)(XbRB9Z$-,4cU2$H"P94T8c1)%@D#Vik +f[MZai1YDM9B3fE$+h"dM[YR(h#APS-XEc8E4K"XrBfN)&b(E0Ip(TbrrH%e'UiV +U"3cQNG5-H+6D`Jm35CA*2'8T&RfYar9!lc&KqPd#Y9T@ra,DN`ZEl'&PF&b!cSI +bk3DjPV-D#KV,4J*QSlNUdDB*cI9cbTr3bS`!USBPp%ScITMC"Ld`9jF#IS%MR6# +`b3aZmmUGDr`!b-HdIb1LUB"CF0J@f0"5$pe2Ff@I'Z)kD#6@cfrrIGGi!()D3PC +@4q3'(5Aq$!aQ(XIhLJd-$F,'Q*A6#d(3dILIN3H4*THZaY+Pl%G+a,4,dX6E[cS +G`305ej!!6@C[Qr[Jk56QF(JlGa4Q9B[0cf,Mfc6`N!#@bD-F-[I0,3I$29r"Pl+ +,53Hh%5QadQCJ`bQDh`CcjFH1SZECAhFITbT2ZRhe[-'iV&cHNX``6SScc3E2%Vb +4heRZR[!jTPq1-`)8N!#FSp[rL6pR+I)93HHMNNP#f,3l)2b8APmQb4Yj(,mlXa" +eH2f-c2SrHVX0G,D5dZ"Xkj!!-HdVc0l8"@KkSR96rrbi&Y8&0jbL&Q@lBNcAPR' +@J6#-3k!'%D9hARG+9prN`UEIeY(SdKb+i`Y)r"LTiAXqGQGY$Kj!+J[U-V*N)8& +hE,b@BmE)!DM-lcfGik)9V#2a,PH8cl8Up0*NLq(IeJh`G'Y6Y$)ZP%10Pjbhmid +&+U'D1ZVpH'XmkmVPSLlGDiGf6STdmD0k@hdYm@`GX(mc1m)iMU8jPk*cPFJJLHe +FB9[0b(9%h[@'Y[m@X[8K-mp([dLB'ZlD*iHrlJi1d"C1'RMiS8%)A8C$barMHHm +dDfXUDS!bT0"(4)@hrA`I`m3ilUPqG5q5l[SjHlBJ!8+qGjSFJES*bSm$`#`#j[` +aX-I@Blb53+IRS$frf+[3)!83H,$)r5fjREU5el!M'!L8HV!)qc2Qe$cS5)NbQK4 +P"FD'EmZ&FcPMfVL-d+)[SGrSVF)CKB$$i#!M"ATi&D[c!8Ci`66-lJ")*Ke"ZKb ++C4+KZ#m$DVJ%2lGb#R,T`p*+eNVUM2l*`lGeJ!'kb$$KH@23jNPH#KCrPX'XC45 +lr5UQLD-+Hl@IrbAX*6c%ECq((L62,0RcT&9-!S0I!DRE3"@`UaB'pIX5mT68%ZR +1D(eRGC!!+"iVBHe`j@(h@iM)9*e),TR#VLVS"FcJcUD4&%Sde5F"D[9a1&rLBTE +JfBBZNX!,[L@l'&fBfL,Xk)K,lCeI[a+lY4dbmd9Rf1cV5R)+4F)AY!ZrmhqcEPG +,ZAp$(*RGVALRf1&Vd'1CmqbEGmB5NdZQlJPi4U%I3TjR2dE58d9mml)R-YK0U-M +4CNHk!TcdLGKaH2@c(d*fA#9ikc9`Ze+clLY(m6T!Q%pIaEI`AD"QZaa`YdRS4aV +A6+cT%X-lmSFlh)MDAPTNqMA&K(HabkB&+@NB8ml*Fi2U+hGUXX6NXC+`RY1b-3Z +ql&I3V[`qJ!#CT8!plR6dPUDh4V,[`'(4Cr,XXrR+J!H9(Z!0e+cc53LC`BXj!rr +ddk(LT9*&p$qA"N,S$Q!!$55G2ckDc%681U$UQ$JFC&`B1XZKlmj%&dDbJ,8%"1V +!6B5GT#)4B*XXck9XR8h@QchBe)pI"dQ*NFrek0YDeH(j9&FQ-kT`QImU92rQf69 +K(kc066@3!)T#YCZQ4@&3UVTU2-+epMdd`$,&N!"$#JRP!B'8b4[(3XB)2GE-X3m +QL%iHc,E5'AEF*@CLJ-P!FF4QS'fm4&cP)kIeceDLaLmjVK)UYd6)*2[UDL*(IjJ +H'ET8l*ee9qmXBLJ*d1)hMJDN++2@a)jT#Jf@[JI'(2p(9BZ`#D3cY[15D8(VJcE +c55!b[Z0%&QKP"Ni"ZhEHUPPBcXDUG0a5"A!H@ep"@q480&e*HA'e-@V2TTF1U$D +G%0&#Q8kL9#q)B#b`Qkj#AEG8mR9AAecaaA$A%Ym(H&fR"p*k"&*09L6q#5,`Mch +0'hd8305"$r`&er$Zr*CXL%J85!`)6bBUT(%r($KaJkPS*RU(#BKS-8fKG5p9@,F +8NTp3PdPfEFmq[@eRIHUmf`pqNhekc%jQ$$9#Vb+3!,8eDNJXRIA(mDV-&l4pc&" +)@*qh5$*,8Z(#BSrml[ad!mHh`D01$fI-2+A[VSYQG9ljR-%TcQIfp6+ZHUmkTK6 +A&bDP+"l)L-M[&IMcS&mMAeClFNBYp+J&GLaYKRMfC*+jC#F89JIb4$"%CU#ki6! ++rFd4r&Lm(kaPc-f#m'*936a-GAUHE2*!H`TB244(ImrBH%92HGF%8K$ETGH3!#h +b6f3M$['pIam!0L+b!1dQFImqJ'qej&,M)*5QIY5&@pr0He+*02G4acbQ@M'SraD +)99[MVGAU,ZL@C-mKiQM#XG39f-'NUA$EXGcMb-Yjf)b1LQb,pSMpJUe#1&Tlb"I +,i*Ul5a0P33GX[@l8PS2qK&`hGX'NBq*0m(S8rS)`*!`2[qYVjqLBafE(RQXq[!h +YE4E4@L8c'c(I(*GbNh,K9NJ'I+Sd0Ph151Q'q@E4KALT0$-H3"2EhP!08hP63&P +0dm%0,MdbLFH`QCRM(*)qhH&hkNr%'KdBKY28M-iNN5X9$iZM"9,ikkIApdG9"#5 +piC-a)NeG$J'"21m+QRNlKb`N&"`06NI[4$N[5G4T+EJmXRZFRE)S[X+V4PFJaT@ +KqVSDRlP@3BBF4ik)FerA%`TcU#dBN6rFU3'YTJi8lJ8G4a@ci5STN!#AE9@N5`X +blZRP&p5S$rhU1$%)BF()Xq+L!kr5"[p#c3XJlfD6JS"rRaBcB(@qda"-0i[E[TJ +!JjaaP`SDXkDBmZ+"#GXBEBX[fN4R$'`qkKE-02-MV,)Y3MM96Ha6XLd,6S!Lh,8 +HZYm`X5Ka"XYUB@[#Ya3rbmHB+#%`k%hq'9#Yc*Nr4BpA8Db3!*V&pH1fPT!!UqG +1Z+bDqlQe+qX0CMTZVDC%mU,M6mh'GpE%Iq)4iK(eaNThA+CV4P@Ai)ik"SDAe-e +DqqGFmeB@$H44*FrmAAQ1kCJ"hH)Y)*ENYKTFJalX(00PKQiBV&$jiaA%d*bNcm$ +I5r($l$0hTKDCBY%9)L4f)HL6'N`hdmpa)RQm4VGT%b4TjDrjYTZ'a%1V*l8#+*L +'4DcHmhbq%hV(0[#bqJIH3@BcXkQ+'Xa0X5ZfLlb`(DIhZbQYET!!iP3YU8Nj$G( +iNj&"B[HDkV!$PDIDFl-Rc+P,,RV#ZcpkLq#aMqhX&DP-H*V6b&q8P0Xh)ebpkaR +6VR"1Vrdpf$c9S(2d"qJX+AqX0526kN#i6i52qZXcb&"U8SL,)d"`)Xq$0bqqSX1 +ES+FG#d-6Ha-`Ra%p"q9!8RS-U`P35DHPPIk5Vf#P6mB`fpXR-AeU$EdXkV'"+U6 +*%I,HG%4'@&VhfQ!ip$Q!#qNPJY@kT4kNPAi,A[bGN`p$'QrNM2Ghk3mjf&iTAVr +,YCiEX0,552Q0daNe'KQ*pah!#2+93rA$abT6FV"$30(6N!$a@3GL(b#iQ2!&K,2 +bUi[rA4[r"R&HT&'caPQED'l#BR&UMRp-PU[2iKH-!#a40jZ0l2BFkjXACeY4I-h +bSDHLbR&YC[AbYH3AcHbL6`IAL44&DrS"MLpi%$aa6b6V+Y-D*aI+RU!c6EbGF$j +*%B*I&d4hpT!!'+[Y-'1d%jS096LZSXY$e*Rj3df@LY'A($0&I)DA%&J[CPi4&*V +rZJ("A(@Y"%+,+-G,N`#I%(@U24B23i(d,P[#r0hXR[D3!#r8M-FZr&Sa58p5lcV +jf+QDNm6X+a5Q`G,SL'T*FC8#f,Ul#Nr6Z3Ab0a%T2Zm`%PZ5"eB09Eda6bMbR[B +(p3fk("#43X(@A!(+[aVJQl`XdU'+!8Y&I,b9rGk'9CQ(SFI&MNBk[h(j-Aq$h$S +XH(H`GZdGK#Sh8JfFM(,dFHMGjm%NJIl5Kra20Fck*Bl1AlrX&!VNF"@4bc@`d@" +V&M(&5JkQGL*QNFH5d"+C1MM$iGmE*KZNJB[$i,45,aUQJd1cAQ"R0dcdpk20+E! +aFYF61ZZAJ@["9GAmr2ZJMF#mjIG$#$dcX[!5%cPhGeILXT-eUf+!35L6A+@l*R' +*HL8$UE-0KX$ClD#2e0'#GiB3QT(m)m@'a`,!K#TPYL"N(R*b"ma8C)F"@pkBqU0 +%4jVq8BIjSUI"jbI*f0950hpA5R"S(PVi4XGCU-'YUKXd#jIRIk"0E&9i[1mCbe3 +beLdH8"TDZ)0lXk'Q)B%!PGd`%m$DP@efTLAaAC&rK!B`5+d*"!iX0*!!P)e8("! +)"%VZq"lI*j[kS*VNBl,e#ER1QjqSj%1V'#64&8Xm0,qpTS*i6C[DHNYX4UN'rG- +@6e0V@Ic"3",86*Cmr8-$49dYjG)hpFb[j#ZXZ,HqP`1b8G+`UbPT*A!AZKX''`p +0KCK"-hA,G*YmTEje8@8kKGV8!N,A(d48l3MfCq9VN!"EEj9!5XlH@Ge(Rph"Lbj +D-J`XCBeV34FBV--P@S9GCfEAK!(IV0C!QAr&mR8$5#*8NMJhXCH2%KClGj!!hYA +KJdLF%`KBf9C2mjf"pdf3!-QcG@!U3!+aA`P4D$5*kBmrbLQ128`M(kN@pT(`L8l +!M`@6KKdG4p4XHAK,)!,ld'Y+$dfK""r*9a0LI59GFm9VVDEl9ahmb&QVYVkRQSU +%"&p55G@LmM(DT`Lq5PrV)-V2`8R2Y)K0XL+c!"BqpZkYFppB-QGk"#`dPr,Jkje +ZAhKTL*i'LMK)Qa1Q,KUVcYZ3!,$aK)8CP!FqYqrSqS118eBN#&,`KChPMB)`d)$ +liQV68Hrr4Pic1lZIQP!92H#ra--*ePbrjl[qlUEM+k5pM68H(-%JAdm"&cVahKd +fk%`IBASQ5I'd@KM+c--KM'ZrUc8)B$1@c`e5J$[V,@'0M#&Jem"qj)Ecr5IIdHS +L+mXY,4UFTaDbU25&K3J+8p'!@JAXcc&XYQ53!"N4S)`Hf!0!C"D+1MZS)RAR$jJ +5fYiCAQqrii-*Zrb[E1bkNfa%E##'Z@R*Gk8*1YheZmm,FZ!$(3(%aLmACPe T +'mf+'DrNfmS0FXL%2jPUAS(4c+3!"`NkD(!fe5m6(M2`$$V1Pp0LrTd"MAbm%`88 +05'1d2@8"(fmdBj3jkF!EhrR3(Nd13K!)@p1iEElYF'k@m%R$bjV$"J&!+-TaaCa +lZH8V)L$bCYC4H[T8%p`p@BFaeX1K-N&mbpp##pJ#a`f`CP"h#j!!D$(a#*)D2eZ +U64YL,,NApC4DYFYjS5j"$Jb@m41D[+R$8JMViZV'AZK)&BL4FPPkSf#-R$EI6Xa +qNf"+1p-VYD"fYVAC-QBG)Z(K-RQH"8p6d)RQ9LTJ3-01NIkhaq413jc4DGP(e-1 +p#&ZECqJlN!!Cd[,82FGTj1+BN!#Q`iL&pb%Y6q%j2PeJqXI@Ak*4(h*S,cNBD-` +`jSq9I&Y,4)dQ!rRaC)1NCRqPL3IXEYp8jpQrq9JTURVL*Ud,[%pUekL1ZBDTEMp +)'*-f-diK"*HCKjH!4RE%b(8$fYJU+1e)JqK2[&Q*[iFr[(IQNEJ3LVSSr(i#H9# +LSEif0M*dRmHD!M"PDYKq@qU3!"LUYccD1Jj$"FdaAH1-DYY-C1qZPUN&d,EQmk+ +51SC#@Zphc*!!#A6Y*#23j@+BHb3VUqqF,*V*K&GlkE"AJh!MH2#GDVT8K%C*f@6 +[[3Kp@R5X3F!br#ZZ"TY$8&X)b2j1!mq(UrTIK3k6rG-l,b'6@"H[1PNY,`l$l`5 +",0*2EYUJ+)IK1)9[%k`,4i9Np#8LNc8pSLF-Cd2A+q1fPK0mEFmqF@KFRm(pf$8 +P4h*)4Yh)9fE-2G*kJ6lAe%@XT"BPAla6UA8aV*)T*$r["H5`@&-,BArfr4h@"S' +@X&*kQDj6q8!'09ReQ@$,XKH04P*ZI4RNIP5A2qehd%KprG93lU28UYflb'ZKL*d +*BG@qIhIErTJYib&Sf+F8b-PcT2LqGLk6L5HrAVeRqAD419j8&VBl,lH'U-iV[bh +-#dL,&563rpVf#Nd5+8kL&#S)FePQmm[-,3HPjJcY6RHYrGcPVk"k$SLTHA3kear +*p1l-#NQT)bj,S)VUY`%4@-KV*a2e3!TV2U,R!2i85rM01er1+QFYfm5SUBZNh!Y +(Z1VN(hXY9Kjp5m5H-2Y@(aA0,4J9H6pSFHF802R$4"qdB`l3Z)P,BfHlY8e!cY$ +P[9QVB(,+(i0Z`EVG3AIPT8-a1h&UBZd)eTSU!&kbKA60+Y20``1k"ELkQPUMALY +-UYJp9YR6ai%S#RK$QaAI(Fl4mKiK%(5b-"imHINVi4lTeff&-6K-GFi#J0r))Hm +HA-T+f62bA@D-h-Z3!"BcfL(*3dS-GS6G2d3XphF[QiSm9k$*2k%``M&"-$#`#UV +YJ%k,'hhA9!$4rP"mHK@SCS+ZlX@kIa%F9Mm3rG')28P9-@S4NQL[&*[M'MjqBL# +@jRZl4elphH29(D5qE+XJ@eT'&b!58PqYl4)92!(C[V([VHIANXrJ&9LZdl'e8e( +JT'$Y392[q9jf*KM-+P5rP&-hJ3DCX(jiA%cHQ*F`rS[3""b3!(KV3b-eEU,9m!L +X5p'V[F4Zh,!Se9j'm"*219%@T&NQ)9a@`ba$IjFC`#8,`dKb"LS9#jYEIBCpC&c +9$6TY`Vi983`3$!@P4FLB+N$T%UKjNV%U6C)q'm&B6cfqi*!!d8kcIq8bei2EVBV +5$!lPL[!f*rk1"aidUh@E+2qZeKICK#VQY)`"2DG36arS$R!AdY1$F-*D'qVeEj! +!JBN1*aq+RYCj+IGE)pSiMU8NR'IS3NkZiq1VLAN"+PUq$B%+JdVJAhj6RN2JmYN +N4l5EU%DU'6!p*p&hpDehKY%,iTi[!+L5NcSMd`[,h,@&3b+ZL24f1,QPXr13!)[ +*5%PmaHR%kJ4Lr&)ZcA@cKrA,S+YC4a"be#B#3TN8SD%I%mmTaFDriic%Fj92pDm +Qb`i0A%SAlE"CmTjchJJc"ZP&"4@&0c19EDYHS1b9P$!#Rm0j2$DZ44p9*4Yp8Y3 +HQ4mL83bbR24AQA(YATN@CS[q,`GErAGq-SD!cX#)a9Bpl)kKEN"Y3[XIV96QJIE +mc,5N)VAR[225i"*qXTr1p-,aVA4(PYGeZlKFFqXdm"`(Pr+'BMA)0YVI48lQ[qD +M,mi0I5XrhAIb!l[[T,rr2FEHKV&$52j!*k-D2mjlMp$ij)4I2Mk,04@%D&(2Hfh +@Z*hRa26("d(rmSmm+Eeq'$$%kZGk!MGePfD%YZKXr-1[SL%L9J[$h*Bi#4PY3#" +eS6E1M2L[MJ!#V4l'I[&18JVRB8T[IjI`IfBI5FL*l5`(KZ-3-TEdTCAYpEfh#*B +#NM!q`Jc',eSiBPmlQ+Cdc,Pp+j)XDUlQ&UU%Z"2G2qZE,&mc$k!b(+"&dlHG$FB +eTIKRR3!IJI26bSl6m3[!QR'LaYh",me0D1!&-mZQ#Ur%1`'peRle8%5p+Qj[SK# +Tqq#X2(E$JcU)5`ZLhBN-PRbf$kISQd*a4NcF"!aZKJ-',5ET0)8,YbTTBQ(6*&3 +2HU0Bi3hMX#5I1@fP@"j'b1R'(#V[KT-!@eNjGSVHBid"$@2FU8[0U@8JJEAIi`J +KG$QF(k*GL1[qEDm&D5(Ef3a%2Cbk`5cNc0IbRBTeRj@[,NH3!&!e&32QX!@dN!! +d&bd1p(@5360fC%X6lI+QGa-q5j!!&3Y!BFpR`GNc2B9rE!Drk'Ml(+&qfCdNm`' +CUl4(pQ1fPUm,E$kSIPSTEUe*)K'6Z&XbEN89aVR"-Jm0'+RiLD3UYLmk-XLR[4e +M",6U"lAL+EpAX+P9B23%q`Cq-HHAT-d*'kibP(%rcCaJ(Ek(*d`+hP1L4mY3V$H +EPpqi5h3NDJY*3Ak,%kUDb'H3!(%$-CKT2*6Nf(AkEk"aJ`l-i!T#L-l@RpFe$S+ +IaRIhFjr,+bV4bV"V4!G&1)kE)9d#iC(Vm5L5fHmmPi%N[K+l`8paK+2fFa"Uf8[ +6Pk!-H#i&S`690pP`D0Imd#MB,5#3!&R[3KraS9Xcf0'aA`S!5dUUr!50bb(QdYp +Cp'[lXCShlASpmYmj1rb$M!N[EJ!JK$%CDm8kqYE"&43G(Sd$6!2356iL9B)93,j +JlILLX6$Y'V@m4ViVPrDBT`)r[ihkTMTrdNl(cq'A`VTU52L"(ir,LJ6c'1GQZ0" +%D(kpY`$j!f$(qMV%($8p,FX'*K`M,6'`4"eS+,GJEfRP#a3`PXHMUE$lcBeaq#Y +,DLc6l,jGA`@#0%c@E*60NHF8D0UMRR4P'VRSaXINF1*i4HlDTM"%EK!arXecalq +A#F3EJc0RI-b8rF'r+Fl0["$P8B-ZMRqBR9-,3956DXd3-[Jb)0,@V)35a8bHPJG +GDadapdEf2#XX-T6I"rVa[3AC(ICAqU`SZr&hd&,1iD#QQ[TqfkQ5MpZefie@HSA +f0aYTU3C9ccRmr1!f1EI9,"MP(&qAMAbSAr"#V@A96j,5%iF")@J6p`F0&NUaV2h +K2#H[D-PMGXbVc&25haVe2K5FHRl4%+IN#lcDEN4[TdEq"442BlD4!ccQTlJbS05 +bc#UXA&K4cE-BC@$$pS%9iNPX!KE"m8PL0"I6UUfVpDKdM+'CVr%K"GLjGI[I+14 +!00bq9Ld4Xil&*%QP9Cq'hf5rhJhE13MUK+!+Xl$Y,cDGEEqj(M*`A![`dK-54V% +'YlK6BHbQNKLf[82l&0b*8(BM"V2a9JE&F8X@N!$b$R2c-0VKj!rGV3k,eeAY&RM +#BXMYa`$UV$1KI9I(M,$5darjJLefAUI468r58IAKSQ#E[350IL$k*D0eFm+F+mJ +kB-JbD*("1"29"(X@Kl1UbGBaa"5TZ'%+Zk!C!aV[k%HZ9%hcHKAK4J#[8I`0BHc +cle3hN44Z"EhZ*Ejh#EJ8X9mTG#R6ZV+%`#XYpFi&a-p+%QG`Q5Q3!!HLkrVkC3) +EAe+k*,ilV`dZkLL9!hRqX34#`E#IE99Q+kJpUR$*@(li(X'laq'+ZY0RU#4+4+Y +B%jEGGdPUq!kETm,YGPmU1$lDJr8L-a(pakPH*"[6YrTJBf2G'F2Ie)"A1fm4Xj@ +b#K1h(SS+K[QEaRY8aFd6q8dheYMib5iqicGH$Nj)FrAfl4J2+MVqFBZ%Je!&@JV +6'+aiN!"`q9qpmZS9MQNE%cpbbKYJ-X(RHK'1`89HQm@QMKL4RZZZUY"Ye$Z9L*B +fZ1mMC6%l2dbVc-bX3ZkdkQl+jiQ8`EcQY#GdSfpbi+iE&QBTMPjrZ-HY@-9TfS` +!,`,kr+AB%Gi""feE$*[ZH@ecB)K,I$C@6!0p`UBj3&MIF)9dFBQ"HV(GYhX!IEG +1Y8qJp-53!"a&kmQ&MHV"qI$Xk0[Q'$&E@H&BF00V%1maBZdmY'ZhI9d+P1rb[c# +3!,9@I#4XK6FC'mID*0&"-D3YJXLRSb`[1,8A['KCkTfa,lqUTJEX`Nbf[d`dZI( +$#kLfQEc9"5C30@CI02'1*C+KE[6AqGX4pITki&D+ZNCBY!5--mL3!$%SaF8+V[Z +*FBALhracD65aG[bQElpfV-i0JiHr3l1# #bl54amfSc!V[aqVhaGkfa&Ml!c +H"Mq"E+5Q88[NbhjX9al2!!'8hBARmXE`Q@jG+IHj3YY+a#ie$9hCpE&*08l`3@L +S+*24Yl8Xi&aAFXcrj'iH)[I'P6bdA-Q*,R8bAUr1NfZUU(BXTm5RhkTNeB&@4l( +9B`dGLI"5rK-k4prB'mcNBQe1ZCjAe8B'M$!3P5l#Gr'LXY6dJ6IAkHLU!2Sdm5* +9AriJU[`e!ci@KD&dfYae3ii14B8[iU$SHl%Tp[QQ`ePHSb3S`9XL2)pK$S""c[C +mLpJ5`*Xj([c#iY%ET4PqSI`SaBfmKh(2jHCC'!414"2mX)CTLlV5+H3r#,jmZV- +V#DKbh$+P)RP*FZlTPQA$reCFCm'J&3kqIReH[U-FR"dQL6'X2j,)-PE[6FRc*%M +)URpB1f,IG5%)$43LC0YMh"q(@e`IBbjAa)Md5Pa"`l8R$9$6cF4#*dh0,5Sl%(# +L5Hr3j3%5[%Ld6r&$NXBIiqc$Ckf'GSY&mjR`cKCb91hhXKmYIZG3Hhb64+Q@V[@ +P2eTHeL,lM@IQc`ZYfD#%1%e"$Fk`Z1ZmIif1lPP4+c8baq02PP'#5lB"Ml"Yq!f +)YZa@5iRQ@Jr0$Gik1iY&`lLG!a2H0i9RmN`!`'4MbE'1k0(Pj(1`!HZ%rR%ZFF& +j0(lGSDdD0,Qp-p2()EGKSj-`G&)'dCbI#(j#pirXQ1KFmA4Ie4"b`JX&T6)m%`m +h1*!!2Cd#!eY[-[LNqP2DXJZc85,EJ'1,p8SYU5i"lmj[i!4H,*b+qbKFXqNh'-) +Nr(@(*mQibHq%Nc*@8fi3Gb`k!i")dbbaq!F%Jj)`G`)ka@LKV#,j2`r(k3Lq[N[ +lAp!rM+8410@NXSQ23qE6iYA4T0KPjM29cLSb)9)H&f"J@3@)NK*XIEKY!q20%k% +KHr#6l9Q(J#&qaQfqf-E*Tjdm3[P2r3D@*96$&r8SFH[bT5kHHS,,,IL9$YG&%eH +EP"lFl(E9lBh!hN)j@cTMMK[mB0h(#pZ2[IN%("S2HI("0iQ3!0N%YZ)444iQAq' +YE``9pqL5e5&1SiCQ9531X@haq&+K*L@BJiJhmhpqkF`cbF-klqA@%6a"ClQ!T+Z +U)fZjD`HSX0rPSJl5fJ-%TT9V3L!26AkV3f-E2U&@1-#1E+Qa,ddj&IfGkD&*Cia +&'Qk`$qF$6B(6UGDQZdI)"2H1SSeX((SCGSKcre'e%ml"hi0HPb9'l[(,KSHN&LI +dU,SpE%FEP4"iZ8#i[0XG`HU%-(a##0j48G%C119!C%bM&q2@jjV028UcrJG3ENN +Bj!QNf$1RLB'HT,CKf6R0fRcA-#mqLZ,!J!liB4ZRa9eKGK*lI3-iK*J[NK@X)6j +E"aH4$Gdpp["IDHMbYf'8%H422r'#(TEikPR#&QRK,"ZFl`3`Y6IY,d8%2d0k"XY +@k0@[d2f4qe-)A"fjIE@&bA-RrGVfBTl&B)lL5)i+1DY0`Kk3!%BhZRXIqN"0&5[ +V5NPpKLBRZG)p3HI)43P#q!La%#M5FQ0FkUm(eQihY*SYK)QRh!XQM65df,"V8TF ++T1Cpf`9blQ1Ie@3M6DMpUDkKej3XiNjl@NdT8AQZRCjc6rq&)[+i[DM3EfkGKLI +QdMKp,ZrGUk#&P9D'AF+i0A$R#(c*ffN8&$5RcdaGCD)*bG%mc1&l,4PNQaTQe&0 +l$+hG)#NQ0A4RArkhmhS4Le%VjBf4c(+pRL3f8QKQ4Q"GqIB*YMjlhA3r'mGQ8L& +fU`TY"BC'6Q`4m!bId8j'TN16a+)bQhB9b"CRVlJaXFJH993@a!rTQ(1JH[Vbc@N +G$2[%ZU9d#FE)(**QcXrRYPIk28FD6+jB%fh*YS,39jfSC(ejmBefB-R(+&G%$+b +'ZkRr&+4$l-D3!&CmpS0+S5)$fQ`,'le1AC4fY'6@P(l#)cc[e99&1ILi0V(3H[M +L+d8mh%`1YD'RQjpRFFfhqT*GCUfaKV[RY`dA4I4!k$XBrI'4ij+ePCf''kbYaQa +F6`R*+&@T2Jd+Y8f'MPrRlKR)Ac3F+Nr23l'09*l+acl1f3*c(PUHfaaRE`HL@-1 +Y8#YkR&r[DE8@RH,RCcYV9f,m6LMQP'KLC@@`DNDp'rB[P6Z,reK3*Q'"iik@5'0 +fk-2,#I5)US6hhcETXq8Fr9P)KAf+@(pT`kIlA+8Qk&%dE9'#HRM5qA)'K+#9!K! +VeKc'4Y&XCeaD9XH"0E#I,--G&U!)G412Dk8qC-K'MT%@3d"lLJE!3"3jMH,XZFH +l5DMPNP#Hb8$fi`5,,%8+0hU#ddhGk%8a#AHQ[kE((1$jLj3c*EhjI!d"EJad2J3 +l2I,J%%E3#Ba0j"S80%k&eUjEkABUf$KBD"MD@dD$5Gk2(a"aUYp!#N,p4(hXSV$ +([EmANSk9hpkhR+*8lmlDZ`d`,4IlCh-Kf%rIVVcDJh,4JRUDPK'j(SCZJjiG(q8 +YZR40R65"-(E5"@q+a"!HFqXP"[V4EMJT%Lp&8a,UHiK%(k'!bfUQR8a,S`Nq!D2 +"emIT9eJfSq(*aI'*[hjRAhbE8kJH[&,fbh,Lf11I9m8mV6BP,)%[Kp'B$SFSVE[ +-b*4,GhHG!GB,$fd2Vq16UMXCEm8drAm`*qdPS2B$3*0,DMf98l"(((Up"XPRK9l +G36J(dGMRhNR&!f(H*ASM(lX`&K91S3caG@R1Vb!'e`qP8qDaaSGYeB3drlQd2+, +6(HKAGdr2`mZ5DdZGGQfPQNB*@)h"M[YEl'20J")S1+$KIfT2Je%FB(Hb,klrQRI +KiX,RpX-rDR!TBIKrBNBjU-c&2h!$(b`[L$VSDd9jB'@"8+kIVYH2mVmjHZM"S5r +-fFC"qLT362JBM&ir9+m0UchL8mLVcGISJTUl'4C0rqp9Y4eRCbk)j(p82B@!S46 +k@3SQBAPl3lB4RA+*Z93VME"56M0rY%B$eX`YG6E@H#G9105rp8%PN!!`[D*D$!Q +P8V$3i"SV'H%e8q*EQBdk&b8QIT@3!)!9K0#)8iA0i1#Mcm#,Kb#J#1(ZGp'kjeU +NL2VVQhAXLpM62L"*D3#TNc@a)kp"rNTjSZI604F(Za29mI4'+lA**6@#ZrU'Y,M +djj*$95"[5mc)',[qYV&+p60961MXdA&9T8r@2eUEikI21G@#*3d!M2G*m[*c%Y" +[QR%PAQ+Fm!4Y3`JFVC4V&[Ad,B-#Tb"f)bMJ&+UGP`a8Xh'hG"NrjE9XZM5LbQH +BKX58R*VGl1,k6JK#%TQIRQAqe'q%!0a`U4'`E#%*'FqR)bA!K+F2$KC!rVNQVG0 +RX0*TQPY!q2%$8c1KhC4`M$j"&MFa9NDA9TRrJBp3%DqKI5(!bklD3j&UN!"*Q*6 +bBjb$+Z-[LeiAG,#kp`9a$G!KDb)AA,+D+MT8UC!!J)SVI3XS,('Gmja8-NGR`XY ++SKb,,mF8CJm-NGRJXlElSa%2[194@DPqBlNi2+X[Yai1`aSpV(iRmPe2UqVN200 +`#pbYHM635Sh($DqlB5h4Yi`X3LrH8IYljZ18mK*rjljkiJD#mj%VD0UY(Ll*"16 +b[c0YIj&FXD4mlE6lP4`eG%'Pk!`[R#lAa2H-LK)[qJaKE-,)IVmiJUKbcE3jM4K +&(r'p93`#NamU&HfKI&f&N!#H2[0`#1J6G5QSR2aG(hP`!(Di@#2kcZLAF![#HS6 +M'8+-8kZMDL9"R!4kq4%NUrh2DPqBU*X6*bE[`!)5XRM)Qh+C[JS*4,'",J84CQK +pZj*f0H0(+"D@XH*C&VB)-26ZJapIZr@I'J3+@DbbR`6cFC4T[[q(2F+#KpTj&hS +PNAmI#'DiYpiX2YCN['3E5IfV$a%#&JmNlK)PGhKB`4hYi6mDiMfJprA(1IJZK'+ +CA639$RYiJ,Y65BZcf39ID1@%h'@JEL$kA,Pr"IeK%DZT8A"ME`Fc5K$3T%H@)$D +Yqb#b938SS*Ta8[XHj$HNEGd4bC-iJc85&DmZrT-Z'DTVI('P3ZL-"-f$HA,EZeT +h,#f-[CYkS"#PZh-*RE%ALVj2jcc(D`8Q3PHK5L0ClqI2Y[lq8+`QMXY@4-elZGF +XH"-m-6ki@`IU-(#Y)T`VdZj+ajlYIfYKSDII4ql(hh*4,HPlUCl!KTJH"iB%Gcc +CE4lHrV!QkJ4mchX+$1jK&8T@LZrNmHKBMhQp$,E)i5'm+G1E,3j*qG!rZPffYj1 +B*mR&&%!TM!DC50Xe'GQqTE2R,qa!faBLYJT5i+-kH$(j-Ba!GfS2X`e!ah1XQJ% +XVH)1d2($4#G26pT`S+UU1*N"$!&A'4IQcPQMGcI)ArZhS%f5l#T0L`&#@kM9"'T +Z9GbEY"*&3eGGU4UF-'$*5k#UM*(m1'kG!,AUDaE%e&j!&kfTU1R)IihR(J[S`a3 +F)fr#f)ME9!QQ8QY*-PrHaeLCMKfS%McimHABLAY$`bTPMcFpCEEKp1j*lpf63N) +rU%BZ@p8%m3CJ4i83m`+j,PLd%(p$e(0Y)0LI$45XGmP'*8jfZEZTJ&-c`PRKTeQ +iIjHTih3#YN#P$4)Pi5+"rIcd3LHLLiRY!k`GSiq[8F98Sf&!5Am51Dp6Ah5&ebf +q#2mc*2C-4i[jRqJ#&k`h`QKTi%!SGiee1S+R!FIrQj!!aBqKf44EJQRpqaR3FFQ +@#Q@f2rhCTG(TaYU8Y2)hpiEic0HVaR+kT(`dflY61HhZ)&YEM4PRhF!*k5%ASDJ +)lNB#Y6iQ4fj$Tf#S!llN"N6)S+9D2)b,&5YldAb6q-bVk833q,,4DiMc8l,TN6Y +@iCAS*@1pPlfGl3di9JJrGa6100DVpDIMQ!T4"2N+`[r#ZY%1Tl"A"Cm%*j!!(T0 +%6a,$@L1TQj,kpYI,qGh8PSHYfE*Ihr4J%!R((cjfj%f!BXIL$p(3!33p6BGSj5J +""RXZ8MQ5bE8I+*!!9be8-LIETbFXI0M'0M$9Y+TH(&EQrc[+CG@SZR!kNZB'YZl +MES'+C%i@4fml&jQTi1m536f'S(H$I'1(C+D+ld*GTd8IQp%XGi)hcT2q0abVT'X +F6pQa'8(!DkZ[E5r,1qfc0fiNkPVNVPRG6@[lDaJ"1F0GRiE+`cpabG0RHlVC&eD ++)m-T`cpD88VQaRGHh%pD"H!BVHiLVM0*bGbhi%2Pr!+BAkjd+3`H)0*q@1-'TJ- +S6-kDfUc%p$4F&4CQlPj65Uep@jekp0jbU["YM8V,c`@PcXh3N5UH&iDB++[3$ha +GcDHaeIc@!'Y8ZQ(14-[E(fmbZ&N!D$iVY6PGZ0lI`(BHE[jbl#rNPI9HQpJm2!l +L1)T"aG3F@GA#G&8-E'1P!ACb-I1)e-&e4XSElfMX*4rTXhE%4NFBJ'ARh45+GkY +Z,a$,C'1D0TYBcJBfE+Um-#h%4rQTH)Php2U!05lLL&,'YUJ49,9F0NLfh-JDX5* +a#U+Jm8i,"H@M1RQSD@#pj1ANdDMcKSiM#(922@d'9#64R@qCG@``Xa8j[mmf%9! +E$f`bmJp'6+-,$SAad6@fiaDJ+"9I1"i,P-pqqkeU@P#UV*U`0-Ir-0$-U!LecVN +JCqQI2*K*"P(5L,j&8L+f&Nc"cYE!+r[ZM5AVS$Ye[i#Al(b9!djA$MlUlJ3Ea[N +iLCQ8$qEV'k1Tp('m,i0YLc8)DPNqiS&Z*)hZ28,&-3L-#$mkcF+GBTPHXNdaEF+ +iKN8)Y[jYMYhj(KKbN!$H452C)*ZPT3309k!aSi6!"SDh5)`f',0r@&F3hhK(qMl +SfP,DA&`e6[4QLhe1il$lVU"SEZ"X#%fqCEN5,%hG#M"0'0CCJDc4&`EIfi+IRUF +dp%)!1e`)lmI6''P&5PX0Fa-*HE0(FM'9i22K@2l-&G9N$*T08HM&S*f&UcpFrk( +pX$#CPA'9e'VBU,UTX!Gm)mamJIPl3Ul6`r8fH#VBeiE9iqNVe$)GKZ&,))i*Y1M +9j9ZTLiXKN3*dF2+LqKkKX"R1)jBPT[$-d%56+-6b8U'$ZI31"'CX9p31p1dB[hK +BThfCD#5q4cISd$G8l(bXVD&9p!Cl42[Z5@#6m90Q'i6ejeUDJ0@*YLQKHj[D!A3 +3[Y1%`A-d%cR&58DiNJ3ZBHMbDUi3XV*bGX6AifdCjN'dYK!T8kS5MF0RM*6V-pm +r+G&FK63b@Y-lT64ArShrf'#81cP')JLfMAIafYm'bhS!3(pq'*cY,Y&GJUqj@U# +YUHicMhBBL@#r2mTr5`b$kEih6A$TCl[ea5N0`TXSK&G4lD$[IZr)FDEkEmiJ1bC +Dcj!!!XlH`Rf%dQE*k#h@d"[QF(YjV[@YT*N3[+!$'qk8`!pDfcp3#Y*$0[jF-!S +iC[r'GA$8l3%-L1UFXirU%X1C&$cmXXiT9rN4`)#IcP8D-Heq14*PjBfFPPEd@TC +[[bIaG5NVF)G36V-da@14UhU'KHZU"h8eXZi6``ApHmfA,P8PlQ+l'`r#S*DYR9M +b)a"YfN(L)2f2k36VNa3QZc+aC5LqQ*)RH!L&%LUM3h,N-&X3*36@H`0-5[bI8IN +SjG-MPi[E9Xj6'f4*[+A0i"BTClB"QBB#jAaJhYTD0(`N8-jK0B1ArhB%l*NDiLl +iZr+!b*jTIZ+rNFjCAI5dThIk1I8!4"),@T2fVCrNCQ&`YXCBa3*mbq%[YkBk"Kh +4V*!![&cH1VY[iq"F9PMHNUVYL!M,j6MFTRbi4K'JZB-#EdG&aERVU&8PQ%&j8K# +$3Fd"mF(QN!"rQU3beQM2M-VGf)fd!3+@@8FADa00,)B&JaLSk8mi0K#%HV59D'E +@)@mJTT4YlJPa9-Qd6F3L0m*`4LPba*!!a)@)j)V'6[E0"Ej,(bF+UjZ'P&TPMee +SEK-cCF3e0YXY@d0`Y($&$b+895YaGh!F5QrId3HGQc[*%eLCGF4ZU&*Q3`0B$9Z +&L%[EfMk@4-ITNjSf"00kqpJ(Bk0'Hj9%BG8hr*SKY#,"V&'RG-96&dQJ38S-eXb +3!!p'q4I$amjCVJiAFKh@Z1N4"ZX(E-c04Al&G)*fpCA)I9C)0R0,$&GUABNUHeV +L+GB*@6)X5,kr(T5SdN@$)Hf6VF`,8aF$LQkCMREUYYAE2C!!Y4S44#r3q%K[I3A +6DhCXq-b!JDbr%[IISBJi90Bb*i[5`Nj4*fl(kKf19RY2'(`ZmJJRZFA6&EFq)rm +4GK1m"e*,(&ELFXS6FP!a6,'CY2IeA$Z-dGl1Pj6U-08'4$S&RbDImXpG84XJ)SH +"T+4M4NfVPJ'+34F*rY0C-9"5ekmG9DNd%"mXBD1!Ue$PINK'KY$,+",r8JQmQDX +a!&IDR&@JVE8aF,3Jc'd@Kd0(IX0Cd[!IK0D2l[ZZGr#QSc!8"qhSYU)MklREI4R +Be8B'B'%F!"PNqK[4q*GfKK#lMTTMV#Ne0j!!$#d9-&3JIdE4rr*$8AqPbc!kaT6 +GRNR%jUU6PLNJUL5TSi&HcbE!Ge00iI1cL$r982UYV!ReISQ$Gmd(e-l&#GF(+'I +[kR($bUq8Z)*p9(b%rf-paB"-`'4!je8IRh*j!)3K&c9&[JVp3+),(9+r'p[GdEF +SbfYU3Z%FH*TBK"*aSLJE1N(0F-XQ#b@1C0%fM2&cHl2reYC)Mm$F&KPB8FrE`4Z +P`jf"'CQ5acPUq@5j,BqqDcLVQm"-0a3pb3ZFmGE#41M)L)k$HI%a9XCaK4'%+[e +%rfSQrF@r3p`mADm"!CA@b(41jNKr!,%bS!a#SB9"T3p3,+f*-FA**-hFTY(ZbHB +jfijh(T'`e-N&#ilTX"Emi+Yqr998MM)(%m80BI2c4#DNTq1LV#"2IK)mP9jCFMM +XSR,c2iV3jVTR#fK[&q(ZS1l8LjBFH''UVUe)2k&iZ(C*b2k[eC`df'L6I!k#VIi +Ti!e4qc8aVJKrB`BIbhkYCadd(RCB@H66'[0cUE8%U$Njd"NqL9Pm9NQGBRcqe84 +-K[Jj5Q2DbPA!P5Z8AN6'P#rJh-d![#G&$S1Nb+E9'-6-h[e(21r2'NJh@JRkkKJ +BCfR!Vd5SYr[FX,P`eifHKl*EL"pi*Q9jM6lrj`%jZ4)DU"3LB6Pi`TYm`-PF21m +UqS9d141Ucad@JKHaM,0*Ub'%rUiV&AjaRf,3lkV8iP%$BGV$Vm148%eP#I[1103 +cMVMFPTae*bcM8JEId5ei[0R-55T-i+&K1l9'A'@B!`MPU5&Y-J@ERV(6$SlH"R8 +B0#3meV-biUM@acT-`1Ib$jMZXM!1qF(9(qN40p,0$ULH)SlJ1Ychr-B5FXM$F9l +qNN,hSp(##0'4k*2"qbAr&(Q+Q2U&h8fA3U%ZN!"V`fe#FS0d*6iNJk9"29[,jMM +Cb2p3lb)3Vp6j6hd$URJBY`1QXhU`C)cQcrY,4S5'hI(`iXeEdGXZ+a`GFM#-UR[ +fPPQ2[4XX`KEN9ihp0Nl*8!%[i%+-5UX`Za8K-c*JR4mrc(i[2T5ZXLKa*A6NcBG +&'GZH#[KDqph!ICYd!,%#MH$4GH#k#KADJ+@kq`6j+8B[j%T+i&YDV4GSBKDHRZK +MPGY6rV60@PPjDZ@iFK1d*2%T)QDk)L9a6*Q5hKN5DJ3+H#)U8+2h03-%+4@cHh6 +a&qjblK`Z)%1'AiVHmG"q@'"RMID"XZ&KA9bpVRC%SJ'NjE9'8rHIET[@8q@eiRj +0dLEpHBYZ$))KaXK3%c3dNJ@3!0K)U3CdiIS(,lh#kSkmqZUA(59*(l$AM8'%!XT +G(&hf90l`++ZdrlD&,9Z,P+V!IFM2'*0IpYIfakPlCm1)Li+3!!K*H&9GNSI2NU% +[T3LY-BpRJr9)YDL$9&kU4'cYp0`(Xh0d"JLKpC2-S4#0FdDimh&IH'H[Zi0*&k& +Y%"P8(fTL&Ha)"V)@,[$3,&ahQk&'ZGDaU)4KT*CA*NUI@5jd@I,hmY,3Ur'AZZa +V8khkYfd8Xl"EUN@lHI2Z#`-9[Cd"Bl4R,RJe5*mTp"*`M8JZCeP3i0D9L9iJZZB +r&jG'&1$ZUD9qdMa'KSN1D(0p$@6f49QJ3`GfmI1,er+PCcMf-"lPj22!Y168M0G +M3pcm3"Y)qUXbl8ZE6#AE,Nj8BAhJ*@9L0)%JFmQFI!TQ6&*PXH3*9a0N0$J@*UH +ZeEQc4fL18d!j8!j@+6apV%LTST@#Qp5$N6'HH'!5PfaZPEf9q4@"kBeG!4L6@bj +&hL0pU1I'eV3qL)e[U[CXrk"U1Fm(HYbd)*h9X9aR-VSiiaZNNA1aY9J(T[2`XB` +B-0f%J)Q!E1d)"k#Ra4Y#0#rK+#$jjS'))mIbP&EH$"*%GZ0YeVLh"L5rp4'NphS +X6C5LRDaFA&iX-,9L'LmLFLQjKk@@@Pr"48ATJSmk-I`!dN9'pdj!"qVpZ`L08Ym +VQ&5C$cNlH!N)UMbqJBBZM6e@L[d[A`!H%PQbN!$jTREdKaE3KEkZX"LmRFQK3CE +I`&j-Sr8,%5eamJejV+Jb&`""!l9d`U&3#5b*`Pr$Ar0BkP#+!J'ThK*Cf,'MVTD +`""c@`S4)de[$`ErR-m-e"0L9f+*,K$lEReejjfk)ELNL!qeGDTB$6(GRFLhk5GH +RTm"UTIB[32#"a'aNlTqSQde+TYB%J2lm)1dj6ll3qGXZE`D`NFZmaBQFYe2Z2aD +Qb!X'UHT'[D9aTMCFf`e$BDhI#1bc4Y"qSraRU"kY&5eNifS8'C0f4HNr2!hf0CQ +HahMJ5'h*B*'8B*VT6%8IlmC31"F&$&$Z!XcSjT!!1LPh+Z@&lVYS&BUJYJjAB1! +mEV96'#-"9*heH8kNQcir8klcG%JZ#!4ICcr5@[fE-`&"fZ-bVm8*LM&96C%E!,T +G+&'Hp#ASIRrHZr1CZkrRYq['eMp$&T)qm&X6(G%S6-XFpTS,[1LEch)VKZZ(DUr +C"THmEh*bm0F[)LDA'aid1*!!Zlq`LPB[@SH8[$Bdai,fcT!!L9&DVh2'%DX%UDL +UfLDbaIBH2G'L9fGQjd&"&dGX,c[,p2eki-bGTr1h%A(h)cY@CU0pEZ[[#CpX0Xa +rG$'8p8'Q4BDL@#M9Ym*j(133H#%%QQ+MrT&42+ibbh2+RFTX$KhQ`A1f!5N!eSQ +Q991eIRCVemRp#',Q[eAbeYfk+8QLi[dkbDi&!kV9Fj2ACeP`8@r)UD#R)8AY#"I ++0p!pJ2,fp'+PFkVEI#GhJ9"SN8h1,$)klNrD5T1UT9i)@i#h+%,P2)cqfXX1Ypj +)U-Gqd&F%rASMP%Qc6GK$2HPHJJMGm4hKS-E&QrL#T3%R%+&f@a3Q4miG%$@4N!" +N,VRLQ4YP'bD438pFN8cfdVY"pF"pHB*#!UZXK,V*-4@LfDXQJ$(-l(e%rBTMk-6 +5,q'GM[-$mb8)k5kTba0IeYfc+`b%M*lCF,hqmVFjj[XFCMJX9h)@6$H+H(%lfkG +Dq+`,@`V1)6MbU9pPeRV"A&$[IJP@cccVV&YXD6Gp4q9KXdm#(#NID"$BV'4Y0L# +LVC!!PdY8UR"Fh(V#lJl'%%`QAC,Ec4X`cC,pY#R51[R*cAT'4600ZTjMM"8"b'm +q*Rr`IBfNe)&e[T5US3+q,bF#UM'f[0(T@CaRLaf"r$-95V&%@EjN59hY)K4G&4# +TC25'EQ+P,&Xc"+V[ee[Z'5&qME(NaGmR#2iM#UZA(Rj6Yp!h1qB1VKbCic"A*Pl +kE4c3,HlKe"Eb(mX5mqNB@)&-Qk[0)9DUX,KYIepU$PKl2*`X88K6XdGKZC)PHPh +&MiFA*#fJL",@CaK8#k5cYTlCKMBaJ,9CEI&*P"(f,e%8(Qch3)I)*,aN#r0-&ej +@UAdH,4Pcb'P%61Z1kQG5TJ(GH,!Y[88(5lXIcm8P$c'*D31B4hIppG'@RfZcScQ +Y-f,+!DqhB10kLFPX0TV"U@U0J6qI5[eCB9B@YbIFAPPdV69X2I4JjK`+CT!!DaK +l#iRZ+'C-1FYEMlIET$A!L-J@qKA#CP[HQr'0jNm,M+294lDV0`LZXL&Y,N*+FNL +!U*aS"(NLrH90C0Hr(")lhXK[aHU(GFcECc2DP41-ZFc3!hIK8m9j8'ae'V)Q',T +*F&imC3r0&YBmRV[1*&K5f6@CiJNAel)bN!"plLlAm"5B"qK%jXlJ%XL2eDF211C +4R3B!CKr2YESG+B"3J+&()dJDII-BA#""dm-ZGdl[@FEqQB*'P8,&EKA,(%$$-6r +aQ6$ECU40)M9EJe)*VAGNJSd&dNre'1d(65CNNem,5)Hp,TM9)Fd*b6bDrRP&+G6 +C(q508N[HdL&3m*Rq8,le%Ge&p8l1S1+U0cr1qUlrHk3BChfH,45ir0bLB@aPmIb +MAIDLj0NlemlU(r9*PGbR!I&M%[F+6'rSPc'6@A9-T@,0PXIT1h0E@eIP@FhUKLG +jaT5FHejK*1-R&'jd3pN5`3(S$,jXhhH1f4eh(#2k0MNJAfA[LebJFjS2mCaKA#& +TCk"%`mL"(cr&jVV$l[U)(j`[A@r@$YCIJNF29!(h14%[P0@63epB4@Ja"JI0dET +*@ZilBKEL%cKiX@&'EdN$"5+5bJ-BF'EbcAlrB+,,'BjTA4R'2RXXN53dTR8hCfd +,Rpk-ImaSm(ZXj3LIfAj'P6lch,0jJ28@)6EJVb2TJZFL(fmiHE[qNrr[jVc+C3F +PK84Z,*T6G5A@HS9*C)b!m'Eda&c[#,RNXD+XlcRa#1+e8BH9IX*4Kf*IVaJGVpR +Fp`khpd$QC5-'%5U@ek)2&AXb`ANDimIGPrqiK$50YS39fi'PX(#dU(bC2U%CHQa +1Uib"ldVZDJep3aH0#$H-*K)VChIQ8A@J39%KCFjT6lE9B6G05MHA%+jK)%JHK-@ +Qm(@DA)jRj!-2bE+kGKZUC&N&iJJaphaQ(hc+QZ4LlNZjYXe`S)ML5m%AL)4TH@@ +M4*fhXCaD2,cj-B%J#)9el%fX!HEZ+MfXk5qUd,dUcqR@d*l4E1cal"VSRkkTRrF +6YR@B15pZTMA6KjSE66E&U)AJY!GRLPQCR'JU`3!2U*`['95iJM@[62kMBBTeB1& +SHlA@#jk#80K6$F*H9rd`Q3dX%k[YGIcq3**03!PR4iKU'6!pfpL1iEXFerANpdh +h2a6cH)IHdkY"Lbi,"4*0Q,#Y!)6+EbL[JJYEbLIApl&a,aY8j@'cpR8c0`-"j13 +TYC3c5cl5C@ATJA-F3V$#FEPFcA9ae`cq$elG@Z8G*RN+KaXlqfl"lcfUb0X6aNZ +`VM**CV1EN!$m9DCCIZC&8b2QFXQf@lUJqXpa-C(iJ9`AI!'e&SpaKUI00%Vi"[K +cLfrGl3Q[,Y4i&(Fb#"(iKKFFk3EKSf5SY!DX9#N-Gd!`SV`cc4m!"rYT+GdlTpa +-IN8Pfjj-`mUGUcS9J2bl2LSlp+1A[ed5CcCARV@m4eRZi$X$hJVEk5N"N!!&4Zr +mM6S,09H0dkdJ"+mr'-cFYYHIleJU2U%)b1PU3P1Hj2Al8Y"(EXQ$X``FRM6XUNJ +MBi2bFr)'iC*F`+R0NQSie2H)[UI39T!!BZf0kBd-FjI%DaRl#6p&cLNUFj)AJA, +3fb$HRPHD((iB'F2Pp-pG6+hGP4F1&5T%b@`baDELFb5&(12Rh`Qhq&+!'S1l6DY +BX*B*[F"pUeV9EcN*@3ScBc2'hB++R#K[#(4"$fa0Cik"NS1+`Hk`4h22CVNm)%5 +3!%F$fm645K2Y1IcG[GcIVpfjbfjH,M(p03(3'(BB4$BHCUSLrPq41hIC[f642fH +DYDkJRjjmNIBbUi%6Le*Ca6dPq&kN#0A92f`45`TL*hDK&+b,Lrlr1!0C%223HRc +`ZTmkcK@1-%L-2%rVj@NeHMXj!%"+T0Pe5(@@h+FfQ,Y$Rde4jY1IJqH#YKf)BjR +b1cYR$D-(9pfh`r"2a1V&pi%4V4P*j4XF$eQ'Z6KN#'L&A9)YYCI)Q#AbB[L+1r$ +QP+8@RL%,jBr(p&XSQD5&LH`dIfBZM%bT*U3(VAb[Y)NBIRZ+N!!L[BDMQrJm*hC +$[4bMR9qDP2KC!,B5C5PVBX-!6XIE'80f+ki&%f9pir-JrY8$TT-EUqRT`#PF`55 +DBLbbq2L@#qZk!S50r$0mZ0Ic6k',()[-TTIV2YCC$3$r6+3h`+@3"!%!!$i!!,B +E`R'h")c#!!!I+`!!EK`!!"N9!!jCU3#3$Ne[FQ9'D@aPFbjbFh*M!!''f&*68N0 +%Eh9R!!$rN!3!N!U!!*!*!F8!!!'(!*!%$`"#`G8(%kET#Kj)d"X[(CU81hmG*$H +j&2YF*[ak4Rfb800jijq0BYGS5AVUk6-!prTfVU[,fGl'J8-JJ,!EiJdX$md29%a +)AZKdc5iPA'R#Zh4T#P"G%lIQS,B*LK"0D3XGer9&)+Ea,$QV@QBUFL)Zk@kRD-% +4Q%+V`b5KTHlH0-rmF8&CdBjqd-4UR`lVN!$(VhC&DPq!Am'FkX92i#klZjR[M#D +04d9'2Kb8+*SDpY93-fLfGAekNC!!YS)lZS'hYfSV%'CAVQrh`kUam%ZRL%'!q@# +Z)!4j%adfY%(-lQXU@jjMQV![P(X&fX%4$mQ$3k99$%[p@DS%%&ai4b@50b2jC5C +lcVS@JqX)&l[INPRb6p-*YpYAR`4*9qYD@6i0hJ1VhC%N23,&*NCpimaJZ4!1Xh! +JNb6LA1a3JD`I$)$LQHpZF2JiPZK""&&DSl(crLAE4ceP1#B"KL,K[r5YGG-*f+X +1YQiPPk!Kre[VE@c#b)I18kc+9`QKGprlULMRK640MDc24J5PN!3"!!""!"#eH8L +*Y`5c*`!!E#8!!()5!!!C&3!4IlS!!!EJ!!!#&`#3"!m!6@pbC8CTE'9c3f&bBQp +Z,Q-!!@%F9%9B9%0A588!!,(rXIm!N!U!!*!*!CS!!!&X!*!%$`"#`G5qFmEdFN$ +GmUIG!)L#"Xf'1h"4%KY#*ZZYq"E&HfLVNVP4HXC,aRQ5P6fADT%[%$dGi+j,[d@ +G948S'"j$C&NbV&ZHZAMQlD"e8q0+Qk)eAmBm$Va)qV,5&+SpEb12j*9&rKIY*i3 +lbq5IB2RcTF(81,qHIhaM6%L'l8541m$+C6&,[,k9!HNiVU*+LDQE#JcCQ*D`[F6 +I5NPNY-R3Rke2$Rh2$3I4&),F%6mU,3,+Q#`*#N)apA4d5SR9#[34eiZrm0@3!"A +*CXf+%P1r1eahdD!39J'c2-EmchN"F$fN`MH@m%5m@IkLZE[*&%EBB#l&cq4eI2A +QrSKJJ-eC$"4YJk$RAJ9Q)PPm'V&dbXbP[2,61,,-DVB6i`PX9rCTQjr``9`GhGr +G5qk5D#j$8#KFMZaeeQTF9BaY1Ph)S)QkM*&b6-QcVGdh5rUY$0peG-[T,!B!d'8 +@+XfRX!["FN25cMC*L,@QZi@F3%,"e-he9jh`$*bJFENri,HQ#ja1!"T(5NV4+q[ +VaFRYq#+U4($K0jQh9jjkDDYi%CEaV,kT4(J8eFcrmMPf1!9m8L%*PQ#lN[I%($` +%8Je,C1'D3U-289daYHRr#HY)p0F`#c2RLc$e9`LjY2A1`Nd56K%l[223%6IN)#K +J2I5BS9*iFKl9P0F`IV+rjYa`r6kqaQK4M9K0S$mmP+jXaH-8ci*i-hrE5h!Vj4R +T!V+`a@alETb)hZq"'QITcHljLFled'G6[#iab#8&5(Kp$bQ$C`m[#j22#qbiLm` +iYqDQplGCj!HN2fFFjf95KP4DE-SH@IFiN!")JB'h6AQhY2Z`J#A8rD"T#@C'PN@ +SJ6*45*)pL)16hdD(F4$T-'rSh`K!E)'A&f6ZPm)1qaYJEBk`md$ZKV[j"YMcQiH +R$Yd*ZcYmN!$ZiP'1el)`D-"@Z%5f"Ae9Tp1M%1r#KrBZE"'#)Bl0YhNm#NmB8e@ +Z5Nap08d@2MM*V'5%@#3E+IpKHD0MfmmAR1kc5`+`q@NaGAXViq6EmS%jThdYp+q +4$aCjN!$Ij-E4'Rp#*)R'I1P3j9DrQhAM"RFk,8JeQaM1*$TU+!Nl4V&VJ9Sd3pX +)q5iRmiYA8Kfj&3h1(*XK44#BF'Jr@2,Aa25KDKkFD#q"bEK%&,MI*UHHAKCS'TD +kFD!N8b2%jERh9BmZL`-Be6lT`44TliS%brPki!#PN!3"!!"$!"#eH8L*Y`5cSJ! +!EK`!!(3i!!!C&3!68+`!N!1Y!*!$53#3"!m!6@pbC8CTE'9c3f&bBQpZ,Q9iF!! +"T8P849K83eG*43!!XHqal`#3#S!!N!N"QJ!!!@J!N!32!%,"e+8[*()C!kAbTpd +!L))'d8a2$T)*Nfq6,kV,#qIXFE%H'I86IkFCcdTFX"C)a8PCDRX%V+0QE"h@Pa! +f4#eH$l@!bcUM5qQN'emXr([Ij(-mV&Z,a$rm!M3%pTk1dE&Xd4pJ)@e(B(D1U#p +c)qb%9iK5aV-XEL"bN3F"JYNpNCDTUMH5[jTpihBJdV-`HP94UkTJUI6k$3SJ,Je +G"IZ"mP"j52Ip'NCT,Z45bl0GpNQ[GNCC[39jV5KVcd,DI+58ZC2*Bp#2PP`X(#p +h#X``+,f`3KUMGCeYZYpRN!$[j$G+h'*R`82U9k[(,Jplc`2QY9D(qDD[+iAdqGd +l$D(dGmchEX(449ZpDDPJp$#'pJPq(F6@f%K9lhDALqNSMe`L9KSZ+bqPSi[Hb3( +ldT+YE(32kA%058p8XQMI*6M#iiqU-JJC$HpFj6l)D%)4#A'YhLHffF'A%`,8q2D +F"Xjf,2bl#bb3!(V83X(8FUE)AQQE9f6'#RMaZL&GX2kN[Yeq,d(d$FZBpbT"[hF +R*CQj30cJ@aeM!&2-m`3RM,3m4Zj6L($1QL4!P(Gq*KUVh1R*5+@3"!%!!%F!%,9 +NM1kh",BX!!"b%J!!GI!!!"N9!"Gm)3#3!kS!N!1&!*!%$`"0Eh*P4QPXCA0$BA* +LEfj3FQ9QDAJZD!!"p2K849K83eG*43!!rj!%!*!+J!#3#3'D!*!$ZJ#3"!m!3X( +8ZU1&L(TM-mLkEVjK'@%m[NR)Z4k'abkE6,,Y`QNl)dV%&6-Q4qdEE"[ceCfIV`r +[rX`E4q*`9[i%PMmY#q+#5pr'b@Bi8@DhK!kKlSV!B!VA0((9%l&(YGNh1e+0[V- +C%0N2iR8fM%M!Id$fmbAY$9Hkk%c*a-lMRh'8E[cfXmS#-HG&I&Gr2,pCrH@5TrQ +0qfi``N&"[28U5,@F#(jq@E#pcCCXlVKJh`l3MFCQTIaUm[ZKZEe!3X(8LR0T,Xf +Np,5XLi*8Q6*T19cKEaM-HIiBG1,9TBSR42PUF'H&"l8XY3C2m+%@5JiR%91l5C, +RJ@+T'FR%'-C(Yri[B3D*lbk89T[SRL%`TSD5B90Zr)kdA68FT(q94Zf'k-P&Z)m +DbkE6EX[5S8H+X@QFNc((+lZK%lXb[@T%R59kJ+@3"!%!!$!!3!#3#R3i!*!''48 +!!1SGrj!%!*!+TC!%!3!!33"!YL!"+,F,86B!!"N9!!#!KJ#3!p-!%D2b!!"fK3! +!%Mm!!!S"!!G5G@jdD@eP)%aTBR*KFQPPF`!!$`3"E!&Q!XB$6J(!rj!%!Klrq2r +`bd!!!)!!N!HPN!3"!!"'!!#h",PYY`5jE3!!GL!!!(I[!!"f)!!@l-J!N!j0Eh* +P4QPXCA0$9bj$BA*LEfiZ4%a-!!(`2R0SE')rN!5!!2q3"!#3#S!!N!N#Q`#3!r) +!N!32!%,"e4JL31qBrh$r#$T2`[2FIqd3c1i$f"@[UcNk@4h1R&44J`Q(d!*QVh' +3!'+Bk-X[UKK()ijF)85AQd2U3kIGi-II@cNiLp"fa4@bk9iHN!$68*KjhH!CcU, +5h"PHk(daDXh#@Y)@5GTM[-2!)B(BrSQ8U)kB99Y+cdA3@hLK*G0I5)c5*k91`C1 +r0GbUqFXBZb6d)RKjeAPS)c3mmT1@Q`BIb)qJ1N*-bQEP%#$64E,+2TQZBpiEVJ@ +2jiGeCQlMhX+PCSi#IMkP2,UMN``SjapR%A!49N#AMU5Z6b#HC`pp@jT9kV5!Bce +l9cL+@p[4N!!!TC!%!3!!4J!!Y`5jEEF%Z@d!!(D&!!"j@J!!GL!!&Jq@!*!16@p +bC8CTE'9c3eFZ3dC00MKV,N4-6!!"-#jcD'aL2j!%J!$rN!3!N!U!!*!*!TX!N!2 +c!*!%$`"#`G8B)N$[Q2p`r`Jk6m,ch(rXiqHeT`&IMcLacXLrZHNQLf&JSD8q*1N +Z$`GMGU!e4+&#pDk+aaUX8h[j[BDfb`CE#%e0kfFDQMHEHTab2'A(8@LF3m+$RKr +U+3cYd'X+1HGZA!Zb+)2dqS@LYYZ*f[#K0FME)XI"kffT!!Z6`dP(rbf44(CqSGi +*0El2Xk#MmV#2@-EZX5If3mID!521lT0aBP58e6[!60,K-3G&'eD[qR4c18KMA#* +ammbI)+I'eR6r15c'ccT&Mp2C8P$CE'B%0-EBj`-1D((RM9+a@EC6TBl8S+L$lEN +&b+@cl6D41F#PN!3"!!"$!!#h",PYY`5jE3!!Gqm!!(Um!!"f)!!63*`!N!j0Eh* +P4QPXCA0$9bj38%-Z4%a-!!%Pi(0SE')rN!5!!2q3"!#3#S!!N!N#P!#3!qd!N!3 +2!%,"e4JL31pUj6$r##`TiIRZ2rCJef`-qcJRFKlGa@rQ+JFl#Y26RdYHcImU"!m +3XFAhb*MMqrZEel*$BKem#&ZU0EcdF1e$)FK"8b#ZqF3Yq*VEN!#fiCH"-e3kb(! +IeA1"q5QTKr2+c0eCFqrVCZAQ'VJ[Nlemc4q+hU*qX5%#3$BEZ[XUa`jdQ#E3SC6 +b*D[Qb#DLhZ-DYrJNS*YSFS82ajB+,U83&(Be$ppbqPd6B1MNU-)U#0j*G`@4TRh +3c$iND`h,$C-YdJ[5Zhc"b%R0c1-TS!kJ`ll`$(Ml'4G"&5Q8m!6Xj['m)J#ATS# +PN!3"!!"!!!#fm6)HY[%b(J!!H9S!!(`6!!"f)!!3iam!N!j08d`J3bj$4Ndf1%X +Z4%a-!!%[8h0SE'*MCQeRJ!$rN!3!N!U!!*!*!SN!N!2P!*!%$`"#`G6U30B3p+p +mK@GQbh[3@bE'DESRL5ca%)UMA+)@Ei'8fDG"4dpZ91#J*,%"a%Nri9%RImjK0PI +%j*D$a2[[QGMVm!,p)3GP8[HPmlRL1%5STUhale!V8SFj1"e#!(KhXrf(NB+e-5C +,C5lK8+[PP,IPbaflBkR!lT!!@i[bZU*aG"UIS$$ipP,pI4,E64F0&J-Q*2UpUKc +4922FXSMh)QbU#"klj,G6lE#DSa$pj3l')"0rZi'jTTAA+@d@"HDC&#Y0r)ITHM+ +'FdpD-kmkmA#KGSF$#JPBhIhph$3QDJrG6r@+B+@3"!%!!%B!!,Ea-Iqfm6(r!!" +k[!!!IB3!!(BJ!"E&&J#3$Ne66#"09e*eER4TE@9-D@*$4Ndf1%X!!4i`FfKXBQ0 +QE@H!!2q3"!#3#S!!N!N#V3#3!rN!N!32!%,"e1T!eK2i8bb&CfD*B)5M*XCTThp +ep%ZHIR@p-Ip%ih,E14XdeQrbm'Y4hch1a`PLSZaGC)&JM`h-pCEhDDCqBd,%GkB +89&mrk%d'mURXH8CU8XfF3XB0%rfepPaNc8@QVfLf[GQEhJ@1la%KN!!D,Dp9EVD +-85#%L'X3G5+Vd6*rLrHP[d2q)5K0J%(j3UYfR,hhV1PCjH@SAS%FU[PEe4hrAQD +ANqDIk0!PM3ap@rjXrplm`Z''HVk-If(baYd%m9G(iA(fUABE$!L2M*KJlS`XDXY +eCcLC)Q4MlJpJ#PXPJ5R+KrD0*p2lErh`,QK1DSaS4amcKN#PN!3"!!"#!!#fm6) +2Y[%b$`!!I"-!!(lb!!"f)!!5Q,B!N!j09ep08d`Z3f&bBQpZ,P0SE')!!IBhFfK +XBQ0QE@H!!2q3"!#3#S!!N!N#S`#3!rS!N!32!%,"e1T!eK0Grcb&Cfak*Si$*XC +D535IC@hD0q[pBU%,+DlE)IG09DkiVe"Amj!!1iPXFS'8Fc"Rea6l*8jcRIKTT3X +82K45GhG!KTmV45m*&1VH&*cDmEANeM8RHf3L"b,HMijr)(NINdSKck0ZFi1r([` +@MP!FTQajL0(Mc@mIKc6`'R*e"`jQKLi9Q9S(R3ZEFl[ZHU#+N61,d0Ye&1LMpqD +B'*8R@1FV3*D-4EP$9k[33Far-dq8S*Dj0T(3Z*[jq#EB"TCKR5#2[I6qjH3QB'f +3!2Z6H(J&$#ll6Umi)e)P`!2aXYcq`N8TpK!##KaarIj)A2cqQh!kJ+@3"!%!!$m +!!,Ea-Jqfm6)2!!"pK!!!J&B!!(BJ!!m%iJ#3$NeAAde66#j38%-Z8fKXBJ!"iQ& +cD'aLBfCYCi!!rj!%!*!+J!#3#3+F!*!$m`#3"!m!3X(8kN$@%[FFR)9RE(SP%V- +QaPk),i4CkjGR4HCr0A%+p'!mdc9GPGd,p'p%(ra$8KQFZT6pU'VErMZDqZ@hPY& +fUS1+lUe5!5k!8G[ePA-84'c1i"Qmd`-NQ)DX0MjrNH&QL6#cI5i##d#+RpED5Bm +AhcA4S`#[iF`Z9NiU5N-PMP3NjSJB#Ck&a,FIc*p2a&Ne(Z"XiQlZTq-rE-Ji6-I +XbHd9U6&DX'mk$5CaPQMk9Kc-hZ#k!58h'GZem'1IZXI,!l5(B'm'PBN*T`+ESl% +,9X(d(0UXRcZNk*VTkel!GGdj86%&kD&rpiPlh5!dak3!TC!%!3!!-!"!!*!+I[) +!N!Cf)!!!*P2rN!3!N!UPN!3"!!!`!%!!N!Tf)!#3"p-!!-#crj!%!*!+TC!%!3! +!03"!Y"eaD,Ea6Mm!N!26!!#[BJ#3!h)!"34e!!#"$`!"4Xm!!#j6!!4#G@PXC!! +!ZJ!!3!!6!Z%"p3(!!-!!J3-1rrMrm-Y%!!#!!*!(TC!%!3!!1!"!YJK,ilEa6M- +!!)#f!!#823!!J,B!#&K8!!#"D`!!+hN!!",5!!-S3f&bBQpZ+3!!Be)!5!"T!MN +#+`(!rj!%!alrq2r`bd!!!)!!N!HPN!3"!!"$!%#f&lE"YLBC+J!!J3m!!)@h!!# +"$`!6IV%!!)(5!!!(6!!!!q8!!bK6GA"`Eh*d)%aTBR*KFQPPFbN!!2N3!%m!9J* +"!J!"`2q3"!-1rrMrm-Y!!!#!!*!(TC!%!3!!03!!YKHf`EBAYX%!!)&V!!##Z3! +!J@X!"4M3!*!15@0[EJd!!DiJD@0[ENe"3e0!!,(JXH!!N!U!!*!*!HB!N!1!!*! +%$`"#`G5L`,pNj(cG#Y)Cd!IRq+M!r(hll(3c@PLL`hG1JM48Mq6Q'G&-*Hc%K&& +%8h'&K0UT'Zfc3E*aKEATDa*Y5D&A@c8$F*!!96'kY5GBbhpPh%XA-p&!GPfq@ce +PdiQVK09[X$`C[ipDiYkQ4KbjUd`aC8Qim`"CJlm[2'*mT!#PN!3"!!"'!!#f)"f +CYS2,H3!!JG)!!)3N!!#"D`!@p"m!N!j0Eh*P4QPXCA0$9bj$BA*LEfiZ4%a-!!' +JZR0SE')rN!5!!2q3"!#3#S!!N!N#Y`#3!r-!N!32!%,"e,jdKT!!E1Yh-bGa+)X +[3R5*TDVZ$Q*N[DdalF$%hJXDh"$RH$GUMreIA-8%"(qjrc6DMYllY)Z*)Rj`K"m +'LHq2-bHlS-0@jR%$IMTFH+!+dD'b!l8TKBJl8qm'8DcX#lF9eei85mBfJK6m+kL +VP3AME)A1D+@2F`f1a1BRkC@fkP@fcJ!R[@8riA9hkJ[VT8EaPG,*YKSa"R,EU&J +!-RRr4dbZGjUS%6#M-kI4EAeJb,ZHQ6GHUarT!E#A'e[($8De3"Jhl'aV'[#V!&G +C`&mcRQ)"6,aQ%5ldY-ESdbMq%imIk"&$S*a"'6AljQTi3!#PN!3"!!"#!!#f)"f +CYS2,HJ!!JVN!!)@(!!#"D`!5QfF!N!j09ep08d`Z3f&bBQpZ,P0SE')!!@G-FfK +XBQ0QE@H!!2q3"!#3#S!!N!N#V`#3!qm!N!32!%,"e,jdKSqI*MFc*jAh0c,#G46 +lFG$DfUBe"k#AFTR4dal[eHarU4mSpf(B0&X8R4q0I)6fca,kG*k4jjlHU8Ck'Vi +IMCHM*@jQkVY'pH#656j1j6#"c1@%R'18akaUKJN*YeplP@FNU)&a!$EQD#5N-+E +IH8rhae@!R)LhlDT@`r+%Q0i9"J-Q**ZG@S&'SXAE(&2YCUQf4CX(QkV-`N6bL0e +f(rB%!,ScdaR0bEGeKd30bq14jaN8pLd6ApYKpMfQ9$mr09kPiRVjAeQbB[Na`dJ +)M'6$bl@cXD9,5#dFeB-%44b`R0eXUimN`r!!TC!%!3!!-!"!!*!+K#3!N!D"D`! +![PlrN!3!N!UPN!3"!!!e!!#f#%[MYJK,i`!!J@X!!)EV!!#"$`!&1'%!N!j*Bfp +Z$3!"UVeTBfpZ68&$8d!!XH#ai!#3#S!!N!N"jJ#3!md!N!32!%,"e4SF1)aDQa) +RpZ5*#VcA4'eqmGk$a@%P`KE+RK*Y+0KPGjYEZh3RcqSJ(qZ$I`k$5,$*Ta6HPA, +fUICUFmDYMA!%%ShGJUYh%*d&NI*hEkFf'$J,!@K%`,""AYUd)ATXV*2Kr3VrbmL +jYXfca-EqQGp'mF'R&2ZT5Y8R!G0(,ADjSjLHdV,G'EJ*dS[(L@4*qNi9PD9Ra66 +R4b"ArrRaBCQlqLmIQmb+#109"Re)AkBH@ZikM%'Zq(L*5T)FBKa684U5%cNA--G +`3`#PN!3"!!",!%#f)"FmYLBC+`!!KEF!!*30!!#"$`!E)ZF!!)GD!!!L4`!!$,- +!"("cCA9NEd0KFQ*[EP0eF("[FR3J8fpeFQ0PF`!!Y@i!Y`(f!UN$S!(!rj!%!`l +rq2r`bd!!!)!!N!HPN!3"!!!e!!#f)"FmYL!A2!!!KZX!!)K!!!#'k`!&TL8!N!j +*BfpZ$3!"S5pTBfpZ68&$8d!!XH#ai!#3#S!!N!N"jJ#3!hm!N!32!%,"e+,![f6 +NI0d+dKR3"qJJFB@i'fB$qIiJ1HD-D*5U+I&6mb&Zk1dBm6QRH3)J09f1'eJ5!$, +8kUe4E@Z0'ZRqTMZB9rqc02$ZcNd*D,"1kIiR%SkHZ@X9&ZeAYm[JD&1PME&Cl5I +aRe$GDP"-RNkEh@43G-eM$A*[4),BbJ#PN!3"!!"&!"#f"mkqYPTP,`!!KeS!!)r +q!!#'k`!9P,B!!"PF!!!'S!#3"!m!F(0PG@4[3f&bBQpZ8h9`F'pbG#jM!!(e094 +&@&4$9dP&!!$rN!3!N!U!!*!*!CS!N!1R!*!%$`"#`G5FhSaD#LedD)U4T@*PhAF +%')*Ei96P"ER(A-BVEYNMMKYKGTEjD'!"AfrZlKXr&Fll8C!!,EELQp42[eV0T3p +PmeIVj#-I*#&1I'4Q&eKSq-fIjX9-HL810$-)(@"Kd,RHK[2UQ%A,,XHLlMISE!S +C@YI)ARM5V%CEa&(iJ#R#FI0K8`$'eM-dM%"kXLKqMYm$8F)if60-cbKYm+jf&(R +)P$dFd!"#`G5'ak"X1EA1D(Z'9d-mUL6b*Rm@ZHHbFX+(al&2FmTcAE-4k+DcT81 +(H#@*B)mcmERSHiRCS1(IkIEDfhCl@J45MKc'4LaPjBMf"jfaqPjB`QFLPY8C'#1 +J8,#m6L1acd-lD2Ebp9dQJXVdQ""%U!NY3K)@$2K+,S!TQl,'b-&C+Il-rN3mN`( +p(pNaP%"@h@50qPeUr-8S+0AklIf)C`prTKXXI"iPEU5FP,L0kISSe4&!,PMd!L) +IH#ZiR$85Ce`2p6NSCK2"-erTpl+J&ScKDYf2p2ZfpA5@d"I[L@86,-1dI+G&jr6 +TN@94jYeErh3FHl#MpDEXD"&01Dpb)RZp'ClfG2CT)iPmje,6$hFD&GqGc%p$bam +Nj850P+U#dJ*"bffaTiZY9ZhBrJ$J!N,Y([5KJR4)P3&'cdq$!L%XZp0'Sjk#S&b +eSE8[2),BQ588q$$,F+$i(Mbk"'DF#MMmX@G20!XBbhqN`0[kBSRe5JBLiISTN!# +5b'K!KF!A4#Lr4d6Cq[68hhCKPCPp3m+Tk@(B#DUD8@*(1!0q#N8PBkXHARBlImY +JA+b!N!"&ZX&TddD%aGPH'pl`(ALZVJ,iVLGQ"N9m9QI%"+P!JF3#B[B2*(VC[H2 +`,Z%eb!,-E0-A0ElRFb0S"D@m&)6V#CjbKGm%Rk%2kK2rNk6a*#,6mNB"cHF$&Cj +XGm1D!,IVer54mYIZA`ci3+@fp8)mYGBEDq9rdE`XJkB6P-rB1L$+0LQ**EcLF)E +cI9EM88crE[k#dZr$1MJr!-IZ&EVX9IL[QpBNI`j0MfF$R!BDF-Le&rIGSh'rJ66 +eSd"P4jJ'CYk5$'EdKrq1R[k+9Qi*R6$lASeNIUa#C!,T1p!P*qFP52I&b5c552Y +3GAJR&ZpZm4B@B6"+DK`lEX+TE`rIfZ(&6-AZXPV(4[hSC%13!)DrZepjcJZLd'l +F)iR'A2P&[`!$-@edm"QL6"VAQNjP5+!HQcDLf(FAr3D8K+NR%2Ca1#e#ampZ2D9 +RdXV**ATYC)G%V&qY%K'm@FG-m@r4fpqf3UmjF&Na(q"@GfVFpbNFRda%NZ,%CJk +hBm6K[*%NTSE&Ei['Yf*QqE44i123TIGkKp&aKIGpL%p9eBKhjHG'Zla+bR$jU)Z +rP5fPQ96q%Fj,DmIC)k"239R5eklfGmr2QkI'hq2Z*cGl[%JHArF(RX"6If8mq1' +bRNqH[P-()KTaX+I"RLeMPBBX@mq1#&#r!0#-U*CqF38dK-EabNhCjB5TM4!jerH +"bJK$GDI(-[AG3QC$l`V*FhCKpf8+DVS(@rmp`2[&a5-Rdk4c26b4@!9I9H8+"RY +AcG5'ZDJq*Y'4)+Mq(AHj*%J@JEYdMGN(IhZ[M9SFR8*-NTNIpai9#0V!%5C'DYA +QSHUpVINMT(Bl*[jP@4bY,T8`4Dl3RRmj@pN-C#iR96EATqZhapj2-8!DH*3CBSl +PZJ4lM(B1BQq3!!Z5pZqq@3H'mI[B"QB"-G3SEj)qQlZ!%4-)3dM,Lc)09kFe*f3 +1644MJh2qKb0UVHIb0S+q-51'TJZ+k6TBJqCGPjKQC9XZ9FVYhqX*4V)9H6(PHFq +4f1@2XK(AV9bXXB0K-[45M3e$3UD2DhSd"@3&3B0r[PaMcPCXX`4k4jk@Y0TU*&m +VaabCfpD2212I0*)4$q`QRJ9KhI3Uc$&kbL)-Ule"#$V(DH%[0b%0XB4aH'Eb&p@ +kpY,FA,LqLdI)j)BV,EDUE`AE(TXC`DPHX!2XVmrMRkQRbQ,fcZ[@E'VGHVIi1B1 +Fq"FHm2%PGLVbMbhkUHFQCcZJleMa"aR(Nf,@Mq,b@YQ)!Xj"!B9SlZ5d*#0Q4"E +-VEFqGJc+F"0,Yi,Bj6)Qe8DY'YFFaHNa#&M(3ZaP0X$&!+Ummh3J(p!D@a8a(K3 +&9j[e)0YbjiR3l'!ihF&9$eDb!XMQk!K*X1-`RiC0H+rrHerhhk30#VRYX-iB8L* +(hpE)[)NJ*2@b@c'Y!Tc[@P5J,9f[4P9Q1D(I@4Y!$NPe)f-EcZcB61)hZqSc,5L +QS4C!3d!IYSm6`(!3S6cJLY$5J"25cG1EC&GH+ZHA0f(G@QY1eP08$iEqUh'&-2+ +CMV*b2l0%h1fAYKSF+hA"$(NQ1leq'MIHKlFBTkmP8'M!&3KII1,@%R[,&PlFPU1 +cXSr1hCdr+Lja,cH-B`+UMD*F9S8NPRAaT%aLqJbqr2LjG@31,")AIpp8TY`L-"8 +5D+Pq4F-$#,Z0JM3h2VS'AbpN&5ZXLd05J+@3"!%!!%F!%,B)!lqf#&Xp!!#)3!! +!NIm!!)EV!"GZBJ!!!A%!N!2b!*!%$`"`Ff9eC'p$BA*LEfj6GA"`Eh*d,Q9iF!! +"0K9849K83eG*43!!rj!%!*!+J!#3#3'D!*!$PJ#3"!m!3X(8dC'I&!hmR%YDGk# +l$(h0L[pq"r4%hU*"+4FVZc2r++hJqlXd$b[8+Z`L,[lC8qldUM`QZkk)qifUC%U +[GFaE#+$&AMN324PKrSGR9b9If`jFLa[8F9$K1VeL$cpE5*!!l"(JllG"`(p#0jC +0V9F9&5dC`mqI%$EjY@A`e**9mS(5(Uk!q#SkkpQLZ5VN&HGf0f@SJ%,"e-NiZ4T +fr2LD35$-+@X)k5@#9V6HJfHNil44"KB&l6qP9$,#2c)@!MkrX''"El2r8&i9c9f +GE5M2@hlf39Fpp5+9+#-iI'2(bfi@pZaXRUFY-dMdR2L(Y+CT31YqAZZ8I*ca$Lk +qB6fdMjd2+*lhfbNDe&'MG6!DH@a2ZcU0$cmFN!#13,GcU"#hQM`A%$3aJKhZf`e +8QC*'2q#lSa'HJR@P4C*R4lE3j&Q#aKbp@[EY%(-`chFfXhf''UPjP1l'E$68j81 +&Smmb$E24MaBeik'P$[##QkVHJjI3326QUe2PDq&J0NC8BFYJNI#aY'X0J+@3"!% +!!%N!%,B)6Dbf#'+E!!#2rJ!!Npd!!)EV!"R)`3#3!mB!N!10!*!%$`"`Ff9eC'p +$BA*LEfj6GA"`Eh*d9'9cG#jM!!(b9&4&@&4$9dP&!!$rN!3!N!U!!*!*!CS!N!2 +@!*!%$`"#`G5L[rqGkf,&!4+hZGE(N!"i'[(Shbp3qJe2)%EiRDJHeLKMZ3V[6hM +J,!,%E(Tj8%fGC9XaMEm0,iq(kX`al52f%YNG11A94NBc#VNclc8`k'PYP3h6B!S +C$rfK-q%,i40%)$YI3*'I!--l*kIVPX"YCm`4a5T`E!4C2k8mX2pG4[(2VX0YI$R +TGhSl,@89UQAQ@3D+dq+YA#3U9@S9KIJ0q+8SYH(V@%FccbTbZNGT35VCU1+mE[% +AN5XYIQ+!+%'L'%Q$[JSJbdbm5c*FfG0(fY'2U%,"e-C3'4VA6BI&93E3LqJ%P58 +1*FF`VMdFNH(qJ[KJLFBXi+qS)cP$3Cl$(!q!MHbMCq6MJ9Pq5QG--ZY!UJ!(4-d +qDGA5S3$8JUJjSlY*S!li3-pdEJc9MHrIp*8,Mff6LSjcj((EJrNJe)(-K(D`RMb +Pi!EHL6&9'N%0$DF&I6J9l98kK[M9%)cf3+@3"!%!!$!!3!#3#T(r!*!'KZX!!#M +Rrj!%!*!+TC!%!3!!-!"!!*!+KZX!N!D"$`!!R6ErN!3!N!UPN!3"!!"$!%#f&i+ +MYLBC+`!!J3m!!*d8!!#!YJ!6j%B!!*5N!!!29`!!#(!!"LK6GA"`Eh*d)%aTBR* +KFQPPFbN!!!('!%J!5!)k!I)"`2q3"!-1rrMrm-Y!!!#!!*!(TC!%!3!!03!!YKH +#SlBAJU-!!*3p!!#9jJ!!P$d!"CbV!*!15@0[EJd!!@[+D@0[ENe"3e0!!,(JXH! +!N!U!!*!*!HB!N!2E!*!%$`"#`G56kGAZ`HYlHG!LV4m!frPBR2QHBhj!4Bri+(X +,#ZMR4&*VXRkUJ2CF84B$f[$`jeE&C(!CPPM06$CM"2QiPiL#!4612e-a%Ip2YG$ +!,!l#+MY0TYD+1A4VLliK,m`9H5dYeAUNfjE1JeU!1fcIY2iTqMle`m&L,`,Sk#c +A2cLpLVKCp!EJ0[*I%SQ)IYLR64S'"eVk[,Qq0J'kaI5'ZHA22R5Q@r[Zr1GC'1$ +,'QD$SELMES)Jmf6d*$A5G*PedZ!4QXX'd2M*kUE6rbfiVMXJ[c)jlhqE"!#PN!3 +"!!"'!!#f)"f-YL!GM!!!P+3!!*G6!!#823!@%Ai!N!j0Eh*P4QPXCA0$9bj$4Nd +f1'XZ4%a-!!'Jh(0SE')rN!5!!2q3"!#3#S!!N!N#Y`#3!r8!N!32!%,"e4JL31l +A[1*A&f%9Vm66r$D6H'(c#mcck1&kFd$hlceh@pJkkAI)!0HVL4ma4NEQpX[+,0V +d@CJ*3i[k*bX`q*G+eUP**Xk1@f*56-Ul',#62D!FVA8E%(A9169-l+rEZ*MTU`D +r[1$l1I(G2rNbhm6!Qm,V"QRFRE4`A'9ZqmaGa0+G$$$6kj'a26*$r3Bb"'G32qR +EdpH-'hki0XG`kD`J[-CFF[&Q1Z%,JhCNpFI[ACZIKX"IKJTS2dd0LJfVlLJ*hN2 +'kM"bP58"V&IQZ+'l(4T[I'c4Z@Y6[D5f,'E"STJGGhP-R8I'rq'idS6)*%`!TC! +%!3!!3`!!YL!GMEBJ(Bd!!*AQ!!#BZJ!!P$d!%l-R!*!16@pbC8CTE'9c3eFZ8&" +$,N4-6!!"&,"cD'aL2j!%J!$rN!3!N!U!!*!*!V!!N!2b!*!%$`"#`G8B)N$ZHiK +L9aGJqi2idr`fQF+1j-4lXPfA(P1*ZfNEYTjB*'A4*d8PBRmpk+M,i"`Vp`1l#V- +'XjmZ)X0m3MeU@J"i99liN!!LX6TF)(XNTde@6#)62N1p!A&Jd-J#2!5*!CH3!+C +J-PTD-$@8K1&*6dN!aHrj))jImCQ3!#V[[bCq,IpilCl!3))VmChh6LD!CSB(I$0 +N(!%S%dQdrDP0eeNlbk"LMYqS[V4AK!P4fmedQ(Q(fl4bdP2C08r!BmblH6f0R6T +9NTbZTLUcaU)b@AdU%BKpA000f-6jHm'ST3GBN6R&'QR[`QG&N55Pb$+!3+@3"!% +!!%!!!,BJ(Bff)"f0!!#A8`!!QKX!!*3p!"!"*3#3$Ne66#"$,N0'66Bi5bj%6%` +!!9GCFfKXBQ0QE@H!!2q3"!#3#S!!N!N#U`#3!qm!N!32!%,"e4JL31j0EL*A&f$ +K@#c6r$D9F1*&r4k53VjIdU`3jUQa"A0,$bJ@@+6L6HDDIQ83P&bA%B$jM6mI6$k +ZMf9V5!(SNb$+-mfM'Y)ZlrGp(4UlAK5C%DF,Br+JD@mpVTXckmVGS0'V8ML@JT` +A)3F@F`j()d(B!)6fRXcj!cSp0QS#E6`h&p`5dFN-@e@VU#KXIm2)3%CkfMbJ-#k +VHJ94#[q%08rC1IC2daNT-P-f5p-fkch0r@*T!ImV15GmBbBGb"@rUN%$fNGAGAX +F9AJS)pH-GZ(4Q1Ja@!l4'RDMkEcG5&C*M6@RDHBfJ8i!TC!%!3!!4J!!YL!GMEB +J(Bd!!*Lk!!#EK3!!P$d!&LLN!*!1690-)%eA8R9ZG'PYC8aTBN0'66Bi5`!"a[p +cD'aLBfCYCi!!rj!%!*!+J!#3#3+h!*!$mJ#3"!m!3X(9'#*!lYHmiPFA8YFVa02 +m0SqYB1!ih-#IE%BGaRN2#CR5kCMQ6AB@-Q[`VV$@QVbPhNhJUb)I#Gl#Lf&FIN5 +3!+"D'p3!i9*aN!!Z56Ae'6cP8aMq6jNGU'XK)aK+&e2A6f4mb@hIQ0r`j&+q2!, +KCa'TH-jE'#kQ1)12e5cV28QjD!JdCBUrh4rRXGCY85HbSD4"V6fQZqNaFSL+mcG +RP`Jkf2cMN!!feVY*ejMfkp(k$&&*P5G%P9FH3KFM#+H*chRH6#L!CXT4$i2`!&b +3!)3JF%6f*+kRY26Af4mJqES192-qCKUFDR(X1hcVU,$*b@-!TC!%!3!!2`!!YL! +GM,BJ(Bd!!*SE!!#Fj!!!P$d!$jHX!*!169GI690-,P"33bj6D'aL!!(64R0SE'* +MCQeRJ!$rN!3!N!U!!*!*!UJ!N!2Z!*!%$`"#`G8B)N$Z(e2L9aLD0rESdr`fPJF +G0+3HNN+qAp+X%1DTX39c5`mY+QbNiNer*rjP%*4BY342Z82&!A@0LI2j'd$)JG1 +&)Y3-S33@G2q"p4mRi6[BiS43#SKm#K1mfQZb*eC29a1DJVM90P6IEFFJQ!TkcYi +ZhSS1Ve('X0H1a[iZi#bl[K'i&eRk`*aACfdR*B+H$A1i8P-Z)-hKmr'r3Y&ea6H +)h-(A(qAeHU6F!Gi#Qa#bfIi4'i9529irdDa"$+YTMJ%*pKFT-a,qi2"pB[1MIRD +0Q-+qFPC6l8#er3JaMYVdpa2P+5HHj%d!TC!%!3!!-!"!!*!+Qi8!N!D823!!RX( +rN!3!N!UPN!3"!!!c!%#d(A&cY`Y36`!!P$d!!+kX!!#!YJ!$A[B!!*eV!!%,r`! +!%8%!!A4ME!!!"0%!L3$0!H8#I3(!rj!%!alrq2r`bd3!!)!!N!HPN!3"!!"'!!# +f"mkIY[&-f!!!R43!!+jm!!#G&!!@q!B!!3[r!!!3T`#3"!m!F(0PG@4[3f&bBQp +Z8h9`F'pbG#l2J!!!%Tj069"b3eG*43!!rj!%!*!+J!#3"d,"e5"CY#8aKF2Q*9r +0l+5HhQl"d-FLD4+`'2%mFK$&ZS%CZBjF,dXhP+%aii@ckTGpaHdFDZN'3UGckTC +(HaE+aSe+`Dm#48US1jZh@PM0iIDQ'VM'BJMhSYIa,NY5C8qX*5T'dK'*M3@hj[K +BS3rRkUK!8RcMNZme`l`U@!'L)$Y%djf*eL(1DfI'h98&hTN61RG)ZFl10)R8m5# +Dckl99f(r0@DH%H-IdHlUMkK3pbR6VGH1HV!H8c0+5$qQB4)b"AY'C,)P!AcbQ,b +pe2+1GNSF1"QaV%Q)+8p4qH"k5q9M[+0UiLe5'pmE4Gk5De49%`DU!)$aS,b4Y-& +4k+(+Dqi)Fh8qThT13XcT9dZM3*MD2*1J"SQfDMTXLra`1k4SJ0%kmhJp`YH"r(l +dAN4RH*a-*lbfNJI*9+bE#,#SUM0PVh1YchD13(aNSZYrA"iY9@mBMU-GS(&C1+% +EUa`dY'ZcFc$(#iT8q&kCl-(5r3F8pQkU2%Hm,LfVUiEf)CZ01B5@JrMh`*822c4 +8P8NFpDd5Ce+N48HPP$YU&BqbkpTkjL)h-)jdMXV&3TeXfVdC34M#4Rk-HT'j'&r +9DYphNpHAGAA56fj66S[05m9i*jmcY`Vj+A"0IF8l("Q3!%k%pe1P"&XF8prm)mL +0$$VVIG2A*Rj!$68p-qdhbMa5ST+P&@2ENBkIlN8QTc`#'#iTe@[X@N5%F"V)5h9 +l1TNfCH`$9q,TA3J2VP&PISpA1p,PH@NRqAPh$mra($h$F#!60+QmRCZ+G9YU90q +!2&HF&cMm5GXPPA3fZ8NMCi'aTE5YV#LiNiH(3N%+2RfQii,**THrK96j9R-&@kD +h%'VN[!Kq+3'D#aKhZddqa[jiNLQ6I9`Ti+KT%0BUR%jm+&mRrXDfk!!Nr6M*XX` +1jfNf-mqNAA&q@bF&&VM*PKfXTr%CAR9)h-d@[H`pdkkjT"hUkaqfmhF3A6X0"ee +k4ZAR1l,rehSj`rrmNeJI[-QBpPdMac'ErSY6JX2hBf4K!8IjhmL'*fqNiCabkZZ +T&G,-+FpJ[b3jl&Vq%YReq%kfil(cR-ml%9e3dbG39Zc@l$1VL(,"%@VGP&,85CY +-A*ZLI+eK%0YCJa8rqcIj2%J"E5a#NSbaC*YJ#%"F9,f)pH(#eSNamRk+ifUU'-c +UI`PfMhQ#LIS(5e))X9[@0CUFVd%fqZ%jl'iRCQPAVXGQpRDVq[pKNEaHY)(![rE +Qh-P$GMZ6Y$paYr-qajpQ0`0Krki2,Aqc2'*mjTe"Mh6ff#L5"%LX!(Ze@6J6,H@ +S"'Fq,$f)Kb6dFP)bIqFY[8Ul8T)$r206b2!#l6E9qm1-8#`r0YqD)9iq2U!3Jrq +BQNak-2hBPS2",R,`9pFb6XGX3"ja4@jb-ZVXl%)LQaK+'m[%$T3d`"Hh'Qf[Fmc +1`1jR`Y4ArMGIRp&%r&M$5"J)4fJEf69cD#*8jL"Xe[$V6-bLKK53!"D`Xp4QcK! +ZS"1%m#Y"jCB(*192hiQ%Vlp(c#2JmS0H,pUjN!!)-$Cc8h,kV'-"Sk(qrc4#hq0 +(j$VUKqfE-Xj5MK$UPr)KqXE40UZZ+,$h*e!@HP#Zqc)LAacC91X5#%&UE*M-5X$ +&13%%UZAR)#b+A-30-Z1-YeikUZ+C1(kqj)P(SchAC!jUFQ,8jq1p4KT6-D+LmlZ +XEeh5EJrBGAfYiMQXhb#@[a6Uh69$Zf4,q1l3!Bb[l9XH0+3qk98SA98Kk1f)-b# +%2H1c5"lKEG&9FP&19R#!fIJ-`,X!)qAplG8a`9YSGE,,c(kGc4KFHFG#h6PU""R +abAf#m,U!m5aUhLfZNA[bX*d*GY66#UQ+mi#XHH@T%%jlKP00CD@jC@Cm(!3[GI6 +j8P#dT5q!lb!)rVd1YriCI"q`+-m,EKf0A&qTp*mU-`0[fK+Q#pafZ*!!fSd(m2A +B*!3b$U%q@aDF'b![lCJr2dZ"V32!a"ir4PD@63YDL)U,80HfIGRZIMLUEQBK'Ba +VRKr5*)%QMJeIVqR@ZrFVd6&2l*3NIG%"GQYm$4f"rkY2IS+1TkqiT'f`'V-LMd2 +)63@JKHKN1hZ2##Q0G2BI*#&4TicbKi[akD-6B)L)ErZllL9Y+HRdJ9GBA36bE"d +QZ['4)@H@K-)!m2CVlZ5k-cl$Z-1j[5R1MA9FAcCE`"UL*C2l52i!E0Il8F'[Eh# +FHUBR!C!!`jJ,CFN-8b863a[jp&(*9(rLX@HH`6-3Kf4#*mPSR@G!i@IfkR#Uk*U +f,,1(X)H-0,5&pjGJ,(A'NUN4TYT"&pX5[hkV"B3BA'fPl0p15&53!$6k5QlP`XL +hei%4,l'Br69RIXCJ*09EZKK%(&a3,8V0eS0[mmRhcLAlUBU'[Y,%GX!D(X1*q4e +HMH-lHdDIi4&Ap+rZb6@F%e*`[XIK2TN[+Tj53L++iac5U!BYEQje#*h45Qdq2c% +aG$LPTmaShh!E5DC2Bk*GT-QRINT%',ADq2+8I8D4Y4)K`dq(2FCb#jCUM`P%rh5 +[8`e+l%q9!`f8,YfB!qK&UmCXr#d2lM0ASlG"T-6A,HAX%+V1I8@Zl1-Jc1Q9iYi +4(,jF"`5HXRT&N`ldZ$),jV(Y$@)Tref$Xk1UAam&lGkGjrGd2UV&kjQPh+(6Tf3 +rfQC$VaZM9j[NZiCH@h'+S@T9hhZ$&,k`'f6D#)",*XTcY%k4JISbUbNVCGd)cP# +RlLARl#ErAFcVhE2pkRTNL#Gm@R&Y)R5r)(2&kG,[UYjd&4-af6dH`Uj!NV&U[L% +J0"dVTIhd*3(@MjTDZV`h0R#Z3)amM[Epr3QVYQXIL0[Nrl&"$5QFejd0fIE89%8 +'9'FRQME9Ma)f#F&bX29Rd4iaVp)dd,9YM*B4#dAqTQfZ'IhCX5S,`YfSR,ZN6hD +&AG8QK3b**Cah%5)Tqh,-G-A)98DkjYP))34NUXK!D!2@0'dA,'[RDq"d-A++$T, +IQ5K4J5%hiNTSUT,8rAa(9*Ejj1i+QeP*JGYaFhh2`bASD6HI)ILEcMiYXD6N0L% +mIaf5qkFiK29TpDTN'SS@cQ*`FPXSHF6!!f&LXX@`Zlbp@@"jVD`M+*!!f,R$K`c +Dprb0iRldPZc([b5VZNB@DYXH9a'6,kM$9Mc@P[qANBTXL*Qrdllhq*(XG0RUMd@ +*)"F'fB!UTL%bVA@&3q8h+G0PfPIpHdL"Bl#Cl$%Z@!a!Vqp(YU)@e*F'KMPNjVl +c@(a4BDh#X6BcIhAjm6Xp6QVV!5eaA%H#YI4FBC3H*[6%b[e8CPBb4T&T$E)M`1E +$XhM1bp#XMK4arh&e55h'LHG-p(JaLrMM68f06(HI6&8Z6mUT[#BVEcjJ@ELG16q +!RhUSi3)"ENib+X3hPNaFG-'NJ+FdVZK3Y)ME&1$cNC!!LQqpdHbCP1!)((J8bQM +IJ0,$XrFc#+#iU#Vq#lKFVTPDJ0m*"&PKDMR'SR1k4H3RX54*LT)-(fCFmLV@8(b +qp'U0@13,U+K5JFKC8H'fK9e4+UXEQX,9(mB2iB`,3JAIV12BRC'"TQb-"`RFPXU +KGA0+IXmHRJ-CD)`B&4!L%QL'm53*B#JaC[RNK,GVXXIIkPH%%J1Z+Bic-C,h0lj +V!HJ(*`@p"cLSKJI#ah[TF`#VKR5-6lXI('9'1($JmV[iKrHcZ5U1mYEdf1j9ViQ +3!&a**"KX@QI[GM8@DBeqkUCTK3hAC5cMa4$QK6!h!3X8&b5SAL',8aJ&Id`l2mB +*$1("k)kS%m,aI[f'TKL,&+h5L,,CBecVrXq+TCALK,BaFm8SS8DK,Y*1k9PAET8 +3Q*qdT+dG*MTi-8-V88plRh2`Lh,0crq1c+JJfJKZ+"!TGhB,($#rUe!S6FJ(k%9 +XD9)'G59k&G6k'#mi(e!RY"K-Y#"$[e*6B(V986iM&Fd&cqa*301@B"hi"68hmpP +bqRk96Mk)+LfI)8X*f3`)QZXRe[N`35''!"XIbSAV8KRVYLZRY3M%KaXkNDGShYQ +fX&*)G3ZX-pj&82$!-l$Heie8fiH-Pj(CZ[LpY%2CGSB29aK@kB55f+FKVRj%j(b +EY*KrjYQGQ&ZFabie`d&+C0(iGV*&Ma*2`,Npa29-%H[4+`!@VB+FHJQc3UcaRmB +NDVlMQ2apK93a6a*LLV20ZGT)E1dFGjb&H`iGG2h&DiBLGe"Je'hKS3PRh)D0E!0 +#fifL9%@'[ih82hk6a!VNhEZr[r1C63[@*0)ek1DTABj01L$*AK'F5DjHNqTE6hi +iDk3"(D#@@fallV6fpDhGi$lMEUFe2%B9)@iZ!h)AJ!MZN!$CUQ9G9-lVJ)h&9)T +PI"5#SPHe6@R$q`khJ[!LpcfF#kEpj62AIKi,!C(qbjDqB2'ei1lU3`4KX8ALDm1 +B@pYLH,hAM$M8"N+a*&#RLC6eI@K2,PeJU1@X%-!J5Y'+hfVlCK@'eif"P[Mm#`H +`ejU,ap&QHHf2NMHCqUY9D'V&Rf',k5KflXmE1a4YN@MpP$,8##J29F#2YDcDZ-V +[LR&BElKEM1pLa5XNi8DUIiD2(MpQ8084R'50R!jF1H1Ed2ZAj-*eFkhY'6*NML[ +'YBZiPeMNX'1Ti'%TbjBU4erT`Y@IHc@R3jFNl6X'-69D$ZYFKhTE8p$AACU9+L- +Br`l*+#TC)iAeCl'3!1ZCPX%peie[,4J@$J4A-YA0`SfC1l@3!'m"l&$dCQ`Em`+ +D4f82V9P-+jV5*"'BUplUj-mL&V1HfSY`ee[J@2L09YF**m+rYRaCe'T)Kci#r)P +dV+%CH9$l9AM"dVBa2#EZ9XX@baC(J,J5[@3+68,-E$9Qd[AjaUNp8YZpK9#(A'F +MrKZmlC3La20$h0Y+2kBMRT!![2eK[MHlV4RX%Clm2*RNq6[X(ii*UPmTNZ4"%@Y +8&ddalcej,X3[2A!H-9+j@,G%N!"F0X5MhQ'"TY-FfYFlhK1(-F22r&RP0$Z+kGd +TiM-U"fS1J#d"FfNYrM9h9DIHQT99ib%-'`22('H9RVbe"LpEZp4$@"U&R*!!0'i +aT6D2U`e+pdBDM%bL#2+F!c"FrA8"ILcTF3rUiT,JHDG,#+@)j+qQQEZM,J'mc5& +p2Fa2mDfNRYkjVk!2YTY8#JPbKTHVS$Ma9Nm"$Y33T*!!ZlDkHIE,DT&[%adQT6C +#1f1"N!"MfVNa0lUE*afm1bcbpR5j6RPLLAH(@0cYMQhjP(X3$(GB#E!0i4SEiC9 +XEkPTcFK&AeqZPN"d@[$1Hb[mH2PhZV,f6YTB+)"SE9b%4E'Sd%N(VmN!lGDE)Kr +r,P9#Dh9BIL3HjFmkE5!JJH2ekIi!l'a90&Q&L$eMT[pBl"86$%VL"*R)di%LYhL +DUU8Q(jBU-ED5AM(pR9kVEJTCE([JAf$+Pl*(Th$c"%TB9Ik1H#Y&4h0S$(B[[*' +88"UmR2Bhr%*([d(h2`#J`8$XD,KrXV&M*FcL065!3jql$V8AhCfE9r901RJ`-c- +!QFMAHYqZ[UC"a@$6Y)d#mCaMr16l"`PM1FSTbif$!BAU(4U6`hNAq$NPS#Ta"4T +J5",iVkrbbNL&)+P*c04Ci0H!*EBm5PEIm!a[ZN6')+6p8Jk$!Aem#M'-lka5cYh +Y+AmZ2PHLrl'Lm3HiI#8V,IIGdF6b4b)h[LI45$T6T19$UVrTI9#L4fV6YMTNP*l +2F2#(qB1L3Zqr3UAc&FS9+mVG10I29'Vm*`EqL%$LL`ABj1XF5"ic%Z3!TC!%!3! +!-!"!!*!+R@X!N!DG&!!!@NArN!3!N!UPN!3"!!!b!%#d(A&fY[&293!!R43!!+m +b!!#!YJ!#)cJ!!+m#!*!(-!!!G'X!!'SS!0%!0!)$!H8"`2q3"!-HrrMrm-&%!!# +!!*!(TC!%!3!!-!"!!*!+VU`!N!DZV!!!+NVrN!3!N!UPN!3"!!!`!%!!N!UZV!# +3"S#f!!"iqrq3"!#3#U@3"!%!!%%!%,Ea6SUfm8k+!!#!YJ!!X,X!N!0b!"(9LJ# +3$N*eD@aND@jR)%eKBe4ME&4V!!%X"P4&@&4$9dP&J3!!`!)"!*!+J!#3#3+H!*! +$jJ#3"!m!3X(9'#*!lNeZ)PEiMB`0F#U,YJCSh`JD-N3Vk,5b%KIY1YXVI)k-P$0 +B"H+"[ce9`#cela*9H6GVLTA-6e`2+&"9#SX`3K%TV#KDS"SMf&2S'1&'&,hmJkD +2bZbER6J0DC)Bhj2rJiVi5H*,6@JBQYU*emdQ%'N!a9L)-cNAT%IXD+"F5JIkDG` +Vk9jm9U"TMLH6&[+I,T8k8[JMqZTk@j,,md0-HH!S%!i9KAU@C@-NQd$!Be3P9SE +H#'R-C6QK-cP'hparab(I4qZmYa,$f03Pfj+#f[)%(`c&+EbVbLCXJEGZSi#PN!3 +"!!"#!!#dSQ-cYSChH3!!Vf)!!,I2!*!$FJ!5%id!N!j%FQ&R)#BJ4(*[F#"8Bfa +PG(-!!39CB@4bF&G*FdL&!*!$!J%!N!U!!*!*&EX!!!DJ!*!%$`"#`G4lA6Y#S$" +#q")&hFZrR4*(AM5UD'H5m&p6aqIq[(jrrQkM,!N+GZHQZ1@!X1U@UKD'AaBrh-Z +rRB'(if#G8rm-!q+BLk,@H'chmi-b9j`ee3amE2U3!&h@hYKIpBRq+Za#BQEmd0D +8,"SLAj2YdjJB4N*KkPr2dj+X0036IAFV8h01Qe2-AL&Fb`f,E'D8Hb`XiAShE&N +,&M&,Y18B80*[4ScSFXAkI"IkX'Ik*CZqUKa3Y)Lf2c&@jREQaN34@D31[R"cJh5 +'S$E)TiQ4MS%HLS1%p,CJRD$FmZZbNj5qbCQQYfZI@6J9,qMpVVSdfkB!6*N!`)' +e9IIk`LihbY$FJF#,EXGcH5R3UD8@Lj26L3SAbB)jjci*ejh[iJAr6RS(BcCBMRG +A"fH[S94YM#6N*Drh%"$NNZXQ`b[RK#AX1dNaSK98Ihk`*R4eUi&j@-XEI+Y2(mR +S5r9J#jaqA[,GR!!PQfKhRb+*qdi&(r!Qi8&AQ$)lm'C%cI#%j[2BrA6LjY#ZGIS +*)"8i(jI4S*8FiY-e-[(#[F9`+6"Z(Pe29HqUY*I$!e'r3k!b'C-@"lp@UelBBU2 +QXch9Y1Dea`DT14RYMViA4kjFTJEh!@k2Y-Z4GUSm%,%aCDKr00hf[H21H*a0`ZT +cpmPqefe0Na1+V-bDZF"r*aTFI&Dr))JAAEr+iPiRMA[dh&mN($X,XVmbL,"qrF9 +3Vq`S4dqUAEh-q[+KrRTcU+AZa$(mEqB@6"Z6jFaR8c8@G-i$l0[C%jE"9jh3LG$ +DmFDrjEQQ,!N5NHI@RAK`aG#&2&)+#I1*-eSDr*Yi*CC(Fm2eZcG9a!d[aTp!el@ +)6dMqFiFi`@ZG62ebpJBfF!UmP,kc6H((2pSq1V0Fbc)!0YBb&!h`Y[[1*8!BNRF +U%-*4DqQQ#&5dj`CBbb['le9GLNi00K'%(ATHcB#d,-X1BFGIXUeNMR$iQl!G"mH +l"JBYjmlZCER$K%U@8%N%+-c+X+`D!aBTq*2mR29K(6kDP!eDFr&%[QcKJCY3j4D +BjjJED6aH!@VFYZ#9f#)[VX1I(EpkKkXUMm1A-8"EdPcER@pPa84E#A*`D5qQT%c +c12pX$T0f@e0-dLEcX+XiMD-%T*if*EMrbD[6p*Z2`QZ"k6NJ("1k#",Dj'1FSSL +T[c#,p@eDEZ1rZ#(2+-8S59G)$r,1(IS3!eNhQ,SV28(IQ*dG%"db8$irQ`qd2VR +F5dSmr(9-DRc9Q@G5KYlI2Hq0$1EPUcED2p3meU[X$MHTTHV0cH,Fel8JT+&pbBM +9qKm@XlFlBE')*kHGGDA()D%`L5bl[[@RXTM0BLC,PcV"N[+efA9QF!9)5rl-qTE +)4Z+VlZ4J)0d2k)#9,%jPZLXZrY2I"Z-mcL(f(KC"RpY(rUi+I+2*%#cI*H+1D-+ +LZGp'kI(D+06NSfa[!#daN!!VekG'N@S$BdqFPjH#Q)$hp[,I3!aJHN8QU"%L6cF +JcKC`c&8fXP!Y-LCeYEJVeq@HT3VhjU*-cHQ"e+q2&kB4)bBC3FRUhibR$mI&rAl +F@&p%m#MXMkhG0hQC-,I%bN26@l55Di8LY-Ui)0&Pd2Z`$0CMZaR4XZIC3YMNGHl +YI09rRNkf@!C+c2@Sj`C!d4KlqelRK(bZ`V"4UJmL2UZKqE$amRk-GFEQYkD#)9` +"-EkJVZBq)bBJ3AJH)HED43D4h`l$0#rlq05X#,)hRZh5idrcA)E%bGSZ-d96'f( +L2RZ+DQ&Y-fd[r5M8[M9kH-rXTNp'cY6Y1GXSKI9C8pa-`45!8a#me45B+S4(K5i +9*RNrI(6pm3jj2,!(Ld,[+#GbVl0b%r5h$4LQHEqV!LrG8D#QdDdZFG*E1$%-FGf +r+qFfdjpi43FPpBJMST+4GAM84Eh1i,fUK&V[eLS3bfrYfa!2LN3GRQr@%VX'6ED +qJL`Dl[caCT,4PS"8TUpdV'S1qc4$LMGldiLXZ(#0(YaALPUVrcQBjLS,0Y8Y95E +J[`0l(X!8'H2&6LjQ!cR*'bi4*HP1m2HZePcB9MeVaNc(FeS1c0B@BaiiQIf[a8+ +@HhI%&TfYj"UP&$diJM&-X,CCkj`YU'8r@Tk`E$+`5HUZlJkj#T['eafIeJpU5FL +8`d%i2UBp15f8#+`[#NMepb,k#Y`$3!,C6FA-Z[UB15Bh'X@r2P&"P8,p1d*r-XU +-dkAAc@i2Q199LfmfMq$Bb+`p`KXjc$Q592$MA&iH#[*[KPj206EB1m!(akR*cQV +dDC@m85)@3S#PN!3"!!""!!#fq0V*YaJra!!!X,X!!2*P!*!$FJ!4!ii!!'mM!!! +M*`#3"!m!6@&M)&4ME#p8Db"5C@&NE@8!!9AlG(4bEh4dH(3"!!"!!B%!N!U!!*! +*'LJ!!"Em!*!%$`"#`G60p@NGfXb#*VSG1"mlQce4J@H,NV5K`fLh0-F)Vp!KT%8 +cm'@QQf`"(RPZXV,Z!4PEe'bB6ST-Y(@Ri)ED[N9lf`BlK*c"ce&IVfiCBr"V#M9 +`AGG[!SmD4%[*1`a8Y1Hb+D6JTMGYM6Y*Y2GSI['KfIR9r,!@D-,Bi)@6MZTG!3Y +,HKEmC9f#LK48k#5D&jfjU##m1J`FGaZ!A1Gdp8DpcVX'e!*cX!cdM'Dl[-VFYfb +5LijJNY!j*c$-+(,k#,FNDl*0P6bMi(XT#ZPhGL4q*&#iD#k'Q0kXQ@TrG5@Z!1& +`m`)jB&4ENN2dbmBRbP(X#fBDL4mi6j-Hdc9Rkc$SF'bJDl&Ak+qlF!8(P9QQ8@` +Nq9lXfrG2J2ZF9Y,@fbE[3-S`QqS0jpm1STm1AZq3!2X%ThJ2CZ%hH4UUPA@NMpa +9crB!VKreNcmi5r*62e62c(#Tj(RmcrRL,NUc%)VmLfP9%AC-eC!!EH3(,51bXEV +AD!pq,cd,Xaj[HQaek!2#'+p64r"hjVP%R3pNTaSMIe5S%lJU+9&[`,f)fhB(X8T +pQk5ha-ljj8U@h"c%"L`)T$4Jb[Dc"UjlR'Zm83b&$EMGiF*$'1KB6I2J5KDpdTd +TdDH)V$N'0qM0(UDS38-I,8kK[4E0HVd--D29)8T4CrKB80'-*XqlACXM9P-Db6U +)NKJJRNmei`N"0d,#VLQ,(DY+4lI5(,S(9C!!'3,e-!`qf[QkeQl8ZRJ%8ecjK&k +62FJq%e9`m9$2fV@VekN4e[9E@*Tm-*5BV%XkZpTRYqGMr`#G&Kk[!ha&V%!CkD4 +a#lTIE1PRmY4Fa0S'd5JpCfaajBe*#d!e02XAZaUkG3jXK6",R!Dc`KD@"LZ['f0 +jaM[6rL*$b+)3A)AjJM6S%2%ATjHP`mi+Mhcl[j,3&3hfHmU19@SbqeRFP'RhdUX +%!K8+(qc$pePkC!jGAA`JV0mJV[Y6$d(h@&1E)I'JX`+bKN%4H&+R1pK&N[9d8ZS +S-5@42()+6&If!Fd)DbXS-mEb,$U$baDc!kXDTAAD6lMebZdFSHBATS&1QNlh5Zd +`MST"QrQG%q$Y1Ul@4mJ$K2X%ZF!+VS#'rcM3&q0Pq),HR(Lcb,N5dq69$m6bZ(V +ScLYhXA-(KRbr1qT(B+mc&T,AH1!k,Ym3p@qEcB%-%`cb1e%hIrGF8bpTA%@E1-l +m8#IHV'!%*+U&D*D+"e1`!G@PpcF5A8mq(X0QNVP*`33rYM8N$'5E3)!!bPjljfh +-I)UD3FVSj$4@A*aF-CQ%JiTGRP$j)-%%QX6KXMZUrCbHd$LEr*,aR,9jXc2%SJY +9p!)XI5&[MqQ&-Mb&&q[0B1VUhcMrTAU!klJJa,ci#m%61M-(X)3qIXciSI(DRZX +FCDl5qEm``aZ20HU[ZXU0Ji`&YMMNZ#e3fTEjl6+6L#jSIcEeA"5P,QAdD0d(-Lj +I6rCpqqQY1#6c(Z1pc9+'%QVYDac9%,4BLXflb-9P4Ra&YA91JI#L6r)jL0dYCF' +SP9'#eP`L@'C@bH!qeQGb)VeUh3Um'$bYDM&mUCA#mNYP5lI,!QE-Qm[C)hm+ihS +S(Ne(aZX[F-RQCi,IceFV,1T(a&pFV4Vc)rd"-84CX@QiHF'P8kE83V%4R-%(&qe +$#ZNbVDj%eHhH+$QbQ,F(H!Dp"-iQbRbcd5[SfKD'5TdF)D)N)QZZrKULLY'r2pf +&pDm"-`rNE3(A1,lj"qfcmU889'V*B9UUlc)H9r("jp,4D-5rjjlr`jSX0)*Bf3$ +#aEh(j&)c42qj4TSeb0eQlBdBJB"(INY-0(dQD[pGSU2H!QbT,I%0e"!4,`f)h'R +IRFj9!p(6bY*q&VI2)42qRC6,il$-Q)BG(5QXhPIK*N1+,G21#S-rR5pHGAZkr)* +`N!$))hViddqF)ec!4rGHe(rmm!krm+R4Fj!!'PArPdq%mS#LiFGh0*THX*cHPRf +lEr(fU6cdYC1Z)5qSfb!3He[V"P`%Si(HAS([m9[0[eMKHQ(4'8"N0315jaSj-f$ +HPHVf[Ep2MTh$'922Z#h*Uh0IYIZHSi[(a2X6RmXLHTYRF-*8U!1,Dc+VT!dF)HY +0UbM2`$l`N6daql0T3aH2U4B2&$95h%i(pdjUNSNk6+48&*!!M$PRAFA8JZelfhl +GirH+lmBB'Rp@[dS@Q4j2GeGXmIVJ0)pi-2J&bAfReJ@P@!EZDebD"JE5ij5cRe& +L'FY9Vm[MM,LNa(')9[hbPbD99`mQr1L8a1fYa#Ge3MC6#malkU@6ZpAr5mBG-@3 +HA$L+5'kVkZ4,SG`BC)#1BImaU*2dV`!mbR+l@F"pN!#",6@JFrEJP886T+p3f&V +,!`81p*13!+q@2jq4%dGA-EL0**CYQ-PheT831`L,Z%+$q91L2rkb+C4$`q3B4GQ +@,kHE*ajKlUpc[5%PBG5DTUG&MG!PQ*jilpdMl!b#lfk3!&2)$CBEj*FAfA"C,54 +a*2phc&"dBljHhGmDCQ11N!#C*J)T))3DZbIrSC8m&-@RFp!T(IQL$Rhk#fXS5R4 +@IrU%FfK!$"Q8kP`&R01[kSmRR'UVNh(eXhQEL3H"er(P@I3N[R1H!m`!heSE(1T +pE!MrY9Z5Y)aD2R0$6S1$aBcrR,UpBPT&-A163PYCT4&A,rTH*cRbM+0dHbca1T( +@"5P!DBE!JJ@2j'dDA4Z5Jb-T1ijU$XG8)QVrJ*'KNKd[[NUFEGNcJfDe!kQMajB +ja5YZh2(E66FVi+d@5Nkk50FGI'Q+E1K*d1Z-93+8edPC[M5h*@F[e4B'H6Q@YTY +q3!@9*m)am[SLM@@"SmqHTh"rH%QB#fc%im&F'Erbrmbl-+Y6EZdLN`1Rf`#qJk9 +H5+#$&&YX&G#8b9lXmke1YpIHa9Jkk`9db(*bi06,iUbL"P(aZiN%(f*INjdAm)U +ZIKr8XCZh)3Z#)+`X+-V&2rA0V959+Klc"K9k!e!-6!$mJhHhDi('`GMQ4d#+'MX +mDPM"4NpRjD)AeDE9IC+BI0h*i,2,FlUI)UZj9Bkaj%I"aSbm@PbkT9Sh39b@LQ' +*J`kkDh`TE#1f2jX9RaeQ6Z!ZZ+D'Gc(6*IpM4"Lei-d%3LG1J-B-rd8,IUF$P(0 +5`T8l2TLR@6PEEBTf,-Mr-Y40cj(%L!UZU@`Sc)G1'23hNcaSr5H1PmDY%Tlj)#Z +,VlpHN@HDm8Ai*URXeTSPafVD5%kb'*VIfICARH'L98SHl'&-'a$PG,KM6KddP09 +p@mRXVJj"i'3QEM8ep)+dZ4i4#-#Rk'[2Z43'QN4emahP$$ESZIr[km3HA03LhK) +3Z`00NkdT#QGM,*&Dhb9ld`dMq&cAk$TIAri05GKpeL+C#C2jYRCPAI6VkldANQQ +[D[Bl'MGMSZ#V3e4&1ZCEH[#G)4J@Za)4$TA+3keqh-i9adC#GP1Q"-cXZMB6!EY +kZH5T6jYCimRrFqYV4cr9TUVr8&&hdG%6)$*kZ+'X*M,*MalFhc$!A+T"`L3X8V" +pBATek!)XPZ`K-Yam8G8X0DrZ-%fHR`'HiFlrlBFh,mimd$j%+8FZT6ra3CHM5I2 +TM4)FEF`bCNTF43`3c9F,a8ZKI`T%J+bLfkbbNBFZlFJCG#VTAfc9$-,kA"2N0B8 +)Ki*Zlce1C%*VFLIfQEk%U8-,lr&J+ATkl-Jf0Z3MXEV3X2AIG1M)eLXZC9&2Cbm +bPijk$E"'aL)a3&Z@#"q`SM@eG)(3J@$k-1U"5#I#,KqM94`fMF#$0TN,&2fX66X +dKTD18Sm$+ihcAT*Xf9aBVDG*dT2VcX'P-(cq#30kX%5XH+30@HI"9K4`fPT)rcm +J$&@GA%%F*mUh!`YJ0d3SJK&6A'-DSHCZArmbl)FLUQTkA0(QCjEa&&'ei!5mEF5 +m6ak5!!Y8TA0,%Nl,edeGkUrFJ'0Y+eiB$eLh)"KjcKpYL#D9R&R*&&M9'IUmjeI +q(-C3BII3)rLL+ePR!BE1+)3FTqK,!G'-"mX%+&91$dk+I$kUk20a50j'Gka%!M* +khl"M*&MZLMGUh(FcAmkRBpd$HGiS8I,%a[LEiNJJVakUR6mSe9NIh!5ffq-dlJT +i#VP1A5qG8F41H9D5f'-)%Ikfp@RU2`chpH*S4b2R$B%r,PK!*aP#IkPEr!@l'Vf ++TN49CAPS-bi-f'3!l&pPBhe(AP*-)EiJ(,0RFpaQcUbmiVL)26$QGcT-MZ,PI2R +C(ZY*9lFljdV8l)0kN`$qQ)'6BkEX(aiDbU5i&3pS*[V`E!jRd%EHYb"UD&lKpCY +(V+,AYbfmJ3f[B@UE04Z@T**Fm9@VXLkP#0Fp&rEXCSSB34bGhmfhm)A#-,4JIB0 +R`2kRd@33q-&d"2"#9Xl+Bd6KIYaME9CfKFT3mB#I-[Bf3T3re$aSL$GU"-2iQ(1 +K8VPqC[F*U3`@prFJC%[1hTYJjlG82BS*Y$f[qdZ4Sa[2&[9N@pp5A"`!&&UhbUr +85%0QJJ89Ml2@AR9m"Q"(YV(j30$D$U#GpXP9-a5pdihbD3!JrQXSIKbH0%1*!Ni +%pN*c6HfV0N&S%,9kqX$$(Y+9#C4k@R6*&mPLaG+(j#kFabJ3ZmHk5bdb,%&E#JM +L`-8AdM"#FMkNrSX6PL,rkUpT#(Vd&+aDRkJ0UXUE8H'&iETPlRRbZM*V[fi!Dm& +cKD6q85)90)lbB%eT1LBEUSaDm!e5KmPbeZ@cepED$UV,+dMd)e)h2F'Y(PNm6k[ +ff*4aLe-Nh&*)N!$Kc6FHC"qdNV5FmX$bK6mflcGh&F)rc(E([0UQ,[p8S4,l``! +&8HlAD01Xd(0l044md$Y4BqR8E2Km-aIZ@#EEjc(EPQD-8Q5T*B'Hhf2+)L`8NPL +Lh9DL54TVFPK,X"PqBb6%d*L6LQNqjcc%9bk+KC!![D*Rhe)LiF5R#J'L*3mZKF0 ++RF"@[*P"aeXpTqq4'@Rk!S"1cCk+phGpdPPG3m)jel3HVZ#'U6RD#X@+,8T4pDY +3q6CGT2kCP8'V2Sbrr***K*LahIPr1&%KC-C"-cC@HNP6C-@`QrmZRQ3PaHR0rD1 +KCYd&*E[00Sp!IAC'"68G"#Pd)6A%p(@ADI0"l6Mj!$J%Si8[K22Sc0J$@Fh&J88 +iFbEGeaNeU1%E2Ar4Y#bj,HKEZI[#0)cUZRIZl-(TT&je1NC*h1+1[*peJIR"K%c +@ZQ1"lA(+62EH'0q$C1QfYXlUJTk,rNHHj!MQ"B9XaS%$9J`H2VKA6cN'e%beDEY +!jb65Y'G*r6DSrZ5r1)aK,M9(Eh3f*I&ZA4LXFj(m-LkaHSclR@fcqVdq+C@R`BL +P"h3XKfb06Sa[D'mkf3#rD"rPB&SD1KpZ%+1kpG6HbmJL$'1I,iemYYEX&G1qp9C +B'e@FT0l%q`[`&l,eaNZN*&"(5#B!(9f4%Plc6D1bajUbXP+ihAJNe-`CKiGURAj +i54*V6D6Q6!h%+ejZ`N2m&U3C%k,da!`hFII8*h4)fAmp@aKLb@$"arp9@4CMR$d +3V)*$m*(6F[q&'N9YlMbl,Q%MHYVCRYc*EKi,1`i4N!#1bEU!2(IB'pHi$m%dS13 +eY2`[')'D`ch0ME(I#q(VB2$8Pc+hV#I+qT(*qe$-Zm'+-@"e3)BMi#M@M1,*LE% +*DQ&%$K1PE(K"'ZhJ6rY9AJ-DS`[I9jeGY"Y%6dPR%2RqDU&r56I5ZqMe&0LJ1Qr +,GB"U!NhdP$!faXGNYPk'qjDf,jbpC0m1TcZrPe6H'a0k9!P8G3r3FKTRCV3$0+U +d9Zj8,QL,@)X9X$%MZ5H4BAh#TLXBIp0K*bh-!IGMFRcHG3Q`SB8YC-K(e!bkTRD +RN[Q-0%@DT(6h%UQcZZ'MRb#RjGc3+qY9QK`!R&#MQiXHZ%,&ap!BbDUqaC-p@C* +4m6pZ(XUY*+KAUa2Hr5DBZZR8UFcikd*R'R`I[RZVF,&`"+mbTa![*b5&I&&2I-2 +%R-a@M!6!16R@2Ec4Q,+q9V'p0XE,!Hi@Jp$H(%@)eNF%$L#NrbBbG1815$kNARF +52fEl8+,kmJl6TPA@(a4D@%5lcPd4hr6KH486jV3F,k#aE1'r3cm!8d4HpeFj"Mj +'[&NZPbX0`PkF(i)6MHY[HlfC(laZ4T+@3f)9&iIRK)haASAa$K)!@4%qN4`(%F8 +#e)ilVFEfMTf(DddMJ"#m6#Ur3J5MmNSh6CL,b-Z+3X6UmQVml86KKARDYjB1de` +4%0DC`6bY@Y+K-DeT%aqE#RAq!,Q%pQ`BI-+438#ERaHQ92GR&dC1YGaPjVRBeFQ +283ir#L4ke%Ke3*NN'8E)*Acl8j'bb2pS55-iTrR8cmLU3j5CfVjZBqS*fY#XG9C +)!MH`h8QlbX[I[aH84dBUXkhLF)C,jaJ!2P-ACI5"A1$5r#3`MJR6D[p5UYA"qc5 +r1&35AZHa+"6LCM6RJU$6'3Pi8UUG5P9YCTI1hpCMKfrp0IR'cZkH)#QBUdJQZ)S +Vc2Rli0eXf-&XB$l&Nie'SD#PkkI`q4+TfJHFCaYRD6pZYib,R2peX#aaF@cVeX6 +j!+5kYHHH@V699el%MB*4@CeiK60G8Af"YXa9FGpUD@+qK'`%IV2i6T,L,Hf(@dI +)A(ZJR)p2jrq@"J*`92G3ZTe$ITEEKSLj31kc9'fID6r3-62%%'&2Y6(5#+EJp1@ +hrmP-AT-*Bf5r!cLV"l+T0fHB(8,@elL+KT&9[$8pIK2$Ji%mlar0m5l6pR(khGP +ICa9F49%12Yb6UV2S-Sf,`XUmqTSQ9XAbM,kcr0DEH!D5UbRaK,Z,UlTE&&jEG19 +rGGd`[UAE&`GlcbeU%kMTNmRH!qdj0hk%,qQYHa5'X4pGd[Vr(#Sa-'Aj0-2*ZF0 +q55qeN!!U)(8dbdLLpR39`)4X1$Q(JK@I"5[r+YM)MVK9-3bB2IGmcIUHB(5cLV6 +a,kT&FDH%*6e9ATS`N6V#fX6Fp(merlIfC#GQCqIPC@9R[(X5&jV+dC1hS'!Jj(G +)Se%8e`5,&Gb-DNJ#D2FTR3kC4!@&aeQ4&3$$D'$%KmcAq+Cq#makSKB"eUEUrr8 +(+d*e0)3CFZlRBH`iK6&"FDhp1krlH53kG-cl(L-R[CEb@SjmR2"k"#D@d-er34i +5`a``hDpqpMa)$2(#N!$*U5iAAK+)&D"H[lq3!)`ID[J%R*LXj&ibHqrYk+LkUrS +ZT9lj+K2Ch1GiNJLB,VkAG@jR@k&B*S'T@!4+&fj1iqUhjS$!@`N9If"jI@l+103 +JAEd%$DX)r[EQr0YU5XC$h`XD-0Ij@P95J0C#5EUF3SD%%kL5HMDLJDR3IKQ#R&& +QR5#UmabcRhUa@phRP`BNTTaB,!dBD%-@ir[bb@lKp0R8+Cd19R&#R*k1cK3G#$Y +qVk([amlmbRClX[0h+L&`),0EbAHiFL&0Km6ZZH&FISNUAj658ApmS8Vf0Z[jMCZ +U2-HKCr1D+cV%DdeN@iGbjr0[@I8aZUfFV@6dXU#UdSHeCAf&55-8!RC,RDdNADI +3)$)Pm&d[+N286ZFNC1[#IcMX*Td!qkML)mEhHfUKbkdrrFMrIbMGK)id5[&5kBE +kL[Sl+rEip0IeK4E#i8!!(!2*)j3RAKUML8q(AXVbB[Nb*cV$dY)m(RFD$)QY,lK +4MEr2mNjB[ZS,66ZeR4qTZZj(%0-mIM*iL"j#ql!&`%([RR8YY@NPm@0b[JX+jel +M+j08@5Gp%05cVq%Z+'`bKTdQK1@)q(ZISbQQ`'RP"(2lXG4h@8)M!c)RApYVDHT +J'EU-MarAlba4lqFHDS*b5Qld-c-G6E-Lh$X4ki45ipU,a94-4if)"#cid&E[VFE +@KZ0-c[rR0!FM2%6UL$A*DEa+-h)Xh4XmX,I+KqG#V[aqVGeiN!"8N!!i2[p4'EA +[lffB$9kCa2q!3X(8f$51C&9k-PXi`m(093kcDiAh*1GH30!$LBZ!T&Q'XbI6Z"k +DXp#4hBHCZJ@IXTiQ6pMUSF+@[2#X,%$P`Xf'l*FcCU0e$Y(YXk&@h+4E5,KQC0J +%jR9k!f2JZY0V@'QUi%MEC%MpDqcLQBU!(kKG6Qpd$*k3!*Mj96QT!E'DqhiZJ4Y +&aQ`e'kc(F-k9Sbrf8DBL(`Ze+X9R&m-0jYqDGGmTX-Gm!)M%j@fYcX#Tf%JrIEI +XSiZbQJC-05rDNL0)C'L0#em9-jU&'1G3V4r%IRY)fdf-d,-'$M*VY$ArkXq9K'a +9KM@0SMX5EQrL5pUX,G%ZHU,J%@3llrdp)d2DM8aUkkI4HI45#82V#BL!0T!!Zp" +fRcjX*6D*HqpcM+%VZ@1dA0[%X9rXUQ&q%0pUeFA5DjMCYm&$`*Qacp[LjLm*D+8 +SqY48)M2Fq[EN4d@%ABH#kM%*!K`bR&BDSLbLi!N"0!ZNpJ$lldP(X23f5-LY'"k +BSCQrB%ZNkL"k[U0)&(F!pNA'QJbXQE+@*$X4LLXI3QS'1j(F0[c#jL-VUG'+X10 +05Z(!)UK@"-jUhlY#a*m2&E&RKa821A-'K+9bIKcT4NTZ$q$UcdiKmaeBD%R#'8! +'S$kiETQCbk6)G-IT*fT%ph9lJUM,SP+eRIDUIPJ*QHl``*K3ZLUKY#pi*PdL14" +8jP!CcJkIP004VL,`*BIU5[h"j%!iVpZ2CKFNGJI5m0jr@iGa!Bd1&UY1MR%B@U( +'h$*JpQ9CY5mK1pT*,*4V5D@#VFr#e)+!XF*AXKhVffiqT5$IiF@%IdN*Fq@`5iP +UkF$%Q`2hh!Xf,9UZU[Q5UQkC!PI'-Hb#Fpb1BqK2pDHRXCkRP&crJfS[8Q-jR)D +(hU3X39FrpR4*`4d!LhcfXkQ043m#kZlp8m$e+NG`Y$-+XTZ(*M#(V9Iq#[Ci%55 +8"rN+N!!9f$kr##$99V&MCK2)eX@EaXIJAS@qh[X5-MIN+UEIFYEJ,l&'DZUMH[0 +#S&Pe*[p`I&l&el,X'-ffeXTX$T(PB-ihFKae,6ErEc%1%&UKS!J-Q'm%ED%9MCr +F0LQEQPSKa&(SjAf&KqJj,f1+[48H+'Te5"CkMH`-d+d3jFp6iC)hERG!J9@KXAr +P4U!q&Q`i,F)f,k562B(+0#NXf5N)("f+@d!l1jIUC+c8CP',PAj(9P[ZF%Ki8(Q +KK34hmcaIHV0%fp$lk)DM2M(T3''()JJ*cl,H9H6KjSC@J1h+,c91$%c(&KQD(M$ +1q6M+kJcc2d`kC!mcmK%jbq6VPC`dFJqXlMPRfG(H55#j(cRUV4ab$TbS*$JCZAr +Q@TqK)T4Mf(JRS4e82N'KA"@PY'%V'DI0X&GXmm0[M#araI*R9FJmh@-*[jEb2GP ++1-Iq03+5k,ZUJGhA%VN'bNfbVXE&[lC(ZKDi&GrCDEU)9`UcMLAMh0pM)9H`RI0 +"h3m&-cq1B9L"bj6p'la-,bi*cSJXl[0$&MCKVk2pUCTbhJh9MQ!&e-HC@8GUI36 +KiL*Z(h3(pA-P''B'dJhbBARTX,MlEK(I,bVl-+eZkC!!hE'LpJ*aKCdX[AlFq+C +Bcb)rCifma`%4HbYUN!$6L55@(VE@[q%%A6*TY&#B0T!!PkmC!%&(D9+Cmbcf8DV +mUab`p*)45rFN@cR'XSlp$FSej[(EMqc089MchYq5XC&d8""k3I40AYMH8`NGB0f +51B&#Up03@jZQGl89C,)'@D8LT'SUiZ*$kQ'1Y&BGaH4S(T-aTaU@AB5EEED*-Sl +Ah"HqGZaQe$4,RR[mb6F6)%U(lNd$,QMdll*[DB@K",`8S-3Q,XEkNIXFd1IicRP +efVYF*UT('`S)lIB4(VaqB+HUV2YT&h3@R"3KU@Y$TLNFEa&m*pVI%G1Zmc2I*&# +LGCl25jG!r3!K)*IN!5a(GB()AEeYM#(H'%Zi)kJm+ba!E6M$h8lFmMc[Urp$[3` +T-A`FIa*,[Sdd%G`"%Qq5lr`HSREmFbPkY$j[`Q)Z$)C3MR256[$q)$Y6l26[mG6 +B*ABEF[Cq*[EerAS(2S*JiDFi5%,$XUSqf#`ZR$,6E+3[SA-8eLD4'A,,ZKHH)Vf +j#pBip#HVX-16$[U-eJ$+TkqHD*aTk3[BD8%[bYSeK"aCPe45-,m6aHc)&iaaSaX +kA"[khFSEr(+jhY+`Ra4j50%G&63D%h*!eqRrSFY$@RCE(E5Db(F6(#p32Lr%j-d +k6$GQbmLc*c&MI``Y1*QY2L6+GkID$(al8miP[@kMPV&Y-1qIcXed`3mqe-V%)Jp +eQbZ#!9VJTH([95)h9hP%+MlHC,Q[0f-f)JQB")NU[Z4GFdfQI0GD*(Y6TeY@*q$ +@L8iLk`mSU-JD9VaZQKdh4QZRK4)@9P-9DlrGMfPjFaV#J1EYMa&IY%L'9F6PEH# +$(3a&h)A%qPc&*c'iaHKZ454""imcT+1Tq9)QcB1cAV2T&!KRe81Kje%%N!$)pd, +$D)@$XHCrbTpRb*h@mZepr(e[&VJ'YK9*2NRcJlm$8f!F1Pak(#m$3(rGUNBlG0c +FVD(af#4Km(+Z%qa$IpJ5[%1YH&P0d#lpVQR@,(kaFlASXBTL,pEF"E8Ad2bUART +*!eYXfEaM+P#Y6S$1hZLbH"D%pBd#+62bN9CXdGQSiq3SC+ZR3@Q+1p1"@@M(H[X +2liUVJj9L!HTfpe"aV96UhNZAjE'2E,EhQaq'p'E(E@)AC"4PhKCej`5VCcq)Z+* +C#A*-V![4(KX@rHU@EKU!e(JahfcMpUa%53$ZEDE*KDVVLX2RKV(KCL(2ef)*[dj +#BYQVLP80j(X0iqBiRC!!A0J$reNi9AXHB[0AV)00jZF(H*r0!`@5!V$)TG9Pj-T +-FCAQ9kpXqXqT(jlZ`dTfdH3Vc!eLKaKGcJR(F'#DJ'm,d)fY4hq1-U$3[$T1$l- +2-+@V4kLSk'cdA&XkT3NFLUf-1@YBeb5Jqi6djBeRfR1IfGMh4him[D4ja1GISG+ +9fG+m9fk`rP53!%aFY,3'@8)fI[mF8"-$@%L&&fk&Gr3iS(CImE,18cpX+r*DifC +0UK)913PL)UXa*B*RpAYYI[GJ$e[9DXFR($P5h8PDAKI48UA+0HSmP0,%pjHNiX& +IVLN'jC'+f*@aB,3"'2#&REK+F[$q+05R@jT6+SqUja`jpXb05Z-#b`LY`MhTl[[ +iMk-,eK-V`++2*%j59MCR(jr))Y$VSRJlc("XNa[N*,bF(@d2))2Z,SP'Z1%pXrI +Km86Y220[!SMcd"K$Hhi!`HU$UMa0MVpU&p#[BCN(8GciNB@Gc0ql0A[Pc#2QAkS +@jFbqhNbh5&CIr6ADmcdbPJa+),,iU(HY)jULiGPl4V(CK!rZ1Z$`10SCV4k&,NY ++jSdHqA,4$Y-#`0GLDmXHP9(3%P"%,@mm6pfr1fCY#X#GjbKhKeXmiA!iURe&VD2 +2)[9jZ0N(bM28$ZMi@UlLTJQ"D#6bG`F'cFc$)mUT[-TcZ9b1rrmC&-mhGBQ+'-$ +VRmc!Gf,M,-+k)6'%CB#b$@LFB`ddrTEF00D"DMa@FAp#rcGVrC+&8TIIlLd(cLT +bYPJpiA[p&1L5GU#EK1kdY,c6D(Mc(`50qiPG8c&cJ80bM8L82`HKATQ6ElTh!1h +5+10qVX*T9+GPI("UMA4[SMD89P4ZZ`fjqQrjPXNS@X0$kZ#X&'!fdk`LH3J4%[U +,"UJV2%31rQ,0(ir6RV-mDqJ6[5a1T%2kL3Nr+3G'alHdJ#HV9Pq2L15ha22Ad'K +e-L(T**1LK,,B%b[$Xi3k&I!+A1)pb0YP`Qch,cJCcr)Z*)U+&b&HS'S)i6qb)b' +a+q%IELFraR[!KT%[$*KMpEK5)cAlMHGC-Mh&QaKSC",(V"RRG@*"h`-@QR")$Jc +bNKDpbA[)+q3i*l9K'cR@Z(GiVr[aI[E(PPlT$#I,#,1PN!#*[lmTBRYk'S&DEhC +TL@i!TM+@$-Qp)X8-hKGrRefr,jc6a8jh*,XYBQBEBLMDidmYPRqN`5-r#@,!+#F +a31GQ*Cc+@'R-L8"YT3&lXhL*M6-L%1rTBXA1+@BZZH&aGZ*a6a-E2l[GQX6l1j0 +jfX660#%fejV@l`j3-"[Tj9QqX,5J)M1b0B5KCh"')H"Ip'!+8[9eS1c%4%iXA"G +SNfT$3AH9m8!cSLc,VaY`Y(AUIaBbaf'LV9%T%fi0V!ke&b$[hY(&k&aXCPY3[Nb +LPGiarXcmj&UKZb6ECrba5J0,%abq6-5'Yd-56-C"&ZQFZY"f0eVm1aZa*#B#,54 +QRQG916-j$liVQ3ibi8ijpYD!N!"`L&Kk"NS#R@[2BAZJ-UE+'E!)XcrCVH$4h[% +b6X#EN4,PNA(ik+aK9alkc[2GXi#0`q3-!p[kYpYrfPY86%N8AE1L6"MMLjZqYdU +p5IHImq8%rZM%#90QaXBB0k2VADU0K3qKCCeJmT9aJ8(6EVp[,VYj1Cij,$UIPr1 +Ae!KEJ23hh#(*qTm8IacT)JCTC"RpaJhf36@Q,Z&(lN%rp@@4$I8)bd5TiY&fFjD +QTU$1)T!!*r83SF51*@hUDJ8U#-%83bFISSX%L5eLA0$b%ZEX1$!aJ1pb$K,q[#1 +Uc0@Y,lPKFA9bD5G0(#c0FlD*Y3Y",IMX,`H$P$BXA)UBS9"1aN2#M8H!cNE1fkQ +JY49N1p["4Cm4bqkR'G'X#UMdrhMIUd54Z1S#*b#951N"S,q!k@h+X2&3&k-V%&X +Pd[(M%X,6A3)(IAD,dJG0$ZfHa09kEU-dH6YJ42RJ,$H&cXpiHmj4MZlY'BYB+3K +2SZ8J6"+TZr`m5-f#PZUHT%PQUTm0E&*pIFY'FqZXV4#J49XIflq!@NprFIe`Y69 +pH$(Iipfm'AGFYaL4RA4-Tlq&j',EDpZd!G@B!SR(M39!3E6rb5T',mC295NLDp& +,5'!$AQ)d@fi`MjJHRCm'UNT+35Xb#HX1QGL$GepA6ibc9#DQZVT"Zkl+H5[jNcq +*hUrq5,hqh5lVV+VbQ%UbM#rHBXfdAc`Y!-T@LScTkFJH@rhZchH,I@chSb[UT$Z +,KS9!R!iU[VVN&Y0fTYfLC39PA%2,@cVfRH`HK@r0&K31*UP[*Sl$GhXDJ34(53Q +5,DQ5e*!!-dh024c#$i[GhY"Fi&DKeXC3PC!!"(2R-$B0YY&H3#1e!L'EMrEEbJV +%f61pGefkX'k'6EH4JpF,9VN*'ml8[jGfPTYd[eKG$CN%f3F@A'FSH-jXc!80I,5 +6$,'D(m(C(fa)F3i1'[ECp&(NZV*FMT-cZRU06q@P@Ae,N!"jZJDbG6q3!$BXRF9 +F[IKr[MRU)cFYEA2'LfrkUEh"J*-[cTdl38aFYmhdJJq*r*!!db8`K5$+2Hr1p1d +!+!Dfc@X'ab0-rJSD8GfC1lJ*daRi)l-GqY&$@'9V"PL"AP(GR#JHkc8LVhEKcIm +N!FLr8%C&f)c4GiBqjPcNbT%K[JC"0h2XM)D+`4pR3j1jh2@P8aCr)NI$I4F*f!` +rdr)#4MeAmN&$bpcScZPC-ID0ZXq"'lR28G&2iY!"$C5Na@)SA1rF-Gj#UBee6a* +NkFJBLldhR+kMc)VdI!e2T-MPpq48$58H8AP1dHQ'*0qjP00F`4FJ`(RBf8VJFUI +cL"RV*q-BJF4memI!+6V(d+S164qfHNm8CiX%SDh4PLYGA!HPIfAP1#Mc+rk2Prj +qJ"jhCEb*LaYc'BH(ifQf&(!HR9T(p'Rl&!G,iI$$!,B3#G9$[)cYS839P4ilXiC +lHm3eD0KC+A(m`3)[HLS13d+5H`Y(0E2(59&2[6hjk2BN)`kH6Ec*5q#UERCrCCa +*2$(hrA'&j8JeZS@A0H9,K8+[VG`NATh8CD`mqEHe,fTA%V,,Y@TTZb!0*F"'YXC +!HKfjap!bB16fK[@5JT!!9,qJ@UQLp111[9T6J2)fF[rPL`"*ZL$UD"FXS38c$5% +j+lIA%G1Ii8"LBE-`UKHJ)Uq9P*j9FIS9eUqbX-)4)3M1#04*rRXcPlm%GHGB*$9 +jZaNC0DU@SBN'I4Ied6p8pC'Y4)RTS&rIdf+jp5+2Qj&0LjY'PU5i(VEN0UDUI[I +ALIhI&M5UG[+9NA"Gb1i#)IDIm"RR-G49RS`SG*ZEpEY+&68cpB1!+I$1c#D(4RX +fRL0Gd(G'djlRS!-i["#I#39!8&SCmipAXh(qDMk''YHGfYVUD`k#rcb#QN(fe!2 +e0%BjZ-pD1fA[#Sq16NF9Pai#3,*a')H3!$CZ$2#aTmKqD*M[ZG6p8h[@4a,05YU +$,NjfT(P(lj4)D23m4Q%UFQR!U@9A5pCX"deJkD8RJN!c5qrjRcRR$N0(EA3ErFT +pK&%4@)1A-UVk!%a%$&'HVPf*dNemp#pZ32B%I"C2*rA@SpFZ8j`l0LFailVS["Z +J0cD)%EK`1i"0rS*LBJ+f*E6AGf%AdfT*kZL5&Nb54VSK1'9GL#"TBi#98eJJckp +"3ZBfIBMXT(akN49'pGP[hN*U@-pA6c5VFPd!+&D)l[j'T,NM'MUZ*%'T2rCPGTk +N3%S5[UJQK2FC2`+4G3$S"@QfhalRSJXfBZ*K`AdVbLCYT,"[Iem@3)p@2A-iKe8 +*k!idpKH%hhMY[D9,Q`-D%(dYIlRPXSPLlEe*%-Z#fi!F'j4SVAf0UqfNNZU+&-% +Mkh0+Pc[%cE6$[$(1El*j,kB2B6#d21akE2"-pk0qh&jLVjY`rf-*4389CR`l,Xe +jI"(Vlh86B!pSThhR%&3a&P#m9*R43p'"d9$KIXdIVDjA8L&"3mr!#@m(eeV$0&! +hrp-2#36q1XBbJ'%Y1V4r6X'qEQUP3LCq689jiKA0k8kVFYrYVT!!cG`AUDMJhip +8qZLpGh+LXTQ1[@T50*9DI[!H%9E@Ck0Pk!(KI5CkPU@i[#[*'$I$0*U0b"eSEk# +aCPk8Al!T,M5Xrk)pNL+KkVAQT2DVRbiUTl4V#[Ab,U,B8R&`Zi(&83r`&)*KXQS +%8cEC3BP06(Sa-cC9@lrUMk%B,ViVhkXar)*(Y&m5)LZKadUh,UmEXPEIEfF)9cb +G+T!!2%(8%lqAQ+BhK`)EE$!Vb1Dmk@!1h&lJ("9mQP`5U9LG-b5'aJMPL"ZJ9hR +KE$p&mFS$2b@$ZDS#f)l$5l3pId9HDHBPhFl"B#4'E[K1"-4SCjrR@a3$PL@K&"! +*SZIRX*F-AKjEh0MkETCmqV-3BUXmjPFDL&Xq10G,a4b03i1jrPZZFEa+qYR5kZM +kaYMf9GK)`J$#PmcJ9[BaqS,Mm8!ekc,U5EANYRikN!$4iFK%EBE2%4Peq*,-XK2 +T%lkr4$Pa@$%GM!jYPRrIAS3NM@MUb&3HH#"10F`"`RIh&Yh"VJX&50-hf-qAI2[ +*3heaZr6YQ3K-1Nf81q3Q&Tl""V%lmbGNl25E5+8RLVpb%Lae-a'K5a)jYR@%PJ- +2fQ)kZq56-Q`@F@Y6N!"[IN&&"H8m&ZL()M'%%qXf9p5B-"J9SpYEj9(VI$JUSQ# +VUVmD!3lk'Zr05HM45%%GZ!45SNT!+2F2-d8ccF9*(-KCr3ad6ll8*L6I&mCAK[) +qR,"GD!Cr[`'Jhf480XcZ@Y3fShq*L[L@-Li%[+d0ZAI`KVAE%JHLK6P4rJN3,RU +#`@Lal%rNjH!l)[2BNcR'BDCp%)e"JBPAY%!M25hEABX)f%crd+G3E+L!aF#d(Bc +DK1,SE3pm'ImdciT2dJi@&Z2qGB%AVYD'hEihVP,dqaPh4mRV+-bI)M(XLlVcJ#" +KA&ZmJY&Sre[bmP+#!jH!q$-*XpR13Mcq1&*04b*9pXPLfi)*L8"$A!JPhcPJ##T +MQ5#peKT%Gd5+U5lVTGHcQ02m2)q`SETS834(P$0@hE"dpQ'+-i1IkZ5aNAlaDpX +ceaP"T6i[i6RBN[U&p5Bl6"F0,8S'I"kcN!"Y%%-!"6A8q(E*Na)6Q$cS%hYJV4K +Xk$6kYMQA*Ii9M$cI@F+,0H4YUh!NRXQZ*C4fBqcGSB`Xe[i5qkMp0fB164eMNcc +NkQpcjJ9a9m%e3)+E9N0[rfKVUM-!a4R5U`fEaa`mZpZ*"&f@Cr)9jN500H`,SH" +HUkJNa*DDhr[UVibS2(4*MMF1(k+1E!NS!%r2JNbPM(bdD#84bcIYmfpL04R#h4- +Qc0)PUIDUiTda6F&SCTLdJPplc#!kZ13rm*fi8eXZ3!Rq*&1N[1MkHj0F5ZdaD!B +49*4&`YjQC+[M,SmQ%@VZ34-#3*Dq+bX2E!9YpdchRQeV&fV2lB6rN9rYpDB[hNp +hiiYIAp(+!(k,J@G8rRifU[A',F1m!Ul[ClV3lK[![r0K%BS1A85cA+[M$FT133l +JLJ8'Q8,9*#Q[k)9qTJM%S$Dk-eC1[#9[cBfF'`UZMc1bSmKKNkT8CF-j$K3cK[R +h,1BY0(V&p2pcLDNj0BCer'ER00k@8@F&*cJ$k'd14U!-mYfD`cU4MiAS-3a)K0m +AFDf90!6jh8fl+EqL5dL%d3ce89rNBip*P"43YNRK5ZCJ(1%lP#m)6l@Hrh$T+Cc +(VQPX!8$h'T5AMGE1FG33GRPcKL@P(lRAk#55Tr+ekC!!)S!%0UPmH4TYi*BfM#! +M8L&CfLKj`FII29f"*$r(MiRNDQb#U@YQq&X8@!(cl-)"0AdbVJZ)j,D6m4c0#AR +hF@4R4S0J[R2be[PhPf"Jqa,+-iT4m@dTD,al*,$'$brp-@-2qGle9$C``kNS8bI +q!rqXp-+`1E)K&I"i2'p!c(8aEGmhV-dcLBD8q)X2i)i6rei@`jNIi@qE3QeQ0h! +G+1YP+MD[PE`b@-88JGr9T5KL#2Kpbkl0d*S,&DecRY`kiJmj3[-kah)X5$!VYmQ +qJd[YA-j`Mj`Jf,H-eqNDdXYVI,36r!r@"ML[T1cFSfNrpE@TR4e@GGrD"c[)JEm +cU41!@h-9$KHK8%,Z&1b,"M1)3-H)Qqar#1AeLeFUf%a&4h)GZ5j*YhM@Qpf(EH8 +8--qZ(Ih"KaR2NP-'bhm9PlEI$*(&XcEKekcRfl")('Edp"A$FAda0Dd#4YGiMMP +VkF&a$pZMjY8[qBEX1qJApLM[,5RceI!HU!IS#+ZYA$9XrddVh'9pXK9%Y*d*&re +E8,[H3$4k!a'Qq3LjP`(qllTBXEdi!pDABc$l2QrDfUl(89*F)iHf`'L,BU`18%c +lSN,PDqhm`qed8YelE5H@P8&mIE%aQZ`BQ@pa`mYLQN#`2`lRMAThbHZb#MN2qJM +@JH69FGVbc)L@6m2RjFAqID[[0bjajje5a4Sq'qid!1$F9#X46YZS0E%b@8dSjRk +%aQKpYILddK#h%(%L"5+S,NU!2@BF5D0ZI&3mCI"+b5QHNFi@`TmBjVKH4)bR@Zf +bTYF9M-klF)"!M0,pFbDN(Sd19(jTrliT%-JCLMHbXi1'$e,[)2ha*'!Gr4%V4mp +kUdcZ+k&RQ!GJe*!!Praflr6C(G&"SZ'Pl%dGE15BM#r!J$Sp*ihJm58[AHf6UIJ +VSH%J1$*N,#I&f58Pb-G(++mK'B$`0-`TaQL3!'p@k+G&X@0LFkaVClH*0EY*kVm +SbQ1aTM)*H-A&ESBRBlYP3$9PIekhZM)ar"`Q2C`Ab(Q,bF&,'S!@frJ8QeT,qeU +Scc@01@VYFe4UXm(-$!34h*D(cMM45%MQkEUKCqh[R-'i2dJr`qAbZ1E@'$`Jf*V +SifN2(KTfjdJKL@G1%+G6X66%TH8KEAY)ee4XGASAAe'F6$K@+4paH%ZQRPKqCKp +INPT9&@rjYU(Rj8q8CpBbALr""MB5+$6%1S&0da500P)5DC'+h%QCa%9AS#5KSlX +k-R&bLYSTAThKSVGY@JKPQ$fd2C3T[5PS`0Q@$-`D+kl"`J!(e"lLiIfajU$Bi6f +Yf&-(D*4SY)h2%3Mp+3G01Hd)+#mG'NrY$ChUGh5QS4N3H%6blQ14)Ddj48!SX9! +kZN3Hr2VQPHf480'ApF,8F2p$1rlM[&Dk%pZ0R)a[j,83QQG%kkhk#B"KR,-c4Xr +3AkRGkSVY*8T0PV9+ANY)"9IR(%0@&@')E9Te03%a(iS6PAca%,6iYqV2eK$5(&# +9IN%KEADP@kHji$*MZ+0hN!!p,AGSIp9'LCaH"JfeB*+Xe&e!Pe+&9-X"(@qMP,2 +ld)@%h24H)3HYLZJk,YihI*b8Tf4440-C18&(3Q@phec+3'Qq8Iiqb&6+IYJ`l53 +%c#BZ(l5#99D5mTZXG),P)hkZ20im2*i8b"$XYLQq!`HZ1qCF,r(mHTSS)B89RKA +&)eDS`A0S2D5+mH&Imq9(N!$d*q&XH`SZaeQVhqbjUH*ah58H6RGT8(G@YA-lRJ- +0AK+ZqcYX+&0Rm3e46"l0fSjeJ!fSmI8kdq!4#+eNZAZ"Um0NjiJqK&*XiQfNIJN +kBEal20Y1'X[he+M#Y%ZqUf!j)dF6rU0#[mKia8NadZri2`$pL#)K-Y9Sl0#3!0F +Ae5eC*j--`+@)!IK+clYLLFrmLQP"!p3C3IH0Lar"[0X@&AHE6r-VS*0$9NHl1C! +!kP6IQ3HdFkilRh6,S2!TBSXACKM@3cc#5D&plbq#Q(M8UVpIdJB[pIZ(4+q3!#B +CjVT5Br%CPED+IkIEDXe1`20&JQF2YmA2T!Rmcf3EN4I'@)Z+N!!+$bGQdqkZ!hS +[5padpLY`6Klk2b2T4#mi1[Nj23(QJ0IAmJK!F3McQVbjR'hDf)69@L"q5c[+SYk +LhLV`j2bPQlZjB+MdNVhd(R4p,Z0&@1AZf"LS96rMADSF!ET*UM@cPAKR#"M*hbB +X(16"fPTA[UH)lCZZfE+pRA#chJ#ZrdM`FRD2$93h3SiG0)bjBY%FZKdPV'6r'06 +Qa!PJhi6@E@aBC&-,%0fI0UUqF#Y@LS-JU*YcjKPbYcibeSE)lS'5,!&CM-S&S`c +JS2CU06S2arI9T8pDYNk'3CPR`!1Y$%%5cG%0HJe1Ebm$IMakUDiKLkZGcaSFq'M +ID0'r90EPbhHY`eh#JIApHKDVC',),YYC5-f%hjXeer8,j6HQ9cLQ`9*&X$*[`T[ +-bP25QFGK*ibK*iGZ"4L$@1A6e1Kp188Y1S0k[)5X%l2DC6A*e*AVTSL*pH+%kU* +,99+85ZbJF!ihNiVK82"+M,(*DYjhrlQU#U8%'kIcQIii+m1ebBUc!`bd@02dHMR +8U@VJ`[`F8QL9@%8qXkTF925`MMPp9%$DP'2hI!#L!%bmqcE024S`KiT4D6rc(DP +F1NkU)km4aMM5dZ!5!6EQeMf$b+*R-BH+*LEMGeqD&Bk*6r`V&,3)qZ66FBh4heK +B%Nj"[`b*!dN#Uhdc,rrM9Y%lQ4LL6)bY"&"cZ61r#$CEGiI5I,[4+G+V)r*jZ4( +dA@e'jRQ#Jr0p[VeI#29GNL5rNJ2iBZM0*L5HXb[$qHC5TJ39fT&BYJVV3Uk#!BJ +4XUVHN!!05&4&GQGVSiV)1Mcp)R1a#kZ#"i#RQP,CA9rrlP$5qIdM6&'('9ST%Tb +V"[YajNcYFdFU*rTV0250E(5N[M3f"#qm-6F4(KVF!4j3e*fM)aHU[b5q&If"R&Q +IlQi&dP)XJaDE0di"'"k2S33Y!'*k1YbqA"alXBGlpGP[+a`b[MI)SaZ%+8SBD@K +,9Z#kSj!!"iirjAifCd'6SSF3pVKmpEYAjfD01$i8Pi8A28$)*BJlJ(GLGU$HhkA +8E'D6Z3MRk5l(PXbdMTf(Z@N#bc2li%BT93cql0'*Uh5[%1'3!"[XT2Yk5TjEQRa +(fCLLh[*hMDV!m5!3k"Ra,arU4HH*a4c@Lh)9[jj08@K2rfUb0iK,R)Q[#,%L5c3 +5mI`C'Sq!FaZ(&16cBaGZ3E+KEmU*k4DPA8hdP+b2V*P2[qq2*q18Gc[B0`[dc-i +F06AEl@69aXI8EpaP[84$`@8Q4A5TF5&I`TP9h%9aD3+j'V,jdl@HFfj$iQ)-!j4 +*&QG6IRQH$lrET29,GEhi9*R#@a@IVVH'4i8bFE2'cR9,YIELa#[UIJ&jk)CXeic +4cI%j`p-J#ajhK1ZST)BU66LqTKjb@E$a#J3`8Be9YM&*EF`X')p+$),"5riddre +Hr`'"I$Cap(CVLIjHK#9H5[XD&m#PN!3"!!!p!"#dSPMhY+*Bp`!!Ymm!!22@!*! +$FJ!05X8!N!j0B@08Bf`J8N9"4%e&!!&V-94&@&4$9dP&J3!!J!'"!*!+J!#3#3* +V!!!"!J#3"!m!3X(8iHr%("93PhXmAdET15-qLr(BVT6)8FG'NL1D,H#Zd!Z*,Ba +DA)#cdUR5Jd+MZ$eUh`p50Rh!PY4FhLh#-[SU#)(rh9)p`THirZNb65me0*f[NUV +#Df%8N5jcF6k2f4KSj9iQG-kP)i6X3VVN#bE"ENYZBF3E`elI)S1Ve#ibG1AS0HE +#KD!E*Yd(-&8hG6aES#IJR(U`XG-a8"N3E18fm#V)(HQ-P),V"JRhqIlbdGYC@DM +lQ(bJ))jTiaL`+B44dHQ%If3K)q-KiU1LI9%N`FXL`I5r6F5kMK5jc2LGp9,mdH2 +dmJ8N$0'"[!5+F&*)d1ESh8EPhU8,9EEIYT!!!+@3"!%!!$`!%,5L@4+dSPN6!!$ +bC3!!p8-!N!0b!!b)p3#3$NeKBe4V)&*&384043!"kGe849K83eG*4B%!!)!#!3# +3#S!!N!N#D`#3!rm!N!32!%,"e3Q#-dD0EcB$!GQ@h,)YYCJ&JkDUL-YG%4ZE,JV +(0VBZZceK,$DG%63re[3N#Epac&lrfm"G2Re-AAI,'5T1S##K[a4a&pI6idpT&B8 +JcM%AcR),,eB9(fNI%ZrG9mV-bEUMTl`p`R9XF"PQ&ep*"pE-0+aZQmK3kcE'kA, +9%ja@&GV1j2T02hC08EV5KrEa1jSBK%3p,SZ3!2YH6aB$Lk'LLEBh'LVA#J!mB@+ +4iXF1i316,pHXr`krf8Y+kiX9DVi*2,d!,bPNa5aAhJ3ck!"NjjP)9+[$N!"H,dp +AV2hk)DFS@Bp32TVQA#8-ElLq["H4,HE$I2`j"C%1U`!!TC!%!3!!13!!Y`YYQVF +,ECS!!22@!!$fJ3#3!h)!#Eb2!*!16@pbC8CTE'9c!!(P3fCNFR"03806J3!"3!% +"!*!+J!#3#3*S!*!$d`#3"!m!3X(9'#*!l&*0BPEdUV&%-+*0FS"j-q!a*4Kl8R2 +&,q3iKlRdNbG81+N33QjPBB&0mrFbY-IHhMllhpa4)h[Hh#'DqYhZmUj-KTSj[XY +3-,4Q$qk-(2GpkYN+1Ybq'bFmpZ[5Y'cAVN#N2p6#8f@CEeF9L9RMfkS&pU[0#2B +mbqh2j2SLA1Za$iTpKSGI`Y(Z@,Q&Er+0)$-*h0Y,@(NT#LffJ(1C,lJR)",Z!rV +X3"Hf'VbpF6KE&TUdZTJpM&hfFIeC!Skr*hcp&-X)XkVDi)ZVi+@3"!%!!$S!%,5 +L@1kdSPMZ!!$e3`!!pl)!N!0b!!U4q3#3$P4ME#"548&%688!!9jQ9%9B9%0A58@ +"!!#!!)%!N!U!!*!*!Q%!N!2&!*!%$`"#`G6)[q9[ia5rrCf$YG%282R4qUP$0pe +PH(6PU&["r*U0[-C1YZ-`5PPf['Zq1D6ph#pLG6eHF[karp#8SjiJ(LI&RZc[Rk6 +2Vr-DFaaL4)RaRqP5fE+Bp[P3h"'+#bQlQUIGaNA-RSGh99'c!+eF#9Y&j5FkM+H +3!2K)Mp92HRk86jUV8q"NrYj$(pCRUhEZ6TY(+@TEAm[AD+"F1U(M#K4V#mKX'&k +V2HKPKEkZMeB(9k0L"dR(+SIY(r-BCbh5)b899qLPN!3"!!!l!!#f$CC'YJf@4J! +!pS%!!2Pq!*!$FJ!,RqX!N!j8Bfa#6d&6D'9XE!!"Nj*KC(*`9'0X6)%!N!-"J3# +3#S!!N!N#F!!!!9m!N!32!%,"e1T!eI3iD5hjjh#)@MVZJi5Si1ADl(0K"bl$L6F +c(IA8A548D))F(#92Cl#EMF4P$Fk*0j,h@Z'hZlhC4IAGDVJ1R,5MXeP[-VRPrrL +P)@bm!B#l,("ZU'[Tlk9V3J[S+STeJBjElJR@`KY@5!BLNdFd0[4L(K9#qKaHZec +8R8Fp3p1`Q#,jD5INF#-'0R51rr9lI4BmbMRJ+4F#R%d&,"qjR0f*TZehNjMpVP8 +4)UT4p1DfBM`c3B+jh@NBd!AYhEaCl!j*(!Li"8mL[hGpjBfC`kQC@a[%TA3I6Y# +4m'1[a6$Vp!PXH6B8pJNYh%91Sq3SQHScqB$C%F%-heV#('f)m8$X1#kR&Z#2c8K +Y8,@p,N&*Ihj`T'`61(59V-FfcZ9I)RPKCA`mf'TiYKU*1Cp+$MidC1)!ef[0U5e +P$mB`Sf"-X@DG)dJ$4DhJXU'a3-[G,a%0&21*Lac8!+@3"!%!!$J!!,5L@'QdSPK +T!!$hXJ!!qZ-!N!0b!!KUM!#3$P4ME&0SC@aX!!%Nc@&NFR"8Bfa-J3#3")%!N!U +!!*!*!QN!N!2l!*!%$`"#`G8*JM0)4lA5I`#8mk4A%0Q*BMTMd9B(FDlf"kC5A12 +,rm'X0'',YFKddX-SVHp-fTF"`HA3!(kK`FqB$TLq*T1ME*@Xr%r`11hUMd+hPmB ++b!88&S8j2$8BSaRK*2&p`ECFU8m[qB@Z!T-4Te)8GkaXmH+"%$iX(6FQdac&9[E +b!NGL1kdb0*2%pb,,+Z*B%if+i'fT"9p2K[dpc%m(9T9#C0I(AT!!lfah"PYGp!) +'4ZT`DB5bXGkQYF,$mR$FL@f6&6(4H%d12ji+-E9IAEkdB%,Y3&+)Nhp0AlH@MNJ +(@YV)%SKl6"kd*hmF+Pi103)a94G#`D$Sq!#PN!3"!!!l!!#dSPM&YXf[%J!!qAi +!!2ak!*!$FJ!,ad!!N!j8Bfa6G(9L,QaTBJ!"pFj08%a'3eG*4B%!!3!!J3#3#S! +!N!N#F!!!!5S!N!32!%,"e-qAT`Sbp*!!1P59K8N(L&e*3HdP6KC)q+Nk-HfpMA- +Bq--af8L2L*[hj`q+JMSZ(pRA@qV1NeZhNqMh4'ZV%b82!qTIkpk!BF)R@26CKYP +)C,3kq!FE@X8%d+DfijEaL[!Jc6PPL2`i2QNYPD[cNL"ecHQ!-hTj'JN&'Zh5hH& +0Y`d'2$BTiEr&+e5*qla52c0U&"fj6Z#i%h4SRpbY"@GHd#8pUa`+PRceQ+1bL)I +N4"q#cUKf0)elM+bS-9-&kf1KT)&ha,Ja54TqCFNb4iS6-RH)5)K#19aNm2kEf9J +,FL[p'De"P+H4LKm9eXBNJ6!ARZkeV%6KmJmD-)SV%ahE6SVMj8cH)(XD8C43BZ1 +)q0kdlr+*BE,Xkl@(+4+4Te6X)C5@9i8!TC!%!3!!33!!Y+*BaVE0Va%!!2VM!!$ +q)3#3!h)!%DpJ!*!19'0X8h4eBN0'66Bi5bjXD@)!!8N169"-4N0A58@"!!%!!B% +!N!U!!*!*!R`!!!%d!*!%$`"#`G5L`,pb2XUMI,4[j@dC4,i`Ul9Ih$"iM#B2&U4 +$Ec6cQ8bjDrhhR(P)K4ZZh-)jT[`GH6&H5jMbM(afeY-Q(,rjUBAar`6J%hljUj* +[df8'hV#Y50+CNi+q*&Gr)bC&#%80Va'Eckc*A'U)3[@[KRe9E[pV[pBpj("1%IJ +@,D2KiKD0m2S1KFI!L-B%$IaCN!#jrS-4K[19ZY,R'-!fd'*L6*L*$8NhVDQD!S5 +#e[kNIX$b!p6)drk4RF,Yebq-m*BSe,`rk+U6hUMbJ%Z(GaGP***Sp-MB(T*i8h` +K'QLdk4TQ91l66BMac,Hee[JR-A,4+a'4(I"ImVLhC+MhK"39ARlTrSRHdY"iE9N +KTKlcEJ*5K#iPi)*DpS2XK8X80hXNGir!d&16dG9jEQdI3qFSb0LPN!3"!!!j!"# +dSPN+YJI6'!!!r(S!!2q$!*!$FJ!*6dB!N!j8Db"548&%688!!@kq9%9B9%0A58@ +"!!#!!3%!N!U!!*!*!Pm!N!2h!*!%$`"#`G6Klm3F3&63["mBeKi(c4[8HU$jV*6 +UXG&GaAp`X"aX0Sf@Eh$m2$)XD82+I!V-M%R"PNUBK"8#aQAb2@E+NpH)Y5,1L4L +`915Kqa0Clj`!8,UjC1"d484(JNS5T+Yk2JDS%XkRK50`$"5XL9PcML`U#HXHe4[ +&SZp1jYDTJBN1qlj$F9Z%hbr%6[F5b"#a"[I1kAVqD(Z"(f3mM$6k(&Z""VeY-Ua ++$6TBd(Cf`[@"ISAcJ6ePABZiRMM+*YI64`LQRd1SJd!%%EQGk2rXCrpTILhB[$` +*1a3PXIBMD'kb[4E)ji`!XB88DUMqq%4LeJ2&T5Z!TC!%!3!!1J!!Y+*Bb,B(daJ +!!2iK!!%"%!#3!h)!#Xad!*!19'Y6G(9L,QaTBJ!"3KY08%a'3eG*4B%!!3!"!3# +3#S!!N!N#E3!!!5%!N!32!%,"e+,![f!HQa1'!*(Mf3K&b96VlIlGF@'iaeH$lFi +*Z-&#$$)SZeL,JG[hMc@&(eLM+-X'r[3'"iPa!VTL4TEEpm2FHp0C(q*he@rY"qH +$5-ASV"N&RZT21ERkCkUU"A[GNbbG'Qd@b6'PHAabj'PUD`jA3X"i%HFEV%cRH*B +dI%b6H85,@f-ZDLFdc+jaDkbb9M!Am%jh+mk5(NC!VR,cq"40C'R,D+b@LAEa-GN +[+U302Pd@&cbJD,r"pF)XHi55YULja(G0fp`H#URmq*IIl5X'$aLKc([8kVEI@5` +FU88$Bd1E("Hff)raAKA%Z--b)mRcL2JCceSQ+MP!j+2qD`Y6TlfbeEEr!NL23VF +pK"#5'!1jBMG(hHlZQUelpB#PN!3"!!"!!!#dSPM)YJI6'!!!ri-!!3*a!*!$FJ! +31hB!N!j8De0dG@*$4Ndf1%XZE'PL!!(&Y%e36%C$9dP&J3!"!!)"!*!+J!#3#3* +j!*!$l`#3"!m!3X(8[R5'I"$LREVIJYe1PA2'keL1RQN5CLR3GPX`16%GKk3jeYQ +6KeBUR3Tj[BCiVMj+@HC$jMph6+DeN!$q'c@Cf-'eX!&j(rH"PK"T3BQ++bLjZT[ +!Bc"ETdRfaM&a8%QHYTK(j`8$bff(05'ERiZbCR-N[Gk!E2XhCkkhcf*h5e`Y5Rb +8QeFb4(iK-f@N2V&%A44*+M'3!2hQN!$HG0!(&BqJM6eC2b'FS6rjh3`-TF'F2jk +CPb8c9#i$m41rGKkmJIJHer5r'e&VU@+"m!,E@X+q4IrAMha'8aKdQj!!rre%Rq8 +kAj!!BG8b8r@9hMkPJ+@3"!%!!%8!3,3T(VQfm85Z!!%"%!!"$NS!N!0b!"9JC3! +"!YS!!"88!!!,F!!(9'p[E#"$EfeYB@jN)%aKEQGeB@GP!!$mD3&$!"B#(3'*!F! +!`!'3!`i!I!"Hbd!!!)!!N!HPN!3"!!!f!!#fm85NY[&%T!!"!R%!!32`!!%#F3! +'3B8!N!jdBf`i,M-!!FUcCQ4bF%e"3e1!!,,JXQ%!N!U!!*!*!MJ!N!1Z!*!%$`" +#`G82jI0U9eYPY3YM*-ZKq3HRr8%`UdjALrS-N!#hZr`k[263P8d-P1KF@m@mfM9 +&BkAi$V%[N9ZF!NJkkp*Sa9C94Gcf@BPF@,r3p(j,p-NE-`-aH$2!)6F8M-G&9mH +hd0CU2G2+Z6+[(3e*C5VlFUmrERADC)&1#ELr`!6R,dN)EQHL5@ZLGjbUj3)BQB* +BARp(&cIr0cFLqM8kEmiP)`DdGT!!T`(kL*SBD(f6X+@3"!%!!$X!!,5L@9Qf1r) +b!!%#fJ!""Li!!3*a!!ZU5J#3$P4ME$JZ-bjcD'aL!!%35R0SE'*8Bfa-J!#bB,* +K!*!+J!#3#301!!!"d3#3"!m!3X(9"+5qk$KcSP-*+"pN+HAl,K8k8lQc'XXd535 +mkB)(SLmSLU@RL%!%Dph1fRi2B!S3Nhh(IIqe8(['B3X$+Ib'MM`e-cMR3Vj6GQh +UkaZ8%JA))Y!IX'mTAbYNj1-EMU-f0eAY@i!5dYRp3%kC6acN&q1@%e0am&$NH&K +#i)1@)*dd*Q`HH84%i)Y4,B'bd2P[%6AI,6LQLGU[k,Hhm#jp(*S2h'9IYh1l"i* +4p'NEPR@f"2P5`cNd1UhN-+R0&A)Z`J5VjL2%UiKBUS#4fK&1)qNH-P6Re3Ykc(T +A@5pZbVMYK+0Ne-dCQ'-(h`)H#h12K5T$E6ZY`*hbabl3rN!"X`'3!,A5+,*ZrUi +1cARJL[P1V#Bi)5CL2P)eSfk5`GeF90+U0$mbUEeP"4"jFEKf#fESDLA'BJ4JKC* +%9Y[UfI8dEGT[M4IZGKKU`0L(K-be9ZUJI6-fj,HS*b,T164hFFL45Ap%Zc2r"Pi +V31XhFGbY2SU$+`FB$(Bcq1A"eiqIhq8qhjYZpPY20C4MLF[-#K&TJda8lD68*!R +Ie5KRR"Z3!$6&&NK@$fL6(f+mX@2Y8"Z@)11G0(ZJ&)2&a(QE+l)*UjG)lNI&dB! +GL+UhbB#PN!3"!!""!!#f$CEIYS1eR!!"!r!!!3IG!!%#F3!4+@)!N!j8Bf`i,M0 +$4Ndf1%XZFfKXBJ!"mrCcD'aL9'0X6)!!XU#bB3#3#S!!N!N$@J!!!6`!N!32!%, +"e3hVTAlJP()mL0hYZPIbCM+T)@@a+Rq&[JIcES!ZKPaG$)&lTlIXRXCj[1Il#LD +drAk6,cQ0)IY'cQP602UQG2c`[4#!DKVG)b1MU%U990b)B0#B,r-3Qf81p!+J-SY +m`p,08TTf3m6,)'JR`,EPN`m""PmGKXM!%RG!E$VK`0E2Q[)MKDJ%GHF)j@#d(J9 +%`*DV(mTHQpp1!RBa'dKak!&l'%K&%M)STCj5L8HM"e!P-H6&,!V,Lp!#r+hd`Q+ +jIEC'#pRX4$l@1J9KNDT$1NN!@UV[B*MBFYMSJFTm91aZ8!qIV![bE$a%SFhcEIV ++Mj(PdNS"mMNpbbKI(TJcMr)U9J(FGAY$68aXDh!Y@ZV!i0dJYdZZ$'Bh$5rpT(f +J8DI"fEY(%lR+qmD,[N(,'6+a0#&#)&1XB!#PN!3"!!"$!!#f$CE4YS1eR!!""Li +!!3QL!!%#F3!6iP8!N!j8BfaKF("XCA0MFQP`G#jcD'aL!!%eMR0SE'*8Bfa-J!# +bB,0K!*!+J!#3#30H!!!"8!#3"!m!3X(8IHVQEZAX"LHU*&)%j#Y(95+4KL@Vphl +KpABhbhB@!Y"&CE9)iA%-eYfPAF%B1bLK(FUB"kbZ$!m8kc,#,q3$d@hYKRcV%ma +hkZ[4B28j5l)p2r*dpPam2prU@NU3!!)K[@mJjA6'L[0pG!FlYJ#HlNY9`D4SlR- +$36dGI3ah#p`U8Kml&GqqI(TiUVF&B5RNJEiV&kV-#&!'(QhAPaM$qjC!2Eb"4Dq +jG1-l01r#QFS02qD8a6KY$dm%4L$+)p!PYNH8HY503%IPKI0mNF$Z`pii3IJU20( +@aPZ4H&HLbbapZfb0BMp5D[[e%'NI0%,L(mY-*laT8ETqrH'`Qc$Gmr5G3&BYEj) +SDhFd'BI2J5U(fF@(-*MpbNH(f&1f0+fK('kJBBR%E$4kmQ,(amXdYTE+$IkL@*P +&PKPj#`22r($(!#'amX!01ILfeIp(J+@3"!%!!$8!!,Ea4+bfm85X!!%(h3!"#VN +!!3*a!!8j#`#3$R4V1#ic!!&YFfCNFR"03806J!#bi,,K!*!+J!#3#3)d!*!$X!# +3"!m!3X(8LR8'&[8,TelN#*1#IJF1B)EGSQSRD3@K$fT!UDUEI#%RDB`-$PR!h8@ +$@)IqD!rY(kUN"4a!"hKRIUN!EiF,21)ha(b2F""a[D+9pk)fXhZ'Tq8H&V[(B5- +P!&MC9'c-H#YNTY[rB`fjAEV6bbFBI-8HE52UiGjiSrhlVfD8NB29*%fRKS&%1'- +aS`1%b29HhD6Y$qVb-bb`1L,SIqqD@TLFB#ddiqbR`3$JV!#PN!3"!!!k!!#f$CE +0YS1eR!!"#D)!!3ah!!%#F3!+B``!N!j8DcJZ-bjcD'aL!!(Lk(0SE'*8Bfa-J!# +bB,,K!*!+J!#3#30,!!!"8J#3"!m!3X(9(Hm6`ek+"j(K4VAGlQ96B0flEIiDYKh +B"&96ATd88HeGA%9*Mj+mZ&r1aflFS!9-EcT!&!5p[%CC@pSa&4e,kfc2(2mjPll +B@HdqGS681r5+R"f%XJjdQFHQYD3!$USZR06*MRCKQiKh+8#0Kc3(F4"q,Qpbk-q +m$E[hNrKq-[MRj-phQ,E+d4p9JZMP11)5)m$m[B!3iXS1jUUHKZ3*R%F$IlXVB[Y +-JcC+LhrqD6K0-fQI$rHhDY+f,"c+&9RHkXMUe5BKVcaBheY1EQ,DdR-4e+eb3L$ +jkSb53Jli"@9BPLqSYpj6i)JZ$(),)bbk6"3R(YPPkHLH1ZMC9lAd,j(JdK+@Yd* +9he&&fG,AE!JA!N#mc8*kM8VNZ(rrefC(H`J*UGNkMf0CQH,!4eq0+J6X3k#'MJS +*RmYTkj!!,!bDJCT8cGJjf+NV$m$rdp!!TC!%!3!!3!!!YJf@iED$YC`!!3Uj!!% +1'J!"!R%!%'jV!*!19'Xi,M0$4Ndf1%XZFfKXBJ!"D4"cD'aL9'0X6)!!XU#bi3# +3#S!!N!N$9`!!!6%!N!32!%,"e2)G%9!FAc3L-0cAL!cA&1pERJ,h8Nh6F@9Uq2' +Y"*!!Ti+a[M-$qSGeFNHC`H'IZ14[IJ*pNQMbBrcH%9X)(b,karMNRc)A`F90ZB! +I*PiEhlSRacL,(e2DU5fjpJU!-eNZ6pIi9D0M6k9)B2'e3NbDXYE(JBBGp2)B&rI +U'EKB%)#DLYf%$NhJG@BSE1@N@p5f`D'ZH5&XNHqiKm0rfG2ClL)`L`'$MPEZcK- +PjQLPTdQ&Qha5,$UNM[dMN!!k&[@k'Ek,5$AM2"I-@0ZI(&+$"AY9JCl[%U$PZj[ +iYHmf[2Fd0Zal+44e&`%1!RA[)LqF3j,jk#f%GheNMj6d)h-TcAfZ4@,j6X1$2RL +h[VQCQ#*-3"6[a3PAH`*,,))eebH&!lQ85c)kj&Uj%ae0-8#PN!3"!!!`!%!!N!N +"$(F!N!8"!R%!!-rMrj!%!*!+TC!%!3!!2!!!YM-[3EBc,d%!!3*a!!%2J`#3!h) +!$#`2!*!19fPNCf9d)%4PE@pc!!%VkQ&NFR"A5A0)J3!!3!)"!*!+J!#3#3*a!*! +$b`#3"!m!3X(9'#*!iNIZ)BM#b!T6Qp[qZhdQeS&S[XJCVcmI&DCJEAE*N[cPmU, +d,L'C3lLUFYI@!KQSU*ZcBpI9T,)INNMci@B-)qQS5[GU#XlP0f*,N!!$Y*-,k5j +DGjbVaCp%Uj-FQk@`+0d&+5LD)YKkQ,026rJC0SaiYQ`#[m(C[RBbqMTD)3rSrb` +b2ETjCLh$$Hc&T,'kK,q*+BJD$dk2dU!iGMjilF6k'piT3bB'PbaE'q3@m`UZqCd +*c1!IC)(b5c$)NL5*Q*YmHA8!TC!%!3!!0!!!YM-2qlBc$rX!!3j+!!%4#J#3!h) +!"!pT!*!19fPcD!!"IleKC(*`9dPc5)%!N!-"!3#3#S!!N!N$2`!!!5%!N!32!%, +"e(+SSMTD!GR2!ZYAQ(%hfFD,4-KE&9%lR+kr,#H%`a05JhcAXjD&%FY54[lGf1p +T0kNVdZIZJMPrQ"@[NM0M-EN"3I3cI#N&Jcdk)8bQC+Rd"D[[q3#DKA9I(3-'l#5 +R%Q![rQ$-HIJ+pM,[%N2bJRd-EI5m,DJUE!%pEZDVPS$hfq6YRqqG(adZKk5cGcc +-&DN,YBJ@!8%(G`,XBVfJa+qDpjJMA6V@8%@SI"-Va3i[kGd")m-'Tm*)C'k*QaB +hRb'4KY[f6,l+T9Q@-mk[Q(clJfEG'CaMm@LrX"MmE0qEG3'##(K,e,BH6Z0p,c* +@+&SiUp[f$c(EkqS@c"0S#$r#i&JUJrj6bq@BX`FM(Pqj8!m2c#a`0XS%&+m-6!# +PN!3"!!!`!%!!N!N"$i-!N!Gb!!!$0Iq3"!#3#NQL!!!"!!!"MdN!!Bj*!!!%E!# +3mh`!!3#3"@N!B`"p!*m%!Np,!*!(23"J!21)A&4SCA*P)'Pc)'j[G#"PEQpeCfJ +JFQp[E5"[EL$5AM$6)(4[)'0[ER4TER9P)&9Z8h4eCQCTEQFZ)#""EL"KC'4TG'P +[EQ&X)&ia)'*jG'9c)'&bC5"ZC@9NC@3Z!*!$8J!"!*!&E3"Q!)%!SJ3#6dX!N!8 +%!%J!C`%$L$*6Eh*bH5`JBR9d)'%JC'PcDb"bC@aKG'9N)'9bFQpb)#KH-#NJD'& +c)'pMBh9bFQ9N,J#3!d`!!J#3"6%!C`"&!+d%"&&eDA3!N!8+!&!!(!%3L"T9EP0 +dG@CQD@jR)(GKFb"cG@0MCA0cCR9X)3#3"3J!$J!S!#kJ!J!"!*!$I8&%3e)$!!" +q$9-+Ni3"Sfd!l!Yb!l5b-LXVieY0hP[[D[HQELEAJ$%!3!-!N!1kY3b!!!PT+[l +J!985,2Y+b&X1iq9cZS94MV)rcirrVL!j0k`Dq"(+KM9jKQ+MCf[`V&ir"HlX#m# +`U3BL1%aA2VhVbkfM'32&(&P,'cJ,!*!$@J!"!*!&A3"`!(%!V!3#6dX!N!G+!&8 +"%iJk8fpbFRNZ)#"*ER0dB@aXBA4TEfiJBf&Z)'pZE(NJBQ8JF'9bCQpbE@9N)'p +Z)%K'8b"fEfaeE@9c,J#3!fi!!3#3"@J!HJ"m!,B%!Np,!*!(5!"H!5@)6P0[E@8 +JDA4PEA-JGf9bC5"cDfP`F'9N)'*PBf&eFf8JG'KPH5"KFQ8JEQpd)(0eF("[FR4 +PC#"LH5"dD'Pc)(0PE'BYCAKdFQ&MG'pb,J#3!eS!!3#3"9d!F!"a!+`%!Np,!*! +(5J"9!41)1P4SC5"QD@aP)0*H-0-JE@&j)'*P)'4KE@&RC@3Z)#"3E'9KFf8JGA0 +P)'Pd)(GTG'JJBf&eG'P[ELi!N!-S!!%!N!@N!)d!Z!$4"!K$EfjdD@jeC3#3#Ci +"AX!#!qJ!N!28384$8J-!!4)08`UE*!!lLSL+&Fm@d(1X4'`3p5`rIcrXejfrjql +1$+GBf'%P+PL&999LjEra",'U"3ZbC6Y1)2Q3!"m"9#5BqM@mKDIGaGRG6G,)HT+ +pI4mZ3pc&PmHP#aEjM6KA6jAe#b3m5Sk53ElSG,A`G'S9QL)q"HC1abaeLk9cJ@A +[I"3FZ$A+c+Ce3%m()3a-9j4CR+h"Zf9c)KIFIJai(r!m3+*2iaUXL26-$cGj+&$ +EM-KaUkHFa@0E8ER-cGETJDZ80pr*q`cTre6rb@d!N!3k!!%!N!93!&N!C!#6"!* +25`#3"3-!4!")!1L)'94SDA-JBA*MD'PfC5"TFb"NB@eKCf9N,L!!N!4)!!%!N!9 +(!&S!@`#8"!*25`#3"3)!43!a!1L)*eP[G5"SBACP)'9ZG'9bC@3JB@iJD@jMEh* +bC@0d)("KFh0hEh*N,J#3"!`!+!!S!,B"(!3"998!N!--!#!!#!#L!4`!JP99!*! +$$!"L!*)!m!'B!)9993#3!``!+!!S!(8"2!#(998!N!--!%B!TJ#k!GB!KP99!*! +$$!!J!!J!SJ%F!)"993#3!``!+!!S!+i"6J#e998!N!-1!#J!+!$#!D3!L&99+!S +!N!--!#J!+!#8!4)#!&99!*!$$!!S!#J!M3%A!J&993#3!``,9@j6G(9QCL"KFcS +!N!-)"b"QEfaNCA)!!!3c384$8J-!"RF093e$)K)4jPjZ%'3Y'84UmN3N#a"CUkB +Q*lFpLicJGZI)5EFc8r+CIhHrlpZ+2"[Ic,He3*,9cZc*j%RB[MZ6%C,P9Z5*V-M +[(j%rNjr*[0R@GK&*&K1b0bh*)LK!iJIr6PQ'N94%1+J,1hML*hBK,0+!l9$&S4C +f%PiIcijT$+G2[eNUFK-MbHfpC'm6p0EIcBDF5mJT4aqj[p)@X[AQGIR'*!P,+@R +BhU3A&C159eN[%2cJbH(#&ajm5X-QD0&L4-VGcEkQ`r)XP,P*,SMR)FNFrFAJLaU +$lM`9cA8P820dQ"q1j-RJ+KhQ[L68+ciKBT!!RHr$(BZ5%%MI@aB0YUmG+cH9Fc# +*FlDI2+6+KXfGMlqi[`EXLf[bq5DTS"GBJ&RSpE(k4UNSE)5VZ#(4a%4T(NC4T5D +'+#Hca)G5#DG%eC'a54-U)Z$aJ`C3q')!Y4*YQG#!*634DR+,6CR$@+QN(kF-V(@ +SLpVJf!+P0U0c9&M$',E[r55!`Li$a$PLQ,KZKIc2X5Gal+,YACH#6FZ"UHV$eS- +Ujc5-Gh6@aB"d'i-,eVDeLc'L6-mKjM,F%r*FlYZBmf)r3FhBZqB8*mKFDkBmH&M +*CEjpUU5NcqMUMHZl,G$)FrP&YX*lJ%6&V")5fb&&5#AJ#$hRCZLJ)NBKdc[fS@l +c&8+41k84G`VH8bAIPL!j2GVYU6-RjVbF3lRZ&DPJc0[DAFTb'rRhYdi*$'iYhrb +A$q+6*eD"#2hXL3&E#6aS*Xkh8XD5XZL!8d`D3&(YeTiH)j,QXMTfCIrBQ',QaYK +L5NVMZKb[jqBq*1K-Xm!cl6p*FZL0,qj368Vlrpap[%LPH%SI@AC!''TAaj91(AL +#-@"3aPPimHVhYlZRfC3AeqX$cDJ8$@fJmqd&j*@%XYf`G)B2KUU3!"Si!i4'pV` +UFE3TZ%Vi1,Y29L@qKkdk$`8SRBhC9E-k+AX1V!#*JeYF)Z3(X`,GA!A9[Q0'IDa +q[E"flB1d$rZ$9epp#4ZUUbq"F")bcdZiN!#&AS+9c([M)*1*kmMQF"*$DeK5eBS +,0G(8$DlUGG,@)I*P,r@PJf6iV!k3!+U,`iQMEf'*D&FHY3@1%H!C2CVf%Lk!`1` +-EZQV3EfDc)k)alY-h[lIZ!qhTr,*MDZ6TKGp,[+bNp-`jPQCpEJ64GUkaD!DXF' +80&)2BbYeEc[GB!TTEhMfk&f2mYQTP@l1bb2j`E4mDbafS5aG4rV(QBS,DAF-pIP +CbZIRk[pq5'N+mhpAIXl%CM(qp[IPf*a9Cbj2D@i@qUC8h'a@H[,JJMDNfrH5e-h +a@AMdST,jr-qAljL($06eY9h'+bI[Gal`F%%Abe@eJpQRlELVUi0e"4+H`Fl,5pZ +Ha$lSC'#l'ZAeThN#F3DQm&#m#9iTh-1AH$!(GljqYG"C`e[Aj!i!N!-B!$3!N!2 +c!9i!!3%!!3#3"32S!*!$P!#3!c`!"33JEfBJ"b"TG'9YFbi%8h4[F"Y*G'9YFb" +bC@eKD@jTEQFJG'mJ9@j6G(9QCMS,9@j6G(9QCQPZCcS!!!FL384$8J-!$%-1A3Z +VJL3qkK$[IhHFK&$&)G4%DP3id51JI+m$XhQ`E%%LLLY5&L[+BUmfRPPS56c20V5 +eRIKlp5'd&R#V8-'DN`[NHa2f&Rp[Uq2[+Bkr"`Z$C0@51V1le%jX88M#[#6,5*F ++)D6h2b'G@&alE[hp!!hQjM3a!53d)c8I9H31TRe)rcV)$iI*09++@dDQTRq#k&T +ppEhe[XIrZIY,JQEAQSTlA2-l*paR2Y5,b2iCjXre,L1E3r2Sef%ELF&(C*Jd)T( +#pFK,#LST),jM##,K-*&P)-*'4#N(P,)Al$TU(bITSp*QRrABYfrHDa1r,6ZbNYQ +XrAKQ61GrVaVm%1D2fkBE,&GRSiHmj'jdIq'+@IR4JL(UGe5X`5E*!eQHbRapb*Z +BmZmrGfA-)@dYfHQr'i"Y)IkTiB`XAjf#C%06d@6BATL+H`a'2eQEE-kf+IpU1*1 +YDdKN$-N9qrQPKCPeRHf6%JDc)IYAk2DPL!&Dh!UIjADp8-!q4hB[5KibK#-S)Ia +D0Zdmaq,MV3&H(T28'jD(r@GCA+CH%l)[SjdNfmEk-UZA@RA5k`r[AePd(Z6H@GN +Ei(ZR#f0fIc4Z%cldphL%jIr[+@JqArAVk3,h[p@GN`4mj-([2DIj5KfmRVaKJ-K +3(i2,4hV#!Ej`Fk``mZU3!'(1Y[VK-#CLRRM[*[A0b2i&[YCHQ2FM@iU%X,h2T5G +"SY-3c&2Z4+H4+(5KA("K63c*QPKGd%6$!8eN1%f`#K8QC%qL3NCVUAUH+PkT+F, +G*ERBE&L6qA'pV%RTqhC*Nm,EpS)Q*pqZHNZ6(BrcT3(Q1ld"T[#(RS!AT@fTJ+6 +j(l-"$q6QQlA0q1#b),24mMSm[r52PEZcdS("#!a5B2!#JqS1GX"hm#+(KEAh#0- +q(T9LIif+X83hfXl(N!$2KDajX'+)-G-JaQE+,D[E-L)rLl1$A@L+48kN6+2A(p8 +riYX1elZ3!%30["K#[P"0iMMN%'I5pDl"+9($iJJJXeh`r)K66A46"'G#6q'"1'G +X)pR$1GJ()$K)%EikjmV"McEMQFiXRPT$L%b1QR+#U2TXMQl#UCS'[kGY`ZS#8XB +c2MHLTK+h,m4QE(`P8j&K"NN8q8LR%p@EX,5+E$ebj+ZL'$'q5jcDiK"r'aCE2rM +![3Mp3ipm$r,r,VUNla@b)ak5[2,NL@EbC-H1&*8aQNammYm8+D,i%Pf)49MDQ)m +acSk`RPqK$Jp1l$GJp$"20l0kARafiHF(YhA#D1kmr%!GMCe)G9dBhH`JPG8R1i' +mL'`Aj[Am0lr)$TlmJMAL"!0#e4+YcRI(qI(aKj4VB",1ikHNqkKTHrD`(NAIr,B +64)dBRD*kI)8(FJf)PpYLUHcfFR"8l3,`e[%Q&bL%`-&&YGEjP4ij#NEd6V+N-r) +qKQTKU%paAR`@8ArV[!i4'Bam-j0c+VVaMi`"$`5'lajYHZ$Xd+0%Q9YU+YAP[#8 +f$94@-k#0MSPSJTCL5S9dc+@K(98LMU4HI-Z"*Rm343l'9e"2HEK`Nqj%)qGMQq) ++R0&[,r0r@fTq,F''-FqLM!jk'3SQjA!,p!IDJk%SKZCHi*)1@H!J&`-")$(rh0Q +R)14RcfEf0$DQ@cqEZhqaEpcchI[hrLLqclAmDE2-8SaQ2eRA5HPZ"UHTC@-&[Q% +8j"YUe1!Y622V3R*TYr#bIG*FD*Ghq3h4Z'5eDXNV+ZjIikS%GB("F9T)XRmAZ(c +KCrPf15FCGQ@Pb-e3mKCMK@#Y%`52'qF!Gr3)R,f`(j*[q!dYLM3a&%UHIUZL4'k +X5P[LF`-A#jZmTbUCk4B59h['2-(LKXPJ,FYEfQK)*'5VB5rk8$c0c%VchKF+rK9 +N1l%I82R'JS*$-Y3DHCC$hSKLHIN04aPS9dcrbk&2&L(5F,9FTUfDSCL5h%8pT3Q +Y4p2A4bbAG0+APYepe@I2P&9YYedrVaAXD'RZ$-&aIf-`D)LDeqZmFX8E`V8*,pF +BA!U9mYJZGlSf+Nrk2F&Jb8i'[Rp08(r[j6c"a9#4MqhD(UBSDr"2$0'm9X&64eP +(U2J[cqZ'jp+,JQ9G0j%2YNR99Z&5ifjZ8A#%cJ*bX*(#@jJU5Y!)f+hZ%ai6K'2 +DqN[dA!"'Z2k132HllH*P%+r4m525"`NbLV420j*)$p3L@B%)&fQ2cAHj)&`fiLX +ClN$MN@6qkSB9MT1F$'G-&b43k21PXRrHr1KIqH54*!+d@bP*RklP@V1Rq[VIc)8 +S4r4Mlr4%IYqf3j8Y'eD[XY"H*eIG-"KBFc53!+V`6R-(`TQN3UR%li#bUaf'@A0 +FScBST8KK4j+M&2I6pMUVhE0JN!$FUHSSGAbJl2@'`P*aRfPNY'bJYShE9AC2VVC +-'LV0Nq(bS+A3*b'"X"%i4N195-SpCUG3N@C&-%3)+h4$prRk"ap0Q11q$`#3!aS +'!)!!N!-$0Li`$e0dG@CQ5A3J8d9")$BZ-!#3!`i'!)!!N!-$0Li`!cBZ-!#3!a8 +!9!"N!)X"KJ!"!3#3"`4,!*!%'!!m!%!!X!'B!!%"!*!(!3F!N!B")N&%3e)$!!1 ++$9-+Qb3!IiC&X0dj141`a3jG5dj2(GX"&32EXIVB$&EecMiSU&KpE-&ZV1V'`$p +MIe6d[rp[Mr0f9KR'kJ!,Q680A&D0p-'14[HZ8aVX",2c+"6FaH)b3VE8Z5$*F`Z +3!0p[JRD#kG&%G-mTHE-6hEc*lLZ&K$2-5eVUQP++(3Xq(j[6I`6`H[ijkXV6kQV +rRepZakZIr82rqj'@*3+i-fUMJQe@`8JQ[%@VE)a9Y9jE2Q+EYiAYB49ph"I'dPT +-T*5d!R%I6(k-`pHZ'qD(TKRU8p[f6Gd2ZK"S@S!R"-J!R!"-[ISY!2lU#3-4I`$ +`SR,K!K!FJS!"JQ*J,6L,N8'-h`a#j")kiZTMNXbp+(%I60pdq8A%+fc,'!#3!hG +"4%05!`!!J!e6#eXJ!`1QB-1UDV-`X!%LBQ!h5l(E@C@J)',$(ZVC`*K9-3YM+VV +hTe1X#JZ*BmLfiRI@!&)SrH'p`)*+Z-9!Tf0)-Sk[fIFQ)JkrkFEqqpLI1PG2++D +4"4f4ZS)CZ+2&'UkSDLHN6c)+ldA1"3#3!d`!!J#3"3J!0!!D!4Z)'e"XC@&cC5" +TER0PFR3JC'PcDb"H-#"hDA4S1J#3"JX!#`!V!#ZJ!J4,!*!&(3!d!#d"')J#AM% +!N!-k!!%!N!8f!)F!5J$""!*25`#3"3)!43![!6q)'9i`)'&`F'9KFR-JG'mJBQ8 +JC'&YB@GPC#j,!*!$UN&%3e)$!!#f$9X,8c!$Gh-YCJEX'G2+9FBh011qY99@aMp +[6qr9HVIZ2IrL'aS!!2!0!!$S0Jd!!!Zb,4Z"TIJ(GQIlqH@Y,A269XhI@GL6%@d +lV3-R+QGCfFQZmRMAGd5&i&,%Ii)B&,j%$*hc3NQSKJ%P3S!ZU!lHe3A!Ni8FS"L +dp)0C(qm)NQG"[L$ILXeK[1,pDj-&TB85+iUjFYcRZF,59(MPm@%"!*!$$!!S!#J +!I`&`"+p993!!!3#3!i!!(rp!!#!#)!!L"*!!!#B*b!!L%q3!)L!#!#*!!3!JKq# +!)3r`3#)F-#!N'Im3+"U+#$)bLL3Q-[)b6M3'15CPp$)5C43N#'Im#!4``"!#2q! +J!3'!3!#'`)!!3!%!!#!#!!!6j!!!#FJ!!!53!!!!!L!!!!&!!*!$J!#3"i!!(rr +!!$rri!!rrr!!2rri!$rrr!!rrri!2rrr!$rrri!rrrr!2rrri$rrrr!rrrri2rr +rr$rrrrjrrj!$2rrrrKrrrr`2rrri"rrrm!2rrq!"rrr!!2rrJ!"rr`!!2ri!!"r +m!!!2q!!!"r!!!!2J!!!"`!#3!i!!N!F"!!IrrJ!)!)-!#B%#J!T#!N!)K!)J#3J +#%![3!rJ))!!)#%!!#!L!!!J*!!!)#J!!#!`!!!J)!!!)#!(i#!J$r!J)"``)#!C +rb!J'S)J)$+#)#!`"L!J0!BJ)'Ad)#"P(#!JCr`J)($!)#!ri#!J!B!J)!E!)#!! +!#!J!!!J2rrri"rrq!!rrr`!2rrq!$rrr`!rrrq!2rrr`$rrrq!rrrrJ2rrri$rr +rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rr +rq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ!!!%!"rr +q!!J!J`!,J3+!#%)#3!Q%!L!)5!)3#j!!!rJ))!!)#%!!#!L!!!J*!!!)#J!!#!` +!!!J)!!!)#!(i#!J$r!J)"``)#!Crb!J'S)J)$+#)#!`"L!J0!BJ)'Ad)#"P(#!J +Cr`J)($!)#!ri#!J!B!J)!E!)#!!!#!J!!!J2rrri"rrq!!rrr`!2rrq!$rrr`!r +rrq!2rrr`$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ!!!%!"rrq!!J!J`!,J3+!#N)#3!T%!L!+5!)3#P!$q!J +J!!J)3!!)#)!!#!N!!!J+!!!)$!!!#!J!!!J)!IJ)#!2m#!J($!J)"Rr)#!DJL!J +-S)J)$!')#!d"L!JCI3J)'8F)#"Rr#!JF-!J)$rJ)#!"J#!J"X!J)!!!)#!!!#!r +rrrJ(rri!$rrr!!rrri!2rrr!$rrri!rrrr!2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!r +rrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!rrrrJ2rrri$rrrq!!!!3#3!i!!!!&!!!! +#)!!!"*!!!!!*b!!!%q3!!#!#!!"!!3!!Kq#!!3r`3!)F-#!%'Im3#"U+#")bLL3 +Q-[)b6M3'15CPp$)5C43N#'Im#!4``"!#2q!J!3'!3!#'`)!!3!%!!#!#!!!6j!! +!#FJ!!!53!!!!!L!!!!&!!*!$J!#3"i!!!!(!!!!$i!!!"r!!!!ri!!!Ir!!!2ri +!!(rr!!$rri!"rrr!!rrri!Irrr!2rrri(rrrr$rrrrjrrj!$2rrrrKrrrr`2rrr +i"rrrm!2rrq!"rrr!!2rrJ!"rr`!!2ri!!"rm!!!2q!!!"r!!!!2J!!!"`!#3!i! +!N!J(39"36!#3"JG6C@Fb!!%!N!3(8f9R-`!#I`#3!`G6C@G1!!2r!*!$"d&38%` +!N!BFBA9cG!#3!`&*3diM!*!&K%C548B!N!@%!*!$0%&9Fc)!N!-"5801)`!$!*! +$J!!"!)%!!J##!!-!JdC548B!!`#3!i!!!3#"!!)!JJ!$!)-!N!-J(kNJ-6Nj-#d +j1#""E'&NC'PZ)&0jFh4PEA-X)%PZBbi!N!GA384$8J-!!3%08`,FeJD6pp*'c88 +6E3#dq6FZ[0Y0'fE#E,kV#pq%hE$Ej0efeG9eB3!*1+@)rh3&qKSdTMBHqm5GDpP +1JSQ`da$k`,2S!'L3!-@qrJ5q"J!!"!#3%B%!N"k"!2m!N"b"!&3Vr`#3'S%!92p +8+rm!N"L"!&6rN!08+rm!N"D"!&6rN!98+rm!N"5"!2AfN!08pT!%+rm!N"+"!2A +fN!6ipT!&+rm!N"#"!2AfpS'3"PEhp[BVr`#3$S%!pIEfrIq3"[a@pT!$+rm!N!b +"!2AfpPErIrH3")(rprD3"#[r!*!+J3$epT!$r2hh9Rq3"DZ3!hrfpL[r!*!)J3" +8pT!%rhrfIbTr!*!$9&4r9L[f9#[r!*!'J3"8rrD3!eErq2Gr+Rm!N!089+[h+rE +r9#[r!*!%J3"8rrrfN!2mrIG@9#T8N!9rUrIfp[rr9#[r!!#"!&6rN!08q2ErIrC +r+T!&9&4rIrIi92q3!e6ir`!!rbY8rrrfpPErprGr+S'3"+a8UeEfN!2rre6ir`# +3"2mV92rfp[cppPDV+S(fN!1"IrrhpT!$re6ir`#3"[mV92EfrIhh9UZVrj!'IrI +fN!08q2m!N!Mr+rEf9[jrpj!%ri(hN!6fN!2hq2m!N!Vr+rEf9[hrN!D"pT!&prM +r!*!-rb[fN!ErJIH3!rD3!rIir`#3$[mVpT!$rrrirrripT!$prMr!*!3rb[fN!2 +hprMhN!2fprMr!*!5rb[fN!48pT!$prMr!*!8rbY8rj!&92Mr!*!@rbY8rj!$92M +r!*!BrbY8re6ir`#3'[mV92Mr!*!FrrMr!*!Hr`#3-8'q384$8J-!L*3393eP94% +!)9AZ4TmqRj95PcUATCN,r9RRV)1Y&6PH1jc3GFqEVLjEl3C1JUk`V3AFmqjV$&` +iAPc"J3XJ$Z3-4`bCdm0Y##l%,r%icjZFCiMR%66'8q2A)&qI0c'k%%2)(0[kr[[ +m2Qer(3-KPpIhrcNG9MB5%3)"N!34!C!$%8)1!&d$hjVfq3GkSM-)I$p%JIi-VY( +dH,DTQlm%+I%l&pq,KG6e2rZA[*+*Ki9Zk1YTJNrm1+q%MK*aN!!IIC1)fQ+kp4C +CBci[B"bL3I2"8)RUN6Ap6DF6h`'adj2)DcU0"36Mmj9TS#RE"L,9@i0@[`hNhLm +(IrBACr*6N!!XQl+0J6[RfmDDYl`eZ-EFY"[,Ar&P"-ZGI0P*VbG+3ZHARDAA%bA +"9VlF#D*`cl+cRIm'%,b12Zk6)#!Q(!22j$P$*LG-J5E2RrM!p&ER[i'19!mLFeA +c6N(d(66I2qpZca(Mf+)36klmC[al)S#I%(k#V6P#rY0r$hpUIYB@",(+iU`)$BR +rQIVVj*!!BbLV12B!RhBj+rKLAm4PV[p6I@`Z(mV1**MMND'46f-5JpS*JThiaJ( +9e$mc!FYX`5JbS%jQc(ACRK+qcZdJ5-C%8Sb,EF+8If@U8+AL2hqGqLXec0M8ApR +%13bEmE0Pp!T04Dl`k9(pG15+a-THM1dE%ppSrR'N,pSRJRP#jC&[cqrQ*)1$9[I +RhBNF%9hjRr(2XIR2XIR24E$MKqNLeYEb!h@!Ecek4d!G-&[-pGGEBVU94iL9[h) +jSlBI2Q(HkZ+[+[6(@hria*@Y4q8F&#j@-A9AJdj-(R)FbQf3!2[cZc[L4$4YlEI +HBNe59SM+BKeS1Xd'k9K)5mT1D59#UF6Fpehf)N,XfQ'I0DNGG1Q2r%H*d0P$P"d +SUMS1S,'4el6EJ5hD[9K'N!$*Q'clbaYLY"XNB2b(E,N5qH21Jd12#M'9APmSe-r +AqEGd(S6+!K$l`QLhqIk0'dqp,6``#)mmd"4c*QAA2K$"1fY'2p!8*qr9"bHDT!" +P(`CE&M)rS()$Dq`Q4pHkf8k[l+V1N!$IV2j)cTBeXVrk&-MqIKXac9$Y5CM[fLb +`QD+0FREL1hrF,,`J1iF5rPMdRVfG32#2c5+NqHR,Fe621"#8+*2Nc[Qi,%1*8YY +IbXSFAB%"CkKCaEG"aA%TXR+5f)!rHSi%f3p%3F!A[Vb8Lh2BjD(9YZ(0rb!@SB* +"LpCq"(P0CF5DY`MaNKBaE+d$"90r'),RP3LfC[Im"KA"`BkdY9i+[SL86Kk3!,G +34%Q"Qb)+34U4(jYD%fNblKY6UDc)J*!!N3(4@A1LZc@[b5JRl8p5G*[[YiRd81I +fK)JPf`+#b0[4cS1Y`Qakrl2fJ(RS[IVVKm`QNkRqXlP(TCGK4bDd4`)QNpPN(jq +&TTlCjI4C2YX%)EBJ,H53!-5dLEmdQpS$+GqirZKGPSCR-ldecdC#,rmB@fG-RBq +U9#8H)X0CJj5Y',!KUXG844BaXF8[UJHU8mejcBHEFTZ+V)JFPBSb+*TEQQh0Gb1 +6ilqD00@cUQI*BmD8R&4Nb"6HZ6K40d[BakQ#RV3iIIJ*aIaNR-ecBP%8ZHUB6aT +UX`cQ@i0VmTSqE,`ARfQ0*cXAIlXB*,bSk5d`eL'6F-q*EQ0J!Z"fGFe6!,BE6hb +DUrTkik3mCMmMbrT,(5klhaLU"aP2RiRhUDXa!UEFM*49-VdXMje*cl#(-38U-Ie +Gjq,LM8rYA5XDarKRk90l9DV'`kDmaVkRpSTSSkPcmDl032`jFeT)B$%("mc)'XT +E8SHIUXiC2lM'&MFYETjlq,R3P#hHjhV+eAbp+Drj*L+*i'FZ92a&j`cc030l*rU +Jj2QQ4DT(m&10LRQckN@`9022[M&E4I1[$81rZ[RAB'XFb'XZ95h#C#2pD0RBN!$ +Bf"!N#Ep""!fpI2J#IVl3XRk"RrHdV22Cd0rmke2eI@*Bf!DDRk3-&BZ&`"9RD(r +J9,GbBiLUkpHBQamh6Uea0@r&YMpd"1dY%`mhIf'deFDJi'(()YAM6M@C!6,ZTma +T)[6'Ai,)5PfA!X8CXT*f@5NE#8!A8#LK,&pcAZ0SmmG@RM8TNXe28aDL5#,UGP8 +rPE$3#e6c6aZbA!c%rbii5Fb2,%@3!*k(JX3"NTTca2DUZAkEX+d4AR0pcE'f[Ai +UAAecMm8fdDXHrD[A%Q,M6qPIk8r[X'`pBX0NUpKiKIk9AVRHXK8Jjaf[f3+ck%$ +)A+pcBH($`F[Ea-DVp+rdkXf@VFGXlXS((cPkmq90U+VRp[dpUY@r(a3KQfpZ,`D +qF))pCB3#L'RV2JYPq*ZV@j%pKb,C8Ie4Hk3,5-kIA)SVjpdQ3Q-$64qDhpXad$6 +0r0RbBf0Hmh[,Mfd,D0%iX[9B5[,Q)iF(QZifIapXFm(ffQ'hqI[,AqX*E2b!rT9 +qm2L4VDr01JC8qZ6)$8!-Rl0!V@aZ,jr`F@6k4p[Nb$kGD'QZ(XMQfIH&e3l+$U1 +XZq%D!(B$MC01R5j#fGBL#H,93(e*I*Y)lYXQN!!p$4)b-NJT`KT[Pl0MZ[B@aKJ +N4RN)1Ap*L!pMEIlrjHaf-lEG)GpZ8"#b**1%dN4EC,5bHXM!c#KBV#e%9*BG-0F +N#Q$Y3@Z3!)kJ+TR4DUBPSG"mE&DF,V%&fq2P-Pp9-,pf(F`R&Fb(9QG@28-'hR4 +'BHE2m-cNA&9ammIdXBkT#P@&6FdSH)-Lf240D9+SKEUT!BX!`0"[kS94aLL4M&[ +*h%%Z"MMHdLkHYMM94[pdLee'Y9P"Q6I1iCrI*d*f([cfHBR3VGU[kBlP'i2689` +Eh@"ZJk055-SbE4FTYb",a8H[lCZXkrCj'CU&K'Vcaa6eXLDU!cAm9LHDk%*YUj, +%&VU-J42G-Cjp'r8Se80CPfJS9jMr33j'k4Vh5C[YUC!!"&"fLLMqkHKR6D6ar"T +8S)eCFP*MN9eV0)h'03$E'p0MlI%H-3,&$@-aC8e#I49bhZ*K0'CdBK60ZFA&1N5 +hfM'`j&&l3Jik2Cp,9C%k9S&#a)LImf#50Gd%bMFk`b)388&43Nc%M#V,CbK5e14 +'a)X8fJCFJUBHZ$3jP$I-`F"eeLM%aM4A*SISqUclB+Kq`q&aQ6+Z3G*2iR!&$VM +42&hmk2PCJNc62NXpd(acLKT4T,B10*G5dcAJRb@Ja2&6h9#UQl*XIP&PLbZ')l2 +LYL!bT46Cih'Hq3j(TH5H`0l!8i200khTDbjpDJJ&mm0,5P!`cq9&m9TH&!Xa6h[ +Yk3jF#k3Sfhkk`h+LflPA'ST59')PI,$i851bJl`d!6H2BSk-BH+b,Fk9AqqJ,DQ +G4b1$Hp"#81d0BjYCkGMZTA&NTZ6[Fp2425)b10U03fCEQENH!%Ua3S&mDk6!0-% +3VH#)QKLLJj83(@K-X%XkfDADU9FhfZ*G3N+AN!#eHF1G$-E&8UC'UVC*CE96cbe +Z,V@hc-KVIY`H*3#!90Vm4I8[V&j#rY%dLLbRKbl#P8PEA2R#[PPjJC9-`2m+6!M +CdBe`0)*"L8fb`rK+E8aKLZXN4TLEQYMNfkXrHQ95b#M`%-!ULPr*&Ufr!#*L3", +`bPlMmB0CSJZ#%L5SI694[*LG3R$a0-AEXq9ecUjb"&Gc`ERL4eV"K#J6#qB11+G +mU442TYfUckcUiB'E+[8!&$l@2p6j[*@CUfSr9I8dI5%eDj0f1SET)*[ZdNil-1f +9TXmB4'c#Y*Y0'd5Xa,5264Y%8!CQP5&`%(LlrfDT-3qbC5'@(l`e#"*M)B"pFZ1 +3!'YMXm5q)6(&!C!!G!$ZZ`XHS1TA'@aPae"T!E+He5d45fh2AJ(`+iUI&K$iKLG ++#ak!D0Ni"3**+m!J33$2,1(dfB)a3"eb6m&Q+PE9`JjR!8aei8JKM[$M))lC6,Q +UFAj`VH*J#i"!@@8"3DF99a&SZ!!(DRPeHaNEEAmRZk$%N9Y3!MI4VF6#a#k!Z'8 +JaY9$j'AMZl8aA2%**UT3p25SUU6M"5RQY!!DA2ZQidJG1CT*K3Ymc`*0)qpN&aA +5X[QEMYbL3XTB!M%c$HjNBkE1[VDQ@m"3p!kjEad!H6e39*3R!Ul2f@YN5af!SeS +f"1rPVS6$U#cfSKQ*6kYQ)++ULMD5H3LrhD0cD#lEYK'ip84G5[+1bhGBN!"9[M2 +QN4fD1L,-Sr'QIePhKd8hJDd9fr!MqjqSJm#Gh,f`"!54VqMk`8M[)+C,#)4S3Y% +Z*jhTlC'19q(5TYS2TjXZA"8ES@CN`fh#Dipb"c69i8fEr$&rrTA)d25qR+d1-$[ +E54`KZDq-#CVD9`Ee'03A)UA-@+5b1&[JUZI+LZ,LZS6Qq8-C+-Mb&kP+)S3Q8!5 +KXEJ"P9H180h,&G%"-AZE[`3$C@!ID-JY+XS44H6N@@HiB([*[TkL`ZCjh&%6SUZ +IYr88P)5"2d%81+MqpV&UUh0'p)YCFB8Cqb9(*DX%L%40lmBjQ5#j4Fh!l*)RLDK +N@P3)Ti'dJ15@#$*2)%q)+`4ilr-fIB0!I+"93Nk*r'@-Zb1@l!Xf9E4Q@j0J,$, +R&YV`XkQj+EU)`$&9LEdGC['DULM2Mm8P99'11TVV(X4%"4BiNZ[MMSKH!%D1b*! +!iBVTVTcU5*q%bR-ZU1b!#48j0MU`T-ikX+6+R,C@6GZJ+KpN2"FfIC1KkKRYG[, +Jj@i`,9jbPCKZ3$0-Q0j!3dcdiF!S'0Ad`Y3N-J"F$LbjDKeB2)aT[m2&+blrJB! +aBieVbG9bANIY`Yh"TMaFM#l`%X#18aaJJR1N8bD3!"@[A3la*KT-RlU@2%U!b!N +pBKk('d6)bkHkk6L-e'A1qhFd%C1S')dC&aIrHp8D6#bj-Z!Up"UB#&b$f"P&8H9 +@lF+l3#%SYj!!+YAPR62@[Pk*,HdT[&Lb#jq&M@P4K0-P#jd9D+KUBX*l`UKDi`) ++LaqYQ5KHUai#Q)!#VQZYQSSiFqjf,`Fr,8"a'Jh"f-8VfM(KjG22m5TemD0U0Zh +Qdl9XfTmQfVf%B[3m!0E6A)8*S(BHk&*8')N4Jp0JYK`)%!-#FY-"`9mJUZP&G%" +iPj4SZP-(JGV!NT)h,36-%(PLU,6`lihHkKi%BQrK*ULbMS`3362T%*TZH`ZQVNT +6KF8djI4q$J%8X#G()r+qX9#!QJc%JQB#VX)&2B@E8Z,,,G*9$8Fdh6P*Bl`'diK ++3R@6Y,9LMDCE)8M`TNGNk1('!caE306f`('H90+#3k5F2IJjLS-0($`DYR-bmT* +(8F6IY!D[Pa``jb)`JTN3Q5JYh%6!'U,XU*j881M(6e3L&A6YMHDCqTU,)'V+1Fa +**9$leh558!#0)Q3aUKTJ6PPQ3V-hc6K*$YZYf66X2*Jh5-0f+Y68FN5R[QC4BA5 +bULhAj5f%Lb#Ua-PpK!M-Kb+[A5GfarBUSmd"8mmjKbUYGZkLSKIQdR&,@ki3KG& +VN!$08E!-dmpG5m[6#"JZY3#Jl`)CEiS*5-[[*J1P#q$+eP0`KB+25pL6R)M*AbL +[b[h+m5bUN!"&ck'B5PdUHfZ`D1ZKkka#!ZM+5[94BhS,C+P,T")[#VTRKJdU#H3 +kHZda8M'#p4i8*dF*r1E"1QP2K,fBXE16TT@"+'$M4G"4BY*(+B,DLI#J&NL5QRJ +"8'`&)&Um"CI)[D@&SbHZS*NPa(Z1AUI202$f+c&Z'!"9%0f%j0Z[D,Sam#5J[MZ +J2P4dJG881+*%NkPS,P9#X49Y6"HqXDrY$pqBdmr-8'2Y+@L`pK60,1H+1@5`9Lp +Y#U*YF!#RKP@,2STdJNF5@SYmbm5NbmGQLMFE#LH3!2'+E(%UC&$XZ,J!LF$h@ZH +-,4q#`#F-lS$F@CD$P-C!HdI!9rqXdarY%+VJ)E[$k-G3lHN)j8@pU,bAiZ1fEm, +VXP#@Fj[4TQ@ZXUmdHSPjZ#2`[@J3c"AiZ1hdZLa`fSlXPVF6$)NMR62q8(UL@e) +&Mib%j03-m*%hAH8ic#NNGeY&p5@Hf4cYR1Y)#efp,@%E%c9I$LE-@!#`r18FTjU +bZ3$mVkfZf3Ib#3lRJ2J-XdkBBllJUqZ3!0i&3r9@ek6,P!m#G1'16d3)#AS@hE0 +A936hC@T+Vh@D(!"HFZ9l#,`2mDYXpe$#)Jc@*FkeBK!5SGLik3)r%J)cULe-Hc( +Y`b)S3RMTMAD*8-#DQe4h"D`4ekXZ8FD&9ILlK(GG`ZPlPB6kSfRl9+'V*kAK@R9 +AD#@b',kh!`9mJrcQMj'T1R(2K%JkZN)AEr1dG!@fB`rIL),iB%m#mCYI25r+a#h +hT)A8SX+4&Yb9eiHV+h"mc13%QEP3lViK,CN[2%CrEFcHHX0jq0d0ejEC4pii,di +,faYlHb2pYiYaB`#[IIHF"hfa!JSq)2FRi*4pq*2lUMV[)T1J3PA+KU0Pp@+H%9F +"&mXSL,B`P84GV"hCDV0XBrHp$&I,k1cj6TpM[V-PYQZS4-KrR)[-4@+cF,F"0EN +-D$lSR![f5+adIfE+'96HXEcMUHHab$Mcqc2lXDJMNMB@bqh'Jh!1%![qR`bC&TY +[1jQ"4@$NH(V@E9LBm[+))C!!NA)mMaCe@9M43V$rB%a(%iKLScGk34a%%V#@k)A +3IJ#qhSJVjP0h4ApjJM,6Bb$CG!91BlQE+Q#+-J`FL%4[`1VXBT'f5Hjq"SAPepk +erE$(((A&2FlKU'ZIakR'TmYCJDNZZ%b)@!@Z64TK$XBJQ6*%#5QLFmHP4P!V9q@ +5i&Z$8SAe3ThGKb-LjZ2ZJj442Ndb"M'F-,GiR+,SMYR#[Z[LMf8rAXlQaZ`VmlV +pDq%bc-eM1-`mr'3H!)h+`&iPQ@)HN@LkSMq,iNCR&*pJRRI5*5&B&&-L4SdcZ5[ +JIk%15Cdq3#!GE[T!MS0YkHq@MBaJ'%@Q)95MpTKGkKmiV%K)9i'2cqPpF5bQVKk +,4DAKXM%F'8X#a6K-44rFdB#F*RHrJ5DJD,Q"QX8!r-3)IMi&'$PZ(+Q149fUDIC +3Y5"$fp%N2$#d&ZDDNY3,`&%rNX2!+3+6H$N+)hcjXeK)mjRf!Vq3!'qJ"VF(JU* +[[#aD6HI&0Pc5i`MB[G@K@+Jk5+,TGD)*cNAh*U3V%%a8p9a%NU2S&m29[`"V"E' +Fq)!c0(#'&XkJPVC3lEF2iiVakULpBQJcR'Y+%8`@L@Me,Hp3SM&*I!8r2LeF2$q +qYY)9dLDMf15Yp)S(1LLSA"D2JU9R0CB+iH'-flK5HUVlT)#ES)",dHP&4UdIj2j +5"'8NhS"Ca([3$%0L-k&@alcUc5+!iVA%T'EXQZE(B!$H4"f+C6r2d%1a`J#ijmN +9T,QDP'Uk9Bil%j5*D22!IGh[(*lY1JP(M-N*TdrYZDXqYNZYMVLUHr4&#"#qfaU +%@j0Dp6JDfRIA6Xd5)#G%iEbrP5F'38D5MD+-0mJ8jR3h$P@S(Rm(c+UY'2K9K9c +!,eBcR#TV%'c$URPJDe'p`!pqKFEXJKr4iGp`TieU(+ibMK$CJ+l&pBr`DchDDp8 +E*U`fH9fL8%Q,GmLTEKk438&BH)'VJB[M)P"LfAAF#9%5L6,!lKQJLjViKPqN3rc +9,8Kmi-8P)b#5HGJe,3U%TcM#DRj&9289hka2[eQSq!@1iV!@45NC@p8lG'JH2r3 +#[p+!h0V9eE`+pSN0BMHYaRlh1m5bP5,B'+U0DB0rYpk!q#DhFQ8p`#1"'j1aM'e +5E50(G8Si4)N8T%e[,RI6$b'K+Q8$*%')U`!*Xd@Im#lUmSQm@96%hMNS*IGU'T% +5AT9m)5AhiU4,0mKRkq+8,6&LLj2C)J(3R,dUj5Y+USJ'eJZci[BS%4pSZ$da+`j +R*(pd5286%*@[R*+5aC@5Db5DAMH$1CdcPqSc1+5X)P8)Vdi61ed!eXfB!#,bZZT +69L5&S`ZEham$mEEjl9Rak#,8TL&9XAf+(i%iPLKKGPFm9U'Ia*CfG3%GHfJ@#)J +hr#8CXrPS+`!`dm+#i%0%q1!*1+4%*qS`CA@%+HY659Q2,QI+LNS+DIS8)(fpAMf +QGbAP&-jA+UI%"p5(9(qbYfJChk+QI1%RT$6lJA"PE@r!BAYjbLUi&UrD$-VD$J& +fC$Sdrfc9kYQq-&`pMei6VKi*m$DB+bm@15QTj(8i![!-M'2'(DPRdP1%P2b3!!T +Y-NI*d5`bmF+Y2%RGL#d`13((-I8[rA`L+8hBYaJ$#P+a)4(Fj&*eT(H@1cSN!PP +dB'brF26QE%S6VC0rHRrd#M)0LBaE`j[Y2'Y*EK3q,+D`3+*Q*"*6Af-"ZDihEaU +"kZ1+jN283pNd9+!I%#06AHj0ANGI6L5k5I6)`MkSGYH%)U,&NKCSElYfCZ45V0A +@eqTrGBP+95G'EN$HNeXFcicLFq#NchX$NZ1*b+9)(bU@@hGicCr0YZ6-aI@q592 +Z)VVBBp0Ir(Qh1HpeN!"!*[Y(-j(&8)qUa'GDr(T*E"081["k#9bl%2&6pmTaHiX +d*4(MIM%AS)eDQX,"%MP1ahLcIFISllRMQTEBlX!VC'FajKpkj,Mfi%`j6K%(ac@ +*X&G,53jCGT8DcDQTrG,a9ZQ)P@FjPQb&Q"CGh&l4[UKNFqZLNSH`1C!!Tq3SL&3 +J3jE8%L-)6ddm)YVd"XPIdBX1PYN6E8IKe,T)9E`r%(0SfI,qI5&Rmc)fQi+YY6* +E`H1-,@PJ8`F0#4Q4dK%E*2$H++*(pq%rHc4kK#mS%HV+k0(4h[a4QXc)1A1F6bB +G4qdqaa%N)JhSX`&-6ZZB25FV3`T@Ah[4NIeQ25@6prH3!(2,lXrU!hd#581ji9r +X(cTPRYMG1pMIf6IBhGEA'q%Z[ec)mD`,CjL3!0LUK,c%K%bdp8p-IQHLFq+XAJ` +&)S"4AVC`Xi@2,mj,JF`Sd+P%NVfUB+mkfB5'XXD*0)bS2#mL-!+EP"d[SK1EaA) +dIGU0E[P'DQED,P,&`TSqU(MUqSFLNk-6N9%K4Ma$+CR(dc2Pe*aFq`AR`C6MkI" +`PSqI@8TS&PR,X&eH)2Lf)BQVGmqd@-KdPV,R)$$DJ`U)`+RAZ-"Z$GrD9DUNi*C +4NVKQ4`eFDNY3f809ULmN!1-G0'Y9M5#2jB)eQc)l$PXSF6S*P-4GhJeepC!$4bB +e[81mf&&GXCC"E%@Bf&SZpK1klJ4P&#cJi&36&heC,rT`h(i[!f9UDI%'#PS43P4 +j9Bflka-Jm%mBCm2TI2GR&M3BpJ4L0R,&,4V"CYZPV9-`KFK,q,PLM$BpIcLqZpl +5SlS%Gm+!-l3Rm-jCdG,$+q,(#kN3rHPJpbNB6(pE,dFG@I0P(#M8)bp,KC2k40h +3EdA%q!dTLMMD*ATP)fXcqmh[pj@Tbq`pH`0dK%a$BYVRNjL+lL1eG5#V`4KS115 +mbA')M[cS,&9fBL0$#*8GmU-R1[AfbiY`EMJ9Y$(k-@3HU"-$f4,`)Qd&!5"#aMr +8h6RBIeDlTI[-p`HS%2H6UJTIKkT@@XH)rQf&'eLQRB4DSqBXJBBGU5ZQ!eNB5GH +TQZZF86S(86*XFU)k+T6Bm1+qcKQlGKf13jA4YVqS,B3#5%KcVp,Y'Z6R+0"A,81 +Q(,qH%S[Z%6cS8F,V&K"00"6i%#R6(+ra&bXGI8prKUE6P+0[pda(b&R4(Rhc(pi +2(Je9CRZ6$JiMDDSkLFCVI3$6I[J!94#ED9$2q0cJ[Cc4p*E0peNKh(c5b9QaS+) +R6XQ&(Dm"q2R#0'KbJl'qa5f*FYTiT,BBMQ$$bh$XJC'i0%QZE80`lj9[Y&f%S*P +U0c8rF@%A8&!lGr"SI`B4IS`L[%IBC8NNFm8JBI0'iPa-+Gck)%B5`6H3!%"3H3J +CJ9#qUSR8"+EA86c!m",AN!$K(3LShACI$a`@#ql&&Y6F1&SN`49e2A'ZfYFS+q0 +@%,3'cP+(%HTLCL3!1qI$5-lfG[C'*YSUf`T&ebiBLdGIkHm4MQe#)kRH2[E1T'V +A`'d%Y(!3D"H!PIGli[B4Z8e6Pd"A#IULk`G%Q(+EYJQIK-J2*%68U(`YqJ*Y)49 +!+#hk"cq[K),Jc338KMDMYrc#F$N1pr816TaU'k9MR42I`G(KUIlFp-b8h-ad@31 +McNc*c%h02--&UJN-YNc#j4)rbCLDXN#4D#$k$K(HNM'[+GF!i&r@p%Dq-pSp1%N +,"8*NV(!dR%D&(SJd`P$iA4Sbp`lGhYmjfGmR"6HiJ!A&Z&63qdeNkK@Ii2LEp5Q +KfE6i,$h`JZr0Q60$[!!6X@h%`LmBC`%GlV+hC2'Sp%XU4!)E+FScSFJ@&"IeKN" +rDE!l-Y4V3%$DX&-b$)"N&5qLN!#SB%KAk$Y2q$M5fpBl-4Pfd%T*9rd8jE[VHB8 +BG@5*6LFjJA8fcc0KJ%M9k,,e'frVKS$"ENe[*ppiXIRqEj!!f54(J)"N1V[V(Hi +hUD#@6-L[4PDZ2E6RVccSS8VKlQ9`-d1a8S(QJaZ"4Q1,%qMqc*0MFB"5EdY"b2L +R"LJLjFECVh&aZ@Uh0N,pXCL*h&C1KiZcmST#qR61q*ASLLYI!`KS+1rkJM[BpAE +Pp8!hqRH$S[-([DM#Y`QhVFcV8RhSp(h2"9GC+@+1)f,31B9kLel"9''EHXrfGdV +"US4("iVXJJDUm[A94Y'9(f@VYP1eU$HRBcMBfpR(Ma948L8H'%dp4FAEAN@R(4B +#V)dU'GPG1KFAkT'UZk,I3RK96rc0HNVBj3$3`BY)#6dl,a!AL5PHh&*L'f6X&"8 +6F'jb%B(%A'm9FTa)GE8pR"NA[[QCipM6-h%XZMZX#%E8[3MPS*P#9b'cS,0j[N& +CH(d-L%(a%3eGdL6VXJf[jDKGLa)UPEF)M2ceaSkidGY`+%GkPB&AKfAhjaCXGT5 +Uh8304k,Hm4*(2r(*5ePqcRSb&YVfUMb9El&+6Q!qr4EfHC[R!b$f8SFX6%NpT+$ +#*k(mBPcJl8(f2U*X(%@5[QLF3XA,LmC4UX#%2LLcLK003$PqCk+R6[FENa21Xc, +ElM#rB)SR8#)NTT!!P@V[L8GISdhDTka6G"!%d&B*1*3YH`3ZpZJV69`-mNb0i@, +c"&`a@&&-J!LrIJmT$XVRi0K1(JA,T)XCU2-e&-8SqQ&@89afBD9P2!kfNA$NT)j +[N!!&GQm2[9l*Q6Yi-Z@G%T,+VB&&jL`I9GiL%q2TL9ZMFCqDMTjMk24`92Cdd!@ +K(VG-dIBDMcDiP1T9`45`dD!!2GLLe!#"XNcpT,K4YEVq%h*`M&J1#bZKibH3!0C +JYM5mDk&HX940I$c8VINFe-,qcV2GTdDe+U8!03Ah),ATV,b1`!5lc[%5&5YffA( +SD9TiV!4``EAUYi-*G*Mep*(Cr!8hrl2fL+lhaMmbK[CYF9)J823C81&423cRNG" +Z%VmbBDCZEQDrI#m*TqSJZN0YrZb6)ebSpr#BkLc%SMXZ543R4ZV)-6PFT$3jpc* +-i"N15#$V"38)1D3r)c8S!M6aS@%L4"-c$"0"QQJd6(KTBKiAMQkHN!"Xl*RPPfZ +1F(+9j4dH54j&*&dkeDQC',UpYh-dmVPHQGmJCDU*(&11-U[#PAPr#90Q9CJbqr6 ++[2qQ$NQCrNV+p+p5QAj5jSa`C3j+JRJMBR99XXPYiZE,9KqT%HBeD$![!r-l($$ +hE$%!jTF(*bC(%9+C&[592DQ"9jdQ-LZAqPA64-[8E&GZQRj3-c%'S(p2!"06$@I +c)L!XZ06ha1$1#2FF!H+&%"9Br"H5#2UmJ$F1@cM,*Z-U@'caKQbUIT!!E1pXE*N +NqQQTfLC!UeiI$+lf6k+4hBYU[VYcp`3$b9&9"rfXQiSS&5mmmYSG#hRNV86"6iY +K(RNSSKmi6*%hqeLfS5Vh8'&Mj3dE)JZJF+f9#Ji@[1X0TR09+Ykq-k%a++j)Eck +mX`a8EiA8-%LXii@&alS198FKU5qmDQ+)YM"%NkLQ#KAJ4CCTm)$JL,PCCA[DN@h +IcF%`&c+fKMpa28h0JLkDmU-K,hl"+dNGN5lT5RV"!PCl#lD-Pa)30cL1icSh0am +%PTXXXIQXL9(K'!b[D1e6V-$NRGe*cI#HZ+3@V6&",Am,Y6#Gp2G1'Z"B4-p101& +*L"U*$%Ie4%9Nb1m(X#e,Ve"S&eZec8!hLR5D3[(k2+kDdMCZSj,kFC(K"RrCGii +EM4GbRA39-`38X6S,%8P5MERT8J'rG3c+Smf-8E%X!9,'0jSkG,pa,,5M!VB)5b# +Q!`-[M,Pc%E)9QcTkd!8A4%dCr8dGC",E"!QA`(pe[B+F-F6)'AU$P"Uj*!T0)8Q +8"#BC42&Ua6I!'jd%!M0#aT!!PT!!SDq`Si3ij#a(TEebY8Ul"eA4U0A23,!5S&b +Kh`LDZakU(P&K68'GF3AbfSS&9c,FP5##Bb%PJ#)!3'AVLFH58Y!T09)e5D)'Y%e +P"ZC*@1XE'"AS3"+45dZV@Yr!abCm[&(H3FhmQ!4X+&`(rr"!H2-IJ%3j66Tq33X +Zd2%,@UaUN!$TkDG#F9&5V'3A$FG@5Nh+bQa`r0K%$)DQj(IlKeE3NQ6A4R(Y1,m +fDP9V$5A)VP,(@L5#Q#6q9e8dU9Fcb($PY!pA+AMG#J3[8JS'X,&Dfj'*6@V&*VQ +5r*`-iQCL+jMBC*b,rCUD*[AJ2Sb#3IY-Q%HVF!p(d3"!5B,9`XF%Mc1&HbUciC) +LBM!!U$mPK62iP&ddKBYDq896r#,P*9(4bLlaa#S"Jp)&Ahq%ASB"STAKX2@lD'6 +9&qfF(Rl4"pU0'-!peXbZFAVi0AjF3d9"NSQ1aLVd6DKRCY1%&*!!$[82mGB5%k$ +@"L1e9BNL-['CS#N@M"6SP9bP&iBLmq2qSE!5Fle8-,jU&6aD%Dk#KIb5e8VrpEY +XDY@A&F[KPhh-e@fSIeQb%aZk`+"%-4A8`0`[dX3"i6LEBapr0HS6rh25Mi6G3j' +U@!6$Z4RYF1J)%CLfYRd+#6MX88Vi29Se1R4!&E0&VN5U4Lq0$X@),FMC"'HVN!! +5L1qZfNf-IQ,FI@Rhd25cH34fYXK90MFbXa3*4PEDaK4)(4$lKFdGk@dBc",q"4i +dIp9H,hIDjBQ3!2lRT2#RkC-KJA*A%4J2G!5k!S1"dF$*J$'`*h!j-#r3&*JHH$p +`4f"MS$43'%U'2+(fd+D3!#QN#GdEbJSG#0@&[JUp'*SGUJrG%GSB+Jd9"T2"m@" +(X#Xi'"`0fS2T`D2"KF(DB%0`CR"ZF'Y`TcIN9AX6hNhH3HqSeqj0paleeRJAH&r +hc[$1m9lVhHcGjIDl4p`kpbbhfEhERH&1F9[F9pf2Z"HjkpehZ*pdlr,jIF-qR@q +@VmqhfhIHGm"hfEI!eq#EkC[VfqVE@HBVQbT,P0R+$THePCdZ1eqf[kbUE(PCGGR +XX[UbD@8hPpeAYXXImPIi4rcYrKhq`hk(IlIrj&5Kq!Im9)dq'a0PGMBma)IjE2J +D(cVBm+Gm1-D'&rQ`K`friN1C$4rK`aBf[*-2[@aB682I,MDXjF20E2JL(pl%KPr +biGeXq+pmq!8E[X@($@cBc)HeE0M%K`[CX*%2Ml(K%Mj-Bm2&I(L1$9rR`a0XZ)J +21pR`E6jdXH(2q(!('rk5$e[CF$BI$V2K#hcSCm2T0(5AX1(rjX1(f(!'(cl1K[r +'Kh2Cm$riF#BEIX+(,f#j&6m@8ZTZQL)&%&-$CeM)KPc&lQ0Xb*AU6Q0$VNEh1B@ +S@LiURc&)#1X0i$Gm1-CHFJ@jHpL3!%H"@fDLUV5L+KJ$9i4EX#'2)ZmcM2fRqLe +i0l+VMR''1pK`2KqqcpMVm,1!XmpQiRKdH&p8L(Z4-baA62dVRl+`)pbB[#PXb#2 +#Qk'ii#KRMbLQ,[)TPf,U!cj&#[J*+Bm,N48-5cL$AJ(F$,ek"I$)$T)#TZQ9&hb +5EAFC(el,KXrai4afm"rjF!BEmS!9I*d0ZIN'&bK3Q%FS"#pMq4jqPR1'23UPe(' +',-@4BhcU0"2*!dZ`M3fj%3B2+iaP'@IIaKKi`!kZC)KcK369E2JX(iEBm'pT'0U +*j6rV%3Xp`)B[mH%eLQYHSQY#lbQQ&[)TC3"iK%r9+UDqaDGU&&2cqG3HaG4rmUN +XKYE2qGAh-SE[iZF+CfKM$&cjSF--84ia)4YM2d*'cpP*!AmJmpFEG5LUZ2,ID#T +3STLD`DFfXf-8Q8Iie,@++@k1JIF9aqlN8rS!`&%2[+KJi&%I@+kBiN%QB&&-0I# +TA,DpSea)M!f[m''%$Br`B4mEAZ,$@@aBaiFk0[bB$dIBm#SI4YR`!aU+)MDmc)G +Ef*!!4cY(MBB,qI"kTS)[5IQ%V0!AJ0aNa!YX1)m2Pl(K0rP`2K[q*aqLLaVa2LX +SpQ,a6kb)-E)"99FC6*P8d1Hc&e6`Y,%"LA+a!9fjL4dJ3p#a&pr#B*`0#"%e'e! +ekTek2r*Xj*)%R15*EpXj12-X*H`PPk@`K018P#T%LC!![(C+K-J"Q*NFJ,RPT2# +fDC04Mm0cBM4i2VM!Dj,q"@IcaBLh"`Fl4)!IVHC(iqJ8laVYdHPLJ6!,MCL'(MZ +RLGdLAC`APd@MH"($Nf)QNL%F`(+Db"A(a!Na4hb#`A,4`#HRLIR$Bq*18L`@Y9J +FaH,,f!&mASbPil-XPSY28q`m2XfaNrJXLCh!jrABERaq&Y2Jmd,-JFrrM[AKmaq +a`rKm%Z[#Tckf!jr2BY[`Q4PVaqIl-4QI1E%4I$k-6H&6'+[!TcMQaqHa',bXe8K +#k6BV0Lf"HrY1LT!!6J[Z,3[-"9Mh1VCF"lIYQX$0BRlJ`m#eJCf"VB(0JG,35P% +GmJ9+3JKBSLQd-P!$`#mDDK%0SC8B@N5pH!kUZ%E-&4X$mm9Q85bf!)6d"ccSFdJ +1k-"N#lJ!6*S$q3&0i,P!GH"m)!DJ-Sd,q!,)`J%m-!q,)a3iX6L+"5Q4JJNTX3S +,8Z-K,&+`1)E&15aH`i,8@)I&D5aq5S%6LbYBN!!D,f&K`J*G$!D@B[%a&U6'UeK +dB2%"&JNXDLK`BR%4LaBXPQ14a1)P,%*B,%4NPQ$aYeJmJm9A@0b(aAFTF')a(iZ +EX%#AQq)1,1CKm5%@hk6!LF8M@-c!iPYBc-CL!4D0@2`'LeSXhX+#&,!)#e,!fmb +)[Q"'p)rFL2k*'p(Gh)MqK4[4YGb)VZ&'p!3hSJHi%Gh2M@Jc0k,IFL1kMa[4VlN +42F50k'&Z4+AFL2l!MHKAh)LHi8Ed0@j%1r9'&23LiFM2i0EZ8iq*VdXZkk%Y#X0 +DlUbJ$JEii"8RQ[Fi2Sf,qJNAGD0H9'J'4#eRSYjRSTBT4"ec*L$+c!HhmN%VIYV +adi-I*,4bbM%E41lLfrJfhmDMI"XPI"[Eq6B+q19&r(+9p[,$Z,bCAIl[l2)16&V +Bj,qab@(q3B*0C'QMZ!PjKeZ3!(aQ+a)i9D1VDU$kf#@1FJL*[)+%UZ8P*0$UQ+5 +(Mh4m6TpCNiE2k#RkH#B0(c00L4SqX0&(A+CMBZ[,&XlFml+&[r4,(kk-$kRE0eS +'9cScq')M1DRaJbp+"d39MUIT"hM9pV,PHaCR#KI`IjhlqF,Ml-'VT@!k6"1h2!& +Q-["kU+UD'HUr-N0YC)DkQ"PU!c28fFa3ImN-G6Sce*pc3hf1'qS-EUMr`!heRlQ +K[XF0pFIF81Gb3lf,'qSGh&$rb!heHQkSIq+'qYmmLQrL8A`cMq,rbk0i)irLV6b ++raH2iLGC&*p!02h"VUNF5G&RKAMpU(-EAaaaVU6&PrrS60+LYKUChKi)fF,&rT@ +,ICb,r3X6kq-G)3P&eb9)6-mI`5+4#N!Q%#Yj0aC4Hj5j0e(b""YeGb)G+6K'cTq +Yc"'%-RS'cX%&IIiljq#1rJJ5G0I+MYUb@C6KHfhdR+N2(EAjM01S'%(A2AhSZ-H +%j$%GiV$1`KFpl4C+kSl1c4p"BRJiAKFFJ`2B-ZTS1L48M6a4qQ`DHJ9h-Mp@(B, +`Y'LZH8e4b*jbhBGa68q4Ykh(,`VQfA),DK2qd52TDjpSjNR6Y5+GAL64EdF#aQ2 +QHUTBc'ZFh[h6BLf[j"BX%MEGSS,TlBX+CT-DU6VAZkK59U4(TXF*95-R!-NCRd9 +#cAQj#DMa@Q3#N!"c++Qh#!53!"meSIZa@)8Fr0G%+a+3!-R"1l'3!"hkK'N-0*! +!A-DDm#U*"-KUdlZFZ)0ZEhKL+M`QSeA4@828ld'd)42Fll`h`ETYL(PEhUF1lp" +C6$#aGUE&[J81VSGHVFSAaRMp)IY1[0U",L5pFZLaZLU,($+l6#iXqRAp0rkc,[V +,pc1Qj*RKrhjfGqC$)&$E$!BMMq8SZZY#G#5TLc"k))fqSbeYadqETHiUN!!iYA8 +#REqpkQUY`m$2"dGEkp"p8c3((Dj3jiMIVX[[PKhSeJ8GCI'*mrRGX5*T`pr+cXj +)cmjqHFFpk1$VKRY1(Xr)cNa,c655Iq2JIURc9Ze9RJd92emTrZr#*!Y*Q*6JK*+ +IF2E89E+RG4lmc`I2(bq(DBLi1011cS-,P%b90X8jaHS+E1Rmh43B[N@kkhK@9Ni +UZdC#UU@2@-04el)15@V@GhJ#*&C122b6eYBkC-8JiHYf$D&bSM[(6d-*&@9(5R5 +)%b+*f5`GjCf4q0%a4(GP9NRmY!9DmEB0%+q6MPkRq0(I@IcSGB[rPiIdiJ[%HSM +(Um*Lk4M[U!8G+H5[524q*RT'3A5p4-mS1#`G#aG+"3B5qhdN'TfHa%GLQ4bSD4D +ecdq)@VNI6S8VRcH,"DXKd!&4SV@12Q"UaB2CTU4YPPbcBQ6JH+`R35mZQ8Z(T@5 +HHM%da(96NNX[&$[#XeDE4#eE,+2&VH5DedK,3SmG@X!28GGa&SNGQE5iT[!mNYm +88F(,*Q[aF+X&H(c95#Fk0)1lDT'#fFLV1I2cB*1ZBQMITfqS16UJT+5M8G6D[5B +-q-38ZS0F%'N8#hkN8DNQ'hN6D6kB4ZcF8%SfjP-5m4SM28aPTrQF&Ue#IBGEq&& +"#&#D45J9-LDMBiLFmj(-j%ERS141+jEPir&a5,cT-'YiKZrL%L59hel(R1iIJPP +D0'""TR!%bZFG9NU-MaDMdPK*$fTKAB#aDKp1iKPbCNT+6STm)9IZ68XI[*!!PGQ +IDcbB2TQ1PhP,Pa+,lL-KhN!TX(5TYPakiieH`lUr@c(5CY3`p5&*MYUQll+[RG` +IN!!3S&a9lU#ZhpXl41edX'6aMZ"*ZBREU9*"eMiqGd(4Y,JS+ASC9h3,ZTKEaj@ +pQA8eX4cG(5#a,h8`))k5))AL5r3G$eVA+G4HXJ+e2d5CY8cYI9cYZa4UhmAGR`e +UceHSICGHlE,d%$6r"LJmpIcaP)jYmTN,"c+cdcrD)1@V#LPCN!#835C6GmJeF18 +Ham2ZCNS*'lDAjN[)8PFK4Tj`#SLYGX@T-jNT5XNX5dM0%eGT-j2@BI1ZGJiN1NG +DEq0&!d!G$Ua%V8'H+!SCl(*3V`!*8'*Lk(KAZc#UTP-A+adr'P+TQ*!!P55%!JC +e1D8A-dcQqbbCEjK!J#&KQ9X'P0#j!b("91(AUk,N18N9*8mb9E6S95%cd(Cpe-% +ZpSGYBJFkF1)SVhCT(l[8q$Hje"!&&*!!Q,+Q2ZrQc[N+PEI(BITUMU!856'kbU! +d#%SMTd"*CI+E#8hL!V)",bUlbk2#@cr"1llP5BB-hHCTUi*fG#cS*DFSG)dE0Cr +M(A#28b9!PkkJ5UTdJD'+%S-1NGpYP`E$qGdS8*'N(X"-k1+Fm1iBHC&#MelebT3 +B2S"(1rU9AIlaV1)Qi5FhjI+Ucjp8kkY2-A,Ge5F1pH$3bGBk8SEXB"f0YdSL[Rl +j1MDX&c,#98P&PAqp3BdCSN9#Ya+3!#&PcfF4@P)ebP`$r3bjT+%3CLUI)8j(B+C +@kXbfKJb49F@+M'(435mU(pFhrf5rqNBl(Y+SI#&VP%-Mh1-F(RZ*FY+UKX"06$! +DrrS'!BC6X5J(8KG,)+VqQ1%"Hb3J[bjmdkU&+e"8K@PjZ*)8eG"QK@TJ@19Ic#j +S$jYBr1hjKXGA#Qe54ri`UIPNVNjrC!N8FAYX%1kcDC4-"Tdm2Y"U*S-Bk+D+"JC +,kVIakQNPCq*6K3XT`&,(-Ymf-S65U#%i,X)DJP%FJ4)$akJaL1STbJXmfR,5X&h +qJ%pYelLY,ePI"F0Ap-#crP+H+1Ff!LDC#MUP!)1#LJ9H&R$E!FK&j4BHR0GJNah +FE!l`EPCeBBK*3GLb)T-PpiV@QK9&"k)i@,q)*r[clckbh#)(&%a4-ZH@'L9ibT0 +*Bp-TFX146'pY6`aG4$U6LE8YedaDl#@*#ENrc#625j8D,k6AD9'$#PA(5#&R5rN +,#Lj-)DV$j5Y%0F`93YXI9hD15!KT"a$dfcSHU25QAD+rPT+'UPS-Pa,SJ844'bN +`k#m[QPRqj8Ack(*chNqq,d9$d9BbEkPcqIEX2hma()kfD+L-YTLZ4&[%9Q"#QaM +Dlc2MD5N2EAddlkK4UR'Z4DR'2kY4F5EIfdLLq"$3,0Qjc6$iqVf'`GG@9LlbjkV +$LRb!G&+4riGjekPFFVkE4L+NiPP4!*Q[UkKQKE'KLpSdP8VKVVDi4+F&TY#dJI2 +8989ahK8@'(4HEp+#$BB9UG,&CHV+aA6K&kY0[ElDe$cpP05*Xa,d+M'A9pA16GG +AYHJQEEfV[8I(TD1V4cJH@+!f&-N5!E+GZLPYQ9k9%@VhSX1U'GXID4GiM,ThqU( +mlS`)&F2YjmMP8`iDM(9lPk+i@bFCl2DVfS#d6Q,lYZD9)H%P%ijTp)9dE($kS95 +6EM@4*3mS4,,LFrZB9L3,Q,Z+p#+9#Gce$jP99MC5GeN0!))bI3##d)aN93`[cVB +IE9G8-P)PXIfNcLa(88Qdm)S$&e*&8l+,'!QBFY"MaJHTFdF+r#8f'4d#S[(#L`d +UmX&mZAdjVkKNIY8kkE+[heG19A@lXNU3!#9N!A+0+N!ZCI'0*PbrdXb"")%',35 +55!DNfKJQ$Tfq9$DrSQX9VQ#m1c&b6iFE@#"01)lPM&Z6$*ceG&kN$XbFS5[2A[Y +XT1UjBhP2bR!PmkC9lVD!9h4VF'"'S%3RG!#U@pXkTYVG-kSdh5I4GHLebkGAT4E +VJ[1AFeCdF5baLrEfj&HSq*pmPTUI"L"D$N*pR[#Z#k6(S2B!A1dSDqZ"5fpdQe[ +AJDkQSIEjadJj$8KiP9&"B2eA5-M89QB$mI5V3h,,+A5Iq0MLEHlTadkZ[2CC4*1 +AA4AY[*M`iM%pkM$ae+i`ULNHEU`d2-c8!bYb)e$P4#I3!mJP0prl!Hif#rRL +"k0Bk&19N(QSjV#0cIBGYP(J$aPF9IRfl!0($,c9ml)05BYBY2YC82XqEbS@+TM) +RG5LDbKQ+TR+KYUNFP-J6%`rI1)TZ+'cS0`PUHUcj@D#U!B,2i3GGdUAT5H8AU18 +Xfp''PM0c-ml)"h-cdibCUHQC'9Qrhe#5"5ZbS"$UmK$+G2'KZZdFKRiVVk)QUBS ++!lYieH9(p%8cI,4%akFp@[$$3,)GjS4l(49rq@(&AcJJDK#l6fV5%8QL1Ub)@#4 +9(Arc+k5M2-ZJK9qR$cVqcSXR+KHjIlCV&4YlEX9A82GU0+b[86EIbTZFH2KkPk' +#$D[Q(blCU"KX9JbZNBlqD5cmU+(L,RiSA04fS4Mi&3123Q`a#BKVUqp!6cjrE(j +J&Lh#Uh3Nhq!Ur!@4H(H!L09Uj`Rh8@$[`*'q%peiD[Spq+&K"@pN*""ScL&S*AM +33Z),8Ff#8SHHP##Tq8,1QHb6ampNb[EM&l*!F#*#8fT@j['8e3-%Rp!I@,U8R3J +2%"`-ZVid[1(lUfe5KIl!`[8"JakB3b,+Dk6qbPkjQBNN1$Zd%8k*P2%31#6Jpaq +eU!2P[CLTH-%%h+-&r[N@+%VL-&29)Mc@X4!2'JmMIM-bmSj`P!fJ&fY3Y+i'f$K +!2!caTQd+*ePXfcFQ#qeN*qm+G3BkH(04jKh)QdL+K!)dK#+`'PeYjUj)CC4&b4p +macGR#pXF%U9TZk9Kh6a33q&D-M"LL*2bCK5K`a9$%0%(9P-,b+`"RU83)S""LqS +ch,`dfSNlC(pq0bGU5a-cHF1GSkfGr%*UpNjp)UKEQIQ%L2jPB5&ebLUU`LBhBp+ +SR#TUN3*(d3kZ2*im@I[bR%3U+$Tm3RYP`9Dq56h,P(5mB#G(T-)!QT!!+4SDdT8 ++-A45'8BFJVVH9"3Pk[)+ELh"CR[6kU$VLJSj$U`J$cLFC%B25GD5+(Ph)CTbb4" ++8X8IXPC%UM#3!%J8*,aa!`R2+&B[FVH(&EQ4*Yj*MAmedjj#d6M#-K6,09)k0SR +MGZV8aNqNZ98eAUK#I+*16a#pUel"V#6DeUmb#'S"imT%*d6pZbc4af*9fUS3f4$ +N`LpKC+'-&C1p($9fIf6acir+p+0H6D@H$5)d$KZBmeI%V(q)"$)YN!$98@&Yi4N +JNQY!0)a!8)R8UL9-+`(dMi3ADVJ3TJ+ZQ[!'16qX,MqLL*chd1#6G5XJV1Nh9e' +q@9%eZVfBUY&#[f+J9Jb%NR#3!+JTeh3hA0',#h3V9V5qH5eQDC[AKJdA58dB-#` +Zm'ZdcHm#9q8UE89SUY*AP9'kRPHVVrYURJKd5XSLj!fZh4VUP,qBZIV385*-UYP +%G!@"TM*"Z,b)B)mM`1CZeK)PpGH!f+[T0PbLUUe-N!#SI(PjB+%")G8"a4B9ekJ +@K9ecpfT(&aI)Ub`5p&YlqCGc&G9S)8[%A%L91c[8SP$CdV!!pA+##YIq94CT'Nh +GkSJ8[9MqYX+99f5[908`Y4Gp@-jfZeDJ`+PbYYE"ARBTYMCFU4KdV5kXS(3&NA& +['0UZkd*2UAaPeEaDGK')l`Q&djRmmKYY`UZlQ,MdEVr`YQIV$1"8P$U8ah9K"9P +BC)cp6bALQ+aHY6'8&mP53Q[q)#p**EV9!pQ+SMmm%PFG!-S2H1&"52Aq#JLS(MV +H@[-+@#NVB%9Ne!dMZp)II+-mS*T0AIbp3Th99,V%ZUjGRiddqFB&MJ3qmN[+4`k +9L4kTJB"1+&Yj"pBGJCZ1EMfdcIe&3jE)p#EFX9#V@`l9(!(KrdNj)(@*CSL@9MT +q3D#VE4[m#4qM5Ne(K!5G1+SJ#(-95Ubk@aH*9ce8hDNh%[[Z'b`MB53Y1*f89kK +ZePI"+0$h6ccm[ciN9jMIEN1&h2Vc15"kEKBD,)CT%S0U$*KV9X&Q&24*j`iF-K& +a%kr(CGi%CmfVF@,EhJ53!,Q5qpEU$PlkLYlbrbTpZZk"UpDC#kRC4"BjHG#HrD$ +HVf`6H49NTkFF[j!!IJE6f3E(XV$0E(er[6G6V0r-e[p$QdNYGc1TfXdB3#-JYR[ +LiFG+3C!!pG*#8jGIPiJNkYSMp2LKLrrdVPNX*66`3'a-!'d2f+l5RjH%2pA'`4f +#D)Yc6R4[+,)jClJRah8U2JcCdlKq2ee2Lh"NmjAS*U3T"F*4KR$dGdAi`Zq#-*5 +lFDDNh)dcedHj'mrr1C@l3BB!j@l85-VGU&PIjA+%rfc+A3q%pHJQk(+@BF+[C@" +LT@[jTIH%AIVhl0+F-aYii@0ArkBAVNFKSlr3p1FT,MK#IkG%D0-0%N+5cYHRZ!K +(kmp4)+m2@UY@PYT+h4"f(R`N)bIl`3XCQEPk59fTkEmhCS*aD$"9k*f"2&eX!hh +)M!UeM`k[%6Xm`46hR#-1VefHYBDFpBQN,J[U`TQ4SEJj&cfAAiijkl[PY4aQQlK +RJiUf@@FbFp06IKrQKUdRpie,&fh(Re*4@C8F-*'80qE-6)H2mHm3U82rAekl`Lh +cDk0iQKPPd5(bd&%N2Q[KdSd)c$d14lm(biR""bN+k5&[XkcSXQNS!0!'53l8r!p +$`%1`5V-10rL&lBIi8lELNUMdR+bF"c06bT1e5P&EbK&ed'KFS5KH0(MjSfiV11" ++IkL!F9JLZ8E6K#Fiak,f%M"m!L*eh((0BS2F#fI+%5QCc`dfDBU)c*[bMTqjlF& ++4C!!22(`%q2FQGfR)$f9%l5qU`aCfSXS#XJG(d&hUDaqfA,Afb!B`)Rp`+KbqR2 +YLrmUPrfr'XTRhhZL-V,h&ki2XTChPGMZZ#IlE'CZCJUX+M8R)c0eIcS`4pPC6S& +-9l6q@Dj)$Eq#`'VmS4e`iJ)!2%cQ[d*h'L)8d"@[V-L+8a'pQU&8r*qU5@A&eLU +-R[K68mY$C'Up%(Pq"D@K!3q0&+5!5*6q2!4N6PU3!!"&48&"(Caiq,iXDJEJmX# +UJe3U+ejA,1VAjBJU,dMT4D',mS-@(IMbMUGPCfAQ1Y22CaY+Nl#SdKGKa35m$0" +$1)Tl5e@m!diS6%f20q811AJm!!qB6E+D'PJ-!1R"*GGe3@6SJU5[8eN-Y68iGMc +V`H1r2j1GQi1Z`[H[%M[T8$X1SGrFR!cd$lC+IQ-3l!0J2jKlj[`&HrSU-,ZJ34a +'H$3L)%l*Em0!m'G2B1(KBRC3)C1l5JPmCa&Z$%a@ZD,ZJDLFJqNE+%Y86[a`re8 +H50AV'e`AK#9EfP41)&d[8hR3S0kAZh[H"V##2`EL)KiAL$mR`L[rX+%Zbc[ahc( +[a"m`K(PFKf%m@+jKL28cM!Fhc$!Hh"$$H,!F`kJF"C[2DD1Jm'm3"BU#'!!!-!0 +"4%05!`"@X!p9#b`T!#TYFlqAGePA4&a@)L+L&4(4e)aac"K(hrIGIFRcbmK-c8a +"cLdB!F+#CUE2ZlX#)Tl0e"ScTh%FafR-QXBaTk"a(+I-2,mDac`hRMXP-j!$)k6 +PITi&A$ahdhcrllUqll[1mehA"4XFJ34"%!4"N!")LQ4%+pE9eIeQr92kH8H`q"9 +S`60JMX1FKZN+`f&#B5l$G),THl$0FbUQb8d)39(NbGfRFV1$4eZ5kM4$qS8Kir2 +9ZqTN)a!pM[p5,DCI*lA620)XScCk'Ap228!I*mh4LU3mqL$T8ffdp&YM6,5Cce4 +R'#A4Mr%rU)r3GdQ,Y'`TRCBN,G!HPjBDMdCRmF9U+8e2HN0l@[Ucm94d'Ap0R@* +iS`rbU@S"68ZDVCQN`FETk"IUq$hU[qRZT)&DTA5'KL6GVpdT2@$m-rSX(k3HTCU +NZc68!q0%p$&Z981-mZJrmD(UEA4(8V"fA'UJP+5(Y6h53mEcdI[iF(@%F5Vk1Ak +[HT)H6"UTlCIQ'MR4HrNhkQiDPM4+UjGbDAl53Zf3!$621"aYiC&U*b-m1UU12k- +Qdlq51QXlT'EUNr4hEE2d4b-S1S(IVQC3[k5rDZp)Ic2bSc2j6fTrBf2dkrahDK2 +p*DQ[eLMYSTj*2pGqP&iehSkq`(ZVRaXhSfr`,p9[k6G*hE@,dLH'1cU@reIG3[p +)HPp,Nb+S4p+(@ScdJl%TZTAh8P2TFY+YHl62T!('9p%Vq6QeQl%LHK9r3[fHRNc +USLfAAMDf4Ar%rk2ZT'H61QMETDh82ZN9l8fTSr&@p'VH93deMN4[i0I9YA3P+8a +E)kfMUdQAY#qNDmEAdHYjQqSLCp*j6CF5MIZLihLmDMH8D!Hh@96*TL9ac5,Cd23 +`P2i'b651$Y$MG)*Z8*e4*pH0UcY3phMGL6SbHfS,m`*&aTMLCI,SF3G8Hr'-dEU +ffUaV%Nbd1BiMlKURDmm(G+fd@0GUBE*J(S%C$D3*(3Xkam&8!M0MM-XqHNDYbfl +`2*Fp`%Hll,+`"cL3!11%pA!X)A#&l&3`(a"fR,"Mf0iCYEVQJ@5M8,F8kYSi@GG +NMkkCLb8MqJkqc2,(a*9"-8%4D8%*PMp+pUrFXCEQq!eZ5d2bRKFXYpR[2)RJ2'j +4-k)X#HHD-LeIr4MM$RSRCVpP3fEbUIf@4SYEDbfh2(GiLqe8P'"UDmU-q6(Q&,+ +mjjL`X!hZjjEPCG1bqc+#,*Ra&M8faYf8UIb[3*hDbIQ0'cFY"[ISh&!YKX9M-55 +lKp"64(4S(V)Bc&SmUXdMV[S+(XeMk0bM@Mca"JQX4p8-$q3,6XM"%)bSXH6"!-E +*Z(3JFChB``e(aA)+pl!GBM'&'bkf&00!X8'DS@)9lR(B28`JC`ULCiHdUQ8iikS +qjRJaV9C,2mpk(KHN*RSiFR&1A1&FGD*2*YGe#cH43&Ui+JCF',$BB99ZFL8b"M* +a0Ek#dF'jUd)!0bNfJ9DjaD@CZ**BXGhNd)!+C5aLYhUHV@"5l6KAE)*&&5Xi3YQ +5%'p4Z)AKA%iQ"'ZVA+K%eHSPXJ'BAADrKVLf(mDdpmY3H+(&E#PdfFf&C$&,A,J +DeP%eJ9(aEcG6)I*55k%025"jS82XdX9'l&FYKC*Q,P5G%'%QYYeH+(SU$X8HXb* +B155"3a'5*16-BU6D#UZ%5f+CZ+Te+m5!"IYiYAT9r%`+SLE@B4BL9D'DId99+-J +,&FCP-G[mQS&8S[!YQM"+'b-32P&T-!)2+!)j08C5-($0&5r11B-`&"C)+qKRX&* +fB)0khLp!R2[lSNc9H#BA)UjS9#'"aNXpJK@8khjfYYXTMXIVjI4[jPV&URDKhA@ +,8D@Yd&5e@5S+Xd)E[hb8YS(8#k2D&9%*3'D$*%86'-NX-1Ue3ZL$!B'$&,0L-`X +@%!XjR5TbZeX51r'E3ME!EM*FA&'F6,c#&BIQ&bI@8H`-k9qR6DQ3!-r@866XMKH +lJ2-c#T3GXP@aXU+FCmZ`I&D&h1Y9@jRk$"h+pJX(SYVabZ#!-KD,*2US2Da,NQU +h`&B-3)hVk1#0!4C96$+ji[e$e!l"*YR%3!Q&$','CC'B,-8ZS@C)%VF`U`LaM[1 +-T`S[PS!1*U%0&R2k&f%B*N0MV2#3!%U&8*G0l&G3-feJ&AM1p+M5b9'aQL1d!S1 +%*RSX91JKFk%q`%bL!q![p&J`X)L"m+#La!SpLNf`LUS(0[8+1fCEi9MYf+,DX89 +SLB%$G5'8b4(b(0MZX!QC!'@c)0SPX4)cM"pPGGi[6MKdaL+N#4N9kLLSP4i8ViH +0&FLjcmP',LG$1Ha#$jX3LJUVaN1BL8`5Fe)HH%+25@+Hd!3i!5(JkL@64`d6"q3 +"hJ0hjf%E"-8p+U-K$K3Rie#[Xah#Q"3d#qjcXT'I#4Q(i&,m%BAP%@AJF,)G3Y4 +jX6c"j@),%qrIlS"U6#G(U&m4UQ*)"*VB8Ab&LXLJf-V`mAj14Db$c%8qI+T!Zar +[*2Ih9Aib$Rq2*TUq+cQSeBe[#)ITX-p!hq@1DmS)fT!!f4VVrXSG%46eMRV&Cd3 +&fUbV$T[J8G([l,Jd!E[JD+r`8X5q$Q0@,h5LIA$'V1P!Ad"r-8b`VRhr5B&@d`# +$PkLDikUf+J@G)c#TJX(,4kVDMMBB0``bUaApBp`*P[,3S#U9SFCl4ahA@L3*5Vb +hhQ'mYabG(6#C@1HX1Q$PI#8UqIA0%IQaQ3RVQp$`c!b+8"1VZq"XllLN*MHkBc- +h9k'&V0XKUamkhFA!H'mQa[(SciDCUf[,&kPrH@Ze+mSG"9+iJb*mL6%T5Y$#BFc +a&QKcFX6!Q(-DmQS`aS[NR2@3!(G4eGi+9K2IkT%DNEmj)XJ5Ff[LBYM@1BhBCSI +TKUhTUVBe@ReLkj(afR`4krBTb"C$l2V!F@XLI$LC!G'4k!`5!q0M`VK(JIDa'5C +,elk+9V8hSHHEC`ZF3b0CJF4Rj'pZ5YiCC)R3mKNT3Iq2Mi*r(Fa@AG[@4h9Zcf5 +mL4P"QC[GMB,CRXm)[0liH#[i)m$VK1N+rJK9fjkTfJkc,FiG83NlSb`Cp[cN`rT +%N!#UI9+Jq(L4ilS[3(`m(%X-4!HdRJdh[U1VkNa1QkMbJRHfTF!jZj+GYqA(ZRI +Q0qq-L-VF(-4%'E12J581NPE$C1KDmQ)eFAYQ9B%0d01#-Ye(Bc0MQMCRiMdS)cp +cmc%)RZddCRFf3Lb1LDAKUKS4%j6CP&ceGFm5%`VU1#S'Yr)MQ&4A8daVP$ZjN3( +Ql%KMGJJdQ9@J65Z%+6*#S&$),TK`Q%BMT(9L5fN+hU0H#BS)5[!&UCEJ0@fEBk* +J0kh4B8aV4FFZ"XDdUaLMXNlV"Y2I#-'hMj!!b`AR3lU1EGe,BYfA"-TT)mB#P00 +U(-B86i%fT83-M#Nj@"[IAkEXKj'-N!#q@,XR6(6"-b'p(ZaTXdcSPeUQC)UlfSP +0#6@QF1DHTL!p8a,33AUQ)$dcI&d6K2ZiTLRpQ@[D#%$GZ"@QZH"@5+53!2K5UH0 +6A9@V6LdcTKDa9DGQBG84k-!I6$eZK!5hA,9'+Y#'P[KARAVF[qT-Q&i`h@&ZacR +Uj9"6`E0$*q*[@LClDRYMDKq(-48&0I8RQ0l'8+`cp(M"J+(5Lh!B8iFE8i1arl8 +#E6V%6DmeKN+YSB#kSH%&eiC'YPaYqRjMqR&MD+-aY2AUKLr'9mC*+q[dm*D9GAU +V`jJ11*jZ&`0M1XTP1RcjG*6,p2l'd0$UUT[BP"qcFdG86""UFA088dCXK#!Zfrm +Z1SYJ4ZRDkae8Chi*fh%q)cmj#Pm1bTh08FP"EX&Y0Gl`kYIbVdk3!0JhkSdhcKT +$CaY$!3C$)a8q3Z%V&"kXm&mSr$m+IeEK2bPm[m,rU[$h&*l$X(h`qUI`%SArA1( +2+0bZm&L&2mbi[eGiXm)h+MaHiCX8[PMK6LDa'`[2X2%ZKIp$iC@-6eEi3Y%'jJ9 +-+0SV,SAE92'kk@"R@3SIc-5"qh@&(f"l6M,88`Tr'fd,K3r"qb'6Hi'Y-8rKpbU +mM4dN+RbY`[qZm2N+hk,`%)AhC#hm%@`FcG+c4a'[FlZCaPk&4l+9TLRmSX,c&(j +GiGmb3HfBLNN+Id(KIe2iFDC+Sm)I8ALD`Rp8q!Q&IkI`Ac,8'DBF9NfZ@Uq@$Di +`4E(j#B@rS[!r+rb5`TFUI+$#rm9dDQ1N[ihTp#&6U%$K45be#NXR#U1G`XmTr#f +&cf4,5Nb$")9r`JSJ@q%G&'j9q%k&"a4q91%USmKdKIGAH&H@B*6PiicZI9RDTLL +mNm)(X10lQDkJrS1-1ZmUr#'@KSIC'SGBQY-9[PIKUa5q41&SmRbXm"X+rdEK[GP +L`pRr'DC+!b-0%V1G3F`k4YDV#Pr05JZ,h@*kB1eAUd"N!k2JMbb4Gc2@,a5q8Z% +[-pBYM2Vl'1(!1P[K(4Aq094Ra4-1@3akBPNjc@&-&LCk&5Z2"a4HVr$R&4kQm#p +C!L$#T[#c#KqNe$e&A)UfG!U20&e1RAfk9qYJFqL4Q3ep'e0+ZUkHFEcRVQ#2dp8 +ZjrD%ZD9GPNmrqiPl8'hEqPRlqf@-c(Tjfq+Mh5r@&0U9Gh-lljM[2EGb5Q@2L)& +jB@Xqf0Grir$XpPXAPIHq%"+)MjYFhkGj9&Qh&DqGH6pY50(9GA01rC3j)Vh$pLA +(2VpCCc8d0HR`-e(c#Qjp0Zf&(cEG-qEkKYrZq8[6`ipeI1X2YrhmacZ+cqZrh[[ +(S'qHI[,l0rljhpJ(PPhlqVf6IhhR`8Irmp(5hrrQflYNQq-AKrk9[2$JJ+qQr[[ +$Q,Y(AeRlkI1rHrfK4ejjmlXr[IVfd('*prebppmh$h[UL99r[[-I@qirF1Q,Mjr +l@rkpMcqlFm'*,fqBVLP0lTGS&#p+Q(L1Z3M1D"&mfD)`-6!@GF-B[Qa4"jJHaY$ +"UVCj"ebhj&MTq(HPV`qL#4c5SXLaC)b,4N$QN!##a1rbQ"!XqPfkX@J%AJ@3!#p +m9eE43ADjD!ikb#kr1f*mKfaXD,#U4G6$&-&N#bH(A!EEDm`&jfY-&IR8GaH0lqa +'M@A56!NjiH@De%PD,9hc)d#TVr-6JM*SDe"%rKF4#8%4E#c%IH#BY*d6RcqHBC( +$q'iq1M9LB#`fBiamDV%**XHS`G@9'M5kDd5q(+PUc6I9bmh(aLl`fL3+,'if&UF +jM-AVdEm*%fE8A*j%k2RQBa0T[Na%@MYMmA5MCQDeK'Z3!1"rH@"Y0F%cb&KDD03 +-IQ,#P`UIGikPpFC5015APU%2fLje'AI4@YqANU8*aY*-ikl8LEAPcP8N2biUa[d +VY"bApTY)3IJEidXR3aP!bY,jBQ!X"A3YlB,qN!!#E8QHF9G&!r-ZeX"%Ta'Y[GD +Ad1bVM2`Y[i*Q5lD09E-P+,NP+,8Pjm6!@0)"BaIkI@"k'hIYUY#-9fJ@@R!TT2A +VU'5IPXI%AK1@$'cCp&K3k$!@j"9F@e$Uff34"mB##mj3#aDFV4JE#ij!#4"U!9T +"#c+-ZmDr8S4@08c%AUHai*aaedb(IreZ`10Y!`8X+[$4j-DSL2d@GR4*$(Dk)k+ +Dh$(X`(+X5QGIHBXV**fVN!#8(r1cT'!AAQN@i1dRdL)'b-M34hjCDbcSMbj5&(P +%ebjZ%ad[,PCSpR1#3hGq@qZVG2k,8pUrKYQrKYQ)G+1,BSVXV@Y[pa)G,`p@RID +,6%,(P[6BiKGB)IkFVrL+XfUU2$QH!#pUQjm-mr$Q25qZQJcc9JSb4++P1'mV$$i +8[%fLibG$JZ!!'9VSQ[qVk&T0$,'5fCMA(YdT-'L@APJZ1RjLV'0#Z[TAm#q`)lE +jCe0kIX#BAkjVhiiXd+c`k9C!SK8Zc4UUD[NS6L[UUa99`SVkDN@eX1,9cES,,qf +pI-Ze'Elqa5eAlM$QS`l14c(1lkjV2q)p`KTGX5kFS"A1d%Sqk`k'`8Z60G+rVR8 +'Nrl+K1PmFD6N#b9M)9*l%fm&9T!!e)TX`3T9V(MeXq)0b3VJYZ),Pa@9e)UFbJT +hDZf+C5AIiUY+lBXX[S9)md+NHH(l-1rLFLZq!9Q$aHTHE[BL(laVF0A5AYlJj4B +[&lTdpAB`9EqE9,bC@(#e-cNM+#U#$NrJL#b(l@0lRE%F9LEQq*m&pCSb0eZ5mr& +0*5)ffCdI8@l*Y"bc["1eDfG-di@JUNmRNkl5iQY(pG,M[mN`G%8GQr4eD@l2#[G +c+pRpBfY3&E'1qGrU`KLfbPA066(Q"M2SRc[,BFbGAU"p!r3hTEUQ@990kqEPH*q +9[2`)4ZZp2"@ad-YAUpU0%Lm2ae@2@9lHH*pY(cPSYh'Sm$3ZKjdd0jcHDmlT9-P +cc$RKP9+ZQ4XhEYJRX[US"-IB%M(USX0h#`0`8GLMh%cE8CFGaLJ!cLMrPmC11qm +616&SPSbF2cR0A9&4r+%TdehPN!$D+KLU94KK$+2a)LFAD--`')E[ClED0relZSj +0*KA`B3lrAQ-B2K!-3j0Pf%DBH&f,akYrI!*-YUUGR`[c2S`GTN4e1P1Bi0XR8ES +DhLHk#&B!J!p$24df50IXr5[dDrm5fe9I&3FjM"4m[NL"BdhCS@ZKP9lHeFXlU9T +L$F`FQ2B`#JcFlkM2M6UZDXi1AJirj9cZjCG9,I1UUYQ'`-a4cpXbrfI!HciY503 +)5hQAk[SKK2Mj,(kqqm5lA#PlEhFjY$cqQG&l[lJ%@k$eh[q&8CILjB2KQSf(,cS +d,djIV6KpYFAT,!FZPAjQG+milHjl1McV4QUG85KlLJ2Mc'2b4YFZ+cTJ+[!H,(f +kl+Q5al)IbASdrA(,iGa$1A[VGcIXfIImrT1RRM[p3Z@rcrlcc*h(Eb[rdp(I(cX +K4He)6JKUhYcBY2(eM(FbmeXh4F5iBp1fl2Va`T[E2YUq-hcX$'pIr2EQME"CEGH +ZGQ[rE',SpE!Vk&qkI1[FJ#j2GRZLDmIfVlcmR`l2GRUQmlpZrf1I[rIp5rrIpI[ +VjerfqU((Kjrmprerp2ajleHlrqEc,k16h[e&Zep2rZA-hhi3HZ89bmH*XkG0Q6V +pMGIqE*P4YqLla8ZA,)LF0hrKh1ZA%fpG1YIPb3&2G"cFpH81rhPJb2h"Gi3-VER +,@NIr8aUSLX1PapehC-1DYHZrA[G&kQFV[eVqrBT9UpqkHkZI#'2Pf-U)`$@lcAN +qIYLRhr"Ck$mm+QAiJ`q0G)kijplcl`dFG(Gm5aVmp,H@02MTEcidq(6@HjBjifR +`"emDI$0U@-V$`amDqH#)H`II-r$Z35eS--Q[X2TR[)LIZ(BfdCp8jqqGRXL[*@m +RRaprN6pI!H%q2mRR9bI4f(p9Zid**%ZrmUpPDR`4)-'%bTSRiCI'FM4HSdNhmE% +)Q*!!6*fVU$8aZPAmA(@Lc'@8C$%&-0h,6'-SMdC6,5fM)Ncq-P%"l[BiL,[*RUB +bHST+k$(+TNFSLakPG%`0Xp"KbU9$P%0lUCjf8`2YSAhd21fRNlLliMN8p`ZBPrY +[h%Id6pbEGLFGTpZSR2k%ZF5rTf1B@)D#LU)GP%`*&%60Y*NDUBNfdZZ83Hp3*ZA +M4VY0&%%aj+CB5U-YY)YqT![d*QfMMfJll85Trlm)H*XZdVGd%r2D`ULZMDl49HT +'lHPC5U43ZJlX&I+M,p&PZNARD!"eS5I"p!4eTBjJIB9HT[p3"fcT4-p3CrSAh8j +rT$ldGqT,Ik(qp$[U4hqPcqP,kN8r8!rkN!!qSIr5qr32kNNrTpld+R@Rhc#'D-b +qSRIT&p51INf6kCFdNhj,(d#2+eMPBraQdc5D3P0T1Ve"Vp'ID3CqLqJl@Na,D3N +YS%LD4r0T)Ff&jTH4JP[3qKc6G`$dl8L$SI2,d28rp!!0SIXTQ1kJ%"T+0A3A@DP +1qEm2!LTQ9cM)46V&dAedK$E3'PT,kqPV@NGI8#Tp4L[T+eT1hp-+@N@Vk5hDfJ) +%rPm%M!F"h(5PNCeXj+6c&%r$k&2k"YKCj%Fr6+-SKBE6Jr33M366#,U(lJAVHc5 +3!!E4hGMb8L$`%rhY*8&!-%46hF4!i&2Sm"l0`@p#%2J$IK-(J@qJl6$Sqc!d&[S +q#(h["3MF!fh[KVi6"3%be[%l90Zii(8)jKS4mTDc`%8BRF2#"b,8CV$36J46(!X +A4$LB,F*MJdA)GSU3!'j#X+4VE&$*!YZ3!"l2`Q3@)PQB+m,M4eKJairhCf%@#b0 +%X*5bS,#`QJ@V#)IAX0#&K4!4FK0BL'CKL3Kl-d@Slb2#lM`@cSM3B"EK4#F4T,- +LT-i@i5ZfqDY")La2Cf%P#aGCk-A#)K'q,f+"EIkqNB93&MjKJBPBY9L%0pZc`", +fjZFLE'1UE#YRB6X,%5*ma%Mj%52+GNEklBamfeRLYhGQSBF)iB`SiI8XX!),CiN +2lmd#)h%i8c6+aF*P%ACdCB'TPF`1NX0CH*Q&ReKJ*%KQ6!NQ&PJL%pL')*EX)%D +DS$NX-(@$'1JdlaHKFEi)6DGCB0ZD@!%d-H8f-Y*[c'+"-@eN6"Y[XX#+Fq0d%6+ +1Xj!!bJ*60)1"9`CMbQ#%IUGCK2bM,$!JbrHM''MQpf4K#JX-D&V,@'#%Df@Jd-U +@Eph+!LZUeViXX-fYM*5Y$&Jh-4*[FV2!90R%#,H*JF8Q9V5EKSX3`BSYJS&e"#Z +f#!E+-5cC-3aFBKJjBKMjh!%@'&RG$+cGV,+j@59dX`5lql(!5101BB&9fPK'd&J +,#`a3BPPLBKP)aE*+&FZ+0TDT'2XD#fac'L[JY!B@',R6GV#`Li9c,,"+NXE)NFD +UCGS3%EB`TEH`T'jK5Gh##QP,0aBBiED`C1m5br"G&Z&T,,ZB9pJPT'UlHXP8@bK +6IjKfKE*4@LJA,SGa&mVb6CJ2d%M[@bJA"f!U#q8a4`[P2!b@V5Q8LrS8bL8G#Z9 +$f`VPh6MBh30Q4+(FF!`'!KUk&-TlbQ(!X!I#Rdq!!I,jff&k`Xb%Q3'68LM[*b` +DN!$P`NKC$Tb5jC)d@GiG,F[2pjIPrG0Pq85B,+Y&XUaNb,,H@CE[Li0abr)4Nba +[!--'E&cVKHNKbqZcB&E#,*EPVi(mZTXXI`&"UAQbr0Pq'!Klkl)XKiq3!1@SG"J +)LZSZbcXZbR*bUL`(PF%FJ3%LU%f@Qa9ChJa"66KS4@H69CBMS'4%-ma2XKc6(JE ++EZN+!q8ZG)#C,-YCjccbkAL2r#HA4rjpZ8FqJFk*IKlCYGdMkjFpmLU#`3(9&XZ +8A5c,ETKfaE+R2mb)BMP3#Y-2jV9LfE`9jJ*-Mf*jc1aLZAC8X9c8!@C)X9a3@#` +IR&%X2eeI,*H%&m[CABVP4il$3'"@AV'FVX$-K"PH,$pH!R1j@$jm"ZBL$$EQ&X' +8``3AbiH`d+%G-&MX8'HBhX9b6LA-DTJfQ$i`%*B$"IIQ`NJ`f,!AKhXA&m[ebf& +f`8$aqMN`mi[Ph9"S0aCU5#Q@pd38bbH4X*2BF2*p'#akLQ!@&F[23C(R)2ad'3` +%RiD#,jb#k9NX9hB[PXp#mAq'&XYR`SVP1k(Jm3DB6iVPfm``50KYqf'J4,N*"K[ ++"aI,4jZ,j424aE,NJVN*%e)X+dLNFK8'a(EXJeN(JifZ!!b)k)*`9cc-Z@)jVV9 +B[LqY@$i#jBl-,CBhp#f@eh3VPYIQ`)$!Dk(!HK6B&e!f&B@B#Z'IT4E,bb(mHbc +qIAXB%'%&$PI"8&P!TNT!1X(d$-L"Z)!m,LdJQ`(pjPDBQS!mCL2-r)#FY`mQ!kB +(6%K!(Jh'dCm(j0S!c%fBb3&j@5h-5TMC!EN)`Jm!F3"#6""Q'K'3!![Q"Q6[D`( +ji*U!r&4U3-lU(j!!(fd,b1P6!V)&3JlYJ%N*b!hC!IRj8TJK!IRNdB"m#TdA"JI +N5M$GD3V)+K4e()1C'C!!AHYK)%![KqN--c)Jakd1S$,#B-14b)#m!4Xfp![)DhS +(j29)8#S3Rrd%-cdJEiAL@kd"qFd9!6RK6%"ZcS2C$Y-RJ#F!S!%VV"5kX(3G&GA +6Z2dZ2Jjc@h$a"V0!H5dqSUMDbUfBY&Pi9%c(jq2%E%fY0G)9'TPeP[*bD&`C'!Z +mpK4ZLZ0V[)NTG0LF3mZ+9&XTQ8mT'MI`&3CIZ[[b2%b!cLZ)[cq8`SmhN!$&+eh +2+`-R@8cdU#*N4$*QeCECRJkkq'PIM$LIbB&1m#E14#0Z'a@ABhDcAfBSC%k!X`Q +FKFH[TkIUb95TaUqMR$9dZ%b0hdV2ZbQpc$'aG2U6dPhBk4aIYHHZa`HP5Tp4SGI +ES6Y&,AI48jMYQ8fVQLNhMaiY%c0ccj63(K2K1MmNil,Td,i3ac5fpb0$A-B3kDK +Pp,YTGr'$$Xh)pGVEqH#`lQ*I&KF2DBNUm0h!Y'hV4h@m[eC'*9jk1PYeDZ@8AS* +@+D8I8@eCP0kX1XXSRIIf*fde@cCGp!bKCGXG`AKk%@qM-VccZ&3Rri#+6UR1,#V +#j"A0cf5l)eMXl56dkH)0kd4e*6Q8Ck*aakS+(LIl['%TG'p*($Y*pcPClfe,)8Y +*0TQ,m-C9M8mA'k*5XkQXL!kDe&Yj915P,"-pAdTl6AM"DP(`[IaEr*fY!LbUS1' +Qk"4i1d6qcm[Nfj'6P)R!qC3*BfP4*K8FicIiP!N2U5k6%PBQ*Da-XPQCP+*-1[L +@5@&eQ9`4CE,pCR@46'C&NLf+a0'b5$S,GH+pBChr0bb50K5*ZC&UXfPF,ZjH(Er +Ec#C3eB*D&j8fI$ALR9I3lrNS+Lp5"abRqZ98@85(q9A+EU#$1A3iPEQM`D+HZN3 +eVDQSTK!i4,AG`+4ih2l@e@ZI24j9i$X8L[88RZN$Ee[2RkP6VG!TbTcfXa5[rCP +FY5*H,bQEJ-VCATib8AbB+"2FHea%il`qK9AjNLIK*3Q6R$51rH3b6XiHSDaX+M! +4lYXl91UUVKJ-Y1eHfb`5rR1dm*q#E0fmpVQJk+6iX,NdV'3ejCA3Z#+I9CUpee1 +ScTQ&5d@"Bm+$32M)JPXeJfPh[8,H-MU3!#Xf(8"TqS,bA1&IPf#fADShG#l!fGi +06kcc&r2J&lPpU9eXKek4$GXTEdeeiL1&`TfpSC&NbDUR!(G@b&@[4q!aV9Qj[MJ +YBS4L,r(*jL*'Z+jDkL[*DhUTY4Ih8(Ljd0a5T&fJ3%P92Hf)UQc"ajmlXqPd0Zh +*TPam5-UQ8Y`aUE!9-&IPXQ,[5q-(E6k$9Tr"FTr"FCp"9V8Jh9NN8A&*PGF1aH+ +(5cG5FAC9$Za(AC`3C@UX4Y88R"FS,GI#*DdS@l@jD%bf[a4aS98N@A4V#Uic0Qm +Q"E)G@J95Zb0B1Eq2DXe8V&BT&BjE3#S'1-B0G,KK4K$Albdh$GH[Pq#6E+e[6DJ +9lBFSI,-UcU[1bQmK+cqFRN[,5XQE4AR(D9N@Fl[cKG)KiV@B8-C(UM&DaLHSBkB +*4*IkUal`*Ppm#6UiBDK%LMGRq4lXppFmq08d'VI$TiA6"N'+[GiR*5ZhaYQcUK& +)Z'9#K+ZMFIBBPHA5SbA#[HiTTB1j9&4#"me8T[S,!q3P"Ulq6806I3"Y2!l30Qd +b*Kffi2c9TCqH92TT[r3c,D@IGS9C5Y#-Dd'E"Rm'-LRqjbNdc"RH3*9Q1PP#hq+ +"E'CUb+)Q,c9ikG"&j)*dL2HP1f[Td!j+aDL%'QVTC#e9eMUBUjM&9"AG6m4h&0E +Y+EkLX1lF!PX0-FEC"EDKJaNbZX!@B[Q9YR4rdBXiXDADlIe+M,l(Ph"FCh+*Y[8 +B2SZ+DKRa"`R&rIlY'[cEa-L*QR#SD+Y2R4EeVNj,hdH([1TPq*'cG+#@5K9kV)4 ++H9G'3ZXS[f"djiZ[8Z5[R99eGllUE*c[dfCq6MN#X-&YIG"!E6Y0ZHRdG#kC5ZK +TFj@DIMqhZ"U3!-C$$Z"P0ZE5@Vfi*IY5r39k,+ID5H*aLY@-a0bN(k$Z+R&9lH[ +QLjB+Mr+"d[R4I!QCUr-XF(k-fI9'1e%9)dZ18YjURab0(@1'YD$6X"+&LSq$6KA +B#&&(cb0V0Shh4["!Z+1qUXELjDA%4ARH#56#NDm4bmdVN5K[qD5RS5accDS8ZDI +2D4b2UrBZ%h-km(*j[[JmjN019@FdSR860i&2FF9(PI+8kYaNL0rVP[&HeEKJN5V +F2jIQifY#CNL&fYEpdXGZ%q@ED1-C5Pe"2jC4DK(ph85TkfQYPq,b5+fPSbDkddZ +9*A5b([929-UMYH)JVTE@eP,U2RVM'!99dXCDbUmPYapUf`'kqSTfmf,ae9MdqJ- +9,(TT!2P`dEX!9+MSR40INd@[JrL86#$KV1eiIcSP(+iBC@*8cNDk9KJ[HJ*%ha9 +INeQhIjA)62(jQF&[R`*R65qIZ[Er9fMYrdHK0JJYH*(-m6@p+ZB6DIR*LZEGMTZ +k6U[D9pe8cBYE@Vc0-2Ell#eQ(S%9Xb(#("01Se6JVdp2N!$&R4'+K&Zb*+GSVCA +i`ADZraA"1AGXmcYmPV)FaLh`b[@5SJPDV9irH*G1J#raANX4ZmGVT4e-eEA2d,l +k+U"U"c&IjL"Q&Kdm9j'SYKEFDUM[aR-kkJ,U`haXD$pTFThc5$3TVR%[bkYE*Rb +I2jqDP"khi%r1CP1fLBV18%%*M5j"bmdK1'Ba0[(Y)E0U*+ThZYHC-MC#Y93IY+U +Bl6AKJ@UbPHDbUZV&V*`ZUPD+q8,M3RAYe#j9bmV!&(p-3jcqYEDkl'YY99p9Hr3 +SCSZRk0TQ60h*c3%3VRk,dI$JE*A4j1!Rk(cLKa9[H`%[1LSPlK2'P4`4PUHcX*+ +&LbcdBQ'4#0mAXA#@K8B%lIY3(@$+ZTKZD9UKDL[kUq,Z9@h9BKdhJQ+`6h@qYCV +MVPRE@ceiP-2j9M#2+P5F@ip`!hI5ESd@dIEQ@CcChlb)j`Qmf9lBrYb&5d#3!'a +r-`6pEAPLN@hP1UlrL1@hp@&KZ!JICB[$MijKX9*9qbK$e3jB9IY(%+&pp+jZrfJ +f"(id&mp*f+jS"`!6fl0eqrC+5-9p'pLj(I1GF+1LGQ#bDYpq$XcE1f2VpKj!KDZ +fR6PJFZj-jC&SL1lXMQdlCiPY1`IVp["kF)B[ejhK#6cFSfMK[B'FM+FQK#rLi3% +&&j6%!aUL,%"&A4BS,5T%YqqSKC3G&L&PKd[(P5E@ABcebP9lFKNd50k(,FNZ,Zj +V6`lAlFPT!KXQl-[#rL4X0-3N,aB%5$!*%3PRG5h""6'jUKC8T'Y"k5VZ+0+#jZM +f)+6H(P3$ECZcG([cIQaY2XDIFpLDEf)+Q+djKCp`f$E[i)FG$(#@c8!Mi+S3fMK +CeaT"XQAG9AY6&J3dRGDe*Ua5Z`0YQTZ#TkN28,f"LJ22)2"X01[fM9e%lhEdTL- +T'fZiT9Da[Gj"E(JGmNBhS,9YdTdCi4b2h0!bR,Sp3fc*Z&e(Xeb`[91Ufpmj#Y` +lm'1M8Imc0qTD*J!fElKUcjb"Nda!G4lQTH@M)C+(`XSrUY[cih#5[`fpCY'lS0[ +b@6VbH`)h4H"'S@F&09T"CkfeAVHhZX4`Ul#C!QF(VUrSpG4a,8Z3!(F6!rT0j6c +FBGq8J,00EYfqk@A4kiAHjk)(4I,La#8YX9a%NBi,@Q*A4*S!RSM1SL5G%Cqc!Sf +BMq-4iL!QLah%('F(-GYdCd`M*TmSpKJ"J$%!TKL!VM0QVUJmGRF!@(HkERF$G*h +Z0AjX"X$DE4&(AA5RZjr!DZlTi%S4b'$G(QX'Hkb&XH1q)CFp9L3f0N+JireS!8k +aR`[-Dhj--$DRQA4l@S2S(8G["hM5GSQK8hHQc4*UDQP$G2X@SG8@D,AP#)"U5lK +)rjB`(9Hf@,HhlY`bQH1@IQh,#$(a&Ui,d2NMjJb1`a-e,L`(6@e[%`Zp4,Li6B4 +[D`Aa[KAH"jr'9#d`Ahbe41GG-Dp8&epR&MUd'lM9`i-M$Tp6'#bQQZSfV4ZA(6C +-A-C@qcVGCZm[40Q%3,Y0P+m0YF%f"$dRDZhj%Ki1hFlEG9ZmF(+BfUME3LY&0l6 +,eml(c[!kN!!cqh2GpSJChNR,@U2EXMVc1SIfD!pG5mI0dk8E9@IZ$$i2I)Hf`EP +#fj`5AFYCMN&reERA`aFf+0VZSlTY0kXXZhZJ1d,8X`CiUi0PUVh"$@dDi0HpH!& +YQ)c1qkTp6cRS[@HEX$H&l35Q2Hh@FF`@0@@S0YN0-MRPGM`+c`R`G0"YR[l!D"l +F,h6JGP8V"N81#(U9kVC!2`&TJGIi3[#D8h@Rq3,(`e@FjKlm8+fLM8'Z8!628iZ +jl-[3I#QkUYU+@$8Y`N61)Z3P"AK`bM+Nkq!-G0#dH"Th'pAH9,@5F$b1#XM4m"A +CA35CXkI`3`lE)mI&i"%hh`f#jH&49Y"Np%C-AK#ZPUGE1,MXk6-",HR-GcpH!Sc +f1$j$i-%Ub5J15epG1h`'ZjCMTS+!!HIK'G`S91bj45"$,LD2jk+fMck'@3["3Y0 +$@hAl)3'IKbi)+kV1SGkk,8H8SbeRY5MkR$BFjI6"SMNc'9T82r[HA+$h5N$[h5( +3Hp[iCSHfGl&ZUemZ%2@lK2ckIVUcIJkVSI@!YV`dc)VS)Pc"EZ'%GL-ccS-VE-M +NmabfKK3!TQe2"!VBYQFi80Sq91Tp6PkAT@Ml"qZfNfe#mXRh19TK*i0efbN'RkG +%eUSp"jIpA$cNR9CYc`NplDIKSfbRdBCbD+F[kYVT3DSP6l@pF%TXHS&Tpd*294Z +$E,F50@X-I0"Cc-)G!erm6p5`-Ae8l8`B1ZG8lFi,k+$8MMISYZ2-[akISGZ2Md3 +5EM2VYYZB(VH*[%3V0qQfmP#"+1r1%)0el8q0f)m+Hl4CS)lL8kTjT'Sl0P`!mSP +XhAELP#M%%eeeQb3b2%eU4&F![%hU,)kNJEUQSNPUlUhDP+f#4EQUfa`Xlh)&@+J +AD"ID*fC!X!Z1fh91P,eV#R1),T&ekAJ%KKP6M2A2dGQP1Z0DHALTiV`[MBIMd4e +(LN68MU"%c#Y8jiDq2"aPYQ'3!'jE)ab-YJEYR,8L+lHYAFH#@bbj&UdK-eT*kp& +Q-H-HZLmZkVB[@$XSPE8T8U(51&53!-m`XAdFDZIbGQMY('@YRfB@fJZ(pIemSHb ++E(i)+Uc+AXFV`Gj(%GqFabQUc8MKN3iZapRNRR!MYN#Ff$T1C!dfFk%!&R-V'p3 +)JSlCL*U,XKXcAhIQKBL'NMBk$8q&3aBB#"0e6hFZ@mQMi('@cFDRZc)q$'fS!l9 +m)9!(DR5RD34$&FaP+1pVZRB3,m-"6-8[KBF*S'D9BDTc!*qDRd+LLTfUPShPLVH +UcNFqi!Y4!E0!#`rQpMq+jh9ii((6Tk$6'8m(!J"jS0dKY*B1S9RRb3(FC`Zrf)" +QTpbU1[HGC4+H4aY-KRNH,U33,Z)Nh%JK)2@83'$5q!X!UFUEiZe)YGeT%K,Zl)$ +ApAM9HGXqPL(Hj[E(bDcDP50r0h)"IHqLIYTqRb(mlc'i!!2PGD*'%GrYe$J!''i +*rJR2*m$0`@'UcA&-9%A(6"&Fkd9fiCULfr54SKZh@VFGBHli5#5!JV9VeqF+a(U +d-El'$E50UQeGYS#DGEL&HLA!iK4Zp9@ee$J(VRJ@0V[le[6$lr+-'G,+#V0maS` +E(@YUDJCC3kc@J8lR9+YeL,$S[b(k`I0JlaeiSa9-09CV-%-1[h%qe'Sp"d4mX$8 +Bb*!!qGEaIb%eRdj`r)hrT)DG4SB))BY#@!baKV4M[DA9L'm@ep3m8-08'!)80,Y +rVY-CiR31V1!B1+AP'"[ZVK'LlkQTZFGZY`qT@5L#3#h`paMM[B[Yl'p`cIe1Dmd +3ra+$KN,#F'G`"G2Ghfjd3X$G051`IA"0"IVqNFlJQS&1Uj-*IGJTD"95-bhXR08 +j&a+GpK'-,(Hm&RTjZ"KA)9,mHraU,Q$lr-Ym*lB0&&+Jr--#I3m8"1,qlm6S)A3 +IU0kj825qU4M1VHJ-HPJ`49BY9d'X`AFXX9jBIY04943SpI3HjhZ&2GRaMNj5i`$ +TJV$RT0GH[ZH(5r'A,X9,H[bPlRH`[rI$`X)'$,dFP[K(kCdVYpr6mIV!3Cqc),N +lcT&fMZaicmKK`k5Y,#5IlpSP,+ccd1$,!kjG(pMK9Y[9EVGkGlebrC1`-+PjbJp +6TNM*-+%26d(i(B*d)FcU[#VY4(Jb&%q+hICfa&hr4rqp[9H!Fdd`!rIIrVQ#h*r +Hm0B)l)e90lSRrAE)Dr%I$)Urd5Rq2B5V0jq`IQbpFG9T[I($YkG'@ZIH@!AJZ2' +KdhVc2IXXqf6l2#Z+1-PUA@#ecV(qf[lTjC4c6T4IARRX3eFNj3(*eI2$)AF2Z9[ +km$F9REmR2[0+m+$qL9Ia8ceAVNZ6H`k58U8DP-pD88Kr(5)p+`9*@lZFPkk*-[K +@@*YGfQ*reNlq[pXNVKDT1B6C[2'KSFq'KRCliYc,k(CGqGF"LGFPKl$V3UA88(r +i-,4AD-r%kkm#r9ES*iQI*%T2I#QYq%%0501N*-JE*fAD`SM8dfeAfS4m!!!F%8& +%3e)$!#la$e80C884!$&PlN1rE@q@19r#b`cjKT!!Nlb%1FG-XZ'40%FP,PN5jc+ +5X83*h(c*e'36bC)eaM6PHR!a-B4S)BB@,*G$!k@RmIN-,&#V(S%"PX-9,cIbI+c +eH$NL&+5)jECFVpM8IIjqllYN#CCblqPprJ%ETLIP34!%3"!!SJ%Ajr%4R3i[2Pc +)A&#*C)3"[[jRd`XYcXEZ&MlCl3dq6TAmHUVmBRcKN6ZGlrhpLr83L80DQaTjGMT +X@@KbqP66kA)N(6J'RMM0K&4mVKqGCk12FI&MQ&K9#-m5qeS83SIZB`A0k,a$qr" +4,AiNa!qrV`hZ-G(0)cQ!JRjb1$Ri6PFA0a`P&b3V+-fJ5NLNR$MFkc!1@Ai9VRL +CYeil%[V[JP!"1DP'ErRJQI@T9Qjj*a"DZcG%VN2GGhYl(4RAMqm0Y2P@1T@0HfS +YmlQrqmIdYr&#pir2lqIEqjarGQL$8rhNRLXK`dm$dCa!8pQ8&Ap99@6(jCIF[4i +dpk0QfB([39D`iF$GeFi+kkM4UR!jLek6SE"IDC*"`@3CAUhaDVaL4Akm2MX3bZ@ +pfq1#+HJjS`5(f[5*l9D+A@&Y%m2$M)`b!NIp$MKXSC,e1m)fe9qrBiLVTZ0lI,& +!60h3T)6EI@C6IYcEq*%Fi3P23KEiCakK+4,9X)TB@6Rr$%@Kl0fQ51pHcfTeJj+ +Q*KUbLK8BemCdD1lQ%5%PP3QYr,14X%90)'PPe3D4[)ZT*X0@-TF%)j1DB#!96Kd +Nc2cD'k1Fhfek!b)&T[+k94QI0rV-i4jiki2*#QSi"UHmA+ZEjB!b*b"ZYAJeFAR +jPhfa5@RirhMKP*jeaC0G1'IePIZZj*DY,S#EA+J2lqJIQa95ap[LlBEN$VVAFVA +c@4mk`[*i+LRd1IqNp9UNC6hpRQP-h`VRp`*Xp6Qe$@QX(L5a1ZYIm*R9$HS9Npf +6m2D'cGV%kFeF30&,#8MV9KiEd9af6-YU1a*p'Q[GjEh95T5+ArE*50beUhY6%Ah +``@A%R$-%LM`d56b#Vb,U4E)[,&iDVJ3q[rM55(&DIDNq1C6I"LHS#QE#a&Xb8m' +XY[ZXb'TDMj@IX9+U-UQNcTDK-8"`C+4(R6hb63iF9dL0)EADkiL246fQJJ0,!k% +e"Eel9rekZ%*025q((%631BG(8#ZL&M9eG8R9T$"5%4A#&GEYhaB8ABS'-0KA22M +FLZF90UMXh)UVP9+,efKej[p9eZTGEd,rH[%aE%r&aTpkfha@EkI[m(dA9&2p`l2 +bND+T5%DdNCD4C!85#"PF4M(8-S*8`"HTYKGK0KUK"28"K6DLj1*S!PE3aA-jVUh +3Y32IK#X!2'%N04a6Ji%fEbRdC5N#8recMh`)-K+%*,kf3MN3HH$A3a@Uhdb*DJj +a*G(!%LS3b42NTT05B'TPmej5409rAfCcQJ%j8ffHDUp90GY[4pilmY5`ck3ZL,H +'Hm0l,lGcT&29pG@#"&5Vic)T9'GT4*TQL3%Tf8$)!k,HpVC*k3K$a9$EV#a2M,N +`H042(`)2S#18%Jk'G--%PlZiQ&+JG-5+[8CK(-N%PN!3L&&!B[`l!f0Ifr*m-XK +)*K3D`%5G#B%TMhIA)CRRK*%B-2'HrRL6ZVrAr*`@#DEbCjdMQ5DEaam'F2+#EAE +H*"Vm(#k8CQ,k'ZRp4NT0@JSMprE9Q6"N*pY-Glm5dHmQa%%*$%R%Qd`!5Yb3!%C +"LJA$rpTAjqi[(U)Vhp%2F3@*2Cl!6c9G5M8k'f(dE6!+5#6'iAk'FGP'e9q"(0l +p%LEJAGT*fP`-ph)N1hQ`qmF!aPCXC1Z1IPT-"iaNijBk(+d&Ul,L)e5Y5E@"p94 +UF-Y[9KLh&L+Y0,LPES9abm@9,PbRapEi34S1pZ&JmVMcJc3kD("ZU@P!Klh3YZ8 +9GI#$Y01Sd!D,%85CN!!3C2JF8S-lI62HQhNSE!DkDlBYi4BNT!+m,aS,@f%iMP& +DU$DQMr!X$@MZhd#JfPJI4K+VIT)8cQHG@-L&aEdR&R,rSf#C'QbjC((Y(fbjdI, +*dik8B(%pl6!IQHq(1[LeL611XF'@2CEr@$rBdQajTqk0X3V,Ip5p-4aFq`6p(A[ +LcS*9EiaRTIc0ADVe+i4Mi,8"6#ZE1eL&Rj%aZmHX@J%'cFEk`4Q@hLk[0e'k#+N +Yjjm8#$k$@h[MAUq9dVVB9$Njk0V90X36jiIB0PG6!K'#BIR@6R8Qk[9Ta)84@UM +DN4P,J(fTT4[r9Cha@FKXP&BlNp(C'PG6Jmj@E&YQ[,(EZE(j&#ShAMpkbmEhk[m +rHe@,J&a,bEX68U!$3l@NF,kLchREI*10G@He*CA,rlM%a*Q4MQ&"*Y#h"iLXLC[ +cJUIX'pFXl0Til&3(*MQQ@l[3XV'CTY(1H5S+93SSJa[2j#UZ!JJYF0Z+l'UVX20 +ElG&YqUNrhGZ8*'"!I"Z1k1l@YL2F9"%RYaK9j0AbJAi-EUL+PP6XKU+B"VIFKN# +DZ9DJ-CJd@`VR+"MJN!#02,Led0fIENRK+"R$i5IB*()8$qXq+CaHE"X68T9)RA- +0('eI)Z(j,edBERcr'@,6jpcRTL''!LkKG*qP)Nf-p(JA51P'mq**GN&CZQ#8"rG +,bb!ZR$$aUAk3!"E!G456AlT5peNi!6G0'5i$&X&QCTTUD31TqY4mhPek%k26G%K +U$S#X1'8VIGc6Eb"8%K)YK6SG#BT#*jDr&lBN%bdR%4K330Z!Uma#NPp'4Ij(k#L +fh"E0J4(CVp14Xi-BY%54lL4(2"S[-`l2M9iNePA"BV1iX-8TDRD9$ipc-P35X(Q +)dX&rI)D"S6TH6D`*&+IXcYCS%d0+HjAV`,82N!"S!"*bFll0$2RbA@p2pHXPB5j +5PdZ1mNCdZ3E$iCe4ph[5-bCK[Lq+jKZ"4+k[G4F0i4e02$!%dp+"cM2E"0-5ApS +@55jJC-,%J2L,qYX&G$5CK2JB3)$Mj2l*ST-hXqdlL*pG@Ylb!JbU5La!k#kiB`q +#aEG9@%KQUikC,4'P$fD4bH[q@PFhHZaJ&S5pa3rL+VURZl0e6d&aXTkU4$1-5"j +$k-'Ri[9LHQBa$,2Spc3e"R4rK$!FLr[aXRLN"+TKbM2kKK*'&QL[hd`3[S#D[&b +U83&3@V5b+$4crmU%'h3eRhT0[Sk"+mYq04P@0"C(BjNPrb(E4-68P9e'JQF+!&k +"N!#,56mY+MVcqS@IAcS3S+90KbeTLfhM%%L0VDBZMj*D+#hY49FjfjAYTk9,0bh +lF$,Q+r-qlXZ22[Vc5ajKS#EDip1%8D&f$Q51G$cqU6TRP@0Y*[dYbQaql@k(fRR +mdNKX9F(DeqK[d@[AC0jGm+8M3m'f8+TV,0`j812ZMeBR+b`hSqYHVKX+,)#cVZ2 +i*Dh`#pG5VN[T#eXT%Ljah9kE-GDpZ(YaVbfMa+5HharMb8(RHM$Ce,Gm6SiHL#J +3i%kSCqJAYf`qk+(0KdT!Z%D9eHP%"kmSie`b4A`A#5lcN!"i&EIC$b%(3Y-*(V, +c5S4'IA*q[d)6R3$6E((5F45@GKZGi@kR-f$UBLM@Tp@m-pI(4fpaATe-a8"HF&3 +D0UG9UT`3U"*%R,$-Yi(%15%kQ%K0b$L-R4FNaV&&B$FG(6"ea-2&62c,DH!)IZc +hfML*BcEqe$!DPDVHSSG+6q$2)X+dL@ElHC&SImj8rd+!dkN#T4*k4[efkVKT+$@ +qS3,l[#MNF4MP*QFi`jE#9CPMpLe"5QkTZeSF!-P#Qc2JaL#*JG%9'(3'U!RpZFj +,#Am"+G0eFQM-,frJFRBYULSQeXNmeDjL)C!!TjiBr$XB4&qPUPaCUK+-A(D'DIQ +k("PLrAfCBD0cq$TAG!KQ"G2'56!4%#J630E0G9mQL"Xql8,6%Na@1BK&,a&PeHR +L0djSj+iJRaa@)pCm,24pNaEMFMlDq$UM*KQ"i4eia1P8"rU0224H(LG``"ReC`P +P3TZpfETpB$!fQ6JKq$Yd%5KLrIF+@-6B-fd!@86(3*!!+!&"!Q!CaL+E4jB)(HL +2mP#VBF!KDF$R*3-qGiEp(AcdHdAH%%f8aED5!Ld%$"YrRNqRj0#$'h3(5cE82j( +#KQl3hp$IdBCH[G)0p@-MapIRBP2Rr1Ff&D*)9la`61MG!(,+M`6A9pk9rEfkHQU +$0fDrjIfR8Pr9F)Z,L,YL)c,QP9`[jEH#i6"INCqZU*80q4BA*AGeZX@1D%)kp%B +@1e)9&YF)1kKc$!9R&@3)fl+-BkTJ*G(F0`+%(,%FAK(M63D%9%SKj$$8-SdGK!T +jEiIRNbJ[Ia9!mehhVJq[Ima0G@c+,2X[(1h#N8eI"$d&%H,pq[@$lpI,Sj9#aR4 +U9)d43,Zee3*q3PqGdqQUZA@8MSfVp0e%e0c9-Q1FT!kT'ZR09ir`3Tl(AkB!U'V +Td'H$B6HI5C[@+*@cA46NpD8MhYTBDFQIL-KG1Te(+%5`@FUZ94Xb#i2hE$ECde[ +4P8-N5ITKN!$#!reJ,q0c&KQZJ4S+Bd'6mS*aFbNRNKm12(5+1Cr2,4LpjAeA'H, +VCVmplcAYjki#"BChYQXSG1mVCack93(r[EpH8kSUA(&[cI@P&i8qrL)Pe95b3!d +&fJ`Z0YdZJ#YP#(4#UN[Q5REJj5!#F*5lM(QFZTVQ#ejq2m*1C(l(er`EFfK6Kfa +AZ"%Z@RkMZS#DejrVI"a1q&hH"9#9cGVEQq'QI0$'!QdLmRVH*SILY8cNfq@chA' +1+XDaU9EMqrAhjjrMdB4d1,jHTSpb*$$+dE9jS&"TF9r+(SLK'aNHqqS9)3k"1UU +Na-'%#PmjVKE'HA3SC4pLbalmb5XKh8%6AP"%#&49PfH(a[QU+mA6H"jP"lMH1-3 +GHCpqXl#3!!00Dr-BUN!9E$iEa1mdU*F#pG`[UQIj$e62FS3118Y8%i10FdN0*F! +0FbaII`,'"ee-kNMSUPd+SC4!3BKY-VdUN!#)R*Fk&I,hr40q$J64mPE%0dhbHQX +AJIZ10*QDmpIdkKIRXJ+8K4@hLBC+6N@XGNS3hC&@b`h,5jXT,-pmZI)5P[IXTD- +(f0',M+cH$Qa5Q6i6UG+cU'4Udm[RDA"ZBNd"$9r%K[qrMcYF9LUX(-H41abeR") +96H[0h**QYG-5+"NrQ*I(I5D[()ephmj$!aI%Sc6M6FR%H9*p*SMqmaJe6%ST**V +$HHc+pf9fh2*qmh@Zma%&4Y[LJ0LKN35dmJIF09DlE1HA5E@,lY4h`SJ"QG9HKKj +K-iJMd9Dq(f58ICIL-!4fjPT+-bjLb5)$+C-L+5bm-LPldq&365)T"DHFQXlP%E1 +T)1lAV1iYm1a5cA$*lFkDQ6Q3!+lp,IBp+BaJ1C)aekSK&T,UL+Hd0YIfH+[fr&` +(81eDEqLH+jRX-bcF8j2QL!U'Sj(32DpYGi5$0)QkAChYEH[Er8K(iIK%jmb'STa +qMqGN8Fl-6,[lJ(Y("NY-PKY-+!4CZEX"L4+i5mRChR%Ejf8j8!29Ci8$M`I,PRe +BK%G-e-l6lbllG#N2#UDYA%ED-UDDMhrSMIN#A(lJJ[TC-ec(2YX4(SMXf+Y'GML ++e[RmQrDZZM!F85[[bjceAB`AYDVB$M"bH5fc@RKX8[#CSmT3a*S9&3*`cjrEHf$ +2)apL8VpT#aFm!P$c5G9kqJBN4Z3Am-$'iXI9K43m5l#"@jj%r8bSiQI0@%lA8"e +Ni(bp24HS#2HA!1Ih-XkEpL"'(pf#QlPB)2#,PH5#FrI('pIJBhRDdQU%fEAHd`P +`YQECSYFMIGE)8Q`1aYapfL85!M63+YHjF(("``qH-D#G)bA"Zrfjl-Q1`J0&fKa +NJUe)#qG15T!!rqVqaeiX1CQGl8NR0-@'aF,cZI`Y%NiH5G$A8#!aK93l["*,qql +Fh+,XR0%$0*+BfEpD*j9Qja6P(Xe*cc8%ILZ5Q9p#JEaaHIb`j"KeF#3#Ph$&4b" +*5%#jGY`%*k)RKNGCG!$dpE6JXTXVY,Rape!eLaPfJ[9KQ+-RQffT8e`b5)YKNP* +i68$DYh!h(i$&Q3pGFk15rJSaif+HKF3#Q%@cYGAX`b0@A+h9X)qGiNHIZ+"GV"M +60V+2FA(!X,M!*hj-6p'V#H5KDILhc&bjZB!Gq0P9%VL)R&))K$$eV'(V#%YJl#X +Ue)2K98')V4"554jcP8XArE0LiAflmA,3DcBVc'B&%bZB@+'6&6T4q)-dcf2TH88 +pkHhZ3VEV*`eE)k@,#%'4'*V2*p6HF3A*SDI$jMrFbLQF0B)f-F!G@4[h6L#`2Xr +[fl$K9Yi8B!+YDfrFrhV0@5YAAlr3DepPKY%+C6bJEA0PaF0j5Q%P@ec,&NH`@(L +paPH(T9fV1Z%)Mf6-8eNLF$q2"bEfUcb[XS5YmQE0kc83GCK5e*UQqNAf3XDGkSD +AHN#SfCdjXJ&S[er0i%)*XRpIZUdlAGZEFr6!cHfj4ie&$+lVHqERT[r)RTkG!hL +[$1FCQ[V5JBj**2L!S-J(F*NTY@GR+*m5QYV+EBlXK"Vj'c-@d@SemUC$+Sc1ifV +BJQeUXVKf11)Dr,6#V%FX$SZ,EIMZ&*`&DN`UU"VT)h`cRlMZhC*K#RiDbGP3-XK +DGBKMT-4flMbDXAXPGmYJ@iY(3F436#LHl#A&NcdqJj,92Z@&i`c#SkK`j2lcV+( +L`mp(VaN['iY)#XTe"N@,E#j@Y%Jp&+d2VeHi+eJ@[$%8#ldDZK6D&h`S8XrqaL* +Q[$*p-VRH92X)VSQ(#d+@Rm3i(U[apc9)+S6Q1)qm5XYJdqe`1[SPm[lP5j184QY +G+B0%Am08[kKd20)U63-Q!Q-5-M!K&NQZfUY1'CShK+3KR&%6IjR(3`&-1`LQZR) +IR02iV%CMhS[!D)3mN!$i4-b%DrlL-Z@RDhirPkE#ic!GI3fpq92pfFG%dm"$[aQ +5'3RYqL4iE5@9*9IcmC,+K+%b8&aCA6+BUm*)T(KkA-IlPL4SI(*hr+TJ!2KX!"i +&9bEd0U$D!)lJQKm'`"miY*jYA@LP@cId&X48kl'80P1m4,#2YSCYab)DAQU`l66 +#eV`@Y9hFXQVGlGLbDRaUG$GKbqJ"K*ZS19S+D)Q9!Ndbj*cIkC-r(Z+3!01!Vp" +$e859#irm)%B$"T5G[q`BNVejB[&9&BKiHK%239b*U9dQ#"ra%GAZG5ql&5l4f0R +j5)P"&"'[3-aL"$,@e8`c9N-`Q%1P1aa*N919BKI,bd2Gl-,rh&A961l)rK'%!QB +T2ik4G1GaJiLQ-"'0ZJdNM'%3`je`3UK-M)(B*CQ@K`q+cQ4+%LS3621PcR'E`lL +Tf,hV5%V%c$ij1lYA@h6J1Fpc"iiDHN-)*q0&K6-Rp3mN)[E3Sl(NkS6`8$EB,kR +U`rABU1h-SEf)+NC@Qa`3T%6A-9@Gh8mN`@N1ZEDX4fq4VH-B`ZGCGf2pGK5LjQ& +E100V`YCAieTlk1#&+432dY!hEdV+M-9`-9-+%QI&,k80-$b'Hf9QCRGf85'ZN!" +60-QPlTc%DI-m[Sr,jRQ)-IIfR6BBGR0kGYbdfkKGbAlNP3K6c,$la""l*1%L%Y* +0(f%GbL)Br5hFF[PQhX8&[-`mKSG"bk"q3"pe#%d0+*md*0`%dXY+YZ)aL3M,dHc +*M+)G*94r,0ciB4ZeQKSX*2`er4XQG"aQJ8aK"m"e"UKL%lZJVh9R)25*U!Y4V`Z +1CU3AG'F-MdV5(bS@Z62GQ6!$@rN%2AT+!eVI'dF+68mSV(h4C[6&'`8E6aLR8C! +!idfpYRJB2k&SpH'j0,hBe5N'*Kr&L%Pd14+Hqh`prd$(!-!*[1Yb,lG!HFbA1lN +l+Z$6AC@S`59m!JVa`iM*!!&jF3mM*KZ&UAJ#K%cLamV8C690bFa'J(IT+ih('Kf +6,Mb3!1Qc*"A$!JPG252*``b%$'($265NbZ8d95l(G8[)$CZ8L`G1(i&!2['246c +KfmSYCjF3`Z!&K)'`fL8V2-")D98l#HaRdF$!JB8H+0#YaQ20&(b$#KMQeA3S6Bm +,h3dNmeZd3$+*[#Ch[k(CD4"j'6**H*Cl9I6Lr*PbhQ2j1jj8iCDrkqJ4`5m!cNQ +q2jR1HlJ0V`(HKGF8Yq!9jHENjc69CH'0QCNFiL5T5M*"L-H-T`DN-Y-T0D3I&pX +[4h-1c#Idl@+#0JC!-B&q2&k'9ic5I8bPRarSaqCcK#'9)6hriV#YVaPUAC30e6K +!2,KK`Q5%(VEhK2)%1#'A3B$m&+lAf%#rTp9%S$J#0`dq[*qJ1I"EUZKVL'j56BE +Qr@Xc-pNr!Mc%K[!m&TJK0Gq*@E0SM1B9'b0af'3'39%d%0)!N!"pM)jVL1P4N5Y +MDeMJ(9Xj`aTLH&6N5%2ZTP58#HUVfFI-C,QqQG6dK60p"M0jGfNcfCZ5$+eQ8l' +C$-p)SB#r&lGUCZR4bCQM'4RT"fCQrZpNcQ5lH!efj9Qdp2KNcR`$UT4H3SJZ,GQ +pdL@UFBqeVi%Y3@2+q&cfdCbLUbcC+5fTfkeRl`aV1(0D1&Zd,`%aZ)#A`'-,,5e +D-Z*pZaI2c13@aCml#HicmBcdT8FcCY+A,J%6,U8GdC!!U)@E43dNH9MYk'j!H*Y +-+9f@X0XGYXYPh1eCEldJ(qCf6iKpl"3rmMa0UVe*3G#J'qP44")9$`3E2+j&M36 +QQ(XTMRpiJG!aFNUdr(*"2#DQDRFVQK8IHGE*VI`Pcqej20UN4R)6NR#NDE88@0k +jaU&Y[XEK#q,TXTFmUp310Gm`"4Zd5hUC0*i5PMkcp8+da9SMNTc!8#)F&Bd8e'J +[AXUZNN$P6QN"PZiX2QE,h5cYDr8dEMXFhaa96*(L+dSXFI"A`j!!2aM3KHRE$!@ +d(mdY%K%Hk+RG5D'b#1Y#)!D&-SEQ$[3MF(E-%2jP3$XfB0!j"UGjLhk3!+9BZEA ++SQqV9(aDTH+5SB,%#ce'EjF%X6LGBbci4-'2M&$"NN9"kRSedC*$&T*Bc')A(HZ +RYr'`Am49N!!ljki5`V84Z2APR$PhEhcE`CB8&,XBbI"CPP#kq,S6Ge$!A+JEMG' +"rY)"[pr38E"8X+ZA"kZ'Zl)'*!30K0D8`E88aVpZ8AdG3'@rYm1,LPRj"d,H#2k +P"F)ZNNJ!mrGDU3Y6iJ,%$K@"2C(pR)@)Y([NKp,q-IHbRBI4SDUSM+&5-19RRd[ +jU`4ZPSLAQ&B$SpTSSK$*F0MFm9F8V0RP*L[Fm4U%3jUR-ZdhD!qVIhRc8c6Lc&- +AYQhKi31#Eb%2*iQX"5a&%QMPTM4'PXC8i8P!l&C(ZLJ8m#cq9BEDq@5TJ%9$b!! +4J,!"TC!!0fT-!4k-,`A+"Z06+)6LV8$C4S!eP+5T&Z)aMZ8h$0aKia&h2aC%2)6 +H)8m+`EH*!)i(EqCKASCQTjUX3+K#Q58((D3XEG)06k)l$4F'L8"&+"8kQC!!JL( +*CBL&ai"Q#!Si'1TH`K[CTiDpZP86#A,5pX)SI'2HfZ&lSQidmje$GHq8MaBqXHp +hYY'DZUGa&R0rF-MccZLqiphEMpXq4-h%BapGY0@-*Q`Y@D1h2PmlqZ5Il[e`eCr +rGYHCLaF[(RVrcY'lPcekl,Y0ccbH[rch0VYYik'k2EDV$bfh04bUXh8de$cph5m +hYcae[1'0RelC#J!!4fT"4%05!`"ki""9$@4@!4!a0Hj&rlpYcM&A'6,XBUcq-TC +P%CphSBQea1#B)XZ`DUDPKR*JTE"CSV*$2&i2(fqkJ6a[J1C3`NRTZERp%TU6UP3 +PchXSAdYb$0#%8JlAT$3"5K2+)5QPK()**BD+HrrqIVmpViEdpRXrcrrhm`!EVDF +S*i)J#)"!0-qALNGe1Vc%j5e1"Y!I[i$-9E,%&a&J59Bq(8`B4L!UPD6(NT,r[k2 +i9#8p8,CTj[@C$k@dd[k5IG**DEr-l&%B@AT6&C3aGFb`1EKG9rC"*'(iH[V4H5& +*da@c5PUSD23C[N!F2b%S-d`c,i!&*S2$BPB'Y1!#%-VeR2P,&&CQMh4)RSb6b(L +1QSB#NC`kSFDLc+*AVcjj3S4-Ck'dkC@+49bb"rb4BL!*e3M3#6CrTdMZ'*[+`k4 +-)b+m1ZC2l$FQIMmpB$Aj!`i-D*HZL0$mBK'k(NVX$cEI8D3p'HaBi#[FJXBa%iB +0f*p*0e`9mHc+CqG*A5iXB9Q[,1ZaA%6,HKFZKNM)0B5QHP8&ml*HK$"K3qd*hH* +RdKdG,aFa5CrGNHS#8pAMqV(VadTcD9$(@@*dC(DRI0LJe"9)mR&JfCbb0I'"mp( +8ZIDVm8A3)EAlN!"3VA1&qT2**$1RE5`dU9jSDLYGfX*+PmN-8HC0CX"Lm+Q4,Ra +qmJ4BbC@(X+PH"+BY9`b9f9)5B$(N6&T$885i+LZcMI8M(8a`*G%kA8-fdML[k%k +DRHM5DkL2!dNXp@(3AKUdfA*3QC8TfTV'Fd-L1IJI8YF6jXS-@KbDX+Jej3D!NX# +'mi19B!'16Ci-E'SBiSN*N@UrLlGB@hN)SXYC%bi3d$I99[+fHNV5q8*Bc!iFQ!" +k[Irh`F&LZcNi+"XCr8e-U**d6-phi5,-i(8'!I!DLFfTaX(Q0!YaUUK(@'k&QEm +)ARTF%-8F-i[Yc(jY2k$9["5+Chm0E'`6rMY%LdJJRc)UA+Dk(jKLMii)S`E4rE% +k4&1)$X3N4&X4r@+X$G%K4,0MGN56L+E(3L0!N!#@&h1$LJ0)!Jb1V5#8+9!hBNd +99TS5qm'!k`0UXdT$meqp(NUC$Qhc,*!!&f0EQ5@IqPq%*T,ZJ9TCE8L)(kUrCKT +d0JekBm3+mTZ8)D2rBj[`aa`j9d9c6$q[@#4MrT6*D,Fii!'T)4"h(p)kJD(0@Af +jm4%)%F+2ej!!5(i2'Aq`P[CRlXhF#k'R66-ZYN[VRjZU+p1X$em4E8$GrV&aSI[ +3c&'Y,l(r1d@(YQ'LI#QpUd8jI*%PkJYZRA`dNXPZ+PEeJEDQ1PAIG%9p2l[bqA" ++C+B(r%rfUASd0P0MmiXDQp%i4)e$,fSFNZTN%(%)1`&+V#99Tji+@*XmcXN4HA+ +2HXTp49dD*K!c5ZL"8Y)3D8C4$4ANkY`fJ3*b+"BhS5'3!%6KR@BS-XDPFCdZrhQ +R!J*!b-8lXlUa181"b1*)Id5BNAJcE*2mV2)&#mjZ6%S[Dcpb16*1Qdj$f24%9ml +aaEC'3VYb*Ap',J*@Xr4bb8HZQr*RE(R3-mdRK6#GQVLVr"PE(R'U30)X53[!F4M +U2Cm5`qfXrBVS%U(-G$$A[f-8RSZ-!MNJ2TB(6RJR[`38(JiJr-HJkMri5a(UfmB +)PTHd[KQ0b5ZLA53#59%-MST3iffVl4iK"4ai2399Ehkqaile!jfBB,C0H#S3aq[ +K'(F$6+Ra))X)Ue-UYYU5p)MfQ*@@VJL9&Z1m5)G)2)J,j1DN!'+9$2HK`-J*RfA +Lclp24&PJN3If6C`kc#bdm(PPiV"lSKN609G%JP8bUh5-'PDHPCXN0$P@Ac*$4GR +'#m*(#dBXa)0QEl%D6kl'aH,"*(q!*+Sm15MC&Z6*$TV-T&,akHI2*qm6&e8pAQ0 +U-eihe#'m"Y3f[$,9&MK@a09f)0Yra-*4p44H*@SfANC9qpKpN!"VcZ(9SilM&91 +2iR9G0H0P8XF`U9FGa5ZP0Z*9Tel%B"dUUmjl+0QZAJU$k9bXZZMc2S2CCECp9S2 +Yl2`SY%8EIfI`AP80p0(%8D-3TA3a2XK&"r@U&q8,+-H0384)'Fb'SXI-G-')DXC +5RE,N`P+0fV1EYp),iQZJ4p6Y0UZ(-94@b'JU$KN$CR`F$ehRcB8+(+Y$3VGUYcP +863Hd"eU)p%N-84JU0-ChjiP3U"#I"D(lJX(mh#I0S@'CD%!)f3'$MA3ap43RM$b +FHNiCVP9*("l`2[8[mS$UAr$j+r8C(M#r1(6p5E0kr-NHcb8--q`C`5[UU@G9S!e +4$#TLq9#HJ,,k6kiUhI6'@LkUjF"@KQbSD(%jAN&!e0elF)9Zmmc`'#1FZ-CM&-P +@djQB95l@recFb%9k2,J3$Ak)`Q@k(!4ErBBUd3baqKhU['C-a%4l&F6UE3$cAI+ +`YBGe+jLj'4HkjDq`'RX*Lq'ibXB)a'r*$q&pqIb6Yr55jfBZa+IPH5S2pNN)Kkc +3cB'c`iV)rTHhLULdrq"f%De,rZ1q9-G'&*hiDFB3bfHI2)`1QIXbpifY(LicpH% ++0HJf4pT[[rRIq"H)M`#0Y)G09d4()$NfRJqhQ(BpJBiISUX92`lmf2($cFmE4A` +VLZDfJ!X)XJh"9-2"e$U22i%mUR5,QJ5#Z!DLr"84[j5Ilfd533dbD(Vm0%0a3)M +BZJ["1IV+IFM+ch2G4dK"XJe@cCrr%i204V1%$1`m(T5Zq@GFXeIZ"ME+SZ%i13M +mb6T,q!%L(8#@piQN'XFV$T5*P`J"i238Q*[9&Vb'++Lh89"[39!IeVe$J03Tr-j +#54CE`2+G'KL["A$TAJ[UjXm5dCMHL550BA4mMC!!3BU3!%%GJA5MHLlcb2%M`HD +0[YNqie8d4+Nj4FdSi(CcB#["UeCpCMGe`+Y*rF[IVUSPZYF$B6QaJmhjHb9chcE +9L14Ue,dqSj%Q[)R21VAN8R1qGhd40EfCldfCFGJq%i!mPM,&Be%0(,i-4I0c#m1 +FS5E`$$&iGN#p#C!!JXT4!lF(GYTCRJm'cA36JNC*HU#CPk@N0!!'c[3CMIbC-Ub +IZR'I-RJ8JhF'rI0m"bB0l*rR("J"f%1)FNp3MGVR3(6HI9b9+"XXlAirUH)c5Tp +4rM3kT)'X)ipPBSSFLCBFHbCAkVJ*!%$`6TLZUY%!@0@D1PA+,eB6@)bmJNAGI&U +-iN2595'6L3PhqP)(0hV4d+LEMk9'AG@G[[A[cYk(5Cfk3HV3L5"@(1fi9U9l*hA +`6GmY"UC&+'5Ar(k&VVMDJ#`MJ4kQq'LJ`CY-@Qarr4HNKJFa%*&"!KPD6ER$NiM +JHFe*"!D3!#)!#%p!8&rZ'(Uj#!'X,B-GVfE6DaZr3MH-)V4hSK$N%,%N1Z&DS@& +RNFG*DXm&d5iHD*PdU0Pj+%KT[eQP@r%MG!Eb@+4EVL5!A4VSfkV65IiCM4P(8J- +QUa-0H2cBcY4B#a@,80N'((,KFZNLZFmX0mD$#Bi`QTP(`3bSDj%a2V)HPjXk#R% +$36[%a6hB%iXiD$ZZcF-R&q61B"UD@Dm'df6"!@*$@0NXL[5!iK3#X5K8,hEhU$A +)K1q0Q[TqUMDb``lrTi"JTF@McN@kY&#eYQX,Y4H"+a%biK@KiUNQ9-$"+R59JeA +S2Ll83Y9i24`U$0H&VU+,&@,6aEjYS8XX&XpS4%Blp%,*),Bcq3RS@jRi36m6aCd +%kMZF"%Bp05cL4K"mQqGXN!!'&X8[12"0'PLb$5a0'MLQ$#a0'PM#`0SA$4ZRB@r +3S-ff3CXR$6UN$0VmiN%*kBH"#"B&@,"ZSd5eCqFd[k1`aNSIK(X8NAq-a)%Sd!2 +)jVQ8[jF,GbV@@k@kd,#cD$Bf@dj4Mc-kLE#$+N!k9J"0UaUc!TAeNZ-0LKrqH,Q +)J3*)pr-@J@*X1KICKUYU(#,Mp(iJYDB'4$q(S0r'Q@S'ZK@RH#KFXLeQc@R8I4j +ShSdTDLmAl3k)cKa`K1j@R"5F1M#)Td0FEZIJX,X(f9iFJ)acSfikKV,$E3dCjeL +bU6dljrkdNR5j#&H+l@&GMK,dHM3H#pEICQBkF$CfSKJ"CJ-9m5$@F1!F#`55kH$ +fd#@Jfa@-`N1&J@B&+3ap(4N&BaZMLU#!5(895F31)m[j3clH59J%mHA-C,%PkRN +3rRLJa(Q!DR3HS2lPK3j35p`(U#A1!p6M3,$Db3G-)%'2*3'FV!QGLi8X-,V)-B0 +GMU#3!,Bf0SV`L!lXQVUQMRjr8c`lCpQ@P%&U3%)K%bPR@2[Zj1aUG!0R9bp#53j +@TI#J3"20,aHPc,JiEd$r$8DA)D#51A"'*Q%Q0!qXmNX(CFA,j@!3&hkEVRK@kXJ +rJmqpD$`RJhcS5&$pI9%XM`%*2h2XM4"*EJE#L'J3F5$b&#**4"l@hB5!&m`raL# +)B6Ec"l0@mE-9#qp*[I-(aDREIJcd(JMqTS&r1--cV,X'CiJ2,E-fL%"&fh!D'`i +hG66TjBAPb6&"f4bV)ZEDQr6-IPkD-bD1TlmS8!YeX`XCDk#RprliK@qZ`b$2)'J +Q`%"TCl*#,1dF%`L5ca$i-d1P&3A[0PX4[!2&Ti6)KUqRpr[425ZlFRQDTNXZ6V' +P)`$m)m`F64QB86A@PC8H-b0)(,PeJlZ!0DAL8SRm-mc`@eimeK@,+N-GD9U0T4e +MAFk*')U(,`DlYLm@Sb,D&6K2KDM,mUM)6cSUXYDMV#pi&,D1lIQ3!##Cq"R!M`% +r2@#MD+6pc0LYcG"PJNRCJ!jc`D!dJ'RB*Je38jCZ!%efTDQ(#0[)%Gd!IJcib@3 +b0qQlQ,P!),cLAJ,J#)V8r62VQ!'*`HU)l&C5rqr$K`6a$3SXk3J+j!DDHN'CHJ' +NN4!N@S&FI"`BJ'MeF[!J4"CQaS8PDT&CCDa8`2@Xc'KYUK2ARD`,H%*Q!5@D+50 +cQ3",LYQjLCG@p'5Q@c+qL1(!D!UX-@Cf!%ABa(i%-DJce-K)%+rSL)B(f(V8**L +&5@Jp+BZFGrNL!&(*E`QN!3-[U($cM)d45Tq)aR9mEHiZi[d#V-9f*#RF1r8l$%9 +hqAM$aU6FE$&i%X,"N!!XhXQ#ABRh6YpGAN@)BU4`&$rCq$%D,dfkcS&JiLiIEq# +AEp-'Y&48$4$#[FSLmedqip&*R4T,6KVV*Lff"#9-Y8jDpJHElr**(NZf,,1),Sk +VBp,,LBH%3k0Q(#5f@PL1aKCGF!R(4)B5b'mhqV8IDIGDe`55B8I!rjSrX-cK-2L +'3JE[0E0'MEMC9"hZ6N#V$VPMaV'!2Bc19R5H&`TXTFjVR*hVR#bQ'HaN1k,lHRV +R22hjF"FmaH%)$Y3iJbSP`-f)N!$l4N3I`2+FB(+'mBB)*2Xl(Vj(Ec6@pE-!J!) +-56CMm)NZrjTlp1F4##f@%66dJbeMAA)MJkl6"9GAj-ai%q+9Xpl6Z$[BEF1kDBb +)MV*L!-Y'd6(2eP5%TY+MB04hI'*Cp*!!B&iXZ0!Uimbd(jPT9Pj*(XSq9qQ+N!# +"EY39h6c*a4SZZ$`ljqj5cYK%$(,@*QDAQI&(Zh#J!BAjG0d+ZC!!1mVCSM(l`Sb +AXjj#JA%c0A"CYArPdX![rP2SdG4UbeSf-a2Z5FT-3XMdXa*!VF02)hiZ!X5'&'@ +3!-2B%Qa$eB!N[Ha'1cSjR*mNCJdT@@Xr"rb1me`NX)T$RjNk!8I[KH0Gl-c2#5C +RJ0-H(40bmYRlG$TNdi5k8qiJRAMV#l(3C6MVGFpQ"rH-fq8"VR*"!e9S@1(a+4# +0%$1GD$$5GDYFbRLX!-'X9FTi-K-9(JU`QA"32`rC)5`9#,hS$$VQqDT[)"2CUM$ +Qi`GUE)cj"2ihihmE-X[0B%H'4+Z4)af)a18&eiq"QS$SYJq"4GPk20dBGPd&Sq@ +Ui%JEIUciDB9LS401l0ppi@C%SP"#-HT)C1GXUfiDrq,qfrmQEj%hL'+N$KY-1EF +RGH(!U*3"%5r"+%4%Cc6b%D+1HBqZUbTA'KPhAITr[M'"6!N-)JQZ1+@kKaS!S1' +I&Fba#!q#lLRm*)M3[bV[Qc!%Sr-H$#&C$S'Z#Hl+A6iVrlIU#9hDZ!#B-$R&Ndd +G!6q5marlipfc)HTm169!l*rV!"H(SI"G1i2-eqieQEm"eN4BA(ENq4PmM+fD$Zf +KYKm+!5DZTT!!@ERIZU@iX%m98"%QZ9))%0)'I#$2KU'B*@2&B!8QFfBk!2r4X5[ +L!$*d"b*Aa(Nd(X#4erQid$[m'AaICYG!J&i"K[Pe,15#@A1GQ$8)QNjQ6@MV85k ++SK"HGLj!ad$b+'8%e5ffJ+4&9Lb$JP)@"DAMJPQ[*3JLecQ)I([!X0hS6""19L8 +SAZ6JL)aKaL9(N4GX2#-UYGLafI-FI2J(a0k-DK4KZD%SE@*$`"kU%hm9+M0[M*h +531B4G`#4f4-)0!-P[0`CE(k`@0MT-!QCd('&IC&3)LP8il1Aq*!!l@QNSL`"iES +4RaIT-d8&@i),YVmlKf%fGD2523)A#BK$!q1M")*C*qq`2#aj"`E$cd9LN@B%Q!h +FbS!2T9GmprZDK,C2"RkZb[#QVh$V$AaS$ieeD2UNj)4V0fX1TC+m+!m)TC6pH[` +SXd35U0BN)kX@4PBNI2KCh5)RXmUZXQf@QDFGq5AT-KTAK,4TLT!!"RB+9,C3J@[ +1J&Ae*lGi8hE++Gk-E#)K)![)XaFrVQq`3RdF`b&)'SE,6R&a!C'`$TH!)%3#N!! +X#0R4I-j5%(VkNL`)696j'AjVCmFEURM4GrqleH``1fU91M+138($c%Gr!MS94cJ +DHXXEmP)PN!#(@i6KA5Qd`bGA#RNGVZpbKeMqD1l!23k048'R15TAqQZ'1UIP(kE +R#90ZM0AG3Pf16E$)maj[i8BAP#qX)(m2660!Q+&!FKj)r(1KjUC3J@E`Irfi&d9 +@N@EmJmV[pX+YUBL9$G,iVFmN#C@BTRp3'Ge,#Zfc38F4Ncj2'KmTR0"i0+K5djJ +dIZNAKCC0#@G93"56dfrHM2Yd1J&mC6q'kTAL9McRC(8SeG(NN4dPZ+#md5ATXk" +i-ad+K(DHP26BNVV!9lh*Y)HCSUe`TBLC8RjR&hDX#1LGkZk*A4#9h&2P+4KD+C! +!Ek"!&JY0m8!cCC+Q!A`k"rq9h#NH)LEkBAF'A1K4r'["`0$!I@Mj[*2ArFL5+Zb +0'e!G0M8dbH,*#K5DbGP!@"KL#50)dk'B(mNbGF*"NR,3KAqBER5J-`2i%$*MQkR ++)l+TDjm1*M!bJ-K8)h%9B(p2"RC0"e326VE!4UG$%,,'l2,Pq1Dk2hlKU1H"``r +dA9DcFql*![#Kk$Ee$EFLkm[J)%)S1,0c[QU'b$F8h9Z5MJ*!rcHYlJ((N!$#)Y' +('h82K2cLCmD@bBi$B6#bH*,9TfNh&!(-0ZElZ)*()jc4lrjA64ql+k*`'D+UD'9 +Gb$aqp9`,"aDpU32+8Rq-Uh8fF!C#YcJlCp2FP+%NR4HFL3UJI9Zbar6-'YRdj3J +hfbFd'c&3'`B[E@T!C3!i&Mc098H4HDA+S"$@f)@T+FkSK#ka#ml+($LfbjhJ4$! +6'6'S(R4EiG###iNYpA$qd(RK(Q3!'Hkj,#!ZlU$11b#',L&@d$e!4RCQ"E%,`6c ++8X5NbfSp#(XV$!I-(9+[3f-@miHBf0SpfTjjIB9mb!j#A$Z`Q6#B2Kf"@,e)l%I +P[5ASU$%0a4)DX-mCJ9lc5HV"E8+&5"'Dd@JY%dAim@RlXRSJM'2!"6h$qC4mjc9 +pN53ce,rNNa-3@B*-#KJpd[kSL4P1B-ma5Q9a[JdU46RC8lD1KNNGp9+[dK&1$-K +%*TNGpk8#6KKmS'MqdR%iAq4mGGF%GK3jSS%9ihKEI(2GQ2q2Ak##0`e"!4AQ0Mh +!P9!KN!#RQAU'@qZGJ*I*J,GaUJAJ(@9NfH*`G#LJCdG8L*paPXlB14RiH*QRF5F +iM#)TkTL"XPAUZ*XU'5'MRKCJi&MQqM%UlL%$Z2%"G%TMm'-Jdr3`!6BDeJ*d#c3 +p%Q9rS[YR0)iJN8`pYmbF1$8L`mF*9+HqkDY1)HYC&*2X*1E&`NJ`9SQV8[cQX3` +Sa&dY'6hD2NU`[RPp`d8-ZR)&P[9EeJ,+,UMpP)#`rM9@qr'#aB4S'cEamT6!Q(f +i(4@#!Sd%`[Cq4L"J+$apr3B(V1CB'`LY)k,-eIPHbH2*F"SNFS!4F$,@1VQMb8` +G85A-Q%P%-mP9R*P!63d@3DGGUGiX"ajdIRCfA9HJ&B2f8R)lMrADMRelP)'ENrX +!1TGQjfcB1!RF6&$kQ0Mj%!"hP!"96i"kNkT`FYH)TLG&S,VKbj-kfbQ*6*+(J49 +JKFT&M#Jfc'ALbS#lBEiEF$Gm`S$lT4U0he)FJ-XF96Ul,&#%&U[[+iAS%!NI+0` +I-)d5m`c+@6r3bT,89I9pJ%XcNVe$C&fAPhGKUBkRLjdm#$*q,A!L56jT80qANh# +d5aNJjl+DTm)TKCe-0#PQ&K5NkS64H%!Q0)NBRXN#aLq(4Q9'5bm,*TK`P3C`b&H +,DEJ$"03X-'!q"UZJFDP49L4#a%B'0HfGr+UPAlR,CqU*a4F8Jj@i%&%*4aeA,K+ +'!(cFe!(408bEf)6!f)aL5#rKS*NA)0kqcd5c@lLlGBl+MN'F(8`Sf8F869H%UqQ ++k'PUB2'@-qQFGB4!FGU@FCc1"AQ,,H[iF[V"!J4Vhf!A$9-a#J%JeQM[dCN$N3p +D)JDh+B%AQ$i`m`PXaiU#di'UipH`JFVR4amaF#*BCQVFcRUkKFiNYmcmhZJL`Fm +&X[5!q6BZ2"EAAi!LB#EFk6ppjDT`kBU"e1EAAK8pZQN3!KB'9mi`ZV2&TbL$a0Y +6+XCEA$Te!Q$#K5fa2P(dfaUEDSZ@G-mL8,@L38k@5#XR)$,VhC9b0KbCU$K[b-M +EqZE%5ePF5$r$f0r"@lC2F%mNKKiREll*M-$$DV$H91f8kNMYP1!9lC6U+e#66!R ++SJ833ikiD$)I"dKFk80Mcj3J6'd86UQ'XZe'-)5XY4i0H@M`XH1$M5QrV-R$3bK +6(A,e!aEGem6!r&J'9de@9j8j"eZeJP%*rf"+$eJVLaF!F3#S@qQ#R5B%m%$EPF) +Tj90bmDUIX[F+KTP5MX2VhG@k`E$LLQLX2Kl)r-KKR4qQDY6aYrjdHh&3MCa`Xc@ +C#1i,VJSL+`#51+C,Y92+hlU'9reEa8*Qpk*K95Da0BNFMNrj@MDfjMBDM)8d0Lf +`QGN`a'K8PD8b14+DMmJfqF1c$-QcM3X)1&DKLQq`BdCM2pc$P#jIjJ$Z2S#V`M, +V$F(-UN`TB+G`1IY"#l193`BX$MP5MmUSKh!3KQXa1Ka$mhqS%CaTRmTL5"pPb9& +3cMpfHjI&i9'(rhLkZmUVl(iA4JB-B1"M9EpJ&b`r&0fUT(l3bB*hJ"9G3e'6V-M +N9ppbFVkdbaeQ0"VUr4`BQH@FC"8rA1IdM)DIk''NG@9rC4E%fUi*MXq0A'P-X$X +T8&QVMB%*j9K@S*Q5KCUHk$c1MUCC%a-@M)-#2M#aPk0!T82CP4$%Y%rP"3jG!+H +BShrpVeNI3FK'G(E1TM4Nc4"eA-`D%9CFbZ(1ZXP!5p9QNK12B3'GKhjq,`0R5IU +Y*+%FL#q5bCCma)CNN!#%1XSq$R)%qe0CNGAh(TR+k[eiRIMYhZYq,Ca'T)lIlT@ +b(V`TXdN#pG*Kl4Q0ApX6c9Tp8i6Y2F)F1hjCe!ZifK3PXMM,Q1)XimA4&RE@3U* +F((fL2(ahpfNI,6rqZldq,eIZJ%[paA!iejFkAE*2HkLN"iBm(,IIB8DRP!8f#M0 +-l29!,`TlCUq&)$IIQB'3!,5eQES9H)%4!39H[k5YFGclm6TIEDpZ2LSXMHVHV,C +ViM$E-FV#UP&2(rAmJFS5A"R`035c)ab3!0*@!'8ZbK-)!!Z3!#%SC3%XT@95d(C +qD0[1$bffmd2EGZ,BcJpj1f!#P8UR5kTdTDLUXULN&pGSeLfkr4SfYN$5bKY6(f9 +e')ZGQHN4,5Q#dP*#HY5HP,28j+"4pVJ[A")CNRSNcAKbael,TKTeM5rm60f3!(5 +)'eeQJePZAZ-V10Fi*"hQCEI4"Lcr"CG*+m'"Z)jIPhClM`8aiBkr+X`&*33AHcR +XPN6!kP`phe"L%$G#fN1'Ar0R58Q*'!pPp4VHimq#NJ*a0(6UX1&crU`[JHp5U!5 +ZFM!EJS@T*91aF-j-@DdbQ!B5UqFR5m*B2#i[PPSZRTFA&lXA-eef+!B+K@l%pE! +%a"eHTPae,T)pc0GNN!"[G+4J*U)ZJN`N6+K)RPjIdGQSCmkadllDjh4Elra4h([ +(e8rU(r"+lI@2Eaq-Y2reb&lIKT15(a124Iec6Q,LVd#-dMZlK6rZhIljldpYmNV +a5pDGJp&iZCd61(A`MQP5!cUFM$E-bD815GddG%M'[3NTq+@0AUNMEpA@`CU1mM9 +h9ahaEGSRa6%p&p22dR5l,Kr6lA([ZfpXAR'A9r*FeQmEV218YpeGZFHh%3VCAPq +dSFJEl9!k1(5Ed-%4prijEeA&"UrN(hRmhX'8rkrlc[VZ1MCKLc#@TGZ1bGDipr# +CpqVZH&GUH0ZkBV#a!9H[q0Mh`%QTR6EDVQ`dM'T(h5)Fp`jUHPI64PI44YFS'rh +FYY%ce+&99i31VA([dYjr8'QMHYTSQm9'cpJf+ZR@BES8prl+0hX$Ej4)lL'5Rf@ +5dcEpb[5%EJ1Q*q,HI6h29h!#%G(ECD+MJRrCHX@3!!"Y'"'&q"(G,R5-a,dkh9r +HSLf[SLf[S5ecThBLIrXFI&#A'YdbG+Q*HcmkIXFl['e+J,L5!'Fi!BVB%%1(XQf +0ELikD1,HqfkZLDie!FlB%Z"4h94-IK3NQ[h2VrjGZ6*Y"4&j-j'$kkG)pPj8XN& +5f*@N'09Y3FI4Z2I6Iq[lQ,DrLVE[6)TeR"50JK-MBCpcQMU0khDJdhMFqr*VbDI +@NK`0f,DGbBZ+4+9alk,1*`p3-Mc"bI",14RLP'#j0'Pah&YNIYfmrPh*IZNh10j +H[T+2Malmqc3&K&FU`bf,He2Rcce(j"iLFMF6Z6qLC)@MYp4HP1[cXK0!h2I6"Cm +AEr+"c(BLXe8KmdSLh%SQ()EF([IHeH6iGb,[%dcHAmVNP3(@`dQ"DE[LhP#20H2 +[ldSVkBSVj5X556X)91h+J$[LhJdIh1XP8Ji4+CZ9cDcM*'-R,fPPd8Qkj+DillG +rrpV8M6k3!0"1*,35#6rLC+,Yf)[1dY30FGp6[rZ[HeQK1B'-+`NS9bU%h",h6[P +Hqef6#8Q)``)9B'Tqh,[i1cmi`aXL3Uj8#,P2$Ki@K&`ApadkCler,B4X8!+G[2' +TF@rh2rfdirq#N!$6iYkb[hkhP"13!+lBB%YU*b'G#9-8p`CZKGBc)I1'3"`QT%` +FMd+FZ%,'ZA(IpqX'pM!CkqdJ$T2a+h*3I`06hr,+bDaEmLdA)Ee@4RSrr6if!GI +&rq',aQR+ZVMhc$m[mP)5lkBNEP#)pfZTi3qqU*qQ!3!,rrpI4$R`FM(A'$FFGKd +Q`V9('elh46YS'K*LkGfMGL,'5LC'q@rZRJ9bR*%mr`,bdL3%M%rHfGE$`DHqPDr +p8k9!q,d[fNj60X@pqarirlU*@,Z*@!ffB,%5&rI30""Ud4rf'jP3I+@DGN1[UjF +)&BqZI0ejF3$`1rmb0dJ%@%P)rcG1T'mM%T)`m[qqr4jGZj@[r9-&dIc"5D5YFHq +f$ajC3Q#cQm#Q`BRHIqrF2%"Vbemeaj`NLXB0"ed(kGUI5b[raAPY"(RrhVpe%2* +B5D$r'b9jj@[,*0J3pklIN[mY3Kj-*-p2Mda+f,PalleIqZEG&0af8h"VF"H9YX4 +&S1bDN9I+&kGN@cNTf@3L!6LRIHA8E8,-+`R8Iq-'GGmaj9)J`Z+(SMe%TKBQdrd +f32HG9)L!41QVdrf4NUk0NNj[L5kLpY-)b+p6YILiEpE##cpq!!(ZdKVD`+S*k') +PTYTTk[DiVqc9QGmLC0&!*0[Y4KDqXfk#h2l,-e1)C#e-X[YYL-+AUj!!!dRdVrC +ee`K0Y"'Dd&ZLL@J$$[A6SEZJH[MVi[rMld9)m$@8i+[FD-*haJh+ah,rr8%LA!- +4E[GD#)F!GQ[`lI5I5$JN9&V0[6XQ%mk*(SJF-Z%@ahhI9IZX6,Lm0B3H9VR4Jid +F!1RXj*S2+*!!04"Uf+fJ"NZ#)+!pRr(fD3SF,4`ilTH43jbZE`[iEpaBrKL$d%J +EVVm59jY&'r"EE!!J9(I(RApJ8K$"iJV"6[,e36#2%karHIE[2f*58&,kPD3mmk@ +EAad8rRX'4I+13@'(S&Nkb8%M15+#Ub$b$fhhcJ(V9YZ(c%(48ekrF,4F@PANIFV +hU0$ffIXJV'kS&jG4I`6LYFS1E-b%[E6UQZp1lpdI(ETrbVV[['[8-m1A2SUNeE[ +fAPVeU0m`*aA+2(hZp$3[$jc3e)Llpq6k%UGaD-1G*qIiDY5STPAXqLMK1AjkQNq +Ci2hGRQ2ASTj6Z&+M-U&F[q@NHi,"jA,aP%a-L4ad$U'e'#)BrPhaXAm-pPpD9Ei +5AEh4e6rpk26m'M((Pr"H@TA`C1&+882di@VKE2MG4bH[BASc6BGp9QF$)aYZ5RK +i'p'(epQDF%Mhb@YCaj!!YHY"&K(LI0SZLd`(X92N$+aSN9NVDPaK'q"$l,9d)9) +bl)mV@5"8"j*mlJ@U%(66[B!U34DIhYRZMfqViaUPimh*9j!!eVLc9)iLDBdlfm@ +IcJ`D2Kjh,hpE(C3M(6ihBk1,@5T3adjCPeUGTdBpj9flZZHFVI&X1R[%#aF%rf8 +ekXI5X6VraQ0l['p$rETp,i*E+`FhkI'hFS2p4EN(ljmqN!$5f%@`2qVImG%Fhm( +lT`kFRGmUSRlA3F0"ARK2@5J2Bc!X6+1&5%IdmGGcHB![B-&bJ$p0'Z"cC8(ZrQZ +jHlbQSmlrqf2D`rE$P)Q,54dlpdBlbVX)kEdVaI%CT`r[`$e*Yc1IA9+f((NC,Kf +qk)EAepeHBX%@Qc4"@Qmj39H2#U[%c'!cG3#LHM"'TYIQU4F1"A5PYANIcIU[[a* +$Mm#VV"1Q%dTr-kal9UKi,4%K[,iQ2(L9#6pH5d8(AQNLMTG1Y)q`!lAH'%RXKa1 +"h@&PCFpE,Dj@#[c*DVr*'YX'KLJE[%U0J''"K5e`CmaA,K)Y!GZU9@(4k"Da'81 +ZdNK9'a9@(p4pqLBr&+9R6D3H#HLlf!Mb4E$iiF#J'8S*U2f6A'8GUXL,F*m)b8! +$*NDDh5`DS5DU%mfmU!SB`&-Qk0Je6c`'jHrSA"(#35%kC*J'(`9l&1k`GRBN5iX +j6,@cPS#*2$m$%63-SZ%*0#4GmJ+-!m&E$P9'%B'lC1bFqm"!GP"m%%faFqN5GYP +T'Xmk9*+&c5rTALV"a8'ha1f#P1UbRj3GcP1b`hP'hrfc[XDUN5IkCLeKGe"M$Bl +SdUAG5YKVK@l@NZYY@P`"!41[JrI2@V+QLY9TaML6VAYU%l0"r3ECYAL4SE!iUr[ +lp)UiY+iXKBKq9j1iU"Kc,!HEp&6D)X0`@YPJ1E2a"Mq$)SUV#BRj11*kTaC4UME +%M##aCUliEf&V[Vh6kH5"!CEJaq,)`3rieB4V3DA3VDNY2Q8Sb[,eSl*pFBQKk"Z +)$Vk+5iV"A$CjLFJ4+2V0$aCLBMf8qJGSN!!Cq(KU%%SSA1mcZQiF),-94'8QlV, +"FP4a6U41-++8&6(GqcL"$2AX5JUc@1dJFRR#d)4Y`A9D*JdcHEHbBB(ZlmZ,rDa +ZVRhM1LfbF6Q`-YmSB#*friJ,-#@C3dMQHjRNK!#j5T+!ZjLqqb4Br9fXH"[m6*l +'bS5ALa)R8NTJ6&[XC15he9EmA#Ber-!,+lQkGB3F@GbZkkHK6[f3!"Y0%IA9J!X +6[UiS9FIN,M$"1X*49(@TleZ4YKJXfq'daEaN+&!ACZImGUT-VU#DbDTC,6HjKiQ +e3P&MCq+%f(Akm[&dC6U8Ck%8Z6'!Q$'(C))lL("Zd`Jc!GqlCUKIbDS"0Qb5Cr* +"b@%eHGMd`2FbhB1S1jA&F9EY--J3XaN!`e@0UA[Pdlh1kmV$I8e,6QNTH9[U3Mi +DlU@0!-6NT+N4Q%*bEr8G9SR%TRjlK,Ph2VQZ1AKT$3+#qQSp'mbS)f+S-M'`d') +MIYL#q(BR8BeXArcE*URBmT0)1QCfNh4TR59*(dZc'15QXVMYK8MU"L8f1[2E&RR +6SPiQ5K1E1PEP,QaXqEIR#+@f"6TT-%a'GDQ&`6K-P9Z5aQ(EPQUj,FF%)a-@4KZ +N58BE2$#UJB!Hd$`MZlN1'91+@LD*!Dm"10['--@jb)CpIrXDXCJYM2l##0+iID2 +QX*6mS"0Q-XkaBV&T221cfq@XIZZHQHT+$5!Sp58b4p5-`i8J9R!9XeK"XL3lJ'r +h'If1PTH,Q+P9!r@P`m0+P6D"DNq4&jik@l40FdieMYNla+UI0(f$jI5NSq1%i+@ +-`p9#9hjPS$)S$3#S$q,kj4`0R8DdrU8md9#CGi@09HXUhkD'DfJic9(2ha%pbp% +1+k*l-2N(P4rcj!CGj8eU5+"K)8IMYa'GcG(f6a&p(j1E+fIbj0@kbKR8X!!0Rh) +dq6bLa4c9Mb*D4CGi8lR%Dp4J3--mMMCmK1KFMYUR)eT%NkFTNpqcV()J1GRNUV& +Cba8#(@[H!L`),9FmAh-aa#k&Yqke9'K'5-K0EJH#0m#*UVBbP9fjU048fpdRUqY +GK9@RM&N`K*%bjGiD52QjJ03T"D41Gm98&E[59h899j+U,Ve8@$QpkVbVXNS,099 +YCGa3@08,YFib(SS$`mSHNi$6Er`l8fDI((kY[lEU&"Be["KJFbM6*aK-JE0X9$' +QR&"8H**,FN5Yb+#[HFZEmV)4jQL030BdqT!!3,EXNB03"De*V2i2A`)Lk&ZRSf# +F`kAZG%#rFimicGM"'0Uj"blprY5*b)R*TL38BEpaVFUUCPC6V8e*a84X$r-PSD4 +bA"EPJJAMV(dmM'[3(mG2k*+)lSpk*9AVZ`#$$j+DaC'NT*lLL&e55cMLN!$8Fab +a5ZTaMS3P'!a&T,A[Td,+p0UpM+J+jqAaB'Z3!*L2PSKmlaCIk$5,+G(ADm3MhKU +K2CCcKKh+5cl5RV@IT5jhbXiN!QCf`M[FPel&K#93iBXRD[bK5)dr$JI@[FC'l@P +jf$TNacBF#e%&["V0J(MU'(l1eN#Bccr,4M3jkrEkie*laKNi9Njrb1822G6MMm1 +pFTRc))"#N4X&%5S[%1I)!2mj11+KQ6kb64c9mi3V"F*B9F5*d95,cMRL"KF68%6 +VM*%8PRJl64'eQ5FM`JTqkBUjULL6+rIV1#Tjh#L,A946XL&aZp'"b3D)NFr#B)3 +1L2a$[X)EZB(iJXTCHkThITf+-MBL3ZTFUQTe9q@XMj9TA-%Ik19(q)"5P*@`YC9 +3l+jV)EFI"eh4j4j%9RkcD4*-FZ@Ic%`R-eCq90q5"l3fkC@#JDG)2("QqN362%i +aC86!PH'8jCECU!S*j$Qk&TP!-(K`h9d",H)dab+a5CH*AFP)bBblc&6)jk"k*9G +9i`%5F'dHid,8,')KEGq,Zk+3!0JcfD64Q&aT--NZ(V%k8f(9e)!$!AXU(p0iqL9 +ceA[(dl%m$8'SY[KEU*V*)Plli#1QbJTV`!TR%C!!%KhHN`SVV0NhiD!9dRMkmF! +#K4!NB!V"MP6#h[dEUF[ZqkcmHSc02I8V!4IE+8G([`B,k$T%hI4d3BLPU@%j)d2 +(pp*9c*aKHFiA'q8X!P9"4L8$RS"%e-2P[KfLF'6bNLZ!DdlVIK[SF"SZl`L`%cS +1S-*5hS"$hN"3G*RCa5&e`LR13r@1L`C5%%IeF"$VT'Y`*4)BM4&kpm"XfUUL`GN +0&@&N"f[V-raS"rIQcjPU+aS#iilDUQeFc"PmBm+&*5)Y1diX8B6Uj4#SZDT2BG@ +fl[1SR+QhIClJKd8df3LBYXA4K8Xh8NDNd8CkKfcqRVI)h9b2@,MDYjPUUkB(D!! +d6XIflGNhMFe14#S[d$"*E%@VC#Q6#)afHT!!`d$kB5*`NJhlE,mY'rKCpSYqd6d +cFB)hd1e)D@%H)J3h6KL*)%G1,%1!'M)824T"pCXj#hd,[A$ahX[r9qc02lh6Kmc +Q$(B6DbKQNed3%,6Z6qk14`Fi$1qLZaAG[3Yp%Dh'LJ03K2!"NiF$8e',)@HqK1U +!9G2`LPC0[3,cRa9@[#)9$USik1$YBmZS,"0j!!(%l`*K1$N3fCDG8fHNE8)XCDI +,lK-+#HGF19&K4kE'Cl%i9A'1j`HiI0)r[[dfNQXQ*TAM*`q!)K#TCJ&3Y(G[DkU +YX&YfPRTJ5,jBkS04[Um3B-'e#PFDJ*!!q3QZjD,"P!-`8"!66[@2,rX&2ZSaT!G +$HTSiih8m1qH4kFS34JbKaa#Rf#hArDJ"S(A1fJ83!&[*T6pXFqZh&D0TGT[6#5& +FC)kIaE1"FL!VL`"-XJ"%m!!-![M(q6AV@CibSGTN[6TJQUF1"(US-N5F'!aaBM# +NX'"9X[BYr,JPKHh@b)mFNE2Gb"JdrdHTQKQ)*l33R1G14+bb16SmQU1bSZ9f(Dj +9Jb$e(&IRN4XZeHClVjJV@Sc0cUAM2Pj`2VDNb@-a41IY!L#MmDrp#cYd-QN'M@e +GX9%%J4Yi,-TP+411(b'`H!T%(!!-0diB3NQV$R1&I%6,UT[K(KrAEDp&"pff%48 +L,@HPmD#E(m"pF-)&1LdFY@3$E$*aB4l-k!)lKi[5'pNj$ed'-[E&r!k2X8E6ei6 +!1fX*LKip4fbCFJDNBjb48-M[1ClZ($jY"lXP1JheTq5+%808%E0P8J((VNhN1Jm +A-kjS'Rl4K"Cj!N"T,KPJ'T0G5)H#-(&A@j&JJ@VjI+lUL5Ui-,l#9H3j8l3QLpf +Br@P8+54#%ikb!6,,!SNcD%iM&%qB+a,1M'*XiP"k'JT'XhHIKGQ"M5cBaUM5-N! +HV##Z0SJXc#mZPB0)%8dAQ3Rp-SQN%`Cbc+'"USN33U6K#R#60Y4c*[2jU6`XXVk +GcS%4-%0)4SM56dH93I(i)DV'@[f5ZEMhbYA3pBVcH"NVcMATA3&UZUpIb)B&j)M +RT")jTM48)r+&)KLkDZ+LcF-9b$flJQCH3K$Y$-5[A2@mAA'1`3)1d!d)cLQBjh+ +K!1C0fkRb*kkdI#1U1Y3@QqCI$48%DQKkbZQHV)$'D8ccJAL,Z#ZF&q-bQ$4em'E +CqAIe!8T`SEE4!(KdQ8`31QTYC'L9bE#d4bD$HNiQJkTP-UMC6!B''@Tm4Yk`qKH +&!+H95+l5F!k2"#04"dpIqCkE'+%0U&KM5Bc,&HF!D[1S@V2HQ94`Cje!S0p%NCA +ZX%M%Y4!+"Zeq)U%FQbF5#XHkL"3L0%U"Y%@jC1AbfCbPCP+8hFKLpNBC"i&&bda +#GZH&QIp2B4bK'"9NTV&lV0-aPNa$0)*KXC!!X`018bSKS",GA##[#lMiSiJm'@L +%XfiG9A&j*a"&iI0F)*TX"(DF'fJ*$DITS!iFIQX(e*(mHXFBPaF4Y#lLTa%*GGl +%jV-N4!FL"L6H22bmKZZcJhX*[CJjC-8aRBTCXMDkh&(PFPR1bp9H9GYdQr"UdHh +J,(U0q$SMF-pFQ+2M"hTPjb6B1-dQZ4T()Sb2(CRT[('RmbdG-"BiLQeN"ZTiQl( +%+ceT1fVldRD#PA3[)j+RVU)SM1!6Jcce2J[L%%+Fa2j%VKi6D-03l6#Sd1`%6'c +M88fABQDK(QcK#$RQ4aL&X,Q6Qi0`(KHbJ2qRX#cJac,"+)i%6*Kq&%RN)LCT$Bl +j-LU$)Y1SLj!!@B,pZU2m!CHr!A,qMbJ'#M+aYH2B@Nd`-X0)dbr)#"%XTYTeAj6 +G-V0cl)mLf1h03K#l+h1L@G3Z#DKi#&A9@Q'SXK1SQE-'8FP$KGqb3")#5VMB$!' +NX0MX+Ua)Z@U,!d&ldFQBR5D""i$JqZK,KbY,R!ZS0R3BL`QCIDDq+JZ6ii)V)$Q +0LL(4NSKN-S2Ge)2#"QB%`'T"CI`fVY*XB`GfHG#FP!fB3*JM3bQ'c(jQ+09@R(F +@#L$'%3BISfRbB$bP+`+fBS(k$rpcJe(!61+a*d!"2qL9Q9a8jERM`*LYbM1bfIM +Ib$m[(DT))9MhmX1YJ%"@)G[Sq&&PaAR0)5R*%H-36A&q-PZLa1+"-"ZG&3EC-$# +5S(Q%RcM5pA-rR*'lZ'S6&eQG@bJDldFPLTBL!U!K9![j%1kR'lAlE01UY(e8310 +4)ea!%dY`BhhRE2-0[kB$kPNaK-$a*SUj@rkriF%[0'%(J'J(Q2k0X+$8k&c8qRL +jEeP5i1&M0-b-4RZIjlIdf+iDARL`N4i)k,a8$9e+MmHEP"2M(X'R8`SLk,XV`#d +e1&A-,!BdXN[aT!)iCFlMM%H#(CM"i#e`XP*KLU8VVB$0Ak)b#k*b%G%"%d"T"6! +G-B+%+P13!#d-T%5!+"K0,$8iNGc5VCB)EZPL*iU%%*!!C05fG&(-pR#[TEpNY"G +$PDLP[a`4&P1EPF``)$d3'P(reVId9BK@3djNYA5Kma#q9P-lQ4#2%L0@(p$,D"c +&[CC34MY2!TQ#5+E'XDk$f#cFEf9%IAJLSQE8[XK)6#lKYal%CLBME41Z'SM6YH0 +8RI3G,,dDi-N,Ai4%$eY84H#Kir,3RK`&HF%XcY)b4Pj,bpD'[+BG9j!!9jB*%`2 +CVUUd)D$30NCHD8*"AKFPG'IN*@mXEBJADM26*%CJ5mYN"*D@U$fFTX%8)5-`G,R +!,1)rPbYALJ!8(Vk"`RNbUb)P5-arNX'!+UUR'He14J`qPdeJ`Y`lJ3P6m!*-Q!+ +C#G2SFE0KFKEb4TP)LhI+9`TpZ(CQ6-k#r$-rQ4Q6Xe"QaNaQJ+3)`*iA%bBAd'! +jm8p-KiM8E168c+B&hFbB4LFcTM(M%,C96QDEFeUi5J-8I,SJ3)a0`(am")'*!a3 +V!b!DE,DI8B`)&CMf"GJmE0`TkV,5b`D#!%cGY&IbJ-`QJ1(6'f9#U"mcJ+)DD5Q +$%icBEkSGAQU3!![PP&)S,l!9bUdhhB9bDkjF++m9M*(FJEJBKL'2Z5m-`#m'GNY +`IRT8[U,BLZSmd9GkPRj5HhMTT`b'#+$&360AI@#'aY*2)+EP3@PG@4%*M(1"$r* +CE`K8Zcf%LJ2KmBlRHZ'BRlbPcqaEd&Zia!MQeB*$K8[NUBrAZp#4`C10JeA8"0T +`e!#1bXD%'J`rJ%N(N!"*[TjaD!,i9F[J*pA1qKJQqDSjfH6N`Z0h5Yd*'Gi13%% +&X0$`a!4G2XmL35-N"SUP9JX(%ca5SP9Klc&$LXd*LXe)N!!4r&c#TaB4k35V))m +mKdUI!)NLCY[JFBe2$,CTZNCBp98P`8$E@rGAh%"#cm#'EJaqjQ4Ub8T2IZLLA6q +LNV$TXjKH,Nm(k1kKSDj(@#92V&ifm-D9rZeqd3K&UemmJ3ipLMUlYS+#8rHrmi- +piHk`3VGijNY4(cHi!Yhr,U01'K)X1P3#SkSph68hZVK)Lk$5C`a9RlQKqa8f4`q +KDV'LUS'j+fE5b"F8@jKC"B8Ec2E&,L,"2kdY(*c1fH6"cI5BXM*Pm1hG6lS+haM +!6lB"NF%J*QZ0@8%21X,%HFX`+R6TC@HH`AqQKkL@+ZC[PR9ADlVJQU"R8e98Z4Q +0%1d,P'@l['@R52pi'EBecQ55k$'4'3M38#lN"L+XmND90EjiUda@0-$NZMX*p(X +j#4aXH-K@08M*)#F9TSR$`V9#bG5#*@He-326L0NklYRZC*reHrM"[)',LQVGBk& +BVhh$+#[,@4N14Uj&Kq2TXFf@V""N2QXVqK%`EL$V8&PKaL1VNC6GAdHJ-I0QZUf +)hT!!YiMU5NPNhr98L3i-VmH(,!EU!-0Ml#Q!XeL)aj-Z6%6%qkpjBme4Jr53!*J +*XfZc!GlAAS2a#jlS'K5IF#4UZ&!J&SVhmCSYCX)!dqcAd&4BB"S8#fmpLSS6#b9 +8B0BYJr$D&JhYm!k-KpQJaUqPMKfq!A0B03j&3ml&J80BJ+U&&5ALelILdA'DLQ- +H2LLQXr*P)!,,9!X(mT,8!BrarU5ZDbdEQ2fri`Ci)KMJb3F,a-fe,&kcf#J[99B +BN!$FKPY!16a0UUd`2$JSEre04+VpH,$jE0VLrcE%!+!DkVSQ96aV"PYJRYYm&bX +P1B$b8'2MDYH("H*M&169m[69RGaJMm"iHc@,Ve#p)iVXChU!MGPjZ*QRZ`*0ikH +6ZKf$rm'9NH%kU1+a[J-3UJVAC3mH'HhLBN5HbLidmf'3!1$$(L-4+b-LULFh$pr +,(Cf,f6Nlac2"LV-`)@Dl-LB-b&FGBXHJ*!m3"kSL`TM&aj1kX(S269aX3fKVP"R +jNcUC,)%&'TlC0P8r8$%HaJbQT#NLKQ10K!af!fL3!$A$4`mUj4+bJk-0AK$RAFi +(lRB*bbBZBT!!"$QK5h#IK*QC%$1"6eQJQN)Cd6Z0h"%UNZL4!1L1V4U!M2h(+@Z +UA(SG4#iq))S%2NA4#bmQ&Y5-k`,$8%TrVcJ,,hha+EaFa59i29Km$N9&9V&9GST +55,YCAR#k4e(JJBY8IS'BMN1RJPee5R'!+RcMA,(e*EK&&CpM0Ebc`@KkiH-Q1er +4dRIAFSJmfIB!!cBD"B,&RBjj8+(@9Jc!C&15cErDQ0!`P()l*Rp#X6!JN`'(Mp* +e$KDAm&%[&BLTaDH#$A`F(c8Q&Q!Td2K`RjJU'BKJl*DiT2KaHB[b9@c%M&1MeFf +#aY"rXpKZVHfBMj9YI"IEI3MZDkmkJAF`Gf*#)@KPB'"+$2FfR82EKP1'IbP2IFJ +j0*%ZJX"EG%QIlqhR`[3Kfd(9N`r#!#XYVKUfAG9NF9@Va98Pja$X#YQkPZ[+3pU +'8BE&&F1@9ab0L'Z&MiljJ@CZh[#B$K9'P1cq)XlZ+jX`@@c#5JjiL`Cc,3ca,C& +G%#J6e8m)eq'+L!(m910(HKL#[c$3kaT3-9b*!8Sh$89!L3YTH6SMD2c-a-rl$l1 +40a1p2XDV38`&ZbPK,p6ThKL)C3)BM9#(e4CICh8B9f*,Zd05E5SaldlI5qBhXYd +U08`p$h9DEI%"9UGGkYlL(FL,K0MBh"EI5kih"QKJ,9La%-cHb(`*,b3$"$@!i6I +b35D!B3N(J,KCIBK"NJ-r4,pL&MF!b$e%mS[dm(9-*rA&)rE#GP&m[0!Il'#9S4" +k2%bI4#!mLVhi%,VG-'Uqr5lGUlQ,M1cNC*C4Lia@C04%4)q)`BIc2Km9QqQ96k5 +pNi1%M+Cq-12&D%T"4RU`8ip6--)JX9'!bJm*'!m6HYM%`+2qVIMF-i68#%Q3!)" +&$fh#UcX,9c3E'HR#J%Ah#39%"cQ,B4p'YUA91EK6G(0HQ%8i'+`l!m#b$qka9DN +ZXp`Ze0)3k3LiRQ29CF9cM2*aJ+-l-K%a1pPHR%%D*rEEma[`N`pfS`%1RXpH+D` +FUJcakbYTB$*1"pYX%cX1Z3UlXr#cf9ACABfIHbeCE`%SiIr#4Y4V[Xi[Z"+(hNk +"a@F[&2l+%MCl+aY$UI0)(4pdF[9hJ-Il1ir"k*Ai@@Re0McZTlPZR$rB8!Xb%,j +)4ml*@k')ae$Br3l8Q@5@eE2md2hGlf6ZbGa$IrT!cLjKdJkApX03e+jjP!%eITL +,ac'9%,Xm%'J0STTE3+m"#a@2GYKVK,MI4'DU0mc06'GhT[lf*M,lk%F@qCpH)`H +R((m9XrK-*f@4I`J%qFDl2HV,lm*J1Kl2$9-`-(kK&X&jQ-h2c'-(UTq9&LEPbaY +$G4jPQ!+kH!FZAPZ*UhT'2c`Q6qEK#j-4T30[X()G1SbL3`pYY,B5!1&*ITL,5dQ +QBp`"`Pf4Fq[BFPPrEIGQ0%p6-YfId+B6Y1P1E2UBXZN1fR3(XC!!F)NlhV0YZd1 +jeRC6,T2bPK($peJ-$hE)2m9Sq0j*JlqBS(6K1klbi*AVL+6b&Sj`4TNb35*YSd` +@MeEHVXF%F,m-`$d(`#Z"-QiB)(i+JKPBQSE#CihiJ9R%Cc2a8`+$1X['@!#"HpQ +IPr0%%pL0JA'!Rk(A$'4MJ&Zm,eCMUB!fmZ-%p4281fIG#P,mk3#9cqp!X@mS0PN +B#5YP!`r14mm$JCdI*YFL&8G9T!a&q9KLCM6!e8iN!(L$#)5)IPE+eF`6qk"3+&2 +B8$'TpSeF&1HPeFGV#pr)eC90G%NL"h8B8JjBSH"G$j8"'(#r@ac8FHCH6*rNh*6 +$PAh"Z#Kpm"SE"H)$EX9Tf0)*`jDb%BEP1dDGV,!N6fF'@')I4rNKm#q`'4a`Fbp +-UL'5%Rp%Xl6r`5P`+(0%pm+F)"YQ,aXHJJ'Dp6"*#kE*leJ"US-QLi($6PPi"-, +[a#$1B502Amr1H4k2LH#+#'j$&VJS'"CI5B1TTF+[3#5X(!)`i0&%D@H*X@NRTbX +l6p0@9[)MP4aZ9e8PB46ep3*+(,kQdHcLeifeNPJ[%b0fZBRq2)APQjeN"E-kpL' +fK-I"PVPCPQrN$XmM-,F#c%r'r*,(Q#6LH2,hTS4VPV"rMare&BCCcKVm`4[5)hd +L!6338SE`ra%['%EDb#4BIJ!-A[Y%!T!!maSFG1iC)1G-MqbXDq'Fk8GeMbMF8C, +G$ecTkpl*6TMGfk!+FR6IaFJ%epmq"U)bU0`c25[G`S'!a!TRm&8HRJ9Kmjj2m'G +JR,"ma"SE!DEMEFl#Nbj`-@ALKpHB-SE,aZU%!kBqmHGi)#-Y2FQE6m#JV#4U(Z2 +(R)@*JETGZ4!8S*D2B80K&)ke%(KBLDM0LNX*K-1r`m@YLBGS)BE)N!#01'cqAH@ +18!p0GhG)QmB&d`Lamj[kK1`i34fj%Vb`)`0m+ZJ!5'[PaahD"1Qbff%CEIbIFaP +Y+#+e&NEDTRF9cRT@BFJNPD$2TT[iMdf`Fb!H@`f6j+9-9YG#1FK9R,pPK&[(H9f +TXF3*E[fVhB#'S*cXla-D"0GV-X!Y1qm'1$6QkGDMZCa"G'a3Q-F!TXjJcFUTla3 +pZ0$''&G34q'(R&@PJ+eIHm#Q)$N%&9Xc"mZ[[YEI)bi#K66,%bV12lJ35aV,bLK +#!-5DZr0IBN$EJJppp`S8kKX2SRKKGV-c#9mml58)5LqHf13KJiP*FU%E(rl2kQS +bf-9rFXCimXR"YV%ZMFF59"8MSc"C59fB"HVRD6%b1U5VBK#ID$$8fFPd,CB-mN- +erFlXUB9"p6IP3)$%QiZISZ!iJ'%DSP-j1BhPT1#GUaL2[$(iVe#9'1dSNAUdZLf +a8rDU,alXbp"YL!f3!'[I+%er%e1r4e-MmS)ba"r3m!Se1#!-r!(QaDm&3c!9jMI +U%cJHMb!U%Rc"0[P36"rPk9$2j@R'P`j1$*!!l&l-K!X@r1,RF%Gi4$2H88[ND%P +NJ%4@@k1H'P@CS*C"VFN$CqBNh"$jmBeK@`FZrVL,i#j'jE',#V(bb43j'h#NbMS +)BU0Xb!i4$9I5334+H&BJT%PGXK2L&Rbm6fLkMIl8(ARTHTL9Fd25$qVU9rVT6cl +*4a+Qf23XV[(C-'IpYl"l'2fT,!Sia(Uj16Cmr4*HraRNDN&EfHL5r%HCD-BEV$4 +0NUqfG"d$"$Z)bN$&!5iB'V``aJmfJ#&Y,TJJA-jQC[2-KhMSAe6rkM2qE(,3iT0 +83@1AlIJB*F[LT[&Dr*1EiJjU'T!!LE$d("ej9*l)K'"NL@4db-aCeimeicriMCa +)-TQ@4UL,A5EHdKEqT-2Vq''`3!EjM#,6XU51Glm2pafqFT`QA*!!"bME,RFYfb& +IS@b$[2QbI)f(e9#@IdU*daL8E2JA5M*#iNrId0LFT'@c[dfb8DaQfIRjDE2'&J5 +$BS*j-+VQ'"e`+RQ8rcIY9Y&ebaq''M`bi4'L-bpB2'L6(Q!!-)dc!S!Dpf1MLje +EjBThGCk"[-`1C#"lkhYKpJ#Q-fFQC+0r3*AXS0`@l"hS3-QLIE#S,jmHJY#,4ea +0B+Z6Sh"bJJ(`AVI#a5fXe8ZZ$-jJbNB+aCYMF`PXm3I)-!XG+V2&E'U*b6`BP2m +m&c`dHV'ZP2mm'2lMB1#qYcJIaUhK)&U'acI$e$9AG(`Q[ILKa!PXm$`"3bNC8iT +biJ`@`fPfR0%A!1-(a6AiE&3q9p'RK-F4&iJf+40SAZ)Q9i!EBL&AaS+HkY#SK`P +9I)@(MmdJ)i++Q,"d%cD56Hl9A`a`%Yq%LfA)H"iUhNeFR3Q!"'1(5cFamdQpJU4 +YidpZcXljVh`i(i+953CkYb&iEm82c+ZPEH)(jH1MP)-mP(DECTjRi('"d8HI6L5 ++2aC$5#B4Df-A5(,f@YEpc`kiqm(a4J5f+G0@%$P@"(90c1Ei&L-h(M`BiZ*A*K9 +2`-rc6P3*TiARhFDI@J9-Z#9ap'+)cRDaDqCcr2#!d%RqmeXL(RV)!cq3!#SZ6V) +GdifSA$mK#+!iS)T4"H*p%0L4e8G+P*Hc"[VCUA`Q*GN3+@-i3I#Sj18,q)rRQ9L +SN!$49(rhri"!F"hCC#M-qGAN'(b1XK%rGdiFc%4'QMk&a6m!!$'*384$8J-!@#) +293eQ4K%3)H2ZBIpY[jDUp1E[ZVkjRZEaZDkVHUUfHN(c4(C50`EXbJ+pELDcXmL +IapEbN!#1kjZjK4$#&HhRPae`bSb)6Smi&`i6Dj,a21YN(VF3AXr#HS4`HJ-MK19 +CKp'!J5EG*1pm-alVlprIrrGe(5#rZb6[*5mr!"9hAL6c)$)L%L(a!"%L"PpjA5C +M-Ic)[QB"T*JF`#BKL'Dc"i'6c+,ccC`$Xa5a9),[cI[c[JNMq2[1JSchF2@f@SB +mSY%MV8-I'AUlS891h!iA+Q+ahrf#&3q#ZABef[bF%Ha[peYmAbq54K$KDeJaN!! +kh8!@KB&iB5#&-`LN#hcT#5Ca[TcDLS#`Y,p&PZ+)j*JiA%EHX6lRH+0r`$m!X2e +KIa`rPp@YcA%SLmTS8&TmBc$4bZ+r"R`@jJ1aC!5Xi(+BF1PN%LCX`R6h`f`39H0 +PhZ`TrQYEK)YPD*95!c)i2A(84bha-5iqSKVa4cmbid!D,El@SbjPd5mPY`)JVK1 +A3b!U,dV90%+rlm`TajGE(0dTKMf$XaI9A9I%!pV[1c2+!jhk!pTdb9'Ak4'AmA% +bSXU6+QLIY-LH$4fqCRA#d'`YXKR"G$0!j"""ah8)XHTm'@2q8C[$Eb5,YDNP'I8 +rl'P@DkRiSlDPZlB"1@iCYm&`Uia3IaF!JM![3a$RSq8K%XK$aXE"ELqJaSb!'PQ +XU%"r"jEDXcd-4JarbJErSF96BJ49!LP6eX'PTBXCK56`8S4aGS4`9ZIj`[+YhC0 +"6PdJr2iXGhHrj3QRX4a+X0@C9hZ-C&Xl312PbL-AP8HL@"VBHhmdf0pPK"`@`,V +RESI8RBpqT'S&lIRlNdPPJ9mX1,[,5!TBR`bdKJf8`mK#6QS`3lZY[E(GGi90&JP +%V5Lbki[Z5)0P`@INT0PfJSST*qeY*`Vji4`(%pR)T-3dPCJQaA4bZ3Y!`Q3!PqD +``mUJb4J-pXr[NkUlCH3V#"*Gc-M`LY26SG6T@-bA0+L`!5fH3#UV"`cT`mE'hDb +DDV`jDGejSV$NAEl6BL`4X-E`PVE6!ZLNlU+mV!&5X[,&2fY48dX[aHVm@CF%qHP +HeVe3kpDDZPPB50eShML++'b)EZE&*P,1Dc)-!`SiZRQKQC8S"m8%pl2idN($dU1 +,#lR+p!)6"F3Ea04+dlTYX(j@LC-46-h%G%*-*k9H@1YH9!UV+SGLqLbV6bE$A54 +imFM$LZ#P[%k&j'-"qHbMSGeIc-DKlZA`2"I$kaCe'e8LkP0(3lc",*)Hp-#RiJ' +hqIXe5)53!-#fcI0@QXjYYf$6V5aH'&khNFqC(LpIKS$aQh-j'4DJi*3QCGX*hTK +rhLF+mb(9RmP*`j-d8QdG,'ie*1"#,[K*A,`2PH6LRM64T9PeKRQ+9")%p``-"f! +5S*A0"e""EjU*9J'@2,V3lh+9-LMb[5F5"9le*bTQG)E++ec-5U(bKc&4U"kp+KF +6PAD2,Vr4!U2(jDDZZ3*5'b`%Ef!UJQ,BT!Lj%Y9[a4'SIL'[BR%KrdZV[MbYiT6 +@q-T1THU,k4#eRKKJQ1F99K3S#SL5SHID$'ehjNkIRj1Q8,dlj`,M(qeZTq#(QD& +l'53FP-#RbPK##NMMlZ,[m'Kq*0V%!9MiZPGMjXQj0"II&Z6LmTrcf#p&hR[BNlN +8a8r&T5"qA1UeUbLBCcC1KNLY3&baVf(6pSa8Hipp9AeDHEAbf&H9+j4AaV'[[ZT +@AS9SDimklU3kH)ZqF!-#UAq4-DqK$9A$T,`B#V0cB3Z$b1CNkELYX@1kY+$Y[Qp +-!HLbEHdXh-Zp'kXDHcG@kHp#p@qP+CX2)$5BmL[cLa$Km%B@,LYc!Sac""i2X&V +eM+K&9ePSfQ5!b"+,-i@UhZ9Y&k6kfX&HVhY&HCdrf1Z[EP*HHipj$3Kfmi,b-N6 +XaU2-@+4AhK5*2NI"94L9CPH,Y-mm#`+L(%j#+'Gb1FL1F*+1#*m"YJ0-6"$kJBm +2BC*P9MPP@f+3!0i6PZh3DRL*#HLp%G46H)2Z%T61FK9FaV[S!2F"8k&M'&0pij2 +K56[)pEZbp96$eamA'dJi5k`!i64KdRCKHPLX&8A4RA-`f@A'2,V4LZblNX0r'bS +4jXSJK!Cm*Dd+)6%cdYm"B$$+(FU`U%LSd,3G2qD[ld&&D'mK26reYf'V%[cC+A& +G`dNfjpP"`VZd1EUH!rZPcC%2-DRk``%NY@!1N60r11#cdl&@1VE9D(G,[2#KNp8 +!8+dec[H1)m#f,mK)9UJiN@B5RFaUMRH)&!8RJ"cM[ce`@jMDIm8KA['U1!"c+Lh +@b-$BY&D5QBf6bGf&mIR8Xi)C1U+N(PjQaVVbrpj(XE'Lk1le)J3ac"rMFkT&FUk +bFL%dpe+X@Kh("j-rh!l09FE@UBYk8F`@Y"Bf'(&iFA*[I5LrAFlC`+"@4r2"@#K +IMPY9*lTJCCSBAZFLYKM,QcMFi)+f%,%P9LR5+[mArbrb2rJ[HXar3H8r$Im&m*p +q80D#&*)PZ-q`E)EceF2i3p"#MF++*&K3',6'K[`2Ka4$V[Q(3`Fej"fFfQ9$rLm +X1KQj-GbU*1RU8MKmZjbZi-N2B`[ErZ%3(VJiM'2Q)UPf+F[PY-'6[idY@%1@@#` +MLj22elHeKl$!b9fKVRH+M8CD!(&T&b1ULfr$NQkMkNa+Q!RI"X'H!$4AEM@eN!" +UdD4b'e#YUCDrKUA&kKDdLb%eH6(+DB,BZPKG43!X6)J#f[['J1L'FMZEh5-fGKl +a1+PcVD61jD,1jD21GCNkPj3A31iD`GMr'fm6ZZhrpCmhcP2iA9G$UG(rhbq9G$- +VMlaT@[#SH#64AEcLN8FipIl#hBEB*C5eY1fTVDSN9j!!bH8`M'6d$I4B6Ub'ZE- +6BH0LQD!#-DP`iQUcI!2aQ&3RH"*KaBp*9"BqNaE`F",@Y,I)MpQ")hS[*"Q#X)* +XF)+5EiEja9*%iPJq2%Q(4p@S)bjHdC*)mFGlerZ5GJ*QiRMY*39ZRN2ke$UBmL8 +b%8B`PlU8qYR$CArj[591kP)&MYRk&bl(BM+U)[(iK6`Q)AH%*h2[bZJL#R$$J-H +VT1-"2R`AB5f5qAM*6-k@FjbLrQjHKX$ZQ6i1qbU2B-UhJS$3GYjR0Z1-4%!CM,h +2C#r,kD!r[-@Jm3S8LYf)%qba$#kF)$ia@q%QZe*i8Tb8BlG1I$b!`rrJNp&U1,$ +m!H6-B2)'NQB(J8VbFDU-lJ@Tfc%CI2iqJ"QEFHmCK8Ai*bEL%f-5VTdE!Iir(-F +4A"5!22GX)bCh+K+@pV(B)ebJEHH+)U6%bcM!`T&r`*rhXrC8(Z%9-l6NY-,1-0Z +#2jYKJ6JX9q8c)5@d6Jf(SNZ,3P$,pkiRKm(e91#M91$Ab(MJk%FG6-Upe0eNT*8 +k(`!)!!hZV,hiMaUA3"jp@AY[[VMDYJ5#hMD$JaN#["KppA2%S0ihlRdAiIL`RF% +j!(PKB`BIY%8'-R)iC))1m@EYMRaaa(+`3kU'(&)ep""CSQp%[TLqNH,)N!"$kSB +F8RI-)@[dMFJEk4XTMJijT(E))E9$$P'(lB1N&5rbF,h5q"!@L@GQdF,*jYeVGp` +(M*NK`i6EbhX)4Ga4r%49!iDR`8#X3dfRmMRGG&KN0L'bLEhV2GDCTB,FdVle[[2 +HddZakQ%lILVlmiZ@e"JE-%,Upf!k*A!L[3R6+'Gh6rcCKcqV!3[Zir3A-j'aI@$ +I$R'B","P$ZTU(iaU1daj(fkfrjL6C(#[4,KE$rCK'F,Qe3DkDfc&lMGlcc8a('K +6NkPEV-"mq6-5F0m+0FF+T*G$P6h-V2@0Jeb9-3RVRH,1hRFHRqhZ&,Q$PQ!c+cE +Jk'PCZ9rCqM8%IdCahRE1paSZ[U+4ArIUhB%2KbYI91m3e!h!J+e%FH[G3)%ESUN +"T6-NKi2lPP"d'R8#"0GIEHC1J#*Z[8S*dmd0)`m'1abk[L8G"K+TH+i#!+q6Pf9 +KUZqmFmVP9hYaZGFR3iA3mrI*e+m2GZH*#Hl1'3R3i#D8`RmR1!iG!%AifHq#Y!+ +fYH2&59q5!+b6Eje'Q[Bd%N4GaRaMem)hq#8kfKJ@R8!401('Lm)ki@M2)$N-)'` +Ehek-[2UP1cJb1jb9VfiD(Xl,aL9N*!KkGrPAaKRQGjh2cQqcc(A$c2F!E$K4Q(+ +Gamf"a3SC'`9XSMBA!XrIjih0CE0b`m#XYKJF!d65J-XZ61J[rHkXp'de3LM`HR& +*d0F"GQr+E0bp#B5kK!Ne!IMP$"Vc!lKjFA5M@P%)A)NFrT*)5#"*"rI%3S!qe2% +(+1B`Jaqic!hX3(+#JBV*BXVqlSDZ"CY5`$AFrH!3a4HSS8GDBLp+kHKDKUe1beK +f8'69fh8iPTAepr,9C8AbVA[9*D2"XH"P160@A8ANe5`1fQ$%eEAi8m-"PR(qN4, +*#Rh!1hlNX$4KSLi5%-30JbjR-Y#RQlCZa'9mif)c,i&k(i$STMbc)#k'"`BI+ep +kUEV5E4Srr10pF&H'bA'3!)2`,iR1ja*"A+`FS!$$UUdjk5R`!RC&GrfTfr4Zjf9 +'#!5"&eZ&Qf49DZ3"6('+KF2NB@Z65(fLfQHVpd`'RT'6"+)Z[mj'#+aNV(S[QcD +U@5j#5F-&`-"U(kXZBf)b&FPV!)5d,ChSr!1+-p[ipml'cXIbB1h(i8)*SrEB#@D ++q$JN6,RMaR1m153%aj9!@S3e$L)J)d3iI%4'h%3m,K,TZ&+mN3M+$B5Ijcc&a4r +MTkJi54qlLTIc4pA049jG"9E`Te*@ekQ2*cj%kF0)iS0'(kB5(m,dS5,a)8)IFQ- +"0316EUNZ8BfaJ$[+)PHE-Bh30*9M"ZahBKQUlDmZFh5E-"*I%9+mC38(L2cM4Q" +,*ic1pH[l8LV+G!FAIX&djmQ8,46ZcRrB-4PNTUqYBe+LD3&8F0Y*J+6a8`e2cE+ +Dc8PIXa(Rp,D6QF-G2fCAQZe(hS!Dl5)efRaCkX`'h'[#["'2A,H*0L4P,864bXV +4Nk4Yr`fkFVN)dB93)H`b&[D8c'YZk`Z*08eX!b5fF4,E9"Slh8YLkb1ah5@a&C2 +3(#5dZb3dP86@UcS5`MU9%00!3N!V%k,**S45J&#mLP"k%N)a%d)*#D%iUCXpDS- +$HkB3k'rIF!Z1IGfH9S1+b,YabemHIbR@HrbETQakidJpLQ(HDI&hq5C5YpJCGPS +FmcIi*19DBk2$`YdH$A5d+e*dCE@8SA05hKHi%`N)$DU"fF@`Sf2&VGX[8U!6U5k +j2D&!,S!S[P,MHS!MV!$p0#Cb`U8E$MP`@f19mh`R!p$BiPKecHPcYR1@PZTDTb9 +ULGA'BVLTFeT!E[)kZH%YU9C5'I'$GIqK`$5j%*0$'#Xe#JlXF)+[BbGilhCQPa6 +&&dChBq'1NA$$*0BCp6)FjC&D))GeFPVJ#Ved+R09JH"'M2--lL3H5!P'4(BUN!" +Ga9%2!-+50m9Vj4$V`5lbmRlp)TliGr#CLXlqkl1a+P3Ia"#J+KHaR3'YPbfZ"`3 +!#B$`Y`3(TU9@6#,(h1Am5%PiKVr0iNLjG2J9c!!*#a$6j,cB-'!VrQJeHNme&Dk +UdD+(#'BE"-`iL%*6)c3a+5ASc,3a22BPbA&Y+38G&qPeN4iXa8B8f0D!-PE6i5R +mM-P-X38X60%NdX-Eeq,5fdieI(l%p3!+3'UlS&,ZFPHQ(k[(04C8j`SEYpcA'HD +#LI4MGKB**%lS!J`HF,CIM(c5c5iSFT[KmQFLDhc4rJZ1@fL3!14Fe6lp-a(i)m' +'$fMZma$!X88i9cdmmlDiq'0p-%eHc'TJ"%dMVXP94Y)cJ3FJ`-G@ZYK&If(QEDL +m%CKe-6i@k10Y2$)DDF'(C[S`Lq)CjB5DMddM`mZVEG`GBL0hpXZ(U%(23hd2q+A +"Kf9NkDQ'9mrbj@-ME1UmHFmBMXh)RP-0LcEabRY0pKMrK!H3!'V#6r,ACf910Z- +R+a(mmI%ri*[N$rJ&(N)(dcrET3mrBAR@$k2h653fQ($aMhhVc[l)'T!!EAEd'h% +RL@b[TTX*ZYQAiC[QliX(i[6a3)&[5KqKMdXPFK8qYY%$aI3!Urm4)[[EH8TXEMN +pi+-(pSL&N4E")Z#&9l#mG&1JQaVPS3m9Ck-4pdh45)TZcY)0i2jSQ-4D+TL@a[B +&1aQE+5##2KJ)8XT1,,,j6Fm!')V9c!DMH2BCmH*mfcNQ3!D!mpL"YJZiXCpUf,p +G)8BbXXq`-aaVf%%QhXm`8AVraaI!&Rq,a,ZFMm1I0KajM4d0%5kXaH)H@Zb'k5r +$KEIM`Xl#I,5G`38'MJ!1f(N5PCk8!#B%d)#(bbNCY)H1,M[9F,L8`9ldiLj5(F9 +FG65Hm,,5ZMh,m#q+M"fApKQZ,$X(e@3Y)-6Ai)#d`aeA9+5SHLXhUM,Xk$3Vi!6 +aIP2(N5B1)*5+(AATNM9$,Me!KS-d[@IPPFK9M4FBTV5!FNN8@Q+KF)(HA)6&c6R +j[B(B-MVJYci00bT5$J!CBXXm[FUQ*NJKf!(LV$M5a%R)f'SR9bRqibDU92a+T+6 +qF$ffbJr'H4,EJdIUP%HUa%H)@da-46@BZ*4FYepF(&0H01)I4GG+)6N`bPhVkE8 +Me,@8VTk#8"HiHcjpIH3"EQi2G[@RVp#R@G(4Rli*p[*CS6DHIQhN!4089%VeK)Q +FrPCY9PJ9UTbrb5I)l%j5D%P54$"AE$r%5LM015XVQYH-lfiQ0hmNZLD+M'AYXm0 +--KZlI+1MmHHk'YURScID#i%YpcQFJJ+)JjJ&RZrN)1ql+!MCkIK!JKaSep)D-jL ++Qr3%0eMMC!0BT`Uhd@#CRF[-EqmZ-PEJf0IEQGK6%*'4RHbdlV1+CQI%*,(,#P, +8j1KK%3h4`QN0MNbML*+rc[BIh+-0K00HdJDJLP0rrb@T2I+'-9pN01+5Irm'$JN +2TMHYeXbJJdLF%N!6cfK)A#RX3fbB'ABdV'290HXrk4Y'YkZLK-[M)&mQ1c,pp!` +r9*!![X,-r)r3'%&'m!0J$$rVC&$PG+2'A9abUM0CN!$qGTpeF[lB5e9cBR5#5D$ +9HSb$3,KLM*2mR'CepL,KC#rihDf2f-iJ1G4[i36pD($[Ae("2BALVJ8$fPN)l,l +23%3fhRKk`Fj*bmE6dbPkU"B22DA1)J3-([i5&ElCH2TfUE(aF$dA1GmZQ%C!19S +qGf[[Ai%8$MkHiF0Qf3fT4PP#RkBR`$cH3P1('PULm@8JY+Gm-RB*NeV2V"(BV3Z +9`EUkU)9EIhQ5839`9ZpQ3j`Np`CfTc9JHGhLl)9,CafC"%bZB$**MVE6BT-$q+L +&$k#Q0IDh!%RqVMa@4F99K`URBPmhZ#')51GAT6&Z"12Rf*%IE"l%ld44CiS!jf4 +JE$+,MM-QFj41Vf%A(fB,@9JJ!*9`1'Yf4`lPlrjN)$$H2Ii6&$Q6Hp1"*)e`h5* +hXNUp@4""J+eJNbIqic+Jp0U#k,E*JTi%2N'Ar"SE&l0SSQ'(c1RXfUQ'hGFTE5j +p+M1jB,jlM(RZf&kcm4bFKCMmY),X!*,Z[m!92A+5YJpS'edqTaU'[GI5f,(!"#V +Afb*c#0TVHdqUZM09d[%'Ja`)f9Ib9R`&e8`FD6lIbFFU&di0ARLfR"Jfh9PJ$j[ +V'!S6"CQlM),%JaP$&#DRjQqK+2I3CkI"$NdS6QT`c1abH+P%Xc1CKFT[CT@IlKS +%80+V&bme"bLc5JDqYbM*GM6HZFF1)$FZ8#-YJ[TJC0Ji*p3+qHbmJ'$Kl"4La6@ ++"[%q*cNaf8NJZa#bl,SB9C4T)DH,T5&1c8"-GTmlkPK8)91)8r@fF60KT4(&(M3 +RCH9iRpe`6M9XfDQ3!2A(ZF-FZB##3#)KNeHG9$aQ@hIMVGY#MIp#(HH22fa5YF8 +IrUBEQka5#Vf9#Xe-#$b9%%ila)fAMLEa5'1,6%h,kKe$!T3k4Bd8CZiY-M-mQQf +I#@)bCVCr$f%b8-D`RNCJ"bk2!j9YjS3)!f6$`R%fdYE13D[X+H40K[#MF(`6UGA +I)BPIjFG(MrM`+$k8i+%J"&@ARDF,@[38#$Q9PT,+-0PCbpp1$G6KC-EZ94@IqTS +AdFaHHShlrPl2*89`MkX1GJBlKkk+iNkGND95G6R2pjjIqDNCafAqACJ$'m-RYpJ +%0PKmKF9ZjD!lRT`ib*-b4f@%+Qj4V61!CG@iNJ#k$b0"!fki(pElHhd&'+&*E)I +G(9fdd%(8J%ad@X90*6V%1DPH-AjZb*L"-XPHPQ4D+mMJF`DT$j!!r9D3!2e@JjZ +I`C@qf$cb&c$kHL-2KT1"V8eUNJ,)H[cCT,J0@D&!'V(e(P6e2@bYKa`)0(F@@e$ +am4p4+0Y3q1bUjX6"ll-#SqkP01FRaG8M&"FB9ar)ciaZX-V!!qANY$!@fi3rpAV +5(qc(2k)*5b1(K1KkpUZQiJJlQS2,"%#,QYKl!#qh`d9e6k`F$VUlBQAXTKXV`FZ +ABc9JKj)+)bBM9BEGB@Qm06Z!ier'RrhiXiZ(22JPPbiCFZP&[M3UZ*e)bm[0k%l +@XGKl'c6IK$m)-cU`!Cma@6ecakpjV"XdMhdii,JMQLk!29hfh@9`9T)`T4V2-2m +dBVNR!i!l%UYK0bUJ%fp"3I"NE"Z@#LGD@JVB%k"EfGjaEQbV-P0EhJ[3-fXHr%' +iL*I"Q,E6aEc+a9lf@!qfS4N"R#lM8)@EM[)P),jF)Dih3BZcJ"F(!rIBqj2,53Q +9%a--S2,hCrA336*lA3FeXe`S+A@!c-p%`iBbd5!6+X+C8$JU[pB["'EB(+cDR1d +hSSPIQ@mr0Y3+0@3P-Q-N9*!!!49N#"88U`*"i6#U%XelDK`R#rB0YkEPZJq(++, +eZNZ9mB4XcE$c#SFjkiP8Vk(ZXUP)G*Gf8SlY`qm+Td)m8#mB*466qmD8dPe@(+3 +l,+2Z))2IJ&,*+PfL8CA"$kR46FYP55c3DJEHfEa-miUd5X9P"%'*V[C3M29#jF9 +@&2*aU$FP!GSM'V)5I&-JD'k83,PAe$ikqK-)G,9kGbB)eIS*rUa@rEUD$*j59(i +AZJ*)fA5TlTS5h(E-+cEaeH*!0D&@JmcbIq+K,Z(SJQKDIXm'fI+ACf-Y`Zf3!!Y ++8Edr`F1V`AUecK`(%@[4L4K#B$"35&aF0q$!$UBhMpHr8*S$l)2MR2Q)$HPE$3d +@pQdB@'L&3e#SF@$D2JVB"Sd%DJqea0CcBU$"-YKB2hE),hfD[prh-l$*F-YCbF8 +9DFKl3ZjS3plh'LGjB(a"5NdGS)pJV@)(RZI%l3'B3BUh`QNVmIP)#i%#YUa*DKX +Ta$24V#!k5c$a0[me%"XTpjh4Q1hLC219)&,0B@lmcNe0p51G$+RZ)`G,9%Qi@'k +a2'TMU"G-Aak,3[ma%Q[cK9pTK9Z'6@8fG4QF!(k#5ZhN"SG`ebYAYcQRHUG@YK+ +TqANDU4&*$bBfi9F#G-!fKCbFb$"%h`Bed!Chr9*e&@drJ1h(HA0S2Y4b*ST1cc# +%cArF9q#Q!Kil2QhL6fHLa-6q0VC'6G(d)8aP*+@SKBd*T6#MJpj3!ie3R&P5#cC +5#lC6$ErV8paCem#a(3U531d,SQ0`1P&QeG1+HYLBTKc%4Ar"&j@[Ni,B+03$#`A ++`FBK[mb#LFaQ,EmjMJVX8K5%SCYa[q@&&)A-r)i2+S'kq%!GTD5&k0ClU$-2CIc ++-#b(93GSq'MU(,+58k*VKMDGYeT*GCLN1P)+f2GCJ(dq![Xq*d,RRlSC`J3jDZ" +dTQH!`Z-"J[YHb349Cd&6i$lHX!li14@QdJVfVph4`H!H3YFG"`Ih)MjfNLf+f0S +pi55"e0)q#-la8$'mNBma!"!$IdKZ23&ff@8)GdFVU48r`IXA4A*IEQ*9GI9GqDR +LNTG5!'ml%dS-FZ%N5!LX2K[!**+Fhm``SFa`8i#@2m[#ZVbbX1K2[S`Ch(r6X(! +-#erjXbhm5Ufb8(%h*4Jk$F$)("c!d!5!BE@Q!aL!`T5QAM6ib#LTNcBZ3JMEcJk +Dibr*F'`2#-2PM*m(eVJX1@61"2Xle$%%[-G[6f3#r4fMfR0GMQi%Vce)KYjA%U2 +4aZ1ccEQ!SiYIlrdVrG@bMZP2M-$K6REAcXih(Pq3!-(Vh0%EMdr,S+A!#K1*!$5 +3!*KJK3Ne)B-h@Ch5i%ZRS1$,&8@&S@,81#RlFRA-r`5'%FZ`'UC$Dj8M5j3$kj3 +$kh$J$[83&&Bj+KAAMf,fL#j#UM,kZZLkZR[jEJY8khD`J"C+RfK3I@!Bj[LKi"l +,5KQpJcDl`HJ!@Sm&P#C$1&3%2FT'NrjqMibZj3eL5p5J60P5&EDdPpe('`F@RX- +N#E+amjL0+5SmUK"FU1A`d+e&GY(@JV3e'c8Q!J0-`UX%DE&"Y'EEp8,qSX`&pli +c4(bKrSkF9YlYk0Vl$X3A1R`r!99!I*a5jpGlhp&I08"mKG!9M5%0!NNJ`-JKJNN +J`)LYcfr%EiE"2Zr!YPb$Mc)XTP4TKe+mF9'*U3Vb'%bK+VbSPDS5TDUX(PV)&F( +SD4Rchr'aB5I4"qcU'&Gf$YAEF!FEQF&'iSehX*&&)3T"2X@J*PKJpGpLYapHp1M +r[LJcrViTeCTQM+FA`Q3iTfI$MQiMhYLpX*Gri"K3`N$Fc55RAaJZ9braKd5&3ZR +Q-U4#`V%`JZUX6'ce1$ICTDfLb13lSMM%9[A&[''hA8$cLN[GSqVMF**SF`Ff@-! +JD$!EEX#l(HQe1+I+e!SH)#`ECc"ZcS+`*rSM1*4K%X3NL%N!%`f6-#B"6$lq%EZ +3!+%K"5BE'5M%8#hL8Z9$3c4b@,FU+DS8QJYSB'UdR(eXIYNYc`48-pb`M&8BqZQ +@clQLQci"fM-fm@"3[RL"!6mB,,DGG-Ff@!D(EV+Q`8PS20!`dF#!NC(2Z0cQpfe +Ai"TJ-YK9"HDaB16AIiHCCDF,#@TrV&+(2q"HGeNN'3TqGC%G4H81JL)CJ$cYiQ' +p@T@N-EN([pV*Jfbipaba'@%mA1p12@)$D3,jfXU2h1-"qP)G%%&JHJ8F3C[eK'( +eCMl-CfF9#00!#)F803"@$(G9RRil23ia9"8Faeq9&m$B[H+1c$&BAqXG,dVpr#0 +h&J2b)4caM[FK)FShF"E%Db-SAKMG-hR$J@6Y"@k)J5'rF0Mk8519eVLLMJYVT@L +)0A&&'LNZ8!cjG`F0DpDHD[LMA3cHc39i@+M$je"P&l-*1cX,5f$[Nll(S5D6[Uq +4dUab2J'#$bMGL!pBIQaa@-#Q9CN-l6!S8rN-TaXKk-Pj$%,hRR$rb3E'EBFYY&8 +AKq"YRBAmXhKBTK$qiEMeISBC21,Q1dKi6MK`3B-r3D%KED%09N8d"@#Rc#G@BZ0 +McM`2`BAM(IV4[&Q2eSmIfVDGUM!"eLBPB0rNjVi(D8d@+hAS'Pdi$SD)'@af-d' +U!)'`4)8!*&H[%N#bViF*,EdDSmSfiq9DmC+KZA"D3mM"3DiB9%Sr(MI@Qh&8-!2 +hP%SZEX2-@05H5EjSUh)dNXA9imTP,bUAe9mLX9'G8ekq0NRE5Ea%3i4U8hNjJdi +&3Ab[,h-e!A4@A()AZlQVE@6h,a12Y9,D1F3#3RH"D$%iB*h8IX"*k6!"MJPA9C% +J6Up-SSKmI3r5#U@[ld%L4Ac3)UD&A-Qaa%+ZPT'ijBV%HIZY0`TAP@eM',@0Ke` +2"JXDD5N'MF0S%XS-B8TY*YM(0C0r1LqY-`"a10L&#$l$l%[I!leaK,PS#*2MaB+ +C0-&-pX)m(QGeiQFeb8TYPI*UTG[jGpl#Z,(FPrV0JeG@4)fjUq-I)B(1U38TRc6 +kM@A-pL+K#eDVjdP+-iH0qjPq6Mhc)%)p,e,LZ&)NkGN9jY-e'0!4$+K["S&)VI% +FrrpPGJhjp)q9)4mrp4YA*k8q!15RGrPfjQdF9L8'2H5&EifMfYT-MPK"X*@E5rS +`4+'4p!QJq8@eedJ+9F-GT+PckM)Rmk6a(AE0m(ZRi'+4JKS"#iG2D&)M'K"0SR' +,Zj8RR#`MpdZN@pLK!@+jhXHT-DlSD56'`(JMNDmCjpGrRN@R9$H(Y&Z3!!Y2Z"F +BRh%pd"0I`KL+j,2h)KrLc`fhI$BIqI1CGb0VIiPJY`R"8XUlP-3,4`6F&0(J6I9 +Jlre)6cr%(Ac,hEi("a&l'BZG54'fHkcJpjaU#&rL4Ye(#Ii6DYMqbGpj-q0'kQ$ +#Mh3B[56mY56b%b4`$-"TIBN%AL@ki*GA+-+H0FlV3c9kYaZpr`5"4pD3!-"4E&r +q@N,JI1[6"IlP-!Qm"U"jM6[rGej[lqI(i5J32RT$F"&RFqbGJAX"J0"H1"(dX+L +UGY,JSQAFi&Sa$#N2F4MXc+06AG&92TUU*%b%PdHqJ3V"V+`'15L8HA[[(Bkm4bD +$@a#[&$D6Mk`b6*l)3h#eTK35IIjJjPPR,j0GZ%5XQNb#C&9LHF[Naq,'AIac'fi +JXXeYR%JZ5*J9,[DM@MBVhbJ5EcFM,HKDB0M5!pAr!kHNEcm3c3S"8qlS%dB)NQC +-N4&@#4(mU2lJ4NJ+5F"LbceaCcm4-iGKFM13!)fImfK&$kRC8`fK@4$5&0J!"bI +2AZddHJ@"iBC%22MRjLGKG2hV2mq*+Qi%c`DRAkJ[l8,-!1'JH+'ARH44(A'KYA5 +K9c#BE#9h9e`)&Bem!aGb((-K'cTd2b@e3mC0fB1KK([jXTNAZ#b$UC)'D5&h1%T +3J0JrT%,P"*TJ!)*C@mA-fZ!!Skf*)EDBJ3UY&N2CqN,%'Zd53p,b$lUJ&5+Y)dD ++iFFkGdiiF@6khGHqEe1("d0k2(!2'qM'!!-8d$16CTL("5Y9Ul"5ea0X9-e30ZT ++4%eKD1*ZMmPXRD1$$%&Yl*MGVdqRmcbS+c&06@#DjK5QU@53!%e#4aZm+6%%!pD +K-%Y0#@DTpQ$-%KG'%3T$bc"VK'l!`pcf##@1caZBa93qDr4jR3M&Bh93NCX!Hm" +mdMVEcP6hTE2IqKF!p0e-bMaK0BAQPbRkQ9"$4CcmDX%`"2+Q&3)d!Di*H-9#4cb +#edeC6@'MUJEC+$6q60+J#P2%l*`Q&Uhk)#aDYI-mZa##8D[f0&1$a6$FEk'D)K0 +#ZHZX',UHNpJ[hND5'6#a%B1'@MCb`Q%03fDhHkbTGQ5"(d*+119*i6MK)MIUHU! +3!K5&h8P1&5LF@"9ZQlP,TK8e!dPJiD1V@3d&&fJ`fk5RQ)S5LRhGV#K)MmVN1Q9 +4LY#L&+'ILP$M)[322&%aTbQX)*4,@e-Kcd(c-FbJ09&JD3bKh-m-BHZ3!#%,1"c +LVSd"D8p@A-8@hd%haED831Ydfi9-hM@&`B46l)cXrU-2(#Z[ZQ-!@U'5hrc&iY9 +a"V`lR`QmqEVq`6G#B"32Y@,bB0%&#hI'M""[2[(B(*5+Ih,qc3[m#81*4pq-iG- +2#P+SHRSSMLB,%0e2UaKFJpTM044EP[GSci6HI,hK0#D"0fqN(D!0TSae&crr'aK +N0ibPSrMcT`P@cH5"([L"Ef-iepJkA16&`P831AER@3G'TrSh'+E@)LFVTUpF1M[ +c,"kkL$qAhE,qmaMFPYa)+,P`!QQTLl%2!EVFQ1%"'cm,CrQ98"NAN!#kZS`%eh, +2R(8H!lDFprS"KD0"`[SaIJ`-M@9Y#SNF0)MleEA(&f,ViF6D-RhfGP&XMBmKHKS +DfB1ZcS0CUFl%BfELX4!r"UF%ZK#''%SFkYP*Ld&Jc![Z4`963G[F4Jr2XFYYV"@ +2Ei-k-e!Y%*F)6'01MRrN!EYXMZMU9Jb6UkYE[*S43`PM`3P5jL%Q*kaJ%d-&mdY +hiL85fml2*"EedBZ`)$4(,9ZT[rie1rGTD3Z0Y)AKSaC'Kba-Zk!X59ZB1RDK2$4 +NBFUCD"*(VcF0H@fQ(AXKl9Ml8FGH'V,32RJX$pfqI,ha'Ai4T5kSIc)bq*!!'(b +%b9N"+@MiI-iAB9$FE$b9Mm$*`H9hY'rSQ+lGd$'V'FRd`8GiB'L`KZm4-mcJ361 +aLSd)62,%!ViVLTZ'JPEJK2$LPCJbE,%B2T@JqGKM2)"XC1Y["0-"&XG81[hLe@F +ddF9j3(%Q&!!G3PGLH,`HC+#%KJr"82$$bb*C35`QYJX53J2ahT6Q#"SrJKQUm[j +ahjm+0aEZ$)S#KFUF+)2+K0)*ARYl#![+&q6YLiZLLbibkl6Z*&a1-BQ8%lXRAM@ +lXm3)c[*"5I0YVaM'lB@1NVX%qlRZ6*r#L!D[$4iR9lPG4&KGB2G5a"`EE`m*M)i +km)3B3"6X%LVXl8I!FAVY')D9ldG66LJ[GSEPJc5aYGSAh0UF#)2@%AY2i)M,Dh( +RD5XD!TAPj-+$kNGV1,#&D'l-j08F"bE-4&IZdLXN,iKLNUrKU0J+9TaiQ)FRKU) +ddi0@BACZ%deK+XN&YV*JUMe%90))b1B2qKldYa1jDIIY63pLf!L*dHahBT!!H+K +U2`m$,cEde4+#)H3[HIMcLBHI6(qB'C654A*TaZ96A5,B,,Kik2IrR2l9l$-9dU, +mF`3!`34*@RQ9ADBLC`Al3)0iFbSe15SJ3[cM"K4f9*hkiT2,FPH0d0ZPQA%K"Pl +Ud3GF'U2`"SDC-S8Kmi&HN`IC`(!E8dBShAK6QC%(K40&cZprC+6Z@Uj8fMSbHEL +1Dqiq(PElVXA@iFaR!2ZfRAJf,jSSdC6qD4#DQKb@dY413$42VCMDDGU+UC@Q"UD +Y0(9LDY!dJkQ6TMP--c60BTUMk6C-Xc4Ga(3E65X`AD4T(Y-+QJjJQUIT1+B$0*h +#G*bQ,NbRD0U,UBZQICMfdR3%cQIH6)#D#mPre6+"JBjR"k5*2hEmXH*2+riB4Q! +)H8k5'(h&[a*LG(j'BH5[Xe(J(bZiS+XEABP@AdS-DF604,Ll(*KFVTY(N!#66+N +#f!3`jIS,',p@Qrj#*qZV,deI)E+q&Rr@-&RRd0*6M0XfhT!!1i,KiElic@EH",p +#pql5&rr,YflrkZM&[PRH8M8hq'Y$pik#j+k0KFJe)%8$iKTSkP(VrRLYbS6@0iH +2"K+Kf`kfc"dlq$)Smb"#p3kNZ)UFHH(+rl'E$*3KNMD[SpMjmlq)-`JqU'"VkE' +Z%B)+ULemLHVVD",h$M-Ae8e,0!aQG4GIVTU6`FhrFEEkHQb%,[mD[dBB[i"$km@ +KDmF%UmM$i-0T28%J5-%JDDi6#UABETb4cPkP!AAGD"`$'LhfXI0RTFjJZLa%2+E +@1`G$I*!!)`L,P4@Bb`Y3kJbKDYM-5#%`9C(Pd8e1EchT[5G8,"5L`T*(+X4`2lk +SijEbQGAN5i1INGj)'Vd1K%4mL8&QFX9T6j`ZQ%SMFJG%S6M1FM&9Ab,Q5PE[C9H +#S5RLUpBa-@4cA!`EJN4Zmq(l'I[@MX)p9TI'3)k(!fY'+S@GP6&%$D@ccR,JiHM +Q4aUkTXXDZQEC(ER(k&Cp4Lm2m,1X`lFiUVQ0jbbF'R5E',*ZbJMU4D9XXj**"JV +TMY3S"A95A,3!jZ[Cie,l!Lk$KUcFS#A*!"5&16e'&aH$3@l2k@Q'Uq5dbPhcdVA +CiM3&bd!K('KK)"mb@9c[&e"E!3`%A#3kTV80(EI&!fjkB#JMMhm'C&)CBPc,+BR +bmF34*M%*MUeI`XK"lmVCaRBi!2Z0i1(1iQYYjr6U+JI&`9VGNl-kf"JU*[1[dp9 +!D)%qr$XI$S*Qe`ND3fS`3a9"qI9-RJ0i#[CFSqb@9)R%PmQ"Tc%2#"iLBXK`jYj +Mpf3BIj!!P(N-a3CRN!#`*d0Z8QaB*JChUZ!`MC-lkcBcV*14Mf(JITKDKqm8,CV +!SZ44LaMHj8@IT#fD`++H)[14Md"#5!dkkP%B'rY[-@-4ZhP9$"L*#JG@8CMjlk+ +kJFB4)[9[ILjpq#3a1+NZb2mF+XJ5AC!!d4X-&C!!)%X83BE5"4Qp4!mF)mMSDb4 +)J%l4@5()k&6L#(Y#N!#Fd%VTJRbeXpJm9T!!d@B5C%S(%E82KJT5Zj%3C)N#aBL +89Ne#Q1&AK6$0Si4TKaNf1GN%TJV2mIpNDKN#IP0)h2C!11C-(Mpa%T4p$JEJ'4d +UU2qmp+qrBN&9PUB*bJj"i4rUSQA0I#b@aJqbP-cLUf9T5jYTU8C,VFT5qe&,33j +Tk3GT5kfm9"kLT6h+dZD$,,e05peT5hYSD4-YE9@@@Sme5#`9fje,@pU+TAGTBHN +,,rbIG-R0e@N,5l'`&("kLrJR4K,'(0D0Z9ShCMDK*p1019T'aP`be*M&!#8&JZZ +-B'+B4`(YE980B3k!G(Uf@llG$VEdkpJ#"d%KmFM3`8HZ,M,Spf3R35fMc"SrH9d +*NeV"l%Bpc3#%H!#UX,N-QSbJG4$F2(qD3CMmj#N#ZeVGKJK52#bB)!8G'KeRlD- +J4TiN&Vq5rc%Y@3pieqmk2aDrc1(F[",1R8FcpP[6YFYZq9k$)i+fiCE204VXlBD +#$a3&GpHl,%-k6*'cp`G3m$aN)MXTZ-lR0UVaQAYcl9qiaqk$c'c5NGh6qr&3ThK +S$X'Bi`+P(c8aH!TYEJh#Q,$(j"668h%%"J2m33p�!*ddZNUc#FA!86#FmSGbh +$"5GMHi*PecqCkCr`-b9BqDG5+!a0J@fVG##""aR$ba#&b3!#Q6Pj+U3)3FSr*c& +)q5'!,(,-J`&Icm"aK3VEFUUK0N0,lEc`Q`1F$"'AUah&m3hr[*0HTr62rea1RcY +%8%k,,26TPE42-cLQGdM9HSG8DiT"D#jL'Zj-*!H6iKpL!P3Mi@c[ArrI1%5Ji90 +jdAFSj4BfiQ)S-iCMdZ#&)-(@eQBma)1p!JJH`lmU`5Nk(,TqG("!0Rk`q+HfFm8 +pcpIcJ$R4FqbrFXRFmUB&`b*,NcqJH6&F(j'@&#j,U8&JR2ra)fkiJSr(31C45c! +QCE(*rpc*`9kcP46h(2dDA9(b2iI(cIjL-6D5Plr1S6i$S4PP-CSQ5Dq@YM@)AeU +21BD(58f*VJYS!!NbFM-ad8J%$B!*VTL!1EFMhF50(dX''`1R$m-&!!!M'd&%3e) +$!&IL$e80CN3#%#(LlP6[`8P1[0SVZCJV`qJR15mAJKa0VH05US$'R#FpVQ!TilV +a&1j1M2cq&T!!8XI0R!%YBpfZ'MIMGM*C0jY*%aX-BXE3@qYDif3F3qeTV10BQf% +FkY"8$68(*D,`prpqlrIGGm$KQI6CCjpjIJ!GCMiN%4![%!!3%!!385q9LEpSDX) +ImD0A+*!!dQ%9$PbA,1b4[-EAP+`aC6Hq&NN-HY*%(BLQc$'cjC2P,j9CH`'FXb0 +&RmfI'"(YTNe@K")E&dF54hV!!N&Di'FA1Q`H@0QiDk"-"+IX%'@[k@m'9MBYTS( +ETXE0b*61Z'MV[Mf')Q+[lL5&IILd!Y1Q3`L(@NA(eb-8,1SdjAlf'T!!#5$I!-* +Z1Y&f,P,da53HD,pGHAl5TH[#Mc&Z#K@pNfBfQqV%HA4`'8fD2A--J9X81d,2CSi +pGr@G00DT3qQN9cTj)SP)+6VeS*0KB&jEd16q4K0lHU2XkAEekGahdMTH%CfN$1[ +YGp)LLAe[Fa(S`Y"lQ$+$+qSpr%c(XXAD$mF-"9fRiqG%*2&JR[90I',LR`AT!cp +3iU*fA!+LY(%c"[CJiP&-E1-6pq"RGb64[S-qk"*k9[Y40d,"h6R#%eNUGHKFbDF +QTPDc+j2UI2[lQjSB1X3@G(ND@k#E9XB@10$*D@b"BhS2XJ9YiP@fS1e4%I5"q'@ +`H+bai'5rF-8MI,'%&+bEF+UPBrSS2QMB2DB,lSFDV$I8BpXM5dq0G3!jAP4j2QQ +S'(r-A@NciQeTY0db+,XZY-mm-p5-!Sf%&R-#r)QCXLFQh'25d6J$jE-&Y[Al9Hc +)a+irB!L`p,F[l0rR@i)YH*NB3C)AT54Rp29&kp+M5FQSLaBYqPC+0286jeU)cN[ +CD@F2jQ4S'I*+5dY*2TXFA56fIJ%2p9kapNT"CYe*kc#1YFI3BKcAVS!*[B6%8!$ +-kE-1mm9f($)B3K@BCDH",lCNMQNK`aRM'@FScM'KK1+)rE$C,C'%f13'Zp+8Q!I +XAa6V-JTqiEb0,PcT51m'Dkq%%q@Bb8f"GU"LEXlJ)U)`1!,'&Ic+P#2mf("%G'X +KS)B4BV,6!9+58h1bG9Tk9MBq$k3RCkAfDGRD-5hhE0fCP*`689&6+AcJB*BZ*re +-0$8e+e8CLQEVNLmUBj+U+1LVK(PPDKXe`[QJAG%&*jmh1dL&X@%VA,@N(2GB&DT +U95ia,%&PX&KB#2$!MG144%'f9LMG`KejGI`b!N"fI-50TVPAKB88%[G+ch9mRIi +R05NXD[-3#"F("jj%Z(ahTA#!6*i1G`CP+Q9)[k%&@h-XV645+-K$al!1!qd!mL4 +!eK@)LF-k4+#8Cpd%GF1!Kcmr+KdXCY$'Y9T6lLm@+X1QT#-#ReZ*BH)MFKDUHH$ +i6)#Qh(Fqa35[!@U$%+LU"Z+L+AG1+6i14)VQV'@++!lGISGASfD`cMXR6,Na%cj +ZiSU)dZ@2i(#51U(c,0la!E$C"[C8Kdh(@G34Mll8e$6263q6UhKJH@"aGmZ,8*b +`i)m$'Aj*C3'&!B,8cG"5-kZG)Z&9Jp0k!XLNaP[jb&*LqpMEB2Y#c[B93$4,E1r +V9GKHkRkYQ3+9PeD51a61L##BIp6)VT*%b(b+#B8p**!!C4(V8e"f@8K!N!!lp12 +IIF(FTBAL3M5MBZ&#VKrA2&c)2I8,ZE@AVT!!-L3HqSH(cCe@5mIA1F[8,5#J186 +2LGRS[$Sqf[%q'eL2$cV@3@)"%aIb@+V#*04C#bNZLmYR8b"fNY$fpCe05STQCfK +*@5PDeS&N,FZXTCl0eNAp&PR-1T0P2X0R+5+Ej&1bLi5hQe`bAbZqPY'&T3HQ#kT +!0c9+f8P9(6+L%3&3K`aJbCL6!ab(QVNaC#i2D*2"J!63P)cPi1aD$A"@S'BX#FU +RP%(Qi!*LLekiZ@R`3d-,$rR3iJ&qh9CTB43EQc2(-VSfe'jXMXk$SQNB"9&6EZ# +l6V%cFE'$1$CcF(kI(N-iZak95d"1ieSFdE6a+'!N`8mEr6m"N!!*SN"abia`eJp +bKB*KRDcIGSHVD*f6pGY#USTipfZe"!j"U,@1f)P!!@"+0)k-1K4e8iCFlT5@A%a +fXiRh8$MIl9BcSff82lA$Q4PYrG@HZKGSRK*+aN#)CR,%bp[S`-)AP!00SdN&PPF +8B!R5cB0TUkeGr"*"E%rLTS*-&@"b%9&"CkLC1ZMD`3CH--%9'`"+4%'[G-$ZS4A +hVYdP3P5kDYP(e#e65&1N*Fpq!eMLGHG&&cP,''mUeI[YmDC5)M9dlGbNSPla0r` +8`1+(I2K+@,"pF#m('kjfX&HUEA@ijPCap(`RiU,#c$F4EJNT"3aE0Nk0*KdmQak +Y#6QH01LSr`'jZ$`a3J,Jj'9@TIdQE*@fbmmUEC9I9CS,iVJ'i!d'2LHh$#aIYTU +UYaG0`NY!F"(#pJk8Z'5,#mTL8)J3,9#`d0K(*rZ)X)papQ&J(hUBqS`ePCMU,-L +q,ejM6de9'jLJDJ@XY!E-YCX1$R"jL)XSM!,+ml(pFl53!!S'XI--I*iL"Q3N0(8 +F*"+*Nc`-Q$-@b)hQCUAq4-[*eJC58k,C1HR1U!k)`Vjk4QYQD8e5@DRb1dL&-$c +cJY!ci2PTq0#cMbRf-8%I(6UU&(qI6m3"9Ale%JLEBA5Q9L)R40,aI&GZ9j)hhj9 +e!G[Ej953!-qS+#Jf6DDJG8i&q6TY&466m1a@'""UZ['Nip[iaGZNLcI*,VE`LdX +`BC!!A9b#RdUCiKYP&k2MCc[Si[c&3XX5iQCe0B3!bV1bdhaIrJBBSF)k40N1G4R +86rhSd*TlM!%fbaKJ)kXZ%jmT$"$MK86R36E*$N)G"b8'!32F3#9A4bV0B@@Ll1L +2YFX(Xp)rd-+3!2if'Da-LpEPT#46,5LE@r98reJZ*cXR@Hb9b4V[bjc0(S$ITiR +d0dJK!Bre1A'5''VdQ(X-aR2(-(!-aFIl80#QSllZji6f9dX`U1'R$`9D0iUcRC' +P)`*Ch!F6+T'd[h[Y0hHJN!$a$4(K*+2H90I84)C0M6XK6"lkS0$%R6ZXB%V$Up' +e[@-'24C*2*HC1BD+BIHf'CI"4)eEC%bdPM+[%8cheGP5jM@#14YM-ZCFim`mhT% +UJkh5aEHhFN,9+#fR5Sh#1p)N3V8Bc01#ic1d$i6qDmef-9PVVSJIBYd54J'b3,4 +2("(H'fUhHhCTSZ-6)(rf8A"a8p2N,8`Xr-Y$68+D1MSGKjBH0[#(4G-%1aJT-k' +pH@T-0FAbY3eCER5pD6rHHmAcTCPIF(aYq+RJ-kXIp2kKrBmkrh,V!Qe4piZ'ZFE +hp3q02MGeHm3kmDY(IRlRpbIrl-Krk[YYrlH2l4mFk0Khk*-,ljSZKDlfI#Fbj[l +Qq15jEqAp+222crqr8rrhf62aXjI6-k*QhF@F`amFc-h15[V[U5R*"p*qA2H6%hp +ap,qprFHZZkr@0YqlqIf@2lRedq[rjBIripV5kFr2q*m2r21drrU$Irh`lpllrr2 +rckIrqq0rI1hVVlbeq"Y[&#ejThKK`DbArf(MkrRI6Ib(EGrEr*mhr@EA4l[rrV' +rfI(AfaqZr0fUA`5@VAKKhFmfr1hDIe[cbcfrI[bI5[rPrPqeIQlR[jGpqHQ[V&q +qmY'+Vflj,&CHq-@5PqBec*l6f#6*39BDDV!$f9V'!9l!YJNhl*fYRHBjSe*Je4% +D&AI!d$Fik%Ld[qdH5a2NU2B*AJa+@"-+Dj+BEdR9(aD'U4ZKHm5f+,kZEEI8#@r +Rj-d&)*FBUb2F0,iBPG'S'1mjM*XZK1kH'M0lZ0-'3M04i"iE!9*lNk0$SEYQaqe +h1D#,8BGI$EV(%#+pN3m$cc4I2(Zm&XC2VPcc#G'1Kl3ENrGJE**h'JpfZ-H-p1# +3!1c"IFi(*`)JDILejX9T)R66,*UQR)$YUr2C!XSBf5f4m%UBZQ%q6(Z11)XV$B& +)iJm)2+f)5q'@KPDSY!r!)kL%($Qa4dAkGZT1)Mj+a6B2!JNRN38R-C`2aPp,#`K +j1lTfbLBlN!"930&%3jGl$02k-0#(D5pM@L@kffR!#A+mSZCJ1`eDE!G6M`IZ'Q' +'j,#N$K6I*GH1H69P3QS+'G3Q(Gr)+kb0[-*Uq&3'E"B6X'QSM#5@Aj1!68-PIYk +3!!'Ea8jJ`cYk1E""%980p$NL5ppGfG$klPFXG[e99%DCXX0j)dXRA6rDG%Jm-bM +ZF"0Njm4JC#P#9f3U)ar'&$d&K5bb3@`4caTX,`kK-+'E3H`0a$L1YbQ5H(3kI4" +EM#6BS@Ri3`S"Vlj2fFSZ`103SfDV4U2JQ9i8-r0!`)L1e$9I9UeZiqVD&NQX[mc +8Y3dr(mZUe4dbGD(M9jlQkZ,Xm0!TKU$-IS`YL&e@X!ABc6Z6,F#+$`BTM!jfj5C +If9R*fPQe5Y38X"(03)`b0ASfGfr!Bpri2LhpBM6pJj3$Z9TZ6NVZfH6dLlmP1Mm +*e@l'fH5c@Nk+aLT[2dJi%-TV'1Rplf&*lc)r5HqBAk6hI!$!5ZZ3!*'+q$b3!%j +%q*8,)#%,L"6ZEZ'NpMlKB15c296V(M-6LEDU"QQ%D[2Tpdbj$5f-p)0arjHfXNa +FCd[k2@fN6!3"&T2),NCfJj!!i'4ATHcbh3Vjph5(M2`,b"KNMbhjpqAYP,K!)EY +ak#!2VjKH[!K,B3mY*#2K%p(8,#dV&D5BlQab6PT8Zhc!E)kQFUU+++81[SjQA-T +'GNjbMT!!afkVc0",Br,FV8'%eA0hAempSkG$pZXTd``Y%!c+kKD*Z$rq+52ZHqX +MlVNj-#IZ89%ilVHJ5JKZG&dHlMk-SF03eY#R)h-2NpVd3&'RDme@!C5G"mm34QD +#lL""6fVL)Zl4@IjfX3JU34hR)8-B0JpcJlqEY#$h@&*62$L*"6f(#X[MF%JQd[) +MGQSX511S%l*,1Q5AC#!"8M"4Qf(8KUlGXe)icF1,q$C(e)X(-)@1b%0YI)1T@[( +GU1A6NIK-9+#phFH(edkkc21k"l!&ccqMqpTDHUaaJfE*"0&PFCTrjaB,595,[a4 +19)YRqLHUaHeqLHU1qN69rXM!mK@Q*b1U1f1fSRSmQBR6"PY4hAR8Ee&p6"(9RG2 +#L'UTVDMZe15L+KG4E#4iqU)kaL&[2E,kq4"@qHe1DC82RkDiVM"9&pHZ@rk*+m6 +4`B@e@DIA,0GUVF6UGPYfKq!kN!$8L)Z[2-M+Mm'CTfN*U4K*Cbc1#V`HNE9cFAX +94e'%&!iK%YUD"b2Qe21$T@Ym@Jphc(KXMdC%@r`)Z5Kj*`4NiU2GKhR'qb'5mSe +!H)a-$(mH9Jc[q#Q'Jhk*B3A%X)35IaKCi0KB@bF-9cYJYKeUeThA,,!`"8@03'p +*NJmKhK)LH#")4E&@ATMV*B14qbf[Zq*GdLFj6VJi&-8HjedXVdXQi#AhAFjVc!N +N'TXY,*QhaTXpcI4%lR91TS(XKGRh9A*+HEabGm)LU00L8618Za--HSY&DbYYJHQ +ljp*[p'fcQYZD#GcU*hSX#jXA(E*Bp![8+8M@TQGZ#A),'DBX&Qba@q[*E((miG+ +QlVD&Gp[ZdR5kXRZL8mab'F4NXrRq3aedNIk-M0dBZ2T#-4h$G*')rpM6%!&'C0! +Rc"`-$,K`dHr35q'r'JkY#p6GS%j#`#D)!TYAaaPeq1R--54G#[&(%N0,*-(k3LS +6V2TGB)h@)3SP)aZDT)-qp5'U-jp5RD'#kD8%!e,9C&49&))Jk$Vaai'JZJeBISU +EqP"b*"QVpM"@rI1`V(VH6eBeqm1U$CUYmQIHN5QrBQ$j#i1+mPmBp&[j2G6GS%j +5P6q6&b`B%*&R3@qHP!9IUUJU#i4686`M9%@ZPM-4"I0j'&pD&(*A"Hmi[&,@8CB +4`aYN'C!!bM,JMm0QJ-[2$,MZ9`E819A((4&Jq"Gf'9VQFRHY&XSFFfjI9I"@UC1 +N0-'9GQUXIT99!piH'I"Q5UM@a9%G[20MJ4A@"IGq,1SN(F[HA0@a&Y4mq%NF6A* +EVaX-llEQK#%(`TMJ'HA%)DC0)HQh(J',HkL!C+%32BK6FPAUHTpT2L,'DcIHLjE +UKc5,-qN2Cj&TM%Aq-5b,[1BRLa6ia5)lC*R"(,5ampKi!6PbhH'bSS"P49(Xh0i +BK"1k5aIP#)Z`S0K[dBlVfXDA+Q!2"LZ0NU$i&%IcIEKjKb6Q!$LF&bNU0r*NX3h +Np#T[j`%AMbiT6B!J,*3'THf92c)1"CX[)$M9`Gh[K!`bj%ae#'3M%PN@PEH&"*% +jZTP1YaeGM8I[Fa1Q)Ce(Q45EIBSC+r%$D9VSe*KaJ8`j9CLkP"raap4&d*'QR)c +Pi)aPbRdG3BAbQdEZ`#aR"LlP*cDkh'-CAXQ-S$bC$@FEN!!3'H6f-3#`QE+J1(q +`r#+kpI)*PrQ%K1LZH3'44H4%p0KP4cP5ce(bk!K4Q09S3q-ZUc6SCLjF@S3-*M+ +HJ+YA)rGZq5%bNX&KKVNTQ5)@h*!!6!+PjFF-,CQf4Ld`#D(+Ad0Qmd[bp!*L"IG +qqNNbVH(2m#hV0,l&+KiC*h1!lC5&@JmU"350eSc5NPpcA9BYH&M@p$L6M",V5`a +TC!*5ISUljrAND*F'ZSHQ8qC`ahIjHjQ5@84#E1"NjT4c8SCQdk@SI"UjF2X&lck +6$L&R+e+qRS%A#JR$`!6J-4lKahj[kF1DrEkVY)AqApm5D'Pe'BPd@ihMHY4(L$6 +6Fm2(UdZh9jq`p!d#Yh+P@cPB*-F+a0DaX",%llA-PX`r@9KT,Y3ZkFp80`,@-m# +(i`8"pS3[aVG9E"3*1"JZpe*4Z"KQ@aR-`-#hKaI2@Td'"VkGFJ1$mXA8p-H+HdJ +F1,X!#VZF*bPXD@@pQp83$V"mVS@#!FXfkHhD)925+C!!Q438p$e'Ph)`h+YrIV` +fmcS!EZ%[FCLim%9ZBdT6$-&Z1jN'`pPI-6@Xp5#*3da[[ppFHThqAhppE8YVF`L +Q`HDfSljY))JcZ[EFh(McmMbBq(6aJhe-$@X`Khf3!)SrfVZQT"jKI42&p3,e!%K +QSGhiTNXrQ'42Z,#mU9N#YA6S4Fpl"!P3S0Qj2'Hcc,0CCYSXcpXX6pNXRj8YhE8 +EVdH[afI+RqA9cdS8hbcjY4N'$8SN-Pp5*#Q40Y)[6%Pf')22+H29b[G"B!eEhq3 +ERmj$il``B,LTK0h6SYbB%'imQ&!QfpS#2"&6!+Z(J`%R8hDpU)%KjcNCNPHFQeR +&qA$BLV25ciTcV9m9CePe8Z&Rr9@6#Pk99+#L$#CeSbLcP8"DZRI")f5Z+A1E!'# +G'SZ@b3Y8XXffXXeq0HaQYrLjf8Dr0PZL'2XKQDiR&Hk)d+[TlGMbZ8"aTaKR4E$ +HA`QIA45r'YeCMF56`'DL2'eJqCS%#)I&h*66J4plH"+$GqA%ARP'955'+AGKVk5 +1K3q'8mG#VhrU@'M`4afc[6)b%K9T4E*#6TSZ@M"3EKKBrNZh9*5a1'MKEQ&,Hld +&QL28DDlD'CpfUI"#em9Q5i4@qFDU#bp1SYILF6,5!V8B8Z&5(jE#Gd1failY$09 +b3$E-`LA5Y+05T546p`46plI$U[ZBRqS1qDAZ6(SBUVRP$$#L#JG"&BXlYd!"V2* +YdU(&ZAV9I)FZ-E4`)L$%Tb6H0+Y,*)eCiDeDaG*952"`Q%pq1h0X[m!#PHf@NSN +&+X,-%$"hfp)iS9ERM5X9-J*)1[iY*,%9E)&L*)`2d!J'L[MLda&8N@Mk"+jf%*Y +EeTeFF'j-Kc"RidTCQ21mBNU`$'6qR'RlKjJa!CbK,hUj14b&1XrCQK-XSf3p@rH +20-k6$YZeR3Hrb15d9b%mdXpQNdFU#iDQQMRR)!pYAX!(6-!`GKT"c1qF6EF0DN) +*MjqZ%U#!,@LUKbqXrI[aRr3(L28R&h#eP-V8NUqS*I#KM9U3!)5rZde9bdCEY35 +i!4!PC'&U,j68cUpr[-Ee#"N(MURAPh#$L-5LMpAVAjCGMmkrf-@8ALJTr3D40)N +jaI8S24hafq4S0E9,Sdp%mH'cp)PI6SB,XNc&"LdRH3!a@4%)5ai*"&5kjZ3#0U3 +2lF[N,%h'h+TkHa5R`+T54Edm+)Q%%GS&9Ed4@mI!UJa5,kY12089HM!VKEC,IY" +U1bI8%pciHQAM5-ET3,"d9(LZi5"'3Fel(16*F8%mcXj+8e3ae-0"!lR+HC&R5bQ +Bc1hCer4[A"RVCFT`+dk-hke6P8&ZM*@4a))q94Q(E"dC[mXNC9"!GaN13Kq+3T! +!caN5*HE8!3eq[P6!Jj!!-*[RBFLMNN+8EEIP9G[f6NQdE$BmVQbiXVAkKVH'`Qf +imU*m`pc9S,,!Me0c)%V5RU80mk%RYZ%YDQ@6m,Qj8IS&cU$e''G@GXSF@c"@@IN +KFciGXfAJKcrQQj!!'NVbb%hcE$PflqCjeBr,+qXm9PQRKkfX-rbXV*2mUUcVP+# +2YN5UQQY8`c2$NmJDEckUq&SHM%TN"%F,U[4KBL*@[Dq@6d#cAQh+`!5CqQcLclY +N&a`ejFk1NjY#ZUcT@6Fl2JDZ%a)Q9,N,dA4Gdb%CkN0T'J,"Z3YI)3H4$2N'3lC +KJFBRQM`+%UUBB+TSF@kEAe2RSl"bQd)-Ldd$brG-XD35`IT*B1V!JV#2lB8%hXB +bqUr$C[4f2c0kJemC2Ff'[2IbC%mmH3D)LJ#12Td&Flff58'UEA#kXX%hQrHb`IY +XJiq'h@#&RaZFlGF'Ae%25`DQGM,,aJH#I-aTf5BEES2E33)-R5MfPr%ND4,+SU+ +1!,9+KV+VU(0![5a$1948%P!ri'`QS639G4dSP``eU+,!USeQLH%ibU@LN!#)Y,' +(LjJ2$E1@-[Gm+h1dP0%(&$#rRUa#Dc8UQ8cAp+P,HQj+AG+aYUT,1Vj$AG)ffp3 +Pe$%RTLkKYMNlH6#1#+-pM!LIU0G*YS@jK%G&QGQ#+Vp9GIPibHAM)HGBlfAK-dl +mYUdVdS!NZ"TD-mJ8Pm94mB!S&T9L*e,cVNjU3S1@T3J%(CT,66'Ld99qTI$GiBR +$YT-"Vdr2N@dUdXZ45cM5Nq4M9l5KQZYd(Z+FLa$F!,J-U#1bicP4Ui!kjd5jRDL +AJ8TbSP)GJEXUFKU3!0GP5%e&(JAU&4PU8%9G"QUh%p9&#P+HUejj(9-UVlq2b`c +RCFE*`QeEHHfQ`0"@+A18DL[P*lQAX`k'XI$qcVN,hmR+L"lXkp0&r6$dGJCH14$ +81'(T3G#UPE*H'd,LY&&4+JqB%KZ(`0E2bUX3CKE!-ldecIF-08PF"J1"8Zl#pTQ +li04[M6[iXXeXeiB#,K!8V4ZidFfFkmkZH(k(e%fhU30-!61%9PX$)dB1!@'QUQb +a+&@D9l3*kqB@f#@!9["-1)"@X0SrJ&E3l4G!fe3MDDkI&6)UFXFLlTBlRDQU3GI +`T#[9pbp[c4f3!%)q-'!HeLb6c6#Uk*5CBb"3%DMGi**3)+YDjm+!5+jDQHT'Q1T +q'eCerAkUcZ5AkXTiSL#qD94CHa3R*Ii%U5&G-QqKK$aShXlcZ4DVB)Nh&-1N06@ +)A!M1,K%Qi8lF9X"qdk)Nh&("(&6PG)r@-")k$`ZPXG5-D#S6-pZ"dc%-fLTYPKN +'6D1XcUc#a8H0I2ES!9`FU&`mF2,CZmQakTZmLkcfG*HK1-)AjTM6B8EK(1dKi3Q +m*4`[BTS'9`fTFD!#!Hb(K'2C08)A[b@#k5-GEi'd4iIZKp4Vfl@Rd"aQLp(&,rP +AISAdb%kR5if(ZMbKfPaH$@jm49Kb9B'8-G8jaP4R`c,9C6qC+YXITTTMNN*D[qj +eKV6UFchrZVHUJ,,U2Npdc82R(L)Q`cR1#Ff-ZeUV)V8iH908[Si4$H4'fL%rAVL +&drQT9ZXdH4HVeS[+9e9TqP*#aKC8U'-(f1QQ4Ta,@+'4KYDSfD@BC4590kT0"(" +#MBDPN!"#B4pVfTX@)qiaYS6j8k'H#Ti5LTjK5d*CZ$2BUc0aTc-0G5)$(8l"i`N +YbKM5XCH,1XhjDZ)%E2q8QM(+F489Xf-q+cYbTXf4af92PGJm09MMb$e9(2R#ALk +b2I)ZfC(ANh0EF9h`T"[Ni&h2,kQ3!)c'bUN4pI@%+,bMAKjML"*T8GM,$Lc%BME +8VENAVJ$!2m%5XFeQ8qKBUpR8fHV8S'k+$5J61m0fpTMAmF3(8Z2S-A+$YMdQ1db +'G"Mc9MD`ZXC"28KXFPlHC)HLKY$c4"+cDa9&a'5+U*!!+D*#YLhE)hTee'cDE(8 +,20'dk3-+K4BHVYRG[+,MHF29c&Yc3h#jhDV[B2cCSj0NVLFGi98%SLUF5EY&CSe +NpR(&p5SPfQE2Tm&X!0AEA$H"&elN35Ll-'RmHEiJ`DB'(MAP%!H4&[$clI5MjQ5 +&kQ!fjIik,MA!8*K[1NJZDmN"8&KJ$'Aqp(ddp'(m+9@Pj2BZI)-VISq8)B@[%@Z +6f6#C&r-1mhQ(Y8bpVb&4beDfq)(LP#qF`BCqb-a"P-aSS36[jN#F&`AQV,G*l#d +C%)GNrda#Sj)ef-!TA[#RE-Ph0TmJH&""ZmUfXpQC`GT9+5aJ2&-[Z'A'*Y6%"8r +UcaQD'L#K)CC*TGKDR$,5kQ"CZ&Xf3@)VKijFNJif+$(K&5NFAhKiFRU0#9jc`2B +*q4&4rCeJ&HRh`eDN,Aj@T$2mUNL6@%@DYTH+0-frLR4Afm$baiFTb6+)eE``eHQ +SdJR%8CicqI*(A98C66HY84)3m#B`,(c+P&&3iQ!N!ckUA%E',9RC*haI,Z*%j3d +C5CP(b`fZHJM,N!"#@,lq5KM#-Y1@X(ap3L%XkCpd31)lPU3JA#,G#fG6NTp-3Pf +T-8$DGKSPejMU+1jA2LcX`miq21c$`6k#l-2,2MVGYCjDER#m-BfE[-+-ST,)a@q +kH22YpZ)Pe25b+-!%29a)51j+8mH,28)GmY8BDUXa0&4Mb&*Mk%D0SDiD3fmU3c# +q320[8G&d-4kXH6LiqA(`k%i-6(4F5r04dm#LT'Np6-JQU*2fmrlCJH,qfHqMk@q +p-RLRAf"3216UYk"`bJHl$fQrkVF%5,'(&VRklD-+iK-Jl!&5p#G!H+B8a!8J2!& +5r!8J(#-+iPdJ(!(+L(H"#-*-CJ+Z$8+"GB!-"LKc,J(TjFJ5KL`"dKZJ$#0N*pr +fqP`d4a[IbM['@-FB1[)YmBj3!-[@05aETja+dT1D*Q#5RpFpi4%[eREbJI(L(N9 +Ykc#3!+H4m4%kR%"6Gr`+0``U+6&T"a+6GNZ*3f26P35Rj5ZF58CMC-3b6!pU0mE +[i5($8m9(N!"1JDie6Z"`cIRd6$%PQPH5PA)`0jq"ZD+`B'k*Rf!Zi4HBZfB,TVj +h#L"SPapJDPG0-,8jIVTJD[20[B1TJ%X1TJ+ZUX(8V$Er`&6"VG-$8j-(XhlmC-" +83q[r'M$9d2SI0jKUD$dp-093pUF"6$@8R4kB3R,S#P+%8@+6LIH6m1r"@0LRR5G +BT%m26pT(R`lKB*p"RX#3!$kp`XXq1dARZeq"H#P2I-`Bja(+"QUdJC*kkp'%3d1 +&&@#10ap@K(ph"`018%M!)VU+0jTQi4d#4T!!JkacB*3-)YP%rC!!m3E!QS2)5r2 +M018S*Bb'HF5MfG,6-'XeXH6i"%)TkIak!J39dh!P-S!pXCeIbam!S1iD[iN$'kK +C#I9)`5JV82,VM9UAXlN)"NJIBi$dKE#!G*fIJ,68,d#DAp-NE9RA`2*r5MDdr&j +UYLkX-4TeNN"SS+6+!!SMc@A0PUdfMR-MFM38aaZENM9F9VK(D[KYf8VKX5@QT@[ +3A"`lD-'f"8U5%RP6F8YXhBHm%6dP#Ca(Gd*T1K*QY1fXkDpDAMcN$9,YYAKBCp[ +`Pel34XL)e-V0P3[d#b3c-RBNeR`9Ejk6#N+@m-hA!8)I1*K-DG)eeKLPV2A**pC +S9-&kaPB[K@@VHIkaeDbZUYNUG([@JfB(1P*@hLI%V!FcaaLc"3!L(pahD&r1*pm +Eq0R!4`2I'Y`dm,9p(`kQ$Ajrm29p'`E[$@B0*R9F(2blJG&p(hHNG(`mF&+`r`# +3!bXE384$8J-!DEX393YNQ3"CEC2[eQk8@TCQ$00EKVb-@ZUFfj!!a4L1`0Y0TGD +aP@l)3NKDYlAGG0I6XqY6#)G9Gcd-Vir0H3`B$M''L"M8"A91)Y+)0a(a"m-B%'* +!"%')HRYbFc`lBZccrIr[fq[ETTY!cVPrpc8G9MBN$a%3%!!3%!!3%#(Zhp8V8Bm +(Ia69&(+NK"ACT5,IK)[F8U9XfXGFC"$q-p4,VKN6'DE0NQ!L0LR%K&(4mZK`%-l +"Qr6eKa4RI@c`6M%KTFdp#J6%020d0A$#((2hUA5hA2*ikQdT+cbHZkDaQrmBTN' +1&M*QqBIbT$M(`[SDaCHb3P%qSeZ[kGE*EYd3$B6DY"M#,XiN+8jd!c!m!2k0h9k +@BlGrGIVUp*bbID9TkIEm)qRD[GPF[+b[ReXISk2X!K-P-PLMA1fHS0KN*pDYJR, +k6mplKq#`(DG8K[2JYYEK9M`BjfQ0(PE-I$PA-#UDNq*8!N+&VG(-P5IVbF9'KfU +$80hU4UHPL4#TkSAeC[B5LMdl%-H2ZGjkc&dl&G%4Sfd%r['`'dYTmQkP,Dr6@0D +*(c0qE2MaiUFI2clm0%AX36XGpHA5M0)+MKV!@@A(TXPG)iCqmMI9c6SJ5E3"C5F +d66Sih*9'#4d&$,`b3L,0Z`iS6X9*5"ARUSC#c4c!A#&F+qcf)qQQG4[X)DfQ*bd +h)dGE&XK*PEirp#Hl[6LYm%LaePkD'EBr*)qrqV3pS64$KHpG$E6[$I8mAV`P`06 +(kLhZJe1IeD5%,BH%UHI#MIKc1AK`kVN39,RA"FFm4h3NHXJppD6SETKqcIM"k91 +l,bkCfKh0A1k,2UFS4ij*bTGe0a!fP850&dbADpbFkAM1G"bBMJq0ePZ-'%i3hGl +Tec`*KT2!F")B4SMK,eEl-9a1$)1h4`M4r`EIC`0$U,I"IA$YFjV+D1EDBTVfh(! +dmc&kI)'86$FYJ%dZ+jZece%e`C5rmLPIQUBmMmFY&8lj+jY5FLY0+6'ETUc(ipQ ++TT6F+NdTj&11dj6$UaKC*@8djFp['8`TP+Cm`kFmDjS#XNVd&8ljKNeCH6G0@GP +LQJ+b9MC90'APhA`clZ$bKY$dj3eZ&lCm1bmZ@9j(S1*U(k0Tlfl"akF)'0D2CbX +[,PN6Sq2kIebqfI#M'T-l-jIAh4&9kYM$QKJpL,K4cmD@3R3l#A%,BR9&9),Z1TF +dC6-0`c)"!T'9CIpLI"a$3,"q2$2qiT+e36UQrmFem``rUM%C*!3B1I5`0XM)@4[ +XLK`qC4i0!lJ#j'b(%p&-PIa0Zlf3!%6,eAkLT@i("-lHE&-e-R8*La-!CS4#Xk$ +16h'"-L8+--LhbcHc@a,rH+`6[qdX9mbGT4#S(G,(TrK(Tr((0E'L(jG[0[k)3@2 +Sq0m(+0F'jGXempLYa#C3G,NeBiUbAKZXJ)4jaKm"T#Ke2IlG$UqL",#bUJ%-3Mk +LFACXF@ahebJMUV--J69eEL8TMVmiK8jT"1+BGb'14pcB)&64Lcb)rSLmS'YIBA& +DZYBNqrk!p8S,lCV5BQeqVXDqAjD"GBAP4e,Y1DP(5R25mGR1ZN%Q!JRKNA)PXJE +Z*98,)q4)2PX`l''E80*bIdjr,U0`V&EVkZMAbdHrHi2IdDprK8F[V*!!QX,(jqL +6ABd(-r@d4B6PSZ9+NjmCB'6Xm)@LTCRjZDCMe6h%9NV25G8HbC`mP1AZFM[Vl&# +pdp#9jlUZ6GIQd05ai"RBAka`mbrAp3GM!05'5EE-i[VdmV6pQ8FbRKYE2NJHm4# +Mh)`bEDUQ1'hr@$)#3KC5&dU1i2UjU0S"9'aG5JF#TB8f`H1"'ZCYaf+1@15!BSl +r+6CefKXXXNKdhCcl#KDA$a(12e*i3(1NY(KX'1dh-ESf,A[XBE(re9E1VZ["@#Y +Rec`$KF@e8Dh*eY&`949V)Q+&0Yb++KEEmU+Y1K*`f4k(M43V"-A#pP5l@(A9UX) +KUU"BAE-TP3r"JMbqTAj8mA8mJNf5+,Eac&P`%K6RUCGkYMUFkUABp[@Q95)dk1r +F+Bk)cP3aDlI@1DRDdB+0`PMRLqd,%PbDaChU'a'bh,Mj*8a'L190fhZf#@clIr+ +)iLYVTpX3"J5MhP'!ieh(f4H8-jEka2UB"-"p+4e"*4!ApT5i9,B%-!Me%CZ-,d@ +R(1LjVMqF(Xl0b4JV0HSK2@,(pKNIfiCMQbGlE(2R#0*`ZMlfCKcFE$Uf!+CQ(0T +@eN+6F@Jc2l$AG04+1QS51fTlF#4diHbSdB(er-!mpF"elH&dPABX$mbV$DSIdLZ +3!))iM9G$Q#MD!q'dp,(Kb&lm@82c5`d0RheTB@e'CPUCYZLL"fM40-eBeIeLJhA +q6-c+5P-RXhaALLfDj`h6[kA$[F1cA&49+d"hK*3F5A%fE&p#3+UJl,fZS2)f+IB +(K')HPK#D"lGEPGY,Yr&FZ4Y'YlrVk,rCFSZIBQpA2SqcpAJmISUpZMD+2CQZZfI +rC"5lbXFfipKcb69J2ID0qTXNa6BGqhU6FYYS%JjYhQkJfYZKf[b`81hi#pZ09AY +6E94lBXC+V9@lDik2RfTh[HMBUABVG`J!`DT1kXJ$`dR$P(ME18b)$ja,1XFFGHS +PmmVjR`#p4VKRTJI6m+mkKlP"c$peE%#LlmhdJBl&AX"3N!#-C'8V62%kQ!LYl%2 +'!RVJ`Gh,`5Mb+d96"pL8dR&@i@%8(i,"BflY8IB45pTF-(9qj9+Nk@GJPc+J68k +Je9Tme!jNpehQIl+Y),X[qp8%QD,mSFB!C,bkq)2X6l8'f@3U5Uh9dJ"NTaM)M!& +QS'#E*(!jkD%LF&Q"pAqK9QQ2PeVpNMBdG+3#5%q$-&d8'YDC"led'cm-Cr%&Z)r +AL`P",e,5G-TT6IR"FUA1ma6rFm+0V6T91cB-RN*5!L8VF1F&A!X*P9ja,jm3ibQ +pLab+FYA"[Ci*iYjlbjA6RKq%N9,@AZhj`4lA[@V2'dMcI!--*K#$SeXrMm2`,'` +GM40lq2"*d["*I2KP$,q-iH1-KZm4%m3!A%@RUmhh"MaAlXh`A2%mLA5E*bR*fDe +ScSSIim@2`SfFdBrfZ!jql-R`lKB6$JD`T4[Jbec!Y!ZHCq!'Ri-29hZQB6ZNf[- +-Rc*YN`XE%Gl"CqJI$c(#e*8!P3A-rBhYR99+SaJ2`%3m,r!r``$2-0,QI`R3rMI +!H$m!pB*R$D9Q@&8#(9NI0l6lB'M(Ff$pYf0%M+I$e*M&Lb"l[%6fH*!!IG'6#V, +M1B(,3Gjb5X&$#RC&T29+MRNX$cIAJNMm[8Gac#N5ZbPlA,HUPG2FXA''[hUC[hK +jMdYddr)`*(rThBeA9h[HiJ0qc!(b&KrfB`i3!"k+NNmQThV*ZhZ`'Ebe%j9Th9* +f5aX+5F1dJ4l0[$q2d2AchK!F&C+,ZJfh2$fG(KGlD4"la-"05G`PLYYa!0Y@caK +bQaji#`2JC,aI0"fdk@##*jZMFED%aTG!j%ZTLIVG51%CaH&(068JC2Dej8U$jh9 +XmEdqa*f)f04U&ipK+ie5DE*0LMXLEe#jpQQ+Fp2,ZkU(%`[@Ub4k*%'pe#TklP[ +kbNA2UbfHdaj(mFc5S,-EE4DP%5lB[Ke,2De*&k"8VD48#$NV@H%1)Mak30'Cc,2 +qP!iIdL5KNKBFS4pK6(Z#5p@#Rl`%R[#*,E(Y&m%)bHX`%-XkXE8AmCk*ZU*k8Mq +ik%k%A0MUSUfc&U4rE09H485SqLJeAM,XEXl05#m[eH5-TE[1Nd9+3#JRCdAdU)' +M)X[UU,!L-AQH#BNj3(UP&@QdkBLMY[2*mkb6BEa@qRFa5@b",GC"k'CZ-5&jVjp +$T1U(+Z)1B9ZVTcJ+F8`ET5@kIkT%90k`Mi5%iJXfNTM3f-+HL)Zf"#'SaqZ!9"4 +qB!6l8MTd-X&'MTZ`9cm+SGET2J4ADj1lVpM(JKM*h4Sc-6b1P%L)2S6HKjMMYFc +VGT(i8eN(R3kE1EY6iNlD5VJ6&FedDcEGfJDa@!5QrDkpLT-9JJ'`l!DQH0A"9@9 +$A%iD-3+Mea")`3U!9'2K`$DlZe9HpfL'-C!!llG9Sh")[mD*Pa%1a&2ZdH)cIN! +dRV#'",[5MiS6Sjq[A5V4dANB46)10q,&f93clf,1L!F3L2e4-Emjl'Jj215`JMJ +9l)GH81UGBQ)R&r21MIA+C&!bD-5f#QL4@H@[U9BL6a1,T$L6Q#ie#&bUMU+a#eX +QbHNII+2lqS0(dG&[eZ6"mDi-288GZ@,6p%Xh*&bF52bfi@8qYJeZ8HR3f@`QFF" +%%$Vr"EccAm"&NFFd[!k-+cf8%2+493d`I+1N#*1-+NXM''bN4,jl-j6[H1EcU4X +`5)qIUr$cGrbXNQlQ3``4%4XNYVD8$R56lq(R*Ykjhd6GJD3)*%M0+(b"Sc@q$Y0 +S[ZI[Y,e"+Fa&a#J(3106M2c'l%'i$E(FPi0h)Zh!3L+F"YrXib6HaBfF4k'Nq%2 +TU5"q!86qA5%b&@D4d4!X9fbG1rr@@rNLdM5S#eK8ReFrP`i%iQIKjLjqN!"%[f2 +mP`q19Dq6MS$Zi",)MjH1iA-85i+8*cVm@f[B`ih'Mf")hJ85'q9Ahjh'dcQZ"a' +,1MkT0JrH@IqT62kP6IaP*a')p&pAL&`3[m-3+N6Q0iJG$5RKfmNe`3Y2BS!1Kh* +8Fa$f&`&JI`8%9SFSc@mf'Gi`*fe)Ki*KqVIH&HpT[[3I6Q$rh&SPrYA3[9le1J& +I+YpLLU3KYDNH6N!BKkUBj#KajX0K`,H@FK2'NI-!,VmmHZNGT3G@@&+dX#'Z5d@ +FZV@L!eAYZ&c9D'109l3fTQL@M5EA66Zj*1N4U0Gjk'8*VfMSD14`a%jT6"raD[C +4NU5UPMB`G(Sf5kiP*j!!G!%r0i4E-1b#TK+!hm`0efGKI'lfP!$d*IMiE$L'BX& +)qNqe%1Y%*eMI`)hPKPdN`0a[,rAFJ-H(-(@BLKbML1Q`BN2PHG[c(T(jq`c2Hai +2VfV[JB`BVk`6+2$aUqCA5G8mb8MF9hZZ3P8I3#V!N!#mbFL2YS%IEB0mY+%5,2I +r2E-ikh&J%TD+q6k!RacTCTBN"XC*bhTj"AS*2crMa2fXBM%`p"QBcr)m`)'R0`* +H(hkZim$Vim$6Fq"0![$dR[%!hRKmR#3"lcSMi&eR!,cV*1#j*1#jZ212`2D!",B +()&l@i3M(CI9I[)m,`+X#FF9lVB!*+U55!-VCLLTqimRE,Al92LYK)0ci*A96XB` +[ZAKDaL[a-SLQM5E40-HkJ!i,&(5p`1NQjqejrN[)BNfhN`6E`4fHhh%8,C)+3Fc +K3SdA[2(mVYiQ)@L4(i,qka3*Z%p"CXhAXQ$695MBRZA&80R58a"!hK@)B`H#8,V +%dEI+#(h2ifFM4prc((fV12V'!(fVN!"#6@R(5-k9d,I4#(dE$G#h88,IB3PpKdh +SZdY#hefBGX*3H(P1'!Q[IEPM*lQbjC3aCR#6b'!EpP"F[ZfaNX3&#Z9jhh8dq@p +H-&9418QS'@eVA5UbX9CEmrm*Q4ceNPQ$R@iN+AH4&-F"f83"6kh6mCk`LJJXXjN +&Q46@hFB6"#A(RSlIk*!!e8cN!'Pb`'R``@c`JF)Z*+3UCP0SFJm,6D3"FRKbMd& +i-Yp+&V'%iPFFSQcf(rKlK#R'D6bZRSV#dBR$A`T(rf6IZf2NS[,r4+Jj-AI$@)5 +DVZ1Q821G9cA8I,q+S@BYNN+q*k(QL('S+D8d29kKjNLY3meABF[RF3JeIfF3DSi +BKjS5%)dRE#S5DPBl'K"UE[F,0A9bU1QrjIHQkhXDH)kmSX$ceGiZQq)AH)j`JhL +6aN`T06$06YSb2"k%R'HN'l1)&a!p9!bGKC4K'-E[UkV4K@aL(fAK4)BB0b+[Sd# +1-h4+Nbja)f8p*Uhh-e"l*5@CBK#'pN+`YPd,eI,F`+GZ`D$94Q(SPc`%4B&CbF$ +CiKI!r48rrq5'`Mm0$&!Nf,1$0Sk$#IU2b35L%N!Dpl!M0,iJKD)&KU%S*h0a"D( +S$HJ5&XGA244G20&3p(SFiEKdP$11$(m$L!MQ4P[[iab-eK8*4KZk#%E29NKLeq& +SJF'%@SDMNdreNX24l8A$d4L4aX,0Vf&@mBek(T!!0Sc5JkN581-"93p,*dZ239J +k)S@PNYSj'db"U6GH#N`EG*k&H(@@9cm)3,q`G$f[H1Z66)TV@FV0mdfbH9iNjH% +#GaQa-(8l%)+05L!e#mEk*XmDU%m-#f6aSVq8r%"&M"BBQH`,H&Uje@c(kejXpVb +YPlClM)*@&(hkb2-1(H'K$-mlRSAB1(N("+E`L[d%PRM#6b6-Vc"NR5q&V"'rN!" +e#crf&ZZaKeT4V6rah-HC6c-+@QG*35[Gh#F*M@Pq3G&[m,1##id94B4'Zm4q$&l +I&h8K8A)@"qrU,X(EKjpe8L",i&h0`6X&i&hYH9d#la3Uh'N#lcSMm+iV!YjeIZ! +e#'XISQ#D!$X,JQT4"8(YI!5ed3U#@Pr&)U6afFQ%Y38'BDe9c&88eRDe4'#X!Y[ +&Y3jXccLUZa#6(aQ(YPi[4qYLSr#fMU2ibbj4r$aeAe+`5bMqNU2iCD$i5mqE%ST +IaXqE*K6h'U'iY`L+Hre3E"$k!X@,23Z[T6mR$)9N,F,HLDE$'i@p)ccXCGeiM5R +`G6BBK,hE&4+4&2D5k'bS6GJlX9$%+1api(X5pMk`B5*KlmJV#AYjQ-6#hRFHYl$ +hrDU([42GK$81HaI#U&JS(qADBXkq)4I&$c4(#V8jFK'i`TcR`PVLBEI6K`V$,cp +@ecr,#KFBXJ*4X&F,Xh-3KL1TTfZ149MHXR9L,2G2R+9,$Ql30+-0D4I(`JY,A#L +9I4R#lKj+3U!8"5VBVelbB6ie2XJ6&*CaGpFFpC,lIaRfK&aZRfBaU[V,)CG"NX) +FPU6!ELP"!G0i3aSpQ#UD[6GUN!!#mH%8[J!@V1'&ccj2V8p%ZS,,P+lJJj!!mE, +LG&4B2SK#1%J-QBdN"TFZ!HNL,YATX%8rfQNj[[ZNDjYD3A0Uf`5SD+ALj%CH!@r +Z3fE3YJhUbT0Yd2!H$kfSmDN,pG4%ci9k(K+9E8GLc#LDY)53!(jhq[dlpbNNa#$ +-BpA[eRr+#J)CTij!3GHaY"')f`IGdkH18l@%m%H0`Rik-aQUeL0%STcmAPk)UJ5 +0(f4&8#`3"m#IcS06*p%Kd-J4#Z"0(5qkNDM2#m$DPh%6!dIE48HVNBifM6Thdp( +k)%TYBMYrpHE"c+N6d!e$U(YHjidZ)25!m(fcUb4QIX3)#&V$6+%+$VQ+(9)A#rD +Ca(#KFAR82rh"P-Z!8TPGHjZNlkH2&*-ZjU5PFKI8em@&XSlk[c-9E@A0E[%Qf%* +"Vmjb1a@'5f4&XaB,*328ECGe"N0"K-)hIB#NDb"A6'cV3i"VBH&e'5qL,MHEjBT +$@`5P,fKIY31B5%9b'+UTHrV+,%dX0(hPRN1C+rHXc!SHA*NP(JX')MY&5aC%2*, +L,61(%ELE)f%c'UUK*Q5Y4BiMV-La9lhNRfFL[%Y3,jRC&"N@Mp9iJaGe&`hCei" +pCD+BQ296aDNp@jdBHKV-P2T2TH+qHYi4jl%&hpCAQj%SpE%ZJ+,"`B3R&+I'+Bi +iKMUf"+1kR5Mqfmi+#NZL'%AK2Sr$YK%DZKA2FD+2L3%UBKIj&a$Z0UR$AVZpYU* +5"LB%H(ND5RQPSY4Z%6!@'"fd!'!XQ!JBXiU!d3Bh&(IKMA5LH4%V#2eB!i3&rmF +JI,mS#+[B493-5803VM)km#U!FYABJh,R$AkJp'-08+lkR`c+r@-*bYSA)jqCC#e +'[[,S+bp'2[-AeQ,N+l1V8)`mLaTITLB38*Mk'Fe4fB%pq0E&*5ZRbDjY-L+$EYi +*'$L`X3a2)m`B3b+8PZR#k@hNd1E&XCp4B`&6X`@&a8I55EEDr8!Y&jTX*F!DGj, +qUTDL4e([Q%ckqd%d(G6+8VGRjXX'5""#2TSj-eqDFSDk#Z2M&5'l8bl`qHqC4`j +Sl9e6+$Fp5P8S+$8Q"j1T2p*6FU&-GdYl2HqLpbD*lSi21XhcAU0r5erE1$aVprG +G2LAqh0VeRmGT&r!N5ECaXEdX$GREGN-*f80&1HKrjY4mU)'piD@+-iqN(c!LK6A +`d)j$YUcF8"JjV2K!'%La-9,18R"SdIHj8Ha%N`F52Y(1iP9$fMJ"!HQ&4c)UTU+ +,j4PaBdH%ULJ4rbS6NC'@8hXUH"1fAmI"bA8QQ+DF@[Y*@A"IqhDRl9LMSR8f@"b +mf(X[LVX[+liqbk`dI,r1a8Qi3G`C(mFEV-eeGB+%R,6FF"J9[!*FX*@UZY$5L5f +%k("b#d'm`@'R5e1mR@NS9,5q,1Ee49fRp6pCVedNMZM)$AF('1d[,G0Q9+JjKI6 +rIX9IA@R$JY39KP!rN!"eGZhk-YrYPP[1`2R2K'NG3Lcpf[@"11eX)`AGKD8bMU5 +Q@J2D)NTD'#MND,KGJC1abGE6U*6ebm#B8pc3B&CSbi#+9F2-0)F4U#PS4Vl#J4C +ji((p-F@R9$JSchK3Nh*'mHCpLeYb`lBlSlZMIkR'9KBeGFm@mLE5UdT&MfBm`d2 +54kFm4Gq0cml*N!!NQNMrV-)"AU1M08b'N@!dd#'4F8QC8X8TJY(!Xri$H92-,QP +S$%aGE$"[jKNhEc*TTRQZ!J55NN$*R'4@GJlINDDdd-2XNrc"V*MIK5+LX0H6LKN +0VbqC@8E"rZ!fG0FlS"URMF0XL@XK&8(VSX,QIeeXd($%D9SX-JcAVNePJaZ0'4F +[)b#,UI+BUGY9J`[qMIbB9Xq@R$QS1+LN2P45hGRfk'Md!bR"bN29e'Y4,rPM-EB +p'j!!aYlBl`T409dJlZ31K-N*Jd,5HDTG99hQNBNY8j%Sm&[Qd`BXSF05G4!+N3k +iD2fl&AaZ`1G+-TXLMFmVUhHA1Cp[M#3'TbTLC+T5QDUipi"6Gmh39`0KmaTA)9, +pijXl3k'6lG03f1*aH!MXIRC!1mE4B[`aY2[C2GUPhM`FIKi1Ic81RjCV`TqK+GD +c0e6+4%Z)rN+qK#34mkNAi)K!C4Y`F"%(EqSdilB5YlSDml`Vp'rTP4Z'C`e8*aU +!SkPcUU+6`$('"!j&15FQK*V*%5Tq&Gq"CY!HpdF1S(-1VrpR$U)j"#)cJHJdQ38 +CNiF3k8L)LrS!),AIZ(*4%S-8iSa"*6Z+30%GL'09jmI'pGD3!29HrdTUa'LHHXQ +MPk[!U0$+L!Vl!ePQmIGCEF9j9&`5kEQm!B$Q6*bZe'TbPq*r!e&NTSG(U3J-#4Z +Gm@URVlCrV-h3TX*#Ui$m#YK%UXLQd"J)e%`GDci,U3ENH(A#9E-9Phm)KDPal[Y +KSMVj0XYKUH%X9j,F"*&$&m9P,Tc-M4*Nc@c0CFeX'EK4CNY&Rkb0Dqhh%kZ[IZ0 +DJ5lHb8%0JJ0b!G*@+"VeQm[F+@*#K,Cah5)9*XD,VKa(iNlHH*KNk,ZqSTj(PI( +UZ&5JkS3Cl[U8ZK$hB*[X()HjrlP9AH1U!9b%+c-G8J-A204FV%M&GAa5ibkLR`i +EJN4@K$QbLDYMc49kEAfh)*D#m"LZQQ0dpL*VB#*D*ZiB4FMMlX%dIkFS%U6ZN9b +LD*jUpQUV5a30keAUqVBG3aMXR$PX$6ZhZ@'@1b2C40%jPMM3RR8XBeE5DM,Y +paJklUqZbYB8%l8"2YJNe9Kc3Ci**U!HheJ!BfdRBI*!!3V%S(VUMcr('rD3`&)% +QECVfDr*i),J!(fk8(Ql%``h5``eiq)Idm!mmc*FHjZ2Klp,$hr&`PI4`&4kZN4k +Z`F-mk@%H(Zk6(Zl$`bcTB4BH(T!!(KkSAG$qQ-mSD0HrmU$pXEZ0J[Ee%`RDFfQ +cN!$!Ule%E&IH,hriDPdJ,L9hi%Kq@QU1SX$PFVpQZhYk`Hbd-`Ri)aiXQ$d6"H0 +@cKEK[%&$M2LBm5"2m*RJRVjL'C)!-PFX5fNEa%0p2A-VKi**B0QR29`+MQ#jBJi +a@c&(2,KL$M%VQ#-c@c%R!ilY&IG`0[G`0[FmH8p+EVIG,NfAc#-[8Z$l`aEA+"c +9YPhB[YVA'R3(cJI1Na#XMi9Rpil#(FZGXI&KHL5(GVK96aYGcjUhNM#LP`NC9%b +4'8j[$%)M$d"NCd#-j"EQd'+RpL&B%L[VP3JQ2k(B)MRQV8%hA&EQMLdm25`hXM1 +lpChQ'SXZXD5l,"+")a`I6YCB#R$"'*ePl5FD'kU2DAK*YhDqD'RV6Je!c0Q3!+l +#bBKIKHC)q!,E3#$)Ll(`0Mj'R5+EHTQ4PjkEcqmB+'i'H6iB,Ne%42LlIfN@Gll +p353D[ZX[EE[3i,*%p-JrpEmk9qPfce$Y%d0hPT2j63kafhBUYMY$j16'V6Pb(XZ +fdl*IadH'63m2NXUJfD,cGf)3IQcK9M'NE`XU@8mSjN,RYKlD(2XFi$[(##`Zc@$ +%+@IN-$1eG90(H'Kh4pLjqbG)[Z&%"8GZd[rUI1A1jGGTR-%R&G[b[fR-Jmf$B)V +'Jj'UFeXT*a0rF'XM9hS5QZ@j`"E*cC!!PZ&Q3$d3fqLDLNQii*Uifce9mD+T,HI +Z0YcfUfaBZJf2@6iNQpbfflFe*IGNJJ4%Beacjb@CJ0AeLZk&9Yfl'rV#3rSq1CJ +,+XmlecG(G[lcVq'&HMJEFGNLLra5Td$9mY#8akHb`U'*#c6YJ5f"Tr'+S6M-'bc +9UFkLm8XEDcEM0JM4A34@0feFFiGLlQ86FHRKBNRK@mi!M%e33M(Xe(GSmQZf)58 +f%H64*Gaf!$6KP0cJMYpX#RrkPqC`+i&lijj0VY&Q$'R@a!khEZPBX1I1[ZK@F@p +Pi)[hi25%d@%&XJkh)J6jE50dX4['6QEEE#)R8jZUdYV4T()f3bj!j3@#qi(1jSL +#p!*pj3iX1%-6BJ3`B[5lGc-bR(F#p2c@$19FlU2N0qGZh!6M9i)Nh8qK!ZXd3i- +RZNDq)6%CfX-jc#5$`'K&bQ$QLYE10['VfhBScM[`!'A!(r'e3cY@Y$TLp+IcY6Y +fN!#*f#HT$c@q%L4h#*SMl4aCmBPQU2QpP8Y@Y'UF0&am8@AZE'B-"i(b`@Ca4p" +1,T*ZN`*50`9"C-XE946[piG'2CjPLQd8+B"+@4iZmG")&f%Lp'Y@SH1089)0R-d +mf3NE49`a3QAXjRLUb0fLl29P@J"(h'r2YeEf"LVd!`4rCq2S*PH`-4`SFC80C3I +imI2SX)iB@qliXU5iB"61pVP-6*&`+i%KNqmc,GZ,TJ2Q"Z!`1q6'a!D),HGD1[S +#QB@9B-E!H#VFm6X$`qc&Ek4Z(!l`e,4-HcDXVA"D@R%k*jNU92pAjeQ9`B866%+ +AL@VG6UM%#536Y$2"6"H2JrSd2qZ5QmbPG'i*3"2BM@BM&iKBqU8bl@3@2d@,L`M +1)RFLb)8be#Z9e08me[5f2K+p-`$cT6eT9'I"LlT1*dXLU94U&#Je8Pj&*,V!#(- +prarc"m6%""FZP,1lX"b#p!2GHCJq6ThleEN0p"9dDkFj@SaCKrTSb3+ApK(GH5) +leFD5Cp9,9Qap'i9hB(`&!-kT5J2V'%lZ,6eFN6MchDb$bbaEZBK$1ja*-%)+6ZD +hLKCrKX&SdV!ZkQl6()mHrXi8H[AYCmE)rabZ49aLcrfViFUS(XPdiR&F-X[Xi&f +TTr8V&p+5lZR&aLH5Kfa3NRGP9hV5F2!F0iIMG6#MU@%bdCddc"Lqj)mi6HPKECN +9GCa`dC!!F(6j6EmkCdLq$Z4A4RF")*ARX+&MeSM"H&*m96me,Lb4BU0210#F`41 +$-aJ*[cC8(MmLH+8fDr+SXZ,iadTFq6C@-Aje$YX18MAlpM08-`cScZ5m*'Fa1@l +JBVUH!5h)J*EJ$l5JSV0`YLhe%T'I$3D)X84`NZ65lG1NDLPpJLS1`&(CF+P4VmI +"jN49dQ$()b$#MHSlJ[6Z&TA8Q04R#d(QQD%$#fp"-mX())@F)#N'9eL,LN6C#-b +A06b3!-SpMbL&YhL*-c"aaJ&[[*6AV`R,S@`2,3F@mqA#K'$#fQ,J6%JJ8cJHmBT +$#AY3J6[EIfpV9"l@j,@[3P*X$!maM4-2$iGHBd-d9h'A'l3AZDJj$"m3I4#"f[3 +Z'FBi`iFj`iFj`jJa`rqd-Xa*-f*("X0YD**3LH#2L#3NRH,66i16"`P*q15$ScV +hLThkZE!G#6dDEDU4`3R8-Q"mMNBkXZ$fS@*pZii5)cJBScapVNCTUUF'k#kP`%3 ++$j93JKqDJdFBUB0D1S1iFBqUj+*-Z8L`d+(*,amZ&QY4%M9HQ3PI*J5M8'%$Ve$ +mH+6-L#LIb8@)j5*)Tf[5QB-)aP5KA6f+VN+'3pMF-L48)%,&Z85Q!ANq+hQQBbZ +bDPk@N5j64#5*"#Bk+P6YBBh0UN6Sp$fi'"FQ)P8#VYK(jU)#0"DJQ%jiRaiT*Jq +DUCN866Y2RRqB@-J6`TB59qCf,ddb*bKr011DL[1'DT6E&I0ZI+6A(!80!+rP@aF +FSUI0[aFEf@3f8+(,m*TC8-#2X5l)Nf`dH8M'dfPUF"NlPmCQAGVKC42j*jXa-3Q +%4!!E@m)4Z'#pl2-jZafYLpR*cF!0!J$"($f-KZKCGcAEMD6Y6(,E4JLFa!4+h', +-5+li2eqF41k[h!%01"BbN!"#&(SjSZRL"ITh#*`l65"fZNHYS#9Pdr#N)ZdT"M# +%M%1TqcB4J&qN!MLUQf%qMUT1)F`ENX&K+SE",pIV"cB4,MS*m8Pa-JT8&5%TMj! +!1-[mYF)14XU)0'Y4dbN[mr0b!N0&Nif"kZf6@Ce9`+c"E9(PK@-&VUS`iJp)kMF +K"@hFq5(&9L&5USf3!0*[)Q5U-KI-kT@j$M6PJK#@GcRfNB#%([!ZY#SmKB)b'Ai +U,`&8&TrB0UB+GbbP$GHp2%ULHI!NUUN6$Fl%m3f+*PPd!ke19'5TX@$'TP[$jE4 +4bMd@jS6pBM86`a991[C+VQ3*#T(&2M+%fR"09kh0Z++`&emV6'5Cd0l#"XR6qD8 +dT)AJR*-D[-PI`iXR$@8VNd-BBm%B3P6j'1VBjfi0PbTdc%4blTl'F6D9BTNGGBf +f)46+bi1i(d,9hDBmM-$ZMN2#&j9K6`dkiIjY)"@S%,FT2[U!i#(5m4JFmpZ8ZSh +$Q'c4iM*lCiDq(MJj)$E5N!"ZZbC(5cf@)MXTmU2NT"L3!,kE4#b-+#YB!F3m!M9 +%Pl3m%iJbU$3kJm2lM!l[0i8,(Pa+8!*H9+IFb,X8UXLU-KPThbUU*-EF4j8LcqC +8,*Up-!Yp5+2aPF9`mBZkJUQ+Vp$-31TSS*GYI9!e',T)db1aif[$%,VBK$'U(AR +X84)@af!`l8-A48dJ4*(J!1-C$S"Q,KkmA4m$5FffAHL%C%5bc`!ZPCT5*&2+"K" +lB4c@XiYYj'pJJ3i"QifVCi0XFQ8Vqa`G0@m+NX`VE5BDp19Gc#Nb"rUC@AZfAVN +l,-*-KUXdE+PjmGM!"PGPSXVfmS#i)r5DGc4K3,-)RGPCd4)9"S915ij[jT0S1XY +bhl"VGlHVa[R)&3b[%hFN[BB%c#Vr!G[e,pbqSHpqQKicI9`8YQaaSG,'T-Al0)Z +`3AUBLb,N"KFMC-h%%G58*V2J8"6Z-HT#i38Y6E2$"M8jY[CaTaC8)c-[R&IL5Z1 +LKB)G5Mp5,rQLi@dp'C@k3'3Nh,K#VaSDE!ihVY9MiCLQKDX8&cam5N`6Smd!FZI +"'@a*1FQkEhSj!(Fi54-bpf$+62mLLZB*'JNPERUSCYd),R*$c9MCh%*m('e[!r& +44cXGiVYk(1)HFKTq%FeZ*%-3*NTKZ9D+3G)SjjH,ABj`l33BC9L!UMKGL)%*a2T +fS,ZI,k',Z&$Sj#6[PU8,&2-Jf'j(3e9P9TjG-1@Xq'IP&'2&Lr1D',eKYqp2,B@ +PEq*%$6br)CZqTXqS1XiIRH)'EITckAE*ULH6FFVY(*Ad@6,*kA-%33)A$H9Fi$U +*EEJ"hU$%f@CHd+8"2cT(TAY2@XZ3!%lj8%P%)#SUL3k[HdqacI6*Ub4f$MRb8N& +`UNGXT'T"f4G@daH%fATGA@k,B22TkIe3X-,`FiD6d#J!AJr6kd`8p&,iIaH%R[& +A$3YIAIR2FkX(K%pQ,IMC!Q(,Sr5IfRhAA8+UqMCebV([U`qTXj)[*#mAi[%cjQR +e6jI1QL'N#LI96VAPXH5X+fUhm)C`6I)cqYi[2K3bK,m,1A15e`SpDN8Hf+lqG(E +be-[UR`Y6K'A*,bGrmq%h(`PKiBr55'(Cdm+Xj-[*%i36kj+rQ5HX6,iXr#pq9J[ +Pdi6IMKH5a`XPR,D2Ir$JqDI(MAYkF-Z9`EL"+pd$3N!S%cjqqYGA[K&q[5#j3qK +EX--Mi&*abN2U(d`6hRrd8H&r(hhdihYQ#+-cK1GR#*-H%jDH'1J@hTJKV&FApLa +,[LdjIh#r-&Ypp0M"j1mNIcAiTYV@,*`EI($DmVd6fS5r6#[TX3Yad`6DY"S[1!! +5HlHkM,%9hRpVdD)[m#2m1eiFZ9#`iN,"FRA+B*[`@h@Hm0)9B8!pmkRAe@ZZ##G +AR4$1G3JG"6p8(def*,mP("EqCHPJBQpb6R,cB&Rh0m,,dSK[IUM15IjPmT[#EiA +8TB-e(bBA*JqS0h,+mM(1mF-RKHR#%R@Mm%2K'Z(idbGA#"H&`Cl9VkZr&Ei8TJi +rqFePSHI#clU&eaHTAlc5*hamcB3([KR6*rcN"m,&mGhMZfHF(bGd,jmf45KF1H2 +e'5H&Lr1&Mhrpia-[#4GI%ljpjMG#GSI`c+rlIR5ZHmaj!*!$'!!!*)J!!&Hi!*! +$#!#3!b!!!$mm!!HTm!#3!`TB`!"G`!!!AF!!N!3Z399c-J#3"306C@Fb"h0PCfe +PER46C@Fc"h0PCfePER46C@Fd"h0PCfePER3!!"TZ!*!$!AB!6R&+JfBL3Hd!)#! +m2c`!!#)mUI!!!8T"CJ4+3'F+5%")35#!)8%!"%+R3IVrcY$m!3![##mm!!!CELm +$B3!#V&52Cd"#1!TH3UF[2%4"9%%r2!69U"p`!4(!#Pj+RfFB6R%`2+P`TdC$qJ! +U)SK"qJ!J-$bTF+C(5S0R"(!"6R91l3!L6R&+JfB#UI4`!%jeB!B!N!8"6R%I1[r +f5KpQ%NMRi1""q[rU80"1ZJ@Z60m("bmkrpj1G@"b38a"4%4$69!!!`#30&"b3@e +)jf$`G&#I`Lp)!#!J6b*8-@N!&!!B)8!!*$&m!!%!,0+4)8%!,U!#hm*-h`m'6R9 ++1!THC``J+J!)C``J3#!3C`B[1[q%6R9)jam'3IVrRR!-)LS!"-+i!aTKT'B!!6j +)H[q16VS(EPK2X(Vr@QB!!3kK'Li)##S!3!!%C`BJH!+QS"XX+J!%+LS!#"JU!!5 +Ae*A8)$Vr9U%H2cJ#)'B!!1a86ba))$Vr4#)'`VJ$'PK"B3$r6#!krcc!Z!-D3IV +r1##!5S9Q"+%LB!3J4D!RCJ!!Y#T))!j3J%(kr`JJJ#!kr`T4J%(kr`!JJ%*R5(S +![#m95(Vr!LmkrZ)[1[lL,cVqbLmkrXS[1[l+B3!06M!ICb!r!%U&C`JJ6D!US#Y +J"#"0S#-J6U!I)%HJ'c(I!L"JB#"1S"mJ4k!EFJ!5"1F*iaRN%3!"!#!#!3$J)%f +JD3)!!"q!!5"0S'V9e0I83IVqGNU3!'F)F!'JQ(!$S*JJ659)!!K`!%cIB2K1G8c +IB2KJ!2kq2`!J6U!I)%HJ'c(I!L$9e0I8-$J#)$(!#Q#4b#9)!!K-hf$i6R919J! +!51F!1#KZ!!a(q[iU4IVq+L!8X**Y"#!5+)"+J'm5)&-LEJ!)SLiJ&0'6NC*`!'! +%-$crf8cI(!"1ANje6PErb%MR(MJQ,J!)+#i!$#KZ!"""q[fk,8Mre%)ZrmLK'Le +)rma96kJF-"mk!!a&!!"[A%KZrq``"90&2`#S$e92,blrl+J0-"mm!!a'!!"[h%) +RUCYC6bmZrq``"P0'2`#S$L!I,8$rm()"(`'TQb"Zrr"+N!"R%&92,`LTTM!I5-" +b"-#"Cm3[,[r`UD0J["!Z!"4R#PP2,VJ#TL"IS"Xr2+$m6VS%KP42,8$rd%U!C`! +"RLm!6VS$ePK25J"R#R!"(8!!&Nlk!KK)E[rN5'lri%KZrpK1ZJ9U6qm!$#!Zrq# +K(Le)rp`J#'F!!@3J,[rNS4iY52rS)!KR!!&8,blrj#m)6VS&Z&"2)!0Q!!#Q@8m +[2%024%9#CkJI)"mY32r`5S"R!!#1)%!L8()Bdm%[#8kk",4B6h)$X%&QGL!0)%" +`+0(!,8Mrp#*Zrr!N8A!BeF!Y5[ri,`T1ZJ5k@%mY32rm)'lrm+!T8%SQE[r8*dS +!+&P2,blrm%kk&F`J(h,Sd)&4J#G!!#a96dKkrM)[,[rd5'lrr#m-,`3[,[rF,bl +ri#mZrqK1ZJV'9%m[,[r`UD-NE[r8*@lrd!!-*@lrh!!3*@lri!!8*@lrk!!B2cb +KQ%kk!eC86bC!2cbSRdkk!dT86b)!)!Z`J@B%F!"J!R!")!!P3!!F*83!)#9-!#4 +)H[[-2cbJr$mmS2a1ZJ,i9%mI!%kk&9)r2+'B6VS$$&425S"R"(!"S*JJI!!!!9S +`%%M!i)"b"V#"CJa"qJ#Z)R`!!!-m)SJGI!!"rmJJE[r-S"Y96kJF-"mk!!a&!!" +[G%KZrq``"90&2`#S$e92,blrl+J0-"mm!!a'!!"[h%)RUCYC6bmZrq``"P0'2`# +S$L!I,8$rm()"(`'TQe92,blrm+QQ-"p)`()%`)&R##mZrr#TSQ$#*'lrm%U5Ca" +96bm+UDB`(dM!FJ6!J@HU,`UTSf#N%#lrb"e!!"C-haai6PiJAdr[!!j1d%j@rra +)j`!`3Llrr$mmS2a1ZJ)X9%mN3%U!Ce`[!%kk!B"B6dS!Ce!J#LC!)%![+!!-2cb +Jr$mmS2a1ZJ(H9%mI!%kk&$JJ5b"S!"#J(b",)'J!'+!I)(`!!!&D-"")`1#!FJD +`J@B+F!!JI!!!!c`JJ"em!!(rr"!Zrra-h``!6Pj1G8j@rqK)jami@8qTG5!I+J" +)E[rSU(3J$5"!)""bKY#",8$rr#"!A%K$l[rX)YJLf&P2,ca%394"2c`%eDQJ)"m +S3#"!*&!b+J!)NQS!"$`"0#S!"T4U!!)q!MBZrr*)`cJZrqj)a*D%1!&)a*D%DJ* +5Jq+$282rpMBZrr")`cJZrqa)a*D%1!*)a*D%DJ*5Jq+$282rp$BZrrE@36e$rrS +b,[rddN)p3Iri@8p#TdKZrr4)HJ"QFJ%I!A)"2`&brbm"3LG#TkN6)"mQ3#m!U(- +'K3#3!hJ[$#",F"$4`#m)U2CC6kPe)"q`K@3#B2496kPd%"pQ!Q$fF2mr!%*R)"q +J-Lm,U43[$+QM,blrk+Kc60mFq%jH6R8!!J!!6PB!!%MR!$!NEJ!))!SQ3#"!)LJ +!!Jb"38a"4'B@)LJ!"Jb"4%008'B+-#J!#R)$X%&R"(!!B!*`!8cI$!"1ANje,`T +C6cmmU'j`!4m!6VS5H#"I*%KC6cmmUQj`!4m!6VS5CL*I)%Uab@B'-$`#!'!%-$` +%!#4I6R919J!!,`-f,J!)-!0)`!+!!!!)!%U!E`4`!@!#F!!Q(djH6R919[rm51F +F!$BZ!!Jr!dkkrma86ae!rrab!E!"CK!#3`Ir6VVrJ,"$EJ4`!'!S@8mr2+LIF!% +I!%kk%I!J(bS!@8mr!amZrra1ZK(J)"mS!,#&CJ*`!%cI!$K1ANje6PB!!%MR'$! +i,J!)*'i!#L"+)"!Q3#"!-K!-38&%CLJb+!!#$%&$8QBH0J4brlC"CaSJ+!!%FKM +LU!+!!*!$rc)$5-'`J@F%F!"J!R!"(8!!$NcI$"K1AL"IA%p1d%j@!!"96dKZ!!K +`rcm!6VVrNK!ICa)JEJ!))#J!"()BiUJ#3!$rB!*`rdjH6R919J!!98p)EJ!)F2m +r!%kkrf33(fF3)'i!##!S!!3#J!$rN!0J!R$r6Pj1G8j@!!")jaJi*Qi!##KZ!!` +J5c#m!`&`!#4-*)!Q2!!!!56ANJD5!!!#5!D5!*!$)#Jm!*!$J0Q5fC)S2!!!"*! +!fC,ANYQ5"T)!N!0m"T)!!)!!F!!NEJ!3*)!'NJ#3!b3'NJ#3!b!'NJ#3!dJ'NJ# +3!cj#3%cI("K1ANje6PErj%MR(cJQEJ!)+Li!$#!,+%!Y32rSF#6C`#e-rqa`)0R +!,8crm(")fF!Y62rdF$lC`#!-N!#,X)9M"R"P6[S!XN*!2J"#3$e!rq3f"h!NYN" +N5(!%YN"N"(!!B!a`!$!$@B"U!PD!j)"i!$J$,86rq0LZrqJN4"5!)#lrq0#!d+l +rm#"!-+lrj(!"&"*b!")#if$4E[rN8NGJX%*!2J"`!6`!0JG`(lC!C%4`!EC!C!4 +`!'!-F!!`!e1!DJ*5J1+!H!!i!be%rrcBV[rX*%38J#!Zrrc3J0#Zrr3J3$#'F!% +8%R)!%J,MB0a!8NGJY%*!60mFq%jH6R919[r`51FI1#4Z!!JQEJ!-1Li!%#KZ!"* +#3$`!-J9`!$!"d)!d"R)!-J+`J@m83N!d"R)!-J,5JG+-)%%`J&*'B0T#3$`!F!) +p32rb0JDf4@3!!,K#3$i!3N!p32r`F!!`!q@!d)SJ3#!3,8$rp$)'F!!`!G#,)%! +B%(B!&J5f4f-!!))`,[rfFJ(!3G&Zrr"`!$!$8i!d"h)!-J+`J@mq1#lrm(B!0J3 +Y3rrmeS2@M#"$5P"Q%L!Zrrc3J0#-)%!`V[rb9'lrmM)Zrr"`!$!"d)$3M#"!-"! +p32r`B"B`"G"!d%Bd,[r`FJ!b!Y+"dS`J36#!8NFJ,[rdiSJY32rdB!$rE&*'B!$ +r4%cI(2K1ANje6PErr%MR($!NEJ!)0Li!$#CZ!!ib!h!!-!(QJ$J!-!0b"m""1J" +`!#e!rr`d"()!-J,5LL""%K"`!"!"0!9b!$)#iU"b!F#"dDlrr#)ZrrcMLG+,)%% +b%(!!-!%Y32rm8N8`"A))X%&Q"N*!1J"54$)Z!"*`!$!"d)#`V[rmB`*JUK!Zrrm +5,J!6dJ'3!!&-h``i6Pj1G8j@rra)jamJ*'i!#$JZ!!`k,J!1-J4`!$!"jS!m!$) +%G!I#3Mi"GJ!f!0D+)%-3%(3!&!!Y3[rmF!!`!63&FJ!b!Y#"jS"b!V#"C`ab!E# +"Cb"+J'FdB$)d"R)!-J*8JG++)%%5%(!!%!&b%11SJDlrr$3'FJ!b!P+"dSSJ34) +3F!!3!H')JDlrr#!Zrr`d"h)!-J,LU#e!rra`rh)J0J9d!$3$NS,LU-"Zrrj-h`6 +i6Pj1G8j@rpK)jami*Qi!##KZ!!iJ2!!!!564VJ!5)$`!!!*)dDi!%L!Z!")Y32r +XFL$6VJ!5)Li!%Le"rr!N2!#3!i$9VJ!5*#i!%Le#rr3N5aJ5GJ!@"#e$rrMQJhS +(aN953ce$rp`Q,[riiS0k!mC&9%-p3rrQGJ%k,[rQkf-p3rrSIN$)"h`!(!3p4[r +LH!(VC&0%286ri#SZrrKq!FU(C`Kk!$S%8i9J!RVr28ArhRJ)286rj%T'CdB[,J! +5,`!r!e*+,`T1Z[mk6qm!$ZG!d@lrj#mZ!")[,[r`2`-[,[rX6VS,#%r[!!i[,[r +d2`-[,[rX,blrm%kkr+a2l`!13N!p32rB-#lrf,"Z!!aN!!%k-#lriQFk*%!r,[r +S,blrp$mZrq3[#dkkrBj2l`!-%J!J#R!!%!%p32rDG!!d!05Zrq`J3K!3FJ!5!00 +Zrq4J($mZrqBr,[rN,`Y1Z[h`8%mp32rD-#lrjY&Zrq3`,[rDX'lrhQB@-Llrf&* +ZrpK`!$!"d)`J3%)3B!$rHM!ZrpU`E[rJCJ!!P$!Zrq*R1L4!2blrk#mZrr3r,[r +N,`Y1Z[d'6qm!$")!)!T`!"!"28$rfR3!0!$8V[rX)%)3%()!%J$6E[rNB"`r,[r +Q2blrj#m,6VVpD&"228$rfM!ZrqE4E[rN9QlrfM!ZrpT6E[rD5N"R!2m!1#lrf(B +!0J3Y3rrm8i2@M#"$%"!L,[rmdS`J34#!8Qlrf'$1%#lrhG!ZrpXd,[rB8Qlrf() +!-J,5M#""%)"J!2kq-Llrj(!!-!&HJ1D!60mFq%jH6R919[q-51FI1#CZ!!JU,J! +-+'i!%#`Z!"3Y5rr)F#6A`#e,rq"`)0I!,8[rc(")em!Y5rrN,8crP#Bm!!!"*0H +Zrj3J2!!!!NM4V[q8F#$4V[q8+$`!N!1!fDlrP0QZrj3YE[q8rl3S2!!!"*!!fDl +rP#eZrj6rZ0HZrj3YE[q8rlcCV[q8,@lrP2r8F(c4V[q8,@lrP2qN)$`!!)!!dDl +rP#!Zrj53!)b`K@-+F'8p3!!S6[S'HR!!,J"#3$e!ri`NE[qNeI`!!)!!,8VrU#e +Zrk6rN!!YI!!!J!$rk%KZrqJ[,[qN)'i!*%k3!&"2)#lrk'B+F'Fp3!!S6[S'0#4 +Zrj!!8NUel[qSBfJJE[q3!&*)NHlrU#e)rr3JE[q3!*(Zrk3Y52r`)'lrU*(Zrj! +!,8Mrl#!)C`iJE[q3!#*Zrk3J,[rXSLiNE[qNeHlrl#e+rj!!5'lrm#mZrk3JEJ! +N6T!!8%mJ,[r`X+lrp'3+F'Fp3!!S6[S&`#"Zrj!!8UlrN!!3%"e!rk"b!")!dN& +636e"rp!`,[r3d%!p32r5)'i!(#!3d+i!)#e!rl!N3#m-,blrZ$mm!53[,[q3!%k +kqr*2l`!1-J!J#R!!-!(4V[q3!#m-,blrY$mm!53[,[qi6VS(ZNr[!!i[,[qm2c` +"*#mZrlJ[,[qd6VVjA%r[!!iN3#m-,blrZ$mZrp![,[q3!%kkqk"2l`!1-J!J#R! +!-!(4V[q3!#m-,blrY$mZrp![,[qi6VS(D%r[!!i[,[r82blrd#mZrlJ[,[qd6VV +j#Nr[!!j`!#i!3N!p32q-,@i!)2qX)'lrV,(Zrl"N!!5S3N!p32qB$'i#52qBC!! +!`M!ZriaQ!!#-*'lrN!"55VAZrkKMD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHlrT#e +)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8VrN!" +)E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T`Cce!!#K1qJ4#)'lrN!"5V[q3!") +3F!!3!5i!F!Jp32q--!Gb!F""d@lrQ$)ZrjK`!$!"d)$3V[qm)%!`%$e!rjJJ"q+ +),J"6E[q-B!$r1!4Z!NMrQ!aZ!3$rQ'33)'lrV&+Zrk`3V[qCB!$r#!4Z!3$rQ$J +ZrjKf!$B%,82rq0D$eUlrc#"$-"!p32qD)Llrq0+ZrmJJ34)3F!!3!6e!rja+3'F +!!-)-EJ!BriaL!!#B*'lrN!"55VAZrkKMD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHl +rT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8V +rN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T`Cce!!#K1qJ-S)'lrN!"5V[q +3!")3F!!3!63Zriab!$)#ikL1J&"ZriaJ!2pLF2pb)$JZrjaf!$B%NS2LU-"(d@l +rQL!(jUJZ!*PZria#3$e!rjJ`,[qBX'lrdQ3!!-)`,[q-CJ!!M#4Zrj!!8NUel[q +SBfJJE[q3!&*)NHlrU#e)rr3JE[q3!*(Zrk3Y52r`)'lrU*(Zrj!!,8Mrl#!)C`i +JE[q3!#*Zrk3J,[rXSLiNE[qNeHlrl#e+rj!!5'lrm#mZrk3JEJ!N6T!!8%mJ,[r +`X+lrp'3+F'Fp3!!S6[S#@#"Zrj!!8UlrN!!5%(!!%!%Z!(!)28$rM$!(FJ(!3G& +ZrjJb,[qBF!!`!G#!d+lre#"!-"!p32qB)!ILL#i!8flrM'!!rcB`,[r5N@lrQ$J +ZrjKf!$B%,82rr0D$eUlrj#"$-"!p32qH)Llrr0+Zrq!J34)3F!!3!6e!rja+3'F +!!-)-EJ!BriaL!!#B*'lrN!"55VAZrkKMD#"Zrj!!8NL4l[qS,8Mrp#"Zrj!!NHl +rT#e)rr!JE[qSNHlrN!!Y52rX)!KR$L"Zrj!!)QlrT#!ZrqbL,L4Zrk69l[rX,8V +rN!")E[r`,blrT#"Z!#41N!"36b!Zrr#`V[rdC!T`Cce!!#K1qJ&D)'lrN!"5V[q +3!")3F!!3!63Zriab!$)#ikL1J&"ZriaJ!2pLF2pb)$JZrjaf!$B%NS2LU-"(d@l +rRL!(jUJZ!*PZri`JE[qX-LlrRR!!-!'4`#e)rj5alJ!JC@!JE[q88UlrP"!3)'l +rV&+Zrk`3J#"Zrj45V[q8%"!JE[qX8UlrV"#!)'lrP&+Zrj33%#"Zrka5V[qX%)! +`,[qD8flrQNT!C`$lhL"Zrj45V[q8%"!JE[qX8UlrV"#!B0a@E[qD)'i!'0('-Ll +rRR!!-!%LE[qXNqi!)*!!LC(!,8MrP$!ZrjTR*L"Z!"M4aV(Zrj4M'L"Zrj45V[q +8%"!JE[qX8UlrV"#!8flrQQ$8,@i!)2q8-#lrQP0ZrjT+3'F!qfBJE[q88UlrP"! +3)'lrV&+Zrk`3J'$F)'lrV,(Zrl"R#("R28!!+'!8)'lrV*(Z!#!LEJ!F)SK#3$e +!!#K-haci6PiJAdr[!#"1d!"`2!!q)!!!H#!q-#!Q*L"i)$`p-c)!!$T$Efe`FQ9 +cFfP[EMT%C@0[EA"bCA0cD@pZ-$-`-5jM!!!m!$iJ!!"i)$i`)#BQ)(JJ2$dc-J! +!1N0[EA"bCA0cD@pZ1N4PBfpYF(*PFh0TEfi`-c!a,Q-!!%j@rqK)jami2Li!##K +Z!!`f,J!+F!!`!cJ(FJ!b"*!!JA)"X)&[!!'d286rk$e$rqT5E[rS-#lrk,"Z!!T +N(()!-J$5M#""%"!d"h)!-J,5M#""%K#`!@3#B0C6E[rU-#lrkV"(Baab!$)!dS` +J34!30!Gb!$)#dS`J34)3X!&M!Q$B-#lrk,"ZrqTP!Q"b1#lrk(B!0J3Y3rr`eS` +N3a)5F!!3!6e!rq`k,[rUH!!i"5e%rr6BM#C%%"-8J"DZrqdJ,[r`d)$3VJ!3)%! +`%$e!rq`L,[rddS(5VJ!3)%%b%#3Zrr$8JY5Z!"!J3M#")Llrp0+"dUi!%#""-)" +J!2mb-#lrkV"(CJC54f!!r`3i"hB!0J3Y3rrieS`N3a)5F!!3!6e!rq`m,[rUHJ! +k"Le&rrcDM#C&%"-8J"DZrqdJ,[rid)$3VJ!3)%!`%$e!rq`L,[rmdS(5VJ!3)%% +b%#3ZrrM8JY5Z!"!J3M#")Llrr0+"dUi!%#""-)!J,[rm)Llrq*!!J63Z!!Tb!$) +#*#lrr&+#NS+`J@`H,bi!%#m-2`Br"%kkrPa2l`!--#lrkP*!2J"J!2jF,bi!%#m +-2bi!#M!ZrqT53$m!6VVq0Nr[!!`pE[rU!!TJ!2ii60mFq%jH6R919[rN51FI1#4 +Z!!Jk,J!-*Qi!$LKZ!")Y62r`)$`!!!%NfF!Y62rd3N!m!$B'YN9N,(J!1!-Y42r +if)SJ4"!3)Llrq0+Zrr!J34#!)#lrq0#!d+lrp#"!-)054Q$1,blrp#mZrr!r"8* +R6VVpXNr[!!a#3$`!0JDf4@35F!!`!p#Zrr!J3%S3CJ454Q$SF!!Y32rN0JDf4@3 +!!+K+3fFb)#lrj(J!1!-Y42rmf+lrm#"%&""b!")#*Llrr&1$eUlrm#"$&K"d!"3 +$NS,MU#e!rq3d"R)!-J,5V[r`)%%5%(!!%!%q!#eZrq6rl(!!,8$rk$!(8dG+3'F +J)#lrk11))Llrl(3"`S+!J5e!rqJJ,[rXiSJY32rXB0Jd"R)!-J,5JG+Zrr3J36) +3F!!`!H@!d)XJ3##ZrqK54P+Zrq4J!2p860mFq%jH6R8LAb"IS#8ZJ'S#3TG1d5* +I%Km`(dS"C`5R4Q!#SdBZL%l4)Pm5(c!I)&p+!@F%TNGJ!U*(6Y%!N!-+!$LJ!3! +&!*!'!3!!!Bp*!!'153!!"'`"%jYJ"&i!N!-F!p)!&%4*9%`!$3#U38a59!!+!9* +69&)J!!%"eP"cCA3!!!(Z4%a24`!#!IT69&)M!!!#(P"*3e3!!!)UGQ9bF`!"!MC +MD@0Z!!!#6NP$6di!!!*D5801)`!%!QC'8N9'!!3#SN*14%`!!3,H399c-J!!![C +KGA0d!!%$!QPME$J!!!-D3dp%43!(!bC%394"!!!$KP0*@N8!!!15DfPZC!!!!jj +'C@&d!!!$UJ3"rrmJ!*!)KIrr*!!!J!%E'(!!Krrr!*!$eJ#3"BErrb3!!5B"'aJ +3!)$rr`!!!DF!N!@errmJ!!)&!*!&J[rr!!!#G`#3"!2SrrmJ!!,9!*!&L2rr!!! +$!3#3"!)!rrm!!!2C!*!%!J(rr`!!""F!N!3%5`!S"!!5i!%6QL`%Vrrr!!!6-!# +3"!%(!$3J!"0Z!*!%"!(rrb!!"'-!N!@#rrmJ!!4c!*!&KIrr*!!%J`%6QK!!Krr +r)!!%N`#3"BErrb3!"+-"'aL!!)$rrb!!",-!N!@"rrmJ!!6$!*!&L2rr)!!%d`# +3"!)!rrmJ!!6P!*!%!J(rrb!!"28!N!3%Vrrr!!!8(!#3"!)!N!-J!!8&!*!%!J% +!"b!!"48!N!@!rrm!!!8K!*!%!qMrrb!!#9J!N!3%5`!3"!!4#J%6QS`""`!F)!! +4)`#3"B$rr`!!#A3!N!3$k2rr!!!*Y!#3"3,rrb!!%0S!N!8"rrmJ!"$i!*!%"%[ +rr`3!%6m"%jSN"%[rr`3!%Q8"%jSS!)$rr`!!&#`!N!@"rrm!!"8`!*!&J[rr!!! +@0!#3"B2rr`!!&cJ!N!@%rrm!!"Jm!*!&J2rr!!!C3!#3"B(rr`!!'8X!N!@#rrm +!!"P@!*!&Jrrr!!!CB3#3"B6rr`!!'@`!N!3"!2rr!!!CG`#3"B$rr`!!'CF!N!G +!!!!Cc`#3"B6rr`!!'I-!N!G2!!!Cp`#3"B6rr`!!'P)!N!8"!&iF!"j@!41D)!! +#!'JF!*!!(`%6QMJ!!`"b(!#X0!%6QN!!"!"m(!$cSJ%6QM`!"3#'(!%P,`%6QP! +!"J#3!"`"5%i"%jT-!!$rrbJ"Ffd!N!8(rrm!!A2*!*!'rrmS!'!B!*!%rj!%!!& +cL3#3"B$rr`!"FjF!N!Err`!"MMX!N!3'F(*[EA"d#-3JFh9QCQPi#dPZFf9bG#" +%DA0V#d9iDA0dD@jR)&"A#dPZFf9bG#"%DA0V#d9iDA0dD@jR)&"A$NphEQ9b)(* +PFfpeFQ0P$NphEQ9b)(*PFfpeFQ0P#90PCfePER3J-3P6C@GYC@jd)$)*8f9RE@9 +ZG#!c#90PCfePER3J03P6C@GYC@jd)$B*8f9RE@9ZG#!f"dF: Index: tests/all.tcl ================================================================== --- tests/all.tcl +++ tests/all.tcl @@ -2,14 +2,14 @@ # # This file contains a top-level script to run all of the Tcl # tests. Execute it by invoking "source all.test" when running tcltest # in this directory. # -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 Ajuba Solutions. # All rights reserved. # -# RCS: @(#) $Id: all.tcl,v 1.10 2000/04/10 17:18:56 ericm Exp $ +# RCS: @(#) $Id: all.tcl,v 1.10.2.1 2000/07/27 01:39:20 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } Index: tests/binary.test ================================================================== --- tests/binary.test +++ tests/binary.test @@ -8,11 +8,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: binary.test,v 1.7 2000/04/10 17:18:57 ericm Exp $ +# RCS: @(#) $Id: binary.test,v 1.7.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -38,11 +38,10 @@ list [catch {binary f} msg] $msg } {1 {wrong # args: should be "binary format formatString ?arg arg ...?"}} test binary-1.4 {Tcl_BinaryObjCmd: format} { binary format "" } {} - test binary-2.1 {Tcl_BinaryObjCmd: format} { list [catch {binary format a } msg] $msg } {1 {not enough arguments for all format specifiers}} @@ -1462,17 +1461,5 @@ } {bad option "": must be format or scan} # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - Index: tests/clock.test ================================================================== --- tests/clock.test +++ tests/clock.test @@ -8,11 +8,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: clock.test,v 1.13 2000/04/10 17:18:57 ericm Exp $ +# RCS: @(#) $Id: clock.test,v 1.13.2.2 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -36,15 +36,15 @@ expr "$end > $start" } {1} test clock-2.3 {clock clicks tests} { list [catch {clock clicks foo} msg] $msg } {1 {bad switch "foo": must be -milliseconds}} -test clock-2.3 {clock clicks tests} { +test clock-2.4 {clock clicks tests} { expr [clock clicks -milliseconds]+1 concat {} } {} -test clock-2.2 {clock clicks tests, millisecond timing test} { +test clock-2.5 {clock clicks tests, millisecond timing test} { set start [clock clicks -milli] after 10 set end [clock clicks -milli] # assume, even with slow interp'ing, the diff is less than 60 msecs expr {($end > $start) && (($end - $start) < 60)} @@ -335,10 +335,15 @@ set monday [clock scan "monday 1 week ago" -base $dec1th -gmt 1] lappend res [clock format $monday -format %Y-%m-%d -gmt 1] } set res } {1991-11-25 1992-11-30 1993-11-29 1994-11-28 1995-11-27 1996-11-25} +test clock-4.41 {ago with multiple relative units} { + set base [clock scan "12/31/1999 00:00:00"] + set res [clock scan "2 days 2 hours ago" -base $base] + expr {$base - $res} +} 180000 # clock seconds test clock-5.1 {clock seconds tests} { expr [clock seconds]+1 concat {} Index: tests/cmdAH.test ================================================================== --- tests/cmdAH.test +++ tests/cmdAH.test @@ -8,11 +8,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: cmdAH.test,v 1.10 2000/04/10 17:18:57 ericm Exp $ +# RCS: @(#) $Id: cmdAH.test,v 1.10.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -1489,27 +1489,82 @@ test cmdAH-30.8 {Tcl_FileObjCmd: error conditions} { list [catch {file dirname ~woohgy} msg] $msg } {1 {user "woohgy" doesn't exist}} # channels +# In testing 'file channels', we need to make sure that a channel +# created in one interp isn't visible in another. + +interp create simpleInterp +interp create -safe safeInterp +interp c +safeInterp expose file file test cmdAH-31.1 {Tcl_FileObjCmd: channels, too many args} { list [catch {file channels a b} msg] $msg } {1 {wrong # args: should be "file channels ?pattern?"}} test cmdAH-31.2 {Tcl_FileObjCmd: channels, too many args} { - file chan -} {stderr stdout stdin} -test cmdAH-31.3 {Tcl_FileObjCmd: channels, too many args} { + # Normal interps start out with only the standard channels + lsort [simpleInterp eval [list file chan]] +} [lsort {stderr stdout stdin}] +test cmdAH-31.3 {Tcl_FileObjCmd: channels, globbing} { string equal [file channels] [file channels *] } {1} -test cmdAH-31.4 {Tcl_FileObjCmd: channels} { - set old [file channels gorp.file] - set f [open gorp.file w] - set new [file channels file*] - close $f - string equal $f $new +test cmdAH-31.4 {Tcl_FileObjCmd: channels, globbing} { + lsort [file channels std*] +} [lsort {stdout stderr stdin}] + +set newFileId [open gorp.file w] + +test cmdAH-31.5 {Tcl_FileObjCmd: channels} { + set res [file channels $newFileId] + string equal $newFileId $res } {1} +test cmdAH-31.6 {Tcl_FileObjCmd: channels in other interp} { + # Safe interps start out with no channels + safeInterp eval [list file channels] +} {} +test cmdAH-31.7 {Tcl_FileObjCmd: channels in other interp} { + list [catch {safeInterp eval [list puts $newFileId "hello"]} msg] $msg +} [list 1 "can not find channel named \"$newFileId\""] + +interp share {} $newFileId safeInterp +interp share {} stdout safeInterp + +test cmdAH-31.8 {Tcl_FileObjCmd: channels in other interp} { + # $newFileId should now be visible in both interps + list [file channels $newFileId] \ + [safeInterp eval [list file channels $newFileId]] +} [list $newFileId $newFileId] +test cmdAH-31.9 {Tcl_FileObjCmd: channels in other interp} { + lsort [safeInterp eval [list file channels]] +} [lsort [list stdout $newFileId]] +test cmdAH-31.10 {Tcl_FileObjCmd: channels in other interp} { + # we can now write to $newFileId from slave + safeInterp eval [list puts $newFileId "hello"] +} {} + +interp transfer {} $newFileId safeInterp + +test cmdAH-31.11 {Tcl_FileObjCmd: channels in other interp} { + # $newFileId should now be visible only in safeInterp + list [file channels $newFileId] \ + [safeInterp eval [list file channels $newFileId]] +} [list {} $newFileId] +test cmdAH-31.12 {Tcl_FileObjCmd: channels in other interp} { + lsort [safeInterp eval [list file channels]] +} [lsort [list stdout $newFileId]] +test cmdAH-31.13 {Tcl_FileObjCmd: channels in other interp} { + safeInterp eval [list close $newFileId] + safeInterp eval [list file channels] +} {stdout} + +# This shouldn't work, but just in case a test above failed... +catch {close $newFileId} + +interp delete safeInterp +interp delete simpleInterp # cleanup catch {testsetplatform $platform} catch {unset platform} Index: tests/cmdIL.test ================================================================== --- tests/cmdIL.test +++ tests/cmdIL.test @@ -6,11 +6,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: cmdIL.test,v 1.12 2000/04/10 17:18:57 ericm Exp $ +# RCS: @(#) $Id: cmdIL.test,v 1.12.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -80,10 +80,26 @@ } {1 2 3 4} test cmdIL-1.23 {Tcl_LsortObjCmd procedure, unique sort with index} { # lsort -unique should return the last unique item lsort -unique -index 0 {{a b} {c b} {a c} {d a}} } {{a c} {c b} {d a}} +test cmdIL-1.24 {Tcl_LsortObjCmd procedure, order of -index and -command} { + catch {rename 1 ""} + proc testcmp {a b} {return [string compare $a $b]} + set l [list [list a b] [list c d]] + set result [list [catch {lsort -command testcmp -index 1 $l} msg] $msg] + rename testcmp "" + set result +} [list 0 [list [list a b] [list c d]]] +test cmdIL-1.25 {Tcl_LsortObjCmd procedure, order of -index and -command} { + catch {rename 1 ""} + proc testcmp {a b} {return [string compare $a $b]} + set l [list [list a b] [list c d]] + set result [list [catch {lsort -index 1 -command testcmp $l} msg] $msg] + rename testcmp "" + set result +} [list 0 [list [list a b] [list c d]]] # Can't think of any good tests for the MergeSort and MergeLists # procedures, except a bunch of random lists to sort. test cmdIL-2.1 {MergeSort and MergeLists procedures} { Index: tests/execute.test ================================================================== --- tests/execute.test +++ tests/execute.test @@ -12,11 +12,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: execute.test,v 1.8 2000/04/10 17:18:58 ericm Exp $ +# RCS: @(#) $Id: execute.test,v 1.8.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -580,10 +580,16 @@ append x { } $x } p } {} + +test execute-6.2 {Evaluate an expression in a variable; compile the first time, do not the second} { + set w {3*5} + proc a {obj} {expr $obj} + set res "[a $w]:[a $w]" +} {15:15} # cleanup catch {eval namespace delete [namespace children :: test_ns_*]} catch {rename foo ""} catch {rename p ""} Index: tests/fCmd.test ================================================================== --- tests/fCmd.test +++ tests/fCmd.test @@ -8,11 +8,11 @@ # Copyright (c) 1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: fCmd.test,v 1.8 2000/04/10 17:18:59 ericm Exp $ +# RCS: @(#) $Id: fCmd.test,v 1.8.2.1 2001/04/03 22:54:38 hobbs Exp $ # if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* @@ -507,16 +507,17 @@ } {/tmp/tf1} test fCmd-6.20 {CopyRenameOneFile: errno == EXDEV} {pcOnly} { catch {file delete -force c:/tcl8975@ d:/tcl8975@} file mkdir c:/tcl8975@ if [catch {file rename c:/tcl8975@ d:/}] { - list d:/tcl8975@ + set msg d:/tcl8975@ } else { set msg [glob c:/tcl8975@ d:/tcl8975@] file delete -force d:/tcl8975@ - set msg } + file delete -force c:/tcl8975@ + set msg } {d:/tcl8975@} test fCmd-6.21 {CopyRenameOneFile: copy/rename: S_ISDIR(source)} \ {unixOnly notRoot} { cleanup /tmp file mkdir td1 Index: tests/foreach.test ================================================================== --- tests/foreach.test +++ tests/foreach.test @@ -8,11 +8,11 @@ # Copyright (c) 1994-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: foreach.test,v 1.6 2000/04/10 17:18:59 ericm Exp $ +# RCS: @(#) $Id: foreach.test,v 1.6.2.1 2001/08/07 15:41:20 msofer Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -208,10 +208,19 @@ test foreach-5.3 {break tests} {catch {break foo} msg} 1 test foreach-5.4 {break tests} { catch {break foo} msg set msg } {wrong # args: should be "break"} +# Check for bug #406709 +test foreach-5.5 {break tests} { + proc a {} { + set a 1 + foreach b b {list [concat a; break]; incr a} + incr a + } + a +} {2} # Test for incorrect "double evaluation" semantics test foreach-6.1 {delayed substitution of body} {knownBug} { proc foo {} { Index: tests/http.test ================================================================== --- tests/http.test +++ tests/http.test @@ -4,17 +4,17 @@ # Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1991-1993 The Regents of the University of California. # Copyright (c) 1994-1996 Sun Microsystems, Inc. -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 by Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # -# RCS: @(#) $Id: http.test,v 1.19 2000/04/22 07:07:59 sandeep Exp $ +# RCS: @(#) $Id: http.test,v 1.19.2.2 2000/06/02 23:44:07 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -288,10 +288,19 @@ } list [http::status $t] [http::code $t] } {ok {HTTP/1.0 200 Data follows}} +test http-3.13 {http::geturl socket leak test} { + set chanCount [llength [file channels]] + for {set i 0} {$i < 3} {incr i} { + catch {http::geturl $badurl -timeout 5000} + } + + # No extra channels should be taken + expr {[llength [file channels]] == $chanCount} +} 1 test http-4.1 {http::Event} { set token [http::geturl $url] upvar #0 $token data array set meta $data(meta) Index: tests/interp.test ================================================================== --- tests/interp.test +++ tests/interp.test @@ -8,11 +8,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: interp.test,v 1.11 2000/04/10 17:19:00 ericm Exp $ +# RCS: @(#) $Id: interp.test,v 1.11.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -633,11 +633,14 @@ # Test robustness of Tcl_DeleteInterp when applied to a slave interpreter. # If there are bugs in the implementation these tests are likely to expose # the bugs as a core dump. # -if {[info commands testinterpdelete] != ""} { +if {[info commands testinterpdelete] == ""} { + puts "This application hasn't been compiled with the \"testinterpdelete\"" + puts "command, so I can't test slave delete calls" +} else { test interp-18.1 {testing Tcl_DeleteInterp vs slaves} { list [catch {testinterpdelete} msg] $msg } {1 {wrong # args: should be "testinterpdelete path"}} test interp-18.2 {testing Tcl_DeleteInterp vs slaves} { catch {interp delete a} @@ -2350,12 +2353,30 @@ rename testMyNewSet {} rename mySet {} rename myNewSet {} set result } ok + +test interp-32.1 { parent's working directory should + be inherited by a child interp } { + set parent [pwd] + set i [interp create] + set child [$i eval pwd] + interp delete $i + file mkdir cwd_test + cd cwd_test + lappend parent [pwd] + set i [interp create] + lappend child [$i eval pwd] + cd .. + file delete cwd_test + interp delete $i + expr {[string equal $parent $child] ? 1 : + "\{$parent\} != \{$child\}"} +} 1 # cleanup foreach i [interp slaves] { interp delete $i } ::tcltest::cleanupTests return ADDED tests/iogt.test Index: tests/iogt.test ================================================================== --- /dev/null +++ tests/iogt.test @@ -0,0 +1,940 @@ +# -*- tcl -*- +# Commands covered: transform, and stacking in general +# +# This file contains a collection of tests for Giot +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# Copyright (c) 2000 Ajuba Solutions. +# Copyright (c) 2000 Andreas Kupries. +# All rights reserved. +# +# RCS: @(#) $Id: iogt.test,v 1.1.4.1 2000/07/27 01:39:20 hobbs Exp $ + + +if {[lsearch [namespace children] ::tcltest] == -1} { + package require tcltest + namespace import -force ::tcltest::* +} + +if {[info commands testchannel] == ""} { + puts "Skipping io tests. This application does not seem to have the" + puts "testchannel command that is needed to run these tests." + return +} + +::tcltest::saveState + +#::tcltest::makeFile contents name + +::tcltest::makeFile {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-=} dummy + +# " capture coloring of quotes + +::tcltest::makeFile {} dummyout + +::tcltest::makeFile { +#!/usr/local/bin/tclsh +# -*- tcl -*- +# echo server +# +# arguments, options: port to listen on for connections. +# delay till echo of first block +# delay between blocks +# blocksize ... + +set port [lindex $argv 0] +set fdelay [lindex $argv 1] +set idelay [lindex $argv 2] +set bsizes [lrange $argv 3 end] +set c 0 + +proc newconn {sock rhost rport} { + global c fdelay + incr c + + #puts stdout "C $sock $rhost $rport / $fdelay" ; flush stdout + + upvar #0 c$c conn + set conn(after) {} + set conn(state) 0 + set conn(size) 0 + set conn(data) "" + set conn(delay) $fdelay + + fileevent $sock readable [list echoGet $c $sock] + fconfigure $sock -translation binary -buffering none -blocking 0 +} + +proc echoGet {c sock} { + global fdelay + upvar #0 c$c conn + + if {[eof $sock]} { + # one-shot echo + exit + } + + append conn(data) [read $sock] + + #puts stdout "G $c $sock $conn(data) <<$conn(data)>>" ; flush stdout + + if {$conn(after) == {}} { + set conn(after) [after $conn(delay) [list echoPut $c $sock]] + } +} + +proc echoPut {c sock} { + global idelay fdelay bsizes + upvar #0 c$c conn + + if {[string length $conn(data)] == 0} { + #puts stdout "C $c $sock" ; flush stdout + # auto terminate + close $sock + exit + #set conn(delay) $fdelay + return + } + + + set conn(delay) $idelay + + set n [lindex $bsizes $conn(size)] + + #puts stdout "P $c $sock $n >>" ; flush stdout + + #puts __________________________________________ + #parray conn + #puts n=<$n> + + + if {[string length $conn(data)] >= $n} { + puts -nonewline $sock [string range $conn(data) 0 $n] + set conn(data) [string range $conn(data) [incr n] end] + } + + incr conn(size) + if {$conn(size) >= [llength $bsizes]} { + set conn(size) [expr {[llength $bsizes]-1}] + } + + set conn(after) [after $conn(delay) [list echoPut $c $sock]] +} + +#fileevent stdin readable {exit ;#cut} + +# main +socket -server newconn $port +vwait forever +} __echo_srv__.tcl + + +######################################################################## + +proc fevent {fdelay idelay blocks script data} { + # start and initialize an echo server, prepare data + # transmission, then hand over to the test script. + # this has to start real transmission via 'flush'. + # The server is stopped after completion of the test. + + # fixed port, not so good. lets hope for the best, for now. + set port 4000 + + eval exec tclsh __echo_srv__.tcl \ + $port $fdelay $idelay $blocks >@stdout & + + after 500 + + #puts stdout "> $port" ; flush stdout + + set sk [socket localhost $port] + fconfigure $sk \ + -blocking 0 \ + -buffering full \ + -buffersize [expr {10+[llength $data]}] + + puts -nonewline $sk $data + + # The channel is prepared to go off. + + #puts stdout ">>>>>" ; flush stdout + + uplevel #0 set sock $sk + set res [uplevel #0 $script] + + catch {close $sk} + return $res +} + +# -------------------------------------------------------------- +# utility transformations ... + +proc id {op data} { + switch -- $op { + create/write - + create/read - + delete/write - + delete/read - + clear_read {;#ignore} + flush/write - + flush/read - + write - + read { + return $data + } + query/maxRead {return -1} + } +} + +proc id_optrail {var op data} { + upvar #0 $var trail + + lappend trail $op + + switch -- $op { + create/write - create/read - + delete/write - delete/read - + flush/read - + clear/read { #ignore } + flush/write - + write - + read { + return $data + } + query/maxRead { + return -1 + } + default { + lappend trail "error $op" + error $op + } + } +} + + +proc id_fulltrail {var op data} { + upvar #0 $var trail + + #puts stdout ">> $var $op $data" ; flush stdout + + switch -- $op { + create/write - create/read - + delete/write - delete/read - + clear_read { + set res *ignored* + } + flush/write - flush/read - + write - + read { + set res $data + } + query/maxRead { + set res -1 + } + } + + #catch {puts stdout "\t>* $res" ; flush stdout} + #catch {puts stdout "x$res"} msg + + lappend trail [list $op $data $res] + return $res +} + +proc counter {var op data} { + upvar #0 $var n + + switch -- $op { + create/write - create/read - + delete/write - delete/read - + clear_read {;#ignore} + flush/write - flush/read {return {}} + write { + return $data + } + read { + if {$n > 0} { + incr n -[string length $data] + if {$n < 0} { + set n 0 + } + } + return $data + } + query/maxRead { + return $n + } + } +} + + +proc counter_audit {var vtrail op data} { + upvar #0 $var n $vtrail trail + + switch -- $op { + create/write - create/read - + delete/write - delete/read - + clear_read { + set res {} + } + flush/write - flush/read { + set res {} + } + write { + set res $data + } + read { + if {$n > 0} { + incr n -[string length $data] + if {$n < 0} { + set n 0 + } + } + set res $data + } + query/maxRead { + set res $n + } + } + + lappend trail [list counter:$op $data $res] + return $res +} + + +proc rblocks {var vtrail n op data} { + upvar #0 $var buf $vtrail trail + + set res {} + + switch -- $op { + create/write - create/read - + delete/write - delete/read - + clear_read { + set buf {} + } + flush/write { + } + flush/read { + set res $buf + set buf {} + } + write { + set data + } + read { + append buf $data + + set b [expr {$n * ([string length $buf] / $n)}] + + append op " $n [string length $buf] :- $b" + + set res [string range $buf 0 [incr b -1]] + set buf [string range $buf [incr b] end] + #return $res + } + query/maxRead { + set res -1 + } + } + + lappend trail [list rblock | $op $data $res | $buf] + return $res +} + + +# -------------------------------------------------------------- +# ... and convenience procedures to stack them + +proc identity {-attach channel} { + testchannel transform $channel -command id +} + +proc audit_ops {var -attach channel} { + testchannel transform $channel -command [list id_optrail $var] +} + +proc audit_flow {var -attach channel} { + testchannel transform $channel -command [list id_fulltrail $var] +} + +proc stopafter {var n -attach channel} { + upvar #0 $var vn + set vn $n + testchannel transform $channel -command [list counter $var] +} + +proc stopafter_audit {var trail n -attach channel} { + upvar #0 $var vn + set vn $n + testchannel transform $channel -command [list counter_audit $var $trail] +} + +proc rblocks_t {var trail n -attach channel} { + testchannel transform $channel -command [list rblocks $var $trail $n] +} + +# -------------------------------------------------------------- +# serialize an array, with keys in sorted order. + +proc array_sget {v} { + upvar $v a + + set res [list] + foreach n [lsort [array names a]] { + lappend res $n $a($n) + } + set res +} + +proc asort {alist} { + # sort a list of key/value pairs by key, removes duplicates too. + + array set a $alist + array_sget a +} + +######################################################################## + + +test iogt-1.1 {stack/unstack} { + set fh [open dummy r] + identity -attach $fh + testchannel unstack $fh + close $fh +} {} + +test iogt-1.2 {stack/close} { + set fh [open dummy r] + identity -attach $fh + close $fh +} {} + +test iogt-1.3 {stack/unstack, configuration, options} { + set fh [open dummy r] + set ca [asort [fconfigure $fh]] + identity -attach $fh + set cb [asort [fconfigure $fh]] + testchannel unstack $fh + set cc [asort [fconfigure $fh]] + close $fh + + # With this system none of the buffering, translation and + # encoding option may change their values with channels + # stacked upon each other or not. + + # cb == ca == cc + + list [string equal $ca $cb] [string equal $cb $cc] [string equal $ca $cc] +} {1 1 1} + +test iogt-1.4 {stack/unstack, configuration} { + set fh [open dummy r] + set ca [asort [fconfigure $fh]] + identity -attach $fh + fconfigure $fh \ + -buffering line \ + -translation cr \ + -encoding shiftjis + testchannel unstack $fh + set cc [asort [fconfigure $fh]] + + set res [list \ + [string equal $ca $cc] \ + [fconfigure $fh -buffering] \ + [fconfigure $fh -translation] \ + [fconfigure $fh -encoding] \ + ] + + close $fh + set res +} {0 line cr shiftjis} + +test iogt-2.0 {basic I/O going through transform} { + set fin [open dummy r] + set fout [open dummyout w] + + identity -attach $fin + identity -attach $fout + + fcopy $fin $fout + + close $fin + close $fout + + set fin [open dummy r] + set fout [open dummyout r] + + set res [string equal [set in [read $fin]] [set out [read $fout]]] + lappend res [string length $in] [string length $out] + + close $fin + close $fout + + set res +} {1 71 71} + + +test iogt-2.1 {basic I/O, operation trail} {unixOnly} { + set fin [open dummy r] + set fout [open dummyout w] + + set ain [list] ; set aout [list] + audit_ops ain -attach $fin + audit_ops aout -attach $fout + + fconfigure $fin -buffersize 10 + fconfigure $fout -buffersize 5 + + fcopy $fin $fout + + close $fin + close $fout + + set res "[join $ain \n]\n--------\n[join $aout \n]" +} {create/read +query/maxRead +read +query/maxRead +read +query/maxRead +read +query/maxRead +read +query/maxRead +read +query/maxRead +read +query/maxRead +read +query/maxRead +read +query/maxRead +flush/read +query/maxRead +delete/read +-------- +create/write +write +write +write +write +write +write +write +write +flush/write +delete/write} + +test iogt-2.2 {basic I/O, data trail} {unixOnly} { + set fin [open dummy r] + set fout [open dummyout w] + + set ain [list] ; set aout [list] + audit_flow ain -attach $fin + audit_flow aout -attach $fout + + fconfigure $fin -buffersize 10 + fconfigure $fout -buffersize 5 + + fcopy $fin $fout + + close $fin + close $fout + + set res "[join $ain \n]\n--------\n[join $aout \n]" +} {create/read {} *ignored* +query/maxRead {} -1 +read abcdefghij abcdefghij +query/maxRead {} -1 +read klmnopqrst klmnopqrst +query/maxRead {} -1 +read uvwxyz0123 uvwxyz0123 +query/maxRead {} -1 +read 456789,./? 456789,./? +query/maxRead {} -1 +read {><;'\|":[]} {><;'\|":[]} +query/maxRead {} -1 +read {\}\{`~!@#$} {\}\{`~!@#$} +query/maxRead {} -1 +read %^&*()_+-= %^&*()_+-= +query/maxRead {} -1 +read { +} { +} +query/maxRead {} -1 +flush/read {} {} +query/maxRead {} -1 +delete/read {} *ignored* +-------- +create/write {} *ignored* +write abcdefghij abcdefghij +write klmnopqrst klmnopqrst +write uvwxyz0123 uvwxyz0123 +write 456789,./? 456789,./? +write {><;'\|":[]} {><;'\|":[]} +write {\}\{`~!@#$} {\}\{`~!@#$} +write %^&*()_+-= %^&*()_+-= +write { +} { +} +flush/write {} {} +delete/write {} *ignored*} + + +test iogt-2.3 {basic I/O, mixed trail} {unixOnly} { + set fin [open dummy r] + set fout [open dummyout w] + + set trail [list] + audit_flow trail -attach $fin + audit_flow trail -attach $fout + + fconfigure $fin -buffersize 20 + fconfigure $fout -buffersize 10 + + fcopy $fin $fout + + close $fin + close $fout + + join $trail \n +} {create/read {} *ignored* +create/write {} *ignored* +query/maxRead {} -1 +read abcdefghijklmnopqrst abcdefghijklmnopqrst +write abcdefghij abcdefghij +write klmnopqrst klmnopqrst +query/maxRead {} -1 +read uvwxyz0123456789,./? uvwxyz0123456789,./? +write uvwxyz0123 uvwxyz0123 +write 456789,./? 456789,./? +query/maxRead {} -1 +read {><;'\|":[]\}\{`~!@#$} {><;'\|":[]\}\{`~!@#$} +write {><;'\|":[]} {><;'\|":[]} +write {\}\{`~!@#$} {\}\{`~!@#$} +query/maxRead {} -1 +read {%^&*()_+-= +} {%^&*()_+-= +} +query/maxRead {} -1 +flush/read {} {} +write %^&*()_+-= %^&*()_+-= +write { +} { +} +query/maxRead {} -1 +delete/read {} *ignored* +flush/write {} {} +delete/write {} *ignored*} + + +test iogt-3.0 {Tcl_Channel valid after stack/unstack, fevent handling} \ + {unknownFailure} { + # This test to check the validity of aquired Tcl_Channel references is + # not possible because even a backgrounded fcopy will immediately start + # to copy data, without waiting for the event loop. This is done only in + # case of an underflow on the read size!. So stacking transforms after the + # fcopy will miss information, or are not used at all. + # + # I was able to circumvent this by using the echo.tcl server with a big + # delay, causing the fcopy to underflow immediately. + + proc DoneCopy {n {err {}}} { + global copy ; set copy 1 + } + + set fin [open dummy r] + + fevent 1000 500 {20 20 20 10 1 1} { + close $fin + + set fout [open dummyout w] + + flush $sock ; # now, or fcopy will error us out + # But the 1 second delay should be enough to + # initialize everything else here. + + fcopy $sock $fout -command DoneCopy + + # transform after fcopy got its handles ! + # They should be still valid for fcopy. + + set trail [list] + audit_ops trail -attach $fout + + vwait copy + } [read $fin] ; # {} + + close $fout + + rename DoneCopy {} + + # Check result of copy. + + set fin [open dummy r] + set fout [open dummyout r] + + set res [string equal [read $fin] [read $fout]] + + close $fin + close $fout + + list $res $trail +} {1 {create/write create/read write flush/write flush/read delete/write delete/read}} + + +test iogt-4.0 {fileevent readable, after transform} {unknownFailure} { + set fin [open dummy r] + set data [read $fin] + close $fin + + set trail [list] + set got [list] + + proc Done {args} { + global stop + set stop 1 + } + + proc Get {sock} { + global trail got + if {[eof $sock]} { + Done + lappend trail "xxxxxxxxxxxxx" + close $sock + return + } + lappend trail "vvvvvvvvvvvvv" + lappend trail "\tgot: [lappend got "\[\[[read $sock]\]\]"]" + lappend trail "=============" + #puts stdout $__ ; flush stdout + #read $sock + } + + fevent 1000 500 {20 20 20 10 1} { + audit_flow trail -attach $sock + rblocks_t rbuf trail 23 -attach $sock + + fileevent $sock readable [list Get $sock] + + flush $sock ; # now, or fcopy will error us out + # But the 1 second delay should be enough to + # initialize everything else here. + + vwait stop + } $data + + + rename Done {} + rename Get {} + + join [list [join $got \n] ~~~~~~~~ [join $trail \n]] \n +} {[[]] +[[abcdefghijklmnopqrstuvw]] +[[xyz0123456789,./?><;'\|]] +[[]] +[[]] +[[":[]\}\{`~!@#$%^&*()]] +[[]] +~~~~~~~~ +create/write {} *ignored* +create/read {} *ignored* +rblock | create/write {} {} | {} +rblock | create/read {} {} | {} +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | {} +query/maxRead {} -1 +read abcdefghijklmnopqrstu abcdefghijklmnopqrstu +query/maxRead {} -1 +rblock | {read 23 21 :- 0} abcdefghijklmnopqrstu {} | abcdefghijklmnopqrstu +rblock | query/maxRead {} -1 | abcdefghijklmnopqrstu +query/maxRead {} -1 + got: {[[]]} +============= +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | abcdefghijklmnopqrstu +query/maxRead {} -1 +read vwxyz0123456789,./?>< vwxyz0123456789,./?>< +query/maxRead {} -1 +rblock | {read 23 42 :- 23} vwxyz0123456789,./?>< abcdefghijklmnopqrstuvw | xyz0123456789,./?>< +rblock | query/maxRead {} -1 | xyz0123456789,./?>< +query/maxRead {} -1 + got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} +============= +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | xyz0123456789,./?>< +query/maxRead {} -1 +read {;'\|":[]\}\{`~!@#$%^&} {;'\|":[]\}\{`~!@#$%^&} +query/maxRead {} -1 +rblock | {read 23 40 :- 23} {;'\|":[]\}\{`~!@#$%^&} {xyz0123456789,./?><;'\|} | {":[]\}\{`~!@#$%^&} +rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&} +query/maxRead {} -1 + got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} +============= +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&} +query/maxRead {} -1 +read *( *( +query/maxRead {} -1 +rblock | {read 23 19 :- 0} *( {} | {":[]\}\{`~!@#$%^&*(} +rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*(} +query/maxRead {} -1 + got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} +============= +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*(} +query/maxRead {} -1 +read ) ) +query/maxRead {} -1 +rblock | {read 23 20 :- 0} ) {} | {":[]\}\{`~!@#$%^&*()} +rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*()} +query/maxRead {} -1 + got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} {[[]]} +============= +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | {":[]\}\{`~!@#$%^&*()} +query/maxRead {} -1 +flush/read {} {} +rblock | flush/read {} {":[]\}\{`~!@#$%^&*()} | {} +rblock | query/maxRead {} -1 | {} +query/maxRead {} -1 + got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} {[[]]} {[[":[]\}\{`~!@#$%^&*()]]} +============= +vvvvvvvvvvvvv +rblock | query/maxRead {} -1 | {} +query/maxRead {} -1 + got: {[[]]} {[[abcdefghijklmnopqrstuvw]]} {[[xyz0123456789,./?><;'\|]]} {[[]]} {[[]]} {[[":[]\}\{`~!@#$%^&*()]]} {[[]]} +xxxxxxxxxxxxx +rblock | flush/write {} {} | {} +rblock | delete/write {} {} | {} +rblock | delete/read {} {} | {} +flush/write {} {} +delete/write {} *ignored* +delete/read {} *ignored*} ; # catch unescaped quote " + + +test iogt-5.0 {EOF simulation} {unknownFailure} { + set fin [open dummy r] + set fout [open dummyout w] + + set trail [list] + + audit_flow trail -attach $fin + stopafter_audit d trail 20 -attach $fin + audit_flow trail -attach $fout + + fconfigure $fin -buffersize 20 + fconfigure $fout -buffersize 10 + + fcopy $fin $fout + testchannel unstack $fin + + # now copy the rest in the channel + lappend trail {**after unstack**} + + fcopy $fin $fout + + close $fin + close $fout + + join $trail \n +} {create/read {} *ignored* +counter:create/read {} {} +create/write {} *ignored* +counter:query/maxRead {} 20 +query/maxRead {} -1 +read {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-= +} {abcdefghijklmnopqrstuvwxyz0123456789,./?><;'\|":[]\}\{`~!@#$%^&*()_+-= +} +query/maxRead {} -1 +flush/read {} {} +counter:read abcdefghijklmnopqrst abcdefghijklmnopqrst +write abcdefghij abcdefghij +write klmnopqrst klmnopqrst +counter:query/maxRead {} 0 +counter:flush/read {} {} +counter:delete/read {} {} +**after unstack** +query/maxRead {} -1 +write uvwxyz0123 uvwxyz0123 +write 456789,./? 456789,./? +write {><;'\|":[]} {><;'\|":[]} +write {\}\{`~!@#$} {\}\{`~!@#$} +write %^&*()_+-= %^&*()_+-= +write { +} { +} +query/maxRead {} -1 +delete/read {} *ignored* +flush/write {} {} +delete/write {} *ignored*} + + + + + +proc constX {op data} { + # replace anything coming in with a same-length string of x'es. + switch -- $op { + create/write - create/read - + delete/write - delete/read - + clear_read {;#ignore} + flush/write - flush/read - + write - + read { + return [string repeat x [string length $data]] + } + query/maxRead {return -1} + } +} + +proc constx {-attach channel} { + testchannel transform $channel -command constX +} + +test iogt-6.0 {Push back} { + set f [open dummy r] + + # contents of dummy = "abcdefghi..." + read $f 3 ; # skip behind "abc" + + constx -attach $f + + # expect to get "xxx" from the transform because + # of unread "def" input to transform which returns "xxx". + # + # Actually the IO layer pre-read the whole file and will + # read "def" directly from the buffer without bothering + # to consult the newly stacked transformation. This is + # wrong. + + set res [read $f 3] + close $f + set res +} {xxx} + +test iogt-6.1 {Push back and up} {knownBug} { + set f [open dummy r] + + # contents of dummy = "abcdefghi..." + read $f 3 ; # skip behind "abc" + + constx -attach $f + set res [read $f 3] + + testchannel unstack $f + append res [read $f 3] + close $f + set res +} {xxxghi} + + +# cleanup +foreach file [list dummy dummyout __echo_srv__.tcl] { + ::tcltest::removeFile $file +} +::tcltest::restoreState +::tcltest::cleanupTests +return Index: tests/msgcat.test ================================================================== --- tests/msgcat.test +++ tests/msgcat.test @@ -10,11 +10,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: msgcat.test,v 1.8 2000/04/11 21:16:18 ericm Exp $ +# RCS: @(#) $Id: msgcat.test,v 1.8.2.1 2000/08/03 21:40:55 ericm Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -399,11 +399,14 @@ ::msgcat::mc format2 "good test" } "this is a good test" test msgcat-7.3 {::msgcat::mc, errors from format are propagated} { catch {::msgcat::mc format3 "good test"} } 1 +test msgcat-7.4 {::msgcat::mc, extra args are given to unknown} { + ::msgcat::mc "this is a %s" "good test" +} "this is a good test" # Reset the locale ::msgcat::mclocale $oldlocale ::tcltest::cleanupTests return Index: tests/opt.test ================================================================== --- tests/opt.test +++ tests/opt.test @@ -9,11 +9,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: opt.test,v 1.6 2000/04/10 17:19:02 ericm Exp $ +# RCS: @(#) $Id: opt.test,v 1.6.2.1 2000/08/07 21:32:11 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -31,13 +31,15 @@ test opt-1.1 {OptKeyRegister / check that auto allocation is skipping existing keys} { list [::tcl::OptKeyRegister {} $n] [::tcl::OptKeyRegister {} [expr $n+1]] [::tcl::OptKeyRegister {}] } "$n [expr $n+1] [expr $n+2]" test opt-2.1 {OptKeyDelete} { - list [::tcl::OptKeyRegister {} testkey] [::tcl::OptKeyDelete testkey] \ - [catch {::tcl::OptKeyDelete testkey} msg] $msg; -} {testkey {} 1 {can't unset "OptDesc(testkey)": no such element in array}} + list [::tcl::OptKeyRegister {} testkey] \ + [info exists ::tcl::OptDesc(testkey)] \ + [::tcl::OptKeyDelete testkey] \ + [info exists ::tcl::OptDesc(testkey)] +} {testkey 1 {} 0} test opt-3.1 {OptParse / temp key is removed} { set n $::tcl::OptDescN set prev [array names ::tcl::OptDesc] @@ -133,21 +135,10 @@ set l {a {b c 7 e} f} ::tcl::Lvarincr l {1 2} -9 set l } {a {b c -2 e} f} -test opt-8.8 {List utilities} { - set l {{b c 7 e} f} - ::tcl::Lfirst $l -} {b c 7 e} - - -test opt-8.9 {List utilities} { - set l {a {b c 7 e} f} - ::tcl::Lrest $l -} {{b c 7 e} f} - test opt-8.10 {List utilities} { set l {a {b c 7 e} f} ::tcl::Lvarpop l set l } {{b c 7 e} f} Index: tests/pkgMkIndex.test ================================================================== --- tests/pkgMkIndex.test +++ tests/pkgMkIndex.test @@ -6,11 +6,11 @@ # errors. No output means no errors were found. # # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. # -# RCS: @(#) $Id: pkgMkIndex.test,v 1.16 2000/04/10 17:19:03 ericm Exp $ +# RCS: @(#) $Id: pkgMkIndex.test,v 1.16.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -163,11 +163,11 @@ file mkdir $dirPath if {[catch { file delete [file join $dirPath pkgIndex.tcl] - eval pkg_mkIndex $options $dirPath $patternList + eval pkg_mkIndex $options [list $dirPath] $patternList } err]} { return [list 1 $err] } return [list 0 {}] @@ -359,13 +359,33 @@ # Proc names with embedded spaces are properly listed (ie, correct number of # braces) in result test pkgMkIndex-13.1 {proc names with embedded spaces} { pkgtest::runIndex -lazy $fullPkgPath spacename.tcl } {0 {{spacename:1.0 {tclPkgSetup {spacename.tcl source {{a b} {c d}}}}}}} + +# Test the pkg_compareExtension helper function +test pkgMkIndex-14.1 {pkg_compareExtension} {unixOnly} { + pkg_compareExtension foo.so .so +} 1 +test pkgMkIndex-14.2 {pkg_compareExtension} {unixOnly} { + pkg_compareExtension foo.so.bar .so +} 0 +test pkgMkIndex-14.3 {pkg_compareExtension} {unixOnly} { + pkg_compareExtension foo.so.1 .so +} 1 +test pkgMkIndex-14.4 {pkg_compareExtension} {unixOnly} { + pkg_compareExtension foo.so.1.2 .so +} 1 +test pkgMkIndex-14.5 {pkg_compareExtension} {unixOnly} { + pkg_compareExtension foo .so +} 0 +test pkgMkIndex-14.6 {pkg_compareExtension} {unixOnly} { + pkg_compareExtension foo.so.1.2.bar .so +} 0 # cleanup namespace delete pkgtest cd $origDir ::tcltest::cleanupTests return Index: tests/regexp.test ================================================================== --- tests/regexp.test +++ tests/regexp.test @@ -9,11 +9,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: regexp.test,v 1.13 2000/04/10 21:08:27 ericm Exp $ +# RCS: @(#) $Id: regexp.test,v 1.13.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -524,23 +524,17 @@ # there are zero or more "a"'s there. # Go to index 2; a* matches the "a" there then stops. # Go to index 3; this is past the end of the string, so stop. regexp -all -inline {a*} aba } {a {} a} +test regexp-18.11 {regexp -all} { + regexp -all -inline {^a} aaaa +} {a} + +test regexp-19.1 {regsub null replacement} { + regsub -all {@} {@hel@lo@} "\0a\0" result + list $result [string length $result] +} "\0a\0hel\0a\0lo\0a\0 14" # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - - - Index: tests/scan.test ================================================================== --- tests/scan.test +++ tests/scan.test @@ -9,11 +9,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: scan.test,v 1.10 2000/04/10 17:19:04 ericm Exp $ +# RCS: @(#) $Id: scan.test,v 1.10.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -321,10 +321,39 @@ $msg $x] unset y unset z set result } {1 {couldn't set variable "z"couldn't set variable "y"} abc} + +# procedure that returns the range of integers + +proc int_range {} { + for { set MIN_INT 1 } { $MIN_INT > 0 } {} { + set MIN_INT [expr { $MIN_INT << 1 }] + } + set MAX_INT [expr { ~ $MIN_INT }] + return [list $MIN_INT $MAX_INT] +} + +test scan-4.62 {scanning of large and negative octal integers} { + foreach { MIN_INT MAX_INT } [int_range] {} + set scanstring [format {%o %o %o} -1 $MIN_INT $MAX_INT] + list [scan $scanstring {%o %o %o} a b c] \ + [expr { $a == -1 }] [expr { $b == $MIN_INT }] [expr { $c == $MAX_INT }] +} {3 1 1 1} +test scan-4.63 {scanning of large and negative hex integers} { + foreach { MIN_INT MAX_INT } [int_range] {} + set scanstring [format {%x %x %x} -1 $MIN_INT $MAX_INT] + list [scan $scanstring {%x %x %x} a b c] \ + [expr { $a == -1 }] [expr { $b == $MIN_INT }] [expr { $c == $MAX_INT }] +} {3 1 1 1} + +# clean up from last two tests + +catch { + rename int_range {} +} test scan-5.1 {integer scanning} { set a {}; set b {}; set c {}; set d {} list [scan "-20 1476 \n33 0" "%d %d %d %d" a b c d] $a $b $c $d } {4 -20 1476 33 0} @@ -628,19 +657,5 @@ } {200 10 20 30} # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - - - Index: tests/socket.test ================================================================== --- tests/socket.test +++ tests/socket.test @@ -3,16 +3,16 @@ # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1994-1996 Sun Microsystems, Inc. -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: socket.test,v 1.14 2000/04/10 17:19:04 ericm Exp $ +# RCS: @(#) $Id: socket.test,v 1.14.2.1 2000/07/27 01:39:21 hobbs Exp $ # Running socket tests with a remote server: # ------------------------------------------ # # Some tests in socket.test depend on the existence of a remote server to @@ -65,14 +65,15 @@ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } -# Some tests require the testthread command +# Some tests require the testthread and exec commands set ::tcltest::testConstraints(testthread) \ [expr {[info commands testthread] != {}}] +set ::tcltest::testConstraints(exec) [expr {[info commands exec] != {}}] # # If remoteServerIP or remoteServerPort are not set, check in the # environment variables for externally set values. # @@ -549,23 +550,23 @@ vwait sock puts $s2 one flush $s2 after 500 fconfigure $sock -blocking 0 - set result [gets $sock] - lappend result [gets $sock] + set result a:[gets $sock] + lappend result b:[gets $sock] fconfigure $sock -blocking 1 puts $s2 two flush $s2 fconfigure $sock -blocking 0 - lappend result [gets $sock] + lappend result c:[gets $sock] fconfigure $sock -blocking 1 close $s2 close $s close $sock set result -} {one {} two} +} {a:one b: c:two} test socket-3.1 {socket conflict} {socket stdio} { removeFile script set f [open script w] @@ -1274,10 +1275,11 @@ vwait done after cancel $timer sendCommand {close $socket10_13_test_server} list $spurious $len } {0 2690} + test socket-11.12 {testing EOF stickyness} {socket doTestsWithRemoteServer} { set counter 0 set done 0 proc count_up {s} { global counter done after_id @@ -1301,16 +1303,17 @@ proc accept {s a p} { after 100 close $s } } set c [socket $remoteServerIP 2836] - fileevent $c readable "count_up $c" + fileevent $c readable [list count_up $c] set after_id [after 1000 timed_out] vwait done sendCommand {close $socket10_14_test_server} set done } {EOF is sticky} + test socket-11.13 {testing async write, async flush, async close} \ {socket doTestsWithRemoteServer} { proc readit {s} { global count done set l [read $s] @@ -1361,12 +1364,11 @@ after cancel $timer sendCommand {close $l} set count } 65566 -test socket-12.1 {testing inheritance of server sockets} \ - {socket doTestsWithRemoteServer} { +test socket-12.1 {testing inheritance of server sockets} {socket exec} { removeFile script1 removeFile script2 # Script1 is just a 10 second delay. If the server socket # is inherited, it will be held open for 10 seconds @@ -1381,18 +1383,17 @@ # Script2 creates the server socket, launches script1, # waits a second, and exits. The server socket will now # be closed unless script1 inherited it. set f [open script2 w] - puts $f [list set tcltest $::tcltest::tcltest] + puts $f [list set tclsh $::tcltest::tcltest] puts $f { - package require tcltest set f [socket -server accept 2828] proc accept { file addr port } { close $file } - exec $::tcltest::tcltest script1 & + exec $tclsh script1 & close $f after 1000 exit vwait forever } close $f @@ -1414,12 +1415,11 @@ removeFile script1 removeFile script2 set x } {server socket was not inherited} -test socket-12.2 {testing inheritance of client sockets} \ - {socket doTestsWithRemoteServer} { +test socket-12.2 {testing inheritance of client sockets} {socket exec} { removeFile script1 removeFile script2 # Script1 is just a 10 second delay. If the server socket # is inherited, it will be held open for 10 seconds @@ -1434,14 +1434,14 @@ # Script2 opens the client socket and writes to it. It then # launches script1 and exits. If the child process inherited the # client socket, the socket will still be open. set f [open script2 w] - puts $f [list set tcltest $::tcltest::tcltest] + puts $f [list set tclsh $::tcltest::tcltest] puts $f { set f [socket 127.0.0.1 2829] - exec $::tcltest::tcltest script1 & + exec $tclsh script1 & puts $f testing flush $f after 1000 exit vwait forever } @@ -1449,20 +1449,18 @@ # Create the server socket set server [socket -server accept 2829] proc accept { file host port } { - # When the client connects, establish the read handler global server close $server fileevent $file readable [list getdata $file] fconfigure $file -buffering line -blocking 0 return } proc getdata { file } { - # Read handler on the accepted socket. global x global failed set status [catch {read $file} data] if {$status != 0} { @@ -1500,12 +1498,11 @@ } removeFile script1 removeFile script2 set x } {client socket was not inherited} -test socket-12.3 {testing inheritance of accepted sockets} \ - {socket doTestsWithRemoteServer} { +test socket-12.3 {testing inheritance of accepted sockets} {socket exec} { removeFile script1 removeFile script2 set f [open script1 w] puts $f { @@ -1513,17 +1510,17 @@ vwait forever } close $f set f [open script2 w] - puts $f [list set tcltest $::tcltest::tcltest] + puts $f [list set tclsh $::tcltest::tcltest] puts $f { - set server [socket -server accept 2930] + set server [socket -server accept 2931] proc accept { file host port } { - global tcltest + global tclsh puts $file {test data on socket} - exec $::tcltest::tcltest script1 & + exec $tclsh script1 & after 1000 exit } vwait forever } close $f @@ -1534,11 +1531,11 @@ exec $::tcltest::tcltest script2 & after 1000 set ok_to_proceed 1 vwait ok_to_proceed - set f [socket 127.0.0.1 2930] + set f [socket 127.0.0.1 2931] fconfigure $f -buffering full -blocking 0 fileevent $f readable [list getdata $f] # If the socket is still open after 5 seconds, the script1 process # must have inherited the accepted socket. @@ -1545,11 +1542,10 @@ set failed 0 after 5000 set failed 1 proc getdata { file } { - # Read handler on the client socket. global x global failed set status [catch {read $file} data] if {$status != 0} { @@ -1640,16 +1636,5 @@ catch {close $commandSocket} catch {close $remoteProcChan} ::tcltest::cleanupTests flush stdout return - - - - - - - - - - - Index: tests/stack.test ================================================================== --- tests/stack.test +++ tests/stack.test @@ -2,25 +2,45 @@ # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: stack.test,v 1.8 2000/04/10 17:19:04 ericm Exp $ +# RCS: @(#) $Id: stack.test,v 1.8.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } # Note that a failure in this test results in a crash of the executable. +# In order to avoid that, we do a basic check of the current stacksize. +# This size can be changed with ulimit (ksh/bash/sh) or limit (csh/tcsh). + +# This doesn't catch all cases, for example threads of lower stacksize +# can still squeak through. A core check is really needed. -- JH + +if {[string equal $::tcl_platform(platform) "unix"]} { + set stackSize [exec /bin/sh -c "ulimit -s"] + if {[string is integer $stackSize] && ($stackSize < 2400)} { + puts stderr "WARNING: the default application stacksize of $stackSize\ + may cause Tcl to\ncrash due to stack overflow before the\ + recursion limit is reached.\nA minimum stacksize of 2400\ + kbytes is recommended.\nSkipping inifite recursion test." + set ::tcltest::testConstraints(minStack2400) 0 + } else { + set ::tcltest::testConstraints(minStack2400) 1 + } +} else { + set ::tcltest::testConstraints(minStack2400) 1 +} -test stack-1.1 {maxNestingDepth reached on infinite recursion} { +test stack-1.1 {maxNestingDepth reached on infinite recursion} {minStack2400} { proc recurse {} { return [recurse] } catch {recurse} rv rename recurse {} set rv } {too many nested calls to Tcl_EvalObj (infinite loop?)} Index: tests/string.test ================================================================== --- tests/string.test +++ tests/string.test @@ -9,11 +9,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: string.test,v 1.23 2000/04/10 17:19:04 ericm Exp $ +# RCS: @(#) $Id: string.test,v 1.23.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -253,10 +253,16 @@ list [catch {string index "abc" 08} msg] $msg } {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}} test string-5.18 {string index, bad integer} { list [catch {string index "abc" end-00289} msg] $msg } {1 {expected integer but got "-00289" (looks like invalid octal number)}} +test string-5.19 {string index, bytearray object out of bounds} { + string index [binary format I* {0x50515253 0x52}] -1 +} {} +test string-5.20 {string index, bytearray object out of bounds} { + string index [binary format I* {0x50515253 0x52}] 20 +} {} proc largest_int {} { # This will give us what the largest valid int on this machine is, # so we can test for overflow properly below on >32 bit systems @@ -678,10 +684,19 @@ string map -nocase [list \374 ue UE \334] "a\374ueUE\000EU" } aue\334\334\0EU test string-10.14 {string map, -nocase null arguments} { string map -nocase {{} abc} foo } foo +test string-10.15 {string map, one pair case} { + string map -nocase {abc 32} aAbCaBaAbAbcAb +} {a32aBaAb32Ab} +test string-10.16 {string map, one pair case} { + string map -nocase {ab 4321} aAbCaBaAbAbcAb +} {a4321C4321a43214321c4321} +test string-10.17 {string map, one pair case} { + string map {Ab 4321} aAbCaBaAbAbcAb +} {a4321CaBa43214321c4321} test string-11.1 {string match, too few args} { list [catch {string match a} msg] $msg } {1 {wrong # args: should be "string match ?-nocase? pattern string"}} test string-11.2 {string match, too many args} { @@ -796,10 +811,47 @@ string match -nocase {[A-fh-Z]} g } 0 test string-11.38 {string match case, reverse range} { string match {[A-fh-Z]} g } 1 +test string-11.39 {string match, *\ case} { + string match {*\abc} abc +} 1 +test string-11.40 {string match, *special case} { + string match {*[ab]} abc +} 0 +test string-11.41 {string match, *special case} { + string match {*[ab]*} abc +} 1 +test string-11.42 {string match, *special case} { + string match "*\\" "\\" +} 0 +test string-11.43 {string match, *special case} { + string match "*\\\\" "\\" +} 1 +test string-11.44 {string match, *special case} { + string match "*???" "12345" +} 1 +test string-11.45 {string match, *special case} { + string match "*???" "12" +} 0 +test string-11.46 {string match, *special case} { + string match "*\\*" "abc*" +} 1 +test string-11.47 {string match, *special case} { + string match "*\\*" "*" +} 1 +test string-11.48 {string match, *special case} { + string match "*\\*" "*abc" +} 0 +test string-11.49 {string match, *special case} { + string match "?\\*" "a*" +} 1 +test string-11.50 {string match, *special case} { + string match "\\" "\\" +} 0 + test string-12.1 {string range} { list [catch {string range} msg] $msg } {1 {wrong # args: should be "string range string first last"}} test string-12.2 {string range} { @@ -882,10 +934,32 @@ string repeat abc -1 } {} test string-13.7 {string repeat} { list [catch {string repeat abc end} msg] $msg } {1 {expected integer but got "end"}} +test string-13.8 {string repeat} { + string repeat {} -1000 +} {} +test string-13.9 {string repeat} { + string repeat {} 0 +} {} +test string-13.10 {string repeat} { + string repeat def 0 +} {} +test string-13.11 {string repeat} { + string repeat def 1 +} def +test string-13.12 {string repeat} { + string repeat ab\u7266cd 3 +} ab\u7266cdab\u7266cdab\u7266cd +test string-13.13 {string repeat} { + string repeat \x00 3 +} \x00\x00\x00 +test string-13.14 {string repeat} { + # The string range will ensure us that string repeat gets a unicode string + string repeat [string range ab\u7266cd 2 3] 3 +} \u7266c\u7266c\u7266c test string-14.1 {string replace} { list [catch {string replace} msg] $msg } {1 {wrong # args: should be "string replace string first last ?string?"}} test string-14.2 {string replace} { @@ -1161,11 +1235,5 @@ } 3 # cleanup ::tcltest::cleanupTests return - - - - - - Index: tests/stringObj.test ================================================================== --- tests/stringObj.test +++ tests/stringObj.test @@ -10,11 +10,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: stringObj.test,v 1.10 2000/04/10 17:19:04 ericm Exp $ +# RCS: @(#) $Id: stringObj.test,v 1.10.2.2 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -319,31 +319,46 @@ test stringObj-10.1 {Tcl_GetRange with all byte-size chars} { set x "abcdef" list [testobj objtype $x] [set y [string range $x 1 end-1]] \ [testobj objtype $x] [testobj objtype $y] -} {none bcde string string} +} [list none bcde string string] test stringObj-10.2 {Tcl_GetRange with some mixed width chars} { + # Because this test does not use \uXXXX notation below instead of + # hardcoding the values, it may fail in multibyte locales. However, + # we need to test that the parser produces untyped objects even when there + # are high-ASCII characters in the input (like "ï"). I don't know what + # else to do but inline those characters here. set x "abcïïdef" list [testobj objtype $x] [set y [string range $x 1 end-1]] \ [testobj objtype $x] [testobj objtype $y] -} {none bcïïde string string} +} [list none "bc\u00EF\u00EFde" string string] test stringObj-10.3 {Tcl_GetRange with some mixed width chars} { - set x "abcïïdef" + # set x "abcïïdef" + # Use \uXXXX notation below instead of hardcoding the values, otherwise + # the test will fail in multibyte locales. + set x "abc\u00EF\u00EFdef" string length $x list [testobj objtype $x] [set y [string range $x 1 end-1]] \ [testobj objtype $x] [testobj objtype $y] -} {string bcïïde string string} +} [list string "bc\u00EF\u00EFde" string string] test stringObj-10.4 {Tcl_GetRange with some mixed width chars} { - set a "ïa¿b®cï¿d®" + # set a "ïa¿b®cï¿d®" + # Use \uXXXX notation below instead of hardcoding the values, otherwise + # the test will fail in multibyte locales. + set a "\u00EFa\u00BFb\u00AEc\u00EF\u00BFd\u00AE" set result [list] while {[string length $a] > 0} { set a [string range $a 1 end-1] lappend result $a } set result -} {a¿b®cï¿d ¿b®cï¿ b®cï ®c {}} +} [list a\u00BFb\u00AEc\u00EF\u00BFd \ + \u00BFb\u00AEc\u00EF\u00BF \ + b\u00AEc\u00EF \ + \u00AEc \ + {}] test stringObj-11.1 {UpdateStringOfString} { set x 2345 list [string index $x end] [testobj objtype $x] [incr x] \ [testobj objtype $x] @@ -385,14 +400,20 @@ } {6 6} test stringObj-13.4 {Tcl_GetCharLength with mixed width chars} { string length "®" } 1 test stringObj-13.5 {Tcl_GetCharLength with mixed width chars} { - string length "○○" + # string length "○○" + # Use \uXXXX notation below instead of hardcoding the values, otherwise + # the test will fail in multibyte locales. + string length "\u00EF\u00BF\u00AE\u00EF\u00BF\u00AE" } 6 test stringObj-13.6 {Tcl_GetCharLength with mixed width chars} { - set a "ïa¿b®cï¿d®" + # set a "ïa¿b®cï¿d®" + # Use \uXXXX notation below instead of hardcoding the values, otherwise + # the test will fail in multibyte locales. + set a "\u00EFa\u00BFb\u00AEc\u00EF\u00BFd\u00AE" list [string length $a] [string length $a] } {10 10} testobj freeallvars Index: tests/subst.test ================================================================== --- tests/subst.test +++ tests/subst.test @@ -4,16 +4,16 @@ # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994 Sun Microsystems, Inc. -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: subst.test,v 1.6 2000/04/10 17:19:05 ericm Exp $ +# RCS: @(#) $Id: subst.test,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -107,20 +107,72 @@ test subst-7.7 {switches} { set x 123 subst -nov -nob -noc {abc $x [expr 1+2] \\\x41} } {abc $x [expr 1+2] \\\x41} +test subst-8.1 {return in a subst} { + subst {foo [return {x}; bogus code] bar} +} {foo x bar} +test subst-8.2 {return in a subst} { + subst {foo [return x ; bogus code] bar} +} {foo x bar} +test subst-8.3 {return in a subst} { + subst {foo [if 1 { return {x}; bogus code }] bar} +} {foo x bar} +test subst-8.4 {return in a subst} { + subst {[eval {return hi}] there} +} {hi there} +test subst-8.5 {return in a subst} { + subst {foo [return {]}; bogus code] bar} +} {foo ] bar} +test subst-8.6 {return in a subst} { + subst {foo [return {x}; bogus code bar} +} {foo x} +test subst-8.7 {return in a subst, parse error} { + subst {foo [return {x} ; set a {}" ; stuff] bar} +} {foo xset a {}" ; stuff] bar} +test subst-8.8 {return in a subst, parse error} { + subst {foo [return {x} ; set bar baz ; set a {}" ; stuff] bar} +} {foo xset bar baz ; set a {}" ; stuff] bar} + +test subst-9.1 {error in a subst} { + list [catch {subst {[error foo; bogus code]bar}} msg] $msg +} {1 foo} +test subst-9.2 {error in a subst} { + list [catch {subst {[if 1 { error foo; bogus code}]bar}} msg] $msg +} {1 foo} + +test subst-10.1 {break in a subst} { + subst {foo [break; bogus code] bar} +} {foo bar} +test subst-10.2 {break in a subst} { + subst {foo [break; return x; bogus code] bar} +} {foo bar} +test subst-10.3 {break in a subst} { + subst {foo [if 1 { break; bogus code}] bar} +} {foo bar} +test subst-10.4 {break in a subst, parse error} { + subst {foo [break ; set a {}{} ; stuff] bar} +} {foo set a {}{} ; stuff] bar} +test subst-10.5 {break in a subst, parse error} { + subst {foo [break ;set bar baz ;set a {}{} ; stuff] bar} +} {foo set bar baz ;set a {}{} ; stuff] bar} + +test subst-11.1 {continue in a subst} { + subst {foo [continue; bogus code] bar} +} {foo bar} +test subst-11.2 {continue in a subst} { + subst {foo [continue; return x; bogus code] bar} +} {foo bar} +test subst-11.3 {continue in a subst} { + subst {foo [if 1 { continue; bogus code}] bar} +} {foo bar} +test subst-11.4 {continue in a subst, parse error} { + subst {foo [continue ; set a {}{} ; stuff] bar} +} {foo set a {}{} ; stuff] bar} +test subst-11.5 {continue in a subst, parse error} { + subst {foo [continue ;set bar baz ;set a {}{} ; stuff] bar} +} {foo set bar baz ;set a {}{} ; stuff] bar} + # cleanup ::tcltest::cleanupTests return - - - - - - - - - - - - Index: tests/unixInit.test ================================================================== --- tests/unixInit.test +++ tests/unixInit.test @@ -8,11 +8,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: unixInit.test,v 1.13 2000/04/10 17:19:05 ericm Exp $ +# RCS: @(#) $Id: unixInit.test,v 1.13.2.1 2001/04/03 22:54:38 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -148,10 +148,28 @@ test unixInit-2.7 {TclpInitLibraryPath: compiled-in library path} \ {emptyTest unixOnly} { # would need test command to get defaultLibDir and compare it to # [lindex $auto_path end] } {} +test unixInit-2.8 {TclpInitLibraryPath: all absolute pathtype} {unixOnly} { + file delete -force /tmp/sparkly + file delete -force /tmp/lib + file mkdir /tmp/sparkly + file copy $::tcltest::tcltest /tmp/sparkly/tcltest + + file mkdir /tmp/lib/tcl[info tclversion] + close [open /tmp/lib/tcl[info tclversion]/init.tcl w] + + set allAbsolute 1 + foreach dir [getlibpath /tmp/sparkly/tcltest] { + set allAbsolute [expr {$allAbsolute \ + && [string equal absolute [file pathtype $dir]]}] + } + file delete -force /tmp/sparkly + file delete -force /tmp/lib + set allAbsolute +} 1 test unixInit-3.1 {TclpSetInitialEncodings} {unixOnly installedTcl} { set env(LANG) C set f [open "|[list $::tcltest::tcltest]" w+] fconfigure $f -buffering none Index: tests/util.test ================================================================== --- tests/util.test +++ tests/util.test @@ -5,11 +5,11 @@ # Copyright (c) 1998-1999 by Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: util.test,v 1.7 2000/04/10 17:19:06 ericm Exp $ +# RCS: @(#) $Id: util.test,v 1.7.2.1 2001/07/16 23:14:13 hobbs Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest namespace import -force ::tcltest::* } @@ -60,10 +60,14 @@ concat a {b } c } {a b c} test util-4.5 {Tcl_ConcatObj - backslash-space at end of argument} { concat a { } c } {a c} +test util-4.6 {Tcl_ConcatObj - utf-8 sequence with "whitespace" char} { + # Check for Bug #227512. If this violates C isspace, then it returns \xc3. + concat \xe0 +} \xe0 test util-5.1 {Tcl_StringMatch} { string match ab*c abc } 1 test util-5.2 {Tcl_StringMatch} { ADDED tools/configure Index: tools/configure ================================================================== --- /dev/null +++ tools/configure @@ -0,0 +1,817 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --with-tcl=DIR use Tcl 8.3 binaries from DIR" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=man2tcl.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +# RCS: @(#) $Id: configure,v 1.1.2.1 2001/04/03 22:10:13 hobbs Exp $ + +# Recover information that Tcl computed with its configure script. + +#-------------------------------------------------------------------- +# See if there was a command-line option for where Tcl is; if +# not, assume that its top-level directory is a sibling of ours. +#-------------------------------------------------------------------- + +# Check whether --with-tcl or --without-tcl was given. +if test "${with_tcl+set}" = set; then + withval="$with_tcl" + TCL_BIN_DIR=$withval +else + TCL_BIN_DIR=`cd ../../tcl8.3$TCL_PATCH_LEVEL/unix; pwd` +fi + +if test ! -d $TCL_BIN_DIR; then + { echo "configure: error: Tcl directory $TCL_BIN_DIR doesn't exist" 1>&2; exit 1; } +fi +if test ! -f $TCL_BIN_DIR/tclConfig.sh; then + { echo "configure: error: There's no tclConfig.sh in $TCL_BIN_DIR; perhaps you didn't specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?" 1>&2; exit 1; } +fi + +. $TCL_BIN_DIR/tclConfig.sh + +TCL_WIN_VERSION=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION + +CC=$TCL_CC + + + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo "Makefile tcl.hpj" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@TCL_WIN_VERSION@%$TCL_WIN_VERSION%g +s%@CC@%$CC%g +s%@TCL_VERSION@%$TCL_VERSION%g +s%@TCL_PATCH_LEVEL@%$TCL_PATCH_LEVEL%g +s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g +s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + Index: tools/man2help.tcl ================================================================== --- tools/man2help.tcl +++ tools/man2help.tcl @@ -4,11 +4,11 @@ # man2tcl program to generate a Windows help file from Tcl manual # entries. # # Copyright (c) 1996 by Sun Microsystems, Inc. # -# RCS: @(#) $Id: man2help.tcl,v 1.6 1999/12/22 22:59:59 hobbs Exp $ +# RCS: @(#) $Id: man2help.tcl,v 1.6.2.1 2001/04/03 22:54:38 hobbs Exp $ # # # PASS 1 # @@ -96,11 +96,11 @@ # Arguments: # dir - Name of the directory. proc doDir dir { puts "Generating man pages for $dir..." - foreach f [lsort [glob [file join $dir *.\[13n\]]]] { + foreach f [lsort [glob -directory $dir "*.\[13n\]"]] { do $f } } # process command line arguments @@ -114,11 +114,11 @@ set version [lindex $argv 1] set files {} foreach i [lrange $argv 2 end] { set i [file join $i] if {[file isdir $i]} { - foreach f [lsort [glob [file join $i *.\[13n\]]]] { + foreach f [lsort [glob -directory $i "*.\[13n\]"]] { lappend files $f } } elseif {[file exists $i]} { lappend files $i } Index: tools/man2html.tcl ================================================================== --- tools/man2html.tcl +++ tools/man2html.tcl @@ -73,11 +73,11 @@ # # Arguments: # dir - Name of the directory. proc doDir dir { - foreach f [lsort [glob $dir/*.\[13n\]]] { + foreach f [lsort [glob -directory $dir "*.\[13n\]"]] { do $f ;# defined in man2html1.tcl & man2html2.tcl } } Index: tools/tcl.wse.in ================================================================== --- tools/tcl.wse.in +++ tools/tcl.wse.in @@ -10,11 +10,11 @@ End Gradient=0 0 0 Windows Flags=00000000000000010010110000001000 Log Pathname=%MAINDIR%\INSTALL.LOG Message Font=MS Sans Serif Font Size=8 - Disk Label=tcl8.3.1 + Disk Label=tcl8.3.3 Disk Filename=setup Patch Flags=0000000000000001 Patch Threshold=85 Patch Memory=4000 Variable Name1=_SYS_ @@ -52,11 +52,11 @@ Variable=APPTITLE Value=Tcl/Tk %PATCHLEVEL% for Windows end item: Set Variable Variable=URL - Value=http://dev.scriptics.com/registration/%PATCHLEVEL%.html + Value=http://tcl.activestate.com/ end item: Set Variable Variable=GROUP Value=Tcl end @@ -1027,10 +1027,15 @@ item: Install File Source=${__TKBASEDIR__}\generic\tkDecls.h Destination=%MAINDIR%\include\tkDecls.h Flags=0000000000000010 end +item: Install File + Source=${__TKBASEDIR__}\generic\tkPlatDecls.h + Destination=%MAINDIR%\include\tkPlatDecls.h + Flags=0000000000000010 +end item: Install File Source=${__TKBASEDIR__}\generic\tkIntXlibDecls.h Destination=%MAINDIR%\include\tkIntXlibDecls.h Flags=0000000000000010 end @@ -1042,25 +1047,30 @@ item: Install File Source=${__TCLBASEDIR__}\generic\tclDecls.h Destination=%MAINDIR%\include\tclDecls.h Flags=0000000000000010 end +item: Install File + Source=${__TCLBASEDIR__}\generic\tclPlatDecls.h + Destination=%MAINDIR%\include\tclPlatDecls.h + Flags=0000000000000010 +end item: End Block end item: If/While Statement Variable=COMPONENTS Value=A Flags=00001010 end item: Install File - Source=${__TCLBASEDIR__}\library\msgcat1.0\pkgIndex.tcl - Destination=%MAINDIR%\lib\tcl%VER%\msgcat1.0\pkgIndex.tcl + Source=${__TCLBASEDIR__}\library\msgcat\pkgIndex.tcl + Destination=%MAINDIR%\lib\tcl%VER%\msgcat1.1\pkgIndex.tcl Flags=0000000010000010 end item: Install File - Source=${__TCLBASEDIR__}\library\msgcat1.0\msgcat.tcl - Destination=%MAINDIR%\lib\tcl%VER%\msgcat1.0\msgcat.tcl + Source=${__TCLBASEDIR__}\library\msgcat\msgcat.tcl + Destination=%MAINDIR%\lib\tcl%VER%\msgcat1.1\msgcat.tcl Flags=0000000010000010 end item: Install File Source=${__TCLBASEDIR__}\library\tcltest1.0\pkgIndex.tcl Destination=%MAINDIR%\lib\tcl%VER%\tcltest1.0\pkgIndex.tcl @@ -1415,26 +1425,26 @@ Source=${__TCLBASEDIR__}\library\encoding\big5.enc Destination=%MAINDIR%\lib\tcl%VER%\encoding\big5.enc Flags=0000000000000010 end item: Install File - Source=${__TCLBASEDIR__}\library\opt0.4\pkgIndex.tcl + Source=${__TCLBASEDIR__}\library\opt\pkgIndex.tcl Destination=%MAINDIR%\lib\tcl%VER%\opt0.4\pkgIndex.tcl Flags=0000000000000010 end item: Install File - Source=${__TCLBASEDIR__}\library\opt0.4\optparse.tcl + Source=${__TCLBASEDIR__}\library\opt\optparse.tcl Destination=%MAINDIR%\lib\tcl%VER%\opt0.4\optparse.tcl Flags=0000000000000010 end item: Install File - Source=${__TCLBASEDIR__}\library\http2.3\pkgIndex.tcl + Source=${__TCLBASEDIR__}\library\http\pkgIndex.tcl Destination=%MAINDIR%\lib\tcl%VER%\http2.3\pkgIndex.tcl Flags=0000000000000010 end item: Install File - Source=${__TCLBASEDIR__}\library\http2.3\http.tcl + Source=${__TCLBASEDIR__}\library\http\http.tcl Destination=%MAINDIR%\lib\tcl%VER%\http2.3\http.tcl Flags=0000000000000010 end item: Install File Source=${__TKBASEDIR__}\library\msgbox.tcl @@ -2026,11 +2036,11 @@ Variable=MAINDIR Value=%MAINDIR% Flags=00010100 end item: Include Script - Pathname=\\pop\tools\1.2\win32-ix86\wise\INCLUDE\uninstal.wse + Pathname=D:\win32-ix86\wise\INCLUDE\uninstal.wse end item: Check Configuration Flags=10111011 end item: Get Registry Key Value @@ -2208,19 +2218,10 @@ Directory=%MAINDIR%\bin end item: Check Configuration Flags=10111011 end -item: Set Variable - Variable=TO_SCRIPTICS - Value=A -end -item: Else Statement -end -item: Set Variable - Variable=TO_SCRIPTICS -end item: End Block end item: Wizard Block Direction Variable=DIRECTION Display Variable=DISPLAY @@ -2315,42 +2316,18 @@ Text Spanish=Presione el botón Terminar para salir de esta instalación. Text Italian=L'installazione %APPTITLE% è stata portata a termine con successo. Text Italian= Text Italian=Premere il pulsante Fine per uscire dall'installazione. end - item: Checkbox - Rectangle=88 143 245 157 - Variable=TO_SCRIPTICS - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000010000000000000011 - Text=Show me important information about - Text= - end - item: Static - Rectangle=99 156 245 170 - Enabled Color=00000000000000001111111111111111 - Create Flags=01010000000000000000000000000000 - Text=Tcl/Tk %VER% and TclPro - end end end item: End Block end item: Check Configuration Flags=10111011 end -item: If/While Statement - Variable=TO_SCRIPTICS - Value=A - Flags=00000010 -end -item: Execute Program - Command Line=%URL% -end -item: End Block -end item: Execute Program Pathname=explorer Command Line=%GROUP% end item: End Block end Index: tools/tclSplash.bmp ================================================================== --- tools/tclSplash.bmp +++ tools/tclSplash.bmp cannot compute difference between binary files Index: unix/Makefile.in ================================================================== --- unix/Makefile.in +++ unix/Makefile.in @@ -3,11 +3,11 @@ # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.63 2000/04/25 20:58:48 hobbs Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.63.2.4 2001/04/03 23:00:17 hobbs Exp $ VERSION = @TCL_VERSION@ #---------------------------------------------------------------- # Things you can change to personalize the Makefile for your own @@ -264,12 +264,12 @@ GENERIC_OBJS = regcomp.o regexec.o regfree.o regerror.o tclAlloc.o \ tclAsync.o tclBasic.o tclBinary.o \ tclCkalloc.o tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o \ tclCompCmds.o tclCompExpr.o tclCompile.o tclDate.o tclEncoding.o \ tclEnv.o tclEvent.o tclExecute.o tclFCmd.o tclFileName.o tclGet.o \ - tclHash.o tclHistory.o tclIndexObj.o tclInterp.o tclIO.o \ - tclIOCmd.o tclIOSock.o tclIOUtil.o tclLink.o tclListObj.o \ + tclHash.o tclHistory.o tclIndexObj.o tclInterp.o tclIO.o tclIOCmd.o \ + tclIOGT.o tclIOSock.o tclIOUtil.o tclLink.o tclListObj.o \ tclLiteral.o tclLoad.o tclMain.o tclNamesp.o tclNotify.o \ tclObj.o tclPanic.o tclParse.o tclParseExpr.o tclPipe.o \ tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o tclRegexp.o \ tclResolve.o tclResult.o tclScan.o tclStringObj.o tclThread.o \ tclStubInit.o tclStubLib.o tclTimer.o tclUtf.o tclUtil.o tclVar.o @@ -322,10 +322,11 @@ $(GENERIC_DIR)/tclHistory.c \ $(GENERIC_DIR)/tclIndexObj.c \ $(GENERIC_DIR)/tclInterp.c \ $(GENERIC_DIR)/tclIO.c \ $(GENERIC_DIR)/tclIOCmd.c \ + $(GENERIC_DIR)/tclIOGT.c \ $(GENERIC_DIR)/tclIOSock.c \ $(GENERIC_DIR)/tclIOUtil.c \ $(GENERIC_DIR)/tclLink.c \ $(GENERIC_DIR)/tclListObj.c \ $(GENERIC_DIR)/tclLiteral.c \ @@ -432,21 +433,23 @@ tcltest: ${TCLTEST_OBJS} ${TCL_LIB_FILE} ${BUILD_DLTEST} ${CC} @LDFLAGS@ ${TCLTEST_OBJS} @TCL_BUILD_LIB_SPEC@ ${LIBS} \ @TCL_LD_SEARCH_FLAGS@ -o tcltest - # Note, in the target below TCL_LIBRARY needs to be set or else # "make test" won't work in the case where the compilation directory # isn't the same as the source directory. +# Specifying TESTFLAGS on the command line is the standard way to pass +# args to tcltest, ie: +# % make test TESTFLAGS="-verbose bps -file fileName.test" test: tcltest LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \ LIBPATH=`pwd`:${LIBPATH}; export LIBPATH; \ SHLIB_PATH=`pwd`:${SHLIB_PATH}; export SHLIB_PATH; \ TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \ - ./tcltest $(TOP_DIR)/tests/all.tcl $(TCLTESTARGS) + ./tcltest $(TOP_DIR)/tests/all.tcl $(TESTFLAGS) $(TCLTESTARGS) # Useful target to launch a built tcltest with the proper path,... runtest: tcltest LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \ LIBPATH=`pwd`:${LIBPATH}; export LIBPATH; \ @@ -471,11 +474,11 @@ # so that make doesn't try to automatically regenerate the .c file. gendate: yacc -l $(GENERIC_DIR)/tclGetDate.y sed -e 's/yy/TclDate/g' -e '/^#include /d' \ - -e 's?SCCSID?RCS: @(#) $$Id: Makefile.in,v 1.63 2000/04/25 20:58:48 hobbs Exp $$?' \ + -e 's?SCCSID?RCS: @(#) $$Id: Makefile.in,v 1.63.2.4 2001/04/03 23:00:17 hobbs Exp $$?' \ -e '/#ifdef __STDC__/,/#endif/d' -e '/TclDateerrlab:/d' \ -e '/TclDatenewstate:/d' -e '/#pragma/d' \ -e '/#include /d' -e 's/const /CONST /g' \ $(GENERIC_DIR)/tclDate.c rm y.tab.c @@ -547,11 +550,11 @@ mkdir -p $$i; \ chmod 755 $$i; \ else true; \ fi; \ done; - @for i in http2.3 http1.0 opt0.4 encoding msgcat1.0 tcltest1.0; \ + @for i in http2.3 http1.0 opt0.4 encoding msgcat1.1 tcltest1.0; \ do \ if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \ echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \ mkdir -p $(SCRIPT_INSTALL_DIR)/$$i; \ chmod 755 $(SCRIPT_INSTALL_DIR)/$$i; \ @@ -560,26 +563,44 @@ done; @if test ! -x $(SRC_DIR)/install-sh; then \ chmod +x $(SRC_DIR)/install-sh; \ fi @echo "Installing header files"; - @for i in $(GENERIC_DIR)/tcl.h $(GENERIC_DIR)/tclDecls.h ; \ + @for i in $(GENERIC_DIR)/tcl.h $(GENERIC_DIR)/tclDecls.h \ + $(GENERIC_DIR)/tclPlatDecls.h ; \ do \ $(INSTALL_DATA) $$i $(INCLUDE_INSTALL_DIR); \ done; @echo "Installing library files to $(SCRIPT_INSTALL_DIR)"; @for i in $(TOP_DIR)/library/*.tcl $(TOP_DIR)/library/tclIndex $(UNIX_DIR)/tclAppInit.c $(UNIX_DIR)/ldAix; \ do \ $(INSTALL_DATA) $$i $(SCRIPT_INSTALL_DIR); \ done; - @for i in http2.3 http1.0 opt0.4 msgcat1.0 tcltest1.0; \ + @echo "Installing library http1.0 directory"; + @for j in $(TOP_DIR)/library/http1.0/*.tcl ; \ + do \ + $(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/http1.0; \ + done; + @echo "Installing library http2.3 directory"; + @for j in $(TOP_DIR)/library/http/*.tcl ; \ + do \ + $(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/http2.3; \ + done; + @echo "Installing library opt0.4 directory"; + @for j in $(TOP_DIR)/library/opt/*.tcl ; \ + do \ + $(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/opt0.4; \ + done; + @echo "Installing library msgcat1.1 directory"; + @for j in $(TOP_DIR)/library/msgcat/*.tcl ; \ + do \ + $(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/msgcat1.1; \ + done; + @echo "Installing library tcltest1.0 directory"; + @for j in $(TOP_DIR)/library/tcltest1.0/*.tcl ; \ do \ - echo "Installing library $$i directory"; \ - for j in $(TOP_DIR)/library/$$i/*.tcl ; \ - do \ - $(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/$$i; \ - done; \ + $(INSTALL_DATA) $$j $(SCRIPT_INSTALL_DIR)/tcltest1.0; \ done; @echo "Installing library encoding directory"; @for i in $(TOP_DIR)/library/encoding/*.enc ; do \ $(INSTALL_DATA) $$i $(SCRIPT_INSTALL_DIR)/encoding; \ done; @@ -642,13 +663,10 @@ if test -f dltest/Makefile; then cd dltest; $(MAKE) distclean; fi depend: makedepend -- $(DEPEND_SWITCHES) -- $(SRCS) -bp: $(UNIX_DIR)/bp.c - $(CC) $(CC_SWITCHES) $(UNIX_DIR)/bp.c -o bp - # Test binaries. The rules for tclTestInit.o and xtTestInit.o are # complicated because they are compiled from tclAppInit.c. Can't use # the "-o" option because this doesn't work on some strange compilers # (e.g. UnixWare). @@ -780,10 +798,13 @@ $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIO.c tclIOCmd.o: $(GENERIC_DIR)/tclIOCmd.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOCmd.c +tclIOGT.o: $(GENERIC_DIR)/tclIOGT.c + $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOGT.c + tclIOSock.o: $(GENERIC_DIR)/tclIOSock.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOSock.c tclIOUtil.o: $(GENERIC_DIR)/tclIOUtil.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclIOUtil.c @@ -1070,10 +1091,15 @@ mkdir -p RPMS/i386 rpm -bb THIS.TCL.SPEC mv RPMS/i386/*.rpm . rm -rf RPMS THIS.TCL.SPEC +mklinks: + $(TCL_EXE) $(UNIX_DIR)/mkLinks.tcl \ + $(UNIX_DIR)/../doc/*.[13n] > $(UNIX_DIR)/mkLinks + chmod +x $(UNIX_DIR)/mkLinks + # # Target to create a proper Tcl distribution from information in the # master source directory. DISTDIR must be defined to indicate where # to put the distribution. # @@ -1082,30 +1108,26 @@ DISTNAME = tcl@TCL_VERSION@@TCL_PATCH_LEVEL@ ZIPNAME = tcl@TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@@TCL_PATCH_LEVEL@.zip DISTDIR = $(DISTROOT)/$(DISTNAME) $(UNIX_DIR)/configure: $(UNIX_DIR)/configure.in autoconf $(UNIX_DIR)/configure.in > $(UNIX_DIR)/configure -dist: $(UNIX_DIR)/configure + +dist: $(UNIX_DIR)/configure mklinks rm -rf $(DISTDIR) - mkdir $(DISTDIR) - mkdir $(DISTDIR)/unix + mkdir -p $(DISTDIR)/unix cp -p $(UNIX_DIR)/*.c $(UNIX_DIR)/*.h $(DISTDIR)/unix - rm -f $(DISTDIR)/unix/bp.c cp $(UNIX_DIR)/Makefile.in $(DISTDIR)/unix chmod 664 $(DISTDIR)/unix/Makefile.in cp $(UNIX_DIR)/configure $(UNIX_DIR)/configure.in \ $(UNIX_DIR)/tcl.m4 $(UNIX_DIR)/aclocal.m4 \ $(UNIX_DIR)/tclConfig.sh.in $(UNIX_DIR)/install-sh \ - $(UNIX_DIR)/README $(UNIX_DIR)/ldAix \ + $(UNIX_DIR)/README $(UNIX_DIR)/ldAix $(UNIX_DIR)/tcl.spec \ + $(UNIX_DIR)/mkLinks \ $(DISTDIR)/unix chmod 775 $(DISTDIR)/unix/configure $(DISTDIR)/unix/configure.in chmod 775 $(DISTDIR)/unix/ldAix chmod +x $(DISTDIR)/unix/install-sh - - $(TCL_EXE) $(UNIX_DIR)/mkLinks.tcl \ - $(UNIX_DIR)/../doc/*.[13n] > $(DISTDIR)/unix/mkLinks - chmod +x $(DISTDIR)/unix/mkLinks mkdir $(DISTDIR)/generic cp -p $(GENERIC_DIR)/*.c $(GENERIC_DIR)/*.h $(DISTDIR)/generic cp -p $(GENERIC_DIR)/*.decls $(DISTDIR)/generic cp -p $(GENERIC_DIR)/README $(DISTDIR)/generic cp -p $(GENERIC_DIR)/tclGetDate.y $(DISTDIR)/generic @@ -1112,11 +1134,11 @@ cp -p $(TOP_DIR)/changes $(TOP_DIR)/ChangeLog $(TOP_DIR)/README* \ $(TOP_DIR)/license.terms $(DISTDIR) mkdir $(DISTDIR)/library cp -p $(TOP_DIR)/license.terms $(TOP_DIR)/library/*.tcl \ $(TOP_DIR)/library/tclIndex $(DISTDIR)/library - for i in http2.3 http1.0 opt0.4 msgcat1.0 reg1.0 dde1.1 tcltest1.0; \ + for i in http http1.0 opt msgcat reg1.0 dde1.1 tcltest1.0; \ do \ mkdir $(DISTDIR)/library/$$i ;\ cp -p $(TOP_DIR)/library/$$i/*.tcl $(DISTDIR)/library/$$i; \ done; mkdir $(DISTDIR)/library/encoding @@ -1136,44 +1158,41 @@ mkdir $(DISTDIR)/tests/pkg cp -p $(TOP_DIR)/license.terms $(DISTDIR)/tests/pkg cp -p $(TOP_DIR)/tests/pkg/*.tcl $(DISTDIR)/tests/pkg mkdir $(DISTDIR)/win cp $(TOP_DIR)/win/Makefile.in $(DISTDIR)/win - cp $(TOP_DIR)/win/configure.in \ - $(TOP_DIR)/win/configure \ + cp $(TOP_DIR)/win/configure.in $(TOP_DIR)/win/configure \ $(TOP_DIR)/win/tclConfig.sh.in \ $(TOP_DIR)/win/tcl.m4 $(TOP_DIR)/win/aclocal.m4 \ $(DISTDIR)/win - cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h $(TOP_DIR)/win/*.rc \ + cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h \ + $(TOP_DIR)/win/*.ico $(TOP_DIR)/win/*.rc \ $(DISTDIR)/win cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win + cp -p $(TOP_DIR)/win/tcl.hpj.in $(DISTDIR)/win cp -p $(TOP_DIR)/win/README $(DISTDIR)/win cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win mkdir $(DISTDIR)/mac - cp -p $(TOP_DIR)/mac/tclMacProjects.sea.hqx $(DISTDIR)/mac - cp -p $(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \ + cp -p $(TOP_DIR)/mac/tclMacProjects.sea.hqx \ + $(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \ $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/porting.notes $(TOP_DIR)/mac/README $(DISTDIR)/mac cp -p $(TOP_DIR)/mac/*.exp $(TOP_DIR)/mac/*.pch $(DISTDIR)/mac - cp -p $(TOP_DIR)/mac/*.doc $(DISTDIR)/mac - cp -p $(TOP_DIR)/mac/*.html $(DISTDIR)/mac + cp -p $(TOP_DIR)/mac/*.doc $(TOP_DIR)/mac/*.html $(DISTDIR)/mac cp -p $(TOP_DIR)/license.terms $(DISTDIR)/mac mkdir $(DISTDIR)/unix/dltest cp -p $(UNIX_DIR)/dltest/*.c $(UNIX_DIR)/dltest/Makefile.in \ $(DISTDIR)/unix/dltest cp -p $(UNIX_DIR)/dltest/configure.in $(UNIX_DIR)/dltest/configure \ $(UNIX_DIR)/dltest/README $(DISTDIR)/unix/dltest mkdir $(DISTDIR)/tools - cp -p $(TOP_DIR)/tools/Makefile.in \ - $(TOP_DIR)/tools/README \ - $(TOP_DIR)/tools/configure.in \ - $(TOP_DIR)/tools/*.tcl \ - $(TOP_DIR)/tools/man2tcl.c \ - $(TOP_DIR)/tools/tcl.wse.in \ - $(TOP_DIR)/tools/*.bmp \ - $(TOP_DIR)/tools/tcl.hpj.in \ + cp -p $(TOP_DIR)/tools/Makefile.in $(TOP_DIR)/tools/README \ + $(TOP_DIR)/tools/configure $(TOP_DIR)/tools/configure.in \ + $(TOP_DIR)/tools/*.tcl $(TOP_DIR)/tools/man2tcl.c \ + $(TOP_DIR)/tools/tcl.wse.in $(TOP_DIR)/tools/*.bmp \ + $(TOP_DIR)/tools/tcl.hpj.in \ $(DISTDIR)/tools # # The following target can only be used for non-patch releases. Use # the "allpatch" target below for patch releases. Index: unix/README ================================================================== --- unix/README +++ unix/README @@ -20,11 +20,11 @@ V. We know that it runs on workstations from Sun, H-P, DEC, IBM, and SGI, as well as PCs running Linux, BSDI, and SCO UNIX. To compile for a PC running Windows, see the README file in the directory ../win. To compile for a Macintosh, see the README file in the directory ../mac. -RCS: @(#) $Id: README,v 1.11 2000/04/26 17:31:21 hobbs Exp $ +RCS: @(#) $Id: README,v 1.11.2.1 2001/04/03 22:08:33 hobbs Exp $ How To Compile And Install Tcl: ------------------------------- (a) Check for patches as described in ../README. @@ -121,12 +121,12 @@ each error. See the README file in the "tests" directory for more information on the test suite. Note: don't run the tests as superuser: this will cause several of them to fail. If a test is failing consistently, please send us a bug report with as much detail as you can manage. Please use the online database at - http://dev.scriptics.com/ticket/ + http://tcl.sourceforge.net/ The Tcl test suite is very sensitive to proper implementation of ANSI C library procedures such as sprintf and sscanf. If the test suite generates errors, most likely they are due to non-conformance of your system's ANSI C library; such problems are unlikely to affect any real applications so it's probably safe to ignore them. ADDED unix/configure Index: unix/configure ================================================================== --- /dev/null +++ unix/configure @@ -0,0 +1,6365 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-gcc allow use of gcc if available [--disable-gcc]" +ac_help="$ac_help + --enable-threads build with threads" +ac_help="$ac_help + --enable-64bit enable 64bit support (where applicable)" +ac_help="$ac_help + --enable-64bit-vis enable 64bit Sparc VIS support" +ac_help="$ac_help + --disable-load disallow dynamic loading and "load" command" +ac_help="$ac_help + --enable-symbols build with debugging symbols [--disable-symbols]" +ac_help="$ac_help + --enable-shared build and link with shared libraries [--enable-shared]" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=../generic/tcl.h + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +# RCS: @(#) $Id: configure.in,v 1.57.2.2 2001/04/03 22:54:39 hobbs Exp $ + +TCL_VERSION=8.3 +TCL_MAJOR_VERSION=8 +TCL_MINOR_VERSION=3 +TCL_PATCH_LEVEL=".3" +VERSION=${TCL_VERSION} + +#------------------------------------------------------------------------ +# Handle the --prefix=... option +#------------------------------------------------------------------------ + +if test "${prefix}" = "NONE"; then + prefix=/usr/local +fi +if test "${exec_prefix}" = "NONE"; then + exec_prefix=$prefix +fi +TCL_SRC_DIR=`cd $srcdir/..; pwd` + +#------------------------------------------------------------------------ +# Standard compiler checks +#------------------------------------------------------------------------ + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:566: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + # Check whether --enable-gcc or --disable-gcc was given. +if test "${enable_gcc+set}" = set; then + enableval="$enable_gcc" + ok=$enableval +else + ok=no +fi + + if test "$ok" = "yes"; then + CC=gcc + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:607: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:637: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:688: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:720: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 731 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:762: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:767: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:795: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + + else + CC=${CC-cc} + fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:831: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:886: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +for ac_hdr in unistd.h limits.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:914: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:924: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + +#------------------------------------------------------------------------ +# Threads support +#------------------------------------------------------------------------ + + + echo $ac_n "checking for building with threads""... $ac_c" 1>&6 +echo "configure:957: checking for building with threads" >&5 + # Check whether --enable-threads or --disable-threads was given. +if test "${enable_threads+set}" = set; then + enableval="$enable_threads" + tcl_ok=$enableval +else + tcl_ok=no +fi + + + if test "$tcl_ok" = "yes"; then + echo "$ac_t""yes" 1>&6 + TCL_THREADS=1 + cat >> confdefs.h <<\EOF +#define TCL_THREADS 1 +EOF + + cat >> confdefs.h <<\EOF +#define _REENTRANT 1 +EOF + + cat >> confdefs.h <<\EOF +#define _THREAD_SAFE 1 +EOF + + echo $ac_n "checking for pthread_mutex_init in -lpthread""... $ac_c" 1>&6 +echo "configure:983: checking for pthread_mutex_init in -lpthread" >&5 +ac_lib_var=`echo pthread'_'pthread_mutex_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lpthread $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=yes +else + echo "$ac_t""no" 1>&6 +tcl_ok=no +fi + + if test "$tcl_ok" = "no"; then + # Check a little harder for __pthread_mutex_init in the same + # library, as some systems hide it there until pthread.h is + # defined. We could alternatively do an AC_TRY_COMPILE with + # pthread.h, but that will work with libpthread really doesn't + # exist, like AIX 4.2. [Bug: 4359] + echo $ac_n "checking for __pthread_mutex_init in -lpthread""... $ac_c" 1>&6 +echo "configure:1030: checking for __pthread_mutex_init in -lpthread" >&5 +ac_lib_var=`echo pthread'_'__pthread_mutex_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lpthread $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=yes +else + echo "$ac_t""no" 1>&6 +tcl_ok=no +fi + + fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthread" + else + echo $ac_n "checking for pthread_mutex_init in -lpthreads""... $ac_c" 1>&6 +echo "configure:1077: checking for pthread_mutex_init in -lpthreads" >&5 +ac_lib_var=`echo pthreads'_'pthread_mutex_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lpthreads $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=yes +else + echo "$ac_t""no" 1>&6 +tcl_ok=no +fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthreads" + else + echo $ac_n "checking for pthread_mutex_init in -lc""... $ac_c" 1>&6 +echo "configure:1122: checking for pthread_mutex_init in -lc" >&5 +ac_lib_var=`echo c'_'pthread_mutex_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=yes +else + echo "$ac_t""no" 1>&6 +tcl_ok=no +fi + + if test "$tcl_ok" = "no"; then + TCL_THREADS=0 + echo "configure: warning: "Don t know how to find pthread lib on your system - you must disable thread support or edit the LIBS in the Makefile..."" 1>&2 + fi + fi + fi + + # Does the pthread-implementation provide + # 'pthread_attr_setstacksize' ? + + for ac_func in pthread_attr_setstacksize +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1175: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + else + TCL_THREADS=0 + echo "$ac_t""no (default)" 1>&6 + fi + + +#------------------------------------------------------------------------ +# If we're using GCC, see if the compiler understands -pipe. If so, use it. +# It makes compiling go faster. (This is only a performance feature.) +#------------------------------------------------------------------------ + +if test -z "$no_pipe"; then +if test -n "$GCC"; then + echo $ac_n "checking if the compiler understands -pipe""... $ac_c" 1>&6 +echo "configure:1241: checking if the compiler understands -pipe" >&5 + OLDCC="$CC" + CC="$CC -pipe" + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CC="$OLDCC" + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* +fi +fi + +#-------------------------------------------------------------------- +# Supply substitutes for missing POSIX library procedures, or +# set flags so Tcl uses alternate procedures. +#-------------------------------------------------------------------- + +# Check if Posix compliant getcwd exists, if not we'll use getwd. +for ac_func in getcwd +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1275: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +cat >> confdefs.h <<\EOF +#define USEGETWD 1 +EOF + +fi +done + +# Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really +# define USEGETWD even if the posix getcwd exists. Add a test ? + +for ac_func in opendir strstr +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1337: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" +fi +done + + + +for ac_func in strtol tmpnam waitpid +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1395: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" +fi +done + + +echo $ac_n "checking for strerror""... $ac_c" 1>&6 +echo "configure:1450: checking for strerror" >&5 +if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strerror) || defined (__stub___strerror) +choke me +#else +strerror(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strerror=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_strerror=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'strerror`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_STRERROR 1 +EOF + +fi + +echo $ac_n "checking for getwd""... $ac_c" 1>&6 +echo "configure:1502: checking for getwd" >&5 +if eval "test \"`echo '$''{'ac_cv_func_getwd'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char getwd(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_getwd) || defined (__stub___getwd) +choke me +#else +getwd(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_getwd=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_getwd=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'getwd`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_GETWD 1 +EOF + +fi + +echo $ac_n "checking for wait3""... $ac_c" 1>&6 +echo "configure:1554: checking for wait3" >&5 +if eval "test \"`echo '$''{'ac_cv_func_wait3'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char wait3(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_wait3) || defined (__stub___wait3) +choke me +#else +wait3(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_wait3=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_wait3=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'wait3`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_WAIT3 1 +EOF + +fi + +echo $ac_n "checking for uname""... $ac_c" 1>&6 +echo "configure:1606: checking for uname" >&5 +if eval "test \"`echo '$''{'ac_cv_func_uname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char uname(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_uname) || defined (__stub___uname) +choke me +#else +uname(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1634: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_uname=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_uname=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'uname`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_UNAME 1 +EOF + +fi + +echo $ac_n "checking for realpath""... $ac_c" 1>&6 +echo "configure:1658: checking for realpath" >&5 +if eval "test \"`echo '$''{'ac_cv_func_realpath'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char realpath(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_realpath) || defined (__stub___realpath) +choke me +#else +realpath(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_realpath=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_realpath=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'realpath`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_REALPATH 1 +EOF + +fi + + +#-------------------------------------------------------------------- +# Supply substitutes for missing POSIX header files. Special +# notes: +# - stdlib.h doesn't define strtol, strtoul, or +# strtod insome versions of SunOS +# - some versions of string.h don't declare procedures such +# as strstr +#-------------------------------------------------------------------- + + + + echo $ac_n "checking dirent.h""... $ac_c" 1>&6 +echo "configure:1722: checking dirent.h" >&5 + cat > conftest.$ac_ext < +#include +int main() { + +#ifndef _POSIX_SOURCE +# ifdef __Lynx__ + /* + * Generate compilation error to make the test fail: Lynx headers + * are only valid if really in the POSIX environment. + */ + + missing_procedure(); +# endif +#endif +DIR *d; +struct dirent *entryPtr; +char *p; +d = opendir("foobar"); +entryPtr = readdir(d); +p = entryPtr->d_name; +closedir(d); + +; return 0; } +EOF +if { (eval echo configure:1750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + tcl_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=no +fi +rm -f conftest* + + if test $tcl_ok = no; then + cat >> confdefs.h <<\EOF +#define NO_DIRENT_H 1 +EOF + + fi + + echo "$ac_t""$tcl_ok" 1>&6 + ac_safe=`echo "errno.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for errno.h""... $ac_c" 1>&6 +echo "configure:1771: checking for errno.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_ERRNO_H 1 +EOF + +fi + + ac_safe=`echo "float.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for float.h""... $ac_c" 1>&6 +echo "configure:1808: checking for float.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_FLOAT_H 1 +EOF + +fi + + ac_safe=`echo "values.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for values.h""... $ac_c" 1>&6 +echo "configure:1845: checking for values.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1855: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_VALUES_H 1 +EOF + +fi + + ac_safe=`echo "limits.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for limits.h""... $ac_c" 1>&6 +echo "configure:1882: checking for limits.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_LIMITS_H 1 +EOF + +fi + + ac_safe=`echo "stdlib.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for stdlib.h""... $ac_c" 1>&6 +echo "configure:1919: checking for stdlib.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1929: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "strtol" >/dev/null 2>&1; then + : +else + rm -rf conftest* + tcl_ok=0 +fi +rm -f conftest* + + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "strtoul" >/dev/null 2>&1; then + : +else + rm -rf conftest* + tcl_ok=0 +fi +rm -f conftest* + + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "strtod" >/dev/null 2>&1; then + : +else + rm -rf conftest* + tcl_ok=0 +fi +rm -f conftest* + + if test $tcl_ok = 0; then + cat >> confdefs.h <<\EOF +#define NO_STDLIB_H 1 +EOF + + fi + ac_safe=`echo "string.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for string.h""... $ac_c" 1>&6 +echo "configure:2001: checking for string.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "strstr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + tcl_ok=0 +fi +rm -f conftest* + + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "strerror" >/dev/null 2>&1; then + : +else + rm -rf conftest* + tcl_ok=0 +fi +rm -f conftest* + + + # See also memmove check below for a place where NO_STRING_H can be + # set and why. + + if test $tcl_ok = 0; then + cat >> confdefs.h <<\EOF +#define NO_STRING_H 1 +EOF + + fi + + ac_safe=`echo "sys/wait.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for sys/wait.h""... $ac_c" 1>&6 +echo "configure:2074: checking for sys/wait.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2084: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_SYS_WAIT_H 1 +EOF + +fi + + ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 +echo "configure:2111: checking for dlfcn.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2121: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_DLFCN_H 1 +EOF + +fi + + + # OS/390 lacks sys/param.h (and doesn't need it, by chance). + + for ac_hdr in unistd.h sys/param.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2153: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + + + +#--------------------------------------------------------------------------- +# Determine which interface to use to talk to the serial port. +# Note that #include lines must begin in leftmost column for +# some compilers to recognize them as preprocessor directives. +#--------------------------------------------------------------------------- + + + echo $ac_n "checking termios vs. termio vs. sgtty""... $ac_c" 1>&6 +echo "configure:2200: checking termios vs. termio vs. sgtty" >&5 + + if test "$cross_compiling" = yes; then + tk_ok=no +else + cat > conftest.$ac_ext < + +main() +{ + struct termios t; + if (tcgetattr(0, &t) == 0) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +} +EOF +if { (eval echo configure:2222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tk_ok=termios +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tk_ok=no +fi +rm -fr conftest* +fi + + + if test $tk_ok = termios; then + cat >> confdefs.h <<\EOF +#define USE_TERMIOS 1 +EOF + + else + if test "$cross_compiling" = yes; then + tk_ok=no +else + cat > conftest.$ac_ext < + +main() +{ + struct termio t; + if (ioctl(0, TCGETA, &t) == 0) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; + } +EOF +if { (eval echo configure:2260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tk_ok=termio +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tk_ok=no +fi +rm -fr conftest* +fi + + + if test $tk_ok = termio; then + cat >> confdefs.h <<\EOF +#define USE_TERMIO 1 +EOF + + else + if test "$cross_compiling" = yes; then + tk_ok=none +else + cat > conftest.$ac_ext < + +main() +{ + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +} +EOF +if { (eval echo configure:2299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tk_ok=sgtty +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tk_ok=none +fi +rm -fr conftest* +fi + + + if test $tk_ok = sgtty; then + cat >> confdefs.h <<\EOF +#define USE_SGTTY 1 +EOF + + else + if test "$cross_compiling" = yes; then + tk_ok=no +else + cat > conftest.$ac_ext < +#include + +main() +{ + struct termios t; + if (tcgetattr(0, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +} +EOF +if { (eval echo configure:2340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tk_ok=termios +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tk_ok=no +fi +rm -fr conftest* +fi + + + if test $tk_ok = termios; then + cat >> confdefs.h <<\EOF +#define USE_TERMIOS 1 +EOF + + else + if test "$cross_compiling" = yes; then + tk_ok=no +else + cat > conftest.$ac_ext < +#include + +main() +{ + struct termio t; + if (ioctl(0, TCGETA, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; + } +EOF +if { (eval echo configure:2380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tk_ok=termio +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tk_ok=no +fi +rm -fr conftest* +fi + + + if test $tk_ok = termio; then + cat >> confdefs.h <<\EOF +#define USE_TERMIO 1 +EOF + + else + if test "$cross_compiling" = yes; then + tk_ok=none +else + cat > conftest.$ac_ext < +#include + +main() +{ + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +} +EOF +if { (eval echo configure:2421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tk_ok=sgtty +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tk_ok=none +fi +rm -fr conftest* +fi + + + if test $tk_ok = sgtty; then + cat >> confdefs.h <<\EOF +#define USE_SGTTY 1 +EOF + + fi + fi + fi + fi + fi + fi + echo "$ac_t""$tk_ok" 1>&6 + + +#-------------------------------------------------------------------- +# Include sys/select.h if it exists and if it supplies things +# that appear to be useful and aren't already in sys/types.h. +# This appears to be true only on the RS/6000 under AIX. Some +# systems like OSF/1 have a sys/select.h that's of no use, and +# other systems like SCO UNIX have a sys/select.h that's +# pernicious. If "fd_set" isn't defined anywhere then set a +# special flag. +#-------------------------------------------------------------------- + +echo $ac_n "checking fd_set and sys/select""... $ac_c" 1>&6 +echo "configure:2459: checking fd_set and sys/select" >&5 +cat > conftest.$ac_ext < +int main() { +fd_set readMask, writeMask; +; return 0; } +EOF +if { (eval echo configure:2468: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + tk_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tk_ok=no +fi +rm -f conftest* +if test $tk_ok = no; then + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "fd_mask" >/dev/null 2>&1; then + rm -rf conftest* + tk_ok=yes +fi +rm -f conftest* + + if test $tk_ok = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SYS_SELECT_H 1 +EOF + + fi +fi +echo "$ac_t""$tk_ok" 1>&6 +if test $tk_ok = no; then + cat >> confdefs.h <<\EOF +#define NO_FD_SET 1 +EOF + +fi + +#------------------------------------------------------------------------------ +# Find out all about time handling differences. +#------------------------------------------------------------------------------ + +echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 +echo "configure:2511: checking whether struct tm is in sys/time.h or time.h" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +int main() { +struct tm *tp; tp->tm_sec; +; return 0; } +EOF +if { (eval echo configure:2524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_tm=time.h +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_tm=sys/time.h +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_tm" 1>&6 +if test $ac_cv_struct_tm = sys/time.h; then + cat >> confdefs.h <<\EOF +#define TM_IN_SYS_TIME 1 +EOF + +fi + + + for ac_hdr in sys/time.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2549: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2559: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 +echo "configure:2586: checking whether time.h and sys/time.h may both be included" >&5 +if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +int main() { +struct tm *tp; +; return 0; } +EOF +if { (eval echo configure:2600: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_time=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_time=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_time" 1>&6 +if test $ac_cv_header_time = yes; then + cat >> confdefs.h <<\EOF +#define TIME_WITH_SYS_TIME 1 +EOF + +fi + + echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 +echo "configure:2621: checking for tm_zone in struct tm" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include <$ac_cv_struct_tm> +int main() { +struct tm tm; tm.tm_zone; +; return 0; } +EOF +if { (eval echo configure:2634: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_tm_zone=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_tm_zone=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_tm_zone" 1>&6 +if test "$ac_cv_struct_tm_zone" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_TM_ZONE 1 +EOF + +else + echo $ac_n "checking for tzname""... $ac_c" 1>&6 +echo "configure:2654: checking for tzname" >&5 +if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#ifndef tzname /* For SGI. */ +extern char *tzname[]; /* RS6000 and others reject char **tzname. */ +#endif +int main() { +atoi(*tzname); +; return 0; } +EOF +if { (eval echo configure:2669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_var_tzname=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_var_tzname=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_var_tzname" 1>&6 + if test $ac_cv_var_tzname = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_TZNAME 1 +EOF + + fi +fi + + + echo $ac_n "checking tm_tzadj in struct tm""... $ac_c" 1>&6 +echo "configure:2692: checking tm_tzadj in struct tm" >&5 + cat > conftest.$ac_ext < +int main() { +struct tm tm; tm.tm_tzadj; +; return 0; } +EOF +if { (eval echo configure:2701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + cat >> confdefs.h <<\EOF +#define HAVE_TM_TZADJ 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + echo $ac_n "checking tm_gmtoff in struct tm""... $ac_c" 1>&6 +echo "configure:2717: checking tm_gmtoff in struct tm" >&5 + cat > conftest.$ac_ext < +int main() { +struct tm tm; tm.tm_gmtoff; +; return 0; } +EOF +if { (eval echo configure:2726: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + cat >> confdefs.h <<\EOF +#define HAVE_TM_GMTOFF 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + # + # Its important to include time.h in this check, as some systems + # (like convex) have timezone functions, etc. + # + have_timezone=no + echo $ac_n "checking long timezone variable""... $ac_c" 1>&6 +echo "configure:2747: checking long timezone variable" >&5 + cat > conftest.$ac_ext < +int main() { +extern long timezone; + timezone += 1; + exit (0); +; return 0; } +EOF +if { (eval echo configure:2758: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + have_timezone=yes + cat >> confdefs.h <<\EOF +#define HAVE_TIMEZONE_VAR 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + + # + # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. + # + if test "$have_timezone" = no; then + echo $ac_n "checking time_t timezone variable""... $ac_c" 1>&6 +echo "configure:2779: checking time_t timezone variable" >&5 + cat > conftest.$ac_ext < +int main() { +extern time_t timezone; + timezone += 1; + exit (0); +; return 0; } +EOF +if { (eval echo configure:2790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + cat >> confdefs.h <<\EOF +#define HAVE_TIMEZONE_VAR 1 +EOF + + echo "$ac_t""yes" 1>&6 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 +fi +rm -f conftest* + fi + + + +#-------------------------------------------------------------------- +# Some systems (e.g., IRIX 4.0.5) lack the st_blksize field +# in struct stat. But we might be able to use fstatfs instead. +#-------------------------------------------------------------------- +echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 +echo "configure:2813: checking for st_blksize in struct stat" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +int main() { +struct stat s; s.st_blksize; +; return 0; } +EOF +if { (eval echo configure:2826: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_st_blksize=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_st_blksize=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6 +if test $ac_cv_struct_st_blksize = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ST_BLKSIZE 1 +EOF + +fi + +echo $ac_n "checking for fstatfs""... $ac_c" 1>&6 +echo "configure:2847: checking for fstatfs" >&5 +if eval "test \"`echo '$''{'ac_cv_func_fstatfs'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char fstatfs(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_fstatfs) || defined (__stub___fstatfs) +choke me +#else +fstatfs(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_fstatfs=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_fstatfs=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'fstatfs`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_FSTATFS 1 +EOF + +fi + + +#-------------------------------------------------------------------- +# Some system have no memcmp or it does not work with 8 bit +# data, this checks it and add memcmp.o to LIBOBJS if needed +#-------------------------------------------------------------------- +echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 +echo "configure:2904: checking for 8-bit clean memcmp" >&5 +if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_memcmp_clean=no +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_func_memcmp_clean=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_memcmp_clean=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 +test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" + + +#-------------------------------------------------------------------- +# Some system like SunOS 4 and other BSD like systems +# have no memmove (we assume they have bcopy instead). +# {The replacement define is in compat/string.h} +#-------------------------------------------------------------------- +echo $ac_n "checking for memmove""... $ac_c" 1>&6 +echo "configure:2946: checking for memmove" >&5 +if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char memmove(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_memmove) || defined (__stub___memmove) +choke me +#else +memmove(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_memmove=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_memmove=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_MEMMOVE 1 +EOF + cat >> confdefs.h <<\EOF +#define NO_STRING_H 1 +EOF + +fi + + +#-------------------------------------------------------------------- +# On some systems strstr is broken: it returns a pointer even +# even if the original string is empty. +#-------------------------------------------------------------------- + +echo $ac_n "checking proper strstr implementation""... $ac_c" 1>&6 +echo "configure:3007: checking proper strstr implementation" >&5 +if test "$cross_compiling" = yes; then + tcl_ok=no +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tcl_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tcl_ok=no +fi +rm -fr conftest* +fi + +if test $tcl_ok = yes; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""broken, using substitute" 1>&6 + LIBOBJS="$LIBOBJS strstr.o" +fi + +#-------------------------------------------------------------------- +# Check for strtoul function. This is tricky because under some +# versions of AIX strtoul returns an incorrect terminator +# pointer for the string "0". +#-------------------------------------------------------------------- + +echo $ac_n "checking for strtoul""... $ac_c" 1>&6 +echo "configure:3048: checking for strtoul" >&5 +if eval "test \"`echo '$''{'ac_cv_func_strtoul'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strtoul(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strtoul) || defined (__stub___strtoul) +choke me +#else +strtoul(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strtoul=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_strtoul=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'strtoul`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + +if test "$cross_compiling" = yes; then + tcl_ok=0 +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tcl_ok=0 +fi +rm -fr conftest* +fi + +if test "$tcl_ok" = 0; then + test -n "$verbose" && echo " Adding strtoul.o." + LIBOBJS="$LIBOBJS strtoul.o" +fi + +#-------------------------------------------------------------------- +# Check for the strtod function. This is tricky because in some +# versions of Linux strtod mis-parses strings starting with "+". +#-------------------------------------------------------------------- + +echo $ac_n "checking for strtod""... $ac_c" 1>&6 +echo "configure:3139: checking for strtod" >&5 +if eval "test \"`echo '$''{'ac_cv_func_strtod'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strtod(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strtod) || defined (__stub___strtod) +choke me +#else +strtod(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strtod=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_strtod=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'strtod`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + +if test "$cross_compiling" = yes; then + tcl_ok=0 +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tcl_ok=0 +fi +rm -fr conftest* +fi + +if test "$tcl_ok" = 0; then + test -n "$verbose" && echo " Adding strtod.o." + LIBOBJS="$LIBOBJS strtod.o" +fi + +#-------------------------------------------------------------------- +# Under Solaris 2.4, strtod returns the wrong value for the +# terminating character under some conditions. Check for this +# and if the problem exists use a substitute procedure +# "fixstrtod" that corrects the error. +#-------------------------------------------------------------------- + + + echo $ac_n "checking for strtod""... $ac_c" 1>&6 +echo "configure:3233: checking for strtod" >&5 +if eval "test \"`echo '$''{'ac_cv_func_strtod'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strtod(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strtod) || defined (__stub___strtod) +choke me +#else +strtod(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strtod=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_strtod=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'strtod`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_strtod=1 +else + echo "$ac_t""no" 1>&6 +tcl_strtod=0 +fi + + if test "$tcl_strtod" = 1; then + echo $ac_n "checking for Solaris2.4/Tru64 strtod bugs""... $ac_c" 1>&6 +echo "configure:3283: checking for Solaris2.4/Tru64 strtod bugs" >&5 + if test "$cross_compiling" = yes; then + tcl_ok=0 +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + tcl_ok=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + tcl_ok=0 +fi +rm -fr conftest* +fi + + if test "$tcl_ok" = 1; then + echo "$ac_t""ok" 1>&6 + else + echo "$ac_t""buggy" 1>&6 + LIBOBJS="$LIBOBJS fixstrtod.o" + cat >> confdefs.h <<\EOF +#define strtod fixstrtod +EOF + + fi + fi + + +#-------------------------------------------------------------------- +# Check for various typedefs and provide substitutes if +# they don't exist. +#-------------------------------------------------------------------- + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:3339: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:3419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking for mode_t""... $ac_c" 1>&6 +echo "configure:3443: checking for mode_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_mode_t=yes +else + rm -rf conftest* + ac_cv_type_mode_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_mode_t" 1>&6 +if test $ac_cv_type_mode_t = no; then + cat >> confdefs.h <<\EOF +#define mode_t int +EOF + +fi + +echo $ac_n "checking for pid_t""... $ac_c" 1>&6 +echo "configure:3476: checking for pid_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_pid_t=yes +else + rm -rf conftest* + ac_cv_type_pid_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_pid_t" 1>&6 +if test $ac_cv_type_pid_t = no; then + cat >> confdefs.h <<\EOF +#define pid_t int +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:3509: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 +echo "configure:3542: checking for uid_t in sys/types.h" >&5 +if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "uid_t" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_uid_t=yes +else + rm -rf conftest* + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_type_uid_t" 1>&6 +if test $ac_cv_type_uid_t = no; then + cat >> confdefs.h <<\EOF +#define uid_t int +EOF + + cat >> confdefs.h <<\EOF +#define gid_t int +EOF + +fi + + +#-------------------------------------------------------------------- +# If a system doesn't have an opendir function (man, that's old!) +# then we have to supply a different version of dirent.h which +# is compatible with the substitute version of opendir that's +# provided. This version only works with V7-style directories. +#-------------------------------------------------------------------- + +echo $ac_n "checking for opendir""... $ac_c" 1>&6 +echo "configure:3584: checking for opendir" >&5 +if eval "test \"`echo '$''{'ac_cv_func_opendir'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char opendir(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_opendir) || defined (__stub___opendir) +choke me +#else +opendir(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_opendir=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_opendir=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'opendir`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define USE_DIRENT2_H 1 +EOF + +fi + + +#-------------------------------------------------------------------- +# The check below checks whether defines the type +# "union wait" correctly. It's needed because of weirdness in +# HP-UX where "union wait" is defined in both the BSD and SYS-V +# environments. Checking the usability of WIFEXITED seems to do +# the trick. +#-------------------------------------------------------------------- + +echo $ac_n "checking union wait""... $ac_c" 1>&6 +echo "configure:3645: checking union wait" >&5 +cat > conftest.$ac_ext < +#include +int main() { + +union wait x; +WIFEXITED(x); /* Generates compiler error if WIFEXITED + * uses an int. */ + +; return 0; } +EOF +if { (eval echo configure:3659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + tcl_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=no +fi +rm -f conftest* +echo "$ac_t""$tcl_ok" 1>&6 +if test $tcl_ok = no; then + cat >> confdefs.h <<\EOF +#define NO_UNION_WAIT 1 +EOF + +fi + +#-------------------------------------------------------------------- +# Check to see whether the system supports the matherr function +# and its associated type "struct exception". +#-------------------------------------------------------------------- + +echo $ac_n "checking matherr support""... $ac_c" 1>&6 +echo "configure:3683: checking matherr support" >&5 +cat > conftest.$ac_ext < +int main() { + +struct exception x; +x.type = DOMAIN; +x.type = SING; + +; return 0; } +EOF +if { (eval echo configure:3696: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + tcl_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=no +fi +rm -f conftest* +echo "$ac_t""$tcl_ok" 1>&6 +if test $tcl_ok = yes; then + cat >> confdefs.h <<\EOF +#define NEED_MATHERR 1 +EOF + +fi + +#-------------------------------------------------------------------- +# Check whether there is an strncasecmp function on this system. +# This is a bit tricky because under SCO it's in -lsocket and +# under Sequent Dynix it's in -linet. +#-------------------------------------------------------------------- + +echo $ac_n "checking for strncasecmp""... $ac_c" 1>&6 +echo "configure:3721: checking for strncasecmp" >&5 +if eval "test \"`echo '$''{'ac_cv_func_strncasecmp'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strncasecmp(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_strncasecmp) || defined (__stub___strncasecmp) +choke me +#else +strncasecmp(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_strncasecmp=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_strncasecmp=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'strncasecmp`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + +if test "$tcl_ok" = 0; then + echo $ac_n "checking for strncasecmp in -lsocket""... $ac_c" 1>&6 +echo "configure:3771: checking for strncasecmp in -lsocket" >&5 +ac_lib_var=`echo socket'_'strncasecmp | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + +fi +if test "$tcl_ok" = 0; then + echo $ac_n "checking for strncasecmp in -linet""... $ac_c" 1>&6 +echo "configure:3814: checking for strncasecmp in -linet" >&5 +ac_lib_var=`echo inet'_'strncasecmp | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-linet $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=1 +else + echo "$ac_t""no" 1>&6 +tcl_ok=0 +fi + +fi +if test "$tcl_ok" = 0; then + LIBOBJS="$LIBOBJS strncasecmp.o" +fi + +#-------------------------------------------------------------------- +# The code below deals with several issues related to gettimeofday: +# 1. Some systems don't provide a gettimeofday function at all +# (set NO_GETTOD if this is the case). +# 2. SGI systems don't use the BSD form of the gettimeofday function, +# but they have a BSDgettimeofday function that can be used instead. +# 3. See if gettimeofday is declared in the header file. +# if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can +# declare it. +#-------------------------------------------------------------------- + +echo $ac_n "checking for BSDgettimeofday""... $ac_c" 1>&6 +echo "configure:3871: checking for BSDgettimeofday" >&5 +if eval "test \"`echo '$''{'ac_cv_func_BSDgettimeofday'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char BSDgettimeofday(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_BSDgettimeofday) || defined (__stub___BSDgettimeofday) +choke me +#else +BSDgettimeofday(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_BSDgettimeofday=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_BSDgettimeofday=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'BSDgettimeofday`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_BSDGETTIMEOFDAY 1 +EOF + +else + echo "$ac_t""no" 1>&6 + + echo $ac_n "checking for gettimeofday""... $ac_c" 1>&6 +echo "configure:3921: checking for gettimeofday" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gettimeofday'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gettimeofday(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday) +choke me +#else +gettimeofday(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gettimeofday=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gettimeofday=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gettimeofday`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +cat >> confdefs.h <<\EOF +#define NO_GETTOD 1 +EOF + +fi + + +fi + +echo $ac_n "checking for gettimeofday declaration""... $ac_c" 1>&6 +echo "configure:3976: checking for gettimeofday declaration" >&5 +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "gettimeofday" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""present" 1>&6 +else + rm -rf conftest* + + echo "$ac_t""missing" 1>&6 + cat >> confdefs.h <<\EOF +#define GETTOD_NOT_DECLARED 1 +EOF + + +fi +rm -f conftest* + + +#-------------------------------------------------------------------- +# The following code checks to see whether it is possible to get +# signed chars on this platform. This is needed in order to +# properly generate sign-extended ints from character values. +#-------------------------------------------------------------------- + +echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 +echo "configure:4006: checking whether char is unsigned" >&5 +if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$GCC" = yes; then + # GCC predefines this symbol on systems where it applies. +cat > conftest.$ac_ext <&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_c_char_unsigned=yes +else + rm -rf conftest* + ac_cv_c_char_unsigned=no +fi +rm -f conftest* + +else +if test "$cross_compiling" = yes; then + { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_char_unsigned=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_char_unsigned=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_c_char_unsigned" 1>&6 +if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then + cat >> confdefs.h <<\EOF +#define __CHAR_UNSIGNED__ 1 +EOF + +fi + +echo $ac_n "checking signed char declarations""... $ac_c" 1>&6 +echo "configure:4069: checking signed char declarations" >&5 +cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + tcl_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=no +fi +rm -f conftest* +echo "$ac_t""$tcl_ok" 1>&6 +if test $tcl_ok = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SIGNED_CHAR 1 +EOF + +fi + +#-------------------------------------------------------------------- +# Look for libraries that we will need when compiling the Tcl shell +#-------------------------------------------------------------------- + + + #-------------------------------------------------------------------- + # On a few very rare systems, all of the libm.a stuff is + # already in libc.a. Set compiler flags accordingly. + # Also, Linux requires the "ieee" library for math to work + # right (and it must appear before "-lm"). + #-------------------------------------------------------------------- + + echo $ac_n "checking for sin""... $ac_c" 1>&6 +echo "configure:4112: checking for sin" >&5 +if eval "test \"`echo '$''{'ac_cv_func_sin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char sin(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_sin) || defined (__stub___sin) +choke me +#else +sin(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_sin=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_sin=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'sin`\" = yes"; then + echo "$ac_t""yes" 1>&6 + MATH_LIBS="" +else + echo "$ac_t""no" 1>&6 +MATH_LIBS="-lm" +fi + + echo $ac_n "checking for main in -lieee""... $ac_c" 1>&6 +echo "configure:4161: checking for main in -lieee" >&5 +ac_lib_var=`echo ieee'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lieee $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + MATH_LIBS="-lieee $MATH_LIBS" +else + echo "$ac_t""no" 1>&6 +fi + + + #-------------------------------------------------------------------- + # Interactive UNIX requires -linet instead of -lsocket, plus it + # needs net/errno.h to define the socket-related error codes. + #-------------------------------------------------------------------- + + echo $ac_n "checking for main in -linet""... $ac_c" 1>&6 +echo "configure:4203: checking for main in -linet" >&5 +ac_lib_var=`echo inet'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-linet $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -linet" +else + echo "$ac_t""no" 1>&6 +fi + + ac_safe=`echo "net/errno.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for net/errno.h""... $ac_c" 1>&6 +echo "configure:4240: checking for net/errno.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:4250: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_NET_ERRNO_H 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi + + + #-------------------------------------------------------------------- + # Check for the existence of the -lsocket and -lnsl libraries. + # The order here is important, so that they end up in the right + # order in the command line generated by make. Here are some + # special considerations: + # 1. Use "connect" and "accept" to check for -lsocket, and + # "gethostbyname" to check for -lnsl. + # 2. Use each function name only once: can't redo a check because + # autoconf caches the results of the last check and won't redo it. + # 3. Use -lnsl and -lsocket only if they supply procedures that + # aren't already present in the normal libraries. This is because + # IRIX 5.2 has libraries, but they aren't needed and they're + # bogus: they goof up name resolution if used. + # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. + # To get around this problem, check for both libraries together + # if -lsocket doesn't work by itself. + #-------------------------------------------------------------------- + + tcl_checkBoth=0 + echo $ac_n "checking for connect""... $ac_c" 1>&6 +echo "configure:4295: checking for connect" >&5 +if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char connect(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_connect) || defined (__stub___connect) +choke me +#else +connect(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_connect=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_connect=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_checkSocket=0 +else + echo "$ac_t""no" 1>&6 +tcl_checkSocket=1 +fi + + if test "$tcl_checkSocket" = 1; then + echo $ac_n "checking for setsockopt""... $ac_c" 1>&6 +echo "configure:4345: checking for setsockopt" >&5 +if eval "test \"`echo '$''{'ac_cv_func_setsockopt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char setsockopt(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_setsockopt) || defined (__stub___setsockopt) +choke me +#else +setsockopt(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_setsockopt=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_setsockopt=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'setsockopt`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for setsockopt in -lsocket""... $ac_c" 1>&6 +echo "configure:4391: checking for setsockopt in -lsocket" >&5 +ac_lib_var=`echo socket'_'setsockopt | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lsocket" +else + echo "$ac_t""no" 1>&6 +tcl_checkBoth=1 +fi + +fi + + fi + if test "$tcl_checkBoth" = 1; then + tk_oldLibs=$LIBS + LIBS="$LIBS -lsocket -lnsl" + echo $ac_n "checking for accept""... $ac_c" 1>&6 +echo "configure:4438: checking for accept" >&5 +if eval "test \"`echo '$''{'ac_cv_func_accept'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char accept(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_accept) || defined (__stub___accept) +choke me +#else +accept(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_accept=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_accept=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'accept`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_checkNsl=0 +else + echo "$ac_t""no" 1>&6 +LIBS=$tk_oldLibs +fi + + fi + echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 +echo "configure:4488: checking for gethostbyname" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) +choke me +#else +gethostbyname(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gethostbyname=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gethostbyname=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 +echo "configure:4534: checking for gethostbyname in -lnsl" >&5 +ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lnsl" +else + echo "$ac_t""no" 1>&6 +fi + +fi + + + # Don't perform the eval of the libraries here because DL_LIBS + # won't be set until we call SC_CONFIG_CFLAGS + + TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' + + + + +# Add the threads support libraries + +LIBS="$LIBS$THREADS_LIBS" + +#-------------------------------------------------------------------- +# The statements below define a collection of compile flags. This +# macro depends on the value of SHARED_BUILD, and should be called +# after SC_ENABLE_SHARED checks the configure switches. +#-------------------------------------------------------------------- + + + + # Step 0.a: Enable 64 bit support? + + echo $ac_n "checking if 64bit support is requested""... $ac_c" 1>&6 +echo "configure:4599: checking if 64bit support is requested" >&5 + # Check whether --enable-64bit or --disable-64bit was given. +if test "${enable_64bit+set}" = set; then + enableval="$enable_64bit" + : +else + enableval="no" +fi + + + if test "$enableval" = "yes"; then + do64bit=yes + else + do64bit=no + fi + echo "$ac_t""$do64bit" 1>&6 + + # Step 0.b: Enable Solaris 64 bit VIS support? + + echo $ac_n "checking if 64bit Sparc VIS support is requested""... $ac_c" 1>&6 +echo "configure:4619: checking if 64bit Sparc VIS support is requested" >&5 + # Check whether --enable-64bit-vis or --disable-64bit-vis was given. +if test "${enable_64bit_vis+set}" = set; then + enableval="$enable_64bit_vis" + : +else + enableval="no" +fi + + + if test "$enableval" = "yes"; then + # Force 64bit on with VIS + do64bit=yes + do64bitVIS=yes + else + do64bitVIS=no + fi + echo "$ac_t""$do64bitVIS" 1>&6 + + # Step 1: set the variable "system" to hold the name and version number + # for the system. This can usually be done via the "uname" command, but + # there are a few systems, like Next, where this doesn't work. + + echo $ac_n "checking system version (for dynamic loading)""... $ac_c" 1>&6 +echo "configure:4643: checking system version (for dynamic loading)" >&5 + if test -f /usr/lib/NextStep/software_version; then + system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` + else + system=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + echo "$ac_t""unknown (can't find uname command)" 1>&6 + system=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + system=MP-RAS-`awk '{print }' /etc/.relid'` + fi + if test "`uname -s`" = "AIX" ; then + system=AIX-`uname -v`.`uname -r` + fi + echo "$ac_t""$system" 1>&6 + fi + fi + + echo $ac_n "checking if gcc is being used""... $ac_c" 1>&6 +echo "configure:4666: checking if gcc is being used" >&5 + if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then + using_gcc="yes" + else + using_gcc="no" + fi + + echo "$ac_t""$using_gcc ($CC)" 1>&6 + + # Step 2: check for existence of -ldl library. This is needed because + # Linux can use either -ldl or -ldld for dynamic loading. + + echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "configure:4679: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + have_dl=yes +else + echo "$ac_t""no" 1>&6 +have_dl=no +fi + + + # Step 3: set configuration options based on system name and version. + + do64bit_ok=no + fullSrcDir=`cd $srcdir; pwd` + EXTRA_CFLAGS="" + TCL_EXPORT_FILE_SUFFIX="" + UNSHARED_LIB_SUFFIX="" + TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`' + ECHO_VERSION='`echo ${VERSION}`' + TCL_LIB_VERSIONS_OK=ok + CFLAGS_DEBUG=-g + CFLAGS_OPTIMIZE=-O + if test "$using_gcc" = "yes" ; then + CFLAGS_WARNING="-Wall -Wconversion -Wno-implicit-int" + else + CFLAGS_WARNING="" + fi + TCL_NEEDS_EXP_FILE=0 + TCL_BUILD_EXP_FILE="" + TCL_EXP_FILE="" + STLIB_LD="ar cr" + case $system in + AIX-5.*) + if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then + # AIX requires the _r compiler when gcc isn't being used + if test "${CC}" != "cc_r" ; then + CC=${CC}_r + fi + echo "$ac_t""Using $CC for compiling with threads" 1>&6 + fi + # AIX-5 uses ELF style dynamic libraries + SHLIB_CFLAGS="" + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + # AIX-5 has dl* in libc.so + DL_LIBS="" + LDFLAGS="" + if test "$using_gcc" = "yes" ; then + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' + fi + + if test "$do64bit" = "yes" ; then + if test "$using_gcc" = "no" ; then + do64bit_ok=yes + EXTRA_CFLAGS="-q64" + LDFLAGS="-q64" + else + echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 + fi + fi + ;; + AIX-*) + if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then + # AIX requires the _r compiler when gcc isn't being used + if test "${CC}" != "cc_r" ; then + CC=${CC}_r + fi + echo "$ac_t""Using $CC for compiling with threads" 1>&6 + fi + SHLIB_CFLAGS="" + SHLIB_LD="$fullSrcDir/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + TCL_NEEDS_EXP_FILE=1 + TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp' + + # AIX v<=4.1 has some different flags than 4.2+ + if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then + LIBOBJS="$LIBOBJS tclLoadAix.o" + DL_LIBS="-lld" + fi + + # On AIX <=v4 systems, libbsd.a has to be linked in to support + # non-blocking file IO. This library has to be linked in after + # the MATH_LIBS or it breaks the pow() function. The way to + # insure proper sequencing, is to add it to the tail of MATH_LIBS. + # This library also supplies gettimeofday. + # + # AIX does not have a timezone field in struct tm. When the AIX + # bsd library is used, the timezone global and the gettimeofday + # methods are to be avoided for timezone deduction instead, we + # deduce the timezone by comparing the localtime result on a + # known GMT value. + + echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6 +echo "configure:4817: checking for gettimeofday in -lbsd" >&5 +ac_lib_var=`echo bsd'_'gettimeofday | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lbsd $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + libbsd=yes +else + echo "$ac_t""no" 1>&6 +libbsd=no +fi + + if test $libbsd = yes; then + MATH_LIBS="$MATH_LIBS -lbsd" + cat >> confdefs.h <<\EOF +#define USE_DELTA_FOR_TZ 1 +EOF + + fi + ;; + BSD/OS-2.1*|BSD/OS-3*) + SHLIB_CFLAGS="" + SHLIB_LD="shlicc -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + BSD/OS-4.*) + SHLIB_CFLAGS="-export-dynamic -fPIC" + SHLIB_LD="cc -shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="-export-dynamic" + LD_SEARCH_FLAGS="" + ;; + dgux*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*|HP-UX-*.11.*) + SHLIB_SUFFIX=".sl" + echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 +echo "configure:4898: checking for shl_load in -ldld" >&5 +ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + tcl_ok=yes +else + echo "$ac_t""no" 1>&6 +tcl_ok=no +fi + + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS="" + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="-Wl,-E" + LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + fi + ;; + IRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="-Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a' + ;; + IRIX-5.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + EXTRA_CFLAGS="" + LDFLAGS="" + ;; + IRIX-6.*|IRIX64-6.5*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + if test "$using_gcc" = "yes" ; then + EXTRA_CFLAGS="-mabi=n32" + LDFLAGS="-mabi=n32" + else + case $system in + IRIX-6.3) + # Use to build 6.2 compatible binaries on 6.3. + EXTRA_CFLAGS="-n32 -D_OLD_TERMIOS" + ;; + *) + EXTRA_CFLAGS="-n32" + ;; + esac + LDFLAGS="-n32" + fi + ;; + IRIX64-6.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + ;; + Linux*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings + # when you inline the string and math operations. Turn this off to + # get rid of the warnings. + + CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="-rdynamic" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + else + ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for dld.h""... $ac_c" 1>&6 +echo "configure:5024: checking for dld.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + SHLIB_LD="ld -shared" + DL_OBJS="tclLoadDld.o" + DL_LIBS="-ldld" + LDFLAGS="" + LD_SEARCH_FLAGS="" +else + echo "$ac_t""no" 1>&6 +fi + + fi + if test "`uname -m`" = "alpha" ; then + EXTRA_CFLAGS="-mieee" + fi + ;; + GNU*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="" + DL_LIBS="-ldl" + LDFLAGS="-rdynamic" + LD_SEARCH_FLAGS="" + else + ac_safe=`echo "dld.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for dld.h""... $ac_c" 1>&6 +echo "configure:5079: checking for dld.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5089: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + SHLIB_LD="ld -shared" + DL_OBJS="" + DL_LIBS="-ldld" + LDFLAGS="" + LD_SEARCH_FLAGS="" +else + echo "$ac_t""no" 1>&6 +fi + + fi + if test "`uname -m`" = "alpha" ; then + EXTRA_CFLAGS="-mieee" + fi + ;; + MP-RAS-02*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + MP-RAS-*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="-Wl,-Bexport" + LD_SEARCH_FLAGS="" + ;; + NetBSD-*|FreeBSD-[1-2].*|OpenBSD-*) + # Not available on all versions: check for include file. + ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6 +echo "configure:5144: checking for dlfcn.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5154: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + + # NetBSD/SPARC needs -fPIC, -fpic will not do. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + echo $ac_n "checking for ELF""... $ac_c" 1>&6 +echo "configure:5181: checking for ELF" >&5 + cat > conftest.$ac_ext <&5 | + egrep "yes" >/dev/null 2>&1; then + rm -rf conftest* + echo "$ac_t""yes" 1>&6 + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so' +else + rm -rf conftest* + echo "$ac_t""no" 1>&6 + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0' + +fi +rm -f conftest* + + +else + echo "$ac_t""no" 1>&6 + + SHLIB_CFLAGS="" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + +fi + + + # FreeBSD doesn't handle version numbers with dots. + + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + FreeBSD-*) + # FreeBSD 3.* and greater have ELF. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="-export-dynamic" + LD_SEARCH_FLAGS="" + ;; + Rhapsody-*|Darwin-*) + SHLIB_CFLAGS="-fno-common" + SHLIB_LD="cc -dynamiclib \${LDFLAGS} -compatibility_version ${TCL_MAJOR_VERSION} -current_version \${VERSION} -install_name \${LIB_RUNTIME_DIR}/\${TCL_LIB_FILE}" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".dylib" + DL_OBJS="tclLoadDyld.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS="" + CFLAGS_OPTIMIZE="-O3" + ;; + NEXTSTEP-*) + SHLIB_CFLAGS="" + SHLIB_LD="cc -nostdlib -r" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadNext.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + OS/390-*) + CFLAGS_OPTIMIZE="" # Optimizer is buggy + cat >> confdefs.h <<\EOF +#define _OE_SOCKETS 1 +EOF + # needed in sys/socket.h + ;; + OSF1-1.0|OSF1-1.1|OSF1-1.2) + # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 + SHLIB_CFLAGS="" + # Hack: make package name same as library name + SHLIB_LD='ld -R -export :' + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadOSF.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-1.*) + # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -shared" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-V*) + # Digital OSF/1 + SHLIB_CFLAGS="" + SHLIB_LD='ld -shared -expect_unresolved "*"' + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + if test "$using_gcc" = "no" ; then + EXTRA_CFLAGS="-DHAVE_TZSET -std1" + fi + # see pthread_intro(3) for pthread support on osf1, k.furukawa + if test "${TCL_THREADS}" = "1" ; then + EXTRA_CFLAGS="${EXTRA_CFLAGS} -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" + if test "$using_gcc" = "no" ; then + EXTRA_CFLAGS="${EXTRA_CFLAGS} -pthread" + LDFLAGS="-pthread" + else + LIBS=`echo $LIBS | sed s/-lpthreads//` + LIBS="$LIBS -lpthread -lmach -lexc" + fi + fi + + ;; + RISCos-*) + SHLIB_CFLAGS="-G 0" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="-Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + ;; + SCO_SV-3.2*) + # Note, dlopen is available only on SCO 3.2.5 and greater. However, + # this test works, since "uname -s" was non-standard in 3.2.4 and + # below. + if test "$using_gcc" = "yes" ; then + SHLIB_CFLAGS="-fPIC -melf" + LDFLAGS="-melf -Wl,-Bexport" + else + SHLIB_CFLAGS="-Kpic -belf" + LDFLAGS="-belf -Wl,-Bexport" + fi + SHLIB_LD="ld -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS="" + ;; + SINIX*5.4*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS="" + ;; + SunOS-4*) + SHLIB_CFLAGS="-PIC" + SHLIB_LD="ld" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + + # SunOS can't handle version numbers with dots in them in library + # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it + # requires an extra version number at the end of .so file names. + # So, the library has to have a name like libtcl75.so.1.0 + + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0' + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + SunOS-5.[0-6]*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="" + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + ;; + SunOS-5*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + LDFLAGS="" + + if test "$do64bit" = "yes" ; then + arch=`isainfo` + if test "$arch" = "sparcv9 sparc" ; then + if test "$using_gcc" = "no" ; then + do64bit_ok=yes + if test "$do64bitVIS" = "yes" ; then + EXTRA_CFLAGS="-xarch=v9a" + LDFLAGS="-xarch=v9a" + else + EXTRA_CFLAGS="-xarch=v9" + LDFLAGS="-xarch=v9" + fi + else + echo "configure: warning: "64bit mode not supported with GCC on $system"" 1>&2 + fi + else + echo "configure: warning: "64bit mode only supported sparcv9 system"" 1>&2 + fi + fi + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$using_gcc" = "yes" ; then + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + fi + ;; + ULTRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="-Wl,-D,08000000" + LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + if test "$using_gcc" = "no" ; then + EXTRA_CFLAGS="-DHAVE_TZSET -std1" + fi + ;; + UNIX_SV* | UnixWare-5*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers + # that don't grok the -Bexport option. Test that it does. + hold_ldflags=$LDFLAGS + echo $ac_n "checking for ld accepts -Bexport flag""... $ac_c" 1>&6 +echo "configure:5447: checking for ld accepts -Bexport flag" >&5 + LDFLAGS="${LDFLAGS} -Wl,-Bexport" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + found=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + found=no +fi +rm -f conftest* + LDFLAGS=$hold_ldflags + echo "$ac_t""$found" 1>&6 + if test $found = yes; then + LDFLAGS="-Wl,-Bexport" + else + LDFLAGS="" + fi + LD_SEARCH_FLAGS="" + ;; + esac + + if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then + echo "configure: warning: "64bit support being disabled -- don\'t know magic for this platform"" 1>&2 + fi + + # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic + # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop, + # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need + # to determine which of several header files defines the a.out file + # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we + # support only a file format that is more or less version-7-compatible. + # In particular, + # - a.out files must begin with `struct exec'. + # - the N_TXTOFF on the `struct exec' must compute the seek address + # of the text segment + # - The `struct exec' must contain a_magic, a_text, a_data, a_bss + # and a_entry fields. + # The following compilation should succeed if and only if either sys/exec.h + # or a.out.h is usable for the purpose. + # + # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the + # `struct exec' includes a second header that contains information that + # duplicates the v7 fields that are needed. + + if test "x$DL_OBJS" = "xtclLoadAout.o" ; then + echo $ac_n "checking sys/exec.h""... $ac_c" 1>&6 +echo "configure:5503: checking sys/exec.h" >&5 + cat > conftest.$ac_ext < +int main() { + + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + +; return 0; } +EOF +if { (eval echo configure:5523: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + tcl_ok=usable +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=unusable +fi +rm -f conftest* + echo "$ac_t""$tcl_ok" 1>&6 + if test $tcl_ok = usable; then + cat >> confdefs.h <<\EOF +#define USE_SYS_EXEC_H 1 +EOF + + else + echo $ac_n "checking a.out.h""... $ac_c" 1>&6 +echo "configure:5541: checking a.out.h" >&5 + cat > conftest.$ac_ext < +int main() { + + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + +; return 0; } +EOF +if { (eval echo configure:5561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + tcl_ok=usable +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=unusable +fi +rm -f conftest* + echo "$ac_t""$tcl_ok" 1>&6 + if test $tcl_ok = usable; then + cat >> confdefs.h <<\EOF +#define USE_A_OUT_H 1 +EOF + + else + echo $ac_n "checking sys/exec_aout.h""... $ac_c" 1>&6 +echo "configure:5579: checking sys/exec_aout.h" >&5 + cat > conftest.$ac_ext < +int main() { + + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_midmag == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + +; return 0; } +EOF +if { (eval echo configure:5599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + tcl_ok=usable +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + tcl_ok=unusable +fi +rm -f conftest* + echo "$ac_t""$tcl_ok" 1>&6 + if test $tcl_ok = usable; then + cat >> confdefs.h <<\EOF +#define USE_SYS_EXEC_AOUT_H 1 +EOF + + else + DL_OBJS="" + fi + fi + fi + fi + + # Step 5: disable dynamic loading if requested via a command-line switch. + + # Check whether --enable-load or --disable-load was given. +if test "${enable_load+set}" = set; then + enableval="$enable_load" + tcl_ok=$enableval +else + tcl_ok=yes +fi + + if test "$tcl_ok" = "no"; then + DL_OBJS="" + fi + + if test "x$DL_OBJS" != "x" ; then + BUILD_DLTEST="\$(DLTEST_TARGETS)" + else + echo "Can't figure out how to do dynamic loading or shared libraries" + echo "on this system." + SHLIB_CFLAGS="" + SHLIB_LD="" + SHLIB_SUFFIX="" + DL_OBJS="tclLoadNone.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS="" + BUILD_DLTEST="" + fi + + # If we're running gcc, then change the C flags for compiling shared + # libraries to the right flags for gcc, instead of those for the + # standard manufacturer compiler. + + if test "$DL_OBJS" != "tclLoadNone.o" ; then + if test "$using_gcc" = "yes" ; then + case $system in + AIX-*) + ;; + BSD/OS*) + ;; + IRIX*) + ;; + NetBSD-*|FreeBSD-*|OpenBSD-*) + ;; + Rhapsody-*|Darwin-*) + ;; + RISCos-*) + ;; + SCO_SV-3.2*) + ;; + ULTRIX-4.*) + ;; + *) + SHLIB_CFLAGS="-fPIC" + ;; + esac + fi + fi + + if test "$SHARED_LIB_SUFFIX" = "" ; then + SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}' + fi + if test "$UNSHARED_LIB_SUFFIX" = "" ; then + UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a' + fi + + + + + + + + + echo $ac_n "checking for build with symbols""... $ac_c" 1>&6 +echo "configure:5696: checking for build with symbols" >&5 + # Check whether --enable-symbols or --disable-symbols was given. +if test "${enable_symbols+set}" = set; then + enableval="$enable_symbols" + tcl_ok=$enableval +else + tcl_ok=no +fi + + if test "$tcl_ok" = "yes"; then + CFLAGS_DEFAULT="${CFLAGS_DEBUG}" + LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" + DBGX=g + echo "$ac_t""yes" 1>&6 + else + CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}" + LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" + DBGX="" + echo "$ac_t""no" 1>&6 + fi + + +TCL_DBGX=${DBGX} +CFLAGS=${CFLAGS_DEFAULT} + +#-------------------------------------------------------------------- +# The statements below check for systems where POSIX-style +# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. +# On these systems (mostly older ones), use the old BSD-style +# FIONBIO approach instead. +#-------------------------------------------------------------------- + + + for ac_hdr in sys/ioctl.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:5733: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + for ac_hdr in sys/filio.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:5773: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5783: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + echo $ac_n "checking FIONBIO vs. O_NONBLOCK for nonblocking I/O""... $ac_c" 1>&6 +echo "configure:5810: checking FIONBIO vs. O_NONBLOCK for nonblocking I/O" >&5 + if test -f /usr/lib/NextStep/software_version; then + system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` + else + system=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + system=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + system=MP-RAS-`awk '{print }' /etc/.relid'` + fi + if test "`uname -s`" = "AIX" ; then + system=AIX-`uname -v`.`uname -r` + fi + fi + fi + case $system in + # There used to be code here to use FIONBIO under AIX. However, it + # was reported that FIONBIO doesn't work under AIX 3.2.5. Since + # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO + # code (JO, 5/31/97). + + OSF*) + cat >> confdefs.h <<\EOF +#define USE_FIONBIO 1 +EOF + + echo "$ac_t""FIONBIO" 1>&6 + ;; + SunOS-4*) + cat >> confdefs.h <<\EOF +#define USE_FIONBIO 1 +EOF + + echo "$ac_t""FIONBIO" 1>&6 + ;; + ULTRIX-4.*) + cat >> confdefs.h <<\EOF +#define USE_FIONBIO 1 +EOF + + echo "$ac_t""FIONBIO" 1>&6 + ;; + *) + echo "$ac_t""O_NONBLOCK" 1>&6 + ;; + esac + + +#-------------------------------------------------------------------- +# The statements below define a collection of symbols related to +# building libtcl as a shared library instead of a static library. +#-------------------------------------------------------------------- + +TCL_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX} +TCL_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX} + + + echo $ac_n "checking how to build libraries""... $ac_c" 1>&6 +echo "configure:5872: checking how to build libraries" >&5 + # Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval +else + tcl_ok=yes +fi + + + if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" ; then + echo "$ac_t""shared" 1>&6 + SHARED_BUILD=1 + else + echo "$ac_t""static" 1>&6 + SHARED_BUILD=0 + cat >> confdefs.h <<\EOF +#define STATIC_BUILD 1 +EOF + + fi + + +if test "${SHARED_BUILD}" = "1" -a "${SHLIB_SUFFIX}" != "" ; then + TCL_SHLIB_CFLAGS="${SHLIB_CFLAGS}" + TCL_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}" + eval "TCL_LIB_FILE=libtcl${TCL_SHARED_LIB_SUFFIX}" + if test "x$DL_OBJS" = "xtclLoadAout.o"; then + MAKE_LIB="ar cr \${TCL_LIB_FILE} \${OBJS}" + else + MAKE_LIB="\${SHLIB_LD} -o \${TCL_LIB_FILE} \${OBJS} ${SHLIB_LD_LIBS}" + RANLIB=":" + fi +else + case $system in + BSD/OS*) + ;; + + AIX-[1-4].*) + ;; + + *) + SHLIB_LD_LIBS="" + ;; + esac + TCL_SHLIB_CFLAGS="" + TCL_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}" + eval "TCL_LIB_FILE=libtcl${TCL_UNSHARED_LIB_SUFFIX}" + MAKE_LIB="ar cr \${TCL_LIB_FILE} \${OBJS}" +fi + +# tclConfig.sh needs a version of the _LIB_SUFFIX that has been eval'ed +# so that the backslashes quoting the DBX braces are dropped. + +# Trick to replace DBGX with TCL_DBGX +DBGX='${TCL_DBGX}' +eval "TCL_LIB_FILE=${TCL_LIB_FILE}" + +# Note: in the following variable, it's important to use the absolute +# path name of the Tcl directory rather than "..": this is because +# AIX remembers this path and will attempt to use it at run-time to look +# up the Tcl library. + +if test "$SHARED_BUILD" = "0" -o $TCL_NEEDS_EXP_FILE = 0; then + if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then + TCL_LIB_FLAG="-ltcl${TCL_VERSION}\${TCL_DBGX}" + else + TCL_LIB_FLAG="-ltcl`echo ${TCL_VERSION} | tr -d .`\${TCL_DBGX}" + fi + TCL_BUILD_LIB_SPEC="-L`pwd` ${TCL_LIB_FLAG}" + TCL_LIB_SPEC="-L${exec_prefix}/lib ${TCL_LIB_FLAG}" +else + TCL_BUILD_EXP_FILE="lib.exp" + eval "TCL_EXP_FILE=libtcl${TCL_EXPORT_FILE_SUFFIX}" + + # Replace DBGX with TCL_DBGX + eval "TCL_EXP_FILE=\"${TCL_EXP_FILE}\"" + + if test "$using_gcc" = "yes" ; then + TCL_BUILD_LIB_SPEC="-Wl,-bI:`pwd`/${TCL_BUILD_EXP_FILE} -L`pwd`" + TCL_LIB_SPEC="-Wl,-bI:${exec_prefix}/lib/${TCL_EXP_FILE} -L`pwd`" + else + TCL_BUILD_LIB_SPEC="-bI:`pwd`/${TCL_BUILD_EXP_FILE}" + TCL_LIB_SPEC="-bI:${exec_prefix}/lib/${TCL_EXP_FILE}" + fi +fi +VERSION='${VERSION}' +eval "CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}" +eval "CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}" +eval "CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX}" +VERSION=${TCL_VERSION} + +#-------------------------------------------------------------------- +# The statements below define the symbol TCL_PACKAGE_PATH, which +# gives a list of directories that may contain packages. The list +# consists of one directory for machine-dependent binaries and +# another for platform-independent scripts. +#-------------------------------------------------------------------- + +if test "$prefix" != "$exec_prefix"; then + TCL_PACKAGE_PATH="${exec_prefix}/lib ${prefix}/lib" +else + TCL_PACKAGE_PATH="${prefix}/lib" +fi + +#-------------------------------------------------------------------- +# The statements below define various symbols relating to Tcl +# stub support. +#-------------------------------------------------------------------- + +# Replace ${VERSION} with contents of ${TCL_VERSION} +eval "STUB_LIB_FILE=libtclstub${TCL_UNSHARED_LIB_SUFFIX}" +# Replace DBGX with TCL_DBGX +eval "STUB_LIB_FILE=\"${STUB_LIB_FILE}\"" + +MAKE_STUB_LIB="ar cr \${STUB_LIB_FILE} \${STUB_LIB_OBJS}" + +TCL_STUB_LIB_FILE=${STUB_LIB_FILE} + +if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then + TCL_STUB_LIB_FLAG="-ltclstub${TCL_VERSION}\${TCL_DBGX}" +else + TCL_STUB_LIB_FLAG="-ltclstub`echo ${TCL_VERSION} | tr -d .`\${TCL_DBGX}" +fi + +TCL_BUILD_STUB_LIB_SPEC="-L`pwd` ${TCL_STUB_LIB_FLAG}" +TCL_STUB_LIB_SPEC="-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}" +TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}" +TCL_STUB_LIB_PATH="${exec_prefix}/lib/${TCL_STUB_LIB_FILE}" + +#------------------------------------------------------------------------ +# tclConfig.sh refers to this by a different name +#------------------------------------------------------------------------ + +TCL_SHARED_BUILD=${SHARED_BUILD} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo "Makefile tclConfig.sh" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@RANLIB@%$RANLIB%g +s%@CC@%$CC%g +s%@CPP@%$CPP%g +s%@LIBOBJS@%$LIBOBJS%g +s%@TCL_LIBS@%$TCL_LIBS%g +s%@MATH_LIBS@%$MATH_LIBS%g +s%@DL_LIBS@%$DL_LIBS%g +s%@CFLAGS_DEBUG@%$CFLAGS_DEBUG%g +s%@CFLAGS_OPTIMIZE@%$CFLAGS_OPTIMIZE%g +s%@CFLAGS_WARNING@%$CFLAGS_WARNING%g +s%@STUB_LIB_FILE@%$STUB_LIB_FILE%g +s%@TCL_STUB_LIB_FILE@%$TCL_STUB_LIB_FILE%g +s%@TCL_STUB_LIB_FLAG@%$TCL_STUB_LIB_FLAG%g +s%@TCL_BUILD_STUB_LIB_SPEC@%$TCL_BUILD_STUB_LIB_SPEC%g +s%@TCL_STUB_LIB_SPEC@%$TCL_STUB_LIB_SPEC%g +s%@TCL_BUILD_STUB_LIB_PATH@%$TCL_BUILD_STUB_LIB_PATH%g +s%@TCL_STUB_LIB_PATH@%$TCL_STUB_LIB_PATH%g +s%@MAKE_STUB_LIB@%$MAKE_STUB_LIB%g +s%@BUILD_DLTEST@%$BUILD_DLTEST%g +s%@CFG_TCL_SHARED_LIB_SUFFIX@%$CFG_TCL_SHARED_LIB_SUFFIX%g +s%@CFG_TCL_UNSHARED_LIB_SUFFIX@%$CFG_TCL_UNSHARED_LIB_SUFFIX%g +s%@CFG_TCL_EXPORT_FILE_SUFFIX@%$CFG_TCL_EXPORT_FILE_SUFFIX%g +s%@TCL_DBGX@%$TCL_DBGX%g +s%@DL_OBJS@%$DL_OBJS%g +s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g +s%@MAKE_LIB@%$MAKE_LIB%g +s%@TCL_SHARED_BUILD@%$TCL_SHARED_BUILD%g +s%@SHLIB_CFLAGS@%$SHLIB_CFLAGS%g +s%@SHLIB_LD@%$SHLIB_LD%g +s%@STLIB_LD@%$STLIB_LD%g +s%@SHLIB_LD_LIBS@%$SHLIB_LD_LIBS%g +s%@SHLIB_SUFFIX@%$SHLIB_SUFFIX%g +s%@TCL_BUILD_LIB_SPEC@%$TCL_BUILD_LIB_SPEC%g +s%@TCL_LD_SEARCH_FLAGS@%$TCL_LD_SEARCH_FLAGS%g +s%@TCL_LDFLAGS_DEBUG@%$TCL_LDFLAGS_DEBUG%g +s%@TCL_LDFLAGS_OPTIMIZE@%$TCL_LDFLAGS_OPTIMIZE%g +s%@TCL_LIB_FILE@%$TCL_LIB_FILE%g +s%@TCL_LIB_FLAG@%$TCL_LIB_FLAG%g +s%@TCL_NEEDS_EXP_FILE@%$TCL_NEEDS_EXP_FILE%g +s%@TCL_BUILD_EXP_FILE@%$TCL_BUILD_EXP_FILE%g +s%@TCL_EXP_FILE@%$TCL_EXP_FILE%g +s%@TCL_LIB_SPEC@%$TCL_LIB_SPEC%g +s%@TCL_LIB_VERSIONS_OK@%$TCL_LIB_VERSIONS_OK%g +s%@TCL_MAJOR_VERSION@%$TCL_MAJOR_VERSION%g +s%@TCL_MINOR_VERSION@%$TCL_MINOR_VERSION%g +s%@TCL_PACKAGE_PATH@%$TCL_PACKAGE_PATH%g +s%@TCL_PATCH_LEVEL@%$TCL_PATCH_LEVEL%g +s%@TCL_SHARED_LIB_SUFFIX@%$TCL_SHARED_LIB_SUFFIX%g +s%@TCL_SHLIB_CFLAGS@%$TCL_SHLIB_CFLAGS%g +s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g +s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g +s%@TCL_UNSHARED_LIB_SUFFIX@%$TCL_UNSHARED_LIB_SUFFIX%g +s%@TCL_VERSION@%$TCL_VERSION%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + Index: unix/configure.in ================================================================== --- unix/configure.in +++ unix/configure.in @@ -1,16 +1,16 @@ #! /bin/bash -norc dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. AC_INIT(../generic/tcl.h) -# RCS: @(#) $Id: configure.in,v 1.57 2000/04/19 08:32:45 hobbs Exp $ +# RCS: @(#) $Id: configure.in,v 1.57.2.2 2001/04/03 22:54:39 hobbs Exp $ TCL_VERSION=8.3 TCL_MAJOR_VERSION=8 TCL_MINOR_VERSION=3 -TCL_PATCH_LEVEL=".1" +TCL_PATCH_LEVEL=".3" VERSION=${TCL_VERSION} #------------------------------------------------------------------------ # Handle the --prefix=... option #------------------------------------------------------------------------ @@ -58,47 +58,22 @@ # Supply substitutes for missing POSIX library procedures, or # set flags so Tcl uses alternate procedures. #-------------------------------------------------------------------- # Check if Posix compliant getcwd exists, if not we'll use getwd. -AC_CHECK_FUNCS(getcwd, , AC_DEFINE(USEGETWD)) +AC_CHECK_FUNCS(getcwd, , [AC_DEFINE(USEGETWD)]) # Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really # define USEGETWD even if the posix getcwd exists. Add a test ? AC_REPLACE_FUNCS(opendir strstr) AC_REPLACE_FUNCS(strtol tmpnam waitpid) -AC_CHECK_FUNC(strerror, , AC_DEFINE(NO_STRERROR)) -AC_CHECK_FUNC(getwd, , AC_DEFINE(NO_GETWD)) -AC_CHECK_FUNC(wait3, , AC_DEFINE(NO_WAIT3)) -AC_CHECK_FUNC(uname, , AC_DEFINE(NO_UNAME)) -AC_CHECK_FUNC(realpath, , AC_DEFINE(NO_REALPATH)) - -#-------------------------------------------------------------------- -# On a few very rare systems, all of the libm.a stuff is -# already in libc.a. Set compiler flags accordingly. -# Also, Linux requires the "ieee" library for math to work -# right (and it must appear before "-lm"). -#-------------------------------------------------------------------- - -#AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") -#AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) - -#-------------------------------------------------------------------- -# On AIX systems, libbsd.a has to be linked in to support -# non-blocking file IO. This library has to be linked in after -# the MATH_LIBS or it breaks the pow() function. The way to -# insure proper sequencing, is to add it to the tail of MATH_LIBS. -# This library also supplies gettimeofday. -#-------------------------------------------------------------------- -#libbsd=no -#if test "`uname -s`" = "AIX" ; then -# AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes) -# if test $libbsd = yes; then -# MATH_LIBS="$MATH_LIBS -lbsd" -# fi -#fi +AC_CHECK_FUNC(strerror, , [AC_DEFINE(NO_STRERROR)]) +AC_CHECK_FUNC(getwd, , [AC_DEFINE(NO_GETWD)]) +AC_CHECK_FUNC(wait3, , [AC_DEFINE(NO_WAIT3)]) +AC_CHECK_FUNC(uname, , [AC_DEFINE(NO_UNAME)]) +AC_CHECK_FUNC(realpath, , [AC_DEFINE(NO_REALPATH)]) #-------------------------------------------------------------------- # Supply substitutes for missing POSIX header files. Special # notes: # - stdlib.h doesn't define strtol, strtoul, or @@ -150,11 +125,11 @@ #-------------------------------------------------------------------- # Some systems (e.g., IRIX 4.0.5) lack the st_blksize field # in struct stat. But we might be able to use fstatfs instead. #-------------------------------------------------------------------- AC_STRUCT_ST_BLKSIZE -AC_CHECK_FUNC(fstatfs, , AC_DEFINE(NO_FSTATFS)) +AC_CHECK_FUNC(fstatfs, , [AC_DEFINE(NO_FSTATFS)]) #-------------------------------------------------------------------- # Some system have no memcmp or it does not work with 8 bit # data, this checks it and add memcmp.o to LIBOBJS if needed #-------------------------------------------------------------------- @@ -163,11 +138,11 @@ #-------------------------------------------------------------------- # Some system like SunOS 4 and other BSD like systems # have no memmove (we assume they have bcopy instead). # {The replacement define is in compat/string.h} #-------------------------------------------------------------------- -AC_CHECK_FUNC(memmove, , AC_DEFINE(NO_MEMMOVE) AC_DEFINE(NO_STRING_H)) +AC_CHECK_FUNC(memmove, , [AC_DEFINE(NO_MEMMOVE) AC_DEFINE(NO_STRING_H)]) #-------------------------------------------------------------------- # On some systems strstr is broken: it returns a pointer even # even if the original string is empty. #-------------------------------------------------------------------- @@ -260,11 +235,11 @@ # then we have to supply a different version of dirent.h which # is compatible with the substitute version of opendir that's # provided. This version only works with V7-style directories. #-------------------------------------------------------------------- -AC_CHECK_FUNC(opendir, , AC_DEFINE(USE_DIRENT2_H)) +AC_CHECK_FUNC(opendir, , [AC_DEFINE(USE_DIRENT2_H)]) #-------------------------------------------------------------------- # The check below checks whether defines the type # "union wait" correctly. It's needed because of weirdness in # HP-UX where "union wait" is defined in both the BSD and SYS-V @@ -326,26 +301,20 @@ # 3. See if gettimeofday is declared in the header file. # if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can # declare it. #-------------------------------------------------------------------- -AC_CHECK_FUNC(BSDgettimeofday, AC_DEFINE(HAVE_BSDGETTIMEOFDAY), - AC_CHECK_FUNC(gettimeofday, , AC_DEFINE(NO_GETTOD))) +AC_CHECK_FUNC(BSDgettimeofday, + [AC_DEFINE(HAVE_BSDGETTIMEOFDAY)], [ + AC_CHECK_FUNC(gettimeofday, , [AC_DEFINE(NO_GETTOD)]) +]) AC_MSG_CHECKING([for gettimeofday declaration]) AC_EGREP_HEADER(gettimeofday, sys/time.h, AC_MSG_RESULT(present), [ AC_MSG_RESULT(missing) AC_DEFINE(GETTOD_NOT_DECLARED) ]) -#-------------------------------------------------------------------- -# Interactive UNIX requires -linet instead of -lsocket, plus it -# needs net/errno.h to define the socket-related error codes. -#-------------------------------------------------------------------- - -#AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) -#AC_CHECK_HEADER(net/errno.h, AC_DEFINE(HAVE_NET_ERRNO_H)) - #-------------------------------------------------------------------- # The following code checks to see whether it is possible to get # signed chars on this platform. This is needed in order to # properly generate sign-extended ints from character values. #-------------------------------------------------------------------- @@ -359,40 +328,10 @@ AC_MSG_RESULT($tcl_ok) if test $tcl_ok = yes; then AC_DEFINE(HAVE_SIGNED_CHAR) fi -#-------------------------------------------------------------------- -# Check for the existence of the -lsocket and -lnsl libraries. -# The order here is important, so that they end up in the right -# order in the command line generated by make. Here are some -# special considerations: -# 1. Use "connect" and "accept" to check for -lsocket, and -# "gethostbyname" to check for -lnsl. -# 2. Use each function name only once: can't redo a check because -# autoconf caches the results of the last check and won't redo it. -# 3. Use -lnsl and -lsocket only if they supply procedures that -# aren't already present in the normal libraries. This is because -# IRIX 5.2 has libraries, but they aren't needed and they're -# bogus: they goof up name resolution if used. -# 4. On some SVR4 systems, can't use -lsocket without -lnsl too. -# To get around this problem, check for both libraries together -# if -lsocket doesn't work by itself. -#-------------------------------------------------------------------- - -#tcl_checkBoth=0 -#AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) -#if test "$tcl_checkSocket" = 1; then -# AC_CHECK_LIB(socket, main, LIBS="$LIBS -lsocket", tcl_checkBoth=1) -#fi -#if test "$tcl_checkBoth" = 1; then -# tk_oldLibs=$LIBS -# LIBS="$LIBS -lsocket -lnsl" -# AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) -#fi -#AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"])) - #-------------------------------------------------------------------- # Look for libraries that we will need when compiling the Tcl shell #-------------------------------------------------------------------- SC_TCL_LINK_LIBS @@ -446,11 +385,11 @@ else case $system in BSD/OS*) ;; - AIX-*) + AIX-[[1-4]].*) ;; *) SHLIB_LD_LIBS="" ;; ADDED unix/dltest/configure Index: unix/dltest/configure ================================================================== --- /dev/null +++ unix/dltest/configure @@ -0,0 +1,813 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=pkga.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +# RCS: @(#) $Id: configure,v 1.1.2.1 2001/04/03 22:10:14 hobbs Exp $ + +# Recover information that Tcl computed with its configure script. + +. ../tclConfig.sh + +CC=$TCL_CC + +SHLIB_CFLAGS=$TCL_SHLIB_CFLAGS + +EXTRA_CFLAGS=$TCL_EXTRA_CFLAGS + +SHLIB_LD=$TCL_SHLIB_LD + +SHLIB_LD_LIBS=$TCL_SHLIB_LD_LIBS + +SHLIB_SUFFIX=$TCL_SHLIB_SUFFIX + +SHLIB_VERSION=$TCL_SHLIB_VERSION + + +TCL_LIBS=$TCL_LIBS + +TCL_VERSION=$TCL_VERSION + +TCL_DBGX=$TCL_DBGX + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@CC@%$CC%g +s%@SHLIB_CFLAGS@%$SHLIB_CFLAGS%g +s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g +s%@SHLIB_LD@%$SHLIB_LD%g +s%@SHLIB_LD_LIBS@%$SHLIB_LD_LIBS%g +s%@SHLIB_SUFFIX@%$SHLIB_SUFFIX%g +s%@SHLIB_VERSION@%$SHLIB_VERSION%g +s%@TCL_BUILD_STUB_LIB_SPEC@%$TCL_BUILD_STUB_LIB_SPEC%g +s%@TCL_LIBS@%$TCL_LIBS%g +s%@TCL_VERSION@%$TCL_VERSION%g +s%@TCL_DBGX@%$TCL_DBGX%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + Index: unix/install-sh ================================================================== --- unix/install-sh +++ unix/install-sh @@ -57,10 +57,15 @@ shift shift continue;; -s) stripcmd="$stripprog" + shift + continue;; + + -S) stripcmd="$stripprog $2" + shift shift continue;; *) if [ x"$src" = x ] then Index: unix/mkLinks ================================================================== --- unix/mkLinks +++ unix/mkLinks @@ -35,16 +35,18 @@ ln Access.3 Tcl_Stat.3 fi if test -r AddErrInfo.3; then rm -f Tcl_AddObjErrorInfo.3 rm -f Tcl_AddErrorInfo.3 + rm -f Tcl_SetObjErrorCode.3 rm -f Tcl_SetErrorCode.3 rm -f Tcl_SetErrorCodeVA.3 rm -f Tcl_PosixError.3 rm -f Tcl_LogCommandInfo.3 ln AddErrInfo.3 Tcl_AddObjErrorInfo.3 ln AddErrInfo.3 Tcl_AddErrorInfo.3 + ln AddErrInfo.3 Tcl_SetObjErrorCode.3 ln AddErrInfo.3 Tcl_SetErrorCode.3 ln AddErrInfo.3 Tcl_SetErrorCodeVA.3 ln AddErrInfo.3 Tcl_PosixError.3 ln AddErrInfo.3 Tcl_LogCommandInfo.3 fi @@ -117,12 +119,14 @@ ln CallDel.3 Tcl_DontCallWhenDeleted.3 fi if test -r ChnlStack.3; then rm -f Tcl_StackChannel.3 rm -f Tcl_UnstackChannel.3 + rm -f Tcl_GetStackedChannel.3 ln ChnlStack.3 Tcl_StackChannel.3 ln ChnlStack.3 Tcl_UnstackChannel.3 + ln ChnlStack.3 Tcl_GetStackedChannel.3 fi if test -r CmdCmplt.3; then rm -f Tcl_CommandComplete.3 ln CmdCmplt.3 Tcl_CommandComplete.3 fi @@ -139,10 +143,24 @@ rm -f Tcl_GetChannelMode.3 rm -f Tcl_GetChannelBufferSize.3 rm -f Tcl_SetChannelBufferSize.3 rm -f Tcl_NotifyChannel.3 rm -f Tcl_BadChannelOption.3 + rm -f Tcl_ChannelName.3 + rm -f Tcl_ChannelVersion.3 + rm -f Tcl_ChannelBlockModeProc.3 + rm -f Tcl_ChannelCloseProc.3 + rm -f Tcl_ChannelClose2Proc.3 + rm -f Tcl_ChannelInputProc.3 + rm -f Tcl_ChannelOutputProc.3 + rm -f Tcl_ChannelSeekProc.3 + rm -f Tcl_ChannelSetOptionProc.3 + rm -f Tcl_ChannelGetOptionProc.3 + rm -f Tcl_ChannelWatchProc.3 + rm -f Tcl_ChannelGetHandleProc.3 + rm -f Tcl_ChannelFlushProc.3 + rm -f Tcl_ChannelHandlerProc.3 ln CrtChannel.3 Tcl_CreateChannel.3 ln CrtChannel.3 Tcl_GetChannelInstanceData.3 ln CrtChannel.3 Tcl_GetChannelType.3 ln CrtChannel.3 Tcl_GetChannelName.3 ln CrtChannel.3 Tcl_GetChannelHandle.3 @@ -149,10 +167,24 @@ ln CrtChannel.3 Tcl_GetChannelMode.3 ln CrtChannel.3 Tcl_GetChannelBufferSize.3 ln CrtChannel.3 Tcl_SetChannelBufferSize.3 ln CrtChannel.3 Tcl_NotifyChannel.3 ln CrtChannel.3 Tcl_BadChannelOption.3 + ln CrtChannel.3 Tcl_ChannelName.3 + ln CrtChannel.3 Tcl_ChannelVersion.3 + ln CrtChannel.3 Tcl_ChannelBlockModeProc.3 + ln CrtChannel.3 Tcl_ChannelCloseProc.3 + ln CrtChannel.3 Tcl_ChannelClose2Proc.3 + ln CrtChannel.3 Tcl_ChannelInputProc.3 + ln CrtChannel.3 Tcl_ChannelOutputProc.3 + ln CrtChannel.3 Tcl_ChannelSeekProc.3 + ln CrtChannel.3 Tcl_ChannelSetOptionProc.3 + ln CrtChannel.3 Tcl_ChannelGetOptionProc.3 + ln CrtChannel.3 Tcl_ChannelWatchProc.3 + ln CrtChannel.3 Tcl_ChannelGetHandleProc.3 + ln CrtChannel.3 Tcl_ChannelFlushProc.3 + ln CrtChannel.3 Tcl_ChannelHandlerProc.3 fi if test -r CrtChnlHdlr.3; then rm -f Tcl_CreateChannelHandler.3 rm -f Tcl_DeleteChannelHandler.3 ln CrtChnlHdlr.3 Tcl_CreateChannelHandler.3 @@ -263,12 +295,14 @@ ln DString.3 Tcl_DStringGetResult.3 fi if test -r DetachPids.3; then rm -f Tcl_DetachPids.3 rm -f Tcl_ReapDetachedProcs.3 + rm -f Tcl_WaitPid.3 ln DetachPids.3 Tcl_DetachPids.3 ln DetachPids.3 Tcl_ReapDetachedProcs.3 + ln DetachPids.3 Tcl_WaitPid.3 fi if test -r DoOneEvent.3; then rm -f Tcl_DoOneEvent.3 ln DoOneEvent.3 Tcl_DoOneEvent.3 fi @@ -345,20 +379,22 @@ ln Eval.3 Tcl_VarEvalVA.3 fi if test -r Exit.3; then rm -f Tcl_Exit.3 rm -f Tcl_Finalize.3 - rm -f Tcl_FinalizeThread.3 rm -f Tcl_CreateExitHandler.3 rm -f Tcl_DeleteExitHandler.3 + rm -f Tcl_ExitThread.3 + rm -f Tcl_FinalizeThread.3 rm -f Tcl_CreateThreadExitHandler.3 rm -f Tcl_DeleteThreadExitHandler.3 ln Exit.3 Tcl_Exit.3 ln Exit.3 Tcl_Finalize.3 - ln Exit.3 Tcl_FinalizeThread.3 ln Exit.3 Tcl_CreateExitHandler.3 ln Exit.3 Tcl_DeleteExitHandler.3 + ln Exit.3 Tcl_ExitThread.3 + ln Exit.3 Tcl_FinalizeThread.3 ln Exit.3 Tcl_CreateThreadExitHandler.3 ln Exit.3 Tcl_DeleteThreadExitHandler.3 fi if test -r ExprLong.3; then rm -f Tcl_ExprLong.3 @@ -396,11 +432,13 @@ rm -f Tcl_GetHostName.3 ln GetHostName.3 Tcl_GetHostName.3 fi if test -r GetIndex.3; then rm -f Tcl_GetIndexFromObj.3 + rm -f Tcl_GetIndexFromObjStruct.3 ln GetIndex.3 Tcl_GetIndexFromObj.3 + ln GetIndex.3 Tcl_GetIndexFromObjStruct.3 fi if test -r GetInt.3; then rm -f Tcl_GetInt.3 rm -f Tcl_GetDouble.3 rm -f Tcl_GetBoolean.3 @@ -538,15 +576,17 @@ rm -f Tcl_NewObj.3 rm -f Tcl_DuplicateObj.3 rm -f Tcl_IncrRefCount.3 rm -f Tcl_DecrRefCount.3 rm -f Tcl_IsShared.3 + rm -f Tcl_InvalidateStringRep.3 ln Object.3 Tcl_NewObj.3 ln Object.3 Tcl_DuplicateObj.3 ln Object.3 Tcl_IncrRefCount.3 ln Object.3 Tcl_DecrRefCount.3 ln Object.3 Tcl_IsShared.3 + ln Object.3 Tcl_InvalidateStringRep.3 fi if test -r ObjectType.3; then rm -f Tcl_RegisterObjType.3 rm -f Tcl_GetObjType.3 rm -f Tcl_AppendAllObjTypes.3 @@ -673,18 +713,20 @@ rm -f Tcl_RegExpCompile.3 rm -f Tcl_RegExpExec.3 rm -f Tcl_RegExpRange.3 rm -f Tcl_GetRegExpFromObj.3 rm -f Tcl_RegExpMatchObj.3 - rm -f Tcl_GetRegExpInfo.3 + rm -f Tcl_RegExpExecObj.3 + rm -f Tcl_RegExpGetInfo.3 ln RegExp.3 Tcl_RegExpMatch.3 ln RegExp.3 Tcl_RegExpCompile.3 ln RegExp.3 Tcl_RegExpExec.3 ln RegExp.3 Tcl_RegExpRange.3 ln RegExp.3 Tcl_GetRegExpFromObj.3 ln RegExp.3 Tcl_RegExpMatchObj.3 - ln RegExp.3 Tcl_GetRegExpInfo.3 + ln RegExp.3 Tcl_RegExpExecObj.3 + ln RegExp.3 Tcl_RegExpGetInfo.3 fi if test -r SaveResult.3; then rm -f Tcl_SaveResult.3 rm -f Tcl_RestoreResult.3 rm -f Tcl_DiscardResult.3 @@ -713,18 +755,20 @@ rm -f Tcl_GetStringResult.3 rm -f Tcl_AppendResult.3 rm -f Tcl_AppendResultVA.3 rm -f Tcl_AppendElement.3 rm -f Tcl_ResetResult.3 + rm -f Tcl_FreeResult.3 ln SetResult.3 Tcl_SetObjResult.3 ln SetResult.3 Tcl_GetObjResult.3 ln SetResult.3 Tcl_SetResult.3 ln SetResult.3 Tcl_GetStringResult.3 ln SetResult.3 Tcl_AppendResult.3 ln SetResult.3 Tcl_AppendResultVA.3 ln SetResult.3 Tcl_AppendElement.3 ln SetResult.3 Tcl_ResetResult.3 + ln SetResult.3 Tcl_FreeResult.3 fi if test -r SetVar.3; then rm -f Tcl_SetVar2Ex.3 rm -f Tcl_SetVar.3 rm -f Tcl_SetVar2.3 @@ -757,14 +801,18 @@ if test -r SplitList.3; then rm -f Tcl_SplitList.3 rm -f Tcl_Merge.3 rm -f Tcl_ScanElement.3 rm -f Tcl_ConvertElement.3 + rm -f Tcl_ScanCountedElement.3 + rm -f Tcl_ConvertCountedElement.3 ln SplitList.3 Tcl_SplitList.3 ln SplitList.3 Tcl_Merge.3 ln SplitList.3 Tcl_ScanElement.3 ln SplitList.3 Tcl_ConvertElement.3 + ln SplitList.3 Tcl_ScanCountedElement.3 + ln SplitList.3 Tcl_ConvertCountedElement.3 fi if test -r SplitPath.3; then rm -f Tcl_SplitPath.3 rm -f Tcl_JoinPath.3 rm -f Tcl_GetPathType.3 @@ -824,17 +872,19 @@ rm -f Tcl_ConditionFinalize.3 rm -f Tcl_GetThreadData.3 rm -f Tcl_MutexLock.3 rm -f Tcl_MutexUnlock.3 rm -f Tcl_MutexFinalize.3 + rm -f Tcl_CreateThread.3 ln Thread.3 Tcl_ConditionNotify.3 ln Thread.3 Tcl_ConditionWait.3 ln Thread.3 Tcl_ConditionFinalize.3 ln Thread.3 Tcl_GetThreadData.3 ln Thread.3 Tcl_MutexLock.3 ln Thread.3 Tcl_MutexUnlock.3 ln Thread.3 Tcl_MutexFinalize.3 + ln Thread.3 Tcl_CreateThread.3 fi if test -r ToUpper.3; then rm -f Tcl_UniCharToUpper.3 rm -f Tcl_UniCharToLower.3 rm -f Tcl_UniCharToTitle.3 Index: unix/tcl.m4 ================================================================== --- unix/tcl.m4 +++ unix/tcl.m4 @@ -345,10 +345,11 @@ # THREADS_LIBS Thread library(s) # # Defines the following vars: # TCL_THREADS # _REENTRANT +# _THREAD_SAFE # #------------------------------------------------------------------------ AC_DEFUN(SC_ENABLE_THREADS, [ AC_MSG_CHECKING(for building with threads) @@ -392,11 +393,11 @@ # 'pthread_attr_setstacksize' ? AC_CHECK_FUNCS(pthread_attr_setstacksize) else TCL_THREADS=0 - AC_MSG_RESULT(no (default)) + AC_MSG_RESULT([no (default)]) fi ]) #------------------------------------------------------------------------ # SC_ENABLE_SYMBOLS -- @@ -611,11 +612,48 @@ TCL_NEEDS_EXP_FILE=0 TCL_BUILD_EXP_FILE="" TCL_EXP_FILE="" STLIB_LD="ar cr" case $system in - AIX-4.[[2-9]]) + AIX-5.*) + if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then + # AIX requires the _r compiler when gcc isn't being used + if test "${CC}" != "cc_r" ; then + CC=${CC}_r + fi + AC_MSG_RESULT(Using $CC for compiling with threads) + fi + # AIX-5 uses ELF style dynamic libraries + SHLIB_CFLAGS="" + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + # AIX-5 has dl* in libc.so + DL_LIBS="" + LDFLAGS="" + if test "$using_gcc" = "yes" ; then + LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + LD_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' + fi + + if test "$do64bit" = "yes" ; then + if test "$using_gcc" = "no" ; then + do64bit_ok=yes + EXTRA_CFLAGS="-q64" + LDFLAGS="-q64" + else + AC_MSG_WARN("64bit mode not supported with GCC on $system") + fi + fi + ;; + AIX-*) if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then # AIX requires the _r compiler when gcc isn't being used if test "${CC}" != "cc_r" ; then CC=${CC}_r fi @@ -629,30 +667,34 @@ DL_LIBS="-ldl" LDFLAGS="" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' TCL_NEEDS_EXP_FILE=1 TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp' - ;; - AIX-*) - if test "${TCL_THREADS}" = "1" -a "$using_gcc" = "no" ; then - # AIX requires the _r compiler when gcc isn't being used - if test "${CC}" != "cc_r" ; then - CC=${CC}_r - fi - AC_MSG_RESULT(Using $CC for compiling with threads) - fi - SHLIB_CFLAGS="" - SHLIB_LD="$fullSrcDir/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" - SHLIB_LD_LIBS='${LIBS}' - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - LIBOBJS="$LIBOBJS tclLoadAix.o" - DL_LIBS="-lld" - LDFLAGS="" - LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' - TCL_NEEDS_EXP_FILE=1 - TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp' + + # AIX v<=4.1 has some different flags than 4.2+ + if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then + LIBOBJS="$LIBOBJS tclLoadAix.o" + DL_LIBS="-lld" + fi + + # On AIX <=v4 systems, libbsd.a has to be linked in to support + # non-blocking file IO. This library has to be linked in after + # the MATH_LIBS or it breaks the pow() function. The way to + # insure proper sequencing, is to add it to the tail of MATH_LIBS. + # This library also supplies gettimeofday. + # + # AIX does not have a timezone field in struct tm. When the AIX + # bsd library is used, the timezone global and the gettimeofday + # methods are to be avoided for timezone deduction instead, we + # deduce the timezone by comparing the localtime result on a + # known GMT value. + + AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no) + if test $libbsd = yes; then + MATH_LIBS="$MATH_LIBS -lbsd" + AC_DEFINE(USE_DELTA_FOR_TZ) + fi ;; BSD/OS-2.1*|BSD/OS-3*) SHLIB_CFLAGS="" SHLIB_LD="shlicc -r" SHLIB_LD_LIBS='${LIBS}' @@ -704,11 +746,22 @@ DL_LIBS="" LDFLAGS="-Wl,-D,08000000" LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a' ;; - IRIX-5.*|IRIX-6.*|IRIX64-6.5*) + IRIX-5.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + EXTRA_CFLAGS="" + LDFLAGS="" + ;; + IRIX-6.*|IRIX64-6.5*) SHLIB_CFLAGS="" SHLIB_LD="ld -n32 -shared -rdata_shared" SHLIB_LD_LIBS='${LIBS}' SHLIB_SUFFIX=".so" DL_OBJS="tclLoadDl.o" @@ -759,10 +812,33 @@ LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' else AC_CHECK_HEADER(dld.h, [ SHLIB_LD="ld -shared" DL_OBJS="tclLoadDld.o" + DL_LIBS="-ldld" + LDFLAGS="" + LD_SEARCH_FLAGS=""]) + fi + if test "`uname -m`" = "alpha" ; then + EXTRA_CFLAGS="-mieee" + fi + ;; + GNU*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="" + DL_LIBS="-ldl" + LDFLAGS="-rdynamic" + LD_SEARCH_FLAGS="" + else + AC_CHECK_HEADER(dld.h, [ + SHLIB_LD="ld -shared" + DL_OBJS="" DL_LIBS="-ldld" LDFLAGS="" LD_SEARCH_FLAGS=""]) fi if test "`uname -m`" = "alpha" ; then @@ -838,10 +914,21 @@ DL_OBJS="tclLoadDl.o" DL_LIBS="" LDFLAGS="-export-dynamic" LD_SEARCH_FLAGS="" ;; + Rhapsody-*|Darwin-*) + SHLIB_CFLAGS="-fno-common" + SHLIB_LD="cc -dynamiclib \${LDFLAGS} -compatibility_version ${TCL_MAJOR_VERSION} -current_version \${VERSION} -install_name \${LIB_RUNTIME_DIR}/\${TCL_LIB_FILE}" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".dylib" + DL_OBJS="tclLoadDyld.o" + DL_LIBS="" + LDFLAGS="" + LD_SEARCH_FLAGS="" + CFLAGS_OPTIMIZE="-O3" + ;; NEXTSTEP-*) SHLIB_CFLAGS="" SHLIB_LD="cc -nostdlib -r" SHLIB_LD_LIBS="" SHLIB_SUFFIX=".so" @@ -977,11 +1064,10 @@ SunOS-5*) SHLIB_CFLAGS="-KPIC" SHLIB_LD="/usr/ccs/bin/ld -G -z text" LDFLAGS="" - do64bit_ok=no if test "$do64bit" = "yes" ; then arch=`isainfo` if test "$arch" = "sparcv9 sparc" ; then if test "$using_gcc" = "no" ; then do64bit_ok=yes @@ -1167,10 +1253,12 @@ ;; IRIX*) ;; NetBSD-*|FreeBSD-*|OpenBSD-*) ;; + Rhapsody-*|Darwin-*) + ;; RISCos-*) ;; SCO_SV-3.2*) ;; ULTRIX-4.*) @@ -1261,12 +1349,72 @@ t.sg_flags |= ODDP | EVENP | RAW; return 0; } return 1; }], tk_ok=sgtty, tk_ok=none, tk_ok=none) + + if test $tk_ok = sgtty; then + AC_DEFINE(USE_SGTTY) + else + AC_TRY_RUN([ +#include +#include + +main() +{ + struct termios t; + if (tcgetattr(0, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tk_ok=termios, tk_ok=no, tk_ok=no) + + if test $tk_ok = termios; then + AC_DEFINE(USE_TERMIOS) + else + AC_TRY_RUN([ +#include +#include + +main() +{ + struct termio t; + if (ioctl(0, TCGETA, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; + }], tk_ok=termio, tk_ok=no, tk_ok=no) + + if test $tk_ok = termio; then + AC_DEFINE(USE_TERMIO) + else + AC_TRY_RUN([ +#include +#include + +main() +{ + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +}], tk_ok=sgtty, tk_ok=none, tk_ok=none) + if test $tk_ok = sgtty; then AC_DEFINE(USE_SGTTY) + fi + fi + fi fi fi fi AC_MSG_RESULT($tk_ok) ]) @@ -1329,14 +1477,14 @@ if test $tcl_ok = no; then AC_DEFINE(NO_DIRENT_H) fi AC_MSG_RESULT($tcl_ok) - AC_CHECK_HEADER(errno.h, , AC_DEFINE(NO_ERRNO_H)) - AC_CHECK_HEADER(float.h, , AC_DEFINE(NO_FLOAT_H)) - AC_CHECK_HEADER(values.h, , AC_DEFINE(NO_VALUES_H)) - AC_CHECK_HEADER(limits.h, , AC_DEFINE(NO_LIMITS_H)) + AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H)]) + AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H)]) + AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H)]) + AC_CHECK_HEADER(limits.h, , [AC_DEFINE(NO_LIMITS_H)]) AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) if test $tcl_ok = 0; then @@ -1351,12 +1499,12 @@ if test $tcl_ok = 0; then AC_DEFINE(NO_STRING_H) fi - AC_CHECK_HEADER(sys/wait.h, , AC_DEFINE(NO_SYS_WAIT_H)) - AC_CHECK_HEADER(dlfcn.h, , AC_DEFINE(NO_DLFCN_H)) + AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H)]) + AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H)]) # OS/390 lacks sys/param.h (and doesn't need it, by chance). AC_HAVE_HEADERS(unistd.h sys/param.h) @@ -1578,23 +1726,10 @@ [AC_DEFINE(HAVE_TIMEZONE_VAR) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) fi - # - # AIX does not have a timezone field in struct tm. When the AIX bsd - # library is used, the timezone global and the gettimeofday methods are - # to be avoided for timezone deduction instead, we deduce the timezone - # by comparing the localtime result on a known GMT value. - # - - if test "`uname -s`" = "AIX" ; then - AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes) - if test $libbsd = yes; then - AC_DEFINE(USE_DELTA_FOR_TZ) - fi - fi ]) #-------------------------------------------------------------------- # SC_BUGGY_STRTOD # @@ -1681,35 +1816,18 @@ # right (and it must appear before "-lm"). #-------------------------------------------------------------------- AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) - - #-------------------------------------------------------------------- - # On AIX systems, libbsd.a has to be linked in to support - # non-blocking file IO. This library has to be linked in after - # the MATH_LIBS or it breaks the pow() function. The way to - # insure proper sequencing, is to add it to the tail of MATH_LIBS. - # This library also supplies gettimeofday. - #-------------------------------------------------------------------- - - libbsd=no - if test "`uname -s`" = "AIX" ; then - AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes) - if test $libbsd = yes; then - MATH_LIBS="$MATH_LIBS -lbsd" - fi - fi - #-------------------------------------------------------------------- # Interactive UNIX requires -linet instead of -lsocket, plus it # needs net/errno.h to define the socket-related error codes. #-------------------------------------------------------------------- AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) - AC_CHECK_HEADER(net/errno.h, AC_DEFINE(HAVE_NET_ERRNO_H)) + AC_CHECK_HEADER(net/errno.h, [AC_DEFINE(HAVE_NET_ERRNO_H)]) #-------------------------------------------------------------------- # Check for the existence of the -lsocket and -lnsl libraries. # The order here is important, so that they end up in the right # order in the command line generated by make. Here are some @@ -1728,23 +1846,23 @@ #-------------------------------------------------------------------- tcl_checkBoth=0 AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) if test "$tcl_checkSocket" = 1; then - AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt, - LIBS="$LIBS -lsocket", tcl_checkBoth=1)) + AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, + LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) fi if test "$tcl_checkBoth" = 1; then tk_oldLibs=$LIBS LIBS="$LIBS -lsocket -lnsl" AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) fi - AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname, - [LIBS="$LIBS -lnsl"])) + AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, + [LIBS="$LIBS -lnsl"])]) # Don't perform the eval of the libraries here because DL_LIBS # won't be set until we call SC_CONFIG_CFLAGS TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' AC_SUBST(TCL_LIBS) AC_SUBST(MATH_LIBS) ]) Index: unix/tcl.spec ================================================================== --- unix/tcl.spec +++ unix/tcl.spec @@ -1,20 +1,20 @@ -# $Id: tcl.spec,v 1.4 2000/04/26 17:31:21 hobbs Exp $ +# $Id: tcl.spec,v 1.4.2.3 2001/04/05 20:34:11 hobbs Exp $ # This file is the basis for a binary Tcl RPM for Linux. -%define version 8.3.1 +%define version 8.3.3 %define directory /usr/local Summary: Tcl scripting language development environment Name: tcl Version: %{version} Release: 1 Copyright: BSD Group: Development/Languages Source: ftp://ftp.scriptics.com/pub/tcl/tcl8_3/tcl%{version}.tar.gz -URL: http://dev.scriptics.com/ -Packager: Scriptics Corporation +URL: http://tcl.activestate.com/ +Packager: ActiveState Tool Corporation Buildroot: /var/tmp/%{name}%{version} %description The Tcl (Tool Command Language) provides a powerful platform for creating integration applications that tie together diverse Index: unix/tclConfig.sh.in ================================================================== --- unix/tclConfig.sh.in +++ unix/tclConfig.sh.in @@ -7,11 +7,11 @@ # for Tcl extensions so that they don't have to figure this all # out for themselves. # # The information in this file is specific to a single platform. # -# RCS: @(#) $Id: tclConfig.sh.in,v 1.13 1999/07/29 19:21:32 wart Exp $ +# RCS: @(#) $Id: tclConfig.sh.in,v 1.13.10.1 2001/04/03 22:54:39 hobbs Exp $ # Tcl's version number. TCL_VERSION='@TCL_VERSION@' TCL_MAJOR_VERSION='@TCL_MAJOR_VERSION@' TCL_MINOR_VERSION='@TCL_MINOR_VERSION@' @@ -71,11 +71,11 @@ TCL_EXTRA_CFLAGS='@EXTRA_CFLAGS@' # Base command to use for combining object files into a shared library: TCL_SHLIB_LD='@SHLIB_LD@' -# Base command to use for combining object files into a shared library: +# Base command to use for combining object files into a static library: TCL_STLIB_LD='@STLIB_LD@' # Either '$LIBS' (if dependent libraries should be included when linking # shared libraries) or an empty string. See Tcl's configure.in for more # explanation. Index: unix/tclLoadDyld.c ================================================================== --- unix/tclLoadDyld.c +++ unix/tclLoadDyld.c @@ -10,15 +10,20 @@ * Copyright (c) 1995 Apple Computer, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclLoadDyld.c,v 1.2 2000/04/25 17:55:45 hobbs Exp $ + * RCS: @(#) $Id: tclLoadDyld.c,v 1.2.2.1 2001/04/06 18:42:39 hobbs Exp $ */ #include "tclInt.h" #include + +/* For compatibility with older API. */ +#ifndef NSLINKMODULE_OPTION_PRIVATE +#define NSLINKMODULE_OPTION_PRIVATE TRUE +#endif /* *---------------------------------------------------------------------- * * TclpLoadFile -- @@ -85,26 +90,34 @@ break; } return TCL_ERROR; } - module = NSLinkModule(image, fileName, TRUE); + module = NSLinkModule(image, fileName, NSLINKMODULE_OPTION_PRIVATE); if (module == NULL) { Tcl_SetResult(interp, "dyld: falied to link module", TCL_STATIC); return TCL_ERROR; } name = (char*)malloc(sizeof(char)*(strlen(sym1)+2)); sprintf(name, "_%s", sym1); +#ifdef NSLINKMODULE_OPTION_PRIVATE + symbol = NSLookupSymbolInModule(module, name); +#else symbol = NSLookupAndBindSymbol(name); +#endif free(name); *proc1Ptr = NSAddressOfSymbol(symbol); name = (char*)malloc(sizeof(char)*(strlen(sym2)+2)); sprintf(name, "_%s", sym2); +#ifdef NSLINKMODULE_OPTION_PRIVATE + symbol = NSLookupSymbolInModule(module, name); +#else symbol = NSLookupAndBindSymbol(name); +#endif free(name); *proc2Ptr = NSAddressOfSymbol(symbol); *clientDataPtr = module; Index: unix/tclMtherr.c ================================================================== --- unix/tclMtherr.c +++ unix/tclMtherr.c @@ -8,11 +8,11 @@ * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMtherr.c,v 1.3 1999/04/16 00:48:04 stanton Exp $ + * RCS: @(#) $Id: tclMtherr.c,v 1.3.12.1 2001/04/06 18:42:39 hobbs Exp $ */ #include "tclInt.h" #include @@ -59,10 +59,13 @@ * Sets errno based on what's in xPtr. * *---------------------------------------------------------------------- */ +#ifdef __APPLE_CC__ +__private_extern__ +#endif int matherr(xPtr) struct exception *xPtr; /* Describes error that occurred. */ { if (TclMathInProgress()) { Index: unix/tclUnixChan.c ================================================================== --- unix/tclUnixChan.c +++ unix/tclUnixChan.c @@ -8,11 +8,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUnixChan.c,v 1.17 2000/04/19 09:17:03 hobbs Exp $ + * RCS: @(#) $Id: tclUnixChan.c,v 1.17.2.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclInt.h" /* Internal definitions for Tcl. */ #include "tclPort.h" /* Portability features for Tcl. */ @@ -229,58 +229,70 @@ /* * This structure describes the channel type structure for file based IO: */ static Tcl_ChannelType fileChannelType = { - "file", /* Type name. */ - FileBlockModeProc, /* Set blocking/nonblocking mode.*/ - FileCloseProc, /* Close proc. */ - FileInputProc, /* Input proc. */ - FileOutputProc, /* Output proc. */ - FileSeekProc, /* Seek proc. */ - NULL, /* Set option proc. */ - NULL, /* Get option proc. */ - FileWatchProc, /* Initialize notifier. */ - FileGetHandleProc, /* Get OS handles out of channel. */ + "file", /* Type name. */ + TCL_CHANNEL_VERSION_2, /* v2 channel */ + FileCloseProc, /* Close proc. */ + FileInputProc, /* Input proc. */ + FileOutputProc, /* Output proc. */ + FileSeekProc, /* Seek proc. */ + NULL, /* Set option proc. */ + NULL, /* Get option proc. */ + FileWatchProc, /* Initialize notifier. */ + FileGetHandleProc, /* Get OS handles out of channel. */ + NULL, /* close2proc. */ + FileBlockModeProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; #ifdef SUPPORTS_TTY /* * This structure describes the channel type structure for serial IO. * Note that this type is a subclass of the "file" type. */ static Tcl_ChannelType ttyChannelType = { - "tty", /* Type name. */ - FileBlockModeProc, /* Set blocking/nonblocking mode.*/ - TtyCloseProc, /* Close proc. */ - FileInputProc, /* Input proc. */ - FileOutputProc, /* Output proc. */ - NULL, /* Seek proc. */ - TtySetOptionProc, /* Set option proc. */ - TtyGetOptionProc, /* Get option proc. */ - FileWatchProc, /* Initialize notifier. */ - FileGetHandleProc, /* Get OS handles out of channel. */ + "tty", /* Type name. */ + TCL_CHANNEL_VERSION_2, /* v2 channel */ + TtyCloseProc, /* Close proc. */ + FileInputProc, /* Input proc. */ + FileOutputProc, /* Output proc. */ + NULL, /* Seek proc. */ + TtySetOptionProc, /* Set option proc. */ + TtyGetOptionProc, /* Get option proc. */ + FileWatchProc, /* Initialize notifier. */ + FileGetHandleProc, /* Get OS handles out of channel. */ + NULL, /* close2proc. */ + FileBlockModeProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; #endif /* SUPPORTS_TTY */ /* * This structure describes the channel type structure for TCP socket * based IO: */ static Tcl_ChannelType tcpChannelType = { - "tcp", /* Type name. */ - TcpBlockModeProc, /* Set blocking/nonblocking mode.*/ - TcpCloseProc, /* Close proc. */ - TcpInputProc, /* Input proc. */ - TcpOutputProc, /* Output proc. */ - NULL, /* Seek proc. */ - NULL, /* Set option proc. */ - TcpGetOptionProc, /* Get option proc. */ - TcpWatchProc, /* Initialize notifier. */ - TcpGetHandleProc, /* Get OS handles out of channel. */ + "tcp", /* Type name. */ + TCL_CHANNEL_VERSION_2, /* v2 channel */ + TcpCloseProc, /* Close proc. */ + TcpInputProc, /* Input proc. */ + TcpOutputProc, /* Output proc. */ + NULL, /* Seek proc. */ + NULL, /* Set option proc. */ + TcpGetOptionProc, /* Get option proc. */ + TcpWatchProc, /* Initialize notifier. */ + TcpGetHandleProc, /* Get OS handles out of channel. */ + NULL, /* close2proc. */ + TcpBlockModeProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* *---------------------------------------------------------------------- @@ -1413,22 +1425,22 @@ /* * Look to see if a channel with this fd and the same mode already exists. * If the fd is used, but the mode doesn't match, return NULL. */ - + for (fsPtr = tsdPtr->firstFilePtr; fsPtr != NULL; fsPtr = fsPtr->nextPtr) { if (fsPtr->fd == fd) { return ((mode|TCL_EXCEPTION) == fsPtr->validMask) ? fsPtr->channel : NULL; } } fsPtr = (FileState *) ckalloc((unsigned) sizeof(FileState)); + fsPtr->nextPtr = tsdPtr->firstFilePtr; tsdPtr->firstFilePtr = fsPtr; - fsPtr->fd = fd; fsPtr->validMask = mode | TCL_EXCEPTION; fsPtr->channel = Tcl_CreateChannel(&fileChannelType, channelName, (ClientData) fsPtr, mode); Index: unix/tclUnixInit.c ================================================================== --- unix/tclUnixInit.c +++ unix/tclUnixInit.c @@ -5,11 +5,11 @@ * * Copyright (c) 1995-1997 Sun Microsystems, Inc. * Copyright (c) 1999 by Scriptics Corporation. * All rights reserved. * - * RCS: @(#) $Id: tclUnixInit.c,v 1.18 1999/10/13 00:32:49 hobbs Exp $ + * RCS: @(#) $Id: tclUnixInit.c,v 1.18.2.2 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" #include @@ -56,10 +56,11 @@ } LocaleTable; static CONST LocaleTable localeTable[] = { {"ja_JP.SJIS", "shiftjis"}, {"ja_JP.EUC", "euc-jp"}, + {"ja_JP.eucJP", "euc-jp"}, {"ja_JP.JIS", "iso2022-jp"}, {"ja_JP.mscode", "shiftjis"}, {"ja_JP.ujis", "euc-jp"}, {"ja_JP", "euc-jp"}, {"Ja_JP", "shiftjis"}, @@ -278,48 +279,54 @@ * (e.g. /usr/src/tcl8.2/unix/../../tcl8.2/library) * /../../../ * (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../../tcl8.2/library) */ + + /* + * The variable path holds an absolute path. Take care not to + * overwrite pathv[0] since that might produce a relative path. + */ + if (path != NULL) { Tcl_SplitPath(path, &pathc, &pathv); - if (pathc > 1) { + if (pathc > 2) { pathv[pathc - 2] = installLib; path = Tcl_JoinPath(pathc - 1, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 2) { + if (pathc > 3) { pathv[pathc - 3] = installLib; path = Tcl_JoinPath(pathc - 2, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 1) { + if (pathc > 2) { pathv[pathc - 2] = "library"; path = Tcl_JoinPath(pathc - 1, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 2) { + if (pathc > 3) { pathv[pathc - 3] = "library"; path = Tcl_JoinPath(pathc - 2, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 1) { + if (pathc > 3) { pathv[pathc - 3] = developLib; path = Tcl_JoinPath(pathc - 2, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 3) { + if (pathc > 4) { pathv[pathc - 4] = developLib; path = Tcl_JoinPath(pathc - 3, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); @@ -367,11 +374,10 @@ { CONST char *encoding; int i; Tcl_Obj *pathPtr; char *langEnv; - Tcl_DString ds; /* * Determine the current encoding from the LC_* or LANG environment * variables. We previously used setlocale() to determine the locale, * but this does not work on some systems (e.g. Linux/i386 RH 5.0). @@ -430,33 +436,30 @@ encoding = "iso8859-1"; } Tcl_SetSystemEncoding(NULL, encoding); + resetPath: /* * Initialize the C library's locale subsystem. This is required - * for input methods to work properly on X11. Note that we need to - * retore the initial "C" locale so that Tcl can parse numbers - * properly. The side effect of setting the default locale should be to - * load any locale specific modules that are needed by X. + * for input methods to work properly on X11. We only do this for + * LC_CTYPE because that's the necessary one, and we don't want to + * affect LC_TIME here. The side effect of setting the default locale + * should be to load any locale specific modules that are needed by X. + * [BUG: 5422 3345 4236 2522 2521]. */ - - Tcl_DStringInit(&ds); - Tcl_DStringAppend(&ds, setlocale(LC_ALL, NULL), -1); - setlocale(LC_ALL, ""); - setlocale(LC_ALL, Tcl_DStringValue(&ds)); - Tcl_DStringFree(&ds); + + setlocale(LC_CTYPE, ""); /* * In case the initial locale is not "C", ensure that the numeric * processing is done in "C" locale regardless. This is needed because * Tcl relies on routines like strtod, but should not have locale * dependent behavior. */ setlocale(LC_NUMERIC, "C"); - /* * Until the system encoding was actually set, the library path was * actually in the native multi-byte encoding, and not really UTF-8 * as advertised. We cheated as follows: @@ -476,11 +479,10 @@ * next time we search the library path, we'll translate the names * from UTF-8 to the system encoding which will be the native * encoding. */ - resetPath: pathPtr = TclGetLibraryPath(); if (pathPtr != NULL) { int objc; Tcl_Obj **objv; Index: unix/tclUnixPipe.c ================================================================== --- unix/tclUnixPipe.c +++ unix/tclUnixPipe.c @@ -8,11 +8,11 @@ * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUnixPipe.c,v 1.9 2000/03/31 19:39:42 ericm Exp $ + * RCS: @(#) $Id: tclUnixPipe.c,v 1.9.2.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclInt.h" #include "tclPort.h" @@ -65,20 +65,24 @@ * This structure describes the channel type structure for command pipe * based IO: */ static Tcl_ChannelType pipeChannelType = { - "pipe", /* Type name. */ - PipeBlockModeProc, /* Set blocking/nonblocking mode.*/ - PipeCloseProc, /* Close proc. */ - PipeInputProc, /* Input proc. */ - PipeOutputProc, /* Output proc. */ - NULL, /* Seek proc. */ - NULL, /* Set option proc. */ - NULL, /* Get option proc. */ - PipeWatchProc, /* Initialize notifier. */ - PipeGetHandleProc, /* Get OS handles out of channel. */ + "pipe", /* Type name. */ + TCL_CHANNEL_VERSION_2, /* v2 channel */ + PipeCloseProc, /* Close proc. */ + PipeInputProc, /* Input proc. */ + PipeOutputProc, /* Output proc. */ + NULL, /* Seek proc. */ + NULL, /* Set option proc. */ + NULL, /* Get option proc. */ + PipeWatchProc, /* Initialize notifier. */ + PipeGetHandleProc, /* Get OS handles out of channel. */ + NULL, /* close2proc. */ + PipeBlockModeProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* *---------------------------------------------------------------------- * @@ -184,14 +188,19 @@ { char fileName[L_tmpnam], *native; Tcl_DString dstring; int fd; + /* + * Linux says we should use mkstemp, but Solaris prefers tmpnam. + * We should also check against making more then TMP_MAX of these. + */ + if (tmpnam(fileName) == NULL) { /* INTL: Native. */ return NULL; } - fd = open(fileName, O_RDWR|O_CREAT|O_TRUNC, 0666); /* INTL: Native. */ + fd = open(fileName, O_RDWR|O_CREAT|O_EXCL, 0666); /* INTL: Native. */ if (fd == -1) { return NULL; } fcntl(fd, F_SETFD, FD_CLOEXEC); unlink(fileName); /* INTL: Native. */ @@ -442,14 +451,16 @@ error: if (pid != -1) { /* * Reap the child process now if an error occurred during its - * startup. + * startup. We don't call this with WNOHANG because that can lead to + * defunct processes on an MP system. We shouldn't have to worry + * about hanging here, since this is the error case. [Bug: 6148] */ - Tcl_WaitPid((Tcl_Pid) pid, &status, WNOHANG); + Tcl_WaitPid((Tcl_Pid) pid, &status, 0); } if (errPipeIn) { TclpCloseFile(errPipeIn); } Index: unix/tclUnixThrd.c ================================================================== --- unix/tclUnixThrd.c +++ unix/tclUnixThrd.c @@ -647,12 +647,21 @@ pmutexPtr = *((pthread_mutex_t **)mutexPtr); pcondPtr = *((pthread_cond_t **)condPtr); if (timePtr == NULL) { pthread_cond_wait(pcondPtr, pmutexPtr); } else { - ptime.tv_sec = timePtr->sec + TclpGetSeconds(); - ptime.tv_nsec = 1000 * timePtr->usec; + Tcl_Time now; + + /* + * Make sure to take into account the microsecond component of the + * current time, including possible overflow situations. [Bug #411603] + */ + + TclpGetTime(&now); + ptime.tv_sec = timePtr->sec + now.sec + + (timePtr->usec + now.usec) / 1000000; + ptime.tv_nsec = 1000 * ((timePtr->usec + now.usec) % 1000000); pthread_cond_timedwait(pcondPtr, pmutexPtr, &ptime); } } /* Index: win/Makefile.in ================================================================== --- win/Makefile.in +++ win/Makefile.in @@ -3,11 +3,11 @@ # then it is a template for a Makefile; to generate the actual Makefile, # run "./configure", which is a configuration script generated by the # "autoconf" program (constructs like "@foo@" will get replaced in the # actual Makefile. # -# RCS: @(#) $Id: Makefile.in,v 1.33 2000/04/25 20:58:48 hobbs Exp $ +# RCS: @(#) $Id: Makefile.in,v 1.33.2.5 2001/08/04 00:33:59 hobbs Exp $ VERSION = @TCL_VERSION@ #---------------------------------------------------------------- # Things you can change to personalize the Makefile for your own @@ -45,11 +45,11 @@ LIB_RUNTIME_DIR = $(libdir) # Directory in which to install the program tclsh: BIN_INSTALL_DIR = $(INSTALL_ROOT)$(bindir) -# Directory in which to install libtcl.so or libtcl.a: +# Directory in which to install the .a or .so binary for the Tcl library: LIB_INSTALL_DIR = $(INSTALL_ROOT)$(libdir) # Path name to use when installing library scripts. SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY) @@ -128,15 +128,15 @@ TCL_LIB_FILE = @TCL_LIB_FILE@ DDE_DLL_FILE = tcldde$(VER)${DLLSUFFIX} DDE_LIB_FILE = tcldde$(VER)${LIBSUFFIX} REG_DLL_FILE = tclreg$(VER)${DLLSUFFIX} REG_LIB_FILE = tclreg$(VER)${LIBSUFFIX} -PIPE_DLL_FILE = tclpip$(VER).dll +PIPE_DLL_FILE = tclpip$(VER)${DLLSUFFIX} SHARED_LIBRARIES = $(TCL_DLL_FILE) $(TCL_STUB_LIB_FILE) \ $(DDE_DLL_FILE) $(REG_DLL_FILE) $(PIPE_DLL_FILE) -STATIC_LIBRARIES = $(TCL_LIB_FILE) +STATIC_LIBRARIES = $(TCL_LIB_FILE) $(REG_LIB_FILE) $(DDE_LIB_FILE) TCLSH = tclsh$(VER)${EXESUFFIX} TCLTEST = tcltest${EXEEXT} CAT32 = cat32$(EXEEXT) MAN2TCL = man2tcl$(EXEEXT) @@ -154,30 +154,33 @@ # all VPATH lines without an explicit ':' in it. VPATH = $(GENERIC_DIR)@VPSEP@$(WIN_DIR)@VPSEP@$(COMPAT_DIR) # : AR = @AR@ +RANLIB = @RANLIB@ CC = @CC@ RC = @RC@ +RES = @RES@ AC_FLAGS = @EXTRA_CFLAGS@ @DEFS@ CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LDFLAGS_CONSOLE = @LDFLAGS_CONSOLE@ LDFLAGS_WINDOW = @LDFLAGS_WINDOW@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ STLIB_LD = @STLIB_LD@ SHLIB_LD = @SHLIB_LD@ -SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ +SHLIB_LD_LIBS = @SHLIB_LD_LIBS@ $(LIBS) SHLIB_CFLAGS = @SHLIB_CFLAGS@ SHLIB_SUFFIX = @SHLIB_SUFFIX@ VER = @TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@ DOTVER = @TCL_MAJOR_VERSION@.@TCL_MINOR_VERSION@ LIBS = @LIBS@ RMDIR = rm -rf MKDIR = mkdir -p +SHELL = @SHELL@ RM = rm -f COPY = cp CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${TCL_SHLIB_CFLAGS} \ -I"${GENERIC_DIR_NATIVE}" -I"${WIN_DIR_NATIVE}" ${AC_FLAGS} \ @@ -227,10 +230,11 @@ tclHistory.$(OBJEXT) \ tclIndexObj.$(OBJEXT) \ tclInterp.$(OBJEXT) \ tclIO.$(OBJEXT) \ tclIOCmd.$(OBJEXT) \ + tclIOGT.$(OBJEXT) \ tclIOSock.$(OBJEXT) \ tclIOUtil.$(OBJEXT) \ tclLink.$(OBJEXT) \ tclLiteral.$(OBJEXT) \ tclListObj.$(OBJEXT) \ @@ -296,11 +300,11 @@ all: binaries libraries doc tcltest: $(TCLTEST) -binaries: @LIBRARIES@ $(STATIC_LIBRARIES) $(TCLSH) +binaries: @LIBRARIES@ $(TCLSH) libraries: doc: @@ -310,59 +314,69 @@ hcw /c /e tcl.hpj $(MAN2TCL): $(ROOT_DIR)/tools/man2tcl.c $(CC) $(CFLAGS_OPTIMIZE) $(MAN2TCLFLAGS) -o $(MAN2TCL) "$(ROOT_DIR_NATIVE)"/tools/man2tcl.c -$(TCLSH): $(TCL_LIB_FILE) $(TCLSH_OBJS) tclsh.res +$(TCLSH): $(TCL_LIB_FILE) $(TCLSH_OBJS) tclsh.$(RES) $(CC) $(CFLAGS) $(TCLSH_OBJS) $(TCL_LIB_FILE) $(LIBS) \ - tclsh.res $(CC_EXENAME) + tclsh.$(RES) $(CC_EXENAME) -$(TCLTEST): $(TCL_LIB_FILE) $(TCLTEST_OBJS) $(CAT32) tclsh.res +$(TCLTEST): $(TCL_LIB_FILE) $(TCLTEST_OBJS) $(CAT32) tclsh.$(RES) $(CC) $(CFLAGS) $(TCLTEST_OBJS) $(TCL_LIB_FILE) $(LIBS) \ - tclsh.res $(CC_EXENAME) + tclsh.$(RES) $(CC_EXENAME) -cat32.${OBJEXT}: cat.c +cat32.$(OBJEXT): cat.c $(CC) -c $(CC_SWITCHES) $(DEPARG) $(CC_OBJNAME) -$(CAT32): cat32.${OBJEXT} - $(CC) $(CFLAGS) cat32.obj $(CC_EXENAME) -link $(LDFLAGS_CONSOLE) +$(CAT32): cat32.$(OBJEXT) + $(CC) $(CFLAGS) cat32.$(OBJEXT) $(CC_EXENAME) $(LDFLAGS_CONSOLE) # The following targets are configured by autoconf to generate either # a shared library or static library ${TCL_STUB_LIB_FILE}: ${STUB_OBJS} @$(RM) ${TCL_STUB_LIB_FILE} @MAKE_LIB@ ${STUB_OBJS} + @POST_MAKE_LIB@ -${TCL_DLL_FILE}: ${TCL_OBJS} tcl.res +${TCL_DLL_FILE}: ${TCL_OBJS} tcl.$(RES) @$(RM) ${TCL_DLL_FILE} - @MAKE_DLL@ ${TCL_OBJS} tcl.res + @MAKE_DLL@ ${TCL_OBJS} tcl.$(RES) $(SHLIB_LD_LIBS) ${TCL_LIB_FILE}: ${TCL_OBJS} @$(RM) ${TCL_LIB_FILE} @MAKE_LIB@ ${TCL_OBJS} + @POST_MAKE_LIB@ ${DDE_DLL_FILE}: ${DDE_OBJS} ${TCL_STUB_LIB_FILE} @$(RM) ${DDE_DLL_FILE} - @MAKE_DLL@ ${DDE_OBJS} ${TCL_STUB_LIB_FILE} + @MAKE_DLL@ ${DDE_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) + +${DDE_LIB_FILE}: ${DDE_OBJS} ${TCL_LIB_FILE} + @$(RM) ${DDE_LIB_FILE} + @MAKE_LIB@ ${DDE_OBJS} ${TCL_LIB_FILE} ${REG_DLL_FILE}: ${REG_OBJS} ${TCL_STUB_LIB_FILE} @$(RM) ${REG_DLL_FILE} - @MAKE_DLL@ ${REG_OBJS} ${TCL_STUB_LIB_FILE} + @MAKE_DLL@ ${REG_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) + +${REG_LIB_FILE}: ${REG_OBJS} ${TCL_LIB_FILE} + @$(RM) ${REG_LIB_FILE} + @MAKE_LIB@ ${REG_OBJS} ${TCL_LIB_FILE} # PIPE_DLL_FILE is actually an executable, don't build it # like a DLL. ${PIPE_DLL_FILE}: ${PIPE_OBJS} @$(RM) ${PIPE_DLL_FILE} - $(CC) $(CFLAGS) ${PIPE_OBJS} $(LIBS) -Fe$(PIPE_DLL_FILE) + @MAKE_EXE@ $(CFLAGS) ${PIPE_OBJS} $(LIBS) # Add the object extension to the implicit rules. By default .obj is not # automatically added. .SUFFIXES: .${OBJEXT} -.SUFFIXES: .res +.SUFFIXES: .$(RES) .SUFFIXES: .rc # Special case object targets tclWinInit.${OBJEXT}: tclWinInit.c @@ -401,20 +415,25 @@ # Implicit rule for all object files that will end up in the Tcl library .c.${OBJEXT}: $(CC) -c $(CC_SWITCHES) -DBUILD_tcl ${DEPARG} $(CC_OBJNAME) -.rc.res: - $(RC) -fo $@ -r -i "$(GENERIC_DIR_NATIVE)" $(DEPARG) - +.rc.$(RES): + $(RC) @RC_OUT@ $@ @RC_TYPE@ @RC_DEFINES@ @RC_INCLUDE@ "$(GENERIC_DIR_NATIVE)" @RC_INCLUDE@ "$(WIN_DIR_NATIVE)" $(DEPARG) install: all install-binaries install-libraries install-doc -install-binaries: - @$(MKDIR) -p "$(BIN_INSTALL_DIR)" - @$(MKDIR) -p "$(LIB_INSTALL_DIR)" - $(COPY) tclConfig.sh $(LIB_INSTALL_DIR)/tclConfig.sh +install-binaries: binaries + @for i in "$(LIB_INSTALL_DIR)" "$(BIN_INSTALL_DIR)" ; \ + do \ + if [ ! -d $$i ] ; then \ + echo "Making directory $$i"; \ + $(MKDIR) $$i; \ + chmod 755 $$i; \ + else true; \ + fi; \ + done; @for i in dde1.1 reg1.0; \ do \ if [ ! -d $(LIB_INSTALL_DIR)/$$i ] ; then \ echo "Making directory $(LIB_INSTALL_DIR)/$$i"; \ $(MKDIR) $(LIB_INSTALL_DIR)/$$i; \ @@ -422,18 +441,18 @@ fi; \ done; @for i in $(TCL_DLL_FILE) $(TCLSH) $(PIPE_DLL_FILE); \ do \ if [ -f $$i ]; then \ - echo "Installing $$i"; \ + echo "Installing $$i to $(BIN_INSTALL_DIR)/"; \ $(COPY) $$i "$(BIN_INSTALL_DIR)"; \ fi; \ done - @for i in $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE); \ + @for i in tclConfig.sh $(TCL_LIB_FILE) $(TCL_STUB_LIB_FILE); \ do \ if [ -f $$i ]; then \ - echo "Installing $$i"; \ + echo "Installing $$i to $(LIB_INSTALL_DIR)/"; \ $(COPY) $$i "$(LIB_INSTALL_DIR)"; \ fi; \ done @if [ -f $(DDE_DLL_FILE) ]; then \ echo installing $(DDE_DLL_FILE); \ @@ -452,52 +471,74 @@ @if [ -f $(REG_LIB_FILE) ]; then \ echo installing $(REG_LIB_FILE); \ $(COPY) $(REG_LIB_FILE) $(LIB_INSTALL_DIR)/reg1.0; \ fi -install-libraries: +install-libraries: libraries @for i in $(prefix)/lib $(INCLUDE_INSTALL_DIR) \ $(SCRIPT_INSTALL_DIR); \ do \ if [ ! -d $$i ] ; then \ echo "Making directory $$i"; \ $(MKDIR) $$i; \ else true; \ fi; \ done; - @for i in http1.0 http2.3 opt0.4 encoding msgcat1.0 tcltest1.0; \ + @for i in http1.0 http2.3 opt0.4 encoding msgcat1.1 tcltest1.0; \ do \ if [ ! -d $(SCRIPT_INSTALL_DIR)/$$i ] ; then \ echo "Making directory $(SCRIPT_INSTALL_DIR)/$$i"; \ $(MKDIR) $(SCRIPT_INSTALL_DIR)/$$i; \ else true; \ fi; \ done; @echo "Installing header files"; - @for i in "$(GENERIC_DIR)/tcl.h" "$(GENERIC_DIR)/tclDecls.h" ; \ + @for i in "$(GENERIC_DIR)/tcl.h" "$(GENERIC_DIR)/tclDecls.h" \ + "$(GENERIC_DIR)/tclPlatDecls.h" ; \ do \ $(COPY) "$$i" "$(INCLUDE_INSTALL_DIR)"; \ done; @echo "Installing library files to $(SCRIPT_INSTALL_DIR)"; @for i in $(ROOT_DIR)/library/*.tcl $(ROOT_DIR)/library/tclIndex; \ do \ $(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)"; \ done; - @for i in http2.3 http1.0 opt0.4 msgcat1.0 tcltest1.0; \ + @echo "Installing library http1.0 directory"; + @for j in $(ROOT_DIR)/library/http1.0/*.tcl; \ + do \ + $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http1.0"; \ + done; + @echo "Installing library http2.3 directory"; + @for j in $(ROOT_DIR)/library/http/*.tcl; \ + do \ + $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/http2.3"; \ + done; + @echo "Installing library opt0.4 directory"; + @for j in $(ROOT_DIR)/library/opt/*.tcl; \ + do \ + $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/opt0.4"; \ + done; + @echo "Installing library msgcat1.1 directory"; + @for j in $(ROOT_DIR)/library/msgcat/*.tcl; \ + do \ + $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/msgcat1.1"; \ + done; + @echo "Installing library tcltest1.0 directory"; + @for j in $(ROOT_DIR)/library/tcltest1.0/*.tcl; \ do \ - echo "Installing library $$i directory"; \ - for j in $(ROOT_DIR)/library/$$i/*.tcl; \ - do \ - $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/$$i"; \ - done; \ + $(COPY) "$$j" "$(SCRIPT_INSTALL_DIR)/tcltest1.0"; \ done; - @echo "Installing encodings" + @echo "Installing encodings"; @for i in $(ROOT_DIR)/library/encoding/*.enc ; do \ $(COPY) "$$i" "$(SCRIPT_INSTALL_DIR)/encoding"; \ done; -install-doc: +install-doc: doc + +# Specifying TESTFLAGS on the command line is the standard way to pass +# args to tcltest, ie: +# % make test TESTFLAGS="-verbose bps -file fileName.test" test: binaries $(TCLTEST) TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \ ./$(TCLTEST) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \ | ./$(CAT32) @@ -507,18 +548,18 @@ @TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \ ./tcltest depend: -Makefile: Makefile.in +Makefile: $(SRC_DIR)/Makefile.in ./config.status cleanhelp: $(RM) *.hlp *.cnt *.GID *.rtf man2tcl.exe clean: cleanhelp - $(RM) *.lib *.exp *.dll *.res *.${OBJEXT} *~ \#* TAGS a.out + $(RM) *.lib *.a *.exp *.dll *.$(RES) *.${OBJEXT} *~ \#* TAGS a.out $(RM) $(TCLSH) $(TCLTEST) $(CAT32) $(RM) *.pch *.ilk *.pdb distclean: clean $(RM) Makefile config.status config.cache config.log tclConfig.sh \ Index: win/README ================================================================== --- win/README +++ win/README @@ -1,12 +1,8 @@ Tcl 8.3 for Windows -by Scott Stanton -Scriptics Corporation -scott.stanton@scriptics.com - -RCS: @(#) $Id: README,v 1.16 2000/04/26 17:31:22 hobbs Exp $ +RCS: @(#) $Id: README,v 1.16.2.2 2001/04/06 01:32:53 hobbs Exp $ 1. Introduction --------------- This is the directory where you configure and compile the Windows @@ -21,13 +17,13 @@ In order to compile Tcl for Windows, you need the following items: Tcl 8.3 Source Distribution (plus any patches) - Visual C++ 2.x/4.x/5.x + Visual C++ 5+ -In practice, this release is built with Visual C++ 5.0 +In practice, this release is built with Visual C++ 6.0 In the "win" subdirectory of the source release, you will find "makefile.vc". This is the makefile Visual C++ compiler. You should update the paths at the top of the file to reflect your system configuration. Now you can use "make" (or "nmake" for VC++) to build @@ -37,35 +33,27 @@ need to place the Tcl script library files someplace where Tcl can find them. Tcl looks in one of following places for the library files: 1) The path specified in the environment variable "TCL_LIBRARY". - 2) In the lib\tcl8.3 directory under the installation directory - as specified in the registry: - - HKEY_LOCAL_MACHINE\SOFTWARE\Scriptics\Tcl\8.3 - - 3) Relative to the directory containing the current .exe. + 2) Relative to the directory containing the current .exe. Tcl will look for a directory "..\lib\tcl8.3" relative to the directory containing the currently running .exe. Note that in order to run tclsh83.exe, you must ensure that tcl83.dll and tclpip83.dll are on your path, in the system directory, or in the directory containing tclsh83.exe. Note: Tcl no longer provides support for Win32s. -This page includes a lengthy discussion of compiler macros necessary -when compiling Tcl extensions that will be dynamically loaded. - 3. Test suite ------------- This distribution contains an extensive test suite for Tcl. Some of the tests are timing dependent and will fail from time to time. If a test is failing consistently, please send us a bug report with as much detail as you can manage. Please use the online database at - http://dev.scriptics.com/ticket/ + http://tcl.sourceforge.net/ In order to run the test suite, you build the "test" target using the appropriate makefile for your compiler. Index: win/README.binary ================================================================== --- win/README.binary +++ win/README.binary @@ -1,13 +1,13 @@ Tcl/Tk 8.3 for Windows, Binary Distribution -RCS: @(#) $Id: README.binary,v 1.19 2000/04/26 17:31:22 hobbs Exp $ +RCS: @(#) $Id: README.binary,v 1.19.2.3 2001/04/06 01:32:53 hobbs Exp $ 1. Introduction --------------- -This directory contains the binary distribution of Tcl/Tk 8.3.1 for +This directory contains the binary distribution of Tcl/Tk 8.3.3 for Windows. It was compiled with Microsoft Visual C++ 5.0 using Win32 API, so that it will run under Windows NT, 95, 98 and 2000. Tcl provides a powerful platform for creating integration applications that tie together diverse applications, protocols, devices, and @@ -14,24 +14,26 @@ frameworks. When paired with the Tk toolkit, Tcl provides the fastest and most powerful way to create GUI applications that run on PCs, Unix, and the Macintosh. Tcl can also be used for a variety of web-related tasks and for creating powerful command languages for applications. -Tcl is maintained, enhanced, and distributed freely as a service to the -Tcl community by Scriptics Corporation. +Tcl is maintained, enhanced, and distributed freely by the Tcl community. 2. Documentation ---------------- -The official home for Tcl and Tk on the Web is at: - http://dev.scriptics.com +The home of Tcl and Tk sources and bug database on the Web is at: + http://tcl.sourceforge.net/ + +The home page for the Tcl Developer Xchange is at: + http://dev.scriptics.com/ -The home page for the Tcl/Tk 8.3 release is - http://dev.scriptics.com/software/tcltk/8.3.html +The home page for the Tcl/Tk release is + http://dev.scriptics.com/software/tcltk/ Detailed release notes can be found at - http://dev.scriptics.com/software/tcltk/relnotes/tcl8.3.1.txt + http://dev.scriptics.com/software/tcltk/relnotes/ Information about Tcl itself can be found at http://dev.scriptics.com/scripting/ There are many Tcl books on the market. Most are listed at @@ -42,11 +44,11 @@ 3. Installation --------------- The binary release is distributed as a self-extracting archive called -tcl83.exe. The setup program which will prompt you for an +tcl.exe. The setup program which will prompt you for an installation directory. It will create the installation heirarchy under the specified directory, and install a wish application icon under the program manager group of your choice. We are no longer supporting use of Tcl with 16-bit versions of @@ -79,11 +81,11 @@ 6. Reporting Bugs ----------------- If you have comments or bug reports for the Windows version of Tcl, please use our online database at: - http://dev.scriptics.com/ticket/ + http://tcl.sourceforge.net/ or post them to the newsgroup comp.lang.tcl. 7. Tcl newsgroup ----------------- @@ -122,30 +124,15 @@ resource center using the forms labeled "Add a Resource". 10. Mailing lists ---------------- -A couple of mailing lists have been set up to discuss Macintosh or -Windows related Tcl issues. In order to use these Mailing Lists you -must have access to the internet. To subscribe send a message to: - - wintcl-request@scriptics.com - mactcl-request@scriptics.com - -In the body of the message (the subject will be ignored) put: - - subscribe mactcl Joe Blow - -Replacing Joe Blow with your real name, of course. (Use wintcl -instead of mactcl if you're interested in the Windows list.) If you -would just like to receive more information about the list without -subscribing put the line: - - information mactcl - -in the body instead (or wintcl). There are also Special Interest -Groups (SIGs) setup for these topics and more at: +Several mailing lists are hosted at SourceForge to discuss development or +use issues (like Macintosh and Windows topics). For more information and +to subscribe, visit: + + http://sourceforge.net/projects/tcl/ + +and go to the Mailing Lists page. There are also Special Interest Groups +(SIGs) setup for these topics and more at: http://dev.scriptics.com/ - - - ADDED win/configure Index: win/configure ================================================================== --- /dev/null +++ win/configure @@ -0,0 +1,2323 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-gcc allow use of gcc if available [--disable-gcc]" +ac_help="$ac_help + --enable-threads build with threads" +ac_help="$ac_help + --enable-shared build and link with shared libraries [--enable-shared]" +ac_help="$ac_help + --enable-64bit enable 64bit support (where applicable)" +ac_help="$ac_help + --enable-symbols build with debugging symbols [--disable-symbols]" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=../generic/tcl.h + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + +TCL_VERSION=8.3 +TCL_MAJOR_VERSION=8 +TCL_MINOR_VERSION=3 +TCL_PATCH_LEVEL=".3" +VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION + +if test "${prefix}" = "NONE"; then + prefix=/usr/local +fi +if test "${exec_prefix}" = "NONE"; then + exec_prefix=$prefix +fi + +#-------------------------------------------------------------------- +# Check whether --enable-gcc or --disable-gcc was given. Do this +# before AC_PROG_CC and AC_CYGWIN are called so the compiler can +# be fully tested by built-in autoconf tools. +#-------------------------------------------------------------------- + + + # Check whether --enable-gcc or --disable-gcc was given. +if test "${enable_gcc+set}" = set; then + enableval="$enable_gcc" + ok=$enableval +else + ok=no +fi + + if test "$ok" = "yes"; then + # Quick hack to simulate a real cross check + # The right way to do this is to use AC_CHECK_TOOL + # correctly, but this is the minimal change + # we need until the real fix is ready. + if test "$host" != "$build" ; then + if test -z "$CC"; then + CC=${host}-gcc + fi + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:576: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:606: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:657: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:689: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 700 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:731: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:736: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:764: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + + # Extract the first word of "${host}-ar", so it can be a program name with args. +set dummy ${host}-ar; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:798: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="${host}-ar" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +AR="$ac_cv_prog_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "${host}-ranlib", so it can be a program name with args. +set dummy ${host}-ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:827: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="${host}-ranlib" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "${host}-windres", so it can be a program name with args. +set dummy ${host}-windres; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:856: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RC="${host}-windres" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RC="$ac_cv_prog_RC" +if test -n "$RC"; then + echo "$ac_t""$RC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + else + if test -z "$CC"; then + CC=gcc + fi + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:889: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:919: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:970: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1002: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1013 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1044: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1049: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1077: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1111: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="ar" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +AR="$ac_cv_prog_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1140: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1169: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RC="windres" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RC="$ac_cv_prog_RC" +if test -n "$RC"; then + echo "$ac_t""$RC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + else + # Allow user to override + if test -z "$CC"; then + CC=cl + fi + fi + +#AC_PROG_CC + +# To properly support cross-compilation, one would +# need to use these tool checks instead of +# the ones below and reconfigure with +# autoconf 2.50. You can also just set +# the CC, AR, RANLIB, and RC environment +# variables if you want to cross compile. +#AC_CHECK_TOOL(AR, ar, :) +#AC_CHECK_TOOL(RANLIB, ranlib, :) +#AC_CHECK_TOOL(RC, windres, :) + +if test "${GCC}" = "yes" ; then + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1219: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="ar" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +AR="$ac_cv_prog_AR" +if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1248: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1277: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RC="windres" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RC="$ac_cv_prog_RC" +if test -n "$RC"; then + echo "$ac_t""$RC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +fi + +#-------------------------------------------------------------------- +# Checks to see if the make progeam sets the $MAKE variable. +#-------------------------------------------------------------------- + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:1310: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +#-------------------------------------------------------------------- +# These two macros perform additinal compiler test. +#-------------------------------------------------------------------- + +echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 +echo "configure:1342: checking for Cygwin environment" >&5 +if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cygwin=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_cygwin=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_cygwin" 1>&6 +CYGWIN= +test "$ac_cv_cygwin" = yes && CYGWIN=yes + +#-------------------------------------------------------------------- +# Determines the correct binary file extension (.o, .obj, .exe etc.) +#-------------------------------------------------------------------- + +echo $ac_n "checking for object suffix""... $ac_c" 1>&6 +echo "configure:1380: checking for object suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftest* +echo 'int i = 1;' > conftest.$ac_ext +if { (eval echo configure:1386: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_objext" 1>&6 +OBJEXT=$ac_cv_objext +ac_objext=$ac_cv_objext + +echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 +echo "configure:1404: checking for mingw32 environment" >&5 +if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_mingw32=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_mingw32=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_mingw32" 1>&6 +MINGW32= +test "$ac_cv_mingw32" = yes && MINGW32=yes + + +echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 +echo "configure:1435: checking for executable suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$CYGWIN" = yes || test "$MINGW32" = yes; then + ac_cv_exeext=.exe +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.$ac_ext + ac_cv_exeext= + if { (eval echo configure:1445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + for file in conftest.*; do + case $file in + *.c | *.o | *.obj) ;; + *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + else + { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } + fi + rm -f conftest* + test x"${ac_cv_exeext}" = x && ac_cv_exeext=no +fi +fi + +EXEEXT="" +test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} +echo "$ac_t""${ac_cv_exeext}" 1>&6 +ac_exeext=$EXEEXT + + +#-------------------------------------------------------------------- +# Check whether --enable-threads or --disable-threads was given. +#-------------------------------------------------------------------- + + + echo $ac_n "checking for building with threads""... $ac_c" 1>&6 +echo "configure:1472: checking for building with threads" >&5 + # Check whether --enable-threads or --disable-threads was given. +if test "${enable_threads+set}" = set; then + enableval="$enable_threads" + tcl_ok=$enableval +else + tcl_ok=no +fi + + + if test "$tcl_ok" = "yes"; then + echo "$ac_t""yes" 1>&6 + TCL_THREADS=1 + cat >> confdefs.h <<\EOF +#define TCL_THREADS 1 +EOF + + else + TCL_THREADS=0 + echo "$ac_t""no (default)" 1>&6 + fi + + +#-------------------------------------------------------------------- +# The statements below define a collection of symbols related to +# building libtcl as a shared library instead of a static library. +#-------------------------------------------------------------------- + + + echo $ac_n "checking how to build libraries""... $ac_c" 1>&6 +echo "configure:1502: checking how to build libraries" >&5 + # Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval +else + tcl_ok=yes +fi + + + if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" ; then + echo "$ac_t""shared" 1>&6 + SHARED_BUILD=1 + else + echo "$ac_t""static" 1>&6 + SHARED_BUILD=0 + cat >> confdefs.h <<\EOF +#define STATIC_BUILD 1 +EOF + + fi + + +#-------------------------------------------------------------------- +# The statements below define a collection of compile flags. This +# macro depends on the value of SHARED_BUILD, and should be called +# after SC_ENABLE_SHARED checks the configure switches. +#-------------------------------------------------------------------- + + + echo $ac_n "checking compiler flags""... $ac_c" 1>&6 +echo "configure:1540: checking compiler flags" >&5 + + # Set some defaults (may get changed below) + EXTRA_CFLAGS="" + PATHTYPE='-w' + CYGPATH='cygpath' + VPSEP=';' + + # set various compiler flags depending on whether we are using gcc or cl + + if test "${GCC}" = "yes" ; then + if test "$do64bit" = "yes" ; then + echo "configure: warning: "64bit mode not supported with GCC on Windows"" 1>&2 + fi + SHLIB_LD="" + SHLIB_LD_LIBS="" + LIBS="" + LIBS_GUI="-lgdi32 -lcomdlg32" + STLIB_LD="${AR}" + RC_OUT=-o + RC_TYPE= + RC_INCLUDE=--include + RES=res.o + MAKE_LIB="\${AR} crv \$@" + POST_MAKE_LIB="\${RANLIB} \$@" + MAKE_EXE="\${CC} -o \$@" + LIBPREFIX="lib" + + if "$CC" -v 2>&1 | egrep '\/gcc-lib\/i[3-6]86[^\/]*-cygwin' >/dev/null; then + mno_cygwin="yes" + extra_cflags="-mno-cygwin" + extra_ldflags="-mno-cygwin" + else + mno_cygwin="no" + extra_cflags="" + extra_ldflags="" + fi + + if test "$cross_compiling" = "yes" -o "$mno_cygwin" = "yes"; then + PATHTYPE='' + CYGPATH='echo ' + VPSEP=':' + fi + + if test "${SHARED_BUILD}" = "0" ; then + # static + echo "$ac_t""using static flags" 1>&6 + runtime= + MAKE_DLL="echo " + LIBSUFFIX="s\${DBGX}.a" + LIBRARIES="\${STATIC_LIBRARIES}" + EXESUFFIX="s\${DBGX}.exe" + else + # dynamic + echo "$ac_t""using shared flags" 1>&6 + + # check to see if ld supports --shared. Libtool does a much + # more extensive test, but not really needed in this case. + if test -z "$LD"; then + ld_prog="`(${CC} -print-prog-name=ld) 2>/dev/null`" + if test -z "$ld_prog"; then + ld_prog=ld + else + # get rid of the potential '\r' from ld_prog. + ld_prog="`(echo $ld_prog | tr -d '\015' | sed 's,\\\\,\\/,g')`" + fi + LD="$ld_prog" + fi + + echo $ac_n "checking whether $ld_prog supports -shared option""... $ac_c" 1>&6 +echo "configure:1610: checking whether $ld_prog supports -shared option" >&5 + + # now the ad-hoc check to see if GNU ld supports --shared. + if "$LD" --shared 2>&1 | egrep ': -shared not supported' >/dev/null; then + ld_supports_shared="no" + SHLIB_LD="${DLLWRAP-dllwrap}" + else + ld_supports_shared="yes" + SHLIB_LD="${CC} -shared" + fi + echo "$ac_t""$ld_supports_shared" 1>&6 + + runtime= + # Add SHLIB_LD_LIBS to the Make rule, not here. + MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \$@ ${extra_ldflags}" + if test "${ld_supports_shared}" = "yes"; then + MAKE_DLL="${MAKE_DLL} -Wl,--out-implib,\$(patsubst %.dll,lib%.a,\$@)" + else + MAKE_DLL="${MAKE_DLL} --output-lib \$(patsubst %.dll,lib%.a,\$@)" + fi + LIBSUFFIX="\${DBGX}.a" + EXESUFFIX="\${DBGX}.exe" + LIBRARIES="\${SHARED_LIBRARIES}" + fi + # DLLSUFFIX is separate because it is the building block for + # users of tclConfig.sh that may build shared or static. + DLLSUFFIX="\${DBGX}.dll" + + EXTRA_CFLAGS="${extra_cflags}" + + CFLAGS_DEBUG=-g + CFLAGS_OPTIMIZE=-O + CFLAGS_WARNING="-Wall -Wconversion" + LDFLAGS_DEBUG=-g + LDFLAGS_OPTIMIZE=-O + + # Specify the CC output file names based on the target name + CC_OBJNAME="-o \$@" + CC_EXENAME="-o \$@" + + # Specify linker flags depending on the type of app being + # built -- Console vs. Window. + LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}" + LDFLAGS_WINDOW="-mwindows ${extra_ldflags}" + else + SHLIB_LD="link -dll -nologo -incremental:no -link50compat" + SHLIB_LD_LIBS="user32.lib advapi32.lib" + LIBS="user32.lib advapi32.lib" + LIBS_GUI="gdi32.lib comdlg32.lib" + AR="lib -nologo" + STLIB_LD="lib -nologo" + RC="rc" + RC_OUT=-fo + RC_TYPE=-r + RC_INCLUDE=-i + RES=res + MAKE_LIB="\${AR} -out:\$@" + POST_MAKE_LIB= + MAKE_EXE="\${CC} -Fe\$@" + LIBPREFIX="" + + if test "${SHARED_BUILD}" = "0" ; then + # static + echo "$ac_t""using static flags" 1>&6 + runtime=-MT + MAKE_DLL="echo " + LIBSUFFIX="s\${DBGX}.lib" + LIBRARIES="\${STATIC_LIBRARIES}" + EXESUFFIX="s\${DBGX}.exe" + else + # dynamic + echo "$ac_t""using shared flags" 1>&6 + runtime=-MD + # Add SHLIB_LD_LIBS to the Make rule, not here. + MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\$@" + LIBSUFFIX="\${DBGX}.lib" + EXESUFFIX="\${DBGX}.exe" + LIBRARIES="\${SHARED_LIBRARIES}" + fi + # DLLSUFFIX is separate because it is the building block for + # users of tclConfig.sh that may build shared or static. + DLLSUFFIX="\${DBGX}.dll" + + EXTRA_CFLAGS="-YX" + CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d" +# CFLAGS_OPTIMIZE="-nologo -O2 -Gs -GD ${runtime}" + CFLAGS_OPTIMIZE="-nologo -Oti -Gs -GD ${runtime}" + CFLAGS_WARNING="-W3" + LDFLAGS_DEBUG="-debug:full -debugtype:cv" + LDFLAGS_OPTIMIZE="-release" + + # Specify the CC output file names based on the target name + CC_OBJNAME="-Fo\$@" + CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) \$(PATHTYPE) '\$@')\"" + + # Specify linker flags depending on the type of app being + # built -- Console vs. Window. + LDFLAGS_CONSOLE="-link -subsystem:console" + LDFLAGS_WINDOW="-link -subsystem:windows" + + if test "$do64bit" = "yes" ; then + EXTRA_CFLAGS="$EXTRA_CFLAGS -DUSE_TCLALLOC=0" + fi + fi + + +#-------------------------------------------------------------------- +# Set the default compiler switches based on the --enable-symbols +# option. This macro depends on C flags, and should be called +# after SC_CONFIG_CFLAGS macro is called. +#-------------------------------------------------------------------- + + + + # Step 0: Enable 64 bit support? + + echo $ac_n "checking if 64bit support is requested""... $ac_c" 1>&6 +echo "configure:1727: checking if 64bit support is requested" >&5 + # Check whether --enable-64bit or --disable-64bit was given. +if test "${enable_64bit+set}" = set; then + enableval="$enable_64bit" + do64bit=$enableval +else + do64bit=no +fi + + echo "$ac_t""$do64bit" 1>&6 + + echo $ac_n "checking for build with symbols""... $ac_c" 1>&6 +echo "configure:1739: checking for build with symbols" >&5 + # Check whether --enable-symbols or --disable-symbols was given. +if test "${enable_symbols+set}" = set; then + enableval="$enable_symbols" + tcl_ok=$enableval +else + tcl_ok=no +fi + + + if test "$tcl_ok" = "yes"; then + CFLAGS_DEFAULT="${CFLAGS_DEBUG}" + LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}" + DBGX=d + echo "$ac_t""yes" 1>&6 + else + CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}" + LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" + DBGX="" + echo "$ac_t""no" 1>&6 + fi + + +CFLAGS=${CFLAGS_DEFAULT} +LDFLAGS=${LDFLAGS_DEFAULT} +TCL_DBGX=${DBGX} + +#-------------------------------------------------------------------- +# man2tcl needs this so that it can use errno.h +#-------------------------------------------------------------------- + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1771: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1809: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +ac_safe=`echo "errno.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for errno.h""... $ac_c" 1>&6 +echo "configure:1852: checking for errno.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +MAN2TCLFLAGS="-DNO_ERRNO_H" +fi + + + +#------------------------------------------------------------------------ +# tclConfig.sh refers to this by a different name +#------------------------------------------------------------------------ + +TCL_SHARED_BUILD=${SHARED_BUILD} + +#-------------------------------------------------------------------- +# Perform final evaluations of variables with possible substitutions. +#-------------------------------------------------------------------- + +TCL_SHARED_LIB_SUFFIX="\${NODOT_VERSION}${DLLSUFFIX}" +TCL_UNSHARED_LIB_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}" +TCL_EXPORT_FILE_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}" + +eval "TCL_SRC_DIR=\"`cd $srcdir/..; pwd`\"" + +eval "TCL_DLL_FILE=tcl${VER}${DLLSUFFIX}" + +eval "TCL_LIB_FILE=${LIBPREFIX}tcl$VER${LIBSUFFIX}" +# FIMXE: These variables decls are missing +#TCL_LIB_FLAG +#TCL_BUILD_LIB_SPEC +#TCL_LIB_SPEC + +eval "TCL_STUB_LIB_FILE=\"${LIBPREFIX}tclstub${VER}${LIBSUFFIX}\"" +eval "TCL_STUB_LIB_FLAG=\"-ltclstub${VER}${TCL_DBGX}\"" +eval "TCL_BUILD_STUB_LIB_SPEC=\"-L`pwd` ${TCL_STUB_LIB_FLAG}\"" +eval "TCL_STUB_LIB_SPEC=\"-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}\"" +eval "TCL_BUILD_STUB_LIB_PATH=\"`pwd`/${TCL_STUB_LIB_FILE}\"" +eval "TCL_STUB_LIB_PATH=\"${exec_prefix}/lib/${TCL_STUB_LIB_FILE}\"" + +eval "DLLSUFFIX=${DLLSUFFIX}" +eval "LIBPREFIX=${LIBPREFIX}" +eval "LIBSUFFIX=${LIBSUFFIX}" +eval "EXESUFFIX=${EXESUFFIX}" + +CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX} +CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX} +CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX} + +#-------------------------------------------------------------------- +# Adjust the defines for how the resources are built depending +# on symbols and static vs. shared. +#-------------------------------------------------------------------- + +if test "${GCC}" = "yes" ; then + RC_DEFINE_FLAG=--define +else + RC_DEFINE_FLAG=-d +fi + +if test ${SHARED_BUILD} = 0 ; then + if test "${DBGX}" = "d"; then + RC_DEFINES="${RC_DEFINE_FLAG} STATIC_BUILD ${RC_DEFINE_FLAG} DEBUG" + else + RC_DEFINES="${RC_DEFINE_FLAG} STATIC_BUILD" + fi +else + if test "${DBGX}" = "d"; then + RC_DEFINES="${RC_DEFINE_FLAG} DEBUG" + else + RC_DEFINES="" + fi +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo "Makefile tclConfig.sh tcl.hpj" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@CC@%$CC%g +s%@AR@%$AR%g +s%@RANLIB@%$RANLIB%g +s%@RC@%$RC%g +s%@SET_MAKE@%$SET_MAKE%g +s%@OBJEXT@%$OBJEXT%g +s%@EXEEXT@%$EXEEXT%g +s%@CPP@%$CPP%g +s%@MAN2TCLFLAGS@%$MAN2TCLFLAGS%g +s%@TCL_VERSION@%$TCL_VERSION%g +s%@TCL_MAJOR_VERSION@%$TCL_MAJOR_VERSION%g +s%@TCL_MINOR_VERSION@%$TCL_MINOR_VERSION%g +s%@TCL_PATCH_LEVEL@%$TCL_PATCH_LEVEL%g +s%@TCL_LIB_FILE@%$TCL_LIB_FILE%g +s%@TCL_LIB_FLAG@%$TCL_LIB_FLAG%g +s%@TCL_DLL_FILE@%$TCL_DLL_FILE%g +s%@TCL_STUB_LIB_FILE@%$TCL_STUB_LIB_FILE%g +s%@TCL_STUB_LIB_FLAG@%$TCL_STUB_LIB_FLAG%g +s%@TCL_BUILD_STUB_LIB_SPEC@%$TCL_BUILD_STUB_LIB_SPEC%g +s%@TCL_STUB_LIB_SPEC@%$TCL_STUB_LIB_SPEC%g +s%@TCL_BUILD_STUB_LIB_PATH@%$TCL_BUILD_STUB_LIB_PATH%g +s%@TCL_STUB_LIB_PATH@%$TCL_STUB_LIB_PATH%g +s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g +s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g +s%@TCL_DBGX@%$TCL_DBGX%g +s%@CFG_TCL_SHARED_LIB_SUFFIX@%$CFG_TCL_SHARED_LIB_SUFFIX%g +s%@CFG_TCL_UNSHARED_LIB_SUFFIX@%$CFG_TCL_UNSHARED_LIB_SUFFIX%g +s%@CFG_TCL_EXPORT_FILE_SUFFIX@%$CFG_TCL_EXPORT_FILE_SUFFIX%g +s%@TCL_SHARED_BUILD@%$TCL_SHARED_BUILD%g +s%@PATHTYPE@%$PATHTYPE%g +s%@CYGPATH@%$CYGPATH%g +s%@VPSEP@%$VPSEP%g +s%@CFLAGS_DEBUG@%$CFLAGS_DEBUG%g +s%@CFLAGS_OPTIMIZE@%$CFLAGS_OPTIMIZE%g +s%@CFLAGS_WARNING@%$CFLAGS_WARNING%g +s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g +s%@STLIB_LD@%$STLIB_LD%g +s%@SHLIB_LD@%$SHLIB_LD%g +s%@SHLIB_LD_LIBS@%$SHLIB_LD_LIBS%g +s%@SHLIB_CFLAGS@%$SHLIB_CFLAGS%g +s%@SHLIB_SUFFIX@%$SHLIB_SUFFIX%g +s%@CC_OBJNAME@%$CC_OBJNAME%g +s%@CC_EXENAME@%$CC_EXENAME%g +s%@LDFLAGS_DEBUG@%$LDFLAGS_DEBUG%g +s%@LDFLAGS_OPTIMIZE@%$LDFLAGS_OPTIMIZE%g +s%@LDFLAGS_CONSOLE@%$LDFLAGS_CONSOLE%g +s%@LDFLAGS_WINDOW@%$LDFLAGS_WINDOW%g +s%@RC_OUT@%$RC_OUT%g +s%@RC_TYPE@%$RC_TYPE%g +s%@RC_INCLUDE@%$RC_INCLUDE%g +s%@RC_DEFINES@%$RC_DEFINES%g +s%@RES@%$RES%g +s%@LIBS_GUI@%$LIBS_GUI%g +s%@DLLSUFFIX@%$DLLSUFFIX%g +s%@LIBPREFIX@%$LIBPREFIX%g +s%@LIBSUFFIX@%$LIBSUFFIX%g +s%@EXESUFFIX@%$EXESUFFIX%g +s%@LIBRARIES@%$LIBRARIES%g +s%@MAKE_LIB@%$MAKE_LIB%g +s%@POST_MAKE_LIB@%$POST_MAKE_LIB%g +s%@MAKE_DLL@%$MAKE_DLL%g +s%@MAKE_EXE@%$MAKE_EXE%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + Index: win/configure.in ================================================================== --- win/configure.in +++ win/configure.in @@ -1,26 +1,50 @@ # This file is an input file used by the GNU "autoconf" program to # generate the file "configure", which is run during Tcl installation # to configure the system for the local environment. # -# RCS: @(#) $Id: configure.in,v 1.20 2000/04/19 08:32:46 hobbs Exp $ +# RCS: @(#) $Id: configure.in,v 1.20.2.4 2001/04/04 08:36:16 hobbs Exp $ AC_INIT(../generic/tcl.h) TCL_VERSION=8.3 TCL_MAJOR_VERSION=8 TCL_MINOR_VERSION=3 -TCL_PATCH_LEVEL=".1" +TCL_PATCH_LEVEL=".3" VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION + +if test "${prefix}" = "NONE"; then + prefix=/usr/local +fi +if test "${exec_prefix}" = "NONE"; then + exec_prefix=$prefix +fi #-------------------------------------------------------------------- # Check whether --enable-gcc or --disable-gcc was given. Do this # before AC_PROG_CC and AC_CYGWIN are called so the compiler can # be fully tested by built-in autoconf tools. #-------------------------------------------------------------------- SC_ENABLE_GCC +#AC_PROG_CC + +# To properly support cross-compilation, one would +# need to use these tool checks instead of +# the ones below and reconfigure with +# autoconf 2.50. You can also just set +# the CC, AR, RANLIB, and RC environment +# variables if you want to cross compile. +#AC_CHECK_TOOL(AR, ar, :) +#AC_CHECK_TOOL(RANLIB, ranlib, :) +#AC_CHECK_TOOL(RC, windres, :) + +if test "${GCC}" = "yes" ; then + AC_CHECK_PROG(AR, ar, ar) + AC_CHECK_PROG(RANLIB, ranlib, ranlib) + AC_CHECK_PROG(RC, windres, windres) +fi #-------------------------------------------------------------------- # Checks to see if the make progeam sets the $MAKE variable. #-------------------------------------------------------------------- @@ -76,45 +100,97 @@ # man2tcl needs this so that it can use errno.h #-------------------------------------------------------------------- AC_CHECK_HEADER(errno.h, , MAN2TCLFLAGS="-DNO_ERRNO_H") AC_SUBST(MAN2TCLFLAGS) + +#------------------------------------------------------------------------ +# tclConfig.sh refers to this by a different name +#------------------------------------------------------------------------ + +TCL_SHARED_BUILD=${SHARED_BUILD} #-------------------------------------------------------------------- # Perform final evaluations of variables with possible substitutions. #-------------------------------------------------------------------- TCL_SHARED_LIB_SUFFIX="\${NODOT_VERSION}${DLLSUFFIX}" TCL_UNSHARED_LIB_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}" TCL_EXPORT_FILE_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}" -eval "TCL_SRC_DIR=`cd $srcdir; pwd`" -eval "TCL_STUB_LIB_FILE=${LIBPREFIX}tclstub$VER${LIBSUFFIX}" -eval "TCL_DLL_FILE=tcl$VER${DLLSUFFIX}" +eval "TCL_SRC_DIR=\"`cd $srcdir/..; pwd`\"" + +eval "TCL_DLL_FILE=tcl${VER}${DLLSUFFIX}" + eval "TCL_LIB_FILE=${LIBPREFIX}tcl$VER${LIBSUFFIX}" +# FIMXE: These variables decls are missing +#TCL_LIB_FLAG +#TCL_BUILD_LIB_SPEC +#TCL_LIB_SPEC + +eval "TCL_STUB_LIB_FILE=\"${LIBPREFIX}tclstub${VER}${LIBSUFFIX}\"" +eval "TCL_STUB_LIB_FLAG=\"-ltclstub${VER}${TCL_DBGX}\"" +eval "TCL_BUILD_STUB_LIB_SPEC=\"-L`pwd` ${TCL_STUB_LIB_FLAG}\"" +eval "TCL_STUB_LIB_SPEC=\"-L${exec_prefix}/lib ${TCL_STUB_LIB_FLAG}\"" +eval "TCL_BUILD_STUB_LIB_PATH=\"`pwd`/${TCL_STUB_LIB_FILE}\"" +eval "TCL_STUB_LIB_PATH=\"${exec_prefix}/lib/${TCL_STUB_LIB_FILE}\"" + eval "DLLSUFFIX=${DLLSUFFIX}" eval "LIBPREFIX=${LIBPREFIX}" eval "LIBSUFFIX=${LIBSUFFIX}" eval "EXESUFFIX=${EXESUFFIX}" CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX} CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX} CFG_TCL_EXPORT_FILE_SUFFIX=${TCL_EXPORT_FILE_SUFFIX} + +#-------------------------------------------------------------------- +# Adjust the defines for how the resources are built depending +# on symbols and static vs. shared. +#-------------------------------------------------------------------- + +if test "${GCC}" = "yes" ; then + RC_DEFINE_FLAG=--define +else + RC_DEFINE_FLAG=-d +fi + +if test ${SHARED_BUILD} = 0 ; then + if test "${DBGX}" = "d"; then + RC_DEFINES="${RC_DEFINE_FLAG} STATIC_BUILD ${RC_DEFINE_FLAG} DEBUG" + else + RC_DEFINES="${RC_DEFINE_FLAG} STATIC_BUILD" + fi +else + if test "${DBGX}" = "d"; then + RC_DEFINES="${RC_DEFINE_FLAG} DEBUG" + else + RC_DEFINES="" + fi +fi AC_SUBST(TCL_VERSION) AC_SUBST(TCL_MAJOR_VERSION) AC_SUBST(TCL_MINOR_VERSION) AC_SUBST(TCL_PATCH_LEVEL) AC_SUBST(TCL_LIB_FILE) +AC_SUBST(TCL_LIB_FLAG) AC_SUBST(TCL_DLL_FILE) AC_SUBST(TCL_STUB_LIB_FILE) +AC_SUBST(TCL_STUB_LIB_FLAG) +AC_SUBST(TCL_BUILD_STUB_LIB_SPEC) +AC_SUBST(TCL_STUB_LIB_SPEC) +AC_SUBST(TCL_BUILD_STUB_LIB_PATH) +AC_SUBST(TCL_STUB_LIB_PATH) + AC_SUBST(TCL_SRC_DIR) AC_SUBST(TCL_BIN_DIR) AC_SUBST(TCL_DBGX) AC_SUBST(CFG_TCL_SHARED_LIB_SUFFIX) AC_SUBST(CFG_TCL_UNSHARED_LIB_SUFFIX) AC_SUBST(CFG_TCL_EXPORT_FILE_SUFFIX) +AC_SUBST(TCL_SHARED_BUILD) AC_SUBST(PATHTYPE) AC_SUBST(CYGPATH) AC_SUBST(VPSEP) AC_SUBST(CFLAGS_DEBUG) @@ -132,15 +208,25 @@ AC_SUBST(LDFLAGS_DEBUG) AC_SUBST(LDFLAGS_OPTIMIZE) AC_SUBST(LDFLAGS_CONSOLE) AC_SUBST(LDFLAGS_WINDOW) AC_SUBST(AR) +AC_SUBST(RANLIB) AC_SUBST(RC) +AC_SUBST(RC_OUT) +AC_SUBST(RC_TYPE) +AC_SUBST(RC_INCLUDE) +AC_SUBST(RC_DEFINES) +AC_SUBST(RES) +AC_SUBST(LIBS) +AC_SUBST(LIBS_GUI) AC_SUBST(DLLSUFFIX) AC_SUBST(LIBPREFIX) AC_SUBST(LIBSUFFIX) AC_SUBST(EXESUFFIX) AC_SUBST(LIBRARIES) AC_SUBST(MAKE_LIB) +AC_SUBST(POST_MAKE_LIB) AC_SUBST(MAKE_DLL) +AC_SUBST(MAKE_EXE) AC_OUTPUT(Makefile tclConfig.sh tcl.hpj) Index: win/makefile.vc ================================================================== --- win/makefile.vc +++ win/makefile.vc @@ -1,14 +1,14 @@ -# Visual C++ 2.x and 4.0 makefile +# Visual C++ makefile # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # Copyright (c) 1995-1996 Sun Microsystems, Inc. -# Copyright (c) 1998-1999 by Scriptics Corporation. +# Copyright (c) 1998-2000 Ajuba Solutions. # -# RCS: @(#) $Id: makefile.vc,v 1.50 2000/04/25 20:58:48 hobbs Exp $ +# RCS: @(#) $Id: makefile.vc,v 1.50.2.2 2001/04/03 22:54:39 hobbs Exp $ # Does not depend on the presence of any environment variables in # order to compile tcl; all needed information is derived from # location of the compiler directories. @@ -25,22 +25,48 @@ # INSTALLDIR = where the install- targets should copy the binaries and # support files # # Set this to the appropriate value of /MACHINE: for your platform +# Choices: IX86, IA64, ALPHA MACHINE = IX86 ROOT = .. -INSTALLDIR = c:\Progra~1\Tcl +INSTALLDIR = C:\Progra~1\Tcl !IF "$(MACHINE)" == "IA64" -TOOLS32 = c:\ia64sdk17 -TOOLS32_rc = c:\ia64sdk17 + +# IA64 support is based on the standard setup with v2 of the +# Microsoft Platform SDK for Whistler, build 2267 + +TOOLS32 = C:\Progra~1\Microsoft Platform SDK +TOOLS32_rc = C:\Progra~1\Microsoft Platform SDK + +cc32 = "$(TOOLS32)\bin\Win64\cl.exe" +link32 = "$(TOOLS32)\bin\Win64\link.exe" +libpath32 = /LIBPATH:"$(TOOLS32)\lib\IA64" +lib32 = "$(TOOLS32)\bin\Win64\lib.exe" + !ELSE -TOOLS32 = c:\Progra~1\devstudio\vc -TOOLS32_rc = c:\Progra~1\devstudio\sharedide + +# Visual Studio 5 default +#TOOLS32 = C:\Progra~1\devstudio\vc +#TOOLS32_rc = C:\Progra~1\devstudio\sharedide + +# Visual Studio 6 default +TOOLS32 = C:\Progra~1\Microsoft Visual Studio\VC98 +TOOLS32_rc = C:\Progra~1\Microsoft Visual Studio\common\MSDev98 + +cc32 = "$(TOOLS32)\bin\cl.exe" +link32 = "$(TOOLS32)\bin\link.exe" +libpath32 = /LIBPATH:"$(TOOLS32)\lib" +lib32 = "$(TOOLS32)\bin\lib.exe" + !ENDIF + +rc32 = "$(TOOLS32_rc)\bin\rc.exe" +include32 = -I"$(TOOLS32)\include" # Uncomment the following line to compile with thread support #THREADDEFINES = -DTCL_THREADS=1 # Set NODEBUG to 0 to compile with symbols @@ -52,14 +78,19 @@ # -DTCL_MEM_DEBUG Enables the debugging memory allocator. # -DTCL_COMPILE_DEBUG Enables byte compilation logging. # -DTCL_COMPILE_STATS Enables byte compilation statistics gathering. # -DUSE_TCLALLOC=0 Disables the Tcl memory allocator in favor # of the native malloc implementation. This is -# needed when using Purify. +# needed when using Purify. For IA64, we do +# want to use the native allocator. # #DEBUGDEFINES = -DTCL_MEM_DEBUG -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS +!IF "$(MACHINE)" == "IA64" +DEBUGDEFINES = -DUSE_TCLALLOC=0 +!ELSE #DEBUGDEFINES = -DUSE_TCLALLOC=0 +!ENDIF ###################################################################### # Do not modify below this line ###################################################################### @@ -150,10 +181,11 @@ $(TMPDIR)\tclHistory.obj \ $(TMPDIR)\tclIndexObj.obj \ $(TMPDIR)\tclInterp.obj \ $(TMPDIR)\tclIO.obj \ $(TMPDIR)\tclIOCmd.obj \ + $(TMPDIR)\tclIOGT.obj \ $(TMPDIR)\tclIOSock.obj \ $(TMPDIR)\tclIOUtil.obj \ $(TMPDIR)\tclLink.obj \ $(TMPDIR)\tclLiteral.obj \ $(TMPDIR)\tclListObj.obj \ @@ -198,17 +230,10 @@ $(TMPDIR)\tclWinThrd.obj \ $(TMPDIR)\tclWinTime.obj TCLSTUBOBJS = $(TMPDIR)\tclStubLib.obj \ -cc32 = "$(TOOLS32)\bin\cl.exe" -link32 = "$(TOOLS32)\bin\link.exe" -rc32 = "$(TOOLS32_rc)\bin\rc.exe" -include32 = -I"$(TOOLS32)\include" -libpath32 = /LIBPATH:"$(TOOLS32)\lib" -lib32 = "$(TOOLS32)\bin\lib.exe" - WINDIR = $(ROOT)\win GENERICDIR = $(ROOT)\generic TCL_INCLUDES = -I"$(WINDIR)" -I"$(GENERICDIR)" TCL_DEFINES = $(DEBUGDEFINES) $(THREADDEFINES) @@ -218,16 +243,14 @@ ###################################################################### !IF "$(NODEBUG)" == "1" # This cranks the optimization level to maximize speed cdebug = -O2 -Gs -GD -!ELSE -!IF "$(MACHINE)" == "IA64" +!ELSE IF "$(MACHINE)" == "IA64" cdebug = -Od -Zi !ELSE cdebug = -Z7 -Od -WX -!ENDIF !ENDIF # declarations common to all compiler options cflags = -c -W3 -nologo -Fp$(TMPDIR)\ -YX cvarsdll = -MD$(DBGX) @@ -251,17 +274,15 @@ # declarations for use on Intel i386, i486, and Pentium systems !IF "$(MACHINE)" == "IX86" DLLENTRY = @12 dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll -!ELSE -!IF "$(MACHINE)" == "IA64" +!ELSE IF "$(MACHINE)" == "IA64" DLLENTRY = @12 dlllflags = $(lflags) -dll !ELSE dlllflags = $(lflags) -entry:_DllMainCRTStartup$(DLLENTRY) -dll -!ENDIF !ENDIF conlflags = $(lflags) -subsystem:console -entry:mainCRTStartup guilflags = $(lflags) -subsystem:windows -entry:WinMainCRTStartup @@ -367,20 +388,20 @@ -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http1.0" -@copy "$(ROOT)\library\http1.0\http.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0" -@copy "$(ROOT)\library\http1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http1.0" @echo installing http2.3 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\http2.3" - -@copy "$(ROOT)\library\http2.3\http.tcl" "$(SCRIPT_INSTALL_DIR)\http2.3" - -@copy "$(ROOT)\library\http2.3\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http2.3" + -@copy "$(ROOT)\library\http\http.tcl" "$(SCRIPT_INSTALL_DIR)\http2.3" + -@copy "$(ROOT)\library\http\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\http2.3" @echo installing opt0.4 -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\opt0.4" - -@copy "$(ROOT)\library\opt0.4\optparse.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4" - -@copy "$(ROOT)\library\opt0.4\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4" - @echo installing msgcat1.0 - -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\msgcat1.0" - -@copy "$(ROOT)\library\msgcat1.0\msgcat.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.0" - -@copy "$(ROOT)\library\msgcat1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.0" + -@copy "$(ROOT)\library\opt\optparse.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4" + -@copy "$(ROOT)\library\opt\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\opt0.4" + @echo installing msgcat1.1 + -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\msgcat1.1" + -@copy "$(ROOT)\library\msgcat\msgcat.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.1" + -@copy "$(ROOT)\library\msgcat\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\msgcat1.1" @echo installing $(TCLDDEDLLNAME) -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\dde1.1" -@copy "$(TCLDDEDLL)" "$(SCRIPT_INSTALL_DIR)\dde1.1" -@copy "$(ROOT)\library\dde1.1\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\dde1.1" @echo installing $(TCLREGDLLNAME) @@ -389,21 +410,22 @@ -@copy "$(ROOT)\library\reg1.0\pkgIndex.tcl" "$(SCRIPT_INSTALL_DIR)\reg1.0" @echo installing encoding files -@$(MKDIR) "$(SCRIPT_INSTALL_DIR)\encoding" -@copy "$(ROOT)\library\encoding\*.enc" "$(SCRIPT_INSTALL_DIR)\encoding" @echo installing library files - -@copy "$(GENERICDIR)\tcl.h" "$(INCLUDE_INSTALL_DIR)" - -@copy "$(GENERICDIR)\tclDecls.h" "$(INCLUDE_INSTALL_DIR)" - -@copy "$(ROOT)\library\history.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\init.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\ldAout.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\parray.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\safe.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\tclIndex" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\package.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\word.tcl" "$(SCRIPT_INSTALL_DIR)" - -@copy "$(ROOT)\library\auto.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(GENERICDIR)\tcl.h" "$(INCLUDE_INSTALL_DIR)" + -@copy "$(GENERICDIR)\tclDecls.h" "$(INCLUDE_INSTALL_DIR)" + -@copy "$(GENERICDIR)\tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)" + -@copy "$(ROOT)\library\history.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\init.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\ldAout.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\parray.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\safe.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\tclIndex" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\package.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\word.tcl" "$(SCRIPT_INSTALL_DIR)" + -@copy "$(ROOT)\library\auto.tcl" "$(SCRIPT_INSTALL_DIR)" # # Regenerate the stubs files. # @@ -505,11 +527,15 @@ {$(ROOT)\compat}.c{$(TMPDIR)}.obj: $(cc32) -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $< {$(WINDIR)}.rc{$(TMPDIR)}.res: $(rc32) -fo $@ -r -i $(GENERICDIR) -i $(WINDIR) -D__WIN32__ \ - $(TCL_DEFINES) $< + $(TCL_DEFINES) \ +!if "$(NODEBUG)" == "0" + -d DEBUG \ +!endif + $< clean: -@$(RM) $(OUTDIR)\*.exp -@$(RM) $(OUTDIR)\*.lib -@$(RM) $(OUTDIR)\*.dll Index: win/tcl.m4 ================================================================== --- win/tcl.m4 +++ win/tcl.m4 @@ -71,11 +71,11 @@ fi if test ! -f $TK_BIN_DIR/tkConfig.sh; then AC_MSG_ERROR(There is no tkConfig.sh in $TK_BIN_DIR: perhaps you did not specify the Tk *build* directory (not the toplevel Tk directory) or you forgot to configure Tk?) fi - AC_MSG_RESULT($TK_BIN_DIR/tkConfig.sh) + AC_MSG_RESULT([$TK_BIN_DIR/tkConfig.sh]) ]) #------------------------------------------------------------------------ # SC_LOAD_TCLCONFIG -- # @@ -163,18 +163,41 @@ # Adds the following arguments to configure: # --enable-gcc # # Sets the following vars: # CC Command to use for the compiler +# AR Comman for the archive tool +# RANLIB Command for the archive indexing tool +# RC Command for the resource compiler +# #------------------------------------------------------------------------ AC_DEFUN(SC_ENABLE_GCC, [ AC_ARG_ENABLE(gcc, [ --enable-gcc allow use of gcc if available [--disable-gcc]], [ok=$enableval], [ok=no]) if test "$ok" = "yes"; then - CC=gcc - AC_PROG_CC + # Quick hack to simulate a real cross check + # The right way to do this is to use AC_CHECK_TOOL + # correctly, but this is the minimal change + # we need until the real fix is ready. + if test "$host" != "$build" ; then + if test -z "$CC"; then + CC=${host}-gcc + fi + AC_PROG_CC + AC_CHECK_PROG(AR, ${host}-ar, ${host}-ar) + AC_CHECK_PROG(RANLIB, ${host}-ranlib, ${host}-ranlib) + AC_CHECK_PROG(RC, ${host}-windres, ${host}-windres) + else + if test -z "$CC"; then + CC=gcc + fi + AC_PROG_CC + AC_CHECK_PROG(AR, ar, ar) + AC_CHECK_PROG(RANLIB, ranlib, ranlib) + AC_CHECK_PROG(RC, windres, windres) + fi else # Allow user to override if test -z "$CC"; then CC=cl fi @@ -251,11 +274,11 @@ AC_MSG_RESULT(yes) TCL_THREADS=1 AC_DEFINE(TCL_THREADS) else TCL_THREADS=0 - AC_MSG_RESULT(no (default)) + AC_MSG_RESULT([no (default)]) fi ]) #------------------------------------------------------------------------ # SC_ENABLE_SYMBOLS -- @@ -282,10 +305,17 @@ # DBGX Debug library extension # #------------------------------------------------------------------------ AC_DEFUN(SC_ENABLE_SYMBOLS, [ + + # Step 0: Enable 64 bit support? + + AC_MSG_CHECKING([if 64bit support is requested]) + AC_ARG_ENABLE(64bit,[ --enable-64bit enable 64bit support (where applicable)], [do64bit=$enableval], [do64bit=no]) + AC_MSG_RESULT($do64bit) + AC_MSG_CHECKING([for build with symbols]) AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no]) if test "$tcl_ok" = "yes"; then CFLAGS_DEFAULT="${CFLAGS_DEBUG}" @@ -314,39 +344,40 @@ # Arguments: # none # # Results: # -# Defines the following vars for all compilers: -# EXTRA_CFLAGS -# CFLAGS_DEBUG -# CFLAGS_OPTIMIZE -# CFLAGS_WARNING -# LDFLAGS_DEBUG -# LDFLAGS_OPTIMIZE -# LDFLAGS_CONSOLE -# LDFLAGS_WINDOW -# CC_OBJNAME -# CC_EXENAME -# PATHTYPE -# VPSEP -# CYGPATH -# -# Defines the following vars for non-gcc compilers -# SHLIB_LD -# SHLIB_LD_LIBS -# LIBS -# AR -# MAKE_LIB -# MAKE_EXE -# MAKE_DLL -# -# LIBSUFFIX -# LIBPREFIX -# LIBRARIES -# EXESUFFIX -# DLLSUFFIX +# Can the following vars: +# EXTRA_CFLAGS +# CFLAGS_DEBUG +# CFLAGS_OPTIMIZE +# CFLAGS_WARNING +# LDFLAGS_DEBUG +# LDFLAGS_OPTIMIZE +# LDFLAGS_CONSOLE +# LDFLAGS_WINDOW +# CC_OBJNAME +# CC_EXENAME +# PATHTYPE +# VPSEP +# CYGPATH +# SHLIB_LD +# SHLIB_LD_LIBS +# LIBS +# AR +# RC +# RES +# +# MAKE_LIB +# MAKE_EXE +# MAKE_DLL +# +# LIBSUFFIX +# LIBPREFIX +# LIBRARIES +# EXESUFFIX +# DLLSUFFIX # #-------------------------------------------------------------------- AC_DEFUN(SC_CONFIG_CFLAGS, [ AC_MSG_CHECKING([compiler flags]) @@ -358,18 +389,24 @@ VPSEP=';' # set various compiler flags depending on whether we are using gcc or cl if test "${GCC}" = "yes" ; then + if test "$do64bit" = "yes" ; then + AC_MSG_WARN("64bit mode not supported with GCC on Windows") + fi SHLIB_LD="" SHLIB_LD_LIBS="" LIBS="" LIBS_GUI="-lgdi32 -lcomdlg32" - AR="${AR-ar}" - STLIB_LD="${AR-ar}" - RC="${WINDRES-windres}" + STLIB_LD="${AR}" + RC_OUT=-o + RC_TYPE= + RC_INCLUDE=--include + RES=res.o MAKE_LIB="\${AR} crv \[$]@" + POST_MAKE_LIB="\${RANLIB} \[$]@" MAKE_EXE="\${CC} -o \[$]@" LIBPREFIX="lib" if "$CC" -v 2>&1 | egrep '\/gcc-lib\/i[[3-6]]86[[^\/]]*-cygwin' >/dev/null; then mno_cygwin="yes" @@ -393,11 +430,10 @@ runtime= MAKE_DLL="echo " LIBSUFFIX="s\${DBGX}.a" LIBRARIES="\${STATIC_LIBRARIES}" EXESUFFIX="s\${DBGX}.exe" - DLLSUFFIX="" else # dynamic AC_MSG_RESULT([using shared flags]) # check to see if ld supports --shared. Libtool does a much @@ -432,14 +468,16 @@ MAKE_DLL="${MAKE_DLL} -Wl,--out-implib,\$(patsubst %.dll,lib%.a,\[$]@)" else MAKE_DLL="${MAKE_DLL} --output-lib \$(patsubst %.dll,lib%.a,\[$]@)" fi LIBSUFFIX="\${DBGX}.a" - DLLSUFFIX="\${DBGX}.dll" EXESUFFIX="\${DBGX}.exe" LIBRARIES="\${SHARED_LIBRARIES}" fi + # DLLSUFFIX is separate because it is the building block for + # users of tclConfig.sh that may build shared or static. + DLLSUFFIX="\${DBGX}.dll" EXTRA_CFLAGS="${extra_cflags}" CFLAGS_DEBUG=-g CFLAGS_OPTIMIZE=-O @@ -454,18 +492,23 @@ # Specify linker flags depending on the type of app being # built -- Console vs. Window. LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}" LDFLAGS_WINDOW="-mwindows ${extra_ldflags}" else - SHLIB_LD="link -dll -nologo" + SHLIB_LD="link -dll -nologo -incremental:no -link50compat" SHLIB_LD_LIBS="user32.lib advapi32.lib" LIBS="user32.lib advapi32.lib" LIBS_GUI="gdi32.lib comdlg32.lib" AR="lib -nologo" STLIB_LD="lib -nologo" RC="rc" + RC_OUT=-fo + RC_TYPE=-r + RC_INCLUDE=-i + RES=res MAKE_LIB="\${AR} -out:\[$]@" + POST_MAKE_LIB= MAKE_EXE="\${CC} -Fe\[$]@" LIBPREFIX="" if test "${SHARED_BUILD}" = "0" ; then # static @@ -473,21 +516,23 @@ runtime=-MT MAKE_DLL="echo " LIBSUFFIX="s\${DBGX}.lib" LIBRARIES="\${STATIC_LIBRARIES}" EXESUFFIX="s\${DBGX}.exe" - DLLSUFFIX="" else # dynamic AC_MSG_RESULT([using shared flags]) runtime=-MD - MAKE_DLL="\${SHLIB_LD} \${SHLIB_LD_LIBS} \$(LDFLAGS) -out:\[$]@" + # Add SHLIB_LD_LIBS to the Make rule, not here. + MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\[$]@" LIBSUFFIX="\${DBGX}.lib" - DLLSUFFIX="\${DBGX}.dll" EXESUFFIX="\${DBGX}.exe" LIBRARIES="\${SHARED_LIBRARIES}" fi + # DLLSUFFIX is separate because it is the building block for + # users of tclConfig.sh that may build shared or static. + DLLSUFFIX="\${DBGX}.dll" EXTRA_CFLAGS="-YX" CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d" # CFLAGS_OPTIMIZE="-nologo -O2 -Gs -GD ${runtime}" CFLAGS_OPTIMIZE="-nologo -Oti -Gs -GD ${runtime}" @@ -499,12 +544,16 @@ CC_OBJNAME="-Fo\[$]@" CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) \$(PATHTYPE) '\[$]@')\"" # Specify linker flags depending on the type of app being # built -- Console vs. Window. - LDFLAGS_CONSOLE="-subsystem:console" - LDFLAGS_WINDOW="-subsystem:windows" + LDFLAGS_CONSOLE="-link -subsystem:console" + LDFLAGS_WINDOW="-link -subsystem:windows" + + if test "$do64bit" = "yes" ; then + EXTRA_CFLAGS="$EXTRA_CFLAGS -DUSE_TCLALLOC=0" + fi fi ]) #------------------------------------------------------------------------ # SC_WITH_TCL -- @@ -541,5 +590,52 @@ echo "building against Tcl binaries in: $TCL_BIN_DIR" fi AC_SUBST(TCL_BIN_DIR) ]) +# FIXME : SC_PROG_TCLSH should really look for the installed tclsh and +# not the build version. If we want to use the build version in the +# tk script, it is better to hardcode that! + +#------------------------------------------------------------------------ +# SC_PROG_TCLSH +# Locate a tclsh shell in the following directories: +# ${exec_prefix}/bin +# ${prefix}/bin +# ${TCL_BIN_DIR} +# ${TCL_BIN_DIR}/../bin +# ${PATH} +# +# Arguments +# none +# +# Results +# Subst's the following values: +# TCLSH_PROG +#------------------------------------------------------------------------ + +AC_DEFUN(SC_PROG_TCLSH, [ + AC_MSG_CHECKING([for tclsh]) + + AC_CACHE_VAL(ac_cv_path_tclsh, [ + search_path=`echo ${exec_prefix}/bin:${prefix}/bin:${TCL_BIN_DIR}:${TCL_BIN_DIR}/../bin:${PATH} | sed -e 's/:/ /g'` + for dir in $search_path ; do + for j in `ls -r $dir/tclsh[[8-9]]*.exe 2> /dev/null` \ + `ls -r $dir/tclsh* 2> /dev/null` ; do + if test x"$ac_cv_path_tclsh" = x ; then + if test -f "$j" ; then + ac_cv_path_tclsh=$j + break + fi + fi + done + done + ]) + + if test -f "$ac_cv_path_tclsh" ; then + TCLSH_PROG=$ac_cv_path_tclsh + AC_MSG_RESULT($TCLSH_PROG) + else + AC_MSG_ERROR(No tclsh found in PATH: $search_path) + fi + AC_SUBST(TCLSH_PROG) +]) Index: win/tcl.rc ================================================================== --- win/tcl.rc +++ win/tcl.rc @@ -1,46 +1,61 @@ -// RCS: @(#) $Id: tcl.rc,v 1.5 2000/04/18 23:26:45 redman Exp $ +// RCS: @(#) $Id: tcl.rc,v 1.5.2.1 2001/04/03 22:54:39 hobbs Exp $ // -// Version +// Version Resource Script // -#define VS_VERSION_INFO 1 +#include #define RESOURCE_INCLUDED #include + +// +// build-up the name suffix that defines the type of build this is. +// +#ifdef TCL_THREADS +#define SUFFIX_THREADS "t" +#else +#define SUFFIX_THREADS "" +#endif + +#ifdef DEBUG +#define SUFFIX_DEBUG "d" +#else +#define SUFFIX_DEBUG "" +#endif + +#define SUFFIX SUFFIX_THREADS SUFFIX_DEBUG + LANGUAGE 0x9, 0x1 /* LANG_ENGLISH, SUBLANG_DEFAULT */ VS_VERSION_INFO VERSIONINFO FILEVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL PRODUCTVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL FILEFLAGSMASK 0x3fL +#ifdef DEBUG + FILEFLAGS VS_FF_DEBUG +#else FILEFLAGS 0x0L - FILEOS 0x4 /* VOS__WINDOWS32 */ - FILETYPE 0x2 /* VFT_DLL */ +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" /* LANG_ENGLISH/SUBLANG_ENGLISH_US, Unicode CP */ BEGIN VALUE "FileDescription", "Tcl DLL\0" - VALUE "OriginalFilename", "tcl" STRINGIFY(TCL_MAJOR_VERSION) STRINGIFY(TCL_MINOR_VERSION) ".dll\0" - VALUE "CompanyName", "Scriptics Corporation\0" + VALUE "OriginalFilename", "tcl" STRINGIFY(TCL_MAJOR_VERSION) STRINGIFY(TCL_MINOR_VERSION) SUFFIX ".dll\0" + VALUE "CompanyName", "Ajuba Solutions\0" VALUE "FileVersion", TCL_PATCH_LEVEL - VALUE "LegalCopyright", "Copyright (c) 2000 by Scriptics Corporation\0" + VALUE "LegalCopyright", "Copyright (c) 2000 by Ajuba Solutions\0" VALUE "ProductName", "Tcl " TCL_VERSION " for Windows\0" VALUE "ProductVersion", TCL_PATCH_LEVEL END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END - - - - - - - Index: win/tclConfig.sh.in ================================================================== --- win/tclConfig.sh.in +++ win/tclConfig.sh.in @@ -7,20 +7,13 @@ # for Tcl extensions so that they don't have to figure this all # out for themselves. # # The information in this file is specific to a single platform. # -# RCS: @(#) $Id: tclConfig.sh.in,v 1.3 1999/07/29 19:21:32 wart Exp $ - - -TCL_SRC_DIR="@TCL_SRC_DIR@" -TCL_LIB_FILE="@TCL_LIB_FILE@" -TCL_DLL_FILE="@TCL_DLL_FILE@" -TCL_STUB_LIB_FILE="@TCL_STUB_LIB_FILE@" - - - +# RCS: @(#) $Id: tclConfig.sh.in,v 1.3.10.2 2000/07/28 07:58:28 mo Exp $ + +TCL_DLL_FILE="@TCL_DLL_FILE@" # Tcl's version number. TCL_VERSION='@TCL_VERSION@' TCL_MAJOR_VERSION='@TCL_MAJOR_VERSION@' TCL_MINOR_VERSION='@TCL_MINOR_VERSION@' @@ -58,11 +51,11 @@ # extension, and anything else needed). May depend on the variables # VERSION. On most UNIX systems this is ${VERSION}.exp. TCL_EXPORT_FILE_SUFFIX='@CFG_TCL_EXPORT_FILE_SUFFIX@' # Additional libraries to use when linking Tcl. -TCL_LIBS='@DL_LIBS@ @LIBS@ @MATH_LIBS@' +TCL_LIBS='@LIBS@' # Top-level directory in which Tcl's platform-independent files are # installed. TCL_PREFIX='@prefix@' @@ -80,11 +73,11 @@ TCL_EXTRA_CFLAGS='@EXTRA_CFLAGS@' # Base command to use for combining object files into a shared library: TCL_SHLIB_LD='@SHLIB_LD@' -# Base command to use for combining object files into a shared library: +# Base command to use for combining object files into a static library: TCL_STLIB_LD='@STLIB_LD@' # Either '$LIBS' (if dependent libraries should be included when linking # shared libraries) or an empty string. See Tcl's configure.in for more # explanation. Index: win/tclWinChan.c ================================================================== --- win/tclWinChan.c +++ win/tclWinChan.c @@ -7,11 +7,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinChan.c,v 1.10 2000/04/20 01:30:20 hobbs Exp $ + * RCS: @(#) $Id: tclWinChan.c,v 1.10.2.2 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" /* @@ -99,19 +99,23 @@ * This structure describes the channel type structure for file based IO. */ static Tcl_ChannelType fileChannelType = { "file", /* Type name. */ - FileBlockProc, /* Set blocking or non-blocking mode.*/ + TCL_CHANNEL_VERSION_2, /* v2 channel */ FileCloseProc, /* Close proc. */ FileInputProc, /* Input proc. */ FileOutputProc, /* Output proc. */ FileSeekProc, /* Seek proc. */ NULL, /* Set option proc. */ NULL, /* Get option proc. */ FileWatchProc, /* Set up the notifier to watch the channel. */ FileGetHandleProc, /* Get an OS handle from channel. */ + NULL, /* close2proc. */ + FileBlockProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* *---------------------------------------------------------------------- @@ -873,20 +877,25 @@ * TCL_WRITABLE to indicate file mode. */ { char channelName[16 + TCL_INTEGER_SPACE]; Tcl_Channel channel = NULL; HANDLE handle = (HANDLE) rawHandle; + HANDLE dupedHandle; DCB dcb; - DWORD consoleParams; - DWORD type; + DWORD consoleParams, type; TclFile readFile = NULL; TclFile writeFile = NULL; + BOOL result; if (mode == 0) { return NULL; } + /* + * GetFileType() returns FILE_TYPE_UNKNOWN for invalid handles. + */ + type = GetFileType(handle); /* * If the file is a character device, we need to try to figure out * whether it is a serial port, a console, or something else. We @@ -924,23 +933,62 @@ channel = TclpCreateCommandChannel(readFile, writeFile, NULL, 0, NULL); break; case FILE_TYPE_DISK: case FILE_TYPE_CHAR: - case FILE_TYPE_UNKNOWN: channel = TclWinOpenFileChannel(handle, channelName, mode, 0); break; + case FILE_TYPE_UNKNOWN: default: /* - * The handle is of an unknown type, probably /dev/nul equivalent - * or possibly a closed handle. + * The handle is of an unknown type. Test the validity of this OS + * handle by duplicating it, then closing the dupe. The Win32 API + * doesn't provide an IsValidHandle() function, so we have to emulate + * it here. This test will not work on a console handle reliably, + * which is why we can't test every handle that comes into this + * function in this way. + */ + + result = DuplicateHandle(GetCurrentProcess(), handle, + GetCurrentProcess(), &dupedHandle, 0, FALSE, + DUPLICATE_SAME_ACCESS); + + if (result != 0) { + /* + * Unable to make a duplicate. It's definately invalid at this + * point. + */ + + return NULL; + } + + /* + * Use structured exception handling (Win32 SEH) to protect the close + * of this duped handle which might throw EXCEPTION_INVALID_HANDLE. + */ + + __try { + CloseHandle(dupedHandle); + } + __except (EXCEPTION_EXECUTE_HANDLER) { + /* + * Definately an invalid handle. So, therefore, the original + * is invalid also. + */ + + return NULL; + } + + /* Fall through, the handle is valid. */ + + /* + * Create the undefined channel, anyways, because we know the handle + * is valid to something. */ - - channel = NULL; - break; + channel = TclWinOpenFileChannel(handle, channelName, mode, 0); } return channel; } @@ -968,10 +1016,11 @@ Tcl_Channel channel; HANDLE handle; int mode; char *bufMode; DWORD handleId; /* Standard handle to retrieve. */ + switch (type) { case TCL_STDIN: handleId = STD_INPUT_HANDLE; mode = TCL_READABLE; @@ -997,19 +1046,19 @@ /* * Note that we need to check for 0 because Windows may return 0 if this * is not a console mode application, even though this is not a valid * handle. */ - + if ((handle == INVALID_HANDLE_VALUE) || (handle == 0)) { - return NULL; + return (Tcl_Channel) NULL; } - + channel = Tcl_MakeFileChannel(handle, mode); if (channel == NULL) { - return NULL; + return (Tcl_Channel) NULL; } /* * Set up the normal channel options for stdio handles. */ Index: win/tclWinConsole.c ================================================================== --- win/tclWinConsole.c +++ win/tclWinConsole.c @@ -7,11 +7,11 @@ * Copyright (c) 1999 by Scriptics Corp. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinConsole.c,v 1.3 1999/07/27 01:42:25 redman Exp $ + * RCS: @(#) $Id: tclWinConsole.c,v 1.3.10.2 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" #include @@ -133,18 +133,10 @@ /* * Declarations for functions used only in this file. */ -static int ApplicationType(Tcl_Interp *interp, - const char *fileName, char *fullName); -static void BuildCommandLine(const char *executable, int argc, - char **argv, Tcl_DString *linePtr); -static void CopyChannel(HANDLE dst, HANDLE src); -static BOOL HasConsole(void); -static TclFile MakeFile(HANDLE handle); -static char * MakeTempFile(Tcl_DString *namePtr); static int ConsoleBlockModeProc(ClientData instanceData, int mode); static void ConsoleCheckProc(ClientData clientData, int flags); static int ConsoleCloseProc(ClientData instanceData, Tcl_Interp *interp); static int ConsoleEventProc(Tcl_Event *evPtr, int flags); @@ -159,29 +151,32 @@ static DWORD WINAPI ConsoleReaderThread(LPVOID arg); static void ConsoleSetupProc(ClientData clientData, int flags); static void ConsoleWatchProc(ClientData instanceData, int mask); static DWORD WINAPI ConsoleWriterThread(LPVOID arg); static void ProcExitHandler(ClientData clientData); -static int TempFileName(WCHAR name[MAX_PATH]); static int WaitForRead(ConsoleInfo *infoPtr, int blocking); /* * This structure describes the channel type structure for command console * based IO. */ static Tcl_ChannelType consoleChannelType = { "console", /* Type name. */ - ConsoleBlockModeProc, /* Set blocking or non-blocking mode.*/ + TCL_CHANNEL_VERSION_2, /* v2 channel */ ConsoleCloseProc, /* Close proc. */ ConsoleInputProc, /* Input proc. */ ConsoleOutputProc, /* Output proc. */ NULL, /* Seek proc. */ NULL, /* Set option proc. */ NULL, /* Get option proc. */ ConsoleWatchProc, /* Set up notifier to watch the channel. */ ConsoleGetHandleProc, /* Get an OS handle from channel. */ + NULL, /* close2proc. */ + ConsoleBlockModeProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* *---------------------------------------------------------------------- * @@ -630,15 +625,15 @@ /* * Data is stored in the buffer. */ if (bufSize < (infoPtr->bytesRead - infoPtr->offset)) { - memcpy(buf, &infoPtr->buffer[infoPtr->offset], bufSize); + memcpy(buf, &infoPtr->buffer[infoPtr->offset], (size_t) bufSize); bytesRead = bufSize; infoPtr->offset += bufSize; } else { - memcpy(buf, &infoPtr->buffer[infoPtr->offset], bufSize); + memcpy(buf, &infoPtr->buffer[infoPtr->offset], (size_t) bufSize); bytesRead = infoPtr->bytesRead - infoPtr->offset; /* * Reset the buffer */ @@ -728,13 +723,13 @@ if (infoPtr->writeBuf) { ckfree(infoPtr->writeBuf); } infoPtr->writeBufLen = toWrite; - infoPtr->writeBuf = ckalloc(toWrite); + infoPtr->writeBuf = ckalloc((unsigned int) toWrite); } - memcpy(infoPtr->writeBuf, buf, toWrite); + memcpy(infoPtr->writeBuf, buf, (size_t) toWrite); infoPtr->toWrite = toWrite; ResetEvent(infoPtr->writable); SetEvent(infoPtr->startWriter); bytesWritten = toWrite; } else { @@ -1080,11 +1075,11 @@ /* * Look for data on the console, but first ignore any events * that are not KEY_EVENTs */ if (ReadConsole(handle, infoPtr->buffer, CONSOLE_BUFFER_SIZE, - &infoPtr->bytesRead, NULL) != FALSE) { + (LPDWORD) &infoPtr->bytesRead, NULL) != FALSE) { /* * Data was stored in the buffer. */ infoPtr->readFlags |= CONSOLE_BUFFERED; Index: win/tclWinDde.c ================================================================== --- win/tclWinDde.c +++ win/tclWinDde.c @@ -8,11 +8,11 @@ * Copyright (c) 1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinDde.c,v 1.5 1999/06/26 22:41:53 redman Exp $ + * RCS: @(#) $Id: tclWinDde.c,v 1.5.10.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclPort.h" #include @@ -731,11 +731,10 @@ char *name, /* The connection to use. */ HCONV *ddeConvPtr) { HSZ ddeTopic, ddeService; HCONV ddeConv; - ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); ddeService = DdeCreateStringHandle(ddeInstance, "TclEval", 0); ddeTopic = DdeCreateStringHandle(ddeInstance, name, 0); ddeConv = DdeConnect(ddeInstance, ddeService, ddeTopic, NULL); Index: win/tclWinError.c ================================================================== --- win/tclWinError.c +++ win/tclWinError.c @@ -7,11 +7,11 @@ * Copyright (c) 1995-1996 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinError.c,v 1.3 1999/04/16 00:48:08 stanton Exp $ + * RCS: @(#) $Id: tclWinError.c,v 1.3.12.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" /* @@ -145,11 +145,11 @@ EINVAL, /* 122 */ ENOENT, /* ERROR_INVALID_NAME 123 */ EINVAL, /* 124 */ EINVAL, /* 125 */ EINVAL, /* 126 */ - ESRCH, /* ERROR_PROC_NOT_FOUND 127 */ + EINVAL, /* ERROR_PROC_NOT_FOUND 127 */ ECHILD, /* ERROR_WAIT_NO_CHILDREN 128 */ ECHILD, /* ERROR_CHILD_NOT_COMPLETE 129 */ EBADF, /* ERROR_DIRECT_ACCESS_HANDLE 130 */ EINVAL, /* 131 */ ESPIPE, /* ERROR_SEEK_ON_DEVICE 132 */ Index: win/tclWinFCmd.c ================================================================== --- win/tclWinFCmd.c +++ win/tclWinFCmd.c @@ -7,11 +7,11 @@ * Copyright (c) 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinFCmd.c,v 1.7 1999/12/09 14:44:11 hobbs Exp $ + * RCS: @(#) $Id: tclWinFCmd.c,v 1.7.2.1 2000/08/07 21:33:02 hobbs Exp $ */ #include "tclWinInt.h" /* @@ -235,11 +235,11 @@ (*tclWinProcs->charLowerProc)((TCHAR *) nativeSrcPath); (*tclWinProcs->charLowerProc)((TCHAR *) nativeDstPath); src = Tcl_WinTCharToUtf((TCHAR *) nativeSrcPath, -1, &srcString); dst = Tcl_WinTCharToUtf((TCHAR *) nativeDstPath, -1, &dstString); - if (strncmp(src, dst, Tcl_DStringLength(&srcString)) == 0) { + if (strncmp(src, dst, (size_t) Tcl_DStringLength(&srcString)) == 0) { /* * Trying to move a directory into itself. */ errno = EINVAL; @@ -656,11 +656,11 @@ static int DoCreateDirectory( Tcl_DString *pathPtr) /* Pathname of directory to create (native). */ { - int error; + DWORD error; CONST TCHAR *nativePath; nativePath = (TCHAR *) Tcl_DStringValue(pathPtr); if ((*tclWinProcs->createDirectoryProc)(nativePath, NULL) == 0) { error = GetLastError(); @@ -1282,11 +1282,11 @@ if (result == 0xffffffff) { StatError(interp, fileName); return TCL_ERROR; } - *attributePtrPtr = Tcl_NewBooleanObj(result & attributeArray[objIndex]); + *attributePtrPtr = Tcl_NewBooleanObj((int) (result & attributeArray[objIndex])); return TCL_OK; } /* *---------------------------------------------------------------------- @@ -1420,11 +1420,11 @@ * fprintf(stderr, "%d\n", data.w.cAlternateFileName[0]); * fprintf(stderr, "%d\n", ((WCHAR *) nativeName)[0]); */ Tcl_WinTCharToUtf(nativeName, -1, &ds); - newv[i] = ckalloc(Tcl_DStringLength(&ds) + 1); + newv[i] = ckalloc((unsigned int) (Tcl_DStringLength(&ds) + 1)); lstrcpyA(newv[i], Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); FindClose(handle); } } Index: win/tclWinFile.c ================================================================== --- win/tclWinFile.c +++ win/tclWinFile.c @@ -9,11 +9,11 @@ * Copyright (c) 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinFile.c,v 1.7 1999/12/12 22:46:51 hobbs Exp $ + * RCS: @(#) $Id: tclWinFile.c,v 1.7.2.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" #include #include @@ -324,17 +324,24 @@ Tcl_DStringAppend(dirPtr, name, -1); Tcl_DStringFree(&ds); fname = Tcl_DStringValue(dirPtr); nativeName = Tcl_WinUtfToTChar(fname, Tcl_DStringLength(dirPtr), &ds); - attr = (*tclWinProcs->getFileAttributesProc)(nativeName); - Tcl_DStringFree(&ds); + + /* + * 'attr' represents the attributes of the file, but we only + * want to retrieve this info if it is absolutely necessary + * because it is an expensive call. + */ + + attr = 0; if (tail == NULL) { int typeOk = 1; if (types != NULL) { if (types->perm != 0) { + attr = (*tclWinProcs->getFileAttributesProc)(nativeName); if ( ((types->perm & TCL_GLOB_PERM_RONLY) && !(attr & FILE_ATTRIBUTE_READONLY)) || ((types->perm & TCL_GLOB_PERM_HIDDEN) && !(attr & FILE_ATTRIBUTE_HIDDEN)) || @@ -387,17 +394,26 @@ } if (typeOk) { Tcl_ListObjAppendElement(interp, resultPtr, Tcl_NewStringObj(fname, Tcl_DStringLength(dirPtr))); } - } else if (attr & FILE_ATTRIBUTE_DIRECTORY) { - Tcl_DStringAppend(dirPtr, "/", 1); - result = TclDoGlob(interp, separators, dirPtr, tail, types); - if (result != TCL_OK) { - break; + } else { + attr = (*tclWinProcs->getFileAttributesProc)(nativeName); + if (attr & FILE_ATTRIBUTE_DIRECTORY) { + Tcl_DStringAppend(dirPtr, "/", 1); + result = TclDoGlob(interp, separators, dirPtr, tail, types); + if (result != TCL_OK) { + break; + } } } + /* + * Free ds here to ensure that nativeName is valid above. + */ + + Tcl_DStringFree(&ds); + Tcl_DStringSetLength(dirPtr, dirLength); } FindClose(handle); Tcl_DStringFree(&dirString); Index: win/tclWinInit.c ================================================================== --- win/tclWinInit.c +++ win/tclWinInit.c @@ -5,11 +5,11 @@ * * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * All rights reserved. * - * RCS: @(#) $Id: tclWinInit.c,v 1.22 2000/03/31 08:52:31 hobbs Exp $ + * RCS: @(#) $Id: tclWinInit.c,v 1.22.2.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" #include #include @@ -246,46 +246,46 @@ * (e.g. /usr/src/tcl8.2/unix/solaris-sparc/../../../tcl8.2/library) */ if (path != NULL) { Tcl_SplitPath(path, &pathc, &pathv); - if (pathc > 1) { + if (pathc > 2) { pathv[pathc - 2] = installLib; path = Tcl_JoinPath(pathc - 1, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 2) { + if (pathc > 3) { pathv[pathc - 3] = installLib; path = Tcl_JoinPath(pathc - 2, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 1) { + if (pathc > 2) { pathv[pathc - 2] = "library"; path = Tcl_JoinPath(pathc - 1, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 2) { + if (pathc > 3) { pathv[pathc - 3] = "library"; path = Tcl_JoinPath(pathc - 2, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 1) { + if (pathc > 3) { pathv[pathc - 3] = developLib; path = Tcl_JoinPath(pathc - 2, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); } - if (pathc > 3) { + if (pathc > 4) { pathv[pathc - 4] = developLib; path = Tcl_JoinPath(pathc - 3, pathv, &ds); objPtr = Tcl_NewStringObj(path, Tcl_DStringLength(&ds)); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); Tcl_DStringFree(&ds); @@ -620,11 +620,11 @@ * faster than asking the system. */ Tcl_DStringSetLength(&ds, 100); if (TclGetEnv("USERNAME", &ds) == NULL) { - if (GetUserName(Tcl_DStringValue(&ds), &Tcl_DStringLength(&ds)) == 0) { + if (GetUserName(Tcl_DStringValue(&ds), (LPDWORD) &Tcl_DStringLength(&ds)) == 0) { Tcl_DStringSetLength(&ds, 0); } } Tcl_SetVar2(interp, "tcl_platform", "user", Tcl_DStringValue(&ds), TCL_GLOBAL_ONLY); Index: win/tclWinInt.h ================================================================== --- win/tclWinInt.h +++ win/tclWinInt.h @@ -6,11 +6,11 @@ * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinInt.h,v 1.8 1999/08/03 18:07:15 redman Exp $ + * RCS: @(#) $Id: tclWinInt.h,v 1.8.10.1 2001/04/03 22:54:39 hobbs Exp $ */ #ifndef _TCLWININT #define _TCLWININT @@ -90,11 +90,10 @@ BOOL (WINAPI *setCurrentDirectoryProc)(CONST TCHAR *); BOOL (WINAPI *setFileAttributesProc)(CONST TCHAR *, DWORD); } TclWinProcs; EXTERN TclWinProcs *tclWinProcs; -EXTERN Tcl_Encoding tclWinTCharEncoding; /* * Declarations of functions that are not accessible by way of the * stubs table. */ Index: win/tclWinLoad.c ================================================================== --- win/tclWinLoad.c +++ win/tclWinLoad.c @@ -8,11 +8,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinLoad.c,v 1.5 2000/02/10 09:53:57 hobbs Exp $ + * RCS: @(#) $Id: tclWinLoad.c,v 1.5.2.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" @@ -85,12 +85,16 @@ */ switch (lastError) { case ERROR_MOD_NOT_FOUND: case ERROR_DLL_NOT_FOUND: Tcl_AppendResult(interp, "this library or a dependent library", - " could not be found in library path", (char *) - NULL); + " could not be found in library path", + (char *) NULL); + break; + case ERROR_PROC_NOT_FOUND: + Tcl_AppendResult(interp, "could not find specified procedure", + (char *) NULL); break; case ERROR_INVALID_DLL: Tcl_AppendResult(interp, "this library or a dependent library", " is damaged", (char *) NULL); break; Index: win/tclWinNotify.c ================================================================== --- win/tclWinNotify.c +++ win/tclWinNotify.c @@ -8,22 +8,16 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinNotify.c,v 1.5 1999/07/02 22:08:28 redman Exp $ + * RCS: @(#) $Id: tclWinNotify.c,v 1.5.10.1 2001/04/03 22:54:39 hobbs Exp $ */ #include "tclWinInt.h" #include -/* - * The follwing static indicates whether this module has been initialized. - */ - -static int initialized = 0; - #define INTERVAL_TIMER 1 /* Handle of interval timer. */ #define WM_WAKEUP WM_USER /* Message that is send by * Tcl_AlertNotifier. */ /* @@ -466,11 +460,11 @@ /* * We received a request to exit this thread (WM_QUIT), so * propagate the quit message and start unwinding. */ - PostQuitMessage(msg.wParam); + PostQuitMessage((int) msg.wParam); status = -1; } else if (result == -1) { /* * We got an error from the system. I have no idea why this would * happen, so we'll just unwind. Index: win/tclWinPipe.c ================================================================== --- win/tclWinPipe.c +++ win/tclWinPipe.c @@ -7,11 +7,11 @@ * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinPipe.c,v 1.11 2000/04/11 21:42:12 ericm Exp $ + * RCS: @(#) $Id: tclWinPipe.c,v 1.11.2.3 2001/07/17 01:45:42 hobbs Exp $ */ #include "tclWinInt.h" #include @@ -122,10 +122,12 @@ * signal when the writer thread should attempt * to write to the pipe. */ HANDLE startReader; /* Auto-reset event used by the main thread to * signal when the reader thread should attempt * to read from the pipe. */ + HANDLE stopReader; /* Manual-reset event used to alert the reader + * thread to fall-out and exit */ DWORD writeError; /* An error caused by the last background * write. Set to 0 if no error has been * detected. This word is shared with the * writer thread so access must be * synchronized with the writable object. @@ -207,20 +209,23 @@ * based IO. */ static Tcl_ChannelType pipeChannelType = { "pipe", /* Type name. */ - PipeBlockModeProc, /* Set blocking or non-blocking mode.*/ + TCL_CHANNEL_VERSION_2, /* v2 channel */ TCL_CLOSE2PROC, /* Close proc. */ PipeInputProc, /* Input proc. */ PipeOutputProc, /* Output proc. */ NULL, /* Seek proc. */ NULL, /* Set option proc. */ NULL, /* Get option proc. */ PipeWatchProc, /* Set up notifier to watch the channel. */ PipeGetHandleProc, /* Get an OS handle from channel. */ - PipeClose2Proc + PipeClose2Proc, /* close2proc */ + PipeBlockModeProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* *---------------------------------------------------------------------- * @@ -828,11 +833,12 @@ if (!TclInExit() || ((GetStdHandle(STD_INPUT_HANDLE) != filePtr->handle) && (GetStdHandle(STD_OUTPUT_HANDLE) != filePtr->handle) && (GetStdHandle(STD_ERROR_HANDLE) != filePtr->handle))) { - if (CloseHandle(filePtr->handle) == FALSE) { + if (filePtr->handle != NULL && + CloseHandle(filePtr->handle) == FALSE) { TclWinConvertError(GetLastError()); ckfree((char *) filePtr); return -1; } } @@ -1192,11 +1198,11 @@ BuildCommandLine(execPath, argc, argv, &cmdLine); if ((*tclWinProcs->createProcessProc)(NULL, (TCHAR *) Tcl_DStringValue(&cmdLine), NULL, NULL, TRUE, - createFlags, NULL, NULL, &startInfo, &procInfo) == 0) { + (DWORD) createFlags, NULL, NULL, &startInfo, &procInfo) == 0) { TclWinConvertError(GetLastError()); Tcl_AppendResult(interp, "couldn't execute \"", argv[0], "\": ", Tcl_PosixError(interp), (char *) NULL); goto end; } @@ -1567,10 +1573,11 @@ Tcl_DStringAppend(&ds, start, special - start); if (quote) { Tcl_DStringAppend(&ds, "\"", 1); } } + Tcl_DStringFree(linePtr); Tcl_WinUtfToTChar(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds), linePtr); Tcl_DStringFree(&ds); } /* @@ -1643,25 +1650,26 @@ * Start the background reader thread. */ infoPtr->readable = CreateEvent(NULL, TRUE, TRUE, NULL); infoPtr->startReader = CreateEvent(NULL, FALSE, FALSE, NULL); - infoPtr->readThread = CreateThread(NULL, 8000, PipeReaderThread, + infoPtr->stopReader = CreateEvent(NULL, TRUE, FALSE, NULL); + infoPtr->readThread = CreateThread(NULL, 512, PipeReaderThread, infoPtr, 0, &id); SetThreadPriority(infoPtr->readThread, THREAD_PRIORITY_HIGHEST); infoPtr->validMask |= TCL_READABLE; } else { infoPtr->readThread = 0; } if (writeFile != NULL) { /* - * Start the background writeer thwrite. + * Start the background writer thread. */ infoPtr->writable = CreateEvent(NULL, TRUE, TRUE, NULL); infoPtr->startWriter = CreateEvent(NULL, FALSE, FALSE, NULL); - infoPtr->writeThread = CreateThread(NULL, 8000, PipeWriterThread, + infoPtr->writeThread = CreateThread(NULL, 512, PipeWriterThread, infoPtr, 0, &id); SetThreadPriority(infoPtr->readThread, THREAD_PRIORITY_HIGHEST); infoPtr->validMask |= TCL_WRITABLE; } @@ -1802,10 +1810,11 @@ PipeInfo *pipePtr = (PipeInfo *) instanceData; Tcl_Channel errChan; int errorCode, result; PipeInfo *infoPtr, **nextPtrPtr; ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey); + DWORD exitCode; errorCode = 0; if ((!flags || (flags == TCL_CLOSE_READ)) && (pipePtr->readFile != NULL)) { /* @@ -1814,33 +1823,63 @@ * thread may be blocking trying to read from the pipe. */ if (pipePtr->readThread) { /* - * Forcibly terminate the background thread. We cannot rely on the - * thread to cleanly terminate itself because we have no way of - * closing the pipe handle without blocking in the case where the - * thread is in the middle of an I/O operation. Note that we need - * to guard against terminating the thread while it is in the - * middle of Tcl_ThreadAlert because it won't be able to release - * the notifier lock. - */ - - Tcl_MutexLock(&pipeMutex); - TerminateThread(pipePtr->readThread, 0); - - /* - * Wait for the thread to terminate. This ensures that we are - * completely cleaned up before we leave this function. - */ - - WaitForSingleObject(pipePtr->readThread, INFINITE); - Tcl_MutexUnlock(&pipeMutex); + * The thread may already have closed on it's own. Check it's + * exit code. + */ + + GetExitCodeThread(pipePtr->readThread, &exitCode); + + if (exitCode == STILL_ACTIVE) { + /* + * Set the stop event so that if the reader thread is blocked + * in PipeReaderThread on WaitForMultipleEvents, it will exit + * cleanly. + */ + + SetEvent(pipePtr->stopReader); + + /* + * Wait at most 10 milliseconds for the reader thread to close. + */ + + WaitForSingleObject(pipePtr->readThread, 10); + GetExitCodeThread(pipePtr->readThread, &exitCode); + + if (exitCode == STILL_ACTIVE) { + /* + * The thread must be blocked waiting for the pipe to + * become readable in ReadFile(). There isn't a clean way + * to exit the thread from this condition. We should + * terminate the child process instead to get the reader + * thread to fall out of ReadFile with a FALSE. (below) is + * not the correct way to do this, but will stay here until + * a better solution is found. + * + * Note that we need to guard against terminating the + * thread while it is in the middle of Tcl_ThreadAlert + * because it won't be able to release the notifier lock. + */ + + Tcl_MutexLock(&pipeMutex); + + /* BUG: this leaks memory */ + TerminateThread(pipePtr->readThread, 0); + + /* Wait for the thread to terminate. */ + WaitForSingleObject(pipePtr->readThread, INFINITE); + + Tcl_MutexUnlock(&pipeMutex); + } + } CloseHandle(pipePtr->readThread); CloseHandle(pipePtr->readable); CloseHandle(pipePtr->startReader); + CloseHandle(pipePtr->stopReader); pipePtr->readThread = NULL; } if (TclpCloseFile(pipePtr->readFile) != 0) { errorCode = errno; } @@ -2110,13 +2149,13 @@ if (infoPtr->writeBuf) { ckfree(infoPtr->writeBuf); } infoPtr->writeBufLen = toWrite; - infoPtr->writeBuf = ckalloc(toWrite); + infoPtr->writeBuf = ckalloc((unsigned int) toWrite); } - memcpy(infoPtr->writeBuf, buf, toWrite); + memcpy(infoPtr->writeBuf, buf, (size_t) toWrite); infoPtr->toWrite = toWrite; ResetEvent(infoPtr->writable); SetEvent(infoPtr->startWriter); bytesWritten = toWrite; } else { @@ -2355,11 +2394,11 @@ Tcl_Pid pid, int *statPtr, int options) { ProcInfo *infoPtr, **prevPtrPtr; - int flags; + DWORD flags; Tcl_Pid result; DWORD ret; PipeInit(); @@ -2657,11 +2696,13 @@ * None. * * Side effects: * Signals the main thread when input become available. May * cause the main thread to wake up by posting a message. May - * consume one byte from the pipe for each wait operation. + * consume one byte from the pipe for each wait operation. Will + * cause a memory leak of ~4k, if forcefully terminated with + * TerminateThread(). * *---------------------------------------------------------------------- */ static DWORD WINAPI @@ -2669,17 +2710,29 @@ { PipeInfo *infoPtr = (PipeInfo *)arg; HANDLE *handle = ((WinFile *) infoPtr->readFile)->handle; DWORD count, err; int done = 0; + HANDLE wEvents[2] = {infoPtr->stopReader, infoPtr->startReader}; + DWORD dwWait; while (!done) { /* - * Wait for the main thread to signal before attempting to wait. + * Wait for the main thread to signal before attempting to wait + * on the pipe becoming readable. */ - WaitForSingleObject(infoPtr->startReader, INFINITE); + dwWait = WaitForMultipleObjects(2, wEvents, FALSE, INFINITE); + + if (dwWait != (WAIT_OBJECT_0 + 1)) { + /* + * The start event was not signaled. It might be the stop event + * or an error, so exit. + */ + + return 0; + } /* * Try waiting for 0 bytes. This will block until some data is * available on NT, but will return immediately on Win 95. So, * if no data is available after the first read, we block until Index: win/tclWinPort.h ================================================================== --- win/tclWinPort.h +++ win/tclWinPort.h @@ -8,11 +8,11 @@ * Copyright (c) 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinPort.h,v 1.12 2000/03/31 08:52:31 hobbs Exp $ + * RCS: @(#) $Id: tclWinPort.h,v 1.12.2.1 2001/04/03 22:54:40 hobbs Exp $ */ #ifndef _TCLWINPORT #define _TCLWINPORT @@ -64,11 +64,11 @@ #include #endif #include #include -#include +#include #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN Index: win/tclWinReg.c ================================================================== --- win/tclWinReg.c +++ win/tclWinReg.c @@ -9,11 +9,11 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinReg.c,v 1.11 2000/03/31 08:52:32 hobbs Exp $ + * RCS: @(#) $Id: tclWinReg.c,v 1.11.2.1 2001/04/03 22:54:40 hobbs Exp $ */ #include #include @@ -365,11 +365,11 @@ /* * Find the parent of the key being deleted and open it. */ keyName = Tcl_GetStringFromObj(keyNameObj, &length); - buffer = ckalloc(length + 1); + buffer = ckalloc((unsigned int) length + 1); strcpy(buffer, keyName); if (ParseKeyName(interp, buffer, &hostName, &rootKey, &keyName) != TCL_OK) { ckfree(buffer); @@ -619,11 +619,11 @@ * Set the type into the result. Watch out for unknown types. * If we don't know about the type, just use the numeric value. */ if (type > lastType || type < 0) { - Tcl_SetIntObj(resultPtr, type); + Tcl_SetIntObj(resultPtr, (int) type); } else { Tcl_SetStringObj(resultPtr, typeNames[type], -1); } return TCL_OK; } @@ -678,11 +678,11 @@ * Longer values need a second call with an expanded DString. */ Tcl_DStringInit(&data); length = TCL_DSTRING_STATIC_SIZE - 1; - Tcl_DStringSetLength(&data, length); + Tcl_DStringSetLength(&data, (int) length); resultPtr = Tcl_GetObjResult(interp); valueName = Tcl_GetStringFromObj(valueNameObj, &nameLen); valueName = Tcl_WinUtfToTChar(valueName, nameLen, &buf); @@ -694,11 +694,11 @@ * The Windows docs say that in this error case, we just need * to expand our buffer and request more data. * Required for HKEY_PERFORMANCE_DATA */ length *= 2; - Tcl_DStringSetLength(&data, length); + Tcl_DStringSetLength(&data, (int) length); result = (*regWinProcs->regQueryValueExProc)(key, valueName, NULL, &type, (BYTE *) Tcl_DStringValue(&data), &length); } Tcl_DStringFree(&buf); RegCloseKey(key); @@ -717,11 +717,11 @@ * strings, append up the to first null. Otherwise, store it as a binary * string. */ if (type == REG_DWORD || type == REG_DWORD_BIG_ENDIAN) { - Tcl_SetIntObj(resultPtr, ConvertDWORD(type, + Tcl_SetIntObj(resultPtr, (int) ConvertDWORD(type, *((DWORD*) Tcl_DStringValue(&data)))); } else if (type == REG_MULTI_SZ) { char *p = Tcl_DStringValue(&data); char *end = Tcl_DStringValue(&data) + length; @@ -752,11 +752,11 @@ } else { /* * Save binary data as a byte array. */ - Tcl_SetByteArrayObj(resultPtr, Tcl_DStringValue(&data), length); + Tcl_SetByteArrayObj(resultPtr, Tcl_DStringValue(&data), (int) length); } Tcl_DStringFree(&data); return result; } @@ -820,11 +820,11 @@ maxSize++; Tcl_DStringInit(&buffer); Tcl_DStringSetLength(&buffer, - (regWinProcs->useWide) ? maxSize*2 : maxSize); + (int) ((regWinProcs->useWide) ? maxSize*2 : maxSize)); index = 0; result = TCL_OK; if (patternObj) { pattern = Tcl_GetString(patternObj); @@ -845,11 +845,11 @@ if (regWinProcs->useWide) { size *= 2; } - Tcl_WinTCharToUtf((TCHAR *) Tcl_DStringValue(&buffer), size, &ds); + Tcl_WinTCharToUtf((TCHAR *) Tcl_DStringValue(&buffer), (int) size, &ds); name = Tcl_DStringValue(&ds); if (!pattern || Tcl_StringMatch(name, pattern)) { result = Tcl_ListObjAppendElement(interp, resultPtr, Tcl_NewStringObj(name, Tcl_DStringLength(&ds))); if (result != TCL_OK) { @@ -899,11 +899,11 @@ int length; HKEY rootKey; DWORD result; keyName = Tcl_GetStringFromObj(keyNameObj, &length); - buffer = ckalloc(length + 1); + buffer = ckalloc((unsigned int) length + 1); strcpy(buffer, keyName); result = ParseKeyName(interp, buffer, &hostName, &rootKey, &keyName); if (result == TCL_OK) { result = OpenSubKey(hostName, rootKey, keyName, mode, flags, keyPtr); @@ -1133,11 +1133,11 @@ return result; } Tcl_DStringInit(&subkey); Tcl_DStringSetLength(&subkey, - (regWinProcs->useWide) ? maxSize * 2 : maxSize); + (int) ((regWinProcs->useWide) ? maxSize * 2 : maxSize)); while (result == ERROR_SUCCESS) { /* * Always get index 0 because key deletion changes ordering. */ @@ -1270,11 +1270,11 @@ Tcl_DStringSetLength(&buf, Tcl_DStringLength(&buf)+1); } length = Tcl_DStringLength(&buf) + 1; result = (*regWinProcs->regSetValueExProc)(key, valueName, 0, type, - (BYTE*)data, length); + (BYTE*)data, (DWORD) length); Tcl_DStringFree(&buf); } else { char *data; /* @@ -1281,11 +1281,11 @@ * Store binary data in the registry. */ data = Tcl_GetByteArrayFromObj(dataObj, &length); result = (*regWinProcs->regSetValueExProc)(key, valueName, 0, type, - (BYTE *)data, length); + (BYTE *)data, (DWORD) length); } Tcl_DStringFree(&nameBuf); RegCloseKey(key); if (result != ERROR_SUCCESS) { Tcl_AppendToObj(resultPtr, "unable to set value: ", -1); @@ -1344,11 +1344,11 @@ } if (length == 0) { if (error == ERROR_CALL_NOT_IMPLEMENTED) { msg = "function not supported under Win32s"; } else { - sprintf(msgBuf, "unknown error: %d", error); + sprintf(msgBuf, "unknown error: %ld", error); msg = msgBuf; } } else { Tcl_Encoding encoding; @@ -1369,11 +1369,11 @@ if (msg[length-1] == '\r') { msg[--length] = 0; } } - sprintf(id, "%d", error); + sprintf(id, "%ld", error); Tcl_SetErrorCode(interp, "WINDOWS", id, msg, (char *) NULL); Tcl_AppendToObj(resultPtr, msg, length); if (length != 0) { Tcl_DStringFree(&ds); Index: win/tclWinSerial.c ================================================================== --- win/tclWinSerial.c +++ win/tclWinSerial.c @@ -8,11 +8,11 @@ * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * Changes by Rolf.Schroedter@dlr.de June 25-27, 1999 * - * RCS: @(#) $Id: tclWinSerial.c,v 1.9 1999/11/24 20:55:17 hobbs Exp $ + * RCS: @(#) $Id: tclWinSerial.c,v 1.9.2.2 2001/04/03 22:54:40 hobbs Exp $ */ #include "tclWinInt.h" #include @@ -152,20 +152,24 @@ * This structure describes the channel type structure for command serial * based IO. */ static Tcl_ChannelType serialChannelType = { - "serial", /* Type name. */ - SerialBlockProc, /* Set blocking or non-blocking mode.*/ - SerialCloseProc, /* Close proc. */ - SerialInputProc, /* Input proc. */ - SerialOutputProc, /* Output proc. */ - NULL, /* Seek proc. */ - SerialSetOptionProc, /* Set option proc. */ - SerialGetOptionProc, /* Get option proc. */ - SerialWatchProc, /* Set up notifier to watch the channel. */ - SerialGetHandleProc, /* Get an OS handle from channel. */ + "serial", /* Type name. */ + TCL_CHANNEL_VERSION_2, /* v2 channel */ + SerialCloseProc, /* Close proc. */ + SerialInputProc, /* Input proc. */ + SerialOutputProc, /* Output proc. */ + NULL, /* Seek proc. */ + SerialSetOptionProc, /* Set option proc. */ + SerialGetOptionProc, /* Get option proc. */ + SerialWatchProc, /* Set up notifier to watch the channel. */ + SerialGetHandleProc, /* Get an OS handle from channel. */ + NULL, /* close2proc. */ + SerialBlockProc, /* Set blocking or non-blocking mode.*/ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* *---------------------------------------------------------------------- * @@ -1041,11 +1045,11 @@ char *optionName; /* Which option to set? */ char *value; /* New value for option. */ { SerialInfo *infoPtr; DCB dcb; - int len; + size_t len; BOOL result; Tcl_DString ds; TCHAR *native; infoPtr = (SerialInfo *) instanceData; @@ -1117,11 +1121,11 @@ char *optionName; /* Option to get. */ Tcl_DString *dsPtr; /* Where to store value(s). */ { SerialInfo *infoPtr; DCB dcb; - int len; + size_t len; int valid = 0; /* flag if valid option parsed */ infoPtr = (SerialInfo *) instanceData; if (optionName == NULL) { @@ -1151,11 +1155,11 @@ char parity; char *stop; char buf[2 * TCL_INTEGER_SPACE + 16]; parity = 'n'; - if (dcb.Parity < 4) { + if (dcb.Parity <= 4) { parity = "noems"[dcb.Parity]; } stop = (dcb.StopBits == ONESTOPBIT) ? "1" : (dcb.StopBits == ONE5STOPBITS) ? "1.5" : "2"; Index: win/tclWinSock.c ================================================================== --- win/tclWinSock.c +++ win/tclWinSock.c @@ -6,11 +6,11 @@ * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclWinSock.c,v 1.18 1999/12/09 14:44:11 hobbs Exp $ + * RCS: @(#) $Id: tclWinSock.c,v 1.18.2.2 2001/04/03 22:54:40 hobbs Exp $ */ #include "tclWinInt.h" /* @@ -213,20 +213,24 @@ * This structure describes the channel type structure for TCP socket * based IO. */ static Tcl_ChannelType tcpChannelType = { - "tcp", /* Type name. */ - TcpBlockProc, /* Set socket into blocking/non-blocking mode. */ - TcpCloseProc, /* Close proc. */ - TcpInputProc, /* Input proc. */ - TcpOutputProc, /* Output proc. */ - NULL, /* Seek proc. */ - NULL, /* Set option proc. */ - TcpGetOptionProc, /* Get option proc. */ - TcpWatchProc, /* Initialize notifier to watch this channel. */ - TcpGetHandleProc, /* Get an OS handle from channel. */ + "tcp", /* Type name. */ + TCL_CHANNEL_VERSION_2, /* v2 channel */ + TcpCloseProc, /* Close proc. */ + TcpInputProc, /* Input proc. */ + TcpOutputProc, /* Output proc. */ + NULL, /* Seek proc. */ + NULL, /* Set option proc. */ + TcpGetOptionProc, /* Get option proc. */ + TcpWatchProc, /* Set up notifier to watch this channel. */ + TcpGetHandleProc, /* Get an OS handle from channel. */ + NULL, /* close2proc. */ + TcpBlockProc, /* Set socket into (non-)blocking mode. */ + NULL, /* flush proc. */ + NULL, /* handler proc. */ }; /* * Define version of Winsock required by Tcl. */ @@ -830,13 +834,13 @@ timeout.tv_sec = 0; if ((*winSock.select)(0, &readFds, NULL, NULL, &timeout) != 0) { mask |= TCL_READABLE; } else { + infoPtr->readyEvents &= ~(FD_READ); SendMessage(tsdPtr->hwnd, SOCKET_SELECT, (WPARAM) SELECT, (LPARAM) infoPtr); - infoPtr->readyEvents &= ~(FD_READ); } } if (events & (FD_WRITE | FD_CONNECT)) { mask |= TCL_WRITABLE; } Index: win/tclsh.rc ================================================================== --- win/tclsh.rc +++ win/tclsh.rc @@ -1,35 +1,63 @@ -// RCS: @(#) $Id: tclsh.rc,v 1.5 2000/04/18 23:26:45 redman Exp $ +// RCS: @(#) $Id: tclsh.rc,v 1.5.2.1 2001/04/03 22:54:40 hobbs Exp $ // -// Version +// Version Resource Script // -#define VS_VERSION_INFO 1 +#include #define RESOURCE_INCLUDED #include + +// +// build-up the name suffix that defines the type of build this is. +// +#ifdef TCL_THREADS +#define SUFFIX_THREADS "t" +#else +#define SUFFIX_THREADS "" +#endif + +#ifdef STATIC_BUILD +#define SUFFIX_STATIC "s" +#else +#define SUFFIX_STATIC "" +#endif + +#ifdef DEBUG +#define SUFFIX_DEBUG "d" +#else +#define SUFFIX_DEBUG "" +#endif + +#define SUFFIX SUFFIX_THREADS SUFFIX_STATIC SUFFIX_DEBUG + LANGUAGE 0x9, 0x1 /* LANG_ENGLISH, SUBLANG_DEFAULT */ VS_VERSION_INFO VERSIONINFO FILEVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL PRODUCTVERSION TCL_MAJOR_VERSION,TCL_MINOR_VERSION,TCL_RELEASE_LEVEL,TCL_RELEASE_SERIAL FILEFLAGSMASK 0x3fL +#ifdef DEBUG + FILEFLAGS VS_FF_DEBUG +#else FILEFLAGS 0x0L - FILEOS 0x4 /* VOS__WINDOWS32 */ - FILETYPE 0x2 /* VFT_DLL */ +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "Tclsh Application\0" - VALUE "OriginalFilename", "tclsh" STRINGIFY(TCL_MAJOR_VERSION) STRINGIFY(TCL_MINOR_VERSION) ".exe\0" - VALUE "CompanyName", "Scriptics Corporation\0" + VALUE "OriginalFilename", "tclsh" STRINGIFY(TCL_MAJOR_VERSION) STRINGIFY(TCL_MINOR_VERSION) SUFFIX ".exe\0" + VALUE "CompanyName", "Ajuba Solutions\0" VALUE "FileVersion", TCL_PATCH_LEVEL - VALUE "LegalCopyright", "Copyright (c) 2000 by Scriptics Corporation\0" + VALUE "LegalCopyright", "Copyright (c) 2000 by Ajuba Solutions\0" VALUE "ProductName", "Tcl " TCL_VERSION " for Windows\0" VALUE "ProductVersion", TCL_PATCH_LEVEL END END BLOCK "VarFileInfo" @@ -41,6 +69,5 @@ // // Icon // tclsh ICON DISCARDABLE "tclsh.ico" -