lcms2-2.12rc1/0000755000175000017500000000000013775114676012117 5ustar martimartilcms2-2.12rc1/depcomp0000755000175000017500000005601613775114656013502 0ustar martimarti#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: lcms2-2.12rc1/autogen.sh0000755000175000017500000000465713775114656014132 0ustar martimarti#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. DIE=0 ACLOCAL_FLAGS="-I m4" (test -f $srcdir/configure.ac) || { echo -n "**Error**: Directory $srcdir does not look like the" echo " top-level package directory" exit 1 } (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have autoconf installed." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^LT_INIT" $srcdir/configure.ac >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have libtool installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have automake installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing aclocal. The version of automake" echo "installed doesn't appear recent enough." echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run configure with no arguments." echo "If you wish to pass any to it, please specify them on the" echo $0 " command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac aclocalinclude="$ACLOCAL_FLAGS" if grep "^LT_INIT" configure.ac >/dev/null; then if test -z "$NO_LIBTOOLIZE" ; then echo "Running libtoolize..." libtoolize --force --copy fi fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AC_CONFIG_HEADERS" configure.ac >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --add-missing -copy --gnu -Wno-portability $am_opt ..." automake --add-missing --copy --gnu -Wno-portability $am_opt echo "Running autoconf ..." autoconf conf_flags="--enable-maintainer-mode" if test x$NOCONFIGURE = x; then echo "Running $srcdir/configure $conf_flags $@ ..." $srcdir/configure $conf_flags "$@" \ && echo "Now type make to compile." || exit 1 else echo "Skipping configure process." fi lcms2-2.12rc1/Projects/0000755000175000017500000000000013775114656013706 5ustar martimartilcms2-2.12rc1/Projects/cppcheck/0000755000175000017500000000000013775114656015466 5ustar martimartilcms2-2.12rc1/Projects/cppcheck/lcms2.cppcheck0000755000175000017500000000032213775114656020210 0ustar martimarti lcms2-2.12rc1/Projects/.gitignore0000644000175000017500000000015313775114656015675 0ustar martimarti# Visual Studio **.opensdf **.sdf **.suo **.user Debug/ Release/ # Xcode & macOS xcuserdata/ .DS_Store ._* lcms2-2.12rc1/Projects/VC2017/0000755000175000017500000000000013775114656014530 5ustar martimartilcms2-2.12rc1/Projects/VC2017/tifficc/0000755000175000017500000000000013775114656016137 5ustar martimartilcms2-2.12rc1/Projects/VC2017/tifficc/tifficc.vcxproj.filters0000644000175000017500000000242213775114656022632 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Header Files lcms2-2.12rc1/Projects/VC2017/tifficc/tifficc.vcxproj0000644000175000017500000003045313775114656021170 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2} tifficc Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(IncludePath);C:\tiff-4.0.2\libtiff $(IncludePath);C:\tiff-4.0.2\libtiff $(LibraryPath);C:\tiff-4.0.2\libtiff $(LibraryPath);C:\tiff-4.0.2\libtiff $(IncludePath);C:\tiff-4.0.2\libtiff $(IncludePath);C:\tiff-4.0.2\libtiff $(LibraryPath);C:\tiff-4.0.2\libtiff $(LibraryPath);C:\tiff-4.0.2\libtiff Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue true libtiff.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console false MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true libtiff.lib;%(AdditionalDependencies) true Console true true MachineX86 false true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/lcms2.sln0000644000175000017500000003554413775114656016301 0ustar martimarti Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testbed", "testbed\testbed.vcxproj", "{928A3A2B-46EF-4279-959C-513B3652FF0E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tifficc", "tifficc\tifficc.vcxproj", "{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_DLL", "lcms2_DLL\lcms2_DLL.vcxproj", "{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "linkicc", "linkicc\linkicc.vcxproj", "{FBFBE1DC-DB84-4BA1-9552-B4780F457849}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transicc", "transicc\transicc.vcxproj", "{9EE22D66-C849-474C-9ED5-C3E141DAB160}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpegicc", "jpegicc\jpegicc.vcxproj", "{62812507-F926-4968-96A9-17678460AD90}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiffdiff", "tiffdiff\tiffdiff.vcxproj", "{75B91835-CCD7-48BE-A606-A9C997D5DBEE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_static", "lcms2_static\lcms2_static.vcxproj", "{71DEDE59-3F1E-486B-A899-4283000F76B5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psicc", "psicc\psicc.vcxproj", "{EF6A8851-65FE-46F5-B9EF-14F0B671F693}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|Win32.ActiveCfg = Debug|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|Win32.Build.0 = Debug|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|x64.ActiveCfg = Debug|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|x64.Build.0 = Debug|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|Win32.ActiveCfg = Release|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|Win32.Build.0 = Release|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|x64.ActiveCfg = Release|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|x64.Build.0 = Release|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|Win32.ActiveCfg = Debug|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|Win32.Build.0 = Debug|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|x64.ActiveCfg = Debug|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|x64.Build.0 = Debug|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|Win32.ActiveCfg = Release|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|Win32.Build.0 = Release|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|x64.ActiveCfg = Release|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|x64.Build.0 = Release|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|Win32.ActiveCfg = Debug|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|Win32.Build.0 = Debug|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|x64.ActiveCfg = Debug|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|x64.Build.0 = Debug|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|Win32.ActiveCfg = Release|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|Win32.Build.0 = Release|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|x64.ActiveCfg = Release|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|x64.Build.0 = Release|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|Win32.ActiveCfg = Debug|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|Win32.Build.0 = Debug|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|x64.ActiveCfg = Debug|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|x64.Build.0 = Debug|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|Win32.ActiveCfg = Release|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|Win32.Build.0 = Release|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|x64.ActiveCfg = Release|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|x64.Build.0 = Release|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|Win32.ActiveCfg = Debug|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|Win32.Build.0 = Debug|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|x64.ActiveCfg = Debug|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|x64.Build.0 = Debug|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|Win32.ActiveCfg = Release|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|Win32.Build.0 = Release|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|x64.ActiveCfg = Release|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|x64.Build.0 = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Debug|Win32.ActiveCfg = Debug|Win32 {62812507-F926-4968-96A9-17678460AD90}.Debug|Win32.Build.0 = Debug|Win32 {62812507-F926-4968-96A9-17678460AD90}.Debug|x64.ActiveCfg = Debug|x64 {62812507-F926-4968-96A9-17678460AD90}.Debug|x64.Build.0 = Debug|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|Win32.ActiveCfg = Release|Win32 {62812507-F926-4968-96A9-17678460AD90}.Release|Win32.Build.0 = Release|Win32 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.ActiveCfg = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.Build.0 = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.Deploy.0 = Release|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|Win32.Build.0 = Debug|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|x64.ActiveCfg = Debug|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|x64.Build.0 = Debug|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|Win32.ActiveCfg = Release|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|Win32.Build.0 = Release|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|x64.ActiveCfg = Release|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|x64.Build.0 = Release|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|Win32.ActiveCfg = Debug|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|Win32.Build.0 = Debug|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|x64.ActiveCfg = Debug|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|x64.Build.0 = Debug|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|Win32.ActiveCfg = Release|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|Win32.Build.0 = Release|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|x64.ActiveCfg = Release|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|x64.Build.0 = Release|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|Win32.ActiveCfg = Debug|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|Win32.Build.0 = Debug|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|x64.ActiveCfg = Debug|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|x64.Build.0 = Debug|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|Win32.ActiveCfg = Release|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|Win32.Build.0 = Release|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|x64.ActiveCfg = Release|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution QtVersion = $(DefaultQtVersion) EndGlobalSection EndGlobal lcms2-2.12rc1/Projects/VC2017/lcms2_DLL/0000755000175000017500000000000013775114656016243 5ustar martimartilcms2-2.12rc1/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj0000644000175000017500000003252113775114656021376 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548} lcms2_DLL Win32Proj 10.0.17134.0 DynamicLibrary Unicode true v141 DynamicLibrary Unicode true v141 DynamicLibrary Unicode v141 DynamicLibrary Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset lcms2 lcms2 lcms2 lcms2 Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 true false ..\..\..\src\lcms2.def true Windows MachineX86 Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 true false true Windows $(OutDir)$(TargetName)$(TargetExt) Full true Speed true true true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true Level4 true OnlyExplicitInline true ..\..\..\src\lcms2.def true Windows true true MachineX86 true Full true Speed true true true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true Level4 true OnlyExplicitInline true true Windows true true true lcms2-2.12rc1/Projects/VC2017/lcms2_DLL/lcms2_DLL.vcxproj.filters0000644000175000017500000001015113775114656023040 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Source Files Resource Files Resource Files Source Files lcms2-2.12rc1/Projects/VC2017/lcms2_static/0000755000175000017500000000000013775114656017117 5ustar martimartilcms2-2.12rc1/Projects/VC2017/lcms2_static/lcms2_static.vcxproj0000644000175000017500000002655513775114656023140 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {71DEDE59-3F1E-486B-A899-4283000F76B5} lcms2_static Win32Proj 10.0.17134.0 StaticLibrary Unicode true v141 StaticLibrary Unicode true v141 StaticLibrary Unicode v141 StaticLibrary Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\Lib\MS\ ..\..\..\Lib\MS\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ ..\..\..\Lib\MS\ ..\..\..\Lib\MS\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks Level4 EditAndContinue true MultiThreadedDebugDLL Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true Default MaxSpeed true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase Speed true false OnlyExplicitInline false true Precise false false true true MaxSpeed true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase Speed true true OnlyExplicitInline false true true true lcms2-2.12rc1/Projects/VC2017/lcms2_static/lcms2_static.vcxproj.filters0000644000175000017500000000737513775114656024606 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Source Files lcms2-2.12rc1/Projects/VC2017/lcms2.rc0000644000175000017500000000452613775114656016105 0ustar martimarti// Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Spanish (Spain, International Sort) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN #pragma code_page(1252) ///////////////////////////////////////////////////////////////////////////// // // Version // 1 VERSIONINFO FILEVERSION 2,12,0,0 PRODUCTVERSION 2,12,0,0 FILEFLAGSMASK 0x0L #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "Marti Maria" VALUE "FileDescription", "lcms color engine" VALUE "FileVersion", "2.12.0.0" VALUE "InternalName", "lcms" VALUE "LegalCopyright", "Copyright � Marti Maria 2021" VALUE "OriginalFilename", "lcms2.dll" VALUE "ProductName", "LittleCMS color engine" VALUE "ProductVersion", "2.12.0.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Spanish (Spain, International Sort) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lcms2-2.12rc1/Projects/VC2017/transicc/0000755000175000017500000000000013775114656016336 5ustar martimartilcms2-2.12rc1/Projects/VC2017/transicc/transicc.vcxproj0000644000175000017500000002543113775114656021566 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160} transicc Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/transicc/transicc.vcxproj.filters0000644000175000017500000000242613775114656023234 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Header Files lcms2-2.12rc1/Projects/VC2017/testbed/0000755000175000017500000000000013775114656016162 5ustar martimartilcms2-2.12rc1/Projects/VC2017/testbed/testbed.vcxproj.filters0000644000175000017500000000220113775114656022673 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2017/testbed/testbed.vcxproj0000644000175000017500000002652613775114656021244 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {928A3A2B-46EF-4279-959C-513B3652FF0E} testbed Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\testbed\ ..\..\..\testbed\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\testbed\ ..\..\..\testbed\ Disabled ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue true true Console MachineX86 false Disabled ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level3 ProgramDatabase true true Console false Full true Speed true false ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL false true NotSet Level3 ProgramDatabase Cdecl true true true Console true true MachineX86 false true Full true Speed true true ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded false true NotSet Level3 ProgramDatabase Cdecl true true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/linkicc/0000755000175000017500000000000013775114656016144 5ustar martimartilcms2-2.12rc1/Projects/VC2017/linkicc/linkicc.vcxproj.filters0000644000175000017500000000221213775114656022641 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2017/linkicc/linkicc.vcxproj0000644000175000017500000002507613775114656021207 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849} linkicc Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true Console true true {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/resource.h0000644000175000017500000000065613775114656016537 0ustar martimarti//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by lcms2.rc // // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lcms2-2.12rc1/Projects/VC2017/jpegicc/0000755000175000017500000000000013775114656016134 5ustar martimartilcms2-2.12rc1/Projects/VC2017/jpegicc/jpegicc.vcxproj.filters0000644000175000017500000000236713775114656022634 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2017/jpegicc/jpegicc.vcxproj0000644000175000017500000003100613775114656021155 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {62812507-F926-4968-96A9-17678460AD90} jpegicc Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)\ $(Configuration)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)\ $(Configuration)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(IncludePath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true libjpeg.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true libjpeg.lib;%(AdditionalDependencies) true Console false Full true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase Speed true true true true libjpeg.lib;%(AdditionalDependencies) true Console true true MachineX86 false true Full true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase Speed true true true libjpeg.lib;%(AdditionalDependencies) true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/psicc/0000755000175000017500000000000013775114656015631 5ustar martimartilcms2-2.12rc1/Projects/VC2017/psicc/psicc.vcxproj.filters0000644000175000017500000000220613775114656022016 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2017/psicc/psicc.vcxproj0000644000175000017500000002507213775114656020355 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693} psicc Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true Console true true {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/tiffdiff/0000755000175000017500000000000013775114656016311 5ustar martimartilcms2-2.12rc1/Projects/VC2017/tiffdiff/tiffdiff.vcxproj0000644000175000017500000003065713775114656021522 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE} tiffdiff Win32Proj 10.0.17134.0 Application Unicode true v141 Application Unicode true v141 Application Unicode v141 Application Unicode v141 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true libtiff.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console false MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true libtiff.lib;%(AdditionalDependencies) true Console true true MachineX86 $(OutDir)$(TargetName)$(TargetExt) false true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console true true $(OutDir)$(TargetName)$(TargetExt) false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2017/tiffdiff/tiffdiff.vcxproj.filters0000644000175000017500000000221113775114656023152 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/Xcode_12/0000755000175000017500000000000013775114656015252 5ustar martimartilcms2-2.12rc1/Projects/Xcode_12/lcms2/0000755000175000017500000000000013775114656016272 5ustar martimartilcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/0000755000175000017500000000000013775114656021306 5ustar martimartilcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/0000755000175000017500000000000013775114656025304 5ustar martimartilcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/contents.xcworkspacedata0000644000175000017500000000022613775114656032246 0ustar martimarti lcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/xcshareddata/0000755000175000017500000000000013775114656027737 5ustar martimarti././@LongLink0000644000000000000000000000016000000000000011600 Lustar rootrootlcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plistlcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceC0000644000175000017500000000035613775114656032251 0ustar martimarti IDEDidComputeMac32BitWarning ././@LongLink0000644000000000000000000000016400000000000011604 Lustar rootrootlcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettingslcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSett0000644000175000017500000000034213775114656032457 0ustar martimarti PreviewsEnabled lcms2-2.12rc1/Projects/Xcode_12/lcms2/lcms2.xcodeproj/project.pbxproj0000644000175000017500000020227213775114656024367 0ustar martimarti// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 4123B46925518DB1005F0287 /* linkicc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4123B46825518DB1005F0287 /* linkicc.c */; }; 4123B4A425518FFB005F0287 /* xgetopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 4123B4A325518FFB005F0287 /* xgetopt.c */; }; 4123B4B82551903B005F0287 /* tificc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4123B4B72551903B005F0287 /* tificc.c */; }; 4123B5042551A1C8005F0287 /* libfast_float_plugin.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A8F24C5E35200DF2C21 /* libfast_float_plugin.a */; }; 418B0A5224C5E1C900DF2C21 /* cmsgamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3824C5E1C700DF2C21 /* cmsgamma.c */; }; 418B0A5324C5E1C900DF2C21 /* cmsintrp.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3924C5E1C700DF2C21 /* cmsintrp.c */; }; 418B0A5424C5E1C900DF2C21 /* cmsgmt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3A24C5E1C700DF2C21 /* cmsgmt.c */; }; 418B0A5524C5E1C900DF2C21 /* cmscnvrt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3B24C5E1C700DF2C21 /* cmscnvrt.c */; }; 418B0A5624C5E1C900DF2C21 /* cmsmd5.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3C24C5E1C700DF2C21 /* cmsmd5.c */; }; 418B0A5724C5E1C900DF2C21 /* cmssm.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3D24C5E1C700DF2C21 /* cmssm.c */; }; 418B0A5824C5E1C900DF2C21 /* cmsopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3E24C5E1C700DF2C21 /* cmsopt.c */; }; 418B0A5924C5E1C900DF2C21 /* cmscgats.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A3F24C5E1C700DF2C21 /* cmscgats.c */; }; 418B0A5A24C5E1C900DF2C21 /* cmsalpha.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4024C5E1C800DF2C21 /* cmsalpha.c */; }; 418B0A5B24C5E1C900DF2C21 /* cmstypes.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4124C5E1C800DF2C21 /* cmstypes.c */; }; 418B0A5C24C5E1C900DF2C21 /* cmsio1.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4224C5E1C800DF2C21 /* cmsio1.c */; }; 418B0A5D24C5E1C900DF2C21 /* cmspack.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4324C5E1C800DF2C21 /* cmspack.c */; }; 418B0A5E24C5E1C900DF2C21 /* cmsxform.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4424C5E1C800DF2C21 /* cmsxform.c */; }; 418B0A5F24C5E1C900DF2C21 /* cmswtpnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4524C5E1C800DF2C21 /* cmswtpnt.c */; }; 418B0A6024C5E1C900DF2C21 /* cmsmtrx.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4624C5E1C800DF2C21 /* cmsmtrx.c */; }; 418B0A6124C5E1C900DF2C21 /* cmspcs.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4724C5E1C800DF2C21 /* cmspcs.c */; }; 418B0A6224C5E1C900DF2C21 /* cmsps2.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4824C5E1C800DF2C21 /* cmsps2.c */; }; 418B0A6324C5E1C900DF2C21 /* cmsnamed.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4924C5E1C800DF2C21 /* cmsnamed.c */; }; 418B0A6424C5E1C900DF2C21 /* cmserr.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4A24C5E1C800DF2C21 /* cmserr.c */; }; 418B0A6524C5E1C900DF2C21 /* cmslut.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4B24C5E1C800DF2C21 /* cmslut.c */; }; 418B0A6624C5E1C900DF2C21 /* cmsvirt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4C24C5E1C800DF2C21 /* cmsvirt.c */; }; 418B0A6724C5E1C900DF2C21 /* cmsplugin.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4D24C5E1C800DF2C21 /* cmsplugin.c */; }; 418B0A6824C5E1C900DF2C21 /* cmshalf.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4E24C5E1C800DF2C21 /* cmshalf.c */; }; 418B0A6924C5E1C900DF2C21 /* cmsio0.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A4F24C5E1C900DF2C21 /* cmsio0.c */; }; 418B0A6A24C5E1C900DF2C21 /* cmscam02.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A5024C5E1C900DF2C21 /* cmscam02.c */; }; 418B0A6B24C5E1C900DF2C21 /* cmssamp.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A5124C5E1C900DF2C21 /* cmssamp.c */; }; 418B0A6F24C5E1E800DF2C21 /* lcms2.h in Headers */ = {isa = PBXBuildFile; fileRef = 418B0A6D24C5E1E800DF2C21 /* lcms2.h */; settings = {ATTRIBUTES = (Public, ); }; }; 418B0A7024C5E1E800DF2C21 /* lcms2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 418B0A6E24C5E1E800DF2C21 /* lcms2_plugin.h */; settings = {ATTRIBUTES = (Public, ); }; }; 418B0A7224C5E1F400DF2C21 /* lcms2_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 418B0A7124C5E1F400DF2C21 /* lcms2_internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; 418B0A8A24C5E30000DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0AA124C5E37800DF2C21 /* fast_float_curves.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9324C5E37600DF2C21 /* fast_float_curves.c */; }; 418B0AA224C5E37800DF2C21 /* fast_float_15mats.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9424C5E37600DF2C21 /* fast_float_15mats.c */; }; 418B0AA324C5E37800DF2C21 /* fast_float_tethra.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9524C5E37600DF2C21 /* fast_float_tethra.c */; }; 418B0AA424C5E37800DF2C21 /* fast_float_cmyk.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9624C5E37700DF2C21 /* fast_float_cmyk.c */; }; 418B0AA524C5E37800DF2C21 /* fast_16_tethra.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9724C5E37700DF2C21 /* fast_16_tethra.c */; }; 418B0AA624C5E37800DF2C21 /* fast_float_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 418B0A9824C5E37700DF2C21 /* fast_float_internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; 418B0AA724C5E37800DF2C21 /* fast_8_matsh.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9924C5E37700DF2C21 /* fast_8_matsh.c */; }; 418B0AA824C5E37800DF2C21 /* fast_float_separate.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9A24C5E37700DF2C21 /* fast_float_separate.c */; }; 418B0AA924C5E37800DF2C21 /* fast_8_matsh_sse.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9B24C5E37700DF2C21 /* fast_8_matsh_sse.c */; }; 418B0AAA24C5E37800DF2C21 /* fast_8_tethra.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9C24C5E37700DF2C21 /* fast_8_tethra.c */; }; 418B0AAB24C5E37800DF2C21 /* fast_float_sup.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9D24C5E37700DF2C21 /* fast_float_sup.c */; }; 418B0AAC24C5E37800DF2C21 /* fast_float_15bits.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9E24C5E37700DF2C21 /* fast_float_15bits.c */; }; 418B0AAD24C5E37800DF2C21 /* fast_8_curves.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0A9F24C5E37700DF2C21 /* fast_8_curves.c */; }; 418B0AAE24C5E37800DF2C21 /* fast_float_matsh.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AA024C5E37800DF2C21 /* fast_float_matsh.c */; }; 418B0AB024C5E38C00DF2C21 /* lcms2_fast_float.h in Headers */ = {isa = PBXBuildFile; fileRef = 418B0AAF24C5E38C00DF2C21 /* lcms2_fast_float.h */; settings = {ATTRIBUTES = (Public, ); }; }; 418B0AC224C5E47C00DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0ADA24C5E58A00DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0AEA24C5E5CF00DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0AF224C5E6B000DF2C21 /* fast_float_testbed.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AF124C5E6B000DF2C21 /* fast_float_testbed.c */; }; 418B0AF624C5E6C800DF2C21 /* xgetopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AF324C5E6C700DF2C21 /* xgetopt.c */; }; 418B0AF724C5E6C800DF2C21 /* vprf.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AF424C5E6C700DF2C21 /* vprf.c */; }; 418B0AF924C5E6D200DF2C21 /* transicc.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AF824C5E6D200DF2C21 /* transicc.c */; }; 418B0AFF24C5E73100DF2C21 /* xgetopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AFD24C5E73100DF2C21 /* xgetopt.c */; }; 418B0B0024C5E73100DF2C21 /* vprf.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0AFE24C5E73100DF2C21 /* vprf.c */; }; 418B0B0F24C5E79200DF2C21 /* utils.h in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B0E24C5E79200DF2C21 /* utils.h */; }; 418B0B1424C5E7BB00DF2C21 /* vprf.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B1224C5E7BB00DF2C21 /* vprf.c */; }; 418B0B1524C5E7CF00DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0B2124C5E8FA00DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0B2524C5E92100DF2C21 /* tifdiff.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B2424C5E92100DF2C21 /* tifdiff.c */; }; 418B0B2924C5E92B00DF2C21 /* vprf.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B2724C5E92B00DF2C21 /* vprf.c */; }; 418B0B2A24C5E92B00DF2C21 /* xgetopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B2824C5E92B00DF2C21 /* xgetopt.c */; }; 418B0B3824C5E98E00DF2C21 /* iccjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B3624C5E98E00DF2C21 /* iccjpeg.c */; }; 418B0B3A24C5E99600DF2C21 /* jpgicc.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B3924C5E99600DF2C21 /* jpgicc.c */; }; 418B0B3D24C5E9A200DF2C21 /* liblcms2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; }; 418B0B4124C5E9F700DF2C21 /* vprf.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B3E24C5E9F700DF2C21 /* vprf.c */; }; 418B0B4224C5E9F700DF2C21 /* xgetopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B3F24C5E9F700DF2C21 /* xgetopt.c */; }; 418B0B4624C5EC1D00DF2C21 /* testcms2.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B4324C5EC1D00DF2C21 /* testcms2.c */; }; 418B0B4724C5EC1D00DF2C21 /* testplugin.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B4524C5EC1D00DF2C21 /* testplugin.c */; }; 418B0B4924C5EC2A00DF2C21 /* zoo_icc.c in Sources */ = {isa = PBXBuildFile; fileRef = 418B0B4824C5EC2A00DF2C21 /* zoo_icc.c */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 418B0A8524C5E29800DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0AB224C5E3D400DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0AC324C5E48100DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A8E24C5E35200DF2C21; remoteInfo = fast_float_plugin; }; 418B0AC524C5E48600DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0ADB24C5E58F00DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0AE824C5E5CA00DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0B0C24C5E77500DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0B2224C5E8FA00DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; 418B0B3B24C5E99E00DF2C21 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 418B0A2924C5E19500DF2C21 /* Project object */; proxyType = 1; remoteGlobalIDString = 418B0A3024C5E19500DF2C21; remoteInfo = lcms2; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ 418B0A7624C5E25200DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 418B0AB624C5E42900DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 418B0AC924C5E4EA00DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 418B0ADF24C5E5C300DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 418B0B0324C5E76100DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 418B0B1824C5E85600DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; 418B0B2D24C5E95D00DF2C21 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 4123B46825518DB1005F0287 /* linkicc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = linkicc.c; sourceTree = ""; }; 4123B4A325518FFB005F0287 /* xgetopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xgetopt.c; path = ../common/xgetopt.c; sourceTree = ""; }; 4123B4B72551903B005F0287 /* tificc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tificc.c; sourceTree = ""; }; 4123B4C2255190FE005F0287 /* tifdiff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tifdiff.c; sourceTree = ""; }; 418B0A3124C5E19500DF2C21 /* liblcms2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liblcms2.a; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0A3824C5E1C700DF2C21 /* cmsgamma.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsgamma.c; path = ../../../src/cmsgamma.c; sourceTree = ""; }; 418B0A3924C5E1C700DF2C21 /* cmsintrp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsintrp.c; path = ../../../src/cmsintrp.c; sourceTree = ""; }; 418B0A3A24C5E1C700DF2C21 /* cmsgmt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsgmt.c; path = ../../../src/cmsgmt.c; sourceTree = ""; }; 418B0A3B24C5E1C700DF2C21 /* cmscnvrt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmscnvrt.c; path = ../../../src/cmscnvrt.c; sourceTree = ""; }; 418B0A3C24C5E1C700DF2C21 /* cmsmd5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsmd5.c; path = ../../../src/cmsmd5.c; sourceTree = ""; }; 418B0A3D24C5E1C700DF2C21 /* cmssm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmssm.c; path = ../../../src/cmssm.c; sourceTree = ""; }; 418B0A3E24C5E1C700DF2C21 /* cmsopt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsopt.c; path = ../../../src/cmsopt.c; sourceTree = ""; }; 418B0A3F24C5E1C700DF2C21 /* cmscgats.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmscgats.c; path = ../../../src/cmscgats.c; sourceTree = ""; }; 418B0A4024C5E1C800DF2C21 /* cmsalpha.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsalpha.c; path = ../../../src/cmsalpha.c; sourceTree = ""; }; 418B0A4124C5E1C800DF2C21 /* cmstypes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmstypes.c; path = ../../../src/cmstypes.c; sourceTree = ""; }; 418B0A4224C5E1C800DF2C21 /* cmsio1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsio1.c; path = ../../../src/cmsio1.c; sourceTree = ""; }; 418B0A4324C5E1C800DF2C21 /* cmspack.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmspack.c; path = ../../../src/cmspack.c; sourceTree = ""; }; 418B0A4424C5E1C800DF2C21 /* cmsxform.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsxform.c; path = ../../../src/cmsxform.c; sourceTree = ""; }; 418B0A4524C5E1C800DF2C21 /* cmswtpnt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmswtpnt.c; path = ../../../src/cmswtpnt.c; sourceTree = ""; }; 418B0A4624C5E1C800DF2C21 /* cmsmtrx.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsmtrx.c; path = ../../../src/cmsmtrx.c; sourceTree = ""; }; 418B0A4724C5E1C800DF2C21 /* cmspcs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmspcs.c; path = ../../../src/cmspcs.c; sourceTree = ""; }; 418B0A4824C5E1C800DF2C21 /* cmsps2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsps2.c; path = ../../../src/cmsps2.c; sourceTree = ""; }; 418B0A4924C5E1C800DF2C21 /* cmsnamed.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsnamed.c; path = ../../../src/cmsnamed.c; sourceTree = ""; }; 418B0A4A24C5E1C800DF2C21 /* cmserr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmserr.c; path = ../../../src/cmserr.c; sourceTree = ""; }; 418B0A4B24C5E1C800DF2C21 /* cmslut.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmslut.c; path = ../../../src/cmslut.c; sourceTree = ""; }; 418B0A4C24C5E1C800DF2C21 /* cmsvirt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsvirt.c; path = ../../../src/cmsvirt.c; sourceTree = ""; }; 418B0A4D24C5E1C800DF2C21 /* cmsplugin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsplugin.c; path = ../../../src/cmsplugin.c; sourceTree = ""; }; 418B0A4E24C5E1C800DF2C21 /* cmshalf.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmshalf.c; path = ../../../src/cmshalf.c; sourceTree = ""; }; 418B0A4F24C5E1C900DF2C21 /* cmsio0.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmsio0.c; path = ../../../src/cmsio0.c; sourceTree = ""; }; 418B0A5024C5E1C900DF2C21 /* cmscam02.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmscam02.c; path = ../../../src/cmscam02.c; sourceTree = ""; }; 418B0A5124C5E1C900DF2C21 /* cmssamp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cmssamp.c; path = ../../../src/cmssamp.c; sourceTree = ""; }; 418B0A6D24C5E1E800DF2C21 /* lcms2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lcms2.h; path = ../../../include/lcms2.h; sourceTree = ""; }; 418B0A6E24C5E1E800DF2C21 /* lcms2_plugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lcms2_plugin.h; path = ../../../include/lcms2_plugin.h; sourceTree = ""; }; 418B0A7124C5E1F400DF2C21 /* lcms2_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lcms2_internal.h; path = ../../../src/lcms2_internal.h; sourceTree = ""; }; 418B0A7824C5E25200DF2C21 /* testbed */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testbed; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0A8F24C5E35200DF2C21 /* libfast_float_plugin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libfast_float_plugin.a; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0A9324C5E37600DF2C21 /* fast_float_curves.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_curves.c; path = ../../../plugins/fast_float/src/fast_float_curves.c; sourceTree = ""; }; 418B0A9424C5E37600DF2C21 /* fast_float_15mats.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_15mats.c; path = ../../../plugins/fast_float/src/fast_float_15mats.c; sourceTree = ""; }; 418B0A9524C5E37600DF2C21 /* fast_float_tethra.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_tethra.c; path = ../../../plugins/fast_float/src/fast_float_tethra.c; sourceTree = ""; }; 418B0A9624C5E37700DF2C21 /* fast_float_cmyk.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_cmyk.c; path = ../../../plugins/fast_float/src/fast_float_cmyk.c; sourceTree = ""; }; 418B0A9724C5E37700DF2C21 /* fast_16_tethra.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_16_tethra.c; path = ../../../plugins/fast_float/src/fast_16_tethra.c; sourceTree = ""; }; 418B0A9824C5E37700DF2C21 /* fast_float_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fast_float_internal.h; path = ../../../plugins/fast_float/src/fast_float_internal.h; sourceTree = ""; }; 418B0A9924C5E37700DF2C21 /* fast_8_matsh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_8_matsh.c; path = ../../../plugins/fast_float/src/fast_8_matsh.c; sourceTree = ""; }; 418B0A9A24C5E37700DF2C21 /* fast_float_separate.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_separate.c; path = ../../../plugins/fast_float/src/fast_float_separate.c; sourceTree = ""; }; 418B0A9B24C5E37700DF2C21 /* fast_8_matsh_sse.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_8_matsh_sse.c; path = ../../../plugins/fast_float/src/fast_8_matsh_sse.c; sourceTree = ""; }; 418B0A9C24C5E37700DF2C21 /* fast_8_tethra.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_8_tethra.c; path = ../../../plugins/fast_float/src/fast_8_tethra.c; sourceTree = ""; }; 418B0A9D24C5E37700DF2C21 /* fast_float_sup.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_sup.c; path = ../../../plugins/fast_float/src/fast_float_sup.c; sourceTree = ""; }; 418B0A9E24C5E37700DF2C21 /* fast_float_15bits.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_15bits.c; path = ../../../plugins/fast_float/src/fast_float_15bits.c; sourceTree = ""; }; 418B0A9F24C5E37700DF2C21 /* fast_8_curves.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_8_curves.c; path = ../../../plugins/fast_float/src/fast_8_curves.c; sourceTree = ""; }; 418B0AA024C5E37800DF2C21 /* fast_float_matsh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fast_float_matsh.c; path = ../../../plugins/fast_float/src/fast_float_matsh.c; sourceTree = ""; }; 418B0AAF24C5E38C00DF2C21 /* lcms2_fast_float.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lcms2_fast_float.h; path = ../../../plugins/fast_float/include/lcms2_fast_float.h; sourceTree = ""; }; 418B0AB824C5E42900DF2C21 /* testbed */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; name = testbed; path = fast_float_testbed; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0ACB24C5E4EA00DF2C21 /* transicc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = transicc; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0AE124C5E5C300DF2C21 /* linkicc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = linkicc; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0AF124C5E6B000DF2C21 /* fast_float_testbed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fast_float_testbed.c; path = ../../../plugins/fast_float/testbed/fast_float_testbed.c; sourceTree = SOURCE_ROOT; }; 418B0AF324C5E6C700DF2C21 /* xgetopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xgetopt.c; path = ../../../utils/common/xgetopt.c; sourceTree = SOURCE_ROOT; }; 418B0AF424C5E6C700DF2C21 /* vprf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vprf.c; path = ../../../utils/common/vprf.c; sourceTree = SOURCE_ROOT; }; 418B0AF524C5E6C800DF2C21 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../../utils/common/utils.h; sourceTree = SOURCE_ROOT; }; 418B0AF824C5E6D200DF2C21 /* transicc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = transicc.c; path = ../../../utils/transicc/transicc.c; sourceTree = SOURCE_ROOT; }; 418B0AFC24C5E73100DF2C21 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../../utils/common/utils.h; sourceTree = SOURCE_ROOT; }; 418B0AFD24C5E73100DF2C21 /* xgetopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xgetopt.c; path = ../../../utils/common/xgetopt.c; sourceTree = SOURCE_ROOT; }; 418B0AFE24C5E73100DF2C21 /* vprf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vprf.c; path = ../../../utils/common/vprf.c; sourceTree = SOURCE_ROOT; }; 418B0B0524C5E76100DF2C21 /* tificc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tificc; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0B0E24C5E79200DF2C21 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../../utils/common/utils.h; sourceTree = SOURCE_ROOT; }; 418B0B1224C5E7BB00DF2C21 /* vprf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vprf.c; path = ../../../utils/common/vprf.c; sourceTree = SOURCE_ROOT; }; 418B0B1A24C5E85600DF2C21 /* tifdiff */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tifdiff; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0B2424C5E92100DF2C21 /* tifdiff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tifdiff.c; path = ../../../utils/tificc/tifdiff.c; sourceTree = SOURCE_ROOT; }; 418B0B2724C5E92B00DF2C21 /* vprf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vprf.c; path = ../common/vprf.c; sourceTree = ""; }; 418B0B2824C5E92B00DF2C21 /* xgetopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xgetopt.c; path = ../common/xgetopt.c; sourceTree = ""; }; 418B0B2F24C5E95D00DF2C21 /* jpegicc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jpegicc; sourceTree = BUILT_PRODUCTS_DIR; }; 418B0B3624C5E98E00DF2C21 /* iccjpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = iccjpeg.c; path = ../../../utils/jpgicc/iccjpeg.c; sourceTree = SOURCE_ROOT; }; 418B0B3724C5E98E00DF2C21 /* iccjpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iccjpeg.h; path = ../../../utils/jpgicc/iccjpeg.h; sourceTree = SOURCE_ROOT; }; 418B0B3924C5E99600DF2C21 /* jpgicc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jpgicc.c; sourceTree = ""; }; 418B0B3E24C5E9F700DF2C21 /* vprf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vprf.c; path = ../../../utils/common/vprf.c; sourceTree = SOURCE_ROOT; }; 418B0B3F24C5E9F700DF2C21 /* xgetopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xgetopt.c; path = ../../../utils/common/xgetopt.c; sourceTree = SOURCE_ROOT; }; 418B0B4024C5E9F700DF2C21 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utils.h; path = ../../../utils/common/utils.h; sourceTree = SOURCE_ROOT; }; 418B0B4324C5EC1D00DF2C21 /* testcms2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcms2.c; path = ../../../testbed/testcms2.c; sourceTree = SOURCE_ROOT; }; 418B0B4424C5EC1D00DF2C21 /* testcms2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = testcms2.h; path = ../../../testbed/testcms2.h; sourceTree = SOURCE_ROOT; }; 418B0B4524C5EC1D00DF2C21 /* testplugin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testplugin.c; path = ../../../testbed/testplugin.c; sourceTree = ""; }; 418B0B4824C5EC2A00DF2C21 /* zoo_icc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zoo_icc.c; path = ../../../testbed/zoo_icc.c; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 418B0A2F24C5E19500DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 418B0A7524C5E25200DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0A8A24C5E30000DF2C21 /* liblcms2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0A8D24C5E35200DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 418B0AB524C5E42900DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0AC224C5E47C00DF2C21 /* liblcms2.a in Frameworks */, 4123B5042551A1C8005F0287 /* libfast_float_plugin.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0AC824C5E4EA00DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0ADA24C5E58A00DF2C21 /* liblcms2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0ADE24C5E5C300DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0AEA24C5E5CF00DF2C21 /* liblcms2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0B0224C5E76100DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0B1524C5E7CF00DF2C21 /* liblcms2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0B1724C5E85600DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0B2124C5E8FA00DF2C21 /* liblcms2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0B2C24C5E95D00DF2C21 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 418B0B3D24C5E9A200DF2C21 /* liblcms2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 418B0A2824C5E19500DF2C21 = { isa = PBXGroup; children = ( 418B0AB124C5E39A00DF2C21 /* fast_float_plugin */, 418B0A7324C5E1FE00DF2C21 /* include */, 418B0A6C24C5E1CE00DF2C21 /* src */, 418B0A7924C5E25200DF2C21 /* testbed */, 418B0AB924C5E42900DF2C21 /* fast_float_testbed */, 418B0ACC24C5E4EA00DF2C21 /* transicc */, 418B0AE224C5E5C300DF2C21 /* linkicc */, 418B0B0624C5E76100DF2C21 /* tificc */, 418B0B1B24C5E85600DF2C21 /* tifdiff */, 418B0B3024C5E95D00DF2C21 /* jpegicc */, 418B0A3224C5E19500DF2C21 /* Products */, 418B0A8924C5E30000DF2C21 /* Frameworks */, ); sourceTree = ""; }; 418B0A3224C5E19500DF2C21 /* Products */ = { isa = PBXGroup; children = ( 418B0A3124C5E19500DF2C21 /* liblcms2.a */, 418B0A7824C5E25200DF2C21 /* testbed */, 418B0A8F24C5E35200DF2C21 /* libfast_float_plugin.a */, 418B0AB824C5E42900DF2C21 /* testbed */, 418B0ACB24C5E4EA00DF2C21 /* transicc */, 418B0AE124C5E5C300DF2C21 /* linkicc */, 418B0B0524C5E76100DF2C21 /* tificc */, 418B0B1A24C5E85600DF2C21 /* tifdiff */, 418B0B2F24C5E95D00DF2C21 /* jpegicc */, ); name = Products; sourceTree = ""; }; 418B0A6C24C5E1CE00DF2C21 /* src */ = { isa = PBXGroup; children = ( 418B0A7124C5E1F400DF2C21 /* lcms2_internal.h */, 418B0A4024C5E1C800DF2C21 /* cmsalpha.c */, 418B0A5024C5E1C900DF2C21 /* cmscam02.c */, 418B0A3F24C5E1C700DF2C21 /* cmscgats.c */, 418B0A3B24C5E1C700DF2C21 /* cmscnvrt.c */, 418B0A4A24C5E1C800DF2C21 /* cmserr.c */, 418B0A3824C5E1C700DF2C21 /* cmsgamma.c */, 418B0A3A24C5E1C700DF2C21 /* cmsgmt.c */, 418B0A4E24C5E1C800DF2C21 /* cmshalf.c */, 418B0A3924C5E1C700DF2C21 /* cmsintrp.c */, 418B0A4F24C5E1C900DF2C21 /* cmsio0.c */, 418B0A4224C5E1C800DF2C21 /* cmsio1.c */, 418B0A4B24C5E1C800DF2C21 /* cmslut.c */, 418B0A3C24C5E1C700DF2C21 /* cmsmd5.c */, 418B0A4624C5E1C800DF2C21 /* cmsmtrx.c */, 418B0A4924C5E1C800DF2C21 /* cmsnamed.c */, 418B0A3E24C5E1C700DF2C21 /* cmsopt.c */, 418B0A4324C5E1C800DF2C21 /* cmspack.c */, 418B0A4724C5E1C800DF2C21 /* cmspcs.c */, 418B0A4D24C5E1C800DF2C21 /* cmsplugin.c */, 418B0A4824C5E1C800DF2C21 /* cmsps2.c */, 418B0A5124C5E1C900DF2C21 /* cmssamp.c */, 418B0A3D24C5E1C700DF2C21 /* cmssm.c */, 418B0A4124C5E1C800DF2C21 /* cmstypes.c */, 418B0A4C24C5E1C800DF2C21 /* cmsvirt.c */, 418B0A4524C5E1C800DF2C21 /* cmswtpnt.c */, 418B0A4424C5E1C800DF2C21 /* cmsxform.c */, ); name = src; sourceTree = ""; }; 418B0A7324C5E1FE00DF2C21 /* include */ = { isa = PBXGroup; children = ( 418B0A6E24C5E1E800DF2C21 /* lcms2_plugin.h */, 418B0A6D24C5E1E800DF2C21 /* lcms2.h */, ); name = include; sourceTree = ""; }; 418B0A7924C5E25200DF2C21 /* testbed */ = { isa = PBXGroup; children = ( 418B0B4824C5EC2A00DF2C21 /* zoo_icc.c */, 418B0B4324C5EC1D00DF2C21 /* testcms2.c */, 418B0B4424C5EC1D00DF2C21 /* testcms2.h */, 418B0B4524C5EC1D00DF2C21 /* testplugin.c */, ); name = testbed; sourceTree = SOURCE_ROOT; }; 418B0A8924C5E30000DF2C21 /* Frameworks */ = { isa = PBXGroup; children = ( ); name = Frameworks; sourceTree = ""; }; 418B0AB124C5E39A00DF2C21 /* fast_float_plugin */ = { isa = PBXGroup; children = ( 418B0AAF24C5E38C00DF2C21 /* lcms2_fast_float.h */, 418B0A9F24C5E37700DF2C21 /* fast_8_curves.c */, 418B0A9B24C5E37700DF2C21 /* fast_8_matsh_sse.c */, 418B0A9924C5E37700DF2C21 /* fast_8_matsh.c */, 418B0A9C24C5E37700DF2C21 /* fast_8_tethra.c */, 418B0A9724C5E37700DF2C21 /* fast_16_tethra.c */, 418B0A9E24C5E37700DF2C21 /* fast_float_15bits.c */, 418B0A9424C5E37600DF2C21 /* fast_float_15mats.c */, 418B0A9624C5E37700DF2C21 /* fast_float_cmyk.c */, 418B0A9324C5E37600DF2C21 /* fast_float_curves.c */, 418B0A9824C5E37700DF2C21 /* fast_float_internal.h */, 418B0AA024C5E37800DF2C21 /* fast_float_matsh.c */, 418B0A9A24C5E37700DF2C21 /* fast_float_separate.c */, 418B0A9D24C5E37700DF2C21 /* fast_float_sup.c */, 418B0A9524C5E37600DF2C21 /* fast_float_tethra.c */, ); name = fast_float_plugin; sourceTree = ""; }; 418B0AB924C5E42900DF2C21 /* fast_float_testbed */ = { isa = PBXGroup; children = ( 418B0AF124C5E6B000DF2C21 /* fast_float_testbed.c */, ); name = fast_float_testbed; path = ../../../plugins/fast_float/testbed; sourceTree = ""; }; 418B0ACC24C5E4EA00DF2C21 /* transicc */ = { isa = PBXGroup; children = ( 418B0AF824C5E6D200DF2C21 /* transicc.c */, 418B0AF524C5E6C800DF2C21 /* utils.h */, 418B0AF424C5E6C700DF2C21 /* vprf.c */, 418B0AF324C5E6C700DF2C21 /* xgetopt.c */, ); name = transicc; sourceTree = SOURCE_ROOT; }; 418B0AE224C5E5C300DF2C21 /* linkicc */ = { isa = PBXGroup; children = ( 4123B46825518DB1005F0287 /* linkicc.c */, 418B0AFC24C5E73100DF2C21 /* utils.h */, 418B0AFE24C5E73100DF2C21 /* vprf.c */, 418B0AFD24C5E73100DF2C21 /* xgetopt.c */, ); name = linkicc; path = ../../../utils/linkicc; sourceTree = SOURCE_ROOT; }; 418B0B0624C5E76100DF2C21 /* tificc */ = { isa = PBXGroup; children = ( 4123B4B72551903B005F0287 /* tificc.c */, 4123B4A325518FFB005F0287 /* xgetopt.c */, 418B0B1224C5E7BB00DF2C21 /* vprf.c */, 418B0B0E24C5E79200DF2C21 /* utils.h */, ); name = tificc; path = ../../../utils/tificc; sourceTree = SOURCE_ROOT; }; 418B0B1B24C5E85600DF2C21 /* tifdiff */ = { isa = PBXGroup; children = ( 4123B4C2255190FE005F0287 /* tifdiff.c */, 418B0B2724C5E92B00DF2C21 /* vprf.c */, 418B0B2824C5E92B00DF2C21 /* xgetopt.c */, 418B0B2424C5E92100DF2C21 /* tifdiff.c */, ); name = tifdiff; path = ../../../utils/tificc; sourceTree = SOURCE_ROOT; }; 418B0B3024C5E95D00DF2C21 /* jpegicc */ = { isa = PBXGroup; children = ( 418B0B4024C5E9F700DF2C21 /* utils.h */, 418B0B3E24C5E9F700DF2C21 /* vprf.c */, 418B0B3F24C5E9F700DF2C21 /* xgetopt.c */, 418B0B3924C5E99600DF2C21 /* jpgicc.c */, 418B0B3624C5E98E00DF2C21 /* iccjpeg.c */, 418B0B3724C5E98E00DF2C21 /* iccjpeg.h */, ); name = jpegicc; path = ../../../utils/jpgicc; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 418B0A2D24C5E19500DF2C21 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 418B0A6F24C5E1E800DF2C21 /* lcms2.h in Headers */, 418B0A7024C5E1E800DF2C21 /* lcms2_plugin.h in Headers */, 418B0A7224C5E1F400DF2C21 /* lcms2_internal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0A8B24C5E35200DF2C21 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 418B0AB024C5E38C00DF2C21 /* lcms2_fast_float.h in Headers */, 418B0AA624C5E37800DF2C21 /* fast_float_internal.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 418B0A3024C5E19500DF2C21 /* lcms2 */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0A3524C5E19500DF2C21 /* Build configuration list for PBXNativeTarget "lcms2" */; buildPhases = ( 418B0A2D24C5E19500DF2C21 /* Headers */, 418B0A2E24C5E19500DF2C21 /* Sources */, 418B0A2F24C5E19500DF2C21 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = lcms2; productName = lcms2; productReference = 418B0A3124C5E19500DF2C21 /* liblcms2.a */; productType = "com.apple.product-type.library.static"; }; 418B0A7724C5E25200DF2C21 /* testbed */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0A7C24C5E25200DF2C21 /* Build configuration list for PBXNativeTarget "testbed" */; buildPhases = ( 418B0A7424C5E25200DF2C21 /* Sources */, 418B0A7524C5E25200DF2C21 /* Frameworks */, 418B0A7624C5E25200DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0A8624C5E29800DF2C21 /* PBXTargetDependency */, ); name = testbed; productName = testbed; productReference = 418B0A7824C5E25200DF2C21 /* testbed */; productType = "com.apple.product-type.tool"; }; 418B0A8E24C5E35200DF2C21 /* fast_float_plugin */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0A9024C5E35200DF2C21 /* Build configuration list for PBXNativeTarget "fast_float_plugin" */; buildPhases = ( 418B0A8B24C5E35200DF2C21 /* Headers */, 418B0A8C24C5E35200DF2C21 /* Sources */, 418B0A8D24C5E35200DF2C21 /* Frameworks */, ); buildRules = ( ); dependencies = ( 418B0AB324C5E3D400DF2C21 /* PBXTargetDependency */, ); name = fast_float_plugin; productName = fast_float_plugin; productReference = 418B0A8F24C5E35200DF2C21 /* libfast_float_plugin.a */; productType = "com.apple.product-type.library.static"; }; 418B0AB724C5E42900DF2C21 /* fast_float_testbed */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0ABC24C5E42900DF2C21 /* Build configuration list for PBXNativeTarget "fast_float_testbed" */; buildPhases = ( 418B0AB424C5E42900DF2C21 /* Sources */, 418B0AB524C5E42900DF2C21 /* Frameworks */, 418B0AB624C5E42900DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0AC624C5E48600DF2C21 /* PBXTargetDependency */, 418B0AC424C5E48100DF2C21 /* PBXTargetDependency */, ); name = fast_float_testbed; productName = fast_float_testbed; productReference = 418B0AB824C5E42900DF2C21 /* testbed */; productType = "com.apple.product-type.tool"; }; 418B0ACA24C5E4EA00DF2C21 /* transicc */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0ACF24C5E4EA00DF2C21 /* Build configuration list for PBXNativeTarget "transicc" */; buildPhases = ( 418B0AC724C5E4EA00DF2C21 /* Sources */, 418B0AC824C5E4EA00DF2C21 /* Frameworks */, 418B0AC924C5E4EA00DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0ADC24C5E58F00DF2C21 /* PBXTargetDependency */, ); name = transicc; productName = transicc; productReference = 418B0ACB24C5E4EA00DF2C21 /* transicc */; productType = "com.apple.product-type.tool"; }; 418B0AE024C5E5C300DF2C21 /* linkicc */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0AE524C5E5C300DF2C21 /* Build configuration list for PBXNativeTarget "linkicc" */; buildPhases = ( 418B0ADD24C5E5C300DF2C21 /* Sources */, 418B0ADE24C5E5C300DF2C21 /* Frameworks */, 418B0ADF24C5E5C300DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0AE924C5E5CA00DF2C21 /* PBXTargetDependency */, ); name = linkicc; productName = linkicc; productReference = 418B0AE124C5E5C300DF2C21 /* linkicc */; productType = "com.apple.product-type.tool"; }; 418B0B0424C5E76100DF2C21 /* tificc */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0B0924C5E76100DF2C21 /* Build configuration list for PBXNativeTarget "tificc" */; buildPhases = ( 418B0B0124C5E76100DF2C21 /* Sources */, 418B0B0224C5E76100DF2C21 /* Frameworks */, 418B0B0324C5E76100DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0B0D24C5E77500DF2C21 /* PBXTargetDependency */, ); name = tificc; productName = tificc; productReference = 418B0B0524C5E76100DF2C21 /* tificc */; productType = "com.apple.product-type.tool"; }; 418B0B1924C5E85600DF2C21 /* tifdiff */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0B1E24C5E85600DF2C21 /* Build configuration list for PBXNativeTarget "tifdiff" */; buildPhases = ( 418B0B1624C5E85600DF2C21 /* Sources */, 418B0B1724C5E85600DF2C21 /* Frameworks */, 418B0B1824C5E85600DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0B2324C5E8FA00DF2C21 /* PBXTargetDependency */, ); name = tifdiff; productName = tifdiff; productReference = 418B0B1A24C5E85600DF2C21 /* tifdiff */; productType = "com.apple.product-type.tool"; }; 418B0B2E24C5E95D00DF2C21 /* jpegicc */ = { isa = PBXNativeTarget; buildConfigurationList = 418B0B3324C5E95D00DF2C21 /* Build configuration list for PBXNativeTarget "jpegicc" */; buildPhases = ( 418B0B2B24C5E95D00DF2C21 /* Sources */, 418B0B2C24C5E95D00DF2C21 /* Frameworks */, 418B0B2D24C5E95D00DF2C21 /* CopyFiles */, ); buildRules = ( ); dependencies = ( 418B0B3C24C5E99E00DF2C21 /* PBXTargetDependency */, ); name = jpegicc; productName = jpegicc; productReference = 418B0B2F24C5E95D00DF2C21 /* jpegicc */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 418B0A2924C5E19500DF2C21 /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 1210; ORGANIZATIONNAME = littlecms; TargetAttributes = { 418B0A3024C5E19500DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0A7724C5E25200DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0A8E24C5E35200DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0AB724C5E42900DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0ACA24C5E4EA00DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0AE024C5E5C300DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0B0424C5E76100DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0B1924C5E85600DF2C21 = { CreatedOnToolsVersion = 11.6; }; 418B0B2E24C5E95D00DF2C21 = { CreatedOnToolsVersion = 11.6; }; }; }; buildConfigurationList = 418B0A2C24C5E19500DF2C21 /* Build configuration list for PBXProject "lcms2" */; compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 418B0A2824C5E19500DF2C21; productRefGroup = 418B0A3224C5E19500DF2C21 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 418B0A3024C5E19500DF2C21 /* lcms2 */, 418B0A7724C5E25200DF2C21 /* testbed */, 418B0A8E24C5E35200DF2C21 /* fast_float_plugin */, 418B0AB724C5E42900DF2C21 /* fast_float_testbed */, 418B0ACA24C5E4EA00DF2C21 /* transicc */, 418B0AE024C5E5C300DF2C21 /* linkicc */, 418B0B0424C5E76100DF2C21 /* tificc */, 418B0B1924C5E85600DF2C21 /* tifdiff */, 418B0B2E24C5E95D00DF2C21 /* jpegicc */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ 418B0A2E24C5E19500DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0A5224C5E1C900DF2C21 /* cmsgamma.c in Sources */, 418B0A5324C5E1C900DF2C21 /* cmsintrp.c in Sources */, 418B0A5424C5E1C900DF2C21 /* cmsgmt.c in Sources */, 418B0A5524C5E1C900DF2C21 /* cmscnvrt.c in Sources */, 418B0A5624C5E1C900DF2C21 /* cmsmd5.c in Sources */, 418B0A5724C5E1C900DF2C21 /* cmssm.c in Sources */, 418B0A5824C5E1C900DF2C21 /* cmsopt.c in Sources */, 418B0A5924C5E1C900DF2C21 /* cmscgats.c in Sources */, 418B0A5A24C5E1C900DF2C21 /* cmsalpha.c in Sources */, 418B0A5B24C5E1C900DF2C21 /* cmstypes.c in Sources */, 418B0A5C24C5E1C900DF2C21 /* cmsio1.c in Sources */, 418B0A5D24C5E1C900DF2C21 /* cmspack.c in Sources */, 418B0A5E24C5E1C900DF2C21 /* cmsxform.c in Sources */, 418B0A5F24C5E1C900DF2C21 /* cmswtpnt.c in Sources */, 418B0A6024C5E1C900DF2C21 /* cmsmtrx.c in Sources */, 418B0A6124C5E1C900DF2C21 /* cmspcs.c in Sources */, 418B0A6224C5E1C900DF2C21 /* cmsps2.c in Sources */, 418B0A6324C5E1C900DF2C21 /* cmsnamed.c in Sources */, 418B0A6424C5E1C900DF2C21 /* cmserr.c in Sources */, 418B0A6524C5E1C900DF2C21 /* cmslut.c in Sources */, 418B0A6624C5E1C900DF2C21 /* cmsvirt.c in Sources */, 418B0A6724C5E1C900DF2C21 /* cmsplugin.c in Sources */, 418B0A6824C5E1C900DF2C21 /* cmshalf.c in Sources */, 418B0A6924C5E1C900DF2C21 /* cmsio0.c in Sources */, 418B0A6A24C5E1C900DF2C21 /* cmscam02.c in Sources */, 418B0A6B24C5E1C900DF2C21 /* cmssamp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0A7424C5E25200DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0B4724C5EC1D00DF2C21 /* testplugin.c in Sources */, 418B0B4924C5EC2A00DF2C21 /* zoo_icc.c in Sources */, 418B0B4624C5EC1D00DF2C21 /* testcms2.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0A8C24C5E35200DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0AA124C5E37800DF2C21 /* fast_float_curves.c in Sources */, 418B0AA224C5E37800DF2C21 /* fast_float_15mats.c in Sources */, 418B0AA324C5E37800DF2C21 /* fast_float_tethra.c in Sources */, 418B0AA424C5E37800DF2C21 /* fast_float_cmyk.c in Sources */, 418B0AA524C5E37800DF2C21 /* fast_16_tethra.c in Sources */, 418B0AA724C5E37800DF2C21 /* fast_8_matsh.c in Sources */, 418B0AA824C5E37800DF2C21 /* fast_float_separate.c in Sources */, 418B0AA924C5E37800DF2C21 /* fast_8_matsh_sse.c in Sources */, 418B0AAA24C5E37800DF2C21 /* fast_8_tethra.c in Sources */, 418B0AAB24C5E37800DF2C21 /* fast_float_sup.c in Sources */, 418B0AAC24C5E37800DF2C21 /* fast_float_15bits.c in Sources */, 418B0AAD24C5E37800DF2C21 /* fast_8_curves.c in Sources */, 418B0AAE24C5E37800DF2C21 /* fast_float_matsh.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0AB424C5E42900DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0AF224C5E6B000DF2C21 /* fast_float_testbed.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0AC724C5E4EA00DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0AF724C5E6C800DF2C21 /* vprf.c in Sources */, 418B0AF924C5E6D200DF2C21 /* transicc.c in Sources */, 418B0AF624C5E6C800DF2C21 /* xgetopt.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0ADD24C5E5C300DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0B0024C5E73100DF2C21 /* vprf.c in Sources */, 418B0AFF24C5E73100DF2C21 /* xgetopt.c in Sources */, 4123B46925518DB1005F0287 /* linkicc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0B0124C5E76100DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4123B4A425518FFB005F0287 /* xgetopt.c in Sources */, 418B0B0F24C5E79200DF2C21 /* utils.h in Sources */, 418B0B1424C5E7BB00DF2C21 /* vprf.c in Sources */, 4123B4B82551903B005F0287 /* tificc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0B1624C5E85600DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0B2524C5E92100DF2C21 /* tifdiff.c in Sources */, 418B0B2924C5E92B00DF2C21 /* vprf.c in Sources */, 418B0B2A24C5E92B00DF2C21 /* xgetopt.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 418B0B2B24C5E95D00DF2C21 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 418B0B3824C5E98E00DF2C21 /* iccjpeg.c in Sources */, 418B0B4224C5E9F700DF2C21 /* xgetopt.c in Sources */, 418B0B4124C5E9F700DF2C21 /* vprf.c in Sources */, 418B0B3A24C5E99600DF2C21 /* jpgicc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 418B0A8624C5E29800DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0A8524C5E29800DF2C21 /* PBXContainerItemProxy */; }; 418B0AB324C5E3D400DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0AB224C5E3D400DF2C21 /* PBXContainerItemProxy */; }; 418B0AC424C5E48100DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A8E24C5E35200DF2C21 /* fast_float_plugin */; targetProxy = 418B0AC324C5E48100DF2C21 /* PBXContainerItemProxy */; }; 418B0AC624C5E48600DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0AC524C5E48600DF2C21 /* PBXContainerItemProxy */; }; 418B0ADC24C5E58F00DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0ADB24C5E58F00DF2C21 /* PBXContainerItemProxy */; }; 418B0AE924C5E5CA00DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0AE824C5E5CA00DF2C21 /* PBXContainerItemProxy */; }; 418B0B0D24C5E77500DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0B0C24C5E77500DF2C21 /* PBXContainerItemProxy */; }; 418B0B2324C5E8FA00DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0B2224C5E8FA00DF2C21 /* PBXContainerItemProxy */; }; 418B0B3C24C5E99E00DF2C21 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 418B0A3024C5E19500DF2C21 /* lcms2 */; targetProxy = 418B0B3B24C5E99E00DF2C21 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 418B0A3324C5E19500DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; name = Debug; }; 418B0A3424C5E19500DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.15; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; name = Release; }; 418B0A3624C5E19500DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Debug; }; 418B0A3724C5E19500DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; 418B0A7D24C5E25200DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0A7E24C5E25200DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 418B0A9124C5E35200DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Debug; }; 418B0A9224C5E35200DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; name = Release; }; 418B0ABD24C5E42900DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0ABE24C5E42900DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 418B0AD024C5E4EA00DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0AD124C5E4EA00DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 418B0AE624C5E5C300DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0AE724C5E5C300DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 418B0B0A24C5E76100DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; HEADER_SEARCH_PATHS = /usr/local/include; MACOSX_DEPLOYMENT_TARGET = 10.15; OTHER_LDFLAGS = ( "-L", /usr/local/lib, "-ltiff", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0B0B24C5E76100DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; HEADER_SEARCH_PATHS = /usr/local/include; MACOSX_DEPLOYMENT_TARGET = 10.15; OTHER_LDFLAGS = ( "-L", /usr/local/lib, "-ltiff", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 418B0B1F24C5E85600DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; HEADER_SEARCH_PATHS = /usr/local/include; OTHER_LDFLAGS = ( "-L", /usr/local/lib, "-ltiff", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0B2024C5E85600DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; HEADER_SEARCH_PATHS = /usr/local/include; OTHER_LDFLAGS = ( "-L", /usr/local/lib, "-ltiff", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; 418B0B3424C5E95D00DF2C21 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; HEADER_SEARCH_PATHS = /usr/local/include; OTHER_LDFLAGS = ( "-L", /usr/local/lib, "-ljpeg", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; 418B0B3524C5E95D00DF2C21 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; HEADER_SEARCH_PATHS = /usr/local/include; OTHER_LDFLAGS = ( "-L", /usr/local/lib, "-ljpeg", ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 418B0A2C24C5E19500DF2C21 /* Build configuration list for PBXProject "lcms2" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0A3324C5E19500DF2C21 /* Debug */, 418B0A3424C5E19500DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0A3524C5E19500DF2C21 /* Build configuration list for PBXNativeTarget "lcms2" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0A3624C5E19500DF2C21 /* Debug */, 418B0A3724C5E19500DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0A7C24C5E25200DF2C21 /* Build configuration list for PBXNativeTarget "testbed" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0A7D24C5E25200DF2C21 /* Debug */, 418B0A7E24C5E25200DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0A9024C5E35200DF2C21 /* Build configuration list for PBXNativeTarget "fast_float_plugin" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0A9124C5E35200DF2C21 /* Debug */, 418B0A9224C5E35200DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0ABC24C5E42900DF2C21 /* Build configuration list for PBXNativeTarget "fast_float_testbed" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0ABD24C5E42900DF2C21 /* Debug */, 418B0ABE24C5E42900DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0ACF24C5E4EA00DF2C21 /* Build configuration list for PBXNativeTarget "transicc" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0AD024C5E4EA00DF2C21 /* Debug */, 418B0AD124C5E4EA00DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0AE524C5E5C300DF2C21 /* Build configuration list for PBXNativeTarget "linkicc" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0AE624C5E5C300DF2C21 /* Debug */, 418B0AE724C5E5C300DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0B0924C5E76100DF2C21 /* Build configuration list for PBXNativeTarget "tificc" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0B0A24C5E76100DF2C21 /* Debug */, 418B0B0B24C5E76100DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0B1E24C5E85600DF2C21 /* Build configuration list for PBXNativeTarget "tifdiff" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0B1F24C5E85600DF2C21 /* Debug */, 418B0B2024C5E85600DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 418B0B3324C5E95D00DF2C21 /* Build configuration list for PBXNativeTarget "jpegicc" */ = { isa = XCConfigurationList; buildConfigurations = ( 418B0B3424C5E95D00DF2C21 /* Debug */, 418B0B3524C5E95D00DF2C21 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 418B0A2924C5E19500DF2C21 /* Project object */; } lcms2-2.12rc1/Projects/VC2019/0000755000175000017500000000000013775114656014532 5ustar martimartilcms2-2.12rc1/Projects/VC2019/tifficc/0000755000175000017500000000000013775114656016141 5ustar martimartilcms2-2.12rc1/Projects/VC2019/tifficc/tifficc.vcxproj.filters0000644000175000017500000000242213775114656022634 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Header Files lcms2-2.12rc1/Projects/VC2019/tifficc/tifficc.vcxproj0000644000175000017500000003071413775114656021172 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2} tifficc Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff $(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue true libtiff.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console false MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true false libtiff.lib;%(AdditionalDependencies) true Console true true MachineX86 false true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/lcms2.sln0000644000175000017500000004713413775114656016301 0ustar martimarti Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30011.22 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testbed", "testbed\testbed.vcxproj", "{928A3A2B-46EF-4279-959C-513B3652FF0E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tifficc", "tifficc\tifficc.vcxproj", "{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_DLL", "lcms2_DLL\lcms2_DLL.vcxproj", "{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "linkicc", "linkicc\linkicc.vcxproj", "{FBFBE1DC-DB84-4BA1-9552-B4780F457849}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transicc", "transicc\transicc.vcxproj", "{9EE22D66-C849-474C-9ED5-C3E141DAB160}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpegicc", "jpegicc\jpegicc.vcxproj", "{62812507-F926-4968-96A9-17678460AD90}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiffdiff", "tiffdiff\tiffdiff.vcxproj", "{75B91835-CCD7-48BE-A606-A9C997D5DBEE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_static", "lcms2_static\lcms2_static.vcxproj", "{71DEDE59-3F1E-486B-A899-4283000F76B5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psicc", "psicc\psicc.vcxproj", "{EF6A8851-65FE-46F5-B9EF-14F0B671F693}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_fast_float_plugin", "..\..\plugins\fast_float\Projects\VC2019\lcms2_fast_float_plugin.vcxproj", "{AD9FF79B-CF6E-4971-A7CF-DAA47D636676}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_fast_float_plugin_testbed", "..\..\plugins\fast_float\Projects\VC2019\lcms2_fast_float_plugin_testbed.vcxproj", "{7629D670-C419-402B-8A90-747952EE9FC0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "plugins", "plugins", "{8349DD7F-F750-4910-A5A5-0628223BD3EB}" ProjectSection(SolutionItems) = preProject ..\..\plugins\README.1ST = ..\..\plugins\README.1ST EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fast_float", "fast_float", "{1696CDC1-F411-4F84-BC94-C63FEB867D06}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|Win32.ActiveCfg = Debug|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|Win32.Build.0 = Debug|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|x64.ActiveCfg = Debug|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|x64.Build.0 = Debug|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|Win32.ActiveCfg = Release|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|Win32.Build.0 = Release|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|x64.ActiveCfg = Release|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|x64.Build.0 = Release|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|Win32.ActiveCfg = Debug|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|Win32.Build.0 = Debug|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|x64.ActiveCfg = Debug|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|x64.Build.0 = Debug|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|Win32.ActiveCfg = Release|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|Win32.Build.0 = Release|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|x64.ActiveCfg = Release|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|x64.Build.0 = Release|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|Win32.ActiveCfg = Debug|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|Win32.Build.0 = Debug|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|x64.ActiveCfg = Debug|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|x64.Build.0 = Debug|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|Win32.ActiveCfg = Release|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|Win32.Build.0 = Release|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|x64.ActiveCfg = Release|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|x64.Build.0 = Release|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|Win32.ActiveCfg = Debug|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|Win32.Build.0 = Debug|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|x64.ActiveCfg = Debug|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|x64.Build.0 = Debug|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|Win32.ActiveCfg = Release|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|Win32.Build.0 = Release|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|x64.ActiveCfg = Release|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|x64.Build.0 = Release|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|Win32.ActiveCfg = Debug|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|Win32.Build.0 = Debug|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|x64.ActiveCfg = Debug|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|x64.Build.0 = Debug|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|Win32.ActiveCfg = Release|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|Win32.Build.0 = Release|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|x64.ActiveCfg = Release|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|x64.Build.0 = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Debug|Win32.ActiveCfg = Debug|Win32 {62812507-F926-4968-96A9-17678460AD90}.Debug|Win32.Build.0 = Debug|Win32 {62812507-F926-4968-96A9-17678460AD90}.Debug|x64.ActiveCfg = Debug|x64 {62812507-F926-4968-96A9-17678460AD90}.Debug|x64.Build.0 = Debug|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|Win32.ActiveCfg = Release|Win32 {62812507-F926-4968-96A9-17678460AD90}.Release|Win32.Build.0 = Release|Win32 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.ActiveCfg = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.Build.0 = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.Deploy.0 = Release|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|Win32.Build.0 = Debug|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|x64.ActiveCfg = Debug|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|x64.Build.0 = Debug|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|Win32.ActiveCfg = Release|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|Win32.Build.0 = Release|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|x64.ActiveCfg = Release|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|x64.Build.0 = Release|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|Win32.ActiveCfg = Debug|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|Win32.Build.0 = Debug|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|x64.ActiveCfg = Debug|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|x64.Build.0 = Debug|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|Win32.ActiveCfg = Release|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|Win32.Build.0 = Release|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|x64.ActiveCfg = Release|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|x64.Build.0 = Release|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|Win32.ActiveCfg = Debug|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|Win32.Build.0 = Debug|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|x64.ActiveCfg = Debug|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|x64.Build.0 = Debug|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|Win32.ActiveCfg = Release|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|Win32.Build.0 = Release|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|x64.ActiveCfg = Release|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|x64.Build.0 = Release|x64 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Debug|Win32.ActiveCfg = Debug|Win32 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Debug|Win32.Build.0 = Debug|Win32 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Debug|x64.ActiveCfg = Debug|x64 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Debug|x64.Build.0 = Debug|x64 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Release|Win32.ActiveCfg = Release|Win32 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Release|Win32.Build.0 = Release|Win32 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Release|x64.ActiveCfg = Release|x64 {AD9FF79B-CF6E-4971-A7CF-DAA47D636676}.Release|x64.Build.0 = Release|x64 {7629D670-C419-402B-8A90-747952EE9FC0}.Debug|Win32.ActiveCfg = Debug|Win32 {7629D670-C419-402B-8A90-747952EE9FC0}.Debug|Win32.Build.0 = Debug|Win32 {7629D670-C419-402B-8A90-747952EE9FC0}.Debug|x64.ActiveCfg = Debug|x64 {7629D670-C419-402B-8A90-747952EE9FC0}.Debug|x64.Build.0 = Debug|x64 {7629D670-C419-402B-8A90-747952EE9FC0}.Release|Win32.ActiveCfg = Release|Win32 {7629D670-C419-402B-8A90-747952EE9FC0}.Release|Win32.Build.0 = Release|Win32 {7629D670-C419-402B-8A90-747952EE9FC0}.Release|x64.ActiveCfg = Release|x64 {7629D670-C419-402B-8A90-747952EE9FC0}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {AD9FF79B-CF6E-4971-A7CF-DAA47D636676} = {1696CDC1-F411-4F84-BC94-C63FEB867D06} {7629D670-C419-402B-8A90-747952EE9FC0} = {1696CDC1-F411-4F84-BC94-C63FEB867D06} {1696CDC1-F411-4F84-BC94-C63FEB867D06} = {8349DD7F-F750-4910-A5A5-0628223BD3EB} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution QtVersion = $(DefaultQtVersion) SolutionGuid = {E95EA102-6884-4CAD-AF6D-9BF36C69A33D} EndGlobalSection EndGlobal lcms2-2.12rc1/Projects/VC2019/lcms2_DLL/0000755000175000017500000000000013775114656016245 5ustar martimartilcms2-2.12rc1/Projects/VC2019/lcms2_DLL/lcms2_DLL.vcxproj0000644000175000017500000003266513775114656021411 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548} lcms2_DLL Win32Proj 10.0 DynamicLibrary Unicode true v142 DynamicLibrary Unicode true v142 DynamicLibrary Unicode v142 DynamicLibrary Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset lcms2 lcms2 lcms2 lcms2 Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 true false ..\..\..\src\lcms2.def true Windows MachineX86 Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 true false true Windows $(OutDir)$(TargetName)$(TargetExt) Full true Speed true true true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true Level4 true OnlyExplicitInline true ..\..\..\src\lcms2.def true Windows true true MachineX86 true Full true Speed true true true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true Level4 true OnlyExplicitInline true true Windows true true true true lcms2-2.12rc1/Projects/VC2019/lcms2_DLL/lcms2_DLL.vcxproj.filters0000644000175000017500000001015113775114656023042 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Source Files Resource Files Resource Files Source Files lcms2-2.12rc1/Projects/VC2019/lcms2_static/0000755000175000017500000000000013775114656017121 5ustar martimartilcms2-2.12rc1/Projects/VC2019/lcms2_static/lcms2_static.vcxproj0000644000175000017500000002654313775114656023137 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {71DEDE59-3F1E-486B-A899-4283000F76B5} lcms2_static Win32Proj 10.0 StaticLibrary Unicode true v142 StaticLibrary Unicode true v142 StaticLibrary Unicode v142 StaticLibrary Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\Lib\MS\ ..\..\..\Lib\MS\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ ..\..\..\Lib\MS\ ..\..\..\Lib\MS\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks Level4 EditAndContinue true MultiThreadedDebugDLL Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true Default MaxSpeed true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase Speed true false OnlyExplicitInline false true Precise false false false true MaxSpeed true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase Speed true true OnlyExplicitInline false true true true lcms2-2.12rc1/Projects/VC2019/lcms2_static/lcms2_static.vcxproj.filters0000644000175000017500000000737513775114656024610 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Source Files lcms2-2.12rc1/Projects/VC2019/lcms2.rc0000644000175000017500000000452613775114656016107 0ustar martimarti// Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Spanish (Spain, International Sort) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN #pragma code_page(1252) ///////////////////////////////////////////////////////////////////////////// // // Version // 1 VERSIONINFO FILEVERSION 2,12,0,0 PRODUCTVERSION 2,12,0,0 FILEFLAGSMASK 0x0L #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "Marti Maria" VALUE "FileDescription", "lcms color engine" VALUE "FileVersion", "2.12.0.0" VALUE "InternalName", "lcms" VALUE "LegalCopyright", "Copyright � Marti Maria 2021" VALUE "OriginalFilename", "lcms2.dll" VALUE "ProductName", "LittleCMS color engine" VALUE "ProductVersion", "2.12.0.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Spanish (Spain, International Sort) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lcms2-2.12rc1/Projects/VC2019/transicc/0000755000175000017500000000000013775114656016340 5ustar martimartilcms2-2.12rc1/Projects/VC2019/transicc/transicc.vcxproj0000644000175000017500000002542213775114656021570 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160} transicc Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true false true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/transicc/transicc.vcxproj.filters0000644000175000017500000000242613775114656023236 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Header Files lcms2-2.12rc1/Projects/VC2019/testbed/0000755000175000017500000000000013775114656016164 5ustar martimartilcms2-2.12rc1/Projects/VC2019/testbed/testbed.vcxproj.filters0000644000175000017500000000220113775114656022675 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2019/testbed/testbed.vcxproj0000644000175000017500000002651713775114656021246 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {928A3A2B-46EF-4279-959C-513B3652FF0E} testbed Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\testbed\ ..\..\..\testbed\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\testbed\ ..\..\..\testbed\ Disabled ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue true true Console MachineX86 false Disabled ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level3 ProgramDatabase true true Console false Full true Speed true false ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL false true NotSet Level3 ProgramDatabase Cdecl true false true Console true true MachineX86 false true Full true Speed true true ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded false true NotSet Level3 ProgramDatabase Cdecl true true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/linkicc/0000755000175000017500000000000013775114656016146 5ustar martimartilcms2-2.12rc1/Projects/VC2019/linkicc/linkicc.vcxproj.filters0000644000175000017500000000221213775114656022643 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2019/linkicc/linkicc.vcxproj0000644000175000017500000002506113775114656021203 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849} linkicc Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Level4 ProgramDatabase true false MultiThreaded true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true Level4 ProgramDatabase true MultiThreaded true Console true true {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/resource.h0000644000175000017500000000065613775114656016541 0ustar martimarti//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by lcms2.rc // // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lcms2-2.12rc1/Projects/VC2019/jpegicc/0000755000175000017500000000000013775114656016136 5ustar martimartilcms2-2.12rc1/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters0000644000175000017500000000236713775114656022636 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2019/jpegicc/jpegicc.vcxproj0000644000175000017500000003077713775114656021175 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {62812507-F926-4968-96A9-17678460AD90} jpegicc Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)\ $(Configuration)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)\ $(Configuration)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(IncludePath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true libjpeg.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true libjpeg.lib;%(AdditionalDependencies) true Console false Full true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase Speed true true true false libjpeg.lib;%(AdditionalDependencies) true Console true true MachineX86 false true Full true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase Speed true true true libjpeg.lib;%(AdditionalDependencies) true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/psicc/0000755000175000017500000000000013775114656015633 5ustar martimartilcms2-2.12rc1/Projects/VC2019/psicc/psicc.vcxproj.filters0000644000175000017500000000220613775114656022020 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2019/psicc/psicc.vcxproj0000644000175000017500000002506313775114656020357 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693} psicc Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true false true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true Console true true {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/tiffdiff/0000755000175000017500000000000013775114656016313 5ustar martimartilcms2-2.12rc1/Projects/VC2019/tiffdiff/tiffdiff.vcxproj0000644000175000017500000003112013775114656021506 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE} tiffdiff Win32Proj 10.0 Application Unicode true v142 Application Unicode true v142 Application Unicode v142 Application Unicode v142 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset C:\jpeg-8d;$(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(IncludePath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff C:\jpeg-8d;$(LibraryPath);E:\liteCommons\3rdparty\tiff-4.1.0\libtiff Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true libtiff.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console false MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true false libtiff.lib;%(AdditionalDependencies) true Console true true MachineX86 $(OutDir)$(TargetName)$(TargetExt) false true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console true true $(OutDir)$(TargetName)$(TargetExt) false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters0000644000175000017500000000221113775114656023154 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2015/0000755000175000017500000000000013775114656014526 5ustar martimartilcms2-2.12rc1/Projects/VC2015/tifficc/0000755000175000017500000000000013775114656016135 5ustar martimartilcms2-2.12rc1/Projects/VC2015/tifficc/tifficc.vcxproj.filters0000644000175000017500000000242213775114656022630 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Header Files lcms2-2.12rc1/Projects/VC2015/tifficc/tifficc.vcxproj0000644000175000017500000003051213775114656021162 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2} tifficc Win32Proj 8.1 Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(IncludePath);C:\code\tiff-4.0.3\libtiff $(IncludePath);C:\code\tiff-4.0.3\libtiff $(LibraryPath);C:\code\tiff-4.0.3\libtiff $(LibraryPath);C:\code\tiff-4.0.3\libtiff $(IncludePath);C:\code\tiff-4.0.3\libtiff $(IncludePath);C:\code\tiff-4.0.3\libtiff $(LibraryPath);C:\code\tiff-4.0.3\libtiff $(LibraryPath);C:\code\tiff-4.0.3\libtiff Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue true libtiff.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console false MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true libtiff.lib;%(AdditionalDependencies) true Console true true MachineX86 false true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/lcms2.sln0000644000175000017500000003554413775114656016277 0ustar martimarti Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testbed", "testbed\testbed.vcxproj", "{928A3A2B-46EF-4279-959C-513B3652FF0E}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tifficc", "tifficc\tifficc.vcxproj", "{2256DE16-ED92-4A6F-9C54-F65BB61E64A2}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_DLL", "lcms2_DLL\lcms2_DLL.vcxproj", "{8C51BE48-ADB8-4089-A9EC-F6BF993A0548}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "linkicc", "linkicc\linkicc.vcxproj", "{FBFBE1DC-DB84-4BA1-9552-B4780F457849}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "transicc", "transicc\transicc.vcxproj", "{9EE22D66-C849-474C-9ED5-C3E141DAB160}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpegicc", "jpegicc\jpegicc.vcxproj", "{62812507-F926-4968-96A9-17678460AD90}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiffdiff", "tiffdiff\tiffdiff.vcxproj", "{75B91835-CCD7-48BE-A606-A9C997D5DBEE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms2_static", "lcms2_static\lcms2_static.vcxproj", "{71DEDE59-3F1E-486B-A899-4283000F76B5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "psicc", "psicc\psicc.vcxproj", "{EF6A8851-65FE-46F5-B9EF-14F0B671F693}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|Win32.ActiveCfg = Debug|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|Win32.Build.0 = Debug|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|x64.ActiveCfg = Debug|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Debug|x64.Build.0 = Debug|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|Win32.ActiveCfg = Release|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|Win32.Build.0 = Release|Win32 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|x64.ActiveCfg = Release|x64 {928A3A2B-46EF-4279-959C-513B3652FF0E}.Release|x64.Build.0 = Release|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|Win32.ActiveCfg = Debug|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|Win32.Build.0 = Debug|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|x64.ActiveCfg = Debug|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Debug|x64.Build.0 = Debug|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|Win32.ActiveCfg = Release|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|Win32.Build.0 = Release|Win32 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|x64.ActiveCfg = Release|x64 {2256DE16-ED92-4A6F-9C54-F65BB61E64A2}.Release|x64.Build.0 = Release|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|Win32.ActiveCfg = Debug|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|Win32.Build.0 = Debug|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|x64.ActiveCfg = Debug|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Debug|x64.Build.0 = Debug|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|Win32.ActiveCfg = Release|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|Win32.Build.0 = Release|Win32 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|x64.ActiveCfg = Release|x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548}.Release|x64.Build.0 = Release|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|Win32.ActiveCfg = Debug|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|Win32.Build.0 = Debug|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|x64.ActiveCfg = Debug|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Debug|x64.Build.0 = Debug|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|Win32.ActiveCfg = Release|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|Win32.Build.0 = Release|Win32 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|x64.ActiveCfg = Release|x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849}.Release|x64.Build.0 = Release|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|Win32.ActiveCfg = Debug|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|Win32.Build.0 = Debug|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|x64.ActiveCfg = Debug|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Debug|x64.Build.0 = Debug|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|Win32.ActiveCfg = Release|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|Win32.Build.0 = Release|Win32 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|x64.ActiveCfg = Release|x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160}.Release|x64.Build.0 = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Debug|Win32.ActiveCfg = Debug|Win32 {62812507-F926-4968-96A9-17678460AD90}.Debug|Win32.Build.0 = Debug|Win32 {62812507-F926-4968-96A9-17678460AD90}.Debug|x64.ActiveCfg = Debug|x64 {62812507-F926-4968-96A9-17678460AD90}.Debug|x64.Build.0 = Debug|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|Win32.ActiveCfg = Release|Win32 {62812507-F926-4968-96A9-17678460AD90}.Release|Win32.Build.0 = Release|Win32 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.ActiveCfg = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.Build.0 = Release|x64 {62812507-F926-4968-96A9-17678460AD90}.Release|x64.Deploy.0 = Release|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|Win32.ActiveCfg = Debug|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|Win32.Build.0 = Debug|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|x64.ActiveCfg = Debug|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Debug|x64.Build.0 = Debug|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|Win32.ActiveCfg = Release|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|Win32.Build.0 = Release|Win32 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|x64.ActiveCfg = Release|x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE}.Release|x64.Build.0 = Release|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|Win32.ActiveCfg = Debug|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|Win32.Build.0 = Debug|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|x64.ActiveCfg = Debug|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Debug|x64.Build.0 = Debug|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|Win32.ActiveCfg = Release|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|Win32.Build.0 = Release|Win32 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|x64.ActiveCfg = Release|x64 {71DEDE59-3F1E-486B-A899-4283000F76B5}.Release|x64.Build.0 = Release|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|Win32.ActiveCfg = Debug|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|Win32.Build.0 = Debug|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|x64.ActiveCfg = Debug|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Debug|x64.Build.0 = Debug|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|Win32.ActiveCfg = Release|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|Win32.Build.0 = Release|Win32 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|x64.ActiveCfg = Release|x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution QtVersion = $(DefaultQtVersion) EndGlobalSection EndGlobal lcms2-2.12rc1/Projects/VC2015/lcms2_DLL/0000755000175000017500000000000013775114656016241 5ustar martimartilcms2-2.12rc1/Projects/VC2015/lcms2_DLL/lcms2_DLL.vcxproj0000644000175000017500000003251013775114656021372 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {8C51BE48-ADB8-4089-A9EC-F6BF993A0548} lcms2_DLL Win32Proj 8.1 DynamicLibrary Unicode true v140 DynamicLibrary Unicode true v140 DynamicLibrary Unicode v140 DynamicLibrary Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset lcms2 lcms2 lcms2 lcms2 Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 true false ..\..\..\src\lcms2.def true Windows MachineX86 Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 true false true Windows $(OutDir)$(TargetName)$(TargetExt) Full true Speed true true true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true Level4 true OnlyExplicitInline true ..\..\..\src\lcms2.def true Windows true true MachineX86 true Full true Speed true true true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_WINDOWS;_USRDLL;CMS_DLL_BUILD;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreaded true Level4 true OnlyExplicitInline true true Windows true true true lcms2-2.12rc1/Projects/VC2015/lcms2_DLL/lcms2_DLL.vcxproj.filters0000644000175000017500000001015113775114656023036 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Source Files Resource Files Resource Files Source Files lcms2-2.12rc1/Projects/VC2015/lcms2_static/0000755000175000017500000000000013775114656017115 5ustar martimartilcms2-2.12rc1/Projects/VC2015/lcms2_static/lcms2_static.vcxproj0000644000175000017500000002654413775114656023134 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {71DEDE59-3F1E-486B-A899-4283000F76B5} lcms2_static Win32Proj 8.1 StaticLibrary Unicode true v140 StaticLibrary Unicode true v140 StaticLibrary Unicode v140 StaticLibrary Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\Lib\MS\ ..\..\..\Lib\MS\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ ..\..\..\Lib\MS\ ..\..\..\Lib\MS\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true EnableFastChecks Level4 EditAndContinue true MultiThreadedDebugDLL Disabled ../../../include;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true Default MaxSpeed true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase Speed true false OnlyExplicitInline false true Precise false false true true MaxSpeed true ../../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase Speed true true OnlyExplicitInline false true true true lcms2-2.12rc1/Projects/VC2015/lcms2_static/lcms2_static.vcxproj.filters0000644000175000017500000000737513775114656024604 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Header Files Header Files Source Files lcms2-2.12rc1/Projects/VC2015/lcms2.rc0000644000175000017500000000452613775114656016103 0ustar martimarti// Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Spanish (Spain, International Sort) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN #pragma code_page(1252) ///////////////////////////////////////////////////////////////////////////// // // Version // 1 VERSIONINFO FILEVERSION 2,12,0,0 PRODUCTVERSION 2,12,0,0 FILEFLAGSMASK 0x0L #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "Marti Maria" VALUE "FileDescription", "lcms color engine" VALUE "FileVersion", "2.12.0.0" VALUE "InternalName", "lcms" VALUE "LegalCopyright", "Copyright � Marti Maria 2021" VALUE "OriginalFilename", "lcms2.dll" VALUE "ProductName", "LittleCMS color engine" VALUE "ProductVersion", "2.12.0.0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Spanish (Spain, International Sort) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lcms2-2.12rc1/Projects/VC2015/transicc/0000755000175000017500000000000013775114656016334 5ustar martimartilcms2-2.12rc1/Projects/VC2015/transicc/transicc.vcxproj0000644000175000017500000002531313775114656021563 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {9EE22D66-C849-474C-9ED5-C3E141DAB160} transicc Win32Proj Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/transicc/transicc.vcxproj.filters0000644000175000017500000000242613775114656023232 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Header Files lcms2-2.12rc1/Projects/VC2015/testbed/0000755000175000017500000000000013775114656016160 5ustar martimartilcms2-2.12rc1/Projects/VC2015/testbed/testbed.vcxproj.filters0000644000175000017500000000220113775114656022671 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2015/testbed/testbed.vcxproj0000644000175000017500000002651513775114656021240 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {928A3A2B-46EF-4279-959C-513B3652FF0E} testbed Win32Proj 8.1 Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\testbed\ ..\..\..\testbed\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\testbed\ ..\..\..\testbed\ Disabled ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue true true Console MachineX86 false Disabled ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level3 ProgramDatabase true true Console false Full true Speed true false ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL false true NotSet Level3 ProgramDatabase Cdecl true true true Console true true MachineX86 false true Full true Speed true true ../../../include;../../../src;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded false true NotSet Level3 ProgramDatabase Cdecl true true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/linkicc/0000755000175000017500000000000013775114656016142 5ustar martimartilcms2-2.12rc1/Projects/VC2015/linkicc/linkicc.vcxproj.filters0000644000175000017500000000221213775114656022637 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2015/linkicc/linkicc.vcxproj0000644000175000017500000002506513775114656021203 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {FBFBE1DC-DB84-4BA1-9552-B4780F457849} linkicc Win32Proj 8.1 Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true Console true true {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/resource.h0000644000175000017500000000065613775114656016535 0ustar martimarti//{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by lcms2.rc // // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lcms2-2.12rc1/Projects/VC2015/jpegicc/0000755000175000017500000000000013775114656016132 5ustar martimartilcms2-2.12rc1/Projects/VC2015/jpegicc/jpegicc.vcxproj.filters0000644000175000017500000000236713775114656022632 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2015/jpegicc/jpegicc.vcxproj0000644000175000017500000003067013775114656021161 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {62812507-F926-4968-96A9-17678460AD90} jpegicc Win32Proj Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)\ $(Configuration)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)\ $(Configuration)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset $(IncludePath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(IncludePath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a $(LibraryPath);;C:\code\jpeg-9a Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true libjpeg.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true libjpeg.lib;%(AdditionalDependencies) true Console false Full true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase Speed true true true true libjpeg.lib;%(AdditionalDependencies) true Console true true MachineX86 false true Full true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase Speed true true true libjpeg.lib;%(AdditionalDependencies) true Console true true false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/psicc/0000755000175000017500000000000013775114656015627 5ustar martimartilcms2-2.12rc1/Projects/VC2015/psicc/psicc.vcxproj.filters0000644000175000017500000000220613775114656022014 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/VC2015/psicc/psicc.vcxproj0000644000175000017500000002506113775114656020351 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {EF6A8851-65FE-46F5-B9EF-14F0B671F693} psicc Win32Proj 8.1 Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true true Console MachineX86 Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebugDLL Level4 ProgramDatabase true true Console MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true true Console true true MachineX86 true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded true Level4 ProgramDatabase true true Console true true {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/tiffdiff/0000755000175000017500000000000013775114656016307 5ustar martimartilcms2-2.12rc1/Projects/VC2015/tiffdiff/tiffdiff.vcxproj0000644000175000017500000003064613775114656021516 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {75B91835-CCD7-48BE-A606-A9C997D5DBEE} tiffdiff Win32Proj 8.1 Application Unicode true v140 Application Unicode true v140 Application Unicode v140 Application Unicode v140 <_ProjectFileVersion>10.0.21006.1 ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ true true ..\..\..\bin\ ..\..\..\bin\ $(Configuration)_$(Platform)\ $(Configuration)_$(Platform)\ false false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;c:\tiff-4.0.2\libtiff;$(IncludePath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) C:\jpeg-8d;C:\tiff-4.0.2\libtiff;$(LibraryPath) Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level4 EditAndContinue true libtiff.lib;%(AdditionalDependencies) true Console MachineX86 false Disabled ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console false MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true true libtiff.lib;%(AdditionalDependencies) true Console true true MachineX86 $(OutDir)$(TargetName)$(TargetExt) false true MaxSpeed true ../../../include;../../../utils/common;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreadedDLL true Level4 ProgramDatabase true libtiff.lib;%(AdditionalDependencies) true Console true true $(OutDir)$(TargetName)$(TargetExt) false {71dede59-3f1e-486b-a899-4283000f76b5} false lcms2-2.12rc1/Projects/VC2015/tiffdiff/tiffdiff.vcxproj.filters0000644000175000017500000000221113775114656023150 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx Source Files Source Files Source Files lcms2-2.12rc1/Projects/BorlandC_5.5/0000755000175000017500000000000013775114656015761 5ustar martimartilcms2-2.12rc1/Projects/BorlandC_5.5/lcms2.rc0000644000175000017500000000101313775114656017322 0ustar martimarti 1 VERSIONINFO FILEVERSION 2, 12, 0, 0 PRODUCTVERSION 2, 12, 0, 0 FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_DLL { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "CompanyName", "Marti Maria\000\000" VALUE "FileDescription", "lcms color engine\000" VALUE "FileVersion", "2.12\000\000" VALUE "InternalName", "lcms2\000" VALUE "LegalCopyright", "Copyright � Marti Maria 2021\000\000" VALUE "OriginalFilename", "lcms2.dll\000" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x409, 1252 } } lcms2-2.12rc1/Projects/BorlandC_5.5/mklcmsdll.bat0000644000175000017500000000043413775114656020434 0ustar martimarti@echo off echo. echo This will build the littlecms DLL using Borland C 5.5 compiler. echo. echo Press Ctrl-C to abort, or pause bcc32 @lcmsdll.lst if errorlevel 0 ilink32 @lcmsdll.lk if errorlevel 0 brc32 -fe ..\..\bin\lcms2.dll lcms2.rc del *.obj del *.res echo Done! lcms2-2.12rc1/Projects/BorlandC_5.5/lcmsdll.lst0000644000175000017500000000122613775114656020140 0ustar martimarti-5 -C -DCMS_DLL -DCMS_DLL_BUILD -I..\..\include -K -O2 -a8 -d -ff -w -wucp -wsig -wdef -wnod -wamb -OS -RT- -R- -tWM -tWD -w- -x- -c ..\..\src\cmscam02.c ..\..\src\cmscgats.c ..\..\src\cmscnvrt.c ..\..\src\cmserr.c ..\..\src\cmsgamma.c ..\..\src\cmsgmt.c ..\..\src\cmsintrp.c ..\..\src\cmsio0.c ..\..\src\cmsio1.c ..\..\src\cmslut.c ..\..\src\cmsmd5.c ..\..\src\cmsmtrx.c ..\..\src\cmsnamed.c ..\..\src\cmsopt.c ..\..\src\cmspack.c ..\..\src\cmspcs.c ..\..\src\cmsplugin.c ..\..\src\cmsps2.c ..\..\src\cmssamp.c ..\..\src\cmssm.c ..\..\src\cmstypes.c ..\..\src\cmsvirt.c ..\..\src\cmswtpnt.c ..\..\src\cmsxform.c ..\..\src\cmshalf.c ..\..\src\cmsalpha.clcms2-2.12rc1/Projects/BorlandC_5.5/lcmsdll.lk0000644000175000017500000000065113775114656017745 0ustar martimarti/x/aa/c/Tpd C0D32.OBJ+ cmsalpha.obj+ cmscam02.obj+ cmscgats.obj+ cmscnvrt.obj+ cmserr.obj+ cmsgamma.obj+ cmsgmt.obj+ cmshalf.obj+ cmsintrp.obj+ cmsio0.obj+ cmsio1.obj+ cmslut.obj+ cmsmd5.obj+ cmsmtrx.obj+ cmsnamed.obj+ cmsopt.obj+ cmspack.obj+ cmspcs.obj+ cmsplugin.obj+ cmsps2.obj+ cmssamp.obj+ cmssm.obj+ cmstypes.obj+ cmsvirt.obj+ cmswtpnt.obj+ cmsxform.obj ..\..\bin\lcms2.dll cw32mt.lib import32.lib ..\..\src\lcms2.deflcms2-2.12rc1/include/0000755000175000017500000000000013775114656013540 5ustar martimartilcms2-2.12rc1/include/lcms2.h0000644000175000017500000030757713775114656014754 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // // Version 2.12rc1 // #ifndef _lcms2_H // ********** Configuration toggles **************************************** // Uncomment this one if you are using big endian machines // #define CMS_USE_BIG_ENDIAN 1 // Uncomment this one if your compiler/machine does NOT support the // "long long" type. // #define CMS_DONT_USE_INT64 1 // Uncomment this if your compiler doesn't work with fast floor function // #define CMS_DONT_USE_FAST_FLOOR 1 // Uncomment this line if you want lcms to use the black point tag in profile, // if commented, lcms will compute the black point by its own. // It is safer to leave it commented out // #define CMS_USE_PROFILE_BLACK_POINT_TAG 1 // Uncomment this line if you are compiling as C++ and want a C++ API // #define CMS_USE_CPP_API // Uncomment this line if you need strict CGATS syntax. Makes CGATS files to // require "KEYWORD" on undefined identifiers, keep it commented out unless needed // #define CMS_STRICT_CGATS 1 // Uncomment to get rid of the tables for "half" float support // #define CMS_NO_HALF_SUPPORT 1 // Uncomment to get rid of pthreads/windows dependency // #define CMS_NO_PTHREADS 1 // Uncomment this for special windows mutex initialization (see lcms2_internal.h) // #define CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT // Uncomment this to remove the "register" storage class // #define CMS_NO_REGISTER_KEYWORD 1 // ********** End of configuration toggles ****************************** // Needed for streams #include // Needed for portability (C99 per 7.1.2) #include #include #include #ifndef CMS_USE_CPP_API # ifdef __cplusplus extern "C" { # endif #endif // Version/release #define LCMS_VERSION 2120 // I will give the chance of redefining basic types for compilers that are not fully C99 compliant #ifndef CMS_BASIC_TYPES_ALREADY_DEFINED // Base types typedef unsigned char cmsUInt8Number; // That is guaranteed by the C99 spec typedef signed char cmsInt8Number; // That is guaranteed by the C99 spec #if CHAR_BIT != 8 # error "Unable to find 8 bit type, unsupported compiler" #endif // IEEE float storage numbers typedef float cmsFloat32Number; typedef double cmsFloat64Number; // 16-bit base types #if (USHRT_MAX == 65535U) typedef unsigned short cmsUInt16Number; #elif (UINT_MAX == 65535U) typedef unsigned int cmsUInt16Number; #else # error "Unable to find 16 bits unsigned type, unsupported compiler" #endif #if (SHRT_MAX == 32767) typedef short cmsInt16Number; #elif (INT_MAX == 32767) typedef int cmsInt16Number; #else # error "Unable to find 16 bits signed type, unsupported compiler" #endif // 32-bit base type #if (UINT_MAX == 4294967295U) typedef unsigned int cmsUInt32Number; #elif (ULONG_MAX == 4294967295U) typedef unsigned long cmsUInt32Number; #else # error "Unable to find 32 bit unsigned type, unsupported compiler" #endif #if (INT_MAX == +2147483647) typedef int cmsInt32Number; #elif (LONG_MAX == +2147483647) typedef long cmsInt32Number; #else # error "Unable to find 32 bit signed type, unsupported compiler" #endif // 64-bit base types #ifndef CMS_DONT_USE_INT64 # if (ULONG_MAX == 18446744073709551615U) typedef unsigned long cmsUInt64Number; # elif (ULLONG_MAX == 18446744073709551615U) typedef unsigned long long cmsUInt64Number; # else # define CMS_DONT_USE_INT64 1 # endif # if (LONG_MAX == +9223372036854775807) typedef long cmsInt64Number; # elif (LLONG_MAX == +9223372036854775807) typedef long long cmsInt64Number; # else # define CMS_DONT_USE_INT64 1 # endif #endif #endif // Handle "register" keyword #if defined(CMS_NO_REGISTER_KEYWORD) && !defined(CMS_DLL) && !defined(CMS_DLL_BUILD) # define CMSREGISTER #else # define CMSREGISTER register #endif // In the case 64 bit numbers are not supported by the compiler #ifdef CMS_DONT_USE_INT64 typedef cmsUInt32Number cmsUInt64Number[2]; typedef cmsInt32Number cmsInt64Number[2]; #endif // Derivative types typedef cmsUInt32Number cmsSignature; typedef cmsUInt16Number cmsU8Fixed8Number; typedef cmsInt32Number cmsS15Fixed16Number; typedef cmsUInt32Number cmsU16Fixed16Number; // Boolean type, which will be using the native integer typedef int cmsBool; // Try to detect windows #if defined (_WIN32) || defined(_WIN64) || defined(WIN32) || defined(_WIN32_) # define CMS_IS_WINDOWS_ 1 #endif #ifdef _MSC_VER # define CMS_IS_WINDOWS_ 1 #endif #ifdef __BORLANDC__ # define CMS_IS_WINDOWS_ 1 #endif // Try to detect big endian platforms. This list can be endless, so primarily rely on the configure script // on Unix-like systems, and allow it to be set on the compiler command line using // -DCMS_USE_BIG_ENDIAN or something similar #ifdef CMS_USE_BIG_ENDIAN // set at compiler command line takes overall precedence # if CMS_USE_BIG_ENDIAN == 0 # undef CMS_USE_BIG_ENDIAN # endif #else // CMS_USE_BIG_ENDIAN # ifdef WORDS_BIGENDIAN // set by configure (or explicitly on compiler command line) # define CMS_USE_BIG_ENDIAN 1 # else // WORDS_BIGENDIAN // Fall back to platform/compiler specific tests # if defined(__sgi__) || defined(__sgi) || defined(sparc) # define CMS_USE_BIG_ENDIAN 1 # endif # if defined(__s390__) || defined(__s390x__) # define CMS_USE_BIG_ENDIAN 1 # endif # ifdef macintosh # ifdef __BIG_ENDIAN__ # define CMS_USE_BIG_ENDIAN 1 # endif # ifdef __LITTLE_ENDIAN__ # undef CMS_USE_BIG_ENDIAN # endif # endif # endif // WORDS_BIGENDIAN # if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) # define CMS_USE_BIG_ENDIAN 1 # endif #endif // CMS_USE_BIG_ENDIAN // Calling convention -- this is hardly platform and compiler dependent #ifdef CMS_IS_WINDOWS_ # if defined(CMS_DLL) || defined(CMS_DLL_BUILD) # ifdef __BORLANDC__ # define CMSEXPORT __stdcall _export # define CMSAPI # else # define CMSEXPORT __stdcall # ifdef CMS_DLL_BUILD # define CMSAPI __declspec(dllexport) # else # define CMSAPI __declspec(dllimport) # endif # endif # else # define CMSEXPORT # define CMSAPI # endif #else // not Windows # ifdef HAVE_FUNC_ATTRIBUTE_VISIBILITY # define CMSEXPORT # define CMSAPI __attribute__((visibility("default"))) # else # define CMSEXPORT # define CMSAPI # endif #endif // CMS_IS_WINDOWS_ #ifdef HasTHREADS # if HasTHREADS == 1 # undef CMS_NO_PTHREADS # else # define CMS_NO_PTHREADS 1 # endif #endif // Some common definitions #define cmsMAX_PATH 256 #ifndef FALSE # define FALSE 0 #endif #ifndef TRUE # define TRUE 1 #endif // D50 XYZ normalized to Y=1.0 #define cmsD50X 0.9642 #define cmsD50Y 1.0 #define cmsD50Z 0.8249 // V4 perceptual black #define cmsPERCEPTUAL_BLACK_X 0.00336 #define cmsPERCEPTUAL_BLACK_Y 0.0034731 #define cmsPERCEPTUAL_BLACK_Z 0.00287 // Definitions in ICC spec #define cmsMagicNumber 0x61637370 // 'acsp' #define lcmsSignature 0x6c636d73 // 'lcms' // Base ICC type definitions typedef enum { cmsSigChromaticityType = 0x6368726D, // 'chrm' cmsSigColorantOrderType = 0x636C726F, // 'clro' cmsSigColorantTableType = 0x636C7274, // 'clrt' cmsSigCrdInfoType = 0x63726469, // 'crdi' cmsSigCurveType = 0x63757276, // 'curv' cmsSigDataType = 0x64617461, // 'data' cmsSigDictType = 0x64696374, // 'dict' cmsSigDateTimeType = 0x6474696D, // 'dtim' cmsSigDeviceSettingsType = 0x64657673, // 'devs' cmsSigLut16Type = 0x6d667432, // 'mft2' cmsSigLut8Type = 0x6d667431, // 'mft1' cmsSigLutAtoBType = 0x6d414220, // 'mAB ' cmsSigLutBtoAType = 0x6d424120, // 'mBA ' cmsSigMeasurementType = 0x6D656173, // 'meas' cmsSigMultiLocalizedUnicodeType = 0x6D6C7563, // 'mluc' cmsSigMultiProcessElementType = 0x6D706574, // 'mpet' cmsSigNamedColorType = 0x6E636f6C, // 'ncol' -- DEPRECATED! cmsSigNamedColor2Type = 0x6E636C32, // 'ncl2' cmsSigParametricCurveType = 0x70617261, // 'para' cmsSigProfileSequenceDescType = 0x70736571, // 'pseq' cmsSigProfileSequenceIdType = 0x70736964, // 'psid' cmsSigResponseCurveSet16Type = 0x72637332, // 'rcs2' cmsSigS15Fixed16ArrayType = 0x73663332, // 'sf32' cmsSigScreeningType = 0x7363726E, // 'scrn' cmsSigSignatureType = 0x73696720, // 'sig ' cmsSigTextType = 0x74657874, // 'text' cmsSigTextDescriptionType = 0x64657363, // 'desc' cmsSigU16Fixed16ArrayType = 0x75663332, // 'uf32' cmsSigUcrBgType = 0x62666420, // 'bfd ' cmsSigUInt16ArrayType = 0x75693136, // 'ui16' cmsSigUInt32ArrayType = 0x75693332, // 'ui32' cmsSigUInt64ArrayType = 0x75693634, // 'ui64' cmsSigUInt8ArrayType = 0x75693038, // 'ui08' cmsSigVcgtType = 0x76636774, // 'vcgt' cmsSigViewingConditionsType = 0x76696577, // 'view' cmsSigXYZType = 0x58595A20 // 'XYZ ' } cmsTagTypeSignature; // Base ICC tag definitions typedef enum { cmsSigAToB0Tag = 0x41324230, // 'A2B0' cmsSigAToB1Tag = 0x41324231, // 'A2B1' cmsSigAToB2Tag = 0x41324232, // 'A2B2' cmsSigBlueColorantTag = 0x6258595A, // 'bXYZ' cmsSigBlueMatrixColumnTag = 0x6258595A, // 'bXYZ' cmsSigBlueTRCTag = 0x62545243, // 'bTRC' cmsSigBToA0Tag = 0x42324130, // 'B2A0' cmsSigBToA1Tag = 0x42324131, // 'B2A1' cmsSigBToA2Tag = 0x42324132, // 'B2A2' cmsSigCalibrationDateTimeTag = 0x63616C74, // 'calt' cmsSigCharTargetTag = 0x74617267, // 'targ' cmsSigChromaticAdaptationTag = 0x63686164, // 'chad' cmsSigChromaticityTag = 0x6368726D, // 'chrm' cmsSigColorantOrderTag = 0x636C726F, // 'clro' cmsSigColorantTableTag = 0x636C7274, // 'clrt' cmsSigColorantTableOutTag = 0x636C6F74, // 'clot' cmsSigColorimetricIntentImageStateTag = 0x63696973, // 'ciis' cmsSigCopyrightTag = 0x63707274, // 'cprt' cmsSigCrdInfoTag = 0x63726469, // 'crdi' cmsSigDataTag = 0x64617461, // 'data' cmsSigDateTimeTag = 0x6474696D, // 'dtim' cmsSigDeviceMfgDescTag = 0x646D6E64, // 'dmnd' cmsSigDeviceModelDescTag = 0x646D6464, // 'dmdd' cmsSigDeviceSettingsTag = 0x64657673, // 'devs' cmsSigDToB0Tag = 0x44324230, // 'D2B0' cmsSigDToB1Tag = 0x44324231, // 'D2B1' cmsSigDToB2Tag = 0x44324232, // 'D2B2' cmsSigDToB3Tag = 0x44324233, // 'D2B3' cmsSigBToD0Tag = 0x42324430, // 'B2D0' cmsSigBToD1Tag = 0x42324431, // 'B2D1' cmsSigBToD2Tag = 0x42324432, // 'B2D2' cmsSigBToD3Tag = 0x42324433, // 'B2D3' cmsSigGamutTag = 0x67616D74, // 'gamt' cmsSigGrayTRCTag = 0x6b545243, // 'kTRC' cmsSigGreenColorantTag = 0x6758595A, // 'gXYZ' cmsSigGreenMatrixColumnTag = 0x6758595A, // 'gXYZ' cmsSigGreenTRCTag = 0x67545243, // 'gTRC' cmsSigLuminanceTag = 0x6C756d69, // 'lumi' cmsSigMeasurementTag = 0x6D656173, // 'meas' cmsSigMediaBlackPointTag = 0x626B7074, // 'bkpt' cmsSigMediaWhitePointTag = 0x77747074, // 'wtpt' cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' // Deprecated by the ICC cmsSigNamedColor2Tag = 0x6E636C32, // 'ncl2' cmsSigOutputResponseTag = 0x72657370, // 'resp' cmsSigPerceptualRenderingIntentGamutTag = 0x72696730, // 'rig0' cmsSigPreview0Tag = 0x70726530, // 'pre0' cmsSigPreview1Tag = 0x70726531, // 'pre1' cmsSigPreview2Tag = 0x70726532, // 'pre2' cmsSigProfileDescriptionTag = 0x64657363, // 'desc' cmsSigProfileDescriptionMLTag = 0x6473636d, // 'dscm' cmsSigProfileSequenceDescTag = 0x70736571, // 'pseq' cmsSigProfileSequenceIdTag = 0x70736964, // 'psid' cmsSigPs2CRD0Tag = 0x70736430, // 'psd0' cmsSigPs2CRD1Tag = 0x70736431, // 'psd1' cmsSigPs2CRD2Tag = 0x70736432, // 'psd2' cmsSigPs2CRD3Tag = 0x70736433, // 'psd3' cmsSigPs2CSATag = 0x70733273, // 'ps2s' cmsSigPs2RenderingIntentTag = 0x70733269, // 'ps2i' cmsSigRedColorantTag = 0x7258595A, // 'rXYZ' cmsSigRedMatrixColumnTag = 0x7258595A, // 'rXYZ' cmsSigRedTRCTag = 0x72545243, // 'rTRC' cmsSigSaturationRenderingIntentGamutTag = 0x72696732, // 'rig2' cmsSigScreeningDescTag = 0x73637264, // 'scrd' cmsSigScreeningTag = 0x7363726E, // 'scrn' cmsSigTechnologyTag = 0x74656368, // 'tech' cmsSigUcrBgTag = 0x62666420, // 'bfd ' cmsSigViewingCondDescTag = 0x76756564, // 'vued' cmsSigViewingConditionsTag = 0x76696577, // 'view' cmsSigVcgtTag = 0x76636774, // 'vcgt' cmsSigMetaTag = 0x6D657461, // 'meta' cmsSigArgyllArtsTag = 0x61727473 // 'arts' } cmsTagSignature; // ICC Technology tag typedef enum { cmsSigDigitalCamera = 0x6463616D, // 'dcam' cmsSigFilmScanner = 0x6673636E, // 'fscn' cmsSigReflectiveScanner = 0x7273636E, // 'rscn' cmsSigInkJetPrinter = 0x696A6574, // 'ijet' cmsSigThermalWaxPrinter = 0x74776178, // 'twax' cmsSigElectrophotographicPrinter = 0x6570686F, // 'epho' cmsSigElectrostaticPrinter = 0x65737461, // 'esta' cmsSigDyeSublimationPrinter = 0x64737562, // 'dsub' cmsSigPhotographicPaperPrinter = 0x7270686F, // 'rpho' cmsSigFilmWriter = 0x6670726E, // 'fprn' cmsSigVideoMonitor = 0x7669646D, // 'vidm' cmsSigVideoCamera = 0x76696463, // 'vidc' cmsSigProjectionTelevision = 0x706A7476, // 'pjtv' cmsSigCRTDisplay = 0x43525420, // 'CRT ' cmsSigPMDisplay = 0x504D4420, // 'PMD ' cmsSigAMDisplay = 0x414D4420, // 'AMD ' cmsSigPhotoCD = 0x4B504344, // 'KPCD' cmsSigPhotoImageSetter = 0x696D6773, // 'imgs' cmsSigGravure = 0x67726176, // 'grav' cmsSigOffsetLithography = 0x6F666673, // 'offs' cmsSigSilkscreen = 0x73696C6B, // 'silk' cmsSigFlexography = 0x666C6578, // 'flex' cmsSigMotionPictureFilmScanner = 0x6D706673, // 'mpfs' cmsSigMotionPictureFilmRecorder = 0x6D706672, // 'mpfr' cmsSigDigitalMotionPictureCamera = 0x646D7063, // 'dmpc' cmsSigDigitalCinemaProjector = 0x64636A70 // 'dcpj' } cmsTechnologySignature; // ICC Color spaces typedef enum { cmsSigXYZData = 0x58595A20, // 'XYZ ' cmsSigLabData = 0x4C616220, // 'Lab ' cmsSigLuvData = 0x4C757620, // 'Luv ' cmsSigYCbCrData = 0x59436272, // 'YCbr' cmsSigYxyData = 0x59787920, // 'Yxy ' cmsSigRgbData = 0x52474220, // 'RGB ' cmsSigGrayData = 0x47524159, // 'GRAY' cmsSigHsvData = 0x48535620, // 'HSV ' cmsSigHlsData = 0x484C5320, // 'HLS ' cmsSigCmykData = 0x434D594B, // 'CMYK' cmsSigCmyData = 0x434D5920, // 'CMY ' cmsSigMCH1Data = 0x4D434831, // 'MCH1' cmsSigMCH2Data = 0x4D434832, // 'MCH2' cmsSigMCH3Data = 0x4D434833, // 'MCH3' cmsSigMCH4Data = 0x4D434834, // 'MCH4' cmsSigMCH5Data = 0x4D434835, // 'MCH5' cmsSigMCH6Data = 0x4D434836, // 'MCH6' cmsSigMCH7Data = 0x4D434837, // 'MCH7' cmsSigMCH8Data = 0x4D434838, // 'MCH8' cmsSigMCH9Data = 0x4D434839, // 'MCH9' cmsSigMCHAData = 0x4D434841, // 'MCHA' cmsSigMCHBData = 0x4D434842, // 'MCHB' cmsSigMCHCData = 0x4D434843, // 'MCHC' cmsSigMCHDData = 0x4D434844, // 'MCHD' cmsSigMCHEData = 0x4D434845, // 'MCHE' cmsSigMCHFData = 0x4D434846, // 'MCHF' cmsSigNamedData = 0x6e6d636c, // 'nmcl' cmsSig1colorData = 0x31434C52, // '1CLR' cmsSig2colorData = 0x32434C52, // '2CLR' cmsSig3colorData = 0x33434C52, // '3CLR' cmsSig4colorData = 0x34434C52, // '4CLR' cmsSig5colorData = 0x35434C52, // '5CLR' cmsSig6colorData = 0x36434C52, // '6CLR' cmsSig7colorData = 0x37434C52, // '7CLR' cmsSig8colorData = 0x38434C52, // '8CLR' cmsSig9colorData = 0x39434C52, // '9CLR' cmsSig10colorData = 0x41434C52, // 'ACLR' cmsSig11colorData = 0x42434C52, // 'BCLR' cmsSig12colorData = 0x43434C52, // 'CCLR' cmsSig13colorData = 0x44434C52, // 'DCLR' cmsSig14colorData = 0x45434C52, // 'ECLR' cmsSig15colorData = 0x46434C52, // 'FCLR' cmsSigLuvKData = 0x4C75764B // 'LuvK' } cmsColorSpaceSignature; // ICC Profile Class typedef enum { cmsSigInputClass = 0x73636E72, // 'scnr' cmsSigDisplayClass = 0x6D6E7472, // 'mntr' cmsSigOutputClass = 0x70727472, // 'prtr' cmsSigLinkClass = 0x6C696E6B, // 'link' cmsSigAbstractClass = 0x61627374, // 'abst' cmsSigColorSpaceClass = 0x73706163, // 'spac' cmsSigNamedColorClass = 0x6e6d636c // 'nmcl' } cmsProfileClassSignature; // ICC Platforms typedef enum { cmsSigMacintosh = 0x4150504C, // 'APPL' cmsSigMicrosoft = 0x4D534654, // 'MSFT' cmsSigSolaris = 0x53554E57, // 'SUNW' cmsSigSGI = 0x53474920, // 'SGI ' cmsSigTaligent = 0x54474E54, // 'TGNT' cmsSigUnices = 0x2A6E6978 // '*nix' // From argyll -- Not official } cmsPlatformSignature; // Reference gamut #define cmsSigPerceptualReferenceMediumGamut 0x70726d67 //'prmg' // For cmsSigColorimetricIntentImageStateTag #define cmsSigSceneColorimetryEstimates 0x73636F65 //'scoe' #define cmsSigSceneAppearanceEstimates 0x73617065 //'sape' #define cmsSigFocalPlaneColorimetryEstimates 0x66706365 //'fpce' #define cmsSigReflectionHardcopyOriginalColorimetry 0x72686F63 //'rhoc' #define cmsSigReflectionPrintOutputColorimetry 0x72706F63 //'rpoc' // Multi process elements types typedef enum { cmsSigCurveSetElemType = 0x63767374, //'cvst' cmsSigMatrixElemType = 0x6D617466, //'matf' cmsSigCLutElemType = 0x636C7574, //'clut' cmsSigBAcsElemType = 0x62414353, // 'bACS' cmsSigEAcsElemType = 0x65414353, // 'eACS' // Custom from here, not in the ICC Spec cmsSigXYZ2LabElemType = 0x6C327820, // 'l2x ' cmsSigLab2XYZElemType = 0x78326C20, // 'x2l ' cmsSigNamedColorElemType = 0x6E636C20, // 'ncl ' cmsSigLabV2toV4 = 0x32203420, // '2 4 ' cmsSigLabV4toV2 = 0x34203220, // '4 2 ' // Identities cmsSigIdentityElemType = 0x69646E20, // 'idn ' // Float to floatPCS cmsSigLab2FloatPCS = 0x64326C20, // 'd2l ' cmsSigFloatPCS2Lab = 0x6C326420, // 'l2d ' cmsSigXYZ2FloatPCS = 0x64327820, // 'd2x ' cmsSigFloatPCS2XYZ = 0x78326420, // 'x2d ' cmsSigClipNegativesElemType = 0x636c7020 // 'clp ' } cmsStageSignature; // Types of CurveElements typedef enum { cmsSigFormulaCurveSeg = 0x70617266, // 'parf' cmsSigSampledCurveSeg = 0x73616D66, // 'samf' cmsSigSegmentedCurve = 0x63757266 // 'curf' } cmsCurveSegSignature; // Used in ResponseCurveType #define cmsSigStatusA 0x53746141 //'StaA' #define cmsSigStatusE 0x53746145 //'StaE' #define cmsSigStatusI 0x53746149 //'StaI' #define cmsSigStatusT 0x53746154 //'StaT' #define cmsSigStatusM 0x5374614D //'StaM' #define cmsSigDN 0x444E2020 //'DN ' #define cmsSigDNP 0x444E2050 //'DN P' #define cmsSigDNN 0x444E4E20 //'DNN ' #define cmsSigDNNP 0x444E4E50 //'DNNP' // Device attributes, currently defined values correspond to the low 4 bytes // of the 8 byte attribute quantity #define cmsReflective 0 #define cmsTransparency 1 #define cmsGlossy 0 #define cmsMatte 2 // Common structures in ICC tags typedef struct { cmsUInt32Number len; cmsUInt32Number flag; cmsUInt8Number data[1]; } cmsICCData; // ICC date time typedef struct { cmsUInt16Number year; cmsUInt16Number month; cmsUInt16Number day; cmsUInt16Number hours; cmsUInt16Number minutes; cmsUInt16Number seconds; } cmsDateTimeNumber; // ICC XYZ typedef struct { cmsS15Fixed16Number X; cmsS15Fixed16Number Y; cmsS15Fixed16Number Z; } cmsEncodedXYZNumber; // Profile ID as computed by MD5 algorithm typedef union { cmsUInt8Number ID8[16]; cmsUInt16Number ID16[8]; cmsUInt32Number ID32[4]; } cmsProfileID; // ---------------------------------------------------------------------------------------------- // ICC profile internal base types. Strictly, shouldn't be declared in this header, but maybe // somebody want to use this info for accessing profile header directly, so here it is. // Profile header -- it is 32-bit aligned, so no issues are expected on alignment typedef struct { cmsUInt32Number size; // Profile size in bytes cmsSignature cmmId; // CMM for this profile cmsUInt32Number version; // Format version number cmsProfileClassSignature deviceClass; // Type of profile cmsColorSpaceSignature colorSpace; // Color space of data cmsColorSpaceSignature pcs; // PCS, XYZ or Lab only cmsDateTimeNumber date; // Date profile was created cmsSignature magic; // Magic Number to identify an ICC profile cmsPlatformSignature platform; // Primary Platform cmsUInt32Number flags; // Various bit settings cmsSignature manufacturer; // Device manufacturer cmsUInt32Number model; // Device model number cmsUInt64Number attributes; // Device attributes cmsUInt32Number renderingIntent;// Rendering intent cmsEncodedXYZNumber illuminant; // Profile illuminant cmsSignature creator; // Profile creator cmsProfileID profileID; // Profile ID using MD5 cmsInt8Number reserved[28]; // Reserved for future use } cmsICCHeader; // ICC base tag typedef struct { cmsTagTypeSignature sig; cmsInt8Number reserved[4]; } cmsTagBase; // A tag entry in directory typedef struct { cmsTagSignature sig; // The tag signature cmsUInt32Number offset; // Start of tag cmsUInt32Number size; // Size in bytes } cmsTagEntry; // ---------------------------------------------------------------------------------------------- // Little CMS specific typedefs typedef void* cmsHANDLE ; // Generic handle typedef void* cmsHPROFILE; // Opaque typedefs to hide internals typedef void* cmsHTRANSFORM; #define cmsMAXCHANNELS 16 // Maximum number of channels in ICC profiles // Format of pixel is defined by one cmsUInt32Number, using bit fields as follows // // 2 1 0 // 3 2 10987 6 5 4 3 2 1 098 7654 321 // A O TTTTT U Y F P X S EEE CCCC BBB // // A: Floating point -- With this flag we can differentiate 16 bits as float and as int // O: Optimized -- previous optimization already returns the final 8-bit value // T: Pixeltype // F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla) // P: Planar? 0=Chunky, 1=Planar // X: swap 16 bps endianness? // S: Do swap? ie, BGR, KYMC // E: Extra samples // C: Channels (Samples per pixel) // B: bytes per sample // Y: Swap first - changes ABGR to BGRA and KCMY to CMYK #define FLOAT_SH(a) ((a) << 22) #define OPTIMIZED_SH(s) ((s) << 21) #define COLORSPACE_SH(s) ((s) << 16) #define SWAPFIRST_SH(s) ((s) << 14) #define FLAVOR_SH(s) ((s) << 13) #define PLANAR_SH(p) ((p) << 12) #define ENDIAN16_SH(e) ((e) << 11) #define DOSWAP_SH(e) ((e) << 10) #define EXTRA_SH(e) ((e) << 7) #define CHANNELS_SH(c) ((c) << 3) #define BYTES_SH(b) (b) // These macros unpack format specifiers into integers #define T_FLOAT(a) (((a)>>22)&1) #define T_OPTIMIZED(o) (((o)>>21)&1) #define T_COLORSPACE(s) (((s)>>16)&31) #define T_SWAPFIRST(s) (((s)>>14)&1) #define T_FLAVOR(s) (((s)>>13)&1) #define T_PLANAR(p) (((p)>>12)&1) #define T_ENDIAN16(e) (((e)>>11)&1) #define T_DOSWAP(e) (((e)>>10)&1) #define T_EXTRA(e) (((e)>>7)&7) #define T_CHANNELS(c) (((c)>>3)&15) #define T_BYTES(b) ((b)&7) // Pixel types #define PT_ANY 0 // Don't check colorspace // 1 & 2 are reserved #define PT_GRAY 3 #define PT_RGB 4 #define PT_CMY 5 #define PT_CMYK 6 #define PT_YCbCr 7 #define PT_YUV 8 // Lu'v' #define PT_XYZ 9 #define PT_Lab 10 #define PT_YUVK 11 // Lu'v'K #define PT_HSV 12 #define PT_HLS 13 #define PT_Yxy 14 #define PT_MCH1 15 #define PT_MCH2 16 #define PT_MCH3 17 #define PT_MCH4 18 #define PT_MCH5 19 #define PT_MCH6 20 #define PT_MCH7 21 #define PT_MCH8 22 #define PT_MCH9 23 #define PT_MCH10 24 #define PT_MCH11 25 #define PT_MCH12 26 #define PT_MCH13 27 #define PT_MCH14 28 #define PT_MCH15 29 #define PT_LabV2 30 // Identical to PT_Lab, but using the V2 old encoding // Some (not all!) representations #ifndef TYPE_RGB_8 // TYPE_RGB_8 is a very common identifier, so don't include ours // if user has it already defined. #define TYPE_GRAY_8 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)) #define TYPE_GRAY_8_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1)) #define TYPE_GRAY_16 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)) #define TYPE_GRAY_16_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1)) #define TYPE_GRAY_16_SE (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_GRAYA_8 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)) #define TYPE_GRAYA_16 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)) #define TYPE_GRAYA_16_SE (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_GRAYA_8_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_GRAYA_16_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_RGB_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_RGB_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_BGR_8 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_BGR_8_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) #define TYPE_RGB_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_RGB_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_RGB_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_BGR_16 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_BGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) #define TYPE_BGR_16_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_RGBA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_RGBA_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_RGBA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_RGBA_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_RGBA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_ARGB_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)) #define TYPE_ARGB_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)|PLANAR_SH(1)) #define TYPE_ARGB_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)) #define TYPE_ABGR_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_ABGR_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) #define TYPE_ABGR_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_ABGR_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)) #define TYPE_ABGR_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_BGRA_8 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_BGRA_8_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|PLANAR_SH(1)) #define TYPE_BGRA_16 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_BGRA_16_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_CMY_8 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_CMY_8_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_CMY_16 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_CMY_16_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_CMY_16_SE (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_CMYK_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)) #define TYPE_CMYKA_8 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1)) #define TYPE_CMYK_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)) #define TYPE_YUVK_8 TYPE_CMYK_8_REV #define TYPE_CMYK_8_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_CMYK_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)) #define TYPE_CMYK_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)) #define TYPE_YUVK_16 TYPE_CMYK_16_REV #define TYPE_CMYK_16_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_CMYK_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_KCMY_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1)) #define TYPE_KCMY_8_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) #define TYPE_KCMY_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)) #define TYPE_KCMY_16_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1)) #define TYPE_KCMY_16_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)) #define TYPE_CMYK5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)) #define TYPE_CMYK5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)) #define TYPE_CMYK5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC5_8 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC5_16 (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC5_16_SE (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_CMYK6_8 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)) #define TYPE_CMYK6_8_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_CMYK6_16 (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)) #define TYPE_CMYK6_16_PLANAR (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_CMYK6_16_SE (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_CMYK7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)) #define TYPE_CMYK7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)) #define TYPE_CMYK7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC7_8 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC7_16 (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC7_16_SE (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_CMYK8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)) #define TYPE_CMYK8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)) #define TYPE_CMYK8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC8_8 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC8_16 (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC8_16_SE (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_CMYK9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)) #define TYPE_CMYK9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)) #define TYPE_CMYK9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC9_8 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC9_16 (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC9_16_SE (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_CMYK10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)) #define TYPE_CMYK10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)) #define TYPE_CMYK10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC10_8 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC10_16 (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC10_16_SE (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_CMYK11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)) #define TYPE_CMYK11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)) #define TYPE_CMYK11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC11_8 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC11_16 (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC11_16_SE (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) #define TYPE_CMYK12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)) #define TYPE_CMYK12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)) #define TYPE_CMYK12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|ENDIAN16_SH(1)) #define TYPE_KYMC12_8 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_KYMC12_16 (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_KYMC12_16_SE (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)) // Colorimetric #define TYPE_XYZ_16 (COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_Lab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_LabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_ALab_8 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1)) #define TYPE_ALabV2_8 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1)) #define TYPE_Lab_16 (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_LabV2_16 (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_Yxy_16 (COLORSPACE_SH(PT_Yxy)|CHANNELS_SH(3)|BYTES_SH(2)) // YCbCr #define TYPE_YCbCr_8 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_YCbCr_8_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_YCbCr_16 (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_YCbCr_16_PLANAR (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_YCbCr_16_SE (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) // YUV #define TYPE_YUV_8 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_YUV_8_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_YUV_16 (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_YUV_16_PLANAR (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_YUV_16_SE (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) // HLS #define TYPE_HLS_8 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_HLS_8_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_HLS_16 (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_HLS_16_PLANAR (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_HLS_16_SE (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) // HSV #define TYPE_HSV_8 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)) #define TYPE_HSV_8_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1)) #define TYPE_HSV_16 (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_HSV_16_PLANAR (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)) #define TYPE_HSV_16_SE (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)) // Named color index. Only 16 bits allowed (don't check colorspace) #define TYPE_NAMED_COLOR_INDEX (CHANNELS_SH(1)|BYTES_SH(2)) // Float formatters. #define TYPE_XYZ_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(4)) #define TYPE_Lab_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(4)) #define TYPE_LabA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) #define TYPE_GRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(4)) #define TYPE_RGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)) #define TYPE_RGBA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) #define TYPE_ARGB_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|SWAPFIRST_SH(1)) #define TYPE_BGR_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)) #define TYPE_BGRA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_ABGR_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)) #define TYPE_CMYK_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(4)) // Floating point formatters. // NOTE THAT 'BYTES' FIELD IS SET TO ZERO ON DLB because 8 bytes overflows the bitfield #define TYPE_XYZ_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(0)) #define TYPE_Lab_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(0)) #define TYPE_GRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(0)) #define TYPE_RGB_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)) #define TYPE_BGR_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)|DOSWAP_SH(1)) #define TYPE_CMYK_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(0)) // IEEE 754-2008 "half" #define TYPE_GRAY_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)) #define TYPE_RGB_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_RGBA_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_CMYK_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)) #define TYPE_RGBA_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)) #define TYPE_ARGB_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)) #define TYPE_BGR_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_BGRA_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_ABGR_HALF_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)) #endif // Colorspaces typedef struct { cmsFloat64Number X; cmsFloat64Number Y; cmsFloat64Number Z; } cmsCIEXYZ; typedef struct { cmsFloat64Number x; cmsFloat64Number y; cmsFloat64Number Y; } cmsCIExyY; typedef struct { cmsFloat64Number L; cmsFloat64Number a; cmsFloat64Number b; } cmsCIELab; typedef struct { cmsFloat64Number L; cmsFloat64Number C; cmsFloat64Number h; } cmsCIELCh; typedef struct { cmsFloat64Number J; cmsFloat64Number C; cmsFloat64Number h; } cmsJCh; typedef struct { cmsCIEXYZ Red; cmsCIEXYZ Green; cmsCIEXYZ Blue; } cmsCIEXYZTRIPLE; typedef struct { cmsCIExyY Red; cmsCIExyY Green; cmsCIExyY Blue; } cmsCIExyYTRIPLE; // Illuminant types for structs below #define cmsILLUMINANT_TYPE_UNKNOWN 0x0000000 #define cmsILLUMINANT_TYPE_D50 0x0000001 #define cmsILLUMINANT_TYPE_D65 0x0000002 #define cmsILLUMINANT_TYPE_D93 0x0000003 #define cmsILLUMINANT_TYPE_F2 0x0000004 #define cmsILLUMINANT_TYPE_D55 0x0000005 #define cmsILLUMINANT_TYPE_A 0x0000006 #define cmsILLUMINANT_TYPE_E 0x0000007 #define cmsILLUMINANT_TYPE_F8 0x0000008 typedef struct { cmsUInt32Number Observer; // 0 = unknown, 1=CIE 1931, 2=CIE 1964 cmsCIEXYZ Backing; // Value of backing cmsUInt32Number Geometry; // 0=unknown, 1=45/0, 0/45 2=0d, d/0 cmsFloat64Number Flare; // 0..1.0 cmsUInt32Number IlluminantType; } cmsICCMeasurementConditions; typedef struct { cmsCIEXYZ IlluminantXYZ; // Not the same struct as CAM02, cmsCIEXYZ SurroundXYZ; // This is for storing the tag cmsUInt32Number IlluminantType; // viewing condition } cmsICCViewingConditions; // Get LittleCMS version (for shared objects) ----------------------------------------------------------------------------- CMSAPI int CMSEXPORT cmsGetEncodedCMMversion(void); // Support of non-standard functions -------------------------------------------------------------------------------------- CMSAPI int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2); CMSAPI long int CMSEXPORT cmsfilelength(FILE* f); // Context handling -------------------------------------------------------------------------------------------------------- // Each context holds its owns globals and its own plug-ins. There is a global context with the id = 0 for lecacy compatibility // though using the global context is not recommended. Proper context handling makes lcms more thread-safe. typedef struct _cmsContext_struct* cmsContext; CMSAPI cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData); CMSAPI void CMSEXPORT cmsDeleteContext(cmsContext ContextID); CMSAPI cmsContext CMSEXPORT cmsDupContext(cmsContext ContextID, void* NewUserData); CMSAPI void* CMSEXPORT cmsGetContextUserData(cmsContext ContextID); // Plug-In registering -------------------------------------------------------------------------------------------------- CMSAPI cmsBool CMSEXPORT cmsPlugin(void* Plugin); CMSAPI cmsBool CMSEXPORT cmsPluginTHR(cmsContext ContextID, void* Plugin); CMSAPI void CMSEXPORT cmsUnregisterPlugins(void); CMSAPI void CMSEXPORT cmsUnregisterPluginsTHR(cmsContext ContextID); // Error logging ---------------------------------------------------------------------------------------------------------- // There is no error handling at all. When a function fails, it returns proper value. // For example, all create functions does return NULL on failure. Other may return FALSE. // It may be interesting, for the developer, to know why the function is failing. // for that reason, lcms2 does offer a logging function. This function will get // an ENGLISH string with some clues on what is going wrong. You can show this // info to the end user if you wish, or just create some sort of log on disk. // The logging function should NOT terminate the program, as this obviously can leave // unfreed resources. It is the programmer's responsibility to check each function // return code to make sure it didn't fail. #define cmsERROR_UNDEFINED 0 #define cmsERROR_FILE 1 #define cmsERROR_RANGE 2 #define cmsERROR_INTERNAL 3 #define cmsERROR_NULL 4 #define cmsERROR_READ 5 #define cmsERROR_SEEK 6 #define cmsERROR_WRITE 7 #define cmsERROR_UNKNOWN_EXTENSION 8 #define cmsERROR_COLORSPACE_CHECK 9 #define cmsERROR_ALREADY_DEFINED 10 #define cmsERROR_BAD_SIGNATURE 11 #define cmsERROR_CORRUPTION_DETECTED 12 #define cmsERROR_NOT_SUITABLE 13 // Error logger is called with the ContextID when a message is raised. This gives the // chance to know which thread is responsible of the warning and any environment associated // with it. Non-multithreading applications may safely ignore this parameter. // Note that under certain special circumstances, ContextID may be NULL. typedef void (* cmsLogErrorHandlerFunction)(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text); // Allows user to set any specific logger CMSAPI void CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn); CMSAPI void CMSEXPORT cmsSetLogErrorHandlerTHR(cmsContext ContextID, cmsLogErrorHandlerFunction Fn); // Conversions -------------------------------------------------------------------------------------------------------------- // Returns pointers to constant structs CMSAPI const cmsCIEXYZ* CMSEXPORT cmsD50_XYZ(void); CMSAPI const cmsCIExyY* CMSEXPORT cmsD50_xyY(void); // Colorimetric space conversions CMSAPI void CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source); CMSAPI void CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source); CMSAPI void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz); CMSAPI void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab); CMSAPI void CMSEXPORT cmsLab2LCh(cmsCIELCh*LCh, const cmsCIELab* Lab); CMSAPI void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh); // Encoding /Decoding on PCS CMSAPI void CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); CMSAPI void CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]); CMSAPI void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* Lab); CMSAPI void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* Lab); CMSAPI void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fxyz, const cmsUInt16Number XYZ[3]); CMSAPI void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ); // DeltaE metrics CMSAPI cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); CMSAPI cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); CMSAPI cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2); CMSAPI cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c); CMSAPI cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh); // Temperature <-> Chromaticity (Black body) CMSAPI cmsBool CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number TempK); CMSAPI cmsBool CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint); // Chromatic adaptation CMSAPI cmsBool CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, const cmsCIEXYZ* SourceWhitePt, const cmsCIEXYZ* Illuminant, const cmsCIEXYZ* Value); // CIECAM02 --------------------------------------------------------------------------------------------------- // Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing // conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag // cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions. #define AVG_SURROUND 1 #define DIM_SURROUND 2 #define DARK_SURROUND 3 #define CUTSHEET_SURROUND 4 #define D_CALCULATE (-1) typedef struct { cmsCIEXYZ whitePoint; cmsFloat64Number Yb; cmsFloat64Number La; cmsUInt32Number surround; cmsFloat64Number D_value; } cmsViewingConditions; CMSAPI cmsHANDLE CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC); CMSAPI void CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel); CMSAPI void CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut); CMSAPI void CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn, cmsCIEXYZ* pOut); // Tone curves ----------------------------------------------------------------------------------------- // This describes a curve segment. For a table of supported types, see the manual. User can increase the number of // available types by using a proper plug-in. Parametric segments allow 10 parameters at most typedef struct { cmsFloat32Number x0, x1; // Domain; for x0 < x <= x1 cmsInt32Number Type; // Parametric type, Type == 0 means sampled segment. Negative values are reserved cmsFloat64Number Params[10]; // Parameters if Type != 0 cmsUInt32Number nGridPoints; // Number of grid points if Type == 0 cmsFloat32Number* SampledPoints; // Points to an array of floats if Type == 0 } cmsCurveSegment; // The internal representation is none of your business. typedef struct _cms_curve_struct cmsToneCurve; CMSAPI cmsToneCurve* CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, cmsUInt32Number nSegments, const cmsCurveSegment Segments[]); CMSAPI cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]); CMSAPI cmsToneCurve* CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma); CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsUInt32Number nEntries, const cmsUInt16Number values[]); CMSAPI cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]); CMSAPI void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve); CMSAPI void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]); CMSAPI cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* Src); CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma); CMSAPI cmsToneCurve* CMSEXPORT cmsReverseToneCurveEx(cmsUInt32Number nResultSamples, const cmsToneCurve* InGamma); CMSAPI cmsToneCurve* CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, const cmsToneCurve* X, const cmsToneCurve* Y, cmsUInt32Number nPoints); CMSAPI cmsBool CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda); CMSAPI cmsFloat32Number CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v); CMSAPI cmsUInt16Number CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v); CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* InGamma); CMSAPI cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve); CMSAPI cmsBool CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t); CMSAPI cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t); CMSAPI cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t); CMSAPI cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision); CMSAPI cmsFloat64Number* CMSEXPORT cmsGetToneCurveParams(const cmsToneCurve* t); // Tone curve tabular estimation CMSAPI cmsUInt32Number CMSEXPORT cmsGetToneCurveEstimatedTableEntries(const cmsToneCurve* t); CMSAPI const cmsUInt16Number* CMSEXPORT cmsGetToneCurveEstimatedTable(const cmsToneCurve* t); // Implements pipelines of multi-processing elements ------------------------------------------------------------- // Nothing to see here, move along typedef struct _cmsPipeline_struct cmsPipeline; typedef struct _cmsStage_struct cmsStage; // Those are hi-level pipelines CMSAPI cmsPipeline* CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels); CMSAPI void CMSEXPORT cmsPipelineFree(cmsPipeline* lut); CMSAPI cmsPipeline* CMSEXPORT cmsPipelineDup(const cmsPipeline* Orig); CMSAPI cmsContext CMSEXPORT cmsGetPipelineContextID(const cmsPipeline* lut); CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut); CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut); CMSAPI cmsUInt32Number CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut); CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut); CMSAPI cmsStage* CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut); CMSAPI void CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut); CMSAPI void CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut); CMSAPI cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], cmsFloat32Number Result[], cmsFloat32Number Hint[], const cmsPipeline* lut); CMSAPI cmsBool CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2); CMSAPI cmsBool CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On); // Where to place/locate the stages in the pipeline chain typedef enum { cmsAT_BEGIN, cmsAT_END } cmsStageLoc; CMSAPI cmsBool CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe); CMSAPI void CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe); // This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements // that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and // then a list of expected types followed with a list of double pointers to Stage elements. If // the function founds a match with current pipeline, it fills the pointers and returns TRUE // if not, returns FALSE without touching anything. CMSAPI cmsBool CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...); // Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode // matrices with far more precision that CLUTS CMSAPI cmsStage* CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels); CMSAPI cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]); CMSAPI cmsStage* CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset); CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table); CMSAPI cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table); CMSAPI cmsStage* CMSEXPORT cmsStageDup(cmsStage* mpe); CMSAPI void CMSEXPORT cmsStageFree(cmsStage* mpe); CMSAPI cmsStage* CMSEXPORT cmsStageNext(const cmsStage* mpe); CMSAPI cmsUInt32Number CMSEXPORT cmsStageInputChannels(const cmsStage* mpe); CMSAPI cmsUInt32Number CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe); CMSAPI cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe); CMSAPI void* CMSEXPORT cmsStageData(const cmsStage* mpe); // Sampling typedef cmsInt32Number (* cmsSAMPLER16) (CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo); typedef cmsInt32Number (* cmsSAMPLERFLOAT)(CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], CMSREGISTER void * Cargo); // Use this flag to prevent changes being written to destination #define SAMPLER_INSPECT 0x01000000 // For CLUT only CMSAPI cmsBool CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe, cmsSAMPLER16 Sampler, void* Cargo, cmsUInt32Number dwFlags); CMSAPI cmsBool CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void* Cargo, cmsUInt32Number dwFlags); // Slicers CMSAPI cmsBool CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], cmsSAMPLER16 Sampler, void * Cargo); CMSAPI cmsBool CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], cmsSAMPLERFLOAT Sampler, void * Cargo); // Multilocalized Unicode management --------------------------------------------------------------------------------------- typedef struct _cms_MLU_struct cmsMLU; #define cmsNoLanguage "\0\0" #define cmsNoCountry "\0\0" CMSAPI cmsMLU* CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems); CMSAPI void CMSEXPORT cmsMLUfree(cmsMLU* mlu); CMSAPI cmsMLU* CMSEXPORT cmsMLUdup(const cmsMLU* mlu); CMSAPI cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], const char* ASCIIString); CMSAPI cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], const wchar_t* WideString); CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], char* Buffer, cmsUInt32Number BufferSize); CMSAPI cmsUInt32Number CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], wchar_t* Buffer, cmsUInt32Number BufferSize); CMSAPI cmsBool CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], char ObtainedLanguage[3], char ObtainedCountry[3]); CMSAPI cmsUInt32Number CMSEXPORT cmsMLUtranslationsCount(const cmsMLU* mlu); CMSAPI cmsBool CMSEXPORT cmsMLUtranslationsCodes(const cmsMLU* mlu, cmsUInt32Number idx, char LanguageCode[3], char CountryCode[3]); // Undercolorremoval & black generation ------------------------------------------------------------------------------------- typedef struct { cmsToneCurve* Ucr; cmsToneCurve* Bg; cmsMLU* Desc; } cmsUcrBg; // Screening ---------------------------------------------------------------------------------------------------------------- #define cmsPRINTER_DEFAULT_SCREENS 0x0001 #define cmsFREQUENCE_UNITS_LINES_CM 0x0000 #define cmsFREQUENCE_UNITS_LINES_INCH 0x0002 #define cmsSPOT_UNKNOWN 0 #define cmsSPOT_PRINTER_DEFAULT 1 #define cmsSPOT_ROUND 2 #define cmsSPOT_DIAMOND 3 #define cmsSPOT_ELLIPSE 4 #define cmsSPOT_LINE 5 #define cmsSPOT_SQUARE 6 #define cmsSPOT_CROSS 7 typedef struct { cmsFloat64Number Frequency; cmsFloat64Number ScreenAngle; cmsUInt32Number SpotShape; } cmsScreeningChannel; typedef struct { cmsUInt32Number Flag; cmsUInt32Number nChannels; cmsScreeningChannel Channels[cmsMAXCHANNELS]; } cmsScreening; // Named color ----------------------------------------------------------------------------------------------------------------- typedef struct _cms_NAMEDCOLORLIST_struct cmsNAMEDCOLORLIST; CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, cmsUInt32Number n, cmsUInt32Number ColorantCount, const char* Prefix, const char* Suffix); CMSAPI void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v); CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v); CMSAPI cmsBool CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* v, const char* Name, cmsUInt16Number PCS[3], cmsUInt16Number Colorant[cmsMAXCHANNELS]); CMSAPI cmsUInt32Number CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* v); CMSAPI cmsInt32Number CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* v, const char* Name); CMSAPI cmsBool CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor, char* Name, char* Prefix, char* Suffix, cmsUInt16Number* PCS, cmsUInt16Number* Colorant); // Retrieve named color list from transform CMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform); // Profile sequence ----------------------------------------------------------------------------------------------------- // Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others // come from Profile Sequence Identifier Tag typedef struct { cmsSignature deviceMfg; cmsSignature deviceModel; cmsUInt64Number attributes; cmsTechnologySignature technology; cmsProfileID ProfileID; cmsMLU* Manufacturer; cmsMLU* Model; cmsMLU* Description; } cmsPSEQDESC; typedef struct { cmsUInt32Number n; cmsContext ContextID; cmsPSEQDESC* seq; } cmsSEQ; CMSAPI cmsSEQ* CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n); CMSAPI cmsSEQ* CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq); CMSAPI void CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq); // Dictionaries -------------------------------------------------------------------------------------------------------- typedef struct _cmsDICTentry_struct { struct _cmsDICTentry_struct* Next; cmsMLU *DisplayName; cmsMLU *DisplayValue; wchar_t* Name; wchar_t* Value; } cmsDICTentry; CMSAPI cmsHANDLE CMSEXPORT cmsDictAlloc(cmsContext ContextID); CMSAPI void CMSEXPORT cmsDictFree(cmsHANDLE hDict); CMSAPI cmsHANDLE CMSEXPORT cmsDictDup(cmsHANDLE hDict); CMSAPI cmsBool CMSEXPORT cmsDictAddEntry(cmsHANDLE hDict, const wchar_t* Name, const wchar_t* Value, const cmsMLU *DisplayName, const cmsMLU *DisplayValue); CMSAPI const cmsDICTentry* CMSEXPORT cmsDictGetEntryList(cmsHANDLE hDict); CMSAPI const cmsDICTentry* CMSEXPORT cmsDictNextEntry(const cmsDICTentry* e); // Access to Profile data ---------------------------------------------------------------------------------------------- CMSAPI cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID); CMSAPI cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile); CMSAPI cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile); CMSAPI cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n); CMSAPI cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig); // Read and write pre-formatted data CMSAPI void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig); CMSAPI cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data); CMSAPI cmsBool CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest); CMSAPI cmsTagSignature CMSEXPORT cmsTagLinkedTo(cmsHPROFILE hProfile, cmsTagSignature sig); // Read and write raw data CMSAPI cmsUInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* Buffer, cmsUInt32Number BufferSize); CMSAPI cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size); // Access header data #define cmsEmbeddedProfileFalse 0x00000000 #define cmsEmbeddedProfileTrue 0x00000001 #define cmsUseAnywhere 0x00000000 #define cmsUseWithEmbeddedDataOnly 0x00000002 CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags); CMSAPI void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); CMSAPI cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest); CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags); CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer); CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderCreator(cmsHPROFILE hProfile); CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model); CMSAPI void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags); CMSAPI void CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID); CMSAPI void CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent); CMSAPI cmsColorSpaceSignature CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs); CMSAPI cmsColorSpaceSignature CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig); CMSAPI cmsProfileClassSignature CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig); CMSAPI void CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version); CMSAPI cmsFloat64Number CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile); CMSAPI cmsUInt32Number CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version); // How profiles may be used #define LCMS_USED_AS_INPUT 0 #define LCMS_USED_AS_OUTPUT 1 #define LCMS_USED_AS_PROOF 2 CMSAPI cmsBool CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection); CMSAPI cmsBool CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile); CMSAPI cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection); // Translate form/to our notation to ICC CMSAPI cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation); CMSAPI int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace); CMSAPI cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace); // Build a suitable formatter for the colorspace of this profile. nBytes=1 means 8 bits, nBytes=2 means 16 bits. CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat); // Localized info typedef enum { cmsInfoDescription = 0, cmsInfoManufacturer = 1, cmsInfoModel = 2, cmsInfoCopyright = 3 } cmsInfoType; CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info, const char LanguageCode[3], const char CountryCode[3], wchar_t* Buffer, cmsUInt32Number BufferSize); CMSAPI cmsUInt32Number CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info, const char LanguageCode[3], const char CountryCode[3], char* Buffer, cmsUInt32Number BufferSize); // IO handlers ---------------------------------------------------------------------------------------------------------- typedef struct _cms_io_handler cmsIOHANDLER; CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode); CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream); CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode); CMSAPI cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID); CMSAPI cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile); CMSAPI cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io); // MD5 message digest -------------------------------------------------------------------------------------------------- CMSAPI cmsBool CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile); // Profile high level functions ------------------------------------------------------------------------------------------ CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *ICCProfile, const char *sAccess); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char* sAccess); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMem(const void * MemPtr, cmsUInt32Number dwSize); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void * MemPtr, cmsUInt32Number dwSize); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io); CMSAPI cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandler2THR(cmsContext ContextID, cmsIOHANDLER* io, cmsBool write); CMSAPI cmsBool CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile); CMSAPI cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName); CMSAPI cmsBool CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream); CMSAPI cmsBool CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded); CMSAPI cmsUInt32Number CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io); // Predefined virtual profiles ------------------------------------------------------------------------------------------ CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint, const cmsCIExyYTRIPLE* Primaries, cmsToneCurve* const TransferFunction[3]); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint, const cmsCIExyYTRIPLE* Primaries, cmsToneCurve* const TransferFunction[3]); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint, const cmsToneCurve* TransferFunction); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint, const cmsToneCurve* TransferFunction); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID, cmsColorSpaceSignature ColorSpace, cmsToneCurve* const TransferFunctions[]); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace, cmsToneCurve* const TransferFunctions[]); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID, cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateXYZProfile(void); CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID); CMSAPI cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfile(void); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID, cmsUInt32Number nLUTPoints, cmsFloat64Number Bright, cmsFloat64Number Contrast, cmsFloat64Number Hue, cmsFloat64Number Saturation, cmsUInt32Number TempSrc, cmsUInt32Number TempDest); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfile(cmsUInt32Number nLUTPoints, cmsFloat64Number Bright, cmsFloat64Number Contrast, cmsFloat64Number Hue, cmsFloat64Number Saturation, cmsUInt32Number TempSrc, cmsUInt32Number TempDest); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID); CMSAPI cmsHPROFILE CMSEXPORT cmsCreateNULLProfile(void); // Converts a transform to a devicelink profile CMSAPI cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags); // Intents ---------------------------------------------------------------------------------------------- // ICC Intents #define INTENT_PERCEPTUAL 0 #define INTENT_RELATIVE_COLORIMETRIC 1 #define INTENT_SATURATION 2 #define INTENT_ABSOLUTE_COLORIMETRIC 3 // Non-ICC intents #define INTENT_PRESERVE_K_ONLY_PERCEPTUAL 10 #define INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC 11 #define INTENT_PRESERVE_K_ONLY_SATURATION 12 #define INTENT_PRESERVE_K_PLANE_PERCEPTUAL 13 #define INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC 14 #define INTENT_PRESERVE_K_PLANE_SATURATION 15 // Call with NULL as parameters to get the intent count CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions); CMSAPI cmsUInt32Number CMSEXPORT cmsGetSupportedIntentsTHR(cmsContext ContextID, cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions); // Flags #define cmsFLAGS_NOCACHE 0x0040 // Inhibit 1-pixel cache #define cmsFLAGS_NOOPTIMIZE 0x0100 // Inhibit optimizations #define cmsFLAGS_NULLTRANSFORM 0x0200 // Don't transform anyway // Proofing flags #define cmsFLAGS_GAMUTCHECK 0x1000 // Out of Gamut alarm #define cmsFLAGS_SOFTPROOFING 0x4000 // Do softproofing // Misc #define cmsFLAGS_BLACKPOINTCOMPENSATION 0x2000 #define cmsFLAGS_NOWHITEONWHITEFIXUP 0x0004 // Don't fix scum dot #define cmsFLAGS_HIGHRESPRECALC 0x0400 // Use more memory to give better accuracy #define cmsFLAGS_LOWRESPRECALC 0x0800 // Use less memory to minimize resources // For devicelink creation #define cmsFLAGS_8BITS_DEVICELINK 0x0008 // Create 8 bits devicelinks #define cmsFLAGS_GUESSDEVICECLASS 0x0020 // Guess device class (for transform2devicelink) #define cmsFLAGS_KEEP_SEQUENCE 0x0080 // Keep profile sequence for devicelink creation // Specific to a particular optimizations #define cmsFLAGS_FORCE_CLUT 0x0002 // Force CLUT optimization #define cmsFLAGS_CLUT_POST_LINEARIZATION 0x0001 // create postlinearization tables if possible #define cmsFLAGS_CLUT_PRE_LINEARIZATION 0x0010 // create prelinearization tables if possible // Specific to unbounded mode #define cmsFLAGS_NONEGATIVES 0x8000 // Prevent negative numbers in floating point transforms // Copy alpha channels when transforming #define cmsFLAGS_COPY_ALPHA 0x04000000 // Alpha channels are copied on cmsDoTransform() // Fine-tune control over number of gridpoints #define cmsFLAGS_GRIDPOINTS(n) (((n) & 0xFF) << 16) // CRD special #define cmsFLAGS_NODEFAULTRESOURCEDEF 0x01000000 // Transforms --------------------------------------------------------------------------------------------------- CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID, cmsHPROFILE Input, cmsUInt32Number InputFormat, cmsHPROFILE Output, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags); CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransform(cmsHPROFILE Input, cmsUInt32Number InputFormat, cmsHPROFILE Output, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags); CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID, cmsHPROFILE Input, cmsUInt32Number InputFormat, cmsHPROFILE Output, cmsUInt32Number OutputFormat, cmsHPROFILE Proofing, cmsUInt32Number Intent, cmsUInt32Number ProofingIntent, cmsUInt32Number dwFlags); CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE Input, cmsUInt32Number InputFormat, cmsHPROFILE Output, cmsUInt32Number OutputFormat, cmsHPROFILE Proofing, cmsUInt32Number Intent, cmsUInt32Number ProofingIntent, cmsUInt32Number dwFlags); CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID, cmsHPROFILE hProfiles[], cmsUInt32Number nProfiles, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags); CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[], cmsUInt32Number nProfiles, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags); CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID, cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], cmsBool BPC[], cmsUInt32Number Intents[], cmsFloat64Number AdaptationStates[], cmsHPROFILE hGamutProfile, cmsUInt32Number nGamutPCSposition, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number dwFlags); CMSAPI void CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform); CMSAPI void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, const void * InputBuffer, void * OutputBuffer, cmsUInt32Number Size); CMSAPI void CMSEXPORT cmsDoTransformStride(cmsHTRANSFORM Transform, // Deprecated const void * InputBuffer, void * OutputBuffer, cmsUInt32Number Size, cmsUInt32Number Stride); CMSAPI void CMSEXPORT cmsDoTransformLineStride(cmsHTRANSFORM Transform, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, cmsUInt32Number BytesPerLineIn, cmsUInt32Number BytesPerLineOut, cmsUInt32Number BytesPerPlaneIn, cmsUInt32Number BytesPerPlaneOut); CMSAPI void CMSEXPORT cmsSetAlarmCodes(const cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); CMSAPI void CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]); CMSAPI void CMSEXPORT cmsSetAlarmCodesTHR(cmsContext ContextID, const cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]); CMSAPI void CMSEXPORT cmsGetAlarmCodesTHR(cmsContext ContextID, cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]); // Adaptation state for absolute colorimetric intent CMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d); CMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationStateTHR(cmsContext ContextID, cmsFloat64Number d); // Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed CMSAPI cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform); // Grab the input/output formats CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform); CMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform); // For backwards compatibility CMSAPI cmsBool CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat); // PostScript ColorRenderingDictionary and ColorSpaceArray ---------------------------------------------------- typedef enum { cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD } cmsPSResourceType; // lcms2 unified method to access postscript color resources CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID, cmsPSResourceType Type, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, cmsIOHANDLER* io); CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); CMSAPI cmsUInt32Number CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen); // IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- CMSAPI cmsHANDLE CMSEXPORT cmsIT8Alloc(cmsContext ContextID); CMSAPI void CMSEXPORT cmsIT8Free(cmsHANDLE hIT8); // Tables CMSAPI cmsUInt32Number CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8); CMSAPI cmsInt32Number CMSEXPORT cmsIT8SetTable(cmsHANDLE hIT8, cmsUInt32Number nTable); // Persistence CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName); CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, const void *Ptr, cmsUInt32Number len); // CMSAPI cmsHANDLE CMSEXPORT cmsIT8LoadFromIOhandler(cmsContext ContextID, cmsIOHANDLER* io); CMSAPI cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName); CMSAPI cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded); // Properties CMSAPI const char* CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8); CMSAPI cmsBool CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type); CMSAPI cmsBool CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* cComment); CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* cProp, const char *Str); CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val); CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val); CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char* SubKey, const char *Buffer); CMSAPI cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer); CMSAPI const char* CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* cProp); CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp); CMSAPI const char* CMSEXPORT cmsIT8GetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char *SubKey); CMSAPI cmsUInt32Number CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames); CMSAPI cmsUInt32Number CMSEXPORT cmsIT8EnumPropertyMulti(cmsHANDLE hIT8, const char* cProp, const char ***SubpropertyNames); // Datasets CMSAPI const char* CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col); CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col); CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, const char* Val); CMSAPI cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, cmsFloat64Number Val); CMSAPI const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample); CMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample); CMSAPI cmsBool CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample, const char *Val); CMSAPI cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample, cmsFloat64Number Val); CMSAPI int CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample); CMSAPI cmsBool CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE hIT8, int n, const char *Sample); CMSAPI int CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames); CMSAPI const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer); CMSAPI int CMSEXPORT cmsIT8GetPatchByName(cmsHANDLE hIT8, const char *cPatch); // The LABEL extension CMSAPI int CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType); CMSAPI cmsBool CMSEXPORT cmsIT8SetIndexColumn(cmsHANDLE hIT8, const char* cSample); // Formatter for double CMSAPI void CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter); // Gamut boundary description routines ------------------------------------------------------------------------------ CMSAPI cmsHANDLE CMSEXPORT cmsGBDAlloc(cmsContext ContextID); CMSAPI void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD); CMSAPI cmsBool CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); CMSAPI cmsBool CMSEXPORT cmsGDBCompute(cmsHANDLE hGDB, cmsUInt32Number dwFlags); CMSAPI cmsBool CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab); // Feature detection ---------------------------------------------------------------------------------------------- // Estimate the black point CMSAPI cmsBool CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags); CMSAPI cmsBool CMSEXPORT cmsDetectDestinationBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags); // Estimate total area coverage CMSAPI cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile); // Poor man's gamut mapping CMSAPI cmsBool CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab, double amax, double amin, double bmax, double bmin); #ifndef CMS_USE_CPP_API # ifdef __cplusplus } # endif #endif #define _lcms2_H #endif lcms2-2.12rc1/include/lcms2_plugin.h0000644000175000017500000007374413775114656016326 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // // This is the plug-in header file. Normal LittleCMS clients should not use it. // It is provided for plug-in writters that may want to access the support // functions to do low level operations. All plug-in related structures // are defined here. Including this file forces to include the standard API too. #ifndef _lcms_plugin_H // Deal with Microsoft's attempt at deprecating C standard runtime functions #ifdef _MSC_VER # if (_MSC_VER >= 1400) # ifndef _CRT_SECURE_NO_DEPRECATE # define _CRT_SECURE_NO_DEPRECATE # endif # ifndef _CRT_SECURE_NO_WARNINGS # define _CRT_SECURE_NO_WARNINGS # endif # endif #endif #ifndef _lcms2_H #include "lcms2.h" #endif // We need some standard C functions. #include #include #include #include #include #ifndef CMS_USE_CPP_API # ifdef __cplusplus extern "C" { # endif #endif // Vector & Matrix operations ----------------------------------------------------------------------- // Axis of the matrix/array. No specific meaning at all. #define VX 0 #define VY 1 #define VZ 2 // Vectors typedef struct { cmsFloat64Number n[3]; } cmsVEC3; // 3x3 Matrix typedef struct { cmsVEC3 v[3]; } cmsMAT3; CMSAPI void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z); CMSAPI void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b); CMSAPI void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v); CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v); CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a); CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b); CMSAPI void CMSEXPORT _cmsMAT3identity(cmsMAT3* a); CMSAPI cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a); CMSAPI void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b); CMSAPI cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b); CMSAPI cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b); CMSAPI void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v); // MD5 low level ------------------------------------------------------------------------------------- CMSAPI cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID); CMSAPI void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len); CMSAPI void CMSEXPORT cmsMD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle); // Error logging ------------------------------------------------------------------------------------- CMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...); // Memory management ---------------------------------------------------------------------------------- CMSAPI void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size); CMSAPI void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size); CMSAPI void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); CMSAPI void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); CMSAPI void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr); CMSAPI void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size); // I/O handler ---------------------------------------------------------------------------------- struct _cms_io_handler { void* stream; // Associated stream, which is implemented differently depending on media. cmsContext ContextID; cmsUInt32Number UsedSpace; cmsUInt32Number ReportedSize; char PhysicalFile[cmsMAX_PATH]; cmsUInt32Number (* Read)(struct _cms_io_handler* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count); cmsBool (* Seek)(struct _cms_io_handler* iohandler, cmsUInt32Number offset); cmsBool (* Close)(struct _cms_io_handler* iohandler); cmsUInt32Number (* Tell)(struct _cms_io_handler* iohandler); cmsBool (* Write)(struct _cms_io_handler* iohandler, cmsUInt32Number size, const void* Buffer); }; // Endianness adjust functions CMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word); CMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value); CMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number* QWord); // Helper IO functions CMSAPI cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n); CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n); CMSAPI cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n); CMSAPI cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n); CMSAPI cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n); CMSAPI cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n); CMSAPI cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ); CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array); CMSAPI cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n); CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n); CMSAPI cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n); CMSAPI cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n); CMSAPI cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n); CMSAPI cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n); CMSAPI cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ); CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array); // ICC base tag typedef struct { cmsTagTypeSignature sig; cmsInt8Number reserved[4]; } _cmsTagBase; // Type base helper functions CMSAPI cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io); CMSAPI cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig); // Alignment functions CMSAPI cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io); CMSAPI cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io); // To deal with text streams. 2K at most CMSAPI cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...); // Fixed point helper functions CMSAPI cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8); CMSAPI cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val); CMSAPI cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32); CMSAPI cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v); // Date/time helper functions CMSAPI void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source); CMSAPI void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest); //---------------------------------------------------------------------------------------------------------- // Shared callbacks for user data typedef void (* _cmsFreeUserDataFn)(cmsContext ContextID, void* Data); typedef void* (* _cmsDupUserDataFn)(cmsContext ContextID, const void* Data); //---------------------------------------------------------------------------------------------------------- // Plug-in foundation #define cmsPluginMagicNumber 0x61637070 // 'acpp' #define cmsPluginMemHandlerSig 0x6D656D48 // 'memH' #define cmsPluginInterpolationSig 0x696E7048 // 'inpH' #define cmsPluginParametricCurveSig 0x70617248 // 'parH' #define cmsPluginFormattersSig 0x66726D48 // 'frmH #define cmsPluginTagTypeSig 0x74797048 // 'typH' #define cmsPluginTagSig 0x74616748 // 'tagH' #define cmsPluginRenderingIntentSig 0x696E7448 // 'intH' #define cmsPluginMultiProcessElementSig 0x6D706548 // 'mpeH' #define cmsPluginOptimizationSig 0x6F707448 // 'optH' #define cmsPluginTransformSig 0x7A666D48 // 'xfmH' #define cmsPluginMutexSig 0x6D747A48 // 'mtxH' typedef struct _cmsPluginBaseStruct { cmsUInt32Number Magic; // 'acpp' signature cmsUInt32Number ExpectedVersion; // Expected version of LittleCMS cmsUInt32Number Type; // Type of plug-in struct _cmsPluginBaseStruct* Next; // For multiple plugin definition. NULL for end of list. } cmsPluginBase; // Maximum number of types in a plugin array #define MAX_TYPES_IN_LCMS_PLUGIN 20 //---------------------------------------------------------------------------------------------------------- // Memory handler. Each new plug-in type replaces current behaviour typedef void* (* _cmsMallocFnPtrType)(cmsContext ContextID, cmsUInt32Number size); typedef void (* _cmsFreeFnPtrType)(cmsContext ContextID, void *Ptr); typedef void* (* _cmsReallocFnPtrType)(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); typedef void* (* _cmsMalloZerocFnPtrType)(cmsContext ContextID, cmsUInt32Number size); typedef void* (* _cmsCallocFnPtrType)(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); typedef void* (* _cmsDupFnPtrType)(cmsContext ContextID, const void* Org, cmsUInt32Number size); typedef struct { cmsPluginBase base; // Required _cmsMallocFnPtrType MallocPtr; _cmsFreeFnPtrType FreePtr; _cmsReallocFnPtrType ReallocPtr; // Optional _cmsMalloZerocFnPtrType MallocZeroPtr; _cmsCallocFnPtrType CallocPtr; _cmsDupFnPtrType DupPtr; } cmsPluginMemHandler; // ------------------------------------------------------------------------------------------------------------------ // Interpolation. 16 bits and floating point versions. struct _cms_interp_struc; // Interpolation callbacks // 16 bits forward interpolation. This function performs precision-limited linear interpolation // and is supposed to be quite fast. Implementation may be tetrahedral or trilinear, and plug-ins may // choose to implement any other interpolation algorithm. typedef void (* _cmsInterpFn16)(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const struct _cms_interp_struc* p); // Floating point forward interpolation. Full precision interpolation using floats. This is not a // time critical function. Implementation may be tetrahedral or trilinear, and plug-ins may // choose to implement any other interpolation algorithm. typedef void (* _cmsInterpFnFloat)(cmsFloat32Number const Input[], cmsFloat32Number Output[], const struct _cms_interp_struc* p); // This type holds a pointer to an interpolator that can be either 16 bits or float typedef union { _cmsInterpFn16 Lerp16; // Forward interpolation in 16 bits _cmsInterpFnFloat LerpFloat; // Forward interpolation in floating point } cmsInterpFunction; // Flags for interpolator selection #define CMS_LERP_FLAGS_16BITS 0x0000 // The default #define CMS_LERP_FLAGS_FLOAT 0x0001 // Requires different implementation #define CMS_LERP_FLAGS_TRILINEAR 0x0100 // Hint only #define MAX_INPUT_DIMENSIONS 15 typedef struct _cms_interp_struc { // Used on all interpolations. Supplied by lcms2 when calling the interpolation function cmsContext ContextID; // The calling thread cmsUInt32Number dwFlags; // Keep original flags cmsUInt32Number nInputs; // != 1 only in 3D interpolation cmsUInt32Number nOutputs; // != 1 only in 3D interpolation cmsUInt32Number nSamples[MAX_INPUT_DIMENSIONS]; // Valid on all kinds of tables cmsUInt32Number Domain[MAX_INPUT_DIMENSIONS]; // Domain = nSamples - 1 cmsUInt32Number opta[MAX_INPUT_DIMENSIONS]; // Optimization for 3D CLUT. This is the number of nodes premultiplied for each // dimension. For example, in 7 nodes, 7, 7^2 , 7^3, 7^4, etc. On non-regular // Samplings may vary according of the number of nodes for each dimension. const void *Table; // Points to the actual interpolation table cmsInterpFunction Interpolation; // Points to the function to do the interpolation } cmsInterpParams; // Interpolators factory typedef cmsInterpFunction (* cmsInterpFnFactory)(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags); // The plug-in typedef struct { cmsPluginBase base; // Points to a user-supplied function which implements the factory cmsInterpFnFactory InterpolatorsFactory; } cmsPluginInterpolation; //---------------------------------------------------------------------------------------------------------- // Parametric curves. A negative type means same function but analytically inverted. Max. number of params is 10 // Evaluator callback for user-supplied parametric curves. May implement more than one type typedef cmsFloat64Number (* cmsParametricCurveEvaluator)(cmsInt32Number Type, const cmsFloat64Number Params[10], cmsFloat64Number R); // Plug-in may implement an arbitrary number of parametric curves typedef struct { cmsPluginBase base; cmsUInt32Number nFunctions; // Number of supported functions cmsUInt32Number FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // The identification types cmsUInt32Number ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN]; // Number of parameters for each function cmsParametricCurveEvaluator Evaluator; // The evaluator } cmsPluginParametricCurves; //---------------------------------------------------------------------------------------------------------- // Formatters. This plug-in adds new handlers, replacing them if they already exist. Formatters dealing with // cmsFloat32Number (bps = 4) or double (bps = 0) types are requested via FormatterFloat callback. Others come across // Formatter16 callback struct _cmstransform_struct; typedef cmsUInt8Number* (* cmsFormatter16)(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride); typedef cmsUInt8Number* (* cmsFormatterFloat)(struct _cmstransform_struct* CMMcargo, cmsFloat32Number Values[], cmsUInt8Number* Buffer, cmsUInt32Number Stride); // This type holds a pointer to a formatter that can be either 16 bits or cmsFloat32Number typedef union { cmsFormatter16 Fmt16; cmsFormatterFloat FmtFloat; } cmsFormatter; #define CMS_PACK_FLAGS_16BITS 0x0000 #define CMS_PACK_FLAGS_FLOAT 0x0001 typedef enum { cmsFormatterInput=0, cmsFormatterOutput=1 } cmsFormatterDirection; typedef cmsFormatter (* cmsFormatterFactory)(cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 cmsFormatterDirection Dir, cmsUInt32Number dwFlags); // precision // Plug-in may implement an arbitrary number of formatters typedef struct { cmsPluginBase base; cmsFormatterFactory FormattersFactory; } cmsPluginFormatters; //---------------------------------------------------------------------------------------------------------- // Tag type handler. Each type is free to return anything it wants, and it is up to the caller to // know in advance what is the type contained in the tag. typedef struct _cms_typehandler_struct { cmsTagTypeSignature Signature; // The signature of the type // Allocates and reads items void * (* ReadPtr)(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag); // Writes n Items cmsBool (* WritePtr)(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems); // Duplicate an item or array of items void* (* DupPtr)(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n); // Free all resources void (* FreePtr)(struct _cms_typehandler_struct* self, void *Ptr); // Additional parameters used by the calling thread cmsContext ContextID; cmsUInt32Number ICCVersion; } cmsTagTypeHandler; // Each plug-in implements a single type typedef struct { cmsPluginBase base; cmsTagTypeHandler Handler; } cmsPluginTagType; //---------------------------------------------------------------------------------------------------------- // This is the tag plugin, which identifies tags. For writing, a pointer to function is provided. // This function should return the desired type for this tag, given the version of profile // and the data being serialized. typedef struct { cmsUInt32Number ElemCount; // If this tag needs an array, how many elements should keep // For reading. cmsUInt32Number nSupportedTypes; // In how many types this tag can come (MAX_TYPES_IN_LCMS_PLUGIN maximum) cmsTagTypeSignature SupportedTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // For writing cmsTagTypeSignature (* DecideType)(cmsFloat64Number ICCVersion, const void *Data); } cmsTagDescriptor; // Plug-in implements a single tag typedef struct { cmsPluginBase base; cmsTagSignature Signature; cmsTagDescriptor Descriptor; } cmsPluginTag; //---------------------------------------------------------------------------------------------------------- // Custom intents. This function should join all profiles specified in the array in // a single LUT. Any custom intent in the chain redirects to custom function. If more than // one custom intent is found, the one located first is invoked. Usually users should use only one // custom intent, so mixing custom intents in same multiprofile transform is not supported. typedef cmsPipeline* (* cmsIntentFn)( cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number Intents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); // Each plug-in defines a single intent number. typedef struct { cmsPluginBase base; cmsUInt32Number Intent; cmsIntentFn Link; char Description[256]; } cmsPluginRenderingIntent; // The default ICC intents (perceptual, saturation, rel.col and abs.col) CMSAPI cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number Intents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); //---------------------------------------------------------------------------------------------------------- // Pipelines, Multi Process Elements. typedef void (* _cmsStageEvalFn) (const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage* mpe); typedef void*(* _cmsStageDupElemFn) (cmsStage* mpe); typedef void (* _cmsStageFreeElemFn) (cmsStage* mpe); // This function allocates a generic MPE CMSAPI cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID, cmsStageSignature Type, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels, _cmsStageEvalFn EvalPtr, // Points to fn that evaluates the element (always in floating point) _cmsStageDupElemFn DupElemPtr, // Points to a fn that duplicates the stage _cmsStageFreeElemFn FreePtr, // Points to a fn that sets the element free void* Data); // A generic pointer to whatever memory needed by the element typedef struct { cmsPluginBase base; cmsTagTypeHandler Handler; } cmsPluginMultiProcessElement; // Data kept in "Element" member of cmsStage // Curves typedef struct { cmsUInt32Number nCurves; cmsToneCurve** TheCurves; } _cmsStageToneCurvesData; // Matrix typedef struct { cmsFloat64Number* Double; // floating point for the matrix cmsFloat64Number* Offset; // The offset } _cmsStageMatrixData; // CLUT typedef struct { union { // Can have only one of both representations at same time cmsUInt16Number* T; // Points to the table 16 bits table cmsFloat32Number* TFloat; // Points to the cmsFloat32Number table } Tab; cmsInterpParams* Params; cmsUInt32Number nEntries; cmsBool HasFloatValues; } _cmsStageCLutData; //---------------------------------------------------------------------------------------------------------- // Optimization. Using this plug-in, additional optimization strategies may be implemented. // The function should return TRUE if any optimization is done on the LUT, this terminates // the optimization search. Or FALSE if it is unable to optimize and want to give a chance // to the rest of optimizers. typedef cmsBool (* _cmsOPToptimizeFn)(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); // Pipeline Evaluator (in 16 bits) typedef void (* _cmsPipelineEval16Fn)(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], const void* Data); // Pipeline Evaluator (in floating point) typedef void (* _cmsPipelineEvalFloatFn)(const cmsFloat32Number In[], cmsFloat32Number Out[], const void* Data); // This function may be used to set the optional evaluator and a block of private data. If private data is being used, an optional // duplicator and free functions should also be specified in order to duplicate the LUT construct. Use NULL to inhibit such functionality. CMSAPI void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut, _cmsPipelineEval16Fn Eval16, void* PrivateData, _cmsFreeUserDataFn FreePrivateDataFn, _cmsDupUserDataFn DupPrivateDataFn); typedef struct { cmsPluginBase base; // Optimize entry point _cmsOPToptimizeFn OptimizePtr; } cmsPluginOptimization; //---------------------------------------------------------------------------------------------------------- // Full xform typedef struct { cmsUInt32Number BytesPerLineIn; cmsUInt32Number BytesPerLineOut; cmsUInt32Number BytesPerPlaneIn; cmsUInt32Number BytesPerPlaneOut; } cmsStride; typedef void (* _cmsTransformFn)(struct _cmstransform_struct *CMMcargo, // Legacy function, handles just ONE scanline. const void* InputBuffer, void* OutputBuffer, cmsUInt32Number Size, cmsUInt32Number Stride); // Stride in bytes to the next plana in planar formats typedef void (*_cmsTransform2Fn)(struct _cmstransform_struct *CMMcargo, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride); typedef cmsBool (* _cmsTransformFactory)(_cmsTransformFn* xform, void** UserData, _cmsFreeUserDataFn* FreePrivateDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); typedef cmsBool (* _cmsTransform2Factory)(_cmsTransform2Fn* xform, void** UserData, _cmsFreeUserDataFn* FreePrivateDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); // Retrieve user data as specified by the factory CMSAPI void CMSEXPORT _cmsSetTransformUserData(struct _cmstransform_struct *CMMcargo, void* ptr, _cmsFreeUserDataFn FreePrivateDataFn); CMSAPI void * CMSEXPORT _cmsGetTransformUserData(struct _cmstransform_struct *CMMcargo); // Retrieve formatters CMSAPI void CMSEXPORT _cmsGetTransformFormatters16 (struct _cmstransform_struct *CMMcargo, cmsFormatter16* FromInput, cmsFormatter16* ToOutput); CMSAPI void CMSEXPORT _cmsGetTransformFormattersFloat(struct _cmstransform_struct *CMMcargo, cmsFormatterFloat* FromInput, cmsFormatterFloat* ToOutput); // Retrieve original flags CMSAPI cmsUInt32Number CMSEXPORT _cmsGetTransformFlags(struct _cmstransform_struct* CMMcargo); typedef struct { cmsPluginBase base; // Transform entry point union { _cmsTransformFactory legacy_xform; _cmsTransform2Factory xform; } factories; } cmsPluginTransform; //---------------------------------------------------------------------------------------------------------- // Mutex typedef void* (* _cmsCreateMutexFnPtrType)(cmsContext ContextID); typedef void (* _cmsDestroyMutexFnPtrType)(cmsContext ContextID, void* mtx); typedef cmsBool (* _cmsLockMutexFnPtrType)(cmsContext ContextID, void* mtx); typedef void (* _cmsUnlockMutexFnPtrType)(cmsContext ContextID, void* mtx); typedef struct { cmsPluginBase base; _cmsCreateMutexFnPtrType CreateMutexPtr; _cmsDestroyMutexFnPtrType DestroyMutexPtr; _cmsLockMutexFnPtrType LockMutexPtr; _cmsUnlockMutexFnPtrType UnlockMutexPtr; } cmsPluginMutex; CMSAPI void* CMSEXPORT _cmsCreateMutex(cmsContext ContextID); CMSAPI void CMSEXPORT _cmsDestroyMutex(cmsContext ContextID, void* mtx); CMSAPI cmsBool CMSEXPORT _cmsLockMutex(cmsContext ContextID, void* mtx); CMSAPI void CMSEXPORT _cmsUnlockMutex(cmsContext ContextID, void* mtx); #ifndef CMS_USE_CPP_API # ifdef __cplusplus } # endif #endif #define _lcms_plugin_H #endif lcms2-2.12rc1/include/Makefile.am0000644000175000017500000000022713775114656015575 0ustar martimarti# # Makefile for include directory # Based on a work by Bob Friesenhahn include_HEADERS = lcms2.h lcms2_plugin.h EXTRA_DIST = lcms2.h lcms2_plugin.h lcms2-2.12rc1/include/Makefile.in0000644000175000017500000004202713775114656015612 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for include directory # Based on a work by Bob Friesenhahn VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ include_HEADERS = lcms2.h lcms2_plugin.h EXTRA_DIST = lcms2.h lcms2_plugin.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-includeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/COPYING0000644000175000017500000000206613775114656013154 0ustar martimartiLittle CMS Copyright (c) 1998-2020 Marti Maria Saguer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. lcms2-2.12rc1/.travis.yml0000755000175000017500000001053113775114656014231 0ustar martimartilanguage: c matrix: include: # OSX standard test build # this is really a GCC frontend with an LLVM back-end - os: osx env: - MATRIX_EVAL="CC=gcc && CXX=g++" # OSX and pure GCCs # https://docs.travis-ci.com/user/languages/c/#GCC-on-OS-X - os: osx osx_image: xcode8 env: - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9" # OSX and pure LLVMs - the version is controlled by the osx_image variable # images as per https://blog.travis-ci.com/2017-10-16-a-new-default-os-x-image-is-coming - os: osx osx_image: xcode6.4 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode7.3 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode8.3 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode9 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode9.1 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode9.4 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode10.1 env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: osx osx_image: xcode11.3.1 env: - MATRIX_EVAL="CC=clang && CXX=clang" # Linux and GCCs # gcc 4.8 at the time of writing - os: linux dist: trusty env: - MATRIX_EVAL="CC=gcc && CXX=g++" # for newer GCCs, add ubuntu-toolchain-r-test # https://docs.travis-ci.com/user/languages/c/ - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-4.9 env: - MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9" - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-5 env: - MATRIX_EVAL="CC=gcc-5 && CXX=g++-5" - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-6 env: - MATRIX_EVAL="CC=gcc-6 && CXX=g++-6" - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test packages: - g++-7 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" # Linux and LLVMs # https://docs.travis-ci.com/user/languages/c/#Clang - os: linux dist: trusty env: - MATRIX_EVAL="CC=clang && CXX=clang" - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.6 packages: - clang-3.6 env: - MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6" - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.7 packages: - clang-3.7 env: - MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7" - os: linux dist: trusty addons: apt: sources: - ubuntu-toolchain-r-test - llvm-toolchain-precise-3.8 packages: - clang-3.8 env: - MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8" - os: linux dist: trusty addons: apt: sources: - llvm-toolchain-trusty-3.9 packages: - clang-3.9 env: - MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9" - os: linux dist: trusty addons: apt: sources: - llvm-toolchain-trusty-4.0 packages: - clang-4.0 env: - MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0" - os: linux dist: trusty addons: apt: sources: - llvm-toolchain-trusty-5.0 packages: - clang-5.0 env: - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0" before_install: - eval "${MATRIX_EVAL}" script: ./configure && cat config.log && make && make check lcms2-2.12rc1/.gitignore0000644000175000017500000000113113775114656014101 0ustar martimarti.autotools .cproject .project .settings *.o *.Plo *.a *.so.* *.la *.lai *.lo *.Po *.pc *.so *.lib Thumbs.db *.obj *.pdb *.user *.aps *.pch *.vspscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *.cache *.ilk *.log *.exe [Bb]in [Dd]ebug*/ *.sbr obj/ [Rr]elease*/ _ReSharper*/ [Tt]est[Rr]esult* .vs/ #Nuget packages folder packages/ /config.status /utils/common/.dirstamp /testbed/.libs/lt-testcms /testbed/.libs/testcms /testbed/testcms #Xcode libtool Build DerivedData .libs /utils/transicc/transicc /utils/tificc/tificc /utils/psicc/psicc /utils/linkicc/linkicc /utils/jpgicc/jpgicc *.tlog *.ipdb *.iobj lcms2-2.12rc1/aclocal.m40000644000175000017500000012562713775114656013772 0ustar martimarti# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/acx_pthread.m4]) m4_include([m4/ax_append_compile_flags.m4]) m4_include([m4/ax_append_flag.m4]) m4_include([m4/ax_check_compile_flag.m4]) m4_include([m4/ax_gcc_func_attribute.m4]) m4_include([m4/ax_require_defined.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) lcms2-2.12rc1/doc/0000755000175000017500000000000013775114656012662 5ustar martimartilcms2-2.12rc1/doc/LittleCMS2.12 API.pdf0000644000175000017500000330531513775114656016064 0ustar martimarti%PDF-1.5 % 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 5 0 R/Group<>/Tabs/S>> endobj 4 0 obj <>/F 4/A<>>> endobj 5 0 obj <> stream xUn1]S=C( Ci$CTҴRKڤx$ޒY;iwYQEg'':>EF̮  c'I"妮zU|VW_j,q+f9,COB߲7Yv"dk6je71XW왡BFpڳ T8d}nȮkƐ@gqT)^Qp|j"hhXսBkXKDy(W0wi4Y&m:%LB~R|C..n!y9 炡d1|͡eO46*,F:9l_*w.caQuu+$߻g<$\m8=h'cMn3 . nGR'.`+-]ʁz8c2 J< |&Az;L'MZ\'#3,O{:nT1ӑpKtxq5K ےD,$\-|{@т$(E!9V9otL2xF @k&0xyj?ӗ#񣮈ݱ9[ks?rlV>͗ Nn%?9H endstream endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> endobj 15 0 obj [ 16 0 R] endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <> endobj 19 0 obj <> stream JFIF``C   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )UK0Uw~k}*\PD@~@MH@-ti ?ҵ(M2tE|Ez| csMVow hY@c (((((((((((((((((((((((((((((((((i}ީ{-, M:S#$G>𽧆 ]?}>9c=QK:9?eׯҺ+ľ(Ӽ9m1H'GZYfvF`ds /|N@5MƗ #gjxvl)s¾{''&((((((((((((((((((((((((((((((((TPI' |4/NtlB?Ҁ:xQt ;7(pQQX^/>2|DO@k<9mAmFAA:Nx_*ҼHw;}T6:5D-5I[֯pg5m-W,yR>iA@.GaMF?=5s_`-b}N1q"?=J>"k|ڒ?vvz㨢 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (,3jZY"g_D:tNoan1({NMy-Issʹ~xXT;ky'Ev=^%|7ǻֽ#p"`]~q:{VzYG?zCMGYxwNۙf#摽Oz+׍bСkY5'Q>Ɖ@}dȄ~5.$ŝY'֖iFG%{((((((((((((((((((((((((((((((((('<Oz} H{_txrnc '֢@X^.~K}B@u};Lu9XŽWK,J9,$SMf,ŘI'%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQZ6kݤnԞF8Y8UFI>W|;eƋ!5H$Y}xZ]c>.oa(]EɥYcf8zONmMUlQAh"oh$|;Gv8$24rFpU)QEQEQEQEQEQEQEQEQEQEQETַryv裥ih:dg%a]t0G|\i>U8ex''_K?>Y.ommn.#_9Woϫ㤿38kn|'¥1=42c6Ua^mymv9G-Tzmb75FJpN.4ѤQFYVm=gWʑ;?j|=jmMl˟Z_S[CK +=;yG'̿V}xu >r7JnSቧ"AsRݑ 6V]>l1KSaj]M mo)PcR׹ *nC(ʹۿpvY#B犂}B5>ѓj js*k:">pUO+|k8;z;?K*Nl]* &a/ק֥M{kEs3Kq p@EP)"? _4 b0Lq^]Mx_p>aɐC~&:((((((((((*Οh['F}sUj{ˋ?ՠQkFQ2?gM뭭㵷H!]-h̏;XqBڼݤfcOs^.<VNsHy%mW{HdD쎽NJs^ҝYYJP!$Ҵwcǹ,ΠΔ>4tST+9G azm>)G$[۞ }-j7c1c(_fjkjb2E/WZ} F2}=+̨Uz3՞ ׹8idXe m-8gr<99?O*A &$m㐌P-,~g,^J C^T_B)\5[&1cׁbdoj=~6&E/};j/>|#ok##kP6c0g3՟;]0c~C</+* KkxaD0X%K4=~gKԨa739Wke6pYǍs_\ycnrlەIs&1clj"3XŋՃ}X}GXVEM⋗Z"GS9S'-Y9m{_PSGFs1>*Rr'VsRl(0(_"*-Q0:U:*9Gv.'ؖk dTTQI-;6M[aqTaQɼU̥MPEcz7"?Yg4#$((((((((((((((((((((((((((((((((((((((((((( endstream endobj 20 0 obj <> stream xw`o.H#">EtJ >Tz( v{/vgl-G_r3s3ߛᰱQ3HxTtR՚=Gͮ_ᎬP^w}yog_%[<\]9X]{uҭ^̮a+wt ҵԌlV=B~66"Zvc?5Kz26V}fo{KeK-1ghw~=wU|16Xo&)mTÙ(ccO}J LrI[dc $eI+cvlLԀ픅Cvec8'j\avl)5=CSfc(#II^ogc nv˧ͳ1ҋ2Sao]xɿ,9Bv]<{Ǧ ;i^rPM1ȅjgJNli7kJ#B܌ٍ1(OƵKL3ٚ%]-)W:J@rUt/uoY>D~1+,vM^[S3RB?&O(^!%JYƖԬO{f:#殗KGHa-9M?LluT9OXA_e7d-?m_),67ܽy l2Z%;Z2-#-~j: [˓jGj70.@o}0>B'cNm n(3η }th)]v"g@մ4\EwG(x ѝ&ZB]TQ%G`wk#FKs;R+OdJS%]4:th)j5Y |Դ1*Mr-o92;h,o&JBR?h*Z;k!f7MRH+ ,<5 Wnag&i9x`< ({Է\Nnb/hxI-xOa}@m1ջ~?틚b5ү|,nMtR;b8\r%1/U?lWZr6#zڗ%oGK|SIP#Eع%wTWk>-7YL~b3ķVUw>MrIn$]3-E=>Z]cWq*ULdw9SDAKr:/3g/ѹܿpi24Td]=x9M;@)-|]58QBE1r\/Mܿzpi5IKdîݸZO:n܂I}WcWp GL4|tx?Zi=Od?/a=* 4S6Fhʞjyw24 ƿONjQ#.ZϹ mq?hU29y9Gro M%֒q)ck$YeZ*D Sɀ6z*qǔΗ3g ǣ T-8=}s QRsY:yͬ%y*#-q1@>s UMjPFs,-@K5|' B95ZEt>l?5Ah[~} --s \+ l"S0@Kq+y2: EtR`}-sq$x$e4BS!&C@K ڹ#T`}-ոh_  mش1Z$ DLeƞPFQjR)؆lfI$$a̜-3.`ƮPJQmZ DBW sj [_K 9 ժ% Y_QRMCok)Z cZW^PJji )Gʹe(4%˺R;riZW2**76qBTֻaD>RqD12--u-R 3~ eⰔ~645-}2!7H_a<,{μL&ѿxisXNMI*fTك^6+z1 Uh1* 5-}rJ(έx-K!H:U=2Z\M9Sg6%ef|ic)Z =mĮzO[̂HTL e6W[ye/.ˇ ZF78w-[D>Vz>j#]05g޹\8YpךgyZ{ 3N%f 1GB |ze6T@ܝ$%n ЋlC4;̈,̼ty!eH!zt~X|zѓ =ٷ{XJYEwh+㙏S5:rP2!a!]~_a4 ,+Z`fC .7p&΂4t{`f} m$Oˆ٨UsAA[qɂv"z|9e6FmIV['&%|ic帻M16^GA+&/ӥMiUVwJBhDogߺ /΍njB jҺ5{hb$!cV#)~2+\!"ŔC|8[dR{x 60sZ!v6@ MuQФ2ܨ~1h*ig0pe64 8|" Z*٧ {5>ӗp$6lϗȅ!6tWo-8ÉgyGի&bF3(!bH챞0O +A!epW/O-se"cyD* [%®8Qh̍1l^XU%N%[ 1l1 ,K8SxQZA~wv>: F) !-G~GQ8Y}/ y |MgCtWo_ު#&qKgt LIx b8Uט.-=<ЁNif5А- B3@ уH +9} CC>7ewcDfO*2+pBFҒP"qҊn|&6 y?lLBO, qg1ĠYJNgBR4Dفllە:D&41A']UW?pb]ِhΘY㡈VNi<4{;aik0-iۦmx7 ;|W7ڦݥ\Bݕ6;޾Pʝvͅ_VOf=~C%L1{GZ>eLjR,1_}жYWo)masV?ۅyN/6UWJI^5V?O h##< BBˆ',Z=I+?2r7ndlRQJM}{z}LOU'v{rV&aqom}N*G˪Hf0SG. :͗29ALDJBY\c]+]_a-uP$̝CkYT틂.ψ٩%iQاMZq`#Ǔ~z<=Ty_b =*h`XKLK;LX1Q-LGdm{E=#IJF3KpoT3^\Rݗ]L14Gm}-ABp%bb,_';)F1d<ηIu'4OtHw`HP)X-nL.8 d#g}wW}Y5 3w jIQL1 Gv`j;dx!-W3a ywp)UйGj;0} Y̍ҕ%6X[Y]0SR &7Vրݫ/#,OMVZ*vK]Y{њ܍Ci\[Gkz%>.KDR,Bk!^K`>_~%j?7K /Ck:mpօ$pU?pP g -8ȗZWl[Zʁ ^r(3 \ӄ{y?S~9i[ jLRK>5|$O4Jq wȷ|+a? Xq~ZE%UCF24RP_ ZAêFjsxՁb*PK>@u>Eu:HZjoS|kY`FJWsS>(Z <]E,uαh-jЈ;l\wV}B z"lZ$_{gLc@D#[zUΕ*dke<Wb71?YjSc<ZD3L},rgW;HKA fo?9;S?WEuߪ/E6kJw"f-bv>OW `J?ZrA:'y∸p=)S4֊]y_>@`U|X^i(4MN%-xJ 'KiJH#\r-jZr~t @ps /o/{_* ;G%ɛPW X-2^#ĴļH4?@ښwg&*3lP^aW h X=K֘؂S6-9=QYik[USm>mF]qX6c9THr|P-K=X;CLKGbWV7؃޵d (MP)pi*j QUp!wE\KRDg; Yq0C$bKjlrh lʣ>HhԜ!`IU, D 覲}jq7cdJJh"̗^N%G7~`h ~RJ܁7&Dp_. m#9]&=Pr#2{x 44H<\p  UpqZr;OK 5ټ,-q^ca,I~l9h`? 4Iy!pxxi10&WK90AeOODL6ŀovckU; A.-! ˝). VKgfK T@KyjAJ;]qނ9ɣpaY-U?L]=Z 6p/Z-L!Qx!dcz3~|KR7ak L? W9H5d-ޭJH=ATSL}~QDRjpV20u'Bo>:n|@d>DNù/ͪf-9aV^YP*pF+1il{#1 q<^gՁQ"<ۦ\dWSIKEzڬVK&ß,(?Tݭ 3rEG[ݍ`ƵIKF^yCq/ K9TK'jxhN8uSg*MR7 L y1-E[ïpnN(u&|DjZ_ea,qN*Zr<y"Z U.tZEG`Qm4aVKcy)y21YK=*CYKQÿw 2 M# Mk:- Y!+HpkyR+ׄvWHLd-9*Ƕ kGOtXH*Mq~wQ 괕޴Zm*cc(np?vy>wVnBP"Z*"/\Zjj1%}/Tp!j%0*o9?sjju#]*|sКWDK\2"i)s3Όa~5 v8W &$g2ьn&ֽ",Ph%`=qS &1-v##'AKŷUAl%F+TAN ܳwHyu`%Ig!Eɩm8oA-gjŴ̘.ȇx-9V@>خ ͏L=3x7yi9_B^IWO쳩8 7{UWTKR(X^N#UVj킅B?. ̗q6m]E {}T3ѭZ=+ҡ8 ~Zr<]n~גk|r3%h+Z4~{;Žk4\b'-%RM|7X(bŵR0cڎKrw75i' ;G6AڪEk\={W뽶4Zl .9גZ3~_\LJ|? չ$լ˔nɛg v++_*KBK"]!n|0"%TX6*s.ՎGe(7i!)z`t$cSź'z>ђ:& XxdF=G3}k(?#zgiY} p>0Puv&-1Nw@U4lc݆Nü%j=6N|~EoJFaم?ݴCA ?0ϙYIw-Uod^^?m;?t[UF_8u[[X~D%~iWmuSe _ۣu,[AǔWLX tѱErz2u]7on Sͺ"oc 1R5j1j6:qJZaύ2p% dzE}(䀴6q}vC(j'ϭ=-{"S z =]7%|,ؘ*iɸ&%Mpkc1m xd۝ M>Ԉ(u3v[̖ %\ԑjU+`|OL;YΝ;o}v@L@K'c[6oڸxݺtҦnI[<6rirfL^V֩SBK6gaܲ1,I endstream endobj 21 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 23 0 R 27 0 R 28 0 R 29 0 R 30 0 R 32 0 R 33 0 R 34 0 R 35 0 R 37 0 R 40 0 R 41 0 R 43 0 R 45 0 R 47 0 R 49 0 R 53 0 R 56 0 R 59 0 R 63 0 R 70 0 R 81 0 R 84 0 R 87 0 R 91 0 R 93 0 R 95 0 R 98 0 R 100 0 R 104 0 R 106 0 R] /MediaBox[ 0 0 612 792] /Contents 22 0 R/Group<>/Tabs/S>> endobj 22 0 obj <> stream xr6;(&%"c&Mekv=(qmy${݇gL7HJ4a!qMFw̛ˋ/n*U㪫wj_]u^i(8no./~YU\^| ~,\|ŸesQˋwKhc[B46?V=Zjպfo{C{B7;Nү0ΧFpNstbgн#>&>i[i'=S "hϴ|v?nY=vt$So587)(;#nT3cW:w^mE[j ה׾E#b TAx>܁R/"@|^wf*N44ʽϋN~dO_銾U 2\7Fxuډ-^TDT9OMK6Rr IʂDzX! |:A mdZ4=~)} %gaA) ,LȐ)J&GW֍WŨ \YkyƠr lpj0)ya\j[dUKyy%HJB'* :\鉉W^C^skdGëV-K0h-N 3#rh.ZnZw +y31>&[#{ = s@xj[}k-f́TR಻ ΃+N nhΩ}pS[.u$.}Lw+:A VWW6olc3"´܁Ŕ6R LmfaJMa*ͷ)} qK,:wX|@l|NyƨΔJSb[4e,%y(MKHiR*A0,x)G&lS ƨ[nb]+w̶ ܁EHO* ,T)T'a"pd{5k^wCݟ ֺӾvus4GχWƨS+/XHy_Dʃ>WR dD g$z@`o(F2}+il*+[!kJ7}\|>Xu4Z,i4T܅~Ҳl@dݨo`_bAk-ƬFuXc%DM,${ C*'U'_]Mqw@!3Ъ︂\7ٶH3* ,Hc. @Jgz@V*t*cQFmwb+bw=Ƥi #ĩwM0F+1 cqfhЧe,%chH`h,΃!Qck i*^#}l)A@\)H!~b@# 4RX%yʁ3tqdŕ:zncqDNyҸ lw8B:{:LK]N P0v^m0,\+J%wC gԘ5:rL3Rt86{M;ĶDŹ Rcc3Sj6_P{Əg~-=bqI̳7좵dcَ":v{ 'EzOAu;FjC)R>߫trp$ Dj~GX͔*~]Ucݧ!] O0ḿTE INtrp" .82Nֿ>A!}3el;cϔE?-W3Rcџ!U@Ğd82@8" 7/jc>ucS)7AaGA[jj[4u;4j1x%NMWĞqJf¹%Wp=b=Vh7ad*NyO&67b2ږ@܁x =c(љGffjh ߞ6ÃCJ 9gN b34)O~dzXxb[6RX X0JD,'bOy)fǑyZhh9-pχ! o (E"lCbwؖf,e.!5JpF'&3bO9sF82g6`nh(sZ ]mNKteZ訩5l[p,%k\ HM[a3Vy8>|)j *| =b!Dkb?ۖHAu`)[ t)Et~r("DWi~"w+sq捭mp&91-)<[%7faSg$6͏#` ˴Ӗ۸ɑ3D : At >M>gsFO 9;{V/Űr&g:{C|u{xW5}!MI@-Iz@l˽zXʰC)d=Ğ-qd~Tb[$G xKI-%5 D=C$Q͏3 Յ( endstream endobj 23 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 721 0] >> endobj 24 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 110 0 R 113 0 R 114 0 R 116 0 R 123 0 R 126 0 R 128 0 R 129 0 R 130 0 R 131 0 R 135 0 R 136 0 R 137 0 R 139 0 R 141 0 R 143 0 R 148 0 R 152 0 R 154 0 R 159 0 R 164 0 R 167 0 R 170 0 R 173 0 R 177 0 R 179 0 R 182 0 R 185 0 R 187 0 R 190 0 R 192 0 R 194 0 R 197 0 R] /MediaBox[ 0 0 612 792] /Contents 109 0 R/Group<>/Tabs/S>> endobj 25 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 200 0 R 206 0 R 213 0 R 215 0 R 219 0 R 222 0 R 228 0 R 232 0 R 234 0 R 237 0 R 239 0 R 241 0 R 245 0 R 249 0 R 256 0 R 262 0 R 264 0 R] /MediaBox[ 0 0 612 792] /Contents 199 0 R/Group<>/Tabs/S>> endobj 26 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 268 0 R 269 0 R] /MediaBox[ 0 0 612 792] /Contents 267 0 R/Group<>/Tabs/S>> endobj 27 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 636 0] >> endobj 28 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 541 0] >> endobj 29 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 498 0] >> endobj 30 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 721 0] >> endobj 31 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 270 0 R/Group<>/Tabs/S>> endobj 32 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 628 0] >> endobj 33 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 545 0] >> endobj 34 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 477 0] >> endobj 35 0 obj <>/F 4/Dest[ 36 0 R/XYZ 82 721 0] >> endobj 36 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 271 0 R/Group<>/Tabs/S>> endobj 37 0 obj <>/F 4/Dest[ 39 0 R/XYZ 82 721 0] >> endobj 38 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 279 0 R/Group<>/Tabs/S>> endobj 39 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 280 0 R/Group<>/Tabs/S>> endobj 40 0 obj <>/F 4/Dest[ 39 0 R/XYZ 82 559 0] >> endobj 41 0 obj <>/F 4/Dest[ 42 0 R/XYZ 82 721 0] >> endobj 42 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 281 0 R/Group<>/Tabs/S>> endobj 43 0 obj <>/F 4/Dest[ 44 0 R/XYZ 82 721 0] >> endobj 44 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 282 0 R/Group<>/Tabs/S>> endobj 45 0 obj <>/F 4/Dest[ 46 0 R/XYZ 82 721 0] >> endobj 46 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 283 0 R/Group<>/Tabs/S>> endobj 47 0 obj <>/F 4/Dest[ 48 0 R/XYZ 82 721 0] >> endobj 48 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 284 0 R/Group<>/Tabs/S>> endobj 49 0 obj <>/F 4/Dest[ 52 0 R/XYZ 82 721 0] >> endobj 50 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 285 0 R/Group<>/Tabs/S>> endobj 51 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 286 0 R/Group<>/Tabs/S>> endobj 52 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 287 0 R/Group<>/Tabs/S>> endobj 53 0 obj <>/F 4/Dest[ 55 0 R/XYZ 82 721 0] >> endobj 54 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 288 0 R/Group<>/Tabs/S>> endobj 55 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 289 0 R/Group<>/Tabs/S>> endobj 56 0 obj <>/F 4/Dest[ 58 0 R/XYZ 82 721 0] >> endobj 57 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 290 0 R/Group<>/Tabs/S>> endobj 58 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 291 0 R/Group<>/Tabs/S>> endobj 59 0 obj <>/F 4/Dest[ 62 0 R/XYZ 82 721 0] >> endobj 60 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 292 0 R/Group<>/Tabs/S>> endobj 61 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 293 0 R/Group<>/Tabs/S>> endobj 62 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 294 0 R/Group<>/Tabs/S>> endobj 63 0 obj <>/F 4/Dest[ 69 0 R/XYZ 82 721 0] >> endobj 64 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 295 0 R/Group<>/Tabs/S>> endobj 65 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 297 0 R] /MediaBox[ 0 0 612 792] /Contents 296 0 R/Group<>/Tabs/S>> endobj 66 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 299 0 R] /MediaBox[ 0 0 612 792] /Contents 298 0 R/Group<>/Tabs/S>> endobj 67 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 300 0 R/Group<>/Tabs/S>> endobj 68 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 301 0 R/Group<>/Tabs/S>> endobj 69 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 302 0 R/Group<>/Tabs/S>> endobj 70 0 obj <>/F 4/Dest[ 80 0 R/XYZ 82 721 0] >> endobj 71 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 303 0 R/Group<>/Tabs/S>> endobj 72 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 305 0 R] /MediaBox[ 0 0 612 792] /Contents 304 0 R/Group<>/Tabs/S>> endobj 73 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 307 0 R 308 0 R] /MediaBox[ 0 0 612 792] /Contents 306 0 R/Group<>/Tabs/S>> endobj 74 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 310 0 R] /MediaBox[ 0 0 612 792] /Contents 309 0 R/Group<>/Tabs/S>> endobj 75 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 316 0 R/Group<>/Tabs/S>> endobj 76 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 318 0 R] /MediaBox[ 0 0 612 792] /Contents 317 0 R/Group<>/Tabs/S>> endobj 77 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 319 0 R/Group<>/Tabs/S>> endobj 78 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 320 0 R/Group<>/Tabs/S>> endobj 79 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 322 0 R] /MediaBox[ 0 0 612 792] /Contents 321 0 R/Group<>/Tabs/S>> endobj 80 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 324 0 R 325 0 R] /MediaBox[ 0 0 612 792] /Contents 323 0 R/Group<>/Tabs/S>> endobj 81 0 obj <>/F 4/Dest[ 83 0 R/XYZ 82 721 0] >> endobj 82 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 331 0 R/Group<>/Tabs/S>> endobj 83 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 333 0 R 334 0 R] /MediaBox[ 0 0 612 792] /Contents 332 0 R/Group<>/Tabs/S>> endobj 84 0 obj <>/F 4/Dest[ 86 0 R/XYZ 82 721 0] >> endobj 85 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 335 0 R/Group<>/Tabs/S>> endobj 86 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 337 0 R] /MediaBox[ 0 0 612 792] /Contents 336 0 R/Group<>/Tabs/S>> endobj 87 0 obj <>/F 4/Dest[ 90 0 R/XYZ 82 721 0] >> endobj 88 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 339 0 R] /MediaBox[ 0 0 612 792] /Contents 338 0 R/Group<>/Tabs/S>> endobj 89 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 340 0 R/Group<>/Tabs/S>> endobj 90 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 342 0 R 343 0 R] /MediaBox[ 0 0 612 792] /Contents 341 0 R/Group<>/Tabs/S>> endobj 91 0 obj <>/F 4/Dest[ 92 0 R/XYZ 82 721 0] >> endobj 92 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 345 0 R 346 0 R] /MediaBox[ 0 0 612 792] /Contents 344 0 R/Group<>/Tabs/S>> endobj 93 0 obj <>/F 4/Dest[ 94 0 R/XYZ 82 721 0] >> endobj 94 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 347 0 R/Group<>/Tabs/S>> endobj 95 0 obj <>/F 4/Dest[ 97 0 R/XYZ 82 721 0] >> endobj 96 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 348 0 R/Group<>/Tabs/S>> endobj 97 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 350 0 R] /MediaBox[ 0 0 612 792] /Contents 349 0 R/Group<>/Tabs/S>> endobj 98 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 721 0] >> endobj 99 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 351 0 R/Group<>/Tabs/S>> endobj 100 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 721 0] >> endobj 101 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 353 0 R 354 0 R 355 0 R] /MediaBox[ 0 0 612 792] /Contents 352 0 R/Group<>/Tabs/S>> endobj 102 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 357 0 R 358 0 R] /MediaBox[ 0 0 612 792] /Contents 356 0 R/Group<>/Tabs/S>> endobj 103 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 359 0 R/Group<>/Tabs/S>> endobj 104 0 obj <>/F 4/Dest[ 105 0 R/XYZ 82 700 0] >> endobj 105 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 360 0 R/Group<>/Tabs/S>> endobj 106 0 obj <>/F 4/Dest[ 108 0 R/XYZ 82 721 0] >> endobj 107 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 362 0 R 363 0 R 364 0 R 365 0 R] /MediaBox[ 0 0 612 792] /Contents 361 0 R/Group<>/Tabs/S>> endobj 108 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R] /MediaBox[ 0 0 612 792] /Contents 366 0 R/Group<>/Tabs/S>> endobj 109 0 obj <> stream xmo8wKk".pnp v~$k鐌[l<EL )x^JU-n>_^\OuUW܃.//~[忋]^?./~*ZZUmՕV}tոⰽo&yӠMz#o󯟊lPƞ/[YUQxj!uK$.pZ56+~.f@V)jwe}) \#~YʬWHr}*P/n6ZJuV% J + Mi;6D~t V_NFZr6gP =[4u|R-!R`m帊tu6UPĀ3K)g Sz U9%0au ͛hjt-&)^EC 4uX/3uȿ>ʬ-U;~⭇ճޥqѦzCm3g@yRIB/2bhi"xx?WʮJo#_~V֯Hԃ85.ti4M/e p eAJ"8!J3NA? 8iBr֏e7´?#Ց#{z2 -~)2dAI)BpfsM, yq,`l?lw0l T5C\ZD La%9XKaVe϶0Bl|/(G_puSlOǒA;\XȑkfI]K9e T':N)<#,^⼚a,u\ݶ|LW߇Ruo0kyl<#-maSz?^JwSXcݔ( R dZkj &"hR /""Gn)\Sv5/]bc:2M9֩$4f vw`)!e $iD+%bOYju,jU/a}iʾn9jG0ZbMo5)gmZj%;6i$!^b !EXXj$d5sf^LnLOW aٍTMY=u 42~ n9$uw*#k tP#F'm*ێC{:>}4< jaBNpvGT; }B@VZ1 U#ց`Q@)2=CDPQVQ펈q[esalf1+9|Մ>¼ =`:M|O=Q!R7E1M{}6jz`ZUfcQy^B8L Ğn#ȄCchTfޖck\1MYuG-b<@yRer9E&(bψr~TtN{jƪH*b 9rNw`)k 9M)^EءcgDa?";ɝ 7]٣wCK`f!te\dMWZ,rHeR#ooLs&޺H#v:X(e@nH?#EtpR("H g{+?6k׿\_YkK~uﶻVݵ5:⩬LǺ;GlcX p/x/A*"=c1`3n>)*_y?QtW%r@MMnzأqtsWhϛ?ŧwx\ 0V̫\oLFlsv jRN1RI7v5a(LQȣaO2\uw*|FPKT+6Ͷg6ځČ3[ifIE#iaO2BZcQztJy: 0T9|.,'ÔIfYk:2|ԁͩs/qC3=_hN[S':mWX7ԍrHuskt`X# 8k-aO"kCA0ƒߍy`.Gpȧ|:S~rH *ڀ)= M5? endstream endobj 110 0 obj <>/F 4/Dest[ 112 0 R/XYZ 82 721 0] >> endobj 111 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R] /MediaBox[ 0 0 612 792] /Contents 373 0 R/Group<>/Tabs/S>> endobj 112 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 380 0 R/Group<>/Tabs/S>> endobj 113 0 obj <>/F 4/Dest[ 112 0 R/XYZ 82 702 0] >> endobj 114 0 obj <>/F 4/Dest[ 115 0 R/XYZ 82 721 0] >> endobj 115 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 381 0 R/Group<>/Tabs/S>> endobj 116 0 obj <>/F 4/Dest[ 122 0 R/XYZ 82 721 0] >> endobj 117 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 382 0 R/Group<>/Tabs/S>> endobj 118 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 390 0 R/Group<>/Tabs/S>> endobj 119 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 392 0 R 393 0 R 394 0 R] /MediaBox[ 0 0 612 792] /Contents 391 0 R/Group<>/Tabs/S>> endobj 120 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 396 0 R 397 0 R] /MediaBox[ 0 0 612 792] /Contents 395 0 R/Group<>/Tabs/S>> endobj 121 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 398 0 R/Group<>/Tabs/S>> endobj 122 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 399 0 R/Group<>/Tabs/S>> endobj 123 0 obj <>/F 4/Dest[ 125 0 R/XYZ 82 721 0] >> endobj 124 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 400 0 R/Group<>/Tabs/S>> endobj 125 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 401 0 R/Group<>/Tabs/S>> endobj 126 0 obj <>/F 4/Dest[ 127 0 R/XYZ 82 411 0] >> endobj 127 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 402 0 R/Group<>/Tabs/S>> endobj 128 0 obj <>/F 4/Dest[ 127 0 R/XYZ 82 281 0] >> endobj 129 0 obj <>/F 4/Dest[ 127 0 R/XYZ 82 232 0] >> endobj 130 0 obj <>/F 4/Dest[ 127 0 R/XYZ 82 115 0] >> endobj 131 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 132 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 403 0 R/Group<>/Tabs/S>> endobj 133 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 404 0 R/Group<>/Tabs/S>> endobj 134 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 405 0 R/Group<>/Tabs/S>> endobj 135 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 403 0] >> endobj 136 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 228 0] >> endobj 137 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 698 0] >> endobj 138 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 406 0 R/Group<>/Tabs/S>> endobj 139 0 obj <>/F 4/Dest[ 140 0 R/XYZ 82 721 0] >> endobj 140 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R] /MediaBox[ 0 0 612 792] /Contents 407 0 R/Group<>/Tabs/S>> endobj 141 0 obj <>/F 4/Dest[ 142 0 R/XYZ 82 721 0] >> endobj 142 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 419 0 R/Group<>/Tabs/S>> endobj 143 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 144 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 420 0 R/Group<>/Tabs/S>> endobj 145 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 421 0 R/Group<>/Tabs/S>> endobj 146 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 422 0 R/Group<>/Tabs/S>> endobj 147 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 423 0 R/Group<>/Tabs/S>> endobj 148 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 721 0] >> endobj 149 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 425 0 R] /MediaBox[ 0 0 612 792] /Contents 424 0 R/Group<>/Tabs/S>> endobj 150 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 427 0 R 428 0 R] /MediaBox[ 0 0 612 792] /Contents 426 0 R/Group<>/Tabs/S>> endobj 151 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 429 0 R/Group<>/Tabs/S>> endobj 152 0 obj <>/F 4/Dest[ 153 0 R/XYZ 82 721 0] >> endobj 153 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R] /MediaBox[ 0 0 612 792] /Contents 430 0 R/Group<>/Tabs/S>> endobj 154 0 obj <>/F 4/Dest[ 158 0 R/XYZ 82 721 0] >> endobj 155 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 439 0 R/Group<>/Tabs/S>> endobj 156 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 440 0 R/Group<>/Tabs/S>> endobj 157 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 441 0 R/Group<>/Tabs/S>> endobj 158 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R] /MediaBox[ 0 0 612 792] /Contents 442 0 R/Group<>/Tabs/S>> endobj 159 0 obj <>/F 4/Dest[ 163 0 R/XYZ 82 721 0] >> endobj 160 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R] /MediaBox[ 0 0 612 792] /Contents 448 0 R/Group<>/Tabs/S>> endobj 161 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 454 0 R/Group<>/Tabs/S>> endobj 162 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 455 0 R/Group<>/Tabs/S>> endobj 163 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R] /MediaBox[ 0 0 612 792] /Contents 456 0 R/Group<>/Tabs/S>> endobj 164 0 obj <>/F 4/Dest[ 166 0 R/XYZ 82 721 0] >> endobj 165 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R] /MediaBox[ 0 0 612 792] /Contents 464 0 R/Group<>/Tabs/S>> endobj 166 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 470 0 R/Group<>/Tabs/S>> endobj 167 0 obj <>/F 4/Dest[ 169 0 R/XYZ 82 721 0] >> endobj 168 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 472 0 R 473 0 R] /MediaBox[ 0 0 612 792] /Contents 471 0 R/Group<>/Tabs/S>> endobj 169 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 475 0 R 476 0 R] /MediaBox[ 0 0 612 792] /Contents 474 0 R/Group<>/Tabs/S>> endobj 170 0 obj <>/F 4/Dest[ 172 0 R/XYZ 82 706 0] >> endobj 171 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 478 0 R 479 0 R 480 0 R 481 0 R] /MediaBox[ 0 0 612 792] /Contents 477 0 R/Group<>/Tabs/S>> endobj 172 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 483 0 R 484 0 R] /MediaBox[ 0 0 612 792] /Contents 482 0 R/Group<>/Tabs/S>> endobj 173 0 obj <>/F 4/Dest[ 176 0 R/XYZ 82 721 0] >> endobj 174 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 486 0 R 487 0 R 488 0 R 489 0 R] /MediaBox[ 0 0 612 792] /Contents 485 0 R/Group<>/Tabs/S>> endobj 175 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 496 0 R 497 0 R 498 0 R 499 0 R] /MediaBox[ 0 0 612 792] /Contents 490 0 R/Group<>/Tabs/S>> endobj 176 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 500 0 R/Group<>/Tabs/S>> endobj 177 0 obj <>/F 4/Dest[ 178 0 R/XYZ 82 721 0] >> endobj 178 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 502 0 R 503 0 R 504 0 R] /MediaBox[ 0 0 612 792] /Contents 501 0 R/Group<>/Tabs/S>> endobj 179 0 obj <>/F 4/Dest[ 181 0 R/XYZ 82 721 0] >> endobj 180 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 505 0 R/Group<>/Tabs/S>> endobj 181 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 507 0 R] /MediaBox[ 0 0 612 792] /Contents 506 0 R/Group<>/Tabs/S>> endobj 182 0 obj <>/F 4/Dest[ 184 0 R/XYZ 82 721 0] >> endobj 183 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 509 0 R] /MediaBox[ 0 0 612 792] /Contents 508 0 R/Group<>/Tabs/S>> endobj 184 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 511 0 R] /MediaBox[ 0 0 612 792] /Contents 510 0 R/Group<>/Tabs/S>> endobj 185 0 obj <>/F 4/Dest[ 186 0 R/XYZ 82 721 0] >> endobj 186 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 515 0 R] /MediaBox[ 0 0 612 792] /Contents 514 0 R/Group<>/Tabs/S>> endobj 187 0 obj <>/F 4/Dest[ 189 0 R/XYZ 82 721 0] >> endobj 188 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 517 0 R] /MediaBox[ 0 0 612 792] /Contents 516 0 R/Group<>/Tabs/S>> endobj 189 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 518 0 R/Group<>/Tabs/S>> endobj 190 0 obj <>/F 4/Dest[ 191 0 R/XYZ 82 721 0] >> endobj 191 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 519 0 R/Group<>/Tabs/S>> endobj 192 0 obj <>/F 4/Dest[ 193 0 R/XYZ 82 721 0] >> endobj 193 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 520 0 R/Group<>/Tabs/S>> endobj 194 0 obj <>/F 4/Dest[ 196 0 R/XYZ 82 721 0] >> endobj 195 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 521 0 R/Group<>/Tabs/S>> endobj 196 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 522 0 R/Group<>/Tabs/S>> endobj 197 0 obj <>/F 4/Dest[ 198 0 R/XYZ 82 721 0] >> endobj 198 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 523 0 R/Group<>/Tabs/S>> endobj 199 0 obj <> stream xK6 ;(0+khM뢇׫z{]MQU ^?GpzkUI)ZSwj៬>ƊPwmO,U{nq { _ #m<{#X[公m U0V~q*Eevh|46+GFW»D!޿o`!_qa <`<tb%G #^[.a0꒎zz/R{AGKşG)(b p]-2Mձg*iPt|J ְ0j $* qetEJI<ԛRWoU,Mæ~>ITpU|$R~Um @stnIsb3$:8I3QqE?by+ey5@=G=MFNQs mHP*)hDdf ) lz QL8Ϙo4䧯}#S ! >)TɱIHy(m;0)/lWDʀq P4<"8Pm|4PZeC#$f ii M7Y_=5KWcu>ŭ?|I]-: rJHMm Ě90_TI f)Bem<Nj;YOmHf0MK$޲5+ (I>e!ŞcIRc;X婰[as *tl&tҭQ",_sR+"e@JGj ;t']tMϱ{>KޭrŊ('ܩrHVؖkŘsZRVT"I.CLivoalS܁THꮥ2L‡ `gt4>5/ȍM+,KEb[$"|\l@"R&sRrht&CprTљHM鰦/a:R7cnT'sCl0"3:2M 53%1=bb^|Oy>A&,+7|(&UcCK'd4ݸm=` Hɴ8LlUS`8LnNO*h$~BKaTҍa#܁̀HrD5 2)gJg#R< A0ϔǤ}}m>gr97]S50[jkqdk4lHU؆)8eE;ߞBe>AHhޝߧm 7čZ:L8PUgot]ӟvdnA{$5{ endstream endobj 200 0 obj <>/F 4/Dest[ 205 0 R/XYZ 82 721 0] >> endobj 201 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 524 0 R/Group<>/Tabs/S>> endobj 202 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 525 0 R/Group<>/Tabs/S>> endobj 203 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 526 0 R/Group<>/Tabs/S>> endobj 204 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 527 0 R/Group<>/Tabs/S>> endobj 205 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 528 0 R/Group<>/Tabs/S>> endobj 206 0 obj <>/F 4/Dest[ 212 0 R/XYZ 82 721 0] >> endobj 207 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 529 0 R/Group<>/Tabs/S>> endobj 208 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 530 0 R/Group<>/Tabs/S>> endobj 209 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 531 0 R/Group<>/Tabs/S>> endobj 210 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 532 0 R/Group<>/Tabs/S>> endobj 211 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 533 0 R/Group<>/Tabs/S>> endobj 212 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 534 0 R/Group<>/Tabs/S>> endobj 213 0 obj <>/F 4/Dest[ 214 0 R/XYZ 82 721 0] >> endobj 214 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 535 0 R/Group<>/Tabs/S>> endobj 215 0 obj <>/F 4/Dest[ 218 0 R/XYZ 82 721 0] >> endobj 216 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 536 0 R/Group<>/Tabs/S>> endobj 217 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 537 0 R/Group<>/Tabs/S>> endobj 218 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 538 0 R/Group<>/Tabs/S>> endobj 219 0 obj <>/F 4/Dest[ 221 0 R/XYZ 82 721 0] >> endobj 220 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 539 0 R/Group<>/Tabs/S>> endobj 221 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 540 0 R/Group<>/Tabs/S>> endobj 222 0 obj <>/F 4/Dest[ 227 0 R/XYZ 82 721 0] >> endobj 223 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 541 0 R/Group<>/Tabs/S>> endobj 224 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 542 0 R/Group<>/Tabs/S>> endobj 225 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 543 0 R/Group<>/Tabs/S>> endobj 226 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 544 0 R/Group<>/Tabs/S>> endobj 227 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 545 0 R/Group<>/Tabs/S>> endobj 228 0 obj <>/F 4/Dest[ 231 0 R/XYZ 82 721 0] >> endobj 229 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 546 0 R/Group<>/Tabs/S>> endobj 230 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 547 0 R/Group<>/Tabs/S>> endobj 231 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 548 0 R/Group<>/Tabs/S>> endobj 232 0 obj <>/F 4/Dest[ 233 0 R/XYZ 82 721 0] >> endobj 233 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 549 0 R/Group<>/Tabs/S>> endobj 234 0 obj <>/F 4/Dest[ 236 0 R/XYZ 82 721 0] >> endobj 235 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 558 0 R 559 0 R 560 0 R] /MediaBox[ 0 0 612 792] /Contents 557 0 R/Group<>/Tabs/S>> endobj 236 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 562 0 R] /MediaBox[ 0 0 612 792] /Contents 561 0 R/Group<>/Tabs/S>> endobj 237 0 obj <>/F 4/Dest[ 238 0 R/XYZ 82 721 0] >> endobj 238 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 563 0 R/Group<>/Tabs/S>> endobj 239 0 obj <>/F 4/Dest[ 240 0 R/XYZ 82 721 0] >> endobj 240 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 564 0 R/Group<>/Tabs/S>> endobj 241 0 obj <>/F 4/Dest[ 244 0 R/XYZ 82 721 0] >> endobj 242 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 565 0 R/Group<>/Tabs/S>> endobj 243 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 566 0 R/Group<>/Tabs/S>> endobj 244 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 567 0 R/Group<>/Tabs/S>> endobj 245 0 obj <>/F 4/Dest[ 248 0 R/XYZ 82 721 0] >> endobj 246 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 568 0 R/Group<>/Tabs/S>> endobj 247 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 569 0 R/Group<>/Tabs/S>> endobj 248 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 570 0 R/Group<>/Tabs/S>> endobj 249 0 obj <>/F 4/Dest[ 255 0 R/XYZ 82 721 0] >> endobj 250 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 571 0 R/Group<>/Tabs/S>> endobj 251 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 572 0 R/Group<>/Tabs/S>> endobj 252 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 573 0 R/Group<>/Tabs/S>> endobj 253 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 574 0 R/Group<>/Tabs/S>> endobj 254 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 575 0 R/Group<>/Tabs/S>> endobj 255 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 576 0 R/Group<>/Tabs/S>> endobj 256 0 obj <>/F 4/Dest[ 261 0 R/XYZ 82 721 0] >> endobj 257 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 577 0 R/Group<>/Tabs/S>> endobj 258 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 578 0 R/Group<>/Tabs/S>> endobj 259 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 579 0 R/Group<>/Tabs/S>> endobj 260 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 581 0 R 582 0 R] /MediaBox[ 0 0 612 792] /Contents 580 0 R/Group<>/Tabs/S>> endobj 261 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 583 0 R/Group<>/Tabs/S>> endobj 262 0 obj <>/F 4/Dest[ 263 0 R/XYZ 82 436 0] >> endobj 263 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 584 0 R/Group<>/Tabs/S>> endobj 264 0 obj <>/F 4/Dest[ 266 0 R/XYZ 82 721 0] >> endobj 265 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 585 0 R/Group<>/Tabs/S>> endobj 266 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 587 0 R] /MediaBox[ 0 0 612 792] /Contents 586 0 R/Group<>/Tabs/S>> endobj 267 0 obj <> stream xkܶ)NHJ2uN-C?d{>bO7vf)]_axO+385O ܽbIXR˜JȼN~O?ݏW?OW` /af. `%rTy"os%]w}[ \L`m]O,E."R4ңjß(OfWa|Z{Pl!Y.O}K&SvS.+]vSˌ 5;d7"ݏDq) 5y#&HK)[0S9Hr8RYV!fILG>LmeVմ= !z?*gec;d7(ҿY}ԉdBI{ˌ tolͪ ]PX7uzDhoyM2,]l+޷N b$"Fsg"JcY9kB F\e)/j7|ӽw"}(V@23{3 uR l2<ݪ?G##P9KzTý-np= f<Ӡu3󬎒,$SKi>Ҹ\GidA+nD{D V'M[2#'}Q2/CcU' ayk)i֯"pQrSvO_v0籚<^"vm?k&|̀ >G8pTiQ -HV/I (Ʉǘe2J +\4xέx.d(=:Fg2+crr\)Тr~ȻQ԰ƻMDKڷ}K[[/d"w&SZ-J<{Bg\bJb^7 myfc7@{|ˑIZoQСG5.݋nOnCc6HPa#peHXU %\fC1kw=gHZf/ Ю%Jg,W*7ξK cbe {ԭx@pW¿hɀ8ڸX[BnKf,q]1wOf`|K])d1Hj@I$8!Y/,h2^@$h!bόOfDdfG.)Sc^ L l6Gb ?5$3}VWuX0@J1G K#a.:Vüo,'v#`U yo}=ip@G%~ ZpAfOh)3jl Ӈa{~(K9ĴwN=N Ns3."1N@Q η Ǎ(AP2\gjb+ g4vg66nYǑR@wQWR ˼,+ q_6 f WuqS<[} :SҡT a:٩@H@ *ÕcrrșylZZ&[7ljQBVt6w c*nϧ J znR!/0{f&M3>g"8<|xwd<5Wķ?Io53nmfUbrj֟k x@f sNϭDRqdk Ms)dawXvKِ-׾>"*WO)]/.b-(w&jFءR #Y?0EG.LJdS Tz: {e&7=-:ķxܾEP%=&Yi:\o3]ñEf{8l8bfF l5hFS cR:'pxpmb.(,@QJvլkR?A8 d!pTM^ᬢ+!ax٘Slas!AEهiΛlmT[dPMgssӞ<]GN|{g+ei֩G jDx:Js0̆B) S bԘ˄;|z8uGAb6DEqq;wLPF`8Y9KOƆ 6v^_È ,nsOVsfEedƭ (9s[ᰯ\̊*syqLႜ]ȯGa:!nͪdQ#ou:G*,W|eY~DS bL;q<9XDaodgd(Y j8ɀ"J+;pAG YZS mg{AT4%ѣȴi4G $Ψnݷĕqfj"~օW9V~U[ph&4‹.vpdtצmX'_XƦ miYHm̼)^zN)y35Bj3k6,MZlal4f@p!=rB83ݹ iOY:z}?^!y22ŭp4n9g~y^վ3@4i?oDP5Ϗjf|O=_d~P0+҄ ڎQbeoB=j?;ıE뢡520 YTcay\VYGq4Tv1%WXP?sRJ!q]:UST:)xI'wADTgs]]:YG+vD!"N `jp=O"SƖ2Ad=ۦtkz>S:t4znu*eQ`u*0ݛ)q#a8g.3a8O $m1~?Μzy:WO =Ig./My s1\DL{n+?D>/F 4/A<>>> endobj 269 0 obj <>/F 4/A<>>> endobj 270 0 obj <> stream xYmo6 A*kM-vݠ{@p8hme6R˾~ I-C["3OTV]0J3営!P{ᴷ?5ZLO4}GTLSKf:mM13iYm\FDL!2^2 DjLi fHВIBXѠxaXоfe?(7ZUYnU6i;\is\qn }xf"}3u6SidEZeBW|J2>Llfz.E!iОV n :68:+in`?f$š'O w|ap]&_T c}YgNwF6a۹WT]TzoQ n s@OZ'Z4MaA4FOmjTMXac/Oӑ2 h+9$Ѓ/@ *s\ܥWS)lɔǪY&W̦_|f&2?Ѡ6E)z WSzJ}QJ\B AjD=YBcZ v]f G僓'GTLr.RS֗I1|I*~dFyyeq%r,*1 v(ɀ@x }/(U 8 QjjP'D ͛9yQ)B}\sD"]O`nW tۇ < X}B79TvB/^|5KP(m:.R3_*$:2=xQ*Cm_e*Ʀs{kWEuUB{X>c`'d0XY(t~v|k }<'P)vI z$+A2%@\-&K6(㕏Vٙ!OI  (vXfjRhu/TP) $1F#zL)E/if &և(G\37Us5Y4g]ᢹg4ܖ(5ac3ߒĸe$g.TXXih%ɑsfnq('*,R hX-9YeZi]3>XXݐR+h𾨚y:£ǟ^ezltJ%²GU(wejB$ ?P/qR9RC5H:3|gwSx'4Rĩ-|g'lnR*ψ6n2iCMN2Ӭ+HFZ&oI-(#*^mh*{\&rJnDٮt9uF"8sHPh~жqjGttsFKdYt#j# $ҡc|""` [/Fqd v#;W'Yc $jKh)Y@4;$=Q*|guU D瑐@=vD|'Ժ KSBϵ@v{_m@K6n;}tfuu'diݤl#&)qz=Iyx"߻8S.7=ZWU7O3I=3sl[u5=$}}(>uAcI|@< Ov(@_`-q;~:ASDlCJyO)zZrl&=j-ZyNh endstream endobj 271 0 obj <> stream x\YoF~7@e9E/@-]ś Yh,X5 ﷪`78 2,v]_Uu_^=} KR]<}¢cQr"do?Ѣz$4>})&khO m%*o.Y*Mx2)#ƓLE'7ӫHш ieMTlQB&ygC5>%Zkhaf9HɌ1B=m7xTlHxY=L&"xpeK}Y*V&`% 7YpK˄9~Z7?}/&gYZNxج'ga?x|E\yrpȫeuҫɒ,k qî(>ųo0'Y_Z)YV2פeBMDV0GgKkq,9WbA +*=_oN7% fhV;S1b}a>{PEZĹ LwukȑĵfX"   8Gf s0r5x3Z`q6۬ר|ij|Hu22W!y<#ٞcy\wFOqvhC#}Af)@79s216'6{*JTk\>N=>Y)f%8L;O?bi*st3!R|O5{y)%6Fo+lH6ߜ=~Έ5?Y3V>D*2Eۤ5@bR3+M^!2a&Nu!W16Ƨ%7G'M*z7OWft=]q]#3 DT% |8.R6FGH8Gyr9jlvQPouNVW8.6f( BQ'U9&hywdvx]{2RjC.00S-ynG@m5$Zۀ@AP|),&1ңڦ>5 ijjXZ`Gu>߫ri珗p :]i >L> ʚ<t ;PdۧoIhXԖS{3i=Ɇu~t:N˵P#fт) paƴ/ `{(,x:'4xٞZbͼ/Z Cҏu`-ė& 0h,G q` KI3$JN4hm>RZv_`k@h~7^Yx$0@!2 S"˚" ;=ʺz͌]K ۃ&r|[qÚXdg!~t"I@-⻩Lnsk1JV\9Or֡r{]hNE79 HCݯpRMut2ົChq ^QNv q$B 0z͵2AHy8I@E >xx /@N.ze5ӥdT?|@)Zgu &\ჱ= Q "é&"N :`Ge N':g[YN FWX CwpM>$|g1qm^H0d&;ȶtaM}8]|k_~>W␤yu*aU cc;־p]41Ѣ=j qvHzE!, ;=oGօg]V|ˏUGEK #r#.[ ;cK(,!!mOf.V&kb rp1002U* Jc;W}h.僋Vn ⃿[ˉ,fۯL5Z*(Yͱssf^c5(@נi}.nonܸdLxc֝G0+2ߦaR]h{8Glr|W _ csl;7=s.#^-!lv2[C5- eB$7l !aUl)Ku/Yude\)wk1iuZXL^eO&%Twq;o7߼{I;#҂(ӟm:)vhMpsUfI8D5ؾcs]kY:]8 |bα[)"<%鏴8HyE{nl0Vk1>˥8ԫun%zݻ53zq+_F|jؽaQc'k庫70&\dxkg`P - غvڲvڱTغvֱa ?NQֽ b7CP)|x~:5{SU٭1. aĪZR G_ .@&;"dnz#UoS=o[W82h 燐vS%ėVPieCXBtsGec؎D^ڈ՘'et<܌WmXF_ϴ9јs JV uGF_46~\},7 7w0PįSY8#."^1\"s:}Z9Eǰ4-tnyydtlK;5{[]sfS%Kp3cyn L׹؞gOqwKQ:%P_Sadb9nJIًa/'eH$Q endstream endobj 272 0 obj <> endobj 273 0 obj <> endobj 274 0 obj <> endobj 275 0 obj [ 276 0 R] endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> stream xWn8}7 $0Uz^d&ċUݍ;CR%KNuD53g.<_LǣcDx,?`6`\f5Ưʸ:2bǣ=B_N{mF:̙\ȂZ =Vї~+Ae S8٢AeubڤcR8J"aטj1䟵Ta#h <6$(C['ToUv':[{{nn i 9)-|ۥpL9QMΦ8h4eHr*@Ai݅K>1;Evu66{7o?lƥ>RdgXWLvE%gxٔO7Z;%na2#`SNzgʀb: GN+p-Eo=Lլc.eqf;y>h_GE\?@q̣ZR=wPFEoAxPZJHC6ss `&eʲs&U.A\;HP#FҥJK:OiN~fn': gE ~AQŠT0i_ UBӡvrh`ʞ6=!)C^O/$R-8o {onIV;h*u}\v[a 9R&*6/g0l:0uP0$ŰFL< ` `cXBE)HL~V)NB6ez}VieRL]M4_vUU%#5lYYgUѱhU؍7jŏE5 endstream endobj 280 0 obj <> stream xrܶ]3>!$m%m%PT"nbTpԪc{M~/ϾH8gJ>$?<)5T(~x_&7YЛo?}H?8?{ L.siQ0:gLJl3:g_Q`A EҌPf ejGK Vqo'ܿ+OBj^&P|e &>\JM3g:vw-<6?YunYsr˸s$JV&}c*ӟUVܤeHhOʦIl}+ǩPB)?<L`?5 __vӨiA P"8?.?=rPR̞Ȱl62NLLXIdR)H &z<?  COaIq?fE$VyA ǬKJMly,8L_"CH6i'YiA͸@jWgxQk2.v![o9T 5?!ʸv>084}Fӳ$+aFhABX.M0OR|_/_bP (Y_LҋǵI^I1'X}nX`a]5^UKigh3D}Dm3_>DM`wo#,B[ )ĩm V#1Gvrt];)\B< ̨ L$ ` 8O dL], NME#, AK]Ctl@c^]^8SWc*G}6 ٯo^D[S"֩c jnR]˹MIa\90j]2%Bi5L"2V/- hкScނt Vkk" 'T9h@ ~0H)wWI> }/'RSZC->w@( Py7ņ*׉qײumbkK,'q&s(2ue,QC&d`:9d(KؾPSyČXWoq88y$!J)0>%v43*(J|wȮޒlƇ,o=|BdeyZASQa^HwU ',ȣ;HX_bo7l;Do?1JT8h~qBpUN1=+ؘD(N[A+D!q eT=)}lIA&`ꈧ*7bMRv\/ VZT.)onj -UDG/ \TI?9L=@I♜i)g: ix uhd %wB(&M,Ģ!!~s=&1^FL{N^þju Vy<ٽq.ހ^e^!&1HxbF&UCYM4Pijb)pZ~ WqշGAMg2-~jjX Y"s% T}^ጇoNJNaMMp#B|EJkqkHdۏBת`iuA7*9S ѻS`pY#t3|`_$aӓϹH97 endstream endobj 281 0 obj <> stream xXKo"G#Zʥ{!E9XJ+(bHoScvzgz_Uuq7~])0d0I"O`%o,d< GSJ?dx7\&7lA*%VpH0<d>%UQ6h2'$'i\.̱ݤ j +]^b'BE&)"e6P<80FLJva:qϬ2tL5t_duieќqy3֢;3|'9*,~I~ׯe/Pjh؞EQ6p%%Q֍(AFy*iBՒzɔ GjyݑWʪH"%nE|95X8S wx&d{w gLIG{dj;Ť_%]6m}/0䳂o}9ұv< i<10+G_b(uf%!s-td{^G sU_8>=Zɗ9x"TtNoDUJ;܇s?X-X`5Jj*)2 -㤱5NqRmmG*Ӻ63 W\o?ZRcrU8ɕ1ua߱#ǔmxw5@ JdG:͘ղ9Yֵ̪kD %u6k7,9L"Z5cBBNf?Lв9LZ^ͶT, g?Rp7H6#i]A%^rǗ-TwCߘxB_Ar[WeZWP Ru<2 11ZPyc,D 8ꇟiS,z=ŊXϲoEyszHk4AW!mdJz[S1׺)F8ߘ 8Ck92`@&Ҝ\TRlp%aks]|?lf endstream endobj 282 0 obj <> stream x][o7~703U& %Y8Q8 ylWgUEvpXRWW,_U5ٜgO+aiOM6lfܜ~|>nv9'/zWuF:UҒ mf0rs{[AK=Ȍ ?Yz[by3h=X9k|s2f:o0_ c/n-)2Sܶ;b^zcBrvm\kw5@F];63Ɣ~‘ ݙ^CK -TklF5x- ._v=)9 M;71ّ5rL&c?Fٮ^]+S1drV2抮 ۫ki<]>I`}__O/?)>Puz=t ~Ju?vg7y2uxE#$!]S]uxPl^5 ιCW)?D3jA {Qsaw6)`W|?Ii~s~k)KʫK#ɿVz;յ36^@+ᦷ/v#JZV^u\7`gXvc?gHWz<c>|(vH;KJ`ļ{ga9x{e0a珎$ajɅI7kIwTq+vUZ-l_ébL$=PKP\E5Aa!=q%0NÍ~6\r~ 5 !a"!I~ܫGT0iD>!?s^e 5RbO1c XbhT^Aealn.jKh@!9otz|t~I>pC ϗsPܠ E]Z5o;-Gx< 16ӬMȈAEQ ~M=+H vЍ R՘K~BURIZ CHGq# AAz`+yxfR};>;{~Wa~I_0a3 \A1N3 y~ͨ{ ˑ5VeKޤFwBk `%:л)nfMjF[B3w|NVP *|# |v%(P,r⭠8Ud$RE5kX7 |r:ʭ=1m'43i܈#0_zf o"+rqDaȾQ,(TQ\ruUBՇ Ƒ]}2wDme':G1ƌ9xLN+~*v v"jbB֨[Mڷ3;+>" 4@S D X}#^-bM85҉pu _@6jB4$[8bkvkqdJut $(#=qd+a 53cl\i"9ЬG&ښd{'J'ڕDLd"A+%ZYܝɏ1I'JdxBO唎H*U \N B"SjM2W}φ sJ# ̲46i̒<,Ҷ4dlI&UgM,Nge.0H.gdTuY`T>e2,2AFx2.i=,3 V@Ry2/2L4YfcL&eR$LR2Pf{o1~Le,2IO& dȓYf%2 \i2Y&2eꉖ2hD5녢El\mm<٬ZEenM='M[$l*ΰ0^I9iתlWB,e曂ofΜmɄt]11Yr&FMʔtUgY*‚V%iГY-ʙSq9Vˤ96(ϱc)ﻣ:L2,tiʤhwaj\afp R\P<2Ix%Noxdю%VA;&%iГchmn\yģ2+OIUyiy3PO^*kq d‹}˝l>!Ys,K֠/ȱI4Y^^[a!7&9>^Q>m?yN%#+T*]^[%h",tNS:ײL8&J-)҄=d:*X׼a oaQVv#XD/8;i >jˤWq)>d=?Vg;"l}i7^tJ+)dLeљl_W;gDktAپoQ^kш] ۯS?k*}ߤ+FBY}y9]/go/ʰFOWH4l.bB.4S_UyS)}xpPS+ a!ksTnH 9t~Tvqo4VTѻ'>P4@}zRwLN+ :>#F%4GH<dI =&hbH1 5 "C`:;οM}{)];fH =zW߾5zO8 OF?V'kLxڑ}Ý>?3^mo#>xP`##:7m1Ns:٭Kw+?SEŖdz}ƹ{c<3Fc [F  I@72lW"'%O . }^ۋҩ@׻~16x`V=5ƱA4S̶:):ȧìl~$eLhzQRW&zlT4j@(C6"G#}`,ҩ"=GvS /nwkB+Ш C%PE{%];4c| \s6}l;$m#/acydWi-D1:DS9  UOBWT sTRO0YWTׯQ9wPr/d{{iC;?eRb аw9dHZ:Jӣ gML(c6E;1j9zYl^X̯Q9×I/-'C'L7G}os-uj$Y1ڌș]P䕤s>(^ނqjѠ9"G$"'z'mă|Qh/?A¨Jˏ1RFXH=L*yu,qRsPiqƆM;FмÖ-)C P,O\SF/;OEale_MrZ54UhADfA,~Kldu&[~D !rzxD7*Z|}>-&j(_"f04*ZҨ_EA@Ž '8LF <ȸA0 2iiJQ>0HݒKCeeN^ʋiѶˢ(VA#3+4۵.ޜr&'%x[Ŏ D?J3ZhB2}!o+"\e^dZ6˨太㥦H x2`i«s$|B Έarjj)Ք'cK&V& !TҳbKIQ["!Z܁h' \M"EH(3z2N`/Bl;.?\@'Ndk8>fjZ`AP5 DDmKhE|wL@РT\| l7/qK;+wk=ùqRQ67\26T"* !^ tMLțTD9#rBQ*?D#|oWF{ޚpj6AP9n-k4m=3WU);CW@2 2AFH=uDEyYczv̘ZOzvJgw/?3_j)dhߜ|i {iDkroxXm!%p~+x~m.or{LOμy]7V3Г3I Qr4ω^鬐jY$}=+B«_Ʊ_ζcYnKU/*X:X=2:jQ9>-^^X՟Luw;|꯼ZxA RkORpdֻ-*{(l-%ֹ1Z!+OAd\p<.VS6 _qC`ļޠ>X[%# ;[EW Gx1ߩHB^ Kzm6KדFI%e ~]'Mo- Ȫ=#!i 6Mz6Kz+x':l;,cεLv1ߌu?u7Cw \_Ĥ-.qG̸N* a10FCqn{X}Y'\뾅t߽;Q@ ŀOvub>?19B+G"rM5hY➯6Wxe"]̾j;T"vꮾJơ QDE2Zf aBb_Qes_U}1,YYiڱ˰K.b]D,&&9+UwKRbו-ᷬxgFOHgfK T(#<wi=Kҙ4o~&ciSg$SGym!x 2.(UYQ>*X:+?T6Aӕ8~Wߎ# 'hG&۟ DD:i-X**vdg mϔ%褬2 Jϓ:X_l_ydhsISl8%kém#N\PpZϝ֌zG[BON[$;eSD2VkI T鬕 fzbsk^wp*^ yTe+,sdžW2f=V!z)<"!EKp*vqVA9Ǧt]Q`GNiBONi[d5YViBmKVFe)-eCVn@S; v_G03T}Ӆ\T5$&W endstream endobj 283 0 obj <> stream x[moܸnAN `*}鵇\{Nk8ll9K EIDjdr3Ù!9s'9IWҬL.NO~tzr&ٿ˟OO@?NO.ItnP<Z9eR*V%\0M}zr"DhH a*Yu(G5R1x Cs#Yr^*7RӤ|A]8 (Z(Svx )*;j)*=t~x* x:S5uWRs5L n^2! Lpf) &j*2wsLiO+W3O @v9W@}!,8x Io2RMUi nm&{4hf뙝*QQb͔L%TJzoF+2ev.2[7nyYծDzܲrK V VJ#ukX}Mn3DW5-ėƠyyޓ@=98++b{XPm<0;H2/X!Ax}Goe~<(piGLC]U2 Bå'57lz- ӽEUOE80I8@1wzp6ǦѲ@\\G%<d6tJf@vV&#j!| Tb3Sʿ[ p-,pMA|&ݼdUͷy©v pFCwJhJM*CޒP oJ8p96"1y4NƞJC[9;>!~-fv(ǓP{iQAkX{J{ sK+ &lVT )h3rGMn}K:KȪ YfI+ I@.IKf(Ia3HfWR]"q[קAlBԓK)V:f<̓q܎uqT WǬEz H7/p-7鑢9? hl? g'p[ɛS>z:APAGǽqV9Ɠc0!Kƥ]3;c7~lج1u>3Ѕ6F@` "xQmW5D-ƃzsl8bKo֥ +\*!B(Mw<9LjwZuk8u#Q";%Eէ?nqmc3SV q !1(2<5a!͚DY`Ӎ3k̛a{fPnzV6z6!mr"jycXn Ȓk8ȵ(P7].kXds6PUPF!j7^81 qav1]bJTh"AjmF{HO>N=E@:"2*P)M7 $?f0 ^gqwhMezool%/]PmuSf~ Ni ڲxM\}\&G~kK3;* WQ /Ba^]}Բ{1a%֖W,9@-~֛㿵j\|z6]}j~po(O6`SM6?x9?@A2Y9_5R9~t6+Ț9|xh~@򒦩S%+;9|ayD~pZW50*DJqg=x/J0Cc³BElbnKy߱YO!*XLsłIS>>wIyDL2? endstream endobj 284 0 obj <> stream xɒ*kF5)űrsЌ9&F7)'o7ϟ},(+]y(*'Ɣ^ڔMgUqXxϾ=J+KSY[kQ`u)TlFm!diMq?{-)eqNS$/8ƳN{f(]j/}q]hdfv%T?we=TJ$h-]R=Yb ]`ޮ^~V^{N0#hVϜyK3U)MJ)$HJmINLӫ~-TAʗmeN/›uBkuݬ:rxa@d?v=guS>Tp噸z7nvѦ1tC#zzAf 8m#7?k\AWDeغlÀBaUg,@L1 Ӱ Z_`8 g:Vuf JYS)ٹmiL:o_7Kq푚ʋ J ܣxK0,lK!@24ﲱ$J<0¡[6E\IS@}4u Izr=pr$y 2|@”ٻ͎𘧛,[Nt Dn⹉/U#sU`_ME}AE|=b=*_?~ׇ1ǜk@%@^II`#*&a L4  / vw`@ |\ҩM 1 Q?nȜɳœJpsPc$1Tkl r(J؃rYfrzRc~O=!$gzxd27I;ҽ磋t"kR Wt{mH6KHt \Gdw Tt {Bڍ>#?X٭]:;"E|'7[>R9 qDUɪl͔x=| FF"V Hƍm "]d!T7Oќ^da}p g@GlAGzcu|:MWN M]: -iE)tn @7#a>: yN~OD!s03BFb"VHB?hst*>lm_WVA`@U9E 1g-X]NljMl2ׇ|FJg _t.SyNGMf+y+"Cq%|>97hI\#`p&z-eVwS7O@ 0 ~̆?Z%/0)TYkaq2+$R-s9% gf4Yh\y4hnӚmq. <)4y?B$BI,;EeJچ]1p]:k|f( l <W-ݔN~YxkɯBU3IΦ%*^;bF9դPCGӤiz~umG8#I>h L%T\UsR'! K:b~;# ^x;y^k F Ѣ{;.[t-0j+J+&DsI1 j:zAB,=t>Dm~g4X%*],m+16Q8ϰjݲGT (}=Wckh@)!tAҀ^~9q y^.o)IUc(Y6sA@R4s_4#GV_4FP x2_Ы#Ҕi b׳VAApPR8mm6aࠌ.{<Ʃ8?\ vƔjF4x8t1UyS-)iXaB|%+n;14x{T"wR=qB^{k A-\0EF5j3dngހ/Q.ae[AASy`9ӫJ(_7 i[D۾MR1vUlK2{֦sC+\ (uD zz\Ğ&tnM"UMuo$4.-M. |⡁\Qm 6`u]Yn-Y-oSf ~a{W"5Ѳvp2`H wAu+Rtjc L(?㄃fqiןw;xJ\ 3']fkYǮW?Py'rjHQ-dRhOUpeS0N2Jbiܧnӭ.abL)p6]NIKs^rIHh%ߤ4e [M2mݺgM4醱raYhqyN ځȕ铒YcQ/QZ6JWUMObl4@]ͨxU,erNJ5L̕'ͤ%6h}h|n`520eIMy^@Iż723HuEE(4M:qEW?R*Wg&j{%Ćl'?i8B~!X^]LaIʍ }8\Ć2=AѴn|_g endstream endobj 285 0 obj <> stream xYoF7don}hK8>VbV73KJ\JP(|fvgW`ndq U5WF-?Ͽpyo?_^ܔEߗ//` VO#Y6M E+k[0^kUˋψI"5DD4<+'*SiyHz2G YKdC3j_a-/7%%W_Ե*uUR2-!URcebq8-3{[ǚڶ9!3SR#- M ^#L>@= e (l-yV(ۻJg9^|+rFfw4D7T1S~SWytod$I%(.\p\vuH\ I?|)~h8%O(mMQY'h[JDǕ,R< A) )َRtSߢwno6ҩ*TmS~J7!!f]ޔU+Ȗ=1E6DN"xo\繏I!}ȸ w>rr Qp#!r2 NXbQIG̏X+@Oݻj+/r{WGM0"7>l(bڷܩ+& ԕwx]=/H_rS2) 7B B2P"VRJN&vO5hz9u=Q?ge38ts] Sy5`b5r?0E.9{L&uRTX)zqLՠM\i]2U^]MI`Pgikam4[FS*R:闳(ָPh# #k=:_zH݅?L6$3l.@ ;$NrHI;zݐ8 =qankely|^pS{TjmgW&hd r|y^rt5]gԦquZ Ľ ;w{؟#Ish_ \UrJ@o+ٷH97Vbm+O?#G& <#ΠsejeR~gYg'sqV}KH Xl5-ܖy)]vx'uaa75֦Mw8rS0d3?}]#F"$ߏ 4Ff3N`M7[sp4=JXu1oDt%@ͣ_lTΥ3 qux.\"0pB SKBOr*<ٺ endstream endobj 286 0 obj <> stream xZݓ۶(zr(M؉v'Ng_&>5M \#LcX[ދ՟^s֨jy}ūՌ#4k뫦^_[ToW_n$d1iveaZ\3m"yZ<ϿUIXkB~sԞMފj~:av~Qqt-(;&G'\T w^lk87js1fZ/ok)!HSXO2 IӫiuLB 3m%dkL1Ec\&GF.ILiD.>oo &  L^X`=`SG8ّo2L==}\OһaI.Piemwl!3.P03F1i5ʐI^vٖA}jjG8;3-S"`kfzxR1emJ<`MzFM1ckjԜ/Y=F=J s$04ɢw',+{[_/P:Bov_j~X; έ0@k8\M̑ QRNHnJ+~| jϔp2sg9!!w֓C*90 ,3&[heM ВfNy̶<$PuEw97qZB/t=)$ۡLX*f7XFd8o!o7so6!?ncO $ݪ?\vguhymCwҹ6C}.@{_6x.;  PSh]$~XPsU?l';EN}_;oqNw,^@xt#*WYC=eh3!pL|󱢳a?P 2,| bS8.s 2v&g ~ Mr@rytpg*jfGyv-S/ۜ'}#ѻ Eb%Y&J+D˔' ?vO/t)pA̪ozx1?}xxvJok_o4\0py_請W$V6ֵ 8t8dŤ;ՅPSfu,Tkq:~E뼉=Gמ! n2,_~6=p>E׮OE3"X">PJ2!4| xK{R* rzW)8 tzRbSwAi0``7SI*0@F7+TΛ;Ǹ"T$Ò75FFp˱uL6? aOQ+o6Q ; ͜/#$e9!Q@&G-%tnUj@ZTr]Y»+޲&JEAG.=W?wK:V}@ױ^c%r# F&0\/?3V Q߈ Cu@jA]8?$$ug}?&{[AȚ-~Gp;ھ aYkrYN>w!L"xHD >3^6 x;&»݇-en:Vkh2 =rh|KN!ِN^ 2 G^ȎLBz1z| eA>IA d>r2H'dk}ոe:X֫k=9ɹ+EBn<9(w*v!]&H(B:旻>]h|'u4ky` n}Uo ;ٵg*M쿓U-3}`I7hOBEN>r&CQn 2ٍK^U9nOw(_KL#8&Q21Drlgb\;tӺXϊL˙X3ϏΩ2w /R_x6v xjB8y:2o endstream endobj 287 0 obj <> stream xZݓ۶8y<K|t6Ii22}8A' )v.JӻD,]xu{}yX^ gQ9GTn?~[dgv}r3sUh,%ZVYV"&322sz" WD#4Ҙ_/@C*-dnᕐDzg(=CUvs`:%u^N/_MR2gXeo͉!*<ve)jqx8R5TbU?+u_ΟUy%'8v+"c2% snqxQ ~]Q?zbU+VbqXEPTJl915,eYRRƴIAP8+Hd š{ꌿ?%Qit|Fq%sebG(m Wެqz$=ݣ?w ~k9OdVoA+C?~b,3$Yo65_C2Aۥ#\:G㒩Eh%FIDnjr-JL9ٻJ+4`!s%Ald̪mPs`ڠ~Hk\y5t ub]ų(>\VOS4+0<;0XO^ݢN]%H7uhDй i`;٤Ne'3Tb j$G#m벁}Y]Vj&~hfSrSad:)k 8UUL{\tTs6Р8bRVJ9Sձ:/UI棌޴ ֽ) ɠ+}%_۰_UlqnDe~eXZwRm@RBR Ob/2M 8c`TSŭkkKҢqCc1r~_۹JU\XdbH븚Maw톇4w uT4q&m .hKV將i/~P>nKj~GBP! e,H8jZKhZ]q`rc:&c_߮GuMhiւy1Q1 9 MзY,ʊc6  t N/\qR [DP> w;xh{??9c3>>5l=OiR_;H6d(C%D:/?1QXsT*e_q؎;# %8eUI24yT88&eh^;Cҽ3Gg٠.a'4t`OJcoڝ,QPlVMo)vnJNE{m2*HE)u^@Ћ .@MWFʞsL?+]66H0~h&G(fƇs$ " jB%_~kL]3ObR. vLD|e4lJUpS>Zrpi#t0qkBtp{C-Cy%tц!xP\x uC [/*=jDH!5:FZ,KMôk$8c D -lԂ{kᯯ=?NvO8C*EʵD48fͮ _RRj ˵0ҟ1W1u gQ%Mhт9HC2S+vR_~hgQy+;9EwoE,_a41%MfY'!vD{C 9ƽb>Ơ&0cvL^fvX[13[`%qYmYƚ%[R .x$f ֢Pb==ZJr ߆<#ܗr¶KllsiY+ an}0@tׯKI#ٓ3 D%O2W!$Sx0e.x(~AR $`23J$djܮƒ~B~r'K?1>#E v#gQ\?Z gAB[DkO\NeJzL7Ot eN|!_Ba8yfSɋ$%V<9d{g_]n ߴtI@ ^3໗z T2 )ﱏ?+={xH D`IzFǑ%gG^M>ObtŏLPyF~fA٤2OؠiyO#ϳ4x4v(HMξy}Eg5@2{[so{`$EpCRqulGZe4NbӸlNԄGQƩտ- d{Z>Ҕco]k^_XD2p?-nFj)4umoLV` ] R`n$#?/%J6rh endstream endobj 288 0 obj <> stream xَܸ}=JWE)N֛A v:=>6ٿOUȖonKdע✵z|{ëӌ'4/O]a{VͅnoU/7ßoo$b5kv@ee:\37Q&iD86#I:E{8b hGmmbd)켨QQ:GJ/cFzP?6ab2tsS߀fr{UoΟ;ԌiZ:IQB[HhJ嶃0YPpLWq:d~Kd ;TheL">2MM29z7sUi1۹h so[K^p콓FA~p?sG bzID Hв%eChP€RUdhHdY 3mc Ql+?Qp8A#\w5J#x@_KbqT|1+`ȴZ(,+m#5 P|83*b'T R֟ipY?6]'x{+_lvAAkrBZ::$S)0`#_Kiw_O #KѼ{S]CǙtyk<$,C p_%1sNk$U8g 2frZ{]ڴږ!RgsصIDE,3a ׸$P&9tq\r<΍+52c&3R]+2*7k[;2χנ=.i)n_}Bћ5o=L;,bS!zioGV*z Ub1$a^]f- 3&a;[}Qͽw`eɳ rZ$ L.8 &`۴n/񡢶o|[!fKrO~W:{ ;+PJ"F>QGIO=*Raf@$B>,+ɩ#H1f[}j+6RtvNKd`5bz >VP+8\ZA7~(tۡG5~ A^ןnʙj5j]%`0:#s+tvpim˄L˶l݊([vekX++ Z?=/=rPEpѾ2t:lkrv"hu2A!=8fHa9XQ'@9"tsP)lfiqPP~ӂ'7a~1"evdߎ#~/{BV"ͯBlz ~WGZNп"5iD-m῭)ѝelwyVh;((/Sҋ7ZzxiNYqOX'ݥԷbts\壃.G6r?`[/xk m\我C> stream x\r6}woqY\)rexDKZ[gF}@&V (fyrdJ"UpʋNN}>Ȓs:jˇNW_>x{-\H J*Wn+t*TIMtZɾ}#! )SW"ϏU2žt)LiURvCQft'oV^tS}Cu-k ϕKnDȋ2mPuگ :W_jw6Q£AIiMxBi2SYH2AG+rwdbE;}Km|9hkCS1쓪ԡ:#,2 z^NlLjrk w#y2Gײ;;[v>zun[ ~*_}>b7Gßwss.M )yG Z7{2WWZY+|oۈMRȠ_5ɭ`_t157J-[l<݀:۶gEOg E0K8a7α4<n{ÕܐskP Nݷ Qڶ.oVMKy?6ɋ{p8<ꕓ@֩EMKmq yDcHNEq֢Z"pUd]>C߳5.gMZvgoXO8n?Bl{+n{cs͚mx5xݔ)Ln_ѻqz-Sw1UZ Ŭl`o>V/LQY2KsZҜRuWunKq9Aw@cgdw3U;#+F͞%u26 Ez$/iGbsuߍwxX-1uC_u͖jmi؉jSm{ d)UJ0{Xn(8'+{T? fX(ZA2짾ɞ߅9->u9#+o8M,`[w<_3;nT1h`_h XpGh5X= VUV0J(S+&ۜɴ,c/f_y﷩wEA 2~$aNZM#3 k:M4ofM9<3?"{)61vѤyȘtq58,Np]! ]E. Yqasҥx;e= @%Q\)0~HD v#+D8;_?1)ADċWégQ:/N Y&:?>X3CYpE+fjBeF`_%ędL8M&H9jEtз*=7EUUq_XC?bFdcܜF"-lk]ӼqS"UQb,m1gYgF!]{""!()FD4)) q%ө* Š;,\Ly{%f^)3bm5FNHXE-YFdt! CfddȢlxTQExuL"&7 3{rkiHq5UJ̫(Ƶ6fdqzZwq 3g4QV2s2/Gd%3GeF3"#Oo=fV-3yUy a #R}9ybm4^NKKO'<ʒŢ-IF$A7eXLND'J$Ɍ(8$^"A::" `S ) Uv!Cb4Xڨrqc̊>0XC]CYD*(D|)T\,Rq$:NEpGTd VLEYSm"+╄ؘ7\$${"nJ˽у?FX'|e@-Imm6qSd ".dY.۲e$;5̰bElE9([<@`b`. 6Sսߍ4UAンD#,VM5ߍUMml.H)„:SWQ,m2K^#_m|aHǗ{|"(ϗ;()6'zz< Y f !)"ԟG pQ_sλ' x{Mr^Gٵ+QE5^و$jE,]eHvawňĐɊ#,)F"It$SV]F$ 6E1SzGv<' Qyj?%)2F}UE:[%DDX%HtXŸCCfB#.+J](8$x U)i%dLϺ@C^=96r5y3D"\q4iu>,~pvp3jGT֤Cf#++JV(5J— '!p3~D}m 0-^s$b :ym endstream endobj 290 0 obj <> stream xZs6~> G${:iN{LۙK$ײw. JӇNTX./D9Tqysz‹ EWҬ).T-~;|jQ,.8=y z~?=&AӕZiQ3^Ժb)l3xhOOn^TdA&!UL,ePe -S(/XmhbY7\_-Vr<[ʰzT`c̃KsCiìZ-\J}(-xT/^loK-3Y7M$LHCmmsHҐIp&l0Z!ظ{#!KϥY\g W_vKg5xLD믈O-Z&pu\~Ur@k^Eƈ%v"pءE[@}V0|">{‡#xl7Od-h>2HCɦAzZ;ͳ)SP.k\9v984R5'Bf6K/Iɕq]f"AC@lPуr fe:_@4#hm3i$'F0 / J?},6ތJo5 K,\ݠƟvm+ڽw˝޸A*"= kzv^HEA"w6yTBHs€Yܡ91q|K\(!uZz]Rg*lG&_CjFs||4(E}8mw7n hnMwg[8\\ ߒ+|Ű۳ ~&x)3U8(AW<:u$^W' 3԰xtCs{ 8z O[ Ч KhM3{tTId'pR,.]Ko\6P*( '`҇A'%?MHb}ĘPqeo:*;~k#yO}fڂliacw^h'zJ~[ I gWRU >TU=s/89:h# qMS~51gE@w"9Y&/I8&#0;E"%rFxgƤϏ;p> ndC`c|f([Jkuď.sy_ - LZ5J?Շ-d4e֫UmiG]QLNjVRRHZIJh%3O+EӾyw5,󒟿oJ0_2Qώ=retS-)Q!zp߁ck="XTq;^*b<4+3nU1RM rF}xՔh:jf=je)F_C ^Oԯfn~X:s\#8sg9F'S].grDS?%D9*k1҂*]L&-qI`$'b߂7(Fs GMG:=u&JΛ .,uя@eLTF#0$I?Gu"e樵AMD6j|vRu23{T3ϟٳ2Ҁ;[QNyَ"/aeHYx5B@BfihD_xu?u+ȭ'OM9Ay2{Rueg%bc3DH r%ݣW5ƦdO)S)8CB,MaMg0 ȬBZp@0J/0fL8~c)u`JLh1)R*K ̇rpF|y) 'Kˤ ,)@{ ZD\kۦ-sH6ӻDI5(a}Z|F?UnXS3? aU|D ͱ3(D/y!> Ud}<7o$^qt4 ˸gB%r7Yc+u];T1a endstream endobj 291 0 obj <> stream xZs׌{7ۉwҤ:NmR!ﻋ;x8:bwX7gԢ9=E h%=^\v{zR^\Eϧ'NO΁@8"V0BFքB b ʈŦ==yd"I 1 bգTRb{v٫# 4CQ TryU:4S:3i@풪V$B)1NT+wUfR E5tdU,6mE5 =ߠqˊrʷ0tBC?lp5|igmk|xWPQi[7⦚QaZnzӉ6]T[i.0`+aIY5BnΆϹEX^w5uJ +_iY/}Qy:`|/T |B/A"#3]M*_N.: S9=.rX7)vS5e[\Wm%(F@ kЭ_01a&\.Lu)t6k()!1m:8ԽI.Ʌ:NR<.5rpEdXe+!*[ 6q"E܂ >F?`"Z9P65mDK߽{|r$)3,TRuCV7Gktu{k-nYӠM.]D";xNd;ΘuќEADa'j[16PZ]S7D)؋ՊNɒm %'unAă Sb(R?P|ЗAv2 "C#ܟ ~ I"}t?dž 0^a]4?Kw y}%QHc \%a-|7xڭ~sf 6B?a({qhGCFZynYB`I4-%'ª ASA_t8n6uKKDu*IQm{WkRui8WBy^MJY[+lKAJLʶ $[2%|rkNG֜2JG%\dg_}z{p+_w햲qwqRT B%RMh֭ܵ nTibY.\)o]F\ϓ=[8CdzNI9=W2MgMd[X/ٽ^YPD]/Uyvu\P?$U^ $͜HU=k)2fpgT6;ScG!=ϨE󹌐B)t>XaC`;)\x?.Vc3E~ZyǶ)6'5G]3+D^᳼/s:)}X{v_boBo3:Gا\ lhTcE]cq\˞k۲0IzѰдn~٦٦v~>6״x<,ݭ#ˎCT\5x'>{Gcv?CAbUpO@Fb#PA&g|&iK>%|>~>~ 2}QmFAQW,c΄i!XqO :zr0eAm-~ >_5XUcy`rlV͎$IC㩣WjEƕl;𓘑b: rp'C1= qBB"|&uE-=iH0&[zܓ%4K{ntx-g^[y/%}AmwN' s[1'qg%|?]3,о\"ɞ\dVWJ3'> ->K#<z'^%Qo rZ?uPG JK? F? 3;H^8 endstream endobj 292 0 obj <> stream x]s]3x+`>7;SwܤrĖbRwww)q'DgG_LP 'JJUvq `Teכ"GlGϯG簐"ׅU"[6E.Ry GWh+HM0AQvB.Q}g-TBx[Cl^ ir"E󇝥LnuO@ RK̲WDJP̋eRTM~>̦nS=Y7;zu^wy֘l0VE^W "K,XQL {62Qzg YZ@9=-'y96lm;ƥƄ,ƀ@׵DtaJ J'}|yˎh]\Wc|/[Zϯ4Ϯ;e?~y㫶kR$,3`E\4UX~^_5F"W{sǗrZnt)Q7aPO-AugP))]P`PC134Ȁ5jzYH1jq&!d> ʇπzHflZ[,b[]HCNπh!5Xφ\4l;jrcekB +UafyTPWUg)'HNWG9MC.RBԿWxyz͹xPh &rN/'HwId2] ۾,4Lk3 zsJ3mڶR;nVW\+UEV?Rĩ;%HCY5q 7 N+b@+B^r:2Ov M-=>( ;M8cJNYXW=`Uug-2L:p'DϜ XZ}StABddWW8!+md,T[] C2DE,5FN Y QD8 ݐ(E;Qq @%)l חڟH: .[zȐ_~# QX2/˘]5hTg ~)TE)Y[:;ůߦ$SDm[w4hr-,8]⦧gX\i ؈Mo`2^Nii\1%u2vȥ7.nQ?JBpxlUֶ$cHfj"jyD E_-0(t[L{  lX-X=[\l_«luHl%}r8+QF#fSey ^ zCn蔕yQ7XuYfocl:~7~vݩ-G{vC9L>Ei_Y HԔ-#<Dv:N$avEl)ҪR`%"_.WIC|wP0_RGgw{gڦfJ0C93aG:?L X&T$&?)*u{N4#jθ] “#G42PX{^t'CR# Ia=R08T}>xЌJtjwHZ\zS*7h,FE&^T Ә+6F cb64$ ?ҭyz!)7XkvdytKYA*vz 3'e6OB1:s޹%hg`+24y{Z@6R+&袦 2˄XjWAen,AIeDȤ2蜃 ʦ3^87JP>Uz]UoJK8t#m[{FZLggHhtGuYfGF_iBϮ;e?vzĂ4NVIW# āI`Z<~gD;:$av](;bEό`fg"_U,mS֭(_y nDg/DI7lA YNNGFMzZ4o, 愤bm64"~-oC8MCzR}z٫=^fzhq/LHs/ a}.褧pwH㠯n;.tLAz)m+5OWvzv.ϽtWCF\M'a)OSavC~AXv @43`d]AGͰ|$EHw vU> stream xX]o6}7G)Y"){Z&P,qaIZ4v*'w.a(*+{t1;L)NO0WܲtÎ~:N Kaߧm:Cs:3xJfZ\Bg\ZfwLHn4+7%NnH^}6{-2PtB+җ0 Aeʞ2 +vH٩dcpQ&X4u_’AtX< J[&L%A.xy\ykuZ8@~5``Q R" Wz4S *=K͵?&7nkkܘQ%?"׻Z8I1S>(JbilƍD6!Vc#ȸգ{\3:@Afٷj49T9uE_1`;J.Ā~IU> ,0C=O@&MH vw뗫r,OgB%Ej$i8uɧ$X7\^a(HvTʻƧuv =EAVXsf<[&W0II@|JQJ.Y vy",7jML5iP 5̱臆w-3.!2џ9_o gW endstream endobj 294 0 obj <> stream x[s6NLDI\o2:u=(&\ɞ\]$@3Tb_~qqz+^0V7>=aEU5GF-.mq;=ie_OO.ˢGqӓ'0P UFç4M E+k[0^kUlW'Oi*pE4B#Mkh~}Z*Ri9&{q1lG YKѴ`(}q kyq,vrikI]bEP/ %o[$b91dcQwdJL:cT_rU}\WP9ͺncTV8 SQ0Ӧ9wLj80O[ӷ2 jvjDIl)y*m[[?V~{Ԭ $2%p(z# 1yLJR %3Y 벢>Ǩ߅O22/LY`X ͖~rݢqUI]%.Pwq_t!};6P/&*ClǴŚ9/4%3R6pbHt6VpL/d|hj »cS* 㩿4z}asx7b" cC}#؛}Egb;g`5XE ̶zQUig]vrx!2jC'z>,;Af&:u[9+m+Do6S Ų-T G] }K#4I}*nnR-+I=DШA j9vCFP"h4k݇}8G¤7Pb}jYFKw4wWRĖQ\m@D#3?Lp(:pe>n=PVKp0ֶGx9h(829YDzx[el}+4fo_D^a>zuGÄMGLgn8Q?\OԝaMH(֕Y*N2t[;pCa6,95+Ռ .RlG.˧Se1IY5mC΁F$9CTZl¦IA3[dJ̸ΖC8PxXeXo G|˚.r2$AȱYpJ-&^ztW,\{'WZD!$AhbrvE?<Wl\v}K7,@( G(=t!z䐬D+B[#ѧJޖHyv_w+Xpg2hyRwѷ6%bTHcq#UOE%-$8+W%l~w>ѱz8tK>bծۍʈI%!eoĜnSE||R'g /pW_Kt{:aZEb|*#dܣլ [k "Tfu[/xӈC*2dj^潑NDw"3RN񀷃CIKp.fx\"WwC>A&8-4B&Z:BEDAȂi_!bOBHqC7wwM!dq?_b1w6r%գBÿ&80OD+biظzCB[p$AAu/29y,Ԙ(ip,ѴsʠD΄*}y,b|V:z{~XrcVD8?NBkYV6XܰAG|±k6Ljx6xb ,ʔۚ4~I endstream endobj 295 0 obj <> stream x[K o.QiireIJvXWfgD;##I6hTr?=̄ _DV\RwUv==)}wzr1|z- d妰Yjm2Yi\VY:2&4'OI!e*h4[uTOen9F\#KK ggE^JfˋԽy\Tބ"LvvG%RjFf~fPг}l\6\Pj#\j=ӱ QQF_?2+E It r 1mוwK]ڢeLʄ^h+HbB G e2DKDg8 }i ~ح7&7Uj J}{~v<[ ^<7vFq7>Gg֒ 4EkZ}}{;tsK %n n+&~8ƽQ2ײ'h BuoD4)7ۢk r4F*ވczGȈR¿۫ox@׎S ?Ƅ ;vS&Q5ggh^Bߡ:Af?cD*wԏ|RS0u+|᷇=ѳU ޢ_scDiҜS@kT[\bÉ9e5=>?׳sUar<1\x;c/.weUe>F~^ ^oM]}G߸Xrʎu]tre8` l&Q@t86?5P~<;ώ=rXA= qP60GC D٢oVHzmȗ<*LƖ8_&i5EPB$8tyt[p63\xK,2uiϪ.#R+^!Ϳ\sO/*Fŗ^VE(Y &A$Ns5:I3J"9-GG|"~Y?*smdu /t!Շ^)<>$#q],B#`h;,$NIWHNz Hj!h*lT=T#Ў'M|KTmASPw7z(.E?< p徭 –xt?$^ "[m8!Ǻ'(txP#*V;NMĦ8SKHAvyZ 5p`qo\VEk½ߐ Vk1u^>˅rvP;˥hvW\!!F Eݩd"b^`@b$׃FjJwtRU.јD$<}LVV:)L0YS~~o[?ڕw[N0YitRetZѯ 8ҧ+ :9X7ΗbI\ o>ml$^=_a17 xr;(%ITa0 )(UdTrE ^`5 qJ1ZN>^C ŰaR TIا;T YkZ#E0G`Ǡ>.F[Aף˃Gic!{xp.oxgA1[AQ1Cӂw1{[ g$.;XeA)hhgO)ٓ@l ${oNuZsOM7s]4h/R?6lg=瀻zwҘ{N1qS9' +(<"( W:/@ o\VmL:8; 2)wQ% > پ$g,F,ܛ0'DPrqutbnKJaWƟVudgn+6|ڮwtơn|x頮C.uBG=ړecpA(o$xOH]{ʮ;d龦v$Q}E/ىfOߑ8|% 'qAHEtbm=v9&jM %.峏{ % D"آ@;ɮ+o> Ɏ$pV2dn G?!R| endstream endobj 296 0 obj <> stream xZKs*@,JQf*:r L]yQ_ 0 vTZ螞~~7Wg_TJdzZ3*Y]=~:ϊgW:?|~v &a%ӥJlZTg.Z&mWY&ix*[ \2jjP^K VҞ%+y-u.w uv@rRKxdgPe ] o}*,ton AUQ>w2W̷v:UA֨ mTVG5T1ET`(fKV "ef7hVzB_vH㉋4pzk#нh7]V`8=gJ<БШf|ۿ.C: 'C1"F^"jieSe c1` DV] ̓{0UB`L kUtԽwZ $ OflDB($'y.RQ92v,cG\'ta?-ֿo7Hz7 8Y`0= WVU%E>X_WF ۾j?}WpxT4Us<<f:~.[[}<ߨ.&㣚QZ0(uw^㶅Gl$4jL^_6Bp=`NLQ^1=L xqYӎc'oٷlB'L&N }I}VVK! ^?QbH'`T_L5~:G)I m7ԇUvxEf+f\zosP,@sӴ- pU=zX?hX*A! UёE12aoG_cBֱq/hX)U*XVQ8jt4Vs\H58m5 R,MAr)cg&3Df=ki{(A7O--b8|Gׅ,l%?A ETb^=#ёSЛu-$xbu\R%/(;Ȅn>&g|뭻&\U'8M/5iqCvUL+y3V'SשE%e?atEndO`-Ս\)[ex6Xj!ES@^-yy-{ⰢF+08Q $ʐ75U=5TA%:e!ANOr:YE@#$J'm^8.񋛗􇛆rX NQQi.oZ4Gmast[Vf{骂^ʸbE5%9\5 [r q&CmE=>GHL^: W`, W&vyg4_n_d' UYR2DDWajAq4PGbK7q8v)n4B~G;mgwh ߲TObIkøk"" Lh/RVUhMfF/8 Ikd8CdAs #ɛ#Van;@⹬`遢h*ƝŞ5P $pZoxs܋VĊ먌7 endstream endobj 297 0 obj <>/F 4/Dest[ 58 0 R/XYZ 82 721 0] >> endobj 298 0 obj <> stream xrF*bOޓ(WJ a<K3PJٵry!h tϳӓ^ŻUe**}ɮӓ*6Zӓ<+]|zvzrRRU>kɲ= S.YVMȲ/ӓwPD8Mm /mc,-h.zqD|^P ggUYg˜H%uYO5TԹR2~E",bCV-.ìeS!}q&]D8c2-Toz麂1`U;ϻ"ȻePl SUeHT 6ej@Su ӥn2&ʆ`Oϼ}qMxbZ)c  vPxѐ0AzXזJ06 JY)/Í lB6Kp7Ӯ)$0< YخRs5F+3P mbDTԸGOo`nڪ+QJv-'>;}GPOnhLJӑ 54nHLQ~|,q9,2^ q?_wB ƿs癆`6"|zޢFÁ#|2|DN6VE~(Z\7+(tor?dyvyG=j*y=TZ4fǩeu;b'Y[v8S6Q&q@Won٠GV :`)~9S͜Z*6U#vu0*ݣv @fpoP}Q;wnő]rt&ד꽣6c7,|28βmvT0#7 J(ʵ &ښ6({cJKtTUjbc^q8N߂j~qtf&ٚ'fLz+߽cJ4;kJDѢ!'g$.#Lylk;bH`{Vhze=ί1%*)`͈"]shDvOɪ3݂.8Wwh[x'ƚ%oRCĨZ!{9x$2p 3rV=nk$;L|ǞS| qdZhc:Ig*ˌciVWA[?QE$dPGDŽ٪R[G4ʽQ?0l%\cx@P"kֳԯhٲ5Rm^fcΐ3Chֳ7cM?|9X,ا>31OH!S)u"$!Zn΃AU<(΃RÒq =~ w=$܏JզpFLG_jL n2FDbSzST' ðEja=Pyp=åPUdV0,՗9'q1{2AFB;)k,xŤ&K:C,t.woYY J,{QO %ݟA[0k:0m S*LmPa=&`yV|403L}$@GPsUoVͅ= "*]Nw8uD 2DuUT_5s%}HG A`rI=flDŽag: za߯MuzU(N{dnSBl~`gZ"vLdm\;^'zA^YPJLQP닛Ureە1&wm[-)w7p#z}Et  )_j(1Վݽ?2s|#V]; bybJo5ʼ*QXY=W[&R(cu/9r@AnB_A!mF9&U60rhu[q va_㵄1t}Kp7-Up7^54}ns`Z>r|qi \jr!m2[@1XDMO'o-`y|Vghs0&z9CՌo@A_D/Ͷx;<[n F&"<`312%]3 f6Y55#̒ij-g[5ؔ9V\_ݴo 5DESUPMKC_ˑu7Gz$qf>/F 4/Dest[ 58 0 R/XYZ 82 721 0] >> endobj 300 0 obj <> stream xZYoG~0xJYZ샜JL@뷪rzF6 cvuuu_㗗'cROF*RZ'Wl=,;>d7FQ«u}zrmEHSGhXT:re+Hh'=CJ_L)jMrvUxdA/+G'TlH I-.j򮔓u9U䶜29/ |^o6%c e r WRL6z:V@,GC9 K 򧆨B.HO>63 $s8 &a~.PpWC7Y6 TG-5*бbYiZ/K3{0t8s7]o MOMpP>RƮ9}Uӂuɰ&(,pȈٳf9_$%dc:i!$ Oؑ`|>> S 1 gG/z~2Hӣ#cL:6{˨G^Īf jr%MBdPc#tC #U;)ZJF<=%T/i7ڴt\F*T:Y~Zi'\Rw/Uccyk62? q>ĕk+TXHq"|FL16m;kDFpD|&6}Sa&Yd!NVdU&KE3'tuX=g2ט:'f8:=n=en"C֭TKP=榵2m8|msОWlP:aq}ߗ. RHT^kxTa+Jo:*9cA)w_g_"%DɧO G0PV=N (NyLڇ(Y(P :a)Q09~&L]_;fY7-:XhBJvzy kMj}~v{ LGѼp >7c ,_Gσ*Fnf92M(_TDDRWץ/ڿlÁ_) 6%-Vp4x];`71KM;Q_Րw˃=#'m:7;@sTs&[l;7j<Ɉ`,Uv|iu栐볈8 :ߒ. )67u 90G6N3Bj`ZF,W#_~# wmagq⩿ endstream endobj 301 0 obj <> stream xXYoF~dmw{O5)6vT,GKί\J\)s|3;|: S&f:'VQTԒyov:asۛ odt ~N΁@+Ep5 )a('F1*,:ՊlES.8"3lN$zD@"gm9jKx`oxlĪ3JYb+`Tg 5ds%[S TKtC${t#Oѣ[OOSgQ8섬,Gr@6E} $bcz@᪵JFseb n,Ũ t{G{TDq>#ȓB.{,hf,̠*uPQ[z L8V8. .q:h 0A]hOTc8JSl(_|Fw$LuU7LQX~Fw u ϱPdWdNP Ј'|zci;{1#)'e6ui8<8D2 9DTnHW.V`6bRl흈-Ϳ?v9`Rfj=PQj\ gI;=CjhLhGq[9[l?T8/9 M%7u73~B'U}t X:9G;0kӣ1>Jrktgө&q S#c W8:qաc< EcUd5l%w3餂̲̋T2`?6ck)-~$MgA׫Q]۝h[H] \ѯWp3:zl[ {BO֛zȘ}Ņ%eg,+W:8jLը'».Y~҆WM3Ylj}=u.IڝtM;o5ַ ;vz;5D=r s8LSazr>Y6-x_09n rŮި 5/{ܿ*J1բ` l1,>l'9P9쩟7Te1G+=&>!@!B/t Y`cجCyc!&/CsIZ$5!.QQ".pۻ^#W;1=8[u/gR=[WpaFWe= 3QFk} ! Z{ VxW\KR Ǘʵ. 5Y훁1.01Ӎ~hA:8#_63/o2Ȋ U?ƣi^]_4gF",edU endstream endobj 302 0 obj <> stream x\ݓ |<9I2}ᦓ:%N>_']$]%Ku<#S\,`A^]_w`dq+*NJF nRMqp*ŋUŋoa/@)`f* dKVԪ*yS4l KŻ4I"h~zY;*Ri'{u),%֤=Cj_\Ve^\ooV VdI]bCqд YKvXN Ѫfa7ru\_v k&V֗LjuC_ |[~{Y4x#4RkV(?+XQ0ت)97LJ8n+w^C]ָHXњUntxt,P-~[`Ki&d "a-|1>&_evu.!6+ W[nE)dU6^k+!$ t C źi -6K-*a " BT!R@E rNB$MU5M[jP|8էi v,=TMfԸomKi丛/K''؈WM  WG(mƓ>ᕮϯ@60prIsGJRn~ݶR 1 Am0N,$(%Gf#vEa!--ʈf}@H }a4~6w+ J06icEE;Q:}MY^0_QhBxAl1?,whϫ5GvX ;b>Zc퓴Rj66 %70LO)T)EswÌSe}SKgHFS }')#qFPÞN^7omݕAK/}GAґA'*Ns^zjpXe +ej%=35ؘqVbע)>LzBg@`{Z<^PQVme*ַ>.nL[^ݡ寮B@kD,gr 1+23<:/Ҟ5'xBUu*H{PT~Md&fOO ڬ@j5RcL~CK)Tt9]^yU$mfȚ,mfH*g53i!H3;xR5Ґ Pp/=M'x},P@ÞU{їGv[$TƵ5NSY =ٞ?k((OB%+2A=?eT \J6>[0W@p(xxv 9!'iWS i˴ xw[1,ԙ59Ixl-p%]`p^*+H>k)sp2\X-b֬1%kԾ󪇍W8|]9q#;7Yۼ[t B;PH5jZΒ4Gi+#G*|q5 Keh_X-x46ƣb>V# #Զ)hf_M`P3%f=KϘ\.`/Ix,D-d22/ |{YNch{+2! ;}g8AlQVm yc #3$!l, E<9Dc OgA^Y1FdKP:$`G=EހuyƆ3Z,@cYڼg؛n {ަbϐ䱗acg(&dg^91Oד#2"-|` |{C9YNbj{+f*NײSq&'ZcBBqpQh C]L<ƢPx4 E@!#4dQZ|wuHE.CR~Ȩڢn::ci-nhʼnZ!@ofk9u(6(:ȌU$[iX|ٱU% OEC%b4&TW=ÿmEހuyƆ3Z,@|~ ͣدg5:+ztS@Z6| ̰@4)гɦ@c N'q1Ǒ:HBښfRh+U> stream xko~$>IjIm'JV9wKrwI=$HaLkgfq|v~zxXYecYJ_RMvʮӓ7yVο==y>=y 4|֒eV.YVMȲ/ڊ \D0?v=;WByYk! Ϊb ηorQy-:LjW9R2NK!ZUM]!Cq&8c2.TWR*@eř?5bO|Dhq?f!yT-[q~)Z:&s!^2ܨո!^"t)ykQD]X[c£5"(_q 6Odes~{6Ō)l}O,JRGI4]ₒ4XSIؠh %6.ۀӡ䷝>v5ۢ,1TT3+Kzq> A=@M`?@x8PJ=d}WUlVA  DmDx*dUh ebڶA᪞}9% @׉ڴ_OԦ)DmG"Cֺ>-l\Cg:|qoh- .|w ׻ _W3=K}{=lZ01MaCL]aȤ/J9 nxlhZ(ʪsri'\_$9E(墽$vcLίp^@ ZIH$o9Φc#;E!YP3?m$΂䜪?m$"#6#h# w[}^}d#9׎Ʉ<&J|Ԓ\5&=˜Lu|X'rt߿n[duc)]7gdE/O*!H HRv ֙1+@H)l90q=OFedX'Iy]*DER#zz,1:!C} Wd.9b xaom,}^k4nxgƌca9pM+z,ĘM$Z\JB<ۋkjN-1@-XGfm>7R 7\ϸBtH>ǧIqZ}iU a/mUJ/ݎfb(5,GW $F]6p߯C[QcƐ HT ?/uyq^".d*b0Kv-D:D&T>J]z! Ra=&auֹa[8}И񞠢oP*ӣ4Ol~j+hfCiԔLچ~OwkKGҔ}׀s]MM{]>5l'Wi 7k}̨8tzB?0cErsǫƒjKdžd|0bu<0Wv(D`y .dGEp c] !+*sC-HSh[h7D1YH|vћΥ*wIGcyF'FL,ۛgʞzf[k|~qVcς5 iM>k |GYRN'ui3Z$vo=Fƪ@,ő D5*P0ƚ)6`bet[q*XuV4 endstream endobj 304 0 obj <> stream x[s6Ĭ#&d776kqw];iRJk'ӻNkAG߽P"3L2O&~*erzl/ߖ(K.[忽<>:KŻ @d YlaUIa3ʤ4JM#,Α,x~z;ϕ!n9Va_"H\D퓓LdT,ղ䢘*4f4l&0FzKnv%cjʊB;K\t8i}Dzau '%}%ʼnI@?%#"&ndCP~lއa@> џe(0˛%l4w/,T^B~ n˛`SN*0NwOQ\63Bo$DbV`UzuEnc}t?e"{oKxgtsD"Ϋr\,B_>U'l]T𔧻耫Z0ѕ V_;bcrQwzQ' *-dn~[-Lﶟn5;iEq]ɘ-o(3PgP|Z%n/9[ m©co8BY7cKU.d(ȉK5lu7 >Nn[XirV(uUvpk!mUSuT)̅) 'Z[V4PTPP)a洅E9|j5RH 3M9]2fixg?l;XX,@E“;h6XLXX1Q}Nkd􀮈m7m373 ,#c_,$$".X[{zO7ӛW0R0<6t{IwGV+tNBQU,FD -2DYp`mN Z m;q RIo?1|FYsɁQ(rNiTgTi^B^ ʵuT|. sUiRO狼' p*SuFN}knT)M2=+<}GcQyPL9rw994:ewG&utLJ<|D=Lo2oI?&'qD0rdUv]aA&}1\8hB:%Zi^aT`uW7 φs& Wb C+_s~njF t魩{/Rhp(;z̑v9rVKc+2[Ph[P-@*bՀt8s4n8b] K 1^ۗueleBj>jnK\=F'yuPH 9<KqA=L)*78j kQqvC<֥*2ֳ@%J+-e@:!Lk#"v4)uف~d ؅†82m pgK֨OFjk v_"{Co!"BMNX\ l/&8XuvH/eP 9>/ m@ۇ䁰+?& `3Ȥy+ ߁.,qz;X@@6e3!@toW58q^@mNkd޶ӛF92>v }PkEvT̪{@)[DkZcFjF'g2<.T:вf-_O|>Bdy[j+w;Ox֮jLXҬh(_b"lo?+[T&\crUd†F©}ym63GD%,c]POĬUyG~'k)021ff`2kyn,E8Qkl7:3J5^~?`YC˴= jwHC{X3h(j*a,}sgͪʢ UeDfh+ٞCXnR+ z+QxjὩӻ).@ b%HGK(~1L:KhD.i3 'ן>4/8ʵ_d z:sLJ4UUeoq/d=:?D{\TVj KƽqͦNp!T%Tp%KF CrGTfkAm.r7+XO^/e|aPRۻ-9{@˘p̺hІUUҜKDDJec'!.ti_;) endstream endobj 305 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 306 0 obj <> stream x]oܸ݀^k٭6 `{n3 ,`L!s s!xS2ʷ]HVyζtMa}eg2#R >lX  u?l&p^?v$»b<Lɽ3u߳ήgnF}xmQ sĿgW!z_KiϞyen63h{OtvF#U?Uׄu4 g^fԪ Ii (-.h3}f%Iѵ0ȁD yJg)VfrJ/t=V8v[F*1jY-Ǭq7_א_+b'{vnJ&غ*΋nzK|=EB85uHǗ;49uQ;EIaݫK0%3?!i}@athV=演ͱ-A<ݸТ믮B~A_ay/eѯ_̖-ןvs,u^/B0qGrV:ٴ=>f[FoHm40Č.qɅeoY:ec:8IŒ跩#'4z[)^_2m_$s}U'V'D$G0mkV`w}yp4rdSZtV؁_\ Sϐ:j)3O"Y۩|EPjAM8"5F=Q 5s^l=j۱}T֛CETo^j }\X8QkdҁRG2 -]sD xq^U^n8vȼ!H¶|ݏ2El*,jxV9ֆH TI"U"~xhڵ89BFhQ4߆>T]k ڽIT-TM5irf}Z;$zXJ"y-{R+[;bN{9~7#^y8OYF,ןT+Ǜik-@H$4ATԳ`evm =)\ vyF $\ʦ+ʓqLavג0sj -@Dzt"-,dG%`wLl<3%ų}_/PLd-Lj;QPFu I;/Yn fs ;,#ﴎaIQu9))WR b}kh!LyN'3 Uv:)zwShqHkܨ3B!a sDCEK<8l%2 > 92 ü 3dT@R?D(BU,;!4`=g4HiC7f}T;$г;ͥ9>SO\"<'q^rTyuԹf92`2[mAS tʣ|u6'63K5[iܦ[U0̫OduTݣ.wi4eW=o$ݮYa 9l/Jkg[ʅ[ ۲df9O)^}n]]`0īw}kSW,5Iλ]:yOa{^5VuX@!\Wwa|aBV$nxMvr?pAE}{k7fUBui;^aCm⪽{A0kZQ>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 308 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 309 0 obj <> stream x[moFn_ A%w8&m^P t&JߙY.Kqd3;;;;3;,/Oe"DH$9Ie2Jm*xl߽WRf7гש-xv|L+I|w鉞m@x GqGfcC7j=. :ayiI.gmc vX#O/A" sFcJx8ގ##_nӖ.]lXQiweߊ3u ,f-M8Y]w Zh]E<7g?Rafggi;j53E2Z.yY]iH;R%*LU"$7{IQE>p"I 挆3rqL:s9hX@4@SA4K^E,"~8'ɴKdGO۹UՍntI5&-d~m y"R4&% )Ff3:>Fߞڭyά7t[$^BY,NQB']$r#qې(;{2c.sIy 𷘒?l`% Xr4lc9j(Wŭw\ʆHV@SiSL5>'|}G!'COue߱ZOvTCtdcď!y ̥z2G*,iN4_+Md~giTJB1QiE`G0 w~c2E.H l' п´MSǂs+ %`AiE%mXvtu Hh:gL^`E'ߵo"ꞾMè -Jrߚ57Pv]6SA֏Ģkb2_e#<x6 #ae7L{N=:S+,i+\ + hhQxkVJ_UŐ qզ׸+Ź|c91U>z*LZ(Jz']c1Mw܅j&WCEc 5%v#*||KJaUӢ/thn6o{I҄3"k|Mb,5Lmm6Tsл-Z! 6IMHA+ Fq  wPth ŭ0. vyZ2]u [d@=ZwWB,֓٫U{*uVpe^AϨՂ\a!~ +m״4&- I {R]̱")| jiD]Ц/IsOk!ąp5ggSW|~;Od~} 9~ܚo Q Zem9z9ɚz:Eyv[^d}&UI[f}8bUA^k Wj`f_D/-Q"@llpW_77 j!aK[v|NUjR`jezV[VE[] T1TxWUHnz2 XF⡬VRĻ1 :&e YBɗΊJƒ[s+k8:rREc9yj)#{w겏%g+k8A9VۚҤ7>ډJd*𽳀 pթI˻wz}R4:{cp aGha||7GK2y)r~\݌UtǴ=\I*zJ,+\[W{-23<Q MWb65Ie㚀.3IE[E]__/sYY]2;Q|n-.gl7okV[Tpc7=A NzeZnmDh{9C N8oG7l"bM1j&D('+ Op>V1y QFa,-p`""pvIȰuA8|%bԢ#PSeTŚx~c\$g+8ݡu 0.eВY?Eoom+<m"Y2RqAwW'"$U{w,,N lYPJ/'Lp9^Dgu>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 311 0 obj <> endobj 312 0 obj [ 313 0 R] endobj 313 0 obj <> endobj 314 0 obj <> endobj 315 0 obj <> endobj 316 0 obj <> stream x]sܸ3z\ebVNg7KӋSwIq{ٽ E dڹV@y//~(8g*.nxQ5*QU/GfEG`s0 # <VWLEXSp.֋㣛gn(pA:$bc˨!ˋ^x-S/5Nzs8XkQ\ͤfr~/eg*ܕܶzV.+T70}G+qg#Z,LoȦ"TsvXtVr`d].IhԀ^k|7?w|k,aP8?ES\r6l/{ S4괋[~;/%oHulV`Ms o}F1nMyj Ϩ]a!pFUN .%d/C#a"!!& Fm h`ݹc+يL)Oq'fΌ{A+OxC> `r~ y֒*5(LF8tY Ef0hy  f˰UU;f8=J+IKئ&Vɫɔ4@>m=$$$C#lUk oo]V>ν o T_adr>6/ +rI8lsRp;[\v+x(ܭvQ'vYXRFAwY7 X+>'"Y{d>RRڈd͔LM5~zψi/!zFe32& VκVo<2p'80m!xc>5i-H4TkD5{fKeCG sV*\T۟ oitTZ̾7Q\Aq رT/f:5E:nj̋1Hp}҉aW`_!I} 2P6@|u]uݎuzH1!>E:ʾ(nS-RxDٿQTu?iImh㖒jTSը~*3ẏ$**SaW>L(`Y*:dVJ([e*v {::,wshdF[Ru& %Fdpo#GR7U9=[v#Wՙ:)!ٺsΞN 2yW,v*޵ YLVpF$_p LpN8uVkfl>L!wEUc+=l;mIl'Ii杰]ZT؃Z12kT#_gEL,eSZU8Vr$k19kf&n B$\ebF;@P8Q- ]q> stream x\sܶxhI"M59NƊ2m*w:tv܉uNA@IL;}aw >8>zWՍ.XթZꮺuջQSo}{y|t.v| hժ𳕬i5ZԼ:YZns| MEW1]K Iuۣvvѫ%yj҇ Na./WB 4yu/6*6+<)K_F-A+wv-Wwܬǚ kn_}%D>]O }Y4#bp_3 ;#VLIR#\zuaq0‰ujـP &y .2 rz+ K <_nh?f *]7]#댎C2)8?M~fjk'ڄ>nZ1EteGI) h!p*C<)GӴw$l2"bCMs”x"jbH2ccE2Zk)/88W g[ώ]~vܮ뗝?3m=oPfd9&:EB@C4y}~:OU?;ޜtj^-;&i .y?5e桡8H Ɖ\JWi ?y %@w//pc;eЯx`*tf:!C= ]SЮ6쩄 B5kͨ9&׫\i5֌FB) 2ϑ״.Yf)bGZ/a,[01əp#Dzse?lt@O.@ 2de$:M }~h6:>F 2@ X9*}&1z QdF%))C ړ"fXjl:7TZ^j勢>.. S/,|&-.L)_7D||b UꛍR?bwH$a#VŦH1k}hM_(7QDgVztƼ<,gv(zoGuUO;\"JĒdFRlpCszklHPzHz]B^ 44Uπ}5i# {4ns 97 L7EK)D,pT*YvTbb{iЛJHM 㤃ns㎿m7͏G~vs ΟRMĢey9)ÍTN@Hd )蔊(["VQUz ڵZՈaDU/<(KzXIEFcE1k_B &W@Ɣ2g#EK0^smTB (qLXͤ{]8]9F{^R2~ /Xlhhe\4:=(g IhĂշ4idp5Ak &M :Jv># }+)"BU9<&rnm\GX!ؿQxK\q|ٍ]&潹Z&@>הaU EȥLoKATHcCބzǍ*4ҨYt ;-y ^0mО@r09( {[ڞG5+J_vC1zxn1/qADz{4"0,FTFX#jۅ`z (-#䱵RRc; }|CdZ3V5s?y>_kd%BQwШr?}4QZ:?tBcq!(/4:8vd8uT!E.ZZ5BFTޟ, fjDr|+PQh)Y';#=_8Na= 1ў@ې@|, 0$,]@Xq`xvb+E7Oz4@z8j֥=x8o-, ̓q'=8QouwՊ酹<'LC=U@2FCYG48ʊRF20jtML(3IΛg .eغv}6qjK >}/FIl\Wi'EO!҄T(_2;MI` 4կ0T^|::y|&1BASpyloj\QTdzu&ɺX Gw:.+~~ ~`z蚵efJb2.BW)f`!)9wy%U+Sөcj{1{J&kaݏOuT&g@F]mD|$aUS ļ%'`E'&~㗨d=U5Be@x SxZ\o[\sQ:vZ\Z="CQG$8(r|m K5ոaV~6[⺵NNܸgƧcddK>fG]2i|Qtz/0>P67)>WN|zaC+PoEFi#7TIք{8-k 'Wc cLpfLr2[s#7ip3މgcc !i'!am;uV4Qv ={'g[6cmdtHst†=ZЂ8hmڥHn-uD9-2>b&b$ ΦBI! 0^(WaRz>>t"*=AzqKqQoZ'e/v d+>GtGOt+1^k;馄[HXSU7UB)o[ל9`{RB;!wS_>u'utdB[HN D+%OܥboD={! Ke-FKv9$~Isz"w#Bmv_Kaxc8rhz hTy(gdb$$6rqڽ8V:\ia%'w4g48QSk,Pd#dQ"*&%R%a] ^doW ΨiYn[~%Su߀cP$ ^(^a7Q6Sd^Z`W %A}_ Q:yn DZu0wdp.h]~$2H!N]GŮñ+i\Gv_irK]|j Z,׋V4QNOnL ioG zeCM@0g;buNbWueNgd|IS.: Fu=G?"f ,tSӱȭe?]d-OFu@ɫDe7:e|FLv  z+.oG MPۑ?yx;9VI?M$OEPDb= Ll !ivvg P62wЃN%G(~e^bITr3fP6xD%GQ endstream endobj 318 0 obj <>/F 4/A<>>> endobj 319 0 obj <> stream x[oݶ݀(e5+~'@ 3yI&vg;RHIÊǻ>rvq|巬x{|DHBQ[ÏgGu70s #l|jA;LZif*#(#JVw㣷OPdap F/d&fՐh[.O%i?u_9>9;=zFex2V)bU2(xyY_>;(:ub^L `#;@-84x )"VYÄ![3Q]HM@18a̳&L 5Tp\O\$1Jק'b)L:LzIOmS<iZSi#-i4V%RjgatY7a*Oiv]\.n h|!h:x#,ƴ 3IJCB:.x6 y&zEl;o(H*sdoJt15ۮE6|CgYZ;lB]a%/ uERJ',4Ya98j 1yEȼjGshEWwf rZ0W#1S땠sQbnXO N&UU=LSpzԝz9ܝU|?@@1F.#^85ح:'TB\&Zω 4((6J7+TdZhd}p<||eő<3! BqHS /wH;c$*k|To2WIҶt L΁^Bs x<_Yj22W V|["O܊Zʖo GX ۍ6wۧ-}ڑa"4M||Wn.a;艽,oW̋БuO{wO(}t،MQf GC ԰\=H@@c?^{h{5Rַ?]x8Z d(r#H 8jV8HdԒ tgCG΂%z7TB#Ȁߔ:yr1/ CQ"kaqT@=G0NY/%~:}B6nzj&[cڱS_ .3XapI0kDJ8JrQY˹%w '#^BHi"|8fOL*ŬETr*($w.2@2RAP6UN^{mARZ| <,CTP&6MmO8W3&-1f͢}ua2ɜd` &PPy<:Jl J1Vd1fw4[V⫧7ȘH_h endstream endobj 320 0 obj <> stream x\s׌<N*'N?%Ȉk뺻@Tx4 YjsdLV3q~ptzWoYA_o3;Qva{;:w򚗬T=)a` h+ ?HkJ@ D L~{,/-C=ůbPGw3^.E^?o?3Wf;T5mLO̓W↩6 1+kL 3E%8SDXLv+hYdG tDES40`)=Zh:ѣ ܙ?$CMt.ڏkWkA(Ըp7uHr.g @r(3jKoe6?-4 ;cn ts8L ,Y<j(=:u˂ 5 Ȥ[XҵVpC;[t_ V;Ƨ(,.d+o`l.rA8lMyZa:g뻙0{LR/6g\I#*cF+,X'` Ǖk,C=3u6;)8F.RXdbTшYYqې-&sH` l@T]Cۅհ`)a$EY.C-av7I`xplg}#>=?&CKNwџco瘆ڸ %^X2hwxs:.JD%I: + Fp,4:vVw3Cg\J2cP16(z8zЛTLݪhhƿ@z;&i[w2hHb{ATtC;A mIvҸ]b )qYejx.t]yRe5DžTӛm x'%ܐ!rL$3}wh^;6^xPZ[nQKpIk4]7,\MBAP:$o? K+[}$r}k+|z_r~a)V.0fy8~QM/2W vLC|k_fm\ȹd2gڟu +g i/uBYQT[2YQ>VFɝΠh.zsIoyj@Dj{)ip j2i"7X_P9Bn} fPo $CMۏk t^~g(ȒEۏ;*!I )2rHѡPMUevFXH⥫|:Ӥrs*&Zz<4ȳRz#05C Vu5gl`(k ]{\]ZuD%.WXqU\¥&UpHu?=qQ_ZŮ|ZrgݙƐ]xBÂyU4}z5߭Je?fZR]07 ݎ]vaSᚗz)Bp<ϘT'%?baJט*S|nmGCQ5[r48F]{({Lw4m, z_ǫyz o_̚2x BD|J߶ڣ6h5n h4oh>myLjɿc+L1}}]Wc@ǘ]v>"O{(KF\//{_{j&V:7dV(ߐQ~0!> stream xr63>J%@\l3gnD}pAXruI$@LdJ88+"2~) Z0.c dƱ>50AJ[z6.&[NS jwx'=}>;O*B!p-WkTow)C jB4w*$7Xt5gv$  袪Xq_0?q#{BNXʆ~Rb6md 2cdj-( ˅v!{ؐ!݊" jI=jJ]Ar5[pF5ݿ/[kWMu^o/|OC;3+T7gvS7 SEԶϕ] z(\PPLzg ozz{o]zҹMpR::wI%%73t} *j{,q5`'Ch}̳dJ:BGx3[u77sus zGvS IC=>bүLwmH϶i fk >o\o =XOɌx A쮹LM"۴[78)qg\}>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 323 0 obj <> stream xksgO!3{fl9iqqj?@dHxNh;z7r!D"bQW.j|?~r?;̊gbЅ,3(<բY23b>v%MEY2SD0?|(C{>0_(iYi{ ~qgrh%~-mrT*wV8Z +tNcCiE)rT/u~6gZhVfP DWrnV_+!5!|Y¬-N]حNêf 8$xkyIZ,iW(j!U&%#ɤT&gwW=J#(Fɗ{Q< Fo[Z0 0 c62.Bl ƂQm5ղa4?U?ݱ\aJ\4/5"ָ/,J[t`E1K+^ 'D_⵱Z3 y^od͆YznS,$aZ tU@oxMAqou}m=  Tv#pd{|ܢ.Cx~BG;!X!2x%DPT#j=/}ڵJk B(lZ+ -q!b4,W0*L;rxYm=h #s=lf߆)};ķyeyPCd DdD.,'bca?e:A*SF LVjY&+Sa!c9L g-<>>b*]_c.vL<1Ocˋ-.=BֿϏ⟪KZ>LQ>ˆ;J ޹8Qsb-C[mat&,a*)46'7(U%uKaDHϬBS^ПsIK,¶e= *E=%dX(W1•qkXfhL$B2s^;ݹOvjP"y7,9lkl Zd6U]׽ɇIՅ={ҏrɢW?Di+S)? MwuE!Ҷ>\J/?Q 2~_Ú֕O>Nx3ZRDbNm^3:~ѶNE V["`f>(Cc3۸381^. 1ʝf*3,u^ľ TjmWBk T/ o+{bkVRRbm,Wf%rqm۹hY=!+—+n"Ʒ|kq]&NvPČruLPIU* >Q\+,{ F ;ZQmҽ+ֈӾ2w!3R픎Um| ]^lȶ0uVT1f~O]}zN>< ۩8.әdI-OpS+NG%;9uwvG+=7N;-TVV&FGn-:FVp:He=~tXH\YYgcV \rUGMk2+z.m`0g2lCvnoPݜQj$d|G*bf @(;g붳G;P vA~u5P2јũh搗hݑ9+CҬ=:OE/Em]VUg St>qUw:&6m pWVư)M2҃hT1a~sN|'. A?G\*Y]ȋdUd 5lG}Q9j~έ9PG8Qy5RA<[a* Np*e*n Y}j hU,wYZ|si+tmTkg;p2ҌaK[qg08": 8\lCiP~x -w^53;*U&f:'Tq}L 2"?_\| ?)"uatJȳLa}m|oh]cXG6t5bBkJF+=,V>@Iۊ3=ȣZw Ǣ<~;asO]*Fڳ#=xRf5lJG}FCQJ*"oJ T=mƉǛxh?Q.T=FT/*ԙGW{_q $2xELFxʺ:WhP'<V%mlG@'%! LE eri Gͤ2wM8IQLx/IhEO[" ᭭O>wRnWfJ#@|\CTs۰mxlK Ʋl-+p$A;qUk#EgNα;ppq{_Kpp+[:>U7 DOxhB|A'+?(Elh~+ƢOǻd?M\UMeMiR+:6/f>b H"'pʪ$}ꋻ35/$\ƯXOA̞*hJj6 9B`) @9XĂ ߇@:3 t_x;jJUO@|Եv"Z48s} n]Z`V/KZޜs ef rcRì>*nOWehM*nfR=oG6O3O_]12 fiOO{u]Y}QK;КuTR$c4U2X&\P&)}mqrP@OA?T>}E~Wg5N>/F 4/A<>>> endobj 325 0 obj <>/F 4/A<>>> endobj 326 0 obj <> endobj 327 0 obj [ 328 0 R] endobj 328 0 obj <> endobj 329 0 obj <> endobj 330 0 obj <> endobj 331 0 obj <> stream x\oܸ7A fOIS\A/N\k{v&у IQ$Rvrq #Z p~p/OffY% WNn*\٥9<8do@_@8Ed4[A3JBRUY%HQFVÃY<\!OUj&'٢R>]'t$D ?#8 gG)hŲӉ(m,H9Y\j)\GHϹ,ϧ@ŧkGNdvo4Z#hĦ1G*?W7ym\ FlS3&Y_+Xic,,$vCQUF9p P4N T0Y0h T0{0]JУɢԦ JS"hD9X|@gŌv5=TnCC"F6 Z%LVUSdm4`vW ,!{4Nah[jMfD0kQf([ʺfrXiR!躋> 9/K!, |`Y dw!N'7?`z(7lۛYNl}ا_zͰQ6rFmޛa&e.ڭWDc%%sHW}.&&߾%=o}5EMxGWD'4 вcL6kṉǂ&0Y%<4:XY| ߠן-rĘhId.^c;=5V~Dz[,ֶBY*NdgD_NxZ0%2l?)c TRE`pHR>_A@i@,֛(8݅4J#otiNEsU.|D>˄d[xl 4(lv 䟞,Oqj<5\!'^egWwA|`3\96noh Lt "Y 4'x~^{)QPn31Kvw cHA%9|K~e9H@Rc2\v' pc$&x]-X$&ݕ'UgcQEh Eq0mA௫|̅-KW~Gd:^9_,0* Kvah?Y9C:9QCųuEMUBLF)f}׆Ƚ&X6Tݲ ,Kun/ֳ"z1/uHsAK)b0Vdge?ne;\. D ☚Nn_{¿c$;T }Cٳ+a0?1`uw 3nD<(?\+K{u-dcO|\23*;;HHrabNW韎#ag=;sc2TPJɂcGGI<pDݕ#UeEVx!HAwiƭixkl?&>ۑW;9vjt)CeGOdS<~YEoxehkպ SN6R#oWj"1O7s/o- +%)!f\g]%4c%?4,"]`v}a Ѻ?+ ?[56%[IW9>o;Aeu 럶tٔ 'ԅotjTTy"w(0 ڏ,R^$)0 x(0 ڍh¹Z CV vdUcF WEbB1{ Tppe;=)|\e#e>e^H4[k[*E ~]߽b' endstream endobj 332 0 obj <> stream x[Ys6~WI%Nާx#eJm"E[{0Q6Ҍy+>8H$xXڔK#/NhBH^$#I%rJ.*9?<("M$/03E!$yjA˜$(rZ%UBh.EP\ЬHBaiRiH6-$>oi^J-=A JyA*/RN~Z\RN ZX[vȘ`y)|9]?f<}ȎXK#LwS'Ye_ի >O ;<_3okd_Gdnz[* *W|@^kN*LSBdH4oϾ19*Q?#PlXtUg +c ]e)z&ـo7,'GF ڑC{[ Pz#v?"Ը]*XuqsV7eOZX*Oh=p~;P%))"Ú@B_ Rڔ{ h|uz FsN[Rj)G)7*c4܉8{\\{4k-8»mm֙O0?1F`ka錐,5c&d<V: !Бq{ +mߤ1w9 -.{3;`GV`5ŋL]4{@/Ǵ$BmMXf K!fl_0eۗOx)>\3@|7f=\wfb.ҷ?Jє_]I,F)'n{3)zIGNy.{{xOb6wܵe릿!ꀥv2s2+l39nX{&!,5 7ޡ@!0BA>C^(O@f\"_FX`MQ18` kEݾ{8EB ?; UeE()њfl܈̼(L+}-lzkPJ2jٷhc@ՎQ*~g#w[ٌ=;;mdoYLHHP.ii7F2%aJHLm F+̫)ś袕KJ!cQ\+#U`kKP|&cTHNU݀˛:%dEְ81XpRo2,z-V҆ -J[5ZK},$p!6T{$D\&%ش&]4 )NK@7ωP\iE^Po͝H4nʺ>xDOig=ծi%4Po*5Ns\è;qYl2+ڶ0^Cf$KK\ޢ61'N5O.6͜D1XV7Ʃ[g{MoQc1ynf M{mŷ$~,?a [_pʥ" fL{w|=*y3,zgI<36E=*tZWʈਬUBTA[m/mq)_3Z5_؞AO#zv8OncF揎5E';& ՛ k }p{|Ԛhe$K-y\TV&1W*v+vUuH73/XEpO,yU}[nV$M6ъ7VH$'3zrBk'n_@Rդ>!*+ ؅U;#^|r,ǟ/2˽ 4mky\Ֆ _w| A B~hP݈9_1B_Tz2- _k=y@Oium4 Hv<ޠ ^lCX w_3ץԦ @^4iy+jv>UǨ̫6f!!XyU$ճ3y=; w5訚P4:{T6txnf^!\\;ʟsg.JF?76?5n00y\nh#z{=@1$vX ӲmH"t+X=AΙRؗ\Rt `嗨 ʹO:4`k08%CI?W0b7Ci:&`٭@).jsM u,68l 1j(/7$r.w¸GB"˜TOi$3,DFGr$-e!bEtr endstream endobj 333 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 334 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 335 0 obj <> stream xX[s6~L_VdI@a;C&q.%Y/] ": Vsd,~y")ER'#g\E7QЯzs|tG+P"]¤Čʅr "EI%SEe'rb"Oue\V,pLF~%rKH C"t*Z^Zu"9>P-ǥrHKιLet.1 ϠS2JBI|w ۂL$^ endstream endobj 336 0 obj <> stream xrF*d*Ġ9ʼn$LlG9P$$rJ"Jj~{ݍRj*D~h0f2bI)GZIn&/~YէY2wrk@XHJL,9%:Rn#S0<9Ww_V90FUTJ.ثZ\T" lHɼ^"4fM>rfl*r;W\S 9rY6/m/L\Ç_\&sfS+HjfR3~'@T[V󅞭93 H1AW ==<| C9jFLS^4MVۢ ZQC2*+R!kE _Z#A>C!(MppW2 !aPPlf0z({EĈxs[/C`yg_vg(cS R:u?{zSat=엩0cFn9._toIC$jbD)< S\ҷC@sخq2qN˞@.x*y_[k΅<8R[96 E|[DRl 5HmO#t ~! b[tDDTAJtZA<oPy9 -5֞@|O$cr|=|YcW)MŸGY,lXMGv A_7?{ BaDˤڶڼ3tGa:5* ibHNJy{NV1H٧;-8;mjHu+jh<LJ kfDr炼o>ƫe] T9;H75 dHZYwqĚelIJ XjUM[G8gJnz0 JL }_ϤjQ,1-f" Ah(%_Pq`2Y i . WJI$P6gx[W NJ 0l,gnS@.Nj]T9{nF, !1a5ÝΡxcӟlgНPbBۢ1o9w%NIS5̰-(<h10PV*q1(7մ=R0R¾*>z XՔ >/A"Fq-UQtD559lD଴3Be8QD;˕c.';>:{~Wh ~ܫ>g SQIv [oZ~Ŗh`XzG향Z9u▆ž=qK#s&ƶtddщ4jMuGI>/bIEzlJx0^]~tڤ _ ȷJ5Б]xr*nzu(\nOe.qL~F*9C<zGL+9LR-Pf,^1Y RF'hnhMЈő>kATEeLaљRHs)L92`+pL)g ^1Θc3]l@Ԙ.a~= {4QC5t`HGi3uw)rM?$EYR $ %=N~"Mp8'7nJO~՜p}_kp6Xݖ.; ҸmúiHHHz^Olj" (:ZKz7eɰP極V#pͲq;C e93z_[5TH:X{XfULRnJVѸ/IL3at [a4G!s A)L{"K} n־Z InàObٲ>e~v"q'[X6=~k7 "KG=SYK\XV3gn$c,\@)E.SICKj!qJ[rcNmWnҼiyu(f,Nڭ: Sdl, 2kz@LcUC=Q./0#Uf,S˜"=žL=nYp"Y!#4Zj>+}  \N0`6/oaݓ b=KC/ DޑttOrhsO3v,{a5j٦7?M"mp67,*'`nϔ!u.02F64s:7]EgTEDȮ94J%. Zb @/@-ma Py*I-ӠHV ^ɴa+c0U3)1_Cذ{YmfyjXs\b"L//B{x;!&]1bI"*8avn9bH\0݁ ~lvZvn„=>muI/͙\r-Rc\x]kl>6*Eb{pn@3%Ǥ7<#>Nvb&r]y__(9GPě3rނsԶA9O%e-)fPlA$B Wnw҉k&Ut9Lhg2ѥDgRLDg2ʋL*Yw7LƳ2 SPLQͨf#`=7Z}A}"=Bn4|qϡzS=$v}:SS/A Β̭KQ;6*U8:'Jv ۵*exW%)wqF7mE-Em~ؓ5CK/з2xAQ(tRw Tt8~V!A] qA._xbg/8_usdP9E(rCGur΂* L_j&Ş׆CG')bԀ N~D/dvI2CS=fo͗r;YkfKn@qPu 8 S21^ nz=Flȩ~A!UɞC̣0#N *L$eZ o(oBKb2DDW ˉsOsK0=t Ye _[LDOV/pqÿ𯇅c꾇&sWBdBȦo.:"e6'or iB֊E3>{H endstream endobj 337 0 obj <>/F 4/Dest[ 86 0 R/XYZ 82 252 0] >> endobj 338 0 obj <> stream x]s3|oj$p}urI:͇nAe2g9v $@rAv'9],v ?򂱪+j *_5RUzi*9,1J;e |@G :gz׫0P^j 0X"ZںR G$k\1A{0㗲Yˋfu@V6Cl%m@6lubN 5tW]~U;PX@r)N (' .NB9!Rդ1_"`"KI'h/O02(nXe2pw 5T֞ vgj="m ч;#,JG J$Ʌ 9/ 2-FPǹC06]ۨaPJg2u{ ׼$ܴѦxA?4o>_`3n B.ym-nHPgpzP{\lɵj3Yې}1H\;fg.g֠Z?n!s8 0Jd:.Գ&q?J>wV;;TmUm|x*hwiCd@M΍ %W%8#l-:?֋wݗvd@J[b4 2:]ND>y: ktBaw?˿vU3{l**ZR؉XB%lij(8Z ~K7 "~`֛J}փI3A'  /uuuW5I3(N}1R[(tzl9Vk,núlTPƕl@M\a.2 'h/Nڧ2 SXX}k\y]MwCt,88ǠmF&}32tEϲhP4M(aTm%6+7Wv4fP&Wvj[e/hRBڵ,B(IzBdH fZk1",fCVӁ;t9ה baz[S<._\yno:X[%;q{?6/I%tnMUVBxjQ Ab<;Oֱxz,\tվ{|f_Q l[ .B8L~s_KneG_a{^ѽ͟6yNwU?!x׉1pW@$duPB Vc L%J yBgy$w!6 (-40i7 2N8qpĨ>z>4}s2:'] Cd2bXząiVFsЄq-Em-霣eo9 GѝedhdgI:gZOy0-~>(muzx1ŭe%az JТuo[tBVed:43n@xcdWsYp> .0)f94f}33*nG˖jL7aM@>gHh$]{^kOlof8&Us i ^7 ЅmR.| 5]Oo Ibm潂f';HR&K9 LzWhRȊ"`gP<5^K-LP:Xk0`eK=߹> ;x&pN,q|@|{1 kƈ$guPv3"~L~1Ar١Nv6ę&p: ̅x0EڍKESJٔ%C"}K .(%FBgY5Iy'L^5  P:Մm7~Nj|Źw OOݯvyŖ|kNjФ$Xd?U? /jpgk?H- = ÄB endstream endobj 339 0 obj <>/F 4/Dest[ 86 0 R/XYZ 82 252 0] >> endobj 340 0 obj <> stream xZYoF~7GҨܛ>5@MDE>6}HVArEJr Eds\ӓ_RRb~szBE# GZH`{)n7'uqk?EYT_NO^¯'@ tY+xՂkLZhY (Yӓ3+,LZіqV,{.5RbwGrA3/f5iÊE)%GŁ:'`i8@ndEsfp#C;]?Wj7JۊQ3Q~Y*Z7ՌgVjyZ^\Ë'X#%5Ĉ #qiRcJC^ٌ%4Lt9<8<6D6Ã:K񑽐 5rIbNQV [0 =Mf%DLO>xs>3f>7hp)%KM;Γ}ijpV5Wsp(RR Hӽ0!DKלy->{=␜!נifvYR!atb$as +t-Y. ]tnwCmc?15E)%'rPqܺ*-ćAf܂DzJW5"5c@錠UDI1=&T Kz kwb˿cjxqT%8f)8^o.[|P/M:.A" O88ޝ-ض& oL~v][&d"w5kOXWMq.|u)Y!Vեe`:LH搩dz.):\* m-- s$yџ;rI=R(SM͟ L<ѯ|;cʈɯ`=+B\ {zz%w! tSUnwSƶ :ջk;P lemEBX)(qǔopB .Vh{+դӱ8'+bdȕ4կzp/0ݸ<]ŎESϒ]ף[\vk#F%aa\p|s9Xmyg$ǡ^OhQWvg[stk֜9 &MD KG=4d^bͶ5_hvYW`?zvP~Ѝts{&v6s۳_`FfbA\2O\1gߍ#=c?.`lGF$g/(`ճ.uɯ)$zxW|m ߪ!.^AEXQm6¦R= HgoWP-KYTiĎ)j{G &Grlvdʇ 8 endstream endobj 341 0 obj <> stream xZs۸<3$q}ju9= ˴Nb%N XJ;D `\}V2!x`1\ZްO=*?ӻ󳛂b=?6r~v`/n* l ˌ`lXcBrkض=?KEϣ,4g<_˦\VO\F~k@e+Hv)M4zY:PW4h-:UIĒ^T﹛ϥ.v{,mP*RRT}y)tX#oKmy|h{u/ajS4q3BǪݜj #ULu\6j>>5beKDJu9d)^.[0<ow-=s};Ϻt{>ó2=oI>gu~ vǒatʼnoUV{[¢W S7^}FvS%}4*8fR0k0j9I& 6W7?3B, &I+ͥ+da#dV1QCq7fB<_/ Y#:`45Ϡg )X앒Ix#P7xXu^xݻ9ЃG ZztwJ8$Pj皓Y"46d 1ϐFqߦlȥ\&1/<^%КJ 3Hg;{)Z^p#/ <7TLHijnׇĦs0rڠ/<tMl զK=ī/IJ3'n%;Gdj@OKHl',tWebNf`)~1hf76h~s0. +4F'*V|&}`mŧf,m+&@d٬1Cf Ya{$"!iYP8Tl%?Hj{D `UONWSZc;I dZ7rUykFpA#hx衰2ӷL֝|s=,%z`#(yGDq% rK'GP(#n b7CXqD=萩 `& +cA+'.[a=<O˿kcÎ}۲hqTƫiQ +۟#„6Y̫rW'n< @q{ͅ;) PpM|۵$ ~g <tÀvK ?7d+ޮQOa2ʾ\FB~N3Rc+bgIsdr,4jt DJb;PE-snfȅTd]b5N\^3[~x%ݖWkߑڏ6PUP æ]0#a}>>>!QQkX\?Yݖ*+T'-6Ctqz_ ꘦<jujJ(Ɨl󴏂>/W"6o)8v߾wWįћG ?0x](?DQpK;\(lso?S~n,~3㽼^P.cز?&zO歇`1AᡕnY#6즊C`,=ɶ8 4f)}v:8) +އ}Ɨ:LŻyaWD//%ujj`(Vԑd, Xw4[{:2 m)KzɅIzQ '^d5ZCY-!n/*1mdx KқL]33LsEj"ϼVNam2TAl^oGķ[d1Nw=ph\y(-i[9nT:Kn*߿Kh ;BUŴ<6[o'jMH@s[@p8 cѓkH|HƁwɸȓIFJ4ŕ9F,V,QJQU1a2btQlmUMdKUWbP:]yRK:XC'C=TG@Չ7E~~o*Ȏ>3)+9x\j8"~ozN/YHB:MF7lֶÿ28eRCF9(xo=bF㔤^Y?o7)WKj5>WwĞ[e#}lpzX|uhW~)_y$+OMdzV endstream endobj 342 0 obj <>/F 4/Dest[ 90 0 R/XYZ 82 652 0] >> endobj 343 0 obj <>/F 4/Dest[ 90 0 R/XYZ 82 652 0] >> endobj 344 0 obj <> stream x\MsJnE ApN;Nծr0֊#Yu%>HC4ȡJ<+ Cc7 ɟcU-V+ڦbM_OO ~pzr*?=y?=9J@Ϫ|jɊGnXmW)'7mW4፵ mZm?^JVJ7BVyE=CY]լr%uesIUT1Q H-&y^%wV,C,a7rR6~[K)ԙ\=<ޗ^ݔgLnfuoGl C3FX5|lK&S6TF&ƺьJ{m*=ѣ/?mP=WwےZ7Y[a{~ k`ZU0f0} l%NYslh4~ ,46C+㌴3jD]))3߰5iI'aFtͶx{ϫ<SR*_ ?]|E{nЇxy  ~fְOh1Tρ[])C| 858lkN Jలu/M7#`F WUƴZx ;b0cPM՚B}FQVӁJv{ҹwQ I"H t!$EP.o:=o7ateAZT!x,i{`G4=a)Mϟ]Νz~{|P- \Z2\w7,_llaKiJ?)NRCߌ"n΢P*0n$A|+O iQ|RtWpe`?1(to9> 0֠4N; %ʈB DT?"au+`qcEi/yF\{NHar&9e2v:}צDBԙdFTMCh'D \ToX|R(34i,A(T9 \8 e6k2 s0faiZ|V; VR+sn #LrBc̆v25MrԬЎ/O$Ǜ9s? 3P9BpLKȏ#lTɑ8934>3] V&מSaRINAherLщN&NI.qbb3d ͖I(B^I!U)#rR̥ʔ&2n:Q…2-w4w~ww nB<ƞ[xPhUr9UF UəTV%T&_ |Ku:+:,fI(@hm{uɫdN:O qrp/c:]up:K'su?ܐ!h`^KPxd6+RW19rj?-Q='QD9DJHT` LpтCn62p$2&4Kk`#c2V@CS']\˳fuy>=pq`˕9*c;we8Ӡ"De%mA4j-l $T5x< xcרvӬиhȂ5d[,X%Gv!٭?jS~~Om]gfM^;|OjZ1.@IP /N7 Ü>:w!+~\:bw{6 #$Mt8GN#p ;49np_wB(NGټ`/,n eZJA*޺=c]Pʙ#5ؔv?`fkPciY̥?H,3:I#&MfD`8# ǟSC,]Ȑ+Ms!ƔW\cNĩs>y @o_l0FOYt {JS .ljp "`Sd@GvV1F%Vw:esYwJl΃8wv4"3TxG ɾlݫO}&Na@rޮmd ; hFo5(w*WIoX qXQ: T%EC'CZHZ> lXwT xjXQ 8W':vsw+ٽ_Kv5sFΊ'*|(q^r?쁅Q~ ;&Jv0Y_ <p ]BN3zsocH~}<5\~Sm*- uMbI$+>K0,}fB1|L@EXxU^,L]o&+TsKet{mlw{'2 !-j3Ӌk3јJ6hĮd2y}pA8n/ҩ ݟ?Z?co'\;K=>`c9D󉌬,T/Z/,kUN-Cʛ8-z~( K(͈*[X; M8ms`wV=9yW WSXrc_rvBN-RLGU0M֑H(=JRZmbA\gT86R@k.5:ɢ f7=.BPʕd,+nwgcr sHUbmY)g0G9PxԧjbiQUy C~=Dw5uW3n-(bmWr#n ?1487Y񘿟N_y endstream endobj 345 0 obj <>/F 4/Dest[ 92 0 R/XYZ 82 600 0] >> endobj 346 0 obj <>/F 4/Dest[ 92 0 R/XYZ 82 600 0] >> endobj 347 0 obj <> stream xZs۸>R3J|ק\Խ>8HrN,$'wH.))d"+bw_?/o//ZJ//j82%Jsf42+xc7xΟʖ-OWq^Oum[{,M]3c n .!b>(2e39D*BMJ$K1%@K+듪3G~fDr> t=~ԻzC)$=n g7MiJz?(%@ʺXךh>cwc&`o!`ymVuAz{ơ%% ֹdG'B.{Cffx,ڡgZOF`/wXT4Utt|+%[fD*oh-z/fp.ޗĞB&iנ;/HqWqqRt]vێ)Jլ:ͯ?&K3f|6z؊ĎJI&+e{zޕy_S*)!3B2ybKyT`D̠91dD A9U~&,.Jʟι"Rxҕh mK(Sָ*ٚ6z|+OivT}y(8 7k?tűGvC:0=9.p|\>mq,(N@HA!>2Tqaj翶u&?a@ m_ө f;$? Kȁ v*M[d!Rv_7 E4`p6&ښF f7`a..l&pV%S_*w!)l 8# Ԧ`zfˎIaOOQ6Y!Mн D|9z[ ^ÙM'\?C l~8Jp6v^*ޟqfX%Rf\Q2r53U]3kX\tw]e[Κ/ԛ<ȐlNXBRq7A;z`8 Vlv¿x΄MZA&Gc ZĂ Z nz̰%d[=i&/gĸ(h\-4kSj+񁙨VV< kTlcDQ3'gC̙x%Xp9P@CӬsj?tj祓72|,>̍3p0)ӷu<4/+D]r6\.ܣGOsfq3ft/SKڞ}du[O&tK> t->ۤ[yݟbw4G%A,{,jkSQT> stream xXKs6kFG@z3NN'=(=mcKh']b7)>t:N~x+I2N8aljQR.5dl>r[N'ܺ7[N I"_3Py:@UL3ALr+F!FRKZ}1ܜ8QddyLϟ'd{m.-l;*T"vptd(FjHe{IM@];`yKr3#m")jU&6L>w)gM:2٤*"YOg]5<*B7V5RqK0  U^#^F0i udB-`jBSm5T!0xl1іS!F`!U+2-VR)8.UfD_Z^@G>Q/.~YznRA"9z07GJ n0*';2<`P4 ><Uݩ.c7оžcM(7mCg| 74g481HePY[j]@(ڡ{9*5qm %2k]92K%֌,Y8+!|MFS!>֑sTL@ѽ姇bŠJusw m"+_F$Ho ``4͓c8l xBb 5u>A-)pLGNdn(iͪqoklqG[M9072aj.󷱸E#\v|R7I=m'|-p?~Þ%I.5$\Y:I6܋+Ar8܂%w7W;kfyB9hdcr**lF3S ` 1Qf]u 7@Oo/nC ܷc -K-KÎ,^u+s82B l꼵Zax@h[+L < WP+!-7n-+ɦ9D"t`L_)(9uEmT#Hn sX& MZUZ],볬^1Т#W }ncJ_ֳ>%^ ;^Ppy%~ CzUi쮁سijJfP]IgmIF)z?Vw d endstream endobj 349 0 obj <> stream x[ݏ6_`}?%O\a&- 78[I͐D"eЇC|f-NO{ cdq}zH 1R+Q%޼$7i9=W+YT>+)^QF*UR^ZRCZMszr,\Y,[tȥloG I%sZi`z2/ijN/g vr񴹤T. l'zO$beJQuؓ-r*]s&gkJzU٦ Guwÿ=<r +l[՞]b9} Y+ɔ5 qHQ Nm]?}Ʃ+\\mh#35P3)=A T-ANު @ls N[ CQxP%5s+\n+*55a3Cxz? N ]{ġ*cY:,)0݊gir<ǢjԬ? As}c{1kY>15HM=KZ$5\hkpp`̥-~9qςՐ kv {p/TE]0a@טU_%JV[ O&_S&Y3fZ;h+ch `cd; ^Խ%s<[` #B a2e6r`3*'l֙3Q)?E .y^C8N>m,vK;|FJ!:GK".1ΓPPw;Vv8AM /{WWАǍÓش~_]o=_eY N9vL.U*sҝ oZNA OJuTKU0,4FsيC*tțwx#Cg¡tX9$# $<,e;B󜠩as 55YvF5j5?.B0a~ll9 _ W$ M;|PѫB~9=5VyB2!k[6 [}Y޻-ek*xW7mj4r.=5n<6F#3Rc ̗Wfwb9^A0e/vyO͘_c%Bh7r<>Vx X lz 2$BF kxxkਿa/0 , 28P[KTqDp{+`bŪԱDJE/'S=˯ɝa4\xHٮN +ϏF BHg676k 8i6n''!`&N B Kį}tܮ:r2X ϡ_9ɻo+dR'`& _+);tugE+Ё2ᢣgEzc-]Mr_Gt I8Th/.a ;uٔUDHѢ; Q o$QgW!>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 351 0 obj <> stream x[Ǒ ?[wʬ#9D&via,Ȍ̚> K4+&tL'g3ݻ<fz_s5[7ϟ}wݻ+٣ '?gg>ΝǾn>|/ ?J!v 1D1B5Q{]?soy 7zػw;$X-7uq} Zpp_ye4n}K2?xΟ>]{>|o-9[J^a?~鬍I:kߋy=jZþtoC>pNjPQ6ЙW/-nNiY1wfYC[c՞Hi4bk8^[v_C];5l8p_?w;5Ο}_?1Rk΍](lM{7nؚWLrf ԍbO–!#SgWߧsbf{ň~7Ha=e^JJ);VX,iWi /-c6ݰe7_8Y>ǣ_U7HaTOit0=}IN_?75.czxU~i˯]??' Zp?w_5x;߻)3qkJ?riQӸMdC*[ƽ"$o}Qh Y!νi M2|wC3-CCܸ+ObaU ydA,S{WQ,v^w߄`:!lCyo?>qA'QvTsmRF0>~fr{_/Ɯ_)2L_`;E0w5R?@3ğy)E`G?7Wͥ )2&K@Bާ!ʠgӨۘ* JR%=QǾ)~(Ȇ(Ũh4gYpX5a4:߷>i hsYX+8{]a\[}ܐLԊ+1Ё -?w\t;OدL ,PyDQ˭rek)g='Q2I~n9܍Jc' 67쮀p?HQ!G;!H$]27v-*dMǂ5Sa舊]bADbN"S1vJhEhrjfәn(l-E%,HhQd'(`(rjBm.$˽鉌U&bB `p"pI p+ -}'$5 "8BD&Qlvџ͟CchΨaa/H3/kݬbd)T&Ƚd gL/ aT Ȅ{:\Dvo4<^ !I:{#)| 5<S(pRl=R\R]RQ]stG1 1\8Zz܂(7Jo T.cw`(q2p7lj`X&T R &X@MNG6j%"%?*\ 5.S(\R\]J\2r"h+t6 PdX]¥o1]0E\J2[w`,qj^b^i^BʽGin ]߫D0JEO>6/Fⰵ|([5L [5U %ҬVȣX-jr*ͪqDVlZѬ]6B-B`T3j J*J,%- %.m;&q-b"J J` J%H%.f<ȣx-r*գž)--Ũm _!)N|BLcf25264`4q #$kGq" Y\ SZ?⩵~Ӭ lņCC*)LMSJ8O9@SQ4eߤ*0UJU0XB7iaU4yT%4-zD0JLLK`#wV|S GMJM)ba.o s>։(ֿ znrt%PƥR%na4V4ٕJ&dTT Z?iU؄IqM4Őiy4ĩtӔR)6N1M9@6M)F5MfS԰:xtJ~KZsPYƒ9w`>oªt2yUN/%7D`pǛ_˟rs~xBaKmD&;$H)T|SΣ&NJMooEߔB4DPP'SoζWL M2MŪubuwI3Ut*U`t3Z'|wp)+ ,O1ux$BL)úZ!U+(VmKZJj7Ѫ%C6C;vv^LPJ`XJa}pLCŊRx))]Vl&י+qm*HSq GiJ&GJ>#%T(hT:R*RqHY#eQGJ7w$n6 ÛC:aTb`8qj$+ɱ64}-ELҰ`THso(`Ը~[Mf<w12<|ǩ.R7y.huDqz#N=/lK6C?D 'c9V9 3c`ҋH] [D`ˇO&^mb %|3ڈM@_xC*]ΣwJR*u}mT.ڨ(:% ùk㒽KK0KX)%%%Lsq ,Zdu;f>X=VuL1r1q*1Tc}SSS]],/φ[ل*c8픡pںX6xgׅ<Oȧ OpxzIUpQ{FwPIT,[ΣY6N[Jl8ENWM[`9m`tqs1v6g_PtPD0KO@!%t!g+(mKzJl7q,KdQFI;-]?һtnuolR RlbծTЮ͖ @L FSCZ?i Tp;[$MSG1M[*4TiSLSMSQMe뮉'1XzN[ T -&V٦q9:pᄉ`6"06#Z˟:0!L&n*d!2<8NJ%Slv669  qsGg4 &PFRL&b8V8|M SZ?ҩi Tx;[gw. /]SSՅ9U1չ+<)))Ũɮ7 I ޱƧV>a6<`q7 f3ON@xc6dO/g/U0 SO/F RzƉm"Sʌ.R1BG)RKo>AfYD?P!LrZUHzN#̍1vPDm=xM):tگ5D8 8Z^Є`0Mxܭo)Th`T:R* L6q+KS]Q:3Xiʟp3]?A %PFRL%ncx;γ>QLR&~dSk5 J& FD-S;9D?$^QoC9vH'OxE8m39 (LzrBQ-nelCT FfX)f> stream xZKoF 4^lAbX99$"(3R&Y͙aX]]u}伽:?Oժ??E xjFiWgu t}ŧ=,?~:?FbfZ4hV1[p.v+g*B;iPmU8hQSW*TL`q 5y+RJ.O kC<PK14Pqn*]nLՅ)OJ~cCjn] 9_ul3Z% t돺7F70\VCFIFÖvXTd(|/l-fN!\ԐNY6Euz L)#.wkbD.4IۯCP]'O=d4t.%)2MkZ9.͚B;B#؜ߖ[@Z2%U1 'Z  kۣUBFNV}ܹؑ|[wOlt#LO7⺼}s/ Յ*+.gM _󗇛g7W8it ʺ5yTŹψC ? ʏ%Ufy F@Ǜ}TD|,\e^F;4tM(+@ "LBbXp IXh$߻I/g*ػ95 L{@܂ 2P}CFNLcШkN(dˀ֌E-5`#-1 R9~ݮ4H HtF;A0+Ax%,W178aφC f/apUn6ލoG C1dbL3@dJPiЛ".,@BY!R?TB0ȄNtdH%SƐ EbC$\2 ==p}H:_3!tH- |qjPW5g"Y8|Ǵn9}xd}Ӿ; ݹ`ˎZa75{pN)dYl ?6D]Iᇀ|v+6E n/11lqdآp*51Ih5yj̞G{2I#/Gگ'E ltQ OvBaZ1'_2r0`ՙO6Pe Afr`O@!ٓ-kys̞薥BT4csSJIY1 ͧb~Ϗ]n8әRVpt!]*%&s n"8Li =DANǬB۶ LV V`ZdcE' Ǯ'26:J)伄Q+K!sxWƫaDR52^' Νj}@}z`qPCr?C*ngmO#K,rEמ&!iۢIc//`X󀮢gOk݃>lܺ<0iPk"C"lN9*k?#|q 5܊t[L2Q $lWlox$VGhJ&x|eK<1i7wW >#'x?_vqD eӐfbuM ne5!O $W{J d50oj 8+ŗc7 9>*U˄=J]';q }>*`ZF$_!~-Giy7݌o#W䓑QJWo;ؓT5ð&,VUQ1Q 'Nn'hŜ|n]Vg>Kn5^ NO0[ۡjG\k );*Ki>A"op&K/9^^.vaB/-.9s;i(#Uv'P겳 닌2?c#kZi |&LIV`7$fzzqfv2* NAfѲ,`̣^^',:@F,xU0jeYweZ<<9X-,Z859{hyPfXq\ #~6wuh<!Cȋ:pDZc/1dOhob։ 2>ʬ9I}8>AH+M75~ud{;lP"46|5<ɓx1IOc k;-v^B F'=I<uH~BSWTTdo DVDUrUz-!,tRQ endstream endobj 353 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 354 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 355 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 356 0 obj <> stream xYOFGM%i R*pwfk={w4R=q^VTVUׇj/:8|ef]uzwxV7xwxpVW_鯇o 0 LVj ZX+[&SU\0ȳ"ОF'4U#I${u:b [zW-ky'˳ZēRyUyN - !.1 /vկ]4^_/UcnN떹NAetJ,TmQ 7tjW>EVcKX֬MgBf[M*KCcpтL9  )?Ͻw>;ͤ!<nP2%q%J;HqOE>ZhrB!} %D˶)up`{FQuۛ$b {S_9+Oe37qV_~HWUMs9VSenl$@u<י8Q!rl*m8{;_>^_Ѓx0&$Kj#f/ D#5EP*MrL Pk4djQ-]7?L\TzK8Py_,L 0,%lp CFAcG鼷N0٥Ѷ|P㢔AG?{F?I?|tc[=qqʱȋl. wqN ,Lio0jrsƁFLNPl6 )[rjUЙY#=yC]])cYt~JiqԲC#_5 . XFr)T[Xzg,QDVAiI-㝆 -Z(lT]qv $fQ0rOmCFf9=iC]MH 6r![+ Z;Wm%#RwֹзWBw.(\˴w7rD v,_Э ]Xz!78viMoe])a{4&_ӼFBEw<")Fq)pyEo IoBFMB((Yau!87PEK`*)xNmfE+V͕,g|U\^6ܭ|/WvtB.DU/[>m ?l!YC*S0 _lfDyPn"Ae(FowL"? H$]η (tVd`iҹʱcC'v4b]S qo~e, 64@7Lv][|ϑInI qG QM laN=/  ո}So`*v o endstream endobj 357 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 358 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 359 0 obj <> stream x][oF~7s XJBbئ>8Y' $ ~sѐ#XHё^_{1}}}źϺIj엩{jgW/NW9\ѫAdV|Y7S7~>__ ,FhLY̿J(-/aOn*|>o{}O>=L7o> O>O=K J7?IeժIvz6C?b f38!CEQ,g9D.ۂW7yWgyeb&85[A1D/a_~mBqݫ\8n;^Z[H c3MW84LnߒϠX\U#wxwf UKa_ d 9ygn6, >M\^(楍75&I+DoRdQs''ĹZ `r X5؛u n I0d z"&P<$k L&o&XZQF5 f_N,v.G,,-BX9NF͞%M3:$ePBpv;`Gɽ>#:jJ@$PQvMqj/K渝RYJ -o85L)jh4AmwvRA(jG!8_ w Ʋ J{Zj2a]DLԂA(wDE"b" . KܸdEwuz ?ϋ[q3IP m%S"B4MVJg ]Bk<*yCʶ$i<@<3v ~^ehesJntv&697[jǔVGK8R系L?&>8+ |,.DC3DŽdDM,wG j 'ðA8l4iv΄6r-R<%KwɊM.9`]r]2lkz57K.Gȳ/Tfo!)#a6Ӭ!fRG9dӨ`s D,g! B'? G05X0L&iP7ZkH`SW \mE٥fxRpPlK T`UHqT:"9&Υԡ0>GQ3ys^'(cX$KCDHXjxpӻ@$:IMo5.pVf+Mgpb8R /3T&9S?Q@#V`Lgt i!TO)ΧF3kfLw{Xgn g+/RL%t0ӗTLwlؠF P %pEq-⚨b 领TK)ypT Gj l'Dzf$[xOx;,6Ta%raڐaX*k,,Z`s'%/[pM-Bbl%[b6{)nLqz0v*&6Z&crmp@%{M?ߴg H^ UmML{_'5MB3ϖniM^2 bI-}1D9H 6YNKWEX=ra_G85`!,b;kXD> stream x[m~5| w41E\[嬸:#ݹi}g}!w9ܕN< !9\Juu全8UkmX[]߷ˋכgu7ˋg ` T0-6ZT@0Q53VfYS?>M"( ǣj7lz {r=zaf5ֻ!zWWqƘȓg-k]z1}Z..@D(Q2Cqzum6U}e7Ǐ7n3O\˹O|‰e pql~C}7%:c#L?fțMD }q1{=J[ţe>RXǬ+?g"TEC 3u)2bڑ,:nIH+fK4 ( ô% hdXtdDH:6Dhue( b1lzvQgđ&nOcN*դqA\դ5 d\MR&sFPcr_$>}7&5e'o-ͅ:{zqJE"lB/#LF[W A""@+i-S _!Y!-@wx7+緐8OW3|xKVgٍ@/ٝ_ϵӉ.H̆xQ MrΕzYh\1 M Ó`*wQs\ft#:grDTDȔ mPK՜KF1Ҍb9&Kv &'O!ޒeyt_YaD);}kF0 gD=< YyR&Jn1;gR\VM>%Q"e[Eoy#ZH1g3lz)d#iwf&$,/  %4|XrapClx /#DY3'ĚƛHIr<՗~(u1N /Il0NK< 10 00rH''r(_ww8}{R޷|)'al GiFpW6pu)}ʅ)]RBsGSx`6(QO~Ym ! {0T"yg쩄y6% T2S`^ l;9Oܝ/i#=mT؛}] #N+{Y Jyaa#{"8؍fC݀1fOy;w&( KR\94twXW5d9ȝd9$cIFd\l%S2ֲ:+e/8ŗdZ /&oSpo#)dt[8IGvX35f]>\E8G}6 d~M:|.@\M̸c k\qZ# (Yz  3ιY{Jո%q5QN/Exit:ZR,|O\>w oހf!d=>O?yvaw.륨db^34ģN17?m u̕/ KKT6Kf95=B^ź!iv Ϸzs_}a("Dpa_RӡJڧfS룘w[GfnD?բ -pZn>znvkU8d=AGPw1dJ_뿋-Ur){:1~A>(p^U 3G-R-kEq˰HToSrz /b{72jm!`Oòf3,+JXiVC0֭rR/6ٚ䤒D*͚1$l뫦Uj뢕vP,O |;PP+2L@t}+C6U\5wyMeaOJ,J9٤πגK\>ikZO0D8MIJm1ƴlȢozPLqLh+6lɉq‘Ӕn@5Wdʒ)3|idZ aZkGDB'D|zl4(@P]􂢅5H6*F%wnb`l;٩d!qr,'Z;>3*𗄁~nw>f!.x(fSJqȠ@$zN?TYq_֎C%݁ՍU ?OP}ӎ#c_;Ɠbu8H4]x|:x -iQ>Jd<>9IpBL`M pg endstream endobj 361 0 obj <> stream x[Yo7~Џ݂4ol؅DY9}c[@,%#[EAvw{,2Wbyqyzٗ✵|{z«ӌOVi'm?uzrUW|쿜\tk*^Z xeu˄b]'o+hAgQLJeԔh)̚`=G9Z_NTW6'KfU偺5`hy@)%wBKf(!aî]ԘP5禾yz?X{Tνnw J,$um5WqɜPB^8{FǴK\֬Mgζ"e!!\`a A{Δn9: fk.a=n/@PLTPq* ]^͂Z<_!9f Vû7K[@l+kGx:ޭwgZ \%X$]R! bN4m!mOmt#MO7ἾHm*rX֐TШG/dn_Ք,T,:"D?R]c[GDws/SJKm:ke~Hr4m+?5v!B)G; ps)u{Ϩ|T2/H?Y6XtY_fn* +W-e#C{ۜ x=?PM~%=MQq]TI'ŶϾԕ`. hjK.l͹TV#V4/ 9k|@ob|&ummdՇtoHF/nngs)sa0 x=ka9`-gR.wרnO)(>ck@qh?Ggpe׽ 5c)@ïLdz:d2!J[PmnM("z#a6UpGfxnBG5ߚl]{ ~hI,2&l(`YHh d`M8~Gob}?>HeO$_$0Čg_lӶqmB7 Yp*` %WzV1Wmoj/'xƆGփ#2nKw3~rxnq2ɿ>e(q/ {Tw% ֠IB<$ ##zQNUoS y5Af~T@oe( m9bo'\ 3ٯ->]L4vCgJZI反s7f}"uJ%jOPmJGS3qHy#MjzGLJ )wB.,P&tCӡ[ydlM\'#CnQNSH-c `C'ſИALq~),䓓naO}$8\!FBQ1\%!ƹq4\JbPj@u)\$W)2#dri\7J CN' ”igcnvRy%4궿V=bx9^,0lS0yx93Uۇ #㇇#6šN 7 &~%=umgrGP,}05S8˂yv{(>n ;~' 凇)x땀g00ǛL2MS]/UճNeEb5Q)Ƿs_81 endstream endobj 362 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 363 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 650 0] >> endobj 364 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 365 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 329 0] >> endobj 366 0 obj <> stream x[o67AQ+ⷘ{IqS޸ݫ&fHQ"% %9~hq(w>83r~<=yՍ,.?XѪWF-.?ۏISܺl׏'WeQ+.yz~zrZZ5>d)njVԼ-ZYۂZnz̉" WGhicr<K\Z^\(!k6 MݰW2'[K/"fa)Y#˙!v*TyTxWT纼Ϯ~%[r yY=yOT|xP3V~W\y[v_7P_}ȸZؐԑ[gC\7-lnZZPC!_םeEY7 D'Ո0oJ 1lnHjX-/э@'tjf~^G %sI]O&]0Jڸ8H,(Dz6تl]ٸ7sM.`mA5 ;==Pcm%cHiPNŔ\LEYlؖîAsԓ" L*E&X**ucbO0~".'U[}Ow OpW= " ި\m"c XL:i6PSBM4#Pid'X[@WwSW:u3E Yxq:#OP@F"oES-mZp=">Н#h%z~[ lA^:d?R~>+vqx"ƻzʐFZ sDӰ{řYa"f߃+cD?/ܕܲn %mn Xjv@^Tx~.|/b/C6Zh#8(e KeaWqB/Flh1g6¥FM96arz2E HL#1z=W;ۄ\Q Є'=':k r@*}T*r5NONg#TiY$ `Mh ϣ5 lTc0vF`N":Hg[2@L!>kU"U~|I /namCa0L$ 0L00a\a^$:@,WXփ,&%[8+̒8fM0h, 0Ka;­L^$bka fᦩv%{u!2tCG&aZ~ޭŖYhz5,ZO#+,&vµ™9 I`3ٳEw#M>F$2i%3]0"Y ύv\p}#ΒhZDR$?BSkx@)B/;o(S`-q^6#.9$bݻEX1Dn46`q AҞUe/4ozDaOɈ03SJLo!ok6tCngFB-+L˴AQL+ vgoL{ſ]ʆC Fƪκ-JPu~a~1D'\-Rs pv=fw`zq0=d+4P@|_(ߝdFd aѦz!LtU18(kG}un>8>1āG$`H2>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 368 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 369 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 370 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 371 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 372 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 373 0 obj <> stream x[_oܸ7G81}jI"8Mamvr~ΐD41 rf8 g~_^5/Y\ޝVf𕑪nӓ?\E+`jj4 դƻ;ԸAB"ȐMA ]r)EhN[/.f94n<dcQK,[3-GeNلB Ccmӣ3JM2l4DI@~bXxd-l*X~v kX떈j$MT)WY>*o1}<1bti-`W[AYWs}%W&e^K@H|ĝ|"DIpfnl+cٴJJ(P̝^)1ec Itۏh`h&"*20b5;SoNqEʦaSD ʧ6Hrձ`@ez4YD5&Ss_:LjGjzS"|0˟8C>=6śF/7X~AlbBfet;ǠwEՖ_m?БS@"P^tg?DQ*[ϚQ)l,CQ.V(3(à!̸[C7L 4x7gۀ1d~k0>f8EBl˷ yp5An_HL@P0U-oI'&qN<+x4(M4|,n>OSVO eq]d?˘B bMYF7a脏`EFcRؓ}pxh``[J,sM?- ÿ}SYQ! [|M&Ȥ+5 9"]B_!pDy_ BAf)Y^s{ H10KoPܣ]y\>Ju,FT"{ ! X>o$DzCHؖܚ8a5G @f8! ?7z<982~0>f@筳qoEE:6yDcĩI 'W>Py,͸oEεM@ȵDbh#n|<  5f\w.8GĒ0dw {y[52,: _QT̹bɻ 'A w2񨙤C%08XQlfH&BSAC\AG"#$^IȑJC[0PdͿ%1qJ.m{~#b]c"M7%W?ZjL&v܆nH"wݐNcV .P-7qk}cǠb;XC.Aƽז5փAd1@;@X 7fN]A4<ކ> I$E*g"x$2ц7ǜM^ k mGߎ=1 endstream endobj 374 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 375 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 376 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 650 0] >> endobj 377 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 650 0] >> endobj 378 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 650 0] >> endobj 379 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 650 0] >> endobj 380 0 obj <> stream x[ܶrU0o;s!.=J:9Jr|v>}hvI;*yg?H _}_;ڵ?F5/{/wٽח/t_勣1MݽSwzhnF6Nv/~*Ht58x_vI>~m,u3>{+~w6}7e59nefXU6qM֪.eTK*O.:(g6NMd8o3;eF+)38ɟY~5VV尿>C/մPszyZy=ԤW^BYn~)~l~N~W$wiA'*E36]]q ;-RJVNռeE9aί\Npf_ݻ[۟?_?W?hݞo⷟C{kX5Q=x= ߤ \Op&=D޿1姼Ur{OtC)$cR[5҈wmN8Dں׆I!3V.w=~ ~'߄CxՇ=?LYeV^т#P5v*]B5C"wg+JfÕo_B2:`֠_PM(Pd3B~JÃY.~/tt7^TvSI 8X^$X#II7z٥p/Ee~8woյkO}Uw3i~q =On2w06?;qc4Qi[{L3GI= (3LyQ2՜6ϩs1Q!`M`vzp-g/TFBVHzp~\Gp\?7!N;C gpy@ &jIUo07yĖe9LmqyֈoPq؏Я BMֆŜl+lN׎q?߻ ".xD:fN7SF3 l+eWIiطB""!̇yG! Qd&Hl;@ɕ"޻{7\P[dx1;)ǶvC؜Ux`brxSxCǤqV行+%<дA½wFw4'4A [S|O]یS8é3I[y;16ef,4ƫtviR;1Kv/)l"~ WҐ VǢv &&ILxO nc/ q&t] %lۨIaʯC_P)J1_7g³䞃*.ΖxWѓ]J|fE\ʊ5QtεҨXz^Ǣ#Z?xJ Y3IZd9REo;A©e4ɰïPؖVuV Zx/<-PdYBIAǸq+z:pSv>JE*J8PBhP`k"}N(8f̏:%+i.⚿s5V9Kс!#n20(+3 F[AprqggyX;ƒnǢo*.I\P̒EpsC0I@kD 7a1=Lm*_~ߟkG"S`.2u!\B֌IHLnLZf3&8a 9+=<,+b1cc 8yP+˰Za VR9VPUJ,JhҫdS^%Ib2*S8Y)v g S06E۲S،N X'[\bjIl681 M.i耍"LO?ySihCF^cX$<4rhT lڋdҋ$ EQ:9X:KFQ:ٚLN X%t:9;Ìц sC&rEtfSTʦANtN滂 7%Kn v;/mk]kzʺH!f-A|!ffz?eBCqP;,J " 1pu5TF<*tAڱTlJ*)ؔXkSuM֦=LGUm 'SDv~w {t} XR`Ī{dK`i'pXֻFwv/y\)[1н1Z̦y@P,TFghǁ.(XTg]PU.(ֺ`%}NZ(aLT)3uKKH| ^v$6xDؘVk]!blf?z<85/p=ҿ MPȧ1 TwP?m"%iezej;@6k|PR1>b|bQ CL@ጏ95UҰPD kP&,ExFU!/{{\JAL0r/Y/WK'抓+E\z%o6z1/yG!_pz7d0<$ٮƭikVq*Ӗ[Y0ŴM q`;g䱥@YBf:F"ڱ-1H*XIpXAU+(+:oIڷD [m;jFa^Q$,墺{*596Ue'QpƨovOϞ*4Ѩj[m\q-u gg:f%GkN=L9KLKC70CK!L 7@!j-L3!BTGTUb遍$OpGC#Xy]8 /Txu{5=S$6dkj EB`;VS!3pJO \,ǒO L0Y{&$iEPk5h~d MPRI* *4Eq4 C$4I&k6o :L87]ژHKJ l y ƥRc_qyh)31tGw/kF gA_\Tu0(:8%$ 3l8m?],j}~P歟a01k zMeR`} + 6O1ӍP?WmipEVRr`sUm %%r\w+i ݧEg]?Cd.pG\\T?c3U3J*9gTUs,ϮqbNEf /T>rBUb Ene*9EOYWЛ~>*='_~*zǂ\qw/k(ݗ<Ysu?O,7բ > stream x]s6SlylʧMxk=M\9IAaw-RQ=/1~xg{fLӺ73s7ƿ5|f_~?tgO?{{~v7g_x?gM]4};3g7޺ccƾmt6f>3?GfQϮW!ًܱ7YkfiPo@ٳid޼{{>ٙ|fU6w)I3]SN_Dfe8BGޞ??wno?̝˃:;fS>})zr2pLﰳ׳CnAX臩-.7~-dNkj[8t}w ?kѬM[ z]]_L_f='c߽ 6^xu:BTC:{lNRa:o|*ݙ A tY9gTm } prj;cOG);\)D^\n}z6#ȓM?l[H:W\t]3RY;ww:/qHAaIۀv ;uxp#"u]v)1@#~F(uScQ;4n;"IBl/'-h ?h1.)?a? f8dJ-<|=TXXΆkCۚc@zbKgƹqЗC(%;ۇgڱV.#+BXׅjkmv`s ?ny;"˷<z`wvD:ém~T? $JmG=l_.<_.~F/ fOp%ʏyB!򦡙(L.㯽0>So3lҀv@0`X bbpC˞^ާX\'EYP47}?ۍUmeש>WWcI)}?8>ʃ QsQ^ =+V?^WkSr~T?(+aΗ9Q,8WdG.3N&NS?60}ſ'/9($7!/qhY;rHOVLK<⧛XRMוJwQBqa~Op°$L˫yyL YS}) h]F.@G8`d!P| H@Qb&?`#PHd<3?@%h$IF& C29N'$ L?G̬>n0uAf}F/\=ko"' MS #\=t"trYDCAg-TD]bQHAlwT9ç9H Ia3'wB0ەlʎSMIM?n* (v'u| ֝],CQBW 5^i7Bw~lF@u֥U$Z:2jtAX/eM8E[6y}IgOL5GT): e"B3}!)7XHL"AnƁLC/(q  hAqq0PȝPe*Հ.E8%΃66Zۅnnӡm4,w,ER+L3L.0[0Aԗnۦ NLdI',b!VU:p&섴*~?ߒ ǝ$嘨m5Ph{i 8S! !V4$8 4 8I0ȝF^*0Ȍ\(ɍܱ T ;4Cݬ&jW)i&JwPʕk3N+ +tEDj  A/Y҄O>1X6v< eOHIMn9:H: GBOt!wBۘ)!Vl܆.!0W`֩3L*PI/a!׷ PK@m7PW4)dE&j@Gː`y$쏞P}%bא.X),֌VkSw7g40NnHan>v1c>fe5-"v MVF ?GV ,X-ht0Z:m.2cm†,]KQn\Ia@ BW-4Jc.!čO42\5cKňoT&l_C o$)4bƮӒխ*ʢ _e~,ZE*i EY,bs3X hVp6INnCb4Œ3I1v[$Ųۧee{ےY @t'b;!'T83ciKX0JFDL YZx(EvѰf}'z ޳} O3Qz)a0WIhC"."1p_݉}WS4+S9E+r\eW F Wt儍MQfǩ!J$iM!~ʮrf|0\2 LFE;m~w~uw箽{<$g u` ^tgksy;AEpfӒ1TFv<% eOE I >ф/#2?L2Bp0]eD,#beDf@Me`3eC*@ՂB/q"׷vb4e7)APhdEHj!AGxF쏜Q}%"bʈKQF  y<ck\M2"Ôъ/#W M[F2۝.#d$- YF>fz6VbË /wE(%6vNdjӰ llXyANDhdE6j٠@G6'ٰ?rbCylBbCԥ`C :,uABEDF6d4PPVxW "lwTY RIrrT\3Z`7GTzC)0)H|SjusrFV0PuBI.RQTRNX>KoZQfTPTEF_DF^ޝMQ3?P;AZZ' 2 On6Z֛olA܇JXD.xtM MĊs-Y;z~AR]mh{*^FbHib<ؠ&1V?1J * EM l8\+7⍒܈\=!UlVfQƗpxrz.3NЛ ]m&UQ0s ;rK>wk 䅜J:Ǚh <-" -zPL$]RA# ʣІ h"aá4+ + b";NIRPńh%ܛDy??0R#<L>`QfVw/FAx>y}YRJZPhaAGPOk4wn =$L11QI)}q1Јp$ l-x6^4OBB63=sMRېsf}jh6ɅD|j"(D]/֐H\&!:%(Ӕ)c׈\ zռzNf6Z)bua0T*?;'Ma+gT*Es}H2B4g|[q2ꅙF#~wP88b'sG\71]},⃶H:2 {]T OBKz,.GCPu3fVHLCmĭp4/* UKE,k vO4=ג[H4@U  6'Maj˗h"@+]-DW|푻LK$iLYxƗ<&v!)7ej\JXs;(Kqa)7|5K)da\V-mA͸~ է[ vq\ i aO3..M@4V!xWAHM !4!%3 af/Qʀ72&^*]5|> ؄b4%_ClOȉڹZ,h6 gӼv|pmۢןr3"!RT (RN4|rDZ ]e"rW489~Ę$- 9-@A`&xW > k軵Jt Xt cGh!QaO/ce"A' SU8x0 w.C]QEOB<6GJ2QٶBWW>,= o.-XYPyrӲ >OI~Cͧ[ 4fDV?ܔZ s" I"+zZ=ɭI9$'qG6 `<;V-H6X!< ޺~G>+*u[; 2zaJ%O(y`QFsA.e΋71y<I8'RH*ZaF\J/U%OCxO)*P],h `!; FB:Z: 2Gd[,uTÙD) U-`6F ;ҿZ{Tom')3VbB`4of¸\YBV%4p\?{W(h((֞|P=CB GFJGI(̮,_-DZ0BUftV +Z1 L3d$D4i9WI6k,ъ0.RXTᎧM[?ؕVh endstream endobj 382 0 obj <> stream xmo6wؾoֈb@dYaڸ31خiA"%CEQ_#?:O;!Z=&vOz] Nߝ4_ϟջ_o~>owϟ2fC՘*]g|MˮNוwUww}a iAwVd5bw=Xժiwt*zYu!j'^]@j`PR%pD"l(8t{~>yW'jߞ\oSur?.9eڟqj@Ԋ,zuuW N6=7(^9]Bl 76.?Ov{`c`ޚ?|0'QZ FoHuzsFpLFj8{})BguMKiHXC~O~OOmB8գtmر A{lMP\OMOL?3UaPM7&VZ5&NHrK ~ws{0'-j889ǷE8r0.J_nݣ4 rz#`=v{$FJ븄sk?NOP qQKZ lZvI;:v 6t=`v& {DXC.Ɛم5 Y]V(]<Br/ {B>pS5o#,GY#n |xu+*;EӁJ Gœv^zv|lH$6w"X4=4;‡^|9ξw'@7'߼o1p\jplˠE=&Pb7S$*(ED$E" c9Bw$_Νo%ѨfC/v/`dZC9iar8ޚ_o͏PBBsRIcsl6EhU4̮ `G7bC;V:C5+OXI lЧEq̀Loil6ꦒ7 )x|Ü҃u8*:?8a8tI΢ȁ6ș!)EDm(E ȱ i1n,i.qE0)TPӚw(HDNoC:Q#brg"{ .0dfͩ@c}2d9\FRdoĉ ]L(1T 'CVcI!dlLf܎g5$$xN5\gs If:gL˳8|ll'C'1$ '6\Ɍfz$,ɀȃ!vnҺ f0lYG߱C7\]2ev/Wcw% ^ ch5 T '0AQ1`…OFh6BHX#JVR#[̿ȁT ElM |ܱe)/a[SEi)-M f0R\v#O ?O?Z\$n;ENB(d+ F\B c"xjAiX'rDO.@6$u{ۙ!s({b#+\8o´ :ÑE FuLn'Ђ \$.(V0yTP.FT@7DEc;T**bF,{bh찣w<㘶! ^b q] v~t۟ ʋRB .}^sp-P5|)QR@eLM,wr8Ē5|ڗ`X7p;Q'Vi@ӵqjmf1ÑR7KYj} EKg8߮4iIږH_v*}J@'خ"} AS"}xBiX/{S0:eЫdB&yjg]⥝vƥRlfƜ;N9 ?1%=7J+wGy+0<)ӈLj ߖc'.{hǦ?(3}xr*ZF$f*h*EElUm.3i)G vb IJFr=P`:W{&ŦeMLsaK@7F{Ѷ %Ӕ-G$#I8u;ם%A°7?@\fI@K"en X@DYR)N S h $T BAU)H\z cE۱0J$lLwmЩQ vC~61|gM\_H*gL A .\ٴ»1m,PY,K% 8{Vm4uxKq߰"\j|R 223 ξЛ33r<ë<#STPg(4H&؉5x6U= 7ue(a*B8oqFqyjĎx`QZ"3!IR..yiDFO"/q叵o'r," ydr$p!si;S`$9+QmYDj_`zJ9Yʛ=pټq 8sOGkm84/#s->8Juu/#aRu_u7$)p|[&)$epͩ'CNs۬99v3E(p ^c[A6.D"2 D+OD+z׉$cɭMT̙bGl PB PEwKbHX7HE.YVuw4*/ny &J 6$\cV۶1+*D3^.w4 <bG<&h~ʹcB 7 񓨰cC$ărGʗ.3q!`%ňoOّ(9e t )3J$k".wvSenEEm(v åƏg{EafR0PJ21jkqpɾvs%]mN8IS9'* (qQ8'\eڎ,$x%h΢DB(F % w'^rw1/h,^҅)]r'|o_"rSMm_A$<|vBhr}:˗e'ărGӗ9r(`gsRZƦGӷF߂C:PWã<$$ CN]iW(C.D2 t;OWU6]dk Rݬ@t Ln`ɕiZYvFQ)5(e %qfJF#JI!$^It20 Ǒ'HGN u@^߽NeXRu8@lsi %D0xQLo+Ylã -ty$-$CN]RWM(.x2mGB4i1]R_@ JFFͺ(Xؖt%,(͇|xv GGNGi)|n Z,|@ɲ|ht4g,øH3e˼)t0*g95Rca1K&j%g񨙩UMJD#ȢFFj%QQKU;L<ǡ4NsGW pUvuZ .8?f~KY4>VJB+6\1RGKJ(px͖oShoͱ䳛^]zSZ9ct`gH]^ƪ@6mGIKf4֭<_/E|,_`U@r~"!lAH4C 9t^d % #-G+|2)8^/S$AI?wкLAU)v[%1I2L_VG˧%NI2r$é2I]Ti,ɈB i<ɈhAjD&MWXDk3Kp|[-c1HecFӷhʹt w8F\lj5Y1oAbc NC5'4y{n'F^F$y}v( -ʜB™j2X9El@g߳jk_l|"m&@0ĸ Iy IEWљTAD+ TRIDqnR(&EQ,RsE50ktJ5U-0ab\vƁ}poF؅Y1;4#@^ FT큕 &< :|u}a`Q|eGAW/x>?+nprEi-9~xWxソ:2'yUUV_缛u]MfI0_/ Z{ ks{{]<ڜ&7z\ͱhNihh:IS94*MirЌ¡b9F>H英l@`%tByM쌚."i*:i'5ducvՑ}RU7jꈒH;aĬk &w/ǰX>fHN.bj^K151?k=?7v^rCs zg{/V奈[(CªP\\ +K;7v(|~s0&` ]ײa̶mZϗX{7Bk4ئh+9 7;-LDuq3pvf*6y?`›cXN*7NޙFt<\St{hPyqUD=؅.߃{we[z\|ېCW)&6q"(bug>w7 ĩf|"UV +" _`Zm'&Z\-i;r%~%,%ش>MimF%ZDxīoo-ho~ i@tvoy])+x]Z|f[4þF"T(ږfC`ۖT=? o`o~&W\s=@;~Gn'{ wuScygO;K.4ys>=p'NxLYiK kjTAQ] 0ի_6)JRjw3/^r1\B'ǔ/>V rH1-R?~9m.j؊Bb _V>Y{p}{[/~& |Qqznoo Ij.PeLPN|Hw}i-Cw r#<+/o:ycgSEaE}u,))9ijUX^&WZ⇝ O]ݣ<6ytZĩ\PތFZFVg4q +xcoڿټ!2.wvS\cW7pqo> SjG(Ǥ)v/mL ZTjM[ z @m:x=aT׭QԸ;?)ƮgfGv_I^j7.;:{3r߂F^tZjpkX9RuK#a|e/ɋ8g홯dg{7i_D )Dnm}Z*t`@K/~a@ nYGvVMR'=ĞNBD=>~^BonM .*d~ endstream endobj 383 0 obj <> endobj 384 0 obj [ 385 0 R] endobj 385 0 obj <> endobj 386 0 obj <> endobj 387 0 obj <> endobj 388 0 obj <> endobj 389 0 obj <> endobj 390 0 obj <> stream x[s6n'VOKNӽ֛dzm%%׹t"kH@RϞcu#3V5-_)nTC~%:B 79̙bVGZZυfzz^7: |VG]Tތg#D78>i%Ƹt@Gis.[zm RZk̓!a!AL}I 0過AM}i#!Pࠍ,lg=6S? 6}-՚6'[ 1ܣn$cMPa |n1qRj/[;ú'Z(zߐiB๦vD(|ч{>mw_[ffACqZۯC 9鋡t(BJBM$IT*M,>:(R؈Y"Fr7 9Ɩ6=L 1Ęԅ8Ngz9aFE hL,%PDxȄfFcÕJ`ސM{;Y-@I k50ÚAw{z=O$aI2 rx9R!&t7Ӕ0mnMq[lHQR\vkH^Ap)_oM_S -XȅZW0 9~wuXVb/i}ᰆmvMzVa4e~6yM[ :dgA#%>ʹ <֨w!*mFGUſpƷR"vz5Z}஬7 "%5wNiWuZ]7{Ӌf<} l * *2ξ[ڰxG9F8sBHw?(PR&l_,5˦ݭ!ɲ柢nG~ba|ȓ^R'ie!fOd1-x9@ ٛ8kd :"S#Na-ZcYy,K&K%*Z7 ?JFm]ྻM]2tL">Ɇ0&K \)1P _*b/3]zZsM5NX~Nk)hP\KLMBB ' W`L1@dNPxM#ZY8~ytW2_/2aPb,ߒB\\fUpۘ-';X*6 \Z\W~rF el㍸kt 3h31#~#-۩3j17xO@p"NMة Mtj:TSs6LH[H:z!m(auj~90fHcNM,b n.G. {\ u?O ʽJvp_wzk-w=%3U`Nֈ|T'ʱnLgn$.e4D1۰lJ2t+#*`b` ::. \mHRJbLYot-8lk>ou%L3FxɞE|=[w~WpT7ls 'r*~Q}Вbca T~`6c|q)Q9dG4ѲN0DE^}؆{ ۃ.mh7#)/JTcO(fy|o=5 <,vL2_SA%XLP6adc So4lY endstream endobj 391 0 obj <> stream xr۸3>%@ OI'iYwA6\P${Dso/g.XV?5`H Y4Y_>/.``g!>`#@K )YQE-mE. QD0zmGڇHD!&RϐlY%kxv+%B že!KȲRdTT@)M.u7 wy~rV-ne\$kVp(hvҐ(IR"VuhpZ+Lnl |Y-;>\rہ]HK Ao-GBd@=+ăY\"F bH@X#bZKg0;|aN`uE&Q,ը`a ?oolReUv-a>ai7BVF mg:h)huBq0jQrV-LT{-ĵp5 `SXa^hqv8:glo?~v1t_1B71sZ # ûv^WE9 BFo?^<"=ru/X _:*IuDjxv,GBxBD!&K&Vt@0V-yhn];:Z fD:Z%L$e0Ts(.E, bC\[h,T+۶>8̃G#j MRGT)9 Qlu:5\' ڵsg Xcoo._J6Cgޜ :[v7k~T]ni}xTNCShh:د61JVXdxL4ƢU .umqEK92JbB#A6R qSҰ"zJ&QF7> $U/V!b/[$b p,9l/5lhcAQ.Uck6J^6w]ߡڻ@jtrC48m V Q՞_zˠ {hb"bzP2Ma%歖\~w\@7!k+dG#ƟCu sr(mD!I:_Q% J:t0 ZUXJ,U"=|`V?д%nߜ3\~i5XWi_h | |8bʹ ~|pbq- _J,K828m` !5AsCUn:NECrx@@Ջ'UƵߤ<Bh`Ly9U ,MZdrw\IþF(sSBUNT`Xmb1c?* 's֛ P퍥3~@#So)S*l<`0@>{Q2 lKJN8 AHf AfƓ*DzR =}D!&CZD q_Z7X I%yOjm@5mj}n{؅ ě|dyIh%DݎKi4σf-,øl/rUDIN(3x+2{wfk?LHA h} эCXLs8敕ɣ˺Dx:J+Mw>Nkae)ʗ5^5{A\y-ı yiꖕߜrQcW"/T w} |6 ϊBmX_!>RRxۀuaOz>{ k7Vr9yW8ẌYAY*CYP !Kώ#mKnqѹ$A~üM=;MǩØ]"eL -32'M^pg Hom8~p̠o#s V!է9tUo}ע؎yUMJ@Ǘ$m?Bq&`'Tzz P/ +tJdSH0qy cۂUq endstream endobj 392 0 obj <>/F 4/Dest[ 117 0 R/XYZ 82 342 0] >> endobj 393 0 obj <>/F 4/Dest[ 117 0 R/XYZ 82 342 0] >> endobj 394 0 obj <>/F 4/Dest[ 117 0 R/XYZ 82 342 0] >> endobj 395 0 obj <> stream x[s6>R%>I䞚LrכtN|ӇdN8|.RrsәdPb?,˫oވsVEjYS\}9?e1Wq0K`f2]/@ExQ늉hbݞ>H"4H4MMDDbSʨ}WZ*^ڐ(}qQ7Z|(4|ZʰzxPa4- (Ž]R#*>&BG%r>TX̔ˏ3 B]rESnp[fՀ6m!ԀBKՀ%J#ni .Y#T"j0 م,Y- ~D<x! h~VUM#)>㤃v'BS~}o]O8P%rK4W07{|oКUB,rTV;Q.t@ӻ-Zu%kո('Z 96'x9h(88$4niHܲ\|}y qmpv6a"7]D\4q^gR?“,׳iQ[WQ]l̰k7X\ ޾-@yfI<?Z +\Eo9З%ӐݺAkVO@X:yʆ ΙCNj7ph:B2T!<:xjRy?rQͱҚ`gɩHG+.¤&ǩn)`sf$ sxGaFAr&wPGxesq'-f07(fo633V T8jS^l8Fi'P؍dc4!+̹!W :2d 22 n ,MUΗd0?Ӕ c!2+8|Xe!~ey*R-ѯqWXg^qkSnQ$G^y/[NO힪N * .VbZ0tU.A0Jayle\ZJ`׮7 *{bۙKrq2bP8#kZT'&j 0%S%' k3}_`3nfCC2Ȋu'] r}3 㦜LY9e۹s*迀@;FՎ,_ ?%.Hg6<8?t޶kVx&[t:3aw*7n1lo+rP<5 v'uAyy!'+#HzX˽B~xTtB'ƌ'& s>vz#sT6[ηBAQ2?ERMY7?x;fU3jz></ iod<[QL}7Pq |r~S_w^4^nyh~dC>} 㼇ui۹x}x`'wpV nwvv'[} .[ʤf TRÉXp3s:Z@0C]XL"'x@$|W /kWnp_/0(0E?"|ma2g.Ux Vx!U0'/9i4\Wg>\=>`$-V!D9rN88:gcEu1>~K9\CqSRn$6Gb..5K|]1苐1PRG8@ZM{|c&{LשdĦj. JT;<%LWߴ\l%>0ؽI8:Љ|2_:]aKf/͎0[l-&ZLXg^+:dKY?*k4'7Yi_*v GI?AOuM1C3+Ȏ;Ἆ{; qOJM1詝Vi3j]U iH]LK\=v:Uə,[r%Qò*67>w }xM5ޫ$9ƆWY9uFa|):rc2hP5.[E)rUq|qfXZh_۩S^}5*BC~SmVȱs#ڬ̙Mg۬c$ `k|τX?{?,߾ MSIdbc4TTV5<F6xeZ$N>"l=hQu=dSUg]?FikɄ\[ n櫮ѮʹjLE$G7zVG|x|āpkG_ׅ'pgR1SRuQmTlPpY羜_1[-W"}lMd-/KJ!b^ۊi=US>ŒM$Qa51#zSzH_UKW]?W4z߇Kl[;>/F 4/Dest[ 117 0 R/XYZ 82 342 0] >> endobj 397 0 obj <>/F 4/Dest[ 117 0 R/XYZ 82 342 0] >> endobj 398 0 obj <> stream xWKoF #D[FTYR#:;3˕~0-k7ˋt;Ʉft"X?9|Uk[܃mb[|N VN'od\ n* Z vi#k.Xm*.s{&$4$,ʸHWlw])bSFiQ^R=UN꺰eyW)P1с֢%M9#%X$*uSj4w-vRAP3]{OL =CR9@ [DŽNc\ĶIFEǍ:L\t'B+U56~ -duw {C{OΥ0[t<7Z647c.rǡJtO0=~f"a?]qRbu⯏rw); ÷RTיʥ. d9uWq+Չp 1QpDroJCOEƃ[dL~?+;F.f\(pgd1iY}Ȑޣ ~뀦͛IOjz̕WORoܞ48C4vNa"8c2gsj.! }_]_ܥqչ+g3[zry|J9{۵+ yp?&rL)i7&H/TUwۥ1$u;Z;횮uTq 3;()d! #|fHղY#}/AK?&O~n`TCjDkQ,+M+SyzWye%h(7ya#> :%S*ܛz D@#qGW}C E#q՚ Fv!K[Ib ӪuB3xsl< >u:խdGN-}ln_v'~j ы0wYc +%M0 endstream endobj 399 0 obj <> stream xr*r V%˜'0)JَSĒʁa R+ק,T9>TZ3=n;^0Vղ`E XѪP#U۶]^=MY,U\[ˋ0Q ثRFb o*V4x[2VŶ{FK+aچϊc(-`/vDx^5aCꋫYˋMu%uLJc@a3@J䒲5A92$.4wSy!ժ/t_ J{Y.(Wm;S PTFNp,dw3zkS1ku4{*kC?݂ ` {/K|˅)Y5)+VOGz e+01Y'- t.wJԦrdy,wE*}PeA0h⏠8 F0c"cP&k@hBъgG @@bx-8 ۡGhe!9,̭Y/Sk BIF=‹rE$p@ېﵠAs) Aں^y@-^#UDl G.7$)8{[3Q6l%(~v`{&l!&ď% * .H8fn2PMB]ӌ%U{̫Bփ_zjݯ%ZY:''I3zA[Aam,4@[5{ 7{FeP(OtۅZO["&_-(Su1.dVڦBgaV hNW1),yPH%Mft?q%yVLN&|)+WQJk\M~Ƭ0+(#d?BHtëo3 d,K2 ~gsfFU1l׬MY-ʙ9@ CL֑cpgMXm65 ;.'cBmv& ^HoCڻJOyiFE ^ Y`IVpkG"uN@M`&EJgzGETS+ݐZbGs o˅ qLϒ0:Nr?Pht7 Yo`mfr(ɈS1H_şQ)np"X̞a:P΀LYWo RVU~'ɧsD0HXb5;pwrlmd M M”UK@mGT#zz`ᱧhPʕ N+F)O<ʜb\K&ߩ4EB~Cx {@EZUn},O-3{D3hmaL}ٵ*%^w95K5OwE ,%Ι`%Na䵪Z!V!x'J.]7>7.ƸW^fVWLRPFyY[dAM*Kպ&%+5K,ŦrsT.3h6ѝp;#FbyL1Tc'Kz!]L XRQ5S9C WTb1X6))YJ3m'6jv+dgz6 NgT^p-/&w6{2AyhSIfסl(Z3:Q?tGb]ذ#pG̬|p^BaiEWXe'H=>k844""" |pǹk&LU#vGr)b* !hz+y- m?)0!yȞz ; |?wQJdم*j Ľbay1t,l"_fccB?G] X' F%t[GwVc&r,t {Kj#aE[+H kc0!!X Aj-wwH4U^{F3C4A)lKӷ~!кÓU7K ^N>d=e!78+L8G;×#FVS5bLapŖ?ho͍XӔyOg?Mɯ?5o{澼ϻpsIGn:_~y_?m endstream endobj 400 0 obj <> stream xYKo6Q  Eܦqۃlkmd _ߙ!wEmǭ0,Kp'7"㜕*՚qfuvyzRfw*ϊ߳˟NO'`IXtiY)Z%uV+f3.٪===H"4H4uEDDQQ>Qdg;Z*^z9&%+y-˛T=M^=YʰjXTlWAJqoX`-6VUȿ4LL2/i0?)k.]  ĂQ{Q_0OpݼQh)=W,4gdb{c:X 03)|aarW}eR,]Be!wUA W_,e*_Bo NrҜ*4d>\FAbw7Bwf rk{kF̈Hu!_ K"5844ׅrD_ PX&߮T)>ͱ8DH? h hvQu7b@T//4QGi0 ؏֛}s T^@GLtjLkIuUb{QK9p!pïptB)oGo{bfpAl UAʯO9(-hUEd`>1ctua9q1NqABEU4hNx1Ho:5;^oyg@ Ξ}dy_:1EzlaYƟA'N {;׉~̎ՙR2y'-&n^@~VmKgy8Qn 8GiyC}m@JYc93U>$d5] / -6r%}=@~ $lר}NnIGCa} 2Ce6֜zƫ g\##" F[hJK )jg;x l6hUcAUa@ _DŽ-!FDWT$aЖD;P4KFo^S<{n<*^r>KV7`ʇw)K~#VUJM[wVq߂\{Ă MڥO B lN$Zjl1߸/}WޤO|IH5:B2iw:sq6x. f4\{Gf.׈>PoE8gVh/k<:Rf'? U"a8X0\7rMS]]o] ЎquK(7 9dsֶ Eaǁ8.ӗpױMl« fxhKX P0GswL@uJX*I!BA _^@w =z{s˚.1w~낛U ;x94hM=NLp> stream x]ے7}WoCNX5Uf{ƌcmk?)#$=$LE:٬dAyp Ali/M6StQʹyYp||0׏/_nvm募Fj_M6gn3m#ͤyӉf7/LDol6hqsVCl5So߄R5 E3=4Wmvؼ}%?ḟZ&gݹJue]DVCɱ}qJnvܾ߽~o?NϷpiJm$/껹UPo͸NQ㲝!FtB19JolFZ/?ƿynھV#=>n~'b&c8|[*a אt]'ˣà;<᷇݌O|qM~v~ñf7C`5 m?i)zqg>kG~?7`vw#( t ;3 ߁sv=~˛+1`>? xm|4MoB314ڛGpb~M֝ 3~ywzt*;Rmx>`Ba=7wĸ!T!ɶb>F*cp)͚w+Tݽ߶m0M>^M$ hbH94SY4M hnRО|=hf% 61IlF nP);ӓcDR WWXꙙ&4rvzS# 0)\ʇ Ps. z14}qs- sdU΁;lcVkIf1vet==8[ m>>P^k6,?3ciKN0׬aGF%ajqԍM:)IN08RF' '\/&r K3 0vÖ7ɹ4|39nVhՏ`> 49&ym S#U}x9GWOmBƈh 2lJN<\ Lr bj㦹#ٻKٴeƴA3AeȴF]LZ2-N"MtDQmM5٠!ˤc9 2Rq>F;AHJ&9R]"<' YFuвfFM3QU'⯻n4=S@c11Epդ 2him{dZ˦<<ϭ։ה< G )@TZb[T["j"P9/SGRjE424W!Q{mdju`Rki3YZYJ"աU PFn4:헵Y()UZiiUG$m~P˟a 2HgeOr(g84x 99!94BAqAs(ĵv `@+ )MY?GSԦ`Цt`ڸH&tN3G-ajg`r1d!&dT1WVƐL7C"N. T[U.i1!%Ъl70E_ɖX(:j)$a5Haqaa ͰɰaXkM$RqZJeveW+î}kkm\dR؈]a.<<ABz9i+1E(ɪٵ$.w8(Jj9;dT]LՇjCZ5U'.o=#_ܕkRB&iM(b`HH{I$P$>f<220288e0'j8)}j>ZfW HץtY剴rz*n קhXH1,S_n[~VOh'姭w!ϑh|8]QcO |?ŝ"ZF w[B1j=85Ϧp4o9R9RhRE'4$T 7["b"x φ8ZS V3Y9\NqRKa#J5[ 1̹!Rshhqhf5)a4idVIcHv_TF'^KE9& Q_&: [ttGg->eЬ .%Ú8ǚ͚f̀dM&ĵ^/\/`WNsU +eu`$R+m`{xM QU_ӊA p>)ҼYN\`-qb.W\$v5[{v`A*5e@Ҝi`-Yho ~-Y%+Blr-YP.697`ȶKҔ3Q&>y L[ {r\yMv˜ 1: 1JJ52Q1${!.A]!+cnq/, W,ǾI>Rv^zObgnkA)!fN1;54pʶ$3-23uvay#BM d=ŵXP.m +kqZex/Z.õJ_sm}`KŸZWRXZk8#Vx]~jKEMhfN37^Sߍ'XI.hIDvO3򟚩o= sȒw/ԃQ - IA+{?VFWV8x̃`vi h9!2'0~,je,شڸHߥYGe%**+جB/ EKps8Yb`%)[{zŏb63%'p 1ͺdo;,Ӵt1fIrf9M Pn&] dɵhZZ5+:֚tXt؀ӱױ<(]z9 r9hVG"hB#\βՁfKq#3ܙ~`< <%fi7jNi8nvօZ,Lj>[6Of^?#KkJ!n-gDr_ve( 8aͩ1%;흵1Kb3qjSmn-8߆Kd OuOؚ4jbtj <(]Z&.HMx\*FhK\* 1Vǵ\Z [_h~D4:@S%. }'I6roIEq?KL枤P0 rADGo`"Nc@$o 162'ki_" o2`$,ݬ+[ROL@NwV y |gUM.c.H_"s7" AnMw䆼o0TeϹNCcZd֨<8Lgy WC21=]rRC؍` ]N߅qඣGM6=W. rN\ 68 ~s>!-'C8_̥6Fk MJ/*^j~"Opx>;<Ӵ: 5T/GuL9RĴ' 0C4'2F7M.>gS.o8mYG*kJbP)]jh nMueuNUðP\Ao7o;X-{2 B@8+p4a s*x$,ȮsAl`*k4Ƞ@|hRȋD/8XyU]pv:V:DUyƪy+ B8VPXYp*^D xDY}̧j O%*~&~I+&F=Le 1hؗM hkXHDrdD/SnB t̰ OenMΰ=TЩQM7Ԯ^N8J I21v'LhY)7MWĎ ҸQ`?KI!d-MEp-^`zg ix,m}Ϗ:\ߛsj;KڭI?Eڽmzj' \oVh#vKSV]_C+WJKjYv quǽi>~N 'W"r2pt:> stream x]ے7}Wo&VPU[+ig"CfewL\ '&ܣ:D$~ٷoV?cV0Ͱy]}ط՗g֫.׺?~]D#[[I7l˶jqx~1Bf?Q;}j!EtM E۴lો퇵RgSM65u/9]Ǭ_Uv XF'FȘ܇ϛn}y!ַ&֟7/Xozxi 7/ac I66c 47R@i9 {6(]@7 ( Ѡz2%"^#PhAQL( [9Js/8L{m?֭ަ}%f9xyݧNټPM~0nz okwW> ^$8&K\tn0?\s/x sp\52.ha<SXȏ5Xq>jcl+\َG,Ҩdu'cR ݛ+a :X3#tY{`UrRkDZG0DĸMXi Ah۬[#T],3 Os&a$?nǖwrĹϓGhhd Q*`\;flLWxM~<.ecUv<)GC[\nȩ̀Tkzz@>g<= M38:< $zI՟: )8%ViZ< #d>n@riEFf+3)^g$q$87 io mˎCŢjWSG Dboo&MFDǽ=S2.Bܼ0aی.5Y鵑HB@vj8Bͨ&<^p5-ˆVz^J%\|1 J0Fgz̛$V퓵6wZ)w7{X?:^?t׼+& y7B/U;\53KPA,VEnZh:ݏ[ `;u3\bt-μ}{ Mf#&^9&a6rp<S GŔ#Gvn0Zײ7O;i!=pe)8NhRˤ`Ikjv/nNK;ńdn^v=7L߬6/5ջ+vl` HVݹK]+#d-Ց !Ua3&m+ ڙA7b$B!$aI*$1 v01{[d\3?Ad L4Owrrcd*;XyV2L3K[= pFK#%Wf qJ V 4<(nN*3C ޿1L(ҪG0V Ai5s KcSBFaC HNa}!pWq,<$˾a `*G XN+0hׯ[@< 𣉑ˏǏT6m˕2!޷4ݳ+.\GB+}X1%=E7j~F}jJ/; rmp/-&S)uڰnkpQH9JpĖP)i_-Ʃ08@ R+԰o*dZ\;ȋ^wJO,Dӳ\[cPxn,ZlPyfe۶ݩv,.e9qL.w>ך'wcdV'My"SifDj۝֐e.jbB"qA^rDl vr m&)Abf[15AXeDz'@sCΗ+V[魳MGJF$&!BQ͉37[1# $Lo0]rP:;~1h๧ ZnЪ.l[ Kr8hkxOZ:D,Nsey0'f.ZCCnE dq{5*}t[n{u.LaV-#h q#Kj$^ n,*AٛcM:l6+r.✋S!'dtUErף=>9 g\?|}?*bԛG=z:ҭ}lqɟE8oǞ™lwwhbeteObz=5Bd\aV[\KtvBxGP<`ukkgv{8 !WW's㉩FsТ>Nw&e7C\_TS1YgN7g3hgcip.@pp$G;a-j̎CQQr,UxT mJ@%B*LbQ@%`.P@`J()Tc̙GT\~Q=R9\Ǜ*}%&l\4bJ~&=zQլu_2jCj$'`_ôM+#t_>۽0#)kE|vjEÙQ[7YL0A}FJ{}9YΣ'T.+#iF`{SS!6w#uʿxwn-ovѽ||=ytGzG.\q\BĿ6#\RaV{pño۔$xW8~>lo31_̇x!徺}kgD夣>ERjʩu\d Ed-`r'kjc\ĺq•g("{w_ ƈvS-,u\rb|qmƐHsLk d]2-D`sૢ\b3aUHułL`2 eZ„rhsu Z]<&.zc9ZPELxzt5ٽԌ:p3T!b("ѬV/FMam3鍋T՛x5yY1R _mKʎ ~N #:ѩ#d%g!#Zrbv "aJP~-2ӧd3Qv :AP5}6=\zcOԧIyOX+|supڣ]Ux=~[S[#?@>v=<\X5&;x{j|` 'L i^|9t*6?39Abdp3WݬÜnNmlqI'/9lְt=7^6O3;;ȳ=VkyP /C3ۅ^%VLާ hdW˦<>\Je9YO%[L= dKHj^I/R陱;r}vNq5, v7E@+s2/'S.[KoRXvoRL6Na)[0Ie')ln }wr$R8FE\M*|cTN&Ѣ9l$+Hmb4T>q!#[Eg/s"&˩Oƽ& endstream endobj 403 0 obj <> stream x]ےF}WoCN.zǚ m֨gE]"$~+ 0&+O% |Xئ͠?j ˛av^7K??{74B7ѨӯdF+7lӫf͸atx 1#119 %d#ϛn0`πmZ6۾zz],5}:4Q]1sd6/.EC*;O;=n~~6;a6?ݍ>KHeP.'jmߌFq9 l\,ipC2Ccᨿ4ҀOܻឺIxx3?ذ?t;ƶ/5sV~=u&Uve ĦQ2>1j8E,'ي)'܋0\wݶcz Rt~,R"l1"֖V#g)*VvItwqwL?3-z*Q)r)^9qؚvN5ږ-!{ H?eܤs l@E 4yFHiv)Bܐ%4\ř'O;Avy'ƱXdVl¡0O4QЦQ,MOӧqzFPLutFKd'?t٢y 1T;k;a (Bp3hYACgV٬xsI TJLN /N*kk_d(hN+IRщkA`$(6\'0ZAXR kCMvZ`Ic% qm_OAel&d+|?'[AȖo"/[Z݂l5[pX]B* gs9ƪg0\ӬjV-G'Z%y2Y++dt¥j:UI VIW}D]u+ū:U|嫖կY=NK프f F*!ߞ^p^-vWkd<,H-eیjrl3X@f95SF;:jP>ZPT}|L$!5De7=KP_@t}Ws8j%z=˪򪴰A/%)-uXaZBaY-Ӂp۱؅aP3yk\zBa}Еԅ[_K Oe9oX_f f}2:'Čbg9_xK`,h]_&.MѰ9v} 0X!fZJUX,)]2)] -du@(]u sCL~{~vPz(m %gTJx{iOV rRuRWb/Ą"QA)AQAy۳v ֊+:J^]e#U=X*\䟝Brc״]=:<0)u -d@(u&_ ۳E"l$0V8ӌGfo !z>%ST͘a8/S&ec(~bJkPSp1ZVaK|Dxg#T3 >Ƙ$l%7@x xRAwQ+>L/qN令(09$LD^P sM1HSb?};NV(LDEA2cMdgwbEYNA%T1|PfUa":Xň=IKq2&Ί8NE`o!Z.o0A]a`rbPH30q˔DN@ωupߌn:7yH ǼlK~}~o&S и9D#i N]}k#Nm%SJ00\ h6KzrGoQ+PRB\3@#I(XyCӫ3ǒڞv)A?Aq5V;@ :{JœS [<`yz; Bku 2s?/914l+Crt=ZW&a-cU1 PvŠ v7E9|*l֫pVXT ._e *cEVjK6^Xe*URbVw}K P9$ ЈPK>~b՛ݦ?Qd]@IҔnJ+n>@RYF{H(d.H:y~9F`*m gw PENr?~[p~s;h"i"<&FJNl-G^NVc nD'&IO#|,cbL3(oyRHOQ'l ngݮyB~v䃉{D =IH$~> i7&3w_:Q^g</‡檇>=˟rr~*Y/f1i&UmQV .G1.I-=.:33J_brww%EIuKXS}`%XSaMWC_\16{dvyF#O3w׍UXfjwa,{]]3ɭ_~r0yNՌ[ooQ&^5~`FZA, &Fa|s=ooEd&B"[>q+"㗪r)0v%;]@Xor.9F$(?6`S5i8>& +{??Ap{~رEv3/@7 E; hV̱Ʋ "zEަ{PDT1e1nhx-kE통 G{gFI8Ԅ.rFlM(ɈP·am'g|/؅>dTdB 6Ţ>[x4̝ѵ W)jZ"Gxg8iؗ6bod7m%}]uC>oz= ^r>IOܒRBh|A|oIUItS.&ۘs_bk1T` =<їlm&2GbI{$9!뤹ѰI6D6Obr$XIJ}҅l#*|ûZ:WOy% |8&(j& WLf WLE+ؒKk r3ٺP~ESnzkun}gW_];se qDsus8ŏѲI׿S\ma:f=} kL~p+4/~t{ƨGPbN~<CDM[Fܯ'$\5p{h܌έe5qλ1̐˕B.WF˕E/WJ+ Ml+#@v2`˕$&1=L1 Vtc+/uc?d:v";҉Сb5O3g 39*VJlդaBj-)hn̥҆sϪpL`*&Gll۰ʔ4 [Jq"a2LnXC~M*A%om[*\D.] %xBaz_5N$Dovz\25[9GӻE{h- MlbKX-RŊ ; `]qs-g'u\<ƦLk'}9,i!>*[ps[ A%x! .F,N9 }uXXE{=8yt~> stream x]s63;1K|Giw;E$&v/q"#p@ _>}+a'lәfP-3jg#an6߾ݦǧO3铽9 SV:m~m[Ua3v0j?<}Vpe5Bfj~fsT:Viy*{~l%yk[`k;6E5ŒCj?EfS)ky3Qy3s b/0(ÜAI9HaOy+Y^ʮljDBDXO(It%B,wdh!es1=;6LÁLc\#6 c {W P|5?5zw4XύݘmWFaаn[s/Ƣ3'N,S_Ɩ DKc:!]wܥ;S([ЏZpb;+#l9VnabyTړ!!:SJ?; |RѬ4/n~?cnvv{xU͠|ދzlZ)CWвVƦ e1DoU_ZfMڨR0`,*|N~[l>#n^7 __sPxPՎ)qB JZ(qZbI($l%,pI(^2F/ZVæ禔yuCW!vk# cRx˔ m\$^-x H/ڴIx^KҨvGKyD3wXܦSRյ3pӄ)'b^"tfYp*SAft3Jc W-膔.5j%aޘ0Пeں}|A iF $zC??m` |t >=_}uYSr{)OyFY_>&pOߟUPHO5$}qcYJGԭXna_ÜnF Dn&BMU“$L4ql~Gs3Nhy/গVtbL10o`?:קx;:gW)' ca"҄<ɹӤN,88K<]x.Mz=]}jż4ЦI.z$ӌl\rxjvʦM MJQ7$|iTVy:Gecyi:L .Vx?8ŹPBt(H I6 񴕚$2YRk5iw]{/ev3Gc wp LNWIuwcz$dfXnLN2,0_4"N#uB Iꠄ/$I2IO ! Y䀬9C],DL)fX8:ܿm;Ն+!흅fX |gJfZL+XvU/$ZOeeh`<wNTB;NBp'LD hَ"?ײ:Y=R|!G K~cLeʬ1˘ jvVR,U)s%_083↾\_]J#͊bZqH[>}~Ep%ةoouAIěXG/gB\PjUubTIV6ql+=AfאQTLWsFyyR /}oa񧆍#I;IWheS$I0k0r+T{)G-QݖY:̕G[#n@m.OWk+!CfX B9Pa/d6Uz~'w^Bju 1C5&9 3+ϣ:W6JX͕h~ڢSo,#YXPqU8n|Vt I1q7lOIhE.}?)$àP Te"k8 W$yw\( ,%Sp#ڕ&ܥ~nvj+ĤnG;|iXk0S 7oc.$0tQ%Bn='T쥝 (-:u|*S҈;nHT~6 B9P/6UIs%92`}70]c q@W'S)dJ"cWHt~ w(Q`8KⰓ+Q<3E!/@ az&͜:gci$PTe"mE>Azk'9!B,Oz-uZO ;>"@,Ж&*4NE[Pei\S-M$HZ!-Mo;yz4AW˚U+ S$u 7_ aH6?2؆ K|%{ 3MK(W2ylyXl3 [!MqH\UG7G_S6CspXQIhoCxM(6Ts !c}|R'3#I]v#uE`SQe=ҫ>_L:k(-E|?nZM^*;ٟ8l#)iv+])Jg#[dlJ26(C Tel/ATV8ny 5ݒT<],ʹg^GpSm͌DmWxՁ}=g bU-1<$.ܾw+LKV+Rgz?Ѿ%ʡ|2El+Ax {̇/O*X̼c<kOKþBKH/eΙog3'1N-QHpa-+ePo'`Xݝ1 WG;I,͟$ymQ~=J2'CyTetI`!uKfrϓ#8dBuYR|=Cz>y(k NAI>>E҇w޵- H!Og߰Jd!~^}j>>ߧv:ui=.& u:l :Ӵ|~k:* ӚN;qM4K>/zM8GJGa# O8('CUH`SN8;^Bw qCʲkqc/n[V^kse5c\H؇ r1^uvy8C,dVD(*e{gOs<>qġN=UI2 PBUC(C'$OPG brE0X{ 2̐pq52#1{KGm\wpY6G;;!uK0$ǜhǬነҐi7~>Bw?$^!^EQK஭A^CPȨenfhZ|ZgF}^>Rhfx|H6aG@, tgI©g@6[+<*\G51Q1oq7} jk wA{6'=[Tٜl(ҳac#?5RLG~vk#_Us]X5¶sڶܷ.ڧ8pK];ڇ}k7#u"b4fE >o0FJ mde|'lt)g10"MY}+GQ+v*gCg B9Pa/dՂ]%HedܶE.o6Q1>܂4]ڐ>K-j+85YNj;0c B6pa^o2.f8 C}a?cuN8r 31c"-Fe d{ݞ3~+="zΡyB|[Y>5k?vG- endstream endobj 405 0 obj <> stream x\o6݀։/Q zWy8#Nڻ>6of(%y^nWppDyxwyXbw%9˒Re ~Reer| b߾-ݝ<̒?vw Ԓ% XU2)eV%gJn;_RSdD2&!d _bnJL3df4a'Tn=1Əy.ݓctwB&(Ve0>P$LFIV -aEEjzD?OY=b5÷Eo6Se&CJQoFF^/<`HaW9 3ZG-'3wt+{ʔ=eI%iXim SD(sXr8ڌ[5M1-fx 8C.݃?O=>K~Ƶ6yxYeW }dm\szBLj17\UGJ2LVW$9mTK,_*̤u%Lx X?8<=pެjD֬$'@w?ҽn),2='@vA# 41qgV6x?z~}s.0 %}9[q"hx-R[)x)_qRM)2iII(BY9&4\= 9-<mo./$G}wl̯f!^Z7:lpumQ2J%e,ԽUND7ۣ1+BdLm{+2c}Fw;:24&8/oӿbfǧ 7"oN[C}A.!d_p.X*D ˷Kxm;'vwJsp35d#R3=GUBpd.0^g>Ճs rO+z/p#dg;[c]yݔ;|qL۶,R#+fewТ 0`uœƿ2$n)DU lNnЂt7me1D"tYؤqtD6z:lz]̴^^1m"}lD׉; uc^kzIEri%9 kVO_3c5{ϯ eV_krB]sٳ|} L)|"1lN}EmU"wG bm s6uu'Lp$nu =A< E)z"Uh&27HՉYd1{EcS}ޏJI{01CQ=7>ʔn pO@$hwq$A1블Xdq.`!25f>t1i?)ūgۚ1ߊBy?f|@kʠkeH32؄ǐD1hC=;=N4Ǘ?S70_x\+Ȓ#xE) +,:sM8'0g@' 灾VXUk(G?aN \w3Ƒj~CH<z<6m=+K$obqWV'UQzM=<,lK%{aM_]A^A}[ Xr鵪fJM|ukt xݔR/P`VI?}Xq-<)`o A54s/zOo<ЮE6q@v}ՀYdmӆTU+7Lʂf@i3{ -$2)vOn]`jZ_xh]W%9fJK ["Kl𢯐/a-%M UU)`յ- :av _OMOx0m#!Tg^ȫ"tVCo<(/U`xLL=u,xϰc^qal&+1Ul> stream xksqJT*{*b0~kDұ7ڔ.- 0 kejI4i`8O/?ys0Ǐ̡v3vxم}xx{Q}x _yp>~;?mKQuu9|r]3T0tuՌi;|:?~Ui:c{cp3GyT߮Þ^Σl[TCa@._仇jj.lwmk/!ENF;cﰗ緧ta?×ϧ6|9÷~]щ:3US!S</ǟ;2]~m}cڍt1ߟ9+k2fp;po8^VSW}tǿ>=]tO#4O6=oGO>ND5z)]u] s {mW&)\0G)%tTg^_|xɾ=M5XMvj[n{eo?_}~ uC[ ־w,?d]27-1}8Gwxf4]\T鏯o]W|~wP2L(~MB7j_~p_q;V68V  ̠w'_q{_QY]ܠߟ4}/Cvm} n@[8 -q 20_}[맒+ ?zնu5u3Mt1S{&)uiR%cƸu?‘w8Z8~cZw,g!=k`?8KlbEDUgiu&-CS}e|PԎw>Br䢺=^U0Y8.anj N}ԞU6ֺps2n>GIֶ(1CW5jt8dN&=9w9q;\0sxvv>)JIecpFM=,&LEwӴHIF~: 3D 3& [H0&eQE `XWJF ZGY ¡ mp\*% $,BGD#X.O3#,pxCj#V5\ %]q;uYH;n&08!YⲤ'b6aҜ5KY"Zj{Tsfkuu,AT7K]{w) emc[XL쒂&KEђѧFYE2.]RZ}vtX́o9{w妯nب ƙiNwU< !,Ϙ,|Cqy"Cg)˳W> BRkT-16 ,sYM+P٘ƪߞX'mq N*b-4$sOģ*\+-FGmGn$[%rv) ٢ !aǮn𫷧xt$lmfR&2ɒZI\ЭȤeRhlH|\L*#V4sE˥ bR3Un&#+KAB)tC\A%].ϋ:3H'-PzIWx(٫~uyHh{4}ʦ Ka;}ac;a& K)}a)tqFt$:#cXKe (bM g~5@1HY?U"g!"/$/@bH9Tf9#|(C+d#óp ^cag̓ψ5YBH$"$Tbr,Kkr,)nY̏=a zɀ($nA[])=i !74YȄRәTN'H"F gE%ąma 1ԍ )Rҧwu:]4O_4) C$bEaaLtz!¢!(LyEah+}܎jQE\xoǡ2d|v~P33 f_ڸ%y8i]92 %;266l92+ȘKD!)sd½l#c3 8/Nxi&,˙PJcYdzL.ADCj2UP[ƆmO{{omP:Ͷ %+|ol<!kl<ƆގjQEQ465M0\1 <<$Wgq!ۚ Iekee'VfqJrS\R{{}du.K.l 酈{&q6;:K&Kv,<3u$9˔u$Zj{TsҶ 4d-ȸ&Ozȼ$lN&e JT%!WA¬a-"a^]JXkTCͦ aBa, pyfZ#y0P/Àe_Emh]Q֎Wɤ,eB-y:閭3m; hVu`zq}m{zOwk3G1lۙ&Kv0F3\Hv&aL+:QH `S괥cܿ:|{2t Ѿ)?:˜PIt6s pVe`vpa[)DdzUZygs7'3>txwG?pfMc'M(Ƣ)hb剜yx4<,B[RۣYi٩K৭&; pn0W7vdsdRTnh!`y2N:扸y؋sb766yx@tDԒ"j7G]JpPwP/2 *̾): AAjK* EވZCP;BDO6EBX<1Y<3x mRۣsPn.w"ZZn,`G,IY,nX X%Ԑw Ve,P%,5 ÒVZĒ?l0]1YSO#=Hy؅]h+s͉@d@kNTYⅽ Jk'Syeg}TSh|] qa[l*Db#[7YyHJ {yr<< ّIzG*G 2oUG`Vtd(C sdjmO9U a%|ȸ|C[!5Ly[ѕ#,B?DHEjH H VeHP%H5 n ʌR*- %;)ҫ<3ϔ%ԜsSVM1 BRzN􊏋B9%țӵ"$,B-q͗ũ| QȻwA\ҚV!_XjXveBXb1Y3T#3ӻ }eE^2 I,:AV~oA5^+G\IY\~*(R[\R+^u}dժ*dPZ"܎HAU6YkT!%;9"<3kT) VzGnG"mv}>JxQg׵"$,BKd[4mU. y2UU8ZV *d+J3JѮlZ0%;;Z<3k}-sVP/V5m%&cԯNhCt+ueH+>K+TAjS+*PE޾ZHF*y*ԠT["Q-Xϲ7#駕 }z$\n R} %I"(„}4:(1ϟ{h+mUU35X,y >,stac,uyǻܭ2} L+ |X_I]U(ZV@`.k@K*Bp1h9av=Eݣ! WxWx|ڄOY2d Gz?0%yw Z[@)0w$~-܆5`,CD&K:0\x~TSε9"¤G"*٬2u|0vRS8z;; .s ǵ˫Ew|ry) rf̓;oypD45pR|)3XÞ/c HQ /_7So-cY endstream endobj 407 0 obj <> stream xZo67ARqfo2Rܝk}Hvwu7Cꃔ4),V˙!9__ Y+^N3?Y+;W<1i|+>ݍDMiP /ňhtr_~ݹ+Ӑljx a9Mh~U jߊE6>_a:'.^*xn@l~ybC~? Ux>!W_wC?Y1(~.G*S*s̉5#|Ѱ 4g l05H;`Du>6gP `GEL\HZNq\Yp$ qGaزJU*`gRsF .t=uW`ڮ{x~O,0't U- H>D؟wMRjF^M KϹxXC=<,BoT9_9kk wViQ?5NAv[$}Hj ! H kDYf۽Aaxv\Ю6 ۨ=Eh45J&T*/ ; cTa `=zC ʹ_ZootSնz/lF>m M qi1xЃŽM̄L=Fr*ŏvp԰ܜ4#аDowRgK6POփ1 2Gs;6AmP PF%rW&Ăc馣3ݽm$঵}HSJ4[;ۻ-܎HCú?ÿ:/NF }#5Sr4=cdVtl4L]vjf3N'{CsV&ۢ|5iϿ-:LstseNFun5!nl#xe=TB")%#vlUu;TH:}KGbNqn_hܵFHUwƺb0bl9X#+ {ѡSh)H@ݹoqyޝ!>uD- 729cx&C@آ43XK3I Pp?6hϗ]=g2Μυ#| ɴ *( rTnlc ~_h @ef^Y}'c xD\ww¦-$_gR͕"[Q*jr0Ӣr3{Zɸiy&@ϱuoTBWJ1 ^ >/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 409 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 210 0] >> endobj 410 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 210 0] >> endobj 411 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 210 0] >> endobj 412 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 413 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 210 0] >> endobj 414 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 415 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 416 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 210 0] >> endobj 417 0 obj <>/F 4/Dest[ 99 0 R/XYZ 82 123 0] >> endobj 418 0 obj <>/F 4/Dest[ 138 0 R/XYZ 82 210 0] >> endobj 419 0 obj <> stream x]mo9rn?j.N~`g\p Yc _/=V4+KT=]d=,9??Θ~p_?33:ƿ_׿z?φ}k|y>ЏV? 8}oқnޮ3g. v q̺P=x]ng]oec6 ﮇ~0^|L;IRwuI31.ǷZd2 7{Ghாǫ_WI$Υ0\i^8ma vj:yUګwxõ1Ww/?A߽X;fS9R:FDLO ~wsZ=i]}{]o¿p{6܏;?{g-‡;&3r o?t+Md}pc>}+vtuxt8[zO x v~Lp~+{wѿo} /?awc]?o|oobS?Ԫȴ4]7}zK0.+q Q t&d%7oo pw}SlwGwnDI4W!ǿmP?`,#jbODtZVFﶕ,B*Tt)^0Խ>\W7/_I$d"&h h]{o?kt>[s՜~x[GˡelߣpCn+o_m=E-D#dk3!#]`\å= 61 )rKa+] q Us$kIU*Q>ir( o^_KvFƈlzs]9:J֍*3t#eXW*w(O9)ƭ_Ho" 8M$!I r(2`~e=e@!*Q>Y0^ SD\/ FD PeEj;xxPߘ`2יLTG댑Dd?]g}R}yg)FeZMƜ{OY]OI|l=yx ub>Q6XtAGz?,%3ʐ ʀN#h : $+ô.LԱUw+ M/[[;Bq!TDZʚ5֛/>_2% JyP/-,laMҎǙqLDS?Ψ_6@B8cD1,,\'Azgĺ(0J)O6 `-'\٘ͅel8:VIw6aXEb2`F?4HO2n\;~s~D{sq2ׅ"@D>$kǞQj8?XodhH92xba3b\ʳғM?b (=^(uWNlR1b[N;R*J:*Ds蠙oo PGʍ%ۊC詜uFZ!c$ŰЕhNW h[ϋ(,5TrXw&tyH"6\"1uyXgE%u.ZUԒX',\ѫݽ/D^~c 7w,KO-F?:1b\r2r 'n)TPNqѦoTѺ_QEN+ /xUv-SI:ۣ01 +AxT~r"Z6S:HlG жT\@cf 9 cr&39N<׬K="<)ePX[F{m~,-;`.iUޝ]dS0*Ĺ/K̥&Q^FItwLȳ,w4^V%o*(1N0)un#r0YuթT`fH=ѷ$#5FGСO}O}/ ̓HMQޙM?|(JȬNJ(G]#8AE4{E9Ҝ1y :A)]d0YPc AQRw{(/@~\PҏE5F[СXd8Y]@Tr(2lb]j [dD[d3\Q|!J1LtQtb*쫓 %kbY :Q^[$iEt*2P1B"2P%oSd,ϙi@"#B"ኌ TA|.2Hi.rLi_ AQRwKM[.LaEdtX˙*iCr%d #w,aGOOiY3x<O؊!|EͰ 7xc& rC,W3nHŧUZ3=q|IsQva!*F &r2uR &u!hi? gTōV>#!!|uͰ 7xc&_RnEZiuaP7*uyRڬ.>>qDEܚ !( E"SuȜaMIM{@w7 A_d3lA( M%% 0E5\$q0Y7 F7npJ,訧 1F:С7YK?LљМja S.`&m+UϮ P-妻ps_+ؼhC1oٿ aAہ!Of5LJu{ !VN""Tqu' D*Z4'32jv>"N3wSz"T*B晋cX!CHLpNʉAHu~8Rͻ$yU!nDs7ն7A VckL6j M%%0E`5;vGb(CdFXPmTyJpg2Z΄F=Ҋ{pԉ>pjt ~(oa\Wd^W]W @R8< L 0n ;06 ^aVa%(,o*0%H{Fc+Sֿns]wa3|ΫlPY_UrcCGEWl?CZ:Ϋ^ǝBsn==*V/s{{]Ċ!d3 JTQ"Wur5dZlSVs:Ql^:dn2\`#SUnyhWQӚKDxNMm"vA1m"(~`* 1 `&&Vx]z`#wu+ZQXnÔ}ZFKlL[$~VgrG;OJy怇Oǣm~}Jhv^cqָQZ+Z[z'?"BJ)a+%D o*aehYc1E?z@iO6.(⾅vU_f2C&+_hRqi)f^Nkd6ي."O6TQ"%:9- %[) 8k( [, -ef%LFI=t(W,NN:3r]%њpL ]݅pwݵ;"!!|f3|"JOTabj `jSgV ;~QkϺ׺|ڻKE>NȐ1" )/HK[yɓ/3Kx^̊t'E k)!ZO1íD#J1Jtu)*3ғkLcPʸެPר2u*s|HE3~+FO_yKdL֓:VO7bn}W4]>-TmZioֺif!e3!J:TQhQQEMK>JZ w<ۨxu-ivRb[Q"1άT+ f,u'=o4_lmD !l6D ƛJ1L|1"fy c mpa}+oTfuS=ҲhqqCnlEȘПSa|5ӻpM!f3"JATKlH16Zy^Tye+sƸ: ^O$ d[k`n qc@J;6ڥ;0z\MaFaԨ 0`5kL׆O.ix:TL TjD j+]絖O8Ͱ)(!xSw3̠@rޭ[/ ,%168P)N*d]>^/SkX0v؀Y)ǸfZ;I>6%$o*Q"r8HNetR'ݲSO:WL:kK=&A w% 'o#*:9L+ݵߜcNnQQ0y(UFBĤ1zSTF̄ɮ8M(^Xw ûkC{K5 endstream endobj 420 0 obj <> stream x[,G:gRvA@".DEG<($_ko_m=uz?{_ڛ18F`ܯy=|z{&26Nm0my8nrwO~rL):5Zs:?>{/<^om=xqnoy[GjK7Pքl/9?Sdc^=qNO_e~uzNj:ӏ_G[tb+Z]X6n| SцeIg2;7L~?0~o=MEsUE޿?sW/ez^?a6~էu3mfTf. Բ$cuKiR8gdZ2#D4u4NuU B6t F&`!.C8VZh+SɖɇB[(J(Sw_if6jZֺ@MP/>Ј  =Ȳ W XaC[(J|$TwUXNLfFh> PVވ8@ D ( x;B$!29Cvts'$LIQC":8?Կ86^;˫k`ͲN#6⊞Qm8@/F$=0H0JM &gE)jd>%նs;6/.@h"d"dRx"h BH5qma~T\0**o$T22*^Ձهm F(Eſ0㋗5/]4i~T`a!zX&ۇuYBAYB%``z$ @ Mdt䝜;q!5;wqNvzf<_" B!oEdžKa#[{$8Q00QH%$ *f04e? rVu,Nb%DO4eZA)P؃:P4&5gQq(qv rۭtBDƶ]&lէɲ>65FWmZ;Qm@C vl K`aP 0TM=iJj64LݲU>PLmhK03E\= .0>Z6~1Yȃ>Y&[$ddI4% Y (,x;Y$!u9e׺,2NF% F.襶ȯzU࠙3Ltd".:}0`#ySh< >&1mØ?1#]Li/"GQD ȵgyU(9ɲqRr]H`jE8႒*(aJ6("x5ILbQbNYEͭWmuUgr-%|8L X-װ٪F:U3Qle!{dә+pK ڠ8=H#Q $&TyK%LHhfvm^5d54[9?hrej]ͦ6ʗg;AZ 3hVȖ\{$Ԅ╄tң; k7ࡂo 2 HmX PgVqeASPAsdJkϥj}hC3!e[PgC@ I0-qH ZP[Ry݁ $驢`PVe_hQ`\z\\Eɗzň4 3BMA* 0TM=iGL#j7&+fW}ƸKCSͯGh}Vhh6Ĝ!QKotAdH@dH% %휉9$eO gFsv~S_)j.¦L1*}r@] a00$a 0C1Q2i321@U#fކm (Ƭ.z .& ՀQ olA`H@`H% %턉 $ɤg6-@UeKRe]wkZ3Ti IA) qŹǕnpGRHIą ˻PğDʝ(.`8TM- Z&bLcHVŚ,k0/E 1ǰC11iB.q.|SO3QA̸vU+^b%1˰4 C!d5`&g! 8 R ! %X<ގIe:lzh' Ux{]k0e 0WmJԥyWknA]-PqñE[q[b ž'JvlAMq;"Bl!U C^ %¢|^yimZsށ .ՈQ+īc[i[¹% |SK7s I.2+U]oԹS`\]|Soya=~ M yC0b|K`aP NJ0TM-ߟ-E?'%T;쳼-޲O5Դms՟*`h"؉)lĥk[Ȑ#ȐJ@|SON, N i/9-Et]o2[q>Z%D,٧xhΧ)4b}(Ldm8! $9! *_x{$ ]Pkz.ф=>L5F?'k>E;Ths\tF# %y! *3C\+H1YE_<>`%vE~# M.A. ٪ZHi@ZH%Ђ %t$ 1]rit 75kom8Vbh>! _L2C*EN'3LY7uԚЦA^r7J*0TM-iK:ތ$IG=6f?[#@Ucm (!yu';Z)4 PQKnQ! F%Q! *S% ک57;U v;lk0/E %/bj0sNcE\|$Ki$P7@I̛1^2-%zy^L0*M< C 0-I$8 T,xZތ$R&/^q7|/__a)j'.cؐUpɐӅ\tF,d%8 T0xz% @ Mb-NKSPsqCtcFdhp1aD;] `HלaTw0ŕ)P70x;a$23I)sߘI4 7&w"LQÞ@ G ҨmQow/k Ipa`̐JIY $`}Ϟ5d6OLQ7myOVkBZ   9ZDG.۳r*0*aH)@ *QBi*twFx>Ss:9Q`J ()Jc؂M,r:'l!.efyt*)P",hGI8N"ұM8u 66cKGY7yUkBC!.67!B"q#rž% Iv@MDe[-WDr{NX5|~bƗI}lWmrZFCw K"-7:YI hXbܓ 4I`SHxؓ zIc KTN?xRS endstream endobj 421 0 obj <> stream xݏ$GRv}?(l"`'d )@<$}l_u>zz13rU]]7IaOOߩhN2(m^􃑽yn<}o{p:OM}a6 )1,j~n:lԋuږqi.#VV7'r|t1\ײWOi/iföPֽO0]a۲=yu. Yqp 2B6sxy~8=`|}VïǙ~|km^ :cXhrqsȷyX\eIg2=7Lv?P~i^yV͊q O?>1p/?3<=|Pz26o)zsrAa٪P9z^wHʃ\a4$6)QdGxlwEi.v#+^J^b̰@Fm2ci'٨pEDEc7cƛ Y؆6y hquBo$ B6 DG"-]5l-"0S %G}" m&a=W:FE5.Aur!l੸nPRfax*v# Z_ΣV0/A\Q¥sPWՠ-dnjCAP?oBA (<L9hV$}>)l͜rN"-<E )[I5Ymtp&:RB"m,vD,І$ P$uc"lI$ż)6(J˓bن i FѢ g- 2 :lTyVLd3nDhvF,F$ P$1hGF IhG64Lwlps'Cݾ PDxA.:C`#ν^jCB$@ H@`HAĉ>5bUYjcl`] l)M** S*1iKj7}Tƍ5jiz-JhJ,FhSF0C 8& $$XC*\*!iLގ I,{z1d5`˵cGIǦۯ ,nNY$jPf=UB|-q֍>aZHie -bho/Qi02썖HUeކi OKK8"&Gr2* H3nPARHIe )bHov\ɤDa2̓DcR(1JD P*c@,(HVE`"N8_n\Bʅ&P&Bwʅ(_X*! R&B`HVEA-{x\u\o[:/ Su,5T_A]lM e` \*1Di7^7T5jaz-|ܞس?;=:re*T $"0M8 Ip20`H .|ӐWbq{{%$U.PVd:8 P"P BElP YX -٬7+$X!+Ǥ+IЎIl!bӋh!^JhNOV@ RjL$T* J©” iH7SI$jAbUdӹ- yE*RZk{qm)tXRȃ8ao{ LT%WDaJ4$1QʧI&x$%^=fszVab?GGQGO?RV;.ܥ6:&z\t6,\l HI0= T =TMccQcH1+e̩:c{GsSps}g/POZrm.tب!&B K,a! .|Ӑeq{{Q$m}6%Vq/벏qKуy{a*p HlifmF L,! .|Әt.HQ¤UoH2H[x``kС핵Aq`ӅPbxC.:F`#{#K03 dT 3TMc& @ MFޏD}JM'3L٢Dw\ݭ ղF ԓz7Ʒ "a.qrI<٬1z 0Az)|Ӑ4+mo&$^cȑƠ}M/E%.HO)P@ g1A&q/ &$2R1R7 I;VPH1%Su|@~>T=<+EJqbfA N"N:h**(S*1Di.fUr8H[xX,,7]9䞞\ 6XȃævyOJCDM Z[-qࣅ\tDF64gK00 T 0TMc% @ MbFg6jG#m)ZԁRf`l82HVF`"|cƜ)4$O_ZRc.!Kq S*!iLN IČPRzٜ t˺3'%/^=t/ {]O%673ؐc@lH`K4&( MfY.Z/{)QVu~Ob jz2'כMljAC YljD6^St~U)|Ӑ^q{{$ Y|XYǷ.y%y%EߞB]5QS 7#*6}R5*H"QA*&*pDE@D>.zڈ T+[x$yd)mﺺd6ȃ<&R7&UI &!$! iHHjMϊ`e_J%ogW[{C Q= 1d#xq6ٷ#U!p @(p"X(XQ &10N'mDUɓ>ba?Km*`Oő̅7{g6 yZOA NOBxDI,,h@"HqnN+j=2c D@ق =&魏N? 37xT8Hs A@*& p)I; PQVtn5dU4VC0y*dx{eǮgkvYMȗEifg%TUǤBDhc?dUh~| l4LKX endstream endobj 422 0 obj <> stream x]ki7UmbYQ!SL5"j!&EW<+>NV<"gLCOE p(pA#RO tf0v w{ _?>?u zp *ds.#$3ǙʏGWq3T vò{]/\0˅Ofڽ)|Lrc #F8S]1]?>Iu ELhZZr_w_(KOۊk2NeLcM;ˆEf ]xh~p bL0ZUK7nJ@ʿׅEOӵ^mLccoAĊX(GH.{rv9('k*č)u up >f'G2{!!zVC`b[ځ ގ`팦XUֿo_e#EW~!WzyV[ ZG?_$@(bw`^_~scՎx} cws F\m/.q6W/g-I.41zhBW(楢WFZ4Jhkql p2xOxE*Wp 3ӳ0z02UZS&h1r9RiYnM>UxmBdFv0ف% G(?J)V0)i(:5"YVxʛʠ>OsUaV9;yQ=Rg6F>ѩ/jl"`:U>ϸP+;%Bd,ե۾OBerqd}af@Mp]0VםOw8_8ay\]BmLcr藃0 +Af ' @A°r0Am9زC`]>< 't0;gJ݁eYym 30M] u#X^&nz?Bfat!u@B:NBp`FXup]V;iGs6t lDa2d! (b]aes'!&3* D jMNn䢵ϨI^< /%Ggح# x1uˤb0[ *kQ;Q!OR!8*40Q.Hئ@Q dejX(`ԩ˄n6v{^kcdnN0PG&tq$0jD b&R9k1@A;Spr^f(`۳! cl#TƂB!r-X(GSB"hRD G u0 |mvɈ~H;Yc{Yk9nɂ[zbJ4!j"sB.Ԃ9A^thD!Lzݹ{ψCluov݄P7~ We0(5-#aeĎ\ɶLБNҦۇgM5?-aޖǽڧקJEl /PygW_kyi0/ᘇ)y"ZqR"+or{߉g^Yоߡ[%C4ߖ&W#H>( i$A) #FaIaTmi`5y{X7|6N#h)!Ɛ<} C`H1Q DS,Cڷ Ȝ},I߀S,%3$’Ew.$ĠbV{ VV#̆|w; #bކ==ʌX@L%GS9˝adkަՖtPyPܕ]Zb%*CWD'Χa5^nɆ؊MnD Ka6QivW߇(:3B|TvͣbAV2hϩ|?<](~{O]0iʖg`Aw~2%W\|>kV-CM 6V\Y(UxGKTi0x|)swm;-J'BAvF٩GaQL8& EPvZ/&^TФ*kRU-q;*ܵ4e]T3|?G#kq GAw;GCx>fv>zd#f! êyib-Jgr-órVwɐ<:8^bS_f9Ƙ:c c)IjY /i! r&;9 g4Œsə,}2 );.z\Icj稉 nJ&xT2i^{`ef<ϙRDHJD5XM StF7_G⑇H=χc$IqE[q^1N7K2'p/m&~ 0Dyt/d/8>4= E FH$;\3@TDSl31ΟM}zX %-=y>V+1M}s 2=y,ӔR! J&;%ՠd4R3Ds:Nsp,gY (wH2]J iαH F!|,u@=MH%)=D (S{~C%B֞:&Sէ!pL @kdİ9ThJ$axN I;zc+t.MqcMƙ$1w5_Cp∨8FS8bhqLIqFur5+H= f 1-2qM2;yd,d?dFD51gAꀄ2щXJ 0]w*w>%w*tRavSfwZpb['>lq;&*gHbC2`[z^|U,xh/C&Ky0eJv fy!-SŃd'^T UNx@PpKdS۳ ܻ+mW'_Rk!{_c^>t\bZKZqgxu a5E)C| ) DŽNMyĩ͕pK8&5ROAnZ!j]CvjӚ08DӚd`*ӚQʪCj0:`&}#l?^ݥpw9Vh.r/WaK]DݩZ0:Y*`}I7cnEZnb}!p}QM}TNIB@8u"AYˈIUߩ2};$,%v!<[[Ӥ>S8x2ER9p3 S;2q A GZm(4my_H $Q{ʘ.ڈJԮ6)vt NUS0Mu("D5R14cv<Xb+w8`Snqq%PV۳{(VtI,0%+6ӊͧmوx|p endstream endobj 423 0 obj <> stream x\m6 A_%^n4iQN@']$77`|H G߿yX{j:U3{k7Wjku~q>ݿjCԪJV]ZfUwU'b֪޿ Fht̿TQZPBnYCJ_4u:^_Z}撺nSzg@3?%]߈JbN׽0jd}"Wn֌n~c'SO6^#cjb29Ԝq %+{xXZnkxiLxTG,Rҭ…Og N"0=`DZmwՠkG Z{0hj-Г w~ 윀ke*v kg[%A0Sд} ūkFٶ;VmwGCV5)V?Dh7CeݶW|u|f̢Qi m-|}ҭ~X>ZΜϴ/‡Sn˛;:ki2E{-!U3]g:QXa~$VӰ1-'K?Xb?MxbEY ojVЍG3GӇkw/{&^R!ىj'E4[sl/:#\x >Wd%#dY 4Yb quq5`qɚ11$NgkМH~B%%B۝]:@J릉lٍşl"ise+fp[+-7Il9R* gv`m2Aaa-ja"aΝ~Ilě\ 8G9 PP8LW8*^A=Y5 F#WA/#Aw91ˉmB`o.v1Nsvpxɧְ{!hpǎ`iш}Akv혉̩hbHP% 9per|"?edR`F0S`f9ik ]Tmi'}f'Nfz}dNdhA%Η2蒄*iڇs褀4}޿΃-=d68y7 e%QG 8S |7հ7qܷ6w x~`G|1v&o׌~F% ƯA #8~BcMn^~n$tϙ~Y Tƚܨ5jR;W}{$l4ܯ6T}Ґ=`gy|_d <DW Nw~3V~cvT}βq /캈`splqA%d1.auG7Ol_gIfgȘg11xrDkD V+cBK#!Z@|!Ƿa:fRT߁ntShR/k; K,"wО;b["1&v*NFEaVO<YkD1מX!%{\,m24dڽ~BV=/ܥ~@r틘z=.ɴ_❮\ )vC5θ?g/#%#kDM zwn=蜐 |}q:kg.ǫ9f|3mO ׋\Ag`5'=,-*CEcrȊiGѯ6_0>tڠ֭tR%Q.XܕNWJL" YZbwbXut^:Ty I{_43CR5^lC \9wmƇde#rkz Gφ8@ 4ywZg҂iȒ0x vhk!uG(tTPūի_^}Sw*fz2d {J a!` 4>9Z45/mv;J?Ke@JCP&ixȔE)B' /,qsY/t oh5> 3,~h: xV'~*S*Mf tWcaF2f> stream xkoF~>HKW.D[%G:73.ɥE{gfW&OK3\ߞ$,)eU!dZ&gYr:?$_oϾϮ` 03`e^,)deRJX*l4ArI0\!LYEnDuK""Rϐd+z~3)3O[K^*ԕ]EB0#e+!JV§v3f:YOˮs^oV(> L"RU&e.mfi',OR-o*D ٧F<.XVJD 2?B?Ĥ s7x(}a["6HqcLJ>X*S$!ZbOűŠ9Ȩx*r0wQ?vƑb3n( $qPTUlC rA7N( 檯*2iR8T@7e\G9O{xLY>v] yWBA,Ľ"IbJc>f In`Fvݸ̀*ṥcTY9hP)HѶ? B؃c+L8KͺjRc](ʲi۷憭' dUMHTw}-7J咟쒾l옔q@;4iwJɎG݌>=mdxw4 _0oyNI#XJ0k-qnF ?WpwLg1ZojG=,8/p(< WJv&/ӢGxѺql\Gm/n26ThqYY,mX)dUbT%F1Ƿl:Սԩc0ZӺ#N&STb`|]gr,~f5-&N*&;(|$WgTl-"Z邨K, SvG_cɷ7D7Ľ-Bm10rŬ5} _Zd54JhEރv@~z+C<\ ~&;v{]x^s=̐zJe $54% .}jj;sW͔eZ5Rڀel jAnRsl6*U pr‚Qi1chd@k[>a8{ҞC%>kԬlcW;aYxkJSqD9ʎ)চa{mi\yBRG.N0%% =g#ߏHiO qecY6*~B%֏ 2^@wr^_"ȱvrVJu;n(;lk!Y9HZ;惒 ">ZN=S盶%pq&}#46[cͭwߡ868wFcA[<$< *yoSM/w]}Tȉ mlwL€ӨT#d-OW |jS C&cȣ/GMhWPČBzf6<9xsKM&`3Awg{)hLMa>yQZcS6UA)@2n MwSmW65p T_Ljv n};T5xPuK[|16&^腈g][17"@X1HVtA@V&$KsRM,W90<^XB$0e=lF؝'ɚ|T7B/Z=d5 P>>f:#2^@E2`MZZp@ۙDls?5i~ ўYon}品4vNEsƉT{W #-H _3Na5Pӥ֢A 8K0m\Z4ݿC1T)D#D4ciO]=,d0k|D,{=ڪ^z(<>`w".3^[Pd ȓ'geCSbldZPH  DAt"Q ƴ #˔2((/^J=pa@V,+84-j6 bR1.[ڗM^j{&:ޖX&{{!}he͔chy5ԖZn/6 "P7 "(gGǙvi -5f $0t$gI֍{l>y`:lѨ#Yfu'82HxU&Li-(^f;}]̵л6%%R#uҙ~0];]+KSEXXpwu?'Qg$`q%lធnv2Ta7UY.ʘ:WmLʲcj W\2LF%0Vcy*o9e6SL pq=TRjVP`y/6:r!ᕵ13NI'. :5 ^O~ZezXn'?9*+Xx#.ެx:&hV; և;|wswբӄ+ ;&9z pFp#`w5+docۍ)QP~M9 ˆbOnbqq+N>GA4f<Aݧ endstream endobj 425 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 426 0 obj <> stream x[_o67 / VESKrH:uPm%]x73)R"Pd]Q}vrx ^0Vբ8ywxcZ!+]\{(Y9Ltxp U3+Y+l+nZbE+B+,nÃwh*pI4B،TʧRbJd^6HϫV g(}qTW5Ӽ89?]iak UBEP. nߣb91VU'|9NW/#-~|$[W` ˨5캭%aR`MpZ&Nԕ¼9ZDa](Pb,G-8n@KV a>ޖiðN0%4>?C[ CT2Dj#7>|U+ E!XnVYY*)<`1m|V䠣n*܅6v=Qa|8 ǡCu$fh( qb1'Ya|01U?Lsl{U|&makYwHq`h]g_cTU_ƄԿrկfu R +m̓/\uU5ᇫsdedCi~P | WXXh^o6xЏT_V(uLu]2 qNRGjZ'Y) $dX\R8r$sEXHBDɰT3T]sYx[2)@Sp0R'%N 3%fA/ tjVP2 NxKNUtj?֨;sdk/J}(v2RzDlw#}(YK lw4H-v{pȒ@9Ct fLEޟ p@?pdM~M8`a$1ev\{ w[vP[ugij6tWzcFf$,.&!G}X FpNSk#5k||6_BovL2h4)= K9mr~ъ `嶋P 3F"^+)w)_B^KaY, G0+oMcI,kkM}&%[ɏv. o7A\@GESwwW\ǚrB ZH X~{\6߸8ݼ}4o+O^X'Dl!TV&sndOw#YR{ΎDZtԌ@ Y0}3ݘ$,h6f) `Nb9}LwW>:07,ʂpt Lppe7|)ѻ1SD}~kbn\ sX'+Ial%OaO4GҰև#p Uq)fo  ɀK(eU0 endstream endobj 427 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 428 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 429 0 obj <> stream x]oFn?~lz+mC0V&^H_]OlLXҐ5Uտ&_^=}T5/~}}SqMW_>/㛧O~\W~?>(nTL|jV8)]E+=Ъm__ kibkZSWV='=틳IOW=uZ0Y>j `ZpN]MwHJ >5;m٭_ʳnu5v RDb1תRɤ a'jt'4eٮn37UPbugsqpMχ ns.&g7Fөos{/I Is EM|(P='DM$ьY{퍚^?G:p~6B^jl$ZQ+\:4rYmd^0jVB+3;57ڡ1js_JCSKmupJ_JV{p* ׈f(Z]AiAiz.+xz }@ø2`K|WħlV/JO5s51 p@e>}>@80c{vBG\!TS{8(,A mwybBoT~<qVtAw@M;h$j\xe:cUxbҷ, hHٔ  $#i)MC۪q(H7LZ[&QOgK_hIEi,"3)Fd6,(Z,8+PfuU - ծ~#unFԪÒKBX=5kR*| 3Ͳ1I7Я7"mpcqD&xQV[ o;X z} TJIddA.*N.c:S3pŷoK%|R;h.Xhêiv0Θff pbɕ&"cyut-˖ bZ-x=@ٯ:e']~; |SH:G;B;(I ,hF`z: ZO@g)jl%Vs'b1=WD܋P$#Vť1<fPcT.ہKo8KQm >у%E@ry eUK-\rbpn$h@(,TnpVFi$յθX>kbDK b3N ncĖe3Ț_֐kx@n+n;Ftb#%q'c6셒;ADm5{|(QbFocIjgⰆz_";(vѣ`)XM08LdbDaE&5Q~,lZ?nZ9,i3'Duy΋7q ~TT,.߼us$4<yT!-y(d/$ȓ-Y 0[e:_hV~肐 !&r3Gt3xÌC f48X&q V"" Z4'76 !0'CwOÍc2tO\X:B|\D$, "IʱcYQRLeK_ N\}NpSQ҄ÓGHL;/@-g{O D-! peCKgd1@+Y&Q~o @)tAbmkHa_Djmbn{-JWDD ^TE/?,61&}eɀqp-PLd c2Dk*̀&L$V g@F"d%fw٬Uf鱞]ꯂ90`q%BFHTR W<GAm9:ՅB9%#(liy^P[%zud[Dõ~Z#]/5ӴlmH!p3dq -x e ̔Si81S1I`fT& KE A rR40yO*܈L !&%UϲsodI|zޭO}Yz{qTt:=UI CʅBYQ"_0)_*Z!b]ƈ~vL]V=PfsFSH`UtE7zkؘ6BW]N|>59"U;"'VeSٲ"3w:P .B*!ZTj (wޟЫz1N sltCڦ$Ljȉ(_T:UyLjI V%i$>j oQfW2y'%$GTPWуC1!btYQe#_>>neLdc^ogǫ&ʬnLnof^na5x 9aP}0yS3SoV(7d YZ`k +ty6K`jXެ-I\{e &iaq@N pCO A.O3]`, 3WKZװ22Ef\U̸tU*iVZq>*0x %~bNZd!W; D@xW_OXhRbPwmDيHуC:SHMbgD $RQ8l mi@!xf mdSw6[798}Ǹ ΄%f|2a 2h' YiťRK/&i,YIXt!#=,`㝳m{N ^od")֚4cE*-uvn !ratnÏ| ]xѝv'e>_SHuKӜyVٳɔ}m lӪs1p#o st"\+N 1}X]_a:Nu-Tq#wII*$LRa$ *TYiťyCͧhLR:T _ g>Yep+/.a. y" Λz4|"|ZJ^&PC]vPjvPwtQT$}f"D$FbgV qÝNl7Xje&xl70岻cT8=Bתms1X6v{YFjqF+6Et o+'&U$L07|\J4+2VbHlBM%C2}.sS`pL^<lwb;(vaBLX1_f<6f= gYQ0!n?|dml0Ysv!@X>mUr[ +LJT5zâ0@E"d!b٬UNɗf' p\{\8V+*ZpDCpzިKE"dԇa]`y[JA 22;t]}oF)4Ìnӭ0I2+kt.d+پH1^_ ˖$ɨ޳4{d$F 2̉j>oA)!t?}{ >F4Bd‹?yLH s`Ģz;p`ޒ]<E`VhZvVh7]ǼTNjr{'1;lj)ڡLH{GןKts_܌ !u \ U5C?S865<&I^^`f4NU2 d&m)F4 C-MJ|O.`>ylmg5_{&HCUujq3$sR ZsZے;'MoG;Bilꁽ'<@1,%}J+2+p!`d&C|Rbΐ Tlp fUڷT4t,&.h?e-$;8}U_4x͌k< ٛjQV,2`_t EN6>dCJ&U*P,ATDtN "x@[pk.)]Gm耮J%7^vNGKm^۔=y5j<0|tv.!|me|Ȕ/wb4ef8/*zE,'bn^fLxqM6,6ř $Nׇz{ɰO-.T75_f28E> NJfpU2FAŭI\,|}LE5Igp_DELi&ȋfŴ˛yV,fK & rIƙ#RK1;wPAp/`xma7 #~U(^(vpVp]oF~fV3kd&a|R bNX d؎$l$$6tl hYHE"dAAܵ|ֲ9Y`YSWTK/7~Z/|Xx`KR `R;g  [B+D)/'1:Ȧ?u_2=s?s> stream x\s ׌>~tj7NqQ>O'YtTqX~,x\'NFt `X,7'x'#!LG痧'"?&UMZD@Et;=ɢ+dGɿ󿞞|==Y,|ZD[`32OE,ET贌LӓI!eȉh]騬Oeuyt^\@,D!".K4C3[4h-j%7;Q15*Rc|=hMbj%g6OtMT$BǻD29D(7t=eZ򆰩"C̊TJ'$BTs$muSmq.ޛWU {,de(-,c hTZ4,4Z;5@^FS-@9pk4^,d hQtVlOi4?\~O&>t*%d Xy)8H'䝙H0Gq\i3 ƥIM1?5ov A }7ٜL?p= BŎ$YDo!',@Kn@ ݯPx;5rVyXHmLkyf11ҦܠM|Ya,0'ݏWSR [f:.Z?L;X}Rį0X{.kIJu>$'0(jI˲8Á8QF鍓}fþYs`6nw,ɎK:x.+Qō1QDrWz/ ~ZY{.B4dޅSSyW%qNשrC&r}``nP(AzP(uoTBXǭh&O!#Wp!\ 1r'I4@E}bax zfJa>7B+Z[D1"ocGgFkᜤ wIKGcGR$8{'P p8X Zf\TK վ1gjM2]eV옌 :,;B2b+T`a׳ű>-"<~wL }Urw_!a& pӶfػ88 a=XS]bK'BwjJSv6jކRy/ǮȵyƯ%k?7M4r^e }9T 2ZU7}MJ Ҧhښv-WCL70WXq"O׉%Jt5ӠԔ|5v0aڬKWv V:9+AiPuƦ%fLSC l"g+(5.nx` ܶŸ@f^Gէ࿫Wd'pB*6ujf߮1(nkiS*YM(KTD`ҙJ#LPus2`ՇU[,D R2[z1i"MvwkD ;FE;gY/+nOIJ|o?pcG;s}Opl |u8o= NVHi٪' I(ҡ&rL -ݱ,!*x5fP]?*5kύ$%<=3uӿ) ˤi0g>d,O\~N޺JTgb`] /]26жڭ/}\7(}ozÆ(ey$MN\FO9qM9l{8wr_?MrB6m ei<ZвDq=-ns H RnSF5}cCT.սc|v u>QT)5;@kt}Ԡq3qICY0VX=B2jG[1?VKX}c=τuF<&cL܎D1 SxJl/7Ʊ3Lv\^?^~P1_(Cf$^yfٮě::&<Pa)SwCi+Ԯ]xoˮ*PfڇjmxhN2>O%;LnU`zV" 9k%=t/ŻVm}~١ [䐭C$|ҟ>9N&nދިuEOmeoa7A%ðIUڦEO jshߦ7yUun%j WH .g6`iW%[i ҿ6YrS`k-&'- ݩlTF-v2ҝMt2T1QTΚa ׳uQy&(7Eɴ|.J&r>rl%AY bGkdZnd}f\f=dMtO Hۿ=ɸ&P ktO2 &'Wdz=>{җ2{i< _70l}?[3,ɺdLv*?2tñ>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 432 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 433 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 434 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 435 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 436 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 437 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 438 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 439 0 obj <> stream xZKoF Q )=}E-YqdGח4fKQwwH!\,NO>eRdf$~$uxzRfoUgNO'@8pY*xVf["4dIXՂ4eDl۞<ѬH¤ iJi_dJ],:%D =#SԞYIJZlkѳa{ EBG]еm ~ MvQєDʾ o*lLLuAE+(o3)(7KJIڐFL(5KIZvj pT(*rR31t:FpJߘam*@(Y(߾q^NK"(+ ny%,+ S!6;:znoݯC; 'C"lQ q/mV`>ZWdJ mXTxb6>؃*9 .jpuq@!9åNB4I3z) hzZĘ'i.LJQsO&s-$A;~ ȥ~wρ,}QdYL@}3rLoݷ-EqVoe<#ʜ4V((33˟"p wvM쐫" s] xhzS ELv e# 7E_7 rS4UD"Wa' R xHµ2ʒNX^i.g4/9Q5ih8R$nx1-iJq/Q,'ln۵o#e8oOv 4kx:ʈj['n{w z :-E(ҬZ[l?MN-`'_X}NR$EڄQwlw39ᵧ"NFoxD~sЦKLo K-O[I~bf0Z)EY2(b|2' {r|YMQ@@̸{4JxtȪ&Eէ#C7(2!jH#)\]Nd (pw%VaC8N@eڴՄװ^B'5ؐ朚jZƗ| !e|el\c*zU*?YB^|\,)4N@ƿ7K8*T&ֵv9V+G?%G!}QA+퇇5΢il%"*Wkp$]٢jPYEj/R4nDERhQ+">x#Sqv9?6Pfھi~L\B}KNXY0W\ʠg1yJu /M#&[7I XVz~CeّM/?|RV\a}Ln΀)EPuEd)p]6CfU~4n$%Un17.n0l 5DU;6hĬIr9quqY>G} D*/[ z;Q8V$X ,XcGpO}wdI 9+.h_Cb73pt* tQUJg06HW/~=Qh&\CI8ž#HI!4a؅*9SyzJ7M'ַl399&}LMׅCcwz4(_c#չ`y|Z] ƝuxmPƍ-OLww^_>:[遱F78G %}63\9&ίRK >cEtG 9s 15iKrR+ןk~qxqx@{8|0?j/{pƒ:_QNهI+tb?]kF 뷅9bnX t._p:H29VII#5 x+}[$zg3z˸9:w\^ȥ4/H%?PWw*gM8Oj3 s}+aFidEO/77ǟ;OipbK'͉kB܎G i\2R^Nz55xaH +|U>U6Y)1i endstream endobj 440 0 obj <> stream xZKsFJGe1Oړɦ%3R@Q-d>~v̀3 9\E__N}Tg%YGҬΦ/@:{ܜ#jܯonG6 z~v L/KiQ1UdjŚ ftnV$hA""MSʨ>t-SH/Xe<QlR"oZ'}aհP^{Jqg#SCɚiAͿ)t|.L\gbu1lQpo b_v?6yR7QJڥdM;5!tR#^ V|%PtQ-"Hw[.u([٘ 4lѶXۘVǴ&\LD~sΧŤίTc"~pHm|ְnB1\`;NH,=7Δޞ׭aݺIHF{ i=琦x(Dxhy䈉G]O*S&bCtrA'Rs>H`L 4U/uح;# -.9TMS,CK]GC?Js}茊;>E䌾a>4oUOvɃvyolˆJT爮<s?`nj>]e&/ Jo ' H `ڦ`QO74Q:+Kаi])>_@sxbp&{LCB7Bnnay@QATvu9\cAaUd䕂ah 6Ҷ3E'ү_WLW9dE/VP;{jy w.(cmX&KsV5#eë[ckd P˂VwbV'}`c5Uajۮv(x5tI瞈vҥ/TSqOf8M}]֓ 5;v]1蔞я47RQmro.N(xmRxdJi^gm3A %Ũ)  ] d"[`G.UYq99[Z-ʒ5*96~kLS5íQSIwno%n}dNxwrrzQ4 '=_[ .k> jeKox{\ӂ9 x-6K{_C18})DEΕѺlѩX)YfrDC? `#&!hEWI66;["5@t:q-%$=}Qmk51EDjg|Ӛ6<5_ W(ny8jHezc4v[aqy+&=xXD W ɹsnܝ2w!t>M=dS<6ldT̘]/ NLJm#Y4Gx`*sL˘$Ik%HDK"}Msf|DuuY(# $l ӻ>++1BX ّx\uv {7Y q/–:Am;J8ݼgC7+u48Eƫa /'d/2bW-Do+gkc_bx}QIgxkyJLdb|}Jݢpɱ%vp0_[Ml\>;sJЌ @Ȧ Ŵs+gM$ 3#V()RBvBB{]/8+{ʚr҂?[>`}ʼu 6UxBm>a25<͞@UuQԱ,p=G~_¼`d|d|XW/(]`ImTUwHT ^vgP`f¶4`+E2 ?1J0N};,uZDVW1Pw'*W]LĄ*w8j8(NJqN;ߢ}W,76#]ށbwAa$˹V7Ӓ7d_|o'TkV[J.g.zk2/2[r(#ָړGHU>=*20wv+{=ICrb!iz p}C˯9mѰ]ndóYIAIv\ k-,yAH'Nivo+ծ_z/vR#ç <^8<˳OnmM3u> stream x[Ks6JGR AP7{7N#G[{0[֌2Vv7 \{Pj24@u7zs~|m0"9>>bID˜ONdNn.$WroA/GgАsPBg%XnrTKh +s%H)I+ ?OU+|)%boUH.re^)Ze0}2+29_\Zy+9ʫBC v Iis)y.ҿd2]T$Ll&M6|1n3l_?= ,gtdbl[A0g\cLEM"Icab_1b\=W[ BmDos]/p)eG fC5&]D5,]Hx@549K`y0@(taI%=Kb PPUJةmv" (g7[iQ`8RH5Z=.1@R\O%n Vl5K3%Dxnu&ne5W!kA(C h㩢ic2V/Fe(Q\EVo_,Lo"#^SD:硺0%9 DؠJ]vsp99xi6cx7t'ITKih/DkYudN [j3DڲMWm{uTƸ7P|b\Ƶ=[{) i۽*K0-͛+%F)K~ 1ےm4yqGoX3BC;4o;*6Մ R mH]^ܠ7r!`nF]fythB_>L/_zczI%PF= X q;+o KtrRqcHЍS oIiUliDIzf&|L (1W-њԐ7nQd,`)]Yob <,& &7-o\H`e;@,ɒdVBp| dK0Nc1NE}=wf<^MU,zz,x{a <-[Ut*Ɨ~WO'NN @ ALavT27T`_Y"|/򶶏=LZiJ gbbH尓p>i,ZF{3{ǀ4ѼlyX;툒$m_𑸘jI%y4j |(ү"GMwNCEmYoR=Wδ¯1̹qD묓Z&]n(gGaM`PkW^әN'X4O]#[lHV{ZI.R]7fz@3Yع ͚a JvNA uɤ}+m60H@ JA0GMܱVlz! 5_zք|ŏu%ǿw# >zȞ4N#˴j4@:U,9$V*11p0ӡ#ܮ2q?i"z'6b=7g뼧ʲFe= LQt QxmǶPd^xـhhь!lG]]C`VK⢷<}ȡ$+"O»Qz|0;=~s_R mf|X⑒+/N~\$ =ZċqaC,z1,`pǿ]erX' endstream endobj 442 0 obj <> stream x\Yܶ~ߪ,?ͤ44qp$Wv"֕u*5;Õ6A$Hm=Jqe4C4n///> ci& dKJ2xTH^-wˋ,y///n?./>\^TTe9|%VHYR,eRʴJOsˋQW$hD4eADD%*r%{qB Ji4JPd+yrY7l,P^P %3z l Q11(S|9`7/j<,EsH|qZ\zdrq\2[kdB7SRJ+9 T_//U $*e`=|Ca*eGx\f`U0_b/@8S)/@M,K lrx#܃h밬NmnGM_Ɋg2MJh{18?8x}X2@um#HkX/0[IjS= 4=>X^yw(%c pEܼ\]M+|n$hk$Ivs!F"(x֋[nA{p|?pVa}>mCd3@*JLZoьc1{Ćb&Zi?rS::LT) y tű<bmŽebxO@Se<)nooJLkg0rț*Sp8*#֪(fJ?ܦiY&h*UHv3Q>HE9?ڮhmޢ%Abp&bR ¤_aDΡSS`M7l mʧRXR)T vb'Qh^ nszDSF|2707\U c!g'Xg$1ʊGc *G<;%lóN8tHJ ?-bۑ|H ddj8J ~{U,SbXiÇq/P.UTubihi42pv}(!G ^ƒ'/9"{IS0KJ4N788VǛu+4`@RrfIcv49 | A.]Ct#$gY >y7e˾2>Χ` XFNcU]7UU9"ChUV%&ls=t|?UWmHZx^)"iixA>lnNxdՀWf;aYx @ wu>  ,+vBMG:z5λm;Qt޲P }B9WGv]s^/6e帋xBXhw#$69O%(~&v^7A;7yCҮ3YԮ9PKHCVi վ2>6;b XJOK1%E j0 >P W?]tǫ,V)60#` wO"uN'H,c}"5RUUTh5稬B74UQI.mzGw)U3YC%~u2Y< l[mVkvg < tWʾ$4?o0~RnFY{"mAL!w *li ͖V1wY1fg)k+7 /K#_ނ|B?#ר/Ad򟳜< ak#\{X8گO,5`K{%2PuH ofC#kX^Yꎿ. U֯->4?bC* um֧T*9RVW1#3bDZ~|I#+Ҕ9cXc쳲άni *X(rEe/A6d^jy)FTxtrjJuPI}y\ PH32,إL%gAT|J ;5q %zO˗SPeJ{[Is_wsJpSyQvuŧ)p'8]t MO+@i6#oufh-eL/lU"t_o$ ~mq \2'$}xE!SW~.,)Z@Ѻ}ik4W;Td+Io }Qok2jV2-3̴jCڷ9bIM*2Va؅UG}s)dnh7(b g`O+_R]XܹE6?FX[Mb5ѧ6C/d2& <=@0JjhMYfyeNxu:s >}3NdUJp&`F_؂ >yQC JH.R?d7X e gẍ"XaeK% +c!uu&=OQ5s@i!OɈde"k8=~g<'sxz tt";o.KA[Xz迭o~ʹ!'m5)4W9nuB endstream endobj 443 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 444 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 445 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 446 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 447 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 448 0 obj <> stream x[ݓܶ xU")}S;cDZ}n;sn|Mnُ__$Rvd[ OxXQe%DzF ~,Ⱦ~d2ŏ.YSvS+h(*`QRg-Xje, d(ڌBl>?y@]K45dG|*%dO.,d% M ϖeQgWf%TQLJ ʌ:ff!Xpf!<*6&BJ_ZW\lbZXeXmr&MۜU?ݜ*dmъPC< TU`Qm#y tZ`]X63c2hEQ)E AT5^6"S"@/PZxq&qdYAV3(fn8IӬusYfT(}w?l׋KhmLդHg8Yڪ,d_9N-0M7܉Ȋu6RR)T hvb1$Qh^ AeO,C_mW6L..ex 6q.ÿog/_Vcմ T tZjz[tc4 ;"x:Lj? ~)_>0gO!cuț4[:/'0a}D lf]Pl'̟ISGh{k3>3~ 3:>$)kjbIlӶy$i&PcCg_:?<^z8 0Lz QคY5ʒiTDP]r9J/&X^02vb֝oI! j4# >i ,:4˲$g r_̲?No*,YXLwģI{0^0TqQI!e-qV!ĴSv5 J6j`D Yc-[UcƟC\\!eVMouXTű+,32$J^n4Zk I-QǑmn}׸֨ *5͇ [gwZ!;Э܋7ݶ͚ܡ_dw8Q5.Wc遲ԗ\R0 (Y4Yì#rIVkgki5 l\APj||Z;=7PrA@RU!Uq{㕵{T$yF{Yܨ{ ;(}w/A5%B/0R[ >RB0Jf5.g@C$RCyYuZo89 Vc/F}XMǁc.6ZfHӓ%QY&Q"eѨvXVy$Jڪ3GPxe`=мjH %.L;3~8Lx%p W%6o;OV^\I@l+M dBC0Tƕ-dEIU39}րWJ_]* c u4bWg0*/fÕIS]w_)^{{ֶk8f6% -o@qEi E{D:zX2]J2ڞÐxuE8ΡE5i] :^_h: 4;<ڲM:{U. .%sڥ*K #8IӜ| ?ծ7OvI4?ٮQ7'?ޫj'ABbkTuu&O22i=l?M"#r8D/[9Wh?)E{rDWqIra5>yXt;aua}xJhSΚBǢüFİ|GeCW Nh)TLf=F9k1쾡'I7)> TR%f 4]5S5LלaDp/SέarAg0`ִD>Nh.>bHD|QSfU4UY0X*WdzTFncNSy:h,Yt(ͼ&*`Nmra δgT>HJEpaH_{Fl!Η@j VKmɣ x8&#yu."%hG]K?ɳAp4"8˲ ]Hѿ>Pֺ5_cG;EMe0 v^i`5Wu&YXtf;:u[5u5.ؑA\c5~D9s1ե?LcTƽz"t7PG[C=zRjAb!.-noq {K|=yjґ+O1Ě Hĺdp0D>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 450 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 451 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 452 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 453 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 454 0 obj <> stream x[s8OU?>mO|.lAa٪ÐZId[%dob2ZVw?~.NO~x&2YO'<+/j8O'yV|.~>=y <=yLLK*]2QgbM3:۵'T$hA""yw/TfHeԘE/)2$=G9JJVZdWy vnk)êBE+j_@)n@Sb(Y3r.Džη_ owY2MRX|)b_v~'9V(֨z)YS+?"*kNUjd 3u%|`J +{ Y#"wÀޥɸ(anڼˊL)sa n a1DK$lQ*5nL(U|BYa1C6^qMc& Ѩ"MZGn<S4[SKy'6TɌq3]tST&b`߯n>Z**Xtᨯ1iq Dvo3SMJ(UTZQbJ WZ%iFR኷Qhj} wiDhIo)n߯ η[ܨտ788 =>]LĬWdwazW[Z\k |7o:͕5u[2 {]1]L_OL)^vWZ[mj@ 6ʹ!BdL7e/}:EAn9>kTCSDmI/#꜇bK,&q7(?d|p_^\8sj%Ž@Ҙ`O12f j8uX.;{g[Pὃ돀PHKLf*R&Tr S2hљkz`7S1xcvsV3iҸ]ߩB͏8Úذ7/`a|T᪦gco˒,UiWۑDj_W|Zx*'ST(Eif}(PVݤUC55z0nŴSl/X3WcWn__])(|^%*7$o('^:1|kƞ L/A2w@Jc$ ^׻d)=Y*>y藣'ܝW G*.ffwqRPT" S-QDpGB<X'v⃒81ǞAèwqO\{""pK{ $V y66!">xFG7M3Q``˝ʳ T $v>J#9 Q͋fDEzR( QBQLےžOY2YEE~<&i0*gδ&)h)ny 7*!eX .fc!EnEMN|{eI.8^(jV]xx e7oO-id 2r? Ju,ktgɝuև&$g)?_GlZnĔNUrYu/(ϧ| tns M?lM*rR`މ^S91gX*6SQWhhCty6C8V1Dai}T$If*u7p͌[;6ř<֗j٥1~w°d55Ge ,t괌_Sz/5G0?Ρ T&,ڍ'h0(P@[A~5K56<1ڃD@[+/^mU7cf!B{ P!JT& Zy(,DX*f0xg9_v0aU _w:dok U/'g];bz㗂W {9G[C6 ߩskl,`m,Ǫ4!m.-a«2B{7;Hp/cg_>hcl xA&SQt;^tOʄ\.M75^qx,qW$-}sz\6"DJ endstream endobj 455 0 obj <> stream xZߏ6~_`=JËФͥ4.ރck7 dPDɔM!"p8q>_^<})2YJdzJ3_YY./xg./~\^\0*mAZ xfuDU ft//("4H2%!lIQCx-S(/5d=G9ZJVJdܕ\=n-e=T쨫_-JVLt`7 oY13|[dX\廂c7͹FiSdR;ő8*+-5ᆙ*UB1\-iݤK)?(#ӎHͪX9pR3\.1HMb vHtJ@Z `l;05LV}d(K~H-48WvΌIyH4%Fv|dA'kpZ^hͧqmpQ%3fX"v46_ OX5poYQ; b5mmQ ja3/d=Lg$Z$PG8,lz' M&.tѧ..&8Ew,pz*h }5/J;w' <(uN۶P ۣH }[pJl i[qٸx+)np>0\cwf+fm,#xA1SgLq;ʄ6۫"m;|Mr!h/uJ3Xb˵Ě.fbYXP"R3V**31>nk[?CMP9O߾ +|}u|R?S1B¢5Rn~2а? Uֳ8_]Q+>V?ԏgmbSO={.]]Po;kG*!{7RIdmc֟kJ:؛xI)ZM55H\ >5Np,Gd8TBpƧ[< d懢%yU%tlYU,Xc>/+EK+4/fU 뒷 f$gˀe fJ#pt0 'Sڕ v$|j #ȁ,5vj|i׿zq/_@WO09PHOx1W~8^'1יc/ȶgIDDlӉ8!2ND<ҝHJG]z8˩7_}v6"=׺ zTv =JTo^+잪H|yB¤iZ/MJSoBBQ<}๠,n{6}*WLPk>Q_8INN0Qi6`L D!mx8*[ö2o.,mWh/=%ЎmKRˁ#Xi"I$҆NqPx#+79@"Oǔtb715 MBBN4i |jYB#Hԓ,egG4i*q?9>#8m%K[؀+46]?zBd`jWHyGuw:E`#u>0H.Nl}l\OF b* HEZtL?Rvݏ?۪Dq/d6ˣH+`@Yti+rfA S endstream endobj 456 0 obj <> stream x\s׌LL)ve(KE*$U}wT˳㣯_󄱼K ǒR >2RervdX&GEUfiOt|-0rrUhk$K60MqĨ"eRʼJϵJ6/i*pE4B#MiherTڧҲKmG KѴ`(}rR+yrvrMRNP٬Y@JV%rc !E+A2?f:]oDDDUdK/xΘC7g XWG}$l V^lU,8{;J>o7섧Ljtsj{w7"]m)%Dڪۥ<lhmUe)}0dUm#}HWgu>%*->n-.WY  ϲ2Zf*DNjy.jl~6ApHA$oF8|A&K\7ǏpSv\^g l!;1,X y ZONbs0%B$/@[mw`@|Z m+[38ByqrPrl_qk0nwhf k]o Js_[&ӿ#,Fk*YW |d" BE/2:[-3JyUJp!%7 xru˄ 8+}yD7TV8+/zBux|zw&!c=hpTIU<-9,i6>Nnq]kӸf~tϐlt?2~Z R$ w{`=;=pR[ 1Lpnei44\(s|SU})Rh(T qbO ќAUUءr3t*ƾ65:߁ߟ߿{ EJX 97PEEAle |3@*n_<+i O;7bY<,,:QXAY Kr&aWSc*6*}RvcJE 2dERyCZQt%WQeM-W-J:–"PVuoC63}ە n.hj]\Su2S} $]m;(~eK%hĊ]pkNtkA /C]΢NqάxBRn㪯>uպ=j~8z.voZeJuoڞ>m׽-֫mkۍfC!fA5yu>BOt,PZbQ<>XܝQrوl(koa-r;iuhݺyۭ6P^6hkp-w DE3[B?>֧͛֩e:jR!<6 wϑY=G p% &hON|x~XQ|]f|W?2INzxXϑ``:|ےD>ui2,jdax<3HxΦ&cCA;5ґ1HbI;!r0Ŏ+E믚HʊcQE^\֛MoYxIfޱ,^TuiGkXz GC$OJ%~`"P6\|uϢT-IA(eW K@NrA,H J-U?OoO% 5дrbǵu;v vQ=Du#PP7*׿WvCCv/`9e (8Hz cM@g,}eOIJu-H;> [*Ltƻؾ2FKkj(w3߻?/1r n{Be&71+λuܚSE.zy %~|rw/#$Vvxwr rםb_ U۝R5reG<<7 ҜJwkDU3%=^ ~҉mUěPk4?տq@l9HOd"g /^\-j&ø˨P}XqmcUYff# >2ͱ^$C=Ƌ^S )m>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 458 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 459 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 460 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 461 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 462 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 463 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 464 0 obj <> stream x[s6(v" $s4iԝ{YXr$yx RN/O$,o/Ώ cY.#K*12[ {S\펏䊾$I?$9>z ?ACƁW&sK-tEyVTI%:aEd]]~G]DT%߾K h8o#Yh> Pdg9|1ԅ7/K*TԙB0pvE<*6$U&/l2TM6$>6|21٥M.)|ܤ[BIVgMփMV0D˳y,Ù|L*q$y*͈&sq9БnP+kf.${O2*$Ծ4J[ev2Yl֤yF}ܑN[&7Zp~ȸ 8Od~<>0mF d~nDo( ~YlXE(qLD UUS`eOO%Ϙ V-(s1QUZ2r'5BztG$yUhY<6Gד[BfJ"DY ьX^VLU (msXn2p\i!?dn"䁿T*`YhpGuq$K esoIfT-cf||juoGmcz5>X3+5 M$& 'zd-l'0bQ`]Tvش ɋL9f) vb%aiκf1lcעABQNq=8K8O~|62M>|epE."i Uc`bBr+^%%+t唈,wz5_&y(0AU(hQ~1bL~UCyV\Yܠ0}4eylDI j 4wm I,bF$?b Uh@3ȕ\w| 2=@dak#FznMEf?DcR;pGwf+d_7گExVJ><E30&C-aF w(v55IpaX^]=BAW7X-^3#S3]ysN8/ۢA@@z/4G@;@ 4oH)'8ˌɎ,rK-Q qR$v[̨swq>@c LhZ$Z)z1AXX#*]s+ X2?ŷ!,/R3,YZw#$ZOX JQ ϨͥT⢰KT&;ʙ(\[g$9f#eY3Yw',A)_l/Ln#KTAXy9u Y3Λtkw/DZoƣ0pj, ZȘs'ß T|37ƒIZ nl|bU9^Qm^x==sB1'O-AWCs>`%+NhF4.7̞fcmZ8ͭq.~V_|}VPQ L\&7. z:œ`[/ܾL^C-'<Y hB}bI~?=mⷉDޤ=pJ/#VΔי ?)v^(ٓp N?s%?s% s^C{P`)\ ˧0߁?&C@XgԢ6Y+U9YqBwPeg8ع:_FG9> _? ,ʱ.گS5OYe:w_ ]W0P4a:ۀ}E8h Pe /hK16T9| `A6EA!1|@2fkHF3 s>DDaQmX\'\}c85n)[zrh8i((DʬR!펆{Pf|~%5h'73W7U~Y c1/Z m䣘狮:ќw)nXy=(D+#$1P0I%~anO<7hsc&6lr{݆уJIGCŁ9ae7x2T^ ~PĤh}1Lsܖ<\ 5(5c endstream endobj 465 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 466 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 467 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 468 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 469 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 470 0 obj <> stream xZs6>K|S}wNɵN>(q[$v %9dF],~ bq~%/jY,nXQ?V4bHU5^mY]/:?{7+ߋg]RO#Y1M 7E#+[0^iUlg7_(pE">/J a8.?BdO@1[aLm5j)0B $B_h_n6rgK 'a%lSE NM8-8I~ :`f> UH3 y9abee+01߯ۯ>Q?P>"u:%U%è /-v%Cenޏe|*xhvLG9ǓjPj|GCPA]z%B޷.ҹΨeUvg̻,dŽH:`qBn 7mSzuvE:*]`7ԡ\}j=֕m$ꚁF -4+L@ =<ˋ V&+V|TVT>'|ock’x >hT8P:d%sTmhjYY%G0dU Ct>,=sdD;&_X4I!X:G2, L2dM9!.aA'[p(+# d` ҸIŐnF]cwt(H\|oft+ h}9q,o.,WZ֘L{gM]<9. ?k*km?f z:C 6u:z&yg"uv(1 +xI<󖠁NH40v]9fNɖxV(ܯ?Ј49 v"jO1t1I:K*mRObJ2M3 B¬@sE<[>ȸ."&W383i絘r ?v&2қv|9 ̈^Ba"pj~ Hct_cqpdZPM)W7w-=\J]mPf['s{|2vQx!lʻyk=!l,PC۞[ԇ/<\z?ǖ{q9YOC.*UtD٥ REa#YqccoqävJPhmoul{3lp߼i{›"W\\i5 Qh7R'P'-k?oOt-vg :9ى7/ύyzwWyYDG?@R^6 kCZ?Kuu۳DuNOmv=O 7+ h*@/?/gx,^WHK/i(Ӿ. ߢrc?YP{{ySU~B_F &duZ6wxC>. 鿦9~4x?d&|$P}DLRӧK8}ַd}L 7c<‡CŵwULbg3csX1)3X6(t ]Zgjc@/ޒ`x`硵AWH[?r`ӾL~#ǹk^o(ȀnI}>eD!I0B fSGDK/0'ޮБKLS 5sdH>Źif_BC$N*sҥ(uEE!=#`?i&.k2m:@\nm8@zPQk2S(E=c9jlx;!w5_7 5].phIqL0r+j74dy)! endstream endobj 471 0 obj <> stream xZYoF~7G26ܛLnZihYڢ+Z;3%@s~s*'G/OE9Urq}|ēЌ+4+kKզO(+G3@b`%{ f:ɸIwXC+WSQ׬HN#ig::Ez}7ywȣJ 1coq&TRI۬L(fMgOb *jB^w̧W!A-lu=lddc58egf/gH&2QC=?XSV?Da ǽž!"LK!,T9n pAEGȹu#@LΑ fYSd˲sU39F'9oSk>3Ѹ@OQz熸5pw3V޶(H{i-BR uUՐfH8i#Pp4i.D3?"z 1Hw ޺s)^[| [rI߾{ T(G:B1agH\sf6F9% |.Qb]=H\2~?2g endstream endobj 472 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 473 0 obj <>/F 4/Dest[ 134 0 R/XYZ 82 721 0] >> endobj 474 0 obj <> stream xksܶghAm:c;؊|c.4}wbkr;ٜ7 _I"PEV6n9Oy>g[y}˭ U)DOb֝y]a^%B.0^$0=ye q2@{Cz6mӢȚiQkX4!ņS~х/nTTa] #FAYTé[a; !%ү`Ւp$H媪:J2x2&["K z\2d''|KC\;V=7*[dNڰM Ih`g-7:3myx ncFM:q,*x.mitmXRI7SBǩj] SN'&f4@;+AnA'?I dWZv1ʔ.yQ@TUgX4r ^ot=/P@5deeh=']X:K(053dd稍+q:Q/q?%:?BKlksZP_YKڢ)YS.C{a궻 4EQC`O<1D3]ujȚr.RVTq( Yރg)y3GOY/׏NA&>=TZ`ØTalvgf]w&6Hj\oon Bg+Uq ߿ՂbVm!ni҆A!`u Bb2]Qh ʂXy&AփۀunIn㝉㯅^b"B O4‰2]b[5+;"n)N8rR aIܑNf=8J0ր] 8J,#XAV^kX_i9 F|6_Jk{ t:v? 7f qD5/8f?*k07u|HY/6ӑ3_(;ֆ?e]w8AJ5TWpg<(M q=L0oڀw<lE>+i= B{b!W[L#1v nYhJ**}h,K] טwLeOZ,թHݞտ :xҙf4{Үx_"/6b8A}ߋoB7 MoIET WQ;k; |4 ri"57zю+O7Nx,S\ot;J(N}/hX<|yt+:Vjjy-)+]<žBfC}*'Ot2r븑sE B 2r%9,q4h —AƪxțܺJ:v,eֱZBy^ӃAךBY}|+ -kr].{VFwrN%l-[O^fxإo=?I|NJ&\I;+UWHG504;n[n=Jà-sK:.x.:*e#,WFA}KlkIr9laCNcQXL8[[vV?v")2N8hXG+}/4ݕsL r,*Wó%tOAO@{8>Π(+}X jx]S0& Vg8ƴZkzmh/)f) n tm}h;ZtŹkT?􈘦ղBĆk(hd#aWåp$}qꚘs>odc\ei]7zSI6'^P2)8tBm]#3?׿$yQEih_*ؽf:;0KU2?tFN1t 9yvAT"tۏVU^i[1a䪺,d57.pҢl`l|`}sW^2"da~C} qa?jbFguʃ-X xaP5>4pT5Yum= (c[$n8-ão(J*TǩN5>KT.C^2V:&R+jן/t;q6Ɣ;OX5UJh :CYeuۅnS}cCO}{I.i1^A`EXsB= du00 endstream endobj 475 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 476 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 477 0 obj <> stream xrܸ*O)vֻr%~(hD=[q>A$Ɩ8G n9*U<9^nvBFu' k;@J%㿇bdH&0;Id2n߯W7Ho3 T";i8U'%F:1c~y]IЙO c4+eps]%L2*xrQ= 9(z=,pwK`˝N7nC*vb4P8mk%\ZWL$*+ki#-F9k 9,D.9w8R[ %8ʺrƀB7[Q`(۱0Jc|N)1G4ݟBw1a]}Fo_B:c(NܱP X3=w$v v tpḦL؅Y1SߏUʻc^s61nbB Y``,do+ӗ2]]dG%'nd.IfLؘy28(yh (呇c`&F"PygwɓɔUtsQq[m Сu)RM24Fr.#PKf* u1z$#&8AmgLZ :x$p& ʻZ!:h=9LkϐN x;rǒJzLk? !kqDvuǷQuH+Gdt?v[L'f=d_-kM8UXVI7xD JlEVpcj3>MZKp 'CM6p ֲ`"u躂}ː߲jk2ŵa 3wN e'vruFy4[>2N/]c4pXG5pB8=ȝI<#u8 Z'U ۬rF"m ˁW qR)9"qu^ >kP5u7mг^lL/6FB效uHt9/_7L۵B/7_QpCvύ-dswsM5y!9 b^ȅC3'OkK\ gDVOg`̕2<~80sҹ3Th[i4aFϐݗ]g3L\٫@1lRiɪL6؋7y-hG@/gה91.0VSE^z2\ƕvv\7Zujrn 6 iKl)܀5hglt䷺v |9SH,1ڮN[o^B%%/8Y,{b(8ECgX/ZԮnʳ0y 10%D* MjbB1yۺS̹M$󓁜R56zQ_Hך+pwcWܳ޽3Ϊ)+ 4úE\CF*Ӌ=p"/{h./tXE3u}uCyu8sc[i^^#G-_&]Gq ..mL!/F'@W;jw;LÎy65ҩ,j]8[98~p.صP UΑJq(?FgK6׉I{̺YB@-c{4`Xx A酨U^Oy(\=&DŜ= k"2K`r^?ooOO0%ő3H HwBsl^7Q{6oD ` ۢxM;stʹc9,ȶ[nQqcU$ 11/64C4;YLb1scܙIĦjji5D*i5flj$釗(΄@MP,=8dT$QWDy]c6Hc~ƖICiYvːo26ec,{RlQL`e.2a;\4MsxBz|X0P c LoC t(~TMQ˜|)\[,~&=qCX:Z3!UUg2+riUo;8K*z0b()8sf5 E %aK-k1٧G vjg7tQaCkyuFcy }/Xj%3jNE:`$\?Z@D^X>2jƏ1xB-фڌ553/=]<QOp UGP (P pjY@fμ1sh,xF%d;s=3s~3gLFΨa(ŏ<2sc׌}CciusP_[\US  _݊F؂g/+J endstream endobj 478 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 479 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 480 0 obj <>/F 4/Dest[ 147 0 R/XYZ 82 721 0] >> endobj 481 0 obj <>/F 4/Dest[ 151 0 R/XYZ 82 198 0] >> endobj 482 0 obj <> stream xi~3e2G-N( ׻%nDɁ9)QҺ0^]]g_$3!Rg7wϟ"kL!`֦h5,&0>Vf諵_??.nkgoaP0e?k--l3.DVM̈́,*m^V\" QijZDk2ۄUUer҅+G Ϯˢn(yeg骨2;-Z ˗d'h8W?#ԕ*$wߖ|ʴߖe^]k_6tiW +ڎ;+U0T2R=D[#cbbf,&qsymUޏBP9||g&&BJXZ緟w0ُٰpH~+\C KzgЏI1T τ73X )$@U+UKp28+ݐH:P[0V2M6GA#*3P( 2>b?g*-  VtuB%ټX\|}B)=nY-yv0?.L>lp⺱0He~rGUU_; :4&H,Z8na%*3j}DrX~u0爄O+*T'EA(!)mJ֙+M.hZEqP!Bv?MFv'?f]xWslMeMt6=c/ȔHL),+p*ٵZqŒWQ<01T-Go >?GsC0má*vP@Mwahs˕{pԐOцlO*!:xG<.L 5K_:+uYq4Q nLc2Qo (z*\9xA BX뎭rnoi 1{5p'4Ch-oi>f?;SyO7[[[&PgI|XgHIuD*J6EӿjäX7,?%2/(OҴm{U'rqR+O'0 >d{I 'p$pn`nC_dT;󪜴CQ~꓿uiokއ"ܺs4i'sikΝ3?*[6Dk]W|mb{m&5$E#A_eԽvQu6N :+샻\RoȪӽ!݅ jgf[Sb^~=HFoD%N&.b6O}o|Uz"s)b\G'o|˧Y[#s+̘mj0ϻQ0fbn"#(Rt@fR5YEfgSu҉F'iHJ^Ͳ[[vx$yr?.,9ɶ @S/~Sp/?F6N{ ~P`!¡' endstream endobj 483 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 484 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 485 0 obj <> stream x]s۸3|;& ig۹k;!,3gb)ܥAQH]v^򌱢3DzF ^BMvy`~mY_zu~f.v~~:?{ E Y*v0M`Y-˂7Y# 1^(wT`*0MM@MB(%`O/JyQ+Ze0>[E],th UbAvPYKv ?#*T$'eUIYR7o.DS Es[]HRJ] 7k/< -Y,Y, ͌nB7XU7|Y-{xm.,_Շ\-m^-r*:$s9,հBMCl|!sB ]HP*T \yN$C "d9.(A3/y8O$ %@ fz{u5Yp ̮ a?i vج7ŗlҷPn~ro@SF4^\jkqj VzEj&㿪$~2Vaq,DCeT mѫEġ/;=`z]Aǰ<>gnWvEq>9cfçgR.~YOrq^@|H@Uc/뭷@ݧh>XHnREfW+,PhW ܕ {|<).+ q>0څE?ll82bzoO"wrȰ ( oK&a8,*oX Z``_fbxx8eyW`ֽ̡I-qP/u]`1_PM]K?y#q|JnwW.e%+xu``mPi*RHg~TXM=0@U6IRHC[& <غSj쇓Ȉ6ෳG  4vY^sM4Ft yHb'^`FpQ0VbnUl0LI%>V]i;._Ұu, 'ͧ|,=­"UY ލ3`/vA*EtEJ6UA: nw$i:'%M˵V KEk*Ƒ `ew!=չCX6%JwBI{Q;34y/k;!F|qxylYec!ͮfٱ&TbM3Iۻ8vcpT;^PǜOShtj+~t]Ì(mw4/ɴ:7h87;z/Ɯɜ"aC%^5ޔ\ze؃Hc*00&Eu Zߍzfk <a>O5|а:E u ZoY(S`Jufem G4k{[߮>mZoQ߄;[l$[bXF!=.Sdjܭ{ds3GJߐ~&V%Œev_"a%MVqyeplT}A 0A{Zɽ޻_[uqn Q9Z ط.T=aKϨ M ʮ-& |Eʘc>2q2pcHIdP>pVyЕ ZCMa&tFhD&} 0ܣ>ܵ{cm WNϜmc%yWQI2e8yKxAEU$1l! HtI =fҩP'#aA?>,9<2\B/asLOD7#tu@>\ѫKt8qlMrk b[KM5\L]>L>UBxS86754GNtĝߦ+<  2uRp{ dU+$yvˡH KBOi$l}̤W鷇=z"F=>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 487 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 488 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 489 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 490 0 obj <> stream x\_s׌y>CLʝ$N'v%5$7]wpJLԳZ1;=ۭOO>B]IPI> yXX)u[t<§7Wwۢo? 57 >ǂ9_C.`a?AڴfYD[hFUO/@oPB-*hYdJv2? S4kvN'U`18vt%dEV(w֠;4ucwKnW"ad\:e8J{ުoUHdU;xHj:źuM_ $Z!-&QŻAm^GVk!IݺY?5VGtE aQu:H $m6I=еv24 mo@s*Ҥ S m'qSYʹC#PLqSɯnvͥÄ>o8=VY~Wm7^lY%g -p༷Zʅ*xK/S>$P9*,:E;o֘bv>ôeX< WrM= !>kZ୓L8|5=%Hq=It7mلv5SCSiKٌ-|$b/0s:sl $ݎo|[SSGOCZ22pT`7G8 l¦9 }@X U: DPՔUl%Ssq`|ߎ g@U`_D9swJwhKv9Wb?m 3ɸC"Y Ac/JX|w4ߏm^qƃňl[Zם_@Wqç=*'*T}-]?.8ʎM%g''ܥ~U({/]GiکXLND?˳o2ا{꺳oQc$1#U3ҖxUU8N$  AmF"߂ѧ} FO#,u(|4䢯F@UJJ_UExI\Bv8Lev]nGQKJ)LKsW.xZԣ% #ie4bh~cᓩ*F4~{x|dbKAݛTEh9WMmw~o!-(Z to.~[S$_>jz01j:.5 8ce}ƫ@87΢iDdGP$P-46/C:n"qp Vx^!A 羬!=N)Yt/۰^! Mo;] *<'& g-7062ЫQZԺHHr% }iEd/dx_x)@D}Nr tM;'$y!)!xq[?0 DB*?6_a 0aX pⓡ30ӡ3QЙo t t&Bg3ܿt&f:t&b; : G@gaL1MLz| Al`_cp6fTL> uDS`7,rƒk}6WU endstream endobj 491 0 obj <> endobj 492 0 obj [ 493 0 R] endobj 493 0 obj <> endobj 494 0 obj <> endobj 495 0 obj <> endobj 496 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 497 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 498 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 499 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 500 0 obj <> stream x[monaU)=7J3UȽ@sθeqx7GWye)a^#P"I/4Q1>o71w-Kfw幚/K5s={<f=I-lm~V֎]YҺk~.pTg(神}jsj&hX7䀪:瀼fRMKU ]6do~pZ7t J1(G0P㛀0p鈉T)Oi/Vdj8nxlfPKj~cy.Q!\HG(JbJX(z x6lRWΘ(fs)@}|mHçEtp~ ŏ+dpIM z\irn γ)І./:_[0oxSpf" /8x_}ۊUWd gX(40&$AcPbI"]/]oxW]}gr|{ƅ7ѶIbj|!Hт_PCԊJn*4D9e.X*5F?1'Ѣgb6q/^m^(-t:?]W`B{quw'w@$ǃhCy0(ֻg0 B1;6bF~Sƕ%VON6A5}+H#biAHE!Ta[ ,EqˠLxY :KZj\]j -޿"ET{+j/B1e. tV}PnsR"{$ʼn&;C2Wr;wxu.exR' Uar|4ߤY>f ˔Im wW8z_R0 f#}u"i?bm[J4Sڟ< fwn+̙uLM;,F;'_{HYKrcYQC3Ve8Kq ^;l}x7p)'Qv޹N-y OiJD`&bAp@0>VZds;V^_(-*V<`1R#w;+L՚*]ϩH ʩ4CTC#X4M{3KOv뫦<8cԔq&-I1k`C;xFB^1lD,h@7zwzZnpU_`d"_"k, `W+,cn' ]Y΀;vwvڹJidFȰKF88NHT9Pw> 2u8{!dqP#Q,*G6"Zc9/@՘[y:S2  > 5F!}B3Oz~!<е#P 1!iۮiг5uHIr]MPÎ~-+hV -@Kb[z8v’f,ǏW*R/_Xf&_+,v`!( uVdB(t-_Xlym}` Sdž(tB;һ-{%`$Ȭ[nC"M96;ڏ֚ 9Kk KimhQMKԸBթ'4"VmF`B վuѣG]Z/\ߌԧ^">KIgoMUnRv/$43]Kɖ5h]堩5D$\qBjs+8稏Ƈ8pX|?B^c޴|XNL(Y/?JaVћ'))gsѬRfvnv ve׾gm/%2>x̨Ʋ 3JFf Sf Sg}=7 z*{$>ou endstream endobj 501 0 obj <> stream x\[ ~s?RNv:p&}IM68=9Z֖]3+;ZA 9gj9}}yf5ͺbMn]^Գūl./?_^@C%g-Uv@pUjwNVmfO+hD4""'jCV=7BVyZҞ ]U:>]C9OHvIan4.d2 TlASj~h_/}9|˂uLT ^&DG]T85ӬNH0f8Q';/y>ASI%i/4!19Am0h,bi@q*+F]OW,{pYөrM;&Y$'FY/4NiwjX'B}v17YZS#PZ{ ȩk6& Đ h>'* &nҊB6Sd,BΐATxP2TlӫW-L ["Kp@q#]<^' @\R8UxFDBr|$Q$)BDZMz̈́H%  ed$9A6''+Q33zL}vyV!sFH(]עzQ2^YuG4A֓Oǚڒa&>Z"tB 5b ZO&d"2GHHsMl5')aM,tdj ,Ye yW3q/_ϳsbXIgK&dYfy Y^/lTNs2*}1Y)E3-DKC%>v` ,=R66V\ %zGpt2dWq5NO 3uc]MJVĔjQlӰjA*gMa J!ǧyȪ%rA1Q OTJ4U&+Пtc\rq8z,ΕA5 {rUUd$WႫ\sQ>Wڭ^Uw Dʿ#^n; >яb߄yb2nfLv}!Nqtxqm)K t=C\/XA}UBxr/8{F4skӲ5"?n @nk8W.O,1p=7Ka?=AU`k4l,W.xlݜ-oVMKt56/ | /c}lNS'q[0 u/AP)@`eכ4̼{a̍XZ&|&rpSO4VWnygބ9s~8M|#{N~y!;Vk帧;a9gN"#˄t\}B#jƿYw 쑄Px9D}݃/: _͓ }fn CX`d,+RՋ),3|~Z|R6O,r VI_A_b].\Hnx}ROzO㵭6kahYqz KLUE$&:,M`pD,טe1&hxD$tõ endstream endobj 502 0 obj <>/F 4/Dest[ 178 0 R/XYZ 82 505 0] >> endobj 503 0 obj <>/F 4/Dest[ 178 0 R/XYZ 82 419 0] >> endobj 504 0 obj <>/F 4/Dest[ 178 0 R/XYZ 82 419 0] >> endobj 505 0 obj <> stream x[o.@~"v^EMmVU:? [;C.oNrAep?|+YG? q*͆Q߼?=>ho@3 0 LZś pkaoA1pn6㣷'^Y< `=餹Le.x-S/5zs9Yќ_]+g[ Vu:K`py\A)>F&w:@Kv(eNuS`<7_Çt|hBpҚ;sS1.8())ȩ病33p&ao 3C%$j̬1EQL,(Sٲ>Y6*L~.>Z*9E>&xSo-&q S[!6]h|>?Gy>[iO'޻@䳱vl!!P0 FuNc,j'Cfy鰢 d%=SCۃ-CKH4X熃Y!2uUYp|3'=mFlFq/vv?tiw}ۓzoU&|RE{ m} Ye0bn_Mwj՛P$ Z.Ѱ|G Rt{pȵkph6M b|'2 92͐1+q ;I9XIt HTt3(Ѓua$]bjN;fA\H5=ek+v ,vj;sk#9vE(i@Y<.aש~Jyw:MZ_p LW3%rzLdQbY;Óª村fWyP? O)D"6{O4rƑ뜜`mU=̤ y{xz?El ̰>ѿ\S2SU՚ 9NԖLTeYXT3_T Uj1?4B=!7,+tO 6I?r$z%fg+czn1vX0?K< *u:lS2OТGR17iw*#^'/a.a4 *Ӗk8<smc~4]R7_BvG'P ޯ26 aB &'Ѣ#=5ΪQʧe4؅4s5O}y0  c(-v nE%D -#*s8""f}'/,T8el0ZTyWLw Cw-йK< 9*d:1;W$-z$6Vf F <׉-a ߍrn^k -[bk9K^K|ȵ Lп0`a8 4yPe|f%D[2X9Wd[e~ˀ/BJ"&K`2*J kP j\fSz:uoYD g(b>Up(̔6ƒ endstream endobj 506 0 obj <> stream x[Ks8S1x̞ƛ;S٩I=8{%vm,zD)n$(yrJEFht\^-Or\>?cIXRBLAc5gyrWg7$Or{hT᳐,فEƒB/RfUxUۜ}~A]Q+eʂH/m'})-b(Dyz'y'׫˅7{Me %M'bve)Y\r|<,_{u*-|S&2- +Y_]~Jшgc^ǙbE= ّA=D8.d`8azQW~\)1V7QUg#Juq*vG3M\B8ӴL94JHz Vܘ9+99qtpt >G{D$cUU7zt|s45a߬k44$pNBSr,g߬ $a62$,J܏b~JWmT`"7sCX;da1<\@NT 0Z. ̀_Jq~YXW,bůtEdf۱EM=\;ߟ^n? }ti1 k﷾ p0qFg^Vfcx UAAHOzBwzZx()0ʌ$/ M X, R״J$Misq#Ʒc1Ţrh 5bpAFN똱' &EM9Bd1-yI{0c &t'uWթ6 E5_QBJ7wnCLz#,3>o<%<QUs>q-tꅈ2fTtDXN"Io*vv2HzG8^Ǚ 2*ʌ9D{+n̞4ǧ/xk 0C n'{s) !loo앲1`đH9iܻ[uH-e0`]tsmٲAǙ;}}۾#h9̜n,4u;ͭ;>N׻{×Cޕ#%F-ǯ:g *)z,u);$d<zM_8 ,/&&t=&q[WZ)Ppm˃=?:U;n:CG&&I YQ&igt],Hmp H |ŧl]ՄĆ k&n]t?mt >/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 508 0 obj <> stream xn6nԬJJOuEPԩƶ=,)}ԐI{(ȓvo$W]ޝV?|UkvtzR{|==*X;5yzr\&7g[56 k4oNO^*HC0"LS=l er'Qk$@J*^F˛TT2fM2KMuXqE࠵I7A99T#c9ʮ.ORT?3|\/KUlq[ U,V;M)D*TPG:VJ#Z )džxhp\"0W]$#,  .@nuZ&nDyOod6r'n%dBZ.x;#7S`^p#tN\3֥Ը Dc;vDys>6kP6W3(P 6r\fx;~O%? o ֪+ŵ֍{˞@%hGnh/BmtN$ @b|-5\xZhfxWSc&P jУ# 5bu r(]>}Tt I ~ܴӪ>FI)=P8ۻ9-zZkS,DW祰W%-7}%[`uu~ŎhuW nMıWV Uxn/9>MΝ;$WM&JL\.m]lmL&.@mY$Φ9^oz>-3iy]Af'QNM#[g[>B/95rfXb**^ݭp輈TٮQ:~{wʌg'(Qq1r?2XQO(oo}pB.߃i~]zz{sCUW&(yҍ,ŰSAb=Cjq[2` PAMfIݜ{޶a3Ϟ3jq^,X[×tk<嘊0P;>hd7$@ @yC`.QGr\u -T747ĠqgVAnq$(bve8YV(O :#ε66e31sL'/Jq̌ez5"'tuE㿚!9)YA*K/i^L@%*eSLZߗ% bݯ5nqIY].MrV -! ͫ̽\<&VQfS}B4jm9| ʴhru8^W}RbDY*]d8 G@~ĢaOZCYy9 CЃE|wyаϳltO endstream endobj 509 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 510 0 obj <> stream xrF*(-VJT@"YC&H!d2 ` ޼Lh6|,?)llZ]_%lJo~p}l뫟GX h4h6J3ier-g)۔W7 2%!Ln`~a*kCenب*5Kn2Gg'"l8~DTyk̀ e5գg֢LWi8%Bd-)tT,wH->8@EK9b-^+C*,Gc3Q0*&t(Kp)$2 ,^_??XG;PmPe/$UUͽ+ݹ$ʬ*oə6?#w鰫/{>GZ"N7#km!]C#9hk6PqVTyE⬌kVch_0a5,30A9 d΍}`,!s, >eV{D+ژG@N݀#d߼ygYyRkְFb[P'Mf .s aRF3T܇=0hwgpWþ$)7XGMDFc/.&s@hNWimL\$>SRl69T]-dP ;ڇh_϶ ڑ rUs|3r4^Z%K5t9&FJEf9 ?tSwI@. F;pIq2I8(AcAY418h-.̵v?^C˔ s5ڠ޶{Ks~p- Y9xBv8$NhC"8@梯.4jfR3h 9$3 Dv ȇ@E{:cRAyHmct -*7hY?&t]4%UwPt~bnߩ1v'*h_kw =r1׈tﱯ^7TAbJ)Ӗ\q>hùYv=qvʡ>3Mho?HOh-P]w:'w1܍,CԌ>vB:ka=}SSJ тF9pxJgXûZ,G2:X.}büN=ϛCL@=酝e[jm\0'w.LuZh#btϤ ޵_]'@z &܆{8^!y-Nvqg@VGΦ# z(\͎ܧ3P-656$L!eZ=J?G/8np-sJ>/F 4/Dest[ 103 0 R/XYZ 82 440 0] >> endobj 512 0 obj <> stream x܉dy9(}) 9TPԡ!-x!(""gPJ+˲?y҄ml4io|&5y1h>~;<50PE#Mjvxdd7}g0n 7DqS\A΋;FAvKUE%1[%'߿B$z/@̡ Ѡ Ѡ Ѡ Ѡ Ѡ Ѡ Ѡ Ѡ Ѡ Ѡ Ѡ ԡ_u<6;O0[K೐zv$gg/Ҙgۛɜڱrބi4OIs ԴnVI+YTs~۵fInhvwR$}}w9+}ŷi5ڶ;ɺ[,/ظ}2G OJ/K 7$XFUlg>ЬeZz؎'N[Z?tqB_jo-x3ۦJ;qNj+% w_Uc}I}Ru-˪;_i^fI'?Kҧ_KYK _n>\\֯sSU9;Ʈ~s1ez̻O,nk&n*#^۶xڄy+wKnmaWI'ؑ}yK˲m7sI|J8yA,Pxwu~ev)c'%`4/L)J9˽.|J~+ Tlu})S.7^>nx.:o,e%u~2j5N?x@iq~Eo87^?_r;/|K|8A|[,+ݮCAmva_x0xrЯbfsBV# `F=5.h~׉{_yF<%t=Lѐ8-'-gou6N({>7o͊{F>w3)9_Flhu-e˧8:'gG3{sJ8f?8oHa8:'W:VJQan?~*sQA?A?A?7k֟/G#Mʦz ` ]N `in.D?4jzwXVjzc`uq'Y/%V\\ahЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏhЏh?b endstream endobj 513 0 obj <> stream xKqsmn(23`Zv,3P֬DrM-:SFV(ђ5Vd$}r4JijĆDlqTHHIb eCn(`&Y9pH %y0GAIx*aQ)<% " jA:tAt&dG Z hGw:Qw?d0vb <6{3*Bg."S1>O5'^>W.frKne5 GHYH 4.j fd@G ^309} .~KXC2Kt~^Z%?aOX+u+qMuTC2mN4n6ܑ߲.hi{C*,9Zq\_jPsY]m/;oT;y|1wp|ۮk^,kyvQ.8.P(^q\NeYam6jX,f`0zV0ZVT B.d2)D$I=) endstream endobj 514 0 obj <> stream x]s63|35$>5Ms9܃Yfb_cɑ  )D{_\8g.?<40T*ͪ>/'W,]zz == &a%ӅRl Zg.J:mӓOh)M0 LUYLe!؋ˎx-S/Xizs>;+X+]0+OCX`Ad.< .N21^CqtA*#~K#7/{FJZ>?3f[\->gբɹ]nM5!} 3W)3/*&݄ .e)ѠMM}O}5p} `ZJAJ7hwڐ=fːSk*  XH׷~ēht ~C .a^ sXav<\A<)ꐶYba,%ng #Ϸ8t:`!O J2y@dJMR< QP,94 /wӏ;qv>BՠG(}{kS@d7O(5_#ۊF1 XY%GR*xJv|z%K6~tcH m/[t6{-%JEm}#A*vvhX 騉Gzk$"z4gR95_ yksC%) \ר)/Ym įFXM>ABw%UOVjr WY9v B6Y.!m6߬7tyE8L^;G*f$]0σLIKLhAb 40[ u8b[[8˳&$ <'݊#ڛ&lC΍! wh=_HhkI]'m|eYlr:`܇NTY*| h#3xbYx5vܹw m*:YWdSdeq5}}N,pn R7Hf*9{M$;5WXjb.wGh ˓k,}d>id]7xxʌߏHR%G"=ޡcg =٦p.mr?ZzZ,ndXz1OyGm'e]WGx:Th dR-tk;8V`Ai4Ef$4({hQ :[0G,`ҍJ /k4*L0B c =@Թݪ+n>B'D-$ge9K]\̂p 1JtMc%%9GybM[DB'O;N4ޯO??9oh%O_B%x/dKVVRUʹ~uPp}8A#1=c},(G a:q\R*:* WK ]^V~ÚVAV];ok+6Ɗf2>9aDċz-(vF{^h层E u.f{_{l;ν͎ ج#LTFkDo^t9 Qt Du*r>PݨNC2(uLv!3) ӽY8T,}sE]vlw!{w~emlolxayZ͹Ӷ+:-<ʷ7tvqq W5n Tc ňXNvvӺk,$@Y @zD_AE\p,r@8eF Ӫv7Ňzr(dr>2OLdr^?5;᧊_Q|Ji'IɄaP_ՇĽ<ۂW>c *yw3}a[s 5va@y6T&u!?iFMM:bϭ34B0z:(EH!NJB7#Q@釃5^âMOlWXu[|7p՘ $>Q#J:0Uc)<1ULD@nd5wKXB J͞jzMܵe5+[/nзLBt2fz,A}.k,,\#r_>#ƅe:{(]\n\%_':_E9';ݪ}x<9nmo)J#K|vlW̔zz=aPPuK4iש?uVIs>ۧnr֨g)`-T*71g|N8.Wf"P 52 ?$j endstream endobj 515 0 obj <>/F 4/Dest[ 186 0 R/XYZ 82 538 0] >> endobj 516 0 obj <> stream xXKs6kFGSx?ܛINZ:98=DR"H xL>>| j>^)Sd~?q)WVi|=1_ǣۂo;X}a.J >%.BfrLu(kyjDM+|{h}k ohYd+b<-UzުQPD)8h·DW ̺;bq H6t lt nJ΋-I79k*X*UQ=JY,Vv7mYq= W_q}fN?p >D?刺˘LPߚL3~`w$[T5}[)e}#K@L~s^>;D/ lV \x8ᒏP.F+4SL$N(]n@ʷ!yO{8S6V`!|cļwPkPjz1lRieA>0tѤ LdPr&vǸK Zbnj'#M W&A}%llw +4sCmZ# i'I]kac bpx̍. NJp4W^]b},Qt{/~.s%AdGgWÑIaK^_Q' s#ᶇʂ `>|Y#K! TCqj#:+$49ޢwuT9l&wS_uOQpm[aa[xa-g;41x&{E >ҩ<<ܬGky(AJ\juPqQ [Yb|<uvg{7^<{T\&6~8-K endstream endobj 517 0 obj <>/F 4/Dest[ 186 0 R/XYZ 82 538 0] >> endobj 518 0 obj <> stream xksܶf!`vlǩ֎:}8 EQԺs4]m[z}C =*ukMՆZr% X.Т˵Լ#(aß,CZYuc|:fwY5PpnSKkaF#q2o2xZsRѐh_2[@\=|=ea 8AH.`4dLdQScoD@˸, re.-ֺiPǖ|+S< ݱ?}sAøŨ0g !@S W<nM ’א;o4ƙIW}V:x[j%'\$mӵW, j=eL;q'Oldoe*t C-d .){!.Yygcl8l`ga)w(vzm&9fݙW#wsc~Q*oc`z@Ɛk621ZU*(FcYl%F኎Ɓn<2D)Ċ{^@ItJሧ/_T>_^_q%庯U-^@㕭 0!4>b`M:jh;l;tnj?ĸkn\זCϭ ?=kw#oFy͸/= Pb&:dXKBi+yreE icLqE4;`i4 q)KA2;0X鄸f;d{ZUzSHŪ<$&5+mޣ^K;bn^i_*iZԵwg}L63 L[O=6PcQ ޵}и͆;&?#l#j`F$XZiF3HΗ ;GBo:aM ӊLsw64ςT`O.#-koǞ-z=Wk@jwT7:LBdL?rm3Ⲏ3UX'fAغ~\>32$8XeA ӽ2+\z*%Ox i?-{-g 9#806?@O\ X2'e%p֏vJ b#VLJX__'=X)mҷj_T,I>/exL"=HqؠH*<6͸%Xj)'0bـX@*LZ}x 5h:힂 %S٨3 ,cCHɤ3&=!fC)ÙAiUP!{(N8>ǰO8QAC{`j\sX"8*J8mc : jS'`Uro|PnDft F9J 2ufnuμ3B3cΜsGd8JS2>edD*  >T viBp뀬b~}!-1cferxNw.}vIM'SU e/6 |k{Ta3SU$(K~%*tXguN([l+ !|i9~MyqQԹc&ץM(zc{p/M;{L"6(rU!' 3QL ?z}80I{횓kdXb-%w+j] %_xGJew|0s?>;|(axYO_5w,yrh+* 5b㸖51F*ů)r~!Mvݙ,5~B|cK䉠n;dp UC{>MP*߬  0 h細h߿n; :۟a[]74QWGU(IO ETk- 9rXȭdFBdzTX@9U/a5R bxݭbfet_N3+p)8s$A-hhAmպ|{<  hrd5/BXxx,uBhJp}]1vBZb 3.(D{hS'T#FE^Tä\9"< !4uEMb固r|/V:(˅rLFG}b|a|TOk {YkJL$Cќ1蕿h׹rtql9Wy>83=QS{A@A4o~'%ݖA{{E ߤnrp/q4v6ys-yYC/ݧ zl2}y6A]unk",W<頫Oя$be(c?[ xb]?ںy{MKOk0~A?u4PE[R+PJ?%Oj O0A^o~HK>fᮩT'/?_!*> stream xZsܶ׌>% )Nԝ4S$r+;i.<;;bˋQZ/8JX,?_^?_^\0*^Z xauDS4 ftk//ESDhiKDDn2)Qd׃Z*^0kHzsXլ(w7%]-ƦKqy\A),3V:z KrH䲛JU+U~]r]]u]W)ˬYw5gZͰu%``Pa߻{x<W17ԧ)$rsf6jxPv}l+a}j*& c _qpf'1ځu-m%gƜ[7+lgNjmhs%OfP ^JS#Hm`|Gv2l#NEhHGc{l|16i{Wno㿪j[~k.ﶃ&hί@ü ߢOw`~?ts aE#sMeIKlxq>0Gj=^bS-߀~~ cZϖ F{}r6ǵuq8pôq7&֢ZhP102c di .ǺǗW r-G$gM,.5h GBrKxi1][>(q {GB3,?6԰q~v<7L%qX?/;u]1,8 0@B٢"<[5;#%KU rjqIV?dQh) \s6Iۄƾ.& \dzp|C?@ou|O}  C<) aj}U HjPt5Pom޺VFR8kA $e<kX2Wv6N-_'7R)&=.YtMZTUCn.X#wߥ [wtjI06ծ5NNMOK^{wjs}2ݝr"-] Ԫ# ?6 4ZTN+\JVt13=Y|PEMLnUo'@0`-6~L9CcUe uY&u3 O_CƏ8| ꚉ؈mѽ(!&qd&aT@#L"u? _>x) KmHX<:(Lأk{i࣠326 I09%qZ?/;A;4!," ͍pd߼&'Ȟ$r?黊LFcϷ4.S)l,dRĖ(B=KA? MG&?Fjx?l0 #`V9\wg!(Mr覑 ⹢)3U["KB ]? LB:<;Y3#H[N$^Hw(C$f[ʒ.2J`971ah˽pz _HK4UV)VoPclF?}7A$a[drBI¤pS AmpEt\R)^5 1och_+ě -86QYaQnۭ @#p0Ww~ۻM&ncE`1' :Hz|'bC#T0OEĈv^W;e^'GFvx߉z㕢. r,tnYŭ$hC[h`39٘ gcvٜ?q0]{XUhD14 W'YE~Vp(dun`OYs-øLgےt*k endstream endobj 520 0 obj <> stream xZKsܸJGlg8lYJ 0Qk&;6 @!"~//NOcV##ZeYT,.zztzrD'QTHVZqCXa%.jIqUoOOXV$4DO@C*-d//啐D"='F[jPbE e5/.6%c4XMbSSqY?`xѽ*C4(a]vYTZE%ˋjU?VL13YJiif]}hň39DIW1e|\+|o{ճ+֐fnO_<(ѳyD4*?yWLV\V?6P"Ԛ`XK)kF$m|l];={]^n|-qGGӮ5:>?xEx(Pv_JV&Zr#w tB%0*b*uȲ\5nvrZ (CfPThʔ4W֭b "!յP&.CQ&2Fy6XC)h!z~4Ӑv6E VT *"/Qh+4angU;N PtNzr9 ז_??l'(xh%BL$[BIձ\Dȱp'zĸUՍt(D@ih^k;E4ð0I2$Sǘ_V<)>޹E T(ܟ R]6@jؗ|?l+:Mٽ&[xPEm~Y^˄l5zqwpk~ov;OH\vZwL o:1mHQ7X%vԢ$SDb[z"bBhמI|=Xb}׾4Jm8Tz̟Wx?7n>!',gg~zCb?nUSyؑHUcHboH`I"3npNBiۦxF9qZ7^_a|t0 6?cHYϞ1Hʎ$s<z04ӳ"ԣa oDbgMBaDԡKyb÷B&fs@3lZ"o.򀽌yfaHAJ[-ťˈ'ml [3BątD34pmM:Z Wߢo 7$5v7g{D.Jc3l,\F o!#\x `ד|Ȑ̤u>S>1!FfŃ[_*݇_ '!oV#>v BKw} Zȹ2.ӛl"9iֈm&.oTݯxjUЯڥ,,~i =ţz*w?^ l204Ip\b i"0k`C吱[w=DcT :Sr8j/7qg!!z8 Fl%Bo=e~ңl3泇?ɏN“o9x kփ+_/Gr^y"^4Y#^ΚudH "a3z&+o[X \R?_MSnufk/j\hgXHq"RTAHKBjKԎd]dx1}6-TA;tu޶Wͬ݋'w^$&mCc~n?# \7 {JmsH$H}IgLZe .YN>v0o(I+) endstream endobj 521 0 obj <> stream xZ_s۸Ɍ#$ҧK$sN>2mwD)wwAI}7Í4-,Bo']d,G)TGTk {ӓ4zǻӓ8J-vzrzrL UV0*eYg,WѶ:=ES$SD#r) "":ܥe͢ۅIX68JQit)%yA^@OKl*dsz눙vbTm;91K=yiNx*B_,!s= FgN J !P3)Ê>?N{hLsviW0AayL-6VC0Ry %8`6`B߆jr,BR>WIl ނSE: < 4k $)6pXx) _~ e`(7O.Ħ,YQ >Lsš2ކ A J"pey|nO>~]}IPE Eylg`ԺEv">8ɈOt2GBI(~en8I'o9C(OjˢˁZiJT8&N`"qv&G _~{-s(S_.5ͪ6ڄ* ,Hu\A}Lu=$ka=Ty8~ qC3l ύ77ฝϱS8?8nld ΟtRpnMš&m9GI!4$]I55PǖZϠjdjTɺpM6I3,e)Y*q.G@<.=P#G:ӯMgǷp#Cu\'Z %Gw+=fLrR¢gSZҀ -I, ?Z eB}r+m _a6!.B..2Qx57\4Z^}ZCDG=gpn@itU  rWiX_"ϧ&2VrmlʩoM9(ITLڣYU!_ 5$x;K̂ـ+v8 0KV CA̲$tpNJjb!12B*&\1":m4ZYP)5W!P:P]K} Z'Lrma\]F=_uV~@{,gBnI$:~ @6W/iTS9ǡƺHn؇+CR`'dGqOb+z22zlJ89Lt]Vº5Ī,\ +fWEaǷ {;ݬ7 ĭkkjԡ֡1./oz|o[ oJޞ7h>'tGV(%ebQ ,dXC?unqKnjgt%5z۞1ș7aNXQUfԏiƌ|~J<6֫ S*`il5IX@W5:XaXe 81؞/^|`Adv{q"RF&aK0Rg?涔Fmh[DbB we5]HP}\ضB2V8kQ]^I_3x+w@~3'Ƕ`ƑQ)bghߚdZ/58~҉[OjL)l܅f > stream x[Y۸~|$]qާuc+<d%JMߧq<@J3-kI ~笔Jgb>X-6@S}=\^Wywyqg?ŏo/*`THZ xfTDՒ5Ll"PDSi ?^dۖJTZ^/Z-T%Dz&58JQd%EX䜋H CAJ,Uڻ"SrTdrn7W2OW9O ?w\) 3ȸWg8Sr(*/[ j-}{ ??GWaC U!FNaΨѩ2eǂ}qu!@f6=WXX%L,GWs)Aל .P8ݭ .#\cQ#<9h;[=~C~}>C.t\!ݖj;]Wr,jm틫*?`+ 3I x&<%݄ž&}Wq3`rkcw}S5ňZ֐7 >pt ϮNMބvaeB@̉z L s+%ȣa&@.j&vz`41Z3Τ?^v5[;B1UOkw;R{lX?CjSC9_L[LQ'GMH %.>9wJfqT-tהK&k)K>4$N>"cf4*/55iv2$h^%/R~W/4g;^u;~@XO1 _P$Ľ)S,uHTKѵOyjT0OŊ'X3 ߊXiJpM&{թ**ߥb}g 0ӝr1mH0hFbBb(F4pc0'ڭxPYeQ864i6!Ga I.Y;BDҚKa5JXC>aQ >A&8*OVúF_&C*!lhX>i\1"xָSmn`>r` "ַ^Ϗ>r,nXfݱ0N6(OۨP2x83QTo fC_ -NXhU*- :|RӀLS rY߽_ԯkc~Gsv2X05"O`Hm2kU*V:ˬfjl*`䣵vиLu8<1 L{?GaƇI]6q*Vv_ ir= G[DKL[xTtΙ+/8X6*`0zǩIF:Xu}ƾp?97_Y &4:h'\sϵmS7kdumN?ޫAx;< J%~V9~gHHK2~[>SwdM,$t!9I3D j-S@A[PkHջeT"3qhN4Od**| +.'aԙPx7ոς0=M5T%稗5 o&c?s2J-;uyPPQu`پNۈ@@8ت3uff`bNKH:K9كk&4RR&Hl@D|&h@}g@LT 5CDB@T /bF=lI橠@0DSUM>;͉qL O XsPe_S< `vn*m~w#48Stxb_exb+f1I%4tm51TK]YEt+Xg!'[!-gbC=ç^khwU4T(qH79(1 H(juI?nMtopVOO[~3:GP0'DQkȧLĖTQ2Ce&K%m{(VBhQ3QbK 6_"j M|O}f=AH0vg 4Yj6jj%<Q*&xP^媮rZ*YL>ҧhNÙTZMˑcwjZDvn6.u{\ooאĆw}>~Gw7/Q`cm0Mq} ɻ`,ʞ.ÉneC{:_-.:gl0XZ0սBo 쑰(oѝЕ؉}tY}`=D/*4 QCCp)[?cxř aj7p|Kle*k%cѴC_ R \;2lIh/nODCw;j11EzZA_ ކ4ƫ)H: 70o5L<C endstream endobj 523 0 obj <> stream x[[o~7G*{eOE.jAE,Hr򲤸$eh %;;ٙ\,~FfB03q'2o[Ng_g<?]ogϯga)` v@mc"s33Y ɬvh*HC4"wDD4ym*SY%X6VFzɜ%3j/Pl^f˫\q@ vJzYTgFWKQ!=TdO3R#[肩Xb[㋱^0[;l=yXz_/j ~8Mqoï;otp6 p >\FH9*,Q=%Ȱ, xK Ïfww+(G~8PF/Ȁkj-6H= )a+%?|J8CCy6~ *gVV;hëa,3%ڊ-OLu I9n#\XϬl;RUynrKcGoκYW)CÅxp X_TL*nrYZ|msse4J/C7\̣}Bp~]ɔL}%Ab1e؊%Y5*OeA٢{he, nˬτFjjy%fEae4->`'$},gh WSIF+t{`ZJqƥa/嗞رx5_brO iGߗM+ tf^~-cdK 3G%x8^(Lˈ+ 2IG#j{y88&14l,U\Jwc -D :\npw *hij΢2TBtƁRg=K9@VFYNƦ5Qtg DYոAq!O[-j@W"H6z[r;jm 0TO Sm&$"|ɹ #8 .-4fa_(F,q4U@:?C ~!R@3p /ٚ-O"q5b[hH ш zuAEr *vZoP&Ds\uJtBaK2H䘺7׾`('8m[S5>aKaxBcA DJdgrҿpk%珌w{C!y4,gF 6#$dA 経 5#TNeIpOӃ4/> stream xZs۸>%ҹc}AEY.@E\)X,u8?[RV<[ܞ?iQx(ultv=?;;?γ/go@g@((E%8ɞ[PUL:Ӽ4S}~vE*,ȣeUeE4[&Y@d.heg4 ERz0KAz-ο)DuE1UAD^#꼜Ryg/ZRѴ*X^Ze/.?b}ٳ bJ36V<_(P+ ;*b,_m\@A:Xv1cyYǭhA B+PRc Ew`g1FՓswO[|@Ռ77ֵи^BˀIM#]c&(X>8!  .f;pX6q$|t>)XKUkwAGz{!ER'AOfihldIPѭC<eCo \i-Íabfcsxp6⋲-k,I` ='PAtB_] 4B6jkP~a $rmmydR W1JJW3&" 6nЧQ{ި}P.K5?KѸdKwv.qI{֖GJKP`k3ϾqLکs7EAҨYCm1vQgf>wq2dɎQzÔ _dë#egH Qan0>0Zy_ T-0L ߠtGktb\: gnI)\C 12CHY8t k''JJe79`t4H#ݩQ= "ihh5υT9ڥvFKbu clKO4)\9zlvs4 O83cC8w[g/I‡%.-k;[_i'ze݆ejjhO#JzE46˲ Ch{.Dsɹ. 840-,Pg2_~A ̀`W[+s95JJ a GF:Z EG#x7NۃxXaܨNTJ3 3ʳzWA[4߬j,n7sӝTo*K^//muҰPىuAѪ+pYcgckk6?~ ڕ&x b+ڎfm໓g]&T󤘂`"  Afz{`&T"JHxFUy,Z~kego_q*eʹٰ-% Ff_R)-dش7 cc :b|mA8ݏWXt]_|}лre<ܔ+QVٸ) #mjA7bWX5`jNo*ur&v=}&yO\|s쩚Kd/'èo LZN;Q6؆᧘+Tw#oPDZT;j:OT]",iBsk)(ѳoG~<#U/T x_р`;Lt9E#-0%( +,j9QإMRضD~ݚ;`^&‰VfcpVB j*X*xopA * iL].ĀS,#yd3L\PFP<&┤t\UC&+'/hk:?_N6Si TKO4S)֛́xd];X^<}pJ SUo>W zN*|&3D_dN8>S~Vl.W2rX}gPQzViUD3WnnQGvzs$BC:kn*E7@ 7󙝠ٜXk}0#;í:_q-jyM2z&{bv':{'G,!Qǟ?,]J=pm[#> stream x[K OEa?I:ub;vR[I4ެz$flhR3Σh4@ |\Lr,oD")M&BL c|ޟg|ys~vHҿ%˟^_.a S"3BdFH gLJU5n{~v󌦢4$,ʔ _%wJY{lwa4ˬ >ȳ\2YBV.F ]u@/ ֢Li١*ѵBv]jo !ՋezQ.>,2JEVT#^<]#eET(p0l >m+lgwɫQeØYUjNA?/!EnP- Wts^(S')mj1r1sU28x !s0ق/ *ٺ6yA' \odzvT;WҠz4kHxpbKp.f4oACm %x@f 6H)mYeVrˌz1 )rnj]0kKde;Tچ4zUTqR1U2)xA>/0v|ų |_Aٺw&J]MW #bcj~wow.?\Q;b^{񻄱Ux9wά]lHhӲY|]7!t }>P9K=pEwHN*FBaǥȱ_YZ9/im!1s=yC KǽQ),o$+)נ- mK4ЀOM] ˤɅGÛeK`2Qο n^S7Ix[/OTBJ[|X=EɊ8퍿(Mq'6mS~bGJaAWqg²Sa%\Vy-mUٮ9/U:Rb4&HNqŁ-qv9lhh,5y9چB`dmv2ĒUl>4B5!\eTQYH_IDZsh`F\!K(͊Ц)]#`2)*T8=5_Mki7cиyh`MZ,C!榧`Ma5oBB,F7 b|6Mz J_rFc⎂E==}5v VH#.*0r@B g ׫Z^.],>w8G:w :d:,Kl<+4paP94r#G],-=`eH~yf7̗ҽCgg>LpD{ߏ2NMx,e&4X:Tj*2$d7752< Ϻг}bѓ+51l7чHg m󾂛 2{hg9 wpIp'WQ,aGc.[39j(=e&u^a}kYg.xYic{庐耖,GkSa9ޙq]Z#X82N{Y?5^_S߃츟iW.Fn;bװiC~x; ݜ'-NmG8] {GHyX ̰ZeRhmqلs"!tdfLw=F-J>]qY -YWtnO n6R3HBߍSL|ZtrB# i{5dd0_O)-WA%T:fl[;γmQXV,xaA)dgm^8>E%y2ʹz" ^yET}z(RT1ˀ=Jp?Ͻv(S䐹Qv;U F[;Ԁ -ɷ.UhXq I 7\?_@u4>TP& )gPBw@p{Zt$jxpYVkG|uDT9CpETO!9 glkr GCwU˨Iaʮd׿$7Au/@hUZnj̹i#YxrLmc GcCr 3iEm~M?/&-Nnf7b5$:S ir8pI6 FN;s8QS`/~; bzFq|y1qV8gE(ǥ\> stream xMK@s-d~hE J<6 Z^CS-!yvyg󬪳+DhFUVd+U*A* ] U5[ת='> stream xZs۸>G|H6g郢б;䓬ﻋ Pv3L E,jy~ÏԢXޜѢh%Y]|7WooϮˢgk%4*|6;&YChȚheDbם\(¤ e\AJRJZ^H.@yFeܠEEMjڲb.)mW.7&Cu(S?E&vOE Esvp-f?U|S-DJjіW%W?u\!q߮ZR"ńjVWSQ7nW}>;|%DO>ӚV@ 6D5TC<YB߱%ܮ$u0|d/$nn#bKDe5{0 d A{JvkGLsn|]kHxf;K5`w-# IZ_ )(+` crڧ_] Ԝy-Z>mwHBrMF"#GuݨxZ9?-ɢi9&'\F\e-f\3X~r>mzk)Xp+'x=5mѾ͡¶eUښ q_&5% J Њ[)JaY28^Ȫ~ @SZQ5<\.2ɥonSs$雓H_%d[a*{!X7@DD"Ka?IxADEri4|4s(jڣ^{3\|Et#Waը?<#3販ѥ7{2"Вuv>}1ޡsX;thHګg-֣z)lU`kȉgk=S dO$Tap6,1Ǻ@Yս;|*ʙ6_"Cc[-Q!aّ~GJb*Z۷eبbm1q슪nl 3{F&8\Ùzyak7I[#hHcJ{d֌bqKGկhKRi[5e{eypuV2iyeׇE٢Dؘ {]-dy{";4I9͐*o;#[t&k؊@n(j4oV}k"G?@'kt<8e:m&N U9n\ǟ;paCL!20g n-l,6i;={6IehO,YI4H9EpAIDIĠס׿;ϞI4 h'i-LѭIiDM:9"8RM/\kFc< c YX[؝9D&0M5v*S5C` gz'uv:?l'7ZG 'W@P|ۇ*:B'1U갦:l6l֍tѷgʎ8r]A1G@sӋxTeFRPFBFO^ Ks4^/fġahO2I1/Oe32gXo;Ѐr\.3D Ӂ)dfý.I |X$e["d,a+)&U*;BK8s8$$|%kKp8~l(\ U mؿ #o~y:9#gnK_7Θ1?愭[GIsL9ϸ:Ζ)29 `8spZix> stream xZ[oܸ~7G)Y*1- $ͥ)mLb1+';w琢DJ"5co d,^NO~eRdϧ'4+jI(<$uw==)kxwzrg/'oϧ'@8 TY ZЬ%auV 3ʈٮ9=lE& WHSWYv?P)J1٫ՠgRF S>;+IIk69SaheNv vhJԗø2S!wř_"_gu2'V=WTzܳH1ÚA5~Os%Dϝ>+s8rjBP{fᅉר~zRje g̣۸&۲-QFA)gѢb9&TMfeYs,Pjf'_!>5;*b}@ opFyqR|wEAeŭx}璘6A>U~5WMA&GsU$UTrh0ڡ{+ 75NUMzZ_?-X}q&7qEJvTA6vWT\l)h1Eon 88\4@we)]($O5Ek+0KWJ;bdz Z@M֭+i¢CQ5J\ҋFrm3|WPsRF$6RmWa"_<"*.P5a(Y4 BÕV6ى>Fn٪3Idؿޝ֬un$ǖcj\yUIdRiRsfUՌTԟmtg39 !_"jQ?0Ԡ#4IΈ`J)è::B!.S8)Is>RUb~I~Nm%! P&14 ;k\0/wlUCf6#Ca^C*_+Q8Ul1c j^j" pJ'~xd8ǎHr NyFuT~6D؍-d l,4_֧{&'-`5ޗ#*hpHvA< Hm78y|bSXM֯4!IaJx-47Sv" 0UIk++iS $Q2T3fj^O*<'qN~=Qw.}(cKҾ5||`"Bd_Tq? Ďַ#nq?o_ _֤"eb~0Q QkZ2w,uۡnv$av{5"mؓ´+)wc.bVpJ/ m6kftd8w}3D۝kul8y َ{ϴ 2Ըf2~EJn4S]*1h4 Vz˝ )AQ&ٹd߻̲6%gEf$bqטQǵ0 oh{q>,,Ű/ʫ'\'Ƥ}Lp+al5,tw6kr%LsVD9^y{N%^(XGErNJ_Z;@FG׭rTšE7@Ã:^P)\@bT$in6Lfn-fǍc<+I4uZR.WpǞ遞l,|3&!& Kӯ6{/VuЛ5a恷3*qZIQ蕦7ni W%qP5~.j 8`TH~{L9yhGEC.k#d ci.$<`$G-&|؂ e(6N{ #Dludw9qD7I3>&ACFt9AI`LuO=Mb4V@p hyhԐ&tT:׼rer2Uo8@uXIU|g-wF}pxi-@V B#I})M1Ozr*y,LEIoRA Ai*K^eWqn N1OEs*omL^TQubǼC)،Id6s<Ƅv@@4Ġr:|K l Q!ai|}_DVLJ5l[KgW=zxļ@h|}Kϭ7W_w,q_d@r/UFF>9&^#,2o!`[(7&7m<÷;AM'Z![fA!A/n &eO_.7Ҥt#ר endstream endobj 529 0 obj <> stream xZs۸> %> O^sөc}p N,Yr $ dzL'vO~ޟ]EX-D #PKZ4&LZSPF,WI4\!n,b3PJC7 HH}IM5+Rr`7YKzgbQT47Ha]%BU\V ]^UT?S!wrђ)&Derp0q703ܽxwI 1Sϴ&F |m,_k8٦(*tA9Ċ3ODegDjKRGB,de* %XcC!ë>nm薝:fnۿ]%d( ȜewJv5m`;|ٕ̇U~ HEfn JUs,@ǩzS7o55'A\ ~#Qn= 1FL.B&X"$ ?Ks9>Ʀ?xXA\(ۭa N!)+W ;Wq;l]QZȰB_[^WM_oeb&icè=G=mB.Rdc케$8YŃ (]xH0s4!D]};KER8D̆zWz6 ל&TYdb$ft(3͌&\#'mʋژ 6azs뽶z;eb$tP`KR0C206쿖N &W&QCOv%cG70A`Ϛ2L© ЕmUՔMIRxptni~92$u8SF|{שل9PHOug59R$]E Ƙ<ɡx597Hz0LzfnѸ3T[ L~~C%Ŏ Ҡ L1Ty?3 :GkkܾоYnX3|ndE \֖oW+ VyVuR[fg_7[{հ+ ˾mק}ٵ(К/@wOХvbXͿ{@ir%3&g?[w s>YV  w^'C1c\)A'r2Jh!!{?,k 'X> Fxyb 1>RN$@,aSIl$إv\XcG ]A(mkCIQ ͘1:ҾOOKRnZLPKkT.0;] 2ME2"~A~38>z_fg$X! nz]8Dimz?wpUQ5b1sa髉 aעxk()uk $Y6tI`7?#2[g}Iy^HABՈ= % }HM~>\ȇDߺ#a;ّӁE@67yDh>FE6XHqAǢpwy:E.6Rڰr$LxDMoly!o Gљh8<-8ퟆ? IҌ&#GdJ&K@]dGsuB51LvlK|zL$8G7G7ud\$}iuk}[v% [MZ.GG;'&于`o({ ^ۮ d]/C2 '9[KѸ?Q8O└D`M4T=P:;zza֙蝣9 FM~/4B$Pa7Qu?-ʰ?ZS'p7H\%j5Zق⋉If}x$htW%x'{,֡maCzxLq& M،Nf\(4w4φ#ƣqtSo89 #$^{` ؏ GG%考沊"~TxrehKHQ;4z>gӳzPD#Efb+RgG6y:vʍ1E.I endstream endobj 530 0 obj <> stream xZs6>G枚~uF7Ai;-[TeEd-9+O1.$TXcPi-+9Pȿ-xXb!y,_D) /I6W-+(on^̝l}Zd|@@(W<+*ːldF(`xc#N%ł@^nUF|1mp썠J#dL?J3kbύƺj<4]!Aa׀I k/ѸsFm$eEjbiA3$|ԟ~%*Zpͤ~XfPpZPh[y4H 5Zo\-1&4cr- z̵G⚀cy8fr+')ϯU|-B!td7+|}iWj iy_}#j_2#$j?_\ckX#ְ@ҫwƦӺz&5' Mn\sDNL@a^t0b' ^3,4&C+ryhZ#ˆ:WX4s ![Mj*buL j=AK8 # ۨhF Mᙟ3눛.^ i. c@?ClX(7;O$aA_ a\)ʯ:."³X&DԸ;@ҝ >Eb" R)7x+.[+Eb;{quWhBjl CAl"gu8{*>Q,` ƒE,E Ph:Z!b-%ܛ(ĿKJeFVg*tG*Cv|֍U l5uW֜\7Jyඳ#b-ڀY"^^,`5~ĂAݯ»[B*lQ kKͮɯP_]e(X fmkլ l0j)d7= u:V3^d"IMJރu! )-~Tz!uR`nE5"61Ҋr V5تӔ~mkݩBF"e}mV9PA[|a*`' 3zqt `_H3 zFOUc  ~x @|0?m a>tʓb`vޮȶy=>u4ڲ⡔hnBIjUDr_;EzR ZIpVg44vO52άU%/lIr%^nkb?D Hmڐ/UځqYֻv8ҁ5c/iҁm#W:hO>>n7W q;_1.~t\VΟSvxޭc {xSV?TfH;DЯ"SYɢg~<~fIҌܬ,qx+2˅mp%׆'LeO.ūJ3zc UnYݖi+x]_^J@sȤv킄>yzXz gXfbI#$m$(oZW}m/ѝ+ .yFB$dِhG7[GX/kfN?vG/#R$V1*w-'-V۠e~PPNR\񀛺& U>:V⛡Ol)qxRk mRW0> stream xZKs6JGB7=cJAaYt-ËmrxݝaNK(+ vqv8zEiǟ/{q}V-X?!6;- ~:ŷp*ʦvqbt5>fWur;2<ޞwtF${RS ӓ QO5<6$Jv+*}؞QP! Ny>h:6{4by "(`8v=v5{쁬FXϐL@@*PY6?8Nզc5  fPi;U[ْ3Z QY m.C 2"Z{L}s][VS߷! 2M2|F&_jn=> gD"E*UtJQ'AN N#@cpW*GteBk}G'd)Jz V2u@zSy/r:i4M\HѮۊyuG1^m4/h;ՙ " u7oΥA֣4.׶s7]K^s.-HcfM;xr!1P桱S) ֞@9uwMOŌ&L$QnN5xA;ww.< Las4p|P"jz;aE,jwK07+v5i %BYb$HGnD!GŲsO0Z1ٽϬ[d>n=?'~F*\ww%Ϭsr 'e6$3$VGҧQ||*/3Y2Iuf\> .4;jk',". ~8D,< f]Sөƀ$N*,ZvAౢL.80mqd_O4胷Ҙ+ei WPƘ?P7kɖ1 i3%FoqxѸN %WӣIv}〜yɦWdq*[,꿐,=&ў/YyٱGn+ <7[ϼ(9cp\pc0/h dfwF}DKJ-]A$?!G2<[} 9 T,̓{I!`D YQG'AԚ1Qe(x#?Q,Kl5#f0?#Gǁb QqDa>`3'`fQ}(# ai~]Kt`@ielX[dGƤ2qL/sf^?#+-_УERD%gviJ4#}m4X$u$#. PlOD'1!a{ʣ&$#DL"Msg%iL98 endstream endobj 532 0 obj <> stream xZKs JǡðߤsZǖ㔳rQc7Av잇|H4hF/4#(yvd%E<*9?+/vnq~~~v(%|*N5P )Q*^zy~BOE*4 HS)Miu=$iVeQf7S``7Xh+Z8'2n+<*ռėCoo|Sg7]D Ǯ˹*T=)`M˜愁Ao(~/^]ViYϯ)Pp *!UF N+wip ĪUv>g-?mtRBKR15Ew썠WgړsD?uF` 3>߸]ZWuaKz4`lvzʆ r8ՀFN7[G_ӇxuXT Nye>vPFq:amB !,$?Is5 7FܚxZ@M /˥{Aιv =b<;`. -FlU1-!|8se7ۼ2r}3pz2mA=i"E3E޿˕upYLށ":xHAfhjخ3У 95/1.*Hpym6uq РA<}Z~!'Ehtܱ˜h܍:"󜢙8ϒ,fYcB2Eq#-XҲ$SD$mkǥ89ZԵ-Q;E魭x"phF{:9yM™#Se!r[i7]y2'V !^‰ZHۏ +dh2L_00?0H. 3y7y2Q,X*olI 1d,LYÔ| r"F+tB`^~Mݕh ݙ;nbݎSJDj+<$g޽8eyfs"p ;mָZ)~^ڠ\W>qo Pم^w7KvΉ*mΫ7a5K+VFB `ļA_ :ƨnA)&}BmPuQh;`>pm mv[AH̄gwpjvE[yXg lq TN&ch׏3$8X2T̞A_Z{,ϕ#|.~^gЛ(\n_l},Wk&ۦ+pQM p YUTt1ܫUyas}.E&:Lh 6XyYfpV`6lhJ*Q8n:l`9?C 0H&HH+" +p d "h7K#m #`5Ѐ^=!Pu6Л.dB8aW~oE]H5:cX.PDm6](_nmH[Tr+4k[O+D1ePI?]=vJ Pz$zҥ4"Or+h{u΅3~C%x_m>r||sS녵vֆB5H E hG `ȤvvFACRT S~uJ9)u3^"pڇ> \xJUj;ND7/ h"`bHۗ0@w&h@{16X?!vʦ1W47cK.MHq:Ǹ,e!"4ԃe? 8X!8o>Gf|zաbajY/x 6kKhM0M9uaPhԅA hśPFK߸]6| S)qGf8_tAJMkmPZ3|{*J^:!A ,IuP=TV&k(ҏQ$͸—6HЪ~S$[}=6-t-9.B|Rg.*Cҁ<q=4C/<Bdy(uҘW?:跪QHAz 1zz[w+$i&чv+P>Vk3ࣈ&1B2|,VCFa؄* +r{?ޅxTQ5EsB)'XLd9g&tw×bu <9-ۥ15e545ᛶѯ 4bɣ @.VvO&p9 +BJehǁIBڮBB{03TT WXέQd Wts\+[XJցOox(F; +ce{_aO _km(c!Qtmz!U5f%MPkJDl.tc#MV쏦kg l3'}J!%W,duv^8MAŃFPoljtmyap`>hWF :/,x N8ZPCwzd&x]f{{妃۰/wF}l*kyBzү|R/Ourݞsҡ.Ã#Ի%y\w P?X endstream endobj 533 0 obj <> stream xkoFdq MR9>8,3[[r%}!.%%CȝkzyqzsqJ]|>=Y <5RXg7ӓ2˛ӓ<+]GX`P0]Vgk֢b?"4H0uE@gٲ2](`//Z)TL!`!18rϑlV"X\\Ȏ(PtHy LсS|H]>dBo(T~Qcuv?Rٷ֜i5Z\A9/rgy5̎Qߵilk U 7+*Factɜ=~qKݶ#4 =x莭.+!PHϙRX߿N2e'|o]hd3ߺK} DԲL^HӚ+Eb'JesVޑ&|e,]h VUJ%>`yZ #Zkq:0vRQU24lCC\2fk㥸I 7Y~AsB"!tgu7+Lxܴ)8-3Uf"o)xtL(|{,mkcXMJa1=vv]o% rPJ_H3G_VU{E,nxWqt!%%GBo8__}*K4꾨͇",b f$SDf cX9F2ЃtZw܁n.K>HRy,m&(.@Ym!ցr'KH. q}$L8C -Zӥ[\l\<m@ĬC@-> UmSKD-R-W1 c (x/\M==,1ӆU$h6H7ML:}yE LQ̖XV POVm.҄iAa}VJJ m_55 7G@DtU;yV#flHŰa^%HKnRƁοģUֳb=985v,kGIN'$F | iIFXef E*~M`zxvGT >k6x Em&#cٝs'Zh%ϭۯH;BpL  ){E݌.U]#+8\-َɺI1)1pb/BsF4#yfXFڬ2YsA*&!,vևnj;#kB"9ϝX'rr޿o _`MO;|{#I_7V,nzf訪x $1OCxr*K+bfw036Ss).ftTVE2a?|#ڜFT-x;九:.|Xq6LW<4&q{XI h4@QL wY=z#iy8 (yT/'7 `\pY֊|wx. Elñ&gC=S-a066;<Ry?t,#z4dI-cL$ȶ6 ꌘZ9`#J{::nEC;ů !vP>@_ign8Փ4:+;w ,.eyO0H`s<iɫ$lQk^Jca5ȴ>YB8vPFW+;が{uWRʩ[TV**5 *舷"R+|?q;lӻaṙb`U1o> stream x\nF}LswyɮW `#(J[Id VEAy4<:]7ٿ~g?֍g𕑪O{fn> xv~n.}~u~ .LjHZqӳΨc7~~ފ,FhČƂ,oۄ9JCأ %d/{m3gȾ{0ywynǸ̚j3z\`Y %7:< (4<#{{ދ{O}ګW{&v_E`%OB#csq2afl߾~lzυq mn :(ۥX-ؙܼq *=^HT&Ȣ@32LXQq:ܥFKkTC? 249rBJ=CENYʚz] ÔC~%bnV+[zgjw0] !|x \\޿_ïsndCծZ v8BQl &5NKJMh c< 1 ȉ!;xĄUD ]OgB\ķ*h-- -]Hב DH_>¶kOr{c + U~dS.Qs/ X 7mjo[#8HJ{.sjN+FN{k3h-={R^).{iI'|ON,Ӿ`5uդz2c)~V6%yi)~1bu 3vb| udA^2 [oSci&+Ƙ8}g{>~_[PChKv"k0>dPը3qUDKR!퉞ިU͏Y1_*BםYTQMf]1i jH4 CjHk\HWNZlSKsp]Nה6\^ sR].I]ѥR~iT[9͑֊g +(i딴V4Җ I}ye!i`TM]MklW)) 4%+a~ >7NHk#j3=9h~\u)& M:%h-P%@E Y`+gH8+\RȌQRo=(hmǦɎ! ~\ز*wގVV~V J:5Oe?-ό%@]d,4e \Pb!ə$D|(xX2PRlXSHܲ]=O{&^U'MImd&ŒTs\nSe*HGRN*ӊSJ]$,4% \Lʔ1debgzyV0yVƀ:$-hagɇԌ \Q:*(b:rY<$LlOnQr*~"ԞzͩWPSa=) ,n'ϛ=i_hh/6^N^E%tSD[9h{EkCADP"rEStD^*~E U$LZѸE%IUJz_ݘ汭بqU$E;[e-㷒i i'5R.(APJr%ES|ڛeq@]{C; AlY"PسYjmΌ;.~x okL-aml{fR󠸱]Z"`W&lqZ`of-]i7KvԐx^XBoy';Ԗ*prQjoy'Yh50^4 21!-N|' tʄ T-O~ܛQ -C1W-߻ ƫ:`sJ!Y EeњS =HB[1_mS\M5GLl ؤUNv9oWjESժY)@9@FsLp1d=p< Ea}:ewxPF^A/RٲIܲtX/kcηѦNs I3P*5*_*y4GSdiv!"tmG sa4И鼾hq&kyԆXQV d8)mxW6)xP'P9mofF)KVC$:2JV^C9O NC\Ts%q nJ,d*Pʣ)EKY"T?Nk%\F&t'Έ^У^0],6v?j"ϱ (&0+w偙vbKz{0CzoZ[KZhuۈ0=%z@({T+ ^HvHaШ Vub{K6M'C[Kr nAlQV^k!$ţ2{FM%WyF9pDf^pvjPNu bU b~pCg}Ym 3&|AMY+CB]?@ T:9fA a&tr0`vOe2ƩW@ZT#!tUV[&&n (rE <(Cf$_gwmMJZF8jfwr/ endstream endobj 535 0 obj <> stream x]s]3x$="hƖ$Ԋ:u,!)'pRJ3mR{DBؽݽ;=:=K12z{z²R9WTy]ݝ;z]sFYJm[2gYWY%s1kmӓOh(pE8B#NUIeUǼ2R g}(U '  wSpB/:~ȥ[$zĆ,M^) Xjs!Xi~`(QBiLu4@DbӤp ELnY_Ѩ…(0=Uo0ǯU4p.?xm' 7pz q[s_bئ(,!r\<μy/\b z1RD%AYp,-Q׳Ys>Ei2W29X'w愑 _!s=W}+|g{%}Ok-HtxFcZsXգہJ+qi#;r](bmnpua[g;bmkgpDT>BT, Jfv0jۦ;;Qa[M[HҰU[t%ZU.Te>Ir*ΎrdUºz _s03'D5τ LޯۆdYBX0ftuc۟:_wϋxy^B/MhMX/ȋs^koR Ȑ UGJ"RLxZDI}; Ӟ4{ƚߟszӦj:dpE望- rt F=v ޷,J!vT\cl^x[ /x# a(Qx@JE!ɃBn*A*^06zن*q ZaPo܀%@ 3?*VWn^"5XT\yCtF5JP smRx~"ˆ}dhSfF"q_Fq$Cz4"QK#x!m&! x t`;dU;x#L ~ TLYg1Qr-f`a^!A] V⁍G^\嶮I۲Rȿ(5BBc1^A5S!n>a}oݼAb\*QI,=Jf(G݁{)e[UB؋U%KG4eRMtу$ D1ĶUn[XdJcy:UGV)U /y6wMzPiog?Wm}lP+j Ήݧ^ҝfqeC`FwOr@c|n g _s4ճ3AWf0| , jt o+Odlz~ZByLPx)0H"h'IlVE7avX=Pkst :h埀 8yO:8܍/ЂpF/:~ޫ oO* _upgupfr%ڢ@!,JnhfGe`9\5fytJ" k8 QXw׃w}v+Ը x_bJº㲑uҽ1 =bǞH큷=l`o:+H]ZGS(#oV߬{}/@LVkEC'(: ]C :dG 0twF:(8ю] VGl-Y Hۊ<]/bX&4F6n-!%8z=73QYvl.%-T+> stream x]oܸ݀wX'~JLIzipsu·p$Eڹ˿̐HIvmEqF3gg?ce%VT+U2xTKU6Ãx9<8_˷~TZKVԪ*yS44Vu{xp" W#445!?KXZў+!K5IPzGUYg:ݘ 7,Vթgei&޴@rrHJB9dWK^#Xm>-bs4 ڑ\|_ۏv{sb]2gʰH`ju|"e!n(O5X:GS7j5ec?<(;# %8z 1(N#B&1 ✎RSy'24,SCC/V12-K,~/gg'?>YO%Ge1}W/VK)}~ڦ듏KEuY魅>ڬL"-0'.bHàa)K!:WT%O 9nBJs\zyp; zyg4"|^uYˉ i(et:V:^&L/UŦH*O/FdSZǬڇ 0[?k4X7yg6Z4lho+4hDZGzo{Z(ٶ{<ϗЯM()Q\b5i.T|mSHm5mJ۩gW=@˦tag2pځ';94$ܯ4 Fw[HSCNJ{ݱqSB\ܹqSzKWNhځEIWtX^&dӅOg\*`<)^zh{y)uXETVǥB#urÞqdZKԫdJb/q8y9BtmDo{4dnX@lwKm\!$f*L(YIv]=t@z6 otiX`c H=\37րI"fmr1t\IݐlXaQӁ}DQdP1#.y\WH H3׶ (;grJ],\q<\(9G-ʟ cEsnl3τ,΄C2 {'xnvlLvwB,j'{p2P&Ux\윌)2+H/7dYmhӉG'֠cBú䗔ŠSuHPН7ԈK2BZ3c-tvÙ097痪.}ЏEkHo Ƀ:ѳ::=RD) &ʀ*Xى/olG tDo'9"00.q~V1[$kF`KsH7+lCʎ?n? oQ廖&å q[kҍwH4K :#'+@2Ÿ&J pHڍ#uRx)|]bZ_5cx!-k<,SZ eiU)u|$AcX_[WRWڨcj«D}s|dp1Jzc󔾈T[Hخ: *  3fx1Ob&(-qEN(un L(6)TժVXXT`آ\ oY𢓮gp36|Q׷Vo.Y9[LW^ ) ^lo^[xrݡvϧ"ĩB!Mիx$:"e|^h toB_RS^E 7Q|Q-WxnnϫђȑPԱ{%ɪ)Eb ;]p^7*od/k(9~u탍Ʋ3ix SZgj +:dכMd7}!r`mrݔҤ3pڃ'6mn3 i\[Ypz3Aȅŝ5hp}kM Gl9B;(N2Y%8㆞sq\Y|8~'<'Rي71{lǽ9.^l v^Պɽ%*QJM+:{*7b*RwdNC22DR>̅T{>k(bl:j1N,5\#3-9FBgs_+P]LJ#[d92g5M7ה]|$ΨD7}gT6QiR h۠9ɏ%~S~Y &'^:>%> stream x[o8AVOIv[H=&J6wN_3(Y`(k8pȾ<>ˏz٦0xn`CP*9"yVRset0-l^9nbgQ,sO6 yGvF0T^@{Ii?Ff*sbuxh\B­!3cA [/QZAjv|"'P 6uYe7@߷wX@xsVֲ0Jn%x&y7PF`7kX̰K 5"UYXǡ/S)e5| 엋3-~S)ˌ/zXE>J<-mn xP`DHFBF./1Zf"u|ڗgXY(2&gya `P[{*%p :l>hߧPj ?Wd2L4s. hXEpTꊀĢU6-md춈o*` ,M[zI*Sᆇu s = _ݸH7wh\78ikb|WnwBCԱ ۦ|z.K3luK&ǬWHnLF0?}u{jHNh ~;.M__ N!ail{axps0eʔ5'q=oZ+kzc=}MC߬?G 1=vm* cvMz?kBk`' LMta3?kV!U"\J*e-:ЭfQ2A|xڻJG4-*fHU3c'a}{R {=CITE7f"Fflm]gi0w5qZ;LGΟ2vxZIVOԳKI+< :є:bjEnHB1 j nW=Yut(an Jph{@" 3C$V̕ݞ֊ẘMo+IL[` Sp8GPFzKPQ%Q6!w}o{F'r,LWƣ.{Sf$\RTI2Ɇ:4TBBOD?lon _l8ެkp,JM T5 Hd(a(Ϳ1M)y!=jQ]]i-7T:4̭ҸX~3`7ӱsH_}_-'kqD&vNE[>q Mt/w+ [7;1DžCHU䅊K:MS .sMpN"z=[uf7TRS!*Lqmx3Y^n݉`F_pCȌW!E0h hM5Ҝ~3շV`woŞy#%Yw`dcQo C /-n!(rF r|^+PS öِ{뫐OSJ:qft('al“,i*H).-"v`l ,[Qbͫwcݎ5"M昶u&iu $J,Twokϴ+pJwMPsN8T|8h&4#NiRj4(Ox a|  ʀHៅ3ujb_k|޳\-`9$d"uHsH5dpn!E/gKbV*m8= mx}?wKe{P^1tJ #y%=dݿRrA"P9Ÿg|Q`EA-bS_ƭ endstream endobj 538 0 obj <> stream x\Ks6Jǡ+b_igSnE\98{Ǝll6~ F{Jy2|n4 on./̄(J|Y ?5*E}ď//m./_./Pг>-G@W)DTe!۬E YU"DVQ5bچ@EvߣjU1웛^JB#^MM ^UYF:f UumYr堵0΀)9 |9hm~1RC.C~%.6>;sQnW~\M1͹2U+:ioU&t˶RH04(4#s{U @z  @#0xazsA0~*#: BTR=HG =jб٨CF7uZ8e8rmn||x16󥁑ǰR E^3AC)+$ 'I 3FlXJ4Ϩ6?5Cx#=@{6 `m١bI7hJDA%mNƅոϥS,gVQۉ9JG@q&/,V {KRR /97Z*\l/ZcZ[١h]]կ&+BPŘIaQeQ 8~/:4z ASŘF  g~6@ D GhSP&)Pe[zZN"sy${t]{6|ZHMB=`,ù%`:5kQ4PL허 -J5E((uEsK֔hZ R ;[Nfˇ,.](7 C#,!†Ϗ2^SZO h+9KGiC JR01fmb}c)äX0۷,׀&~8;>j_x~3yZьp}]3t 7aɢrĔg1uȗXX9D(U P+$%KR&]6Da5M7u’%UJ_-דsUTUT JG!^V%H`8@ >!-ATE^x߂/[ AGdBZ[h"}г:lwOG\<+%!DU!3wT5|;:u-b햋kO% x_#l_5>Yx>ӯWJ`:6_5˵֯rcnR(  Z6Ȫn̐ލ qbtލ uH$5(BGVh zr6p۬䕼ٓ#'GGdpΓYOȅOCG+VVZ 7&03dfaNBU-̎NjaF:@jUcY\3rsNtX^ F'tRcnxz=FOvKBг@PN{Ve AχΜZ|I+xg|L,$"EM;-Ǽ|(rBpJ(hpY!)+ čN0n,CYX-ѴoOĺvqIXhD` 2*;TԪ\ pȀ^tFRvSz%Yv<^893 $TӡIh{ZW-骅"JӁ7\18VD'P*7qr" 9:X\}9׸'W-^897tN0腌09R H U58L0{JXmQ^<.'\&OǎeTk|V t9]ŋ3 Xc@Wugv1'j?YH3q?4™E@ҋX &Aг^hPyuVF[aI UJ=QxفJTtU-Y؊#WbR2P崨^nJ.D-НD5d5t(Dž~vӣ("qE{ M^h7+|"ְ(ݜUa/MD0fv`yvf?nRZ?n"O;?C+WҼStG DTe`KĖՖ\b_ U+_ 'ET!b TFdjJ I%< W#V^hL9$o}]bfP*;ޖ5~tk$;v4c'i}{ Z5(SZzشxeF  ,$YOAD {V`3( rBꪮ'$<2= $1jVϾqe$>_nO|fI[`o_P@df yx<] 3u {p 1y]5-.qe)F#|L!^Ftw3ي-p@s"KuX5 ~Ƹ<$4;O%͏=`8 ȭ#‘bktpGTn32!Ꮔ-kk)\ \|e6+Ғ^{^--ޝ)Vޔ=K>fw.w yK˘6V#!ϱjvE4qHQ;{7~㗸H~UߧpQw+1^s2>p 5yA'=|Y#n?Rj` P!w7 [Bܰ7̴y>PUW@2-B-BBӴ7-S!YY:P endstream endobj 539 0 obj <> stream xXIo7 qƨXMA'.zpzp&cA,ْ\ pXNm4o_=X~}-)rq^qN M9Jӂ\ۛ9Wzurz LAC`[@,T kUGc t׾8H4X犓Yj?yR?CEtbgye5eeXB\fGWw8\(S]kg$ߘD |8AhsU6O%r{9?SNrM1{=Sz̦$I)Ȱ{.?!\'- 7= ЧG|캒{j-o/8ϻ "\$!%컔tR58oZjmCdpKgv3oh{xmK8"tHo߶xGpSdX sMsnӰ/uQ\׽H'{Zaӻ PPZ~^ۯs,s#$/wIz(m K/S>4=l,l0a=GXZ=tztƧ#,xV֌c̍WaY.$w_RXĴXYDWR*.7"VQOIBz_UsnCKPN$6Ka}Mţ̰[rQΰPp2ܓ5 OTa79$X` Nļ |dLg.\(Z`1s \ֳq9< \m|3-oÂ$#dof?w.Ƴ|jZL)lDU3S" \T"80v߇&>za2+X´]\vctR5Zfq(䏬T= WN.a0mg: =%zKT+0{C3$O"j> stream xZs۸NBfb$>56NZ_v:N}H(].wwD/wcE"b˿sVJgV3*ͮ?76؞Gxy~vg |9?&ӥJl ZTg.Uθ`Fg$B4Hc+""<=RuHBK VR.JVr+Me9Pq*ntTWa 2+(Žeb+T|Jz(&66/t+.T~_f($}+.t{yެQT5|C5٧ |X\TySpCÇ#[>TkV0,3R.-1a $?tB.TQצP9 t_(+0 !Nw֓`=044i?+|jz*yXXfP0XvLyy f?N{T j  sK~ Hn ᆐ5( |(M~"WI zl;ˆ@ll $.i["5. |8,vwtfW @sۦEٺSSoce 0PhW<0!x@r6epKnZL}&#нY@\~̃y qa)גu,N$3mM{SCAD;32w74i=Cѐ'z7lʱt{". ހFœ:eJ)Bƴb, bR[ [M!Gr&x$ʤ"mM2+UM8K:[Mwh,!G!e1 u\i-'\ 5H EY& ;u7O2c.mԐP iSqM\AgBT_!ю9ԡބ'k]IՊ{ˡ0P,ƥ*N?%yWsowR1q\,Of\r,&-˚Hxx3/)HLG 8H<rL Tu}4 C2ԃqrL+M\hEt4Pb5~lTnLHBj{ @wH !^N880:!d$i1Tx$3C$' QU*Dg"ڔ8Bu]d4vrO4Utv1;E3<1:C%c[gm8Ҹ҂lʺ 7:oh0Mc-~x#0PY x2 = YӶ Jp'|ђTմ/p ;;Na4.4vbܸ_Ƈ a>TrsN뗜?3~}+Cvx\ œ2 *gHHG2| Uə,7tޘ:upٕ6x/&_Mu’|C}xu5?p4b:*<^O ǟoXW<=3uJd $rwV5 '$rUsLVι-6$z']}C`(Yma.d*W1ʿ$O%1] vtHANmY)LP5]͐@"5i6BTdѠ&>`jhU5[P8/sk7>[h5NdJBE3V}J_ :mr&fN>\ݳ_nӑdܥ1I v|J6enY[^Ԁoj^K,;rgxfűhp-9z>tw <ܷSXr$RCwkfs;MV/NJV<Ȼƒ) ,?t_H@d)GƜO^o>̭-r?~qׯMԥ?>o)cjLlS[P- ~-q}}_i2ݝM~8ٝύmSgz<̇eIi<Ɋl5$ggB2y%+~<]!M g%"/EXgr.h\rz1GCǽvL:1`OLGUw%iCM_ _qJ_9s跻K=XuUԀ\xdžXCUNҌ`xtj%*um}u@℄n|DހQf5d#6H7>DhR%P鰏@/ ;<탊*k ׎D0 Xi(&ԅ ImYŵh}D]ʺZJ1ifjц4'He.`W.">$N>=}tچ/Uef p!N*C$Cas"<= &IjQ誠Jn?dz'r bذI;P}^ endstream endobj 541 0 obj <> stream x[_oF7U䞒)}pfwHCH8:.E7%7ӓ^LjSҦO'ev ?rxzrNO~9\P 0JY"LY:u2! kG4Y!ex~~t\e!۳nFB#,*K ggeQZfPMbS])"̠h,/:lEKP,lz]-z,3eZ択>gf\f ?eȵ'd]mM)?%Ϫ&j? 5 G04cYZx8\Y1Ҡa [gBߗ㇁uaWW#}WJ66N'd JZX=lh6SV`X(Ai:!GtiPM~.c C&5GDT~4 NkkWg}Q2`q ƑwtNr,ָ-ZU -u?3{Cot8H$TG4z46"Rl!zt1dITra[SFr0nbEYkG5B֤`_u{>0R\aތ%z)#\J7_QV[L;J'K"Y3W(ј"BGM_Q Bi'ov;OtڛψXUDL:EC# P X>jSt,TݏڲcL mtal_L0\r9;5fD]7Y-=%R<~6Pùч?5˻.gwG]F)QmanVw Zi1_w-W( tZgy~8 & e^ ,;zby?sPꖪO6; daws~@[=O*h谥 3h.I=ɰ2]mv1 ͖#qIR_srn1rqh%v8P4^n`mItNIeL_e Z A a9uiw$ '=ğ5~6i>/5ZF4e;1 Newt_}.?A54dOћ}M#F}d~ A!d$ܳ1R¤jV_{>Xn)JR '4 i2PY; 3~5=}9_1/ϥ.J7cҟh+G:,}&b$9hK"IS)a-<:&Xgqw(IO>Aa  } ^DGBn0 tZ}~&ti_6 rn*ҫcOك7*DXj!X DlcP7-)GQf4-NogZTzrE xd`|i0=mߗ_ZsndPet ϲk]Vib9?dőǧk_pTȪI_Z#U]<_>>)L00&.$L"{H|pxwm<"L^g;,q$qkJ0昴*d{?^I8>E):/_B8!C;$}_oȏ˲O`{;6jszJZ;R sx񪔅:Yh|o ՎGtZCCfj~l<==Jg~k=]?~~P˚p?$^¿K_v@v`VY>ÝTy>t&cΗIa_&\hGV ~正"{݋$"pA1<ร$XFB~1u ͘} EX dm8Iɺԋ(.]-W{0JwꝖ ;5z]R<™…Mn?Az d O} uQn j `RTS7T$n گ+8oT[NT1 {03O$ϾYIc*Ƣu@ aaz_,_"h>12gfH,|Lb(/wV%@ c[0uPOB4A}X/$cuJ2$ut}@$TՠqgDLD5NZ endstream endobj 542 0 obj <> stream x[oܸ7AR`)I鵾MP"6;C""\A6ڝ!93p8<=?>_YA)Eq~}|DТO-mqs|T7hQoG?<΀@8LAdd E#kڢD%,Lm QqsK!^ H(}qZ8\@[ VFMu@+SY&VoEEsrpf+ږ-VV\VllÅjG`H^𕚅&(AHk&Ƹ-DE*љD1n}g]Cgp9%RdKV05:O>sm@}pZ¿Հ(@nponc!sXEk?3(;#ۃYF[Lgy1,ږF09܈Eyi # p"'}+7 F'd'WwG-L~yDhg<{ ѡ5Em K\mEƍv^v,Xo*~0#߬lȿ޹rw)0fM P]/ܪ_oȻcˋ,݉͜O~klhgC#{m[W|GFRaMi, %9I?Nˍ[ ; H3an_<)#L%ج-7/<.0/]fvWD-Giؽ8`,HaImjG㒙5 3e(dV/w7 HZ<[_C[. &l,Pd` 6OLe -:kB,{a7-1,]7ùڝ^hdFmSc @ [1UHNh"<=$)T?лRL:+Ew]wQWvp..vא:c!Brm^Qkxuq&o04y hzݭl[{t? ̟ۭ~kcr-.SPߺw,cI5 dr&KޚzzڔٿF x˱.ٚsoEu `B1%Ä#еQnV!ӊskBh)qƛSæwy:KzzqxHj0 =1-~(G?^}Vm( j;gCW LL#8[sI\6/A`ftry(=pq~gFO"%c&SeO D2)n|k :) pp&WwZ*}lwɰ[tga5bvL mf]l]ㇶO8Є_ro',& m+'3OǺrl%2¬o[ϩ&%:ׅ&XH>ѳwdGOʶ{su ]F1V:Tg^|RQ~N+.-msU.ۓ3_J8kßSe'u|{낯lW; Lm~&m~ s-~s'} sSW{ݢW`M*3@/\_X6{M 'i ^CP4}[qFA" ErҪbN+z@?#W__kG绊R P9 }Y ycP*`S]~\1"50H5!2ձ5xM[9$V҆˜O=px\Eˊ􌍾h;kXM _5i3Ї endstream endobj 543 0 obj <> stream xZoHARQ4zOm{C#q4־đdXP3Cr~$ˏ2"/tr}wy!2O6y\({|b&٧?_//+³"e.Ju"dnM\^ܽ" (C7םF\#KK ^ɢ QzLR=Uo1X\,4Օ_+ Z2~z\"&`aӗl3UzU%3c*S-L[&DO r~$_MWuu-t GǑ-:c3y]i[E+xcimۣ[н*7UaEo@^J!F΁h3:! ҂DtFLQlȵv/7F(nY9)Q4Ř\$Olp#`n2]S:tQvpL`*ŽQ"V*w2cTX />4&)N@eJ<\!З6W Ib%' =s>ᦜvPtse,1*!),2zC>HЏL@FPf^J>r3$\åt͔\k;ZKO2ҺH&vjPwMVX<_3ukk]qC.OotXM`IPUGllvB[ַAؾIw78/xt۬ls\̰6PySƊP-j[5G5BL원"ǻ7kJ6awLk7.Yؐ2v% ଯ :-؜uIӻ\ow% Dx/Dzw}7!YvLs9qG ]34"HQ3jKU-.kuJ-jLS۝*݉-fu1!aMBŠ@U51$_FQs<7$vs(l~f4S;dkAڱd>r}sS?:n,h>r3,=|Y9meE^@SkDEOGZT! 3.iͣXy㡵v@g7ow[9ϚNxi✸+X( <ĸ]~8 $'3%:C^V!k6kfq&zn珯~ʄٻ03UA 2GYQϱiW1UA;]=so3\=kHF:АٛY~YXg~|I-2?Kw[ȼ~"kw=k1b|ݳFzhPB8jj nJ9L3/h1Uԡץ`(NctkVE͍' pҵ5$ Śxm1vk6 vMG5Q ^D$8 `概8_`U3℄M/jL0O$H~^u=2j7z=.'w,p6]`]G]*M^HR~trz +\d[!oZfHtHP.ŞZɃ;xt_I8Ir=4;EF}`c;CCN< ]?`),!8ޮԣR3WE+?}3=λ!WA0 `/.ۄΠH/jC^nBѶmSVi?1f`1툗bxBp6 endstream endobj 544 0 obj <> stream xYKo6Q H Z'z^kGwfH=9Y|3p.NO~|)d_tV$U*>~ bPܪa̸-$<\VB0La)!=Y}a,.%zuO}`/`%}Aq 4N 4=JD@Ҧ` AW=ӏ~9Kf{>0AP\O-,jКWL! 5P VH}jތO[B,JUoXG=йĥNBam`o-BN"$ |JI LH;; c1 yI&ɖwqyfQbW^к9&}D4ISr#=CoY|ztA7g"rh2f4;nqG VLt²V{bmɕ)H,-tj3u_}%nt tkm/zOK{(~[u#AcWuo"vd`P_krq㱘!pl/{ I,D4f@&ڙ!F,Vxn>}0:}@׻ sR7KGVJX}! Ÿks/:r4/pKr~:5orZ=V"]3r J)nF,u6^=W-!glG- z_! c=u{8K :X/A_M6yhq 1 endstream endobj 545 0 obj <> stream x]sܶ]3|i,$>ű&UJs9Q[dNM5A Ox|._^[Qp*U\ޜh4V5'@{צݝT-~9=*??:_NO.$`2Y+^5E+&Q\0-E4F,32j2Jb #/+VFK=i.@nrTUa 2;(;ͤBS xUW6C>ɮW+]~\owMW'-j6_:WW+W a OYKUc>MThl?*+ 9/RyZ2 M~9{@/us|ae]:7?uGVu#!$`?{صڔ]Gz"T$p;v?ןZB5RIVɡW9kXSܿ(CMyV\}zz?ow_\b/@Yqo_48Fݤq53-hzU39tQWSjWN(7c)m: RUSJٹLII!-jb DHJ`-q !iCijHUue g gUDNX˛. tv6h}~~;۽Zquxb*㩿x SڄNK1!@N!Ӗ>NV=SkpSmF |89Hj;$a#8M2(]AqmkPippQSUP3g pH C=c/D<՚| :7˴ I\QbB|ZY>P dbB1w!kyśρ٫Xl"(TDْ~ 2c^z0m  4,v 3Aq \Y.hKh&eՌ%"ᙐ,1rXҰF>U&~? dBW+2ZÁѹ{޹G8, ^B1\GYxS33ΞYeiB]-ڃAY zs= 큐Wrp:V\t"z3aiRY(ft z[H@@B~=֚IRUucBj"nk8y(,31}RW?Nyd3dHRp ' W Jk&-xr fd"a[f*"  jH"deaa.*`;f^V` MWA`8Δ%fNEOBcAwwujzk }M|E7^,*%O vfv!kuIQbJB`tB yVɫN4=b{GCgX [_ݏe:) ŻI4HʍQk EӰJ [%ͱ-`%gMeQ&[&ztK4<x> `R>z |Ti-)WDfg]3(NcA%fO3X'22p21%c5yBeRH:0߷Kdkjb*i;&bҾ*_SІ+KFvJa %;: 7W#3qM6~N7~Y SL;j({rNm~4yVh$l 43-Y;`:pFM$βPHZ@! %u۽rr箝w]U(*/uP=n77.i zÞa[P'}qCIнLupL>}L p(,j5M PKt%N3wv{%CS;ԈJrG-ǸGYӯ$*Zr> stream x]sܶ]3|$5K|S]n3J w:edi2.@Iv&3Lb_/4#xvq}zB #Y-J?).:Wӓ*NO.GvK-J$JQITdw-*IDU:y3BK),E* S+dp~9v=$=i Ϋ"5.9a6]f޺-P9i5 La\U}>.?cqͷ`a$=ѥ{F88GmEj^UY:# ;'y|֥iqzm+/93z@'!&%H-+&*e ғsXZ>Sl[x\G!hR 4.`lu4G_$(6rX“h`:~}q*}i]-USk^8[ (z Jz5JG# 547$(@?vleBΙ>i`!`2`\ O^,$ZfLG=3 C$_D%ҲMVVK lYY-m g違$}5 Lh#lPP56UbJFp֦6ᗸaDVHq=tFms8MuV5qh}D;n2[Y l]6 c xN3| Qd 5,3rE; Uӏ9$h-rP/.@1XH`=[xs)qϥo-eph,CQ?:ـ6͝)f×1=WLu+^쎦2T!%PbRrRt?fFY{bѪ:\?3\)ׁ][)GΗ@p>:pGWwC֣$.PGS9#Z?:뤷 -fu8~ $D(A&sU?FFk#i.USL1 FIř=:pdJLS -(|F6*Q,Ϡ 5F薵#`갺L_N6i,OoG$qMbxNU]+|X-Û^{moWgFw]]_;~)8'-Jyl,b:f0fo\oԔ)'?Xv1s̔,CmE`Vڊ]x o/u؋t !+JOa Uz]b|v/nOV/7r0Mc8KC 0JD,~pp箦@dˈKemw N_ ʠ7>x 71Ae/G s;϶MeʛBz9!d?;P=9~ts"z4mghoVz!HH|2xD[}G{(.e(jtתܙQ#Հ@Y6Mv97"dCkEE`5E QO-L(g!2>(to[@*hNLp#C Nnc8ܭpk# ]?:=4Qy8 endstream endobj 547 0 obj <> stream xXKo7 qרM(Uу҃ݠH2!:raxMg>~|~h'n>cF ^%GP{%#x;Egoϗl*U@[qC1+#SȮ)puFklNZ:\fyB I%sj/a 'd^5L˂Ap7l".AJ;SFi<騳y~du>үV4o/NI@1BSi-a) IXPy{-ʳE0ێf0#:P=qة >ꌇ4gTH?/5Dq(siퟓ^^67yH>$US!j0%/X/N3P>V[+D,2, @T#<H~wV(K- *9ZHCGy̽P8g/VyyQ!2w1T:Xri,Xf|f)kY?>߿nj~?j^ۦGP[XsU@nESBjL'g`mfߴ )"cS ­Œ#el :́?  $QVšl+ vdzET>b*)TkAٜZkj^.Z CeJT؜])D/NnRSAL+d\e)c~u6;'lJ'=㌝J>~uo[es[օ͋T6~%1 芤<|F<;|jY~thv;ic5C1.mUsco4 (Uǥn_lBldt3*'?E¯}2rH#3XzXFTuϕ&OxTN.n旌Uَ򎚺ivε6Z@>)\5^ / iໄ4j˸?=DiW'z?'{N~z4c{:ށ @2ѲċhPI5kzIhCӕpc{> stream x[K۸OIO)ZC&o xYq-קAEPM%U)Wi(~ݟחy'2Y gf^UJ:~?}wyQfcˮpy= 0 K0]v@ExV钉:l^^ܽH"4H4uEDDWf2!QSףZ*^ʐ(}*Yk]?\ց*W_ rbS]yhe9({J{WT|IDirXvSȼ-V*_w ݁2fjNf\®n&Xĸ2"NEo ;%))AIx+V:']}J+t(@ccj3%}Vp;=+فCJc-Rp;+V\{t'P )ִJۡv4]9ѷH ~x>6(D$Qq2<4Ф[u- _w'<};czxЛwlʤvq4#O-Fs^H=)A=A<̬QMM[H5H=V(@EzB0%T-1cK$Ņa5gR=7^b, zǭ,W'n <@sC!}(yyFԠ?nµ^]~Aa߾xOBmPQAZNH:HĆ2?16biHlY64x"8Sj@xz0OWҠp}8#UV/4#}d]2"hHߠ bXeivDZJk6©OXCZUAdU*K8eLKN)|39Jt|ݖ:mw̲ٛ`%ش~WC3Ew.| i[? .H)bfzz^L )5bbTf3m77P"l8DOL@XP KRJE4`\  !ꡱ f$?)>Q?ƅf^lаϱXX?9<䆓 B,LWduGML #],s縉s} o!`VO'x/{D`J+Tgx9h(aqZ,\H2u1Ď򂶬'8ƷÙ <qR9dsbg')`Sc{8d̤*U Jle\ƫ .°2ЇyEXO`vy ۩q:•驃w`k&CuJh5m$\,Q2D8 dYIy,f1WdZ-m`_e1 d d# tGljS`w5 #C6.[*oSiGr53Maا9ȴD- <0 r)6} ¸j (`T`c9`l G|]1Ț.=H%әe\i:V ?7?>vo_li_Gݶ?4tT*E:"յ !bZ |P~h rWNmG |Î!jI$!&f+ʂIUy@hTlKKm _o{`fC\cC:X `p4l;U7i͔d DdU5 cG0AOB5&(}% C8l~n,e rUxg.>n(ӤcL$7 =~Lt CaWD)b~ QYh!-6fxzV%Hւi~6z$>> }G!8'c=޶)(=CXTK'ǝpZ#㓒PbghJŢ@P/׋BqA*n&R5aDԗP:V */Y e]b_Q )Ih}ʩkHG~Ogϰq㛫'4@=#*iLG^R'rw6JcfLr7E57V Xxs"9{92b nѤap˘"bLJz4sb@2IH$6Bk6B*ADDֆh_"F+n 1bxd{mV-\҂6%S A<!j/1/ endstream endobj 549 0 obj <> stream x]I8cDcR-$0h`T0hWy09]Y>. I|nt3}'z~z'R\t''O=ϧO^ǿ<}~1d'zi*NNVZPՑ}GIΜ8=><}_ܣ BadrBNrxc)b^_/8NIz']D뷿 3(V 6WDIi H\Yݔr~}O/p!̶莟~b_ + G`Ӟ?s6#֛-?1Nm??.=^[w!?/Qq!Fu[2ɳ# Tc~F"Lq~8]89>"w;)H|5YqXW_wYQ=ghW7}BԹMׇGܯo?°;o`v}vx(lه0o_߿v?1ԩѤߟ>?Oy;ۧSIv6fnxַO7`9M okO's$H>݃:4ׯN~:>;O_u.tM4|=lǨﴖn{iO٥j3zc2Ɖ&񧓁.r"x~d3nȭờod#vނBusTX2{ dF2qBdNU]DdPi>]?|n``Vj 1j\E֦'C$0D̬#!Y!iWj2@Q߬a=uъO;[cm&u nST-2E؂ 1)I9x w3h2fҩHHpA$5NEV;9fZ! UC֐z!-(4(Ғ $o%l4MG* eBJ2kTf0®>JtV:A6V<6(ל+Sg=Z֣Z\V҃4h4놧}sYcjoݠ(zp^`_4/G2b4n[K4J\.=֤`0Wh&o; Lx4Acm7̊v`*shf MQw4sufhh!L16CcoHk> ^;q?Qm&yc&8]),ыzo#UrCmg" q۶R##w#!C;e!hԕ盡Q(7Ch#Vh5Bc;[p+4fh>Fh]9Z niqZGGN34HA----rfhQQOB,ӷr7|LFunz!$EЬ' ޸PCqzMf7&oP0m̳5h-pE dPT?cSlG zcܤ|yX3OY27掾?ٮB,՘#Nm9J 8@WXSDL+2jWݎ)0 !s6- j Y0,+|^4_A*) $*cz]d_abGiUZ2]. >b!ЗH` ejߊbY;Mѝ*o)U@z(bVQW(< l֯X`Ё iV`RɺѵXMߖegLJWmsɨ&ell@W]`bZ,+1< w6X*nXMsa [LP-5 h_yO% -0Ʋ>"d{N5{ I?YyPms;W0?kPr`rB&^+u׊kwM\]:คD':G`iE a{?aIpa2G,eFX|FX0$$Iap}`qm#,FXӍT;"v&EPo!aI l%s{4))JB&ngStΦxZGa a+io:?ĭ:XH Ͳ:,sü)B:'P:yU5*0gn436h*_=+ʄ&_e\S2_޴mkPȩ\ua0L55H;罣j4C+jB#f^yn#mU{:yV5m&O۪F-t-,q~,[=dVoefX),wh7CsC34+cܻ[iҩv` l!hH,hWB|Zq976EDLҷ^σĞH7182E;ҥLu)ghg]J%6Gx H>,B0c 6 "9Vh|ِ$ Pl;LAhpqi+4fhEp4NZ龥Ѵ'fX =J Q+_4DuLP>m-<2H6E:؆p"/ Ey`,F|3Bio5Cd(weTy j.ƊrhEBs:<2]P_šBjվTOvlVX֫IU>T|2Phͷ#,"`KWak} cpF*_*WUKb!xUU*0U'jV zWWkBqM3_[ ,VkJmf,TV`7X)oiiy LM A˿fLE[ D6X/:Aa⟌LJQ^&eO탺Dw1 =X`HB#0嘎5`%<+/tk5.ьDt[ ;1 8lBಛU`gJ 8<?A9NO"oyqM%MnfhǃoNl$F#^xň׋,DW=K-DeU1 kF!n!T#^?Qn4YJ'~ ϲK f Siw5l= ɱRtK ˷5@jw- m-Xnў`V_N7zu\)s`#lIͻXԏ"ұM8;fX!yRvս`2Ft=ɮ/(:kjy|j0C?*ivV٣,{+02d6?fk868=1 !t%.nR"ЅiC I-&.טޕPE6;[ׁER^g{`f93a]M ih56O;?;`T!qHQjw0uLtwuPSg]*k?Eq5+`V`%XیM0q5@xXLIKi:ܠ(bzjFW;4ZPzej̕Ch^nMÔ!UdCP26#)+Vȱr2SST9LYP”,iF\,)WU0ϔSyULYI&6yaDfSp=6SI[!#[JJܥJ=ɀjJ0ǑM{TֱØ}r=0ZYl9s`a ȣ>;`q2g7utY.a]/fd6ڀfj *06MRB~eIR4Mfִ>լih W1Ьo!-ǀ*p#0\2E`F+reNvSl ؃+z XN괭45i72&Ϥ ٽӓrf1ȇ 1\{>^kTO\d4}Ng:ZbԤsDJd}?|?>{>sd6.wBPoPv?.~sZeݵv6&cP8sB&':gr7dyJw?a4 vqP#֠Lf<|7[?}0z6k(@`t@NazDܗBjkt j+b9|FH.><L,S)afJ8[=/RYK.ŒY,~)K;v)Kױ 6rү#<; 0ŋG8]yEk'A/DfIXG8 R7!RKjԥ{vnkm^~ [ȱA̾p`Vck0 N_5Rk+{_`I|x)՝H0wE%rD$Ҡ |I3b JaN+dy5q Sqm t}ڜAf*͗Z SZD2eX'sNuR'm2B~b<_ss4|5#%p0AsO򛓧c1v} endstream endobj 550 0 obj <> endobj 551 0 obj [ 552 0 R] endobj 552 0 obj <> endobj 553 0 obj <> endobj 554 0 obj <> endobj 555 0 obj <> endobj 556 0 obj <> endobj 557 0 obj <> stream x[sܶ׌>%H}Nc'j t.X:Nr$wiX9b)?ZZ5-$+v@xWSMuem V݊$\Y",Nj~jcVN^_PByݵ g(}q Ӽ\_L6U=08-pj 'HɼfKOQRɥ]Յ.( Bݧʔ~vSUF.;yS->lZI] kVLFe׃VV:>WMmxmfh lZ㣍JJ%Y-1~x/'\C|]*wxZ厠+U;Fj$-263"~ _z?{9hkD-9صp(_'Jp\9tI^Gv)0Ѻe1'Ywg,g>V_U)ޥ&21oaY܌2G`"emQ>oh~Bd;U] D; Z˿@2~4* yXS;jߦv]>?N~#fTnS *Vw%Ap_'r.+PQ6Pʨd]hǪ+I-[ RyW D1-тr&jfH( y9:fBb(jȢ[]AQ+TN@q#~b$]԰J{(bA'PDĬjTp.2# ܺ6C¢ida.ceaژ͠(caB&G8TȄL!q/FUbۥᲳXxEǾXT z;[XGjӆ>OZ4fi8Kyx o3]dmnʝpS;^Du^'8X@eľ08կ(o#mC/fC+[xWSPuT5E(,UI,9!/FX. [HMzI yv7=[< mϺ)0"hot41-S_<|C6ȋ<7b~>k[gwmPZ4'{@- X4n|ZCIw /w fx^\v`u%F8m6Jpe0>n,!yfy88R Z̺_&C|a;O5)ß\wOO:3[=SU,ץ63:#I9ԁU"L9 0 endstream endobj 558 0 obj <>/F 4/Dest[ 233 0 R/XYZ 82 100 0] >> endobj 559 0 obj <>/F 4/Dest[ 233 0 R/XYZ 82 100 0] >> endobj 560 0 obj <>/F 4/Dest[ 233 0 R/XYZ 82 100 0] >> endobj 561 0 obj <> stream x[KsFJ{\vn\JmE@QV[鐔3 J!*45_*_gM"Ζh8<*8ݾ54"!eidYnhS-CqӀsiX]4!B~Jov궣7He"N+[=_dv?Fd H߆:+gRK+LK>UW -\*cbƨY\U }9 j#=MUMEK,P-1BϺ6 U`RltW-"MC$D3#ce5NᎥ2xI}'J(S9F<b,~ 4fƣUm?3I;;ުPhaJs>A^A%F,8qIuH4--_+& ؄CZc[b90.1mp_Tr^a#vULT'DP$x!CUb~ 1? 0|/чE-˦r!,(uaN-*c-syXAX`IqL^`wř~0]4 Qq}-;n') @T3`IP}KŵI\sztF$AGIH@U ɯ32fisۏ({},U6` G8b<"낚hP  EZĠrvQ5\ڦU$T=:" Z*bm⁖OjYO_0ٯRNSwT!XBHֻݢ eH &5txWceJh><4G r 7/wv=GyV~[0v+lSP.J+JúdIx%iHWT'+,,PHoWLJC'ȑQ>ܞ#Y*>npqq|+֨@̬~|oǔٚA^(B[\(_7_ApjlRmKז6vVY3aԴ}mYmw}+Ɩ'j ѳ^U165ďt1Hu-D3Iv.OvT+Yּ^3D*Py5SN Po#Dw+'.&iZBg7_zC] b7/ (5WxR'PFY&RV8pϚJ<,E>)//o dedSyv{wmwUySة: zKm%]ϊΦ6] $qגLn$xH~^3ґ8lkUc#c Py,Q=y jחMw^-'/9YAxxF+_wiU; 6lDO'Rt2ִ2o-!̾C0l];Ztqфxgk(ɴKMn6 tmVU>U @:;>t=$Y)똤NkAiS6i|R,C%:NHd*u4NPPoĞDlJ!2\aUyTN'2۹C67n J9RnF7rFAMj]&]Hwݒ"p/Vzip~w³@ MbW8]K8&fA_suཪ#Wp?P2K?xzzVT2xFl7<^H ī wbkh>W`Jֺ7+}US e?ý| Kau(Q5`D8hedڌR)ڍG6]NDTXhs˹?Od42UeK6*A}0u5]UPV/6#eN HJJ@i2`7,yMGߦ*:n8 %MBK -9^Uӫid~BRq5H{AGf$rzOz<4Sn|b3Es(Q \+wmK]o1v;YQwo t`<$˒nvG'4:Um&\)zSBJ c餿%,2 o73/V`5Y ZI vƳ/0\&VO{jqfTW]899~M5H< 49K<# hM7(:b YbW~nfR4: T7/ o`LŹ%1tGۃWz+'3І.']6¹^pe'n]{lA`츺/x~KsKɽiYӻ5si=^~3I2eh?0%9Px+VZz@ E7k߱`ib^`Xl;Ww:W o.m^ODfݞQ<>.o풳MH<'Wo6]YGJGQUT&>KL>/F 4/Dest[ 236 0 R/XYZ 82 547 0] >> endobj 563 0 obj <> stream x[o77awNuZ%j=N_+!DzNv3Ԟ͆Z\\_)/6&']"Neq)YLnt\vKvXoaݚ h#W7v촊YbĴc] fdQKX=|||ۮ;g \o8]}Z3 vsJMM `Lܹ!GlAim%Ѻ#VʭS߀.=h 5D m1=ČgF6CL7bE1)escTc()ؠa!-`é`Ԧ`DѶqgdƹ"ύx_Ұ_B7Z6]~X4O\ 1?Y!JC3/aaB΁ILu?(e݌Hڞ$=$R9ڱeTQ''S &NȈ穐D6p%D6 W&횱埮*{ `0=t=jo H>Lkz ϶weu|? Z )7Ӷy LPowْ2"T!\p4\iE>^}o Bglj4JB\v>"Iٸ ">?ʅ|pi 4u3> ÍWRnp6#Xr m1IrTH&L$,@~ x~nf!"f!^Dn<; Ah>QEA)VMG; [/`_+L;[A]?Ȳഌh3TD+u~x$aCxg@N@i׌n!JqF2Ðf1-GP ݰn]3ZR73JlԀJ6)cy"% 8q.hdb Owam "-]LcNU^*6ՃiY6E$EpїcVYkG^T8rcH:ySfli*4WIiVj+)<9Tn}mvlS_5p̈6\ Ѷ t,CIho<@{0+%h+)Bur+T.nJfsu*Լ+?u:oQ&=_߽;x)de)s%O(RwK)g ~=ۈ'C6}L/?R3A{?c"yr-==csr+S:Q̑/;. sXfDĪrH(=!`-`ș>|XE!,xϘ 00qF`=tXAkǣwxP$]n1o1KiRL+I;I\bfq K|9B-)$)ѽ#L֭øz8%Etr#5vǃ3t-T8nu9 %Zt٭lH>1O3LGL옒4dwk'_Hk4s G8I1σϸq0EF:CDaxexc,,Q6Q "Ƴz-RKDXA #N" PBŽޥkfOOnbB&w<1D\e.hv&j]'wz9. U{*V[|RjHsUEP=jmM/{mc{m _/Г{ a`4LןsxmKN*_i\î [wN.^ܙtV뇋u5ToĚt;:ﺿ{LR;ZZ539G>E͹;~|ZH\ėgsҠŷ.CEd&C*ZUO_c!G!!Z΂` (leLmwkcPpqP؉yΟ P<O2u4Ld0DhOVאKi 72 "|veϡO/7Pq3$^IlR9FDNNسQLss|UԻV7P%>6͉.]?^Uiux˧qb"i!/ 9Z_Ud׈YM/kuoЁ7uܥelMD&zϙu\w6Nx, ϧ޳dc!j9j Cz|n#<X'9ǔ9-e>w9ڞfet2w8*aAUzQ)?!|aĜWpJ0)p __1 )Nk N`c~LÛ| @A*{.QA? ?چ 0T5Dq5$?LqoN8oH^-9c0n+]G]p7 endstream endobj 564 0 obj <> stream xZYs8~wIW "nMM3'[HvfﷻA E@GTdF}/4⧟e%㺺}wy!*E&+ km~wy]]5o\^ |SniQmHD gZ|%$ڮ./](HC<"O눉xM0J39Kn^5g\]BĕU@bP%0""3v:"%;)ewms֛uU#XtknS53gBmΖL-/_Q_6׶~6B_O ~~h}XƧ=yfmv|av66o!kmQVXfJ(3_-&Gvb^05ĪUV53,LD!ֵ E%ڐ;ZpG%L?LG7"9x?KL[?D=n'Gyʲ?K yI@9{(@OL!zuآjiӫnX[Jo-Xߺ q#d{w8dyߞ1"8B'tRς˔xn{`4V16$Qo>65 nY;j=~ޮ'eZ:QBTjޏUЯ *P {lLop"=(=4TQЮzr()PeS%5=3:wθs+<9g=m݄e}~/d vDK-"{Kw^%t1 1V~.3?av[ov4-)llD2N~-6װ=C}lw@?k\}XC`n _7td B [0e<%MHO.qb&qB {ڌCثxİ?pafBʫ~II RWD +H0ě̎8)NaKJXpAUH~`ϗia|i.A jm0cAɠHP,9 @ O:Бu^[m1靼h!gy:בe'sg8F F80Vp.G $Eǃ?+Bz~<(Ov^ Fq[n*S!2U_W/Êp»nų,<>GrPռ?r()s!9-1S-w.k)#;<^7hr״Y7-ɮrf gqMel940TD?Ȣv>L3-&Di _Pt\̙iVݱY-x+d!zyC-߱.Bp2-fxBEUܬѱ@=, Вv8=.i~:s:0h7;c:>^ OO)Rۃ^Ö"YFNɍ|Lgӑӳ\˴8 L'Xt$v,U?*#Q'cD`Qc|Y?Dbâyz?K Y,<,aܟEL%W3 yXXtS¢M!dm"Į=}E,MJ"ӼX9 VLן6 )Oxsjރ$0eTRؓ:j. u=M!?~ HeqY efRD]#',X%#XSqdt4TܰV[H%iiF&L(=W5P`weP-ZV8)YX=k>=Csr/߰9Xrz'w1ӗmm`4Amӗl=ܡ"̰mPjj kfl)ӱ|w gd Io5" 3Mz8vز"6Xn*mB*# gdApbkf#&7n,omEH}8\nwV&߬UyZMn,o'x3\̬w7 FQx oo[xp$+Ex!mo>;A{XeۤL<yΎ endstream endobj 565 0 obj <> stream x]o6=@aM ,Y[l%ͰtvnDJ,g EmEw/><>zW*˷GU" ^HS]^ڋMnw|DwjQ?W=: Ai$n[qCXe%Il8Ѫ}" WGhiCr8?=n:,biG;PB`(=CJ(kxuZ0)U Qf# 2d2q+,6%T۲e},7Xlj&@X~b([,rPsJl#?+|y m@Cab,*[?93_ 1OĂЄ}&/l/鲁?()A{-q:#8ngt0hψ#t`| ,u<7n0iHX~`i4<iu"|mDqep$|.>]e߂ o2Te?"p=Acms0J#ȁr ! ! П9nq!>y-eW5f,hg^\Vx({Tҧ (kqb Svբ h6[dkG+ fYIJJdj IDISA#5sVjxDY8S18傟p)?ׂs)# i&(&)Ѥ R6DJYF*]:% V%X^bBBivV/'>ЦpF=z|(aN<J r-f!w!5ZVU>"}ͨ_ uS,~YLzD=PaZs~Ԣ{flLjv">Kj$_,nkM$laxzG0t55*:f-F ;2-Zm<aDky+D݊[|H(M*Pm xjHXiĂ3@~Z: U2:f.߈MgP kX}BBGMHOQ>nA(lwa[Vn{`Ϯgپx|j y>v6,,;q7P1g LjSl߃ҷ{s+vm0?^矾yͽgqӒmJ&'d*n8Ubmۈr|$cYni8sf[nT,VB=[U!Lܭ&>CӮM\l`r:iHB"u,Ռ8>-`؃[VWٶbtOڃ4(]ɘ!`EɊ_/|8^Q80VQ;،?>?2(ĸY'w;x_ddVj%K>[tt)We EjqޒRSSmg/8CV$؎j )y9;x $Ze -NZ|8*q~oi01Nbf<7 ƒrlb.Nd8GH@6p3 &Q`xc59%cWB-ܗtjg:ڤg)48E?&Cucސk*?gX=|^64aĚurðñHE$N:5+7RwRmsóT샧gR6Ĩӳ>Aӳ̾C0LU/oi'XjIgKXv .RxD@@HI( TL0( :? `%IoyKL&0$-%X ce| Uer`L%xv~ڰ)BN/\mTuPm1t伂PJ̋ EX,y󦞘 q<2V %]SٌN)P`ºχX1t' tnΧÐ:I\U0 2,Q߻0E8ЛDR+ xЃH%&4c, Ib$Y!WQ:@sQT|N *2le $XXIzZ#=rLC!{ b q,$&ހ[o2!IBcf AW;V. >U9]CGxʡfn**4xtTPYJ9SV6;SV(^AeVC3yŰs*]P3EŻzxm[)(' B4Ȩ} endstream endobj 566 0 obj <> stream xmoܶ}<6+P tE0ɭk,;b{gۿ"EJ  (:3VPJ*Q̯hQ%I Ib~`o>*n/zsxp1+ʿ^ŸapEd-ְM2MheEX]Ԃ2dn_ح¤ ajm,^胝;q$D <#ZYy(A"Y1_^̨(#T(TUz BV3L"(:Ň'=ټx1n;ej #\3wLBʎW_qHO7R!a=PŹc;-l+Dqfn9mCm#cI ե-3C_eSR1_ZnǾʼnַ¦;*|g%TE{X&?}yo9rMp_XMt܌ }Ժc>fx,]kTCi쫧@ܲp>WOc N1#[^nRns[Q8WnMq߻-Sͮ !٤c|!>Xi~z&JEOٷ݀5©6XR_fJeiЃ;`T]V9pVr#eLO .uM7wkw O5'9xa'ɆHk#bR6@Z&#q9>zS8,u_.*l@ c8̛68G:(P˞=ALˋblʯ;Ǡs;;g=}Y;K0<O眭:- ԟ={;ζi-}^5k%,:3 ޶or`4o ɹ bN\hFhjaȝX߶ouo~Bw]wGeoYFPwA( ?P(W$1=;X H}jOhW<9en=L ;X|TgUXh&\BЄE#PXzlm0WM ҁٿIbŸQ޾gWۿ^Z| LPׅm"q6t!Ȉ 2q_c\\a(v˽g+exk;޶+`v]ؚnqwy@?X"?!$۷3Ľ[Ϗ'aFT?ޝd8 dxu%C+Ș#ƉҀ]U81A9'4TNa}"NZ,8hre_v&O_߲_Ek|qH WJ; l`7;x]7 uw8$ wt$_ m5 Lyk#ʼʭҐLn* |4xXm[?t*֏>1C7 u;Tq ʥO+ &rZz'}i^:f\ov\;Ys \;J!E?Eq~u\فj}`ec/\lnAwf3HLJi Phџ& " R||\ܬ)99| .?)_#8NNoekpx`Wn֍-0گmB=iZ$\cء4V[ F4X0c2x C-pg/Ao?T)TPu^7gL. wr,zŠ<9P > R endstream endobj 567 0 obj <> stream xZsܶ׌>=K|$ܧ:M<$3Nd?OuE:w''ﻻH$4~غ#~a?\^G02`IXRG,*yVɧE|$52""WYJeƒ3^%txP_^ܿ  y߯RC.%lonz+ !3<+P{'Wy'7 j`&Y@defYFP XLYMzUm&:e4k7qbi 3-gZN4f.3y7P?5ߴi^i06X =|MYy G[k)2Sloᛥ%*J< ڀZL^p' >-L 6ld3} FT s5#*3jƎ8!#rs@GlRXɟ hW4FV$L&2cRM*(5UЊ\*!VBY`LU P]˽a09Z3 ǹ& |N OW.V9ؠ`QAzj_N A)+e~8ۖd%xt^dED[}{7>He:C '_ݠԐiP@bf2,XAʄe$/~A9ADpӝA' jqg$ZWY3D2N",8Mz П.ns{ r&Q;INai(J VIq$ YlIPYc`q/PRy8ᅦ,n"A-ūPsXC.Mծi Mh@;7aڙ mZ̻& Vd9&Hs1mPhJgi*ۛ[*0}57 ._f] S.lR~́"2(Q 5^Xx1ij/7y& bTPmj 1J#!}Mj̃γLZ׶Nݮʉr LW*R;zx}x1mElP Mlz^Q5`f;(, oݵqi"_Cj[Yh ۳"U:]Ke6ݼ%-xh4+Cko'PmbH\q5p_c^S[>OajπOQ*m΍bwa,l:,S@oD/"Z3`6ǚR@&) {rByfA2(zt3|ZgZW=]t D'gY59 7$opykf AUi#r~(E8\aCIXfU;WCϡEMp. ܣW#A /Coe 0THK%:?t7^`#tDC@5[Rz% ڿ2-ކ%^I>kNQƨ(ϴP `Ded B|~v vYCy3gBoeZ[yI n߃ Vvh/H #=%i2.zrXf2sD}"= }^P:cJg1:B8D AWО=>q\V8E_kD=Z1`ЉnI,^1pEh Üڞ޶,Q(F;|j>O]}R 9zW@yxoov: YPQ)՛(HUPɲ k)"E æ/_(~ 8Y5jџzҦFx~NY`ҕY w{ Q9Z}Ik-XrOz&v۝0" ij`!v=]l;x)* /%ۓ>d\a{98V#l*l_=as% #  _C;Lw㡉F&/8~>q3!l^:󾩥l-ކoi=&r\ .qTa0ŽLR.q4vVb =I=[ I6OSP+JOϛ⤔ku6:kU#܂Kd2A,9'+zC3L 9\qvt d-R;f'g1Jr,"sL 'Rc;!ls\Fhsu>(UGyșOzYYla"+z<{ZǝW63QjuɝO<ƁD/Mn}>Ѕ(xb|b3Łan4փyXiKsu@2qxu/!,[4/Şן~>8w_珒C^e{*A.cyS䡀u[q2;~mt)mQӁ# endstream endobj 568 0 obj <> stream xnF]a DqddXD<80QǮ5#!'U$d,Yu_]ӓ7Uydvu{z3xV##UYgW:۞?ޟ|̳?NO:OO.P Q*Hm[UQꬖe*۴'(TpF*[XzB YJįJI s>;c%u]-?\*_ Yf.= 22,Cf4c~UzU-do&o_Vl ۩lj QSV)"ץ3.܇kĪ?XUq& { IY;\c) $^1ByM^D(f+`% Ra8):Rg~,E[GZp\K_ Q7 Xee9 I|v0Q b^ó;;8PBPO4Mb' B f'SĹ:Pzgg8cl~8_>bo P>SbDŷ5j 6,Qcy@ n ·UB{,@yF`e |<*_g&5pL] 1oaZ.BF@h>o0S40Gcm21^IZ; k[P$2 t(7]ژ|?@hw &jk;mK~CMy(oceM+zZu67=дlOg>m-?{"߿S[UR勄e@-d'ऩG/_LG.$X#?O gҊP8z Y$i;14&Qz*Z$t1 -A6fB=9aɢN$ py)w6%qfRO,0N=]9~'59!X!%UZIL'n&X^/wj8@%48Rq~Ou(w~1nm3/ 4zB[x;윋nxw|oݵ|_'ӥ{WqzAY~i_#Zj^=Qg$FD w]M#Rx ]7ZiO¾ rL.$\-wd-KVh] (v vn"CqޥSΑ /$I.JiÜ1t )Ju;] DՉ0o.*Xbe FR5cr|dk\M8Fduل2<ׂ>`6m*P_9V/ǰ@hk+6G[΍JR SU / EK'܄Ǜ-&I&U֍]%97cg:j|W4/B@%*`UDoogF~)tu8P]~mj2,0kMv>#>;.tl 8c_CoN^l0yܲc⁨Cne9nA:fዙugEvP`V^m%/%,hWEM1tMZ͖n}F_0n7cJJ#` L d^RB?V"u6g3Bى͏7 QvI%˟>5Dz<:$ eQs; endstream endobj 569 0 obj <> stream xZIoFQ4*r&=5ENU +RR"Y3$GP-P:o^}#+J-XVˌ*~*LLv;?+z=?{??go%BJl lūe* n2# 1^hm GJ(\9 Tq;,;ϋJc0Ҟټ,JfxX1izG|0HQa.2 d2+zXlJ6\ h4~YTÓ5a\T%R.ɘluWj 4t`Ŭ=41 1}{ލ*kK@%o9cw{'n 7m{:ˇ# rk eaRRb"=VN;(` JW P1P lvR AٔzFهX}"1$إG½0[pd= XWd? v%Cih>wI|ѺR]UZ;0Z"m2;did qqӦp ~D`*<ܠ{^!/瘞l7*ݹ䱖sw;g*Rڐ̿iǍ(D+9O7)^6F5hʪ+OPWֻzMgjRmuV؛k|6ߘz[w HBV[Z5 ؓ|TT=p]owUʪ0X ɸnZ!54Ҁi+~K`]n"=T^( gq[*{9mJJpv>Tvb*+2 gWgF2&9^dks ɣ>vkYu)L!DI6ՈZKA\Kڜ\2qx=g-Zg}57hdfk$vAHc9zػj_Q%f6*FC[qG޻sEll'LugE|& iH9uGc(vCAoe_vCWn(*O!=8|op0Op#`8ϗ??X%jkY=vBZNP%DnJ-Kv8A!=JoR#ѮNcyfO8mBV^VHt3Fe0/T#! ]Զ!GޮlMDž-ڹ&qkNxZ7Dz6HT6H)ǥ;mMzSa7:ԓmC7ڇj^&qF~0;`R<}&N#(ʔ;e60:xXkSeVz,8 l' \ K6_XO 8Ge]bi#-ahVEz4[fMivr)%*>)DLa}9}/nZ3{v)V*}ɞqx=KɿG }h7ko|G@?.!ۂFexuKC1SFbS5GHWl"ܫJH<ݵ a9bV'mwHCJmD,8JHѶ_D endstream endobj 570 0 obj <> stream x[Ko qhxvlÁD99Pׁ=Ǯ>U IV3/A,ŮgWˋ? cY. K*1xUJUW {*ȓOvJnzy zyq  -%Kv@xTyƫY0*٭//H•T&4|l:§*dM2Hϳj02rVfu`T>o1X؍.-Vfn)LsGbrReC{vT.>jN <c?5Z,:T90I\^e&gIu8 ~xc1R.bN9ZC7~'x1YdEJzь*j3ͤst䢡UVW>.]8O,U-el'dYE=rBm s{f3m[7y&eaKj)(ۊeJmʬCZ,Ur5(ѧtY9T M*DLUb^<~fCQ@(KtaoDuJZi55VQ 5^|G[1CviFH#q{a|*lVb&2cGt؂CZQm+}*`[-L,#~TJZSD UUx倖+EotHJkm%J, $7L1;8%|v)QLHKY }gr`qф:lce Lrci4A* 66wU'I n~?!]ϱ4}'bc{@Va>#Ӈ9B,bߴ1ɻQǽݚ6[ ϗ-vGW&z&ƥ F-|i !%JPƧpC0@Xiw`rꬬ|9Y>H*B11I|^a hg:t( dд8*/ LV*2jܮo}ۻ丛2ƞ6.ԣrJp.VM ##nFƼ#دvV&.)fk͸8PCPuu2XFvA7Y IpОqY_XRuM0zeuQG06%4&.GY/ }vuy923]9}PjynvUwe-GP(r,m񤲑cՏݰ>jd$Rm#p "U?y1pRGcዉ!ޚ =O=,vzޑWcwT7.dP@0<'D%0, ^<O'osҀa.3VogKϳ3_o([(m7HSTd(Odd9^i]^H0wb4##k g?y;# aU(36ni6:w 2 ͢;VW|'L#V %Ƕ!?vM-mw {2Z0w !¥Ni7A;vmx糰Z,?3\:L$RYzfY_װ>.oWdq>TpcexyUt+ 4lJݷ"C$7p"psCI$mU=u#mmu$b?߅ĄHZ˟)pّ3,X/K/Qc2rܚќTƙ.^VΫ6(){  ͛o6.=΀D'NB#īN;)^[o(2QLg[@씬s6żIr݇ǭ^f! bj[GwZ.Jm\t s2 <UuE-ާvE]<~HXɶjdtdc?5nwƧ.Ÿ7N4ä~XǗ{ǢNpnxoT j8j Oh% I" ;>wAd2VuݷAC}\+J4,~()#9?Ш ;Wv.I3W|Mlx[rLkNksS9E&,9"ԟb9 ͱHH)-RC%|1H9Z[>aIK-;*t*enm]+B2a؜] ^cJjzU> oy3[xP&K D9t < Y^+RL7*?TѾ *w󌾽cauɲ')II ;-XN[*byq*琾v|`y.FƵvĺq5>q7+r '{5g"|™r Pޛ5usHJEѐġ|''Lƨd{Q!B{yd}'? 1n 0GE a27~'%4/0;<@|Rbqt7ug>e| FIVg"]MA[HA '> 2n>y:^T~5!>AbTYMmA"Ǿ rV gLPypc^7NoxQy+?9`}>.VaWjatI/خVq^\W*?W3w > stream xZݓ۸ ߙheMO妝6>l8t{omL EIJv>p9, 3_\^(8g*n_^pqxef l?ꊇEUpka/pS.`FOˋPdHo2MN:N^qx=.CYd_ b_JX㦔O_e?95Y&&])Bo+ba\;U$/c$P@ǴO,+bU@SD*?=ħSю1 .i%C3Gml; ]hT?Goo GMA2z*m 5:On!P̀FQFeD HȄp(~k$vi+ɔ\-u .R `ڝxѓRG", ?s=^87j\8 i1I_Bb|R^D BWy D#'OoW{:-ҫ͊)p;fd6~F/?̖#@ϡ% @XrqBюU2]>śW&(vaSi+a{&;ٞ-=l n4 WfZa 啡bL~^*>BYG)]bM_Lt\u]d=1s,tn< MVOq5>OTU1c?@z|n_<~7y_~(9.6wŮ}HLNgh!Շuj:l>~;O2{sn_`nQlje510?o`bڔW 4RUI{X9.8ԺʭVxݾ=lp1ERW޵:js|*2j1ׅ#MaЍӽrk( X6H?m6_~%7S6Oeܿ'ҍš"Qo սid2 QPcFmH0BV/kzXT3CƑ-`T׹F/шkM@'BeR }PhGy}fs:[p - t{=u!! NYqyNdhISwL@zG%s/Œi58|Q0K{W [M#MO%JS8$p ?p=QS#]gޖnSC+:COG[,8Um{{JVuv-~pU(DzӌPg<|MYz1g" ښzZMejn^j &b,A(wf9@?, dgў6_wOHrzPM3 zY4˝ @dd:`3,k9hw*,"cPVmMTU3,Ae9D5r:DR F?#Why~Mʲӕeg$L=r>4D}.zJǽG?{/xv?ϑ,RFm=)DS՞j<DD ՝R_2%rNED"&qcâmb%LЖV pL|OAx oAm:nyd y\$aNF?b9{1A5_!| k:@W ;,h0px #]~ށ˽Qj(W2l ȚԽ+.`H!\g_Hd|  ِ 9z3ƓfM$+]>_PeFEk8>% [bBULiJ=;GPM 7`找qԔ#/hk'hn6H;s,r([8P&Xh%8/ if#4D KwtL1L/F"cZE >p\gYG5"Z,4DndntΰLY<\Q<8.T> stream x[oA⬊0YlWmr 8w%RPmhqX[|r8CΏ]\,XQ+#UYuq|~Vwͬ*r~v~vRRU>d7%+J^,mxU]}yD+#419]\wPByiCz_,b5/oofLh(W+nX`̂)Yta*".CU 7c7엹=b+<`T̖V*m-!9j(ťHUMP ӥ & MC-~)P&zPIBR4o8J/o)K 9l !G܃qLDو2,# ;x䨾!41\7Mhm`GiQApo' G(64U|8ЛlԱǖ9#Iʲ24ɖ+rs Tzo9FjG ~uZej LKD$ѽ{8.UƘ$ Z:ku&-pYeK;nu0cg`sϴ?P0LF+.3GGTU^JRv|K ._RY. `*9+\(>N )5/L4{\`v47QiZzP.J ^.!Ռ/5yGD7nT;U~T:[u8/.4c p%gnfpRG\e.- $XvRtg߱*و gz7߭];6e?Yޝky7A/ACVh<).j};>V1z#>E5e'ZiEG\}7 :EJ[.9|1sǤ۹ӿ_LHFnx*Ƭm/9AM%:ݔ4nɋ !W7D<< Izظgt?LZx)]NC!W]4KmZ^3 zG,I!Ke>f`mN^\[}vݹ䌓Z#!g$#Rj>qikc{&/.S&3q .2CN$@$KǝIY(caGO <#+ ɡGP77Mz) S9?cQeBY~W;湢B3 aS5Q1nYp7L4Vp-v^(#pdl_~ԕ-j [x{057Ǝ)XPU}BUZd4ǀ a^'z BC.N|DK9*.+h8& kLUJ[ 5魉2-92hwA*:;0z9ƭƘ]!uȒ[`7Qٲ4qLbZ~S؍y?'~=-?A8ܸ8x8HIMHB6L9ōѳ-R"tz;㹂O>d%3U6xx(vk>-tvT9  =o4zՊ:C_)l:Pói|N@q 3r^bNfnLOQuteyFBAYUtYXMx'yHpby(Jvj6! (2r!@ CAfp3_gcol:cPt)ŋ0VxŠSf V1d*~ J4EUy"eFOM=˃D&DI_V0O 6\% U#fDg֝sVo: endstream endobj 573 0 obj <> stream x[mܶ~}>E|~[p=犢zOwķrE}g$J"='xy̳˛ˋ~ cY. KJ1xTH#Ly//ndoװ `\g!Yjŋ%3^&̪Ld__^?H4eADDgɮ}*-d/o:-Dz`(=C铫?o梨Ga18a6NJeco+=nݞoO!3;"lHaC6 PZL$+C5Q*F.&*a?1rkGYN {$Ԑp-XGΣPRǡl+"-6DUoXIz츂9>縡`$nTӑs'%v@HZtrGћ {[xnX<0trfxL7@.Q5XdkT3D+BsWJ;z]궛I3k7N'+fPN)|MPj zB;= 1!~l7-e}urz:@e#9(nLBhv yW7#}#'M0Emb1ټhҖ*Q'IMptC>tʮE'wńY9<0_q} }^ o0-1{hm˴E툯4STyoRDqc!*JzǕwQwawm3sww?8y"/9yDh/LO%=!aqԳw ؛Y}޶hqV PYO= (ß&`YdA,nݞog1u{/f}0ˊ40P_ꊁV0U^sې[;u|$*'1Tx_f3D.xnR]ywxk6}o_ M&ގؒX98 aU-r*/6)B`_b$IXHҗ.8tB,G<9<3$N||qMQ:. `798LCd Xx{ޡ0HO?gfЋZ8Q #ȮӏΟ-ZoTG<|{h-m.\uf(. yJA35>hIg .OBMSѴ>n7k[FjH V ~V17Ħ3"jO\=O(% Ѿsj=z^2Pn *qs endstream endobj 574 0 obj <> stream x[KoF4ֽ' $8ExK$U$I,AdIU]]]y{yE9Uq{yՌWO-u/./>EKq?A7@`D0]xm/Ex [Xڂ ftq^^_"ylOWŮ2}.loShB~Q{5ݧk;6]@fnhewPˤqLpTP?qt{j޲VMl:>vZ 8 ŅHmMQ 7؂K0:" Ը2mZm&E*?+$ZT.$e- U3jKŖSIJΌ\ Zڌr ((aI>tL`6x&H&3epMư'd2tѽvI/cuͧ@U(c鋉\n[3ڬ5&f|ngul陲&M-/ P̘20Z *9v6{X\AWXqoۊc6}ucm ¯êX{DK8C˄lTw ftwoȾq|i:0!ftX{sy p]_93F^ >\p5\g}W]7F_r֥_ݿ݉hhƖXrV"oclm/h =HXcVKrNq~=(,}ZaZA[h_[O*#lH՝|]sn{<߮N˃K mLR$Z SȣRA XZ eJ>EབSfL_z=h=IhsIw'#-nvxHk}o\c3RqŝѳtoNNlG_uF%֎NY1@QAvpB$+sh?%>74d%omﺎy{.A  P>}V|fk|LX5!#7a X&2MݯY/-r#nd=&CL4ߎ X&vzD`lX9#Ǣ8 ҇4P 率-3[_^ҩ!HNG ,. Ѐ+xOA ox_m O!/ Lkl.6zT@Zwѽa*HxT@6%eºh.'h>8I"{G(17p yA@"  2ILAMk$;ѓgWrg $LV͵R'yŝѳd:c:9vv+J::=a_#%>Jz$]7NOWК%cHo<$RBzy=R' Pas (2͟ ܪa4R*B ggכJLjdꁙF>,8ąu҇u"Cu/P}+iY3Ճ,Tf+ ;smg&S::]۲< g.-aLЩ#8T<\vacBOPҦ86~OX:$= 7@ hFYMj)nS26 /@ eLl9Y ,9E ɝ.<&O0jp B@⯘93~psy"a[8eqvlnqp L? 5`2a1^׈?qk@X?ݿ@ -Q4mǀ1Ϙ endstream endobj 575 0 obj <> stream xn݀d3\KԀ hO}H 򥍥D~}gf/\J)gvWG/.˄K a9WN:k?~;>&ٿߏ~:_B΁D. `eY,d:"VJ&3BER W+">K-B)j\˼R$Cuc''E^0]&WO 6jYB0P(6ŇdλlC|HD"'x/K d?tO#.Z =M~X dʕNu . F;w6.Eg{G8U! 0tQ4= &NPe]I[-;AK a>lIHlk{tvJ@H^RKk}0jB"N$ @p3|4)&zIĸZQR7"{W{">Bc>_=>"= | tTfwI.F;CY%MdyUu KT5N\0Ug`3fLm=';FH p6p:<Ն_7? %:u,:v%?RC!]}ʟ+Q$;TUhшk? ^#ݥO9>fuzḎ#1 P@r@o>fY%BTbbR.U? P5 dkҏaH,nH<o-։;hk(ĚڑhZu=PU5ڡF)ēM_hb`GgG<spU-u^A]e':v@ŰbmƲJ>q bn\{AAlQC꓋EZywԫ$lQ! /ih v7 oM#1O6>$k,!cF}ŗ>gF|ro(qPEy[|A/r*\!>B".@%=ZǶ,r@vHfqf-:kg.-kr RxvZ]V"m<7wL͔XdrO.P^?2\V][ƪ,M{<ܬ5""lkPy=Xjj2 jc'|D'.^z1Y,t%*ߪfoPM3{ ue7o3I0>s`fmB!IjoRsB?ez =ܒ27#5I\aUF |ls =%GF$قڭ mՖ<PPc-V4PPã2i1H_OjX4DMz:IagVǎ% S !l@*<$|Go^GˤJW;c٫Cc;f`aS`쀵`Vw7J~kp/U EE$jBE^_毸<% ~3$3}e K尪ϸ\Ҽ2yn[1AIC@(K5f~g'=΁LUK ҐiGЩ<Fb+6[mV[v}Xh]#ڃ=*j+1ֵH̑!OTp䓙cw&1nٱT8(-W^{:i9WMa}cj k-6%j9_ XӼ4G1o꾌׌a}~elp0<, SDA}:Jꖣ7Jq]fgw!Ǐ;"|~tX,GX hl(;)|t^C/:X&[\g~rE?BB d=-?U:dO]S fK}kh8d䊣^'P{ozߢuEb~{VF_C 5'(/p&+k(lm,8[whR".01Ei.p9ECihQҿD = 1󅀦>ؑ&rt?2i s9%)8giäΡdiJV}Ўپjgc`P^d萿]'aCxyKpG/W+w5I Gd_Xgn~()fvTڎf4}0.3gîׁ'^Cõ3433nOBK4 :͂fr5 +[N1}Ĉ9ZwL8H `r0@HҜ.,_Q72mp8\=w<{\; yup/i:6Mٵ>,1uU{b+"8PoWn |wf^jgp*& HVx2 (+?:KZMr4!rgc@<4jen0}2lӣ*S}4cwfoޘP꾣[ \T.ܜc$o'LHhS>v!9y&v>FI'  ?ŐpKW*v,a8 99U.QU/l  a&ȸ endstream endobj 576 0 obj <> stream x[_s۸L#@$ӧ8moI;ę>ȌXR,9m}w P\RrvL?@痧'?U&BJ.?"u.Ut^'w@:ٞ ~|zr&ٻo'>OO.!/E =PkY"t:U$BF'ɇ'I& M]ILHeԐB*WH/ʐ(}rV䅨erJց* FvŦCA),+]P)9T2)'R{IӶ+>Sz¾>GÓ$s},qC}Pp& vE:˗jw %)fA/ _B(鎭D*,ZC;Y"^iǗg`1LAd6 !FFHVe,N&2Ĝ+ծ|úW1Ws;F `` AA'PDT Gf, P!ymc?0fW4E \/AY<⛐Pmw.|a*kۇ%v^[ڟF> _B?B٨\ ^)(pްt؀Csh$6 .J*zpD@/`< A.ѡf-Uꥄ?SŲًÅ^+ Mbz ?_Rr5 Y@vJx)'FL:EHFHD?=34LⓅu-ŁB6%ƾԊB igt AḫQ!Qi&& (]pE{4qGݮc%G]g&]3$#^?ɮpx8܏܋l'U4Q#; ;>=QY2 p}h@O5r=ހT -f:MT )8Es0S)MX7q/TσFL* oMry ٓm T`]@efD0`uUa(&Q:0%mjx7L߂vM;z|I/oEtF਄SwHSIqm, ұXIGbk'9[N[i ni6taԕx_k!6NbQHJeWSnr 챪xcli^擕'+RսJ$JDOVq{ %U燕+#[A)n^us`0߷|y ę\40i@yDK ^|hG; Ӟ wE]+U߲8-zKlV;* P'SJ-'SGLᯰ؟_Le " 0ZCi!ġziZ<#e endstream endobj 577 0 obj <> stream xrܶ3=JXŋ&m2=^ҸsEPs؍J،ɝ3ةƟu@w Eـ!ʴҊQd7tPd%<ugeL`!cRe"kByNo6]mk@Wۨ #G6g M[g? 仧K0&ݓ;dNo\c̖06aeZ孕ak@jdc lRG<;ȳSge@4NȄ x۵@.8Gs28'8&]@]=O9ތg׾*ە=hXDDza2c՗5|'$ypD^ʨ˓*ndE 8@b^JP(3i2؄e5+jѡ`zCڳQTo/cu-&wɴ) dCeFw!ƣ(*wg?R,#|u•Ŗ,5:11g,;~꫸N/P4TN9 Uv3>s3!8V8-yB|Я 7_RnwaTlNuF=)t luHVeՄGȡD* F6Vp|њvb4Ѫv|ܸYGvj t\?3>2𰺽ހthyK۸ݒ[\{<(KT43ЏSIq K3c0_V&0B͘XG?mHLo6"n7mė=:pf-MO2E&g nV"JS;;^"?Ŭ]hU>Y87Ȅm^^ m%p׃j\*!An)U_bczKmkz*w9b;$% oM !JnF}# zHVWz S݃gKdDNX (ɨϬWಗ2DNFҘ{]\o1x&~eY%5 zĢ*S pXKak<7+:ڰ{ER"a{`&ZH8 /o[|E:+5R3/m_gSߍ٦x&1NǮԖ:ބ%@\KRֳҲJ'LYbΉά)Vo DT2ތ%X2\u]#ZxjUWm@kRBP2B~`t;x\R"s)nk63 lsv8M w}MЃW7[Mwu'Do 4Z1^|5ƚZ=!!uzQ' Dw5>Q3+ \ (R(p > stream x]oF݀Šq?$sOM r(M>ȲKeM$M,i=89>2"urrq|$IUd*uU5z[%<ėWG$%9w7)@R Yf")ͻCɄ!ZW>`~JB ˑغNs"$\XڶHmB4q.6kIXu=n/VKi>%fj)u.a0 HEi y+߫X} |?/1=Kk[z-q#RMߥGÐ0-\:.۟t(K K y_]ow$wWv;{ pYTՖڷ~[͟( b8h>2X#G&lH $Te)몫PWU&ṲHY*Kq1Tb{BѶ@1⅚iXamP-7hzwց#[*U,Άv+l`[w(]0ޟQQ~hL{{|;:Iafo^[ M!Im2"Fu͊;iccʔ xrg&}G!klt) [:o@`nH}ۑzר|dp+*:܁A٪.< )΅up1@~`uY9 /`&Z€2F}HB>^8TYeb}s(\%}tƛ-^RYJ5P#@u[9[d B}G)7}"vͭҺFނOߥQXD,YXUI.| Y{D9sU%ؿa%H Q s/ܰћcԖ>,vJ]P$y._ٷrӰi8}Gڹ/1f֚!YXst9ʄh *ωJ Kֶ[ȿcX$UNcsOk""ęL !D37eOWz:%xȄ2eP×TsM<+ʘRi-`><{{鍅Mi8ZSs6Qci͔tת|;7eS%R&f63Uk\=$2iY 6tjjO6-bXD!QSgfpG!跩EXvsPq,ZSIK)l&הlgnmB{`W5uXoa@Ei[GRUnYev~jXoAx*]>?9x8ąP[m@B$[zr-w8m|p VڀY;QjaVi::R`[gz.4E`c!0 Wٹ.a\WgJ .gxSMם&[Μ J60RzG_| h;g+EzX|΄>ޖub,(,"Q܈7 PVufriZCp|%:8m936M Ȁʜ6*U&#];-r r5潄M MŒɲY22Hz~9V|_g(>oǝR(I]B)PwWe% є&|A~̈́YKf}$o ,rf$Y8E7'q/8Ȍ3;_bD5D#1N ~o1en .Ar dN+03/PIC~ZUy4Ù0d ixbsO'ft&lM:mGaa;5(Vp= S󧻍 Kd-ɶ9HG22",P͠b_emF} TÃM:ߌ '' 16#:ڴ ~euͼ5imu9NO<" ~g " m'ݔҕ'l{Ͷ/akcsiu:~n%^Xans21j#jUpb$\aJ:ףO>\#j lMHhM56d&n.L1}J>L0_aMx5Nº $#29%nl# ghH:hP>1M888B[;18%1gE?` lj٭릟''SD! 115KoG!)?pRRxg3R(0yHf!r0U4axpT33o2&aCT, endstream endobj 579 0 obj <> stream x]s3|<1MO\sNzs'LrI.]RvILb,G߽ cY.#%2ReErh?/QǏGi\@sdHd*i$KXbT")dV&gZ%愆" W#4'ɺ],-h/Z)D|Mb0!i2er` 7:s7jdf|RtXiT&lЊ]?/dzPc'x/k~蜊Y)G&ge!8 2B& a:ES6F* ,2Ut'SfygzG8> Xwi ,ME0TVr\V#4 hT2)퇓cN` ?UMp_ӎBѐM%#hX8v;Dd(6PӸ2dοZ˨'LrjY7 82[kf= %8Z ,Qj>jW (;p"1DQ:1ɽuk;oo/WvLũL &iVLU xE LՂQ/4E[Yo O n"^=}-L! p(t%Iwo7Q@Rd-0Et|Vx ~ B4%Dg-|q7m͚giy7pk4Έykf Y֘)xM/$  ҍcBз r`SUhipwp=utw?==\UېϙR 8|{ ^e}EIy+O7"%#jU"RT IH2Թ{GG+͕Ȅh,:a#Ƃ45$eߚ&(l]S]ݢΆ9VHQo$( 0ƈ+rb~X[e9f/o'3ݬtn2ydEv7&ͺ@xk/3uPb4zr5T¶ |ǽ/{23sd̬+r'/Ʉg[7 n 8FPF:g\΅tU>,ePJⲥ4,A4J"(C@pT<+-4H=,ۉ(GݛfG}vXTfHTeG{-MtP# RpCm;jxt@7ftϭ.\>&@t_7.[M?|fBfi[ójrei_mʒp{{ +j.6/Iw^}Tj9 9\n]G6z &]¬"ȮBђf'U5ݻVjX#ui +bFDž-yZ-NKJ`_@=:!{K xxyi9V @75[̴J'@i'k[iWgE Y^'aPvHB` Vt,0`Ÿ'ؠģ FיS;:~ggTe#-ʁNCMz7S2AO*l_! ?7Ǯq%mIӾxCiUg&n [61ީC6ɽ-:|8!5ΑTK.=&0EԬ̱XWj@+Mm HPH9BLb 6}3Tge! EA5YbB{:Nѻh3jFD,|ܺu X /C MT;̀;n!O[G}qqGMašKd7yml ?O+v;0Ex΍YIEY`|/<~ޫ^EAzxԛbVX1;B,[H E]K'VbN`95f QaSA =UJAZ ;ހ/{aKŽûvFw^Lo8hkuڟ?Rvaϡ&ef.Շ d [v,hN )ի(BC^L4"ctE]xqȣZYYY}P^,y}ʫ‚)z)ѵpzc5.#VvePHM^4n/(< (øhs0,*(u\\^qH|eU(,<ۀ#<~ ^_+:T^nZ~n̂O{n5y$3ʯ8Ft'-&PeN̲drk߱x5сx*3>cQzv}4fϪݞgݜ9N%<'Vwժb79L> stream xZKoDGnm 8a8,&a6LdĿ=v]mOBθ]og٧_JJјOV "TP=5~|}~VVߞ} z"tm<DB!1#1O':rDFW]G:i(p$F9t|յ]Me0%*~lrS)o0 :Z@G:zXaBRm8 v@'c_S?rv%)Kx.}F=΂`}4v%uoZ?3yVL&m74#'fh8=~a4@Ȥ]I -rr`ܭ.Cf{>8a mNzfn<Կ}sz4f_pz3v%N}ཋ1ꢂH%~e&KJ˻Rݓr=z vOg{097ᐃ%cD)pl5b%lk~nn&.qmW%u~L1Y≉fwMo@::a|lϏ4-h`Q}Fg.88iRC24uw(?\=QS *>GU!HRz˿.= nBj<Y>1%{ qp~6)L-Dgܬ72=cd͐J6`!:؟F?Kwu{7?@k˰ *6/`5 VyPGf /?GH'y']c#.VR^,Xm=Vl[β܋,-îq:W)Ɠ]Jz:yۧin|F:vˇbI/bsXQ 52W=_ 8Ejc yghcl3*$4 9.Vmr ,ۿ+QqX&!r ,Nd$ 2F^`n\E0]3\@YY'xHgyCpMxh*m_k[Iu7Tؠ0A`t b_̲S")ȱ4ӯAeg:Ou벼ik aOf \͠$i)9 %z wv(R#8hOFZP@ǿ"nEhyUCEY; 4"yz7DŽE2+?C?ڞtCqxw!=E.wͰ{"{==h+A=߃<Ew@ciFtNn~+AK` ܮӜ%F7M I^ZרocQx;xYlj.WoUVO_ey8H-r*B fXJ90)N :pPowip b` CCȳ )`WOC݅x,rG4j7^7U5 L]56h$gi=Ii$>x5$q^S Ĕ9}"ASfIn,zu^2 gAzߛ|aSoغa%bb%s$֘Rf Vrs` "B/[h#СhԩB0wʬJBj endstream endobj 581 0 obj <>/F 4/Dest[ 132 0 R/XYZ 82 564 0] >> endobj 582 0 obj <>/F 4/Dest[ 132 0 R/XYZ 82 564 0] >> endobj 583 0 obj <> stream x]o] tbRim+结ƺSt~K-?iwvvvg?W`eq~yzŠk*ZT]q~`߽튫I]\ӓEQT%54TPTMJVtۊmSW+:Yj !k `y(B)9{~gYIUh gH}u8__,`@7:X̪v2#H gI[QP,GlJd.,C,nX|?v̆U/G=s9z5su_1tt 1-fusaW.U0tH+jab2cXrg?vq1RYS|4vӺޣĶ%rɛedr+Ṿ/ZPvwO% xZ͂0-u`PV7j491 EWز=qk;^f4ns->p4==4ݹ5~4<jvȀd{lgcRAVE\oQD։dD?i4؍5~@ը'|%uJ^}, ="[#A%GW&\h4Ƶ6Wj93=R88S O/.PAgMه5hh~d; @+ 8f [ML[7ưR f{E MSgS P" Sv^ۃJBSLÁB̶8ѡ5 %kA>h?A7Λ]y˛rzD`_ӽYو-+⩛6PkA^t<1@hlȂC40l.JQgծDϻh hL@+ZP6^xg4F  i L!/m$XՓVۉZRm:A,+ˁR5"$vYq #C祅`(P,tG*"7Nu  "x:X"t&CiBL(1(]&aeD Kj݆J qL6Mi쑁cL65!4d{]uMi0p#oAM՘-TD:W Bqbt6) 7ce/&k84=ꚹ<jh', 8R)Xs4PICTE@PZHx)٬QAJx.?&>܀`Ex$ F?-_a;{ 00ޕ) bPHIҌ‰b5@P899id8Mɦim~ʦn~ pJbrPy6rT逩hXV]E0Y*\Ӡbr'4FKj*kʠ%2G]C[20RV ^RZӒxR/&zʑʛZ{\ߊț-$W=qi `PS@stl"X.+TiB}JME7LWGR=~d > )ΪSҩSɀQ֠X_툦d' cp RM* x2I^oWu}-TJfl x`]{&_׼M1S(فi.K,5ujD<r9BJAE@g@ ˒igaf8tgG vuB8.jNfJ R7'udtsC#{6R3 T0,hv{2fM fWA_~8ZXژ %2J֖=][fa 7m΍_UmP9ԍ(IGƭcu=݈ I:לv$9 "ZHm;I׮!ʹY%x kާk8s_רK.g M5@mO Ծ?brXb%PNjϵgҿ̼_BSxԱY3Bn荨sAb*nݾJT )u;R:qehӔ`sp&2)ܩ BK"ϒN{i*az.x(*|n2_茋+5;S;No?,K>FxԿ5u<UՈ)g&:U&&@$  Y}֊W>`h;tgٔ xX+%h{ cJs"L#tZC (xL0@Y|Ѱ|䪡RMk82&<ڠcz+h{D& - Ovi|yS5]T0C>vD'۵tsz~͹_kՌyyudZM8YWj[Ad 2dCY4oOgpYbEK "))ChwS $KK^4bsB&O/1ȳ2|&:`d$O'X &8NZ6}:{ M(4a`ZmoOYcM}XRHQ / ʂJ[JI'K5~F'uMT? BYhsSk[| C^f w~ n!۟XFo+p[EcWUN"ED7*Uu" tWtј]ƵWc[:.v{`L^͐վyդAa5c f %Q!?K; 6 =ҡ HvOҏnh^AqU)>?xeR|[6M*jg#Z]>@%՟) Ƽu(9VW@q.YFԇf;*Di{&r.P$V@].Z\2`==i q[j~[ 8w"w͜ÛVt7p\Js]ށc ml嫡Fh8u )gS$2sp?@dƠN).1=]+}_i}x#\;q{;zIto@HXv~ׇzM9 y cxdjomdQPGD3/ endstream endobj 584 0 obj <> stream x]o6݀ ։HIH܏$. qMv6f$Ji7Mzଗpg8~~u~2"LDQS_N#}wgYt?;?}tװ*@",R:KeyZEBFG mE F) ">V-BVy#L CH@꣋,D)u,\BVG ?!υLxi/CTiw 6Qb*GP!\҆6K2(I= PR+RMjH(7E"T|\q61cRś~\"{w1s,D*1f`* :r| qLQ:O*`ʌX *Sf*ur fD)!fRIUZRW#bŸP|\_F+fUe0}6"ؗBfaUMI.L}"'0p7_^o?;WhQܩ98F] tǙ&Y)ۧIΣ3&&tfeuܛ[U- jdĦdkS W)a9.x Ig4?&B əoHe#O&-b q<2P' *.k(2o( #y/GgDĔ@MJW0 3(+gWNAUfj3Y ήD6\%Ar.MQUj>k');BOT]ߎ2lbFv_z_ X9ׁzZUU xpՌRl!6+q n˘Bڍ1n#t-fx5Hʢ 9P//3lvZ2HSAHG6ez"@-d@@"BUM᛺YTrqʹ M,6uк~5%Rkp{Ť_-5.0/bˊP!aAH[OqqՋCZC;nlz=%z]޲~fQ6Dߵ(o9v."HVS\Eh8t$@Imߓ ? +/IjtH bE_3,^E}m(d`EMd^Ps2NJ"vS=o; x]K2aѮGZp5HsM|nrBdU+<Љϐ}c=0 (fw/\~=apݢ8Rg9b8-N >Vԅ9%@Je1;@ƅ76Ƒ~4a8=jIzB$_;,5"Ji/!^MUoʲKX"$m(2k`3=K5=J߾̆=^RA'/0Qe0kf PW$.Rd{+8aD;X'sӹHq Y6P*)d<ЮF,c8 1t{2][ {w{59"#tbY` )9|!]5BA u_aEFyѯȏ"1AJ|0L./ H^Iox8Kc ^?0UMj;ePܕ?A|E6b+smE}$Qj@7yUH[<Q7-m?']^|jorSBnQn՛|tmH(Xz,U>$22w1~X(>?M` +܀|zYky[:Y`-)\%  㝓V|#X܋t{Im K' |y$ge&ߺ>{9J9?FyF9.ǣs-5%#Ӗ`a*atuA`blaryiXϱr>,ѫY"t*uq~rsp@ [ou*E(4)Bث1,ꨣxמ7켗!6f6G{g7 fj8i.NNi]ٞ/0ۣ;3Nr nݝM~ANg׭2?vz 2((VBcKfwJg@d iv\4eO4YvN 󲬐GJ`6xU1s<tgW/x\ guJsݨ>5f'@Rzg/Uw^‚=CJiq=#Ȉaj"~dE$/v+iP;ਚ.m8y`:zOt'-*6r>PWc'hmw}vwЂGP46Ȯ hF(O;klz%k{XλB!)2Lɖ鏑y^6l5j0ZNdw0C]hloY\[4F9a˚:zZ@bV05kP>RHk,hozXf%cog,"Y>D(̽Rhhb5T x,u⻎?O;վlӞfV% MSOLOqsWgwbM!i5Ƨ4ԝf !OBҸ )牼gP25Jx? Y v4ܐJ]䶵=Djzg endstream endobj 585 0 obj <> stream xXS6gAvS,Ym:I'i\0)ܑ3&}wWli߮V:>L(6, )s69v{/cex "N <3%̸`NYxFMwXDjI ت2]*dG *^̐h=%<dE$rc@ UVQtC%/tJEt>g[cu2lqѲdq BDOiQB7 Q‹\rU"8%9*K4B@ոkƜ뼫XƳ4IG}-,5E"2U҈.!@( DžT!R@(W>j?vCnF[ Zw]iݏt-aRZ)հ!SW69B` t BpbIO\I@u4֭;c= J\j%dEBK~HPFY'C?Is:CF5VC?mvFw]A[ 'ӞJpMkyl"iORTJJ<,~P*Nr*Aǯ}pUnZR,RSsޭg׵>]86 u  rfFujBx4@E "Yiivx i{^%d){eYO9`>}\^=U0]=`A@JazM}9; ˢ.,ӯf3( ҂gZWΪib7} }E}Ǡ,= u!B &rكkL{CAU ųb_jLt,8׽ ,+ Gbt駐hayrv)Mx' "M,6U 4l Zuklft PhZD;(Aj*\5tkkpޞ"i?2Sq]xƱ].K =Fi'o caƸJluA3$ Hv[nl`0lI]O endstream endobj 586 0 obj <> stream xWmk#7nh6w\AJ1s'4SP;#ym^RBvF3o߻  =`y6ܳ>>x6[{U ~sWx7i`+6q`.=7 $ӻJ"eIƻ d~{)JY},v;n\ $Uo7D qCk00qi T{27q ] .F O,jpc2mb#K+ܺӜy *i5˂m(͈֛V9du(PO˖ A<~:uU1SZ7m)Yp=Do1!P *cڜP /p^p=fW!QUÕJ+ɵeZ2;t.r4י J]+;%u=RיQh?Rcqhd9Ha 7/K\0u1Nʞδ/;̶1R},> wfI =bRXeƍ?vg<վLb,ql/u4+ J4Dn-MG6?t?NY;5AI'3Zޮs!=^IMc58qǩA-R#u=*}wZܜtc3-t]nSB endstream endobj 587 0 obj <>/F 4/A<>>> endobj 588 0 obj <> endobj 589 0 obj <> stream xSn0>l !%H@" 953IEHcN4Swݖ9 зG]áVLpY6EgنM֊"f~#[e'~tlΏ] 9V3 z)עf#mI^pcL`)LJ転]XcE;s(yk_߅FkЎ#U VSE.$/9i`?$ڿ)֘[P[mp)#3?>dN!ާOA}BӉu=A:] ZtLyڌ (4!wm7"4 endstream endobj 590 0 obj <> stream x| xTEp]'ݝtstH NHaOB!!} ¨U@F..FP踯@ST[TթsNn$bHwM9BH*(*,yq'_PR;~XBVA{xaIFf؀SпrVEuGBHR aB:&WOޡؗpJjo%oy~HH֩U ;={*TgxG|mSg-X<75 #D8sNe^6w!Y? q~ivŬÿ#x%Tϙ@T{z^UO;!?jW7u_\{[2Ƥф#Z#^OQHHAk$AZ\o=EDV. '^8EWcg1 Ӟy2k9pMEdX{yat$LߐVLOJ 'I.a-Gsϐ3Mci4;}WO-́{w½Po4'=G871wBy ٧Nv{Z0V3 v+?lzR' Gљ-P0^1$p s,l-<p/x7-eP~_pσ;Y@}6{wC;_ ;.ғͿMxq_W~_W~_W~_W~_W~_WE|o{Fm>~|Ūjگ?w ;FQ.B$(@)X@P׃&Ed,L AqMMl?+lql?2Vx`c,O>ΐ߁d%(ȇoRkNj#}Q7'~ $VGH( #b$&N"XH$@H4.Kql@DD2KtA:$dDWMIz@mIO2 "2 #I!pZBFR2&eEWCt٤3n^BT>9MiXc!lUFהIJQQUqEKJ7,us$%0b Ţ2iTSS!)EeP#a[]]rr )*r!8PQUtrnRhy;dGT+N̕e RP̓jh).+/*]ЖSR шg4Ep( yir,)DέPZ *BJsH_yD %A)w!Hy^ r`/k "[4F(R4L_rEVZ?Mw@$)y rK oiJCR T s)yRM9֐:,.\%/NSCˆhV7`G- +-  rTBΞ[?P3R'h Xe-Gk؅/֔z2@ ZFG-OVg8Z>͎Z=>-Z?|F:jQ0w s3g,̍807>%V 07>e6ԋɇKy@r+q Y-MIs[z) rT  bKRo ᠚6ih,G);9+q(ԪtYzXtm E@%*)esp/E(W.j?N2ʻ~7%W>IVIUDC}*%P 3 u`(h)Gڋ HbQaD\!ey.`y&@1C&U+~O$i\!0<%#ҥ^`VcOHnAWn$(]=yRy퐥t$P\鵉4vW]Բ[ktw(Ro8h9&FIlOҕD//iQdt!pher%z>*^2̶<8Fbxo=÷侰mg' M6bίEMJsJDli0 ꅱ@2Ob"#K4ڳmN퉫μxB =IVNpf'\hKL!TNHtYfEe(':sVfe[z}VӚ;Ԇ921*]k4Z5zvn2f:nٳw](d.Y/^?uh0(v¦@ZR0ۂ!\h*;-z>ILrZN_0oѵo}xoCK!@ LHW 0sBy(w0X8C%ڇvY_:0=ҟNpmJR3؟Pr~]6C-9Ƹ M4#zG$5x?ϲ,ËօSuj8`$!BCg2S@Mic4:ëٴ!q܄M ?@ĐqAK` lOG&Ԝ<ƶlTV xzxrU`M VYp {YvDXU˪:NR]Y]n{O)ٕ jճ>u$usëFoaU[UՍ?lx>)9thzgizs7-^+xNzƂŹm~#bkxʑ;Av7[L9HQhs5:a⣧,zf0flW*vT2$t:hbq-- ɟN>χոwv~ĦW߲5^p/RE:^W5NxT}\MW@,#>hpaՃ%G2s-H/lDpeKY, w ӑBOCƅzHD TJ(K޲P:8tn_/e}}iwo[ۣi\阪RI4g;yr`??K4YSg^9 \HgA?cEPPR@qo %;act| hH!,8#|}vjP<+xpl6.%rvR"Z$dSڿ>uH[~SOҹzӟ>4)Kɮ筱ZuPv~6MKS[3FI-7o fP3Pry h(7   @H4P5SZf;NqLBzgBuT?q׿h]󧒌]'m?;w,,kzGla={*YOrTЁ艢GDMd"zL=h$'Ξ^-`s:B0ۙh`%@wJ&8g6ɒLf=:mZ9sݟ,~iciڗ{Oknֿ[}RlՆ .AQS4Y|W/^U>vʝq VKVuC[Fom!p78 u $|6##ǁFDs \ "t=XCXڷ2v[Sj8vs$B6:"N(a.7rUc1'J<7U+_kp ML5OL2oe!T}ng1hʫy:d#{2Yu0g4^癮"cDZ]q i ダz"rh$[9(Hs10"(_Ohz5l[MVbu)aO}h9=`#}.[X?FYNpl%aY@-rAXo'sǕO9zzbt?Ϧ?O0$UBȌqsҺ5^ ?dHsXHP bh=ShF+ NACU;=Ou?r%4c~H{3Is\PMI4]>^_ufXC 5.J% dq+o ('.@p"[a^CynԸn$iwӻ':qsB_>:W{h,r`t͝8t}} $2O;5=aʹAPK}!{Ed+=gէuAz]bVeΨ6m/4nu_ U݉9Hѹ Q @_塡i C|hxѪ,j|rwswV_;-=-p&\Y43Gq-DINӻN"+ϣ gYy2Ue{HvCZ2oeYe2'rn7c:hOT6\75#캚'6V l;vOXʼ֓ Ahn)&Th_3@, 6 DW1߀K ޵w t]|OGuQhӞ7&;t0MHaRs?t e>^xxx؃,ۚmmGBmqc&l lVm/ /jS5z!|uLO/''mO{*?ou@YhH&*(t+6{ui[ 5JSmA0Rhctğ@=Ah(Iإ/T~xdd5jz7&fVa)tWԞ+굏vSǻ?%[Ȏ­^s釵MďIY-sT`-Θy#|[$#s &e}'L ^K)sNzI򅄨~6?t:xנvyUtQQ[+mX:|gL{ï׭}篟83Sꔑs?0#z5LPKעkт*YC=у:uԮoPj']/1_/Bg <,FEҪAimԋ@KuyLєR{Y~KgS_PW+tW O߾w6~ecϵ4`- âgf:R*mVw fb3biN (;anvQyohcOlBP "@f%*k[5n13ƑbO=VvD@u& ~g8gjpP~@T؍7( ^9{0;D&AX-eG 2?Ҩgݿ&oݷӪ_W.ʍcgX?Rpȯ `+A"` /i+wN6s+\oggp7IﶇD?A#81yt.ou%*|zdž[:Z ɘ2| LW24-nroIA\9gox֦҄Ib q4)'5]p7g>Aµ0Ayanb-FK9p!ȕ 0~Cjm'fOv<zX7w^螭l 59v?6?tHFɵ'œoߪ?S'? ~zlaGRa85.Z4TF)9u黐`?0o&-(5ݓlhmg9$+,L'syh^\}Oھ.B>Q3ijaXHN%!4KVo^J0 Z"0Ϯxa*F/Uom0B" zkރ^if NK&wvT{6Zxx53.~3{7 bPYFӮ~MA%b#%'G/z5#.@-ÒgK7͎V嶀|ʏ,kmp?Yo[=,0's2wE*7#nƇkg+ktsq{qqHwU+9'^%0pt ubZ#7:(z[\j a ^yYtB})-Ez#?ô13 EiEOdrfstDf;ȴ{y6b[qܓ-}vU$~몧~8Ԟi!ē48QE5БpfjQ9 3Bo3sӼy ;gx=Z<~xdZYlvh3#_-,^9 3Ȍz.gFs$:ZM=\|{M(xzzw=w\/&Ak<{kÖzh, O|ľ/j0''=0cYtͬn2AZYgq&2=QpD{e]{N_\6J:6~M+n|7cvΨ|!Yhݨ9ރO]^N>a㰐rmY5-Sj">8oPP~7@ɿusfOˢlc'&quKW6v/86N/]ypsaE2,*򱾨M^O]G{\5P+u{!FM9\L:[_ -yrRZ7Ork=H@#RYQA %[dhgu`2KK3@N,u  M6nn aiH)➓.g(+sck{rۓ\#K RZ5yjYlᲶ]-VyZ.znOӣ~8",GnYE#~^͹]Ns=;]"zMlY*q'({q.!嫍IV)QK_N8o֊Ĵwn}qr s]ӳ,9>r)yyX-==V9mYB"14\p\F* ,iEKuv궢crhkkG )G#b/nz$&p|@E%puw6pm`/qlǨ2:bR }&,Xafpr-$\pDn6u_j.>ꕷ5FыbIm}-}d$Kɫ7|U?Ph 5北nrV NVá>s XkE*țnrzA7^:JW-#: p}H"$(a!(.$vB~z_V`;WotjLabP$K6EEQ?ECԪgZJ|<0_^C[%rָfX3vWR3۞ʋ){#;3?inŴL=3?e޴afcXX4,C@24L 5-;93_[{[llF*e:ߚ}91Q\?Sۺ}1.?Vt5}rK7u/dA)+x("4`08z졙4BܓBWgЋ?|OgOZJjڦesfT6<νվRϢ_^:u5 ~nk+hKϱ}2W]5F[G+g†9DUүK>Z+;?a-]#. 0G]˳nj3d)|h5Qh)n֌|߸IFm)N9,Q6|Ƨ K jY緱[ùӍC=ᐴU8s4lSN;ċ~*x98&(,V%75gd1E8Tj#oFY%Ak`m4ct+FЅt2 w"Th/7u$xSޑ>_6`'! 7Zsq/~te3oL.J W]wz=024G2yւ>!l!s\ċ81ْ 69 bu&Hr9_x\:Ao\jmh[Ik-R$PS4Mapjq cG(?AJ2ǦIURH-;9>WBzԴk>[ﰍQUA_ Os$'hӠ@ #s%\{߅3ҽ҇bN7AJ}_XYo[6L05Ën C6eMM?DN\`.ChCXo^UgɉN~.&/،؎VZi[\ۖ'-  S!|߁#jFaFaFaFaFaFaD(gp+!8 ?^e(?J ~> S*΁ wi .B$p r=N_X$I,"%u$2Rp˟pb 'E.j=υ/4\ .ݬT\ }8ʌ63"?(n;Í[ 4a[%8ui[GS9Ƅȏerg8]K |44>^ȫr0j'2u OeW0Ƽ.#ˠ0s yCBq"/_A;(NC$&߆XD>*lj \m^Ԡ4hfLu 7+0ZPVbC%@%jjAXn&*UK) ,D/AKbnf-|ur.1jI::ſ')P}}tpJhu<ܱkWX=9Ѻ#$ Na0Q(&#{]&f՞MH࿪݃+k(2)F*Ho9c uC %|-z>G?G_wce[(UHӥ\)_*`m> ~\G~uZy&Y<12nLz 3ps#p- #G`@AG7B:"]"l'Av DaYB/pG"~H8a0 BSSď ?!@33O '?%Bss,:e2z1 "utC߃ úg*0zk;Z Q͚poðLB0(ۓ`*֭.‘B] n' }r vC`L@<@)n{Ib`"qd 0Ń=HMU )=qK#YMwJ"M{#>U 75ȷRI)G)=(I)mWܔɸz%@>C.jsX,uѳKDn!ʵҖBLWiLjMHg֤T%曐Ҍ7D8H#<;cz o#4 p>|&az.bi#Z  jM⼞Z0:Ś3jHE ̝}!C2$ kRXkY/zED>+3r앛䥲[ 2 %2%52 F) E1[( |e_ţxvG?ᾒ{خs9ԗ=foDa36o|?< endstream endobj 591 0 obj [ 0[ 634] 3[ 278 278 355] 8[ 889] 10[ 191 333 333 389] 15[ 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278] 32[ 584] 36[ 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667] 53[ 722 667 611 722 667 944 667 667 611 278] 64[ 278] 66[ 556] 68[ 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334] 96[ 334] 124[ 365] 1685[ 222] 1688[ 333 333] ] endobj 592 0 obj [ 278 278 355 0 0 889 0 191 333 333 389 0 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 0 0 584 0 0 0 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 0 722 667 611 722 667 944 667 667 611 278 0 278 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 0 334 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 365] endobj 593 0 obj <> stream xSMo0 +r!!P$VP0(~X$c='fL7#sMW0ѕ;NvgUS-zǵ4f8f=F3նpO[?=2$ h*{ތ|{N=0#1eW%B] v%ܧc]\= cKJQB/MR^/%㞌%y'2IP!-?Lˏ~2ɿLtJ>"#*AFt*\ PE*Tt-}IQ!JAF|&[RD"ycцz@7b?&g:8ps73w5[ endstream endobj 594 0 obj <> stream x|y|TEx;frL&s'k&/$!7!GB2@SUp5"!r,h^ Y,ˢ@\/W]Wof ~Iׯa|Pi%-+.)oC'=*FTmP!c &U*:B6UنҞ ͨuߖa'n<{J3GBz̓Sg2ý I;o; <Cn}WNBMX] iP'|Oi3-|ٜcbukw@ 1g.z:~G)}f])pΚ9w^@c9Sfwq9|$H+H~'FKa.iJkJHNSIBUI{ KB֒r"䒁mk?9e揓\>!\{Y8.=kќM3Y'!cy YҠC{+; L|#`ai| s@~sdxO~xg<7}>Q įAI2@v(GѽO&poO.5đ_OO D ':D11 "҃H.XY(W1v!{|1v7z|v9v%vfz!ājT{}}];օa.s515>/F&.OIE/]vGHDoE,JEF*q8|2Iy'7X+rizz讱\_Y]SS;W-SU 1tYpZk(]S*2jenT.kvĊ+{Q ؃!HM1JB"$KZ"4A>0'Kjw(ȴ8]uC.z d"_#+ 0]60 P%{k5C.QK}IriasWVW1(7w#yGU7t^Hsd╹PdjՍ)Zði 1j=6YfRAiW= 1K@L2Kj""{ '"(*i] WL"P&tn69|܍CC_Y Y@%U5d=ջ9;o9"*!$-^jPyLd[;9om kPa\ަP%-$/6 wA$i/ W =⌒4Xu,FءDti b9։^*`ȭ\F2 {_0+ЎI _UQ/T.]MllPv{|Av|wK $Y)(־F'+Wt.0}r/U;-ga`JI xH%g QF+Sa!TJ7:1C?Ep3d7,D/E-f9En9^^Z ^ (@b7ʢl{!}!S 2.JA F~0)G E C>00@T"L!dF" f37! fF!LȌF̌AT# f|s#d" f! f# fnvA2O9rYr5L7|Ժ $`u,ГYA T`Nc9-Ao:vCn2E*H_"y}$8tp1,9nj}e[-ȩhɂaIjv4|ВŻt!ڴF -nLV>XݨSeAz/GE\^&A!ev#k@|W(ooQ78O$d((ՕctS)V|0n""wjG -*+<:8gJ|qL9.s`5Nnd2f9K1*]x3kj#b׶n$?ǽC$Ch <:t)ѓb(T ZMy0 p%l[ 65qCQwl'$PM9n/mgV]@Š[4FSH,aY:%ƅS~qa ?!4dJ\Zl9NuSF8vlcVEFZh {J,Xyk8hԨE suɁe}gTq?<ICa1BItA(&"Qz}^NfFZτ8}>*Y /PyEF es8lViAˣR T3i(/'0‘^Q! ժ,0DîB l N™Z\< (Ӧh29w;ݧ ޮ {n;t ie7PqL0J()6FqFWT>[)R^=펒H{Qipm lQ WέX4IT:3J%U~w+ ˺]NhiG(Ti:KjE8uB.)yJ蘡Oi@+Kf. puyѬ3d%Ao jSn\JOLrX#<%-!c`z'xN$f4h9=i-09L\NJ䌖([﹧fb3EY|4~7FrUOhs?ёBчDz; ?ܺ|%h˴+ץ?7t*2 #1Z|jLw8Xomx#{`ċH"\N⠐'vk\B1A $qA@\Q+0? i1F2-|TZ lHTZ!߁|ޗʜ>NE{{r^%j5x/Goװ?/k:.=),z+ Nѫqd_b%`K.Qq# 8+Q>j84:fs"I%lj]Ed28̒sc2h]yq&t`t=}=(MN%A0"0-XNTfQ ]X@Ufzϼ[Ͼ `0}ֿ~РR" 5 0@$<Ib:{~ ?4ALcIV.rf-u&-5L/(^gƩ|ygAш#pٍ^t>(!|K7NoG?oh|tӀYv`1/ Ez.`|Es$Ҷ,/B4EvxV薫$ OFyfQ Hl=3N&w䉈lQkycQbe [TEJS]fj V+j-_4@hR)570g4G&<%/z CQ㹒D`lf^ /]oW{x4a!zs"ƇR~< asxIhhXU8 ãyiեQm<.ֵ'ZB1:&>hN\\4'$Lr]-.lS`v8s!CQ9<ܢajp/N*i9όum>s{N>g&|L^,R_ ٣|,=n_P4VY_IߵVS5ϕw+s'Z~_=9piV>譾UO4ǃqMAz"c nF0\pڹR),]j`ف :phévļ( >-ko>ƭƢG]Al TbOs`2T'o2Fk_ B@9 $MNI3f1[uP- a蜳 3c,a({mqwݧlǡ*wPngDa{)gRWf*}杸ƄKy2S\5Ϯ8E oOEY3z5n*v 4l>V!hxU`[`Op1(EHdNJ4i-%ePpWP“xk<8yzn=V7( vLRsJ۔wÊoMޢ;iA@0=E.@n@AVߵcf`$fH#]8 Ծ. F98>e!="?N:WE3Y[Aya5e2jͧ*'jVvmrۊ v(/84By{goΊ?L|+zE3//=!"'pAN| BOH%+!s:Bjƃ1jnSڔscmrOB9?0H?7t`ByiOE?W9(NPJh7~brrncΖgѨPn8:$c17pk_g#Esytψmҍ ?g%[0㉕3޼ l]p6$\ɠ`k-:Cl3Ldm lF|Q V !|v䫳c=:He0o/aakQn> &kc![)~O [_=г_pu5WBt!= 'ӯaDiRl.,DCBi]7<;mif`C3UJ|'8m>F|)0NsRxzSx%ۚ5miΒ7,8}G2+堦#ݽ+3p<ȃ8 \_‹rY;ؿl .pVcQI2%SRw(yI}U+lXexmnYw}ȡtԻ?2k\~lV.W6}|a -_meaNvr;o*0G'ݞmXxk߿ovK1b%*L,Ŵw&vک D h0yQb.K7zf_m ˄YjFwa~1j `%$KTUjOyy}}﵍zcreWln-O/o=|Z|F\XcurgH- V#Z脑l M45-qھ'e<4o_(^ )2tw|,M34`CiN(2mJORk e `5Jx0/G(bnG G mM@B Ki^> M|l#9$#ć+:b+Kznm31@\a HttzT!`t(NF|M s6 m_<2<5m2Wπv>4^v:)N x_&}OT@a'b%䗵6 |O 6)"k:'1[MtO q^ғЙX|]H)+1Xv~\܃!DIׁT㐼 6(\ GM.1㡗 >Cǹ;tD,δۥ-M{}Bù~Nfrm5 ˰r95C9ݣǚS95ɫ:Ǻ:K-a5SPE5g}H7Y~TZ9 yY!Z9#:vÀBjHոX;K83\0xsIK ۪-:W1Gy,o#'<%SnAcs>`үzK$hC rJh[:ceB /5v;jy:ptfBo*z}f),$Ԁk\9 3Z08ܱTOtd qQ:R/T3#A J > +Йџ_=[/o_HXB=l[?km]7-*wJ{p|HTV^k\4D_"q 0  iiygۥхx7t G~ /<?kp<;PdDhVCv~i:Z(iIҌ.d{t##_J|7:6@"K 3)m쾖QH76 HB&f3R2SaQH`!a8.#}>ǭ|f=3Lkr(FNCј40$oׂcNBN^G cGl؎WHI՚'s-㯟 ݏabFNXj2&0tI9W<AT%NJc鎎n2wru歆(kΩ' /ުB\ 3,n]F ƍ]U&T^>兑̍ Dww.#]S;sbX>Cw|L+G ׾Sg077.I)o- 4&=6bs`~&exk sK<)PY f47, sL{@0{<@YI']b}|b+]/.iL7k|irznʱtL <&ǔ&Al%]}v}Rzdrd,F^##2uf]U5H;t]4 p4?ھJXuq1>*JĕZJ0Cw\PSWRnj Jݵ"8 ,U |{@o4M'!u}3$4/ʙ'/|nNjgvb gs:>}Tt}Ρ7B4zږ?7}#$I7p$R -IIf,1 pf8^,vt?%<Cȝ mt#WƠ\<ʲƼ0w1Ò)IZ>W-՟KVIH-!"@̍m v sHc˙;{5\f18< h)6=EA*6͏w_N{ofGX~4O,PWSh_WuWz%źvغTΝD7#  ] Η fs(M#,$-2W3`f}{FW/Lʉj?{e}kmCZuCz+VmБvO9zG$ݗVa)WA2Рp4*g VCb)T"Wv!Q;M ѩ j eg/, xD:u7:kB$E)!TX0"/{p1樈 _=5iZYc`TCRlѱZL6 ,udS+ʮƦ҄3 7f4_P&,mK{-+8']xoԮxB6V{ksCSBt!yf3_C Q1函9!u:y% Tebc|nrxP+.M ޹c݇Vd?7;k\bj mMmeKSE i?5)%^0S^ RMytMJ/1%_yw~)mi3Xy/2ku?8.OAVX}d?#݈R"<^OQX;nv vy'c5H^07'rI 2՜crP‰|Hqg3_5 AQVSF 5'Ru.nRN qĜ!tcVl<ɕ$qd։oxςoGHv}1uc(˩t{Va8PKb#n0~mL[tynwL_tiRNG@ty!Qڨqd'<+p$02`SRy<=~Wi# >dwx?\;ѰA`:r7Z&{AT˯㩚@DO!`u=b>.;5 BDѻ/}{'Z 7 <,4$ 8 ؠ(7}*7!DPr0;z:Oeyq=3#;5ka9 7x&`6yjr1N rODlmsL@˔fKEM=䉛Ei#S3;n@ȳyAr'ܛ ~,0DVxMa |Q1+8n=?W` G&f n"*g.( s[Zv=ɞ65ME4S8=\Q`KTSrV%!b0 /mՙFK4ɦ5jma&$+TB|W7W.YJ FڪmLKMe:[ER`f+7וUwWdh.sf-4[r)Œ`IKHΘb[ 8ߡh1CP^X~ETl5jC5j4Mzh)<7#` P{M *cbRP-F3\92p+(N`TP62J5)7µQr%ˮbGw9eI,2(N-jԋxs4ݭmWR뻌mJKPJ׽}R h>SK!6q¸dn WV1[z]zw~]XNs.c NH_iBj7 1cGG"p T6+sG,!VHF#ȆzaDԪZO8=h.?!-m7k6t38wp*ܵ jGCȷf,DYp jwh:/kfWY E:hZh*)̮V]IN!Jt2`%l@AFWxp\# }2ܧ}Kn&\>%_\ZK+H ܊N %ēRvZ T@T@ TT@Er{Վi!,Pz-|%K> pEND47I|W0up1]dF2h,Ef4%Tѯs2L rJ!_ 5(C2+bʓRa |GH9uVs,,Z ڄVGȈX^#( ojJ#JB\ɞHza8pN",.mp0jtrxU+A-BEcIChZF9d q+hS<v҇ LS~ endstream endobj 595 0 obj [ 0[ 634] 3[ 278 278 355 556] 8[ 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278] 66[ 556] 68[ 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334] 107[ 737] 112[ 737] 124[ 365] 782[ 722] 1679[ 556] 1684[ 222 222] 1688[ 333 333] ] endobj 596 0 obj [ 278 278 355 556 0 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 0 334 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 737 0 0 0 0 737 0 0 0 0 0 0 0 0 0 0 0 365] endobj 597 0 obj <> stream x]Rn0+|LfMREZCRKX94mc [f4CԴVIK73,b8R8Br!|$rn],LgRU4zwbJwbDFLwsh(Kk*`tAϽ~'py~ C3|螃HܩiNM@\?{ԩKXQr(< (pyWl\PlFs>^d=zYZf+ŷ+] ~H~ 1npTp'?ߥ; endstream endobj 598 0 obj <> stream x|y|TEk/tw%Kw/4K@: 1K E$( u7"0 t~< 080( wvfskUu9LxXU5*v.mʌ[ঙ&|:S7hXw4v `a<3o5C3X}{sa6:!{Y;8P_|. "yFV?ݥtIy\@W ֜ЭVK8} QvB/3p ]ֹoa܄7< G. a<@f TkՁ}Qs{a\!`]=K/ F˼B o?҃,zEK9m1 OzqH%}0c-[o՘^hh^H؍[.}Wc\ˣ )hR^}nȟH\jx 1pZ}uCwݡ;tՉnCwݡ;tCwݡ; < n>Cw:_B7(%Eu戚5)=ɐ (0B=L0v%ڏvACau9 غ l OyGas3#@ɛj$Z_$Ͼar!0`&0CăE=}d$'t}! !2lG.b z!}0WEm 0* q\a `4:\pF=]kGT.'dgefyR.gJrRn&X&c!FjdIxȫT5>SS&,h1¢\j3-زg- -U yJ+V$ca O+ЩkJ5ipUڦTU3ǩk`;t\۴` #֢2TT Kl:" k'y&3 }=¦pX왼"臉,4.5h#Ôz*yl]/ *fEM$rMcnvKȒ*Y4{*YI4W@61uXQuv]m׍l//gq_HEwwvaHhA Y8TZq'=ndaKP^pr["\+!\r5 kp_p~!.a?r["\+!y%bT)'wAVB|i8y9?}=@z19iѢr <'45hO{$<D8#kӜA?y釴2i`ηʱݹ7'H1z3-{/g;ugbYss9FۜO|bZ5Z$k۝h1EjŪȃF@3[miΉ i79ǥ#˃$Yw}[Aj@E T{GK̊Z㜮`xgyNR-eHn)EJel ^ʲ,ʼLė,yvմFpŦDEX0VfoUU\^ K$9 h`cr}7Ks<o2|ѪlFj n‰.sLFISXiT6}Ѭzb3Yy}8 |X/USy*Yg5lP=Uec fc fc Uͭ:b$|a5$[aX#m8 pR9G p.l$@' d8+W$ x, P "J`AHIo/,k-#z:1lp= 7p=w}ß X~^$n!91,!`c6<[ya0>'NArZ)^~疄u`^3X9D>I`0}pN d}׆;Q8^# g!Dx?Bs_>.)/+%0>><@ŝ> na1`5lW#phxI/RMFt2"Ocr'_!wqI=Kx9NN-vqr?߅!_ULIÔ#Z\ ?Wr9bgyh9x3bIxIoRBaMdA7mNC^ ةhZXC97s)>m1!I' *aWx_F8-&K'ŭI 5BRIGV̧d1h؇ 9 v V3#e/ ܝP e3zz](8\~ &SԞR2ZO8ЈR2辩ӥJkR(+ 2ճmDZ?^j*CmY2W8pxwN|VHJ+Gp \':7+#Иox$$x{" >ޭ=ܚ/=FF2>$8h`=0!<DL& e !U!FjAt#HO#mCzn( &!"z#$J`dfdR!k`+ZzCy[ yRLiA>kU> 6IgA\1r9o9l3THkWOMFN%b 3KCn[1zWĠrJZ9|]k!;rca/C0].N7̃y`vCn6ZQ2q$ $ێ;CQj,$^+qozOaYJVgE"gP`8fq8iKGAfdo>jTVZKLfWA]Ҁb!{;C9kc>K؊8[6dJbˠ؊!5vX^{c#z,'bE"c|x0~eKj`{ v; aٳl0m.4fxRENn_L~C}prrb!o)g,ϟWNe(^wvԵ|d >Ɛ}^mMKSߨy}l!}R鷐¢b*d:Et܉ݢ>ΗYwv4w񣌺e&)RL3'I4*4сh/&Ivc)ZޭOI9%'Iw:7ݤսн;-=թ<Own u~ Ыg,{‰*эiwo/z2mqWk[&MRl9Ne+gOHw?>o¬qJma F "\dW  fs\awo& sSI9EW`ıZ6fS9Z{4€Zw%E7nw\ҧɤ!ΨS2pSi3\qmjZ8go%zEQU~%W͚hS+멿t|O|>q11q4ϤodقSbyw 3-G37S{ԅ+SO O6UJQV-.ࣵcN\.\N,;Qwb{ -uqfK<23L J4aƝc$%hXץ/9V`o~KF?w/+TL5}{7m!OO>¿nµD//4@-^#B\$s 暈y`ʼ>nd~%=Vӎ3H,~%i5D3UO]*e U"V}Uf~,"*N Px^Pyn#쒼}cPf |ȉg}]65+s-dr;3ɕXx䇊2SNN2SfW 4Zoג?(~~V6*(h?} %BD,ԈSwhĵ*~{F uAAh%@t3f!݌uZ-':v8 opmZٶ9x_]]nʬe=RA]M9RaQ>vKK%f#n:+nt6܄zɜd*B(;7 gZ&Li }zޟ 3w{!$r.'SN2 E!b#tܗH 4E]`f,(c&7YXMfA Q#񠤓=dZܡӕ0Q4qBa#UQqݬ[UǬd߭pڣ\ hw/R-bD¸!a>)[cK >.,ο}ߣ;L?v$G$:!}3*;S$;8r?~ntdl&_{^6R썝ɛrY %U"<nȸnEuIٗ3GyWVvoۆw^6QLNyw[s9uDv3dDui\f^íטbhEP;Im qmqe̱uD5UDDZIG{x~X[2q=whYvsnUS:iB)bZDd{PnD#:_aJ v` PcA]wO}'x'  0<.orx^áK9ġt AS~R==ۋ^[BtihK )υ!{KPpRK^?:~r4dqfߝF54ƚr3rI PILktKʼn {H[Q絩f,RDLFv &O&:!kdBV,؏kVYڲY_=]h+J*~X]V>ݷ_ly_ڻL$-||yJ]tPGuq:YtCur{)ꛁR>0kI/'C~>۟ͪۆ. ~O)y,.; t 7w q`2ԌLP36mQaw2m*ߛ7N˵(عq|PUB=CSC9qכQdf BG4F(3j%Q ᳻ 6gL)VvY}TˎAgF>3ʥr. 05%{=Ry0$ܪ~4zh=Ztj%kly JsHB#T%H=|\rF]"Sf_IFܔ 5ِ)jL9bP.ՔAi.fZ#gi8#Id&AixZk'i5{̆X)VKfF Qά8 Ax\wscȌ1bn2kc[5`:?6łBD2>¦Kd9Er*]D^Tqrs.?\&P!E c^rʡhhQdQj(LG}m30nv3ǸtAꪹ&Aĩ =+zr̅T=}$}AXL;rЋ/>"}dҡtl n811#UNrjށMȪ6UszH8ʓV"գ6p9ȝŤ IT*p,1CUyd@x*:qsΘKz)?~Qަ~q2x-J@/-@?IY̸ 4|!'f&ɮ8њ*[ye sv#ԁ ʖ3|^0y|gN.)Io=$uWT'q> u^DR9eAԵt]]ۢt(t){KGWVT*ʹs/m>@'&*&MBE[bj3"0}KU]E BJ^YF|)(,H YSuUksN.E'A}n#|YބHFei^ AbjtLx߼OQjՄ] E^Aŝ#~E|@g zi&;4)-/hjB~Y򇄏M {5V$ I1f"N4If֪rs9qi* &&~}ȿ//~}:n,?J#1M-B8Eb1 cc3u0tZjg~1݌a4Z3ʂɨGI㴂 gx#gAB"Hp|"G"2":TSKff02bV,5vƛ5 paY$ZVo\[I_}T9?USx's7 O$YU?""kn5׉k}_!.ާ*7#Aٽj.E-4 d{;F8eBt;fJ}í E|# -fh@y/Tj,U?0-\q7)_OۅEsrB2+U=GȜ9fL2 2#Ap2@4e5\.Ȋˢ?@9."?SxU$߮~^zի?/$` ,oBʖ-%+lm_KH< U䪈JT:exj4k3\,x" C<)̀#0]d25k̠` c6]Q/?/½ڷz ɱ.BܻjGG ߯?oll:7z5_)A9ىkז /OOݹժ,+>Z+CfA%D٣5u5KZ8W|[q}Zg\ƸQ͟Kma D^l w}I>+c2Cwsͣ Oqtb 7m{/Iz_'3j^M{l*_[BvM@ɶ5Ga],G'77% 5EQ^=ٝnOs\-WKXa|j#,&GT[#/kD9``ި ͍yR J*oN@{TJ֔߻pqK`])V :0BFS?axX gkD%ƫhݼܮ<3ֽ1lH"@BPjlvjpB<,wU nfomzs/0zw*8͏ 5qEl}ksh3:[I_ZK|e z>?Ï'Op.*}>3.~ن'l{`Dä+FgG.{Ζ϶l:4a uC s!bi7#.%E't8Ǎkklt`A5?6OsAOEfΙ"պn {C&+:S?|9*ըI 6!ч%bjS1[G1Sߡ`aZvL(} 8Q a7+1[5V#: >|@, |,'N9C:! 2ᨆJok,S[]%N(yx5ꊓJ EER]z֣DF}HK1ė!^H'(]fdkF ]Z tGRSq Vw竟:.`-~nu'*VY5}ȇDsE+* ;qLȇʱT4 s(b@w@opqWq7q'!~ eq7↶1څ P#<$aB(P,X1B2pt-1Br)xLhߵ LV+uIVoHDšՅFS[#OGz%A!c[\1S0f|=*Z8&܁ʧ\I92llן3jrZlP4[q"3"6E (v!&[(i/. ǯ<ړ? mؒ5T>6K{` XL, ]V`{UcnnuDJZAph<˥39< t<3pFx/sV}~77//ԏ!|#qWl߾{{O_' tSZ1n(.\hޡ3Ews^^d1NVÛ*4W`!F/Xe5x|鸌46{޲pEZ&P~C}swHJ{>Q0fM6AyO9Y4-oKk3n泺╼OM+z!=+fԕ!*mfq←~YlFeV<[?~G޼w/kGɝsV%ݶG#_2w`#{ˤF/""b .;-^).s<>5K}Ooh|ng L4{WkJ?/N}KF-!<7xY;RrxfA!YtCI {^H(&9L0mi`OYs&&ޣS-\fҦFXO"^ItHC)δ8]Ov08a"Y$2!Hq(0Ixrj^jcEgƜ #QSc+P;/rOavv?}%|O߾,׭vт {&9],F/+bбL ۧE*P6u#v>|lx&?5ZO0>#HYӸh;>~ܟ\d[mD͠Wкq}ӣn.f23bߑ%}䨿R9E1o.1o%*w=}aW%^J淡?rDOzHJ.&%PqP*o"!i2ByJ[Ԙtw!]U( 5'½#;O?OþM kT6h`$b!.q^$&+yPB)czIy<#/H#&yG|Gw9AxgZV%F:Y I!HxN`@hPW{()=/=qT##':ȋOe,#`WɖNq#Xr8R)x+e>i=>BhZK7 B`FA}<n e5`G\{C̅9wB*[ > ߅NVCK@9`A@? J.2(KDp3Sn]4 +,3re|ِc=ɨ/3?]-ei(?@pd߀h@>+ʚ4tel3](p,*hwf8B^B6&+ '^_R `\xl18 VRL8{:.ٳ{ewѷΜp'KRG3R-(̹2HQ1:2҄-D{vKso9sAg?w^4(xXJ(j^-}9tvCizFx~ YP~JfVbM}8G~WGlN0o7GdަʯGIwDC~M #~md-oݹ<\5 vJq,:w;=0 C5i͊i f [Sz?zxW -S~~v nCt $1[%Qf Xɘ0]~'̶W]IR˜ko؊WV{,#8f {L\NUWh I/;˹rPU m*nwC21YemO캱OB+gwG3襇tڊNWC%(hUw9X?c2VΚdai4DGlm FGnfn^nfnp3 3 JB] HVwG܋1AJwѓaLwc ew1N0FG恾1 \an [}XB a9@1Msa q 0N#x eb}0Q4Gʫ@x@Kh2a-1A2a, c( c M$KS90&Ec1FfA% 0LY )Maw1duq 1P{gndMȞ_Y#>RR<]㝀Y$\C!w=[)Pgn ͺ.gTy"LsZ WnP̎3_}c_}L/߾NH<=u=$zj!PSfweKMcW{j%6)վY@ɥHd}o ܽqUw]zm=}<(i[w< 4=!4dt8 W2^ଛzQ/1KL1)Y,gL9U!gr=F p1Sub@VffҽB܅v!p CVW85 xp!`BP'C_ xx>w]~?x79K%đCU1' &!g%g#'E6y;B a ℩TB-tAtV1BT6 ` Z^ 5M RA ; HΉ;)f ^-hZ =ũx ~?!s?*;";oy~g*uFõ*HSݹ_\xLp&Akt%n=2AB ҵBVH-#b 2u(R Pe|4Bqp b5D=P2*kp,3xx.r\!Z ZY2_BV ,]u䬃{> stream x]J0yY^pU R&0M}{'\&|)do݀@q;@bnIi}͸4E4E\3pq_# [J߸ e0m$mz عs| 0.z\uȖfTjyj8/y4}|m̒)uM)B2oV endstream endobj 603 0 obj <> stream x\ |SE{z-WBKGBOBYQ&ml$Q-*+7 H]@Dc=vEaAU벻*bo潤),?><;f~5G }y)ų?H9tż @iB/gUr9 @3jZj]i>5ucH݀4K]3[F=% ƖC?EK NF 8߃/0st"#Met$Lm:Q!}m v;fZ6)\$?b3t;t n1,g~? -˰t:^o5908nsĭkq#>p;<D|Mnxq<6{>=(soq ǰ>xq?<;؂laK4˰ ^g2|v"7k݈#,[χ÷y^w`⻰C|^@GxG^FGp@< =UO18xup d)x ۈ_;_»w+xkx/ ? ~ !_Og7 ?㞷'3Y8O8/ !S] M;.0n!a?8B 8*. й؜GT՛4*$i09&c܀\fx.9h|^,ħ܆X#=d?ZK=˽Ž͝Nspƿ˿جxDq\q\InfhU*|֪w7 W5?5/ky|C#kBbRN*||j"'Yq$BE]>(9F>#ߒsSq\O\5kƈýNQ>|%>+e D*+&(+B+N+FOrJ^WӤ*oRQ>ݩT2DbTcUT>Vuasjzz+IA Gpl?ϟz]A9p-T]{\dP$=g8A0,Q[Sq yz)y;'i=6uNJIC&)א-D\2~"?8W,gf; õ7Q>Vl+7dvȇ8l0ّ֕~sqx@hK#1,GuwFvsRRRеnPhc9' &($:61)U…GōyJaxZz*V\Ln/4 8A!qH:L)k?~n.?ȋo=o=|S˛ݲA߷y`tuʯ:r]GP TJxX}r=Xg!&!q-~Flfu5;vVB*N :(CsVPL+h\Wr]M k8o=8&H!`axS9!TΤ`VkG'%zM2)~ؤqi* as\Ba9 .͚#LX&S+:ERє3I&Nf6! &in&]rTEt I(k28,Xln-6lr+9BXpX0e07]ih5Mafuf [Gp .`-bhu .&p\`h1#?v;Wn3de h4X:C' I'~F#u59D&vm$ MbmNg,l ꄳhg y1NaZ٬"凴vՆvaͭ.!8۝.E25&J&`ԍlDV ʏ F9ڀYfe TT͑%46Dj0-YT%`rbl].J`Sz;؜YheY2dQ뵉\XL`PYL[8l޶LĆ6|otT6ڡ@YdfҊ'n3z%Q(뢧 hBq&"Y Ic@g-v4NU^櫷cwhld bC en14>DZMk.hhG(3f52dhv-yV40 -NC#B#*bs ,qujµ 뭸꛼5fXaB!WԪ!^JhCMK=A>'7pEMvjCihMId&]n2TX!B]jpEWk`tQշZ,Kriw+n3,RP{úϷ940w*׶6K{#q lfcᆘcbc(fT-NDmed~mfafk4SEP0bь`kÅjjlvIGF[&a1ncqrKtowQъ:e]Wv]gn$9Bwv!Pf)>k%ev]2%ۿP:I+s+%tT)(Z)/pRȕmXRqL0]EzqRK.* f$id T>Zo%ZіffiaqBYM~!yraFF%{-c^iJd哬픥=tٓ=Q9TF&x5p0kotJZ-Y>/WjZ*Sof~q8 S{̒~Q:#j勽6fIB655 &]'$ ldx<ڳHcF{6&թ$LV=9=LrָqhbMIm%Ivؕ֔Y(wljC]M6fcokN߾cD#⋂ޖhlgt5\,YDi4]4>|via<2h";Kγ^tV70,~GOFߛ ZuzW˅ R||_s 4|gg{zR_m29 ~F>&^IC}XV}|H5ϳwvF=[)K,fϵ+>]CL^ _7ݭ LϮ3^+^rNك=94Q ksz;o3ȷ,nw?nt뱜A](GiU{_ k䍻|Y_nq"lnfF[lwts%ި]E_SN槁?Vٓ(svzv:\X/A:\3aޣssTi: v]Pz~P/*}-Iе%$K{==9/hh=/AY|;AFnom=鼞0D$N_ni{u &v(}J5n*65"M> Y62]ty$Gn'~{϶={Pݫ?5_STIwe:SZnWӞujc7P*}z˧1*}a=ݻB̲iPy};J̄VD7go[3췲v~KK?ߧT Dӿ`?)$gwSvHyJ"1UШSW #jn ش#$7DRf\Up(ȊB(6WZ?:d`ǞYX"3S)bfw׾Y-EqDQB~f#CȔa {@ >'-Q\mLL~Bͯ΍GMLBlmt٬pڨQM-6)w~0m רI"fW -vav$}00("|-{߲E0}Q̘5{n}:Zf/ʫ+%EecrsZIԨZT 0QDs+Gf9Cy ;",{ت<)~ӶiO%A]g\W߲ {d->ckҲo{t6&S]EWܭX_[N{ oKˡYN^*lݤ;cW]J~y:}[%ßl=_Dӽ>t.7O;4 e7ݦXaK-vږX1˒ל y%7DdVpK^3aC Wξ}xGkn;z7_s #k\kݼ*72y;OehՖOeӄNm=潇[TsF&qjS>4^0ȼuM;og*H .!`T k'%4y(A0wm\zw^ %[~Y?bQf*JJyi}6i1)4c5ы9k.B;3Xgtn ;U z+z*U=R3S-56 ▔ .95[TGzUMTww> /d ujd^q7pޑ r@mZca eX`W(;H- IΧj N-ϸ-D M)戔dXǣwRX`!b/ŒwY&LQI@T|$5iVɄ7}jG`0|Ph'<-d~ѝSfT"N޾$jj|ſ/>Z'FPPNCE^b5y8'$ | ;kILUahbHeO:S3v* ӆ ,qpLYCZ\Ϣxya"!xUCaҔəxבөkxprzܙ !?HNV"ܦO:oZ6#]q v2&/Ct[~!h ]:sm7 D*}>@gCiK0!5i;ꌏ8|ӥo2Q&so3}>Ğ _/ѾCՓ JDx7$trQ3rB8ucMM<`\yVҚi.'G9 .x)6&+#9^MQ~xld3ѽ*7XT]}[}eGQW:rX.R:B+&9j+;)蕥V_g|rʟS~" 7:%U#kYs+(陧ӈ0]6Lm\EcZ_1(6br)M}N[  $G!L#(QKӭf DLxoLd&42GMI@N"J;pn"Ye_4l;U=!xB'x} ݮ4c#Gsd zwVre5+AV8$!iڑZ7HV]dPG#}R%J,es.] a2}[ְ/g?Ĥd &ޓmSܲbjҦP{4)_WJnB17~Q͜VZ k4u jO"_i PizHt=ț@H\ҤfAԥDk/'J&2^`:?ϕn3@Fkׯ3Sapл]'լ?J:,N9@*ݒWT5*$bDQ\sֽنՄBoo Tfiˈ;0 7)=]scRg벧QjcҎeG|2WJWޏ>\?C0*aʗl&|!>c5'ZVln4J|2IN\̬7ޜH:&ܭ2s0pE?ۨljdcz =߽.^>i aU)\%4sl.Mp[R0x\kxgekVdj5[2fMMS֌ lKDdsOȘQZfJ EmM4at2bgy9=*tIkF$%r}Mhс||<[t/}Lp踨_'VmZXKt#:*=2z/]9H0@EN􃀿(1+!)>Cvs>²XԸ:%O`/b}aTub4E b$l=Y}5ch٪QA |&LNv.j闻|Q|3' (NNw\-w/xal;}+1z>Kίl&EFPDEE $ 2%/Lg_M'^vile⚴ a~?#;7M+̢9>請3) `l¤$ z5z6ŒL;:+'taNE'B>\&1ņLH&%ȝ8@;Hpa“?`>3̈́muוC6i6ID0f\&j1 -.eiй@9R`OhX[S\*\}y^7 30;苖B~ tceRŒ<kv,ڰPv,-ٻv[td;?i/dnLQIu!E|/{*e Ww5Z]C*u'E) $7ښ:}YlP9"8u\x4 w!.GP;C-|=Y endstream endobj 604 0 obj [ 0[ 500] 198[ 979] ] endobj 605 0 obj <> stream x]j0 E -g3CiyPȢ[I mgP #$.|`:L08o 簐Aqt^+Τ*tnNhܜ9V7HΏ:w%'R`qA/: AlZs|PsIESq)h@oW̷~8fwXꧢNuao<%/{h"NW.Rb@h1L r' endstream endobj 606 0 obj <> stream x\ \T{, ۰paطEtpCpҒa`D-e/m=eLL+ۭlzYXR[ w }߹~=gf!+*27DVQ>yާXx7\YJҍ9sJ+j: w&5uSD/}gW$cPgolq 7جn8^'2ud56-d#wg64 '(|?27`ގ؆& qNb4|!,&+(obnXXy]ݨjj٥Xb+om1Ylyp<m@m'nm5'?G|֓(Iǔugi§ҽwޭ+1^s-F{=>H'@)]#q'8_^&#Q9⼞PINٺމ$KN^\_*͙#p~/IqSPOOjߑ,aWAx}i\rvCD[E)R/97D<OD/Bow\jDA_D?CB Bq0 B(bIB8#F@$r"( ш1 B,b#3LgHD$HBLdH@*"A:b:h uNCd fB&bdI  99 \ȕ~01!_.q`nBMp37 p -oaloo;;ON. Ho{Cp?<< ÇaćG` xT[1cx Gqď xIp :K`6؎B| vH4Ӱq't#v.]xE|C|vKa7<CSO3 >GFm8 _ |%A +8xKo18ïi?|"~ !~'OIқp~D B<74A +/⯈,gwߡ9=+%BilJAvXNٲAo'SCch`#$o/7Apy AR&9ު{h #&s-tqGl .XäOA~fj95GP;T 1HE,aRXupyٞ^"|@5͡b yAR7/ ):up"fI5." 4Gp 4C}Iu50]D&%LJ^pRlAR] x LFIIsyف LSfZ$꠾ ҆fcFI3E$EAt?0]=Q2T54;|TQsadTxI"#oqlїbgj0^-* ͎$UČ|aRyI&BFޢdhv . 运^-`-ʇf *c~G>02jQFޢrhnЛc|f7H(rE"C.l4s#i tH?9Yzdɖ;r'潿^@?crFegefi)I qh1*2"<,4$8(0GrS*2k&Vj<95d0"&Y5qpM=֬;YS_|OK5"M.Y E*qѥY3B,n(Z,vL\Q\]u 5&UZ*tܑtGvq\P.(#TSTQ|\1cfeqQXttUZ55Lpx*PȆq  6hbWގujNW:xC'-rH,v[Xz`iQlicbC2|h>Hט!Qޚ&?3jZcKx4)ʒ`ir M|}nӳr:}ss^Y蜫蜨LWt(: RRz(UJRC.P(sDǗp%HcJjDǙrM7Q4÷J*&;Ƥt+YbƼ.BW!AWTvV VzVUA}N,]r. L%3ڟ(Ҋǩ(b߮ڠrv2n'v2np֒JǣULJHUd{Rw5&/nv,.W@16Чء19"`Kiq WTv-՛ 5]PFjnmp nRCL#bX/c#ΨR„*\칝sW\TEWMT[DZɋ:#ߣxӢZC+U|u^t3W> Қr^"z$ܲmQ)U) 2d pzH#U ".%rda /Ix$ +#Trmx 7N ѭ]<\ t'à Bq7s,&`  kq&&c2_=A ?KB!Qvg na _t^!헾VIxR /3f= or~)TZ*=""؊Z/XgH#,m1qԦ <g^1N猽>R])xNAfC\ kvd$ pv8.ۣxt8*1%Y&߀a\[0&%QIs#YWM¹ȴ=!!=>=\!zlQy6*|slFr~ĵ׆fyz*8bTzss&RzAAz^ '1+poOcB 4UjjQuJJQ 7(9CpCTr| I@ts`n^U{+p78F;ݝ.D}Hhsh6W[L7^"?e2r"'&[j{v7<۰{:2Cn)ٴ^'y@ >mvvvVDDi"Cbb4 11&RQk"b4&2>F-ݴ3bpVM,z}PPPp d` P Ҹ ‡pڄx7i?򠌠P1=-!JM8ډJ]wPeukj|At}r}|ro#EQY9Gdk4 (>TX ]onNl`٥#G2ڞӂ%WE%e-b,{G?{ٵN>/9Ъ[2IJ Ǡ#faYiaȭ޳$5}#]"pINh]'Uh/H" FgJ-y$c1ZmV2z5Oq? x ./ٽ.Y.ZPG']ԲW]epn0AU^>ECu/]'m2Z5@Gc9g=(y T~RF!鴉N:p?mbtgĀ:QXV)2+1ᒿj3M$Z-vd`7[Ek1],2 VQeoY&eK8vFfRbٓf[ -s\ţu&c} $:3;&l,vш`07 s&Y&C8dZ$ Vh ͵bb4Lbdlfhmm6[-&{El3Dh2"Kd2(nMͦX[d68, -Nȫ6N f4fTRl,b< dmDP]EVَ+EkZjQl vuV֖e:m75jMn)w-L5&+Z(9zXeiEV?S(dk6k=hm1* [M-Mfig67Ӿ& ]D!>isX[,F{Hۦ6}Ɔfcckv1ќ$jPsձ?U3fo1397mW@GJk1㨵Fv NS[:柖V.֚N:آbAs:`1(4u8Z ōxn\ O|1-fElZv{ T`{+',7S-xW@K'ڛUKBַfVCDN#OG GTzlm˙iºkXԴuAm=k6}ft9C*[Q,]$[SK9(l>RQ/E-W آebpfl#tgbRu/;RFe`mmW3Jgbt>ۘ,p,^Xk*od-~"b΂-z*꿯v C^Њ\#:hN&|6~E/͉S̞XfЊΌdwkridlz}Q:V&4 lCk`l`9g]_,gg:gI`CIAK\ic-P۩}[As.zՓY6x[ŠBWұ~E7XZD;10h I_?;FW]ӀQvFfYbr];>[]slbM9nd^n`A}ճ8}hŚc :g%] on]_.g [-ڟ?Z؆z{˫i$u?8=VP6ksijfkǩeze{ڦQX? &IN ջSjsag;oҠo?ʕ7&N]lwߩk-,. --.<?U,Y링h:{6f\}+2*o snj+Ӟf;Ӡi>!RJI%Xۀ֡v?fO4xR$ڄ]sG/wK^5yϞDm^q :9B2unrYυ@gRD s8"l.ԥ,=^6gM襋ЙBmGfZWNmƘ6/6 /[78,qcW5^gDr11ق܏]jրi9CLbpQ8fDh9|&8@1Z5&;R̎]"Ν gH9ͅf+ݫec').Ldddgg4N‡Ԩy-'1-Ld/'ހ|xʬGLGX-闊vhr^.zt)$;{ {kCbKigG=|uCkW=J|嶐Xg_>uz7w?wV6^x݇]]ZlY:k5Ƶ=W(ٯl{~͗?ْ9)y?\{IxN޸tG~2ó=Ҩ޺ Z!J(ՕlxU\eliLo'v.2SuFi"Dt+qad Bi}y*ZgΏ'xT}]$ODߧ\ -{7frlϹpV~#:bWڻKU )ݖO[13[ZăY ֶuɁQ__Z g 4O&ߜ|ûfjfNA^%g"¿?{x zv !&qG;7w)H @Kx `6 S_ Ph;́]eH"i F g(PisBwS "1RH[@; :*G LB\B ;Vw%Fds+wKޡ\vjAي`lp |'iڣ54wp"R~yq$Zqֱ(K1xΐ1Dy }uH3oP~)&3j-mV4M }9rrZ 0*e߻>2!gϏí ȯ)?={PGӧ \H7Nha~8%=K~"ٟpa6+Ҥj$%b+U-!xV;pm|YYRcv96EmǛYGsK2ӽʵOՐ{LjQ`ID ]Ҩnrٱ!SЛkFg]R\Qu-K<-CjVϚqYw5GE77`XGz uw:_,Ž.7Ywc)`8 hߋ}}_3pn_i5(c ><ěMy~.%SjP UR\Tn[EXNay%-.$ĪSbd_M)V 9RPKCE#u2K'dB|"~*~1U6xZYws[TE&?l\v篘 >_LТ\%@ήt֐hU1_d钞4[X{Icg3jLcθ{t( ZZf=BTJwXFwpMzʌyP>N9鵋r$$H}[llVuL)ާ|; h l^DN5.W*( RO*!wR>7+@VZ3/+>Ǿ uxg=05f,(H[n̋ G-+RT*/l\6>gҪԛgN%0͹Wߛ:H r DuL#YIoFLNڟ_ŏ%_8Kۃ;ԉNMq롊_}P!|_-8B̑:P4ZUdkp6x;RGVA &[j8b?Im#?QÔAݗl3BSPڢ֡)!̻7IdhE<5s7/JP5(19aW`R,--Cu2.Ge{+^WlR%6kVr Wkӭ(y(/SMBf8FC׌\3BsTX )n~X:J5݌0xC)9ٗcv{ENg8&C'kKlzMMdȍi[>5.HXwvAV<'})AOfVXWzH]T,)Zlm]`s`1ST)^[/6^L e7 ˡ"]!_7H9䗝OO5~ xG ]D{WwoPmQ¶w endstream endobj 607 0 obj [ 0[ 600] 74[ 411] 120[ 460] ] endobj 608 0 obj [ 278] endobj 609 0 obj <> stream x]Mj0 >L(3Ȣ?4[I lgWv*A~ґO8VNԩmڻrD%TӀ~qIх~ei繗_c)A23#;'OQ?ҟ~p"P5T UUHSh t/{\-]%OA #xۚboO endstream endobj 610 0 obj <> stream x |Tsgl3d!C; $'!fH&lH$AD[+տZk.J} ZqV\uysJ?{99%@*:˪-ɴ cZv<‚˫9ꁕ.ZU;A?&]R]Й(޲*/+S,lie/^UPS `8ڸ!i7Җ˺寽r7Aq6ٲ@zm|K&!;Zڷ5_2sH7״7l}Arlm ߿}%/lŀDKߍZ7to.aiO?<_\Zٌ6W`:3;HHlƱ7`_VM :ݍ&0pTpk)ƨzICL3'\Z%˘[6N@Of,,g354fԣZ$&ߕM:uqm!               Fh@19fqCG/DAAAY2A,|j` 1 q'4!l6!5P )ɐ"4ŸA8DuBx!tȨ.pʨ7LDz  wQ w;Q#Nwï]B{PwQᇨz/>q_ 1vv> TQ{O.؃F!؋P}~~ }C}~~PO~q8,W׶{   Gۀ1NRRb>sW=6AAAA+Fۀ1#= AAAAm8`{_;   8W$crFzBAAANh0IMMGeoԉo= AAAAm'-- `9faQ'=AAAqHm8N`9sW AAAA h0 Xc30e{   2Fۀ1,`3nj0nm{    h0q    CpcL؄3nj0o 9|#xoCAAAĹ"s L2 SCGQ#xoCAAAĹbh0ͅxHH76AAAA+Gۀ1Naa!!qy( Q$    Β6`3gH3nj0u`9ʗ|AAAqm8 )/b_h/DAAAYR:q/^ 0n™cF(AAAqX<q ƻx _h<6AAAA+Fۀ1ڵk!\gaQ!   \v Ap;X:t(yIAAAA%6` ⏂b 'RMrv8 7T|7GE|MvwmcKַ475nUU+W,_V{Qͪ)=p挂rxLΞyg[vMLHJbch$9LI+g:nO+LGn"9OK44i e 8 Oiϸ*R Iax),i)%*)Jc4SD޽1ROiujZc.*.`!U75GI*Rf9?+)ÜNҩ;7 ,JR]L1*&Qܦ \/ozol Ŗ ,oXVYcB"!ozTO2SJksw*x-W^eXpN]p>֚Q)՜n7=JZ/C|y^z~gN*~'rg yK-VdŜ5I$QX?ݤWJkuNɯ$^T/!CU ͎+*╫k(PCqCh iSCWEXc4A |qlJ'n;d$EyTvp oF.z؎>juObRi},;#E73aH~I e|_5;Hl=հ5vیwlÀ *g5>/Va`W,c^̳R^ϩ>NjuXdBRhq-l+̣lusە67zY^[zax($:7ԪoL$s3Izk<4])mHqJ㐥 [U|QgiֆV{ @ox-]XKU(nQ>$0^W{ ^̨V3ĺKq!˟"k.b ||k\ȳ(TsjUy$Z]B~qGTY;hcX@Z~jz/n )-o?q媏X @V;v(/py9"~c L8tiku>+B 75V%3QzV~PJ8*7'7j}Vs^!>o.NńϜ́&>0_m}n^0 < W1,p?^O {'D 4WYY܄-pk`nui%.uokq{,:D6"cFjDK&~noo)TtxfAY"fw\?-ƛR"V(ׇS^_=[H0yrǙ՛v+UWqbN*l>U(܃ƾ$XW0Cs/5/ŕ[)awK祯ޕ,}6HeNͼNnQח:ɚC+2h+Yg@WP9h lKR._XsS Jv뺾|qcy_jձhn)l9r9rlN<%~ QbΠ(/Q:RR4wy@5^\З&ŠMcy|]<3%eE؏EQ.5|k^g>+o~,+d3tVgsfq-{CR^d;_d7Ыnzz{?_:|9^\ϳٓzEd1O=!Ꮲl.ꛜ_h|}+:zv)}Y}']~̅᣻vx.|ÿY::o3_ &li٬4hčM b["u:odog' t@g@ܴFϺ}{VB.<:G(rMq$^ [z:_t.rLpO.1uwz+ݹLJ|1]c+ё`>B0x>0XY)A'=-= Ka>6Ƞ/IE t+VX?9[Ibx*M.V%~%ʭYӓQŸ:ލN"]Vt励5}e]=2t( ܝ)cUqxʼ]`C?nNpXBFZj*i)}}fIv}4ȣ)GIv=ɮ3Ϻ|s]<|nWiq5O3]AW3]3fNpqtƇ3tC-O'>.y o1u{$"ZvwwGWhx/("6/Ç+ugpCk' !Vہ{z~Mp/</Њp;?]*̮D=C)삇3eh$S-JYs Jx|PEx,,-KI[Xgt<xtW@7I-q1ע=7c߁'5 vGQA0w*B: ZΦK?tPW"]e7x;C=~ C3,~#*Y}p#Υx—1fجS7]̘dwN\^gacJ^hѶW).x?hx<>kCFI;A!ӧn{& Xz :p`8fԛkN f{uffqqƹx}wlptX0CbHuQEj=x^bQ.1h4V MN_h}U|#b409D303:2^eOrNj8'^$O#!+>>{Ws0ڿ~1~{S}?ΗgL\.m)]2;#ViĈPG4jJ9?'ƈqґV;yw[߭`?^ "Cѕ ͍Ƨ|yzws޼ZbuwR"urLkjO+G,zh2=&ee͜Q8 ?%^gey&)75EkS8kޒ{+:|ϗMIK]oy~ŢIcǥLLy :HdI|JZ3XTlqrܴ8}%`zI_fM0XغwYg/V0pĚ"l.:1y̔n1j-~.g٤1-z3'}1|Zby^RLAƤSsN{@(.w.?ǣ|fJЗUJ+.>1"mYW59Ͻҽ{[0##QwQW2{,pGI83_Sqg[ -uVhοҷ6*͟s*y<9ϗ˫ϕ۲3]KMc%ǚiWPPJ~~㶃}0R 9\w^Tgݴ33mp's,ƓWw$\0;N.HfLo\ G&oȘLIv1}:Y ԮfJO##QjPuq;ɾrcϞ6uּ.qv\FylU[poT.]B``0hSj)o?_ս%mh;/6 `o<םzOfk"֌d<_XDHWVH۟wĮgNvHuC0 QTEvS4x]N% M-Х-pCy}>s9;gf=QEwuמ~:Z6,jȅf`=Žuc{ !>^D4GcTִ -D7sQ`')&+zֳG6օf?F%)[z4"l` PΝN}q՚?jgR[ri& [ys%*5@sNCShOkY#{ŽN=&~ݗnkDJwd4?Eduk&~yZ2~ts@s@l4fgcX~gu5rCa(@Ԇt~` da \>#>+eRIje8Ɏɟ $-Yf̣82!$WaO;DcbIqAM zROPDz. V?j@Ƙ3,z8Bc[NUp(IRTPp\Ae uy ;\F=X_n2&3e *p->':"XHL=0 ,"=ԑj k7zzfitY%UZ6^٠b׫Gg~`gt\s,~ZuI =aqxl[=֏;AVOn$-¢ԠIHSqZW{v!5m2m~!zט'䗙P  x)g\}ȑFFQ ú?"(24Xk?zQ4fD蔆 -# %0 L9vs OD7Xhѯn/ZD j!+"/q|\Y8dLGuk2 ,W1avi~3S= kE}^+d?rĞC9\XGm_y&E֜˸*RKF5 ^~_qdVg5κxyEudžj^ԻZ^M6&pc{P貛mt*mɶg>W~h{oI]N57 M8/xT.<-ExBޫ(Zdx(nz,ֳRuWܜ5kNoMŹ3e )wQE{Q愉nfR lyP͆Z 0f24F ?s -1<vҡÇk ;P[/w.1b")JRÇRk L^[?ޠ{+`Xrf$QҸ7ԭB{In?/GE8֟[:L4SB^av\JqP޽sgFkZm|2Vq6UgQ*]-75;y/sU=U)NZt%iU}ʰk cBIW'OyM)Vfq] ~~VVSi^ TϤC|<'%4S/}}f&Tyoإp+5 eg4l^;0+*+>ZdKUoJ&*r\\f~wW?_sNQ&z.;۶L0=5k_g-һ cz-fu筊:Լ*u#:Y>]H73{_7fNrcg##f9c~boͅeޟYwo]2x]) k q:23lQ..sfs3*W~H&iZcFz+7Sߨa3[6o$Y-34;~y{ SkFO38h ~J gn8Do7#" ]78(/:Pza܈8N (ScsSjMijJ 9n_jǗLv;r㾲ͭ\DSrznf;Ԡzblg*:hjйyZsݹ%k;orgηaoskpO~`{8ydwאUSNFUGI; 9AܖIte~q+^OeɮBʇz<kmjkԈ[c7{v}aj]o5S1ɔPbB*qxoN\O%MP$'륛tB#ǦOg0Rs#. 8(8Q0X'{E[9<{Gʁ,gb8lŭ¬2_ݰ/OYtFܤ Xaia|+4ߕ6p ~USmMSV}%>aMu(MӅu\VZǦw}Oڐ?Je|1ZxA_G+'[ beܨM#zy'NOSӦ+!n@Ž>T *;T۾\cAA:3}{e{Ȉ2rob\ܚTy d .N>[ɼ'Ui_ :]m|>z豩 xz*d'pFؼ9 Un\PlxδsޮPJ}7N?cyK++7Ϻa<<΄w:v1zMa7*O%fwr}  /S+[ EgAxE` Æ e>B4Ԙ+$؁bc\sy:GJN0+p{N/}X0~+zEEb6WqeҙwlӶsg4n85(;vceNz}B ^zʏ<4׶]||qrVi_BC'G =j}w' hf{GW ͣhH?ۊk?|W~1-cUg*띮ճyK 6U0O#䑞)M0ʽԔ1:w8r`âQaJ˵{m7}o6P>kSD)}pm/vșa]JZO| c_K\3\Ac %OA+#qgY_5ڌ7 Ĝ 9㓝Cn᪅ELt f s+{a_M%u^E%fPzdȠScocJ2+ Yp_Tùa؞pLDS ПϤc'nq`{憚jz!6C=T o߉)̥5q%3 ˢn-~a n娋n Q|o뗮qp|qIxVK5B[ o}6Sj2F4 f7:6^Ua׶];藦 9o}=c1Np͙O]Z0Ao}zLuVѼ4L]zcڎN#WW}z>)-LVЦ`fSW &l,Kfg4FaB҉ M5R1O.>;LXVrc}klGͪ~34UV2dn,Pw]Õ WI7Z>fu秶fwnIШ/l;~]vku8n:N;gg5Z<|Ks>;ѹ/9xԱN5%qaѷ{N0E+7Vd@[knL/M:e%k[cqC,9r}q3Jb1J\>HNbhANa{{IwiJDžLc5ؐرuHn4P.{Q9 z̟>;(AoWg\dĜ(ȹqR<5 lHb` +_U7nQ}6wn'.+Ohck*Luz >+mMk 86Hek>_%XrgZ XrrANz/ʑm38= .oLICE{x3r. Vɰ;ysfMKmqVyN u5sd}PdQ D:1OMΏ91N,95g/F[/N)vIޏ7 1x>866a<'t_֭Me>&KVx]$I+ |&p ^qn(z<=mS ߮N[ k'8r.Ԍ)7el=68OwIua{0KUtxaèbI N3f\P7&R)dig͚Ԋेdr:2z}瞻HminODEZNJYls|P8Hw>OZ| ԳloŷB} P߉{3/ >C 9PW` CPuF<3C} ccpF P4Ӕi L3?PdA}3 ̅Pa.21aLgV^c~~`VB::ԫOo 6&#3YzzfbA##?Y_^지~n8c0-08NP?9ӜP/\UN#rB `\e+˕:+uy<PuTp}; 0?iC0?ssA= ˽u<8 zPr0ᰅ.zOP 0--ML%7 ~r_a  kzx|<`.b?dA i(C@s=hv>` P?>"v1L/&w`]]׳ =ЋtuPn =_kK,?@8G_R~))A%Tീ7hEsgGy~`c\`T]Mp <\4v.#,ѧ@h] 1!qOش@L EPaAO) ]}F^ב/P }CtZJt>b\:UAtjF6tF^tIBXhX(VNUtZK tN[贍N;E)ΤjL0p`F`|8mw@Z60T@j0W> Z@老`z`0C  0`Cp~<ޛEQ@gŔ1=aK4lv+ƪ*n[×ix>~ x²bfdL.Oggǁ p9 \.W6Txp.x~*?_įP!􉑄3CD*M"Jh&:H.B}ΙWA U-8$(T ͂!W": }!xa0[xHX$i,YZ@ ŵi΀3甞m]vzny/ }{q8/ܬr|$$I>Pϖ%y|$_ 8^| Ov0{3$ V}퀃%mxCJQߟm|4 am  %kBTB2p^`|Yb2 A&4@Sx7j}##la] .y/Bw )dӚQb@~܈f!GblBGBOisb_ъ*d_#}f 7hoѺ{g#?41~DP?q~FiwE/b@Q/Ư؉<Z;j;1ve5hP| CXu$-ƚ!#xDX;$Ld}vdO+-G!F]G>[>D%D( a/EWqUPAw$,8$׷9wJr^Ooh#I|)~ZKR)^.ůH )^)ūx RIR$;%!.řR+ŅR\IJqM)>HHq)n!GJqK)n%Jq)n'w.RUIq/)+gѓx61A_Чy;>ig[||AL/Peڀ}sMI}~kNӎOhmH RؒC>OVg>ig;  E`(1&a2TΠ`_M@F" h01].<<61@&}">?"2eddd]^ Mx9|;Be|2Tȫd%EVwkj%7/7A0P3? b6_|(PCс2 %(P\xB2 Jlc((PAY%z$P8("0W VAr( hmL| C=)@ф2(PS$}n+ѽ0YH7"w)!z{n+7zC3~ Ip !ZaHX:_T@;&fDE$K$"1P3DBd9>aX/;Sezt_zrJ5̯uDԛh\O86wi;t( Mw^+nH}IAQ[P7gt0/y%ԡ|_A4_D!)/2lrQ9v؟hlX.;E_ hzIHĝwEJ$x/ۋMe,^/&!+I;"!gA<2 DB2"\IJB>;=>Gie3z2h T8{_O"p."!*EIZڐss}T@9JbIES9yri^/A紻?8YD p?iI/>r }7+R/5 YDC"'";}_덐Dw~z_#cDBdȄˌFeY@B˘`5,jeB0a1!L%Y,1fC0#˘i~79g#Gի[}oݺu j\6pԌ?Iv1x?{ 1"ȑ>V-c;i3e o=Mٽً;ȯvU;a/0\ d^=d~,YsI0R9~ үc;X>EPcOu&'6˞Bœ|,? r9])|w9+>WːCb<1w7ޤHqlzo=isVea9﫜\}RCrD;h-\-i`iQu s6-N%gc9m䣇9:SLv)}2 >ƒʏv|ٍX|:阚Eva8C=dQҫֿ>H߇{s9'Oqι3L79WO 7Lsx_ٌ~:X w>13rO։W9?[x\ٙ ٍr+3x\+}s/ʥM[Gss7 rir[In{dNNut}Y]YPDw4?Ni?=ipp'ڋDv">Iuޕ7 a S?YL k|=L76zG/0K^G=O$廦> A?o0v'\#<}n?Ēr ߛNr?rL;^nK)ϲ\^fl z|x Iϕx~ܛ~S6y߻W+hg> ZZ v"CIMp01>S=UJSJ@ѓ RT' q!4FQRFTQՖ >EP"Fv(n(zj[(zj=5ZEkB1 <ov≶hZ'LNou :OJQEl;#O Ⓒ"n䪆V"TYT)ZY١tR)q@N*U7e9wKU|H5yC>!尼D]g2Qru]Q)Fj?kPQ\I:+۩}QCr;&YD'}s,r\% ސ<'/V$r%Qde4˓R' ,,O\@T'[eRDU&rC-}HfeP(甋0qZd!w=ST(7P*uχ^7o8]Jxԟҵ7»ڦ>7EdPus2d|UF'ꗀM~$?_][G%}Zw5[ ?.]P{cbөˬ O9!s1.2/ٹ$f7ɳxuI-jɟE6/Z/T3*%j( s 2MlRei׵s&S5-cw\ǹ bW1yVe?|vu 5/R^/SNyiO </ӹ9ak3Α4z"o3$r+$sY=gX:?&!K *87AiԈh%} n΍|^q 8Keab\7,'t/rCk=aB8{=%ޕP@?M֞:gH*W0r3 <?VȨUp@LO!l8G/&L)}p_dHP=qOʳNBϻ<y~;/֯bFgAg؄333 UB yҟ g4c`QIlNv!U qNYqas=sꫴGӕS =^YZN> :g?pʭo3~UJ]w JLP>:IM9Z7~GWj7 oކmoަ2K> ު}Uɼ,Vk[e fENBRU >+o5Ky dEZ^F|1bLDxMŔ3E* bD*7gr|VR~T֋)IUQ.)T)*S櫛O+^]"% )=J֓J\ןQީQ~K/џUޣW?ЛO)з_VHҿ|>{g("w9sMw{K2{LO||?Y.wdf~C~.D}f.R'kJcL٬~NK^z5UѬQy%F MBW44miڠӴA'iN&ڤ0hf9: ~/R Y($ K4= V<$X_i暴Nt7:wmcMI'~N4,WNvcvcFg|l}i؟CiyB^5܆ǰ ۈF(6Jrcʨ6jcnF=Q7!=N? 45‹fq5}f\`.2"◘EffYe֘ufl6[Vsu6cf9`23$޼dW-g8-aVeXϊZ)k!BkN4_/[} Y[2"o2ˁ+|UFlp~:}ݾþc>߀wGY7.F|Wfu-wzD&Hf/ٟ7 ?OBڿԯJsG6khxzj]_oo]2wfQ{ǿԿӿ-ogNCfÿ"8 $١ O/O*>e+_36oHﰑ]LGwЪxwUO4lZ\{ fvkfY`(&"P('z@`Uڿ:Phl ll@mlnf]`ܨ tLw,`=LQkg:0]Ou!ps|X-,v%0fty/n0'z.AN`<V0{3Dp\,2KefEp1Dt9Qk8Vҁ~Z`w n`4'L1$XE6$ol 6VSeVcoLZp vǬ}`YVS;H}%hp 8j[D޿q2>}2M7˃%Y\˜+QJ~<ľa{V<;ol3!I|{0t#:Xm>l^ V,w3]6zC@y׿ӡٟm=KYNٛB*-s&Ԝp`I蕡UCաZK5^Ϲyh#n顭V(Ftû#$?;M5E`}9}QswwMPCI߱PhW y9t!4bИ1$O;.t'4n5;gBГָGޮ;:p i\k'*aWܽK8uBx}kpNtCo]ƾ_6iαqE^>vL5;@F+""4󑬈!oD#)++< Rȵedlm,,33Ñfc/ ;\YYK>6dxͲȦ>-hS}x00`_hjO99999iFOJdȅec#"7"#"#2zVԎƢтhq4Z]]FS P3 9r ՅE nh[twt/պv]ls*|'sm]@, D{G)'V_+P\bt8z%:>NrMHؚe yTLE%ՍcGӳ(/<[%fi;gl. DOqReBU9G=MSg˴e-9%|{3ZhVŇHË6ߌ߉~LhDn—'ĂĢDQ$QXHT%jD]1!ќhĎ._Kb9LtB 98H6JYpX/1`HS3KĭDaR$dVpN@2L &9:9g)dT\\OM6%7%$%w&ۓ}C#I:S8$O&O'&/$/'Gy\M^q7fwOC6kǚ$jYn0c QXs݌'ۺ=i{BxO?}u3!Y|f+odj`;Y&PXybӜ?8d./X>Ti9t c5x/(8nPa @X~ щ ;4|[i^b p p>4ׁ`Gc#5<} :?`}U}ړI#v<^R9Nr&\u׺jbkL9Z2fuӔLS~vr[( vp,R?<d`2| ȕ ;{'k7W©].0v4KاgGjNNr'fɿirhX!۟0ok٪{e>̷;:߉Bkל8|z2Y9Lo#fކ`-xo2c,#Ad8$/#zl5u#>p8/ Z]@!P}r^ A~#d˸,pxGuE~_N¼>*É~3 Ue*V NtJ3h@~-|Yz*2M I+R7*|9 gBXv&WxQ YɩGZktݩ`` ~PīCxq~6ag鬔Q/]E*4֤{aT`\O;Y=ܧ%gp=ӨU \";=xΨNZlaW ~G"V(7[?+7/*]R-e/}2$i/!"es?VT&X#lWgX;_}撟'.bT\ʛtB w2أ3vpͅlp᠃SsG*u[a{tS8YɺJ+:NɳXo^c] +O߃~?Eh%b西ķRJo?(>> wvvwkM7GQ>~Y|=~U|} 6~Ob)S J1}RqC)'XRZAYlT6+[J[KK9RJ?C#t_Co}}=/eiaT_`N-.?pua~55`:A~oLf6C|_%J|yk~8tk1q!З۠ߠ:BWpGm {Բξ0ƻumƑɶ{?oos4q(1׈~ Ï#v v k|'  <X`}:bX M7  |>X l'6&p,W lLX` lL.B uSC@+^X'C=ް#pv8'1&c;s ׳2fd((<6,eTdT22^}c=Nꌵ2pؒѐ#1cOƾ2fe8Nƹ uw+?|Foulj?/ܤLYY,]siVeV!:kuڬ `kҞ/6k "?|Bpwo'P>eW [(磜8O^.\6e u'e+V 9KD(寣= @?e\? +64O e5S@nB7^ z5.ky<Ac>ꖡnρ_@ۍv<=(ע\ ݍǁ_ cI$3)$'Q,ʟ9g,ㅣOz\/zZ!l%@z#߬> ߆oK/BG[e3Y $al_Bې6xr ?oh;}1wt?~o\20jA5z'2)&o%PP> j!hhs\> m? à?bss<@GѣAP k5зe `r96-, ٰ:ʯC0~xb?'2VK ky ʠ+!y%z1 ٍ,g\r0삜]eU 3L4Ϣ|G@_rעxxmaamrtvG@GM 1M9w?GRX;Ǡgeã|(<\ AC]VW0Wi`41L5g(g(C!п WA$n!<|wA L 똉u`u1.b? gFGHk'tӢFLS^J4MhJ־1@5yU&.v&,Z(?(Pj[ntxeqEih1m6\m6YFT+ʵ RҪ rJk6 RiBY) Ccsc} {c_.u lø8_\֗)Nn6!Bf6Q~ǜW%S̯_O7:S|_Tf\c6f7^7|?Gx rE7؋,bQ"房R1_-494#4%P)) **CUІPmh ͹5q:4}Ch}!~Kk=yB۰O83;ߧ8G9u}YO< tP)n'wR_BN'4 =xrZ G4Se,׹9u3 wVV}C^|5| @rX;@HIɠF3嵥(abPB\^9qd:7iAV&dld1NP ~~O>;Q|kw2KQ> KshGrpӠgs'*h}_o|p?y hp#ፗx`|ecʣvtEv9k;#xQn}@D,Yo',SkŪ:!Whm}\[ۤ:ۈ l;Z#` \KWaМ={_R:-Di3t"A7AAo+ "Y9ձ*/$("(&K0`!b VQzM\G`;.UnRfBp:Ƽ'T?[u!Q$puI$8iȁ}e= Չ"8d$8E9 ޓy5`pǁχͷꊊ=npMK_Z77qc6thS{h$i{ȞJӥP}O~Eg+_9!9ǛyREJǖ]`w>GW(R*gB}!N$QcGR] ;E7˾rTmM`? 'h'8MpF1|Ҝl~jBmu %eOo^ƩNŐw]gMP\W˗vx]xV~/V(ۢ+ťkO0 16[ ƾ-|P~GO< u=81?+ۀ~x$ jZ(Xp sס3 Jp-8sPQ> YPCB$ԃe߷q 7u?t6@_PD(ÒGQ~ZrG=5V$eh~ҞzG'P!ec%$e7,*g(ra[,Ay9Zj6e/vA- ;\ cه2}̅(G9>X\7ևP*ʓ -σ]g11w|hF_AF"$ ]dV9=1?ewڝb}>+wOrݓt~%wڝv19)IMhqI1%[S mli:#zm; vUa8Fp\oW< (6Uf.UHMУM@/Jz~%߅jW/ɯ m6Ef$H9^)hV f `GHb+N4IzЄ9+Ҥ49MJǗ.IӤ#iRkt"%uPLIg)OMI){R:Z_3)9iR,MJ7hoT4f`J[w\AiV&| _%** NIf䬦J(զI[Ҥ4iGkLgmI}Hw(% hJbZViҩ4靔t҅t{)mMcӫS:Q&} 0^C5RP]kNE[MĠȸSr>ai_Q')_M&cVpڭy^u"Cޟoz.2DG܆/ddqFE0|,q_ȻFZęGF7DJ|MYIhy[l_v9i?i#pv'Ps᝝*qvH*L v}Z G`HhU"M4CEe8V}br+nۍn_K İsڢ5h;(o$أPCӎi';' i.i!M_dG[ytM"B Oԧf鳽$ y ~Hn}pzY!})$_c܀3vNrW׃g9j-G-B}1|_Oʧ J=(Lt-y zJd4ޙ&?iXhF||ٵ[d%r@c]Ü!7ZAоK#w[^ 17DvR&~5L=0YLwǣO?ǜ. }<_\ NQ "z8Pbb'1b?]_"f]멵(>2.C^z+L"]O$_ Hv[zJwx#x;"bȧ#3_Ko-n$7TFQIiJ{UگJaORv~Fm*LJz|Q{Tꢣn"zLFD&/5^Y}]{2h?7)#4)>v!$0OwsddSz1A|cLB(B*6.v^*yunU[-;XAۇstثgؾL+-*cm*%V^|lҜ$2qDZnrf\Yτ:%gcgN`E5RC$e B'}ek 1 C\&k-9oxɼf7'? <ׂ dyIҚ$)JYZVKS~s gA*wҗY[yhH,x::[p|u\~ϓ?z h&1.XO#Cb|Ŕ4wXo4R-T/_L~M;ɟ|l0l0ߓ{k&~ GP>Eͷ|qXa1yHSNWFrXH$9{J FLh<:G`g㝾/ |#HxNzNzN{N4[ᒚz.|67z")=}<%9ω:~1̇˜]e>JRם8-VON $[jT-viB{A |1gʔ0Jortq璜kCaF ]ׯˆ(siu7j9~h}(Υڇ ygۭl~m9Gʖ׀gf,~/r½;[WҤk;}L:s,ReKni 6<3iٰ¡Υ2"ux+~^2h b\+.Qc)Uy'`,OO%+p5p7pN0205Q?8th" VTCV$E2 rwAJ6a܂/_b[TUC'LFRJ[kuHt&cVMrO oS;CG|;FNjh:rp%5`-.^N4D߅LBXKsZI<|j}r{VCΡֺIbkNG@][KI&kCxɒYg0$zIV6-m%*v=RK:'HV 7nV5Vj>H5{a7#Йvc bV/j|he[ֻe@ r$bVO6_CuZ==Mc3`k8_k'xp.{fO3Y4z A)]Fr}=v9qr2wx*XCRjhUVĮ&\SEW^}"Z-bo'tQ&j5[A3kMƂG*"z1r)|ƂXV}իU& &؇LH;w*ђk)y}YnfCd#ME;Qe6ig_P1*** ][q4*Q?2FE"Gȷ`B!F];NNH+cyd܅:2NGFw^1Ts3|^6U2XJF"(!ӍnE>~ڶ9&R= +G!*ۊ~jV(wx?$Y~eUmśGY1(2FeXv#}|wџ>]iPы OLWgF/$Vzq -Ǡ}.U'!d􂠱$%)9o'foU[jtyTsI'u0:\Iy5νVJu#қoPoZoVtG ʧ{wzM>kZfy&j6#qǺ$Islut10Q@ ##rRdzdx#0&5qu;NWY!Gg]4:x!fa׭#-]y= Z]O79J#7s_˓ȰXf5".&j ,1UL?J/<ݎXyvi48LbV4m=qq} {hb-;=FRyA죉WFkKw0owj*>}y;m}p{k+ro};c=Am";Th+~q:'&B]FҧHi81u77ێٞ=,Dwcݍ$͍{Awb1BNJ{A{D$ޝȮ6&~Oh)ܺZ/Hυ{>C#Vx;hxT; 6rs$Z\wLT\/~dutڹ=Zh3OlHXu}LpB_wƦ:MʆydWe ~;`-|̻nw2 +av_4-'X~rX][{(Ode~Ko!_癌&n% DLdž#&dmŝ\Mo|L=@EzމX4Q܉XսYɸylB;}0xNU'4Cs-Ndzw~#]]nDmr:H>VoPjZEPl Z[~_`:‡ZAJXv6|~s Di >\R>ad~ P:Ӆluh')񟃬JIn ڥ~,T_Po@OJ7SHf J\|R="=@䳟K/xS=X';\_'ܐا,[>]-ܧx}OGEѥ:* mtP{*"D>!~;]ٸ[=/,_{/<鶓^ej}+n[-~iеqRRףhڮIeRCw^R{_N&l|u.#/ 8:{vz޷GU\qϽ3ww%1D)""bD#b!4Ŕ"Rc 0<""F^1FĈ1B3gfY#Hg~93;3>fxO::Sz^o,#bۨhz!ܟ`MG*/?L9wfSގC3gj!?C.h_/ƿ֏$%s05~bhVB\\! =I4C܇!z4"Cl&l 54a[0–78oÖ a)kz0LC S0CÔ94LZ2>TZy(l=G6tH=sCD<  (p0c4 x@;1s]RQ2m\@\ZbDZ]d2@6T٦AUWs/itK%AHl7owjHˉwަvwսEh/{Twhّ8Wg8gkT͈yMN j3S>)^$֤-i- ]5 ~7[*O,3AW~|WfyUDGp4K'@ΓD:t$'\}E,6· X/Srr޶g[:ndKmT'\sՙM]Aw3>NTX|ʠ@::{:͂Μch):[!SUb]x'>9뭫$x[І%kz1hzf1XoC_PL^;ZIzw[T,m-W&oy•eV[m ihb+' VۋWwwI\u51t,TOS#{3LeƱPΊ!ޝ!dO}dPD LԞʢ:DE5[o@"Uq7(_I[MJI5o Fs9hqN}F4j(T=̕8F5^~"76hR!r~'0@jpb*ӜZ[Um׃i9jU UrիL&jok99xN&wHc $jZo YnzJE-) ROXb{|D:TJkk4I)SѢ|{Xʾ'MKº*CwdFq~%W4s~R?nӻȷ%H1 X ^a. ^ y]$R 툿Rzy0>/w"S5~+e#-BGX{R@f#=-wJMej1>$oG6D< +:)?_R %W*)}Nq /՝rv 6RTQڮr*Ƒ[@Om ƙJe{0T>Pj@%*d)AŹ'̡reSN $.'.b|W[@CACOLnډvςlߍ #p%nj8`X"\ds¡, hXas:.oWCkt0 SS1aoaXY#A+A}aX{[[Sc,Ç"2f$eÇ>~ a=oM% }K#7(gς~ M.&-0'בxEe9^F_ߐk`Q]D0B0V^PM.*r-I 7k8"Yx'sY|WX^:\j_hXÓ F#4y=,-ˑE i:ADz+G+ҞHd<2r4`HG<2l= h #tŐP}9uHK#=C HJR?B#F!Aͨ2i{vA(ȀA4`Hqeޫ OXhwM+X8x`Gmۂ5 hJܵo4!.%Xň7.9\\F#Ea?էWQJ1ژ4hэ̃n J^s6F-J>V陴5MtKXb9/|mocleOOϲKj{vqtvr8;88f9Wh 6C8`n>bluH("/#fEy=zS6mbAߙoC\K޼xG1mZ yQ=\xApy.Z׆C[_Dp} |B2;ҍ&$VZ#(25! a6RJܪeM*V|俚+'y9_R6_,omq(cmi;<ğ~HڷBV\S[U2X"[$!2" H֒ )# &I-dhX!j%ojjUW+{ml.ɯ!+YwP5!UuWK~mtT1G_xG%4N땆WJP* #kACҿ1+kC^;rkw nwvE4̷~AFdP, ͠Q5~CA񊫚i*`,;T0tickZX #cnwi'ǒ">_,szؒ!ğiWRCǃ!el'"f!! Oew-)E_*{a2GK4}Pc0uurۨ QFQIbFѓ:96xGmZ..5s4C$55tv%7sGn!bq7ߗL_s|;ϗ |Fe]bfIdH7a*fq?Mq&wXdž-n'@|Y:!a6Bff/S};/{wkZH b{a2m>OPlpE9U]H`sV0[mG4Љ0#B¬t͇.R0']0/Lt-t?=@#(=,vl/xv}Ǿgg)&o/-r+~%_ï7Mf~ wNޗA?O) g_ėW 6^1?_/y?cmv*s9L1_2KW7̷ww͏ncSsK+oSwYu.˴Zk5ʵiV5˚gͷX BZn[RkUf*VuƭmnnrtǸ[K;ܻ?ivϵ=7zn#,kikz%^M'ot2}>Cљt6}D%t}F_oз;]>n;^ ~AvO/o5meel>eVX=; 96nޜGy[ޞw 3yWĻ'{>ϓ@4Lų>@Sx.,>//|5_Kzo| ʷ2异W6f8V B\n͵fdn6K-vsYnV!ylٓHK$si z ;NtGBZ+Rր{`ցa%x~a;h5nq_/W_z~/àAZI>?͟\"—*&8-zϚ+25sw=sk~b~f~aM\"}BW7Xwt7~J?_ү 1aWcHin.#y49|>_|_ul;ֶ;~Fyy\l.5W+5:sj{ sYe4ͣqƬ5]\.1֓Stk5Zd-^^޷>Y;');묛 n̽Gvx:z<]rLh 9J9AH F:i,r$X!'n2eТ^6 Z՛88ɠ 1j|+Z"o'5+/9 x#ˆgq%_Og=t"= t hc-N~gT80Gzh=qk1nƭǸoaܯ0aOq"/ǐq_#=A]( қU69|EjrMK N[ҖAow'}DZK͎p{1?ȫI O~ox 'y-7{w+9k#[֧֧rw<}#}6tWlz=]h!ҥHDzP<xw@hh;KCW8f/Md0`.q'l<1'U=-C3EY^ ]>iK_uṇJ$AGҎd_cM#Cew S?5AOم#5Ns¥ErRuPA?d#M$q1\ kd)0tZ#8J>MJJ?twQO(6*@[A~_=1:ka=EPb\u/Hg}YdDDyunzڧDk?qMԳ'"l4կ+n<ӗũ~Ez1 R]RJ-}iY-1nlH\qoC}hVցN|aT);˱<3}{۔)D4!MT~"drTm_yYN+Z XXM0[1nKwN_nV5MYBٞ Aj*gD4t"Ns{w/*H%ځ74MׂW-'%D0s)ɠzތ mmL? [8)-pA|:GMxp~njZQ/OiZbG-?^Q+ʏ ?az+`|oZJVvxGy?_)8Stzryg&M?kj Q'5JMnV>yhڢn/ 5;^i/5b;nSԠ( ֚Kc%δ\e"*cD06'B3 XˊXgHX(}BsYd>) L%w L_=|A?w4^*Bb] @a} @a t@݈ulQb:qJ"hVw\@yc'"+: 8;!XyC.b#/9Vb%V吋srqv: ys'؇XN RIߪ^Q;ډ&@tI8:|:7{>z51b,&lKg,cY.gX![V ks]OoN;μ+Dލj2x>ʇp虠fG,#~s<ೀy|!|1_|)/k&x)+~^ ?O?Ozu6bjc6-ik <<x;[G[g DA[޶RmCFni>668[m I\ ly/-_a[m[|mmRv[mlmlWَ?b;n; Vgg f8 5ۈ܈6Z16[팎; F".Fxx?c <lbÍ3Q࣍qF $#TcQ<ߘc,>(4/2V4끗R.eFxQe~8b~̨1gPn]hQ{X{k{;m ;ٻؓw>x=> {}8 {},h8c쓀OOOgϷ>>^|ȾrJZk%77۷b/cWo?h?~^~xCwmC|Sr[:bKxG[C|?!}_q$;f[! k#!vuL3GHX 3"#>"ٌfD>@D>@RDJ-lAd "ن6D#@d";)C 2Dv"Bd"ٍnDv#=Ad/"{ًH9"刔#1"#1"T R'|'T"RH%"")""}C3D>C3D#||H"UT!"_ "9DDKDD "9?"@"9W|b%T?ZjꇑV;}9}!v`kr`kBZ\'Hq-Ği5r#5R{~ո^ubϏNNV:*׉=?j\S:GZ\'HqĞi5r#5X{~ո?՝}lUgW BL4,P\XT][ ;b, +Ⱥ":`|uN؜3 25aF'n>J ry?yuyÀYZh%` \l hVI+V$Hڐ!iCBʻ< h]l h]l h]l h]l h]l h]l h+]l h7]l hC]l hO]l h[]l \lMA[de0HV @Rd.H"dyH#d>H YI%J$UHT!$)?0HR~$)?I 즅}nV2D$H#dIH&#d2$%HJLA2P<9*OWwxr5'Z_R삗F޲0Yfʬ?$1d$˺H/|J`2+c2+d%Z jB;.<i5Ķrvv[ɓ]UuOuz%ֳTW'#DQ>ҧG=Җ~)y;9졏 y`|-X<|n7c|lys`|EB>[3>ǞZu[m6}=tz kUғ'k=cGSOiJB+ml|nzt\S;kGo(Vx(a7gd\'m!4̌jhkNzMzɵlORVZJY(rLѳ|Y6NaY3^:VS)ƯSwVhbF SZwKBTyxc.y~{ΐ^Λ=]vYҜܿ,DTd%1w;)Oq<;:vB1ߗV fFY4-;v8=OGs[Μl(!ujQ9.7gNɕ!Q-Ө#c22p:g2֤{U8JG~pNٝ( b(9'AfgM,gwijgG,ggٙ#_r~ImojT^_AU`X{C% 9`yR'=s(9~ ȉ#۬е4kzn$ pfw,cf:g7ܬ9sT0sN+Lӫ RjjȺ^~ G[תիi@z ȒVUxcJk_+q|wm<҂|_~ *cn`IODe<;x^6^WxB[-xR{[ksT<̎U>y×Wհ….X \6 ^Ë?+5ta .TܷJxTl5m#}XyPsJќ1iՅ׍gEg]}528z˼jË=_n{|6:k%><*zUC=KU=<'C׌$%cIHοT>FJ83S)ۥF=x*NŖ.q {@Wk>uy'SxB ^#Hl֝Q9?(Ѩ||MdaF>1[K~Oiw%\mp#7vٲ_/c5X-92ki2Y(pEbJU RhBZ*V)JUw-Jyciv68Ngs99Λ)z.#tCqz.z.J\'guj۸z~ֶr_֯7 }Fԟ}/cXsL6SM)3fYfc6ٷZlb]fy69iΚ͖Ǐ*1$=rJb|p5H,1'\hLW|$V^r.U1WCR4ӏfHk?St $59in>  w§`'| <W7y< _/—+U<?n:|O| oS4< w9.<&*9F {b}w}wuI&]r%NR uoʆ5Fp).eål R6lVpJX{<wÉNa b.7V 3帤qiCQ׿X_Tƚ%Ej K+[yY]墁_f~ endstream endobj 611 0 obj [ 0[ 1000] ] endobj 612 0 obj <> stream xTM0+|Vp"EHCM{z HA9מ!$RVEug[kӇ>V}:rqc]ZOu |964%޻B_[u$qv:-ׄh}ZtܓU4Ц%vwe!(bQb ( D9%ETzD D,G$1p:UjKӸD.lQ.%^"VCQ0*YZX<esQ׾ Ń#1s$RԈi$8"n#<1ANNa3^䧟˱_Dg2EzPPw]<.x1k8ב,)}+WCJ8]%T U> stream x} |SU4]6)MAu}i4tPnh")M K!E)`@Qf?̟עcq\u9#SFh;dF?snnIl@<2UMcG?YU>bWL?ZYUޕL_rn*2N͟8{ugW,k]wV.hߒr0y[h鈼6En֋;vwc:}E%,WoYѡH)̟|Uk5F:&_咎`<`uE[gKo -nZٲ'5@2wZ9 :Xֱxo0/W{̛0 @i_nB嫹,'1&9Iy_4bP˸Ga!cv؄fdh \sƁET%!.4F9 CpV+}N4X3xM%<ʺ{*mR!NB, Pzv>}& BCp,g Bw>/,! :)O{7{Fw߄)2J_1:FP}(D?4ipѮPs_˃p=Ul{6p ?# rrX:ʶ雌(}M6 &~_mu$=(D! Q6}QB$<ݟ.Bw/=3?J?}=lǟB9$}wQB(D! QB(D"g b(޳4//mjNJWuᒯ~^?{ڗ.m;lmu@[]8?B$tiơ~>bg_W/ Q!}wHx~G܆Ce{l?縷mjm߶uo~urܴ` mNtYʈ^w~mU@_7i`Pr-$܂3>L쏷CtIF!RA}1wV+QB(D! QB(D! Q#GQB(D! QB(D! QB{&]<~'c4/(+ƣȄlȇB(%VVZ;YvĦSچYKza<Ȑ\\רrdXZ/=nrOr}{D?QG+8'߮(^͈'E*r_ï;3uۀ~Pل0CJ)YRHY*BR֊!/CV )7 &q2]r8RK uRݐ kXY?+ .~-VAojOq*dk@G['GcwN@ƨctƬٵ`ܑOB)WVAQA`.F_P@z<@Y 8* _j. *\pbWt*xCס|D/R~ 7B\V*Xjf7P7yi(k8n$OAک([@[Mݝk׬Xr -m_׺h ϛiX_7{VӧL(/sLqM,XTX˵LȖ2gJ)6krҸbbok4DuQ0sET4W-S*N VE7LM2ZvτS5أgR4Ç6,2Y[С&elm\4aSoNw%ctUV?TI' K JG*7E%eb=/;**R+M.\,uaeUGi>69-Vk2ul ߠf` >2e-tUˬmlpZURЂa\.Un vvYMIiAvŇWO(Onb`JOpKocS]mfMdiJl=yk*E6zhr"@nL,㷟6J*h2oG׀?u"jWKj7ܵH$NZ'hhTo(o;fVgkVS?NUE=8J%[h3Տ{98-O'ZM>7,„U߬H]yҜ`i J8oƯYߣ׶(Zvv&gJxq`T4"8ZGK1ˬ ~d}AR "T4.`ģOLw/HzBA!.S;ʎw\# ZVa._dž> 'X ;vZ5WMQ٬Dg +V4[$[kNbV##6 V#L]G̵6!..\y'a-,e9b1h[Pb'7MM|Ƃ 5rs6+9j9X*5geO fN babG-{$e,٤6z儃q[0xIGMcHC'4_jlv OS6{$M4mޏϡ-Mͽ*垞TkޏOnf娕iJL3q ҭ}-`G9%-%2>]|Х sA*Ja:%Rj+Wrj/RFZR!LS"@ Q; kfNekql}X+Z͒$Lu%)qC٬>QODF9EV09":~eəd5} *A峠iP[P9TNʉr<TTAHPy;*A奠bPy><T+\TPT6MAe^PTܺ;-ar w~F맣W:`>[vߗpFq!q1zw<#*ťzy,n1b~Q@ N\ŝ׫30M`n!kQfsu(n"0u#.~QFrKąV kZr)VQ\,j'J+5]i:)V]fB;jO#8n2k1߉nb߆ZeGxgYC|M#O~UέD靏kdtpO{N{ۉ| m7< ohG+om`>KnIwwr,bYvq'yl/d; p{ .QGv;MKs.q?)s=81)S{y:<_w>n'VU5Cf]ߊuoV#_kُq$/xR#ɧv I x~}[w7j*]]8o"$߄_lXO+W밉֓i[[/&ݤwqRd2b L1.g 5v?r3bl9&ENb11h8ה(W6c0""tap/htxAx_rG"Q11xRLJQ|TdE\wDG'QDΊ8E7X!No\5x_ +tT jD((%Q\AקO\ٮ,xW+ՕⲺ\2b]1Wws4%jʕ1eckxk/*u{Amݤ[uI;$nq?.pPjzdy\ml建ƕ{|؁:*(碵΀ ORZ*o2"kT@9Αv,*ӠVI-g8 RƵg.߬WS,J)N=e]C9ZP$*RyrSEuh^R'h-0d5!"88xqq/c#/#^Bxbq qb;؂،؄ M: D-b:#& -B^)I q߻c#þ?^{7;{iߓ'||z|{}vvmm}}}W|}W}u_/wiFs-\f'n3 #aU׬R5ֱt)pS!0 U[ ~ a]uDv0y? \a:`5<Xp K{h#Bބ0 /pO"B~?`}ށߒ/#;`:Who_P W?ĵ2X {@>`&l}(\ CmhரG!357i#7oƷ v :  =gGuwdnx=g^`Ia3#:)߲'\ Y#oŸ.Bَ~/|.-83(JXIlxR> [.C&xZAޙY%< $Opo4n<r FD"z\o}">0Dd,\&x<;!_,U&r\מq6mr'uǽ8E Sp5p/.v炃U]G Ѹ2`~j~qx;,5}D/o~ó"D!~qD7M! iy̸w/ǟ%.ɿ;桡rQ:z )8/~Or'p +v^-r4wUw f5;y 4>Csͭ@?e{ п2# (M&ِ PN3 gfC쨜2\G1KNv-}Ձ|c,1;HÀa7t^.),(&RJ4 I)Ѽd6Ih3RpRbLY575!뺦dlL+ۚn _|Ʒ|QLU`w8چr93KTOegg?:*§a9PfwDlMB#-*:OMKRy{+ ",2 9D-N|rl?lΏu͎eJ 봠=/Wt' mB,X;yFęMX;Qƒ_=Ӝe3Q̜lCDqs&n,GsHYH" Ԩx[ywWZtyyѩd-?9eC7 5Rɤ/>%Ț[ E1x`r-v~gt'a{*N"cRxg$g_-Y0PZ*c8OXp 8j5a4c;؄~r?9srRXY*+3 ':`iќ^X@_K)axG~P ޜprX\tܥ)]Ե˗;mM+;'OR¤؈ȿ_6b|BTAnb{u,C=.pg M-ɣU/*C4%,b22"E|"S\d/#1 b1Cn8i6h$`1 5|NwX{)_nȈԥH4IUV2*)'dMި1`5^sf rGŠ icc[cN#5F*1'9b+} V_ q`EUE'f9MSl/ ߹_n>ur:ҝlU?g5=e-57ŅI)t84W /fa Bf¿?"9**O-\~pK۞5ʹkjmdї{5L/%88wCetFͤڨ K~cTn(_5,եK2Lw.cy3C/ےQkx_HS4wN\¬z"xVIІiTb쩌'Э'JսE'F$0)5c' -l F-$>?BfTU8Wy'c+qⵉ|N!Ef_iՑI}ç@K<}h䱯2[zeF;崞˵֌i:gN ktm &'u\ɩ{{&?fgļ0Y'`3gI =SZbb(.vkxAb_؇[, ǐOw^2ȉ.VQzlLYU:9q:UIJg*^ cS*z+&W[Sp HYt%o»SxbfV_s~>WݳpVߎ@(`T(qcf%GQ=Q '5 'N=:[+=o- c7ҭYڲ,!z̴^P46T&q&uy/ܿeS7ot_ЛI+dX.4M{*32t\&OM@3FgM"uɘMH16'LI'|QP:v\6(1p$<,RّQ5񿪨r;֥Ge>cr1Y䲬h8#|)6g_+k/:?./w}_d$I&ɞ$ Q@@DQQ(^T*P[Ui}ZVjQrsg"}L&ɜ;i|nh~aW0w)4Nϧ)J*$K26 Bܯ`C`40a-8ugjrV,o rbTT=~<ʻcL,#` f{6l*%s u ˖WElӂ MD󑠀OB>rAq p7 9_;w٣ғ> H V7,O  !ȼ{FC?6(h ^=b+y{dTsȧP7Db~& NrXބT9xo =|j~MzۗGX+.nBdu|G,#}BXM \7` ]fƅ%pꌎPB@L0:V/EBў:^u2C&<¼yl:m18u^ aL2ؔ5&̆}ͦ}4I`}PFz>'^2Y85Ro4̮M"QwBԵ>0m~|i\&N]^BY8bW$^~u҄~ T8TBR&ʗ)\f[>}fg!NZڢclYҧ~a/q[szxZ!s5z}߁ky*{HV(=ljMw|V1&#R@^ 7~\Gxk-]:iN"(y˸/OsD>^sw#9,X5:DHNd"pRiyWAAC(<1C٩lq,_hHWDa(}U-P"#[.Lj#1;@Q#?FA#~ɯ3y ~ɳCӊF:ȵ: <ߋg3M0_ͭ$3jX0b L穮MojO, IWnd: y>݋d*@X]d ilizMO;Y%YFDEA2 BSP,6މ:0:<=Q KbY^EFԥ`"Q!3.S> Tn82++{t}{6"ණeC?+jon~*އ\ZF fƒ׮;:<5FHw(F֮y_E11 FIRB(5{ʛW.O/SߍZ {=m!NrsC Uv_CҚ܊Z2^#ܡPX-9W%"|;|na#7`#|Dc dX;d[4#nZv7HWTtRVPЗ (|Է _g;/ubdR].,%?l( ^?~/ ?dwo |C*&o`H>z,sXV k! *F Fe>&lBr@|ȔћP`=ɏ 4f#' Cw}]${pxU~l> m"R9аR4,KHA{I~nw;;77NJ]u}uh׉Ɯ UdF@̹h*J"ThWRJ?@w}!9E\H+];~1qW:뽰' !NY|!xܤS.*BA~s;/-EQd,XC^Y4eKHD#b9Q>ʆ  ᅻqT(3Ϊܖ3ʩq_1YDs"~(QwI͹&W^W =^6{lSuaԭV]V g;[vԍ˲w%4k )7I%A}B;Ml4eRaC8 D ZgRcI!&(W^AS{_w*L(yJ$ @Z h|j. wjE_+a~{E#7]^rD9cP #E>U+}MM*)Bjv:zF~QTpFcGO7=Ê7J̉hZ"G?/ h=/#-۽;84HLHx:Ha%DC ʑEփߐɗ tjB -QbJ$L+~$`R)~C > (f$c+?Η//HgO/I g5%mvB;,$ އ,:ĝC֭]|Œ^+8/*Ff`dT3qD#25J"!/O^:ӽ;1uhoՑS/2(ߵsp1W^}P_ WC?m'4@Y+-44Ψd |$q3 I~{ D I<% %\)\.6N*dVJqb[m8ꇾCl./Zd,&]-gPi$0l1}Qu\ wH.ZإDu>meU5SNURI#F&5n"F^)\!5zc b! Ƥ\4ٴ]Cfqa>Վĥ58!`8ux@[8 jet, <\ 8]dQIzȠ:܆IߨL9%_Ըe<4k:{lURb>{oYb >:=Uyܐe( zc[wm}Vq ҞM6̛{w J·V`abŠ1vH̰I,o79?YtDV6To狼V0pVDi2jjŜB7Q"n]kcώKu7j}Jn OT#RjnSqGmbτ #K*!ֵWoڶkLjcso>gV}Kռ']{4S!ErP-$F?go@ WSIa7W-++/0f2evGS<4mCWP%⯟׆4!Xғ;WOːMwMfO"e92xCvar +&d}߉6?8߰r%3lB-MH9p` ™M7̟6"-쪪?3g\ I߇X /c+xP iY<3t>[vDd.p4r7/BtwQ%٤{.3Sr B=ǩ~B_OpCT<7kWVV;0~=լ[4ߨm![d}Um;ĎlE2)UH% y2xοmKv`yJd(7BlZ(HQ:zFj2;"^ Ϊ˔DM7NFoPZњ%B"C(Y0v2b|e=7H<4Ga+<*P@[Q' ]@lEh?^ zt{phv=CP rt:j8A,X@$:f˚\TQH1'6#Ȫ Sqŧp4  ^@ x7|jC: sI1iPUo.m˳UE$M7/ZjhcInwr(h,P{4\ڴ㎫_p]4L;+=Pj,x2dgڥfrO>KP@Ԁ1UAJIbA(*;ϩ/)1HdIݐP&/! h;(F.x3D)9 (%Zh(/6ckɲIcb6%Zn?חI۬)?ӳT[fAhY׳ z" 'D֯$ko [WG2)K7^~XQϖdIhc@FTcET}2JIP]]8-jLY|(+kʚ-'*L<Nc ԜG%Q0G?Xˇ`k$*[}v&%bA8ܩ菶;~U6Eko>l[&jնgh\]5nzܫ%;΁GBrIȐ5]\avbw)1ce_svAYYv,噐:ozm3$ P:L T"c'#%:,:&tNތ\l<1# IQ/Ki֣FWh eQc3YȣyY|PRmZJ}`P|UoJ1mѾٖ5d-q٦jkAc_ ꛏފqײ%_WG0s"k[Xrc!H0d}gQ1*N1ȠL6y+S NH9΃"K;W dȣS嫥FĞB*1 !j7! QR}i-}lG%SVʐ}[H.GQd@MSx$)`$ Q un|GzKsO_yB& oP a)iC `ee@ sw9?{ 7XJJ/+b# h޽ܚ>Qҟ^Pp&t:ʳ*\vtߜ|RC DH5is;KWM_͖{xt wL*!Դj=n7O>b azóלkh^%@*4kdXʙF)Eu buXЩ=P sEԩc䬡ୁGobdN{ZB E<^7Nuc˖ƥVRb {\^`7Zܦt.wSԅ~sd`Q,u+K´F/w5O޵2a?+a&Tg‡*ru7Zp48)#@_{&4rdc 0=exRDž؅KjmĻ}xU }Ir)y.INĪ0̉ wҦUv?,{l#@4Y'b$A!;ah:_GKMc9M` ~ҡ˦>k2^j˖+j+ KV_z~_x[lk_wmnu*nP!*~:d\Ni7eddgYjOG/h3t3Yd'Q-IJF^yz1S0%|8AQ**_}9)`DyypLcޣ:eVZ+3a,W~EZ$X,iT$-.u}zIy/gU!hI7,)z9YMkd5__Z=Su ӏ&<.cI9d tʱX%^\O$&ʶ>ϣX^G2i2B0 ISljRbRj)-#Rh_\98ݤrnʬ4m:35jM)ؚMY1):%Z:#xMLkmYUiZKY~춲+Y8,U4yZJ-/VjJM-\V)bGlXWŋ~n& LOO=4 F 07CʓiTKӤ#$bX9}Mpm&~u:~L 馬y1٦ʖjke3̌Rmv|>9xg/^§rTLuن\ǃZ^W_h#ݝ'|OٚuY#GrԐz=yi8H6VifW> ʍےpx ׮ч׈ϋ2?JlG`6{:4 &^ U`qx*8/!p[L, nٴafrZjz{&od8Wdv֘QQnXp? `Ak7(ĸuV9! U+,|=_]yL} >Wf~eW[kv>zAMP!r;gu;ּ4lzz`#r)tdmW=Y[ݼ]Pt3(1}]GƏK#H qGO@ߧN<$*_/>aO0O#)‡O<w1:v@W1Hu=y*έNfy 'p ȸ!eZeh=?fݜ3KY-)-)εdgd'&FK?]^%oK@@y^T_:W4-WcĺZ_񾳛ͫjyդUY`b#gߛd9tH.4e[,Y\<߲%%6nj1wˍmƓiү=ko7UW?r\EijY_Wו37=:;wZ)|?y+ۖ-nܰ}&9z%dzk٤V.nH1 OIjLiN#HǦ ~% 47o=;cꤔZ1mvAz mۚs humvZg?.ƴhN)}(ծA d2h&l"+7baŜs4)E8srQ1ѱ!5^9qN$h'g1J,'fg,f"Ϙ3Wsvm1VM&J/-5A{ 2jŻpYtK MkU) IXzE1in?W@d}Yfs8BlI^s_<ʽL9M1i}nkT&60lW߃_*mce\,[RӶP~ۜ/۲G7SǺ:zVYeKfpUc7# *F'B:T.N Z2|sОH,ʔdߖdƣ_D]g`kCrJ TխF˘KOufv?iVC`6OJ`[ ^Wtޓ8wwߺ7\x؁+;Xhv= 41~Tv,z[oڻPOX޾xrC_\ks߽ۿлz`#=N\9."j].yДPt2B|`TTnBϋ0|ഓ +d|4Ev{Z 2ѱQ6LNfZ1{f8޺`ceOݱgTfuNsg`AzwƵ+z.\g/ ٖ$.? #j>}s\2소ԒT&55ʼn89N s`˲;Wt>KŔx ɢϬ[ϳjϾ\jVwgVW\XqdF꬙ߒ5Hw@/fg y%yz}b`w0xد~M#~͏o,Pu+ı~C5|.$dd2HDܶpԷ$5ki3,ptvf!O?0&O)Qze<1"*3$ȥ/E==&V?y2fr1uMcˠ%^zMRf|hccӳP]W\TT0^qcii^28FV^MJE]$1GS*62jC3S7I/l J0fZ ӗWl<_=wnI{F KJ~I975M㵾P뒙U%c-?]_;љW.qLTy_4UՖ;Vˬ/z˼7l[&{_Z?RhX^џ^.78y#(dž.>6LeCQw/sFkW7"Qyt??٧xa:eB* V\)B]DǮ]87;\ s9Xmf1t td.!(NGf{c뙼9s檈r✂Ugy v/W߶ކ6ɘw#:oQ~+$)*SKνq?|q.bGД"=2T"#]I9('ILFGOpf͘x7ՈL399ZDzƲFǨx6/o'qwI[l'wSN=p65UAR/lAXzFiԖ h:(pe ׿9&y+Jp棟6l0R 5G4tpd};)Ғm{)>TJ)S[Lb*ACp5I;½~М'#A.9nHD{7.F| : ۏ~;lQxMx4 c*@}T*R,jOZR.<0<:EM%ӧ i64{mXlA꙽ qqR.Qkt# \&c2_sG==jKs)&[o/k.F`8|yX(mO(-QA}'N> D9i䢶8I#+$:E@Mx=\4B29ŹNܗ="NZ\]~o6(}^#z[zz 8Har-`o/wPQ\]-&w5]!ngÿ^(=~o\3PxC>O{6::BW-('NGwC+B- ] 3s@M _X!9>GWZPznz]]pp.3@/P;A7 '}@P]]NG'q WAp ]+FTwA;Qx2H,ng^ vDQQu]/ +EEX*wwUn΀%3j@'/(ĠO[RCKA : tnt{!N q.ׇ:nY9C~,q7怑 6Ahw?ECC<*t΍P/ >>'u(+$qJSH.P.XĥEqo0)), s1q TޡZp@TUzNMEU~h|\&BL;N ܎!Z=A#\AםC{{/^ $p06LX! r'z]HuM I( bTUKw t Ћ z^Gdr'ztNLRMFϐ\v!^W tN.@ ^\G*v|9Z4B1D87?::Z_'wCFRU}&>|#h}>F ZnDͨ݊ 'V]l=}Vt݆^eBEџK0ZMGM9 6E w] r wȽ rA -{J3X r@n6ȝrN DM  w ro܃ E6~yk rWu wd-U wm r} J{ Ƚ> r@G Ղ,[rv,%7@l{)Ƚ w# rr@ 1䎃\ ȭM r׀{&UGu w > 7@a; r?_eDvf¥ w)u!{+}rWJPZ.V ҬRmܽ{n5{tSHۥ㸂A>}* C t2L(XņȁB! h4  X{WcfD8.|Ge컥jHqQXrF}G>FՂJ0ڍftxX'\uPEԁBBuiZQ@^0K!txRR{3Pv\Z5j/c(U۷hQ&IT5m߾JɃ~FOo;sD=pK,)Wbde4IPG WJ2.a7Ip<8jT *qO"&`n|`X:Άt?2k 1<**v_h a#L6Nuf;d[t,WA *;JZh#kHb S{PXkyF;a,5L$:NMrf7neC&:=!4 JCa?>Q&G,j=Aa$FhPy6 ހ|Up,c͍@vYz5kxaP UXe8 o32Ma=c8Z3k9R+Z_dz&c0 x|X:цMJWqу(G|CCdz!MJ+ּs*[^A#¸A Z$s#G<&!\{u!d5Yhjnο1д;=Bzy ͳسcJUUȫ=둿|sGϏȧ^{UH`X!B|y4g7DZMyG;VZ+GJ$8G}S4JUhR5kѤB둿@ nBތ&:܊ M*tyTp7rM*t >4hRGФ*qah@o՘+fߓYfVRm0\(11\{!j''OϞ/auoP_pp#}#GF!FKD<7yo<䉾ȓ|_B|}8 6Jo7z~?sBo -[QFJ:՟EwB~NΔtѻPUӡum8HyQDVư*k_N-tDmѼGT'9BTF\iNj5ٽ4:߽.t5X^󝫌vmk{uȼW{u kS½q] %;NWSTbUU5U댕OWOh/E+)]ċD1CEKV|PeL3| ʿ_+:u!b/le|lկԫԫJuU>fo@3QAGu_ oYTЮ茐;̛V#5 k\5u} |oXkZ=_Kn/8ѳ vY2ۋӄ 5bf̎ fY-G[+)] Cɱ bC9\ϸ5斦_2VZqr[uP+LtSDnu5$qm'pA w4 7a҆WE4(QFM~(@ߓ.\JtIW5}g(आWwDZQf4n^ywe喕Ksg]*'cJyvOE.cqG΃.Laqznv{/}o/'O{m]q`Zj&9b@;> $mPA<赠[ ǐú&TNL02!mDÑGuat_)LGؕ gL>1cRoqj&77`J씶SLY3%<$BR&III+ݲI7m긩)a&]zMlڎiǧvfd+a&m4 {lMۑ|f3hyr0ZR3ct3N(qq_)SRO#e@ʰI))i)SL KK%寙g9t_ۙow ]޻>C3?q*77 Z*]Ok}f/3vr|RS̽o}7H~̙'9>@(fSN5-Vsk+IW^Lݛi1^~R vRT׏4VұӮvluR+><رf<3;Yu՛;yYcJx%V͝#YX3%pF9vn_13\Z2wnʳ̞IڼZklfkSboh]KluV{ZVޱ96/r킘u9os@m 7i쮑oE680-9YMVvni sli-r^ -2آ{:畵7ʎ͏trbꮕ^p}Nybfk>oyߥv_m+q{OvLA7\L4/+wFP&u%MSM (MZQ9ғPoz )7$4F:}uq;')tLrSR&wJP59ָWw5mfr}NC|R?*N?wx$Ҵ3פ%*Ii0YKlŻf9V]l~\jA\}?/|}|-F:NG۰g>*Y_13d$[[4`0צ,[^)Ǝ[qf3e,O/49/ #pGX/)3uJwF-WS{fEtpxJ-ACXN.b ,YL=D#z4aDgbJݤ9Q dX!+ b$+-!JCb~C֔]8*[Ȗ"W>)ۉ|Z qGCd/$!ߓ2C~,!"Y,~|*'oWT%y{T5UMޫjҕ.LeʀRQ>nU]UWR!@5ƪlQ'U@/R3zHvTe'zL>POȮI^>:EIu=T755P!j,jF12QW8ȉUdHNWrZ>srJ֨5r }Ym*[mNS.QnT}j\r:rJ:!WiVQr*TMꂺ %e˭ҔܭEh2=ZEܫ|fhfivv>>jVy>>>ez[uާ-VhxXnA+ʵ{_N[ޞVUikޡna8Ohoo?U={oD>ctwz߽ol[-QIcɠ!O9򴝥,S A)>0hyt>'4<_Rv^TS-]mE4rO䠝'ǑQAl RM]˛:QNM_×%;eg#$薆im2)ch+yW\aOMwN^Avi9}sfce;Y QdĹr^rJzq4S!r~Sfnp6Dθ2xϼq, TO )O! ;ݝ8/"i_QvXXqg.!/Rg< tE{zAo}}П xk0} u$ѐƊ|1eUfM4sT]ƠX$OH]<U  g `4}!O_2j( PB3y<o)|`9dV*8ag;[/gTJP@U`,vX7T=>ca"`}\bgSxxއ >ԯ/7F6Ô'~".m_0HP(F2Ts%3n7~Kda+W_|;(j#_3;D&6ѵ[>4j$A>FhC}"l9&DdgCM ;údg[e/c/^@P*Ae ՠ:LV;fv}eyԆԅzp ԇ[=Dwߝw7? ZCGc'<!^zAo}c}ԟ xk00H0݌Q0ƠD xx?"M~3ԁPnp+4۠!^Iw;E7`*Ld3 f› `]{ ې\.,*EX"JVRU)ªaUbUbUNbQ~4OpB pˣc9?0*a}8 bar09X",R=ޣ'S>f@ ̄7ߢxKLRO`,`U9-hy߶y+ߺ.0u{"[8a8GqN@'G8!~3p C/s +\p']-`E XhV4+-ŠaEEX"h+ƊaEv^jÄHw]fg2T;%b>ldL'$6^k"?g 'N*"SJxNh wL=< Cy"d" `;쀝" ="h,q 1)cnMŰ5]ías ;>YSw?Uho*ڛ srj'H&JN&JNxr}NdN6hC6nȩTaQLi؋.VN F6f6F[InTԘNͿzJ49s0D4N'y J:4$NG0ޠTiN>R`& EN$mYiN9s4]`/O`,b&9ub'A$6;`uA$vC7-\8T{8?D`ID!v~p~po W&fKv8Gzsļab01o7LƻnaܰU}|r}w1ȅӉsӉsukVW>g u.@ 9bp~1hn5ƃi%5Q8<Obڑo 7ѓ}L1C8]nD`3# X[H֓z2ނ96c0ҁ8 7bqX>@\nd/h ֝Angb|`=|`#%lYbl7fN7 ;ψE"N7sl0+nϛs&l&l&j.y+e,t`1~[ii=`xbcc3{bX95g. {m4ZX, >>'VO=]?g]?g]?g]?kZ_r-^71; ?*{)V<(&ڭgY{I7&س,;ĎcX;of-- b˂ز ,-ϧ| #Ƞ~,7RO`,,>%|U>| !XwhKư|3ll (w+o`o p1ȥ8| G)8?3p}Pȷ_<\_"E;\pb;2q ,(߳x>a!|ǐ K9},cv 9eW/=KP.ۉ*vRv[ou MC|ٰv;anڇa<#2s;9#pA.y_/Bz,60A|E?1G !75 -< mQ/}g' |Fx? o'x+( ⃂ >( Aq8O*'݌987$ ⇂>( >( ' gg' 'b}b7A|PA|PJRo9(? P?ᇆvP*~(w%}?C?AOڭA|PNjXIs_L纱 ~5b}r>\vT.;* ee2+J_ѶsAnɯih;םUys`rC9ĎĎEĎĎEؤlRk!OW/ʶS8ZrR=t:pntΙ94 j[`9gҿ<}ݮMgfW65? lvZ6;-}NS&ul+jb߮_W -dK /Lxa0S40SPwdo̡fÍq;hcxqx~(=?,>IOS/9cqFܟ=ӘYƜuz~Mw /%WqUuG50}'d^]9 o[|x[HxIxG"ҵU܉c>mgY xg#|~!^_g^]/K/Nj?~kï?oko7sA<'܎ S;'b,up'ďyT2*uFkda٨ dlT QA6*F٨ duѺ˽5pgTY#}>kdagX 8q_;8z.p.p.p.p.p.p^ýp5/mrq>s.p^ǁ 9pǁ xͻ+=80ܶoʿ>嶣ܶvp5vsan;͊ܬʉ=qn֒Y/7+p7+p"7f#l=zY7kfnVfenVNanpnYfY7f]l7+s27fk:nfsanf#lrܬuql7+s27fk:nfsMܬܬfY7͆Y7fenVfquܬp^npuܬ'{>'k9>|Fwq ǽ}*7fܬu%nYs^npEQep0G(]8J9J9q9:QZ8#ep^p.2l(eR(e-GYQz8lG(#rҕ8&R(eQz9:Q8JG(a4"kRU A>5{bpVR?0f(^*{BO_Mݳyj[@i <.SNSZPڼ)J+J+ySVYz)m(HiFi)Jz)m((MQZQZfҊҊ6m9ܤ]Rn.~S!5W3kڷ2v=\L%ޞ{@[CF.&]&.d?+L2p A.eO2o!Gʼ3eޢ[H2$˸EgJiۓ}L;3ɴ2mQ-Ȱ=S2$îa7Ȱe,ɰ=S2L(d֞)uZQ2lSͤwɞwkʠ2,e>kJ_-ʜߕ9gʜdβY9dΞ)sY1 2fϮyA30vv/UnȋO㵇[_ף렚cg{98u"-6{|qQW ^FES}B~\3ڍqW9u.EON.JPQiy&*-'gMT]Uj痛L+{=9mXDs0*]?+9mu~ynӆ"*]e/+5@}%N$az%%'a(%&'Ti%N$_j{%%'_8A듪{n_8O8QJ_ JHο'UJJMPDr>WR)_#8ApRLο)q=%L*aJĉ?WN9ZO(qG))q'J_(r5Ji)z{r>Aɹ׆j_Iɹ(%sɹ%N$^}%%ΧM8Jؿ۹WEÔ8AɹWRů /W{N{RG&j냣/r_m8Z6=eڲiz]=^H{|,UۮF{&ۂ]h?>zm^󂏤fp6\p0Ӹڌ*OOixeSqk{9< /%Wxkxo`5 P{b Tw fQQ8yXpZ\cFO㙸Ly*tͳܜNnR<>4LٵΒ ϏRi/ᦩu{OX%.>lV.Mm#ؚ:㋌kj܀n9x|oIq*[}o^E\\\\\\\\\\\\\\\oy;^5'<4׼W<ߎxuͫ}#hN7XSgEGh8J{^Q /287(Rgl1\yqgI{Kp)y>Wx~*|8-5۵r Tٛ'nu6vp.vWמ,DMo[`Q<]|7Xi _7d_e'hG[<28VSjJ[Mi)m5ՔVSjJ[Mi)m5ՔVSjJ[Mi)m5ՔVSjJ[Mi)m5tx,^ Ǣx <q>t,Asxlsqp>.@3.E8^Z5.C .h^*Xa \z܀M].yqZi7=Ar6& JnK-M*~v3gE>6o m>~Vgc˼fW0Jc>qcڃ٩^{zɵNmn]y򯣪ylu**܉Z\"omp ^`6_ck15ƿ_ck15ƿ_ck15ƿ?V4|ȧ|ȧ|ȧ|}4#~b 6a9x %TO%TO%TO%TO%TO%TO%TO%TO%TO%TO%TO0w]w#"Dރ883>88,h0sq$ј8 p,BE8 'x A>7 sa1g---*-*-*zP/*5TY6/e,dݒ[uK\\\\\\\\\\\\\\\\ Kܰwr`_s>W V_Y`ZjYIϰ[?\ Ռƃ5c[T<߲Q5 q:-ybliU`s886B˽YqvVgc>*Ur8: |4#p]9<4vKpXmq2}ᖩB[b 9\7}˵Vܮ^\_7ީ-PUqzhL\_;qw Tv-x%2_Auנk/a{<^g!;9d'䐝CvrN!;9d'䐝CvrN!;9d'䐝CvrN٩˫* /˫QUxaK2|_C@/-|} %ĝtx8 w>;;%\"qeyw^Ɲq'b'iO)q 'C}2D 'C}a1g̠AEܠ"nP7T *qAEܠ"nP7vU욉xwxU';s5j6T]Lu&^ͱëd]gvXVlUJ V_dEh5Z Y _~]UpHu8.ȧ=sW=[H4O4oOA>=֭An:ҝxN x;>U,Uj0{kxxxxxxxxxxxxxxx /A}0>Ц2*y% l6 dUۀ*^?ƛSkVjf+񸒽ζ{\ cgVjZe!uwI]Rw:Ljrm5:q.y$kaLεUwCj Y, >Cϐ3Ψ3jL6gkމNJwUJ{ʉ[iZ9qkĭ4J4ʉ8'Cx.8'R'%urI\R'%urI\R'%urI\R'%urI dymx/eī=^x; 5H{`OL^`_#Ȩ3::Ψ3::Ψ3::Ψ3::Ψ3::Ψ3::Ψ3::Ψ3::Ψ3::Ψ3uQGgutd>utFQGgxBFQGgC\rKq!.9%ut& \P|otN#:pj zvvݽSmS)>.C;n o]C~'8/zEv,Ө$ڹkz~Įf)Tw*Q<"W9uQ x?+0~'+xvz-PwdߢrO1glYuC:Y"Nk TUXbU(VXbU(VXbU(VXbU(VXbU(VXbU(VXbU/VbU/VbU/VbU/Vֳx>̘BO jSQt T5r"jOpIW%#+]r ͤb~Q9M@l/2ZV>*q$?'dLI~2O&$?'dLI~2O&$?'dLI~2O&ɤ]ydWDv}Ad_ٕGv|A?Og 0fEY9%FoA%x=-XcScG}WQY;CY'<q>t,e"?)a٘C[%`wo;lHNF'Cq_;z"=OL'mfl6fvn3mfl6fvn3mfl6fvn3mfl6fvNNNNoښ {[('{^&_t+URp=qiz|ןlRs`+͸|{ GZ>l9gZ^={6˩@]*Xs \}6Zs֛/XVN*6RFJژ߁lEQ/`^Kx`;&*~:f0@ RӰ>g#lԳz6RF. S"  oۭ(^Z\fEo(" XkXKPKPK_+SȗdW_[Sտ]ky#c~hp6{~7i9}N}ڃkċUkO nW? E[K}“^t ɺ ^] Ru{au`gb ڣGc[b'TcNӞ0VwqWץ`5}3~?9c( lg!3K/lǫ񶃹?yUR"֧>T ]K?tS~8~Tơ 8|ObCu u Z*g a%<`u0fPٌW;{⭩xĞ^iv7\{ݵAHmGdvڰ2C/UK!MŸk%~'QƄ߁g0܎I8.tHuYm={>A{qv\;ε="DuKz( *\r]BD%.wKrD-GCZNr}AQ(HqD%A.R]jE@A8%%q#D AQA. (5q q1Zp.͸)w;nttݧ>E`o>#W2.׫!h+2S'k%늺Bi 4/wgEq nDA56z_iwUTcKVƇZb+4h֠-5V|H@%D@$J!`D={Krv_ݙ|wf7YB\%׶of9ء* xNu%^iX8V(R8Ќ\WKGz>ֺPM2o>/Q~^m~~Pu'^ף+n]]VD5͠ X|p+hs(zRSpo6α3F^ztݭGoa0 `0 `0+՛r=\.ףr==p3 Mt ڮ-?9"cIFß/tǷ.ݖy$A{N)iK PgۇT5%?J[b.%ZXBR`JCi֖V#RRAd[=ZM=cU2pMXЫ8xr 1ēc'PS 5MDu<1ҏr?E9bzΕZԀ`#>u'`#7-HیEXa\!V{!z#ނ @q-f&xj3z~}[| փO&⭦⭦ƒ#v}}=׶?5H"d4lue zޠ i 㞈%>87I0:`E^628sm8c; JBPVʱ3cg>m}n^t `C7[<-NNNNNf };ԁOA |~hiݖp'v1=Ln㥱1h`Is_y& «b t/ݧvA;\ 2ڰ"5xj$b,3&{Fb0-mQ`z^!&&jhn?$}9 O9lDʱqޣc3E{hib#%#b(8ҺuH==znTgZ&~gz[L8\ ^/Wwfkt5jLYC֠k?vkЁZ~%}^i&VҟX| YMDk7r81V\Co+鷕Jje(Fr;LS+,Kj}3کRddFl' /c_@H`4 qww]k!~ 2g= hv8ҍ|ϚϚfجج]i ppBBp1Е׀k `H~!5pwwwwwͩ݇ @?*яJݨD7t/[MSٺM LGՖV!,pFu$6&('Vc`\B'e0 oY!^=fY`Xeހ}%ɌlVb",z^n8vz=fT_ǎȻVYe?H)۸#\{+E/s{己YD ݚϙ MDK|LzA9%UK`V";'z' OYPHSv:#NDXQF#篻ɍ&L] N5䦛5+W5T/$ʇu@V{2z.`>Z%ԪOVUYDnO/0zkbM)Z+USQxۃhJ{x FSHw#oϧw-fNnABjaVy]ӔㅰM9lSN?(HtMӿz6(s{(L{r6( ʱBb/Xl9[ŖcXBlд\9-+VӞygH'j5Z! hZӳ`5b$EdmY[DQETmU[DE4mM[DѳEl9[DEl5[DѲEl)[Dѱx 9QEiAZDEh5ZDEh1ZDEhZDQz,q0~6hW=6Mc#G#Kl]TCn+,^44ShWOhh

6rf@ sEQ$yJ䄞-<@|Q:pxqq-w|q2n񊈈`>X*"-' .1}b!shw~Σ2. w1]KKtM)eE} 5[+LֶPj6@>#99F σ>j4W9+Y䯳r4*^l|&7Fnܘ9'L29ᜰ8D<@ P"[ ցFlMeZqC[W2t2;畤'9*姈iRڳ,u}iU}kOzQdy?肈eؤ6)M`"9Q&?L&S{&gRb%PB%puWpf2^b%>mrSEDyƐ7ɛ/FD U zR$Z)zV$Eē8288Gk#pm1x6&t TE_#k~NlnۜT4F<G#hz?X,o7#lG;;27#fތ83gF/ce2_F|v1x2OF<')D<>d#P7F#pcL'xi>O+ E}Q>lV$c]lU3޹ftc|FB(wn4Qdc9zir:^q(Wy?GӫkK9UJ3$I4GG9! 7D(pCbQ?G_6u, :8Iv5O?`Q;}G(žwbQl;mG(ŶvbQ:]Gz[bQl=*~R(hGe0BJkl_Ȃ^Zs[m,5sJEmV)ӺnZb-XKi;-KϕyDQӮBz! aŁu` * dӰֳ2/y 0S&ۉ; \'16Zfyм*|(4o,@dOTy @ԞC}G=O5hFYԜEͺu@%Jsb*>\dF9q%5%-:V'Yg{siƇ(9=Bbޝqgy:yL߁$X504&GАJ*o8D* 9QFC"fy6ۧ;D CyHވHYZ= XHUG72q7CŐ.d;l'DŐ,dl7h0Ő.4CXqʓɡm^ N/V:ҚMD]Ok."r/QOlY;ye0Wz-H?&`ҷ\embV7zsPKFZ32ݑh A>HXHE|2e!21rwü($;) d,9)N@1c7c3l-av:/s/ڲ@n키x{',. f]bo|P|:ghm=Σ h>,(Y%<$&N{A qzjZuZA#0MC5{g=@r[gNV jZX:vQ` OxvZn[ SY&QM-uɞm[esLiݜVM3T_jd]=M-i.vS˶=jml]6&UcUi2{F;:QuWhUj V4{[Mv-kdXNMjA2k9 LY̺R'c+<6Iu2v8mcU_rF7u;jU)I٦u &mo=] u{}/o=좶7|ۖ]te,m$BIaCjQ3lja%]K,7"oWn6Qrc-H3n)z{nkOy_\xgٛE]nkNv5[miϩ8`jdho5QCv?Gzpu<ҞS/ mGyޢV$_ we//:lz3ѡ@كK_/1~()Kܩ.ҿ&b$3m:CEאݶ%WX"uW1|=Fyܟ#2MOٝU9]{99̊&,s:ק%*۷ʍ,{Zv,uIojsdS6GW6{=\|ښ*VhߘH-H-vSw ߭޸[Ł]4cvN⎎mld_ԫeXEjtGzߴA{dMJAYo{uJkosQ0{ԇ3y9:x4bkgQE]c8eTvA+UvG+M4_G%6~GU)7s],zǝN^cu5WyU3;=1剽!n ?-ujb3aj[fy~pޛ[yqgơa3u9 QOo2yS̺N>jn򦩱D'َ7<78]5Tug=WrKZ繓ُͶ"1s$9*ŴQM.~e7nGi]u M˻~if-<>_ w^|\r]x' _/ e@աe>I1^&Rƴb)K^/DkҷwoO{x:s#t=s o[om/-?%_8GԆEjA+NUg)贎N YݪA5L~XӼz<9nbh% q>k[fV}~w2nPϚMj˾A[ət}D:GX`f<0S]~|vјZX5Ϩ3ijr֧z&tx3qK'n}}o#_]3rjo{uZv~i~o07-mNaVQ=NM6;Ya)FNW^IyK{{f`ұ SNgf̹\+ک<_{1Ѹ&{wriV/YU:ߛtcaw8UXqb 3OF2ZZ̫&7/75}Am+IFm̛[&@\(_ĝ.q)_ŽYD:ug}O4HK/Q,6WK!vR dʋP=y̖N9VIΖ?kylJN,eEVokwYno寭Scc4;%\/ϴ''Z!u 7Y7oEiiǬc?i_iE o;OÝí,'˪p8Cy1α+wXy|rkssUȹs&XkFMVsSdmwr[;:sSm[οcJ =}lCC\cg}h9u&g}iNh_lw>||a_|>`,00iٓGo `r;wN 83p}oE \b?|`^]wC =lSԮ =!T$L{Sv}hqh9vm!,z75AC)TCvsgڟgD2.ȸ84+4;i3ʸ*W5?NK5hhZA O94GXr'6&NXmѝ5M` XY=Kf׬E?^l Ec\^XOAְ q8~+eX;Ð*[ GH:VGINj9Y<%K,BYq17J49v %N; &ew!eЂ){n%zt8`8Hd?Ght$!2 Br@:(b ɐ8Tf )ʁ0y՚J%==^^yeZӭaai=I5z AZϢyszҭ|k>ee}zG*, 55Z^[[TZl-mmr[K%j-Le m߱AZgmWY0jk5ڮZzڂZCC\Nk7jsK:!ݷa:buWH5n&'C)2dB-dLRLI)#TC:RQJ02&c.QPeeBb}2lo75d ʑ5eMY2jiCuu򨶬'C 5F@<Őd 6)OwOȦ)p:O-8_-:y|7>IކGNF@`8)r ƽ[?brA 9,G>.Fg<||*|ޔ0[r1˷4e]\. >+J]%WZr\C²^ 76ʍar3a|ƈ$5FF$ƈTcDJF~{IiH)Ru< Ya .EPIb,a;Ld'N٩v|mSu;bG`1J8vSݮA1jٵH}ց̱s6΅]vU `)(nh7 `b7{X݀Vvsjm譓>{=p8AP|2x/'eDock(n՞q'7`훨=ɾ۷طRK66?{}S)8|}/z߾;ZMa\g3$35z~r\ʳH iJh$M ɔPwP=!aQmzt5:5l|MaSF@#lj6,:j=,h ِT8eE[G[ComKemmKyFϏOEюю0)ֈ>} ('7mGSXFgpt0|EыKNHԠpf&5Nd%FTh>d^|''Ss*e'W"xԓ'3:o輜ѹ|Fwatetgt^<y2Zk,h;qv{匳mٝgGg['[g@ŌUcT]Ȩ>wr"`)@wc+J`+f])#挰[0.e݊PFحa~g0ͤǠNГ؊i.=E40w10<4@@ P^XXM*E[2l#|[}t Wb+RuL`"M b lEpn0=M3`<90~jI_akA[` ('jC?c+@m ok 1<  'a# :>I2ַKwdߙbInQV3>kFG=#z|B#! Rf IF FKKRpVF+譍ˍ;] !{= ,"1 Q$Q aAp9 H5.ǰˌ(1 ~1U`YGGkI&p&@u<$yHyߘdL~0pL<o`џo d1o d1Fo\|7z3߸F}odыFOodKD$DMDH&ҠK!GD#""NQETYD=rD(X4G~Bq!01Lqr9AL.S x,1 eb6uO'xN<x{_u:|Pxr"&[.vݰQmqP.C5]~2 P-W4WUu\1tW:pՀfVC\]kks]rvW]R;]eWσkifO2˪ VkZ *0F`\oL } W1Vj %8vQG:c6c>+s} nK;vBiGҎC#Z ؚ$e=`nI`n^8[-=h'IpdRV ]]93,+f 4ϼ.es,.[gY00`<ܺźVV0 ʘ%31s1;w%[OXOOͻʘk%3˲MřM1JfeU<*T9s'SZVZ+Ws(s2fM̑%3i̧|f>taegnT]V֬b-kTܦܦ.p|N13Lf8eـZ3i<<Kv2`SlN30<-vbo; l'N!bf; 3>d0˜9O#<yZ2) ̧-3P^?9gwg4Rrpr4ڎc`J^R3̔̔2M&K̗;5kc֔Ϭ~/.~AÄ́}|A5#| <<꟰?+U[++n+<ϭTx(=6?Z?SqeS**n:s~CSڱ{w|ow|g_Պʟo=@pxO,~'UU Nq_U.m?|RCNV}~5W2\YmxG_+3h{]ߧ~+{ϭ;.J*x~/bb,Бps}U+w~e> ;Γo7u:3O.Vy@}7WW1;~7A9iqL?Q9oE8 zs1#Kէ~qw2GVcl*t,KڧLY|YO'6ތǭ] =$L2DuQ\\uD2Eȭ|hJAZQtTYt4G\@'-AaKpKť@q1F+RZ\MUx12 bw-Rxrb(WR]1[ u{YQH}QQAKP?-|4pi+JTW uIWK%ꮚ4UU.i.wٻhMW؟ٟ >@cÑ]DtGm/t_ҫ{#si],1'N gu&ݝi,ȸY,6.q8+jg1Yl48[m8gӸkLt9G nVcd>e)xHETxXUQՌ95|x^ƫ*7To W 0V!jV SjIU7[bbAceeuMq0>st QhBdbyx >A!>M"Z7fm#D4ަuyGHL&RR:GKMuw\wW "rj!rC~QT(KKWk5Fz]ɈT_T 288"caS "-U|y$[ +$NBڈ^2b:q@"CaaǡЋ8r?1Qp4DHH/ Ez#>=u9> )'6!fE!V B#S洧S\3+7&KD,rcRKr:K),sޅY ]$rG=g{:[!9hRO8{=u}WpR <9ηпsD9G#3"S2I5Gy(YG _ 0UWI*jd&ŕ$QQu=ITM%Tme``a*=蚓lbH5BU]W)FnjG1UH=U*dd:RꤺRꦺꎽREqJ>D 2Ga"5Zu-NPD5ߠkrmq1qmy\[ܐkkqmq}--ǵ8k 8krmq.\-u_dm'k/gjgj2SJbT";'ډv#:GW]"Ԙ3u5D_:_?D:wWP ޠ2_$.B>9#*GA?/W"8WENN\_=٫sfw}@C9yg4撳y-Yb5L0WB:+Zr%"k8k9k+cbXMJk:f:<<3xm1Mlj>xxT|<!ǐwA8gt%xswF|2xY x R;vu6OuyS&;s9^sz+ٕLW 2{ gBfOqES٣z;۩ WXtOJ$WMd6Wu7nG.~3ygjJՐ?'~ukkA~oO.\{'BfdD׀ɑ{ y"OQfKT52?2ˑ QWjDDu넋׉X'$7W ӫ48@"5kx=dq_ـU!AXJZ4^j䌟u\uȺݼ Aa(~ t];缟_y߁uTʀgU97SU^ kU9ܶ>95prݰw?ht[Ėe^U Q2F*1|jOU55?1՜jat6:SFA joVhk 7S;c1ʌq8johLrkn'B+o^yb-n\tX{P/;+4Y5XV_6XY>.aC3+t]DD84ui r"WUWUz 9<]94MkL0fV!3DTӢft=~~Z C!m}zژ~2,6[~O[,iٴՊY zcٲ6}ϗ"e}T6~j|?A,_+~?!/29ɱjA|A@= Ql]yo{#WWuu%kzzȷvԨQ6 v@ v+<(tܞa0zسGl{۞c?n1엌A'"kX˾7FGfFfW ZN-ΥΥxdq-vԘq7rruZߵ骮k<[ߘ1va\ 1An,QK2uB]0VU*ӌ5A񹚩f_9jzB=cTaўq ި湓OLף{fa\si%<2Z&vǞ~g%yg7[[Ǜm>m-w]0,oswbH<ظ8Åk37x'yoN}OEe8_\/Y]М\ rwޟ|q%/erq|b_3_k_o/7ܔQu/Qt/-MuM=뛇=Ižwfooogo;ݸvsQ? }uͅqG᫏4'oeoiWoxkPQ}Ԁmd1 q<.0$P(3<|")׿ogfӁ#c) L ?0#h?/yV֡]}ɳKff yEL `,  |f`yKWphpxpTplp|-fT}ӂg1 Hsi\w:b6K1t[Q Yz:|%ؖֆ6ǡCE887Dn. ;#+7t3"gyxp5῅'?<#h?/gMg97ʳ)ȷ+sȜ3>8$=,K4f5q, -8,؇MSPy"v:Z!8 yb'믲=],K-]Ėw7ز,>>, X^7ocG#X~r$Ťkەn<{>^L➷*b-_D Sx/dy GG+økx~-Wq",:La&B|ubXy ?cxoV0׏̜sf9a uDh$" G@ G$BD#DD ym"{àw}_u}{ɹa^{빟Ygew )_=O8T -ìt-܅zU@ʬx ,vVWѪHo]er.b^-K{pؓ2[#=%s=)CK r<+!1 ?v# eH}Idi1kޅ@ݻB*HhXVH4ZFxRH^5PVvp!?B^0d B  )YUA'1*eC~:1Hw@~o[HD#/#np13uƼWCx)rû[mEܽ]kquH1Fjȇ; ßB>ۑ%y]} 7;eXG| bPGo^h%W7S44;Cr3̎WN8PsN:St%Εi\EK)յN+:vw;qngqi[g4}>猡O;>wN{w*SW8Օ3Ǵ_u\|Z;zKߥU9jsV;ZF$й&l™l mC)gٜsc8ſ.@UT1-SiLόq铌;S}g Lɛi*7]M72s}ƌ6cuZ5D3L7SfYd*ڬcOю XogCy%zP[ m[>tFm2XUٞ/H;݌ժ'O =DOn0K6{jP[L/Z{U%N/uTx]~un4b#ؑVyctwo|d1@oj)x;PaU6E%YRgV}QVkX@r߅@bW?D,)(AK>-s-P0έ:qzse?FVO@o1Wkxivx]_|xoz;&Wpy7,pᑆRAztG57Ns bCY 5 -(˦+P†]N㎍|~<>w43bG߉: D-]m2GCOMZE"1l'B_{9b!]ܮ<ސ篡Po!}x΀nC  P77"K`(|:?0. Sq%ki#uniN䶑5 \*3\#۷qc6]H;Im[W|n㉳ [DAR¸t#vYUlwi崫tOoOhу>ya'Q~a/Q}W(^JjG@It7,==LjgejnM;5^=kG>BYtwK%Xt/](hC{ * OނdAi黾O'^ZLm2XUzUa6ͼ3IJۗw(O:>[YMnfzMR[莴[\rcю'EYLMԦx7c67s(*jW`hzvE{;F\ewpBO^|rѲw.CcD[TJ%, C.y aP]:khbA.|'po'#tHy=?! ,ERcRֿ@̫7bGcv! aȼ }S" ^N4͐a504 )1"E1қYMuX~f! tE4e{9K )?D d@?! ps 9v#KHF950dGR>:1j##<~PnAü?PNwֺp_p_rwv_spJ3q֬4h?IZ^g^5 s49j5柴2˜16g͇4)W(V`̍3C32Qo={.|?^Ƚ{)#rngnWOݹ?^ͽۗ{=?F@ͥ[Jn+-:}7)o4o;ްO77(/оplvҾ'L{gҞ{*3`z8zvQ-gˎl±1|fP^'\o2̛Oj(YvgnNoոY;s|4eY>j1VAM'ϕR 2ׇ\s'Cݳ ÇJ3G)*Co/i{6r}̩CA7ہ>```ŬJ1Am|`n>`5fTlE=<#8 N ,3~ˌ=~Ѷ?a?EW*mU89wAz.\év{Xβ'- mVAޜ 7 ;^pA4檂-; B&* WqXx7( F &wbAHps4jW(F!!aᏙ501rI[D塿'3Et)=+VN# L "$H`N 0&4XW oFKAji2\6ul2$(-ă N ,<s!mepdw-R+`` Q`XZaXY4Jxj#$p8N8j<^k&{[~|B:nc ^5w)G¸тV]v3wA~97Gæhb*g}i$ )U/LWs N,@ 3 SX%N责OsXJai\K2~.%l?` V#gt~tt~,rpWΓNOg}z9/:۝_\  E]_7 t-n{m Bt~,; ,{@ƻ]Jw}Xjz;?Q}ם:5Y>h*c5yAS?s^jlTF.SfyOmW/;.uةg,-`,-Tq7wQim.t/)]^Έۅ!cArޭwWYZm^mȽfldsĽm]F/fƅrƅ[r2.ޚ)͔2e28nEfLʽ-sO>24w\nS6Ncۘ -PG-܇32s6˖d?ͶȖ -ufe;Kdz]ٮ*ƚܵ5O񯹸krΎȎpﯸ\q7dNpvޛ>V/dg۲ss}rgwgĿJ⾜ݗ+nVdl}NǁD}=+5w}Ym}9=|ƝTanN'*in*--RoTBɭʭR.j6?uyI׭?Շ/ՌG~GkRRײ]P `:%[uXKPj(êa%$%u%uC% ;؂FQ}-jTəշJ>ʻμ{j |ҁ>q~/l>e_Wu_yoogdLU32`dLMedLM_翖Zy*?#UߨZU=Ey~Z%gj)gW4,`G#UU?/R/?&R*^&EoPww:f{;͵:ռO󁺨oh~SQ_Пm1 ݶlN\ڙ*FbL O" JowRZ WtO{Q*}bDQet}SM7` ajk$8ltwPorɗя(X>DT>/"Dho<#CĘ\z peP>DAp8|FMÁ`Ѓ>oCx0[D*e0V4pF dԩѯ1ыwGYS 3SER~V, zo_ھߟWK(T"멥bo`qը?hDu`?BF"7F#g517 8a&ֳ%Rngf3 "p_]ɾEa3oyA7u{ۂKBy sϊw`H46/F^O,+2`1zdG`!K0d$-u;h{PF_$i7Ra߃BF*%Έ7R&ʑgÔa~WpGDP8ajձGR}xNn,O,V86/I=1)TGº## O ķsI Ѡ@˒+k|/>Y%$ W{zтQhw6y&ِl'GyZ-Ny5nɔ)lOEtY,:6ծYA8]SQ.&MJK LV$+RCRCSS oPmfD1{RSSS5~ԬԼ`EjWZZ7Ajej-P)!)tujGj./u0u8,KKLM}P4uK;ަOI|e uN-A~}a>}SzXzDztzlzBzb2q4=%=_~8J/ L:szczsz[zg:'\>lԓAz/}OysEV~]QP6eJZM-PԹ[QO^]F '  .X]Qͫ 7,,+*TUۊfк@%hf#BfEh! |9%zVw < RDu< H/AD/ + {S2sZ`˚t5# :Jл /AO(`~ >E1g. 3OiBMl5eL]Z0*ba+HhN X>FL&m2BZ?AX?{P>' L(;3g (,ڿ. Q+A7Q~AL3n BA7U (mJc>* ||B|ބ-ȫŬZHa?++ г•<X@̏/^E!XM!^ Et ~wE_DiP#A>4Bi0#Si_Z<^ W<^iHpeb10 _K/RG2mHDƧ )-zȼBcQf&)h ЏaÃ]=<]:ca  K+3aAI1ƬXT@ 7Wp1Z,VdUG(L:Q2pna & tʺ=ΐyVwk#b\N@X 0 -v&+MwARfO?QGA;2j&jS.Ax=4 %omzG)m"#|.*T`{!=+X ۊy[Y{;׈FX6h%#6Al:OSz\Aj=h!=@H˄,}dR]xy_avZ ů˯T)sZ;NNW q9#Jgv4}팥oC1$N?[OJnt'|ӆJZ;[`8}:-:؜4}oJu1= k'ѿk)1'?)CSd&튘SmM@M=فs>y!(s9MP^\`OO2uA3Ny/fx<2o~8;}j;' _ً2u~K3c{ۑM;=JK5Ź_{v?|R{ o XLjA g&U{qz`.}_`m @1XCy_?YDp(=q[74ܳ`fhC 75a?J51{arZxD=4B4" -pU{(k+A- l0dN[9F}_ OxڿetE'y(3G-FP[<p(9h[+ kr~v۫71*9GGfC񫳓pj;3hqDc7[hk@b>犙#fc~D.s<1gE-M}bfbM3mibAPX쭥{ycMAX([b5}G y|𠷡`w,q`1>c`V`Ű1>>k#p[Z5`w >g|vȝL0o cF FRA!x!x?w{Q|zIW@ 5|+i~> G9dc 5,=o )D|KĬ;"\}qHs/}Q&I|=5Mo1'{} j@y<Ѻy5JumQ\M [a B6+k`1} M1RP'+(4"6A$7a~17{Ph9w! Y Ceb:#<"#?inD<{rCvEʧht( Y X )h:#)Zfm ވw +ߡM<#ls ^,~V|FpzO8HNb2*8\AfgN|ƹ> 8A70n@=ZWWr&d2y\EYe )1AOO#~xJVchO FFڙxp}{zyg`t;u!/G-֠E n}(O- l[xX=Cqa#aV0?Ŧ8Xwb=Filq,I,@s[y*r:.3)tb֘ߙ)l0ϐƳ; JN0p|w*xs9!k2LQ$ҝ'~g?jVf'~[E>VkْlwwgXxؐ={{wf(,E՜YYEv^v*cF]ݝS%.F]$nfE eEx`ExfrsrO`GKQo|'7\7\ Si ׃o{>DmsHԫ` C*ϗ||mBFctb4Fw"aѽ_cFfFOiu}_w4:Xx Ck۟nLYP.AW/ ÃQ`|pO09y`Il ۇ®aw? GñjB81NgER cu.Hl;=.<OHEA:JF٨4j:DnQϨo4 tQyT*qQU4)F3hA8ZDÍQm%N_FCѨ::S3Twj!a{_feUk?{fBG i"p"q$G"$pɐhD"BD"BpcDD!B""FKHdκfޏ?uu5Y{=k{ywEbtTuv1nLF]j]nXv]ek:SGۍxɞbOgڳn狜Efa0ګu{fowOݢOKDJѣ#`^ џiC#9q9=>F1S2hu:Y gPjp84g3$fN:SN9gЀbj@̡,3[ 5KFg:\ v9oZ11ƉB{smq8]Yk?_gs-tܞno;lt+ݡfU1׮w=w7sn;N渓in;ǺsKl]r׺;b.wLpw{b^{J\yVr/<ճ>XHKتJRן+UxU0k!iW9ed,rzFoM{3Y^Ǜow"oV{*ofL-oQ^fxGi/ڑ|w}F??9X/V/ fCjg_GcnH'X?ɟ[\?_/Wk(o_C1{?> Fbf/E:k3AhT* z:{A?dX_ @wh08$Mcw"{w0< `Lӂ С=`^0Xb "ckzV1`G9揱`op=ت($8n N-B5TCj 6Kf%qׇ}dEk UaEX kqbNuh{wV366Ϩ pQz'npQTL#W^ W+uFpC9fw"g3U\;mk>k\xPh 'txI9QwJuQY7 ^4DbQ2hD4*c/ZZhB4ɜMQ>x4;kE Ѳh}MG3KP.4'Y^mE[VsM*w{htȚgћѱ;.<M [Moy)acO+Q嗘'$.4V;kh=渟9&fĕAq<4x\<=OaiD<_ϋ:SMJc9;^UZcX+O^[΂xWzB9)fǧEpV|* 6>WcIJO$֒{RIm9s%vHn֤ܮ ]LRWZ:Tgxd#G2,n 6 I?5OKM'oLypsM2%.vvGࢭcebVAoy-FwbqNΑ _' %`l08 7g2m"1rqHF2΅1͈B`ҧ<6*#1;/ 2@Zu z.2`$(69Q-6+Q惐w+A[og(ޔ:fۮdfV}/ıTvηbܓ-Bq(l_`$HT1q12Řp 6k11 F@2"C|.)O7 J J2*yxUWl)1T3+'cgRJsUOȩd|vF!ݎk@g%\@:ǖr4[U!#lakY;5v#(BfA^ak8#=Pف63.,kcW([8|tus- kazÍO` cÙ]Ѡ1eJsܱk/H31<@v @NH ~0e;_aq9J2k%k y䳍 :[QV_| BU.Fn 2忁Ш<YQ|9$ecݩld<G#&A=Sy~Vq-3OFvn' F/ϴ|ˬd#pyF };W0d^DAW$5 Ĩsg18ȳ6Q;AOF|KȓyԀdP?P[23=oi¥Ǝ'H@ߌ p]3^6pdĥrr!dL4;4N|yZ;șz^<gEI`3g-=qa߯QrTAU2-2*\oYMR@2irOw+KlO~>h`nbx(Ia.?A$+WLF)nFx"0„*#hs}QG04opěKQ{ $#)fK}Q5DSH~Bou%VE[]U Vo~RzoUu[ou#V5[ nj8V# =[ (ߪ~ OW6J!䇒~D~(i3`}Q`}"?Fm'5UӥS3y'-$ROO)OOiMqa#e$EIyʅ>^1t|Lc|LcJ& L!Sj(0>NM wP;(/;(ǁmK@+@>ﷀ]H^372'R /)_(6g}xݳxs!J;y le`lC$_O"yC$ |N||$Z=3i/SKE?oe>^; tqzCN\O|U1>=[<$-=U?!ʷҳE9BI/%KSlΓe;NڑӕLm"lBZ2">]f4C8SmEOT/5v}.}WR1+KRƖ2$?#LR}z'TgT?i CB5){bɚ;Ř1+rn w½𰗄G~N³h /ݷv^iӎ;wyWEh.r*oL//)C2:H2l[f/GH9_y绕B>~I:mwBC 9;,#lo']C+>KȌ,jǡ<}$k{܄%:~S/SSDiJrl N"1:U5O(Dd/˷HW!}mȹ@RVwIzǤŏ`==S&miv[8j(o&)ޚ0)" |SM0@ʳʹU41GU;#r{YDrxfS%[J"բmq\OxWh6j),3 ȣ܎qx;(2|z깓NdF9vA{ > uTw#=yk-ٛ/fQN| |Gx%4sl!~j;uE*֊ϨG ԇ (O]+ruwJd3K7Fq\rJpP~ooEgO[UOUUץ+i}C%Py|}s!SE N!u0=n΁}g_*!gr3$S*˜-*}oBKGHy\O9u |藺9FW8g tP T*`' vjF ~*I;IjQ^Q~eSUy PQ#{ds!~{wΕfЮwFNE_`N=I5919#}d.Ә zi/)'O6{y>uN"S>u ݨ(-;jzu;j: l_N-h,u,Q` Bγ=O!S.zXgXhC)/@=sb9Ág?Grw0jMn 27Ct'3:C"}$ʳm)"B'iz`7 {(hLaPtROEy GУGPg#4-RU#ha5Jݭ$/ ^(@+P{TG)G*#*<M|#mpf#SB.ē{+BnϐP m"N*)FFP |}eDs(S/ǧWW=OѪ/d/޷.@MA#$Ocg^P-;sO\wXMg)QAbvn f{I5حq:GOH) wc$^6t/zt2V:o?]P iƽ[-$Ψݠ9bNżӺKcȶ\ ^K^G;s { ? d6O‡`A8h,ۜ_?+Gi>'AAa4VUTYUoqҔ'ѓ$?'Ƚqi:0QLƧ {fêÝ x&N I*{VsahXɈEXkE ۲F/FP4:ִMvwؘXvygE!XsVCg$!Zh/5jk!Pg>mQѧGO }Z7RwN98DEFw)shen&?0f!`3## 8,v9+9uW`:~$p9')rve1lq s뉜k̀[s,f7{#nU6X;NNzwD fInk2EXsV%8nh&"v`"5GXSV{֌ ;^+6= x^3WTea0XW"C\QIo!E+p<-6%)~vzF7Ib̽tګ }-ފ_#?ã@;0ZT䢩f}\EDöF/E-NM=z-c'~(u,:)ZQ[Ċ˱{ȏNY;'\L#4~\,~X@h|۶0>a }xxyJ b>^+pmwZ l|!Q+>Ip~R@4+yQK'韔'IU2&uhQh-l'OX[ 1Lf%fu2=,J&+:t9lNߒʓfnM%(9{'nO'C\GD9"Im&è̠̐Luٞ 8sD ʌɌLLgffdZ 7wafYYl5gC2+̚K̖̈nf^LuPMOXdR99_ [  I* ]98rN z.W0`pAeЂ# \AC יQAss23ƒfMf*g,ϛs ,7W*Xk3dv?0S ڌw f6J4ڌ.ʈЀӁyn1 Hmg?6V97*i ]40}]iOMBd:J9`ʟ@3]9(ؾ]r^@y'2s(_E $|+j8wfQ fӆplb41d@ :>4̈X¨If?[n[׀y#aRevQKs>Ž`Q"onb%$q8p(웺 m\cm_X4ơsp:0:|w̃\:j5|;f\!܄:al%<<(@.e `^ƸuPI !>ܾy0Y=Y)nJh0yhDIC }dzDQXFF5>9OhLƷ#.! @j|;f+yJ^!1S`\[&z ГwB[8^eYodg|cX{Xq[:to:<أ4;X0@Ѫ=Be $fQy1;*~: (kF<cxUcAB1H#B7T>kOq҈ҿƼ3-0og6sZdb=!>!GdX.<"!7<(g&XGd%\ՊVn]KZ~;Iv2 s4 HOv1dX}`>GAGQo_uvf)vuyu vl޸FJ#]nE>`>L̙c~j¦ʂWGon"6|4شt9d_Dqݏ|i"Y<@y Adr< ȕ@2κO /ή,RsʳD\] s338B'|qLҷ1JxI##=uuEv48iԜ+ Լ7z"]z33.H/bmc{ M{ZŒ_YҸG_y̻1:ǝRELy-WqU٣C SkҏB"D](qu߀\:SM\_BG7$Aw-"s■f*E| OSFw.\ k#|8+B<3pJŬhguC'#Ig0x ЕKFl<cqH7<# sm| C2ӗz3?SqTOque*vas|Mv/dAfR?._"~`Ll/e|__O:҆[1:$"29~AEdQ s__G-?]xVQ) eTPz*9ȣW*1~BO'܅̄'Ϥ0?95|OVsQ<_e2w<0'Q!1SKI ɔ,\ɓ|)B)b)2ʬ@cvt!͒fK_H_Zqf?HvV+r|\,_-=kR\&_'7}~Mrfy| A`*#0=S\iy yMy-yX~N^"[^*G^&W^.?/_W$Y^-(ߗ"7?7SE~Y*o%N>&$QvSԇhL\|2ڝыqg\-'ğ'ƟœǓ/SGxzxFx)9n?5?ώωOsmW/+F0d$4,__3X7lK%tjrE#2)JJgrmR\NnH%[&d2&t2!|25y4y,|14'-d7\H92f,|;,~}/o32i-p n,bw?nɾݚIv[ٟewd_̾}-]ٟI=׳{*?oectL_=}7{!۞rsrgrrsϽ[^u6~۔ۜIn{gWr;s^<ܞ빽_ɝVCݪvvoQn6[u7R)Ū4)SLe*ERe]S6(mNeO9(iלOTIYꪃjjZU!jQG1Xu:IJmPg-KElj:WԺ@Y.V6ԕnu_jEJS뭌'R*jo x:5 orE_Xt+K2ȋHa"re)Y#.G; zDpe%zH˕zVWkRס>iFqxա>(~G9~紊R#fd~Tfu~BON|ӒV deqxo 9MR2H* "-#?r!=12l^ %k7U=h _Ƨ1VŶVK-],۶jU|?K"vGoҏ59fې1GP;oCN:Z6/Hؼ%t{{]o']b§g֮Nk$Ӱ9ZG.K,_/ѯflmj μ a~@҈q]$9=P[C>֑Dz$䵸v2I'a2@6M'oGu%$fJ~r5Sܺ~V i 6H/_ wf% )`N\j@m*[ $S!șiP ǻVcB!H96#oTl\xm_η5Y޷WuUy1MSdҔRa FDcRJH)` 0RL#R "0PD(@R)"2| ")"~kI7?gsg~_kg3~ ƚ(]cY93t0S]uee?o`%B:/wɽYd_}K~?+O~???OH~1;Rośx&^oËCix{se>-WS!jރOExz:2@XUخ` 9SZu'\Wl l _Q QW@X{#!:{%4itؚp]tmrj :B5qyt{*X{T6uWst/,8>Fg]묦;bMwNjg՛m쾴}9Mw9?͆Ÿۺwnw}n~W#=[{ >C% EfDss(Aڄ9ݕ4vL[f{Z71X"ӽh;4G%IhxM[ s|֚̈i.ux:ܐ`[."[Oq/=6+g:zymHkM;u*T'IR^ؖpݦ@5UOؖ-5Tfu 5j)oggdZfuMTB@pۑg6:HfڌoǷ5)YC`E\Q샇.caq>1Yls95b" ;p YefqobЎ,d;fTz+{C7Ra^-7}wM~RW@lf C6s,b#hwGLTagVfÇ}ysp + V;tv+ْ^n:%yDs 0*}/q$Iӯ)xuq%#w؆!z\uF2Ti^wMmn8jZ#/×Bšk֟,o20>#8$쑒qh!$c }~]Ի1(32< jqLxZv1+ ;'¾&6 uld m% s\h~\L;]-)hRu[+z{1`!}qF5av|eÏ~ؒW2zT@ѹ~{ߐs5X—XSy6mU"h)!tE-*TcQQY}];<]CG}i*x9768e9 [Cp (o~YѻujncJ)U 7,d.}GVrwsحvNpALuCL^4q#ew{UL`4ָ^3[X9LVܢksk D.xntqߓzJ4j ~sz)fݝlܛS"1m_"'qspѣ㝠k!l-J_=5Pw/4+0^7͊(&P)㘀DLu5A '$m sm6 (,߸zPvq9XdCnsG?x- {ۃnQLeon+̩qm(FbT(OP[3~$ \|tP{m:°.j>r*BމЌ,ڢ9u3BP])um)0v~ʵUs{CǩXЩ)\`42](H=Y=i7_3 {qP3aO_[- pCnypAK qSۣ1"L&fFQ9Tg{s;Mr:Rxsx3yBx;dtpwwNsT>. ׇZi/#H= VFR, P;T)g(_MYޥ@8)'GGtBvd=jpd7,25/T@w40\"|UGv h«W"#kuȚP?Tc ˜4>U"[ tԁH3{7|U-DZX[_M(QםNft<z>ѼȨI #hwtTout;J ,  C!ZofdTt7!:MX:NAdhh9]]cEFFw^U$ V{M9ÅްpZ_pEz3ntU_9'#s< u ga^TLdضyf%Gķ8sBly 5[Unϙ#ędi0d[B&!A% B~ r!:^+`"FCϝ,cr@#NUҐX0n}mu1Qy9*ʜ8(@vk239¡船>r _l"!V6$soo@i j"kHi#=e 3R96ϠWegWdV'uk̝L`h1OxN 1Qsk2t)B>9*>sUqDgKY'vӋ~X3Y[ N|y疙x|֗afa3g6)-D)h+ا=8pQ\ab,9`BR쎼 }zyUȠc^ob rB2+e|#iB}& W,4vxu٧o{re8ا>aioUj&:jاQa.drPOd0PqPSnC].W.^(tápN83l2^^٥W_ZsK—#B3HGb==EjPO(2:T ;:4SGFfFkiP)<()\,l WGvzO:'r#tTQ/!<ҚE:F&D+â#c4otkt@tf̊n\nN |њ+Y磗吗e4Ct(EYEYCC*Cü A7L5(\3DC7fՇ&sw%zYZR$k Z>k#nڑ't>Y@@f]LQgǨui&=4tvIxxvY#nW6fOezkg>)maozY\OQJ:m싑Yv9ޠ9EVfIksj3_M.s ZPM2CjG}lf/{VNEV~&CtWЊ`,gvt0E/YsVknTr nʜY =YfU9޹\zB9-:{InQghEnwoPnqvA(+OtinoQk"ss+#5sGy6Ԟ6xўh3Hg]|+w}ȣ{?ts7M:wOnshvA!C9E:rLHVnQ̍E"GbA}!B_PXclκ|ѡ Bn^"PsG{ޓ33|AGKcbM#CZsG*5ot1x9گ'a[XO]5k4sFGihCGvYlѹ/::=guZsFh;ʢω'5_tVxV6jx9Ej¥jб#yd| L+:EDX;;?ouFsDG K_-ɝHLĘ%:#+7>*(^i~hojbhhhs*1"Un9Y43t憎oLJw%43fNe>E j>hXmtfFd_>YHKtJM<]9scc 797\\B#%4wfNέ|]}ñnA<`^jP_Zӆ>kp>!ivh-˜@ЬqR@a,d $4cf>v|gfA[ ZGR IGeˈae ֽ5s>m0Ι;96}'"49_/-g_:Cr;Az$ǛuϽBy am[b]tA̾m3sBnT%xмYywY 9q.k] =f$FT\gJǤ=gmo) ezq̇ȶ'OfK O$a]b33bquڰvh0z3mudІx$<[ {aRࣦ"ݓ)Ԟ15OBh l;c\vγ Yxqpq+D0\Ǹ$1 0'jEF4B<%Xuk)5 u0V3\k>ַ1wbWq-ƕ`%ϓ[~[qĄce /Z#(XG(ܢ,. O_\2$:a)Q/gp:t{qlV͠j(Xma,U"u/#{1 ss7cqtq!'Na܀́6f2;ޛޑ 뉉^ߟs5n%;BlAbֱ܇v>M/y0sۖ/E0JG9^~Ɋ-)kLM9ٟ[ȍ"{;Ag#H|Fdv}xG0YgFI1r6@OAkf"0&ĝ+Fp_Gij{ {sǷVu+ePr"r>uHm&{?c nj=;zv^fjLm`oƃ0Umaj{ 0E± =; i=K['h9+h1/2$C^2)u Hrdss?dER*utL> OB<y"/; zQUM TC!{ADj-' IowW㣓܅:/C=`$7Mr._/ɗulaoGGc '3o ;%e?V]G>BcOƾr+?G~XĶ/&v'^J4r9Jbk?KNhI8yhzGzgzWzOzoz-wIל B^9[~zjq̢7dԜF{ ڮZt2q5?c}3-ۯnOy+]e%V,o( UR&G e/kd-JrEqDCB-\eήҟ迦 r[NY+WB@v0ꉒqF@ -h0ݖ6c&dkokfD[يml<1ȣ!C6f|<~՞TpR+Q"[ۊУ7WeonYAg/ĭ/ fn={J|[??(zN?QK-0K׌fj~zek-%}oYf0f譩*[ $6D{~Z[E%򭥭{vkiZJߏ<[xmxkƻl[>DDrd! 9m5 %>\%1O㞨>YfcOK-}@iѕpA !O~%*뫿pΥ.!_">,ԿbxD<*>+>' $oRG Yt#ׄAOV8lXp*rL߉4')ºbTOQU( QFKPPSb0aÄg&r&$_3"%nzf_{}J=ғtU!+D!bBJ#I)Ɖbh̙z1E&vW9T sŷޱMvxR,{8k&dd#"eƍnr!cL{: y<%V-m24nSn% gA.ddwb@@,9m'>?vZ`T:zy }~be+!@e:==͐![ Akv/I2x שvN\7&aeY4KW G+DxnPnPA />@iћC4xGnWT*7+E ݯAeZ Vwq$ωVٓ]I(^'\^n'tLWTD嫞DFիjZ˶z[eV5֪E*k:dʎEvo̮ڵv^eoF ۳]i{PM1vȶmWgnmwrF~T`[Z֍SC7]uvҎWep7^cRO=-^Nۗ:nxi*:qdoc| 'uܾc bl~/_^{N;*V^}{ѱz߾'vvlg>Uz3ܳN,RKwܾPNaGw>Ա):9q&g E}_cpS$'ӺQ]GIn&]uX^SޣKV{~wy4&UNimCzX]bj]EґcWs1 \9McePb@-F=KR ZLOH6%|9\~%~NQnK,m5ܖxE(ׄe7QAnKN?Cݖo1G/Qnԏpp?יڈA&bTt,uE8]җ+%şnӸh~qC[֓Ρ?0O|Y4RohGSc5֡XohfM,^~W\+(Y|N>'Vr%Vʽrlb<@!yH-E<-ʣb }Ŕk>gOݫ,}}㔋qP=o]ڣHWޔ++ߪʠ.ȐzG#Ø qc˨p2 :AsNXNɑ9!0OK.V'ӱLffɂlyk! csbsm(6/:_~O]d_%~KR9/+tʯ_\!!lcq89T~ßO I"xxW5Xs7=='wRCէU]LΪ*>1>Q kԃiijuVſThNg5:oUc1%TBS&yj|K|']5A=&N<OMU5ﳚE\Lz"q)Yf~~z!OYwE"֔t^ښ59ljfkzV]yO[O}?Ll}Q36[O=yۭy;vX_۝ۚ7oUl{= kA;yXʻwZe`AַTvveZe\q֊.Ler.SLސlJ~Aֺn/Y?Mz&re)j֏n)!7uFN#I('A7-f@QO uk ;t Bq4 8:u3^ܑBUt=L\ '7ʏ wpQ\.+ >uq} 7 F;q[q{NAx :OJ(#y4'm2ٝO|~h fǓ3  r%r sr\$آb@-jMYMl89q?4! Њj\!&WC&| _ד$?Enk: F(BbF7Za,%& Lj&чf]j4K͑49\"KwyZZl5JKsfyѼ,-37mh%JkVl%KYZUD*f6Ze2f^fuX=VGkҭ0i5>&#8ց'm>A!S} t^g7bwx( 9tẃOSȄj< di!Z pF+QpGPVw,B~it5 I|d?م;FP*;%8w2 p Kup#Κ/Ix^]o,e7d$Gi[-x'އSu|~6EdRβJiH+CѠj iM:d  L#b!K'{Ar#W*4@ h#*QFu*8-GѺ4iOڟit Cet5]G?[N .ҵt|Gizf⤐rHbRTE#5z:sH.Da_mO.v;˝ {a]nO.s;˝ `.'t ? ΄#urG w3,wz? ezw#ᬻܙ "w$L8[yO_ﲧ늧몧뺧놧+uuuuuu뱧ITWy~n:"$+B"RTWD(Q]HlE"ꋨQ}@T_D"H8+GuExTWĈXQ]H$+b{DTW;">E]ՕӕӕӕӕӕӕӕJtttHAO_!O_aO_O_QO_1OWqOW OWIOW)OWiOW++s"ϹR<]e=]<]=]<]<]=]U<]U=]<]5<]5=]<]=]u<]u=]<]=] /WUUsԼހ/+vZ}Y^|_W?O%28'!0DKӮN{@֋/>ڗvnHtJ+a y9|_}BBb0A&:HKAkل6/f9mA_mMжmO;@Kډv]nr/`üxwzϨw.K#wtsxkvB1^ǧb; Aw c2$Btp/r/%_LWzWF÷r!Χ dS4:Π3,:\:H>8Dяhp9hEZVi-Z֣ hq 1W.7=@+J D6Dxdb#bW/%% %%:(4(\(g< Gs AkP3 @g e aټ÷8p{$_szvGlA l=vCYaPZغS^غ\p q؏Vqk8q96-#',8+d:Ĺpnd{q!\d?q \¥qpme!*+ *&k;@~87Mnn%­qșځ;N3B=!w_}+ x`<\0<#(<8 mґt_7ҝ =I/}/|%H2\ CP2  GSCƒq$L&}<$/1yaSB)@ܡXG U xa yXP#b4+bٝL cnX2 2?3~ t6s\|(#t!t1t)t9t%t5t-t=t#zzz%8$iX a% DŽc!YX Z8pD?ӏ')'~F?~I_ѯ =Sow=@?3e}<8猫>>iU>'|gY|6yu>/xe^WST>O3E~_Wwq͸n02-q׸g7G/c㉉LlMff̠o̰.5LӴ3bڦ0Ylfv3e6"fQY,a4KerfYɬlV1f Y۬o60/fln0_2[f`v4;.fWݪiղj[u筺V=jh`5[Vjn^ZZV2VGbuu2]d }cn?5rA`k5f w5mZ4Uk5hM\\\\\\܈dFnFnEnGFEŬĂ 'I,X,bbډu/5F FL|u{$2 -wVnG~n1vw;r~rNn0.k:xKq{پs!a0Fэĺ}me"D~$#"#Gm)f)9󐩉+ى6owr\)LhdչW4d)^Ǩqǽ^efyZK؇|YŬjsTάaU\vN/"=*@?lλx]j{߭D䳿q(J+EGJ'(`( /&V$]7vcI(_׍Oxh'q`qhA 5=-ۢ௱n&Ϣ u8 |Vo96nyk)!J@s9b5ks9ɜlN1s|\le.z]Z,cQZiϛuz3EvDULba>?u5{oQ ډvh:Deލ#HyR$Hu4$ x҈)if6zt b2LDo]ĝYe;Caw# mGڎ3 @CCgЙ!BO Ošt zxYxг鹰'IXz~ԋz1έҫz5..[ z[+nf}n n|p}x~ooS/_e|9W5x ^, F2xSF;`3&Lc{H.cAjXԪAXSOtk:Yn- McsdU$#rٮg# $ %$ݑǀ/2>Ovv;~OA#=D#(=F$=EzL4^x<~ O$<OS4<3,<s<: ӉtNGБtMбtM>O_ |gÈS2aitaxs$Ro>2Ξ5ȹ.C2 xI H$C b X~?Dq#0 t#YFN#F-ͨcC9fF d4ڢж]Ce:m* mWv@JDU& -K <+P*y[\y IJ^-9x>'C!#-m[Z[ڠ[ڐ[B-e44Rp˖-[.lyݲwS-OQD%LE( P]z类zz8jTk5jl\6A{-PVS&D}wO(5)  8xgmQ u(s2 (BHBs!2Aovh#^aA[ UKйg}}jMSP6*{wT7zv;W'⢺]]9\9]Ź\Ź]I}HS_F-_Έܑ^Fw%TKhrv`hp/Kknu{+#D*$z7M,X?xz)r$ *p yT+f8x}یN -dJEBvHCYBYCCeCazT=VϨzIP3՛=@}ܱG#kz@A=S'ԓYgz^^Q[mza9?&#Ab=Wɤ\)k*v'}@hƒ dCd5YK6dM9M2Ur<*%i9ZrWmigړ˜AEt)]EutBpўuz>#$]H٤$TL*-UIuRS^*KCxi4K/-IJ:hNit@:"IL8M Y9d\\N+5r#Z(wXyne_Ogs`: d[ؗl+kpmeod}l'; ~Ͼ`{?oK[!x}<q;<~b? ; <ˎfǁ yvV x^bgY3*; v.oK[26îk{:>|G v9G1 bHCe Pa>g*D^_Ƙ*UUT>`PƫXHª Uhj@K x`D m5 LT90j&0j jSṰ&,dGcq}Ҟ*bmc4U{=hO'S{~~^j^nWk{=aGq"M*Ƌ b$&8PE@h"(EH.0), "B$,"&"%r$G$"/ (,xN%DIQJeD(+ʉ򢂨(*ʢ}>og%}žj_7L}˾m߱~l?H`A"|"FĊ.j-E]QO DCh$TD4/fh!^-E+ZmE;^tE'Yt]E7]=E/[,WD_O@1H CP1Rck)'}Ɔ5O%B38_0L!&ЯWJ;H,-|3(NY($_o@~H~' EYYa(UɊ+ٕ쨀R[ )ݔnC鍊(A2BJ\J)YٌRJ:*Q e1bJqssZOoQu%.>5?0H5YUG봚Z*ڤuѺZo7ڭ1GGhIh6Uh "t@[B}}tTPӶkqvnh)vhѹ Rdxt1Mt=+ Ce``e0X?`` v v1^^868 8bplp,f`VƷŁ  jo7chQ;‰|:_YWMOF禅$teySg./K}rBJjZۂ<;7wA>URԠjB͡&WRk@i6S[ju:\NPsԅuZ]nT7>ȝA-A V K W _Hd\JV~ 5"69370802XXXXXH   \ \ <҈4]h9dV\KsVWk5ZkZm6\ g4mP[Vkkfm[ۧԎi vK{DA΄P f _H$*ZPS-m=}#O  . . n n O/Kq s'/_)3g3ca|ǧsƏЙ0~uڧs:YC_|:gtuAgК謂9CgG,OsBt@8 Z>5Й1P[뜁+%:k3c`tl1z@MO g^3#4}sQ_/Wku&}=8~Rw#@Bh 3^Ȁ-eee0`D+۬0^+&2QLYYE.E|Y YgAH^Aדg (8Spr ,[Mٲl&æ"b[ʹͶͱmKm+mklm/۶vްelmll7ll_ut{jwC"d{dlo//ۗW;]> #ݑ0;#(rLvT9MG͎O;q,v,qtqwxñvfW9n:pq|_+L/): Haqaea]ac /\Xp:ivqovik %Uuޯ>/×>*|5oooŷk--mmm||}W|}|w|4EKr54-kZfj9Z@kڴ%rmNۨmֶk}ZvX%vS}?o;?/WkqLl____Ϳǿ?//ooPi)` @,P K+kM@T|gہAC0+h:`Q"Xl >\\l. v7{=`LbrZFV7!% B;BP]14+xh^h~hahQ=4261: BBCCB7BB_ +pV@(<9\7 7 ?~&8\xYxUxmx}}=#ƒC$#F@(R4EfGE<Yy.,*6޳1rd{dwd_;r8|,r3ENko[~͊h ZEGEGFEۣˢїۣC@\brZFV71%ˊb;bX]16+xl^l~lalQ=42&N>]}"v'uD|3/L7L7?|=^Hz(8KǡIO:O(Ze' 3Lг - Ҳr9 m6xr aZM@=NtHLtHLgYBp9JUE;lgG?P ԅ CAom@]8.ǜ/,~M|{oE󘹏@!qK< ޿G}+W(mL=JG@тQ2v2O)8?eq b&e;눇ysQ_`s+_̲]?[{-~u!Pǃs<838y$ dmbAe cD^7W;f@B{%%P2x=etԳPB݄ u mPτdҏq$1'*msݪ}F{ b6NSA8 ؽUaeyzz&debikt2r$W4Nv@ iД \8AvV w ?d~TP, $pUG67O~oE};Q߉N7!k_$l'm]'5%.wNDxVe=(둩k]_Flaen_D|_M q߄L{iiDTDIdΏc݌̙YҠo ZlAE].+|?$pDڿh]Bh%FWp\8HgW.\\;6D;aNe'rE -_WQ x?.껱ߍcWE~!V>lÞ2WE$^RD zV!y=M b_݇1AK%Ƹ'Hm>z9Q7^zgCrKe’*ms˻ 81ӪiR6^_>Q}#)u xz2 L8 D=c6^Bd\ b> (rK͓4h2Q,E=_K2Opd6 $Yк@Bh-PBRWlb-h]mO W-j!v)hU.wnÃȖĽ0 }ZpJp`? ^Sg (4|$yc^O1&la c'{O k 뽰 5k[ 4J| m5jjjj2xXa<,e `q`q`q`q> '91HAB bhC"\-a8Vh)g 8KZʡZʡ֖CN9CN9CN9#ro9Ƿ[-s|9moۆ!moۆi >qAx41SɔK3>d|{ak#lmV6F&7&jB&joMhm7OO?< x=_GDlx6< G`#! =_d" Ac?ɏAc$< 3h;m¶*$̅m.l ¶<¶m.lkooooHk S S S S S S S S S S S+k}¾V Za_+k}޶Vne[[Vmme[[V t¦AO Ça1|X Ű~1^ 66jC6j6m㶟 {6lc?6lc?3 ?3 ?3 ?3 ;aw;nvv.픫z ×v.)vRhX Ka)d/쥐B2/ W ]VȫVrVd,逴H뀴H뀴H뀴H뀴H뀴ĺYѳgGϢE=>z},١{) c^O1>}?kc'{O{ ֧>iOc}X@}[o m-зY_9+g}嬯rWބ7M{ބ7M{k+xEB<.Wws_vս\Lp?oœ$3n?> (?/eL*B= A= 8:-uҢz>AX>tII4%+<: #c-󥣎etx1Q̨c٨ccCR*s8Z8S T։+ zW/gR~-%CE+zE Y Dd*_J1# gNS\,┧Wx:iN5FsJ/mWMHbƝf:pSv` &'qi#`8Yk%BبČB~MLbO \&q;?u)u?م~XVk} Ÿ:2ԛθt΄]u e*]Ҍ!}Ske%[a,b&"+b)JKԛَIs87Tz(zCڔİ1ؓ( SSloNs`_#&5'3L>Od֟ c췁d^& bn*{('2.Z-tM+v'q7 ^c;^N_ruIa5D0xWZrZn1rG^}7ө SdL-{H_:lgB5+!KƾO8w~Jv(!h\&r_l:M >Cl*N{܏=/.DT!u׸X*俎b(by ^ON³D$18)ud; ,6zۯbqi*"Eԃ6O;%]qN*雁c!ie_E%c,ju1u$_cL;vJCt%K{r%J%]⻓tWrV'9}r] 0?2tgIx皔RNd ۍ{^}3O߰Lِ%C/[Y!1vozzo9.ԏ>ɘ+ O8/w8B^MF*b-$?L ҥ Qey\瘊X>bV4|')b,JY-ƉJ|OW3ȹ/U.NE|<!:9/D>럕y&'ӷy_g|+짘;6>!4GVT/  IbTϪg4CCe7J2^DV2u^]_~j ~QQ1d +ˍ%eX`4NUVhWKqʆq 'B~'v!j83+HAߩ+"Y2'"R=d4MUߥ00 >ϚNk}bcd`ߣd {2>ʣ?~Ky<;ʜWN*xG+yה=&i򏦸(?>1ƂFANH+ ?Ǹk0>˜Fd *k' T' 4',WQQ>a?SL A4Q<25q*O+W.]ʘnƔUWƸc<2+/7F#&QY³v{;AfAyn"MR>g=ٌ.zƤD#D:LgU_&||||N %T6S̘a?b|Ob ͆*O[q7S?sw%pXrSG0^Ęf5:*Bz,r 鰰|+ɷzVko]l]Nbi[/X)#^o$.(p30-S-hUxp RyH>}藩P6=|F5ښm V6ްuێmmo6/{miS dS+;E;匝A3㠼pb󐯞TN/ux^?/K>{i,xO4Ƽ%>W{G|ѸnhFhRyV#4I#4E?OvC&?_I 4O$44Fr#HyL7Hc#:)+F7x  Ѯ$ Co|!ZC4nB{!C4*pQS!?Ô/a\ F%$&BFފGhވXȝhZFɾ(D).Q[1JD<[[6}C11ec D;'14k⑉ωy>,ʡBQDE$r@ё"/,yzӤR*IM"IFN¼>$+d1i1M{{bA1Ŵ_B} [%dsɼok%Jh-9_r-Pj*֕WեJ/+RJ1(_QFTFy_F}YcYK@UFscٮe_F1.YeRd/a2m2l2ѓNLw2ɟ|\W+9 |9cpv + wEbrE *NJu]+Ȯ+h|UB))طLiBwʢ)l) L:3ʬJWF*)+W.m{*WURV?Wޝ>*SyȸdT=kS yc^(hyc (U4wTB\Ec**[Evբdgun~fTzS.%_}Q^\PF/UߨW=XCyYcК[CW [Ms͂fU5jՐ5$^-YkjKkkgί.vOZ34W^S{:G:YG:Ե׭Xn_ͽuBݵ:oF\2MV:~i47M#(uNۖ۴=N9m4ic(ӾSZ}U}}zT_\\jٶ~SOb=ɝPWzϧmɶ锏io5 ?7roν37iN>27ܸωSc8&񶄮8wz;r83~&w1g[qZ &eW1g Eiln@4<Ӱay;4PP9plh@j@kR#͋Fq氦y4.A {#-i3rA{7HA#5 /3f<:Ǝ׌e3w_w ƌI*gWMJSN:eˆ&Y<1<DR{ПIIF4g̊ijx̚HMZUun $W%MO+^Y՚&xlIQZ:S?L7ޏpPG3U4~XwSCFIs鬙d'v $?[xb| BsRkRxJHX>ɘg.CD?Fw2n*h `2߉ı.)ҷk{@^yDsAg:~0*O:$foԩ=o" >MD=T,a rwJhw@ƶ339VChOcHDs>Uq-swRp՛ӞRcGٟ0uFQ5x#/ƘMˈ9HVQy%N摶g>ARe?Y$-C|&.ޏk240:thHJlJj>=6Q[̫QkIp<5%W'93hjn91Lj= !O[[Fc'g';?';0^}Ffu$y)ed>M5)%]R虂lU.-1R*jثU|Ҽ2Y"2r%[αV9ЬGs?d%Ig߾:^Ixb.ZA{د+ PP]Q[+^p0d9 mM #xhomyV es'>ws@O`l>,.!e6qxN:$b!0Hl$)I))߀_R^kf~fß'=Lfȷa;:Q&aYS7qLJޥh (&@ZE$y>?egON-J?>/,hUV$)shԨkjQ OzcCX|"Ģ (I@SM-#[P^ir6O$d_86rکS[hyjrxg,q!F폖pn:֤7<x,1e{1O.MޞR;>UFbH6rTHmfSIҺLaSvR4?1*:4NOүȹH%Jؼ0kZd^"T3ŜU%5O ꉧ.dk9F%եaD(3`?s$@Ȼ\~47 #Z GI9"XR %z+rO6/̋wE列lj{+kz< ܷ\ƚ"OXGēmsҳ\l#{փ,gr?zRtm61 S ׇqK v+!R̖:|#$z^ͼ|Sa ym'ƴ;aq.׊|-1ve4v-QWxfwfk$H@ DJZ*<[6`Ul4ZjŖRRADJ-*<-j|-_?{&vv=3gΜ93wʠBE> VCyBbgj~>(=GʧGX>3Y&[睯ufq5R<YZZ蜸QpZP.,?âLpi/E> }DĨ㶞#̓[$_,t~Zzma֒WDD 7I1?yefFVFٵ~iN7Jd( +f+/6Ҳ"{iX-IE~ӄ(M:guj:R'boIdz2"1Sx""U % LjIR*,${ Bס,jC=;Lo0IxWJM80arOsK/6)ao,:\ZԬg@ bOZ6 t 5=TGP1󊅼4Ϣ{W9߳Ӟ˽Qb{،#e9B:3ggfԗh.Rz=)\:AkB{bOMb#ky[}ڬTe2 >A@{Ȭd#yfZ!ʢCeR=l\R&Oh6[径TJ))'e t:{4FSZ7<I([6^pR!,1[@/6K$F%OrfO"M'y-TwCE<2ӲHЬYܖwqۖ# uL%Jl 5p(jDLvK;@Ry@P#vx-}QP[3)w4(b]ӜT\nOjU?Rb'%Od9,J=Wޗdž-}PY=L@Ran HgY,5O<(ﭐ2r+Tk!}waʹ,[`6<ҕ)5HɁ xZ$e ?>ރl Z [4h~么 MŞbG=7/a;p9Pii׼>{OWT 5i Ͱ1<׷}:Tg]$WmzB>oh~Zk^R({AS[I乀SKa5ߙ=$mΖp/i*-s~h \A5tqQhϐL)'<]۶^'| MzY5?lᣟ]Y"x~%zOh@ng2SMLvN+ܛ~?[?"IÌC) @n(0,/+WKzQڬVPp8b{/B(<iLO{ѧaq95f}<jJak8ͯJYnJNՇ2}V}\>YǏg245H4HФQr4= IVTx-f^P)c i?j$栖Zq-wBoMJA/,)dG!Tțy[Xt9kUzIBw[$|yEԙМkȧw~Ha5qmȶ5O?ߙ^߹P{W87ܭNQ4~C6Z(ӺATR7JCY?wȧ>.ʀ}4>[㤻(+ Y )ǬK²~oB|'J,]gQk-o&vXcgDi |u s¤k:e3@+,/+Zs+`R'[Ȋ8s;QQ@D#Dn<Yk*skX#V5Zh=Vuƶ\:nrNSv8uj4;ghctx\,+M;Ƨ볬YFeUgݛ kEVcnk&$&,L^'|rwc|܄O <9e*SuQBEAdցuיPhL.@={=EE"Dq{ev3J؇(޺_8zg#qx *GQo/D;*&H/ԇl#P_DP?D%gSϢ70j*tD= Fd;&Xˬe(fm z{c(eOlƮA94{:r''P^.K@C·(u@t1xs'1PWԍ\@.@# 2uG=P,bD/cq)Nss>yST5<:Dܚd_cuxWF؂Z9j\^s//cR1BƬW—[3:蛢;wܷ a7=;  }7A+J?VLUZ1U" HJNiF GieX0 '%x#ŀK[gwţnAj[vVSf'_H6탴~+Ò~{e}<"^ 9g ^gӬ7wCxeoBg A,Ȯٿ:h' UAhu ):@km/Iо߁&6 mVmc4F]ʳʽD~[^@7/2x=<g|n x]ǿ*[i7—ZgG|x15H Hs.%' ҕ ='C =Vo$*i8yGt-Hҷ|%[I+-O: = @z:H;@n&s> 3x~t#[Vǝ\#9 ݟ3`j#xtt"I׼+m кh@GhhmmAn=.gA ~%!'%a/?`؋v^γ  BGMz_$6yЊv)z3Is;&oA]Q ]P~Sςߌ І2|9#;<Q])F{xfoQ&ppFT.ܩp+m ggt\)w(ǧt;Okt+O,yFW1G m)`$ok @}>+GFRo`1;Ύ9/V8ۀs+|pnS8sX4\ALWC@к?fȷ{_ q3?~a@? O3 8OXS.FoLŧ~_K"Z9{wKgG9t0Z/ĸwo woǽw_(>> RKqRtI~L9P@iH1:ӥoFu^|5ZJWY/ ?JO>޾6ٜr;1: \?m&QIg蝀Vq9v0 tśfaO@yuf:.V|6[x/6xK;M.l9d$N &^%1.{ fq {|GFI/d?,Mld=d(٣Jt%ңp -y8g01H0g2=No94O,nIiA99YEeidQYbXI$zY[~d(O|dS`lxXY^=3"s#sh»rBxy OE6G"U ϣy .J!^gےmzzJd%rdz//f% endstream endobj 614 0 obj [ 0[ 658] 3[ 220] 137[ 494] 142[ 271] 145[ 531] 481[ 205] 484[ 205] 512[ 490] 882[ 554 554 554] 887[ 554] 1499[ 483] 1829[ 597] 1850[ 645 603] 1853[ 557 539 460 580 496 550] 1863[ 552] 1872[ 395] 1876[ 532] 2869[ 579] 2878[ 728 728] 3025[ 688] 3030[ 505 639] 3038[ 605] 3082[ 593] 3397[ 747 747] 3404[ 747] 3407[ 749 749] 3410[ 749] 3436[ 494] 3440[ 494] 4666[ 415 415] ] endobj 615 0 obj [ 220] endobj 616 0 obj <] /Filter/FlateDecode/Length 1891>> stream x-{|u}5a"6CC((HCsfC(gPTt>8T&Q6NJr.1v]󋊺BTTo9wAx"BtGC!I(_!q5DT)]BT7gKg7dG#b#{u ?0!J|CV@vhI9ڐZsa0r0"IL0rj .0f0&X&% ~hf%M+F3tG3Y֗F0ۃ9U Wk3E),О-ZK ډ%h,`I2,Meƽ<VUٰf|}sB ]T^\j}<|~;l_IAݴ6{t-تm.@(;Sܩإܭ-~J= a^վ UA7w&pX; {GS ?eϯr!iewڐ?v©bS8.3;)8ކn ¥r\C1'V]a. ANkC9<-CynTw*M*P:L9PdMB(XIIܟF5E뼕4+C:5j}ۚB`5LXA/A )Id_Ӑ3!1Id&IS5M+BprrOoh>T je-8LoZ7Z'rЍ n}nmI H}7}! =)v,ZU0 [ z~@,(ڌf?Xv3z!-ѪKc=4-r#{A9S{A;|W| 2IL^z*Y^DAFz XM% zBZ -}1g(:8"WpG^>%BFwJl7 NLԴ7"M<7 AKQi6[@px{y&VR*Zg^+L0yIoi!y?] >> startxref 874816 %%EOF xref 0 0 trailer <] /Prev 874816/XRefStm 872720>> startxref 887317 %%EOFlcms2-2.12rc1/doc/LittleCMS2.12 tutorial.pdf0000644000175000017500000175115313775114656017321 0ustar martimarti%PDF-1.5 % 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 5 0 R/Group<>/Tabs/S>> endobj 4 0 obj <>/F 4/A<>>> endobj 5 0 obj <> stream xUn0 }У=̊( C[ C׼ {4-Тmm'/GR_hfNd:Z, ?ZI8Xܱمm1i6};+&몶|b I>D˶)e't)]y~־1/Y-6oQjgX|)&sck:)iP,ƶKL^2Q)#6bra:@*P 2NTƌ)V妪 C庪}y$KXeEX~MC^fͲJN,9+exe6B-e]m vԹɯ n.伋$Y3^j"a8`;'cXLN)8_ U!&_#A I6R|\{׀!6F$PZ)Hc)<8 ua_ELf0\ 4A'+!)j\zB-"H~H2K yeA!) ]m endstream endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> stream xy\Ue܍½tAD@d( ,QRbj. 䒙F"ic՘59N(YY[j))~1Csvz^9{sC8B`FQҦMZj~miiiͯ?;vL:5<<\apb4w^h8RYY{r.ŋ_|a5`23353חzp[6m܍"//P@^*jʔ)׮]$jUWWO@չsGJmu?"\#==V+99YY@­L' 0O<͛7nTQQR{L&͛kjj\nTUUU6m4'N&$%%=opg{zӍѣS0LjjIKLLR(/%ݪ|}}n4MNNTiESĉ9Z2[t$F ;v$'':ׁ{2[jwm555xkb:|ƌr_ pzNٳ>`~u8 Ljy/ ]ve˖Ln~I磏>:;Q*"ӭ[nh4ǎϸqN Effhͭ_բ߮Ο?o0dffϞ-f#F4[~3rll̙3 x"޾;n&99 ~mҸ[Nw5 -Ο?/,jjj5MnYn>=oH:|t5kVn&M$^EE"lZvtIj_t4rHa&ix >^ׯ_ӧD*..nCmvka}ݮ~zPee%KfX>cRfr / ͖fOVo>aFw@O;ͳקJںut;|@@+_ 5k(&-,***wgʕbhCaya1QSLqӭ[J1TTTdZ쐦ۜ9sD[<{pVO<7~x{}>:ΕWҌ3f #Gpɂ?@pY___WNR``7u8a۵kע]9}pW[lCNq|ôVIII^\<}pK|󨼼ޮiiif 60̡C&ܹsmĉLN4h$:vXoxfɒ%x)$h>S^IT^^޹s`1c_7Bw@*GD˖-kЉBX`Jj @*Zٳܹs&~'4ݖ.]*&x {|0f^IDSG-^~e1o> RoZvm޼YpQ| c .]_u1vA///Z?~Wmݺn {'&ݎ9bX~+***jm۶G}$&>l6ey^S{ "1v!n 111,++ v… " 8Iff&TͥGN}oThʩaÆI{"yRSSyӮ]&O,7vޭ:-Bq^t1P۷oh4rOY\\ ذa mٲeLUVl]mNLOOKRRR\n6mH7p[EE?.\h4׮]sv_@+/_ڵ%++˩7DEE=Kh]js眗n'N{$&&܍|-53gmΝdrAɣ+WTTrOZ)RRR"mUUUUnW߾}M[n X{wR=!@4oo7|SdQ'OСܳ08&Ky!jv",po;ȫ\ D=Hȓ`GKLBNf/^1mT;abccħHOOOgnN Vf9WI*bHWƞ42\N`k[Ug cU9a#F˗j'Li Vh]mC|dW |ItY$kH]c0,]ǴZmffn婩aa ]wyVu|ᄮ}1 RRFœp~3;*gf?gtFof^zv>|XdQ/^޽ܳwhA6$n纀D;֔?mkH.OO\pfRޖdoE+=E)Mׯ? >ݨI&=pgjkP\muFjX 8Zĵ#b׷''CpZ9ڭAe5:Aˤh/^\UU%IQSL$c%Z;8fmY knPӍK&88СCRE[O>dرB7HK)6璼VBy]*8n~O ؟&6\S몒-KM;VЭz\!M,g/J6{qOU ɯH 2ڵk[/fddk笛-ЪhڄuZI_h'B+&g֭ѣG]m b̙3&M2r_ h1hpLUE^+DO6y2jgJO_3p%#fQ`WҵT&Vұ܈{V[ v?Y/Wzu߸qK%E%$[nrI 1w1 N'{%quD6RE$w`>x%Zdgfޙe5ۭ0SNqܙ;~Z ے۪/_5 N۽966 q\gϝoɷz">#q Gp^d ]ODN>ܙLA}UJōm>~* m*G{#떒q8S($짠Dn!?沭09V+Wδߜ={CPF.=|t0X Ӎp8?+3"t$9,/% 8`]B~<$&wfڴir_hL}[n\9 8d"n!x d={畤Nr{ѩ$Vr^>h4ǎGO0ݮ_%Eiy*0p 8SLnggS%"["$G.nʶxr޽;7gΜ$aZJ+-_ppvI &ٻDXcB{, 1a'ٳgvJ r_ hHϞnc}}8ǀ%#Gq~kd''R\^}* O/"@|f۶m_)h4RePXX("'-ɏ=F8$A ;, +IEؒ*Rװ\meY|c̞==~ѣG+{p F - TȒnWl);e9Ar^J?o*B|>%:CwHC[4B ={4>*//O|mݺH[ГyrG-&FzONVAdTGx|Vszit ڀh5HzȐ! :ƍneee.)P#$pr^y|\fj(pu}G=0[oU=%%%F#)4D~[gr|Ra Y7iڄ=FNxѓjbK"I;*RKb%a1 EkWs8{b' <{'ȶJpTY'o$ 7O=T>}t̙f 0s76=ZoO*IEc9D2 RK:5>PڀE*ٷPu Siq\^1h,++ ^"gۂ2,J@_E\)wF-~Eb?|{SqBQw*/dml" 0NR$4uƫS>|XmwZK~[r% E[9)H:6y2a։4g}V8{"Seh)JeAAt;s挿ܣaVf Yo=DIN5D9Bbw'Ek4%z$WULG4Hc\ԩS۷{"E-傿=@$AWFHWVGU(e Z1X{%G; B1wܲ2{FlOOOG -Uc,O W>$/QſIC:;j5dLOs[8v±]iܹ~}'ND .k ؅iULnuHoUW!$KLuVZ~@2V[n}뮻|||X.a[$9p\މ[Jo ĔoĵWуtR.}T{d&ڎiz,oH:V]^w=$9pB{f;/SH/_R{ /py #'8\U{Ǫ\0Na,ɏ\#'"lC|2!}m&9\-{k/0yZoۮh5W5G8(0|1+E)ܣtL|"Gr=4pP Z>̆Bܓ)-c N~=B4zѓ8VFJo#OT8ȸ-r..qMqt@Rı\T^~Q+>qKʘo z2=!ٷVroq~ԇe8r ӷ`^X"tos_Y,C`# W)`+C~=ޙe!h7'L4$ $lWa]8IM-"듈8!kx}M򖛆%R~Kʕn'p.4&YӷZ,27R]dNj_4#%SLp}E.9\)3KgmKK9^$xC@n ?L/qM%n[hx 8*L iӡ/z3 sJGr뼒 ܇6(6CN-W]ϛSNrEɬM9M1(T=GǼr2"xt> stream xyNǟg2`J,,QJeR * J}-)G"KPBɗA(K2af0˳晙sr{9wy}Žss|>cYXXXXXXPSav]ߪctM, Gxkj!c~}/gx>]9 VS/yo;B`xZ*~}贕&GPla*Ju)rSna*~3%g 0{s#֝wSF7X9maM0'&t񐑏-F(J> /ot, !錋f+1r}6ZW %{N\s_c|77GF=R+{ZTJ6Zݲ*oJ9o@y;/}zהi>Mq¬KPI)$\…/->[AE|mY\0I&RxG!@YcnU{\MYzAGt8TV#~2֌)hT(^OtQ.[Yd[pH13P?^gBBޤzk'65r2H%(p9]4C7q`>_'QPSV= %`5Xu5RB-  RzVu :*h,\0 Xev\0HiɒlO f)h,c2Qoxh7{)E^_|!2F:=(U+K,܎g*@Jeq%$)r쇞[ߒc9790;(A !k%?Vjrw7nmR@CHiZZm|m4BC"seMN!c?PR6 ͟5(R׾8_@JfR9ބ \<УJHIU4VsP?;7 י#fR Q&*8x]bS{1j/%E?V)E%* F_*:ׄ+b~) Y(~&lKɦ/YJs(Ix` u?f)KYijj[@J4B($[-=q7GHi&d&6Dv0D]:L $,e_ԎD?`OS~H)  jllP"{ '"Ol#$_\ n}-6)Q҃l=IilZ,v#R$*rb(9˙7)C<94ZL¬/*EBUPyecl<> yڛ'epҋB9{btYyK_uqٜ=W[3 yzۛhC9ܤTS(=*(wl!U>3R.$_y }U}™Z 40bLuCs@J " "d)9c~򿾢VeāibŝY#A-̖|1ϡURaV 1E ln"n 4|Ϣ{HId)ƈw4M».< | CehҏO迾á>G3cn/I+ +YIGZi2w->MP1I3n5<ϸF^Y2qr{#JVyԨTgTvJxyA^{rK0Ue."74RʟX',Mw~t" 8Z<}bv[!=Й-%h$_ux@Ld)vBT~لq+vsB2Ѧw%5&lUMRB\ȫ ĺVBdN#6̂ =~-sH=0 [vÙf:N}W|5PB%DBo.7E L] g,o{M0BנLD Au=: ?C l6 "I*~$'8jqdaNob*t¦3ٛ%cr>=ZlyqThb`*XDv]tiq$IVք$mNgψx Ԓo&UML{I#/s2el)( [>-8 5.R`:rH~L_D:߅xbB}Π6 zyioABƛPv[Ѻh d}5 NO-0wI2X-8р4ʄ́kh(Ƃ'FzRKHtbJ4 :s%mβl$7!R]'^H+"w2DIIs%`R}zzU RΔPԾ'NS82{%2h,lSp;I%)53xHLTJRخ*W% trrMγ,bpL=[.96*p<S&8^2jpRBDza):A61 K^v8)'G-M `gI!mIى$u| a5C o%iaxzɗd'/LΔLh 8YG3~L$o_mx"݅Ji9v1^v=%Vzd!gNP Bn0qC RC) Ԓ^}B!ߋIܢu}$V%Vw-m5=~UyV ]A+'r{Uz/[ls3MV%w Nl5[\#vLysfz9`#0v/Y@#5QJXoa b\q glK[o4!i#Bn\7npNnIJv6aQSSBI Q( !I\*E}7_,h`g0]p.b(IJH Kץ櫆%cj'tfxqJŪAptu݀ _jj*< "K}%+ScT)]lyrњD)Г] u'ω@0N.䩏TX}B`)B2`"pP% qu*ƦŜ4]BM0Ki2 3HrX%#02R5|^jǸi~ȵ8|[لc0H 4˩[t 8>**ϞխQ1)=O7JKKi"m5KQaRE#KaR9L鱼 G-T r@YK5EVg/㰐y3M|RgKٱW:W'Va$_=L9M8 4t+&?e +tRS} h )L^ "=]yB 8>@,%T_i*[$`Ζ2|Vp0()R":)|"Jy6s8KI{_$l$T<_ l0mx)kK_]|NvJ8f) ݎUS[}!#(끓x vz-A_6ئTJ>ʶxy׹aJ-u8`=xMӾ]-De]ruOVJaO Kqxg4w#)mDj t&%pa&` ӔJ -]~FwνHRJ>L2q" H%D$3C_b* <)Jq5RBOk0'l@~4`F*)P6ŎJ#Qy ]OV;D'%m@KX8FwxG {"^gNPTERW II2$s;T>^Kd(OwHۨ@=T)aj-]Rh6pr8hl%l5HRBgK9&>2PPImfD|ɌcrכDYM ps>*A @9e4pV\+;GI]=g.n1=hK{liL5+7"0D)wCRj(3X d*vb {̓sYB졏n{z/2B'?D4,!D)9׎X1aD #(S45TFڻ:@1bWggJI?RldB>4ea yx*\/'a5 oV̶t^@=rr:\PVJ%Y8"´E'LVA,%2 _0yCg32_>wdvmZe0*Uu/~:5z3A!vDߥ$\فfLǤۅA.%{Xd٨!GXzgjiߺ9guLoɵ JN5'b$i(=#𿥑lSl'.fR}y{=m)o9}ϐ3΢ޜo c4R>q9fҔ5:R*Y#$įٴL6w)7"we=ސ؏s5W-%cX!I@4ײa5md^_e&"IBǗ:$> endobj 14 0 obj [ 15 0 R] endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 22 0 R 25 0 R 27 0 R 29 0 R 30 0 R 32 0 R 33 0 R 34 0 R 35 0 R 37 0 R 39 0 R 41 0 R 42 0 R 45 0 R 46 0 R 49 0 R 50 0 R 51 0 R 52 0 R 54 0 R 56 0 R 57 0 R 58 0 R 61 0 R 64 0 R 66 0 R 71 0 R 74 0 R 77 0 R 79 0 R 81 0 R] /MediaBox[ 0 0 612 792] /Contents 19 0 R/Group<>/Tabs/S>> endobj 19 0 obj <> stream xs=Rf^n4M>A'<-GӦ}wܕ2wbշJ+U5:W+G0sW}__5ZR=v}#|P]WoUk}ݸʻ]ٺwu7b4R&6(iԪfn~8ckm~M<}Զ+]ЪaJö>}\}ycOe-ob{4~ :[:׽k0VbjH7SSۥ[>-pc_vu# 6Þ4G766w]i{]n  7\vu3zǨvב|*kj|h6E# 0SʀE,H$ ײ % 4iEV\􊾅Wx߀x @ !Z-{4M:)Ujj[=o\x@ʸ"RNJe4ě`3LO,,4m HY_DIHqac4ɧqo Yπe֛j`Yr~_*E&(1Չ܏cUm Z0ރo@{: :42 l|vy-L*+L=bZ;):t]h;U#IkKj["l KH5ºT:k\b_B*fgJLA3ts0k[ði;gil:GlwLr.]m KR!]:Df @M%bَ&Oq{_H3mRoY.2 M)RJÆh9ԞOg5!g6DF,fyԦi͜f-X"R cT aJ c cA6.0=L'c36OS@j\*C)7ѓ#c4qg{XaJ0 -C0CSBCsI*)7#OkcCb ̍S۸knُUSN44QzZyj[b= KiOB8bpɜWKqjk3X 19ˏVԴHԽօ5J ) RR@љg@e'G{Q v 8Bfs6wzd3b[n:c SJHKRLؿ 9>9oބ1Yf>Tީ)jg͉(x jO0)HY pLIIP'!GZky3n2JCTHE{LGfRK(YPr۔ |FsFO&"YLjMV#ac u3 ۯ Z53ܱXSĶDD0ߩ/ 5B:bhɜNq.fqi +cQ2"0h[mO0r)ON2xсgxex|60v@L؇ uTW3۩Ķܹ}րs%3Rn8MSnLf1#s!4z?@1z-|R/!S"2JhZ$/;2IND )p\S9y:^6[{^Z{[W[7VqF˅ؖoua T.\N3Lnm endstream endobj 20 0 obj <> endobj 21 0 obj <> endobj 22 0 obj <>/F 4/Dest[ 24 0 R/XYZ 82 721 0] >> endobj 23 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 85 0 R 86 0 R 88 0 R 90 0 R 91 0 R 93 0 R 95 0 R 96 0 R 97 0 R 99 0 R 102 0 R 104 0 R 106 0 R 107 0 R 108 0 R 110 0 R 111 0 R 112 0 R 114 0 R 116 0 R 117 0 R 120 0 R 123 0 R 127 0 R 128 0 R 129 0 R 130 0 R 132 0 R 134 0 R] /MediaBox[ 0 0 612 792] /Contents 84 0 R/Group<>/Tabs/S>> endobj 24 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 137 0 R/Group<>/Tabs/S>> endobj 25 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 721 0] >> endobj 26 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 143 0 R/Group<>/Tabs/S>> endobj 27 0 obj <>/F 4/Dest[ 28 0 R/XYZ 82 721 0] >> endobj 28 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 151 0 R/Group<>/Tabs/S>> endobj 29 0 obj <>/F 4/Dest[ 28 0 R/XYZ 82 609 0] >> endobj 30 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 721 0] >> endobj 31 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 152 0 R/Group<>/Tabs/S>> endobj 32 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 485 0] >> endobj 33 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 337 0] >> endobj 34 0 obj <>/F 4/Dest[ 31 0 R/XYZ 82 215 0] >> endobj 35 0 obj <>/F 4/Dest[ 36 0 R/XYZ 82 721 0] >> endobj 36 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 153 0 R/Group<>/Tabs/S>> endobj 37 0 obj <>/F 4/Dest[ 38 0 R/XYZ 82 721 0] >> endobj 38 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 154 0 R/Group<>/Tabs/S>> endobj 39 0 obj <>/F 4/Dest[ 40 0 R/XYZ 82 721 0] >> endobj 40 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 155 0 R/Group<>/Tabs/S>> endobj 41 0 obj <>/F 4/Dest[ 40 0 R/XYZ 82 288 0] >> endobj 42 0 obj <>/F 4/Dest[ 44 0 R/XYZ 82 721 0] >> endobj 43 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 156 0 R/Group<>/Tabs/S>> endobj 44 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 157 0 R/Group<>/Tabs/S>> endobj 45 0 obj <>/F 4/Dest[ 44 0 R/XYZ 82 485 0] >> endobj 46 0 obj <>/F 4/Dest[ 48 0 R/XYZ 82 721 0] >> endobj 47 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 158 0 R/Group<>/Tabs/S>> endobj 48 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 159 0 R/Group<>/Tabs/S>> endobj 49 0 obj <>/F 4/Dest[ 48 0 R/XYZ 82 567 0] >> endobj 50 0 obj <>/F 4/Dest[ 48 0 R/XYZ 82 358 0] >> endobj 51 0 obj <>/F 4/Dest[ 48 0 R/XYZ 82 195 0] >> endobj 52 0 obj <>/F 4/Dest[ 53 0 R/XYZ 82 721 0] >> endobj 53 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 160 0 R/Group<>/Tabs/S>> endobj 54 0 obj <>/F 4/Dest[ 55 0 R/XYZ 82 721 0] >> endobj 55 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 161 0 R/Group<>/Tabs/S>> endobj 56 0 obj <>/F 4/Dest[ 55 0 R/XYZ 82 651 0] >> endobj 57 0 obj <>/F 4/Dest[ 55 0 R/XYZ 82 277 0] >> endobj 58 0 obj <>/F 4/Dest[ 60 0 R/XYZ 82 721 0] >> endobj 59 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 162 0 R/Group<>/Tabs/S>> endobj 60 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 163 0 R/Group<>/Tabs/S>> endobj 61 0 obj <>/F 4/Dest[ 63 0 R/XYZ 82 721 0] >> endobj 62 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 165 0 R/Group<>/Tabs/S>> endobj 63 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 171 0 R/Group<>/Tabs/S>> endobj 64 0 obj <>/F 4/Dest[ 65 0 R/XYZ 82 599 0] >> endobj 65 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 172 0 R/Group<>/Tabs/S>> endobj 66 0 obj <>/F 4/Dest[ 70 0 R/XYZ 82 721 0] >> endobj 67 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 173 0 R/Group<>/Tabs/S>> endobj 68 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 174 0 R/Group<>/Tabs/S>> endobj 69 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 175 0 R/Group<>/Tabs/S>> endobj 70 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 176 0 R/Group<>/Tabs/S>> endobj 71 0 obj <>/F 4/Dest[ 73 0 R/XYZ 82 721 0] >> endobj 72 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 178 0 R/Group<>/Tabs/S>> endobj 73 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 179 0 R/Group<>/Tabs/S>> endobj 74 0 obj <>/F 4/Dest[ 76 0 R/XYZ 82 721 0] >> endobj 75 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 184 0 R/Group<>/Tabs/S>> endobj 76 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 186 0 R 188 0 R] /MediaBox[ 0 0 612 792] /Contents 185 0 R/Group<>/Tabs/S>> endobj 77 0 obj <>/F 4/Dest[ 78 0 R/XYZ 82 721 0] >> endobj 78 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 190 0 R/Group<>/Tabs/S>> endobj 79 0 obj <>/F 4/Dest[ 80 0 R/XYZ 82 721 0] >> endobj 80 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 191 0 R/Group<>/Tabs/S>> endobj 81 0 obj <>/F 4/Dest[ 83 0 R/XYZ 82 721 0] >> endobj 82 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 192 0 R/Group<>/Tabs/S>> endobj 83 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 193 0 R/Group<>/Tabs/S>> endobj 84 0 obj <> stream xs6=bg#@?׻zM2JLXr%9m]BdƶwNjʛۛUgJި*kmc6)ۛw,ovۛoo~7 ,lYƨV7EiƖn͔.jۛh*2j2Ȉl~&V[LQ.WX,7eajI?s8j`*^iؙaj}=wwf;U6Vϛ^nμ˺.>kWV'y Q~-aYGG>_v{~oܵj;vcuL;ҥ-~nU4r/T@lR(vx/ ,X6304&@ZBWJJׅ5~/Kh՝‹WnFgz$>-횽ۣGx8dt6 K@P])R_MNyj Q@}FӺDqI `)G e$R[ G(&fd4y4itM|~z19AjB;)QPpX U[cŘBʀDG'(fP^?2P.z#X:m1>w l I٩KI;umSpXNp!BʀT[ Qa; ~di Y4Xٝ(k(0}'[%7Mk_J(56Z41i6wXj,(Y(U>iq,-7N,Xz>#.50[i8ж6cй,EM"eKL.\9,h u nR!?0˧5\D4|cYlu : RHפd!_E׏LLSIkzzLHD9<[y1uQ6/ j+7T%2 c Ç*feK:L/O/Df}:2W?b~Sc;A&[M@y)Em/XH5R~K10{N)xŒѱlsi!`ђmmai5[K|@ʀ)CwQp~Dp |/v>Aʨ!՟R/R =?<4<'G3Dp{GU;gɎ aC{llZX-;#MrtXJrL!5_ G' f@^?2@Ꮎje{N{ge=꘧6~C㸊ƥa=*ĕy%h XZnK9q m*Wk:dν7 {&ogbآ nS5E5Uk&ge\])NqM2ZPI )SqT(>H1@1{9hxGǞ!͹:>aic^Sp|CF܉2(ǣ.ڱM.QbR o/ f^?"UGe)ỽT=(~nP%*:Ԛ&ޓ a*rz@`)S UWR~^>?Y:,qvz<ׇ y3u{ab4qhj(z2LQO5U޳qV5hmSR;N#7^LU!Ẁʸv.ӏkWF(op"!JMAE[SHM[;ΈsXEpO*bZչRZ<)m)8nC>aò|Dw.SAɧvmSqC,vLk &JCC(P9;8xz9<811{nߏZYb_hBŷ8RK >בw{K2$%6bH +fmۥ3??N7ܽϜq,F,]\SbIu0jnKym6I H5& '='~?b]k4 󊿧:@!:i8g$iB5'؀nHRQQcxT|?Зsrh `ŴVS~.+,GJ3$g*-#RuDʖ̹ @%"fD^?2DZc! X924&LA<Ѝ)(ԔRzX쯢GSOrާeEFc$iot#(6GP5|%T%>J1,1{@3G,U[XY?>~r[և/]xgK#< }q+qfbQkRU/ŹPJ#RaPF6}7: ]w`k[~6M"6(K[lbКz2?"~HQ|=`VD endstream endobj 85 0 obj <>/F 4/Dest[ 83 0 R/XYZ 82 702 0] >> endobj 86 0 obj <>/F 4/Dest[ 87 0 R/XYZ 82 446 0] >> endobj 87 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 194 0 R/Group<>/Tabs/S>> endobj 88 0 obj <>/F 4/Dest[ 89 0 R/XYZ 82 721 0] >> endobj 89 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 200 0 R/Group<>/Tabs/S>> endobj 90 0 obj <>/F 4/Dest[ 89 0 R/XYZ 82 575 0] >> endobj 91 0 obj <>/F 4/Dest[ 92 0 R/XYZ 82 721 0] >> endobj 92 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 201 0 R/Group<>/Tabs/S>> endobj 93 0 obj <>/F 4/Dest[ 94 0 R/XYZ 82 721 0] >> endobj 94 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 207 0 R/Group<>/Tabs/S>> endobj 95 0 obj <>/F 4/Dest[ 94 0 R/XYZ 82 437 0] >> endobj 96 0 obj <>/F 4/Dest[ 94 0 R/XYZ 82 257 0] >> endobj 97 0 obj <>/F 4/Dest[ 98 0 R/XYZ 82 696 0] >> endobj 98 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 208 0 R/Group<>/Tabs/S>> endobj 99 0 obj <>/F 4/Dest[ 101 0 R/XYZ 82 721 0] >> endobj 100 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 209 0 R/Group<>/Tabs/S>> endobj 101 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 210 0 R/Group<>/Tabs/S>> endobj 102 0 obj <>/F 4/Dest[ 103 0 R/XYZ 82 150 0] >> endobj 103 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 211 0 R/Group<>/Tabs/S>> endobj 104 0 obj <>/F 4/Dest[ 105 0 R/XYZ 82 652 0] >> endobj 105 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 212 0 R/Group<>/Tabs/S>> endobj 106 0 obj <>/F 4/Dest[ 105 0 R/XYZ 82 529 0] >> endobj 107 0 obj <>/F 4/Dest[ 105 0 R/XYZ 82 363 0] >> endobj 108 0 obj <>/F 4/Dest[ 109 0 R/XYZ 82 721 0] >> endobj 109 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 213 0 R/Group<>/Tabs/S>> endobj 110 0 obj <>/F 4/Dest[ 109 0 R/XYZ 90 605 0] >> endobj 111 0 obj <>/F 4/Dest[ 109 0 R/XYZ 82 447 0] >> endobj 112 0 obj <>/F 4/Dest[ 113 0 R/XYZ 82 721 0] >> endobj 113 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 214 0 R/Group<>/Tabs/S>> endobj 114 0 obj <>/F 4/Dest[ 115 0 R/XYZ 82 721 0] >> endobj 115 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 216 0 R/Group<>/Tabs/S>> endobj 116 0 obj <>/F 4/Dest[ 115 0 R/XYZ 82 379 0] >> endobj 117 0 obj <>/F 4/Dest[ 119 0 R/XYZ 82 721 0] >> endobj 118 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 217 0 R/Group<>/Tabs/S>> endobj 119 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 223 0 R/Group<>/Tabs/S>> endobj 120 0 obj <>/F 4/Dest[ 122 0 R/XYZ 82 721 0] >> endobj 121 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 224 0 R/Group<>/Tabs/S>> endobj 122 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 226 0 R 227 0 R 228 0 R 229 0 R] /MediaBox[ 0 0 612 792] /Contents 225 0 R/Group<>/Tabs/S>> endobj 123 0 obj <>/F 4/Dest[ 126 0 R/XYZ 82 721 0] >> endobj 124 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 231 0 R/Group<>/Tabs/S>> endobj 125 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 232 0 R/Group<>/Tabs/S>> endobj 126 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 233 0 R/Group<>/Tabs/S>> endobj 127 0 obj <>/F 4/Dest[ 126 0 R/XYZ 82 678 0] >> endobj 128 0 obj <>/F 4/Dest[ 126 0 R/XYZ 82 595 0] >> endobj 129 0 obj <>/F 4/Dest[ 126 0 R/XYZ 82 454 0] >> endobj 130 0 obj <>/F 4/Dest[ 131 0 R/XYZ 82 595 0] >> endobj 131 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 234 0 R/Group<>/Tabs/S>> endobj 132 0 obj <>/F 4/Dest[ 133 0 R/XYZ 82 721 0] >> endobj 133 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 235 0 R/Group<>/Tabs/S>> endobj 134 0 obj <>/F 4/Dest[ 136 0 R/XYZ 82 721 0] >> endobj 135 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 245 0 R/Group<>/Tabs/S>> endobj 136 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 246 0 R/Group<>/Tabs/S>> endobj 137 0 obj <> stream xksܶf%=:xt4c9ֶLG- xv9 _ cy!G,)T*g0TJW=T%7QUdI.v|Pv|&rrUh[Jlae^TEΫysms|-F &Hh `~~l(CUr v~9$CQ_z>ȥOB2sd!9QxPl:"[t˪t-Dڮ3>v_Zw'Ukyv2vEsnqP Q T&]~|;@DL{4[(E`ZO g 5/<_>vvr v0Y(la$`[/j3@]ݡ~ͪ_R(!8~Ɇهm?;5] [>ЕjBD+"?4bk 5_coZq=n5CT,aS1\U!+,siYmNtIlJf%r>!+. +9`!D@Y*GmWEzXobXj"BSWWIx n^h5[*8DGr--9R1/쮋-FYPFB.nE0g chFA]Q*]78ޭPx:4r m`ĀKH!<5a2~ŅtGb6 EQQ$2ĐGA1h`5blWg„m ƫC CA(p3i_ZfD:fni-ɵyd|-Ehٍ6\ @.EPvъd30CykF3Ti7kC t2%@2]b"_LN)LηqiE7#fŽG|pLc^>)Q 64dHEW!N]|U'.M#\]P_no'MW̃WZ;)}*&M.bJ~SX9Hקr[OOc B$h7$ƂGk-oS u:eQŪY.hrK lH!P3D;JHsR\}a}߬vMAsbKx顇iP{VF^̔hUL[pe9LW 1j3bFvLm h:WUV9MMwB˨wjtssE誽}Ɖ.r!eR@Tя Oߨ;`k`kfoqf{ /wy njz3Dap˿")_Ʌոuj4[Jߨ _ƴ,>ZkYKrK\^G<:ػq r*i'8`r})+};3ˮ{rVW]71.zLR*XL6f7E']_7K? h2;uڌup^ډDjg&CBl«L*BP?.GJvM(gkN*Dy_yWg>c -8W ?X<Z!*g5ixs/$*k3U12jD&_6 6(\uИGӬx5.0:-_ Wt|$IGud&e S_7Xƹn`wT*stTNTy$D[~Zw:tg? )bRApߣ/Lx)B(X6yC0̿Cx?Ac>Ii,8Xr;e ams2S \SY(0W3%2~c3VT{;zl-ŗ /ܜ59*|+zV>Cy[䜄D]܃+3z f5bs| ,X5De5~!i෿{5oG?HG&8U)qzQ'+zqiM>xdL$?[fJ< endstream endobj 138 0 obj <> endobj 139 0 obj <> endobj 140 0 obj <> endobj 141 0 obj <> stream JFIF``ZExifMM*JQQQC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQjj" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ~b ¯VoMs'{ 5V[I[B}?on+u[wo]+JcpdqAYi>UG)֞]5/33UWzq]~鉓UUcis5έ$v~ssO˟q߽GqדI̿ D%h,I\U Ugu9~oY]]TO}?h5qG?0k= CJ"\_iLЛP9 O @U , DzLF~P E|v֐d?S·Uܳ~'٫NI>v]DdE3mJMA"I twK]pkcR |[?*uܬC)H#|?GmrO&2y_ θ5NT-x?# 5>kj!_`)<sV{k_*(=C| r |{7w~~U}+ ףd#80/J 0y z~`WOik_<$DD.ͨCQהq5o5]*EмHcI` L*(5#ׅPS =)i:}S<p$T V֟{:G4K @?ֺj5ʏo4vI?D;-x.!t\rK5^9_UBoo>!ݱ~ R[ ִIé5?wQO-Vp.P5D9ӦG_S]7Ii4LC.w5xk-gشӮ/5Kpc(P:1^1E^çi]vvP0F0?>& $o[9{ZO2OʼWKsCgWxcmֺCֲzQA@Kh;nۻ%_qIOKkJ]e ^suڞi*#/ I#8ҹ[-3Q3T:rL FÂp8g3ϗ.Ak{|ʍS?A> 5CHmM8kj8>d"8Vn% +٧Qӗ295fxEi-5~܋- ǾPD d*GvgRwܹӬ"7~e>ǭZu??ƫ\xÖ2k\sHewM/ g\tTHE%GW|}g❌(s'i%{+ 4/f^9,"\1*?kKK=F1MT:IF1$ g>|c ͺ3};ۆlIRO[{Ks&J +/@AһD]*$ f= tf|V9Q%xZ4t6+( 0LZF<'ԚEPQEUu(X`2#[{ -M1꿨抨,N*JZ浤c*ITnC~u_N#:hj%=_\tV1-$=> stream JFIF``ZExifMM*JQQQC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQjj" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( =H=+7̖Gpv9O\{KK:gc_iˀpqֳuVm,7^_{: Gz+8H$?5z|7r~xQon m6s"ZIǯ*%Pb51}l >8U}Nx nV{qIAͽww_YivQ,Uk[okmo\#eݠwH3}.ae1HVrvOZi4X>jص{ -+1zo(|.^j6qJ$AGV;H(b!^7f(¸kͷ*E8<ĎO=kMtcS}yz*6irHXKƦOC+8Һ[ZOSc<7Ӥ?3۩5_Èׄ޵,j6B&Y˞GQN.sfE.Ueմ[xCH2x?vvzGu{IZuuEud+=?:šUY ՝'r7V_[zķ -Np]~ǞK[Hu-SS8= w*YvQN%>Um"KG 4~jd,<Ǜo$}ͪӕ)Ktp;7սv7FEN ~YνNsr>ʸKjE3jZx{\SfQEG{O'_|=k .?_ʛaO\YIq onOָ'n/ f1Z̡Î:O zn.]L;˅:~TAk4Ե+i$lsMzN?jxn^&wrab?N{{W! [Sode2tz}jzUm +b'igo5wE0ބ' /~r3#)>'gsJU)uczfk~ t<7I+AW|Cꎿ5>+4{$Vs[FkjTO7U#Q}a$rOSq)?]\~s\]_g5(:l wѫn) ?*[pb&PHČ 2I-ƣ{fIm> Bc\k"mϝ,GUQ.<tQ'ʟz?C艪ʀ /xi챲IH1DzֹxTEAZT6 񞞘OÛ@'s9n{ҸZRw9M+Ú5y d~LxW~oIh4k٭ᵷ%(EWQ:LJXvPr`:gb_};:Tֲ<-ޱync7F~W62BSP\Eib1??uƱF wKQk] ҟG]%sT:++|wE|" +Ԫ9xHYd0=Z9s#MYD\Euk+Cu /\EmFxY=?r'֋,CZf~~rEvΜkxnsFre ? _DqkvQLGov=t&sIakԝζkx'hhcېCR>Fom$JCBH<_Z=Ρw3o`#?30=a"fZvP\b%cMwz.oyQ$K3z,8U(uOc^FkgN,!MBTSVh (=+|ezqH,gcsv4UFN.M'<Zg4{:oS#2b#5RӬ.э͕d[[#K[.hz+4m)-ĉYx@*,+#hZll' V> stream xZmo6 A"fE/R[k(Akk\זO!)i'A) ݻsd'9ǓJ2JIdտW V'O-x,4eeΊ*e dҷW_#f$%j""߿K*1'[NR QnNșP1I(ln!8;uNgvCbS![tϪeڭ2=O=:Kf8(Ș:by͸SQt7nuشpW)jyw)Tř>J25i XYyrIAJ ҏ1R1*VW(|d#է)=_N$@](WEɤ墀 em[Xzr.>**0pɨG `o3e01f/bhBl(s<lh0gN3[HKebT&*kv?~%7Scb 44¯+ԱGŜ+eH'@4ֹ(7E})}XTtAUuj=DyFcX0ܚ>!ЀRD;j*QB*I?(,$B`LUk] DlAam]xshY5p3%mD:`̼1i/p3Sӎ !T:juAKFPBA" qH`C:YkV HcV:M@Oitai`mnWgP9=(x0 #X((@lMtX̙6=YFa5&_αdNh{EŠ@i P5?r1)Q@C ," r4 q 񎀀>7M5p33X*JFC3eƾ݈W2,1n DOM:PZfHl:2ڇޡ539R΍;[M*?*WTRJ]乸_%+ Fn&O\Cn+y.bG :1H{u*;KKl]e>K+oM6d\\\Fc* l^H%u,Ip@5chG`qJ~q\j\iV՗ vM0@M3C %oÈ=CУexA ]b>p\K ~qK ,32}cf^Qg%ސuM&!ֶka4,> : 1`{¥fL|EYrlyƃksg~}Fn'rS6]zOL'V[;6͑])3ͺIvi6J;sGn).u4KY &`3^Ce^g]̍g/gP7xIRy k?y8 )Ω0rkj*# ms^J{&ʚ寮 ˢg{ ҵG8ޞ}%H?.?G$X"Ma \i j yK^T*Q82ҮD9. endstream endobj 144 0 obj <> endobj 145 0 obj [ 146 0 R] endobj 146 0 obj <> endobj 147 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <> endobj 150 0 obj <> endobj 151 0 obj <> stream xZKo \tOcK.l}(ÈCZK3PSU` 9m!쮮WW}]şVͻ ^fY[<.ˋeQ_ˋ`ItmFb hXFLEb_^#D$ Y""}SlF*RfTIK$ ҉*ocU͔_hevP)=+*~Jeā䲷jSՖj!Hog kډ'v?eVMrl+ jr5A][]TOe_ Y~/Q`C"J*;o8IžzVZ#YP>mw Uո6Σ'8Bw|Gnp2=,…4j. s|EEpwSvۇJ9~Odek[S 6chk\o/-NQNQ3%ҕnf>Ll0,Qix(r)(}x>TB!WkV7jj hP4A+"~9\hõ;@1; kMz"#V0TA Ը.`x U 0 pe)>8C5 ԩcA zjgn/i21M{ gZ 5K) h`beJ$^IBAqm2k!L%zO1:MhoNaf5ONe&g*8 ?3%ȁ/ӿ`kaq6 GHv`iسۢW} ?%}q] uX=8 U.UZ6=c w9g範WO{1œFcaeOY@c<<"XK߹6lJL]hBP>Xqk 9jBD` x$ mGtǁ m9ssqďC>=t_GrP!l8υ:v Љf6*{wᝠy?Tl>]'=xjBAk u''A*K' |xx?=wƙM7spi>=]fhE7Hwϕ8~^y8liׁu =+ׯ:2)߸׮  [džPIWm>y-CֳM&|o#Zw\+%m7kZ-<>/]kdjUt|tIjp:j%<V,F"03J ?f=9wGG{?&a\V!7 *9h&Ӏ~R~u_ؐ]nW!{iõW(ց/zX>"<.𢛅m q&\7G(pKڃH,6(|Tܷ\Ou4&[8ā5=oGE n5xj; ϙ=IL!g! &n1Pj&lNP`ŹwNG0\\b磅(g~+m*`[>Ģ-ҙ hej:E=P3b5uҡܪ<@}:Y %ؔ6)H|uemWLYچ}4*$]MbZdI?ii~oUwi&g0*€ż}pۯ*YXB2~ww}z;4\l]B)4!KhnJ2eMB%h>F#D"LJ|(e؇FAr#qoW|BkP8-iI)>?L l`4H@56':'t*ڀJ3#| NМd:iQvL{I2T;Pk*xatQ͓C8Eq}HɃ砏 bc!^I!/ %nׄ-CwTױHeHf8Wg}WPkuq7~!G(L9eθ7pkON9 sJ폾 /|KʷmvwwS %S08I h홴B&}]!,}%w- 6% endstream endobj 152 0 obj <> stream x[{߀p\ q6OpGw}E샻V'A|"5o;~䋗eX^',)?2gJ =}NnǧO䖞<}&M'xkO~/r岨_%XTy!%ZLXW2O#D+"jh~,YOT§Ŝz:"H_檢31< WE*6ί@.3,?tN+ ۇ>HdooH۬N7ق2ۮ;J8ɯH툙MuP&gZjWlQق 2TUI]<}Ucro`2E{j"sc&Y߭2.ʕyɴX)p&:Ch=([HWnj$cߴ3Y _|+ze1 6]dF2C!ݵ0־ZyK  ǴLqG&$iBAh`\w0&:Hi A;Sk7NrxRʕu{RY_m33 iX[!I1lQQbSxv)LwN`V~QyHT Pp;DO[Nױ)*oN]N\ΖkjD%G0>i=Q6j|ZН=;&xVZhvƢ#}qNPTz: ЪrԷ7 x8ߤD 7?(ÈۦG l< .&AcEz| :39#)Ak͙ i3(^kf6iy[lb_v UC U3; ː'% ۂ*r̊*/6YyaF}b39E3:$$SO!a}j18 $tw$?`a5)#!0]aΪ04ˇIJ~4T4i =7!Lդhw+7Aџ2) B& mKJQ)3Ǣɍj`yZm` Zy(퍍 5Cuj@tP$"{ lͤ Y >I }޾B,?*&xʨ vԍ+^P/DE DE5Ng/Hߜhi-z3f~hny- ?e&4h46ܨC.aStadΛsr֓!/;hDR? U̅3y>i,#DaN݂Uu.3ϳ3E nt߉U9pXWB՗+MSV٪iw?"?"^jwkԬD+ (  rR$^sRxJ);ý 6tx[ qr:M@'PJm{/RL ܂+彣ks io>CPA'nq7Gb# h_3Okct^Q%Omo}苗*ދJ G}x1N|_^/ _3rE%S2&!x[1cnaVn1aV\uf&(bcQ2%v7;]L%#!wG |G 9*s[pˌ"<ĮvsFuؐ CwkZV0 h j0C;QT;kZ?b^ GQbub-|E_0 c)eTp: u,[w9T R{U^sJW զv W8c\f>]#!k%@JKd=lmZ^ +IW?'_g ~OhBڨn\U29(FM5pӸr 7֮"~ݲ=YlD΀&?nd.XB'j2Ҷ,a+tcZ79SR+B]ȸ&5q->bmNhE_ОebfT~¥2IR%?WIeIdL #fZO`. )kp ?3I_t1=)ROИI*]2̳ʗSM(!'`8Abi37%]Ǜ?-k}AO)[rH! o+׳_o'~|~uQYI7%d܎^,hV鵋ހ, N)̆=0?h wHw( Y B*-. dH}<"8V]yO:32Ac܈p[nX+|5* zaWb֌8=Ԉv+7Nay&({1vX 464L׀tƚeqQ $-k|LHIϺheMms%쏌v~uw:o9ک~V@V~j@?ezQCl "33;Yo®$ۛ:ÖMGs+e6;>YpJ *t8xytO+)%֟dP5jOF3"S2p?4Mߵ۩p_5Dk!{>vKc86!sn3Ydt_:%lŹ_/Eے*l &b* 6E͚\.QM.}'EnB L&5._]4{l_3S7o9.@+dp ^P>3i*k):vi>#A&AAkי h_Y5[c*8Yሀ%v== e<1 yK=#pcR(O^ 0~{=w=eOMx;!vh^e0 5Р;]h| ܞ3/"/pӝi(vlG: endstream endobj 153 0 obj <> stream x\n}pbW`嬒]$Fv`y-Ğq. CNUy49ٟiCHizGQt>Y߼z~fӴin~>?v/cg'z 4tz ،DCh'E=?{A) 4)]QG| w ʟ`D?zrZ|w\7a|M%sҥmPt:No6?|;汽`ۖm{xEK+MI_r$ 70S< Hm߷5]kA-Q[nC+6_էP<|}p' DMx'*wmuM^Rc1.A;{!:].%zv 6%s]v1\^%! NF_|{a~s ~C^NBbD &lv\t.B\^؜CK(lqйWz'Rta=@ /WY=OI务4Nd^jkeFn5\A xTc T@P6M0PV,^f ޠSZmcv+aq+`wb_Eude=?U쟵b8RJnQ ԃl[aGx۷J4aV*tT}J~: ޢ4ku"j6 moէ9a'q^w}><nRu,?DlF;@ SӒWu>;Wz{=NR0"L/DY,@7r yKL%&af3SwH78Y=N$d$9cWF{1$t<.ǰ%FA0pd9LDU,F_s+8 i6oh%q``#Rs𱣉zĘ^mpaؐ<%r9&ރ\FwZ(x~j(;IdZ -@,VN@tj)PVn,LBwq{;ykJSU+"I 1W* 08FrqdR50¬pR ' UF3 B NB(:2v ChteÖ@M#ƅ0U\ ,-rt㢪iF/Ld˺< [bI8H:Asq"5mBqqW}fjS:5cE@ m @1_I,\rh\ DJ9 plR{6%̵ Hlf$qBǮ0j܏o Ovƈ'o e*yRS%H}&΃pHg {{41 Ġp1TG*'J8kwk;}07T9"2M^iR;8 ,5DI'z6HIfTتO߸O, KOq7B.n]+HR*hzO3ʂXY0.ȩ%e@C"L &Nـ0UHW ͂Zű&TMqф0e΢t4A,wbj=u!խ*ҡ~ŏ&*%lғ(!]P(eGXv&Pّj0pz74b"* k7soG_'`ftgfˋ1%ژDxŞՒ!&/3ݤUw7gjEňdeFIt>MpMS7GM>MTF'۴R^vifw,X"" 0٨űJyV5FZ}֮Eyk4nPAthlBeKtaEhRE+ٯcfQi6p`fBE o ܉-HK , 5JfP $h ~?Nxvwtf8Z5NYv

S%TœV1Fqr21oVǽSSsZ# I RcR"vw+ 5[[XnVcҨ)UOҶ|fЗ)04'j&*r Peӧ6*rcOJI.(KSU>Al^bE=j;xV ,zrN9֦|8iN@9`JU%T@6>~}*Izc*wD0 w3X~Wۚ|*"*h*r;WR91sE1龕$[GUVdP^d;D5v@tU szЀ`W5O6ajmj'"⹍_+7n䑇PjEDm{js>#8?J#dކC:ץWWfl0e(Y6+*'c niWb 7}|ieV$`gBEjõ`.L(u1HO ~:c֔䍂\Xn%S:JŸ'VmG\I1YJ ҭkgև3oigXR8gFd IAUMԝuܒ:!NILS[!wxm7J&Q=;KҀen[+ sb1*:@֕7hD@ݹ5 ŠZ*y)Mݳ IJ#cx^LoL~_z)Z>1Us9wV6LчF8`y5w\ȀjVRi6CʷwQ4{祉5K>ҫrʭbY~0'ӽU3t7aRnZ[,pB.&8yѶ޽/gٛ îih<Kkj+KXWC7&ghZML;9FwD1UgB>4Θe4#KSۍ?#(J.!+ HR*jn$ȫOr6NOZKNO7J0rO>aAS¹(*F`*BH0E, K1\9j>fbrOLM1+Լ5wbL>Q8E,c+NQۃU+ȁ` WQW0WNjkjHչCeX烼qqkݝģl{B31b:SFV7՘ί#QFfA8 毌$S FqOιߞ& 1}?*,>e#ҵ/\]Gq M a^[*f2Ja%nWSkǖ;W| 3Ҵ^牿qMb'mD?ڮ[8ҧ?1\~!56DS\m!Svz12i;֜gY6+F6A6΂/S8}n⭱S =˟Gć=봙v'):/i|9<WġdY5=i4?uN Iy%p{S=j:|Q(3T#_~Qf@*p*3!?ZčrZ+{UQe|Jd=s\+tB%xѧ r=9V"KvGPٻ84=*y%ͱF1j:΢PXzN7 5yoZ*TT֠,4b=T:lxz @ i[@NfAZi6@5~(@#2GS֨|x['d#\KQת9Q[YoJF 8!+DDž*7g4rA+G *#l۹g6m2G/͒}sKmp`χ w EQ7&qN>u>r `ӽ],K!P9 sI!0c[.Ae03ߧcZDi-OJmZahލǨ:5IHwAT5w8Ñ{IEQ;glGeɭ 1h*g1ҤlFGEhkֹV`9}1ɵ zs{wVg[89SGZCsL2~ T$x+&S\iju `:x'<}+IBlE`\̹v}%SNF}kSs|褒s#5"UHw{Qc6e"P(?*d(r]##I2kXZ7 _tN;%{j4q8x\smw0ҪGB-QҽKFn:V}%]vޱ<2j[]+{f *rF cf&j)JUPCN/Ҵd֬Ր 0[֮Zm VjH.Ǜ;b0AZY75h!z?Y5ҴuɾRj[psѴ$'WG1m]#T1QA8==koY5+#n+&t{^Hݝvl,-@׿YbG٬t\t/Ucҝj&V>t;Vui-ŸPkvǥa6)Z>૤lkT *> ebۆcT/`J3s&]03QsGmNJGӍ?.}}{Ye?*--bX#=z*SVc(P(T~qPܷpSD1_ҳ  ؍⳯,ՁmUn9]8!'URJ! aW* |VЩќ8 :vs0Aw5ZıF8*0ڵ59rJ*!$*+^ubA&% VmN2k3`jxsZCBpQ"C:ByοeQnOoji'޹_Nd~Zl摶zuxs*WɎkac[j^DSѮ/~$Sk%wBuGc͑zJu&]ͻyxCnc&w,*kJb[iA ָ<}j}D|`ӥm꫒3gI+5Wj|E̠J֗ĉ{ȌFX]%v` ҷj]K|zz| H@'SxUT[Hg Q<΃"+(yS-W⺔t.uŮT{V-pG]:m(qX趾l5䫇Dkhg ŤTݺrNjq $[#n?vvr9e$}.蜜ܰ.mN] $b bij҉s\ɝ+#nsԗm뉷)QS[imKE8Rjf$T { *qwKgڣ7dWtՋNwδ7''tpɃϵXY m>t7ϕV|.K+nlʞ8Jû|HZ0?zĻ=~­fǥi.xzc ׶ 3ꮍ>]PYq]O$956s+KRsJT5;I<.F*6vLxڬ>F8}n4#p;iwI\̀yKX~&@M‘sV$iwtw ^vF2HK[Y'} v:T}ͻ$I b(9&>/ "QQJodZ$j;*'֤4M5?!\5w$BV؉Zdd(džU]v̉*8ܣ^k[]d䣈}anvZPީjey򓆩"r y#+wFMqR?jjID=+&M(͑*wE,UEىW:Ufr=iӱjGdDp?zcݕ8yFy8$GZ1Z6l? 6Eݕ zo1SdhgTg9#J]p* ԌnDϹH#ңpz}5Ti%x~7b|VC],OX"U#y  e- D1$UF+Ig+[Oka~)m6,f?Z 7/O* b)ɸ{VZ\7|L,*KOGn MBj3uK\|LUօR?͕>RI57c1V%ŕzml-,>izzv꿼+EXPtQZ%dO3`xyLBQE)AWv q֬ѥpEbesFojg5I4a<԰\ s]>hP^I n*Z=ˌm8e $p֗|mqVJfh>YCY61aAJ=btwFˆLQ5 JQ]A#9=FmLج؜ҴX^j&t(4Fssg ҡuЬvEpg8NVFtտm#(4=ax,^2砯F70-zVQTRn]uc04Jif_?sЅpx@w?W ZCc9n8U &M5R&ij+uaA8-R?)=<=Gs%pk2+Merȝkq66A1g"r=T^W&y5$d qYWkFĶ݈櫑]NS9Pr:wiO<|s[ (nwgL*s 87L>l5dG>AG\c+O#84l bc($RІ_P<0+^Y 59A?*a.Qrk䏛"Ls?v.ȸ=CiA̗[+$=kz;4r8Ɛtia4 LQIQ@ JJFEy`fGNԙַE?u/*zMBeS 0ܴXV;qFKiH3+iG%BKyGRI۵]9DJX?uW$ACkbzo:RNVњ&y @:aHd:#"F֘n37`7l֢V8隬Ѱ.ѐl ,bdeL nsW4r*B9{\ Ҳ1zF e*iµt)6qRX zTPιi"|w z>ڋ@y\K.ڂG)$$ZnxUcH^ie;Vts[GGՅF|SZ$+G=mXŲKXڣ ` D4KM4 'sakc)?B{RS zTжTȠ VܽOju(>H\t"w!YcX8XP<[Ǔ0S9VAH5j_'rrw6 r>pkaWktB:|0gL07'tNs\iK27Qy=qg`+7Sp-Zi1g>%19i4^ִ׎X4+~H~HW-´+S٠ ճrOJmߞNX] xM4iM!g p?ЅpWw sZCb%3Gz*r0pá {|xaY|ƥj ~\\}Y1 s+7SNpӱnq j( wZ7h2JQ捋NLHa$H5kvziIجaZqZ`jnIEm^ ,z~h=)#8զkXOigC:+-4q4nPpr*W8Uh{Jƴ7>hMk dejde3XJ/3lO3OF;'ۈZS w5aڱMpvbj4`i.Cm=3JHI&=V[mo%qtӥmYŵܰP6Ƶ UU*R4Hh(CM4M4{QM(1֡" מvIO"EH 4.9#'(N=)Gmu~8?{XV1-EaKʕ",>FiuVQmdZ$\V.|75}eˤVv?'Om RhO=)N8usDr=xV j=Fo"'v<&(s+)‚}(+ڢ,88 P\cunN nݦ;qM7b~3&E.i\pr*XF†ÐڕmٺV嶏q)W{ֽ6qYGН^OVUNzۆ;h>XcGI Ґ ھ-r CӁWV)Hj)|HT£ZupNPi48恅ck7 5k+UܙldNQTA6+M#@4qȧ9޴Hief&^Q)xxcڬ"b|j\SH؜ǁP[jd_ֻxu#BBS0C'ZHƷIG¬nȪ>m{u18"GyQ[ŚFfHުG!МsRWYIyqC;&qQ|Ⱦ^6TS[P.31qWDAR̪6㩒a^^1oX}in` { SJND?(;I$ueNL,Km Q2sS`O&O A[}{t9;AbRQgf3:6֭Chq܋ErMؾ!&(*֩Mbʿ+GX:Mlh]b}2*!t,NtLRhhOZ3gsb0⑕eMib%RȦX㊏O ƣ;\V3Ҕ#vO;[nrsrD}~lqV-gN#blh3I˰{KR[ϭ_ҥT?S]Mm)֌B4m\Z~"Pkj [+Y%9Z0‘>j)"!$Z@T֨ :~TbäݝCM…ls5."nO.>GS!D$GjrIQTvi,kfI)2Ϗޢ㏔u ߝ8@M>DW<;bI+7j+ 6y Cs* ݦrBp⧍&ls*eZVB"sW#WAS49EN):T(1zTMiԹ4fԆ E'@,*&Z(QUɖ6Z*șj&\QE3@h+I)6mih (QLDqR*E$UTQE%QR(b%QR-P1()h E0ќETt+eȉ5-UDQE) FE&(B(R6Ѷ(-(Z(BǪEHR)* ʴQ@QE*QE!ppPRQE.Q@ endstream endobj 216 0 obj <> stream xko{}HT)-Z>bbR^?ȶI>˾C}g×l.!9oﯯ~Lȋ*IEҨ\P]I_ sdNz}r} >%UᷮDh%PI\6ISJ̵Jv@$RPK@7CU!TS{UY%˼ք@y!/? t{Ŵd@ CUԙ- (1G]s.tzD>dw*3QLuV>@_p%*muc%)TSRZ4f\ 2X%ʣnIG$v8Fth)'2{fd8ovt&}Eg_n^`ߺn3xLR-[>ݫ׋?{ B%nbT65n&Dȭ;x# 9aP60Fz3<>k|M HeYEb pͽߎ#5hay]i`+ Gd yD#+Gn6cr@ahYz-[> Cl9\%*뒤ypxŝ$ߠp* #N2XU Xk B$3b\NK1v)FŨ;&\y&]( i gNJ&Xn~`LN~ȄNY}D2&=N3V*A%1 y6 |Jchת5H4'z(^-U,4vF[eGI,a=^lX0$MZJĵ ]^zU ~Vհ =ML|hc ~H*D^!umzGQTej8(q@DYM(9ro(ɬ #DJpX8ֈ.ѫ L4GG}tZO!.[b*}Qj!SNY敎Cn`ޝܕY+h@ab:t@: s\UN*5-ɸltwN#p4ڭiN@Q*s3hHLð;|[TZk9 aVc52R A6-㲬sQPTN05[EkN_:E>v;JH'B{%PsacO6;\)2aҫ`1)tE焧^iX;wG˱a=(Yѱ+T,2TIH?!(?Ei<>9|l8¤bki⽤>yBun R;>A0Y`aࣛ->dSR/] ¦cc;y0B# K0u, 'XH:,-e.2ho/b{{1ɜ`f-?sҁ0T,#]8qDၮCK'ӐmbOK;CݙvA8tA#]I@7 T'q6y"_Kyd3H|QD$l~E8ȔP9{b[.|u$ֺ!yA 0 >sFivk['*`AE+ƣASyg9>ss39LbR 5H!úSv0E@G}UD<*-z/Kl.q8=짞L~~źem)݆p/ {T0EN癤Paq e +ϧZϦm෭n5!:Wc9UJ6 'Oa遭ǽ-n[e xT)1ס81^L| ,'lxРJF\3nr̨ϠT}- %Z:߽o:7q,ؚi9L+,XR4>L#nxcp;B;) vNژdmmam*Wl:oĈmER4MCXbDz>NXM`/ \2_"2_',{r4^Oa}&1W+!FJj9Y(-DM<740PRYvZJ[3'%z\0=+`-4-oڅY.W=l:w^8zNk6Wس'cLyƕ*+>wmF<4)*AtIƽy%wGqC;yz.k*jD8wn?ڽwz4"bC ^_lIkiA=Jx.HNY: {iяT#,BI6lIX&&lElXS,:p<-RmWfכ D+!FWO _G - }i:&^#np >Dzk_͞qtT1ŠA>Ed WBj E]H٤nPl]5f䨕~(p")}Q+wxc2"mZt)kebHE@ՠ Y"DwyCZ/>*4V;>3mxeKKME(2:UQ":h#g\PhU!S]J#Tm";0V`;˼1?A6(Rbj_) /M!Iu|d']hߑָ#48ZY@DOA{ |-7@g.G+~N+ a՟CKZҹ-NWǝ4/Ym5U^ٟ=G*YHwOz߯WL4^㞘9QdISd%] 3bGT;YOo3lo/ޥ'qF^f ᆂ/f"o1^7ڊcƷ-Y۸IEMm]SYBE$$ wB1z^4'cLxe+\xgZppgm%2׃G%;;+¾a}7j}K=nK-e' ƃc jkζ e@][ +Q/ :\x~Pm+{m5\(X ś (#TL V]ܺ< crm w7rI-$h̅EÍ"&y endstream endobj 217 0 obj <> stream x\_sܶr$AM;+viD>8}NVwNOAR;D&bXG_ cY^&?bIXTOuYeMr~d$WGyrEo0?~vN `7А-r?%{X:˫7ISfJDǏ=H "*I""=IrHM*ʬ@zՂp* Oy'盷Rxsyic"B]1Cƙ,Y66gcMQHA{:K6>Ibuyz.].ejUMզKF=elu䄟=TڊL#Ҟ*\>,GsE8YSIF6Syf- IJ=ӌ BQEóȍߑzylCwɳ%*3v\kY=̓IJCYH8P $ot2hB* RC *Vy ,Vw3uz [t6-WQϿE/dg2K5u?YtT| Ƅ8ĘY廋26~TVly.xd4^7iaYQ3Vz6-mۍ$h)%$6Ŷ.Ll똩{CjS,y1j@ xwàsg$XmXN ?pٯb ~(j;~wTwG>S4Kܱ(2c!2vLS m͒irϒ~]9P.[H3!d}]=NaX1>7n~#mg'L7Arrӱ4-{썐OhXlP ;kFŸm!hXl2g8BM%kjGaB?C-zL< R )D0?K%+)h$UJ}c3%])UƤ R5uP*#Q WXoՙˬaą?םyE৔5@_T0v1m"pwwȌbk9R  GB >1$ZwQS~#PK'i; sIcLPƊQΚl7c)+sݤLϼYlM].qH\^Ku!8 HJs)C=jwtbXH.Tzy}@f-L{8ӓ3 fxds H[2AD cItJF+d8exn`]޷8c#Er&ϐbHZ;/Lj]% ) #?BV-2}腅jh6ݵKb/h=F/vcGa\JذB5LRJJoSZ*8 }^li &4 rݞ#Uoc>:&==܁.ɕo ĮpS&/Y9;?c < Q*fp ߕ✰;+E00_B@ 7tö{A<|"DێpzNv-0jӺwĸŁ"1k5B`xk$RH9+KBјe}ha_@8_ ]粁큫f<El\0dGn͡m dc:;_no7/SG |i2'1>Z۷A\'ڮݷ;{vfT*[4Ԝe a (YgY.p7LY n'GʹϩȁMrwu(:F` i.ц[X B;aTD'-fd5.K'dB_EPOx/oDZ)M"ںlxA:lvDk AQDGJ5 VTiށ3#V]=O ;vvT䡒2,yBenҎsxi}1gD^h񃉇OV"':'zπ'jJ6mB.h2:kʄ3hA 4oPXs0?S {lVUy/o !%_1C"J>鐲dyVO>,9eSp ɯH&("Ȥ;t3)HO!.ʥ]!e_В6ѹC+AW|wgšxi|CɳB3=(b$; hj4?3:L8>)oI?28ǝ5Rc|5GϗHر~Ӗ=A 3$JT5`͇iU3 b:vSyg~^~DzyDo ȸr".|S T4jHhgq8?W)BJ:Qe:jmld+9^ Ď$uj hA5Gjp1/+J2m ScgVWn[Ee{e]z(읽M MHd ^9ǛBXԦvC>GTtcϹAavToT5:[nh %1cgA'g[ @`zȯ36Z;k^=}|H_Zb^pЇ0@*gOkM᪮]6[Cze{/,wzQ^aYvܡ-Z{FȻRTQ#y ]L:..߀,:ڢh!me&k`Z&u7} xX(3]www[BX,(z︄tBS<eׅ0PW'd~̹/]-*,y"V:3:=L.ىg`"uҩDQlBX![CGv H@ -~jP; DX(,CۡrO'.uVwܴ-y}0SPp- ă^4X eYB.R/)0!!IP Ў?Ȥt\\sr"YPq.ϕ7~IąW"e8 /-^'ބg=Pi2Vh>EĔc)zƙv/ X/FV֋s-jKWTh=M,1g*9鵙Wt m>Fy#T)}&=pq {䪱k5ܬ 7SVa=F4Yz|333V Ԝ983BU`M4ʦU<cmc-þA"V) uz(ݴblv PĒ@")~4k :=ݫR(cdE2 woͽ~$6tC)dshn빋YJT;PHU*P{e}vo雋Ptx0n:uu`h1C՜=K_ nqخ^?ѷglR}'\צ18I dAGԐpFcQ146pzZОj5/p׍G{|r^#v6i%~2.%B Bwvm4}Sp]yךzu^ [` ܘ d*իT`kW3>;ڇ1u S.dAb|=E|$> endstream endobj 218 0 obj <> endobj 219 0 obj [ 220 0 R] endobj 220 0 obj <> endobj 221 0 obj <> endobj 222 0 obj <> endobj 223 0 obj <> stream x[[o6~ U$Z3m(<2 :]n7Xs!)R2eOE]:$9߹ʋ~%!\'7g"_E&`EV'7Ogy?>?]$鿓鿝YYilUIU䙬ZgMEH$""HVj=&{q3_()YUrger.tˬ+ZJΪ0]Mbn7Z*zѭ`.SÃKxLz5Qʧ2S&kfxAF*1#LJ^$BJ tkZAz>I~%(֥R-|Y} Dy[M/(L,v7-"U;"ɈUl8egui6AThXRXG*ϊJ/Yf֖#^p&Y~I_;CpF[j4lp47HM+k*|v8 _daψAfȶt&NK=^Zny:LZHбAz/K]'iw+n {x-QGArój3{0$=jғMvbX2:C+0:oYn8)ίհ@ßx,-`],xUXt].vuNwN57W vi3ܮC_&8)Hq=:GFo+-av@ Tcwf# (rߦd9@O륥m]4L,I}3,!@MnO.m╁#nc(Mq"A=au asfcCG5*C^ 4M -2rDRFd (Ɛ F`5L66IL4,J[Mh@W@V:Gt(O+vIg[c4`TioWb_pi^@c3.;eL&uO֒:h/OLPr%D0 bCjXkKl"6{pjqiVO N (ޛ"~JOT+tɞqkYaHQ_'`odbs}H$26$gFlUʕBNLa=f],@ǘ,Q"ضo6HQgu{闿S@$)KCL6xUCKW]RL_=+ZR(R-ȴ'E7P NЁԹ_ٯmu-R-68ng-j ,'*MwĒnFlp \0O]@M2'Aބ.?rQY~4hbF+ v"#&j&ze/WadS̐PɲAi]LFabXϫ,-,$ \DUg5hO 츻}獹\ y 2S.j;0_,]- ۰jώaWSe:~NA"qfp  LbTzj?}9F<"x͗jTncZTepT2X)&r82J{m]bsb Q'” '5(@ L# pO5UОG\E.J5n$_*˽+vzQOsp-i5YXM"|g'z֝` ઉIGb{39 L # +Lw.>̱ ƀVw[NII*1ztXA{ s4 !a*zY/K?x=m~E4_qB1zꗫke?/5!vaܧv7XcdIWЙQYqhN9o̓g  $M5#&VP ##RiPYdMt4^艨-EXjdwQD1li6g"b#28/^1Pm*:<(V(x2v^06I'?ff pA(4l̚X@af(8QW[oȤ2O5Hc Q=okˬ'[V)ah{_zRb)qs'"+hJ?i_8 8+;{>)W6'^Us1toB~[ _W]~ BZY۫txN!ۂ7|hN1,][\N|MiC|W4~3dC6;-5}< )>Bg8td?+, *Z.(ά8 s4@Q<5G~=͗ӿ{kz' <⿝9Bz^o>]0=vSp ́PPspDH#nќ"(M؉XLSOv9e:B|CDU!j)'9c#TJk cqmۼ?.y*ߧ&հ<JL endstream endobj 224 0 obj <> stream x[sܶHft $֝#uQ]ے'iNttNww xw)dlbŽ8;<xEdHJIV]7y "VJ8ADY0 TP[^+>߷~2ZΜCFJlGHޣQ&rh QS_?8F$&FθJ5 NJs8KWDCD.AZo6П5E oK$e5n2]E[_!5S4C5lPsc Dr1_Cc3+ͷWGI`.j2`Z힞 ڮ]#ChhƠ]9vsЦ͡PJ@k,}~Y mů0MO] &7Z _*IAH9,Z1%}!D#$c-nIUOh}/L'оʂ|Nj 1tc4cP5g4P?K\15;^7 [a* #h%nwa/5̢V6ht[oʐ%tCY^bׯhVa[ez11a220v?n:fپ@>'O+ LATF-6V`!i垈x`Er]{rc4#)PP6b7~{jz|w bxX_UOp= x9]d t#>}?6"ԵG0ьRe]FX;Q6\+; kJ~Ut+AzV0=kf %GcBYOv Qߍ;V vh|q1 ^B~2:O{Z GY11+f]˜˱@ҙy}˞s})7 t-YWX) ] /$ u%*]TljPJ2o/ted'vY6"jTaW^*kC:Y =V;V{JxTuM?EݷWQW==9J!YX/-D•';xR0URqqԺ#=n5쟚DTi2>WWu@U)C2c -ʡ/v1E7ÎnjTFӵ"y^7lRZ5,LiN_&<%lW\e "syJ@ RzɌ3TGI*Q)k\_h^ǙePM^>-n&; Q̕;tiwGwˏ`)<]=Z1bV|D;/%,13+%:ӾF ]Su/tZ\ Km5f@W43VN-ӿ"(<k|`A2seDِ+}YEa`yktqc9|%mh]: \ Fc1fj:MbY@seg@wԠX ܐ\{/%Mp 3VYqJKN+cqy#hmiQo̴*2zp%&AI4w5`{V3ʋ=.P}\]ݭIV;73JԶ?8وƑ]8)rQ`2YݟIrwZLVԚqh08F+"~:[t>i| 4uW;Gp0 M.Pǐ+qwe᫛BVp"-?a!xeNxD2B(L<SvLHVuu^#+{t\: 4IwCQ7=|}I+4x5k_͋Ҍ\0a>D'J&U? گǭ߂0SX#nXL@Wy[S0[X8n^Opz8pzdĞmS+8(yӠ rf;8^^xmc-ZLhgh" F;1Ab}*<d 3ekl J/7ӵG3Ϻ!'QztFc1Cf&(ACΰg(BC,?,X11XT_ɱ7xU%{4];ɾiocv_ `\7<(9&"mE'lB5'H(hp)wCFhK;11l!"ͺ0/=O팁Ќ+@(8*W=vr{ ]Tw-t2@$!,ъq3e84z 4Yk/o+L҇%&]^(W"3:fNvQ7kP18)y9{T:Y _ɾJDQcImmɰڣ=A/]?L Z ?R))31pJ+{cjĂ@LT%'L);PͦwL#LנFپ?g&6^a29H:ؑ1=DZӛT 1X^߬ ~7jʟnLK^vҩ8RX~%>x--Ӝ]&;V6hn>ޯhvkA.3SUnL7]'IrYc ד0H[Z 1*aiƜ;1ht KzǐL1LQv9bh%%wԉEeD4eĤ;zPb}֏IqЏstG1^~N1bx?3*8Fk76 j^)98who@`,||~BԟwqomO:KEv[⏅u<9~_@ۿsm++X݋A`.f<ւmxv[` + Ӎ%vlyfHw;+`9L W#_Ei6GrۿXY+ep% =>X48N(*_x= endstream endobj 225 0 obj <> stream x[{ܶBRpIIM[ vEɡMbޞQv7]FؙC$jM<~uϮ//cp3\]^?A2ѻJ1~盲P؝Z֭ L:SMN< +r.*4GhuMr#·QԙlCw*'}p>nQYdkN#HL2LA!MMBei^ ~M C*ok {(Agw^u݂uZy/u`Gke3d|j1ɭw%=a9S!hüf z뻆(6C0_|iwhm u"Lz  >!Ή*J0`@6\yQE-QzR:E> VPEEfcڥ χ+7E%&]KldiڗSO0{<(3.wA@¦4ws@P1{,qK"@Sc7U\S[-DSf5B9ɔ4@ƭll_iu6 ߁6‫lnD:HłV(}jq3 PA&ԃax;2yx0/ΜB]bZ˓JsB ZA2Ɋ(Wcw,\ U`v=u J#0 7Qn/wR\x 65Am1u_ Ϋwμ;<.vY4NƼ1/?OB%L (gu!F8eq|%Z`IbQ,{"ޚO?ߙZdm*oq,FGC<_xM:Fon8HX{ܫ,4/-<^rL7mμ0͸#aFQY|ZL+,n27>c9%F+f`Uțl*/DpQ^/:4Qѩpm׏'"s$ )8q㥴i|Zc= *:Nݫ_W ts@K/-|֝K0|inN~XS`&RM޶\[mf-8֔ _;2QZ9x RӷS0|o&i}%K%M endstream endobj 226 0 obj <>/F 4/A<>>> endobj 227 0 obj <>/F 4/A<>>> endobj 228 0 obj <>/F 4/A<>>> endobj 229 0 obj <>/F 4/A<>>> endobj 230 0 obj <> stream JFIF``ZExifMM*JQQQC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (U,TǀzJ+^:1б[#V/9s`:(@e# ɫiNZ[.h(QX?YM#xD=eI@_EzKxI9qx#As|;BIS`;??Ҁ8*+&\0Xך&cN G8 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (º]g?A;/z/ڶo(S ^:q-e: ڠGOi.?NZl+ik#Vh)Kr=4( ( (YXW*s8# uQ@YDz[/|?B eO}5Q@5hؼt\8O8FUu*Hd5CFPʀ<ʊմ["]Rp/(C:}QEQEQEQEQEQEQEQEQEQEQEQEQEbQ[kHZY[Ԟ´<=rsb8רiZUh-#?,Ԛ<im>D>ÿUEQErǎv~ԍgnf$'s Oss$^mUHE97uNjCE3UL9>{G[o}v Z10b]GȾp(LTOK_>V]X`tWfdw6MȦa$6WnFcyKeoq$w E;qb7n;t k{#3(a ?PiYT@HREUaj׆fWQw9G'g[I dYIr]F~Z-2C$[twqOREp(4099?>(((M SM 2?p 1P:FHm'ϵwP:4nU Sk|EMn=Cv+5-:K{[HfV(((((((((((? xb]fQqp;ju+dIx~QEQEQEQEQEQEQEQE^Ѵ5]R 43QT|>@Sμt-?:iC5 ;O(((((((((((((((:/Fŭ^X"-HDD*$v'xHna+# z w IJ43uy;# UFbڟ-3cg;T>|QJ#s(o¨k&(90 wexECݴDGW;Tjvagsq,V5uI$3ր.PX\OٳΉdۜ g((((((|yYTkn~;8&>(̰~?y5QEQEQEQEQEQEul~ѭ duzUr g|~`uPEPEPEPEPEPU$2eUifF*Bh8 j6Ӧ:=+ yt$bAu~خH K@jy6|`eǷT=*g5VɲeًUcݻ#v#ttPK8dpz-/G.y7;j(Ҵ˻k8 ]߼-Hs䓎]mewia&(9O9~C[PM&-(&]G#sV袀 ( ( ( ( ( (20yݏnug,r(cjGjN-KKL~k(((((((;#eQ^!$l3vчcu,}Eq8qÏSӸ? 3IKlnտtGqq[&d}윹VVs1m kZLwc1`=ALU2!Z9UKNN\\"1裓W60JSᶂ 0yU@yO)f}ZtyPm$OoH)f ($wHмTdpM:qGdr bGeRQPвYbU+%60V1G^+@ ( ( ( ( ( ( d`VXY%m9H}[((((((ڴi6$}qV}y|ے7[W'򮢀 ( ( ( ( ( ( }ȘǬ-FiמeĂ7*0,/A?N**E 0Pk:T\E_"B9&}{pmoF?.Au\@N?usFU(Y?P)ɥ겟Zۯv@GEeZhVH\̧*e>8NOjEQEQEQEQEQEQEQEA|>!gTa0+;yvր!EPEPEPEPEPEPW1]&7WWZ\gy GD {Uwvs~f%(((((0Ei}ඹ][ tRqzi-VH4crQ U_0eh.-a>^GІ  RJYudʷ'Ȫd :#=\<ᲷHĀ7r'zB6$X9'sQcg<^Tְ0FrN|A5EQEQEQEQEQEQEQEQEQEQEQEU:nm&h^2;B;Ezf;MClmnO9=󮦼*Oj:Fط})A]^o&s,zڠ(((((((FeE,@$ 5i[LN~=΀:YYXQf89,H  3w[V֯ywLYAƼ"Yv݋;'$ZmPEPEPEPEPEPEPEPEPEPEPEPEPEPEP[z_um0Έ9aJ(oaջP]֗QL;pHtX2r@Ey N#%a.Bl[|@PZʿ?ʀ=lS0*xGc=/jꨮpxC=e}b4tfFh73 T;ր;+|yBЪ8+[o [ڧP^u{0os\)?~?WEhjZ֣o.98Q+>(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 231 0 obj <> stream xYYo6~7 /eSd#I 8)זc;q;C꠴"E7Mjŏs|3齓RRb{f%«JH.ot{kgşɳ K Y*n`d)eVɒ0iA(#Jf7Ŏ -+ 2d1d%|cIp3R)EW(ڟ-JRRͲe.KϗMPDi]C^*qj)۰x(C(A[-*?p eY PCkڒhi iyXRB0WL.(aQQ{:nSZ[g;'^YEqg`g` pJh0nwIv8Јbb<1AEQPBQvDAGUFG]ߝz/êYŢ3xS\R_/pbAM~@0Ic|sIr|rvÎ  V|2ZaEJ߼{U5Pr˨BF3{JYQܜjgu)#0)VPT崒%r_?OTK&r+[ kd{gunԎ@?ܲQb^U'kxU5uGPA[t\k4޶4U KitBl(#Q%Sr ni7w]R 8SuoVLwBϠ@5kTz1O2?5sKLTÊ2^k×O׫|Kyj(*7[t3)(uiUvӬ5ζ,2}q7/5TMڬ`aM'Xꂺ^}z{ m "_iD{ْy_Pi_YW.~Tcۀlxhdy_hFB9? ]IIY),{ER,窥u[[x%{q\pr ;Tst#;m q7 <*0pUj8/tgXeZqLQv)fD~j{;eI<_pekjxz(dɰjh`C'R{_Uli? Xj6Xk ƶKr Ish {+ic6; هJ握 Shxol-@7> )AJ?" ?omtndb3_yzFsfcW?CT|9w!͙&VnJPk Xٰtם1W໶'8ѼK:x$cpѢڛ25X869UXḠy7 y rXh7.yԒ7(H39Eb}/fʷq6pлHcq[̿= :fk3]=k @ېw4yWAl'.{˧ 62x{yWrRxŪ6{+l0fDA쿕 endstream endobj 232 0 obj <> stream x\msܶ~ʐ &^qݙX~9:i}v$; (]xX`X=>{LdRexV<3U*f/{e tʥ>޻<+{ ~{ &J kųkhXUVW%&35UUv=5F%.IIjRjHt}굔eԶޓJ*&Q_Z+]8d%7";={WRUfM^w] мA)|xlJ+f?]~TTqq򧅢CTpbn+ްFt;ouKo Fy]J0c^2_|^~}PDgWB hfߠٷ%QQ?W_@Jf֠?&UqX[ F5(xEWON QL_{$< 0pUZ38MG֦Ƹ}L$^J3]+ j_֣m :[%k/ 7W ^/M"*VכԦVݮQk/8Φ@U.NlVS+qv^5XĭHz/ۂeK_ #YK;07(mm7}NT )1W# q#)ɪ;Gxu~0w-3g(π<ƆF]|D<)ohty^z]w=8śV)am浣N*;Z-*;p9Z.;6g$LTtU*uJW5r< T TLX8UEjݰ[5S"SXxU֪c}`vѐtՙ1 , *o UmjB`]Пni*UiV@4z;u MiucӘ6E+'&# '݌Y% k4E\b{-g 5P+) HLQT`;Qz7؊}B/AV21|s`VR3)Gܙ%|Nlh + t+%S9^" A+&ѶΆv1~W⽍qďjx=T I@F*渺{'w8md B&2}Kzc1@_~w~ '/.XdhB [޲6)-NN UxS%U~>~:yϘNP+//.S M*ӳNKP2]^Rjuúa#05gMp5?I,Ja EI0`~ Iuhe;#TtR[23j.YkI?ma?g՗Fdl)ѫY/tJ0*nd ¶B6X{#tR8K?h5uz;w! ҽ=#{{Ft*ʯ&09vvjJ)lAmi3_?Y5 IH :I%INN 7fJ-gjҳ3N' Aw»K<[CEC/ 1eŚ.p q9hNIibKYN1܅bj)Wbq q_#TW盵=}wڃ{(Le b:)tq95.`ba%X-΢79ԧd¢f#LtR(VgÂkOGO'IS;)U<;^~á{6DGh:2!jY '0%SfDp> ,vЉ Ff5 7cnj\%/àa0({[;yN U5U m=B:@oz}'0Ia@9ՊPz 2b-Ή^:蹊=&oszvz'@I(OT˓N3('B<6_G ų+aOI*(ɉ)s^S$0=C0'Lۈ'W*3zr\Wx6"#dtRج0v2uݝV'\5’a)t*D!Iz,4az> stream xZ[o~7@/⁵{E! 6SI@KLl$tD)ߙ IIy(X9;;;̷K>\_|/YW<O 82J"yxʒ$o0뫷It_xi- tbtD::W~(% ɜJ"J֭ }hR1򂙜h?Gy2^a~E?6ʙ.ꭟ Jq6fHO١aݥzK:WW=bk nmTv\Κ:xwǥfh^R q[8W/+V \$}G^ ,2XzlʯWzU"cE]Kt V:q:i#% )pIߟyio~[vKW- U螞M9FB9/ x 3k׫&Gn ^: uU>QhJ~65 @Ց|l77K'i@aeWTb`Ynp_QڭX@W8I2FVGk*``^R(2ӹeT19DW,Ɖ(X FcXD1˙)KËY 5;[3[G\( 2wq ƧnҎ1+9lSWg |Fվnԃ33ōM0g%v/4 D5TXQ~`Df6(yWWG %Ҡ]eQ4WlD#)IԇTÎ&i&xO0ܔRZ\emk’8Cg@9 xqqGh/PcIW5ޫ>D53Zz?a`qh DqJ%޹e!BPbYێy]*^Sw^ز*u"iGtkƉmM{ qWYZxG]sOn|hjl,9t O9fdXH9ih8 uWt[P^QxF]}77 `vi"#8? .w۞!8z̜v}%>!&6(#EUJnW ؜tș-XV~uc1!=qΩn 2jo~zZHXo6w]-iZ.IOӸ1<{&` k&K3H6C컨#$՜WSu  n y몘n29“,U)v:TY":X[wTn8Jii(O<3,Cuwꙏ Z{O&Un?z*8`nc] n'(_{&"6-Me_Z^IV @^=)ZvHS8}f 3Q,4R1gb B@П34#LmYij]HWxקƸKn}zs6oGk_Tr_0]f  r$Mw7!:ڰF's):ٖ tfYKb}ha5TMn~; Sv^mA겘|vilGI: ЄLdm HsU'*Ƴcٌ/IJ) KN`f7bx#_xJiQ@ܝþ"҉ϓGlK /{;j?Ʋ| |' "j{B۔&ulͦ) ]wDS R)u拤 sP*żļXf9) 㯋N CNP0{fr-`mn-E[=ڐKϷ40O-xUA[fʥ Hq[t<} ,b>2%~v1,²ʻ<#֮΄ڒs:$/ps::ӵe}_Ϫ&ل߰U HMKx󾿅܉_ ZΆ᠑>~d O9^{+9Z?ew&mf}Ywq_K턓#Ε՚ і!QӜx,o'[CɺO:#fU0'u?ª+hQ7=!C弃 kJ8cc:sLFƧEx). $]aPy[* kMqŴR+rc~W'U`A}sى%GZ=jߝ!xRfBg9E']wSͿQ~>w2SD endstream endobj 234 0 obj <> stream xXmo6 AþHE͉"PH4^xbMNkww$%Zd%(h2xOE9+U6óY!4'Vrw̮<+fϻ;o`Itiia:d*Ŝθ`FgݝOh1$4r"'٢AU6`lIK$q+&%+y%\d/oKn]zUyԠg]{aIP|,.>:?*&*/T>+&U~Zp y!b"vC1:D*0&X,*,-3"S(+&A 32\.a&(aN(*''x^l^P҂Cְf3Zrn!AYY${.`@Smi3j&jC8`q/{mK:<(b3B oT @5)HUD;1Umk:qo|&LQ4UB*ؑuȔpyNRa{-m(,msA"D)&?Jshgl.8sH9xD^+qPgb?}pM+E)ox br!p5p(@ۇ>*38sl7|KfP;8= @Ɛ !:rLȮcc8;Hm+DrюtRIu>uMJ<; :Z-k@}3.ZFV*ʄ*9 xrtwǓDCE)i[UI#j3-,èdM5KKblgAFyˠoUGȍA_FN!V]lJw#ztX{ށ=k#jon y3N}ˏ-qQ翆+λB!\Rqw"]8"5Ds(05*4LhFhS2YŠu˪C~7(|~n`Tz~_1RiSO%Pƀ( \OڻІ.A+8'`? r`߾oCp 8Ș9=$Ĉ.@;$m/plճ/Yd_ =ntUe}\2i \bG9nǻp8)F==wAq!@Wȭw㪎7Coo_ 0nU/j=^OϋFRU'`SCmXW5e0; iTr))'paLB} Y9<|R]oB*l}DQ:Ƕ@iҜkp5rT ćh[ >pQ}EB>xsQz֨h.Z-DuA֨؀M> stream xkoF~h}RťpH-3XRE)i?w)Rkl]r_Yv䮅2|rfn]j^Z!HcjLc a0,%ꡩIBBy(B\ ِ v{<.7j~Ծ ]' J1Ip3ı VnMBqH^q8v0yz* HG踷qq8QT{$6c>ع,\8wͺ?ۮ.$vmz /D:STUb#?RWG^Vtqź)TA!bjG0pq#[ rq~ Ui攐h7EY>{uET' +\&wsL $PM6x7n]";b1 xL=M4dq=Tk0|%Q4 >re3exm`~'8kJv}BWd}qh.*3S'0Qߝ8g+Vty[V64E.4wfpdaJ'%ZA~7BT!w%1~ZDDzgg-NSW˭BME%y{o{pǙ?M\Ѣ!ʞ<Qy{'AXd ɗk\@W2Ow/Uɞ򐮱TH5=Hd ๰Ai˕Gъ AIlvp>;+>qⲺԳ.^+<-TO:w{d%ۺ8ȮPMJ*> [\A@[n\SƢ?A22xVȡi; ()snBT2,2J7ss[y˲]̲,["ϼ`L$e'U*앁^o'!AQ H,;HP"as[d yƛsJNjq@&X^^+Կtոdą5!/U-'>e^@d?c2Ub ?%SQ3lylb"A뵯f3vLvdJ[s&׷p3 [a oBs{4*d%0،pRȖBB9G|!@ ,=pZgN*p` }VF)s瓟ubya([h0n&-ST'o?.0>!)sel2%|mXy ot;ё? $shjqj Pv*sP/H-;?q+ĝO@yٽ@"ּ76D)|w4tש4{Œf@+ŔIيBU=6ᢦ 50^xw} | GAF*{\3Q{+hBڰ<(c0A?Z٩ W.S(!~dmɦF$ p!\*ܲs- |"CMFd,{A9O\L'}i l\$*f@;G Bc U2U'$:5l%7Zn]ua>Zir;C/#;1 _=m;9/%MЏ{lkځsWf(ow nwfI މХ'-I54x!j/##߅‹gV5 KWeh G:(xqN{17K]J:{84,N;}6-͊'|:%aW[MK>K·rW 5"QUd[۬*'+53$'O`u '9p"ՇLiʻ'ہy%,, ,K(ǦTvLMmRZzLۀX[M Uz`П/T&TO]+BFKԿ2.l=@@ҍ箋p}vه''gvb\b,r3tPvO#PdrVi5gOxu GokAoBH {N=AnܩZm=D)Lbv&@Н0m%pS)^Qqd]X/ h;1;e ح$Ɣ !iџ@O(!0`G1U?zܷpg/ĿJ1eٿ5Ld5cՊp8(! endstream endobj 236 0 obj <> endobj 237 0 obj [ 238 0 R] endobj 238 0 obj <> endobj 239 0 obj <> endobj 240 0 obj <> endobj 241 0 obj <> stream xc` endstream endobj 242 0 obj <> stream xc`p·0L?L% endstream endobj 243 0 obj <>>>/BBox[ 0 0 243.92 175.57] /Matrix[ 0.29517 0 0 0.4101 0 0] /Filter/FlateDecode/Length 64>> stream x+*@02L, T53020THMLO521QpW֫ endstream endobj 244 0 obj <> stream xO 0-L --´hB_m9Ǭ&x[,ba߿Bba&8i~O{v^~OC3KCt ӉN+0|I$(ϟ?$HdI=wz;u/I9a0bR,x/Ќ~II%RwAq/Ik>s X0| ǐlI}nvA8 qi|?nH@WB=FJ 0d%т$pԗ3-,dpHw/-s,q|b`Mﵨa$ Ϲ8qUCmfF 0s7I]AQGca,N$m?(߱1_ w/{G=HlF̤q zt:!]M=%99 [ L?dTiįul ` O -A dg#~O3xM&ow u?79dn8I#Z;K$Ơa;2aŽ6/"f27 Ae*dc ]ƃ6|uz=D{c?mW d27`0vz/Zc~G>)P=76_qXL69w:жK:ߚ c ~ /gĆ6V?,hꕰKO}EEw_&s@SSLfFֵ-k_<36A U#*`W+K1Q;)a;08Ɩg\!9]hC.+▧G aۄ _ƛ4l3#`ɉ~ -9'[<*x7D)9&tCi|qB۠'O/E3 x? OT#/| f@:+g6S:u5.1¡sy|b>\`>XogJ2*I|ū;CIoBrx>NaT^^Fj]ܣLyE$MΙ+0%. CH;a+TmqU`g>#q묦(G `Jj|Kp_ @Z(c3.nA"7NTGWy|X02-hvC0֙Zյ3#V_me`j%ui]Tp~Bp'^]o%\mB^=*Dp`B1O5ׯ_L$oʼn9_]&ۮ%V[6BI"Sƅ!/lv+g@t:7 ˋ:'s.DP|zMU2ڠ&D 1O,**ƯAmXSUtQi +.nJƶ4tEg<b=,5٣j1v z 3Y2Jk9|Lh!55Txᄝa|^'Bϟ?Za֚zp-NTLS@C=48\L  ^T*<5XI=忕AM4hb0"tC.˯V` h?na2yn-3/Î78 p׊ 5_ⴸ#ay,|TIgP|,HH޻sAͱ#=/znFUo!P7Ft8{V8:ɽk0ԭʰBky׸V涓#zz8[,ps}N k{ {_1mr5.Î@ Ό{ʏ$)3k|ȼSKQ#=WNI`1y1j7c5"Ԇ?qIMGJV4n:3Z'4<ɝduO)nnUڱS#sۻƅ5[> ]X݂l8nϲWIu֢JJ8'!_R\PJ`N3eK,{Į5^; S/.}Ucb=u,μG4' c{r5l]n:W4 vO2QZ$蠐Ɨk\Y?5‹ue>{~tCHkj 9VL$ۂ\NeDԎ'%\"x2?Qdž~+PG}Ț-j[ E=bJMGG^+dw`yDUڇ䩎mfoCZ2BURW5>*j)&-^rc뱆U,!@΁wI$,9xzAދN5^5[ꛗΆ_NиޮNvNoW(s6wҚyWvq7OH^N8BZ&L5{$2S ^|vq3nu0y6'xp;0AzmbWFls["w=&Z .y (1"*Cp2GKzԆTndˬA˳Ov@A6u e>4pÁWqb҆^kdlh# v+Me>4:HL7hۙe1b(a`y?#yUK|-J?idKWn6Q]6-zA Bj4$_)[,#Y;#sEGMUVkHD$A!/^[H!y5`GסWc+|wjj4ްB݆ٽASWǯcRاIHwyOzjj^4Ar`XqmF|̄"Ώ? %^QLҔc 61D{J܋Y8g>3?z?$W??!!OnϾzsUfJ4mL]~78"3UW}}=@Kn8νʾB>x\n6wO!A^+kEw9I,L^wqX^4WgT̻ .nq̍?l:=ĿA xl~~3Hucro<ƍJ?\ G?!Oey/sRSE_TgВBln N+˦)ş Mo ]'9~,Z)T5>+ًƗg.XsztglJB%go~ڷY,28|9@E|;pfIbΎp~VjN($5.Ub_+0-#|l޶>38Hm89lK W,svqE_!lqNH 4>+կxUj4;__W@d:8q=PQ>hJm-w.+F1|pÐvy'Wܚ/ϿίH{t鷹E #.v>A,hkX/4M^ ؗƗݰl9_xZ#7Wqa Uˊ؝W6wvZ}f70Ea#d!ylG)qmi˼J ɫ%e7X/eY;5 l3HU+ܤƸK4ޖS<$>Ȳ^3iH@tMZ25Dmɫ{xn9sN-'L6PiqY2w|me]6QKQ|V0^Y㋶5ǔeB;3]1eaoN^ ةs.nQܗ'|wZKˑU,R&VC5٩ F9Փ~ĸd\=yUiy@5̞ X=ɫ;RTY'6zA-P{MB}vɑ4ޙ_fe{fi|ĭ5'+Sʼd !s-\.eN6ɎrY[x6$GέVKe8vCnFՀ]k\ e+M$4[dshxc/}2ǽxR`~}}} Y㰜]k|Yi*9ǀ xe"c wAc t:!):TWq"Bd€Iu]6SZOTki_ib/Fk\6' oޞ *Vn>mwG/=AfPy5̛KLh|Nm< 34UvƗ$ڭfa9xE+M'i{:54%{T8.`lUu=@sLvow29q$7BSΕ)A>fFkra9RӓEQiT2T?Ϭd'?Yq3KwhhWL^ 8ƅY~kU"< I/"d]U-OtU k2lߜ\jC,B14uV!JV٠}4Nw KlBs-fN&_M^ 8 _m2xqvگj5W?NBiBN`U=I`[!4Հh`˩µcfjSᄁޠd e /TcKRHrqWO^ 8ƗU2ך(kܺo --ͬ8p$ǖQآ*D)&Z8;7@#BB{Ch\ +50H#W2V(yM ݐx"m򺕪j5U;ҸJ2GYƸ_E"Y5u֘jI凈+D:_)ɼ*޶. ϖQ_h|Pj4wXͰR_c̩- +[vEu@,LK1SqZG} B_Kg.Ď H2%,P8W7F9BS>?K)4|IAH.O+LdK%OS"ҳϐ8Ʃs&Jʔ{fS~n?bӮqmK~<Ф._OSOOj:*a;ޯB{yZ$(Pv{mwE>j|q1ve' ӫ|b E`aH>WҜϣWxиZ_Gq=5z {Q% _p$(@W:׭rgMr5 CIP4:Oˠ__z"Q՛8mS %^4U}}}mPgZ.Q\w~b|NG̑5<{:qd!re_=qIna@9,2s:6 ]%ɫ f?-'h|yg14hҊ{jѧ }nzX$UԄhi\k<2@y1&ߒ&柣<Ƞ#[(FuEEF`8ݍqajqiaē8/ZSOh)m;G v+K Txz2WxT4նNe`t?b٥Vϥ ֧?\ovXnEB6~&J[0 oP|7:5.om/jEPpL2 SЯqmStNe>MkG&j8IX;8O %:bө{>y y]{8uo>ѱiΕ;$e%I:*gAƑ*_~]xk-N6LjB~NUW%NKyyK8\[c5D_0øV6{.1~L]NԠ]z4Iߟ%Z(W ;W 3"ws23=[ҬqI򪐶%JZ ~HКЎ˫S`$2F1/Yԝmk޼4DvmuxBWs.#y0.|TztgpUJlFU*cZEo(+.:m$?"̃ČM?;wneg0$W8(at6HU'?E 66W^_4g'9x\ǎWPr0{Ҡ{a 4MAcōqğkcؖl}c.5/IE9+}C4ޙCi<&l$0A[>m#g0kVhpƯGt-Zw8%4ᒪ!"f1F> ߵC2G ۵z$* |1INaT6nI|VV gxr]P]/"<[}f#\2n ߓ*7' |1su{4l=xpaE9@w7Rr ůhX1 x\%5r_C=p@(>qFަrWPUݮp8Ƒ >`Ȓ/&ءq_C:9G;o>q0SHA@.cTC0T{0,㸻zv*Ar*4MCeTR"n>z=&(%^ISr!pqe^.ϩ6.(;;+ּo-8. 0te'dW%>BƗg|km|ok;9oP8)f zAT;+KryQ:'}\ꤠբmjbZ8e@ZAY|{;mNO)8{ĹIUlR=G K9܆uDw]Ydzrp9_INH^Sıj.ܚ cRAA],u g7c_$5~/8֔"ݶ!fkS&(\61|7Q-ǯwk rfr玾.0׋w"_WeWt\eK2 ɫL]_,-;Hm568L.EP Z;gp?+b#-!I xx^?#t>\{<́ʾF쏕,Œv :t:Ynd@9Sy ۭ*ګ+' ձ}s_܎3q`OE "xJ 4Cb>A!ao[!JaXՂ'WRdg_WgcWl1Ԕi=[|A*V q$qV5d:ydE~uig*"6IqxxaX3(Hb}'MG\6[,pNJTgRȞ2aɫfFTͨAct2=rK pLywF,DY gF88 [Oau=i3M1ڀIsjϤXC[%c~14128Xevw VVty]uW/c@' ~:`'V^ooߴ3rx\NEQT>2$sSqvYnُ^~#-Ԅ y~GY4nl%n|nZP3G0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0VmX`|&y^K2z\.=Ӡ$$v=rU#PbMbWPw3%|iWg5WƩ1P#6[4%ąҟ>c[gM?!mj'<6&#dAJ6 =c_zY |;}M9og&H}׸9fCv4$?s^/uCpƱw!#a&7~%_A8<| g2k)I6i7¶&SrOͶLrv+6 (1 endstream endobj 245 0 obj <> stream xTKo0 iF5[_.<6nq6;A_Jy9aB ??yvuQHS!HH.oPLs4y6fB9Ϯ)w( 4e +YoB[兴*@0J8 MgO)9P'v T$P2]T0ayo:.#H!1((,eױV].:otP':p#٘adxh\UMfQI&2>rDf3nٯ,3BP:uBAHL/ܱŊ&i|;==yxrx.gQ$j.)ѳ/Tao4|`d wIǶh^K0(^5Z{5%*ŷ1Is{:CXM ]WLBm1'z^?eNhjl}7V*)_\6˹@ endstream endobj 246 0 obj <> stream xZ[~_`T2& cfS P JJvEE9g.4taXÙs;ͷw"㜕*|{ó[X?x{Sf_Kwͧ<+p{,x$ƪRgxv+Qd**;7QKZ"~g)J5\lR%(/X&p?[7J|RUb_}p[ǹA)ήHPbJzP>*74 v~oYwi[xQW6L\d-Q%,] QhJ'0[|{nPXGs͙ wk{VmJ=Ԭ[׷KQݔ}X5CWpOhc,85u=e{҈xF9JVoŊ~ܼ6'sںG:;X؆|&7<Ž:ڤCzM~8e,2~|PBjJ _ِɕ]HQ$,"ԭaUZ~-+QGtzg#Sdwu6]:do2-ge=@vz$M(!„Ǣ͙N"fuoN nK#ڛ/qLDq=umBqk:A*  IIձ,6۷2Hssi=F4)a;EV ʲLXwN? -5S(QenRP 98xOzѠ>YbX7D>7_ [mf&_R2.olZDݴKIPS 4 >j>{єsbj7tIl}=Uu9hʐFiS"H$)H蓫3Y[wAk2F4b>dDvԬr-mw:p. :mٜ\|D,HMFUJ`VdwA5.7m+V\w?tBRŸb|~m4葬ɔb 5&?eRіfoR֜*1Ӊlrȴ!n?m@*mq')z-R[(i&#^4lk<*MGs PbZCcSYbsS d(>J]fH7_+S'{3 ӧ Tۯ$[Zn*4ט=ł65ݮH7a ?iGZwcnJ:=(뮰 ~ZjDc[ %譴lHvДK;??3uD¡+H2A^P\\,:b5cNGOi ̘s᷿?Ъ e!fC2<ٺL_6:W;7Zh {Pȁ/S7Ʌ09eLpv8508 #V7%N̍Lql>ǫ>(\xj$9*˞74R4هkNC6خ`M7/:蜮ƹ1+n,Xn7,65Vԧ%?7wT8> scOe2;\sb&|0hFanϋ NZ|lt˺ JPQ^ji"ǹ)pO{aD=Ok;;pcY(XySB4>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 248 0 R/Group<>/Tabs/S>> endobj 248 0 obj <> stream x[msܶL-C؎8ee2Qs,wRҴ]/#S{|.} yxDzq]p ֆ=y銟6{ ?EG 0">k-5pY3np&]4kL!$X|#PIYx&gc.wO=L!d\qdqzyV:ͥ-3nzm[@3nҹ"uhk:K3Vn:p[-jS 컺Yoo7hݻͪj@!%zʻ^ܯ ހVBޯao 1V _oaxu Ay9\ FeLb^=AwH"9?')khx@#@) u n$v>H $6vK!}mO+!0tbuմIfVċ5 @KV;_a  o#'{y ~[%2%m xPS,`R핟/+*X@ 1)(: zz" R<9΢ԒF+;5Yr yK{9 zó#R/GKvģ+K†yPy-$[[xrBE]T.iV0gOOѓ7 !ŬaZϞ3œ'&%sz&yrt\3Y$fا>Y鬎kѺM0$LFl?T4-E)_0pr0T0!N U.:3Գo}^uyִ3XS;Mm>|ꖺֲ#'Lh,k\TӃ֩w]ߧ|QY̓YC=iKS<9=l[z GfmCۤ'lɱ Δ2BϪ S19?[;m'Lij%5i3XF4v4]e"Qf"xn%y^o)4_fq?6ztB/ֆ9Kz[&ߏ\v<0-k endstream endobj 249 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 250 0 R/Group<>/Tabs/S>> endobj 250 0 obj <> stream x[mo6nA}z6"^?n4Ca8:8{mofjIQuYh5!gy#=:Y.Nß(anYm+Nx3~<{[?o{di(Vmep&]4kL!$MZ#PĤjbjx~X\:rztXQ)ִ~3.,N/ޖ}s{M[@nۥsA%RеaA-+S,+U^\݇zϝψ5z|c? ]4yB}]jQTPաo ytiպG F`6zw<q$K?ŋ#dgꡭULPQ}.'Xd &jQhD(2Wb5(bo98/](n+U4Ihδ+Α|WΊ@&Ns54|[xP|҄lZeۼZ2#^ΜA hjC(نY;L $x|Nv%ڏ-t00\5x6<"NvFe 6ҭBMf 1N`y*BEˇʖ + -,æ,axkwG)]ϣf6mp%{ӈMɱ% S-y݅\h =q={zBOl=Mtꉩm USHQAz_ޝU1K.9j7['l7SLXjvP A[',ɱH 2 V0fƋ"eGN(`Ѹ *|\)9 qƱfS A]0Kh3N^[>1[q q)%\=i /0`/_5_D)-4p6\$dC aG#9=Lj7! &ZJS|h~>{?/.g |Η F7iFҚ"\$TXx鉀K *LNY\<AJ _2fe]rI+{ {+QL 8,L90~CCxrMи#gOOѓ|=am̓f T!($˗e(,B.hO% LuARw*6ʟq/{lGkW•ǸEpx/H6~*\AfNmz>MC. )qZOOZ'״k}nlW t_Ykͧs5t<$Pe9I9|/-hMmBs<ZjAqG^NX*rKx%>`4ռ$Ouݸ׳'LinDz܍O).`˭&[nH*s }MGD3dؙ k+܌jLB'N@圆Lk3nv@Mp¶j|};+ioT젭y tL?GpQa OM'`LĜ~S+oUkCF A˂*^ V0/}7u )%I a;$ \u"Zڐ: 7\Yf)w%ҟQJZQr#?aOwO׾;m'?=:qVoxLDLx2}F{f~{sL h= Dqn0/b3jbI 95:&vcXxr56W_~x(XEU6 Ciĉp5ysŏqp)ZXfuWfv~"VrXrt4"[RZ춀 yrL_ !)]}xյӤs]'=ǯ o_wy* k|"cK LZ{,?Vqk,:&b==R<9̨Z`?W)\c`QBqQS<9Fe(Ak}JG/D{.)Ա3S:!NoAN+w[~G*?xH:4;xOO\L(@yXς[:Ϳ_w&=bxgT6? 7\/œlšmV7?cԁuȽ0R˶,FjS0X$q{zOȲQ3>٘q7RZ.s)Ě́m2S,9urN)7J93㎓9 r Mzxr4͜E"gAJd75%׋+AS%_N>J'; "\$ގq,{zOiGnڑX!{j6_dP==aOSr'|tg<.I[{= [xrl- ,]'/ھY4_NxM_N/fuԆ~p>0/~p1 lKjm ?5j4m֎1MSD& lGGCl<1W!5;@/)e{0rO69ɂ endstream endobj 251 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 252 0 R/Group<>/Tabs/S>> endobj 252 0 obj <> stream x\[o~@@X4ݤyq:MHHG 3^gpQV;!gr\ޣIɅa$d^9cy͎? xwRgvg7@Zr+*d7m2gW5 o,Wݬ>|#ԞIWL_\f{|< j5+*?~8~v bN D2ƶzu֕]HKKa*McvR<)m.u n/ {iV61;gRN r˓&/m(Mq*1t*Rhޯ ;a)u;=*k֓/;;<;/-pn?!+qK GWK;VJXKjA(r,ij>bP]_c$QUaqyPh[dA})?z{1oiVW`0_lz-xB -;+B=ou\gPtH@1K}~(d `#[_ 5DWHo kL$0im^kE7[e8E*9>gn=9?Z~m=zS 03~ގva5]E\ԋYqx&(^ĔIi2DB[DF.6 sRt;*C4ʃ`ʃ#'/5+Ỹ#-Z[` 2œaK(nM-mcueZ϶RρNѳ^Yvƈ|=Y\Gf vS:8-УZE!NKY[|uoT񢛷"H)t4YhuS<9֭n$wR']Zv䄒 m ɠIXl[E\/7řN}Ӓ^Yw3먝5^4GBC-5dV'<(œcmбMLڋ\yaNzELO242ekTUڗ !w,^cn`Kw!'=3:v_mVA2\HV1l/Fw$_SSzŃ2vڞpOТiP{9H *)(TL_?<{7v/C(î/_7e $3W2,`X4`==X'0M{6HiX,pu,`AA==aOMprH6AM u^9mjxUŢO( 3$8%mȵVrL&%)؜6?SNx})nO^>+Ə)Ρ0.Ed8Yɐt$yrl8I۾'?m==g'GOkd>VgVgOOӨ%A$%H ~ (;ڭI7@f=>n nawNVk~RGy\x9ˏ%9œ{hh H万KgHC"){dFvnD.Sj }J'Q qAίO>G3БgB ̵m8;1(VFN"1jr%>Q^秵XЌ'0œ 4yڬ 2tR`Qԋ)>GR3H" -=[lA9 5Gxʐմ{/aglC0=Yh,#5fqfݹ'9œ5J74'ٯKz"I.4`+4foE>F,) UƊeaڏp&yr0p䇺vY;cH;/9IE.XF'K 4o\vW90TD%oqY]!+fARf2e)46߶Nmu8>Ť?zˎGP=| 'A%Z LgٌS@&SKV}sx,lgR<9z [O'SH u>+: u t {*؉ƪ'J`_, ԽO")k@a2,bZ4b==X'1YqeY$Azxrդe;39Hi=+{ֻn $f=>-xU"Լ[Ú~2BcW_"ϗa{ʆ9,4==n'\)F~* RxHT0j0gV*dnb1h6"\'{H`kGsYӉ}6=Ɗ=hX/xx/pQG΂lC:@>ɓKr"4'3Azxr͒|BU2+A`뇭7qh-{zBOYlgX)Æ?nd9+#9zҶ [x2lTo)n*R |{qh4g튀?> endobj 254 0 obj <> stream x]Pj0 +t'{(]Rȡ[ F6sWvwP-#' &Oq [gOy.v1Qi1pi i@&ˆwJC4[߸ %TۂIj]l ~ϟs068\ȆfTM%B,*$*??\Yکy@n$Y<^1 q endstream endobj 255 0 obj <> stream x| xExUuLdfѓIBf&2HCEUQP@TX$Cp xo{=uI{U=3I~_ {UիWUFGba1\((k/QPxGg!WT2|[#]^VT>!od)-WU+gίP0%b(B}6C}nMϸ!ۃ,]ʣ`x͞fK/ ǙàBA,_! BH|k™U5Fh'W- 8&xqA/2@heB亅(j[T]? tH3V9gľ [-5lCV4aB1S=F:DP?4-3!KY "!Q!LTYTC:w>A-[h1 RAC[EG=S8BgGyl{s xK|mn ϡCCbnxf!W*GS$4=hf ۡI ʷA_41mP e}4o? a"]W3%:xn1{!<+azx;YӾ WA^5-gc!ٯq81cwM߉06}'-m;Ʀo ƦoCa+| ue>,05S.ۀGSUʕ5*\F95]1}zw&Dתt؟iw D-.9(-G&F rq D/'fUSv:2Lr@fx&,2 o 5k"ؤ3T8&?"k k2$QQ-f}<RvQ[]ZhGR8O*A $-ʿx7TRK_9KYPM̐6UiN a^b@Db" j*)`$[#! ̒1,y%B` M6+`bTDՏNGQ4"C jb+).k3%u.Ŷe( _J.sAIVu'>GîsK:v$~N:500; I'-, <v`2y >,oE ȍNmpBP:#o))Ǩ;s/А!;`#/S>d6N9LxS]BPE~:pP^![ d !iȱa%(\Gahh C3c(Ȍ043L R 32ef) ͌043 D C3( TPPLahf fwY2Or䦳 r#>rvz`3YBb9 Z@kr( t`sYc9 :aeZ'HDx`87``08N6"TG˚r?橬, fD6&}o~dzO .(7,H^#R`{*5@O0 wz|i}}u2AEhOx/noQFo0$(QJg,Txu>\?iG/SU,TcۄI- JDžs#Rѥ"# `v:>7qv( \V"ӳԔhv4 Gj헳t;G|sI. a`.%taZ^)D1'$xG.}ioM}GS8 ^,KQ0Cvk9WLwE 8|x> B@v5XumE_[o[ʵ,2`8"=& ÐqL&Ǝs\9)RVM9NrY9x(2/a(vek §F =5J7jĐp l)3zj~ɤ?zwĺp̻3}=z[jV>Z(r?(>:Ow*~xZV񼥷p;s*/+Zx{)wyz?ԍ˸*hq)>d|7N7%SU>/}ElwTxXhHp'c`d/ض vu&m6Օ2ȅ>꾙h U%GG":%T RY@{/fb ormA1 TqL\GPAbb-)"r9DJ&DwxPUeø?6ޖ'iHx}G>9z3ƒ߿( &"PLIٵqxG]4sѝ oMh~uʹ~Yc켰E7h+JFK$' 9K#ޏ9Dtqkyg,Rh2OIdԉTkI;3MWS_Kmpy7"m%/rwRT=:9ziηɍ1?(fYK,@-`Oui4l)VޭhܩաZ<kGҥK[)*d7d(ѺA:_L7UZ'b{IohZz\Ҷz!ٜb2ɴaZqͩ s&_gݸyC7aG.Yw˓u'\]TϊBH } #3JbcTZcT @|9Pp_TXf\8ڀcLR &<h ԝvy(ӌj"cVjF;rRSubZ.Ab%ˈeJ?ris>[9cԞģ~rTsYK²y˄>o)δ/W} 8iA< j?<4j}DM&/,+1Ã, '") jД|:{_ $80FRzI0s*V!9]9([4Thҙ;o畾Rs搽7v~ ͽnNw_{O~x@;x1>Ӕ/~;Ƿ?t -:Ư#z_QөƶV6>s5<ŻEۿӀ(}ivc-+Wnaj92 jP6)4T`GBt;xjpy 7^)G .ak-. RwٵK)߽c| . !|PT>W\ xAɡ$~vA!h~#`)Q Fi&3cB‰TF*1.57y2.gga$>|r/-m^ 2*h BZטA0M$D3;,n`](G&a (-% ֢SaD5XD*7:Ĥ9CP M$YRY܌hg\Œ 㬉U>nJ$f+Or`U0lr}T{N?xx TM<0h49RwA)9~갱r.n`fzSd&GQ?G!z7Z̴Ӄ!Ǹ4^M+N;Z{pJ"lT()rY;y\p3߁fSg62>I-S$z6k>7)xXcTDX BݖZN.=xo욟 VD|?&8s}oTws1 =ah,9W5FC(Z J.pakiQ=FlZM: ڶqg=[ak=&iPS"x  j=T]6[=m?Cڨ~$ך4r.ś!; pf9;c|%E-FGx6B} ejfbh^{NhDh&2 Itzk,Jo{’e5X\0?Eȱ_Wv ݎf3@g%waUIO)73'7*Q)0Ñ} /72d;l_T8Oq|:6Hʈ@%U RR6g1P{'o'mTN7;~!2$(S?`:꧂_)bQ"vh|Gs}DzJ _*Bp4b-$jDPi2 jL0dsƬS>j_ac\ٍOt} ?4}_pòqov6Xl]F7 _/=.F k%sOH%[ֱ,l&CW٢|1y+m$~.|uTQ)C/J|g2ѿ6 .)o5+ߓmmD!4tw:olNCF#hctzUd` a8ٍG!(iM[.s3gonͿ_cd]~-4zoi0 .wJhEd2B>Yzm)`wWw/}xKإ`iAՄckѳX 4L"M nUV^p[W~K]IߝWO1`;UZ'p[8`Y9RӹPݡ9#ԗ!˶fAGRdnz1[uVx "jY"ݪ#%f>fbe<|&% G><|w#$[Sl oT).B5+tX]eiwN5NAcba!A٠0A=q$uLZ)0'Yj\5Jܜ\k׌7(Er\'Mde]\|݆$*!d{iջE^߻0b<k|D3#pDEj`% 0DӮlNG/My즷2QSgHh;8%5ŕc⵪2dLT穎u; ҈ u3&  㑭_aC!R~|04ߟ^]7~Jw+W-+n>,;t'o>Ƀf/ֿsTYry_q'AIsWNe+; Ca @ED{w,1x ϕz=7cC^3`A.{TER/P&Ss$:Z>:O[Gqwi$9(Yɬ=ʗ8w0V<]72EH=#P ΂[3Įs2\z$Hs|-+T&~K3l" šZ*G^ ӌ&괸,/v[yn"/(O%?pߟr܏~w;'O?{M$ЇgV`o1 V;"!u)wS4L~Iqq-HIx V5Ő+nO V6A l9YncMkgy[Aىws]xg^^+K]ӯ]S4h}FI|n r~iTk2Sj:8| @-^ ] /hhFݗ04Zz!$W+({e&6Շ 7M%'mmݮ:? $cj(T FѼ ѠrzVj~Wsȗl൰kn:фEm86Io5u595jL!w9S\#%a'/i"I}<3=Q zS8dx}Kwe~S#SoaYɿqةO읾Ȟ_V-a;> 2/n2MqcTO`V7AB1'8$I=Ұl;gp^tO{orUl{b)؃z~;Fv5]*Y$Zxz&h[*yUJ c8+a8vA"2 u< z*#Uz3`XXJF48}炕נ't'枽W,Ts֘qu&n:q9MꦇLjN:5Y N,6~E[nw=9#w+^EloȭM'fe([!:~;LuFO jjf8UubfҮ7v0?bHV37)cw zPY'qZ ɇn}˻cOb?{,/J/i eŤo֍J|#'~ n9ݤ2zq^Fn;$zBG>@]|/:\g6{Rt6w ]w%vbӢiu#G,ntA;he*IjذF 0c?ͬ@^1jrQˊ._ [f dpv-/Z8Tؒ] 55k!2'ywVNj;1}b |fyD` ,&*L3iҔ1>/\;$h0!!Qg{R!G$&θ Mc4m`&hb(aF4/5BeN5"v(>߽;iaɆ1[7OZ/LV-5b.8䵍s>ݍ-5`)H5١i䯂)2r>e[Mf, 6@2YuV 5\uG ļIi\K]I},EV|V>;_ɏsIhٽ]u~63@!;,֥"h5>ޗwms/)`t5N1NC_!S"^ppn;ㆴQq"~BQ;8,.pUu9uY)ިSl fىG(ey=܍ VxTښQi7ɱao(Pa4:F[:5n..̓mm)iwTVNzS𙳕^Tj4Aτk,AYmgKI7wH`m՛Te ҲeV}C0B UL;ڇ}-@مn}tmv"sO{uƿs{waY^B,4AM05lcS3d2֐8i&c4&ֶICk2I&3Vct:Lեse] Mig2ߜ{qw=s7DC *F6sdwZYUtAMnMV>?c~NfNRB|$6fnN",l>-J~/7"VcBCCLc@O~LLK5`s%B>B6ۤq6~U#o?Zf㻮[S5/:q'_~cM?xnduu]8 ~K?4lFH=Y@<7Ƕ_FlqK&k3 #*[|# Ff\<ѝZQbEŊnej 6>ᫍ4Hq L|Cb &R)='!{Q1YML) 5T|T<9X)@.uM–wSqv ]j7oص70 {-N̙F@5LAy<Hp9 (;K]vm\tAfPql)[ DGĭ 菈_ zKk$o4)XkXo\񅣩Oc#gHw? r .4lfp,tSq י>'-51%1i$ $%"ydh$px{>ByWx}{N/s` K^Ǽ< Yŏ}M26aY8癜Δ4Y G;os3nMAAOL|\0+Ky?8763Ξ:U]}2fmU{bǜNso\T\WܱGA%NsO'N$'5{<oR(D! QB(D_?JRkB1=?I̐+_P^ODfdCi+`耉-(?jbzbLL̨w)>VE-B5`;[.U)0>vŰ+&džZz eJ`b e֨5'&^A#cC;x=yQ UHXA`'co\x30"p痝Yr)A|&C6|5G6  )t~X xL U;|n  \yE.W^Uݝ=^}u|o/-k];z(ͭ`}7$ֵX l bZG^FԼ~癧ߥl~lJͤrZ%H|1|1a]e!P=uP/}L}BzeQ#q = ガNNUM @:._/RZXw?G#˰R&x7x!ڽ@] 3+88Ey5+:p/")/߁no5>=:r\֠'FMAzF=Gu<`tڂ5tsλr6ր{ HnmGIS\R\Y,9Rßֱ4{aV['as,vd:4ZұۄJ)l,RXhĖe-يln[ܺg[VZVY,Bߐj3ӏƈkF.?C:D/ saWD@ ^ %D]IG_Ith Ǒclx;-v>aG_P^AuL9F+ S)77GQ+ |F9<U+sfbjBU ܪ{/ړwy0Eիj7EɂK OoYMIIk+AۮѶi^b+e] {d@gʕ55DK&sʋ+,ʼTtjۼۛ6MMZD^ȩ4F4Ȍx̦FHYآeHKM1EAMC#{۪W! X߃u֍X7AnRTZeZFjBXsi.z !HMBjRF 5s 5 IHqO|V=gQ. sWmֶ߀u#x6"I{7y}Ey$8rb=$ ?7c,OW%$*Я# be4N"{hIL~_3,f.JH1zw^NAFKBi'uZ-/ZF,',\\$iOOKe֩mѼZΪ-ZВ-nhق~' HB r B%lMdqFڵwU/eN_ƽuSwO endstream endobj 256 0 obj [ 0[ 634] 3[ 278] 9[ 667 191] 13[ 389] 15[ 278 333 278 278 556 556 556 556] 25[ 556] 28[ 556 278] 31[ 584 584 584] 36[ 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667] 53[ 722 667 611 722 667 944] 60[ 667] 66[ 556] 68[ 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556] 85[ 333 500 278 556 500 722 500 500] 112[ 737] 124[ 365] 163[ 556] 1688[ 333 333] ] endobj 257 0 obj [ 278 0 0 0 0 0 667 191 0 0 389 0 278 333 278 278 556 556 556 556 0 0 556 0 0 556 278 0 584 584 584 0 0 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 0 722 667 611 722 667 944 0 667 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 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 737 0 0 0 0 0 0 0 0 0 0 0 365 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 556] endobj 258 0 obj <> stream xSMo0 Wv*A>4PZ* _b*Agg|e^؋mcjh+5&uSCDվ%O+mDoۓMvAbkىGvu_GӋ(sQz*r"vM_CK6S5B[=,ݓh!k>KKlQάߢ Ѣ*'p``:$QZ2\)9Z\]dL/Pi%جJ8b*Gp΂ fOLiˢ(KK2lXP yVj_GQf~ۚl&wV@j.IJ$ _3`````qd DěHYh(bZ%DEg7ƚ)W endstream endobj 259 0 obj <> stream x| xTEh]I{B6sNHw B@!(",0(hDEDGDsT d" :}ԇ+$yt{_ onݪSU9uΩSJ18 i$wlO|YIF>![زѕZ@p* }sTBꭣ+Cz]Nh_=uV͜=5$} [.\Hm~OHPw[g}p0s5!)~׭5@Ƌwحw,;%BϨ83 R(#;kf[v}2 ֜t?`ys$|%H+HSO=3}WڶԈua?"$ҋ= =], Hp$ &w"+b%pZbtSd:ץO QNO|Y2o>b("BFgM8S‰fR|.p1ǫM EGGrxJ2JC&. zl'"xF3ܟg>O"0V"Bv]d>?sԝJ42xt'x|N?[oe94'$ "d)y/N&nOIyUϗ!s# bqy,JEF*s:}2ΐy85SX/rN;u]Co1.aXiU„jGiTTd&qHƗDmiR֔d:9FTk |WqF cՎj!C AKK|rd8C{WT T Pna呞/[ՠEr'bK)jp#S;O)j@-`OQե;%hǩ؄Ka%>I_])l "]e2p1X7UY/9a4DQQ]uCg㒀2QhpgFOŷim4m4hm4hiwA9}c=Mx 06al|퀱턱c[qga#@bFYtg)n9d4$DjJUׄȐӂv95]lrB ѵ*cx=D9,4P@oC:L<0o@xl͐3<3̟9 Y bOqd:p} ՕIeHġf=I V 5ںL_}vd}*RC%뭨9xG~Pv4P嫡/iLj&ը0.oS($a ^l*HLEAM5^Az0$/h8 X4p@@arcT!rp~2 B$y | SEtrjbg8j4h/|D ߗVXu] #v_?;%?NyL٦}%SBD`Qj3 _䑳UT+:) Щă(CԳ2>JB Ca03a03a03aAf`f4`a0S00D܄00!s3`f` a0C 3a03a03a0sGy~rf}#r=#At!m9/z;~0Й,wZO._#4+ck|/ѥT*˚Urn櫞,ȜT>&}^ǷOHӕ)٧Ӧ7hhIC2} _(wc,< "يM Y(c\[e~# {9 Js瘜Tx5Ϸ]lT0u? "QBˮ* v3q|H$n8ڝ.^3s`5Nl6 %K)&]xfIIh_v&q*D^)K&AIkFIctSqܞȍG sa8ғjgBo Id ':Hy^_8y+@]SB]6.g^gM31!.GLOFS p"Xrxh%H+I{_qGٰr9>MЪgsRLY@ aR4H>הtb6%:ՆE*3HuT0 "kj*q :]X% !Y kfuYh1n4ׯ-4f\hual-XB23{&Q+R|r'妺RMm2P+ /ǖH%AZ&%r;ڔIxउyK+fɉgzmҠ[}`ь~ a1v%2N;n ÛFԊJ~W.h=zrvσ8g#@uhNa/ (Q}TKQ+L"ф t4l"AjGRT`G5c6$0-Ujڰzh#eȴxLO|j+a3ڭQ`_ O6\ydv$j1ԑrpu'O[7Kn=%k?V(GG=P-)\:Y*X\vYu:?ߠcF7@88U?ZLj3Jb6֤M7k 61n2)h2W Mz<"{ÒCzGRxX<3oQDz;9n4M80af8Xp dLu94)jKl[e`W^ _T&5R'u~__{7*zb 9^c>"\s4 b:bAF,9妶hm6UZZGnꊕ0=^*;v Df 6P 3U>9ш/aT1jUR"БWVS6 ̇Zݖ< ]$&ݴQI)v*7҃ ])ܲ RqL8QRoL| R%0`VvWi|fS~lF6BFg,mZ 4ITR:cE%*q'ڄFReVQOO1(Ti:jE8uBg.)ycJcY}}!^| d<h<X]j2d#܄.޸rX<% -1g`x$n2j9#e-0;\NJLh{ァz2A i^ݎ{mع_?=L C.*g>Xeaذ*i+Rϸ~]:#(7Y*Pc|lkbŷҝEI'IrO, yBW% `1! $K/7A 6Bq:roGPEwѴg 9byC[yy3nX=|ᅧOvD~qReS!MpEP̂'t2 h'W@SZq[9f$ c2j6m+Zii ֡mYp4Z(@-YRK$8dm^"!`.P5Ds/ӆZvs%e1p/!L \kFb$n)-*؛NrKIdds×53JWn>pͷ7R K{^cA?rlJۄqLyшK;7oyL`q#'pQ# 8+>j$84:fsH5li]Ed8sU22K?bS?_=l:=hM6N&`1VIaZ!4fQ ]EEԽ6=8 hld0B!yI0- ?ݿ|} ӻVƭʁϼeܗ3Y9Z䞻y憎?v^{h<=._ﯻ2+W޴'Ͼ`q-DAhYŀ9:w.&A7 _ h?4AL\ɠV,ns ȀFq兒f{տa~}[T4zV ݰ7+젼Q^ *hfjGa.>?qHYgzwlQoyuЅbE [B"in 騍 JZgs諍&F`8|,M O p#GFx*n[x٭K>Nr⡣y ANokTUmSнW)tv`I  Qcl,-1I&NJ3[ڤ'ܬwq++_lOwx}N 'W.e;:)e)k)DB-y^ފ? ] n`0.`%i3bf]5:Ap"vQ( >l-o;ɭƣOTLW&W\8lȚ=ao85FW 5h#w%+7>ډゐlv}%iatZNѡVc坎ˆyW}tQ}~?br1nl{woq\*x_ۋ'?qCVѲy¢|Ygd"ϱv'Rѫz#@)`yL'ҀjEcQB]ۻ{.u8P$xɒdZa4Zʤw0  2a 4ty|ƮW ϝ"-K)-PT+g}?޴u;4T!NG^F뙙ttF^ $ %1vAN"iNI5ry0Y n,z[e+\%zfc]پ*˨f>&Z=Iهzo].گͰ:4?IA+H@.@`+! &C녬 OQԨR 5.HhUܦ_QoC(ΙW#rn7&m'Y iHa$AW"jdD* FQðJ(Wlt~&!"ΈG4f\gc&MI"NITu8-<+ *I*OS˭Z޻vԊW֗^4)-|}rZ'nigFѹ-Љ%-o`|xƬxwV,Uj2l?8.ڷs/s$:[Kv!B`$ĉ,hG>? |M]Bv.8KVEGE7qAg)U0]_9w[m-^2Em5f<x0ʫӅ^$J]L3+4 #C,ԩN5I[r'qnޮ|uh˝l6p}{CscHqC6y3c͹;V7wkOE3A^puReC&|n3U)ϣ6L&@wЧhlr\/Ylju -(q'3}NʽZ5@῭_q7}gfRt&gâ[gzpsgkתƙɸNDifW4-?Q{t# hWʷ_C?f]:RtOߣ7Q'O4+o~4T׳vZ6cΖg'7ѨPn8:%SHKnzn߼/_\4_Y@W+{:7/SE|;bZ ObW[Hڲtz'ddx& dَYI[Z`w -}J(3:|.}u1!5NBjи0/@K[f_'PL*&ҿECgv? bi~{_f<,ĤT3jK `Sh%[v|U{`x>ϫWV+W ŦOImʷ땋4|=1z|5d4<;5;Cja'"BF'~jdLnp'n OpR1s)x'PO|tx$8zv_bXh/g8=у 4khVuL;֢,;UvVVcI<:s>RHin7j(OBmrɪT gP,?Et‰Qp߂ݞMdb.^= H : zIbXzF@KHfKyӎ/4OOm wmC̕]F2k)nJ0I]ުzod:P؉(n UmMBqB7ܴw>;BJ+8"6Q_5%`Tɢt;D4o&Ok$eHJf2rC.X­qf)hs`AQgXGc]"& nά3greynat&{i'r& 8ZbLLJB0 5^cv'Wԟ{ 虅3YdCʨW?y:zC)0~Ų !hVIXmީFfeq1vNfvpۺJL/a(?ՅW`y&uȞ5O%mhӯBgN?O5-+:EhJnI ޸gcӋc-^cϺɘX9"[}}S|ϯk$RģDio8G@XB池d1R3. sY/&‰ܸ.Pz )dɈwrLK 6)9x6va}៪_b7eM_߼*;*mjdrANQBiKُ4yRJWOï,>`5j%=_3{y_s//=l8:xZfcI$s /V\Q$G˽s68oٞ{?~Ί~5-^%;uYOlEgӜi,Dh/ڌ d7ND4 ,&C&R} m86넀H5): S5w^mgKHKgi]e{g~ҿ>Ͽ{c^ rs nZE3.}Iǡ"Ă͈gr  Zx^J8 VDtqyu;WB)?ӷ&^˒dgW qsT!F-lsRfiI:z, ! "bbdhc&c2c41jN5mLFqI&mv%7;3OwDxz/$93gï[U{Vɯ/ev~qjjɊ%687~Ҟx͘^?i_?Y>yZ|,&bƯziMmR3\CQ1 3 Nփd-5L dhF v .cdFGj -px>?}ü{T[̕r/,#y '7eD';02sdB}1YaS *50"t=홃ZEb _kDd%/BfVV9I:\glJwx=s\~^LS=i_/&č~n%AcJ{-op5$@ѐ!u0xOۘ9F H=]3C}cV;#gVt("N'_ӣwyw:c[.Fa!M8G6%+= |Bw_`?DVb_}~\ۧ +4E׃VҼB 2!zZg91#gKbqwFݿarjrM9s>wM[kWykO̺KrkEꡨi߃O.-?lnwHҵrKlkNņ/ظ":}@HF @gJM(fP/-/=D1{@%cYu*3Y_T^K:Ta|>gYW_p%?;2iѫN.eTk[bvgzHCJ6rO/vlL5lӼD޵r!PViQwx3N-4ů/:#&e%:񫐹fm'mv*eg #}EGOʙL|T=5ESM&63<t?HFAfЇ J e_0@2Q +PwOڋbqDOlkwns`UtD^i/N}rigkP4N#1BFB?EѺWkY2"P=}Kpt+g͚;Fğn>|qnZ`cx}6<{㗙Hyn2jzmAa`9hQ4.f{a1T0ZAE( Fe*6:w H0E=^~=_.]xw\3kժ0~ʧgOS8|4T D7DM)Aٚ]AI{2=jdMjt'V*JbF rǘG mיTDfUιs~VLEK%x",%CUHG_KJm\Jfvs L'ox?C?hLmP/Dx?qJǏ\t"u=آ;ܞ_Ar~/Rla%䵻FѬ-׾i^$]+) ~Njdei"12\}gAzq\-DG w2Q?(+F}Ă[cGD$Rt|Fj=#1R#9+BTjRNH sLhgjʹ+fHguyk{,|/Djk U0%8țh^L2p8vOm}}swޖi+廅6~m=nblhmq;Y>~ei Mϒz48ϮL)ýfd]! t6{7; iUCQ\^$q9G2*s~3FG7&cMԴ'g8w4-36uO2i}fӺMzI;9KID9}Yp dI4-"@ f璽`QT"ڏLʐJ>ញ5i?BM_%f{E²2aa q[\s4$7>GYQk+Y}_~zWk֏Mx1pEs];΃^$\Nũ6&7*ȬRVut0 ̼ ? _tEhV9|ҰElLSR7^EH:M m Rv7%`(aя.4IC(fx8<1 rO8!b2%M~++k,JtHK3)B a#!H"1뇺v]]]nGRNpqatctOg%& J7W ~۴-et|!1%Jr.5T֛H@p'i Z}5|Å-A3?;F^@t1@H4n:닊9KȭxȳAď~ad#@BHQ8tQ׈Mz<{qhZY>HաIO3tV@Uc>CRW-r_Eiɚ gyt?V^1r⥗^^r{`oҶm$ߠRP 9 MLfd# rh *sDjn1bȴ˶@'|kA,5-4BDo(!48ze  5*F"?F"*ccto(ԩ\;nre:->zK2_4aăaR.&$ӝq/"/5Z'D `j~ ,I՛cu,˯(戈 mu:{oKzѠ`xgZyb;6ZDA@)f{{:=3P6 U:B}'UvV_/AHڍn۪;ן7$0&7 Vӗw NWXovk1$$>4"tq[ayaî9!rbi9*6*ŨǣbVQa a7a7ݰvg"[v.;o2׹\!rMCa'fV+(0#ڥܰӣPYzdmCcSŜ/\Fa) #Ƞ਽?iU` G ^"b+yW:v#@ SET:)LU^?.:B*0dzr'$q{FSEuR~>hEqY y_pN O02&U <_XE=KU%5;۞fgZ65W[ 64V7[&6.LTKqmMՖE$;RF|Jַ.mlW.ԶX*-5-\YUP\gYț_IuM[}e0ǒjOWWXI̙-; MAKQ3j@~Ip-TjPfԈjGf ͔S3 Ssdbt4*[ V5Qۍc!1 ׽4F Z X4K-x)UAe׳G7k𜊲Q$vp \=/xj2ωq!JECrW,̍S {-@4_avc:R4 o$3L@޾Be.x-]RU+i[kl$Y8 N9J,PVm̡boUvǿ i\׀R<7vܶ*mz|bZFJ}g4دdf`ѠSN]KKm2VZJR^LcVJ|9"M\M抸\4W}KW^u.зCkMk4^oqf.˂عlHS rgګ> stream x]j0sX4T>@LFI·o:dm) {`JX\j9€TRgfH8;5jRא}xqqvÃޑ RMpj{jΨi@ 0f,ڎt{2>7pLS3\ \ hԹg A%Fl>>;ϋs>Q钨LTDO^^]/h*?{vCCaoij4.7Nf o7W8Z endstream endobj 263 0 obj <> stream x{y`TE[/I^IM'餓}ia%H$EA@ oUfqA uQ\QtDG`@&2Q־ν|Aշ6E~I-4x &aa_y8>'N2~;r|>λǷ0+)-O՟"~ﺫeJk@2`}ό &֩/ a;)*:U "].~zɣ}@)~QCAz9=W~l,,25a b\)f5?2!=s13q7vK'M,xԛzSoM7ԛzSoM7ԛzSoM7_K,2̫tԛz~ 9M/*E'>噅U %'L8H,ȁ0F( \qi(P)#\#|P 5ʈ"8kбЗ?N̉z'{#(^Hspki^H@᚟ A7p !<Az ?S3!)۝O(+/>..T{Rܵ5@/ٔxsL94@:eAΚRex 9ew9S+$ȣNW gΟ*Y M;S՞Uҭ!+]bOd4$[Sfӹu[S IѹSYs2ܟ.&#\!MHQbQWT*JU@}O1^.xVJ]OpM6"kqWY~[s=dN:Vvlkȑ+ƴ'᭦mk}Jhܱl&sn9$7?I.[Z;ܭ-#=Rwowxqk]EkZzeLV!OV-U7:݃:yZuZii+n7=8L:& u1LJы$wa3QH|L> >x{˧H )7Dh*LNLPBCoC^"h uDq-`Ap9ބ#W8' ,ͰMql"c`s64Ge`}A$u3+4/(0)0zxA5up&jQxN$W7l?v]h/1k'$dJ^ k{ZH[;݀%^NC\ adM~&:>BЯl3V`q]!6A^;}(4@+^.Dհ^CjQ!zIINn!w6xA[䬸LN sGrs+e*5OBfBI=4'&$pȫ"Ma1fgy$SzGfFƍV nkџ#>z$j v09K&#.!PFT2Kd $u7m1VWIq-1}}eg&&@W ayC)6Ђ7ZG8EFFj"ˣʣ֘vDdz=-S3a&Qo-i6cbԘy1+b9Mck}iڱ.}t 0}Zc>ٝhSE zH?!>XON=*N=JLt/%fIk;6VdG- CXqallHqmd%]chR6>J7 [8 ՍܨTqB|R߈J.Oe$XW쬦i0PMD9)FࣈI,/徾>I}KVLcH,m\?.?vژY-EvN8&Tq1, n;/ĻM6׫q)35:1^ww&#A9V8tt89q݅;Qf_Iї34B+l TLH$7yޝ^acO"ٕ7͓6?%]&M>ʓ^w R7kgۧ+(}tC#ɶg}ɄkgH??IYXs;qoR7Gb]3vy}߳뤲1C?nE06-=IxM_'i,a똕~3  ##`REfA) f'J66Md#Kt;4G'1=g[DwU*{Dav\hQ:UoskFyY7ʔy/+̼-bwDD'@e1Ϗ3?ivDdH;gv oϝ;;7[ݷVƎŬ"P%heEҟIZnOLl+t?% |ӎ><٘C2lWTU\#QqR jdDR 4E` *!T#*!P+_6XBek,UN퓦[S,^C[g{b^M0j4A@2<|ΖfH_= nkp}ylF>9HG kBg,I=r btVj^6F_ARsʦN*Mh |U8Z mpa)ʆ}?~_x. EPM8"㐊,wakx ]ъ>+qZX1G}JF[vBGt=^Um?*\ډ<*cnW,l Çw8rdstWڻ7bRhpDwΜ?/ϿGt!cbE=RA4[jF1(/Rg71I:[)@JWܒ*&/Y0֭h-̑)(>6-N/>qHZ+ܷ[ v$R'zm"j8&66ngcyћi[j6 clvnZ;YjeܱVӣDzR0͞/t3~~۪|!va gb0`T:|./֧HS"Br$s*p@2c+X֙t_g Co>W$O#>Z]0NY`iX'6mʎ y/p,/wWgׅ`8Ot2qM8U+!$Qz{:xRlici܋&|J.0[R#H '&9$}HX'!4)oLc΄O6*Wtq1Z3$2!?pxS ƣOl]j)O4$.b9ETwVqߣ6X(NHKP5kS<?~gO/*Jj9cwOiҾpMA?"O:H P WJ>A4t$<35<vx`[K+W.T%%Up{ob_! |fǚQ|Am64v+-4,pF/ bbz%b/'Ģw%%|iҁt(5sTa/ jڌIFڲ#6ZcD ZFNb` gtTvКWIBb֑v-cǂobШOrX$aZӦA61}F x &yӞ%G|Rt3/St+nPV'}y1E)Zѻ@9`?U닕|фU~~"v,}!h~AYJ؏INxErh{Z;M+7ڄXsz_hs}kO|d{66CUoW2&k1=A"kZ%j8x@WhP >D h-бDb =eCyyaHBѭxԥBз.[FCz+R3Wz|3S`RG-wkMܜ_YQUOȻ(%+Mg7Gga2;%oFpA?I`K4 Z+ӚR{BShmbnp>% ]%)}'ck ;Z>qޗ4+޷sdGKo}'I`K3:1h aPqW5o22`d_f GaRY)ƽ&ND9 gw ,6kX=,ح.9Z-\*OPreEF0zպ"]>a5K=H8Kw.ŠΑE)(pagB/ /'QN챘0aGjQcp?Sv6lkN|+Rj`6P0^u |wJ%]M]6`ևM&7j;?W=4'=:-m. a ry17+P6i([QGhĬL'E&Hp[LdGs c3윫Tʾ;.x'q1(.(# *?'{֟(yBJV]}WiOS,ws:RgʺK޽x[Z]^s؛ۙ鶴{~}S􉂀qyË}sT>ۙS՝UWݿ:uԩӧIr!kV5D ݎ̘6C ہ{lXlt?_qX)@N7[JjoDza 7cOHG\pf 3 .ޞ>f5<> Y9^(hzf D6cww"ĉݨ9 :["fKy!)x >2tN]6|0+fE:c hK ,0Q:!M ΐ6Iw*w/K*ݪE>Z )eFstB#vqS|WG[7;nv uU~"}`L-yuPIC֢R H#l-(-t=yop;!>sh-;@CtP,lt NV`Z:J "4NR楁  }!]kc4C'fi0#9*ApMл=t%xZ M8euZIC+sj1)ZԔ;ujr~hFVtyyyPf?fzSyNٸϲ,PrP5 ^Bv%I%I Bdm?$]&@wN)7Iu w' mI wiѬ -qLaF{JdWO"|-ۇj9I"Vb͗&JY>lɲ[|>E(I ܉mmiƹŇ#1 _zڵ6SNaD~mϣ{Oߞ 㧄0r^GݴVLIr+ZJ@ e-~bJL [Wݍt1{1+jb굩XգG,?W,콴R喁7Mg,^NZI*.cnhxVw«2sFd^~oie닆cYпǖnwq;"Np~GwP۟Fe`GeѴuc[9<$g!I6i)X=]QI Z5F\Lrs, Z0[)'ɵف|+JMCyqqC;^f؜m'~J|G>tPpHi#ײַ>_SsݣS/X1gСƚ`yqqy붿WK]*&\9G^~p܄tkʨbꃦIB[|l<<'*NF+qL-߬tz XQ{$[6bN1M)͙xޝy-վBq\; ߖڢC~AfM kހw;S4oJ4 e ,\'\0zL]\lD6oƉ7bcXڶ zǭ?[_O9u(6d|΃!ZOct`]\Mhވ6Hۥ^??`U ro 1$JQ^غGXaoL;^16UfpbP‚[j~=J*$=P;3VTv#{)Ǝ.ۉ@ohɬ -l?]O>¾LHYޮ+D41$dtVBʵ d6ֶ{^EkoH}DC.ADQ TfQC.YQ4OS- j05$ ԢࣉXӈ@!NF7 |].'&ˍ cб2;^9 *WgsW9U.G 2{p~^: > WDOG*yhD w5Wz?<h۴G8i˓"y<6[RBmrB=bVkehT%RUmZDe tGG6Yx9luoUDoLfjOz@>,hמc-tW~ݚ0%/St-)C `wКї| Zo:08?S4JzŬ۰H=H|)b(2r6P2Lw0C7w߫'սE/WTaEQE=B5p5bQ Xgi3%H{b]zhטhE>_Nml=2#g$fb}W _ncF,1wM'9] զ$o$VSYا4X)R} l4X7 ڍb=hnFՆ<; 12C?߹i Oɋүtwa+ <&ܣ+:dqJSqfd,ZD l"&sj[cfP9pBL8zNd[|޹I<^QwKnNkONa6]zhqxlP#FqZYZz!]+kl \:suS2z„شJʼnW ot44&YYqNbI=Z<.M0\j'=&xT9k4C_.+_6UZ,e`0gcD- !me }[iU'Dϝs\:UU.QC}: 4 Kі~.t [qAX LnBI#Y:у2G%QݬSi"[Z^a˴m :{WBCGssk~׷zVOpb@a 0@a  ;g@U fNC}H+CcBMLK#!zlW~˨8׳/ ySP"зإtcWcʿyets,4GM 4qY+*p LLƕ±51Ai&PP2j2j7Sob!e&&(Hsle1ݣ&I++co*Jq338q&+Kx\Pr~ ǣ/UNʷp'J\6c ._ [dH[pA(XӲtY#UA3KyQݩ[ֺeҕf4{#QG߲c;x-h%\'HZ"#5pw)׎G;_qŨ4mb!/1*h O7x\fI(nKB!r!}W*cНTep (㭺Ka_WE2 `0WwMYiX'.p^L.% G`hC3oy\>ڂ_}4zɸXؕQ28i2[R U%joWrV^vHp\} |,4_׿-<r_>~V}hY-qMXn3ܹD { .|Grw\{/4.&;L Y{V-5m_pdٿq9|1[[\/)#ar9iw <]̹jɘ7UPӓ14>)vs^*ep(\x' UؑZSbV͸q:Z'd|z1j)nڃ5igA@B;@PF:Bƫw1w]O~?x7yKH kÀ#_' 'My]OR55HK7K̀#2a_aGr7n>v<kꑽ}) 06Ҷ)fN Ԭt/z͠[#=x/>U݇*z#OO.mA/;li{mpOD 1 d}Q?MDNYBtݐCNN)Tin *<b5v&gAlTƛT-@e 2sςr?k zrm\ݐi<<\{ruCn$u1j3[ g W>^^z6%nhH"w爼L؈ x pJ*` Ѿ>64GhmY؄mMP) :qW}͂}f2etM梵hL}z~' 2gUV'Gyj@ T2J˶*!= Tk![ ZiN[}VI{X`Ze譨54eREH(;y5?Fؗu endstream endobj 264 0 obj [ 0[ 726] 3[ 278] 16[ 325 278 278 556] 21[ 556] 28[ 556 333] 36[ 721 719 715 723 667 613 778 722 277] 46[ 723 613 833 722 778 659 778 708 672 612 722] 58[ 945] 66[ 557] 68[ 558 613 556 611 579 332 611 610 277 277 558 278 890 610 611 613 611 387 556 332 610 556 778 554 555 489] 1688[ 499 500] ] endobj 265 0 obj [ 278 0 0 0 0 0 0 0 0 0 0 0 0 325 278 278 556 0 556 0 0 0 0 0 0 556 333 0 0 0 0 0 0 721 719 715 723 667 613 778 722 277 0 723 613 833 722 778 659 778 708 672 612 722 0 945 0 0 0 0 0 0 0 557 0 558 613 556 611 579 332 611 610 277 277 558 278 890 610 611 613 611 387 556 332 610 556 778 554 555 489] endobj 266 0 obj <> stream x]Pj0 +t'{(]Rȡ[ F6sWvwP-#' &Oq [gOy.v1Qi1pi i@&ˆwJC4[߸ %TۂIj]l ~ϟs068\ȆfTM%B,*$*??\Yکy@n$Y<^1 q endstream endobj 267 0 obj <> stream x}ixTEp]ott4!!{:K' $!, {HJ> :D@Y qCQDD7Nս@ZNsSuo:#" wN o!7td+pⱥ5Y:!wѓjǖ&Fh?97/P{V޳hhg5nPTl6!u7i]pE5ʟC(seWyJ( 5/<5 w@]B뛪*ߚZ"B%3؆ʻ=Pdf |(Z<\Y GT6"bGLpC4+z}6T6d B^FA)(:nAR90ro ! 1*KwQg-FwO=7/ܬ@94DCtlj(M6%ѷ1ԍn \d0%K,: -xЂr ͿUǭeAeH2pmVdmV2(ue~@8#R,5ʵx"zf=*8~/ w/C+zK^ CKh>|nA5m 2@ϐiz ?᱐pWpW yAW`_S*Q%6-ݚ#g$(F>jD^R̊Za@gE>_XZ>(W$ yj#.`A  nqae!=GuA@pK3Xs/Y;RB8 FZ8op<$w"/!C]ћ $AHn~}{A7ޘ|jD"$T޶>y'/IVd &J`6M 1 |s^n6XB4]/Sf>Np:A4gh;mCP_@,b}K,g4X|x eɚyfr3SS^g\9)7Q(\&Iׇ^ѪeO0q7,]_ ("`B!Lˈb] 0D*J=@z /!!,X4}i~t88Ylp.!q/,[4?0'" =uwM2~l=eqqE ݛ[n-a-/UTx?IÕL;h ES4 CZZL :tG0lHTQwdE0+? 55ڀr=AmF;O NΌ<1*{c`8?1dq_Қ%uFfݷg~\;s޴ܐhOoG<_8OU8lʯuM--Mu󹜂m#쳧Gn~׈yeec,h@Z!q͌ UV҆<]f!gܠAA_qPrͫ߱D!Ҏ wnI'i_u=SN=/^ .1'{ x+iЯ;x}6v9fD9:`,F ~tM/z ,A^/Z J"0= ܑxNQH^)‚˒gp#aeI%5whC˳FRG8D:FOX!+Z1yڲ%˲I1!X\eYLSfKhF?I LR7!@?_?jh. ~pLHS}ո\ 9?{7>~ L& ZDyUs2f뜬Wc3^J (l DW* ʏzT5e!JQ(9%7c;r{`TdxԺ o\ &%OܿhWMynC!d -ϰ,\F>$Ê,ӾY?Vo-ї?wZ:$>vk%YEp Rl4~T$0?d>b>q}z溝 *g(iR qF`LmY8n.nl$-oxc(B> \뎮Stǯ6N켙^sjv؀5=Чf9t?׎f1I+y5pn%#.x̩b*:|+w.x{$m+_'>?w[g*3|hİF !4tqp < n䴯[) ˛Atdlwp:ɸ-P+E~zQ/tD` 1u;qnG/nA1Tt_l7l*5BDC\Pȶp[=5;Q;JW*RHK=<'=krzݎw;1 {8{޲ ߰/!Ol~ m~ԑm _ T]zSҽxqF\poYKi*_SpDú~f5f`2RlA<LKn>=4ή 5Q\vᶻ)p,Xc1 d cx<&ˬ POh/ $; +ȡ{)ԦQkpM i\1X OVgiR‡_vx/tx^Q@Cq4#α~J MPh0BvIԊ2(6#Z5f 0"&2<ՆѫC2MRX\5q`,(hFN݂mC\}zdcly\ Raqrp1ᆴ!>~+~`fԌ!!1y5!}XDؚڨ*?O?ȪӮzm *%Z vu'8/YrNtk&ȗ Ƚ.%?,4FlVӿSLb6~r-٤~3u)CԻpx9-$gq܊-/!dN wg,?h[tnc݋6"hg6><%@%㩖y]\r7Zc?/0;է<->o_goWUǿm f$A,cמ,҃ %V3ō: |=ޤWfj+2!wS0@-X4(Fa$I7ttbi Ev"+D5(D5(D(f;(b#C ݺ2:Gbd0;r; 6N7hʞE%Q^>%Qr̤uX{vWs#G8q;{iKF芇o)/5)F'JғG&Yϋ @:ݘ=v!mb 1C !@l,P T'<~H#DVRUI5`ffl2ȑ bcEC L\pv7y'OK\!{2t+7-׋b(Znm5m{ؼzNPjI@v ƕ1b߈V&/ W:3$LaωHxm?/:-6D5$i1$%likdm_pp.ud88!Ɨ.ww-޵ʹ5`zBmNӈ=rIWJSUˍ%% /\<ƹPYӯa ΙH+Kۿfþ_:%'Lͣwl/8Ց}?w0[!ECy1dm]:R1vÿjrrncJ幆Hl5۝wK >;ШM~{Dʼnv O[w%wwȗ:FDRSD5ШiNj&no8ط{; 3I[UP=UO3<˫5&{mWKC> !ON5OL }e1z?m yׁSSh4&YiZqTi 7ɭk Y;T/ڞfTG\P`{~…t,%j#oz[=ʥ#@ =@tX$*yRg/uʈ_kTև/&_1\I!?bYm((ڰƲGouzaVWk;3{42{8pN[I_LP#VؚY Yyo) }gzT8%TXd%/n}xVso"-"аxz"9pj &ن#6 sf2䍡#a34C+e}leH;,0Rz6czQQk$ǜ1zH䋕A{Tgȑ,M-ZY?j ߕUjcǽ:4hfhneeر f! sL32uHDwdv!/PzHh{C999{-#&dsOt%uYt)}%t I4wfg bq( tIvgnЗZ[>{H  vya<|“ Q _xy rϫdi=+$Ӳ<-?R2pml9G)]HU9ޕɝ8p.(qcD`5%`aD?axH^,/|jĄ_%ww1/ [>s-;qv -ButS-ބ-)|Re&q򓾽lYݧܽTx,>O|i/蠆Yn;[phDM T^e0Lr>nH Q'ᮍ۵5bߩ90h¯f>y6M=0e("G@)V0/ࣜ`!-c3 {!BOeⰄ}#JIXy}Z=GȋklCw o :: |ھ!PRQaK5;TJ2Լ*|[ca>da8jQ5@+8}.#=߆2cʻٚcXd >>KϭAVaK_ 'VJ!mD@Ͱ6X1ix>{;G>*x FD( NX8Q %n{Aoxy̱< |k7.|flC|7+;w?E@}V*V=:㊮芮芮芮芮芮V+_Msddg%i|_#/eC^hoRa BdXv<>@G,cq"؛c0_+ v2Q Gܦjؙw3֥$'&WS) i )e-Е6;Fsڊ*5բDgjQ uQ5@cژ`IA(R5Jgd?w bh? fϭiNl~?0u::oG/~ &6=0p 0POhτP-fgS-,VwN)<&&hdVjPh.;}( P%@f:6"m{-4$Qk|>T=!P ZdEYAN5U@$3źOxk CÓtjc+R_jP uA}ȟ_pF> T%pu^i)K%,|ܺXu#hZuA.S>V]ЊJ~N7Q] -keSXgԮ9CXE1 ҶFjCV<WRY%h tdb, i)m>)>kgW"?l*Zѿt Qʁ6MCQ[U>![kJN?(T^Q^U~lP+3ferrl K`l1,CkcfC90}0_WBط!}@^Sp/k Lem/qR[M[GL endstream endobj 268 0 obj [ 0[ 722] 3[ 278 333] 10[ 238] 13[ 389] 15[ 278] 17[ 278 278] 20[ 556 556 556] 27[ 556] 29[ 333] 36[ 722 722 722 722 667 611 778 722 278] 46[ 722 611 833 722 778 667] 53[ 722 667 611 722 667 944 667 667 611] 66[ 556] 68[ 556 611 556 611 556 333 611 611 278] 78[ 556 278 889 611 611 611] 85[ 389 556 333 611 556 778 556 556 500] 1688[ 500 500] ] endobj 269 0 obj [ 278 333 0 0 0 0 0 238 0 0 389 0 278 0 278 278 0 556 556 556 0 0 0 0 556 0 333 0 0 0 0 0 0 722 722 722 722 667 611 778 722 278 0 722 611 833 722 778 667 0 722 667 611 722 667 944 667 667 611 0 0 0 0 556 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 0 389 556 333 611 556 778 556 556 500] endobj 270 0 obj <> stream x]j0 ~ CqK{cClJfXd8d/t0 }i'7'8-B'uyv2QiuN84UנE{r!{ayqBJP x5.ؾus|068ȆFTu%@*($Oߨ~_xX{,yJCT>?!oP endstream endobj 271 0 obj <> stream x\ \T?a :,( %0(03lQI_Vji5h&ʴ6J-Sxs }}|w9{@ Aܢ :i|hRqYrp):4(9tǏ Ҏ3r'4 Z9ᮄNl{֙o]\JsU #N!a~sbpVbJp:p7@ UW.0< Sc#,?2ܷaފZ낰75&Ӈg~uku ̜ʏPkV? Pu@S5>^⸚M(_5o7gl{d4y PI;Lo;="Guƈb(I3fY}p8k$ɞ9ÁcyT ӑAއ- RPH7J0i[tRʯ'=##]5)KzJ%oA#~'C 5Ƀ!7J;InYj⟂2 ^ug[?p?rD'RuGrgo 09!*A Έ."v+";p=< }W HA$^!01BxB!Q1 !Q j7HBb 1q/H@L$$HFLfxR 1R M< 鐎P0@`8#fB #a$bd?u0 qF Z'" ِ8 @s!1"q3'D|G'C#)0q*Li q:O z(A,RR3a=,0F#~s t:oʑփ*cJJBj#"E<`b Bx ̈f 97A=b=C X`El q4!6? ůa!Ûf[V[6``1bhFl%WRX #.+`%JX%~ nG8Ոk` ZCVV9w]H݈w#~"3" 7&Mp)܇#lFz3lAz lE ">!xaxc㈏6m <cO"$<4m&~mq'B >nxY؃a/^o<<<>x؏p"KpP!C2" !5x 7M70ax -xm8"0<" {>.|G> A7#cD<1c)|_ ~@|×H _!~逯'oO1÷w=p4A~߄33?1~A/p,߀spҿw "%DN'tADDq?쬔ӠՓOnI2bi-tpuQZtpW$? u8[R&*w5?OrAL A:{:xy8kOrkX$oWAvg;I45}PU_7\ b^a U[+ wp|}Cj~>`/A7U}rͫ|:8_!U}r)R8HI?۳O*w02@ @ܮ }JꝮ! b-l-bg:`~1UL!*_J77a  |}9҈j*_?{H\\C \;H'1p?Ps)?7wW1n)v߿ O 2p[WYUb_H2p=EJ2p?qrTQqoQ?['7l~?se7H 2Di^r ߮hg5w% h?3g&8Sf( sqxѣ9"sxMrRbB|\lLtTd:G]Ds2b ۹lY%SѶh0:k3EJyʃv69ƕђ%>iɢejgb)z|G؈Ei3K2m{+ijRt=i&2rz%aMU6ގʰA6jVqCLۈ}}siQ`I_y.ykBzuu5I/oFȽ MP* Bnho>dF8t`(86/>/Cm_.ۉgVCl_<6<>].2mJY[\-^\NDZD^ D\&,-G{90r6=QĺKNNEmeVme\`=E%'KmKɮڅ4 xn_o[T.mݎUVO[mȵiչB[~lun,+.i[5fu{ŭ3ܪB)cvGG,Xψkiqq-q-@[F3 ZҦ1sĹ( +2b32֠I<\soZMahu:2,_qG 1Ey\z${ܢ R !p*w]i/8y"D=7u.։َԇJW6jSVxk f9}GW QP JXZl4"I5yrҩyqy.n;esJ#Tq3 0`FtkjEmˆ܏A Gk$ђd:C'ϒvy|Kr0.rUrks/(>'JtAr&PrFrV%$NYb8R,׈xBз oՠVf &2xmG,/w(|} _ҷ8T?FI :28OdYK6ncej8+ns7sk&n/w;3!2 ~_o=^~3_pzIAӒW%KI5ґl}2OY,]V$kM.BDVi'I^/s%3w4K!8Yk~F {\דhfRIfA~"֑"~*"z$=:i -|'mjX&7("sY+ \d/bH;L~s_E w-/qǵU=19&uOc[`yIK22{L\~p_tztfs9q'GXuA}1j^#FpsTqČ Ux~FjCdr==JT\\'_:53@u>k3 Fguf;EV%KV Az%S=@\jr3)*vuQHҽVǫwtvtYgffKG MTL.*IdKĤlRə4iR@ŃIIIZ--x/uM;i8 K% MTf)')g+k7+ePR&w]$x+eJp<$H+dR4>JMyQI.r P<}-xztVVVf2M")~-V$̤')@҈yIն}՝Uo\JFɚߟN;C~0>&K>y~d:)<5-1.N P0ohRΙh$v"ߓR8*919*`x湰jfɧϞVu(fѓO>}ZL"*:ʾW60xRؗ0?奥dX$qCIX-3ٓ]߼\x{rx ?'Z}¡' (ݗ{MNJ]5귺>?c3, 1U,qVzw[ d)bۉ[Z\#;PUUꏪ3=hi&D+"#ã"]b"Yv"I7BsD$ S!zGz We1Y&7i=}EE XRA.)aU93+^7BȔͯ|9iic4ԼGg[RC3~]ɭtɃn޵2kUMm}T]:YwsO3o\dӵ\\̟\-ח[ps{u S=AsA9f;hI:R\s68h8h'rJ"RYi\v%RI`H-b1ZV0zO\:́tP:AKzՑi-U(v:h%vPA@+ʯt`˻Vґ$rMdK/]c:^H{mݫ`mkƲܫNh/:_DF̊^8/n2*uzM(6Mu&+STMuF$ꬺ?]S#`17TtQT[nF7[hݔ 3٨7YLBCUC~xh&drqX(^gn2Fc]0҈jd,6ZJSU#uXkFT lj,B15:!A4V5rŨ uzk]S`6 FkAjj zVdjuX`jMPsb}^I0yzbZ:}XFCՈJ yk5k5 J0Q4`%c`bm]}3%j5HNnllLu2 {I$Zk-s$Q [4jk`MzfW4Q@}$Ԁ5 gPt}AgEW-]SS\ot#U6kV+vWĴi}aE@:J:B}Z1כ*:)Mm@c5Vս$kAu CeMu5MB1V0Ԗ,c&-^AgZod~syڼ1Fj+ވVjLMnꘘPaj:Նs_& uMtBCO܈2\lơLPx(gʡ\CpS^V|Ab=T6~P=Xǧ.ƣ2'cO79o3C򍬆lT.rOC,DN 4`ojڄ:#c~SP (m=X^bUЀf\z(`GQ/EMW=;Wcj ^^#TmT2 LL7YeEJtjD .g#bekkM35O̙%՟֡VO`}w.gu >̩Àj֯9yٳZљv>LbZм[:J^$6mxlul{٥6c^/]48z22kY^BufZq]$Ȯ$챯_&9dIfkqdD+1hsHSz`(\Ti |o鬖2[ 9V3/1ߠ_YlhbY4cM{3lfUꐮ=5^#?p*{tH[{cf lC=4MJ g?5:45_T0==mSèO$]._+zְ=Y]7i=&v]l4ڿ] QXd]USx=Zx9~RZYt =O5[??$y[瘙˽w뫽, Ͽ/ptNw8 }8,IB$)|8uX[֡vei1?\@D&bo/^?i~H|_]|7Z9BR5N2iJA)eDB38"RI`Ȣ!'xMA[X50ˏ&Wgmc44͒f~#畆"qKyQWvk\{%ROȼE)^Qx)Yq3m5ե4n)*pZB9J/˻^G֔0M(-/ӃbbUWkdkB\Si25)C^Y]\5δK2y”hM=Rc4ӽznQWT0b4MvzbFJzzJFmhHO} m/nj&;vo'~/Xpӳsw+3^}b ƎkuzۄcVYcnY0W^s'Rr穗n|xCC&NiF/ʞz!sw;f[Xƚ^uNe /|e[ud{t/}5i蛍,TwYAoo}yY6sb0w0 ۧWp2Мs2XZig9a%NyrUYm~۳ >CnfqK}u E"n%E&P\J(›&_ v4\i-VMZq26O@@~!K'BeܯɲvZbDq©Pw2tb]RɃB8E6^IJ;D܆OeTc իjԫ;D *787Qf{7h@Mb->Ȃ+[=*wXb $ً$6NG w&se۞t;xh:MkyELun7" :8_J;w)WU=2#DpˡV\*sճ[&k(:*$|jgF;+;3P{ #);뺬9I]q--tHq2"u9|dODM4 ='e-*ςjٟWYh_b[È~Z!aU/1TK,W]S 儋}2Lq M{ߥ_? Z%_njG B˜9>\TWr5Ӕz4^g1'f#|<,huUj7ASM`4j}@cNCp2IϹcXՌvko4Ձ7fy_V9LE-.k̩ 08^GՈ_zjmz! (6u2lpwʆۦ?UJĥUWXsާV5滤&GT .$&NF0ـT@Jl!R;9O,~]>#bCIts;)U||h* D[uD(@@@^ D\<7$" H"' ߦ1K[mwv3cg-+0 ɉ> :[ɢv{ oIџq-(}\lțEzx6)C95@u|EalREiĪ੒ql( VJ &5+^4\w/Yfz :CHuk_k,EB|~<,%_DAXݖiz 몢O 6KWT .\JKפ\;3Ձ`^>6˽.CM}bSHEAbkLbλ{w(ɣ4([k5?L%q3*QagqxZ5fLԣJȲ/˓>!bl[}iPzH#v^MGy*4Qm6YO+"P wUg)np}:!w\6fQ:#Uh-yϱKNT~!g'&|\mjicÍx1<+J J -0W.jjU5Ws- թWϋ:P Аr0O1bI~D]ɉT+1ޢ{!pi{4g:1`)n#T `w`8/'?](?}el@A.MαsCFjWbBKCm 3t!w6yҩ2ۃz)r*]۔ڇxJ{-H~x̴.㒼ĀzP5>GJm sJ`R0ToxހiaۏԒE,Z%H1h&Ѩ*[Xbe0J99YhZV)-TQ)SP!(қڪjʺAɱ3v,;X$ "a8-k$ 6D.t.1?)wϚ*!#+0>  ¦ˌƒن$X1][m=\[]nk=a-Z g]pkn)'&"Ed2?i$Y]Ib)Lm5.DDPܐ]E ܨ` ?rt5f =VL0 ˡ"|]_6ɈXsȯ:Ylak^B mo\߆xmlzo endstream endobj 272 0 obj [ 0[ 600] 120[ 460] ] endobj 273 0 obj [ 278 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 667 722 0 0 0 778 0 0 0 667 556 0 0 778 667 0 722 0 0 0 0 944 0 0 0 0 0 0 0 0 0 556 0 500 556 556 278 556 556 222 0 0 222 833 556 556 556 0 333 500 278 556 0 0 0 500] endobj 274 0 obj <> stream x]J0yY^pU R&0M}{'\&|)do݀@q;@bnIi}͸4E4E\3pq_# [J߸ e0m$mz عs| 0.z\uȖfTjyj8/y4}|m̒)uM)B2oV endstream endobj 275 0 obj <> stream x\ |SE{z-WBKGBOBYQ&ml$Q-*+7 H]@Dc=vEaAU벻*bo潤),?><;f~5G }y)ų?H9tż @iB/gUr9 @3jZj]i>5ucH݀4K]3[F=% ƖC?EK NF 8߃/0st"#Met$Lm:Q!}m v;fZ6)\$?b3t;t n1,g~? -˰t:^o5908nsĭkq#>p;<D|Mnxq<6{>=(soq ǰ>xq?<;؂laK4˰ ^g2|v"7k݈#,[χ÷y^w`⻰C|^@GxG^FGp@< =UO18xup d)x ۈ_;_»w+xkx/ ? ~ !_Og7 ?㞷'3Y8O8/ !S] M;.0n!a?8B 8*. й؜GT՛4*$i09&c܀\fx.9h|^,ħ܆X#=d?ZK=˽Ž͝Nspƿ˿جxDq\q\InfhU*|֪w7 W5?5/ky|C#kBbRN*||j"'Yq$BE]>(9F>#ߒsSq\O\5kƈýNQ>|%>+e D*+&(+B+N+FOrJ^WӤ*oRQ>ݩT2DbTcUT>Vuasjzz+IA Gpl?ϟz]A9p-T]{\dP$=g8A0,Q[Sq yz)y;'i=6uNJIC&)א-D\2~"?8W,gf; õ7Q>Vl+7dvȇ8l0ّ֕~sqx@hK#1,GuwFvsRRRеnPhc9' &($:61)U…GōyJaxZz*V\Ln/4 8A!qH:L)k?~n.?ȋo=o=|S˛ݲA߷y`tuʯ:r]GP TJxX}r=Xg!&!q-~Flfu5;vVB*N :(CsVPL+h\Wr]M k8o=8&H!`axS9!TΤ`VkG'%zM2)~ؤqi* as\Ba9 .͚#LX&S+:ERє3I&Nf6! &in&]rTEt I(k28,Xln-6lr+9BXpX0e07]ih5Mafuf [Gp .`-bhu .&p\`h1#?v;Wn3de h4X:C' I'~F#u59D&vm$ MbmNg,l ꄳhg y1NaZ٬"凴vՆvaͭ.!8۝.E25&J&`ԍlDV ʏ F9ڀYfe TT͑%46Dj0-YT%`rbl].J`Sz;؜YheY2dQ뵉\XL`PYL[8l޶LĆ6|otT6ڡ@YdfҊ'n3z%Q(뢧 hBq&"Y Ic@g-v4NU^櫷cwhld bC en14>DZMk.hhG(3f52dhv-yV40 -NC#B#*bs ,qujµ 뭸꛼5fXaB!WԪ!^JhCMK=A>'7pEMvjCihMId&]n2TX!B]jpEWk`tQշZ,Kriw+n3,RP{úϷ940w*׶6K{#q lfcᆘcbc(fT-NDmed~mfafk4SEP0bь`kÅjjlvIGF[&a1ncqrKtowQъ:e]Wv]gn$9Bwv!Pf)>k%ev]2%ۿP:I+s+%tT)(Z)/pRȕmXRqL0]EzqRK.* f$id T>Zo%ZіffiaqBYM~!yraFF%{-c^iJd哬픥=tٓ=Q9TF&x5p0kotJZ-Y>/WjZ*Sof~q8 S{̒~Q:#j勽6fIB655 &]'$ ldx<ڳHcF{6&թ$LV=9=LrָqhbMIm%Ivؕ֔Y(wljC]M6fcokN߾cD#⋂ޖhlgt5\,YDi4]4>|via<2h";Kγ^tV70,~GOFߛ ZuzW˅ R||_s 4|gg{zR_m29 ~F>&^IC}XV}|H5ϳwvF=[)K,fϵ+>]CL^ _7ݭ LϮ3^+^rNك=94Q ksz;o3ȷ,nw?nt뱜A](GiU{_ k䍻|Y_nq"lnfF[lwts%ި]E_SN槁?Vٓ(svzv:\X/A:\3aޣssTi: v]Pz~P/*}-Iе%$K{==9/hh=/AY|;AFnom=鼞0D$N_ni{u &v(}J5n*65"M> Y62]ty$Gn'~{϶={Pݫ?5_STIwe:SZnWӞujc7P*}z˧1*}a=ݻB̲iPy};J̄VD7go[3췲v~KK?ߧT Dӿ`?)$gwSvHyJ"1UШSW #jn ش#$7DRf\Up(ȊB(6WZ?:d`ǞYX"3S)bfw׾Y-EqDQB~f#CȔa {@ >'-Q\mLL~Bͯ΍GMLBlmt٬pڨQM-6)w~0m רI"fW -vav$}00("|-{߲E0}Q̘5{n}:Zf/ʫ+%EecrsZIԨZT 0QDs+Gf9Cy ;",{ت<)~ӶiO%A]g\W߲ {d->ckҲo{t6&S]EWܭX_[N{ oKˡYN^*lݤ;cW]J~y:}[%ßl=_Dӽ>t.7O;4 e7ݦXaK-vږX1˒ל y%7DdVpK^3aC Wξ}xGkn;z7_s #k\kݼ*72y;OehՖOeӄNm=潇[TsF&qjS>4^0ȼuM;og*H .!`T k'%4y(A0wm\zw^ %[~Y?bQf*JJyi}6i1)4c5ы9k.B;3Xgtn ;U z+z*U=R3S-56 ▔ .95[TGzUMTww> /d ujd^q7pޑ r@mZca eX`W(;H- IΧj N-ϸ-D M)戔dXǣwRX`!b/ŒwY&LQI@T|$5iVɄ7}jG`0|Ph'<-d~ѝSfT"N޾$jj|ſ/>Z'FPPNCE^b5y8'$ | ;kILUahbHeO:S3v* ӆ ,qpLYCZ\Ϣxya"!xUCaҔəxבөkxprzܙ !?HNV"ܦO:oZ6#]q v2&/Ct[~!h ]:sm7 D*}>@gCiK0!5i;ꌏ8|ӥo2Q&so3}>Ğ _/ѾCՓ JDx7$trQ3rB8ucMM<`\yVҚi.'G9 .x)6&+#9^MQ~xld3ѽ*7XT]}[}eGQW:rX.R:B+&9j+;)蕥V_g|rʟS~" 7:%U#kYs+(陧ӈ0]6Lm\EcZ_1(6br)M}N[  $G!L#(QKӭf DLxoLd&42GMI@N"J;pn"Ye_4l;U=!xB'x} ݮ4c#Gsd zwVre5+AV8$!iڑZ7HV]dPG#}R%J,es.] a2}[ְ/g?Ĥd &ޓmSܲbjҦP{4)_WJnB17~Q͜VZ k4u jO"_i PizHt=ț@H\ҤfAԥDk/'J&2^`:?ϕn3@Fkׯ3Sapл]'լ?J:,N9@*ݒWT5*$bDQ\sֽنՄBoo Tfiˈ;0 7)=]scRg벧QjcҎeG|2WJWޏ>\?C0*aʗl&|!>c5'ZVln4J|2IN\̬7ޜH:&ܭ2s0pE?ۨljdcz =߽.^>i aU)\%4sl.Mp[R0x\kxgekVdj5[2fMMS֌ lKDdsOȘQZfJ EmM4at2bgy9=*tIkF$%r}Mhс||<[t/}Lp踨_'VmZXKt#:*=2z/]9H0@EN􃀿(1+!)>Cvs>²XԸ:%O`/b}aTub4E b$l=Y}5ch٪QA |&LNv.j闻|Q|3' (NNw\-w/xal;}+1z>Kίl&EFPDEE $ 2%/Lg_M'^vile⚴ a~?#;7M+̢9>請3) `l¤$ z5z6ŒL;:+'taNE'B>\&1ņLH&%ȝ8@;Hpa“?`>3̈́muוC6i6ID0f\&j1 -.eiй@9R`OhX[S\*\}y^7 30;苖B~ tceRŒ<kv,ڰPv,-ٻv[td;?i/dnLQIu!E|/{*e Ww5Z]C*u'E) $7ښ:}YlP9"8u\x4 w!.GP;C-|=Y endstream endobj 276 0 obj [ 0[ 500] 198[ 979] ] endobj 277 0 obj <> stream x]Mj0 >L(3Ȣ?4[I lgWv*A~ґO8VNԩmڻrD%TӀ~qIх~ei繗_c)A23#;'OQ?ҟ~p"P5T UUHSh t/{\-]%OA #xۚboO endstream endobj 278 0 obj <> stream x |Tsgl3d!C; $'!fH&lH$AD[+տZk.J} ZqV\uysJ?{99%@*:˪-ɴ cZv<‚˫9ꁕ.ZU;A?&]R]Й(޲*/+S,lie/^UPS `8ڸ!i7Җ˺寽r7Aq6ٲ@zm|K&!;Zڷ5_2sH7״7l}Arlm ߿}%/lŀDKߍZ7to.aiO?<_\Zٌ6W`:3;HHlƱ7`_VM :ݍ&0pTpk)ƨzICL3'\Z%˘[6N@Of,,g354fԣZ$&ߕM:uqm!               Fh@19fqCG/DAAAY2A,|j` 1 q'4!l6!5P )ɐ"4ŸA8DuBx!tȨ.pʨ7LDz  wQ w;Q#Nwï]B{PwQᇨz/>q_ 1vv> TQ{O.؃F!؋P}~~ }C}~~PO~q8,W׶{   Gۀ1NRRb>sW=6AAAA+Fۀ1#= AAAAm8`{_;   8W$crFzBAAANh0IMMGeoԉo= AAAAm'-- `9faQ'=AAAqHm8N`9sW AAAA h0 Xc30e{   2Fۀ1,`3nj0nm{    h0q    CpcL؄3nj0o 9|#xoCAAAĹ"s L2 SCGQ#xoCAAAĹbh0ͅxHH76AAAA+Gۀ1Naa!!qy( Q$    Β6`3gH3nj0u`9ʗ|AAAqm8 )/b_h/DAAAYR:q/^ 0n™cF(AAAqX<q ƻx _h<6AAAA+Fۀ1ڵk!\gaQ!   \v Ap;X:t(yIAAAA%6` ⏂b 'RMrv8 7T|7GE|MvwmcKַ475nUU+W,_V{Qͪ)=p挂rxLΞyg[vMLHJbch$9LI+g:nO+LGn"9OK44i e 8 Oiϸ*R Iax),i)%*)Jc4SD޽1ROiujZc.*.`!U75GI*Rf9?+)ÜNҩ;7 ,JR]L1*&Qܦ \/ozol Ŗ ,oXVYcB"!ozTO2SJksw*x-W^eXpN]p>֚Q)՜n7=JZ/C|y^z~gN*~'rg yK-VdŜ5I$QX?ݤWJkuNɯ$^T/!CU ͎+*╫k(PCqCh iSCWEXc4A |qlJ'n;d$EyTvp oF.z؎>juObRi},;#E73aH~I e|_5;Hl=հ5vیwlÀ *g5>/Va`W,c^̳R^ϩ>NjuXdBRhq-l+̣lusە67zY^[zax($:7ԪoL$s3Izk<4])mHqJ㐥 [U|QgiֆV{ @ox-]XKU(nQ>$0^W{ ^̨V3ĺKq!˟"k.b ||k\ȳ(TsjUy$Z]B~qGTY;hcX@Z~jz/n )-o?q媏X @V;v(/py9"~c L8tiku>+B 75V%3QzV~PJ8*7'7j}Vs^!>o.NńϜ́&>0_m}n^0 < W1,p?^O {'D 4WYY܄-pk`nui%.uokq{,:D6"cFjDK&~noo)TtxfAY"fw\?-ƛR"V(ׇS^_=[H0yrǙ՛v+UWqbN*l>U(܃ƾ$XW0Cs/5/ŕ[)awK祯ޕ,}6HeNͼNnQח:ɚC+2h+Yg@WP9h lKR._XsS Jv뺾|qcy_jձhn)l9r9rlN<%~ QbΠ(/Q:RR4wy@5^\З&ŠMcy|]<3%eE؏EQ.5|k^g>+o~,+d3tVgsfq-{CR^d;_d7Ыnzz{?_:|9^\ϳٓzEd1O=!Ꮲl.ꛜ_h|}+:zv)}Y}']~̅᣻vx.|ÿY::o3_ &li٬4hčM b["u:odog' t@g@ܴFϺ}{VB.<:G(rMq$^ [z:_t.rLpO.1uwz+ݹLJ|1]c+ё`>B0x>0XY)A'=-= Ka>6Ƞ/IE t+VX?9[Ibx*M.V%~%ʭYӓQŸ:ލN"]Vt励5}e]=2t( ܝ)cUqxʼ]`C?nNpXBFZj*i)}}fIv}4ȣ)GIv=ɮ3Ϻ|s]<|nWiq5O3]AW3]3fNpqtƇ3tC-O'>.y o1u{$"ZvwwGWhx/("6/Ç+ugpCk' !Vہ{z~Mp/</Њp;?]*̮D=C)삇3eh$S-JYs Jx|PEx,,-KI[Xgt<xtW@7I-q1ע=7c߁'5 vGQA0w*B: ZΦK?tPW"]e7x;C=~ C3,~#*Y}p#Υx—1fجS7]̘dwN\^gacJ^hѶW).x?hx<>kCFI;A!ӧn{& Xz :p`8fԛkN f{uffqqƹx}wlptX0CbHuQEj=x^bQ.1h4V MN_h}U|#b409D303:2^eOrNj8'^$O#!+>>{Ws0ڿ~1~{S}?ΗgL\.m)]2;#ViĈPG4jJ9?'ƈqґV;yw[߭`?^ "Cѕ ͍Ƨ|yzws޼ZbuwR"urLkjO+G,zh2=&ee͜Q8 ?%^gey&)75EkS8kޒ{+:|ϗMIK]oy~ŢIcǥLLy :HdI|JZ3XTlqrܴ8}%`zI_fM0XغwYg/V0pĚ"l.:1y̔n1j-~.g٤1-z3'}1|Zby^RLAƤSsN{@(.w.?ǣ|fJЗUJ+.>1"mYW59Ͻҽ{[0##QwQW2{,pGI83_Sqg[ -uVhοҷ6*͟s*y<9ϗ˫ϕ۲3]KMc%ǚiWPPJ~~㶃}0R 9\w^Tgݴ33mp's,ƓWw$\0;N.HfLo\ G&oȘLIv1}:Y ԮfJO##QjPuq;ɾrcϞ6uּ.qv\FylU[poT.]B``0hSj)o?_ս%mh;/6 `o<םzOfk"֌d<_XDHWVH۟wĮgNvHuC0 QTEvS4x]N% M-Х-pCy}>s9;gf=QEwuמ~:Z6,jȅf`=Žuc{ !>^D4GcTִ -D7sQ`')&+zֳG6օf?F%)[z4"l` PΝN}q՚?jgR[ri& [ys%*5@sNCShOkY#{ŽN=&~ݗnkDJwd4?Eduk&~yZ2~ts@s@l4fgcX~gu5rCa(@Ԇt~` da \>#>+eRIje8Ɏɟ $-Yf̣82!$WaO;DcbIqAM zROPDz. V?j@Ƙ3,z8Bc[NUp(IRTPp\Ae uy ;\F=X_n2&3e *p->':"XHL=0 ,"=ԑj k7zzfitY%UZ6^٠b׫Gg~`gt\s,~ZuI =aqxl[=֏;AVOn$-¢ԠIHSqZW{v!5m2m~!zט'䗙P  x)g\}ȑFFQ ú?"(24Xk?zQ4fD蔆 -# %0 L9vs OD7Xhѯn/ZD j!+"/q|\Y8dLGuk2 ,W1avi~3S= kE}^+d?rĞC9\XGm_y&E֜˸*RKF5 ^~_qdVg5κxyEudžj^ԻZ^M6&pc{P貛mt*mɶg>W~h{oI]N57 M8/xT.<-ExBޫ(Zdx(nz,ֳRuWܜ5kNoMŹ3e )wQE{Q愉nfR lyP͆Z 0f24F ?s -1<vҡÇk ;P[/w.1b")JRÇRk L^[?ޠ{+`Xrf$QҸ7ԭB{In?/GE8֟[:L4SB^av\JqP޽sgFkZm|2Vq6UgQ*]-75;y/sU=U)NZt%iU}ʰk cBIW'OyM)Vfq] ~~VVSi^ TϤC|<'%4S/}}f&Tyoإp+5 eg4l^;0+*+>ZdKUoJ&*r\\f~wW?_sNQ&z.;۶L0=5k_g-һ cz-fu筊:Լ*u#:Y>]H73{_7fNrcg##f9c~boͅeޟYwo]2x]) k q:23lQ..sfs3*W~H&iZcFz+7Sߨa3[6o$Y-34;~y{ SkFO38h ~J gn8Do7#" ]78(/:Pza܈8N (ScsSjMijJ 9n_jǗLv;r㾲ͭ\DSrznf;Ԡzblg*:hjйyZsݹ%k;orgηaoskpO~`{8ydwאUSNFUGI; 9AܖIte~q+^OeɮBʇz<kmjkԈ[c7{v}aj]o5S1ɔPbB*qxoN\O%MP$'륛tB#ǦOg0Rs#. 8(8Q0X'{E[9<{Gʁ,gb8lŭ¬2_ݰ/OYtFܤ Xaia|+4ߕ6p ~USmMSV}%>aMu(MӅu\VZǦw}Oڐ?Je|1ZxA_G+'[ beܨM#zy'NOSӦ+!n@Ž>T *;T۾\cAA:3}{e{Ȉ2rob\ܚTy d .N>[ɼ'Ui_ :]m|>z豩 xz*d'pFؼ9 Un\PlxδsޮPJ}7N?cyK++7Ϻa<<΄w:v1zMa7*O%fwr}  /S+[ EgAxE` Æ e>B4Ԙ+$؁bc\sy:GJN0+p{N/}X0~+zEEb6WqeҙwlӶsg4n85(;vceNz}B ^zʏ<4׶]||qrVi_BC'G =j}w' hf{GW ͣhH?ۊk?|W~1-cUg*띮ճyK 6U0O#䑞)M0ʽԔ1:w8r`âQaJ˵{m7}o6P>kSD)}pm/vșa]JZO| c_K\3\Ac %OA+#qgY_5ڌ7 Ĝ 9㓝Cn᪅ELt f s+{a_M%u^E%fPzdȠScocJ2+ Yp_Tùa؞pLDS ПϤc'nq`{憚jz!6C=T o߉)̥5q%3 ˢn-~a n娋n Q|o뗮qp|qIxVK5B[ o}6Sj2F4 f7:6^Ua׶];藦 9o}=c1Np͙O]Z0Ao}zLuVѼ4L]zcڎN#WW}z>)-LVЦ`fSW &l,Kfg4FaB҉ M5R1O.>;LXVrc}klGͪ~34UV2dn,Pw]Õ WI7Z>fu秶fwnIШ/l;~]vku8n:N;gg5Z<|Ks>;ѹ/9xԱN5%qaѷ{N0E+7Vd@[knL/M:e%k[cqC,9r}q3Jb1J\>HNbhANa{{IwiJDžLc5ؐرuHn4P.{Q9 z̟>;(AoWg\dĜ(ȹqR<5 lHb` +_U7nQ}6wn'.+Ohck*Luz >+mMk 86Hek>_%XrgZ XrrANz/ʑm38= .oLICE{x3r. Vɰ;ysfMKmqVyN u5sd}PdQ D:1OMΏ91N,95g/F[/N)vIޏ7 1x>866a<'t_֭Me>&KVx]$I+ |&p ^qn(z<=mS ߮N[ k'8r.Ԍ)7el=68OwIua{0KUtxaèbI N3f\P7&R)dig͚Ԋेdr:2z}瞻HminODEZNJYls|P8Hw>OZ| ԳloŷB} P߉{3/ >C 9PW` CPuF<3C} ccpF P4Ӕi L3?PdA}3 ̅Pa.21aLgV^c~~`VB::ԫOo 6&#3YzzfbA##?Y_^지~n8c0-08NP?9ӜP/\UN#rB `\e+˕:+uy<PuTp}; 0?iC0?ssA= ˽u<8 zPr0ᰅ.zOP 0--ML%7 ~r_a  kzx|<`.b?dA i(C@s=hv>` P?>"v1L/&w`]]׳ =ЋtuPn =_kK,?@8G_R~))A%Tീ7hEsgGy~`c\`T]Mp <\4v.#,ѧ@h] 1!qOش@L EPaAO) ]}F^ב/P }CtZJt>b\:UAtjF6tF^tIBXhX(VNUtZK tN[贍N;E)ΤjL0p`F`|8mw@Z60T@j0W> Z@老`z`0C  0`Cp~<ޛEQ@gŔ1=aK4lv+ƪ*n[×ix>~ x²bfdL.Oggǁ p9 \.W6Txp.x~*?_įP!􉑄3CD*M"Jh&:H.B}ΙWA U-8$(T ͂!W": }!xa0[xHX$i,YZ@ ŵi΀3甞m]vzny/ }{q8/ܬr|$$I>Pϖ%y|$_ 8^| Ov0{3$ V}퀃%mxCJQߟm|4 am  %kBTB2p^`|Yb2 A&4@Sx7j}##la] .y/Bw )dӚQb@~܈f!GblBGBOisb_ъ*d_#}f 7hoѺ{g#?41~DP?q~FiwE/b@Q/Ư؉<Z;j;1ve5hP| CXu$-ƚ!#xDX;$Ld}vdO+-G!F]G>[>D%D( a/EWqUPAw$,8$׷9wJr^Ooh#I|)~ZKR)^.ůH )^)ūx RIR$;%!.řR+ŅR\IJqM)>HHq)n!GJqK)n%Jq)n'w.RUIq/)+gѓx61A_Чy;>ig[||AL/Peڀ}sMI}~kNӎOhmH RؒC>OVg>ig;  E`(1&a2TΠ`_M@F" h01].<<61@&}">?"2eddd]^ Mx9|;Be|2Tȫd%EVwkj%7/7A0P3? b6_|(PCс2 %(P\xB2 Jlc((PAY%z$P8("0W VAr( hmL| C=)@ф2(PS$}n+ѽ0YH7"w)!z{n+7zC3~ Ip !ZaHX:_T@;&fDE$K$"1P3DBd9>aX/;Sezt_zrJ5̯uDԛh\O86wi;t( Mw^+nH}IAQ[P7gt0/y%ԡ|_A4_D!)/2lrQ9v؟hlX.;E_ hzIHĝwEJ$x/ۋMe,^/&!+I;"!gA<2 DB2"\IJB>;=>Gie3z2h T8{_O"p."!*EIZڐss}T@9JbIES9yri^/A紻?8YD p?iI/>r }7+R/5 YDC"'";}_덐Dw~z_#cDBdȄˌFeY@B˘`5,jeB0a1!L%Y,1fC0#˘i~79g#Gի[}oݺu j\6pԌ?Iv1x?{ 1"ȑ>V-c;i3e o=Mٽً;ȯvU;a/0\ d^=d~,YsI0R9~ үc;X>EPcOu&'6˞Bœ|,? r9])|w9+>WːCb<1w7ޤHqlzo=isVea9﫜\}RCrD;h-\-i`iQu s6-N%gc9m䣇9:SLv)}2 >ƒʏv|ٍX|:阚Eva8C=dQҫֿ>H߇{s9'Oqι3L79WO 7Lsx_ٌ~:X w>13rO։W9?[x\ٙ ٍr+3x\+}s/ʥM[Gss7 rir[In{dNNut}Y]YPDw4?Ni?=ipp'ڋDv">Iuޕ7 a S?YL k|=L76zG/0K^G=O$廦> A?o0v'\#<}n?Ēr ߛNr?rL;^nK)ϲ\^fl z|x Iϕx~ܛ~S6y߻W+hg> ZZ v"CIMp01>S=UJSJ@ѓ RT' q!4FQRFTQՖ >EP"Fv(n(zj[(zj=5ZEkB1 <ov≶hZ'LNou :OJQEl;#O Ⓒ"n䪆V"TYT)ZY١tR)q@N*U7e9wKU|H5yC>!尼D]g2Qru]Q)Fj?kPQ\I:+۩}QCr;&YD'}s,r\% ސ<'/V$r%Qde4˓R' ,,O\@T'[eRDU&rC-}HfeP(甋0qZd!w=ST(7P*uχ^7o8]Jxԟҵ7»ڦ>7EdPus2d|UF'ꗀM~$?_][G%}Zw5[ ?.]P{cbөˬ O9!s1.2/ٹ$f7ɳxuI-jɟE6/Z/T3*%j( s 2MlRei׵s&S5-cw\ǹ bW1yVe?|vu 5/R^/SNyiO </ӹ9ak3Α4z"o3$r+$sY=gX:?&!K *87AiԈh%} n΍|^q 8Keab\7,'t/rCk=aB8{=%ޕP@?M֞:gH*W0r3 <?VȨUp@LO!l8G/&L)}p_dHP=qOʳNBϻ<y~;/֯bFgAg؄333 UB yҟ g4c`QIlNv!U qNYqas=sꫴGӕS =^YZN> :g?pʭo3~UJ]w JLP>:IM9Z7~GWj7 oކmoަ2K> ު}Uɼ,Vk[e fENBRU >+o5Ky dEZ^F|1bLDxMŔ3E* bD*7gr|VR~T֋)IUQ.)T)*S櫛O+^]"% )=J֓J\ןQީQ~K/џUޣW?ЛO)з_VHҿ|>{g("w9sMw{K2{LO||?Y.wdf~C~.D}f.R'kJcL٬~NK^z5UѬQy%F MBW44miڠӴA'iN&ڤ0hf9: ~/R Y($ K4= V<$X_i暴Nt7:wmcMI'~N4,WNvcvcFg|l}i؟CiyB^5܆ǰ ۈF(6Jrcʨ6jcnF=Q7!=N? 45‹fq5}f\`.2"◘EffYe֘ufl6[Vsu6cf9`23$޼dW-g8-aVeXϊZ)k!BkN4_/[} Y[2"o2ˁ+|UFlp~:}ݾþc>߀wGY7.F|Wfu-wzD&Hf/ٟ7 ?OBڿԯJsG6khxzj]_oo]2wfQ{ǿԿӿ-ogNCfÿ"8 $١ O/O*>e+_36oHﰑ]LGwЪxwUO4lZ\{ fvkfY`(&"P('z@`Uڿ:Phl ll@mlnf]`ܨ tLw,`=LQkg:0]Ou!ps|X-,v%0fty/n0'z.AN`<V0{3Dp\,2KefEp1Dt9Qk8Vҁ~Z`w n`4'L1$XE6$ol 6VSeVcoLZp vǬ}`YVS;H}%hp 8j[D޿q2>}2M7˃%Y\˜+QJ~<ľa{V<;ol3!I|{0t#:Xm>l^ V,w3]6zC@y׿ӡٟm=KYNٛB*-s&Ԝp`I蕡UCաZK5^Ϲyh#n顭V(Ftû#$?;M5E`}9}QswwMPCI߱PhW y9t!4bИ1$O;.t'4n5;gBГָGޮ;:p i\k'*aWܽK8uBx}kpNtCo]ƾ_6iαqE^>vL5;@F+""4󑬈!oD#)++< Rȵedlm,,33Ñfc/ ;\YYK>6dxͲȦ>-hS}x00`_hjO99999iFOJdȅec#"7"#"#2zVԎƢтhq4Z]]FS P3 9r ՅE nh[twt/պv]ls*|'sm]@, D{G)'V_+P\bt8z%:>NrMHؚe yTLE%ՍcGӳ(/<[%fi;gl. DOqReBU9G=MSg˴e-9%|{3ZhVŇHË6ߌ߉~LhDn—'ĂĢDQ$QXHT%jD]1!ќhĎ._Kb9LtB 98H6JYpX/1`HS3KĭDaR$dVpN@2L &9:9g)dT\\OM6%7%$%w&ۓ}C#I:S8$O&O'&/$/'Gy\M^q7fwOC6kǚ$jYn0c QXs݌'ۺ=i{BxO?}u3!Y|f+odj`;Y&PXybӜ?8d./X>Ti9t c5x/(8nPa @X~ щ ;4|[i^b p p>4ׁ`Gc#5<} :?`}U}ړI#v<^R9Nr&\u׺jbkL9Z2fuӔLS~vr[( vp,R?<d`2| ȕ ;{'k7W©].0v4KاgGjNNr'fɿirhX!۟0ok٪{e>̷;:߉Bkל8|z2Y9Lo#fކ`-xo2c,#Ad8$/#zl5u#>p8/ Z]@!P}r^ A~#d˸,pxGuE~_N¼>*É~3 Ue*V NtJ3h@~-|Yz*2M I+R7*|9 gBXv&WxQ YɩGZktݩ`` ~PīCxq~6ag鬔Q/]E*4֤{aT`\O;Y=ܧ%gp=ӨU \";=xΨNZlaW ~G"V(7[?+7/*]R-e/}2$i/!"es?VT&X#lWgX;_}撟'.bT\ʛtB w2أ3vpͅlp᠃SsG*u[a{tS8YɺJ+:NɳXo^c] +O߃~?Eh%b西ķRJo?(>> wvvwkM7GQ>~Y|=~U|} 6~Ob)S J1}RqC)'XRZAYlT6+[J[KK9RJ?C#t_Co}}=/eiaT_`N-.?pua~55`:A~oLf6C|_%J|yk~8tk1q!З۠ߠ:BWpGm {Բξ0ƻumƑɶ{?oos4q(1׈~ Ï#v v k|'  <X`}:bX M7  |>X l'6&p,W lLX` lL.B uSC@+^X'C=ް#pv8'1&c;s ׳2fd((<6,eTdT22^}c=Nꌵ2pؒѐ#1cOƾ2fe8Nƹ uw+?|Foulj?/ܤLYY,]siVeV!:kuڬ `kҞ/6k "?|Bpwo'P>eW [(磜8O^.\6e u'e+V 9KD(寣= @?e\? +64O e5S@nB7^ z5.ky<Ac>ꖡnρ_@ۍv<=(ע\ ݍǁ_ cI$3)$'Q,ʟ9g,ㅣOz\/zZ!l%@z#߬> ߆oK/BG[e3Y $al_Bې6xr ?oh;}1wt?~o\20jA5z'2)&o%PP> j!hhs\> m? à?bss<@GѣAP k5зe `r96-, ٰ:ʯC0~xb?'2VK ky ʠ+!y%z1 ٍ,g\r0삜]eU 3L4Ϣ|G@_rעxxmaamrtvG@GM 1M9w?GRX;Ǡgeã|(<\ AC]VW0Wi`41L5g(g(C!п WA$n!<|wA L 똉u`u1.b? gFGHk'tӢFLS^J4MhJ־1@5yU&.v&,Z(?(Pj[ntxeqEih1m6\m6YFT+ʵ RҪ rJk6 RiBY) Ccsc} {c_.u lø8_\֗)Nn6!Bf6Q~ǜW%S̯_O7:S|_Tf\c6f7^7|?Gx rE7؋,bQ"房R1_-494#4%P)) **CUІPmh ͹5q:4}Ch}!~Kk=yB۰O83;ߧ8G9u}YO< tP)n'wR_BN'4 =xrZ G4Se,׹9u3 wVV}C^|5| @rX;@HIɠF3嵥(abPB\^9qd:7iAV&dld1NP ~~O>;Q|kw2KQ> KshGrpӠgs'*h}_o|p?y hp#ፗx`|ecʣvtEv9k;#xQn}@D,Yo',SkŪ:!Whm}\[ۤ:ۈ l;Z#` \KWaМ={_R:-Di3t"A7AAo+ "Y9ձ*/$("(&K0`!b VQzM\G`;.UnRfBp:Ƽ'T?[u!Q$puI$8iȁ}e= Չ"8d$8E9 ޓy5`pǁχͷꊊ=npMK_Z77qc6thS{h$i{ȞJӥP}O~Eg+_9!9ǛyREJǖ]`w>GW(R*gB}!N$QcGR] ;E7˾rTmM`? 'h'8MpF1|Ҝl~jBmu %eOo^ƩNŐw]gMP\W˗vx]xV~/V(ۢ+ťkO0 16[ ƾ-|P~GO< u=81?+ۀ~x$ jZ(Xp sס3 Jp-8sPQ> YPCB$ԃe߷q 7u?t6@_PD(ÒGQ~ZrG=5V$eh~ҞzG'P!ec%$e7,*g(ra[,Ay9Zj6e/vA- ;\ cه2}̅(G9>X\7ևP*ʓ -σ]g11w|hF_AF"$ ]dV9=1?ewڝb}>+wOrݓt~%wڝv19)IMhqI1%[S mli:#zm; vUa8Fp\oW< (6Uf.UHMУM@/Jz~%߅jW/ɯ m6Ef$H9^)hV f `GHb+N4IzЄ9+Ҥ49MJǗ.IӤ#iRkt"%uPLIg)OMI){R:Z_3)9iR,MJ7hoT4f`J[w\AiV&| _%** NIf䬦J(զI[Ҥ4iGkLgmI}Hw(% hJbZViҩ4靔t҅t{)mMcӫS:Q&} 0^C5RP]kNE[MĠȸSr>ai_Q')_M&cVpڭy^u"Cޟoz.2DG܆/ddqFE0|,q_ȻFZęGF7DJ|MYIhy[l_v9i?i#pv'Ps᝝*qvH*L v}Z G`HhU"M4CEe8V}br+nۍn_K İsڢ5h;(o$أPCӎi';' i.i!M_dG[ytM"B Oԧf鳽$ y ~Hn}pzY!})$_c܀3vNrW׃g9j-G-B}1|_Oʧ J=(Lt-y zJd4ޙ&?iXhF||ٵ[d%r@c]Ü!7ZAоK#w[^ 17DvR&~5L=0YLwǣO?ǜ. }<_\ NQ "z8Pbb'1b?]_"f]멵(>2.C^z+L"]O$_ Hv[zJwx#x;"bȧ#3_Ko-n$7TFQIiJ{UگJaORv~Fm*LJz|Q{Tꢣn"zLFD&/5^Y}]{2h?7)#4)>v!$0OwsddSz1A|cLB(B*6.v^*yunU[-;XAۇstثgؾL+-*cm*%V^|lҜ$2qDZnrf\Yτ:%gcgN`E5RC$e B'}ek 1 C\&k-9oxɼf7'? <ׂ dyIҚ$)JYZVKS~s gA*wҗY[yhH,x::[p|u\~ϓ?z h&1.XO#Cb|Ŕ4wXo4R-T/_L~M;ɟ|l0l0ߓ{k&~ GP>Eͷ|qXa1yHSNWFrXH$9{J FLh<:G`g㝾/ |#HxNzNzN{N4[ᒚz.|67z")=}<%9ω:~1̇˜]e>JRם8-VON $[jT-viB{A |1gʔ0Jortq璜kCaF ]ׯˆ(siu7j9~h}(Υڇ ygۭl~m9Gʖ׀gf,~/r½;[WҤk;}L:s,ReKni 6<3iٰ¡Υ2"ux+~^2h b\+.Qc)Uy'`,OO%+p5p7pN0205Q?8th" VTCV$E2 rwAJ6a܂/_b[TUC'LFRJ[kuHt&cVMrO oS;CG|;FNjh:rp%5`-.^N4D߅LBXKsZI<|j}r{VCΡֺIbkNG@][KI&kCxɒYg0$zIV6-m%*v=RK:'HV 7nV5Vj>H5{a7#Йvc bV/j|he[ֻe@ r$bVO6_CuZ==Mc3`k8_k'xp.{fO3Y4z A)]Fr}=v9qr2wx*XCRjhUVĮ&\SEW^}"Z-bo'tQ&j5[A3kMƂG*"z1r)|ƂXV}իU& &؇LH;w*ђk)y}YnfCd#ME;Qe6ig_P1*** ][q4*Q?2FE"Gȷ`B!F];NNH+cyd܅:2NGFw^1Ts3|^6U2XJF"(!ӍnE>~ڶ9&R= +G!*ۊ~jV(wx?$Y~eUmśGY1(2FeXv#}|wџ>]iPы OLWgF/$Vzq -Ǡ}.U'!d􂠱$%)9o'foU[jtyTsI'u0:\Iy5νVJu#қoPoZoVtG ʧ{wzM>kZfy&j6#qǺ$Islut10Q@ ##rRdzdx#0&5qu;NWY!Gg]4:x!fa׭#-]y= Z]O79J#7s_˓ȰXf5".&j ,1UL?J/<ݎXyvi48LbV4m=qq} {hb-;=FRyA죉WFkKw0owj*>}y;m}p{k+ro};c=Am";Th+~q:'&B]FҧHi81u77ێٞ=,Dwcݍ$͍{Awb1BNJ{A{D$ޝȮ6&~Oh)ܺZ/Hυ{>C#Vx;hxT; 6rs$Z\wLT\/~dutڹ=Zh3OlHXu}LpB_wƦ:MʆydWe ~;`-|̻nw2 +av_4-'X~rX][{(Ode~Ko!_癌&n% DLdž#&dmŝ\Mo|L=@EzމX4Q܉XսYɸylB;}0xNU'4Cs-Ndzw~#]]nDmr:H>VoPjZEPl Z[~_`:‡ZAJXv6|~s Di >\R>ad~ P:Ӆluh')񟃬JIn ڥ~,T_Po@OJ7SHf J\|R="=@䳟K/xS=X';\_'ܐا,[>]-ܧx}OGEѥ:* mtP{*"D>!~;]ٸ[=/,_{/<鶓^ej}+n[-~iеqRRףhڮIeRCw^R{_N&l|u.#/ 8:{vz޷GU\qϽ3ww%1D)""bD#b!4Ŕ"Rc 0<""F^1FĈ1B3gfY#Hg~93;3>fxO::Sz^o,#bۨhz!ܟ`MG*/?L9wfSގC3gj!?C.h_/ƿ֏$%s05~bhVB\\! =I4C܇!z4"Cl&l 54a[0–78oÖ a)kz0LC S0CÔ94LZ2>TZy(l=G6tH=sCD<  (p0c4 x@;1s]RQ2m\@\ZbDZ]d2@6T٦AUWs/itK%AHl7owjHˉwަvwսEh/{Twhّ8Wg8gkT͈yMN j3S>)^$֤-i- ]5 ~7[*O,3AW~|WfyUDGp4K'@ΓD:t$'\}E,6· X/Srr޶g[:ndKmT'\sՙM]Aw3>NTX|ʠ@::{:͂Μch):[!SUb]x'>9뭫$x[І%kz1hzf1XoC_PL^;ZIzw[T,m-W&oy•eV[m ihb+' VۋWwwI\u51t,TOS#{3LeƱPΊ!ޝ!dO}dPD LԞʢ:DE5[o@"Uq7(_I[MJI5o Fs9hqN}F4j(T=̕8F5^~"76hR!r~'0@jpb*ӜZ[Um׃i9jU UrիL&jok99xN&wHc $jZo YnzJE-) ROXb{|D:TJkk4I)SѢ|{Xʾ'MKº*CwdFq~%W4s~R?nӻȷ%H1 X ^a. ^ y]$R 툿Rzy0>/w"S5~+e#-BGX{R@f#=-wJMej1>$oG6D< +:)?_R %W*)}Nq /՝rv 6RTQڮr*Ƒ[@Om ƙJe{0T>Pj@%*d)AŹ'̡reSN $.'.b|W[@CACOLnډvςlߍ #p%nj8`X"\ds¡, hXas:.oWCkt0 SS1aoaXY#A+A}aX{[[Sc,Ç"2f$eÇ>~ a=oM% }K#7(gς~ M.&-0'בxEe9^F_ߐk`Q]D0B0V^PM.*r-I 7k8"Yx'sY|WX^:\j_hXÓ F#4y=,-ˑE i:ADz+G+ҞHd<2r4`HG<2l= h #tŐP}9uHK#=C HJR?B#F!Aͨ2i{vA(ȀA4`Hqeޫ OXhwM+X8x`Gmۂ5 hJܵo4!.%Xň7.9\\F#Ea?էWQJ1ژ4hэ̃n J^s6F-J>V陴5MtKXb9/|mocleOOϲKj{vqtvr8;88f9Wh 6C8`n>bluH("/#fEy=zS6mbAߙoC\K޼xG1mZ yQ=\xApy.Z׆C[_Dp} |B2;ҍ&$VZ#(25! a6RJܪeM*V|俚+'y9_R6_,omq(cmi;<ğ~HڷBV\S[U2X"[$!2" H֒ )# &I-dhX!j%ojjUW+{ml.ɯ!+YwP5!UuWK~mtT1G_xG%4N땆WJP* #kACҿ1+kC^;rkw nwvE4̷~AFdP, ͠Q5~CA񊫚i*`,;T0tickZX #cnwi'ǒ">_,szؒ!ğiWRCǃ!el'"f!! Oew-)E_*{a2GK4}Pc0uurۨ QFQIbFѓ:96xGmZ..5s4C$55tv%7sGn!bq7ߗL_s|;ϗ |Fe]bfIdH7a*fq?Mq&wXdž-n'@|Y:!a6Bff/S};/{wkZH b{a2m>OPlpE9U]H`sV0[mG4Љ0#B¬t͇.R0']0/Lt-t?=@#(=,vl/xv}Ǿgg)&o/-r+~%_ï7Mf~ wNޗA?O) g_ėW 6^1?_/y?cmv*s9L1_2KW7̷ww͏ncSsK+oSwYu.˴Zk5ʵiV5˚gͷX BZn[RkUf*VuƭmnnrtǸ[K;ܻ?ivϵ=7zn#,kikz%^M'ot2}>Cљt6}D%t}F_oз;]>n;^ ~AvO/o5meel>eVX=; 96nޜGy[ޞw 3yWĻ'{>ϓ@4Lų>@Sx.,>//|5_Kzo| ʷ2异W6f8V B\n͵fdn6K-vsYnV!ylٓHK$si z ;NtGBZ+Rր{`ցa%x~a;h5nq_/W_z~/àAZI>?͟\"—*&8-zϚ+25sw=sk~b~f~aM\"}BW7Xwt7~J?_ү 1aWcHin.#y49|>_|_ul;ֶ;~Fyy\l.5W+5:sj{ sYe4ͣqƬ5]\.1֓Stk5Zd-^^޷>Y;');묛 n̽Gvx:z<]rLh 9J9AH F:i,r$X!'n2eТ^6 Z՛88ɠ 1j|+Z"o'5+/9 x#ˆgq%_Og=t"= t hc-N~gT80Gzh=qk1nƭǸoaܯ0aOq"/ǐq_#=A]( қU69|EjrMK N[ҖAow'}DZK͎p{1?ȫI O~ox 'y-7{w+9k#[֧֧rw<}#}6tWlz=]h!ҥHDzP<xw@hh;KCW8f/Md0`.q'l<1'U=-C3EY^ ]>iK_uṇJ$AGҎd_cM#Cew S?5AOم#5Ns¥ErRuPA?d#M$q1\ kd)0tZ#8J>MJJ?twQO(6*@[A~_=1:ka=EPb\u/Hg}YdDDyunzڧDk?qMԳ'"l4կ+n<ӗũ~Ez1 R]RJ-}iY-1nlH\qoC}hVցN|aT);˱<3}{۔)D4!MT~"drTm_yYN+Z XXM0[1nKwN_nV5MYBٞ Aj*gD4t"Ns{w/*H%ځ74MׂW-'%D0s)ɠzތ mmL? [8)-pA|:GMxp~njZQ/OiZbG-?^Q+ʏ ?az+`|oZJVvxGy?_)8Stzryg&M?kj Q'5JMnV>yhڢn/ 5;^i/5b;nSԠ( ֚Kc%δ\e"*cD06'B3 XˊXgHX(}BsYd>) L%w L_=|A?w4^*Bb] @a} @a t@݈ulQb:qJ"hVw\@yc'"+: 8;!XyC.b#/9Vb%V吋srqv: ys'؇XN RIߪ^Q;ډ&@tI8:|:7{>z51b,&lKg,cY.gX![V ks]OoN;μ+Dލj2x>ʇp虠fG,#~s<ೀy|!|1_|)/k&x)+~^ ?O?Ozu6bjc6-ik <<x;[G[g DA[޶RmCFni>668[m I\ ly/-_a[m[|mmRv[mlmlWَ?b;n; Vgg f8 5ۈ܈6Z16[팎; F".Fxx?c <lbÍ3Q࣍qF $#TcQ<ߘc,>(4/2V4끗R.eFxQe~8b~̨1gPn]hQ{X{k{;m ;ٻؓw>x=> {}8 {},h8c쓀OOOgϷ>>^|ȾrJZk%77۷b/cWo?h?~^~xCwmC|Sr[:bKxG[C|?!}_q$;f[! k#!vuL3GHX 3"#>"ٌfD>@D>@RDJ-lAd "ن6D#@d";)C 2Dv"Bd"ٍnDv#=Ad/"{ًH9"刔#1"#1"T R'|'T"RH%"")""}C3D>C3D#||H"UT!"_ "9DDKDD "9?"@"9W|b%T?ZjꇑV;}9}!v`kr`kBZ\'Hq-Ği5r#5R{~ո^ubϏNNV:*׉=?j\S:GZ\'HqĞi5r#5X{~ո?՝}lUgW BL4,P\XT][ ;b, +Ⱥ":`|uN؜3 25aF'n>J ry?yuyÀYZh%` \l hVI+V$Hڐ!iCBʻ< h]l h]l h]l h]l h]l h]l h+]l h7]l hC]l hO]l h[]l \lMA[de0HV @Rd.H"dyH#d>H YI%J$UHT!$)?0HR~$)?I 즅}nV2D$H#dIH&#d2$%HJLA2P<9*OWwxr5'Z_R삗F޲0Yfʬ?$1d$˺H/|J`2+c2+d%Z jB;.<i5Ķrvv[ɓ]UuOuz%ֳTW'#DQ>ҧG=Җ~)y;9졏 y`|-X<|n7c|lys`|EB>[3>ǞZu[m6}=tz kUғ'k=cGSOiJB+ml|nzt\S;kGo(Vx(a7gd\'m!4̌jhkNzMzɵlORVZJY(rLѳ|Y6NaY3^:VS)ƯSwVhbF SZwKBTyxc.y~{ΐ^Λ=]vYҜܿ,DTd%1w;)Oq<;:vB1ߗV fFY4-;v8=OGs[Μl(!ujQ9.7gNɕ!Q-Ө#c22p:g2֤{U8JG~pNٝ( b(9'AfgM,gwijgG,ggٙ#_r~ImojT^_AU`X{C% 9`yR'=s(9~ ȉ#۬е4kzn$ pfw,cf:g7ܬ9sT0sN+Lӫ RjjȺ^~ G[תիi@z ȒVUxcJk_+q|wm<҂|_~ *cn`IODe<;x^6^WxB[-xR{[ksT<̎U>y×Wհ….X \6 ^Ë?+5ta .TܷJxTl5m#}XyPsJќ1iՅ׍gEg]}528z˼jË=_n{|6:k%><*zUC=KU=<'C׌$%cIHοT>FJ83S)ۥF=x*NŖ.q {@Wk>uy'SxB ^#Hl֝Q9?(Ѩ||MdaF>1[K~Oiw%\mp#7vٲ_/c5X-92ki2Y(pEbJU RhBZ*V)JUw-Jyciv68Ngs99Λ)z.#tCqz.z.J\'guj۸z~ֶr_֯7 }Fԟ}/cXsL6SM)3fYfc6ٷZlb]fy69iΚ͖Ǐ*1$=rJb|p5H,1'\hLW|$V^r.U1WCR4ӏfHk?St $59in>  w§`'| <W7y< _/—+U<?n:|O| oS4< w9.<&*9F {b}w}wuI&]r%NR uoʆ5Fp).eål R6lVpJX{<wÉNa b.7V 3帤qiCQ׿X_Tƚ%Ej K+[yY]墁_f~ endstream endobj 279 0 obj [ 0[ 1000] ] endobj 280 0 obj <<5A8603532085924297BB44DD135CB87A>] /Filter/FlateDecode/Length 872>> stream x%{Lu9axR" 輔mNjk)#DE0A!S(2(^ M77Zj 9㼶~c>%pb>]0 A `8ކyDD`}1bӓ ,_A|5&vfX5N@Vkćĉ:&:m)e>GT]K> 1EP ȮX,յƯ-n\6{ȭc̃@N™&H$!$܉8FgRLX$2JH׏Dɡ;\UΞ w Ck \a;ȃӞ )@*<5A8603532085924297BB44DD135CB87A>] >> startxref 506654 %%EOF xref 0 0 trailer <<5A8603532085924297BB44DD135CB87A>] /Prev 506654/XRefStm 505578>> startxref 512435 %%EOFlcms2-2.12rc1/doc/LittleCMS2.12 Plugin API.pdf0000644000175000017500000236741513775114656017313 0ustar martimarti%PDF-1.5 % 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 5 0 R/Group<>/Tabs/S>> endobj 4 0 obj <>/F 4/A<>>> endobj 5 0 obj <> stream xUn@}5“Bh!$ yxBzZM O/N6x=;g.3Gb2Bg SAŤoηɩ(+OA$6k%&k[dI+2ˮF>W"o7U^ߔU )hTE _l3^dප]eSx}aA8AE6f]L^59LV! e8#NܖzSV$8}^VQ_<(FJ6M]Ǫ2`P-Vښ1K=g,x bѬ޿rS\*Vw,Y+d30o.du҄<ݗq#MtU!0.nbrGD(,nE4o R0bƺ51kZ bzyFߨB}c/Bƃ6L8eN܁Ƃ ӰtNJR+3IwIdZ%I6VƗfU7gU Mx7PSNuuXA*u9TVXȄ%v}l34I{{lq>H#xb /&qO=v]1bC:V"|T܍YgBRJ'Igqb& gۻ|(p+$/Mq}!  endstream endobj 6 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> stream xy|e;NsAD@ `D R` .(DqGnXECXP ʨ3cDADAAP`!rnAl+i>Ǽ^8)!+$IX,fOgddLL6;lfU̺/_~ԩ_ܑ#OaÆ=pt:{nv-[ř=O}\pqʺ|Q;vL!m۶5$IO=!n߾?sBBB̾3qDCxݻgϞe_^xclbe:uwܹ1cu^TTcǚ{)DqypnBBByNS'S +F38|*9YnƌZ1"ϠA= [6jnt.}f\ԩ'Q߬Ynݺ?6o|M%>)))ƹs2336 ڛwu/ȥ'9x`U_yuto شi刬xw&M"$I .poVppp=l:?~// :TJ%KJ_#Gt_u/\xQ_͟?jVڭھ}> ۴i?!!!_}3gNU/ ||GKK TUh"}_'Gc+VTpI&277A}IIS=#gϞ>dX=/۾}{hhhU:v,3uT_^0`jرcׯ=zw :u8qBk ]xQK. o&""—W௖/_5JJJ RUڵ;{;uTӦM}9}j߾w)-Z$IR>}Z_wWwڥ5WuֺtС>5j(Itf͚UڛpNpH 0M7ݤ#FQiomڴpW^yEa9KZ('')=\7V ҸqもMItj׮gp-[T9tXf0zᇯ'##C2_UZZ˗5ѦMl65t5//Ow۷nݺ\Һ5eAAAJJ5ד;|p\\-[j'y޼yt2h *:vXbb)7xCSOj*?\#G\v&KqqHzX,&L$N8lKjo%ܬY}̩SZlik}K+;pdggN_LKK3 5Ν; xp'NHMM5!~ZnݺÀ~F2d`ڽ{jMHHطo'?4o$I~l4hPjjѣG= #GUZҔM{gOrh~nѢEi۶m%ۻwoLLPݟgǎQQQf ˀۼysŽ{ga>x (O>ɺu7Fᛀ[`A@@($Iڸqӭx„ fpc|W0++KS >ܫwҥ={=KÏ(;ydv̞"FvY/ܑ#GZha7]z)k7sz#֮]nh_b VySTTd`L6b=3_~\AAСC͞W̛7Ϩ;sLΝ͞WHsNC)))fO_EFFg}ƷG:u>C7 5{6UV0JKK{9flpcEĄtbڄq7-mM~tNfNh70A"D(K6M]N[~2x4gF$t钇7dg5$2 ]#ZEMK{$9lŸ߿:?DR7ѭ诲}G9ul=EOrjMtI-}8EkKEmkO3cyge˸Z҆?Uu[RsY:'j}' ^+6%~o&?Uc՛qŢN/F\}q$}:W&_//ݟ,--5*=zgS󃟱Dxt[{9Wo=7l1[xf\6ܲm\kG: 50hA+F81uUTy%+;(ww~Ʀ[Ermx-ZHW+ybޮor7mMvD'4 5$K팇bj6m$ h罩6W[,Vd7pdz!yovH?5tΚ5{W޻{V@Zw>N- ]Nɦ/v[k4+1}doHFlRn{02M#ە{fN7A7:^__Wѣǁ|nسgOVV˥k@:eE4ʙ\щq_S:=ƪÌK$o׋?\d܌⹐Zz,zHӦM7l`7M~ӧƚ}1PcXÚOMVR[%ɕԱ3fV՞<dK!.OGM<~oW,L .VfΜgbU${1f7t-lDz?飆\ k;bdQ{Omɕr䋼&sq qmhHq⚸2(i$W|233c7N>-Ǯ53r&{{OU.n3nX鶀zE,|OnOR0$b"$C&6"oaԨQfgڵf͚eUAM`6m5]MqERV^lo.-߿|,--;̾sT-fS6P:k9Tԉկq˫}3'-%ak#9-ZTvmWoݺbo'pR`^n2RkJ9~"R"qحQ}Yxq.8ͷJo„ (77O>e8q¨4"ff*g\ĝ*3Nvm5YL:~nبf#K%- t:UnPiӦ (_7|ÇSF`t%-B}ɥWbr)&4br!eQ3nCAWzc:J %f^`odggqÇ7kY";PθS{3No*JIg&b(F6B~ZI2>KIIѣG{prPȕ{vxgŷ4eUXrT8AJBXlQblqN8>});lm"U IIIPnnȑ#)ʵi߿gKJ|K/5& ܖr# ᶈ{D<\3N6w+o>x&ɱ;ל9sʣxɒ%uUUVjYfJoEDITTǨ֌ݖrPtE\Ⱥ(c3N1ɚRWwsC>1R߾}h'K.3nʔzg|+Nj|5#Dnr<lE=,3N&WahCeioO>|@\I3.*:2NvR>WUHiE?'6 #cNn7)wFСCQQ;~8CV-)gfQ}gV.Rnx]]TKw^p*\_.a~ZgϜ9nQM50{8Yt[=?0Q$-↊!{'n5-q![ÂҊy $ijbԩSڵ3{q*3.@jD2}ErƕcYPE/$݇vEx8:WU[IIINNNŭM\vIfQ'l5W9JDqѥ!">_)5X >ȸ2r19ݞ!c,X̙3vC͟?u<T7yѼ;)<8;k,/+~Z!|q^˕/i˨).gu5IHHh;wn۶mzX C*;ufQO2Nj~\OԻ +|qED[mɵXg݌lZ؝-*d\daYm) +MfʿZ Jq ,~(hP73W7_Tk<Ҟu=F<8+[֑"8ˁbIƕZDb?x6DBEÂ|9N*vRGru=a< rx)ޘ**f"NT+'IWVؽSԒ0";f)g\]?|{eS!'Tq8@Ydw=N?eu^m4Ќ R 5qqX6xMCFTB85~ O~rZ)țig(_дz06ĕR_-zk،sN\; iQ߰.Ou.Ϫɸ+ gml9-mKn̔UCR4,3<㮖rbcMq[-6.e={!^kF@dw2Ciʊ-9m5jՋypNʪKʝ18}*)gE0(2퓩!n!xmWujqaBӺQ`%-9^o\Wΰ*uk?EG$cFɺ'z:> y'WP_RoƉ.5=:s5HZ|ZqV{/DeOʮ覻C|7Om_ .%P^峀kꩈ~ZՌKGmFwĴL/w{fl7uw˷K] qƞb,9O)~y+:}U Tf/}ަ[q2I't+38~դCnM}0ahWNN5TgR}I ՜%8vưFnKs\jQX ȸEOÖ jO@gsE}F?{maO^"WIK˱X7s+p8 IHsbUU-I,gDPVD96C.Ǿ2қk WZq!.v1 ,pGTbpi֦OhfZWudrr%ԑ4vIhe}[-59R7\pKe [ endstream endobj 11 0 obj <> stream xw`o/$"J=A)bC)y (<EAD0RBQBB@ݽ\۝mf% vgff~p_e^[]QZVz1a[x==1XWm5i/ |+jcM\7jGS<$:Xߘmҵ,ebvm,Cla3?ZC~v+PCsĉB *p& 8gvSl$e#)!f7,Jw|,mvlLxyB'ٍ1{.]fN W Gmfc0qSn$M1:)mgvl 뚬nf78⾤]ۖ1NtPލ/fwthc蕓uRo?Y4}ˆ!Ouj l+3i6Z㸓vs'حM.bc6PꡍsǿDjaG!+]#p@2m=kr.z £cĔ b'+/c[_ڭm}bi<^˓m;x[LtbyoSnJejI@ vwRPvQRGc[HnR`빹5eW'Xѡ|hb5}Y]:er+N`[|/03^TA@Ƌo[#)%) =`5%*7|5)Hty%{9s#TB*#ck $+FZr>vHW5uZW{_*FZ{.8~6vYj2h'ki!AwB<Ԏ:;bTj؝#ȍ⣥D'(VJ\lZWSDlRtr|-k̕cO&Mfz-(6Z<ڝ?$_&E2i4l-AN!t%9v3D#iŽkn:* ]mZ<Tgs"qS(S0rF:SZ^Uo@K\6_(cϽilsX YnzYj[9Z'_4i>Rόexp)ңT*Qa/h# ֍δZ/"6h.&!-st@R$RWe0.mqCu D,!%h)3Q.rF|hJh) R2"ud21JӶ\mᒩR#Y)Х#e麢4Jh 00Rl76V_K>G@hx`.W':TdSπ׿sNk) 'rD':Z*Du0@}}@Π`xĒi$;k$ TFxEM" DVl k2ϱQF#% ƓHn_R)ǥ=l4(NJ h)rL'|iZՖg =F Z -=vLI#ϦOPevS@KAW>8,|G^I42TlomS)`+w|□M/'Ά6\f=O=UJ t䴤M*%z9iltPp8Z'"vwsTR,}LZ\IxHI+$?TdF4M#V=REUUyp({g}-ݧj6p;TTwSzzVK`ChLTUQݹGRCU=HPwD1'TUT ~[_KuTu u6dgVܛiFoX_Kw 12@p勺0/Tb}-EOCcZNV PX7Lj'hGL Samg#okPRCZaPђfK> 1#~URCZ'2QA,5)wHh1x%Ue6@dzqа̴濱.>8B "%CYd˟g 0yq)6wmd,xK2LKyhD?VB O$˜28Q{2#Ux kO:fZZ14"8!D9Ajn5ЯaH%phr.3G[d\gVPf޴n[mQB==a͛}1yXvUy@L!ld-E`t` 7hH-sBe6Íϒ0IE]W<hɆ@e(oT jGFv4B tݍkU3.Oj nMwEo]۰ Al@}]G؍6Lr|pqk "BysgCq¦C̭hf,I\AiFOD5ܿjWGHOŤ Jf)Uz$K k#%qg! thFh(T=IJ^Й3mm(I~{~iPT n4j{C@\aPT"]Icy%)m01Ơ>-Dw4= %ag$'ۈ BBy߂2B ܀ᣑ(^n60C? 渄9n1]ZbF;{AIrpBodW5SK*hD: uSD^6LiM!\_ryl@c⺷$UCz~e}q?wTLu.6 @;BPC6`iFOp-C#}7CK0pbĀ!Gfa|Ήg'}ѡ%F/(LC@ؖM@ҍ4GK.65'p/m^/B~6v5GK..$ܷG7 @RN a& DD[pʣ>'|+*pJw#dn7*..HZ%3q"ȁ zO825;K6h,abхNfx {}PtfFxIl/W ~bsP>P  P+Mr9Tas*ߛ%dp&ddӄ\x3zڈ<{zV>"U ԰prI0({K;݋eM*d 2pUڿ2uŖڸ~^:kK\?7w}E\ 6ڷgݫȧW<=Þi$NQSJ-U'LνET<]I@:.Qu=r3UL-0@ g HH3LS7&Lc<Wd{rd6ҰZ f1gH$ $ibCTG^K찃GVS~μGK'i)RDi_qTMP%Ϥ<2ǽVA ZU8UZK"-3xh0"R%z|y2J?%\EYiۄi88iOfL%P},+1|yS2JG$7嵅g %Z2x?cZ;oC}4 CYGc>(z ʹZ $|((zKIjXBGD4Qx`agP.&Gl VK8-9T߅jÒm*%GD)/8`5J̸TGjuh<YSZrKX WNd?A]F‰VsshlfF3@S]#Q4]3J`y |j(?79*YVviakBcmumt\}TÃR000׍-_{d"itE2K. d s/=2ŅSP$ ̕EӒ6*E%*ҒخKH\Es9b;=jؐ-d\LeOh< ``ān [5#ל?lMq4x26&uiwM.4#J"NZ4^8ZMZVѪOP1CS٤QZM9olj·˧ƁגP?dZʇk<_dJ1E$J;q5>dx#Qc4"xU%)X'hR>56{;Fz7'C#>. (bj=5U&5i ܖHUݳ.tҴKvi*ةإiMВKjZA5~iK)30у$ /PB-sX=UKI`yejeO_(*&YK !{QϬW&<йH`(e-܂?r%Z Z8Tjk>9N$8*u`aJ9C#=iF`yj-)Y,.b7 h`:-gĪ+I|#q^у&ɀɴǼO|!\^џ #|J֒$d-N4Iդ? t)s.BXqoXcO|p %`KD-5/sMuPuM&>6jZHz dzw ]l+%Ǔ@HR3GpH%e7g (קSWWRԆb}: H%`m?" „ِ׻2{Lm^F.D \YTtïPסׄ-E<a\o\pg7@})- zO"7Z Nz9A3p9n\D E?1#Zܚڂ&Ͽ,]AhIkfMhċ=nEwx-='<ӽEw7:nH!"Fzs@)c]i;[℄-^/3"2Ԓ aLZrOyMa*ͳX=h~ʧi̸*}"gȃ\`O_/6Z *rǝOH/q)uz x;6%HR/sw4rga,&m KkhyLD~Ip~ZQݨG)g jLu#^I/M6"Ac&/E^,Փ"֒.&/zo߼v=}4$!q-*鶲Mf ~5M<F-I [;E]7{kIS&t)>8WDV=Xw𪚰yotk_=0Ë>Zrp$,FKZᢪkmHŒ_Ѳ5 sy IKj+ǽ MQҴ,q~srvgh%RvV`G i)C`R6E⮥ʵh3y ?%+'b<]&mSrOڑmi(cgM_iEM9=.͗)D4d)J;(ibj=Щ[.m3"ƿ:G +m)<(r12zEO}:6;K 1NC=cRI7._2%ېnjSL`w,'e).|FH'o/pS&TszX 싍|F"wKFlOm P^20vlWOFOz[oXaqg]:v;5=vro]J>qStV > endobj 13 0 obj [ 14 0 R] endobj 14 0 obj <> endobj 15 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 21 0 R 24 0 R 26 0 R 29 0 R 31 0 R 33 0 R 34 0 R 36 0 R 37 0 R 40 0 R 44 0 R 47 0 R 48 0 R 50 0 R 53 0 R 57 0 R 61 0 R 64 0 R 68 0 R 70 0 R 74 0 R 75 0 R 78 0 R 81 0 R 86 0 R 91 0 R 94 0 R 95 0 R 97 0 R 99 0 R 101 0 R] /MediaBox[ 0 0 612 792] /Contents 18 0 R/Group<>/Tabs/S>> endobj 18 0 obj <> stream xr;". s:ޔSN9vaXne5gC ZKjit྾xFWJ5]^UջFuM_]^^//o7Ucuˋ//-v[U\]-()t:./}:VUV=7{}}3h߅+쾊פ߮ӷ`h%G88U8Y'V*v1|U_7l~2ujhۧ#ɴam*4Zix,uCO ݾ]5 l9B5u;:!ݘZu=2-}ߺq=ב|*k|\뛷& A>ʬ+ Hi_DʂZ+A©ЖV(iznO+vg⹀0slmʃs62_$ oTϕDdZA4; *$\x]K3݀-gXK#f2 -si~ 5B !~("BXmDeNm_6ykC"X=1-A"J^P8#!"NxF2vIUl%p;BObS1ƹUd[pX ŸJV%RDl-b3HMCjÊcTX0rW&hթm\,0f}-. WDq-/H<&J̧J<-JhoxR^TJ?fH'ή̟oOeĴ:no>q/Kq9?Hێ}Ϲض:CqmVz8C-Ro;4Xu`MeZ?_Dq8[|a+"/䈛9tk+7|ZZf[bvށR+"eA|Z^x)aW0סj3%ըg* @)'xDRA˳;It;j[$Uw`-I0a("eAR,-ؿ#egh.; +D+-mI?mŴ lږH@ԝu`- eRX0B,:Kҏtz\=ęLl\@vܼd Xb!顦aj&d>{=<,T/96̵ңT,=WJ|6#m9A#"k[T7%?a.j;ai2ыA h<#-BeX HUDHehS&bhl49gq8o>~scybDӐ6 u(ϻ!.mCmK, ށTgJe\ 6I?26`^TY,SFBT(jBD6n%3w`- K2|Ё.3>2i?rҥB~75nJg-[1 17ÿa;.8Sr0*'8Uʫtۡy JѳXո7pDi`UgɴV7wk; <~Ӭy#]DQ>]X xm)]S7t- "R1g4{fvMݴ]⠮H,Nt8cE$M8# m@ i^6kPEt-8 WDʚHe\<#gOqƳ#\3x>`]wS Kp(!uwnS5yWX2O"ʃ 0l[k;=|Mx,>q3?T AvJ\ v* X`bP1DX&Hi@IǵJbϠΤz'Pȉx@G73bZ"/)^aSj kvډAr}={2[Octx30#T1_Mᝐσ#-'"ځOfT:%q#s> endobj 20 0 obj <> endobj 21 0 obj <>/F 4/Dest[ 23 0 R/XYZ 82 721 0] >> endobj 22 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 104 0 R 106 0 R 109 0 R 111 0 R 113 0 R 117 0 R 118 0 R 122 0 R 126 0 R] /MediaBox[ 0 0 612 792] /Contents 103 0 R/Group<>/Tabs/S>> endobj 23 0 obj <>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 136 0 R] /MediaBox[ 0 0 612 792] /Contents 128 0 R/Group<>/Tabs/S>> endobj 24 0 obj <>/F 4/Dest[ 25 0 R/XYZ 82 721 0] >> endobj 25 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 138 0 R/Group<>/Tabs/S>> endobj 26 0 obj <>/F 4/Dest[ 28 0 R/XYZ 82 721 0] >> endobj 27 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 141 0 R/Group<>/Tabs/S>> endobj 28 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 144 0 R/Group<>/Tabs/S>> endobj 29 0 obj <>/F 4/Dest[ 30 0 R/XYZ 82 721 0] >> endobj 30 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 145 0 R/Group<>/Tabs/S>> endobj 31 0 obj <>/F 4/Dest[ 32 0 R/XYZ 82 721 0] >> endobj 32 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 146 0 R/Group<>/Tabs/S>> endobj 33 0 obj <>/F 4/Dest[ 32 0 R/XYZ 86 442 0] >> endobj 34 0 obj <>/F 4/Dest[ 35 0 R/XYZ 82 721 0] >> endobj 35 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 147 0 R/Group<>/Tabs/S>> endobj 36 0 obj <>/F 4/Dest[ 35 0 R/XYZ 82 476 0] >> endobj 37 0 obj <>/F 4/Dest[ 39 0 R/XYZ 82 721 0] >> endobj 38 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 148 0 R/Group<>/Tabs/S>> endobj 39 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 149 0 R/Group<>/Tabs/S>> endobj 40 0 obj <>/F 4/Dest[ 43 0 R/XYZ 82 721 0] >> endobj 41 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 150 0 R/Group<>/Tabs/S>> endobj 42 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 151 0 R/Group<>/Tabs/S>> endobj 43 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 152 0 R/Group<>/Tabs/S>> endobj 44 0 obj <>/F 4/Dest[ 46 0 R/XYZ 82 721 0] >> endobj 45 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 153 0 R/Group<>/Tabs/S>> endobj 46 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 154 0 R/Group<>/Tabs/S>> endobj 47 0 obj <>/F 4/Dest[ 46 0 R/XYZ 82 534 0] >> endobj 48 0 obj <>/F 4/Dest[ 49 0 R/XYZ 82 721 0] >> endobj 49 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 155 0 R/Group<>/Tabs/S>> endobj 50 0 obj <>/F 4/Dest[ 52 0 R/XYZ 82 721 0] >> endobj 51 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 156 0 R/Group<>/Tabs/S>> endobj 52 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 157 0 R/Group<>/Tabs/S>> endobj 53 0 obj <>/F 4/Dest[ 56 0 R/XYZ 82 721 0] >> endobj 54 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 158 0 R/Group<>/Tabs/S>> endobj 55 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 159 0 R/Group<>/Tabs/S>> endobj 56 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 165 0 R/Group<>/Tabs/S>> endobj 57 0 obj <>/F 4/Dest[ 60 0 R/XYZ 82 721 0] >> endobj 58 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 166 0 R/Group<>/Tabs/S>> endobj 59 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 167 0 R/Group<>/Tabs/S>> endobj 60 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 168 0 R/Group<>/Tabs/S>> endobj 61 0 obj <>/F 4/Dest[ 63 0 R/XYZ 82 721 0] >> endobj 62 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 174 0 R/Group<>/Tabs/S>> endobj 63 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 175 0 R/Group<>/Tabs/S>> endobj 64 0 obj <>/F 4/Dest[ 67 0 R/XYZ 82 721 0] >> endobj 65 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 176 0 R/Group<>/Tabs/S>> endobj 66 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 177 0 R/Group<>/Tabs/S>> endobj 67 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 178 0 R/Group<>/Tabs/S>> endobj 68 0 obj <>/F 4/Dest[ 69 0 R/XYZ 82 721 0] >> endobj 69 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 179 0 R/Group<>/Tabs/S>> endobj 70 0 obj <>/F 4/Dest[ 73 0 R/XYZ 82 721 0] >> endobj 71 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 180 0 R/Group<>/Tabs/S>> endobj 72 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 181 0 R/Group<>/Tabs/S>> endobj 73 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 182 0 R/Group<>/Tabs/S>> endobj 74 0 obj <>/F 4/Dest[ 73 0 R/XYZ 82 622 0] >> endobj 75 0 obj <>/F 4/Dest[ 77 0 R/XYZ 82 721 0] >> endobj 76 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 183 0 R/Group<>/Tabs/S>> endobj 77 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 189 0 R/Group<>/Tabs/S>> endobj 78 0 obj <>/F 4/Dest[ 80 0 R/XYZ 82 721 0] >> endobj 79 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 194 0 R/Group<>/Tabs/S>> endobj 80 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 195 0 R/Group<>/Tabs/S>> endobj 81 0 obj <>/F 4/Dest[ 85 0 R/XYZ 82 721 0] >> endobj 82 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 196 0 R/Group<>/Tabs/S>> endobj 83 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 197 0 R/Group<>/Tabs/S>> endobj 84 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 198 0 R/Group<>/Tabs/S>> endobj 85 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 199 0 R/Group<>/Tabs/S>> endobj 86 0 obj <>/F 4/Dest[ 90 0 R/XYZ 82 721 0] >> endobj 87 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 200 0 R/Group<>/Tabs/S>> endobj 88 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 201 0 R/Group<>/Tabs/S>> endobj 89 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 202 0 R/Group<>/Tabs/S>> endobj 90 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 203 0 R/Group<>/Tabs/S>> endobj 91 0 obj <>/F 4/Dest[ 93 0 R/XYZ 82 721 0] >> endobj 92 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 204 0 R/Group<>/Tabs/S>> endobj 93 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 205 0 R/Group<>/Tabs/S>> endobj 94 0 obj <>/F 4/Dest[ 93 0 R/XYZ 82 239 0] >> endobj 95 0 obj <>/F 4/Dest[ 96 0 R/XYZ 82 702 0] >> endobj 96 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 206 0 R/Group<>/Tabs/S>> endobj 97 0 obj <>/F 4/Dest[ 98 0 R/XYZ 82 721 0] >> endobj 98 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 207 0 R/Group<>/Tabs/S>> endobj 99 0 obj <>/F 4/Dest[ 100 0 R/XYZ 82 721 0] >> endobj 100 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 208 0 R/Group<>/Tabs/S>> endobj 101 0 obj <>/F 4/Dest[ 102 0 R/XYZ 82 721 0] >> endobj 102 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 209 0 R/Group<>/Tabs/S>> endobj 103 0 obj <> stream xM6x*f4*R@aуj7v-!)im} xHzxA2Qk].7#l}\.\Tֿ.q3A()Lmi`6Ҋ`3yN 5Y.n_F:QC(4.WlVIGٛ9{Q/)}C"QK,oC =թ5pY'*C[)ytS}+]W|\UO4 r:,X!m@G}qW}Ud117X^K&Ÿn t=Ɓ;:QHiHU Hy?J"R6u`M%~ =]~N*LŕfĀلpF4(FGV!cSב3}iLRB ,I%a:rGsЄ L ToOTV>c3 &*sݶY>6zUo3?hJX*MT:ҷpS1C+fhUJj):;c" )7To2RbiK{d A/m }6qu$HTےGlCZتzn<4P9kgl<4Dtg%1}F7N%qwUf{DJ~$~6GǦ` RNPBRyS!C+Xi܌)Nps.8لE^7-[r"+(uH@=-d᧒NI-dvr(ET ~>O.uu(Kζ)rDY+&s*h`+VƗqgT1pS\ DDܱ<>nxmػKǸQINJ*e+D;~%K`*~e#1}?%#C!ct<ĴUݳm<=?=F>RP!}qAqquLMeJZJ㴄qY C'k 8D3SGQ63N9_~`:!>17_{r*nP%BMWʻ|!6ˣIah endstream endobj 104 0 obj <>/F 4/Dest[ 105 0 R/XYZ 82 721 0] >> endobj 105 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 210 0 R/Group<>/Tabs/S>> endobj 106 0 obj <>/F 4/Dest[ 108 0 R/XYZ 82 721 0] >> endobj 107 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 211 0 R/Group<>/Tabs/S>> endobj 108 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 212 0 R/Group<>/Tabs/S>> endobj 109 0 obj <>/F 4/Dest[ 110 0 R/XYZ 82 721 0] >> endobj 110 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 214 0 R] /MediaBox[ 0 0 612 792] /Contents 213 0 R/Group<>/Tabs/S>> endobj 111 0 obj <>/F 4/Dest[ 112 0 R/XYZ 82 721 0] >> endobj 112 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 215 0 R/Group<>/Tabs/S>> endobj 113 0 obj <>/F 4/Dest[ 116 0 R/XYZ 82 721 0] >> endobj 114 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 216 0 R/Group<>/Tabs/S>> endobj 115 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 217 0 R/Group<>/Tabs/S>> endobj 116 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 218 0 R/Group<>/Tabs/S>> endobj 117 0 obj <>/F 4/Dest[ 116 0 R/XYZ 82 667 0] >> endobj 118 0 obj <>/F 4/Dest[ 121 0 R/XYZ 82 693 0] >> endobj 119 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 219 0 R/Group<>/Tabs/S>> endobj 120 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 220 0 R/Group<>/Tabs/S>> endobj 121 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 221 0 R/Group<>/Tabs/S>> endobj 122 0 obj <>/F 4/Dest[ 125 0 R/XYZ 82 721 0] >> endobj 123 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 222 0 R/Group<>/Tabs/S>> endobj 124 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 223 0 R/Group<>/Tabs/S>> endobj 125 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 224 0 R/Group<>/Tabs/S>> endobj 126 0 obj <>/F 4/Dest[ 127 0 R/XYZ 82 721 0] >> endobj 127 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 612 792] /Contents 225 0 R/Group<>/Tabs/S>> endobj 128 0 obj <> stream x]oF݀'.ܹHq5>@ӌ-D)i.+iII˙"a,Er%9cI)3KZȬL^,I|}@Gxqd-XhYyVI)`'VdJ&+ `"M@r*|(%n%YEϐ|f/_ퟄ#P=B:§Ȅ 5}}Hbܦllٮ>s*qCo@"fayM`?\s%U"l`M璖|f}Ro!*iV)g(5T9y9{*8d1o"ԂIOyttҀ9PbQѰ?%(-B=gԮׯ ȜǤ~nhl)ck$ANPOh@[%kX ڔp_k ܙBXQ 2;p ȉށV:~8㛥_}v pJh"(37ʂzW}zvK]JYe.Eƪx,3B)єbh#)"]EΌ-mP_}m}1M@1Cr\X "ޠP-PQ{xl*c13^`y|152QrB+j?$H2R^[ (Jnq72uf\va [<!+9y34&tfPEЭxMHdэ:,{B@A@I2 v(^z5rDg20)n5\p`wRSzq1Gx2 n]"!9ه4]DAM yɳ3xbx˘ TACW[t̋ Q/'f".HU"5wF [: gKE11v^uH<0jՐ `(˙h6zBQ[x q ؚ5T&uHkT ` }Kfgu NG]'aCu.%%ϨA+D\ɛ(s\Pb6zoK.g5lڨAxy:\fJXjӢ7ɀ̇`xSfU:Gq7cTypE1yFsBRf#|f|0WC]7HǙLqVv`xw1:D֮$Ħ2ﰶ5B4: h$eNa"Ѣv:W,Gsx8CX'ٺL ˾H땋&|@e2GeV"dz\㪣  0a; ,VB _֔ }~A4"Ŝ oD(Bx G-.dh.0%#C兼{#נ?mE[.w"Ŧ(.<9ز$囻ʀi5qH/P>Y2jOU= `JKU#Ƕ豍OGKYN<®RX^Ȯ|>opR.޺Cx%{FNdStHC晾Xy) P/[l*Cavݐ"i1i_)bЬ'§dbH n z n^Ȼ|>.}{el|+9_MAsIPXR)GD ,@.||Ds dZT-T^j; yāh@NȽ'2?aѴÊl!q@L } >ޟ{OB?U1l\̰N@崅h]5l;y;@oR%e@i%gn៝3;Iu31!1, M #C}A` G j O7'0h!M殪LU!lWs3>,C7pXᶼɖғ;pkpM[m(O2*EWo  ŽwBO[ dEVYR"0ٕ_)dET+x&e0 /*3hFVXŬ4p'rFL>I5a˖l$eo6G=XR$50'LJ_XziT8LY>M>g U5(V!Q\n# :d) x/ixRpg>ax 2d#EhxΡy@RQ;; 9ED5kjT(?8oTeθhى9^ ?QE{v >&\\] ~ Xo`,+f ow5#AdϷ ~wL(~-|fv`=#ol,s` EМC+s$Dr˙\;:ƫxOlD KP$z@﹅cZ/J*xe$'UP]\x;Da33bQ@[w̖棍e7= x<~BƦ> endobj 130 0 obj [ 131 0 R] endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 134 0 obj <> endobj 135 0 obj <> endobj 136 0 obj <>/F 4/A<>>> endobj 137 0 obj <> stream JFIF``C   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (ejzg@7dd[77ջ(4QOsfI$~kڶpm݃#OZ{4v}?{'@UK[K'U'\8<+ci<2GNPEPEPEPEf *9!wM*F:.$=p?@u1/%o~k:ڍ 8H~57[$|fg-ԟzW:ޡp;#Z-e5sjE!@$'Z `լMZ6ހIin3ky"E($~κaco-b8>R{T (((q\xaf q8/ݡ=ϰm^^[@fcA>w>ơ<? HEOҲĒ\\}S4A죰 WZ$lgyή8 c被L8b=jH R6Ak=.Y,\FFzkyk>)욂5.Pϥlxnt8 xsԮ urO2JjBcktφUQ#qy]1BR `pr1ڀ=-S[|]?Ҹj? :˵Cz~Sl4v$M }r9~m ִld\Ѡ^kc\pk .@ހ&%ċ}2n<=\j~S[;oUwRn~ۨʲNʣ=^[^ie aE_' 0uiʆ8NT ~"|7ΩNڞM[}YHLG=3OGGoJ|#ര̯+{v4m$e"GHg5ad]Ovw`hEε{xr8A]x7POwe0ZҾ|o۩;{?:jxcUWYdze@wtcR˱FFơQ@U(ERdRVX!;}{Y%Xt"'^0C&|PA~ Y.o8%=Ҵ_JMbB!e#NP}y,}ZKt5K'ʊw03d6ϧ,p:)-!q̝hX6[GnrO,}I\M]+.YyByngqث[F1 6t1 NU*nd=iSx?To}]SIɠ 'Թ✗r>QTy⵭m+l"V??JGRQ@ :( j&zl4lyJ)elqZkUz }=䌣5$h[ʘ bFbA>VUCh,[eYn6T/^sO521Vz~ysV㵍;P2J;i~/kx(Ga-m\OAj\N((((1LJZ((((((( endstream endobj 138 0 obj <> stream x]s63|3J|uJz8?[|p~qV-u~{`f2]x֊[°VhF&.Ŷ;?yEsY F `XP"2@ 6D>G%_2 U K@=JqNK=9:2L!Mgz@\K3{*ݎۆI=/V`O/di[lP=>>w%W|v[wGc1uR[֪ J tJ jPc \ZIiv40. IB Wakb+}ߣr)O```.IZ~ (mP/RLxEhYWJ#MH'R5P%B1Su{ڟa{ ))f gd+:bQS7ZNPĨL\UeU/ 6?7w9񽁿RVǔ'U5LpI~ac=z|b=fxw&^7+\/'툮qQr Xw thD27@;t RdȶeZImj8b >'0sf K}"|iЕ TJf&D lQgra*y żb\TaO1`S>zΎnJ&&3ظ[߉CnMq K?2ޥYu .S_ %K[ bdIb~Ɖb;( n =V24q829̀zjmơ!^h}V+I0DV*L:\h0-6$.<%H4qirfBOz)]8zBUs )nSų EQ#0!eu ꂈ *sz ܍O%nߒQM3q #fouۚSΜ5)Xfœ0Cs?gDzE+Jo|:*VX-U'c!) c]*KخUvOJ0<9i l_W~A$vsK%Hd qX+~UA\Pݵx@@+@q4]r8l;{Nmjֈt  ))u-]br/wh:kV`KҫU? b~nnzuQhO]ASOѾK'Mg{k85yZb40Lrgݶ9xTrnD 5-PxcjsP&!l-DSS8U(u*fuk=-Zre,ao߈`%T0 5*F)z'|'\K F^iR47bU`i|O/T2Knw ysj=83#jZV6%JUXؙfؼNHj1\F_[ۄ]u@~&0w`NV9NOu(V'F u6vA#K'c}oE_xw;pui0!4VBVWː3ZqI 0ӪC¯qp:>A-aqJ\ ٲXdUa\E,ୠ Z~IiV0>ÎA8: NwL3ĸNvL󏍻݆:~6DrnNdk"×u%찌=U~9H $h@0-C9a<ŒYao8 _)q^ǵb1qD2hsh6 m!> k¯igIEyQ>ObwKK7sspdCS 2GU U8=}Эy$=AMhL˓[؋hq H8tar"4V=Yp(ݽC-x*3n'lJէdAbD֑6Z~mOb7d՝GMg)eZ7L1l_o6}%O7havv{J_O3tЌDCp+ t|(/څߑIfBs>GZGYdBL">3trxp13`间'pާ_>QZœs%Otbo:@!S~@^h2s9$ 9yBcc:0q8;7{+.C^q3zԚ LQ ϥKpN ~v/>C[tWtIAfhj{{~Hчէ_$9yP z5!+SgS >gCSaoWU K`%ghs:>1U> endobj 140 0 obj <> endobj 141 0 obj <> stream x]o6=@fM {kv6i3!݃4nd[DJ[1}xg/e%㺺|~&*D i|u^ZV3^g_]UGu~p NjFZ֚ΤB2k51.GYqD8?,bY=F{~9($K,JIDP&_7u"99gw XCiˤKkL}mrJן[?6Bշ|3ef3qyG7+U>6m8~|4BFz߃9|fMhYg4:gAPpnA62 ],f;BόOKL$9V AI m%`fcVLѩ~Ngp . Y?u 㰀,(-|2"֕F_x 6qRxgDabP!8>|tN08_F!Pn&pb1E8{pc=aly 3= Ւ(m!ZRSy&mJuU_qq,ʇlyԺٿNjwuA8T?%\UWhpZrHBe}-U]cyC2wzZ+)FYB*s`{U^{it| d?m|gk.ڜ:p5[rwǍFG{Н]nn% s(pG!e)gIjt kN ?\ L\#AY>*J7ЛpP  n %?V2)JΦF(JΦ n=fN3rdǻN6;x-ƃ4 !+XI 5~Ci݁"{$m1h;]4'Qfpȩ?PWɉN%'hqO7SH^jɥ0,N[o:YzˎTD+؜Eue<&o[ˡ8221xm&ExG/,"<\LsGCQK04˓7`7fq{2T58.tztmj0:AAH-ݟI6aviښ@=yqJWD]ͪ ᘕ)Xh^X%It"j7yef8GhNk6 T7~QҒMYDh7kv=[ىc.̸%N^aToא=_}̏vc'%9c| H|Qf'{5۠wi+Bq6˶EM{,6go)u}pS1LzvO[~DϻOJ&6JYmHBpoaUj4$;r2i5cK^oFLJUJ9o&/ٿЄo endstream endobj 142 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <> stream x[mona?jhw.CM6wkQB8[Yr3}!wZXp8> uqy~bt~ xQ+tUg?:?Z忊oA_ϾJBJ3#Pka* Y%Vqs~V4DchT"2jHvqKҋ܋o;B_nJ%j=SrHe*aC9h?z?ۛriAZ<ܕfTr):1ŬϩXiva8%f/9'Tc}?x߃~b!5wS !Lu&xSu{SPB%r imcmZʥYlJ!a2<cNZ4Sʎ,arʛPM x}J.Wi Ei Zs @uB+NYVd!îyD_P]?jӀ?C۶n`Fj'M=ҞxZKSUټ^uq= Ww$Nz:Z[f:|k.ka7-W]۷K4Nhc^ML\;U}w=g2FGc\"A4 {#A~du׶uHNRI+8!Rl$5 Ƥ0T_6ˀX䒊}7JJzl:yu6>P\TAg4ZD+d}rLfdidҒO1Ƈ#$^Hŗ>)GsKYfBN =>1snÖ [hʺxThl6gL5By=$/^fi\.9U ʍU Dm*<*. CGL?R9jܔ[,}'TU626Q#.yƽ0%wr{Nl[w^и0zmRzN8xl:%I` IJ >aS+xr}KCR317eRG~wNiJhTfA^vUrHj`m>~L9ef*ShNn)1n7b;=^=f }S?zZOH9pF|n5Vb$oLG5Qv `Oo~ `!m!O`j*2&eh~Y\^Sɯi1WD:dP3ujeZɞ}{$`ұq9JNw~.r^.Mq@l=Vl.o'C&i+d> stream xkB> ,˦9 v6&AN'ۇKߙ!K.=rHՓ_cu#Wo\EEjTu{r,ߞ\^.Wxr;̬UH8⺶jaTSvJXZaͧ4WqS7`&C@ç]c(-`Oz앐5Gx^M3D9>n} 2"]m)%9#(VCH]sAlzw[ؽV0ZJ/*&oGxƶx 3qtVb; ?m+&Mrҏ9Zct,OIHTkڔ.~O}%Xۊ埣cdlOs@6#S5ٰvՓb]~ 6<Q  NtYKf_y05~rOH6ރ"nCp9<{{D$ H_$[ٺy<[blF|R^gGwA 6@Yqp͞p;Ubܫc@g1QCXq!Bv{Ȭ$0-r '5]; Ax"EB҈![$=ș- 28GL#y;'eLV[Ls).fGu4*K05ꌁ4rAn! :|;*xt nF֤mzrЦ`͊eU൲7k[؈?@)d J"Ez'ܝi |a;K-jU?|{ղӜ=.*D4LnGKT~|[9A39m)4k5wNʫs^Zv\>=$wrR8{  BޭɎ&UDY%usCZ`}$;'lK)#|E1ELS9arBsP8'GNaOA\@dYFB`F&^u:Mf)O2kmkcŪ]nfdS8dlBU$)bphhN] LI`0Y H-XAVA B7,p޺ в)WUbjHfއCQ9cL8~}S[ssU1M߆R6M?)CuNa 0#c-' ZnDX5&ɰZɻ+E MK- Pp6`*8=Ӝ([!p6xĻK|^/^lGޜC)Yw7$O!GQx|=4 lcϏHׅMpF1fC*0 p௵uizѽs !&2.|'jA82}'} tmowEl֠qIVReߦGw( $PqXm.Kf; D/I 58Kek܎9XFp YҶnu옢8aY6(5qۧ9!)I^}Ppt%}ЇKbjϾWLDb(v/@tJ^0 |̕[d/S>ANUy 1ǘsѷ l9LW$SM-[1Nqn Q+kG<Yhh@\F nTΗKڎ;ɋ ¥A|r1i\B_-筼O%AE <"m>uFFܡ#{w㎪#| fAULx];3#9"SO ! spz!33D^;Luo*BӍn^~Yy riMj!'hXS&,(D0[Z*>ρ#)pQ2j]l RmE:ir3!DX)_ `3L:m꩚x~apLflC=cZQgt >9xE10Ӝ~!7 8p=G~Y*ȝUKLQ_h0y뵑A쏾|Y=$gN֝+/xAK0shXl nŘKfOJʷFCh?$lQ=/2vǠ Cu4`Kf1N<*Y!;.?0By)'+uw[T>Dg_w4lm>ŦO#AŷrioTN4{Ib cQ#uQîtV ?No2z RB(s/ Z ŇlOS "\$Bؑj?.E2ahim/TN." | V`*ŵK&\/.}\kgKV31+\jvAЊ<5 TbnqoB(rCU m:Qk+Ily=h{#Ǫ @6Wɥ!H[K)3P'Gbs`K 3-"N(xN'ī-X6#@c^JxE{sXSsn0=Vs}ހ'SmD'`.F &U.-be=|T[,͑(gBMQKWgsfݳUk6=_Цv{ "i.f$6!J<7G\:ga?NgFϳ S`Eu%#ع|("RNԱA;0D ˳ pϦx>- 5Br\(`q]KY4^PS`B\rźPZy̹Vm0cxvY T<&\B=ǖ謊N0arN jiZd] PٚE?Yad{2ţsH:ǟ6ƥO]kql%o)vt|?\dCNz ѩ bH4>] ]ԚEf]E:@f\6qJQıa]lƙK73q6u^UT:t%l;{KuK;7!'avPNK^3ko{Tw{ԏKs| S+TcZf ,h K4qO:n HR+F+[Q<ת ߨO?*Y}>@ hXO Mu!waa l1C>G2Bw2V\k; !Pl,is" H-fz SGm^8w5ߕʨhLKW ]%NΖ 8MnԌMw/(fї6t'Sp<7(ͻo.L]Y-]M`bӉ2LVrE3]eprn/>㋹,DfWB8;L:!#R6GfF* &grhqJ `em^KDw<+,ٺL?aSiyzJ|M:{#z*þmG=sdPV^yݰaZ¨tA%tXԝ"aG:;@h̜aw0z_>O9FKڝM#\k{>?麤Y -Q4#ү.'! T#\@! %(HІE(cCRߺ&F Z~X_h{/s=ޕ_> stream xkɦ9 v"6ɥp) YC$E:qTcgfܥ B.ggggf`eq5NJFU TUS>^_;ݢ(Q0R_#Yqhuժ¨MHxUq讯~Fs7UFh1D0?Vl{(Ci9{~S8h"!̒F(s])%ڑ}zGPl!uMLnS{پ+(ZԋS>yᶩYxQ˚W؞h;G-ʥX w%}]2:z8h,wSX[rsxNtգn+NY:TulCWrK7&iX*Y)W VRrűia"ob}fgjM:-RЁr}|d AOJ'MnXeLW@pjɔ^ҳ=Y -V JZMH;St(>9R>8ӂ#8a1"𬶥]!z 7H;"uC)1C5Jf7d-A#QLܤ )ʚNЧ*b8=^5gY\U[!H vD{&bu3ZFÐlS^!UO>]<.Y'k~;{5*VEBaZkhT&xjK1BE2Ou-_(bO5c7 $R8;(ÿF t,q@0+~OmkAZE$_0QCTp)LtJ$@ mP%u6P"pi1J4XU궸]LL`]:ඵu03A.z ׇNuWoTzOvE <9 ȒCbLULjя&~o+6D79~ lSZ`ɔy>d4MX9XP!lL] 8imɴArQi^HOV ǘ@Zd7SEO?%;:?qӅ]W?~˟VHMSmO4XЧs\e {N J/SdP&w5JN$BǕ-1xq"֘S&/ݴe|etluYZt'Vs=%gO82g@X ;ۡ(ToVGE{i*|]lxv}1Q7d^d?>akV& s. z3g8& J>=:ڵEx{3Cv9K8mD " 8Qcab4QE>Dn0gф *ABɪW<u%6Gi$c&Rf}D@\q?B8DoCM]1zQyOX)9rgSա405~ pjYh#pcъw3cj+&RRDX;Ж-Y,5 o=sN̑PF'PIC ]EGK}$Мru>f_*)cxta_ynPPc"cEj "D x@f|1 ҇Rep8oR̒ [J ,SSW|L%gʃm2%jaPii@-Z#Civ&+B0:r!oۤ"&LoTCi\~Mر+d B]MHp֗s%e@";a^agΕ?]s1`_S%\X0XbF9+X88<,~s7;B"<ȦR<=ZS*Z;K€/)ҲbxC ~"9HT; ; -; 0lC/tkv[:;=.)lh51ueaqNgk;;PLM7[a7T,VSkNxby9b2HHk,8G` J|~(]Sz6-۱:d u-&m7zmw>6qCɈzҍ| Y =oYr5}ö؇tNz\8].+y| ~(vMC^& aIu/ wW)tE&]x/<$*LS߹aet<\ӝ GB0 8ι̊l߇PCDv<[6 l7x:z7+#Ž7-#Gn+N6l0tzr]_ҭlRR!bݕ@lȵCZ97(:Dݠ ?hybR؈"_Q{HVNW)fڸϧP;:f;GDX3Q2ޘoq;~nuo;b(&=$B#z?e AOA}9)G(W*gx%CY9)%sp*7').^\RVM8z7co2,huޕAnx݋ ykϔQRɖzhPҒ LK=, D 6}ߒ E#m%} 9JN֖Ľ*%>ⓠtcY|,E8:LlӾ\A`_+N*YS6W}Gw/[Et\*V!„X-h˝>v)_!@%NWhW,ѠΊ(ZQCby<<'D;=Z=Hm-';ru.$L u~Z,A@ 1vjVNLZ,M ME6z./Ѱ"Ye5؈wx_.7`.`ͰcqhRDy?!5yE> ˆ͚ b2x3!? VA7X5F c(qtd|p3׾EbrbUC bF'[Q%V%?ú"J3,&o4:jT1~YN# dk*T0>d)dPH7©OEX Dƾa%la']9NF8rql$aL^{* lԣU%,!)`ν`Lϛ*x54 oZ,œ9(j9_]Hr؊XD.^JS-k *%kLUGz Q.y%O6e7i*WE<*ף3 9wjI0y{S endstream endobj 147 0 obj <> stream xko!pdl$HQ("8ΖZK'ߝE{gf%K;;;3;]8?={jq/ f^YY89=)ӓlsqӓ`ӓ0$d0i_Z *`\ 0q^6'\-,+8HC0Oꃽ8R1YCs$#e+bqxak)Ô_+f n˳RU#<7;AJsi.76s69 =2;K8+VRxAU1+JBBWJ1Sv ߾?!k |Yᶤ=hypݘΟpHwf/Kx~2cɥe la@fN @1J_1hDSUo"z! b)"[/h]3s햼IHF2f5Yjz9udO1*_mIr-~"d&~&C<f8H?$KX$U,F=%CIWs-~v}+~GvKfaZ@&\5 `Ύ_osLr LcYOna nЇ|ISHTs<̅4@bFVGQ |95||{GtD-Fj߲+Ҧd_yZ^b<|z@IV+ T&d1z+NˉzGsY_W{T5%U&[R>f}Fmq펼\"Jx4LJNWrܼI_` *D*5).S1]zKGhFmVLj. [JoM=d0Ҍ֥P.sAmqq@&O!Jf|\WX%E8=5ͮ—#ҩ+LWW q'b7XMz˫f+ڠ=$Y:.2:ir&ǡ_x&qE>@.eM6\ h"fRKo,F!>T4ڊY0TtPGaLӆAh?֣5d'tr3Ɖb7^S@h)0wlUG4t8P(Qybˤ`\ulیm/}nN=wƂBEE]EH@{9VU煩ʳ|^3_(t^ixމ3) cyiҷg_dag@ٜ U6nל{VI;tjђ@l_M ;^@H truZ"[JWErnnx(Oux=`UUUѺT]2 jV:K$1ydQbLK$(@ԁև:PGTi^,O ~ \6Dx&%M+A^dݦiS87oWhTR{=J̊\"SWD~SA g.Ec.˗,PS}㋦QxyӚ1H2/5MBJ-J>7e *uxKxIzMJtHh4!K5Lh/Dx@Ë,+82fGg>Ku$t=C]- i;ɭW 1 U*B6nU $ncGS擌d#D'f<МCG;)23`ETGkKG7u)F"dA<,SE+1*՛;tY3 }7kr̢{(2GF0igxa+ v!uqCJŒpJߐΞG4mH5&@t}0h!L?{:6`i(O&q4ݍϞ0S걐G.$ Lt[[,ݥu̾T'|x(5_#!A W%K9:Rx.Wʦd N۝X GsȈ6H_KJQ`D2q Ð̺j<ɬF4uPɬ;uM@2{f8 ~e)';I;% endstream endobj 148 0 obj <> stream x\r}g ۍyRv,I<#JEҜcs/^S.3ӧ/.˗!ys4=GAt~R\tCs `߼%6ׇ󳾹ߙٻ 81׉^_Is' *Q4JC|B;)/'ä( Ҙ}Qa/CE<ԕ"XJhs{Uri޸"0Μn\kEr<8gW1z6u#ڇͅj?§pܰ~sڇ݆~DzdFbKL$}7qP?}?-&*W+:6ߵ_XE46R#$eN\ pqA)i`UZ&2Ni ~HhMiZ}% |nCm{ʇNsZ+`ͪ,N9B?aCGE e'ct|Rd'g鱙l!d{z$oTWhfl^jBо3ƪ;Q{CDq݂^@mSw!5Hk;\patr#SaIv X݌=(W@(Vǧpƴtﺽ~?#obp> ).Պ[6Zmf݆˭%(ģe:PqcAYP~c'`44HohQ7?ځj=*}7I=IP]y+qh(a@l 2T8.H ^K.ez,fǕ Aʕ(QjA \$ ";˫6d=hNpa!FiQE⾃Q}7M%C \VƇWk,?\"s/ tЏ949Wz8 X2! y RezSov15c.Aiq d:Ÿ0h*)݄ v"]#!L&`k(0D;m+m?:ʹʯYKWuM f5L4z ~Lo:29UV%Y-\)6X[ c=O˅Cq̒ƔmUTv4ܞ џpyj& #,G@%ʇ#u.~_ 8隣P *u#UEJ7NI;Z8nuL.(g G8+BF춑`.u vN찯 v!nm[O_=I G11' Ibyc)M)JVrhEpD{P=|ʈ`}]jF nTe7l`u}MIB* {BP\ 93!BHf)0I@#mL|Qp-9Ye1E|TEbiJ{t젷W0z&LzoA+ bvѻFY S'`~RWͫ%"FI+`u .62R,nMjiۺWVI9tZI3eD91gY@zuX*]։*1kGFSl.Z {[:yɫeJ{VM>YLK^C~ٻHu|I]i[[ =N̅;ۣJ^N^ֱ3s^_Pn՛ju~N͹H ( 2 EϠM@dBEo C&7NIzz'Wo߻%5) ׻jk(KNe75d3-^UZE(y--rKtt8ͳPxYTZvdi+Pǫa=ӓ z3N_3N_>T4E N3YHƲ T_||ЗȞ|]5!z~zB .BUe"YbW]պra5@ea+[Pm+z&cdG:G 3y7yQɳ+rr&/Dʙ<ɋL^bxDqHL&/[:%;1Iݏx;,tw0^_pʽ9ֳx)s|RKv/ٽe 4x^KdT!$6Bqk"X.\8J _}Ra/;5fmm^'c,*o $aXl^y6i6/l<$k$){<=ԝ}cuYDiO/iO{TŠEo5c*w",9@ë.2b.khwNK?S%g[i`5pW;j(! ?0PH89gP *|3IO;p<2K#rΏ+7d/[?(KܿoǏ&,I;*R4ȨVvw)1c'X?C7 --vӱw)1./5wxvҡ>?tr4{”D.hwabXL~[69iD  <%K% ] Ds{{N?JSzw/Lcu4Noei% endstream endobj 149 0 obj <> stream xkܶ}nSėخ8g]뽵}ݭ);3(RPm{p87)r߽# :;s Wd<"{ݽr@w )Jmd7&L:5`2/Mvݽkkd`TI0߾nz(Czv(KyUH~vVη/WBzSeX!~@9k-&2NHѡjA"{zjw?Z ]jsj[ ei]ZWkQn rmV7#-Ԉ&ot15E&$OU UlH Ogsۭ%y8kxYUY]g'£~O}Λʧ7)S,Ajl׽PaK 놤ewh@KgNQ x3aIEp eG&Epʎ= a݄6~-z*M.Q"vO:Y.'V"vNoV zlq*U+QKv7=?c5ʛb*H*AWhRʡޗ"y{,E.0EC?̫:F=ȓޢJ jb1@[t r;R-FpL%MA(3a}4bhը)s`}"ٌ-0M?RB`kCpnQ "/oV_1 .zGF^߮[G>q"j|`NhH#qa )@yNp'/:ȕꊎ5hi];^tXx-8 !Mǫ;("G6_=0ũA6/z0TRr6]#N0|W]!Muxڪ+k*jLޠ9LQlm}v0)^`X*r]ۏnf$6$e߿jz)DKCj (PA`$M 7SU^<ߒ9>[k./R{J~/Z~F# 4>qai7]wsޞ͸lz>Z^xL^U>({p~_@r-VV$ZwV#~$"{ :a~Cê#WU5T`_ IptXzkJM1MS,Ŭ@ܼ`u`\|9R||F2V]w_Zz)J{b( fv N `pr9e<[M_mb2 iM)A@($(5Qf)U&K:pްHn8py7I/8%,*/8dJG+c ȮZBϯ>0|=G^_YӃ=Bv8 hcHP{oIߞ^Rvvb,N:D͟U.Zlt|NoagE笖Cu4Y[^ͷ֩f밆8N$ŤuIu:S9KL.FAFk Zd,-̠]QX[m: kavli- byLڨK| 4x V1S t^eKz@ =&5ES;p?5v(ѰLŶʙ ź?)1 c9SH(lآ[p.>, r}7<&*;o_=a_)}UM=?#מQ f<#in`%Rl1IP0wϋ @g6`k vɏص͐dlPi}MwkzaٷwGf&5Ok\n{ȠI+ǟoST/8<ؠ>?,q[z 6p-f0^b?޷~< QP3[+:E)񵁇e-}ҹDKD:Fѻ^,z^m]{BmS0q6švh5c;L[oHe.tWؽ}oIV­;^ MwD`aZYDA{z(ݻB(Gww<Nfb Ŀz-- lID Qk^n{WOZW +_wŻ}O%laʶέC ayEiGߎ]0cY=?t {wzKFuXRė=GE\ ("wYy'|7>8=6aBX;oc^ 'vH- g]jgNKTÖyأ!%tЍz> stream xko3$f\q$iHҸQJOj;)OwfvI8{+HÀ{fg_'j!e-\'%rD,^NO_˿| ݿ;=y  uF.vmUSwvᬨUh `nb9=yZj! F7`hq;B1S/G6BxUؗȾD(jqDyvLSfV= T 1fd-Aw1dꋥlv<7OK))xYju?/,/7nx7Uji=S+33*+֓ڸWKS΀DZS W6yUs{T*U[PkCӘڨϗKiAKc Q pKS7J9G{plw~Xvd8qM@l]/Ddmr=/(FwDT_ MкYCsճF5{B,MP tTΤ -mE jw&I4ϵ!(~ZvuLl"50 |w66\oy H:7|Fu=v΁O#GW8䐱7I B`Dan5r1]myjOI}\k'#>iO nهI>x, ;bKb-Z !W3d$؇)!vnMW_RGϧ͵׺ Ik|ҫ߫ 0Sn>x"j100 ~ a? 8W>I(" ?pBiqs'u !-Wm9Xʫl'k~\i]dRPPzRmh&V+0G >V) vBqd0OC՛kPսer7O4ֵcӛ|r?-< M^c@؊s,-Sυ$$] $RBǀ(%ӱ<\,͛.VZ2@e@JGSوj`@:01!=^ȈBrhE99UTL {΍Q\Uc1Mb hTf:7su3OC:!~tAKQqR+ۂS@ y(g4b qPdkYI %V+K@' WL2#ںha%OK5Lx'eg HIhUQ\fBO LN 08!ࠡ`P*̕`_5adjeu셰aU(TfWwX3Ll`&ٿC\C8lb G)_Ysy=hdL hYE0ޣ=#21?41)яb_Xx ?iZt~`:@RD(P$XբIa:xPLeRO*02$}SyZc m욺չ VE\k\ǝXWw;Ƞ8A[ 9 \Nٜ)gXqvXyH!(ʙ=V?C3 H~%ai4 LQ?|\vRH˜w0SKkNɚkc;0%Ѓ̸vuT%cfc3 %CrM>l4x`JTvҾ(?x(z¶fQ*qa&*&)NDz륃֮weLȾҁ8w6Bf>B3 % .Pn#w43ci*b( `$ƅKKA)-q9P0k]uH3Uļ2ݣ%֭-zOoƭW9yhLgҜۤﲦ!(&{\l@J6p~t l-&h#WsK#L2؃$_]žf?iYMpgp(dJY;ͼ3 %vt̘MvT:^G5LWKG!jiD/пq'?Yԓ`m?4πhZ*)5 W⋥͟Wt{m[p x^͚urqtT^VvL1% SoԲx~sәߠXz+\\}PHr{j2V%] N(qo6f>2 %4Z x(UN\6i v:? ͼ?d@JA Z-ĸ{8(ͱp8b|.k<%SRG|›0̀)p ~!-olc6 ď{OL yfP`g06!R`b[΢u?p[}]-Ipq$q-zŲQ>Q)1Sx0JVX+?v8bjf6f>3 %vnڹQ(`QθtG} sMK #F:g>4Fπ)?uaQ~W nU+T+:ZMt+XK &ǀ=3`JD[Zh/ fs~_^"IM- z*~^l&L)1RQY %ƣ$oe{.u3@6Iy<㽮 v]s@.CzG"[fsWv*Y.j>^PQKZp1򄆵:GUki7jvݷ~SocLǺϑI"3\_/_,]uK !q`Sd ,wS[unEW~Scѥ%` (ojXc˫;7Rѧ0aqH:톣 W*@tW-&Ϭӫ? XY{r'%N#uIAp *VѥЇWg˶ߏmsRQGc8)dŏFVz%e*_ܿM.q+y.#'.FAh(Nr_V;RhE: ="m2n|=rFF%zxA'VgT`;YoSCYv 1[B:z;R'[|E,QVQ H잊?b"9RrE$qn@mv#a>m"|ywGI(,jMCZ3M(2qcK/)+aZ'gooWwP1gň?pA endstream endobj 151 0 obj <> stream xTۊ0}7(-Du_BR >^'4S;;3粅Fgf9R案G#tbE# @dNu:&8ZH>]oq4bvo ZD;uDp6,VmG;u&z1؞PfPػjCxg@Y3#j!N۽έ-ܣfkA7470AxOy-{7MfVRH W5KeUYY+vkA^9L:7^5M@lV} ߤ~B(tmzxXm)4`tz搕%5x]RdY{,8$S+tCY"ǒ5d/t{%VCCG''ees8zQ=7LשeS=}6`uW+_JxV+cZtّ~.JZr78r7qaힽrnD.~?A[sߥ8@=s$iHiud?1 endstream endobj 152 0 obj <> stream xi1N8:WS97HZڻWRDɉޛPn`M̼ы>R8gZ]~j:8 JnuYzzzU{uϾ?=|`f2]7U|uh-f5ݪSѫi-9Ȇ`Z"?^m#H5{qR1 }诮jرͫ5 )^a+g~ dnY) ^ _C BH Z]]8T^+*~[uj9U\ߜxe_TI6$a6s|AJTw\yV4|􇯢@, 8!PpzR ;bD#!芤 @prq$Ea;2 ifhj2a5W#ɍY{zjroUQX :G2F#7N( .Dht>|xCRJ ~U!zٓ{#@r/;7uncsGMjQiY7> 3![J Ef$tYnrgltxw˃UN^ֿ5\skpHڳ`ڀy\%?(;-ǩVˇmCpHpy8tLzOO!Dn!r.[gJwᴏ[+qZ1؍ueC˟*gȿT.i3iw#RkdΜyцSxR.tX-ĀtBvGmh%VL Ȋy1K'7F cvDЍ9cHȴoM?<@w1b5 ʘVtrBGNܦrb`5Xĕ.iʬ S. &U%K}H#BL7 {K%J(Pe ଑k9wTx>8 %w[y^R6|f=s^¯hC?ٜT!׀̀5)QRŇ{r#XoQulWF#E#,iSj>pv -ls̊}Lݲ$R#ZlZߜRg׹n&ݸ+5Sk) K %]UR^B"SlZy/JRj|e[CH]!{CCoOs"v;R.B2!sH4%`ɼ>q49Tďs!Y0&RƫDv u"gw&D6-\qf9QGs,b3P.!"?k'8d mck^i];BʹU9RXA߲f2-QmT *7drU!m.]ɏVdq^ n^S.uL4`̍ڍ1m}-R߮ ,КNGK5ܗЂ:G30o$_icݤ ?Kkă$7 ?n}|x':j3I:\r-\҅:cu [.f[g~ rvD[‶4v'Xh%)>'Z3!ŕ# B YLM'ΏBAjef]@7Mly~2m |#tج h.}XQ2r~(R@U7d7e34[C8+%q^+PǞ H=OkD?MX%ppwTR#K}x>nNޢ &3dOyˇJXeH:h?}PG!J1c㾯*lvOV}9dNCX|>!|d,tCir?(z+i!x8I-SC[\{ME0Y23Ě Jדgre uWwVڪ@m' FtUM{WZŗqpYpcck+AmbtzS){n>u=T5be=;9lCK+PMLuLi øno<5N٩<~:]#FPt`MyMF^\d-Zj,wx4[@FwWȌ?%W+w>iϟۄ{T[oEiw"LIck;D>ږoC_lsՊ?|$%R~[3Nu>=]kb+@|[Bt bbMnP_?)k( XkC T3֘@ePi*H֡pr<"r2&NA`E{7K"gXub/ m29lFpvʻė/moV+VO' Ll/m Ou'=Ū:dWB5BlL>{YÝܬRs>[-B,I+1Jw(m[ϋt>fհJA,/,7! [b([.452e2ژ"mx*ၖ "|_K0H4'ވ 8 w*H$WCS]Lq9C5'껪*qCM:jRdZBBd|12N9'ԓb: tڴ BHZcA ,j2r/཰$ ( '/UYfPNү_vZH~x70̝M?Bu2J r5b8 q.Esns~s͏z\Bx⨨G: i %q"ńj1D2 P t粍-<.pbM-6Xf)^km9? ;!݁kIjtjCv6ޅ▚s<b⭨p>Yg\jͥœ.$@JrC'3˿f ӣ+5{D?`Bշ>Wv”gq\v`R.!~fŪK_ym.bo]諹 endstream endobj 153 0 obj <> stream x[_oܸ7 /ÅIS$AI\)nmw$RP&T$Xkp8p}vz|Ǘ8||ċQëZ*_{.Eq;>*K_??V?J tTB3ZL4E#?L=>Uf%44%4Tl{*Si9${vIU vRgQ⤄QfROmUYJĜ]"*C awz>}n}RnoZ6-nWˑ>**kֈ 9N5WkkQUk03fʘeKfI<*!C]Kk%щ(I;2!\@ڀtZ;X@rg'(9=Ujjԇx#*#kZGM1#Y,WW#)=$|b/_[؜tQ1 t=yX]|Lxsg͚չu7~/̂EUA V'™v]{[h&QJ\KL"÷ 9$һfl|,ź2U0e% #\es׬Dͧ#&h luJoA0c].k͈Q\Jd_am 1yP LKP[2=at"sy&辝4}~84LOhWpQ6?Y}}|m5llڊ;は3MQTL*Ss`Zbz+r HȎXz 293L8"^f lvQгGPbP2ԒXI;>pGoT5J4&%`$k`NA ˯@cAV!yBƠED-??-m7\,k.0a;¨o&#f9˒l6p`#yv4;Vf(@T&˧+f*I6o,%!M-\B9%+&N=hGnZa@,6`Ւ v:L( Z|'k&k~4I !f")3&'2"ZZI8hS)Z8[`KNR3RglK}3H& 5ސE!r S):8lhfCX߼<{GU*_Op}oK~j Kĭ^7pe a<\ZR.>޻؏ݢ#w d݄`s٬rPfӗUQE 8dۏA 7ε |~ꮌ Xw|FYF;۝˳U5 ٺ]_e%<t鿿,6R%lUtL׼k<buF;-;O Ui};4mZ50Ĩ3eT\mKB#[B'&R/+:+:54©(o&Ʉex6Xz?XiKY_du?[}VVX uxEM3wf43su~ɜHZșyW%o[;'J6S tb@jX\V,t0P@(0g`l89eo<9ƴRL|Q]fC#fGfH&񿪖Hz̤S{wroK/c L)&fMTH=/r4V+|3eA$8 Dë$NJpz!h @2TgNM\P:AǢS\e CZ.b_[o3k%J^tݲឍ¦iq?[8Q3v Q_T&I4|ڍO~x}~6M5m[~ڥP}WEKƒ 1U^hoP(.K8#]H$_#B N-dKLMbFť=*6l?jGYq,dJ靖-}wp )^M6a=aKM,RQ=SnaKk$ Jm9?Jb)oBnSI endstream endobj 154 0 obj <> stream xZK87AG)9[ fHЃ=8Aqnݶ﷊)e9ٝ] -bU|w{;VPJjQE ѢWZH/7ur{3/Sqϰ{X vY+W ZZ2E, kF'ʈ~u{+&54\Ym,?TJwK.CzFSŬV/%Ց*,Pgz@ o cr"9_(7UEr_xV|d8qSϩ|Z9dI8kS)z]o^CL˼dè m Hm*>Õb]-pw|7+(D.OkCdWFGZç=OTÂ9BBcR|;VE5n>oV_**z"zn,W6܀be_eLiGdͶtnJyLHzk>IZ-wr*Y!TN|&\ R]/! z*]զ!~Enwy ih܉. ,s&aTR8gZW8+=&¡/ ;4e9e"0)CW(Vބ6WP.pΤppڀ^<[Wr}i{{w b)_೵1#ޜ) E6)НfCcǘ{ ClOxdߖPr[_@U[1Vhck?0ُ ?X.B0B ~7=bh'IJ8O6Df L eIHOrn3\Cqx֗hv-!ژZ /߮$#ӭ=*_umM!89'LH;.WMKSvN9 ;|!Syqhh*;t;k98'|x+@5'Zf\(l(P rbY`MCtf:xk8?D%2P)d*zNh4:K8QD@\:?,;,B54F:;ϡM4lpU A@R{׾-x]T<7Ռ&v9 UfHI#Z c{ _ {Tifeڪv<l@U!YSG=|hAj-pOGxvudRM¼ W'ᩛ ~`(V698hye$d~Lr0]ko[A =1 hC/T-Fej y& [ZwVM/X!I$DmET^&gl~ *ѲGPA5q5r#Цfэ]l O]+#wi2 {_y~ VE&ABA`-t+ќܖż+o'ڍ ZwU.X #-ãHy\H [Ϗ4obfȕua #)2G@O8zBe]ݻn7Y0suptxs 09y#cFQvJ:F2ZۉB-Sq)_؊q;^cٙ9ZHNhCr{,l̍}u{WXIWc ]l"EF T3QT6*cܩܳ%,ɀ6 <r)08x/X!f52Ƈ)xFp@y*=6p^lt? z~ úCH1ch5Hq|ƿ[ endstream endobj 155 0 obj <> stream x[oܸn>J-+?]."E/wi\\llڻ{4(wf(Rd l$GrfkOoD9Ur~sz“ҌçRiV%珧'yr?>=H29ɏPӓP$d:/T<Z:)uDT Z:6'7/%9adA@EPGj{uIbQ|'zDr~uSRSE.иNg8:P|L%$' E6[to2l!:CW9d\Gx:/Y%r,iVGMӈ꼦_Y}Mh0_?"@yxA!97>[ɄL2[) &|[n0h٢40`!ΓWJȒiT((*ʣP+$;N?d?EB!t(JDу[GJ۬;bvtq.`5ǶY0{cC&?=enQA,g)/j ~݃np#*z Idn Ab^c l2|lJXĠud֏=ˆ@2(;o H#d?hz]2b# m#y`&m1d';$rdQc#2p+vkxG!.,OX+ȸ !Ek6rq Qif5bX֬D) $H][̑;<< aUU6=]LQq+[!(/z*`,@E}+&!LS=cn͡9֍B~ۭ>:D:#cmt]uRj61w̻/@tk1nn] +*bq 2RLGqz#W+gdPLOQ@׺Hm͌WgUK"oL \e,X(纄*{i;4#"%,f+RjZZu ~CiaeltF}&AWWciAUzۜ$ZR3YjQXciE/YDp2騺qif|] մ=|$a A@-^ Kh^=m~w`9=pkb)Sme*Zzݍo-ȽM9}=\q!ٔ}qT1+~ Qj)WL麛f@L{ A wk=DNƉ  %pq($((@p"IW$麛&@${ A=)LqqI41#8GF 56 _A7 H4A$ !Sq'e'}Ƿ~Kf8#} .[hj>Pir/gsm*(Y&D3O)8tSu͊SWO=I 5G^g=pd5:re˸*:*}Lv+<;!={??n~o@i 4I7~S6'@{Ӳ`k!A,u 7 䬬RYWڣ$b!(c-6O_8|]ȩ}3 NnU +f&8’-?wGYV}V# [ l/QO׎;F\˧ʡWܺG{t; פY^%22=ՠ{<0)um ig*e'j\H<_ςS&c8Z[EbPg 1F5GmD㪯]s*%Oitϗ]Hnms~J>vMђ0lF% /`.xqQ(񒮧G, V& X~i)[Jٻng81pTm',fb4w^Bso5a~0ۙ[9_?4/ď%jEGJO $i:r0F)):A؄JO$gz&Аb춺E5Ɨ^愵lvGK4*}0k٘Br;絗BN纝DW S{NYWQGgR endstream endobj 156 0 obj <> stream x\_o67@y"ERRi"IaIk+o(RPdn 9_E9dqNjV1?5R88<,V|rx X O2Uil$/Z ͌*U1N\0Y%VqKSkKX"Kv!cGCU-@zmϱ_U &ʳϓ%5z^VgT1xRhdH͊W..Wuqʳu[\}V.Ok?TհVYNU݃T̜1Y 3m仕,sv*oG3x}X 8^ H55Hė '[ᠻj#Yu~iV)>zI׮lDj84ƴ;tp:-F-)ITn ҽ\QiZrc3q"#oCL$/x5kxG Sp!i}$Hr!Zu~̭9;:X͵@W\@~Cc?Q5D#ҠxQ }k~O4iV1bOjb9pL}~3 .IW5)p:QIHr^U^d3;?*k^׶;~A&%3M̞.kYeb;b][D]z. 653sľp(w,qˡO+B~ u,%8O JU:NBĴo]'g1!K1N53g_2f:%HrW88"l&0xjQ!?d.6ӹX&G'uÚl-+<[ry;A~v:ڻC`Bh҆zHtkNtD tL;B$B\G fg_fGdG`Kw:2>|X#b~v 3_1㶖=l)o0x/hSkO#s,O|Վv BlC{o]θtT퉨> stream xkomSŧ\QwM+8h '8wڻ{̐HId r^3p3_򂱪3V+ZU1xHUY]Ï.bSq/oaYZg#YqЊʨQuۢ0VxSՌ`&毟PZ^\+!+j4ϐ|jXuoԕkŬ[,%Ğ; P,G0"DvY^r}]=nDWDyRcʔcqw aߍXTT->5譒Q¬a$aS*S}A"ST4Ik@цlf5 EH)xpP (VUW\G[V@]r fBc ŰXnj3fyLF!t İe.ak !P=c=ifDf+8"X4=$;`hA0?v݃p =X muE[;dD{dz~_i8>; '\BN_CHnc} 3CՆ١: Y!w>Mo+ش;g\2=0S:Дǐv/c##R s{D93Aڶ^02-xŊid( %0> nEsVFt&!V=R˘Z*ÕJW]M%d *,GZ8 6 5 ؓ,$u(*Ąz $_7+ulG7q"ώ;"%h1}4HGe L9L0NSAp#kq>y(U '*(y J_c`maQ{@]>S!fdM V|4>dKf6FJD'KTIll;nNy.Opa(`$FV"Ɵp+F9q#Ԝ̄ʈGجR <nfܒɰ lL2p4;(ѣ(KqWd@i_3"ІTSXLWGoٰW\ d]yr]>EtQtO?_\#[I_4ﺚvlěmT }ԋFg%$qWs<Xϡj+-b;yɖ$лd9 Ia|s!l*/;(Hco@6 #YGԙ'@9WߏM? 3v>MY9 ZI lzQߣˊ v\'0N7k@z4!&__dc>|DLA@UH8tWe`G"ȀLHrB#;Zd 1at$X"R3͓rvxlP̞LϏgL/R]ԝRP†WN>n .R<|h Ep,5馏"tsytEkZܺ> e撑#%Tb},qs}E-mG l<{hwƣjp#]DOG/NV*̕ °Ћ|HO9p3V聲%B‚dZ'ky(GQgaƮ]*ZGWIL᛭JvJ\E9VrAy|ϔ`]N}6W['odB:P7M( "'lq"$dRЧK)q/rL (!s2m+k`1]&*My՟?O4qJd(S#udP%0Z-n +Ml&PfbGiRׅ}1tgL0> bapBn礮l/QTio+nF$Ӛy d!%~pIU;b/Fxڗ_ ΨխiGe=):'+s+(9wo8rf!RT%D[D }#9+HdP vU;i373Lc]zY[)tm mPP[{Ghk4}9ww7@Jk//)e,aZIU? ETQ!4I=?Mdne\X<"V|$Щ+]8 mrO&;%ј~&hW= Iߏ~fBȢR[m]iܖ)[ꇓ؍ro-A YEkʫ4$V9Χj^h`Rwu8CJ&ĚeoZ?xF?s0Q[Y\) ΞO? n m̅Kz>iȾy b8~ ˰&9sPe ;赎'3PJ~<ݑ$\8du <.ְV,!bN*5Vݛ`i{=nt3> stream xZo6ARfO=AswE[ܦ!qrj;ۦ IID9WƑșp>~3sqJ]ޞ<50T)r}zRfwӓ<+g_| ? &gxj- :tD $qζӓψWh!?eMG%TFR1U>GY +"\^ Sf|ThvJqfG<УSzH}=eW /u1S2Ӷ2eyX| ?!>.+Vf^4ĭVa^qr}b2[|eYK)dC}c@"Ϩr(0LtIW1B)ĊT*<\eq`.<],ט;,xoaSO6'%vx# s3*xb5 iK@KCB@N( JGȟSy+ѓPY[2I:Md: =1B M X>kKx Q)d Ȼ(i >%D4dھ`uQ, ߃O\O~^C2ݼ˸ d$HR[.)dNHukWK{WSUdS6[7LԠ؉a0K-/l(vG"$4xR;i* sdIcY d z2[ux:l;M;hoۀLw6:;*5-bk"V*DL8yR T e9v1Ih3)L~87:FdsسƓc/ѐ #4 &qAXd[mqOB qz nol_n ̕1P曂'$bR ./?~o;G]a; `ioti,?^mް%v^蝟E%-:{!L5k`-]cY,"utۢ},Ǔ;Bb}xYWUrO!y&B); n V/m8:[ fN7 s: ܄7JRZ7!} :4ppD@rmO=?b»}OFāf⹳C+s{;1 q.K3 s9<*˲sU0+\!Uln)7^uYgs_Q]eDh ʩ)>a:U 펩M(y\s(kڷ@l߸$R=Z6I +,EU4{"wQExin>53A@76'KTklSx@:)$Ӊ,: pShPcͷ >),#xQ8ҕ<2{m񨠉t$v3> stream xko6E**"{mڢi}w8lbl⵳k !;0jCΓ!ӳ㣏/ëFg\/eYTO}^=@-HFb ZѬ rQ]lG?mhj=4HKXFMNFT@|Q7sq_,hEqv,Xy|9XT.P=JSFSNB*[W\mWBB/+]⼼Rr+_UE{4kj+k# ~yrH޵xµ8|mu G OI/`nDjY~dg'5G(|؜HxT$3Ξ,a@d(w·2s=OOMq􄳇@۝8`2bgθ̂b:A!ST1c"ӄ֍Hq5jiEaAb8 )6CYKmji3x$Zp')Ϫ-qg4?o; ~\?8=cD`LØqLQ%G0S|+Y71tA؃i(9< [+|ɝpV7/ђ jn^BYnnɑɶn19 ݣWUS^6%4 Г|Qm)BqKZ'#\;~TH~ Λq͘9%xzsA 6.\<${>FyQtB<"KYsGuI&PrUBBeͯf1jˆhp`DWPwaXȌsqH<˧kلޅw3mWgN_% fڔ9#̰#3l,#}֨5fXw.H %PrxTP”Jr rhb ˏLag]$V%=BoTTJ)G-DdpXIx+AD0yyΣ@&3Nr!aO*[~Xx"JDBS g$EzP=(*LrUśZwU D^':9X*,Gf%ރi'Pr>'EjsHI&CO 'Oea%s KaU[[`hā!}zY_ƸkzWF mIY&6Vf[Š:'"C  jFl/Fߔ _ yG=CPz0(95W SY;ԟ/HwQE9ә$NeS7+0K,yIx}l?V, z=H Bk#AKz0(9&pױ/\~&#T3#BODN^]K,'WOS :3@*+t?"=*MN@?=JMwoW'~f_yB8o5+*+T.=*H}D +?,f )=:]]ow/7\հX*a2jCm1(~aS\Њ)—0FݓV'n HkdA:݈TeN9#BZEW.f&m4V/(訇8{iCWxCeκHjOoQ5 endstream endobj 160 0 obj <> endobj 161 0 obj [ 162 0 R] endobj 162 0 obj <> endobj 163 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> stream x[[sݶ~׌Jf, x"J[S_&G-i"(RM H:v0boO? cy!{,)Tee^%'7{Er>I{/o{o!3/ O-Y꒫.]9J'sU&fwԷ:/E4ہTJOK!s<׊g(>CFxrr1QncIK5?oh\,gt=P׹䲏:&; >V}v ͣWjm|Y>u*UY3R|=k@m)'ɿeQn0u^Os!E©$C-0pTM!3`tscެ}qn5z!jݷOA *HxQ#u@i?`Zc~dr hi@ўn3&S+09!ˎ3Hjme=3R.vYȜ3Y)Ju\,nC "hk0XyS@lQƼ*<ı8xQY)V}Sw7xi;lt]O9-"$2v"+ Ll3)|i/5/$Oy^|=v8?AT&B$H`.Śu@T1Xw$QXl5Uc&AE=#*N) RNxl0{| Uwi }$WRCL_ fJb*t|ldj?Cڿ/Om]v4P:W"d0tqP$(& ([8h= Jz5 S;b{not.wU$FyC2M.J=xPc0iw0a"aQ0X^fBV!4I@;261/El~$3[]:o]t4M۾}W9sC=/i=$ ,h&0L 嘍%`E^ ұݧXbb^6 BA(H>DWzP0T0tH0 \DRi JGgrdbS0oTSH+UUi :w7ᘪrB…} v-D< I<-hՂ6Gĝu=]]֐;ˉ LE!tqox@Ƥ`FHc; ȃ5Jp)"D 8 CeC[0XJLmx"+wxYЋaؓD wUdy~B\ܑDe:X<#b}&Ss6 wB2*u=t.\wZȆdțdOpE(͆p6Lg09Zvaõ̫+׻tq ]- 9?gAZnVEd;e _ϹGA}1 7Di>]9*w2! xee Vc1K#킢 !{ts TA3h1 N{`Ԩp5]q`~*r6l-vsa,P[80vĸN(eߚ*Xz0-pZ̠LH:Z2pE|6܃6m$e.u`BpEF^i$\qW!ӈq3R01~4 g@ɀ1oUȵh&}5^hͷgUQLMS57Cs+-T腾Փc)B\ZEDLߘi!_.[YD˄jN2 endstream endobj 166 0 obj <> stream xkoΰ67 &I*%0N'1bKM3>]'M"8ř!O>xW5\8<`c+?:~sxЮ^g'BAC#gZ F@+VF ++VÃ|_M2#1b1S'#JȆ#1N:gw$W(I b8, IBDEkvF;bѬ77:cLn9#ҋ-}nX~_)ፚ -KA uZ8H^z0.{;!+`x'd4r6(<(zM Gx{oz[ojd4gֻ@ t}|wH 萰D${IvU[O{hWtQmmܻ-`Mo.Xj$3R;U\p I>x"*BEb"fD73/f1VR}+׍k0L0O`H4Z(c=U>K/)jġi\Sj:RE;9īB*NkLf/L.Hq5<2 22r Szd~՘VXSѬn z sDӡr hO>nS8lD.ayۍL }0mcԾRFLzHhL/NP"S>4 rϋ\t!+NE)W*1,5 g9goPuαMB^PQ4MI`ޮuW,JF@O abEHB?&ie4 ԌdVSɘHR.ܽIWg|ɾL#Wêdܱ̆\_u#Kܫ3SjL5tf+ 3맯rsdB ^XZֈЋ쇴סH^}yDN;T0W@ŒxMyx6d*(? C q2^eTdR /2zi(5DYAJ9Xw8 8L(ZMR.{sɝn.;U: X?6W@jKV.FASz;1c WwgIٶ^S p9ѽ]&0Tzj- 76u2Hg5?K hf ZĢzm/z2O;C̯B-L@_V0ܲKH XNG<~Laam)^N$~N4eX&_\ڠC]Ի.DKw>j;@4.ak+-!Ӄ'8W)ʎpg)Ohİ B J c-Jr; N_0A!bd-\)K= ,4oB @}]rO~Ot 1*^Q RfZ I[*V5ҏ?}Fw'uqAG%КVe)J04JP+pmb&prSГNmlZ&3#cMּ &9CnN: vK!UX`ߠ|~Y6ZMC`ǸBD#PC-РK H FF" ʕQS?jܩFK /2阺C!D<`!=~}}uD!.Dac-&z>h C]q5]&JWJtii#!x"%p |OVLz0ٴnO f7NU4}W(]]]ujask/ܽ%u J 36sQ[8}4a%ؑqgY@ > ySr,ұc)W{5V9N]Ze҇ʉZe&*!Joy4^(UJߴ}>MjDƝ O+x}*хlwR!dV_Ha $HtP0ҥʹK/doo2hf+NG0LfKV* HY\ء)mqnPjHtLj`W̹>wS_Wmq}5{NGGiqXZH4 ʻ^\-ޕ{u'K00'NǏZD--3T>'ku\KԤC煟s\%&Cz_K@x.0Lb|qZ2*΢#urfiE"9s7/Xt{#-h/X~ Y!ZXG4:h~8:I߲QyM_N0K+gZ7YFB-I`c=.+߂"Ǜ[\;T26J d02)G/ koD=7T':6.-dȂ&w(̤33u<* õ,wYH;<*LbL:]Z*P#аȕilW"L0f䛰 endstream endobj 167 0 obj <> stream xkoc76 *n(Qȧc:9z4 ΐ ooMd}̐WGq]9<D&ӆÃU]5?| >$E(TS/9,SN?k[ ZR_OKM P8%2iVLlV$bVD9ثt+^H=Z>]a3а{z iхGcpA~M*aƥ.%dP$ngJɠĶ̔3O'T'bW'~Y|T 5#0_zwQD#%Zgyў43A)љ10O{jl$*L*7-BU~~F.KJ;"QShww*ҘTN0@K( {&DMRD ʹ؛v&O 4jQ$ G0my25G0 JAC-v6|}Vߗ.Wub9W,7ArѓQq I5٩:>:31@&B-Fm2KW Ng{Mzߛp-O^eBK~HR55 R%BWRiRż[r9< 0cVF]:Rb+ϿDENTWz{`xj7߃Ј&+&@/q. $4$G̹3:Jpw<6x+2:l*Sb6\3#X|n=R;yd@lwC{g7szLfL?舢%"f6sd .}C'%t&k2 LLd@{!q9*kHLjo$bȝO.7B;==>?0aG`}qքKoCüKoLmcyx@b8En|w-8~OG9X'~xD:d4盰t cCyz+| #ޫ!Ԟn;/Ӌ^Bl:mҒՑQZ"f9P.|^5{bfe-Z2P1;so2D endstream endobj 168 0 obj <> stream xksܶf-w&d؉]wLM;J&s>%MҺ.H M'G,bK^0VV8}w|Ċ cEJTe]^ث7Lb|TlQ,(Nx|`( )UHVlTaTU% eԪ{Bs7eFh1D0=)v==?QByi4q|'Xtscǭ%u)u|PTtKR)Ãb9:FR}:HegIX/X\bp1bTeJYc|v iFF8+9/UFHJ8lanFՌZ/=ۥ^LJБ"n&_2z[+a0Ku8f Yk`z+t<H`dlArdX.=#K,equ`|[0nyR}G=!jyZ?wt.`}wr 3 vhҺ%CX"\ɜn$Hq$Ba=rNw(X_#C b}KGU{!Px7>y<\#7B B|74ȷXbv/ >u)&%єB\biDo z iA::h(ha0E2 օR;w.:%u!4F-&dRhH^ç7зbnq1(=ME}f$faCִufP&XU*!&i+ܷoGJG ->8?>Jတ,FRn k(0}3i [Baf@" Rs:u-X_ȌU9|NDIUҌ3/ì7]4R"ǖI%3 Wz!!bsqz[?I9" ja᪩4ne*HH-S7*m ΍K!-9|֚z*.H: i ]YgvaipaV=TfBVݸ^|Xx-@P\=epҖs n/cmYB=v* ǭ!cCnF,Xb.3ֈSǴ̚T^ea"=Sg4ȠQ%vI6)`Dagò6|ҙhhD/n(J73Htj&4Wo .{ݶl}w'+6;~{׽k+(wNْ3̶Ұuv|X[Εۻu;,c]40®M.DSvKU-Y>^ɐ< dx{=J,)臓 Rk_]fMV3ؼ)2JeIp2KʁDtbD)_'<[Faãz壣z(•Jcf~B7>'1'q\pL+ $Tcjo{hl՛ %[bņ [=EdO;]Ndw v[-Aܥkc!Շ9™pkkTOYyE3ۑ*=Su}#\ɉ 2^%CkTWdUo1Vѽ+46r-[4qT 7a V$bjklRƟˮn̂ nޥg7p.%\:m,pkJF]@xo1in8msJ5 *̛ ۗ~ Z’^O{,LD,Uq^lf>(L?%ڳZמL8yU!b^vfY.0<[H^ 1igGboK{W2|'pz5|1 }:{3GUҘTN퇓7Xˍ,Lso ,a37jJ=5G(M(6⽋3-%& `RV0ItìD!As! * p4Lޗ/'rN &#Hnk>ܽAy/ ^;Z'SZuZԔ٧*X͡L͌ũrCRIaP y95l2xĉ]iwIrẀDv<~v_ c>x`"q6pYV^-0wN0=!45+¤f@"* ^;w24p`^&Zo=Yb,4-r}`9jN@e{jt]* l~n%Km &[l`TjC'҆7{[[w :?|tB5Uw3bn_]4Ŝ[_[ ]n݄}%uxAE1kV'&P+MD+isӪRJN$luZ{b軱2x,B3V "el0hH7.) a>:Dkg$.LGb[E{\L>i+ !crᨓ ]`S>ހ:_+$n˕%/dBns`!@MvFͥ^i f›>0w?vG)<ԩ6gTHpn&  endstream endobj 169 0 obj <> endobj 170 0 obj [ 171 0 R] endobj 171 0 obj <> endobj 172 0 obj <> endobj 173 0 obj <> endobj 174 0 obj <> stream xXmkF~pa_p|9p-u{٘N wf:iWr"43j5rGA8Lr 8M93Ԣk3,W# H8œpy Vh.Yp_Q=Ɂ:zjaMj3QZUmDmv]7wm,4葪/ͺ3ym]!v{4PS&"`r_RԔb)'PW嚫HYL{|Lg`<<3gld:Tȯ­[V<`ӈ96&*mE6S>HDMuA0s7E n\؜^C `mb{]PKJW<ʇI GL -Y@9]AȜKCϭsB}MƜxh9+k5?-~nR8!"ViMښӼf sx3kDɐ9WdxYMֆ ڪw֞r9qCH 9py1 2a6{o WK5w~q):8;] J|R9 djf8͸s 6籗caUUT4UWEpʕjҦ;}앏6BFgz^{Ah4d"i )O+:{a,A8 endstream endobj 175 0 obj <> stream x[s e9(o^fix&>vlϝw:ɵ!RM&: ?EJﮯxQh4(͚*ݦ(U~}r}40 =jxŋPkQVFWL4Ei}k꫅a'Y!"0PVc׷Z*&^0S(~qS(nwDSR5SX~CrÜ⬝@DŗPgBr6MJ.7Ź1%})AyLJRoߟ?eOK\ 6p9G(1aMUKy<|aZ֪La\rZ5ybHtʺ%w~[KV@GyK!m;])NEcF6RZ̈́iAi?2F=Q |zNu+T"@qV׏~M릂h2 7AKʹcN\M<@fD :-hS}.G9фl# -)=X4>4eJ`yZە\mv >`pg@j-8-{ $G4D"@oe^G|}C]%|p.x/[dH/'DN34՝fLS3&fƤl n኷vchammS~Yl ҢV\YDSuQ'݊ȋYv4%i7ձ}!&r m`1gP#$7&>5$&eN} (=~=;ɕܡ^RsB&=(Pt_q$v_](:yQQO宩#YWy>^wCv7$SiЮ ͤi |+zJ~iRgDf S,ǥ-wAZ76,23~//}a%8raUWI~@2!1k˸GF;| kj16wP*hX=F6Y8iF+ر:М $SDX[%sZ=79;%4 0# Mg-qnR~sqc%v# &0R׏#eGN3'#x+y}pG)On`JG_ĒRdY2"!-ɀb0)[A1ߕ,fGK)gX̣ u NܱX<,Z&(bBs>,`%䗇F~BĴ( (_q*\Nq(.$USD;v칠Yc y, 9$Z5c9aY=Nj涴Jiruy< dU dDy.z$pɩ2ZMƋL7\ : yDLC4_nzas1-](hїgîlrӟs.|?'U40}CҦSi6Sٺ0tOK#~P ԇv{d?DŁP}DgwԴ9Fؒ շ4@BFmLΡFah7sC5Li"c۝\R*xYFJ`<_sHˊv`R&櫕ԭC xh и2멮J F-a}aqqu;9R~ۊPiZC mdè|aԸu_O!iu=dy(jWǡNNKz1*:l}ЍAEw3"C1ù;-Y{ D(i^-xtBT< /ڬCyUXC|E Z'+p2Qq/]W'`+Q$Bh{|3}m{P_6~^"mjbo.$_b.k}cґ Jѝ=+è`[q*@!0L>>ءn٪FʯtSkH&) 0z&B-шVBb0LV$nFkpQB~,ct 7Uޠ{9&2֞$'e:mDp^8 >y+%0{KFc16ai8WиSGmn?.^@";̉;QϠZxbս̑q"03B몚p'orr/iA&@rsBDcBI endstream endobj 176 0 obj <> stream x\[Ժ~ߪ~S.,x !! S<,)j*˙MBRQK,jY;E1 vu[?=?=yT5/ߟH6?ITmq.㏧'{qӓ㿜 OVM-jꆊJ5lꊶE5'B+نʪ& C# yO% }xEVR O@bY[Z/TyCyye(׍sRȘ{ xT$%IE/1\UIؗKZ)nVT6ͶT/J(PZV2"5n96nje,ݨJ5U iCSЍoo `x~3A!ٖK]~!A.>+![gc֊H>F[? X!56D*eEءCjGK׫ZsTs:D~ph7Q T=B4 LG`xDh$aa'MPq@65gNJ@FݎzB5(5:(F$a)h^L9_7|Q{P\C`d@s.LYŕE3 #7!͓=7mVtm^?i^zFC6%Uu hwpMI~REr=Q3`ٻ{k.&ΐ h&?FH:wwΪLj9+$4f)bsDm!l:~]N{0d f+I.^Ϻp.4!y%XBgl[k}+|"bX*_ns.6GC5\s VT+.ғl/Y^A: ظ<3NX@)@@ :7]nrM#~k ]¤֌fi_2>gSIb4Z q9x$H"NGD%d~JTEF^ev=Qڥh"#9`'71B3L Yzܐ~ HT֫F4Ub1Du.Rn&5Zs#c=w߆6vz+̤9g~zg2}d  gמXx72?}eīvX;:_Ss31+mfmٔ=Xcf ԅ:Hc.44."l+Q}Wְ[A;j&\XɳKayrIܿ%%O3T|@t V4 ,$I!`g4w~w=|;pbŒZ1u' $aQu$- ag46eAwHמpMdD4!9;U+ ef˂ܦpfB9ubޒb>|jִV(R]3IĮrJx/ c֘"vdó[p4d[sb|wV{2A,`n|eeH R2w@!XP&ùev^X.XLu{13)䁬]^9,|`c 66 H!QHHyiѲǧEמS4.Ϻ0Rvj>X[EsnVhiEόFPLfS aI5SLFf5ܱN4EX<DE'F؋CbMww"DByDNpO^5JX=IPiTN |Nk""O  8He& ixO뮁3[3<_m^n1,fQw4yߺ 3nnk2dm]K{#[,}oJh/coC o@HHa.Ĝ4Q+t4x`N߄CniǷ"q?R:u?F`ߒ Ap3S*\dn:٪[1N]S2ݾ?n(7HeNc0@)c1!  mz{uwGaO0͍B X¡Fpg2(sb9M0MF)]/'Ilk7yleęuYMPօnܫl3GoOЧ]p zo%Լ[Âl+֧>~m?ٔ endstream endobj 177 0 obj <> stream x\moܸnA&N|"ҦȽ$up6l6n5 )QCrĸ!9Eh'`ndqv NJN jl)No{Uc{s(ԬU᳕iuݫUMͻVf큩x[7mdZ#dd~9(')Ki9{t4i9F}3T8lǎGU)o(oחԵ M|,%-cXLٰ _٪<b<-öbhw(x_rsY+]ޜ. biv^wox+ijz/M_r>2"ŚFd -ˍנNAUGJV4 Y_ѦT^A)J*m_G-պs(+t/k1 <^WMq3ĜxE/y|󪼺\Vmy.shW~V9叡 =?߁} ?ZPKϒ/K/c%\BKEk-v˷eSK2 0@%8D& &Ll9SoP>G8 4I`j:t@ՕDטLJL JעodNo &6?suMUEzl[mZӒ>i` ɗHc;y)v ':w,p͏SNGϞU + ظ)lyYG<82ĺb:FDrӈZ twNQg`ӖqJ_Dq?WmmNސdT}IUh ⾪tzs vbR r_BZP-#1&kknDTwLO]].`XKE"1kk-dj <| ~Ac SۑvŴ#"9l^֟V V٧r٣296ct<~JqHlwl0m$="3F- 6J bk;=UŰ>7}&'85Z; /0M_f| O׿_|@ bX\=Tj8G #*CPǣ6PZ;mm3Wʹp|[=_reݶ1G`! C+CDD$r5Ɓ;be L?WrMs_o016o(Z!4LBĈVPL EV V:gp呜!&atwj׀ f4 *mlql#N<':x{8= -Ó@X):OS`Wo߇=VT./Rm@/b/c"9lu݉lx$$a"j% b!r*2*cwyAn+qQ1:wJrY17fk5y ʫpC%]G__}\>9t\Ơ9% w:MAtAtx*; H7@j8q_p )3qGF &X #/&C*76vLռZIXuHpŴsDDr.ųiMzEdJXWn *t┕ tE²Pd3OY)3cƴ]cY*%c{\c{|}ؕG|8&٦1Zg0u,wRiT+iîH=]L{ơ jS19ƘH[g, idF*?~RGmYw `<!8'a7h'm\(ZM~m yZpA,[YKiW@B/,J`^A>6SZT&&% n.BwCmp4L\x1Ɏ9WG+̺BϠ4t WL{GD$ \ށ ƫ4ՇWLM^ fnM.H]1{D$cQ16o ܜ%?yWpzj޼,m΋O}Zs}/OkVUMT Z\S1 WL$u3`}= y ozX.4MeD}kK5AִdęɁS7rܔ߶fНxk1#BMy$&AO, !"Chm4t 3DEcюaִttpɁW<΍74\w Ŝ>]ͽ;~-;\&P'=Ɂ\hI 9R!Ob집,"u/m%'w4ĹДi$$oތIy"p Ł<c29\` 4{ϣ^:dx .W[[˓pZ e!4 v; (SG_- O.7)dc԰1!!&C ;{}r䫂i>^o%LRӾ+%gD֪?{TMX?\}Ɩ$c)$-꽨 Iͧ2azz/,m2BAmCc!DҨ-֔R P0jax.0BH> stream x\s6όu7DR$SsM?n:~'ZJMGLj)$@BY0=c/GKn}sS]+Wjx &OhUL r46ΤUnԣtH49^gbSt b}ޭ߀S&Apd'Ri'VʠJ"ZA~m;hf*ӛЫw4;DtH?"dV8o _ sU6e UW ;+߬jǡc F_\ƞ43|Rf%W[^_۶Y6VkL 5r?AI<^O4-b863`Ԭ^EK:ʼnP,Ax[-yHrv.F6(o aG^ӋZ6nВؕJ4PJZ딖)H lw5B^Q7En9ԡC!yQ?[C.g-@@R+e^{cjtx%&A39$aeulnթجXY*eztB}Fftx Ԑ?%e!Oeo#pCƶ!"R]f=,e!^ E(7.;W/Ϝ`ڍBnM10 [ǻFozc dA߀W (xPp*aNn$ 2Lt qN)Q-r8c; c۹u-F6?zhOQa`:>ґ|Bb"!o(6sJTq+7xs ؇j.颩tX1}mA4~M"Z6`/% vD-} x݋PhXA}`/W5J@}N,$HL;4?8w > iݓϓ(_0qS+UX ^@o^@m[Qy.tFX3 maxrO 9-b<ӫYÅB+dB^֢BEC4|Đ K<ʤ2eWaGti\H`*/IXZ''˩kMBy&$hB-ut ݋svlfm$3Ned:K/=&ͤ{]i1Y0,G*`ǑGDo4駽9Z5q)[@eyrf!2)d,\,}Dw"H$3PѦnw?,`|ƕQV n'JۄcNIN*'}Uو?.R4"f{!XͼCH2{yl}GOx~~!AhYrօ1\NRSw" P=#~*FуE 1Dq"aiiT)>wе?A;\MX(Q~d>o>|a<F~NGd77v`hkvRce}ON;ؐV xеQCHَ=^W&3#X[5j1XE%Ӡt_\\>)V(?!2&!4<@Yj!VY ͼ_HVTL䩺e.G˳TݸdfJ'Hѣ:_ ѸU+щz`xUg#'1He#c;_)ėRqD)8S&Wn8YhTZm)"|3魱KAUƤx $]j==?ƚc &( k3j8&LnT:7a]_ B(BJ [WX&u鬒;f!'9ysB.vJ/LݥuY3n?넣xZ ϼ?gN&{0b\ 2pn]UZG#P#n܎.ʑ=Oۉ{vy/>Ե$ / !! ͇hӔS 295kfm%ŕWT:_tY 5.e>֧^\i{mx&]F*n {ӓ c^*e"k-ߩ(L!*t9;2O?x .{#ٵf$Az? ŪI|m~HU[E2[" ]L;KWyqw ;FeꝒ߮*W"Q~2uc(zMJC(+d!Kf14h,dhbV$5#y‹엹!I2S \WX%zDNivZbSi%,hgppvV@xqZ>Y$,9@,!!ہW1\;-1S>zf"Δrr1l:wR^w 8:P6Sf>SH2lZ-K+>G)eƱx?f@"ڪչTс"KUЕ0\Vָe&yA>+BV.d`.>?XQ_ q3)þk2䐙$ea[> stream x[s۸~>% ӧ:w&m;}p2Ec_mI'J ԙB `ŏ_H8gY\\$?<)I|Ɵ?\.crɏPӓwP$d*kr@Z J1Q$E-qJv3a'IƐYnDWJ}V{%s&P^0I}sT?9ˠB$˅rr=Whw 4ssV@GO+dՃr:=}N9_%] ڷ +Hg}j8,E4GdxN!((h5c||OKv' K,n7YX.žJMНDaX)z3Ȗ bwC"a$=Yd2b/]LI9#*]x^^gJEU|q|Ii0-^K@F,iUmᑊ˦ F-K-sfΩ >ϫ͝kfWStJ?c`KmXY9g%N `+ 0it (OfUSLv%pL,h0q[kyR(@-Ω3(i9s/4vAPLʛRyװ~&ڏEϔk)#r(eQ9ҿYh:! p弰?#IY[(H()X.:-,,F$F)&"͔̻< !`N8wgd!]M- "_QV[*DI,cLw"퀱rmrPs!x)hHr*qrH-OzD |ubJf: =d=h*hr\HBRmkS֭!Ƭ;I1bf<]d8dȾ!cEOv*jiR$}(eL"s[Kj]= 2~MȲwTZr," >bo= !@Վe)016 j<@dJ"c9Ohqlѓ~90U/)3}_vT_B(;}(DF@p.y* l?B}G'H>U~63 `g=߿.^1^C+n8y1ҷbrkm{K@F&b4o)=#2iԠ?a]^d=G3@l'[l02 LπfGM8xRXfMVa #%6Z<#`|q<a1u|2 5ObD )>l7'&(Fw63tg| nG^ݥfY3Ó~ΤxτK3B_[3mǪӪYLnT+H&DFОh'O Eh_Q?^dzLwZ<鸽Q| ~Y՗JϘShָz&dxG(hm=M,UY :),Ճ:R:6ipGIp;w>ٗpLV,XdQ}Cfxă["@t+ol$(YUe&-3BBzC7N轶r,+-8o7zݓTBo@W{']VrXqyaGDh";N,൦;+}`2 % 㡋m5E\%K3erhjsKK[:^ͽz)2nzLs o3]7D]".;<_Ģ`;聺@ډA@ `Ey{xbQ ,sEG>Y#2$zsMkV\jn  Xm@vEȗv>??=MsNYx~`,_d-hjkv *[vxwPӼndE: Gr4 #Vj͏e=(Yn|;RV7G>^+zu|t&jQ|^~}_x>8-XAvgc93&TmfZ6΁Gz H#N&)Ǵ8ۓ6H0ޡܪ>_SH:hr+c_[5c'OEhiJ+rq]|3` :g j{` -Uc;jp7mM8"5[XNv||9튰ĨOLnDᷱT\rݳ˽j^eC&j7NJ^Bwӓ׎'{͵OHNN vRK쨎Š}RXnؔVy-]WP5Gx^$3< vψdi:8D Mie3ת+-AdSvi>_t:8i\hp/eZKmF]V+_?n|yCOaGAȭ;-)Y- hd)powZV/zFeEPE endstream endobj 180 0 obj <> stream x\msܶ72ѱB2ձuMc[~8{2hƾSt6$;.Yi֞ё>X`K>>;z/cU-fgY ٬GU7;lO_1.Gyz`Q7=x5p*TVlv ܲQU/gu*eMOtYٴU4WL֞ g{|;"oV0y -vl(8jx^ M8> ~σ2.CHUqʡU(sQw뒱b73sTMxqq0m[m5#m^5TvKkQֽ7h;Tc=Xb껰'(~\~!gAZ_:n:ꀊROZhS"cM,{<5U/*n˱4 o-+ gh7[=␼ھnb0#)`' 9 kS*_T4@qоN:V{:YۯF,K^ Y'0UaR |݋o%늟2|uWɤ7;luWf$8G4#R2/eizU eYA,b3[ڇ&_0^#[C #9JSJM;vTq| \7@73͇ίδHXd93sR< RުS<9W\ˁޫKy{ hBf4E(m^is ?iF%Apd"$Xr0; cKa/|\^߱/=jeX qB {0c&aA‘i@$Xrt8kgA(>jp1;"'<@c@fc7I=R7d؜(8zbII䠅*|]n>|_f9 JIc+t#@oj,Ym/6;"r"SF2M¨ L[K&jl [KQ̷ 򢜷uI-9 l͈Ӗ œuc.ȞWL(gbHꚨԐXqY,HGۡӷ`:"N{oo,+sjŪ]7;3&RVJ%G)Jb-I*HhPBބ} 2v9- i$UX^tHͶRDf`I J(53NJ m:>Vizc T)-M 9d =b$҄hk>D Oдǃ=M2Ͼ{X\rs?\NۉHAIbs=ø3a\_8DJ5q>wVFrkǸ0=d|٧( {4E" !TŁ#s ,9`md^TX_}c:}5(U >bP$FD%i#I.7A!ǵHCG,54kg='}eÃ4{-y,6o~>LF7--f dʃD2œ[/χ-? -V^?(7 Pv aOQT ^3VUMV8XǏ?Q%'oƞֿ'пg>Gv:$w/VKrgzK-fĊqiWp;B}WW`c+tL/ *u> fu.Q׷Y-p.w_~anN轳y<77Q=8/-ˆw[c*MNZk ,3j_}A( 5x{+jj*Q<.A`y3@{!O8 tD#`5@!#F*ȚYg\h`z!m:5F"6%Jy$n ,o0KĤbuHh 9&̧쒹`.cӓ63JM'Ld'xx>D cnϭ 4 ,fyd Qeaf|L7|+@8iu 5}/u`f{#srOsnrp @Qm=aR<96 m܇Y?/l=龜5L( 4i 6 MQkVK4Aё>&X2aGls{;Iu,FfԎ>%|;vYڬ^R,,T^lq\ # ΂D}r#m\L5;(Pa%5x{Pt&yr@*;x*)I_@}xtjϟ;8&Li{)Z$؄̨QēI[bQRxܞ}UWFc5ϐ8VK3UreBT*  skX4>{.`DpZtoδ~e\Uq^gԃ -%4,9:|_1 FiVT2\ZoE)~ʊdp? co-$zINA$dH82 KdQ2f4mЫ'VON?A̩:ʤ~?'sZIN,=.Y]Wxܽݢ0z` Sacjٞ6u].ţ9Jy2x/55;їaя$jACqqz%C p+dOv𥧀e<^)}/IJco'귢jI(-FToLɎh ˆȾ?ցPǪ\Ç>+b#_Jp3WV)|>Y 42 ?Lti wӼ2{+>ҫ}`Jn7\Eh҅G5$i?_&eB[![B)_ܑ`x$Pm zwZa {mb*r:6nLfT:Czsv.{˱|oQ ye[tmk뛝ɁvxS-'Sffے%SXà(R)zƝ+-KXԘ퐛l\\3(U^jԟ 8qǷ1 kQ#]p0jn ϕ,V:Cri^ =nVDN|-# oDܟ:#ݠ].xIVk;X?z(y;^U 貴uۺ-xW7Όl]!AqKTesX endstream endobj 181 0 obj <> stream xSMK1/?1[蘙LU<OA-jUM{Tsq@Fۨ :|aE5%\f}V5e@1.{L3䗈;حUU〆* T13(ѽ\WTSs#CV,%Okjy(Y0M|EGmJߴs~ݷDz_~ގjSmgFО> stream x\ݏ67AjãO8rXʼn0 N6_UHIEi&8wKEX_}~^B뷏DњJF-^oZN;]>~t]7??z/*UѢFڪ3EcJE!+kGoP[#D,4DD4R*SY=&{zQH/ҤD U #x.aci[i;?V*Way?gE9KD%r|hhZǍ.ϛ+]nmrn~9=E"LM]uO}w8>'G9| ^-ݦ+QO=+Ƶ:zpw1$S[^]Ngb7qˢT]p8S[QLJx;lmpLDF:{Ԃx78H&>PD4Glk>HO|o0쿰-8z=8!-B߫5RK`npnNM쉺m鏇+^~j+($|ҿET;-LJbi =b/eꕃ8unc*Ot阧/a1ܼXnԎ4tٽv/''& +$>lRצ$J/E]oQxa˯s{F易&V,N=$LrL8y|כ+[ށ-_ Bn/o\U68&twKѯ.8,We_lQxhph84vm6g Ȁyk9F&z\8]_ȠFGJt|CRR LEy5nJ6@5@W涤 P.% J&le!RT2Xh&v]JGU]lad0 h ?f+ݟ{iL~|/[z6g߇ n[#~+Q471tǛhkYo{9\\jO${hN֭]~MkxB`ĵ7]ޗ"CR`](9WWha,u$E< "t #wU\Bn\Ҵq7[g΅ր'vH;lwhW}z?\j3/XiAp` '9ohE?g\a ʪq뤡5^0}E0|X GgCaž!lJ0P*>p, %L+Z|6uG'N m1iZL!lkBZ>,+~A[qc9YYہAm36Gҷ_8"ёzmYc؂ѸͺU԰cZY0iM~ BLo#49kAt =~) : hbW#:^)=`"p %g%;}`ƅ" z$VaɉugF[r=nr8 85-L9COx_y kh k*Z5$JG${ 0U^o1?@bm).袛nq& >0 ̮O]3+)=8YHf@6@ǭ}/듣W<<8$p5 ?؝`U^~ 5 6V4"b2f,F3tFGS>)~Ӈin; gk Q-Y'jQriY{âtjKhk,s Êl^'v0*Pc3$aAq>wᡫ \`RNBfk# zzb" ۺ|\jT$' :dV$@*&9?x =*K+֕}1] -k##^0;~|{yE͢CIp ҽ+?-w=jODC E:g\v'p %G;Z3Y2P} ez k.WM]j^m@ tI}&7,6E}+ ;/9` CS X\n?q "5c [VM0kX Ĉ5HBl`Wsl!Oފ^t g/ޤ|gFNdg:ئuߌA7p0k"]Yob^vT *D -YooEaX! WJh q+vC& Dc'&[Wt˭1J]@ uJpt%+ mSWr*M(tGV|$!B HJtŐd\97˂M|W3 jܻnGz;]z;E!Wu*}3­$. fXQ{[,NWg!JIݝƾfsAdHx˃>և/C{S]w;It%܃=z[w3 ȥWpcډ`bSIrsAz/✜ȉv[*D4}7s͡_Y7o^;Ex ]AKWN`R`b6+/Ydfl9)cCyBa&Zc|YP/#Y_SQmO"NV[ FzmBx1 &qKes&!sIXdI5ώ"י<e-̬[ 2cka{f9CZ|<7"]\+MHZlQ?QZ35L/Ks)U$6+#{'Kj$;9!DۏTG9F ӟ:jZ4ڐm0QR/?wjC22]'o$ j@.cl/-W|,|G 멲Ήi*i_WքG8* endstream endobj 183 0 obj <> stream xZn6}7Зey^&uA$.6FqdNSΐPRE Â$ΐ3h}g*7G,DzBTί%<~"/@@#jɲtT\ReFQ‹ qUޜؾBm1Ƃ,旓lۡr{pI I891NL?[RX|ZM?%5zZWThvR2RN̹bqH`?e.R.W,~4C)VrJxƔ^eR*S &JfBa_66u =rw/?-nz:;˗{~/ֹpce.Al`| z>7p,W;[ȫ ^! ۮ.)>#$%L-QT9,$ &4fJhv{%85I0eY i\jE!2&0( J`.e0 2(T b9.*~ZDA-D~ 5lˆHK^6{1 ;'xቇቇy’y2pDi#!%IaZTp\=хD_|Ƈ0Ƈ֔ɔ W0k*a ƄkfSz 'h9l$T-5L$ph#"I*0:T4x ;ɗvc~olfs! -%֞P7N)e[hD–.o mt,@CKKHUkW9N9,5#0:]7 &rZŌa=g<30, UXs d@jr@1H0vK FhU ńZc0&tŤZ㖞f\WٸjN2$˜Qw^CW,OC4猘?:aJKArTRasL(aCO c2{V5x羊tN#g2ݳ0ù$@R84&9s\#E}ei3?}j}]K?tLf|LNBHäJ6ՠk$n8AZaZG %C ,RLEeQo?7Rʆ_g v(ig?9ޗK_3q-0Y6[>U2OX\MzcSx{5\cڀ򄛇݆궍KeAm{u#N;uQS=H4Onzi_(6UVpV !V% StUZ͘C>=jq6Ѫ,pAĂה>ߎDL,i~'dJ E8qS Wʰ+dǞ7'O[2m6z@w\ΖH>.mly =sSB/%+Y&2#VU4(5r?`{\d5,#ڢ(b^VBCK}]WfykOG@ƽ숕Bʅ'S*'&dp.[b.cΡ0.6E|RBWgo>B0o6! Ry)mqB V1cX -͞;`X/WueAaYm1%. eB2%B9hFƫȒ:29{r7d8&FBy4yWz0> duBBG bB𲊒Azx5-B]ΰn7mMSD~ZqTI` e* :md'g  <2 FI>l(5wbxhu­[HK+ү૒IwT~ekk|M]$=qE}D@ M[u5.u3&GӼnѰJzA,INSsE$x0Jf!0e@~V|XU6iG3<+w^~O+ 1^0xLf3Pu9a.Zq2[&`@$ɴtT^>CUp$*FT=sR\u_;̀<#0h**1jUFE{ nC!-h^[{UA]Y%xf A]+@+EJ.+5ے)1("ͲЬ'JD !1}" f/29#þ[ 1§*>scU:v}`?ܞs$[ad 2B2ĔKcT`k@~\O0ɴJthsOM(^Qש7S=䏀]VwO˶X!^4l%/MsI?xK؂ u'k[IdfݞCPiIS<4$0]>~5ÿ́]qLE&vxOZs,CӔfڸ՛6]X >t`Ϥ*>kD$"E}xux_5ivkLfWosnh]Yu$.=ϡJ3#Om'#Rc%?oښJ}/8!U``V%V /J8at|{ -VМDsԜh9ۘ9/3DȜ!9i7[x =%Θdɤ}Bċ,"X/],-\ǥ;t12S=l endstream endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <> stream x\_o67$ë$.1]nڤzH֩wwRM&]E!GT|3JfgXV_iU2HU^]Wv`q48KUHuiT֨:zbUv{}`yoʊYQ[YuOCZn+!Klj+>C-*Qly Lƒu)鱆z sfb!BBWŢWf4]S̔fj񌏭4:dw : %`0 Ҿ̋/:2Wu!*_-e ,B7ނH)s7~˂P0pf(_IZнg^ZpD @"uƔ (6hoqCx<j#KℷoI_-2; w?@)Pk+k*Wpe5 *wNxwmz_]\f$޺ewx9 `u[/dp/y 4"1$ Ww:{8=6p̂O#hRj.4xWcg}h5(ޢ}aq|˗xY 0r "nSwJ ? oIG[šVNUG97v@jɵ#F2c|QKT%JABQ8ָ%X]Z~ۍ3˜KYhNK}3HR]2J;ZȰsʠ֗/ |BMWo,pz%WX]a {pI*fHza>ռXc٧6;) Dt~JT ag`Җ}3m!e"}CK~% j ܠdwP> U6b̠K=hRTYGJ 7xr`;{qrR}!AjL%@piϏ$4eM4 i>ڱLpGL#Fm٧FBy<%:Iݞ BN(MBۦ~c|?!W1#ivC?2nf:nEHR$_6qK*<*,Uq=b4):X7F :uAi#$)s0}XϱM0wmН~>wKAm6'-j}')^ y;nTn͠H|3U$+<^ǔFNGb8⁄Ɂw~keqB}MUf8 NtI@ZCD@~ 'if |<,"}DߖDQrwOݚqBSjXi_)f{!3-]]tgr?&6 H#×(M;ad]rq!I1/ȂI_\,`_s~֋{lGͻ;;(^<|{dѤ 6N '0h5_Z-V H0'4pD?E~];A1HeEHUa(cQ֩Z*mCu8Q6haX߃|t"JwK- Z&D[8m̷謗~ÂҬ_|6s6} VcK,AK:3x}mMmYN`%qr i_ycGkW^7.)l k1ߴ|jqD>kaQpku5L[xGUsrPwz`MiYL޸K,ꩡd<.K< endstream endobj 195 0 obj <> stream x]݀%pɶ胝h6M%9wORwfwK (\(rvvvwv6>^1V7z3V5ZU3xegM=gj]ϟ W0VFЊSQM۪Z F0B! ׋0@J1ثJȚ#<&ϐꦁ[^ޮD-_7ԵsO kĚ"(VCV]LvFk&V_/kVq-V#/Jjdm&HZ ԸC:9Zh@'dhV>BRs$h#ø~5)˗kA(k`m _7L‹Z e#>Q ӕ$m cXa*7531,ೞHX8d~}}eRn0+ hMOJ;.,#<^hrle y2 nW4f {J\L !r|rGݾ`^m~ew"cI+?kt _g/ ty9X/k:طHRa`k6uEqni>C 8a ]xʬ4P==Y4<ͪ|Vm6ڜw4_كXYӬ^`.2$س6o8vwDڣjK+oӴ۬z޲cV 0x݊aqnXoZ> &{!k(DE۽u-P`N70V4{\],ws"=Y_HWEF98;®2$q?>HB$p!EF0.+2;e2v3qMcCrъP?8!<0j{ozv8+%'9q),;mޯI}]@CPL<nV8U 7aޙTE3x`MZH^7NIܣwZԊ1R$O$|CK|w G\O9x>G,l(E9PpZ/bf--* ZtCLYs GC(*\[plmPq٢$TM:՜.hdxv5Ka>3XpYK~5Rˈ,%w ' q.RpR_XzٸamSiJ.F:عYBسt ͵Bz>`R,~ؼ'nQe=~qa<#xp}4~q"Net!%nKYMa&T wl9k?rAB>Dq,9ݡssh 7'Jvp"q W t#ke;`;Vlv#j9|Gۊ"W~DJ[Dں5Br,%bh7]< F^$6')kYL$mYa7;eq11dO `aU=%dH`Ljdo/|TPXJr< 8'cޡBHgΘ 70B"Cśnn*SXmлa>DNP2H#d)B#G[M6 $?: 5klېǰ^m Wʘz#j-F6ňvKFs`~pbH$[#ުPI*SX'֣[Iss{9cM;bِvH?O=UUisyZd!_|F h@Q-Nx>Y<* [PMKuV~Stmk3YV:Rao 2јf&MejiV2x6[MEKL2?п9Uk,˖4 藁8Rɀt5eP&)a bτ )D`;|? A1\C^؏h9WR ݨl 㢍8×ZmCFul?1{b0Fݮ],)a2T8NHYD UNթΌP (و-q< tL&gW':~R3 Dtj4M{ w ɺ}cz'k8 !B r ]݈Mo(qe kI~b"ٝrV9X-U)Ј9XG ,e,CiXfLShFPq >X>,}b*]XZhȄrA5h\H4Bk,[_ AgBFyP0R=g/̸x9qkdgBu -2gỷd f(Y @  2 D ZJ< Xo7b7=ӎUU8j.԰_@*{o6ʶl$u .7X?Ĉ|=eÙ^˫KoOs3$,Eۡv&e, E[>}ܢoy"wBM᳕Xan|PTzYχPUqj%Rⲭ HTQ)/11A2h UEz2ja^*e[HC~ WEX v:81WZJ*vg'ۘ%WKlR[PUU`)]O\Onu#@\iS9 r9m-['؃QNS媌=R-0kPfR"҂ˌRT4Yd=0`9!y|OZB&KDtЙ`a\s~% jRb2;?0&!j`/{wF/r=S7]:BG|RX]أFM.<`4faX$Puň֩ұ;ymݺAm$ebS ؈}4IfG6W0t a?YXAA_j=Dj3|VmJ  OuhLܖA14A,P :< C4A P @w1H PBQ fw0Թj1P#mVcInZ#M9!-H99i/  2+K.p@0*n’"'#fScxnbp&'A4s|9pf%z.+ԩDuRcY0aȒ$FXKψu,xV;6s<ܽ>!0I`Q;3LQa*gRf,:l}a&|dPY lW bl> stream x]o6݀޺ĊH>]wE6{pƖݻpf"EJjǡ6".NO^LP OdR:{P2ݟm{"[# @[XKgDZY\Yٮ==yF{BLi" lCʨ!ث']\"+CL D Y'2\"`R&WfXTo(rϳR"o&xvz D%\7!73>-E_^bz,:<ގdq, Py5AoΕ@̬OkyM&_ɓ B#ar^T_9u`C6rK4s.dDh{4]Td ^JG:-[uL~zw~']Z0$ ܲ roQ`U:C¿qڟ ?w&gKVUgEj>`i;#]JrajhNFKq4:$۱Z*r9Zmz/x7wKf\[ BlAJ\8qlEP+od@y+ ݯj\rX]VڇvQCN [$`iaVYrmLUT*I P.:fd%r#B=]pGm`l+#=$yQŰèaE T~zq</@~:_snU6#SdBߥd.||Bsjڡkm¡w96CWȝ  V:͛T:é;3PcwL^F xʍ qͰg&Bɱғti6T GCPhSae* 5C; ;1о^bmPKсn9 #2}= Ռ nk2(۟ +1-[BrE^sRF޲@"-V*;. *fr6A8_ `]bxuFȭí%1C$8f}x!qD]bwȅeûgh,|m`1Pqqюzr)}:LXUO@@OJ9iq6d.܆&lmD+[6Bd>[ڐʇSPK3:ND6]ԉw"tX?fê_jd"n)=4n LUb!#_%KHtIhr(ډK%GiNdϿB GiK=bpY K%1D%æz'G}f5ĈM?mM5b]ф{N𕠕&n\{DUR=Y J='J@-mpUo@%* rrW9(\RZf'xE^iw.|/,"IV{$'aOxu\`F^}/ݺ#8Ϋ*&l|Uq^P,V]5`ŗ4A]rgeJW/!e_zFP'›{9v.I5;$*X-`u"Lg,hoa; QqP@$h(H9B9-+bqF;Pr%tqBBEj&e:EsGvT P!tOBo2|WqRż(DBAWUEظC;ۥԖ5W˂ Qc}EͲɞEFĥ?Kqru>[Y`3f QlL"6S6-D~Lλj,ce&äZ #|'0<5Tl1ZC׻wv۴B)&EOfMϥ71A_F6|[[u .0Q[_Y\[|Ϯ7e37#]f jSlFĂQ`.\}KErJ͑Ǜw1w [z9wedMAUl5=°0BLn}պ>/Ȱjuy]kj8!-H4Uñe' hb_6$x.9%ȕZM0F[ }tщ激Jo35Kw&۴J{i# zqQ]`,/-)o֎?c_ϸd}jpiZw:1U:Ƒo3-Y(WyC#OX+7 DxNQpQBW!Cq:(Q2BEPnO dPݯ'=PJY,jA"kɢ Y;7x2q&%QyS?1n0hUhʄg@d NPa'eR3P&+#֤uޤ0"w#^G_}WQ98\7XX>G3veݐ i dB;,p6 #FOXldB> stream xYo6~7ARPsor{ m\!V)ɔ,j "t<%\$&9--$1 ^JK(Ow^}=ݦI{2a<~᠏\_-h J9a&1SFL=+&9u2\9턜oW B)%b&a(ψVE$O&9hX2ݦP"Bvջz tyYJl:.CPK pѻM&"S62i[3#|Gx 2D0fCQ`VkG%:@%kN`1`c:H;|)`\\3>] 0%Db 8Q =Ps^vvI\RA@XA(ZA7/~]יHȍHSڼnQ+W!'ILX .>!Ej{ b =$rug6&&]o2*2} G(vJwِc4ѝu-W 89V(GdI154 CK8ik ~28á0ew#&wyN| t^[XЫfiw @Ɣn{m?>i3Dv?%ڥ`F'!3Awߨ4^0$sHɣqZg#B49Nx# ѽcm B-y^afUWW YimqzM㓻Ap ̉֒yTlJON]Y3'ZplTX|;we\-;N:ߖxR W@zSwjk'ҕ}埨WM(>wTZTw(sN^rF> stream x\ms6]:c$3A騊xƖ\K[/v$R;6T!b]`{tD8gQGҬ_ y7Fw { &%ӹB-pkaXGΙ(GI\0GVx!e%|.lGZ*&_hCϧP^>/e2e׍Y)ΪcnxL++_l=OTvs]'2l\e\?w[:Wءw\2%v,Ujm(hx$hxΪrAT;7>cA7886LZSN, f՘%k[2tpFpaI\C .|[-5-w; LQaA9t%iQ2cgnx͇1/+vv18`TQóGfO Ia^bIʒj$V;r#,)sTC\nﲻS` 9'dQ!*kq}#Ip#u%W;LfEȿZrпb,)c,J:ue1&T}LuuZ 1 {ϳ-"z>}?ztD6rwpWs>BSJ5͚-#qf4JI)p"p[i-6XuT'#\$\>C LX FbI݈صuz. 嵰BU1@L=& 7F~qhޓ>95. npk/ʓ`YHƽه%X5UO Ө2T\ّ9B09:1 m t GB6E)3G(`wUњEgI¥ǃXFRbAR_%8/y;oy(v͵4AӒlQ >"][nrISW9~q  YΨrGGy%/8~ \j,2 b+znaNѡMp VȮDZǑÎaIq\0\139䯕1;f^{uxLiGy=x2tך­bMUFޯ;tg퀶X u/Tə eY\@RoƓ*x+ 3|vbƓҒdWTPsi}qxR)Sjg2BJ.w@XIu<څ- xR,|Jawa.B[KVo11J3GfO8sX[sZon(P]so\8_-1tVk=ͧV̖>7\9ko~hT־jJHMoP0u 2*{ ܬA[4WT'ͮl ۳r׆$;g2˕~vmxӞ`,`Sfk50: 2>t#\qt7 *VT dFZkyr_\5恾u$=.ia'21%繂LߣC`O?y8)^CŴdIĆ˵6{"eU=~4Qwք&) !"r49`!G_0w _4ޜC}|B;`n r&`Wz endstream endobj 199 0 obj <> stream xksܶf-ǂAJtD~=dyj;ɱA<<'tG,~`ٹ8g.OOx¿5(+Qߟ~zrYW_'&mFjՕ-}+tۜ\?Zr"<&(BujbIK f:b#'ɯZ8V2`;KuLubQGG&xz x HAڻUl4_5g~]s&]# lkX'g_I]c[*xh ZF@vͰzpqkh!y!iNcXД aִ\]n6Q6Hzt)rӪ}8(C Awsi䨔gZ +\(F׃U 5Ȟ}sfO>Dh9zۅX/3"ڥ x 8*)R@NL;* $ehݶm~)ޑ2iaP=)%(p:KFX\A[ u m&ď{qW7 7(vMs11FFHxʌnzx{T-Dox&R{;МI>hbc/1mr;,xύ\j;-'O0 *@ J+4X%`1/4KN^PaC*6HPk0*,0TH-L!+@~9V-S=}xǁd r31:B42A46X', xR ƕ"(Y_fБqhbSnu/Cj |3}PD%yXQ\gm{B>a&*4t蛭ҝs48' <R,o0 }؝J0 AծIқꅤ YԒDi=ovȞtl~{tГl2y\'ȡUߣ֏e9)x"L-6L46 Bl໬!gsW#fsvbdn\Λ]$aved*yrg^%[gMPi{+708mS`!g$!ued\I$!Mش*apt^j<0̔ R{@a=nmDAk ͫ=[*W3T 1>$ڏi=~a 8*S-'r<~@ m=VZ\4t ވ>r]?7sAR꒡8*9ķQWf(FV0Po0I OxD~*+(&|&vxg¡*c$&G<|'![,E\Gi;6iZa FۣΗjt4Yp$AEZ#.-ݠ?ɀ ﶟg<}G\V%ec꦳5غW):tlZ#{[dt^9`(|M'wqfht0Li^> stream x\o.@}"vm9Ic2At~ @3.pWTFEw3pH_ĊsV#j4U5S^>wGUGItmU|u 0+k&U@>Չe5w<8ϿNV%R.lΣMZ*&_0kQ-괆:X+R)k'`R$\dw>]ݿTouu*כ]%ׇ+n]Hp|Uf}[q~=q]SJ2SD[T[0x;k. ̪X3~|0ou8>W;[֪vShixچȭjNj&7 r]rH\/Kf(`:XL5ٙdWnjde 2G㲈,G0Z0@Ck`~Tô~2@l3E-d$aИBAMtR1-Ɣ?zg OB3Уg޵zM SN}<?Cҥ` #%:ACXtGa|#J`WKk5s-cq {N1)ȱm;yȩ4Ji#ɘr<'ӈ`a %d $ R 7'eއ-$mDɉBh8Ȏt[=hU3v fV>VCxx+>Ϭ_\>ί*)`BDp֟ |]]dW+(?_SH^Fy7ՄqEKj Y!}<}FyTհ~d>>H>>WB,V[Io` 1Fs&C"9Ոs&)`w%}`~)d WI _` 2Ī ?{Trhcnd$]$ىTxr5Ϡ{@ۼN߿Djx;Nq ΤŖGl%vyVKw:ng3Xk$8:yz.wa ; ߽=C߿JLt+7,-\'x5ʅBǫZ@L{^67 W}.:o5]*y,—ӇW\_Pj(h|N{r&/rn=._ Bw/u :W^`v͕;<5u(8L!oz E _cϢi7oc)z0pG &!cXe(i֗.hrmЦ9i_|S޻W(5^mϾݡIqPv7dBba`3R/Y2kED{>&އrp$KV7UM7N9cZ:{ ۾+Ü|!v, /jס:Vvt7St}\o6HݹzۣNW|C8vWw!qq?*oB ypW*mng ՂAlsQKn /}ZEr׷J\]A4gɰ{xVC@w6td?G|K=.xtZO#Gլ>yeUPղ`YY s^'2A<3lt³l9aɽa;UjGx>O/kwwIe we'Dl50ŝ dADx*"<- $_83p"~NJCv =%XܷfFz4~nQwPLK,%bӎ*ǥm72^b mjVd7~B648}8Y?RUwlh2% BC"4ո_BgQMe ܱ4Guh2Abqogl^㛳p>xi p+Yz8y0I1d>r }q~03,d&syPMjfX< NQNž+W "KE$f;V"W8᧠H&K$Srixa-H6{>>( N&9~jB"];2aYP d (-R}Qm`y,|OۑNELĹb]b>LSdm";Dڻ\؁L/K&*V,{Ł,]MDH  ~*{n*|KP$*3M8b)N=w+n)(G2 K$ܩ.a'f/B+W6?'f= LCgXT tw`^F'h˘ \"]ep%>h3Cg" !c endstream endobj 201 0 obj <> stream xnF݀Qo'nԉ>(A QĒA!r)%uѦ"ٹggvg'"✥*\(<5)SJD74qҽ??>Q6|| ~8>&өLh0QS&(W ftOhK9HC0'Ѽm(v&LZ*&^̐P%~t\Dr+h)ÔUՅ'*eVb@foChA֛DMTY%2kX%E| |xp)%bPg~}w 'i#XoOiN; Vyh&ik\=X-r |`ySP|jJn<@*Vw%nc@HV" [Prbgn Ǐ lmY"ѽEt?B:vppݠj"F%n&'vAl\sbTׁ~#?r!ʺո)23a@uu[xSknX%|֦N>"?hE8Z~'\5pZ9*oq$@nN4K-.? yàഢ7keŎ G#:}`T U&90L jyLA]P 16ߗ9Yb.ZQdY7;X~6&#aWPIH.B3|6^'3)hF!i 1zm Ns7(lH l/x}3@wdo b ڑub{qLnx9):0Vd1S9^n:e|!6^56=UٱVklQ6кIKWoCfJl4W3UT# Q$n~#`%0hj咦TMˊDV5 BPCѫ vNI;xf`mob)ooVYv%h0{~/ b=kOܔ4>lSO NfZ[?+`; 9 k^C.RqvGӋKXƨ٧p[}YϚmG"*Ρ.?E37Tid=O.7PkK#$Oa endstream endobj 202 0 obj <> stream xZmo7)a?FY_VŇ"j(CUu87.;c4AQ~<3gfoO&;sVliwg%3WTds=e^)>LxM~yC Ró<[ZUYժdɌbZeΧ=WU5+09̟{EB'~ JHV!bv#h>G4*̧P.u ]uܪ@?wc3e-`i~*d~V(V@䳋B'|w,l~ wuV|UpnI)f=16E_n4S|T'aF__Uu[f6C#֪%`/26;~dĄ8ıOPTJ4~UZ*keoTr~}þu[,Ί0/=k`l,i =pڮW'6hj"kou !äĴ8]I8Y6Bg3E͸ Op\,BELӀWo3ͅf́ 4LCF~%UL$X&*!y8b{P+%jI7#?hx\9E^Q|GeI$Nf-wn NQob eׯh@/܈7@NNp,8 oYeaʹzC_jn+G>ǖkj};}M-!o+ uo/<<ط8 endstream endobj 203 0 obj <> stream xZo67AoŻ:zC}pb$Fmmw(J")h|p~3u~qzVPJjQ\?=E Т+-$iO'u==,mqӓ_OO^0ZdYhYN%3;W2Mjji4Y= _K.CzFSTY V\/KS^?MPDRDzDl<PќqtBue6~SQZ>TSTgTy0hZֺ{a}]򶨚-aVh( ܆ CBnp],(c(ccoCKpcxKwMuHP*n/zDIQ-/P%/#TWTo|UFň6cxO{ՙF(QÏ׀ܽ{P\ܚh3[JZ s턮m+Z`x:>B}§HT^ [`Z`o;Y+'i-@,U(zZHũjm{uZ?[qޤ >9vMBl_\IZΕʛcNX ֐jO`ׇxͶ?<֚ c +S`AvlE=o'*TmVWBn !o|oh%0uBT8(W]RER <O{ Hu B9#w٢bM0}H\yI&uH~YjjCC%m]M0OpJ>oh&9A w͢FkCd3`KӆZڂBQYSܢ`&'T %&Ime=ch/j&?5ge$VIG*9&4hcQu:U: ٘`rCGH#qe;GtEEhtqX`(ǫ ~RRkxMţ8X[k +zy_t쿂06j`W) fsfB9c @L$B]Ҟ</〈 f٨!q@*¨RX&7>25I:sc*^ӇNgIxb5R.Bq (RB}6 L}qtX6!#B0Ɨ!- t;IjQ1-?s~ {6^(`%3nɍ"ay IsF-p=A1 EKw>j(Úc]hu'A*NzlWB\Q#0 + 2nsc#f@9#.!8beh21gmr2: Q~xDVhf `!5%,t 5V5/+~P~s `@I3H |L- N~CT(stgz4.R!'C GJHh"X>,ljv)gj*)Rˡ=JR[y48<0 h,D˒Og,M%Ҍ"īIǃ?/_D 3Nf6h&8vH0S(x|vFg0{ɜ9%CA dhQ/G ovqh9~A7`➄&mq[e{O3?$Np'NDC\BŀH'K?I9Yуd9\c[wl)RX0خRXjPq(u?ZGKD % 2& pj}i`OUg4QzD<_gHO7[4Yb) Fl7Kf{Em:v+_UwI.$^2(Ucr_{@1 N*nq ˥F錜-lrH=\Wq-RxYi"fi"w~x lZr)1>9[Pxm/ǥk E-B`M/HOH@C!S&5XV?ßWI37Uj?\5`qL:@&~<]Ldi"1Ls4lڡZ/:!մ} D~- [@QS0A̅ l%:ib<9 ydLO~+tRtPOřxZgH?> stream x[[s4~LN#< (i!=d $\ ήd%iaNO+io'Ǣ✵:W-+GVi檳+P%W;+YDPBb;|6~q^G_S?\{]kw=]:0FU z"XkЭ70Æex dI=mT@ Vz]7\ׯ#)oYp[߽nU@dAXwws}َY08.)t f̸ > Tr!?w3̴.ha& kv+>rb.N4 6qunoM9D2%~/-t΁ʹhZN47Hɛwo^|oQz~s}]_\5Gn _~К:5p%~w~`w5 zmh+9dq91 Hg$G$wwTXR鈥R gtx[dgfu0 KI4hwX"9p-pT9?YO^Sm}UewlCO=p%l:Dq> *K$=dn+0ZÛOA\ȅ %g/$BC@64ŽրTZ=!^d!k 940R-R,KXwoo.XcjwcϖlZtz|99IYԡyJyd[QsrYʖT(x%:g-\$ɔm _w[9/pDVk&SdSj֗ASIԈmK:0X2m/⚌Z$mi[P< mY3*Ĩ蠧E%5%6 O+K(ΓB[ r l/77f7_rgu.~tW\zQ6FQQAV1 )!% 8/T`l޶u(pG[ '.i ((fUУԓ0< *qW27ʉ) H'(/CH2o[ڥMd[ߑ~ih_ThdjJLYFqBdVbd'i&1xT(xXDGoSHۦɷ)FBDhfȷ nӰD6QgA#8O\s'oI=lxz.MʗW,Ó3d|䳡s$t5l=zPԡAL;pKi=/{ ],3&5u5l2Dq> * R>Z2-vy(s~*WqPtw[}U_ȴ 09F3b7e⥻ oh\,p™,g8ϙ 3ܿC@_#AEya*P{"_d1γ!Zҙw֛ +VM\a[t68RՄ?E &vR }xN&8 Po_6Gy>:I^}GX{V7tX,x.])iSa vf܋ZA4Um2ׇhE ̸;/4;/uNsc I=Ɨ(Ym u?9Kل2!f_ endstream endobj 205 0 obj <> stream xZo6 vh֗euOvnC:5ڻK#)˖l˾K= ɑ?DDy8=8goNOxV<5QI]ӓ<+?OO.$H2]Vi϶EŬΌ.ZI\Jgɛ3°~v\"Tᢳ^K f*2KXl̕ \.U1UCuU`p[̎o Sv(YBw Ƕ88W`ZnU bsM[fՈMðttē]h 9L0|5v]Q% > ٤PV(f>jdQudZˊFh%j5@'c16R0%,"!3l@#,fbxP{ꯡD\M>G~OI?9x:Kb bH]౑{c|r/=Qۂ+M0 )q<8%+ZK$S0[IV0W[9资Ӡ22v[Xjۉef1*B' x*8emwħ`ӂ&@|932QM dW}, Rت_Bk'.8^6%43Rcxg)Ml5LV[[akn Lrb Ĝ= 9zܾ4_f6gJWRQnv?]7$D(r(9&ld͒,mV l7[ɕSF A$$6[_{6N.MdA dSʪ@w kA[6=hm#@phCkjnx_&b4M9uo]5ڎź[°:~|k|Z%ҩbc84"\^A9-dOSW+|z#4E޼ZYє}9.k/BjlEJleo'r;#ifJw8wȺM"dO'/"rqՁv,&Ьԡ=5`ǭWi7>㢽 @Z m$J(tT >y-Y0m#n7$/9.6> Rt )kpsn&n 02wNEn/q!-p:N9:ѝ'02 ~r M`K{}mTF)U&Yu-g՜a!KDGLMٝ{py\oGOjG q-~gIq̖@B}_ڢ .'P2i C<_#JRK)N1a`;UK>u- oD6 A(pJ u`m endstream endobj 206 0 obj <> stream x[oܸ7AV"tI{ ܹ!v[e/;Cꃤ4>ipfGOcE)#`pK˪@&yvM[_]GB*Ւe;XqU*UY:%gPU]?s+Y,D'@}*%cNGz^heb CVyvȫSakIUH5Vhh^g)Ya&tţb)9$orݻȿ[7#]3k~>k 4r;.kTW ,{*o@7ׯ^ϭ/($KeL 8C߿t[ua@J~2VY `2}2\كo ` ,qq01kpfYDk P&観W7+.]CA(Д*Qpm$,\\Zy7ͳ߭%]=s'K Y<Sx]mwvh6M;zz*1Ja`s8;:Eb S]ŀOĎZ9ۣ,@L71ͥzZig53L@{)"*ܿ\7M Ӫvvko;"g9"b6ӡ\N[tHRm?7o۽CCҞvHYku6h_q}/sN_$BFc>7]6N7[Jݏ DdwV͜~n̛{5ċYd~eׯ8 G BQĩ*V(TJc~F(HѴ{ceokd=۠/YcQ]@XԼK2&Ĵhצh7-P4osLw* ֖ xۖ30͐m:>|v7籸P .ڥڷoWaقTP)Bqt&L9֘B?%:.#Hڍ*ᶿ磍ZFv;r1ްe2u$4 T3 ;tH@U&6qw[ma'jL$H&]IMGAuDpOy*[.Fr><`1,YcK.H&hѨ~N-QWŴ:v0#aӰNLZ@1I-U۟>5E]]䊖&J2`$]RIp#g#ߴҝfJĖ[N :4) qpi8prHq83u: ;Wl/~y{ vbi˾' seF7> E[SYfkl JFf6 30f$ `DPԟW@A$!(X(kWDf {P<`qur= NLh㞂,FB^LSHزX>YTnOaK[oIJ~HyIt `]ld|C=-^qR_VϷ?Op?GpH$\|H4\$pռfq8ZBU`!`d @Q,v]OK{@fXM=*6QoV0D5nZՏ[{ࡊ~ v'LF.[5Hzۖ->=q!*8U f?K(JK8%(*;d__c6NDtmg2ηȸq-A2R^פ)3~X< ˶8MT&͸uaօ\1}B?;IO$IL(|5wI6}\G,>ÇoVI-MC"a:'H&-9|l2ɇHKa`K;˛殚Wh ONرgpHKJa?ssT'E+ڴ', I-70tfyxklD;tD#ô#&H&4V٥a||{% L ;wD6|;w .7f$ q|63whk~z%M4mU. ڕI_8O:YhZp2 ^m5f6JYE{4wQ&t^\'jo ұ VhzFCu\_{!x#w}4#a~Lh_^.WiikHd8v<) A2π@,miOw6 e`n6rd 'VWNScFpTQ rwlPw0 _%Hoc$w `f[`u ̇| _zi endstream endobj 207 0 obj <> stream x\_ܶ?ྃWFNJLNi\8kׁ}ޥͷ )."E8zz}ys^1ִ~}ycU:~d$// ~|~yqW_^^<N\^FF>;ɪ{V\7FUjW7ZUˋOl_ŻeFhKY"KݓSJC~"JȆ#=o:mgP|WW-F`*/֍%u#u|^C9KK!u./ܼ\!WB##߂wÇ]澾ZfSW?^@(5 sKk+/+&6ۚOW ,k7o 5psq示Qs׏wo^=79SM0ΫyY=HѺbрN`n5¯y8~b]\B_`)5,!@pD ;j;?}{6~xU}ݍ?׶c]e?V5g_ 3`PҝՃD|2tnB/48^7 Zc agJ|r_mqot 6mDH(gc f qf{ "-D/0=|| ̶+l `gO0,F?_=@BFn6O $j/wU0JBFqQP'ԩf~ۤB=1Fu@wR`Ŧهlvf!"AfF2EǓp[ ϡ L3 64k) ؀]RqMbEt@lVhn \r43pf:"0Sh$MS8`i[ ϡ /FOFLˀ5 #%l90<,0bjE$ PRTpZ9*B~P9Px>;/2̐:hV0yov'cׅnVUT`|;MLR@ƔF fRQl#k0(g$fQ Z<bwNHAs( 4Z. 4>=4,dE-s™)M ,Es etyiQ!ـ1   >ulG{vhfV,Bp//%8a0AzLIZ/T LIR7"EAE/miP|yNT֡sP=_A#+r8()X 1%3LMQ=wz! m/Λ0fI) :,) h3 `R OBBT?vb)l:S*(=%CFTNJ6T<\#; D5h2t)"A8_BT])_D^|xFyga\̜lQLh$Gc+ G"G؁&ur ݕ_" d OXwz ~@IExG_*G(&,4Wa.ۖWgH cչ[3ziPc lF̑G*lGT xt`W}&,R*C()n!:uOT`|k_֬lo92 -^3 ݔysKmzS_6+MԦ$H= hSzOzҳ{LnoArWۓO\#w+"+8p` B:X58OXhH,$[.VQG܀n\a?zmF`;GL!s+}+W{ @列v*ɒ"VYήųŇs9ݍ)[9INgCC>A #Onk@;- Ǫug Mc*lowkM SPWLz,ۡ 㮒LҲIB-.xɠj&0n045t\0[fn3\ݭkGϴ$|xb, _2X,DMaV@"$D7?ϘhdtDcNǒ4y QKcٳ:w 8j7߁0w &o9+ euJ[KULeie^!GpL&M:ڒ{]`$i[h(qF0ցsX b̶Q]N)ĕS^ ЊQQ4!,'m^7e`ѳrMf -Ec uNB~9Vu.X`Sβ`u.XŅ+kQ e VS3$<1 ,/L>B~9QPVE8vTÅrkG+ Xl*f2hrM=R4ǀ doTb['ϡONCPO9s0餴N5j/$=!aՈ=?WX|٫TxbN+o"*f2ХH"oK^83so035Ζ2ZTOmW, % DHJ뵠)g2r&NF;NG$MU=Fa+c,$ t>C{^5^K*~f)+"l%J\mo=HvpE)W3d*kRQT#LGIʠx׼|-W̺C'+M$1)-z .a+5e$NH{rہϬjw`='#Ug&U ;|;]ߑ)+BVr.dwfwRVl/#D7UPr +knUaI-3ƿㄚ] `%+*hg##PA;Ă Ycg} a? `qBͿᅡo&FI#t3RRo$ʲMjeާ! F~T!dY97X;.y=k8DG endstream endobj 208 0 obj <> stream xZ[o6~GY.vO vmI=uMɆC2)(_>l~z%+(%(旧'-I(|$M1Wo`.ϼdQ՟ӓ 9jA-0J5aMOQخOO.X^4hKdi=)nT,ROv6$ :E46d+%jXWsC,%fga(DՁGP3cx@hĀO`MTTj˻JAdg|_R30glQ5K!5`c|yake^tMy[T/KsDdJh;A_vQ(/?*e5fY}`w yLru,$i]LL YmX5lnU h<\(-SԂCH0=!*HjRAv æڗ(km[f!܋~ZY6s߇מm_#f']vqҿ4y@ABiK5PH{OiDTq*c E(h܋4[c# H4Gx;\PQas+h cOC? |8BB}su@ nĻj8[):fMy"p߮SjҘSƠkZwkпXQP߽/B9擂k7|[W΋w N }UDŽAQ:\b 릭aK5C2P0mD~ C8#`H;$B: !KÃƘy* >J$g+82_ HJWW+LVnZ!HoVT qA K?ڀ[zY/9W( _̟֞ 0٘l `X^3}b#!y endstream endobj 209 0 obj <> stream xZmo.@ w %v&h+YE>8E ˔)w.ܽ<) AəgӋ?ce%#UòZ :o1ɳQݴ}.||z|tRRUɲ5 T\VeFU%Z|Kus|tUܔs)!K49g 4v90GXrZA؏ȚҖJPE7#E&{qH /VYkB+I54G筋5]j:H{=YBA1gsv.J.JxdS[Uh8§k Loil*/8(sx|٩Z9 xX:*@[_ QBG5 ؙUy p5MZEdU۱;GRk,Uwglh+I+9Th] ,^p/aVb/{)6 nfCdP PO$[}ʫ-'RD YiyM5=#f"|$;P.a;8I.݊{sûQV^ RØ22o & ڀCƛ,  7#tCK& =~ocK7·Oy29~ӨI4*Xj~ۦ@}cVUl`A[;چMs61"N7X< 5I(ՆބrA,GUo O1Z!D#\ ouZb߇&vY'5XOR!I$b~ő_+mP'me ,3IJ_(ϱ?⍬к~;` qu.qJWmFJMG)5c< ($t>6 9oWX<'vǸC#h.s8~ 8I~AʴEh bz> UPqwD]= %"e@OpYb̾#uM(x>L8+zp&(XI`c4Au )Ji 3N.t`C A;%8MO$Lw:\ Semw13M8=8匵[\&#t5ʳg ̵D%yar6qz~C:@)uͿoX;OW|/߇hlFu Il=$sUD  9Ari6HN(\/!pbK0|?_μ#p jB~UU> stream xZo67ARpˊTtnރs({w]}gH} w>9O7'ߝsV /jӌWVi抋ӓ/9=,OO _NO΁$H2]x°FVL)38lOO>ZXVs#籞UDeԘབ >G9_ljDqquYj-yaJCuޙkVffD\<eO*o+]>}h2ؼ\506jF +2ٍ* kb7;WOVM0ޖ\aL͟J򺀥nLy{6,>oo+#ĠXm8/vWf{%4"cAН/ȂGrk9ic0+|} ,k8!pXM :i2Xk4|HF`;-qTx_2:rX}BJ.#DzzVw\F?Ihym c}VǕD cS%FkLwqLhKgi;譳 iMfA4$^ŔxΧ еnƁ7.o\SVWwXg-+lАO?iSqYz[@>w81z}Ah$SM7S zq``$0-WM ~@wXA Ǥ0/j>,?ZUShX(C!m j's`fXfr+81NZ00L9 pWDl&Mahnf ft=WcMiI9azoxd~O#B|roW5)8*^-aJ)DlS{Te ah"j,A4%!L6%ԴQ|wfQ!B0~V<8/'z0gw.k8)I }u777Ovw@hx id4k7idnP5hÙ6gD逡!F*3L7?X=.3Ժn<.򃤖6V_g[D7O]x??os[E1 |ͅv xlఙKҐs DR᫰ NEb_O!BV_CK&-DoM>'a^)@D8<O)@Nt-1#xnX`A[haӏ(s>1"gN2Y騪 ʊܨS܌07:n"+, `>HBo-Nmab8Lb4B-"*.67o}RPP`AI9<2*\> 9͢`E9&nOӈ73fL?'1L6;tuKjͳ'߅1)0(Z\=fzw׋&];VOtO;GEGGC9ho( f%:68& p <Ƚ? w u^aǮ=t@Dl}*"&zN 컯"|Q;]婕%iQIkHNLs@9z<ΕНf"ЕƣD1@WBiJp`w o_>kã#P~@[؜~m6%xows!<HFb_HJ阶4Z2 h%zk-$iz'/3Izأ@G/GN>HJi׏R,Ha `cp+OS+.SН]xtw=u7Y[_ K@y[n$VΧ׏f fo]ao,E,Qq ,V?J{X{czҦsS#zXŪl@nTOqͪV r 79o2; endstream endobj 211 0 obj <> stream xXMoF #T7 CQ9B{p±iŀ%9o\+ri盷#_,sɄf˻D? r-P{AhVOIVx?\e,-N~/``;hiye3%+5 ɭaz:{x!^y%9jɮէjc"Fi.I_rg}&>XJʌ餲K.·94%вz÷*=Cn}hE5cX}Þ\lT[Tv77 -5p^z;`ޣ(GW2#,@_ԅ%7eױLyqx7sCp@$ཙy^pGeϡ7GraϿ$oˆFs7]tEKoo=Ru _d$ eΐS 60JhUUj6(^lT7WQEX2iq̄*u/50Ʌ[|߈ן]b%*%EkfOٓSW7맟e ~醨f[ 9$ĽYُY‡R+svH~{Mʭd *y+vqRjs 1S dZ {*1Z_Z'k%v4Aɛ$We B )HE` Z*sj"NҘ!o_4!#44zwzl7zL3İ!X}iΫd(ܒxvM,$o𖉽[r=[`T 虔,I8e/R5w]S=>nnλzۚxM"*ORI̧;}^X/\CZzD$ R ՒvN+[X$X-vC wT$@v DS M{ @W<Ėk:>GxlV)>ut_NhEr &JR:kqWK\&IU'&1_C|*?X!4i+b.?=|-?CKyėAf{8, CX55\9'S^I\L]*!OyE¼Pݓ齼Q)o endstream endobj 212 0 obj <> stream xZmo6 AfNqpmElqyK3hFlq-vęp83|W'_'+!Qq_Ta9mX[]ݞ7|亮_| \S 괨v meTp&۪`IHfM۞|> F:EQ6ȸ d~9R2/vqu($Klp_ݯVfleu͖reڎU2MݯYkȚdRb-;{?–]?61o=vL9V7 ^燇Fz׬TXJw"TMH oG{&+ßB|X7m#em5fP}~nVBw; cf.[TR$z6PmˬeJWAʽHCԼ`j4$z8fWuA5XBrB!۽Ĥ?lipJK|LebJʹsq0GӧǓ.7a3]tJWօ8h,-+#D@a dR|km|I3-B(X,8ۣE1(a x01id.`<2Cix|:W՟ ODQ n0 knpQ&cV&1gU߆-w{螟N5Q+x^(k\̩Pl0ї䢘fƽ#fTjލLB?}u]}BXѳ'<* g渾7l\gRᘙ} L E䡳ur2yYt Apk>LHoksw=}Җ.VE&@4RުՈr̙fhd]dCs+[╈Xwo>6hTKtucͥ*+xVH+5 e,Ûbp~`b<'Ѓ,7A:!c(A&DUd?>Adns#珓ZɤEGO- wKCݯ H#i!uD&PtK@Ѧ#$5uyu_5-\{@\ϟO O:I,&#'te)%9Rk[o඿QPAK$( ;TRu%]Ei]=%]Zfwc.evݶLs3"(]rWRɧ#i?)3i+0 F he&N\cae\cfbk pl(QX#LXL<:GH?dg'B0+J(d 噚L1a 0tj#1o`bx@/oa:xYB3rJy A*AY嶟Lf}SϨHŌ'y83Nʌt 5 bbXMi褎pBX@p`'C3^jO;ߓdZ*$.ُO)e#r: H{t! :M4d4GJ(&f+s%uԎIHuݴ.@ھGUg{7ۢ.-7A3,dt Zr4daxRūMkȋ sC>`$y<2Aĥ+f$DD n \k!i<ޔr!#Y]DQ?^L20M*neRʐbwyX4Zb*Lpehoo1D!^# #3KebZ,G2-<旡3# endstream endobj 213 0 obj <> stream x\mo8^n)RzirKICPY;H*8qmp8g8Dx/oL8Q/OY,ױKF8]Prv{$]ۧO>Fg${(S$Ol h-3X\P!L϶Oit @has~JȓoY|@(+< |7yX$t^j?FM@}] q eCf]Y#Eq\j&7Ewܩ%3p`֥b52Vay 6&`!;9␴z?(r۫YtؠiJsg܁أX@3Sĺe*by*qgD`%JQA OT'Y%h^$v# ;٧H*x݉vߣLXiWiK<`UZFXJ􂼚<ht]  J ,Jc4**wQN#8e $ 2t*cm0E B0MrTԅTTją4Ԓ(jl2RQp9K)Z,"+6Hi# kD- Ci$xÐyj~f9̨̨ Afl36g&اo!SykW CQG{ 2&ȈN[~"HY %G'H#O<8oG,u6jq1,xWrd>xH6fLHGˑI0GFtr Ge%ˑ|`s$ /ӛr?GtG-6#ze\B\H|. +I a($bg}NwdidɆV/Y{#O^7~+v`9d.[n)bgy>B?qs_^BMT]f"EANAGn۳rVө"VGK 1Ftr :ߒX72bRHejPM0 0 .03u>Ja͙e;|H{_g8;G?e!ÿwA?ԠLY^#Y6__|T4 U;DҐT+D>.ռ$Lk6Q!Tk䄨ƨ0jI!Sx`T۷<CAS &,p?p~{i)!G r5Yά>.1Lk50e 0DH 2 ctͬL;FT(wTѥ$ƶOKR=4q0}֪p`fam@Y v%F8~EU}PK.mCmI\8AO[L6(Dg`4n x%Εմ@tȃ^ʼnGrU~?2^#L|OBL!qTCkjM'泌 tz˩e1w)\;Pl-ۦ{˫w${yh?of:=%;(ܣ%'Yv#TO ]lLJ,7 )U jj9av҉mر)rY¼(t=Rb%>8D{z|q(Q-I3P;IA3>̴eqI;vscDۋָS.ꯑw\7J{@{EVt NJJ۵>F.pG|@XJ2l~,L>6ڑ"TVԏvm=-D`4>*QU/GfEslm\{s\{W'|^30Z]%MOSlB' slpD2: g!LO8IO, F3pꬕ 'ب"NmM+1P ,Bq'AKY07{DjVoiG+p A۸̸zvsh3^ Yx(qGb=n # K7 _}sgWa q8"X`uqN @+-`܊_), 1>-F VRiq{_]Ɵ;&).tkӖkfkpBUzePޔ u%@iq.rw|[O/xoohtkBB ?ISTG/:!#Vb da '@XJǧ8|4`e1E>l[(*:챻+h{fޮ,7!\`q- >s*u}):6|@Bl|r~L$}S)3/SjJ)K_j `8"t Plkm$[~:".1(euT ˹(ϖYmw@!eaP#ucvR\S)1!j᭎INJ?YD띗-np$xgdl ?H#19), | WN02{_Xq2 QFut_ӼD,+vzCؒݕo__5wސh<Җq`MG6bLU2rAK灕%މLm >'uV*FKys~P$ KU94p8R?|,Aīa 0[XIōm{ē75-pg:+njWW6a;kf\nъBYiyt73TxYU \CO+49^%ܣ/hO8]⩦m(TYP)\[*xhe[2z3N8 _MWgqt֤=W1 \*X<5zu'NשݣU>.Wh{D8ް瓖|ޡ$ﰱ>l^Z٪TWV7Qos:4xdjR77rr8)veP=WV`=K/ȩUO';qAQ各iL,[27n]6.;])sc0ݿ!,<0+ssϭPM;Gcgrr[HpB_i8&/5mYb- C}NR/\L~ endstream endobj 214 0 obj <>/F 4/Dest[ 110 0 R/XYZ 82 484 0] >> endobj 215 0 obj <> stream xZo6ARPs֡C[,]=8NjR;nDZl7"b,"9=Y hVKBJHRgӓ2ŏ_NO.3gD >+A5PKY%K2dܜU+CS"CYXH.ٳN{aHHէ~6)AbͲe.o%jXVs/,%zf!aBvVC!m֣eP= cp@6ۻ2_ <;S {`a>3UcB)5l +Yhg/` ʗŤZ  1ZDfD8HP>.a^.Mӂrz gs 2$=#>5"qEI|UPݵ1'9ߴ sJ7Nv_;W_P[Y6k`WEmUR;ZgW![ܩH&Z.#i9.z*DqJy,y՘ ~[;kRjBnmʸ26]YC#W"JeT3ϟvm56M!l; Gʄve<$uf@3<#hɲLI^l d}NY'~`r.K߳~ C!t "D4BɆʀ_ rxW-;d}jz`%z65J;̮'?! /[dWx2qN iW 33&Ф ݩ[p]5r/Y&Gx t"{݀g Q׻Z9D)n[Nc$%҃VA{8U WHCӞQ0ˆ{T ޣqB7#q&9r@WZU8KHY¾Hyݾ8".AڹCO"~FAu69d{:qpWf;4E1f"^@YFq^Q svv6c>kGkj)A:dxOg-Vo!AͶ>k1#Ƹ~9hTP@~ũW&{"!3>qKmvI}Q$w{ d; !L+0en"={oo p>*\Da8QcuUIp*NѶ<%a (Rm: R|=aTU(*O܈ЬT8e,rl(Q5 Ocs1I/ endstream endobj 216 0 obj <> stream x[mo.@sOqZ-"US'DwN# KrGI)qfggfgfgoN^!U͋ӏG?R4"HqQ5 }pZ\fwGVEoGNP1WZ§⤸JBMpOh%Eq}|a & 2L/mEC.ɇloN{E~Z)i"h Au ;68=:0q{qYq9WsR \$Nj9Kˑ"zbEAmiW-luWJ욯о>yAEqޘW&QYIvV5w /l*фS#}]Fyq.0 AI C|ha;&je֓sU!8A9ycz /W"ElOPV'h(0V6)H mDB.y*?pQpY微xc?NQYGwFQ$bs!.A:c929>itC2=ϱ,oekIjw "— $]v yrX 7$A low?Rr5\j^,:oQB E$uZ4J\$W5++k,g 4Z$FۊQ0x]ޜ%pLo!Xj72R=^q_QOҰxa>]ڄb%LG0bL$daHY+tѭvbMXL1T9^J_ xy.-.q2X:ӕg*crh.|3mEtգ_jᏏ򽀴6"}(B^,icƘקNq}QYZ6XSX*+F~V? څ.eYbܴ* Tש)4f ? X[]}^66M2-ML AVXuWV@/>Eqw -1@TE.w<]IoH%}1)k\?&cA+ (:I(JQpYKBV(罡z'Y?mM{$t&PYQKX B c.i@|A\}3ya7]]gxz_ݚoP`;L}EڌcLKEfNȍX-O4X )B-g -~wM9/{I='KNۘ\?Cz 3 M%᝟AٙeͰ-KEL~\^'dcӍYg܁ FVk%9&H&jӓbxjNX1~f/D? =c*\ƽpJ%8$!ne0STfTBY1"%6,*ol*^96V*ё)Gɑaup kuT_AČDA Yɮ#TKl^K8F:E1b" 4HC70 +!{i*)nc%NNB^P aBϕKzsw W{zn$A.x'ArM\?s?bO Ym p#Hs8zGz@p~M 1hERHoqⶻ]NqCߜ__qy0@;Fg(ᡇ $TQ:-ʀZֳӦgqW܉?xS2sPׅVP{,I%f$Rq RIp?܊,96$ѠOHp+h<Ś?{Ϳ.gFW_~x@D 2_N&A9NEY3*:n=cn}CByp[+$j&&kn}aQ^Gr<|T.PX0aY-e1К4`9 XηrOz3}3XAr*mcu _pp XCk{9@s9MOO7YGCQ$Mr2DNWl^# a ᵄ&Hg崨$y3dvF9sdiᬢ?;-̼Ӳ<8bʶa޵=̋0P`qXL=93X&Rz:Y|- Γ$|T,FG`!,LgůÌ w^\|UX KܡLVV&pshX{yův21ʘbFzv[>Sڋ5f3?Wmh`&{KGWw2w0Xt,ĬOWgȿ6i"n;,;ژ9lD$t*#\#yY+Ra;7ץGBf& C=bg4 1r~|wӼ_ tCf9P;ۗY: 7T @{׮ٜf-o+H{gPLtdp+|4&q7"Mfw} Q$>Ͼ {}ЮCڼx۫dRI͘&5_$v0+B2T[>Zh#mƯ0aЯL;7_E8G׳"&ϑNFM_ԴIy 6 endstream endobj 217 0 obj <> stream xnF]dnޥ[s!Ez8q(6ƒ#mݯR"E.m'0c羇:>Ϟb>?y9mN;evxvU|5YGv|~Nc[:-5iYe2g8> ɬ|vht Qp!Kv>D;>df%sh@D/Ynyǔo-v\VU'tfFlnSzh:Rr`ehD5"~րX֟Ae^TRO6w7? (5乧wC7FXf!RA+3㻂%Zʺ 7lP]HJZ򣒘&{'4%18LpiUN6Dp05w]rhyhfD!JMĦ|HZᮡ$ Ijc"9&gxz;ֽb9>\Zua%?%}DGՁ! 9Qɵa0@fq]>C(m9,/w4>x*Ha( !CSF)YahP PbMfuI`{qսC]L^nW?6uBvz jYO =͇pO8b^++v(+pFz՝6;RZ1bPdف[] k 8X%Ȏ"1R7 l\ 4JP`bM97l!ŪLUYx7FMbu7AJ/ J,QJ#=SMlJ1GΥ (kTQ,iZ$"WqV |FtV#gBRGU-K:uZo(LJ݆/ R Lu+X׷!BEp_}om CA$|kե1up8F endstream endobj 218 0 obj <> stream xn]OiXΕ)T>A!i[UvWsfx!y\KM٬4g6gF//NOz-2Yw'<+_՚qU4[\Ƿ'yV]`$L>+ų@kaYK&V ftkNO=s{X4r@oϲJPF^^ h@x*$>G("\-e2bUw$PϽJqfgd@JX{>.*XD֣iq;CЪ7]\L€fT5Ȇ5|95TZ}?8_)7d<}Waw9#d׀i<ǰ>.Bد ^ϪH.QjV4dB15gՠ6\dM7;:J0>CV =E'$ x9ʛ}v@l)(RjP@ wsG_A?G?O2I|Ȯҁ }.b]~vw(jOA/ğp6?oev[M!++#ψ FƝJX\ Fv@ Bݞ0%# {lr&@m!C"BhAo|G۠}dRD2Ӿړfj (erw$! _7L+/Wq@cJ@{Mׇ =-5jƅor**ɤLv~ys_,1XoaƎrU)g]MASnV2|::|ez7JBplۨH %pjё]^v@KuXQ`ݡ yۡ,TAPRZDۤc\bA*u~_ټy띋= ?l|Gd (ry;RBtzDz/NV =i!!R Dz!RP=>菇x:!Pu9EA<U+k'vnS[H.%aBA[ HD uoA]A= r慼̟e8{s,5"X֒]i]ŰjU$afA,568,u(;3Q Vb\,ecNa1* xVq#)-HHZ 3꽆ꁆeJxiku$):dwzȋ2r'5:NfΫCMz8ikukNw5:n]ulJo{`=:ιCN=2Ju:)Rs ɡc'ۻe:q'@f\[ƾqsU3imZtA 4f~ (Mz"L=`Ρ-u*9*PR?sMx(Y[Ʒ&cW>1U]-ަv Ny&!qpsn߯nwGdrO*^CF=׌$eQL-+Ȃbb]i(ЯAx #too3ߗS5싗΀Х.BLX5?e VCZ/] Ilܿ a>gw@])hLWpw7p:vZ6^[!юݏq˾{ݲ}}kSO['5]a B߽<%O䁥C OzO!m!Zк4ӏ V;'gz_* ^EDpvT?~qlڧHy4G[+;=p^X+9N;erxM_Zo鷺zg?ki N[/ cX=zgQլyıAm1T/uD:&a 93'WB/40|b<_E?Oq{rFO!QuzVT_,G4%ءO2C۰C*A/IƌeZ i5^[Х]Cf i\) &. !T9Oybf&Hk.Bq&#'L&4gDI(~ 2UaN^,@:pVM(6)󅮶3/^k}Uҳ=1XNds=x=bY5+/ـ`3DO> ? 'Bz_$:r]b?# ?3CD 2zʈ|108,4AYpKO=85k >)Bzi1т}Bԅy̬)p ۪\KgM) endstream endobj 219 0 obj <> stream x]oF݀%f߻iP nC8F- GV˕YrI.Y$# "+}u{~,n?d𑑪/:?[?pTW#YluTaTUr[X /*⦬q{Q:4Z b ƺ7PH`T)%N7M0>8SBH/2TJ/XRO 31(%G~ 2(lo0((Q<(6 p='1FI=cG0<SSx/ߖ-6Cz PwAJU׭P48> dbiwHϐ] >nXt9ȦټS( L{( Fdy\Xx;،P,Gd]GH mK@ ʶ e[lrwVɱv ƥ-%"M)l\lrA~LФ^ DѢ20L?Z&?k͡~ ^Kф_Ul P*]wO&.`91au&Nי3).PBz u`^6D9ԥtf5gD$qw ^]j=٦@Ն[/K2 )$N/3L\ԉd nσ`7Tq9 f ل> s_o0Yj 1 i_̌Nf*gƏ=n$Gٺ"zt=t6/]l)}dE%vd: V SpJb#Jܙqohޭۄ>zX7RX9L(b$b9~} /mfP''bB3&P$pꚴI.L2)Pe&b_yte)|%eHs(x[`)tf-z^`fr{0ߡka=5 ~2ܭ:hc&KE^a}qկյhqHb?-`Il 8i(ٔ&qt;ԙwf z^`g kC ס35}~olK hx8_&j0y~>hUv8nga`|ɝ+esA"(AG'I`j;N 8 pp>;;Ydi*C(RXHݨSvt5s|#ca ّg5j:tBmw~ZH2@궎^a@Qj!-.L#y:RcPo<ЂG#xj" q-vRT1^B~ɚ}(C3s 93st.=1*<#g gz§I"9cI" 96+5}B3V̤n9pDP ήCtp9oƇEx>M"c V"T{;maGƶMu% 9ẁ;I)̔WYrFǣT˗S3?9KNm|`'!Lé=pra8-D!bKhsoG͹CZm endstream endobj 220 0 obj <> stream xXnF}GҨnkh:(lY6RR =\#-kgg}9N.n$͞ .ӆ{6{N L_o5̿M'pKn ӂm0g .=ְb:y:F:^lqQ)uƖ{-ֲPr(%KlL_Pg"zf̪V)/\X]nnSւhi<6y#u%7WchEqvP zgdׯ\ll[ {POz>z>v{q0FXn{vMvF6v`Ioզ{\Rjw! $iQ=#Hj=1)\lb׺|ԩ*qY|GDic*~nw=h>47c!R4]`z\|[ChZSc$Ћ@^(T+; &+}# d+ylG(IJGJu!!%.*?s?g>?̽ӇDUMcIYS! !CәZ2ͼc2;ɕo3oQ!%8Is7ضZ+l/XK8c*M47)z5z_lwk> stream xZmo.@Ir_HU8h UJP(9QaIvkrFHγџyX:UF R||U௿]USu `Z4%ZqZUkIZU㣷'W혣xJ.hH^;jՁFë˛Zĕ%u+п__1;3k\QX=k:۲m6I :t:`pU_6{5 ƕo6 ㎞(iъS B]]m:= ]ltfCc=oIŹ!+u㭋 rU為o?55(^GTSonT*Тm$r[d/E-;xvՇmp y# ѭ>iCe] LvdA`Btk@dћo;pےMjkv;X[#wT-8ܯ!e{םaٻsP߷غ4\] \9˴$p:4.dg+^&HM̴Ik[ӡ8= – phقui.iFv$azѢB݀ 9(2I|:wEMzp alBvtf?$m/;yׯ /0lKDޝKM29Hf f/0Rs]A|ח7vigy6!rr FAsD0R SLovI*dn$zhYf7 y~1DHXvh7bapM[ PYij>ۮz:]3ϟկW! >~8!􊹏UΤ{e]Թf)R>>[/h=kX|f(%xo.%M! @L6`o*>jk2_[ w1^S8HeT4l銵BB\6|7^zCaY8#߯ЋcIʜpbR)= O"f߆ eFqD[%URe o]_P|R(%woYF[ANnxr?PhwTI Tf\Y&9810>N(&J8sA$fd[xHdg{JGyr2T!E0EWfa< 3-g30@ qrQ{rpb@C "qvBѱ".MјA")Wui `|-<Ar? DC2 f@\_ 3 H3|/_C>!z 5-_lEU4)Li{B; 0Sx~~zCx;(1:q> stream xZ_oﰏwE?n J AST>E!gՅuIj;C.w%wO:f83?9#TVXEjEd"uuyw|D[=>,?˟ނ_.@!jk$0PqMU-A(Dj:>|*neGhcIx̥e3D I8sb% կN)XBȔ%5z|Ua skbD\Vz]ץZ<l{i#s\40Z9" v%ST,<{*߁mhO/_1;>pAZB. ļvZ:P DC RsنYxCpSfƻ:7H(p9_%G]&_4IÀ%l Efl eo ,sf21T!efQن(p(I0{4z4Nq%(Ft'b<u0nu)' Dl~o䛖sɀMg$hBى^kl>ї^;%J1&; lezc1q*k`k=XJ,_PGX?`Dc{?rG/&MuCޛ. 6DɄ$k逷_BT|> )?ܭ\x3VK=a&qF!eԼ)8ĜN7#s62u%\U׸Zc7|1'w__9N^n+Y&pJo@:t^5jCt݂wZ#YJHh$f,%P9ƶK"Q&6}r [ \!F&=N)9ՠp[%6?v0l3ZK&RA.JMeM: |xphp<~'eN% 1ɝkdl`Y֘:Nfy)U"$֡HkQ( {C4Ѱ@4 e6_ΆE0~aAи ?KKY'Z]h$]Zx(]٫b'Xʞ䄂\A'leugBI!i@[>8k6%׺Zo4f"r#NB)EZ?a*piSg`%Jƭ,(3f.& 7h2*3̰0S+6i5DdzA*:z(38~M!#N7WfJ*8'FN!+ (-0pANb-sE>0 ē.$d+0OXUIr_|ikODy 4 .a۠8NJCH7Rmf~g~݈9.ϖ^[S9v,l "@SKjW "=繩"`ʇsX%L|x4wWVq.zӮm$o1!;jw>rPN6htjD. 5 90PW"r`C@TH\$0lS)yUB"s!0&A6jO=x,D* ð$z9qUN;dp/ Xp}ZM("zH}~oʷ!\Ux՝_;؟/wX Dȇa">{C//YK4 V䡉АD~mzx Z5}^啘߉F.w",rR^:9`ѩQ3Π3l 9BDЋ.uX yI= y$F<܅菹&=HHQ[?\Jz^״L:RQ38Rbj^Y IQUskq%̾KMH> h=}m(_v鶈p#R_Q:UݫJ Y:qH-9Qmr,Y1cu߮T-vq/WwUxV>a>pV0OC (- MMb eJÔ}8eͰM̀GQW' tWm%ȌqdTv`R6Oomn@BLZҬpλn0hN"rK ϜF,auy8>NdDp (|e*̪w@3jbS\P 4dFۥh/)490—H`2LO LݜL yO &"&3p|n V vL(5cv2fRM|uX`j-Fiy[ endstream endobj 223 0 obj <> stream xXmo6nAf 6Rۇt:$v8~HQ,Q!,Ͻtr~ n:a?VXE2R[Z,?;Xm:(j$+6&NFQma% 1N*6̯U<Оx&YqK}N{%$ω^}3TQhy1)NLo&R:@6KɈ9F bczHޠzݔV|T|߳dd^ N@Wׯ늩rSD4xv&6WW G7>۩8i!\~wleS-%4ѷIݲ޾ \`q+aLE}KXsfW3H_.MuoEB^?ocŒ9fJ2ԩ>bz ["Ʌ# ySAiPMk|T :+0 栬 *`uoՈc6~TCS5 oYńjˈqzFش)# _tH~RgPl@<"TJ+@ѐ#`hM%_kSmуvLR)eCL .j)Lt\r9p-f{=bZH -\p 3[3}O)jWJ5X 5 = IEढ)z&ꚥJ5֞2e M@U)G(f4Y*uɔ7 +\L%K[E hg|tᑱ%W S͞#TMy\V)P@xȵXi+E22)` }ԃ7ß`(V<)7b h̄?ˊz筋,.l ''Fz49TDz'htS1.oq C_-32DCt iڜNg h%á;hB!7qٳuIVx6l4%t Ti:w>5V-ph_}1_[xZ*D;Yh[<+EVPPbq{uiC ªwPqNd> stream xZ[o~7A.iz94>$E!m,xm%%i9 wfZU' GZHUWm?ry񹮚UWL# 3l|jA'L#+-[º2d_^ܾs%Ӥ+K-j;R)sW ŧ(~jaŎUWϵU>ZBJM1,ƍ: AY9sr-\F_t={ 5 k^X`}oqPY?5+^]ˋח,omX0j1jZC8xfeau{k}nV"f 1]!=Dr񆾡AYQQ?o66wn z3x|H7=Wyt Nޱwlxn}Cs\3ܑQ~K(+oNig!JuZ\pZCD {{8|D~_k4PjNH|r g^G{tcXdfPZoR 3X:yhtx!/rb I2vӥvH' :a"V6R\*ƱQ(d#bVj1XC~TF Yɺ]aעAZ&Qւ rðΪ [0 H >F8>nUrވ8 ]rM a_wNb e;m/!%\@݃CݱA.[~ub 9ð+0neu^քBrFptg9MPL- \@po܃SB:(଎m-\<әLF!!%L[tG''}vuĭmˇ I9mew'fM[[(,qػþ#&:”0k 1H [7lT%|tQ% ,?C_oB[R ^]<3cH t$,"Ljhl Mց ($\ed {i3(aƧ>iK%_lK9BHnV{juP @.~r6*#JrkqXxLyLCt'u5/[p5?6wۖ0_KkpA#2!`"䠓 $4Ί+#O?Adr66x!(}hD`~҅V=wMM9AZ['"IM+lvPM|.wsQSxԿ ZERHD1Ǩb͊. $tc/W_TEv)=}\ u<||KTYZX]c=EA9?EBY-c~c2wм=h erBk>x Wf! a<(ˆG\$NHF18 &P90a*bQb!.SEr!B\"snڱEhn ڰ!Õ}>d>B.g@eˉ6] 즺V#tȊoXHJkonA5!2p%;rɴ~IC|0ɡeڄ7,#(aZ4IHų)(o߄ExڱIngyn63?ۋg{]p ΧM? &tQJE~q۶L~<̇*KnpA#㳞ӆ0?y4àL@R9xӶbތ!8!lodΧ 29eq< i8w3aBed4Y 4^%!Mgߦ\"Oq؍P_n{=vKfFi2|]B OjY";VR)MNYBCiGG\y\YpsnoN+|d@(ELd@N-%%w҇& T/AQb~+SE]8^o%,f~8n- fn!^ÿKabw> stream xX[o6~G9*  4:dhv3b\ʢi9dR2w"KԹ|*иÞ:?C=A.e]w;7<Ӽb:os 3JYa_$ . d)1LE4]6pc `[X 73*;<iJG>rlJ?CeɔLJ0F-XM 2r|K2H1}8a$5-wM9Ͽ#74$u^{5%WniX=|aXJC<75\&\iT²ђ›tA4W1m[Ÿ|Gu)%:NADC\&1/SF(YgXiͻנЯ_ȏso?# jh" "eVXCdAT/E ÿZJx|el~ DpsoR:VzrP(dx-GwKC4~o8S4JY ">у.]4؀7¶0/ƛNnq*͒qLqjFmRZ.\J{^z7VtiDU(q #) H:my鷵lM&{rP+9H)|9Kjk粂Y̎Q#_&_:nhnPgCߜRzaѢY6 'nC? H01-m9v\9QQ!MpDq sDŽ\xM&v_zT%J@]Z::hhK뚆&_ p ?o=nzACO> endobj 227 0 obj <> stream x]Rn0+|LI$DI#qCb/b,C}nX2ְ3#:TFb7t`F< Zoؗl])_?dG6\cЯgGrF- Nj7Q#z$#t$T"M]~_[8FZ\ P쓄~FW_rh[ҒvF,ä{ NQ(vZE΃K^ׁ# jo endstream endobj 228 0 obj <> stream x|y|TEx;fr'3 L7y3LH !! pdb#_PT@E/**/p, * *QY\UW!73I(>U]]]]UGB !F#d(`84|$-.7ڽ|Leyq!ܔÎ DMSWPޯ6~E ~ۦ]Pr ! Ϝq.!$bz=lK>9K͚Q;=OCnς+b5w̵V!W_3v;#B skԇo|i^ˎ'DZ͂/dЏCx ^ïƞ*Z%-j]pDbt=DQZG3iW N2#2jE,b-pKDB<2Y'I׾+ZɒI@a#cd~ DCcpsC8R‰FR ]rg;)r{{> s=]#,[k:\7U}zH2\cA.SA\o)Mח<F>8^^a,}Ivomn}u@"_rm^+w|lpyax  ޗW*]tUJW*]tUJW*]tUBr?]t4NS8&@*K܊(s7(gQMa"£\(K knjBAERtn ⊧T {P5>Dʸk$Sn5RjMl(E }wʵC XڡYJ$I /P }J>xR"ܒ8i@K,V|Hwٸ=s(3%YJRk١ڣ $h|UCTTpPDdRp†pj ҂)\ v^ m_ᜬ#)K.!OأL2ȥH!vSJb*DɅR Pl`! W4DL[*H&c28wŻnnr7xnnn{!JXe;6D$dw h .m;N7@5EL {r+L :X*]Brm,_YJzHԢe(ܓ G{Ate>L7QtDX:H.hȠf ^Oڂ,%˝md*4@ρ -_T.EZ5ՆH6x \ EgX-KҀW6h3%j'm Ѫu\ PC\QtYj+A ƅK`;(ƨ@!"3$vz9,Mh $h]@4yY u"I%r)DHʖ%%$r'< Tx60-2nvlY U 5o.}QngE;Vze¨)mglC-j z +Dnw=,OFe vd}0`Y[ .BSↅDQ4ޤdAЭV rJ`+ iuQ)j{7!RRnZA GP8X)CDBP8X8X)GT NET"V!V# L@LDT!V|*ՈIɈ+JnHSAɇڕZ 'x(Zž {!tVCnwLVCYW>!P^j:םPxG?'ǂcAA(k$8LUVW)mJwipPut'v c g4?8'0&u" B йl ϥGB-j7fu8>#YI㉞5D@y! BaOC [$Ԗ)*o (7 HF+GCmefwt{!GxFd0S&͋˜*?>&R+e-?đr_@X4Z!OiRZ 0x׉*oeR^6pm]:-KH3~xbGFC CǓ::ZLr6Msy=FOzvMUKfń ^3Wƽgؠ~ Woxbz${u ,2!-&8$hHDLHǾi.>/Z-:=6|4rƪusd{&[Bלvja`Urz, 獋y6M1\l&{z>MIX=ܹ_r~3'OCˇe'stn;nT }ōg!ں 6 ~KGe>bsϛqڻ=gq3%drbn̰h%t(N/ I۽z=xTf&gP9.̚iIJ$Ӽ fA铩^G@S`E #l &>q;ͯek=_t¯iM~d (rT;٬0!u焍>Dca+ G.NG!RЮH`tLA(KP=#b;n+ݥ +0p 5p_:kU/#S=~S{l7ULvk/}IRSձوA;ЎPRHqm :aat|%Xj95\O&r!$P3$|7X<l^|ppqz9?ͅ;Rhd*Byұ\R1kzP|sQ}g#]=jܱ=ikWjˤ?;E{ѫhst~c[~0(Ugڏ$VKnpp'VXID,vRv9:CE҈Ë }nHՙ3ۏoWy:Fb%DrZyyGG$ݹ# -AT_OIIHMW_?m*Z=c*;]sqCWlVd3}!O߽@/Tn`g>y?m栓10 &`GZ `ooh$=,DhDe j 㢹tƄ^3xnN(Zb4:0|8̓HBx: [^0 Mg8`dMS !i.@݂1h9:tD&081a$ݕ`7FzA#p`{),';߮jKvF]2{54i[Up)72{Լ38?e=&}ճ/^4mN_NZf~͓k<[uĿ$Ҩ14ylr*XON\#K@Zu.u~Om*< rz6yxQ-|J٥)~|l :cp;yX ȚLϧ>;}1?xzd7yB54D~;cB@4{%ŔM3!7kz:x0w"n'q9DbJgaZq~ vjFHcTbvY?hH!rEϵ'ZcZ1X%ܜ`bķb6i5Q;H\1["}&=C$:ӲN.>C8aMeXWtC,Fk,h`7v5 ʼnЯU#[jaǹ"=ӺW6ǂgZԾ@!"9</db!;N#7*^5yu̺K ]HWx^3!jQ|.A3ަq8c? t)mep|ߓC3,K` <&DžO9<=&ȸp[cA6bCY5cyu[>/2֗Dt@viqx'dlY5*4'\k xVK e {&yiSOJea翠#f:+/8Z}hAۗ:}&{EO ^aչRϜ3_ͻsl\#}BTYl# hBU="V02{tԩo_&:O1_[c{|-c4{h94HL Ui0dL̎x2nӌQS+S_|U;zzȌxe۟W1ԟi:A_ &hE+5 + Kkdrl FFX6孿M>=W(tžZ AX;@s;C5RhGBkFu&Ɓʍxw4gj?yj3^؉#!_$Ci\F3b\L[stE;廊+c}}=fu.Յ4 f0xjGyCv4xަcOjzS+^Ԟ-pfrT1O; e~HtZ~O]ٟt6ACnaLn'xJ{dD[0͓ FK),C# <`T0Kxcw$;\a1\IxS 󯿻,DMxP]t.bLrgHK?[qSE;֚u1щ93GWsaɕ#3*_:lfT_+f7ݾ1ug#@i7..ࠃ̰}h\;S{h \0]v_^o [<<Ή\U6;xѼ\#i4W,٠]-k9~ozԻ#dYwDfzLM'ϓѱEuܝ6&ot$M8:5-mkíN$de:d@ Fu:Ry^`Tg. B.^VƷ|їT_V/L^6Y,S6:L8VOC؁-ېꃫm|ە'yͼKyWK\쩁}is799ˎ,LZr_y$_}喦C F$ȒOٳ,jZ}{xY[v#K< -9sTspgSgSRgY2:`zϵW߀5;=$Q${`YʉF-;1hr82^0F=f)1_s9fK3[ &M/ a Ivo$)A gVz1ء!^:]^O Іf/7Z0BLF>:!]VVAG6M]g#gn߲4#sa#br[MwvW09wea^¼}b!,Ϣ@@$~/ߋ{i7mpg@ $  deǹ %$٢aMSflR5}7)NHӢ wE'VQ鿕Mw^ko(xŹQqDKa :M*0J6oDf1+i` hHWc0 sJN9pRUȅ;u49bBbz\uӁ'5߿zF)lrPSYK`旈Sl'J~\(6 q3RFZK=g,ٔՖz bg<iԹ\0#QTXbuKcb#߷ZJVϟ~-9qb%ɑ1ϯ50t$))]នmísOjfZ|P2|daȜ E#.$w֫aq,`09zv-0r˜׻3eƨTSds8MkS֊S$ք4{y=Φ) L"xu4VKHLhA429.tr)p[|xɷ Ah!O* 1ÌXxftgeNgd{}O=.]ĤB5OT?Ŝ?q{W@ 2Бw[gf9^غXA?{ O9-YO/OQdHorQ|D7!ܽ}yp$c/oy,ߵH>Do>` sg_{ig m;BO1ш Ci_ 47L۽s+DR|bH22 B/:!  .6 ;;;k/ژqE&6~ D'f'뵣4"PZj6RRj~bTMӖF%nKp JՊtO •, ϒ?5O_iėc}Ѡ}1%elO:K<ߐx/=JInwXŜ&s-ao\nkzfc"?IjE-;7!~MX!ydcn/8>ˋ~Rр [kbұR C"* =y A?L u>qT)e3qV 9p՟']Iפ{e,_pddv{MOmE^[!1K-9~_;> jMYLAE7Xr$Vg3d$#HF2d+ W)Eb5#OC%T 'gN s rdatnrG鈍UMb' kuIYA{ ,V Qh1cs_g!BFk?ilxʰMC.YG٠ŌHg؈ a#fvGAfvX zRZlF2`u 3jUUڪ=fl^mI*یQE)B6OL-dn8Z:)L=z&CMTE q] ϔbF= ElA}Bݎq8cO2C{v~Cm-rI2syy ?3@ס7Oߠ`Ke ^ ^ҽa&-;徣AuN]~ Fn=+=6GཕF+m^62V,c컛=lTc{P5c%?G3(A(4  A } 4Qp6D/!@J@s$9Cb_bTOg_)?_T/my?K>tO^Cٴʨ{tSH;kiڜB?osޫGY#z~H4/z0S/M`9ڜ6aw Q02-pϹSGGy> stream x}Sn0>pRHP~%E*rk{Iڦ5ڙ]|f$nte`ΦrSNIՔl>0 # IHfh&TT`}"`_Ђ ҔTPDOE\@B/[畍7㴶3,*S +%ޮ4]%uYM)G @Gy;g`|W{ YAg6=![pd|2FX{Z̖ؓ-6+[lĽ-? )/C1}DZ9=2r1"m*vZNYدH1?Bm+6&\C^7ީH2{ endstream endobj 232 0 obj <> stream x|y|TEp]t:wڝtBI %! i@HAUKP@ND\"n28>;nw'TO*ܺUN:u@(!(-4< X ˊKJwlYV1௣ ܌Ʌ^]GL2PS7vaܞ_l#!VA9 $x!\_d!`ss [) [_;;( ys $^O s/]eZ+;7-,{~튅d=︹v~_`9ýpwqYOV;rqqA?w&n'4(_ɟocIf2GrHr3vJxyX͟&s>}}D b{K5Dy nqs.z؊3%h"l!6(,Yxd!d:n¶ w&<93r_~4~7V,<[62 $|B4CH|v|p;fH k $;(π~|ƹ/(`xF 7 մ vo0j,[BMBhgȇ&|c';}B2ʬW۾?ԟSO?ԟSO?ԟSO?M}d<>& Xԟn7'we[ OE@."d4 ud&YK rX"Mֹ+˫('Yy&W7tEAI%6%SOn@-XF5 ┠?c.xa&eOгt)CR8zR,TMdT訁Q5ab X bKt;p G76IeIgEd9NrVȚt}eT;>dTIC-멬>9xGaGz QtT PC\QlIjgC5WT@HKvP  QPSzqF ,Jrz{Ƃ%B8Dth db9Q*`Z9d8EɤtPP+ЁH_UV/UEB __ThϿynɑ$+:ԛuŃB_f[zNq˙00r `{9 IЂ{I%QF-Sa!(TJ 7z-q?8#o))[՝y&4n؈( 2Zr rj%@WG)"?ȋrdK܇ RP̔QV2 2d4 L9`f,`f xL`a 3a0S000!s-`f `a0Ek 3a03 a03a0s[ y~yra-ggc9rZss^r:?܇8sG "/ ЧDO V#BSި1R+vǬ[ZƉ"qTS΁ǥ8N9:ēP.8{E" [: ؘr zOEh}\pȼsybbc"Dm LF_2#`eR~9gVbdfO"bq>+ͦEJsf?ˤKޥJmg)V^`iq#H1$ JssZ8yBXpUD:~.?UqpDadX D@–Wبfg GZC*qIZbe9WnN^vVi~˥RTKPM(vT[RR ׾9<͹ꢬsxqbퟝbJqc\iz;/A7*yuǟ\yߍ++&ݧt PN/,A~JAW¾R~'x#w:ѹԩsk2 XY"72j!li5Ffi+ɕk3s3(ڴrc g׿||?>N@&8018L`F㘉1$Kjj8ʶAg<̠yަN~j~Im.R9Yrd{ aА u02Q(A RB\x*۵vm6)?)ߞKO']w9K~Glp삲gN_ a:y:@hD^,*ZƵtT( BI(AZK9iEeu%tڲ(cӣ{1e^e =pۧ բY>B!ԯoQ Σ|ex1՞6DmhJ)7egtRX8\9i>%FtfT'n*6/č'n?VjFVtXaGΜioE!(Pi*`n":.i6{ŭ$DrtcA]E*Htb% 5)7O'w9 j2< ц(ӻ@hrNG˘or9-v[6YU3vor #=+ܔ1Iqgʫʹ?)_}t|DK/~--P*￷ 0F0n8/(-<~J{9π^\߅zBFV>%& '=hx3={`ĊxrK@!O(? @`zVq>7Qcd(ZRL#h^@k%;L(QkiǬ?.g=]?YYzYgG΁OSUn۴|e9pkYؼ)7Sy=)RF2I'Hy)10t #$t.f4h4lAUATjDp_JJO#L ƓZ-oDȝ|&$%S-UrmY*4XՋ9H@UQ>{V\zl݁#Mh~-%.fj}2w*!_E[Wܿҝ<~ZɧWO̎knZoNw@.&!+#y 2zh(̇KJ'zqWDi7QӒ `jtlԍcJ.}k-~oޮHgΙ*/v@4BJ9hAb9~+ ʉU㷭IkGIx2FC&M3ǐđ`4$4s6KBe3i׶c ׭1;ߵsXVZ /RSrIo U<:O*]fr_e<4=A& J$цDp"n%JKAWD5 I_2pf!L 3p<sMHtR+4LHnN%6rKh`H]Ci-BϸS<yn߳i}C?-5.FgL@)$!^k{=HRo'ņ>+[spKsc;#)Ο}Ů oLU5+kj⮂Mw,|ەZѰw7U60wVOәFw#A!{h}Z ) [(~ut8׬'@8OAdK;ʕbŜJUbSSl~\oRCмu m7_CNSi{jLn6=s^9IϷ=u>~"8YKA? #s` .|rl_ OAAyZ{|+tU M'6?04JOq9w={&"%K_7j]lg7pPHFy~X49LJ  e@ }0N>y&7Ȅc0@qh##jcoSn9-'3aEk6RgE+CX4s5q]y۴f$VE iqE`[`Op`!s”pg-MZKjK&A!3N$ 狇U =Iy<فghY~|uEEQw[%(<XQO(upnD{|rp-@RHjuhwVlSԡ;c&B@QfWg+-k8:@Gϲ&|f5ԭӅ˥{j>B#[sbkKhXץ^1Px;-}6dEjqZqz_îkžEcgUtσ|gNC=\˕B=ն%Sz 1_7y(.Ĕk -&'/l?.Q_*|ѿU/~vrZ9M>z)ӕ߁)43Te̎Hep9t}*_Vףܼq{uJc fYyM~%oXQDYJK6 O_#-+_$;=!&p")F60GKCMy0lp Ґ`ESǼ˲3<ơhlΠ.V)ekY3PoMm2"e eSk}j_iZG8X58:7&9xP:Kz욖軔5"sw_٦|QlFcyLXZiU {ƈ2:aT iI0sxPF vuͮ/@\,b&"4BwEt{,/)F|_q/B~t <0#`@ZwXjmWn?TQ~|@Q}ڰSs@B h Q>Q}NI_sz#]N^P̜oe) XqY]9]tKpG0RNU}$NՏ~iCv?2T@7S:lRs':7u\?ej=x*:1:|WSDd4)XVFU(\7vpCӠAɢe)W,:zzS;"mzؔ?o5jkזx_JQ7gf)e b$4NE},2jkJBp\Xԟ*?O MEwR2hI xo%ۈki2,UJA-k*xouR֐=ܜ Ӯ≮/U*oE.{-3qM ?O o#QSՐq/XM?Ļgӯ9kzׅ};FD#$65F޳H{{a g;4~}havݝ{}g_ٟHz "_Jb:OEAao&&{Mrجct UQFNEKF{j9ζshG6gKo۽{U|xāΏx$!-U]FT^Qd/Y0 8(Jçt8E.K'--+3[\#䰘8sip#kfqN N?0_ jF85_菧Tx|`ՊEh]iRArhA6eA,.Q~ [[k2" #Dфj@*ˬ6=B*H=R9,Y AvSc^p/f>.jNp;SwE\8!c넄a#J1i]W>w~^ź=]z19;mܪ.QQiVg74ͣy5[!@CA[@|/4DIӠLLɺ;<ĨDeIĝu1k̺e{a gun߯~U{F;6w~\S#~UZ՝!qrc Dyn/-yōُ0@2Ѡ+P/[Jv۶w/cS?_I}Xvowp K>3*+/5-\.E18D 2jG^BUȚ.7ZX:L?B^ƿgߘ񳚈ƲGqeb#ÃuP^~dHl-bXi>ҹl& #GÿQuѳ!R˄/.->pz맏ɓnB%,:ʓB[ 2͸3Df*ESaQ`!8FOxկ<os˴˰STct:. x{.; ZڄSvOMLް(#uoGʛJwO+_էZ:5R,Q <чhc=Ji!KH{rj.{R]=pBl:h*AC.I!""'ے1E'#y<ɛ]fht _w__75VfWJ:0#t?ڭ%?̆ʖ;:U9,=VayW)uCQh,UV 'aQ(2A*^ī]'bAq;aԥM ư!Xj"wUѐ柜^>w{lP55&Mެf%V8)y8Jd|9ELо+lV t"]pm&$ Cj+h4F"#pb<ׄ k<AdDg lJ:}4)c'o# ; AɀOh &mpO03L\Bƽ4jl%FpD9F & {ݳb7 03.Ue@.LOɑʎu߆B11ʬ$T'>Yro3ܗ#3*mƳH`*.;6mdwϜ[}gxAT7]n>O5nb|6uno&A@nK?(j+O o}$!!Ca53"b"F<,A^nC DaE |M^]‰GUyPثTXC}ߙss-)Kyrcf.\U9tsIm*gkɝw iE/q] wU_0_~ j`|ȗ#^Vm%oAo呲FrW9P@wq@>S+G`HCߖh7 ܉3p\ס6q(jAkdiZ-ʅc@\E zz "@$ pË,܍F@8 Ge1^q?Pp(Z׊.c% s< \t.E "\:("8Az p+3&OJzj#PU/PuUPBCd5P)vݙ?"w Ԧg)-Be/Yy &&Ib: q#,l 9KA/]Ȣ@Ƣ48w`ĜKYXJ'?_0vkkW@+|A)F;!u!ٽe'y DϡzU)tDŽ?wEFmGxW^bDb=-1fQ)8Uz..p0V;pr[h ՈzQ i{Iz/]s +'6Цx?/% endstream endobj 233 0 obj [ 0[ 634] 3[ 278 278 355 556] 9[ 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556] 36[ 667 667 722 722 667 611 778 722 278] 46[ 667 556 833 722 778 667] 53[ 722 667 611 722 667 944 667 667 611 278] 64[ 278] 66[ 556] 68[ 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334] 107[ 737] 112[ 737] 1685[ 222] 1688[ 333 333] ] endobj 234 0 obj [ 278 278 355 556 0 0 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 0 667 667 722 722 667 611 778 722 278 0 667 556 833 722 778 667 0 722 667 611 722 667 944 667 667 611 278 0 278 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 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 737 0 0 0 0 737] endobj 235 0 obj [ 278 0 0 0 0 0 726 0 333 334 389 0 278 325 278 278 556 556 556 556 556 0 556 0 556 0 333 0 0 0 0 0 0 721 719 715 723 667 613 0 0 277 0 0 613 833 722 778 659 0 708 672 612 722 667 945 670 667 0 333 0 333 0 557 0 558 613 556 611 579 332 611 610 277 0 558 278 890 610 611 613 611 387 556 332 610 556 778 554 555 489 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 737] endobj 236 0 obj <> stream x]j0 ~ CqK{cClJfXd8d/t0 }i'7'8-B'uyv2QiuN84UנE{r!{ayqBJP x5.ؾus|068ȆFTu%@*($Oߨ~_xX{,yJCT>?!oP endstream endobj 237 0 obj <> stream x\ \T?a :,( %0(03lQI_Vji5h&ʴ6J-Sxs }}|w9{@ Aܢ :i|hRqYrp):4(9tǏ Ҏ3r'4 Z9ᮄNl{֙o]\JsU #N!a~sbpVbJp:p7@ UW.0< Sc#,?2ܷaފZ낰75&Ӈg~uku ̜ʏPkV? Pu@S5>^⸚M(_5o7gl{d4y PI;Lo;="Guƈb(I3fY}p8k$ɞ9ÁcyT ӑAއ- RPH7J0i[tRʯ'=##]5)KzJ%oA#~'C 5Ƀ!7J;InYj⟂2 ^ug[?p?rD'RuGrgo 09!*A Έ."v+";p=< }W HA$^!01BxB!Q1 !Q j7HBb 1q/H@L$$HFLfxR 1R M< 鐎P0@`8#fB #a$bd?u0 qF Z'" ِ8 @s!1"q3'D|G'C#)0q*Li q:O z(A,RR3a=,0F#~s t:oʑփ*cJJBj#"E<`b Bx ̈f 97A=b=C X`El q4!6? ůa!Ûf[V[6``1bhFl%WRX #.+`%JX%~ nG8Ոk` ZCVV9w]H݈w#~"3" 7&Mp)܇#lFz3lAz lE ">!xaxc㈏6m <cO"$<4m&~mq'B >nxY؃a/^o<<<>x؏p"KpP!C2" !5x 7M70ax -xm8"0<" {>.|G> A7#cD<1c)|_ ~@|×H _!~逯'oO1÷w=p4A~߄33?1~A/p,߀spҿw "%DN'tADDq?쬔ӠՓOnI2bi-tpuQZtpW$? u8[R&*w5?OrAL A:{:xy8kOrkX$oWAvg;I45}PU_7\ b^a U[+ wp|}Cj~>`/A7U}rͫ|:8_!U}r)R8HI?۳O*w02@ @ܮ }JꝮ! b-l-bg:`~1UL!*_J77a  |}9҈j*_?{H\\C \;H'1p?Ps)?7wW1n)v߿ O 2p[WYUb_H2p=EJ2p?qrTQqoQ?['7l~?se7H 2Di^r ߮hg5w% h?3g&8Sf( sqxѣ9"sxMrRbB|\lLtTd:G]Ds2b ۹lY%SѶh0:k3EJyʃv69ƕђ%>iɢejgb)z|G؈Ei3K2m{+ijRt=i&2rz%aMU6ގʰA6jVqCLۈ}}siQ`I_y.ykBzuu5I/oFȽ MP* Bnho>dF8t`(86/>/Cm_.ۉgVCl_<6<>].2mJY[\-^\NDZD^ D\&,-G{90r6=QĺKNNEmeVme\`=E%'KmKɮڅ4 xn_o[T.mݎUVO[mȵiչB[~lun,+.i[5fu{ŭ3ܪB)cvGG,Xψkiqq-q-@[F3 ZҦ1sĹ( +2b32֠I<\soZMahu:2,_qG 1Ey\z${ܢ R !p*w]i/8y"D=7u.։َԇJW6jSVxk f9}GW QP JXZl4"I5yrҩyqy.n;esJ#Tq3 0`FtkjEmˆ܏A Gk$ђd:C'ϒvy|Kr0.rUrks/(>'JtAr&PrFrV%$NYb8R,׈xBз oՠVf &2xmG,/w(|} _ҷ8T?FI :28OdYK6ncej8+ns7sk&n/w;3!2 ~_o=^~3_pzIAӒW%KI5ґl}2OY,]V$kM.BDVi'I^/s%3w4K!8Yk~F {\דhfRIfA~"֑"~*"z$=:i -|'mjX&7("sY+ \d/bH;L~s_E w-/qǵU=19&uOc[`yIK22{L\~p_tztfs9q'GXuA}1j^#FpsTqČ Ux~FjCdr==JT\\'_:53@u>k3 Fguf;EV%KV Az%S=@\jr3)*vuQHҽVǫwtvtYgffKG MTL.*IdKĤlRə4iR@ŃIIIZ--x/uM;i8 K% MTf)')g+k7+ePR&w]$x+eJp<$H+dR4>JMyQI.r P<}-xztVVVf2M")~-V$̤')@҈yIն}՝Uo\JFɚߟN;C~0>&K>y~d:)<5-1.N P0ohRΙh$v"ߓR8*919*`x湰jfɧϞVu(fѓO>}ZL"*:ʾW60xRؗ0?奥dX$qCIX-3ٓ]߼\x{rx ?'Z}¡' (ݗ{MNJ]5귺>?c3, 1U,qVzw[ d)bۉ[Z\#;PUUꏪ3=hi&D+"#ã"]b"Yv"I7BsD$ S!zGz We1Y&7i=}EE XRA.)aU93+^7BȔͯ|9iic4ԼGg[RC3~]ɭtɃn޵2kUMm}T]:YwsO3o\dӵ\\̟\-ח[ps{u S=AsA9f;hI:R\s68h8h'rJ"RYi\v%RI`H-b1ZV0zO\:́tP:AKzՑi-U(v:h%vPA@+ʯt`˻Vґ$rMdK/]c:^H{mݫ`mkƲܫNh/:_DF̊^8/n2*uzM(6Mu&+STMuF$ꬺ?]S#`17TtQT[nF7[hݔ 3٨7YLBCUC~xh&drqX(^gn2Fc]0҈jd,6ZJSU#uXkFT lj,B15:!A4V5rŨ uzk]S`6 FkAjj zVdjuX`jMPsb}^I0yzbZ:}XFCՈJ yk5k5 J0Q4`%c`bm]}3%j5HNnllLu2 {I$Zk-s$Q [4jk`MzfW4Q@}$Ԁ5 gPt}AgEW-]SS\ot#U6kV+vWĴi}aE@:J:B}Z1כ*:)Mm@c5Vս$kAu CeMu5MB1V0Ԗ,c&-^AgZod~syڼ1Fj+ވVjLMnꘘPaj:Նs_& uMtBCO܈2\lơLPx(gʡ\CpS^V|Ab=T6~P=Xǧ.ƣ2'cO79o3C򍬆lT.rOC,DN 4`ojڄ:#c~SP (m=X^bUЀf\z(`GQ/EMW=;Wcj ^^#TmT2 LL7YeEJtjD .g#bekkM35O̙%՟֡VO`}w.gu >̩Àj֯9yٳZљv>LbZм[:J^$6mxlul{٥6c^/]48z22kY^BufZq]$Ȯ$챯_&9dIfkqdD+1hsHSz`(\Ti |o鬖2[ 9V3/1ߠ_YlhbY4cM{3lfUꐮ=5^#?p*{tH[{cf lC=4MJ g?5:45_T0==mSèO$]._+zְ=Y]7i=&v]l4ڿ] QXd]USx=Zx9~RZYt =O5[??$y[瘙˽w뫽, Ͽ/ptNw8 }8,IB$)|8uX[֡vei1?\@D&bo/^?i~H|_]|7Z9BR5N2iJA)eDB38"RI`Ȣ!'xMA[X50ˏ&Wgmc44͒f~#畆"qKyQWvk\{%ROȼE)^Qx)Yq3m5ե4n)*pZB9J/˻^G֔0M(-/ӃbbUWkdkB\Si25)C^Y]\5δK2y”hM=Rc4ӽznQWT0b4MvzbFJzzJFmhHO} m/nj&;vo'~/Xpӳsw+3^}b ƎkuzۄcVYcnY0W^s'Rr穗n|xCC&NiF/ʞz!sw;f[Xƚ^uNe /|e[ud{t/}5i蛍,TwYAoo}yY6sb0w0 ۧWp2Мs2XZig9a%NyrUYm~۳ >CnfqK}u E"n%E&P\J(›&_ v4\i-VMZq26O@@~!K'BeܯɲvZbDq©Pw2tb]RɃB8E6^IJ;D܆OeTc իjԫ;D *787Qf{7h@Mb->Ȃ+[=*wXb $ً$6NG w&se۞t;xh:MkyELun7" :8_J;w)WU=2#DpˡV\*sճ[&k(:*$|jgF;+;3P{ #);뺬9I]q--tHq2"u9|dODM4 ='e-*ςjٟWYh_b[È~Z!aU/1TK,W]S 儋}2Lq M{ߥ_? Z%_njG B˜9>\TWr5Ӕz4^g1'f#|<,huUj7ASM`4j}@cNCp2IϹcXՌvko4Ձ7fy_V9LE-.k̩ 08^GՈ_zjmz! (6u2lpwʆۦ?UJĥUWXsާV5滤&GT .$&NF0ـT@Jl!R;9O,~]>#bCIts;)U||h* D[uD(@@@^ D\<7$" H"' ߦ1K[mwv3cg-+0 ɉ> :[ɢv{ oIџq-(}\lțEzx6)C95@u|EalREiĪ੒ql( VJ &5+^4\w/Yfz :CHuk_k,EB|~<,%_DAXݖiz 몢O 6KWT .\JKפ\;3Ձ`^>6˽.CM}bSHEAbkLbλ{w(ɣ4([k5?L%q3*QagqxZ5fLԣJȲ/˓>!bl[}iPzH#v^MGy*4Qm6YO+"P wUg)np}:!w\6fQ:#Uh-yϱKNT~!g'&|\mjicÍx1<+J J -0W.jjU5Ws- թWϋ:P Аr0O1bI~D]ɉT+1ޢ{!pi{4g:1`)n#T `w`8/'?](?}el@A.MαsCFjWbBKCm 3t!w6yҩ2ۃz)r*]۔ڇxJ{-H~x̴.㒼ĀzP5>GJm sJ`R0ToxހiaۏԒE,Z%H1h&Ѩ*[Xbe0J99YhZV)-TQ)SP!(қڪjʺAɱ3v,;X$ "a8-k$ 6D.t.1?)wϚ*!#+0>  ¦ˌƒن$X1][m=\[]nk=a-Z g]pkn)'&"Ed2?i$Y]Ib)Lm5.DDPܐ]E ܨ` ?rt5f =VL0 ˡ"|]_6ɈXsȯ:Ylak^B mo\߆xmlzo endstream endobj 238 0 obj [ 0[ 600] 120[ 460] ] endobj 239 0 obj [ 278] endobj 240 0 obj [ 278 0 0 0 0 0 0 0 0 0 389 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 0 556 0 0 0 0 0 0 0 889 611 611 0 0 389 556 333 611] endobj 241 0 obj <> stream x}Sˊ095q| x8 k 9( Uc&yvDFԴ0O^ãQVԷJf"6a:Eu|5>;).BtDF*"ގY䬌 g>,('4ֻuo+6l–b kFvrl{QҴ,TU#Z2AgIayJ4!ΡGRlpóy^.QvNvU7vxRCHX.;;tɰ> stream x} |T{f7MvGry}C6&! KyB,l7Q RTVKkۏ5XU~GmmVPiBAmwfv7$@{{s̙3gfsڶ;b@j՘xWk[2A즅ܓ%@pE3n|[M_6gaӎm raxk]!&\=^;ϛokEEk8`K&Ӂ:68EXw{m|٧?ʺQxX@FˇN~]* y:_Ύo֫y횎{rH )(~8ocmmǚ.̱`?dCoh3Ծg}Wϊl-H똏]ټyD-6 {%Zޱb,pl3sM:+;87QG` $lǁ ܃rX M /rFN!Pv; +M`;.ݴXxM-<†0.[BP^^ g}i_|\x[ :H ͟h5p~AVM(\ti~]` {A` kh 33E~,Pn*,8ˮu =pޙvܛ'C6(GliX?ᣁ* *|R3{ *|;?M{MHXQO|RATPATPAT&1G?¥Rh &VDm/Y`C=ag3JTPATPATPATπs}p⃈[?N3N?mڢ듀)8 .>N;Q? ϴ: W=/*hя>蝠OV Cٌk||Qi@n>4'b5;ˮwoP;δ=xO;@s-\j2'3X?Qˠ,>(n&'}9 xfgTl@<TPATPATPATPAo#f}PATPATPATPATPATPATPATPATPAT,ASڪy'=TP "A| Ky bY`G)xH\ȧ{پξ1=-bEΘ]7ڭ٥ o F:C_=2H2@;?vqtM/Hvr4j`FBzX y һH_)Bz 7!=(C6 _g@LH%z }8 + -z!#VA,&@]b-}Ol;$흴0qc&,Fa?j ] Gٯ/C\c|Ya|~MnFG4Aĵ q=[J;FCHU{98ua$;o #Fׅ!h% < y+CV#_/GDyCжxnX璵kV_jeE+˗]%}Z.h?qnÜ5UʊY3JK\E΂ir^nNvVfO2yjZ)I&cBAh#OlnZW Rd+';HRMX)YF%}>%F>dgu`N2#(9-8V6JZM!*\&~ ?s;Ԅz4(Nq(Z9*CҮL}s @ha. AӀ!V0,MDAs:A8@S>IY.K^9:0854R}#zi imvOx4ifD6xYҾ}#\7ui˴R%-izjً}V` V"t@֙e9$kQku/la<2 @xuX0T56'la!72O->1s' -n?`(ZTS;֍ . (ަ}A*XN8ZKT_Ia} kj<_x%b}=(k\(# 0:X@ǂ-8TjcyZfXg6tqnGTmtLE}<j um(O1g Pൣ;S. ŏ%[Oӫ x?cPc:'Чn8a<8lIo7Q+PFd}\d΃T.X+SG!]4e\5—4^J3Xlc7!F}o vb2ғVw tBGt:J_#E'r+u;)<|ǠҤz]{rgR8tBd# JAz4FYt(O,ut];&IL6/;)dK2F"1x(/D<Ϗwl;Dhɇ†0)hK5s61v5a; eNG~vrŬbvkH ]p3԰[%2֦eNF!AT8NFQQxT8ގ GQZT8GϢ QṨlT ިpcTQakT6G%QaqTE¼FPQaZTȏ QA4c]Fa$'=1Fb(o0:G-0+F_dtC>ӌ>蓌>c3(?bg^Fat/;vF1dˌ3z+Xi#2z mf9V3@SNJą/A܈x#݈E|1oSa܄QAF|0IDzuWzuWzuWzuWzuWJкKкKкK@J* DH"V".C[kDh#n?:ɏ0CχN8!=yÈ'LA8G8FU;0qhmDznhYOYX% ZVA2;a*q!2x w:@rS_ʗ} ɚ$/ArZxڍz/M1Oh+tu]R7XIu\ZU#r0 i>۹;=`vp;mv0qJHF!^ĶwA|Mn`>TJ%븫AZJ|k"J|wqjd~zEGzvkQ/P\ت*n"އCf%^AMD] ~#r:" \ l,*&\f3wpF>H6WƪT҆ml&[lANDN7ȕUyb?Cې@ Е)0gKs? /? {rS큧VƟh2nIcңӊMfQcu|-86Sy &~wC?~Of[\jN*1]fC9Shf(0h?UxN6 1]JȐS&اAcpY zOvo4%b ^>0'hēb&w=yq&̌Kb/ۍ/ 7(6mZdOR❧.9u;SSO):O9"z$zo?Sx{<9,O'cLI=j#JR#4U+ykx{R,7*MKCmݦ[uMIY}~ &8(>Y\[>7݄24*͊(U Fވ 1ɪS::2 Vc|ϱ~*:륚 abN8bڜ5ިbS*q 4 t-ZjT-ʔ%~%MnTRY%AFK?n ѱp YB|x A3ID,!Ľ7"D "nE܂q bDb;bb|0{f14"}gFZ-?NF4>oȇh!iEp3V. K%Fs 6>Pm}Lj~:1J`-p;+qtBf۰W-:n'p5|Gp܆;qM&?x}| .d! [ DVx)gyy`@%>@[ JI<5< |{{Hxx(qIrcha_ǂ-iHcl1lwʝXڋ;h7|s[K}8.$W$ 00Շ^~GFwɿkMxV¿8퇯k^4F -ܧF^_Azm75C<4ZId_<ËB b4#oB| z?a-4 M6']]b]XM"y.6lϽx6} ٬iȇB(FoYE%}~PZr+)99f+(r؉߼4RDn'i42~dQ!)-W%YRzJ\S8s xjJI#"7=ƒaUŒX5|{Ytr{%34;rK-)SR0UU1~#?;gRگ} Y!s=>G_n,I&IMuěogB[Vw/)sb-哒D?Ov'VV.2+1mC}QM=E=ذUJd оG02)S8QZ&$M,I\vGL|~Uk-]7$n)Qt_ȋf.\OZ4zûk*2lfq7)uO-*S|G]d/ŏv dnH(bQ,Hd25])Nw,S򹻼SMژ}ZБt^ŘJRy 2#.jMGivas^Z/¶J(_I]:VIY%4,V /ǘS, xkݙ1)r1Xt'^Np86ɟQ>CL*J$Ŗϕ jrR%q559޾h6:Bo~SFnj EsJx͈DÛp\B PbJܜ}If;O՘ʧ-71l vLd~S>Bo|X©WTH=Do s\j&^W8Z*s4Z $M96|pTakyU)왣e[Ņsm6%W2DZ᧒n9R25$G9jgdQmIuLkAS 1˖b,͸TK}vڵ%..ҸNwF/pb ?ݐ]'.zWp!3ozӲT-vWrqҌ2{N۪%k+}^W}RnRcUDΟv))/\j<\iYs״\OފSaҕ9yԓB A &3t)}_m+杅}B#$yBRalalfR;ӉsKrW })mNp[;8llGAnee|0helm ]dz2ϞAL7gY ϽQ {tmkBw$&g:JO{%uU+DmQ;{ttXTWbJ})KU t‘ O٤,[ &襌0z0BoK9_i(֤k꽂+LbmVV^b=ׂ){|,x]1g!L#y%pRTuTZ/o={,3  #(nh4B5*x!F##I.,&ciĠDTzo;g~$91;L{z@]NIG&H4v3V54h2Q;ǤL(\Ĩ5uD=tc5/}lu ɏ=(-~9*۱Nw2Ҩ߃7%A7iL|.iϬSyU$a֛I%)5PKjPXC3:PUhR NUE|E^KipҨ4*hJcj"DQ|R_ ֳM !(Qp&bp/5HGר\]oro~l 8Hďoy A@|+C=@?uP9T9C8AXfIF:V0mUF4q'=ϸz؋.0bPEG!r_HbbE$D ~]'X۪:'ԂZVzqגG,_("LPcDjU!' zdNO7ȉZɭfulr^~$!W+mUeRI,>ǽ}Ld fK?m Iȗ$o6c DIHCRX\3tX|ԩ!H\m8qB81^!4D.B.G0>#p 6@H򭰓e _ jGCCk.q\VzM=_,͚&O 0ևIS4Bj@ ʾHs;rؚ Qyb.ku| 3,-Ӊ#JS27gKg,ҷp%+5ΙȘ}Uy\=8'ndLEhNTӳ#3ý|Wk=Һ[6G|D:dfe8awէθF_;UҌX f'lRpp4q27vi4̿ 9cS XBAm(0EAgo#.8=w'fq\{O+/~fͩ}?NTU/%ŀBu: _ޭR5"M%eB1,Z Q˻uZJJ#HkVYFYŨ`d,8PP_q,M*b)+A=C/enp,>o@P?䯃5!U.GbP+E#j 7}q X'(U>%ӫRf̃Juz$dzIzF0JJVAR*VJ8ާ3ʄDsISl:i^rL|K& :?ṽ#NEq2H^."LN;ÆC!PM67 P%OW|/Mm; Z6Ӗ4L/X=`hmUI!y!q.4]'6)M333CC!l 2Wӳj؞-C\ 9 c{s^EF9N%'f.]_cr1_pA sC>pݑ{@"`(?L{(M Ϋa%zS 8_k^0r$ŷ y\qFſF,=О?fe:4Sm E44_*̑4{x6ld{DY`ICVЎB0ԈƞI!n،j:3Ɲzj'lBsy1\ԡOi5~@|sX!,Ʀ DqĎfdm,J2C2YTLpP4j"GˆkA #>Uv%#C \1rcz Dբ&c/H,ѓEaSB⟧O|u21E}o>̒F҈5^+h|j2(;"X(D1#" lon ]!+k}rRHSeãtzb5?'&q^lw:\nlt5}c h6WHmaӕFǼ7ig`2)/D*s0P`/ cy&ZI;IÄNtsskO,6j%i I#>;:wxd^F*8{Kdp9jFtZh0:Jm<ϳq*!-jEZZe4m 0XUȨX#CA yS@IIPƳ"aPp1ZXb(#z'E[nO*ޕ #Lt|=6?xq{i X,MQU(1 XҚ=W,T4hRlY^ GltZg7.EӔ1Cf!_D|G0j5 $LmM$4٫1*ɤ4@Mi(`EIU$5I- !O*U1xDLHN1&#xP)7gNɋGe_{@PH@Ry?sGn#nؗ9 9&)T_LOrmnAiFc"jY[ZX?xГ;NIOA;,D8{6ua U-$ԑ@Gzb"R$gmԐfľn,K+7"Aǣ Y)V7'#fV2r~QFRgrfT4C[VR{#y^ڑN'gHsḙt- s9*>w)5ցIYtJT}/(4ϣQ>F%V&#QP*V(吵PrhTۛog5KZz ?zjRVG:+7=䆋b\W9CR;umOlz s[z?ge׼r7B&†dϣU۬׫bD򗧄/!*i鳘I$;<,_a&Ռw w~;uxf_KGv^{CO]i& *uuOl*'`MweپVlkQtX!"XNghuHf S| IQ6FZMR;,aYy!z3&lU8-׶:[͝DGT@U kV}]֕n}~~GS|W&Q ag`N=x@?豈$Ae%[SϨ>@BW00Z.oWkӢg j* ?|9ϟ՞uyXl\2wN]ModRaY{b3}dkV]9u|)7ՙ|%Zwf+7ٙ= y83o齣E:џ\9[mFCu y&L' ƓJ3NїLv#p(9"\ӣy(x,9;?3 e$ q2m%l{l4I(Xu $E>2`h[! 6-_J5ڤ{-BЬ1(k{J IgE+.[o)LZAЙoWc#v#"Kt336?oWq{GlҺ?N)w)&/RzBM)(:y=zA<ҕ4⥅p}S'nQDQPe<3%IRJ'N66Vn68o`n}c|m].75]M#-w=՛[uGLtd{f R01 RgD;o__ubCf+~5ꚟľ?Ef"G()['Jk#ɉbqqM}IR𗱩 }I&`~ ZY;.ث)0$3߹Z Y'DO!?O۲I/l@r]IνV!`!O0[Aᒯ@mfXk0PG 3gɩhWP y IZ x4N7f ۫GȺS[)cb?+k$U\ ^=$7ڿ_Bx-3vdڄA+`#y'$Q!fhEW&ʼf?vHR2Aplv9| wF7"nգ՟/;%;rLk>'8V{ZؓL`n@mu[W=Mu OENJ7,Ia\ MTvENAESH ;񹐍0A!QQ ;NqbBWb ^`g0)9"9swSHmQ.lv,g,gS9rg@LqHɭ>/G(.S3JY`Bq`s~=谡"XNzV%g;e`}-G6"0LB_{2kKVnZ{՞kV$^X#~妑`g߼d-jty:\}P#1[؇8T˶.BV}6|? ڈ# #Q'%(ySM %DٱcݪM5.Q`{q+9~ 9%cf3gLm3).$|!z3( e\#6e( 7̴I{̆7ِ;%XL9Nj=%2ٜpcIڀ0xj"`nsŽU* =N% N4&/B9832vu+I||_3in`K/ ںYT(HͭW,k U\(hoNKyi r9»GRQo 'k@Z֩S}^8,9(9TL瀻@QԌ&گL @YU<#:@ !fح#qJ#0 4aii Mw-GĢ68rx?`\Jt$IQ`aj8CLr(y֋('Љ-عJdt f\vU}L[mI*SߝmT_cM݂XR&$b}1{ #]8hdܾb( Xa)!BfP.< R~X$E~钥oXyӽ3nȏ٬Qy`<YA-ϘrpGm>Yñ߽u1uY&nsEZ7|gj`WaѺ;\nstP^P#$Dt6}!K4k1%-ҊWK6!$/aB6+-/xUˏ.ݲ[f{5ƌWO>W9Cw/klL|!t[6ֺڀVʨl^\2Wt^kVjn'rx }z 2R.z9o A#Ïk`pXZX ^fצ A<-zxC+f,2\f5G;i/2:RƗɋBOCD,VxEfo¯΂ onŦE7bK72J&rnOhD |eWc5Hs: gG V Sٰ3MsTK0'+V6|.S)zy3H+p/er1FJ3gz~U;1g ~?mZye[[ >acΟ>N !U"M&QsSdʠ/#M!ҥCU79IJËdWM-_vz-J@d;(gFH:M@3MH_xmhOѷlo#Y_DfSJAqϦnۊi0abhF>i3M8̈EZ>MjIZYm'Sx ֑Rs[qP3 ʈcF*TSVa52rn]*3Gmq%+K_oZ+˷  \7wI-ٵz#NO*Yeh|@ L+kVF N|#:8&*4l*}Q r23UAϡ 5aڣHG|̿a^QN'HӤmPUvi=rZ8맏!L۩'?>Ӡɰ ,Dy[Y,\q`3g8d"A@c2i:oLښۃAlUjvYԉKJ9%ά-Ln;Zs79٧``ꀿDWj} \SG͛@H/D@AED"JIQkXZm۵v>kۭbjݮ?ݶ.nֲnb{]ɹ3gΝs3w.Φt9'ĦS£j? ϓ"?_sXл?<,)!ȋc _dO 6 8{ LYB: آۖN)..j)V};DT"N8ض\Y4lw` e}5VUI?ATdetH t+tyE:}r<;ߙixeW¸А#JjCRjY5SPkUe=ٵvXWQi^*/\( "τX>J`lwNSG& ' C_<)DXbVK}_8ПL'T<106Zcndo &mAk 9Yj:l^RjEoX[s|Dd k&gY/^֖ڼUT<:N8@ah>K@t8T<( !a(X]* RSӽ6YsYwŢ\ltNߨ7.fjEXdXWG ၮ1\e2ߑX\ƚաxF(H+%0fBhGqUŽZ4~Ogt6}Uq>d_Zaq,Gۣ[ +K딪hH^=ch: 8{&,NN/$26:78pþ螂'v~!`T;{8Q0;|tk9ya6NcL3Q+\"όKX6uRD}Y$+GҲ3cǬ{vfȟF$$4; "I|l[f4UBH]8tXN܋ TxU=V 1++kc̮02 E ] f.ƙE}Kj EB*43/ktÂcbPafa!+ug[?g;d!C! veH6d-U#&b^&P컊T $E1Ƹ¢"afY;]eELvo[0- s *~-!$HٟvKf-nm}7x>-$MKl'U/x,H^0ޱŦgϴ0L۸p_-xȂ[)QS*&h)Y&rb #vfNEi(yĩHC!6jp<&gAE=Kbr;A6{WҌ,􋚥nl#"bAdLkRJQ5+  _Qj]8437,!FP[gM%ԐȺ f_  39H>qD'q9E-QgtҠ/H1mZNyrTpSMzpvn^╯̉#,(&dh~YY&DFLOKK"!0TT1*K,U4R=mA#Ytih|r~axz\+MI!>i +5TΝS(Z`1ۭZk;lⵠS쩫A|LP@P``XTNmb %%nqrPq^,G* U՗-1!➒y3'VXY=.fx㌑zWWaذ9m:#?gIb?g:MA &* RSGx5Hg.**E_ʤRQ_NMhXh ACt5 6^1rr\r6^?.sbޤ{ek*'=/%gU/|LL]X1gbČd^V:*7=g@1fj]IsjTY*ƇJ !!]' Q6ފڲyrtJfeհŽ }mUk4ҭR `}vsv`po 컰9$Ɏ0ٷ 񤍷 eķjFk5Mp^)>) (PW_0GЫlB?Ny+{ ls~jaj"Jo"HSSĵЁӣ"~V =>I>Yc(F/)Ÿ# >rM_/`*La3&b]N18~ȵ7| 7`5o+y)FdFD0!GǸN> d2]?q=94m^*ed/>h XpӃæO[#N[ tqj4$$` ' %鿖?*_!/)~xyAPr\z "LA6PXڍŁ}A;~U2?E1 8??~`,'J8κWU ~~/Ë!75nCf{8ņ5xpCcnDD<qGd?gHyT Oޯ==e8ČyЃ?sݣ{֍CW }G3AP/,,???;ް~~~~ǿã~{A7Ӕ]ZN 5lAk/Ak='B:z P ʭT3y( Dfz%W5xp dxE(}Ũ=2<-E<-˄yZ.{Ϙ1AB( yAbL0E.O^fJ%6B[oscgm; J:2SPZ};5&.Nz?tVKS >^ebKN+n+-utt!f>%34ۤ#[o476it.|/޳ xpb:jHhZ #'= 4aY(eFn˻ QQ;<>EϝR\ @mv*^utdPI:|{.ΜƋ5U|f:7gqPՔGfgȚFR ?CP9Jrn{=$ƌTz?bkW. m\v帹<[s8&bVT QRCrkъs2%D_׈[蜵KtPU1.8D$j:Zct;|q-IJf*: l i sB6!cLg3QOHa0ޖr4n=gYg2xe'k{dsDhZr-dHJ2g*:+\v|NGL{28R x hj 'L{s@] su7Jehέ35SHpGw֨¯+H>6z.n9?2tǁ\9rc7s*('&Ob'C<=!\ d(D?q-t@Mxm=YL4Bt^륷-u?$R:K{^9ZWb[ZjYjIM4uvS]ӡF{&Ú+44UM]Y_fk6svt复7V7ɡ3vC`oYkuzf6 ёVbXm6nZd,5rݪ+V^op誌F0Y5Z]g:n4Ը%8:ڨZktj,NcpMaZMsR-F{-fsPg̴j7f`ES-v# vn1tjKF]nZb8;7("Sd8Fah0]`tk:I'ka4a2&.m6HΎ av#(HjWF]unv¤sCli6M@ H, Lv`KdWL ֤`nɠ撉rf?522/:+Wg9R踨a쩞AyfQom6א8ĝvcMs5/ 줆1#$8u ݡA&ԡV7SMh7;V#ˀ?[Mz੃MRG\dTC}[S̏d xn#m.l0y326TBOb! 4Hq19:H p[926L$L6U(N[^zzkkkZ; ӁZg7ҫ/VzMr(`3-4|k3L2&C68)f6B E] l29I\Wq m!&jRLI)a$A}0luZTf[-sUv}4i:aJ(p߀Q^XjD 88Lhl5Z;;QJd$#Q6_’`iɄb7U`wtkp4öiUP?"?VDǿsR56 n[~_[ d-RI;?8-Z [^wJy#APZ2Q'nv+<='v;ZԩmSgUy u}6rl;ܹ 6ܥ w r 4+KnMAd[rrW w7} r_c j,P_K^rc@x{?ȵߚ- w'}^ܛ{0Vc*@l7)>iF'R%K/:uuIzz}HD⳴^"֩uH$Pӕ^rd)\vtQ:} A;vK;vXT*]ÊPB%gDSf>C"KSN%bMPvu:bNy5&M {>hB=x}@aS?ITb,eoWHJ -A+"Y?ܺX$(Gɰ,.C{E1.$,l|6]dgAU|> ̣G,Abɇ\X"#ԳX JW*;{b$gJ.7;:}MޚDTSA4b@E ģNI er,STv&`=r1KAc6\CtR'ޮ3q \U3w$7Nՙ tfɠ;CDiwQX.(M" tpPK.@ھq9|R\BKx'JX+-T-_Y(B*JH1;PDҷ 1iU3r98{=dXFMlpD)^6FQ QQUXɷrx[)S |+bxl ۃ:44z X.|kWX!Dܠ^{T^ 2dٻzk7{B\*ke!-LBYBB`yBР "Q:!<#K@1iW+ :[|I85`VHJ^NeeF8Kkہ >A@C=M0Gc ^K% \khB?_@ ~q}H@} _ůk:Gpo@wc@6>;$Ч@g~7}<пg7?苸菙3k5HeOdGTit$dfcCv7ٗ>k_g_{?S!<UvZ$PuVǨMHnBX+ MA$<D!H0$3 3.Zɿ #d/},ɀ  X M%[@K2`w> d>d}$6σ%Xmx!g=nb0~A:؍#g2/; V[@<ۑo}""7p6-C b QPd5d42 j&e|=[VCFuiIars@S0t*-YCieu(`xiRb{F݂r-7r-峴C˽&:D+đ,rZR| e4-iE|ZNe)ؓ C it!ASh ՠ+h5FBisr=^BG"8 3BlF~ V3u{ Pr i;DE7~vʃ\#) ]O𨅾SB|gV^yڔu-D^)_=|_EdmmyooȔ><ַ}IvY$e"ČFRu&tz5y$  |%7O5\* jj:wN.zpJ HV*#A/N;yK|%lvvqKQ~< nK5;_5r;vw#A6qr37 a .#[wF*<Tݒ#H҉3I.u$/YLMOJ: wA]ގ>熒dS@_\#)JKZ礗rE2wN&T ߿Gr)D)?Ҁʧ*?1<|}E?좖꣤bg5~i M;_)PPPP`iXհa[coWuiZV4~eFX 3Zl fd]nYۆnګ6Gm;tRjk]Һ-i `I/I5,zwy9 ~ dk|&1ui7]4m%vK':y O~S 9߃fW>zeUȧv,OwNlC1nc*rhcK:X ?y59ɇ۴|#~D˪Gkx<\/o;deҎm/A9?29Ov䛓$Ҽe~ %;>!li-O=#W=ze~=z.kB.,wqgoj ±qg.g7~v_>~4~߁=`q_pV Y(KXm(Ƿ5_o X([^ҳu ]gDѱW=ks@0-R`unݰnO隓kq8O"_P+x ~u.=d'iS\?g,}˝;yy絝7~<&8dk?oݲ˼k9A9s-4vbtsCָ;|ϗ O_~iΚK%` jЀj>%xY<W?*܄[ -^Wa~ K. ]]R jkvէvOOV_vjՍZTݬ}S_ѾbZVA&j]5u!TћԏuSSݥzGwTsZbӇ鷫{#}zRߡPO5Ǫ55T{}۟\۵.msA/Tm&;&:&k9i;f8fh9f;fk sb#bıQ-v?qRԱıD[XЖ:u ]Ȱ6}h ! hkKF}8O_n2+F??k\m\Wka6ca*c1KxxT(1J%3c\e2_ ^khlԿ16U~s+^o7CƏOa㸳yiJ; NyoJ_ϥ ppSt NyukxJ5+e )oNyݔ)oBmO];S>tvI p}kׁ:׉)ߙ)fjfSiʏfsuJ0)GMNloO9afR~13) ̾6mM++m浶fyallkk0o34G:c̱NxsY`Nu7 m%fc.6.5+mf|Ζe3ۮ6_0_ 67UWWm7ۆ[-=3hjo~hf0klamgf6Ҍ{mw1mYgWoq}m{6THw==6˝od{=}mAZMZᴝil}vVv4mo-UZ(;GM %+2Ƥ_9o\n )'+lE3?+%)UU υg+GslZu~K%#J3GYGכ m' J,›Ex_ 5V6D}C ݴick~yko_?3R&zLshs^sOӕ1f9܌S-=_.1I%>BR҄;Doݛ9caϽ,'D0{>()Tӡw3a,'"W(S_Wp $3fnҘe;2(S?&6 `2}PS`*LP3`&^)30M4b YK}r}/FK2laf}2heD:B3h-%8r~!!K!}0[l9}><$:Ȱc uK9^eVjꟄ?i79~ {o#Cԅ)qP@ tHam @SW4ZY2"ZJ&ڀCE`lY+ޅjNgp@:ΏR34ReXXAoRce `6s`.,70_J軈Ų<.&CWRZ&&A h 58Hc7C\jߠ5J:̀:Ag]e s \HEp1K0Wp \p=C M0 Na ]0[;N0 `2}PS`*LP̀0 f3Ns`.@S(;B' ]+ts;d¹`'o[hc2؋Z< bx Rx:RXeVJX|Ui@UPTUi@UPTeU`Ey{ w=u#Aǁrd7 PT%q̀0&40ŲƱX1x'(wrX+i[}5P kyXO6peOk] 帚wmhc?O>]ݰ>/ {+5|~>p~CpQ8S e*Z֡uh*AE#h h*ڀ6 h h8[.vp BaҸ_[h3xˠZYr.ĊіvpF?m<3 KVѕ2x폔$:^AY$ }ȁ(ρҶyx>m)A2Iy rH.f+u\dVO*c̵x}me 6ηs)}nJ3^/ː{u:g=BJj\=>cboǯe4f 2Zʼn:o1-lMIDM_ߝ옕I-^c d5Z5|=< a>B(,%J(bx RP%Qyp8~~_7~I8UUHĝ xsO|u&[yg{D\.QlgDG̱`(!cm9;ǟgF(w({K QW˽g;{w??!8 G( p s ujy8T%ZZ8>%PJX yX>}r-_!e3_"qPN9o'MZ l+2- oVxށw,އ`lt x;';Gx}'̕}D8{s橑_G:YzDi|P?XC,q\Ww\ ! /0^\{-^J<#nn90na7;nKmpɵdcwXE9@Dd)0>;c\G~oTyٲ>TA\ʑ, Q'DYQQVTeD(eVJhwA4ehr'+RZG=Ct(BXO@XO؀&EФw\YOZUm< (q3 1u$mR0TeHG a4c"!@$9se"@TtүdrC%'ǽrq_Q2/p 0?cdsd07F07߀1n[a#ȃ;3Fsh]00 `2}|̧1fl~ ~x@F /̧Ax߰=| XuBWB"XLcYBRXeY)(0Yyܭa S46T顮QRʼni#\#/n/CJ::B' ]+tsBk ]0q)*LPsfLDB+sa%ќXѪ-gj WZdYi+MC (5tR%{j8AHp<$ʩPDY Y#k8qY7p k/{#(,X1xJ DCى^ctx9 ds,JX)}m ;{kS82(PARȫl MHbay@A pq`BqR sRQӻ};E0{Ve߬rV`9+0/+ӫ/N8 ^ JيqR`C"NUvQ*+Md :q\;[Ζ\s}ZQך>mr9wGǠS8]^gvdsӞA[(-g'tOtin;~;ѯ'z,./p~_F ~%i9WA+\#}ks}>7pݍ>r8o~YV9o[a˥6Nq(1O7~s7}h/}2p{i'gq8Y,Ο#p~8c ~$)] ܻ{s9 4f aJ4Y."g|L95Kfgus3{3>g,qs\Jkr>E2sm)O1S>ŸO>TQ~?Gw~P~?G+Qu ED~ۏzQo?G~Ի.FQ&#(p% \؏Q`? \Q`? A(p1 G+Q`? \]6@aPFA-j[Z6FPjFbY,f[QR̋&լ5f~̏Q(jEV̋f5 f1,TY)jErQjCbY jVyQjVPjC|Y jVyQL,fA,EQ Ԭ5fY&jBbY 5f%Y)jE2QjCb5+AJQ3/jEPB,PjVf^,Uf%5+EͼΡ(M\3 %guKw;FDw/G[Fs?SQ Ԭ5fI5 f1,P Ԭ5fQ?FQ(JE ([Q/R(~%PXRQ((EEQ(JE((J EQ QL%PCQJPRŋd(A%DQ E(IE (1%P E((J%b(+UN@>;Lw#qC)zqX˖dK.b79Ro)ݔb8'K_7qdSUNLU.q6fJOgs-ӊ֜;uJAɚr:Ź n(R7 :@':Svʵ(ϡO&}ΥЧ7m}8Rw Rv r mYWqAL_ꮥ2a9C&a̵P+Rw#se}Fg4c.R>iD(n2=ʈk\EJO ʙhC\y)S>HQRP.1Prem+h[*XMݓOQ>M3=n-:gekHeODDZ=a1"tu$:H(EiEZHi"DZ?0O"-(Һ#-(ҺIH i$!ލ"-"-LuH H i$.&:pJ~D"Ξ@^SZj).blX¹ŭݱ-;H%@Swgo™ƍ픿;#8'H:p>1.lmp0O~Gq 7g7#8n6rNnhIi86r،qa+qXo#a8g6r 5pH#7&~A14V⠅ 9\sfq9+qNo#98q5Ky.m܇/~N Ի}DrnED[s78u#\"6v~$9/E4Dh$=Dc68hL4"\ Os:Ztj7јK>C>CT"*\Ki_e [IUŹ'ƧJT%s\.Y@tDg%l "kI+#LyQ"ȋyN5KhU-N싴J|=Z",JUQ)J40EhR'Z"DK EhP&BhO)""DD͉9EDُ3lϬGј(E_?3fn-bff 3f,``ً2{E (JF-3N|IdafY2KEL D(`6F}E~3~/`Ìxю*0]F|.#^͈W}{_uo1u/J{뾢Ѻe&뾊uc{YMucqf)+;ܝ}Z0sY\jrw*;;U`&|frprw*5;cf5Wafuc |%bSS٬{Ǻ1Ef?uKL>Yݬ"!ucX>KTs|}뾂u_Ax""%H"Rڰ}{Gx"}.pǺhs亯bXF"r>3T |kprg(53c"-7!ڲT}뾂u_Ay""/"ڰ}{Gz"}. ؤ&%=@wSV*cԜJ(JlRbuV:) J\JK)J %6)ٺ@+i)1?YZu'I}[}%^ܺﵔ}ZlPA%.ĥ{{J|lz۴LIiwx280l:'~?A1f[=fPSڷ yډNG~R{YaO{Rګz M[kڻe=hL ?c/". _ŏ(|, d`vE#I&}9l+ XWa=:x oc/ yD[b+lm-&ZN';HڤepXZ0my2mQn 8p壝 Xhb4<+ ՞mM^sg=?I^᥎2c̕N]nMjm} fN|.'˒#Ieh"z'Assy=kk0˸8P܌[p+nWoawq'm3|״_}?a(اZa0/ ?E O3G(9_`>%W5@B$1gPóx"`)x Or4#x+LzS^oMy)7ޔכzS^oMy)7ޔכzS^oMy)7ޔכzS^oMy)7|t>,'$ N*18xq)8t8glHh}7FT\p.W=ot/87{cܳD|J<`X?O{=[ѯWi&{i&{i&{i&{i&{i&{i&{mԸ_6Ӯ{ϧ“9ǥ{6Ǹ6/-KKQKXOѶz'Hmo&KxpI$ Q.nRvkmw1+٠qՍ+^-$Gɞ=-YǪ|lmlg5~V/u?g"|631 y+p^َ5oGe@Xf܂[u-]AU[U'ܫX˿οοοοοοοοοοοοնZħE|jZħE|jQ cx 7XbSI?S?S?S?S?S?S?S?S?S?S?S-.7c{|;;ag0Ё]0 Cݰ;>N=|{ao}1t8b !88Ga*N||||` )cDX"Y,,H5)&=HmɫBFQanukFݚQfԭqopopopopopopopopopopopopopopop7qZQ=:c_[i&=Y?˳iJRvzڶ4eX_6X֥NӮԶ3rS\`p8XEB+mJh{rtVݝthtrx#=s'qIdFxugx~:δ,Fǟgc|.wnIlqk^/ev \iU/jZeHUܮ>z’7jA숝3 vD.]!LnF'>7qO`Eb Fx$>ep#=>J;G'FA#Ġb1h4B !ۜiAD%wI]qD%wI]qD%wI]qtL[s3';shq3ךƵ5dCP;K+'! =a0]o-oO^[ ~ OG*2=y^yޞU>]uq*Jpgre|"o$Vx_ef|R,*cݹ0{ WB:q+t\ WB:q+t\ WB:q+t\ WB:quFt+w]B,Wl7V5,[vѭbtV1~=^ڏilC4٪yG>RQiX5[Bxvv.+pWi^M7٦d͸&òw3l6 }e] aٞNGw}ON>}G{}}4G}4lj90'Üx.90'krrMN59&'䚜\krrMN59&'䚜, *b-^kXxo- H(@BV`[LvAA.9 G] rtA.9 G] rtA.9 G] rtA.9 G] rtA.9 G] rtA.P | rtA.P rtKsa.9%0\rX.х蚠3* |o~/Õ zZRvn.JYKWtnCCyH?!rNY)9e9,2,9e9,甹fkfY)9e9,圲Ss,圲SejBm?3*!c~Sxx5<<^/b r4#x+aTUX5Zװ1[x$T6a l5CSxh?vl#:qtx>`ztnŝ:ʸ'-n7zܹf,[QI^ k5Ϗlmpz6S;eT[[^sJ1uթk"Ok?(<61/>iL]1uSWL]1uSWL]1uSWL]1uSWL]1uSWL]1uSWz;K;KV,Q\J7KW%+Q_L}1S_L}1͘o|31ߌf7c͘o|31ߌf7cSoL1SoL1SoL1SoL1[V TeL-<9N5斌%cnɘ[2ږcֻ.GL %P L>[OgL'ȷ_ٸ_u7F܄f܂[q?# 1ğ!c~Hi ,xb/.w<Xt[uʦyII]T8M8C;ݺ3Y㵊ԪUN*RH"*RH"*RH"*RH"*RH"*RH"ԪS:ժS:ժS:ժSg|5 B'\x4w "L=&]bݹƪ-= cte mmOV\7@1[cEz7l=׫ǽe,zuEi3?'cd1~2O?'cd1~2O?'cd1~2O?3+csج<6/ bج//0q +O`!~Ex˾ eel#W\d]+m?ςw0WUbs\%b!z@Mk0x>136fؘ3ccfľ136fؘ3ccfľ136f8$rg6~~K~3):+Y7&Zw?nfwuYuYuYuYuYuYuYuYuYuYuYuYuYuYuYu4S6>Gg0\>|CPd>}E\?%K1 r\+q/jwIRUY%tK疘cͧoMGuQ]&u.eL\2q]^4i]k' Rn>%muVQk-sm =9\41ͥB+lz~& sC :{^:{^:{^CMjmRkJT>883^괗_l{I&&6Ӟ834DXqNIt8C{~eX;Œw4[>'L?#U'(I]U;HҤ&4'EWj]]tv.EWj]]tv.EWj]]tv.EWj]]tv^ڤ&6IMzmk7AiymV(u/wYj\V$D7QOu.,%M OFh_;4sh:̇"3lifwfr,fRu Qא>ץϥ@ߴOԳZwRZ@I (i%-hO+(}=Ub-^kXxo- H\m[aklm1G' g,ԳzPYܨ]UK6}w+NNm[6]u*ҥ[v[t >n}5.'L|T[R=OB _9M.+HƑ=hX$>wB_Rl>q#IO jx$`MIg3&±d$hϾC>>H2I{:ߺE;\dZ^Jrd(I{Jd(~YfRK{% WZ}"~7-xcߟU; [~|sVsZu;ّuoY!h;Y\(W`3#E>,b4+ٮ^Fh:Ύvm==,wi!-:pΎS3=Q@q.Uz}ǔxL5wk]嘖cZi9h9<-wf;D\(i%(1GUEjtu0!/^eY䋫1zS-d}=MziWOJ9an?s~+EmK6a9_]+|}OKؗy]oYF([:?ϾD2so?ײo?7+ޤ&}73j[dG'ݙ?~$յWXb׌mI\0ݓƫkc eEϙu\Gg;Z~Q/0C-|lC=\`W5HaU,oe.)~5s~YO `)x ˽>+p+^>*ǹ~f="]v4OsW=Z:{l07ckLv`+ vsN4`ZnwOvbW>ay`@C=wuħruQ8~qמ豹;bkt57vϵFZ-2mFe\I xxW}}tO>aCWIF,}Sr8 ݾm9Z;#mbm$KAؤ j.F1 WPwk=FŪvQ/̕YJ|vQqYjYv9Lӕu*U+PW/.D19w]\Fݾ1xiy}*JziSiYmfmf*V8Sx!KMˏ2W =3"Jo(ru\(WfF:W9eCik_k?ù%a׳]φ)/zu]yN/ muv݆]R͸w$zB]O u='ԃc:lL.;# _ xo!{k67rA숝Q@;: nݑl{G>['#:ll]gyG8:N)8g,^ϯ}?/b.<.0>owu:n|ݻ:`Gcṃ4E?eJ?C@x\ Ӵmb,IƍĐQF`?.ԝнr}øu4;:ƾlm~O'k:yvٖώw=p+Gl9?KU\)B.W=UuMUZt>4 qw0uyΛ wt.ޮ-ۖgY{:,Ҙ$6~\URK\Gp06\&w==4tpMҰfo[e6])s%|Owݝ 1n'h^3~cu]88N0G#j 4*EiVl}w x q!1f;~ {IӾaCs:GCiߣq!n0 Gr#Cz;Ǧ} \MTU.qϦw,77xgevCŪC:C:C:C:Ci:C9C9C9C9Ci9Ci9C)9(pRd(Ed(Ad(5Rc(5c(1c(1c(1a(Raz`[59wGs\ә2HǞ65k4mض}'sUyvjLsU{v۫<f?I54& 5h05{}S'ropnpxfq}<;Υꘁq linPnݟrXʮ_`1SXz'f΍fo[x"ݑ<{-.PO6#!=rH#;A sl6dyCs]~ud9ohFrx]s';Ml6tn >k.)U׺j4UMjUfk'iw#AT׼jV0,|)U׾WenY[v4%ZLuD%zCPjZ+GY isɠ:Q0 i<>c۹Ǔ3&3&3&FyjUlgl[ zT<4ix#;|6Oxtl\ oOy{SޞԺy-s2,R3hTvwpv< [ve+;ϲpp>;Ǖw.Y8`hO'OOVm}1{\r<{f\o2wnv<~F򢵕܅ɂ` Ϯv+clֶk%k rYݶ{%M#.,W|KҿN>L^ɥͣWLx=β˒Ź+8U?xKk \|ϣj{AQf%oXZf+=67{(`o[ܟ|-X.B)ح`Z]u<}\;++߭@xWB׵J0%N n Gđ/{>:t=KFA.ۚב7=ت- mڵA1׍ClZUblszv9=ipW5w<0僻 {unۣo0H 'N/ܝ |Wwg^ "bx ^A/(j_Qch#T5TТXh@DԷ3& Fsvgggg9nr9N}=yH~ |a) ߄&s%/ #!^"3yB9J9C _ Q6h  'Ȫg0/DfPmҢE h-I 4i&-ФMaqiQCڥH؞Ѵ@4-ERkwsi8Glxۚ)vVnsasۑ@4i4h 1MBmX):RԺ+cy(r֧AcdhOSC_\ȿGjU ȋ7.Ʒcb9CVG!QaRF !1pd$2 <'"ȯz_E9g#\0 A.B&"C.G&#W"#cY |'mA b&3LxL0""ϑ//F r紋.rBH.KhZ.KhZ)EfZ])qZ$NXoMi8-RHKiKиJЮDd#!]nH䫞A~h}0!>و|||lB>A6#|iBZ~G^H?d021V2 Q}W`|EN+ALc.3DF1p~_11?T[`nLzb%Xf4, e ?#q!Ӊ_ICE!yy|Oq|Y,E!ϐ^0 DGV!/"/#똧'&?ϫBr :o:o:oT[2d9&gBh㗱/TNӆ'ۋ-׿#> A)qt*(e1`ub. s*LvСE`"[Ϥ~]M_Wcm9}[>(VVKv)tjQS!5PS!5X4D]fKcsv5 6XBFכANR_M7u(O{Ҟgi[QRj>@.d/6S0.@l oR7)ƛM& 9)K&כ4,jϢDToaR'-.;ѤUkiP_ &HiR4(MZiy8|p 1|m _g b0Rd_c5Oc \9OSӔ׵9S~4Gc>45<iX~Y,oư3ό3c>3,_1e _1v~2'cIÜbX,LJ|@11oc@ZUOh"ZV(KvI[+;*Rc]%lfdTεGƎcP:5Гճb}=i={/;%gTOWIkh^Iicd]/ڊkh}Ze;^ǣx''k{W 넗_ R ̼?S );T* nV*UIV„c1}e"8XLWiza; ?l8Deҫ i㥄^-WG.T7U>S`]GR[ث8OF8!o8EUs~<]$Az  8aq ~mǾwcq;}DZ8Ƕvێcql;mDZ8vǮuXDZ8rvX42b Iҟ4Y,@EČ]@rEQE$/OOc4i=!8_e*ݿ 3sA\s-ۆۘ2' dN(bN DglFjF^9s@FY3Qqr&M1=ө=v&ogljΦfSkv*-KϫwI<\Rٸi)YwL*bfqeվR|BS2dYLv"1zqcxTT\?1bbIr]64ۆfЬ Ь6نzr^FFѮ R֐ Ю[PԮGFhIcD8Fі`Xr]y?wqK4.L"4.B"PV:(+DYEh\T= i#>$xE]_J/3vd̵luq_lj;5Y] #h!y0EhlFohF0FB8%-Jl4Z-;{D!9)($uT23TYl̮nmfZ%TԬn=ibvS6sYtU#zy} E)}օu1m`8Xվقl5Hȡ*Gp >{|l!^&62He2ǰuV!/ L $t> *̾K݂M{`FleW5M`LԲ7rݴ-DJHi(UpٮB)/{?NjGU<鋪l|kO|YNl+"x`bj0.{~%ȯsuB4/V*jYlMYŨ}wZz=|N\,ΣmJ V_jZg7N6r/Jz`[kRWu?sm`[n6;6M;ԌV]OX>IYu lzzlM?zR^xu?ܻ[iL$#eX*R -IIȡՌ F=332al+5, ƑVt;޹IIot[]46?u@;5#fӲk{-W6ݝ/(\I3[mj똶 Nr9_|`Fp^[ Eecv:=iSyZwV[VҬ$*_&[ءwo{`Xf˜Yۿ ToCw9l]mzQ us/^5k낉$ P@|3QR7+4P*]h]=rm-mX՚Nws1ߊ6ONk|ֶ}m4z֠iɥ]ɾXjW*Lzr]0MlN4o+"_q苉wȶVuZ6z櫥jJmf :Sigk ZoE0꬙_tLuo{fzaMK~l%*Z3OXY#Oyz=Xa7|VRnW+=ZWW=k{zYㅴ}vGޱHooodt3ϩ*~v{L^J1ͷphB{ubf":lNz-i;RXU[W}NKO~iG<\{e[OwIOxV <<#KFƤm6og~V૎u22o~;zTՌqkF\]7Uo4kQNgj~l~_)Hg޳zj :y8=]Rׂ?0IxnJkZ+FnC3Ԍ5Vka`kν}L_lܾjr @ Zxv]PO_l5~w,NI-+kh=ȎoPk$&vhh6wJI3Wd-#*"2C&Mr\#*)d<%#f몉j&j% VR)T_5ؑjVquꦎUURj:AWg*Pi&9-iVW9Nuڪ?8?:㫫No5T M } mڪo=vow"NRRwwxSTo˛ z˜9{^g9gκ"Uws=tg8O辺;Kt>Y蓜 }>٨Oӧ;B}>OTKV}.q>S4k}UzK0Fׯݑ-{~G7 QotQٍJ]?_o7{uM{v~?-=^o\{?^C?C?#kQuq,$tV,N?ӟvW~7e?}zxZxFu[7ogou .u }?<7\~?|q3 5W¯[or?ot?o or p"co"DIs"'D IiM#GNOk93rVZni3y}Ӵ8j6& 4iFeBSiNGZRZ!mH'dVZrl+>GO"p\M܄Ҏ0D&tzDCQI'Bd7UtGV}@J+H,2zG_rDф֞bǡr wJh*t9CFsd+b)F˰l\+ {!0 H)WT'Be:\K)\r d&aSf~!V620Hn9p_z)ʿqYlʳrtX!ϡJBOy?ler"o;n򮼇Vqm}@,_k@~7D( V-T iZL'6'fH+Ft(QZ1:| vtPaN*"::A$CUʔCUʒ.j_:C_(B' _k7aoշ2J}#{=v(GF8aNFӄxS)fN3::gf:ęu3g֑L3Q:7Mۤihvvik.Cwʤ}h^>?#$7tht ='=C+COhMB ')!n=Eh}SQW҄MD3dJ;5҉gxm s'Q_)=,/KzYP\3 ,x!~#-O&JSbb̎r0e\[~M"~w99'{_]!P/3te~7]yzJk::]]O32ػѻrnn̛[ww鳽hrWiAޝwJ˻\ox^7{yBaJ~{gO<=J"oe>=F M {OrSS==MoyK[-Ir{ɳ[{S*o@jrPZIηh緽yw h!O l*I}}}]xhohW4LzJ::] cxn']u{:atA:jԝt'ЙEg, >߰請JOޟx7M0XGzur⑁ O>Az0W!`=p=}Wc:&zQz%=걔v>q} Ǒx=r~O 牺@_Hc4}wO'^&9[/їR}))W+s.!}J (Ɠ^1SߢoC⥚Gߣ|P?,#QZc^L'~Z4gt9.)a^AsYWry<*_/H/IYװ_עeJxEBW~uq Fm0"{043Q2QHHo֛ RAe짿#|wE-d_ߊ~kio3my~~;;ȟgMFiߓ{{ȟ%g']~~?R?(Y`|Q`0WnU?]#NQJMcc䟂SYv>9 $__Dib_OScO C?WˡT*5ɿy-W#zz4A-77RMM<ӟI]Y z>==K?\e&$-IK&Hz OO>OO2+# Rϰ=âQaѹohZt"ab0[}E#,ŽoJȔ;ns@ۙ2/e2Oz}`|0|yH!OPx>(| 1xşC_K7oH&oakm`k{ׄxS[:̭,n[;[ -r.!a etGXF72:u^\+9a[kō&Z&bx?(Q򱑖eX&[&6212˰+û׻2 iVeYeS,iyTQˣFZa;;󞣴JieM#eXa(|Ƿge>c-[̧6`5p~ljYVstؽ.- υ[2'#,ωYDdYg 0pCa;1hNv-gNe;vy4'rޖY3rUʽ,g3H1g?__sӝE@_7P_Ƚѿ!b}1{ÔX42L˔:UcRKt=aM5hYSXLB9`Py0;H/#0024 zz>9B0ۇWY~5~oqX֡e ,keY[5²eY-jYp˲,+:~WYoUa(cz2ӕɄ#\#\r1AYsYV]DTt٬ʲ," n" P3S ʡ~v7OT]\wQOvwR;"p  |F|K)* N* OOPJyb-eQ-匇O.'ZSܥ"dD\3".AW U(JF壸*PLWQWK ҙeWHoWkP+*KF2*eJL)S|RT+3WARADUنΒ/R '9s)+CR]:{BjI"H~DQk,fNDcTg,gmIy)QhD5RJ"l5ֈ6k E:0u m6E f^ꍩ7?4u(ksbS R ԈIw6mntGtOY!Ǣ'XIVjĨvO^"LTsӳҳXl.azCx*nMқvXӯfHݪ-Wq~'~a=.p6RE5*}ӌG݁gq,B۹ä%M.:)*w|.\3dk׹:7/Xm7do<9mj~TWd}_>b ~5ϕ.u,}Ű7~mW@Q?ٻgHfm[ٹf;sm8kcOqM̂>_/{\/SuC$>VvP`wv%O^?ײU>B={~=xfKd.`EWÏ?|7zEw3%~VF/J/V&Q _⧞e>V]!yQy걟dz湦k~Qy*WʷXќ|.~~vZq:rl?)?SY5aJ% RWm7.g+Ύ|ޟ_d,5T}nMGoz?sEp);'U+m1"wDy骊9\)ˢ~x>{9o~kofdnBw%l$=LT5D-㣋3DN}{i;OO(33v}>F'G:D~Þ{;ddy'}pwRx S38Ǚλ~Yoq9gt68(gqv:%gswJ!%OH]|d NFd:^VH֑|l$7dlߖe*xr7!|*or$,G_ꯗpW/үJMޙI{t+MSuT ;U`Zة~Ki*|hk/n}}Hf: b7g 6l5lv6`gige^q/bB>|.eYIJ,RJʕ2d#8tqlZȍqL(e&I,Y,aaL2rpVYMy>p>k, T`<.q6:6gvON^g|gs9@Tg9qFΗΗsjqJs)MYMiHՑ4Y Tz5>ddLbdY6au$i"J OR]ː2ʒ:.ד^_6d͖Ts#y)(I&\ry9ʓy+JRdI7udQIvbaYvfAEvaUH[uee7ٍUe/"{ޔCwRE#)Fy#!r"FvGʑThy7{X89/xoɑY4 QtKt sH~BAVGiC%mxŢ_EO҉,t"t"Ka-n lqM-nle78f_lqs`s-n l%7M-7 78g[aמ3ڂ6Z!-ڢhKAiQt$=tttt#+/-_/)bi"3`1+ ~iB,n&-|/ mn6]~I즸4^ :]N@LHhv4.O7USS"QD6L A S$tXNZ; n > }kZ&:xcb@LǠӡAׇb;Yǣbx> c6OIG/ŗğ$ ,Uz4`w;+rcFfD #ajGFD^jDFjFDB╅Ȁȋ,+`'.Oى ;aNhNt ~ZL'"Qe!"K=/UDvvS`S`XV!#vHQ$Jz?xAC'/I; d5YrVI֐5 e@K(]!Ӏ8AW(g.i(~}cJy%VtD=Avteajd%A,%^!`d|rDymHmȔ7ɛW$yF-d-|rNrxz affte'$'ɔАU  ` P)@ƀX(iӺd wL$|I<磅Ʊxi6-`()JaM +JL*)cKcbc+b+cbkb6Ŷ;+>};4GoG}¦NVw*zG+} So&)GƖ/-xa#n7ŶPv~M%A{[Xg=.Dݪ{8 yf*P19@6kǴSO1[8E!cwVBe^+ޢf<]MtIT!Е>+ӕNU zU&jx#OUW+X+<1G=x֖Y;~]7+tup։cXg>Ob]U 6h#P,oOX^dy;ޢ%ۗtA7% Fq٣ؽ3lfȲa}d5"q= :, 8Ξcϑ"-UEZuKZMleala>QFpGfY6+N٘mJّmg[Bސm C6<c3x|oQ1$|i2vO ..,|}z9y8oeG÷Gc٩XV~3&? o,)- yϳg+T=og`ɮBe'  9έέ|,ir?v*|qZϐ]ϐ eC,|smF"L*om6CȻ]C OY~H gd,_ȗ'rOmwR2\YaardZԗߦjBfS{fR{V}RZO:D\:4@tI-LMH=v'QoZ_lZlnΘP\/ԗ+5nwC8^H2FԨaWF#Wjҏ.ggCc1kL0&Sityc1"cXk)_O2Qܨ0ug&D͘Qlff3̮ۘfo}d5 ͑sNTSGXIj9Cn΢s"c9|j|\/4}l4IvRhK<e0 xR<iii5z:,O_33333ZK#\sQyiLK|k%4^/Ƴճ˘9Vs\9Ec%Ya+jհZ4GۍV+jeX=~V5ʶ 5m&ZFX_aMzZ#tyk5ǚGw"kʬV9NmZG͘UnUxu"cMF1o7S7ԛmfXJ8ۛCޑkwwgU;֧I ,ow [evzfNAoL_bJi>is|} 5|NF]s%|}}iRsaQ{|yIG|{o>n9Էзķ·Ʒjʣ;;BqseF _5/?G5u&1ϟ/OOO5/.//5G|Ís.lJboKf_ _ 917b kN 3CMy6ށA8+ L LT54ffso ,,ku`}`  NY`L!׷ZvAQ9錭````wJ8f^2WGNR|$xKS7vA|CzsspU 0Ss(E7A5t < )E7"Cȓ:y w.^F)g{_)\Q֋0EE ZÊhwlݵꋑ}@#yE_z7Rt!ףu@_OA?G`6|gA藠ׂ_%p0w7k@gWG㘙;Ajx uZY/V_ Ӡ@REQK싔?Rjuԃ<_=SAcs JaGpcq./ 5oe;(dq$J5Cof&.Ƣ vˆ0v5- {С ߅RS|Jiyx1'ZS$V\<~2׉CE'BZXO0&^nJ(_se/hP,֫%f R J RҵW1:H1 w!ņK[bV_RXe-tRV5~Jo}8#])WQG{^ W<90tyޏhG6 ݢ_HqP )AG )Bn@  f# /a/dw\YSv9uc`f h~m(,0ڂ%P] y 51q<{*#Ml-m6;]l"#.Iu'{wml)a^g/םOO||Ms{_{Ӻu'FN?r)rE+^t=E?/1Bc1YL;]L%b}~~>I>?_i^CvJv>Џ1UyhԩEO[QW}hS\bhO;tu"VO0&?8 9v(VVq 0ʩTXZybƴ"33S+Yl戵fS}(7g#Ɉ1f!Bg{#lor-Re7/ߥHQhSnTSD)~G7TʪUL':@~DbVPq1׹m)>aGv"ݭZH5 nu-}wQ/_]jQ unmںtw6C?JeR {w烔]\U,Q gj&Ao/; 9UU:SP[R?"欅oZ>zX@)rHgJʆ?0?7~gM z~E|ww1en)te#?8ٍ:c'(&QqJ1` h15Aڔ7W u>H fMxSdPUa?AG#? -AJc=#@tȋysmDOT=Q+WDJ]w,CPڊIDDm ѺsG,PvsED;jnIH7ׯ҆R^5v-> ZCCIW9*U1"?>T;߂J"fywA}< 1]Vy2ɂ7׆1AfFsмQM JU`}0"|}ߵ1d_Q\A-ϧz椧(R DD_|8}VFy+B"o5O3,, Kg$\NrȇkL)P H%{)3AF- .47/{:f'8C.J v;qzgx,Ržl}t(G m("ݍS)d =Yr=A݈?&YsfL'Щn e3t/ƉOuxykuq1#N,5c=KqGR6" 7&Gx̡HxSscdq{8TP_-E MC){5qPnΛ#L`t_)Utō,@u?wzWnoqF/ {"\Kߏփΐu}dSI`nyTAř=?2 "_WG|KH(IW}>W$ubMf} mv}^aiz~R?Wqܕrwʽ)Oy R~j&?4 ~~^m`? Fdo[mʴK7p#q#dw%Kd]\S.g<C~ V@"O͓3xSEF1B| N C-Osۥ+Q s&ǘyY{h4_.Ƈ\fճZ99B}8lyRkSlOѪ&e cau5=d4VO&uǚfM2 9Zi@$>VxUbJQ\B(fX!~F7ٛaf*ԏgH!<ݩ.KkT`viv{{*=g}~|ISb ESRJi4Ŕ4M1"EĔܔ"1"""b))"RH3HP.E34{?Iku?.+/>ZrNZ@&giunk^,%F?eWpvG=~O)v\sMb7N)윗--g{s\\ívvsn a n[.N/W: ]^?,v).v ݊E.HvW8*kF N+Us;Z9v׼(;f9>rtemC3fg͙\=ݫ%b&ywrbo 3bYZs7;X4k7SE*[f=a' }av[Ebo<3κeAwXװ[eS1"Eqv;n9q)NsG:9iW keKi-j:0> Iz9N(_b;+, PT}I{PHNw 9Oġ,0VY2}&䭐ŐUװ6>Y/ Mܐ {qb(0A!/ >YrFH ϿgO4* df`ehЇ͘HhNLR5zaC3A@Al&vWm lzIs%tp!;fOv]N==d&i Ll/1%EEbWg9'~ *㐕IHb:Bmq܋fY|b<y3$%X @퉹` dK'[ Ġ$xCߑ[b%t_BP0Bk+GS?i$Yh^~wt@ΗwA>Y"aď0> w( /EQ" 卯`P&@r \y]3Ӑ໙4ļO^ثTx7h# V;{ 0b*}'W!1лHB}> ¬H" ,t>;\p!if 3)y`39@ +<4(% 9km cH\HQב.ф4\p6rBƊ6F!Ȁkc<]chB*K8#3ݡ@9q`"ǀ5ZUl_rf*owPO)$36&UpQHyDJB1Bޛ̸ 1`Sd1ȧ{$;쓓Szg|j?ad4* P1 4(,vhX aA[+F~S Ͱ о}C{ڷ!?j۴俏ih#(m Cwehujw) H8 Ewק\J=o郴,Qm: ,h&/jԟh絿KB=*h6ݣdd5Z<Ͼɖi?g?j5بހMXΰ]l^.I[aA =`gY=bo?1g;`0#o2"#_E!B0q^atM4Qm N3S]fUfJٺj)>QYO+\HQ~…I f əLE63=Ӥ?yBr)}f櫙/) >_mL@gvg~/ʼ9/S1}y6?[+{CHoϾ__ɖef kҷ(I5}šz}7WDzo?>mɶ?..f>'}_3KWIWG}3{N={>{I#۝@C~9/?@ˊzOޭy#wFl; gX,זeV}/[ga T-y;>?)[6Z(SQl£] bVvA6^=.*wfTlB+{;&)X69a( .+="WD )ʂ>,!rgќLfHU?r\5粹>x*G*{:W-S^-7){Vo=V)S]vR[3\K)67rϰs=˶徝[^ʭ}$&{9F܏r/r/vr{rorr.f'rrGsGsgsoBFS oܨ~S(QlaҢ7Sigܒx)5$~J󕇒Z 'i#P@%پ~?>RD"AF@XzYz{>F> ¿P^k}7̽ޟhZ/Q( VCZBxm=.vX'nهbvqL#tڣ8a \qϗ׏HlS>D}SMDTQ!C0+!!PRPSNEƩt@#v[$[7fMWXQF |-+RE$wιML)4ꮐ3R"WkY$Foݥ}{+G+" H%DbW,{Th_J닙v=Ek.Fvk{=o/RDaYty{;KeBߕ3ln\oZYsn"?P3KFڝ%#H}k73~\)%rF{JJ\T>HrCZI|5}HoWuHA(vWyIl&nLsHD X$Gjaݔx$OVj첛 ;8 gb *AWp*˃! _m_Cﴨ VuWXW.Z` ROEP!r‘p|8! kt8%&L;l9aKP..90l 厔-]Jk f ;ApwO1Dxoy;u%=\7'O Vp|j/r8Eh/'Ny4jE#䙰,*ڰ6&EuQC0jYvGӣhv47eђp|\lVZQ{N,;h&kg={%uW#S{ˢK,<֬eϋ}2Nǹ\"OxP\xt<.WEC O'xF<+nyy{SHL+x3V}x+w{Ӯ|LhsħrQ/Xqw|5);JTvTq4NwEМԥ&[:J8Sr_mRSRR3#QjsA=!3I&h! |9Fz&1'I? 6&,40ȊoF ߌ@J,xpx@: yYt-7 ->gBb@ 8#vsƉ\zwVw OEl̥ zezdĉ>r2z^ Ƞ%aߧM&X ;!FSxār1ЌY ~ 9sFI'|5z!bGMSN ć`M0$V6U1%oD>g>A>oFO|V-$8%yĕ>CByro"V8 ^)F 9>M/<}1 Zc=FbO%2;q}_P ,i/BXY 4f@j⴯Иh3 ٚFYMvu*p)M&N=oXN|cB_I%5#FS~N'^ۋp$?. mI\XɄ'cL? IH CcKH,%`=eY`u¼"2JfQ`qAڏJӋ$-%ؿ6kӞclLa] ;Mm.o"OPAH'V;qbbğ#k'=7 ;:,=V5 I&7< lZs}DC6(/0pZ B,79xq 04(ixBmQ%-:aEb|ݗ8gL A$pzւ4Xc&YTA7r>b8?ߢS wgC ;pFA^MBzdb>z$W‰q n1JlVUn mtz7Q?} 'f*8V iћLƄFQ&O0/ȧƻaZWW\ZhEmVk#1ZVMiLY^TmTMRJC+e4R3JU^ch%riV'?OYV~ B>Y+֠MYq.:ܦYaa3&=Ω74o Ϳ14)ߊ׽(_(BaRf)2˿@؁8_넼洼朼,Yrm9q>ﺖHBe]'WZKݭu a{egdwYU!˺rm/eӼ[! s)}ȻsWp~ͅnS|@_9^Ǜm^suRu)py97;|:o*fhV(mXm bM}Y]a/U,@8aW(^sE]0vatw$ѿNQ؋;ceJ˼:AΏ򊮑?"-lB"f‭Dt&NZ(sYg~u7Ҙ1/p)>`wCp;L==3B o; Ha ף  ^RiAH!XAQd,G_h\!Ii|OB${vF+i=OAޚ4٘ dA|Ȼ(~(;G (8c>b>%c &'H h&EPc"a;ѪGKj ŷ])~Xк9| q L0e8p)[Zd <,­ Zp,eCh 6FΛ߁YLFU)r"]QßCeC>NA䏐0ith?!YIh2E!#`fQèm9 oWw aLjG'$pdk4gU"CE1ZUhT\A:v Z@\]:w=xA܏ d|>^s \{/A.lB3uEr"vvIK>Z l"[yX=qa#I0K l@2`s*p ~@ah?AxmF;VobÑ^>JW 0o!Ew8M[=iMkh8Eℹ#tz6y g*O+|^!I:2ė" VnP13Ď_N "F#-@<ɊFhEޮ*fGȇТgO_)ZH֝oUfhK"0HaT3|5MW*&| ̷Ƴ,g|^/~)C~_o6ߐo$&u9~>2#3gf՘HA@ZҞ~ VHK%8ʕP^py˧{$ߴ{yH7:.Ou2Py@]+@]B._ @]uxK\ ^FV!uM@T^E7<:SG mmł{{)>ǡ; 0ߦ0Npa`>>0in돂W)U5[3LL~XEЗϸCEVNw3Cߣ"~诨>ώЏx?+E ;-d>Ʋf1CYb)BRd7dg"ðyW W.Zq}>6I-Zfż^``~ gžp?p3?p ?p+/o |8$lC~o"<"<␰sE+?Wb 1|BcP1F#΍=bc|T0cR8 cܑW`c (ނYoXxW5y+bOb"b+*E$D.l1WbX.VvNl[vSeNqD>.Nʒgy%q񝴓s;% )w*8ʙLvꝩ Yjs8 gF^^^tkv9{!r:n\!u bu#1xGs'5n;ŝt9n.t6wnv9wO>v'n{νn.˾q{<.gIr|Fy/~+ݑ bo7B(oWU{˫^7ۛZݬ[.sV:U^3[,6z[NqG&xOeG1GUA;㝗. ](}?~lj oXկG{U~?OvT?K$+y'/+Ur̕sPr-_̓ko;]?ʹf-kO-Y9Y9wF;9wW&U#W"eA) 4 #`L0)*:` jdSZ'L #) nO,h V{~=ÕaS 7[p{3#zn_;#byx<<t3Rx%wȊ|\_ޒ$EBEh4&Fz"Sn65GѢhi"DM֨ÙrD{ѡh{rEt!ꎮYEE]qgݚPlO\mq3k¸?5%GcJ˞j৽xB\Sid܄sxatACxYWXwfw|MxSQ D|Bjz|ڛ+{RqYvu|Ι_txw\%RsI)X;{Pi315$ؖ438.VޙԈ`CjTjl2UNsu)5)UuSSSCxNjnj~ULJ- ϧvfxy~yjX"vxSSKdNY^ՙj1=uĝ:.KLIwkSRWi-mt:s 4?]mIJ8LgbJtUzbzrk]趤gg92=/ ؖnF~|.(TԹ+ҫkeқĐX4ٛ/[ msfawc`Z@JPlgTuh]`Z|9>SrK_/8Ȅ\LܨĹf FS8(2P>3<32=/3;ʌLdj3S223c̜LKj`fafq>,7;ufVGe΢.!YTf>E`氻P>̱ܶ ܛ/Ǧ[99(Vf.Z3=na%{ՙY.xU"y~κ٢ \ڋ<;,<ΎS۝Ntbvl|Y]&wy:꟭L9Sn:Gl]fNӝ`;ٔ+OU^?:asE&.#vEUN([,cxg2E/I@IJD!]M#vhG Hfz>IAqHNsMys!#`8@B'qBr1O''|0TiuO8s ˀDCɷUB=)߄2$[ Zܝxz3F{W?gC=m{$Ef%>#ddDV#O+&=*HC!|UK<{/11R-/Ø6:1)D`#C렖NXĊ8i$n&>Zn)ő#(:ĝ!&A?ٹ*%v rA|ZB}e<1&: 5pKGPHNRBdCZ5:&!Enr/.YAӉC/Z#('6>xdeUw+i_Ge F^GG^2sMh;Y!R/p_ k٠pLkxI;[41@Ld/41]'phƇX#PXi(_E>a$N(TԹe(󐏠[NXxtc5*PĊJbH+eO"Ķxw1f=$HI+yiCjG TI&vҚ%OO͐5ȠaTqn'᪉#@A=~IO j%Q Ӭocphs%vj5$j [ )7Q?X[XX䑐pJu:ھJc"4Nq&57gÐ3$Q(" %4,<^;Y%XI حnj0Vݪ vnUحݪv`U VnVazvZحݪlGت江W]e^Pv(Ee:J{I١$}\3Pۦn`r.G~34CYO`VV>`2`O[L]d#61}6A1`ؘ>lLz1F$ c"aܭlLxø'ۙ}GwXO;,/8r}{s9s8"#"""4NJD#!FhD"F""D$"D.ȸ\"B$E2#$y!U"d>p|ΚuY{{ﳞ̄m; Z_C|Sc_Bwwtw_޼^}'_H]6Q 6+ћOԕ|B zOЏ}c:koC꡷=ZU6W7SyTϠ+sjQ{x>gnwcL?rϥ|eZ,=i[YQ\ubR*c=(T㝾 qgj=1yGYh*wct_cݽKWKET%zz5J6 XT+pGzאzP/ԋOٳKvQP=:cWY7^ddP.r=ӃuQ[i4f-47N}]EV σW3v[us"Vո bC~EhG9S¾ Ye<e9_ { lgJhҙ??錋IXE6DUOd/s($j̠dD&8-]% Bm%0o%S$$fIHNSIC7%u.-#3"$# K !9K+.3̀ìtk pf;hmW 5$5,u{jTQ g3՚zݘZmO-N-KLIOmLmImOLڛz9u0IJ}"u"uRSgh;o6nv+ӴFzh:tǧrçx :`CY;ٲhh݁!9Elk <ʘ)_b"V}oAx yj:o, 󨁝gqtox(CaVQɁj%wb͸RM}/a&˴[vH/0X:O#/t8 {q<>Wלy`I2Er7݀%rG;QU\]9}ymkΈQ^5rԵjFOndSC c۩ʇ>nhhEP1 cF$Ųk@J9qsW`8K%N1v.QPZewF5DN>yoo Jbݞ(#x( "|^u=w|Y:N T#~kXpߏcgt0K&cK]sIΕ YO8^CG|Cމẋ1Q:e9b 0!KC^=ڹ{ހ_iaqXu;fiݬ䞹wQ8I=)c4sxGͩ '' a?l|;`!{M5u01X#F9[u6c^݈ވ܇:lŜ[\Z祘?FCuV Iᣄi--7Uhr b^ۡ/hb.w6Մn{I0:`E.q`E+n|1h/QYXb4pQ]}JrK/C0E&?bVa^f?x6G y_5om p"yLZ#'PµB=ۈ*yxa&/ZDN]B OQ/ oc-TbG]k3CqG=i%84?{7zvhrW/E[Ι4uzuW4aό!>VEnjs̷t;'+KwE7Ocu#"|#.xvn1VO3V7̜^1(J;E/Wx>I$\EN ߏ(l J\520cEdxm~ p0"xj;sWER-塸oXݍk;FäX1E?Cox}oD!Gn`5hLCXko-49}*c2=sLpIԸQh\5DrYSCsȾmÎ/^흛"^z^#37r'O+p,_̝&Cu_l&.L\f4 7Z-B廲Ftw)>lwoޅ5¹[MWk-խ`PF Z#Jla}$l"(Ʂ;#X{{'<=HH;#5E;Bϋ4-FG{UbVݑ}ܦH{0i14$r[oSTQ# n%ͯjX ]\xt|I4HtƗGU?nU|C|l+wE񬠒v!`w,hugWnebPeZޭI4lKMMpG-A)ʛ~֘t>ZeZcۼhѾ/ț[jael be8ߑx{- dNV${Ar 0m6ɩb-GܞF#> 6mb/'W ky&'7jLn{l+<<^L35y4y-.@{2UkMOդjY?<,5"5:~vjlxpOxRjNjNx|-5VRRkSSXƩ=1;ÛE}FOu'Ny}ӆ7%cOiYO[K~u5eJ ҋKczzoY&>(zIILʄCydjau3Uɽ.Hdj3C33#23c)WLSx%͍pc&ZY96>0rfIfyfUfmfۑ}%5#Idv{ّ̾́L{0{uH+3"{%l:9{%ϖg{ғ#LO)ll]>}6+y(z:uLoce'fGӲ3]j[lqv... fWxuɣu٧b۳#Re>gݶ =g_ɾؓ==̾=]enY,P=Gs*ez+X6lHٰF5ze&M7M'^/4a(Zk,.l6MpڈȽDxO l8 E7q!(b  VDkRO m<닐C@vQ .tA3A{ƒhy)ʇޥx};v%@ځ:Cܖ.[z:gwƒiAW5Jp`kѼB)e vA~%xx9֕9Â~V`Ђ N}a(1Jq##!| <ѰТ+v%D QhAA{mu[e7Kpp:ڦxǨ2YI?~~|kH;lBtBp }N(Im"5_zK8gExBzϟ!?Bh;v-ڸk gCcӲJ [XW`\`B?@3Ch q<β seKɰ^ -kP(p~mS K(ORHpB]ۅ,] V[/ѫzn*}s:?-Ox 2p,>)#)FCϡG~!'CoLi]u u>Cap |1#n$2҆od,]3F7{.^덛pw6>J=Lk5`̢}Șc5j3fVs0vd֪"Uޫ*ŪR]zKU/uRju꭮T}UZSרZ5@]ijnR7[ԭjz>>V P}S-RR%QT=o;jZWjgFZTz}A@mTԏcM=w::ԛnM۲۳#v̎ -O~7o?O?O?OɟƟo33V ,lKC9WWy6au19'Fof0d<??w?_`\&W3e3Td.Tfzfze.Tg\>Si|43.g22d>|ff53;n95*泏f.~;"Y~}/od3۞=\+9ù~ۖ{:=LnGgsv,Bs`O=r{s:?~{%Ws!\GܛN;{+w&י7G=7//?_\e-57Y+nkn+v/lO{8CʣobxZ_ovs<o./eA'[X+Isr.~Z15Mbc {9Vטu]5)uz,n+(;i;8lC;4"a٭\}̜;h3OZ1wyxz({-~pE5q&۝)‚WV?Qf{i9[Po{=9m=eqmcK jxX6gE=?Lpq;=R=rժvbdg8wͿE guYoݝ%Vl[3ÙouES4Rl&yHEȰ#}.>{ RoFz#9% ҧ!)`W$X?Ax jp,R~F9O.E;EUˆDeqRI>JDsmC0FQ`־Dx?r>0q11_* d^!9ov }]Eڅ_!{Үآ !Ir" !ˁ4Պ d^A5@0 ]r6b\ՆrV"'~D\#>Q/õS9zNFFV#HCx)"8ϕnO6m X Ү ,y"3 ?rjU*Q* ~9>WHq %M&Z9| BkދtEpmE#H˟]0gZ\RDkg=Q>L%gExsӳ(o [re[ͅi怃aanއ)ajAu>A1jpuWv g @5ʪ&m$o񇽹Y{ğڞǘo8ϭWq+L5!qpN;60{e.n(rqc,B=쁨g;ƪio w#oށϷ#4|[.f݅}0▙M5KlulBx5w4+L\) q%PrbpJ.*rSA΁/9d(l9aǥ0g5›%06G 73)JUJ+pyBaDRasJſ󹌥v2E3(NR?#d6!|/_d)g ? dѥڍaѷXB|ea!z(\b+Q2gq+*pWt!!в y)Ǿ?ǐ"H+'l_ւV 3&o,ɶyY$ $̤ '’)']}د3NQλ0dHr"-Ui:J vLġ$w0?p:KiVI H/f AzEJH6"Ÿ!PX`uaAx$H)Q*8_#EUͦEEx'X9܋  i6$t&0Ia`Tw E` >'\0^ r+BY"#\C֦ ' "k B?[B#Q)įF# ) CccȰiŅ_Ж#@>Y k6Qhgfe"l~"=Q86ްE=eۿ|4xX6x6d; OrğįxZ:9,G Nq^H?44dAd d d 0ns;C1 %ya慌-[ysUN+Nf\y;[s@|ͧT kΡXZkKw.:&lZG3!]kR~+cjϱw\NmshJHhxUUw.c}CPs+!z큂w 17z-WAWp/yᔙLWo[sDx־)k7᥼I-ầ:s [sa[BW9QMD3ř#eakW#i'4<(fGҙk3d;}J=N赩Oy؝yQ#Ds@;9aY~²{$eB3.s1=h{;ŌQUYOҚؽSN"$7ᐜ-!LvyA>;vڭrEOKW`1f18{ φTd/}#728վgU)'msS)('tT VX7cQdڃuM)Ʊn 䎳aAߍ>Ī1q h;i3u"H1jХ4ޭf7kY\bc$'8B8 @Sa[DίƸk {#G, /~e gb"qKRc5=w}a RDЁ~C ~}R^ 6 ɏɤȸMA!e#ۈcȹWU++v@kXHAhc 5T_Yc!|!v@(!8KVw?.RJ7 SM *s~zxWZM` ]`Me'4%Zϭm$!R>])`QJLXԤ{T0 a׶d;d7HSAƺ0E.$z8{_"#מBxˆ P'sCPc[p {e~}G^X{nf\EW5)oK![I欖PF0`[s&ApF}G4.J8ErjgdA>UЊc;arS1Lgx#TCHfCa6J%^:4Gi^lr,s^olXϰxݺۧR9wxǼ;GSJ+©ϸ6y16.}=pa Ga'퓔nUq"`wOtz<+S܃ifs|b}gZxƯ's_Oy)fwOzkï MaͱyR1g:(b#SwĽ1!݃#ގHZV.ݫGFztmdG^%E4vphz-2;mFFZQtmg==2&>Hwق9tSuE! "G#4ӌ?vPogϊu{4鍈'o .c/-1u군?|t~ b}:F΋l;iTWweAOƸ΢8NMqGƦb3PwBZ|=OVVȂ\mgXyy31I%+iV$4;I5^2C%I$+YYIIRPI^$+I$N\|}s>}^ss""2bڤKo[()"|X/fGdfD6;+[ fl=D&]Pjyg%[Ѥ8sBg+l0[*փRϖGnLibV7 %]%̼gxǬOIBb"W O}Jizillt^b恦tN|tUsH2ctN\B#g lrI0^S4Ɗ&NgƱ^(1Ӻ~ph船>bX` U!sQBidK +;3346:2q.^xޑvϨlzQiiv2sϔٖRIȬ9); i0ބdkB45΢vtλ9a%ft@=Ťʍ\6mꂠyw!KX˚\eb7t/ Qq[ @-zA`1^اWJ`A}:uqPvclC]D=pQG: Bq4}vЀ,ӡٚ_ t$KknС@Љ a[G3w)TEi`p-Q{ ')\=:x0< в`fTCËCKCUB'jZO:"C?=!j?y5t #./RyOF7GhKcW"ouC5_fȑHDQLkPhh`;̿h`'@F mmϰCDG{iv%zFKR8:uΏ..AwYtetmHL@aԊ4Lwβt%5tV:+/9eVXÑ Y`]Y=֗Κ_G33֓ہ~u,!je?r}9:XvG`/bZ` ;kC75:JDŚeDs*2DFgX 1EOMб:*kifhض(fjìИ3@XP5zEv.`EgMˮ]:AV`4Idzvs7-#Xײ[wg. ewg;1H ќ(@FPjDIg. ޢ95t_(YO[5 ;ށihQ+hSlсU;hR{'ؓ5Wt(E GkP{qVQeZ:C^{qxюhh4trZ 5sS;w;]NOd5њ59#4kRnV拎bC)͍lvihm(]7#G4_t['V\с -:rmlvQ(9ڮi[<#ޤ#5WLDc[;-s۳DkpG- )<-,^]zyYl[Cx0G˼^PYXxs>őZsCGj{c43tvxsjof֬^)AǦh6hScft ͌4rH<*pAGgk6h,B ieV謦q4l7'ƧħgeM֥e`UVޚ:jP6e8ȋlqH@xsJ[DG{H`f6\ e`NAI(7b4cf?ɉ3; bU1 [w;N4#A:kh&sCfLILeVuOcm-2+`6[<m,;һ L5eWy8eڤG2h璏G_Է$ [sZͧ{X:kIkgX)9htlt˼/=q3!H=uJ{$ sK֍К$f'fˮ<$-dK^=|6h 6K)IW#w3YB&J9f!N ډ$V}H@\Z" 9K96Cv;'0=DHjv7*C^E+ (Lc&m%|TyEYH>z>zXK+ikV<#@+wpux&ir$R!OwCnK{/_7Q)Ձހ>'gF s,gOX3:=+sۖHQ33wsl0W=2+I ֖Z:AW1p9! 7 3k7i3x] !Y1!]p} i\2S3&͛F`= j7$8fjQ%s>VL&嫄U9I|ߣ֛wopިi2ޢ;'{F؈Zo5! 5jr ٵO3Z#B9pU- 3`v$D^kXԖRȠY ^,Kָ6~K' +K}X&j]ї(Ae\HcﻇS)/.(|9!}A|H"ֻF)|%!]%bIj* tJ<-ppF#SźlEmgǠG99/cuqI5OoR%TƌuYf{)Хcc)<ݹ;KDwY{:: Tny .sSQGya~-_4wEm)u+'y/5uɒgR曜qwC:lB9vxn{z<#9@+n%(&94h{<ǵf܀z_nS鼮yx8f?Z 1&Xl=: fUB|<W"!3 p^ 136s"Ty繨UMLR1<_MQg&+㹮}Mr}oH!4 )G'Ṗ>)  /DS諘_#Q/n[c1>{G"5^MrVN<]Ωg")?żoHc.B6k((yeU4vֻfjG} S[bjmzS[O,$3Zڧ _D3呭 3$m‘Ic@&̠{>J/_v9/Lmߦ {кeѿMU[5-w|Y6mտ۹t-c$mt줙}D;(q\r>BPlBr&@hG `=ќPtҾPC>5xMT-?~JxpfcT# v$'\L8Y@؈%\FE]ǡTi舫)d8Ϡ:Wωe`Kao:|{89^5Z[֋Rka}dvY{?YZϬQku:a}gn[=̾˾Ǿ׾Ͼ~~~ȹҹʹѹtq:ݜNO[y뽍^{{mm>{z;Uj 5 Nrt?uAzWwJO@=8 ͟>gߏ?%ީ4M?35]+o$աţ4E_6xt6CZB }5_QCWxL .M&w4:f_]cxh=G+Lk +̱::V)lV^ QN֍Z=WH%ƘnYkhodV_vvʹh3SL' m N8Ӟq/C%$[Am 9LY vz {zzCdZ+2XլE Z ϭBaaqs,9}>/[ժp^2F4rup^\[1N:o_M}c b*Q*6} &R[+vб_(N2·/:|dmG9&U!TT~t~ KsЁDn{CoC/Q2HأL'Fh p\#p0J<$&X2 :fHąR V6qC)qQD&#\Y8i-~)n -NŒwJ{@th.8+bqx@Pm ڈօ7\+u,ELp1uMDhcŭ8Gk,G`Kk? ;~&mEG c"[$E.HJR׋DWK0qxPLS̓}mK].gI`ChXx.7^{c'N!A8Wp)J [ wQ|GxqrEk+FX0(© h- \Lp*RM[{[;e3q/a“}~B0a}{Z'Hصhаބ'I8p<ᤢ|S g!\?-&\Jpa)&­;&Kx01“3$ރ2.az%MX1a3 -)QPщ+aO~K1p48‰S*kH\ńWn"^\Ҍ= ט)3cqšu ^ل0a{Ž]K]鮢Z[u"1pP?V \4-fK.DQՒ,}YO}爉s ^~NgO:spA(1ն4~*z-5I~J{D9]{芣0U 5킃pRe'd{Uɑr)7veƪ*T=P5FMQsZmU#ljiZ=k5Z"h6Z<[yU;1VG BUg ׵Vjsh f7rYuwUNSşʯT*}8xק;UP?Oլxlj ^ *W?v5 \Ƹ'ΖJحߛml554cnte\hlUNe=?,VoW_ɕϫrϬ_X9~VWJ~hgVſ7`͉Ŝ+H J8z g Ery%XKv5z ;@;˵Bض7V{;u!?a=cbayEҖc3ObF%ƕq|ga; [wX(^BGJ,Öw-9񊐉EW_HP(-v'{D_;BZy e-ư-J߷ߤ;Ew|BQzxe ?T:pس{DӼyU}F4ݘDXbe(.ZO:Guax@L08=xLKc9X>ycYߋagA^-eyxG3;Ml+6cxO$o[f|L[Z2CȔR~ yTF~! ς/ӗ پ// by=H>ɔ=innfG@= ٣QPm{ cp=5+puI8)(t;&'ɃNNKJNGxtq--ss+w~ ~NxnMx̭֒m4wlu_ ݆m,ope])oLβ/;En-veg,oquG[-ytr\3*{yғ^K>ɾSӲf{wxyr[ ig9T{rD$:VRKdX Ni5$Y+YKݩ9PҬJ35^+f9ϻ&{wyvUUyG~;,_ǣF*oRg'@=PDF(1d'&'f[csYO$v&vZO%Ԛ؛kNK췞IH&%M|z!y^r.Ga$9MΒb*ֱRYn>yH*CEU\UWT]<,VzST{QuUU*Q#X5QMU3\H-Uoj,r 5G-TK )S[N:mV]ji OYIm պTw]Dft{Km!4>S[ݐچn)u䖦>$w}jR;]>&w]jO]Mt7`?.)?> w_Xq}ꏈR(kS>70w됑밑K##WFFcFo\Ǎ\NNn*7r}r/(HI\ir˕XJg\i?˕p,_:,_:,_:JXr+\iJYtJXtJW3r\ir3u\UUȕk:UUu"#W#W]#%FzoFFFFFK|\M\?3r55r]njf:亀XZ2J#WFF|#FFk\\\7ru0r`K#_F#_G#$U$׵$/tmoTe}mu2q!#yov1| 8A9|/LN`\NPT?_ Pw`6P Ru5Bu'\ s8[8 RZ2CdHe̎tZޤ:UgunŶWMuW=TO [UWÙO{ϽTW]夗TgbuM4Qm\: "HpPj#cHh ~vşv?K=kϲ%tzI15YFMQW 5MXazLϋzY)\S]VרkUN]n8;[>LʙDos~W- vj_g͙Gs˙3-gz ;dRtLQL?a&a=׳\WcNRXPvBn(ͽ,r0sfs*}B5IOߍBlrQ|:ʂO1tL->]k ? !C1p8$ )HC5ȁ:jP.:{G>>4?q~MrhW`J ZUWchBk@[χ܀_bF7A':-ۻ¯܆cv}PcA0/,q$u7܃{a$~ `A /`oK8 _v_9@!@ r,%r¾=raa~)> X<.'w,gT >f* a0},SV=9&pRiU {8S5p,vaBUGcuط;y_z_y_{{O{A 7}>jm'r{G88(tc9>'tNGr!'DĜls.wGw'S^/>3w{ xE{^Izz2yOf&#"bD"""",<+B"Ā[dYDEY,,"""bDDɀ{w{ޏSUuNUWR9|VV((goZ;r^|\T.)Ϗʏf, YٙeLŜ2̙6gjf| i`f0,,,¢,rY%`R:]sXv#knbfֈ&ʚX3v;ZB֚amY;vk:n։:{Yvg`؝=zXO0+bXoևe~Q֟ `cl{ fbCدPƆ0w,fh6eX {gX)SlVf ,ɞcl6cMeX%{UKv}e?Y-;RRO_goԳjz^~^T/+ͩQM\lͣh RU4]j>иЂZH k-Ŵ\-5nj7iZ#VL]kݡZjBVݭu:kji]nZwAS{X+zk}#Z?Q6@mv]z{Q[ߣwջ]nzwASX/{ WD?7gc0}湿҇迆0}8uG(}>F sI}>A/'eS$}^O+|_N};w{#_FC6v~Hn}MX.,'Ok2^8+|KJqŭL+ȋA\w;na\w;nGq\w;n\B6yg:6eW3!TUm V b&5}(};(Z|:.NG qN|Q|EC>DĘXOA4ӛ5ߺQw5케4'L^ sڏɶkwPүkpz=pIyz*3*m>/K5^" 3 N/AStٶIRO!+uZOd%IbYh3D{bY(NķdFhfȇ#v#m0B6զc5Oɧ9JzZ4L3BN邒$gr,T%M+q+I:\4JCf!WEi!)-JGL)R w+'npelKRf Õ9Uv+j6-›l {Q^b+l%{ |FأZWPMpTPP˅T%1CCPT}[E}H\{W;)`t뉯[[ոST E&[Ӓl#,YX޷|`gвcaQ'cO--YNX>X& raP!<-L 3B0]!<+f 9\a0_X ziVG\ 5+'`#9 ^dذdحJrl"rښduA_e˿L|е+םӉ~c8=asqq{ľ60R%ި6!@z_gW~M]N}Wk~g> Io!'HCXx%8YX9ʄ+L9yZx-8C*gm_mHA֓7l"om7fAvo?vlwK&JSAOj/җtA^(]2X{;kViOP:$},HǥϤ)+T+}'q\V1Kt*\%0r_(ϿFŁq_bX)ӊUb^,nwC1F<-֊-bPǢ_aidijiaiϫ[,,,C-YeeY`YlYfYaYmYk`b^~h[NZXY.[EkeU>kֳ666vvNNΰα..l]inn^^YKMTElI[}[Vhkolfikhbak+*m3mllKmmlնͶݶ}Cci[vju{ M-m]E~Ab{^aϲ///oo_v ˡ8|#hhhhhXXxٱұƱαɱͱ˱qqV6`!mlMómv.z'=m @[;Bݴ5ym L0tv#~z7|N;{PS=iW~`E0;}i#!`?(}؟^718>N_t p?9>AG_"Ҥ ݹ #1*98Oaqt8>IaO(`) HXStp-NOx:XAaM'24N>C'(̶ Z|> IӀh%p6}8Vytp>}>O./Et7t.p1-\B_҅ ew3L6)XEgz#6Jo65te.K+2+,,lb7gf>;)Ζ<Z gG:} I_n0Gwnnko?7u-t=p+}nC7Mw[t3p'}n޹nGہw{t'p! p? <@^ax~np<<<£7Ƽ /6ތΛ;x 3Qc|a44N_37Y[8g7.Ke#'\"p+q;w -y+^[6-oyޑ;{xg~/]w!ޓ?̋x/ޛ}#@k>?|ɋ(>'>8j|b3>5`l$'He/el-[bjJf{׶mlHcۧ$3m9NjI"˶on!NIu=LےG$>^Bnr54'[ȭ6OI3YYr{ތy֞=&&B u$wJ/J!`.%z_vb#WeC6r+Zn-w!kGdBȵ|N>OK[t[HIw̝ ;E.MwK{Gpݏ B{{tK.s RvQvʞ=O= s5mg< Xe6[WIaޫa_Fɵ/!{@?;_W6|4 9-rim-m; RFon."w? Pw~*,b2 jZ~aqI9lkvV]4Hv2~v~vAvB3f0X٥u ؄˳W]ES$«QOqeA3O(uQb =#x5p4wAQ͈ҟbB E ̩9SsQ!JRŧROiqFĈCbD)S*'eLYV*-e_9WN*g feY8)kڱN+zl0FRV*L6-bKrUl3v};jiV.j>5&jZ6W jgZSCbD-S+"K~όWy.zEjTS4Ŵzf=׫w-RmJ[mҶi}!Vj::=OIBYz^Oҧ39B}R_7;!^k^ћuyUo666vvyyyz%2o;˻ػ̻»ڻλٻû{{{{{{'2|.BoW[[{|;ӷF=þ㾓3sˆhd.C51F}ha1:]Fd / |-q9xi5np/xG3:^v2#S UA3=w~0Iƃ/Wg|)_u|w?OS,,ۯ?OM-=}C#creJ:&6.^Q1@W@ @

%+7x x4x"x*x6x!x%d e!5CP2T?*5ڇ:zCC塪МТвКкЦжЮЁЉЩЅЕ5v0Gpp~ <\n. +3‹KëdD5#H2R?)4FG:GEzFFFDFDFJ#ȂȒȺȎȡȩȅȕ5uG(Fhh~ '(,2^_??/&Hž OBODDDDDDDDDDDİĤČĜĒˉ5uMm]S +Ik2+NI%%M-]=Ò㓓ɩə%u=ɓ3sy|>|J` s(͜jFw;pmMb2#j:5Y; dam;ȝH^Nd΍ ܅\͕lD|i15dc)cL`KrPCԯQ*xTA WPb{a̩yPYFCr/a]>Ü>ˇu.36Ьc)8?(< 4ω3pM$mȖu45@%J"#"s:d g[n0?q9VAF\<skbHfhj{;Qc!)<b汈(qG39Y,Q Y:xd) 9 i2p<@15fƌFy)=i@#G#"rr|դYқ0m4`W0+i&Lyx#p7[<%=Ñ#cpTNz99߉'9G45NNk܊y4#G"G! ry7(pI7b1;MS~sĜӒ6Os88pH(8 ӹDN@ND>|Yiqn#G"G! MYi.´pH(YN+cƳ5ҤY1mi31g&LK6bHs8$7@xuUG[$Ye2g)ə>eN3Lg`bbo} x՝yg材$C $$LvƂ6kZ6.eYaźePK*URKmJ1Q>TRl}^h.wJ}hܙ|?3̰aBKX/a=Hѿ7DMLmVی{l8|6e0q*3؟;#0}Z+zu~2.˔8%lf{t:>% &\J/SaH7WY7uBSRmJ2K#yD$/.49"셤U+E:)Ǧ$b:)kI #̇3Ň2M DRIOVק0«S㋌p0*Gu4ՔtÎaJa~q?W'|LP U72F|Y?ֿWYVa7kjgdF)}LM@ lOg칟z?m7z4 QFmYIcim7SwzVҞ~|<(#LKo&ַ:!P^>)_b9 61?$jrrEn5y8툖sp}ar~SG觏PG(#"#r1A*`Qx\׷3ΫcDo0 _[|α 2d9Ș#Fm Kj˰p2׃_c\=ya)OHl{ȿ'ֳXf֋Y/f}"YrP[[Ҕ2Jkd+5wڗ \i-V=e4d&#L=6Zg1zOg}1J! 1bx/=ZWF Gz=\o)B2-u}r<%-0^%b} ]lrr-RY+%Rb}ԹX}#VOpb=D>ѳO=D>ѳOUԳzVQ*YE=grS~O)wW S~oz8~U䰊V*^EګH{)"Մ_M5!⮡tkURXC k(YC:k(J#u֑:R[GjHm#ud1Z'cNh:u2Fwp1ct; _R& *<(吔/尔/Ky.1?|?a/3?c ~Q~Q~Q~o3m&䷙6fL~M¯I5 &$_k~Oߓ$=I~Oߓ$=ɽՌkT9fVA(wԇɾ2Y 3_o[[[g @T7פ%F< ]x7tN~{&azU)x.ݻ3))Sے_&T>13}ۨw.W<ʼITO/-*\z*AJ)y"7ݮDgja?Q' ~k=.>` ZAg5گ"ZE߁MH_5J( +ʾ[FVN@͗h@o`ًt gS ] iUwQUuwbʯt(xc{;iw\,zJGS\Z۱ԻEؤÿcnO폧׎Sak#s=w{:$eՂFV^ZS:Af܆]tmnaSԩ>rg]{sj}!ᇢ[,{upPuHўbKE[CbޢĹ C]^"S"t#:vl{ v'V$H;9Nol/3N[jO*Lh 5k[[NֿR]k k(RRw|-.%WxF߶z亮%%%̺]JH`DH[k-7|WRrwi`/9O"E4I>F0 NKi7'r]K6I~ !~ơ(r:ψ\si{Ft}S?'[\EɄ\2V/2@˟'cuͷVk80,Kl tyIjҴ< {RJ=滑v F #'I6L'P">m3xHY7e>߃Tbq@ҭHڏ3|?f֌ \ 4dXjS)_uyyXCb-b di{W{d~9߿Rt1Pg >b|Nn0|݂s`s еO`M[Y|(0NJ:n~SsbO |VcdbSMo?jo[SMuZxY.k̋WŦgVO#xs\7,[ Ă_.IQ|_ֹUEu6u^k^f,?0~N9ZS-}'96u֘\i=ڱ av-QkS/ %%e[Ǭc*hf2778gTTe|M*??Ϊԟ.J=ݮRwuvZk7Mo{۞{?oPKOS_(仌B>QU]k}2@ڜꜙ֞P}5Z\뇈>*/ ,^DNg&/ObܣB =2CmW }'!'Sp;B'gԎHYdv$>pfAx+,'\.RnQ)wKwޓoM2"%x as+=v~~7fy.i{rϽ ޖ<wҭ}7oVi_y{WNsWR›}iW8)<}1R_&eZ̽Rn)$~S_2D-|"KRxE|"BJx[H"m2?t6H) G^_%)T1*8)w`B[CQbCz1|wJ9 >[,r.%%}IgIwm(K.Xxɞ%C%J0n%2^M(DDJML0 9 ICH{sokkq=dw aNL||aJhS0@)))Кݧ`'*V_)D)d*][`)>Z JW񝚅zSM]v"u#>uԇPTgSԷ g,X+a0^eй s cR9Vv GxC˱>Crrn;qQMb .G:NQNQbBEV䬘^UV8F6~&_SoMMhZ.ĸ7=մe4f {7W676ؾvly ]͐pf̯f̯9X͙>q˜9snsϜMl 9mKNDR,iewlhyeGˮ}Fl iy\qsL\YvJ-mRB޹=wwRK)b+|hk[Z [bh]nhZ nVۭn ΃j扔<U̓cކymSkޮy흷_zN׼73y/GǞ;|͇q>·Ac>ڠg[A[mI-m]mڰ޶hh;چLmO>91<;ۻoko}c;۱_3o;p% t,Xk\?\aC^Xi 0 c `чhGkGGǒ}~:VtqԱcWǾl`FBI1_BV/?.Dl \H 7-Yv!f!ޅ{v!T,jbkcXMb};ю={4;LLuNI){GbxD}K,^+%8|8~m?_+{8,߁L|_2Oa8NEФe\cέɒt>9spvbuj 1]$-*rcQ-b6H}-Z>[zǭ1\Xt,M wMNMo˘<_y~DoV=s< '[V[vs][H[ O0N\U>վ),uJ zZɘv|7 Gzz1/ײ|EncttfYr75QyhuA?a>'+a>%IBեOBa Gl6g.#`:v[DkD]_{Fы'slRM} |aL!O;WDӷ= cqŧ02ݱ1sJH'akO@b'4<mH;Jksf^3oZbL[@0x=ۙ$G(i<iVg?{jJ.yW7;ȞCt/FnuqjׁZ~&?5WFS=F#:*)Q^@0QZ뮃ÿh'z ?^LST>O5 =^Wb uvPB$c>Vc q]<l!J>އΑfeZ*$=c1aO䩡I3v)w zuen˱ֻLYn8kcԟxnuю+w5;ڣw^+j06s1|.UFL¹D|{i%t(-CbU]MY=,G?uC{9 ^z\ ְ*YƊqV`OЖgӭ$?yXY4)~xaFvRo)>JeNr޸r&e:7:8F#RK[ƺf`rģ̢cw82K2G+JNqHxXb碱u_t!/tݨctR*Ocd3xu|*H'Ltߘb:Iprf>#kzؽ 敩%)Kz|W,eY)άeݫKksR%kI{Z9Rz]Icd,m%ExY7μ7:2zπ^W7/Ml7-GLUE쨳㐟&ˎ8Pͥw8ߎy";6gkA;w]䝔Gp#i¶g>5^J>i9e$cK<_j59kV4 .ۅ ́nWB7ε'"nIs$nxɊ,O ti,wY-1wk\h-'vʕnLc?t_\'+Z|&GvJ\9:"̻\D9aHPtK$\R#|8;ڼQ՞+G%H$JrsNLuG&Xh s7 *3(CNsQ"RjW"BՑo$wVF3>}U|Nz#25̓^SsN{s<?Pybko'YZǢAap3g1~lЗ`ב./wWuNLP'ui5{FȊ7lu$wFzڹ88eϪ} Μ7::ԾcFzzghYm5v9G퉋xݥik[=R59Q"j9C9͂o"n+We17V39}Y?׮7l-2D,<'3m"ķFs=|b|GD\ec]fL:+b(I P#>]P"L&J8h#$v^N|%멞-cut`s[țn%v*眯^9uw#E`#kh%T +OL`'E^i9K;5 ۛU>r͈hh.@]-8B9II'No\KG~|Y]ڎ7WPr#wQ`$E)ׂ'r'jEc|&')2]a0|`' <)$K)H0<-ҹ;"!g_rHgxw6/zRk1lWgOQTӍQIǐzn=ieb^~ճ̒Ajhfw9)Լic{`WZ >tIRZr Pc==r596-1^3IR2Wg+?AJ¥ڵrtNR!Y4S< &Kxq[s矼w`$}j֫/>><7-JD`q["'T )i@x1GTq7}Ty?>ìRgdV{?J 6㲸 #E.ݷ~ 5T8={wB:O夡w"YW⧿,cQxNt̘;^7IiD"fdU{NFq^k x {XYKW^ү\~?2JHeHVKeȁk'\~(g6}e I{ߘ3]KRs4&ot|WGLpYti\'}>m% )E2r)].FϜS9%z[>we'+ > $qܽH]3w0=P>g_u*Ere۟?O 115MiʲgUᯮOU)t}-5Uڦf+6\R¯_Q''T]dVTCd~d!vqUa ?:Y/XUz:)1ݞ9noQ!VVooS*^iT_۫U~~T~~Xj IjrhQhJVRSxxU. hxq:U*8qmxf"õ-h*~>r甞ʨY|hYnMlΌkC.Yqq-j f };|;ovO~ =]mbK 5y) 5C07@'f A]-fCOA:hߡE=+hyWϻZ|b1S| Y`W){%cqqޥit Z Xk#eőhqqZk̳RDsۏI߯w}ϣoPΣ;CB ;,}AߋFK{}GwT.1H%6-w1ўv>XΜ{']L=C/{>*mZ) m2 [[g" OY`orpO&a2`?ۀ`.XqR[ϓ [߀U`%rbRh _ث` }0kgY s0v݌к̯ɽ+н{̭{~`y̖ܿa"~~Y, , ;,vC'mgrTH覌%ܻS;w3W(`2VBסr0tn%%mz}#m $h? ڏݥӥ-SitiCpEƟ+3O=^Wa? *t)|hB'~_v`#r^DgPS?ȵ }ۑ%S~3Oߪ|u#VRt@@':+Ag1|tU.W]:t'iM?D+45r.?MDQngng \XE*P|211hb[w7BmU^UwNt|N դ.'|eT֨JGujꚴO|VjШeYp p"'ᮇ ܗw*^8rBbNW5kT5uc Ts܄4<]sglWJzOCz}-2F>šQyq.gRBwkyS3A<1>M fy;,E gN4Hm={"}ўűf}L]i,5=u+|Ǡzgͽ^{9]7d VjQAm jINIY8F*N>be+g gx G9xvWN0U9-y/O'!VxrRԊY;#D&jsE_⪧3ԺdZTt|:E .};"+vfWbe3[ m/ME֎)JeC߄ O; 6[~,ᤧƯL^)Y]Ncx endstream endobj 243 0 obj [ 0[ 658] 3[ 220] 138[ 552 278] 144[ 558] 149[ 430] 154[ 483 504 455] 942[ 247] 958[ 657] 1827[ 633] 1853[ 557 539] 1858[ 550] 1868[ 558] 1873[ 574 544] 1876[ 532] 2868[ 579 579 579] 2879[ 728] 3397[ 747] 3404[ 747] 3493[ 743] 4666[ 415 415] ] endobj 244 0 obj <> stream x]J0yY^pU R&0M}{'\&|)do݀@q;@bnIi}͸4E4E\3pq_# [J߸ e0m$mz عs| 0.z\uȖfTjyj8/y4}|m̒)uM)B2oV endstream endobj 245 0 obj <> stream x\ |SE{z-WBKGBOBYQ&ml$Q-*+7 H]@Dc=vEaAU벻*bo潤),?><;f~5G }y)ų?H9tż @iB/gUr9 @3jZj]i>5ucH݀4K]3[F=% ƖC?EK NF 8߃/0st"#Met$Lm:Q!}m v;fZ6)\$?b3t;t n1,g~? -˰t:^o5908nsĭkq#>p;<D|Mnxq<6{>=(soq ǰ>xq?<;؂laK4˰ ^g2|v"7k݈#,[χ÷y^w`⻰C|^@GxG^FGp@< =UO18xup d)x ۈ_;_»w+xkx/ ? ~ !_Og7 ?㞷'3Y8O8/ !S] M;.0n!a?8B 8*. й؜GT՛4*$i09&c܀\fx.9h|^,ħ܆X#=d?ZK=˽Ž͝Nspƿ˿جxDq\q\InfhU*|֪w7 W5?5/ky|C#kBbRN*||j"'Yq$BE]>(9F>#ߒsSq\O\5kƈýNQ>|%>+e D*+&(+B+N+FOrJ^WӤ*oRQ>ݩT2DbTcUT>Vuasjzz+IA Gpl?ϟz]A9p-T]{\dP$=g8A0,Q[Sq yz)y;'i=6uNJIC&)א-D\2~"?8W,gf; õ7Q>Vl+7dvȇ8l0ّ֕~sqx@hK#1,GuwFvsRRRеnPhc9' &($:61)U…GōyJaxZz*V\Ln/4 8A!qH:L)k?~n.?ȋo=o=|S˛ݲA߷y`tuʯ:r]GP TJxX}r=Xg!&!q-~Flfu5;vVB*N :(CsVPL+h\Wr]M k8o=8&H!`axS9!TΤ`VkG'%zM2)~ؤqi* as\Ba9 .͚#LX&S+:ERє3I&Nf6! &in&]rTEt I(k28,Xln-6lr+9BXpX0e07]ih5Mafuf [Gp .`-bhu .&p\`h1#?v;Wn3de h4X:C' I'~F#u59D&vm$ MbmNg,l ꄳhg y1NaZ٬"凴vՆvaͭ.!8۝.E25&J&`ԍlDV ʏ F9ڀYfe TT͑%46Dj0-YT%`rbl].J`Sz;؜YheY2dQ뵉\XL`PYL[8l޶LĆ6|otT6ڡ@YdfҊ'n3z%Q(뢧 hBq&"Y Ic@g-v4NU^櫷cwhld bC en14>DZMk.hhG(3f52dhv-yV40 -NC#B#*bs ,qujµ 뭸꛼5fXaB!WԪ!^JhCMK=A>'7pEMvjCihMId&]n2TX!B]jpEWk`tQշZ,Kriw+n3,RP{úϷ940w*׶6K{#q lfcᆘcbc(fT-NDmed~mfafk4SEP0bь`kÅjjlvIGF[&a1ncqrKtowQъ:e]Wv]gn$9Bwv!Pf)>k%ev]2%ۿP:I+s+%tT)(Z)/pRȕmXRqL0]EzqRK.* f$id T>Zo%ZіffiaqBYM~!yraFF%{-c^iJd哬픥=tٓ=Q9TF&x5p0kotJZ-Y>/WjZ*Sof~q8 S{̒~Q:#j勽6fIB655 &]'$ ldx<ڳHcF{6&թ$LV=9=LrָqhbMIm%Ivؕ֔Y(wljC]M6fcokN߾cD#⋂ޖhlgt5\,YDi4]4>|via<2h";Kγ^tV70,~GOFߛ ZuzW˅ R||_s 4|gg{zR_m29 ~F>&^IC}XV}|H5ϳwvF=[)K,fϵ+>]CL^ _7ݭ LϮ3^+^rNك=94Q ksz;o3ȷ,nw?nt뱜A](GiU{_ k䍻|Y_nq"lnfF[lwts%ި]E_SN槁?Vٓ(svzv:\X/A:\3aޣssTi: v]Pz~P/*}-Iе%$K{==9/hh=/AY|;AFnom=鼞0D$N_ni{u &v(}J5n*65"M> Y62]ty$Gn'~{϶={Pݫ?5_STIwe:SZnWӞujc7P*}z˧1*}a=ݻB̲iPy};J̄VD7go[3췲v~KK?ߧT Dӿ`?)$gwSvHyJ"1UШSW #jn ش#$7DRf\Up(ȊB(6WZ?:d`ǞYX"3S)bfw׾Y-EqDQB~f#CȔa {@ >'-Q\mLL~Bͯ΍GMLBlmt٬pڨQM-6)w~0m רI"fW -vav$}00("|-{߲E0}Q̘5{n}:Zf/ʫ+%EecrsZIԨZT 0QDs+Gf9Cy ;",{ت<)~ӶiO%A]g\W߲ {d->ckҲo{t6&S]EWܭX_[N{ oKˡYN^*lݤ;cW]J~y:}[%ßl=_Dӽ>t.7O;4 e7ݦXaK-vږX1˒ל y%7DdVpK^3aC Wξ}xGkn;z7_s #k\kݼ*72y;OehՖOeӄNm=潇[TsF&qjS>4^0ȼuM;og*H .!`T k'%4y(A0wm\zw^ %[~Y?bQf*JJyi}6i1)4c5ы9k.B;3Xgtn ;U z+z*U=R3S-56 ▔ .95[TGzUMTww> /d ujd^q7pޑ r@mZca eX`W(;H- IΧj N-ϸ-D M)戔dXǣwRX`!b/ŒwY&LQI@T|$5iVɄ7}jG`0|Ph'<-d~ѝSfT"N޾$jj|ſ/>Z'FPPNCE^b5y8'$ | ;kILUahbHeO:S3v* ӆ ,qpLYCZ\Ϣxya"!xUCaҔəxבөkxprzܙ !?HNV"ܦO:oZ6#]q v2&/Ct[~!h ]:sm7 D*}>@gCiK0!5i;ꌏ8|ӥo2Q&so3}>Ğ _/ѾCՓ JDx7$trQ3rB8ucMM<`\yVҚi.'G9 .x)6&+#9^MQ~xld3ѽ*7XT]}[}eGQW:rX.R:B+&9j+;)蕥V_g|rʟS~" 7:%U#kYs+(陧ӈ0]6Lm\EcZ_1(6br)M}N[  $G!L#(QKӭf DLxoLd&42GMI@N"J;pn"Ye_4l;U=!xB'x} ݮ4c#Gsd zwVre5+AV8$!iڑZ7HV]dPG#}R%J,es.] a2}[ְ/g?Ĥd &ޓmSܲbjҦP{4)_WJnB17~Q͜VZ k4u jO"_i PizHt=ț@H\ҤfAԥDk/'J&2^`:?ϕn3@Fkׯ3Sapл]'լ?J:,N9@*ݒWT5*$bDQ\sֽنՄBoo Tfiˈ;0 7)=]scRg벧QjcҎeG|2WJWޏ>\?C0*aʗl&|!>c5'ZVln4J|2IN\̬7ޜH:&ܭ2s0pE?ۨljdcz =߽.^>i aU)\%4sl.Mp[R0x\kxgekVdj5[2fMMS֌ lKDdsOȘQZfJ EmM4at2bgy9=*tIkF$%r}Mhс||<[t/}Lp踨_'VmZXKt#:*=2z/]9H0@EN􃀿(1+!)>Cvs>²XԸ:%O`/b}aTub4E b$l=Y}5ch٪QA |&LNv.j闻|Q|3' (NNw\-w/xal;}+1z>Kίl&EFPDEE $ 2%/Lg_M'^vile⚴ a~?#;7M+̢9>請3) `l¤$ z5z6ŒL;:+'taNE'B>\&1ņLH&%ȝ8@;Hpa“?`>3̈́muוC6i6ID0f\&j1 -.eiй@9R`OhX[S\*\}y^7 30;苖B~ tceRŒ<kv,ڰPv,-ٻv[td;?i/dnLQIu!E|/{*e Ww5Z]C*u'E) $7ښ:}YlP9"8u\x4 w!.GP;C-|=Y endstream endobj 246 0 obj [ 0[ 500] 198[ 979] ] endobj 247 0 obj [ 306] endobj 248 0 obj <> stream x] xU>5ImڴiJ - to--P(ZA6KP+: +8l}@aԻ̽}o|g},qX >tlZ~3/3|Ttn cÌ񿕏_z_;Ș2ftYyŞt+3|8ziNo2݀5L}biQ_y̅uz|Ҵ7>1 O[\ۼ^n PlcG4/\|&x|`amK3b~< ¦386U ?L8C ሿǪ"}ٍWf0Ջ36/QjZZWO2vxTvMs~W],V^U݊%n:{~mw,Ą=ٺYzCG[>7 F2) =mR73=)L _ǿgM}YbM2ˏ nj!Cbe_1Yb,f1Yb?93f1Yb,f1Yb,f1Yb,f1Yb,f1ASȈաRV07RT<Vϖ{2.'?͖w=ӕ>ck%>oiR~x~lݹy+?wѿؓ_/MhYyMqႆΙ=kfuUhS&O8acFW,qaC .,'/7'JvmshT>o8&/Z8j9j^*N,hż' 䂓JdXIngxe~o9 zK> jx$|>˼a^-Wjl+)C{s߇-pPʇ+/VskÓT}jJ†ҰQk˻H]mﳻ;_kgWZTjS6p/Yڏ\rC<qS=9v;|~61ؿcB!&K7D_.H[TQ#,X+5"gqDN9VKU^^ k9F7̯k\/+y^Akc-oW5"1 Sp+`Ѵ*JZ84jꢵe_2h?jص}׽c ĪE?)XaOs 1}jJ~{><Χ=QTZ#7昼U[QÑariI{bxJP'S:FdjG3]rG eX9?5*-:[P֭'4v0ڏSs}0jrYjN.| \b]07CUblb7?n*md )/T-J)`E-UKǒcNʮ~ѯv戭nЗ^X>>&fM)Yu篨{ފڎm`[syMP6e}ZpUkų8>n(4Q~~ ?̪]vƼO(\)Uݞ]^ƂW^ H"aʻwkruCKupLY]B>;=(W{PI]r>Zt^ 9vSD%2ڙY4V%^ WP6VhsqA.ђ()||(֭!<:>̪VO% Ո=I^uՍm5`)ثaŠzlQa o)-.ݶ?.b*tTѤkzEjl`fU8.>g,ʍ{tV􃅪D]cNe]5ΥlE*qh!.JThuyC:Z&ZV-Ϋ= Ԧ>W<-?@|p9šolZyHa4IF+z^GV]4ezYim`vG3c7A| m+}:6G =6 dU{3*>!Z2";SYշ/MDC^+NnCc]8dGxV donk3x/S1֜JNx+ņ\*cەmcx(9tTZB'kwO ״x}Lh-ddC`(^9nΔEĊxۼvP*";uдyc6F- M\pl4$n쭩 4S|>7N#ػqV &x&B6"jw؈ӂohEucmmvn+PU ws_ B"nV~/>D>&p%ypC[7*FjK]F P)Rh 刂tDos{*lZEϦV'"ybY !S OY%)UdWbzUnQVWEG_)Q5xwH|{l7'x9#)*O"Q{Hy?7~ *a!SazLzv:Ẑ%+O2X\ Q1݆9*wƹX,)Ε)Z8[X/:)ΔbgHFRb+hbR,bht)NbR,b RKQ'|)jbs#l)fI1Sj)8UR.4)J1ERLb/8)JQ))FKQ!EeRJ1JR(bH1\aR X")H1XB)I1PRR"_>R-E/))E9RdKᗢ>)RxȒ"S )RK&KT)RpJ,ER8Ka"Ax)RX0K'I )RPPR]RtJqT#RAHIw))+) )HI7)>)*REJ_}R| R'ŻR#RIxS7KJ/K{xQx^JOK{OJx\ǤxTGxX%EJKSRDh",}R+=R-v)~'oK;CۥMHqHMI* R\/uR\+5R\-UR\)R\.eR\*%R\,).B)ڤ@,&)ΓB=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=|22222222222222222222222222222222222222222222;P6FFx3Gs)uN$k(RgɲSjљDkΈddV"ZIy+(B"@DKPDMDG2A-"j$ZH QjT=Q|ZyDsJ&E4TD!DӈM!L4h"DFܕJ1Xh{<*#*%Ey#^ :h8F4 !LTH "H Oԏ+ Kz"#IMPD~ԴK JBN'Q29g'3(Jy"3Q噈DHd>6#RɩP1xQVD( ~ DE\A7D_}Ey_R DSgD#Dc*J}D?SCD(ѻDMEDތ z#:GѫDLE^"K^ z9*g DO!=|RO&z#z=L.*  h'юHJ (Ij' Gt/=Dwm']$5-rѝwDV[LDHn :k5*+) jr(RK.&BtRmDOhSY :/H!\:蜈3j8q#SuTLg= h5*D+ZT}QsYZJ-N':hk$ZH=[@d|ZyDsisgfѠgR*S3A!je:4DS"AHx¤H#@"TdH2^I1DYI> TI *$ *$FE+@#D%D#"xS(5< #qQLTq 8@#BD40@%Gb`"q6 R|zB5֛5Gԓ(('M6{P>jKx^&Q((-brEsA

|7鯀//|!) Wㄅ$4z> |o}= x+tϛ=oy=>*+K^ =C?gO<t|={$ڍǁǀG&4"T {7CL@Or;Vmt-NJKN$M^r)AW>ԗR?H2ULշS)S-e Kʈjcs+lNnszJN9vjBPIg_ʦuqaYa~~8g N6f9Zp-}ޖ-,sԸp洪m[qVAMw P:0eeK*x ss|P_+6ٺlJІ< JP T=WSN^ax,J2ɢ-%AK~1Nzr`\|mYо+E2 ekf5*[!+~ut~F3K 9@+p6pX UJ`,`1,@-Ps,`&P T30LID`0*1h(ʀR`0%`80  E`0P @? }=\ @xdH N H`l@X `` Ѝ§ (N(p8 ?| || || |>>| | gC`?xxxxx&Gu5Ue%`/"<Yi)`{I `78(0 v;{{wwwnn777[kk++ˁˀKK-E@pp>Grq9?8sq9?8sϗ8;8;8;8;8;8;8;8;8s}q9>8gs}Kÿr;+7-071f+N#ik®`w|:~ /`Y̪> ,C]:: J?~(E3cϳK)j"2{POy%!V6N6}:sm]?tA *d'%Kr3>dlglpѷv}5[Wq˩Ȋ6]>/PG†w!Q1q^Kĸy-8Q\0pslBBMaK(qM%AŸ J{{ {h&Я5w1W);x#A 4xu,EMHs#3IG YYx^p%ϱO3oQ5Tɘ7dTqM=6:2)&Sbf3a<>7åWaKk&Eg0tdzUΰ%u$#dLtXfmd8  1A{͈J|~.WzG';|(kƟVVمfM|ٌRf]kw0 =xŕ_ɛ %!VKL-v ,kcQ|J2h`r8G6Z!Π;r13=bRnrn| dAV/fd3+Ν +X9[Fa{SHX\-eb`&-+BwEϞ}U ),555%E[MΜ iVgزP۾d?Y2 wf~W] w MPlN(~F/'.eSl4F9hNUX{u ru;&cqBhхz(֮ 5w6&;ʘqw_!=SRыܩj׽39K=Djtd$vu.:5oM4&{\ؓqw/+4c`E4\ Vi6_奊/xi.Xvn)K^N9M9l.乶=lN6;o^ԶC0pqbsq6)Q\/{0_ڬis tQc fḠ۶ΑS{ ;CɔLW8oJ[Ԑi7ZδTOrřr4lt:|M8lJiಞ6d6%(O)k  L1+‡y6U> hwxũyenP[{X#(I+nJYfpCV0ov$َYj'WNe^* 1JfSr(D2ār)Fs;<3s;!BۙM<<< Ԧ^'OL%jRJ#AFBPVFſ%nyI<)#H*ivςȹ@z)$H ZEAZsA-s*{.vD>>H΅dƏpג|-AV~kAnsR U*K6Jʁo'ԎVЎ#U.x uXRN X6ԂN:nEN.pNYى ²*qNݠKxF@ 7 *p4n{dv 5|^1.ڶ%G52G} v#gs։-*w“>¹f ױ]`|̒}N͸‘رK;{26^|9a/VB8O'z"喑9]cdk4\>^w߉huLU6IV\ˆrZQ,g,$jp )iCE+8Ѧ!G?Eŷ[vfbn\i\S|叵=w ?Igop\|wW™shIFwE^#|±20rp8b?H5^O wzɉ[`?(33zx#N,'`t1Oa+k:gƎy' qN& t7(8lVP,gSD_IbF@Xϲ;]nڨ x3X>OaEF|;\+Ͻ˱kY9o.^18} ~.jcW~q=mq=NFwy}<;ň8vf7NVE]#L7ƃBs-䛵<9#n#٣[.m[[7^gU30og]#bZ..Sued,s8ExWgD҅[5r磌i>=jncEcx7%+B'"s.K@wyw;^&R̟="DbVcV1sh`dAR/W؛z@x!UTv&,2h<\%VBh'L-}h~Ƹj"ϸAbuB ZkF&l{.rFgcC-~{"״ՑjÚ گOˠZl|B2kY!Jmf ̵1Ts>*Ԁ\ }'l~uFGU6AmFW4gφ-C4@Ji3ZJ،Q02TB~.=b&DKSDkZ-R||e+r ٨@=sل= p#R˵{'!BH]^gV牙kf2 ӫys k uj%\# Bj/![yT \j :Es;\ޠktTWgt9U/U#aNW *wk>h{Jݦ;ݞP]!K _ѐjz`!eu\A5QCЇ#;`WyVrIoW+AWfi {/9`AfQSnv( {A<-eC0/<{s \]{`įJ]2f>MAqiӇvt3~VnW1|P,2s :5 ”P;z[Ϙ(Hz` ΂]~ Þ|]` \(Ĝ3C8`jC|nxP;L+UT7@8z;vg#q)gutwuCn? 2=/qh|U mMG LtC/&X( u{=>Sk=;7x eB~N&pyZB\lBܸN:ܭO -r0uj>HOD .oAt |)_1eL/كقכBI̼cbֆIfJMLHhd86Xƙ % l ꪯŎ:g> =9v dyCvOD֢fjoMB e|g ԫ0Skեjf#  D? ~,X s~4g/@я<#uD?&~L1M|j#wS+$ḨD"CHi8Ryb@vP~'&*/T>9˶ ZA(a`@ya6Y$AZM9 %@T ǃT/لڵVL׀|H]Zl@~H5³E:"sA~ @j<X)G5J1VkIL}+I>I!aEbqRlK}/m4i%82H&SCv$ʼn"[c-ř8VC2$s`_1H1>$#Asx`̦52K愡CU!ś$}gm2^Mjڌ6!ېmp55kj+vE%F*^XkY$b6lĆ-1a ,Is眘q goݾ}ë_YeKB`V5ej>txd944"CCA2NMRB>U^3,fN] 7-H^'?%"'ǒEȳJ  ǥl!O]569B@[2$\FMKpQ_F$kV| }9JHGJAY$\,7VooѿD ?#&'J `mX@ZI6 ^ij Um&RIP{<\v!{W=dl#Od?y#E,%b88Ԗ¶_&!) m +c*xt_g' -)6Dq 7#nC܁9!=|7MCYQO F!c)b*b81qj D?z!|u7!zAXkFqqۖ qN C|3'B<iIь ^41q2b!b1Ljz7#NM"{F\8q Ⓢ;_4ķE<>Iď&ˈf,ɈsoD\G\qJI@܂q `qQا3L!&D b qb^LXX8%Hq b/* !ɔO!>nĽ"x'?-,.J9xXl5^kM,^g,^XnXa-VYKz -V^mjmf]XdغZĺ:r2 rJ *j`oaIu+'Zf}Ⱥ 0`5kKo^g}zz!``cT[x]a T i6qפN6$e5-U7V.-,+Lm:NpKglv3㛚|k t8Su~8n)5aٿM[̆3_,Y0Σ5p:8ᳶxscp4oHgNq_-x1KZ p YpS9W\nB5΃ Ip;6`ܒw/Í6;^A^}[Ch;\#V V"VaNB [aN1X^La_0yd>YEpy\9̟.E1\hgBAܶ]t.spVexI"$VQ&Ʉ&rYMJ֐ڿ/Ờ97eu2H;?"^GI$3zi8/&^:.6vD7[=^DVb1؅qbb/#ކx;}w"@ b?]w#ރ^U!F* A|qmD!u#G{3ܳ~ q rX}yP~Jȇ QU)Tf)bů)kA)eH9VN̆Can:V3= &cqXmo7=iz'11u17xbbWĮ[*Ǚ 3^Zxg|(?~S]d,^!KBNBqBu’6%K8At1LĤĚ@ĭ$'&$y'arerK39ܟ<#yWgSJ95jn>ZzSԻSOӲ&Ҷ L;v*ݐ^^ޒLoIߙ>~0h CFjF^FQFeFK3#џ1%cgpl[-Vd؜6`bi4dfeeVfd:3C[2wfg{9B|bs3>鬍}x6銩vIPThGY5:>_3:CBǟ|_կ\A^gzA:,΅z 'ieN 쳪gKC09)VJl*t,ApڰF/pzoQP!w1Nm紹XPk9mt@Гk   9]8EC o\/:~Cv=d?yG^1[8q5No](SĬ& *l`s,TiHxGHZHbHt }zVڭRaSIڅ"Ft9L^A?tgGXg;j+}/Q|iN|*(_BA7j}IIܡIA*Ii;}XIwow.tEb~E~17wKXۡϸQ@bP; JV~%O RD]WϽ}W Ig6`G8/IW+:+ݷKkuVz/=Ț1<ӵ7FH2~[_sJ}|m@Zk`7+`t-" !WL>L *|~؋dd2r24X/^ѭncN7hI9(Wg{PĥS' {|&魻Y{rԱ~mNceusǑvXr/7ELiluˎ<ߌ[wiqb(,1g"B_S>jm\G8X f D55F{=w(B/ҋqE1?Ү!~h1$ېCqbj~iU܈%#gGaNwe*lCq$9 NǽjT_-iŪ~I|rN_}"nz{NPow *z~vOhsA8Wsf9o-rp?"6dvh ?x`شQjS&NFT\cV/m"b*"/Ϝ-fJ_NxL/[߿/vʼnw#l'mO%1'7PhϽUz2,=>H/YAD$8#VgI|*"ʧ7 O3Nנ$uo;o+kۛ𦖟x?'#5n-?wQuD']j?)t;:? YX{^gGO+ל%j48Ϝ Zbv~WMZEךtbG_Aۨup_-Z7lM-?P[)-PgǵIҢZ9o)jdkEh_m|?كwiq+Z>Ϭ/OZ|GZX-VGU-E?*Tjb-v>7ikk7FtOoӺ;ts:^{{xx3%:~ac !&mV[c1a:Df&^:! 䧱v} [t胝؟#~9^N,Ֆئϛ{qp5|jbyX![v~-jI,E&{~ DXk-̀sqIoMwHз !=0Q@aK{=xkxr=P:e:X걤KQװ}~%Y 5*v:4~뉐a>lD)!eIO(M$ҍM.#uOUҭR'V#ddtZ:M&?dw!$:"[rLr:yDΖrrR>u|2L@eQYUeMejZ >UkZX֩uZAmj& >WfXRU*P[VXJT;aڭvj k~TAX::u\Iu֫4|Ψ3!E46bD 1#&|"l86C ~ddHHF [#Q(DHHv;#E]<<;7Dgp~~zz~"zBo;]D7Ƹn![}}-q˹>6qs[ϻnvw>nw;tGo݉$]=w;}ߝ~s w]giMk0Ks׻܍&wnuݓY'Bpe,UMxKmq,vOzM^?:V/xsȿ2;b4y9x[މ)||ķ(?Zo{&'J< b()*h(֢.bh/EabH\"5bHaqZ\i` !|P8#)GY 54@OC`L0X ka` ̂:a?spUeТZ>VZӪkuxJkc%2iP+BPoI]BI&v O%i@nQq]Bov !M %zn7K-ҮB=퇶kh0BCcN߸_&~M nה~M53ف_s>a(s(J~"> qׂO~- Ł- [,_+V~"__~ :kBZC~}!_~}9-_~mg߮݁{ :u0P#_ɯMVױ_'N~ 1Ls_?~]u)rוk_n~v3?-OOYw:M~'slCop~zZ^ VCzi?p8 pf:' y'8yF 5y-5N8%Bw7^8}3RXrX3*X _gůp7:S/0FWQ_M5vZ-O1c-2jv1Z >Ù>M Mj™-)_|}VN+Vo%YV3qf 0 1g lla0b f]u1@XfDp/[6?c&Ϙs3>g}%7RLSLh1n1ۋz/9[z`#(6aosx6Md˻X7Mg3L>f96}汏|1[>a)l![>egl [ʖrdj[þdkWlg߰ [}6fKe[Vmg;Nf{^gAvfGQvg'Iv;βs'v]`%v]aW5v`i&:.uD]QO XO<#E#X4:Vϊh!ZbU<mD[h'^%<:b&b؅WqPZ8*8 8%N-~gYqN$΋ X\qU\ &nA`Ec"<u.#M9< /BGH^0F;X̃cLV#fRa lmX쀝 v 2ZYmYAKնh[mvmSۥh{}~vP;֎hGcqvR;~hgsOyvQ]֮hWku톖zYIGee"Ue5Y]֐5|R֖O:'iP>#e#X6Me3\>+sǟ6|A/%AvdgEv._=%doG䫲|M ,ߐCP9L)˷9R+ߑx9ANr,ߕS{r-\'?rDȅrT.%r\&? RrR_uk^~#7oF$2Un[6];.[{>_!yXG1y\')yZ(ȳ,ȫ.o4yd&t9CΔY'y^^%ziVzof _{ڽ$k_ u{=jߴ{lO'S4{=ÞioϲgsyG|c{^aW٫/5:k{dooS>}>bO?g}ɾl_v}awp:s9pN:Ώs9\p.:s͹pҜaaFXp(lݰVH8CpppppT8k8:-=|8Gos~(;<>UD֔¿e zDыE_6H*7b(.#h61F|/E2K2I2P %P*7S>R)ڷ#GzozNz.!=Gz^H/ы{So~~ ~RMp . :܀40i\}k%el`YiMyzey 4)ůZӛ*w ϣ<ϣxnϖ<7>ϘOr_r׋jZUR4XX)?ku:aNYa3nf{h|wU:1&5ȘIGk<6`VBoNe.,+2@+3 {:1uD&1"O3MDfa|Z2kbGa.^&1RF0eƳxrYY,^[gˬ%E̼Y̴sX?̣ј7{"=S̆b3Cl [}{}[YG3Y s6`RFxƺ ;ive4VӷE`\Dd aIwG_쭘ٿnܞWߠu>H,Sk5rk- YWl_~;U۽En?y0Elcf6sXEgm[<߻o@ckNJUhJd9D!QBEQGyCTmE)Ab+2нD12jx[u=pb'YbX$b(RN_yquDӀN|xAx^ /Eڔ&mː6eIHxyx"iK^LچW!mkğLW-E"]gսfھT3LtI Sқf_ > ^zy?BTF۔Cm΋}GK}?Eے?Ꮲ}?K*ڎ:N&q x-L.k`=3.5uL SM3M7^,lz3 Cڔ@ڌ%m?$MH>瓶 H[+oKH0s'i[iLDQLQ~<w*wE|:EyEy&E}?vfFN&NfNNE'+E'ݏhD5 2akM]e9r4*PoFQe%ۚz;tݘ{э[ҳ=#&ѝ֌NtW^ސ7୭ӿq]Ea 7ͽsD+ٚdM޵XYSq~\aVY/5֗Z+\p5Ww Wuźj][74lneGڣm{b/ٟڋ%R{ia}>iNȱq:)t 9"NQS)<:8%RNiS)w*8JNSyuܰ܌e{fwLjF,:^YlV EtKbaܥVD}#И3 Y&qe X=`j+j<_365Z矤<_SPKyP|C; 33¬@Ye>n&ꯢY?׃~CEQ4C l\yA<</;nz>Xar:y:&KSgY=;m˅;mVwqt= g{⮱뮱{~WQ#A_~&މ'TSeogzNG ֏ c[ŝUj_y{.n7_~~=_>X.`˃Y=={'wIܻ=ᯃ*mjj1)8rY?ӿq?fє 5߆1r=4'|.O0?/4aWd9DnQHĊ򢊨%sC!PjAh =$B a0a:̅Xk`n8 "ijZnתhZS^KԒ0mMj)2mAKvkE-M7tWϬsX^E7ЛzЇcdN`f)())0Y1wJмS杲4y;q4u>NOg PeKZ5z}F=U߉]߫F=ϠWQ/iiB#ȉ((bĢ0JQUZF=:FC)jc#hhgtB`$=Q{}pa(cX#٘:ŘiEc7Kˍ5zuF#u؋8hG=j6Σ3.iץ&iHGf@U2̎-Qs|j!YBF-)ʨqZS֑ Q2l%ۡd"jCAM`Ar:Bɨ9u#Γ)r b\A]-ɍfu-GiԓWuS00ięhU3̇c2K3KQ˚q&^%U̚ff1jllkv@mov1{v7A0!s,s9u9ݜ:˜g.0Quk fMVs7NsyyrG LTч$ _uG#lfz*tWuM!X%X#8#x'xL L DL$DL"$L"J"QHDLDJDJiDFiDNDNDADIDIYDEYDMDM9DC9DKDKyDGyDODODY@DYHDYHEDYDEDYLDYL%DYB%DYJDYJ$$%(ˈ(ˈ(ˉ(+(+(+((((k(k(k(눲(눲(뉢Jui dPA]A  4WY"WGOy*r"t8NW磩| u" kܻvGсg|Ɖ-5tnvae a6,2khK_+荶W(]{z^UO@A&hek }yuSH@)jC|TXxODOz"էR9TΠr6sʹT_@B*Q%T.+Tr5|_} ߵD]P9{ T_;}FՓE[Po^ 7uj;s;H./Ț=&7:j(bTFV Er^ԮS'&v?:G~=q^>!N]8hL3Ky=]h4[1zUrj|WYJ?uhOf:-'mt/VpVʢ5,Znr~K("5~|':Wp$.KksJNk!*XPÝrw W {];1z{kU /F+)*_I@:9=3 RȓZ JTl=*#98Ñ!-q|ynefB vT+_c}}FM-CF.TO4yqB #g{ $TulYZ+m=ܷLLOxW{l9c9'r};>c{NQ?빕_{^npGU# VVVhwқ6RHU0J(ߨcd7ƟA&mWzFKW>5S I[(ࢨ٨H5X =k<z,p+沚[-,}reکDTc^(NQIb)$B@ K7 u$GKNCZ eщUԃОFL`Xnp:a[3uzMaQSPi7` ӷCaLū&оTXV-ހꭰR)Q9S%]et])527=ަtM34+[P i9kB=Qy6US}-AU|0\kzm vqzA!ާ_S `?i?d'A,!8WQ[K.Ϣ?ooAM&QJT||?|+!KT'R;mэ_$|wL7~S3UQʳ)V}TcZ֖ܤ5Oʹۋ"<3l @'!/$I}jW*CV6v]~.e2vYjUI$m:H8vw>x?B].dEbګԑk |bX-g.1GlA63ºn;z^"[Ɩl%[V5l-[ֳ l#6-Cmcwq7p/OãxZxFg>s.x.< /̋/ΟS W3:5y-^uy="}x_2xGQ}>O >ofȷm|;Ï ?姄.\-<+ēxJTOxFTϊ%j:'.&kb$d1ELt1Cĵls+:^l׉=b'_~8 !qX|'QYdVMF2F搱2%eWeAYDebho??w_eY/1?cvssB1^W >oMxAK>/6|o $҈"0T4-`˽a ,1b>g,v|8eYda)^eV{+|eo''{0%l ʦlfll[l [ʒد`vcٟ.uމ'μ ʻ{`>ˇa|8O>jzC0~_eBEDQQL%DI(%J8QFrQQ^<&*EEPEQt xU}1Z| ƈb/&bX,2L' 2$3KK&RJCҒ|X7MGg.[}JŁ,.yqdrdJddd6ddddd~dwɂv#v#vv+梷"ǎ`6ˆal8{`#(>>`cX6gD6}C0a߳v~ba%oşyޖyޑ;|'|_%|)Or{^ɿ_~y' "E!bENK<$r<"'($ "^h#ڊ>xY"wP1L b%X(ΊsS\%qYԤ.]-=+(YBS{cĩ(s;\gP_Rueu5/n^ ~Qѝ})oGuμ,ʙeb[iJH85Y6,'ybf%J8a '+S a` ΞbBY/<@{[X OV$]7I >{C[۝K*6C-WW]QE[*dgm(7 +RM#:kK2Gr/:S~/tҥEYSah:䣫b,uV.;Zkꫨ먾^!tpǚKq]EZZIPWPWW ׽W20PO;l6(g,s9[+~>Ys9Z=w>w5oV7A=z͝]j5#+8W;Eenb  JgQﵜ;᾿,g>{>kvOP]zcy5qh:s - >^ 1GZ"`"YsփhD8!PlCXDs{sP(g&475MC:_Ӄ`V &SKjypB5 ӌB41 *Ԫ0D .aI!` ˈ:P }S~r/oa<"cGYyZe.mx4FZ#d fCa#ڈ1rF^#Q(h1%RFi#'A^{>`kه#Pso4w0o{ %ޕxz뻠{ǣOȼtčCzYcgհj݀KNR HU}XwBu]*C6KAF p̧BO3!(*h+u[Omq /Z2XQVzoe2iL[f[MfebX \V>U*JX%BVi+N+bъYǴVE aIVzj x鴪 N7SYs\I*!2*CIl%=D+!r*!%=QC>%=PC!%=WSUi#qf,,+e+ʲGY4ʞa5XM֒2 oڳKE//Y\Dŕ AԠVo:jXy]\ )t."ҵ{|4"_=ȷC71Īx]/U5T}s;͑y`eZZ#YLkl5hʡ5 [Vqz*[e2Z+UN{ު`=*YSVju۴Nn{`iu׺F Ό"g䯸 *A^E =齊Ti /#a!L3o\Y/7bCnG0nsYixBCԤZb{,-d}/Fu.O~Ip"qqu<=cr[P~6[# -,g% qʃ ] 1t~yGjZ=C֡69ntI8Rz%N*w~8N3AtAbV"byFG`t6]nFwoa 0eie 4wap=c1m|pm]#Q=4UY=<WI-Tđ_ }.9Xj88lBTStZu>Dz~S !6z8i^8GRx6l"KtjCf!3O bTs:|U:T$<$Βg %sfZZp /eCob)\q/%lS"+S|$> IʡݍlRVbyN'3wѾWΞ-bDC;([pWApK6aKUsTs6>Y ʂW\#"/i^I}i}(uO%Gad.Ÿ{p_skW+ƾ_#:FBk/OCZ5! 8jcz2.˄د@;Tu:5k< kZu TaQgpiuD{pLe0,Qx(gUȗO":_ 2T;6Gz2r[/"֙ -lvv{=? ^Q*(4x 1P=c#E "+)Q`̆Dz|>XaXu>g7e^g4 Y<#PpՌra /{'Zq9k^'r[N94ŇC&Bilφ NnڈjvA=5^:z8+=Вa J{jh*03k\ 8i Xsd.E#5WnB<|DɒВ8ٰ٭lvfr37o2S4Qh3k4sfMYlh623f 3le>o1ۙn0{mH<_ ~Q"\gqN DZ# bXY\_ /s|Y3B fur=,R:%rq èIvѾWՎNvLiS;4S[UU;ͭtG.fjvKxfu/궍mU:ӡ{wԙyKc zCqq8c5獋8r3DI83DED6Pq힌֟.gܱ*Qx̨hT35jӸSD7qj{iqDMJ3w싁<9h_.֖F^թ3%evA(.H 6k6کkµ1:&9nrU'D'R=NwrΌppp9>ӮšgFVbf{l.ƪ9:sP^h/N3xd#y7qΧFoμKfIlt$Ra~_Z !6 ߥ 6-#._DKp_&wg| %ُbXeٔlL}z۔`7^g~H=Ynm~yk:*WGg o0;J*(S/ =9?Ecs!}sl_$lduoe'MNdSp$LCE 0ɇ,J>d !KѼ_!scZEZl1_@zu{o|7O~ WG~:>A:ĆIcF)J)yKKEŕk~3?qCKiKAO @'oFnU|6R/zgA(?$j]iCod٬jgXF7մO)DtVAЩawٻTū|NSnމw`>x>x"OD̲/t|%_ 9~2KdYD$"Y4 'E<0.>Z*^)i2tIVWE$jIw1;wS_@ks?ZM'6|ʼG0Õ̐N81kS'&Q+QKw bApVɅRWh\cP>ZgVwyI%L« tj:-u6,uvWp=㈴%ͭ|ebZaVV+U*kմZZ=ѝkC 0z\ !y4ܚEi45/EkZQ jű,agV²V˪Z ,kh5e˶Z Z,{hò6X ,(MEQ8,iw?m1oYڠrk}l $3Jϩ~鮭tD蛈;;7};wo!&iY9ITRk_~__Ϫn gAkT?LuՏPCQTRu;?Pǩ֭Ŷ35[犓8J䏯"uZeNeNg$K]ʜ~ZSt;OW=r( ۸zZ˶Kpd\Gʽ2l$ouPKsF9/(e뎡|q;E1.41}F2fe(c6+eFSl e&ʕlLޢ"޹xڜ` |/֯ouѺdkn{4vN`IPGiB9Rȱ^JYqmh|< W,JD<&8[ M)k"8o~:Q֨`LO}*MR z9?,t0q6cn@;p;/_d@#z|=9{(R6ƙEP#8V 8Wq~*L\P1T!T99x 49FR\c+*t:o-:6NXnܐdOjiR1[[+M{gyJ5aG!o{oD{Ӧb[lxGL7g{5R1M5O~j{ pXMx7Ap}>IחkMv }~@?O]+ʕ%\W++kkkkkkkkkk#.W#\\g]ܺ;s w..swWtWqWwq7r7wv'{_qprursOvtw/ursoq½}}}y OVO''SSSSSiI LL,l|99sss ^7y-o777˶oooo?ᤋ^A=xx'y{g{zyx7y{?^J xEǫ{& db3W5""FT@DD K@IB !"H (;"}\TDne]EEEnoPDWO%Lu?>y{]ݩ~˛P+AI'D'4Jh"mBDŽ 'ܚ0.ay掲?P0ͤb^'oHd0 DQM30/GWS$st:M=fyn!ii3@LL{ T m1UX`XEz'j kGe f)A^Q"HA)RP"E"RR)(E J"JHg9FdٲX`X:X}w}}w{}ww_vP:Ƕ[!UٚF.8 t ?]{B`.8tpKŊ ZNd d{ DJ@>D >R0:` s$r$r$r$r$rg=:˜ 悼 {Y,nA[o8կ5;kŚUX-*`w Ӿ{,kŚUX-*`{,f aU`h.XOYZirp09 GÑp0hB\.r0\0\0z$HJ\p"% ?#Ź)HqGs=ZiH; i!T XDi"4vH; i+Q$V-m_6kE1/>`nlR@0gYH#+3d#Q%dHFRStE!JiRF9Lg.˵'uYn=zek\ftLj[.aQ~D7Q~ż=ҎqŚ1mŽvsƬL{!^FFWqBeT?UOS"~~/ޫq5L0bpȯH: 鸫H聤.z H:聤H`K A^ Q "@)2P "C"{Qe@)2P "Cbz2WQ'3 Qmrk(;Jd2w&B|Lw&ޙ;{gbLhtF#hcJ1dnHBmfalAqF'X;Hd;Hd;H艌e{EJcX>E9= T A,y9"{=G#riLD/b ErѿE?h  ^ 8!8ƣ'3^dcMX KRl'3^d&` b XS,֬hT{;rG!9#| "p,AC!_0 z$J\p"% ?דĹ$$q's=I&#H{2B`.% O{H{H{H{H{OǓ!fX'AY?R*ATYU~PU~PU~P%ŢXWW~bZ,AE?hqBNT)ATY ^T,"~Z?kJC9BςѐNBz-S4z'-wtIK:KgRZFz5i>@sCt]KRRoD Ĉ51=QS+U=n/Sc ϟ['Yē^F-o\d%vl("Q^&/!1_<ί|\FO9:p'W?WSSq~Jd-Y- |_i&̣)Gs:XC&kn[®k)G ?yOP{ហw'=C@{ ?=!qN:=0o0ӑ4NbOZ%3h¿ +\]~(8o:j /mߌ>%3K]Ҙ=o5e_W<Q["`>ϠxxxAܞ"].Zmw&7T5`l\OXHƱ:CaOנ~| HVVV:_2RL'oRF,=?oۍzfŔ0Np(m|I{Vt'Cf6Lv&ײukR1K䮐lڞ&I2f .b25BB% iTLpO-W+Q2Sd2kѲY o]DDRV3o֊~BA h)3({gVL1-|(J FM\3RDėTrRMfWj:NNP|uZF“wwW4xnԿį^byA{3祔ɯDS瞯 L&I&ˈNWҕ *贫>gݞ%{̙ǮWýV:I>=j?LgkHuLimj:>tڝRxiev2sZy/իRߥKIo a~3'.u :ogׄ7=՛>jmW40!>ؐ>x9uQƣ|0R 8፜jO^ ÷<%9 YLޓg׀dv=nRW7t(ώ ]J`pԆF,R'IY\V| r-{+X̓ax{q.~dU9"7{č5.-.#n\܄|@i4R+J\\i\\\\\\tPW((#te(|@)TbeRRf+}JA!ReHYUyTy\Y,WV*ʳzeQyYyEyU٤lVR((۔ʗA5^㤴㵮aG' FzծHeiT{Xz/{x0#=B蝏yg11K7șl7rsܚm֥7}`V9SI8m?/?J_SkjXu8י/_⁚?v,?ͬc\7t?5jwb֓~#|k'I5E 7//e.VDdjh+%ܑxrW'{x܋$~y<$ɹr.9'q@$&:3(q5i6y*_vɾ$W+#|s}iU]bvv]])}dC߇GȳO||>#}A}I^$|}ȋɦ@A$EDv&]L)ٯQb(cW^zʏ]%.$$q}ˤv>#ZUFe_pW>_Ο_*w'rw2N礸ڌ^l{ObWkY;J?/3Y߫U k6Al\xl [WmTp#p߃= ǰ>z ofiK(IɥȝlɔJT)=&-JI/IHK[^ciLx9Iʆ\On('؊rܛar .W+Ujp | |\>> >>_d G |w> |,yGN3v7ЮNoADSW<   a`_`S7o Zmu-ku=@;d~| ]矘E몟0.;.p7 ~~7o7-V]p'm ^ ۃC}_ p?%x<__sƁ `N Idp&XI&%`S>sD?yC6 c55zW9wNыj7Nfq*Ʃ28<{Yl=N`.= dڤ)s fCEv>6)Y*h?! e<'O$['r4y o>g;x[lfH7C6<׈3ZFm#qa?2†jh5"ƹF]<#h`\d$MKfFsR!o03n0݌ƍF#id2RFo G""#9%R'"Hwgל>GOg Ǣgno@pRK߂~ޓy/,5xνF{1E汊B <6q#fmC:W{jئnWw;]nuyK'eruR]Vרkէԧu3sz}Cu)|@|v .!ʎ.; BCmB m z3VhkжЎz M—S>+DbԫS|&bz;}[>s95%5vV7ģn 6Q WFs$L"Yd YM6MdGRI RK*eJ4d4=E}oU{LO;=jm'{BfyN-N}7&-&^LxGLxgLxWLxwLxOLØG1cŸĄ? <&ELxL˘W1cGNiLu½6d>F;=/Og9$KY|ldq ~rxIagjv;vFFigKtO1*;¾+6a;Ik;).aw T?Ca  RJد=Rx8`Ʈۯͬ%$"$K6^Z@ik7I-amgDZ.=-m^6Kۤҧ!;YY}N/|Ȃzs 02X=ze  ΎYT2av6,[a {\`urҙ&j$a a/W Va;DءŽvY {5qDaM垉.aiwkp-Y'yZ=|'vPH}&,OKC(Y׮'˂OWWWׄ熭vb/Q(S@__MHHNSTջ uZޭޣRUgjZΡ-:S sѓ}_>s e)ݫz^ 4}zR !t]7tGsy^?æ7uwx|]}Cݬ=us,gi2{b^PC/ҧ;bB~_7/ћez JBo_aS}UI}-6_=>?{zoWAXeБ;'R;|%m155I{qtHG: h6fO"2{JJo_ӯѯկz'~EAwӻ7= }^߭ߣgz^oG4=]Gh} |sb(ƿ:Y=tSaGE@PKb2]#Au:kk]Z7v|mVݦM&kkSBvݤRZR*ҦjӴ;b.?iqY 2e{=,^\˴rmN,ߘhk EZX{DD{^ȖjOhlE7kx${A۠Mۨ]{YOU){M{]{ފWM{ϲڇ>#cS3s x:1}_ Kٽ+?WٽnEߪoӷ;.}7Ogs1~B/zWkz~C&j8v5*j V UG~@=\>W68;6#>% #EN:y.k/po\>g mmqWc>e9y\cϩ gyۉwRsՖ=c{ak {2( blP&/cOHK`Qz=!#>`#)aP_n$7aO vrGS+1I.˳9-/3ey+Ͽ&`"*`00:h `#) l^ ^[W`;z S^`*@p8oB(-o{8g( 14mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mB&4mi5mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mA4mi5@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4i5B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.4B.45{,%|Z`m0 ` *u`"0l^6-+`*x v;7]n`wFo{`o?8$j8$j8RD=GPϑ kOi i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i ?|wҴ Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд Mд]>^BB١\!+#|x/ѵ(p:8ƘD Y3K%RB YH! )d!,HIsҊeѕ$}`r+J{wh6+mY$ql{fy%"Rl/Rl/Kk4ofX;\Gt Qkg|$oS< Idl+݊vVA,+O}ެ},Ŗ)"~g 6E;+G;+G;+gyX"gv7#F4B/˄-B;%hg墝57|Tf=^HمO]] d=i9+q 8m0tAvvy|:r| q;xH0+@]tHt9BN!t9BNO֐ZZZbÐYʡayw*WV~Xz]' m liX0+ ]= :]'Cuqy3k"s8~cŜν(/llc񘷗p1~KwI]>.'-X2|)tC8B|bo2 @ t+O䑁2>Ɨ$vg&0[_m'I-%srJe\yh$ĖSƉ NYs*EgN 94a!T :` sh&rh&rh&rh&rh~Q Eav Oc4A~k;ؚدqX /2fCxZȸ߉)zb'q\G9;Vpvٱ g*ٱ 5V1 Dsj/4'g_BCY|\swE*!1_'cXG4p8 N~Ɲ|)oy_-dO^~8(\^~$6q-O-`iF X̚;ʸGd;C;SK!KjDGZ_M&qj c.ʟ p4hDRGA,A}Yf񥈎3Ycoշj3 i5ciqlֻV&OqI]Qj?qouR}*N:;%Pɮ[BR7iiq~G1JYϛ`v ~/$݌PV#1ۍiLc61pJ1cxxxxbl7(4Gdڜmi{څ@:1t-l]Fan_H==8S㘪燫^x^+A$ DHjW؅$H "A$u]ߋ˥|' IaB;[5lv=;Nsn\ex{0{q,Oȧ39|E.+' ߗU6yK#ȇ#q|Z>+_/m|O~(?kdYA$I$CH"dYG6-d;Ivd?9H9Eΐs"BowrH~"?_ȯ7|T*Jjr"Gqr&gr\#7mr#c<'/k|PŊ2EW Z(l "H(uFE]ѩV*aŨbB1Q)+u[;žN,T(˕JR*MJ'V,(kMŶbG8T+NKŵV+e %$QڔeHPV)딍eS٭U+QrJ9S.*Wʷw}G'gW7QU*Q*URRUTOQT5zUUTTDtHt'M =L=Cы N}#L;QS)єk*5RR՘4OѤ45zMUTL\BRJZ3a5o4f^Ylh45͑Ds\in4ZH[*k5ÚQ̈́fJ3,jV4뚷w}G'gW7͝Q[-іk+RR՚OѦ5zmUTL\BRJZ;eov^]nhﵻD{^io:HWCtQ:΢ssEv]VNA> u%r]NS:Ρ"FWkҵ^^^^tt ݖnWw;ҝt+ݍ^/KzJ[.}@g}MT}}}}}}}R/+ZI}J_7[O//czVFKU~K^?Og Fo Āe,!`2ZCf0tz }ÐaDT? %rCAjPa"Poh2^^^^ ፁ3 Öap`82 +Í1EL)0(C0g, 01&2 L3t0]L 0C3L2,,3kjFh`|LI15L=Ĵ2Ogsyżfyp<Ĭ2e#9c.+憹7ER#g$Qo]ƀ1fk fce1Cq8m5.kMqǸg<4OEcj|j|f|n|a|i|e|m37F8o\27[]xb<3^7{Td*5&D&e b`j6:L]Si4d1&MӦYӂiٴf4mvL{Cӱtn4]nMfXTmzazizezm37&4oZ26L[]Ӂtb:3]L7{\d.5fLfec挹`n6;]syaQSvbw=c7؛m{gGI}־`_7~l?/[C(v9*tasx!GQs4:ZNGt ;F)njcαXq;:9>8DՎhv9:]Gc1q;&ӎYǂcٱtl;v{CDZqt\;nNYpNI;q glq;;^gs9uN839sŹ||w~t~r~v~q~u~s9]jg9r8ǝis\sn:;=y>>\Bw]閺n$vMf] eךkӵq]ǮS׹uu=bwI7f6r'U:wtw{A{=rϸ܋{}~zJ_ė}MVS3s K+kߘqyߒڇHc|6%|U:_uz}A߰o7|ߺow{KJԯk&G)o???Y?/W-{$'U:w{A? Jʀ4 h# D@M>h < < < ,Vn p8 .W}P$tzp`40 zm]C`?1)9%5-px Kʠ4 j# F`M>l > > >  .Wn x< /W}H* "BTH/NgsJp=6.! > C%PeHR!S"T&Tj ^^^^BlM ͇BV}h7t: BM>, KH a*[®p  gµQu]Ch?1)9%5-tz Kʰ4 kæ# G©pM>n ? ? ? 0/Wn |> /W}D)F!"TDD\@$Dj# H[#EDoc0R)TFeD1E_$IEj"HkiYyEeUud,FD|d)وlEGv#I,rDhQ4D(%h&Zm6GۢѮhO/:DǣltATJʨ6j:h$DMXrRt5݊FGѓY"zDXi 1"F1K bL6k:b]X_l 6&cӱBl9یmvb{CQu,KjbXkiYyEeUul,ĸ|l)ۈmvcI,vxQ48%x&^o7xO/>l|!_oƷ;a8~?_ƯQuYyEeUu|,Ĺ||)߈owI,~DQ4$%JD&QhH4'DO/1J$lb!XKl&;a8q8O\&8Y,KV$$E 6&%KFb+>8H%NgU&q%I$&$'-IW2%3dC9ٖHv%{}ɁPr$9LN'g Zr3I%y2yM>ĩTY"bR'J%RU:Qur+>heh9|/h|VYb|b('JR>O*S|O%Sԣ> ('4f>ͨO jӊ>O7Ӄ~>h3q>h$3VYVYY=Yߡu|֡?|֣h g#G>6ل?g78 8 ?'|'0^O8989?/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB>E'?FK2_1Gt }Π9CgW]C'EHg/m[w)WoRDʱrg ~~Ş`(&S`Jח/ѿ>b V`$*+*J pLzޣ'¾ "N ( WA V)-h(h.h+(*)+(*)/,.-X(X.X+,.)+8,8.8-8/,.-x2qbZ̈mb8$NuFq])ŃaxB<%ω+u[;>;)BJD"I=}y ;*E(bD" #N79pCw8pC7tpuÀ#"#v=B#(HEb K K!, gHW'($C H9$ TAR4i@Z!H' @ Ði d5d d- !F?B6A ![ ?@A3d{>;?CCEb !S0L`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`,f4 Y0͂iL`Ӭ`o΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂,΂, ΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁΁`o490́iLs`490́iLs`490́iLs`490́iLs`490́iLs`490́iLs`490́iLs`490́iLs`490́iLs`49tH+=LMZ-~7D?|)moKS?(++)QyE? .d_+&5SZydL;m?EO<{r'O>y@WRV8J4ʠ6ԃZ֡h ڎvh/ڏ(:?Ϡs"Eߡ}# ~A;V.矐3ȧEVcMX+{=},~fYUթ\s53<]ɧ*o~_/~3 ~?_/GVg~>_ƯMV~S<o#)Ϳ?o$ \$)REH&d,$Kr%f${~r%'89K.I<#/L`d=Dd7G#89EΐJnOyMޑ3&` 2ق\)*A`ALP(( AM)  A\0+X, GXp&/BLf ߟ*P( #q`F0/X 6ۂ=Hp*\ g%f sM1aDX. 6aG/ 'qpA,\n wcRx#~0[)z.EBLDW削p[' OkQ,|DlQQ" ܢ(&*EUZQY&ECQф(.-EkMю@t,:]nDϢ1&f3OX(5b!Ce'sٕV {Sy)+u|WI~(?˯U(9 B!V(:EA+EDGX~&/ LVd*d ¤p("OQ(UT(uFE]ѥU (cIŴbNXQ+OCʼn\qU<(%GQJR)-JZ(#|eLYQ+XRqW|V(1%[*qP)Sj&CUy"eBYS6*[.er@9SN*sEr]U~R*O+A|U8,UPU NeQ*FQ嫊UeJU^դjUuU}AՈj\52U\d*ʤr*OU*UUUuFU]եU UcIմjNZQTOCՉ\uU=T5GQjZ֩-jZͨ#|uL]Q׫ԭuO=Q3yzUVajګERuZ]nT]^zX=TOԋzK>TW[IIp4Y kƢ5&k4MIӪtk4͸fJ3,iV5m͞f_s9\h5wG@S4jZ4.Mf@3Lj5sE͊f]|jN4+ͭAyզh9,mЊ NkZFkeJm^ۤmvh}Av\;k vO=Ҟj/;Yc2tٺ\h1vZ;]Ԯh׵[]'D{jOW]Xtct]XWuMV][קԍuSݼnImt#ݩBw=uoz>CՓzJ6[ǰ݊n]}Nt+ݭA{է9,}Ћ NozFeJ}^ߤow}A~\? ~O?ҟ/;Yf`2 ن\i *`3 CPh(1 C3V?_o'!1dr AlPt60!Pl(3Tj &Cm3 F )ÌaްdX5l {}Ñpa6 φ7#˘a6I#eT Fm cBcXe56mNc8d5N`F1˘c$b¨3Z1FbcXc76[ncq8b7Ng%qøm3 h|6X S)D(d0LnS3JL*Slj3uzL!Өi7͚L˦5Ӧi+0YL1ELbSTc75ZMnSi4b7MfL%Ӫiôm3훎L ӵhz6Y s9L)l0ns3K*sln3w{!y7Ϛ5y|`>6/7{\i1כ̭sK?/.ve.%t\py]!WUpU\Wp \iלkѵZwmv]\׹uzp=^)n;˝z\!רkwͺ\ˮ5צku:v.]7{g׋sݙnw 2mr;^wȝ.r+:wr1{=^t[]'}rߺOWOxأ<a{ٽt?3}~`'GxL ye>'|y}!_WU|_ |iߜoѷ[mv}|߹w{=^d19 c, 0Lg2a&`>faƙ)fgUf+`4q0^&1EL)ST3uL#´3]L/3 3c$31 l1'9aΙ+y`W د?g_MVSɿo#Kjow{a?/W-?_o'k % drD@PtK0H ?P( Tj@k# FどL`>X l{Q4pρ + ]@`80 Lz`+8 WC)L rY A]L0˂`})vxp*8.W^p?x< ^ws- eC!2DT!Crcbp% ?'U6| RBPV('D!EHCšPe&Tj :Bݡ`h$4 ̈́CKFh;NC]1z pn SaU@8. UZ t: BS5愳9a",+º%Lp$.+5pS5#Tx&<^ 7~(|_[ɈdGr#d"-"Ha$RF"͑Hg' ¯'ɉqDE,:D"Hq,RG"Hw/2G"3Rd5َE#GE:ry]nD{Q4zEѷ+ˎS 1[ bXIbDZ%p.'q~!qf$.=ĥK7+qFĥM\z9KKKKO\zĥK$.=\A&.=\Q'.=\IÕ&.=\YU$.=\}5$.=\c5%.=\sõ&.=\[õ'.=\gå'qz.pKn^-H\zK(qn-I\zpK'.=ܲĥK$.=DJC&.=+q!LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09LN09_NcVU`Xֈ`X֋ `6Mcs"c[. ;Ns 'C·9'}u~_/noݯ7{x?{ o|>CaHBQ1Gw 'RRNS.RSRSSRY٩d*J5RݩXjajIjyjUjmjCjsj[jgjOjPhDj Lapv Map6Map6Map6Map6Map6Map\ j@-ap6Map6Map6Map6Mapv!0 F(aOp=aOp=aOp=aOp=aOp=l llll  v v_7`/-6~ Q#p18 83p98\ \\\\ \\#!O㦠㦠㦠㦠/ τ~            ~DE0Rm6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#mQMGj#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#m6BFA!h#mˉl llll  v v_7`/-6~ Q#p18 N,<O"/2 o*h#m~FA!h#m6BFA!h#m6BFA!h#m6BFA!h#zB!h#mml(m6CšFqh8Q(m6CšFqh8Q(m6CšFqh8Q(m6CšFqh8Q(m6CšFqh8Q(m6CšFqh8Q(m6CšFqh8f΃,D?tN Λ ƈ2ND\(J $읽wٟ'!!{2CMr\Ԕc͵)匎3od)叔;KtӟC'F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96yF96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96=x:v҉tLЩtN :΢:Σt>]@Et1]Bet9]AWUt5]Cut=@7Mt3Bmt;Aw]t7CAz[IPK4H#Ez/=IO =KbU(F96ʱQrlc(F96ʱQrlc(F96ʱQrlc(F96bOb(fk6zHb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb:.6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6بI'It2Bit:3L:Φs\:vt]Ht ]Jt]IWt ]KtH7t JtIwtK{>!=ZꨧFz/ң}'IzgYzIl$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#؇Hb#5]{F )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF UVpUF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lFG|O'N:N:NiAgYt6CyΧ B.KR.+JkZFn[Vn;N{^C=HќJڻ55RG= 4}K8=AOS4=Cs]@Et1]Bet9]AWUt5]Cut=@7Mt3Bmt;Aw]t7CAzTRE{:iG(=F_ zziF骍46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#6Hc#]rtU΢qYLХܿrԖU ̫je^s3o`H7t JUZ;x|.raK{>^5;;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;huTh;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;h;hcG Nd:NtEgЙtMйt.. nn}t?=@C4*i>QO0=B_G1=NOГ=Mг=O+v4TX~^ow+Mv4`G v4`G v4`G v4`G v4`Gc`G͵vFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYlTYmFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFYldFqt<@;D:NST:N]tIgtKn:. ".K2+*k:n&n[6;.{iG =Ds*ڻ4H#Ez/=IO =Kb#lFYldFYldFYldFYldFYldFYldFYld Yldfk6za#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6raJ6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6rبI'It2Bit:3L:Φs\:vt]Ht ]Jt]IWt ]KtH7t JtIwtK{>!SIPK{Fz/ң}'IzgYz9l6ra#6ra#6ra#6ra#6ra#6ra#6ra#Ka#5]{Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑FUh_Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑FG|O'N:N:NiAgYt6CyΧ B.KR.+JkZFn[Vn;N{^C=HќJZhQ4}K8=AOS4=Cs]@Et1]Bet9]AWUt5]Cut=@7Mt3Bmt;Aw]t7CAzTRE55RG==G(=F_ zziF6 (`6 (`6 (`6 (`6 (`6 (`6 (`# 6 (`pFlQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFu9VmQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQFElQG Nd:NtEgЙtMйt.. nn}t?=@C4*:iG0=B_G1=NOГ=Mг=ORl6(b"6(b"6(b"6(b"6(b"6(b"6(b'(b"_bNG O=wi~6_ ]MVyfMH+4=#4iqMW>7:G /?#5]wo皟oBۇX+ӛgUUݷoe_nWNN$tEfQ(D^%.|>_(LB: { |™ߧ ?5_~_)Ϳ.K/~ bA>إb4_WMsb]xCMin.9rLs{#̓O|SCi4+KGI[|[4/y_q_@@|VjyLԌ,5B2qy?GJ5GKϦyLiB;KU湥i^YZUwM(^soRIQpX 82;iL+`QnҾ~+ t? 7?)j꟪*_R\4i~4z&ߨFY>7ycC)]S}>k61Q+6#]ag9Sl~7vtS?.jHsE5寕_Hsũ5 m7C +`֚amEnSOvDd[:ηUֿ mNsE5(Õ+zş8~řsrl)q hh|ʙ՚11ϗO}f Ibh^')KRvsvs-YzlXή,WlxwfiN77ԏeK} K0dS?}:Y:g_O}.{.ull\6.uR6)uJ6%uZ6-uflvln67uQ(uI$uElu:umlC!uS)uk5u{=uglw;uo7u_/@Pv(Uf2Ug:fi|Sclv$;z4;z<;z2;z:;z6;z>;z![/gɾ}7{R_^IR/fS_^M}-{-gO}#{#d?H]Jaԟf?M,?ϳc~ř_:>շ>7TƆ4~oKCK[$ߎAim`|3{{G;|{Is0"ͽ@i|OX4~> y4StKlt%u>6XԦw\Wו4,Ls}47XnIsk4X1+IO.O[k~|[4Q#wJ{|o4_?#K*q]Z>OLCOiL4h+?i%.! O(_yq_򮤼R'T|*^\*+6x\qYMHV|:9T>V+O)Im;|^pZѧ{q]{]{cҚӷ\7J\l׳cĭvM"<7k5n._;Klҳ3 G >|!/J+J7pE-v'ŇsêsZubUr6D(>'PxOzlx^U]z&}'}s~q{ }%MտQ NME(>Wŝ[ץ_wǞ6cZ<6H_oҿ;qlהUZNS&}^???LߩXBe4/7ѷ+Ew@ }}]i/t(F#Ct$5cFW}=wV]ZzOiK꽥]_RBCc.N}t!3S)}^Mhw~zg釩w~zw9)>%Og#Q1Rx\V/QC~>=~}Zjq/}?YZԐV6JYC54F75洖ܒVa?xL|M|]<#nTo{SX?b{xJ|I|Y|E|U<-F?KO{ ̮t }>O8:Nt"D')t* Tw(,.v= ŋYӧkvIWJo~k}ݰ~mw߱~ZYmCGj՞}}7]T쿢nѺ֍׽\_3iM>1 koeM<_O#/PwVݐ7nFixGC4v5.kxR;MCiltͦ͵ÚG4lݼp͗jR2eDȖ---ZzZ\hr孖˭ZGlݺp֋Zj\Mo%SLB,w% ._(_,_*UV֞ah6m][Ozubۥ.׶k>}t{g{w/_jrGmG{ǰ#;Fwtvtw8qbǥ:.>hؠF=sPuztaA5탇 1xу;ws sulHG4MZ,T,qwoݞs${ۣ?W޼ow zD미++ W>Qq5Nѻ0<_+E~}}W{~WovʵG?n_˪ۇ۹<~}"OktEO"JlA1qV|["^oU +^nT_non_n}w?ۧL(_}Lwg2 C!\B C#r#0B<,?0rY@DDdэUE#A#%fBTL?7oիWURr]Kv|k;nL@A+t1W,*V%b#c IUJR_iP)JW2@(=Pt+wK.tex%K[uծ,ʽrENr;\r}rH+0NW$2)GG@tDHu:9W\SrnRZsu)7K+OrmyJ得ݮ;7AGwάt/=>7m+t+AgRN~\R}2C~"[9R^]H$\Dz~O;ֻE?11UVӇO:ٓlͫj])viVu-k饮Y攟eN+TL)_1fk=x:UB2&e KOTʳ2WNrI4ï#ZI_;$eQtꍼ2p~qRJc#̿&GjJ7hʔ(;5jlMMd~}/ew)K^Ji~)3'btE^9J )J擫t,WٽU!)K]i$IGJiQ({OQ'X3{Y3Čv_fOuN)IQJiH9FR~*[OʮRr_H7-,ejk HޓҽKhθOtoSZ!'zCzܨ[*7B;KQwQmfh}vb>'E돷0F;GDzE}YGߣ=h ћz>}G_Z~ =jz}GzWU/Ս{tr}~z yU}G_7:7/?3=b~(zENA2(nٱ%P3C+B}$|@gpjp9NԝqgΪ %! _kZUZOZW$_lhKih[VqYk][ԎS.Kaն\lG랹 -6~@ulbkx#FTK8*L%%WZ'e_lc&^ld[Sm+pz)>~RBsG7(ќFK6";{rΞ\'9CZW#Ehҋmmu&ٶ5b!mEy-W5yi:iZGfmnی!k^{.f߮'mDQƶGkVuCb}H%tE7o)[Roj1$Pn9N;=iC/-m22{hso9~k[{C.}?vt{ݾ<﷼ oqZqCof 7AU*ՀfM|edi-ep/2xH#㎝Sy]2xН]sWRm9fdxFg_玞pq/Ä zM4aĄVM;^U+ij^*ɨJZDZNmtyu~AI'E|<;ꉽc$FFJMv3≤~r&Xyv}{- |]dW"HٽZkŭp-:UJT8995JGVm^lp*ԜZ_ SvAs*ݜټq(Us.UZ$ݝ3g9rw->$SiNF8~;|F$rkru*Sm17DnV*Gs?ܡ2'w;pp4Mz־ &ɛNYƹ0.K6ƳӹyG&GnSdYνX[dG|F6 wȹќ{v>G}A!_ܱDg=XZ:3wErvjNs5*5xktqh!n@q_ ;Ž_|V<, iOEX$JhϋDX)0Jة$)׈]J8ܮ eeI 'qJ(Q e@YAKT^U* B+6jQiJF&M\ޢޢtV{.j_W*7lzzr:\Ts{j:Z风U+ԉlq}u2J]> Me/eZ<W՟SiezF=lTmM(k)hT/-A١+_k)ZcXKծRJvFk|]S~Ҵ-]묔i7h7*G -CQuUiݵOZ_v6HVNiCJ6J{H9&BMR m6E5%3h_[WcwwՀ5m׾QiZftvfj~~g;{Fu7}^ԏ궺/|_@Wn}~A-TV~T;Q¾Q߯_՟|~WmiĩFMzވ7jQH4#h봆FGV-ɸ2k,m6X`,FO=3r^cReh=dd6^366jMTS31c[i|ch=m^{8bӞ1~6iϙTWLL֚M4myy03yAs9H;d6kesvih\3W;i>hNNyf9MWYl]7O膹\[2so.7W+sZcf~5?1̯bYjѯ39YMzjiC4+Mf]oí. VzZGʴnZY֝֝CH>}g<+OoM&|k>њm=?j=aӧX zZOXӭW555}U`OXg_yV JR_#b}abTL L̕1W/4IW$$kCW!Hӟ?P??F??^?ϟ䟪]_ߢw'ez& }ɱb_͏ѷ"3Wfo[eׁ2``gL4yklk*loNa(%jh"6ԝB{Z鸖e  [l{fW(wq2RP7j)ZLM(#0A7@Z WF0&˧6 ;&bov~F;$jevD~֎E1f'U>;,fODQYEsr=p/}D_`2“< !OI8 ?8  9pE4sLha|]?+joomMD@mvіAKkm=_##nf~Y;H M;L (rZO0Ѧ=<`܋]Fg%}|EbSRYf҆Y0KKf+1S3fav̰YV>!1Gs4S3O.fLa<s ەb|_v vװvAζ>~p!(3vs^aPIvp Ŷ+'+ԆaCS0d>ﴏ뻠vC1|%-R QROpNI8g8@9`~l{/ffؕf!>bBf`} xgFq|I|4> OS|^ OxU|^?dLdR6{dG&{dp#G<?paS<;?(Gg Yt 9pVT.M'vHmDf+R(|[!Df)YJdDf)YJdDf)iDZ%VIUiDZ%Qt b* "+J? v7 FR)%jJR)%jJR)%jJ v`KRv]+eJ٭ v*eWJٍR^+z%^x8^=G+hx/RX=ė7s-j?h;_S6¯Y~ǿ%ȦNP'S)d u2:BLNP'STje*g3[ę-̆9al3̆2lg3[ƙeEoft?{~T h#h#hjg 3ڙBLvP;S)jg 3ڙBL,q8e"^3Wę+̕QRq)Է[ u-RFmKrVʨo)_DE~?&Կx_<_FabBKPR"ngͷg=a'z/tCM>#+zP1SF0v'cwmc33blf&T%6ю~Ăc|z>uS6tƏQw۴a6e 5X`Y,ke #9  22 # 22 # 22ȦMy32# 02# 02Ȁ&GD >p|sG8Jp?` ~n~n~n~n~S~n 7EJ3Z@Kh@khmZh! : 7M7CWݡBO zAo}!ne,<`%x^5*u;ބmXp[+D~lQ6'gne la|aV7! w&)|[`+| ޭoݾZ_Ԇ:Pc< Xa6^Oxzmwػ]/s}lI!>e6& WAS{y54́X0}7ۡYg9>eK|` Āb!APXWXź-mnu[$[oaV 4& WASljgn+:]p@˳w?M)0a߿HWc]>k:bjۇcG(xG; Q(xG3JMR HPB=sgMF )@*\Mjh[vsh-\ k4:@GC:t.p7A ]tp =6Lه0 pdÝ0>L`:<3`&̂0xPg'a<iX2rsV^U"e*kUX w(rBUބmXa|_l9loɲ&KgSjPjx:O'dF cfRj /AjC Jk̳O K#Ƴ$f+yZx6l7C:xgoC$m|i`>Cgې_ݗ"`y3x3)`sb3k۵q xg1xg1xg1~rCk;k2f }ּCHo&A#H"`^ ͠9\w*kR]ݬ+*b- t&X~!j@Mp$U@]WB}hvZia Up}j;Z+ZsSL:#/kθ~f? ;p켗~,5&c ;Y{ r)> 9x,߱Vgc}(FdcgY'Sb]=1ty 6]~4?;JuRԞP S߶xvBR47AOk6{r+ϲqb?c98̅'`x/$,`1< KX 2x`<+X/jX}LhXZfN2v=vaP}8r؈akԻ5B|PyfkX־a텬B^ #(LvvbW!vbW!vbW!vbWer ;}gr";ǒ,)ѲΗkT ;ӆdwwDW9Uu%XWu%XWu%XW3L.;3L.;3L.;3L.;3L.;3L.;3L.;3xS{}^:xW;٫Vj+{odL72F&!!!!!!!!!!!!!!!x#odL72F&!a 8dYq<+ '+fby7ͬ3/fŬb_QQQQYɵ_rqڟ q(`n,bLΘjo}>; & 0 c0f, 7ƒcɍXrc,1Kn%7ƒcɋXb,y1K^%/ƒbHf?挗q8e-ޔ;9e2ng[alc{0=al{|u_gڤLS@P"+^@DE+ˮ++ꊻ+P[m-eW.NQ ZPv(BíH $NC$_ILS{s9/sƶd%{/{K^d%{/{K^d%{/{K^jͺ l+~U3:E(ooƛtdɔK?,SR7YaeVfXaeVfXaeVfXaeVfXaeVfXaeVfXaeVfXaeVfXNcIl 1ߒ{e@%׳9Smm |6V5U j`UXV5U j`UXV5U j`UXV5U j`UXV5 XîDumfo3[u8]ifO3{̞&1_ {W7׋C1qW7K\7:5"b>mD7M/qwTX% ̷uۺw=8q8b\6f`&.er\p5a߸=cvڝXzٲ3qg؝pҋB<^.$c ?KwkJ܆q'D]"RDLB j1SBҨ8`CqT#qޅCEiXaEiX;#ԝO,|gq6>cs8q1.t|302wp9fc\\y WǂD4Qlf*; ð8*P1F:NY)L +:LY)0eÔu2+ԯPB +ԯPB +ԯPB +ԯPB +ԯPB +ԯPB +Ǩ?F1Qc\Y+re]˕u.WԭPB u+ԭPB u+ԭPB u+ԭPB u+ԭPB u+ԭPB݊JtWsqMGP;;MF7>wnu7 ^}kX"?ȏ-~hF~J^2]ˀv;>j6>jF>jF>jF>jF>jF>jF>jF>jF>jF>jF>jF>jF>jF>jF>jF>jn>n>n>n>! eH,CbːX2$! eH,CbːX2$F>nF>nF>nF>n6>n6>n6>n6>n6>n6>n6>n6>n6>n6>n6>nh`xq7ynysE+^{qFKã<ǃ}<ǃ}<8Cd/vb'/Ƽb̋1/Ƽb/b/b/b/b/b/b/b/b/b/b/b/b/yKE^*RT"/yKE^*RT"/żRK1/żRK1/uR'/uR'/uR'/uR'/uR'/uR'/uR'/uR'/uR'/uR'/uR'/uF2/dz?0 C0e;D!QwC-SL2u-SL2u-SL2u-SL2u-SL2u-SL2u-Sg:Cu3D! EPTޔ~JȊX1{?ߍeѦcn8"\K0߆ ֣(Gi=JQZz֣(Gi=JQZz֣ѷiG>;8YPYP@!Mo6}}}}}}}}}}}}G1c )S0`,         *P L2G15 A=(ETmEߠ}oP A7u*V*zsH^E_mmoh[=yb}{;^z}3]&e޻7ҵtk/]{K&6ѵMtmk]D&6ѵMtmk]D&6ѵMtmk]D&15 ԀSbj@L ҽt{/{K^ҽt{/{K^ҽt{/{K޺p5w\3XMM'^ {47$U䇜^?V'?zG%>J3}ma# x>dE xњ\_tVks݂hJ_̸e(P2 ]ZLQN SžN aGB84/uvؖ5!u0CcoL/Sx yƊ7/Þ{peS{؄vsto t`4tc*O\oHaO]bUSTUߤNN=Tmj;50%)9La*b%*(8@<)N<)`y y PpQ0O<(8@v Poz%(7@J+QD(5LaJ SjRÔ0)5LJ)5@J*Qj8:>HXX~IF1B++=Lg}~bĤ7|Z. 5d:|G% %.I/\)O~8|js܏&_:L^f&gu?ĪߪIVBzO-ΔKg9>cφVߪ+9Ƿ7KzgKo=_>V~도ew=\/^ooUYSd떰St;ENx]T.*=bEBE$TDNs{xZWXO`Ck={ׄ{Pho&GԒly>xw[Uj=]`ե^,ǣ7a%(1 ݔٟW#IcI-XpX8978!M]==gOS^7uG;")F1j-UÓanz+hFlEuGwc5q^*ԒTvXaG=Xayx,âqOLyKyKy?!ߒod[1Qe5jHR>{݃d [՗!eHmR[Ԗ!= }CjŐZ14!e%"noxφubxHKl~Vl¼T"mknHt@gtA/%%(yb7Z071!?cO69;'W6&M%~t HZ&I~QRaq0kz!8,)Zs$Ncpl\ jމx_I^  W#Yeyז^["ڿ^ޜ<=%?z %?z>!+M~g+d2ע#bFxU}EzFhIO!ː}d(Y"J{W~q .ݍ{^{=^@ ŠOպuG9~G9:D.1@.{x}OxI=uhz_mx{؈j&lv{sOtTyz zq!8NsGxޑ9 8v>/SaUׅhj=_u=_߈pW%*9*9*9{r~3^+07:NBxg~n22{]-k_sK2i-+[ec,\' 7˺/Ȭ ejsyAʒdfY(*Z?#Stj/v kSb.VMs>[[tgԬk8`Zk_P|ZޮsfY;߭fgzU U }vՙGڔgV[m9m|X~>mJ_{Ǎ)lQշ[nI7ۤoQ͇uraT?*~zJVr\!.W~Ck;VW;q^/ʊ:Z1I">V~N4Yڋ7ީ;ϩyxx]TmjʽTnKloV7ƛȟQU6Vqң6*kiSM9sت"R}'wR{ ت*` Jٝ^תҵh9U,U*֬5`9l UڪZUWSԬ:5N[U_UjS6Ce }OYP|XTce|(_EyEWD2QL4ctzL4cUKn>d蓡Oh+(C }ѻLesχE( yK=zxò~lU@e,k=vlwvj~;귣~c7{n.gX+J=VR gXj-V+Yj-V+YôjV.Y=VŰKV/Y=Voz|㌰]^eVbZۮV5*;LI^:\O:|5z7*-?dΙic 3E̤5q^a3{tG<~Þ[wxԗZLF*U_fͷ8LtNz;=`/Gwsr${36#oȞi=vo_k}춏CuwYwuwYovYku+:ӟdXU6KGT?)? V}ҪOZiVW2'V+r׊1e1uׯtǫV?1z}owyٹ`?M ΐr7Zibm Sp9O6SqɈ6iYcv6ngv^m6m1m1om/#ͼv83N 4rx8ۨm%Udoxޮ(͎;jo6*o6*o6*o6 oQwuQwuɪ;V OG ]p̤7JF^jȫ80I|R)GuQrt fAs|E+tnT5Wtb(+ۨ6+6;:[QiFuQe4ﵓ]ްjƫ~$yJ]q@ƙ'::h\+U X Bz?%OujGX?2n wX>q[\[ ֱle#,k-ѷ<[;JmKVBۧ5m- oOmzmyZ&aRѴT4-q{zZ%S۵:2yM99꟎N=~zto7nM3~y$o)&~E4ͯNJ+^l|:zq=nugyN3ٝ)ϦÊK15x&]vs^sOwũTZպ(E.;.tQ]F5E.JtQ ]TBw56ظY6nff6n6Vn3{6* [^3YV#p3[6eI̎6a36-ߌNE{q h!EaY=vpk4}xo['?L8>8c8N 8Y4>l|4|q./%ƌ τ'<~=9FtH /:Sq>/%[|pQO'rFW<\q Uyh^%WU6N7f܂v܁;q ~V}Ix }>A6ԠS‘8 IC DǪz?pȹO'r9׊kk[^jUmBKt; wc%~Ux /4c#^E Z ErkԄ5j5hFPBVՉjubľ2B E 0 '#~a|[SZ^+kyyڿs*枯°R<\k]7@ҨF4|Z]+\W> :ҡtkkFk/ɵjw!n>= &FGPZLP4qΈFg⢰P/ <1>S3L1>3 ,q>K!:0pF܄'DEwX xtɣxtU<*L xu.EhBۄ>܏ ~CXb%~UxcX_WX #%>8%gpnX07E|aIbf,q). پz7] My5MJF%7zۜʷDdwXiޟ|õoxety W,w:<fԋY7EN܌,ڰa+؆zE}ZpM/PcfMԗBe֤}5ICp(NaV\OǢjʬOPX~,T?ԏyLcfXYTsohߠo}7ރc^*@-ijD^XppIٴ~r1's9wʜU2gU@4AjG'&8G( Gd{luq8'Dp1y}- mS&ankX.K]y7)y7)y7q V7u; w,ý~>;Š.Z\Ѷ{uN~::::::{:{:{:{ԇDUҭU#G$VҪYZ5Kfiլ]VҪYz?8 oț& oț& oȫ|| &I`( &I`( &IJNW%ӣob43q).,|c6 3T*lu:[ENSMTi44TӔjRMSiJ5M)4}Cw;}C툪XRyoQ-Eߢ[oQ-EZQs^g>]1"vcC+U*J}ʾRUWUf>gϙsf>gϙsf>gϙsf>gϙsf>gϙsf>gϙsf>gϙsf>gϙsf>gϙsf>gϙs&:[|NՉ:QV'DY(euNՉ:QV'DY(euNՉ:QV'DY(euNu8K<,SO9K<,q8Kd%2 D ؈W.ҺX:qF墨~pnvnvx7zab,mv6Y|irnx4dx.|V{y9}st.Wvttɂw 93יu]'>ɞ&ٓ>MGO;5'5& dNy'Eމ"uE"_s{ߍ>OZ딑7L3k>s1h:8ԩ#oBfBH;y5K)ʄ/&|+ԄO]j\pvae1|)#d6<,%%‹dykW(GFaS>lO`Oz=fc93rU% O&סqVkO>^H>nV${BϰR'~՟&'7{rOn JnO$%7>"OWLLzB!px.xݿ' x.Ǫ(x *.*Aaτ5@H`uߞϯt,bU\:^lϬ3H=} R!٬roh Q_s~U:D Z4ojS>Mki: ֥IaD@@:Hɉ>=Q 0<C$=K&Yҋ,8 (H1jLPd 9>h hZh ڀ b"Gp1np 0L/')0 U;=Quy"C:-Q)DϊѱD!:+w$ ̈]ڵw'v{"k:Nu}'(ptծ%v:"'NZb<'F|:zINop; }@_@^Ke 'xƃ o;}ؙ&)`*L#1| ` `X"X' pHO grZA{[(|!zqx89 DiOiO &7[=0` =|C[0|0ϵ5`= `vn:2@mA.hz{ `SOzw4v/ Y/5Z0? xPFD/0"^ZGo= 0ߣ(=|2ߣ#Q0 }<O` πQ`4x<hc0Ƃqzb9:?\p8\: E~?np 0<C#Q0 ')0#}=1=O48au\9^.%}A? u>s>s>s>s>s9?q8s9?q8s9?q8s9?q8s9?qx+\.g-g-g-g-:s6~lj.0G&:Zvef XF3 RV!pF͇+ć+ć ||||8>S)g3FOO2 b>D PP#qb|>vv>u>p>6p>o7cƱؿq8o7cƱؿq8o7ZZF-zS݄_ ~5MDZ7؛,ez$6HlؔX^ ACXLqd9"Pr쏱>6 >p }=G:?b94YN 9{vr?N>>Is"nĪ"}w)+uU{Ӟqzx62$cڳZ$tV)oWHCN1둶2EZ"ќ͔ 1ɴ,iGtΰtߘjJd߮X{G=qFtvVWiLӑ%MiCP)_/ݍ=8^ɱ^\}%۷ѪprqZdZ Gk7|EW|EPJQr82fPNJIPJK%, (FΓku)}A? 35 g| =&=zzz6zz~6} :) V M 䜬8˙ `ʐBK9r6ə <ڑe*z1_NNF8);;kl4g| ~K6-u&Vk=qb7iOԞ%p^= 43H;#"f1Q7n"zep"&oTs%̃z&VSK/uڻ9Qk1YL mH\xHF|bZ_S,JH) JєP`EN[ %aA?%!rr "r0ch\;AȲZP"JDӪ4ٗ IGJkzӘ&kJf9-HגtHךtmКϕgmUq#T^ױ_:Q!pukn%lOV)o_A%ԐԲύt {@r|f+XҚJF/q-%,k6RJ_ gzUlK׃Gϑ}w4+s=QUez;c~GW_/Jg7U:2pb&S51W?3<9@>Zֽǒ*;?kР8W>Wio I7GS1qD7jE*f-B/[aZDudJk/I]!^x໚eT%w*]~;`koҧ4Mg<=w*RhT>@;peezY_u%Uwӯ6}~yTF=ٰE%%l9p$wa5=qȷ@k.BVWۀ?ZJVeOzJƧ Ir83OO.Zvھ/ z3 ̩@w'C=M V}/.~XJ`6LťyʄԒ ެ}%~o73ϵ0t=񏤮:{ʄ"w}9_K(/D g++O0b?9 ^9etdGehVN4 9V>yr,Ur,mzHAzܮQFuܥ_-R+d*PZ QmS"U$*m mckv/vJ+:;Z e2;wi2#(|a-߻g9нHˏKeŽBWH{{s)># aKܡcV}iEggZhw>>ovǺ:xwUjrXG\mul/dus{.1/{B^lْlK3̙̽&nwi^,mfQm3,f_ӽ4wo%66Qn/7Nw0Ҙi}G|?0bfY̽I3Lsu;a0r=>F'ČpG Hw$1Ors#ďuR8w)ǻyݝ@77臉;$NOS32gh;E'n>-rRw}-:iw n\ZݍԸ݂mnw;ݝHM{=\Qr[,uܽ^jO jW煤Q&a {؄=l6aM&b& p8ppJ?%#`ayO[ i[$#` WJ_%1Z5JCp܏~4Mo%.ivH"X%'ubXX2a1O"ԍHb^CLV,[rvl-}XC45XXSikNE[Zy6<{\cbc(ylle{El(vdXN0>al8(x6<_'A`]Ãن1nҗ0@I׽pta:0]!#S8yr نYXN Ǹc`Imx0 چ=xp2$Mu?" ]?-nC`%vWz>[VxH=T2tbX^riŬn+ A}s7 4k zbWŤ]2̃ K6Qigo?=.J l/n`{hlJf;sWelv?IxsjojfHc1Ho ?ɐVb睌ԤH~|'u~M >%J)H>?KP==UfVp/ZW_ZY.˂P_ }GbМMi-BHֺ;Ry@+ua5z~G뿰n M ɚSFge*3PԻ8p\|/}+*eRXK{e߸8+V)yiCՒUx{A[O3:ӭV`6^|x]r˫? ޔICI{q~L;zLIoT+jVB>2R;9z6Ǧ,jUL,~:15RR:M_SY};l#i.Άt xCpu%Ǧ%o>mc_=ww^ձo+\*nH9gyÁX$-]~/!eg._S}o̶^|U߆u4ٗ6ILh!Wú8xyY㶲yn6w喴W;U߼Q so}k*?$І-tЖ~PHRE)ú=hey g!̃P_yDMgy2g%Ef 3Tډկj ei~'S,8?ۭ/7I5^c֎KVrO@}4}kUf' jKzzo|aow&ʤߗcȚ~Wʺ?}w<(լhJJWܯݓTϚ'1>LRw+a[N\{TJre:O4uL2gTf,*H|+}&^_֓K AR9WW. ߛ)=7aoI|{ouW*6wp9dKԒS[H}!Ֆ7B6Y6Ӥ9mtKZE;Ox뺇C3PN>WY͒?e,@}ף=UN>QY檟t3ȤYo؂}@DO-4`? twT;`=h̉GJ=\H~= %Y}[*{mi*)4ov&͟r~ W-9 &Qw<9\NNE˟Rbu+g[ʪ+XN<|du..V7f` OZ=)X#dLF[eL^^2]SeꨎT'If<'sLV|uM՝.A SO5N5AVw{^MRdI\}>+lUߪM}f5[͖]j'mߎ;Δb;mg۹Vni\}V}};'Z)V}}iiiձ],}|Wqz9ZC;{43Ӻ* EkC~ȷ ej[ׇBBC ~-nVV[Cր&ЖP`ho8d=vֈpF8z>k 7ƅk>ƚ>.{kzsp  UN*~*r#£~!*rN\]HgCe1#EF['Eba}0}N-ѹ컢K{ri]mgOI{7mo#~W/&-v¿88QuaNCqI?i;Goo;)N''ϟOwN?tNws y"?ѹ_/w:t =\{,S_cOǞvnJWssNLrLo雾3}3Բ^:_-Kj%uؑz+[q 'G’DO1Q0faZ0u)f7J.W˩r zz+m|N^rԕdK@a֗VJ\ V{ۆV[igfN.nwf!||9;^-܏փd 0uzk v{ k7~kpw;3փϭD k96?ٰ;?NN0 gN2~N?pzC8Ui^ tUW~ͽ<)G~gw"ŔR""r\H#"E)EHc\D"rCCӈD bop;ƽ혿=;\s*05̬SBOy =Mx'FzYo7w<7sߊj<w߉#Ʃ1IN>vN]*7~|b?YiŲ28S*9@ qW?NzbU4U41BB* 8j0bn>wv ہp;n@v ܎U cӬrJ+|SYUNg 0ʝLYʽЇasJUʪ&@*nȔAX # ϐg0QlF>9ыE<;;,KV$_bNW^_b/WS7aV㳪^W5WkyyQ &|#i>O3i> §Yiɧɧdeookȏk?2dȌɌ'!3KfHf<=#Q PJߣ=SM{4TGC{4Th~O-P'~ϓTg4D{=~OL \&G&EZz K?xFO.QU̅a?x\Xo^#Oװ\迠x'a/"\|++?R*z?Qaϒ?JF,xNFT|-\ܬ<<_ÿTȠm;w@QGU<Em7#U6)Ky}QȡʑKQrX>3R#JR/9T}QBՏl*UFjayCS1.?*?@RyT}*VEYI ~Jb~U @@XE y @IJS) ̇aŒd9XɉKZZɌȌ%3~9I,.=$&KHJ3Ecp?8\Q$6$H85gEXgqssQs0x")rcNVZ/EyrNV% F^^Ei}i''.9oH"TID橢8eViH"D橢4ee,4DE5N g+Ri(%ǐp hqH8)6:33N\ŃYRܔRc'^&} ĉ|2VNLLwʯ"(tG2 #r Q2 S2R2!#1+bO`\䓠|$ Q$ee&Oa\$fL+_ DIjH&FJ&!yPuE>P> ʿxTGH=5:FD@|CzzLH心vO~_RAHu6 6j :jzkk1. :GWƈ2*ՍM8*j ֠j ֠RmQQqA-TqV=z>3S#=OI ߇T m җWrWr7T(}EToA_T.tPBU.QBU.tPB5̶`[J6VqSSfJ]{Lx_`\QrV/*erV>jMJߢJҍ mXxpvIHY\sf߬T!f\3MX͗Gj^[Us:A͍HZJAuQj*(6U! F^`3zօd[t;d+*o2Z# BI$*Xt'zſ(V+<5͊o#gH+GT^W,S?zz_k/(_TX ~YCY?(|._4=W(|27RNNU{ʧ)~J8y"~_T~Ar5)C0a(vEx#WcVpr]<[y]M7U2,cУ-*.jSڟT8yUL{A{Ez {~fjޫyO]aLw:-;hÌ^J֡AӣY\hZ֎6mL9h:R/ԯB[zh[жBۋё{8y==9"%:WnWG] <>4pj V~ヱr3}\WiFZbeZƣMB22w:gYhs˟aϼ]"6pn*8C7[.-Y+uutݺͺm=}^AS8zA7eJ}~ QZoKc4XԷJ:k8#s%*p~#(ƷwCsK!nzC#h4@!8ː0d I)Y"R Caaaa+ð#=#e0NVP_Mm=(k7M#7=dT l!(#Έ?P_up ann]nt6P=`;+ޗ8=wOqOg ܋`{- ĹaVnw}}x}<p_v_stv߳=H1y!B/kMMfaRYmmm}}|'s|g;}}˾k{}J17 7pﳯG)\ T lR?P*u1}RvZ%z],{TR@L]@:Paqn:@G`f`N`~3$<*&>Qol l -n^` µQG'cb\"\2 \ w˂,ȍ˚AY6ƠףCD0l O 8)8%8ݶ, 5 ..2^. v77 35#;<ctzL/?kě*{!eHWjB PSQ!_(2O+6I‡C]ffyņáeaXqhuh]q,3'(5[f`HTCCBgBB 1r%tlS0tKև ÕpQi.<&yKÖ+h Еpɡp;<?2i9ءdvp'ͻ%/ q׋!1%=˹-7?>>>>>Q~n9<a/? #cDBD$iLL);fd:ve"ёE M^ԊluMlv"=őّH/;#Vs5,*ubc%r,b1GW,M63NJr9,&nlb#6#Ļbsbr_3;cKbc`ؚƲEx?`9_ء.;;;:þ/1r5vdž]Oř`<.wc7ƍqvjqO<O/dzVp||vgG| b|YO&>7__wo7-MxpXd x>>`YfmXP&x&~,ѐhJϴ;ID[bBbrbjbye~beIb^babTbBbebub];9-3'r5kJLIOJM\H &$3[ցĝpRK%$IKҕ n&c=qg˞}C--^a[o9UN-g놖A뢖+-["czei.ʴ:]HI8F,iW9c1&,.&L'"9"?;3"sӝrpUzxz}zc]\[һZ[}C <>gjL_L_J_١g}ow3,3R>7Ә1#cx2!Al53>3 32s3 22K3+pVW9e2k322[3;23=̱Lx~ :3'3g}i9Op2wkۙ{YeVr8#نlS֔ud}1%|9[ f۲S9+;#;;;/08q<,2:.۝ݜݖ gf HxT,x(;SSw9u2W,9W.ҹb=/ỹܴܜ\gnInynUn'ݟۘޝ۞e=Pޡs{= ^(['ח;;;;mߕ;M_Lϳ<˙ |cޘ=P>[,S2W///ͯw77ww{c3 ŏj `S>BGg"T!_h+L+L.L-(.+,,,.,+,.+t6vzϷpp}pppp!?0hY_R^UbeSS-EW1Ɗb^X(N+Ό\u9.}q~\R\^\U\S\_XR^)-/gOO//oRnxI.՗Kƒ)\D)9Pj-/M*(M1KY嫔V MKY#ҁRpXdL|ittV:Q:W]ת4JSkMkCkat?~3Lhg_&JBb٩&VVf%J|%N5VeZ+iXIBFB򕐄,3sLUst׹usu<[2/Y?8,H&]n2ɞ?'/909$9<9JXR%9ɬ81XT\:D÷')97 =9_d6&!WW$WPG'KIndrs *mW%wdmr_yOMHnRwh{Hff1·7wk>}<^|Up{ ܅i~ w zn>t ʗu7\S]8 4 IÚ.L<|9V?996po:m>sW{vZ]&4p\k%6EXll64-o.?}xw;;e8zry쿜ߛǣnK|5hm|oػ;[#)s3 Ѷ37y׹󐜇g[d_ZJ[zEhjR8K%11i1+Ծf[x-괠ky5j?e8XZK "2_ PދV^ܽ~.GOÙ._Qiyo_@NonqP{'ņah^g^GN 3ߝ(Hv,{;K*[bԔm8"z"686P_j,,TcPmj.ƶV;s+ZIM(s/dK>z,fm-N}-Z,^ #kms)=2HEP*Z\+4g)x>x>\>>.܊ ڶ՞ i+ YstDr{)\ YbHuh>«Y_3E$=S:IdW'E z)c>/ŒR}KYK@)z)(e]/G@hQh9[i/u^pZml8b)<χ] '3t=X2SOQk?@rkLV:뾧qo,gS:Ix;x;\NݺԪ Hݎ=[jo`g$Vݦ9 6ƪ'D{JG^"yɶpһ/i'T}i8HւFO?6>F?Ɔvbuڜ]wfK]/ԕ#F^p P u?ngNu iƮDupe봌=Vƺ_υj\.XJkZ&e9{i 2Z 2pl9~9vQ̙9~hT^K;`BQZw[}ZwP j!x;\N_\ ԾS}`ow 6HS2)xi!TC<$[a9s[MDrmH.@Ȕz/vh޻hg8xFxigFxkiz?&Tc/PZ#^Ik(8PO*XI_k/pCEw +w+u<ϼHAuo{AWB$x!TÙ|7;9*V󝼿ij1i{[N4#lV,_`r>N U5"FrOYFۓl3%OS:< &pjJ^y:kpCԽ+gJ[ݥr1=)|.%'qEF[{$VNѱk:h |Pvyw;*]|t*.{60ù k?3n:Jap%F~#>5\D޾&~yUN!px ӌzx?h[nq4Fgo\i0kGNlh$]?7?<*V"iɹ;Nu_?_'d -iTiE+(+k5x!ZG_bOc.C ٳc$,nΎZc<|<*gtRhoo J$ Opr_ ZBs-wef>/q i?@OcxOQd'y2sY"38(E3hmZ|pМ?Jݙh;Gp*8-q>LpZs`S83i2BV}/iG۶JTIkO=[gb;e2 CTr@WSsTvP;L6<_!>{7;&v1QAFZ{%~ZId/vj\f7"ۋ^j݋̗`"sք{57Ɉ`'؜B\<3Aɗrx:B6 _3FSkPst [&w:3X~6(Q/ul')XxD:Ǽ  ,M~g1` l^q_#2hJ%g:M5e49sLrHčY%j6<|x f8& \M/g˯i:%Oy5{i8֖={mܭZ=#iq%9s 9ˑ21-H߂<_J"/% H.7*qKZrbc4c'g8_{dx;ZwşðB fv=h5?ӳBw>)؜D![bZd+TP}!Xӆ8h06ąmdrr']ׄ>d#ցi Hq.TShn K]"Qy&WM9u)m=Zu g>;EZ9̈́Y ~a<x/;``w9[sr.]Xn4gdkEik*i=̐җ@-cBΒy6cVbVTV<5 "?lpx" sZ4a4;]%_9˹\oN<l^d~kJbY^}}D^TrQd "z;ȦlZI5晴~#qC{-w6X[Npv촍9ᗺL<B_wzWNǼٜ:ٛ#h9mu0jdΐi5'<Γ̣udk-8ߤn$ k[W yS^pJ2R+Py:rTv Qz 2˘Wa&j. P1hC9[;2 B6:.l0;s[ڂΟ2[~aL-b7 ?O65:Ϋ d^%+c0yB8/Z]\9jwAr9Myc]WlO;i|CC׹d Z8S И'.3C@$f k595I*1'rVߕ_I^$O^ pw+@yB-~,Xamc3aGe,8]^ 0{ ]YhWMݻ8I{m菲pl&1g}Ñ?l1:6X6__ :'qvEfZƢ &ɳ#Z|?O$˺3O%xN9sVv`VN@1>CGl90וrG l w 2Y7]o7L02mcwB>rdMpNqobToz!-zM !YJ)4p 'd3:˹EN]dv#Sל wUiƼ] ~|~`@6^;_alp:BޟY }eywӯ$7Y߫, WRMokXz4u\KUvfV̿=G={].(߷??;/_WE9pjȷAkN)tnrnRO[E2/êp}U ּk5zޚfͶY % kdmvZ{au:lTTX%T|*z/VގNvy3Q فpri?snuyK<#dno.,&2 >dJ6Y_cryi~pas#o,N=!ўXk\+KscVVc:*[۬_XzXV?!k5zzRzoϵ^Ѿ_ni[ZOOϬIUQ*Merǣ/=&W{G[V}TO PPjz\ROj*QOgx5QMU LPjZUMWWwڃM͂`=_{UCTLRO5TMUKFӤj:nڢb}oi[ƨq45[S _6jK9rZm;hײ\ ;Ϯo7.;Vw=>k.{=JI5Ş5r5Zd/Wk Zg?{^}=lgwi'3ܯ,yMS;ג9-iQPoP7m`<]yF9FdgAWrc'y?`{ g/ڴAkj*=*TBlYz؅=.3нqŎ@P.#q kp=B "AO:WQ#)eY&CQw15oԝ ~O$5/aRj԰"m[v˶T&Z?9IJ22Jyt ]9:{LȜ95sV̲-\V[(;2d"22e-KTO ϫ* K_:aںs9`NpNz9ts'/g`ΐᗔQ9csLLəqA3*WUҏq9rbPʜ5H>1IhC*nĒ}:赟sĀ*Dv2sRqS9Hf$ɍԍ44%:roN_#"}%NFGEFF)!>|LLNȬH;8L|YY+StR6FDvDDGEENEFh Z#ĿTR|I?hHhhK6d};Ul1u7{${c[-N3z{/˞'}^tçEef_X^?=)ёYӤǦUDd#)^y'A eatb>ϔK4]]_Ǐ^òn:===='(fǂ:HE=DĹX-5"%q~ dm]:n±y,/VkˏĈ;XX؝ÉK>~X5fzqKKnM<~._܋'HTVm r?]'ǧJ/_T}X)bsjH.|Y,n\|Y:窹zHQ_Q|†X`lKK|诋ddWЃv; P8V`^ݫ2B[O4m=dރ/{Af2]]h00ttY,b=1-D|>?qq#/++zށ*W 0c0/D92'c ~m $I}-a np 33Zr na,v0;\jg6E.U]zm^}iw6- mm3^]vǐ?F[<<v9 >|pamns4]Խ Lp DD0}t3<OnƓiw07-ß =SIcD Pץ-״EuN+p+p^/Nףz oGnc߀A~,cXk?sezU%%z&gujNmFfܡ .p1v2QQI{?u82qZ4dҐqE.N_#O ct.et+/˻#B&fv٣bCLs66Y9CіG[  ~<<ygP|0Ȭ^K, Kr>m'h8=d<'0.rp9z2Гi蟆 5kx] N`|[\!W ;m|*sYeԮF.1P)r|g98dDhchÜw-uVҩ9_-NO]}Vk~c=kvY[G.x{ǭzc']/yGKY^f&w;].wq׹:{y:σm4s&06L~x{_c͗Jy߾xh8#J"ޯi-N?P+2 _SV[dٍ4׫/WzdͥVZ~JʚWի*YSuXLnbzbbR  }\o9ێB|M T*R*.Y]F"X "p9x'#ApkZg~=ܐo3]H02_!35F&>a(w6#y^KnV%W```j/5WK/Ws 0͹zkt0;_\_kSpv;Uidu\%W0Vz8=QuƗ\ Ӌҋ .:wI3N' ӇSqʳklx}Mҥw\S[g.]kN5\z*}QRmʪkM`EUu"2QĪZ"QUUUתZZթMUy#f9{{Ǐ3b+4pO$c*4eGJ׃FݾP u/MKIKT$&'&0+JJhXXLײ*d&$֣4*)jqA'v'%$'h &N#|tb7Z9m'Şec;v2 }i]xM8"ٚ$w<ޒt2!.Y$;-vttư= P[D'}Rrprx[rTNONLV&%gPNf}OK.L.IHVCH'גR7$v'7ӵ-3^INI>ޝbR폰<<|+v*MK 82mKTQr6sB|/,NL!N --NuJu!;s>՝DTTԀXqjH:5"5u VJ 835x#% 4&35?z2(fR JWLZItrCjuu|Jrvj]jcjKj;[%KcK__ڛOvnغԡQ.KJ ԰5#<;U::} b`㻂ԡxߠ)$hNDC[mYP%ldkKtLЃ8r<Ջw( HҌO I GǻfGQ`jj]PEȖ Xe0+6;,H ٗj,!N=v$\N6kDt_*X 6[Xu/8ct<8K\˃yvl0qEt^q^TĻl}y^Ҽ}ybzX;ׇLL}4tW&,7*o0aE^yvyyfΛ02ޞKVUST۶y6'mۙ'`Gl^2Bzt[my nrbO˼O LqrkY~ Api |4cOs9Bp5bWjۇbq)ao@YQc3gid^0=yJ(\w*MB#*P6]C'ТJmYDq&Pz\ᘧWmPAXP6J[vP#~Ȥ)}ql~7COj c|@#^7ɿ#G)֣:Zd9 Yu?%,CӐz <9edco@K_CKz*a%: ,F3ph`+)cb3 ѳ &H0k0*J˵2{0ƒ'fvsHkRnV+ayp-ha9'z;pKT֟-RR?Qqzn=Bn%@020t3 s7 ,%XHXMF[ l7]{ jh!8'Є$į h[=h4oZ5m=(i$t%qm#1T4&L5Pe`澀`12U MV;v׃} zp=1 i zqoDh8.? Hpq#A jAi#3A4}̽?`9e(s/o'X/e=p r`EPMP6\{Ǝoӵ%k?:ۯYyge'o֭S=ɵkY?XW?Bp_:)mWN Eƶs{I Z\Вȡd ]"K0`AVFdvۘ#g3Zxp\+`UQ휒̍Lݦ?!mI2m mBLiˋ9k9P~ΗW2O6uV3,}>~iQ@m*Xmd,㩀l1";v>s=sHFxت?%;2M_.㭀5$낣ƆO3m (1Է ֹ!{9p͞ήdmd=+mb.5\9^p& lVt4ͺe/itSchݑf\%,Mzn{qM.1Y7K5VL&2,*#ez(=Ϭd;Y/.Q2

3h\xK| Fe|Tm.ea&QXli)$SHREd > h/ i Xk@.)υ+$9yڮ DN3$}!n 5րl[Ңۅ"BCѳ"Gm&nGly! iSuuN!BZҺ0#-r]>4E)j?-d=PD"Zu1tcshMSK8)Mm\3Gqh)-4xm'VLx)$h&~g53^f,2#1O10 /2^%]O.-/-o,+uO+*2U"^TW8}#zk/CFhăF|gkFe rE+~1#0 /"."^-ƟE !&;=(&  `C|W#'Aǁ5Ŀ@< ħ@ ď@<wx _@<Gx/x/xov>7/e'f>v^}٥j%p2V7XTuV9/ʵB& ۳}vRmm7QI.R]l\iIooTi))UvnS* Ax1>jPn uGP<<[Դ`g;5= Rzk"ͫ Z%(!(#sAЛ@# # L0`\ 2`=&;v#8@p)eI^)%LN;Kz5A;+ȶLЍ'A Fz9x׫$F0`6<KVTڜ{6ۜ`'7 xgx N{Vo-|/w$Nze?Q^?~bZtbV=Ϡ]wv EB@yo%[pCMn i.AR c.Ё;"7e}5邔@F06[oFJƟ"i˷ h,a|NTf()8pG>*ӉϦ#ЫK3[(k>HSz'>De}9!rG/AX)<5v/CXrDπ t8k #ߌ=P)wg)( B9aH? %?oEJpS \p |5 >q40t>E0P nws(/..DϣΥ(Sh+A 'g1ȋ- އ?CmgbHIm򨛼^̓AචOp{7b?#|) _wCa`d`Tpw06FPTSM@ @Ss ʳښ0+12] ЬmъϢYCMڑ&=g&9:jx2>c:_}ǥ~=Jt| 5ܯ!Y^ 7v> +q%׀j_+ ;T,B0F p?8j>(l;^x##- :\؎{S#6]7PMQoFnFҵos;\rNyi=MOtM{:t zݽ^ء0畋̃? r8w:Ü {z8}$ԕa=U?o*'=S[z~B?^yZZ^_՛kz~]oozjG{=zl7ܫlr+UZ͙cl;.W\Y_痋ǣ~^}T`xNL 93huy3],;o! [u]43Bz֗\j~Zs[;e8ZJV:ڀ2nՓlօAtkHU=U:Qj.4DY^hqly%etU52j]B;i0gŰ'1*EOЏpR|}[P7UDQY`jeL?PsZ9ZoUm4I3:C0\6JR=|UEd45=FEשA`B{UX&>Y웄'ID@?@uL+!fz'SU~DO#ΏG=(8gz֡RiZjgτ:ߥΥՒ׏yz~j2_'O')vI I!SiZGK I- Ԟ' ==5$8Iezj@5!|H^կRMz ՜MW7:Y' $dϑu˩ uDߠě@H< _O$ K<r$ģcx =U$,knY7#u|FJZgԖUzqfYG (d/(N#:=G (!=bRR'ZZTI>,=28jBuVz>Q\~ {/iO"܏aZҦBj#d U4fS?[OEzG$feӝ`Z{=Ǟo/+:{nCQ]cѢOw:͝VN[)s:=N?g gSQ?ٙT9gYq;g9v9'YkQ7pnmsKn7gwQn;ޝVlws].qWPrݵjwF)w{7݃9rߺܽ݌zqO{E^3kurJ.^wחz!o=M&ySto7Ǜ-z+յ/z޽uFg%+_o˞z'\m|V+~~o7[9ͳlr%~eCr7,>G+jGk'q0zj`|L=Eΰ ۶mClÏ_H+RC+| 7/_SؿOW_e/ ? 1 R~ t +xcbΕԿtX`|-]Phc"d O3>jj |zt(nouYw֟]?/au~f~%e;rv/=5I+ݻv3IM5Y%p-Wъ(L櫏|> MQk;u*F.Ib&)[vjU*߄TΔ}Vuo7_dރkyp@xy`/ĨC[9,`|^;/kKchmz6-)oj5oS囦9e&ަ5v+MtKk?zMkKҝw}Dզm)}i̘kdc2@4,&K$riYgjYZY.w.iU(i%=["OVBc]3Ww1F#_Wԛ]_1s%\ʌ |ӕ|hFnFOӕS˯JO-J=UW70o4â^/Sͼt,t[:hyi4= ϕԺ7֤\Ӓ`56ZށR5Ru餆@%tF ޤPwl|uZ!'|%]l_#,fY3#,9\36s>b)Au:QO?ez`ֿ &]9eUJ??뢭+&k!G_%ݨoOnJ ]`M\^[p.jPq}m K3nG¿+냖k&Pz\o-f7 h| L*TwD9]QҭT֠Z]G\&jcu0F0&0Ӧ0j̴M0afb̴0 x7&>o7w;'>7ww)twK VRhn!N]^w{(N5{S%|לz%^וz{$J0*&SʩDfEbo* /[m"؊vx}(t;N{gyJ_[Pi]~goߍ)4ޟWJB3<!wү6M  OoodSJih/?Rm"@""-#mSSWN+%+ p!_խudDdtd, MҧD̔>̉'.;"K#+ V<#"-".2?r(rsWDj"gquQ K4?4<=mm[W{Qer:T]]2B ZEpq.Ըd9 ρD{#VO pno*Nw:LHʢg γWOّ|ӥ:h{JIOu4RxN|S_~qT g|GFƋc *YiN3ͱy`l u0Vio/>i3mc팴퉽|FS6.V;o@\iN+'M>"lKByi })OqaΩ}/s'ƾkb>›tnDUU.Ҝ5@Gè[T =8;!Lvվ 'c/@,vw# :0F6ȩz֍bV9\i_B_+6HȾ y+;O%(M3sW.'g@>" .i$ꛠHo-N6dv@oew7 'ϠcG-; ˻D,vؐDڒ}#A#I܆\ qdwZĢ\ұ 슑ldޛۻ2w#˒4'3ml~wp?.4n9]ąll9E%;rކl"籸zi)FM}qXΨ eKbeg"짒_=8lC @17q}\6(cnV S4$&% Wv^؍ \ Ȃe=^)V͔eu(r-][-%~G!=(G4DZ8FFYM A.r{6F;h)K&u+3Hz.9[ ;H}YdX;΁}ÉuXGEk'ǡ5yW}$5͵0ϧ2'7uצw~&ʭWUWY;bSl =(oMs詒z/Ιto;Cݢ~:k:\aw_˔^yM^_Ǿ "OKjMӘ^i.ˬ|'Kwl%FV]m!=JF=vz(CV9ui}8o5ܷ렮 י&L4a(Xk9k~:;^ ucS٥b5СƵ!l*]]}WiU8 W3njn[>t5_MNJZFqea+ ^ b i2ؗT*WgWê?WGR:NX[y*HVӪIn:i95~MHZ0ߵ}Yi6ty4J#y2*f\ZFiZ>eյS)/mE)5#*`bjMj5٣ j3k0oWKH\|7=Sjյz/=)>C:zZL9-99}4jCw0~hzukG⇵CFgmuC{4<6?-jxCmʶ\Vm ]O} |MHsvgv&*"RDD~""RDF)"E-""RJ"M#H)ERʗRJ)EZꋂ?IK߾şssq͝jXvoq1Qgggr,VΚ[ۈkXVWy+5jY}=Fl_Uc}+X_(k0 f f~/5zhzXm]S[S=wͬjtr"a uпĚ^חl~JE_y<f{dgτ75=־OeS8#C;k"_WQigS{}ȳ:N#{J =r oag~=AUy[Yxg{b=:~Wg5NnMoO_Sߚi)?9+PSI+ʴZW цi#1xBԦj39|m竴mM۩iGu]ףzJ/ &zsV]zOԇQX}qOҧY\}X_:}E߮ì_U Y#1 aKsF#)[hzu7:H[XFOџugRo~c] <1'bL4&+)og)_B3W4ow II=}c+XnOTguPn ~cI7,dp'* 17;lZ3r"y;h'W:}W=ӽ{qoop%n$CKZ7Ps %@r4>.Ro(KHf.oR؃@;p|dFIە^Z.{僕|1&/vvQAk~w5o&U }c2/(f7[1)wYngióhVR,g)X5hvwcՔvzFdvQ_y&v]-wک;QoQ3J}UK1Rw<%L}.w!HH}:cT^ |_߁]P󠇚9ҜYm#|^,:?})`: <$k((5VMP`-_.o^6.'Horm%F+V,,,= },wL0U %v!uY -m=Y~w:cߟ#,'b:[r,oq2bS̷qBnjg7g>cȸѸf 45S/Bhϻ tlHޜďJww+hSuVeddWUz%E}+57u*UYe-juuieݭ~F;Ksj}UpFJ܍P'Zᘚ˃|78*ͺºBv.;;Jsoqo%JeLT~S/???c ]  d3p@/==7x555[9IUubq]2xG75j׬w6 z3\]U]588g~OBq\= $7?1#!aQHTs%uއpHK$i%-oyy֚^]S9mggrVj ݃wwv{ '*H^ hԧh^[Y~;g@{j#=VU(2y%6ɫM^ ]'=JCI@Ey:Y^Y&>R(V;E :r_E=tClXq? :DDлA&DrOb0C@"jw8?`>VS)頯;U_ŽqU$=/YT599AN}.PE/&-S&?%><©TXR7v6U';wS#A$ RALVRTAj~jBߤVJ&RO'OIe@sʳ..QuhsSV $mv-BYV17ohݨtVOerYwcЭ@<{3n[sTܚg-Qa VZ/CzzʲZT}}ʳۨFvg@ooj z} ^SeAVXtkeoHnz H?~^J ?[,W&Fˠ8sցwփnr6Bgg Vg+6gUIMMe;o;o:;;{{t㮩n[.nR-SaUqwy1NNww!nntB"ka]̊} ݍ|}fw3߻Vw+?|Sw@@EEt͑U-S!>Q|R p.|lQep^.𕚋.>8$ݮ8`.V8ݍ8::sM^)[]m=]BAUf[ OIsÌo7_t#l.Ho4&mN]3w#/ͷ3@g9ȿcy?<X^i,Ogy˓]^5;ZӢPmPqX^Ψ gTgTgTgNs ıtpPAw;CF V6蛹7ܚj [y=Ve?6`Ϸ5Ƥ:?rV3-Dp*e==~3Sj'O(S[KvZRQms3u<w;+lx UF!-\ɺ s IZ7cNuq~F2gMYؕJ̬U*/!vM9ќ T1I$ ɐ<G74/n?)OOjN'৙ӐHK ?5 ~9ؗ=&|G ԡT@T@ߧ^$H=z~d>'Ta2U ԓO7Hzr}é?IɤR, =[YyV>ˬݍ?*T@QG X=h7 A[ F(n9+`e+5[WanvF<;|]|]$jG!q SvvkWma_e_v;$_e׀˰;ξ|'o_l#wi|}#R:7S ev߲nv7o[힐堷ٷA۾|~ N?Jl Z{-گn&wb^ t&gg g g 1111ycccc\cccc +z筗azvJwfw?/.oo׿xsA?p?=ȷOu[*-[;Y||f91ϻ%{'oL|49s}jtyp'9 s*pO`MIMYX k Ku7V1[˸-2pތ>}4Wץ߂}}:zs3zq+zo;Mgz=QMj(5_ ՞;덬KWӓO+}·G'?u5Wwnnčq7nҵܴW{Oe$_i@P!yq#s8;<;8Sݓۛۛ)5]럝k[kyٝtY= 9F"w/;kOMl_w1O N'|'0[K9I'Y;GFd!t cÝ*IB}| 0>Vu0>Q:?q2*d XSF[q*1WBP`ET/d%U#Ђ$U#Q R2&U r7UTRd̘ F[|g9f$U3[~71c)7hSmJo}2'$EOH&V>B7KSE_^Gr$I!㖞{N^ wkJB[1U95iu<'i{T={s(05{uO|'R5=QېXXTbub^涖ܪ%JK:k'&B7ߨ@bYb &'PbEbKLTUȥrYT/'^F55HJZX MV&%֩pīH/2-ЗZt[*w+spPQ5'<_KPϪe!kf-#5kx-֎e]5^^_+a $ú죮tti|[Mv%B27JjF~ |MYm˫y)Ӏh v ZөNVwe28_#8W%0oג66qqm$e9TWKrYVrOV%=枦vߓ} DD&GFt7#,lEEomVѶhhhG~CÅ4l,0'!~RtJtYѹ]ej`?lnq.xE7z8F@8`%_hǚhΐƺJ'F D8S<<K\$)ƹ`|wlO} ;v$;b*x8n.@!owJ62;r@8C^TƧgER`6۪gwo|£ =DTByPh(a ́Vz-(yDW=O>'F ^0*1I`0 XX ,C\-&F``;+iGbo88̀Y o<חޗ$lvfG3PnOi1~`0qH7)s:<`\b0n2"{̓`Ra&tuO ͈[&ېoİ(.H;ɾ$0L|Lri"Y E~]EZ f`-ؖܙ|xlKJM| GXj4Úh^Ж|dT1ve:x>P SÁQ'R@`BjR)~8L C%LƂ_ZZ֑_ژڒÚx^é U@޶=FVSh4:R& ݀|Zm(+Ez&@s bwz}~AQX` &Si>? ,|u-]w|6҇}^Y'8.sS:DJFg͇5>|k%NS/dm7itmp:—*6 )~}Ng/diWnrEw;;#81љ#'?糑n3ϙ(,lYw69[n=Aw$U"]uܺn]2`m涌lv[Fu b})-p:m- O )Cƿon<2: p&~_s>|Z)M+=S]ɰI;πsC{$6JEڟWLۜ4`S c)9锼K`RW+~[4JrO |1rꘌQ2(S9LI@v ;{lGscO0N 3oäS;2(%%]I{Sҋ5P Iҡ?`rϣd%琿fyW$j-n|6[l|=؆$6;Ue=ȿ|Pr;۹%>ZI2S*<{3 BI 1H1>/z`'q#6%3Jz%_#=] ґPޕ mQ~J^ ?>ɜI+<ǫ~W^XޫI\A?>ҏ i:#7WBC?ڟ{Io|de?$}t6# unTǂWw>~i*}_<*w<鳤O6bC^3腠0״%n"]M:H}_MAi&G\Nҕِ] 6g&geLM'(1L)Կ<{l fG`%r-eOyHQsPA/3! )GTPcXC =p\_bg /-=@op0U%crrM'72΍B6Rt>Bv#9d'P2i>"-a)p>| Ƥ~rVh>x):҆I_hd$ehdg)$_L~4_ H',w!Q="u˒aS2 ߚa0OyHf1|yМآۂ2o }lt&mH{֭pBh&G+i%eM^w ˡ" Qs>u)M҇H9O4 !4CMPS$-'Ss[0u>DSoX!YKϼ K=D{;ktywқGjRm2Ʋed6idD7 =*-33 h3;39ES>+1v-c捻>c# %/!}.\Wt_`:‡^^Ce[eqNJJMs{dvC2ɼ3~.e",t,sHY ňG3 4*niAP&惐"䃀PJd=f=W3cXn{J%HzP}#}t;edf滑W6%}t)r0 5-K[h>gs91SV! J\GD?0e?ʂ/s\HyGpc̷+e+oKQW9^Ľ]̽trr}~xy0xMfR`om&-Нp?E?;.%y@7͏[ ,b>C2Nꁴ7xx>B˗[;G"V@1ExxxxoG"M(ďO?)>7X?,&߃y\/,S <'V{ݕi_u(ceh;c"Z[DPth|7G@wɹO@Wu~?'B9'xH"Ҕb3F3#FJ3H1r#ͥ4iD 2iE"a07""R)"R.Y11"<$?0wާ^ ~#!@øFZ!6]BM .@1mC~{H<_Dd[?x6h.?ߤ | [{YňKAc E/ ~6yy+ς^P>0̰ÏwҐiNF:hD( %˘*i5O7)3CBz%2Ff,-I-LQBk¬ި2ژe4gm8qXG>R\;@2Xg# 06JēkoxBa^n@~hܠ"(N-i5O7)A镂Kz"@@ {AFA@ 2B#K#ՠj#uzP#h):8TXI\ϤUENځυ1ʇH{ږ i<|t* q-Uׄ:P=1q7rlI\1vz6F΅1ӳ#9/ӧD..ψ\ŵ;}5FxSxM` y!DBBʎD'BB|ʰh PQtVtNt^t"Z]]z(2:6>!95#3'?z(*Wы+kޘKX <>ˋMMõ 63gRI46?V[[56ƶĶŚcb{z:bKI>ÐRsm3m4vcδ3hBo&ЙHZ8Jm39vd<O :hBK}S%sXJe=JAt@&#>'DCECq=(ZLZ#zdOKw~,ګe XB'$|?+ "Rh~I&xb-^"-^7/u-R`%zWm[:'B#ZrsjMi+~\5qZ4{hgЛZlzWº=T)VO ΟXzh 49d6WŔ%G3,}I4Jm}ے{{4 JXr% G=)T'U¾[.)]~UvzY)vbӳY%^aR>HcU)JWSO\jzU%/~aRsWZ\)*,6ʾ Ŀ]|-rUR•b6Pĕ VR'8P_U7i;귝kWmvh*_n;ߡV^$tկ߼$~bJtm."w%L'B8G|\J,сvd*iN?Ǟ@k=w c,k~cz()k(-L 8OJ_xQyV8E3_[)G4kRk$ӪnA@`$Sp(KRB3FP=7* s2aD ^V|>]O~)oH+~`=rofBY^AC-ԟ=Ui.9'\G{{|P__A $}f~mŝl miҿ%OLSj4p Gl7 5Z}G{Gx`vs㹲{88YwIuP_I{gAit;] ˝)Ngj=1g1[d7"E[9oeݷ[Yf`5,[ln5Ͳ,{7EeC*ւese9`VlnesY6g#d XvYȈ!nAkč cHQjI`yOk!e;Rt@||o(5Vk98z>Wt"^/.V.-<_Og~Z o%V+F>4rȧշO"2ZHJ u CCan+y+YW+{74wЩ7lhAvю7ap;ӎTA B ]_2sF >Wȁ{O\,{@]'j< Y GVJĽ]UyI;I1d0nxe{{jRyCA]ޠTWY֮(QW=(S^K0by)A^n0"yqac^Eo>K㛺/1խNQ#M]MT6ȣ&gwiQx"}I^90Nn_Bgz/ oy(d +ڽνZ:#zE \ƎDHn,PŔW'7rfU_:Fl.ץ^mp0}ϙӗ8ʬ ?FnE kjk EGuR/Xz/mHLa9e=> 'rOc_B>OGE]7jt>#y xMgrΓYux2PWۄ NnGV322|7Z2™E[UoeViI}?\%2v~ 5m|`-O{LA0AWL-HPNwU]+F5R|I#޺ߨ9'wa9 _RZi>ϸzKqy>{Xn>!7yKW3¾w;ZW=%6"q"EbIɾ>B)08}?Vmd_yjsa${j4{ d9UKBˉ.8Us!yS%w2rJ-]ov™9GcL[S;ҌʌS6,B#"|K8jNԕo7w!FQ)oMg?,vE31sb~OƖ}%Owb? L|G=Keޞ9&sl{?>ʬ#sqg3d~>3g~_3o}"/ԝBR}Zݩ/.}Ҥ"!C 'D79{AC* 4{uMl%ʗ(°kTRmHu!1zP#h nо׃ kB:ҙN{>a]΅0-C/W+S?{z[kd5@EMVmMk6WNHpqK¯0 "}LjNT&wf^es*ES@zXr Lavowb,Pj@oa}#jxX%ZiBꃪVթz7&]XQ'ա:%եct zu.ֳ\]z5Vzݨ7&]z>c>9}A_Wu1&Ť~u ;$gY;oЛC7#,CXݬwmଅd'BXp G(5_/hT.S\=U8չYȋX;*z"KY!x$LDr_"/%3r)I>MJ\—3,KɝgJR)y&/&8S=/YNI^y[?PjSU45_Ow~V!L8"ǽ.={ }gwOJ_yAUNc?p [Z# ^&Jj$_["[%9!R3W)0S\i [82JaZ j ?*DP ÑH,H<22OGxfg@JxrN7{9r4fd3Khax%NMD"DDHi"s#̋<T,ȂxZ<#>"Ϗ ^X|V'z #X)5 5Z_ +Oc◫\zo?&ȗg|K)٥F.5So[ TˆiW A5hMo5(WW$p}r-n.t x1VlՄTA1ě@M!j nо 1IAB_N鮆aͲce[?G$;~~vF^J<'i.2!^ Zⵠ!⭠! c >j Dž* 0{-Ľ !rҝG 댇۟o#'ϙ xZ̝|+,G᧋.Α0'ќNJRmd^}ϊU`j]|pg=3O@u&߻z oS1vPԈ~m}XtFw|sNm'1Y-}XN.1OS'jSL_}+b{xHƊ7ȳhC<hFeN\9q5{_F~%J'kP|ҫ65w2 Hz+e vm&OˮM?(&zHR1lPh2f06wřנyI~exWz퀆b6ܒ6mch:" ]9IaXez+ _{;jA|s Tւ{n%׽+`hyUfSdChI҇kEs(:֋.CHKtKXD]|!ga[ץׄxW9)ҏ˓Q~2|5qGE.س\՗8|#69K\'ZJ~WD&Vޭ_*G_ ϯPb.6ڧ~CB.~/GTRm)Oq_|_-(9B2MH׷$J^b^ܵH<b>Wq?*}3S[7-S4mM-I.V1UejZe Ih[&l;=.K\ ę)Ҳ㒮.hA\/.9D()jh:a";tң gQ1QHSli6N}fhb؃fYG[Px'YbثMFZ,=iJL=F߬Hg.4yŨgU&ݶЌ:[gor3&ۤ&2v>Kg#hz"3^IwMB dVhBǰ_eVctfJ]#^ B0NjT-Jg;: ^uv38t6twu4;cG t*"<0|,9Jp7Ȩ8S.]Qׂntfٙ~՝ WN\ؗs8\9hcFQgd)KrcHSr>γQ.S!!j;Fdx (lԝ! W6uL|jSO"/9x[2{OY#|79rm俅HML}g(}5c wüJ \PG%lp6p~G˔"à>/mw^N3KKL^Κ}:2R~;7g!ˆp7a;G%O95kNH !nJIi?,OvpyP!u󬔓oʗ-5&/w ҆<)6{qDki$L`ĵр*gwY̖K#}(UʯxRJ2rJeB 3(׾ y\{ S[uF]ѩnW1N03|SmcV:b.+0G91sv;qGY"uO;㶻 pݫrI^rOu*EwO$H֦]H"n*tI}{=V5**uškIbHn^3%ɻYۚDYԣ*tI Yq@yH9csSLᖹ ]s' Rw>uܒr6@R4:5N; 4(pLwV8N[(pp.bT% $in3љ@)Ds8#Tg\~RӋISD?p\p?~ isVöA?pʱ%t3%mC d18vy91$7cHlA95s}SesLbH"5Mbe̵~L'Oݙj.8HM֐ag ΢$9QI֢LUN'QUڼНOy7=t5I4?3 'xH֙C&-tIrOwδ$Iˮ+X3AR @8z)6S ! $L^ך%r!!z^jRCn=SZ)E* %|ӥ֊/=Μ/$36Ѳ-O 8cRCk%2ڟph$-f+\6EfX|SmUv`^ʵvĺS%ɐ̖4yIj"gI-Yb7,}G.Yir~|^? r.f9+ڛln7- Pwq'M{+xz?>cU*SUvCuz.]>oNT`71'v-}\m`gQbOUpmfNloۋHiYFvnAA[,; ԆQjt9dC ( XS٣ Al7!$A[5m1nP\>[o:~-.!͘mu B9*NǎUή9tS$D:~6`ME^jTkDVnmWn@"sVcMemv0Uk*{[u-ԭffb t_325l>(G7b4ND&O/LÜf(]fǂuel5M(gce<)k=YT\E5Ցo}YsMuY]K8sUnkx3cޏ+lu8fnR\SS;N75ծ~Y'~(ڗ٬:t2o;Dq5Ͳ:ʝu868wR (n޿E'EQ/8Rc94{y=a>ķv( :|s3zjlzsK] Yf3i>|9$bjCՀ/oF>AO9"]D?d8!_dOyPRѳk`6'کr΋:azw-z="*`[1w:Rڷ:0S>+,ٷIl0<&1M$IbougײCR&4?0"kpkpKn!^EETDEDPYEEP. ! Yd2ܵ;RS]ǫzU]%$4GκpQP'` 0!9a*/\=) {S;ʺNeuSQ9= WkRe^Cd ֛-ZoC5 T[_Du[t~ލtSHB:Zp}>E#Dca'܎AwOV:VහZS ]f&'82*R۱k3YJzIyΔFYCnGEhNhݡi8xnb"?ǰqv@w"BkL%岮cU8-s5[E+Z:W87k=oI>g/N!-Ets*7*iQ{vo!CK'FKGr E%RMrNI9ԝ~/O<ύ&0بR8kjjԐ5Қ`2q?K\5o=dM'sEyt$#hhδwؑjPԖmhD6setT:ћ\ yՙ;e;Wk RȣAks?Χ{uC)z^Woz' ~_ro>Z5s9\(:[cxL7b5i̩s#WzR)_9 9!9朷S#H,S7Z.ӮGYclq}>W_/FQըfT7j{0N'__Yլn4ku̺fYϬo607Gyy9ٜe674sy6 ;=W{{(@RtLl 9P>P!P1P)۟__ǭsD<}-S`,%cdyp[#VR7gz2\e(v)kY7~ݬ "7Ն]o̐*oUt+`YV5jfZYmV'b+ͺ̺ܺ޺AC"ļ/N/OY"jnCEYZIg3YrʾOO?c/d "+TID^}ccdOsHyT|\H ibZfCu}+Kr WW*ljkkE|?&lKڟ!3=Q#tU:.=b0o&B+eV6V`cpښx@N__pIp 2ϿWy|IҾ2uy_溲O|~峙Vf#0C3{ƻ<;8]vڜz˹v)4HN"`͑[ , m~rlNKedHY'E1ŧCG3ٲ Y4F %P%P5P-P3p^Ii@@.%KWz \ϵ^iF/7nQj^3zWĈ2 YGk֒u dkv)lp =HvmlՀ䞂rv+RV3 TwY -\Cw<~I4:Iμ%K2r^Ndyr%S ,9v֩D\9Tѝ07)UsC`7;3]yBm3+Y͘*NsJeRQ_enzk3'ׂR8ӻ,rv\ ʰ>v[{ܵꀯܐG~a)_C$T^j;]Z`4J1y%F>bb&!f|y D1wܻ7hkDZP 녁A?rovT)ǣKkq6J._c#>C(*#ƣƬXUHqtbW^nhg#5_Di&G)ָo`#.H{}bk7sp\;Q|$Y^tP`aN~nʇ7uZY \w-VkbKV(w5job:gόqHk [V/~Kpo /[1>ю""5?. /%DZbڴqiR`g/Wvj#KwQy~vӒvX Y.MteX~Ҳênՠ^V-[:u[-&Նd.Arpbu0Ra]aQ[4U͔aAa^qv߲^vo:}oC{=m[;X[ΡH?*^raԝ3YWN0]5$Q1DT'iE-z;[+-ː41,_ap 5Q>a,ԯW{]|R'ZuVSp|s79m//L}|3JByMcV0̟JLLu"xkΠ"UKzђ*^IڸxX T욋kIsDe OeSxol-U:/9E|FÍ7:&@_ 7ky0)atP|#W!a tK9:e2fow-@ɭPmwI~|CdY_aQºwL]?a@:fҨ;MD7c4r/->*j@ci_h ۘAK  k̦mf)A!:1s,k9xWϧv,U陶譇+9>X^|WE_\|͒ bGh LHx/Xr@˃#gWNxC[1mhdv%c{Lݨ Ե$r7R~x_{:ۤT~{װ5ףCe}O~Ou(|N|%)stޔpgFH?orW49lʹs%NiĜ黐dU!=sJ'.S`ouݤrO5۟罂OJpD`w5 ;E5YR_U*5~[8UgFϧqӗ}@cS1͡Gqc_v8\U=}_4F?CgGcqV۫ݴ#CBy[`\^?ῈO4':q$nDhq,nE*n-E#qk*:7q/5Up?Ʒq[ЂFŗ wV绸X͍|%Ɋۖ5c~1n{-?Oqxurpsb9XqNʛdp,RiUȦ ~ ;3{G鐽m;"CyE d<8_^y~ƹ'_ SytfyGN)D\Fz'Qv]rV_*)j:H EcL4ENEHEWq&E.=5A$b!F fj=N5*5?^4Ρ&Zy8:ĹեRc*\2m,3ь4ͩ sњ2'mn;юT!/Qy U`Ө"sy)UbN/缘[2}*3Ig{OH'p5Sdk5dryr rs2'C;Bu4%ekk̒hq D$~\?dHeHm>G}s;GpKxؽ|t|Qf׾p ~0  N 89\罋Cp S8 q0%Qk;])1N223 mN µrP!qh<ɕ]pd8VA~\#%1IǸϹ%0 8}J{[a-P gB ~0g`i?\ H /V|\$Z[ Eiqo 9έ_]+L dTj*6kCpծ:ܬMLk)p1es Phg1xYC]{BR1|< c}0AzTS<!O_ 9WƺĦz<1f %wHkibd 6ЅM!rb;Q9|r_OyGB9QŎ=YRoDF>sǁ ]"l"Qb/8DFέpoF"aUg7r_?L)$6Nбq/o&sX<+%T<$hguTbxZg1!rQqdmb ahJf0{GNѓ; \dמ|:OF_6OK 'F.E.c5 >-t&Ɂ3m'b} *wW8sKD&z&Ԅ,s) J8ӹ/p$ZE٤`tm1.潳whGQ+J$ᠢd3a硨@K/'GsrUTboD< B~=-y=UX"xp0. J3Jy./7&N#+n.0ܚw;8U{0tY>T2^"1UOxJ/TA<*fS%x X@X$bA.)u~ZǨV|Kw"MR<'BJ>%RjԤ~)SjSz)Fλ?}7)qbL07S)I'R~4s 4*+Q.S9xʋG (Wb%%fQext1cpys'O_s) Z\ڧ| \*\E\gq-,Zx^PP|9~$>KnKwe"Cd ]!v݌=b])M| 8J=1FI:Pr5;F{Fd1bz111뀘>@LFW Z#FGz<@OSJLS1CePx@#mvKL4&̀@3¶3&ZT`>0H&Z T5ھ\|(<,3 _1 _3 %:ŏGFaȦN))t1/kaM,v⽒۝zoDroR٤;;@Rü#ww %{o[R%m;{x%w>x4twU.ޥwc%5ⒿKucwg\%NJ\e:Z뱴RPQgs2euV`&VQ|䬣ULMh5TLkuҴZ[ Ԇkc $m6M)3\mD[VkcP'vm[~cq-K;xߩPtLnDԌg::)G֌S\YYyͭ|uyӳѳŭPǥ{vz5&o<2AJp/W 0(V2S߁7Ag;Qk^Km9DR)p? iAg?R{S9d/}?: G pEl. eꎻH?k3j@a rpOB3ܿN@?'hW| 6w,aЫs܇~ςz:WGpP] PR h z?܁C-Np;l/ h}*ZGR(/'begEKWJ `+RFPj(JCF騤)]TҕJ?e Sk,*(ܤLmPG2ԕ|NB %L{StsYt>ks (>ΕX 2f";:'hsezD[ -i fNw˯ d,zEO9PSr͕6_J6myeNޓrNw8=URWC2W2Y`zN[RLw8,29}@EPk4_+5FAa'*NPbƀ.}tyH nutp:hktcue벏wpnۼ{..VYJoTcԠTjW*5c)>fڀVx{_h:5o]o{g_lH/i'++ݕ^e2ZELVPQfrQ?,S^VV ۔ er@9||RUZQ5B ;8j3M8e<'_8|4ɋUMw(Lo7mO^?Ļ7x;b!Y,LDh&$# 4 )apLMh&' 42 Ḯg|/@.ufXD;>/B=5εhFNc; ;E/s REq1NSV%#^v :3I} .8py,.5vcdnE`FMy>h#ά 9sxAQ:tV>SakU aFuFEH#/93*VB=.v/ZгE>!uzV=/XϹlǝl̾`NBsf̠TЦ'@3sڕQ/db֙sѳ>@1 ű=၏TiA1Гxsq@ @ـT3'a33:B@RQ6Ƽ괄3׼3%&`^ؙsaU3eD V;vgE<, 'X'Q;ۮ ?t|0b<8Мg_]:;"S@Hku-mmlӺ~?(t0Q/P:y&p@Gi@]>bptahpaY 3j^.vtf~5~t#XyZyúoǾ?DЎ'JȘu_xdD< ȵ^9gC/~+9UՑ.I.ۗuzNI)Du4ȸ\-g T l\,vc|^/Ckmt& 쨙w*G>TIN$ sm(a乣Α8mVDE>FU;H3zQћz[tLŽs>Ws#9mJ{QL]meRd(z3WO""ZZ ྯRK/pߞ80 @bǾ0ޚI~oB}>;3YTZHkU{Pc >dA$(`e}%s[=q3tn5 QYb1e_8k4c}~3)j#ot5N{JN]say(CJeU_#_cw>C[fU=~~2P3NZ'I~~0V6%Y9VbIvKec'ޓS} טy܋PQ2WfI$L '4"fRB%M$2DR4(s%}kuνrP9 `ocp`~O~O d R: Y 'PF@@ =,/a Y()4E"Kc1*G# f3D)\$p8K8 dhdtG-"m hTT0_^b+z E%yu^@:F? =Xd^_*< %u*Y8~e_gLhK(180#X1aze0F;e8EGtf2^ ~tx M,8l0: q{F1m4TBFX5spQt)hLl]; |f|}|C ɫP"r1Hn&#S8-p]/AT= n||; >8C{I./&)-K8pϿ UPP9 PIਆpbOYU a0Bs'iaqCcvSoDwh4>$4{apBF444>4;XS7j<ۈ[ˁ@ _shi+6췈0l;L~2M5 g?; 4_RNAe4LZP d(8C>=1_0Q~N&(<+3_MGO&K$&'\7 _OVMtO~'g'_#S R9T݆FP6C0X7 r 0 aa$aypfX υ d*= v}@L|?@:;CjL8lJz5(+k;ts8Xy|KF˱mx-. k %:(1@7,pدXK+k l(B`OQGg0ϩ.@U, ]LFDǃ,}c ʄC'@> 9AYɨZ`/ހO4}Z愙Vǘ|=)T*yFAIIBR +Ǯ˱6676718v=DG TyGK FQc/TBw0lLhtV"}b>vB!mx79QT3J-faGn} z{pcsBÍh6}w𧿁G_[(ߞ_|?dw aI-f#DDT H+}Gϋ<-}tc2$"E QRI=sC *4 x[ Yfg{TUu ZiT\T}Qj`Pjא`eDW[D * b6& Ä|SAXXd7p! !}ņģRٛmR3E,`{&Jf JGI>7N%#6=)'d{oP.}:]bS_1W?IEeT݌[lNOPW7WYbԳ|imU r:b.:h~ii:Z%jB+j!+4]յW+մfЕݴ4h.t_T[%TMMɳ~GWv~]N1-1b :2ha*e \h|҂߸E‰N ã}  =Z\nY%eq*AK^fcSmL_yuhN)ZeDCrb㏊p uN RvmɾfrോƎoշdl׬0Ε=dv[Rgza}nb0|k(:}RMx]y%é7WG2ޖ~ȯ_ꀜXUQ׷9vޘ5たȦf_N?Z{q"i}YM5j͡>Ox%5(sl ]!`vnŃ{=N~+ゎ84X^{.[ڍ'/jw0Zޡٕ4n4[)4HR58G+0n)SIuL V92`MvwuEoS|`sӢ 9JΙiOiYie5;Dwp2t{+m&z# @/\w<:cĞ,GLiQ +CEޔ7.:+ ;$U&j6PtVUCw~Z$yZ_j˥֧WvYIYb.n݅'C)]mw L|*})"vԝ󞛐* 5}}o<<y<;범MuG;5rk|8ִȝXdنWIJB >O+H[?PKg+>ca7"q$Kbr32bzE,6AQO)Jeی\p=Z=M6;+•?~iĊrqO8H3q|L瓞.Q-C ExYlB $:(~seC[H6;r=œqR0k~桓 ߰UKQ0Eԋqt#1`; F3gb}?xM\o0q癓anGX*!8o~^Vn-w=ۺ(~p{(oKM,ekv*Ѥcm}G]~Ǣ ߹cd໡]*\Y[)v|ŊŊsӷieIJQ z3Dn*'l{.-h(..*^1oMMK(}#<]ȟve6޴ºw(+zQPg Zq]GOR>=x$DUR|r0/.(3ʘ7!_ǷLjD~bgJu M^~k_̀Kr!,S^Ja\=r?|+GJ]O$ d6yծgmuz*'R/L]-09ZR~?qLifoLD}/M 몼IMS⸴lZVGsT ^'g# HA\p'b[T1ARG6ğfXcan;pWxUN6c_;g/1otNcY7Tp>J|K^}6^W[+sZV۴4I"QSRT/"vzvЭeTgS`PP_}ܫ_̥Yo.6kw?ʣ|oOr_qT9WI&9$EwȠfzzwl|iu:u$Xe.iK|JJ^^'tn}QJovHhThm$U*ƛίjKI8SݔגIמ?SR9G=]|ZM9Ƿ8ݓXk]yvi:X @-'p Ge-Z\;Sʴr`a加MF /~191#wqG5== *zyEi՘.- W!]i\M- *^;@iݺj1yS7Wl2>~sxNP;$Z !տOL-I?ѼE5]uāiGf bMط`ׂ:8#jt:fM0sֈ%b>13C t4$:1$<v8XP{n[k0%(50X+;>Q@ !wrVBP Tr"@- p JE\d2G̳/PzmʽO=SZ\wK]WtYEIw"Ƒ9YGJjJsrIZrQgZm}˪δCugER[;ݮGJN ٘,hzfޢG{z>z̜>gCzj7e ͪ/s=Wq?w.t3n>z :ێϘjʯ<~#x+C{-*9 o(N?$? 0b.0<]^1lQV`eu9sgW8Yq?'[֡NzOY鲄e_-_r՟WJq˿|ڝ.kijTetiI!&j +{1 ոZ{@FdGb(-\ڵ:\ʂ)r?mz=+w!,Դu}vQ%§%"{HsX>0{6IHg7XR 5> stream x|{|ZIFUDȌI\C& 2h"DQ!KIjE/h9h=m&JishKTUoz#y3uq>ge}ZkHQ0@6O$(|G~ц%DiC~Y9/ON$:7J׬Ƀ3;nCQS -N)u͝=_^0QX" }6ۏa"C (`|I̝nkD_5h=\߭vwGV>:9Ǟ9H`)Sfǽq:?5{NA PE7O͛m0fch9?0gK7`Z̚(AY`F^{D>I⠄c_]15pm-ӓ׽[njcU_^H^~ pDG֖x.Mm$Գ@|qU ^NF26vAT˦ "hZ!`8K*f+cpd 5 LD;hcxL)516R9C?wp}F9vΣdtCʣ'1}D4hez*h oSLԞi;8*i=#)rM = #Zyv^̦ M(+FQzP/QK*Brtt6vI1n0{iOSVbݜq0ש)&'>hx/=2%oVvrN Z?~`湐7MG*$CgW Ar&|Ev c8^.!9AM/dzy5N)k=%/ϋsuxŊѳCn!L,Y)J, GC^pc4_?A# <,^"\]xJem֗y+; Va&Txy7 e'$ ݐ2H#%dd9ïh^#b<=2us^,= }k?FJaCloz )LDv'Q{eyR!mqc<搋Ɇ\-4 ԏGR.)A8s?y, ,EJǛ =Q DUAѠ{P#3r͢UpP[dv!rn>j4`<ŃP@`I^{~JE/"jMգh-k; VlZLȫa(_dD! ^u܄6buk5ZPOѿYz6aڀU^ҽ3{PI~ C^)Xspakه嬂a>.$ _{5O,p~?~]=yw)]$+Hrɦ65rǝrso#[hIrMWi9h|AJ$G4[=O.gh-< X4jC/(n_^!KSM)^]|[1Pj_y?(VHurݽ<3<ß;G]Uqh8 ៃG( A{ir9/C)4@=ʊ&zV ފ[XMGhAxMߔz[QZ+OxD?{wjV+u{S9 ,u-y sl\`]!h]Ev;=*e7jHE=Fq8\<(L {`,X.w=1R芫, dY|̮"P?7\1tAӋ-8õS]!jϧ@ @9h"XRFȻq 䚸CˬBE GAGqΒ>f'σXy&L%Ji 4lxFQT݈Urj^i24(nȈpjj'p޲S<'aGa#Uc"؏`vpWنg yvKbZ@cDjT_.\Mlx~WcZdo%΃r7ux//sK/<ѻIV@.66xiM'kX!^,WPgrKAvJ+˕s,Ⱥ'~fہvWN4a+T3Pb_\Xd8NrX]-iMe"R _K FhH \\Mh[6]_%|~gybdP@"i}r_"C Ia>^0//ik%w!ܭ ]8O.-^@ noa.?IoߋDo^?2BDzf 9Za7v+j=Q ݡ9#ˈERG}-ǻԣ:q[|ROORoW!f-~@Mu0؍DHBP-戹p1oRRY.f:$Na e&=8XIW~ P*!LsA%"x:i OAW=O_o8>@e@|&a9xdPGji/?"+崓vt^J^mVnzFbF؅u ([( N!M|"ܔw8onlOe}@5;4h^6pJ{ۡWAՈ"Ot9ur91w\hs\ ;~8bN$A6)V0HzPDArBsX0ހZVeIZω'L:gTq u{VwǕ߷=zs.)DO}u`s@/ngnXQگqJˠKy?kk}{eh] 8w Bȳ@9mtqtН`!J{pc֯tEq,vDQоXS/aWeГgc#n_u/W{ 2NMv/v.a˱m=s+:|9bĎUvY{!zhIlo\Vx v]⛹Ԁ:?9sDg>/v DZ]Ԗ3V\{⪟zNe򤞓fXtji4K;J\{oWC7p ho'-5CꇕXF$%ȯGP'%{EGp&X6 82D4UO_PwZAKeZ8af[x w)I2~^npWhp'VcJUwӓ𠫁S i]D>ߠ5x?&Eob<=|ߡ syQt^}H/+=/}|_q|:oG[;9Gg"V.a3ԗ%'s~ ˿NxG[]?$Kў9"ÞЧW|ݻ֥sƴk&*2EXfMC7 mЧhSl_4DY lddr:Nsf5'ԫiwմlqy$j2qHav^Rru{ )f'gSf痤d%>I֤nDӔ2A&_LܚlfM3pj)i2S,G\r9NuǨ*qz%90Imh,"rbԲrl:\GtP0$%tY>^7<0F%&lKJ|n(TRjWU]X֒J-J*)Hhki_/VA}ˬdXά 2/,,:Z, r̕,(¤U¹RPϹL*cʭ@Qj ;6 m@ɕWmBI,ET^#)#>(#S%N:[X9:Wݔ8-m()1?wd !~'~Te};w砃%pʲGau !$Ы]HUݯub6Uiy. **ohȝQ0,s nr2grv!grv!'A vj;7krbsm;`ЖbSt2.whK{E'63exvT7mf'gvD$6bVk1Z2AQkUW7kC9IHO#Lw:JY9bob6]oSA.S8NPEHOS}OpKP#KԆk8SGhôA*MRpІYC*WEzAHiw xNF:2+OXq(O'cɘS2$s7Ϩq"Qj J%jhaGvIPJzno]w # +zaylXyk6YJvp8 lD?hybX-Z/(`fw!Z-# Jg bG1?1dq"z6\%"A$hCPnf.\ipWڨygZ[-kr[L-^P6||,ha A6w5(QcjPh97sv[91b|5ƷKo@v(UYa+<ܗ1d1}-.RaB4ƕFtLuD֖ Ff{Aqv㼣x[#MAd2y &a"Sp~#O^22H40)@6 DZHM˩Ϊ\J1;JV /;R)5o{Lj>#& mLf<9ˬa2$ŏSC,3#8(dvBhBPs ;Wg:_w8;=ܑ xRR+Ew82+}E2ߧ8q\Izd\^K]֋^KU z[R,OުNLDUgcS,YTٛu"NiW >Y4O)y,2X1WRtrreW'y$klм˝d krK,gK.dbNvln =]t-;k'wr-r-rj,PKu :Wv 8oH@Aͽ, v F8eQ\b\,"?y&v.e /hK)SX?yg*U?3gB?sIxF+G? 噥G^[+,t$H7Skfg.TXC.FwdYnő*nHN݋1 CRN7& Y^S#8 7 Г 3x+t\M*u%?ęd:A#ktb'5wkxmd_ c؎;jxš ZIM(zly6ʠwqX=W9,IV:LjחkG?jNTAY4 ia-!;]Be!j(3?Gs1ǍT}>PѧQ 4*Fi8GrֶhU^sVo3h6͡Lt5#2m Qo?.A 6g;?țlV};@WyF>SI K?^̏͗cA`#bpAWįZN.8edmҖ}ViahbdH76jƕ5w_yxqvX3Ѧ4+q.yF +M$^vC˧R/ESwC<%Q(͔m&FE{M8m1C}%R"}HӱBq6{s2kƩWp({hi"%%+ҁ;{jb8)8;)b7?u{iVD y:ѓOP+Q ZAGrbmZ d|E.1y!t*-jbuo?+pƸHkj?R3WsA:ݖ–'w0.R >6mzSnz_ռ6nyސAaaa^MW5izsط@Cc{&aH+ޮW4 /9T*&]/5R/^q]"$><6Q:ø1FU@RC֖oBI^}WEPМoaQ7+F; o42UMx˼WmpmHO8۪m;uh Z&Yf7U2`OgFv 7&o 3ƾԼaր>'|+QG PC(4&5MW3s$?l(1 6؎l`Cْ@XF6,KlJy4a 4f,%/M(KSPJS^J ~IJ)˦ޙ#^d}}f=g̜9s3?k.9s.^iR, ʧO-gS* Hf-A 'WyCRTs^II麱jJz>2~(dC}yڄMILH:D"3yڢVڻiM Dȫ/Ka8B p:S?\L}0&QAVƏWd"'o8 rs *Y0agUA*yEð* i5t _1݁ s ]~:O\X0j!8>H Nv NIM!)SRl9;(=呼IyywNF沩ʦMϙbX8U4%1ǜ5Ne)\qL;9Y%E&6pœ:;#%;'Džӧ!W$PkNu )4??;;bd) L1-bzXPXQr̘*}\n Å+|P*.T^XmR /mW=.'l1gHW.ZJ7bG)-zё6sj.Qu<`7۠L>)vZh ɒ -AJz[(?M+GSːA;_7.9z=g{weavw}[ν ͗ d=ھ!ZM+lm_퐿nΣo}=?77/?/;k!9puuyY5ZZ&11o9> m'&1MMsR'qfC4.y'+S7?'r?#jSNϜʯ.ʜf\e&cXz9AKشi1ݞafK|tW`,z6M=t|e|)9=|'_ÃW>]r)tھ(LoHw.r;L uvtcV&ҍђp&4XKci,4XKci,4XKci,4XOY~w1VNT?X%(NP2ق߾PMvp\ԑqeK7X#*OBRǭɲT&lMq{8N縨#!E(CЌX#r$ǭ+m}Y1~f/52eJf)(=p#óUCWu⢦CWuU\ա:Tqk#pF~3 = O8p8dz2<Ym /f}7j7jhX ) :P/ \¨^h=g{+OЃF Ԡ$y N~V r]@ u@ieh?}=^|A x7PĤ/ES+f 7ʣuCt 8C#tKyz.T .(Tӄ~*0zYl4AZ~9[LdngV#V_&~&@`||B\.gҢIGmүd-; 1NfR"d t9 uZ1Nfm蹨þ[T=ΪT_ :*Q*mt6|hM>F8g&=!AVA,|n"BltbZ[͌~n#cL'XK9 M`1EUШCh qkxi,*Y>g$Vx4Gy(91k^4uV`XGu[0tb3YV Zlϻ9#{hd1cծ@! \H?`.bSys_w [mro=XI*řc ~,Yhѣ;!EuؚjMqG^_sf>z gb֫YaU,Rͥ6s8PL_mkU«Ԯ4zkbۜj@g}\3~}'Flo.cEw<]:}+Թ}bF#0+cU/RW^~]Q=+mE VK/4M(ꅒNѿ4J!hlaP#[8-_b\RX@E֣Ŭzjz@mXsmi Ǣ_ RM|MT%^&cTF^Z?*?-195LG3IN(u6acVmachru,Ls Z꧓95C頑I\m 9?}S4YTkֲtt,:SshدW)ж&oV.WM{Xy:4rle6WƑ=Y640UZGF?:ZYV|\L z =8oRVz 7, H8 JPH(@ 6/Q@W$Niu6;5J(<حtGh/P0íx}^^ >qPBZ>=R }!uЩ2^\5}@DhP݁le P~T tGt` AҢS#>`/R ZG5!_$Z6K˦ha;RN DhKf*P}aGcWCH2?{}%ʒeo0HE`X|݊ϯGP U}J *883EE1H=)dꌉ tjMD;)zݽA?z(8IMuYҪ[D`7} Q;A{*hrԍVigD0 0j=e]p5F`jߔWDs":B*P` _e PDn%0)0_@kiTQU.UfB 1R7Xa? ɲ"=5f& h>@2LdqKE>UW@>@#A0 L8蟥oJ{kC=5z]iv6)5/t+4u4.PcڠԴ,Q4Թmvի4-lknZSEuM-Zh Jx"0hUhUS};e;5MMKJCSG LkoGE5^m-M- ^~a}KG 42J{cMs3fHemm[mء46$mWAmiZVj̫gZUXH_ B1 Y7kzOS{[6S4x[=U'heL]KʅZTEqYkW;m\b]Ki4zl W﹅'e====]ͻnu؝;{{{7gL['ؙ3;tLv]]qXϙPя՘Ջa Chy4  ᯀQk7 WpOEW"ۦMs΢Ux C^,11bKŻ/&N|XGFl|fV6qr1*/t׀oSR!R4 [AX 7_ !wH^ y(!9*y}Z@Y/o+fu#l2 !_?fo~ q j8 ?m/?m8 _{f5Ꮐ_7| l L!lfz f+ds̙fЃ\ d]"b.7>\z<͠sVmmpZ\[r-H(7["biڲK߲Mi@{7Q(D}~Ć/6/QPy{Kyzx|2#d@%"JB7hQAoBZD2Cy?{naϝ } 1<Ş2{ޠO\j媕x>{zs){v 76 2qy ?"1nN4dCȎơ hu'Os8g9ggg A0ڎv9t:G*Elv'b7.Ǖ7|/`xoǻ^>_Gq| #|_'";&JRG=f sxE܎2eqXa܎3CnGLnp'GLAϑa1o^<;x?s~o簈Cn㹿~1xwsqUl<㯓r!@',_Ä5x e%;ڕ Vٿا_u>^ǘaͲ9c[Ńn9\c9<.𸐳CϋGW)z=Myhr˭7s-—aty'I?ߑߕߝߓ*!7!^_Ro_K2?SN0N'==lkNIEmEt(E 4Pt#T$A70Y^Id8t܉ vK0fU&{ї>v};wӵOSI]t "^^JOׄaThch-jEk[ ,nDS0x2&L#=l9~+\A4]r d3P(ꨋKѫ߫JU+?TʒkKF O+; tG`h;tg~~tmHA^J'Xڈԕ| X렮ڛѨA,o R_ߖҖ''jxP+lf"XQ %BjCCXO6 ta\v {uH֕@'CzI{bDW/ dH$5kbAG]Dr'؅RIuHЕI 9/:*$r\'g$Du%W'=@G}OCXWh7q/эo2~d֕|)?"JBA*ڿSG->Yэg?>)^J)|G8q A7 ]qd^E'އJ?. t%/ltv+/WoJ&+)oFlaST$^?1O'amz6K/=d6od2~iahw`=B@9'`?49J0fVΑ@զզըƜk.=4}lmG#Ox\LjBO򽞓OC]L'68PksuLf07xxΐg1DQʻSzlѼ@Z9~ZGߏuڮeL{i~R_1h75v~S3Oѭ1tLcD4T ;74tD^ԏz[HKn-:8tһ{u:6((hΟii\F&-?ݬKpdBS" .&z_+sfI=euLr &V=hAcFM} V=*'FPբiA:,JW\ӦK@ 9gUHBɫP дrKDi-JñI6S6I`&o%]fI$h틷ߑ\I |_B;Ҷ&$` r.KJDaHilx 脎BzU:UxP!+=S@ٛP=jQuV<@qOԴsI.KP꒼bu"D~(CR4+R3"{GkD|E<,ٓ}:D4-.O&ydzYQ3 AXcq`: \/i;؁ ǁEI,P/>)سt fv&(V^MKBg8~)OJ8!X7Kjؙ.|$j!v}(C.~\tzƻ%›~ +$gj8G)V%$B`%OS\6j$`d+ڄ+$UH[JMNY zyW؎|ή\dM8JIm7l-9?G}4y^lƏ: H<*IARgOдNb'X8 FȽqip])$ \;M ->F5+wo$~V\z2|؀5 a'D1? [7TKʍa7Lߗ/6lC{58^b;n\$@CR^z{6 kw׭o39R{&pލ%XAowx8f#Q~'&s[BFBoT4-_ Eg-lA4:C-l,!UQ)*=aRGiQ-O߿ŝ)/#c3K`$k{VFSn dU;:ZiivvjnWbGI?w}P#owF6.oF^N-1Nޯ磟9qRP;3b/!23>V}RXHZR htm'\ZAX6jg}^;<ƞg`t&]Y;Zj~拺r,oA?ڑRް$PDJňgFɯsPj_0Z% ;2D?1~JD4/ /a['T=]\z(QupRޮ:SuRժO<#{,qy&z=JO,Q)*Oyгgg?y>A!a1qQd~ٓQێx~~iƥѿ3M/گ*Hz3^ayĈT-ߕbkoGeʃ*Wx$wss9u\ww#rMzY[լDM~zPϩT}jnj~ja1,ՔjYjMKmLmIvv^INNΤΥ.LGNۈx?L6FN-#:Z&AZ6]_[T Y Ѭz&w)W.UZ,J-ᗤRߣoc-//c}W:S?2T)b*y<#hfw)RJVP_s/AʕKTy*Oզff?&h{IJIO+jdjO o,ްl+)]tYVi3kjk.]Rvem ˵v}ڶmj;k#'uځڋiSJ'Zkp hI%ś]DWbbM|F;~ z>oF]@f^㵍/zDw@ҍxH#BM-]ۋZ>k;MXP??txK{ pOFO$\DaL9Bϔm21NƯB $gq%j~7qW< E{ݜÄ+s[n[l[[>ZiKd^w5δ@5yg[h_d;D}&VD/{%z=*nE\сJ\ىFuShˌ bX&½X8V+vĪm߲ٛe%TXEf\G" F`4:`#hvX"ap~ pz2p 2܁{O`Ңpfh\P`%N;Ol*Z,KJi!Tt A l]NhP>ac#vZOwƏv> ?REBHu$IL"E%呕`Md=)t#]n'g;\\\܊܅n=MdFs'r%܊#룕@&d XmFc"z'i+<0bG1HK<)Ho|f m:x=n?l6]-Nτ_Ak~h1xĞ[Eز`cy|t-Ĝ"D;)2omHoG%/:;㝑5`5wOF7Vcq'>"p'21/PȍU% q'=0D%ܚDt4<Ĕ'VИD⥉Cdf=7v'q84qcđ A:_7^8@dt,N,?~Y=;nU m^lvR_w杴 Mǜg%+z26rc|}՚ IoJ4r+YY5h+M[o%)0#ޙ Xr4'sQF'1gr!)-F>c>{J.&Wp_"@5݈'rcn\a·b#CRecss+&?{{&|G/׸sotvJ_ƕ yK(`UĪ,X4=XZ bLXZ bj-Zp%Ê-[p%Z VkAւm6 VbN*t =p{>pA^BrfA&  J 85 Mfsy5$4˝ȧ№>2DDhnO[~T|t?e\,$Eid~%:m_5K Q*p8\  \nZ;} `F>;6`ր[#i]vj)̀]cxح506 ح5`ր Wvkf. ج5`F? ح1n+]`% rw6?cȔK3G>9wZV5jڪ:u@ucPUuKלZZ\i*vSw^^^^^n nxS--ޥt w>n_xc`.]‡m /Cap롿#KaXWxgx6R1m4*<\{< -C p(*.Okckx{rwٵp8{pl1ZÍupˮW Tv4\vܹe(Sv iR9w!e*׻p%jwï^YV.3t8Ӗk۾hb[眫UfVuV yS<˴R`=֖)S0/r>}Ƌ/3({w%}Ƌw>Ž»] `n6[V`;8'Y

),&-6l~F~X^;+e)R|K91\ ,ρEFQqSR1RP|lO^,RzVҡ= =0h XߧlmOaf*樏(3Y& KOfa^>}LegɝS٧T^jrk*3Uemo[Ür$49^+ֲ_QsRiWhY[3&N_3?}Lx9t]cӧ c [@_-~x}?3"{ G$W-wG$Cx:G+UV?Ojf:sH4|FȨ0«FҘF]6_J+Xw{w)={ʮO('tw'ON@^YJk r[ADV42z}S ._ \ MGC4rnx@N6*Ƙn2cXa2Vk 9'rN16V#Cc8`2sspxḙ6Ng9^RNq5O\]qgYHGnq{Y1}&oV9F7'+Tԙ._RWi^|.pؾ}rF~&ߓ~s>[wg|wۗ]+{{]^^^^^ ׸׻7\7VxՈ7 㵍UG=eDbtw!~'Bw;H-mF}БVNK-w"k\ 1!KtTVJN|9%}^oW}و91}kjj,9k":,mm>vI.a+%ksþެF1 )_s9CY|g\nBNZtMw'w_gt|+d΀_///uW[\nMVϿ>ҿi$][*wg}r.VNڒӗ-!]΀o?MW6Ƿ 9EKJ{ מ <%ks  D]9]nӾIMf>x߄v ,N{a`x,+,R)Y`u _a8+x~Þ~K6J`N`<ٷ5؊R_/]x);7~@P<=|3G}N3kax+:'a .iw+-9[7me*pp.7 !korʈO_m 3mlcՒcn.Z-.pZgy ܵym}FsvCnj26ӾF@Q]2-TƏה3lՓ|,oMnjxȞo0[*s8>+giB}fw贷8\\mufEV:okUFgwsݻówgOȻǓt:~|ɳiy겢sӄ{aYRYk=mS ܅>@H/edR.)Hy<Nxʔ6e/4r޳hma˻u[^{#Y:efƕ+*o[o|0TZ eJ&kBŅ&P*6̏qyK͐od^R^󜤫?m{2۳ssrXQ}z㞭>ӟv='Ǹ\{sscĵ= G [9r&BAeOoOGud(y'%ϑ?!a?OkZ vCyA+JcAJy楿 D:4@ʳH9vf݌rqKnjF GYAߒ>G=kM BSKw})GHJc8ҿIѭs KIyڎmᏒl3SsIR,`c}mf|Bic]lvRtbRlmOS7=|ö#y@ɻ8{|lg+T5VQB&:75͹}){ƙY)v&#}ԜyfjLH"GVn沛iA8~ 4!SAw۱Կ+V[%AI~lklrܟʩՐO'e!#}ρNGJ]$ hK ?.g! _]=,1I/f*:PG1;-0ZwSOg~Mi[sA-R9 Q~]C0\$6|ANw/|?hmX̀E*ԥE H;\" &_G׾S,MRi6zB(glgfCd>C"ڥvZuV3_4YvIr=ѬW9n.SCPhַ[S*F/ W{R5-LƴmK7IYw{#7.Z5j`沅-bV$-a,[uwnlU֫f3m;hKckrdRmÒ4J2r04lIַWfvUlS%eꄢv*MѺmmj+f5iKlyҪSAZW tqtU=he1N+ySV5[}4d<[}TyB XGmPuO-Yzӱ1wDJD6H|m-C 8}Y!-Oz-9} iۅ"~;㷳mp Rb lOVt)]).KN!9a?ۼq*$IKsٳӘb ~KC䉑t2灟7{+Imo26ɐ`th9rޔm{όϴ!:"ִc&=eF -g)/ p 3je Ջ\tҍl dI 9{0i1 luL3eQ9n7"x'g,[7KROI,TٓC}gy>OzG+DS#ߕzWx<m9PkW}q'=e !RHy g>TRσTGl '_0Oc $t@JkwM,.rglsg^;ɇɋ]ja9Q =\B^"_~7Ɏ7XMN!zB.2=Z~tPh2{xrXI}ou|<{|ZΆNmss S~_εR!},<FN}m8${67/OJʳdϥΧݖ48;E5,T*z&26+)-C_1[$wn'].% t3/=rK_|.KoHنE='<&&/p` fsHM~/GIqvR(y0|fO\d~۾N;S“_5s-aĪe)0"w!%_'QI\9~A4t4%|%{Z1)twH 乚Ӹ'*)5{2ܿ}?`ERȆו,'h\kC\7,YBzS:Tqe:WΝLwDb2$L}H;{6HVPDa#<젳:˯5W 2;6M++YV]Yu~_PPR6{ڏH͵-w4S:(ޣf~\o)0yʕꢜ;x6 ]Emn;Aq@3TOjr?S/fs_|5\7w_sqqWu}H)S=)m܍Ը~3vqGT3{ts73%Wm)\Yj:ϠJuVْzy3mo7keظxD>l_s73v>MI=C˭h{&4+s܍1獏_ lla5YB7eovsW (h7Z2/g};Ϥf,qsX7e[I˔p;_;+֨fVkxHl!)sδUj;H{3xV E`_dbk qx@mC=Ľ#ՄҖ?` w!?F1(i9Kdܥ''~0wnUTbkS盟_zI|Jխ<>|9%FMe7m$UBX~_IyS婷)*SВm3&BGߩ ?l(*ޮ*WN03J-7ԧ>J FI!m ]v;I#=ŕkI_!=Fzԋ+_lΐ#@zڋ&&Bu4ݤ x>դO'E:ti~zRHWm"}fҭI_"#/&8lmk)؁}kGo=r>@u!} &8ͧڢLW1ހ!W\ͪCSGyuGL6K[-Vk^=zٶͶvk;cdey>Ñtv48;Z}#>9U]gHMXjǾ #_vGMTx%8L ggIj,wxmOlQ MG 'gLJ? *Yjtnn5S{tZn\&=RykV{Ì=EMWDРaW`Ya[ݰ.اNs"orĨj>K&n{rOX˽h7,ײZzK,wZWru^_5   ,7JzB HPLoC[Bǔvf>/w}w9h44fH#y}<4rggI=ź?g%'9%"a{>Yﴝ$g:-ֆ:Q+Zq32QJ{KGɭ]gYzR31w/d]حjSQ eH,KR!Y")xV,c+"$wk?l1_!P\8'aJ}2}[/{ 'Ȃ82"293T#/U&Yzq6AƕŕӕYԈ]\9\\y5W+++|>$V_x\Gcb7xJSˣ2|2_3J~QO ѡ)˜ȟBf6o(}Z|c^Ub*b6q%)9J?;:knoL1hxQk Vjݱnsa.􄜷}ArmhY {@+\,/ fX(-AlF86Md46S]l [VV:*2{vHhNshb}=-ڼ /Cx#yQ+2Ƽ9o3wyO#>Cp>c>'Yg/zƷ|h/,ȯ./VS4,-AˮrjVP+hZV\BRk5Zh,hf25:]d 1Fqxc1͘i1e*ca2'3yͼe1ͧ |gfZVk[nk5՚aͶYJklmk Fv3m8{=NgʧYv]>ar^Q$BXpN>l ,e (,e0Ll(JΆ [Fư1d Ԥf$Jæ`3(fSz6#?- Ȗ[ΖS&l-[KYF>g[Vgvvݔg);A(;J9IvYvrЗ*f7M bw]dR^=|{D Q< q*/0|U(xx'TOӨ6gR>ϡ|2WUԀ!7Q#+m|5;jw]L>jԂG%?OP+ 9C~+ 7 VMP;~ߧ1L$D+:7 udYsi.'fj&uhi|Q6hC KE?hAZR/-zkZ0 i'ͭQ?-BZ1 Jh%(V+Z}> ki\kNCZ[j|f|FÌFfnd5ѐFM4hiF[-љ݌n4iFo7M0h1H`l 7c1q8jL2&4c1 n6f c1fE4Xj,Dcfk4hlVkl77*V֚oͷR,[JeneVN+'mXyhU*@Z5њH۬x+[ӭJi5ךKBm-kZk5`m&kX[w]nHvS:l[ݚڽ^tk {=EX:m{=itΞiϤ ,X%l:KdsBm`[6cvav}ˋ/yi^k.oț-T>Jo[EA|/i~_m'ğ5h kPLked3-6F{a2ÌQXcoL7BcXcl0ی})yɼa7IҵrYeZ٬@+oB)V5Z`b-V[v=jؓ {W&F!( ju C]B]Qgh-|PO'RE=a0QXlQA}A:Q>Ȁ #PdB}A>Gu@6١@{N{.{n{==/==?=[[[@sCEaphn6j- ---j[j%6jԶԶ4Զ kmYm9myllE7hUbV&V&V&VVրքւֆցօփև65555555굀굄굂굆굁굅} kkJJ =+,ZZZZGhY/hYohYhOвв~вввXh@h h`h(Ph0hpH(hTj j,jjPr,+̊gl$Ǧ6l=~c;^;;̎<̮ \53W W6%y)^W5x^7Mx ކcDϧDZXW5|"9r=?ďSį[ȟo4_CKeBy)k5ZcFchgt47??Cc1H0f? _jck4Ϛ#|,jr[V5ٚfʹX2kήc7}0}gOFn2Œm׬ЭlЭЭNs@^9^^^APPp}ppppPPAPP!PPaPPPPQPP8((X(8(x((D($(d((\<n*nldq뢖ݳ[ _r+jj\"{hm6#S!}q9 ɱtk+b__c9y]hStQSt%O)R! bMe{., p7֎T^PN ,R[Vj'1@߈ bEc 1ڈ1 bTȥu[ub^_>W>2ՈDmHS\VxI^\؆Y0 iF˛.OKb"_Exʜ!p28\u[l؋f~rS{ cmr: A(&5աFԂڋڞz4V7{;5TMfF;xR}3+H a7 n] C;++R/ͤ[!B[tTj3oIA{.9 f"}ޤ{<&ULldpBz#xS&WRCSlnzOO|28c%&uIC$&ŵ5H&U> 2L~EkCBaDq6 Q)B"2jE]p9eVCը,"_>"ԭ!9/VU)J+b-徒vv c>s@i,cQ">柲FYtVܒc銜$gi2HO{1i Q:ȧI>p&P*H~UR|dEVCRyMKan"4"8NJa)Vwd;eoFo~Hg6qҢQC`;=;`Gv-1/}}}OQ(ȭzj=KؾBl[E7$QH'wBݘ|ZG[H\j8]BI"FEcVY^y}-Xdm}~?ǟbOYęD^_Q4=u QGo}tN9bE)ץ(^ɫR”bJ(?D)4QZ).J S┉4%Q,QG+bpLjsQձ zxW'wHU(WU'ɜR' U#t >!CmGc=&K~\(kq)pOB73Yផ{^ h3K½_e~E*\U&r_.]xߔߟool=W~GzU+J*~UV^5R/z((T63fjAZ@ⴅ'O~2>M|~gu?^^o'+"ߥʔ*4UTmRO5-՚TRU}}#|;w1fD;1̘cl1NM_3YҬgv5Gm93ɲV)k-vYWv:;.k7}tF"l%]w$$$Aƀ cAƂuq @9x d 2d"D2 dL 2AL 2d*TIIIpDDD 2d2A~g 2d2A @,p A:"E d1b / 8% Kd)R d2YdYAVY @Vr AV;5 kd-Zd:YdlA6l @6lr A6;- [d+Vd dAv {@q {A:>} d?~r?!Cr0a9r䈃9 rA9 Aw '@N8I ')Sr4i9r䌃9 rA΁9 A΃w @.8E %Kr2er䊃\ rA\ A\w 7@n8M 7-[r6ąօie tջp?^ @z$h"8I}IW #9r䠃tX,òte,;,Ke,aY:,KeaY:,KwXaYòtXòtX,òte,;,Ke,aY:,KeaY:,KwXaYòtXòtX,òte,;,Ke,aY:,KeaY:,KwXaYòtXòtX,òte,;,KrA~ U#;<%8H 9$$$Ar @rr Ar;HHHT RAT ATOIdtջp??AA @

0:FH( |(WH=S*"˷4J% 5octnc[1J_)!>yt-xԙ Y#?A!G!2cQ{}'^ߩG>#qƻYw뻐"7Kޭ.{}WK._ֈUb95\)GE[(zY>2o2cE?%N҇{8dy3=!r!rs8E{r_Cb1yM%R(5Z8Q',,ܮQQ\O#OPމ MV=!Z^_#FyL'\?5'GAOݼ)Z)Jy!L[8 9"UЏb w8e (b/tUr SVp9ХWJi r(IɫTtQ48?_~9Sj'&g:ʳOI('T%8tVΪPX&P(P՜[~5K Qo:pt_A)CZ'BqpyF`s=eO'3C5w]xM>}η ڐȚؗW6ʪun/p1Qj̸﷫B8cT"E;HҬ+/MEI+WW֧ݞ/9] {uF._xSk *qWH,t)Vpˮ uOZvXwdh.];2[ao6\D&BYHl⮧.9QW%wEwnuH zк뿈9Ɲ^on,(=2YJ8-ag%fULJI7=r֏UJt89m9g\ߤӝ2ė|+%<٦ѣӎքk SX5llQ9ãg(7h/ٵt|eZ"w):YkP|#Wfl8DZ,C/vF^[̲̈}U{f$knعwmRg.ԛ+9tV/5c߯T6}9]}}O9g|wݱ0v'Yue0TlgT3oъdϞjP]N"VcY;*$$-~abqr~ OhsQGWj*\quY6+eOGYKwˡA,to=Ⱦmwk^SֽɆy~^MU]]>H ~ty \::]-΅f>8Q+;m~.wwj9%m;-tǬϯwOrpۿ{v+Mٟmo <ێ=yͶ|q&ijx8;M}ϭR:n>Oj n%f*TyJհOL~do]Юy.9k~%_>EpOx7N}_4wllWP/YZѸ ڐ=Rn7Q k]HWwtjr#$4xT[ }Gyc^pҎh{fs9g`_f|=_P'?oٝ >׊'xѴ23F婹ڳ&_~yYZwVȦkyd{m5wJL=z9eA 2h݅]n7tWDs=b퓛?f^ΛwZ@o_}kUѮV;av^]mB~/GqT$"EHNB 7t@#H=("HtH6:H 8A|J9s第ģ֊"xa;/|j7[Bx]#Q[uu 桨'C+P. 뭴%_'[j̔"uYF~`vtCmٔ"AAv z`qTmJ" ڎFm2迒< Ǜ&&۳MzG%/"X htCfO73g\V8%(yz܌qUܢ+qCSSy_6mzU_0q} ^grœuFor2x~83Q=+qfmk"F79OrLϓ.y3c1=XzL171/fD'5!SXY{)ix oW~ R ѓ=zU VhO*hu",{ "4.9frBf/g n}LKC"#!ͩ, |9Cɪ׽\4x3D4&=cPj,sjcF3\^zZqveY׍Q,ڧ-BE] }lϹ3}Mzl\lNp_q-?]󳥕#];X~kxS=>U;y&V޸=D|)/at+:?GDsyYNb}:YJê~0:ݜbˬAM8)іlb+NZu\l:&_nT?%:][ViI74-M(,&?K9.H$BZz}PxWs(lF \ ^N\G[ h/R퀔; @PAʪ8e,D؟PAdpD#wlDd(v?ӫ=z`ý,K*+:T@QڏϟI=)_kp40mQ,Vm2嶠x-yaqA IǢj5$h O'0kR=&3dvA#_uZBc3-/%%G7G*<'Z3 g EQ^ѯ.F:W)<@]hC$%i2i=x`6}Zɴk&1+.{k^ш!g ]o W_<^ ۆuՄdD23G{>`܂Q NQ (:[sڅ9s0ޅ91> Qo^R•EBsUfOs Czc͝`8qC![{>7 X?@}Z+#cIJY9RӣpɭH9s5f*Xy"\1=1̚w }&ٯ k"RU'(G"+\QEsR0 7nѱf/xox#H22~6nL>vSV%`d_nkR^ =]_Ya+Bdd,3 &{sk T2Xv{ f6*8UK">UށAu6M:" BerxY (SӚ2mqmBn3F-.{5ip:}}?}e0wK/hG~bCy0+!}2D4ٮd2sdE A+ 5t#(?6ӄK>G]k3̘x??w( gyZ;Ufk9#ˣnWsMZȑhQsƇ=7[Cuiwfgkm 4ڃ7E0( nU|~sb&s.X,(6`w/ BZ(m{ʼn)/mwi:cV.aEY$hh+Bx$t^` #KEKȶy{Db3- q5cFBmfJ>SWbݐIq!zt GnZxbn)vW2/Ⓤ^kǭ9Bٷ:u]G^Ύq&h1&$0ַ8&F; qIsY1=ݬTsL j߼i.6:t.\#{-J써LчHTQFRnDn}klw!ѦW9KBͺɾT/H*CėEM[y_+Ŀ}ζ'. NCbn#P(%@II d'4>u[y|G1w+ʔpΨ'"0jЩ>D||9Mҷݍw˨Oy~^IJ3P%KàgZSqson&)U]c3qj*:\:d;a2kùdUmL#N:~?"Q5=ţobOgr[q8ԄLtVѬ Y endstream endobj 251 0 obj <<7A67783F1FA0534FAE9993D53F3ADDC9>] /Filter/FlateDecode/Length 774>> stream x-yLqgseC sØs92k[ITR3Q1Br="lX3f6X~yޗ[իҪzoV/؋$g5ҠvOpo`(Vo+&x 3^"f?uE,ljP 4牧0! `iX)s(Buп=%!"z s`$qb[q}! E" X%IQLU!R,53`m f!RUrXTѐl^+;N#"aW/=c Cx{¾ɐd~lc84 rp&)} Wc頼p\N#p ^g'7 *E_n p[ p BDxV>iKnj W`Hk!'APw%!S D H; r(}\/Ȯ˘M65Ac0ti:sAf`3?0gAak@"aRhoF L'/&)6'-3=Hݝ =cx67nufF,AqY3'0*NHa9Vt%pڝEU,L endstream endobj xref 0 252 0000000000 65535 f 0000000017 00000 n 0000000078 00000 n 0000000621 00000 n 0000000897 00000 n 0000001041 00000 n 0000001809 00000 n 0000001973 00000 n 0000002192 00000 n 0000002356 00000 n 0000002573 00000 n 0000010725 00000 n 0000019685 00000 n 0000019813 00000 n 0000019843 00000 n 0000019999 00000 n 0000020073 00000 n 0000020309 00000 n 0000020763 00000 n 0000023978 00000 n 0000024149 00000 n 0000024373 00000 n 0000024486 00000 n 0000024785 00000 n 0000025100 00000 n 0000025210 00000 n 0000025467 00000 n 0000025577 00000 n 0000025855 00000 n 0000026092 00000 n 0000026204 00000 n 0000026472 00000 n 0000026584 00000 n 0000026830 00000 n 0000026943 00000 n 0000027056 00000 n 0000027313 00000 n 0000027426 00000 n 0000027539 00000 n 0000027828 00000 n 0000028064 00000 n 0000028177 00000 n 0000028413 00000 n 0000028640 00000 n 0000028876 00000 n 0000028989 00000 n 0000029267 00000 n 0000029494 00000 n 0000029607 00000 n 0000029720 00000 n 0000029956 00000 n 0000030069 00000 n 0000030305 00000 n 0000030551 00000 n 0000030664 00000 n 0000030910 00000 n 0000031195 00000 n 0000031431 00000 n 0000031544 00000 n 0000031770 00000 n 0000031997 00000 n 0000032272 00000 n 0000032384 00000 n 0000032610 00000 n 0000032846 00000 n 0000032958 00000 n 0000033184 00000 n 0000033420 00000 n 0000033689 00000 n 0000033802 00000 n 0000034049 00000 n 0000034162 00000 n 0000034426 00000 n 0000034653 00000 n 0000034942 00000 n 0000035055 00000 n 0000035168 00000 n 0000035458 00000 n 0000035739 00000 n 0000035852 00000 n 0000036088 00000 n 0000036324 00000 n 0000036437 00000 n 0000036726 00000 n 0000036994 00000 n 0000037240 00000 n 0000037518 00000 n 0000037631 00000 n 0000037899 00000 n 0000038178 00000 n 0000038423 00000 n 0000038659 00000 n 0000038772 00000 n 0000039027 00000 n 0000039274 00000 n 0000039387 00000 n 0000039500 00000 n 0000039778 00000 n 0000039891 00000 n 0000040166 00000 n 0000040280 00000 n 0000040570 00000 n 0000040685 00000 n 0000040986 00000 n 0000042194 00000 n 0000042308 00000 n 0000042556 00000 n 0000042670 00000 n 0000042946 00000 n 0000043204 00000 n 0000043319 00000 n 0000043624 00000 n 0000043739 00000 n 0000043987 00000 n 0000044102 00000 n 0000044392 00000 n 0000044692 00000 n 0000044968 00000 n 0000045084 00000 n 0000045200 00000 n 0000045449 00000 n 0000045698 00000 n 0000045956 00000 n 0000046071 00000 n 0000046358 00000 n 0000046616 00000 n 0000046864 00000 n 0000046979 00000 n 0000047226 00000 n 0000050370 00000 n 0000050499 00000 n 0000050531 00000 n 0000050689 00000 n 0000050764 00000 n 0000050998 00000 n 0000051163 00000 n 0000051391 00000 n 0000051953 00000 n 0000054729 00000 n 0000057942 00000 n 0000058115 00000 n 0000058342 00000 n 0000060389 00000 n 0000060444 00000 n 0000060499 00000 n 0000063403 00000 n 0000067537 00000 n 0000071284 00000 n 0000074354 00000 n 0000078027 00000 n 0000082702 00000 n 0000086345 00000 n 0000087006 00000 n 0000091082 00000 n 0000094250 00000 n 0000096871 00000 n 0000099741 00000 n 0000103487 00000 n 0000107117 00000 n 0000109596 00000 n 0000113077 00000 n 0000113216 00000 n 0000113248 00000 n 0000113416 00000 n 0000113491 00000 n 0000113738 00000 n 0000117090 00000 n 0000121178 00000 n 0000123957 00000 n 0000127417 00000 n 0000127547 00000 n 0000127579 00000 n 0000127738 00000 n 0000127813 00000 n 0000128052 00000 n 0000129275 00000 n 0000132655 00000 n 0000136002 00000 n 0000139389 00000 n 0000143015 00000 n 0000145907 00000 n 0000149947 00000 n 0000150343 00000 n 0000154748 00000 n 0000156808 00000 n 0000156953 00000 n 0000156985 00000 n 0000157159 00000 n 0000157234 00000 n 0000157481 00000 n 0000160186 00000 n 0000160359 00000 n 0000160601 00000 n 0000160783 00000 n 0000161030 00000 n 0000164345 00000 n 0000168395 00000 n 0000172072 00000 n 0000173787 00000 n 0000177089 00000 n 0000180017 00000 n 0000183522 00000 n 0000185653 00000 n 0000187850 00000 n 0000190552 00000 n 0000192861 00000 n 0000195006 00000 n 0000198053 00000 n 0000201513 00000 n 0000203546 00000 n 0000206215 00000 n 0000208587 00000 n 0000209895 00000 n 0000212257 00000 n 0000216711 00000 n 0000216828 00000 n 0000219180 00000 n 0000222111 00000 n 0000223718 00000 n 0000226821 00000 n 0000229436 00000 n 0000230804 00000 n 0000233497 00000 n 0000236385 00000 n 0000237960 00000 n 0000240895 00000 n 0000242743 00000 n 0000242969 00000 n 0000243367 00000 n 0000255528 00000 n 0000255904 00000 n 0000256238 00000 n 0000256693 00000 n 0000271467 00000 n 0000271940 00000 n 0000272426 00000 n 0000272868 00000 n 0000273169 00000 n 0000286323 00000 n 0000286367 00000 n 0000286395 00000 n 0000286621 00000 n 0000287088 00000 n 0000410693 00000 n 0000410977 00000 n 0000411277 00000 n 0000425444 00000 n 0000425488 00000 n 0000425516 00000 n 0000601220 00000 n 0000601248 00000 n 0000644658 00000 n trailer <<7A67783F1FA0534FAE9993D53F3ADDC9>] >> startxref 645636 %%EOF xref 0 0 trailer <<7A67783F1FA0534FAE9993D53F3ADDC9>] /Prev 645636/XRefStm 644658>> startxref 650837 %%EOFlcms2-2.12rc1/bin/0000755000175000017500000000000013775114656012665 5ustar martimartilcms2-2.12rc1/bin/Bin.txt0000644000175000017500000000000313775114656014127 0ustar martimartiBinlcms2-2.12rc1/ltmain.sh0000644000175000017500000105167513775114656013754 0ustar martimarti # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value returned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-fgnu-tm| \ -shared-libgcc|-static-libgcc|-static-libgfortran|-static-libstdc++) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 lcms2-2.12rc1/missing0000755000175000017500000001533013775114656013516 0ustar martimarti#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: lcms2-2.12rc1/configure0000755000175000017500000227171413775114656014042 0ustar martimarti#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for lcms2 2.12. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='lcms2' PACKAGE_TARNAME='lcms2' PACKAGE_VERSION='2.12' PACKAGE_STRING='lcms2 2.12' PACKAGE_BUGREPORT='' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS COND_FASTFLOAT_FALSE COND_FASTFLOAT_TRUE TIFFICC_DEPLIBS JPEGICC_DEPLIBS LIB_PLUGINS LCMS_LIB_DEPLIBS LIB_TIFF HasTIFF_FALSE HasTIFF_TRUE LIB_ZLIB HasZLIB_FALSE HasZLIB_TRUE LIB_JPEG HasJPEG_FALSE HasJPEG_TRUE LIB_THREAD LIB_MATH PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CXX PTHREAD_CC acx_pthread_config inline MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE LIBTOOL_DEPS CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL OBJDUMP DLLTOOL AS am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBRARY_AGE LIBRARY_REVISION LIBRARY_CURRENT target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_maintainer_mode with_jpeg with_tiff with_zlib with_fastfloat with_threads ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= 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=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -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_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$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 ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$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 | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$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 ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) 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 | -n) 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 ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -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_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=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 ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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 the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` 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 test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # 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 <<_ACEOF \`configure' configures lcms2 2.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/lcms2] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --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 System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of lcms2 2.12:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-jpeg=DIR use jpeg installed in DIR --with-tiff=DIR use tiff installed in DIR --without-zlib disable ZLIB support --with-fastfloat build and install fast_float plugin, use only if GPL 3.0 is acceptable --without-threads disable POSIX threads API support Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF lcms2 configure 2.12 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* 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_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by lcms2 $as_me 2.12, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Specify directory where m4 macros may be found. # # Libtool library revision control info # LIBRARY_CURRENT=2 LIBRARY_REVISION=12 LIBRARY_AGE=0 # Obtain system type by running config.guess ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='lcms2' VERSION='2.12' # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 $as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test $am_uid -le $am_max_uid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 $as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test $am_gid -le $am_max_gid; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } _am_tools=none fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 $as_echo_n "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if ${am_cv_prog_tar_ustar+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_prog_tar_ustar=$_am_tool fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 $as_echo "$am_cv_prog_tar_ustar" >&6; } # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check for programs DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_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 $# != 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 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi case $ac_cv_prog_cc_stdc in #( no) : ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if ${ac_cv_prog_cc_stdc+:} false; then : $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in #( no) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; #( '') : { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi #AM_PROG_LD #AC_SUBST(LD) #AC_PROG_INSTALL #AC_PROG_MAKE_SET #AC_PROG_LN_S # # Tests for Windows # # Configure libtool # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #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)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: LIB_PLUGINS = '' # Add configure option --enable-maintainer-mode which enables dependency # checking and generation useful to package maintainers. This is made an # option to avoid confusing end users. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # If the C compiler supports the keyword inline, do nothing. Otherwise # define inline to __inline__ or __inline if it accepts one of those, # otherwise define inline to be empty. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac # Check if the C compiler supports the "visibility" function attribute # If supported, defines HAVE_FUNC_ATTRIBUTE_VISIBILITY { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility))" >&5 $as_echo_n "checking for __attribute__((visibility))... " >&6; } if ${ax_cv_have_func_attribute_visibility+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo_def( void ) __attribute__((visibility("default"))); int foo_hid( void ) __attribute__((visibility("hidden"))); int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if test -s conftest.err; then : ax_cv_have_func_attribute_visibility=no else ax_cv_have_func_attribute_visibility=yes fi else ax_cv_have_func_attribute_visibility=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_have_func_attribute_visibility" >&5 $as_echo "$ax_cv_have_func_attribute_visibility" >&6; } if test yes = $ax_cv_have_func_attribute_visibility; then : cat >>confdefs.h <<_ACEOF #define HAVE_FUNC_ATTRIBUTE_VISIBILITY 1 _ACEOF fi # Check if the compiler supports "-fvisibility=hidden" and if yes, add it to CFLAGS # This means that symbols that are not marked explicitly for export (CMSAPI) # will not be reachable in the shared library. for flag in "-fvisibility=hidden"; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 $as_echo_n "checking whether C compiler accepts $flag... " >&6; } if eval \${$as_CACHEVAR+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $flag" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_CACHEVAR=yes" else eval "$as_CACHEVAR=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$ax_check_save_flags fi eval ac_res=\$$as_CACHEVAR { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : if ${CFLAGS+:} false; then : case " $CFLAGS " in #( *" $flag "*) : { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 (: CFLAGS already contains $flag) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; #( *) : as_fn_append CFLAGS " $flag" { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } ;; esac else CFLAGS=$flag { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 (: CFLAGS="$CFLAGS") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } fi else : fi done # If words are stored with the most significant byte first (like # Motorola and SPARC CPUs), define `WORDS_BIGENDIAN'. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # Point to JPEG installed in DIR or disable JPEG with --without-jpeg. # Check whether --with-jpeg was given. if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; if test "x$withval" = "xno" ; then with_jpeg='no' else if test "x$withval" != "xyes" ; then with_jpeg=$withval JPEG_DIR=$withval CPPFLAGS="$CPPFLAGS -I$JPEG_DIR/include" LDFLAGS="$LDFLAGS -L$JPEG_DIR/lib" fi with_jpeg='yes' fi else with_jpeg='yes' fi # Point to TIFF installed in DIR or disable TIFF with --without-tiff. # Check whether --with-tiff was given. if test "${with_tiff+set}" = set; then : withval=$with_tiff; if test "x$withval" = "xno" ; then with_tiff='no' else if test "x$withval" != "xyes" ; then with_tiff=$withval TIFF_DIR=$withval CPPFLAGS="$CPPFLAGS -I$TIFF_DIR/include" LDFLAGS="$LDFLAGS -L$TIFF_DIR/lib" fi with_tiff='yes' fi else with_tiff='yes' fi # Disable ZLIB # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then : withval=$with_zlib; with_zlib=$withval else with_zlib='yes' fi #fast_float plugin: # Check whether --with-fastfloat was given. if test "${with_fastfloat+set}" = set; then : withval=$with_fastfloat; with_fastfloat='yes' LIB_PLUGINS="$LIB_PLUGINS -llcms2_fast_float" else with_fastfloat='no' fi # # Determine POSIX threads settings # # Enable support for POSIX thread APIs # Check whether --with-threads was given. if test "${with_threads+set}" = set; then : withval=$with_threads; with_threads=$withval else with_threads='yes' fi have_threads=no if test "$with_threads" != 'no' then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt lpthread pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; # The HP-UX compiler just warns about options it does not understand # but it needs -mt. *-hpux*) acx_pthread_flags="-mt $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_acx_pthread_config+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$acx_pthread_config"; then ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_acx_pthread_config="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" fi fi acx_pthread_config=$ac_cv_prog_acx_pthread_config if test -n "$acx_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 $as_echo "$acx_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : acx_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 $as_echo "$acx_pthread_ok" >&6; } if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=$attr; return attr; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r case "${host_os}" in aix* ) if test x"$GCC" != xyes; then case "$CC" in *xlc ) # Extract the first word of "xlc_r", so it can be a program name with args. set dummy xlc_r; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="xlc_r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}" fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *cc ) # Extract the first word of "cc_r", so it can be a program name with args. set dummy cc_r; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="cc_r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}" fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; esac fi case "$CXX" in *xlC ) # Extract the first word of "xlC_r", so it can be a program name with args. set dummy xlC_r; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PTHREAD_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CXX="xlC_r" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PTHREAD_CXX" && ac_cv_prog_PTHREAD_CXX="${CXX}" fi fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 $as_echo "$PTHREAD_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; esac ;; esac fi if test "${PTHREAD_CC}x" = "x" then PTHREAD_CC="$CC" fi if test "${PTHREAD_CXX}x" = "x" then PTHREAD_CXX="$CXX" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else acx_pthread_ok=no fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$acx_pthread_ok" = yes then have_threads=yes DEF_THREAD="$PTHREAD_CFLAGS" CFLAGS="$CFLAGS $DEF_THREAD" CXXFLAGS="$CXXFLAGS $DEF_THREAD" if test "$CC" != "$PTHREAD_CC" then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Replacing compiler $CC with compiler $PTHREAD_CC to support pthreads." >&5 $as_echo "$as_me: WARNING: Replacing compiler $CC with compiler $PTHREAD_CC to support pthreads." >&2;} CC="$PTHREAD_CC" fi if test "$CXX" != "$PTHREAD_CXX" then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Replacing compiler $CXX with compiler $PTHREAD_CXX to support pthreads." >&5 $as_echo "$as_me: WARNING: Replacing compiler $CXX with compiler $PTHREAD_CXX to support pthreads." >&2;} CXX="$PTHREAD_CXX" fi fi fi # # Find math library # LIB_MATH='' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 $as_echo_n "checking for sqrt in -lm... " >&6; } if ${ac_cv_lib_m_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_sqrt=yes else ac_cv_lib_m_sqrt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 $as_echo "$ac_cv_lib_m_sqrt" >&6; } if test "x$ac_cv_lib_m_sqrt" = xyes; then : LIB_MATH="-lm" fi LIBS="$LIB_MATH $LIBS" # # Find Posix threads library # LIB_THREAD='' if test "$with_threads" != 'no' && test "$have_threads" = 'yes' then for lib in pthread pthreads do if test "x$PTHREAD_LIBS" = "x" ; then as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_pthread_mutex_lock" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_lock in -l$lib" >&5 $as_echo_n "checking for pthread_mutex_lock in -l$lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_mutex_lock (); int main () { return pthread_mutex_lock (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : PTHREAD_LIBS=-l$lib fi fi done LIB_THREAD="$PTHREAD_LIBS" LIBS="$LIBS $LIB_THREAD" $as_echo "#define HasTHREADS 1" >>confdefs.h else $as_echo "#define HasTHREADS 0" >>confdefs.h fi # # Check for JPEG # have_jpeg='no' LIB_JPEG='' if test ! "$with_jpeg" = 'no' then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG support" >&5 $as_echo_n "checking for JPEG support... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } failed=0; passed=0; ac_fn_c_check_header_mongrel "$LINENO" "jconfig.h" "ac_cv_header_jconfig_h" "$ac_includes_default" if test "x$ac_cv_header_jconfig_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi ac_fn_c_check_header_mongrel "$LINENO" "jerror.h" "ac_cv_header_jerror_h" "$ac_includes_default" if test "x$ac_cv_header_jerror_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi ac_fn_c_check_header_compile "$LINENO" "jmorecfg.h" "ac_cv_header_jmorecfg_h" "#include " if test "x$ac_cv_header_jmorecfg_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" if test "x$ac_cv_header_jpeglib_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_header in -ljpeg" >&5 $as_echo_n "checking for jpeg_read_header in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_read_header+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char jpeg_read_header (); int main () { return jpeg_read_header (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_read_header=yes else ac_cv_lib_jpeg_jpeg_read_header=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_read_header" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_read_header" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_read_header" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi # Test for compatible JPEG library if test ! "$ac_cv_jpeg_version_ok" = 'yes' ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG library is version 6b or later" >&5 $as_echo_n "checking for JPEG library is version 6b or later... " >&6; } if ${ac_cv_jpeg_version_ok+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { #if JPEG_LIB_VERSION < 62 #error IJG JPEG library must be version 6b or newer! #endif return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_jpeg_version_ok='yes' else ac_cv_jpeg_version_ok='no' fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_jpeg_version_ok" >&5 $as_echo "$ac_cv_jpeg_version_ok" >&6; } if test "$ac_cv_jpeg_version_ok" = 'yes' ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } passed=`expr $passed + 1` else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } failed=`expr $failed + 1` fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JPEG package is complete" >&5 $as_echo_n "checking if JPEG package is complete... " >&6; } if test $passed -gt 0 then if test $failed -gt 0 then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5 $as_echo "no -- some components failed test" >&6; } have_jpeg='no (failed tests)' else LIB_JPEG='-ljpeg' LIBS="$LIB_JPEG $LIBS" $as_echo "#define HasJPEG 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_jpeg='yes' fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "$have_jpeg" = 'yes'; then HasJPEG_TRUE= HasJPEG_FALSE='#' else HasJPEG_TRUE='#' HasJPEG_FALSE= fi # # Check for ZLIB # have_zlib='no' if test ! "$with_zlib" = 'no' || test ! "$with_tiff" = 'no' then LIB_ZLIB='' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZLIB support " >&5 $as_echo_n "checking for ZLIB support ... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } failed=0; passed=0; ac_fn_c_check_header_mongrel "$LINENO" "zconf.h" "ac_cv_header_zconf_h" "$ac_includes_default" if test "x$ac_cv_header_zconf_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compress in -lz" >&5 $as_echo_n "checking for compress in -lz... " >&6; } if ${ac_cv_lib_z_compress+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char compress (); int main () { return compress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_compress=yes else ac_cv_lib_z_compress=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_compress" >&5 $as_echo "$ac_cv_lib_z_compress" >&6; } if test "x$ac_cv_lib_z_compress" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uncompress in -lz" >&5 $as_echo_n "checking for uncompress in -lz... " >&6; } if ${ac_cv_lib_z_uncompress+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char uncompress (); int main () { return uncompress (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_uncompress=yes else ac_cv_lib_z_uncompress=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_uncompress" >&5 $as_echo "$ac_cv_lib_z_uncompress" >&6; } if test "x$ac_cv_lib_z_uncompress" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 $as_echo_n "checking for deflate in -lz... " >&6; } if ${ac_cv_lib_z_deflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflate (); int main () { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflate=yes else ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 $as_echo "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5 $as_echo_n "checking for inflate in -lz... " >&6; } if ${ac_cv_lib_z_inflate+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflate (); int main () { return inflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_inflate=yes else ac_cv_lib_z_inflate=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5 $as_echo "$ac_cv_lib_z_inflate" >&6; } if test "x$ac_cv_lib_z_inflate" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzseek in -lz" >&5 $as_echo_n "checking for gzseek in -lz... " >&6; } if ${ac_cv_lib_z_gzseek+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gzseek (); int main () { return gzseek (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_gzseek=yes else ac_cv_lib_z_gzseek=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzseek" >&5 $as_echo "$ac_cv_lib_z_gzseek" >&6; } if test "x$ac_cv_lib_z_gzseek" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gztell in -lz" >&5 $as_echo_n "checking for gztell in -lz... " >&6; } if ${ac_cv_lib_z_gztell+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gztell (); int main () { return gztell (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_gztell=yes else ac_cv_lib_z_gztell=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gztell" >&5 $as_echo "$ac_cv_lib_z_gztell" >&6; } if test "x$ac_cv_lib_z_gztell" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ZLIB package is complete" >&5 $as_echo_n "checking if ZLIB package is complete... " >&6; } if test $passed -gt 0 then if test $failed -gt 0 then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5 $as_echo "no -- some components failed test" >&6; } have_zlib='no (failed tests)' else LIB_ZLIB='-lz' LIBS="$LIB_ZLIB $LIBS" $as_echo "#define HasZLIB 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_zlib='yes' fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "$have_zlib" = 'yes'; then HasZLIB_TRUE= HasZLIB_FALSE='#' else HasZLIB_TRUE='#' HasZLIB_FALSE= fi # # Check for TIFF # have_tiff='no' LIB_TIFF='' if test ! "$with_tiff" = 'no' then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFF support" >&5 $as_echo_n "checking for TIFF support... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } failed=0; passed=0; ac_fn_c_check_header_mongrel "$LINENO" "tiff.h" "ac_cv_header_tiff_h" "$ac_includes_default" if test "x$ac_cv_header_tiff_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" if test "x$ac_cv_header_tiffio_h" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 $as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } if ${ac_cv_lib_tiff_TIFFOpen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltiff $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TIFFOpen (); int main () { return TIFFOpen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tiff_TIFFOpen=yes else ac_cv_lib_tiff_TIFFOpen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 $as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } if test "x$ac_cv_lib_tiff_TIFFOpen" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFClientOpen in -ltiff" >&5 $as_echo_n "checking for TIFFClientOpen in -ltiff... " >&6; } if ${ac_cv_lib_tiff_TIFFClientOpen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltiff $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TIFFClientOpen (); int main () { return TIFFClientOpen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tiff_TIFFClientOpen=yes else ac_cv_lib_tiff_TIFFClientOpen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFClientOpen" >&5 $as_echo "$ac_cv_lib_tiff_TIFFClientOpen" >&6; } if test "x$ac_cv_lib_tiff_TIFFClientOpen" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFIsByteSwapped in -ltiff" >&5 $as_echo_n "checking for TIFFIsByteSwapped in -ltiff... " >&6; } if ${ac_cv_lib_tiff_TIFFIsByteSwapped+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltiff $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TIFFIsByteSwapped (); int main () { return TIFFIsByteSwapped (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tiff_TIFFIsByteSwapped=yes else ac_cv_lib_tiff_TIFFIsByteSwapped=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFIsByteSwapped" >&5 $as_echo "$ac_cv_lib_tiff_TIFFIsByteSwapped" >&6; } if test "x$ac_cv_lib_tiff_TIFFIsByteSwapped" = xyes; then : passed=`expr $passed + 1` else failed=`expr $failed + 1` fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if TIFF package is complete" >&5 $as_echo_n "checking if TIFF package is complete... " >&6; } if test $passed -gt 0 then if test $failed -gt 0 then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no -- some components failed test" >&5 $as_echo "no -- some components failed test" >&6; } have_tiff='no (failed tests)' else LIB_TIFF='-ltiff' LIBS="$LIB_TIFF $LIBS" $as_echo "#define HasTIFF 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_tiff='yes' for ac_header in tiffconf.h do : ac_fn_c_check_header_mongrel "$LINENO" "tiffconf.h" "ac_cv_header_tiffconf_h" "$ac_includes_default" if test "x$ac_cv_header_tiffconf_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIFFCONF_H 1 _ACEOF fi done fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "$have_tiff" = 'yes'; then HasTIFF_TRUE= HasTIFF_FALSE='#' else HasTIFF_TRUE='#' HasTIFF_FALSE= fi # Libraries that the LCMS library depends on LCMS_LIB_DEPLIBS="$LIB_MATH $LIB_THREAD" LCMS_LIB_DEPLIBS=`echo $LCMS_LIB_DEPLIBS | sed -e 's/ */ /g'` echo "LIB_PLUGINS: $LIB_PLUGINS" # Libraries that the jpegicc program depends on JPEGICC_DEPLIBS="$LIB_JPEG $LIB_MATH $LIB_THREAD" JPEGICC_DEPLIBS=`echo $JPEGICC_DEPLIBS | sed -e 's/ */ /g'` # Libraries that the tifficc program depends on TIFFICC_DEPLIBS="$LIB_TIFF $LIB_JPEG $LIB_ZLIB $LIB_MATH $LIB_THREAD" TIFFICC_DEPLIBS=`echo $TIFFICC_DEPLIBS | sed -e 's/ */ /g'` LIBS='' # # Perform substitutions # ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files lcms2.pc" ac_config_files="$ac_config_files include/Makefile" ac_config_files="$ac_config_files src/Makefile" ac_config_files="$ac_config_files utils/tificc/Makefile" ac_config_files="$ac_config_files utils/transicc/Makefile" ac_config_files="$ac_config_files utils/linkicc/Makefile" ac_config_files="$ac_config_files utils/jpgicc/Makefile" ac_config_files="$ac_config_files utils/psicc/Makefile" ac_config_files="$ac_config_files testbed/Makefile" if test "x$with_fastfloat" = "xyes" ; then COND_FASTFLOAT_TRUE= COND_FASTFLOAT_FALSE='#' else COND_FASTFLOAT_TRUE='#' COND_FASTFLOAT_FALSE= fi ac_config_files="$ac_config_files plugins/Makefile" ac_config_files="$ac_config_files plugins/fast_float/Makefile" ac_config_files="$ac_config_files plugins/fast_float/src/Makefile" ac_config_files="$ac_config_files plugins/fast_float/include/Makefile" ac_config_files="$ac_config_files plugins/fast_float/testbed/Makefile" cat >confcache <<\_ACEOF # 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, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # 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. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HasJPEG_TRUE}" && test -z "${HasJPEG_FALSE}"; then as_fn_error $? "conditional \"HasJPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HasZLIB_TRUE}" && test -z "${HasZLIB_FALSE}"; then as_fn_error $? "conditional \"HasZLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HasTIFF_TRUE}" && test -z "${HasTIFF_FALSE}"; then as_fn_error $? "conditional \"HasTIFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_FASTFLOAT_TRUE}" && test -z "${COND_FASTFLOAT_FALSE}"; then as_fn_error $? "conditional \"COND_FASTFLOAT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by lcms2 $as_me 2.12, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ lcms2 config.status 2.12 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "lcms2.pc") CONFIG_FILES="$CONFIG_FILES lcms2.pc" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "utils/tificc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/tificc/Makefile" ;; "utils/transicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/transicc/Makefile" ;; "utils/linkicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/linkicc/Makefile" ;; "utils/jpgicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/jpgicc/Makefile" ;; "utils/psicc/Makefile") CONFIG_FILES="$CONFIG_FILES utils/psicc/Makefile" ;; "testbed/Makefile") CONFIG_FILES="$CONFIG_FILES testbed/Makefile" ;; "plugins/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/Makefile" ;; "plugins/fast_float/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/fast_float/Makefile" ;; "plugins/fast_float/src/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/fast_float/src/Makefile" ;; "plugins/fast_float/include/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/fast_float/include/Makefile" ;; "plugins/fast_float/testbed/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/fast_float/testbed/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi lcms2-2.12rc1/Lib/0000755000175000017500000000000013775114656012623 5ustar martimartilcms2-2.12rc1/Lib/MS/0000755000175000017500000000000013775114656013142 5ustar martimartilcms2-2.12rc1/Lib/MS/MS.TXT0000644000175000017500000000000213775114656014052 0ustar martimartiMSlcms2-2.12rc1/Lib/BC/0000755000175000017500000000000013775114656013107 5ustar martimartilcms2-2.12rc1/Lib/BC/BC.txt0000644000175000017500000000000213775114656014124 0ustar martimartiBClcms2-2.12rc1/Makefile.am0000644000175000017500000000215413775114656014153 0ustar martimarti# # Top-Level Makefile for building LittleCMS 2 # # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7.2 dist-zip foreign ACLOCAL_AMFLAGS = -I m4 PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ if COND_FASTFLOAT USER_PLUGINS = plugins endif # Directories containing Makefiles to 'make' SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed $(USER_PLUGINS) # Additional files to distribute EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL README.1ST autogen.sh lcms2.pc.in plugins pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = lcms2.pc # Make sure get rid of VC stuff... clean-local: rm -rf autom4te.cache find Projects -name "*.user" | xargs rm -rf find Projects -name "Release" | xargs rm -rf find Projects -name "Debug" | xargs rm -rf find Projects -name "*.aps" | xargs rm -rf find Projects -name "*.suo" | xargs rm -rf find Projects -name "*.log" | xargs rm -rf find Projects -name "*.sdf" | xargs rm -rf find Projects -name "*.opensdf" | xargs rm -rf find Projects -name "ipch" | xargs rm -rf lcms2-2.12rc1/.github/0000755000175000017500000000000013775114656013455 5ustar martimartilcms2-2.12rc1/.github/workflows/0000755000175000017500000000000013775114656015512 5ustar martimartilcms2-2.12rc1/.github/workflows/codeql-analysis.yml0000644000175000017500000000502613775114656021330 0ustar martimarti# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. name: "CodeQL" on: push: branches: [master] pull_request: # The branches below must be a subset of the branches above branches: [master] schedule: - cron: '0 6 * * 5' jobs: analyze: name: Analyze runs-on: ubuntu-latest strategy: fail-fast: false matrix: # Override automatic language detection by changing the below list # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] language: ['cpp'] # Learn more... # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection steps: - name: Checkout repository uses: actions/checkout@v2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. - run: git checkout HEAD^2 if: ${{ github.event_name == 'pull_request' }} # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v1 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 lcms2-2.12rc1/testbed/0000755000175000017500000000000013775114656013547 5ustar martimartilcms2-2.12rc1/testbed/toosmall.icc0000755000175000017500000000023613775114656016065 0ustar martimartilcms prtrGRAYLab   acspMSFTlcms-lcmsdesccprtX"B2lcms2-2.12rc1/testbed/test5.icc0000755000175000017500000000625013775114656015301 0ustar martimarti lcmsmntrRGB XYZ  1acspMSFT-lcmscprtP#desctwtptTbkpthrXYZ|gXYZbXYZdmnddmdd8tvuedview4$lumiXmeasl$tech rTRC gTRC bTRC textNot suitable for real usedesc,Test profile, not suitable for real use-Test profile, not suitable for real useXYZ QXYZ XYZ o8XYZ bXYZ $desc Little CMS Little CMSdesc2.x 2.xdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmlcms2-2.12rc1/testbed/TestCLT.icc0000644000175000017500001204071013775114656015516 0ustar martimarti(AAPPL@prtrCMYKLab  8acspMSFTPGX -LOGOcprtP*DevD|CIEDpchadM,wtptN$kTRCN8 A2B1RDB2A1 XA2B0HB2A0TXA2B2LB2A2"Xgamt'P)gmps(>XPmtr(?*LPIN(AH desc(ATrtextCopyright by LOGO GmbH, SteinfurttextECI2002 ORIGINATOR "" DESCRIPTOR "Output Characterisation" PRINT_CONDITIONS "" LGOMCCMYKSEPARATION "UseCMYKSep = true Separation = { SepID = 6 StartK = '40' WidthK = '1' MaxC = '100' MaxM = '100' MaxY = '100' MaxK = '100' MaxCMYK = '400' } " CREATED "5/16/2006" # Time: 13:56 KEYWORD "SAMPLE_NAME" NUMBER_OF_FIELDS 6 BEGIN_DATA_FORMAT SAMPLE_ID SAMPLE_NAME CMYK_C CMYK_M CMYK_Y CMYK_K END_DATA_FORMAT NUMBER_OF_SETS 1485 BEGIN_DATA 171 A1 0.00 100.00 20.00 0.00 170 A2 0.00 85.00 20.00 0.00 169 A3 0.00 70.00 20.00 0.00 168 A4 0.00 55.00 20.00 0.00 167 A5 0.00 40.00 20.00 0.00 166 A6 0.00 30.00 20.00 0.00 165 A7 0.00 20.00 20.00 0.00 164 A8 0.00 10.00 20.00 0.00 163 A9 0.00 0.00 20.00 0.00 90 A10 0.00 100.00 10.00 0.00 89 A11 0.00 85.00 10.00 0.00 88 A12 0.00 70.00 10.00 0.00 87 A13 0.00 55.00 10.00 0.00 86 A14 0.00 40.00 10.00 0.00 85 A15 0.00 30.00 10.00 0.00 84 A16 0.00 20.00 10.00 0.00 83 A17 0.00 10.00 10.00 0.00 82 A18 0.00 0.00 10.00 0.00 9 A19 0.00 100.00 0.00 0.00 8 A20 0.00 85.00 0.00 0.00 7 A21 0.00 70.00 0.00 0.00 6 A22 0.00 55.00 0.00 0.00 5 A23 0.00 40.00 0.00 0.00 4 A24 0.00 30.00 0.00 0.00 3 A25 0.00 20.00 0.00 0.00 2 A26 0.00 10.00 0.00 0.00 1 A27 0.00 0.00 0.00 0.00 735 A28 0.00 100.00 0.00 20.00 734 A29 0.00 70.00 0.00 20.00 733 A30 0.00 40.00 0.00 20.00 732 A31 0.00 20.00 0.00 20.00 731 A32 0.00 10.00 0.00 20.00 730 A33 0.00 0.00 0.00 20.00 180 B1 10.00 100.00 20.00 0.00 179 B2 10.00 85.00 20.00 0.00 178 B3 10.00 70.00 20.00 0.00 177 B4 10.00 55.00 20.00 0.00 176 B5 10.00 40.00 20.00 0.00 175 B6 10.00 30.00 20.00 0.00 174 B7 10.00 20.00 20.00 0.00 173 B8 10.00 10.00 20.00 0.00 172 B9 10.00 0.00 20.00 0.00 99 B10 10.00 100.00 10.00 0.00 98 B11 10.00 85.00 10.00 0.00 97 B12 10.00 70.00 10.00 0.00 96 B13 10.00 55.00 10.00 0.00 95 B14 10.00 40.00 10.00 0.00 94 B15 10.00 30.00 10.00 0.00 93 B16 10.00 20.00 10.00 0.00 92 B17 10.00 10.00 10.00 0.00 91 B18 10.00 0.00 10.00 0.00 18 B19 10.00 100.00 0.00 0.00 17 B20 10.00 85.00 0.00 0.00 16 B21 10.00 70.00 0.00 0.00 15 B22 10.00 55.00 0.00 0.00 14 B23 10.00 40.00 0.00 0.00 13 B24 10.00 30.00 0.00 0.00 12 B25 10.00 20.00 0.00 0.00 11 B26 10.00 10.00 0.00 0.00 10 B27 10.00 0.00 0.00 0.00 741 B28 10.00 100.00 0.00 20.00 740 B29 10.00 70.00 0.00 20.00 739 B30 10.00 40.00 0.00 20.00 738 B31 10.00 20.00 0.00 20.00 737 B32 10.00 10.00 0.00 20.00 736 B33 10.00 0.00 0.00 20.00 189 C1 20.00 100.00 20.00 0.00 188 C2 20.00 85.00 20.00 0.00 187 C3 20.00 70.00 20.00 0.00 186 C4 20.00 55.00 20.00 0.00 185 C5 20.00 40.00 20.00 0.00 184 C6 20.00 30.00 20.00 0.00 183 C7 20.00 20.00 20.00 0.00 182 C8 20.00 10.00 20.00 0.00 181 C9 20.00 0.00 20.00 0.00 108 C10 20.00 100.00 10.00 0.00 107 C11 20.00 85.00 10.00 0.00 106 C12 20.00 70.00 10.00 0.00 105 C13 20.00 55.00 10.00 0.00 104 C14 20.00 40.00 10.00 0.00 103 C15 20.00 30.00 10.00 0.00 102 C16 20.00 20.00 10.00 0.00 101 C17 20.00 10.00 10.00 0.00 100 C18 20.00 0.00 10.00 0.00 27 C19 20.00 100.00 0.00 0.00 26 C20 20.00 85.00 0.00 0.00 25 C21 20.00 70.00 0.00 0.00 24 C22 20.00 55.00 0.00 0.00 23 C23 20.00 40.00 0.00 0.00 22 C24 20.00 30.00 0.00 0.00 21 C25 20.00 20.00 0.00 0.00 20 C26 20.00 10.00 0.00 0.00 19 C27 20.00 0.00 0.00 0.00 747 C28 20.00 100.00 0.00 20.00 746 C29 20.00 70.00 0.00 20.00 745 C30 20.00 40.00 0.00 20.00 744 C31 20.00 20.00 0.00 20.00 743 C32 20.00 10.00 0.00 20.00 742 C33 20.00 0.00 0.00 20.00 198 D1 30.00 100.00 20.00 0.00 197 D2 30.00 85.00 20.00 0.00 196 D3 30.00 70.00 20.00 0.00 195 D4 30.00 55.00 20.00 0.00 194 D5 30.00 40.00 20.00 0.00 193 D6 30.00 30.00 20.00 0.00 192 D7 30.00 20.00 20.00 0.00 191 D8 30.00 10.00 20.00 0.00 190 D9 30.00 0.00 20.00 0.00 117 D10 30.00 100.00 10.00 0.00 116 D11 30.00 85.00 10.00 0.00 115 D12 30.00 70.00 10.00 0.00 114 D13 30.00 55.00 10.00 0.00 113 D14 30.00 40.00 10.00 0.00 112 D15 30.00 30.00 10.00 0.00 111 D16 30.00 20.00 10.00 0.00 110 D17 30.00 10.00 10.00 0.00 109 D18 30.00 0.00 10.00 0.00 36 D19 30.00 100.00 0.00 0.00 35 D20 30.00 85.00 0.00 0.00 34 D21 30.00 70.00 0.00 0.00 33 D22 30.00 55.00 0.00 0.00 32 D23 30.00 40.00 0.00 0.00 31 D24 30.00 30.00 0.00 0.00 30 D25 30.00 20.00 0.00 0.00 29 D26 30.00 10.00 0.00 0.00 28 D27 30.00 0.00 0.00 0.00 753 D28 40.00 100.00 0.00 20.00 752 D29 40.00 70.00 0.00 20.00 751 D30 40.00 40.00 0.00 20.00 750 D31 40.00 20.00 0.00 20.00 749 D32 40.00 10.00 0.00 20.00 748 D33 40.00 0.00 0.00 20.00 207 E1 40.00 100.00 20.00 0.00 206 E2 40.00 85.00 20.00 0.00 205 E3 40.00 70.00 20.00 0.00 204 E4 40.00 55.00 20.00 0.00 203 E5 40.00 40.00 20.00 0.00 202 E6 40.00 30.00 20.00 0.00 201 E7 40.00 20.00 20.00 0.00 200 E8 40.00 10.00 20.00 0.00 199 E9 40.00 0.00 20.00 0.00 126 E10 40.00 100.00 10.00 0.00 125 E11 40.00 85.00 10.00 0.00 124 E12 40.00 70.00 10.00 0.00 123 E13 40.00 55.00 10.00 0.00 122 E14 40.00 40.00 10.00 0.00 121 E15 40.00 30.00 10.00 0.00 120 E16 40.00 20.00 10.00 0.00 119 E17 40.00 10.00 10.00 0.00 118 E18 40.00 0.00 10.00 0.00 45 E19 40.00 100.00 0.00 0.00 44 E20 40.00 85.00 0.00 0.00 43 E21 40.00 70.00 0.00 0.00 42 E22 40.00 55.00 0.00 0.00 41 E23 40.00 40.00 0.00 0.00 40 E24 40.00 30.00 0.00 0.00 39 E25 40.00 20.00 0.00 0.00 38 E26 40.00 10.00 0.00 0.00 37 E27 40.00 0.00 0.00 0.00 759 E28 70.00 100.00 0.00 20.00 758 E29 70.00 70.00 0.00 20.00 757 E30 70.00 40.00 0.00 20.00 756 E31 70.00 20.00 0.00 20.00 755 E32 70.00 10.00 0.00 20.00 754 E33 70.00 0.00 0.00 20.00 216 F1 55.00 100.00 20.00 0.00 215 F2 55.00 85.00 20.00 0.00 214 F3 55.00 70.00 20.00 0.00 213 F4 55.00 55.00 20.00 0.00 212 F5 55.00 40.00 20.00 0.00 211 F6 55.00 30.00 20.00 0.00 210 F7 55.00 20.00 20.00 0.00 209 F8 55.00 10.00 20.00 0.00 208 F9 55.00 0.00 20.00 0.00 135 F10 55.00 100.00 10.00 0.00 134 F11 55.00 85.00 10.00 0.00 133 F12 55.00 70.00 10.00 0.00 132 F13 55.00 55.00 10.00 0.00 131 F14 55.00 40.00 10.00 0.00 130 F15 55.00 30.00 10.00 0.00 129 F16 55.00 20.00 10.00 0.00 128 F17 55.00 10.00 10.00 0.00 127 F18 55.00 0.00 10.00 0.00 54 F19 55.00 100.00 0.00 0.00 53 F20 55.00 85.00 0.00 0.00 52 F21 55.00 70.00 0.00 0.00 51 F22 55.00 55.00 0.00 0.00 50 F23 55.00 40.00 0.00 0.00 49 F24 55.00 30.00 0.00 0.00 48 F25 55.00 20.00 0.00 0.00 47 F26 55.00 10.00 0.00 0.00 46 F27 55.00 0.00 0.00 0.00 765 F28 100.00 100.00 0.00 20.00 764 F29 100.00 70.00 0.00 20.00 763 F30 100.00 40.00 0.00 20.00 762 F31 100.00 20.00 0.00 20.00 761 F32 100.00 10.00 0.00 20.00 760 F33 100.00 0.00 0.00 20.00 225 G1 70.00 100.00 20.00 0.00 224 G2 70.00 85.00 20.00 0.00 223 G3 70.00 70.00 20.00 0.00 222 G4 70.00 55.00 20.00 0.00 221 G5 70.00 40.00 20.00 0.00 220 G6 70.00 30.00 20.00 0.00 219 G7 70.00 20.00 20.00 0.00 218 G8 70.00 10.00 20.00 0.00 217 G9 70.00 0.00 20.00 0.00 144 G10 70.00 100.00 10.00 0.00 143 G11 70.00 85.00 10.00 0.00 142 G12 70.00 70.00 10.00 0.00 141 G13 70.00 55.00 10.00 0.00 140 G14 70.00 40.00 10.00 0.00 139 G15 70.00 30.00 10.00 0.00 138 G16 70.00 20.00 10.00 0.00 137 G17 70.00 10.00 10.00 0.00 136 G18 70.00 0.00 10.00 0.00 63 G19 70.00 100.00 0.00 0.00 62 G20 70.00 85.00 0.00 0.00 61 G21 70.00 70.00 0.00 0.00 60 G22 70.00 55.00 0.00 0.00 59 G23 70.00 40.00 0.00 0.00 58 G24 70.00 30.00 0.00 0.00 57 G25 70.00 20.00 0.00 0.00 56 G26 70.00 10.00 0.00 0.00 55 G27 70.00 0.00 0.00 0.00 771 G28 0.00 100.00 10.00 20.00 770 G29 0.00 70.00 10.00 20.00 769 G30 0.00 40.00 10.00 20.00 768 G31 0.00 20.00 10.00 20.00 767 G32 0.00 10.00 10.00 20.00 766 G33 0.00 0.00 10.00 20.00 234 H1 85.00 100.00 20.00 0.00 233 H2 85.00 85.00 20.00 0.00 232 H3 85.00 70.00 20.00 0.00 231 H4 85.00 55.00 20.00 0.00 230 H5 85.00 40.00 20.00 0.00 229 H6 85.00 30.00 20.00 0.00 228 H7 85.00 20.00 20.00 0.00 227 H8 85.00 10.00 20.00 0.00 226 H9 85.00 0.00 20.00 0.00 153 H10 85.00 100.00 10.00 0.00 152 H11 85.00 85.00 10.00 0.00 151 H12 85.00 70.00 10.00 0.00 150 H13 85.00 55.00 10.00 0.00 149 H14 85.00 40.00 10.00 0.00 148 H15 85.00 30.00 10.00 0.00 147 H16 85.00 20.00 10.00 0.00 146 H17 85.00 10.00 10.00 0.00 145 H18 85.00 0.00 10.00 0.00 72 H19 85.00 100.00 0.00 0.00 71 H20 85.00 85.00 0.00 0.00 70 H21 85.00 70.00 0.00 0.00 69 H22 85.00 55.00 0.00 0.00 68 H23 85.00 40.00 0.00 0.00 67 H24 85.00 30.00 0.00 0.00 66 H25 85.00 20.00 0.00 0.00 65 H26 85.00 10.00 0.00 0.00 64 H27 85.00 0.00 0.00 0.00 777 H28 10.00 100.00 10.00 20.00 776 H29 10.00 70.00 10.00 20.00 775 H30 10.00 40.00 10.00 20.00 774 H31 10.00 20.00 10.00 20.00 773 H32 10.00 10.00 10.00 20.00 772 H33 10.00 0.00 10.00 20.00 243 I1 100.00 100.00 20.00 0.00 242 I2 100.00 85.00 20.00 0.00 241 I3 100.00 70.00 20.00 0.00 240 I4 100.00 55.00 20.00 0.00 239 I5 100.00 40.00 20.00 0.00 238 I6 100.00 30.00 20.00 0.00 237 I7 100.00 20.00 20.00 0.00 236 I8 100.00 10.00 20.00 0.00 235 I9 100.00 0.00 20.00 0.00 162 I10 100.00 100.00 10.00 0.00 161 I11 100.00 85.00 10.00 0.00 160 I12 100.00 70.00 10.00 0.00 159 I13 100.00 55.00 10.00 0.00 158 I14 100.00 40.00 10.00 0.00 157 I15 100.00 30.00 10.00 0.00 156 I16 100.00 20.00 10.00 0.00 155 I17 100.00 10.00 10.00 0.00 154 I18 100.00 0.00 10.00 0.00 81 I19 100.00 100.00 0.00 0.00 80 I20 100.00 85.00 0.00 0.00 79 I21 100.00 70.00 0.00 0.00 78 I22 100.00 55.00 0.00 0.00 77 I23 100.00 40.00 0.00 0.00 76 I24 100.00 30.00 0.00 0.00 75 I25 100.00 20.00 0.00 0.00 74 I26 100.00 10.00 0.00 0.00 73 I27 100.00 0.00 0.00 0.00 783 I28 20.00 100.00 10.00 20.00 782 I29 20.00 70.00 10.00 20.00 781 I30 20.00 40.00 10.00 20.00 780 I31 20.00 20.00 10.00 20.00 779 I32 20.00 10.00 10.00 20.00 778 I33 20.00 0.00 10.00 20.00 414 J1 0.00 100.00 55.00 0.00 413 J2 0.00 85.00 55.00 0.00 412 J3 0.00 70.00 55.00 0.00 411 J4 0.00 55.00 55.00 0.00 410 J5 0.00 40.00 55.00 0.00 409 J6 0.00 30.00 55.00 0.00 408 J7 0.00 20.00 55.00 0.00 407 J8 0.00 10.00 55.00 0.00 406 J9 0.00 0.00 55.00 0.00 333 J10 0.00 100.00 40.00 0.00 332 J11 0.00 85.00 40.00 0.00 331 J12 0.00 70.00 40.00 0.00 330 J13 0.00 55.00 40.00 0.00 329 J14 0.00 40.00 40.00 0.00 328 J15 0.00 30.00 40.00 0.00 327 J16 0.00 20.00 40.00 0.00 326 J17 0.00 10.00 40.00 0.00 325 J18 0.00 0.00 40.00 0.00 252 J19 0.00 100.00 30.00 0.00 251 J20 0.00 85.00 30.00 0.00 250 J21 0.00 70.00 30.00 0.00 249 J22 0.00 55.00 30.00 0.00 248 J23 0.00 40.00 30.00 0.00 247 J24 0.00 30.00 30.00 0.00 246 J25 0.00 20.00 30.00 0.00 245 J26 0.00 10.00 30.00 0.00 244 J27 0.00 0.00 30.00 0.00 789 J28 40.00 100.00 10.00 20.00 788 J29 40.00 70.00 10.00 20.00 787 J30 40.00 40.00 10.00 20.00 786 J31 40.00 20.00 10.00 20.00 785 J32 40.00 10.00 10.00 20.00 784 J33 40.00 0.00 10.00 20.00 423 K1 10.00 100.00 55.00 0.00 422 K2 10.00 85.00 55.00 0.00 421 K3 10.00 70.00 55.00 0.00 420 K4 10.00 55.00 55.00 0.00 419 K5 10.00 40.00 55.00 0.00 418 K6 10.00 30.00 55.00 0.00 417 K7 10.00 20.00 55.00 0.00 416 K8 10.00 10.00 55.00 0.00 415 K9 10.00 0.00 55.00 0.00 342 K10 10.00 100.00 40.00 0.00 341 K11 10.00 85.00 40.00 0.00 340 K12 10.00 70.00 40.00 0.00 339 K13 10.00 55.00 40.00 0.00 338 K14 10.00 40.00 40.00 0.00 337 K15 10.00 30.00 40.00 0.00 336 K16 10.00 20.00 40.00 0.00 335 K17 10.00 10.00 40.00 0.00 334 K18 10.00 0.00 40.00 0.00 261 K19 10.00 100.00 30.00 0.00 260 K20 10.00 85.00 30.00 0.00 259 K21 10.00 70.00 30.00 0.00 258 K22 10.00 55.00 30.00 0.00 257 K23 10.00 40.00 30.00 0.00 256 K24 10.00 30.00 30.00 0.00 255 K25 10.00 20.00 30.00 0.00 254 K26 10.00 10.00 30.00 0.00 253 K27 10.00 0.00 30.00 0.00 795 K28 70.00 100.00 10.00 20.00 794 K29 70.00 70.00 10.00 20.00 793 K30 70.00 40.00 10.00 20.00 792 K31 70.00 20.00 10.00 20.00 791 K32 70.00 10.00 10.00 20.00 790 K33 70.00 0.00 10.00 20.00 432 L1 20.00 100.00 55.00 0.00 431 L2 20.00 85.00 55.00 0.00 430 L3 20.00 70.00 55.00 0.00 429 L4 20.00 55.00 55.00 0.00 428 L5 20.00 40.00 55.00 0.00 427 L6 20.00 30.00 55.00 0.00 426 L7 20.00 20.00 55.00 0.00 425 L8 20.00 10.00 55.00 0.00 424 L9 20.00 0.00 55.00 0.00 351 L10 20.00 100.00 40.00 0.00 350 L11 20.00 85.00 40.00 0.00 349 L12 20.00 70.00 40.00 0.00 348 L13 20.00 55.00 40.00 0.00 347 L14 20.00 40.00 40.00 0.00 346 L15 20.00 30.00 40.00 0.00 345 L16 20.00 20.00 40.00 0.00 344 L17 20.00 10.00 40.00 0.00 343 L18 20.00 0.00 40.00 0.00 270 L19 20.00 100.00 30.00 0.00 269 L20 20.00 85.00 30.00 0.00 268 L21 20.00 70.00 30.00 0.00 267 L22 20.00 55.00 30.00 0.00 266 L23 20.00 40.00 30.00 0.00 265 L24 20.00 30.00 30.00 0.00 264 L25 20.00 20.00 30.00 0.00 263 L26 20.00 10.00 30.00 0.00 262 L27 20.00 0.00 30.00 0.00 801 L28 100.00 100.00 10.00 20.00 800 L29 100.00 70.00 10.00 20.00 799 L30 100.00 40.00 10.00 20.00 798 L31 100.00 20.00 10.00 20.00 797 L32 100.00 10.00 10.00 20.00 796 L33 100.00 0.00 10.00 20.00 441 M1 30.00 100.00 55.00 0.00 440 M2 30.00 85.00 55.00 0.00 439 M3 30.00 70.00 55.00 0.00 438 M4 30.00 55.00 55.00 0.00 437 M5 30.00 40.00 55.00 0.00 436 M6 30.00 30.00 55.00 0.00 435 M7 30.00 20.00 55.00 0.00 434 M8 30.00 10.00 55.00 0.00 433 M9 30.00 0.00 55.00 0.00 360 M10 30.00 100.00 40.00 0.00 359 M11 30.00 85.00 40.00 0.00 358 M12 30.00 70.00 40.00 0.00 357 M13 30.00 55.00 40.00 0.00 356 M14 30.00 40.00 40.00 0.00 355 M15 30.00 30.00 40.00 0.00 354 M16 30.00 20.00 40.00 0.00 353 M17 30.00 10.00 40.00 0.00 352 M18 30.00 0.00 40.00 0.00 279 M19 30.00 100.00 30.00 0.00 278 M20 30.00 85.00 30.00 0.00 277 M21 30.00 70.00 30.00 0.00 276 M22 30.00 55.00 30.00 0.00 275 M23 30.00 40.00 30.00 0.00 274 M24 30.00 30.00 30.00 0.00 273 M25 30.00 20.00 30.00 0.00 272 M26 30.00 10.00 30.00 0.00 271 M27 30.00 0.00 30.00 0.00 807 M28 0.00 100.00 20.00 20.00 806 M29 0.00 70.00 20.00 20.00 805 M30 0.00 40.00 20.00 20.00 804 M31 0.00 20.00 20.00 20.00 803 M32 0.00 10.00 20.00 20.00 802 M33 0.00 0.00 20.00 20.00 450 N1 40.00 100.00 55.00 0.00 449 N2 40.00 85.00 55.00 0.00 448 N3 40.00 70.00 55.00 0.00 447 N4 40.00 55.00 55.00 0.00 446 N5 40.00 40.00 55.00 0.00 445 N6 40.00 30.00 55.00 0.00 444 N7 40.00 20.00 55.00 0.00 443 N8 40.00 10.00 55.00 0.00 442 N9 40.00 0.00 55.00 0.00 369 N10 40.00 100.00 40.00 0.00 368 N11 40.00 85.00 40.00 0.00 367 N12 40.00 70.00 40.00 0.00 366 N13 40.00 55.00 40.00 0.00 365 N14 40.00 40.00 40.00 0.00 364 N15 40.00 30.00 40.00 0.00 363 N16 40.00 20.00 40.00 0.00 362 N17 40.00 10.00 40.00 0.00 361 N18 40.00 0.00 40.00 0.00 288 N19 40.00 100.00 30.00 0.00 287 N20 40.00 85.00 30.00 0.00 286 N21 40.00 70.00 30.00 0.00 285 N22 40.00 55.00 30.00 0.00 284 N23 40.00 40.00 30.00 0.00 283 N24 40.00 30.00 30.00 0.00 282 N25 40.00 20.00 30.00 0.00 281 N26 40.00 10.00 30.00 0.00 280 N27 40.00 0.00 30.00 0.00 813 N28 10.00 100.00 20.00 20.00 812 N29 10.00 70.00 20.00 20.00 811 N30 10.00 40.00 20.00 20.00 810 N31 10.00 20.00 20.00 20.00 809 N32 10.00 10.00 20.00 20.00 808 N33 10.00 0.00 20.00 20.00 459 O1 55.00 100.00 55.00 0.00 458 O2 55.00 85.00 55.00 0.00 457 O3 55.00 70.00 55.00 0.00 456 O4 55.00 55.00 55.00 0.00 455 O5 55.00 40.00 55.00 0.00 454 O6 55.00 30.00 55.00 0.00 453 O7 55.00 20.00 55.00 0.00 452 O8 55.00 10.00 55.00 0.00 451 O9 55.00 0.00 55.00 0.00 378 O10 55.00 100.00 40.00 0.00 377 O11 55.00 85.00 40.00 0.00 376 O12 55.00 70.00 40.00 0.00 375 O13 55.00 55.00 40.00 0.00 374 O14 55.00 40.00 40.00 0.00 373 O15 55.00 30.00 40.00 0.00 372 O16 55.00 20.00 40.00 0.00 371 O17 55.00 10.00 40.00 0.00 370 O18 55.00 0.00 40.00 0.00 297 O19 55.00 100.00 30.00 0.00 296 O20 55.00 85.00 30.00 0.00 295 O21 55.00 70.00 30.00 0.00 294 O22 55.00 55.00 30.00 0.00 293 O23 55.00 40.00 30.00 0.00 292 O24 55.00 30.00 30.00 0.00 291 O25 55.00 20.00 30.00 0.00 290 O26 55.00 10.00 30.00 0.00 289 O27 55.00 0.00 30.00 0.00 819 O28 20.00 100.00 20.00 20.00 818 O29 20.00 70.00 20.00 20.00 817 O30 20.00 40.00 20.00 20.00 816 O31 20.00 20.00 20.00 20.00 815 O32 20.00 10.00 20.00 20.00 814 O33 20.00 0.00 20.00 20.00 468 P1 70.00 100.00 55.00 0.00 467 P2 70.00 85.00 55.00 0.00 466 P3 70.00 70.00 55.00 0.00 465 P4 70.00 55.00 55.00 0.00 464 P5 70.00 40.00 55.00 0.00 463 P6 70.00 30.00 55.00 0.00 462 P7 70.00 20.00 55.00 0.00 461 P8 70.00 10.00 55.00 0.00 460 P9 70.00 0.00 55.00 0.00 387 P10 70.00 100.00 40.00 0.00 386 P11 70.00 85.00 40.00 0.00 385 P12 70.00 70.00 40.00 0.00 384 P13 70.00 55.00 40.00 0.00 383 P14 70.00 40.00 40.00 0.00 382 P15 70.00 30.00 40.00 0.00 381 P16 70.00 20.00 40.00 0.00 380 P17 70.00 10.00 40.00 0.00 379 P18 70.00 0.00 40.00 0.00 306 P19 70.00 100.00 30.00 0.00 305 P20 70.00 85.00 30.00 0.00 304 P21 70.00 70.00 30.00 0.00 303 P22 70.00 55.00 30.00 0.00 302 P23 70.00 40.00 30.00 0.00 301 P24 70.00 30.00 30.00 0.00 300 P25 70.00 20.00 30.00 0.00 299 P26 70.00 10.00 30.00 0.00 298 P27 70.00 0.00 30.00 0.00 825 P28 40.00 100.00 20.00 20.00 824 P29 40.00 70.00 20.00 20.00 823 P30 40.00 40.00 20.00 20.00 822 P31 40.00 20.00 20.00 20.00 821 P32 40.00 10.00 20.00 20.00 820 P33 40.00 0.00 20.00 20.00 477 Q1 85.00 100.00 55.00 0.00 476 Q2 85.00 85.00 55.00 0.00 475 Q3 85.00 70.00 55.00 0.00 474 Q4 85.00 55.00 55.00 0.00 473 Q5 85.00 40.00 55.00 0.00 472 Q6 85.00 30.00 55.00 0.00 471 Q7 85.00 20.00 55.00 0.00 470 Q8 85.00 10.00 55.00 0.00 469 Q9 85.00 0.00 55.00 0.00 396 Q10 85.00 100.00 40.00 0.00 395 Q11 85.00 85.00 40.00 0.00 394 Q12 85.00 70.00 40.00 0.00 393 Q13 85.00 55.00 40.00 0.00 392 Q14 85.00 40.00 40.00 0.00 391 Q15 85.00 30.00 40.00 0.00 390 Q16 85.00 20.00 40.00 0.00 389 Q17 85.00 10.00 40.00 0.00 388 Q18 85.00 0.00 40.00 0.00 315 Q19 85.00 100.00 30.00 0.00 314 Q20 85.00 85.00 30.00 0.00 313 Q21 85.00 70.00 30.00 0.00 312 Q22 85.00 55.00 30.00 0.00 311 Q23 85.00 40.00 30.00 0.00 310 Q24 85.00 30.00 30.00 0.00 309 Q25 85.00 20.00 30.00 0.00 308 Q26 85.00 10.00 30.00 0.00 307 Q27 85.00 0.00 30.00 0.00 831 Q28 70.00 100.00 20.00 20.00 830 Q29 70.00 70.00 20.00 20.00 829 Q30 70.00 40.00 20.00 20.00 828 Q31 70.00 20.00 20.00 20.00 827 Q32 70.00 10.00 20.00 20.00 826 Q33 70.00 0.00 20.00 20.00 486 R1 100.00 100.00 55.00 0.00 485 R2 100.00 85.00 55.00 0.00 484 R3 100.00 70.00 55.00 0.00 483 R4 100.00 55.00 55.00 0.00 482 R5 100.00 40.00 55.00 0.00 481 R6 100.00 30.00 55.00 0.00 480 R7 100.00 20.00 55.00 0.00 479 R8 100.00 10.00 55.00 0.00 478 R9 100.00 0.00 55.00 0.00 405 R10 100.00 100.00 40.00 0.00 404 R11 100.00 85.00 40.00 0.00 403 R12 100.00 70.00 40.00 0.00 402 R13 100.00 55.00 40.00 0.00 401 R14 100.00 40.00 40.00 0.00 400 R15 100.00 30.00 40.00 0.00 399 R16 100.00 20.00 40.00 0.00 398 R17 100.00 10.00 40.00 0.00 397 R18 100.00 0.00 40.00 0.00 324 R19 100.00 100.00 30.00 0.00 323 R20 100.00 85.00 30.00 0.00 322 R21 100.00 70.00 30.00 0.00 321 R22 100.00 55.00 30.00 0.00 320 R23 100.00 40.00 30.00 0.00 319 R24 100.00 30.00 30.00 0.00 318 R25 100.00 20.00 30.00 0.00 317 R26 100.00 10.00 30.00 0.00 316 R27 100.00 0.00 30.00 0.00 837 R28 100.00 100.00 20.00 20.00 836 R29 100.00 70.00 20.00 20.00 835 R30 100.00 40.00 20.00 20.00 834 R31 100.00 20.00 20.00 20.00 833 R32 100.00 10.00 20.00 20.00 832 R33 100.00 0.00 20.00 20.00 657 S1 0.00 100.00 100.00 0.00 656 S2 0.00 85.00 100.00 0.00 655 S3 0.00 70.00 100.00 0.00 654 S4 0.00 55.00 100.00 0.00 653 S5 0.00 40.00 100.00 0.00 652 S6 0.00 30.00 100.00 0.00 651 S7 0.00 20.00 100.00 0.00 650 S8 0.00 10.00 100.00 0.00 649 S9 0.00 0.00 100.00 0.00 576 S10 0.00 100.00 85.00 0.00 575 S11 0.00 85.00 85.00 0.00 574 S12 0.00 70.00 85.00 0.00 573 S13 0.00 55.00 85.00 0.00 572 S14 0.00 40.00 85.00 0.00 571 S15 0.00 30.00 85.00 0.00 570 S16 0.00 20.00 85.00 0.00 569 S17 0.00 10.00 85.00 0.00 568 S18 0.00 0.00 85.00 0.00 495 S19 0.00 100.00 70.00 0.00 494 S20 0.00 85.00 70.00 0.00 493 S21 0.00 70.00 70.00 0.00 492 S22 0.00 55.00 70.00 0.00 491 S23 0.00 40.00 70.00 0.00 490 S24 0.00 30.00 70.00 0.00 489 S25 0.00 20.00 70.00 0.00 488 S26 0.00 10.00 70.00 0.00 487 S27 0.00 0.00 70.00 0.00 843 S28 0.00 100.00 40.00 20.00 842 S29 0.00 70.00 40.00 20.00 841 S30 0.00 40.00 40.00 20.00 840 S31 0.00 20.00 40.00 20.00 839 S32 0.00 10.00 40.00 20.00 838 S33 0.00 0.00 40.00 20.00 666 T1 10.00 100.00 100.00 0.00 665 T2 10.00 85.00 100.00 0.00 664 T3 10.00 70.00 100.00 0.00 663 T4 10.00 55.00 100.00 0.00 662 T5 10.00 40.00 100.00 0.00 661 T6 10.00 30.00 100.00 0.00 660 T7 10.00 20.00 100.00 0.00 659 T8 10.00 10.00 100.00 0.00 658 T9 10.00 0.00 100.00 0.00 585 T10 10.00 100.00 85.00 0.00 584 T11 10.00 85.00 85.00 0.00 583 T12 10.00 70.00 85.00 0.00 582 T13 10.00 55.00 85.00 0.00 581 T14 10.00 40.00 85.00 0.00 580 T15 10.00 30.00 85.00 0.00 579 T16 10.00 20.00 85.00 0.00 578 T17 10.00 10.00 85.00 0.00 577 T18 10.00 0.00 85.00 0.00 504 T19 10.00 100.00 70.00 0.00 503 T20 10.00 85.00 70.00 0.00 502 T21 10.00 70.00 70.00 0.00 501 T22 10.00 55.00 70.00 0.00 500 T23 10.00 40.00 70.00 0.00 499 T24 10.00 30.00 70.00 0.00 498 T25 10.00 20.00 70.00 0.00 497 T26 10.00 10.00 70.00 0.00 496 T27 10.00 0.00 70.00 0.00 849 T28 10.00 100.00 40.00 20.00 848 T29 10.00 70.00 40.00 20.00 847 T30 10.00 40.00 40.00 20.00 846 T31 10.00 20.00 40.00 20.00 845 T32 10.00 10.00 40.00 20.00 844 T33 10.00 0.00 40.00 20.00 675 U1 20.00 100.00 100.00 0.00 674 U2 20.00 85.00 100.00 0.00 673 U3 20.00 70.00 100.00 0.00 672 U4 20.00 55.00 100.00 0.00 671 U5 20.00 40.00 100.00 0.00 670 U6 20.00 30.00 100.00 0.00 669 U7 20.00 20.00 100.00 0.00 668 U8 20.00 10.00 100.00 0.00 667 U9 20.00 0.00 100.00 0.00 594 U10 20.00 100.00 85.00 0.00 593 U11 20.00 85.00 85.00 0.00 592 U12 20.00 70.00 85.00 0.00 591 U13 20.00 55.00 85.00 0.00 590 U14 20.00 40.00 85.00 0.00 589 U15 20.00 30.00 85.00 0.00 588 U16 20.00 20.00 85.00 0.00 587 U17 20.00 10.00 85.00 0.00 586 U18 20.00 0.00 85.00 0.00 513 U19 20.00 100.00 70.00 0.00 512 U20 20.00 85.00 70.00 0.00 511 U21 20.00 70.00 70.00 0.00 510 U22 20.00 55.00 70.00 0.00 509 U23 20.00 40.00 70.00 0.00 508 U24 20.00 30.00 70.00 0.00 507 U25 20.00 20.00 70.00 0.00 506 U26 20.00 10.00 70.00 0.00 505 U27 20.00 0.00 70.00 0.00 855 U28 20.00 100.00 40.00 20.00 854 U29 20.00 70.00 40.00 20.00 853 U30 20.00 40.00 40.00 20.00 852 U31 20.00 20.00 40.00 20.00 851 U32 20.00 10.00 40.00 20.00 850 U33 20.00 0.00 40.00 20.00 684 V1 30.00 100.00 100.00 0.00 683 V2 30.00 85.00 100.00 0.00 682 V3 30.00 70.00 100.00 0.00 681 V4 30.00 55.00 100.00 0.00 680 V5 30.00 40.00 100.00 0.00 679 V6 30.00 30.00 100.00 0.00 678 V7 30.00 20.00 100.00 0.00 677 V8 30.00 10.00 100.00 0.00 676 V9 30.00 0.00 100.00 0.00 603 V10 30.00 100.00 85.00 0.00 602 V11 30.00 85.00 85.00 0.00 601 V12 30.00 70.00 85.00 0.00 600 V13 30.00 55.00 85.00 0.00 599 V14 30.00 40.00 85.00 0.00 598 V15 30.00 30.00 85.00 0.00 597 V16 30.00 20.00 85.00 0.00 596 V17 30.00 10.00 85.00 0.00 595 V18 30.00 0.00 85.00 0.00 522 V19 30.00 100.00 70.00 0.00 521 V20 30.00 85.00 70.00 0.00 520 V21 30.00 70.00 70.00 0.00 519 V22 30.00 55.00 70.00 0.00 518 V23 30.00 40.00 70.00 0.00 517 V24 30.00 30.00 70.00 0.00 516 V25 30.00 20.00 70.00 0.00 515 V26 30.00 10.00 70.00 0.00 514 V27 30.00 0.00 70.00 0.00 861 V28 40.00 100.00 40.00 20.00 860 V29 40.00 70.00 40.00 20.00 859 V30 40.00 40.00 40.00 20.00 858 V31 40.00 20.00 40.00 20.00 857 V32 40.00 10.00 40.00 20.00 856 V33 40.00 0.00 40.00 20.00 693 W1 40.00 100.00 100.00 0.00 692 W2 40.00 85.00 100.00 0.00 691 W3 40.00 70.00 100.00 0.00 690 W4 40.00 55.00 100.00 0.00 689 W5 40.00 40.00 100.00 0.00 688 W6 40.00 30.00 100.00 0.00 687 W7 40.00 20.00 100.00 0.00 686 W8 40.00 10.00 100.00 0.00 685 W9 40.00 0.00 100.00 0.00 612 W10 40.00 100.00 85.00 0.00 611 W11 40.00 85.00 85.00 0.00 610 W12 40.00 70.00 85.00 0.00 609 W13 40.00 55.00 85.00 0.00 608 W14 40.00 40.00 85.00 0.00 607 W15 40.00 30.00 85.00 0.00 606 W16 40.00 20.00 85.00 0.00 605 W17 40.00 10.00 85.00 0.00 604 W18 40.00 0.00 85.00 0.00 531 W19 40.00 100.00 70.00 0.00 530 W20 40.00 85.00 70.00 0.00 529 W21 40.00 70.00 70.00 0.00 528 W22 40.00 55.00 70.00 0.00 527 W23 40.00 40.00 70.00 0.00 526 W24 40.00 30.00 70.00 0.00 525 W25 40.00 20.00 70.00 0.00 524 W26 40.00 10.00 70.00 0.00 523 W27 40.00 0.00 70.00 0.00 867 W28 70.00 100.00 40.00 20.00 866 W29 70.00 70.00 40.00 20.00 865 W30 70.00 40.00 40.00 20.00 864 W31 70.00 20.00 40.00 20.00 863 W32 70.00 10.00 40.00 20.00 862 W33 70.00 0.00 40.00 20.00 702 X1 55.00 100.00 100.00 0.00 701 X2 55.00 85.00 100.00 0.00 700 X3 55.00 70.00 100.00 0.00 699 X4 55.00 55.00 100.00 0.00 698 X5 55.00 40.00 100.00 0.00 697 X6 55.00 30.00 100.00 0.00 696 X7 55.00 20.00 100.00 0.00 695 X8 55.00 10.00 100.00 0.00 694 X9 55.00 0.00 100.00 0.00 621 X10 55.00 100.00 85.00 0.00 620 X11 55.00 85.00 85.00 0.00 619 X12 55.00 70.00 85.00 0.00 618 X13 55.00 55.00 85.00 0.00 617 X14 55.00 40.00 85.00 0.00 616 X15 55.00 30.00 85.00 0.00 615 X16 55.00 20.00 85.00 0.00 614 X17 55.00 10.00 85.00 0.00 613 X18 55.00 0.00 85.00 0.00 540 X19 55.00 100.00 70.00 0.00 539 X20 55.00 85.00 70.00 0.00 538 X21 55.00 70.00 70.00 0.00 537 X22 55.00 55.00 70.00 0.00 536 X23 55.00 40.00 70.00 0.00 535 X24 55.00 30.00 70.00 0.00 534 X25 55.00 20.00 70.00 0.00 533 X26 55.00 10.00 70.00 0.00 532 X27 55.00 0.00 70.00 0.00 873 X28 100.00 100.00 40.00 20.00 872 X29 100.00 70.00 40.00 20.00 871 X30 100.00 40.00 40.00 20.00 870 X31 100.00 20.00 40.00 20.00 869 X32 100.00 10.00 40.00 20.00 868 X33 100.00 0.00 40.00 20.00 711 Y1 70.00 100.00 100.00 0.00 710 Y2 70.00 85.00 100.00 0.00 709 Y3 70.00 70.00 100.00 0.00 708 Y4 70.00 55.00 100.00 0.00 707 Y5 70.00 40.00 100.00 0.00 706 Y6 70.00 30.00 100.00 0.00 705 Y7 70.00 20.00 100.00 0.00 704 Y8 70.00 10.00 100.00 0.00 703 Y9 70.00 0.00 100.00 0.00 630 Y10 70.00 100.00 85.00 0.00 629 Y11 70.00 85.00 85.00 0.00 628 Y12 70.00 70.00 85.00 0.00 627 Y13 70.00 55.00 85.00 0.00 626 Y14 70.00 40.00 85.00 0.00 625 Y15 70.00 30.00 85.00 0.00 624 Y16 70.00 20.00 85.00 0.00 623 Y17 70.00 10.00 85.00 0.00 622 Y18 70.00 0.00 85.00 0.00 549 Y19 70.00 100.00 70.00 0.00 548 Y20 70.00 85.00 70.00 0.00 547 Y21 70.00 70.00 70.00 0.00 546 Y22 70.00 55.00 70.00 0.00 545 Y23 70.00 40.00 70.00 0.00 544 Y24 70.00 30.00 70.00 0.00 543 Y25 70.00 20.00 70.00 0.00 542 Y26 70.00 10.00 70.00 0.00 541 Y27 70.00 0.00 70.00 0.00 879 Y28 0.00 100.00 70.00 20.00 878 Y29 0.00 70.00 70.00 20.00 877 Y30 0.00 40.00 70.00 20.00 876 Y31 0.00 20.00 70.00 20.00 875 Y32 0.00 10.00 70.00 20.00 874 Y33 0.00 0.00 70.00 20.00 720 Z1 85.00 100.00 100.00 0.00 719 Z2 85.00 85.00 100.00 0.00 718 Z3 85.00 70.00 100.00 0.00 717 Z4 85.00 55.00 100.00 0.00 716 Z5 85.00 40.00 100.00 0.00 715 Z6 85.00 30.00 100.00 0.00 714 Z7 85.00 20.00 100.00 0.00 713 Z8 85.00 10.00 100.00 0.00 712 Z9 85.00 0.00 100.00 0.00 639 Z10 85.00 100.00 85.00 0.00 638 Z11 85.00 85.00 85.00 0.00 637 Z12 85.00 70.00 85.00 0.00 636 Z13 85.00 55.00 85.00 0.00 635 Z14 85.00 40.00 85.00 0.00 634 Z15 85.00 30.00 85.00 0.00 633 Z16 85.00 20.00 85.00 0.00 632 Z17 85.00 10.00 85.00 0.00 631 Z18 85.00 0.00 85.00 0.00 558 Z19 85.00 100.00 70.00 0.00 557 Z20 85.00 85.00 70.00 0.00 556 Z21 85.00 70.00 70.00 0.00 555 Z22 85.00 55.00 70.00 0.00 554 Z23 85.00 40.00 70.00 0.00 553 Z24 85.00 30.00 70.00 0.00 552 Z25 85.00 20.00 70.00 0.00 551 Z26 85.00 10.00 70.00 0.00 550 Z27 85.00 0.00 70.00 0.00 885 Z28 10.00 100.00 70.00 20.00 884 Z29 10.00 70.00 70.00 20.00 883 Z30 10.00 40.00 70.00 20.00 882 Z31 10.00 20.00 70.00 20.00 881 Z32 10.00 10.00 70.00 20.00 880 Z33 10.00 0.00 70.00 20.00 729 2A1 100.00 100.00 100.00 0.00 728 2A2 100.00 85.00 100.00 0.00 727 2A3 100.00 70.00 100.00 0.00 726 2A4 100.00 55.00 100.00 0.00 725 2A5 100.00 40.00 100.00 0.00 724 2A6 100.00 30.00 100.00 0.00 723 2A7 100.00 20.00 100.00 0.00 722 2A8 100.00 10.00 100.00 0.00 721 2A9 100.00 0.00 100.00 0.00 648 2A10 100.00 100.00 85.00 0.00 647 2A11 100.00 85.00 85.00 0.00 646 2A12 100.00 70.00 85.00 0.00 645 2A13 100.00 55.00 85.00 0.00 644 2A14 100.00 40.00 85.00 0.00 643 2A15 100.00 30.00 85.00 0.00 642 2A16 100.00 20.00 85.00 0.00 641 2A17 100.00 10.00 85.00 0.00 640 2A18 100.00 0.00 85.00 0.00 567 2A19 100.00 100.00 70.00 0.00 566 2A20 100.00 85.00 70.00 0.00 565 2A21 100.00 70.00 70.00 0.00 564 2A22 100.00 55.00 70.00 0.00 563 2A23 100.00 40.00 70.00 0.00 562 2A24 100.00 30.00 70.00 0.00 561 2A25 100.00 20.00 70.00 0.00 560 2A26 100.00 10.00 70.00 0.00 559 2A27 100.00 0.00 70.00 0.00 891 2A28 20.00 100.00 70.00 20.00 890 2A29 20.00 70.00 70.00 20.00 889 2A30 20.00 40.00 70.00 20.00 888 2A31 20.00 20.00 70.00 20.00 887 2A32 20.00 10.00 70.00 20.00 886 2A33 20.00 0.00 70.00 20.00 1050 2B1 0.00 100.00 100.00 40.00 1049 2B2 0.00 70.00 100.00 40.00 1048 2B3 0.00 40.00 100.00 40.00 1047 2B4 0.00 20.00 100.00 40.00 1046 2B5 0.00 0.00 100.00 40.00 1025 2B6 0.00 100.00 70.00 40.00 1024 2B7 0.00 70.00 70.00 40.00 1023 2B8 0.00 40.00 70.00 40.00 1022 2B9 0.00 20.00 70.00 40.00 1021 2B10 0.00 0.00 70.00 40.00 1000 2B11 0.00 100.00 40.00 40.00 999 2B12 0.00 70.00 40.00 40.00 998 2B13 0.00 40.00 40.00 40.00 997 2B14 0.00 20.00 40.00 40.00 996 2B15 0.00 0.00 40.00 40.00 975 2B16 0.00 100.00 20.00 40.00 974 2B17 0.00 70.00 20.00 40.00 973 2B18 0.00 40.00 20.00 40.00 972 2B19 0.00 20.00 20.00 40.00 971 2B20 0.00 0.00 20.00 40.00 950 2B21 0.00 100.00 0.00 40.00 949 2B22 0.00 70.00 0.00 40.00 948 2B23 0.00 40.00 0.00 40.00 947 2B24 0.00 20.00 0.00 40.00 946 2B25 0.00 0.00 0.00 40.00 1405 2B26 100.00 0.00 0.00 70.00 1399 2B27 100.00 85.00 85.00 100.00 897 2B28 40.00 100.00 70.00 20.00 896 2B29 40.00 70.00 70.00 20.00 895 2B30 40.00 40.00 70.00 20.00 894 2B31 40.00 20.00 70.00 20.00 893 2B32 40.00 10.00 70.00 20.00 892 2B33 40.00 0.00 70.00 20.00 1055 2C1 20.00 100.00 100.00 40.00 1054 2C2 20.00 70.00 100.00 40.00 1053 2C3 20.00 40.00 100.00 40.00 1052 2C4 20.00 20.00 100.00 40.00 1051 2C5 20.00 0.00 100.00 40.00 1030 2C6 20.00 100.00 70.00 40.00 1029 2C7 20.00 70.00 70.00 40.00 1028 2C8 20.00 40.00 70.00 40.00 1027 2C9 20.00 20.00 70.00 40.00 1026 2C10 20.00 0.00 70.00 40.00 1005 2C11 20.00 100.00 40.00 40.00 1004 2C12 20.00 70.00 40.00 40.00 1003 2C13 20.00 40.00 40.00 40.00 1002 2C14 20.00 20.00 40.00 40.00 1001 2C15 20.00 0.00 40.00 40.00 980 2C16 20.00 100.00 20.00 40.00 979 2C17 20.00 70.00 20.00 40.00 978 2C18 20.00 40.00 20.00 40.00 977 2C19 20.00 20.00 20.00 40.00 976 2C20 20.00 0.00 20.00 40.00 955 2C21 20.00 100.00 0.00 40.00 954 2C22 20.00 70.00 0.00 40.00 953 2C23 20.00 40.00 0.00 40.00 952 2C24 20.00 20.00 0.00 40.00 951 2C25 20.00 0.00 0.00 40.00 1406 2C26 0.00 100.00 0.00 70.00 1393 2C27 100.00 85.00 85.00 80.00 903 2C28 70.00 100.00 70.00 20.00 902 2C29 70.00 70.00 70.00 20.00 901 2C30 70.00 40.00 70.00 20.00 900 2C31 70.00 20.00 70.00 20.00 899 2C32 70.00 10.00 70.00 20.00 898 2C33 70.00 0.00 70.00 20.00 1060 2D1 40.00 100.00 100.00 40.00 1059 2D2 40.00 70.00 100.00 40.00 1058 2D3 40.00 40.00 100.00 40.00 1057 2D4 40.00 20.00 100.00 40.00 1056 2D5 40.00 0.00 100.00 40.00 1035 2D6 40.00 100.00 70.00 40.00 1034 2D7 40.00 70.00 70.00 40.00 1033 2D8 40.00 40.00 70.00 40.00 1032 2D9 40.00 20.00 70.00 40.00 1031 2D10 40.00 0.00 70.00 40.00 1010 2D11 40.00 100.00 40.00 40.00 1009 2D12 40.00 70.00 40.00 40.00 1008 2D13 40.00 40.00 40.00 40.00 1007 2D14 40.00 20.00 40.00 40.00 1006 2D15 40.00 0.00 40.00 40.00 985 2D16 40.00 100.00 20.00 40.00 984 2D17 40.00 70.00 20.00 40.00 983 2D18 40.00 40.00 20.00 40.00 982 2D19 40.00 20.00 20.00 40.00 981 2D20 40.00 0.00 20.00 40.00 960 2D21 40.00 100.00 0.00 40.00 959 2D22 40.00 70.00 0.00 40.00 958 2D23 40.00 40.00 0.00 40.00 957 2D24 40.00 20.00 0.00 40.00 956 2D25 40.00 0.00 0.00 40.00 1407 2D26 0.00 0.00 100.00 70.00 1387 2D27 100.00 85.00 85.00 60.00 909 2D28 100.00 100.00 70.00 20.00 908 2D29 100.00 70.00 70.00 20.00 907 2D30 100.00 40.00 70.00 20.00 906 2D31 100.00 20.00 70.00 20.00 905 2D32 100.00 10.00 70.00 20.00 904 2D33 100.00 0.00 70.00 20.00 1065 2E1 70.00 100.00 100.00 40.00 1064 2E2 70.00 70.00 100.00 40.00 1063 2E3 70.00 40.00 100.00 40.00 1062 2E4 70.00 20.00 100.00 40.00 1061 2E5 70.00 0.00 100.00 40.00 1040 2E6 70.00 100.00 70.00 40.00 1039 2E7 70.00 70.00 70.00 40.00 1038 2E8 70.00 40.00 70.00 40.00 1037 2E9 70.00 20.00 70.00 40.00 1036 2E10 70.00 0.00 70.00 40.00 1015 2E11 70.00 100.00 40.00 40.00 1014 2E12 70.00 70.00 40.00 40.00 1013 2E13 70.00 40.00 40.00 40.00 1012 2E14 70.00 20.00 40.00 40.00 1011 2E15 70.00 0.00 40.00 40.00 990 2E16 70.00 100.00 20.00 40.00 989 2E17 70.00 70.00 20.00 40.00 988 2E18 70.00 40.00 20.00 40.00 987 2E19 70.00 20.00 20.00 40.00 986 2E20 70.00 0.00 20.00 40.00 965 2E21 70.00 100.00 0.00 40.00 964 2E22 70.00 70.00 0.00 40.00 963 2E23 70.00 40.00 0.00 40.00 962 2E24 70.00 20.00 0.00 40.00 961 2E25 70.00 0.00 0.00 40.00 1408 2E26 100.00 100.00 0.00 70.00 1400 2E27 80.00 65.00 65.00 100.00 915 2E28 0.00 100.00 100.00 20.00 914 2E29 0.00 70.00 100.00 20.00 913 2E30 0.00 40.00 100.00 20.00 912 2E31 0.00 20.00 100.00 20.00 911 2E32 0.00 10.00 100.00 20.00 910 2E33 0.00 0.00 100.00 20.00 1070 2F1 100.00 100.00 100.00 40.00 1069 2F2 100.00 70.00 100.00 40.00 1068 2F3 100.00 40.00 100.00 40.00 1067 2F4 100.00 20.00 100.00 40.00 1066 2F5 100.00 0.00 100.00 40.00 1045 2F6 100.00 100.00 70.00 40.00 1044 2F7 100.00 70.00 70.00 40.00 1043 2F8 100.00 40.00 70.00 40.00 1042 2F9 100.00 20.00 70.00 40.00 1041 2F10 100.00 0.00 70.00 40.00 1020 2F11 100.00 100.00 40.00 40.00 1019 2F12 100.00 70.00 40.00 40.00 1018 2F13 100.00 40.00 40.00 40.00 1017 2F14 100.00 20.00 40.00 40.00 1016 2F15 100.00 0.00 40.00 40.00 995 2F16 100.00 100.00 20.00 40.00 994 2F17 100.00 70.00 20.00 40.00 993 2F18 100.00 40.00 20.00 40.00 992 2F19 100.00 20.00 20.00 40.00 991 2F20 100.00 0.00 20.00 40.00 970 2F21 100.00 100.00 0.00 40.00 969 2F22 100.00 70.00 0.00 40.00 968 2F23 100.00 40.00 0.00 40.00 967 2F24 100.00 20.00 0.00 40.00 966 2F25 100.00 0.00 0.00 40.00 1409 2F26 100.00 0.00 100.00 70.00 1394 2F27 80.00 65.00 65.00 80.00 921 2F28 10.00 100.00 100.00 20.00 920 2F29 10.00 70.00 100.00 20.00 919 2F30 10.00 40.00 100.00 20.00 918 2F31 10.00 20.00 100.00 20.00 917 2F32 10.00 10.00 100.00 20.00 916 2F33 10.00 0.00 100.00 20.00 1175 2G1 0.00 100.00 100.00 60.00 1174 2G2 0.00 70.00 100.00 60.00 1173 2G3 0.00 40.00 100.00 60.00 1172 2G4 0.00 20.00 100.00 60.00 1171 2G5 0.00 0.00 100.00 60.00 1150 2G6 0.00 100.00 70.00 60.00 1149 2G7 0.00 70.00 70.00 60.00 1148 2G8 0.00 40.00 70.00 60.00 1147 2G9 0.00 20.00 70.00 60.00 1146 2G10 0.00 0.00 70.00 60.00 1125 2G11 0.00 100.00 40.00 60.00 1124 2G12 0.00 70.00 40.00 60.00 1123 2G13 0.00 40.00 40.00 60.00 1122 2G14 0.00 20.00 40.00 60.00 1121 2G15 0.00 0.00 40.00 60.00 1100 2G16 0.00 100.00 20.00 60.00 1099 2G17 0.00 70.00 20.00 60.00 1098 2G18 0.00 40.00 20.00 60.00 1097 2G19 0.00 20.00 20.00 60.00 1096 2G20 0.00 0.00 20.00 60.00 1075 2G21 0.00 100.00 0.00 60.00 1074 2G22 0.00 70.00 0.00 60.00 1073 2G23 0.00 40.00 0.00 60.00 1072 2G24 0.00 20.00 0.00 60.00 1071 2G25 0.00 0.00 0.00 60.00 1410 2G26 0.00 100.00 100.00 70.00 1388 2G27 80.00 65.00 65.00 60.00 927 2G28 20.00 100.00 100.00 20.00 926 2G29 20.00 70.00 100.00 20.00 925 2G30 20.00 40.00 100.00 20.00 924 2G31 20.00 20.00 100.00 20.00 923 2G32 20.00 10.00 100.00 20.00 922 2G33 20.00 0.00 100.00 20.00 1180 2H1 20.00 100.00 100.00 60.00 1179 2H2 20.00 70.00 100.00 60.00 1178 2H3 20.00 40.00 100.00 60.00 1177 2H4 20.00 20.00 100.00 60.00 1176 2H5 20.00 0.00 100.00 60.00 1155 2H6 20.00 100.00 70.00 60.00 1154 2H7 20.00 70.00 70.00 60.00 1153 2H8 20.00 40.00 70.00 60.00 1152 2H9 20.00 20.00 70.00 60.00 1151 2H10 20.00 0.00 70.00 60.00 1130 2H11 20.00 100.00 40.00 60.00 1129 2H12 20.00 70.00 40.00 60.00 1128 2H13 20.00 40.00 40.00 60.00 1127 2H14 20.00 20.00 40.00 60.00 1126 2H15 20.00 0.00 40.00 60.00 1105 2H16 20.00 100.00 20.00 60.00 1104 2H17 20.00 70.00 20.00 60.00 1103 2H18 20.00 40.00 20.00 60.00 1102 2H19 20.00 20.00 20.00 60.00 1101 2H20 20.00 0.00 20.00 60.00 1080 2H21 20.00 100.00 0.00 60.00 1079 2H22 20.00 70.00 0.00 60.00 1078 2H23 20.00 40.00 0.00 60.00 1077 2H24 20.00 20.00 0.00 60.00 1076 2H25 20.00 0.00 0.00 60.00 1411 2H26 40.00 40.00 0.00 70.00 1382 2H27 80.00 65.00 65.00 40.00 933 2H28 40.00 100.00 100.00 20.00 932 2H29 40.00 70.00 100.00 20.00 931 2H30 40.00 40.00 100.00 20.00 930 2H31 40.00 20.00 100.00 20.00 929 2H32 40.00 10.00 100.00 20.00 928 2H33 40.00 0.00 100.00 20.00 1185 2I1 40.00 100.00 100.00 60.00 1184 2I2 40.00 70.00 100.00 60.00 1183 2I3 40.00 40.00 100.00 60.00 1182 2I4 40.00 20.00 100.00 60.00 1181 2I5 40.00 0.00 100.00 60.00 1160 2I6 40.00 100.00 70.00 60.00 1159 2I7 40.00 70.00 70.00 60.00 1158 2I8 40.00 40.00 70.00 60.00 1157 2I9 40.00 20.00 70.00 60.00 1156 2I10 40.00 0.00 70.00 60.00 1135 2I11 40.00 100.00 40.00 60.00 1134 2I12 40.00 70.00 40.00 60.00 1133 2I13 40.00 40.00 40.00 60.00 1132 2I14 40.00 20.00 40.00 60.00 1131 2I15 40.00 0.00 40.00 60.00 1110 2I16 40.00 100.00 20.00 60.00 1109 2I17 40.00 70.00 20.00 60.00 1108 2I18 40.00 40.00 20.00 60.00 1107 2I19 40.00 20.00 20.00 60.00 1106 2I20 40.00 0.00 20.00 60.00 1085 2I21 40.00 100.00 0.00 60.00 1084 2I22 40.00 70.00 0.00 60.00 1083 2I23 40.00 40.00 0.00 60.00 1082 2I24 40.00 20.00 0.00 60.00 1081 2I25 40.00 0.00 0.00 60.00 1412 2I26 40.00 0.00 40.00 70.00 1401 2I27 60.00 45.00 45.00 100.00 939 2I28 70.00 100.00 100.00 20.00 938 2I29 70.00 70.00 100.00 20.00 937 2I30 70.00 40.00 100.00 20.00 936 2I31 70.00 20.00 100.00 20.00 935 2I32 70.00 10.00 100.00 20.00 934 2I33 70.00 0.00 100.00 20.00 1190 2J1 70.00 100.00 100.00 60.00 1189 2J2 70.00 70.00 100.00 60.00 1188 2J3 70.00 40.00 100.00 60.00 1187 2J4 70.00 20.00 100.00 60.00 1186 2J5 70.00 0.00 100.00 60.00 1165 2J6 70.00 100.00 70.00 60.00 1164 2J7 70.00 70.00 70.00 60.00 1163 2J8 70.00 40.00 70.00 60.00 1162 2J9 70.00 20.00 70.00 60.00 1161 2J10 70.00 0.00 70.00 60.00 1140 2J11 70.00 100.00 40.00 60.00 1139 2J12 70.00 70.00 40.00 60.00 1138 2J13 70.00 40.00 40.00 60.00 1137 2J14 70.00 20.00 40.00 60.00 1136 2J15 70.00 0.00 40.00 60.00 1115 2J16 70.00 100.00 20.00 60.00 1114 2J17 70.00 70.00 20.00 60.00 1113 2J18 70.00 40.00 20.00 60.00 1112 2J19 70.00 20.00 20.00 60.00 1111 2J20 70.00 0.00 20.00 60.00 1090 2J21 70.00 100.00 0.00 60.00 1089 2J22 70.00 70.00 0.00 60.00 1088 2J23 70.00 40.00 0.00 60.00 1087 2J24 70.00 20.00 0.00 60.00 1086 2J25 70.00 0.00 0.00 60.00 1413 2J26 0.00 40.00 40.00 70.00 1395 2J27 60.00 45.00 45.00 80.00 945 2J28 100.00 100.00 100.00 20.00 944 2J29 100.00 70.00 100.00 20.00 943 2J30 100.00 40.00 100.00 20.00 942 2J31 100.00 20.00 100.00 20.00 941 2J32 100.00 10.00 100.00 20.00 940 2J33 100.00 0.00 100.00 20.00 1195 2K1 100.00 100.00 100.00 60.00 1194 2K2 100.00 70.00 100.00 60.00 1193 2K3 100.00 40.00 100.00 60.00 1192 2K4 100.00 20.00 100.00 60.00 1191 2K5 100.00 0.00 100.00 60.00 1170 2K6 100.00 100.00 70.00 60.00 1169 2K7 100.00 70.00 70.00 60.00 1168 2K8 100.00 40.00 70.00 60.00 1167 2K9 100.00 20.00 70.00 60.00 1166 2K10 100.00 0.00 70.00 60.00 1145 2K11 100.00 100.00 40.00 60.00 1144 2K12 100.00 70.00 40.00 60.00 1143 2K13 100.00 40.00 40.00 60.00 1142 2K14 100.00 20.00 40.00 60.00 1141 2K15 100.00 0.00 40.00 60.00 1120 2K16 100.00 100.00 20.00 60.00 1119 2K17 100.00 70.00 20.00 60.00 1118 2K18 100.00 40.00 20.00 60.00 1117 2K19 100.00 20.00 20.00 60.00 1116 2K20 100.00 0.00 20.00 60.00 1095 2K21 100.00 100.00 0.00 60.00 1094 2K22 100.00 70.00 0.00 60.00 1093 2K23 100.00 40.00 0.00 60.00 1092 2K24 100.00 20.00 0.00 60.00 1091 2K25 100.00 0.00 0.00 60.00 1367 2K26 0.00 0.00 0.00 0.00 1389 2K27 60.00 45.00 45.00 60.00 1390 2K28 40.00 27.00 27.00 60.00 1397 2K29 20.00 12.00 12.00 80.00 1381 2K30 10.00 6.00 6.00 20.00 1262 2K31 0.00 100.00 0.00 100.00 1261 2K32 0.00 40.00 0.00 100.00 1260 2K33 0.00 0.00 0.00 100.00 1215 2L1 0.00 100.00 40.00 80.00 1214 2L2 0.00 70.00 40.00 80.00 1213 2L3 0.00 40.00 40.00 80.00 1212 2L4 0.00 0.00 40.00 80.00 1199 2L5 0.00 100.00 0.00 80.00 1198 2L6 0.00 70.00 0.00 80.00 1197 2L7 0.00 40.00 0.00 80.00 1196 2L8 0.00 0.00 0.00 80.00 1479 2L9 3.00 40.00 3.00 40.00 1480 2L10 40.00 40.00 3.00 40.00 1481 2L11 3.00 0.00 40.00 40.00 1482 2L12 0.00 3.00 40.00 40.00 1483 2L13 3.00 3.00 40.00 40.00 1484 2L14 40.00 3.00 40.00 40.00 1485 2L15 3.00 40.00 40.00 40.00 1425 2L16 7.00 7.00 0.00 0.00 1426 2L17 7.00 0.00 7.00 0.00 1427 2L18 0.00 7.00 7.00 0.00 1428 2L19 7.00 7.00 7.00 0.00 1429 2L20 7.00 0.00 0.00 7.00 1430 2L21 0.00 7.00 0.00 7.00 1431 2L22 7.00 7.00 0.00 7.00 1432 2L23 0.00 0.00 7.00 7.00 1433 2L24 7.00 0.00 7.00 7.00 1434 2L25 0.00 7.00 7.00 7.00 1435 2L26 7.00 7.00 7.00 7.00 1383 2L27 60.00 45.00 45.00 40.00 1384 2L28 40.00 27.00 27.00 40.00 1391 2L29 20.00 12.00 12.00 60.00 1377 2L30 10.00 6.00 6.00 10.00 1265 2L31 40.00 100.00 0.00 100.00 1264 2L32 40.00 40.00 0.00 100.00 1263 2L33 40.00 0.00 0.00 100.00 1219 2M1 40.00 100.00 40.00 80.00 1218 2M2 40.00 70.00 40.00 80.00 1217 2M3 40.00 40.00 40.00 80.00 1216 2M4 40.00 0.00 40.00 80.00 1203 2M5 40.00 100.00 0.00 80.00 1202 2M6 40.00 70.00 0.00 80.00 1201 2M7 40.00 40.00 0.00 80.00 1200 2M8 40.00 0.00 0.00 80.00 1461 2M9 0.00 3.00 40.00 3.00 1462 2M10 3.00 3.00 40.00 3.00 1463 2M11 40.00 3.00 40.00 3.00 1464 2M12 0.00 40.00 40.00 3.00 1465 2M13 3.00 40.00 40.00 3.00 1466 2M14 40.00 40.00 40.00 3.00 1467 2M15 3.00 0.00 0.00 40.00 1468 2M16 0.00 3.00 0.00 40.00 1469 2M17 3.00 3.00 0.00 40.00 1470 2M18 40.00 3.00 0.00 40.00 1471 2M19 3.00 40.00 0.00 40.00 1472 2M20 0.00 0.00 3.00 40.00 1473 2M21 3.00 0.00 3.00 40.00 1474 2M22 40.00 0.00 3.00 40.00 1475 2M23 0.00 3.00 3.00 40.00 1476 2M24 3.00 3.00 3.00 40.00 1477 2M25 40.00 3.00 3.00 40.00 1478 2M26 0.00 40.00 3.00 40.00 1378 2M27 60.00 45.00 45.00 20.00 1379 2M28 40.00 27.00 27.00 20.00 1385 2M29 20.00 12.00 12.00 40.00 1368 2M30 100.00 85.00 85.00 0.00 1268 2M31 100.00 100.00 0.00 100.00 1267 2M32 100.00 40.00 0.00 100.00 1266 2M33 100.00 0.00 0.00 100.00 1223 2N1 70.00 100.00 40.00 80.00 1222 2N2 70.00 70.00 40.00 80.00 1221 2N3 70.00 40.00 40.00 80.00 1220 2N4 70.00 0.00 40.00 80.00 1207 2N5 70.00 100.00 0.00 80.00 1206 2N6 70.00 70.00 0.00 80.00 1205 2N7 70.00 40.00 0.00 80.00 1204 2N8 70.00 0.00 0.00 80.00 1419 2N9 0.00 3.00 0.00 3.00 1420 2N10 3.00 3.00 0.00 3.00 1449 2N11 40.00 3.00 0.00 3.00 1450 2N12 0.00 40.00 0.00 3.00 1451 2N13 3.00 40.00 0.00 3.00 1452 2N14 40.00 40.00 0.00 3.00 1421 2N15 0.00 0.00 3.00 3.00 1422 2N16 3.00 0.00 3.00 3.00 1453 2N17 40.00 0.00 3.00 3.00 1423 2N18 0.00 3.00 3.00 3.00 1424 2N19 3.00 3.00 3.00 3.00 1454 2N20 40.00 3.00 3.00 3.00 1455 2N21 0.00 40.00 3.00 3.00 1456 2N22 3.00 40.00 3.00 3.00 1457 2N23 40.00 40.00 3.00 3.00 1458 2N24 0.00 0.00 40.00 3.00 1459 2N25 3.00 0.00 40.00 3.00 1460 2N26 40.00 0.00 40.00 3.00 1402 2N27 40.00 27.00 27.00 100.00 1375 2N28 40.00 27.00 27.00 10.00 1380 2N29 20.00 12.00 12.00 20.00 1369 2N30 80.00 65.00 65.00 0.00 1271 2N31 0.00 100.00 40.00 100.00 1270 2N32 0.00 40.00 40.00 100.00 1269 2N33 0.00 0.00 40.00 100.00 1227 2O1 100.00 100.00 40.00 80.00 1226 2O2 100.00 70.00 40.00 80.00 1225 2O3 100.00 40.00 40.00 80.00 1224 2O4 100.00 0.00 40.00 80.00 1211 2O5 100.00 100.00 0.00 80.00 1210 2O6 100.00 70.00 0.00 80.00 1209 2O7 100.00 40.00 0.00 80.00 1208 2O8 100.00 0.00 0.00 80.00 1414 2O9 3.00 3.00 0.00 0.00 1436 2O10 40.00 3.00 0.00 0.00 1437 2O11 3.00 40.00 0.00 0.00 1415 2O12 3.00 0.00 3.00 0.00 1438 2O13 40.00 0.00 3.00 0.00 1416 2O14 0.00 3.00 3.00 0.00 1417 2O15 3.00 3.00 3.00 0.00 1439 2O16 40.00 3.00 3.00 0.00 1440 2O17 0.00 40.00 3.00 0.00 1441 2O18 3.00 40.00 3.00 0.00 1442 2O19 40.00 40.00 3.00 0.00 1443 2O20 3.00 0.00 40.00 0.00 1444 2O21 0.00 3.00 40.00 0.00 1445 2O22 3.00 3.00 40.00 0.00 1446 2O23 40.00 3.00 40.00 0.00 1447 2O24 3.00 40.00 40.00 0.00 1418 2O25 3.00 0.00 0.00 3.00 1448 2O26 40.00 0.00 0.00 3.00 1396 2O27 40.00 27.00 27.00 80.00 1403 2O28 20.00 12.00 12.00 100.00 1376 2O29 20.00 12.00 12.00 10.00 1370 2O30 60.00 45.00 45.00 0.00 1274 2O31 40.00 100.00 40.00 100.00 1273 2O32 40.00 40.00 40.00 100.00 1272 2O33 40.00 0.00 40.00 100.00 1247 2P1 0.00 100.00 100.00 80.00 1246 2P2 0.00 70.00 100.00 80.00 1245 2P3 0.00 40.00 100.00 80.00 1244 2P4 0.00 0.00 100.00 80.00 1231 2P5 0.00 100.00 70.00 80.00 1230 2P6 0.00 70.00 70.00 80.00 1229 2P7 0.00 40.00 70.00 80.00 1228 2P8 0.00 0.00 70.00 80.00 1347 2P9 0.00 0.00 0.00 100.00 1348 2P10 0.00 0.00 0.00 98.00 1349 2P11 0.00 0.00 0.00 95.00 1350 2P12 0.00 0.00 0.00 90.00 1351 2P13 0.00 0.00 0.00 85.00 1352 2P14 0.00 0.00 0.00 80.00 1353 2P15 0.00 0.00 0.00 75.00 1354 2P16 0.00 0.00 0.00 70.00 1355 2P17 0.00 0.00 0.00 60.00 1356 2P18 0.00 0.00 0.00 50.00 1357 2P19 0.00 0.00 0.00 40.00 1358 2P20 0.00 0.00 0.00 30.00 1359 2P21 0.00 0.00 0.00 25.00 1360 2P22 0.00 0.00 0.00 20.00 1361 2P23 0.00 0.00 0.00 15.00 1362 2P24 0.00 0.00 0.00 10.00 1363 2P25 0.00 0.00 0.00 7.00 1364 2P26 0.00 0.00 0.00 5.00 1365 2P27 0.00 0.00 0.00 3.00 1366 2P28 0.00 0.00 0.00 2.00 1404 2P29 10.00 6.00 6.00 100.00 1371 2P30 40.00 27.00 27.00 0.00 1277 2P31 100.00 100.00 40.00 100.00 1276 2P32 100.00 40.00 40.00 100.00 1275 2P33 100.00 0.00 40.00 100.00 1251 2Q1 40.00 100.00 100.00 80.00 1250 2Q2 40.00 70.00 100.00 80.00 1249 2Q3 40.00 40.00 100.00 80.00 1248 2Q4 40.00 0.00 100.00 80.00 1235 2Q5 40.00 100.00 70.00 80.00 1234 2Q6 40.00 70.00 70.00 80.00 1233 2Q7 40.00 40.00 70.00 80.00 1232 2Q8 40.00 0.00 70.00 80.00 1327 2Q9 0.00 0.00 100.00 0.00 1328 2Q10 0.00 0.00 98.00 0.00 1329 2Q11 0.00 0.00 95.00 0.00 1330 2Q12 0.00 0.00 90.00 0.00 1331 2Q13 0.00 0.00 85.00 0.00 1332 2Q14 0.00 0.00 80.00 0.00 1333 2Q15 0.00 0.00 75.00 0.00 1334 2Q16 0.00 0.00 70.00 0.00 1335 2Q17 0.00 0.00 60.00 0.00 1336 2Q18 0.00 0.00 50.00 0.00 1337 2Q19 0.00 0.00 40.00 0.00 1338 2Q20 0.00 0.00 30.00 0.00 1339 2Q21 0.00 0.00 25.00 0.00 1340 2Q22 0.00 0.00 20.00 0.00 1341 2Q23 0.00 0.00 15.00 0.00 1342 2Q24 0.00 0.00 10.00 0.00 1343 2Q25 0.00 0.00 7.00 0.00 1344 2Q26 0.00 0.00 5.00 0.00 1345 2Q27 0.00 0.00 3.00 0.00 1346 2Q28 0.00 0.00 2.00 0.00 1398 2Q29 10.00 6.00 6.00 80.00 1372 2Q30 20.00 12.00 12.00 0.00 1280 2Q31 0.00 100.00 100.00 100.00 1279 2Q32 0.00 40.00 100.00 100.00 1278 2Q33 0.00 0.00 100.00 100.00 1255 2R1 70.00 100.00 100.00 80.00 1254 2R2 70.00 70.00 100.00 80.00 1253 2R3 70.00 40.00 100.00 80.00 1252 2R4 70.00 0.00 100.00 80.00 1239 2R5 70.00 100.00 70.00 80.00 1238 2R6 70.00 70.00 70.00 80.00 1237 2R7 70.00 40.00 70.00 80.00 1236 2R8 70.00 0.00 70.00 80.00 1307 2R9 0.00 100.00 0.00 0.00 1308 2R10 0.00 98.00 0.00 0.00 1309 2R11 0.00 95.00 0.00 0.00 1310 2R12 0.00 90.00 0.00 0.00 1311 2R13 0.00 85.00 0.00 0.00 1312 2R14 0.00 80.00 0.00 0.00 1313 2R15 0.00 75.00 0.00 0.00 1314 2R16 0.00 70.00 0.00 0.00 1315 2R17 0.00 60.00 0.00 0.00 1316 2R18 0.00 50.00 0.00 0.00 1317 2R19 0.00 40.00 0.00 0.00 1318 2R20 0.00 30.00 0.00 0.00 1319 2R21 0.00 25.00 0.00 0.00 1320 2R22 0.00 20.00 0.00 0.00 1321 2R23 0.00 15.00 0.00 0.00 1322 2R24 0.00 10.00 0.00 0.00 1323 2R25 0.00 7.00 0.00 0.00 1324 2R26 0.00 5.00 0.00 0.00 1325 2R27 0.00 3.00 0.00 0.00 1326 2R28 0.00 2.00 0.00 0.00 1392 2R29 10.00 6.00 6.00 60.00 1373 2R30 10.00 6.00 6.00 0.00 1283 2R31 40.00 100.00 100.00 100.00 1282 2R32 40.00 40.00 100.00 100.00 1281 2R33 40.00 0.00 100.00 100.00 1259 2S1 100.00 100.00 100.00 80.00 1258 2S2 100.00 70.00 100.00 80.00 1257 2S3 100.00 40.00 100.00 80.00 1256 2S4 100.00 0.00 100.00 80.00 1243 2S5 100.00 100.00 70.00 80.00 1242 2S6 100.00 70.00 70.00 80.00 1241 2S7 100.00 40.00 70.00 80.00 1240 2S8 100.00 0.00 70.00 80.00 1287 2S9 100.00 0.00 0.00 0.00 1288 2S10 98.00 0.00 0.00 0.00 1289 2S11 95.00 0.00 0.00 0.00 1290 2S12 90.00 0.00 0.00 0.00 1291 2S13 85.00 0.00 0.00 0.00 1292 2S14 80.00 0.00 0.00 0.00 1293 2S15 75.00 0.00 0.00 0.00 1294 2S16 70.00 0.00 0.00 0.00 1295 2S17 60.00 0.00 0.00 0.00 1296 2S18 50.00 0.00 0.00 0.00 1297 2S19 40.00 0.00 0.00 0.00 1298 2S20 30.00 0.00 0.00 0.00 1299 2S21 25.00 0.00 0.00 0.00 1300 2S22 20.00 0.00 0.00 0.00 1301 2S23 15.00 0.00 0.00 0.00 1302 2S24 10.00 0.00 0.00 0.00 1303 2S25 7.00 0.00 0.00 0.00 1304 2S26 5.00 0.00 0.00 0.00 1305 2S27 3.00 0.00 0.00 0.00 1306 2S28 2.00 0.00 0.00 0.00 1386 2S29 10.00 6.00 6.00 40.00 1374 2S30 5.00 3.00 3.00 0.00 1286 2S31 100.00 100.00 100.00 100.00 1285 2S32 100.00 40.00 100.00 100.00 1284 2S33 100.00 0.00 100.00 100.00 END_DATA textECI2002 ORIGINATOR "" DESCRIPTOR "Output Characterisation" PRINT_CONDITIONS "" LGOMCCMYKSEPARATION "UseCMYKSep = true Separation = { SepID = 6 StartK = '40' WidthK = '1' MaxC = '100' MaxM = '100' MaxY = '100' MaxK = '100' MaxCMYK = '400' } " CREATED "5/16/2006" # Time: 13:56 INSTRUMENTATION "SpectroScan" MEASUREMENT_SOURCE "Illumination=D50 ObserverAngle=2 WhiteBase=Abs Filter=No" KEYWORD "SAMPLE_NAME" NUMBER_OF_FIELDS 12 BEGIN_DATA_FORMAT SAMPLE_ID SAMPLE_NAME CMYK_C CMYK_M CMYK_Y CMYK_K XYZ_X XYZ_Y XYZ_Z LAB_L LAB_A LAB_B END_DATA_FORMAT NUMBER_OF_SETS 1485 BEGIN_DATA 171 A1 0.00 100.00 20.00 0.00 31.15 17.00 13.53 48.26 66.09 1.32 170 A2 0.00 85.00 20.00 0.00 37.64 24.22 20.43 56.31 53.75 -0.92 169 A3 0.00 70.00 20.00 0.00 42.33 30.31 25.55 61.92 44.15 -0.97 168 A4 0.00 55.00 20.00 0.00 47.71 37.50 30.97 67.65 34.90 -0.05 167 A5 0.00 40.00 20.00 0.00 54.83 47.39 37.65 74.44 24.41 1.95 166 A6 0.00 30.00 20.00 0.00 59.81 54.72 42.10 78.88 17.45 3.76 165 A7 0.00 20.00 20.00 0.00 65.31 63.00 47.18 83.44 10.50 5.43 164 A8 0.00 10.00 20.00 0.00 70.70 71.32 51.89 87.64 4.14 7.32 163 A9 0.00 0.00 20.00 0.00 76.10 80.08 56.19 91.72 -2.24 9.75 90 A10 0.00 100.00 10.00 0.00 31.25 16.98 14.96 48.23 66.60 -2.46 89 A11 0.00 85.00 10.00 0.00 38.08 24.38 22.95 56.47 54.48 -5.62 88 A12 0.00 70.00 10.00 0.00 43.19 30.80 29.01 62.34 44.90 -6.11 87 A13 0.00 55.00 10.00 0.00 48.77 38.04 35.35 68.05 36.11 -5.87 86 A14 0.00 40.00 10.00 0.00 55.87 47.85 43.05 74.73 25.76 -4.59 85 A15 0.00 30.00 10.00 0.00 61.27 55.56 48.82 79.36 18.82 -3.50 84 A16 0.00 20.00 10.00 0.00 66.67 63.66 54.29 83.79 12.00 -1.92 83 A17 0.00 10.00 10.00 0.00 72.15 72.04 59.95 87.99 5.70 -0.52 82 A18 0.00 0.00 10.00 0.00 77.25 80.39 64.80 91.86 -0.53 1.43 9 A19 0.00 100.00 0.00 0.00 31.36 16.96 16.44 48.21 67.08 -6.12 8 A20 0.00 85.00 0.00 0.00 38.19 24.28 25.35 56.37 55.24 -10.19 7 A21 0.00 70.00 0.00 0.00 43.48 30.64 32.27 62.20 46.35 -11.45 6 A22 0.00 55.00 0.00 0.00 49.24 38.01 39.55 68.03 37.47 -11.66 5 A23 0.00 40.00 0.00 0.00 56.88 48.26 49.02 74.99 27.14 -11.27 4 A24 0.00 30.00 0.00 0.00 62.18 55.75 55.61 79.47 20.48 -10.76 3 A25 0.00 20.00 0.00 0.00 67.97 64.03 62.55 83.98 14.05 -10.00 2 A26 0.00 10.00 0.00 0.00 73.86 72.82 69.44 88.36 7.67 -8.91 1 A27 0.00 0.00 0.00 0.00 79.50 81.58 75.67 92.39 1.66 -7.45 735 A28 0.00 100.00 0.00 20.00 23.94 13.31 13.54 43.23 58.98 -7.38 734 A29 0.00 70.00 0.00 20.00 32.66 23.56 25.19 55.64 39.75 -11.16 733 A30 0.00 40.00 0.00 20.00 41.99 36.18 36.66 66.66 22.71 -10.11 732 A31 0.00 20.00 0.00 20.00 49.79 47.44 45.95 74.47 11.19 -8.58 731 A32 0.00 10.00 0.00 20.00 53.90 53.54 50.62 78.19 5.89 -7.56 730 A33 0.00 0.00 0.00 20.00 57.63 59.29 54.73 81.45 1.14 -6.42 180 B1 10.00 100.00 20.00 0.00 27.05 15.04 13.31 45.69 61.41 -2.52 179 B2 10.00 85.00 20.00 0.00 32.77 21.65 20.04 53.65 48.71 -4.70 178 B3 10.00 70.00 20.00 0.00 37.29 27.42 25.04 59.36 39.45 -4.48 177 B4 10.00 55.00 20.00 0.00 42.22 34.17 30.37 65.10 30.12 -3.52 176 B5 10.00 40.00 20.00 0.00 48.37 43.02 36.71 71.57 19.82 -1.71 175 B6 10.00 30.00 20.00 0.00 53.11 50.05 41.29 76.10 12.87 -0.01 174 B7 10.00 20.00 20.00 0.00 57.95 57.48 46.24 80.45 6.21 1.39 173 B8 10.00 10.00 20.00 0.00 62.52 64.82 50.67 84.39 0.04 3.07 172 B9 10.00 0.00 20.00 0.00 67.29 72.63 54.80 88.27 -5.93 5.26 99 B10 10.00 100.00 10.00 0.00 27.09 14.91 14.45 45.51 62.36 -5.85 98 B11 10.00 85.00 10.00 0.00 33.15 21.66 22.27 53.66 50.02 -9.16 97 B12 10.00 70.00 10.00 0.00 38.05 27.75 28.47 59.66 40.61 -9.84 96 B13 10.00 55.00 10.00 0.00 43.04 34.49 34.48 65.35 31.48 -9.28 95 B14 10.00 40.00 10.00 0.00 49.64 43.75 42.19 72.06 21.17 -8.12 94 B15 10.00 30.00 10.00 0.00 54.33 50.62 47.73 76.45 14.49 -7.26 93 B16 10.00 20.00 10.00 0.00 59.03 57.82 52.97 80.64 8.00 -5.93 92 B17 10.00 10.00 10.00 0.00 64.22 65.81 58.87 84.90 1.75 -4.76 91 B18 10.00 0.00 10.00 0.00 68.66 73.19 63.38 88.54 -4.12 -2.94 18 B19 10.00 100.00 0.00 0.00 27.63 15.22 16.43 45.93 62.72 -10.02 17 B20 10.00 85.00 0.00 0.00 33.76 21.92 24.96 53.94 50.93 -13.68 16 B21 10.00 70.00 0.00 0.00 38.33 27.62 31.55 59.54 42.03 -14.93 15 B22 10.00 55.00 0.00 0.00 44.06 34.90 39.12 65.67 33.10 -15.16 14 B23 10.00 40.00 0.00 0.00 50.71 44.08 48.02 72.28 23.09 -14.79 13 B24 10.00 30.00 0.00 0.00 55.94 51.43 54.83 76.94 16.41 -14.30 12 B25 10.00 20.00 0.00 0.00 61.07 58.98 61.66 81.28 10.08 -13.78 11 B26 10.00 10.00 0.00 0.00 65.96 66.58 68.01 85.29 3.97 -12.90 10 B27 10.00 0.00 0.00 0.00 71.17 74.61 74.16 89.21 -1.62 -11.63 741 B28 10.00 100.00 0.00 20.00 21.19 11.89 13.18 41.04 55.87 -10.18 740 B29 10.00 70.00 0.00 20.00 29.40 21.61 24.81 53.61 36.49 -13.99 739 B30 10.00 40.00 0.00 20.00 37.73 33.26 35.91 64.37 19.29 -13.01 738 B31 10.00 20.00 0.00 20.00 44.85 43.72 45.12 72.04 7.93 -11.77 737 B32 10.00 10.00 0.00 20.00 48.70 49.42 49.79 75.71 2.89 -10.90 736 B33 10.00 0.00 0.00 20.00 51.69 54.29 53.38 78.63 -1.71 -9.84 189 C1 20.00 100.00 20.00 0.00 23.76 13.48 13.24 43.48 57.11 -6.14 188 C2 20.00 85.00 20.00 0.00 28.88 19.52 19.72 51.29 44.51 -8.10 187 C3 20.00 70.00 20.00 0.00 32.96 24.84 24.56 56.92 35.31 -7.83 186 C4 20.00 55.00 20.00 0.00 37.21 30.93 29.65 62.45 25.88 -6.94 185 C5 20.00 40.00 20.00 0.00 42.55 38.82 35.71 68.62 15.93 -5.40 184 C6 20.00 30.00 20.00 0.00 47.03 45.44 40.36 73.18 9.18 -3.84 183 C7 20.00 20.00 20.00 0.00 51.28 52.13 45.11 77.36 2.68 -2.59 182 C8 20.00 10.00 20.00 0.00 55.30 58.82 49.43 81.19 -3.49 -1.05 181 C9 20.00 0.00 20.00 0.00 59.60 65.95 53.44 84.97 -9.29 1.03 108 C10 20.00 100.00 10.00 0.00 23.96 13.43 14.49 43.41 58.29 -9.57 107 C11 20.00 85.00 10.00 0.00 29.25 19.59 21.93 51.37 45.57 -12.45 106 C12 20.00 70.00 10.00 0.00 33.54 25.10 27.85 57.17 36.24 -13.11 105 C13 20.00 55.00 10.00 0.00 38.14 31.28 33.67 62.74 27.65 -12.60 104 C14 20.00 40.00 10.00 0.00 43.87 39.59 41.00 69.18 17.41 -11.56 103 C15 20.00 30.00 10.00 0.00 48.20 45.96 46.53 73.52 10.96 -10.91 102 C16 20.00 20.00 10.00 0.00 52.63 52.79 51.96 77.75 4.52 -9.81 101 C17 20.00 10.00 10.00 0.00 56.91 59.64 57.20 81.64 -1.44 -8.68 100 C18 20.00 0.00 10.00 0.00 61.28 66.81 62.12 85.41 -7.22 -7.11 27 C19 20.00 100.00 0.00 0.00 24.18 13.50 16.10 43.50 58.85 -13.42 26 C20 20.00 85.00 0.00 0.00 29.86 19.85 24.63 51.67 46.61 -17.01 25 C21 20.00 70.00 0.00 0.00 34.07 25.16 31.06 57.23 37.84 -18.17 24 C22 20.00 55.00 0.00 0.00 38.98 31.61 38.12 63.02 29.11 -18.39 23 C23 20.00 40.00 0.00 0.00 45.19 40.24 46.98 69.64 19.26 -18.13 22 C24 20.00 30.00 0.00 0.00 49.51 46.53 53.35 73.89 12.93 -17.98 21 C25 20.00 20.00 0.00 0.00 54.00 53.20 59.73 77.99 7.00 -17.54 20 C26 20.00 10.00 0.00 0.00 58.50 60.22 66.25 81.96 1.04 -17.01 19 C27 20.00 0.00 0.00 0.00 63.34 67.83 72.45 85.92 -4.66 -15.81 747 C28 20.00 100.00 0.00 20.00 18.96 10.82 13.13 39.27 52.51 -13.09 746 C29 20.00 70.00 0.00 20.00 26.25 19.69 24.28 51.48 33.21 -16.69 745 C30 20.00 40.00 0.00 20.00 33.86 30.45 35.18 62.04 16.37 -15.99 744 C31 20.00 20.00 0.00 20.00 40.10 39.85 43.93 69.36 5.28 -14.94 743 C32 20.00 10.00 0.00 20.00 43.44 44.95 48.34 72.86 0.29 -14.16 742 C33 20.00 0.00 0.00 20.00 46.30 49.64 52.14 75.85 -4.38 -13.28 198 D1 30.00 100.00 20.00 0.00 20.02 11.54 12.86 40.47 52.69 -10.28 197 D2 30.00 85.00 20.00 0.00 24.70 17.22 19.30 48.53 39.39 -11.97 196 D3 30.00 70.00 20.00 0.00 28.33 22.04 24.00 54.07 30.38 -11.72 195 D4 30.00 55.00 20.00 0.00 32.33 27.71 29.00 59.63 21.36 -10.76 194 D5 30.00 40.00 20.00 0.00 37.03 34.89 34.97 65.66 11.45 -9.45 193 D6 30.00 30.00 20.00 0.00 40.71 40.55 39.27 69.86 5.02 -8.13 192 D7 30.00 20.00 20.00 0.00 44.29 46.41 43.65 73.81 -1.32 -6.92 191 D8 30.00 10.00 20.00 0.00 47.63 52.12 47.85 77.35 -7.12 -5.85 190 D9 30.00 0.00 20.00 0.00 51.18 58.38 51.63 80.95 -13.05 -3.92 117 D10 30.00 100.00 10.00 0.00 20.30 11.58 14.11 40.54 53.72 -13.55 116 D11 30.00 85.00 10.00 0.00 25.10 17.24 21.40 48.56 40.97 -16.24 115 D12 30.00 70.00 10.00 0.00 29.05 22.43 27.27 54.48 31.42 -16.77 114 D13 30.00 55.00 10.00 0.00 33.08 28.07 33.12 59.95 22.66 -16.60 113 D14 30.00 40.00 10.00 0.00 38.04 35.38 39.91 66.04 13.09 -15.56 112 D15 30.00 30.00 10.00 0.00 41.64 40.89 45.13 70.10 6.80 -15.13 111 D16 30.00 20.00 10.00 0.00 45.64 47.13 50.49 74.27 0.58 -14.17 110 D17 30.00 10.00 10.00 0.00 49.36 53.16 55.65 77.97 -5.05 -13.39 109 D18 30.00 0.00 10.00 0.00 53.08 59.49 60.37 81.56 -10.73 -12.03 36 D19 30.00 100.00 0.00 0.00 20.77 11.88 16.08 41.03 53.89 -17.63 35 D20 30.00 85.00 0.00 0.00 25.68 17.55 24.17 48.94 41.78 -20.87 34 D21 30.00 70.00 0.00 0.00 29.55 22.51 30.45 54.56 32.97 -21.81 33 D22 30.00 55.00 0.00 0.00 33.86 28.30 37.27 60.16 24.48 -22.16 32 D23 30.00 40.00 0.00 0.00 39.27 35.96 45.73 66.49 15.05 -22.07 31 D24 30.00 30.00 0.00 0.00 43.28 41.78 52.03 70.72 9.04 -22.00 30 D25 30.00 20.00 0.00 0.00 47.05 47.64 58.19 74.60 3.13 -21.83 29 D26 30.00 10.00 0.00 0.00 50.86 53.72 64.24 78.30 -2.46 -21.42 28 D27 30.00 0.00 0.00 0.00 55.09 60.52 70.52 82.12 -8.04 -20.64 753 D28 40.00 100.00 0.00 20.00 14.06 8.33 12.60 34.67 44.75 -19.54 752 D29 40.00 70.00 0.00 20.00 19.96 15.89 23.34 46.83 24.97 -22.97 751 D30 40.00 40.00 0.00 20.00 26.03 24.78 33.54 56.86 9.10 -22.54 750 D31 40.00 20.00 0.00 20.00 30.79 32.31 41.65 63.60 -1.36 -22.02 749 D32 40.00 10.00 0.00 20.00 33.36 36.39 45.79 66.82 -5.97 -21.57 748 D33 40.00 0.00 0.00 20.00 35.25 39.82 49.15 69.34 -10.34 -21.16 207 E1 40.00 100.00 20.00 0.00 16.96 9.97 12.52 37.79 48.27 -13.94 206 E2 40.00 85.00 20.00 0.00 21.03 15.10 18.80 45.77 34.73 -15.66 205 E3 40.00 70.00 20.00 0.00 24.37 19.67 23.62 51.46 25.35 -15.51 204 E4 40.00 55.00 20.00 0.00 27.78 24.71 28.53 56.79 16.47 -14.88 203 E5 40.00 40.00 20.00 0.00 32.01 31.29 34.31 62.75 6.77 -13.52 202 E6 40.00 30.00 20.00 0.00 35.12 36.34 38.46 66.78 0.28 -12.36 201 E7 40.00 20.00 20.00 0.00 38.28 41.57 42.83 70.57 -5.65 -11.49 200 E8 40.00 10.00 20.00 0.00 41.24 46.75 46.85 74.03 -11.33 -10.40 199 E9 40.00 0.00 20.00 0.00 44.18 51.97 50.51 77.26 -16.51 -9.04 126 E10 40.00 100.00 10.00 0.00 17.25 10.06 13.92 37.95 49.22 -17.51 125 E11 40.00 85.00 10.00 0.00 21.54 15.28 21.09 46.02 36.05 -20.01 124 E12 40.00 70.00 10.00 0.00 25.11 20.06 26.90 51.90 26.62 -20.59 123 E13 40.00 55.00 10.00 0.00 28.34 24.89 32.28 56.97 17.93 -20.47 122 E14 40.00 40.00 10.00 0.00 32.89 31.66 39.09 63.06 8.58 -19.62 121 E15 40.00 30.00 10.00 0.00 36.17 36.76 44.14 67.10 2.43 -19.09 120 E16 40.00 20.00 10.00 0.00 39.55 42.23 49.31 71.03 -3.62 -18.43 119 E17 40.00 10.00 10.00 0.00 42.82 47.61 54.25 74.58 -8.97 -17.75 118 E18 40.00 0.00 10.00 0.00 45.70 52.75 58.69 77.73 -14.18 -16.94 45 E19 40.00 100.00 0.00 0.00 17.69 10.30 15.63 38.37 49.77 -21.13 44 E20 40.00 85.00 0.00 0.00 22.23 15.64 23.66 46.50 37.20 -24.13 43 E21 40.00 70.00 0.00 0.00 25.75 20.22 29.92 52.09 28.51 -25.24 42 E22 40.00 55.00 0.00 0.00 29.62 25.58 36.62 57.64 19.95 -25.60 41 E23 40.00 40.00 0.00 0.00 34.20 32.43 44.85 63.70 10.40 -25.82 40 E24 40.00 30.00 0.00 0.00 37.49 37.43 50.68 67.60 4.58 -25.89 39 E25 40.00 20.00 0.00 0.00 40.87 42.73 56.95 71.37 -1.00 -26.13 38 E26 40.00 10.00 0.00 0.00 44.22 48.17 62.85 74.93 -6.34 -25.89 37 E27 40.00 0.00 0.00 0.00 47.59 53.69 68.34 78.28 -11.24 -25.29 759 E28 70.00 100.00 0.00 20.00 8.60 5.51 11.89 28.15 33.13 -28.75 758 E29 70.00 70.00 0.00 20.00 13.07 11.55 22.15 40.49 13.33 -31.63 757 E30 70.00 40.00 0.00 20.00 17.03 17.93 31.32 49.41 -1.43 -32.04 756 E31 70.00 20.00 0.00 20.00 20.13 23.28 38.59 55.36 -10.95 -32.22 755 E32 70.00 10.00 0.00 20.00 21.81 26.12 42.23 58.15 -14.97 -32.15 754 E33 70.00 0.00 0.00 20.00 22.82 28.17 44.82 60.04 -18.48 -32.10 216 F1 55.00 100.00 20.00 0.00 13.00 7.97 12.18 33.92 41.24 -19.63 215 F2 55.00 85.00 20.00 0.00 16.35 12.47 18.26 41.95 26.97 -21.06 214 F3 55.00 70.00 20.00 0.00 18.92 16.26 22.85 47.32 17.61 -21.21 213 F4 55.00 55.00 20.00 0.00 21.47 20.38 27.20 52.26 8.81 -20.49 212 F5 55.00 40.00 20.00 0.00 24.74 25.76 32.78 57.81 -0.43 -19.78 211 F6 55.00 30.00 20.00 0.00 27.28 30.01 36.81 61.66 -6.49 -18.94 210 F7 55.00 20.00 20.00 0.00 29.68 34.24 40.84 65.15 -12.18 -18.30 209 F8 55.00 10.00 20.00 0.00 31.97 38.39 44.45 68.31 -17.32 -17.39 208 F9 55.00 0.00 20.00 0.00 33.87 42.22 47.59 71.02 -22.31 -16.46 135 F10 55.00 100.00 10.00 0.00 13.24 8.06 13.59 34.11 41.95 -23.25 134 F11 55.00 85.00 10.00 0.00 16.78 12.67 20.62 42.26 28.05 -25.54 133 F12 55.00 70.00 10.00 0.00 19.55 16.65 25.94 47.81 18.70 -25.99 132 F13 55.00 55.00 10.00 0.00 22.16 20.69 30.96 52.61 10.52 -25.98 131 F14 55.00 40.00 10.00 0.00 25.62 26.17 37.35 58.20 1.61 -25.64 130 F15 55.00 30.00 10.00 0.00 28.10 30.26 42.06 61.88 -4.18 -25.50 129 F16 55.00 20.00 10.00 0.00 30.81 34.78 46.81 65.58 -9.79 -24.92 128 F17 55.00 10.00 10.00 0.00 33.33 39.14 51.58 68.85 -14.84 -24.73 127 F18 55.00 0.00 10.00 0.00 35.56 43.26 55.55 71.73 -19.58 -24.05 54 F19 55.00 100.00 0.00 0.00 13.60 8.25 15.30 34.50 42.57 -26.99 53 F20 55.00 85.00 0.00 0.00 17.48 13.03 23.13 42.81 29.51 -29.50 52 F21 55.00 70.00 0.00 0.00 20.35 16.99 29.04 48.25 20.73 -30.45 51 F22 55.00 55.00 0.00 0.00 23.31 21.33 35.23 53.31 12.71 -31.11 50 F23 55.00 40.00 0.00 0.00 26.79 26.83 42.81 58.82 3.77 -31.72 49 F24 55.00 30.00 0.00 0.00 29.41 30.97 48.33 62.48 -1.70 -32.04 48 F25 55.00 20.00 0.00 0.00 31.79 34.96 53.71 65.72 -6.84 -32.45 47 F26 55.00 10.00 0.00 0.00 34.77 39.68 59.60 69.24 -11.51 -32.50 46 F27 55.00 0.00 0.00 0.00 37.44 44.24 64.95 72.39 -16.21 -32.28 765 F28 100.00 100.00 0.00 20.00 4.48 3.26 11.08 21.05 20.11 -38.55 764 F29 100.00 70.00 0.00 20.00 7.26 7.49 20.22 32.89 0.36 -40.88 763 F30 100.00 40.00 0.00 20.00 9.75 11.86 28.32 41.00 -12.71 -41.77 762 F31 100.00 20.00 0.00 20.00 11.68 15.41 34.80 46.19 -20.63 -42.78 761 F32 100.00 10.00 0.00 20.00 12.49 16.99 37.57 48.25 -23.96 -43.10 760 F33 100.00 0.00 0.00 20.00 13.03 18.17 39.73 49.70 -26.62 -43.50 225 G1 70.00 100.00 20.00 0.00 9.99 6.44 11.82 30.49 34.48 -24.49 224 G2 70.00 85.00 20.00 0.00 12.83 10.38 17.61 38.51 20.34 -25.54 223 G3 70.00 70.00 20.00 0.00 14.97 13.68 21.90 43.77 11.10 -25.49 222 G4 70.00 55.00 20.00 0.00 17.15 17.33 26.46 48.67 2.44 -25.40 221 G5 70.00 40.00 20.00 0.00 19.72 21.76 31.41 53.77 -6.13 -24.67 220 G6 70.00 30.00 20.00 0.00 21.86 25.42 35.42 57.48 -11.83 -24.20 219 G7 70.00 20.00 20.00 0.00 23.53 28.66 38.90 60.48 -17.20 -23.81 218 G8 70.00 10.00 20.00 0.00 25.45 32.17 42.44 63.48 -21.86 -23.23 217 G9 70.00 0.00 20.00 0.00 26.97 35.38 45.39 66.04 -26.61 -22.44 144 G10 70.00 100.00 10.00 0.00 10.21 6.52 13.26 30.69 35.31 -28.24 143 G11 70.00 85.00 10.00 0.00 13.21 10.50 19.88 38.73 21.85 -30.09 142 G12 70.00 70.00 10.00 0.00 15.55 13.94 24.87 44.15 12.87 -30.40 141 G13 70.00 55.00 10.00 0.00 17.69 17.47 29.91 48.85 4.57 -30.81 140 G14 70.00 40.00 10.00 0.00 20.53 22.14 35.85 54.18 -3.92 -30.49 139 G15 70.00 30.00 10.00 0.00 22.77 25.76 40.52 57.81 -9.08 -30.55 138 G16 70.00 20.00 10.00 0.00 24.81 29.39 44.87 61.12 -14.38 -30.30 137 G17 70.00 10.00 10.00 0.00 26.75 32.86 49.07 64.05 -18.95 -30.19 136 G18 70.00 0.00 10.00 0.00 28.43 36.20 53.01 66.67 -23.53 -30.06 63 G19 70.00 100.00 0.00 0.00 10.56 6.63 14.74 30.96 36.83 -31.69 62 G20 70.00 85.00 0.00 0.00 13.96 10.96 22.40 39.51 23.29 -33.81 61 G21 70.00 70.00 0.00 0.00 16.35 14.34 28.02 44.72 15.00 -34.86 60 G22 70.00 55.00 0.00 0.00 18.78 18.10 34.01 49.62 6.99 -35.72 59 G23 70.00 40.00 0.00 0.00 21.65 22.79 41.18 54.86 -1.51 -36.48 58 G24 70.00 30.00 0.00 0.00 23.81 26.26 46.31 58.28 -6.47 -36.92 57 G25 70.00 20.00 0.00 0.00 25.77 29.68 51.65 61.38 -11.48 -37.69 56 G26 70.00 10.00 0.00 0.00 28.18 33.55 56.84 64.60 -15.61 -37.68 55 G27 70.00 0.00 0.00 0.00 29.99 36.95 61.76 67.24 -20.03 -38.09 771 G28 0.00 100.00 10.00 20.00 23.34 12.96 12.08 42.70 58.60 -4.21 770 G29 0.00 70.00 10.00 20.00 31.79 23.03 22.30 55.10 38.95 -6.73 769 G30 0.00 40.00 10.00 20.00 40.60 35.18 31.93 65.89 21.79 -4.56 768 G31 0.00 20.00 10.00 20.00 48.35 46.47 40.03 73.85 9.96 -2.25 767 G32 0.00 10.00 10.00 20.00 52.13 52.32 43.68 77.47 4.45 -0.65 766 G33 0.00 0.00 10.00 20.00 55.68 57.98 47.10 80.73 -0.57 0.85 234 H1 85.00 100.00 20.00 0.00 7.37 5.11 11.55 27.04 26.68 -29.66 233 H2 85.00 85.00 20.00 0.00 9.53 8.35 16.99 34.71 12.57 -30.68 232 H3 85.00 70.00 20.00 0.00 11.08 11.04 21.10 39.64 3.29 -31.03 231 H4 85.00 55.00 20.00 0.00 12.96 14.20 25.39 44.52 -4.76 -30.70 230 H5 85.00 40.00 20.00 0.00 14.91 17.78 30.16 49.23 -12.79 -30.54 229 H6 85.00 30.00 20.00 0.00 16.26 20.39 33.30 52.28 -18.06 -30.09 228 H7 85.00 20.00 20.00 0.00 17.91 23.41 36.99 55.49 -22.84 -29.82 227 H8 85.00 10.00 20.00 0.00 18.98 25.79 39.87 57.84 -27.41 -29.65 226 H9 85.00 0.00 20.00 0.00 20.26 28.42 42.69 60.27 -31.51 -29.07 153 H10 85.00 100.00 10.00 0.00 7.61 5.21 13.01 27.32 27.74 -33.38 152 H11 85.00 85.00 10.00 0.00 9.85 8.48 19.08 34.96 14.05 -34.90 151 H12 85.00 70.00 10.00 0.00 11.55 11.26 23.82 40.01 5.04 -35.63 150 H13 85.00 55.00 10.00 0.00 13.27 14.14 28.38 44.43 -2.31 -35.95 149 H14 85.00 40.00 10.00 0.00 15.70 18.19 34.27 49.72 -10.26 -35.93 148 H15 85.00 30.00 10.00 0.00 17.28 20.96 38.32 52.91 -15.11 -36.09 147 H16 85.00 20.00 10.00 0.00 18.87 23.88 42.40 55.97 -19.91 -36.12 146 H17 85.00 10.00 10.00 0.00 20.23 26.51 46.20 58.52 -24.08 -36.38 145 H18 85.00 0.00 10.00 0.00 21.64 29.25 49.86 61.00 -28.03 -36.34 72 H19 85.00 100.00 0.00 0.00 7.78 5.21 14.29 27.32 29.37 -36.79 71 H20 85.00 85.00 0.00 0.00 10.41 8.78 21.47 35.55 15.87 -38.81 70 H21 85.00 70.00 0.00 0.00 12.49 11.77 26.84 40.85 7.96 -39.54 69 H22 85.00 55.00 0.00 0.00 14.59 15.08 32.75 45.74 0.31 -40.54 68 H23 85.00 40.00 0.00 0.00 16.64 18.66 39.12 50.29 -7.36 -41.67 67 H24 85.00 30.00 0.00 0.00 18.26 21.43 43.85 53.42 -12.11 -42.33 66 H25 85.00 20.00 0.00 0.00 19.61 23.98 48.47 56.07 -16.59 -43.26 65 H26 85.00 10.00 0.00 0.00 21.45 27.04 53.42 59.01 -20.34 -43.71 64 H27 85.00 0.00 0.00 0.00 22.82 29.67 57.91 61.37 -24.20 -44.36 777 H28 10.00 100.00 10.00 20.00 21.11 11.94 12.13 41.12 55.15 -7.08 776 H29 10.00 70.00 10.00 20.00 28.75 21.28 22.04 53.25 35.56 -9.42 775 H30 10.00 40.00 10.00 20.00 36.67 32.51 31.42 63.76 18.47 -7.46 774 H31 10.00 20.00 10.00 20.00 43.58 42.83 39.19 71.44 6.83 -5.30 773 H32 10.00 10.00 10.00 20.00 47.01 48.20 42.79 74.95 1.50 -3.89 772 H33 10.00 0.00 10.00 20.00 50.26 53.47 46.12 78.15 -3.41 -2.43 243 I1 100.00 100.00 20.00 0.00 4.93 3.73 10.94 22.77 18.42 -35.16 242 I2 100.00 85.00 20.00 0.00 6.44 6.28 15.96 30.12 4.12 -36.15 241 I3 100.00 70.00 20.00 0.00 7.80 8.65 20.06 35.31 -4.91 -36.37 240 I4 100.00 55.00 20.00 0.00 9.12 11.12 24.01 39.78 -12.60 -36.38 239 I5 100.00 40.00 20.00 0.00 10.50 13.83 28.13 43.99 -19.81 -36.29 238 I6 100.00 30.00 20.00 0.00 11.54 15.95 31.26 46.91 -24.78 -36.27 237 I7 100.00 20.00 20.00 0.00 12.53 17.99 34.26 49.48 -28.96 -36.33 236 I8 100.00 10.00 20.00 0.00 13.44 19.97 37.01 51.80 -33.00 -36.21 235 I9 100.00 0.00 20.00 0.00 14.18 21.69 39.28 53.70 -36.48 -36.01 162 I10 100.00 100.00 10.00 0.00 5.07 3.76 12.21 22.86 19.76 -38.81 161 I11 100.00 85.00 10.00 0.00 6.75 6.42 18.09 30.46 5.84 -40.51 160 I12 100.00 70.00 10.00 0.00 8.14 8.77 22.67 35.54 -2.84 -41.16 159 I13 100.00 55.00 10.00 0.00 9.55 11.21 27.04 39.94 -9.78 -41.45 158 I14 100.00 40.00 10.00 0.00 11.16 14.14 32.14 44.44 -16.84 -41.87 157 I15 100.00 30.00 10.00 0.00 12.37 16.36 35.99 47.44 -21.28 -42.31 156 I16 100.00 20.00 10.00 0.00 13.52 18.56 39.41 50.17 -25.47 -42.26 155 I17 100.00 10.00 10.00 0.00 14.47 20.53 42.95 52.43 -29.25 -42.92 154 I18 100.00 0.00 10.00 0.00 15.36 22.34 45.87 54.39 -32.34 -43.10 81 I19 100.00 100.00 0.00 0.00 5.23 3.79 13.54 22.96 21.31 -42.34 80 I20 100.00 85.00 0.00 0.00 7.30 6.72 20.28 31.15 8.29 -44.00 79 I21 100.00 70.00 0.00 0.00 8.95 9.27 25.62 36.49 0.10 -44.95 78 I22 100.00 55.00 0.00 0.00 10.58 11.92 30.98 41.09 -6.73 -45.86 77 I23 100.00 40.00 0.00 0.00 12.08 14.66 36.60 45.17 -13.45 -47.07 76 I24 100.00 30.00 0.00 0.00 13.38 16.90 41.14 48.14 -17.63 -48.02 75 I25 100.00 20.00 0.00 0.00 14.33 18.76 45.13 50.41 -21.40 -49.08 74 I26 100.00 10.00 0.00 0.00 15.51 20.89 49.42 52.83 -24.78 -49.93 73 I27 100.00 0.00 0.00 0.00 16.41 22.67 53.17 54.73 -27.81 -50.82 783 I28 20.00 100.00 10.00 20.00 18.79 10.85 12.00 39.32 51.41 -9.81 782 I29 20.00 70.00 10.00 20.00 25.78 19.62 21.92 51.40 31.58 -12.37 781 I30 20.00 40.00 10.00 20.00 32.92 29.96 31.06 61.62 14.91 -10.60 780 I31 20.00 20.00 10.00 20.00 39.17 39.44 38.67 69.07 3.64 -8.69 779 I32 20.00 10.00 10.00 20.00 42.24 44.33 42.21 72.45 -1.51 -7.47 778 I33 20.00 0.00 10.00 20.00 44.87 48.84 45.15 75.35 -6.29 -6.10 414 J1 0.00 100.00 55.00 0.00 29.59 16.26 8.08 47.32 64.33 16.98 413 J2 0.00 85.00 55.00 0.00 35.14 22.90 11.84 54.97 51.23 17.66 412 J3 0.00 70.00 55.00 0.00 39.97 29.12 14.74 60.89 41.38 19.93 411 J4 0.00 55.00 55.00 0.00 45.11 36.24 17.60 66.70 31.68 23.08 410 J5 0.00 40.00 55.00 0.00 51.37 45.41 20.73 73.16 21.02 27.51 409 J6 0.00 30.00 55.00 0.00 55.93 52.50 22.77 77.58 13.63 31.12 408 J7 0.00 20.00 55.00 0.00 60.82 60.21 25.21 81.95 6.62 34.16 407 J8 0.00 10.00 55.00 0.00 65.78 68.23 27.28 86.12 0.00 37.76 406 J9 0.00 0.00 55.00 0.00 70.94 76.97 29.36 90.31 -6.86 41.55 333 J10 0.00 100.00 40.00 0.00 30.20 16.64 10.36 47.80 64.57 9.83 332 J11 0.00 85.00 40.00 0.00 36.14 23.47 15.26 55.55 52.11 9.41 331 J12 0.00 70.00 40.00 0.00 40.74 29.48 19.01 61.20 42.43 10.48 330 J13 0.00 55.00 40.00 0.00 45.62 36.16 22.47 66.64 33.40 12.84 329 J14 0.00 40.00 40.00 0.00 52.14 45.52 26.97 73.23 22.73 16.06 328 J15 0.00 30.00 40.00 0.00 57.34 53.21 30.44 78.00 15.29 18.62 327 J16 0.00 20.00 40.00 0.00 62.37 61.06 33.39 82.41 8.24 21.72 326 J17 0.00 10.00 40.00 0.00 67.70 69.52 36.69 86.76 1.48 24.50 325 J18 0.00 0.00 40.00 0.00 72.64 77.93 39.05 90.75 -5.17 28.18 252 J19 0.00 100.00 30.00 0.00 30.60 16.78 11.96 47.98 65.29 5.25 251 J20 0.00 85.00 30.00 0.00 36.83 23.76 17.86 55.85 53.07 3.78 250 J21 0.00 70.00 30.00 0.00 41.68 29.91 22.35 61.58 43.67 4.34 249 J22 0.00 55.00 30.00 0.00 46.80 36.92 26.92 67.22 34.24 5.78 248 J23 0.00 40.00 30.00 0.00 53.49 46.42 32.38 73.82 23.69 8.42 247 J24 0.00 30.00 30.00 0.00 58.44 53.72 36.28 78.30 16.67 10.49 246 J25 0.00 20.00 30.00 0.00 63.44 61.43 40.20 82.61 9.83 12.63 245 J26 0.00 10.00 30.00 0.00 68.81 69.88 44.13 86.94 3.11 15.13 244 J27 0.00 0.00 30.00 0.00 74.27 78.90 47.67 91.19 -3.69 18.22 789 J28 40.00 100.00 10.00 20.00 14.09 8.47 11.70 34.95 43.76 -16.47 788 J29 40.00 70.00 10.00 20.00 19.64 15.86 21.21 46.79 23.56 -18.91 787 J30 40.00 40.00 10.00 20.00 24.95 24.09 29.63 56.18 7.49 -17.72 786 J31 40.00 20.00 10.00 20.00 29.90 31.86 36.87 63.23 -3.09 -16.31 785 J32 40.00 10.00 10.00 20.00 32.20 35.75 40.10 66.33 -7.96 -15.31 784 J33 40.00 0.00 10.00 20.00 34.38 39.53 43.17 69.13 -12.37 -14.40 423 K1 10.00 100.00 55.00 0.00 25.60 14.37 7.91 44.76 59.48 13.23 422 K2 10.00 85.00 55.00 0.00 31.00 20.87 11.80 52.81 45.92 14.05 421 K3 10.00 70.00 55.00 0.00 35.12 26.44 14.57 58.45 36.19 16.15 420 K4 10.00 55.00 55.00 0.00 39.58 32.89 17.24 64.07 26.46 19.37 419 K5 10.00 40.00 55.00 0.00 44.77 40.89 20.09 70.10 16.06 23.56 418 K6 10.00 30.00 55.00 0.00 49.29 47.82 22.38 74.71 8.81 26.92 417 K7 10.00 20.00 55.00 0.00 53.67 54.86 24.65 78.96 1.98 30.02 416 K8 10.00 10.00 55.00 0.00 57.86 62.01 26.64 82.92 -4.64 33.33 415 K9 10.00 0.00 55.00 0.00 61.95 69.36 28.28 86.68 -11.13 37.06 342 K10 10.00 100.00 40.00 0.00 26.51 14.86 10.21 45.44 60.30 6.27 341 K11 10.00 85.00 40.00 0.00 31.96 21.35 15.15 53.33 47.19 5.85 340 K12 10.00 70.00 40.00 0.00 36.05 26.97 18.77 58.95 37.16 7.12 339 K13 10.00 55.00 40.00 0.00 40.37 33.06 22.26 64.21 28.32 9.06 338 K14 10.00 40.00 40.00 0.00 46.13 41.64 26.61 70.62 17.71 12.18 337 K15 10.00 30.00 40.00 0.00 50.54 48.41 29.80 75.08 10.57 14.60 336 K16 10.00 20.00 40.00 0.00 54.90 55.43 32.73 79.29 3.68 17.33 335 K17 10.00 10.00 40.00 0.00 59.56 62.94 35.80 83.41 -2.66 19.98 334 K18 10.00 0.00 40.00 0.00 64.16 70.80 38.44 87.39 -9.13 23.20 261 K19 10.00 100.00 30.00 0.00 26.87 15.08 11.99 45.74 60.49 1.30 260 K20 10.00 85.00 30.00 0.00 32.60 21.67 17.75 53.67 48.03 0.27 259 K21 10.00 70.00 30.00 0.00 36.86 27.30 22.10 59.25 38.53 0.81 258 K22 10.00 55.00 30.00 0.00 41.40 33.68 26.51 64.71 29.32 2.17 257 K23 10.00 40.00 30.00 0.00 47.77 42.71 32.01 71.36 19.08 4.74 256 K24 10.00 30.00 30.00 0.00 52.04 49.26 35.74 75.61 12.23 6.61 255 K25 10.00 20.00 30.00 0.00 56.56 56.36 39.50 79.82 5.53 8.74 254 K26 10.00 10.00 30.00 0.00 61.10 63.85 43.24 83.89 -1.10 10.97 253 K27 10.00 0.00 30.00 0.00 66.08 72.02 46.87 87.98 -7.36 13.62 795 K28 70.00 100.00 10.00 20.00 8.73 5.71 11.17 28.67 31.99 -25.69 794 K29 70.00 70.00 10.00 20.00 12.71 11.46 19.99 40.35 11.58 -27.54 793 K30 70.00 40.00 10.00 20.00 16.25 17.48 27.94 48.86 -3.40 -27.58 792 K31 70.00 20.00 10.00 20.00 19.34 22.85 34.24 54.92 -13.01 -26.92 791 K32 70.00 10.00 10.00 20.00 20.76 25.48 37.06 57.54 -17.29 -26.38 790 K33 70.00 0.00 10.00 20.00 21.91 27.78 39.42 59.69 -21.15 -25.87 432 L1 20.00 100.00 55.00 0.00 22.52 12.92 7.84 42.65 55.11 9.83 431 L2 20.00 85.00 55.00 0.00 27.28 18.86 11.57 50.52 41.53 10.77 430 L3 20.00 70.00 55.00 0.00 31.14 24.25 14.39 56.34 31.22 12.98 429 L4 20.00 55.00 55.00 0.00 34.87 29.88 16.92 61.55 21.97 15.75 428 L5 20.00 40.00 55.00 0.00 39.54 37.28 19.60 67.49 11.60 20.08 427 L6 20.00 30.00 55.00 0.00 43.22 43.30 21.71 71.76 4.39 23.14 426 L7 20.00 20.00 55.00 0.00 47.35 49.92 24.12 76.02 -2.16 25.90 425 L8 20.00 10.00 55.00 0.00 50.91 56.17 26.02 79.71 -8.43 28.87 424 L9 20.00 0.00 55.00 0.00 54.64 62.98 27.71 83.43 -14.81 32.40 351 L10 20.00 100.00 40.00 0.00 23.03 13.13 9.90 42.96 56.11 3.00 350 L11 20.00 85.00 40.00 0.00 28.10 19.32 14.82 51.06 42.46 2.76 349 L12 20.00 70.00 40.00 0.00 31.92 24.64 18.47 56.72 32.43 3.94 348 L13 20.00 55.00 40.00 0.00 35.64 30.15 21.67 61.78 23.58 6.01 347 L14 20.00 40.00 40.00 0.00 40.80 37.94 25.93 67.98 13.38 8.81 346 L15 20.00 30.00 40.00 0.00 44.47 43.90 28.95 72.16 6.32 10.92 345 L16 20.00 20.00 40.00 0.00 48.40 50.33 31.80 76.27 -0.34 13.52 344 L17 20.00 10.00 40.00 0.00 52.47 57.13 34.76 80.25 -6.65 16.00 343 L18 20.00 0.00 40.00 0.00 56.51 64.10 37.49 84.02 -12.68 18.68 270 L19 20.00 100.00 30.00 0.00 23.46 13.40 11.78 43.36 56.29 -2.19 269 L20 20.00 85.00 30.00 0.00 28.81 19.74 17.71 51.54 43.13 -3.31 268 L21 20.00 70.00 30.00 0.00 32.67 24.96 21.95 57.04 33.75 -2.70 267 L22 20.00 55.00 30.00 0.00 36.88 30.92 26.13 62.44 24.83 -1.09 266 L23 20.00 40.00 30.00 0.00 42.21 38.89 31.18 68.67 14.69 1.37 265 L24 20.00 30.00 30.00 0.00 45.95 44.82 34.71 72.77 7.93 3.18 264 L25 20.00 20.00 30.00 0.00 50.07 51.35 38.66 76.89 1.51 4.80 263 L26 20.00 10.00 30.00 0.00 54.22 58.27 42.36 80.89 -4.94 6.89 262 L27 20.00 0.00 30.00 0.00 58.65 65.58 45.64 84.78 -10.74 9.57 801 L28 100.00 100.00 10.00 20.00 4.44 3.33 10.25 21.31 18.34 -35.46 800 L29 100.00 70.00 10.00 20.00 7.02 7.47 18.30 32.86 -1.79 -36.83 799 L30 100.00 40.00 10.00 20.00 9.42 11.85 25.58 40.97 -15.25 -37.15 798 L31 100.00 20.00 10.00 20.00 11.11 15.20 30.94 45.91 -23.55 -37.50 797 L32 100.00 10.00 10.00 20.00 11.87 16.79 33.40 47.99 -27.07 -37.64 796 L33 100.00 0.00 10.00 20.00 12.31 17.90 35.15 49.37 -29.99 -37.79 441 M1 30.00 100.00 55.00 0.00 19.06 11.18 7.61 39.89 50.38 5.99 440 M2 30.00 85.00 55.00 0.00 23.25 16.63 11.20 47.79 36.25 7.20 439 M3 30.00 70.00 55.00 0.00 26.54 21.41 13.97 53.40 26.13 9.01 438 M4 30.00 55.00 55.00 0.00 29.94 26.63 16.44 58.63 16.89 11.84 437 M5 30.00 40.00 55.00 0.00 34.25 33.56 19.29 64.61 6.65 15.77 436 M6 30.00 30.00 55.00 0.00 37.21 38.71 21.25 68.54 -0.36 18.50 435 M7 30.00 20.00 55.00 0.00 40.40 44.24 23.39 72.39 -6.83 21.01 434 M8 30.00 10.00 55.00 0.00 43.38 49.72 25.32 75.90 -12.99 23.53 433 M9 30.00 0.00 55.00 0.00 46.51 55.64 26.93 79.41 -19.11 26.78 360 M10 30.00 100.00 40.00 0.00 19.54 11.45 9.75 40.33 50.87 -1.04 359 M11 30.00 85.00 40.00 0.00 23.99 17.07 14.58 48.35 37.10 -1.28 358 M12 30.00 70.00 40.00 0.00 27.32 21.87 18.02 53.89 27.15 0.04 357 M13 30.00 55.00 40.00 0.00 30.58 26.83 21.25 58.82 18.47 1.75 356 M14 30.00 40.00 40.00 0.00 35.23 34.01 25.34 64.97 8.43 4.65 355 M15 30.00 30.00 40.00 0.00 38.47 39.37 28.15 69.02 1.64 6.82 354 M16 30.00 20.00 40.00 0.00 41.80 45.04 30.98 72.92 -4.85 9.02 353 M17 30.00 10.00 40.00 0.00 45.38 51.08 33.94 76.73 -10.76 11.13 352 M18 30.00 0.00 40.00 0.00 48.53 56.95 36.23 80.15 -16.72 13.75 279 M19 30.00 100.00 30.00 0.00 20.12 11.80 11.71 40.90 51.31 -6.24 278 M20 30.00 85.00 30.00 0.00 24.82 17.50 17.28 48.89 38.35 -6.91 277 M21 30.00 70.00 30.00 0.00 28.24 22.38 21.54 54.43 28.48 -6.40 276 M22 30.00 55.00 30.00 0.00 31.92 27.77 25.68 59.68 19.68 -5.06 275 M23 30.00 40.00 30.00 0.00 36.45 34.82 30.51 65.61 9.75 -2.86 274 M24 30.00 30.00 30.00 0.00 39.75 40.16 34.02 69.58 3.25 -1.32 273 M25 30.00 20.00 30.00 0.00 43.05 45.64 37.50 73.31 -2.80 0.20 272 M26 30.00 10.00 30.00 0.00 46.71 51.80 41.13 77.16 -8.86 2.03 271 M27 30.00 0.00 30.00 0.00 49.94 57.77 44.43 80.61 -14.87 3.84 807 M28 0.00 100.00 20.00 20.00 23.62 13.31 11.32 43.23 57.55 -1.03 806 M29 0.00 70.00 20.00 20.00 31.69 23.16 20.21 55.24 37.98 -2.31 805 M30 0.00 40.00 20.00 20.00 40.21 35.18 28.51 65.89 20.60 0.83 804 M31 0.00 20.00 20.00 20.00 47.53 46.10 35.29 73.61 8.73 3.80 803 M32 0.00 10.00 20.00 20.00 51.50 52.18 38.66 77.39 3.14 5.67 802 M33 0.00 0.00 20.00 20.00 54.79 57.63 41.36 80.53 -1.93 7.54 450 N1 40.00 100.00 55.00 0.00 16.16 9.82 7.57 37.52 45.00 2.05 449 N2 40.00 85.00 55.00 0.00 19.75 14.72 11.11 45.25 30.74 3.10 448 N3 40.00 70.00 55.00 0.00 22.71 19.04 13.65 50.73 21.16 5.25 447 N4 40.00 55.00 55.00 0.00 25.67 23.78 16.15 55.87 11.87 7.78 446 N5 40.00 40.00 55.00 0.00 29.28 29.91 18.77 61.58 1.68 11.65 445 N6 40.00 30.00 55.00 0.00 31.89 34.57 20.80 65.41 -5.13 14.01 444 N7 40.00 20.00 55.00 0.00 34.59 39.46 22.95 69.08 -11.46 16.12 443 N8 40.00 10.00 55.00 0.00 37.22 44.38 24.72 72.48 -17.31 18.72 442 N9 40.00 0.00 55.00 0.00 39.61 49.21 26.22 75.58 -23.06 21.41 369 N10 40.00 100.00 40.00 0.00 16.73 10.05 9.64 37.94 46.35 -4.78 368 N11 40.00 85.00 40.00 0.00 20.52 15.13 14.31 45.81 32.11 -4.98 367 N12 40.00 70.00 40.00 0.00 23.37 19.43 17.59 51.19 22.12 -3.65 366 N13 40.00 55.00 40.00 0.00 26.28 23.98 20.80 56.07 13.53 -2.10 365 N14 40.00 40.00 40.00 0.00 30.24 30.38 24.62 61.98 3.60 0.80 364 N15 40.00 30.00 40.00 0.00 33.14 35.25 27.46 65.94 -2.94 2.67 363 N16 40.00 20.00 40.00 0.00 36.15 40.45 30.27 69.79 -9.24 4.73 362 N17 40.00 10.00 40.00 0.00 38.90 45.48 32.83 73.21 -15.08 6.69 361 N18 40.00 0.00 40.00 0.00 41.39 50.33 35.09 76.27 -20.53 8.67 288 N19 40.00 100.00 30.00 0.00 17.20 10.37 11.57 38.49 46.59 -9.98 287 N20 40.00 85.00 30.00 0.00 21.32 15.63 17.12 46.49 32.99 -10.68 286 N21 40.00 70.00 30.00 0.00 24.40 20.04 21.17 51.88 23.66 -10.07 285 N22 40.00 55.00 30.00 0.00 27.56 24.87 25.07 56.95 14.94 -8.69 284 N23 40.00 40.00 30.00 0.00 31.54 31.26 29.88 62.73 5.15 -6.82 283 N24 40.00 30.00 30.00 0.00 34.39 36.07 33.18 66.57 -1.30 -5.28 282 N25 40.00 20.00 30.00 0.00 37.25 41.01 36.70 70.18 -7.30 -4.09 281 N26 40.00 10.00 30.00 0.00 40.51 46.55 40.26 73.90 -13.00 -2.47 280 N27 40.00 0.00 30.00 0.00 43.10 51.48 43.19 76.97 -18.44 -0.91 813 N28 10.00 100.00 20.00 20.00 21.07 12.03 11.08 41.27 54.31 -3.69 812 N29 10.00 70.00 20.00 20.00 28.57 21.41 19.97 53.39 34.26 -5.02 811 N30 10.00 40.00 20.00 20.00 36.26 32.53 28.16 63.78 17.03 -2.23 810 N31 10.00 20.00 20.00 20.00 42.82 42.58 34.56 71.27 5.32 0.81 809 N32 10.00 10.00 20.00 20.00 46.06 47.82 37.67 74.71 -0.12 2.38 808 N33 10.00 0.00 20.00 20.00 48.90 52.64 40.33 77.66 -4.97 3.93 459 O1 55.00 100.00 55.00 0.00 12.18 7.80 7.36 33.57 37.19 -3.92 458 O2 55.00 85.00 55.00 0.00 15.17 12.13 10.78 41.42 22.41 -2.48 457 O3 55.00 70.00 55.00 0.00 17.57 15.97 13.41 46.94 12.16 -0.64 456 O4 55.00 55.00 55.00 0.00 19.78 19.87 15.57 51.69 3.11 1.98 455 O5 55.00 40.00 55.00 0.00 22.25 24.57 18.09 56.65 -6.46 4.66 454 O6 55.00 30.00 55.00 0.00 24.37 28.46 19.97 60.30 -12.73 6.91 453 O7 55.00 20.00 55.00 0.00 26.24 32.24 21.89 63.54 -18.81 8.62 452 O8 55.00 10.00 55.00 0.00 28.30 36.25 23.55 66.71 -24.23 10.91 451 O9 55.00 0.00 55.00 0.00 29.82 39.80 24.76 69.33 -29.69 13.21 378 O10 55.00 100.00 40.00 0.00 12.66 8.05 9.49 34.08 38.25 -10.93 377 O11 55.00 85.00 40.00 0.00 15.78 12.45 14.00 41.92 23.83 -10.86 376 O12 55.00 70.00 40.00 0.00 18.07 16.18 17.21 47.21 13.68 -9.63 375 O13 55.00 55.00 40.00 0.00 20.26 19.94 20.12 51.77 5.14 -8.12 374 O14 55.00 40.00 40.00 0.00 23.22 25.12 23.71 57.19 -4.41 -5.80 373 O15 55.00 30.00 40.00 0.00 25.38 29.01 26.49 60.79 -10.54 -4.57 372 O16 55.00 20.00 40.00 0.00 27.73 33.26 28.91 64.37 -16.39 -2.44 371 O17 55.00 10.00 40.00 0.00 29.80 37.30 31.33 67.50 -21.86 -0.88 370 O18 55.00 0.00 40.00 0.00 31.78 41.31 33.47 70.39 -26.98 0.89 297 O19 55.00 100.00 30.00 0.00 13.06 8.22 11.18 34.43 39.44 -15.78 296 O20 55.00 85.00 30.00 0.00 16.52 12.89 16.65 42.60 25.10 -16.29 295 O21 55.00 70.00 30.00 0.00 19.09 16.79 20.65 48.00 15.56 -15.71 294 O22 55.00 55.00 30.00 0.00 21.51 20.79 24.25 52.72 7.03 -14.51 293 O23 55.00 40.00 30.00 0.00 24.38 25.87 28.62 57.91 -2.40 -13.11 292 O24 55.00 30.00 30.00 0.00 26.58 29.81 31.78 61.49 -8.59 -11.93 291 O25 55.00 20.00 30.00 0.00 28.80 33.83 35.17 64.83 -14.19 -11.17 290 O26 55.00 10.00 30.00 0.00 30.95 37.93 38.07 67.97 -19.61 -9.78 289 O27 55.00 0.00 30.00 0.00 33.13 42.10 40.98 70.94 -24.55 -8.50 819 O28 20.00 100.00 20.00 20.00 18.95 11.07 11.22 39.70 50.64 -6.81 818 O29 20.00 70.00 20.00 20.00 25.73 19.83 19.89 51.64 30.36 -7.87 817 O30 20.00 40.00 20.00 20.00 32.25 29.67 27.46 61.37 13.58 -5.21 816 O31 20.00 20.00 20.00 20.00 38.28 38.98 33.92 68.74 2.21 -2.62 815 O32 20.00 10.00 20.00 20.00 41.26 43.85 36.97 72.13 -3.10 -1.10 814 O33 20.00 0.00 20.00 20.00 43.63 48.06 39.26 74.86 -7.77 0.51 468 P1 70.00 100.00 55.00 0.00 9.25 6.31 7.10 30.17 29.88 -8.69 467 P2 70.00 85.00 55.00 0.00 11.64 9.92 10.29 37.70 15.62 -7.33 466 P3 70.00 70.00 55.00 0.00 13.50 13.20 12.69 43.06 5.08 -5.34 465 P4 70.00 55.00 55.00 0.00 15.38 16.65 15.10 47.81 -3.90 -3.55 464 P5 70.00 40.00 55.00 0.00 17.47 20.75 17.47 52.68 -13.13 -0.81 463 P6 70.00 30.00 55.00 0.00 19.01 23.86 19.06 55.95 -19.10 1.33 462 P7 70.00 20.00 55.00 0.00 20.57 27.13 20.94 59.09 -24.90 2.83 461 P8 70.00 10.00 55.00 0.00 22.04 30.30 22.39 61.91 -30.08 4.83 460 P9 70.00 0.00 55.00 0.00 23.44 33.38 23.78 64.47 -34.80 6.62 387 P10 70.00 100.00 40.00 0.00 9.73 6.55 9.21 30.76 31.20 -15.69 386 P11 70.00 85.00 40.00 0.00 12.36 10.41 13.54 38.56 16.94 -15.44 385 P12 70.00 70.00 40.00 0.00 14.32 13.73 16.68 43.85 6.82 -14.19 384 P13 70.00 55.00 40.00 0.00 15.90 16.81 19.32 48.02 -1.75 -12.90 383 P14 70.00 40.00 40.00 0.00 18.20 21.02 22.71 52.97 -10.45 -11.20 382 P15 70.00 30.00 40.00 0.00 20.10 24.44 25.40 56.53 -16.15 -10.00 381 P16 70.00 20.00 40.00 0.00 21.93 28.00 27.78 59.89 -21.91 -8.31 380 P17 70.00 10.00 40.00 0.00 23.15 30.85 29.70 62.38 -27.07 -7.14 379 P18 70.00 0.00 40.00 0.00 24.94 34.40 31.80 65.28 -31.75 -5.42 306 P19 70.00 100.00 30.00 0.00 10.04 6.67 10.81 31.04 32.51 -20.48 305 P20 70.00 85.00 30.00 0.00 12.93 10.68 16.02 39.03 18.70 -20.95 304 P21 70.00 70.00 30.00 0.00 14.98 13.96 19.62 44.17 9.43 -20.18 303 P22 70.00 55.00 30.00 0.00 16.97 17.47 23.25 48.85 0.68 -19.32 302 P23 70.00 40.00 30.00 0.00 19.46 21.93 27.57 53.95 -8.21 -18.20 301 P24 70.00 30.00 30.00 0.00 21.14 25.13 30.48 57.20 -14.00 -17.31 300 P25 70.00 20.00 30.00 0.00 22.72 28.29 33.40 60.15 -19.40 -16.66 299 P26 70.00 10.00 30.00 0.00 24.42 31.68 36.20 63.08 -24.53 -15.64 298 P27 70.00 0.00 30.00 0.00 25.95 34.92 38.88 65.69 -29.31 -14.80 825 P28 40.00 100.00 20.00 20.00 14.11 8.59 10.76 35.18 42.90 -13.19 824 P29 40.00 70.00 20.00 20.00 19.72 16.19 19.23 47.22 22.11 -14.08 823 P30 40.00 40.00 20.00 20.00 24.80 24.30 26.44 56.39 5.97 -12.06 822 P31 40.00 20.00 20.00 20.00 29.37 31.85 32.41 63.22 -5.06 -9.90 821 P32 40.00 10.00 20.00 20.00 31.46 35.54 35.03 66.17 -9.95 -8.65 820 P33 40.00 0.00 20.00 20.00 33.07 38.67 37.12 68.51 -14.28 -7.55 477 Q1 85.00 100.00 55.00 0.00 6.64 4.89 6.84 26.43 22.01 -14.06 476 Q2 85.00 85.00 55.00 0.00 8.30 7.84 9.83 33.64 6.80 -12.83 475 Q3 85.00 70.00 55.00 0.00 9.64 10.42 12.06 38.59 -3.24 -11.25 474 Q4 85.00 55.00 55.00 0.00 11.15 13.42 14.49 43.39 -12.39 -9.62 473 Q5 85.00 40.00 55.00 0.00 12.55 16.55 16.60 47.69 -21.12 -7.39 472 Q6 85.00 30.00 55.00 0.00 13.76 19.16 18.26 50.87 -26.96 -5.69 471 Q7 85.00 20.00 55.00 0.00 15.04 21.83 19.96 53.85 -31.95 -4.20 470 Q8 85.00 10.00 55.00 0.00 15.89 24.13 21.24 56.22 -37.16 -2.72 469 Q9 85.00 0.00 55.00 0.00 16.80 26.35 22.54 58.37 -41.32 -1.55 396 Q10 85.00 100.00 40.00 0.00 6.92 5.02 8.93 26.79 23.37 -21.56 395 Q11 85.00 85.00 40.00 0.00 8.86 8.19 12.94 34.37 8.55 -21.03 394 Q12 85.00 70.00 40.00 0.00 10.46 10.99 15.95 39.57 -1.04 -19.83 393 Q13 85.00 55.00 40.00 0.00 11.85 13.70 18.65 43.80 -9.15 -18.73 392 Q14 85.00 40.00 40.00 0.00 13.65 17.25 21.94 48.57 -17.71 -17.30 391 Q15 85.00 30.00 40.00 0.00 14.81 19.71 24.17 51.51 -23.22 -16.44 390 Q16 85.00 20.00 40.00 0.00 16.10 22.43 26.22 54.48 -28.44 -14.98 389 Q17 85.00 10.00 40.00 0.00 17.29 25.06 28.27 57.13 -33.28 -13.87 388 Q18 85.00 0.00 40.00 0.00 18.29 27.43 29.92 59.37 -37.56 -12.69 315 Q19 85.00 100.00 30.00 0.00 7.35 5.24 10.54 27.41 24.86 -25.89 314 Q20 85.00 85.00 30.00 0.00 9.44 8.44 15.19 34.88 11.14 -26.06 313 Q21 85.00 70.00 30.00 0.00 11.03 11.21 18.76 39.93 1.61 -25.64 312 Q22 85.00 55.00 30.00 0.00 12.88 14.45 22.58 44.87 -6.76 -24.91 311 Q23 85.00 40.00 30.00 0.00 14.62 17.88 26.31 49.35 -15.03 -23.98 310 Q24 85.00 30.00 30.00 0.00 15.77 20.31 28.93 52.19 -20.47 -23.48 309 Q25 85.00 20.00 30.00 0.00 16.78 22.74 31.79 54.80 -26.00 -23.48 308 Q26 85.00 10.00 30.00 0.00 18.15 25.50 34.24 57.56 -30.53 -22.37 307 Q27 85.00 0.00 30.00 0.00 19.25 27.94 36.59 59.83 -34.63 -21.78 831 Q28 70.00 100.00 20.00 20.00 8.44 5.59 10.04 28.36 30.79 -22.63 830 Q29 70.00 70.00 20.00 20.00 12.60 11.60 18.15 40.57 9.90 -23.20 829 Q30 70.00 40.00 20.00 20.00 15.89 17.54 24.84 48.93 -5.72 -22.11 828 Q31 70.00 20.00 20.00 20.00 18.69 22.68 30.08 54.74 -15.57 -20.92 827 Q32 70.00 10.00 20.00 20.00 19.79 25.00 32.31 57.08 -20.07 -20.33 826 Q33 70.00 0.00 20.00 20.00 20.77 27.06 34.10 59.03 -23.68 -19.62 486 R1 100.00 100.00 55.00 0.00 4.04 3.39 6.40 21.55 11.77 -20.56 485 R2 100.00 85.00 55.00 0.00 5.22 5.75 9.16 28.76 -3.76 -18.95 484 R3 100.00 70.00 55.00 0.00 6.16 7.80 11.36 33.57 -13.77 -17.82 483 R4 100.00 55.00 55.00 0.00 7.18 10.07 13.48 37.97 -22.23 -16.28 482 R5 100.00 40.00 55.00 0.00 8.01 12.34 15.32 41.75 -30.76 -14.53 481 R6 100.00 30.00 55.00 0.00 8.92 14.41 16.90 44.82 -36.01 -13.04 480 R7 100.00 20.00 55.00 0.00 9.68 16.31 18.53 47.38 -40.84 -12.30 479 R8 100.00 10.00 55.00 0.00 10.22 17.95 19.68 49.44 -45.43 -11.21 478 R9 100.00 0.00 55.00 0.00 10.84 19.64 20.73 51.43 -49.34 -9.96 405 R10 100.00 100.00 40.00 0.00 4.35 3.56 8.39 22.16 13.48 -27.56 404 R11 100.00 85.00 40.00 0.00 5.71 6.03 12.07 29.49 -1.16 -26.95 403 R12 100.00 70.00 40.00 0.00 6.85 8.24 14.85 34.48 -10.54 -25.90 402 R13 100.00 55.00 40.00 0.00 8.04 10.60 17.58 38.89 -18.12 -24.83 401 R14 100.00 40.00 40.00 0.00 9.14 13.15 20.49 42.99 -26.29 -24.01 400 R15 100.00 30.00 40.00 0.00 9.84 14.91 22.40 45.51 -31.44 -23.47 399 R16 100.00 20.00 40.00 0.00 10.81 17.07 24.41 48.35 -36.24 -22.32 398 R17 100.00 10.00 40.00 0.00 11.61 18.98 26.40 50.66 -40.41 -21.88 397 R18 100.00 0.00 40.00 0.00 12.18 20.57 27.69 52.48 -44.28 -20.93 324 R19 100.00 100.00 30.00 0.00 4.59 3.59 9.67 22.28 16.24 -31.87 323 R20 100.00 85.00 30.00 0.00 6.10 6.15 14.11 29.80 1.82 -32.05 322 R21 100.00 70.00 30.00 0.00 7.25 8.34 17.49 34.69 -7.43 -31.87 321 R22 100.00 55.00 30.00 0.00 8.71 10.99 21.06 39.57 -15.18 -31.07 320 R23 100.00 40.00 30.00 0.00 9.98 13.67 24.60 43.75 -22.82 -30.61 319 R24 100.00 30.00 30.00 0.00 10.77 15.51 26.94 46.33 -27.87 -30.27 318 R25 100.00 20.00 30.00 0.00 11.47 17.30 29.39 48.64 -32.68 -30.33 317 R26 100.00 10.00 30.00 0.00 12.42 19.37 31.78 51.12 -36.82 -29.81 316 R27 100.00 0.00 30.00 0.00 13.04 20.99 33.73 52.94 -40.52 -29.58 837 R28 100.00 100.00 20.00 20.00 4.15 3.17 9.14 20.73 16.94 -32.75 836 R29 100.00 70.00 20.00 20.00 6.48 7.10 16.12 32.04 -3.79 -33.23 835 R30 100.00 40.00 20.00 20.00 8.67 11.32 22.38 40.12 -17.91 -32.71 834 R31 100.00 20.00 20.00 20.00 10.26 14.64 27.13 45.14 -26.57 -32.64 833 R32 100.00 10.00 20.00 20.00 10.91 16.12 28.96 47.13 -30.27 -32.24 832 R33 100.00 0.00 20.00 20.00 11.39 17.33 30.64 48.67 -33.43 -32.27 657 S1 0.00 100.00 100.00 0.00 28.12 15.30 2.49 46.04 64.18 44.68 656 S2 0.00 85.00 100.00 0.00 33.09 21.41 3.58 53.39 50.98 49.34 655 S3 0.00 70.00 100.00 0.00 37.63 27.52 4.50 59.45 40.18 54.25 654 S4 0.00 55.00 100.00 0.00 42.14 34.24 5.43 65.15 29.67 59.14 653 S5 0.00 40.00 100.00 0.00 47.53 42.38 6.10 71.13 19.41 66.28 652 S6 0.00 30.00 100.00 0.00 51.73 49.01 6.67 75.46 12.06 71.22 651 S7 0.00 20.00 100.00 0.00 56.78 56.86 7.47 80.10 4.86 75.88 650 S8 0.00 10.00 100.00 0.00 61.45 64.64 7.90 84.30 -2.04 81.42 649 S9 0.00 0.00 100.00 0.00 66.56 73.55 8.61 88.71 -9.44 86.38 576 S10 0.00 100.00 85.00 0.00 29.07 16.03 4.68 47.02 63.63 31.78 575 S11 0.00 85.00 85.00 0.00 34.50 22.53 6.63 54.58 50.75 35.39 574 S12 0.00 70.00 85.00 0.00 38.91 28.64 8.23 60.46 39.93 39.07 573 S13 0.00 55.00 85.00 0.00 43.10 34.86 9.55 65.64 30.40 43.27 572 S14 0.00 40.00 85.00 0.00 49.17 43.73 10.91 72.05 19.93 49.92 571 S15 0.00 30.00 85.00 0.00 53.54 50.59 11.87 76.43 12.56 54.57 570 S16 0.00 20.00 85.00 0.00 58.50 58.47 13.02 81.00 5.19 59.16 569 S17 0.00 10.00 85.00 0.00 63.50 66.60 14.05 85.30 -1.63 63.79 568 S18 0.00 0.00 85.00 0.00 68.44 75.40 14.84 89.58 -9.06 69.13 495 S19 0.00 100.00 70.00 0.00 29.38 16.17 6.21 47.20 64.04 24.51 494 S20 0.00 85.00 70.00 0.00 35.17 22.92 9.20 54.99 51.25 26.13 493 S21 0.00 70.00 70.00 0.00 39.26 28.64 11.17 60.46 41.03 29.14 492 S22 0.00 55.00 70.00 0.00 44.37 35.75 13.32 66.33 31.15 33.04 491 S23 0.00 40.00 70.00 0.00 50.08 44.42 15.48 72.51 20.40 38.10 490 S24 0.00 30.00 70.00 0.00 54.76 51.55 16.97 77.01 13.15 42.30 489 S25 0.00 20.00 70.00 0.00 59.47 59.00 18.72 81.29 6.26 45.74 488 S26 0.00 10.00 70.00 0.00 64.54 67.35 20.12 85.68 -0.89 50.36 487 S27 0.00 0.00 70.00 0.00 69.42 76.02 21.28 89.87 -8.20 55.21 843 S28 0.00 100.00 40.00 20.00 22.88 12.89 8.68 42.60 56.95 6.61 842 S29 0.00 70.00 40.00 20.00 30.31 22.34 15.06 54.39 36.57 7.90 841 S30 0.00 40.00 40.00 20.00 38.35 34.00 20.93 64.96 18.74 12.97 840 S31 0.00 20.00 40.00 20.00 45.30 44.72 25.63 72.71 6.34 17.49 839 S32 0.00 10.00 40.00 20.00 48.85 50.39 27.77 76.31 0.71 20.02 838 S33 0.00 0.00 40.00 20.00 51.67 55.45 29.30 79.30 -4.65 22.67 666 T1 10.00 100.00 100.00 0.00 24.27 13.55 2.47 43.58 58.87 40.62 665 T2 10.00 85.00 100.00 0.00 28.54 19.17 3.54 50.88 44.95 45.29 664 T3 10.00 70.00 100.00 0.00 32.44 24.54 4.36 56.62 34.75 50.13 663 T4 10.00 55.00 100.00 0.00 36.59 30.86 5.29 62.39 24.11 55.10 662 T5 10.00 40.00 100.00 0.00 41.21 38.24 6.04 68.20 13.69 61.51 661 T6 10.00 30.00 100.00 0.00 45.16 44.56 6.70 72.60 6.39 66.15 660 T7 10.00 20.00 100.00 0.00 49.05 51.10 7.25 76.74 -0.59 70.99 659 T8 10.00 10.00 100.00 0.00 53.07 58.04 7.81 80.76 -7.32 75.68 658 T9 10.00 0.00 100.00 0.00 57.62 66.12 8.50 85.06 -14.44 80.47 585 T10 10.00 100.00 85.00 0.00 25.05 14.11 4.59 44.39 58.75 27.79 584 T11 10.00 85.00 85.00 0.00 29.87 20.22 6.57 52.09 44.84 31.34 583 T12 10.00 70.00 85.00 0.00 33.76 25.71 8.02 57.76 34.49 35.22 582 T13 10.00 55.00 85.00 0.00 37.59 31.56 9.31 62.98 24.84 39.53 581 T14 10.00 40.00 85.00 0.00 42.93 39.78 10.85 69.31 14.08 45.37 580 T15 10.00 30.00 85.00 0.00 46.81 45.93 11.83 73.50 7.20 49.62 579 T16 10.00 20.00 85.00 0.00 51.08 52.97 12.84 77.86 0.00 54.23 578 T17 10.00 10.00 85.00 0.00 55.18 59.97 13.82 81.82 -6.52 58.39 577 T18 10.00 0.00 85.00 0.00 59.29 67.73 14.48 85.87 -13.91 63.65 504 T19 10.00 100.00 70.00 0.00 25.57 14.41 6.12 44.82 59.07 20.81 503 T20 10.00 85.00 70.00 0.00 30.75 20.70 9.12 52.62 45.85 22.31 502 T21 10.00 70.00 70.00 0.00 34.40 26.06 11.08 58.09 35.28 25.31 501 T22 10.00 55.00 70.00 0.00 38.78 32.37 13.12 63.65 25.75 28.97 500 T23 10.00 40.00 70.00 0.00 44.25 40.72 15.43 69.98 15.06 33.87 499 T24 10.00 30.00 70.00 0.00 47.97 46.77 16.66 74.04 8.09 37.91 498 T25 10.00 20.00 70.00 0.00 52.00 53.50 18.26 78.17 1.08 41.37 497 T26 10.00 10.00 70.00 0.00 56.13 60.69 19.51 82.21 -5.82 45.65 496 T27 10.00 0.00 70.00 0.00 60.72 68.79 20.94 86.40 -12.80 49.92 849 T28 10.00 100.00 40.00 20.00 20.37 11.72 8.53 40.76 53.12 3.98 848 T29 10.00 70.00 40.00 20.00 27.41 20.86 15.07 52.80 32.23 5.14 847 T30 10.00 40.00 40.00 20.00 34.36 31.34 20.63 62.79 14.89 9.83 846 T31 10.00 20.00 40.00 20.00 40.48 41.06 25.04 70.22 2.77 14.25 845 T32 10.00 10.00 40.00 20.00 43.52 46.15 27.18 73.64 -2.83 16.42 844 T33 10.00 0.00 40.00 20.00 46.02 50.72 28.83 76.51 -8.00 18.62 675 U1 20.00 100.00 100.00 0.00 21.06 12.07 2.49 41.32 54.07 36.58 674 U2 20.00 85.00 100.00 0.00 25.01 17.36 3.55 48.71 39.96 41.45 673 U3 20.00 70.00 100.00 0.00 28.48 22.36 4.42 54.41 29.49 46.00 672 U4 20.00 55.00 100.00 0.00 32.16 28.10 5.31 59.98 19.25 50.87 671 U5 20.00 40.00 100.00 0.00 36.01 34.66 5.97 65.48 8.86 57.13 670 U6 20.00 30.00 100.00 0.00 39.39 40.25 6.57 69.65 1.83 61.63 669 U7 20.00 20.00 100.00 0.00 42.79 46.25 7.18 73.71 -5.31 66.05 668 U8 20.00 10.00 100.00 0.00 45.92 52.15 7.65 77.37 -11.98 70.44 667 U9 20.00 0.00 100.00 0.00 49.84 59.25 8.32 81.43 -18.68 74.88 594 U10 20.00 100.00 85.00 0.00 21.75 12.56 4.54 42.09 54.00 24.07 593 U11 20.00 85.00 85.00 0.00 26.25 18.40 6.52 49.98 39.68 27.94 592 U12 20.00 70.00 85.00 0.00 29.71 23.53 8.00 55.61 29.05 31.58 591 U13 20.00 55.00 85.00 0.00 33.10 28.87 9.30 60.67 19.62 35.57 590 U14 20.00 40.00 85.00 0.00 37.66 36.14 10.68 66.63 9.32 41.29 589 U15 20.00 30.00 85.00 0.00 41.03 41.68 11.64 70.65 2.58 45.26 588 U16 20.00 20.00 85.00 0.00 44.65 47.99 12.66 74.82 -4.64 49.51 587 U17 20.00 10.00 85.00 0.00 48.43 54.46 13.70 78.73 -10.87 53.40 586 U18 20.00 0.00 85.00 0.00 51.73 61.06 14.37 82.41 -17.90 57.97 513 U19 20.00 100.00 70.00 0.00 22.18 12.77 6.06 42.42 54.54 16.96 512 U20 20.00 85.00 70.00 0.00 26.90 18.76 9.00 50.40 40.51 18.90 511 U21 20.00 70.00 70.00 0.00 30.18 23.60 10.86 55.69 30.49 21.86 510 U22 20.00 55.00 70.00 0.00 34.16 29.58 12.92 61.29 20.66 25.46 509 U23 20.00 40.00 70.00 0.00 38.73 36.84 14.96 67.16 10.46 30.18 508 U24 20.00 30.00 70.00 0.00 42.26 42.61 16.43 71.29 3.55 33.70 507 U25 20.00 20.00 70.00 0.00 45.62 48.50 17.79 75.14 -3.22 37.19 506 U26 20.00 10.00 70.00 0.00 49.31 55.10 19.14 79.10 -10.07 41.07 505 U27 20.00 0.00 70.00 0.00 52.70 61.69 20.35 82.75 -16.83 44.82 855 U28 20.00 100.00 40.00 20.00 18.03 10.56 8.42 38.83 49.57 1.06 854 U29 20.00 70.00 40.00 20.00 24.66 19.23 14.81 50.96 28.74 2.61 853 U30 20.00 40.00 40.00 20.00 30.86 28.93 20.33 60.72 11.33 6.89 852 U31 20.00 20.00 40.00 20.00 36.04 37.57 24.53 67.70 -0.59 10.81 851 U32 20.00 10.00 40.00 20.00 38.61 42.00 26.52 70.87 -5.89 12.77 850 U33 20.00 0.00 40.00 20.00 41.05 46.42 28.23 73.82 -11.00 14.96 684 V1 30.00 100.00 100.00 0.00 17.48 10.26 2.40 38.31 48.89 32.16 683 V2 30.00 85.00 100.00 0.00 20.99 15.09 3.46 45.76 34.58 37.02 682 V3 30.00 70.00 100.00 0.00 23.76 19.42 4.21 51.17 23.95 41.65 681 V4 30.00 55.00 100.00 0.00 26.86 24.45 5.03 56.54 13.88 46.35 680 V5 30.00 40.00 100.00 0.00 30.45 30.64 5.71 62.20 3.43 52.70 679 V6 30.00 30.00 100.00 0.00 33.15 35.48 6.29 66.12 -3.70 56.77 678 V7 30.00 20.00 100.00 0.00 36.13 40.92 6.94 70.12 -10.72 60.83 677 V8 30.00 10.00 100.00 0.00 38.62 45.87 7.37 73.46 -17.05 64.84 676 V9 30.00 0.00 100.00 0.00 41.30 51.35 7.91 76.89 -23.47 68.60 603 V10 30.00 100.00 85.00 0.00 18.25 10.80 4.44 39.24 48.95 19.71 602 V11 30.00 85.00 85.00 0.00 21.99 15.91 6.40 46.85 34.60 23.05 601 V12 30.00 70.00 85.00 0.00 25.13 20.68 7.87 52.60 23.70 26.87 600 V13 30.00 55.00 85.00 0.00 28.18 25.56 9.05 57.62 14.47 31.20 599 V14 30.00 40.00 85.00 0.00 32.18 32.13 10.53 63.45 4.36 36.29 598 V15 30.00 30.00 85.00 0.00 35.09 37.24 11.50 67.46 -2.75 40.19 597 V16 30.00 20.00 85.00 0.00 38.03 42.67 12.45 71.33 -9.74 44.08 596 V17 30.00 10.00 85.00 0.00 41.28 48.44 13.45 75.10 -15.84 47.81 595 V18 30.00 0.00 85.00 0.00 44.03 54.05 14.13 78.49 -22.25 51.83 522 V19 30.00 100.00 70.00 0.00 18.75 11.08 5.96 39.72 49.49 12.76 521 V20 30.00 85.00 70.00 0.00 22.70 16.33 8.79 47.40 35.47 14.50 520 V21 30.00 70.00 70.00 0.00 25.48 20.66 10.63 52.57 25.29 17.21 519 V22 30.00 55.00 70.00 0.00 28.88 25.96 12.57 58.00 15.58 20.75 518 V23 30.00 40.00 70.00 0.00 33.14 32.84 14.73 64.03 5.28 25.36 517 V24 30.00 30.00 70.00 0.00 35.75 37.62 15.86 67.74 -1.75 28.94 516 V25 30.00 20.00 70.00 0.00 38.90 43.11 17.44 71.63 -8.27 31.93 515 V26 30.00 10.00 70.00 0.00 42.02 48.90 18.88 75.39 -14.83 35.22 514 V27 30.00 0.00 70.00 0.00 44.69 54.41 19.77 78.70 -21.23 39.05 861 V28 40.00 100.00 40.00 20.00 13.37 8.21 8.19 34.42 41.46 -5.69 860 V29 40.00 70.00 40.00 20.00 18.52 15.45 14.36 46.25 20.16 -4.34 859 V30 40.00 40.00 40.00 20.00 23.48 23.60 19.76 55.69 3.23 -0.61 858 V31 40.00 20.00 40.00 20.00 27.37 30.59 23.69 62.16 -8.29 2.80 857 V32 40.00 10.00 40.00 20.00 29.26 34.14 25.73 65.07 -13.45 4.14 856 V33 40.00 0.00 40.00 20.00 30.65 37.11 27.05 67.36 -18.08 5.80 693 W1 40.00 100.00 100.00 0.00 14.32 8.60 2.27 35.21 44.06 27.90 692 W2 40.00 85.00 100.00 0.00 17.44 12.99 3.29 42.75 29.51 32.96 691 W3 40.00 70.00 100.00 0.00 19.80 16.94 4.05 48.18 18.34 37.43 690 W4 40.00 55.00 100.00 0.00 22.48 21.44 4.87 53.43 8.46 41.85 689 W5 40.00 40.00 100.00 0.00 25.27 26.72 5.54 58.71 -2.03 47.52 688 W6 40.00 30.00 100.00 0.00 27.66 31.13 6.11 62.62 -9.13 51.56 687 W7 40.00 20.00 100.00 0.00 29.93 35.58 6.73 66.20 -15.78 54.98 686 W8 40.00 10.00 100.00 0.00 32.39 40.41 7.20 69.76 -22.07 59.16 685 W9 40.00 0.00 100.00 0.00 34.86 45.35 7.76 73.12 -27.95 62.69 612 W10 40.00 100.00 85.00 0.00 15.14 9.20 4.28 36.37 43.99 15.70 611 W11 40.00 85.00 85.00 0.00 18.34 13.76 6.10 43.89 29.42 19.29 610 W12 40.00 70.00 85.00 0.00 21.16 18.15 7.55 49.68 18.47 23.12 609 W13 40.00 55.00 85.00 0.00 23.72 22.51 8.90 54.56 9.16 26.45 608 W14 40.00 40.00 85.00 0.00 27.03 28.29 10.18 60.15 -1.01 31.71 607 W15 40.00 30.00 85.00 0.00 29.56 32.88 11.18 64.06 -7.94 35.29 606 W16 40.00 20.00 85.00 0.00 32.05 37.61 12.13 67.73 -14.54 38.81 605 W17 40.00 10.00 85.00 0.00 34.32 42.23 13.06 71.03 -20.78 41.85 604 W18 40.00 0.00 85.00 0.00 36.98 47.41 13.79 74.45 -26.61 45.77 531 W19 40.00 100.00 70.00 0.00 15.67 9.53 5.80 36.99 44.45 8.81 530 W20 40.00 85.00 70.00 0.00 19.01 14.15 8.46 44.45 30.46 10.60 529 W21 40.00 70.00 70.00 0.00 21.56 18.23 10.30 49.77 20.01 13.42 528 W22 40.00 55.00 70.00 0.00 24.36 22.83 12.07 54.90 10.48 16.84 527 W23 40.00 40.00 70.00 0.00 27.65 28.67 14.14 60.49 0.04 20.78 526 W24 40.00 30.00 70.00 0.00 30.33 33.38 15.50 64.47 -6.82 24.18 525 W25 40.00 20.00 70.00 0.00 32.96 38.19 17.10 68.16 -13.16 26.74 524 W26 40.00 10.00 70.00 0.00 35.20 42.86 18.24 71.46 -19.62 29.85 523 W27 40.00 0.00 70.00 0.00 37.99 48.18 19.45 74.94 -25.43 33.23 867 W28 70.00 100.00 40.00 20.00 7.90 5.30 7.55 27.58 29.30 -15.01 866 W29 70.00 70.00 40.00 20.00 11.43 10.80 13.32 39.24 7.52 -13.67 865 W30 70.00 40.00 40.00 20.00 14.57 16.68 18.29 47.86 -8.94 -10.94 864 W31 70.00 20.00 40.00 20.00 17.12 21.74 22.04 53.75 -19.64 -8.56 863 W32 70.00 10.00 40.00 20.00 18.02 23.86 23.52 55.95 -24.25 -7.58 862 W33 70.00 0.00 40.00 20.00 18.83 25.87 24.84 57.91 -28.51 -6.63 702 X1 55.00 100.00 100.00 0.00 10.58 6.80 2.30 31.35 35.25 21.01 701 X2 55.00 85.00 100.00 0.00 12.87 10.45 3.22 38.64 20.02 26.33 700 X3 55.00 70.00 100.00 0.00 14.69 13.68 3.91 43.77 9.39 30.67 699 X4 55.00 55.00 100.00 0.00 16.81 17.55 4.71 48.94 -0.57 34.97 698 X5 55.00 40.00 100.00 0.00 18.93 21.87 5.31 53.89 -10.65 40.37 697 X6 55.00 30.00 100.00 0.00 20.86 25.64 5.87 57.69 -17.45 44.16 696 X7 55.00 20.00 100.00 0.00 22.59 29.32 6.42 61.06 -23.90 47.48 695 X8 55.00 10.00 100.00 0.00 24.26 32.92 6.93 64.10 -29.60 50.53 694 X9 55.00 0.00 100.00 0.00 25.72 36.41 7.27 66.83 -35.16 53.81 621 X10 55.00 100.00 85.00 0.00 11.32 7.32 4.18 32.52 35.67 9.67 620 X11 55.00 85.00 85.00 0.00 13.81 11.20 6.06 39.92 20.55 12.65 619 X12 55.00 70.00 85.00 0.00 15.99 14.93 7.40 45.54 9.44 16.56 618 X13 55.00 55.00 85.00 0.00 17.97 18.54 8.66 50.14 0.54 19.70 617 X14 55.00 40.00 85.00 0.00 20.55 23.32 10.02 55.40 -9.08 24.04 616 X15 55.00 30.00 85.00 0.00 22.55 27.17 11.02 59.13 -15.80 27.30 615 X16 55.00 20.00 85.00 0.00 24.35 30.96 11.77 62.47 -22.20 30.78 614 X17 55.00 10.00 85.00 0.00 26.00 34.59 12.61 65.43 -27.98 33.46 613 X18 55.00 0.00 85.00 0.00 27.73 38.46 13.14 68.36 -33.60 37.04 540 X19 55.00 100.00 70.00 0.00 11.71 7.52 5.56 32.96 36.60 3.00 539 X20 55.00 85.00 70.00 0.00 14.41 11.57 8.25 40.52 21.73 4.62 538 X21 55.00 70.00 70.00 0.00 16.53 15.09 10.03 45.76 11.58 7.40 537 X22 55.00 55.00 70.00 0.00 18.79 19.11 11.85 50.82 1.85 10.47 536 X23 55.00 40.00 70.00 0.00 21.32 23.93 13.79 56.02 -8.07 14.00 535 X24 55.00 30.00 70.00 0.00 22.95 27.36 14.89 59.31 -14.73 16.82 534 X25 55.00 20.00 70.00 0.00 24.93 31.24 16.39 62.71 -20.73 19.00 533 X26 55.00 10.00 70.00 0.00 27.06 35.43 17.76 66.08 -26.44 21.65 532 X27 55.00 0.00 70.00 0.00 28.92 39.40 18.79 69.04 -31.87 24.48 873 X28 100.00 100.00 40.00 20.00 3.82 3.06 6.91 20.30 13.94 -24.92 872 X29 100.00 70.00 40.00 20.00 5.74 6.72 12.09 31.17 -8.11 -24.13 871 X30 100.00 40.00 40.00 20.00 7.61 10.76 16.72 39.17 -23.31 -22.37 870 X31 100.00 20.00 40.00 20.00 8.93 13.89 19.99 44.07 -32.70 -21.12 869 X32 100.00 10.00 40.00 20.00 9.41 15.20 21.26 45.91 -36.65 -20.54 868 X33 100.00 0.00 40.00 20.00 9.80 16.33 22.25 47.40 -39.91 -19.92 711 Y1 70.00 100.00 100.00 0.00 7.88 5.41 2.22 27.88 27.84 15.68 710 Y2 70.00 85.00 100.00 0.00 9.70 8.62 3.18 35.24 11.70 20.75 709 Y3 70.00 70.00 100.00 0.00 11.12 11.41 3.84 40.26 0.91 25.06 708 Y4 70.00 55.00 100.00 0.00 12.72 14.57 4.52 45.04 -8.59 29.30 707 Y5 70.00 40.00 100.00 0.00 14.33 18.21 5.09 49.75 -18.58 34.35 706 Y6 70.00 30.00 100.00 0.00 15.88 21.33 5.61 53.31 -24.70 37.84 705 Y7 70.00 20.00 100.00 0.00 17.03 24.21 6.08 56.30 -31.08 40.79 704 Y8 70.00 10.00 100.00 0.00 18.27 27.15 6.55 59.11 -36.54 43.54 703 Y9 70.00 0.00 100.00 0.00 19.32 29.88 6.83 61.55 -41.68 46.54 630 Y10 70.00 100.00 85.00 0.00 8.48 5.89 4.11 29.13 27.84 4.23 629 Y11 70.00 85.00 85.00 0.00 10.42 9.16 5.79 36.30 12.73 7.66 628 Y12 70.00 70.00 85.00 0.00 12.01 12.18 6.95 41.50 1.84 11.45 627 Y13 70.00 55.00 85.00 0.00 13.69 15.39 8.29 46.16 -7.09 14.18 626 Y14 70.00 40.00 85.00 0.00 15.62 19.34 9.47 51.08 -16.56 18.45 625 Y15 70.00 30.00 85.00 0.00 17.15 22.45 10.38 54.50 -22.69 21.32 624 Y16 70.00 20.00 85.00 0.00 18.46 25.49 11.11 57.55 -28.86 24.30 623 Y17 70.00 10.00 85.00 0.00 19.77 28.55 11.98 60.38 -34.41 26.57 622 Y18 70.00 0.00 85.00 0.00 21.20 31.77 12.46 63.15 -39.40 29.94 549 Y19 70.00 100.00 70.00 0.00 8.86 6.07 5.45 29.60 29.06 -2.22 548 Y20 70.00 85.00 70.00 0.00 11.03 9.53 7.92 36.99 14.30 -0.23 547 Y21 70.00 70.00 70.00 0.00 12.78 12.65 9.64 42.23 3.92 2.61 546 Y22 70.00 55.00 70.00 0.00 14.66 16.10 11.42 47.10 -5.09 5.34 545 Y23 70.00 40.00 70.00 0.00 16.66 20.18 13.28 52.04 -14.78 8.52 544 Y24 70.00 30.00 70.00 0.00 18.01 23.17 14.57 55.25 -21.30 10.64 543 Y25 70.00 20.00 70.00 0.00 19.41 26.22 15.85 58.25 -27.01 12.60 542 Y26 70.00 10.00 70.00 0.00 20.88 29.45 17.06 61.18 -32.40 14.80 541 Y27 70.00 0.00 70.00 0.00 21.99 32.39 17.87 63.66 -37.88 17.23 879 Y28 0.00 100.00 70.00 20.00 22.49 12.73 5.32 42.35 56.29 20.42 878 Y29 0.00 70.00 70.00 20.00 29.81 22.32 9.33 54.36 34.81 24.58 877 Y30 0.00 40.00 70.00 20.00 37.37 33.65 12.59 64.68 16.78 32.21 876 Y31 0.00 20.00 70.00 20.00 43.51 43.78 14.65 72.08 3.87 39.44 875 Y32 0.00 10.00 70.00 20.00 47.44 50.00 16.18 76.07 -2.13 42.54 874 Y33 0.00 0.00 70.00 20.00 50.11 54.96 16.80 79.02 -7.58 46.16 720 Z1 85.00 100.00 100.00 0.00 5.24 4.02 2.23 23.74 18.15 8.51 719 Z2 85.00 85.00 100.00 0.00 6.51 6.61 3.08 30.91 1.37 14.06 718 Z3 85.00 70.00 100.00 0.00 7.53 8.91 3.71 35.82 -9.62 18.19 717 Z4 85.00 55.00 100.00 0.00 8.58 11.37 4.31 40.20 -19.03 22.13 716 Z5 85.00 40.00 100.00 0.00 9.76 14.30 4.91 44.66 -28.45 26.52 715 Z6 85.00 30.00 100.00 0.00 10.64 16.52 5.33 47.65 -34.53 29.51 714 Z7 85.00 20.00 100.00 0.00 11.57 18.89 5.82 50.56 -40.30 32.13 713 Z8 85.00 10.00 100.00 0.00 12.58 21.37 6.26 53.35 -45.30 34.91 712 Z9 85.00 0.00 100.00 0.00 13.41 23.53 6.61 55.61 -49.64 37.26 639 Z10 85.00 100.00 85.00 0.00 5.84 4.46 4.00 25.13 19.13 -2.01 638 Z11 85.00 85.00 85.00 0.00 7.12 7.05 5.52 31.93 3.21 1.42 637 Z12 85.00 70.00 85.00 0.00 8.25 9.48 6.74 36.89 -7.63 4.42 636 Z13 85.00 55.00 85.00 0.00 9.52 12.13 7.89 41.42 -16.41 7.55 635 Z14 85.00 40.00 85.00 0.00 10.86 15.30 9.14 46.04 -25.93 10.92 634 Z15 85.00 30.00 85.00 0.00 11.86 17.63 9.87 49.04 -31.66 13.58 633 Z16 85.00 20.00 85.00 0.00 12.78 20.01 10.69 51.85 -37.55 15.78 632 Z17 85.00 10.00 85.00 0.00 13.99 22.72 11.73 54.78 -42.36 17.64 631 Z18 85.00 0.00 85.00 0.00 14.85 24.99 12.03 57.07 -46.93 20.71 558 Z19 85.00 100.00 70.00 0.00 6.19 4.61 5.27 25.60 20.87 -8.23 557 Z20 85.00 85.00 70.00 0.00 7.76 7.46 7.70 32.83 5.43 -6.53 556 Z21 85.00 70.00 70.00 0.00 8.98 9.95 9.32 37.76 -5.08 -4.00 555 Z22 85.00 55.00 70.00 0.00 10.50 12.98 11.16 42.73 -14.34 -1.40 554 Z23 85.00 40.00 70.00 0.00 11.85 16.13 12.81 47.14 -23.53 1.35 553 Z24 85.00 30.00 70.00 0.00 12.81 18.45 13.85 50.04 -29.52 3.53 552 Z25 85.00 20.00 70.00 0.00 13.70 20.76 15.06 52.69 -35.18 4.96 551 Z26 85.00 10.00 70.00 0.00 14.90 23.45 16.37 55.53 -40.01 6.68 550 Z27 85.00 0.00 70.00 0.00 15.72 25.68 17.25 57.73 -44.67 8.41 885 Z28 10.00 100.00 70.00 20.00 20.12 11.59 5.33 40.55 52.84 17.22 884 Z29 10.00 70.00 70.00 20.00 26.79 20.56 9.30 52.46 31.18 21.43 883 Z30 10.00 40.00 70.00 20.00 33.76 31.36 12.62 62.81 12.71 28.91 882 Z31 10.00 20.00 70.00 20.00 39.47 40.89 14.87 70.10 0.14 35.46 881 Z32 10.00 10.00 70.00 20.00 42.09 45.64 15.88 73.31 -5.67 38.50 880 Z33 10.00 0.00 70.00 20.00 44.62 50.39 16.72 76.31 -11.15 41.67 729 2A1 100.00 100.00 100.00 0.00 2.96 2.72 2.08 18.89 6.23 1.55 728 2A2 100.00 85.00 100.00 0.00 3.59 4.62 2.80 25.63 -12.50 7.03 727 2A3 100.00 70.00 100.00 0.00 4.23 6.35 3.37 30.29 -23.14 10.95 726 2A4 100.00 55.00 100.00 0.00 4.95 8.36 4.03 34.72 -32.80 14.36 725 2A5 100.00 40.00 100.00 0.00 5.54 10.37 4.42 38.50 -42.00 18.58 724 2A6 100.00 30.00 100.00 0.00 6.03 11.89 4.72 41.04 -47.38 21.29 723 2A7 100.00 20.00 100.00 0.00 6.67 13.78 5.21 43.92 -53.06 23.68 722 2A8 100.00 10.00 100.00 0.00 7.25 15.52 5.61 46.34 -57.67 25.85 721 2A9 100.00 0.00 100.00 0.00 7.68 17.02 6.01 48.28 -61.91 27.31 648 2A10 100.00 100.00 85.00 0.00 3.45 3.12 3.72 20.50 7.48 -8.24 647 2A11 100.00 85.00 85.00 0.00 4.28 5.16 5.20 27.19 -9.07 -5.11 646 2A12 100.00 70.00 85.00 0.00 5.08 7.06 6.24 31.94 -19.18 -1.94 645 2A13 100.00 55.00 85.00 0.00 5.79 9.03 7.36 36.04 -28.47 0.36 644 2A14 100.00 40.00 85.00 0.00 6.58 11.30 8.38 40.08 -37.39 3.36 643 2A15 100.00 30.00 85.00 0.00 7.19 13.02 9.12 42.80 -42.95 5.38 642 2A16 100.00 20.00 85.00 0.00 7.96 14.98 9.98 45.61 -47.84 7.30 641 2A17 100.00 10.00 85.00 0.00 8.59 16.83 10.77 48.05 -52.75 8.97 640 2A18 100.00 0.00 85.00 0.00 9.31 18.69 11.14 50.32 -56.47 11.73 567 2A19 100.00 100.00 70.00 0.00 3.73 3.20 4.92 20.81 10.51 -14.67 566 2A20 100.00 85.00 70.00 0.00 4.91 5.59 7.30 28.35 -5.85 -12.66 565 2A21 100.00 70.00 70.00 0.00 5.71 7.49 8.79 32.89 -15.85 -10.53 564 2A22 100.00 55.00 70.00 0.00 6.70 9.81 10.45 37.50 -25.08 -8.22 563 2A23 100.00 40.00 70.00 0.00 7.54 12.12 11.97 41.40 -33.61 -6.14 562 2A24 100.00 30.00 70.00 0.00 8.09 13.78 12.84 43.91 -39.38 -4.29 561 2A25 100.00 20.00 70.00 0.00 8.71 15.57 13.91 46.40 -44.63 -2.91 560 2A26 100.00 10.00 70.00 0.00 9.38 17.35 15.17 48.70 -48.92 -2.19 559 2A27 100.00 0.00 70.00 0.00 9.88 18.97 15.85 50.65 -53.35 -0.49 891 2A28 20.00 100.00 70.00 20.00 17.65 10.41 5.22 38.56 48.72 14.36 890 2A29 20.00 70.00 70.00 20.00 23.56 18.65 9.16 50.28 26.90 18.16 889 2A30 20.00 40.00 70.00 20.00 29.58 28.26 12.23 60.12 9.10 25.40 888 2A31 20.00 20.00 70.00 20.00 34.79 37.08 14.63 67.34 -3.27 31.33 887 2A32 20.00 10.00 70.00 20.00 37.19 41.49 15.74 70.52 -8.97 34.04 886 2A33 20.00 0.00 70.00 20.00 39.51 45.88 16.65 73.47 -14.26 36.94 1050 2B1 0.00 100.00 100.00 40.00 14.67 8.43 1.95 34.87 47.67 30.34 1049 2B2 0.00 70.00 100.00 40.00 19.32 14.77 3.18 45.32 28.27 38.18 1048 2B3 0.00 40.00 100.00 40.00 23.86 21.99 4.27 54.02 12.09 46.21 1047 2B4 0.00 20.00 100.00 40.00 27.82 28.47 5.06 60.31 1.47 52.68 1046 2B5 0.00 0.00 100.00 40.00 31.62 35.16 5.53 65.87 -8.09 59.91 1025 2B6 0.00 100.00 70.00 40.00 15.60 9.14 4.14 36.25 47.21 16.34 1024 2B7 0.00 70.00 70.00 40.00 20.61 15.87 7.13 46.81 28.23 19.86 1023 2B8 0.00 40.00 70.00 40.00 25.29 23.11 9.22 55.19 13.20 26.41 1022 2B9 0.00 20.00 70.00 40.00 29.22 29.53 10.96 61.25 2.89 31.12 1021 2B10 0.00 0.00 70.00 40.00 33.26 36.46 12.35 66.87 -6.52 36.69 1000 2B11 0.00 100.00 40.00 40.00 16.32 9.59 6.72 37.09 47.75 4.84 999 2B12 0.00 70.00 40.00 40.00 21.54 16.33 11.30 47.40 30.12 6.20 998 2B13 0.00 40.00 40.00 40.00 26.47 23.71 15.05 55.80 15.47 10.36 997 2B14 0.00 20.00 40.00 40.00 30.99 30.71 18.26 62.26 5.17 13.95 996 2B15 0.00 0.00 40.00 40.00 35.24 37.78 20.90 67.86 -3.98 18.03 975 2B16 0.00 100.00 20.00 40.00 16.98 9.96 8.86 37.77 48.50 -2.38 974 2B17 0.00 70.00 20.00 40.00 22.54 16.90 15.06 48.14 31.55 -2.88 973 2B18 0.00 40.00 20.00 40.00 27.82 24.59 20.39 56.67 17.16 -0.22 972 2B19 0.00 20.00 20.00 40.00 32.25 31.47 24.46 62.90 6.99 2.67 971 2B20 0.00 0.00 20.00 40.00 36.70 38.61 28.32 68.47 -1.74 5.60 950 2B21 0.00 100.00 0.00 40.00 17.49 10.20 10.73 38.20 49.42 -7.90 949 2B22 0.00 70.00 0.00 40.00 23.33 17.29 18.55 48.62 33.05 -10.20 948 2B23 0.00 40.00 0.00 40.00 28.68 24.94 25.28 57.02 19.01 -8.94 947 2B24 0.00 20.00 0.00 40.00 33.54 32.13 30.97 63.45 9.18 -7.30 946 2B25 0.00 0.00 0.00 40.00 38.42 39.64 36.29 69.21 0.66 -5.20 1405 2B26 100.00 0.00 0.00 70.00 5.68 7.75 14.38 33.45 -18.55 -26.46 1399 2B27 100.00 85.00 85.00 100.00 1.08 1.09 1.03 9.73 1.03 -2.07 897 2B28 40.00 100.00 70.00 20.00 12.88 8.01 5.09 34.00 40.05 7.20 896 2B29 40.00 70.00 70.00 20.00 17.71 15.17 9.00 45.87 17.55 11.09 895 2B30 40.00 40.00 70.00 20.00 22.20 23.01 12.02 55.08 0.06 17.31 894 2B31 40.00 20.00 70.00 20.00 26.05 30.04 14.20 61.69 -11.64 22.69 893 2B32 40.00 10.00 70.00 20.00 28.01 33.71 15.32 64.73 -16.81 25.08 892 2B33 40.00 0.00 70.00 20.00 29.16 36.57 16.13 66.95 -21.93 26.94 1055 2C1 20.00 100.00 100.00 40.00 11.64 6.92 1.88 31.63 41.78 25.46 1054 2C2 20.00 70.00 100.00 40.00 15.48 12.42 3.05 41.88 22.29 33.15 1053 2C3 20.00 40.00 100.00 40.00 19.09 18.54 3.98 50.14 6.33 41.23 1052 2C4 20.00 20.00 100.00 40.00 22.34 24.25 4.85 56.34 -4.70 46.95 1051 2C5 20.00 0.00 100.00 40.00 25.42 29.87 5.38 61.54 -13.60 53.17 1030 2C6 20.00 100.00 70.00 40.00 12.47 7.53 3.98 32.99 41.67 11.65 1029 2C7 20.00 70.00 70.00 40.00 16.57 13.34 6.83 43.27 22.52 15.04 1028 2C8 20.00 40.00 70.00 40.00 20.35 19.56 8.91 51.34 7.43 20.85 1027 2C9 20.00 20.00 70.00 40.00 23.65 25.20 10.56 57.27 -2.83 25.53 1026 2C10 20.00 0.00 70.00 40.00 27.08 31.23 12.06 62.70 -11.77 30.34 1005 2C11 20.00 100.00 40.00 40.00 13.22 7.99 6.51 33.96 42.47 0.37 1004 2C12 20.00 70.00 40.00 40.00 17.54 13.87 11.00 44.05 24.46 1.37 1003 2C13 20.00 40.00 40.00 40.00 21.59 20.30 14.66 52.17 9.80 5.08 1002 2C14 20.00 20.00 40.00 40.00 25.18 26.18 17.63 58.21 -0.29 8.38 1001 2C15 20.00 0.00 40.00 40.00 28.35 31.88 20.06 63.24 -9.07 11.78 980 2C16 20.00 100.00 20.00 40.00 13.61 8.16 8.43 34.31 43.50 -6.76 979 2C17 20.00 70.00 20.00 40.00 18.31 14.27 14.49 44.62 26.12 -7.50 978 2C18 20.00 40.00 20.00 40.00 22.59 20.86 19.56 52.80 11.68 -5.17 977 2C19 20.00 20.00 20.00 40.00 26.52 27.03 23.79 59.00 1.89 -2.82 976 2C20 20.00 0.00 20.00 40.00 30.11 33.09 27.33 64.23 -6.59 -0.06 955 2C21 20.00 100.00 0.00 40.00 14.14 8.42 10.32 34.85 44.49 -12.37 954 2C22 20.00 70.00 0.00 40.00 19.06 14.66 17.86 45.16 27.66 -14.65 953 2C23 20.00 40.00 0.00 40.00 23.82 21.60 24.62 53.60 13.74 -13.66 952 2C24 20.00 20.00 0.00 40.00 27.78 27.71 30.00 59.63 4.26 -12.36 951 2C25 20.00 0.00 0.00 40.00 31.75 34.06 35.07 65.01 -3.92 -10.72 1406 2C26 0.00 100.00 0.00 70.00 9.46 5.94 6.24 29.25 35.55 -6.57 1393 2C27 100.00 85.00 85.00 80.00 1.77 1.87 1.90 14.79 -0.78 -3.77 903 2C28 70.00 100.00 70.00 20.00 7.58 5.27 4.76 27.48 26.79 -2.31 902 2C29 70.00 70.00 70.00 20.00 10.67 10.52 8.29 38.76 4.04 1.42 901 2C30 70.00 40.00 70.00 20.00 13.77 16.50 11.32 47.63 -12.93 6.55 900 2C31 70.00 20.00 70.00 20.00 15.87 21.15 13.11 53.11 -23.89 10.82 899 2C32 70.00 10.00 70.00 20.00 16.98 23.60 14.03 55.68 -28.69 12.78 898 2C33 70.00 0.00 70.00 20.00 17.63 25.48 14.75 57.54 -33.17 14.13 1060 2D1 40.00 100.00 100.00 40.00 8.63 5.43 1.88 27.92 34.36 19.07 1059 2D2 40.00 70.00 100.00 40.00 11.39 9.82 2.98 37.52 14.67 26.14 1058 2D3 40.00 40.00 100.00 40.00 14.20 14.88 3.85 45.47 -0.91 33.97 1057 2D4 40.00 20.00 100.00 40.00 16.69 19.55 4.65 51.32 -11.51 39.37 1056 2D5 40.00 0.00 100.00 40.00 18.92 23.99 5.09 56.08 -20.16 45.22 1035 2D6 40.00 100.00 70.00 40.00 9.41 5.97 3.85 29.34 34.76 6.19 1034 2D7 40.00 70.00 70.00 40.00 12.66 10.85 6.59 39.33 15.63 9.26 1033 2D8 40.00 40.00 70.00 40.00 15.48 15.95 8.61 46.91 0.57 14.29 1032 2D9 40.00 20.00 70.00 40.00 18.03 20.61 10.21 52.52 -9.44 18.48 1031 2D10 40.00 0.00 70.00 40.00 20.44 25.25 11.57 57.32 -17.91 22.51 1010 2D11 40.00 100.00 40.00 40.00 9.93 6.28 6.24 30.10 35.66 -5.11 1009 2D12 40.00 70.00 40.00 40.00 13.61 11.48 10.76 40.37 17.34 -4.24 1008 2D13 40.00 40.00 40.00 40.00 16.64 16.70 14.12 47.88 3.03 -0.91 1007 2D14 40.00 20.00 40.00 40.00 19.60 21.74 17.13 53.75 -6.65 1.82 1006 2D15 40.00 0.00 40.00 40.00 21.94 26.26 19.34 58.28 -14.90 4.75 985 2D16 40.00 100.00 20.00 40.00 10.40 6.52 8.16 30.68 36.79 -12.03 984 2D17 40.00 70.00 20.00 40.00 14.27 11.80 14.15 40.90 19.21 -13.03 983 2D18 40.00 40.00 20.00 40.00 17.78 17.39 19.07 48.75 5.51 -11.11 982 2D19 40.00 20.00 20.00 40.00 20.82 22.51 23.02 54.56 -4.15 -9.04 981 2D20 40.00 0.00 20.00 40.00 23.44 27.21 26.27 59.17 -11.95 -6.97 960 2D21 40.00 100.00 0.00 40.00 10.71 6.62 9.83 30.93 38.09 -17.50 959 2D22 40.00 70.00 0.00 40.00 15.01 12.19 17.32 41.51 21.08 -19.71 958 2D23 40.00 40.00 0.00 40.00 18.68 17.89 23.63 49.36 7.60 -19.15 957 2D24 40.00 20.00 0.00 40.00 21.84 22.95 28.79 55.02 -1.34 -18.36 956 2D25 40.00 0.00 0.00 40.00 24.84 28.02 33.39 59.91 -9.03 -17.06 1407 2D26 0.00 0.00 100.00 70.00 15.54 17.22 3.77 48.53 -6.06 39.77 1387 2D27 100.00 85.00 85.00 60.00 2.38 2.59 2.61 18.31 -2.30 -4.13 909 2D28 100.00 100.00 70.00 20.00 3.45 2.98 4.33 19.97 9.75 -12.84 908 2D29 100.00 70.00 70.00 20.00 4.86 6.23 7.32 29.98 -13.49 -9.94 907 2D30 100.00 40.00 70.00 20.00 6.34 9.96 9.85 37.77 -29.98 -5.79 906 2D31 100.00 20.00 70.00 20.00 7.51 13.05 11.73 42.84 -40.11 -2.94 905 2D32 100.00 10.00 70.00 20.00 7.94 14.34 12.39 44.71 -44.17 -1.65 904 2D33 100.00 0.00 70.00 20.00 8.31 15.49 13.10 46.30 -47.68 -0.88 1065 2E1 70.00 100.00 100.00 40.00 5.20 3.69 1.84 22.62 22.44 10.30 1064 2E2 70.00 70.00 100.00 40.00 6.86 6.93 2.79 31.64 1.81 17.47 1063 2E3 70.00 40.00 100.00 40.00 8.48 10.47 3.54 38.68 -13.36 24.27 1062 2E4 70.00 20.00 100.00 40.00 9.94 13.68 4.16 43.77 -23.22 29.14 1061 2E5 70.00 0.00 100.00 40.00 11.03 16.48 4.57 47.60 -31.42 33.39 1040 2E6 70.00 100.00 70.00 40.00 5.76 4.09 3.70 23.98 23.16 -2.13 1039 2E7 70.00 70.00 70.00 40.00 7.79 7.64 6.09 33.23 3.92 1.00 1038 2E8 70.00 40.00 70.00 40.00 9.92 11.72 8.24 40.76 -10.34 5.07 1037 2E9 70.00 20.00 70.00 40.00 11.48 15.01 9.64 45.65 -19.74 8.50 1036 2E10 70.00 0.00 70.00 40.00 12.86 18.14 10.83 49.67 -27.61 11.57 1015 2E11 70.00 100.00 40.00 40.00 6.20 4.35 5.98 24.79 24.53 -13.05 1014 2E12 70.00 70.00 40.00 40.00 8.63 8.23 10.07 34.46 6.18 -12.22 1013 2E13 70.00 40.00 40.00 40.00 10.91 12.36 13.52 41.78 -7.24 -9.84 1012 2E14 70.00 20.00 40.00 40.00 12.69 15.84 16.13 46.76 -16.18 -7.88 1011 2E15 70.00 0.00 40.00 40.00 14.32 19.18 18.30 50.90 -23.56 -5.72 990 2E16 70.00 100.00 20.00 40.00 6.49 4.46 7.65 25.13 26.08 -19.63 989 2E17 70.00 70.00 20.00 40.00 9.50 8.72 13.37 35.44 9.20 -20.35 988 2E18 70.00 40.00 20.00 40.00 11.88 12.92 18.01 42.65 -4.00 -19.30 987 2E19 70.00 20.00 20.00 40.00 13.78 16.52 21.54 47.65 -12.91 -18.10 986 2E20 70.00 0.00 20.00 40.00 15.37 19.75 24.32 51.55 -20.06 -16.65 965 2E21 70.00 100.00 0.00 40.00 6.69 4.48 9.18 25.21 27.85 -25.16 964 2E22 70.00 70.00 0.00 40.00 10.00 8.97 16.31 35.92 11.14 -26.99 963 2E23 70.00 40.00 0.00 40.00 12.66 13.35 22.28 43.29 -1.42 -27.05 962 2E24 70.00 20.00 0.00 40.00 14.73 16.96 26.86 48.21 -9.48 -26.88 961 2E25 70.00 0.00 0.00 40.00 16.85 20.71 31.25 52.63 -16.25 -26.38 1408 2E26 100.00 100.00 0.00 70.00 2.42 1.95 4.77 15.23 11.85 -23.49 1400 2E27 80.00 65.00 65.00 100.00 1.42 1.44 1.34 12.24 0.72 -2.02 915 2E28 0.00 100.00 100.00 20.00 21.58 12.10 2.34 41.37 56.28 37.94 914 2E29 0.00 70.00 100.00 20.00 28.55 21.44 4.18 53.43 34.00 45.68 913 2E30 0.00 40.00 100.00 20.00 35.68 32.45 5.55 63.71 15.40 56.11 912 2E31 0.00 20.00 100.00 20.00 42.08 42.82 6.55 71.43 2.42 64.80 911 2E32 0.00 10.00 100.00 20.00 45.33 48.26 7.07 74.99 -3.40 68.72 910 2E33 0.00 0.00 100.00 20.00 48.47 53.81 7.54 78.35 -9.12 72.60 1070 2F1 100.00 100.00 100.00 40.00 2.26 2.06 1.69 15.81 6.00 0.14 1069 2F2 100.00 70.00 100.00 40.00 2.87 4.03 2.39 23.77 -16.50 7.18 1068 2F3 100.00 40.00 100.00 40.00 3.53 6.20 3.05 29.90 -31.86 12.49 1067 2F4 100.00 20.00 100.00 40.00 4.17 8.10 3.58 34.19 -40.88 16.26 1066 2F5 100.00 0.00 100.00 40.00 4.74 9.90 3.97 37.66 -48.13 19.75 1045 2F6 100.00 100.00 70.00 40.00 2.76 2.42 3.46 17.55 8.31 -11.63 1044 2F7 100.00 70.00 70.00 40.00 3.75 4.71 5.58 25.90 -11.25 -9.23 1043 2F8 100.00 40.00 70.00 40.00 4.79 7.30 7.45 32.47 -25.08 -6.16 1042 2F9 100.00 20.00 70.00 40.00 5.49 9.26 8.69 36.48 -33.80 -3.97 1041 2F10 100.00 0.00 70.00 40.00 6.27 11.29 9.77 40.06 -40.56 -1.57 1020 2F11 100.00 100.00 40.00 40.00 3.03 2.50 5.28 17.92 11.62 -21.53 1019 2F12 100.00 70.00 40.00 40.00 4.38 5.09 8.91 26.98 -6.81 -21.15 1018 2F13 100.00 40.00 40.00 40.00 5.75 7.93 12.15 33.84 -19.48 -19.70 1017 2F14 100.00 20.00 40.00 40.00 6.73 10.18 14.52 38.17 -27.62 -18.70 1016 2F15 100.00 0.00 40.00 40.00 7.57 12.22 16.31 41.57 -34.09 -17.25 995 2F16 100.00 100.00 20.00 40.00 3.30 2.60 6.85 18.38 14.10 -27.99 994 2F17 100.00 70.00 20.00 40.00 4.99 5.42 11.87 27.90 -2.89 -29.11 993 2F18 100.00 40.00 20.00 40.00 6.59 8.43 16.23 34.87 -14.83 -28.62 992 2F19 100.00 20.00 20.00 40.00 7.60 10.67 19.24 39.02 -22.76 -28.25 991 2F20 100.00 0.00 20.00 40.00 8.62 12.86 21.99 42.55 -28.76 -27.76 970 2F21 100.00 100.00 0.00 40.00 3.50 2.67 8.29 18.65 16.14 -33.25 969 2F22 100.00 70.00 0.00 40.00 5.57 5.77 14.72 28.82 0.13 -35.32 968 2F23 100.00 40.00 0.00 40.00 7.31 8.83 20.16 35.66 -11.01 -35.97 967 2F24 100.00 20.00 0.00 40.00 8.53 11.20 24.18 39.92 -18.24 -36.45 966 2F25 100.00 0.00 0.00 40.00 9.67 13.47 27.80 43.46 -24.01 -36.67 1409 2F26 100.00 0.00 100.00 70.00 2.88 5.55 2.60 28.26 -35.66 13.10 1394 2F27 80.00 65.00 65.00 80.00 3.43 3.60 3.45 22.31 -0.68 -3.35 921 2F28 10.00 100.00 100.00 20.00 19.17 10.96 2.37 39.51 52.57 34.48 920 2F29 10.00 70.00 100.00 20.00 25.56 19.80 4.18 51.61 29.77 42.56 919 2F30 10.00 40.00 100.00 20.00 31.82 29.84 5.56 61.52 11.39 52.25 918 2F31 10.00 20.00 100.00 20.00 37.28 39.09 6.47 68.82 -1.34 60.64 917 2F32 10.00 10.00 100.00 20.00 40.18 44.08 6.99 72.28 -7.04 64.35 916 2F33 10.00 0.00 100.00 20.00 43.03 49.21 7.39 75.58 -12.66 68.39 1175 2G1 0.00 100.00 100.00 60.00 9.71 5.81 1.64 28.93 38.97 23.33 1174 2G2 0.00 70.00 100.00 60.00 12.43 9.73 2.50 37.35 22.63 29.62 1173 2G3 0.00 40.00 100.00 60.00 15.22 14.16 3.25 44.46 9.62 36.20 1172 2G4 0.00 20.00 100.00 60.00 17.57 18.13 3.82 49.65 0.49 41.35 1171 2G5 0.00 0.00 100.00 60.00 19.65 21.81 4.13 53.82 -6.73 46.64 1150 2G6 0.00 100.00 70.00 60.00 10.34 6.33 3.16 30.24 38.22 12.29 1149 2G7 0.00 70.00 70.00 60.00 13.66 10.78 5.29 39.21 22.65 15.15 1148 2G8 0.00 40.00 70.00 60.00 16.21 15.00 6.65 45.63 10.29 19.88 1147 2G9 0.00 20.00 70.00 60.00 18.59 18.93 7.79 50.60 1.77 23.76 1146 2G10 0.00 0.00 70.00 60.00 20.75 22.71 8.60 54.77 -5.42 27.89 1125 2G11 0.00 100.00 40.00 60.00 11.02 6.81 5.01 31.36 38.50 3.04 1124 2G12 0.00 70.00 40.00 60.00 14.40 11.23 8.11 39.97 24.00 4.18 1123 2G13 0.00 40.00 40.00 60.00 17.09 15.58 10.28 46.42 11.82 7.71 1122 2G14 0.00 20.00 40.00 60.00 19.46 19.45 12.08 51.21 3.57 10.45 1121 2G15 0.00 0.00 40.00 60.00 21.63 23.19 13.49 55.27 -3.38 13.50 1100 2G16 0.00 100.00 20.00 60.00 11.28 6.89 6.30 31.56 39.53 -2.84 1099 2G17 0.00 70.00 20.00 60.00 14.75 11.35 10.34 40.16 25.33 -3.28 1098 2G18 0.00 40.00 20.00 60.00 17.83 16.06 13.54 47.05 13.10 -0.81 1097 2G19 0.00 20.00 20.00 60.00 20.06 19.75 15.70 51.55 5.09 1.43 1096 2G20 0.00 0.00 20.00 60.00 22.37 23.57 17.67 55.65 -1.61 3.87 1075 2G21 0.00 100.00 0.00 60.00 11.68 7.13 7.58 32.11 40.06 -7.30 1074 2G22 0.00 70.00 0.00 60.00 15.29 11.67 12.49 40.69 26.31 -8.87 1073 2G23 0.00 40.00 0.00 60.00 18.31 16.23 16.35 47.28 14.64 -7.51 1072 2G24 0.00 20.00 0.00 60.00 20.84 20.17 19.32 52.03 6.85 -5.98 1071 2G25 0.00 0.00 0.00 60.00 23.32 24.13 21.97 56.22 0.21 -4.17 1410 2G26 0.00 100.00 100.00 70.00 7.74 4.77 1.50 26.07 34.35 19.89 1388 2G27 80.00 65.00 65.00 60.00 4.82 5.16 4.89 27.19 -2.02 -3.52 927 2G28 20.00 100.00 100.00 20.00 16.54 9.63 2.25 37.17 48.63 31.45 926 2G29 20.00 70.00 100.00 20.00 22.27 17.78 4.03 49.23 25.63 39.33 925 2G30 20.00 40.00 100.00 20.00 27.94 27.20 5.35 59.16 6.91 49.22 924 2G31 20.00 20.00 100.00 20.00 32.72 35.57 6.27 66.19 -5.53 56.98 923 2G32 20.00 10.00 100.00 20.00 35.07 39.90 6.71 69.40 -11.19 60.58 922 2G33 20.00 0.00 100.00 20.00 37.43 44.29 7.13 72.42 -16.37 64.04 1180 2H1 20.00 100.00 100.00 60.00 7.91 4.92 1.63 26.50 34.08 19.25 1179 2H2 20.00 70.00 100.00 60.00 10.17 8.25 2.36 34.49 18.61 25.87 1178 2H3 20.00 40.00 100.00 60.00 12.44 12.14 3.09 41.44 5.09 32.15 1177 2H4 20.00 20.00 100.00 60.00 14.25 15.44 3.66 46.23 -3.87 36.46 1176 2H5 20.00 0.00 100.00 60.00 15.86 18.51 3.94 50.11 -11.01 41.41 1155 2H6 20.00 100.00 70.00 60.00 8.39 5.29 2.99 27.54 33.91 8.90 1154 2H7 20.00 70.00 70.00 60.00 11.07 9.10 4.97 36.17 18.15 11.53 1153 2H8 20.00 40.00 70.00 60.00 13.26 12.85 6.31 42.54 5.75 16.03 1152 2H9 20.00 20.00 70.00 60.00 15.23 16.25 7.37 47.30 -2.56 19.73 1151 2H10 20.00 0.00 70.00 60.00 17.07 19.59 8.25 51.37 -9.61 23.32 1130 2H11 20.00 100.00 40.00 60.00 8.99 5.70 4.77 28.65 34.25 -0.34 1129 2H12 20.00 70.00 40.00 60.00 11.84 9.62 7.74 37.15 19.42 0.75 1128 2H13 20.00 40.00 40.00 60.00 14.13 13.45 9.98 43.44 7.39 3.58 1127 2H14 20.00 20.00 40.00 60.00 16.15 16.89 11.74 48.12 -0.77 6.12 1126 2H15 20.00 0.00 40.00 60.00 18.15 20.32 13.28 52.20 -7.40 8.79 1105 2H16 20.00 100.00 20.00 60.00 9.36 5.89 6.12 29.14 35.22 -6.21 1104 2H17 20.00 70.00 20.00 60.00 12.26 9.85 10.02 37.57 20.50 -6.68 1103 2H18 20.00 40.00 20.00 60.00 14.89 13.97 13.13 44.19 8.82 -4.60 1102 2H19 20.00 20.00 20.00 60.00 17.02 17.47 15.47 48.85 0.97 -2.66 1101 2H20 20.00 0.00 20.00 60.00 18.63 20.43 17.09 52.32 -5.41 -0.56 1080 2H21 20.00 100.00 0.00 60.00 9.59 6.01 7.28 29.45 35.77 -10.67 1079 2H22 20.00 70.00 0.00 60.00 12.84 10.17 12.16 38.15 21.91 -12.29 1078 2H23 20.00 40.00 0.00 60.00 15.32 14.07 15.78 44.33 10.77 -11.23 1077 2H24 20.00 20.00 0.00 60.00 17.54 17.63 18.75 49.04 2.96 -9.92 1076 2H25 20.00 0.00 0.00 60.00 19.47 20.90 21.12 52.84 -3.41 -8.30 1411 2H26 40.00 40.00 0.00 70.00 9.87 9.60 12.17 37.11 4.97 -14.10 1382 2H27 80.00 65.00 65.00 40.00 6.47 7.04 6.69 31.89 -3.21 -4.02 933 2H28 40.00 100.00 100.00 20.00 11.78 7.23 2.17 32.33 39.77 23.88 932 2H29 40.00 70.00 100.00 20.00 15.96 13.81 3.69 43.96 16.08 32.40 931 2H30 40.00 40.00 100.00 20.00 20.02 21.20 4.97 53.17 -2.06 40.84 930 2H31 40.00 20.00 100.00 20.00 23.62 27.96 5.78 59.85 -14.08 48.32 929 2H32 40.00 10.00 100.00 20.00 25.34 31.35 6.22 62.80 -19.37 51.37 928 2H33 40.00 0.00 100.00 20.00 26.90 34.62 6.57 65.45 -24.37 54.38 1185 2I1 40.00 100.00 100.00 60.00 6.03 3.94 1.55 23.46 28.39 14.83 1184 2I2 40.00 70.00 100.00 60.00 7.70 6.70 2.33 31.11 12.22 20.33 1183 2I3 40.00 40.00 100.00 60.00 9.32 9.75 2.93 37.39 -0.69 26.29 1182 2I4 40.00 20.00 100.00 60.00 10.75 12.53 3.41 42.04 -9.55 30.89 1181 2I5 40.00 0.00 100.00 60.00 12.05 15.17 3.80 45.86 -16.66 34.96 1160 2I6 40.00 100.00 70.00 60.00 6.44 4.29 2.89 24.62 27.77 4.57 1159 2I7 40.00 70.00 70.00 60.00 8.53 7.46 4.75 32.84 12.31 6.97 1158 2I8 40.00 40.00 70.00 60.00 10.49 10.88 6.23 39.37 0.02 10.94 1157 2I9 40.00 20.00 70.00 60.00 11.77 13.43 7.06 43.41 -8.04 14.30 1156 2I10 40.00 0.00 70.00 60.00 13.21 16.17 7.90 47.20 -14.67 17.45 1135 2I11 40.00 100.00 40.00 60.00 6.92 4.60 4.55 25.55 28.68 -4.49 1134 2I12 40.00 70.00 40.00 60.00 9.41 8.12 7.57 34.24 13.65 -3.58 1133 2I13 40.00 40.00 40.00 60.00 11.40 11.55 9.80 40.49 1.94 -0.93 1132 2I14 40.00 20.00 40.00 60.00 12.98 14.42 11.50 44.83 -5.94 1.18 1131 2I15 40.00 0.00 40.00 60.00 14.21 16.89 12.66 48.12 -12.26 3.46 1110 2I16 40.00 100.00 20.00 60.00 7.23 4.76 5.82 26.04 29.65 -10.17 1109 2I17 40.00 70.00 20.00 60.00 9.96 8.45 9.90 34.91 15.18 -10.86 1108 2I18 40.00 40.00 20.00 60.00 11.97 11.86 12.76 40.99 3.81 -9.11 1107 2I19 40.00 20.00 20.00 60.00 13.63 14.76 15.00 45.31 -3.82 -7.59 1106 2I20 40.00 0.00 20.00 60.00 14.94 17.27 16.59 48.60 -9.90 -5.80 1085 2I21 40.00 100.00 0.00 60.00 7.50 4.88 6.97 26.40 30.64 -14.67 1084 2I22 40.00 70.00 0.00 60.00 10.26 8.53 11.75 35.07 16.79 -16.40 1083 2I23 40.00 40.00 0.00 60.00 12.30 11.86 15.31 41.00 5.98 -15.81 1082 2I24 40.00 20.00 0.00 60.00 13.95 14.69 17.98 45.21 -1.35 -14.82 1081 2I25 40.00 0.00 0.00 60.00 15.56 17.55 20.35 48.95 -7.72 -13.46 1412 2I26 40.00 0.00 40.00 70.00 11.47 13.56 10.32 43.60 -10.98 2.74 1401 2I27 60.00 45.00 45.00 100.00 1.82 1.89 1.78 14.91 -0.11 -2.42 939 2I28 70.00 100.00 100.00 20.00 6.73 4.69 2.12 25.84 25.49 13.09 938 2I29 70.00 70.00 100.00 20.00 8.89 9.09 3.34 36.16 1.04 21.28 937 2I30 70.00 40.00 100.00 20.00 11.32 14.34 4.46 44.71 -16.88 29.02 936 2I31 70.00 20.00 100.00 20.00 13.38 18.90 5.22 50.57 -28.07 35.09 935 2I32 70.00 10.00 100.00 20.00 14.34 21.12 5.51 53.08 -32.84 37.96 934 2I33 70.00 0.00 100.00 20.00 15.25 23.26 5.90 55.34 -37.10 39.96 1190 2J1 70.00 100.00 100.00 60.00 3.70 2.70 1.49 18.81 18.65 7.56 1189 2J2 70.00 70.00 100.00 60.00 4.67 4.68 2.10 25.81 2.02 13.23 1188 2J3 70.00 40.00 100.00 60.00 5.58 6.84 2.63 31.44 -11.12 18.34 1187 2J4 70.00 20.00 100.00 60.00 6.42 8.78 3.06 35.56 -19.57 22.19 1186 2J5 70.00 0.00 100.00 60.00 7.12 10.55 3.34 38.82 -26.51 25.82 1165 2J6 70.00 100.00 70.00 60.00 4.05 2.98 2.74 19.98 18.67 -2.22 1164 2J7 70.00 70.00 70.00 60.00 5.37 5.29 4.37 27.55 3.28 -0.01 1163 2J8 70.00 40.00 70.00 60.00 6.61 7.79 5.67 33.54 -8.93 3.50 1162 2J9 70.00 20.00 70.00 60.00 7.68 9.97 6.70 37.79 -16.69 6.14 1161 2J10 70.00 0.00 70.00 60.00 8.54 11.88 7.38 41.03 -22.98 8.87 1140 2J11 70.00 100.00 40.00 60.00 4.40 3.19 4.19 20.80 20.03 -10.60 1139 2J12 70.00 70.00 40.00 60.00 6.13 5.87 6.96 29.07 5.29 -10.01 1138 2J13 70.00 40.00 40.00 60.00 7.60 8.59 9.18 35.19 -6.22 -7.95 1137 2J14 70.00 20.00 40.00 60.00 8.67 10.78 10.82 39.20 -13.95 -6.46 1136 2J15 70.00 0.00 40.00 60.00 9.55 12.66 12.05 42.25 -19.71 -4.89 1115 2J16 70.00 100.00 20.00 60.00 4.58 3.26 5.29 21.06 21.31 -16.16 1114 2J17 70.00 70.00 20.00 60.00 6.50 6.05 9.03 29.53 7.24 -17.19 1113 2J18 70.00 40.00 20.00 60.00 8.13 8.87 12.02 35.73 -3.74 -16.05 1112 2J19 70.00 20.00 20.00 60.00 9.38 11.20 14.28 39.92 -11.08 -15.04 1111 2J20 70.00 0.00 20.00 60.00 10.25 13.03 15.74 42.81 -16.60 -13.74 1090 2J21 70.00 100.00 0.00 60.00 4.74 3.33 6.31 21.31 22.33 -20.56 1089 2J22 70.00 70.00 0.00 60.00 6.92 6.26 10.94 30.07 9.18 -22.57 1088 2J23 70.00 40.00 0.00 60.00 8.46 8.93 14.47 35.84 -1.30 -22.58 1087 2J24 70.00 20.00 0.00 60.00 9.87 11.35 17.24 40.16 -8.18 -21.85 1086 2J25 70.00 0.00 0.00 60.00 10.82 13.31 19.31 43.23 -14.10 -21.13 1413 2J26 0.00 40.00 40.00 70.00 13.38 12.27 8.32 41.64 10.41 6.27 1395 2J27 60.00 45.00 45.00 80.00 5.29 5.55 5.40 28.26 -0.80 -4.30 945 2J28 100.00 100.00 100.00 20.00 2.75 2.54 2.01 18.12 5.64 0.89 944 2J29 100.00 70.00 100.00 20.00 3.57 5.23 2.97 27.37 -20.30 8.73 943 2J30 100.00 40.00 100.00 20.00 4.67 8.53 3.90 35.07 -37.93 15.72 942 2J31 100.00 20.00 100.00 20.00 5.51 11.20 4.40 39.92 -48.42 21.11 941 2J32 100.00 10.00 100.00 20.00 5.87 12.42 4.72 41.88 -52.78 22.71 940 2J33 100.00 0.00 100.00 20.00 6.07 13.34 4.93 43.27 -56.58 24.02 1195 2K1 100.00 100.00 100.00 60.00 1.80 1.65 1.39 13.52 5.48 -0.32 1194 2K2 100.00 70.00 100.00 60.00 2.12 2.83 1.83 19.37 -12.43 4.80 1193 2K3 100.00 40.00 100.00 60.00 2.51 4.24 2.25 24.44 -26.06 9.52 1192 2K4 100.00 20.00 100.00 60.00 2.85 5.37 2.57 27.76 -33.95 12.53 1191 2K5 100.00 0.00 100.00 60.00 3.16 6.43 2.80 30.47 -40.31 15.39 1170 2K6 100.00 100.00 70.00 60.00 2.00 1.77 2.40 14.21 7.16 -9.39 1169 2K7 100.00 70.00 70.00 60.00 2.68 3.27 3.84 21.09 -8.38 -7.99 1168 2K8 100.00 40.00 70.00 60.00 3.25 4.85 4.94 26.29 -20.82 -5.31 1167 2K9 100.00 20.00 70.00 60.00 3.74 6.18 5.83 29.87 -28.41 -3.62 1166 2K10 100.00 0.00 70.00 60.00 4.23 7.47 6.50 32.85 -34.15 -1.51 1145 2K11 100.00 100.00 40.00 60.00 2.36 1.99 3.76 15.45 9.57 -17.22 1144 2K12 100.00 70.00 40.00 60.00 3.25 3.67 6.13 22.56 -4.74 -17.61 1143 2K13 100.00 40.00 40.00 60.00 4.13 5.54 8.23 28.23 -15.67 -16.50 1142 2K14 100.00 20.00 40.00 60.00 4.72 7.00 9.74 31.80 -23.10 -15.72 1141 2K15 100.00 0.00 40.00 60.00 5.24 8.29 10.87 34.58 -28.67 -14.58 1120 2K16 100.00 100.00 20.00 60.00 2.50 2.03 4.72 15.62 11.72 -22.56 1119 2K17 100.00 70.00 20.00 60.00 3.63 3.88 8.11 23.27 -1.64 -24.60 1118 2K18 100.00 40.00 20.00 60.00 4.69 5.89 10.95 29.13 -12.01 -24.22 1117 2K19 100.00 20.00 20.00 60.00 5.30 7.33 12.81 32.54 -19.15 -23.81 1116 2K20 100.00 0.00 20.00 60.00 6.00 8.78 14.42 35.56 -24.08 -22.93 1095 2K21 100.00 100.00 0.00 60.00 2.60 2.05 5.65 15.73 13.26 -27.12 1094 2K22 100.00 70.00 0.00 60.00 3.99 4.10 9.77 23.99 0.62 -29.28 1093 2K23 100.00 40.00 0.00 60.00 5.12 6.15 13.33 29.79 -9.39 -29.98 1092 2K24 100.00 20.00 0.00 60.00 6.17 8.01 16.05 34.00 -15.56 -29.68 1091 2K25 100.00 0.00 0.00 60.00 6.54 9.03 17.58 36.05 -20.45 -29.72 1367 2K26 0.00 0.00 0.00 0.00 79.80 81.88 76.08 92.52 1.69 -7.58 1389 2K27 60.00 45.00 45.00 60.00 7.85 8.31 8.14 34.62 -1.47 -5.14 1390 2K28 40.00 27.00 27.00 60.00 12.48 13.17 12.79 43.02 -1.50 -5.70 1397 2K29 20.00 12.00 12.00 80.00 10.89 11.43 10.66 40.29 -0.93 -4.06 1381 2K30 10.00 6.00 6.00 20.00 49.82 51.66 48.93 77.08 0.01 -7.56 1262 2K31 0.00 100.00 0.00 100.00 1.98 1.58 1.45 13.12 11.44 -1.74 1261 2K32 0.00 40.00 0.00 100.00 3.15 3.04 2.83 20.19 3.89 -2.56 1260 2K33 0.00 0.00 0.00 100.00 3.41 3.58 3.17 22.23 -0.62 -1.57 1215 2L1 0.00 100.00 40.00 80.00 6.90 4.50 3.39 25.27 29.68 2.14 1214 2L2 0.00 70.00 40.00 80.00 8.85 7.10 5.26 32.03 18.49 2.89 1213 2L3 0.00 40.00 40.00 80.00 10.28 9.48 6.53 36.89 9.12 5.32 1212 2L4 0.00 0.00 40.00 80.00 12.50 13.41 8.16 43.37 -2.88 9.86 1199 2L5 0.00 100.00 0.00 80.00 7.24 4.70 4.92 25.87 30.50 -5.93 1198 2L6 0.00 70.00 0.00 80.00 9.39 7.41 7.81 32.72 20.02 -7.14 1197 2L7 0.00 40.00 0.00 80.00 10.95 9.87 9.84 37.61 11.05 -6.01 1196 2L8 0.00 0.00 0.00 80.00 13.16 13.67 12.36 43.76 -0.16 -3.20 1479 2L9 3.00 40.00 3.00 40.00 27.56 24.16 24.36 56.25 17.94 -8.62 1480 2L10 40.00 40.00 3.00 40.00 18.41 17.78 23.17 49.23 6.77 -18.51 1481 2L11 3.00 0.00 40.00 40.00 34.04 36.74 20.71 67.08 -4.71 17.07 1482 2L12 0.00 3.00 40.00 40.00 34.21 36.24 20.37 66.70 -2.50 17.12 1483 2L13 3.00 3.00 40.00 40.00 33.37 35.58 20.31 66.20 -3.26 16.38 1484 2L14 40.00 3.00 40.00 40.00 21.29 25.32 19.04 57.39 -14.11 3.86 1485 2L15 3.00 40.00 40.00 40.00 25.51 23.04 14.96 55.11 14.48 9.40 1425 2L16 7.00 7.00 0.00 0.00 69.21 69.90 70.02 86.95 3.93 -11.87 1426 2L17 7.00 0.00 7.00 0.00 72.00 75.83 68.59 89.78 -2.33 -5.69 1427 2L18 0.00 7.00 7.00 0.00 74.19 74.42 65.29 89.12 5.06 -3.76 1428 2L19 7.00 7.00 7.00 0.00 68.04 69.46 64.13 86.73 2.35 -6.78 1429 2L20 7.00 0.00 0.00 7.00 66.30 69.19 67.42 86.60 -0.92 -10.10 1430 2L21 0.00 7.00 0.00 7.00 68.06 67.77 64.28 85.89 6.01 -8.37 1431 2L22 7.00 7.00 0.00 7.00 62.68 63.49 63.25 83.70 3.39 -11.16 1432 2L23 0.00 0.00 7.00 7.00 70.95 73.45 62.97 88.66 0.29 -2.34 1433 2L24 7.00 0.00 7.00 7.00 65.58 69.01 62.35 86.51 -2.14 -5.44 1434 2L25 0.00 7.00 7.00 7.00 67.04 67.27 59.10 85.64 4.86 -3.72 1435 2L26 7.00 7.00 7.00 7.00 62.22 63.53 58.58 83.72 2.25 -6.50 1383 2L27 60.00 45.00 45.00 40.00 11.12 11.86 11.67 40.99 -2.29 -5.96 1384 2L28 40.00 27.00 27.00 40.00 18.48 19.50 19.27 51.27 -1.69 -7.19 1391 2L29 20.00 12.00 12.00 60.00 17.48 18.29 17.20 49.84 -0.79 -5.09 1377 2L30 10.00 6.00 6.00 10.00 59.14 61.19 58.08 82.48 0.34 -8.13 1265 2L31 40.00 100.00 0.00 100.00 1.54 1.29 1.37 11.21 8.58 -4.08 1264 2L32 40.00 40.00 0.00 100.00 2.56 2.56 2.76 18.20 1.73 -5.48 1263 2L33 40.00 0.00 0.00 100.00 2.85 3.13 3.19 20.55 -2.95 -4.60 1219 2M1 40.00 100.00 40.00 80.00 4.61 3.24 3.16 20.98 22.07 -3.66 1218 2M2 40.00 70.00 40.00 80.00 6.12 5.36 5.11 27.74 10.94 -3.70 1217 2M3 40.00 40.00 40.00 80.00 7.26 7.34 6.43 32.57 1.77 -1.68 1216 2M4 40.00 0.00 40.00 80.00 8.87 10.43 8.05 38.60 -9.66 2.05 1203 2M5 40.00 100.00 0.00 80.00 4.99 3.50 4.68 21.95 22.77 -11.41 1202 2M6 40.00 70.00 0.00 80.00 6.71 5.77 7.59 28.83 12.46 -13.00 1201 2M7 40.00 40.00 0.00 80.00 8.01 7.85 9.65 33.67 4.03 -12.17 1200 2M8 40.00 0.00 0.00 80.00 9.46 10.64 11.97 38.96 -6.26 -10.34 1461 2M9 0.00 3.00 40.00 3.00 68.39 72.21 37.82 88.07 -2.67 25.21 1462 2M10 3.00 3.00 40.00 3.00 66.57 70.83 37.89 87.40 -3.78 23.96 1463 2M11 40.00 3.00 40.00 3.00 38.55 46.41 34.19 73.81 -18.76 5.72 1464 2M12 0.00 40.00 40.00 3.00 50.08 43.72 26.38 72.04 22.44 15.03 1465 2M13 3.00 40.00 40.00 3.00 48.80 42.96 26.55 71.53 21.19 13.85 1466 2M14 40.00 40.00 40.00 3.00 29.04 29.18 24.62 60.94 3.52 -1.01 1467 2M15 3.00 0.00 0.00 40.00 37.35 38.74 36.05 68.56 0.00 -5.98 1468 2M16 0.00 3.00 0.00 40.00 37.60 38.35 35.54 68.28 2.02 -5.74 1469 2M17 3.00 3.00 0.00 40.00 36.55 37.47 35.14 67.63 1.39 -6.29 1470 2M18 40.00 3.00 0.00 40.00 23.93 26.81 32.42 58.80 -8.18 -17.54 1471 2M19 3.00 40.00 0.00 40.00 27.91 24.46 25.15 56.55 18.02 -9.52 1472 2M20 0.00 0.00 3.00 40.00 37.89 39.16 35.20 68.87 0.40 -4.24 1473 2M21 3.00 0.00 3.00 40.00 37.16 38.60 35.20 68.46 -0.18 -4.95 1474 2M22 40.00 0.00 3.00 40.00 24.18 27.40 32.15 59.34 -9.45 -16.19 1475 2M23 0.00 3.00 3.00 40.00 37.31 38.15 34.59 68.13 1.73 -4.64 1476 2M24 3.00 3.00 3.00 40.00 36.49 37.49 34.47 67.64 1.16 -5.32 1477 2M25 40.00 3.00 3.00 40.00 23.58 26.47 31.59 58.48 -8.34 -16.82 1478 2M26 0.00 40.00 3.00 40.00 28.40 24.81 24.76 56.89 18.49 -8.23 1378 2M27 60.00 45.00 45.00 20.00 15.55 16.69 16.40 47.87 -3.12 -6.60 1379 2M28 40.00 27.00 27.00 20.00 26.68 28.20 27.87 60.07 -2.08 -8.15 1385 2M29 20.00 12.00 12.00 40.00 28.41 29.66 28.11 61.36 -0.74 -6.32 1368 2M30 100.00 85.00 85.00 0.00 4.17 5.10 5.26 27.03 -9.96 -5.73 1268 2M31 100.00 100.00 0.00 100.00 1.12 1.05 1.29 9.38 3.77 -6.29 1267 2M32 100.00 40.00 0.00 100.00 1.32 1.41 2.08 12.05 -1.21 -10.28 1266 2M33 100.00 0.00 0.00 100.00 1.44 1.73 2.48 14.02 -6.33 -10.44 1223 2N1 70.00 100.00 40.00 80.00 3.14 2.43 2.98 17.62 14.83 -8.12 1222 2N2 70.00 70.00 40.00 80.00 4.18 4.03 4.72 23.76 4.21 -8.52 1221 2N3 70.00 40.00 40.00 80.00 5.04 5.64 6.13 28.49 -4.87 -7.36 1220 2N4 70.00 0.00 40.00 80.00 6.20 8.03 7.71 34.05 -15.40 -4.47 1207 2N5 70.00 100.00 0.00 80.00 3.35 2.52 4.21 18.02 16.45 -15.55 1206 2N6 70.00 70.00 0.00 80.00 4.74 4.40 7.09 24.96 6.60 -17.65 1205 2N7 70.00 40.00 0.00 80.00 5.86 6.24 9.38 30.01 -1.70 -17.58 1204 2N8 70.00 0.00 0.00 80.00 7.08 8.59 11.87 35.18 -11.24 -16.55 1419 2N9 0.00 3.00 0.00 3.00 74.94 76.02 71.21 89.87 3.37 -7.90 1420 2N10 3.00 3.00 0.00 3.00 73.11 74.57 71.13 89.19 2.54 -9.00 1449 2N11 40.00 3.00 0.00 3.00 44.07 49.37 64.06 75.68 -10.02 -25.76 1450 2N12 0.00 40.00 0.00 3.00 54.47 46.22 47.02 73.69 26.74 -11.19 1451 2N13 3.00 40.00 0.00 3.00 53.02 45.33 46.95 73.11 25.54 -12.11 1452 2N14 40.00 40.00 0.00 3.00 32.42 30.86 43.07 62.39 9.81 -25.89 1421 2N15 0.00 0.00 3.00 3.00 76.54 78.75 71.52 91.12 1.23 -6.02 1422 2N16 3.00 0.00 3.00 3.00 74.22 76.82 70.69 90.24 0.31 -6.80 1453 2N17 40.00 0.00 3.00 3.00 44.84 50.97 63.78 76.66 -12.02 -23.81 1423 2N18 0.00 3.00 3.00 3.00 74.71 76.00 69.35 89.86 2.95 -6.24 1424 2N19 3.00 3.00 3.00 3.00 72.37 74.06 68.67 88.95 2.02 -7.19 1454 2N20 40.00 3.00 3.00 3.00 44.14 49.61 62.33 75.83 -10.47 -23.84 1455 2N21 0.00 40.00 3.00 3.00 54.31 46.25 45.99 73.71 26.24 -9.94 1456 2N22 3.00 40.00 3.00 3.00 52.96 45.45 46.01 73.19 25.03 -10.85 1457 2N23 40.00 40.00 3.00 3.00 32.12 30.66 42.00 62.22 9.44 -24.84 1458 2N24 0.00 0.00 40.00 3.00 70.10 75.14 38.81 89.46 -4.97 26.28 1459 2N25 3.00 0.00 40.00 3.00 67.73 73.15 38.48 88.52 -6.04 25.09 1460 2N26 40.00 0.00 40.00 3.00 39.56 48.18 35.17 74.94 -20.46 6.27 1402 2N27 40.00 27.00 27.00 100.00 2.65 2.80 2.62 19.21 -0.80 -2.65 1375 2N28 40.00 27.00 27.00 10.00 31.06 32.95 32.53 64.12 -2.61 -8.52 1380 2N29 20.00 12.00 12.00 20.00 41.63 43.45 41.57 71.86 -0.81 -7.67 1369 2N30 80.00 65.00 65.00 0.00 10.62 11.91 11.24 41.08 -6.39 -4.50 1271 2N31 0.00 100.00 40.00 100.00 2.14 1.71 1.34 13.89 11.62 0.94 1270 2N32 0.00 40.00 40.00 100.00 3.24 3.13 2.44 20.54 3.86 1.18 1269 2N33 0.00 0.00 40.00 100.00 3.67 3.90 2.89 23.35 -1.38 2.42 1227 2O1 100.00 100.00 40.00 80.00 1.90 1.68 2.62 13.69 7.08 -12.18 1226 2O2 100.00 70.00 40.00 80.00 2.42 2.65 4.09 18.59 -2.75 -13.83 1225 2O3 100.00 40.00 40.00 80.00 2.85 3.66 5.22 22.52 -11.51 -13.28 1224 2O4 100.00 0.00 40.00 80.00 3.47 5.25 6.67 27.44 -22.11 -11.59 1211 2O5 100.00 100.00 0.00 80.00 2.04 1.71 3.66 13.91 9.48 -19.21 1210 2O6 100.00 70.00 0.00 80.00 2.83 2.87 6.13 19.51 1.12 -22.84 1209 2O7 100.00 40.00 0.00 80.00 3.52 4.09 8.15 23.98 -6.42 -23.53 1208 2O8 100.00 0.00 0.00 80.00 4.39 5.86 10.57 29.06 -15.75 -23.15 1414 2O9 3.00 3.00 0.00 0.00 76.00 77.50 73.84 90.55 2.61 -9.04 1436 2O10 40.00 3.00 0.00 0.00 45.81 51.27 66.62 76.84 -10.01 -26.18 1437 2O11 3.00 40.00 0.00 0.00 54.88 46.74 48.38 74.02 26.35 -12.21 1415 2O12 3.00 0.00 3.00 0.00 77.38 80.03 73.83 91.70 0.42 -7.05 1438 2O13 40.00 0.00 3.00 0.00 46.38 52.70 66.29 77.70 -12.12 -24.39 1416 2O14 0.00 3.00 3.00 0.00 77.77 79.01 72.42 91.24 3.19 -6.61 1417 2O15 3.00 3.00 3.00 0.00 75.37 77.00 71.68 90.32 2.31 -7.54 1439 2O16 40.00 3.00 3.00 0.00 45.68 51.28 64.83 76.85 -10.44 -24.48 1440 2O17 0.00 40.00 3.00 0.00 56.41 47.85 47.66 74.73 27.10 -10.14 1441 2O18 3.00 40.00 3.00 0.00 54.92 47.00 47.54 74.19 25.73 -10.94 1442 2O19 40.00 40.00 3.00 0.00 33.36 31.80 43.54 63.18 9.73 -25.12 1443 2O20 3.00 0.00 40.00 0.00 70.66 76.24 40.21 89.97 -5.98 25.31 1444 2O21 0.00 3.00 40.00 0.00 71.41 75.46 39.50 89.61 -2.84 25.62 1445 2O22 3.00 3.00 40.00 0.00 69.29 73.80 39.15 88.83 -4.00 24.74 1446 2O23 40.00 3.00 40.00 0.00 40.17 48.31 35.66 75.02 -18.89 5.71 1447 2O24 3.00 40.00 40.00 0.00 50.77 44.72 27.42 72.71 21.38 14.40 1418 2O25 3.00 0.00 0.00 3.00 74.48 76.87 72.43 90.26 0.76 -8.31 1448 2O26 40.00 0.00 0.00 3.00 45.54 51.47 65.88 76.96 -11.30 -25.28 1396 2O27 40.00 27.00 27.00 80.00 8.26 8.72 8.52 35.43 -1.29 -5.16 1403 2O28 20.00 12.00 12.00 100.00 3.35 3.53 3.21 22.04 -0.82 -2.18 1376 2O29 20.00 12.00 12.00 10.00 49.13 51.23 49.09 76.82 -0.73 -8.19 1370 2O30 60.00 45.00 45.00 0.00 19.67 21.42 20.92 53.41 -4.85 -6.92 1274 2O31 40.00 100.00 40.00 100.00 1.65 1.41 1.25 12.05 8.05 -1.18 1273 2O32 40.00 40.00 40.00 100.00 2.50 2.55 2.27 18.14 0.91 -1.50 1272 2O33 40.00 0.00 40.00 100.00 2.83 3.19 2.68 20.80 -4.39 -0.39 1247 2P1 0.00 100.00 100.00 80.00 6.14 3.93 1.50 23.43 29.67 15.37 1246 2P2 0.00 70.00 100.00 80.00 7.84 6.26 2.08 30.05 18.14 20.74 1245 2P3 0.00 40.00 100.00 80.00 9.43 8.86 2.61 35.71 7.46 25.88 1244 2P4 0.00 0.00 100.00 80.00 11.70 12.94 3.16 42.68 -5.36 33.74 1231 2P5 0.00 100.00 70.00 80.00 6.57 4.30 2.39 24.64 29.09 8.64 1230 2P6 0.00 70.00 70.00 80.00 8.54 6.91 3.67 31.59 17.77 11.20 1229 2P7 0.00 40.00 70.00 80.00 10.34 9.68 4.74 37.27 7.96 14.68 1228 2P8 0.00 0.00 70.00 80.00 12.81 13.98 5.86 44.20 -4.38 20.96 1347 2P9 0.00 0.00 0.00 100.00 3.83 4.01 3.57 23.72 -0.58 -1.71 1348 2P10 0.00 0.00 0.00 98.00 4.14 4.34 3.84 24.75 -0.58 -1.71 1349 2P11 0.00 0.00 0.00 95.00 6.25 6.52 5.82 30.70 -0.47 -2.14 1350 2P12 0.00 0.00 0.00 90.00 10.08 10.48 9.43 38.69 -0.23 -2.76 1351 2P13 0.00 0.00 0.00 85.00 12.30 12.78 11.56 42.43 -0.14 -3.13 1352 2P14 0.00 0.00 0.00 80.00 14.01 14.54 13.17 45.00 -0.06 -3.34 1353 2P15 0.00 0.00 0.00 75.00 15.81 16.40 14.88 47.50 -0.02 -3.53 1354 2P16 0.00 0.00 0.00 70.00 17.80 18.44 16.76 50.03 0.07 -3.74 1355 2P17 0.00 0.00 0.00 60.00 23.49 24.30 22.11 56.39 0.26 -4.15 1356 2P18 0.00 0.00 0.00 50.00 29.91 30.90 28.21 62.42 0.44 -4.66 1357 2P19 0.00 0.00 0.00 40.00 38.56 39.78 36.49 69.31 0.66 -5.30 1358 2P20 0.00 0.00 0.00 30.00 47.01 48.42 44.57 75.09 0.91 -5.84 1359 2P21 0.00 0.00 0.00 25.00 52.40 53.93 49.73 78.42 1.04 -6.16 1360 2P22 0.00 0.00 0.00 20.00 57.91 59.56 54.99 81.60 1.16 -6.44 1361 2P23 0.00 0.00 0.00 15.00 63.46 65.23 60.32 84.60 1.30 -6.74 1362 2P24 0.00 0.00 0.00 10.00 69.47 71.36 66.10 87.66 1.44 -7.04 1363 2P25 0.00 0.00 0.00 7.00 72.39 74.33 68.96 89.08 1.50 -7.23 1364 2P26 0.00 0.00 0.00 5.00 74.18 76.15 70.68 89.93 1.56 -7.32 1365 2P27 0.00 0.00 0.00 3.00 76.50 78.51 72.90 91.01 1.63 -7.43 1366 2P28 0.00 0.00 0.00 2.00 78.45 80.50 74.73 91.91 1.65 -7.47 1404 2P29 10.00 6.00 6.00 100.00 3.63 3.81 3.45 23.02 -0.65 -2.15 1371 2P30 40.00 27.00 27.00 0.00 34.94 37.11 36.63 67.36 -2.84 -8.86 1277 2P31 100.00 100.00 40.00 100.00 1.15 1.11 1.15 9.85 2.73 -3.60 1276 2P32 100.00 40.00 40.00 100.00 1.30 1.45 1.66 12.27 -2.98 -5.69 1275 2P33 100.00 0.00 40.00 100.00 1.32 1.68 1.86 13.73 -8.67 -5.27 1251 2Q1 40.00 100.00 100.00 80.00 3.97 2.79 1.44 19.19 20.91 8.79 1250 2Q2 40.00 70.00 100.00 80.00 4.94 4.39 1.90 24.93 9.33 13.66 1249 2Q3 40.00 40.00 100.00 80.00 5.95 6.25 2.35 30.04 -0.90 18.33 1248 2Q4 40.00 0.00 100.00 80.00 7.56 9.39 2.95 36.73 -13.32 25.00 1235 2Q5 40.00 100.00 70.00 80.00 4.42 3.15 2.29 20.65 21.01 2.67 1234 2Q6 40.00 70.00 70.00 80.00 5.74 5.12 3.49 27.07 9.59 4.54 1233 2Q7 40.00 40.00 70.00 80.00 6.85 7.10 4.41 32.04 0.03 7.47 1232 2Q8 40.00 0.00 70.00 80.00 8.39 10.14 5.56 38.10 -11.64 11.89 1327 2Q9 0.00 0.00 100.00 0.00 67.49 74.55 9.15 89.18 -9.41 85.24 1328 2Q10 0.00 0.00 98.00 0.00 67.80 74.89 10.03 89.34 -9.44 82.53 1329 2Q11 0.00 0.00 95.00 0.00 68.23 75.31 11.20 89.54 -9.36 79.17 1330 2Q12 0.00 0.00 90.00 0.00 68.88 75.92 13.78 89.82 -9.16 72.29 1331 2Q13 0.00 0.00 85.00 0.00 69.01 75.98 15.61 89.85 -9.00 67.67 1332 2Q14 0.00 0.00 80.00 0.00 69.40 76.26 17.75 89.98 -8.72 62.88 1333 2Q15 0.00 0.00 75.00 0.00 69.71 76.45 19.87 90.07 -8.43 58.43 1334 2Q16 0.00 0.00 70.00 0.00 69.80 76.39 21.86 90.04 -8.12 54.36 1335 2Q17 0.00 0.00 60.00 0.00 70.78 77.02 27.09 90.33 -7.27 45.35 1336 2Q18 0.00 0.00 50.00 0.00 71.57 77.32 33.20 90.47 -6.20 35.91 1337 2Q19 0.00 0.00 40.00 0.00 72.95 78.15 40.50 90.85 -4.95 26.44 1338 2Q20 0.00 0.00 30.00 0.00 74.53 79.03 49.14 91.25 -3.42 16.63 1339 2Q21 0.00 0.00 25.00 0.00 75.35 79.50 53.21 91.46 -2.64 12.47 1340 2Q22 0.00 0.00 20.00 0.00 75.98 79.74 57.61 91.57 -1.84 8.02 1341 2Q23 0.00 0.00 15.00 0.00 76.90 80.28 62.02 91.81 -1.02 4.02 1342 2Q24 0.00 0.00 10.00 0.00 77.85 80.82 66.65 92.05 -0.14 0.01 1343 2Q25 0.00 0.00 7.00 0.00 78.58 81.20 70.40 92.22 0.57 -3.12 1344 2Q26 0.00 0.00 5.00 0.00 79.04 81.45 72.53 92.33 1.00 -4.83 1345 2Q27 0.00 0.00 3.00 0.00 79.11 81.33 74.06 92.28 1.37 -6.25 1346 2Q28 0.00 0.00 2.00 0.00 79.56 81.67 75.44 92.43 1.61 -7.18 1398 2Q29 10.00 6.00 6.00 80.00 12.25 12.76 11.86 42.40 -0.37 -4.09 1372 2Q30 20.00 12.00 12.00 0.00 55.86 58.27 57.03 80.89 -0.81 -9.80 1280 2Q31 0.00 100.00 100.00 100.00 1.91 1.52 1.01 12.72 11.45 3.35 1279 2Q32 0.00 40.00 100.00 100.00 2.46 2.33 1.27 17.13 4.42 7.41 1278 2Q33 0.00 0.00 100.00 100.00 2.68 2.92 1.42 19.72 -2.45 9.92 1255 2R1 70.00 100.00 100.00 80.00 2.72 2.13 1.42 16.18 13.45 3.90 1254 2R2 70.00 70.00 100.00 80.00 3.23 3.27 1.79 21.09 1.35 8.13 1253 2R3 70.00 40.00 100.00 80.00 3.83 4.64 2.18 25.69 -9.15 12.35 1252 2R4 70.00 0.00 100.00 80.00 4.75 6.84 2.68 31.45 -21.19 18.00 1239 2R5 70.00 100.00 70.00 80.00 3.00 2.37 2.16 17.30 13.74 -1.97 1238 2R6 70.00 70.00 70.00 80.00 3.86 3.82 3.26 23.08 2.59 -0.72 1237 2R7 70.00 40.00 70.00 80.00 4.63 5.36 4.15 27.74 -6.74 1.59 1236 2R8 70.00 0.00 70.00 80.00 5.59 7.61 5.11 33.15 -18.34 5.61 1307 2R9 0.00 100.00 0.00 0.00 31.22 16.91 16.31 48.15 66.85 -5.91 1308 2R10 0.00 98.00 0.00 0.00 32.28 17.86 17.69 49.33 65.59 -7.08 1309 2R11 0.00 95.00 0.00 0.00 34.37 19.94 20.32 51.77 62.41 -8.53 1310 2R12 0.00 90.00 0.00 0.00 36.48 22.32 23.10 54.36 58.36 -9.53 1311 2R13 0.00 85.00 0.00 0.00 37.80 23.88 24.79 55.97 55.71 -9.88 1312 2R14 0.00 80.00 0.00 0.00 39.45 25.88 27.10 57.92 52.58 -10.55 1313 2R15 0.00 75.00 0.00 0.00 41.28 28.06 29.42 59.94 49.51 -10.90 1314 2R16 0.00 70.00 0.00 0.00 43.13 30.27 31.78 61.89 46.67 -11.24 1315 2R17 0.00 60.00 0.00 0.00 46.92 35.01 36.55 65.76 40.87 -11.51 1316 2R18 0.00 50.00 0.00 0.00 50.97 40.35 41.65 69.72 34.79 -11.46 1317 2R19 0.00 40.00 0.00 0.00 56.58 47.94 48.68 74.79 27.27 -11.22 1318 2R20 0.00 30.00 0.00 0.00 62.09 55.61 55.44 79.39 20.62 -10.72 1319 2R21 0.00 25.00 0.00 0.00 64.83 59.53 58.77 81.58 17.44 -10.39 1320 2R22 0.00 20.00 0.00 0.00 67.87 63.93 62.39 83.93 14.05 -9.93 1321 2R23 0.00 15.00 0.00 0.00 71.43 69.09 66.61 86.55 10.40 -9.43 1322 2R24 0.00 10.00 0.00 0.00 73.86 72.75 69.47 88.33 7.80 -8.99 1323 2R25 0.00 7.00 0.00 0.00 75.29 74.97 71.13 89.38 6.21 -8.67 1324 2R26 0.00 5.00 0.00 0.00 76.51 76.91 72.55 90.28 4.80 -8.38 1325 2R27 0.00 3.00 0.00 0.00 77.41 78.44 73.54 90.98 3.58 -8.04 1326 2R28 0.00 2.00 0.00 0.00 78.18 79.57 74.36 91.49 2.93 -7.87 1392 2R29 10.00 6.00 6.00 60.00 20.64 21.43 20.07 53.42 -0.11 -5.16 1373 2R30 10.00 6.00 6.00 0.00 67.74 69.90 67.54 86.95 0.73 -9.60 1283 2R31 40.00 100.00 100.00 100.00 1.61 1.39 1.06 11.90 7.62 1.21 1282 2R32 40.00 40.00 100.00 100.00 1.88 1.96 1.24 15.26 -0.12 4.58 1281 2R33 40.00 0.00 100.00 100.00 1.95 2.36 1.30 17.25 -7.05 7.19 1259 2S1 100.00 100.00 100.00 80.00 1.63 1.53 1.34 12.77 4.27 -1.06 1258 2S2 100.00 70.00 100.00 80.00 1.75 2.17 1.59 16.36 -8.12 2.16 1257 2S3 100.00 40.00 100.00 80.00 1.94 2.96 1.85 19.89 -18.64 5.45 1256 2S4 100.00 0.00 100.00 80.00 2.38 4.38 2.27 24.90 -30.80 10.17 1243 2S5 100.00 100.00 70.00 80.00 1.84 1.69 1.99 13.74 5.34 -6.48 1242 2S6 100.00 70.00 70.00 80.00 2.15 2.51 2.82 17.96 -5.58 -6.33 1241 2S7 100.00 40.00 70.00 80.00 2.61 3.57 3.67 22.19 -14.56 -5.04 1240 2S8 100.00 0.00 70.00 80.00 3.07 4.99 4.46 26.72 -25.67 -1.95 1287 2S9 100.00 0.00 0.00 0.00 16.00 22.13 52.74 54.16 -27.64 -51.33 1288 2S10 98.00 0.00 0.00 0.00 17.01 23.34 53.94 55.42 -27.42 -50.46 1289 2S11 95.00 0.00 0.00 0.00 18.30 24.81 55.03 56.89 -26.85 -49.08 1290 2S12 90.00 0.00 0.00 0.00 20.32 26.95 56.41 58.93 -25.45 -47.01 1291 2S13 85.00 0.00 0.00 0.00 22.29 29.03 57.78 60.81 -24.23 -45.19 1292 2S14 80.00 0.00 0.00 0.00 24.32 31.12 58.93 62.61 -22.91 -43.25 1293 2S15 75.00 0.00 0.00 0.00 26.91 33.75 60.21 64.76 -21.35 -40.83 1294 2S16 70.00 0.00 0.00 0.00 29.10 35.97 61.32 66.50 -20.21 -38.93 1295 2S17 60.00 0.00 0.00 0.00 33.77 40.62 63.55 69.91 -17.84 -35.22 1296 2S18 50.00 0.00 0.00 0.00 39.50 46.11 65.86 73.62 -14.96 -31.02 1297 2S19 40.00 0.00 0.00 0.00 47.10 53.20 68.41 77.99 -11.35 -25.85 1298 2S20 30.00 0.00 0.00 0.00 54.72 60.13 70.55 81.91 -8.06 -21.03 1299 2S21 25.00 0.00 0.00 0.00 58.94 63.93 71.77 83.93 -6.38 -18.64 1300 2S22 20.00 0.00 0.00 0.00 62.98 67.47 72.50 85.74 -4.71 -16.16 1301 2S23 15.00 0.00 0.00 0.00 67.69 71.63 73.75 87.79 -2.98 -13.72 1302 2S24 10.00 0.00 0.00 0.00 71.37 74.78 74.36 89.29 -1.54 -11.67 1303 2S25 7.00 0.00 0.00 0.00 73.87 76.91 74.81 90.28 -0.58 -10.35 1304 2S26 5.00 0.00 0.00 0.00 75.62 78.40 75.23 90.96 0.06 -9.54 1305 2S27 3.00 0.00 0.00 0.00 77.42 79.86 75.39 91.62 0.85 -8.54 1306 2S28 2.00 0.00 0.00 0.00 78.64 80.91 75.77 92.09 1.26 -8.05 1386 2S29 10.00 6.00 6.00 40.00 33.30 34.48 32.44 65.34 0.20 -6.28 1374 2S30 5.00 3.00 3.00 0.00 74.12 76.13 72.09 89.92 1.48 -8.59 1286 2S31 100.00 100.00 100.00 100.00 1.13 1.12 1.00 9.92 1.86 -1.23 1285 2S32 100.00 40.00 100.00 100.00 1.12 1.34 1.10 11.53 -5.28 -0.03 1284 2S33 100.00 0.00 100.00 100.00 1.07 1.50 1.10 12.60 -11.61 1.83 END_DATA sf32XYZ ˇcurv~xB3F?" $'8)+.40`2f4O6-89;=0>@sB CDFjGI1JKMANOQ&R2S=TGUNVTWXX[Y]Z\[[\ \]j^^_u`!`ayb%bcccdjdeMef/fggcgh h}hiFiijBjjkk,kRkkkmImmn;nnoMopp^pom=orrarssRsstBttuKtu!uvv|vwdwx+xxy:yyz0zz{{n{||d|}}Z}}~N~~JHENrӄ3UMJzߋEs؍=hʏ,Sxڒ=cŔ'Lk kʗ)D^zٛ7RlȞ$ܟ8K^pˣ'ݤ8Vx٧9[©)^ī+^$X&W(^Ƴ-^Ƶ1]Ǹ3eƺ&Gj#{Ӿ+ݿ5>FHžHÝ;ď:Ŋ1Ƅ+ǀ)~&x#z,ˆ8̑C͜Z%ϋUкхKҬ m/ԏPհk#5؏:ٓIڟVۤVܭb}BߝU{o0@Ygnx"xoy.@S fqomj@a@1m&\S"'e:27MDlmft2oN, zYLB7- "    ~ wuromi]QE9-v`J2o T !9!"'"##$ $$%r%&f&'e'(d()d)*c*+f+,--.D./i/01!12W234(45^567.78U89y: :;0;u>?z?@AABBCCDDEEEF|FGzHHIIJ"JK2KLALMVMNoNOPPQ-QRFRSgSTUUVj>?W?@D@A1AB!BCCDDxDEhEF`FG^GH\HIZIJXJKYKL]LMaMNeNOiOPoPQvQR~SST TUUVVW"WX*XY2YZ:Z[@[\E\]I]^N^_S_`Y`aaabhbcpcdxdeffg8ghVhitjjk)kl[lmn'noYopqqrBrsdstuuv:vw\wx}yyz/z{Q{|p|}z}~|jXφG!eщ=m_؍PɎB3/0001# kTə>mܜL,pڟCT*wVť4~MS"v`խI3 ueݳUʹHµ=2( cջG*i޿R:" |aEķ)ś fM5ɨʐygTAθ/ϥЉiJһ+ӛ xFլzG׮~eKڿ2ۦ܌ݍާ4Nh#oaSl+f$_'Y0(tf Y\p(<7 n X_! C  e p  1 \NU%6! kVM=-}C  { !K!"""#$$%>%&_&'((),)*B*+Y+,p,-.../\/0801112_23 3[344R445I556T677q78.889K9:J:;d;<~= =>%>?@?@a@ABBC3CDTDEnEFG GHHI/IJAJK%KLLrLMQMN/NOOP+PQ:QRJRSYSTrUUVUVWX7XYyZZ[?[\Q\]d]^v__```adabEbc&cddxdevwGwxnyyz)z{P{|w} }~2~Z>у]hspSŋ7`Ŏ*Z%cגL4xpibߙ\ؚUכ]it,Cϣ[s&1=ë0 wQ+e°{ر5K u޴FS)nW˻?5421/-*©'æ$ģ!Š!Ƣ#Ǥ&ȧ(ɪ+ʬ0˴9̾CLV^bfjnt֋ע-عD[ۈ)k ެM0Ll!AB=8"\2ld-Z#I\o'+~ $ v  o  _ H 0 ~ w-?QxDvA`>f?]5 l !P!"4"##$ $$%t%&f&'W'(H()9)***++, ,,-h-.I./*/0 0{01\12>23344q45S56;67'78889u9:b:;Y;=>?3?@@AAsABYBC?CD DDEeEF>FGGGH[HI0IJJoJKDKLLLMZMN0NOOrOPHPQ!QQRhRSASTTTUkUVVVWAWX,XYYZ Z[ [\ \]]^^_ _``z`amababcTcdEde5ef$fgghh|hihijUjkBkl.lmmn nnonop\pqJqr2rssstbtuBuv"vwwrwxRxy2yzzz{e{|J|}.}~~~j܀M0iڄL.dՈG( y[ˌ<w]ϐB(gٔL2[ǘ4 xQ{ޜAkϞ2QpС/Lavҥ.jYШH7&m֬@{Mjİyӱ-;̳Y-t_˶8}Vù/" [:éaǼȲɨʞ˔̊ukЏѾL{ת 8vݾM%mOp1S}dK2Jڀ85VyqYW C,ŸѓӇ~}~q ~e~ЁX~L~?~U~|~[~0ڽ~b~~G)~=YP}-V}փ<}ك7}{}Gp}d}X}ĂL}ȂbBB}ӂo}/B}(}/}?N}SOª}f}m}ud}sĒ}\b}B{P}hip}~d}\Y}L}@A}{鑘|fc|)ِ|B|T |;|N|;|8|M|шW{}~p}7d}@Y}`L}}A}=z"zh{{Km-{z{{p|+|Lޑ|k|uz|pP|d}(iYc}V?M}B}|y y\z.ׯzl/zzݵ={:C{q{s{X|#Kz|o|od} Y}SNb}CB}܄xݣy!yU֐yvyRzHz5zܕP5{$g#{n{x|1os|]d|Ye}EN } B}E%w x?PxX֘xڡy:y7tyΛz6z>zᔃ?{0y{p |'^eP|@Z|%NB}1 B>}zww:Mw3w̩֚x$ʧxDxӡhyRިRyRzzhbzzŕ,z{(p{ϐme|=Y|M|މA}1[vv̲nw֑wnwɾxFmxyߜHyyczbzzԕ[p{{d{ޏX|:L7|@|uv:vmvwYp3wѩ岵xEpxxy%Ny[z{zn{fc<{6W*{K|Q>|uinuFv GvjɈvwk,0wڪxX,xԣyF{yĝlzzDKnz֖bT{NVA{jJ+|+>|`itXuCH'u>v Cv\vwoۦw,xfWTx㣰Kyayymz`zޔU{H{<|w" ttuM6uv!v"w< wxxyyyl$za_zS{IhG{I;|(tptΩtgԡurĤȂu[v>ɰvǷZwN;wήxVBkxxHy|\kaz;_z՘NR{cF{֏g:|FtAi t{ԁ tu1ɤuvmCvw wlx.xwydjz-^Lzњ'R{j]E|9|t9N+tVFt/gtSuo$uvnYvw"xbxvyctiz77]zQd{E2|)8|͌_~mE~~qŃD>cѳWӦƂp>3w΁mAWa UـƀMIT@'GSp*x\6߲e+&Ã{/h5,l0򀥂wl݀}aK8UڀI΁8?r>큯!jӛCu)@7-iޙą=z݂lwCl1al(U؂I>я8ޱn@GdzVeW86QB$wm*w"m$_aBƄUJC?3㕤lX|oC>J1։Oyl)aw*V+K A<~›l~ܴ~N~&~6~?~=~ݐa bDv~blbamVLK@};},}А}ŗ}ʙ"}mq}Ε~=8~~~׎SuWk]a4VFKF@C5M}|p۶} \}}0i>}g}G4t}}~ 0~Tu~l)~aV;K]H?UR|6|Yۦ|H |sķ|ѹ|ɟP\}բ};F}sόx}L}mv~))l~a~όV]~?J~?% {{Яfۄ{?{Ni|F|XO||ĝG} K}0py}v}דl~Ia@~pEU~IZ~=~ۅ`{xvV{={}Ϫ{B { |T|>4|k2|(&|؛c}9v}j}_~4S~UH;~uрn2juޅM؅4ĄƸe@5݋vuK5jɁ݁_jbTZ@H >ހ&̉l䰅SjňCe6'T̡̓ >=aX%t߃jD_Ł6TĉyHi>4Ď_׌w˃G$ӉOt}yN%$?OuɅhkM_ڀiTIk?p%ńJnMRҋ䁔сz FtɁcj%_ƀ܅UJ?S??4#qAQ$Ԕa[m/+yy~Ӌ tj_ȇJUJR[?+|'zᴁjAb_`UuUf6JE ?ބ늀S2Π+˝ʪ<c-މ~}tאzj[`$ +TI>vIMUέ0՛\3ʡQq;?J;"R/~b$tjĐ__uTR薊*)ݸcrҿ(Wyճ"Ӆgm9䝮fރJf|Krペhz]jgS/݂0HsI>_Q܉*Z􈇌=5ʋRǣ,;ŲɆ1tTԇ9ՇÃΆ$|Er>hOw^+:R%H>i>%s`ռύв*Sͧɋ̝/8ђه{f{8rQhRE^6S_IG(y>q叇̗L'П %م ٱ+4PP!߇x싉{Vrf6hHn]SI)>M3םmکAՅ^H]֗Az yJ0dւM{Tq`bhM]~S7Hˁ4>؄了Q\^ϛ84 ӃӚ'{P=b삘!φ{ %ruh,]䁛 SEJI ݆{>'s(UJ然PӃxAmՂۑKɆ{r$hA^5RSc~H_='Hz7:Ψmlシce! '<ˆSLh{PqHh[E]#RʀG#d;⭄ײ؛ٯG$^> #@6{ r "fy ?[Ԏ~P򀐋FK; * ; =҂'kҸԁ׫gU;̀{șApŖNf(ӓ1[5P&~EU1:"ẃԃͦ>&ڳkέ#ըΙy*uKV zsoxdǀYYO^JD +9 w;WY;ׁ9-+OǰYr8+P1ڥلˀ )Յ#Bׁ;sƩy.>ӗY`.xclπ5alIVdKd@P{5"ἑ_|'؏|tꎊ|ýr|v}0}f܊}}͐Q~~Bzч+~`pK~fq\2WQF₥=0y΁^̞yofe[`QeGT=bݺ@ӍqR5v3kz~Æʑچ7O҄ ֍Txo12eh[ЃYQGL=ÁBž_ Y:i!̞Gb2Ӄt,.xboV"e[UQ9E݁s;+P]pHѺPaB߆̅W&ƄŸ.ppʃGxo[1d%oYIO͋DtP:Ӆڲ-8nைfzU}KF`@֠aNxۘnaUcւVY"XN|_Cځ#r9 !ƻ݇1{mر3 1sbwĂm7{abZ-WԐMYB=|8ʇ=ٌpYDjƹ2e۱@,T D܂_w%\7lfUagVׂLDwAj7hضHϯ kNR?^9Ys|Ҕ64_i*v9k5`MU-;K@ɐa@B6 ܈$l腲MWѧ3SFîމ@قu0j6S_UU(1J|?ā5% J6[rʱ 5Q؜,Z<|) u*5;j,F_-m1TaRIɂ V?͎4D{е{x|NW|=y||| }*7W}`9}w*}n. ~cއ~Y߅Oބ[E܃<(הnڒnţU!cY2֕CŋRnvшjmnctzYl0OfKBEv0#;9I[V&;6{ѨfqeT -ec"/w*m&%c\5Y-O%ZE݃&;Ղ ynδ ܏׈ڻXψ-uņϞ2܊;uvKmlԃc}Y˄Oڃ}Eۂ<Lߏ{ʐp(): Had׋I;vYbmc^څIYOF*$#y~זu`blhLaĄxX ҍ7MЃ)Cw-9;ԅD&AiN Y'p`f ,&~u+"k[aWJVLBnJ*8i҉ɾ)+ױQuq [Ug\%h}Aztrޙujt`:WUԃt1K %Abe7͇Ӎ]vO9È̢釽T)J}YjsÄic_*F=TJa@Y'6d-nB|݉jҬVdU{eҬtn p|ߢcshC^[/$S߃͓vIK?V5Έi*3΋Ķjk+hĈ5YTx5څvTZ|ϥcrd{@h8@#]6 S,Hǃk:>mI4&:NPήPsW݉ * B?څQ{qΨ_q}gB\لK+RdH={3G=r.{nb{2={~Ԕ{`{Ғn|p|NK||~+} t'r}rjj)}a~TWp~M /DU:ÃLȉPŕG/vBS8ϐ.'XJ}s~5im`AW&MC@:EѭX*RփrR1ؐ49Uҁ}psKNhj.v`lWPLMq&C%: XǃvƴÒ|pOʙr@R8QH}` s烑j ۃn`ǃW7MMUD:ł݁Ŗƞ1Jִъ%̏QkՆ͇"}#wr݉ie`WoJM\D1;'J咚ź_ Z4f9ܡߋ؏ ]|SrBhQN`EvWUwN^D>;c@Zԕl(]Ȓک_VzOh6v5 |5rYhhM#I`(feW2nVM^+DH;|6ldדEuvV< #mӒm1x| rXhK` #WNi QDʃ; ̄4ȓ~ęZ @/›<󎓙^b̌Sˍ2C{&r0Ei3xd`†ċW͊*N TDR~:29`0̣Ǻ~[EZ7^9Dϙ&JƗK {Tѓr.9i`.o`|WsMs`lB񃷇08Ʌhù}pА㱫٣tY/fߋ[Њf4rz숎r(iX~_Wm!UKȄ`A僲7ʅ˶+*5Q`ªs>t@- cYrI)zkNPqׇ hņ̓^ATw>Jل@7?#s´вcS#+H۩Y⊤ȉРۂy 8q!Cqg͆]/S2I?߃5׆x?VhԦ}bqWn@E04y:ڞ pYf醉\JmRx$Hx>v4vWɫnVᎿϯKbOĜЋ%i0 c{xo_fB^[dž4LQGߏC=ዹ30ޑ /K8Oό+1d E8|wn܆eW[3 LQ5C<>9܃ǟw#֘ږӎ%Epƒ+ˊ yۈ'oRf `]؉CUFHLfnCtQ:ނơ啷< MQx`R;3xo*Uep+]3U)LSCjZ:-eƾ k Z'}֑a:C܁,?xLn틾eˊ]݉~UW/LbC4]9׃ƇRrӖ80%9WGؖ# S5ʀ$wnيe퉁^/UXfL B9\a_ڤ!;ȴq?͛1_͕ĀJwhnيT8f#C^VTƇK{ALކ7Ӄ^ 6IΫ١ӑhZ͏E!rtÌCw&-n֊fJ\HXS4I @؇6AīO} 5@|_X\S*,vnee[5Rw(H?vڈq6 P泡ܪ+&琭dӏ<ːVޟQ~Ȝvm@dÔZƈQHَGdž >IN4׃lӸkj b;ꮂJuE饡~ url҉dY؈(zP6+[FÅ9=M3Ńl·ʔײ%ǑѠܐ*¬V፦+)}vptÊslscCY 'LORMELz ՈӟhmY;ʆߓ ~Rxuяlf pc[3S)HJyA}=8un]ɸsqlL?闂㊯JӆT~'3u[f\lP߆cny[ixS3JAG8%},0mW=/jЍ͒.}tk捦b;[W4S)r}Jxt*k>bԋ[aS&AJdHAw8~||&ja`ݕI{N_ϓ17|ᏫteJkb[kruR IySAㅫ8Nr ӚϮ[睨"5۝Ҙ*TZӔ{|bYt krCc c[,;$RQ>Ih*T?ąT6Qf1sP&/ڥږԟQɓg뙓3|r{Usfk\zc:Y֊3P̈uGYi>cۆ5}PӽJ ט53k|՜ǡONᑙ򃫐9{Fۘ3sjSbw&Y">PόGc_=܇4YZq~n۪1!nwʣWkhz9rY[j"aWNЈEuy<3ubVqșvWDRe֔8vőHV̡y}Fq6YiZj`ԊyW&MݏD_;߉2jaE&(c\ģ֕P shpd^yQ_Vp'h`ԗ~V7.GL C:A1ŇuXտ䳻 ڗ.K[ߚ󱁑U8gx_kp8*gҋ0_DޙUoBL1B19}0څO'C梺{< 쵛)[@wڎvopFg^v TsKRmGB1+90Ō0!b.çvyzzNzHi`ztwHzgEz<:{+|{nsc{j|+a|Y}9Q- }H}?ڇ~]7$~ӦO}~}ɪޡ}J}r|}a}S}Ql}S{D}Zr}si}aI~Y~kP~H~?f~6~|m(+*V 5NS[?{ re%iw(aFIY_ PtHs?ns6ąs̤9ǢdAUQ\ȓ mLzzr3iḰa* Y=;P:SHB?bF6IH'^ԉg˟)LJݚ3Ň K׆{zCz-r!\>iaуYLP H3'?|C6U +WI9Y;az>U䗆z(ɇTqi A`oXP,H.V?G6b-̰dבJM š͍L>yȓaqih _bNXیP H??\z6|lM=2j/vP&7eM)/yrzqFKh{'_ X:PqۆG?g#V6ۅI YW.]vsjɓpŖ"˔OuxphL\?_͊XnP6\G؆?,<6'!%47:;EmTTdJxAphh f_ԍX:9yOwG9>5qОڢ%͜ܟߘQ'*x 6pqegَ_zVь0Np{EՈ=&憩4or0zCjaf_.wosDgh˒_'cV/{Mzw'DOZC؈;1T2yDƵ^𲲮1گӦܬRA%?E}usm֐eŎG]9tT2KUBی : 41VW_ۭ.rծH)C}'u!km d\|b tJsl:gd1[RjRjIȊߑA(48=/υއ BW-~`Ùa#ǔ{Osk|''ckǞV[,zQIf@hw7ćЌW/-ӳy䬹FyۥIyٝNy햏zAzQuzԛ>zx{o{qg;{^ŒB|UV|M-}D~1<[@~38_}m=}f,}飐|?|N|ІŜ|~|w+g|n+} f]}]^C}V?~ MQ~Dq~<3Zo"8#1KCq|D~-[v1n6fT^3|~V@M D4<3Å}C]ꄱ~C.悞IƂ;~wvtnf{OeF@^5>V(M `4D؊<Ȁ43zS:㇐o|GWF$~ 7vj2naeÒT]֐UM,SD'<ҁ4IDuZÌAd#/9QxֈӅĈ}Nv=nei]~ńUԎ̈́aMy\EY#==(邐4󅭁3tA ŚgǍœ ы؜hZ }3aud'mʔiMeR\UȆMjYEg7p=75͂󕮩ˢ^x4a(ڏ >؍|֗݌u苌mye"{\LUMe)EC=؄H4 _c!'ơoh ԝ>b.s|xsku m d֑\ÐXUSO%MDy<4w 756O0U!d| ,t;ljd\7U+LΉ&Dn:߇2Swذ עp{N%K_IŚv{Ȕt$2lG2qdA\J̎ T8KLBQ:I29Pߨ2>I$w 3=O{sŕkΓ ca[SHKBʉJ:/h292&4%ǩʠg:c=݉~ؘBNz;frjْabD Z鏧R,HJ)MBW|:.W2-akxMT嘉6]"ȈIr =/0xVXpi aCMnYQaP7HwȎ@'ˋ7䇽/pvBFw:r+wYoޔrh5(`thXۗROώa5G ?Ӎ7Bɉ.҆ܢ8ߖ񴉎ܛVB~<vvo-[gx_ WŐZO F<>4u6i..'`pyݥyڞy'yy։*z zA{TJzszkk{8cܖ{[p|)Rm} J}Bx~':8H~15<}/}k|ĖM||j||zU|rS|k|bf}Zؓ}Rl~J_W~sB>~:1IQL+򀢝e$D{j\vzQ~r ~jɘ~bZtMR^J6By::1Bܫ^p\LA؏q߂iwV,yPrjjCb`Z0R@"J1B*^:$΀2;^䇬:ǕʆOݠyyhrD/qjO˃'b;pZSR.gJ&؂WB=T:eف2|Y9Ŭt}MB2ѥAK ׈>k,'Ny%r j!kb*Z愄RT8Jq䃩Bq :Ոq2͆uߪ*@0өIFٌZrІŊ.xLqٙbpi$a֕Y͒׆IR\iJB-;,V3'ѫA2<‘M)QLrT>xoqxỉaYR.$5J:BˋU):2ݩvDfrĖ@V8䓮!xQ'xxp3i& a1gYu`QJF|Bp9:ڄ2zRx9l*Д~5 ƞ$~cw[$p@hޖ:D`>Y5;QΊUIǍ}A(9c2 |ؠ5 %\3G~C w6 p1hf`$X!tPʏLH&;A>9T91Ck ֡颩˥Q{Ct}ޘvܖog`&XT(P"H+@̈w8lQ0 ;xswCH8'|՛›unsf֕]_;#W| OG1>ي≂7={/DG0Ѩ󒔢|x0|ҡ|!џFtϙmkeΗ^^6VNFR>Ê36刦.K9hSb}ӂߥU{:sl~?eϚ]]WUђ/iMÑ.Eԍq$=>6Lj^.7oz1ʸ/#򤎱E=MԠzrئs ͣ kƠd \ÔmUWNME=@O[5j;-"Y31@KC!(S5 tyNr;jŗcUt[RTc=LZ$vD{ѐ<4:7,چפz>Ozz7zEz.Nza}mzlvlKzo^zgܜ{H`K{Wr|2O26|G(}?B=~87uU~/dJ}B}K׮,}Of|ˉ|h||T|{u|nn-|f蛕|_ } V}uN}F~o?+~7b/{!`9N3G?a7耬0z𡔆tC 8mf@^ VW7NGfz?8E^0؇Tأ#y?4髎H#OM-zj8s̈mK_eř3^ VCNLGi@ ք8(;11yyG㭻Ϋ8zyڎrͣ=tzьVspaJlœAe^G]2eV Nb؆G=E?܌8d0`آ*_Ҫ7&QtuѐYyՠzslYdXi]iKUȔ=N#9G#9?8넝0OSįߛUkg–Aǀ(nRyjrdkhd]ˌAUdMᑎFQ?>8mQ0͞#4r˧sͤј̢Zxꟼr wkh3ed\EU5SM\F?I7-$/Ƀ6C(7LIXDOXeExGq[j"cܒ\BTӔ?KMQG Dӊ)=16.lڡ0]{۩Rקʤq~ܜwpFiɛ b͔^[QT2M ,E&<Ќ'5-GpD#ߓc|h:,^}̡ԠSvԟo͝Ahכ@aӖZSK=~LAu&]nc~g"_X͘JQ JB;]3,bXƯ/y4󑣩_߰m6ry{tdӧ|mYkfARb_21XxQIʓgB3L:343+_*zϗ,7zzzڬz~zx8zqqXzj{ c{l\6{TJ|JK\}0Cӑ}<~5L~w-~~@}˗ s} \}md}b|}Ʃ[|w;|p|i |bL|[E7}S}JΔ~ Cv~a,.պFڎ}NmEKFX{8}u7oިHihcˢ(]fVO\G-A焀:K3,ʉKW3AӇ׏ްq{ߍZu׌WoTifOcM:C\OkU]NʙXGT@ڒ:}3^O,&瓎׶\ֳ󁳰{hKu#oƍhڤ䌫bt\ !`UR0WNt%VGić@9x3&^,]DlUIpƇiIXw{oOtonhIb [fT NG$@m9j2w,3Ly{\3bETzFht*Mmv+gabZ{TpMFf@2 9ۆ 2ŋw+ X?@7-ΰ'VzZs+mYQg%`Ӓ]ZY萗SٛMVF^d?8ߎ92+Ņd+}njߵ׆Dz۠7y rl[fQ`֔Y뒧S-nLݎ@FrN?Ւ%8͇2.+g3SǦ҆,äFyrBl `ue?_9ڗX R+L揞EՕL?^ 8>2Ӆ+O.g۪򅠲~xmJq%k6sDdۤ^XX<+Q՜K_ ElC>$8/1|ֆ*<3(ϊ Ǭ=~knwحpԪDjq&dӞ]Ӣ+WZQ"QJ5Dm=T7d*80* KR1_ }ٰ w11 p"ric^B] bXVfPaJE6ul/`)BBÏB|Z%|?6M|}{xZ{s/{NmO{jg6{ta{[f{T}|CL |D }=S~<6~/W)Ȏ%$~q|~~wT}r&}4lgl} fLR|`'9|Z }S_o}aK}D*~i=~6-^dܽ繭}2^w%qqկlفhe˩݁_ހYORƟ〠K`DS`=ˁ6ԑ@0%)./ňZY^X|vلq7Akmenv6_kiXۣ RqFKtCDcJ=ւ'7gR0֍с*HOyr׼9TϹ |و0v]wp]j=e#k_;XܢބWRkKpDd>#ۃK7c11邈*p oɇc3F׋{uвZp &Ajod⇫^ʆX:Q]K\1Dl>*y7t1FY*⊎ǾÑez{e1߃*&6Hm 3J{# uB܏oDi_ct*]ӥaW+Q3JD o=7C;0䄅*s9 #ez tرnǮ:hoc Z]"W.WPӊJ\C=g7OM0^f*L ӾT,^(f zЗ#tn=lhfPxboN\nPbV]PFŒjIqC:=16ؐ 0v2*ʃ4І"ހNzXXt%}m̮Rgȫ=aѨ@[[ʥEUĢO1IisC < 6V/79)ʃ{`|Ǻ¡귱yʴskmDgFaB[LUO ŏHdC G<͔.D6Bb/ߍ&w)xҧWL^_[y2{rޱ_lnAfZL`dT+Zpc Tx7Nkߑ_HPqB}Xd櫂^+YS MG G A#;bL4Ґ.I(J%ƈFHO)}֮2waqZjIy}X||vּ|pq|!m{g{{a{\;{V^|/Pt|I&|AB<}:N~3r-z&ҋD¸zM~u~sp$}l3v}{fɱ}Ia}:[Fj})U}POA*}H}@̚~:3)-%W&O ƃ8GS{jzv΀8z潘ul4p >jTeM_֬CZ][TU>M>GA@;)c59/(wю'zdhtoj-!dү0_ykiZTMԢ.GAD;-5 O /(?òoz8+tgoLSeiڲpdT^6Y戝SrMqGKei@:ܖą{4͓.Џy(͋SÛpLz#tVo)iOcj^bXި͊SWM̈F7@ZC:z4.(냮qvC'FyҔtZnIn h粝cQFE]ЬX>RqBLPF4@IHv:U_4_(C.bu(Y;*LSc yt)Z?nOhQ3b¯=]*GWĎQǥDrLF) @:@4!%."؄(E6~yosLMm׵ꗖgಉb#?7\Vި̐Q3JUK|Ež?9Ŗ4c3˒-ˎх%'Ƌ4~?y ms4/umBܚg)ak;[֬ V7֓PY/Jࡹ E*?9M3uB-Džz'}ޥ~$xzr)lݝofZ`ׯ\,['/U*OyJCӐD6? 9>73U-d'mc₩}oxq]r%*l 頑e `iZr?T۩NO<IdD o>d8M2ђ,ޏz&hM7B|Ŀzwpq?Zkh eӠ_KeYìtT-SNHIICHe=P?72)ԉ},J%*&Tցm_|Nvμoqmj˶5da^ԡYlS~M0(HIBb=7S΍1}|+r%z}|}r} D}{}j}t}.}s}}~^}~}r~8}p~Đ*}z~} z};o ~ &ca~[X~0L(~BA~\{U{c||r|2|bZ|Bq|V|I|h΄c||y|o-|큧c}XF}%uLg}F\B}yMzWIzUzz{#zɗ{Oھ*{={{F{ՄʏB{~{y |-m|IGbA|mV|J|ǂ?}xyy߲yӌ"zzQ{z.zމ^]{{S{b"{bzq|*ny|" a| \V|eL>|̓/Bg}GwxYxӓyy_syBkyzL1z֎z{6yD{m{̆bp|Wv|uL|ބA})7v8wMݳwBxHAxwIxoyJuyyzU|zkw{ m{b|W|S:Lf|AM}vGyvf$vΛRw=yw_xSlxݥyymHyԏz9vqzalr{?a{W |3uK|@} @uyu{܎u4[vt4vѻTw wxW2x֔kyF9yvz7lzՌb]{^Ww{׈K|?@9|tJtfuu4lFuv|r>s:sձСto!uvu3bv~ƅ~˅&~ńH~J~Ã׋~~Xv~k~`~CU~Kp~AL~y}} ٳ}c|}R}މǸ#~~ 2~i~(~'~:v;~?k~\P`~_U~o)KV~x@~0| |ؤ|G͂|'l}t})f}C,}\֕}yŠ}}um} j~`c~//U~JIJ~b`?~t{Z{׺{•/̇{|&b|J#|z|S|Q|/}D~t}{7jG}ȇ_}T~ J~FI?d~qDzCzœz ˳{a{WѶ{M{c|͕/|^|~|ߍs}#oi}_5}ɈGTy}I~-8>~e:yɤ%y顋֨z2˂zgzz.,{*. {r){,|X~|R|t"|i}_}bT} I}1>~[Syy.]y]NLy¡BzuRz[&z֟z{=N{2~{tD|Oi|č_}Ta}WaI}5=}ʅ x[xsxoyys崹yڡ,z,z{2z̙xe{&~{tV{Ij/|r^|CS}G}GvŸԧv|w_,7wx/,xrx]ySyУc|z<^qgze{MZ{N| CR|`.7|`vMުvq(vBwwy#w㶑uxFxyy|z0pzd{#YD{M|fBR|}I6|ى)vңv:vӝvlȂȮvս6wAew xǛx~?x;yn{yoz{}d8{X{_L|$Aq|z5}uL(v vGv缈w;wrwSx[mx˱ۆyQzyoEz} c^{*W{HLH|F@|ҏ5'}\Ņz{Ecr{˰|4|ȃG|}8}[:}}~(}sN~Lh~]~Rɀ<GXB<꼄ヾ!DŽ-7bLݞ{ ~6g}Ws8}i ?_'ׂTJ\x?#SDދ{.1:tވó耉]U6xօ}AӄsɄi_7rT`I)X?&Mɀ5T$aъ~6R|S[s;qhq^VS9IS8?~md/0Xs:\<]<٧"( \~$ |\~鉸rhD']`S1 :H~>M~~74~QR~Ư~s>~\~ާM~Q~vΒ~l@[~{~@r ~ˊg~c]~S ~|H~ >(~'~!}.}vm}ɛy}љC}藰}ߕߜF}}ے@1~|~r!~Jg~C]~zSg~H~=~G}Ty}/}j(}+#{}5ְ}Va}V~}b\X}bI}\{}/q}>h~E7]~_'S~\H~X=&~V|ĭ|)Ж|ki|һ$|/2|Ο|۝(L||f};.{}Zq}h }+]3}RU}pF~;`~+!|YkX|]S{r{𩃺|$|W<|q|0|I| {\|Jq}\f}[5}4P}Ep}ш:J}څy{{{pT{uD2{{񧶤|I|#|>Ѕ|{E|pW|e}EZ}vO}D}ʉ9} {ŀkЇ:rwû)p'Q΄dv^t)z݂q.فgh~]\SZH̀ >q=gڅ͓SV*ăAi6ȅΏ@@KzKpgg!s]RX{H\>E܅{Žu̩4u|F\ ҂ٙ.}1bZyՁ/pwfdۅ.\7gQ3G=5fÃ[ⷉdVMa!=4Ӏ yĀÈpɈf[kQGyЃ=fs5Bc򂓖ɂ.Eʁ̬Ɓ\hAy3|do3e[OQa0G0̄=Q>Ё؛x}@O"G̔q5C$ySo;e[݉QiGbt<0"ދC԰ʳ6HiޞJ+ƀـIBy6oee[QveF$}u }4j~3^~T@~I~ޓ5>~3mCyj yDzUTzK'{ 7^{b-{*||Tօ|x(D|oz}d}Z~5O6~GI"=U ~~~ ~MA~ުez~ܠ~斍~팆~eD~x %nWd݃Q[QG(=`pрye:ψxh0'P1`d.w"XnNd˃1Z\PF#s2Duv1mՂޅ9drZ+P4UMFT<À1ˉ()#KPc!E51+W-82Hv͈,mfPc?rYȅO>F<0 9_Lx+}AtZ؎g;."vO~lavcWMYO4E怵P 3ʉ MOɺGoHӁ oݢ׀bm"{݀,\qg\=i\]RFaGK=:N3 Sx.yG…yzlzpތz̜9{!{o`{)i|u W|ykdž`|by}Xs~9Nq~Es~;joNԝ-}~ K~"ݍ~b~~)z~6~>~L~~Xt~kf~aӄX5BNzuDՂ;&|̍aRɤ-JZ ~n"tF)k2aW僺N*ˀDpڀt:z8 *v!\ƂM RߐHҁN>逬X4˒OÊ_l+8eH+n קR\yoӂqe[[%QӁqGȁ=v3ˆŪ҇xrq5t̄g<֋U8&;yo.ceOL[&*Q F_(F?ڑ=:7ɐșw#+`##W7]:-}Փ\zk:`y&oMf^&FUjpL{C,9)Ȏv֚јؤӗ̊o(HAẋ0(oqVf#^DU%5L7BE96W1Ƿ{fl\QߌTT{UgAӈS yxgؑoOfͅ`,^PqTK؈AID7yVȌY݋yߞ֜˒&򚥉X"vHNwMn셿"fÅ:\vSzIׂ@69M6Ďtpᭅ{\ w~0؇ӛ Mwx[neՒ7\=PR-Iڊ?{/5ׁ^R+uی$ࣈr-RֈP#rvۆmɅAdԄɔ9[%3_QOG>[64R?X۴4̱:׮P߉ҫHyڨiJ~膊vD霪m]cWZ2K6PF׍=l3΁8Z˽H𫅊ho㈖`ة4'~Piuȟlkc/}Yc0OE3cJ}Are~K8#~՚| ||:o|Ĕ| |ߑ5|}R}w^}*m }ue#}\'V~+S9~yJ9~A(7Ⴑ\"!vγؔfeD#ΑW}ɈԎFw7mˊe6j\-S0J1UA8n)[+ñ`>ނvsmwm:e\#́lS6?JQ5AZ8Eė3mY!SφYS>ɇ݅B{v1VmUdˆуx[$SIkJ3KA߃8jerXDÌRql4 Yb:~ v+܆m!d'n[S9[;J+AՃ8̂@ŹΑv+^X֏Dِ1H$Q+:~kPuIlnHcfq[{rS)aJ;A܄8тXoגAA7 ڗ ␕U_e~)ualWuc c[rWS" 1JAÄ8\CǒŨ6vK&}u Ž'lcċ\[̊S2ňJ-A lj8 C <ɒßH6D Wgϗ݅ }jItokccrS[RbI>?k 6K-ea{Qߟ5+ W0}8-+|t5-&kc*SZ&S%Pg Gi>xg5MS֓N%+`>㜝ޚE{skL듂bBY5PHOuGS=T4BJ wXJ)Þ *z/{[sŘjta:XxwOAE܄a1Ix&B{:yQxqhL1_|U'L|~{C- 9ԃ0'Ւ״}d2m9Nj]@1x݉]pcg^՛UPK+BYu9 6/ڃJ wݝwۮ~x9gx3:x斟yIyZ&y|VzDt&zk3{#b{>{Y|JQl|H)}]?x}7~Ycw| |s|_1|.|!|96|Tu|n|c|s|jd}b}pYv#}P~HU~e?2~6~۝hV&֤rؖh33k~|?6~sbj b/s{z-ؚG@^BԎ8'\ z)qҌi0V`ۊ"X쇯PHLs?݄97?hUઋ$*J0&^\yq{R.h`ÉڊXUPgH{?l6/|:I$.fB9ؒ͑l=&|딃Ly>6(qh`~XaP:Gww>&z5`ɹAȡ|JQgםs^љЎ7xpȒh8z`PqWsD^N dEΈJ<ބoE4 FPo(T{Ah3 ?xpgLj_؉,SV/ MEw<_a.3 {m b!ԓ,ĘN6Վ wpoomLg%^ʼn.U LӆCԅՊ; 2P8P+@הO<wOU2ޢ~iv͌anOfS]3TƈOKB:l19" 㷬kb> HoFOԨ}~Mxv(MnBem]FSJ߇3A94ω0i!ׯ>2ߵ1ב)WPЎ4}v uyMmHH}dڊ\K$hS3JRA,FP8l /ևƵo` ƺ0sΖ/dV&|~`t^l`Dd Z[yORKcI>6@]x7D".لR"wTwwKx$xw˙xӉy) yyyp0zXh=z_G{]WR{Ow|vF|>B}s5Ʉ}{ {{{V {}{,{(O{ŀUb{xo{|p|Dgg|_C} V}oN#}FJE}=݆_~55gz~{Y'!M~Kg~~ޖ~} ~bx3~Xo3~g5={},|G=ẋĆ#*~Γ]~w,nOf[^zЄCVՋ5фL3M ?Rפfǜ̙ԕPZ𔳊2~PTvDnf0^ 0V,NwF6ʃ=5]ܳuu0w֑&ۗiP6)}k vP͊nDMf]GVYڇNN;F=˅܃5/j 6JYv;ˌ3uI.}}uސnmHem]ÌV:N ^E·[=526K]&B>fRcƄB:}ucmej,!]ËU֊`UMɈEP) Ô"0\"eX|TtߏՒmwd֌*]XT@LEC ;3磴Sڝ{ ђ{tFlQdsƑn\swSɊ2LKpC:w2\݄((a7<֓ޓӟP%m{Fsyrk-$c[\CRƊJJzPA#91'2gɯ37uqXr/|L{zƝrfgjb܌Zc1Qߊ1wI`A/%8z0*ϯ웆 4%aŬ0/d9yא-q[bj+kbBYދq5Q;$Hԏ@@8W]7Ӆ؉|/b^wJĶ;UV^ZUv5wyŤkq2d_ig$aNY AP:bGω?s7.k#-e'ÖU)0F6KE-݄Ո>wxq3x|y-u!ym z dȒz\b{T;{K||C S}:}21~gn{'D{`#{ { Ԟ{{&[{N{g{utcP{lW={d|A\|T$}K6}C ~:~w2%k~3ͤh~5R~ߠ?~P~$t}}{}t}l ~ c~)\~rT~J~C:A2DJsǂuc$ʟ}js0sނt{J~`sĕkÓpcZ [`!SY&J܊QB=:Ά{)2˄f,ߢ {Ʌk6քМ΄Uփ܂Pszsk bct[(Sލ*JC&Y;5 3SzɭpxަBGݞޠ'=;/?LĘk]zo|s5*kXc[ф/[QS VK7Ccw;m3|jģɎڥA䝳؈J֊&Lzr:jibHZ̅SKm]C{;3m-W,A]6&C&q,y!rh#j;b6DZ͎y_S9vK=hCYs;_{3Nr{,HC'ۏ!ȑ͐G y/+qbj;xbgIZ:+R} K:C N; ]K3qĢv.ўO__zgP^y$ xАq|"iБpb ]ZQRPJ,B69y1.PMǟ❵ 0"d6 x@\pёid8ax}_Y݌Qnj(II@݈s8 x0ʡq 3Xʟěҝ.̜u /wIFpfdhՑ`cY8PIwAӇ9?ᅯ1i_Fףş"}X!$qՅƗ~V⛎vܔ'fo@g`HXMqPH@T@Ĉ8ӆV0΃؃٩1ku, Qk^}Ԟvn}%g_QDWyCO7GiɌ?b7Y [/F'Ҭǔ)z0cY |ӕǢ\uIm|f<6^|M'V˔'Nl,OFݍ> 6.3.wNY:}󞕴GT8]Z| t'l咍eo]jtUՍMMEҊn=?5نJ-z{xKȜg)زI9$9jM{J̩:s? l#d>r\ݏU %L͌E<= u5 <,Ɔѧ*w:6wHx$wiw+w+xA,[xx xqyTi\iyaBz_Y5nzP{H|x@n}8}0jC~j zzaz¤zz؅Vz~n{wP{,p?>{Oh{`M|X|POK}(Hj}@p;~8z~f0`$~էͫ1~ب~J~F}݋ߡ}(}~ T}w}}o}thA}`5}Xe~SP4~Ht~@ 8̇:0u>{bʁIģʡC>}ЀvŚog/_X4IP!&HPU!@8u0܅.oX"߄.%6ۆ腒/Xޤ}TFG7M=yxm5rc/k[d\wՑTM}uE;=G!5@-Ą楓tğv?\eϛAxqq?j`c[ғT ELgD[=W.U5.ڄW祦]⣀daJ1J?cwdpRiqb0ZđSKKD$q$}]}vDo}gu`UY7?}Qؐ`JlۓMBɋ;+3+hZ}ww'wۍ\xwx/ xkzxsCy ltyle-y]; zkUic{M1U{Es|=}15}.9~{ zxzz%2zᣉzy>{r{"k{Kd_{\|T|L} EC}=l~5ֈ~r."~ꠉ~@~J ~~0}؆} }vx}rr-/}_kP}\dE}\CH}Tw~$L~qE#~=Z6>.c|z2|Džvc!x/qk zpcʘz[TMELvrE?߀ =3 6L.֮?Qf߅Wqb~ŢxIqJ*j̚cFi[ԕzT2'qLSgE?ƁJ=׋)6/igՉVʫIo v_ǣV~6w͟;Cq"ᄲj)cO@[iqT L@EK> %6爚/Uݭ.A葇@٥:d}.w&؇pBjGDb[|\bSL=>Em>L%77"/"M;Uݎoylv}AvepMib[,6SrLG慲EN >%76爃L/T/8&jă|Nwv^oۛ@i>%b'_"Z˔SyL ,EgJ=ۊ6/M̝`]H@3ڔvl|ov%o^xhLa'JZc S-YKƏDLc=w܆6/q.@cɧ ,2|4zuin؛Euh;a+}Z]RגEKIDՇ=Q6&X/!\|x` ~剗wd{wt;n6/gm`YeNR$ KE1C!5< k(4tU,I[ސ z$ĜzXt96mdf _X>QǒKC}͉;q؝Aj0d)]4BVyOnRHkA992T+s񷂓zrBݦ'ܣͮ(axoq`j1WcKF\wXU#NG䏥M@~N9K2*8ex,x1İTx_xxsx{xtxnJ#yAg̟ky`zYbzQq{/Ic|A |:}3֊1},<~$):{>ղl{FV{\M{8!{2z= {sm{(m{=f{``!d{X|P|H}8A}:}3~2+o~/y~Ɑ~jc~NI)~]}z}s}{m1^}`f}Z_Ϝ}Xc}P~/H~Aۏ~:d3 @+͆sՒܰ聂0D`̀׀yy¦$ sqlfjvX_hX ePlHXA|:3,V̳3cjcȋEҫxSAy1s/`lf*^8xW#QPLMI>N_B*f%;L4dǀ-ΆvLˑ׈  ZM~xCtrƄl+,beݝ_zW3P@IUDBMT[;[4}a-Dz:i\Q񬱊#~kxBrik̟نeM*^˅Wم PhBI6=0BWG<%@H/9ۋ3,U~e nˆaߧqrczݢsޣ\WmU!fϞ`Pb'YҚSlLǔyF7?׎rx9ʉ2B%+nzVLEp? 8D +1ui*„ݑf uo/DMtgyrekˡ`eL)^ȜOXSsIQKIޔhDґ+>B@7{Ae0)􅲒"Ey 0NyYy:qNy0zƮ6y?uQyoh-yLi9Kybmy\z>UzzM{ZF|/>|7w}0Q~*##~|I|x{ΰ{z{t{]n{\hq{ibB{[՟1{T|5M-6|E}V>Yq}7T@~M0~)܇~w '~5~\z4~t\;}n=}h$}ta}j[{}Tq[}L~GE~>uH~7v@0 a*I?pεWvtztӀ ngPaO[4dT)~LߗER>ő*7'1V*܀`ȋqɅdNyB3sjm5gasyZZS9Lۗ@EJK?')A8 1+V2 S채5|xޅs 8m5Ug%%a&ZDSLߗEI?X*j82=+<ŒF.d+4~{bdxurzl5fƣ:}`֠yZZDSgL͗ZEH ?K'82)s+֏˶Lu@ҍ`~7mx.5}r\lDf>`Q/Yٝn/S37yL{[EY?81 ?+km+γ?߄ }𭼏wcqQkѥn"R 8L0aEfц>͐Ʌ8K1Ë+0!嵱Bװa}wđ[qGk@Ae*_݌XXɝ'RBK— E>Ȇ8慧1o++qy̵2]𘹃OI}|}wEcp§jmdl^xώX3 tD7%i1l2*ׇ9sĜTk-}\vª~p/j"cU]ȟÐW PQAK+֋DvO=/#7'f15*;툝|4ݞr|kv"Zoigc2J]?VYPݙ JŒDI>4E7Q0̊/*:@fܥQ#d2{ɬ u@nӧhb|P\cV6qP0ƐIʎZCA=/7JL|0Њj_*Q;cr&/Iů{6t>Nn g~aĢd>[֗U3O⒮I>CF^)= J6ÍNQ0Gr )o݆HA+z(tUImfg/#]aZTTӝeN͚H yBYP~zsjl¥ fmFJ`SZ:5T N?GɗO3Aΐ;X5&ʊ.(DFxzǻy~yy|yt#yotyiꫥyd y^/}z XJjzQ{JK{B&|n;}04!}.6~'ЉC׾A}=72|~1|\y|,sر{nf{i_{cFD{]q1{Ws'{PV|bI}|BJ};eY~4ɏ~. |'iཪ.l|~~yEm~s4~Gn}hƫ }b}]%}W}Pk }IOUI(BA;t; .51.݋(u%}o|/;v _p™icި^&X?1mRr9LǜeFۙNbA6E;2Xd4ɎՆ.(]oqI{uqokhc<昇]X W:QϠEL' FD[@S:FD4#E.J(gރI)ɀCD{etnԮhJbu2\% V[Q(oKΑEt ?:\@4"& .'⃵\ Qzotn2ƣgߠxa[LVB"PJҜDꙞ?Iۍ9mc3qV-o"'\K?X~ӷrnyѴt֩m8f j`?[FU}OՠJ(0D4ڒ/> D8׌2$,c&4/{W}>6zwĽzrzan1)z!iydK>y^ҫz0YKz_SޥhzMo{VFu{?I]|8}2F~,+;~%uz~5|ȿ}kw}|r_E|m|8h7{c{{^{Xh{S$/|)L|E}'>}8>_~b2~+َT%wSۂq|?wżRr~mH~ph}c>}]ɫq}X@D}R}LS~"E~>8c8r2:, %Oa(݃f}΀D8%q2,瀸&lH"/)|wCrjm'}gܱ4pb ]0؁WǧYQ#HKI9EnY?!΁9!439v-Qp'mqщ|w2qu l/tggbH\ڪWPMQK|0Ea?<ւ9S>3j`-|-'Y|voqm4l2f簳[V݇EPᣖJD{}>9 36-hz'{HvdapŽEk7fA5`<[_=UGPYqhJDQ>qP8”ׅ3x-8'e3ҕV{ۓv5ep¶*kGpe!`$Z׌{U]ZO^HJ@DF"@>UPz8톃2Б-%'[z—v xpj_eg_ZҎTzOa4IC><8iZ2օr,΍W&͂z¼=u˹՘pNjlPdz^ᒋYvґTNfI rC=Չ85G2rɆ,O&ۉ˃ LbzLwuMoj3iٳ?c̯^LXөΓMSdMkHC=ɗ8%x)2",L?&h*~;y]'tǹtnVbi+oc{]wX-ٕRǦēMRHaB=27b2",DI&(j}ڿ<'y bt>}nXh=b_4\W~R LGgAߜZ<7{1y+%4}XSxtsRn&gRa0\" VԪ$PQxLݕFƟA=G;E86h0ϑ;+/%sN\|ZkwҼsm7g[|a d[sYCV)SPҧT=KwF*#@O;<50*yb$m{y{zsp{{C{{{{||_||Ĥ|6}.|K}m|}|y}v|}k|}`X|~NT}8~I}b=}LMypv yƀUܝzuzJkzPzԀ{X{{'֍{{i{XwG{k{̀`| T|GI|A}J"_xDxۚxfyO@vy̺yńvCzz\Ę+zzӃ]czx{Fk{:a{ۂU|4M4|ׁA}3v \wQw֊\ϛxJķxx5yZ2yޗz8vzgyzFxl{Jn{ bU{уW3|,L:|As|Fu!v!vKw*Tw:x=xBxI}ydQSUWz̉DI{a2>{!:p^VqsAr9zr~sWt̫u2Xuٕٛvxgw$wiuxvk6y/{_y؍TzHz<{uo۴pW q%rd(s- s$t4AucqYvvÙwY)uvxgixf^FyCRyGqz;{E%@o+p ֯p@˳qӯr}suIt73t"u vKwt7wix\v]xNQy*FzS ;{ nI,ohpaGqY,r0%s .sǪo;tLuGVu~vsNwWgw\/xPyvE\z59zꇟn&ǘo1„p9p꿭qövr*sdt0דt0uU~NvNVrwfwΗ[x~Oy,D:yT8z[m nՔo npHqrSs"ўs쮿tΈ;u\}v5qvޞewZ3xtNy1C2yv7zhmT`n;otp{;qFWrHartstpu/}uqvȠe%wYsxmyMy=BDz6zЊLm ޡnjJoRvp5qpqҿ৭rJst_u$|au֨ pCvǣ0dcw2XxwqM:yKAz35{ >x*uyף:z;)z{V~| ~|e~|A~|H~}9~~}Rs?~}i~}^b~~*S2~~G~~=~G}~}8}IR}A}}}I~~ފn~ p~u_~*+k\~Ma%~e2V~pXK~x|A:~M|j|Mջ|>|} u}-?}Cc}ZO}ri}P~}&t}j}ԁ`[}U~ iK~#D@~:!{'_{p {<{̈q| ʴ|F)|n||q|ۄ~C}t`}2j7}pt_}U}JR}܂?~z%:zOz6z݌|{!{n1{,T{Nz|w|A}|s|ņi}J_}MTZ}I}?Y}By3yM1y5ymzAF?zz{0ÓL{r]{f}:|js |d4h|Ň^I} S}QI$}>}x\Ax[d$xiy ypyؓ5 z2z>zÈ{-C|{r{ght|y^|ӇS\},H}u>4}Ƀgw#,w{wٜ(xExز$y)yY#y񓔒zHՇz |{Yr{uhb{^E|fS|͇cH}/=}w(vH pv+ѲwwcGx -xOxyhy˔xz&|zro{hc{^|S)|}H2|׆=*}1uuXvivwt=x+xuϜ,xuyS-%y|fzDrgz*hS{Q]l{zR|%0F|{;|gt۲!^uNuǫƆvQvwGFwx{8xhy\|gy0rGze~fszא[{EP{FE|:v|tBtôMиu>uƭve$wxw+xxDx盼{ypyޕf!z[{ O{qD{ꉘ9|hPsܽutSRtڵ|uhuvͥVw*w[Ex)2xzy=Ppydz/YzN{DC{8D|B9sxsmt)uo8u2v@)vͬ+wX$wۥx6zjxo:yrfcyXzM{ZBz{y7U{'s2l5sOt(`ĔtSuS^u𴕤Ev|əw $w4fwyxnwyAcyᘶWz~Lz{Ak{6L|rts]7έsš)tv9,u!uv~~U~~*eg~~(~5կq~OC~?F~9{y~-~z~4%qm~jg=~x]~R~pHs~>M~}Q}7͋}-B}; }a}⤠}ٚP}Ǐ}}z^}p}f~*\~@RI~LH ~W=~m8|KN|H̘|NM|i.|.|בڣ|~|&} ̅+}9y}Qp{}f}\N~-Q~G~9=~~W{f֬{o~{{{P|(|A_|br'|zɄ|Az|ύpo}fH}nY\[}R }ч&G~<~6zUzEzԟ{{G${.{{ەˎ{ބ|: y|mp1|Ŏ(fK}%@\<}^fQ}G}<[}Ȅ|y z ;z,zr54zҬ{{*hj{b-G{J{Քy|p|xhf>|؎*[}Q }-E_}:E:}sޞyeY?yy\ˣypyئʶz2("zzz{4,{y{ƕ+o|"d9|[Y|_O |ƊDh}B9}8xԹx6yyTayzzQcz2Hzԝm{)x{jn{c|Yd|dN|*C|E8}2Z{xuAx'ʽx=xUy@(y4yz)ٌzp΂Tzĝx6{9mn{v b{W| Mn|ssB|D7} xӠx+-xLx-SxⱠy9;yvyЧ\z8zywzϜl{:ea{V{NL;|@A|T6|އw>wɎw޿,xBx7&x鲎-y4yJyߧCz@wzk{a{V{K-|T8@}|t5|∯w wWw wִ1xOکxxJyR -yzvxz}k7{M`3{}UX{Js|Z?|č4}wCr-wNwo3*wγxxiYx˷y+֊yzuzgPjtz_W{2Tu|I|vL>|3}d?wtXxA4xQyQC+yʭ0zH-z{.{T|zq|q|en}9\ځX}R~;Ho~>i\+ }/G}V?}J}ɶV*}ѬR}ޢ6N~ ~2ł^~b~yd~oB~f< \TRR?AH%>u ݏfӶNBɲ#ŃCȂjÂ?!\x olՀeۀ[RQG=Nr&;(􆚿I+<_C%WԄtqG ҃4uxo `eE4y[K(QTGXb}= ;قٌ%R8*[c{|TΠ‸i^.xcnȀdE[P}FCf=+̒(6dHkҎ借 cL̉vwn\dZ&P]=F7[< cTofCUBg{ҏ NGxw4/md&dwZe_PRAFV"\< Bٻ֜)KmWcMN&+V~"~~Ŏ/wO~m~ԋ#d/~Zu~;P~Fh~ׅN<~Sg~ #~❪9~ղQ~ڨT~~8~uh5~JF~Zv~\m~Md3~Zn~P0~E~}8;~bmؔ~R~Y~:~$L~#~-ܞ~Ҕc~}앲}v~xmm~7c~VlY~TWO~D@C~9~ן~ξ}۩ž}m}ֱ}GM}ɝz}k}7}Ԁp}ϖv}mM}b}W}M}7C@}8~W}B}Z(H}2M}u6}}"ɜ}$(o}'}'"}{wv*}Osk}la}W}>M}Ƌ~B}ш8/}|}ͻ|ٴĽ|=|*|f|||)N|˟D6|6u} j}I`P}TU}uL}A}6}ꆵ|(|o#|`F|J&|C|D*F|V |cȈ|o~|8t|ϛj}=_}YU.}zJ}@w}6 }v|O;\|'-x|Q{{|{n| |nH|6~*|yBtg|oi`|^}6TM}.I}?s}5 }G|ȯ˅{p{b*{`{{${Ͱw{!| Y}|URs|"h| ]}6Sx}{H}>~}4~*{3ʯ{{w{}?y{}C{}|{{ه{||4_r|fg|ោ]$}MR}H<}В=~U3@~FvΏw~މx!?xuy%y8zoQz{{{v̄%{m|d%}Zqv}P}F'~e}Nƅ}y}(;}v1~l ~_cl~Y~OI&F-nD~\48~ɇńO6שf*2O~S~᧵y~ڣpc~ʟe~[ Q Gw"H=`+3K&ƺe,~\~ڮ ~ͫy5~Ϧo~Ǣ_e~;Z(P8F5<H2kIС(vo|vGwx ݋xyO%y1z5zt|OzsQ+{djr{`|W}MM}D\~<:~ϲ{~ƒ{<{||F/|tN|Y^|چm}|y}?r}i}`9"~:VI~MEq~C灜$:gkt?€.k&=e2|Wri`>VłMP3Ck :-LR]_KĄQ#R䂿 xĆ1-|*crDif`%kpVƂ;MJ Cށ;:n͊+ęJz눇j2ܩ5/ↇ& \u{ۄwqCi Ń_Ճ=:VMVC?:̤ȎÿƱo㨃͊]<jO{ψ{lqچp\kE**^ƄI>̟ (alwnہtesV[&RMPHg>5'Ն$x ԿYjı,':45ERu$weun9>Hd8ZQ8ƏGa=4FƢɽ }r¤qeEPvρimcƁ]ZPGȑF@<83Dׇͅn3Ѿ52ݭS9ښcΰUf*vߦ.v2zdlcY4OtӓхB8Ɓ&BBc* %[3Dz3/ze~񆖏HvEٍml Qd섑\SE_JɂAL8_b ʜǡNc`5 ҅>R3̱͉|ֈŇ:s|ۅZt`kŃbYg ZPUF"=cx4Աر+Ȩ4QY7/覇^τ|J2Gs?k"Ƙ:a|(Xc-O:EH<|EW3&j`70ɰdz|j^c4P{ ro(j}`a[WrND:;wp2&=9vj`ůڈ0U״Ξ7,󆔮8 Q}{rXaiO`)`VM9CނS:؋16GĻ3ʯe馹EBwqxztqhh_amUЃ)L^ECx90Vu*vvʔ-w#gwxTxy~\y~uv0zlztcF{[2{Ro|jI;}@x}7h~LVzBzczhzԟ|z{1Ə{pb7{}{u8n|lR|ucȈ|Zr}WR''}IT~"@I~7,hU:~~~V~kL~O%~;d~>)~C}7~Lu~gll~zc]~Zه$~RIH8@[x7MMAr̂N#oY@Ɍ}tZkو|c{|Z׀RoIs]@gY7AMUCᮾ;i共ȅ%]-9`}!ot koc3kZ5Q􅒁It}@փjQ7Q kΌR R6*tZ#+ō V݆|!t~k)^ḃdZLQ{bI}w@iG7W^ ~|N;EJVWg+ k{Asn; j! b?ZqZ}QۅIK%@yM7؂bi4C7($_Î0s͋򍮃ߌ{}ċsƊmjM8bUYbQօ2bI+6J@/$7#\|ސ~7~a!*di?sl/i{a7rgj\kaꆛFY݅‰QHσنP@ӄ70҃q 瞦QY>약*zr>Yi؇aՆNAYх{QH?W>ʅw5ՃĻѐqG}G Ћ}Kus4yqćّi֏aAXkB)OXnF2=>4DŽMR߳Տ5N( B0ށUy\wq$~i)I`݅ǐWʅ$NʄPEǃpV<Ղ3ẅz }F6Qs}˛y+yϩŘz z1zf"zz {zz{gq{i 1|`|X5=}O凹}\G=F}>~/6 <~5}p'}Ωz}á;}}i}}Ґr}y}q[f}h֋}`d~KX&~O㇆~G#~>6 &8$ 1LȁoGb#Cߑ!€@`h~Ay[qـhߋ=`nX OLJ?Gg>{6` ޸:}}sϨ:W;ÐYNy0ۂpu]hc`-ɁW݈zO+GoځE?v6c>Ɩ͉ק[a E1qmͅxhRpzg򊮄+_ωWXpOGԂp?w6?l'8Sgg+1hTݎ`xo‡|6i'!͕j8$Ǐݗ' \V#s݋woRg,o_:W_膼O˅GC>܄G6aŕ>zז哟ΒBܑ ?א񎢏ijw6),o/fቭ_~WLaOZ8F߅I>q w5ʃoc(BƦ ˗w؎R_U|0~QvӏnVfc^̈fkW \ N-rF3=ׅ4`ݓ۟|_gKC8~ގŅ˖ ~ Ev,nFlfR0^%aUŇ$cMzDi;ą3mഈeuxZZOȏܝNL^i^}yi_uSam;ee܉;]3U LaCڄ;]2ւՒ4ʝ:7LQ+ԍI|׌6t'fl׊ eœt\ۑ TKlÌ,B:/Ň{1𓤯ŬJRՔ:O(2p|1tJ nl'똣d?[͇ӓS RJYA҄݊9DS0Im٫TΤePĜT𦼃{Zٕ'R,Id6.@օ&J8Zi/ӂ?ܒ)ґFRw]ԪЌ㧑z؋褋rjޞ#bÈZKQM HM@F7Fy/:]ܓ'^!Κд̱̎i-ˮl,z&r9jaꈻ YI rPo;GsT?4o6x.6q4iuzujuvG[v1w86iw~x0vƒxny8fXy^;1zkV$[{Mۉ{E|L=m|5*\}z.y5 hyN]yye.yߌvzkz]}ғzv.0zn f{8eǎ{]|+U |MYV}E9}l=}4˄ ~5}Hk}&1} }3b||&}}g}uꑬ}(mď}fec}]x}U~9Mc~eE(g~=~4݃~۱OktЀ;[ᗮ 1'܄})u0tm|lpe'}]XUM`E:==4tsb؛ҢrP𘄃ՓTaJ炣|PJu<m_dύ[]!oUxbbMNE;$=%p5 "W0 әqP]ab|1ӅtȐw׏Gxp>hln`ы6XP9|H?Ks7Ʉ/lV'ܯp_Y.l~ӐrTw :og`7WՊ+OV'G(؎m?o6(.σچ=ַYwʔ 4ϫ\ɑ~ivc8nf䌽_0OlVC(N{'FV>J6-P. qU喈ԝTi2_CɯXq}\oOuN0n+ f)韋^^lV)b6McEt={Ȏ<5b -f[8^fWbOjH%$?ӆՇU8'R0C:wDӜ4ّdRサ{x)t1l-ex^'摁VatPNi(Gs?Ԉ7х00F} 9è]0#͗ zĔ [sml,dS]OޓUu-MF4>jL6;.݃[ &*i =𥕁YrIyrCk>zGD!{?R|o7V}./}@xxKxxy&\yZ{@ytyn z=fz^{ V{NH|zGL|?j}w71}/~n^|D4|`|{|M{{g|t|3mi|QfQC|^|VŐq}zNȍ}G:~=?b~7χ~/&]s<I4ܟ&~2~{ 4~t2~mb~{e~^BL~VNVG"yp?/701񦽃Ŝ2EwOSszZsӘme˔^]VsNG]?z8߀r0^݇)ӆӕvچ0مŝٜz$&sg%l–#]ef]ςVIɂ{NSGD? 8QK0䄰|+>[ArEOysgld̅eR]SVDNzG77O?̉8u)1Ł_F<Ӎ/̞׌Pmy+5rKkٕb2dko] WUՏoN^4BG?΃8S0ㄣQݢBf~эqtxјɌr k d \sU6NF׊ȅ?h8 0{Mqɔ `C<@28xbikq1j蔺cߋ\P~U%kMnjψLFt̆?7k309/FOƟ !~ᓾwݘTqGjU~c(ݎ'[njTڋ?L;ES>;16Ն"F/`ߟ;eꌑÚ4s~?wV̕ZpiXbp[oTL`nE?=!6  .t5=`9BȢ*8/]K}evohŔXa{Z{SiK܌` D~[y3Zps{}_8tOm; f#W_ šNWߐ*PړIcB&{;\3o,D9`3j^ўfيiUzisץlsF eP*^@W \OُHOAr(:Q2󆪉 +u;PNuupv-٤v}lvwVwFpݝwj_3xLbx[וyUSz%KzD {<|5h}Q-~Sxfx͏ypy,Jy:}y]vyp(yiz\/ϰe08ET:PA~}'~vs~pp ~Njw~:d6~(]?~\Va~vO<~G?3@ӎE:O3Yy+ֆVޭѫ*KǨ|Lv\*pMjc霪j]ɀ_ULNkGޑ(Arx:e΀H3'-;%lp}XiP/|Ԅ\u֣oqi cH\晀cUǂ$N̓GA3a:ÁC3׉%-t񬏉<ƪ&Ç{lHuU"okÆiB`c;\NUуNGƑYA T:^G3,w*R^vʋځjX{94t뢱jn[hŞb#\ {UpyN,Gׄ@܎/ :+I3y,bȒڑ*U}*$z夲+t^6n~xdPqtak^KIe#V^ŚSXFQѐK֒3EՏ?}Vq9Y2dEF+σ/oVk2UO<0~ڢwpzjVGdF0^WؘT?Q9蒠KE!>|86i1y+ ̎Yb]Op/}z٦w5p*i֟iIcG]B-^WvPtJP=D+4=Ѝ7`0Ԉ*B,axZW}*|ڥ@vQƧoi iNbʝp\VVXOLIxZCZl@=ō}6F0؈)bbfvՈavq3w8}bwKwwrVwlwfx<`xZ0y6SyL&ezD{e=q|;6|0})~6ey*y5y|ywyqykYzfz5`zpYnzS8q{OK |D_|=N}F6a~}/ފ~F)H~P|s|Ђ||||}w27H1te8+ {t؉@ ?{^uoFjtdAɅ%^j%X/A-QKUzD+:>57=1Zb*ֳK>ҌHX]{ u>+oOi,c|w]ކWQi(UJЖDL=ݐ 7 {1.R*χ:ڐ!}zgt匙nUiŊc<=]cW(PJssD=.7OP0fu*񲍔&Ұ6rzx4tnh"mhHb6\VP{ΈJƇC(=m"70L*ʲ\ b@ĕzBt:mڥ;grb펧\{iU'OI˕C3=d"@790u*_=y`Mי򭚘yѪsomCՔ"gY_a`ߑ&[`hUZt-OorI|C-<Ǐn6:0pr9*$걶Wȯ`S8yls@l'f?Q`ГZaT_NȘHiC20= a6a/R0t)̆҉HtYV~ƭ&xdr_$k祩'f2`ϖ8Zf@T\BNHQlWB <66su06Ä) Rxǃ:(~wŪrq \k0,eAB_LܘYrqSbM]GAВ6O;ΏZ5d/)qs`%F}shw3q+jv3d}]^jXĞROLۓ|F略AV;%p<5.(3%}xԯV|ӭ+vpoBiCc] X cR7ΘK \F+ْ1@X4:[4M֊ .!&'kTw?w{_wv:wqbrwl}Swg+Gx3a=x[9xUȠy{OyHdzA/{:k|3X}A-c ~'(~z߀z{HzXvz]pzJkҬz fizB`zl[BzU{ O/ {Gۙy|6@|:Wx}3Ώ0~-P~' ,}}7{=|v^O|qV|ku|Kf|O`|S[|aTҠY|Nޜ|G=}@蕤~(:rR~3~-a'o˺qQ{Ӵ|v5p~kT ~|eΩ:~T`SW~T%t M5Gx؁Ab;+5/⁁)K͉zFNtܰ.oxid/i_,LYqKSƟPM@|Gk߃^A+n5;;5 /H) ބ4WCzt%o%gEid$ه^Y,._SEMTG@2c: 4.(߂\+~byǍtGn׭+i cc9^"ωYX vRćLņFx7@:ޅ4Մ?.y(삸T}~&2ytÏnh@cm]WRLgFdM@c:w4.1>(Ĉ&3En~|y6tŒn%h%{br^9\ޤW}9T3b8x-Js'SgGƪb{ivq\nkd_e^YT! NѕHHǛ~CZ:=攧8R~2Xk,V3'[֮z}vKp|jSҤ>c/^O%XܜSp; M cH@Bt:=7i71ꎠ,.-&b~xyxtUxoxktxpfxaax\]xW `y?QQyKŠ'zdCD_8Zs~UG#OICq=8 <2_؁,&ۉ}7䉩xb|s[nTiJ7d6_&%Z݄TĄORQIbC{W=Ǘ@8K2u,ɍ~'F|uwfs)]nic̮^nY~TQN΢I*ńCT9=_7ޔ"2:,k &,{޽wXes RmƴvXhscI~^#tXuStN;dHB ==J72?,qg&ϊ3{ϒwc ~rַgJm`4hZd(bͮf&]d%XR])S _/MHHRv"Be<27o1ܐ,jg&҉^d{ wKr`Umtg[b#[,U˨J.PdgKؐvFbJA;ˊ6YN1D +܄&7youBpk e*_<~ZWMvU,\|PouJXEx@gi;Q݋%6p50R+@p%xtBpj4dڱE^\HYwT~OlJTODӞ?: _5i?0D.*#%AxQ2soijZd.m^3X櫠SڨBNťϘIERD&G?)c:F4˓ًn/s}'*.$΄xy}vWywbyx͛zyD!zNy︒zzlz{.{{{E|C{p|r{|w|Y}"i|)} ^|s}~S|~I#}6~@}jwd}nw}yx8~̲x~kx~y&~yt1My58zz[zvv4{j{$_K{T7|J|t@|ucvu+։w˶w1w킢xUxXy( y5yʁ~y؁tz~iz΁_{q~Iy@tzizo"_zڂS{S\I{ҁ>|bsdUtԲtHuYuUvEw!xwx9x!~ry-AuzjzV_SzI@{>|Pfpup͝ҢqEr~sPzt%Nt┯u 5vJhCvۏ~wosxU'iyn^yوTHz1Io{<>V{opHolpРbqrl"syt::uuvNp}vhswhiUx\^ykSz8Hz놤={_n%o%pq ZLqrߞKsgtv'Gu?aun}yvs@w{iSxhR^Zy)S\yGz]<{"m5`nPokzpf޽qZatrQs2U[tΒt͛Hu}9v:s?w&g|w8\oxQyNF\zh;/zۅls]mрn̯ o̬мpʩqҧ0mr\s3tdu"}u_qvQg wyF[xBRPy bEyz:IzkgmNn@;ưoJpTq_rBvJs$Ls"t|euxq$v?ewOZhwOxD^y9.zpFksôlАmv6nڷo᳞phqجrǩsTtf{u/p-u2dv^YmwNUxqHC9yL8 z;&k9 1lWYmvŞny%o*hpq˛rEse:t-{/towuƜcvXwjMBxWB-yA7z#LjΆwk`m ] n.do=pF!$qRcr@돚s0ԅ)tazxtţnuBcvtWw\LxNJAAyF6z>fj;ؠkdΜlʮMm,nplqOr s z|s˫ytmubAvlW wcvKx_@y\g5.zrb}v+}jvҩ}^w5}dx}wy=}z#}zǝ}{%}{}|)|}|Ft~$|h~} _?~ }T~@~HJ~r~?~c{|LQ{|f{|U|}f|9}|g}|} |~F|~|~} |s}/#i!}^H_@}T}Jg}1?~ fz3@zqzÁwz{D{Y${ȁJP{JV|69|I7||z"rn| h|^y},T }dI}?;}܀ xÇژy@/yy6zN'z;zΛ{Ab"{{ƃ|{Frl|\hC|]|ق9S} IW}m?"}ԁf~wuٺx xmHx抦yUװMyÉz%hqzyż`{[{{eq{g|K]]|S$|H}>>}~vvb!wk"ùwxh x Xy\yz':3z'{zRq{g5gn{?]|KSR|iH7}>-}puuxlu'vxvwSx0x˚yy]yތ{Ozpqzgg{ \|R6|pG|s=}Z]t|u uv4=vǖfw`Jwp*xo"xfyO{*yڍ4q zkf{\{fR| G|x=>}&st3$t•utKvحvwJ3wؕHxe;xΑzyrpzfz\{Q Q{Έ=G?|Hp<|„r䩇։s}et_t¡zum0v$ vŚDwZϏ*wńx`tz^y Jpsy fz]\z苰Qa{qE{:|errǫ&sut8t⣚Iu8v[Ԙvgwnxsz#xpDyCFdyڏYz`&O`z芪D{k-9{qmՍr)˸r୿s˷Ett-uEuӘiv3w3jwryuxOgnxod\yYz/Nz‹D0{k+9){IޱpqGrXs1sά]tԩѢ%uݗv.΍vϠσcw>hxw nxc:y{XOyTMzv^B{@7{ pxyqF*ʷq!r˴Astq3u Vuק v>v저xwm*xE?bxݕW3y~,Luz!Az]6{\pAӪpqzr\ӵs<Ht tدuXav=?vwwlexaaxƗV]yhKez7@z5{coopxq˿yq&rתs÷ ft"uP-v @vvwTkw=`xUydJz?zԍ4{o p(̅Ȣpqwr stTRgu ùvVvw=jjw_x/TyaIz/Y>z4 {͊ue&vCʀw$ʀw丫\xTy[L#yzy{o{z |/p4|e}\Z}Q~~,G~~=*~}z{ _{F|.I|J|7}$}mX}U~~za~~OpR~~f~~]&~S~qH~>~0~'YA~=`~=l~E2Q~bF?~j*~o%~o<~gB~cBy~QTp~]dfl~vb\~~fR~sH~>~e|ԅԇ|Gʭ}8}+ڶ}Xo}{}ʘJ}}9}y{}o}if[~ \q~%Ra~6HI~Eo>S~W:ݳ{ȋӨ{Њɝ{|0W|g||̇b|ȍ|7}y#}) o}we}[}ӃiQ}G~ ^=~.z!zǏȠz{9{{ًԡ|%|&V|WA!|qKx|voD}ee}J[S}Q;}G}Ѓ<=!~yyהǥz`z^ %zj{.Ơ{l{w{X| ?x|1n|e|Z}8wP}nQF}-<}bIxƜшy |y@yy zg4z*nz{(S{kx6{Fn|d|qZ|·Q}F}q7;Ixxٽx%yKAyz ӕzZ,zs-zx{4nU{d|4XZ|Pp|އF}-;}bnwBЕwQw㡸MxBExy*yJywyz;z|w|zRn{dKdz{CZ=|38O|5D6|9|䄓6vMv[ƯwCwx(Шxy!By|yɁ*z:TwKzmzobz{`W{M|0Cn|c8|]؅vφv[7vxw.ɲbwæA"xV6xơ"~y*y yϙ8vz.^lzb({ W{4Mk{B|^8]|u uϴżv)vʱwFҧw٧xNx;2y.byr!v2ykhzM`zV9{L^{A|7.|dׁumhucuûHvRfvگsEwpCew xg牜x٢Zy+uyjz?`zUzK#{f2@{Ɋ5|=y]t͏uĆuEu۷vtw w#xx~xDuyhziy蚫_GzqTzߓ:J{i?{ 5@|PxCtkR̭t,t>Guo\Iv$v5wN&XwڭYfxd~9xĥht=y?6i'y͝$^oz]Szߕ I@{o >{=4N|x\.ttGɥtouTuνMyvPw8wxA}~xsmy8hby]zT1RzH{=|~3l|Ovtuu[vx׃w0lwHxy4yˌzcԁzw[ {m|#cj|Y}\O~ExQ~;k:ztmzу{+8{f{Ш+||P| ?}"}Aw8}mǀv}d3N~*Z~P~G3B=]SSUĂl6 iZ}ۀTwmdRZPG$Q5=]UיKĊȄ 䱈%rgߔ"bۂh%v~mNqcqZShP].:F<~֬73*KÌ  bfН[JTȊ\)IvP~;mcgY O~wF~ׂ~gu~l~c~؅.YK~ӄoOl~̃E~<1~=Ժ}e}@}g}&~&~Tqm~MY~1Jx~Do~!u?~#lK~c"b~ X~'N~EI~;~ԇ}%-}F} C}C}o}'}Ւ}}yM}ug}Xl}Њb~X~#{O<~<0EQ~R;T~W/|U|`Kw|r'||̗|}l}Έ};~}u }-k}z5b}X}N}nD};~ ^{W{Ģ4{ҷ||5Фe|j|| |J~q|Dt|ېDk}-ibH}jiX\}No}C0}r>9;}UL{A{9{M{{4{{њW||2|Rq}|ltf|kA|ѐ`O|V-}L}BB}`S8T}хzz2\zʩmz̭={1MY{qϙ{\r{̜{}x|s|'3i|P_|V|tL}#A}PO7}}o'yȣzz7j^zqzzl{$< {^{|{sL{h|+^|WT}|J|*@}!D6r}YiЙyh yz+zŧ+{{=|I{Zr{th{]|ES|I|~?|-5S}Ϩy3Sy74yPLy/yӱĢzlzn zza{{'r{pgY{șw]|#R|yYH|̎>} s4}=βxTxxtx佾y-+yN~yҲz) sz|^zͧ{<{ qD{Nf{\;|R|yG|Ԑ^=}03}rͷxŞxý/xϴx۾̪y>ޠyLyzNDzzzp~{Ie{V[\|Q<|G)|=}]2}|tVru1ucvwFWwYxɅ0y.)y~mzHtq3zk6{gai9{WH|xM.}CÀ};x~̈yȹ[y{ztE4zǭ{ ͅG{Vq{@{|d})|t0|k:}daʁ}XYY~N݀~Ec^~;_1~~ԅ~ĵ:~Ѭ~̣Zx~ǚ$ ~Ӑ~釰~} t( jPailX*NED&; Ј\x)~z~ēqW~ht~]~DTR~J~A+~}7o~e?·ԺG~ۧ31~Ѥ~ˢcS~ˠ'~(~u~4z~[p~N f~?u]~u$T~eJ:~QG@d~O6~>o>~".~p~I(~Rj~Qȝ~U&~X~M~Gay}kp'~f~\~+Rt~I8~=z?p~D5~Pɓ~+}N*}߱}(}%o}IQ~l4~~~xv}Xo}ٙ5eY}[~Q~H"~>o~4~ȩ}}i}l}}{̦f}}h}@} }Ǣw}Tn}d}͘JZ}P~oG~/=e~.3~1Ǿ}W}V}}w}9`}V4}s}}w^}rWn}qc}Y}P ~+FC~>㊉y)zW%zZ{z{{kZ{zk|p|wh|^q}iU}L_~DC#U~90}03}¸S}ԯ}馥A}‡}~ J~#\~Jz'~apЄ$~g~^ڃU`0Ll[C:9ހzH΂1׈v&plF(_ㅩ=yDpwgă^U wLNn^C ׀M9Vfȉÿ)Ƿ)Mg!.ԅA,悄Yyȃ"p6g]ۂ^ZuSU*L cBف\9Y DzwBFPkJ܈6Fgֆdy]ȂTāK11BT9SCbz 5WqvÑh, x@Gofv]|~T́ mKȀDžYBf69< …<ޙ]6wUK!#.4Qwȁdnf0n](FT݇Kpt{B% 8=u(R"ń C8pz6,‘j<[wQnY@Ee]ZڋT*YJ!@7[ĸKࢳtnJ^ӂd}b<v߁Hne[RX7uI%y?q6t|tӪ 2gy <Ѣ^y;ANc"pvSvmde[!YcQ Hi>t5k7+N[tڬ}ʪSX̘ڢ_񁧟=hv~(u7ld~cf|I4d|ܺqC+:puX"}3ufl?3bYOڏFq!=P<3 X&i|xӁVrAׁ#z}imtB k a9X<ߓNːEfy<N2K#Ƃu_jһ̱E^54͗2`Ǩ|̀s9j1`WdMϒUD;"n1ڂ>ķ>U񹲟Զ)`߲Íͯ5߀|"s&3i͟`#VM(Cڐ]:^ό0׈Csېt3Vt⎤uvB9v瑍wŊx#xwyIn]ye+{z\&{fS|I|@}~8~CQ~xroxfuyyqy/zzu%z{Gv{m|d|\ }S 1}J!>}A!V~h7{ vV}G\|ύn} z}%})'}7'A}R։N}}c}vn}mhN}dׅ~U\~S~J$A@7VFK2Yv䋵ؠfzY9`%CĀv߀mՀdo+7[lMRNIӀM@ЂG8=UU}*n =񄝟ŠF&Li ~-uRnlt3d< [:R|I}@߁68:9stΉ4$'Ӗ5iN*~}ކu\لlb"oc[eRS.IւA*8L;юdsrq?ωꅤ%}WIgtv{kˆcyY[ۅoRV1I@ρ܃ 8ULa"G1XΈאpVQ҇)k  L|ᅥtykބJch[ Z RvȆIɂ2 @7ܾSpGȓRjnď|^,stkn"c%ZރRbI{#@;7b `Ao͜lL%Ę?ݔㆍEt&U&{фҐs8kmb/ZƂÊQ*I=?V-q6ݢŶXО̇S;͚pBM{Gsj̓PbӂY'yP?GV>@+5,E+dޥ6bXᠸ]ٜZ)ޘz̄^rmLjYa₎XKOƋFOK=$4Tl꼃Ҭ<+<ΧcE>}X zIqЃc i̔x`jW\NE@oN|HI|eO|qe|{Q|)|{}s}2jMi}qbv}Ya~PN~`HF9~?{46ʂ+`7d?9[#6r$Ǔ~5v{dsrr‰.kjha}Y] P߅H,?w6Ȃ 򺸑Lu|)]ϊeւAzЂr_iaǁeY%ځLPHM? 7؉ [ՌS+ڋaS/z]q҈G)iMHa5VXԅPyʂH'?7Qא.; g|KRrxEډLW,yv~qh `hjXP,Ƅ&GӃs?7^;MV/g!" ̋Ŋ;؉N xk pׇ{he `ˇ%XYPGZzGꃋ?W6ɂ׎{Ǩ܌ڔ*& mPdd6Yˍxupb~h48`+4X9P"GD>dZ6pw؜0G{gmuSVۇ,j߈`wogƅv_H-X!OɈDG=_4dUꜗ%?×񊂙 leݕbwm_Zofgn_*V[+MSE1q[{!S/ Jm]Aˌ39O0cqoZ~]@]<խqńy|HtlFϞNcᚳ[NR?Ii@ނލ8,Rh/ćOndҫn`牐̔Zܫ}{ӇI.skܡbޝZ8Q] H]@ 7\. 4ٚgsYsmDt-tŗueOv IvI{wFxJwpUxogy _MyWFzNׇy{NF| >#|5S}%wSwՖ8wWxDxOxiy[ywΎGz8ozgM{ _L{V{|5N|FQ}M=}5{#~Hs{{3{{[{ǎ{܆S|P|Bw|}o:|g|_{}]Vۈ+}N~FH~n=O~5~ݖkJLZ:+~!~Ԇv~~z~wr ~o~g-~^؉V@NWF0i{=5 *Sƒzɕ\phl ;~ivیbn>fk׀^ҀVNFbb>##f5Ԃ29Ć͆oʐƅٍЅL_{}E`v7n<كzf ^O5ł߀۲ uܪݓDs̛-*<4^M$}0·?umyeoU2]ȈmV i2N\F@=>5灋N1~ݓߏϋߎpՄXZ|@ u6%3mV4eEH]UχNE=΃#52R˪=񒬛) Ptޏ ώ |>tld툊f]GnUsM†aE'=V5)~L0cnŚۏYd{qW&{ËUt.ftlwBd:]\ZUluMHnE `0<BN:Q'2"6#e襺K'vkGkrSYЋ@zΙ,rrjb߇BZƆRmJZA>29r?16G®=ɏjҧՍ )XV$i6.pټ׸絆7;{< #PwpfoˉǣBg_vW05Ɗ-Ϯrʧrs21DsǙ#tn%.uᖖuvG|Tvtwlxdx\Č:yTȊzHLlj{Dćg{<|v43}4非vכw3warwđ>;xxt˔x{fyOtyl"z'cfz\T{JTIO{Lb|pD/|<}q4s }ujzzj3{G{e{.{Ib~{{ {se{k掽|OcČ|\|T<}nL>|}DP~~1~6U~~f~C2~$~ zv~&s}~3kx~Qc~~o[ˋ+~S~L ?~D<9 4h%z$({VځDgFzӀrޏYk4܀~c2z[zSLTD(%)Iܓxcϐ~v]wo͍hwagYIQv9I5Aȅ9w15RҔY`呙Em}텙7 dn/!7ߚBE§%ץ]ޣ8{ߠt|۞=m ޛe`=]UM)EÆ>6,k.Fsݦz~Φ{6פ7sޡ{lM䞻dXm]2T LʈD=$A5Pʼnr-m:tqē^8QwvEϐsƪzw᧰s 礸kc܋&\uT#6KID1X|QG}HU}@뇂~9~r1;~ϥ~EΞ(~\_}ْl}]l}) }}9Z}vM}oX}gԐ}`~ XԍQ~JQM~Hf~@D8lE1y}4fWȘx՚> ɘƀڃ_|ʕmuܔKn=*g_ЎXPbH-@$9a1烒~!D2 GA-ʃ|+@uQfn҂g/"H_gX8߁PƋ?H~A>:9~2 À[eM󉋗ːaL{(tҒn t=f̈́_(WߌP.HACOX92$ف_ioCTMWXwZ{LtgsJmfPT^ލWQTPL҄H|"@l9Q1탤ˤ7hׁzxsmeՎ^iWL "P:H;nv@džf9JQV1H4Dk02Q z`skl~FeWD^( VLjOdH }@b7/̃Dݙb)7ӔՔcEy˒̑rܑ`tkdێ](VNĊ0@F(>.7v3/â} 6g!1H`yNrSZkkGd3_]Ǝ=UcNFh>Ն-7Q/ڢʘޡ:ȟ#vȇ 6ޚ;xcqCjcF5v\&VTWEMEE>6z7P/mI"qٍ,fwvpǑ9ibh1[YoQ͋{J,(CMߍ;A4,]Kߙ#2’ٕܰ~\|쓩uncgAI;_󎟜XϙCP勭IHXBi H:=3,,'rossttxru3y^usuLvql2wew^ {xWV9yUM썻z;Fp{ >T{7|/}tTvI8`vrӢ]vgxwwwy(xHrxl y1dÔVy]O z=U\{Mk{FNM|_>|7}/@~D!y6nyjyzz:Yzux)zr.zk{5dY{\ᑚ{U9u|Mq }5F-}>Lj~79~l/r~؞ä}3}g@}A}-.}}xt}q㗱}'kI}?dr}w\/}T~(MR~E~>~71/lr`ā퀿=tb8~wq{.jӕ.c$\9TގM@Eꊲ >r7B/΄~H"LC̄ݜX~gwpkjwӂ7cSŁ\wTM/|EC> 70}.LXÇӊ!(Q}w +lpYj*b䒒[~|TKM/F>񈳂%70_LM-Ì%95=p}8evs6o𕫇ib"0[=/cT;bLPcEr>ʈ7Y01tPɑ%4Bܝ5|voi=$h񓠉QbЈRZҏ܇RSގ#L"E=>d7` 0 ([ ֓bS=כ!|OuuˍnhnRaZs_S}pLTzE6 J>=6փ/Л֠[ԉtllƓ5{͘u0wnݏgړ3:`kZziSʊAK|ODX=6S6 /!&P%W #}{QԕKt;m씰Ng@`aHYYhRyJyC v4wDuwz$TwtxOmxgy4`yYpz+QzJ{C|p;O}4i},i~Z yUyzz^z 'z@y䟻zlszmZ`zg{%`1}{|Y {QlT||I}C };͊$~4~{-3W~ĩB}Rt}+}o}|y4|s?"|m }fĘ}_*}LXғ}QG}I䎇~\B]~;؊~4ć--Gv!(?;4.;e-ȅbȃTxrYA e?{^fꅩWP^IBދ׃< 5:X.bc ΏSY?j}wD‹.q ϊVj˜剆d]W'tP/!.IGrB;ʉ4v. ` ]죡zݑ: ,}Q;#vϜXpsj9c󖰋]ddV;OۏHBI;}5ւ.Xv|IOÓq|DvV %o.i[cX~\֔6V=O݉HՍRBRQ;ӄ4 u-s~Cd|Puٔ>oNh4Yb^\,* 71@ *s7Ry0rC7k e5q^ڝAXQQ)KӓDs=T{7g70.* ,9s`sⅲteVtzuJu;uo|v:ivvcfwN] wVL:xN1ywFz|?g{=93{2~-|+}xpvVwwh쨌wz4=wtyxn}xthxbŜy>\XyUz;M{FC{?-|t8|1}*N&~h®yۋpGz˩zDzAzCzotJfzznZzhhzbu8{{U7{M|FJ}5?}8H~1~~*dž~񐣭}g} =}#!|z|s|n|h=|b!|[};TK}M8}F\\~l?~81~2oX+Nr5ŀGÀYyFyqscmngTaƛg@[9T DMnF8@9k+2戬,Y%/!cysEmHgJ^a[zZu.S䕫MKF&@ 9y2x,x#?Ň͊7*E~ xrlٟEf֝(`Z0GS땲M5Fv ?􍓂#9z2E,k$ۏ]MC٩80~)&x8kr.lPׇ'fT`djZ̅8SVL:F:׃?ƍ]U9D܂2ňn,?x͉`׍󃻦ƍ}̤Ō?wޢbqk؞{eϜ`_њ//Y7S4eLiE􏥅M?~:92S,gsf whh|}~uawklkq4_tkK6ce;!m_9xYNJRBL:FoE?AJ8̊ꄼ2, ȎTը=}3v.op&Kjd^،X:rRE'K7E+e?58ŠH2Rꃅ+Յ+舀a|vlpEjԑcѐ]陿Wؗ+QK]E+>ތ 8+|2Ճ+{o7ݧm"={u١Ƙ ozΖigcFƓ>]*WP䔖J׋E=>󌨇8? 1܇DŽh+iYѨҢ43́k{ {A=uwnhbĕ\{VJPJ9̍/D~>wi881؇Ą+j拮S+¥czlt{ng񝽚a՛̘[ƙӖUOU~IyڎCK=x7W*1݅*Zq(TylsSmR g4̝aa[ T?DNjHBޏ ft`d&Z\ S}MӕQG(QB:b;܌匿51/\d) tOt~uDyXuptuo*v j tvddw ^wXxR;f5`e/?+)RfXns{xuKyo/iãzd^=nMX{R%L]Gr>A!<M5y/0)\kE7TzUt*o,$i mc^]jWٝ%RLAbFŔ:ZAU 6;135Y/ĉ)l$<`&]z*>rtPenmhL^bU\jJWQ Qc,KpuFG@v:;Z5Xs-/V.)B,3~42E .QA(zP3f{z쉨vkqdl4yfad\\GV)QeքK˄E?'9ˑK3 .+'(_g{1v[%q k:=ffa[VTՇDPםxK(E7_P?Z9Z3ʎ".T (=muz@v*pۭxkqeݨ(`~;[]RUoP;mJuyD8?9_%H3\t. (D1Qjz6u򯾒 pV ke?s_ܥZmJTOwJ*c?Dx8ez3b#-9'܇a~vy tVoobiݪd9y^Y2"eSƠNaZ!I8UC͊e>v93K-__'Ç}ٳ}:y"]t=6inךicR(A]kXS'O8ŐK3+(-s'؇}sxxOsq2nםhtb) ];WRM0fGRBލ*=i]8*H2ɍN-) 'xԃ"|W}w^r8smbbg8a;\zȚWN9RHLGrNAޖ<Ó|(7rr2},&ۃ{vucrNlg^a0_[ĥVgQi٘K؝ӕFH A6%C<681R+ߊچ&DzSvuֻPvfqvulvhx0OxJ ySB(zeITzB{<)|6"}H0Yb}*h ~$efz.{u{pq+{9l۴X{gױ{bz]{Y{ET2{uNϢ){I |KB{}<}61~R0k?~*W$߉z?~avDP}q}zm-}Sg})bz}]}X਍} T}N }\HE}BPx~V<4~6Wo?0 *̌%@Uzs2uрq&!lWmgkbX _]e'7X*!S+M桥(H]7BShx+(Os1oKj7{eů`[OV'QEL^؆3GWuAt0;H6 L1(+Œ(&QwݹӐpsHGoV>jn Te`ek`![ 튳U P2KǠÈFF)A*̆;[6aF11As+j&Vwseo!FjR2dL)_v'Zj؍!UN!P)1%Kي F/@Ç;چ[6ZU0FX+B&5؂:w>Ss,㕄nɴl\iԱٓ,do3^YʩȏTdO,?JˋEQ@;Ȧy6 u.0Ǐ6+A&ʂmvݹ 0rnDi=c^F|sYT ᐌOJE@;p;S݈N6ņ0*p+E %vYܝr Ym|.hDXc]r)X\SߒN},IwADe)?i):핟E5ʒv0p +Amu%fu١qS l2ngbX\}WũRN H젤C0>x:6W5Bn0+>*? %@Cu pl@ga*\$WٙRH cMq8>HRޓCZg>[9݋4/j*kB% ?t[o춭kC\RfMۣ`F[qfVnQ3L̤ktG Bg =׏o83̊.菝)ӌx$]kwswt,xuȿxjvվxwNyxnyjy(yyݓpzzzk{:}z{t{t{h[{|3]w{|TS|}I}$~K?#}~uUz/u{^vg{xv|wD|cw|¨x}) x}#x}EyN~C}y~t>zb~j+z_{:)Tq{I|1?u|]sS.trQou*n uĀtvMrvҀoJwSwsw؀{x]wx|xrygz]nzR{G{=|Kr;EsЃsD?tAuK>u+vܜww+Hx|_xmrsy%h*y/]zKRz⁨HS{sx=|K;pڈq׊ϤrŨsscRt3Zt uqvCّvB8w|.w:rrxĄgye]zSRzG{JO=|[o٪pBνqČrYus-|tCt uy|.yjnd؞o͹puyqZvr<3s)s֛tvuv=Z{vqwgxLJ]JyqRz_OHE{&.>#{m0Nn͂oÂp1[qrzirf9s?+ttu!{v\qwYgxDj]RyRyHozЅ={l׼m<\nNopկqrlsutSu{uqsv/gpwI]MxʉRyGz=-{Zak%lmԢn砍o=q8qtcbuzqVvlKwA"xY6Oyrh(ʲ7ihYjkܾ#mMnnU+owpƌWq܂rwsz+ltla9uXVv_K!wl@)x5TybgTBijEukAlο/n (ko4pNqjwUrjw,sI ktQ`ouFUIv^JXw{f~DyyyyyzzJ{.z{z{ҤY{|B{L|9{}/{}z{}p|@~*g |~|]4|~S}"XH}i>}$w~xi~x8y*^ytyqzC3zzȄR{'z/{apx{ǀf| \|x?R|ԀeHk}*>}v8w >,w2w6xLy=$yqyЂuz5'z|hyzт7pJ{Dft{\`|RE|uH8|M>}Q#ނuIZhuщk5v]lvPdwxxryLyty yzPp/zfZ{s\B{ރR|TG|ł$=}8ݳtӑtN]tuvg6wڗ{wύx#Ƀ_xyTyGo/yVeMz>[A{52Q{Å%G|V=|$q8r!sd!=t%dt3uؠvU|v)8w݃@x _yxo"yeseEz[KzQ^{XbF{<|o[p2vq7dr맆{stߊuBuvLvĘkw_a^xVx|L|yAz]7k{ yS4[zԈltma:Dn: o>p_ qu#rjsSt3}tsuhv]wt*S;xOHy6> z3z{wvrі s~tǾO~u~v~wj~x0~x댪~y~zJx ~W{8nM~m{c~;|EZ~A|O~C}E~G~?;~A2@}tx3}gx=}fyf}sz}z}zޠ}{e}{}|O}|x}}0na}}d~ }[>~(~cQ~@~G~\Z=~uo{}U'| }Ơ|*}޼|U~$E|~N|~[|~|~\}~܁}*w}E>n<}rpd}[E}Q}G~*=~?_ؚzkzz^{/{[{ۂ),| U|/||N|w|rnJ}^d}DA[}}'QK}Gw}݀=~ ya΅yẏkz7z{ {{F{w/5{Ɂ2{ڄAw*|m|wd:| Zm}$P}bKF}<}ށ#x50ͷxw xŒ)my5Pycz(ԝz|Qzpzƀ{8v{Bm|| c|qY|Ą(P}~F>}X vϘ}w_xhpxgxג^Wy8yAuzl[zb{PbYF{ʈO.|1PE.|;'|3;tvctGNuxv%%v%WweYwݗQxYx“yKuCylzc0bzBX{hjN{߈C}|`9W|{ustJEtϣvu|v0gvڝW7wkDw15x\$~xДtyfkzX`zhVzዴL{^Bj{·\8D|%6sWcs}utBt.FuȤQverv-wxx\}xtrx j ypc`Qz#VSz_L+{CA{\7|-mr4ssUts"u!SuꥰEvv wRw}/x!sxiJy0_yTz1K%z7@{wh6{熮r$r^Ds8s&tYuvv vw>|w֝s.x^ehx^=yrT zIz?{|5{3Мqi0r6r,s嬋tHu A,uv^v]{wrx' gxę|]yYS,yfHz>{4{5kqR3qrOUzss%(tupvaDv{]weqwgx\y?RYyߔ5Hzvx={,3{։}}}Ȓd};~2~8~]u ~k ~b' Y2DOF3~<~~"~~~~d=~ց/~ρ~n~~~t~xk~b2~X~OC~E~<~}^.}}/}ì}ɅJ_}ٚ&~w}"}~ }Xtd}k}~1b ~\xX}~k'N~sEZ~x;~EB|zG|s|||?}/}A]}?V'}9}}j-s}wbj}τac~ AW~%NC~: D~M};^~mu{K|{jI{_A{ȎQR|XQ|m^4|x||}a|ֈs6|jQ}g`}WT}݅8M~WDh~*o;~\ zb<;z$zœ{{^U{{{ƆZ| }|SsW|lj2|؈`}*W^}_M}DP}̈́W:}&·yyǚ{zz]z`V{({Cq{g{|{8r|i|{`|ىWW}%8M}RC}zD:A}ͼxڡGyLy_,|yX)z zzoz mzS?{{{ry{i}|+L`h|}{V|M |A|8I}ExCģx=xáس#y y%y曝z7z|z{E{r!{^i{ɏ{^| "T|GK.|A{|؆7}ww+x?x?4y柙yzOy͝Y9z zkzzoqzg{B_^{Ty|J|q?@|Ƈ6|v˨vﱓÅwG wx xU,xÕyO4yzyzydpzf{\{PR{I|&x?||5|̆!vQKv³xw1Hwͨ"xӞxtx?yP6yey_z4YpFzi"ezӕ\{(R<{H{>|04|v v^"vϰwwJ4x!xxςiy\xyXoz7e6zL[>{ Q`{wwGp{)=|D3|u*vlv?%vTw?ҝwð]RxAxqy&x5y¢YnzldozZ`zP~{u@F{菩<|T2|Ȉ u{LJJuø%ulvd+3vbwxڊaxy^wycmycz Y{zO{~E{3;|uX2}qXfqģrst| uL8v7vڎwaExL{내xrsyhz_e{WU{Lq|C }9~uw̅wz愣xQx>y iyKHyzxvz{{brL{iYd|m`;|W}bMۀo}DU~r;ׄ0| ?|*iz|o8||Ÿ|ς{}Ԃ}W}{c}r& }i;~M`~VԀj~M DFg:0«ʹ݂Z7+d=8g"[{Sqpif"_H5V9M_Ӏ=DA:\Seֆ0ʁS7HP).cƕu׀0\{)qX?h_߁VdM\CX:P7Ɍ1@'\gr\U ^j9،KSzV6ph)_UL{dC%E:1*Ȭ76tuz^#P_'yp4gF7^|c|UXIL@B.9$Q9~r~ϷG~X~ő-~׏~Ĕ~ꍫY~Ì~y~epO~/g|~(^~чUh~І L?~ƅB~ƃ9~ǵ}ޚ}혨}׮#~jL~3ݜ_~Vr~S~:ł~"yy~o~!g~\A^B~UA~K~x8B~v9*~m{}6}JZ}YR}}}ٛ}/ }:}Ò{}px}o`}΍f~g]~-T~3K~9fA~ g7~ !|XV|7|ʟʭc|ڤr}؛C}>_}R}YB}Zpx}fo }pf}\J}NR}ʊFI}߈E@<}P6~ Eg|j|.鵻|<{|f>||ʝ|㛿 |8} wm}7n}d}1X[}-R}H}?j}ćR5}߅{<{$/{o3{m|b6|X]|u||v| m|ՕNd}Z}*Q}19G}>v}94}ЅQ{}{W{4c{w{ϙ{|b|B|eu|~m)|cE|єY|PR}&F}8 =}j24}YLzλzzųO{ L7{K0+{-;{Ч0]|*~|#"u/|Llv|xb{| X|Ob}E}Fi<~}|J3},Izs-ze zf>Uzz󱞘{CR{{ɧ}{ht|%k|Q(a|{X|ٕN}UE}Q;}o2}ֈEz,ęz|]l|Te+}K]}BN~B9*~ĵz{G{[K{{ģi{򚆆||Xw|X|w}n}dfC}]TK~TV~oKOH~BE9N|>ͳ5'wBME07RÃ]wlnif>]2T>mK8B09 Ý Ma˅35 laZ YH?0=453|DӖ3skrb&WYf^gPV:5G&) =4~􄵾*,eا-bڤܝТ ֠:({[s?Lj]-+aYXlOX~F/~/= ~3~-wɮn`siQl̔{Dm]{Eri`t~Wa~N?~E8~ϋc<.~3 ~nt ;-㭺~٥,Vg1|'zpq~h~L_~ږ Vo~ӒMK~ՏD%~䌯;~2~҆h.^Z~ܸ~x~~ïsK~k~FA~y~q%~ןh~Л^~͘WU~ϔLq~ۑrCX~ :5~1d~~~(~E~a+d~}Β~~Э~ܩy ~0p[~Xg'~ɞz^ ~ϚT~ߖK~5B9l 0-LR}q*Uwqsrʦst]܋ uu8u܅fv}YwYt͇xl-qxczyZzQ{\HփI|-@5p|7p}Vv]vi%=vwawו$xR`xօcy]}ytgzYl{cF{Zd|7Qȃ|I}g@1~7SY~zz-zܥ{{;S_{i1{{||Ot^7|kG|c-}[Z|}Q؃9~I~o@:~7^3_5~/'~ҥ~~~~Ƈ&~|]~t!~k)~b?7ZnQ~HӂT?7QvشˉكQ=礗ł]H>݁:"|(vs=j[bZjQ*ԀH|3?с7j퉅t _o‡Ⓟ(^|ℎ{83s jyFb@Y/Q']H?恅7k>戯 L ^Y*X.Չۊ0Zzr.=iփzaƒ[YptP邅H]5?Ɓ{7 pБWޏKT؆(<ߌD{]dƊz5rAjaY[P6H_T?-g7@w}†9~Nh<ƊAygqЃ42ila4Y2PΆHPv?ׄ@6Ԁ__ZxZ)UFP:tΐydW1qGۍhj3`-X݉PauG>'5E@JɅɟృtԩ ӄԚ6 .ѕGkx΃ pOh"`ҌWqNG+EX=4c,ɸ(@keTLd\vzΚHwDx#”pGh0ؐ_yVXNE9ӈA8q`/LHڭ]UVԂj: ZQ|/tl d#.[R"I[e@7뀡/,Dpᰯdqؑ6rl43s43sΎ7t/uo'v-yvqFwixZ`χy?XVpzO҅szG@o{>i|6)^}k'uyӑu٧ vRN'v̘DwF\wÉbxI&\xy/Yyfq *yhz`{ XI{Oʅ|[G6|>}5,~eyȯ~5~ю~D~B}}ڏ؋}ň$}΀}x~p~@h8~Q`:~WC~Og~G>c6, 7΍q#L3! KYxQep;xgvs_ҀbW fOZ9OGm?>D6+ހ=9ڇ,ʍt)QڞaT؎u`[ƃwcogk"_oMW;܂OF؃Yy>26H܀%Sqݝ(jvɆk 5~шHw)ontfȅل^ʅ[GVՄŃN΄]F]>;6U⁧;Q 8dSHF 5*Iy@mڊJӕ1)0ꍂ}؇9iv*{enREf-^LV+N`!F6=5ÅϙyNJAz1? o}K͏^um̅ee҄J^9VON tEւ` <߄f4 0C:쁱2l#+v))=͠/Z:g{ps]k鄨~d'[ÃySj|Ka݂876r.б6p fqRrurҔ!s͑ftPS#u }uuэvmՌ(w@ex^dxUƈyMzE{u=lg|T5>&}5_tR!uTu͚vDIvČwD]w}(x[unxmwwyheŠ,z]zU{rMx|EPk|=-2}h4~6y!yAy~Xyy}z"zq|zuKD{*mj {eB{]|oUdi|M\I}^E%/}=~:4Ԃ~W}I}6p}:}! }.}}|e}Du}rm&X}d}]=~U2~hM~E~=5 2e 4H9 N~ryAl"{،Bt lΉd\TM E= 5Ѯ-@ZHM֘x[uу|у-{Osl-QdFm\TLDžYD鄿<4udiEq=ˈ ٍcN<ł9Ez8sm(Ik!c#\mTfHLDM= 5.¦cˍVߎ$|VЈጜKzDr牬kC cm%[Ȇ{T#!LyG(Ddp~v֚oxg3_AdW䅉ŌَUG?G7:/ݨ9Aߋ%.}\_gu܈nnzfLJ%_:VNׄϐF(e>~6E.ÁB ])UЫ܌ S:6ߦ|Iu 8me"R^I4$VMۑE΄2=ȃ5Q-25EҶu芛X'BjŪ{̉:}tcle*+ ]i6zU7LDT<΍w5-r-mpsLvqHqՕrs;ٔsÓ/tyuzr*@v:jvbw[-ZxSIyrKczWCن{0<y| 4:|꩎t@t㛲u[喜u͍AvPvԀ{w`x֑ wqxj ybqyZznRމ{$K,{Cf|j;G}3}xq*xxy^yZ6yyxpzIquzi{{b{Z|R6|K }C[}v;}3僲~Q||7+|~||lh|j*|`<,|x/|q<_|i}8ab}cZ?6}R~J~PCIJ~z;n~3~ϨhD_'ڒ~|w:jpli#}jatsYR\J{C,;lv3ŃnҖԡoh5 `wpY'QوsJJHB;Iҁ@3t C8y JV I }4ֈUv%o&gċAJ`= xXQPJ냟B; 3ZVe'^͓k?#w{␄|[LuE_ngN∑_ՉXQWŅĬB6:ńa2( ^֔5ёבy z d|-Ju *nÌf͊_drX:vQIznXAP912o&$͞U1_}#S򂟎{ZtkmZ~fDZI^;W܈3xOćKH:Gi@$9p1M-n͜i%x8XzJsьSlLje-^uW5O" vGr/?Ӆ8$ L0s ґMZNю~fzDs("k0IdÊ B]zِUݍNFg؉>7I/&^ܝ2饢/wKdu%hoyXrQGk!2c\̒UTҏM ㍅EvS=6D.焻pΜgR㎔(mpW􍻡!xŌ؞qtjZc `[̔SԑL)D| ptxtgunluTvx{^wtwmגUx0fux_`yWЍz(PORzG{@Z|8y}H0~ x jx)x_cxcxށy!zyzt=oymyzCf, z^;{;W{P |OGq}?}8rS~0~{⛾~{ҕ{֏{ˈ8<{ҁ={z{s|%m64|]e}|^e}W.M}iO}GXt~M?~8K%~0ɃЛ՛s)_f)V~z#~slI~lː~e)~^4~VO,GAY?ن8,1p-֚󙸃Wuʗ: 6/yCrǁl\Aee("]BV݀OApG=M@À8%m1:gUB63 2՗ۆ4ex0y ˄rwV9kݏdko]>V"Ɩlш:x6lqՆkPoJd5\UHHNΉG.X?džS8#1=lq~׎ݓ4]O~Ǔx&Nqcmyj c\6UNtTFᇼ?O8w1xtXΖ3fU:ۏ;~J4wZ=p͐/j3c%T\U&N.F?sT6鄍h/5+w}VǕ ф̓v}ȒDfv4p5Ɏi{|b h[‹ TNJM6ESEAq=6„^.ׂÂ{w4bܕ[;O}6v\KohΎT]a[SML#E3=&6~@_/-Qʠwޟ[CYԛϙ|LunÏngA+a8Zt,RҊ1.K{VD=w6[/.}ݖJ~ْ{tߐnm]g;`ܓY%n\Q͊+JC)IP;3>$*b*wBbzEbsHbl]a'ej[^hWNOJHAۇ:s%3?,sDl;i Ȓ*1yZrdkoDdy]aVfNfG.@;z9ዎ2+.hpcpO%q|MQr#rfr}}swPtNpujucxv\/_wfT;xnLˌyoE,zq={h6|X.N}L7wt StN%t9u/ݜu|˚v9vvp;w]iܕ*wbœx[ny=Sz(LW{E {=|6(}D.`~΢wHwcwK?x4훮x}|{'xv+by#oؖyisybbzg[}zS}{LM|kDފW|=e}z6Sd~ .Y~b{K={; {@mn{G{N|6{WuЗ{o{i){b|ZZԐ |Sp }CK}D!~=A~q6;M~.݄=u~ԏ V~ț~NT~d{~?uL6~Ini~\h~maΑ~kZ~SK~K݋5DN=d*j6P=/#By~}'14ρ~{5N3tЖ nhA:a`hZDfS€KЀD=*q6BX/_MJ̞k9Ϝ",>zԄ,t]5n*gWa1Yݏ}lRލAKƋ D̊=ʈ)6;4/NI*؉ٍ3hԘzAKs啷mgQs`Ys TRYKxzD=uق~6/{`XÝ([4ř`,yזƊs4em#fÒ`l,XAR+K:CD=S=P݃y6R!/Oj՘@{4Ś ]) 헺 yWUrɌ9lRHfΊa_j)]X~KQʌׇdJDl=Ʉp5Ål.{!<󛇔ߌ8-ɒaaGxЕ9rWk eu^ϏXOTQh7J rC͆<05WIU.ciȖhPЋϗ[oy~x4qqKk8ݐdta^ύW3TPIpBF;4m:-}|5FZ~?Иnwpޔ Hj^Γcבq]*ɐ;V#^OUNI s9BшZ:43҅-,]J ńɝ}w)vjfp#i̖bo\EԒU!rNO HSA4}:T!n3vU,׃C;D ǣz|quUoQ h̙b [d4T,MŒWGp0@?9`2`+ʃғ[<l|Yu7Dtn gלa7oZSJLqF5u?W܌!8)2*g+PDŽsp֙c?6V{^K?tfHmUg`fƝ0Y%"RΎmLElg>7R1Q*2opqE4q3$rx}n s!wsqtrku1eᘟu_B-vXwlPxpIHeyvA7z:{|3|k,Nf}ht(ot#tӢpH{Yj6{d'{]ʔ|@W$|O})H}AՋ~:r~n3A~-+~Gn~x~d~8|}9~(v2~pP~ j:~d(~']pi~MV*~zO~Hpt~A::Ra4)-SEQᢪ [[{靴uoÚ(iŘ>cK]=8UV OO_FHs3Ahe;7Z4II-Ḳ+Mb脊{IBu&o&ƃUiD߃cM\Ó|VO-HbNAՋC;-%k4s*-Ʌ <ʌġ XWzt!nՙ< hƗjb\FUN\~H,A;d4l-Ņ VbߊzB(tRin]шhA b"<^[IUH;N'G،τAXȄ:Lj׃U45 -"ґ95⠰$Y<|&z(?sښIVmʘ~gƊa[/ TÑN1G$A 6:@4Kmd-72wה΋_Tɒyҝ.dy`sYUm"AEg/`̌ZيTG≭M܎ɈGl` AJ:H43O,քGevat$Iߔy*Qrglz fYd`/Y뒻SMF?c?=9eD62A+$SƝym4~xr 4qk˗*eM_\YQRǐbL̎^bF a?S8w=41؆B*-2Wџ"=ɞ;}ߜJpwߚq:wk Η6dɖF{^X9đQ됡[K؎YE?h82Nk+p&*~C}%)4vĞNp|gmj@ҚOcOS]Ɩ]WeӓQfJeDQ>c 8 1W* zD|{v@o`ioߝlc2c3\V;P)דtJxD $=*\73*0ʆa*X{#򠙯Hy7{̜ ufndhbl~\# Uʓ OMzIAqC@C<ɊT6h/)ݍePq֫ZqPr~}rwsrQt l1tfuja'vZ՘vT~wM*xE{8y>ۍz8YA{{1ڈ|W+AU}7tWv|t΁`u[|Guw &v%qvlvfEmw`xZ8yxSѕy_Lz;E{)>~{8|1}.)~(qw~w҂Wvx3|ǥqx[w-hxqdpxk,y!ey|`:yY!zgSsyzL?{E|l>7|7}0C~*?~gzzۂ{|Ԥ{w{,q{1ka{Se{_@{Yo|4S(|L 5}Ec}>}87~B1ۈC~*˅*~}pZ}k%}e;}_}YH~"Rx~ZK~E,F~>ό8t*2/7B+Յ[LJ ZlJ{ģup'jjd˛K_l2XR K+E1:N>ۀ982T1+ŨXVׄ߀{)'uuMooQjPdeA^xXuӂ%R KׁE>ьׁl82AF+[Bxzu ֆoHi݅cϚڅ^WzQĔ%KO@DՎՃ >n8F'!2 +%}w񋷀#%z\J7ttnӞi$cG{]{zWk5QOXJVDt>B?8-1Ƈ|+uĊ D Ǝ:yPtD!ynAQhBbQ\֘EVߖ,Pϓ5J/rDJ>n7֊G(1‡+wnٓr1ztysӟڏmĞ gyb %y\.oVMۊHPSJMD<->P71+eSʉKq,ZΖ$)y_sAm$ّgJߐ;ai [UȌhOΓfJ#]CҎ =׆`7i1Xw+T/X{&~rܘx[`rhluf`瑪Zė+TuNSIZC=Ć7,o1)]+3g;9}wqʟDgke֛_OZ TN+VkH)C/ɉ=wj7gJ211\g+>1d|袍vԠ؞q3j睋e_.YM SWВMcfQGĐB@ۋg*`/7)u|~vˢGpC+;j/dL^mX'RLBFwAg;5b/u/)rѬT"{Zjeurƥo*ilCcӞ]sWܘK Qږ$K)FB@ x: 4.1(DžԱrr{\{s0v sq~tl5tugWu aסu\NvJVcwPjwI2YxB+y;VFz4ی{.|(8}^Ğ`YY8SvMك?G A;#5Y/){Ҍ ~e؋+ysيRtÉni.GcT^7XȆ]S4MEGLA@1;I5g-/~<)Ёjb~ yby4swnAthc c!-]bXRz LɖxF󓖆A;(L5G/n)[}̪x6sg8m7h3b]ɋWqQLSWFrAQ;05rу/z) 󫦖<}fΕ'x#rm^g| aҏv\]NV"QJKі.MFG@`Cf:4Ê/W)* `C|wϧr⑔I.VDk?>9<4.ш_)~ݫz`9u}uoޥj`d_UYET9NH;C,y>99V3߇.(T2} yHz:8<.{>2,|2+:}.&U~}yvy v"tqvXovjԬ vf&xwa!wl\wVJxaQ]3xKyD엀z>u{8:|_2 }++}%4~}V>xy;xt@xpxk hy ey,`Ӧgyh[ţyVzQzKT{D@{>T|8E}b25~,?~&q/}Ue{}yd{Wu2{NpV1{Gk{Me{J`{m[S{V{P|7Ks|D}K>`}8`~`2u~,F'}~ya~Bt~o}jmr}eD}`.}[}VA}PBB~JH<~GDq~>f8h2-&'n"}A xCs⮟nLiYd᧮/_˥+ ZUPIDOȀ>PZ8x3-h'ʇ|xw񰈄Ss87n`Fikd~T_xЂqZR: U;OفIuD=>mq8̐q30-Ɓn'E{W@w'frmi Kd8^ܤzYRTYO4vI Cv>;=8$2La-e'ʇ{z|wAҊrmFhYc^P-*Y)T#NGTICpCH_= 8^ 2֍g$-HႠ''{&vvr~HmXh>Nj(c~o]XSg "N*FHΙLnCQ=G8K$Eܜ@S);Ȁz50ej+O%=t̷po lU[g߰fcI储^dnY0U7΁PlKE끉E󜼁h@<;5̒0g+Bi%Qt[prl+1gb<^NYw]vT OۢƒJџ@Em@?:ؕ5G0a+u+$Y6%|s9p!ɉlMgFψ|bR]Ǫ҇QXTb1O@JBp E.@?؄7:]5h90:^/+%ƉOsߍo޴yk˲g Sb4]@XX!S@iNIYDԜ?:qY5F0+ ڂ%҈sco9kfu-aܭF\nWƧۋR+MwIUD[ ?`:j5U09*%ˆs<@oKk%&fqUa[\r W,ˍRCMVwHFCX?E} :چ4/Ꭴa*ƋD%trn̖yjole(`̒[fYVIQL֢gH1:CEۊ>̘? :݇5$/Ύ{*%iRq nidů0_ϬZJHU짘QDLHaGt2B̌!>E69x4ԑ/͎Å~* % q7!m9hx#da_&YLUMPvKâkFEAՍ=vL{8}4]q/{}:*d%Lpz/lrRh4zcr%^nțYCXTtǗOҥ.K*FMeARH<Θc8Tʊ3.ꎓ)򋶅K$oħ,kgqb̯B]ឣXztSǧYO*S6JE@<*a73ъ .Gӈ)E$r#Lunp!ur vz=P{>l"'m,,pnBoEصpIqVrB s%Ȏ(t ܄tyuovŇewՆ[xQhyG-z=E{Tkol)H-mQǾn_romݫ[pqwvrn(shtEyu$4ozv9ewNh[xPQyMGAz;<{)^ۃi|k1letzm nIo̕pǔ4'q͒1rʑsly0to9uŋev@[wQ1xFyi⼒j7lKImn oߡpV"rUw2s,ltat W9u2Lw)PB"x=z7ySxf%gŐi jx3@kŮ!bm-gnEkowcpπ}qxvrks`t.V uKvۍA#x6y(eagBCh:jNkaاlïm:op1KqSurkk?sl`tWWU8u|JyvG@ w׋5y`գe\f h:wiLk lfmcn̬oqu.r2js9_Bt/TuXIv?wč4y MWdofXR'gIi5^jxIlYmORn:ol~Zpרtiqis9^jtSuQIv>^w֎f3y'Hۭy_px8yiqȤysyt zu EzAu?zv zwɌ{xƂ{VyxQ{zni{zd|F{Z||6O|}E}H}<}~ wSv~ww5xx#xtxô[xyU~y5yǠyzfuy{Lz({9zo|Cx5z|n{:}?d{}Z|~6P|s~F|P=}Bu| Вv;|Tv|aw;} w}PxA}{x}y~yt~Ry~xz1~nizd{<M[{Q|'G |)=}ft3~ϵtցf/umyuyvT\wA(wǁxCxy+wyn6z8dzǀZ{MP{΀F|R<|؀orۇ+s't01tѲ,uavF vބ@wjNkwxwy]mydGzjZXzQP{{ F|$<|q'rN7s Ѻs͊*NtruGÞau-vw;wvwZx~myJczrZzP7{RBFX{<|/plUEq'eqyrŎrs t\u-u؊v1^w5Cvw݈.m+xɇDcySYzUjO{F {<@|vofp0&q:q%ȓsJtkju2I(u5vvwglxAUcey YyOzE{b;|0n[kGoH"p,Wq(r7ssɓ57tu_K9vvBv8lwڋc&xYywOwzWEk{;R{܄nmcˑnh;€oepk*uqiy-4z Wti39kbl"VmS8naoCp qMr{sqtgus]vYRw=0H2x.=y73z0Ai-j߽kl78n#kodpuَPqtrn {sZqt~fuY]\v/&Qw(Gex6=2y_/2zf6A}2o>|q !|rZ|siQ|tg} uf=}#vJo}3w1}Ix}`y v}PylB}zb}zYW}{O~|E~C};~p~ԗ{)uˏ{=vJ\{[w {wɯ{xm.{y|y|@zQ|[z>|{u||1lQ||b},})YV}a}O}~bE}<*}yzy{/z {qz\|z|J{|/{@|Β{r}${}y'{}u|~0l>|k~rb|~YI}O}LpE}v HBvx}w߬w=x7Qx' yym-~ytzf#kzjb{Xy{[N|gE*|Ղa;}LtrǛtGVupDv2vNwZ}wފxOx9~My0Xtyԇjzua{X {Nm|%D|[;k} sp(s@#tuFubvM[w2<'w2x%,}xƋtyTjyaEzW{3nNU{eD|KY:|ȃ?rxRƩsHs—ptdu9u+v㏘waw1|xIsxPj8y`zI`WzM{qD#{@:`|{XqorP7~s-:s՚|tufBuvۅw&D|gwߐs xiy5`yCWzMm{*B_{y8}{7͝pΥ}rqrTs.몡ttޛu3`v%Dvd{w}ermx%i|xۏ#^yYU&yKyzA{/7{ppCqƳsrsvMZt^%uuĄrvUzw#qwgx?+^kyTy̌Jzt2@{ 6{̗oWpKq#rkvr؟sޣ]~t5uF\uzWvqwr[g8w}]-xS=y> Iz?z5{LfnÜoԳ#/pqEriKsqt ӌtCu1yvQ pgw, fXw\WxLRvxHy>zZ4v{ʲn˜ob{Rp1@"q(%rs PsèʌtuFyv/ovewx=[x-QxGyU=zL"4{ bn7qn۹eoúlkp[qr5sxȋVtHZuxguڢFovĞdwTZxPx͓[FyVS}^L}gC}ʂ:V~$xx֍øy'"ynyzuIzz܈Մ;z#z{mbq {̆hd|Q_A|ƅU} jL}TCc}:;}<ɌwN0w񒙸xM-xŐ4y7:yZzz9zizvz݉q&{0h{_|6U|L|C1}=9}vwyDwbx x y yV~y5yyzhpz;g{U^{ۈU|;eL:|B|9h}6{uwvaZvؚkwa̦wxpx˔2y)zJyoy;z^p,zegYz^t{w{U({K|GLA|_R7|σ%uCH]uv3vŝwP8\wcbxX{x́y xyoz)fz;\zSg{j(J{ֈC@|3^7|}gtwuuή(v'%vŸwwaZwޛDxI3x+wy:oyeYz+\.zR{7IG{?|Q5|xs׮;OtmyOuܭRucvCIv{Kwb[wݜTxLcwUxۗngyU#dyђpZzAQez0HJ{e>{׈K54|>ss>⽞sʵt֬u4!uƨUv{vwEwvxmycyZzPzG9{={O4G{irHs~t t@uaњ3vˑ0vֈ,w/wvxSmxޚjbybYIy蓼OzuF$zy<{f3;|T`rs%6s 2t\uXuv\vx~rwwv8~Lazƺ{6{n:{j{|LWM|Y;|uN|}v|m|?e}6\Y}S}Js}ׅA]}N8H~ z{tb|,Y|z(P|G|>V}4}PxZŸ%x'xymYNyҢkzAz|z@zě2|zs{xk {a{͑^X|Ow|JaF|=m|4}F+wұ>tx1Tx| xycbyܣύ5zDzq{z.szߙ]ja{Nza{W{ސN|'E|oP<|3V|w{wdz}xOxxƕ>y猑yΥz*8{RzvdrLzLi{#`G{hV{’M|$D|t;s|ĉ2S}ļw+wcw{x,YGx*y/yByzzGqzBh{_w{M9V#{L|fC|:|1[}Bvgwح wNqwշ xSx$5y^yéTyz pzf8gz^^{EU?{L| 2B|9} 0m}xfnEocpqڠkrؘs otXul~vvEv$w#mV xdÂy[BzRzIM{@|7ՀY}&~x\x䯑y;yy8by!z4z^R{~ {pu{m|Ydg|[z},R}J~A>g~84 }n$}7$}Y}Ỹ}bjZ}\C}x}~#}uC~ lf~/d1?~s[~R~Iـn+@e8@Nî@ρY.łBč,<6‮}tǁV}lhcʀf[̀rRXoILf@ր `8ɀaǂ.$MمӅ;RV߁~.|ڃyt^ kciXZĀxRMI^ @@7ہ6٭'O·a|=Vs,k bހ(qZC;QJH@<˂/7YKƀ:}+1:b~҄5l~ă ~ 9~#~.+i~R4~pْ~A`~C~z$~jq~vi~s$a~yX4~Oy~F~"=~g4~E}r |}ʫ5}}˝˚}~ ~'=~%_y|~q+~i%~`"~&ZW~R_N~^TE~hN<~nO3~sO|O|Ԫ}~}OU}&o}*}}Йx}Ηp~}̕JhO}̒_D}kV}M}D~;p<~S3 ~hL|$||OX|E}l}Z }jK}4x }o} g8}X^Q}Us}яL}6C~;~2J~!|.-|*|4'|r|#}}&\}KwM}cn}ofc}]w}T}K}B~ :~)1H~CJ{ݹM8{̶ {ֲ|%|dr||~}!v}:%n5}Je}iv\}S}J}ݐA~^9~H?0R~r#{?{n93{wܟ{ϴ"|X|#f|Ȫ~|u}Ymd}.d}S[}ycR}I}@A,~(8H~oy/l~Qnoы)p qBrwm%sYIst4uzurVvj8TwaxY6yP~XzĜ{?#|y6\}|QWststiu=Juݒ+vxw|wzeFx}r.yiyazX{YPt|GقX|?H}6-~Z w!hxi2{a^|LXփ'|Pr}PG΂}?&s~S6|h8|k |Mc|^|Z|,|΁⅀}z}LqׄM}}i*}`=~$Xh~P2K~G~>MF6釂7=&ĨhÀ}X)'ׅfy1qsh5`X] OȂ$'GR(>/ 68ٯ1݄ͅ1Y̏mF*$yp=[hhׁ`ZXCOށ}GVwF>6޶sWY: zшlЄ r9xpM„gՂl>_Ȃ6͏VgEΟ  (Ni[x.o9Mg܆q_DžWO]Y[G >6@T37ÒmB̎ ɆŒ&nwodljgNs_3hWL?O F>M]5݀ wFt122ӓDG[D~v끝nցhDf؁^ W}N"F`a= "?4b݂޳ZU҂C̕т)A}Ӆߓ]}񁒑v:EpnIf_Ӎ=^UMsw_D4Dxx腞yS~yvzMn8zfĆS{M^{V|dN7 |EK}o=~5~[{n;{@{Ǜϋ{ՔMu{㌤{46|}ֈR|Zvqn|nw|fF}+^l}xVJj}N~2EɃ~y=[~5J7Y€.1̢1k@"wc}!.uІGn &eIF]TU,wM܃Eɂ=@5Ǘְ_DpF"̂ȋH^vᇸD|uP7m}etF]-UMdEπ=25_l frg&hW'y|qtׅlۅ=d\EU ۂM?P}EO=]+5c8+9m'Er xD4~{tG8Jloxd{'\υTbzM*E+c7=̂{44it߈·y<܍~鋺{cs‰kMd\TnT )L̂aDM<сɃ4JçLXc_"NEozqs(_kgKci\TpLD; 3=߭Eᦤ2hQ(͔b; yքr{ Mjփc=$I[ĂȊS3u9K-5Cˆg:ӁU2fk@^˗)"\by/@qɒ&j1Y]bَZReA6O9.7oȹ3UoՓrҭ ?|ヺLuOyHm7EeΝ^*MpVMʓE=iu5t2_-i[n7nppؐqlrOJsjzՍ2tFsA u$kv d{v\c\wTMOxL\AyDe/zZRπKlC2k;K:44f MR[XW^ :x[6q%liu^aZQRNKAC;A*4#i¨v1% Džt"~wӆpji:agjYمބWRTCJׄtC0܂;o5a4$ː7T Aw=!Z~'vYo񇅈hՇ` Y~3RJWBǃ;4*|3 *g@h}vdoV)g~\`/Y4)Q脟1J-MBZ9ڂӃ2_vg%ے̉v>|y6gP.oԉ_‰>iƧ|~=҈Y͠zGbrΜk{Bd!\ԔeT@ME#:=x5т-UՉlو|+7{ܦ񀔇{y4*q􆹟Rj5c3[҄ЖT@LD8Iu% bbGyPrfl&^dr.]͈lPVO΄H.q@N9k92kސ$͏'~i|lڌvy茊r=kr dk]E+rVZyN膔E腬>u6|/:g) ^bO>K5Kxyq^jlj3cψ݋\ˇ슕UbMކOEQ>7:0"WYzoQώיɓǎ3C߅Օy~-'w΋BpqHjc)S\7UЋM0Dv"<ӄ6)/rQ52R`*,}Z}旿w  p Dai5ib;[8~SLhيD=CV5!Y.sUml yTDȟ(r2=}9`vKәkoT!{hdVaSnWZLjR㆖KRƌD {<4o5\Ya-tl=u<txO&|suyn gIk`lgYabIQ톏JDˎ#B;D4]vU,׃Vʜ؍hPˌ˩܉Ktť {Ot2mfEI_i~XvhPIVЏA%T:a3hV,ۅۛسɕ1󌍮; z6Ns؊le݉K0^s WpP Hj푟A`9Ƅ-2u+56_nknӒo p_×q8ry?vrrsk^te u]vwVJwuO_xrF숻y?Q z7W{/ʃ| qܗrSRrۋgs|t~HtxuvrGv)ksvdw]8{x^V;y>N݊{zF]{3?$|74|/}uʙuƘGvF|vw~wfx1wqxck7)xd$y]8!z9UӋzNu6{{F3|Y>m|7}/؃F~5ytyTy‹r-yՄy~0z w͒zTqgzk{cݎ{y\{UI|mNT|F}>نC}7z~X0(~}vi}MR}@ԕp})ZK}}5}w^}7pv}Uj}cm}\::}U$~ M~AE~>؆4~70AXʗρhܖρʀŊ8“H}$vё9 pejbW[TME>77„0eُ)X&|#vCoޏpib|[DTSqMqlAF/B?# 7ـ0dbSk{z#{Tv|"o)uĐ(oNIhꍪaGZ>T,-M' ELJm>970d񁎚ލJ挄SłF{=u1nh3RHag&xZ|Sx߅KjɄD <^5[傠.Fܚ+RzhDgBo-ۑs9{|ZtLn0g`̋وYSK1Cև%K=S5N-Ԃ:ו@qޑp zsrmoWfԌF`*YwoRʼnVJfC;<"^5-҂CKb~c}OS֐yВsHl/f _{ifX܊2RhI:C]hy~|hw1ipڎ?Gj6]=ch)\KU BNɈ폸GpAj:\3(,w#ߑ7ф4{}1vp8icXIbs[ыVKTxM҈F@Y/9쉕2ރ+ނ}Y𮨊wS|upo14h]VaΌZfT LEЈ?t[801)+/Z,nn‹opD7)qzkqtrnash$taU;u}Z,v`SX2wwKv xCڊ&y~5N .NW-H%?~hxAkrlktez_I`X1OdQ_xJ%C57e5W2}ȈvOp&jtd@J]ĎWyP_IQPB;)4j.f%YK҈΂ʖ|XvD/Qp ʊi͑nc]&V0OOI@̈94}'W-v>PbJTuG|?Qu֎hodli)gbяɋi\zpFV'O!H`A ^:l)44 -ql>~+G ە╿{unKhhf)b[ȎCUoЋ$N[G}A?ˆ~:NG3\,eb?˘bvenJdzΔUct1Xmؒgےa%ZƎ7Te$MՋ,@GueI@9C'26,t֠$#x,!y se(mlfʔ`GIYю9LSZ3LċF/?񇻈9\P3<',|҄7*֕ۡp蟶y/흻rl&e̐Ɨ__XDRR>KEYR7?8%2 +΄ŽE 񕱥~xiϡsqJkKdʚ^WX'QbѓbJҋ6Dqg>*ϋH7ƆE1pf*҃E Ø (Ȭm}딠w#p㢶j{Ed؝]ǛnWqP땎IWzCo=I6x0p*eʐ?nf[o$o֠pz?qhtr5oEri_scrt]AuVvlOwH,x@|y9ez2S{+r8}qҊrQrUܡrRspy ttEUtn\uOhwubݖv\QwdVxINyCGPz6@‹U{.9ʉ4|2ˇ|+ }̏E!u&kWu6uvHyKvtwn:whkxbx\Jy9UyNTJzG {@|K9ˉ|3}, ~['xmmxʅjy)y/yלyesym9yh'cz!bm|z\h{UWI{N7|2G#|@z}`9ƈ}2~N,~͏Ƣ|LL|@ߟ |N|?y:|Hs8t|Gm|qg|a|[M}T}\M}F~@n~y9Lj~30 ,VK럽?b~~Txj4rm g3`aq$[ T<,M:GT@Z9∝3\,ĄjT7т}ܜW}x2r=hlfa/Zw9TM~Fi@x:3x,P逡П`AE"}p˅wa*qk)ef"`M˃Z$?S=M/IkF 0@CA9Ɉ3-Ё,}7t/GRlj} Pw?1q@ksÇe/_wYȅNSF석L׍FY˃?U8'2,h! ɂW| vՙEpʘ!jܖqd^4IXmRLzƅF֍j;6dH^HXNVR=LEދh,?Ɖx9;2ɂ,SW>놖{Qg38@|1]*4ҝAq8zÙmt"nǗ_hӒ\bd\ӏV P@.J;fE]u>w71*\ׂT%S$`1y <7وj1N+Kԉ+1Y]Vßy1scL)m*]gca"S[䔺U-zNJH2CG_=&*7L 0Յ*>i~txmlr2lYfNq`VY_ZEST(CMg*GJsBS<X6;0)ۄE>}wVqܘ%Ak e_j6Y|SU]#M/GpKAt?;?5Nl/:)/*o#\nިo~3pgy~ptWqo>ruiٞOs1dF-s^tXҗuRvK&wDNx=y7ez1^{* |Irtr~4s@ysstVnti2urcv^vXDwxQꔐx^JySCˏz`=r{>7%o|02|)?}ވuxu~vy?vfs8vngbw&hݝQ9yJozC{=}s|L6Ŋ,}0P})~c xAx~2yyA_ysȠySnyshycz]zhW?zQC{sJg|0Cf|=V-}L7,}0~*Q~ЈȦ{{-{~L||x| sA|mA|h/&|Fb5|o]'!|V|P}?J?}CX~=v~_7a~1D~+}ThoE}&xB#~rv~m~gƛ~b2~\~V~P!=J)C<k={7j1S+6z@܂Sڂ|fJwr&lKgFD_aa6\5XVD_P=IՐԀC=7z߀1cS+B+ФֆY|ۅxw9(qÞl2ۄBf҃a([?UȕOǒڂjI{7CWڂ+=L7?0*Ё'n;xr|egvן*q_k{ f2v`[rUAOT4I:9CkmšgDb\eJV;Q3SKFEl@s;'|5k/˄)΂+|%w쟭)r0+lf7a9[VOP>JJwE \?͋:7̉4ᇾ.( =?{ӡwqi%kꜯhf"8`sZUEmhOtkI0D4? ㍈9C13=-͇`( woo|p`wqrqnr2idBrdYs~_gt@YМtTW:uNt`vGܔRw@By*:%zN3ߋ{]-q|V'݆}Sir|3Ps?wp7srt6mthӣu$cKu^vGYGvSƙwM˗xG$y@~z:X{3|g-̉J}3'~_u|}VJ PޗkKPLE?ŏS:94U.(~:Gy六umˋCp튍keA@`F ZUه4POjJڕEHt?9⍐48\_.(ˁ-}y??uhojیe _ Z]ۊLUsOkvJeuE[?HK9A4n> .Ĉ?)Y}By t@o/nidn_čYTFOMvIٔˉ$Dϒ->.9[E3̊5 .<)|.PxJcsեenU5i2wc^QQY SNg:PID?DN94 .n΃?(Ʌ{ݧ4wt5s ϙm~hhUbퟒ]XNRM;@HTUC_ҊL>ӈn9c44*.(ЂzܟvVbw~^wwY(xRT:XxNysI^z:C%%{<{7|1C}+Qy~;%~xxu7dyqU0y3lyUgԨyzb|y]ɤyX硅z(SzwN){I'{B|d<풹}7+}1v~E+ΊM~&5Sy|!u4{p̬{l a{gA7{b=|]d|X|MS|~M|Hj}5B̕}<~L7Y~1Ռ,V0~&чy&Utծ~p8~k~f~za¥~l\(~mX~vS&5~{M~G~B<ܒ7d1,x*.' RxFtoj٩Dfh aJ@\uWgR耀Mn^mG`By^<97J`1䌘,'dw+sN>o 燃j,ely`f[~"VօQ^LЄGQA\<~1771Č,hK'&∥v0r쬒Gnªiڨ{e n?_bZUaP8KFOA _p8WZ\ߊUbPUKkFżApBoɫk5fať\Ė=WR`MRH{YCؗ4?2j:*6`^1=,T'&ꂄr42n響wje⧸aš[ףǙV졚&RsiM8>H9LC'>l:CU5Hu0u憪+E&ur5ZnBiHe.Ơ+`Nɞ[ԛV.QaLfGLBlΐ= 9Vd4/#*Ӊ%9ryqrn?qiҳrOeԱra®s5]sYbtCT˦tP,.uKpvF[ws@x9˕y4hz.d[|(T}"E~?qgt]mµtoiٳteuaruo]5VuXѨv;T@vOwgJ蟳x"E`y ?z9^{)3֒?|.K8}(A}#(3~qavmݴvjIdwf!wJ/94v/?€4* Ҁw$Ԁpmlٲhðc1dl`[JWRuME\IjXCxV>˘F94{/n*Yс3%4Yp nlChd"_ǫRX[6VRRMePH$C'>9d4T~/J*Cʁ%3oDl4h^cѭVv_dZV 'Q{LѠńMH)COl>M@95T 4,m//*+I%fo@狄k߱hoc6_҈Z@U懈PSL=YG̅B>9?I4 / U*5;%2&nork\gϯ6cT ^ZYiUP\=4KuGB=З9 4/1B*Gp%Yn)k+g[bجŎ^" Y/IITnnj_O)oKFfB<=b8օ3ބ.* %njkfa欠]VfXw+SʥO"JroE񝗋Aiz=)8ӓ3!m.N**%6m\Ri͗beɮϖna\PWtSNIߠlEY@v<58cq3=.* }%0ւ=l~ghհ̛dʙ`]&[תNW RklM*IUjD@{`;h73,.)̋)'$kwh̞d+͝ _Z[]VCQM9C:Hf?6aNj#1Ґ3-Th(T$)svm҅so3ȃtTp¾tr Quhs%-ut{vhurvvM)wVwSwx:xmxynSy/ydNyzmZ0z{=P{5|*E{}!;|~FP{ ~vF4xZϖb%d"X_e;gJbhӴ颏jVk;livn${ovrip)hqF]UrqRt4HDu'=vጋ3xN[b0ȿcle<)`fӽih`i.kZ:vlImڪX{'o.?qp{gq̝\rQtGu="v2xawmdw;njwp wqӰ~x;rΧx`s۝Mxt哅yCvyw4zxuzsy&lzyb{dzX{{N|Z|wE |}l;3}H~oBusutw²uuMvvnww1wvwwx_xMyRTxz9yzuy{lz|Dbz|X{,}O{~7E,|9~;g|]s_y<>sytzFu`wudxXky bfyĀXzh;O{fEJ{;|Rpk"Ʉq+$q񃋷rƒ]stZʛcuu_vja w(:u_wł!kxbIyiXzNźwE7{}Y;|;/&oȬo-p qrqs8}t Ztۅ‡uo~vnuDw3wkcxax}XtyNzE:{N(;u|mώǽnRo pyʬqZ r+?st~t~utvjw(axWX#yhNz>D{';Q{邊OlƔ}Xm;nYo\p2q'srp=@sf^tK}uktZvBjw1abx WxNmyڅDz:{ψkǚ@l m(nהdohp'qۑrяls}Vt%sujIvNawWxMyZD/zl:f{Oέjß)kӝ zlRnc o6p^(oqR!rI's7|ts1u8Iiv4p`wRWxH=Mjy9Byԅ8z8͹iŒj,l,Ŵ m`Ǫno;pqqі0rȔ| srtӐiu؎_WvUwKxAyi7zEhj9Ekxlrn goPb*piNqc/rT{YsHqtaLhpuN^vVTwF9Jx9@y26z&zh`PiջjlApmn֢o۠INp؃qgzrۘq&sgtד]uSvƍIw͋c?xȈ5yÆ]g׵Ëi.O jx-kĬmWnhocVpCqzr~p|sftt\wuXRfv_Hwp>x4y!ʛgu‹hirkOslWnmco \p"Aq((ygr.osQjf t6[u'Qv%mGzw+==xN3yldgth=3i[jݶbp~[qpצrW8sWΔtktÑ삎uqyvJptwSgw^xڊ2UMyKz`0AdzŅk7{cm;2nՠVoȞp1SqorȘstKPuxuovg"w]x7SxIy&@hznT6{ ym%|n#%o"p"ǥq6ɜLrCɓ)s Ɋ.sȁ$twufo[vD?ev\nwRx‹IFyv?zEQ6 {(l;mnopPqġrsq]t2w_uynudv5[AwiQ~x3"HEy>yc5zkm n+o%Ap9ܛ qTAr!s sӝ\vtzmud vOZ_w Pw܎G@x"=yi3zYĒkalE mTQnjoƬm{p쩁dqŦXr-sv tjmNuVKcMvYvOwF%xKrstmuA u#fvkB}vduwLl~xH%cx͎Z5yQz2Gzˆ>w{U5!{؄_pqiwrKsNsdHtş(ugu}vt]wB3kw쓲bx2YyOyJFzr=x{41{mpG>qq߫rsԖtVKtɅ0uJ|uv5sv%kwPax4sX0xҐNyiEzXIsZsh]tuN{u"svjUwl`xWSxNySDz;z2h{j4o$%p2pDjqϲrוcst`utzuprKvziyw;_wޘ'VbxM7yRvCz <:zɋ1g{һo"oǽgpCq\+rLSs=ta#tĩz9utqlvFhwJ^wƚU}x}LZyFGC+z9zN0z{%Wlm˲uoEmp5 3qDՁrP2sLIt>Oxu2vLv$nwte4xv\7y}SHzJPk{A>M|86/}6qYr=sce,t,=t!uv~w9%wv{}xmJyeMzp\?K{?SY6| Jo|Am }8m~s~~vȹf~w%%~w~x~xhy~y}a~z~zvX~zm~{e ~|!\5~|ST~}NJl~}Aq~~r8e~}{}{}{Ȩq}{Y}|1~|?~|o]~|~}|v~}Dm~,}e~L}\~{~=S/~~JK~~Aj~F8t~|*+|@ٯK|"||}2}I}T}|}puU}m-}d}\~R~<J~U A&~m8_~5w{,ط<{A{y6{ɃڞR||_:||}|u3|҂]l}d/}g[Y}R~}oI~=@~? 8C~iپz㶿zFԮz}զazψ-N{0){{†{φ}{ۅu|%l|jc|[ }hR8}I{}ǂ@}8)~Ry޶JyVbOy4 z Vzk`z؊j{ӅH{/}'{Eet{k|cD|nZ|օQ}$hIM}l@}7}Px!xv(xӑyJjyHz-0z_Ez2|pzċ;t{kM{b{ZL|oQ|ӅH}@*}\7e}dwPwx?xy1_yٌ*yӐzX{zSsNzj{.Nbn{Z|$QW|{QH|ͅ>|a5}AWv:\v7wmawƜqxwy dyf (yzy rz^jj5zэb{RX{tE+{ωM2|޹gt>uC]uèѢ~viaQww}tx "xxx`pyBh yە^z:TUzL{D6{;j{2|l"tbS2tѰvuQu vEAwPwƢqx?8wxoYy g>y]z TzL{ C{:T| 1z|v^ttht鲮uv;v&www>xynx᝟fhyrD]'yTzvK2{wBS{[9m|D0{|9stt'u/juvhwJ}~wʧHvgxJmxeyL\RyܙKS5zhJC{>Az{8|5/|È&.ls||m~&nȤńoϜ̄dpޔ q䌨rބ+Qs{tsiuk;vbρxZ[yQ0 z#Hr{5?Àl|K7 }Ncq\y#rprУsOt^$u ûdv{wus-x1j_y b}(yYۀzQ8{Hw|k?-}C7~!vvpvأ5vw[>~6x~ж|H|x1|ɏ&} 5}B}Q}|p}x}x:p}0h&}҈`~-W~JBO~xWG$~Y>~Y6'~_{߮{ݕ|I|^ |k|}|e}*x} o}-g}ne_}6W}O5~F~Yq=s~=4~PzPG{-X<{fM{ @| |j||GwF|o:|׎Zg)}_9}SJV }}Ma}D}݆v<~3E~*K zPzzӝ{/@{7{׆/|!*~a|9~v|Jn|wf|^,|2Ul}5XL}]wC};+}2n}y˦Qz zM̝z˕{ō{х{}{u|m|-e|m~](|6T|όL |CY}J:}1}քjyMyy֦zPMz{$DŽ{X|{Dt{řl{d|6\|aPS|J|،EB}}:}S1x}x٫y yaiyިהazHG0zԣȄ%{=|&{Zs{#k{ə]c| x[/|6R||I|Al}+8}^0t}ux x!x8Nyydy摒oz˃dz{W{$ s0{pOk{6c{ZQ|Q|qI|͏@}"8}x/|}φKx7ox_7xxyyيzC΂zzzr\{N}jD{b){Ys| P|oH9|ƑH?}671}.}l=8m"xn}Jompއ5qrsmw؅tcou`h6,v`QtwWxNꂩyFl-z>{5!}xpԬqq9rQ&sps؏tUuW{1v*wvo0wg샃x_yWSzlN5{CF|">P}5}@uhuɤjvEyvǖw1ywx'Nxxwygo{ygz_j{8W*5{NӁ|Fun}%>}5~i`yج+yȅKzDBzzzBU{~σ{owc6{oh|$g!t|^'}V}N}F>-~>=ހ~5{#F~y~8C~~&Ƀ~~|~#~~RvÂ~oI~f~^~V΁~N5QQFy=5bȲg_|]S76\|邺[}PKvfInyfD^>aVPAN> F΀=쀍x5KjQ}x2\ēN[ۂBx}UTvHn +e"]UЁ `ME=ur5AށڌʩՁ1R\틀M^|Ł0ume[]WxUM|uEZ=N(K5 ˰[p֢Oڎ^፣錗|6tۀBOl,Xd)O]4yU;7MI1E:= 5M'|804р*9XGDX]1؀>,{_t ތl@ڊdrЉ\܈Tl{KvBN;V2wW! ^h™X咶-בfzsyky\dw\ZxSKHBs:d_1Os~ߞZ~֠~pi`8܉0o_mz7I=rk$cu6[oR2J@?A8+90r1;)~_妚~cǟ~kN~ߐ~Μ ;fym~q~┰j/~ےb~אZh~׎`R~ٌ(IWA|?8?0~ϋ6~".iX|渴|ҵ/|Բ} O}}}}~)v~Bn-~_f}~Z^~MHV~WN.~F~w=~^5Q-QC l!lܠyn1Zo?)p2Kq3r){st%tl)ue,9v)]LwVU*xkLyxDÃkz<{4|ӌp`pTEqט6r9s[);t刑t{lusAvlWzwWdx/]y&TJzLzD {<{`|4W}EYtRu'&uv%߉vwzw{5qoj b7`ZySuKW#C;ҁc 4 ^NLލL{[O w؃p]ibȇ{aYQRX@JnЄAy9 1ɂD$h}2 ?酢č~thwIpVhڂaaZYQ񁾆HoA9v0( sl܃XNQ}σvo˂Ah`Y`ŊYQuPH:@܀8€>0Ty'O^/%7嗷KLy}$nvOog`Ty:X;Pg@ HPm@H8N20GtϡH֒ӂ{Z|nIuC -n"rfwy_E:{WoOG?n7w/K RЂ6]a$a&h9}{ntrԘkm3feR!^J V̏hNÍEF>̀6v/XԞ΁٩ct!¤ѢxZLzҝsl-~[dʁ9]Q$UoME=d6K.h́~:|U`fz%rkGi]cف,\aٖTLDˀ agO6 .Ϡs1띻[s[x3!,xxq."jW9c6\\oTƃ |M EhJ=&M6Å.ŁIՆa򆀢gφ6x~mwWJp[if{bD[wSgL ȌDwmt< x5ZІ-Ɔsq.դ苽DŽㅐ}vVo˚-hihaT㕉Z*aRkK'C~Z;4n,~0{ԫenQ|܅OHun\gX`iؘ,Y@V[QӂْwJBMD;3Ɉc,U}>.7;|#tLmDŽfP_zښXROPݔI.AM:B2ɉL+NklOm5nđofpz̏jqs>r|mstft}_nuW/vP1'wHxAy:3{2˃|3o2pTqfqˆrsRz t"sktliue v^qwWKx|OysHziA={G9|%2vc}st tUu֏uK v yvs#w@lweOx^8vyRVyzO`tzH+m{@[|A9G|2N7}wđwՓƐx3Exb%xexyeQy*r=ylrze'z]{V{O.+|KG'|@…!}09_}2~ m{{Ó<{ƌ{Ɔ[{H{xꌋ|r]|Ukz|dƉ|]\}V9}cNچ}G}@~~-9G~c2 ~wޏ WW6c~~xYqҊkl+dO\ڈI UˇN?G6l?8z 1 oĎT0d}Nweqjcȁe\S TTM↎Epƀ=݀6}/lGvE=`{9-R}m8v˄pnyj "c O[T傳M5zE7G=b6QŁl/@2/?a%oSUƒ‹|%WvrCoډ(i`b~['TJM'ڄ D.=%Y6N/gDT"ދHM-X|iuىϊo@hHa쇉'[҇&S7jLF,6>䄌7;i0D&Z딖Y)<đى<؂ϊ{;u3unh aU8ZGSՈ7KXDĆ=Y06[ń0/v'Mԕs—IF܈ДK[V{W"t(mtg\N`Y߆@aSK;#CԄX<6B5.)qAҎΚAhk/zusmKfg_ӏRXֆ|QZJy0B҄i;94ʃ- K#&̠e-d8̀yVErrl7 e|u^W܅P̅>Id؋B+I:H3ك,阜*~ Gcȉkxԉ$rk`di]†UVOŅ0mH]čQA!E=:a3\X,ЅT(APʧ^ ~5w|q6j"jyca\݆U5N˅/gGi@:U9GҊf2KN#+G΅斪'TWN(~ w1ФpY\vib·d_[톩tUqMم:mFu?oL8ы1V *߆zkdDlm{=nnEBoh|phvMq`oڑ"rRi\sJb>tT[ulT)vMӉwEx=uz&6}{R.׃[|Ι1oїppqzerD{Ó-susoLythubEv\[R8wWToxFLmyaE@zq=цJ{b6[|V.B}S3s6s㕲t$ߔtzu${kmuu1,v7ovhՎ|wa(xMZyT yLBzD;{=|F6X} / }֘×wwLwwざxzx;tҐxnǏ4yhyaz:ZLzS#{bL{D|=y}@6P?}/+~ZR{_{~{C{ {1z~{s8s(1}d*Cnߏ获fpJxr:(kƋe\9_^}XS6QBJÇUCۆ=хP7f:,0(*}Nkelm|#anY|ߘoRwMpYqqJkr>ezs2^tDXuTQvqI"wBrqy;Cz,4{W,̄"|㝚ogV0o臗pٙgqD|8 rvrpsj|teuS^x2v7W鎅w-P쌲x8Iy`Bmze;Pf{Z4:|N-}KSrG'sL왼s΂AftW|Z!tvguUplujvdMwM^GxWRxPEIyIwzB_{;v#|O4hu}-!}ّțv30v͈Pw5sw|fSwv('wp8*-7f1*؄^{ɡ.؟i{uy[ohԏb\EVYy.O4I㍙Cr=Mg7LJ_0qX*{e2zّڡt/On g a܎[UuOBHiBΈr <ʇ6LЈu03)Nyz ks mEvug&aZۍTNY,GJA1g;5P/>)̄jI=l@ҡl?m|/;nvoqplrqrf1r_`[sRZOtUTƑGuhN vFw?Ky,8uzW1{*|,oppp{pqvvUr:q34sklsft`luZZcv2Tw3MSx@F5^yn?bnz8|{z1↗|q*焩}p+r̆dsGts|~tQvtpuXkNueȖv`NGw=ZdwSsxL'yEz?={8vU|a1ӆu})+}͠-v1^vw |BwIv;wpwk:xex`+y)YޑyS`ziL{-E{>|8M}21kt}*~ǞyNyaz+{}z;u֙zap ?zjzd{_:{vYb{R|&L7|EZ},>ډ}8a~1N~*qB}}st}azW}FuE }Jo}Mj }fdo}_}Xܑ*}R)[~K荞~'E`~n>̉~8"14\+NcACM6 zBĀctu?o2!i d^S%XgR ^KDŋ >e"7 /1i4+GD]hyљie8A1ȆZ+DŽD„1#8yjsܗ3n$Ahj_bÓ:]$W,Q.gJׂD}9>7 N1{ւ+}Ӂ܈9ތGc~~yEsmBmሴgҔWbr\`\VنPQTJC=7Ã1ʁ+,JN~Yx͗э s amg2&aj[(7U܏DP(OJ>wwCъP=T7ЇZW1]Ђ{+W^ޒ}֘x7}rril\Tf`~ZU%taO{(I@Cx=Ӆ7>M0&*OA3m݁^|Pw47qr)ke_ՒcNZ T>lNΊHRC<6V03)ф_D|v0p얊jd~^O Y*SYkMÌGC}\FVV0P֏JD*?{9j4?׈.kQx(=lmwzdRnYu@o"pϠvokpfgqavgr\QssVtt{PuJBvBƎ\x"zo坮z4jzz[eCz_PzZ_{HTB{NW|H|B$T}=<7}640}0:3~K*A(~k}7}y:|t|o]|i|dڙ}$_|}IZ4}xTq}N}HE~B1~;~6!~/K(|Gk8~cDytnigdO1^pYSNGA;I5z0/4ɀO(dž_š}hx;snb%hlcØ?^eY1Si\M!mhK0c5[]ҖgXo߄R MB8Gh AM;c5jRQ/r͂)z܁b‹|㟉[x.9rɜmUh be]3rWĔHRKͅLÐG݄NA,;5 Em/Jၢ)" 򀌠b|ĔF͎A(;+5I^/DB)>Zi̠B{Þۑ>w4wq֜&{lnЎf֙raE[ҖVSSQK}FvU@E>:ي~4ل .燄() '8!z}6vm8KpٛےkeA`s~[ ]UH3P+rJ(E[@aa;ul4x.O(o~^\Ez$5>u pj]9e-_fUZFTϔIO]mIyD9@:A4{^.‡ (}g^y7dtЛo/|)i:dQ^ݗ[+Y擎T [NsIDM?94S.(xu6|ilLxF sŜnYji&c^[X2SFmVMҒHACLU>809҉3C-'V{hvwNrڜmakh7-b՝]BgWRM GGgB#]=`،892߈-Y'{Xm}mx\nBsno4}ojlpnf>qa>q\ArW/OsQtLuFy@v?OLx^8؍y2@z,{'||px6q sqor5jOresg`П]t[Н,tVuQtcvnKwsEx>y8ȍ{z2 {,ڈ|&k}|(saxLsttDoetju.eu`v[vVivwMQ xKxE%y>׏z8F{2|-}h'X@~'|vSxZvtA$wojGw:jxcweC{w`=px'[>7xV'yP˗yK/?ziDB{H>ʏ|8Í|2튗}s-CZ}'~}Fyxpysѥnyn飓yiz!dzC_zZ؛zU{$P%4{JÕ|D#|>Ïa}N9 }3it~K-@~(|٧} xl|s>|n\|iQM|d7|_hZ|ZZN}UE,}9O }fJ}D~>D~8~3r[)-,Y'1{wkwQrsgmwhic[^ YYȚXTPOqXI딌UDCz>28֌ 3U,-gK'Ȁ{Mvܥn0rIՂmRxhhe2cP^_YUT:{mNZ:I4D >MF1873/1-J&'Azj,v{q_lzh bO]-WX՚HS0N %I@Cđev>~8~]2銻*-[''ч7z kuqlMogb`i]UX? QS MӅ HӓuC4=80p2{-'ÆXNybˍu|=q:l3mg3saޝي4\׉}WۈRjˈMb(HaCCBy>8Qn22- 'ʆ2yxt:prykՎfAaC \V㙻(Q?L"GēWB=}q82 -$т' wtoڢ+je`pu[I|V5QfLFF}BKՈ=8Wu2[H-'̆w/˘sCioiӠbCdד_FZW2UPbKPFMD(Ao=!8AӆS2,S'}\v0͝r*TnݚZhNd^.nY˛RTƙYO̐JE?@ɐ<67zQ2x,'=)u;ΡnqaKm<Ϟh9BcYH^ZY\TOI╯DēE?C;m 56d1ʉp,&9tR̥p}DlYʡgdJb{]RSX=USEiNBuI֓CTJ? :܋50l+&݃un]qnlͬohp4dcXp`Dq{[ˣrOW&s$RfcsMuHvB蕘w3;jx5̏y/{*?|P$}kteq9q8ql&r hrdCs7_֥rs[Wt`VuQuLFvGژmwAEx;6z5q{/|*!}&$~tsq#t5mZdti:td ud_Ǥu["vKVkvQwyLxCG+yAiz*;h{15=|/茕|*^}%a~tqvq8vmwi1w\dxzw_ZwZx>V'xQY2y"LTyG0zA/{s;^|L5͏|09]}*~^%C5~uyqQym yhycz_z=ZmzUß/zP{"K1{Fŗ|A |;`}s6}09~+8%܇!puJ |qF|l{|hy|xcUx|^w|Y/|UK|Pq}K}RFY}@֔~;S~6 0Ȍ(\+&>tb?p:kƩCgF%b]YiTž~PK-EIA@k;Dz6 0ό1M+w&sج,eo֪ck@gbx]YnzTQ#QOЁ%JfE@i>;f5׎207+l5&-ȁٓ`:㆙5֏`0S.+J&.o9?leXhy^c_OZ)UhY0POK*GJ B#t>249KB5vԆ0+t& :o2ykx0gb;^VDYlp,TZPXIKOIFȎAΖ=\<97KP4Ս07+R+BЄl%ڇ$n3j}fߜOb+]?XjStOOQjJhEژA )Fy8*gzZ2d{n-|y'}"S~l鴤tuiCtftbu@^f#uZ vU/vQHwLՠwH,x{CryU=rzp7%{y2o,|i-,Z}D'~"ldzwj wf߯:wEbw^nwY;wUxxaQxLnyJG흐yC~z=o,{7|2}H-v.}(Ab~#&nn!yj&yfQyb:ay]ڪzYdzBUQzPzL2{,G>:{Bt|)=S%|7}2~<- ~(ɋ>U#dm-|iڰ6|eͮ'|Ya|P]K|nXq|T|P/Y|KŸ}G}VB,}=:~%7~35.2)21$_glزiqe~`~\X~X`~T~O~KQsFA=jL"g(Ac3{_i/ZҨ VQM%HDCو@ );%7Hم 2- ,)?SQ$|piӒdfGb^^Z U]P裙LzGC׉?tr;K 7Xׅ2Ր˅--)J_$h̯evٔaԬ]蒼Y1ڑTΐP9k>Kա%GkCq>Ǚ:ƈ46ݒs2Ӆ.)e$vւ2gدdҘaR\XwܔSꥻOK-)VFΞَBr 9=&9ȕ͉D6!]2 ~V-ԅ)u$TQwfٯcϜ?`+\ "WۗkS.NˣJ@F.AМ/=M85Y1OM-(TT$'e󯵡bխ؟_Z[KAVURm˘`NIܡ_E:A"L8susvד=XvGNwƄWDxt:z#3eEfS^7g[9i"l7j:k m Տnadow}dpʌ)srj>sNZa:tȈ WvNw]D@xk:syڃ?wc*ųebfQh@Ӫi3k>{l~5m̒o|pEsrqm@En| oёrqiru_UsUbtĉKwvAwL37x`aĠce3)fɠhfj/5kg%l™n{[oSr?pchq^sTteJum@w J6xb*maYc!d2f?% gßijߟ:\lAՃmrznڗqp6h+q}]]WrS|s=I}u>?vW5x ˠ` b~XdȱeLtgW\i jOXkŠRmznjpoɗgwq\_rRDstHwt:>ve{4wنo`Ra󶌹cAe8PfOhxrixkZ^lCyan p*ojfpŗQ[qԓQcs/GNt=v+3wE_տmawc dQflhiKj.lFxm-ocofpZq6Ps FtStݢuuvTvovw>wQx|wyvsAxpz[j y{`y{WoqxrosXIwG45y ŊdflgҬ'iKjl7mQ noovp̚mr dTs 2Z@tRPqu6Fvq=ywR3x醮ud|eSgHchɮz8L{6TB{Ӏw9w|pƷp^peq"rҤFshtENt Ouv>xwpwKgx ^ yjTz)KzxB{K9Z||,o+oʉp#qnrX*sMt t;uvxv1Now$frx2]SxTIy˃6K%zA{SE8|n nώ{PoBpkGqrВ s`ltltшwuo vfw7]$xsTRylKSzBB;{ -9 {ЂmmB-mܓjnǑ`oːӢpɏqێprsutSdvLZw QkwH(x·t>y5KzS$j6##kdlgmSnC p oNqq}rєusltŐc|uZ#vPwG_jQuks ldqn:MoT?pT6zqO.r rcisyw`%tf VuZLvYpCwK:gx$1'yPg6hiԹkL&lumկn3pz!qqZr%hs?3_KtzJ5b{oW"ppݙq֝&rRVs׋t]`|u{urvijmwFTbxXxOyakFz=zC4{l~~#B|Mt`|rth|u3|u՜}|vm}w b}.w"}9xL{}:xs}aykm}uzKc}zZz}{Q~ |I~%}9@8~@}7K~W~uzxzy{Ty[W{yӜ<{z|+z? |Mz|_z||m{lse|{k||Gb})|Z3}{}}[6Y}ou1uZPv67vҍQwl0x Hx]?VxWymyqHyhz"`qzÆX7{eO{G |R>||65}%S tSt۔̨ukJv!vԐwewȎx6vxxdpy/h6y_zaW{ N{vF{I=|(4a|s(>tKgtuc;QvvғXwWwwx MoxgyZJ_zVVzb6Mz܇E{d@{6&|QnЮoށppqqnDrYs9tuxupjvhw` xX,yOzG3{>|6x}õXsyDspGtyV}5~V~xo~x1x*x=y6E]ywQy%zNxCzo~{Jh~{_|.Wv|O }SF}>W~`5~}}2}|n}|MU~|r~J|M~q|~v|~~m}?v~e}o:~t}g~}}_~}WV~~_O~~F~~>n~46#~y|{E||؀}Q}Oa`}A}C~}Ow}ao&}8g}_(~+V~v N~F~!>@~ǀ&5~1{o{>{ք||f39||܃~W|׃aw|׃0o } f}iU^I} V"~N~PE~vs=~35~Vzt=zz#C{I{|OE|}|5Nvi|Cnn|-f/|{]}EU}}M} E~ =]~H5~muyuryŽǣzizz2{Wф{o }{Iu{m{e|d]|ԅU};9M}E,}<}4~ x x15yTSyɐz8ezVzi|o{Ru {8Zm,{9e3{ ]9|dU2|׆L}D}^;}e3/}bwՙ]Yx7xy 5y-z*Pzx{zjt>zю,l{*d{`\|S|?K|CC|݅:}.C2}Юw)wwTcxy(fyz#{z>sqzpkz͏rd{4\{SN{>J|7BY|9|41}9Bv=w(wr\xyzAyrz"&jz|'czZ{:R{I{A|U9'|0}1vzv5vܘpwx*xҝ0y'kyoyQqyݗ=iz;b)zYzQ|{`I>{ȋ[A|-&8|/}}ެ[uv#*vvw)=w؈Bxx}lxܟxyGpyQhza1zkXz4Pw{/H2{?|.m7|/}}uDu/vqv5w\uxzxwy !oyuuhyۚ`@zCXzpO{sGG{?|+6|.}=XtѸ:u5?u>vNEMwZwѩt~x`vx٣nyMg+y^_WzW!zN{sF{{^>O|9V6|̊P-}RQSiө4jТ |lFΆ!mnBQop|քoqurm`teu;^]XvU,wMyEKz;={r4值|nL+koą7p pq܋yrs|pttƃ.um/vgeEwi]ǁxzUytMXdzlE {e<|a4n}hsrק˄3s[sdt9u-{u,vc|@w!t҂Ywm xe>yX]Bqz'TDzLɁ{D|<\}K4!?~sw?wqw.xSЂx_x‚uy7{Ԃ ytzNĺWzd{W\{TҀ|M|E }<ǀG~%4 ~e|#{ā{Ƙx{|j|5|X{&=|s}ly} d}^\}Tـ}Lr~qDĀI~<4XɦI۟ŀ6jzfs>kπ5c܀?u\ /sT%>LV.D<4nW^`ݞȃ=܃n,"߀yʂs1zkh#cG[^ցVSYK9D |Zp|v}'?}}Cv}Ggo}Eho}_``}Yv}3P}뉓H~@~5Z8~P0~r1{{NR{{d|J|}B|ޖ]v|n}g^}_}KXB}q$P"}Gz}̉L?~u7~./u~`ȧ$zzؚۣ`{Ò{}̋{؄ |\||uE|m|͕fU|쓿^}xW"};#O}wG%}?M}܈7q~s.a~O{zA;}6f~t.~Yy߰_z Oz)Tz{" u{z| 4sq|Fk|~dk|B\|JU4|[M}2E+}=O}/5p~7-~]y|yNy˯kz/zΪJ{{z{Ϥr|j|ecv|[|TT|ѕL'}$zDZ}<}4~S,~v:i j=l^ms)xk4tquiȅvbkXw Zx Rƒ_y2Jłz2Bۂk{1:|.2ځg}:r|r;r݇shJt5tIu/Lux7vq w`iUxb=xZLyRɂzJ{TC$ |;J|3h'}Ш3v}vꆄwT Ew wx#~ۅoxwy!q *yiz@a zZc{QR{{J|C2};FX}3~c${8%zٚMqzE<{! {'{O}{{w"{p\u|Ki|tak|Y͂}RA}J}Bお~H;I0~2 6e~י~S~X0~4~}E~vzF~o~h~`_~Y..~Q.J XBnw;3aЂ郤񃋂jr1xZ|vokDgm`: XzQ ԀIB-Y:2րĀ\ 0׆wƆ,R󂫅>| lujn˅6L/ߡ@Ǚ*xrWkԑc\U;MJEa>6Y'.vÛ ƍ_놣Q՚Qx0Ęfq)–jb[wbT_/LaE [=`s5'u -Xx~֙~~R~41$~wdp@ian6ZJS45KADLm<`oI4x-6ޞ~U~Xj~=~y~ޤ/}Ava~oVdhf`SY-RIJ4CM;d~3,Xd}}2}t~.Ä~8|u0ntAJg1N_?X"~Q gI3qB$Y:}3$+φMilj`kǏlT-nӋdo!{p+t쉿q3mLjrFfĈsh_tX݆uP}w*IQxZA΄y:[0z2ڂa|mnXYoAp%x4qiq{brtwsm8tfIu_hovX"wPuxHhyAUz9{2].|ڡqr=H`rގЊs|HCttzu]tE?v movf+w_xWՅ=yYP;zy}{1Ł~ ފ zZ:z"ʼnSzDzjaz,zz~{sd{Sl܆{eՅ{^f|LV|O }+H7}@~9FW~U1܁~~~ i}_ }醕}ć`}y>}r)~l_x~Pe+ ~N]~[VW?~tN~GW~@9&;,1ȁI(™ؓA?u8~xh$rkĄd]8>cUσ)NNG3F@L.8, 1ZO > ąh(j<~i>wuqykpgc \ȃtU}tN 1G с?cX81Oj?K?Έ~dkwxp߄wbjc};\UMU0 MσFł| ?j8@00+ȏ;QIYU.[n}vgpC*i΃pb-[醝T傧M3F+]?r˃7SY0K򁃜~AꄷBz}hvJ oi#( bUՉ[xTNLEYͅk=o+6΁/ ݄Pr!/كl|2tue6nӃRh;捾amYZTSKӈD?<сFB5.ÛK|X|{tăQn gN`XY RTJCAI<0R5$Ԅ-ꀑ0^nTV]4mJ%BezQsm!Օ&fK]_1_XޏNQ9J'Q"B8;z4,љԃHqSТYTTy hsњPl8KeUh;^zWPd-I :Aځ :3oĆ,>ǫ:2Jt͆Gy̠r-kTrdeQ!]VOP,H%4@,92o營+EɅ\y4NP"DÂ?a3x5qK.j}kc> \(U6NM9G.;h?%8ʁ $1*:fviݒdj\krlNm~nwoqpjJr cXs1\܉"tlVuNo8vGK@x@2>yU9:z19{̜mgڑnWn܉o̓np}_qw rpskitbcGuU\SvlUTwxMxFy?˄z8{1 |^q/qƏ4rgksRs}tDvtpRuiv|bЉ(w]\x-T܇?y MzyF'z?{7|s0˂}@u u#vvRv|BvvHNwvpkx i҉gxbryb[yTzM?-{fEυT|>u|7}0}dyFyr+8y׌yky{syuŠzgoizi>{*bG{[)3{T|NM |E"}8>M}7w}0|~M[}}>k]}}:}{7}u}Jnĉ}rh0}ać}Z}SK}L~LEW~{>e)~7l^~0e~(78R08ГQ5]τSP׃z aMsӈmgb-`?YRlKdDʄu$=߃Ā6/`8NJw 9ypֆis9l߇~{f`)vY9Ra(;KD̄.=냌7~0ECXՌӌqAyWrlC5fX_jɆXGR ɅKqDb=M6="/@Xʉȉ1;׏z56xrCke?^ȅxX>Q{IC[y7N0[I**'ȇ #k2q[zIFs>l܅jfh_GYǗR}5KDZp=ȃ70Wb9)9_iejs YXtES2uL vCx=dYBO;4߃.RϒS~쇨S= {uނioHic])7VuAO܇IM BPm;X5O.h`PSō·e9=w{9t[vngh劔b≟R\уV7OUHyA1B;\4oP.>}ؑi쌙8zۍzҌr%tx刈n\h13Vb E[ֈ{U<[6ITuPNdG{@9ȃ33,ځm&kƔf݌ys#/l؊zf`hŋZ>T"D_Mކ"F܆@pL29M3$M,}6`"Z 1~ڋx:rSے^leʼnj_hYS֌S)[LGEoZ?c9 #2#9,Ell}ދKwFq`kؔ$d݉A^XYBRhK(E{>|8B1ʂ+4YhOTӠyS|vԊpsX)j'Tc ]tWfQߏ{JIDuX>l8>1Á**9-b |uco(iCc \ƈkzV~$PؑI%B}=iŠ67A͇1煼*6sՋنVf3ȧ@{Mqu 1|n h[b:[l>UO!HBxr@HxlyWfyampzJ[!9zT{"M{F|q?}9}2t~+~{ꈅL{{}F{wv{q{kv|fJ5|``ȍ|Z}|S}MTo}=F(}?~c~,9~2~,) )/L#~|m~v͒~qH~k~e~`gkZ N So~MO~FA?Hh93'{,N(Г.j|M'v_lpjje3m샼8n21^+ʒlԐ}zՐtnhhZbu\~ҊVʼnPډ܈K DK =慱7i0΃?*jbЗ9Afcyœms-Amzgna[oUOÉIшDE=|6ȄR}0g$)*䁹D8D~^xuFrlYkfs`vZTLNHC=w6y[0u*2mU|}qw'Iqk$e`_PYSMG}}xA0<t06NU/O)ӂXх"(Y|it*vߟDpюljd?^Ќp+XًFRފLF}C@;5/es/Q=])K.SO)i{iMMuo>iVc.#]i X QiKE@*ύW:s4i.QT(˂E[Mjj}M|kxOlse`mnni?ockp^qXWsRxtJL_uE w=xq7y0T{*|Jm?m}4snx+ospmmqEhir.cBs]*sWUtQ쏇vKzwDDLx=ʉy6Ӈz0D&{)`}pxwq}pqxyr^s0sm^shXtLc9u]uWvQwJٍxDy=X\z6{0H|)a/}sڂYt_}Ϛ{tx)uNsumTug2vsbw]u wWwExQFyTJz(C늰{=5%{6чf|0u}S)ƒ~wmw}TxwexDr8xlxgvy&b9y\yzVzPЎa{JV{Cx|Q<|6L}0X~ *6~-{I{6|{4wS{?qӖ{]lhh{zg {az|\Q|XVt|P|In}Bފ}}<̈~6~w0}~*X5~,~{j~Zvx6~Dq~?kԔ~?fy{~Ra0~|[ِ~U$~Oˍ~Ii~Bފ]<ΈM6‡u0o*ͅz{zv4|pڕq?kh`f`["UVOepcIi,B}d^~iXя@SVMጚHP*UAP<>q<6k߂E0 sv*2ԀÑ~U+y㕲og8wa1\&TVePȍLK<3E@~;3B5d/rJ)HꖌL{wIqۙlfOH5`"[( UlO荚JA.Dx?㈂g:6y4.ӄN (W~zvBpQk8deg+n_בZTTOIR9vC+>∔9@3.I(Y}}Jye7ud.oⓂjRd^{YS~NKHtR~BԊÎ=8'3 -zh'܃ [jz|(kbvlTr1m1m&n*h͜eocؚmp^qYirSs@NwGtwHuATwS:Ax5Iy/Sz)U|8Smp{*n7vo qom qph7qycOrS^ s2X#tSuMܑv2Gwe@x:y4z.ۇ"{'}!pv{@q*wqr)3rxm6s h*sb9tb]~u#XuS!vM{wG-,x@y:z4{.J|(}s{Xt=w'tr4gu,m ugךmubv]wXwRxM.yPFz2@w_{*:s{4∓|/}''~5ewG{_w}v|5%9i4(:.g)@぀xڛAtpək\fSeas[ IVQRSIL oFԎ܌xAs={88t|30C-r(wsΞo]jenr`-VZU̓bP`K8ET@|F%}PxqtPqpgHr2kݢzrg7sVbps]tXu@SטuN~vIZwCb_x=%z7^{"1I|+Ɉ|&6}wϦttI=tnpztkuOg0ubACv]]XvXNw%S:wN`xIyUC zH=0w{B7Y|1|,=}&څ~8y2wYtuJw|owkNwfjx:ax\xWyUS.yMzZHzB{=)G|u7}2&},ˇ~3'y~xΤzt+zog0zjɠxzeza#6{ \m;{NWZ{RZ{Mb|%G#|B}=-}7~*2e~-~':wҤf~s[}n}wj}teLv}`}[ך}W}R@}M ~GÓ~7Bh~a< ~7B2>},釖'2wDSrjnfitbd<`(Y4[`f$V~QLGpB4h`[V Q{MǏCH̍uCLx>U|:\6+#21',sw8'SÁpzm5idwg_Μ"Zݚ_UQ-LPۑGj}B~1=V9،k5V>Z0U+&߂wowl) h tiҨteʦusa.u\v(WvSswƓt~a9I4\/O*%,o٩kuqg̥ـct_ ?ZbV FQ(LHBCvo>9p94lum/T\*S%FoZf,k탉gec^݂Z"kUނ4QہLjGʗhC)!R>o&9>t4FKp/X:K*5b8%-WnCkg(bѣ7^PGY̅ UPyAKיlGF3uBԔ>=94,Z/B *%)mΊaj~Kfڤ b]RY2T0OsK:=F— jBq=T90,4tW/2*%m0ifQf$a]bXpkS~OESJ&1F'FAߔ[=+k8]3Ќ.0*/%Xˁ le8iMei4`\Wџ?S(=NDI-1E}A%<˒z9"4S/ .*3ς3%g7kh=d` Z[WRnbM:TIM3=D֖ފ@g4<䇕84c/bg*o%݆kZjgCqcn_?GZ栩VG@QM9>HKRD1?v;A7%3?/ s*c%ifPgpbҙ^ARZUP xLIHe|C!>프J:y 6ňa2Ì].c)Z)%IVhߠecZaѣ̝i]5YFTޗP/%Kӛ\iGbB˗E>- 9 6"1-]q)67$>j&lfNmtb>n^nnnZoW[pHSU q/O4nrKsFt5B(uc=v6ؓxA1ł:o51TT,s(jށ!#ȇpf!cc`LE\iX jS܇OKK& FB->f:q51Â,4(vb#݇?fތc"_©U8[qW#S NyJlQFB>:)ƅ5]1PK,ڌ(Z#ׇ.e`r] Y3U>{PӣFL*H DN~@.<;q7ߔ74"0ǎw,`(Bك(#ԇbdl2_\7LXw#TU6RPDKߡ/LGҟ C?h;>7%3:0,"*'쉺#}naoh^A[oW#S:*OQK_K-CG#;9C +>ݚ:36w3@f-/kLJ+d\'M#ZotgƱpipkqfm$.rnrp9-sSqyctrts}uusdvNv8iwwW`x!x4W)y yTMyzCz{:.{};mn<4mos7nq Qor?psqnsrt폴rvos~wV|tUx.sOuy5u釺4w=]ް_ac?[}eԚfģkh-i_k*vlmn+8do]YpϐP+rRFsb=4u3w1G]oR_$`PbTdpf:ؐg iB!~j:ul6+mmcoAYCp~O>rEs< uU2w ,¹\̺^~`TTob$Cc:8eI@gM'hɥ~jBukϟKl7mac4nYXup:NqґDs~o;=uEI1w%|\a_^_naDc^Be:NfҭG5hW}i0t.kuxk`mbcnWp 'MqCsk:uE1w!*rgs9iskstNmtn~u7oՕuq v^r~~vsz6wu px-vggxw~^yxUz9|:}gpm qJo%Wrprqsurts%tt0uXu҃#uvzvwpwCygxy^xzUy{LQzH|Bz}9s{~nnsbot0puu!qOuQr,vswGswtnxuynyuz?pv{gw{{^xK|dUry } L*y}Bz~9u{v[ǚmx)my nyĮ#oz(pzqzєTr{*ms|{ttL|yu|pku}guv}|^mw}UJx~kLy~Bz_`9{5ke~Mlv~ m~,dn~No~cpp~yq~r~Âs`~y>tLp3u4Tg&vLn^4w[U6xXLyKBz1;9{s8i~k l*dmN{nkAow pXqrxsotfuv]vށSTw'Kx By9oz.hżiֳjه(lm90nZƒKomqp8 qxr„o_sfu!]vq/T*wK*x_Byɂ8z݁QgwQh쳥iދë2k+'lhJNmnlj,oxmpwr$=nsYfet\uSw$8JxRAyt8azLnfcܻg Shݐ}jBKkplꍆ1n Ljo;pWw)qnFrшeYt\juwSwvJ,wAy7zKšeQfg1jinjВBl?vmjin%*oÍvpmrTGds[u RvP]Iw!?x_6ByudEܺieӲgh_jؘkwlݔ2n~yo@upomqލd_s)ZtR]QufGv+>ow̅5#ycZd֠fZɩgiq;k3lRԆm}nOuoKlaqYCcr%YsڌGPu`GKvV=w4Wx؄Tbϸd+Re度gL hܟ̗Cjp׎xkąm|n0tXou@kqpޒbrqXsBOtEuɉl{mmDArnKipB`q8:W6r;MsˏaDu,:v1x&'avbwj coeyg< hŌ9j5pkzlݡqn7^i+o `+pVprAcLs>CQu&:v0x`aխ ceesfDhhiiҫтk/pyl qm|hUon_Zp/Ur Ks| B}t9Wvk0/xBOvSgYvi_vk,w1ljwn wog0xRp6xq;y#sMwTytnyuezdw \zxFT${iyvJ{zA|W|8|}ntm}tnOu oϫupv=r Bvsw-twu/ xv9w7xwMnyxeeyyL\zDzZT z{QJ{d|SA{}i8|p~r0rrslstNvtv0w5vww/xw wynMx]zfey${\y{Szt|J{ }yA{~C8)|(pwJqEyUB4zA5.h4YibjYkym*wn}opU{9qrrqjosƌbtIXuOdv1FXw↹=;xЅ?3y݃޻PgWǴhxi؝!is8B`t>OWuwNvEwjFk¨ވtln"wZo=7npzfq]{rԖTEssJu mB vov9*wÊ0Qy odwe{@fֶ~chHeQiðAkLlmævrnmp/eqs\rSMsȕJ)uFA3vh8cw֋/yG/ygfyiyjǦz9l(zrmznkzp*{"q`|{\rtw{tsl,{udc{v[|SwR4|y&Ig|zp@}7{7}}!wlxnxlo&xpG yqc yqr~yszRyty|zBuptdzvkzwcw{]xZ{yR|#zIC|{@k|}7}~.uqAvcrevswTtVwuxSu͍0xvywZ|yTx tyxkz8ycBzzuZ{M{UQ{|;I|r}!@D|}7}u~ t;vutw;uiwڤvxKvxwDywyyx%y|cxz|sx{$kIy{bz,|:Z[z|Q{R}H{~@Y|J~7|3]r{⳩sp{ԫt{t|.u|cvF|v|ŃwM}{~w}^sAxh}jx}bdy~*YzY~Q!z~Hx{0?|6|qPr1rZs?tr%uEu vp-{v?rw7jexpby5&Yhy9PzKH3{IY?{`6|ww#p{f>5|Un]9no؍pnjٙq㑄rvsmdft2yqt߈q6uLjhv `w:Xx|OyzF"zF={ )5{ȂWYm,inGn(Cp:qސr ˈrԍЀsxtRpuChQv3m`w,SWx+q"tr_lsdt[uS uQJAvAx9y#0z' i)4jMkRlL|m}n̈́oȤ |gpStqkrÛcsژZtƕqRuĒ[IivՏy@w87y/z7hijJk8mnPob{pfs*qcjrxbs,YtQ/urHvG?w)7ly!.zT A}[gf}Vh}Ij|}Vkә}`m5G}mn1}zo}pym}rq`}sPin}ta=}v%X}wrPA~xG~ z?E~0{j6~I|ȷh{el{m&{n{o|'pՑ|Kq쉪|erꁉ|syS|tqG|uiC|w a}x)X}PyHP}zgG}{>}|5~}ƶyq_Vzrz`rȠzslztQ{>u{puр{vx{w]p{xh|*y `|yX\|zO}!{Gz}c|?}}l6}~CxuxzvuRxvyZwyEyw{z7xDzxzy:yzyp{zZhk{{`?{{W|V|ZOZ||F}}>t}J~H4}}~HvzwzҦ'wz랝x4{-x{iy8{.y{y|=wz,|pz|hz}_{{}nWu{}O|g~JF|~>=}%4}gut3Huzv7w.(wUxHx&!|59}VtAtՄ\uaqvYvFw_†wԂx/dwxCo}yfyひ^zVJ{>qN{CE|H"=|ŀ4}71s5sΈۤtxu0tuύvL)w~whvwnxtfy?^dyoV%z M{RE{5=C|s4~|Upr0rfsStWu0uۅvL7}v܈sv/wJnQwfx(]yrUzIMz"D{j]yoP69zkd. {i{ggӀh{jNIkހzl⍈_n);oJ}ـpu݀ qn9rft`^juVlwN]rx`Fgy=L{54|tEl8>m#XKn8MQoEMpV=q^<2r`}y"s`utan~uhf4~v^V~wV5~xMyE{=~|05b~}NI}pϩ<}qq}r!~r\~&s~Jtnu~Su5|~IvuN~>vm~Bwe~8x]~ZyxU~zhMn~{OEJ~|,<~}3~~|uH|Hu|v?L|v }wu}jw}}~w|}wxuO}py:mN}yep}z~]}{!UH~ {M!~7|E~V}8<~r}3~|~zzs{ z{az8{zF|z|lz|{{|{t+|{l||5e }!|]4}m|T}}}L}}D~~X<~E~4 ~u+y~ my~zz=~+z~B8{ ~1{r~2P{~V{({~s{~lM|=~dv|~\|~T}`L|}PD{}|zÁzˁz{s{-{l{Fc|[|S}K}`C};}3~4ww]6wɇn:xHxĆ6^yDyЅ1zzLzWxsz%krzc{![v|S|K|,C}M;}|37}`vcvwfߗ]w6x\UyyU#yyprryjzh%bzc[{S%|.K;|B|:}CO2}nu~v s~vw7&wύxq,ixfy y)vqypj;y鈨b{zZ{R{J| B$| 9|1t}Qt^suEǝuԓBtv w+Gwߏx>xexqxriyy8bzZ_zQ{eI{3Az{9.|r0|邃xstE-u%uKYvwO~wwx2p%x[hyaDyAY{>6{u.c|k%rfr%IspߒtTuiHu?|vwuwmiwex ^}xVy7N[y̎aF\z{>t{B6{W.|qߟra/*r󪢑sը tlu4{v't4vÞ'l{wSdw]x{Uy MryNEqzc={$5{刅-|qn/q޲9rthsXt.ނu))zuؤXsQvkw!d w\xFTxaLyMDzNg<{4{މ-|gObh=jƃk[lnmJo yp1r,qhjт"rct\GBu{T2vL x"Dyy<;z4O9|0lkңlwmҕnԂoGp〳 qyNrq쁬tjYuc v8[pwmS^xKKyCSfz;G5{3}2Ɓp@p'qOrsWrs6Xus'Ktxuqɀvej,w>b΀]x[LyRBzJ4zC{;9|2h}ȩA6t̀;uNukvvހvwrxJxqxiynbZzZzR{J|FC7|;P}2b~P9~y}=yB?#yi!Qyyyⅶz#~z{wzzpO{ciZ{aQ|Zs|RE}Jr}B~;{~2ry~a}~}}t~}Nv~A}f;~x}d~}|}~}w ~}p\~~h~~"aJ~~%Y~~`Q-~J:?~BJ.:Qg2Gy9||ˁ}K}O,}=}ـ}M}v}o}hV~!`~b^X~GQ&~`I cA&]:P:U2)A?{F){چ|#\H|q |}.|}6u}Io+}X^g}`>}؂Xr~.=P~| I-~Av~ρ9~61ڦ z{?{Qq{|)[|j|e|ub|n|g8}]_}RX }#P~H~C6@~h9"~1v~j?y֐E*z1Ҙzz󌿊f{Uɂ{Ȋ{{Ht|"pm|Bf|_a|ۆW};O}fG}ф@G~8~0!~L0ykoynkyϑ@zEzsh{Bz{6{|ytG{om^{ċof'|K^|p!W|҈O=}GE}[?}8 }̓g0E~8Nxbx͗]y#py9z$cz%zm{sp{4l{\LeF{^(|dV|aNb|yFY|>}>6}I.}݂ޢwݝםx7!x}y'|yizHyzWrzӒk{=da{Q}]I{U{Mk|W E{|f=}62}`.+}rwZ wx xOy5~>yۙxz#qz~jzŔ6c]{ )\C{]T{M| EY|<|5D}[-c}#v!w(┬wx0xßoyvxy֛xpz6]iz6b`zԔ[={#kS{zK{ꍇDT|e?<|5,}[- }vvvYvϓw _wxS~yw>yoyhz[AadzZBzR{OK{ʏgC^|P;|׊g4L}^,}兗=u~v9ovw>bw}xȥbvNyLnygz,P`hz~YYBz̗PQ{+DJ!{YB|J:|؋3{}e5+}igEhfiۑsOk'lb bm|nuŅkonxqgn_rS`sY u)Qv{I{wBN y$:z3{ۤkl]׆xmxc'n|хo~NUp|gqudrn9%sg t`uX҂wP\x?I( ygAhz9[{1|ۣmo#bp\/q% q_rsh{݄4t6tunWufv_uwXq&xPyIzAR{|9|~1*}Dst\uuzMufvF{vt߃ w{nx0fӂ%x_myXzCP_u{H:{Aw|u9v}=0뀎~2xxrxxGy!Cyhzuys0zzf;{^ׁc{WqX|O؁2|H}*A/}9~!0s~I} |{2|mY|j|j|y|s!x}l2}Ze}u^U }}Vԁ}OD~?7Ձ02ǁ,O~q~NFR~}U~et~犉~3#w1pnj-cS\S*UAKLMF%?^6P/pyC}a}G}ǐ ~2~P}~5v~NpT~Wi~jb~][~HT~@LAE>3C=@/6kK.Wb|!|!}$BA}r\}}~v-~,o}~3ch~&/a~@[~a|T~}L~ćDr~ꆖ<?5z-.|-Ǘ`|`+[|a|=}O|m}su}n}ؑg}ؐ a}eZ:~SN~J~`ZC~<8~ΆW4~-$*{V{מH|-^|||ݙ{}I2t}]em}f}`}Y/}ŽR@}ٌJ~B~rN;B~3~څ,>Ӛ{Cҕ{\+{c||pz|s}l}Je}i^}}X"}EQ3}I}猤B~O:~3q~҆+z۪z󨒎{ ci&j lygm_xn}q ojlpd1r]sqVׄtO,{v0G̃w@eRx91z?1{ъkIl@m :n o#~vp(x$q*qvς4}\7}/؁L~T5| {{E|{‚S{|'{uׄ|;ogQ|oi*|bL|[ E}"S }iL}Ek~)> ~s6큣~/́8~}ׄNbBՄ){']t0n9hlLPaAZ(Sh"L,eE@>6/0n胢y ݃Ԃ݁AÂzyLt7`#mg`炕Z h:SEK(D=|6kV/]MBnɎG-臎!z2ts䂺#mng)6J`p Y=ŔɂK_DG== N6 S/ƀۙt^̂n΍t&xwQyƂ~sn/lof_YJqQRWKdBDE=6ʁ/#Cd+ˎˁڍYysrց(ldDfHh_v"rXف rR3JaC/߄<,51.ceȗ{:!ٌ%I}_xorVWky88e ^ڊWQBNI-BQ;$~4/`-GX߀yԑg'ԕ~ՀJw"qYjǀ@d&]YW%cPFHkPAf_A:oP3k8P,)"[5i}Հ+w ppi߀Xc'v\RV)OxH0@:9q42h'1+ȃ1|#vDlLoYTh`wb2K[$cU,NkՍG&? 8'1,**1L9v.fC7B{ʠucnh -aC(kZTޒxMkF,ˍ?-ދC8 B1,**TF~ݭg~ϫ~ڨX39{xt{ءm%g"`W QYS"ȔLtE5ŏP>=7^h0*)€SИ֐gqhTciɎ0jōakzՌm"tznBn otgp`qZsńx7⃳z 0{hxkek݋l˅#msnzosڊpmqg 1r`FtYPuAS4|vmKwDx=Nz6݃}{)/|OnڑK+opCqlqyrsLsbmPt:fԈu`!vYwRxKmtyCׄz.={6+B|/D|`rɑEsK~sׅ tBtyNu+sTumvvfw1` xY<7xRFyK'z~CZs{W<| 5|.˂J}t 8w$w w[w~wxnAx5ru{xlNy"f3!y_z(XzQ_{DJ{C ;|<7}5m}.8}{?zߊEz$,z}{wq{6q{k2{e|'^|YX |Q1|JD}eB˄};i~5>~L.u(~.~Z~jG[~_}~LvÇ~Gp߇~pj׆~dކ~^T~W#~P~I_~Bf ;L4#.;$6K8̆v1*Kf!Ƀ埱Yٝ~.wpqk9d냎^zELX,=Q񂅏#K D> 6Ӈ0r)فk mF@}L}>w>p;jO%dc&])W7̓PlZJC猞= 6Jψ/́)EaQ7܂6|'CHvZo׃~ii[qc&E4\VRNO_IB]<#ʌ5/9(g`hiiimj{kv'mp)n+joWcp]QqWt sQ#tvJ,uB![wq;x4gz9-{)jekӑlqmzяnu_oo|piqc|r]5sVӉuPBvCIwAx:mz!3k{U,i|MnR:85|3e$|+ł5}vhvv~|vwy3w\s挔wn2x0hXxby7\% yU'zUNهszG{@ |e9-|3&}+~?kzHiz(z)~zIyhzks8zmzg({BaF{[{T|-N`'|Gv}@5}9 }2~_,~ӎc~['}ɃΌ}~7}xQ}r}lɊQ}g}aK~![~%T~~~M~)FG~}@%~9390, ki1` }}wߋq}l;f[v`EqZWET MjG ?'93B-?) Mŋa?S}JфXwubq]ꃍk*[e_هԂY,hSM:F?lz9:3hр- 0&g ㊮3|Ԋ@wԇpxk5e#_k2YɄS7LۅgF[^;?ބS9=29so+ÁӋ͇l~Âq|vYbpb jWbd]ʈY^QXnxR~Ls]?E"턘>8D#2$/+ǁLNʆܐ~{-uшoiucn|#]lҊ3W?&Q KC̆>|7̃1[+4~; 7ztynIkh(b9\VrPnJ҈BZk=ch7;`0򁻂*lādؚ ™_߈~yLjYs(mgbGa[rsUݍOAIUAp<6U~0!˃* ߂Έe~ˆ#@x·sʘl򇫗1fׇ1s`ԆӓZW"T0N$)HB!Ovx7z1D{U*cm|ǖdn@=hn8{ozxpquq5oϑqj,trd6s_TtYuRʋOvLwE0}x>0z7{ 1Kf|)+}4@jqDž8Zr]as{1~s{usotZj tdŽu_F]v~XьwkR}xJKy6DԈzA>B{7{1#Z|)ق}RuړZuvDz8vtvnw6iKwcxI^mxXYyTR szKUPzD{=|?7wZ|0}*$~W܋:{QS+{K*|BD.|=m}l7X5}0~R*~ƈ}E_|}ݑ|xI|r|m|h}b}^]7}W9}Q}JĈ}C쇐~\=w~7^C~16+ b'1 À}W;x+rm+g(a>\oAVZPtJ|sCԇe=L7}!1\+󇶐?}Vwir.Jlff㌥aH΂_[ق&UP{J4(CqF=@*7@1{+`}(⏛|wR^qύ0k-fJAd`kZ{}U;OoIC=Oڂ7M0A*݂p9(H|ow)ΉqpLTkňe'_Z<%TJ'OwnI]BۆRtB8X 3Lr-'Ȃ(]3g<hyiumjpkkam!f;nA`Փoh[\pU͐]qP.s-JJtC8v!ovivdSw_LxZxT!=yDNyHKm|Sh|nco4|^A|Y}:S`}WMZ}iG}@ȉX~/; ~4j~.(qm-|owgrIrmUgGbU]\VX$R`R"QL9G?*@5:5_/;)ƒt|D˃WwAq5laTg^b6\+WkQǁQL FM@V:4φ0/g)ƀ k{Tv%qilFYfϑau؄\ӄ?VQXrcK=F{@yu:04h/#X)]~ʔzݓ$vX,nq1Ck㑅ffN‡`֏U[tUW/PŒ&KF:Ƅ7@S:EȂ4Y.{2(i}Az2buҒpی)h8ކ3% -'Ƃ3zIӠv/aqґUlg5brt\W\Qތג_L{HGv'AÉ=!272T.,Äv'o͂yu֢pۑkʐnf֜a,S[Ў}VQ!ݔKF6-@%<:C7A1ʇB,]х\&{}nh>xȋy8z"2{3,Np|Z%}y{|qcwsrsZ>rns0isd7t@_tZ•uUΓ_vQP^wHJ援x/D덌y2>VzK9{!3j{,b4}& }|ǝ>twu;r̛zumvivsd*v_BwbZ@qwU>x~Oy'JeyDZz>{9V|*2},ʆ}&~k|NZxYw*xxr+xmZxh7y&cyo^ӕHyYƓz9T̒WzO{Iɏ{Dl1|>x|8$p}a2},~k&r~{<{vF{qY {l{g{bo|^@|YYIp|TZ|Oj} I}9DC}s>r~8GI~2~,,'hzMuޚQq#{~l\+~gy~b~]I~X~S}~No~IBt~Cߌ~=j8m2-'lz_u|pp̘ kgbx]߁dX:R M⏪HԎC|=d7׉12Y-'y=t֙FptdAkt;f-a!U\zWoQRNՃNMS[HYՂxCGA=+e#7ID'8?nU;ˆ㇋6]1 ,K'(s9oSPkify-a攒\瓩WԒ~=RpM@HǏCˍ+ >؋n:و6vP0-+&ブsrPn1lj2eʕUaq\WvRnSM QHّTB8={:5(0*T+!&҃CuIipilBajhUkcl_m[QnVoQqLrGHVsBܐu;؎>v5Njx40y*z%L|@tkpvllQmhnRco3_aNpZNpV wqQPrLvJtGk uMA~v;x5yn/z*F{$|snpWCoOlph8pc؞Wq}_Or1ZrU՘sQtLuGvAV"w;_yE5zszj0 ]{{*t|r%T}isqpR^r(lrh;5sKcǝs_tXZT*tUbuP{v^Kܔ`wQFɒGx>AyN;qXzi5ɋ'{_0=|C*8}%[}uxupOuu.luguc"vY^kvY♊wNU$wPlxlK6yFdy@돣z;m+{6|d0}+ć}&?~VtxBpx@krxqg)xbhx]yCYtyT\z OzxKzE{u@|;<|6}o0}+ۆ~j&܅/~s{oB{SjϞ{Tf~K{ra{]jh{X昜|TA|KO|JZ|E}@}d;9~6~0ވ~+i!I%es%k~nڟg~jH~Zf~^af~S\~fXf~vS~N~J~EI~@Q1~:^50X=+/V%ErЂLn{؁j1me>Na)\WؗS 2N[oIDˀ^@܀D:A5A0%+ q%̀qomҞriCe;ބ9`ǚ\pޟ.m] ivdߛ;`aA[~V8Q𕮅MH!tDN?bY:r5Љh0#G+&ep ،lhhd=9J_Z똺CVQC~LbŇ5GrC} ?"-:x4b/⇎7+t&oVYk̝Oh -oc@z^ܙZ{U=ъPa*KRG+7B>N:p\5z08_+dȁ&'njgbb]~YGATuOΕLJ{Fr܊A=|9Ջ5h,W0.+y&΅ Tmxi͖f#a$]$QX{S,O;JQEދA-I<҈n9 4 Z0?G+ĝ&Relmɜhe <`^\R,WjR򖆒NW5oID@f;׍ԉ863 /bf*烔%Մu kj.g꜆pdIe_ݚC[}$VߗJR-M:Hْ@DE?; q7k53'F.8)ن% mΫiiijek|aťld]ףmHZ$n+Uro4Q4pCM/qZHyrDs?44uW8cKw2x-9y(Y{M#4|lliVmeman]oYp_UPq?Pr2Ls,H tIC_u> v8@ xg2y,Rz'؉2|$"‡}Ol`o;iHoe$pja>q]ޢ^qYrrcU-Rs PĜCsLQtGuCKv=x98y2YYz-*{(.|#,}l3qiB4rbf`rbsr]⡪sYttUuPuL+vyGLwlB”xa=_5y{8z2{-|(}\#҆~2m|uiCPu6esuaeu]1$vPXPvT>wLP"KwK6xoFږy%Bby=8z8'Z{2|.*}V)e~$~m%x/i xdxD`Fxx\xXgy&TyOyKKzcFzAd{u=|70|3/}.l~.)~$҆.lS_{ThQ{dK{`;{"\ #{OWޞ_{Ss{O?s|Jk|bFN]|A8}<}h7 ~&3&~.W )e$$k¥~go~c }_D}[}Wv~S'~'Nƚ~;JR~XE~tA]~<ʑ~7ȎZ2-)!1$EȀjk./g7c_р[RJWRNCȀhIǗĀ^EkBA +rDd"@NZ҇:Dm6c02L.0)Â%fmc3c!$_ [MWᑖS,]XNÚ JuF=Aؕ0=Љ{9za6$d?2)'-&)lm$؅refP5bR^ɠZП4V”RcEN IOEkNA%* <ޒ֋8g5bsy1nD-LC(݇g$Yقdh>*afy^Z "IU𝱗Q7MJ=I Dɗj*@tKwA9הx4y/f]z*q|%}!GG~ d)rYbLr_= s[sWӥtStO~u8K1uGbvC Ew>ŗx9y4z/{*ጤ|&@Z}!~eլu/bA*uE^du[FuW1TvWS7EvO3w[KwFyx}BxyC>_nz9z4{/|+O~}&֊>~Q"=e x#bvx ^AxZxUVxRyNyxJ]yFz^BXz=.{9u|64v}0)}+`~p'&,~"d髯{+abz]GzYXzVf{R7x{[NKB{JC{F5|BAl|= } 9[}}4Z~F0:~+SI'F)"d_~$`v}]q}zY}Uգ}Q}Mܟ}Iԝ~Es~(A ~R=i~9=0~4 c0%~+.'-S"cЪ-`]/VTYZgFUy.Q}€3Mju+I_e E1$A-Ȁ=e 9ۀ4wÀ0_+g'i"hc5.)`&\ڦ-YUWQ|LEHٝ,KD@<ؖ$8㓟r4R/+|'Y"ᇈb2_F\XĤ؅Tǣ{PXHLu6HOD(@>_G:c6 3Є/y+ʋ{'#Wx&_\픣\nYYr㒬U$Qעu\MԠ-IĞ EМэAŚҋ=\|966/3/҅/^+!'Z.#G^Zޘn[V"XӕTQe4MI~E%ݏe0| Jf{дh{i\|EWj||l|gm+|nf}/o}uxp}oq~fs6~A^ t~~Tu~KwB~x@f9@y|ScefgipXjހvlt m[q6nuxogo}q>SfurC]t 4Tuj-Kv9BjxG99ySWqbQce'fh7iɄN2krlfƀmxo0oper]]_sThuK7vsAw98yM7`䌧 bnUdѪe}Vg?/hވj.k"lwn`noم*erq\f]s Tt6Jv Aw)8zy_MaJ1(b掛dfK癆giRMGjӊdl9vmno6ep\rStJuARw,%8xT\^/`?4axcU0eog3Ohj&~kv@mpmtndp6\qSsjIu9I@v 6x]-e_K i`:%bזǠd_\fqgi@~;julGln!d-oZqXQqrH7t_s>v5w|\^aP`$-b rcɗe gK=h}tjc#tk7l3m1cYo#/YpQPer0G:s>Eu4wb][է|]ݰ_tma]yLcGde'|fnhCu|iǖqsk_3kklbnXuoCO@q+Fso*u|r4wdv,snsvtewv]xw[T yUxJzz:Az{8{}4:nEk"Mo(lpmpo8sqprgqssr݈sttku@w&u+vfn&uwe}vx\wySxzJVy|@z}R7{~#lMpbLmRqanXryoNs_pHtVzq6u1ruXrvswvtfxmu5ye7v>zd\tw.{?Sxh|OJ%yg}.@z~ 7{4j}uJkv=Glvmwnxox[pyqy7rz3vszmt{du|:\2v|Sgw}pJtx~Ayy~8zah{*|j{)*k8{l^lr{)m{*n|Co|[p|~q})v6r}mmns}du ~[v3~sS1wL~JRxV"AyX}8zeݿgDh0>iqkQl`ܗjmߏ,noӀ~Fpހur ls9d>tw[.uFRYvEIXx d@yƀK7za$eՆg#%mhn[iׄ%vk,ϖlmz&nB}p%uUq6lmrcsނ,ZuORvI#wс@;yd7Lz69dYbf ?ge5h∍jGܖk\l݇ny}oDtpkqc?sD6ZjtÃQv=Hwj?xO7 yڽ"cd f`gibj3>lmc|unto݈,kdqTLbrUZtAQguHww ?xUE6y^bc֭epMYg QChj#ka-7l{ms^oIjp͉b3r2yYqsˇnPu6cGvS>Nw$5Iy aab5df8gєNRi|jՃ}l%}{ mi4rnčj#pO2aqX@s*O9tVF%us=6w.4_֥EabcRdŸ!;ft/h4`Kirxjy[l@q myhjo2T_p VxqMs[Dt׉; v`*2w=[_`mbcYd'Neաgphߝej`*xvkp.msgn_ p`UqmL^rCtU:v1wٸ^_`"a+[cÙ[e@H)f戎hUT1i՞wk0BoLlwfn@^&oTqKr[BtE9uJ1w¶^_ baI\b뭖adڐEfn/gХOKiWvjngl5em`]>o?3SpJr].At[9-uԊ0Nw]q^j@`ky[bHuhdxSe|gWP~]hߦ3ujNmk֟em#\VnRps@Ir9A3t8hu/wOtdtWf0thu>jB ukӖv/mn]vnw'p=}:wqtx)slGxtcy4u[;ywR}ztxI{ z @{{8 |4}qjrVkJsmNOsnMtXoDtq$uyr=vsn|vtthw/ukww c^xyxZy&yARyzlIWz{{@{|7{~ooippqZqr&rrsstytsuB&uv&|uwtz ]6%z}iuƲ'jy+5z h^Ʊi jТ&kb:m4ʒ/n}T7or$pzqq0qripsÄ`tXavI8PwmFxz>Dy5zgNױhyick lUϑmn~xoΈy^pˈqqShs/u`etsWu˄Onw ^F[x-=yK5DziL%fC`g5Chɐ3j5Rkܑlmo,xp5pkqlh2r_sWouXN-vEw̄|y?|s{(7E||ujSeukhv:lpvmw*o9wpwqxQryxsqyuidyv_a&zwXzxPO{!yG{{1?p||m6|}(s;o+spptqu+qWurڑKvmsډfvtQw\uy^wvgq8xVw]ixxV`yyDXz+zIPz{PG{;|G?R{}>6|L~,]qs)r>ts uK-suΘtvcuQvuw}(vlx!yCvxpwyhxz\`x{Wy{ONzB|F9z}y={W~`4{p yapyqyoyIEz!o.JFp$|zqtqlsdt3U]uTTv:Kew0Bx1\9yB1Xz!hhpi#jfkxm>nIvb@wz8;xl?0y|gh%tiWitjYkH-mMLnC;z>o^8r.pX8j9qbrZ0sfQtÍ#I-vAw58xg/y5fyghRuj kZfleLm̞y_n㛺q.ohiPq arQTY;sdPtuHLu@#wa7xN/yìlerfÞh7yisjѧ l1smTxwnp?p@oxhjp`qX@sOt;"Gnuu?Mv܋7&x5I.y:eMޤfQge,phۮPjGmkl㥯wn oQogxpi_qWLr֖^Nt 4Fu^C>tvɍg6Tx3.!y}zdūzfdg{h#"{@i{ikh{l~{m~{o4v|pn|9qg |.s|_&|ptW|v]N|wF}-y9>}cz6J}|5xi窲y'k cylJIym{z$nzgozp~Fzr*v]{ s@n{Ft^f{ru^{vV|.x>Ng|ysF8|z> }{5}\}, vn9w}osxpVxfqBZxr-yOsOys}ytuz%un+zvvf?zw^S{;xU{yM|zD|f|<4|}"4}~{uPsKus⢨vtt`w uwux=v5xv}xwpuy;xn yxez y]zzU{+{TMQ{|+D|};|e}3h|~sx^twx_u'xguxv{yAuw'y!wz|xzou&xezmx{>e~y{]^z |WUz|L{H}{Dg{~;|;~2|57rl}@:s3|s|șt|ޒ'um|銪v*}vv}B| w }qtw}mx'}dx}\y~BTz`~L{~D{B;|3|îGq'or5rǁ&steMu7-u{vBtivlwdhdTxZG\5y)ETzUKzMC{WM;Q{c3 |{^ppqͅhrDstf}t{usvFkv܂cwq[x$SyK{z=C\zu:{:2|XoiopډqljrMQst&)zltᆋsuo kPvCfcUw,[Xx$S3yKy0BIz:&{]#28|n#zo op?qrGsvytFr tjubvZw7RxkIyAzK9z0{Pm?n4o/Bp6.q=!rJgrxsqkt_iuDb+v=YZw:Xv!3P w}Gx?kx؇67&yυ/.ză6kC6l(Km_xnIt7oZp}qIvgr4nrfsĒ_tڐWu]Ovv0Gjw&?x66y.zjikals4gm5nˠՄo} pԜhuzqš:mresf^t VuiNv\Fws>x}6yh.z4j.0jzkتcm:nBo{|#pe$tq\lr9'dsp]t6Uu#Mv'Ew>=xM5yq.z%}ijU^k>͑bl!Jm^o{Cpsp kqWcr֛X\s;Tt(Lu DwPvZ|Fv{ww{Ӕx&{Px| yF|,'y|}xy|pz'}iz}-a{"}HZ:{}R|~!J1|~BU|~9}I82}nu)u؀Nv~w܌w^xP~uxwzypzymiya4zYv{%Q{I|FA|9}#1}t(8t܄Śu Uv1Ό)vك_w }wvxcoxgh\yW`zXzQ{_nI/{EA=|g9%|1}Ts4sPtTuXËv YvɆ}Sw-v2wox"gx`-yyXtz4Pz H{@%| H8|0q}IrE ssŒntbuS̃v! |vXuw"npwg/x0_x2Xy{P5zsG{+?{i7{a/)|fqe]hr3grsՏtu|utvmw fw_z[6/{[*.{݂ڣp'ڝpӛCqQr-asht]6zt㓝sNukvdvώ]wVx>PMxEy=zY5{.{փ}7a~1/~ntwIwԇԔxjxyezqxzOqzkzBd${Z] {уMU|YM|ւF}3N>}6}Ձ{/$~!vwYOwEw%xC\Txω1ykx2yDq\zjzXczφ<\{OxUR{ڄM|TEFn|?}6}F.}\PuvU9vw3 x2A~xڌZwy-pyiyЉc zK\7z؇U{`L{˅E|)>|6q|.}Zជu +uv-wvLw)}x<vxoyhybbyߋF[Tz[Sz爡L{_VD{ˆ+=;|85|-}tuP@u*vSpw}VwƓv.x#Ro>xh>xzaNypZy3S~zyK!zCm{z(huF{vɛqt\wTjmVwۗqfxQj_BxǓ5XzyJQ[yʎIzk^B{K;Q{ňN3|B,p|Ys_sbsǥt]uz`zv]GspvlRwex p^9xWyy `P\yHz>?Az:d{3|O+} vrxhr̬ݍ[s6|79}.~QO~uzg"~z+z9?zQqzu|zvj{ o{^i~v{b}{[|(Td|L}~6~.~.}<~}~~}8~M}n~}{`~}u'~~n~~%hl~~La~VZ:~jSp~K~D+=6X5.v|-ו|3#},}|}Wz}/t1~#n~Pg~}`~Z~рSK|HD`<u5Ul.-O{aO{ӆ|UC|_|z}Svt}o)m}gL}Ń`}Y~3R~yGK]~ł,C~<539.T`zޔ{%{ {m|XZz|s|Ї?mS}f}`4}ZmY}R}Kb~KD3~<<~4~Ձ,~%y1zqzڍ{D́-{zH|/%s|CZl|fO|_|ևY-}$R|}wJ}ׅ%C9~R<~Xl4~~,N~ƁyK(yҒ䍭z&҆zĀI{yy{r{ȍl| e[|+{^|pNXD| Q}I}|B};A~ 3~LX,~6xϘ͒y#vy*zzx{'\r{LkY{d{ƎP^|W|GAP|H}dA}y:j}ͅ31~%#+~u!xJxxy~zwzq zhjd{>c{r9\{bVu{O|:HH|Ҋ@}8m9}2e}(+m~ewˢϐAxtxcy M}ywz=pzilzb{,[{oUl{N{G}|h@2}92}u2+}+~dOwUwĉ=wأx|y+vyٝo/z=]huz=a|z Z{5Tj{z.M{F|1}4*~q$`vޭ"wwP x{xģu!y{FnFyg}zas`zY{ VSu{ML{E|0>|7}O0}@)~hdLiۍj_5l!LmB{Wlnntޅo{nhqpgDŽqa.`rZt>SۃCuLvEDxF=3y6z/J|3lےņkm=nuo\ۅpHzDž}q.t9rm܄s gm3s`uZ+*vSNw0LxeDς.yy=Jz63}{/A|*p⒡qrr݄rsKzst FtmuPgcv `wYтwRςQxKyDhz= {59|.}T+uD1ue0uvσvyzvsNVwmxfۂx`;nyYPyR?zxJ{QC偎{hu{bW\l^V'tOHG@Ӄ9߃2ۂA+ӁT}}EB~X~mQ{~]trn{~jhra~r[z`U6 'N" G=i$@2(9-'2<+89|}E}{}Iz~5tu~m~gy~s`~/Z~T}~LN5~Fr?sBl8k*1*U|o|Ś?e|}nby}st~l~%f~M_~RY~WHSt~^M$~gE~ΉJ>7~77F#{0R){{ţ{}|zw|❺q}\k}d}^}䕳W}\Qo}K}D~@g=9~6~0H)_{.t{QE{|| v|p} uj}Ic}]}V}ʕPz}ѓWJ}ېC*~.3<~5~/kP(Ce&if0~gvh}Rjwbkmq:lkmdDo#^QcpX5qrQ配sJ!uCzv=Dw6yv/Yz͋hӍ^i5j'k|f*mvÉn-po=j3p\d5q{]䆹rWtP7uXIׄvBԄ'x<8yV5z.-{lEmAn ԉ{o|ovJppqirrc̆s]ctW\uPlvIcLx'By[;1ze4傔{q.<|@pm؉qqȈzr1{.rv seo9titcu]JOvVwOVx~IyAqrz:{h4LU|;-}tŒt͆·u {u{8uuvao ]viwc!bx'\xV[y|OK z.H[{@7{:/||35}-}xxx)~xz&Ryt y\nFyhF9z%b[z\ ezUa{^N{GӃ`|w@r|9Ȃ}t3(},w~U,|ƅ|@|'/|7y(}|AsI|_mO|gi|a5}[P}8T݃}SN7]}Gb~@~F:\V~4c~-ځx~yހ"~xr_vl/fƒ}`郧ZjvTe-^MׂQF@3: ]3-ȁBL !3u~k/xdr l>]fAj`IZ(݁SFMzFy?B93܁π-kc! +c0}xx yqʃwk=e_XYiS7HM>E#?d9b22t,䁽q)ق}1wsq_k.e}_(YS хWLEv>e7j1!+?hЂ5|Gv\ptv?j50Fd%d^ ۉzX}Rw[KS\Dǁh>S7e=1"*YK9Kx${‘v搵oiƎkcO];!WLVQ^oK@C=H6ҁ 0À*JՂ~}gw$zIuptn恢$hnbpK\IBVF?PYߋJNC ۈPAb;4Ӏ.;(U҄vZv#}zwĀrZl-e〭x_рǙ_Y{3SbMcl.GI<@ZB:g5494.3'ǀ:đeDHfKHgb}Qhx/vjr׍kSmlgmaoZpsU qNshH4t@hv:/x3y-2{hlij|׎FkwjlrmlOof p.`(qHZ)rT^'sN :u3G"v?x8uppGujyve6w_wwYHjxbSy LyExz>Ä{8E|S0Ղ})}勦wۆ0wՀw{@x6ukxvokxj.y>dt'y^؇xz%XzReZzK{pE 6|>Y|8D}K1g|}*~c{{o{azx{yt{n݈{ir|c|@^'|X m|Q|Kn}DÄ}>~ 71~Y1*|~*(ˉ&;]~y~t_~nO~h_~c~]ud~Ww~Qhr~K'~Df=\7x1;m*ցAㄋ`PgyQ4smƇnh'ԁbipX\…7VׅtPJՄ}C̈́u==s6ق߀0r+Q9ꇮׇƆ~ćx߇esB*mBg^^a̅\}V:'PuJ2?Cx%G=@7#V0 *{;C*3R~O~xzՈrۆVlxf;93'u4-TFH'z^*euf\|grwhsjnkOhlcm]9oW7IppQ}qKʼnseD-u$=v7x$1\y+$l{:hbi}|IjxwEkrll*mgnb%p\q/VrePي_sJx"u+CvmMf:GA#݀Y:c4H].XR)3_5}KhxsFm/hXbდ]bDAWވRhւM&Gee@ԅ:46r.(с61|׈xnqPrmZg(bA{]\ňW+*GQՇzL̈́!G@:Da4.ǁ;(oE|r%wڌ%qxelg0aQ$B[ȈVW懰PEKF.ԅ@ :- x4^N.|({kv0 q~܏ l!)fWD`Ј8[G9IUFP,JJEv?S;9ՃԄb3ۃx.fu(>zÖQzϕ%u׉ pirk 1e_i?ZjTpO5ʋdI܆Dfb_?^973M.7(;}՚yZtLo_j%ٕ2dˆ_ 0NYːSÇOqNLHۅC`@>28Ã+2h-['񁵂r|Myxisz'nSÚvicֈ`^/bXRۇ5MYGBb0=G7&2FE,I'0̓zv݉rW-mLv7h&LMb$f]QژvWQ$Lx{FAs%<Ӌ?73%91^,,h&`e{.+fv$0gqhlᕱj=h>ekzc2l]鑳mX_o&S'pMɍ&rHtsAJu::v4̆xV.ky){MYhziuݗjq7kl\lgmbHo]YpX q8R@rpM'sG>uA@v9x?3y-Gz'ރ|-~kzklvmq>nvlmo`g{p?b.q$]prWƏ"s R=t9Lƌ4unFv@x9yV2>z,{'|~+o:zVovpq'qDl9qg&:rasN\ďtWtR vLxwFkx?y]99z\3{c,w|b&ƒ}JpBrz'sCu^/sp+t7kLtf~du?ac u\?vWw2Q]wL QxFy?jdz9Q {u2ޅ|H,}&}~!vyvtYvoSw3jߑweؐw`mxo[wxVRysQ#}C8}3~*-)y~')G }W}xM[}tsT}Tnf }^iaX}bdd}s_^W}Z1|}U&i}Oh}J}J~E,~>~8~3+:-qv'U|ׁܑw呮rOmlhŀZcG^݀6Y ToO0JD>n812ꅏA-J{G'ăn={qwegrm{탡hCZcX&^|XSPNIDU[>8\v3V-T'z%]vrA($P8t 2-''iyu]ql$g`bEƉ\ӌЈPWRDMR7HmhC=Nx82D-'_y7אtzapƏ kufaYn[{VˋNJHQtNLcRGyӇ&B>L焈8ۅԄ32i*,;'KBx2Їf:f}5fx08 +\&1䃥y}Retjsg oDhCktse_t`(u\uW~w9yCr7y\mCSyh ydRz_z@[nzVEVzQq{dLc{G@A| B|iEXSۄnNJBEt@܊~;N50N9+ &eFs oi# kjzf aň\"WِiSMY8I^D؋@s@; 6p0/!+u&yrB2CnijtOe*jai\WZ R;kUM2@yHCg? [;^c60+uׁ&Yqp6mCi|dۏ`![BSVD&QuBLo#G։{C,i>䆼:@6*1R+zh&VOpKlk hj_c[_0ޒ0Zu#UrP$]KF}BX[=͈/9+5"0P *Ʉ҃?%ꃿo7W:kiəgY&vb[^FmYT\OJzFAZ<Ɖ9z44/^,*F%˂n/jUfW&aْ.L]ZyXĐÖS֏֕,OJ+E]Տ@U<͋a883D.օ䆣* %0pq/fl gh:hdi`zij\kkXm)S{n`NՖ$oJ6qEr@t 9Սu4Gwf/$Ux)zH$ƅ{p}Xil.jdhpk[deClS`+mU\ nPW.o[RpjNTqIrD쑏t.?.u9wA4 x.y)χb{)$|qoڡlbliVm"hmd}on`So[bphWAqQRƖrtxH9y426z/-{{*#|f%/;}Vpǟ_rl;rhcsjcݛs_tr[6tVXuR'vIM)vH?wCsx>̎=y9z4`{/wd|P*}% }ppkukugiv z9g{4g|/A},*}$ͅi~voyk y f*yby_^]^yZ/yU͖KzWQDzL?{H {CN{>|`9f}-4q}.L~D)ֆ~$HU}8~v3׊%~.Ո>)ކ$en`xjgf09av:]Y$YGT_-P1 &K},G+B!(>P683.r$)A$̅|[miEe]Ma| ];XTOuJ1JFxB/ۀ=ҍ 8ŠӁ3Y .)RT$4lņ:i/݅eda\ΗXFhS{Մ(N}JMrFFAŽ=ԂJ8؊>4*~.7)5%)wkʛdhnd`rZ \2DW#ORٔNRG%IÅE^!A=jG=28J3f$.)O[%/kڍ#gd _J[SV̕ R]#M!sHᑮD@tH<`h83鉂j.j*%6vjVcfϙHc ̏^ZxUQR.LߓH2C刚?4U;H7Ԋ_ 3Ä/>*wEB%ԁ2i8=ei!b$#]zYU7uPTL!9GC-ۊ>+:6X7^2戹 .<*2܂%h'Bd4a'\\ݗN.XUTlL^O˔K`ߏF̑=Bn}>0(9562X-χ=)L$Dg \cǙ`4*0\ +}W/S-AO JܒFAƏӎw=w*t9:AU5щˈ1:, (Ņt$MigRehIa,iL^/jMZ]QkQV\l]RnJ oEϖq]A~^rqV)vrQțspMt9I*u D˕v(@Y]wE;Ix{6?vLHЗWwD<,w@"x;*y6` z1}{,#|(HS}N#~~hӣud뢒u`ԡdv]"voYvU(kwIQswLĘxdHyxD#y?ezP;q{6>|1|-}](<}#p~h xd#x`x\f4yXyYTyP zLYYzHzCʔ{j?n{;k|g69}B1}, ~g'߈[~#3agp{c[{_C{\0{X8|TJ~|/P|rK|G"|CV*}%?(0}e:}6d~t16~,I(R#Sf2c|~_~[۞~Wڜ~Sɛ)~O2~Ka~G~B~>ϑ~:5%1,|Ҁ%'BH#Cpf.Vb__j;[pW|J\SSRO$JїYFBt>p:o50π,\B( g#tHPegDb\ _Ʉ[VdW#R욎NyJ>NEPAY>hR:-R 5Ԍ`1{,8(#rda֟2^hZ~ JVyRGUM☐IE3+AW;=@9H5`]0ފw,p၇(#̅d ga?z]"Y?UwQ(M(UNHևD @%<"99*J5KK1n|,,Y(Cx#څcI `*\ԝێKXwXTݛ=PÙLm.HKC @ <*8kՅt5:B1Ճ,(b=#†=9b?Փ_+[睧WK}T {PUK>G;CP?_;x ?7Ɇ4R0/7,] (6p#⁙a2Y^-=ZޝwW,S9_O; JFᖲB):>&:ʑ6Ɉ30K<+ʈք'd#߂9`)>]?mZTlVFRhܕINtJHLF,A;r=L:6I؉}3,-/:o+3&"})ah ^t8hZ˩iW_jTCAkPڣlM+mI;o'EE0p`A[q=jsG92,t2ڑ>v-x*)my$芣{ P{|ta j^Hkq[=lEWm%TnPnLBoHԞ qDΛr @Qsd<喫t7vR2w.yP)z%y{ pZ} `mS^8m[qnWoETUp PpLqHrDrs@t3|@.|*Y}&~B!~`Sx]BxxYxV1xRy'O8yKeyGjzdCbz?t{\;R{7|3 }j.Í}*~x&  ! `({\n{bYl{NU!{Rkg{N؟{Jq|3F|pB|?D};H}_7a}2~.~*]X&!_c~\~TY;|~!U~5R~~:~75M2͏s.b*>-%܀`!^\=XU]LQMIۀF B>@:kp7p2f.u*&&!~w!هu^+Ą[::XU QOmM\ItE˂Ai=ʖR:]<6ˑ2[.*d&0P!]zp[߇DX8[TˆPǠ01L󞇅HᜌjD횩@՘=Dp96 2P.*ǵf&;!~\ZWmW[S{PPL-`NH/]DO @Po<[9F5ۑ2.ʂd*{&R"2E.\JDY@VRסE7O=‹sKw:G7C!?Z<:)%8(52z2>v.U6*y&j"M9[>xX UBR (1N|5JĞ;FҜ78CE?M;;74n&1r-d *.& Q"7hZ;VWTǢ~QB7MJF%;BVx>hU:̖7Y3rd1-k)}ك%.!yYB9bc|dc7f $gǁi@ʅj}.ltmflo'cpZroQsIu?Aw6 yx^ot`+acVHe fЅkhJ\i|k-tlk{n[bpZsqʂQsn+Hu ?wnq5y]"ȴB^΍+`xbH d 0 e݉ge_hE{jpsxljmbBoYYq6dQ2r탿H`t>v͂l5xƻ[ʳ]_t`@aUGc"f_e|fh1{=irk_jVmran‡EYpQPrt^Gt4kb-cWewwgo~hܕVgLj^lnaUnL)oCTq:Rtj^1uvs/WY.[wx#]e8=_]̐1abcTd֝vfinhIafdj"^kT5mK]oBq29^B`!:a/}bc tejlgQdiC$\Ok.RlsIo-f@qc\7zta .jv·nb`doZdofphLqMj!qkَHrmZsHn|spthtqkusycvytZwmv?R@xRwIy1yx>{%z5T|L|Sl:hOvmiѭmkbnl̝onJpoqSp'rrB|rst#stktv"c5uwHZvxQwyI7x|{A>zz|l5o{}j'm~rk.nl-oʤm9pٜnMqoVs p;sq#t|.rusrw k>sxbtyZEuzQw {8Hx|F>z(}>5q{r~D hiy~ 5V{+~sfhx6gxKhx$j;y\kylzmzmoz{[p!{Ws qH{jrg|Ras|Yt}dPAv0}Gw`~> y~5WzYd}f*}Wgr}&@h}Hj<}ak}#l}ނn~ zo$~@rpu~ciq~as$~Xt OuQGYw> y$5zcT dz=n>?roilqa rXMtOu}GvӀ=x耲4zb6lcd*fۙFh SijЁl~ixvjinlbfUuMvYDw<4yWf3ez dnƫgeKgh iQQk{…lQ}mՆuncʏWdҦ\fhGwiojٜ-glc\`4mWohOupGDrf?;ts6v.Mxx]浡_7`=bhQd,цf~g5viYnjhvfkb_Em6VoNpFpr8>at^k5vb-fxڇubu^duesvgviPvjwilt~wmvxm{,n{W7o{q{ƒq||r|`tsk|lth|euk} ]$vk}Tww}~Kxr~CyD ;m{ 3|%ioj|~UklmmnTkpNp_{qzt$rlcsdStz\"uSwKLxC y;$zÀ 2{&iJPjik}ߘnl#m*o#ZpzqsuqԂ_krct[uOS`vmJwgBx2:zY1{XŬh$2?iO*gj}Ek‡m 4nPoC&z1pKrq20jrZc>s [DtÃSv0JwJBqx`e:5y1z݁lg٥theijҐFl6m=nyoqpjSqƇBbs`ZtERuIv؄`Aw8y50Fz|f1YgzhBjks l׍pmxoq?oiq9b rZOs͇QtㆎHv @\w38sye/z]YeR?uቚ6x B.yfbcJd::fm΋0gri|Djԟtgllgm9dn]p MUqQMlrEt/|=u5xm-y9aԳ|bĘ,d/!3e«o0gT΃h'{oj_os|kkl؝cnC\oTqL|reDsHz-mysszonkzp\dzr\{#sU{u:M6{vET|>xw;2}y2~o{@vdgM|vhw:i㗷wk3x lxqmMxo%zypks:yfqkyrdztl\]zuT+zwHL{`xD{z:}b{L2Q~|tkulum*vnvpwFq wrzPxsrxsskTxucyRvT[ywuSzoxJzzBB{v{o:}|(2A}}:rp|sYqKsrtruasyv"t"\vtzwurwv_kHww=cOxxP[yybwzM[4xzRyv{Jz"|Az}:1|M}1}~sozspzNqWzHr2z|szszt{;xu,{qxu{j vp|7b9wi|wZDx7|R.y}Iy~Ajz|~9|~1|nc8o>~ԛ6p~Fq~t8q~]/r~Y;s~xx tG~pt~iu~av~Yw~Q\x/ILyjAzM9n{1|ϧm9n.^oēp~qr~rÁwspTt)zhuAav Y=w*Qx5Hy"@z 8{_0| n6lm횃nco&ap17qIc}qvrфos;h+t|`vu3XvPwtHx5@Sy8.z}0{HkNl Dm,GnNodp}LqGavr-nrgvsI_u}X:v+PCwOAGxT?yG7zl/S{eb=j ⟣k7lSrmn o|pu]qmrgfsi_AtWuOQvFw>x6z.{ciJjqAkl’̊m^o4g{p0tqm qߌer̋v^sWuNv%F{aC7|_;/?|.pp㆕LqƅÎerOs€tgTytrukv1adv]owɂxUx%N7yF~zR>~{ q6{ρ+/|Ϡo%opۉqω9rxsxtELqujudv`n\wPUgx:,MyEy+?[z~}6E{\.[|n3ibo 3pq+r 8sdxXsq[tojPu cfu؇\XvІU:wLxxDyBY=yq5{z.{؁mhnboDep[A"q[%~rtws psߌi|tbu\[vD>T2w0 LdwDxʅ<0y5z\-{̂?RlљӘmano p?}q̒vr~osT#hrtat؍0ZuSvKwVCxJW;y95)z,-{ޝl4ܗm?mқop^}q6uqnrԓrgis`~teYuQRv1 Jw)CxxnOzorpkq{dNrz]nsZ0VtHbOu9Hv<@wh9x2_zۈa+'|hߡombt;id eljg gh{Vj5zIksIHll>n7ePo^~q`W~sP~~tI~v;A~w8Gy0=s{*)}f}h}iI_~j~@k瀽~MmIy~Lnrr~Uok~Ype~Dr!^@~,sWQ~)tOe~avG~{w@~y^7z/|$R| k#e|Fl9|{m|n|o:}Up"yp}gqr}qrk}os%d}{t>]}uueV}vN}xF~ yb?~/z7g{/?|zwofzp#{p{fq>{rc|Vsy|srJ|tk~|udx|vu]h|wYU}xjN,}ayFC}z>}{7M~|k/W}[xty{u'ru=kvTdvʍ^!wv9Wx!Pxډ,HyAz&:z҅N3{,9|pq >;qər˘B(sxt_qyu2juܒ6cvi]w Vw Oxi1Hy5cA@y͈:z}2{˄+|GCo p}(qPWr"~ swxt 3ptNiunxbv\vUwYmNxEGx֋9@yd9FzX2s{Ʌ+b|oVQoޥpv2qz|rtvnsotUhuauZv\:Tw MwfFx?y8z^&1{*}*n9o:coۧr+pڥ({quwsnsgt`umYvSv”yd7z`l1"|H*9}bcHeKf|h~}y62z.{Qjklm/n{Vou<1pnqh/ra^sZu S~vMLwDy =z26u{X.7||~Lnٓv~so~pi~qq{Mjrt\sKn}Ath ta-~vZJ~vS5~wKyDi2zG<A{C5|-}#|sa}#s}lt}t}uz(~Kus~Hv6m~Xvg8~Ow`~]xY~YxR~yK4~zC~{`OPz}\H~A~>:q~u3`~,~ӖxSxۊJyA0y͂}=zwJw\|dxZvuy oydhyƊbz[zUwzO){v~Gs|@W|8|2g}ق+*~XuLuДˆ=vhwj{wʑGux1n[xԎgyKayZz5TzzNkz\F{B?|387|2}*~EKtu(Tu—vzqw44t$wmUx[Zfxސ`(y=mYySz M\zOF {U?:{_7|q1d}zq*~Ft Bt%umduyXv&swxl`wex{_ xQXyT]RyTLOz-NE {>?{7|QI1}~\*Y~@`s t`tw~JuNxNvrwRktwJdx!G^x?Wy QyzKLyYD!zl=y{{|6|70Z}c)~vf7s!sm:sݥQ}8t(w>uqv jw?cwњz]xY)VxՕPyEJUytCcz<{[6?|)/}J)7~+b̆cʆge\:f~OhMx+ir5k kflrdm^׃}oIX˂pROrKY4t)Du=сwe5y.z.fgЄhփNj}}kRw΄Glqrmk1od5p4^WqXBrQtkJduC]wj<>x4āz3-Y{\jh#kDl9܃mmA} \nMwMoWp΂p[jqgdbori]sWtPov INwmBz+x;Ȁy4A&{-O|=2ne9o3oȂEp|\qLvrpł1rjsdLt}]ʁ@uW6vP[wI!xAy;z3{,Ā|ӓ6rsā sp8s{Otzuouo؁1uiǁvVcw ]PwVxO€yOHzHA~q{:Ph|3 |,_z}~ivvw'wbzVwtɀux nVxhRyb8y\0yUЀ3z{O4{GD{@;|o9€.}2\}+8~*k~zˋ~z~z 4zyizs{m{eg{a|[|EU8|~Nf|G+}i?}9 ~.2<~+~|~F}v~:~~R~R~9x~~3r5~~ClK~~Tf ~i`<~ZS~TQ{~M~FU$?lE8b1}+& | |}1~}{x}́r0~ hl9~+DfY~Z`B~Z<~T ~ڀMF(g?I8z1e+6̀<{n{|x~|x}rD}ql$}Of}_}ӃY~ S~GM}~@F!~.?H!8V1d^*zы{M{Ɖ~{|.xq|zyr!|k|Ye}/_}@Yw}{mSu}ƄMU~ E~o>~8~]17*FW$z̉Dz{}{xw{&qK|dXj|sd|^d|܈Xj}Rs}GL]}E ~ >V~\87~_0* @1yr7+yz[|zv{^p{j8{d|K]|nvW|6Q|ՈK}D?}=~6~`j0~B)9;3x˘Ň!yVy7{zZuzӓo{bpi<{c {鏩\|CV|KP| J|jC}U2=}dž6.~/~Ą){;܋xSڅx:{y"z}y̙tzLnz hI{,Qb{[{ʑU{/O|9JI|hVB}<}T5}/j~)Fxwآx1DxyhyA$syћ^mzgYz՗a{@Z{T{N{H|-PA|̋};f}S5}ه.~ޅ(`$wY׃w~x Dx`x8rya6lz=ftz`#zY{QS{YM{ʑG|XA|:}8$4}͉).d~("揙bӊUd >e^Nfywh-t 0imjgՇlNam[o(UpO;r`HtB,su;w<4zx. Nzu$ftgqch~3.ixksQelhmFmgQMna)o[qOTnrNt9GÃuA w7:x3ق_y-K{dWj"qhj^3k}چlx[mrɆlolpfąq`rZqsITztNhuGw7@7x~9Ky3?z,Ӂ|2nOnkop}ʅpxكv>RvÁ|8t|2R3}Q,.}֋:y=ỳyzzu!z(o1zaizcꂀ{^5\{sX9:{R|K|sDɁ}>D}h7a}1ρ~'+~rK8~*΁}}zzE}tQ }enP}zh}c}]a}W{~Qu~K?~8D0~=~76h~0C *DTŁ/z&&tEVn _h7bЁ9\\"NW.+QFKC='=L0(6ځ0 *Ih3rỳrsmăh1kbQ\{VePJCځ=#߁6π߁H0K* JaEzGЈiy{sɀ(Rm^g3Pa=[Ѐ0VPZJ'iCTW/u__)Zc}~ |}~fuw~{rl-Xf ?`dYXqTLVKNKHLA;`ڄ5.>"(P1|}m|z}ɔv~,nq~9kG~e~؏_- wY -SFM%G~Ah:F4S؅.e/(WVƅ}|倅|[{?}Bu}jo~ jH~td*~^<~vX~ȏRB~L~ŌOF~o@-9v3#-'NTk|0N|sz|ŝtt}8`n}iL~c=~54]J~txW#~QF~K~E~W?D~94C3;F-x$'whb{~5{`x|BMsg|ȟZm}7lha}~bW}z\V~8zV(~hsPX~p#J~iD~iN>~&8.Y2,E&8b%d~eWyftshojPiiŠjclA]mX0/oR.pLIw87惋x0D6|d(}Nu{Ƈu|Xuw vqJvul vfqwwa#w[xUυ+yOyI{OzSB{.NA(NTyG{Ҕ4wq-l8Kfu`ق@[6@[UX'Oف׊J~QEU>8e3.8-(3Y?zbu4pdk+ܔte‚!_ZHDTjێNށ IehC>!8?͆2҅s-Kǃ'݀i~"y~tSoOKj%ydρ_Y[.SMxH;Bu=7 1-&e'|YxNWs^fnG䝋i'ce^6vXuR3M _GBY<(i7r1h,倚*'1c8}d:xʑZeit#nfoZh+jiej_ꌲlFZRmToOppI?rQBWt(fk}&gWxfhts\injil.dimQ_nYoSqNerHitAu;wD50x08z*7|(ސi|{jxksŎ4lnmindA&o^ЋOpYWaqSprMӈRt0GއIuA6+w:+Tx{4Moy/f{M*d|R m%|^mxns+ovnp9ij5pdvq^rYsStMxuGw @x]9…y3.z.̓'{(#}$q|XOqhwbqrr^r~m\sh%Xsbtk]u"X,uR^vL݇awFx?yy9z3{.|( } -t{tvu/q~uliugHuvub8w \܉)wWyxARxLe)yKFZ7z?{ 9̄b{3|~.e}Q(`~ߋxZz$xVuMxspxkUexfsy?aI y\zWzQwNzK߆{CF{?|k9;|3u}~.~(D~LE|4zX{uPj{p'{j{eԉ|"`͈o|b[|VS]|P}Kp1}"E˅}M?e}9z*~D3z~.(^~ztډ7o5)jeA~`ZŇx~U{ P-a~J셳~Ed*~?W9.3Y^-'%~yQtoJej$V%d_nsZT{TOJg[EՀ>\8߃Ӏ32p-c''|LxptRCniLJąRd[|^ևYjT Nㅑ;ID^>ȁ8Ã638-aB'Q{w񇶊Osmnt*hڇGc]mXBS?ÆNQ`IC<=ꃈI8J2 -Yk'l{I_w }r㍩mmŌhQ b膈D]d$_WډRmrMDHMzC$=t8G2Zw ,߂,'C~KzvHqw`lLEgN+b#\ō]WMQ92LVĉGFvZD|UYOnJzEL@g;4m6hj0+ՄR&ȁjvh(rDZSmυi d@_R1VZTNǓ IaDe厪?)X_:jb;56 {0,oV']ɃH|c|wJdzrGwen @giX>hhdi` kZ͏leUmPn$o?KBpE׊r?>VtK9fNu3-w/ y)|r{z镬f|vpgjqMhmOih֒jjd`Yl8_L"m_Z:nU oOqJ+rDt3>߇u8wf2rx.}xz(B|z#iv)j{r-kmDl|hrmd/n^ooYlpTHqOh rJ.t9Db(u>w 7"x1y.+{(0|ylumr nmvGoKhpcp^ÎqYrTlssO&^tIފuD'w>A1xD6ꆅy1&z-|,()}az'puԑqqPOqlqr3g돻rc%su^)t2YtTuNvIrwCʈixv= y6Mz1%R{-|'삭}zst+uztXpotlu"g.ubm#v]#vXVwLSbwNRqxH‰?y?C'yX ySzFMzH zC+{l<|L7|1R}x,~2&΂~xޏ!{bt!{"oh{jǎ{Ge{\a6{\X{WU2|R[T|_M8|H%|B釕|<}7~1~,~&mx:s#s^~o 4~ej[k~je~N`M~U[a~oV~mQ~L~G%~BqQ~<^l6ЅT1],6&hwCs ҂ntidʌQ_Ӌ7Z UhPKшFۀZB 5< 26n1〘,@e&v"rVK^ni=ndo`_S|Z"U cOBK6eF=A<6ρ81D"+ȃf&nCu.qmchc֋^ YxK|TcO5DJ'ENA\\j;oe6C!1Ɂ,0$&/t%plΌFg^tb؋ ]Њ!X@SjNdID@^<6G;0ԃ+&USsƋrokmN f aኡ]M3WljRĉ&#M#HȈD?Me:5or0sՃz+h"u&9KUrK#n'j=e~`Jq\$TVgQL_GԇC(>p9ᅕQ53o/N*Ӄ& FqKm`ۙ idz:7_[>{V)5QА}K܈G!FLBAq=8Z4^/rJ?+%&q͂qp$l8&h+c_9Zg~UXP?;K;F/sA[npQo⁂944y /n*΄f%d5n k$gIP\b^9솃YlD%T"OڍL&JIF%Bf{>@9~3u4D`/bb*qr%Sc~mƑvj%*kfLÊa5]OXɉSǍĈ2OJ=E݊ A|=?C945e/=N6*S%`Fl㏫iBAeMY`Ə\g,WΎ}RNSӊI#E ȇ@<]V84S.υN* %[ kאh(e1d8>_Ǐa[xW[R0WMHӋvD9?ډ;+7 3iƄ.5)ф%$*jpg"#c'•^ЏxZ8V*$QeNg<9 ,6F01hC-i)-x$# m;L1s 8t3[vx.x)zJ$х{lOg*hpFh!d|3i0`jQ\JklXlTCmOޕynKLpFqvB[s=Wt7㋧vN2w. y){0$Ʉ|k{jh;ajd8k`l\smXnTWoOpKNqFxsBtwz-{w*r}%Ąb~l(sogɚscUt_kt[WMuWKuSkvBN%vJ(wE%xA@ayiFB0>׌;6K#1͈/-9K($SDf%cm)_承[WSh+NχEJƆEBN>wo:H6( 2#- (N:$eޖ6b&_$Z֔MVՓ̋R䊾NIѐEPj0AO؇ =Eg 9i5$1䇭S,Ƃ(\$\Nd͖pialڑ^?YSUQӒM^whIpDbW@׉nBp>q:nsj4uF/7v+kRלslNxmJϘo)Fp[Bq>UsS9t4iv/Ƌx+#7yg'E{"}*cjxaEk4^ lZtlV˝smRڛnNoJ.pF\fqB4JsR>+t9@v84Eew/x+%z,'|Y"}cmJaNm]ڟn}Z>Oo;VpRpNOqJrrF sBt=ґv90\wo4| x/[y+]z(m|#p~ dաjpQaZp]G7q*Y̝qVrtR:sNBsJ"tEfuAdv=uw9x4y/-z+{(@T}$'~dlsT`ԟns\sYBtXUytQϙuoMv&IvEw}Atx?= y!9z4W{/{+j|(j8~*# cvf`vv\vXlvTwXQUiwMxZIU#xE&yqA!z= z8{[4gv|C/j}*}'n~#|cDy_&y{[Ky|XQyTmyPzIL.zH敻{D{a@G{<Аn|38Ҏr|3}/~+(o~'Uq#eby|_Y|[|pX'|TR|P|Lr}Hd]}+D-}S@Q}'݆#7a^;[]WYi@S/OK_KG=ҁC=f?Oq6;Ï8 3Q/U!+ ɀ}'{#6L`SE&]>ZC}VŚSNJƖ,FB_v>K;Ij7֍w13/끆+A1'#OH_p\ɉY툯UۙR-N3h'J džwE{Aj>":P7 H33y/{ʂ+#G'0#^;\ nnXњU_QVVqMu1IOEO_3A%b=S9=h6q+U3!R/d +A']ف#][2 Wr-T%1/P&OL NHVDMv@zl<ϑ798252F.͉*?'|\#oF\ٛ픷ZV9SU NO2KG䕇CF?ђ<"8,5 2҅.5Ą*hP'#[ۛYח1VRtNۓK'ΑG-XC6E?;]? 7664a5`1E-)Ɉw'+3#c邅]eZhcfVgSʤhPiMwkI瞡lGF#vmBNHn>p:Rr,6Ⓘs1&u,(wB(^1x${> }\̩jhcZEi(WrjTkP1l(M)&m*I nOEoAޙp>r!:_ s5ruS1 w,xg(iy$| tj}\kjZ&kW:lWT5]m5P١sn"MEoItvpEq/ArF=ח-s:u 5uv1 x,ǍyN(}z%;C| 5~-\3 mY2nWJmnT olPp/M"qIhqErAs=u 9Yv\5w15;y,[z+({=%}=!i~]Fp_YIpVq&SqP+0r}LWs.I ZtE*tA=u=)fv9ɔw5x1/ z*,ۍ5{(c{%}"])sBYѤjsiVB-sRjt<\{9/|25e|1!{}-~(;~&"#3[V|@X~|UKv{Q|NA|9K:|qG`|C|? }<) }_8}53~0@~,㌪(Ћl% !qwZvW~T֠Qp MꝞJCvFsCWB~->;;8s4ːA0獬,ڌ1(ኢu&ʀX#JYGŅGWvTL;Pф^Mr]-IۃEߚBTT>{:k7Rd40ōzj,ۋ؁(_,&Mʀ"ހXA]V=SzꇤPu!LIQE)ׅAd;Q=}r:$a&7 030֍{U- 1(<&O"πX ۋUË(RO48K՜݉\HGsDx@Ø*eŘ2;7&4?d1i⇪.m`+M'Q@%v}"O;i_rjealk/clelgȖmi=nkeLosl|^p8nsqWpkrqcAssXutOw1vF[xwqMfrʚh siltnjuqe6t8-;vPl_vmUaѩmdnfohgp2i銞pk&qm&yrQnq~s>pHi thqaDu$sW)vuNxTvEyxP;zz3 |{jTexjgkhlj\*ml nmoo pbpny>q4qqr4s,h~swt`tqvVv,wlNwxECxz3<z-{3{q|h*jhkƧim knP,l?ombpnhqoesxpatpqquSgrv`OswVuxMuwz,Dxd{V< y|3D{$}fogp!hq~iSr`>jsClt-DmEuYn]ux^otvpEpwh!qx_ryUu*zMv{zDKx|k;yw}P35z~2du6eBub!fu՝gvxi`wSjwlxNmAxwncyroozgq.z^r{ZU~t|Lv|Dw}p;y~36z~׳;brzczZ#ezLfrzh z㎷i{P!j{@l+|w]m[|[oJn|fvp} ^q}DUPs}Lu~-D)w-~;Vx 2zxyE`b!6?c~~e ~f~̍h~i~k'3vldQnmPf6oc^qCTsXLSuCv:x2z:$_~`b\Nd }eÂȍggh}jK`vk9nmen]peNTrƁRKt-CPv|:x2Uyǰ^6V_aAZc wd֌ftg }Kivuej̅1mmlUe nL"]:omTr$ KdtBuςM:yws2'ys ]^^x`8!bғc؊(eJXg.|htj!8lkUdom\o#SqK=s2OBt9@v낝0xʁϯ*[ؓ]xH4_2/a/b|d)f2{hLs7Q5u-wWV`JXnZJC\Tb^zÅ`2}b\rudmveeg|^aiVknN9n-Ep=lr5#up,wćRo_p$apcǝqeqgrims/k~slvtjn;nuJog0uq_VvsDUBx`tLyvCzx<;8{y2p|{mue.mfnh2o|iǕDpQklqm3qni~krov|sJqnt(rftt^uuTwwL4xxCyy;6{{h2w|4|kSjkk3llommnnBop?pqR}qrnv*rQsn]s(tf,t%v^wkt^lЏW,n~OpFr? t7.v .x„[G9]w._7x`ޡ7db: dK|\f$tglie)j甍]lM6VVnN'pF rЋU>tÉ36 v"..xte[H\b[^9%Z`Fbcq{{e sgkhd$j_\kԔUZm(M4pCEKr=9t5%vR-(x=Z2[鯚#]r4_O*aLcOzwdrfjh^ciy[k_zTcm?LCoDGr1as{Z1t|"Qw|Ix;}]Aye}9z~k1a{~g}h}%i|4k|8lm|놅m|[n}3xo}wqpi}ixq}ass}Yt[~Pvj~Hyw~@{y(8zCm0{~fhKghˁ,jk}lۀ~mw]n뀂pDoÀ~hqYarZ!Y:sPauǀ8Hw;M@xP8Ay݀M0!zڀ? e6]fV9g*i(6j l9}mvn.o[o!Igpl`jqiXs&Ou5Gv?wǁ7y 60zRd$efӉh@>ik4};l_Vum|nn$g#o~_qDX r*OtG5uƃU?ow6x/uzI c2=dd&pe\gWk[h猃jl|ku;lӉmmf}oH_pć/Wr1FN{sVFuX>w6x.zˤAbDcdfuҊh biw|jRtl&mm?en^WpVqINsF:uG>pv6xW.yЂodaebdeOgCuh}{j=skikldn ]]ovUpcMrFCt9>v6x{.jy`a@KcWXd؈tf/dh3yitrojǓjkCcrmwi\An厃Tp_M!rErt=v* 6jwl.y*m_ѥkZaXbyZ%di]eʝpgyhqXj0~ikbdbXlI[;na SoL-rIDtX}7{}/|}mwmw%nwϐoxpxc+qx|Ur|y*ursyn|sz6g"tz_iuzWv{lNx|@G y|?Nz{}\7{e}/|e~?k|ml|Omh{nk{o|kp|{q|ctr+|mr}fs}^t}3WSv}KNlw}Fy~F>z~7'{ ~/&|D~jaLlkSlU0Kmrnozptqfmres&^MtPaVu}:N!w]F]x>y7z.{顳i6j*.kIilx)m 9rv花2?xM+ zw/y_yayckyez fȂ4z[hz{:zjszknl{ le{.n_B{FpLX{jqOT|sG}Yun?}w:7~y/;zѡ)wdweӔtx g/+xhxjwy>kzylsyn@l`z oezNp^zxrWY{tN|AuF|w4?P}ox7l~!z>/x~{ɠfuhPvi vqk vl.Gw~mZxnzx}os'xpl(yqeDyos^;ytpVz uM{w2FB|hx>|y6}{#/~[|osmotGn-towusov.prvqywxr]rwsDl x%t*exu2]xvmVhywwkMf{5xE{y>D|z6}<{.}} srSrbGrrs}st@sut$utxvaulrDvv*kw0vdmww])x_xFUxy Lzz-EZ{o{=|!{6"||.l}}pvߘeqxvגr9ws wPKsw~txxMuTxquyjvKycvz\wzLURx}zLz{Dz|b=H{|5|m}-}-~Ifo{E]p9{ !q{q{~r{1~s{\wtY{qt| jhut|scWv/|[w|Tw|LHy}VDz^}= {6~,5|~-|~nF"oxoZp~q~}]r~vsz~pt1~ilt~bu~[Av~Sw~~KyDgz?<{i5~{-D|(lmn1oۃppo|q"vroMsvhtatHZuSAwKsxDyuŏ6lGmy n{otpыm qer__bscXtxRuIw&Bx3;yy;4?zK,{\izgjfksM.l myo1rpakp'dqό^9rˋwWs PtIvBw;/x4z,{/^hϛOiYjlcm6xnqoljpopcqA]#rI'Vs\kOthHvYAwR:xDž3Py+z:hN hWi{kC~ilwmspn䖐io蔿bp̒\ qӐUrNsGu@w~:x!2yڅ+p{֕ghCLi%!j }Hk֞.vmJTonm?hojap]ZqmTrOMsFu?w&9x2z<*{Wfګ쎑gvM8 x1/z,*B{qk|`i|a6}cg }e}%f}}3hYw}Hio}_k7h}|lbw}on>\U}SoU}FqM0~dsES~uK=hw5ŀx.dGz{d5{=e {{f{hS {i||/kfvn|Slo|pmh|o3b0|p[|r%U+|sL}uhD~Qv=P~x5pz .{{pbh{qa{r[K{tT_| u^K}bvD5}xT<~Ty5Z~z-a|Kwl6wmx8nvxorGybp?{zquziqnzrh@zsaztZ{uS{hwJ|x^C}}yyA{<:{,3|Q-|ܕpҐp΋ qņr~]swtwqu=jucvA]xvW wɂxPWx HyǁAzq;2{D3L{,:|ɀa"o=pߊpq܉W~'rֈwSsӈptoiuc u2\vqxVwSP!x8H?y8hAQz+:Tz(3`{,W|vEntZzoG-Jp$8PqT}rtvs1psi!tb3u[uUvֆOwGx@yӄ9zA2{vb+|^mnl͈oJp]|FqeuurbnsI8gs a&tZu`TvB-NwGXxg@yiz9AzVT2[{4=+ |)!lܙmt^n'ozpstuqړ-mrfsgA` tYtՍSutMtvF]x]?y8z2{+*|;͐lA*lTmnٚypzslqxȈ~7y1*{5*s|AkdClK4~m~|n=xoazrXpkqdry]sCWt%Qt:K>uDw=x 7"y0{q-)|lU}[mi|w^n͠qOp-jq6_cr\r뗪Vsʕ9PtJKuu*Cw]= x؋6zBa0{ه5)N}p`,]aQc[ Hd=,fyg h-s il4jeUlZ_*nYhQoSEq{J-sLB׀u;v4Ix-J!zX<~d^~et~f ~h~_ ixkrQljkme~n^~pPX~qRc~}slJ*ru,Bv;j7x/4|y,{W\}hX}i?}CjN}~kn}}lx&~mq~.nkp~"pe~q^~r_X9}sQ}uIvBqw:yJ4 z,6%{{wlq{m0h{n|n}|ow}pq}Aq|k*}=rdd}3sS^M}5toW}/uQ'}QvH~xA~y.:]zS3{z,E|ypuz;qDzqǂ{rg|{yrv{sp|+t_j|@u+dI|Su]|vW.|wmPz|x|d8|1F}m?*Y~)r%sX9sBtxu$rUvmckvePwc^wшXxmRy,$Ly߅(Ehzs>{7|u1}6*/~:qKrws+}twtՏq,ujvKd=v֋]w^WwQxZKyP Dz={U7Y|*0})}ˌzpuq@rsi|9sY vQt@p*u2iuRc6vb\v獦Vw|Px JxňD z%={S77|0|ヸ)}q\pZ)qcqzrAu!so#trhuKb'u,[}v}~U{wOwIxKCyƉu;z[5}{ч/7}(~o :o~6pNxqOrrsmsft`"u,YluіIShvMwGwAsy;4zߊ4|.};(V~?`SUac;dz>fcuhni{hqqja4l/\mVQQoPbqNGہs@*t9*v3xU,z^Nd(HeHLf:Agy.i[tG jnlgmaabn[p UqO]s3G/t@Zvp9Jw2ily+ׁM{ghji~kynlDs܁mumngoarp[(JrU!seNtF〱vT?ހw8>y 1zc+{4,k^Al[Pm~nqy-oIsj"pmtqgGqa6rZztTMu4Nb6vIFb3w?^x8z$1d{4+#a|Lp}p\~pc~Aq'}~}qx8~rorp sl~sf~t`~urZh~v(S~wMS~xEy7? z'8j<{1"!|**||Pt0|t}'t|}fu/w }uq}vk~ve~)wN`~$xY~@x{Sd~YxL~}yENFz>{v7|31B|*}bzxn{x[|x`{|Yxv$|xpf}y'j}6yd}\y_,}z~X}zR}{ La~{wD~|D>$|7S}T0}*0~Qy|z|Fz|'{N{e|&u{|+os|-|Hi|a|d ||^O|}X>}/}!R}}5K}}[D\~}=~~M7~0]~)-xʀsyLzzzu${o{fii3{vcm{n]|={W|[Q|;K_}n,D~ =i~6~0X )Oϋx xф;Jy0zy6-}ӂ/~P)+~3.uڑ[v{~qw~xswrx^lyfya`yӊZRz-TzN{}I{{RB|xj;}z5}/I~3(~ׁu0u̔}vjw9wqwȑkkxWex_ybY?yŌSvz*MzH{,A|$;V|Ʌ5}m.~0(~ۂ[tu|{uvvpw=6jxdx~U^|yX"ybKR[yˍLz*Gz@{Ԉ:h|I4Q}X.D~+\(6~st$zluKtu㚞opviwcx]}xW yQXyKy Fz??{O9|3}.~S(~҃sk~sy.tysuPnWv.hw#bwљ\{xOV xʔP[yAJyWE#z ?3{9B|މ3L}LJ-U~-' `aЀ!Kc?{du[fNpgj{iGdj^ilXmS*oouMhq1EK~r>3t8vr2s}x-+Qyldxe*CfgzCgu ai2oօji脨kdQm,]niX)eoRoqqLRsD؂t>$vM7`w1yU+Hz܈guh6lizJjt҄4lo'm-in?co[]pnWĂqQ/s(KtD8`v!=bAw7>x1z,*ȁ~{|yk lNm8ynt-no Foi#pc[q]sOrWsQ~tKYv(CÁwB~}{k~w{^{~{Hvy{QpJ{\kHh{e_{`W~|Z|kU|O3|I|BZ};i}5xp~6/en~)Ax~׆H|߁}8{r}~u~'~pY~v~j|~~e ~~_k~~Y~T+.~Nl[~H|~A ;]0C5,Ab/I~(Ӏ\|Ѐ|Ń{(}u}f1o}j!~d~^~LGYZ~m$S~N ~ڀHHmA;*Ѐ5.G(*<{|(z|b+uW|ׅo}(=i}}d}|^X}ɄX}惨S1~$/M~hH~JA :^4j.(Aƒ{?{hz-{tT|-an|h|/c }]r}RW}z:R9}{L}섯G2~4@~̃p:p4UdY.2'Pz }zy&{#sb{.m{\h7|mbY|\|V}QJ}GK}{FW}?~y9~ل 30B-|'сˁy99|yݓ,wz{%r_zm{g| aq|2[|U|mP |J} Eh}1G?g~c9b~Z3_~Q-YYM'Gxę*{yVvyזRq4zhkzf{u`{АZ|.T|i/O#|I|D_|>w}ڇ8~Y2~ʅ^-='~xHzlxΜ1uDyC{pyߘjz}ke{{_{v>Y{ؒS| N&|PH| C_|=U}x7~@28~̆f,/' ~wѢy=x=sxny_izdzg^{"}X{R{哭M4| ~G|J@Bn|v<}7~g=1~݇,l&l`Ƌ`azc>uHdpԉfDkgf_iN`jZ؇AlUXymO腚omJTq+Cgr;T5t5@v/x(KzV8d"~e)yf^u&gp7ikQ3jek`&m ZJnGToO1 qUI]rBDt;Lv`5%x/$y(q0{Ig~nphy&iujpkjQleOn_No1YӅpFTE"qN{sHtBv:[w}6 uy,/ׂz)n{/hkK~/%kz lumonjoqe&p__XqBYr3SistNGtH*muA>w_:{x5A;z /{Q(t|yof}Ά oyp5tpnqilr7d:s^sY >tSmulM^vGwAx:y4z.{(,}Ts3}UsExss tmㄡtzhducou^vYXwRCwM0x:Gz@g{9|B3ځ|-ׁP}'~7܂=z{҂zvznqnzl;zfzaɂ{ \kt{iW#U{Q<|L|4FG|t?͂&}9}4~.*4~(]E`~{~Ev9~q }k}fM }a#}[Ɂ}V}~Q~#K~$E~0?v~9f~3~m-GO'~zЁuρ(pXEkTfep`{Q[$VUցAP{DWK,@%EG?F9'.R3R$L-m'u~:z$tsuǀpaj݄0e3_ȀტZn߃>TւÒւJւEI݁>8΀ށj2,-B'U€}Q&yxTto&jDdxw"^{YrTrTNՀsIn Dkg>%ǃ8F2Ҁ- Q'5|~cxG~ssRniU֋cˀh^/X!RMHC܄=ib8f=f2ԀJ-&`'jn4{}w~=ry~mS~h:Eb]3}W}RjL$GB<܀(729#,ˀ0' Wz~}`\u}q~l~jwg&~Œ@b#\s=VluQKwF]AKN;N6΅1T,"L'6yh}t}OOo}j}Hf~Na$~o[~U"[P&HJEE(@;҈691+&+Mx\|sw|Ϟn} i}se }n`8~]Z~U~ߔDO2}InD5?~:mƊh5'0ۆZ+ɀ &Ȁ6~Na yEbtcZpPdkیfWgX"gbIYi\\jW'lQшmLoxG1q7@tsl:z;uY4rw7.؃y(Ăz} nd@xe?t>fgogk=ifjjwark[lV3n:Qلw8-x3Odz'-{n'||nx1;o=soo }p~j"q/e3q`8rZsU< tcOpu2JavADƅwY>zx8Ӄy3;{-W|'聘}J|t rwrrs mވs{i)@t dOt_CCu@ZuT̆^vO^wbITwDSx>/(z8wx{2݂{-\'|'~}{Ӈv-vvq/v>lvgڇvcUwX^KwY8xvT@yN܅NyIEyCTzr={}7D|:2<|,}&~Lzֆyvyq*ylyg+ybzMz5]ozXXzSp7{VN0{Hڄr{C|=|8}2l~-~'sz}ul\}Lp|k:} f|a}"\T}HW}bR}Mzn}H\}C}=R1~|7~2n ,{K&܁y2Bft̅pMWkC}Nf!sa$[ҀV愕QބELքG⃧Bd<݂711z,R&x6t 8p+kgtf:`ƒ[xV!8\PƒK胎G@>gB^*h&Gc\e^I/{Y|SNT㉉IYWDT0?:50q4+QQ&$%otOp KNkcf䂆bK]ƏXYώRނYMY#HjnC>‡9ҁd4ҁzI/́R#*5&sBϚnӁ~jQޗea?A\\v WR}*LryGGB"=_9x4]Zp/M*2%Krkm{i{d]`>[ɂ"OV=Q(IKSXFbA΍@<݁j9M4ч0+h&KwĔaSshben{cj!eefah\ЎiwWjR{l>M]mH oCqj>.0s83u2;wo,̈́ryK'C{=vjdGrN#eOnxfigeHi#aj}[kVmQ׌nILoGqjBɈ1s>uA8Յw2x-Yzc(7|+ugrqhZn&MivȉjeMk`ˎ0l[č@mVSnQuWpLx0q~GrBVt=Pv8fx)1y,z'8|uG`jqkn/.lti܎~mQe9n2`no[pVZpQ#qL/s=G8stAAu=Kw8Wy,1zP,N{'(l} vCnmqnm(goxhԍp)d6#p_tqZ͋rvUΊsNPt1KuFv5AmwUy.byb]%yXމmzTztOMHzJq{:E|{@}{;>6|5u}u0ԃ}+Ă~&82s |o>!|ejҋ!|*f2t|La|S\ԉ|{X.|Sdb|N}Iχ&}/E w}P@!}~:ۄ~C5L~0[~+&$G%傄ry;nzjbune]a4H\q NW~҂>9*4/8>*hȀ%CPo؈dl y|h3cA<_Z+U'MVPGKAk FۅCBB5v=߄9(*4J/!*&d%A)n󇥏!kagb~]~YPP#TN$OxUJq.yE̅bAXI*0Ѓo%ƁV(k͆Ĝ0gyc_Kn[ VچuR!CLlGͅΏCE6 >̄:V͊63 #.*.%5q*t:!v6 x@1y,7S{W'^|njjgkRg#lCc5m^n ZnUoQedu:Aw5Oxy60jMz^+,{'P}Uomjon}fio.bo^>0pZ7qoUurOP%s+LtGFuBڊv4>w\:oy47z40D{4+m|0%K}o`qUjbqeߒ'r#a/r]fsPYo}sU YtPjuoKv0G"[vBx=͈x9‡$zU4A{>/.(|1)؄=}%~.n|titduu(`u\ޏuX׎v{TwOwKYx:(62:1-it(уʁ$KhO5dÍ a(\ŌYXT9OӉKUBFqtB5}>u:Ƅ6n2$̃-ăN):M$g_cʐ_쌦[Ȍ,WSmVNɊJR'EwAc=E79.6'G1^&-2ƃ6(܃Q$|uf|`bi^ߌO]ZӋߒVsRN ILDۉa@wv<:)wu6myA2z.1{)2|$}gqcdvq`_q[wr`WsSړqsO˒tvKnu،w:qx6ˉ.zm2{-|j(a}e#؄ ~igtSbtf^GVtZz_uVݔ!uS`vORvJkwjFwBox>NSy_:;z%5ʼn>{1*|^,}7(*n~#~f+Mwb8w^wZkrxVvxQRJxNy&JzyFz B Zz>{ 9|{5|1 }w,~(m~$ReX{aSz]zZ*zVN{Rl{CN'{I{{EX| A|W=|9}5|~0뇸~r,_~(#f[#Ȅ6d'~6a}]@}Yē;}Uc}Qܑs}M(~I^ ~ D~A~2=R5~P9~|5)40,(g$mcH`:]UYvЀUzQ_MӀHŀVD`.@Y<Ƌ95E%0'.,U#2(#̓߀b`>\.XؒcT瑟PLL]HCcP?܌)Ʌ:Ŋ7$ 4fA/񆮂+م'ۄd#`_]SY%V51RDsKNN̋lJ̊hEA =ʋ}:`J6{3t_/q+s'q#9_b_\ X鑢U3lQydWM1IcE/@=q9mL5ڈy3f/{9+ (#7^f"[(_W]TSΓP,eLǏvH̏Deݎj@q;xs7g7u&3!wQ/ay+ވz'r| #i}t_u,;v\7w3‹yr/z+;{'^}0#4 ~J`:p\_fq4XqU&Tr,QrNuXsJtWF[u,Bu>6v;?x7Ix3Nz/{*̈O|&φ}"Å(~_7t[tWۛtKT1tQcuMNuJI\vF9w>Bfw>4x:yh6z=2^{.|*݈0}'$~s#^^뛘w8[`w)WWw;T<wPwMNxZIxEpyYAy=\zc:\z6{2$|/}+%~c&~# 5^-zkZazӐ;a28n4ы32 .,с*e%$&#%^zZo8WT[Q@UMB;J[FB@g>3:ˎ7r^41I1ۂ. qT*^:&vET"v=YP)VmSPn#L<IQ-:Eu\AΈ=:6֍A3r1#Ƀ-ψ]9*,s&Å"ꄖXm?URҏOL,HDĒ@֑Ȋ<␛9a6?2%3z0ʅ -8_*)>&^Ă}# MW\)TǗYRCN KWG̓D b@ȍ.<8$y572vp609XD-)G)农N&Z]#PWXOc[VdZRͤeO`fL̠YgIJi$FwWjBƚJl? >m;o58Bq 4{:r0uK,zwD(|y&$‰{ _|Xj7eV(fS?gPhM j(IkLF&lBkm>oE;&p7gr3tO0}v,~x_(z${ }XzhrUi0SdjP~kM/l&Iǝm9F+*naBSTo>}p:VrC7s3u0Lw,PyP(͊rz$؈|^ 톼}W̤kUkSl[P m;L!n1IJo'Fp3B=qD>R rV:”s7ku63.v0x,z.)4{%vh} ! ~_X9nU1nZRwnOEoLopyISqTEȚrAAOs8>%t1:_uW7@Iv3~w0|y,{(Ɗ |@%?}!Yb~Xۢ>pU|QqRUq|NٞrKrI?sEtSAu,="v:p$v7x3oy0;z,{)}%/~3!RNX^ysT㠯sQYtN(vtKlu#HuE9vqAmkw-=w:#x6둧y3jzh0yX{,݋|)K}%*~"LWvTvQ3%vNw7K=wHYLxDx@y,=.Wy9דdzO6Oz3T4{0|}-F})~%ňi!ĆW GyT*syQ/}yNyJz,G˙zD72z@{2<{9q {6^|t3$|0%~,~)/b%'Z!TVW|S|P|M|J(|Gp|CЗ}%@`}J;&GY8n5Ug2uN/Ì,q>) %o"DP\TrxRsOCLeI(BE܄[Bk>Z҃:9&7U4IK1׎:/+ׁQ) s %"e:SQYCNVK4HS1DAY%=: . 6BH4%B1N,/Pv,5 (Ɓ%!+!p[R PY MԜ5QJƛGDL)@×5s=9d66RW 3.0".+)QW%y!хQWO_ \LoJFԙC@.5j20m0*..0+j (j%w" PNp璹L ߑI0֐FcB̘lB?_&+;8H5s2_F /-ԅ*('񈪃%.9!OHh&\ 6h^i\a7jx-U rKyL?t#zCu{!:w|.2yw}Kt^dr_rڣaKshbtdtˍf,uogv<~ivvjwn:;v31x% XYŠ[A]U9t_ONaW]c({dڃt fwplh\djax[l RoDJyqB3s69u1w!Vԧ4X;i)Z1%)\B^HЊ`n@bB{4csTekdgcri[SkЄ9RnJBpAr΂9ud1w1U+wWY嘺[+_]H_~)FaiJzmc4trdjgbhyZk/wRPnvITp0o@rry8t0&w _S񖎥U;XY`\$; ^g(N`]y~bDqdif+b hBZFjPm+^Huo?q7et-.v]S%UV֘Y:_[F]u]4_zx`aazpmc)heAna$g|YmiȊPl1HnЇ>qj36sDŽ-Gv"*R<^SVXG @ZiN\ ^wB`oIbqYgdxU`0fяEXi,4Ol(GvnQ?Kp7sJ.u|QS''UPƔzWxō"Y[~ ]v _͘nafcޔ[_:f WhNk:Fwn==p5s'-uPZRYaTpݓQVXΣD[|]1t_bl`ec?l^Fe}VhMkSEhmь=p{q4s% ,uO̲~*Q=Su UNWۧ܃Z(r{\]s^Ok`@ddb]SdwUghLjDmyA1{{ hSbid[if&*jg֔kilkk?ml}jnniuwoompqHeir(s \stTu-v$KdvwBx%yR:0yz1q{ |`f gǨfi ggj`*hkj7m"krnnlo|mptnr-m%osdqhu\&rvVSutwKv$y Bwza9y{1ez|clէdm]en,g(o hp‹ jqуkdr|lstimtloud/pw[r=x&St y2JuzSBSw1{k9x|}1JzT}ar8brw^d"sbesƑOg2t{lhuJ$j v{khvslwnkn'x5coy6[2qyRspzJZu"{Av|z9xk}K1z~)_wa-welbwjadwʐwexBg}xׂhyZzj9ysTkzPkqmzbn{RZp{R\r|vIt}Av`}9|x#~H1s]6uq.jwVXu "Z\M:^NԄs`c|b5!u.rQt6Vtz.qvU gVX\Zx\P^̛z`sbbk7d&cf\hqUj'MmdEoՊ{y.0|NzkSbFkd`leMmagT>nIi;o6jځp lQzapmrqo@jrpc1srZuAt&RvuIwwlAyCy 9zvz0{|.igWSihxjiԖqkk$sllmm2no$yopcr_pqjvqrbrtzYtuQv(wHIywxxAOxz8y{}0{g|̩fl"ggmhniok&plq"mryFnsqosjGpu&b-rvtYyswQ1u|xI+vz@x@{08y|J0{$}V'dqfeqfrRh\sisˇk0tlauRxmwv qOnviwpwa>qvxYs5yPtzlHvW{V@w|>8y\}(0z~^c3vdDvevvfw $hWwQixn |`no}Xaq}jPQs}Guf~\?w~8x0zYr`"[ai{b]dQHe&g"}i?vjWCo?kWgxm3i_nLWpQOrGt?v7x+/]y^`aoϒFc=]dRf} huiq`nxj0flk_en8Wlp=ZO9rUSG4tB9>u7wb/>y .]n1^׉``@b/c eʆ|Tg/ uhmjfk΄^mVoNq2FHsf>uH7w`y0>yFs>Ju>6vm/#xсJ[7=\7^XH`Bb7c,ze#sLg$khdjA]]lSUnLMOp{Eyr=tq5v{d->x`URZ8l[\5]1(N_7ՈOa cDydr/fDjgCciƌ\[kQU9mωM4oDEr&= t45v$O,xGY9%CZǜ\H^Po`,b;Vxlcєqe}ig mbxi[XjT9m-L2o~%Dq}= s5uJ-w3Xx Yԡ[k猷]__OD~azrwmc~od–hXfoaYhZPj_lSSlHKOo CqU+;s=4Xu_,wWXOZҋ\r^y}`v}bm_nd g;eΗ`MgYTiΓ R`l:Jdn'Bp;0sa3u+w…mVͮX!YƊQ[x_]|_㢼utaAmctfe-_Bgx~XSiIQ^kImnKg lh& mil?nnjo`kp\mL}q+nvqoorphsrO`0tsWvIu^OwvGxx4?yy7{{/|=|mj.kjlhkmlnmopNnpb}MoqPvJprHo8qs;grt_suWOuwO0vxKG:xy?fy_z7z{/{}hdpi.qjqkDr]0lss|ms|ntyuouDnpwvfqv_ swVtxNvbyFwz>x{7 z|/H{}}}fu5guhuivGXk%vlw%{mwtnxEmoqxf-pyq^*raz Vdt"zNnu{FVw|6>xh|6y}/{G~Se!zf&zdg5z6hhz3izbk\z{lzt0m{{RmEnr{eo|]q|MV5s;|Mu}>Ev}>5x~+6ryt~.{(cd~Re~ogE~bH[ cidfC=gۀiYyjrkՁKk&l,dn\p$UDqMsЀE up= vـ5xPn-yɀWBa Ú*bZcge?\f̅hDxiфqkujlQcUmۃ\>oTq\LsJuD~t= v#5x).y݀8_ a; bM1dB~eꉭ(gx iPpjSikbmE3[o{TOpׄLrЄDWtl?Bs;t߆*4v-Hxp((\0Օ:]N!^מ'`U b_{jdWt5elgXeXhÓ-^|jTWloPQnBIUp0ArK:Ytn3v,x~[c*\]a_߀azccs?e:kfd@h(]]tj6VkP n"HRpD+Ar 9t2av+Dx٘Z[]Ɇ)^w`6yQbr5djf c3g\tiUknmOmGVo5@ArL9t1v**vxӢ&s]9t_tCa%tbu'duf{&v&h=t vilwkewm?^x#o-W&xqNz/rF{+t>|v6|x.}zinqb9.rcreIs'fsh1ItXiz~tkOsuwllwun"dvo]wzqyVxs*NytFjzv>{sx.6|gy.}r{~ofwp-gŔ)phqtj?4r=k~s lzsn stYo8l{ yF6|z.}'|mk7nAlnm@onpnHqoyrprs?qksrdts]uuKUw2vMxwEHyly =zrzS5{{.E||kp*lpsm_q_nzqoqrbmpsxq\srr tk?ructvS\%uwHTvx\LwyYDxze=qy{b5{|c.|9}``jVt{Dxo{(cdߊ6f#gL4i ~{ajtokχ,m}lↈfn_oz;YpQrJtyJBu肛;kw 4Fxȁv,z*ՙ)b@c5ee*V fddh(qziskll+em<^nXTp]Qr#IqsلBuv:w#03xV,zz2aڕicdeב#gMykhΏurOj%4klkc del]nDW7oFPqIVsUBntޅ_9v̄X2xm-+hyЂ,abc0Dd$~frxZhbq1i^j]jdc9k\mLV'o!OpHNr`AnXgqg'hњ_j28Y`l7S m2LoАE]qȎ;>vs7u0w쇇)yMw0]w6_Mw_a_wbӄ xd}xZfow7xhp>y iiwtRyv%Jz)wiCEzx;{y4|{'- }|joopoppkqq!Jrq{swrtt,s]ntt&guZu`v7uYwvRxYwJ2yyyBzcz;|{Q{4'|1|,}'}n t%.nt4odtYpbtԀq:u;zRrFussvkmsw gt`w`"uJxBXvhxQwyIxzB[y{f;z|$3{|,b|}Ɨlx!mMxZnxWo!xpxyq*ysWryxmrzfsnz_tezXux{Qhv{hIx8|B7yn|;z}`3{},|~Rk*}Cl|l|\n|jno|Xyp+|Yrq|l=q|er}_s}X&t}(Qv$}HIYw}B x~":y~q3{ ~,v{i˂?jɁ)XkplG~nxqoFqpkwqdq^AryWt:SPuBIwmAxP:y|3czT-v{DzhXiPjt_k~mwnlpoMjQpHcq>H]9rYVsOu,EHv+Anw:x3zGG,o{dgnhqik }l=7w!mpWn"iobp\q̄dVs0Obt;Hov<@wv9x3y+{ fҏgˉh،ڃxj8}k}vglՊMom|hnaoه[q*Uwr OFt)G(uQ@bw9xc2y+Ez*eߓfؒAgXiM={j,u@k#nmm#gn6`o(Zp}T`qaN=s!GOu=@vW8x 1yh*z̑e eGf倲h~zi9t1kvL7w{_0y *2zAcDdE-e"~(f9x"hqqiۙkMk dlL]mW=nQ&p[K ruD&sY=ur6wd0Cy$)zbΨ~cvd[|e롍vgcpi.jJjgcskř#\ym V4nv}P"oݒ JqďC5sPy8zK1@z*\{\jύIkFllmxnЉr$p .kqqe qȇ^SrXRs%RtڅFLv1kE1w>px7yZ0z*-{ǀijփkk}rl͎wbmpo1jtp4cq ]lqWasQtIKucDvZ>^x=a7@yzs0z~){ƁYi LJFiÕzj@{l vm:oniGoZbp~\ZqzVRr{HPpsÉJtdCv=ew6y10zwf){C?hKhHriјzk41tlknmshLnao?[*pU.r OQs>0ItllBv${؂gh+i+ySjWfskmm96gKngs`ogYpoTqN7rHftAuڊ;w5cy -/zi(|@fӦ5zgg}hBxi|rYjllf>m֙_nޗXoRq<^M.r7GlsA.u~;ws4ySs.nzu(|t}]}_iV}a%}bz}dxuQ}f|}yo8~z15~{*3'|ĎGu}rurɂvs }`w(swwtqx]tl xuGf%y)v `-yvYz wdS.zwL{'xEB|1y>c|z7}{0~.|)~}tt vˇ|tvu[v|auw vvw_qwIwkQwx;ex?x_xysYayIyRyzLdzzeD{{b=||!7}9|0o}}o)~~*lr{ $sszItz{tzuuzov@zjv{#dwo{l^Kw{Xx{Qym|Kz4|PDQ{k}=|?}6|~0R}~p)~[~ًqrX~Ӏs ~e{4s~5uLt~oOug}iNu~'cUv~']\w@~@Wax~=QKx~/K0y~.Cz~=;{~6|0Y},8)}\BpqOr&5zrusȁntEhuN2bu\vVwePxMLJy< Cz[C=K{DB6{#0/|)}oÇp{qRzr'ts nthitʄ=b uS[u{VvPywłrJxāCz<{U6e{/|ɀ)0}$nńop| zXqYPt,rVmsFgtpajt[uE%UIvEfOw8J x1ByC5{J/]|](}e? m mƓ|nw@oqqpXkqϏKeLr_)snXt1S uVM}v GwAxt;yG5{+/V|)}l\lc{xmunߕpToAjq-dVr^rWsQtLou9Fv@xG8:y4}z߅^.n|(I}Akl/z!mKtnoo8ivpcbq] rb0VsNrPtAKjuEv2?w9y}N3zƆ-|'}aVj~[kxl1snmGmnhloQb\qe\ q[Ur۔ROs$JptEu퍦?w9yv3$zއ-#|@'G}+Cs7Cu1`9w*3yaمyc dTzeu~gOp1hjJjBdQk^lXUqnRoPpCL_YrD߀s=u7Rw=0x*6z}e}f~gz~:hu ~uj+o~kvi~lc~m]~oW~pQ~rKt sDTu@=v62xA0 Cy)`{&j|0i|XjV|kCz>|l0t}Fm$o:}nir}oc}p]}q1W}rQx}sJ~yuC~v=(_w6yD/z)K{zn={n@~{Rnyv{os|pDnb|qh|qb|r]|sV}BtQ}BuJ}vCQ~fx<~y366:zL/{c)x|ay;r vyr}zrZxzrs&zssm{hth"{tbb{ux\|vEV|avP5|wJ+}x]B}yMkzGzaAT{T:|4}8.}}Ҁl('~HsPs[zztZu4uouڇivcw,h]wWxFRCxЄLyGkzR5@{i:|C?4r|.U}<(~cr~;rxsYst=n7u/hsuΊtb}vp\w VwQx(KxF`y@2z89{܃~4|.}r'~J5q#|qwr{rpsltEgru-a`ǔ[vwUwPw\Jx|EZy;?Pz>q8{/I2|-0}'W~/ko۝zpP,u:Mv]Hw|Ccxt={z7{a2{2,}' ~)~o1yUotpOnqNirK6dOsy^teXuReuדLvGwKB{x>{u3}-|(uw|uWr|umP}|{xwC{xr{xl|Syg$|y\b |y\}z*WX}SzQ}zL!~{;FJ~[{?|l9F|3}i-}'~SZy`}<|Kz|vz|qqz|[l.{n|Rf{|dab||[|[|V|}Q5} }K}}}3F}}_?t~}9j~~T3kJ~-r~'"xz|y8evoyq2z-kzf{ `{O[|{}V=|P|mKT}HE}>?3~B9,~3?~-_?'oẅ́{$xevxpy|Gk=z ez`zςwZ{D-U9{O|J|HEd}>}р8~O2~-k'{@~wzewuDx1rpx̆jyfie y_szP|YzTe{zO-{~I| @D|>N}YX8}2~l,~$&^}v xvЌ-tw_Wnx ixdy2R^fyXzS1zzMzH{~6C{R=|僿8)}#2`~,~&@G|\u>bwugrvfmwLh\wc x]eyWyR*z LztsG{@B{=|87i}8e1}Ճ,~z&{^t>vu9qhulevigCwA?bx !\oxVyQy[KzFzVA{<|96}1,}+~Yp&pNz_t#uRtEp&u k=uHf2vaw[xx UxOyPJy?Ez@z@z؉;U| d6!|܇0}+n~aG&yXst$s靲ntmju[,e$v)`wZwBTxROxIyuDy?z:y|M5H}$B0}߆*~T%mRN^{v_vi0a#qblӇ3dNh0eb܆lAL-nGgo@q;ti5Ԃmvk/xV(zD~3az?budL-pFEq?уQs; ~u5w.yA(ԁc{}eJyۅqfAuHg^p؅hkigkal8\%=mgVnQopKqEsP?Iu:q v4聝x.Vsz (ŀ{}6hy iuujpkklfm|aPnz[ƃhoV.pPqKEUs[EnFt>(v]9x4K3y- z('|1~AmymItVmonjojep6`]q%ZyrUDrP.sJu&DvW>Rw98y63zW-{n'|}\pxpszq/nqirWdr_sZ;tUu[OtvI߁|vDKbw>,fy 9&zY3{I-Y|/'M};|tiwŀFt^rtmƀthu[c׀u^рvnYwTwO0xMIxDy=z{8n{2|Q,|&D}|~x^w+Uxrxmx@hxtcx^y;XySz'N+cs%vvyrzEmzzh{Bc{=^|KiYG|~sT|߉Nq} I}LD}i?}˅Z:~~5/k:*!%ځIulyHqpylyglzb{]{Xn|S|nuM~|ӋCH|C}Bq>}9~Z%4a~1/u=4*s%tgxǙ oyojyVf>yazz]\{*W{R{ZL|pG|LB|䊈=}U8~I4~r/.L*kZ%6s^xEnx}ixȚeybs`xy[zqV{4Q4{?K| F|A|= }(8N~O:3e~և.lV*V %5y ^um` pыaRl)bg؊yd^cf ^)gY8iSۈjN‡NlXIen1Dp!=rj7DŽ[th2v^,,xN&^zMxUbtcpXadRkegNugbЈh]шmiXkQS,QlN n?946/Hʁ*-Ё%!πpm~[SlP~\h cM^ZBOUfP#JƀEF5A7=:F8Db33.)݀%)oc}k$~f~gtbM~l]|YtsTTvO/ËcIQE9@뇧<"R7+M2ހXi.Ani)X%:y6+2.h,)у%.ss_/nv`Hj$axeba:d]QfY fgTi/OjJylEΈnkALUpqMƈpSIqDes[@(t;$v5,Ox)0y*{ %_1|yqlllhOm*dn`Vn[oW,pR>qMerHHsCgt?lve:rw4a0y(/vczu*{%}q[ool]ogۊYp;cljp_IpqZr>VsNsQsMLtHDuCv?w9}lp rk:sgxsOb҉s^ct]Z"tUuQ0vPLwGwC"xo>yE9z4:{q/C|E*v}$}oCvkAuvfzvbcv]wAY]wU$x.PxKy9GVyBz6>yz9Z{4DY|/s}U*@~ %~n‡zUjzfyaEz]pz5XzoTtDzO{KG{cF{BK|=(|]8}J3}/~[**>~%SmԆ}i}TeІ}am}%\v}0X?A}BS…}mO.}|Jx+}F }A؄G}=n~8q\~3k ~.h<)lt~$d liC%eo>Aa7\t,WS\NoIEoOA><7/3\.ni)q+$hkmhuodŅ`qdZ[݅Q)W7RM炘MBH\Duꁝ@kT:w64mu?/ۅKw*1x&zkMb3gFcKcHd_^e[5!gKW8!hRߎjN_k{IlEfnA ]pp=2rk8Nt4?v|/x(*փy&{je.fef c%g:_Bhl[))iWJjRˇ${:?|*69d}1ń}-$~+(z~$jg@|co|I_|,[3|PWn|_S%V|N|J|F:g}B1}/>W}o:^}5ԅ:~i1P~,!(s#{f]^bˋIe_.Q[3IW8;RƉm:y7 3؄/^V+ʂ'I#1a3^1Z31VzR䎒NӍJYSnF`AP=9Q6go32`/؄+z'##`Їė(]Y)Ɣ6UQM܇yyI&+E>@<څ 9C.o5ńN3@/o+b\'T#K}d<_`~i`\RbTX.cU.eQДfM֓!hIiEjSk;Agm=o9Zq 5s1gu,,w'ʅyp#{Vcb`Sc\vdXDf2U*g~Q_hMWij>I+6kDm@fn=p9\r54t1v,|qx("*za#|bel_ėIfM\qfg[XٕFhU9iQLjM!l/HmtD[n@p`<ƌ@r&9Vkt4v0]w+'yr(I{#΃|b hk_8i\eiXQjTdkQ$mMn'Ho@Depq@oWq#}c@n_6o ZȓoWmpASpPqL4rHsC͍ty?Ru}z;0{s7m|3Q}/\q}+%~9'~#t`{\D{{Y-{fU{QD{Np{Jk|E|>A|r>{|:ʼnS}7?#}m3-,~8.c~*}&m"_7~\0~X)~vUVk~~Q~M~I|~E[5~AI~=7~:B~6߇~2Ňz.~*6&ՄX"]^di[XPTnPS\LAȞD@d<9ɀ_6bZ2ˆT.I*6&&#+]UZcW%„S]lP ߄*L0:H ^fD?Ȋ΂ml:[7N4k1c-ʅD*!&s#RZLWTWP%MdIƌOEˋAϋ=S:4D6(3ņG0Є-փ*U&߃<#~lYVS}\bP ӑ,LrHEuA׌<%O9v=6I R3!ن06-Մ.*f&Ă#h\6`Y.aUbR^ad0O!eL fH\hdDj@>k=mm9}oo6qu1拢s-ډv)ˆcx%z!I{[ cYdVeERfOgKviHjD'hk@3mk<"o91q5Ѝ$s15uX. wH)y%цz! |[o%eX˜ fUgRhO,2iKkG=l`Cm@coo^GpqCqy?Dr<5s8u=5v12x-z*=?{f&|" ~ [陼nX) nTOzoRQ+GpM͖pJqGKrC?s?Wtv;̏@u8}v5#x1y-z)S|&}G"c~[GqWs]qSrPHrM>fsJJUtFtBpu?4v\;rwD8 x64y40z-{)4|&.}"xZ(tWtSp tP?ulM uIԓrvgFF#w Bqw>xM;(Gy7y4#z1{-M|)%}%~r"K\Y՗{x VwS?RwP&x6LĔ(xzI]xEyTAy=Sz):z7W{N4q{0߉g}- J})L~I%~!؄Y{V+UzSzOڔ{Lm{&H{cE;R{Ah-{={| :;|{7=|4Uy}_0yQ~.,~)(%)!#XH}U}R}O'}L3}H|&}D~ @ۏ~<~ 9M~L6ϋ~|3يR~0<\,ۇq)6%"MWU8R0OKÀGĀDf@?<+~;&7\5!N2\)/tf,)3 0%5!ۄW_ThXRJĊOhALTvaIEAR>D :p7Z!4/;1T/(=+b(%фU"/S6,QO}-NTK}+wH0rDܐAB։=9ʍ63֋0.:+Z(オ%zƁ"{PRݓPWCMJ㏓GT.sDra@yZ<ЎƋF9 ̊:539s0e.qN+Ɇu|(b%b"KTۤ0aQb&NڡDc^KɟdIeFUgLCh?jp;?l 8͔o;Gp8!ro4t(2u.w+$y}'7{$| o~TޟkQ~lNblKCmHnrEorBTp>q;nr8t#4ɐuu2 ow.[x+>zc'Љ{$es} ~Tn|QYnMߝ2o6JoH5pE]qBr>xzs:ݓt7+u41v1+x@.!y+t{M(+|$S}!FT qSPYq{MJqJ-NrbGsEsAÖ}t>4u:vg7~wh4_x[1vy{.{+H|F(/}[$;~j!]Sn{tePdtkMtJ8|uGmuDpv(ASv=Ɣw{:* x-7/Nx4%sy1jz.|++t}1(}~$.~ ÅRƜwyOw[M wdJ%wG9xD0x@ҕy =Q%y{9y6z3{=1>>{.S}G+d~#'~#sV 0ARazZOfz3Lޚz=IHzsF zCЖz@g={T<Փ{9/Y{6T|U3|1}X.@;~e*~&U#S?Q_},O} L}I̘})F}FCGi}y?}(Gg% 3"PmNjL)IKgF9B˕?^;H8(5c92i0~.Z+E(*$!鄐PɃMԙK\HeEVeB;>i;(7v4ِ.2fH0]-؊*b(HKj%&G"y$OW3$LgJrGNDAd=':6S4=1ڎ3P/~I-%*㈸Q'$ lN0/L99IlFe3CĖe@a=I#f96Y631;.>-"*!'ۇ/$6G!7MxKH4E>B4L?9<9:Շ5‘33 S0.>H!,/*'Ka$k! %hK J GЗEB#?;8Ê%582 0 -ŒDy,H)҄$&ᇌn$ O!OTf@Yf[g^+h`i~bXjkekrf|luht`mvjmnl|e$p-nP\qp+RsqJfuJsBvv8xw0z}ycB_Чda_e%cwzfXeHZgdg2hiij|jlStkmlm\oxdnqH[prRrtJtqvkAv)x(8wy06y{c`eafY*cg]dniC;ejggl:hlm{Finsk&p5kluqcmsIZotR+qvQIswA2uyG8wrz0yF| ^sjHQ_j`lJbm.-d nNpeoigp|zhqrjrkKkrsc8m uPZsovQq9wI>spywHrzv@t{|8\v|V0x}P/ZKu[t%]2t_uz`ubvd_w)yQewqgxYiiuxakuyYmzOPp{,HvrJ{@?t^|8#vk}E/x~rXzYy[by\]dy_@yχUaBz9#czxdzqf]{Bi@hT{aBjl{Y&l|?Pso{|HNq}V@7s}7v~q끞7it/dvKRPTUYUjXAiZc݄e\/|^ut`mbGfXdՆr^g+W,iNlFo.p>q79t)/EvQmRcuTVY%x[{#|]:t_Olare{cW^fe#VhNQlF_n>jq4sW,u􁼥P0Q.SOyUٓlX TZkTz\#s`^k`dsbG]Be|Uh3N=kqF~m|>pC4Rr+uOKP R`ZT=W >YTy[ r4]wj_cb$+\Vd`Tg\}MYjEm0=pH5yr-u IN5OHQjSܝc V XuxZq\i[^Д;bZa=:[_c TfLsjeDm1=o4Rr,uu%"~M\NPI-RۢT~WwYɛo[ܙh-^a[`GZsc/Sf4KiClҋon32hrW*PuHi#Z)di\vj ^ޖj`kc>leiJmg0yn~i*qo_jjpzlbqnZFsXpQ(urHvt@x2v7yxd/v{zPhfM_fagcheLig/ji|ljymlQqmn#mj5o@ovapqjYfrsPtCtHIuv?w_xQ7xz/dzx{Qcddf:egfi%hvH}fvvSh7wo ix,gnkZx_&mjyW_oczkOq{4Fs{>u|6wr}.yd~?[yǞ\y(^Uxؐ`-y$/ayccy|ezVugzneh{{fjL{q^lp{Vn|\Nq*}Fs=}>Tu"~6w~.y~Z~C[}ޗ,\}>^}_`}@b}k|dX}te}mgt}fiW~^Dk~ t(6#vj.\xd X~Y낏[{] _z0aa{=c2tdlfe\hs]j€Um jMoEAq‏=rs~5uӀ].,wɀH3W2XKZ<$s\h^S)`uzwb1sCckedgL\jUlOMZorE)q=ts6u.fwӀeU2WCxY[:]5+_lya>rdcUkdچcf\>iHdUkM+ngDpn=#r6u>.ow+TMuV2W:$Z D(\S^Nqx`Jqrb jcbf[hTjLmЅDp;=Ar3t+vS|ǚ7TەjVXZ~]3w_8apQa!5hbaeZgˊRSj:Lm1E!og=qM3t\+vRqJ)S隢mUp WY}\/vn^7?o2`0gbI`d=Zg Ri,KlD?o5xx6yy.w{.{zfdgeӗhag0ihRjj zkk|lluennDnEoofphq3_)qrVs~tqNWuvFmvw>x y:6y|z.lz|&diTe]jDfKk]Ngl}hmjin{kotlpmmqfoTsx^ptVrv1MtpwFvx>2wz@6vx{.Z;kRmyK.o{C}r;tW4v/-Hx9WُdYIɑ]Z\ލ^2|`Kubmnsd`g=e`(hQ YjPRlJoC0CqE`l;bydd9'^DfWhŒPkcInSBpm;rކ3tքq,wTԟȓU"XWmYՀ [1yd]◁r2_ɕkaccx[]7e␅VhOjImъAp4:ru2tᅌ+mw٘SJmTRVXmXu~ZxI\q#^j`՗bb\+e=z*v$5{Hw. |z l _ϚlaMIm9bʍnd%nf7ohypirqOk%lrldsns]kt6ptU ur;Mw1tE;xlu=yw5zyf-{{';idljek@fύl@h6um+inEjy9o9lKrdpmk}pndrJp\sUrWTvusLuvuDww+=2y/x5xzMz8-{{ƟJghhxiϒiFjڌkjukklIlnxmoqnp"joq5cqr\-r`t{q7s[/uև[)xF4qZ˖yq\Hr^!r`sb}lsdpvtPf+p tgimuoibvMk[vmSwoKy&qD:zIs<{Nu4|Xw,}_y›oK_oap(bPpdLqe|rNgvri3oksjhtKlMaau@mZvpRwsqKxsCyuo<zw44j{y,|zךm$d&me9nKf}o,g؂Soi/|pju}qknrzm4hDs0n`t:pZu1qR.vsJxxu1CyIv;ztx\4J{`y,|{kh1kid1l`jim}kwnpl~{nomtpvnncqIogrp`s3r5Yt:sQuu*JwmvBxx;#yy|4zz,||*bi)m[^imKjn\%ko&mozn-pt0o%qmprg$ps_r_tXsuQ8u6vIvx9B$wyf:yFz3z{{,l{|Ԙg{rhBrui(rfZjsrksryltsumtlnuyfov<_cqYwWrwPt\xI`v'yAwwz:x{3wz%|,-{}tevfvygvrvhvDjf?eg^i XkRR}lLnoKFAq)?s9uw1v*Gx~j\WR?]s^1~F`*x3arck8eBdfɑa]hTWrjrQqls:8u! 0wY)x[v\$].}_.w`ʚ2pb˘jj2dcf \gV^iސPdkJ^nDDHpي=r97+t{/w)x܍Z͇[4\&q{^9`u_boaYi3cŚFbwe\+[gUWiTOek iIhm"CDpwH~7x~1y~+Uz~2e/Ef-DjgK>hNyCj rkullf7m\_nˀCYp/S>qLsEuD>v8w1y*zgQdV4ekf8~gxirRjkkeQlK^nXo|Rq3LgsEjtʁe>v`7w1y&M*z}TcXd e }fwh[qdijjdNlZ]m4WnՅ QpMLr|Etb">:u7wJ0xҁ4)z6blbԏRcT|gePvzgap6huii튆c7k2\lcVnPo͆K qօDs҄>%u"7vyN0=x )|z6a*La b˒{#du1eho"gNhui b"j_[}kUmNZOo JqCD&sd=t6vC0)x/ )~y`Na`٘aϗcycse }mfēggh?a i1ZdkTilNnqHpC s :{w~7|Qx16}7zY)~{spmlplуqemc~ rQn;xAso rhtol}tpfnu]q`[urYvsSbwtLxv0Ez#w>F{x7{y0|{&)}|bnpˈoVp݂oq'}9pqw[qrOqrrkssetIt_tuoYTuvRvvLxwDy1y=zCz 7{/z0|!{)}/|Om_:swXtxmRPuxKw9yDXxz=vy{W6z|0 {|)|}wky[2lx{mFx{ndxuoYyp!pjy?jRqSydZr*z ^NszXtzQuIzKDv{wD x)|,=Xyc|6zz}H0&{})P|~PjE}ӆxk!}"l|{3m?|upnH|ool|yipU|cqF|]~r,|WfsQ} Q=t}Jv }ZCw}= x~6ty~h/z~)Q{~Ŋii܁ VjzlGtmLnnho~bps\qbVrdPt3J6ur=Crwk{;2h8hi{z?k8tVl^nMhy^j/sokY2mOlgmކ`n݅qZtoۄTqLIOrƃIrtbCv4<_w 6x/dz({0fff}gwi!r jVl kFelr_mYaoSpNrHssʄBu#<)vۃ5w/y({eoeT|]f~>vh&pi_jjώdl^mjXOnRo]LqoGs7AuG;vj4wɄ/y(zၲzd8Qdϗzeu8g1Poh{ij ckhj]lW-m獎QqoLKpzFr@t⇦:{vFx4wƅ4.#y( {1VQchcۛydsf2nUghiIbyj\@kDUm?P.nJpUEPrM?tv9v63wʆx-y'x{}.b}bx>cre9mfgwh}=auil[3k]TlO+n?}IoǏDDCqٍ$>txE9v/3?wև,z&{ۃ{@[3{P]$r{C^|{s`v{bip{d1k{ed|gs^v|FiX|jR|lL|nE/}q>~es 7~u&0Iw%)Ā/y-`y3_yb`မybB{7zcuzOeop+zgjCzhd8{$j]{bkzX!{m"R!{oK|pD}r=~1t6~vz/FxY(z/xwYcujwdwezxigu'xhVoypiiyjcz'lM]ztmWzo-Q{ pJ{rD|tK=4}v 6c~%w/~yB(|Nz։ugeuhIvAiHz.vjNtwkToxDl_i_v8xF2y-5{O)'"| 8gtzgݙthKoqij k!bdl^mޒXnRp$rM@qqGrBtO=v7x_2Dyz,{{,9&|~fxgsvgn-hhjVz~8{~3| -,}f ' ~9+pL{pv q}prOk^s!mepsO`t́0ZuTv/Ow1J{x8UE0yK>z8{p2|D- }'}*oLzQoʆpu#poqqhjrEds&_Nt6YtSusjNv~IwPDkx>y8OzO2{,|׀}&}ڀ}nxnsodnpiGiWqPcrQ^$s'YXsRt MuEHv[CSw=y"8z2}{,g|L&}|Ymwm rWnv)mHo2hpiKbqy{\rdWgsBQt%LcuGiv:xBnwnO=y7z81{4G,K|&d}I{FlUv;lqmdl n+foap[qVTrPsqKRtF\uAgv/< x߆F6z T1{&H+|T &}z/kuk oljm͕$enʓ`p Zq UMrO}s9JItEZu@@iv;Mx5y0{$V+P|@%}yj̞sk$nkildn_|ocYpaTDqNwrIQs͏D^t֍?xvA:xs5hy0{-}*|%5}ƒfJ-\?|]vw^r`mbOhxWdb@e]` gJW hRCjLۀlG(t 8Zu2nw9,}x'-z]?|fzu}gu}>hp}ik}jf~;ka'~Tl[~smV?~|oP~opK*~rE&s>u[8jv2Rx9- y'I%z{dkz{kNt{ko|Qlj|me|n{`y}#o[(}`p~U}qP}rJ}sD~xu>>2v8xx2.wy<,ze'{~ynyezAnszoMo7{pj{npd{q^_|rIZ|asUA|sO|tI}~uDV}v=~|x)7~yD1%zD,MH{A&|4}x_rxqxrsYyfrneysLi1zNsd#ztG_,{uY{uuT{vdON|{%}B{}<|~n6}z~1S~~+~%(:{sނ v&tyTq u-ku퀮fvaSwI\wzWx^R y!UMy)GzB{<|~6}1E}+~M%~ys#u/s$ptEkuEeũ`vvs[@w"cVwʃPx^Ky4\FzAzv;{J69|0}\+A~%~ɀ;xkr5#srGnsLit&dtm_wuZv[FTw Obw"JnxjhEyO@z);{x5|M90&}+;}΁+%~wq?rdqmqrkhsFct ^~t݊MYugSviNQw3I^wކDxȅ?y:{4|/|*}%q~{/vpy>h9z4m{/P|ン*R}%G~huoopAjpf;qaFrG\msW tjQu:pL:v.GHv{Bwۉ=xA9%z+3{.|焺)}$~tssonoLioΘepe`>q[or|VsPtˑ_K5uFUvAw-p2R0q;LZroG-sA|u;ʀv79*xL1y, z'Q|Ny~nNs~Entn~njH~oeb~p,`~p[qV2rQVsLU|tFuAev;x8w6yg1_z+{&|x|qs|qn*}PrJi]}rdi}s2_}sZ~.tU~_u-P~uK~vFwcA>QxH;Ayf6rz1{}+|[&=}`w?{fur^{um_|3uh|{uc|v8^|vZ.}DwWU>}wPc}xsKa~9xF+~y|@~z :z6>U{0|+}e&~~?vqzyqzy5l{yh{py$c.{yO^'|yYw|z%T|zyP}?zK}{8E~{@~{:-|5%}<0t]}+$~,%~ux}q)y~|lSz|gz|nb{|]s{]|X{|T'|1}O|}dJ}"}xE}}@]~G}:h~~;5>~~/N~*y%([twFypzxky1gyaz*\zW{S{O |J|D}@?}:~4~/6)$swLxowjx[fx'a>yx\yWzlxR7z+M]{UH{⁗C|7?}9}4s~w/~倭)Q{$€Urmvn%viow^Ydw`xQ[yVyÅSQ%zHL zʄPGR{HB{ >|{r9(}z83~.6~)$qIulvhWvy&cw?^w‰Z0xUyUP#yJzHF>zȅA{o=|82}%2}-~d)P~$^'p@u mku\6gu#bvp?]w MY8wŌiT-xdO"ymIy։gE6zY+@z<${7[|2e}ք*-~tX)~Ă$eDo?thjtxeu a^u\v]X@w3S7w}NxFHyKD/y?z;?{\z6|v1}j-5~fe(~Ѓn#uxn6sŚiis㘴dt$`:t[uUWFvRKwwM#x""Gx厨CFy>z;:M{M6&|1},~g(}#CTu \q t]lb_,h h`cbd_rTdZeUgdPg(iKsjFlAgonX`leSЄm~NnIσkpJDރq?s;8u5wG0Ox*PzG%e{sTj'njjNk/flall\emX @nS3oN:pISr-Dfys?,ju:v5B}x`0f y*z%|is`mnf`mi~n_e4vo`\o\9pW`5qR(rfMǂ!sfHtUC uo>݁v9x#5.yp0z*V{%+}|riq:mq:hсaqdRhr"_gr[3TsOV[tR^tMMjuHysviCew0>gx+9&y4z/{*0|i%`}jqeul'thQucauN_ouZtrv$VvQXwcLxGxCFy9>Oy9#z4_{/|*Z}]%w[~3p_~xlxAgtNxOcdxo^xYxUGyPyLD'z\G^zBe{">{8|n3န}/})〃~$$r~og}|kW}{f~Z{b~{]~{X {Ti)|,P_|hK|G |BO } =M}a8]Z}3Qx~Y.T~)L$Xano|Gj}8~fV}~a}~]3~/~X<~z~S~~O(~~J'~FBL~A~=Z89i3R-倊(؀#€mf|) i|ie`|Xa |\\}RW}R}NI~6[I~(E.~Ѐ@~ D:~~X5<0{,y=p(EӁ6#jRyfyʎaz ]zYLzT{/P |>KF||\F7|pA}SY=})9e~+5~m0,;/6(/#iay ey`yL|\`yԐsX2zPaT{fO:{BJY|%ET|@}<}Y,8}놵4~0]+0( c#6h_x}cx_bxU[@y$WySzsNf{LIs{Dy|@@|;}67}t4~-0~,L(~܃$9o]jt^.e_La=`]bYd2U>eP}}gKi(G? kB͇m0>moY:q5s0_u(Ew"삥zmM_iaewb2apc]2e)YfTuOh+O׈iK(k-FnlB"n>q:>sf5u>0ahw (ڂy#jWzl̊bi1ce;dda(fF\zgX hTj=OskJnlFnAp=Ƅr:t4v91^xi)gy${lZf$h‰lfdʉ0g`Ȉh\iXC6kSlSO6mxJHnEpZA`9r=g_s9ƃJu4f6w=/悧x(Hz`$)|m ihcJj7d&j`k[LJelWmSnNDoIpEGrR@spbip^qZ;r;U6rQsMkt{ItuXD"v2@1w;˃Mx&7y2Wz.{(|$}jt)ftbtK^tYuUuZuQB$vRLՃvHxwD x9?:x;hy7G{z2ނ,{.7|)Iq}v$~Yjwewza|w]wY&wTЃxIPhxL2Ny8G؃0yCz)?mz;{?6R|>2#|-F}(n~4$]!~i{ e.z`كCz\փzXzT{Oт{\Kn{G{Bႇ|&>V|:ǂ.|6m}1~,с~(^~#^]hF~!d|R}`cz}\S_}X y}Sz}O'Y}JȂN~F_E~BJ~(>L~K:I~{5Ё118,,n'΁"gcK_܁[WCʀRNgԀJ؀oE׀GA€+=95:)0~(+Ѐ'́L#%AfwbQm^Za˄JVEQ'M,@I$?DV@A<98+?4>yR/*ր'0\"݁K&e oaV]cԈIYg UR;,Q2LH.|C?xل';ʃo7Â3-/*ȁā3' "ad~`B\9.XQb+TOlPAKGPOBU>D:~K6̀~L2π .́s*&䁍#c+~u_5~X[~W=~ΎSCOK{JFA=р5s:1(6543@d/P+%'?#ÀHb0}O^}ÔY}RV)~:"RB~Na~J PEa@Ō'<銦9J5ᇏ2/J+D'#Հ&ahf]Fc^]^Ցd_[@aBWabSێhdiO\fKXgF싣ibB銂kS>Rm:o8irk3|tx/vz)jxn%Zzxg`c]a#^bb[*$cW&seHSHfOhLJɋiF^kVBGm>Lo<:xqi7s3u/A>w)݃!yX%"{1f]wbb}4c^ώeZfGVkgRhNjEJv"kF UmASn=:p:hr7Ru36v.x^)y%_{f Xfb f^gZhVsiRk NklHJ'fm}EnApo=r0:+bt6v#2Mw.y")|z%|f:iwa̍i]jYkUxl}Rm{MnIoEkpArS=Ps9օuo6ɄwO2 x+y'i{["|f,laxl\mYnn[UOoQkoM=qI?qE0r@zt=;u9mv5xh0ZDy+z(|"#}Ue_\o`p \pxXq7TqP'rL{snH t4Du@v l}:}7S~3-~. *UD&ew"_`ʆӀ/]gYچUjRCMIEwAt,=߄:f;62ރ.-*H&U"_˃\A̓XjT􅣃Q%M7H 7D΅@ҁ<τ]Z9h5p1ꃈ-})4_&6`F": ^[H ZWS^P,LTtH'Dh?߄N<&Y85*"2ҁ-e*a&e"md]Є_Z>_!V}gR`O2`KnqVGL3CD(?0;37If4wڃ1~/-*/&)"6\ԐYEƎUQ͌N:J=FsۊCBo؉d>=Ո:؃Z@73/3傓1mz-**&aE"4S[T6X2BTwSdPaJMRx3I*EA=H~:!T6Ӈ3jY1d-Łs*i<%?""!39`J ]\%p^X`T]aQNJcMdJ$fMF!gB"\i>|k:m78p4Cr0*t,v'y##c\{_[`h[ٕ0amX>bTgdQqezMnBfI h|EiAk=팠m[:e&o7q4-t$0Sv,Ww'Jz#90{^ʔc3[qd XdeT_f`PwgMEfhI[KjeEcXkA\Nm5=o:p6s3ruB0qv,,wx'z#1|;^sf'[ fW~^gT1ghPiM k I6lUE5mA#n=}gp9يrc6шt_3чvU0w, yY'{.#Q|_2qiPZޒiVsjiSsknP lZLmaHԍnDڌo@ًp=drh9s6u3wv/x, z$&ƒ{" }A^/lRZlV]m1S2nOunLoHhpDp+q@VruTv%Q#vsNvJw-Fы wBix>? x;y}8wz15h{1҅|-ۅX|* }&.~`"U#[y9XxT5xQ>y?My{J VyFFz)Bfzs>j9z;:>{P8p{5"b|t1N}N-~)鄏~%ă~!fZ[|W{TU{P܋|MQc|?I|cE|A։}|=ވ|:}*7}x4~;}0~}-6~)?*%"m!'<Ynj%Vߌ+ S#P@J~LɊ~IRE ~A)~=w~9뇥~74;0N,˄^)=p%ك<"X狺UċHeR‹ ?OBKGH@݁DU7L@Á"<59Tl6_3T€_0Q#e-L3)H%"3VW)TQ~rNYJꉽGiqECσ?Ոrj;9 n5^2~/˄i,y6(р%T/!Ȁ9VSɊ,fPM]#J ;FBˈyI?;A8 ۄU4,2 B/[, (w%=!BU RщOr5LqLIÊEA.>Iڈ:ws>7Q<4M?1 '/99+ȃ(~z%*" 3TQӉ+N{KtH6brD҈KlA+t=xw9>q6>3̅1݅/4υ+oT(%s !Xy ^>T_FQy`N|bKE"czH5eDĔ%fA#h[=tIj:El7&nS3p12Es.-u3)҇w-%Cy!0{W`TaQޘcNdvK$XeG͔g4Dkth@3jPk.Dly@gmpu;Okv8F w5Ax2vky/;{, \|({|$}! UuRRZutNu|KuHvUE{vBwt>{w:̌x7݋yT4xz2[ {/T|?+}(eK}$Ȅ~!NTxxQxRN x_KxHW[xE eyGA]y=z:5z}7cC{4!{2&|b.}J+~((5~$7 hTS˒{JQ7.{:NSs{GKI{xH{D{A |=b|89+|v6ϋ|4&}91}.~}+~'k.#zRR~D~W@h~N<Œ~]8~o68~3ĉ~1+p .E*䆁<'h`$΄L!gmR@okO;L#&IoFрCP!?4<5q8Z5}53"d0&.I +T't $!4QpNƐ)}K׏9HَE[BF>;B7wF5h<28z0-*І'k$q ,PSezMJڏ/oG|DYAr>IE:ڌ7RM<4,1/łB-8ʂ*H&vP$!kO8(LPOI􎺊GD@$l=i: Ň6E3m1Xq.ۇ,Ɇ>)3&>#ׄV!M#N'ŏKI-F)C,@@ȋ<9&9]B5ۊc38O0ֈ†.w,҆F|)݅&*+$hY!^Pɡ^M_JȞWa#HbE>cB5er?kg<h8˔Bj6 ul3Epn0/Gq+-Ȍ[s*ku&w"z%|QPa[N&bOKkKctHhdEN?f1B@g?%i+;Ǖlj8ilN5n+2 p^0r-t*0v&@x"هIz7}PJcM֝dK9VeHWfER^hBGiq?Cj;l\8G`m5do2q0s-ou*(Iw&ˆyR"{sz}kOfMmgJlgGhDjB$k\>l;?n8;ok5R q$2s0u-q?v*.x&ӈz#/|:}PٜiQM]iJj^G#kqDljAǖbm~>Ŕn;^o8Aq25?r2=t[/v1-iw*,yc&݈z#D|ޅ~6PxlMl]IlG~mD7nAuo>uVp; q7Αs 4 t[29Vu/w^-Vy*zM&}{~#|q}F ,~OnLgoI8oFLpACq Aq> r:֒s72t4v 1wC/KEx-6z,)z{C&_|N#_} 5O( qL#@rH_rNFHrCs@ǔt.=/u:gu7 v4V+w1x/Ry-*?{?)4|1&)}#K~s C\Nu&K͘rtHɗuF#SuCIBu@pv=/w.9w6Gxp3y:1n'z/0{- |_)}*&}# ~{MݘwK>wHwEx/Bx?x<̒Kyj9py5z>3xmz11{/ ;|^,})~&Q~"bNڅLxzJXzH`]zERzB6{?{S_a ;<7А14g2 0 ,. ,Y)9&#KgʀHdFDJ!A,z>V< 985叵2r0dd.e׃,sF*爼(1h%V#u! ecGbЍECW&@Ē݋V> ;6f8F55)2q/ٍ^}-ϋυ\+ߊK_*c˃'o$@#V= /d{V8MeYe[ؔmf]g`xhb\idwjfpl hiAm_janlY pnO_rpFtr>vLt6ww .y~y8;aR\bT^̚#cO`dbedff~h h=w\i@jojkhkma#moXoqVO:qsEFsu#>ukw 6uw8x.)yzЧ^b'_cyad꒒bofch e-i}fk!vhlo4ingjo`DlqWAns!NptF[rv>4tx 6/vy.x{|\6g2]g^i`jfbkcl}eKmufo3nhmpegmiq_ksVn tNp9vvFrCw=tTy@5vPz-x]| Ylq[BlȖ\m`^nc`6oP^bpO|bcqPu9e_rBmfs8f$htN^juV0m)vMoxEqy==sz^6u{-x$|Ĥ6WqƝY~y+^7~r'`6~jb~c}dn~\f~Twi~LlCom=fq6rQgr/kLhs-cjtE\)luTnvLqx9D>s2ynpi3s"+uɗlMNƛjPEiR}eU NvWoY@h\ a^3,[{`{U'cݍN6fGj @}mo9Yph2/sB*u΃-L:M. OWQ|"SޛuV}nXg[M`]OvZp_ג{T7c_M;f[Fj?mS38spW1Nr}*"uKML|fMǤFiPu7zRtU{mWfZ._q\Y__yS+b|L8eҐEi/>l7o߉0qr)KuCiW.j Yjx\8}kM^nl`mbyQmdrnfkohd\qj][r&lTsnLuqD,vs9CvNu'<ww4fy/x,nzzdgaƘ[e4cfdgSfh}g~iii>wkjpl/lj mNmbnoT[pq:S+rv@p39er2:u*w͗EUtVX}xZ\x,^qC`.jbcdJr\fVAiOpk͂fH7n@pށ9`sK2&uT*w}jCT.U3W*Yj~[j!w:]Tp>_iwa bcYq[eUhLO%k_Gm@_pq69rM2u*aw<DRjT;0UgX\|Znv\rbo^rihV`caabDZd㈜TgFN/jKsGmHt@oy9%rG29t+DvהJQĖ[KS?DTp:Vޒ{{Xؑt[Xim]^*g<_Y`AaFYcSfiM7iFl܇\@o9>qՄ2Yt(+_vm PQjSUz6WsZl\Wf^V_`W XclReL4hEl;Q? o$8SqL1ut"*vQO^P{QߝUT^,xVvjrYk[[d]p]_DWbS]QdYK,hJGDkU>)nĉ7uq]0s )vINۊbOqĄP~S,wU^qyX jZmc\\^VaQPdEJ0g̏Ck^d=>ntU6q#T/sˇR(v{OlTWԕelYzm \6]m^pnY4qpQsrIVurtVAvv:dxbw3 yyf+H{{+e4f8fgfh"h%iJi>jpz:jksklm5lmfmo+_oTpXprPrt6HtuAvMw]:4wx2yXzH+Gz{bjckK dlfYmgmyoinsjVolkpelq^nys=WotPrvHswgAOux:6wjz2x{]+Izw|y*`oDao֋ cp:4dp~f quxgr0rKhs kjCseMkt^6mHuVo#vOqLwHs\y@u9z9v{#2x|9+$z-}4_^tz`Ftf1aPtOZc t~ du wf>uqgv5ki vdjwwv]l3x Vkn$xOpyGrz@t{9Cvw|`2*x7})*y}]yQ^x_xqax}kc/xw&dxpf}ytj)gyciaz+\kGzUmG{No{Gtr#|m@t}8u}1w~*Uy~_\~)]!}9^8|`:||a|cvGc|Yoe^|iPf|bh_|\ja}USls}7N6n}Gq~?s{~p8wu~1v~*xjZtC7[`^\逺%^s{`ubbndShmeagi[EiTk{Mn>Fp?rB8t"1hv*xdXJTZL[]m{>_itadncKgd`fyqZgh"SjM\mFp'F?8r18BtD1`v `)x/YWIXZAb\^zQ^@s`jlb8fzc_e[YvgՄS1j)#M/lꃐEo >q߂7sځ0uW)w򀫐FV`ҊWXXÎ%[y \ r_ka+ebbЉW^dXJf܇R>i:L*l#En焫?jp8s1mu/*BwM!UVNԄ4Wْ}Yuw[;qj^j`dJaʌ]cW9efQ?hfK'kmEn>p_8!s<1u7*wY T"CvU'ۂVC|XvZpZ\ i^c1`֐+\pbV$e*w׌SEKT1FUY{lWguYYWo;[h]Lb_[VaӑUdPO.f/Ijv{,7w|0y-|)z}axF!bw̅zcwmdwyxf)wsbgx(m)ixfjfx`kyyYmySo;zbLq|{Es{>uc|7v}0x})y~ _\|u`u|&a{~cb{xd{rf{l>g{fiT{_j|Yl|dRnj|Lp|E.r}>2t}7MvO~30rw~a)y3~ ](_<2`S~bvxc)qej~kcf~ehR~^i~Xk~Rm~Kp~DrE.=s87;uO;0w )yy\3]ńiu_}b`ރWw]bqdQSjue߂dg^]hӁW7jTQslKQoqDrq=sd6uz+0GwR)Sy[G\{]|q_Qvna]pc;iydfc!fl\ghV2j%PlBJK nłD qOc=[s6t0v).xˀEZ"kR[p\Oz^au#`nahNcbeT5[jfrUi@OkHInD&p=r6Atw/v*)qxaY[ Y7[9y]8s^ێm`׍g)b`dTZUeTehdQNjy#HmYC9pA=4r6ot;/u)Hxۉ+WX$~ZYЕxc\br]l_fa?_caYAe$SJgMiGl B+ozbt7{qv 0|lw)v}lymaOXn3bnncoe-y6p~fs>qfhm#r:ilg sj`sl@ZjtnSuoLnw9qEFxs>nyu_7zw0{x)e}zkel;fjlgi~Jnhxynirpjlplfyqm<`TrnqYsoS7tqKvfslDwu>0yv7zz_x80z{cy)`|{Fij>jjj6k+k7}vl^l"wmemqnmkooepp_qsqXrrURRssKuu*Dw9v>xx6yyo0!zz(| {hn hnUio|jovkp_pm'qknAr e oMr^pUsXqtQs$uK tvDPvx?=6wyb6yFzy/z{({|fGr grJgr{iDsWujzsp*ktPjNmudOn'u^ZoBvuWpwQAr/wJtxCuysTem8gNcfh7`jZKkZTm)No$MHqA;BwsX;u!5v/)xh(yY_ ZA`o~a2xc"radlIfHegv_iY7jSlaN%nqHpAr܁;tZ5Mvg/ xq(y]^|_ۋBvaUq cAk ddf^h?X/iRkrMmGpArAZ;t&55u.wir(yƅ\ˑ΀o]{5^ub`obic}cez]ygW$hQujdKl>Fo\ @q;s%5uD.w;r(fy ~>[Ж \Ry]a?t_[nz`hb֐Rbjd \Zf.V gP`iӋJlEn,?q7:.s4 uf.w?l'y%> Zޜ}[\Vxa\-r^B*m;_앢gwa͔&aUc[De\TgOOi!IkdDn8U>p9csfL3ZuX-gwKy'kyFYС-|~Z6&v[?q]*qk^癯fV``?b"Z4d`Sf_N;hHjЎCmό>7p͊8sM2uY?,wa&ypuZY3ukZdu\|v^qvav|`Qpvb6jwVcdwe^kx5g|X\xi~R^ykKzmmD%{p=K|lrB6}td0p}v)~x΋s]>.sf^s` {Jtyautcoue7iv*fcvh^]w0iWwkQxmJyoCzq<{s68|u/S}w(S~yq a%]qwbJqczretsefoo;t8giNti8cjuj]cv5lW,vmPwoIyqCz[s_<{Zu*5|Kv/}x(~zso#eof.pg*yqhRt~zgY}u5h}oj}[ik_}0d l}X^Im}VXLn}|Rpb}Lr}~G s}@u~!:Vw~W4Bx$~}.y~'{O~=d*e+zf/tg8ohiFjXucAk\]\lـ'W3mQoL=qfFsD@eu.:#v{4x'd-yG'z)Eb~c܆ydsfxngфqhYiPb@j\Skۃ#V-m,Pnӂ^KpF0rr@t39vD3ẁy-yN"'zāaY|bwcr5e) lfXghai[6jՆOU!l)OmJ_oՄE#qg?t9uۂ)3wy-xǁ'z`{aUvbI0pd-kyee=efN_hLZ9jgT/k^Nm*wINo^DFq<]>suv9aul3|w$-Ix '}z51N_ zK`1Fv+x΅$%zx~YG(xZ||x\wqy^pry=`Llyb%fyc`z eZzqgVU(ziTOk{cknIh{mA})o;0}r5~Vt2.~vQ(Iwx9vT]= v^{v`vwxaq5wcUkxSefxf`Dy h&Z^yiTzk~NzmH"{oAM|q:}Qs4}u-k~w'@5y=t``Atb{0u-cXuudpvZf,k!w gemwh_xj_YxkTym|NyoKGzq4@{s):c|t3}~v-z~5xx&~z8rdrezgskfuLt@gotijuj9dvqkf_PwlYwmSx&oyMxqG zr@{>t:Z|3v53|w-`}y`&~}zބpi`@qHiyqjStrkPosyl7it_m+d1unI^uoPXvspjRwaqMxrFyZtw@?zv9{w3|xx-l}czJ&~/{ o'mm~momxp\msq@nnBromhsp,c}sq*]trX\ujrRhvVsL(wktF+xv'?yw9c{ x3g|y-]} {(&}|Lmqe}\n6q[wnq~ror(mfprhqs;brt ]?stWtnuQuzv6KvvEww?%y`y9zz3{{-'|| &}}ykuc|lu6w@muRrnuloug]pv8aqv\Pr|wWVsfwPtxrKLuxEjwy{>xz8z {v2{9|9-|f|&}o}jYy{k2y3vl:yqwmIyl(nay)foyMapy[qzUrsz`PCszJuzE"v{L>x6|.8y|2z}M,{}' |~0i}{ i} uj|pl'|kmH|en|o`Io|Zp|Tq|Otr|J6t[}Du}'>]w}8x~2y~D,{~Y&|~uhhzxhuli܀lpPkjlFeKm_lnYosSpiNr8IIsD~u_>2w*'8Cx)2xy,{; &|~~xfvyhgƄtthQoZjik:\dXl^ymXn΂WRo MqzHsECtȀ=v7x*r2?y,[z&|P|ex/fgrgSwmhhi)ck\]ClWmԅlQnLp*Gr9mBt=tv.98&wɁ29yY=,z'{0{dv`ve%zqf(lggDhڊajV!\kJV}l}Pn*KoΆFqvAsambqhdxcei^\gXi<`SJjMl;HlmjCqo{>q̊:tڈ5vv/x *XzA${7{Y}"{Zw{\r|^nm|`8h^|:b b|oc]J|eW|gBR}iAL{}RkYF}m|?d~o8Nq3 t,v3'MxXy]+{y^tvz&_qzalzc,g{db{[f]\{gV{iQi|1kRK|maE}}Kob>~)q8~s1;ux,wa&8yNw`{xavUxtc"qNxdl0yXefygQayz>h\zj}r8~Et1~vz+x>%vyvdzvgemuvflpwqgkwhfPxi`y$k[ylFV z mPyzXo5JzpD{r>\|te8}v1~7w+~y%~zt_hz.ti7tuLioujjvkezw?l`DwmZxbnUzxpOyqKJ-zrD{5t,=|.u7|w?1}x+~Ky%b~{)rlyesAlssmWo(tn5iuBnduo_vpZ;wHqTwr|OLxsvIPytCz~u=X{w>7k|xx|1}Sy+~ z%~t{}aqpx@qpsBrqnGso{g p{aq{\zr{W&sr| QtY|CLus|iGv|Bew|<%y|}k6}z}0{x~+K|~4%}~zk?ulpmWknfo~ap~[q~VGr~Ps~Kt~Fv~B wu~<y~6Zz/~0{7~+M|O~%}v~yjڄ*tkolzjmenM`,oZpɁUIqOrNJt F(ufAHvҀe;xZ5y'0z+|%}@x iqsjIn0k0iTledImz_noYoDŽT0pτuNq߃Is4dE t@Ov";"w5yAg0|z+{%|vhqi4lj8hkVbcli]mXdn&SokMqHruCs?Tu:HwpZ5=x炿0(zW*{~%<|ڀuygplhukhjfjGSakhW\lŒaWSneRo-jLp^sGqɈ.BsN>Dt9;w4ox/Pz/=*{F$|htWfoDg*jDgՓeiDF`jx [kԏV?mPPn{kK}o7Fq.Ar‰.=Bt{8v憊3x҅Z.zQ4){$i}s1eΛFn f,Ohfd`hT4_hiZok`U6lOmԐwJ|o1Ep>@rWjM-|nG|pA}ra;~t=5c~u0%wN*Tx%9zL{whux_hoxixk)yJjtf4yk^aJzAl]\?zmW{nQ{soLa|qG8|=ruAy}!s;}u5~sw06~xh*r~y$NzyvklUtbvlpowsljzwmekxznh`yyo4[y~p@V|zqQdzxrL{sFh{tPA |qu; }Mw5c~xK/~Vyn*o~z${xStps_uhonvv ptivpdw?qn_wrZxosUysPytKzGuWF?zv,@{w5:|x{5&}}y/~z*n~r{t$d~|Bws`srt smtshujt*cvt^vtZw[uUxv?OxvJyjwEzy90zv4.{a.|D)}"$n~<rmׇn9nQRiio dpI_q ZrnUrPs烖Kqt΃-FuBTw=xN8yЁg3z.{)|倀$T~qyl_lm9hmc|o^pcYq&Tr6Os3kJnt3EuOACvrGBs>Ltm9v5y(J1[z,{ׄ'|# ~#wgZMrZ[~mXo\iB^d_`H_ˁbZՁcUePgTKsiTFcmkkAkm:Ёo6'rm0ց t+v&=xu/]Jq^~l_hAacc ^dYf=TgOˀieJŀk4EmJ@#oT:tZql5Vs0v*\x%Nzt_`p_&al1Mbgnd;c#e^dfYXh_TmiOGk0J2mE!n?Yp:r5?"u0v*x%Ezt,}do}dk}eg~ g bz~Yh-]~iXX~jS~kNmInD2p?/rP9&t)5GjvD0$hw*ny%2u{5t|h ot|Bhgj|ifH|ja}k\}WlX}m>S9}nNNE~ouI ~tpD.~rK> s8uum4wW/?x*JzB%QM{szknzki{/lZe{}mD`{m\"|"nW|oR|pM}#qH}rCn~t>~~puf8~v4s~xu/I~y*;!z%*+|KrxoCn ySoLiYyodz:p\`zp[Y{qV{|rR{sEM8|Jt&HZ|uCJ}Fu>G}w8~xJ4~ey.~z)~{$|rwsm>xshxs1d ys_OysZytsVzsu>QCzuL~{ivG{w;B|w=}>x8B~;y3~0z.~{)~|%4 }qv9vlxvvgwhvcKwv^xyvYxwRU8ywPzxMKzxG{]y^Bf| y=|zv7}{^3Y}|4.K~R|)E~}u$1~5p.tzIkuyg6vHybvy^wzYxzWTxxzOyWzKLz{HFz{A{{=C|f|D7}H|2}}z-~&}(~~E#8~oGs}kt}hfu^}7bv}]Uv}5XdwR}cSx}rO7x}Jyj}Fz=}Ar{}<{~7|~h2}h~-}~(~~#4(n?ssj"set>a*u \uÀbWv_XRw,=N3wI{xEy}@zb<{O77|S2C}-N}(P~]#|m rJhrd>s-_t![[tVuy~QvzM'w?HLx hCx?yՁ|;z6s{ԁ 1|,}n(~'g#Ykqg{qzbrv^rZ"s8UtPuLvixGwBBx+>sy#d:1z5{kg1@|W,}9'~-#$~jpUOf?p3aqd]r XrՊTsɉOtKuIF vlAw_=vxh9Ly[4{0|24,}Lo'|~"~ iozeoi`wpM\Sq%8Wr4SsBNt3Iu#Du@wLm9}}z:c~}5~~+0~~,F/~' #2Khx*dxa`Cx\"y5|WyxS.z kNzgJe{D`E{\A|qK=} 99K}64~:s0H~+#' "|gvc'w^w{PZwVxROy(yMyނ)IVzrD{@{9<|^8z}4/}/~u+WV&4"Ueuav]vlYwUwQMxMLy#HJyCzh?{g;{‚7| 3w}/;~4*~؁2&p"1 *dt`u\ubXv&TyvqPUwKxSGLyUByֆ>z:{76|<2}<9.~*~x&W!dtT_tp[Mt^WtuKS^uOUvnj Jw FYx~Ay8=z9z䆮5{ۅV2H}.~#*W~R& !>bs\^sZscV]tURLu<5Nev"4Iw,EYw@xڋBo1:ȃq[7:s2)u-wc)}y)$ɁJzg;ccd_e|\fX gSiiOjdK,kFlB\"n>o8B'Tp=ۂr^:%nt6$v1'w,[{x'PIz\#{gcjctj^kZփWlpVWmARl3n(NsoQJpMEqfAr=It#9lu5wD1ex,ցz'{9#C|fmb7$n)]dnZOocU˂cp Q9pMт-qI*rEG"sA1t=u8v5`"x0%y,_z'䀡{#ʀ.}Teqaxq]:XqYh/rVU9UrQNsoM(@tMHށQtD`u@hv|;|77'}835H}.t~U*~&Q"7^b}V~^}a~Z}~~V}~gR~~fN~^~fJ^~~fF.~~pA)~p>"d~:~6~2Ӏ.BC*Pi%!`|]4|;Y~|{U|Q}M}VIq}ƁEU~*A~=8~݀9w75j 1ހH-ր?/))%SҀ!5_zi\"{X{T{̅P|HL|ÄPH}'Dq}w@<}T|:}d7 }Ӆ3~30~IF-~%*:H&`T"x"\xݓ;XxёTxcQPylMz0dIz؍nE{r\A|L=7|59|6c}z3}Ȇ?0}ʅ-~0i*~z&A("oc̎[_1\&Zy]lWPd_*Sz`OՋbuKߊdNGSfCxg?Јj<lG8 n5,q1ބ"s-ăFu)x %Ez b=]^^Zm`"V8aRc?O'dK71fGhBi?6k;^/m7pa5 r1u-mw)87x$zaˋ`]aZ7bVdReyNҊfJˉUhoFiBDkf>mY:op7fq4=t1%Ov-w)"y$ŁC{Oa`c]doYv~ePV fR1gNfiJmjkFhkB;m>jn:p7s4u=1v-1x(z'#^{ag\gXgh;U^iZQj[MՈkwIlE%mA䆳o<>Cp:PVr|7@ft\4Gvj0w,7y&Ձz"|^a(j,\'jXGEkTڇlPxlM#$mIo EwKp%A{qL=sr:@t16u36Awy/x+Ђzb&{"{k|`cmE[܆mWn5TnP2oLy:poHqzDrRA4sP=]tm9iu6w2x/[Ry+{+&с|K"P}b_~p[ApW!q;SqO̅rPK\rHesDgt@suq<҄*vh9gwe5Ix~2y.F{+P|-'Y{}##P/~^taZt$VtQS2tOYu KyuG̈́+vGCՄv?؃wx<[x>9Ay 5y2{).L9|*|&^}"Z~]̄ wgY&w&V!IwMRwNքwJx,G,xC7y ?=gy;փz8uz5@{m1@|q-}()}%ށ~\" }\̓hz*Ycgz2UwzNRGzxN\HzJ~IzF{B{Y>{;?|7||p4B|1 }-h~-)t~%c~!sU[΂w}PXj}WT}hQWr}`M}qI݂}Eׂl}A}=ނ}:K}7m#~"46~e0~,(сJ$S ZUWKJSPMLdILEʀA1=N.9ʂ6v3#/j+܂($<  S#YHV0LyR݀#OFKkHJD@!@mhz%"{XU6Q㇢NDJLvG$CV^?;$]8w 51 S/)+ŀ)aO%Ѐ"$(W~T ~P8&M3VAIF5#Bv;>V:ŀ74ODŽ1B.bv,_ )FĂL%ꁹ!*V~\/S~POx~vL2~ԍH,EDAϊ=ŀ9ր\6D3πo1 CV/],H.(t%-!Xm[[`WN\}S]P_nM6`I؏jbFF_dBefG>fh;>jU8Kl4o-2&q/ta+Jv|'kx#zZk^Wc_$Sԑw`gPw|aL䏰cjIddEƍfBhK>+i:k7nW4p1߆s].Uu*{w'yx#4{qZWM`VaSPbP3dd2LeI!fEzhA j =4k:m7Bo4qur1 tt.v*DŽ#xN&Rz#3{YEcVdoRۏ0eGObfLHgH܌iE=jyAQk=ʊmL:dro+6Yq#4MsZ1u.wm*Ճy 'z#e6|EZFfVgTRb0hO1Ti3Kj8H[k]D݋)lA-}m=roI:Kp6r4t12v-jxJ)ky%\;{,!|YʍiUIj'Q jNEkK'lGҋmDrNn@‰p=' qD9ш:r68tN3!u0w-$yE)}z%{!Âb}X;lT5mQ mNinJoJG/Gp%Cq=@Wr%<ψcs29}tg6(u3&w-0ix-)z*)5q{X%t|!Y}XMfp/T:pEP7pMrqOJFqF߉lrC~s?ڈOtI<+u29vC6JwS3(cx0z,{1)+a|L%{}H!҂d~BWsS[skPRQsMFtI܉GtFsuB&u?Nvb;5w8jx5x3y/˄Z{3,]|$(Q|%k}!H~VvSXvbOډvL̈vIvw4FwB\x >"x:y8%y5>dz2΄{d/x'|f,}(.}$~s!0 U͉UyNR͈yUOjyzLk/yIyEz%Aчz>-z:l@{"7{4|#2m|.̈́}+U~'W~$K~ ]T܈|NR|VN|tKs|Hx7|D|A4|=2|9}06K}w4c}14~&.R~*僯~'~#- HuSePM JeGXD(cR@/=-9\56r73&0Ԅ <.}*,("B`$h!zRzDO"L8IɅoF܂1CLց?t ;8σD5V2/)/k-]*rT'Ӂـ$py!! :7+uc41/*-A*6d'\$t ӁOȄ܎L|IńF܄:Cń@@U=#j29̈́Ac6K 3̓Ά1KJ}.̈́y-]ل *i'ƁO$6>!dS[P]L^AJW_GNYalDDc @d=wf:=h7^j4Qm61=o/rv,t(rsv$Յ_x!z$u| }sQޑl_NpLlJmUHnID;oB?o?&Bq;ڌlr8s25wtx2|u0 wb-y*Ʌzl'{$X| }QUoNZoJpCGpDYqA؍srS>sN;ht7u5Gv92w^0.x-zC*{x'|$@}~ ~P͐0sMrJ:1s'G6sDt$Apt>-u:;v!7lov4߉bw2F|x0Jz-uM{g*P|>'n}\#~& ~OuLuIΎyuG2vXD/vA4w=cw:Vx76׊x4\y1zf/{`-6|m*-a}H&݄}#tM~ 4NxLJxIxFyCڌCyP@y=@z9؊Az[6Mz3ۈ{]1v{/f|,#}|)|~&C~"ㄍN:{|Kƍz{H{F=={CO{@')| <|;99|5=|3@W}1}/~,3~u)+H~&~"<->M_B~J挆~H">~EVw~wBu~z?\~;~p8~5)~3 ~0A~.\V~,GvC)CW&胲K#܃5t LQIG;DgӁNA)>9;.8 .4~2ɀK/؇(-+Z()E+&⃆#) mK[~HދF8CwN7@=ȃ{:tB#7\܂4fm1ۇ/qЁ-J܁(+v *(n& # )cJ+{G׈PE8Bׇ#?<ˉd9{63~&l1[.↙,ȅj+0̂L(B&-#='2 FˀIFʊAD-A>׉\;8Ո5ֈJ52膁0a.jm,хf+'U(%^# 3xLi\Iv]FW^D `fARNa>c;ɕ ea8g%5u0h3k(0͎m-،pW+s(ouF%1wX"he;lrgk8L!i 5j24l07[oD-hq+tO(vg%lxS"z=х|0L}aIMbMFԙ4cMDdA0f>Egz;Qi(82j5 5lU2pnS0p-r+uS(wD%uy ""Xi];;j8lZ4m2ho/ۍKq-ŋt'+vS(dx%Jy"Z1{R'|Ls$fH@g\ESh CGi;@jR=Γk:Sm7/nF4Əo2Hqr/sM-'uJ+nwU(̈(x%zp"{\}eK×isH&iE;kjB;k@ l=im:o7p34aq}2r/ot-vx+n*xX(ԇy%{0"r|;}J lGږPlDm#BGn?sn=-o:Pq7Tr'4OsN1ލ{t/g v#-w+jyx(чz%{"}&U~XJmboSGso~DxoBp?rq_<ϑ{r%9Zs)6Ut 3Ҏ?u1pv;/0w-x+pz(χl{%|"}q~JrG{(,|%k}"h~Y52I3%uXF%u7D5u_A-u>IvJ<Mv9Ewe5Ow2Yx0Όy.za,h{d+ |'h}p$熫~!υ~0rH-wF(wCx$A\x>x;ُy#8y5dz2zw0 {,.^y{,؉+|*5\}'*~9$~!UCGizEzC2z@ɑ{#>!{M;MN{8e{4ڍ| 1v|O/v|.=}O,|}*ևX~2({<~%~"N"e?Fѓ }D}Bg}?Q}=I}:~}7`}4S1}1O~/P#~2-~,~*nM'%ZiS"F9CJAk>ǀNL;8ߎ(u5j+30ꁵ.eb,+W)نր'…Հ%7"X}dC\Aː?hL=?:[O8 ӄ53)g2t|/-,*ˈ&)K܁'>聟$V[!򄾁I&BuD@ >Av`dw`Y gx'QcixIIlzAoz:r!{2t{|+v}WPxRswTywYVwXw{[xMt]xm_ygay_ctyXxf zsPhzHl{ABn|e9qw|28s}*v:~N|ՒP|/R{)U {ـW7{zY{s[|m]|5f_|o_bb|We|Pg}HkX}@n(}9p~ 2 s ~]*u~LDXNpPچWSgπUyX#hsZ`nl(\ae!^b^5aLKWId13P0g)%H!j\@m"U9noJ1r.*LutK9MIOa\Qك_TGqxV̓ r;Y*k6[]d]xd]R`JVcaOfsOGi݁ @lÀ9o\1rX *)u!IgKÉN P<~oRx Uq6X_j7ZIc\{\b_PUb/OexG2i"?l/W8Io1q)trHS4JLLЃ|N} QpvT#oVKhXۉa[:[^ Ua?NGdGUh^@Lk38]n1q )ts#F|H/sԓ,EGLQHK̖ZzwNLtYQmSŒ#fVI_uXfY[S_)LtbEEg>j(7m酯0p8)msD",Eb+\j1^kX`eltzb>mt2cnmezofgp_}hrCX9k&sPbm|uRHovA,rx<9t~ΓOqQى)Sf V,R|X_vZ~o\iM^b` [cDTf'"Ni -Fl@s?ny8xqz0sT)lv_R#Nj PDR.Tb|3VuYno[fhR]*a}_ZbLT,eQMhYBFfk ?FnO8/p0sl9)LvHL/8NPĈ4S/{4UtX3`nZigJ\s`g^YaIuSdeMDgPEj>m^7pm0ps?)fuKp M ІHOQ1yTXsVylXf[+_;]k=Y`gRcRkL^fsEj?l7tp0rrǂ>)_usfIKMu~PCxRrKU6kWdY쌁^\8X^_R bF KpeDi|>7lU7noT60r)t,HltJ?mKۖ}_Niw6Q#qSגjqV_acXŐ\[W]WQ1aYJzdىDhň{=\l5 6oQ/rC(t፻G8·HÝ, Js|M8uOҘmoRi[U85bW[ZV\WPO`jI{dVChXU \VOR_HuczBg;ukF4n-qچ'.tߘgTqgW! hNYi-[j^=zk `ptlbn.mdgnf`oi Ypk7Q rmsHtoA v#q9wt?2Fy v*zxTdZ e/[re]rOz8t{1 v|)Xx}pVviXv$zYv{p]vuC_w7nawh`cPx)aex[ gRyUTLiyMl`zEo,{>q|;7s|0bu}z)Pw~MT{4VEzWzTZ.zz\/ztl^bzm`6zgub{ `c{nZDfG{Sh|Lk|E]nw};>Cp}7zs~0Ft~E)Fv~GR]fT~݅V`~X~uyZ~@s]~l^~/f|`~$_b~9YYeA~aRg~cL j~Em~>oW6q-/th(vŽIO퉖Q|iS{/~xUx.X qZRk\df^t]`WScXQzf/ KviUDlc[=Co6qn/t)vzfaNh TO持Qҋ|T@vV{UpuYei[BcD]X\_p;VbMvPdJ}hlDIk=n #6Yqut7wv0y x)zzrb^bcAdIdHeU\ef{:fgthRi7nijhwjkblm [mnTo3pLqrEsnt>u8v57vw0xys)z?{~_gda`h5Rb+iXtw7qvsy0x>zx)wy{ޏ]l0^lh`$mCanyc[nseomjfpg%hq`ipr~Zk\sRmjtKovYDr w=tx7Bvz;0w{o(y|"[q"\q(^Oq[~`qxar\rcrle.sfiftu`hPuAYqj5vRl^wKjoxIDcqyu=szr6u{u/wh|](yQ}Jg'wXi7xRkqy1K nzDp{=\r{6u|/v}:(x}CWz*2Yfy*[y}] yw=^yq`yjbzdd^zK^{Qcj{aJmC|Cp|=r[}C5s}x/hu}(w~;VC~gvW}SYh}|O[x}cv_]f},p _}iax}7cc5}:]$d}VVgB}Pi}Jl}CloI~`k)8nF'2qHn,t&vlU~m$WmsYn*[yn]so_mpkbgq2db+qf[Js&h:Tt2jLulDwjo1=xq6ys0zv)Y|xcAj$Z5'j[kP]'lB_y&magrnc0lndfof`phZrjpSsAlKunDvq-=wsF6yFu]/zwr({yu:g^z7hl_׃i;aW~GjHbxSkTdxr+luel,mgf'ni_ojY5plkRrnKQt"pDur=*wKt6Sxvk/zxR({z,0ecbf7cȂg)e}DhnfFwdigq`jhkklj!eXm;kh_,nXlXonlRqpZJs1rCCut'rat CItLuz{1`k2blc9l{dmuf-nRogo"iip cjsq]krWQms2PmoNtlIquBswJc~njdxkPf sllbgKmmhgnibok#\)pliUqnOspHju qAvs;0xu4yuwU.tzx'|zfog gDg}h5h{xiirjjllkg&m3laUnQm[}oooUppwNr7qGt6sAGuub;wv4yx.HzXz'e{{hdik=eXk|fal6wEgmqimljynf^ko`mpZn6qTorMqjt Gxs\ur@uMv:wxZ4xy-yz's{l|&{bqofcyo{dpvjf ppgq1k,i qejjr_ks|YmtRSnu,MppnvFrwF@tx:nvy3xz-y{'V{I|ۄ`sas{csudt@p'ftjgudiu^j{v,YkvSmwoM ozx Fqy @Csz9uz3wv{-y|'EzV};^xf4`wzSaowtc,wo`dxifkx'cgx^iTxXjy]RBlyLpnz2F8pz?s({9u|I3v|-lx}E''yu}]!|~}^{y_{t a{ncu{{he+{ebf{]h>{Vi{QTk|!Km|UEp"|?r~}E9Js}t3Pu}-9w}'#y~1[Ȁn}]&x^sd`Omb7~hd~ae~\g8~Uh~Pbj~Km ~Eo~?{q~9-s~3u~-ww~&yj~Zl|[w]7rd_ *l`䂬gb#`dZfTgcOsiJ`lFEens>qF[8sb3uR,w0&y&VeX5{(Zvn[p]Mk_peaw_c3]Yd߄Sf\NdhσI>k2D>n`>p8rk2t,vm&x~WyX7tZ~o}\I~j)^d`^uaXcRe}^MVgچhH'jLoCmMi=p8:rb2t,vb&xg|V@xNWksXn*Zh\ĎcK^̍]V`iWbdQd|hLEf!GiBly-v3AzxY,{y&P|{@$gj}'hk-x=iksjlmlmvh!mQn^bnoZ]!op^WpqkQrrvK$ssEu5u>wv8xx 2yyc,{Bz&{||en|@fowfho~r=iDpljpgMkqkam.r5\unisVosQqtJruDtEv>pv>x+8wy\2ykz~,z{&t|>|d s{0e0svfts/qNgsl i8tfjtxaku [m2uUnvhP0pw JRqwD@sx>'uy8wOz2Ex{,wzW|h&h{}~bEwazTcwudwprfxw1kDgwQei_w`#jxZl xYTmXxOdoyJIpyCrze=t{:7v{2%x*|,;ye} &Tz}}`{Qyb3ztczoe&zjfze h$z_XizYj{Sl>{hNn{I4p{Cr%|2=tJ|7u}+1w }k,y(}&Dz~},_x`~t*b;~o$c~bie\~dDg}^h}Xi}RkC~Mm.}HoZ}Cuq~ =Vs~-7muj~J1w ~[+x~i& z}~||7^98w_zs+`n/b&hdcSe@]goWh؀QjcLlGjGnBplaglbad\GfGVVgPiK~KkXFmRAopi^I\d_\_`aތTYd2Tge>NgI`Ii.Dlk׆?n:qA5s0uׂ+4w%hý!vXfrFYmZh\c^I^#`ǐXbSdMf\zHYhC\kHa>n9p4sf/u߄7*x%yuNW[pXlY1g[ƖbM],\_ޓWaҒmVv^%hwH`bwa]xcWexeQy5gKziEzl(>~|:n8}q1}sS+~tu%w׀s?Zu{s\wt&]rt_lu[a1gDubavzd\9w f>VwgPxRiKykDzQn(>{p|7|r1i}St+c~ v$~xq'^+zq_|v3rP`q7s b}kscftenauHf[uhhV"viPaw_kJx0mD#yo=zq7E{s1B|u+h}w$~Xy~~o*b yocu:pdIpEqeek"rDfesDh`tiT[*tjUukOvYmJ w;oCxql=]zs]7P{5u&1b|?v+K}+x%Q~zF~om>fNybmftXngoiohj=pieqj_rl%ZXsmITtfnyOu~oIgv]qdC0ws=%yft7/zvw1/{x+n|y%}{}skSjKxl"jsmkCnnl)iho!md,p:m^q>nYrCoTAsDpNtbrHus`Bwtmqe 9s邀4v/w9*gyl% zsP]ӏo^j\`"ea`c~[e:V.f&PhLKvj{Fl#YAnS'=?p8sb03u\.ww)y${hy^cy_^z7aYaz}cSzeN}{RgH{iC3|l u}9!ww}q3x}.z&})i{s~$|~Sse݀npg_ih0.e^i`zj[ilGaV+mzRPnAK[o2FqwBs5~>#t~8v~3xh~.~y~)N{~$|~qhdkm2ehnf#ch5_$iFZ-jTlFOm3J]nEpzA}rG=4t@8`v?i3w܀.1yS).z#|lloc Ukd9geQ/bf]hNXiɆOSk9Nl*Ibm넝Do@lqx_p>{:rc 5t11w0,xՃG(zM#|IUlR_xg`cea͔^cw?Z+eU`fɐPzhrK{j2FckAm_=coĉ9q5$t0w9,y%J'mzσ4"|\x {Wsr|Xm|;Zzi_|T\Td{|t^_|_Z|aU|cPq},eK3}gF}i@~Ul+9]n40p.s )%uD$$fwuyZqpz \mzt]hz_Oc{"`^{gbY{dPT{fO|NgJ|iEO}k?|}m9Y~pQ35ra.te(vs#x}tw^px8_:lex`gy8bc"yc^:z'eY:zfTBzhO!{eiI{k|D|1mz>}#o8~q3~s.~uu(=wK#y!tuap vubk~wcfwdbBxNf,]}xghXyihSyjNzkcI{zmJDC{To>|eq 8}qs3~t-~5ve(b~x #ytt!eotf!juff0v*h axvi\wvj0WxktRxlNyKmHzoSCzp>3{r8|t}3)}av -}w|(a~:x"~zKsrficns4iitjBe}tkA`uql[v(mW6vn$RNwo"MixBp:HWyqnByr=zt;8:| u2|wK-}px(e}y#0~t{rupmmqm=i3rmdsWny_t$o#[toV|upQvqLwJrGx?sByt=z(u7{wS2|ex-}y(R}z#*~H{qopmpph]q q*cqq_rrZTsrUt}sPuat,Kv@uGwEuB;xOv==yw7zx2f|y-l|z(u}{#m~r|pmltlIntgotc*pt^uqu*YruTsuv6P tkvKuVwCFfv}wAwxp{hSNq{NWr{IDs|Dt|>@vT|{td:vd6+x 1yk,z'{#}@`kgfh+Ybpi?^%j@YkⅺTm2'6{΁'"}$hd,d\eƏ_f[hzW1iˌRk3MlĊI&n DpK:ri6t^<30w2.x*z{&H{ !}S q|Wmp|Yh}Zdto\k_b^3[uP`VbaQcLeGgBj =Ѐ.lN7Ȁn3"Fqp.7&s)Cv4$H xo}FZl}\h}]c~_U_<~'`Z~;bU~kdLP~eL ~gG9iB@+k<n7m;pM3&r-u'(w`#yn{s]kP{_&gM|,`c||a^|cuY}dU%}ZfiPl}gKx}inF~(kgA~`mq}o ;~Dp6~r2~yuB-~w)~x#~znyx e$j xeey#fa`yg\z hX`z}iSzk3O {llcJb{mEc|o%@|p;}r6~ tM29}vW-V~Pw(~y#~{?mv_hiawi4dwi`x9j\$xkWy4lS"ymN~zVnIzoE{q8@ |@r;W|t5}u1}ws- }x(]~NzI#~{ltlnhuld%vFmG_vm[zx;:k{y5|?z)0|{{,=}?{'}|#!~W}jpow=f#qow*arbw']s@wIYHtwTtwP/ux`KvxFwfy1Bxby>uylz4:zzz4{{0b|#|\+||'}o}P"~R}iLoczespmzdaGqSzs]r@ztXszTszOstzJu{;F"v{Aw{=x|+9y|4{%|0{}^+|}'N}U~ "~&~^hVno~MdtoS}`Gp}\q*}Wq}S$r}Ns}It}Eu}@v}=x~8yG~)4^z~h/{~+K|s~&}]~"O~?~flVcmՁ^nZoӁhVtpǁ*R qMorHsDuR@vF#<wv7x3z/{,+|&&}}"<}bekwal]{mbYn UBoPp'L_r Gs MC t8? uS;v́7.x,=3y.zЀ*{ۀ&<|N" ~d]j}`fkn\Al%UXEm}T n OoKUq.FrOBsop> tۄ:!v46Ow2MyD.7z*1{с&}!~c4idd_,jG=[ k8Wlp[RmNnЊJFp4Eqi@r u5w/1y -zR){ꂕ%}!j~(/b h_]i:[Yj0 UkxQlMn IEoyDp͋@r/<sI8]u14v1y-*z){߃%}+ ~ak҃-XgYRchZ_M\[/z^\WA`0R"bM.cI&8eDg?‚$j6:ʂl|5o@0xq,27t"'vj#xiZf\7b8]^J_qZAa V&2bQ:d^MNfHUegCci?ck:)knT5&p1s2,vui'Ӏww~#0RyiJ]e_b0`^-aYcnUidP3faLq`gGijCm9рo5Br(0~t8,Qv8(xB##znh}a1e ~b-a&~acM]-~dY ~eT~gP]*hzKqiG>k$Bm >,o9qA5$sl0u_+w('cy #1kzh'|@dd?|el`n|fb\`}"g}X8}chS}iO}kK/~Bl=F~m{Ao=p92jr4it0Uvm,[x'Ay#V={gzth;czh_{zi}[{jmWq|k_S|XldN|mJ},nF }oA~q=~|r8~t!4~u02~w+~y'z#5|g9xkc"ywl_z$lZzmpVzn>RS{@oN-{p I|Cq Ex|rAF}9s,<}ta8p~Lu4O~gw]/~x+~y'G~{3#|fwfo\b/xo^*xoZ4yYpyUyqQz4qM{zrI0{RsqD{tO@|~uB<}vA8-}wG4~x/~Ry+~z'e~| #$}9ev/radvr]mws/Yx/sUUxsQy>tyLyu2HyzwuD"{v|@{w><|mx7}'x3}z8/m}{"+~l{&~|" }dtv8`uv!\vvMXw$vTwvP^xLw5L"ywGyx'CUzZx?c{yF;{y7|z3K}({.}|<*~!|&W~}v"~c:tAy{_ty[\uyX+v>yTvyOwkzKkx+zJGxzByz>z{{S;{H{7 ||C2||.}G}]*^}}&~o~!!~b>s,|^s|[tz|WDu7|Su|Nv|Jw[}F6x0}&Ay }7=y}`::z}6H{}2i|l~7.M} ~t*}~&"~!~"Q~aq]r8Ys}Us߀PQt*Mu~IvuEHwT@xIvp?wp < xl8HykC4zĀ0{‿,|(}m$~<>!^o:][oꈖWHpS~qwcOrmKscnGwtC.u7>v:w7xx+3z4\0{},n|V(}bF$~Q 50]vn/YnڌVo}RFprNqu:JrFsB9t=u:w6xp3y/{-b,H|||(}$~: Y\RmEXmܐTnkQ!opMfpIqErA4tD/s+iu'Bx"zb]___ [`qXaT,c]PdKfnGjgCbNi?_ k;gm7̂p+4-m<;oO7dq4 s/u+w' yyS"&{#ado^%e!Z8_f VFg>RahZN΁QiJ́[jFkl(Bym{>Io9:0p79r3ԀQt.Ҁv*ՀOxZ&'y"{au g]hFYi VjR3k N)lJ6LmLFrnqAo>q:pyr6stQ3 v9..w*y>&z"V|+`}Pk\~%kyX~l0U;~lQ:#mMD+nIWoEpAq=r9t@5u2w_.Ex*Fy&F{E"G|_|"n\|nX:}zoIT}oP}pL~%qFH~Tr6D~s@~s=.u9odv5w@2+yx.7y*s{&|J"}w^{r-[w{rW|_rpT|rP*}sOL3}AsHH}ytDE}uI@%~,v<~v9~w5x1z-]{ ){%|"}^zuUZzuWV{Zu~Sj{uO|vK|^vG|w C}w?[}wx ;}x8~/y55~zi1{~{s-z|4){G|%w}}!~F]Ny5xUZyx[VezfxRzxO{;xK{yCG|yB|yy>|zS;7}gz7}{Y4\~<{0~|-~}]) }$~ ~\Sx{Y'x{UyC{Qy{N4zD{J`z{FI{E|-B<{|e=|`|:||7B}k}"3}}t0;~V},i~~T((~$~ 7[vbWw'?T{x&Px My/~Iay~EOz_~Aw{~=|{~9|m~65|~2}~/~-4+~B'<d$* >YuJ@VuSFvԂOwwdL x=!H[xD^y@znk<{<8{ڀ5T|{1}CJ.O}Հ*~O'b#@#-DXtNUOt܆R uYN}vrJwHUGUxC`xلp?y;zr7{A4t{[0|-}h*~8d'G#ǀsԀX:WsaT3t(Pt݉MZu.IvtFCwBBx3L>x:yȅ7'z 3{v60|%R.T|M+e}@H(+}%f}!~EV]rS sNOs|LAtƌHuECv Awwu=xY.9yE<6(y3sz 0_{.{҄j+|D(}8w%Z}ǁ!~^v XZ>@YVY[.Ru\O'^K+`}G舎blCdI?f;_Na+KLbG:dCLPfT?Wh;Ɔcj*8\l5oE2Jq.t"*΂!v2&xB"zZ\X^XX_Uwq`cQaNNc[JJdFˆfBh>#i;fk7n 4p1s.oAu *w&с"x"z[ІaX9 aTckr;mx7!o4Ã>q1RtC.nv*:w&Ԁy}#2{9[md:WdSePg Mph-I|(igEjBl#>Gsm:o[7;q%4{s61ud-ȁw ).x%za!z|[ gLW1GgSZhP#`iLoWjHӄ$kE_m&AnT=ރo:f[q7,r4!Xt0ցv-qDx)Ày%{!S|Z~ jjVjRkOeSlKamkH,/n[D݂o{Apz=|q:r6vtE3Tu0mw-,y )za%w{!I|YmUn-R6GnOofKZ?pG;pD@q@r<ǂs9t6Nv3Mw_0&-x,z )e{[%g|!ހ2}XqqUVqlQ/qN|rCJPrG=csTC+t1?Vt<^u9Tv52w3 x/̀z%,G{/(|%%z}!x?~'XtrTttQ(?tM?uJmturFɀuC"}v?`w;w8xx5`yJ2z5/M{]+ր|;(2}$}!i~WQ~;wCT~wfP;wMntwIx2FOxBx>y_:4y7̀Tzd4ր\{1׀q{.q|+=z}D'}$~Z p~VV},zZS?}zP!~MzL~|zI8~{E#{5A%{l>#{:<{72|Z4T|1^.}9.O}*~A&~#t~ۀRT{}Q|A}N}}K}W}H,}}D~C}@~i}=z~~ 9q~%6~<3B~K0 ~u,׀y~)$&ZU"B;SzIP{rM{NJ{|aG*|C}|@?}<~Ul9t~^6 2o/,)&Do"ˀ΀ Ry|OzR%L{ Ii{LF|%B|ƃ?H} $;}8g~D5+~1~遏.<,/)l&#K 7LQ~xNvycKzB8HNzχE{xA|i>T|:}/C7J}4C~1X~hC.~,~i)~&#Q{VP_wM^xJ{yЋGAz"Dz݊@{D=O{x9|6K} 3i}u0}ل.~ - }*}%&~o#j~ z~VT+XRZO[lLR]6H^EȌ`Bdb>Ջ$d;BMf8h{h5Mk}2n;/q,s)qu%x2"zlU[wR\OI\^ L_HaQEKbAd>Opf:hb7jw4͇m1io/U(rz,R.t)Kw%Uy!{$T~^7R G_FNՍ`gKcaHYccD dAAf>hP: j 7W8l$4Z/nv1Åq /3s,u) w%h#y!Łk{T{SaQ]aNbKXd1GЊeDfAEzh=ӈj:^Rk7"~m4o1NrD/&t,*Jv)ux%z="{TSdPdM{eJfGRh DiO@uj=ll.9m7o3˅qc1~s/u,Tw(ay;%Ez d|Sω9fPr^gL퉍hWJ!iFˈjC$k@um =)nH9o6q13ׅGs1Pkt.{v+x|({z %M{ <}S(iOшjvLak1Ic!l.FmCOn ?o@ s;t8ue5d*v2w0|%x-z<*nW{V'5|^#}[ :~dP sN9XsJ}t HAtoE*tAuS>snv:Ev7[ wU4уxB2l@y.0QzB-?y{f*<|N&ׁ}#} 1r~P#SvRMlvJׄvGhw?DMwAv$w=xd:mx6ʃyZ4;=z 1Ղz/{,]|)7}?&f}#~i~O=WyPLԃTyJyG*zDz7@rzp=`Lz9΃={ 6&*{k3{1c|v/-Z}, A}) /~ %܂~"~70N0|K |I|Fk|C+|@ }<} 9c}>5}p3>}0j}.E~"+ف~(~%"Y& ~M/J GEB#?;Ɂw8@x5r}q2I`/݂+J-A+I(o%["-K IpijF̓'DقA5/>%::x7⁾4l1ρ/FĀ,o+ A(r/%&g"=MUT,J`HtEӀ'bC!<@:Y=2: f7W3ҁ|1Fg.`],!*ʁ(%ӀC#  I~ËnGT~{DvB$?F><@s9!6 ۆG20j̈́.-$w_+H)&#k聨 B,/NYNK۔{ZH [E]C _P@;Ga=i_< j8QlV5ʊm32}o0]sq.Zs,Rv)DŽw&y#߃ {P R|LʎfI؎Og]FΎBh9DHibACjv>q k;7m8nY5o2҈qX0qsC.lH9m2ECmChn@od=hp<:ʼnqU7rR4su26t/نv%-w+}yi(ڄ:z%{#}\~VJspHLPpu6vU3Y^w1(x/Ey-zK*{}(\|t%_t}C"C~  ~I;uG)7|;R|=8/|Y5 {|1݆'|/}#-}}+y}*(~]'S~$~"΁~ UF݆~D~B^~?چ~=/~:n~7]~4y ~1`~/7L~-#~+:<~):'R2l${!cEGLCAY+> kg;Yj85ԅd<3 D02.,BL*󃛁`)0B'~$ł")Ԁe}CE]Af?=T:l7.'424"/rׄ-aU+R**)Ju|'D&$"jnlOG#YDՙ[BNL\?^(=>}_:a7c}5Met2"gm0/i.A"l+c%oy)wrD&!t$ v y5ń{lG\jE ]B ^@ `n=5b :g&c7e}4g\1Џi=/Ike-n+Ep)?s&u#߆w ҅z |Fї^D_BY`?b^= c:FTe7y0g84i1Əj/dl-Mol+FJr)Lt&kv#Hx ;z>|FwaD*b)Ac?ddȒf<1h'9i7#k4Vl1n$/C]p-r+5ptO)pv&xU$Wz!n{t}KEۓfCOCgB@Ԓh6>viX;ʑjw9Mk6m 4ny1go/q-|s+u)Yw'wy;$tsz!|G}E?oi8B8i@Ej=֑l8ۏ*m6S9o3ÍMpl12]q.ӋAsE,ϊ u*v)=Zx&Hz+$nR{!|~=Dl\BNl@m=7n[;>_o68dp6}q63[rH0st.vt,vT*Rw)Sy'{ $~ |O!R}}~Do}Bo?p;=|Gp;q8vrM5sL2t,/0u&-,v_,Zw*ˇy)_z&{$|!}~CW\r;Ar?Xr=>s}:͍t8:t5g(ud2Yvv/?v-gw,2y+*χz`)k{&:|#Ng}~ Y~RoW$Bdt@)u4?Qu=v$:v7Ov5ww1͊x.~Ax,ȉPy+Uz*‡B{(J|%s4}p"~E~|Aw@bԍx{<9x: zy7qyB4{'y1Kz -z,B{7+ |*m|(х}?&}$0~!N~ A.z?.z={;^{19%{Y6G{3{0#{-|I+爙|+&}/)}(~%N~\$P~!σ~0<@}>͌a}nx!7qvyl0Lsz(v{꒪OoGWQ|okSkoUp`|6Wq2vZr pM\ri^#sc7`t_\&buGTe?v?Mpgw;Ektx>InFy7 pz/s{(vD|wMKskOSs߆Qms9St^{V tuX`urooZv h\vbN^w"[fa_wT=d/xMgy;EUjz7>m{6pT{/r|y(uY}*@K xNjqMDxpROx@{QxwzTaxtVxnmYyRg[CyaA]kzZx`1zoSc-zLfB{IDi{=l|6oh|/q}S(t}?I}(K`|ƅM||PA|xz R|etUT|pmW|gY|`M\-|Y_}Sb>}7LDev}cDi}=k}6ns~/9q~&(t~JWG:JI L?Nxy@Q>>s"SlV_eX_4ZX]Rva_KdDMhGr=kmX6 nf3.qW'tX~EGJUG~7Lx4OLrRjkTydW\=^$YW\܂Q`S,KDcCgQCF%~Hk2|K&pvMوpPjjSUXcUˆ\XRDW[{P^JcbCf =iJ5om\.bp 'Is[BhDb>F{QIkuLEoOi Q͋HbvTic[VUZ8P)]LJjI{a&Bf<-i5tl.o'r@~v+B6YDyGsJzncMPgPa#a;SZlUUYOk\'H`sAe* ;Jh4ln-o*'rہ>}@,}CxEXrHm"LfO _QӑY3T2T%W쎶N[G_Ad[#:_hL3k-ok&Es&sr7tu0OvwW(xy\[]]]X__4`ma },bbvczdpefgjUfh*cgi]ikV1kn9Mn p)EpWr<>wrdt476tQv0/v;x&(xHz7bZ`[U[Fa\c48^@d|` f+vagocxi#iejcfl\hBn UKjpDM5mqEvo|s>%qu6swN/uy(wzېW,dXeZGg(\hn{+]iu5_koalDhcembQen[3g)p:T'ir Ll sE nuc=qv6s8x|/uxz (ww{Tiɋ#VVjxXk< Yl2z;\mOtk^nhnA_orgap|acqZerS[h_tLju}Dmv=pRx\6yry/ruz(Pwq|BcRtn7T#nUogWpyBZ3ps\dqml^erg`Ls`b,tQYdwu9Rg.v\KiwnDmx't`E#IG-}IVLxL#WrTN׌flcQvfT@_VYY5S\E3M_ GcAngЄ;k4m.pЂ's*CgEb|dG vJZpM+k6P)dR؎u^~UmcWWUR[2M^ډFb0@f:/j3mq-GpC&sׂ3As2C)zEޗuUHoKiNēcQK]JTe82i^A1l+up%%t,eQeT[f-VFgYu|h[ui^oj,`\ikKbclkd],mg@V+oiMqkE`snN=uNp6vs-/xtu(9zxbVnbYxc[7d]Z{Pf_rtg3anhzcjhielb}jge[liU*nclLpn0Drpv=t\r6pv t/Lww(+yyyf_I[H`:]4BaJ_b`zOd bsedYmffghQga[iilZktkzSm,mKooDAqq=st6&unv/!w7x(yz\`]a`^b;`{dZy:b#escgHle_hffj"`khakYj8mSloK>nqCpsw?P!gx I'jy B2mz;pHz4r{.\t|'w}`%PwRw TTwzVwRtY!wn[uwh]|xFbu_x\-aiyUdyOlfz@HizAm{;Po|h4q|.Wt}l'vN}N{TP{,{R{)yU<{Gt W{:mZ{6g\{lah^2{[ `6{Tb|ANe|HYi|Al3}~;>n}4p~-s~.'=vw~d2M>T&O,U~Q9pyfS>sAV~lX~fZ~`V\~Y_~Sa~N%d~GhCAek:nL4Pp-s'1v*2KɂEM}OxSQor3TkW2PeY}_B[X]݁R`Ɂ|Mnd-Ggy@j:Om3pn;-rs&uWIK|CMxvPFpRˇ,jU]dTW^Z9LW\R _BLzbЃFf}@jd:l3ou-Cr&u`OGI獳zKGu/NOooQ6diSicVz\XV[7Q^p2KaAEe5?ifG9le3o.-uq؁'3tۂF<~AH%yYJ+sLېn&OhARzvaUM[WHUgZJO]c)J`Ddr>h48k2o+,q&wtUD|FywHrK5lN# gQ}`SՑZVuTDYN\eI_Nj{Ccԉ=g97ke2np+q%t䂶BU{[DvGq&IkL˘SeO}_RYqU^HSX M[H^Bc%pv`:rw4\ty,-vz'Py{뇲Xm/Ym~[[*nGx\nsJ^om|`pagbq>adZr[f sU)h9tNdjuWGmkv@p.x:nrdy@4tza-v{')x|Uq=Wq}YHr>x[=rrt]Csl_Vsfa,t<`btZduT~gv~NiwoG6lnx@oLy:Iqz3s{{-u|L'Ew}nSvKWUv=|WvSwYvrq[vk]ve_wY_awY~coxMStexMqhyFkzm@Yn{J:p{3s|~-u}'5w'}LR z~_Szk|Uz[vrWzQpZ"z@j\hz/d^oz_^`]zXgbkz8m2pn,r'&ubc~rI%zEK]uMtkdAvkm:wpV4yr-hzhu:&{wigsW>%h Y.rh[9zi]-tj_ mk`h6lbbmd\nfV)pThOqk&HlsmnAuo:Nwr3xstT-"yv&s{LxˇYd[re]~Uf^xg`eshbm(jcg\kPeKalxf[mhU-ojNplGro@tqU9vVse3pwug,yOwr&xzy:bO_cO`}dgb@wecrgelVhyfvfig`kipy.8s z22u3{ ,w {&x|́Wu}Xu{xZus;\um^uh4`v,b@bOv\dw"VewPhxUJjxDmVy>p&z8rn{2tH|,v(|&x}EUVy|W$y{wXyrr~[y|m]yngF_ yeaHay[zbyUdzQOgzJdi{#Dql{>oo[|X8uqc|2sV} ,Qv}d&;xU}~S}{$U}wW\}vqYn}Hl<[|fI]|`^_|Z^a|TPck}Ne}.Ih}TD%k}>n}8q}2 sa~,u~)&w~Q}RzSvUpW݁7k0Ze8\i1_A^uYF`aS9bCMdHgCks=m7pV1r$+uC%w~|PexR]tSo(VFdiXbcZ˄]\X)^BR,`Lcӂ_H fтBj1i=mR7ox1PrnJ+t%wh~{3NcwZPsRg9j4kn- .q)t*$w/mSw(o|8txq2yt+{ vR%h|^xg[e~hx\z i^^tjn`QoIkailccme"^YnfXohZRq}vaq8$ws1y#u,+zw:%{{yReN_}ifB`xgIbshc~nFidhk#f@cKqnnDspq>1ur7wtn1xvB+zx%{zbc|d dwe4erffmlgh gibi?bhjj}\lkW.mWlPnnJppGDYrr,=tt7vzu1xw,yy1%{?z`g{zahvc4ieqdjSlf5kOgglQai8m_\jn|VoloPcmpJorUCqs=t u7uw61wx+y=z%z{~8^lzS_lzvaOmpbmkdnfAf6oq`gpT[CiMqEUjr=OlsCIntgCGpu=#sRw;7JuXx1w-y+x{%z|B}\\epuy]pu>_|ppa@qejbqexdr{_fSs9ZGgsTitNkyu~ImvhBpw}=rx76ty1rvz+xG{%y|||Zjtx\ttj]to_uja{uIdcWu^dv&YPfvSzhGw=N j`wHllxvBoAyU6r}{0t}+v}%6y~y[UuW_qYl[--g^]3a__]\aA5Vc0P*d.K:gYFj ~Am~;o~6;r.~0tb~*v~%,x~wSڅ`tXU%pIWBjY{?e[`u]"Z_TaoOc-J"f E{iG@l;o&O6uq00Ms*v+r$xw&vR.rSՉnURiWhdzY_+\>Ya^S;S`[NbX+IeaDQg?kK:n5q,k06s9*uIW%w[tP/qbR1~mYSh4VJcFXv]Z֊X5]R_)MaJ0HdC'g>djj9m4pŃ/s]"*%uY$wsjO!OoP@kRr:fTʐaW\YqW [܍KQ^5L `K5Fc-BfKc=@i8mA3p8.r)~ur$ w\qMVn|OMjQeSv7`Uړ[\Xj+UZϐP]K_n;EblAe<9i-7l‡2oцS-r(ub#qx;V5oS{pUvpnWqpYlq[gorj]bs_\saVtfcQ u~f*KvhDx j=symw7zp0{r*|t$M}wl~mWzmYovna[iqo]Ql&p _fp`aqb[rdsV$sWf?P1th8J9ujCwMln":!p5zqs.ub)w$?yS~qU؈nSWrHjjY#er[32`]?[w_LVam,PcMK2eGFhgAjK=`mL8p_~4?r/sр_*tu[%w[bp}T6lUیhW~8d5YQ_L[Z]艙T`ObJ:d3,r8w.St)vA$w|%oRkzT[gVc X{^Z``X\DS^ʌ:N_`>IcGDBe?zh:k-6oF2q-Gt (lw #Hy2mQ0j%R)fGTŔaV˓\Y);W[Rs]ˏMG_iH b5vh 9k$K5nІ1-q,jtJv'vރ<"y{rTw+rUrys=XmsZhtY[c{t]^Bu_XvaSvcMwyfH-xheBFyj;8{*mc5|.o/} rV)}t#i~w6ypWvpYyr!qD[emJr];gr^bs`]]t7bXtdLRufM.vhGlwjiACyl:zfo@4{~q.|us(}dv #E~8xBxm[^un\q oT^lNp3`)g-q#aarcA\rdW{sfnR5thLujFvl%@x6nf:9yp4Nzr.{t)|v#w}xx/k_7tl`gomkaknoc%f&odua-pe\ qgtt9"vv3xx .z yZ)>{yz#|{t8cPopvdo=lXf2oggp2bip]jqsXkr8Sm;sNXnsI#pAtCqu>nsv8v"x 3wyL.jynzc)z{a#| |\ramsoOcskdsHff'sbgs]i:t^Wju Rl uM9mrvCH7o3vCAq w>DsxY8u~y3w?z.Nx{N)y| #{F|r._vnavjcvfdwaIfUw1\?gw[ViiwQjx6LlLxG>n(y(BpAy>%roz8t{#3lv?{.v|-w}(y}J#{"}p]%~fl^~Gh`A~UdWa~6_rc}Zke}U*g%}Oh}Ij"}EulD}An}=Zq}7s}2u}-wc~ (y2~#zz~0o[Fk]\ႉgv^~jb`I^bYc1SeN}gOIhDk0G@_m<>p77rJ2t#-v (x~#Wz~mzY.i[8e\↑aH^\`VWbRzd[EMcfHgЃCj#?Kl*; oTq7rv2tw-vU(yx#`yIl%W h}YXd[D`]9[[_))Vga1\QNcLJdG#fņVBi.t>'k҄^9ng5q˂1tF,vEF(x:#zjVxg-X cEY^[ƍZ]U!_P%bK4cF*eى4AhU =k8me4qzl8{o,2|qr-)}s'~:u"~xtp[TpEq\lFrz^^gs._bsa]tc Xu{dSv6f;NvgI|wiDxl>ynA8{p}0;s}75un}y0w(},xv}'z}"{~ j_f`IbbK^lcYe~UJg@*P9hK'jFEkAmw=oE9r8~6t~1_v#~,;x~'y~"{~i]oeV_,raw`!]bnXd!Te߃Ng6J!iE jy@l΁k#:m6p,3sM.u*wb*&;y`a!{SeaXaZǒ]\XYP^sbvC_^TvaVYw|bTxdyP xfKCyXgF;yiA+zk;{n65|p0}r+~t' ~v!%xnr^js_f/sa5atb]kurcXv/eCT7vfOwhJxXiEyk@ym;3zo5|Bq0|s+}u|&~w?!~y ndp.biq7cnehr.deare\sfX tgSkuriZNvEjIwkDxm@$xoq:z%qM5{sY0o|At+|v&}x!~ymvnFfmiojfdp}g`Uqgh[rHiW5s/jRtkMu m$IHunRDw o?^x#qA:~yor5fzt0]{v0+|w&}-x!}zWlllj.h3mjzcnj_{okZplVaqmQrnM=soHtpCv q?w?s+:!xt{5zmv:0<{`w|+p|(x&|y!}{ kVjmgMlmc mSnJ^nenZFoxoUppLQqqALkrr GsrCus>vUt9wv4yw0zx+M{y&|z!}{jJhqfljrqbNkq]mr+Yn:rUoZsPEptsKqtvFru0B;tu>uv9ww4y y/z2z *{.z&G|({!}'|~ig`uei taju]6kuWXluTLn4uOo^vwJpvEqw|Aus9x=tx9Vviyt4/xTz/{yq{>*z{&8{|N!} }i f xdgx|`iJx\jxXkxSm)xNn[y*IoysDpy@rsz@|W j{Rk{MmF{Hn|!Co|P?q|x<8sW|8u*|3wW})/x{}i+y}&Q{G}!|~fb]bNd ^Of0ZgUiyQcj@Lk#Gm^Bn~>p~;8rf~7tQ~3vt~/w~*y~&Pz~!|b~dzaq`c&\dXf8_TgP!iHKkj;Fl_B"m>LoՁ:2q6vsр42v .w*y&XzlP!{cP_҉ _ad[c2Wmdׇ S=fnNhJMihEkC@lބG=Cn~9Ip5s2uo.wX)y%z7!x|b8^i^M`'Z2aߋV,cReD!Mg[I6hDj_@l<n8XpD4r1u:-}jh9~Jl4eo.0E~q+u~tF&~v"yiww[Afxd\boy^-^Dyx_YyaFUZzXbPzdgLI{Sf G{gB|Pi>1|k8}nA3~Apo/~s +J~Hu6&~w\"~yhu^e7v_a>wda]wb\XxcTyeP4yfKzFgGziiBc{dke={m8|o3}q/}]t8+Y}v&&~ x"[~]zh1tb3d`tc`{ud$\QvWeRXvfSwgOkxEi JxjrFkykAzmv=O{oT8Z|.qD3}s/|u^+a}Sw!'}x"~)zg}r$ecs$fs_tgR[thTWNui`Rv0jNvkJ9wlExn*AKyvo}uw:w$xo6xyC2zzM.Ez{+* {{&F|Z|W"}E}c&jww_kwr[m=wWn[wSoowOptx#JqxvFNrxAsyB=u&y:%vrz[6cwz2yy{.az8|$*"{B|%|=}!}E}b'iD{^jzZk{ Vm{Rn9{NoT{Jp{{q;!rk7tX4 v0w- y;)2zl%,{I |"]dZieVgWVRhŅO j2_KkFmAiBqn=p-T:4q܂6s3=uh/w2,&y(Uzh$|{, }+\c/YdUjf &QgqMiIjBEl/A_m`|\]M|x^/Yx|_UT} aIQ}JbL}dkH\~fC~og?~i;3~l6%n2/q".F7s^*1u%(w!yc)y^_zv_\z`X@{bbBTD{cP7|%dL|fzG}gCa}iX? }kc:~ m6~dp2o~zrb.8~t|)~vm%~xc!~zzax a^xb[AybcWnyeSzAf_OmzgKE{,hG {jWB|Wk>{|my:b}hoO6$}qq2%}s.*~ u*'~;w\&~vy+".~{aave?^vfZ~wfVxmgRxiNyYjBJykxFXzlB{Kn> {ou9|q5}.r2}Vt.}v*}xP&~Ky"I~r{at6h]|uWi_YvbjUwjQwkMxlIxmEyoAzzQpL=v{q{9r{r5b|tZ1`|u-g}Jwf)o}x%]}z!X~7{_rlR\slY tm3UIumQZv]nMEvo~IwpjDxq_@y[rV vx:wyd7\xz3zz0z{,{|(|z|$}L}* ~)}\Gn yY?oyUpzRaq#z&NxqzHJtrzXFQszAtz=Jv{9w3{d6xT{3dy|`/z|,4{}1(\|U}$j}5} j~~2[lW}Wmq}Tn}Po}M4p}ITq}E;r}@s}q :sX79t‚48vf0x-y*Dz׀&{܀m#'|/~7Vh DSiDoP|jkM kImEnq-BoȆ=q49r 6St!^3Yu`0w-yh)z|&{"u|)~@UflR|hXO=i_bKjHklDmTA ow55k1gn-U;ql)(s$vg Qx^#oXO[2YW6[T;)]EPE.^LI`H[bDFd_@+f=?k;?1m7Go449q0~s,;u($w%"yj!L${@[EzdW{eT|\fQ |gMI}hI}/iE}jkBB}l>)~>m:~o7 ~qG3~s0 ~tQ,`~v(~x_%~z !o~{Zxh(WkyhSziPW{mjL{kH|lEC|UmA|n=}[p:}qe6b~8r2~htv/~8u,~ow(i~y $~zj ~{YwekVxlSEylOzmcL!zn0Hpzo D{Np@{q<|jr9|sT6}it2}u/}w,(~+x(~`z"$~{g!?~|Xvo!UwgoPRxzoO!xpJKyxpGyqCz]ro@${s8<#{t8|u$5|vG2}%ww/}x+}y(3~z$~p| ~}X.urEUFv:rvRwOrNws-JxusGCxt$Cjynt?Yz1ut;?zv&8%{Qw5"|x2G|y.}.y+d}w{'}{#~|| C~}qW}tuJTu2uQZv6uMvvJhwvrFxvBxwC>ynw:z+xM7nzy4y{y1|%z.r|{\*}?|''=}|#~l}D}VrxSsxPtxM3uy"IvxyZEw1y|B)wy>xz+9yz6z>{3{{1{| .%|U|*|}7'}T}$-}} ~H~^U%q|AR9rB|WO9s]|TKt@|]Hiu%|mDv|Av|=~w|9x|65y} 2z}>/{}}-|~)|~7&}~t#%~7~~~SoPpMqJrGLtCu@u]<}wP8xM5y4'1z( .{5~,={U(} O%}_"@~ymGxRlnL2OoLpiIYqɃ FrBt?u9;v:7w\4xwV18y-z+z{q(c|r%}\u!~RMNX,QmLNSnyKVoH+pņfDrAs#>7t.:ub|6v3wV0x-z+z)6{>&0|_#7}^ P}Ol dMm{YJ$noGoCq3@rp=+s9tt5u32vc0(xck-ya+yу1)}zH&{#|x }SCYUU`W[Qw4XNNZJ\Gp^C`@b7h;i7k4NnR1ȁp/$s0+u(>v$vx zUaZRWbINcXK΂KdHoYeE =gPAh>$(jN:'k7m4o1j3r.倃tT+#v(w$yym [z{?Us>}Vtb;a}u 7~!u5~Hv2:~w/~x,~z5)~{&\?{"U|b}QytENzBtKzuH{uZEi{uB|^v7>b|v:}wH6}vw4 }x1~%y/~ozd,a~{c)]~|!& |"s}}I~ PwweMxwKyxGzx=D{xA}{x={y :|Zy64|y3}Fz1}{8.~ {+~`|(~}A%}"2]~6~O(uzLwazIxe{*Fy&{BCy{j@oz{\JtGWv DfvAiw߁P>[x́*;y`7zQ4{<1{W.|+}5*}d'=}!$Q~o!@~K!r@tHsمF.u$)C?v@TwQ=Lx :x6y!3ze1&{"7.L{,|yD*h|l6'|ہ$}w!~ [~΀^IqYkGriEtB,uS?FvZ\<@wS9 x+5x2y0z3.{;w,({˂*{z'|$|ف!}D~RPV=MWJY'GZD\A^>eb`;b7&d5 gN2j1/6~m4,Lp&* rr&Ƃu"#CwwāWyPXMtZ)J[G]pDT_2A)`=Ԉb:d7/f4ci1k/n,q)s&Wv1#x\zOu[Lډ\J^G\_Ca;@0b=d:DFf6hs4Hj1{PmO/0o,0r)t&v# VxzNR^lLx_JI"`[F25aC7cL@N4d=(f9~hD6 j3ͅl71n.q2,s)u&uw#8yo{dN=a+KybHAc'Ed|B͆e?І gBƄ3k;m*8̃n5ԃzo2Eqd0vs2-ނ_t+ށv)Ixz&fy"t{8| LjJJ jG+kDJvlyAl\m`>l'nN;Kou8>p5 q2s20*)t-v`,x3(yv&z"S|Ā}PKmIVmFɂynxCKo4AUo>~zx; z8z5{D2y{/0|!-nU|+p} )6}&~)#p~Z!!~leGVz|ES||B|}@U}C}=}}':~W}87~p}B4}m2}/}, }* ~(~&@>~#t 逃;\EzC{$SA{7?Q|b<|9}6}48~}1h .]s,mS*d`(}|&# ̀&G>DyQVBz,@{ ^>V{;|f8}]5}Y3+}0g~W.)~:,~׀*~(~&~ڀ$ h!=C\xAyH?zE=K{:{7|U4|턠2&}S%/]}-5~1+~8*~.)}&}၇$~ 7!~I5XVFX D?YAd"[\>ӎ]?<7_$91a#67c;31eV1;*g/j,lm*p'gsZ${+u!zGx::kzHƐYEFZDf\ A]>_;aM8c35Ջ*e32Ŋfg.0is.a^lU+oW)̅r '#t$@v!My+{FHf[FF\C0^=A_>Vaw;zc18&d5kf2h0)k -m+Pp)܅s('82ue$]ew!pyW{H^E[_dB`q@Uf5oh2jl/Pl-͇ o+q)t*'Bv<$}x6!Kz.|GaDbBc$?Ldr=We:gV7Wh5*j2Q-l@/anP-xp+̅Wr)/u4'\ow$x! zفh|~F-cD{hdBe?Ng<剰hF:=i7}k4هl2#_n /o-r+t)ŃvD'ex $|y!{b߁N|Fa~fDgA{h>qi<\j9ƈk7m4y&n1o/O)q-VOsw+uI)iwF'x$Fzv!べ{XO} E|iCjzA6hkA>$l+<0m9'n6o=3Pp}1;q.ns=-t+0 v)xy'[ly$e{3!|H}D熱lCmt@Rn >in;o92Wp_6Tqq3}ro0cLs.it,҄+vZ+6w)y&vz${!Y}of~+D8oBy4p=@Rp>6q;r9}r6's2tn/uZ-Jv,w+2-y)(z&~Y{#˂| Ӂ}ʁ~tCZ/rzARs@Wgs>Ut<;bt8u5u2fXv~.w?- x4,LQy_*z~({&h|#U}A @~-~Bv&uQAKNu?[v=Pov:Ą?w88w5w1Ѓx.jy0,y+z*\{( |%1}["K}^~j.Avx}@rx>w,y2CBr= G7;9k끟6Ih4\1ҁ܀/`,܁*$t)Ԁ:(M)&/%("瀹 T <w;o:8j`5$3a 0ځf].t|+z*=;)XJ(Du''{^%^/,#B!CAǖW.?镚X=Z!;e[9]6_4!a1hc.e-GhW+rk7(ىn',q$t" vuIx{RAY@ ][ >@\;Ғ^$9_6Z_a3Ic1Se._Xg,Wj*يl(o&뇓r$wu !vwg1syf{Ar\J?<]R=^;K`8Аa61c3e^0gJ.Xi?,k*!nG(q's$ u"xgz:у|eA0^?(_<ۑ`:b8yb![d;Ke9Ўf7hP5*i2Ɍk&0hTl.nX,p=*>qr\(zJt}'v$ x":z5 n{}?fS= gL;i[=Qj";e1k 94k6l4,n2o./p{-D,q+eZs[)iu(mpv'892li<Ԍ5l;('m8n6ċoS4^ep*1ۉqN/0,rV,js{*чt)vz(x'Ky%*&{&"e|Ci}\ă ~=fo"}3}0}.Iq}+,})}(Kj~8'~E' ~& ~$t"6$W3-y7v7B8614cr2#$?/͆7-~+O)'ׅ1'&W%$ ")" ,665"v3n&18.Ղ},ł<*(tf'@ &8%Ƅ %;#!Ԃ3ꀭ  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}~}~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}~}~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~mft2!Tp7 % O ycR@/ r`O>, o^L ; !*!""##~#$m$%[%&J&'8'('())**{*+j+,X,-G-.6./$/0011y12g23V34D45356!67778v89d9:S:;B;<0<==> >>?s?@b@APAB?BC.CDDE EEFqFG_GHNHIrs,sttu uuvovw^wxLxy;yz)z{{||~|}l}~[~JRW] c󊄌6%oO/zœZ:ϕeEڗ%oxYʚ:mޝO0cԡD&wYɥ:mިTͩF7) vhZұKIJ=. |n_عQʺB4& seVH:ò+ĤŖƇyj\N?˸1̪"͛΍~pbSEӾ6ԯ(ա֒ ׄvgYJ<ܵ.ݧޘߊ{m_PB3%sdVG9+ ^[XU %1>JWc o |    '3@LYeq~)5BNZgs !!""##$+$%7%&D&'P'(\()i)*u*+,,--. ./-/0901F12R23^34k45w567 7889"9:/:;;;`>?m?@e@AEAB&BCCvCDVDE7EFFFGhGHHHI(IJJyJKYKL9LMMMNjNOJOP+PQ Q{QR[RSZ[[[\o\]O]^/^___`bc6/(! yrjc\UNF?81)" ~}|{zyx w v u t s rqqponmlkjihgfedcb b !a!"`"#_#$^$%]%&\&'['(Z()Y)*X*+W+,V,-U-.T./S/0S01R12Q23P34O45N56M67L78K89J9:I:;H;E>?D?@D@ACABBBCACD@DE?EF>FG=GHPQkRRS/ST\TUVVWLWXUXY(YYZfZ[9[\ \v\]I]^^^_Z_`-`aajab>bcc{cdNde"eef_fg2ghhohiCijjjkSkl'llmdmn7no otopHpqqqrXrs+sstitu82-'! }wrlfaޑ[ؒVӓP͔JǕE–?94.)# z`ԢG.oUɧ<# }c׫J1rX̰IϱTڲ_ju&1<¼GͽRؾ]hs~‰Ôğ%Ū0Ƶ;FQ\gq|· ϒН#Ѩ.ҳ9ӾDOZep{چ ۑܜ!ݧ,޲7߽@BDFHJLNPRTVWY[]_acegikmoqsuwy{}PwV!QF)XR0R^5Ss=Tlf EU&YbMYUKUGV;[_&W'%fXAnZy_\_cc!f*$k$'ox*os|-/Yw?/{1h~3~;4섃5:6a틆J6666'%5655OC>4 NYP.`"Q+jSyG2U)h8sVXA WHIY67QkZZ"[[}d_\Fk^.w^_]mand#Uf:"$j'p2,v1(V|H4鼀7U;S9 :q ;V;x;V :=9187kdy60[5$L "6N WQ${T"q^-V]&4DXI1;Z7D\'LM^"dW\_xa`mhaub鄞dme*Geϧpf'idqg/ y5(<9讅H=A4?Kٌ @]@d@d"?>\l/TBu DޱEI>IE͒rE)Q;CԒAX?=,ی*:P8@Έ]!5V5# F12Ki-uP|)Ta&( Y B"(p]W!1Ia58d+CfcM`gYiWkciUpDk@ -l! ɐ|nd!ǣo-!Oo-k-y:6>5詈CB?KG,0J)6K6.>JIі$GߦEr3fCL9`WI4Nz0nTh[*Z"5%!_ +ei3h=Jj CI7k Tmw `~n"\mpp#O~qd$us${kD;Ay,>5: d7VG2?BpFj<Mz6SZ0>*Z1(/_b"k .m!6o!B$p"O|q1#\ s%Vjt&|^w (6@w9)z C)V6zk6f@6I;IONWS!^TV*U仝S兜Q怛NK_㧗bG├ӌCOw@юF_@;V`Y 7T'?OHAG|HPt@YB;aj 3Zi5*"jq),vuH(M5Czr* B|),O}U.Wd`0w 2Ԏ54#4fBꐏOMCVkݜK\[_J*`D_yଢ^]PỡvZ)D"VV m^R蚀$M帗5pIh득#b 3u^ ";Z1_Dw`SN'NpT~`I]&!Ctffe=! nx*5P'yw0l/H082KG-<4^7s[v:vq< =VYXJS(U›]!c9棪eԻafTՔ4eު4ba'X^ա|ZZ柞V讛4Q|M뙔#dHVEw큋jBqkz/&iE 7jf o?bZH^kvOvYX6FT>a NukHE$t@ -~dZ:3:><T] i4oe;"`Qțv[|9VғS1kOH7M#z&~-l?4 1; & C'|LUyUz;u_1pZkwkN'uc0Q_z6s5 WFFŗU`lp[¤@aܨQ0bl^2 tଥz [ն|Ͱκ}qЊǵ|ëYyNOuwܜp֢˪Ulogb%ٖ’]ꂒY뇌ǂV썆{T킀Hu "܅+)1ʈd14xc 8ޅ @NJ2R}t]4xiSkt%sm/$j$5aFE]R^]_f~BlʮV)l%>Lysܫ}?i ҇pI#𥉉ٲ}?ByߛMt Bwn讙>jeީ~av^o\F|~ȏ&#7]J'O22' :r C"qM_c6WO{chd!oЄA-"|F4Q7}FD7ez\bl BVw3_^ál)S35a =FFUAPm\wě=j~(w72j8A HaZ>g<ƃ-U#vǛN"[#򨭙.6C'ム1?z讗y讒r|~vk^y!1duf^+rVyX2pVqQP{;&`u/Bf 8j AtKT]okUǮc,#p=/~C;KUƠwz4ܾ-{ܯ ģ\j+Pζqطalz?讗saT lnxe)밇1^T24X`szR~2VsYM{k>!D fo.Eo%S0./n< 6 .?&I# tRL_/!%mV*xk6͋?YK\hSFةo8M5OڥHYe͒a׹+ {aږ!)g޳{3⃛tZlƤ/ܵ=e|{^ۚ5Xe0BUR]VzLԍWsFGۊZIkC^Sc:^QIg䧘#g,:yx}4M2 <ΰEgNh^YzfBĉ$rIR/<][.8<ىyƫJrt^?r౦zX/t4m!餖f/Zc_W8쎊X Rbr~LsxxFqBj=іc:7l [~=Hom jB=(m0M, 8 A Ic|RQY)0YaB5z#sH5IHgՍRt6iɀxfsw{saବOu*Wp6EkgWeǔ_Î챏YCDR̃jL̷V|F4v{Ao=oFC;Q-#jS1D{(~klK8u8͑4m?3ʴeu/Kdž]+;6Vi'uO/%!H#/AҰev̰+ӯ-鬱 kN  ӎI"Qc 16iFs3GEcHA(IxjC6`E_1nR6f^B NL{%JLOzK/+JTcՐEC4(ꆡ?]Jy;<7wn6SSn1Pff(,8](!ѠUP$U΃wM!5 F#ƅ?($8qzFlmj* S#g= %6MpZiHX y8R\0*7EY_|#As [q)4,Q#SElP'#]lD5t~BꨕidAoLk@, ?:уA8`h|4 sV/i+,ݳ`0&y6 {׈`Y"$Os5{aRHv& :n҄OL/!d0٤ EpjYxo5 -mKN/΂3@J^Ge?sO=!mq:D z98遵8g8Xb5}2"z/ p+@yfz&}x[!vQqGLt>fܦ06l/<Zw(.?Κ9*VQ( :d+ C:6\-+ 1ҞN E5mWjjJ.jQ=l?Eͅ<^N*i;j\7b6ݡ~~64 ~5)l}4|0nx,o(1d#XZM+B?t.8{0+,r(i-!!Т֩]hݼ b1a'c a8xe YAq 97oѨ`).jV)YI2*\ vA|S`UfHx/w*7A=6JQ~5GCed}&1=8vx/w/dﭰw.vI.cu,t:*Jq[%4e WKJo>e4G+'H" ?bjRҩݽ ?^2?#I)9 1U)6`).hZU)L'1)^ >q(KO^YEs`?*Os0M=x0|gF+x2/V`Ev+vrd*4 qA)?pg(oro)loY(eo:&P9l%MvyioV'4Ge2;N0i&  wl 3%u!q##}Ye&0 )L,#&-T)J&_m&o(m-: :gKQ p[3"2q.<qt+GBr*[q&VJnk%hkF&"]h$ʳi$ȁh$h$V&h _^:PD58j--x #H .#Ze%%%& G'ܶ )e*@+`>) w(p%%+nw'] 7pa^RHJW+mS'o7m'#>pl&bVkj%gj0j!"3d"ɖcf!ۭ*b!wbK!B a ]plU*K@Kc5* 5 + u,~ Nved+D*M )޲n)*VTL*+aW+~+ӎ4,~0no4gZ ErCpS- ]$X6uh #;g>*;EUZ"fdw^?ǐ]⤶\ƶ`[ƢYnUO]F<S2 p' #xa~0 ;.0n-~,˛,/9o,Q7 \,(0-ٔp/by1wQ5Zim":\Y CIgK7#~T!5(b!x:3=1V|90zD.~w)F&=J$A=N!qRw&!UWa/gXjJ6[54?]$H_8qREaa)]bvecyGr)d)~f tinghh'hTu'-qFz.Yx5,W9[O= >ꥊ+~?3G?O‹b>GQ<߉3:풇/o8Qa573qV~%1{@.x2tD..I/*{M'bbRZp# rVT (Z51^W8raCdYMeYCg#Scgoi'TjHkl@ qGl l*v3V}9SlU? TeB]D!zD Cꗏ-Br&}5@UΌ=읊R:k~8Qܹ5Vm2GB}^ѩ/y;ddA6F29bL-:RDj(WH#!)] *mc>3gptº; Ls7V峠4N}DW o4R =4XP9cVҜ.RlAҗN1P̜JnQ9F?*jǍ%=Dd:A #7U~a40S]e 9X lB0R1LNRpHiZ:B-d;|mH4& v/)./})v.8f,0@F>3:]5er 78t ,:䦈+$;?^WH6]Rd'Y3^T/`8,D_Ϣ$^(k[{W,̜[6RЙ+œNELIёYEGXiA:פ=G :b~xjT+h] 64je !=aD4G])NjXUVRX_tLiF"s>>+|@f728&=Rf:TьO@>%m AC>/CڧPlDyQΛ[pab1ϣ" fؓށgC2زfl¤Ҝd\=`y ř\:ŝW䚎RİNSXIf=VEJo Bx&?&~Gr%'s/t ^8p @myH`iIPxdPYu^Nd[Z? fnBS1(xKu1LH 8`*EKi!GtfuzKewOG_=uPsD\HIeYikunuzn6m9Ajf M~b]/aQ_X5SS\ܓNFedJnQGES}Mz"}*HS1tt ~9h~ AS{FJ~^yjRoot]Yni:j%=tbm.]5GUvDS^Y+_%7`7iYPq"2uow1wY[u~Ľr-mծ0i4IcʛBM^䤗 ?Y$&Um농 Q윈E}Nj:uLMV{Zv%q.2{6] 1>C^GF-\P|Zw^ fsz#ql;-~gi4\_dD\G\_d1Njx˭[j-vw<%-~&7ہH~M=[իb~ܩP*z v@^q<箞el [-fΕka[k]x3xYچpVixTVxHY'O^$ƓO/>! 6x A\ I&8Sv`Æ m}b'*zy'H3ne{~B`x`uJ}D퇄1A\@yޫ>WX4Ǟ2ag͉ySΥ@Z[Ǥך ܲz掜g]u讗Hpy讓%z^kΎrg*k:c8Cd `1V{]j^"Vs˜Jv%JL/Nm 9}3z *DVߝN464Y8jngiY&ur1?>Hǔ`Bk̲]䭞ŀӺę#͞gnܳدқeʥ\VdϘSMŔ♢Y%%Նʃ讙{Ԁ讔@t{讏6lpv섉e1r/ ^RnIC}Wk$VvQhVnsj[![+64 >-H%$R_z!n Gr,P{E8RvTR(ⷆ۠Mrؾƽ%+'M4Zb#X"/ʥ2q1}hFj}'V琙u)<邔umr髏Bf W^#얄=XI~A~+Rz(wL_wEpGBtg-1 MH*r3^> 4<IEO{x$[^_j'v=Ȭ48I`ZOfvmZeŰ,m \o)H׾<:i~TvApnl/GfޟCȎ_NnXb?R;Y}AL.VvFoAKhZ=[4 _{Oqhé{'쫺d0UR N9 BEpDKw{Tvb_9"mfه-%}98Xvܞѫ@O~ݵ1wp3 }ᱥ"vXoBԙgݓ`oYiiRcL_9V{{FwuA nm<)gO7_4P7rW`qmh 4M\MnYHϪem#|,`o4# =}ø<xE_ANT \ZZ!Eo%4OKs㎂ԊS~ ߫mxM>rM挥m.:Fg<ܙ`ԓZ:{XSM"iVxҖyx9 qA3 i.R`*LƅY&\±6Qv# vZJ d,BvX;M !v 1? ά18滗jȷԇW t1 ?]".e' Csx{_W%uhq5f^\ƉO\ڕFL"zǒVIzHHfBO{?k%;Nܠ||6ڊt1mثXj,l֭a'Y?X#ъ`P/H=g@ű&93: EK m& K/*3^u 1MX Bl4 2,ܴR\ B$*[f|(7!pY2څI0MET$At!@pZ>±]>ah <W>7k&"u4az)0<_pB+ߩe&ބC[b"Q[kH%)?ԣ8[1%Q* ٿkk|yk؈is\/Omu Ar:3_)-f Ak RV|n0MiL.[=#E=N;kr7튋6̥Y5쾾f4$2D|.zy+E=n<'4b"d1VKzAuOv8r݄0ٰH))#kǹCg4iOܢ=#_B[5{ {P_c&DN*wc4xZ?x}4wH|2ds{F.=~w,fv,/9ur+[Ȓt+.ht)n"{r'dp$#YcS@3ET8g. % @ NsS׃-eW`g#y v*G./'QXc# !&,ljL( :tFoX^89Mp#Qt..;v.6DvX,@_/t*Bwou'{o&ڦ\n&8 m&cӧm%Nl$#j"GHO6<$QU IT4~`r j9:_&PVO$ bV!Ms,UQ+TU1S$Rj6Pey;LO@۽G@Xt8\C. eU$grtyKQJB4/V,:ߔ7)Ѱ(é'&ާRS' o)9 _+};J/o2c17Wd| ;0LT?,C!5B:25*E37HG-KJ*({`AK~$TnLJ!3|LsL1^RK/ I !FkrAX;p4K <+~ n"B!-@ YdG^!oH)J,P0KH5L@= M|\EMoLNcTOHXe^kOMf?PArmQ1EyRfT#ᓃV*XݦT[5v_c!cP8#rf%jH'l(nW)p8*Vp3*(Vp@)jo)np) 4l(k:}(i8'h'g>wF$I"dK#a*L2RN8#P s@Q[dIRVQSF$ZT/cU+k VwX+5Y[&_] Ħ_e ~d$h(m}P*qX,tN.IWvJ.wQ/wy. vz-u,Vsr+q*o< )iwl(qjS'hAEnH,K#N@-P{4Ri;^TYDV~KLX&9VtY ja)Z h\&t^m _`gm>a%aZCNH]#IR_w]`jXeaMqbd3fPZfd,Wf$mT+s/0~yp^4}t7&6W8䂱8zB/8\7#wq5h<lk3R|1y.Vv>,Xr*1n (Sk1\ <8e_y4Bb/bMd;yQY eq;:bf[ogrk$iM֏Aj^k}.kt<'r//GVyX5>j!9O 4EHxhSuj1@^j_ 7llh |m!|goZ"pp"ɨq7+@x&$4~:p脻>藉:A޻BpBvA"꜋??Xk<\1?'9W r6"yLM2|;Ӱ/|w͕,^sj*&>nB; 4:s=+A{8HI2O-w,PV~Q$x^"!h#-%i6kAm ZNGo5=!7[@o #iq_$P{s%tJ&Cv6&Lv0}9_둄@#半FD悎HG@猐MG蕑GI=yE|jBU?0#AfyE;KN&z3WH)#1a"i$o 0p"9r[I#Hys$>ULtu&Yg w<'xrx)ӎ>z *|S+G|6:ㅃ?zT;Ff2UJ'i"M0fMi:L88,@I讓m{F㼐RCH?rF;Ʌ|7X3V|߹_09wﱅ-rU 1Q -:GKCEL>=V[8k^)/f' ob%*sr%14pwgP&A4y_'Nty;*b}I-u`g$/b1f1i yy:w6#33}y0_|t_{,[ @5W ?RK*MR&xGYDA=tb:l?1#uw@-).{>,7NP.Eρ1]4kqt79}M:9E!讑>RNX݊Td0X=45Y)YiFV USl♝Op讖ƏKFrB!7=Yu9V6{3ui*O(g:1*d r:` 8Ev\>MX<`TOQ^K/hfE!eq=){iX5A2$76);9yS+/:V|8Mvr+#Nr,&tH5p >al GLhrOcW]wb+XLmQ&w J?0ÂEj6O)CJGEeJ4әM/OYEDajֻHrfo׉0ۇhX|h؟1Kfc3աy^՝߶ZJ楚AU^fH:Ppߋ9K΍{GE ^BrYdZŸb¨h`hYt8<>5z/a&|׭ǹ|Ԟ̾{1YwoG#sCnɜ iDdr$B_K峑}Zj꫌zU·>sR+ʁ[k`O-VzdM-VsIZ0 2"]'+X q57 ?Hds;R.N^ k) xA2Xz@Awh^|~*ϰ趬΃TڶHԳQŃ nFƭ@E֢ꂷف~ϖy tas紘nh讔1|i5GtdM9l_~ed\ ~J^VYVwCWVVo7,G`MNT#r-46aJF B L;'W eDm-%>sc0'2j=*^C5ørc !Ϸqʻ Io9wW.S脾煚~`c讕v z 讐n*t뾋fo(_\Ώ~uDթL#xG-Jy6> ?rMH%R}_y5 |kmT+L{j58OEUnTn򯩪6WǞ;r$ǂHtkz-↣.r)毝j<_Wb{eBZ쪊SݨaM"~FԟVw@@3q;1j/6ˑ6!b24[/ XRԞ6 9U ?۪_!G),TI16 9= C&xRK=QcJX mgc@3'jJs G`1M|`2w)AΪzo iT崝c]L\%"QU-kkNY暑GжV|A9Ku;9n66"g1`-Y$*#bQ_'=OIAƢ% T ob`YZQT~q$,J3YǍN4Q 55 $= -Impeb.W@ @pnbpklwm `dዘޢa_~E^$HZC쒘Uԩ1OjgWIlC=>|=BÉct7m/2h4e-^)o:FV%ĮsN"dGo ^{? n<: ",Ϩa8bAtn|&^^Њ*߳8m,"|%0P `D^2_#)zwX85ZSUܜZ|bĜ~U僇ܙTUR?ּ}N`J)Dحh?i~9Yv4R4mh/d*Hȓ\_%RT@""LniDP=gj6n G  - l#Ֆ ߏ -m ;K`*$ @ʧ2\݉%R$QtCg4z\aZvNBc[J[azHj⢳TG;1]Fmn䝍@r[;ߑ67)܍zT2"Yp- \f("8~]/#ӳSЮRK B";Y:z4`K-Q PDs4EFe>K{,x <v, ̝ )( >镒X{ nXK1GL(FUd?s݈#>&=92<Ye@9Y4a0"x8,9mA'sb"ޗxVLL~cڬB׸r:\f12^ϖY+d9% K ! RZ8R+v G% ) lݡxNބ$ { L-7K*Ѣ]D#} :,*K y;QzN_ZIaT@D%w2>{2uG{:0-cy,T)}u*|t*9𘰓tU)[Ȝs)9Rs'uq%peo) ^"r`O@4e]* p9!T Jh4q <2vc[\#>(]D#² P|c)Ut8qv,!JdWu\58!r,":u,>Ct*^s&sn%#m%S?7mI&6k$Nli$%lM"jiY!3gjOr?dd_2k 4' 4;Sj?h?,vNt] fȀ}Ia(& 34g G$OsWR/n)( 7o'?Mn&TYm#3#ng".lg!v7f8!le!Ȃe e6 drvbYDJ>L=*k0 :& -Xv} @<5v"dhݛrTm#,fe2lo[cC#w!1U`9 >CVHS$/B_U$6ei$3"2; / tl%@sPN.j^F'ߓԧCA圾B-&Xq!}B&nz[.Y 4@Bq#O 0 !iV!5c!:|cb(0-"^d X7ءC3Nñ&Zu!!).$uaw)fp0V8 :ETlDq4$nMb4^/8^Z#RMS!TUbSrR=QM?PsOZM{=JCOۢEh>b~6 y - u3#tN" g*(CF7%DߔXA"ѵ!ê w֧$ _"D[$|({n?)),`1JT o5IT:h?\_>c63A/m7sDf)4KdFa$ _G nHт2HvHf&G F.*CN?"1:ni3 o+" v!bwO \~Bg D"v(E0AF45G NNM,, OQ^'TaQWjU:ZE]k `E"\b#Ydl#e%S$$e$ldd#c@#*Oad"_je"T]a![Q!Z"CYLoB(D"" F*vHT2?Jy7fKAM;qINkdIPOWZzPEctQc8yjRP1vS)˅T#U8Wj6Y ]-c NaF#=e/%+h}h'OVj(YVldQ(ln(0l:(kW'?i&+gBF$d}#Va["^"\uD!6ZnAPdD.qG#lJk,L3Nx;:PiDHR\ LT:MbUU$`VZgX 5t@Z\Ƀ[zE\aN\Z]b#Yg':l *+oW,#r3-0Ms-oVs"-esa,q6*HoY)'l'oIie#%eQ$[bj'"_߫![%7{?"^D+H ,K}%N.Qpn5Tta>kVXGYRVAQl[] \e:\q^f`]beajcb>bu>!Gh y&m+vVr.}vY0?x1z02zE1E?y/w,$.'t,qhB)m/'i%e#a׍"]-u%=)B&4G"L#Ppy'5Tef1XwV!8*[YB^PM`Y sXaObb4 ncG~efKgE}g$Nm*s0$xo3|5L626J5w~q3|=H1VyQn/u(,Y*qw)mZ'i $d":`6R :1[@-yF) LK$8Qp WW)]cK2a:z;bG6dRfl]g&khc|uj0k I ?l T6lt({s|/Vy5 ~n8꽂t;;B\;)+9\7xy4}1Vy.u+q(lO&+ggj$#b? B6: > 5uD0_K*'SXd"[z:!`d-,yf5kgAiMxkYQln& humQ!yunt"xpt#>rK#r,ny$4:讄>]b@ I@⊲?뒉=숇N;@zߔ8-pw4}1nyyI. ct*Ko'kjf%[e6I 2D ):?9B93K 1wT!^%^. ;jF%邏DpNB=e?#Z };ӅfѾ7eC˧42V|10w߾P-r)mg'YgS-O j6J ?D7Ix=,lSp5[}@,M2c $l!'q"B3`t#?ev$M-vf'ayV)t&{B+ьf|P-ˤF~-j)8RA涌kG䉐K圓g_LPƔrK{ ~I㽒vFg>C;Č'?UP;K7DV3c{ /tuҪ,zpM)Jj]Q)Z&2ZV <.Q, jGK!OEF:VLZ?";_8h. rqv)h,x2(6@|i*C}E.<[=1$pr3Q5(6@B0I[j[O _CRrRי(Q8'O篖>K{hXGÒCj쮋?AP:ǂ6}3&x/rg-Xlg8$4e-ucd7Y_+ AZiIUUQ\O}ZHe Bn\n:%xp10228`5QD9j2G<1i?7uJ@@Jh岕REݛW\ޏVY߃!YDZoX {͊T惙uQΖh3LcH􎛰1C,q?p:Vak74z$4`t1'nu^p|q(Zr2o +:j {Cuf}Kb`kT^\`_/VK7iPp#FtF-W;A-49E@HoBdFߗ% JbKU\.\k0 `ٝb?&aܺ Z_5 ˜[6WOR颔ժMِH칌 D^8w@$]>撚kifjn gnޝVJc`㟞^}9`YTPO뿌;KFO{C|s@ VvBl>%nu6|P%c/68z AB}0KD\zTJu_o Wlhs)xlb1k[D?2T3U՟K^^I0$c<e p2zu{RwmՑve&tڊq l g b\讖V]&dvXX}ST~qubO횁mKXV{fHwVt^Flɇ[s, a%4q0y:C DV5mNĈAYMfL%Rs{/XCIv=4sZwց 4dTуnʪ ַZ]Pyer|@ܐwaݞ&r&뙏l讔WgyUvbVOn]STgY)V_UoVyXRVqRhPVi{QHsTlա2TNo&f{"1f <Gf\EQ9_!nʕy+{#9 sY+G歙œQ"Jn@ܵ_d ڑ ˔ |~q讗 xx讑pfs讌h`ns.6`i݁Yxe%V{aRaNVtLv^5VmF[ddt;(qxb Mk+/}E68~ ?a JPV2e %{su4Ȉ+LPDzz봧5bɽ*‰UȒ~RdFЩ A&`9ݝz讘{r2.iۆhtad눇Zo|7퐂S[wN {LrVuFn-nqA!k[/f238 = FCQo`H!Ym*ɭ0ǁzCivKaE O½ qֿXv`BQFۜ}6)lto香uk;ߕFla6@;e=1=]-ˆU*SM#! m }|xAͮ& )>[xt2QW 9DDQvIIJ"P:Jḟ8/L{Fr 2d)x,1r%]#2keXޛU^ǺcWi툎 PBSIZ&VBӳBxIex8U p3V4h-/`)^XY%CIQW!IBrQ:*4 {@+Y  9 }u}i!޻ $;nX %`u|uZ5ĉeEa"V w`Q抄O?ENG֟ZJP:E|@y)Xn:{<5ZМrh/uiX*7`Z&<ƲSW"O>d9G@H?ŵ8`믴1rjcp$ Z׽qPCE )*ɶk8>!U:!mcQ 2W#UچlJ-mXEz"DDNߋC BW8B<S7?ߜo92IwC-sm<(ד?b$?4rXv?O;Fu="6;AK/W?#)(8~]3tLKEQ-t\qtxJl7[RyerigV!+{@+F@cVPcx;r:E9'7^Pv5Q̓M.+nSu( i#ߐk^R֠#5rU-/<'G[!l99V<;]$uY.,>],?`S@ 7A]-Ns# 7fLiy`F7e&{y;5y?y~5%I~(3 g@|.xy,ʠ-xH+#~xp)Px(x0%_te" RhZL.>3/i!) ! s7 D & a/r%# Ѻm;ɣ ԏNV4zy gI^ JR\=!t+.g;xD.,E/w,Aav'>zr&qq]%k p$5p$p"Ko3!.l] 15K:<j 0[ R-*& i^ ϙ m֪,BZ\}"H1[HbQªkQi\ A0o DUV40o)8Cq(9@qI' \o#mrj"_ ik!'i!Gh Oh Fc*hyf),Xc%L(*;Q. 0y$lZ tؒYcG :>ߙՄ?e~鱰0;KZ-g AMR0Vad$5kG$naȫaiaQ>`w7 VNGU9 r- {# *) <*AFKR\ݺ9 { [!LK\DHvq)_ =GN2vW!5 e!;d'VW8hwb?|\q[wZZ(vbYvU8MLqB+>7 Y- "Pls0gB_d:߰qaԸ7@SlMXo|m'IY 9 :B+J3V"0Px<3_8_ 2Q)[:&d\aQvU7} TTR PlM+HG3+~?Ur 6E , c"m74O'93fP1=, 6H?&JA!O^bC5nXDzDWnfLD4PC9B<{-m@<ҵ<~71 ) O_ "=& P>(@mI/A5B;CJD`DdKEvSEn)]F7iqeFelVG a0xGZdžH$OI#?J*LUOToQ#VOQMELLZ=2v?T!B*D1E_7GP@H[}cHlIrOJhZK]?c0LtTiMOV9vENwRŅ=OaSKPY5Q72&Sj U5Ytz\.) fW^!`R"xza"a"`v`e!^ H\ZW2qT4Q`4NMCp*<@)!C2"E+H"3uJ9e9L"x.DMmJLgOhU[Q5X`)RUAg[Sm[qsULwV{WxXQxWGXB[q_"4pcf$vf&/h|&iD&hB&Tg]%Le#b@"gP_ \HY7 XGjT-Q @N" ;C 0?ZCWGa$JH.gM;4Oo>Rv`HT{vPWz\X dXA>q7Y Ɓ8[z<Q\R\V']iܾa"@fm0&3RjU)VmJ*Vo+[pVJ+&7o4*Bn7(2k'hG%Uek#a#!\r# XWTTP* 9!'6>#Cc &GL+&uPLwn0T$]>7WkBnYfLY[\^W]a]@n_~~`X=Ga_̡bX c' _g-&8tl*qb-tF/bvqc/v/o_vZ.4t2*,keqx*Bn {'j%ee#"a \SvWST3 +66/? m<*By&H/"9 M 3Sn(Y/e2]l\m;^F`5%R.b%]b(k9c{esgh4hj$:m*{sg/ow2d{ 4N<|4|3{24Vy0v_-tms*n۠'j$-%e5M"a9`! Y[ V7= 28. 93>h@-UH'O}z MWY\!?_L;+|aB5cgB@eWYL)g?XhPQgirWVxk،Kla/ dm!Pm`(t<}/fyK4~e8ށh9춂9펂8WW6N~3V{0w-sF*csnp'EWiPƥ$Xd!^7kYeG.bB b6< >6GI/,LPs$[|Hc/"-f".h68uj`*FlRnc doK"upB#Yr%$Ȣt-$Zt .z`5l준U:鑄=X*?0>3%d=Asn:P7]@4&V|&ϐ0wR-'r¾)8mb&gS#b[W!6\Q<)L 12G ;A E:|P2pXV) `!!i(%fn2pM =rZ !Kr$a`uj&sPv(4xl+)z0*g{Ph4S߈< PAS;2D;ȍrUE 鹎5D)@ݿB9?A;˝7&T 4{:0;{v,Tq\)Tjkϧ&m7f {$`x[^%X .?T G8;Ns FD0J @KbCbSq<\;4e*xo%-*uvk%5y&';Bzd*YT|S-n./ځ2U=2F ;c\);a2] g=Y& ESqNhLMVVF`?-%kf7"Nt$..~o.7yg/2qNvhC5i 8 F;fPq罖?ʐMD阓(I]>E@8?Aх^=fT?9jzɅ5,t}t3#!n_ui1-g&wuU{{O#~2-;z5we @@s IoSo j1]qcAj]E&uU)0[M=3VJWfP~BUvWE]%beae!cO޼`5[6 KW8 RMߐMa^؏H힆D"~@V|vZ \} =%N*wX5_3 Aۚ?L|}.Xnؕ iV'uj5$)T4W}洗p>J#.ePnHԓ]̱\1ӌxe(^RbBC}讘{x;讒s!r讍sjmsbhZ=[cV|DS_HVuMJ[VnG?XfAV~^ X}ef!-.6t9 ID MVOL}^&!>mD1䃲׽HMrtܚVvɽ*I a:̟']}Ԩ-j7xǚ[uA͔lĎdF+O\Y{4Tv}!MqVvGamb;p AmipGh<f F`7xc3W u|!/2B*g5; @?]\J X3fɬ,g{&<FE]Wɶv% ϢMƻמS3xh4oNqfo굏^!쌉VHDNm8|H,Ov`Aفio<|h6x`2$tX.:qJOx8^5{ nߪmKѭnJL%D/!e 9ND,AOFZ!:me^1j2L3sy6"a֠=J~apyŰQqQ泝h,黗"`P吃X>F퀉PIzV|8BٛNuMQYzRKe'VXD#{>P3tm88l24eF-])NU% N/!FHu>HZ @?fj pUZеXZ6e ˓IYێp!@"^ \8g V%u]]8+q8d_af'*h悤 Yaq V4mǙRUŒLvFo̽@ǒ|9t4,4lv.˺d)Q[%mS!x(K WD"5gV< \Z5:`-Y{8q4Ej=Hn݂1Q"k"nDr3Gda \Q]֖M7祁.3K>'QJ&oտFL\A\݇>;׍6jw}1 &n[+˰Ud&0-["sRd;J :Y+39.,v6!-Z!AN&hiPioɡa. ]I,w f`-~9HJ'ET-Aa y_?끞>B> X7bd2pߝ|.,Fs)iD%q ^ 4T!J<TA_8&Y1L*\$BFVu%EFj|f}*̊pyd.2)AKwzbR&w]K+O ?{.H Hi,-\G$v4 S=}3uH|.dxj,釦w_*'zw)Q'wm&w܃xL$lv"OsbdSkW3RIC=(d3X_S*_ )`E" ' _lY@Xij̺wZA)*ul* Th бNu .އX kF etZEr n1 ̓XRF'n `>T8?Qp2ady%276m%U=l#Zk @ple3dbd+VdG'dMBd%a_-YH(^7 j+6 T O Ir! y ޘ a 7-D߇f.5 bV o R~a$6eF:LjMs4{Y "!S4g?"n;fo'XYdilc**]fkO3\b\\+ \?iD[^Q`C[+6 *T _5QG ݮO[>hGV ! B& n+ru!0^7"Fjp IF5V MQOa3a 1{9"`DR]g]NSI Vw_VIBUxrU U< CPoI>0'4? ^)H e ,g?^0J3=ߢPԢțDZǛI@|#k mN2WW:3A EY(VPY2[r7ZT~NXdWiGvvVn-bPOoN`ǓLI/H0 B;` v2 )O# Ey>lqyTz!؅.4(jNIy0q~sDd5&$"S9 /;A :M/tEq31`VRI6KUuUKM\D`KX)rJ-H_B3G9Fe$*DfvB=# ?8 m1 3(Y:1X eJ_*]bRo&p҉)a{zGkN!i]&8PNBX+)D; /9O4!0-27(1|:{"vH</T\=>m>.? >1>m=R/;m8vC<4+ vc.a _'hp2rQ h@  7 L9X T': /0; 4<I;=C>Ka?9~$SK?wc]'@Gte@sk@s'wA.q~Al&1B(c C'UpDD!KF[1]HSxJ;K]LM_u jM$LB/J&$H^F9DB~5A v@NR@t 7S:ir <)e>l1F@79Afv>BGC}O_Dv YEm`bFhixGo@uHqIwJpqVKNhkWLXM&M P9mR_gT ]U\V Un)T(yR(AOYLfIBF6lD5eB(@=7V|:="D@c+B34Dh9DF;CMHl~`KJ]FJ[BYNV R\NrDK.GRHbD,BBE Z 56:,>e=A $"D-Gg5"J>MGzGPPfS[T %d7T7pUtNĀVoՐ&W HWyQXqPY,oE ^7 *a#?zdP$e$eJ$Dd #bxX"!D_0 p\ X1SNO IKf٧G&DG(6 4$ 9s!7>HgBG_%K)A0-Oy07RM7B(V#LPWroVXJ> a*XnY)~R[.;ޏ\xb]"YL^o,`!)e!z%h'kk(#l])%l(MkZ'6h%rNe#bax!)]XܷT'3Oc7.Jʷ;F0 1C,y 7(C =$ rC:-HEN(T2tXz9;3Y^dFp\LHQi]]^Z*j_ybz`b1\ HcBc ۊgE%[(k)1o,Dry-Vs-sdy,[q+o(k7&n>g~V#rb!<]sWXbdXSbNJ :8-5Z ^50v y<+3(CG%,~J%fS@pX \eM*]^4^ ?`FLYbWcKg+dpwf@b(h'{i0|io$zm*71ry.v1d_yb2LzS2G6y0w|.Nt,jq6܁)_l&>h0#b ]wgVXLRBSMD,)?8 71: :4 B,sL!iSWj ]MI!bN<.4d27fYEhAPiukocj tk nQ !ݢom"rob)bۃt/yK4W}7쳀 z77E5}3zz~O0'#vy,r])m &~g>#mb=" -\(Vm0QpN%DJ$.E& 7Q?O A7My/<Tm%]1<e n#j 11lB9Nbٙu-^I#YVȐvTOIO`V{JrFOV{R}*%m7LI"AloEu7 /:w9$eB/ S:, ^F+P5dW. H9s׎L܆Vj!}`cup,lY讚pcK|[:+S+ㅬK~D9w|> qIp?8j0h2al-Y)/TQ%j#QI"b|KAu "q A?,xf& -Ut/׸3" ;&U|&,vg<ϒ+j\<~x.cuQa4ڔTuQ7̖M^'G9VA<񗀱;őx5pU/-g*ɷ_&C@V!ͮNQFNƤq>x7@!0D,U0:s r0%z(EI.hm[0'[~ULZHӂFpp덭EiԸA{֏4P,~ +%V N ut.0W %&|p@1چl).xGwt~#։b @eh)UFa"kO/c:y//ExJ- ew(C6r&(g9rt$Js";At?sog`$RaE0l9 /; m,& pٕ)Z6Rz=S~Q`(n7ʌNH; Shb$ ?EdjSCIi /e;>u,h&Cu*d&t%=0o#!!o!Sp2 B#q/qmL`WRLbC6r +T ar"5r2& +bd+22F)Jn ) wP&9[<HO8vd&6/o%>n$L^hn \\vmhTgįg guhL`Fg!c+TuCh4 };Z) qpm JlZݩz:A2- b9 Ǫ.%Q#} >mW6-R Kn0^"O4h"M6< h XfsPp eA__c@*B_|pJ _7F_]6NZ\uC l3 }'0.a< U״ ic e # ;- )In(ƺ+Oj-Dm5|)q1 ~%LNd 36K' G{)!XR<3}bFJU9masT_kjj^'W)KWx`WWxxWzLV0L> j1 &`> _P y 8 ~ %  ; LƞG u,,8‘҄0*bu:v4^\L/EU C#HT&|Q2?[hk7ZPYogX=6>|tQ`lPwP4Pi#ϳP/K RC?:B 60" &XxXnc H;J- p" ]j8 QuG ٺEM iH 3! ^]' {$lVWK,9? ?'pND0U\64UJM TcjSvFR-@$K5QK OH;9F14C== g6 3. >;%Z"+@ x7 @]?c4^˥| ˾^)L P D n6Αf/r`&cA|Q~(?i 4%+Bt?,K&1PJFTJ5FF_{ESqwD*BIA y@/?̬<|8 v3T T, \P%E<n u> L޳#1v9L),2;qC~yx8 *jTM\,OS N %B1Z*A7B]._-+-1&EX.(4 ")E,6[ Z7l8쀐8ݓ8\Ƨ8D7‰5 v3M fd/} *M U#f ; .2 p3q 'C4 /(5 A4C6 :"7W B8 J8 OR9: \U9} d9 kN:1v:Sb:}Ǒ:T ;gy S^@BWA)A*A6@*?O>=1-<+F=RN>o X?yt[b*@OphA?f/tByPC1ɐC0DmE{EGVG, HIbZdJi%J5tI9UGxBEOb>Bs?pOE8@,B.A=KCTEc_aFbfcH r Lt^JnMKN N5NnNOXO'P KR/NRN#.RiQAiN$L5qHHtEh&Ag>-:ߕ8cl46 0uy48a;">0-iA4DT=GFJ)OND0[YN@dOp P1aPR^-S SKS<UXT^Z Z/wZ;:NXIVV$RVO-,KFiGBy%>;)ь8%X .! 43q8`\<sp@%E /H6LAQKR!US<`xT)mGTZYT}UoVAW)s=WwB\X?M\c_N!Ra}"b_E"a!J_~ ] Yv UNmePK4HG9jfB  >K);$-+)v 1%J 7!=cC"WI'VN2%S :T$F.V|PW]\X/OiXt1Xz[!=\DK\](]Yt^cB#f&Ei\'i_&h%Af$8c"._ [XVt؅4QTҨ^L&XGŃWBt$>i7(2= /-[ 6v( ="En&N {Wy*XZ|4Yv\?ZhK\XOVs^f_zw)`b9^cS%cf$d$_}j(mn5*Vpb++pO+No )Om^'j1W%$f "aOJ H\,EV#8QRGK#FٲBAsA$<,6 v40 e=x)3GbT2LYm!s] `O-_$X 7^`3Db,R$O).6Jb;D )C> K6Sp,#]I5#ig#n2o >*q"Ur%ku'w9)2:z,>)^z1j֋~7V2;b;(3F~uW:@ ъC:ܦDE鍌JԙC}!̏AR절Č>8`\:86|2wl.rw+B^lW['fl6%`>"`Y{!L@Sj0MlV/o\< jv*he46a@=[ GUQQ5M[+E%gD=m"rj4,}O2=z6^:F>Kt? (1E~uZJ, ܡL䌓L ]ɸKgBHIEAXj IeOSqS^A`+V +mN?)y.iC5OBXRBGSyLF>MѰR_XU@Wk$_VݗXT狔DQ_MN럍rCH@ח0DMގT?~;y}:7sBu 4 Smm.1 #fee._^-cW7|H4 &;yn=${/xV:s EnP(h*'\5w`dj=Y'w6 N4HLpPBv,U!WG~`*۸K՗c?ǼdFĞbЯz_朘G[ؔ/wWUR쟊wM {~HluDVzTm@ctTeO|ڞ mܪ's槇@[,ٙ߇ p讘Atb讒jށꤋa{PYvhW+Qq2VxJulCqCg5j=czZc8 _4[38\Ss/7Z{J4CϛWSN }w~_@ --U 8m[G$SϤ kXc(2cP6cκ*̩Xo*B1lގ3xnei锌dҘf[ꒇ+S5SK4fyvDrv>]|kN8Zx(c2s\N. oDT`)lgL#&iCW2Af"J Zz=#MD. :; FvUX(yyMCaUMIq1`?xnZ[o!Mg 霖^nTmV(GON"V&F y?՘(ru9LEj3D cL.bf[)S%mKTK!|'C-x[; (YkѼ I]rQ nfN%; ,omLlj! o&7؍}o_:_lmF~dYᦪ%p_|D<\okV2,O?H(Aƴ^z;:r5${ j/wb*lZq%ʚR`!!JlB$rw;3g= ;iw   D< g>>{Pfd_VDj`ۙ^ǛOhL1&bHU BY܃<ɮ?|6wBt1D+fk+W4b'Y" QTOHy @롈b9p{2ja^+6ݡ[ 1ca&"f ?sBx`ja*L{:tRNKk3;{3*Gz.thv,[Vt*pt( Kuc$"w!-u}6Si+\.P^څDק:8a0 fИM( {=! EY 5ZW/_GL.͖<Lf,G6fh|NVBe-8r*mBsE(a+dr#򄂈l"ul !Ծ m}oFfm (j[[.M7@5o ?+ ##? Wn yHte/1޸7J{IȮ[3?eU4bV%M?.$c'Y6/qI'r@p%b+o)!~hiM[ie}j=kv!kpggxZL> R2b ('A>`ܵQnf3pewq4ep{x1Dk[C6fwXK0~Y oI)6 "^1"x4jM"`;h k\5h tXb|bĔa7?a?Eatb:?y`]}iNft> a70 G%: `]yՂKh>6j^,VCIȦtx7h솽'Rl-#PG 4D-]%W4"31cL5@9b? @/ $E,:$  C^,P^+E(C/.ýS?ad"I=E}C^\db=(I T@"&YLP$R1\n7[RY#iX ZQQp|xQ2 ^ >AjP5.%DҮ8#R_0|9g*u ]N_$OB=_;?"VM"}T0'Urm6U% NS fR[6{KZ=KmJ^{J~ϒK0E~b> dA4 IN+;"Kx'Q TT m< " 7AibwGE,#BtFccmz ls WFh =7H<~>+Jh{Q2IKNbDMvF*vEoG0E6HBia!@z_< 7t7 ?p1' <)Q"4[ \. <a9 $r _3 Be RPJ $>? `/ <  jUcqbf{;SPx =M-(18(F/EQGE@9As]7>pj<W-; ;S6B:aȺ8 u͔6 ^[ 2 =- H'yw!9!o?S ~jXJ' B#}0kp5 KJ E/ o6  ox i4ZMY B@cl$52(_+E%+# -%.,A0 X1J!kZ2ml2Xn2P1 k1 D// #-m -* =8J%i N,r -d %.A K-~/ 3/ 80r A&1 9I\1 pQe2% [62 c2 j 3 u\3 Ay3 34 ݞ3z V%3 4~y5g~6p{6XD6*695^@4LVg2q0vz.8, +&**$n,4,J#.5 :/ '1[ /2 5F3 v<&4 E(6 MC7 WA8 } *a<8z tg9 s}: t;N;Q;z]?~?>x'=+$&;H]t8>6N3?00X.z9Y,T+ߗ++.d&10!3K9)5K~17"78 @F: Iu^?-de@lq>DD|EV-.E3E(EWlE*FDWGSzG^hmFD'#B{?[<@ 8au5I)k 2 /JݑhK-Mה,U \*T.U1{4)"7,':`3<:?gEWB=N]Eh|YFk"sbG, nGi~H\`IaJۣJs'JL],N('OKCVOj2=!NpLu`I[F:pB^i>D`: I6)ۯ2Փ/-"U( -m~,1x=5 9$]=.:Av6D??H$.JFI\GTJk_Jf,kL:|0Lx+" ~1J 6<:eA&;G^1YKf9tLwDMzONq ZOTHhP`yQcSZ=T"y T$Ty]YXO] ^6 _  V]c[QPVWSNܚI D?%A;68g33# .))y0($ 7g >dgFINp(Od3P>R\JShTT5e1UNvtVR|X}P;Yo}Zwi`[zl`"d-d$f%< H[p;CS#8>e+t75. A$ I\Q?WuwZ"BZkQ/]SaW;^PH`aJ[bnd gAhi iv#@Cmu)Fq-Iot/:v/lu.K|so,=x0m){"|,ڡH}- ~4Hہ9G5<'0 K=룅ҥ<57!: 7+V}ay3xD0&s,n n(h%c"A\k V;PYx 3Ih?i3k.gb(^ ^3Xi>R I#JiS\A3_6Ylz.(wu,: 0[Ƃ4}78Ϣ͉M9s?TY+C]呌ۛEh讌;E頋6DRνArgI> D:4V~s67&y2D sC.|m*g쀟'oax%K[-p#iTOi"iMq gu" %} z(KlvrH('l4f@`QKZjW;,QfJ#s<,<]2MtŽJ?ӋGF^턆B'=V|ى9wP5qx1knp.heh,4^'a*JVZ)nks]h::ma7feY4t_3S3^WhM2.NWtO{B{w ~c;e$Vi2~O >V|K&w<0Z{p~jVe.ǀ\"D!^.m/Gf,g`l(blԧmYBlHjrfS+$Za]]S{X)rS7V^iNVy\azJcsYF2lRiBeK?^ E=U@x/*2 A9.żPH0m`.&BNyk4[ɷ?لڱxTq޶~;⸟sh3O>_yA쩉;VNNV{SG'At9@E}Zl9xle4#s].ov]V0*YkhNA&hF4#e5>ژyyپ't 8U+ 6`}M*"rbD=o6od0|,ܬr*X~i讚aY#ꥒX@:PѦﴃI |ZAt;RgmQ5:*4e/&]*UU&DM"%|^F/xO>t7i욗d"_$ f$0 JlpnU B5Sf3]eEW pbgϡ]j㢩Ğ[]&gVؔcQ#]JfQﷄC2B}T=Zu6ǫ`m0e+n]e&ћU."pME0?\=6pD/w[I4v(J!| }a6 CQ {8ݨ7]<+}F]dS+}O\_VDORI FfmPB%݅=}Џq~d7v2fG4n-fw($Z4]#vjU\vLk=D&NJ$<!'e[A D6?JZ[%]4&l$=Hk}#4aiJd5!dA_dܞfDe~+ Ab@CTH!xW 4=2=T#$`4Vi}9a=Z5__`?s^ckX1JWRȱWX7pW_T/5KG \9- jS],R"\-P -B3{ I%B k*ӆ@$6Dɦ4BȆ, @kNb75|I41X7!Y$$TUWlmVOڢOhO2\OObNCLn *8 +, pqTMl rc־ݸW[%0ޔ&Ӛ+r<;fk L60| cd2 H3$H 4H*L-2BLYPEOQh7PvINי8Hj H_YH]H][ H ? 3K(n 7:UF"Q8Š)g+56B4s]MB:-,S C)"GA$00FJ6E@UcCszCsBl:B BN (ГA (=r 7 "4c.vk&O8*Id &% mV ޡ Ӧ38LJ5C몼!my# kOWqo>1}*M L>S~%A-.A6Ew?k_= ss=M Q-< A<. 8r: q8n U5a -0 g+$i$"!&$ mq / 3 7/0ʻ`DEkH;p,T9 dT q= aOnO<q<*$>&n/`"<4 )2;x@6Z5m<4Y{̃3 Sҗ:3c Ʈ2] 1 c. 0+ !)'"pPz^sR[5 ^N %N- }Ϥ 2 WE + 92 h$ HJ  Aw hRY2)K >}3Z/A"T)%B!%'M<)DkPM*f~h+v|+YjK+R T!* /*J ) '":$Jw dkhked_of&u y'`&e'-(V33( 7)` 5@) hH*c O* Y+4 b+w i"+ t+ 8[+ ^k+ + ߠ+ 7m, ,V , 4,v \,QA b+ C *0 )a H'z K&": d${K # "t ! "J # !&| 4u' !) '^*K /+c 4e,k n:-d rD$.R Ln/4 UW0 _0 #f1Y Tr02 uP2l 2 ֜3Z 3 h3 $4 j J4b 4 4,3A({41 / [\- + (: [&* $4 " "i #A%}( * !, )4- 80/k 6}0 >2c zH3 Q.5-m \6 w ?d7F o9U u9$ : 0; ; -;";<n BX@h;=u9?<622G m.pߖ *ٙ ' bP% f^$A"&sO*{.2C5"5G-8 +4; =>Z {H@ 8 R?l^fAyjB-{C֍ID1E(8EKFJ2HBJLLy KgJkAG~lD@jQ 00AP 7CWBD)$NBEYF&gGapwH_IKt6KkO{K ORwS 7 SRIOo;KGWB =!28έ4JǸ9`05 :, *$X0s+`#v&V)g e/6[> D%'E32G=&ItIbJasSKdL-1tM ՊNQ\Q0hR\WIZqi}\t@8[Z4ZbW<<2SKNIk9DSP^!?e95:18 h. :zJ5 /'(/9U7 E;^Iy}KO]+Lm5MCOMP,`xR!qTpnUq~WL{)'XtuYpcߍ_'!gb#YDdG# d#b!c!x^kf@Z3 U;$P-kKIE+@:6z2E,;@"no:$3j&-':> ~B& JDPN SR.S:U GxWjZOYRS/MGGAr<[@Y'vV RMS(G8`3c@/E>7 H,OhS@p#a]41!f 0KiFKl=!blp*d$i~us}&v}'w<-zEb2j|n5%"}S5}E58h{3Hxʿ*0t춗-epI(* k&^e#y_C zYSMv|G\tt7A^e XfR" *g/ pdQ_SZ(UR4MALEt L<W6/Gd&%!pFn&%7w*XQ|/yf330(3Iy8r>9>Z뎄 Ib,!_[YCV΅ wR!(BmMVy@eIs\DhlU6A=eN)>^G;|WB#9XO=Y9 FËiEZ?m |'&^ v7[H5X|$s4:`(vdcwŲ{P sd.dy¦w 9tcҗ"4o讐zjrp]ehHxtd2+Zix߬׵ ؾd@2^ H%׈讖tS讏di|`avWqhV{5Ol7tdH/gQmfAVb f6;^i^5iZW(0vWrOL,STdGC)R?j<^mLȖ'Sڤ\ζ ݻV0e1+L ;u3Se{W+wԷM窶֡{>&w%ΦswZ5讜2l۞ cyȲ|Q@ }fIdvIB}Io ;xyg5t p`0_oDXo+skcMP'3gH#dZA'!a9]C-_1:u64TɜeӔ["aK gC j9I8Wm΢޻{rv;y٪kCqc)[p밎9SISK`b~Dwp=Mo7BhS1E`, X'=O!P#|IjxA~t :2pq35d6vk+4@Qt84\1M/Xxh\d_IWUYXJPմ뱏J%wDAp>bx28;6Mp2pyh-DW`(X#PHI@y92뀲 ,ۗ"&W0Ir/Sk+!S {%vV#O-lIXJ\DIދBꬿY?8J1L+hC&!mPP!ϛ yBe$'-)'C$A He2Rki<=̄`;4Mt6/ ~4n|j3{X0>w,ދq(k $͠c)!Ǡ:ZodfQrHŸz@u 8{i*1,X* Ť6$ ^c^GR LdؿO"-Z̤  rr DZV0a~49v/Ewl*oq)do(Kn(97n!sl=fc^eRTυKaB&9mT1o *K 縺!$ k ̭0X>m=rkB֗x=$-4C<nMp 6=HCX1'a3m&'>$l%ejN!Ȍc cdfvdZPhrF@օ<~~ҵ3u n+_ ʇ $R 3R Ss#VJͿM_W.1@y(JWѱ:,݅cj8=kP'5X :?c1i_a4Zw ޡMZXZNܵ\B7.[XdBM\97B 82 ܝ. E&ngՕy`"b2̐q0I]J2?/DzB&k6\2$_6N:>O%;y4)UW9 `][]HzW:V\W XfrXTkK` @~ +`5T +>>("2&ѩ hp˛A1 D\P+c<:,[+ lu7V0^0m0 I,0-W 6WrW=VprULN%7N.20DZNk6;OXN E;!K +@ v3(fT߂  ̷Ԧcܶ6xJ kx'%fJP@ͦ0">Ƀ lx MR7*(,Y D 8(KP2J+QHN*l|G\F 5F|5LhFk }][Fv [8F E_ XC 2\&IVc /{ z'BZHh#~(bĬ-7hsN'/z{ xcF[$"='%XD@.C-K+Ag @߀? J? W`> !> W&A> 4> 7f-(6#}/^QbI 't?} jXZ V kQD' 25q]Y@ 08Y!r=j( )< AE: sae9 w8 b{8> 8E Ƚ6 |7; 4d ,/; lt(gwj!RDU?f [ EX /[2df?Z\kx[Ex hjWH;IU%+z @7 0&6 @?4 7 [3S )p2j 9F2 C1 30n p/f P-!5)w $U.\o) lLy X 0^z,4jZȼA7ɟ*H-D #mKp=Y `R N.;L&%% e2 ,#61Uo;->V+ >jr+p `+& V* * yp)&y'z+!$S)!\DH'v_q ).Sw2a ] rR* ΛO/ @y'Z/ ewF gXJ|B1'=Wt1t'@l!U!>S8y"MEP?#|=e$ 7z$N ,$G # #f"_g  c;s%5v % SfG;2U!!b!'p!#.5!<3@"^8"q?"H)#>O#X#a$.0h,$MBr$OR"$:g3$Q$s#ݬX# 4# @l# a# m#< `N"P 9!J^ %]-> c:?  FU Z! !"s )(G#G/^$4$|9%xC}&tK'!TN'_(<f(} q3). ) C) R* q*9 *q * s*9 0* ]) GQ( 'l % #h b!,Y0 ^ &/_! ##- "($ )z&& 0' 6( H>) +G* +P!+r a[S,}a c-N! n.ws }/ !@/ 0 n0 I1T T1B F1 3K1 1d nU/ - Y+ /( % z" #6 6>?}FyѮ >!8 #% "[(, **8 2y, 8)- B. VLb0pX V1>Y <`2F ld2 {3 [4 N65 D6% 6s (7h[8l88w7%N4s1J m7.? T+ ='\ <^$)݇ e$!($w;M9 nm~#'<*5 j#-4 ,/ t41 <23` uG4^ Q5a C\6 'i7v Fy8s ': n;v ; -<Z=~n?dI@j@LN>8 G@K R@cCsDqF֝HHG&IL*MOZ^Q%lPSuN/K"GfTCCR>W9IS4R k/' |+ (Q "&7>"1q+ $'0 R Ai )C4 4jE@Ff LG_IvoKcF݈P9KU/}X]Y Y@JN=W=ES O҅J8E@_;6o1ta ZI-\ *TB<O6y.%T"1v:< RAlDFkoH}-Jd\9L[F,NNY1ORlRt΅T(UYVz7(/123$6 =b HG3PMvKRd:/oSx:U^tOXefZ&q_|@b/S8b[e#a܊i6&k`(`7kd(8;j&#h$dd"]_ֹZU+NpOqIC6z>`9 5QX 1U<TJR-O>FIB)|<,u5P24A(% KkVPl$ [\U+/S_Dc-`(g={k!Lo5"oq&ʈrf.+tq.Tuj/6tϮ.s,p*ql#'gk0$b*!c\<VPˉJف[ODy,?Uq 9c bAcu`@H[&ViP*wI7A D87dCOe(\8i !g5o$cUt(Ζ5m߀7&N>7W}A6/kz]4wh01*s-n2S*hҒg'Uvc$4]0J!ZWyPq'mJiD:b6m=kn nuqq5oHkfQG`+Z9R FH#T2?qcb/*x(0F)y6oXq<=.Ɏ1?kՌ@A?/&A;:?c/p(V[h%IUga6#NZH"GS"@w9 wfw[w7wt pky%dN4] BBTQtJKdae<'xo75?x赐(XˊVT캄|^P.8r_L`VyNi&Hs.`DlX@9fAQ+<3_hJa9XCDK7~P?6RI :5AF t _G/ W0 Z0,M ?I"O7*lk}z5>kZqOStg@n0n]ݢo?al讒ʁi8ud걅kU_2a[=VxYhVVrUQ|RGkJ+N9dCsJ]=cGc*V98DN3CwF0B>n?K5􅓟ǒ𖑪# + C=hNY]09|@XޑУ~^s7m Vjt AyFSnQ|̊dBvS[qv|Rl6Vv%JgBoBCbh6=Z^G`7iZMY2VR-S0Jn)QZB&O0:Y:Y$Emn*~mēˆ,>PזdI +=koLQҢ|bxIԘ/ӨxϮneb\줇3T"L#gxD~qz>yU.j>7teFb2ٗrr8kJ2 c-\%(Tt$a}UL xEWBt>q7-m0dݗj~R'L;+Nhj߫E(4SL,~ZMNiVEa,]Q毩3O.zS8زr3L"k.Nd2)Kz-\$ڙT ɔ|L1hEHxf=4k7{0}>=*6e򲥡gCP2do1d\bHy mFcBEWT=)S$E`}6 gT/OX) $$  $2~W9ԢIr 1^=r E7JR|Wv,~]5 o)D@wpU'lm#$4g#_Pf"le}0Ud^<4WZҿ5O{-)Gay0G?YRzy7[0r ) D# ^ @\{IfJl Rǖ׃(=&*jb(+@` n3K08FrNe"t1eO"{; dV! d^aiVZOZ^Z@Z.\D>XZ1n\R RJ?TةAz9 Ϣ|1 C[* $+&QI =.7 }rA8Bٌ= %,_.в{+)ℌahb)j; G"XV2 Pjw7~Y]Xe~PG7P\`QR0~yR O aF- =G ݱj4 T,S% .ͳN?Adq=SE.,ȕ;լ2`5I/^2&7l KE:/V~6V[8TzMuMz0jN=: 2=& K< j< |`; v 1 vopHb{ ۓIt7#z/8{6qY$_AH2~+ 3g #2 I@0 ]. !u.&. -dԽ,kͨ,T*&&5ie!Raa=s|v 0TP l/,qM.U:Tg=by Ex hQ`#P< D% M- D!`, Z;*u Wx(-n 'Hy/X'sF-&p(&I% U$Ma!%K'86PY~e ~=_YP -Y4w) Un`<L:4ib'͏( wk[oh}_D#OL! :#W 'l' 1W8y$6 kwR# h5" "Q{!{!hC!-\/fS'w@]JT LN;pF IO&'@.+L-;ϲ$s,…v g DWIdV<miw0DE&5$ Un5oKd V w& ȡDP=RԴll15x2 !4'.h38=?}6G%>N[WJs`Ng(irj3R+ƞܫRhs LoSh3Q; qު 81!)j)/-4:RBK;Si]e p0 } G u * M!#!Y@!]A_!?~? e \ZFO[vN*Db֮ l  . "*Z1 6 8=>!R Gq!O"vY"o`6b"7.m"8{#4u$4h$nu+$}%¹&[ ' '= 42&7 %^ # //!XY,Z$\1] "r?چBm)Dqb?E^E:~Cxo@,4<8d 4ͣ }o/Ƅ >+ ' # %!)4?}.`yX' Kv^(I 3V E4 /63 '8X 3: ?; yKD=Jf ^1?(oA:BZE%*EFOYJM}mNN#( L1!Iׁ]EЬ@ɡ;[6ʺEl1 /-y k) F&~ $k'?N%9*2k*$!'1 G U9 < fd> 7,6@ .7xBUDDWFk5Hz=JyMMi_OSoTiW:aX()Wg~\U6QoVMH0C׵j>|9yXF.4 0-6 ,w( ()J 9EMi?R 9Vf 1G>( )[T5 9>9_;8IXlj8hj_i gscF]RV/[N$ />_E!XLi9Y[(%2r*)C {05m6,706;ҍ-9kѸ:/잂f&9~8(zQ6\vX3q0e@l-+ug }*GaTu '[dl$jCUEe,"8nN] HW?AQ( ,;] v tt2?m<Qnpplu+ (gpuap)7Z4 >9cODIvGrW6"kq=/:7 jh=Zg>'Ce:D)EI~dECBϕA?{͉=v6:Uqu6kYl3gedde0;|_6\-jXUu+R/N)qKNI!((D3D(<~K<Iz {tA~DU ySsw -k) (A \e,OrXrkMH3fF_lPSU3ܙyPၗ~R;S )5]Q>E)N:ANwJy{mFsdBm\Z?8g>T;_`M~8ZG6FS+AK4j9KCQ5QA~[J1<@B.?c?;/z:ȕ֔[tdaLX0yfNǭ/.oԽ*Tq@ڞ9 )Pי ҧ}Sz~~䄚?qz讏gv,^p#UjkVxIMf)qFUbDpj?]c9Y\4'VQU/FSNo+PZG'N>?%KL8{QBW%Йr$oȓ7]vi?)+~^J^{ֹ5q̘m󷕂0BnᚍghcdoP]>/4sU.oƂMbiV{4FA3t+?ym=9tf%4 o^.kW*5gPy&cID"`}oB]:[\3~&nz?WvQ`ԣr"A /EɫۧkU׿6%{iwf_u#oNn)Fg/ZɞR2\Kǭȅ.E Da|>u9nIn$38`g5.ƇN_*!X%}QO!yrJu=CqR<$^m5{j/ΘIW?- GS(bYzZt崧RLg',uUJO \LgH*׊BXӥ)=%aF|7ϹLt2km|-_f)`7%?X!ȕ6QJ*DJXYBC>M1J -o+ $ ?nh]ڳ51׹><h=(&h?ˮH>fmf C D|%/1P +,8[bX*wPVPgaQ*dR 0Q+J D8 ֣= 2 7 xa1 Y0+ H<%<&QL* 1KT{x[,O-}}HPF >H I VH E -> 8- 1 ,S&V$; ;Jtt)E| zPSރuLL(8&.d7}Y^.5\89t%HI 1H { WL30k-@3&j!IדTӤ>y Wʎ4Pz/%^+ӵ&jqUuB-6 1 @j+? O =Z CoE'/tT -zi z_0G|^!r# Y`/ l". B6,a+|_*d)A)A&>'Aے(F(o$ nTo_-t  4p9܍NP- 6e)Qr&C3,hy %,u 6qX&!A35 %): (D C;%)xZ#r"B"&"N!C p.9  v#f\lL #l! $~)D+/L6c+$LJxr ]i"Qf!R:A3I!S" N J7ST=)kc,xmFR/3bz crj S@= { A ACr; 9<ӥ&ǺbOd7dX0v$ =Hoe^:NL!82 @"=!O J 44" AKMf^f7tgzRlCf8T8kuuWw4^0|H[  'LK $ˈ(s7!u)>>=5Au fJ W HgU :. / $x2GI\ `+ isS1K/g=1!Sһd~|"p/z k@v!Z'.c?38a ?EG|MGU_f3p_3}#'Z,!3C9;5I&v BM& \._Zd |e"#(/G5"9!: CJWR$\ddn_|7<' l.!W,1;&&.M/WA[}?C'LD9k  `":*P/1B6d>?$FNpXha\Fhlfz;*Ǚݞu/@y6 %zhe`pQH {%{p߈n\ ʶ!+ l s  #%J+*[38}A/{wKi{TqdC<^itxvc44b:!" #"wx"I ue } ޤq Ɍ.=O $ n}% -4c;;tF[lP0DZn'g v!\"@#_ $%O& (b F)9 ) Z(> & $J!q\`tW<x|Lr`S FQX!b}7Fg " z&& M^/H5 Kl%@#!{K#fg"U#$:e&C!s(X3*"+fƟ+ A5, 3-{ 0@ 1Q x1Mp `<0 -\ + m'o V$d4 osöE,yEA'Tf9!s6bv/{@ !*{"0'L$1 %{)8}'E*yKO* 0a9-| q/t <0 |2 3 %3 6-~8@9'9m7&8<s 5hc2 *n/ +N U'qÒ # j^Y"1 *bA#T5g:( %)I*)-?3a. =0X J1 \Y4i m6( 8 : ͡; eR;Ώ7=$e*3 .ط * p2&P #!@a< {5.v$pbS( i.>!1pc2s S*5@ R6V7( ^B8# V;i>W@XqUCDE&EqײIQLS$M) (LڢnJҎBGʅuD„c?[;{6[(2w .6 *k 'M %H A :T M2J k+uJ$'+!C7 c; S>) -@r7BrMOE_dH/KPO=ޥ1OQjQ(ڴUQW1W?VϢT``jQ)oMDH4D>x?qiI: _51! -y *n&T?NC(H{MCv ~?A" W:v0 %p|.); !E!I,KCP];TeyXf7\XU\^;%fa[C{d!d 0"fb"`!c^k6Zm/VBYn\QdhOfh5gcg O]U/(K +A.BiP .j%>(7{/?0'gn8IԆT:Vca]>腑8@£ZPY)T[R='N&L& GF&A@B&d9}3x-?| w(ty}zUwq( `i 5:aGZ;T ZcA0N}BxZՎnM[yKOqՋ|QtËDꑖYH\ J`iI~,GPys DGti(@nj`>=hX$:}bP75\I5VjC2\O>1|EH:%0SA61'[9ۄp-dK&%˃./=' ): |MXrm.1z@R`Pf )ʹgpҾCeo͑>yR传$X跕P,[o֋1u\ZBRjCW>V{`~SVuWOVonOL%4i>HHKbBbE\niHL/J=X@,=8NJ◴Y◪~_JĒg;UC > @kkElp-bĞJPWwkIR{֬1TFXuz ou踗zhsƋ_nVj)V{&NeutoGa mAV]TgY;hY=n`5UNZ1Rp@Ss,OL)M5E& Kr>$Jd6`:bfsE>JڜvrIǾ))\+3Ҙ*NR-H.o?l|xGcDdiYZbY+RSLJLG~E.*wO?KyETp9tj 4oc0ks\'+gtUY'c9N#`LGG ]EAZ9X2ȓ+ —Mu~q۞)0Boi~ڒ/(u n$Kj,5os>ǩ\sjYȟdL (Y"M<$EsAw;_x5ɕ=p2#s"j`.:x d*fF7]&~zV # yO8uHqALn;scjc4#g#.Mߖ<`rC%]nHaFό2YB@^ߝ&iSHŅLplYH E;؍Ȃ94wD/}A{n*8g'Cb$q]Q!HVJgOYk6HWB.%u;~5bz_/jZv)XM웘Juڦ` P|<cp٢xK 4pq_C?v5m:Jm}L2Fz 0|gzx2.`.u)چl%˶d"c^|rY6U$NgOdxXH)Bw"71 F+ $ O]2h=}Mp+3bx\^LQ~ISC}ecM2 C )<2$S"9_0Vh8[~n6SRREXPMY"JBgFAVbB °>1 .9H [4d |. l& uĢv]`O@#Ի9[ئ:S8'ȶ@Ԯ?>jem' @d H8:E% M.5RSI`O$pG*MG$}GvH %F B Ok= ԝs:# q΄7j q3 |.L)Y!n>=|dqf3+NY91rD5t8#ϣe+س#Ӟ&還-bS0 7Oa/2%> e-B&Bl= :P~F6]ޜE2\/B[- @Π)ʗ"o y;G} A~blɒ_|F'%j( 88.e8}Z_3;04P,f <1+j>/q3R;8 evb9 {: "Q8 d9j!9N)`6~ y1>-Lw߷)lڥ&Y#a$aϐ Wɡ  ۑ %?`+Զ&ir UF)*v{# 5B *$4 1J1 [l0o0c/]B`.s6.:-qJ+q'C1#f^sۻt#@ -(ٓZx@!ԧn7[7ަ*(1ʃ"fc1K-'g y 9- !+Cs)1d' J&dZM& e%Zԣ$?$#1!,=6s`ߐgM۝ 6!K~rveDb lE("$ۮX1/vT'z` z_ B;"\$N%_x$4=%!'^Ax1j{X'RXY?_f*YG "o "Aڜ: WO ؠ-3 a,юo 7qX@-8,%rV9=o!٣O3zЏt'?HUi[W0  XRvd@\ ٍ h0)P@+E6GF+OOOpxG i6)Q,=6.9T E+*4}Og)3c~Grcy dg c/vML [Q f-F'NLxT^8e#o|.6tߛ9ݩڴ9q(I{,v O X% !t c  j jC  J!(r7/w59'B5IyQM4[4oc7m|3zc6HTB_=McU#p!,4T\E#BHate ?[[   Y2  ly Ϭ* v 1xmNa "A*W1YJ27Y=` EI5M5!W`mkN do3x s;z m  ^yH > Vyq\XD)T&bKV "Q- WՈ0 go ~   >A  A#,!+28K.A~P^J lR l]S \yi:uS2v/}z]wպ2%Kd"_2'&O \aۚ̀     W0zy$)-4~;OEpLNd2Y'|fDuwgAڮ9d pNHIkin*څe}ӪdrĹ4ڼ2V}G t y A4Ua&/85/~6`4?vMK8T;dr) /pk]} t h# %n %% %L p#9!߃>AʠZG%2&$ /_ m[ `4u'(W18FYEjO/'d` ep"R@$?&ԟX&JGL([X( v,9 - - d-* M+ݽ *)l֥ N&` g$!8G^W˰mp*skA/] ' Q3 vtm]I% f%ec)v 3T!_f=n#EI%g[y'Sl* 2- /? / _1 Դ3e59K7W7$l`b6->4` 11 /#W , q (̴t R%E"pّ͛: i2 1)  & Y 7 nj#' +P)o5+A-N TU04_ h2 Ti5 &8k 6g9. :k>wz@AKAX!@ 4=ȉ;?8"4W DD12 - g*3 A& $ !F>M5(|[z#Jo X%! t,V0x1 +~5> 66Z K:d!>=y[}AE'33FH+oןKdLxM(7L>μ"cJuĽG5yDVjA6B=ߠp: 6 2$Z .6~ *v 'p@S=CL[nD{1:882M +w t\$a2 ?9;- ?R~+B ?@F&{\:JxOS/hSxVz:{Z>Zn YE͈Wcs-vT^QXNeJޙ/F__BՇy>':8w5oP1hGR,_: Z)SKzIFB- <2'Q#7Qh EMw2RqO8XZp_JOКzefx+j!jCl~"^h#eW|#S5b2"RU^3 [dXWRS(>O^1]JvFqotAg<`Q37 Z(1njr+ha)h:Ab=ZFYXAUfNHET *: fCW'U&fIQO$L[I;$.#F"DT$:? @=%;7j=}Eb<+,~3yZrmrrRm7e)] >NY<+z?V 9IfGjٚKbP~O;}?B;<+>A =HAJ6zy,?tm=\ond:j7[X7eS5sI_L3ZgFK1~T@/vN;.HB8 .@5/o08;!:ru!#O~yj߀0my$Oyf~,m(]M~`ǣ``}Kba tPchEN{{UPg륈naQaUchO@Vx0YL=VrQIldJUF(fCC^#`>@K[I8>|Ux43<OM0^;WH`-u:@D+k;1'7yZLJϚQQa^D\}d맼k: ߝ+lUI\Lj#RtxOF{Y$ʦrtcZft՜]"ibUfgMb(Vx\F^{r@ZHk;QW)4e6VT _b1Q Yf-NeSr)LMA&J F]$H>##.HEQ5qC Sd3WzWʓ )&HάᰖDb˦g@zȆqB~~,ʢ}b؊GLВG@Q~7{:iwt6eq"n2amK^h/,j4QaQ+fZ(cHTZ$_ NJ!\_H!8Z9AiX:MVY2.HFT WW\nJSM6G(RMAfJ;{K5w /t )LHn.6i[ =Y,iFaxZUʘ#d=)h1*S8A6r#2F0Fjs/%7wo-I㉲k*Iq߇j"D,c[DUR\4kU0UM,b2F(eA5;m6j  0Gy*:3$EcV?,)HB)0%%ոgފNݿ]̴Wne2Z E"9*c!9obp5_K\08ZUP$aiM?L<OGޱNB%`=5Ѧ8]3 囱+ Ζ%; W6n8Hnn*tHMunpEAҵAZE5_1C|-0K_6{6*LU 6Ug R[9 nJ>VI_oQH34G) ED g CΌ]A 6E DA[ )= ;! N9R ") F  WV5Bq-ż8+*7f<,﮾?>kEmApy*h& =4..C%]u?ن=v< δ< 'P>6;#8a0B654=:]t>74Ăy4(1 #X G۷:.];ڧ,b6@!;K޳#ʞ4'\/_n*m5K&v8 &x6 kR3 ` xe2! }02f0g1E1ya .<,1|܅L+eD֢l)J0˱/_"$›QnI(g rjUZ=U ȣRҜB%6گ'@8b.h8}[Z\$F2 {4 c$2 MNo0 t.o G.7-լ-e1-l \*$('u٘&c%LΘ2,*M=z%0=oZFlk[EF<@Wu$fb+նJ&grBO0, vK* q E)6,F&qi$Ic`#~#oŝ#b!S KY~e=qHzq%Xv 21 Ȁcr2&9m!l7Z7ߦ*)-ʃ#f3.G L'  k ? &?+E1bYwCs֘N</_!WJ#.![5 b(F U}-K+f:ocS4uv7*r<0wU%zX z`6GA~=$vW\Kk7pZ'>t4<;Q8UiǺfTcݽaWg c A E  mޫWnqT9/6"Es?X3߳ ڢ ,i 8qX K<9jl 31Q4Q !l  B c iB 7 @FA,ps$nf vc b 9sVR2HcXyߗ XT602wj)+PQ6]+Dx iR; H7&0'Q Y /s $K_e~~AXڰ NZ NKן Q; E7n   a6S *<ٯ1q&ô[Q7l-0ns$]c }bnj]BNK*%60v!) 9= F)* Di ^ Ku Dvݏ F.  4B : mK6  ,N  Mk}ILg&,eҝ$(gh6 u!) Qs dU=u FT8/ 0,% Q"3a I&K w_$ an>  yY1 9}p" LsN DQ "O T w 8 $P }b}ao!-'Td.I 4 <7 > F L &Ty D^ ]e ko~ l|z ^ދ/ Dܗ ٛ ԩ ̵ a ;   {Cj LJ 6*gf_rwXں ԫ f=I! ( 2+/ 5 8 A I FiQ \Y :b l Dz Ҋӗݛq < T E  y } 3x M JH)4نAV -$7  dw "^ * l1a 6 =; (7Et M7 ;Um_O2jD,6wv|As9Y1t*IF(}} P6 0c (V e,  )  L znd S ld t n$ W _ C  1#S ^+ W73 r8 -@HI/R|ZnguA_T95rFHnBrB *'E+m+) 0J L<  i1 ZS     * $ P- b5 ~;uQE# eNypKW`geJr > " GJ ]c  fd(`&YD|':b hE dOvSG nr *r  E u K &/ /yDa6n? I yw5Rx zc0 xq9>t[9ʯYL C 2t'W`f>zβI-g=VNCFݦN~2# ;/ 1jNx \ +    ' F1j '9DTNF_n]TSnII5 2MdûU&T!2!Y!!U ;iodģ_^gi)-%/j 8 7 ' c7)3X=RvIrZVZ)1 kXT".""Kz$Ȋ& (b *b t+ y+ 4*@ `)ɽ 2>(/` &'$ H"A֠_/-94o05<& P M'3,+KL5]A` iSo#9g&x)f , -\ ܶv/;I 2 s4Jf 5hi55e&Ah4}Ʋ 33# 1z ,5/6 g)-W *қc ' M$Q"D E<6-1o SK o7 I,P" %IJ+(S6+A yK,/ e b2Yl {6W : : [=54ٶ@ NA&AsAM@_?%)=];;VYO29xf;6 3ڌ{ O04 ,{ )s %lRJB6,)Yf#  S{5)}m0 3 )6 >:E[?OvD+IˣJF|MODGORPz^O_ͬMi#KUHI멪U=G@-ED'XB?ل]<|^@h9Et4m T;/e*^VVY:QTLC>;4q+E- ;aYTCAA2;IMNoT#Yd\hhc^\`y*]`Eψ5\ʾTPY?2V>TFGypQ,~NVYK{Hs@E#kAGdn$i<|]#S6RWQ/i h|icv\ RPlN]Ip oAe.5)3l%r 5C!V;a5f,i&ɏjB(ݙjCm/LNiڊ+]^l"_lr/$Di$]d#`("L] PZC{3HPVq_SintPa@1LQZ^HTBOhZU;J|3tJt2+r*le^NVWTMC4-7 ?#^3W~3j&k`nW;1mG2ꕋm18七kъ2qcr&wx!3,s;,me+#iV}*zeBr(ajh&{]`&%QYX#UQ"QKd!TM"F!fG9A"$6 u|[?|3Bum.gpji TbZf-3J Qg:*lZf4=W ջlL-)ښ[/Oө-@uL$=QK&Cl0FlPOmB3j@j$f5@i%ڽ_k \`R8z]wrmX#Uː^dOJ-DU@H}]: xt5"u/qz)"^Nѝ9&KuJ!ִOmA"P3j_N-|habaI!45d/C4f,JڧwbU*NE)_'?_]C]1 JS+M] OMnSjGڞB@>Ud9)B|40_/f) $&^=Ѡ[mAİzKܩ._Q. `1 iT <"+Y;.[7JYUYmV'V1SEPTNGC5zD2I `GW oA C< hk8v !4 Ÿ0 6* S$ P?2Ec vT# ,wgB/LŶr=zwKJ&Y"5M^2LXLdHGEȻEf>_<  :Ջ8|%6#o;)7Ns3 yJ2Y 0 T7&vɡzD/:"Y5xI G3eK\/\4%h$?'=1!lHj94p'Y7 Y4< 2~ 1 B1 %N1s/~)-!٤I+El);0a*.BB*ڿUh(|ܵm gfehDL4!.;(ɏچQ6"5"Y2~12N'41] 7UR' -; !L+ mN(6q'+9B&WZ%x$$C0!:R@c֐Nϡ&2%* 4%8jE/HeL ЕBZ܋=%߼BmtgTQW6.e9}\Y &3 )* 'MTKh$Bq"Ad!5 !f 92SmJ}`S9Q@"A̬2ȨD~üvWr2gweuP !\?AC}Ʌy.Y &frSP #\.'\7~;BULxgŧuȊ @Z8_&m8i[]3~'̝ Dǡ )ƈ ͤԮ$<9"3q-YA7ܦ~*)(ʃo$g1:5;GP&0y nJ 9dO^|62 3 k  tP{ X'' "* y\" :! <' ԍ. &A ԗm%+L=(=}ԉsJ0Ğ(@0xU$zO {`mq B#>ss` I4@ T{ =Fr0vch'8H[xrd'~[    ߾tۍj(f_t+toۓ5LB<վ (,c 8qY3[!V=*H$*l  2  r/[L]?ho3sH}Vh (pg HeSNq /ݭ2S"}U0C5O:!26+I߆Zw ViRnF#e7-z-\l >)pFUdE dm&haUNzWwFeEG 0; -Q5Q%^wBES76U05%$B Y|iym\^]rPJ$62.K)pab&2IB L^eNu>Pyn&vd3!b+oM? &:]?K=mS(6a5$Y#=ô'ﷱD6@ )Yǁrl c_+KT2 E=V8.,&!*;>[# + |>S n X o >  {%7 M );3J(e['t!- 6'S V.H 4 7 > F L T{  ^ e o |} /    ^ iq)<z<fZN\/^tSrkd z= :2! c( ]/  5 W8 'AIQ?YbxLlR=z10:?UuaW¤=H,7J>{~0wܖ mlAȿ ! Gw "^  * W1a #6=;pEt -M9%U_2j1-6wf}Zz:`1+_FHTiRprE|+kre5_   [_ S#S C+93.8@e?I)RZrX3g4Gu);c4<ٹ Eei- |- R Y c 0_ CM : Ͷ2 A@ o = GO   U (f !$x:-)4;F1DTMEVgF3d;Ts$f:\8P|-Da>   , N  ۆ F  /G ֽw u CI Owa&  <O%0*/{#6 ? Z>I&Rr4aDp6REo 36 [GoX[w%:1vˁ&o9!9eVnc Bw:{ 'V&1 r8 DM8D^l _ q  {BE-JO~K,9dZ>xl=e, <,/#V53.4 rXN?)S3{-= 5-H ;X^ dg1j82"k/hǼ#)kQ>Grځ !ILj!"3!G ar(l拣N7.u#q%2K '? , '|,+66-vwAJ,^Rkm.f}$7oH`Vk!c2# & A' /)H m*X x*n i+[ F+O 6+x + ! * #'p$Q\m!v~D}9;D/]v?s S1KAJnU,z6 nJ!_a&z$) h.. v. ;71 o3 5o l6 6UΞ %6’ 6 6J =66 5 4ӑ O3 1\ ]-y: (q0 N$Q9p I~AyVr6)_=J 1M(!$&9*j*T =/T X4: Ft8 >)P?N'-BN FHWAE6Ι/C CBCTAMl@,z!?Ҋ)>t=;yQ8;qe6(j_0 cu)A]YUOMWD:x1,3)%fk#v a w3 D7m 0=u LCxngJP)Q Qk%S2'W_Sؽ{)QDlkOXpzMϕ;LcX"r2;6kQ+[3^;$>\ `ߑ,Ӆ`!.`4_&ʇ/ad$tm+$k$%g#Dciz~"5`cng!]d [E[XT(ViMq}zSG8PB:bK?? @=?#56|D|ׅ ~H x^q f>a+c^"U'ESI-5U'0aM׃9Lg˟AxfrC'e\F ve E=WFnD0Cxs-w}-Oqn,7slbx*phW)UVeN(bGy&_A9%\<%ZY"6$U2%M]P2(Cj2,6_V/$eЖ^͎<|hYx|MZMi:d\'xR SDf-4VnhTX9zgYh]K0wJ>MyWl5È]t9{oRR9ntIHs7no?5Ol"83h32d/1p`,0\)0?X'1R1Rq(x4D)w80k6:)2%SabEBhPG͗8 #Ŭn$?箅CQWg\E~p_ow|lijT{PTX^hEX,﵇71P&q!2 MD?y,K+tO(Io&*GMk/$Eg]";Dd c C2S`cBz]-B[ gCfC7!D4:++xh¢p+,΁!81̟='J ^s^[{Rfb*r?\bk\J̱PoGnx6~~, sO9sL)vjo%dRj1#`ee"_?^ p]PYZ U[XNvQ/~V)LsTS,GS"]<Rj12&#cS+ T 1( )ھܰjJ 亭+z(1JaN bn]([>cW-E`NϨbN=tAj+q#Qf!(b>]U|JYFjwT*sO2OGoj}JHkFwhAe#HǴӑ%AH "mz="FFGFK?e_CL`?n{1\=Yc22\Q#͸bNЯ\cUYQ:%M"qJ/2E8A~ =zx(9TvtD4zUr[.6o)_(8<ܤ7L@&$P_ 96'Mafچx[\=1mu4,V,љ?X8)ҐpdT(ҋQ&^dƻOcQv}X$M`}K'[J HEXuE||As=k;&9`>5^2(m- 4q( }|#,|C2 ~]"Y@ޮ֞9]W}PMo= 1 )[MHfS6&MrhJ}'GE^ fD,ٱ[C jη: L|4@ D= OV9 )5 V2 jk/, = r, |' .|# ~l% f,<1Ea(_o;;rHF/J@{-W@ `<]~: x8yL{26 :M_2h. -m3$1T.M4m9*J)cEV(P/ _".+MU2TA[ drdQC$h(+ t 8 b:`c ˅  j^ }: .Ktsy<rۥf i  f JΊq vɱ Ą ! ʾM6Rڊ$:q641:4+)$ɃV%g`r6MHyS.#*t ( i/$ 15iY'~y$<ژ gF%NL߳  ` Ѷ ,t%VD4(I2ϛAƞ[*r AZR>4U"zF {`!%Bs;j~SBj  /kOpvrDn]Sn6D[~tO`HTs9נL߱*i׶/1?s{= H3G8,] w9qY"`=:+yN+JiPl {OSE=tC#WQؗ݌<&-w?.Pfv1B6+Z`܅StswA 6iR$o8).-(F4c~{AehcDg V^a5,Wi=Z# >\ YGio%\'ĤS Z)=!a<Yu}4jA@E !, 'S.Gv4j7Nf>+hF!mL&rT}1w^;|eAoA|</0}xq-gu[U&K':jd!'iw7c l:o3AY]q" :=!(Y/5e8JAJ6I*Q%YbklzB֊՗ ߛBXy¬sQRN  v zmD-Œ.wF"^Y*1`Tz63=:qEuM;VU_2j5-6wh}Vy:_1+eFPAEh_z2W1"5QAy߳G#M%]~v+L %)@#TZL+3P 8J@?I*RZu\3g4Fu8P;c4<۹Eo(H1P Z"g83K *kI +8 l  HdNz$xx-a4;D1DTMEVjC3d;Us#`9X7NzD50lI(h& gnE. ] k E%5 ,  [y7  o<OH%*/z#6 ? Z=It#R^5aDdp^ :a;dNe1Q'x~Kb@پ, Rȸ*]JS[NvT 9GdAwf ow{A 'V'1A8:CVL*6\OWlAP9[?M}OWCec>x@RK WϮ"HR'g[ծk"Y M$+%w"~EC3y~dfQ~ )N*4# <BGzAV0hwg~_-y  jƗ P۞ 6R v?!ڒ(VtzK˼ z{ ]^ͣ~ >[$?w"v@n 8g 0[aH(;\Y%VwNEh;,!F _@ * $_+i /1L BK8\[l@. DQEWԳFp&G1۶UKbҰJ.D HHH( H,H}a HtM!Hj/IbEI`\hfIXq 9T -hi*lfK` W9M@9u4 (a16p C9K\S^BNh!̃P^;#P֔'&Pͻ&&ŲS=E*ޫY_\WwUTzUTk 3Sb :Su[FS.U XRN_RGdRIq?]Gp }1s3u upsibpY'MR]D@A<Q9e%*,A1Iz2oP"VS()X}SՒ*SD0BSY-W1&"L`tdU^1\[{2ZlguMY.aoXZYJWQWK^VC?V=>qUI@3j&gR<6(IZ]=r{Y>~YBBՠW^:ea.2l+#t } lj<ix]gQe1Ft c?u.bN8u]O`5H7^4+^&L^.w$F\1y+5SHKp9Yessxzt TLbV(4+zRK(4jr??q$p2!p) "n& i#Z! f!j"1b1#^s'$[$0lE(t64A2?OqqK鈙zҧ <օ!E4~>GMxbPQwjRl}q{Q_2ee.nLQa[jy??S\FM4NI|*~J>q*eJP*l%G i"De C;M`2Bb]iA,Z 9AWAu T*AcgB2 CR3s`}tW̭%7}N#=N m  ({(8? zd XQtygaTke)WUXma?Eyo@kW4$xs+r`q%:iuh!ccM^^g:]$YZUIX,QVqNT,J0(R|EQ1>:VP0 G*|~2~&Lԣ,@IT{!~~->\JJTY>UUSMvT#LS:|9R]C)TdJ!"bZhU{hR* umN p7JljGiCtfb?Xc{:k`#3^K+u!5a'%nܥ+ǙӋ_ wfE:Cm4<.R'@eHSԦ$CEU¨iǦxOۦֻ̞3.HUgouH@? Ub4i*5[1Cx/ ֯-L U+G *d"2!A n)‚'X$u!!dz0 %n ujp7hƦ9ˆ)ը=FzܞT8<iESNaC= b`(#\ ]8%"IQ!&}E˟V>^w9;u٩:'WHcQvZ7ױiuc(|!lJCv!`@˰^ˠmq?>Mwp[*/ .2%4.:}YB *j M ?8PתDZWg~_~2 \ >` k O;KcAlo5Ա H!Ծݦ"/+5CGzP9"K*qQG').kF; R7_r=yռst.o au @2G  vC\ X#TnZ%̏Cx,&vP"6P&+(>h{I*$5..2Wez TgY&,:eK`L#ǭ͉" ک؉%A&,%n,./47֔gh z= {`$=By-78/3ONp}w}wzE3dUT;?, d*֪+'Qz, ӏ,aؤ'TC~'U*~+XX6}k7SK$ d:qY#k=#892+JizL~ӡ;>b{H{ O!3ط]]d9D &6;۷B%AM*샤svJ /jS!%y8J0(](FBd=~p|s1V} BU6<7-y +IHޠ% C`;v6 *$49*9'#  yWj[cLI(@5A/ZE)S"U&,:B>^9AoE0\xߪ ,F!tIW(y%JyHs,]Fbڪ$?ƽC{=3_KH99T(4)=}PWn[ `QZ!CSV5/*l&.ta# # >e{8YUMp1H|}Mu ĬR; ?yIcX. !,'S'R..FH4 7y>QFBLA TF ^JeMoL|I/C:,}B [:@mfB[ݸmף$ц˒1=!([/!&58AIeQ[Ybbluz/>Y}W³f8oWDB/&d!!.JBBf֐u<5¯, hww"^*h1_q6&=9EuwM=WU_$2j9-6wj}Rx:_1,kFYAKiboxU&o<i&GB%3 8~o4< wnz#Tj+338r@?I*RZx`3g4Fu7L:b4<ܹEy(uTr~7VAx62XstwK:M 5mM f T$xD-4;B1DTMAVe33d;Us"\9X7O{ DA;d%l;ߪ J?:   ȷ0.= Y7_ ) dhV 9<4O  %*/y#6 ? Z=Iv#Ra4aDdp\:`;dN*1\&y}( *ڨ= Q ϶ {$p&>i, SdB *weH|; 'V'1@89CVL*6\OWlbD:_?P}OXՀ&0A0O>V7_ EQ i2 pL7*[R!=QDbUC3y~dfQ~ )N*4$ <BG_AVy12hf1#~:]DFş۴2?s@$ a VQ a ]> |w!*e6D,!{xT5 Xi. y , C!6@dTPg4d<.z̜TXygx '{5rKu +_4LJlȰ1+$8Ο"H7"T[!Yvo0@yBCH9.GDV # I9~ -?{6zH^_ 9v "yWA=0>-\M r^ tÆ"m9$eO&C)S+;,ψ; y.} *t b&l} hH"smOI3FA-7* RXf ,k Y+Q^<VrceaB%"F]'qq Q*; ˇ,;` . -S1ѥ c. / q0 :K2E #3 5': 5[~ 7v 8om c5 f d._9 S'\8pYWP&F5<-VKrZ A'/#\J^+| hp2xL7,J7f9݋m:EBv?=xCWh?*a >5?i*K?{@{AqAiBbBt[1}BVm6R2`,bWgiQn"g^ayYfOB1)Y7!(' 5r8x6>{XB:{E mE.$%Ez#ɼ[HgN0ANhT'SO-QN@.M_y5[BLl5LbGILZ9OL[S(VL%L&VL E$WLGu]=MEG]0%r-uFoBwqkd<\:IP]LA7N1f $P S<7L09DQGL%vsH'4H+H)pLY!o8SYVYpXS>.-Sz]RjjyR`,Q{YXPQ]PJ7PPCoO=~:Ch36?-A"IIgƲ1DN9leNH9:v"N>aM&7Tǘ@,'ˏ_G")hh%}Yfh7aZe_NT^.F=\|>tA[?7`+Z/fSY)FtX<$\Wk,B"aDB06*3{|4{0)pj;\c $ȐQ2!\=;HH;NLueOMnN)OsMOEP\y:fidl-ߦt8U&vx!D!/pO9;4l,>fj*d"Dd z_`4[ W0!T".C]'U5k36v]x^SwzUwN,ݣ1n~o*ˠwG9< `q\F:cpdHvjmS'aam`N}XʺOk=Q8,s-2KY t*^JL,l$Fh}!DcB^hA,Z AVKkAF7S@P@ NB?>?nAo1JrEEʙv񱣘院`Ӫݜ A[V'v'o5.4 rR(Fl)[:Id"~JTSB{]1t :e$o6g4!fBarca[5\hVZ%SXP rV}LITzTIo\RFPAnzOu8qpOB.#G>3%o]ݨE{0Hv~)3VxE|ISG()Is7GP(V"0ZXwu4SENiy@wK&s\H`nEfwjBBBge?'d;a7{,_1_6\*'㛤ϫQ짬Ȯ:Ծ%¬ݼ>ցιiB'_/?8F<)]DG7lEN44aB+UDo q>fI 3iLJUzBm/>,C=^փx:O~8zr5@RvL2Q"rX.Sn*k'%g֘HeĮ۴̺KR`ļ]@tʂMÿ!(4)/Y@'a8@#Xe=u!g: {Ô68¹Y98m<F!=F 6l sM3 %2 U0d +&- + )X ‚& }# vyM _ 2 yvOϴa^R kxOhןJ@Y5/$5f 2$5Y]1J ^/).%)̮, jӦV, .,7t1V)(1c%# !08 ZL  [mܨ'µl(KDK86B.*oO\~aB`9 oߨ[)ay'*; 3-U% " El!1 pǻd)X|P߽w UCqǻl8.آ/nC*iAh0 a5țkc2(֦2R2=ޞ;6y<Jt[ $62UHY c \H*LH2/v2y;^x NUEmϯ>eEnU  jsݧٰ׷^JDNً3/ܘP+?dQqGVQ03 sB Q?-k/Yϓo >a\̏AY>p йH F}*05b>8!ɪRB>(l/4We] ލ4; W'oQoT3q U/3q&q vV:Z g!H_&MbTɟdj ] 2a vB Z)ux8U >Ԝ%03jDd߮3k>B8!X̀LBAi>I!vO"S)15_1/2ٖIχʗMR 3] MQht2 v:0"DF;PMArJl:"zbd8"JV,$02WMz UE׬p)җm|$6cæt2΀ըӠ.ؕ͘#v~O? @X~w=$GHz,u`$FC~78/LOqɉ݁E1kMZ$pln<֌=Pؗ$nJ!8_>kYDFe3&%.G } }qD Y%>"x6?),, JicӨ$:7zFLawx q־% ϽHWԃe*ED$\JϲOG2.?!W6mF#zGtR Lj%S{&&8G1'S(FQdM?ZH`~a\bd1Ah2]msxka@ٻ5ڿR>75I4!P!v9hZRH)40)P&4B^~^rpoxAZi|+/DwHJl>bTWMBRPڸ3^ޡ3G>6:f.2k6+~@%("_$zcs-lJO >]XOer"wAs+4|0(&< v# >n#GYd$vep> c6 ͳUFijoBqSv ZK=L# $}:!, 'R.F4r7(>FLT^!eo|wȋ/gȗMțƩµ Cca$4ne_{*tqNuR5 *\&o0a=!^(</58rAWIJQTYjb2l}zttItMa' ¸f}[cx:v' v"y0,~JnڰeWNƧ@. w2/"^*v 1^86=9Eu~M>U=z_2j<,6wk}Px:^1,oF_AOj,OKTiXNg|L9̦pE1U3zH y 2 p_#T,+38&Z@?I*R~Z{c3g3Fu6J:a4<ݹEȀ#(,HS|[gN\̕ (2ؽD\FA$ % g/ $w-w4m;A1DTMAVi23d;Vs"Y9W7O{DJ2lbUn`8ե4,uBB  ऑ`> ^ @ I ;<iO1%*/x#6 ? Y=Iw#Rc4aDdp![:_;eN,1c&z}aגaLε-D (Xt K } AkN1d p v| 'V'1@88CVL*6\OWlhG:^?V~OZՎ&5b#W(hkqY 4A "i]&)~!3hMyr\3y~dfQ~ )N*4$ <BGaAV12hm1#~9\DEŧ۷49s8߭ӷ-$ż@ 6vc.m}gu5)5 ,!->S5 Xi. y , C!6@dTPm4d<.z !;c[)D/*~TJ( ^r`yMSΔ/&{lwQPB)'9Z-y " I5~ ,@v6-HS7^ Ku7OwLC *$X  "wX&mi*z%D",8$]Z&w-({|C&r $ j^ NSH Azl8S* IN@67B6v`+b=  T q* -GFYO 3 Ƽ" ܓ%zz(f%K9';)/8+h !-g u.ۇ v0q; \1v U@2lg 0dR +]D r%[9 YhX%PGS=L.  S0-6-I"4 ,e)6w.~nj//1NP2c]ku6/ʺ;/ k:_t 7 8 Z9 j:m{f R;Hq ?;h{ i =aY =[ =T3Ph:*lHfil|nxX!趁@ѸIF4KԦ=OH[H8wGkGaGYGRfGJGCXGpE8:AD/r.puPxrled]RC0) [&OE2H/2;qNP?#OqzAT${$Al(A'D ,KQ*V NKy*Mj&M`PFLW0RL=O]KHeKA&nK`9xK8o|>+8 :|0_yw:W솖~xqhC\K{Fy 6 M+^) B.AyG60hG 7qFԭ;F=6Lד*īV-5!^z=afF\uY ZrNYXXFkWi>KVZ5U].  T'A&S"HS$* aA'.)1CGYN%dxj{khd V q&M }5iE8GI a\H4J(i{G4KvHC~Sv8`a,%krR0"\mr+AGl 4h-$e<$?c PW`n[pWv%(SP!A,@@&4b0ԆC!К$B験ᯍt/*]z V*x #q64醂lW?#7k`AqAf{L(_6]薨WLUUb< O3/k"*I[q%}GapjL"?Dd cB^HGANY*ZAUGAQ-@3O]/?L;LQ>]J=<7@u.~d2+pvR#렝3^VmcY܈2-TmM?igU{C*a@xBQi}8L&@bvNT03qqώ\"ka fp_s_VA\^RYNjbWWBJ"UGRDlP1AZO&o=M5(bM+p9A&VJD2 ۣRĢ趢R>ktoΛ&,S[AAO>KBIіojACsdB%4sNH&e΂Nfe]R7놮O~I\wBF qhBm ?Ii5<e:Gb.7V_V3]O|. @[I'bHڥ'Q޶,>]{) [[,(;6?8ԧ@V?4+ h=00Z;E*5;v[Aݤ`DFkAK6<n8L7>ʂ4]|B2j x0 tkI- pW*+l_'8icQ"Dg r^2ܧe(kóN E&mQ>H!%'',.7$78U!a5ވ2xC1!ɀ1:4'3 ~0 -a m, 8) ~=T' Vh& Kn$f s" |&u w|m뙞{ /t4gҿuULp54e΄c=y<'y&/˜!.^̬0. iX*DzπI(0O(&&τŠ# 9{$$ o$G"V3-!">a++i{qp5gv B^흭(z Q-hS!>οsɽ#]m{ [B4  &Q!t %]!j v۰P dy5 g.܃7ܩr܊ҿixкB7"Ƕgbks᠉hz2cnTDxK$ lWݴO h'?%lׅS%=6Nr9Um5,G sI 'qZ 5 V b 3._؄UŻZC_=]EU AB8.{wwH:\TƒhQIaH%:,\_5I;lkkjU\Q1+vyL+I <hr8_FښoQpľAfF  44&//26'/Ļ۳+Ѱ5ęCiDړ3H}-Zm5hEVO)*OD%,[9 gh7 =ŃN  k쳲;諸P7aer$tXk= A׏- H8RIz4d59IK(-5`0Ƚ /w~/L$Zý+  \|BΠ/&`$<7ƒ5' I'u-`U$'GL% 02Wuz! V+Uc}+lAB|䴿|TײbDS6)L )ܨojHQ:N}?pc3]w!]C<?/VOqɕ݆Fi!G%jmT2H"Z<ά$@)V׻*'P˫9Lt4XE%aS!xkZY"`>N1CF(,JitӬa%By2,EkY?Fo\ޜ%ʩQ?ʚӺi< j|2MIRW/G@'|,pag ~S[(82'T(F[dXLֲcMƆHD D?OHOWha!?na~Ki{oý؀*\eϯ >K<X>Dys.eDX\TGn*3p1G)GM^&9pB&M _F o됚W#.ςFu-]`rTGMJGC v@*\=*;ϬL!UD"@]q>]i1y';va$i0[MJ"?r,2O0!'&#$ P$#" ]>tYnpGiЊG6[yĹYCmT]Q?+}2fs6!,r'R.F47;>FLuTd^!Qe=o&| /u ba}eso/EjdaYATSxEV{8aswXC=!)(W/58A|I|QtYpybrhl*ebzmY\YUe5k8nºKe #_\WSSEUg[)cآn!Q&4o6]wR"^]*1^q6I=9*kEu iM?Uo~Un_2j=,6wl}Ow:^1,pFaAQj@T5T ;!:EOFU3h }3t|{V8ۼ:a  UI(#TfY+-3~8L@l?I*R~Z|d3g3Eu.:a4<ݹEȃ%({.Tڃ{tq Fʈ= ½û ygRD@spL ElI7$w-h4-;A1DTMAVj23d;Vs"X9W7O{DN2l|QI-DQXf[J 4ls a<FCO%C*/x#6 ? Y=Ix$Rd4aDcp#Z5:_; eN-0f&z|mJq9[wY ]!+g s* ' Q%d1eU,  2v|z 'V'1@88CVL*6\OWljH:^?Y~OZՔ#&7h sѹ`JZ]N  k6Ro~D-{H) )z263x~dfQ~ )N*4% <BGaAV12hp1#~ 9[DEŲ:7s&+.z: @O ys- 1k~<w4I+l{ x R5 Xi. y ,C!6@dTPo4d</z":bZ Dʏ0!I=fw8\B ?q >1-S+#]L)~u9A@>8j, " I5~ ,@u6-HP7]LIusқj)2d vJV$iѯ;Đq-?wZ.7Yn!c#҇jh%zB"~q'< hb HM H="A]8_*U IN?678= +rE=, T? >pn^D  G `0 a-!L݃$?!2$?_c& /(by*V,>B <-~ /Gv v0wj Z,b A([f +#kY{XoX{P)G-=e.MD   70A 5H, d%܂*ϊ@+sˤ8.RzX.Бs 2Vp7D A5, 3 76( |6ㅯ 7{v 8q M9zh| f:a< R;HV J;RC0HNi&'e hNoNi;bEZDPDD4lL .v +l{5)2:Se6.ѽ2s9ϒW}s9yȵ j:!y=  C&eHGS&EՅ-&Ewf#Ej.EVa+EnY.ETJ.EQI#EB?'EC6B+nqt)9Nx>s=>le^bR|D0&L0;0D-=.8(M&;ȉ"Po=R#xx=':>Z'A+nHWNZN*UL*xvKk'J`*JWu}JOsIGX_I?[I9EIb76A:7c'-AwUv*p~y<rh]IbC, H4 ((]>-I@Dy4fC6#nCìU:8C&5)2I* RƇy!]2Zy$\`Pek,ZYGqXLNoVE\U\=Tu55S-b]R&mwR $eOB)=^-i(\-~@ЍU8*xj-aAKT ZʿUKg2s0Dq8CCȠG_jE$H{gME2JqEʆ!BrP|t8) \`,EgQ!q1@3xi3cf*dW#7a^|=YUhwRSOv+.<$3-?'60Yךp /v|^ yulY!o_52 8jUm<i^>ozdxH]\TKeTi^;}NJzf*OIm$tFchC!5Cz;aB)\JAW(PA>@SQ@^PBx?%Mw>sK6=IG\<8X> +-% bJ|zgl؇1*kLT<e}S8@_'`u;@1O{q)H?uQF/roHX"[k]Fe[Y`=T"\PX"IJUE&SxBCQR1@/OQp=YM9mL&133K(Ly dyR[EaIB̠A^ Bm7w% )R(W?=N Jk?Hl>UB >3=E&YK-Nj)Lh~ GfvZCp=k<:;gQ7Zc=4T`o2\^ /[**Y$% )ң}ggRqg1>Rk̳cTx}7 :X%:#4<%7?"<{2f9/no7( y82=[P?@c>@9,$6+ G!1c ހZ. {r, 0v* r( Dn&U ky#Zge mmҤyc'bo!Y>VjyF J&(-:4^#6r4 L`1/y`.滲Ɠ.|1- 9;2R -F*3R%r#9!Ӊ Z >+T zm uEZÛ bvH1+£Ɣ=Іnˉa ήl9˽+!e+`7)/*V&Z ~($Y07"Zͩ© HAߡ ɳNѿ$!.*8g<m|>[ŕ;zbMgKk0 Z^׬/Sؼ̋ @NAE<бhz2Y#0M2*c 6z$ sOqګwJҜ9ڠ}S(ڦUXmh9YPV`\|&ht   3J𸞎9 )ۘϳ7e] װ%+ ֠#PPΌؤmVp5۪R`v|*(A.$[G o 8) @-}ض&V!c$ͻXxW n~ Dsotݨ0h{孿,GrŢ2'!ݧ_C?ɓ}څ\D}Li%gQ N8(=p o6:ghEV %llkٶck  단"r)&.N'_ٯϠ˯pЭ >)Հ.6I<)xܓNo[ Af~aM(H7 9\\f)[ԃ54SAk͜[ghMi$ Ak4㥳E޸V`ՒRҔO϶i*-,=AuK`y2rbF>HFY3&'a5`822Ȍ+ Hت{t"d)c|k)3P{XmveÊïV @$6PZ-i=+4 %s?A^!EI%302Wz% V=KRg4ʎumc~wkȊ1i)=Ҋn"iސ7ؘ9>.,{1E\m@[&B;/ZOq'ɚ݈F 8Ej7Sv:u/̇ڊFo{ u ;q=aT38d&^!.Nv uj\ W>3}7DN&,Ji{Ӯ:byz#2GDY4r EN:4Hɷ*J0$z8BeG2ٜJM 6^T8DJx9'leP9LSr(92'T(F_d\ C;A~ƊW9|2t0?4;^DPc_rqHϡʅ? &e ֬Ytc?؟Rt;O#|G$%obuUDMEF*2F2mp)!L}`&<|8B*_ !udk'}τ\.HP=mF8;55$61$8 ϝ+ӖGUP֬Cz6PZ-K' Fr)eWG JC[#=?,01&b&O#{ >vo+5YrdfpKZ)kQ>"G\ҳ^>Ļ3$pvDR=!-`K~Ca:!,c'Qu.E4v4mu7\p>tFmFb,mLYmTSm^'MneGnoBvn|?Co/?pBqD]qBo 9 k%f^_DXrP`*IfDJj@7%@/iC3ZKI"[xy||U4k=g!)(/k59y8piA\cIDeQ3(jYWdb2 Ul Pz FnC_RYWnCe]T!Lf:CU?:(>4@@EWhKxUcKxe,‹DCQ2w"]_<*!1]6{l=8ZEvw\MBJsUdf_`2jC,6wo}:]2,zFnA[l>8d38*Q, 2>?ޤMW^qBȫ}]""*K 7}rb! #T=+3n8jC@D?I+R~Zj3g3Eu-:`4=`BEȔ2(Jd!;~8XxtiVù)s~-<V6] [ &$w-V_4;>1DSMAVr13e;Ws!R8V7P|,D4"k0MҠaɁ&5 ?B;m?Tk->" Z <x,Os%*/v#6 ? Y=I{$Ri4aDcp,W:];eNo0w%E\3VʒX6Jbm,7 ܖ-n 9?[dc v|U 'V'1?86CVL*6]OWlvP9\?hZ#XՂuy(rF(u<X3 2b F *JL}(g8 8Fv%i3x~dgQ~ )N+4& <BGeAV02h1#~9YDFy|#Kt2Ċ7O 8SA4 g=eh:34*2 yVPO5 Xi. y ,C"6@dSP| 4d</z. )8R>K"u6C FvLyۺi^88mDK" &bfM|;PsO1 O@7a-[/ " I~5~ ,@m 6z-HY7^LNuj8w38$J ew3v= 'oL>yiox+Vf+LQ&GAAJ9*L _BG677; +$F <>QSj"j% ]&`\ I7q ;۳]OաJ8]Vds}?' |x s"iS $-` k"Y L PXXOTbZyR:H;/f e  R5/C>CX I]@5 mv* ~i qƢŅ 4#A&權T&ms%YF'c63!)z**oo, f -_ c.W /bQ i*L{U$S bng:pk d_\RFF6ymV dP \2L\#ix&q'%P)ݵ)E+®>t06`#5BX:V 7 5Cv2 7i 8U_ 8U ,9M E9^G j{9A= l:]B Dc0@sV'qlSr*ytng_TFW3w0 X:Uk<*$E:F)3be+l,W! -U!)0)6oѥh~ >r_% =T >K >^C >=e >6 >5U\45)^mt>}aم@{sju`0ZRn@y5W)) ѿ!-W%82 ,e]V2ZI-e"2$2M1/8&NA}HJʷIqraOc%YTX2RLDMFnK_BQJo9fI.nH(H"HG!'y7+' )f{/7gXɇZ1|tj^OH'ȯAxL#iDL=IvbmPA;N9T?L6KE30JS,,Jc${ XkҔy(൒lӐuEjOy[ `W$(Fk6.C{j>/>a^.:)I,-+3l"?QE8˂ؑ<>ezdD;s6m55h 2e H0 a. `^, \)Y%tX K } ARꏖbՖ!cؼ6^D]GViϡLi51/*{.ߘ7*)š\):&ǜ}s'""3Н'"`+'Q׉. j/ ,| D.( уc( }' x&5 jtu$ hp#0 l!t i^ f/>\,јq,0b࠘ԇ Łrƪ ⯯S`u;$ [&#g2#kT jwg S #pv Uto&Šh7CmONv}Xx$ tX*pNT.ÚLʭQGQnYzdU(-syvK)kZnMMF twqe T& :rdTC#/#h"@5IGXs_2b7MbZ =ꩠ≥~~ڹM 5ľTCmL ^N5$I% c\sΤGh vkz Z1ЏIٰ|ZК_%Γ\{`PH/Ag2>  r}.뫞 0 ꄥ⿩ å6³jLj>eˇs:dHb!׶eL `Sx}?@fٍ(DZJ$Y;_% @= 髞m.ק} ׳ ~ƆW J:ʽ3Z^zw:>bx_YzC.J<or*/5NoQĵrذSFn.q&Aߍ`C_G~AQԲAW$4 ˀT/ PFN]X>wKj-0C!_lCM 5 C~q<$<, Ji =$P%56\H߫`&9}}щ!Ek;*](.;ŖT,/<~3{qJe.OR\ #I23!3]-) Fvd#<$8Ɓ4/iK'|j$/'-+6KHBARen əĨ ,9iЙ,N:Ú&VjT =3'v159iz87]CP1@6/ -W)GA&HWB=h^hodQ;ocȩle_skϑ|K48(.{D*)>*-2ÿɵ8^ͣ-_*@SМRF9ۊ:ޘf{}1n>M a>TWV.G$:rW.1~$Cc%][>$Q# l>YPp[89F[YH@.?!pQ I+(!,'P&u.Dg3Z_7%Z>XFWLNVTV^*VeVoNV|V/W7XXW#TxP IK$Eu_k?^?:#6r4C4ۛ7(՛=lI95^w H{=/K!/(I//"5 g8YASIUQ[Y VbHloCz[^9.:6EyLSaF%QIJ@lS?62A137۲<4-DVxOǮ_yLD; 8wLI"]K'*C1\96y2_=7/OEw+SMDkU)`_D2jG,6wp}:]2,FwB`5j%g%C$m(T2<?IpXjl^M FP6sKT#TX,+}_3\qe8?>@*?I,R}Zn3g3Du, :_4=ֹyER2.Q W1ױD#sMZ<t][5緗?<.v A M c:Rj$w^--Y4;<1DSMAVx13e;Ws8U7PyDDmy<M8DNNoN] 6瞫~ y <N^OL% */u#6 ? Y=I}%Rl4aDcp2U:\;fNtr_@w-d}I՟qU7S׿=}  LY5 } 6lc~ Qiv|A 'V'1?85CVL*6\OWl~U9Z<j6,E-KItw1.bT| oStV\?ӛpN ͉ )'9:FlsNeU3w~dgQ~ )N+4' <BGgAV02h1#~"ly\/ B.Ίz^*83k"͹|&>x%Mdv 8*'}F2`*% 3M5 Xi. y ,C"6@ dSP 4d< &xCv$ 9z?Zz h}9[R?| 8[ Յ L { ^00qT;>w6- \ " I~5~ ,@g!6o.H]:\ `#oaJ͏ߒ݌'uÅ6I?dK}i? ㅌv 0x am7dtJzFumA=98+> JAF676< +F:;#`x NiXe@2کȱuGē/1Y@WM`5s~4' ōT9ׅn{QqXgT]n_Xx56W UpWAZRI!>/w SBl,?WVOo v 7 e{ 7 `fcuz>~?L xn m"FdU#\pq%gUzV&P ~6#KMw b`MT{e,pjc[pPD!3G} KF2 m/ǨGd>jͲg 'p%.W{)Ǘ *. y0R -t ?-h0 l._] /T d0K PM1E- HM1? BH2i@9*O?JL@#2i?uo *vqGjc"YNA6-Zd# U'v(nAa`0 Af ˁz"*ޙ$ޝh8+ԓ".`0R\&"5& 8r8 3g 4y]S 5nR &5J 35C> P6V=) d65 63.f4;$pqn/`yU}xrMkfc7XKlB;݃((" t?$7!5'k &U'(_',Gx7'@*-f#ʫn6=w}=j*DTa`LIRVmVD HMsC?I7{B6v BI.XA'AA!@}@%1*[%%Q*w#𔂍/B~샃,_zwtAdkvbԞVyI@{ ?N:_ 6/ (:M*NC;QU*9g=p+ t8|L4e 1(?V|'H.H KO\=Z UH-IS&4OB%OB)QLJuIfNF$&kH-EY '2i!0$y+}@|5t 䡇hƁl}͈y#sSXlcM]"DZ);8lWD%iWK'm\Td/k[p!!kXk:$mRDiB (0Kka'A0i{-c4f63(4c:7:7_N?%Q^A[_BW8<=KS9sP7 N04HL~B2x Jw0]I,(H&H΄JW0wwa؋B0ωA+ŵ&: &Hj 2ʶ&j bm A ĵwt}Ti,  3 / } \_mȀ >"UēgA&_'4Jۅܹ&Pf>GC (nxNn [pAJ&ek`/Ѫ'&t2)\~&uҔK , 6~噗 >uk0|n TN;{]kA0&0jm jn;=юcPѰՅetLl\U\{Sw s <W i[" = U9XQ&uGnpX<<>=*ڄ 9ܷ^ܩ7|(Pу!1:pĢpGzCƦ mܿq=v Ӥk6vB*)Ij~Ɉri bV!|;\Ԗ;0ܓ5x%l8qM\b}]ޘ;ᷘ݁%"'֠[Tmå'ozN |'׽2 >VDT;G.8'{hy0D[˹^ztВceR7qPՄ5N{ݍ&X6e +c5gnVNu勓j-D[iQѷhUHŕ<ؙ:crP˺hĊ vuFɩRČ=&ȘO3bG)8]rlAa׀\L&)4 5DZ wEX la2Q3Zo쳍=ݪj?>:@hFǔ ӾUŲvX3\tT&u49_Cć6ZXSugEj\uڣn^HH6J1@Q+7 sZ/[M*j󭇫{3! (Q4ܶcOo7}c*ΉyQ} ж[&5/"qWL?cѾT|oٮ&bLXfPHF8a-VP2FdWe ^ 1,If2= n6e*;xPkXHτ^j׸l- lň?pYtU<8PJ'xP}xkTP^9\TNWB4 ,0%@K?\5(DEb|{Ĕ7®2뿔 (z/ ߗEe#,P7ݖEFٌY_޺—'wEu9qy<=vLՉCE}aTqQ۳x:d=JWTI֌Y[vav sj iSX]LQPuGCA74,LV"V#,_ ~Y# ]>kXYT4p(#[n~wxuԛrMkBk4b$V1F[3)ޢ!,7s'Pb.CHV3O7K>IFYHL GTF^-]Ee!|EosD|lD/jDkEm[FnEkCa?@O<8o83/-5,2,ٴ.39<"ǕL;}fWH =Q5!Kl(j/Tu55[8MAHIJQPYLb?l_u:z,K0 -:D>@dTJEƒAm7>-G.S*p)+.27?@2Lqt`(:mUyiw"]*1[szz6w`zW=6[HEwqMMF~eUl\_.2jK,6wr}9\2-FAS+3& $!X)K1~ !: 7E jūRHie+gi^ R-qU#Tr +S39_8$A;@?I,R}Zq3g3Du&s:^4=̹=_CPQӎZ`bc F/x!*N7$3F!yXYϽn8>^j8S {  =9s|a$w= -mV4;:1DSMAV~13e;Xs8S2-BV%%p58к@4kSwoH nM:E_z ; xFr<vFhP5v%*/t#6 ?Y=I&Rp4aDbp7Rc%!2,Y$l}hp:DYMutؤnThuKkcOjme Nvb|4 'V'1>84CVL*6]OWlwJVZ /@|`ħu4a=}7fhHBU^3˙`<!g -&TH2w~dhQ~ )N+4( <BGiAV0*gux|=q |C|L@UM n$ϡMZLXʟ!F| M|lh n1q) htK5 Xi. y ,C#6@ dOOv'aq [LrUíEݒ4қy$ܽ[V}T1U)l y]pcf<F5f+y " I}5~ ,@6[ 7EVc4V9jq+x2';2cBnb-hv=S l7pcG-*HDwD[@59+ C 4GL/67C%M))7'K.gd`wY~PWF{jVÎ9LH`D zu *qofu;]AV` S0YT5Z"RHs:</EkPP H)<*1Q[u i1˽o4CÛ燶  .Ȼ ]A;V+z?_Tz:&RӃwvl*cBj\ jGIUN Ib]7Bay#=h;c] ]S=Ji>-^!1rxمOiR,D nl B ܲ.^#e,n2|qb[i|#.J,B?- ZK"TR+%!r#NfO$\Hf%RH'KJ3(8CQ)>,*v>#=wf1~jniGcc:\OYRC)IA;'Q7 i U#V<2檠 Yua9b xPܑ#2( Užh$7Ռ)| -t1 GF2}c',x[+mP,G '-AN =-;D P.74 /%2J'2L m%sz Nupjd[nQuEZ؞8ѝ%c E2|;!N"W+ &o?$ʊ'#g{y +pǷb2he8)\L=R f!=G o:?> r:!6 qx9- d}9&` B9V %8- 8$8+t($! ^sw| 5U|FJwcrNk0d[uȷNE;7^U|2Il/**f33F!rG4N,!x7h}!k3*t^,3Q,%NY=C_1%ES8&J,*N% SIHkF8pC1?CC =`:&+ I.x瓇6jh➃߮^|Cy\Eu@\pxjTNd$[:4T WtR#!QcP-= `ODUvN]j%GJ*tY.]:/P@7-8w57 X712 6m07='%:N |ك"J+ڼp~[ϊ}2zxuqr oti pDafHOYc4JYb:oCcW:bq#.`y)$^>/+\G2Y5Y76 U 4a Ox0| N/` J-f JL+z H')L \GE&vFe!2NG@z1Xg;ބo94ԲZ a~}|d}Nx 48zt+z5Qu3fK/RwQV)*y~op"xfMfw" u $ t ޷& ry' Dn$ h^%# c$ `# ]X"M Z SX^) Vj6U A+毂 4(} vLA԰;\ʂY6\d; 3#߇A"" -DʉK! Ljndŋ O$%h 9#)~ x(2tG?5p_FdlAiY= 3f/0 cJ#]  x}6է4,ݕ(v9R0*?|cf Z時%*hF2 f !+ UO k߿ r  ) UĒks6s*~rz@`uM.qAƈK <|ेC.ňaU@k5dGVmUb' |[f@Y$b->6L5zِ:m U  쐎 ZΊ 6х6  1 ⫌Ⓦ v]Ҿ[v-Y5?s&`USVAp9S A=BbpLP&QG"/ ,>7#_ZMLn 'u @s  ۜFڧ47sWW;4 Pɛ;ʸ^Q~(ʂ2[ʌ:ȘEj [R7gyQFa <̖ p Ӧ +8BD1{Svg4vQB$Z6vǁz ӗ8sZvԣxCԇ]Ә(әjW߼v}ʫŸn%sh&Ϙ.6AT2/҉I5wxQd2c~O"ƾy4Mx7 }ROs8KXpMuըPF( e_@ԭO~ܼ>RAPĮ͝ )) S2ĩ 7w--98?2 uhlj^jJAt0[щ r] Vگu5%R,oHۃþ;^ڈtERٳfؔPmuɌ~&LKIJ0ЧBVj_{0z"OxtAKxdeHMZυ}E/0-g/Gi* W ߙD=2LN=jlՠv Pʔ޹!)V6ԋWw'~ʕŏh-^mF7b̸ ɤ:V2r;gnjea] rV uyBsdQ*BH޽4j5"00TKWfvـssem5 a=*L A]Ћr 5 dkTᦇ06G6OLxΖthӢo]mQ.,?C'd8&- P5 )-$Gb'zēꞫ驻  hk&K0"1y2CZѰxV¦y,Iw¢'RVm39~[r<zMdi]YA|NRk{>Fj=L^);TR:^0F19e$:8o07|(u6.$6#7$D8%V7#864)1.M*oj(\&&'׍),:3?RuH8=\ $!&(/l5lS8ZEAUt@I^MAQ|GY Cb57l72z"(*z/0t8+%81O{2n/ևI'f##$y'׸*ў.?4 ı>2MxjneIdP 3TwL"]F*i31ZN's6t=4Q=5;cBExRHMH`UKW_2jO,6wt})5HA#N3> .8ʺR=i߬#)t80!@7#&3ASOdm 7?pN#TQ`+62 Z8 8@ ?I,R}Zu3g3Cur "EXw#/_ ;g$r.$I7./aCgS ifv` R  r]MG$v(-S4;91DSMAV13e ;Tsg0eBb>aHB(0ڧ/ ϛ76;@cRul1UӤKG7+g ZC XC;[_,R P%%*/r#6 ?Y>I&Rs 5aD_n>> ~MyG Cn-˙>qaJCEFZ`iȢȚsbcr="c.J Q s/v}, 'V'1>83CVL*UZ7iPyCv @O- XH>fiKJ6H70kd  Hd\xroq%TEY= X>2v~dhQ~ )N+4) <AKF|S'dQWsPp {Tk̀ފCO7LVRdBNHZH) 3{7a eC/'s ~HI5 Xi. y +D*5#>,9 Lm]m4I-YOމ,2Ր5CQ8TJKɏw.a1Cw On;{:3+*n # Ix*7*DF4@+B;Q&ezZFEsh ӌ+Va8QeebVOot Z Ojv5Ga=EdBO>8/9-+C JOG*X& &_N 5;2G]܏[IJpu=-<ɰ">@vIqA 4=yGoFRbc [-5T *NP/JWP-SmqLC8)@Fpt ~@'t&38gMi2eÈjh2}T^T%ՂΠ k"hz0] =v] kX{1b@Dc[KNC2LSH> DY6\c. ]+WPNE%9p(n*+bA9À(u=8W ݪ, _ p s ǝڍ >6 b OIA~10r*PRdw2^Z[V4 RDJ-CQx <!v=7 #<,+b3(ehPcLc]XV-;MC"61n' d; , Z Z7 Ro Z`qpn&)׌,q/j} Fv "p$d"yY"Ou#AG?<$q?vo%9RW&1Y&0IO!1E iYn<?rni%cݵ]ڍU_ K@43#%tV<-.b-HCIZ|;P. i)M}@ DsQ痶!i (`f*-WJ2P< +6IE kA2%= _1p4w Z1+\ c1C% a1\ " `1g) f1'"d$';"hZMo4tv |1x.tNpMjтd]ūTS:L b@i-I( ̈́o($#Xy2,?_v-Hgo0ac-Lw!X(i*gL"2t?メ:<3לA>'-gEB'{@!?z:<+q:)qH-*7$d%,/s^8ݸ~qf|R֤y xΏt}qm6hOc_S|K\j:IaI[I6wX1Hs=BMGT2AEk%6B++%@6H1f!.=Թ5;ԯ98;rq9A;86 {7&3_ ~6t0 5.+ F5+,L 44*p5( 8Kwߺ}݃~};{%xw}.ucrHo;l#ke7kaUX]s )F[/:C4[ 4 3_|R9`Q#b U +遣G7}^Ax}tWpB| p;_Rأӆ5UGwH,ae+\C\j='R4@wf/:X%]Aw iO 05=O/s^0Y7. % -\~F Sۅ ІYkېp]d`5wŦ9Y5=a\A )1:$\{:+xF$;R.LM)MVa1w8(šђL狗 'ڥ 2ҌU]ke ̠QɨT=l%FPW52fl=g9XguoHK`Q†Y:/[gn3֗Lˍ 0 Ϭ ʦ9² ^5ƨ9*K+t\@b yK-0nR { 6Tpʤ"4[ˬSʂɓ-mJ}a<| mJ.PoP_iʢݪ毺4KRpGm^sYIq&.@g E^6~5So͵Qd͞ vl˨y?{Vy W:vBzW! {(Z +""xPu+ {if3liXDWoo*(' Ң:5XԝO j`ԊӸљW7;6\ƥFUƻc˷' v51F{UZ]nPιF9\qT__fTAL-o](Z Ӥ׏ ط3TnL٠fٍn ص6<Oאmgd*2'Efǘ6˽yǢ9Pݩl{B݈?3Jz`>hƦs [ɧnPp=pP%iV ם ( 1uIc^ݲz9Xܨ5)4.Rt!34?IL(j(ĀpQȫNr #)jO]rdn/b˩iX sL%Юw:԰o9"_3 ۞. V>I.F5_tᒍbz|P ߍò Gѳ ܯڼ8ڕhM'917 AKoe@olNȢ+e0]]BxYlVw_Dp^SwHԶy5!ێ9 g #.d(}+C_[Hoو.䂜 *v !V!!ߎִ4ݽRۙVz"&K1 @0HǥP;0KiTc/n}Gtr6ʡ}fJuYwM mAf)k2+1#nݾ2m CAv)8:?/]Vc&k  vQMo 2aƽ%"k-T;޲AL܁`Du wç ,#.DOcu9D)LvIwkRk`ItT'.pH/1G>HW'ޑ %!bt 'R<irXRWhIS~6@z湒`9o@40\.-:-2*&٤'J"X@ T >xDc!+VT'OH.B@3i;7` 8>I6F84L*2T0^4B/e&.o-| ,;+\,`i,^Z,$+*((t%#"J!_!"$ϫ':,.5TCi= !!3(/`d5DL83W>A-%9I39QJ=Ye9bL/l ?)yBR@'8%‰SpCIl"%\(R, 3>,(Qp5k/9>wJ"]i5*G1Y/m6r K=5k=Ex2AMJVV zN_2j*-3vxrH;=2G,F (<dr ڈdj~$&#x("=-&„4?iBO9h q!Q+#T6>+2 #V8 j6@@I-RZsZ!.g'r#N!iЫ Ox 0;V]&$'-1ž5-@SQ]Zi i  o i|TD1$vS-Q4;70DTM2LVRM,c( [)n o}t4$uF2W·Ѫ%=s+[נ*͈.8 3g>Q-PG6k"U͛hB|= @r;F4@;P%*/q#6 >X6H^iPw<3^,>)i{wxfjS]Fҭ߾):oq99>l8=_GRe ҙ ԑ2 !ci48 _v{}& 'V'128QB'm[:Jx1W2 eX_sr =C>T˜p̃9a9K<7M/[ JSzlf0 +,# )n Y22v~dhD~X )mM2`39Yk1C>KP `#onz%7<qՂ41fw8V9Ynx7s zXhZ 3N-&UDG5 W(NEDXAz)L39:{ 9Ir3X`VhR{qtLաC#е3a¼2 -9Y{9n[gouR`}vXYm X8qv1u_)e  !B,, N#[(T"(=2#> NL݊a/جr{xҝH6uʅ3Rb/5;g8W}qhhs `x/BWw?F:*64&KQW~VJ>WKfH3#D 4 sCҶUjopRzi?L^ifbtqumbWZ S7f,L?L'NhGN?W 4\l&{3 @A 6w#46Y¶I&`YedYy^" Du^j'bb)% Z S6m KbhF sV-X0l\/WvPIS@j4(VXM8\ D$093P(GWQGl sb{rۙs T ;7U|gx;Kp c0M ZhQ\IWB<}-4% $7^##4  4t#Lt; RM si l sB1~$ 9v n0ibXOywZF?Y>u~?7c"03 /6B/LOdށh [kqg٤bh]iWћOpFȨ=g/B n T  V( }gB(JJ <}kctxtjpcV3Zp+#7Q^<(CK V,6D+;(1"(1$'(("(("3!) 8)"#;("F%w@e(Z~\'@ozTR#!bFx(;V=0?0Ν4%"$;$"y9, 8B8 4q k0 O-  *""M/+(|[ny7HwuΠrUpd m j;7fG&b]^WMVrC7aB kSA10PA6cEG@M;?e H0d>O}x"&<敼':y,8.I5E0 5K1Z 6. 14+ t3)8 2QP&.(K-Q2Pw:6GrJ vwvswr |p /mjgfXc]UcXO8U\?S':Sq.23xUpI*UPc6"hT|3ETZRS`Ql ZP!O!~L!tI8 mFBE _yC$}aB ;BiD ~uu v~x #v u8srWpo8m0n!tl|jZj+T%Q fRW- RRZٺw xx[҅wIkv5ɋugÀtfsIrrg v<{t<}RQ }(xjcv ;cw byFn7#Zv6 TmpwJÔQh0j-Ii|  ԗPӦ~ӝ{TW :Yze}c>M B4;Ɔubpx>#fAKo#0IeQ c]8<6Rn&1/eU_)+ӠvG ?S>N0oPt Ή ( „%. IbV]; mP]HC\X|E벿iX+a ڷ vS5;O,jUCvK`&؝SvdSO.-Xy͔Hž| ~ }Wjr*Y SvDIVk|)f' jRiJQ5*[Nh6g߰ıSţŬzIzܱziD"nɆgU!ƞԪUή9t}1a' eS.[?{#&V7j JIV4 ʉLaf ~E2ʲ\JƁѹY?¡tj곲P2*c7CpH9H|cjȹzaZZuCNy|1<;1#{Yk'lИ2JhbѻyѦ qЛ:%״ Db3|l7Pv7-MAXpVt h.tveb grVJzyuo9h!3NvO0dӺRP՘1ZֆG_}s[֨[Xڲ?Չ T  " ܪTθF(< SVŏyt.@]Z~tƏƳXd/y__^lff]{QuFx<4ˊtSЀLdED ^z/GDA\VoX"ټ^CL2  K)XMt$/~Vf_rRfdYƊt6NfC Z0Z^IP<  ܍- A݅XݍkYO)ܝ& &׊֪=\Eѡ([5{ qxò֕6-B75Ddw=ulÄ`ƽhTtHu<s%.Wz&=% " Y^<(ޜ*0޾?0&& Srg~7ޫ6kEo-ܝۢ o+92I*[|vooИ':C7(2f{UqkYf@mx[]pO=C 8tp.RzC$U׮ ۔ F 8(xo[<V߮ODC e7.xz.V(ߛ>$o!Sθ4A!ۓٽ ՠ(dST!+#H'N&?.Az83O370 0>w.F ,L*TW(]&d%m$w#"_"##Y"X!4 ż?bقI,#ژ։ "&A-Ҽ8;l=!x(\</8]5zE8 8A1Iy/Q /Y+a%j3>t\(lo}e;fh.Nqo hgqҞr)u} ֭e̛"&"+ܻ4Bf1.,o"wlhv"\E6*'1Xf6pF=47Eb 5M19TX2\.-f\pk ;2 6 BHۡQjer̺!!Ƹ&){+3~?b<Se qtR 5#T+.2S8 p5@A3HLpEOe,Ws &c$mt{bh wcJǙ)԰o`%ڈ Aw/J$2Y*f3 j?oF\R9n b M;t<\-,z$v -Q4:Q!CVKU(VyRR,_M%iw_2[+/3W5ڽްaOd=E'۹x0=FQto*Y(r '7  +;0,L %f%.~5X<,4EV,L#Yer!pE.ޞܪȹّ2Q0վߝOԜ#˻,7/"LOl"* CWbo v E5vd#&%/6Q? zxG_Z R88a]>naDzxW0%آ \͛Tͩi7Nl3%=M\ٖU N?"luk t7#!$ &10#7^X@m\LS![0yiOy~yVԘn ȫfȵ+08U?|815h,nTF8yK+9$wb61 tm=-!'n2_/8F:SIdV2t&xH?'C?o75N?aV\Y}cVuVmC Y05i(/EiB'[b} IyK:g, PyLx X^6%T70(ݏ;KI[ϟlpɼ9 ȷ٤2b'BJO܋Q|%Elm}FigIo)` ?L;>6&b/iZ$ sU o 'Iww89 !1/Η?P dah,zx7DN_^E9y<ttqh'`.Y1 R@ I7H"I2B:B.9%&IcH&* s @!G3]ErYi_qp,pf?!AS~qrga^YrQ^JK 3E ކRP'޵Sw WQۄKKTC;32$Ϻ?y<o_Zz!!56oK(Pgeiz:fr."{Bü3u qZ lr@ cV TY KP{L lH_Bj;=FT: "9+ qY[A[VLQLXJrB%*;/|" %^9%;8Y;14&BF3GLTɉEb#v|xup %nW?) h'icY ^WpNX@F9v3 ^+D{-!,-`fb e ai]+VPKB÷BN9+U t݇ #)}; {1C* Os[j /k2o {c \fT 9M$ 8F 3ޒ AaG#8G/>(\ l"eq + f H" A#X־ejKnqjɾg dbŽ^xWSJ]A<8/:$h -ruo f 4Td9]!XRVT!h1K ?~zAJ[6Ю &>,?"+*$ .w1` 7r$JqK'#e%!wA Bm)/Vj.i ϳrp7dn"[kQifobBa]Q~WQrG~i?;X9Z,JD:m*NGP:t08>:G+29^m)9t<" 8x&7<-!4;#3 g% 2B& W3&(H.<>_+@t%+k-]-90r&5;Xl p̵p`0nljhe@d"b^o[zU1^2NELD5oL!2 1K'*\M@wq#+N'\+\NHsNō::\N3 M] M'hKH<&uE,LBAjx@? @:BE%=o px%pɩo0mtlmk;hg@gfcvaU9`<2^{.\ ]&v lD_|9 &7`W ap\ O bY b{ a >a| &at ]fYZU}WU[SR"P P] )҈qqyp!on/mlks.jFBkpslsKt5#qX:6nX o XpqO5r`R8 1slOucvKKvw!wN~r7n 3kU li/ *f c a= ^ [ѽsrpDp oknbn"m#t%by'-e!B&ds f4w*OUkՇ3Ӛ5`7R|PyGMuySq` (mV Шvsϔt8q̑psȣoq|w7|JzJw#rZϑ~8呸ϐ 659"N#i .JB|3~ԕBJd *{Syb0xvsyY~7$m\<|•jFN'16J֜6Jos5&oO5gU!7PqQbi e4*3z| ɶ}t~9XuƑbǚradaeFa,): s0H4MgzQ跄{juCOuv](W0 ŢޖX<Şl{0$h6)VM;A+'|X =QzoC4>LudeT|"-dө~EWVCA^pV 00/RqBX!j ҭ_R^n Ό ́E8/P^ʐެ"ȑ0BDDEΣMfyêS؂ձK;xn`(m:2`ZarT{Hw>jF*@[GI'0ԱzR-o@֥Sxf|%!5Go z7ѮSм.ϓE#܂bWX +Lթ^k{G݆+ |Y12r-jXg[h{[vOv}DBFx8}*7Σn. ҁj*+ 4>*lQIdאwB_֕a=~(QԕӲ!ҝh+E8ϖRF̀W k }_nsډE  ŷR/5uri[ky_xakyVJJo?u4˂V* Y.!tf8u҃Tk  )`;Hh|M7a+sL#/شvRJ̱(. kJ@ѳ i_ p&MnSG!+ ='Nn6.@A13,7M)>&E$K"Q ZaBi% rxUtLEiSb|ȱx޴t?٢tmZw7|ҕ ΁:.!$'0 N=&!X(/x/U5k>81@E)G&M#U.]f{Co[|N6tIHtHhJFpI\IQP)UgZubo9}LbC $c+ֳ61pwF["Y"A* 1]^5 ?;|/C*Jn&P^!X6BcG%lx#RaM"R . =֤M҈}d}Ý!#5)ز63BC[ yU6p#Oy+X2|L60=w2EE%L7SY_!iUuF x[3)xR8܎ Ӟr ݖ0>UɌ{×y"=(ذ1n@~GVD J> 7'z}8^#+HL27"?f H=D+NZe{qc4AFue*=T%sg̝ 9VvG&ϯ0?@GVyN)|  A )v]>R#*,t'<3&/9N=EBIOFT~[am`c|qݨsk8שΌ c{ ,;8SgxK&0xk   Lh2s$CX1$]%-m4<3IDG[N\oiܢw| t)[һI̡ͼ¾=8%Ԩ[4If|p! dVs' )= "#Nd/ndJ $z.5-=KIFUQdrvsd$ :EnE پ"[̳;d\>wE@jvW:z1F)Vo"`iv&,F = (2]8f2'${m/ߛ6o۳B+O<,_YmSqP%jXNΪڸb&2 >uFTV`}9u@, m7He3/],\$Le ~D$ ]/[3 (:"ؼ.-O8πGaV ŀg-j,z{eBOaKN6w:nebfKL_Q<C 863A *?[" ]v ]uo/< j-a /rãQ; CFA/DkD۷>ۦ6-\"D%_R B?ŗv +1zAS}oYTkjlg~ о{ Ѓyz7sgd"[ SMHDg vN!NGQyLAEK@ρ9.ɞ"!2i7Y\I KC3.SGLIa#t%~gxrfmɶfij.ffJaXq1(N&Fhy@19T $9  7% UVJ vUPKF(M?7S+?=>UI.G AYGG[VzQ9nsm fb)[ǩl^c zZTk V9QLLeq;?Dk m<- 5}v 1/|&,+ 3e+hF K\΢]~_~S[W&QVÖNUFp>5+'8U r't 6Fpq ;i RBb?g\W~> oV5) Ns VG }A=ԈP<48{*)% U})T! ` kdŻgpdNaw\cYSTM{F$E=s3V!wh) ^X. l\-4 U J LaD:uN;0px(H 54% W' +(' w7 : d u:D& ayd ƫkÍiqgte]bj`_0[yVMQKyAa5mN0 2-"Q >U2v) 42>*]2U"2l'2"Q2"1AW- /v ).?7-dKV)-n+^ _,}a>+)*U a /.2 ^gǤii^gAf,cab a_y[XHTrLXJE.<*D#)+D t'D! +"FF8j FR Gxj pH}  `Hm H hH_  G D67L @= s >q . @/ {˜ijĎi=Qh"feNc]d Rb `(]\oWYNV%(VEU1U2W4%< R Q) O N r N~ 0k j:i`hgrfedeE9e@mdLh"k e7hFjghFe^ ^%foYPha0WiKlgn~ppmgEktJlmjuBhXj|f0ca_IU])Um3lƛi/hgh5;ghf!f m;sNwz{`9~h>p~hzNIx 6z$} 29|K0~pe| 44;/~*w{bwy v8s,ooktfpmii|hi%ouVz!dpFKU%3il % 2x]JdJy1Z,˩SGV3T鍰=4~ W}y/rŭqoÎl\Sq w(I|ć hw3wf_Jw-arWt[429Keatvӌ&U{Jx` B^9Ucvqv@cvwVx&}tÁV@`}]k\A̜'YT} .jLi-R}2tMI8_tbRr̙ PE1YzT|`~+T!tuoKtpcQX==#ܤ\m)P2H*_ n⇓PJ¬s:xΦ%@!5l#8wţa2"U~ U m6 Mʉ^9 2y/pҝ` )N"; S'"u9tkm'1G^)mg…7.DPmn$̉d&b"}Qq A_ئ, )Kh?_Q+xԠh1:V78HF:5(cOE<;l1E\oeuڙK Ʊ U٧> n>e({T!k(; *ě "=~ˢox2`Ϫ?OT+DIOA1ްQ OlXi0J&CYk~gy2 Ü{R[ܰ/BIsGmzGS '̕6EzSqm]5lu.gYhWmJn;@ͳR=-MJYz19k_d7/1BWVh}ĽT45ÿÂo*3Q$5M Rz&ܗ9OthyRTnF`!]RqX}G=+t*.0e#k.(?MRɂfCyɶ 5誵7 ƿ &+* [ER0g&5~?C5SO('m|\Nrjg:[4dEO`<Dz9'5mJ..y|,>=Pr"c͝ux ̛aߖ } gÖ# ȱu46Iƅأbߚ"¶\`H¡iQ+V1vlt*\a;f(ϺWbT xЬ MD jC;!3Yp4'$- /-z s*2&6";Bz HN U]k}etnEmyTgNedkcVbkNa`fi^ܷ[XV֦W(ZJ_'bfʙnƟxX!C)Q$1P,!i%'j.I]K3Y67)=!DKC QY m2cL k=H v6 3} 2 2B 72ޕ 2 3ڛ 9l = BfIkښS!~_ɂl~Wyw$-eSlvnI !1!y( .R4;R58%@ G.M{TR_#hNs<xFjH`u۶sq $ , 9̏ܭJȮ3^}q/-(!)ԫ4; b\?p!]"]!(ou/?5$#:c{BeYb%IhC OHZbe4o|ba^۞ىWי՜-ІSh# q=[-v  D'Щ2CU }>. R,3|**2!)];0|@5z =W+E$KUalGݨy3}&^π9X{N&eIWh~&˧2CYE_fxze %*9  LgiRf!0)|2eO7G| ?^\FPw]whNuBrxdҾ`B’%͜X$^u".#AR`_lӑ~m 9 ,9s=t OZ";@+,3s &9oߟ@݁KfWd'qGt0'5Ÿm 25!Ů-)睙:4X'pvnJl_$ )X ~eG  JG!a+R/ݣ4!A:YF2Q\ѐ`uBlpJ~(%b S29p aNB֬n3$nIvy(zK-}&q 6fr<p Y* (4"v 6,֍4|>KYgh,kyz Z,HgTO~su6m&!0_P*%O"Aej .&LܳH3[1> }!*6}ĊCpQ ?bqeir=SGBg)hh޿=FaSKq}BpVg[qw_7؄:8ٗ5-0|݋)!Dۢ@'բQm}eF {3r,LR8HYs^Il}YV<ÜӧA;pqAc(\eWQC,'AK?՟<b4 !*_в! N>)we H? vG..,p=NS:eMu 6GÔ}ԏzupZ OgK)HFXJC!KOΔJKpGˉD=f50*/ M/P=$g@%AE1CQH[a|m)vAk geoa,Ք`,& \4QIAC>x,7-V6H5y v |!RKkQ OȇL;I!B<;3 (w&u:`bSw*=oCxUqiqj~e-_'[;XcITRVQs-SJ)Bo@:2},CSV) - Z)H #X"XyYe:UiSyNH<jB,:1s$KbXy!udw8j1h6&aK[Tr`gTbt&FN܋!eG{ As =iː7X3- ' yB!m _Li"T>EW5 p>* \ _Ya^{\hY 7TN H6A9qi/m _ &U'}S.K_CDLY <m 3˄=+s$$ɲ{yWe >] o:  |$Tj p wmC X#]? <`+dch a*M`_C\XU P1KfbFp,"תV*V'+_) 9(` '2'CO} + m  / 4;bc!c;ua<`Vr`%;^'[;XiT$QRNjEQ=M1=E!<3Bj?JN@c |=Y c<<;[E:o;b ~=zàdwadFc2a~`af_^Y\NYF WVDhTPgHLY$NL Pa Mk'O.8~MQFUR`TwxVTVoWξV'֍nTKyRb QC+OٖNf%SM@48Le7LSށ5f dc.ad`a.a_a^3\`J}qdW^`AIaa ])_ bW,McFe`hvkmrm WmE`i2"Ff$dba_ ]E[FgeFc)bbaiaYb!afkJpt&sZ3u9vQs#XRq ru. uF w_yr|͊"\(zg ;l#ٮ7S>S̋k'3e<~@z{7pbQFwy=3b{)í]5OI@.>TQmdApuՉJ: 4 ;^)(*:ˍb*y;MP_}os@}h([ͩ [M9&Bծ185&'{&oPS1C~,p=hFNar* ɒL ; Z 3˗KgG(2':;QjҠFwW.m/DbC0V 4Jsu?uH+5*ZB#ط!}rX-UÖ+6;~L_>n&p*  ֲq  [{( ɘ6S5GK$]<wp55NWjǡz 0q14RgF\:QJFb`%;` e50/jB#L+}UMD^ ?oX(Y*ƒ9SKY3\ 0k eƱ} C ,ŤFGī] Zf 6! H( M1 ؘ =F %;{ 4:ҡ _9Ф :W = AjFxMVRe~w"m9F=Vy%O&W+%?1|,5;yAjHr^NCP TI@ ^. g%'ߋpb#|!ܺ=  @ |} ՝N!}%ds(- d, 1< 8Ǎ KAĪKYVcx%H['q)\7 -%h,C2*6v=(e D/Z J;PZ%ZLdmy| RՀ} ШAS˗W& 2 @N$]o o!( `d>4Gq &g\-33l8T%?@k:FMUtadcjuvx*ӌvφB͖ G BwՇ( =QRGf;=&ˤ2{`C y0zZYE >u&|4.z`34M:9A޲H܍Q[4]H׬gSrԘuϊ2<4Ƥ?#w֡* 47=W?zu'ҡ3}wIq  Vh ?"n* /st F{3'B/5<"CqyM X]\d_o(rV@~J6ǝzij":3 -d<$Þ5Kxr!z  B y'l9=B (??(r1L7m\=4HXRA``kJnǒz{I p ~kϾB "=.EYl+Bb +`L}f ^G>4i8 )n>2307!BEM$Z2gn5j|vxt6 wЯ\*aX@w3*?Kr`E|ۚ#u[wpp N,`lݙn۱J  mg:$u '*̰2ȑ;4HET;c6faqAk8=:fNϟD TcKXa]$wMo|e9֚-=׋'~? 6$(ڀ b1nҬoFxtȽ &(4)+?M Z\o`lL{D- c?sFpq}jhf_g`VL7s*2#Қ.Ӻ'=  ѹr!L0Z(Y <50)NM6$DSKWfwtdqh9|GuKh]iWPQ_k+ @>Td=7/'T-wM@o7Ee )+9CwJNtc_nPx }xunrn}kc[YMmWCD`LARHGG śIyGC??o9q1^'{ma=l9nR .>^D{`Tcufny$hc_u\j;XuL(rH@C<91|32@zO1NN%HfCK>8{1/%Rr!aҋƒ '%z9 x>fpOjcd[u^S'P/N ĪKڟGD<4/(*&l% }NT @U7VQ'SMI/D$>m6,6" _Yyl  lke;bx-`3YD-RTgW:LEkF2R@82 : ~6UE11D X-( *< $wDSY2   }U&YC[x^[gDVSS'N`ID =5_}+|fhf A6V LR & RSJ &C :];-O3e+z/ $ ԑb m hzUV І@ F\|Y>e~ ! ? e 1 jnJef\ s_O=_@T][YUNL{Hc>GKR4*4a4 ]47+[ 8BiE9[p;q<֌4=`T=>/&f`#YcvmFg iyi:hÉ{dӊb3`{"_t^\`&ZMY>#aI_]B^+]U\[|ZK_-2c|WhmFkSbk3lkJFjR wkcn?*&oCAgpQXurjvSycP| |6IwDytsaWqcp#m#Ak:hfb6`]8]]^c|hm rltvdyK|+{y,)y 5z}6, ~Bu}Ui\|wX#-A?#V41oc~x+z8wHEd,cK0,> Po`E%qge厭5v4 _}O!sN 54UQQ|t  ԃ# }&qdÙ=U Eӟ;$:ODD,;'ѥj n{HČA!'~ӓ6)u ip]MVA7 E%#}"lNk +;M+T_'3jf z‰7Ynʶ 1ĹI˨\y({ 4'푊3y?xA>In5Qc\Va8H\kX~>'03駟g~#rB3KJ[+Ci:l3Ku]8lDY}abꭉ3 n' 6iFT)[qv㌐'1;6 G{jXrig/{]GQ}*_E:e/體R% `TY UC *9pJ*BZriz]g# 5 ?u Y w  r' ;0 T=Nّe#i4G~\>\uynplaWgk&LKA^)7&,j8x_^.l)N8lH W6 kg Ju 3C",d B ܽTeE! '.!_CYxpof" \#MRy"H'=C3OO)fx3L: npSi#Hۿ(3E7i$,$FiliTid"rb:?(ϗ]JS iY 0\s'%%$[!"I&(.3p7 Nd <?> B7 H2N-ޓS*6]'e$Rm"wk!zp L9԰~\Wώʁ3:3!Ĩ$t(? .& 9{Rj,h'O#?)R3/UR!4[d8E >7p E4.6Kc&PlۧYc.Lkstթw0@v~(ÙȔ!' ߓ- A7#.O!R.w,`#w'D*=r40Qxe5aJ :r4 A$~GJMyUz؉`j$hx^rWu5Ѡ'f+͐x[~& ɐ ( 1 ?\M*  <z${_#`'8*eRޓ!2)D]6E0ܟ<Cv}IMQ0\f*oIru|`˛u]_2)h bn5Nj*] #7JhjNcetY Sv;߻iFE$JLܹ!,>12u8>EHӌMlXXc# l˜oyƣs%fQ=±n̒ ӯq- }Ab!0YYEsnQ&2xi`p%iŒw?C-{4 8<QNXBa 81օ<rьE 5`d1inUņ'90 9 DcO^3a~kw~]wƇb0081~[z5rQ*#d$&"+" b~&ˬr@DŰD(40$%x2;ISVqZ&fss #<3dgP$9sR[jbkL5nɬ0ɭ+V 1$Qw0-`A<_7# P3;D0O&{4n@g|NRKa0mF}c~ɦ|uz:uir2hY_[]XQ-o>±; y9.3Q,*$'V@C&0(O3ce`CBD(F6_lFaJY)g~wyz?u^plj5˞g_Ydjb[ARIDi&?F KD;D!@;5d"-%{kR7*~ bm;nn+J|;:fz?@sNm1agpb]XU"R9ͿNjݭKfIAA5&*]/->!LCJH{D??g:,4F|+!#" Ts:y{$&q5o9iWK0c]9^hmXRMLITFΒD+AJn<.ZU' 7$ JC"ZI rRpQerP"L`I)D@:l2):a _ ~wSp>dYxZ(X.Q?>JQC+e>{y7G2\ -};+z(+c۷W&FLG!*n9 MW TWrX dTQFNJE ?49J1O(otrH` HuM5bC,f}A^ :N]41{LHW*:[^2$qAo /' *G nE   9* s ) @ Z7X[Y^W`UGSXPpMehIFWB#w!=`O0{I "2+3"S(y@ )g>;X Up kT8 x!ќ+"j~5#)w#ֲ#ty" t 0!I$!NK&n1YYoXW1UlSWQm\NLI~FXtC]]7E,&) + ?,> p/P#0g9/2-R5j9/9'6B5q}87@7O6 5|y5x66xZYX3W2CUT+RtPM"NNLuJv1H[@=;$ ?e>>Bz"CD<IR3LhJNP>O"Osg_M:pK(J\Id HlHGRG*t Zd-YYBWX+UTqSusQAPUfO#~hSoVEQN5OzP.RsS V$%Y';ZQ*^LebyVdde7B`cq^:]5@\ F(ZHnYy5Xf=W"*~ZYvY"WTjV9U#T^SX[]vbec Ldb.gd9 d{sc 2d`gI&i=i8Qldou]svvwGM*rA#LpgnhmljhPRf[MlZW=vOxHc{}r~f֝*\O'ȶ6VIhؠj~ /{_\xvV\j"\5g[[-`&dfiAmur~tvdyV|=9"~ |r~r{)R<BHN*F~b2qՍSr^W ̒Q4g>l^a`cfj.oH$sxy|kq\܂yLl4n=kC(MjBR)5(oPsKuvzX}J ~sfnj3Y5cG;)`'#Rg*09e L(ZOziz,O,b@E߫%0"e=E`+v>y}뀠  rwEl _OQA97%SL4)S=>.?)9:J[*gvpv_2CNeퟖBPZBFOАi|<( h TUy oe+[XH(+=36%"ӟ+9N,un^)f8iIIYO^eK/snKIIa} ] X3۹L 67}?Q; ͅA|z s9%i7=)^/,Q˛2D9w/b%;ޣK%|7e3,c^(7GVf| o!}n<q Tެ3z^䷔$ & ĩ.ʏ; Ս'A$v}p-m6c@WNL: ZA6i6 ,D+s,5 8jh&(;7-_F4T;djm]gy _ ] r +'( Yq$yu.p9g;E]UR$yGޣOA~=9.3R(l7nfDGJ[UµI(6DW9R :=b*n C| Ҟ X# dl'~el"{-s<9jYEahRW+<PbM*C9娥X/Ӫ%⬎d=ձkP 1p׶ @ݷQ)2'65&:Cx}PW ~l` Rl? :y(T-隱ۥ/ .B j[ ,yHca!&0/&21+92.Q5tݿ9ܟ?EEKoO>XՍahkqUѤsq{#nsTʸȷ#Ƽ[` +gkNG}Q(*BSM [Nk!"@X/&;-ݰ28ۯ7 ڪ<A׹H?^MԕTҸ^fϊo-qJyȩē1x% !Ɣ:օl+V)+f[`M h'v9/!(5ۖC.o 3d8֯>DiJ Q͔dRNlo2Ʌw%6T_J]_yu -<kW<>jMe e6WD@ީEU@*l!ٯ( /\"՟.4qT9F@eF&MW,a\iƟl_upH7iDRTRY-xS/8}0| ݎ2Gp*<{cy"-W!)Nf0b*\5q;xA.J'RŘ^=4gZi$r~Y}=Uz IAӉMcw#{ԥ3">ۈp_ڎIT lו F(mӶ"6э"*s1M 75t<ńFI¿NZdgZo|z+8/t;ԢVFZ jTڥ61םcsWӷZ 5`$%Iνː#8,368A0KBT+ad'l(v>1K 7\y O!΋Kׄ'q7db^օkԆ/Q4 йTw$4 2dB -eRFú$Z- 3p<FCP@]V`KitsLNG 7jp=sgYkw&mJ ~'ʂ1l: -C?'/y%Jb-'6@l2K3X!E[f/pN}Hi@H.w~xwo'"E-  - -GBn` ! +}-F<(IN"'/o48E9AQ9]Ta5l~y_F)b~Czdwnd`4.3("{wuO IPM+ >"706#7 1 _;'670J)Ap" | 6+$6TLP a՗;%4BF&R| bw&orm%i eNba4!^bY[&hY<R5JD%=;GWC@tP<71a*-"~\5#+R XP|'t7$ru:lJfZ^aXiX] zmWRYNKsvIFbCHA]91))I"$_TJPG_D@l= vL+b|F)or!-h2g6*cFW^.UX5fRwuL$GDnA&>":f9'r4a-% Ft(UQ !NDKH+D@#n8Xk*%AP*4&0V! N7M<6mdk;{g 8¾ɉ v%!$ G g E F t UTS>QONFK4It+GGDxMAl9=+U07?% #d "_a"$&F(6[.M2>dz5.z4579w'575ش>4:K42m33h3y@.3uU#TRQONJLJICG3yEnzB[T953L7^7;9`J=,A7%EKI2aqK}uL֌s MKܳ*IYDHѩVGޅ+mF>FKPEqE!cDTcSiRQeP GN5MVKJtIx*MWhqNfIE/GS/eHLyM QU!Sp8UKYo^]o(`jja`"\JSR?QDfP<O vMvM*RZ}XKp4\_ZFY)l\fZ]64.^C ^ aR#:b8cL^e]ilm}q%q mz4X+k+=j}Ri3uh g~2fd}e;&SvRQQ!-P=Q.V=[[}_vMdhh[>kCRnu%Kn9 jxpk lEn$p28Np KFq]tjwzzJ} zL-z{R!zm-z?#Byfxgw8;uR]R*QT TX]afTzk mo`+sqRu8xj tw-*ufxw=xb;za%{8OzI{e[}njURw2 xYB?0#ֻE1bSI%WA8[`@ZdAhl~qwsLu-exW|<Ha~j0Á}@&A50J Yvi =vO*K>s Spި]M3apeeGi[[mqv wyk2}^CNK]?e+Ɔ I_ D&7]I}'W@gG}t[-ˉ85bgRX=l`NdwThl&ptAxt|h=[݂K0;h* .ˈo ?_C !&7IV4ft8gΉ{$JͿ$=ynhlpttx1{xm0aSɈC,d6$Ύ=5>'77oGNSdCr}~ӏJОhk?/+Ȑpsuw{P~{qfnVZQKɎ1=#2%!ӕg'O7FU7RN_$b3n|rS6'75θCzwzJ}~4ug<jD`VSQ{C9= .Ŗi! ՙ??:qi'&6DRQ}`ilx& 5JiҡwEZH?Z|ギtxjndY-Lk@ 5*H J  ;zf$[&5CyQi]&*Giq0u AJ!.B^:߳عzr5=ho^ғREj<+2*YN(Ԟ?xF &ph -&w5 B_Ne_`AgDrx~5b /$*0O8.F:Is*}{uvl-bXؗK&zBU89 %/#%%5KjB )1\&4@MZ]'ic ~o#!:z$wW0a gұK~wkorf^2 QG1?? /6H#%+P# Y.Ԧ^b_ O% 4Hj?LZ g l+Zwk+I w.-8?i޹_!-ޅ P#s`#)w/AP37<҇BJ!H%8LS̵\f.dkgmY@t}\|ZrNMff1yG*F)-SBh4CX,)r+!$d**OԳ0B5Ѻ8>vzDXIˑPfYPbIit;kqr{|ejzBI|q[zٳ4tbkM({D+.< 3$+Ў1Ν5:˽@FfMyJU}T_gmiqUy--,͹R۬( M׈j ;j `,MҊ cd&NWΚ-y27,1<3Bh.J-R <\laetCg0snw1FyG,AO6hIǤOώkbR'LsAә7 D)Tφ!k<  '4.4|4>ă9>4FgNXbel&u/v\)l0^SySӳtҶjuЊjpH .ͦ ,^,F!C'\/49CB~KvT7` bhirN}M[^>:)F}<)Jtz@D,)  ME5g6I\ NJh!~(L0 5 =lG`PP \{_ug46oz.f.\C  LR`i ?Ƥ 7"w 8Ad"*)M1&j 8wB]OLfWMZdbmHxa4>fuE%jqǗ0J7E  $)F+c%Q^: Mp"g *+4E=GzRvUzaG_jNus3R75py\D sW|Txku%A' Ku PJKJ:^ q+86G_" <T,X6ZZA MO\fsqiV..|z?xvt(-pqkd>0+ %i = I./"s"WQ hc&!{'/ 8MFJTbm}{yEuvHqnl {jgeekcaYR _:c7h2,,`N&B 2d8KE0p| ?[#")1=~KAy'Mti\o}hk?vfb_]\Z8X7pTRxPjmJC>SC ?I<83-& GM1C N{ns$k4+jk7MeIE`S6[cwVqQLHQEnC)@>ߵ< 91+u% $8EC6h@ <83;,%0%T BDaiK|ZHt8i a=.`&2]AMX(O}RO`LoGuBE?;8}5ӕ2c*0Y,'!(L@IFXC@<8-2+&$%lr|+NngbGSKC+2RS.PRMJ GDA*=8P2 {')s"dP|0>Tg0O8[L-D()*#;rbN|c*w Ivȴ> (1U30 0QP]NL{J5HFpDNA[{>r 9fW2O%9"NJ A %g 2~GS`ps8Åӎ s! h 3APOOnaMLIJHFEBz@2q7= d6N@)7umwW!%r3)I,F`` 24qB 1u2u4c3m43?S3a%2 g72n[2p|21(OPN Mc^KJ0HAG5-ED {YB rm@gZ<3N%2 .+;].q&1!S3e8=?4UBF+>F5YDHlIIHtG*D Et+E7=9DݎTD0TCTC!5B OU_N<BMK)X?l?AFVHG eL@BN?5)QFqTVYRg\Kx\ϊU],+Yt>Wm+Vt;U$UUߠTnS R~NMLSKzJtWIZHIGM9wRj>VXZR@KZyPUh{Zo^bbTc->Me"g dXe ]eg!ih5oi|EkV:mdqUpt|wuC uF,u%;uG&ufS9u6cUtwv|s M3LNKN!RW\=a tdh;i [MlMeo4q }p nWo6p Wq8sM"t5lt DtTvdyn{y~Aj\tG"KiɜAL\P`U dYW]aex2j3lnua9r2RuuDtw,Iy_x;=YwIzi{|#]}5}/|C'|R~ctln3w0pqOv*zȽӏlVdZ5^bf8jiznDprevYyJ[};q'#~.~q#5\ED)Q3Cam &vL栁U,n~T5UY ]a$e=iAgnqxqqn,ucOy@V|GK7΁'W9D6j3<Q^'$5(D-aP|P`lvS4DȈY%)*Hº)b.fnj9y~|zKr*.h_zTJG>[;0R';  , m$%3p?LW7d)my;@/Dt{\{~n|9Dul EcwYMȏASs8-$Öݙ OJw]LZ$~3Y>$=K$YTcDl v;@މ4obHO AC7 <t$ $P2=1J+ V(`f)hns-QC~އB"U}q?5&l)yDqSiaXMΕ*B:,1M(0=G 4 ϟcII4CH)$S2'6xӸ٢8 +Eg#FծӬ#Ep)?i/p4*̪7B(<MC$ȥH5lNsQVq_g4iownDv<KGjo>kΔ"կۥvxյT ՕH4ӑ[g#*˗0G4ș9MƼ?:D K|S&]<ejfmu`9}e1кׄ nvD$ _zҫqF.K1q%"ɲ+1p56;1@HP Yc@e./k-si}psd y:ˆ$}; kx\V* * Z͢ *^@\ȫ <%,2-73+{ǘш ٩0o4 fǻ;v}/"U-'T U-R!1 (;I4/;E7B+@hJ(TqWCb=jvtD`X^nɿ~܈+O#-Ra1W "iCA,a]T:   ;^OBUd!a,)$O23W:EPWS o^g`r5~ea_<K~|dyNvt#O%) bR9:6}O )^?u%>cpY*y 5( ?AK^<MX4dnD{qo~N{yvTtr!oulaktHd.|)$$U?BN I]cyOs0 1&-7EDsGtRl'`}/jywguqn#kIhefkńdbz`/^YJR9%)40E*u%>An?i+//Տ Y6E!0F0y{;z?LuLpY~lf6h sc~_g\`YWSTRRaxOqM3KD>ANu>_; x7$2+%RBWSr<~ xTvpi_#Bg2f5bpCQ^2P}Y`T'mNIF>C-@{>kˣ;87+1+&C7AL>L: 6;1O0*K$ 2/xj *p?eb],\0Z?U@M O]WJgk[E:}@t5<8X530K02.,/,eu&"gJ&GDEA>>;6 0)%#wxk<wk._hO}?D^D!CBr3?&D9T\1f'+(xo%7>X"B19V2P8Mq\ Km*%#37 ;O(OM[KPHEB9?~;b6~0Sw(Go!ayR5!M*;:6/+-:J)x8&&%!Y9^(|LU8`GUtr RmsfRQ. 0sOMTLJWHtxFuDkB<~?w<n7b03K"563j$ w ^x.&0JN~/ 0*Du]sITEt̿ *h f!~Q b iN3LKqIGH!Fr EB~@wP>0m:a4J&E4+#}p :f$1'F*\W0m?/܈1{21 1 1%1)1-%1d3<1=Y0I M|L%JI(HKFwEqPC^Ax\@o,=dP8J.:+'L*9-_0Sd6b;2?TED[U!F2hG|HHNE"lC-B[:BוB%B9I9ASXA]a@rtLKJxiIKAGUFEDt8C$zAnnD^Cg@;'=6_v>04Cs5E ICK3NCRYS W$dZ t7Zم[>VT-S;R E'Rm%N:Q ZXQZhP{L1KJIGF.EPE}JhtOFg}STN= K#P0& R($U VVD `YnZ4[Dq]Ra[beo%hziBe c #c1/bH8bJϝA.aKEa/Xd`zh'KJ]I@H GHMWSxWl[`_P^;a!c a`Yba b d fX4$fCgRjan*lq&x)tr2 r rM: r6q\%q+'q#38pQJ=TJpJVIKoPTzYE{^hqubRefXikKk2mm)&jv<mC mo!qC4-qkC q_Qs2avMkGxu{F}GdaәNƻ:πشJ MLRBVx(Z^~pc9u9g4j2kQ^oPrPBt)u {tcf0t+w&wyv"%z4G{ByPG{`}jWs6{}A \ 0dMSWP[_Bcmg3x%kmocgsxWvH+y9q|&H|:|tl{ I|"'3?B10N'P^rir{哞tx 1<V[!^HbfN}iunkrav;TyUEW|)5~$w~~!2F} O"4]AN%2]jipr++{jDpڙHݡRN6+_U{b7fSjmnx3qnuey4Z|L|=[01!)=`8#32@4LP_[[h qzу`V6=2! HgjnBcq{u^r[xh|/_2~SEK7A-(&9|Ql#*3Z?kM9X&fD/pSywN)؛l #mq+t}wu?zl ~NbހXKц=Љ2H.(Ët4 ΍7tvg !#/3$H>^vL-VS!cm@wPL (ӓb[ $Isv~zw|nf:]QSE(*9u.%   _W3 #'i2=J&T%4aju*k4ϒg!m ͣ&g ZxI{y~q́iE>a*WtKz?w6-+2#VHi(=#W2%;IU`2hZr&=|ޅhvt\ȗ 9 rt}E{BLtlql'FdM[QE8<35a) >$p<xV3%#M1;%GSE^%fc p!!TyaP&o*ŕ]>NP 3@|veUng8_EVmK3A8ǖ/{.~&/N $14co9]y#&1&:VFR _ICe& mv}qPvjRY A+ C7kU7y!}3&=,1'4ț9Q><ŝCH{NU^eg`umt:P|cAy^8",GrnW ѯ*ςΊd5"FMO'4-2ŀ5ħ;1@XEeL:S[[deJkrVzXJpKm-Y4 nΐEh3EBO/ɑ"ǰ(ŀ.3[7<BImOY6,bcicqy*SLg!QHQ|PRMа׎ c' on# '/#>)Mg/T4t9>EF2"M^Uy_a*goiwT7KAjZ®>uلY$00>- A~b#+21b5:B) JRT\U^f/m9%u^&^$2]);ܬr%0%Pž3oV :hF$+,\(2w.6=FNX[xcjs~EaNS"XJlG{S\ż<j3\> E &$U4D|?%eu-+3nL%9;BsK.TW}acKhqE|\F.$5qWQځY < ~ KB@"Q v-<".'w.(5=EGQ0S^Kfnozj*i '2A,AԆ,yL|C ,A:)<N>% B3[y]6j -"b'&s18s8TCMS{O#ZWKdrmawy~S|k3zxwRuGqC"bWbR#t#yEA(W yOn.y17F(^J3R;8Z4P/)a$ V-i-xN r|jTV!!;b70ai3|^?YLT[OhK xiFQ*B?<: 7z42y1+$&'sA!>;8F3.((6", 4)'{KrKk=`zDD"W(V-Vl;QIKXFfB3ve=&1951+/3,l)[($'I("s FFDn2A?D<;n83. '!3z~(rfm(nWZ[I#XkT?d=>0O;e@>5O.a(mr#{ >)N/|,fֳ"m #)b 1LuJGG]EB@|=,9@k4y-lrT%j /[G g4 hX%H@$-:_#W"|6)H^y[4qnD|~ulpg޻ Y4f":f  0gKlJ ;HTFzEl^CkA?y<r8i4}]N,0F~/yP (lOG .CXmBab \ݠ =!1 c JIG.HoF[DCA?y=r::id7E\//F;# /z5<RA&>>#V/D&,B(Vl.ghXOp0|v/F0{0F 0/0TW0yՓ00040?IHGdtF%oDTCB @^z>sn<j:_4{F)X)!+#?(E+2Ss80=&@!B'P?DdkEu E& FU: BAk@9@r@Aٝ@&?C?Z;IGFEEsCBiA|?u>Vj/A=Z ><@6 #V64 ;og?AF.H1K?FO#N&S^VmW}X0SÙQPPĖOOnڮO N HPGt7FbE[DtC8BAzFoK5cO)OHU7E J{* L^:Q !RG UV1X @YNa]]aSiIdsjf.b,`w_ʩ_iY_8^b^Zڸ]qGFEED@dDEJ=~NtPS}hW\Z?KW7;[^ ]\^X ^ `b;2Bb@ncNf,]iglq]o|n7n/nnnZnmmkG$WF7E[G8L&PZUwZ%l^)bNaUpdGf/|i=iPKfiJhf @hj "l<2.lb?)cmNn]^qfft o*vpxx]{v}<}>}G}}/|WFO]IN R?"V[z_pc6fNf[=jVM|WK|Y~e;muMc~6)<ess@-S VxZ^b yfQqjg|m]qjQtwBw2Py#y;y#UyC |n}89~!22<>~JXemjux}܌\h.[A^b5e{i\t mjqTatWwIz:}.C~~2`.L, !1Z==^IinW!wdQlkt})h- 9b8eYh}DlRvupmsdw<[zxO}BF4* &48tL!1]<J6U-f2buk;s|փqIaauhG_lv{pxs?pvPgy_|{UIHₒ;0'& (W I).!1#;zH4TSa`Siir z?X’bF,PQ:oryz;u@rx^j{b~3YNf A܆6 /-?$A p \k!0H:GSz]df%oxQ|h얦oqtK{wbu)z-mU}Qet]pS,H;ڊ2c)w$"*א9a{PV[>!09[FQQ[dmNv>rȌ; Ք}?yv{o~g`ԃX)\MxB@8/̏.&͐̕8oA#"/9E<OBY wtcUj]s}ڄ9e `Kx}4qjzc[CRNG=[5,$ޕPGX/[1" /p8CaN WUa)hq0lz)H /U^[H'Nu .9EP \ g o x )6CP]s1Jf !!"3"#Q#$h$%y&&''(#()0)*1*+2+,3,-5-.1.///0a01A12 233m34A45556S67'778f89F9:':;;w;->?(?@$@AABBCCDDE!EF%FG)GH$HIIJJJKqKLcLMPMN:NO#OP PPQlQRRRS4STTTUjUVMVW1WXXY Y~YZjZ[V[\D\]C]^B^_A_`A`a@ab0bccdddevefffg9gh hvhiIijjjkYkll}lm=mmn\noo|op>?+?@@@AUABjBC}DDEEF*FGǴPصas %1=½Hվf6Vrčŧ5Omɍʭ=]zΖ$ϲ@\tӉԞ(ղ=Uy ٞ0Tݿ_ߞ>x#?\u^G0v>f,T}.1469.z`E*w\^#Kt9e|.{N! 1 / ,b>c7 uI[^v1 Z!(!"#$?$%z&&'T'())**r*+U+,8,---.s./_/0K01612"23 34.45X56778A99:;ZT??@[AABbBCZCDBDE+EFFFGqGHVHI9IJJKKqKLULM>MN-NOOP PPQrQR}SST8TU_UVWWX XXYtYZfZ[X[\E\]]w]^C^__v_`B`aa|abkbcZcdJde9ef(fg>ghbhijjk;klm-mno+opqqr%rs;stPtueuvtvwxxyyzz{%{||}}~ ~lہJ)wUą4_Έ=lb݌XҍMȎC9ÐSu&G㕅'ɗkRv9ƞTޟbiqx{peZըPʩB,wb׮OʯE:0%Cٵp3ʸcźv'ؼ:ݾyO%¼Id~ ƙ&Dz3ȴ5ɶ7ʸ9˺;̼>AEHLMKIGEA׽8ش0٫'ڣۚܔݐލ ߉~jU@,T RP eu*9If(K n1_1k<v\VP JDG2y5 N  N  i<`3O:|_ # !L!"t##$3$%b%&'('(X()**+/+,O,-o-.//0!01112A23Q34a45r567 7889:9:^:;<<=8=>\>?@@A4ABWBCpCDEEF(FG>GHMHIXIJbJKlKLvLMNNO9OPVPQtRRS3STaTUV(VWXWXY'YZ[Z[\*\]\]^_'_`Z`ab"bcOcd|eef@fgZghrhijjk,kl3lm3mn2no1op1pq8qrFrsSstatuouvwwxxy,yz>z{Q{|f|}|~~1EςYm /Ty 1ËV{3ƏXw&EՔe7ǘXy +Mޝo#Gءj AХ_} *G֪e0Q鯀G߲wVE뷐5์8㻏;罔F[ pÊĜ&ů8KuɮJ˂̻n$ϑGѴҍu]F.ש@oڞ5[^`cf^jv)5AVa)l4w?$[3i BxQ)_-_'Y!SNHz 9h"Q :h"Q :hEb8 T*qmft2pO. |[[^ad h m s z   +6@??>>=0"p] I !6!"#"##$ $%%%&y&'r'(u()~**+ +,,--.M./z001>12k334=45y667R789+9:T:;{<<=5=>\>?y?@AAB BCCDDEEFFGGHHI IJJK"KL1LM?MNNNO`OPuPQRRS*ST?TUZUVvWWX XY;YZTZ[d[\t\]^ ^__``aabbccd deeffg&gh1hi>t>?]?@E@A-ABBBCsCD\DEEEF/FGGHHIIIJvJKkKLdLM^MNXNOSOPMPQHQRERSBST?TUh>?@@A(ABBBCTCDaDEmEFyFGH H}HIWIJ0JK KwKLPLMPMNXNOaOPjPQsRRS;STtUUVKVWXXY)YZ5Z[A[\N\]Z]^7^___`_`a[>?(??@P@AAyAB>BBC\CDDsDE-EEFDFFGWGH HiHII{IJ2JJKEKKLYLMMmMN(NNOBOOP\PQQuQRBRSStST@TU UrUVPVW1WXXXYaYZ>Z[[}[\Q\]&]]^d^_5_``o`a@abbzbcJcdddeSef$ffg`gh4hiirijFjkkzklDlm mrmn!|~0:|$){a} /}}P}l}۸},}*X}#}|Նs[|̆7f|ͅY|IL!|><|B0-{Ԅ.#{5 {ےs{ܑa{j||v6|K5m|\'w|wf|`|[xs\|hf|yY|cCL|?>b| 0o{h#{{Rz× ߾zޕң{2{3{e{{Ŏ{a{[r{Uf,| IY{|0PLb|,e>| 1{Ȇ${Sy឴yޢyFdz2zhzϩsz{X{OZ{uYrH{e{ߌY{lLi|@?x|,2W{0%{c xҤCxjytyMÒySyz6 :zFz zkp{!d{.X{ҍLK{$?A{1{͉${mSwMx ݊xCqx^0x϶y8Fyߚyߙ'z)_Ezfpqze{ Y{^M{?{|1{D&#z wwNtAwkwܨ=xAPsxhxyIy^yr z6{f$zIZz)L{=>{w0z"z!Cvs7pvv6w?|wxxq xԠy5yryڙgfzGY+zKzs=fzc.z5d yylmu޺Gv~܍vSϘvwRwx`xiHnxϡ^y1ry]dy♓W@z#Iz;;yz&W-%yʐzx䍺AubtxssRtUŵt"usv@ӗ)v˷#BwJG}awůKo;x=`3xgQy"CyQ+4yG%xΙgwpTsOsZ r̴@s;nt^ŷLu %utv‰w.|wnx0_^xPy)FB@yc:3yc$xx>~%~Z~Ϙj<D[?ЧG<+0G}wodb#UH}:+,\% *盂ńނLzG4OƃaKNV ۊ|n`o%TGbG'$U9ԁG:%,!~p ~@ꁰxLB6͵(X뇏ߗ G|IAob4aUDG?:*~,E~y}]bٰ'F޲ 􊮗Vቔ{oRbUUJGF:~-"~`!}e8Eؿ=X*ݿTp$%*${WAo`b=UAHo~;~چK.~"~2T~Q~9O׷~8P~6~7~j2~8~~È~&z~m~،aX~5T~HX~;~Ň.~!~5}< }@)}Qʦ}R}\}?}~}oJ~zx~(l~NK`e~T~+H ~;W~].3~p#!3~!|h|Nֹ|m|y|$|ΣH|X}J'}pz}mU}ɒa+~.U7~BjH~F;~*,-}艿 X}oh| Gp{ꫯց{ѩ5|y|(|WТ|L|śu| z}(m}_a}Uv}Hm}ڎ:},}on|{r{R>{*{b6{*{Ԣ ||R|}Wz|n}a}RdT}x#GD}n9_}H*||[6z츸rzzɫz2{ Ik{ءP{U{좖f|z|b-m|`\|R}(EI}$37s| )N|&{zzNyz#0zF*z{{T{O {Bz6| gm%|a_{|Q|#C|핞6|ٓW'| {ɍT1zlzkyȴz?zD˭}zz譣^{ {Py{l&|^|UP|oBF|~c4e|v,&| {*z^ǡ zԮyZ@y߼ԺyzD zz2z|y{ckP{]|N|b@|dq2|*$n{zuzjz>yČyͺ\yԼzznz9g[zvzx{*[j{\({M|G?|^1~|>#{ėGzэzޜyHky}Xyĵy٫yz8z?'zw{i{y<[M{L|8h>|U0v|IS!{{SG|z8x yț0yĭAyʞ%y5z'8t+!%~Ղ;ꮄ|Ń;K0ɊۡsՂ熀ƈxgkƁw_*S F=b9[f,S~׃? 'Sウ1k-R^ee4DxRF2o9}Ή2,w (=/` \ӛ-O/!w,j]^̏RˍFd9Z,{~*~\A>یݪiz k;NPj^L3" Pw&.kA%_,l1SkPFG98~+`~N}ىJO[~ެ~ ~媸~ǣɞ~R~0~ww~Bk4~^R( E~Ր7~)S~)}t[o~˴~HĊ~y~6J ~WޝQ~Q~8Ą"~6wd~egj~]~ǗvPC~˕C ~5~`'}}"=~ؼ~RϢ}Ͷ}O}ɯ~}}騲E}ե}{v~j ~M\~6O6~A~wP48~C9&i}֐}&~A}}4}eFt}_ֶ{}]}9{}zɏ}b`}vR}i }[9~7M~0i@~2}$}s|~Z}ê}}3}J}^}͏U}=}'u}lNh4} Z/}Lj~a>~1}"} M{OH~ 6})3š|f|T|kt|Ŵ| |ୋu2}3gm}ZY8}ۣX۝māln;u*i0\ȃu PoفC26||)4ȀcA/ͺ~އKFe҆ٝ =8"G}Hui \σ"JPQC7Z*L2Rρe׋T]qZp̜˅`߃ՇAuh<\ȅwPEC恷r6*Ai; CY։Qg5!98҄ϜG]KjtЃbhYڈ\xPy+D<7߁!j+TȄ"ߠb}|]~N:~Aa4烆D(3jŁzdžU܊蘕1u||rOĀpe† iYM|MA7€4ς뀝(W\ڃh+ƅٰׅNy݄ǘD݄F݃/nqچFeYMBA=v:4؂(zǁ%ρGw ŋ`ӋBk-Ջ= %mUqƅe71YMzGA85di(# W)ʼn%ѯ^:ohY{'t~ىvqKed؇Yh%M׆oA-5S~(避׀+r)KĿ.ɺ-OaчȐʆ3 ~aqIދsdtY+1MoAx5J)ӆ&9 V @ZRp¹sS5,B_0l~ pƄ[d{= XMNAn 5Qt)/ЇTֆj&̓ψH4ƆЅń}_p߄=dYGM!AՂ5>),Cf x)eҭ5@6ŕY8~WxH}X'p0d_oY/&MÏA2u5(#⊅i=gc`ئƬ ˠnƄV܄|탅kptD=d ?XӓBLÂjP@Tڏ3vW&ތEԁ30Oš'SʬB| 9/NL]|s*pCjdqǘ(WJB>̑1NE$>Gيوl׷.ôի΅-2o؃H[{ǂѠ^oǂcV]I-=0E-#zWKn \M#?p.D^ۧQ{(qnPb]@UH0tHBט;wu.!ewkүŰʂu._ j>[у'҆ԂUz nR ayiT.#G :.-3#܀#IPᇩʩ߆~ֶþ쪮 /d;ܲM>_zܫmۨ0`S,F 8Ý+ׁOfyUmρ1@ː&}+^]'!푞uytlë_сᨄRCE =7٠*4duhȓ;󵭄*Ǯ|_r4xƁl9_[QeD&7S)Ձœ,R5yД~{{ݷ\|g|a*||Ј.v} {ڋ4}Go"}c$~V~6Jև~q>ۆ~2΅&Ʉ]ޔ_V!ЀPz3#6Ea{RnACb8\VGjJVs>Sy2ȅ52؄D&G[i91_Ⱦuj<͵E! 4u͇ma z:zmQaVKńLJ>˄x2ׄ&#ׂ+r:ΐtjkq+/XN SQʼniz[mr臼a5UJl̆>DŽx2+'Of4PϏ'ekA_bƉ@yEm8`UpSJ8)>c2+'XzyU ](sC} nO:Ήݑ6ǐGydՎl.x`cNUMIP>؉Z3o'4Wΐ ϼٍTƌXrFG/k@Ẅ4yNlO`%UJh?'h/3`' Ȉہهܦź٤<ȡ{̟ا!|>UxlI8`ՅőUȅRJ>ׄ 28&m`yp=]1>G-)]r:҇P}xAIlO:`օt[U~IDŽk= 17z$ GщhЎ8WĴ ɻԋ֬%ЩgLjɠǃOwƆ/lX`11TI͕HP;݃/jj"vɊ$ WexeCn^SLcjȆw8,k^_DŽ#SbF߄!:d-܂!Lfgaç]Ê~r왈s18Avjم^@QE\[8Y,WSna/NSʲjÇ躅м27ָ눥И ^ح2uLjޣ]P䄀D27*)4ÁJ<^\œ ʉޤzdd_̮quJ iWd\xOiNC A6E)}vScՓXɊUB~BկX5· Oʇ$3^[dthF\mOnBV5H(dț3|8}\\M˞ՈY]֗2r?ƅs$g߄E[SjN.{.A0r4^<'p䑂 x4y50zvz{%{}ed{Ԓ{܎eR| |fw5|j|^}6R݊f}Gh0~;ӈ~n0*~$_TΙZ"?`:o B vc\~i]3RUqF∑;Vi/D#!0Tӗ45ȃ@ӑ\ȍӂg,HvH؁i]sRhaGH;~,n/ņJ#+8ə?AK:ʈT]࣡T@0󍱅!v&Li@]Ί RaF ;s=/܅$,ׂp]KZU'uE: wu̇iD]]R*߆!G;͆&0h$ԅ =Gdž?Nf |{~ ^ꐴ,ӏe ܀uhi X\jQwdFŇԇ;Ć"0 ~% !6gƼ7jtΒg:R*ԑ ,9thy\'Q:uF;݉0M%CƪО)ߐәX~ڎ6̊ qt5yh\j\n)Q G4J <-j0$݄ꃔ^ MߵmɫRЕwʊXd *sŠh(I\\RGC(;߆0}#ڄ<`ƃKcŽHْf! uҢ{ho҉ы{~8sH gՕ@\ڈ QۇhFzT:Å.R!ЄNډ7cxT dVvY}irmggT\ϖ`PHkD8υ,;m EqdM%ǑɱmbĪ埧 /=G΋d}qr'%g*M[ROʇ%C&7uޓd+I5Ƅ!݋ø?Fn+ ( 38Ǔ⪰:̧|҉Ϥqࡶf` ZgfNu Bp5͖)B%} C2jzl0񲠓8|2p͈eܢYFMY3@ֆ4(O?}9+Fy+“pM ySbY^{ytpdǦWY%+Lj?Þ3WY&ט!I ?P)YNKGlrwzBF@zӉ_obcªmX/" K|>ʆբ2W%dž8q ˈo’< *şߌw6:z/b/ncԮWc2HJ=އ1dC$͆ yFy[z| z۟3A{{B{~{r|f|WZ||O:}"DHE}9"}-҈~)"8m~`pI~ k~s~~ͨb1~n~H~x\~d}J ~RqĐS~Je~bYb~N~C 8k^"-$.!-܅¢^ƒ< hϝǖW 3H}4}FqсeKYNCf8#-d!ƀN~לϹJDuϗȝ Ŕ`W񒫄|@qMeO؃~YJNӋh.C-8-Ăb"vƛ􍔹SpRꓻ $=|Hbqֆex.YLN;pCߊ9 .ۄ'"C]j)ȑ-)Tǔݑ)Іa{pvtd(XȌ9NC*9.<#؅\yфk<ˮrqB.l W{to d?׋X5M֊CU9܈.*Շ"ԇ x $ԜhgҮۖę6q(蓌!jerzLodcsXRQKNn^C܉}e9*v].ja"^~b2鮪?I ˑmGgz}o+cČCXN4C҉(8ˆ?-G !tȾaԗ>خl 6cTi8{ ynԕc+XMڑ(B珩7ڎ++ÇRohPiP奄+]rΥ &yLyśan)cJ|5X|jLA%5s'S)P#l o;sڙŧ,m eáx\(mUUbDpWڊUXLS@(v4q(_B{voc\8S:"ԙp͍ۏѨ̎w<%lkaȋ V֊ ]J&>З.2Ո&|GՐJﻻA 2s4Иz4DX3TBw >kF``UۊIZ=P1lOf%~|u!Ɛ H!l̿0):˘D_恆vf髁k>Ԩ^`ӥ'T)H<980*6$J ]BokBjgպ:Dˎ:ujv֬_>٩ASG;=\5/!["舊9p 决V-ԕ U#˿SBC tiI^iS lFק:N.*4!):@ kºxmy@-Byܣ@Fz--zszzy3{іbg1v.ɍkd%_T\iJML[@(63+f /K쇜ǚްD+& X0򗥔“8u?$j_FTkwJe苚@NJ6+i߈DBհ"&}!4@ғu@ӓSjK_qITs Jm@B5|K*b!k¯̜ɧhΔaʔšYtuj _.'TrmJ fd?^J4T([Ai'߶kbm lY:4D^X~ђUt(& i}^ێn(TF@HZ=lG2᷀ǗXpg|ʒqꐊg1\Y:QzET9."xڔj9 tJ%ҜH!@Jדo%| q1vfR#[r P6Da(8ٝ+,؋"u!&xR + i‡pb¡#ȖG,9(a{H汨phye-rZ-O0C7R+ˋt~ 蕘ߊb yp`JÈ \ [QxG h=2 7'拪kBǰ[/ ji,>D{O7!qI4fӔ][Pw5NF∷<~2 5'英j{]*ϙ-ϓ;癥znpڕfh[fKPoыF<.2J"'f50Plj? h8dꎩO%!~z9p\M5e퓍[jPIHFiJS_}ׯ>TёJj>_ץ2C'=g HЄʫkh|M(|TxPd|en* |pc|X|M|C}F8|}-ˏ}"؍}r_} ĉW~,ĤeܔMZr)πߠFwjm՛.cMpXQ9Mĕ0?CY;^8w%-5"㍉h TT\ӫr JLU&(nweimaAVpLFNjB[6Z8ep.'#ʍ5[CÅ=Ye=iPҢ wp~?u&k]ّ4a1V&K󓋍B7;-# _ =ޡYQ#~Zt jӘl`V ꑀK\SA܏572 ,x!+ ާt⥍ɣǣƑcAƇӞÝ}Ft(jC=`$fUvK0=@Б5=*Ўx L N?vkFd2fy}_sjqiT_i?XT攣Ji-?Քi59 T*;yҎ Ћ w> Ni󆿞Jl|r㡘hyF^@*SϔIY,>VK37O)i<،(U b*Ƶ\ƤȲw^Ѡӆ 3{ߨqghi])RHL>M=F 2r7'.˒D،r˥.(S𢍵~Aga zٛFpxfV\8'QqGHf<9@ 1u&֏62@<Ԧ}axRz!oÙ}&4 }z)}$3}} Y}p#蕂ZiRꄻ{Ԥ+rA~hu:~^I~S^~I~>V94`)푱bfMQ$ 3N{|&SGY`{Pr0h0ԁf]pSVHҗ)>;aI3ړKJ)o*3ˀhw ʀj򭥈&ѥφAzϣqhg۞B\]SHp{>:k3Γ/H)Y vt HIǪx}OzpΠgÇX]R֙O:HBC=&4)T*%c τ Ob`%X7^Cyx,^pCWg[]]4R H%>=4I.l*~l wۆ~ ]]+nѓq)D[y/o8fP\CR cG؊=׊4u*-( Fj b$0{/-*蔠x31oґf!Z\0iQnG_$=ag3)}܎Q ɠ t*,ț݊?*ѣ}lxeoce3[QN;Gz<Ք2(`凔 8wJy3F+Uwgmnte[.PȘFe<b1Ӓpp' EGn FQ\Pk1NJ8wU;jmQd+՚aZL٘O E]n;Dg0В &QytXh3͒ 㩠rZUʥvw+lxcƞPYМ:Nۘ DDml:ZuD0 q%=9dLƎʞ$a+L$u-Ak˝aʢxWؠ-MC98.͒$ia^YMMR9+l)~dt=jʝc`֛ܦV™~LAB}8 -?#Jܖؐ8Nċ(U!-eӈ~FQsYiޞ?_ЛUOKotA7>2,"FNt G܋E^ko1u.}̸bs!z iFb^2TɚT]J@D96;+ϓ!b{ B ~1jNŜ2x5x*\xkx|rFx\vީ:xmYy:d?yZ~zP:]z}Ez:NI{/u|%"|{ʓn|3|}߶|B|HX{φ{~Y{Ruը{ll{c{YJ{{O|,DEG|9>|.햂}J$蔚}u}mq}td}Ɯ"ݳ]X!~8Eu~lC`~rb~VX+~XN~}C~9j~.֖;2$ՔZG56#ŒԵ"E|,J߆G~uO0kbmh6XрNX-C9&/)%6$GӀX+ tLv }RtYkdwbބX7RMփUCm28/%s}x'$ Mьԯ8 '2|VsӦjȣaáiX"SMCKJ9D/,ׅ%9 K(vE݌1ʎƄy{/s4Gj;aR WŞMXjC-78燂/XӇ?%ߔL7 TIf+,.˓Ub{Zrɥ֏/iͣ4`W2EM Bҙ<8/d%ˉNa A*ٲ♀ְ7؄BNt{]rcvia&`ʙG5Na+_!ۓ)_ {h,߷zVf鉹òj6x7o[n;ɫd_~Z@Q/ݣGuܡ=4?*v g@$G vdn>轂oȷ/w~Imfc~kY,)P+Fv<ƚB3:)d3ٕÔ# ]b9GséЯxBmܼJEvȧrl9bТYkyOKVEi;I2Hg(\./nTՍM 'xzкxʈxxxְwxpp#xvgy^]'yqU_yK(zb@z556{*| |8|, &|Q|ᕭ|#|K|uʳ>{wɯzoe{fq{J]9{mS{I,|?6^|r4!|)}< 3}46h| }&L}v3Îu`۲wP8o.!~Lf)A~-\٦t~SX~Iv~S>՞~4x*D" 4g  ~ ~~޺Վ]фO:ރAw‚nګ e֨ځ\S\I)>ʀ45*  U0|؀ qÓ˺yQpuK#vƮWn<(eId\1RlH5(>4\"*j i ғ%`϶dz~fv !mhވCdw[ӥ4R{H_>_]4aF*ޅ LP ⓜ <#\8<[+_}ɰluqplrd2[`؉R8H7ˆ>>w4B *ևI!.+ cE]OL͵˓K2}Eu,(lXcDZͤbQeGw=ݝ-3lj*W ɉ 0r œbK aXQڲٖ0}QtҬݓmk̒c Z'H]P衸2G4H7=lo3%) P˕o r4Ύ̃$vs>}֘t]k^bؓYy%P>&F/<3+)v )ˌqd 13]mc|ǯt }jϩja঴dXO|EE"\@RS^KA8KK.$%p98cKc +M8غi}eu촠)mxYd$\*S2T+J@A7Št.S%'`p%H HVz&,o}*umBsd[ERhXIl@Z71v-ݝސ$Mnۍk ͉5ZJR|bu9fKl%tc]ZzQYH?6|->K$ <>苝 J@A#p˩/|`-tIk˱bY+PmG˛>(_5,ڝ-$ƚ 4Ӌ ;07|Z EW{s״@Zk&aXīEOF$=c+4++#=ؔ*Aԙ!U𕄆Ə1C|wڳT{s6GWjU3`Ʈ:yWӫs^NШɥqEզ?<ң3ˡ-*R"6D /h4Ņonݹrz~rRiK_iV쫦M D;2㡌* Q!3ʖ[ e2@Zŀ Sø0yr^hs_-V MXLC欙:i2 ١)$` 3f3tqO?iw݁8Þxyhxrty j!yc<}x0ZwRRxIīyM@ڨz6ɥz+{z!D|7U| H}L{}~z|5|x|Aq|!i{ib!zYͱzQzHu{?_o{54`|$*| }\{} a~~t~7F0\8xпKqHsi9~a洜~Y|c}.P^}BGS}>Ϩ1}4)~d*c~ {g5 ȝP 憑IJ xPq#iƷWa.Y:aPkG>y݀4*I,!;^߁ol[ЙH.*x8$pӆ$hPo`߳քX7PG)F= 4|σ *8A!reMRȀwo~tXwԊ%p+DhC`&WQO8TGD=bq4HB*8j!ˠR,ׄPDCڄO֐0}Ev彂oFgϋ_~[WmO=FX=`<4*Т8!`=fz–}@꒎vEoWߐ-gKq _ VԯŌNEŠ<קV3z*d!PBE|oa8Tօa%\łl|տWvgΕo f@w^vӑ?V5MŬE)<03"Z[)u ݟp3D2ޓ`W|vØn~fl']ѲÔUqJLﬣDL;{2Q)nێ ŜiȄ̀bQh8|buҼĜnmMf ]'ØITLUCjߔ:1\( ]u3s"sZ|uyŠmger\ɜ)S᯲K>ϘB9!K1:|#(_ߓ:}Ñpb ʜIaCJ{qtVmTnd[Ԡ:SОfJZA$T9Q0]'jƒ}Zk .XE;&<{ \t]Plnmc!wZԲ줎R0Iw$@תc8-7/R'1Y K >]zFDsltcC+t5{פ,Ԧ<0$Fmђ ޞQȂzxNz:ws,skAx=c޽x#\kw(T^~vL&wCx;y1ze&ѧ{`<|7c| }=U~ K|`y=K{qŃxui{jbz[NyS<yJyBza9t{+0Y{%Ϧ| }VV7} =~~✫]ЀVyVǨqcHj$~qb ~[/}bR|DJ|B)|9W6}/s(~9%sz w?yk[1yErÞj /bʼ[Z㸻=R^J?BA9Ӏ/m݁%_kj+ /<Ɂ؀?p{x`rIq:BHiؿʅaZmgR I҃ALE8m"/X؃5&OgT ",u~،-wpiaEۈY\6tQqI5A)k8w/ͅl& U;a/l= s*ehc}SwŠ]oºhe^ `IXP۴I J@Į/W7ޫV.̇%[*mZO k>4yP|iv|Mo\h(`A`X6ǍP6]HJ%@7A.o.p%z*oEzգ< +Z{6|kvo\qg྿E_- WOBG~?- 6 -㨀$*PreaQ !(Hڀ|ٚugog_mVKNд5F>X5ݫ$ -M$wGƤZ+ s nㇲ{ڞju!ngU^)VBN GEDZw0[wr!vnvJiЂ!{wm{+1|eD|;T}CpW}€6}̀} ~z~m~Wad~U d~HB'~:~~-6~c }G큀5 ֏ʚ}xhģAjw~܁Cz~0m~-ar~U/~YH~;}π.k}Z!|~&~/~L=~鼈~>~'~{~mB~O#y~8mk~)`~2T'}G}}:}|X.^}"*"u|}u}u*ԋ}muȩ}x}}}Δ}}-yM}m}`}TS}GQ}oE:}<.+|L!|[|d!|Xӂ|]Ǫ|t|*|̍|⌮|u}\x}ul2}4_}ISl}LF}9:7}?-Y|Ą |<{U^{Xaҙ{iƮ{A:{œ{G|.|K|ix9|jk?|2^|R}F!|9h|ۆ,|| zQzizzzQ'{#"{d{<{w|nj|E^&|jR|E|9|,|b^1{܆]$z{0Wy"-x蔫wύEv$vovi>v$/w wxw۳x9)xtygy]XyJyjG^+QeEG9"~ ,~ v}UہoD;ԀOÊRnŝ-7{v(tiap]BQnE{~8~Y,Y}Ѓ }◀c:wžϏPNkА9!u~i`~]K~-Q~iD~~8~&+}[E}r׋H~ݔ~ڒ~ё!n~~E~u(~uh~\y~P6~rwC~?}7U}*}T|~"~XfR~%~ ޴~~X~ $}ۂ7}Gt}h~H\ ~7O~4C~e79}ψA*}j5|mN}e}}V}Y|}_y}pZo}eK}]M}m~t}vh8}\}[P}C}R7U}g*;|%|!ߤ|z|*||y|b|۝m|ۛ5|ؘρ|t} h}-\!}aP}l!C}Ct6|)0|pm{|OG|!Ap{F| +|+M|Q~P|^|a[/| tC|h|̕[|xO-|zBV|Ǐ5|x&{bzډw{ճԷ{7{l {pV{*{ۥ{1{|ds|6g|htZ^|M|@.|d3|%y{{?z.S{U7{'ʰzDzB{.{i0{}{,{Ǡsq{fe|OY\|1LJ|Ad?|+?1{_$'{Pfz^zӼz9z׾zWz<4zϘ{.{%t{glr{De{YX{뛝J{!=]{ؖ0/{"Jzܑ yzzɯzKLhzVzcfzJzzͫA~{ r{Cd{xW {I{ڜ <{ .{L zp(y 4zBczz4z%)Yz)y3z@ޗzfkz~jzӫqm{ #c{LV{H|{^:{4-I{b_z Dy؋L{oѝz!mzNýz (z zחz*IzJ}zkpz㫹c {5bU.{oG{9{5,={ezEzK{Hfz!z#șz#y_y~z z }-zp zȯNbQ{"TG{;F{9{~+M{)z铒{ ޝyzX7z q{_{çn|'΅i|w|+|s}2gz}f[\}NQ}A5~ 4~T(~3>t78Ӽć6͆h1ⅻ m]ڀsg{0[OxBCL7<+Q~QJ͆kz(5nβB߄EDə~a %ws/ g\[F]-OqCfc71ȁ* c~V ye\ȑ lWЃ숌j&OTЅr؁x2f5ZROB o6y*=~Ƃ8}^ښ+hǦۃڤĂz16r}u2}c}3a}A|.z} n}+T`}WS,}6E}8}n+}u|=-I{wA~;~]}~}Ϟ| |ѵy|zY|ٮmb}_}@R;}xD}7}j*w} ]|xO{=&|?1~Tȇ*}«}Ԟ]|,|Y|y|Ql|讚^}/lQL}D}6})v}J||q|x͟>yF1z4ċ&zBzX{Sш_{]{}y|Mp%|d} XN1}RKv}? }3~*(!~~Վ~̖920 I#a tㆄ|}oԄc@o{\ćW7LF[@p߁54m(;.Du"NS }MR+ƆFC"[{[o„McGWOǃKr0=?3΂'g(~ҏ~e{ !tD~Av{̃ӇnʃIbuW}KHT?gc3v2'~郰~N#Քɐ1IXԆӅV|K-+{HMn`Չb@V;CJˇv?A3'.C~zԚYއ+ͿzFڕ҅F.t Yz׎;moa͂3V,J>2~&ʆ;~ &ȝ_CVb){gņ. zZP_mՁ쏾aӁNV@mJȁ??3ab&;W~),ЄC6]$?lژAyڔmaF V6vJЀ>3x2%~ʼnV}3̅ЫZǫ/p=˃kYx2͚yrqm&%amUۀIY*=Ҏx09#~w}Ix"7k )rd&b cShx9lʘ`􀛖T^cuGc;i."~A/}W-ƙHɧlSށwU!x;lp _9Sf'GĔ:O-~đK ~|s˄wƸ̽y5z{}ewYbk5Y^̀R/Ef82,]~E} } ()8łS-)yHWv "j֢]ʟQ ҝ/DP7E*~+}|!YՂ¦jL"ʻx@՚.,^jQvVϩi}]WPC8D6kd)~J~ }5.˓NƂïy,z^&́бWui.?\G OKB45ah(h6~~) }ʉWԄ)Of˿>^DMXA~݁JUu hkt[vN2]A7Y4g<'rJ~Ñq ~{Όx&JyHfy)ByاzGOzzk{JxH{l6{`Q3|^TK|I?^}t=pj}1s}%n~ ݁6~D̑o}`x~>`~OE~>׍~и u'JUw" ˁv Bi]ĄR" G|*;'1w% Ѐ Ɠwdxi&xSPyPy`z3zhzsC{g{^[{P;|:D`|9A}.- }a"j}}U}"*}d}|}}`%}xK}&a}~ی}s8v}g6}[A}O~7D~e9H~-~!s~&&~M,|H,j誔TEߍ~1s^fωG[9^OkDZ9)tC-`.!?B$ĈIp"ҴAOvBxn~fsJf[ 'OӇBDIe9D%->"(ϓbܒj~$'w۞%Fn}rl(f`Z҅0OD"{9^5.@">I5 @&Ir)9}pqĉJ3ePZZzO#DV9w.Y.["=9t"8J걔ɓߎv?{9n·N8|ivq2Oeh/Y,BN}DɈ9R.G:"5t;86r ʕC苼+{dp؈fYe'YN؆DKY9}.M"́w.}@HtW_ƌ9{npYqdۇYazN;DU9--;!L$|S7B*zݠӑ" z}o؇dY1NɅ_C!8,ex\ ZC"o܎J⍁_k2n2ϗ%}.* xƉ'N˶I=s(/RֱwՇ+~lrZaUSIǟ~˅3^$Ԕꄛkr dyj͂nQ>Ubӂ WOLDyAHR6`0w+eH ȼF|,Uk3ڎFsnxʎ5mƅMbtVSYKAA>/6 ]+ ˂Li͏r}&Ǘ=Ȃ9xm ^Ia#{V?Kp`A 6S+ӆ W`탮(ғNƔM3tܑ0Œ1owu@clVaԊLUωtK@6}b+ц B.-ɲDҡ[@`ד͌;|VwlzM`Ċa UeK@ᇙ/6nF+d F̃~m BBy0ʖK6Wv;kT`uU K0%x@ڇ9S6<'*҅: 69L :¢a)>8͜!b*э1uؖ<ِ2ˆ 5'6;Qc􈽸J&je3đ©ܠ{quuZt=iڊ<;_.TW;H҇{=741&5*dNӷD-ak"ٍF1ti'^+bS(G~l;҆0.x$bUA& ނ󈪶ƓnE>;ұbkR;u~]s^Υhtآ]RԠR cFRw":ߙZ.ӆ(2#YY儆k >gȧڹy[6!ְ}¬rg§\|ģQ/EWd9e-| !J_V g8ȮiVܞ$phK挸|qff[ʨPMDSx8U,v4 oLچ!^ KLBx˫<^#.|+{q6Jf'հ Z㬤OqC\`7NSy+c8OdžՌS+vjmwuw'x@xvxqy{38{)||$f/|{x@N{Ǧ{{&{ |#|t6|-ii|G^|wSt#|H}=0}K3L}i(h|}o%)}R؅}$ЀϝSZ דɘ+VK9!t~i~^N6~SjHC&=.3F#(V@*~~rr.KraԄ$[4_i"~ϓނDthi}Y^YS1IAH{7>3O(ŀHPXѴNDvψq~@3n͜{Upzre[5[P-E<:X/^$G[KنW r' r֩rș䥇0Б{z\oo'e;rZ-P DԊ$497.|K4#GeWp g>їvH}ϙ>e⧸.88yӢot#djBYENފC~8$Y,߈K!|^ņюM Gr]#)ɱLTwix􏴦n@SCc%XƋMԊnBX)Y6Չi+c - 脳-&޺:U$Lߒ}/ڐOx4imDb̍WL׊+AG:5*>CZчΌ܅\Π•`s\@d%ӳ#wplI#a(.WK`@?_4Ο)&HʓL܆:KWc#Jʗ㾃]eθvkZa&BV)JA?Ai3(v9*8솳vutvvzw_wх-vxG{Rxp˗1y f!*yh[>yP!^z5Ez;${ 0k{J%{o{l{VzԢ{ #{%o{){D7{\z,{~o{eS{Z8{O{|AD |:||/ |%V|[D|Q|dx B6S~.~Ńٚ~y՘ ~no~Ge~JY.~UOFr~sD~:;~0~%iN~c|~ }ЭԄA+y`9㝂IwJ`rytt}oPzdYO Dَ:/xS%hކ%6Ot鞮6.̆Ņقʅ:xׄnҔ drYnVQÑ DN:a˂/V3%2 v[Ҍ%Bh/iښ/ >xIWnEm9c뒪Y Nj{Da&:Y0P%׈Fҫ󑞤7[gqěg6OYKwދTmcciIXMMDj:/ˋG %YR̄%eԞDΓ} wJIm;wnb֌YXBMPMlC9ʌL/%&Z|BˆCN];癬LgvєԒ lbswHWڏ MiC|X9o / $uIbiKr?✇1׊p%<"CvRll&a(SW_MTBr8ԍA.'#OWވB ng㜬 ß%ʝ!u(kiAaQ핁VvLYA6ҏx,]=!psf' 9ž=ƣf§ӜL:œmpvm"t=u ϝj˒1`ƘVTK6@5ԋǒ +5 j2 G݇ӯ=͜`ƚתЙx0~jDt>/i _U=PJ~=?[{4_Ĕ)Ήʐf dž'B}Ԣ,f3ϒ<ԭZX}#sti^T6Ik>33+!(WYI wŝ@ٷؚUQگk|rh*W]S"AHby=#62A'&&4$}Ä^Fz!P͹l{vqfz%[׮QNFq~; /N% 䋁oʼn6vĨvv6v鈙w;Q-wux*kxazYxV9yhL&yA-zA6%z+vA{1 {j`'{o @|+7z%`z8ͥzLxzhz~Wzt4zj֙{ `{4Uȕ{tK'{@ʑ|5ᏸ|t+| 5|<| /}+ۨ~"~~I^~!RO}~}tR}juz}`,\}UsE}K K}@k~$5`~U*~i ~Qna~ m~M*򃁟uj=}Tsjl_і9U"π%JȒ(@/5?*ݍ56 < JQãJF8\|ksjilg_fTqJv@PZ5@+$ a8 Fr.ؠYX|@$r̚"i6o_1T$XJ#h@5F+w)!RO) p)cҐZңF 6;4 Ԍ8{Qr4ih^T+؈I1`?5Ž݆_+.!lr׊g p)蝞ef_0̝J{?q֙ h1^=4S˓sIlՉ?hI 5pw+Zч!$cC 4Rb7۟<ؓzٚVq_g]ڎkSY%MIO? j5J*ꌤ A) IA3 ꍩSBvzp*pؘ2dgK](mRՒHX>ٍ4K$)'.c ꆁãߢ1 rMln!yəp<ؗf~ /\ZR0 H0=Y2 (Ct$ĉ։ _sO@7եc# eןyWoeܙ[Ĕ>Qj8G <2i(3?U܉ Qp 矻ٌNæ›^xh)ndƝZ/PUE$;QǕ1 &a҆M#ɲ'3Qdy䋿kwřWmȗ:cġY3OI;D6::Y/ߎ;%/֠`b՟D@XnRvP^lޗbϦOXCNAJCّY9).ʎs$jiH؊Q(G%<٠BA(AɝBrݛGv+XAkaȕ WcMDBב8&N-#[JU 劃[;袵4֒C<0QukmLk,`!VLV nAͦ7%,"J˗j U1uvEG6vv vy* wDoޠwwfox3\xRDy#GZyl bٚY&NޖD͉P:’ш19'l6.c `82N ~#FtʑakbT_XeN_^DY:l0r&4{ oЛfwn}ݠptdZk&laǚXM-Ce}9ߒj0&4)c‹ [g6K]]n†ѣ5}NsjՖa*ӕCWyMVsCVJ=9@/WO%# Lp (ץܔc"PSm}WtsJɜiΛ`\V$LsBp=8V5H.;W#Տ,| .jhm%-錄+|^"rwh䛥_BUxߚKeAQG7iF-g"" 뎔m@֨-cdm&!O{qgg"^,TQJI@9fy6BwJ,:">َ ċEm˜ըGW6ZόS5){IpÝf]ǥsS5AI89?0f5)+%}!@ h:r^YL@mSzb>oů fά\UR,=$H;uZ>>͢4@ߞ*6/  ҌXɂu)mKă yZo2?e,[6!QB%GM=Q3[+I)Nf Їkɴuߑ6v#ﯮv`v{[v|rڦwiw`{x W%xLɜQyB=y7jOy,zy"}>zCz#{/{z[VyFyʂBy[zdLyqRyhz _zWVzKΛzA@L{e6{,\|"_|@|0 A|i|嗈}<}=/} |zC|q|h6|_M|U-}Klu}?@}~6u},{n}"u~ 39}#~~#󯹂6Ý7z qLRTh7^EUTvK @6B<,q4"lie≜B:yfzpȃzg6^TڝH.J@}\6C,"ܒOՁfр9uu [xZoRg&Ɔ ^!OdTJpy@F:;6?,#3bn̊imԍ|(x'oMf\!]WTHJ7G@!63,߅#:a؎4p ]J+{hwئMnjDf:]:SMWI쉔?Έ5Ǖr,T"GyȅcՃqώ ~Aj=wnu em\z8:S )I0;?Pp5ie+|g"Ӑ~!]B{֛SΙׇӪ)w:sn*dL[ڝ\RsՐH>ۗv5 9K+L|"&*Sdž/Iœ® %kv֥:xmvodP/[)ҔQ;Hb>e]4 j+6!>rՊL=Z`EQƇ;20>fv>lNcZL0P⛴G2b=Nm49*Ɛy# &ꉫޭp4إ~xuڡk?bY?Oț?FRk1<͗VU3C*D f/Ō̬*}Mt䤿k@`a6X9Р6Nמ@EG;×w2)l(@ؑ0 ݍւѴz8}d5t?8jBI`ȠW8MD?;:1ukc'ؓf/-:g \(ނ [ķ„驀|ܧ1s+ikc_٠7VCL3C?90i&˓ Ւkތ a*u-lսiM~|G>rޤֵfhm^f2U_WKɜy4BRT8ŘY/a'%bmӓ;t Glܐludv#Tv|Ovt wlbvcwdZɥwQixbGx=2yx2;Jz'֘zqgz$;z^ Mz*{x$yض4yz{ysyOkm\ybyYŤzPzfF5z<%j{S1r{'W{${{ y|$.|}ɵi}}]{|s|k%|bN%|Y_e|P|F7};ܜ}i1Z}'x}}S} o}~ك {S1sg[jѩj'#f!# D$M2݉yFаzlTrjia`҅X1'OE$D;N 10( G# U"􌺁)=LjC|+yխPq}qh+`orẆNRKD라;*md1i!7'= >&֌X_s݁ytq"hj_WuMDesB:"1 ̈{':M׆ BD͇1 ۀӯʓy>+pʪMdgi+_GЎVj;MQՌCȝG:=50'@X1 K6w.퀗xopo gd:^8ULC*+90BB&z틜@ چ hƌF$B^xٚ`pfϧ>]T9KٟBw9Hʐ|/K5& YX7 *‹ܳCTCx$o^Μf]$lVTJAA8ē./gD&8 a6+A ˏxDkM2^w wsyn-eFݟH\5ڛ?,r$ܕT >9DN@b>0}w״u~]lwb ]YΫ1PMzbG]>4@+*"‘H.:Ʌcd[v5i|֮繜t߬v0kԴaNXOlHF6=> 3*ۙ!ݗe+56SH ;u҃-vX|Bvu2vmdveѮvF]mwTwKx1Bkx807y`-jz"zz^z{Y1|zUSzR{`z/teNylydϮy \[ysSyJz(AUz7{6,K{"?||$n|F=G|}RU~zHC~/{}t||lY|d#|[2|+SUP|CJn|@v|6}O,}"}˙~T!~~~cF'|{Ӂt(l€d> [RJ=~@ 6Ho,"s5J,k^Nㅤ{FsnlkݰQc=1[.WR'I@ʁ6g",#l*Ɂ $' Pފ i:zڈisM k9b+ZR*$IWya?ǡ6E ,Ϝ#q 1L sqpTʀyurj&bRHZ|QهH/?e6=,7#>V4 UHP֑y ro>jJ;a׬-uYzVqPH3>45È,JX|# Gʈ+ȗ d|x5vyzȓ^r!4iaQX۩ PEewGxΌ}>H5"+Μ4"*Ɖ|NՓώO7_|Ofy<=qٱݕiՔ`̓3X"O|UFŏ}=~4+eU"d Q4>&"~cyEqۙiǘU` WcKNXEڣӒ<\4{o+ Y"oNFHCل0~ޠxzq hwQ_PVM˦[~D< 3pD*|!l$XUՒ[Fzߦ~*x8*pO^g^~ULiCD;g12*"!V5'w]ϸ }m|wsoo g]TީLeC2%:e1Þϙ)?" FΘv n{RиO|_\vnsfP\Ϋ˧S;KBPcL9b0՟ (D{TZИ]0︣{m!vn\@e [S rJ|4 |}h~%}zпb}t;}gm#~|e|?]Ͳ{3Uy{M2t{D|*;~X|1h}+'} ~l~+ ܛ~{~6!H ztVفm7ǀeaY]UF  Lܬ(~D=G~;~1_l'^ i*2-f+z/PsLlEdڴ\ױT|LwCā:1B'ݠў̝N: ]b.7yskCd5\8dT-KXL TCC:W 1"'H CC c|YX~Όx>rwkbca[!S@K{C@: bm0߆@'᠄_ L@ {|y]{}>?xlϐ)rA3k;cA ![̌%Rɋ.JͪފLBY9l?0n'qJW- P[&>r4}1w輄qjͶbАZeRLIJ ?AX8&/ۢ@&0>I;9 Mo"6|Øw]qԖjWb}YⰀQI7f@d8!/S&~Ğ.%& ϚΈ֕у|оwxTq}ښ^j_bY6ygPĭH^ʓ?ݨ7_$.բ&*ԏyr zgkzZ|u wOq؞iն9aYXrHO򭚘Ge?F86R.6%摦ԏG %jj>{྅kv(Gpi` WZOF@>)j5ԥ{H-p %:xɍi Ӛ•r4E{)uqu׼Bo칐hWA_ⳚVNHѠE«(=P-4,$^R>W) !zLyuo@"g˶K_-UçMZDf>Ls> D;>p36i}*Ĝ"j<-YfP m$2y1ns߻߽n f̶㷁]&T<5KC4B:2]֡)Ѥ>)!eؖ}/oJ 44v{{ Ȥtt` tmI*uGf&u_˭{6o|I,f|"*}%~~~^iyρs|m9e^d9V~N~JF~ >j~/5 ~,3-n" MTF~ K[KyrZl[eXRv]ՂU^qN&-F< =ϭ5 偶,)"ӂ1!hl Dj>~xtœ\rPWk*pd],U\MхEӯ=ʄ74Ω̄+%#ԄfXR YI6MbwQ"q±k+d\J^T∭MEM~]='4}y+!i"؆G C bev'vؐqKjտcüo\& T.LVqDb0J-6z5.vJ&\axuKa49(zrĹmA)gK}t` |$W1>N/EųJ=5 -!%xz;h9J ڟۄ_?rr&l&fƿ_tV}nM;y{Dr<4خz,ѫ.$ϓ2U {z{z}؎{zr{{~{{岝{|o {|՗A{})|}x{|}~nO|}a:|}T|}F{~ 9#{~B+,{V~cz~hycyןy˙z"zXzhz햧zzր{Izʀnyza`zꀴT8zFzʀ9z,zW#jzudxFxS֏xFʉyyMd yyӄzlz;zz9ozb.zTzGzZ;zF0\zC#uz??v/w Dձwɾw*xIذNxy (ydayzyӆ;ozBcZzV[zI)z"rx/%xxyy2 myb/z5UzUzHz];z>-.z"y tUbt˗ӽuFǴu˔qvW vꑉwfwގxLIyx ly`ywTyӈH?z;7y. yŅ!6y=sM)sϝ1tSSt|u'v,ҡ\v nw6T&wy=x l?x_xSy`G"y~:NyV-SyC UxRrhTrҥstlst%unv vwyCwplewL` xuSx݌Gzyf:oy) ,xyx!qݳr,'prĥseHtnt̞8ue듑utv^y v1ljwz#`=xSxi:Fx9x+xHzCw\!1pհ ql\rƉrŨstEftΓuCvxv\lhw_wRwEx8x)wwv&p ܝpIJQѵq|,r;snsȦtxuuDxv+l v^vsQ w7Cw\6wG(3vG>uGLo8&p ;Xp'żqrsSttu%uXt+mk"n0ЕopĸqorsNŐsitvui9uJ[uBMv5?Xv>`1u'#qusǎ->lګm5oĒoqJMrRr1s@tTv7tةhdu[Zu{Lv>"v+01u⚳!tytk Klvnħ5o{(pf#qᜩrtst ut'utgu=Y/uK uj=2v#/&u靖 tt*ivk._lýnpop߾r&s$s#tt)fu2XUuJ8u58| , {{/xӗDxy4l~yXyݑz7VPz~zznzZv {6>ij{t]0{P{هDw{7{ˆ1+J{bzwӜx /(xJxֵy 2Wyry˒zB z^uzChz\{EfP{}"D'{7{*{Kzv뢥tw0w|w᜙ExRxǘ\y&y}‚yĒuz-hzb~\zPzQDg{7{*z҈jazmv9vk̖vãKw3Xw^x0xwxPJyD8u=y9hyO\zTfPxzCz6z|)Xz4 yM%uhhFu6vtvwKwśMxLx{xљuy4Thy)\=yOzBz,?5Hz}'>yyxL]]tʲau"u:vl9vQw0ښw* xexitx֚~h7y+ ZyiMyy@yu3Yyf%xэww޵t7p>t~u Nuvv8w:wIwyt xofxYyfLy5 ?py22x$GxX|w I&sKt[tdu&sIvN#vӪwE!w s'x fxjXxLKx=x0bx"xwȑXvčpr+sʐtſKtuVru>1vy fvwIrwLe+x#1WqxgVIx"vvܒrHӈrsyt1βJt鸀>uFv+v~wXqwd^wV{xvӯq?wYbcwϨUx(Gxi:5xz,oxB5wWXw&ڐrKrqtrr(s:tYuy}v-H}vpzw@bwTx"Fxmh9O7tl~݁hE~\~P~}D~W{*J{)>0{1UzL$zxwׄxk"xx/Vxly8@yyҤቯz(}zBspzwcz Vz×J8zܕh=]z“j0Jzw"yɏoLxx2e΢x-Śx@κx뮂xˮ̡yȕyb։2y|yۣozbzO#UzqHczu&;zc!.z\! yKYxaPw?wPwRxKxj Ox!y͈yG{yo=ỵ`bz ZTz@GnzU4:Qz5C-$yǖpx͓xv~d}~ql~ep~YԀ~N/jBP:6O]Z*%~}$}^vj(ۂͺO{8x/.}>Upށ;d4Y_RMA5)~X}k֯?Ń)IȂl'ЅޖjS}Qp@} .1W|#{zl }C}c}4@l}h}}<})|Kz#} m}a} SU}HE|ܒ;|D/k|("{q~z?s} ȿ|ر3| |J|Or|a||y|om\|`|S|G|;(|O.|{ !j{$zJ|k]=|K|4&|ةh| |)|-|x|-l|?_|T/R|QE|5^9m|p,{zӐ4zBj|Tǡ{ڻb{ƸZ{H{{{{xS{ۥk{Y^|dQ|3D|4r8,{+W{j!zhyEp|{ؾc{zŴ{]`{W{WҐ!{k{xdw{,kE{^{P| C|6{){zJez]͂| 9{;{a{5{C{{֏{%~v{>tV2NE&x0~[/B͇Pچ̆u=mWօ#2n&,y~&Q:qڋ:ԅSbȉ#N݄,y6zrl`IU4WIN=]28ăd&Y~ L 3~ r߄qJkxk`GT'It=t;1%~w~̂OIG1,Gɂ퐣HlOێ xvkc_㊂TH̀r=61T}%x~׆(}t j-T ?܂dQ4΁4AwwݏkMa_Q T%)Hߊ=lu1~%~NX}4ˣ["ù͂GʙցZ/ւwl'jV_JTюQH=0~zL$|},|qϨY/s䰘5]*M؍Ȁ%Kv sjyŔj^StG;~/V~ ";}&{ӈ ]h¤V\(Aр٣'6 ujt^~7ZQ BE~U9g~M-;} |v{ۉwnܲqA ۀUU3 1Ǣ}uIEi]]~̘%P~D~u8~,I}|{ށE/hV$-۬~1`tx~h~\6~FO~CE~97}Ք*}[|{Nj^5ZjcÀYDBrC3Nj~ɧs~g~up[Z~bN~`B&~55}ڗ)O}CEf|Le{^]* ZK~۲~]~sB~fTg6~E Z~<M~4WA ~/4}'}t|"4{鉑ƈɿeêdko ~ǹ!~0m~n~~Or~<2fg~&Y~&L~2"?~#3t}&}|Ց; |HŴ=+jĻ~F~~~PC~;~~&vq~ e~X~K~?5>~?E2a~ ?%}jt|w |׈ ivzvϹ&Uw[PUwդeHxjHx퍌7yi܉ yuzOiz^F{1RH{Gt|c< |0~|$}(ƀ}_{{ݸ;|@H|9cL|a(X|ʉO|E>|up<} iGE}7]u}R(}F~;* ~0/(~X$'~yH~\Xѷ(MފdGiuCi]R>F|;$/#uǥJۅ 7=NV5̃FԂu邍hA]2fQˁF;[~/E#쀟Tzԋj19Ьvp :Ro'!*tKhT\Q|8F.:҂=o/g #‥rz+mTbop҇\;OkcKsɈgτ%\A"QAEꂹ:W/Yd#這A핬>Nd-+< Gގ~sRSg!Ŋ[YPE|$:Y/&8#n<oSğVz|ۘ ,ᆆ͔3w6~;xGrՃĎg/+o[‚ƌ?Ph.E':S3/BJ#zއs~MGŞ?5l!-O<|}rZVfɐg[sjPEe::*.{?"__U~ 'ÊƦ,'4-Ɵ>b~ěUx$K}%Dqт\fOpq[9P'D*9-  Hw}އca©"+ةzބ'H݃2|&q8e.ZNYB7Q+$~J}4-QGp`^pأLXP{˞pI3e8֙YxgmMHA߀T5)wr~}Qxϳ鲰:Dԃ8lQ͂{qtodewDlGڗa{V҄gK+ӑ?9J4(x荛m`.1xs#:&ʢ;vCok`ԄɘU,J(>2bN'4"0AozފޢL'CGo&qƁ"vjJ_~/TH̓=71W%֑ Fpb8/αQH'o}uoͥj?_-PS՝*G;ك0#$WȔѐ: x濽%Y2`o(<ۆStʅ i^m4RF~jk:{.Ђ"0b+ K!Ň07͠ÈO[ć9̴&&teh/]+QEk9#-՜!r3 ζNJqʳq>3æ. Gʼn~xslsh$䯒\„6 Pփé0DH8YP, cf c|u8uuvE vvƗwCtwƂx@w{xly&a)gyVzKz@.u{5GJ{x*(&{||Иdz0c?zkz甠zȖ#zw{7{Pw&{l *{`Ƌ{UW|7J |?χ|4})ޅ}?a}\D}cAÖ$~쩥~Ҡ~}H~~cz~Xv~Pk~S` ~YU~uJ~?~4~)߅l~W~~fD˱B&_O4r.g.ǀˁ{vX?ʃ-+`" ͏Mމ~fCt. i[ ^9SpIK>!4S)ƄÆh$W]rۦ6T]+􈚍b~"ݒs[hԉ]وS;XHP>ĆH49:)F.T1Lɑġu䟨~؝e՜ /L}erQhCI]|?uS^ H=čg2݌"' Vd%Ŵ}L[qzABk|>_U|HrQJgd] RGwW$< 0քێ/%?͈ѫ=Տr4,Ԣ݇ |]Kqf߈\TQٕFq/;|(/΄$_ʔԍ fߒ yڐo eMZPSO;ω=Y15'1*Ornă&𕣧ԔU^0ߍĐy^Iymo1d΍,Z݊OƉEr̉-;ֈq1~؇&І 'EaZ'55 #Dm=}ԓxrn2dHǎY|O5jzE?t;K0|&4q'pUM˖`8㔐.YǘWxg)ncsY%-sN%D&:W,/!$*iOW]9/ޕX G L^Zo,͏Tjvr%kagҜ`VLDA#ĕ6L+oYeN m1&ki%!uWk9ۢ`JVyK09?Й64")_TȌ !&VlmĔbyY96xtjwʧ/_ϋmUtJ)>Έߜ3S(b/*`koꔓ)œ-ՒڑP+)~yt0֮iǫ^T=I/J=2e'9jw[–D}ە@t. jL`:lUKz+As7ߋ<-Š#u҆C出eσ, Uxmi}msoi$_ UBKBAU$7x-J"܈2| hgK֙/BE |Cxs$i"2g_T>J_@ߍK60,E!h W` o'Co枵IK|iPrZh}^g}-T1 J-ő#?4׊W*gw2dh, C߆ҧ-\XuiĖ{Hj{ǓpqӒ!og}]XSi蕵I,>\l3Ȋ)_ïiÇ Sކ\řCd$Hy{bq fސw\?GR[əG򌕖=M2f'뉀 B"Œ64-Xͭy@+ٔzU7[p>ۣe[55Q[FՌs;ً1%ɗ&ɔ؈D3}ѷ㝉Qʗ#6sy%oiҨme#Z;gP_ˠEU:ޜ`/%kQSJ~!򙢽񘑺ϖ,de8cxדnԭ'dHYڏQOhDߢ9.؋7$BckiƑ}h֢QsPr^F1ѕ޺WƔzxmϑ#cvYzN|Cy8Yu-#*==S %2ps%,sEt!.t-ut|vrMvi'w:_ wTx1Jx?Ƒ y+4 y)=z64znPzr i{GЦxZ-x,'axd'YxJx{,y5qyh)y^#yz SczdIYyz>{4{)X{o{ڊ{ >M|s|g)8|Ml|Ep|E'K|BzӜ7|@qS|Tg|]]||S4|I |>ҐQ}%3T}k)8} }z#}@ }NY ߝz\hpޙ9gM} ]J~R˓t~H >3 B)!?M'cg~ >~5\dɔe?\؃Aۃ6yƚ삺pa[fږ]R"tHcj]>]ǁE3:)H" Eo JA]СǠ//{?y\!ogfTv \R3΄H .>o3˃<)PvO fq 32d5UqxՉo*eЖ \>pQG)=}3O)͌݊ym gȠ 󒈙xiMН='x@ nae@[͊6QFKG8=d3~ai){L^ / Ɇaƒsyy6LwÐnAbd'2ZpPFѐ@=ڊB3#)݊6%B Ԅ!蛚(&U-A8Rw&X:mdϑgZF'P7}FN_H]VfILYOB8/ԇ)%/ƌAV [ L\Z4ϡH z'qhw_WfUԖhKΕ^B D8Kg.\% D';פ\CzΔq"+g皋^U*cKGێ5A=75Z.}t$wk[Pe֞saY{DЙz}\p5gH;T^_T}Jɑ0@6-)%#]g!N149ՄmjPjBy3~of ]59sSI┵?@咸6 ,20"A Tك6򨔐!܂ xo ֟&e;\#?iRwy~H>ؒ5'+wJ!/ُt 2σ\Iځ{ħx-ХnHϣd[QQ[GƛY= D4*Oe ˎ 8 dγ?Rw\mzިfcК+ZsPI¡Fx<942ۑT@)/Ko@d\,b TtNAЈcpv睴Tl[b4YOOEr6>;y1֑w( j_tF u*S!QLeljv2wkb[iX3ˮN_)Dxva:0ޑ')L_c >/ ; W뱳s;˯sƇ1xtFtwuoCuqf㢡u]vTwwDJw@"x\5T x+yi oyy ~z7P{HwOwswCF wwqxnxfe0x\y!SayIy?:zb4ŕz*ȓ{& ג${]{M Ύ{|U{L>zÆ{[Q{-w{8ni/{Ne~{z\A{R{I08|>闶|i4aW|*u} }!ΐ} }D'}" Ǫc\~v~n~Re#9~5\+~&RE~3Hʙ~I>]~y4<~*6~!~-5~ ~~ɮFάM@48~ħ₸vDwAmmdq[TR@܀H.g>54<܀*!A=3jI*k!$Ć2#9~e(dGZ|ݥ:tG k=EbjYuՌP6Fj=W+3X3*tK )z \\~ޗ/T| s^jnaȞ(XȜOdF ?<52)1[ j8V ڌWpoMק͚o|-sh&jaXl>NКEEh*<2͎7)S WP ڌ vg6GVl{P+|$twGek٧b/UYۗQTHD?g6Z-G$G9HޑC ȉ߇ ST{ts k!/aYٛP!G0얖5],$NTieh nz<ЪӮ%zجFvr쥗je` XO#;FMfY=4j4\7+)X#]|H9 iYVT/#cz$6rJtim`-4W3N7EY<8H3[q*Зv0"(}S;)uօk ,yj4qꯖh秕~_NTVN*MODhӥv;>_2TQ)ߛ!;+4vXp:K1~6=x;;ph^w}=Ut^)LqWC":M1U9(S`pDhq̈́fjȻms~˹+tx'tqXtiub^uZ;ujQȧv/Hv?w5ݟxB+=x!y^E^yyxz{كúw~ xwx(pֳPwi<2xawwYF/x'P\xG{y>y4z5*Gz ך[{%{! ėh{iC{||{~{wX{fq ziVzGa.znXܩzPzG<{R>\{4|7*| |E|}1}[}a.~ _xq~i'}`ͬ7}iXt}lP)}nGJ}>%}4d?~:*~!~Ƙo~֖~i~~ރOn}CNwqppIih{`B|XOCFޣ{=wp4 *!uc9$OJ}̆vֳ{Soϰ݅g߮_TwWO0oF*=*z3ܝ*!(͖Qr,o|wgv?o.|gFT_VEN3 *! Nd}4F-{UusnհfT^VSMRETc$ D2;Z2)" әM'XܒK XP{Ln.Câz6;720q)J) #؊ ő7;!3ǣ%5-iC^%ӓXv >#aˀ{w,vkq9i_a ۲WzN!Fm={R5 ,s$5Oqәx )ڇM}sEwOsp|sitIbku[tStKuCv:wg0x!&ClxeyRyx /zk'{uN|{-wvYwp+(wi\:wibw>ZvRƮwqJxB%x9|myb/Ǣz%8z${ {* j| |}{¿^{v[{\pge{i{zb UMIE~p?{yju}o׹ mi7 am;Yy>8QOI{Ao7e.ߢ%ϝ̀Ꜻ HȀz׽\RuRo6h`مH`ȲۄX>Q I (G@M7.%ă&# LNoJz.t@nI`g`0XPLPuHy@+7ux%.%>Å|1 RGp탩y>tMnKgc"_ʲ7DW¯MkOˬpGƩ?w96ߤ7.i%CZ՜ $6;0xsngڏ_hW) O 8G>ȋ 62R-$ɟ8-~w ֚w exCіtsW_mƷvWfݴA^Ӓ!VNY$F(=ΦՎ 5q>,$aih:x FX~xwsPmi1f^yʕUʮ씝M+kEGZqRFk"dbs\/SGKXWBʩ:/~2P0*0b"N;DP* D,씆utHpEsj%cô%[oѧRj$J/OA9اnT1mٝ)B@!Po;̐u sGo4t»5oӹ4jI"c?ZQW{IAʩTAY8ä05(L# I'*pF  0/ktt o'1i."b"Y$PHf]@GJ8$!/'_'U0+6u&rotr2h&rb sS[rOsTrMUsEVt=9v4w +Ww!#xk{y1Uy]jz>|K}trvn&vhmvaSvZԹuSbu@L+vYDqw?)f} '~ wnJsWd6⫞/' q<֡[ B…̖y6΀p:k ~e̛e^ AV0N #F >v 6!9.Kڔ &A;i؎6cJo`Bj`dּΟ]UoM+KE=/=E5sϘ-%J$(E^[*LNnR;i+Zdp\-TշLC(DfZ;ɀ3)y|w ސyweyxlyy5z3y8zgzz{Gdz{׆z|/xz|=mX{j|_{d|Q{F|D{I}7{>}+{-}!{D~w0~T݅w~qx ~dxZ~x~sx=Iy>dybyxylz_yz RFz!Elz79z< -Lz$n!yuDܦv<~vwxtVwxwkxZ_(yCRYy\Evyl;8xy_+y"axss%s<ϞtD ptUIuIv/K5vĊXVwLswwxkx_yRyErEya9 y`X,KyM wy"Mq斫r}ζsQsʒ<[tuNuHvw w7wgjxx^xvRyFTyT9YyZ,!y0xp˜sqkrr֗6s}_t}՝u0AuԐ„v^Avvɍj@wdE^wQxlEx8Yx҇+xx+$ou_p͓q5€r'brsty8)u(eOuvv'jGvˎ^wh[Qw݋E=x/{8xO>+fx!4wL5Ko BoMprLqO %r6sbTsݚ>tu(vujvO]vQwo!Dw7wɋ*Ywyvwln3Hnoɨ2 pqdrs]34t؃Ptmv0u;iuޔ]^v|{Pv鐄Cw+6aw%(\v\u `mkָnG̫o4p"3qrhr4stNutܚ1iSuv\u,Nv)AvZ4avQ&&uˍtCl'm8n5o pq#rqDs:oBs㠃urtxzh6tZukMu@}uw3.uߑ%uMs/߅kln1o9p:|q=iMr]urܧQs|!tt g_tYtL u)x>uVD1uHp#tusJj7Nl3PmSn$o״wp屪qvr4s6tsĤOfmtFXdt$Jt⛐=^tx/tK" s smޞik'l-mwVTrw͖fGxHZxMx@ys3x&xiOw Yrnrbs.ϼ_s#dtu^)u3vF~vr$woFewӖXx(Kqx^>xj1x>$zwxvQmضqhr Fƞr|s^ǯt)ytduv(~0vRqnwvdSwRWwUJw=x0wh#hwQIv:pɹwqo'rcrnisvtu2uǥ}v.pvcwVKw>8I)wc<(w/wYA!rvrWu6׏o&pλgŘqreǮsNlt.t٬vuy|u|ov\1bvà/UwlGw+ :w)#-uvԖu͓ue,֌oxFoxpɼźcqǹhrͶáshtu2~|3u/oKv"avT0v۠Fw b9twh,vucuwu+լn0MoJÐhoq׭r;̡BsEt* tU{uqnua`vd0S9vcEv)8vo+vpuFuIl~̯n.òo-ĞFp5qrȻsŸFstzu9muҮ `"vMRFvKDv7v)vGu@v`ڢu}яv6wyswб=x!ygyzW{r~{f7~|7Y~|~N~m|B~+}75}})\}R~'|}~~{/\{uH7||z|Τ|T~}Yv~}~~}r~m~3fX~I~mZ~3~O9~~Cn}7Y}K+}|^}_}Ƌ}ƻ};~!~~~~ }퀣q}πe}Z*}N}B}z7}:*|ր|-C|9||I>|Ӆ䯌}[s},-}1~}*~=}"q}`e}*Y}6N?}-BX} E6U|Ђ*/|jM{v{w&W{y-{j3{NJ||Ԣ|? g|WM8|d}|jq$|p=e0|Yi|M~|A}|5l|q)<| AJ{cuzYkzkzh-zɏS{4{k"{{}t{Ċp{؉*d|HX|CoL|T@|D4|>({{J~yK`̋yuygkyzGBzDYzZ{ }!{5tp2{T&d{Xf{ЉL|{@{4t{Æ("{o8zxs5x,¶xҚUCy'yyGz-za$|zpzdzX"{H=LP{n@p{t4J{Z'{zTwk˿w]nx8 xt_cx؛KRyD]hy`y֕|1zoz? czVWzL{G?{3\z&mzRryFӏv*w4X wywԡx@xwy`y_P{y>o/yݕ$c?z)(WNzyHKz>z1z5#yYx zҿv\ʕv0vʷewMRwãKxHHx??x{yGny>byUyHz<]y,/y"xwuβv~?~]3}'}ed'|Ib鋧ʾod`HKIݒ 3N~ՆzU~m~|_b~uVv~ovJ~I?~30}-',}x|Hg~3~~p~f~n#~z~`~,y~ m;}:am~U~J,}>]}…t2}}p&|Q|/Ά}8}`}}}T}ڏ }ÎP}y8}Wl}t,`}-U{}9I}[=}n2 })&!| n{d@|R|||ЗT|7}}u|x|yl|׎`|UE}vI}W> |O2*|U%|.w{2v{ŝ{Ǽ||"R|P雞|t |yAH|ux_|hl*|e`n|nU|I|=|V1y|0${zit{W{Z={kK{q{9 {j{ {w{k|`|-:Tp|KmH|=x0=xdyy[yZspyfz-YzbL~z?z3*z&fz\ ym dyXNtKGtpCuvlɆw'Pwꅥxy'w.yknz_zTR{(H{<7{01~|E$|J6}]˓z Äzz6z̆Oz{73{{΃:|&wKY|ok,|_=}T8}HHցM}=l}1~ &8R~Df~H~{v؆DS5>V_AV,.5/7wX9k:_kTSIgHx=)R1&~E}=L2Gj4Ӄ3e~Ύ f@vۂjc^Sǁ}H5fW<,1HW%~}Q`@Hny>[2&ځvp5j1؄}^SRWGTùiXO]/R G;Ņu;f0<~O$~QE}~oǀ6ꓽ灧vE|Zg>䍎{ou:&Jhۊ/]k‰IR!uF{;f(/~$~h}E&Gf ߗp&?􀇒=B@tjh;]S!RF~܉;~0~#$} |lƭv9UD}0Jˀh䖾% \Wt- hY~ˏ\~Q~.F~;2~(/R}#|~{Mr5m ^hݕMʊ!~s~g~p\~^LQ?~NE~9}-}&? |2Ozt7j;9  Ԭ~~0B~͞~~~s~H]gz~%[}O}גC}P7}K+|̍N~|zĄ~ޯ]K~>~|~h8o~Z~Q T~:}~ Hr\}f}=Z}N}|B}Q6|/*|C{fzъ;~<~ '}築}}٪ F}קg}Ϥ}m}q}}Te}YY}NMi};A/|5:|)V|J{j")z֊7}}}l>W}fk}g}p^}r|}jp}0e1}X}=L=}@|4|'| ]4z>zU}mcT}&|ԩ||ܓE}؇}!|?}"pQ|dz|㣏W|頱K@|%>|ќ2|&^|{J oz o}u|,|@S|?L| |+|ڰ{|쭻o|Ӫc|8W|̤ZJ?|ס=|ǟ1|%4|;F{VY 7{9}Z} ā||Ic|[; |||z|n|kb|V|@I>|٥<|ۣ0|7$/|Q^+{z 5{x2sɽM*tgŌ7uNxuʠԊvw;wx~s^xgyz\z+PvzE[{d:{.N|"#s|\f|-y=dymЋyǪWCzЉqzn戩zĉ̇{~{{r!{g;|[|mP]|E)}9ςk}`.v}"耾}2}x?~}~P7~P9~W}~F%~>!~M~ .~arc~rf؄~[~PEW~E~9ʁ.; #[cK3Ίc#łө-8 ÈH}yXre)fw[*XP ڀDD9.Nn" QYXk܇͇i`Nѝ%͆1䅃 |Äq݄"erZdO!Dc95x.΂4" y"~x n3F.kHވ|Q+q%/eUsZ%O$AlD ΄8Fh-"X#:%d ǧId΄RX{ʃXpNdIY0NCȁ 8 i-".ͅ,~ބņȸh8EFFM8OP{Lp!m`dYNT C8|C-o!59~APZQ鄟kdRڛăR쓱zkodA|Y/:NXC[8[;,s$ ~*}a\ãkmWŝlqc^8h)sznc XǀؐwMˀB(7A*+p~}'[j%7F柿&myWnf?Ec5˕)X5l9LP,b@̏5P*)~|}!c}C~խѶk 5Úg@'Մ uxc#mbtTVրK6?F4'(N~|R}|ΉJIְ+w#9㎥B^xc mda U/J>oA2~Փ\&~Tq}||˸(]խǰfeG wɀå lnO%`5TH= >!1Q~Җ`%t~1-}* d|xpoyܣsP uRȬw&k€!`1TG\;"0~ڙ/$~]U}p |͈!I$nL蹘HsӀ[vz\:k  _GS oFZ:'.~ݜ6"~up,} }0NraTqČ0v̀^uɀ9`jO^]{RcEl9K~-!~}$ }sl sԐtuMyunv!QwIy9wnxrc%xWڇyLz6Afz68{-+{{H|6xExُ̬Ty[yn^ybzFJzmyY:zn#'{b{nWo{La|MAT2|6LJ|+6^}ʂf}H!N}}e}m;;}lT}vq}lU}m}y!x}nn}bnJ}WNc~LM~KAQ~p6L~+-~Â~-~ܺa0Ǣ_Bۀ؃#Հxƀm߇ŀfb-PVڅbK…3u@Ԅuq5ڃb*ԀLy4XՀ*ȍ釚>ǫ H+Ӌą pwm'Pa;VK삥@;s5ʃ}7*˂ׁҁ֌~u8\q&YbOˈ}w2l`Sa ͅV-BK\@5΃R*炘ʁ̃X݂֌ vdMNMpb5͈ƌ)73vSk*f`d^|UԇJZ@@Oņ5 *l|҄0F6ѱDCsMP!HQ򀨇#vSkBk`BՋ=UlMPJӃˉ@S:5**xzp%։ܚKJ񈺗$ṅJހ%dum͐j_i&UJf@ۊ5K9*Iա)hO@ɝ[6LLʗtЅenj _B "TJ! ]?Gz4@ԋ(́4XډQԤ&OL)Gԇˆot8ipy&^ʃ9T_(yHق=c6;28&߁:wIHЫyM\ۇЧ$LJCڔKI S~rrsޛhń1^lmSKՕXG߂s~<1"db%ώɀb7TAJڧ]Cb$ũÆ:\}ޅ"isht]='RxFBX;+/A$,6 ~·ٷ0UeرZ'Di}Crqd0gqb\}P삍E//9̗._N"րc ~ևuj5\Н]0a|\q:wfƃu[עQOpD78C- b!`>N  Wz5Ɔ{߄qfZǂON_B$N7i̞+k $ЀmW UI ƱVæޅ"RY`˷{.aIpb1eFuYȂ{M[A=6V *Ё 4ŒA, Hr stt4tÔ~Gum_vᏡvuMwXj w^@xWT'xI7y>_z3z(zR{&j{5"wx xf8ux5y Tya~yth]z$izw^zSӉP{$I <{>E.{3~-|7(3|w>5||дJ|U||Ǒm|M|4|~t|t2|iK}^R}#S}XH·}>}3a}(}M~ ~"IܒKj>}Ms֋i/]WS>MHc=s3N(z[v4[Ndm}7y!sEh|]z!RчH7#=D39gg(6 ɲNj̊ڏЉ]ύ /|憒rSgщj\∇RGhG†=W2O[(sѐ ȣ.ښk;e/x{_qCJg7x\ 1QnG[= 2+02>'@&XzтKxrhrrܠsy—t1_t愪uzv9p9fvew[ZƍwP+xxrE$y;y0y&z?3za`zcw2ٙMwl~ds~Y%~O3~D:01%腦~g&~Rg|Bp񑄂xRn,c6Y)ǁkNKDm6:P03%1M3ثptܝLI*Փ4JJֆ4w]bmk c6XsN7hDlu: t#0%e u-$|Žq_r5k)vډ lōLbEWM9C99ȈRE/‡l%~~3хA(o#DfēՑˊMŎsuv43nl7pbnWlMTCa9]/%%|"P -ON]0z[;ޑ(uk}aRhW,0L=8Cdc95/$ӆ/IdM㙴%ܘ)w'iu4rk`V֏LB8V7-Q##| [h8Ps3poX~'t*j_ٕz`8VLAf֏/6+ÆN G qqϢҐ-j ~ڝ"sٌɛ(iD_iIUAcCKfv@M5n*ن:= n zFi>3Pӎ}`s2chD^dTA/IJ>臉4..)i{ZG` ͂ʆ쑎Ѡ寉+2A.Rr|])rkh8~j]ŊLSQFH?=2ˆ{(-0 oɄuʅ/>p$Rv<Oډ_/ӠqɠOr@jrܑsH tQ~9uuEhukbv^a1vVwaLOwBx7Ì.y -yn#ByyjyҦpvvZZvOw[Jw}Jx%t]xjx`zyQU,yKz,A[5z7#z- {7"܉_{RCE{= 2{R>{ B{,P{ { 6{'}}{8s{bj9.{`(s{U|KI1|HA*|6y|,Ҋ9|"|)|'|'u0]٘~dž~| ~^seT~Iiϒ~=_~?U~KJ鍽~k@݌y~6.~,~}"Z~F⇲}/}ץB{_:9т0|STrÓi<_5iTˀJu@C6,ǀK" 42fzښˇY"{Arh}pL^T2u_J2@W6߂,#"o ))gP c!!?ꊂzq}zgi^ SI~?܅6H,V"Cۇ Ցۘsڗ`IuZWzWOp݋agUnx]vS?IHv?l[5V, :!._: Dž@H|5}j*z ׏pwTf\{R;YHߌs?95 +#!eU· Z$xՕJvy`o:f\@ER;3Hiʍ>Ќ(4ˋ)*0 Fʼn3%ކ ꟦ŗ `c暿󓎙y!o=eeTO[ Q.G؋=p3T(鈦Gӈ` o"ia75ה~Fe3ixg؛n}d* Z2P֌PFɋ^<@}>1'^Չ u 5 Dʒw mՐicҏC YٙOkEzV:l0z&IՎԋZ떈nQ,ȨvzmPRc4.XӍ͝N_[DOY29|/0$ƓppӊلğWjYI tv4dMl7Ib$8W٢Mh]C0l8e(-֘# 6g3 ŖOƘƕ`*fvdŒ`uv[2kdKaHE@VLBc72Ҟ,"eX*͈ؐ jYS@DT?߈֓H>RtZ:jX`U@V+KyA16E+[^!@dg/ wdFq 㣮qr5A'r󁻞sytořuBfzu\vRpwH7w>x+3>x(@yMы:y߉y kz+uԘauvv<v&w!x ,wn.xe6x[ʕ3xQ,yGGicy=Vz02z'2{{7{" {+z, z+dz:#zY؜Hzzwzn`ze {[F{@Q{F{<`| 2E~|'͋|r|| }2~~堕~Ca~E}􀕛}w(}m}d}Zؔ&}P:}F}<͏~25~K'~~eo$~L~ V~[+,.✙cvMm\od Zl\P72FOT.CbEkׄ;Ҏ1;(SJ  ,Ղ!ː;󝌏66B7AƍA~N/6tЗgCkobQ XǒjNԐ̇E jK;g1vS'艰uL ߅2ЛLКD*}ژtRk.aX"NIqD;׉17@'ėj;؈yf $h4ԎZMmhו}^CsӖvjrӑ(aIWwM/vD׌z:j0$&ljȇ2ꚮ'|ݗ既s?;:iʔ`SLVÑMmCu>9en/$Ȋn&}R䜴 r=l!|MrBi{_Uu@L;ݓBe 8E\.$NJ Unۋ;&Rx򓙛+͘[{OnqϞhEa^TґqK ЖA6_-EБ#Ej /Pim囻Q̫KXƩ0+t7zq.gdX]SIܚ?Ў5{ ,Д"[Yv~x܄ʲPVB%zFp4el*݋8!6~ 󉛏t k׃l&ոa #.yoser[J_Q֦G%u=砟3<ߝ)Gk ǕډՎ D\B#ȖUVɚpNՂmGxndڔZjPג :FTÎ4؏U+0@!ĊrJZQڌѠПDzx~ɝ ulDc[|Z( Pʕ2sGQW=Ցm4 *_@ ڌ ڃh,kHM~*u@ޟ kϚ+ibvYO4)F\B<v3+ג)ƎI7 n ;<fariʧy}BtjaX:N[FDz&;DƘ1ڏ(Dh eqE˞}us⛡wj#'`WEpwG3w)N EWn;ф25ă) U[ n2sʌ:^ UyqBh~_۝W.߈nN7Dڗ;Svp1ӓe(K6# EÃxe̒=(1y24pѡ*g5_JEVjMeyDAA:ϕ81a1(L33;я gcIu:7AxȣapS^geG^@ƯPLљ1nCS:M0'eQېW RƂozcˤ!xVoʡfßU] U&L BB9ϔK0̍'`Qގ+ ̋  EHw؛oᙝfژ6]ꖶT*XK'B ߒH92Ӑ0(c&}WᏯ^K 9!_`~OQwnk e3t\9S,>J ~@ꕞ8ѓ/~&g_v {PVz~5vWZrmdb[T R0;qI2?Ǘp6V.>%.Xԏ~όt LRΦݯ%rr1}eCu=NlacǥZjQ2fGf >=5•"-#j5J KBˁZڂ~|߰wu5]l;\b۪Y%PGF={4dx+ٓX3"˗`X6 )>{tX9kuaXL-Oq¬:Fl<3X*!<c-l:ۊAg T82no|=puhJqmЪresn]=t֚.5,|#bZ3 ׎C.*ٕ ~ݬ+@x֪gbqVFim"5`%XA OF+>(Ћ5.Y,.]#Ug\q`J ͍ ܉ekP~ԘUxz(\q1 h`W~Nϟw^F(&+=p4+#">.N g'~&|w䛭pJh3Ę_NVn+MlEF$~<4!n+fC" ǒ=E T$$q𬡢}v3wPZoӧgwB^UԡjMxDS%;ǕI3k*q"'r-bB ݁`(l |vy,o {f]|TrLL-Ca>:2 ) ! U>4ōf(I{ u©k:nO}Weै\ȣT KIIBnn91Ț(ÖQ ]x!++΍A&ͬXzdti{me[򣪩S+ JeۦhA}8_/'.6iϏ bRl~̬ѹGy,t9ql˧d8["ίrRO魉I@W7.j&eE3G 撋ك^nzqtŴpWmȲrmfy,r_&@sW/\sNtFu=vD3w)Hw{x;јxY xyG{GE%ueyݵus߳um48v8eŮvT^)v VDvNMw_Euw<Ҡxs2y&(xy>zz# ͖zD{B|}~Py2y%xt2xmpyex]ΫQxŲyOMyEK!z<_Sz2{(/{4c{@{ .<|` |}}~m|yV|tl|;m{eM{]^{U`8{M^|D|G;|2NO}(}}f}} v}R~ ~g~쵁7yslѯ6\e\RpT$Lԥ+~D=p~;M~2%@(ėD%}}k~H4xr ,l)dqU8\pTsL`LJɁCߢ2:1(́s{\jь$}|%x5ˆ\r;kwb cիs[⩏SަSKyCLM:zo1(Ř\xdŌ(|ݴ,wŲ@q4Lkco[T!S8LK.B9U1("Ykx-)1`#k_|NwYҏq׏ jb<$ZӌBR[hJ=Al9S0'1dBG iqc B|Ow~q[je^bsYQ:I^A e8֋/oL'NĘZ^F +rxgҀE{vCqgj =akYADP.$H@'{7Ԟ/uc'Ό9ߖI - #s{W$vLp2ira@ʘgX} P+G?Je7.L&x͏Gʗo►k Wݐ-MzŲUuoͯh`kWh/OMFޣ\>|v6B.Vh&+ڎ7{ , rz +tݰoZgҢ_VʨgyNw&F h=5)- K%5sLҐ򖈎 O.Q)ހxAs气n+ީ`fӧ^ȪU樀"MEyEF%<ҡ 46Np,ʙc$"7B)8؍p j&\%wXus m]鮻f.]ë%UvLvDhY;3F?+!#9 auwjr+̶lev],TDׯ-KϦCb;\2S*"`"!W~E bH߂mwprq~m%ner_uWRVu#O^vG誅v?ԧw7Ox5-x#џysz4z& u({&C|0a}\wxr$`xlxpf)Zx/^xVwOG xGCy?~Ey6MzC-bz#;{u{O| |i}j~Hv|r&|jlշ4{fX{^ zVzNݬ{m~5ɣ~,ʡ-#//$ ϙAtvpwAk1=dȃ,]M)UM˂0F">o50g,j#ʁl 4i{ɀu7Yp*+jq)cm\ՆU@MiEڄ=q34,K# E 7%tɌoj&c \K|ZT般L;DШ]<ʥ4v@;+٠φ#7~Fdžy; =QtM:oWIYi%{cF[ް5SڭKDW;҉3ã+K"ƞf\Èq "+ts oi*c9[V6S"IK+]C;݌2$*w"dT=Ê+㈿ (*slni`bnZӯR]uJVB::,28=*9_"Ɉ y ⒫.su6nA,hഝ&b#TZQqIAd9Vy1oJ?)! BX ӗĆD3ru6mmha10qlضSgNo`S1X]ԠO{)G?ਾ7֦*/'ߕ l:"]!? ݘbIGpplTfoy_CWNG3? 7_.ϣ֜ &9a!ϏH NDݒpk8[4e^^ҲeV-NʩFp>K!268-6& hzq7׊{o0ρyvoQ jjqdڴ^UCMKEC=tpc5Z,K% w*q+Aq(jjgpdp^]nW۸oQNpVJTqBx4sg:Ȭt2u).v,ww GxBy{~ol4sj0tdytI^'DtWJ^rvPT9sItAv9v1w(J x y|Cy nz5U{|~oCDx.jVxdCw^vWUuOvHwAQxN9y&1Ay(zt{qX{ ?|c}2~7q.oM|jn{e5|{T^z*W`.y%OfyHCgz1@yz9?y{R0ب\{'|}aU} ~d~*Uniidd5]޹_~V}O7}Gհ}@u}8#~ 0,~]'x~^*J -mQ4h |cb]V+@NdzeGc|?𭦁8#݁s/|i'xW=[qyk0km!9h/ɇUbR\bUw߅NC 7Fذ>?Wqn7 /[&sIfLja0&lg½Wbj,\TUMۈXF>O?6ժ.է;&EQ$ q86>7$l ge펻b3[ƸT[JL겥E[=G>5.$%04ňh Uo[ksg}a[[ڐT$/L9Dَ.<֭Is5-Z %j1[HDڊ ^lPĀ%kIn8fżeEa7R[TYSjKkCߑ;e4(Ȑ;,ӏb$<Ō% 5791/'~㐛5 /DUwkt؞wt/wu%x>vRxwxx4y7yJyz yzvz{jz}{n]Rz{Pz{D&z|c8~{|+{}|z}/t{u{n[v"{Tv|Bw|Ywo}w}x{x2}܃[x~3vbx~wjy7~^y~Qy~E%y8yg,byy3s8t% dtʁ\uguvwwۂwހuwhxQ \`xOxԀCLx6zx)xx qGrvs{Pt7tjuQv+Svu=tv*2h\v݈8\zwRPx#DYxy7x&*xdw8n0#noϖpGq drNs{<)tB쁲tt}uCgv7[vOwnC4wˇ6w*'wwc=Zm-ҲmgȁnToؙ pۗqܕߙr=s9tCtRtڏEgu[vP'Ov܊CFw>6wup* wZj.vylDkm ;n}op8q(8rI4rVsbstOfgqu~[auӎOXvj Bvʋ6vM(vuڗkdslRCmOCn]JvoxƥWpqKris0s\sݕgtXZuQANcu֏mAv-4v >&unsٶj(kinlm̧nOp֘qVqr`rsxft,HYxtLTu ?YuG2Ju5P%ts=iRkl5]mYưnho5pzq~r^rts eesTXbtKst~>jtҒ}1Lt#t&r΋i/jtxkǴln!oKpp=q/~Cqqryds-W sIsqhmiykοnFm{En p{KqnqarDS'rEs8s%*rҜqfKrk۫{zseu{itG{fuB {}vEw{w6d{x*{x|y(|znsh|zg|i{I[|{O||#C||7|s}+*|9}{~yzEўyrzPyzȽMy{ezL{¥z|z|Az}~{}hr{+}f{Y}[{~4OZ{~}Cu{~7c{2+{IzٽwОxxjּ~xy2yUyz-~ze*rNzDfFzFZnz;N{FB{'^6{{*Izڀz;v1vW=w w԰ xg xy=y`X~yqyۂfz)Z1zqTNHzBGz6>z*z{y쁖AtuXCuӊ?vk-wӣZw?xxx~nxEqy;eyYzN zLAzm5zmF)z7yXs!t'KtluOXJvNvNwA[ww~*x)qxeayYZyMby׆5AQz5)z (yۄsyMer}4z7}Pz}c{}b{I}\|"{}K|o}<|c}>}GX5}=}L}2}A4}~>5|~)|~{E;{~{~8{~s{~6|8~Ӡq|k~הQ|~|{||=oi|`c|X|L|A|5l|)z|-{?bz0+zZzzƃ{5{r{{|{{ʂBo0{ cz|W|;LX|K@|Cw4|]({āG{@Ѭx<=y xyRyQzz(zÆLz{'{ nn{1c{ztW_{K{Ճ?{уD3{'{X'zwÏcw#xz2z؆S&zyхKu*vvnڳvcwǝxNzx{䅼xȐyy'my]ayŒ^Uz'&J_z_>zr2z]"&OzZyΔt렕ƘuGuv> Lvՙ"wrkwؕą(x9y'xrlx䐾a/yR%UyJyO>z1y%8yhxMt0tXtHuv=xvޛ]wUwxxlfx{`xTyC/Iytl~p}2~}'A}~Kz|~̮}ĭ}}òv}(e~]~ $/~,V~~WxZ~~{l;~~`~~U4~|~I~U>~;3}\'h}H|||~b(~Uƻ$~LK~Q{f~g.~y䏙~^~-x;~ ak}=`8},T}Ie}Ѐ=}2l}L&|΀{}N}/(}$W}Bk}bg&}؎}]M}ew}Rvkd}I_}aT}yYH}l=p}A1|n&|}/n{|M| X9|l`|9|xu|֎!||^w |j|_.|CS} H4} <|愒0|%3|1{tOMzUz{d{O8{ {䍼|ՂI{v|j?| ^|YS!|G|H<|0|K${>A{ yNz!øZzJ@zգzK{9ݍ*{Q{V@v{tj{^{{uS {ZG| T< {f0}{${LzDGy-yZոy?yڙeZz1z䌖zL zȒu{zEi{]{Q/R{G[{;{q/{DV#tzWcyzrxxx矿y8עyԗPyz"vzMQtzhz]zR{SF`{":{~.#z' yxƅwnNxt?xRdxJmy yhCyytzhkzH\z{P}zDGz8Zzm,Uz4yTmxvwNiwTwɩ)x x|&x'y;+y~smyNgyژ[wyOMz"Ctz77z#+oyҏxzxJYtv/vVw;Tw_x敱xxZ*xţ~y^ry`fy3ZyMy`Ay^5y)yIJxFIw*vvi"wvwwE2xx`~x)r y zf4yDYylMy}@yy4yW(]xєpwrw-u˼vvB&&vw9w wx}`xbqdxƦ"etyXy9VLyZ?y]3Yy5&x*w wJuKcuuƻv9vĵ”wGňjw|x#pxdxӦWyJy>>yH2;y)%xgwq wrtft4u5uϞvnѓUwÇw|woxicxoVxIy,=~y@1,y-9$xw }x3qwrx0s^nt;uvvǀ݃wux0i >x]5yQvXz?Èz:8;{?.{"~|@\}|`w^.wx7Vx y)yz,ztx{h{e]e?{R&|DG|;ـ|0{}G$~}[}}Ŵ| |t|*}r}'s}BJ6}n}tzQ}h}]=~%Qd~WF ~;~0<"~$~~~0}Ȃd@f^Ӂׁيρ_t4hC1s\lQրlFte;4-W/~H$L~9})7+bڴ'GƟ8ԄK~0sg \nwQLYFR:~ł/o~V#}8|ہ}J~ܻM-F6 oJV·~I|Rr:g[ dPEA~؄k9~.~'|#}|xa;F.+ݞ<K}~֊rh~fn~[~O~MD~w9}~7.}߅G"}Zy|,~k~c7O~]~kmM~|S~N~oR}2~6q~fT}鋠Z}O}D}݈9}.:}B"|L{Ju}%}N}v}}і/}甓}Г |}qS}e}sZ}:O{}Dy}|95}8-|Lj!|z;||%|8}ic}3o&}M}D{}0p}be'}Z}&N}+}C}8-|ċ,0|Bxn{I-4zU|Z|a߱|hا|֜||ɜd|К{B|Ƙp|d|Yn|Mb|A|D5|=*<{͌|,zzL2{ƫ[{˩ΰ{է {mh||NЅ|]z|dboE|S$c|>W|5L6|C@|,5{G)*{{z{z{&{1Ѱ {D{u{q!{u{ץF{좚z{)nv{c {W {K{k?{y3b{'{!:ez1[=yCz zaz±,z4{0{kE{y_{m{Lb9{V{I{={2${F&`zyz`zetzdzx{'lG{D`{STD{m G{y;{h/{0#zyk dyz9ÈyyʾKy߻~Lz"zmzwMzk{!_{5SL{ZF{r:{j.{82"zƗ>y厣 Xzq@r]&rڧ;~stmu]ZIv&|vpwdx>Y yN?pyBz@7+z,Oo{7 ΀{co{$vzvhwtH?wxnxJyp{yp-z[dzY{DNf{CWh|)8F|-"|!V}"DU}S^{Ϸ'{Ѯއ{|i|=|^z|{%|o|dsi}0YW}~NEn}C:}8/N~-~E!~f6~~il퀥Np|&JׅFׅzՄo^d Y JNC n8,D! ~'=@΅e ZHlHzHo c:]X(M{B17,m ]!!l)~z A*Ůz΄o,c0{+yoSnfc'XzM ;>B7rj, I~m]\),܏m'eSp܃d9jxmہb3W 5L↟A61Y+ rRi~E߃2 ʂ傻#sa:Kӎ$xOa mbbKW>lL[=A 6E+" I~y}jƺOXY1Gtˍ0F~/wҐrlŀoaȀ(VҀiLۋUAQE6d7?+~Di}f|ۅxЁ f߁K뗉#Iۀw]lUa!ǐVW*Kep@f%t5S~6)~16}Y[|+$KJQաMpbJwV,~3:~U0'}ً}6+|j_MijM+B(0jѝauCjS_TI~̔H~=~b-27~&}f|Ë|-淭 խr9֕TmuB&j~^~,S,~G~Y+} },|+|W:pTq\r\ns0܌stЁከuvꉼvVkሼw`ɇwUxjJy#?y4NzD)z}{E{Nvvj vΟ?wG׋uwx=xvcyHkny`xzFUwzJk/{??r{4| )Ƃ|Z{ ||ٶԍ[zόz{"({KCz{k{{v,|k[|M`|U-V|JI}8?}s43})t}}+~0+"ƯAxvx*V%=~*~uŇ?~k `_~T1I@[? g4Xe)X5ilo#lrϊjbЃG0Qhbu ,jeā_ET[oI{>Z^3邻9) DISܮu6aQdR sg~tWji4^\SބI6>j3))2{SK ׭Cॐ윷 1\Ŋ8~ ps\i] SFHǃN >?څ3S(\Ib5'ڇǒ̥BORj]{!}ks#h]փuSHˆR>)P3͆(8@KfkeĤ݆'AБؓFUc|ːr5Rg]2RH8S=3E^(T .~1Tdn ˛4lDuƄҕ|YINq؃’gJ4H\R1EfG*=2P'`[~Å(0`ءX}+ě)Z{q)d\fᔛ\UQǁ/F};=703Ō%3wlZ~ M}хLlxgZND8z(pt)eׂ[aP E=B:V됱/*]#߀0Ly餷o =d[YN=%}BЀ֘J7,y!3| u~s }f΄F֨ݶKh1~ hx󂭩nT]pcXdM2 &AÛ6Zo+f~[ ~Ѓ~Tт%čЂ ڂox4zm5b́ҧWEL2 @}5&y@)#rg8ey~パ;^MrwqRl΂a¬,V1K4r?tˣ4 (Up>=fDpfq3q>nrӐHs| tJ|u r ugUvv\wQwGBx<y1"y'+Az'ZzR,z^:u|Euġ֑Dv(JLvӏDw3w{ҍxq}xfy\dnyQ؈TzG)Wz~zԋ~pk~*fE~A[~IQ5~[Fm~<~1~& ~C~1'~只 +~Ɨۍ^f# Ёz΁op+Ge䈯[%PڀF,&;Ʌd1sh&I-.EvGŸǍG+ӅgPyr)ox$ue&(Zt7P)E;W=1\&ׂ'hXJz:eԊ,ނˊ~xӉ\nшdqY؆=OF;E N:0Ątt&xń W_o%ϋʏ%&~zɂI͌xHn9c'YYPN.DӅ):0Z&8=}u%PBqj$x4ޑ́Ɖ,wňU\m,cdXNIDÉ:},%04I%͇qՀτ30MzT8dw!ܒlbO)XYN3|Dbb9̋D/-#4$/4uއ ـ_ >݉{ҋ ܚ 5avi{l<ÕaoW4V0L>~AnK7 .Ɂ#o _fԒ՟ڋ8[-}J;sUi놾_dž%UxqK]Az17l+-چ#ރG}VՐUSFl|͍s/midZ_iAU!2Ki`A&7fA-0#mf턐oՃg+ڏՑ.g|G;r(h^щҌT͊J@ۇM.7t-ʇ"8뤡k-ǘ8Kޅn`{}qxh~a^'xTyJ(@E6?=,v!|9 USǤО՞:CК2s{q<YgU/]j2RSl8I_]?4z)bo_΃ G.yAp0m YzepљFf\RH*>x3vR)F7}q E6̎bˎ2x\2zyuoȊxeƛ[әrQɗ?G-4n)RGdYrOD{:H/oC$څ;%YVK{cn~UߌCbɋywwmSBcBXN!Cφ8a/.7؛u#l΅,ğ2ō"p1c׷R&v۲l;bnmXMB7Æ-["o0 (;@opp%pߍIqr~{UsUr(th|t^~^uTPv*J7 v@w~6mx,@x".x3x ͆,y;tX?tqJtތuWuzvnqKvgTw]ސwSǏ xIy?qPy5iz +wz^!jzz{ ;z¡cx%x2xی]y{(y;z-yopݓ8yghz]zeS3tzI8{#?0{55{+Q{!b|{ ly|A}||ӌ|`|y|pa|g|]>e|R}HԌ}@>}5c}+'I}!'G}uY}& 9B}/(v]{Ӌzۀr8y\oȑfaa\Rj~HlW>N4Š3~*!N!& ҇@~ W:~qD왠B`ǖ4˕cɓxbho"?eւ\qvQ̍!G݌>04 u*Չ! Ň4F K7|xЖ#tW(Lwn}ceZ[j[Q7GT;=Ê׃4C݃* & +3jˎʔ؍ ɌENwAtlmd{ψZ͍+PʌBRFB=i_$3։j*u El& Ʉ? #&l>SI6G@vmU cЎ_Z*P: F+<3g)+!Ohp$ ax\@ݒQÑvtl3cNYyƎ OF<\2׊(އ->] Ȅ"hҗ1^;aBx8/ukޔbRXPOXEeM;+}Y16'Ջ78} ӄsb0Ȗ}0ʑМ~͛>tΏ™k6a[W،^N-&DSc:O0&߇a քœ&`kHf}}t jbn`nLVӌGbM QBk82.W$}抭5?Qa} =s8\iRc__iUҌ>DKA7H<6-3r#5EىcMODnم૫|]Yrj;+hH^ƍ]TӌEmJҋ@6R+܈j!ۇ_ j*Қ z= AO@Ř轻D{Ozޏγpp׏fH] tjRrH;>ES3)d#@  ?#`nܔo}ߟp5wq ~,qurl8scct{Z}u.PuF0v|<36w1cw&xW^x|xӆ1y8s]seUt&ۜt}ouOtΙ_ukٗvbwY:wOhxEw`x;y40y&zz;lhzf։*zl{]Ew֓מwmMx xY}]6xt`xk_y1bDyXKyN~zEDz;~{0{&>{I{ꈝ{ 1k|nG||kW|ۚ{} p{s{jF{aܔx|X^|GNW|D{|:|0Th}K&&}z8}lԈ\}H h]}J X߀7֛(2|pnsLL0jVaIW>~M~D47:i0*=#&+TDS~ +~٘ےÛ]1̃{u{ʘriI``WTˁMZKwCC: 0'&4Pr + œJFC%טJ{,~r i`VfLΏC09H/ &Ku@ ;EsXɋ.cCz3q}hh눽_pjViLPzB@9N/3%&={S m -cڛ-4 Øz4`pgr ^&U`GKSB=舆8׌Ї/8^q% щ F愒 LL.KJv }=y鑫pfg7q][T?GKڌ%A38Bd.8$ډ݇jFAq ˜;Ԗy2oŔ'HfĒ];41d+Z!^N'N7|ăkxcΦävmZc[+ZX<\PeGF=CKN3c<*R Xr (c-s@=v7lb_YWMO Eb<lR2k(ޖyZt 9J;nzԌ|sr7~juukkwbgXheN.oDێǢ:֍A0όq's'5$LCՍ A_[~ϗkQ}Pt[jxa:uWMZCΎ:9ƣ/נ&SzJsՉ !bn((nӆoq5pzwqworhgsI^Yt"UtKSuA>vO6Ցw ,w"xxFxJO@xyrʤ|rVsxtv=tnQugf&Bv]n=vT2*w4J[w@Ixo6)y,`y")yztz?{̥:vw+qwnL#wwhxnMx\ex\옧ySyvI┐y?㒤zp5z, .{O"x{{{O|Qn\{#l{${3]J{Hz>ʀ5- +"bh܌:Fj@~1F3 "}Nt^tۅl@-cusZؖuQHD>45 +Ŏ"Jpz_9DqXL|׊ t~C ?48+e5"ބA46 U {=ŠɎ|iYsŌk+bIq(YqˊbP["Fߒ|= 4.g*.!݆IӅՉ BєqуcZ{ꑛsuVjwa~XO㌉F7C<3&*eȉE!1_3;ӟp;ʞ:͜{wrOi̘g,`֖ՑWߕKNEozћ8rAri /_V1bMɓD;mw"1ǎ(}Gtw ;%ٍC%#. %z֞qnvh. g_U7MLC\ :i%0U'ύZ׌DNL k υ!vL٦ҁ֥ y[SpGgE^TՕCwKʚB(8/ǔ&uf1^ ~Ʌ܂A֬/S1xc6o*Sfe]"S˕bJi @R7.H%یif +օ[օBڱyoxF=oMe\4RϕI`(?Ԓ6g.-*4#" D=WS)`ٷD~wM:knEpd[PˬQ㕯LHbZ>Ē5Z,!u";a2(XPN3΋mϪBneZoPxp>pɤPq=ir+`s XUtsO{!tF5ud<6hv#1˔'v'ʒuwg&w3w xn"yЊqڅVNrus xsp8tyh4eu_uWwvhNvENNw;Mx?1x'{;yL y(y 9zeb{m;w qvwx-wgp@wgѠx_qxtVmxN2y8{9 kM{|ܩDzLzy8zx)zp zgh| }1BX}X ~æ~~~wP~Xolo~Bfڟ~^u~ Vf~'M =~-C~=: ~\0n~'6n~"~~{ ~Ljt~ϧH?D~ iv梶(nf9p]5U LC׀9Ҁ0bs'L h䁟I`t |N u¡\mۈe\ ^T,*Ka9?BLG9 \$/Œg&ܐÄjo H+󇻥G|֍uR- m0j&dQ\SvԉJ A78/M-H&i`Xpz c|?|ut۠ҐlcH[XeRI㗸@Ћ7K.&(@dw*T jˆ֗ԁ{{t[lƓcAiZ1JQۙp5I@97oЍ.‹%Ꭲ3 5=ƆӂZfQ{Ě s3kibsЖCY P[H#e?T6Г.&$&B8ƈ (~zȡpm&G5q-fw$ϊq 5K3ꆌJyhOy-r'i,y`W%NqE=ǘ4d ,#ߑW fq'ãE~dxۡqUh8_ќV M󙕠.Dn;R33왗*őז"=#Ԋ }kw(ph8^𜰨U,Må;CC:֖6L2*) Ӑɏsѷ|Ƣpw(o؟[gL"^­UN.LSCU9ϖuQ1q(oJb&Knr!5l~d mwAnqcoipbkqZhrR60sItx@ u66♡v ,qYv"ϕw;Ywfr4wgȏcxHy5p}®Gqw[rp֪DsZiBt'atY$ubQTvHȞSv?ϛwf6Ox"+ȗx"N[y)#y.y- z{(Mvx};yvwwvphviN9wqa0 wYx'P]xHYy ?P{y5z+z"Mzz\{ώq{t|$SyM}LywԪzpz:izj`ǤzX*zPzGޝq{J>қ {5J|+Y|l"j|e_|xk|Yώ+|k}U}}}w5 }p> }hp }`7}X*}Ol}GT}>}4ۘj~,+-~j"q~sɓ(~Hߑ~ i~~"|jvm"ogɥq_x W.OmFʀz=[4E]+u"Vi3  ЉD2{ժ2u˨n@g-_ KW˃NמFR{+=`b4Y-+N"8ɒRӁ {",x{{Ouqqfnxf^{VY`NM^E'<֚:3ل*镨"&ڄ_Z{ +gҫ#zͩu%n ,^f54]1UMT UD؛鈚<,Ƈ3a^*{}E!46G7獊 'Ps`z[Ctmؐ e];@T׍HLߌsD ċ;y2ӗ*\!wWB3:ߌ/&ցrTytM^m&e#\T&KȏC8:2Vk)ѕ !I3{ȄQ~~y}&s7lUdjv[áSR]J̝ABQ 9噃1ƗID)[ ̓*~dq[I}өx>rϝkqcQZ}Rj;IܝAU8ϙ0C$(ِ!  :-&|R }Hwr"j!b;YxQgH֛@]ߙ}7Ǚ/ay'ϔⒹ)5dpk{ݩ_vܨDqyC@5.R-s%xQԓŒ ѐňayƩu ohZ`NWWgNɟFDXA=4t^,]=$^}roÍ ]ɍ8|4lsvmRpZnmioJbͭ pr[mq4SꧺrJK's@Ct&;+t1(u'avEwkw/ w֑xzzTds uNksoOsiDt bsZt*R`tKuB;vu:=w>0x&隱xz x.y •ywzX|zvTu[vppvi8vKb:vZczwCRwJzx:B|x9ƟLyF0Vy&ezuzyYzR1}zLJbzBz9L{Y0e{&|Pg|la| h}}F'}zM~u }!o}h߭}a[}Yx|}!Q}5Iˣ}NAv"}v8}}/6~&~Q7~y ~ ~~2~ytbCnͮh4|}`I-XQ$I=H6Ї.'?%F>_p frjw&Trr2m`f@{^᎘VnNYyFAS> I5坼u-m%7+ᗖ'a  d߀vͯrblAeēE^KUTMfTEeOp=B5,-"V$勘 A 5ݏ%vMNqbl*~{e9S]a>Tꦉ$LZDSo\pxjT s$KNCV;#\3aȓ+C$$Xpؕ1 %Ո.}~tݯojw4cW]O[lS%qgKWB֢j:?P2lz*l##Ғɏ %.4sѯ,nRi+b~]=ZrR;JxBP9ʠon1w.)" 'n(Ɍ ȇUrү?n#­h1eaiYըQWgI6A'8꠳o0r(Z 6Q fX /'ÀqVmAӳg߬;8`}wYPzìHTת@O8 /'[.LHH x`폩4t:kZn[l8hSlb6n8[voxTpJMZ!qE^r=ʦs5t,Gu"Pvzĝvw'Nx@Ty{rrqmErgksLasZα]s&S̮sLL]tODө#uH<^v 4w+jw!՞x}{xyJ~z4P~{|qԺvF6x.Ϣ6'i|=efFږ|FmS3h'cH\үڛUAM*ET==w$5̕-P&J$c2! qGl gb֡[ԟTSZLED|K<:4ޤ^,~%q_Kx*wj !kgwaȱԦ9[ۤSyˣQKUCw;a,4',Ś$9J܎șPjf(``ZLdRJoӧB;w36w9+-#=5ٜ ݚkV8j!i&eN`FYQή IAҩ搜::72`ѡ*8o" RJaÝIO Ǘw׀kif_i`mk7Z(3lWSmbMnFpe?Qq7˪s0tB&YunvJv  wxzl~Iiqeվm_rKZ,r!StpLóqEs9>}ts6u/v&[wxA_x yfzj|iiu!e[iu7`{ tZZuSt'LuuEN3v>-lv6w.x%,yqWJz/kaz a{U |GV} lixe{x`@xmZڷxS=wHLwDx=ڭyA6(Uy.zz%O{e`|| 4}Y}A~ri}e|Q_{yYٷR{RzK6{5Dsn{=F|5|-1[|$ޤ}r~;~ 0PPh߽kzdIi_>YՀR@BK1CU78%/([!RxD-Kנ ڃ'dP1_xZݷBThs%M+EJ$=ޮ 6pR.+'u^ RҔKbc6یC Ş}̛X$csBm_uY󷴥SlL7PnDVd<ꮽ5.92&_5 [gY) 3fVიbT^$YѫR˵KT{ CuBW<{4جΣy-i%dm}aygŋ g!߀aJ]]X:BRiJw{B;@C4 ' ,$z@{%$w ܛb €3u pұuqus"Svct)vuKw@vhRwwQhxx8vx_ysxyg/y>z*Zyz~NyzBz{6@z<|&)z|`y}"FrZxsex*t*xtyuGz0uzvP{Pv|$w|sJwv}g!x}mZxM}N>x{}Ax~(5xx~)x~~`x q1~q~ r~Bsn~qt'~Jt~uo~ΌUuvpJrvfwWZpwNjxBFx]5xo)ux=<*wop{e q\hrBrrs˂tiu.0EurGuf vZw!MwyAwe5cwɁV(wHxvǁNJn!o0o񈁻pχ}qŇcrŗsy7st8wqzr~s[qteAtىY?uMOvHA3v4v(vQvSյj.kr%lzLmҭnoۓ p֒qΐ}r9qsdet6MYu MKuAKv35 vs(wvPuv iPD3jcklڭ:mo啑p"%pq!f}\rprԐdsXtgMu>@u4Kuމv'muetwPhYˈiScjɸ6k蠷m3[n{G oolpdM`q R{qmKE#q 7qʛ**qaL|op̊bc9duf紿h\jmtl ґEmTnY*xyoNl&p*_;pҥQq8D4q7 qP)qaorpualjcƌxeg#ikw萇l췖n#qiúy`rjysϭyt+yuz=vvzyw|zxpEzyd {z,W{6zK{N{?{W{3i{B|0'8{| z}xԵvw2wJw{wx3xx8xwy~Xxy3yzye{X|[y{oy|ycz|X5zX}2Lxz}@z~4z~r(}zM~}yOӂuV|"u|vC}>v}|wJ} w}攩x6~"Ix~i{x~oy#~cy"Xy9Lhzc@z14z,(y}yFC҇sÂ?tOa)tڂ[unNv!vה*wFw{xoYxqcrxځfWyANKy=@+y34Fy1(+yw0xā6r[nr&sw!t<tseu드vMxvՅ{wZo-wƄJc/xEWixƃKy'?yM3y]'y,txTGq Ȯqy=rM"ssߊ؞tu[Lu{=vnw3bwzVxAK0x9?]x鄵3xyF'mx؃x3roҔmprwq%Kq-rُKs1Cty+u4?zuԋEnov`3b8w -Vrw>Jx%h>xp3x'xlzwƅϋnÚ>Von-p0ʹqsr ֝`rpstzCu%n4uʍ2b vvV7wJw>w戌2x&wӇUvWΣmȟƶno]ﳶpTJ~qR`rPGs%ns㓂ytmuBGavuUvJBw%>_wx2$w%w-vulZm)in\o pݜgqšrs`6xtEltϓ[`uvU6vIIv!=9vތ0vʋy#xv ]tՈT.l+{m@mop'\qF; r#(rxDsl7tc`euUSuJGdu䐂;*v.u!u+EtJ̗kl|mmlwn-oHpϣvq2rws6Vkrs_tuVRtFVu[*9u{-DuP Wt] >t 2k/GelmnloBpaq@_rvrΠjs4^t Q\t[Dt8ctƔa+tscCs˕ji3çk#lϱ m,n4pb:pߩ2qv+rwis6],sPEs]Ct/G6t0*Rsѕl^rXsli½jXl vWmC@nyop}qpunr0irj\XssqO`sƞBs5s(sc.qr\h°iIk ln oZpO܀q.tq~hUr6[sF/NrsAsӠ4sŞ'sCbqǑ ryqg=ƤhLiˮkmSn޹!ppsqogrZs#Mxsr@ts63st&s9Hq xrˈf } o |pվU|r`|s'G|tB|uX|vQ|wCy|x0m]|yaP|yU|zJ|z>\|{j2||&|5|{}7^zvVzvw{ w&{7w⨎{nx{y/){yޅ{zx{{!l{{a;||0U|#|J<|*}>|}3{}'%{~h=z~|y1{Ţyd{y|y|pz@|z|z}3z}x{}l{0~a{d~]U{~J){~>{2{N'{7ZzzwIw/8x="UxYyyؐIyӀń{z xz?lzv`zUU{I{,>R{32{&zyv^0v3v-Yw{ǦZxTxzx򄇃y<7x9yl(yɃ{`z'-TzIbz=zʂf2(z7&Azjky6u'uiKuʋ-rvZkv?wx Hexcwxky"v`!yTy,Hz7=`zT81zF%yyH_tsؒSt@jwt4uO%u v aw3w>whwTkqxtg_xrSyhHeyocmopqOrkOsN1s~t?eu u!(őnηqopB-qSr3r{ s~Nt:rXt΢gfiunZuǜMduAv4u(u~ttxQnֽn޹*o tpq rbs@}s qt-eu/8YulLmu?u 3u'u+jWs tZ_,m'mԴNnxp ۟q0`r:r|sptP dtX>u]%Klu>u2u(%u s t/0k@l㳁m激 o25pqζr|suptdtȪWdu; Jhuv=uE1ou$u sԏ tȟoX{pZf&q{ԀrHsBtuPvuuw^i~xX^~yR0~syF~(zV;s}z/}k{#||'{|~uY*~u÷~vx%~w$~w˘j~}xg~^y 9~8yum~zBi}z^ }{hR}{G}|h<,}|0}3}R%|}V{~+}7zǿ}3z}5{I}I{ }_{ۗ}||}s|Z}Y|u]}Q|i}N}H^ }S}R}^}Gy}N~5<9}%~t0|~%:|g~{#C{ǀF{T{| /|Q|ы|ɀ|u|i-|]|Rj|ƀG |Ā;|0q|k${%O{$;TzȽz8¤v<]vGvNwf:wE xfƈx_}xrMy9fy2[byP.zAEzn9zl.z(!yx~Muuݞ߲v>mvawE`wΗЈ5x$)|xjqxĒf y:ZyOyȎ%Dy8y勍,yWxv.}wֆtpu>ku v&֞7vҒwK݇vw|,w"pxZAe[xMZyqMy:ByG6y:*xlxbwH@tCqztufuqv26vˠw6{}wpwdx?rXxwFLxUA'x䑚5yxݐ)x8ww^st )teu"uvV?Bv¡zw'oOwFcwWx(lKzxG??xK\3xB((wLvȎv+r(s~bmt tOuD uov_z6vͣmnw>c w=VwݛJ^wg>nw2wԕ&wLLu2vP%r`:r㯕sz-t+#t߯[guv yvFmvb4wcUw)I_w͜=Uwٛ1Ow%,wAu v!'qwFrQ@rݹxsrtku1Uuǭxv@.mveaDw/yTw~HTw<=w0=w$w ?>u֏ v ϼ,pstqk^r,%s:s緢tȴuyx v lRv9`GwASwbGAw; w /$w\"wv vanxoGpq҃#s*tdt}guqvfMwZʀx`O7Oy%Cy8jzv-~{!~.{}{ tu\qu09vWwSw9VxL|xq}yfKzZʀzO{ADt~{9H|3.~|"~}} }ZSyFzہzazSz{>q{| {q`|7e|~Zk|OJ}?Dm}9a~}.4~S~ "}~D5|~t=X~7~~~~LJ.~|UF~q~e~Z~Os~4DS~P93~Vb.}p"}cz.|t~̄l~5~ ~E~ł~ւ&~Z{`~1p`~be ~EZ~FwO~MYC~+?8}-}")}|.}}3}fT}Û}ׇR}}z}o}d}yYc}ń N6}ڃC'}ʃS8},}J!|ǂ``{U|v_|T|J|Ì[|a}1i}'z}o|1d,}[X}8M}_B}[~7}4,k|{!)|r'{{{~{U{~{ښB|4|qf|rUy|]Qn|`Ec|u$X}|.Ml|XB|7}|,T|M {\zz#zɘOWz{;Q{Ž{ĒY*{ʑ yI{͏n={ێqc{W|$L|KB|Q7 |*+{͇{Dz0xaz2zT'Uz5Ey*Qy۹@xxC,xxZ~yMcyhypvYz8kz,_zUT&zxCH{zy+f nx$cvobvvʻw?wL e|A-|6Q}++`}n $M}~Z}ȸ~4<}}؃}׃}TM}́}wR~ l~+avi~y}ٵۀ*,Ƨntw qw ; ,Ќ1u'DjnCG_x;T ^I?N~4~@)~=} S|;CpEç C.QZd__~)tv~i~h^~&T~I~>~~!4<~6:)7}‡Z} l|;Ŵn~G~~ǝ~?}~~Ǖ~L~s~ti~P^-~3S~4H~+>}L3>}0'}5!|X{ąn}ߡA}-}W~~)È~@}~*Nr~hB}]}Ӓ,R}ǐG}]}xS,yHQ*z"=z2{(+G{{耠|$܊xBxvkxy]TyM`y}?ysPznhz]ń{:R*{H| =|b2k|( |}H}sHB}}B} }͇n}||S}r}Qh%}y]$}R?}G,~-=~Q2~d'~~~2'x5eˆ&݅҆"{υqՄ̀g4\\=Q/8GQ΀:E3(~Ɩ5~FO}T|ߨl}]pE Q&ԉT/?~]t7Qi0_TQI/b=42'~T~S6}ۋd}Yk%;ԼtNᴺ}+sf!{h׀^#ު,SQNH#T<51e&~ؚT~tg~%l}Rhnn^o,0p'qM!rmyCsLn܋t#dtZ,uOvE ŀFkbmXn[Oo@ԓ-pq }qtbrj/s`tU}uKKCv%ADv7mZw-Y{x#0xxAyIrIrs8s˅tp|ϏusIui[vq_wUwKnx^Ax7 y,y"ΆCzP`ozrDzv~v򖉑w;ww|Lx)rٍxiOy _TtyU6AzK 9zn@ӈUz6|{>,{"{{{1{@1{6Z{LR{ME{T{A{Trb{i{_| T|HJ|@|6}},eU}"8}"Ԅ| <}&;ɐΏn8F{ q~qY~hY2~^(~TS~J0I~@%~66~,H%~"Am~~r&)~NGy E'z^]q'g]ቝS}^Iw(?U 5ކ,*"AGp 5uۈ[W4N/7Ɇyp`g]9REH܇?J5t+߅т!*Y9+Ȏ tތϋ@ŌTy*YoԊafSs0\uRxH}>5 7+Rs!`|)9 ЃHRۚ_\ƐXk)]I{3xō3o2֌LeZ[eQMbH>K%4|*ą( RS -2aŌ4+xƊ wDn{ad䈎[)vQ?@GJ2=ÊW3d)OcÃp قÅ`ڌ!h8t)wR֔mid6 Z`pP=F<u1ڄ'zЄ`u~n.☁]ȉ5 vwl舰Hc8Yy0Oc`Eᅮ;)X06&N^I͂흜uf֋[܈/%uĉ*UlqkbCǙXm N3Dm:&/]%ߏw?qgV (ڋ 5%צ ~[tk/BaUWfMmWC.h:8ݕu.x\$Aё|5O?ފұ/\NV~$t2{jK,`gVbLQFB_ 7uי8-h"Ƀ씐[ggne犚H*牛CF}YޭsXSif _xU_ۤ2K>@fb6B+ф0!r%ȏn ̈7des⺾ VՉ y|rsQh^{qTqܩJ7X?…tU5^* 3}K ݃C)omHmnډK?oؕpx MqnђrgeU_sB[tQގGtHu=ve4+w*qw wZx xwqޘlrTrt0s?sw$tnuBdu[$$vQLwAGerw=PUx3:y )Ӊ2yu IyՇwy Tz5j\v QvD7vVvw5vwmKwdfxtZŽxP)ywG yzvڕ-z /zazv1zm*zd4{Zv{eP]~{Fk{<||N2ꉀ|)H||}C|5 .|r~ޕ/~PD~{T~Q~H~&u5~l~cm~YQ~"O܌~-F~< ޢԏKSyp:fJ]$nnS}Iv@362ܑ,b&V"NaE8ǐX{U舋v4ٔ*3Q!>7 [ƒ\ȯjl?`3P@xu ngۤd͌[-OQlpGon=`3g})Q Ɠa 150Hѓ Tl6߮ew@JmcތZ5NoPczAF~R4݋}M*|!~.LJN O)ј-f }ٔuW^l DbYݏ}PMGz#>Y4!C*h ԈΉ ԅ˃}7֊lԔF}*tkGAbtXNO$+F=O]3g)Ȍ f1v (9cᠽ%:|HDsWjWjaIW:dNED ;ڋϒh2P)/s S\Hh >svЕi_ǤJ{vrϒig@`$/V׏3vMrD 뗺:|ؕ0يu'㉀ш4; ߈7=pZ]w{zħqvhw"_('UΏ9LT/B׌9'/j&wBmg 1+\}z j?byђq ɪlgf^1*WTΏGKDIAo7."C % ӌu 9?ƒ ۋp ↂ"6.yvpMf t]F1pSڏ^JFh@;6ƌ$rRB?sH@tG?G[u5u*ҏv w ӌw5 |wYxآpUZp˂!4qa{rs:rk:0w640)w*x sxތqy /yi zx,"tt&tǂ\3u2{WusWvj뚈vbuwZ wQ x Ge>x=xy+3y*Nz7 zxz z{>xxނwBy{cy8s9TyOjyeb yYFyP}zWGz=7{*3R[{)ɍ{ [|{ Vq|Jj|I}۞|Νy|z|r|iޙ,|aEt|Xە|P |F`} <}J3<})} M}} J}c}ɁdLˁ %yknqӚ(iB`XU/OEЄq$ph;`?YWєN9}E؂ <v2Ŏ) m| W ‰{.zۅrkxʚ0pӇhl_ІWAN+ȅ0Dd;2-(VV"g ܉łȁ~"m;UxRp+Ogw^aXV8ሰM[oD36;1ON(I) tq; 牒8=nBwۙ1RoގafՖ^ U_L,C~Ɋ:vrI1+ 'A8jtQi 部445U#U~LwfƓ7o,f:0]M̐#Tw^KB9ЏF 0f'#O!7 s}vf~n]+GeJ\aS;JbA~8Տ/b&w*5 IM ؇ 2_EԠ' }Bu3mcꚹdJ˙P[ZvRd3{Ia@am7c.y%nj7s ;JVV oނshzG|qҢtڗС lpLcSZVhQS;H8?-5!N-6y9$l-bZs;4G qhK8&{t k b]NYSkP?QGS=Րe4F+F"iV4v KφBuԚ $z&s:{j}ai>XT{kO7kECG<3r*|!ƋۊbaT僶yjrheaiږnF`nWgNF6Dn;2T)a@ BS{RӨk}}5%+}g)m}pߎg}Q Ί}}Ϣsy7r͠+j瞕bwZfRf_IۗRE@v07J'.(#%(mA6=H@! %!0S~CSxr}j? bbYyQĘHI7@+L7b-𑼁G%"7QLQ(C 2IՈ~sCxq iŝa}YHPJ!Hp?6,-V$ďۃ}Ɏ| ۂ$΢f }9Fx1zq"iC`ݛsWXP,GDr>䔒6ކ0-$QY 3 ~c}<ߐ2wRp.vh`=W͙\OT4F͖b>$`5o,h$J`= уQ쁃=|~+w08@pђKh3VZ_ؐjV(lNr|E}=^>u4,E|#`׍وƅ Љul )n|vؗofvgm^^AVMtDՐ;zVt?Qme1\cTߛKsBF: F~1l)dG!X5_m7E~MOXy|Itql礮d[˚WHS 韕Jo;A8s0\(=*&rB،o%}'a5xsFs kϜөcZښ[;R)Iu=@Oq7/&ᛌ&|ʎ 0Ʉ{ |r:w@=r3=kǯ4b䛌BYhQ>H>?6..%ґMxT_ ~<$jy9ksQlm!nfno^'p%Vq-N蟘r!FJs>s4t*uku vvI"bvnˎw[y!~+nx~os plq[ePr<]٣rVQsN#'tEuP=8v3:v)˖ w w{x͒xABGyE{.}:rxtsbt|lէtewu>]uUvRMĞvE{w<9x/3Ex)y\ y!yUyUz獳z|+}<.wxwslxlIx:e5ax])pxUFEyMe*y]Ey<@z42䗃z)YY{' ]{Z{H6{Ku{u|}N{[x{orb{l{d{\{T{Lʝ| DZ|V;ap|2rN|)_7} }/ܒt} \}AN}"}y}Pr%x'r.kzWcޣE [b~T-:~L3;~CE~::~2%~)? w[~w~aM~։&~|_Ąw:qb?Tjc6ʂ[]LSтKځCH끏:F1Η'(E yU>B oJc{VvqjIbPZŠzR՞gJŜB6:1cu(~ yI:z%v'lp9iңb=fZ"R,J:A˚S9clV0ؖw(2mwЄng8}zCuE4p5ڎxiKCaY{ь:QY؋hI.@'8B#0MR'̔JKa؈ۑ 2=~dy§2to]h¢a!PXǟPHI@7)/ʖ7R'3@+6ՑK9̌ryИtceo Gh`SWvOmG^ݑx?)e7#//'͌J]/ruU>~x=ksI,n9Fg_bVZNBFj,>&5'a- &풨V^MӉqL xwl(r3mSѠ!f0a^sԝKVFMhEv6=&84ϘM),ߖ"%tJߎȐʌ4 Y"чvM6ql]=e@Q]ʢUBmLɝD<(c?3+–W $2yFlJJ 눖YuO7p kdd[L\ʧ%T*KqKٝC<;.w2ĝ*#QK%ĒHڑ @"VtVDoɥ jAcQd[֬SD` JMBn@:>֤1s)!arˋ oٌ*wjOq8kcklreemf^nWoPBpHq@!r8ps/V%t%`ueu]u vƐx(zLuɲ|nCpްokaoep^uqVrcOrsGGУCt$?t7bu.Vv$ϙw\vkw%w yxwy{tt4pktzkteXt^MtVuAO!uGpv?zwE7 w-盧x$y2gyV;y ŔRzz{6Z|twpwk1w7eV7w^wVRx:NxGdx?yv6y-Yz$g4{{D{P &|q|s1}UuzpvX{5u|?-,|$L|}}& p}. } }6~CtծoWjb~c ~\"~iU~]M~kE塍~r=o~q5;F~, ~$'~V'@B3 NO:UEsvogic=\3TLaE=4r=M44,~#ց,,Y@Z tQs(n$iDbɩ3 [CS?L?D|F<Ӄ4nÃo,I#fVɃV Rrn2hߪ*bV̉[SRWKC8;՞3ɜ+p#BXՆ# nOj㏮$rEdmԎhAaz"ZfRJƢB頋X;3l+Qo"2"@w݆ j̅_3Ypݬ]lsFgjɕ`Y:EQuIhA *9?}31[*!"!܌=ӕ ܑbpGk@fn_=X>&"P&ZH4Z@?8X0xrH(!ؗHQ' vv'o<j+ev1^՝WJO6SBGHd?]7p/{'C< ԗݎؔr m + n2iإdoZ]ʧѢV_[NA]F\}>|ɝ6꛸.|ޙ)&⚅6A[9go "1m-)hªIcx\ڨ5Uz"MVr%Eo=5+-%%՚ٙz&Ǐ* dR1&l;8g֪^bũ\T5yLuDڨ<:4p,j$̛5ru҉Q}'k?n-iFipjCck]~lZW1m~P5nIpBŁ&7S/Sr'8R<2ڛЁeng5jPfcDaa}[8uTbRM%EĄX>66N.ϡ(C&џ8v֚Bjۃ;偀8j e\a ZήStLaD򧉇k=t\5'l.1&YӅJ͆9AD5W$m i$ev`čCZoόSe‹KRD/g6G|hqdg_V!YJu7RgJ5B\:P3Z14+9$֞Ne({<3וGӐ:Ngв<c֚b^BX3iQyIEA[:k2O+^#ޞ9@鋺A)^^[jfbD]ů0sWӣ_7/l(+ ̝X_Ō _8T|zր{d3_̰;ZaT(Mt5E'>N6L/ f'8Ni #c͝䐳g uŇ$ҀfgaUh[WoiUjYOƵkI'mhBܯAn;֬pL4q-:r$ɤstʢbu/ r=v7^wUzG~dľ#j`Ok[JlU9mOYnHޱpBqd;Jr3s,Gu#v/ivpCwK > xdœy>{c^c)r%`r[sV#kpOrH?sAtD:uQ3NvT+wD#gxx\y. ZzP{X|mc¼2u`/+ul[ u3V;tO9uHbv7Adw:hw3xy+Nay8"ä#y kz{ B|!ay|}dy`cx[6oxUm:x(NٲxGΰYyP@Эy9ϫ1zm2Yz*Wd{t"R3| R|F}1 -}T~o cκ~_}QZ|T{N'e|DG8|@@h|9:}91}y)E}"+~JJ~&n U4H;bƺ,^d.YzSAUM=F6? 81XB)!ߤ1] jl8Ib膫^-YvLS߄MF@_>7d0w)'܃6!r̃Gփ 6nB c"a~]Y-S9LNEh >K+7I/S(!5Ն.|څ X!mtsa)1]NW^XҵoRTLDĮ=v6JE/x'𥴈 ƈIOI ͆lڀ?`Ҹ\Xp+lR KDގ<¬5rOo.?'=ŒA @1E 񝋇  s`8i\VǕWɵsQӳJְCFӒ\;﬎4e -m0~&pڏgS, t9^IZ_w?[pVӵPIѰ.BWזg;3ͪ,[%r4p 4יpBE^DZĞdUܵOHѱAe:32#+ʨ[$X  c o{2bd]WYۤT/Nͳ4G! @w9K2- * #xA>|Gm ݝQY:X\_XWSL@MV*GO?Q8dC:1RY7*O^"&] ߎ ֆ9qW)[ٸk WASnM"F!>$7f0)G!ȧs ѡdM6ҙrmsUozspcthqtruytWVuu[vdvV|vwRp:wMx)cwxWxCyYKxy?axz31x{)&x{x%|C԰p uLqt}ouN~ cu~OWvz~kKv~?w5~3wH2'~w xNv0һmFn-Vopp}zqMrB3sw;{t]o~tc`u5WvuۀKvI}?v3v'IvukƆ>lۿmn;oӟpfq rv{sD~osOc$tWBuQKum?vC93vn'zvGXusj^Kk<,l>mQnx7op%q\{vrjors4,bsVtĄK6ukp?]u߃3ov'Wv4guK'i!\i萤jl m[nioꆏpzq#or{0besU=Vt:SJt?u|3uą*'ut!Xgh֖ikʨleBm nُԆ o掞z[phntqnjb!rVYsJte?t3u:&u `toΩfמeg}RhCtj=ԨfkldWnمuo:Oyp?mq0*arVsJos>tl2Ht%t97s&efܢ4hitj盖vlVΐmn!y oAm)pHa?q^UkrI}s:=]s0s#rcqbdz7ae§g%hj)QkI'lgm[nڨrN$oO@o3ov&nŚm| OnJ`vm>Lvnpbw3ofwqgq[]ră5stU`u2xFulav6`ovςTwhXI0wӂ*=x1x+%w w2pn\o?oɉ.pnqB]rlsHntwtӆ?lu|` v)!TFvЄHwR*=Qw1wЃh%w$vԃjm 2m7nXo~puq_ErPs>Kw{tkt_cuzSv;HivΆOvxOvyw@y2wzx)zzfxzیx{IYy/{uyj|=iy|^!y}$RzG}G4zp};zw~D0]xRLy1Fy~;yp0 y_$OyFXxm\rHrEs6Ls⇱ t"ujv*v}tv]hw]Rx YQxFx탐;:y@/y#xԂOxq qh{rHrƌWrs|trufuRt7v/hvŇ\whQUwTF$xc:x./bx#xNUw[ oQp}1qOq)rΏsΉt]~ts]ugv5\,v׉PwmEwڇ:ax .xy#-wą_v̅M6nڻop6dEqrfgr;s}tThrt$g u[vOcPMv-E'w`"9w2.'wS"v9vVCn:n,kowZpf2qbۓrftI|2t1&sr7 rjǷLkl@Wmo͐p5q0yqʧymrbQs4V$s-Is=nt1Gs֙%%s3q r jJIk@3lL㥔mxBnLoP\pdxqlrBatr葉U;snHsy{yy{zm}{zr1{{Yf{{[*{|UO||D|},9|}.M{}"{N~=&zW~}x}9y}:ya}tUy}z}1zo}"z}}*z}qz~$fG{ ~_[{J~O{~D{~9e{.{[?"zd+y$w۸wς^bx%x윹xytyy`|yRqz%9ezi ZzO{ DP{29{3-{ "Hzy{vcvvLwhhwcxsxԅ{y py[beZyZz#zNz"Cz8xz-8zm!z4:yhu =Fuu uԋvW#vPMww{x,6pxdy Yby$N_yC7z.8 z<,z%5!yȃ`x`tt|t吿uy›Tv#v΍w3zwyowߊdTx]Yx׈MyEBy%7yx,y!3yWx35s+ٶ0s-at&t`ukvvWzvnwVcwԌXmxPhMaxÊYBvyd7gy&,x FxFwAr^ҵxr؜%s^t 7t×7 uv,y vpmv8bw`Ww3LxGAx6mx*x0z w jPvGDqr)rDsdot0ft\ux?uNm!vgbvWwnKPw\?wƍ4[w(wev`0vlq״qr&rɢ!!stotwur lXu aDvuUv˓Jw>wT3(wM&'}vpuvpnJaq@q)rWms'5sDtvuku`pvPTvmHv=vA1v&v5et7uuDoxpDq5qrȩsft(!v(tju>c_uŜSvfGv?5;vGo0\v$ut2 t˸ozvp'pβqgrls?πs5u^tfjt2^uzRu՝Fv:v/u#/u7Stw tin~oo8p5}Qq r 3rsRtt#i-t]uJDQuEruٟ9u-ư "utI~ }tgmnȨSocps9JqCvr7DsSfsshNt\u.PuDdu8uΡ ,u; u1Zt ]tNMl?mJbn|iTo|pӐ qsyRsnotc`vX5_wL1wA~x6~yx+~z& $}~z|zTqⴑ*rwv s-st̏[uuvky_Bw)n2wc~xX~ylL~zA~hz6~{L+}{ }|G|2|/~w~wd~wˣ~x?~x~y"~yy~Yzn~=zb~{ W~{L~|A}|q6}|+}V}* |}u{}[}"|0L}$|@S}B|Qh}l|p}|}|a}|x}x}m}l}Fb}n}yW}t}L}}A}u~06}D~f+|~ ~|d~,{v~Ĺt{Á[{̀|%|E|x{|G|Jwg|[l|Jb |ʀWs|L}Au}6a|܀+W| "| {? z;z]zㅟ{-{{{ɄB{ۃw@{׃l{aa|V|PK|\@|'5|u*|5{zU?y-y?yڊJz)̖oz%zO{ wG{'lk{a {mV{HK,|@O|[5u{*{{E'zx~ᰮxxLyWMy)z(1zNRvzZzkz}`zƈU{J{S ?{pj5*{f*H{+5zy䃽w wՕx#xÕsy_yv"XyuyÍjy_z@TzoJ-zԉ?z4z)z,y?ydvǛگWw6wjwߗ)x^xܔytyCWjy}_yЎTaz%5Izc>zt3z\(Zyx㇞xхHvvgڧvŝ/w=\wșaxU~xtsxДi!yE^Xy^SyH9yǎl2xNusuͣv.vwDwԜ8}x*Ys'xfh+x]sx┲R>yGyG;yW0Cy*k$xRw| `wƈCt媱9uBʦu՝ v7͒vʢ w_t}AwZrkxVgTx7A\xQ@xEx͓:Sx?/x#x"Iv猌 w4wtdfṱ/u3)uƩn vacv|wYaqw*fxw[x@Pxu1Dx9#xw`-x6"}wvn vsUWtOS;tE[uZhuev{whpwkewZx Ox9CKxJ7xJ,x wdv( vhxsQKsݣJt6ƚtmuvQ{ v˪ow+ dwzYw΢Nx }B.x)6x+c+XwwRcv΍0 Bvx#3tx) y}Ly~mz<ۄqGĄGqѥrZsHƃXt݂tjut4viw;_A_wTxIyy>׀lz4! z)K{~{~{Ǵ+vS6vuvЂswa?wԈxI~xt:Wy`iy^zTTBbzIo%{P>{4 ~|")4 |y~n|}|{Si{*Y{XGS{w={R*{~.{s~|>iO8|^|T|IV}6>b}{3 })~}}}}2~*Nހ+,,:A:l4J|^r~h^|]g[SJNH8g>3[~(~a}|}rK,=uJ0BR3|(r~h9~]o~R~H!~Ł=~3~rY(p~*}|󀾱\~~ ~ f~;p~_~'|{~_r~!+h~\~R~-kG~H<~>2l~Z'}}6a|}E'}'ע}8}h֐=}Ʌ}{}-q}{fgT}c\r}tQ}G-}I<}2G}z0'}&|){|*c|DȢZ|eO|5|׏N}{:|q|猷f|ۋ[|Q%}F}/z3zJ(mze$yƓhyyINw׼ w؜xx&yjytz vjzH _$zoTKzI z=zG2hz'SzV|y͒Ayy؊k§ʼnlcom n܎8opzqp,Pres[}tQP uFv;w0قxI&&xDqyGy pq*%qr swet9zu oSuedv[whPix8Fx;py0z&C~zLzo{HuD;uӞцv:wqv0wwy"xozxegy7ZIyPPzCEjz;A{=0Ɂ{&1{SN|s|Np>zWۅz\z+Yz zɂ„zxW{/o'{e"{ZU|)OJ|E |:}%0n$}P%䀡}p}`7}ì;W~݄~ʕiR~Ȅ ~Ƀ~x v~n`~dmr~Y؂~O6~D~:=0%%ǀa(#| Lۄ6~ ΃Z܋*3Dwsm cځY-ZNTDa :;0% ~߀`Gމ(Gr [>v䅣mwkHc\X#M؃CăV9/iE% ߂TMU~΁펮f͍8K.ρs5vb/lĀƈsb{X XME"CU29O //-Ą$`DN~΃`~Q۩3 ˢ3ހސR܏ɉݎ׍uƀk:aWk؉MȈB8m.?L#~[~YE,}B;h&0כV%Tـ)5~ɀ=pt?ka VnLqYAE6 +~!`~8@}~ D}.~e{Ww̒K~at-jgM`ZVK~FA~̌68~+n~W }؉3| $|ʦ_~ܡӠ~ߠ1%~؞~Շ%}pBso'i~._~zUF~K~}@~_4~<]*2}XM}p|r &|6ե~U'~R[G~R~~{~|~؝r~Ǜh~^e~wT~PI~)$>}O3}Ր)K}]}|v* E{> }׬a}֪oX}ڨj~ o1~BO{~?q~{g~e]A~DR~H<}k=`}•|2}'}LV|ݐ|q{ͣ}t}gjZ}gE}a}{~8p~EXfj~9\~Q}NG}<}1X}qW&}*|i|Rn{} |J^|)}*}az?} o~e~D[}P}ǡPE}:}0 }\%l} t|O|lO`|J|=|v|d|}1yk}mo}Ϭd}ݪZ}Ҩ!O}D}79}n/}T$S}vN| C|J|k-l(ɍmPȌngȋooh pu'q~kiSriaHnsZWcht[MmudBvH8x8w.w#x*^xق$x|ppp2qRrŠr~st'trjfuH`vVvLwB5xY8,x-ڄy|#zuyɂz!~ztƟuhu~Xhu\v]~?vtvrw_jׇw`߆xVyLuHyBz37$z-z#h{E͂Z{zF{pyeBGyrNy;Xyy}wztz_jz`{VR>{hL{Ā-|7|]-|#=||o} Z~dՉ }󗶈}ďM}6}|x}s }iŅ}`N}UĄ}KB}AX~$7P\~C-S~K#2X~K~:~O[{*"TӇfr{ІڂEt4)쁝 ,TQ" mו􄝓k}D:7yNof9\R~RH} >KЉ3|E(ˁ y`[DŽ,s\ɖǃPxn*eY[҂@Q쎟Ha=ioC2Á6K(NۊsdU '˃^㋭AL7w-n1ƖdUZmPGC8–9/XQ$ nC~DŽXKs';ʁu)kBa}WflMJCC8se.3#ݔkcg~߃pY ~Wtj̧`|uVQU'L%A n7>UP,!"Xӗ!` H~8r^H%.ԇ,;k}ȁmsƁiL_zUK=KݥB@Ѐ~6M+,!+ӖVjs H!E~~|kJk#lmЏny؎pp|jqf_q\FrSMsIt?Zu5Hivp+Zw !bwEw x6_o(p dpϊ~qݎrPxsosf9t\quR]vOHԈnw>w4xg*ֆ?x ۅyIyi DyƐtǏtd/tΊFmu;uxv)oOvfwY\EwROxHsy>R'y4R~z*nzr -zKuz {foxxx#myRy/x yKnyez \z{QzHR{"={4 {*8v{ F|{ |.m&}V,}[|x}|䀔|wJ-|nE2|e<}[Y}-Q}9G}[=]}3х}*%8} ]}6}h w}u\'OO&֋vbSmxCd|8ZÀP$F<3U) p] `~/B{\΅ԋP)΄?Julكc‡]Z>9PvF 7o4%f0á\uZRӝH܄7>߃4Q*x bg bVJd t򆶲?Æb񁸆=x5ne?[oHQɢUG0=3`Fc)1  ḋy+Wkގc|φ مwڅްn߭dPZqk k5lm|ʓ{ntE&okFpaqX=rO%s{Eti;u52u(xvɇvBw ݅wƘ|o7)oqpM(q {䒅qs`Lrjssamt?XxuNq9uD֋v:,wL1lFw'ixoJx8x qyrIsi۔nsË{t2t{ur{uj=v&a)vWÌwfNwDcx:y'0y'uyׇ8z Նy Fiz0&wPwzkx&xK{sxmrwxix`Hy[WyMz8Cz:3Q{0{Q'0{r{i<{# #{c|al8|(w|M|z{qƎ{i|0`8|aV|M |CY|9 |0*F}&}1|I| ބ|N›ASy q /hhU g_gVGQL^)#Bq 9/y&%uӆ,~ +~ƕ oNф y&[@p4gm^|wUk,KʁA؉%n86Q.P#l=q뀊qҐ@ȏG*7fxobfË]يzTK@QAa7-#*f&w9IgmЎO[Tx(oPfYB]tS߉Jh·@Ј-b7H-34#^Riq'ڒюQx@wxynY΍eR㌫\@ S0In@?Ή 6W-8>#͆iw݅)gpw94*a "/2 4B!6FE׆ &Z~u`B-křbYjH|P|F+==3iu)z,˅2 | UxD$3k}6_tsk aϜ2XX,NjEt;܆1s(;fՐ ւIkIު;m|Lsj Y`WFMÈcD>:ߘ0n1&Ɇ*<7 # t 9M;-{a٫ri2l_IV;^LdcCM9L/DfR%~-@؆ ߌ" y;j Pq‚Ctzq^h:h^9U>]KpoA󇩣8. $RGv#ًhnoVeapU]qFTWr4Jԏs$ALt7t-u#Jv>/vv6xɛ)n o,o}puqam!r5|r+k|"|v|T|0+}2DÕh&%|/;~s2~k_#~bސ~Z]~QzU~GU~>]k~r4C~*U~!}2~^~i~?~"Єӕ%i {esDIj}b/DYPÍׁ{GE=nj3[*p=!m>`L{0|jv]zֆvrȑ݅j߅aa~XzO_4Fo=<'3] * Ԉ҂;" цÅcԋ z}3Rr=IiiZ`/KXO E HgCD^AAU>.L?+oCU9!:D]0D'̋hS) Ն&^)xwܐO8ohf@?4a +Dř"bҖn >ӊŅbo&{t8[kݭ6b3tYȩ-O FB= W3* O!9`e͐nfj^{Pġ8j#*j}랚kw'lpymho``p WUqOqF)r=s2ȏvt('u^эuڌTu vꆄx2nƞn}o9vȜ"po:pg q_b`rW$sNrtIENSu;琫u2 v(lwVیww xm1yrrp}prw6so\tg&Jt^u4VuN3[vDw!;/w1Tx|( Px̌5yK#LyW ydzֈv%nvn~0lvwxwoQw>fǗwe^wVTxGM㒸xDh4y;:y0ގ6zG'_zzDCz d{PN{zZz}kzvjzn&zf z]TzU{,MA{\CȐ{:8~{0o'|4&|q|,|e r?|#}T ~ӂ~|~Ou~mЗ|}e{2}]9}U(~Lq~C }9V}01~$&~Rf~W~7 N~pa~˚{ՙ(tmށmd2\”#T KMB;|9g+./K&ŀj`ހ\18 sdBJWg{~t}qjlAdX[0S/K݃AÂ8ˎ/u&Q8ł܋PT RR͋ǘ݊{t ۉ1l~c[)/mR׆J XA,n8Y".؍D%Či^< ̎6P-e/#ZQ3 DhUȗv~\x qmi';k`2b+Wk*~@GyĖ!@t@mE2e&\ S9&fJ_@ A_L8-@/.&™*Peh )Ȉ(%g"i|jxvs)ktp"wlhmaҝnYoQpIoq@r7۔s-1th#u9uzuzvJxFml| nv/1noohDp`1qYLrlQvsCHŗt@t6̓u-vq#ew [[wc\wxxN.z(qO{ߢqv9roshq$s`tCXtPuHlv@?)v6 5w,_Tx.#- xxx̊y{@Qu]{ġuvKvVI{>5<{+ݐ{"Ώ| Ύ||"Ša|}_|}{-}uD}n}f՜}x^ꚕ}pW}O!}F•}=}4t}+}"m}}]~ӊq~P~m)zH7tv1kmf,^M V^XNpF_=:ɀ 4Q]+"((>̀)Kրӊ~CyĞt$m@ZeC]U⃝MIZE9HxӜtBEogF`WyO zF}C>-5™-S>%ِ:׎ ሱ+.'ws(mPgڧ_)إVyN aEA=R4g+r$Nj#C= ȈHov rm ʮf4Ŭ^9ɪU4MʧD<}3Q/*őœ"P+ Pe$%zQhtשjinkhla9mJZnbS%o~KXpCkq;Er2wmsn(mjt@tu JuXv_xylt"mnn{h3foNa&pJYq-RkdrJhrBOs:b=t1Euy'v3vv pw5LxUzx,ptqxZ6x`I^xs ͐Cxy{xC2ts٦u%nhuhua vRYEGvQCw!IRwALx,9pgx0fSy=&My$yy uz(pzz|Ry_yty!nNyTgɣyw`foyXyQzIYzfA,z8z/{F&#{C{{ {|3>E|x7}sz'|m|gv|_|X+|Pw)} HU})@}87}I/^}d&Ɣ}"}} D$}~n~wfrlţsfY^fYWS.OÀG?07/ &tג( ᐆˍŀ߀vߥarluڄreh^VĞ@bOSG;?<ӂ76.}%M^  0v~\qlxl V*efꇮ^l V'ᆮNR9FmF>pH6X섶.5U%||6 s፾yu@2,p kd᠉H]vUvMqE =T95-%5cF xnƋnt] pڐgjd`= \ҞԎXT\LD$<:\4Ԗy- 批%Ј41` MYs[oL|j@Nc[CSڝ1jKzoCޏ;63喆,Nnjb$qޑ{ 'Q2r.6n\%iSbtZhzR͝ oJd1BD:E"2+ďM$ Y +ЃoEqҢWmo있hUӝaw:YGQМI]RAD9b 1)ےw"ϒ;N=! ʎLUɀpl\gM`z|X6P̜Hi@8j04(ԕ!Bx >7o kQᩄfC_wiW1Oќ*GÛ?;7ž/m 'Q NXx8T Shn.jKteE^{W88NFӛ>Κm.6.^]:&f^ݑ fFTWqկhulirfjY`kjZlS{mLPMoDp=Sq.5Kr>-s.#G!tt}wt 4uwOypl)k֭lfJm`UnYШ;oRצpKqD>r"uuGvbSv wky{ookέ p}fjq9`qZ{rRys?KN?t Cۡt<%u4vY+Iw$"wYxJcxH >yHzft{ou }-mjiO':dAχ]/VդO>ņ0G@҅X8q0"h(љC! VgR IU>l hŋcɧi?]j׊VP2NF?Ew7‡08([ e=) wUxl(ʐdhzc?# \饜\UM֢a)Fps>b6/K܊?'ݘ 8,釸0 _ɂETkUgM>b>\n^TۑLEE2g=qH5͜k.[ލ_'(a&[ޖۈ 1\ aj|+8fXaZ=SӣK'DAN<4ޜԑ-M&&U$L5p( --5i:eWԝw`Y$YRˣ&KCOM;3,Y&% "@ YJp kW̎hid)Ԣ_mX"EQףJzB\g`:雅3 6+TZN#\ L,7 SgUc8ڨ^m6X )P飞 I%Ah~9̟2*H"֙vۗז ''} nfW&b<]s*WAOH&B@xͦ?8ܟ\1С)2!ّN7 *yi%wgEd3h,^Xi!XJjlRkLmPm Ena>Yo7Jp/dq'ޟr?fst o tux{tgBjcok^lXۯ}mR~'nKԪoDZp=ۥq6r.Bs&tqLuDv YvBx z1u|gXnoco9_p YcpRǬqqKAr^DsM=zt)6Nu .xu%vw>w _dxy{a|ftcXt_tYrt,RtK]ueDBnv=!v5wi-x%xy\8y zE,e{&E|y}h+Fwcx^Jw`X\wQTx/JExCyw79y/顅^("_ԛՊ\S eNzcb*7K^EᗢYrSЖL0Ejh=l|6\/'Ő! x܌` didtwa3:]DʜXeR{˚KD$g<ӥz5ė.>畽& xGv }i-i_YB`(\+ӢWoQןJ#C1tO;楣u4;-P=^%J՞B:,Px ϗ;y2{R|^>_[ ߨ VPbI9!B<:3F,]$ߠ񜚏s ԗJlX]YYZ$U!OHĩ[AT: "2Ԥ;+n?#+{E.͝@2s  i`2vef!V;gHP̵hK< j]E^Ik>حm^8#n1?qp*(q]"rjJs5ӡsŸyt@vy~^_hZ۹]iVq?jQ&kKlm>Dn>(Fo7aq0uCr5)Is`!6tn^u;cuFv'Jx{>^sl.Zm!VնsmQ&nKVpDSq=r57 _sY0ts(u dv7w+4AwxXzfq|56^/sZs7W qbQϳsrlKHsXD[t,=[u)6v/v(?Pw Nxijyfy_z˙{J}48_9v4["vWVruvPvJvCcwl-.7+ғ0 ٓ)-"a>â%_ A;ЂrFXɵTLU 웳Pk$J簞DUO=56@/F(X;h!jA43q{ v̂q΀YWvSS lOIȟCf螗KLm?m3 mۙ&xmgkE Tm]{_<ڳ`ܼ/b;dͶ+f8h6|Xipjͩdk@Y l'Km\>m2mS%Pl!kΐ> lČ\^?z_a̞-df]gG{zi&ojtckWX&l3Jm=mR1#mA$ZlE{k mZuRtbjtkumO`urn礈up.Vvqvrҁw$t5uwujiwv~]xJw{RpxxAGyx;~y/y/y(z}#x{1w{qprqɸMs%rخss٣ttyuuo uvyvwuvxivy^ waz8RwzG0x#{;xS|!/xK|#w}bv~pHvpw1rqwޭrjxv=sr}[Is}t8}ut~i\ua~m]v~RYv~Fw;wJQ/wX$)w u^m(:mˁݵn-opuqHr`:7s&:ts1i3t,]uPRvFv;^vӀ/v$v :u+pk½UlUm:n8oDp94q7r(t\slhs̈́]tQuYKFRu;vY/vw$v>M%u_IQj0BojQkuLln%o@#p.~qCFsr,hIr\\sچPPtEuf:u؄/Mv #uЃu Ðitij营lmEwnizo~~Qps!qpgrY[s:Pdt E?t͇A:uE.ur"u!ktthah󗧳4iߩk,ltm͈nА}oُsrepÎ:fq[erP srDtIm9t.tχ"tL sg%hidj\pkm)Bn6|o=+qp.f0q.ZrjOfrCs8hs,ks̉rzrˆ0eߤ9g Y{hBK$iG7kblm|+npo#ehp5ZqNNr7Ar;6 r*rfq%LqIqd"f۱gk~hףkjeD-k7m{bn%oodpY pbMqu@q4r(qzpGq9׿d9eNfӪohRi!|kjІlmzmo.ncoWpUKpϕ?q%3q6c'upo.]p.cd粋f?g̭ikjejlym<*nin0bo'Wo՛,Jp;>/pw2ps&oۓvn o7Jb׹d>-eg?;h򯱐*jk#y#lݧQmmҤyanɡV8oIo뜀=4p0o$oWn.$ rD~1ysr|ytfyu[zvP6zXwDzx9zyl.9zYz4"yzx{x"x]XwOp΁"EqMưq瀏rAsetZQtS|zubqevbfv[Zw=SOwˀUDnx-_98x\i-xTy"Hww&of`ophqd{rRs:As{tqu2eu׃1ZPv~O wCw\8wς--~wׂ"wlw 'nn[Do\\ p:q6Dr5Or{sSptUe;u&YuͅNJv~C4v8wH!,wT!]v|vM.Ilmn`YoU[np[Lqkgr5zrosdntr Yu. MuZBvw8v̆,v؅!cvr u˄hik嗧blmpgMnu(oďpqu}zr>]ns IcsՌ XntMZuYB_u7>v=+v,_ )uu&hjjޜ絨k&*lwmnӖKWoԄKpٓmy6qn rubsIWtLwtÌZAu;E5uvQ)u `ks^Yt!.PiѢjĠHkÞl✹n(뎝oe*pTsx\qm$qbrĒCVsK,t?^tB3tRl( s~r%s3{iw3jk" lLHmn❖oћwplXs>2s&sJqrȉ;hhi jkئ|m"c7neoJvp(kjpc`VqTrXHr}wO3wHxYxhmxhsbxlWy7jLyAy6y+y Syxsist@)qtڃ—[ulvJ'jvwwm7wbxGW!xLy A*yV6?ys+FyZ{ x_xT;Lr"3rs$sk tŌuW3^u׆wv2BmvawG/V}w߄K}xmD@xƒ5x䃂+xك/xqwqq{gqr점r΍s4t+uevu|l)vavUw6,KwƆ@Fx(5|xU_*xEXwɄy wXoʰpEAq+֠4qrѐ[\s;tM2utՍ%k(ui`,v U>vJ]w:?w14wŇu)Hwv"Evoհ oLpRşq(KrĊs ]sut>j@t׏k__uTv$I|v>Vv~3]jc(k mS~n~o-~qu~r(j~{s<`E~1t}Uw~uJ}}v?}w4}x^)}5y"|y={z}oI}o§q}p}q;}rG}s}tuu}uTj}{v/`$}ZwUj}RxJ}Ux?};y4}zF*|z| {o{E{ѵ{t;{t|u(F|{|-z|z(y.zVysZzyzz {:z={zsj{zu{{0jP{{_x{{T{|6J |'|?A|0}4|}V){}r{\}z}x~Dx~ yX}Vy}z~zv~}z~9sz~xi-z~^{%~Th{a~I~{~>{~3{ ),{_z&zY-wMyw̃qx&ۛxy8y}ysy݁i0z ^kzbXSz#H{>E{63{.(zzu*zzvkvEw ԛw~.xx }xޅsx:i y5]y:SzHBz|v=z%3*z(zz cy"uQnuv#v{w7Bwω} x6rxFhNx]YyReyrDGyم="z<2z'yBy?yQtStu/Juɐ.vnw |MwZqwgqw\xjQxG1yM&]qrخWsKvtSktͦ`u4*UuJu??:v`4v!1(uvuueubmuoSopq/r|e{s[ut jt_tJTuuIuͣu>#u52u'u^tړu) uiY,ja'k˂lܐcan(od|,pqq{qfՁr\sR4?u Gv<v2xw'R xz=~eyL}y`no+woUppq̀r{sq"ftf+u\IvrQw]G5lx1<3x2 ~y'?~yz!%}z}0z$ss⠉ tU*tuv/zvp|wfNIx/[xQ~yiF~z&I|,|T|z$l{ %{?X{,{хU7|$xr|(n|Dd|Y|TYN|Dn|͂:$|݂~/|I%|x{b{IrySzzJBzAz_{Zw{`n{c}c{sY1{N{lD|09|F/|0%% {ჾ9{/X{Nxmpy#kynyΎ)z5zzwzm.zŠcz܉X{M{fC{b9K{.{&$D{-CzPzfOx xSxKy銦yWyevYzNl`z5-b=zVWzMjzB{8X{-z("zdWQy# yW-wNwQw򘜓xi1x핲yqQuykyaWyLW z)LzgAzqK6zP+,z4!1yUxd xʅTv(v盖wVOw֛ixc~xnty2jyRH`\yzV&yKye@y5yύ*yxߋ~jx  x>v&[vw욤vϢ2 w]kvw임~x~sxix_By!?TyYQJdyym?}yv4`yOb)yZxg`@w bwƆQyuvۙvWvwz}Nxrx`hx^0xؚSy Iy&>y)3Vy_(xƑxqdw͌b*w4uJVuuƐ vxwo|{w:rxgx`]xRx͜lGxݚ<|yjqyz7˄rơ>ds.+stPtupuՃv"lvb)wWx7MaaxBԁ!y8mz.z# zf{]~{J+wwтxxXkx~xu!My:kyaVz3WOzL{B}{8z\{.r|"$|^V~|~[|է|V|J|4|K|O}|_t?X|j׀|a}V΀j}&L]N}PB@+}8}-}#H~s~~4~#~0&Ƙdy&Z/|′sgvj(`lUKAk7p-X#w~~e}f L珓!,|LكriZa_3UW;JC@N6@, "~g~'HO}ˀФ~ɞL~\j~s~Έ݅~{rF~h~_(~T~EJQ~@&~K6K~,g~|"=~H}r }0ڣ}Ɲ}H}Ӎ~!2~.{4~YLq~;h3~^c}T*~ I~@?~.5~#6+}照!`}v|L |ڢ|ؕI|Жw} qF}?S}z}p}gh}]}z S}Il}?}'4}i*}J|ņ{݅N {|1|/:|Sۍ||'|4y}5p}4f}}\}9R}H}#> }3Y|(|^|t{r {{mwv{0{~,{s|[y|oH|e|[|Q| G|=|023|p'|"!.{z{< EzNzߣ{ ({*j{Â}{xD|Iane|[d|[Z|R(P|SSFs|M;|41| &`{{z܉z|}zgϙz ,z@{s{|w{{柬m}|c|Yf|OP|E|:{{ 0{В%{4zݎ$zzud0y֘zz6z {v{l{áb[{ߟX,{杽N{՛}C{]9+{.{$>{Zzzڊ`zKyhyȑyƮzzuu{?dk{-aT{W{L{B{[7{-e{s&"{7?dx5uyn+wy!_z+szg ,{^vXMvϓw=Άw{wyxmgx]]/yzSFyIA1zM?,z5Br{(+h{i![{׀{ 1|=_]{{G{;{Te{Wxw,{vo@{f|\}|7R|ZH|>r|4&}*}9!F}J}B }U T*{Kqž}h7^TRJA0~֔6~S,~f"~0} [}d|_~~΋~׃~z#qpg?h]_US*I~皭?~5~p+U~>!'}}K }d}W~Nː~K؊~1~ky~ũ~p&ufB6J\J(6RYHz~Ğ>~x4G~R*~-=}t^}jc }q}]_;}䶾}ݴ}Ͳq ~1x~po ~߫eA[OQI~饢GX~i=t~f3~D(~)y}씙 } }1}̛Đ}h͕Yij;k~Mlubnlqo0cp9YqFP6r`F쇀s)8uv%vmev Yw_Pm4Dmnne oE}>p.uTqlyr brY?sOtFu<"av2Nw8(Jwx%xG yq_ތqҍWor\ދr}w8stt#ktbuXvVOE wEgw;xY1\x(.yOiEyOy zBZ=uғv Q=voɊv}1Kvtw>k*wbBxDXʇ(xNhySEy;;az?1z'gz{?z {~zTzo4zrz|WUzsDzjnza?{LXI{Nm{Do{:…|91.||'|ꃚ||c |ɘo>|~9~v/~`{rn~?r]~4iF~G`ņ~bW~eMy~JC~;9넺~W0T~o'F~kd~Fe} ށ~ 5đ|SbLzqs6h`၂VDžQJLC9R`0y&P4 肟 wVx*vĂ.Sz"݅p߆Ih _(IU񄿄L>^B8ƒӂ/X%%U[Jh l%Mb pndy)pcg^KM^mU@3Kن;B8gS(. %f0~ s͕jfϏ,TÎqy2ioTfʋ]BTvKc A+7._ $3jBB"}SJ}#xjoِ`eۄ_R\̃܎=S]&J<@ꂮ6‚k,΂!%#Q@C*3e gᙶzjwniudڄ[RtI?Y5p+Uȋ!kGHrWۄmOQᇗ.h,vۄBmEc#ZIQC֔Gނnf>v4{* j b YM𥳌ƒߤ'~Ǡu׃l\-bgZY}PF>=Δ%3w)N"IϏK@q ԇ>EsP}_tdkmva1X`N̂EF;1UI'Ձ$ʑڀq^ [5^)@Ê΄n쬶|smjy4d`CWM΢VMxUD.:v0kG&yVГFwo  _ڂ q{Ȃlrȭ-i!_VQ LdB9B/-H1%7!NcG߀QDڔhώq!itRj_Fkex$lpbmgn^ooU5pLOqBs 9?\s/t&3ua.u톆v yv)mlUmGՑm̑nwÐ oopfэq]rT׋skK}tUBu68gv.8v%|w<w3w %x pǍmq?吻qÏrUwro5,@"B~dN~ɇ}`?J|}%tbk`>5+ֆ "9=Ƅ*'9|Iʼns׊MWj܉ˇb*>Yi:P|Gpeg!W^U}LaPCL:8$0?&Oh< jX NKԣ)4)lxl@o݈ ^fכ]I T_̘~K+3A8˄_// %τ}owi2 USA;`^ wcnևĢ$eC\u lS>I!@7i:-|q$R; hN !e(.\4H}ɫWviGmЇdi[gR(VHʆ?w|69,Z"3z6k΅Zq& Բ|uwdlԇS3cAZn Q%_G>U4+c!Y:+P+h}1i.jyזck r\l:jmob@[nYoPpGȎ>q>r5ss+tc üuM Tu~wlXT1l߀ MmyCHnZq"oRiƒpLavq:XDr PAsG"s={t4Iu*:\v` 1>v-xw Fwx2pDpYqGyqqrwiI s`sXtOCuKFv =Fv3&wg)w x\7xx ޅx]yЕtgtuyupq}%uhؑBu` vhXwOwF:mx5oހf^gVMlD$'|:ˊ11o,(2KIՆ т~䑹փ(}sv}n~-f bC]W UAOL]Cq:T1@vo(bsGYچ /6 QD7xU}Twv Am15݈s_,c]#z~qX ؂ZZCM}yArߝǐ{`ڌcWYOxF'=C!\4^c+O"m;bj}!姁~rxiWqh8_ËVڋ=8MD+;i2a)Ň̔!tu E9ȭM|GwMp(LgË^Uˋ+L܊oC؉:#1mG(a QŊF.؀]){ҍ'vSw0oDfċѪ]TɋK⊕Bω970`'%\씬0 ʄ Iw(Lh*hytiršjk(kdm0\ nETSoQKpZB_q\:WrV01XsL&-t }Ctt VuwAtk$ley*m%rymk-Doco[VpSqKOrB9s9,Rtu/eu[%vve8vx w^d/yo~p#yyprtqbkJ@rc. r[Ds\SitJtA2u8Yv].sw%6[wswXw xnz1:s~ϙt yts7itkBXu)bՕBuaZٓuS%`vJwAew7KxL."x$yLe#yvGyk ʇPzHne{U ax ~ʘxx嗺x/r;xTjexrbxZ%xRycIly@;y7czL-z$<{ {#{ ̆{ЄI|O?|A~|x{q2{if{ai{YR|Q\"|IH|h?ʎ|j6|m-+|#ڋ||؉| }R.6}(Yo}w-(pJJ]hI5`͓5XPʐ9Hcc,?T~6R~,~~#ы]~n~Q~ ~b~؁΄|vʕvqoՔh`pWܑf@OŐ"Gb>l5<,#ʊ)V ̀GƄـޖR{򕈈vSʇYo^gI_4%VyN…FN= 5Ӄ+n#c(ۉ4X k5Ӎ ,(p$ԊP!ƍ sb3xPjtpoTh``W=N􏆦:FgӤ=4.+֌VN#7݌ `D}xgxhq irkpjdvk]lUnNAo&Eyp*=q-52r"+s !s܏ t͍t[Ou^Tw|wkLw\kq~lk:md!n\oULCpMkqE[rq<*sW4et8*u!1cuurMv3PwUIy{nw+oqypMkpdMq\ErMT٘sM*sE Ht<}uZ3Xv)ؐ*v wH5Zw{Dwщxz{drwslqsk4t`dt\uTeuLؖOv1Dv< wl3 tw)x ]x4y_y:vz({|~hwMw&wcqrwjowcb1x[x2S8xL!xCyY;Hy2t@y)?zd zzUz#>{d|{z{jv{Np{;j{6b{EZܘ<{WS4{Kp{CS{:\{1ӑ|(z|\l|ፇ|g|8}#}zu%oO~i)-~aǙ~Z&~Rs&~J~B?~:~i1d~:(;~sx6~R~~y~셞~yuToch͙zUaaWY$QIؔ3zAՁ@9W0ꐆ'ۏF݀ՍxFMy0t ohhY`ݗЅ~XؖP-HԄi@͒8O}0Y''\3bcjI'sx1sTnq4gg`R_X$SP G?ܒ87ґC/ďڅ&nBhV愢$т`N vrϙmgjj_ W["O.nF]> 6׉2/$y&;Ë@ n 4#vb rrGm.qf^ݖVqΏN2E8*=ۑ:5򐸌>.Dw-&D׋t ʉkۆ^ku q@/l -AeJN]oUWMLDۓ)<4w,Ǐn"%y)׋T ɆtPCpJ>k +d+\8uT6c(K1CƓ(;3[(+U$)U8Ea * NsfYo i痷Rc [u.SHJ0OB69:c24)폥"ؒ*Xыn χjۀr!^mژ6hǗb)Zt4R =Iߔ;-AJ79R60 (ژs 'p^lĘigȗyFaBgYrߨQ >HH@g8\^/ܑ@' hlrz É-eI؀ug9p{h%i[i#d jG]k}VlOMmG"n?2o8.p/7q&Xrysf`s t(5uPwt:joYkqiؤglWcƢmT\)n\U]oWNfpTGqB?Nr*7=s.s%tuE/u[ tu*wO%ysn4o3nj,zodpz]TqBUqN/rFs>ܙ2tL6^u-ou$vВQvv w8VxzsWrorj3sQd s\֟t5UJtMԜ-uAFaku>v6Fw"-w$|*xMxE x ~ydy{tvoWvivcQiw3\"wTdwM8x6Ex= x5yP-"y$uz(ۑz[^z< BzL{Z|sznŢz~h(zbz[fazSzL{E _{S=={x4Ֆ8{,{$|đk|@| |D*}G~r΢A~}mʡh~@g~a͟6~Z}S@Y~K䚑~DU~ <c~4[~, }#Œ~+F~V6~6 ~r~r mD‚CgaXZ.KeR߁YфQ|J^/B;:ᖯ}3@ +8傠"N~ ́<p7lkџډfžS`NYsVQO*I~gAʗ:tk2Z*F"х6 HhZoo#Hkf'/_ÝWXp+PwHT@֗ӊ59O1܈*t"ZP-܆L؎ уqn 9n-9j>.ee-q^WO7G1`?ח8E0͋)=S!ő4>^ ZmQri7Жd\ݖ]ɕVxN-F>ΗÑJ7SF/_׏'Y!F; tƉ 6lagh:cI\UdwMkSE)=ї˕B5k'.6&w '>KLf v< 3k3uCg.b"[TWm&LzVD<З噸4疕x- @%V]ZM 勤ň傉oj5e~axpZnSJaCKsPC!;Ҙ3ߖǜ+\$QI6 hjds_g9YgRG^JSWB<:12*敞":  ڏ#T.Q lfgga\h{\:iU㦜jOwl*H\m`ANCn}9)o2Lp*q ֘0ro\xoU̥%pNGqmGqDrC@/Os8[s0ߛbt(wXutv7`v>vgw:yt{YjqUfhqbRr\/sUxsNatG"t?ud8Iv0hv( wnX=wxCxOyŌzA| keufiua0v0[vTףvM%wJF|'w?,Ox&7ox/x'yf3 yוz!Vzs{A|=}kCyfky`yZyT kz LzLEџz>z7 {/l{A'{y{ו|;|m搮|Œ}eN~j*K}e{3}z`-};Z-}4SK}BL:;}dEZ}=ޝy}6^}.;}&}}u~<~~x~u8iy?d_˥rQYRݢrK̀Dh瀚=&s5mF.׀&YcP3I%ǀIԀkh db ~__YAyR];KsCz_/‚ ?gʦc-^㤀Xã+QܡJc1hBa;v4 ,əUu%~ʄ̔oI'AKf̦bZ^c$lXI΋QMpfIB D^:3-܉3, 8z$񗣇r̓ԅj{U\eۦ;b$]ᐒWhPu=BH̟ގA339G26ጉ+<$Õf' nӊ:ӀdؖeaЕ\|V2j#OLQG@281=*U"旰LlD!FnPXcb`[^UPN:F?770F)(񙂒$!ُjj=㓗2Έ=Džb*6bȥ^Z2}T@M:^E2>B+.6͜ܙ/Pd'ݙT ( lm 94슜KЀa*]YpS <L>Dk=FL@5ޝ.\&̚ _k -gbe NIvӀ`ǭ\ X"pR4>-K=Cğh^XiYŮjTckNlGn@o0: [pC3)qM+r^#sTttj YuQv,yp}AalG^NmZ mTݬ-nNg(oGp@q9rw2sb+tQ"u0"Eu\v( 3wԕ xz}ap ^cpZ=Uq TnqNNrGYs@@btt9h^t2'Yu*evT"wwww Ęxz{ }c41u^uvYtTu|Mp vFv?w#8w1`x)7x"&myyy =BzBy{|}bx^uxXxSG`xLy1E榭y?y8z=0z)Bz!p{&{ݚ{ b|Y}D~~aU|].|kX6|R|2K)|cE1P|>ZH|7qE|0Is}"(ٞ}A!Qr}X}њw~7 T~kJd`⭞\aHWիRcK_DQ=26/&(T}!<^#} ki`5 \݄WmZQKXD= F5.ܟ삽'Ǟ;i +E 𗰂mot_U1[~V9QFJ+Ctg7̣20!)W"۔7cgu )w֑߃AY*Uͥx~86y 1y*y#dzO zVi{F r|A՜|D}~X״{T̳zP%{zJ¯zD{$>{7{0o|@*/|# |Ң|BO} ~K~uŜ~>lgX5πT\[hOװJg D.9w=M6,0S*)C{"pKx X܀u.&>1W:Sѱ܄3OsgIvC>= "6Z/(ƥ"tC4Ǡt %}_qcOV˲S1NTIYCD聂1qQԲgNtJfE>ˬ71?E*И#ҦA/-!% iؚKܕ"@rKP`ML1IIȤD$F=ʬj60L),"즺Ď.2v ѝH -!BOnL=LHUC7hl<լΦ6Ji/jП(˨y"/2 w~ s4 i3FVPnngwboiojpwlwq:n-qoՎrq*s6ruussitt]uuR8uvFvXwW;kvx//vy#vyuzȏknlompͮ1nqϣior՘,pršq"tUqv,urw6is$x(]sxRHtvyFtzL;u\z/ur{#u |ct }2itSju5ku.lvnw,o/wvpxapyuqyiIrGz]s{0Rs{Ft_|;[t|/t}#tx}s~Ɛgzi zj5{Xkh{ol{^m{n|Wo|Btp|hq}!]YrZ}kQs}Fs};[t.~*/tM~n#s~s {f.Hg^hKj kdbl8mntCohp]qQrFs9;Ys/s$sDr!|eݼVf߳jgJ8hAjڕk}l`!mу*snhso\pZQ+qق F,r;sG/sm#s=O"r}=vcݻXd8eSgNhԈKjh։kH~~l܆sJn=go[p'PqAdEr-:r҃l/>s #rۂr?tnbNźcj6dƎfFgٌԔKiy+j)}lQrm3}gLnT[{ocPLpEbq|:.r"N.rk"r@+qa.:b_c屮eAHfkhAiޏ}6k1qlkfmZnGOoۉ"Dpш/9wqp]-q!qp`-ajob_?dZ̝f gÔi*)|j~q1kAelZpnOo&Co8 p{,/pZo\o݅_K_k`.ac^eUג_g+hS{ipck"el[YmyMn9_An5n݋)nmqn<^}b._ۦaPWKbd둠fZgziIojd>kLXl͓Lm?@n4n@P)m@len#]_ذ2`bPd%e㢷gKIz)hnivc_kWl"lKZlO?m3m%;' lkxl6\j0^0_گa4clJ/e4fyWh *miRvbjWkJDl =l?1lB%k{{jԏ 8kv[ܷ`]>^/`k[bbwdzf~xgolhajV.kIXkTcCSd岚vf^_kg¬4_iTMj/Glj:j@.&j!iP jS, oDfr*gBrrhѳrjLsxlGtmڔtloXtp~"urOr}vsfvt[(vuOwcvDww9xx.+xyj"uwzGv{o_n dpnpp2qqCr}rg$s.shst}t^ur.tvfunw[$uxOvtyDvz>9wz.w {"Rv|hu}+ms~Pk(~үl~Ҧm5~✿n[~Qo}~lpq |DqM2qr"OerrZVsOtD#u9u-u"8u,$t}W5htijkуcmgn*Նo?{pApq5e[rCYr N}sՁCt8t-uh!t]at)b,gGJh4W-iHjkȇ^m܅n'yzoM0ppOdqMCYrr{BDsC7EsDžg,s ss me .vftg0פYhj^xkmOlZymNnynȌFcAo*WpފLq܉Ar76ys +s">rf\vr%deح!fFgi6jkYxmmn"b~oB:WSpFKq4@qߊ5&r7)uq p`q!c &\d78ewCf񛂙:h,jkSswlvlm*aniVoJp\:>p3'p‹'mpP boyphb)cdѬ/df?gݞeivUjw kݘkl`nUnIo =p 2pڅwqElr~asWnVRt%Kt@2uM5Nuۃ*DuuYup%iű7j}kclmꊵokp Vvp߈kq`rMUsvJtH?tl4uC)uBtY]u;hǔBiȩjikɐ\m&XnH$o;:up%Dkq V`qGUrӉDJsl? tP3t(5tks{.tZKgÙhitjl?m[n$uo}j'pj_6q[WTOr>I4s=s2BsR&sJqrȵffΞȯ:gϝ1&hFj'kDl閲m$t9nߓiBoΒ^gpĐxSqGr.lF8~VmQYs]nBhKo.]pRqpӑFqqQ;]qӏ/q΍$Iq-,p /po4e@fR}gKVqhDnj( k}lrmg`n\oOQdp@)EpH9p.XpӐ"p`soo oPSdSev{fshS}i䇾k w|lqm&f}nv[oPToD~p8pB-cp!oBo o_Ͳ0c竤d˲Ԥbf~gKi j {kpplem{ZnOFoDkCjo[7o+og [nQl_nݍ odıbdܣMeTf۳-hzmj{ kLolYQdmOYnBN:nrBRoD6}oR*n*m” nՌp ac*Mdwfgڵ/i$z.jKnkcmXm-M.nA.n5an)nmn7n rxiy:fy7h-yPiȠbykBylٌynPz(ovzZpkzmr<`zmsUztKzu@2zv5Pzw*`z~x6yyhy7zvlw6m9wnwoxLpxr 1xs.vHyt4k]yNuB`|yvXUywMJzx9@zy5!zy*'yzy\{Cy{۶dtrmugrusV+vZt~vtQwguwvvuxw7kxQw`8xxUjy ynJy]z&?yz4y{)y|y2|y|hs=wsw{tIwltxouxъ_v?y)vyuwzjwfz_w{1Tx?{J(x|?]x|4x} )x}ix8}Xw}q|r:|r|Ws|vt[|؉&u"|~u},txv}niv}_w}TOw~Ihx ~>>xX~y3xw~) xS~wwyK$pXip聽0qTlrJs+|t ~1tsu"ieu^vYSvHwz>wր3dw(w}|wLywK{]nMopJt]ctΆKRuGv(#=v2lvфI'pvu^vױlum|!nE o56p=ÆqH|^rqrgVsg5\t):QtTGuq!N2q5'p⚯:oq='(sѱ|f|gL|im|jב|l^|m}6|orS|pRg|q].|rR|t'H|u?=g|vE2|kw1(%|x*{\x*zy8zl6zmT{*n{Wo{pF{qt|{rr{sgw{tw\{uRu{vG{w=3{xb2{y-'{uyzzr {<{xqISyBqҡyr~oys?z+t zvt{zuqzvcgzw \zzwR{xGo{Gye<{Rz2T{>z'z{DzH{y|=w>v@wvQwwxnw}xw腜yWxE{yxqbyyCfyy\!zzZQzzZzFz{b<z{1z|L&zR|y|y`}[u{v{d(v{aw){*w{x<{zx|,px|ey|[vyh|Q y}FKz }l;z7}14z0}&y~"dy4~Gy+~tr-#tပ~u]urvȃzw4ywowex)ZxPXyEy;y0y&4yBxys,vrst)t̄"u Uv;yhvgov0eatWVu_>LuAv86v:+v ! umptL t…nvo"pXoќpCEqruqs6Cks`t)$VLt‘lKu<@ut5uP*upStB-tI t5)mp=nto?p-+Xq%5~rGtrcj#s>_sUJtGJt?tU4du )t͏ s@thsՅhmqʡHnhno _p~.qsr8i5rӜ^~sIT/sfItIQ>uty3t(tOsScsҋs˅Vm mHn=o3xp(}aq(rqբhArs]yrSs+HUs=Bt!2at1'xsdmrۑ.sɋ tjlm#%.mɱno(|p©qqgHr\prQs5/G3s<sʜ01!s֙&7s*rrKstXkl&mCڎnFpoM{pdq q0ufNqթ7[or\PrmFsVP:s0sm% s>r.su #fg:i(%ejt;khmOx3nmocvzpYfrJOO~sD~t:~u01~Ov%}wT}0wV|xu~kc~l~ ~mr~n~o~pw~qmi~rc5~tsY~=tN~uDh~v: }w/}xl%6}Ey|y|1zD}4p}Oq#}rqv}r~J}sJ}tv}tl}ub}vwXm}mwJN}bxC}ex9N}Nyz/}z $|ze{z {{{u|<{u+{v(|@v|v|w`vP|wl|xbv|yX |yM|z&C8|z8|{2.|{$L|4{J{q| {:|bzzzYz zz\{zj{bz~j{zt{{FkW{{a|{{Wm||(MB|(|hB|K|8p|P}.A|-}Y#{}2{!} {(}ԧoxyO~yk~Ay~߇z?~~z~t~z~jz~a {~V{M~L{~B{~7{-{&#b{|)z zdwwxIx:Ty6}yty݂cjy;`z.V4zKzpA'{8V6{^=,{K"zzH zev7v܉wK%FwɇxS}$x؆_sy iy>w_yyUy܄^Kz@@z6zP,Hz!zU$yr y݁uyhu =vZڏvvw~|x:rxKix_.ẍ Ty6;Jvy@)y5z +Uz y}x x򂩤 t/GuȗurIv_v.{w`rw-hEw1^Zx45T.x)Iy>?yYt4yh*%y8&xsZw pwsԝtAktufrva{9vǒqDwgkwe]|w{Snx0IIx~>rx3x)8xK pwNwPU ew&sĜsEBtԍtřXu}zdv6Hp]vfcv^\fw5RjwYH w=Dx2w'wvڊdv *vrs]esČt=tOyuovecvv2[GvÕ}QKwGw^<wvn1,w^K&w JvCDvv r#rnRrsڂtyxu@nudWv!Z!vf9Pv1Ev9:w 0w(%vuvu{vfqTr%r~sEthwtڣDmuS+cLuŸ-YvNvlDxv9v#/v$vgMuLvMv„UqIuqr |rάPsvtzlutbCux]Wuҡ9Mv&CIvW8vd-v[#\v{u@$vbw ϝ+pKlqNq5r\s1rut!ktaEu9VuLu8B+v,7]v,,v#R"4uʗ uu v$x &HfiĄgrkhҎ$j-k|҃wlrn"hoR^QpUXqK:sAvt07%u#,tu"ӀviXw7j~w͢*k7klmo{6p'rVq;hrL^XsLTtWJǀui@x[vb6)%w6+w!`xx~x ~4yEop~%|q#Vjq䄈Xr{NPshqÁ t>h.u^QluTYvJHwt?x=5x+Hyo!]~y~ z }zÀt tހul3u߄PvLzkvqD1w=gw^x~SWy IBy?k1z85oz+~{!u~M{[}{v }D|~yߛ)~y~y~yɂ(yyfOz0p0zf~z]R~{ES?~{I ~{>~|;4~|*~[| }|I}G| } }R}N~ĚY}x~]}}݋G}}݂~}x~G}o8~<}f~~!\~ ~6Rp~"~!HX~)~*>2~3~Z4K~(~*~}~ }~|~ |~~|"i|U|=|Ђ\}w}Wn}\lem}EW[}K3Q}tG~}=G}À3c}ƀ)}}Jo#|D ~|{{U;{ {߆K|2w:|=m|d|[%|Q|ȃF|3<}*2}.(}|HL| {܁ Qz)~zo`z={ {{hv{‰mX{шic{݇Za{P}|$_Fl|]x6x}ȇxt~ywtzjz5pa}zF$WzbNzYD?z9z.z$z6 lyzygy`wengwwꝕxr}xsyjyj`qyVyQLzCz98kz8-z#ryÍxmyWy:v襋Nw wfjw|xryOiyU_MyUgyKyǖAy֔E7kyޒ-@yʑg"ynx y.y7Xvyvv=wup{x r xhy^yGT'ymJ]y@dy6yQ+yx!y7UKx ,y&yMRvˑv.vnvzwqxYgx]y Ry1 I'yB?2yG4yL*y> Ux|xg 0y5y–$uzu{uvyw;wpx}fxr^[xȦeQxjGy Q> y3y)hyR+xɔxw 1x應 z}fJ(g9a[h܇iۀJYk2wclm9mdnZrpQWq@Gr=:s3߂t* uT ' ulvV lw ijɖ#k(lumzG.nvom@(pcqZ 2rPsGt<ꂠu2ׂPv(؁w>w$w x_oPoюׅp~OFq;~Ʌ rurlSsc_tnYڃHuKt*,t(u~uumulSvvcŁ]T݁{r!i0׀|`ivW1g\MWaCqT9tS/ŀ7&1ya ~o]ņcz!}qg6*ho_⃔VZă?LB_8ÂB/$(%xm ~< B}~~ϋ Ń62z`fq}hYO_3U)L/}B8".X%#~у~^}ႋ}T}󐁑Z~H'~C$7~sOzF~Zp~ًg~~^V~U~.K~NB&~}8~.~%&~O }΅k}V|ւ`}5ܐ}`}}}ty~`p~Kgf~7`]~^TU}TJ}=A};70~k,}툽# }}||zc||S|ݗ }#x}to)}“ze}1\}S4}I}X@n} 6}+}sP!}*| ||32{|I|I|x|n_}Ld}K'[}ER}03H}"?E} 4|*s| |^| |5su| N{u{P{|#?v|mn|c|>ZO|P|GM|Е=|R3|)|C|_K{׍ {\|C {{X{{<~{u| lz|[b|xY%|O}|E|<|g2~|R}(c|M]|{ {ЇX|z"mzUTzªs}{&t{kx|'a|VX |wNO|yD|Z;:|.1-|'0{+{Ǔ{ {.|Twz%Wz/@zN|zs{9jt{թJ`|LW|B|M6|KC|1:|/{%{ݙ{{ 1{0{}tf;gیohAizzzjq7l hˉomI_pnpVoMpD r :Ms0's&t[,uCu vs+jwMhklly}nq-o$hqp.^q2Ur:L^{<${pxy{t#{]I{J^|mvG| 5{j{v܅{m| eW|B\~|uS|I|@B|6B}-(}2#Ԃ}>7}"{}0},BÌm9A6~xul愰dN@[Rw|I0:I? 5+,t;#\'s~J~x~~KF΅A$}.uH]l/cZЃ,QӂقRHv? w5SYv+т'd"j݁1ׁMԀm=kwp[dxm}mt\)kʃ@c7Z*Q,92G>ׄ4Ã+y"RNjր@BL񂵌} t kGSbfLYtPv.GTwa>2L4k>@+-!"$݅bck~Ƃ#.N6[| t  j !aЍ5XEO2QFM=Ӊ\3) Dgqц URl ~ÂDKnSЃnT{ssZi4`bWNy׎Ehe;4*0ώ&i` ~b~J:/n;ty|q$OgΚ^UWL AB/9~0s&h'A`#~ ~xr~;H;pxp4ft8]YcT1FJҀ A 8qm>.9$.8~ԋ~z~djR$ELLlwo ӥe!\S+IV@ac7#A]-c#~~ɑr~~|m~ŀ}T~@~ڰP~~ۮGv)OnwQd֨r[䦄R Hã'?9{5% , ~"f~+~6~>V~fELf"h|ci3tjwllkclZ‹nQo:Hph@q6r- so#׆t$Mt}t bu!?j,jȂ26k{llsmknboZ)pQ6qH'r? 9s5yt+Ňur"UvvRvwUn1!in:o\{@CpsJpjqbQ rqY2sBPOtGkt>iu4ć#v*㆝w'!Rwwcw#x rv&rՂ1sG{0sstjtb:uY]uPtvG>w+=ԇw4Cx[*K'x yB"yy=z6www%zA)wRrwi(wa:SxKXxOއy!F0y= y3MzP)z !]zz zOw{0y{dފ{{y],{q#{ hH{,`I{sWՇ{O8{E{eXZ5+"&yCHg ͊]#MIۄJȳ.rS~ja3X%LKOE#=2X4'*l!%?w`~8xdqA3iB`#XWMkDԃ;ԃ2Ԃ)X^ '܂e ׁRYTFl}rدhwpHիg_'VLФgCǃ: 17([݂. TĀf4f|,guhnRj0fǑk~^kPlU)mM`5݇e+,ڇ#솃 ބv΄8 ۀ(|ÎwZ]pNEhR|_BV􉍋 N_؊NE%=~5+j"_-!K N1w];x~{ދzvyoRogJ"^ڏUډ4M9Dwuoqj'bãAZ>vQMHƇ잋?i 7"қ#.Y<%iۖJ`EJ&V h){vH55pȬcipa툆fY5P~0Gݣ>i5֟+-Hj$)ZÒ׃\ -YbSh!f { 6ftǙ[gnhgĖi`kkIXĔlqPmH$Ln?o7;|p-[,q#p*rfssP tD0BvAyizqj/tjn-kfl_n WÓ;oOƑp Gwp>ڏAr5r,_s"t3t5et+:u"ZJvDv͉Vvņwy~Akqzqtr'nrfs^sbVߑsO5stFŏ2uo=΍v(4v+wt!Њw>xzx)y%zDuwyוhutumyvevI]ђvUwNwE뎣w="x`4x*yS![y:y:nyCzuc{~zyy3Myqs4yklyzdMy]^yU>?z M`zhE2z`6;ˎ_.$)%׆ ?Swh"r&mʚff^ҍ>ViM╷EA=$u4ۊ,$ȈZO& 8·yAvlq{[lRze~]U@hrL܌ƚDm3;3C+"6#@OzO ˇɃ8ntcxp#Ϧk?mdrѣ\~T&BLKCW,:ً2Kʚ>)Ί!˔| ˇ4!Vs:Xgnꎧicj[L=S#Jw@)Ow7 x/\xm&mx~y; y9 !qy z|#vߙxquxkǘxex^5yVy7O@XyGy?z$7&zV.z%{OzR{{ ({|+}+u|p|jԘ9|\d;|P]WH|NU-|^Nk|FԒ|>^|6^|.De|% =|`*},Ɍ}# >}?}~Jutp%tjkc\UMtEE=Ґm55-~$(]Z ,#fT PtSلoTkiڃcu샗\) :TkLЂD͑u<ꐕ(5-k$2jL]  ݀hs,unۈBiEbh8[SeKВvC`<? 4H0,0 #ύ dn7+C oEri>?q"ml2h‹b[+qR_J4SB;3~r+#sjcń W/gp+mᐉh0>aZ<ǎcRIA,:ًb2wɊ~+# fϊׇ7@= }XԂpfܖl-Q_gǔ`^YjPH瑯@ېʏ8͎1))"Ƌ4dɆ ԇ\Qoe5k fems_;̘GW#OGё?7͒/玶c(2!A̍Պd$щ bXقtneiŸd5^'VʒNĒ^dFz&>:6՗!.ʕX&эX=`| ·'M\l_hrHc ] hTUϠMHKE{ =Ɲ95集-z%ޖa^2ڊd4<͇f>kzQgC%boک\;TL7D{e<ס4,_%$Yzw:WoNM%peYk=f1e\g`_$hrY/iR{jKM lCٚim-7.ȁ/C("N &vfE:䌨ˉjk/fǜ0aۛ[_TMEsE=ؕ؄6O.<'PMU ڌ@XIGj܋xe#a=QZOSSLHG9D∢<散'5bR.' &͆b%ׄ7<W\hze>`mZ S K\ C-;敇4a@-*& Џ -4TᄹϊՐB:ٕ}43BFU+4$ȑi} ،dž' [!dHg)xb^/G#WřoPϘ I0A}w9ҕ~32+U9*ȓ#})qbz QsFE-3 e㛉-aܞ0\@VCOhH z@tuq8̕1oz),R"8 4P9']しd`ģ[̙U'1NPGy?p}7̕p0(}_ %p5 mG]9hcua_qZ֨qTM?nFs>vq6ޕĠ/&Ξ'oՒhp9cba aoAgdbe]!fWѦgQCi*K^TjeDpbk=el6)m.̚o 'Fp͗Jp(q5 Hqtru?xfK:ga&h]iWAjQ$kJmCn<o5[?p-aq!%ԘrrʖRs# Ks<tw}zEekFaQl]elWĤ`mQcnJ oCZ6pc<@q>4r$-cs%>)s}tt u{svxzeunago]apBWpQ9qJ6`r(Cr;s40tP,}u$ݗul2vRNv u'w/!x;,oyg{|fҦ&s*ais9\XsVtP`gtIyuBlu;Cpv.3ɚv,C2w;$uwIx2xq yy`{$]|[f)hwOaGw;\w\VD@wOwHGx4A̝x:x3]fy3+y|#myz)zi ~{ T{0G|Y}be{`Yz[0zUvzN۠V{ H{BA{y:{2{+9{#c{ӕ|C씑| 璀}"~}vr~2y~dZ,-_ѣi~ZТ~sT!~lNY~YGl\~g@`~m9*,~k1뙥~`*8~B#O~'uI~X~ O79&]VcF_A؂Z\WTu M՟bFΝ?K8d܁V1.U* "㖔;, 9Z 9&ڀbA^ytiY{S>MSWF>՜7n0b )c"gO?ҔHƂ .B[Lm2Xa]ˢ4YTSd[LEjp> 6w/6(!ז#-;$ A<ǁP߀5"`\⡻QXRGKߞsDGQ=ȋ5i".'!  f Ə؄׃M3)_7h[סgWmy\QJeJFCq(<K4w-&ՖlG SRƒRM$oF?k%8-롓0/)"[#"AEޕC  m#^ccY[dUeO̫4gI>haD0i= k6 l90mn)n!םospcC[paq$@stv{];&fY\gU 6hOuiIkClC<Фmf6n{/2o(p T qrT r"{sՓux}_\j)Y6jUSbkPlImCln&x%Νy wCy_ĚyvgzT v{V꒜|}}~y\`zXyS7yM;yGz+Az:]'z3k{,{E%~c{pE/{{^?| bu}G}}~y[Z~WzZ}R̨?}qMN}vG 7}}@r}9}2ՠ }+~}$}}^X~B4~,E~!ZĂVȂRdLզ5FˁI?ԣ798i 2݀+0?$glS 昛V 5IZqRV?gQGNL_ۅF w?68@>G1I*q#͜X'0љ΃֘r 9RxY .UQqKE1Z>҈%7y+0q^)#t O;R =Xjb`X"܎TPKLD"=6?/(b"@VXQyShW@{SxOnvIե+C$<5 .'ÞǙ5ʗP#oH5dGVDf>,982!1Ƀ*)$_| 2ȃܟf 3ǀeeUPwvMOGInaDUt>07x0٦͇h*'##p Ic 㘑uɓB=OHoLxH[C?=jҋ6xo0ʋ )G;"ȣm5؈Mنq ܛO}h݀NK` GBQ(2,4k%af/4␍1 P $qEsJ %F^C7˦>?|t8@%1¨+I&$ϦCax17 pCE l!dlfeLmh0 nioRkCpmmpn}qspYrr"qfwrsZstOtitDuu9_ubv-usx".uxitbyhkjlղck0n#lBo,mVptnWqo.r}[ot0qpuMfGqvcZrQwBOs xDsx9rsy.tz"Xsx{r|@fqwhr`ibs)js읤ktmu} nvC|owqGowepxZ|qyOWrLzDErz9sH{U-sU{" r|YrF}dwfwbgwxu]hx'j:yl3[m'lډkΈ&m} [в\^vR`7J{b$8cU-i!g֔-h m5hXWZ[]*_a]}brdQ gBe\=gQ-h#Dh8IhE,h{ g2zh oWf'XaZ\~^H,`|b+qcf?e[[K.r!e@,rՀf5/s;h*sdsF\t*LdBZe]mtfg9ijnjj{lGvm7 lnF`ogaUpsJqt?rBw4rG)rǂ#ar!rcd4Ũ,ej_fhn0fi򈗀k&v)lSkHmn`AnCU'oJp?=q4\r9)Hrq[rya풴Yc;dY͞egzi΀)jGubkjl;_~mԉITunSIwo>pԆ3qLR(q<pCqqAE`"b\cf}dfKh?`itjȎik썛^m&^Sn@#Ho<=oB2upP'o n7p0k`Oa5b0 d+eۖ[g~h֔ sjhkB]l}Rm GdnG;n0~n͊%nK#gmn__Fu`qa֟`cwOe/f'}h*Xripgj\kĒQlFFmj:mӎS/-mэh#ml׊ m숊^_ӧa8fkbأ]edf>|g{qhŚfi嘬[kPk`El9ql%-l͐J"k l bmQ]̯L_S`ab/Yc2e{fۡcph&eiEZjp;OkMCk֕8 l,k`!Mjّ?qkq mXa\:T^C飓_Qae_c-Od稰zf5ogdhYi9NjBk?7kqP+k3e i(kK oR\J]Gm^7`Zebavd¥fߨchKXi[{MjYu}3Lu$~Y(t~ttSiIij3k/tlXmn~otpiaqc^wr>SysHts=te2t 'tw<jsS6tcgޅh҅'/i؄{k #l]Ĉ#m}nTso|&hpm]qkRrPKGs0=#sҁ20t'ts)tUfgVg]hg;jґkbUl}mrngo]ptR;qGWrxpl+3pl(dlqBkjm.r{h8^ʽw_غ6aȓbǶ"-dFfUcugjhܫ _ iT`k IPkϣ=l242XlR'Ll w%k:m " ṯNvcӫvegvg+uwFhwjl(wl}xDmrxoh#xpx]xqSxs=Hiy?tZ=yZuw3`yNv(ywxTxcwxtiȪJtju"k䚧um'Gvnavo}vqrw0rCgwsr]-wtRx"uGxpv=Zxw2xx(@xCy\wz7XwgzΰnrororsMpsq|trzuCs|NutiqvuFg[vv'\vwR&wTwGwx=wy2wzH'wzv{tv{ݯp.t&ptqu=FrZus5vRt v{twsquxfux\m[n؂oWxpnnq0}dhsIiwjb'kmBv]n1[lo aoWCpύLqJAr(6r:2+cr}pqk 9qJ٨fף!g~h ipJk?lu|myknW`o7mVHpKp8@q=5q*gqL%pfpW pÆ!xeҢZfݣ/g桄i+jJkڛtlřjCm_n0Um'^mT"nߗIioz>6oȔ3Co뒽(orn<DoԌM rxi~dn 6ec;f`gهi)f}jrkh-lo]nmf8SnUH;n=o92 oQl'ToV~m;or{hFcWdTe:g؆h6|jqk!"g"l \\lvQmGnw;n 0n̙&%nkDm}\o2t)buc޸`d3f_g{i9pjfkE[KlPm~hEnX:nU/n\y$mmFnu„z+cʥ8zIe6,zcfՖzhZzj Zzkyzmn{ nld4{oZ {q:O{rEz{s;3{t0zu&zvywry}x"wiGVxGj>"xk^$xlyBmyoFxypgnLyqcyrYzsOMz+uDzSv:z[w 0Fz7w%yx8yyMyyߪunMvrovo̔wWpfwqxHrwxsmxtnc}xuLYyvCNyaw*D+yx9yx.yy#xzcwzFxw{st-s^;ts̜7u:t_utvyuv@wvwswnvmwwCc]wwXx5xN,xyZCxz9yz.jx{@##xP{cw| 5w|¨rxps)x/sx̓t{y u4y\uyvfvDzlvzbwzX#wz{1Mw{BxD|8xr||-xe|"w}>Vv}{ wE} q}q}[rw}j*s6}bt}\?t}luu6}ku}av}Wqv}Lw<~BMw~N7w~}-ww~"w~tv~ jwD oă-p}q5&rԈjr恆~sLuKt8;kt"aou)Vu߀LvAzw7wa,wlw"#wmv*k vԀ0RnjJoaUp"ϑqEq~Arԅ't{sXjsi`toVu!KuɃ@v_6v,vg!PvZ90u BvRP{mnLop Rq}qsrris_s UOtl_Ju @WuE5v*vuh?t Cu?mlmRYWn,1o)4p5|q4rqό'hrp<^s RTzs͉ZJ!t?u 4uB3)ut+4s Rs`klnt.63t6K(s㈐rƈsFfIs@颲jМٝ`kzlmJn{=o̕qpfq/\q$RryHs2=`sq2s's':vqErĈBs5gj#vjkgl۝`nz_o% po٘Eep[oq"Qoqٓ G4rkE<3r1Irǎ&rZ}qM&rIYsijQNklGSmryknooSdp Z@pP:qNEqؔ;%r0r0&-qېM=pEqيt~siqcijlkBlcx{nnnޠcoYp%O pٚDqZ}9q/VqH$q<$GpFqҊxt\=hxә-iՒliΊYk 7lj*w}mmnpdbo-6Wo MpsCp8q#."q#pjoא]qGv/ghbӑPi8Vjj@kvm7RlnanԧVorLp!B`p 7p,p/"fp *o Gpۈw=d}cǟ,}e6}ft}h }i~1}k4t)}li}m_}o6V?}gpLi}>rBM}-s68=}tE.9|u@$!|[v{v{Zwi!{h؞|#iΗ|VjW|l|me}e|ns|oi|p_|rU||sDK|stiAa|qu7|_vy,|!wT"3{xzx zyqz"mozjn^zo!zp{Bp|{qr{ri{s_-{tU4{uK{v@{wn6`{x=+{}x zyzy ]z2zעxarxs)ysKytMzt{ztu4rszuhzv^zw=TzwJ_zx@ {yV5{y+zz zSz y]{/ yu|vwQwAwʕ1wwэ,xBxxxdzyHxqKyryy}4wz}*_y}y~~x~ Wy~Ut t>u;͋u؀v\y*w9owp6f~w0\xRxH8y=yc3y)y{6y &x xqrs$_t,\Ctڄ&ugxv6o(veva[wU QwڂGxYV=9xÂ$3 x(x؁"xTx P xğKq:rs*sStwuhnzuʇKdv5[ vQw&tFwvm}]mٮeanWlnoOM{pO rqMgq]rSrIse?s5.s*s| s$Nhr؏ sɈxxxzlmW~.mұZ]nͯzo߬q pgfq/\r3,Rkr$Hs >xsU4 smQ)s7r8rÎ5 skwz+UȁcǘdfaZgʁŁsi[x8jnl"eml[V{nR!pHq}>}r4Ls+0~t!_~|ux5}v }_vghh,imc}uZF}vPs}{w_Fv}~x f{ }xpxgyhyt|zLKs>z8j=zBa3{ LW{7FN{u"D{9{&/{9&{7{V%Y{%]z~cwVqw҄xTxۃ|y\3rxy΂ijz`CzFoVz-MAz΁CL{!9'{c/{nj% {9Fz]zzbIvjvnwiw{x2ryhyG._yV:yą-LzBzp+8z.z$zuWyƃ vySy]u3^vEv:w.3{YwNjEqxZhRx^x׉UyJLyryBkyȆ8Xy=.y녾%3y2xy3xȂt˓ÑuNuёvpzwrq0wpgxx^/x:TxxKZxӊuAy'}7Yy>-Dy#uxIGw؆}xfsxP" t%tcuHuyvmp;wfwl_]w0SwJ-x;@x}\6 xS,xm",wwT wpvwQstdtp!u*yuFoovevc\w6R{wpIw?w\5w+*w֍I wSLv{M w+{xucs:sssݠtwuWnjv6dvrZvėQ-wIGw=|>5wg44wz3*Owr vꎀWv6 vy&r9s?sKktDvtӡmmjucv YvfOv?FuvۘQ. vr{Yܐtq؊q΄r9})s ts誱kHtʨa_u[WZuMzv Cv6:`vM0[v\=&gv7u3dvMb v|Y c$dfOYg|hsTjzik`KlV@nd~c~H[~g~[R~m~_Is~|~T?~~g5~~+~~"#~M~}~F}~\}O~{ƃ2|5?|~|gu}El`}|c}Z}Q}́XH}?,~ 59~"+Q~ !|}π}}X }MH;|0z{OV{~}|u|tlU|ca|υ$Z|鄺Qu|HH-}>}@T5}c)+9}Z!} | |P|^vz$%zuzt~<{Uu{l<|Gc| Z|2P|@NG|e>|4|+|1!u|~){ބ? {肸+{́ynߋxyڐ˅z3}zu{k{zbo{5YC{XP!{qG{ˉ{={3|)|U {{ "{K:{ehx͖y1ky~k|y]tzo>jz%aqzX){N{%E{><{Rf2{u({d{ Fz{ zz{`xOaxMxޙ&{y^sJy▕iz`Q`z{W/zMzNDz;zc1zw'kz،z{tz.k z4{ȍwˠiuw@YxHzxҜryZhy_fz Uz8LzE CqzNW:azF0zb&ezYkyQy yφ3|LzwO҇wy_wygxFCpx۟gyn^FyETyKEyBy(9yh/Eyؔ%_yےyyy IyA}%$2vثvpw*x@woxe2fyw].yVSyJyC@yb7y-yp$yz\y#y2|y ~?vc,vP~viw(wFnwex\"y'RmyKHyn?yj6|yKY,y?#y)cxϑyyׅ9Yj;gFcde~8$g/v6hmjd؇IkT[lRmIɅBo)A&rpx7q.r$Xsfesł,tQ ԁ&ug䈂g[fh4i}'juv4Uwu+fx!ÁxaTx xyyu$-+u)߄/uc{!us^ v jvwb6{vYwPwGQUxj=ʂx4ys*y!Yzz Gzk{yYybyZzy{r(yi`y`邟z+XJ[zwOnzFz<{B3{)qb{{ { | W|hׁh}@}}[yz}Qq }Bh }E_}fW(}N[}E9b};P}2*;}(}}Wg} ]}$C}ԌgVʀbxԁKpS,g6-^Ɓ VGMՀwDC;T1(a  K^ rֆ;xE^p#gg vg^wOUÀ6LVD:|1] g'Wʂ+Sv 5_~Ӏ6~ Vx8hof݈]ULJnLCpc:[0h'`hcD^~у /~fE~4>(~P ~^F`~Jw~ԍoSf@I]2 TPr4|j|a5|?W}N}+Eo}^<|3|*+|K ||E |t}|^z뮙~`{xW{ q!{Ah|`+|V|ʤM|DR|3;V|2j|x8(|Y||E4| G||ʃcՎCd~ewfpo>h`h]qi_kVlww?w_w x9ׁvyt䁒~x5q7'i}@W`;WOX7F͂Aw>P5݁̆,1u"$+tC 5\}_Rw|ypyht_VڂgN$0E=4W+S/!=? H, ~8|ϭwѫq֪1j*ybyZ¥QȣH̢L?6րQ.$_$ʘ zy+%c}ĒdweyqtfjB%hbiZyjR1kIu.m(A nm8o/Cp%ڈYqgr?^r ^sUeItˁޑngb|ƑhvhpjiO(k.aÎFl`YEmyQNanH֋go@Bcp7}q.Ar$s͇$trwt8 u"ɂv+k"|^kwBlpymTinCa.Po,XgpPpH?q?r6ʈs-O]t#WuA]|uxuv(xgo$|2ovp;pephqU`֌uqXrPsMGt#?&t6[u,va#Ovw%Ȅw,x'y΁_s{Bsv!soctAgȌt_̋tuWÊuOv1G8+v>jyw@5pw+xx<"xAxxz/yQ{+w{Cwu:wnswfËx^ŠxHVىxN&yFmye=y4y+Rz1!?z~qzvz0{8=|){z'{t( {xm]{yeŠ:{|]ɉ{U{MՈ{|E|*<݇u|$4 |*ӆ|Q!|sZ|V| |2}sbyNJ sي!dl?e.r]~U [~L~DM~<~3y{~y*>`~!~%!~V~~`y~~3y\SsQ\ls d\`aaTAÂ(L GC;cOD2) Fa<r^=߀1}wxsVkad/#P[؅SyCvK'ȅBنD:ф2eq)fvՄ $M`,Á #|#w4rZokTŠc&[URшJ*[FA߅Շ9Åi1>(e3Z+ k0{/svӇaqYEj6$%btPYݍQgiH@80V'WFc M*@,zuȆpIi+aqXoPgGⅮ?k9u7<>/O%"*:~; փytohk`W&W OWFƅi>8J5- $6Վ:jm vvkx3gsDˠmfЅY_%VۅkN7o E4<Җ4[,QۓI#~??* !}Lv,q腁ljQ eW~]`Uƅj@M:Dt ;Ąb3]?W*–"NsNq t ɀcuyp0,k4{d\TÅ,\LC`:213Y)!u=ၔ] Á {cvf"d{pzecj_fcߔ1g\iPTjLkDWl<7n4 oJ*bp] Ċq%ՊiqTLq62ruz$g-ugphiٔ9ibēKj[i?lSm)K׏n1Co8;DpU2mqd))XrbˊzsRsc pstwUyjuJvkap?l%i“ lbp9mZUnRܐ;oK .pBqn:srd1sF(gt%ftʼn|t uRevvxynuMopDoiڑp>b6pZؐtqmRdrK]rBKs:5tz1Du4'Ruv]<vk D,vXxzzCrtro sKhsaQUtYtQ׎uJuAv!9hv0w='>w &x x$ |xy{,yvtJvn1vgw`M~wYXwQxIxuA!x8Ny/늑yW&ˉyyLjQy mz\{|Gx]zs%zmzfYz_2zWzO{H2Z{Z@3{7{/8{&fv{k|Y{ z|V}|}xw܏(!r%~l͏~kf%~M^~0VX~%O3v~1GA~2?@ ~)7)O~.ꉲ}%~ ~8F~' ?o~`R~g~wdflr1elNZMeς^,SV0āNWXFQ@#>R6iр.S5J%^jlG #3/qevmqBچkЍ(e6]WU?MvEv̈́8=w5iU-ƈт$? x 󅣁EhTtupMZk?'d]6T鋽LDio<4ω9-w$t섏 ǂуMd2so2jVZc\(SNhKCk;jv3ȉ@+$f# au_ ,U<y{#sVnؔinEbiP[0'fSJFBǎ:Y/2*|")χ0 !%ryDmLh/0)ao YÕQ犅IA\9 1#gJ)B!6k RX肭*pWl {fʊ֝L`2XϊnP݊l6m.Ӑo%pp!Lp qrur fmݚghmhb{i[jTmkM?lEm=Ւqn5p-q$q%Orʍ r Bsr]gras!ZsS8tKtD+u,<6hu49>vE,v"ٌwMՌ8wËw +AxtWy0{KqMvl)vfٕvI`ɔv}YvRm!wKwCw;xH3x+fx"Sy:Y ywOy zS憚{*|pYyk~Oyeϕy_7yX˓kz Qlz4JBAzBUz:`z2xz*썗z!쌪{N {k{ |9І|}p*~!j}eXX}_ }W}nP}oI}~A}9̎}2 }h*=}I!i}ڋ}N} ~-!~n~osHjkⁿdꓠW^݁Wj4OaH@L@nl8{81R)! b +' l on=!iUdq]RV⑪lO1)Gl? z8 01)VO LFv Td:lAhމxcؒn]nȈVO2N}F+>7̆%/ʌ腖( lN ' K3Ӆ_kޒHg֒Fc֍D\IUxM#oE<=Ŏt6g.Ɍ'CԉÅƉ ʀk5fÑaO[[ΑTMT6LzϏlDWe9p`喬Z.uS$KgCw’;)3l,=|$uΉɊv-hہhOdS_ZX*yQIJTNBe:z42d9+}c# UZ!PO΁g@:bҢJ^[!Wȏ쟧PϏOIE AW9h31si)͌"FkSu Y놆)e%a!\ӐV'O[HEo@TB8d0r|(1!ǖ=@щ %C.ZDk-kԡBcNfvd-`e6[fvTgN9hG j!?kD8Sli0>m)Vno;p͐poXDqK s5vj^3fregJ`thiZikT/fjMxkFSMl>m7cn0o(*pqrrZ6s2uIWxiRieSj`kqZɜlATRfm7MNnE옕n>Bo7 p/Jq'wr-sFJs5stfwXyiKNmieCm`}nZoDSoLFpEqY>Qr6̕r/&s'(t^ruuD auvxzjqfe3q_ǛrYۚrS,s L1sDt+=t6 uB.s2덠6 /SI(RC!'9Em‡4 D*ΉDĆNaԗ@]IXϕXRƖ(kLDŒ='ʑ5 .;,'( 9ŒЎdK{H 脵tZ`{\RJO6C<74 -$ Z% A`獐 ̋t_?T[$VjjPnÞuIΕ&PB;T34,?J$ߑ5.kÍ3J 2 7d9y^78Y𖿦UD4OaHAo:21+q#̑gVA.kˌ ^b_c]p cW4dRfLgDF9h?ni8j1l*BmE#nSfMoRo] fp,dqIt\dx9af\#fX .gRhL8iF/k?Il)8NMm-1@n7*oS"HVpFpNqU Rr"EsT\vGy`ULi3\GiXX)jRݡkLRlFm>)np7oK0Қp@)qp7q0~rb)9s4!gus7 t{&t uzvxzahp\SpWq@Q,qKrZEmr>s7t,/ʙt(uV! .uvZ>v ߑ6wV1xJzy{~`ta\utzVtQF~uJݞEulDVu=Cvl6v/gw6'Fw w~xQ6nx yYWze{j}&_ӡIx`[xOUРHxDPfx{JxCMx<ܚyO5ޙy.̘*y'y mzZzsQz |{Nl|DS}B~_|MZ)|U{PH{I-|C|< P|@5|M.|W'}|Q O|I:Q|e}# u}=~!t~3w^JqZU*OI!aB^oU;YF4K*-Lg &t#~~ .5 ǑR M]@'Y5TjUNLHDA:o3p6,~+%ĕ偠_“9vāT G @n\"oXsuT(NXGw@ц39y2Ss+ %w9ku #CX8['WHS`*MzG>@ 8™PC1:*\$#єT쒇&? ێ郟2s3ZJVVR59LOJEiF>o740=})#`ep1Ά7 >{xǃYI'"UdQ 8K3aD9=O6%/H(!ڎb\nlI %\܀WTtO̜̙MJ ?CěX<4Z5+._'G] Ԗ5-ƎZ 42:VRQNHԝB;+4:-.&NÖP& p4V3  1Uݧ:Qϝ1MGģA):*3͙U,%_˖v$s* VL*uxIYaTbOcJe'EMfu?qg9 i2gdjP+k%lm_nh ÚooquR{rWdT+ePfJߧgEIi0>pjX8dk1l+Im$3no>pO |qeqgt:Nw[w|W4xh T hP+iKjE:ok>ݣl8m1rqn*o#4pqŚr r{suxy}gWknSЩNlOlJצRmD餱nv>oL7ݡcp%1"p*CJq#\rΛSsbКHs ИvtuxrwRyc}uXDoRS4oOL/pJ2pD0'qn=r#7Nr0ds~)t#"{t} uYڙu v~Trwomxz}W٨4sSdsANsyIysCxtv=Mu6ĠLu0 v!)Bv" 3w wow x~#yxFz{~Vw\RwQMwOHwB$w<x;6(x/gx(&y8!ytyz z+{x+|}V={5R20{M|fzHK{BO{!<{U5v}{.1{'{!`{{S{S|C m}2}~B~U^rQ~M~G٣i~A΢3~;^~4,~-~'I|~ ̛3~mI~W~ i$]d^рTq(\Pޥ?LUGTgAJւ8:3-(&T| *@֙́Ę& YjSs.PL2TF̢@:O3"߅G,I%F}TY  _فan]R,OXKsXEm?աU9+(G2FĈ+_}$Q؄ *AQ mNZ-JQRD΢0>š,8" 1Jv*w.#֜lWƈڗ SY!Xˏ4:P̔=M7I**NC=7#I0N)Ӑ\"蜜[1U }(ܘ}~i~L}I}vE}B@o}b:t}z4X}.}'}! 5}}̟}g~䛕:dXKHj/Dq? 9姳3O-Mg&ˣkA gqǀj4΀֛e^/JzGUD0?/˅c9W{:3!,%h$pɠDŽ5󟢃8?S$}Iڬ2wGCpЉ>b@8S2D +v%~GâI.K ӝؚߖkniI*F8BW=>cY771:*A$>w%2? c dH.cEAE<)U6t.[0A)ɤǐ#QEzc?6I Ϝ]{b/F۫CŪv@;h5qG/J*(֥"`?$H ř;W׀EvB>:4bd.JR_'N6!j˒3d] 9_Od9{5Dp'Az=⩫9 >3a-V&@ |RPwj vԇ M>o&iaSjck'kueyljgmHi4n-k_nlyon_nFp\ocq2q8WrroLrsyAst6su*tQvtvuw8!fhص\g}j2&hkjilkn;l o~mpy1mr|*qU|=s|x`zazVc3zdzfbzh {$Mir{YwXj{lSk{a-m|.V!n|rKIo|@wo|5pF}8)p}mp}vr}_V̰G`Wa~Wc~Õe:~ f~hd~vi~kj~`l3~UmX~Jnj~?o>~4o~)Sp-pK~rg~]܅^5_"s`y[b2cˋ=eȂgAruhEk#i `k8Tlt_Jm?hn4yo!(ooqa\{g]Ήc_=z`hbӇ+df4DuBgjbhB_`jHTKkIlŃy>m3nE(}nuBn,pu[(ɭ\2^ _،ГacGe;8t|fkih^iiSjHk>Fle3[ms'mZ=mo2Z q#[x] ^ۓK`ΐw,bˏ]~ddDseԍ0hg=]hRiމH-k=Yk2`lv%lYk˅ AmNܳ|Y"Z-M\)o]䒻_Frb}clregf] gR7iFiF;j;0ojY$gjkB1 xlS,Xg5fYؠ*[j]>>_DKaB|bٖqdUfe\\ g|Q6h?Eh':$i/i#iVܠXh ZK\+y^w_lRa aDbjVcĥKd?eQ4&eni(ddܓ:gيTuWCmancd.neZ(ory^4Hs5z-(szs{>u[{дesft&htiaur){+3rv{(-r|.es |xt|۴LdyӭeyfPy͜gz iCzPjz~kztm{AiEn{^To{Sip|EHEp|=?q}2fq}u' r(}rY}t4~b~`c~\se)~ f}h#} i~}j~AsEl~bhm%~{]nJ~RoS~GpF~{}g׉pi fTjP'[k]PlĆEm;5n0zo%JoHn̄X2p(]^5`aԘbʏUcߏ)ezgp&hUeyiZjԊnOlbEm:Gm͇/nH#mdžn oDEP\Ú^ %_{za0c@fdܒyf@oAg[dhӏ YjO.k=QCl38l~Y-l"lmeF n[]JD^`lbG1dxenEfؔWch XiMNjR`Bk 7Zkx,pky=!k>Qm nY[td\X^V_ՠua_cgdwdcm"fbbgBWhzLixAxj6Iju+jt i׍l n+Z欝\;d])_IabǡXvdkeda6fVgŘUKh*@ZiHe5 i%*,iYhu&jՌ _p8OZHm![(\Ք^n`uހpbFucqjdb` eUdg$bJh?Bh%4h)hgj rqlYy>Z=\+|%]㉟_manQtbϨid#^eSsTEfIgA>(gt2h6'gƘ]lgw$/j4tMXsYȻ[@ \>^M~w`^sb.hc]d-S6f eHf= gy1g9&g#?gAY#j1vʱpa9!q*bq~dXqfrhs0j}rsl(rt3mgtoN]RupRur1HGust=vBt3:vXu'vvQvw?x1wٱmg]nhToRipkK8plCqnw|rGorErq"gskrm\ssRJt|tGtv=uBw2u^x"' ux'uyywLz2wkllVmɢWm&nnoŐho+pp7r|Fqsqqsg8rWt\irvQswG't+wqYpvfq?w[qxQUry@FUsRz:sz0s{%s{gt`|v |gxo?m)dn-ZoFOqpE|Dtqd=eƆlg.nhej.xkBn`lHbcmT Y6nsNoy$Cpm8q.$qQ#hqHgqWI /rbVcsodh=f gˁi< wj`mak~blAX`mMnCo`8:pQ-p"p>U$pD qөaAbf>c`e*gafǎK%h`Nviclj|b kɊWl쉑MmB n܇7 oak,jos!IoOo݅ p `JNavbtWdC9elgvhː\ki.akVl0LDm7Amڊ5n*gmˉBym*o+ p X_{`: a֓cwTe#fʖu hji,_jFUk_K)l?|?lM4m4y)l*lnO o^^ףѡ_(a>{Vb̞ds~f t gAihi5^iycTjJkv>k84lJ (kkA mP Dpf=#^:_`` /b*c͡}e^rfhbg]hʙnSTiIHjB=k.2kef(5k'C[jm" ^q酢]˟^Θ_ګa_ic |dqe(g;g\th.R)iHNGjwp=OwLqEwr;`wt"1wuO%wv.xCv |ykw<2qf褼rhri8ps7jUsl%t\mxton~u8pEd$uqYurOMvWt5Dvu[:vvp0_vwl% w x1Iw`x axyboRlAolpm۔qYnދr-pArqxTsrn@tsctt/Y1uuTNuvKD#uwZ8vx|-uyg#*vyvy Kwzm@qPLmq6nros2psrqtwrUuNmrucGsnvXswNPtxwCuyJ8u;z8,uz"hu4{Qu{* w{˨kvhlQv/m*w-n.woLwGpfxOv~q&xlqyKbrzyXszAMszBt^{U7t| ,t|"4t|Nu5| v}j|Wj|Vk{#l{m|fo |*uo|ikp|aqp|WZrK|Ls}&Bs}7t},Qt~D!t~Jt~ v ~ahvi~ujhjHk02l~n unk(oapuVqeKr>A s6Wsy+s!Fs{it >uBĦ&gMhBٙi@#jskÄ.~m t7mjQnɃP`-oUpKaquD@rB5rǂ +;rځ rs @sӁ0fߟUgh)]il=%jˈw}Xl semRinm_Gn܆-UoӅJp@q56rO*r qr rĂ4?e瞅fĘg/hz҆i|kIrlLhm5?^inkT6oIp?NpÇ4+q)apDp;q~"r+Ide%ǗfGygiP|j{ qkglu]mdSdneI/oF>Loʉ2oڈ'okn qkq>cC*dLMekf/h:{,ipjfk\rlTRYmHnVn='n݌K1n&n.hmps|qc)bKcdf ф[gyzfh(pidej啷[IkڔQ.lؒWFm<#n-1n/&mʍm2Lo<Nrhaԧ_b㔙dMeS4fßyhh8niIdj:Zk/ Ol+ ElԔ:m20OmS`&l*jla}nۋr<>aqb7cdTfxUgmhxcPiUXj7NkDYl.9l~G/l$l ln(u b`7a% b1ce5wPfΧlh,b3hWiMjPC!k58Ykܚ-kޘk#kFTkɐ ndGGw_+ɗ`&a@wb±dk$vgf qlgea3hjVikWLnjhAk7.kP\,kH"Njak n#*xͥwawbwd;xe"xcg~xiytxjjylz`y7mVy9oLyGqByirK8yrs.yLt#zyquryu zvuWfsug}vhvwjKvk~wFmtDwnYjIwo`xu-xiv"xwtyw yx@sBkk&sl2LtAmutn uaoF}Tup^svTqcivrb_vsbUw9tK~wu@wv5ww+8wx wyx[x y7yңqDpwqqrcqsrSss|tss2u$tviuu5_uuUIv9vJvw@Zvx5>wy*IvzFvz5wzC oxa{oup-upv-qvrv{snw[rJswhtcxu^txTueyaJouy?vOz4vu{;)v8{Kv&|w{ u|4'u}%)lu}u}Sv}1 w5}2lmb,n)F@oUp~zq~pq~g rN~]ar~Rs~Hto~=u3QuK%(u0CEt@u v~bk`O~l2mnoy}p$op͂}f]qmD\rRGr偨Gs_=atF=2t1(9t)t. u4 u1Pj(kSkElXn"9xotii`i?j>ljmAyx njnXo&doZpKPqrtFr=<rՆ'1"s &zrȅ{qsETt5zhymv4m)mrlT n5+ Gp+z"{Sa{Xb{gd!n{e{ghy{ip{je{k\A{mcR{nIk{{pf?{q5{tr+{?s {^tC| t m|u۞y?fyxg$yhMWyiz8kxzjloTzmezo[zp:R]zt4zu"*zevzov{v {wwMjޗwkRwlxRm'xnx#y1ony`pe!yq[syrQysGyt=yu2yv(ywMyx%+zzx zyDunoėxupLv7pLvqwirCwvxrnFxCsdxut[0xuYQPxv0GQxvuƁqllzm:ynXoa{pLr:qXhtqd^rAvU@rȊKsvBt7tP,t,-"sr^tvklmqm7CnB {oVqbpggq[]q0T%rJr@sE{6sk+sG!rx$rPtJvŖ jkʊylmomynpAo fbpO\p"RqpI`r?r5r&*ri [qq 2skw_9jMj<4kKlɞxmܜOo1ne@o[[pPAQpՕHqf>pqΑ4\q*qt q[nq 8sy:yÓiWOjKj l! wfm@nnl}z\zX{vzBB{q{%jvx׏wxw|xixxxxxoyyJgyMy^yzTyzlKEzzAz6z7pz`{Z-VzZ{#@z {y{z{z|fSu}mu}v0|~v|wwg|nw|exR} ] x};Sx}UJXy?}M@y}U6y},{y}"}y}Hy&}/z<}zG}哪s͂[tq͇uCu€wOvkmwewno\wʀ]Rx#9Ix?x5y?+yI!x}x[ y=zyK7rˇls_>t gt…=vuzmFv'>d+v[vQwb/Hwۂ>xH}5xH+Xx!x:wp7x6Ox&q*r&s10"s퉂vxtm uucu䇂Zqv;Q6vKHw>w4wÄ+wC!wXEv\ wQ x$ =q%vՇ4v*vƆk IvDu _vRx TpKkpq}rXzus3]ktDb%t'XtO@uBF3uZ}mw4}lxz*}Ex |yV|yr %}y}TzzwĉT{,w{w{{ws|KxjQ|xha|xY|yJP4|yF|y=l|z'3|z)|z|{|2{ b|{8||&y2|;y{z[{z^z{q{5{h{{`<{|!W||[N|+|~E|O|<=||2H||(j|}$|4},{} ||0}l|c},wဢx@y=yypz guz}^zoVp{4jM{v]D{P;k{F1|W'|a{J{B F{`#{~Ռw,3w xDPy-x̃pyGpgNyЃ%^z UzQMzJD5zʁ;*{ 1m{<'{2u%z߁FVzp zYzvovwyw)pxngHy$^QycdUQyLyDžZCz:zZ80z&zwz4}^y ?yԁ{uv/ tv$xw>\p\wወgxv]xTxJKyC#yX:cy0ByՆR&)yÅNyG{VyR7 y_+Z| t/usouwvoiw/fGwՎ\xSxHJxvAx9;xꉦ/Oy%[yuXxlux yv|9 tLt~=u4vuݕonjv8eYw:[wzRwIwn@x 8x2.;xb$TxN^[w%x? y!p}s݂t |t}uNu<)mud0vmZvQjw@H3wf6?cw6w-w;#zwEw x/qWx酝 ~=s.cbs}{dsxstkuV_bv!Yv~GP vϘFvE>w5Jw+w("w:v\ox dxN~݀tXrӀr!z sD{rsjtȢauxXuvNvkDEv|l6f|,|"|Dd|G|^|.~ky~yyzU!qzŏHi{9_`{W{N{ŋF{Ɋ={Ή5!{ӈ+{5!{{M{{{J1xޖ}yBwypz&hz_{V{&tM{BiD{@Ea&NjRb#ycLsAWdkΉf,d g[giRjTJ?kA@m9hng0o'pՄCqTY˃;tt uxvcm+}mxs~nLqÆanj=Bob*pZYمq%Qw qḦ́jr?s6}t-m=uN#u˂v2v2 WvڀxB6q}lSqwWrp#wڂ7wȁw 2xW,yu|uv{'uov(gvj_vWvwGO2UwFɃx=x~4x+iyF"tyy(y kdz<zǂdz{qyu\ ynk yf|y^5zV6zjNzEmz=D{4C{1*{u!{v{{oD{|OsR~{~1t́}m }e+}]F}U>}M}D́}} ށ}}M}}h}}gbzŀ˂tā/m3e];]YT-LDD;D3iԀ)߀ q+C ~^<`l!6ztpfm&}e2\TMJK݀tCOv;H:2-)J J!c4ӁS&~yOas*lԉd\3ZSsJB{:a2A,(g2[1 9`~)|~V[xX~sr~ߎkqcc[ VRWwxIkACG90~' hNP~ņ2 ~΅ ~{}w }֔?q~'Rjx~wbb~ϑaZ2iQn~VH~_@,~ɍO8~/~`&~vq.~q ~8, ~b!~htz|Қu}.*pF}~ i4}ߗan~>Y~PE~qG~W>~e6~2.x}K%U~}Z}ي 1~o~Hy|it|In|g}T`-}mW~O~!FO~3=~55H}ۓ- }%#}} } }~"x{s[|)lm|h f|Ԡ^}B!V}M}ɜME"}'{ex|Xi]|УU}LlL}| C}';/}2}Y*q}t!|ߖ|א,}3 1}0~{}a-xb r*cl`dtee^sgwVVhMj ECkT={Al5cIn,o##CpD7pFp˅>qt|Sdwerf~kgdތi]jUUlk~M6BlDrmvRf?vJowBJWw9w1x)':xx|x yӁy{Tz0y3tzxnxhO{x`ևDyYySQXmyIozA\zC8azZ0fzm'_zFz샪z {*{I|yC}t}}-n|gɆ||`,`|XH|P|H]|@x |8:|/ۄ|&v|}$} ud}bpq}F~ yltVnNgh_ÅCW`Ö́ G„?c7|/_<&<Rw!k +X2; xц)s9am҅f`_`W׃NuNF„->ӂ6".̃H%WЂ ܀,vKGrZW|m/ifW`O^ZVaLHNE.=W5ԃ .Ʉv%ń2d/܃H bہǟ6[.2I]& ݘ&v sjvma;qr bkГc e꒛dO_FeXgKPʏhHi@k8wl`0Tm'b?q6]Mr-}sq$qt0Atmt u wRytp:opijpc؎qA\qUAr]MsE]s=ʊt35t,u{#Cv dv_)dvY PtwFփxztIyt5ot:i!tbbȍt[uT/uqL 6.'q gۆklgNCbgm\0ZiUK`MK@iEh<ㆼ4׆\-8َe%MTUPB/ԅ `yj fqa7zZ҆HS׆L-D ; 3.+Ⅼ$4bЄ, O .]i fi^ad_͆YsRKBs:X2u*e"օ_UŃP ψ2r6>h@cn^+YX^&Qv5lJ Y-AL=981Z)n!4둥= む˄n_cn}aJiubcߘTc%^](d]WɖeQ=g!IޓhaB(xi:@n"9x6+y/6ky'jy,yӊy yzE|}%j{je‘ {`XzZXF{Sy{L^{E{K=]{p6{.~{&{pR{Y{ |J·}|4}~FiؐDe+C _Ր6~Y~Rҏ~pKi~gD~_<~L5#~3-_~&;}Š@~9~H ~qk~~2~hƃ\dG_*yX =RJB0;VR3Ɓ,%IrLӀى aJ/WN gZT2c]"^UXlqQwIԍYBƄ:a-2n +$21׈V ~VE:6 AOfJsbez]͎DWPHAg|9aڇ1,M*g$lyXxi )΃<(V`ez̐'a?Ə\~!V2T_OZG͌ @ ;8H0)5"^ jT ㆸH߃dr/'`E[2-TN%FŒU7>ĐH71a/ю(O!6M!p) *d>3_c^ƌY͌ϘSLSE=ߋ6E.\4'X   Ȁaܠ]kHXxy@Rs5ǨD՚<׋u40-9a%%qӏˇNjO DžAUV9&``\$mW; QQ颃Jȡ?C(;Ӌ[3*,.$ fEɏ@ SQnJƀfua_aNb3[]sc"VO dYPeIUfBh;^iA4'-jt- k%l͐m-Vn) n9pƈrBvce !d.`e[efUg!OhNHixAj:k3sl,,&m$zneop pq u xd% g`hH[i!UiOkHkATl:V5m2n+o#ݑ%pqg@q or* sqrvzck_zk[5lUUmOBmH\ntA:oA9~o22p+@q#rr{9PsIsL psЊptkw[ze0xn_So2ZoTp)NipGqV@r9gr1s;*ms# 4totQu "EuvBNvy2{d^r_dDrYrT%saMNsF>t>?t8ÓuF1 u)v"vzvv U6w{!xz-|cpwvf^dsvhXbvzS,nvLvFw@?Aaw8x0ᑃxT)x"@xVxԎ"y Œy.z|JB}rbzk]Ɩz?XpzRÕz9L2zDEozc>rz75z0z(z!ӏzǎ~{4?{t ی|35|}~a~m] ~W}R9}KU}Ds}=Q}6X}/2}(=}a!M}BH%}} ~Iъ~|~`y\0yWv0wQoOK ρC<5d-.K6X'{> DՍ΀׍/ j11_>4[XVΔ@PJ^ZC y;4d-M`& ׍#H1 Ȋ]^-Zq[U^O~InB#P%:a3[%,@҆%ц@Dž\zA 7 ꈧ]9iYG͎0TNœ*HBA9G2V+2$m;ҍ̈> Ljhv\'sOX&\S)}MGB@8[1Ke*#=NJR‰I= +]^ aQZړBVՓ@R1ᗃL]dE>7Г0:_a("ĐQɍˋI HW@{2YUӝP쒧K/+DБ͚=m6ɘ/,l'ݏĖ ٓ1ّӌōZ bC2?Xh٥TlOʒaJbCΑTfq,ȕ qrerƐ3s)u}xz[䟑n!W*#nlR,nLߝbojFӜ;p @rp9qm2xr+w#Օwx U(xL Бxyh{"|~YyU$yeP5nyBJTynDby>o*y7y0z )z*#@z<zCÓ"z {`я||~:X}T!}.Oɛ|Jb|D?|=˜|6w|/|).a|"E|5|\} S}i~ZX~}~yW=SOT(Iњ6{C\S=_;6%/<(_!}P!Kx 2 v6aEVxR0NƚVI?˄!C֎0$wXۋ’‰󑎈 ÏGtD*unR9NxJH@TDטl>ї86M17u=*8#ets  \ JP束MNxH$Cl=ڙ71A07)7 "XOC, hXO™ƤL+QGBReN fJԥgEh@_i: xj3k,l&DTmnToao zpq u-y]}QUiDNp(iJjEkY@/l=9ؠm3bKm,n%oJlp%5q7™q r.;suvwy}RĥmN~mPI٤SmDni?Ro!9B!o2㞥p,9qN%^Lqƛrs,s ytxKuedx {(~R`pN%pI&qD.Yq>r8r2Ysg+s%thBtu>iu *vAw~7y|LQtsM>tjHQ tdC:t=ˠu/8u1v5+v$svGwFPwtz/w Fxy2{}dPuxLxaH_xBC %xz=fx7ox13y5*_1y_#ћ yy'yz9 {Z͓T{},~uO|bLK|G{B{oMâ8!JwFƠAT;מ$5j.'󛊂!xDAȘ&U ΀ʀLءÈIСER@ҟg";w4-МbA' ~F.I4) ֑fL6NHˠD?79C3}]m,МE&#iEHĖg; ޔ‘4 %GK GWCѐ]>쏰8Ş%(2xN+ΜL*%"Ěqט OX h)?"uIٖF\:BXÕd=`۔71wRZ*՜f$'ᑦΘŋd H ݂HbǜE(A@ IgJ8Ĩh|2i,`j&C'kޢlmine o~pxZrpCv= zHWgE{h=B9i=tj 8mk27l,l&mdn@oV3pI %qbrT|tFw{JI>kXEekAkl)ͧ:4ׂ|.vk(=! `ܟ,Y {Rx%FD$BAl>Æ9Eg3ĤB-'; ɅP  > z-ɀӀC`h@qO<ꦅ8v2,,&=ȡh k- ϔȁ7߀BhԐ?k;Ѧd6g1x+-%Fޢ!͡A(A5L <І}1€jLA>(<:e5p 0*$Vv]ό4 _ q[Q>~?F<ߧ19f4䥋/)f#d3YߓnR0I Јup{*v>t;68dqZ3ݥ.Ν(]"x7JƢKŠ ǟ&ZɘK AQIg^c hg`ei=bj6d@kfҌllh5ljumlRjJnVm_oQobTp8pHtqq<_rr0ses$stnsYu" tudRee.gf:hgmӁyVX[%Y^[ꎉ^i*`"yaӋocIdddYf&NgnCh8wj N-jp!ivj `nUƘCcWPJY4Z^] TQ_?x`n3bscczXePN0fBNg҉6h+i Ah.Lj+ o  U VXE#Z+\Uln^ow`;m*ab{c6WdgM$eAfx6TUөcWaǔYU[#]uY^j_n_a=@UYbJc?ke 4eܑi(eRec:]gՋqHT9'_UTWғFX?WZ~\mt3]~i,_' ^m`uT"aIb~>\dO2eC$'e$CNeCgmAOsbS,UVݒmXJ>Z=)}[Zr]]{g^],_ӢARaaHb6=/c1dR&bc햒d IgKu RTTZU㸎5WY|[5q\ˬf^\_K/Q`(Ga]<b֟0yca% bd2@h?x'kW^k`l'b$ldmf҇nh}NoQjr7olcgTpm\qmoR)r pFCs+r0:`t-sJ/ ttV#htu9>tu uvh'e"hfiigCjikkrlm1|XmnqnYofoqR[p%rQUpsEru:+rv/snv#sqws)x> ty{e`kwflg m"hNn?xioyk%p{olCqpm@rfAn*s[3o>tPov Dq8v9ErGw.hrx#]ryBrfy tzgbqcq`dr)fZr֎ZhsitJzjtpBluemvs[mwbPKnxFDDpNx8qty-qz."qz qz sQ{`wfawQcwm9dwfqxDh2xqz#ixojyGe'kyZmz;O?n*zCo{ 8sp{{-q{"q |$Cq0|Z r}_|`{ԝb{c{{eX{Qg.{yLh|,ni|^dzj|Y[l4|Nm9|Cbn}8)o}c-MpK}".pK}p} Xrb~]^#S_v`UbDd5kfxgqn2hciXk$N!lQ]Bmp7n,o!op: q>]-d^KnR_a<#cdwfXNm`g bhXj7pM{k_B3lځ6n,n nfmo6V p]k[գ\^]`ފ|ac釡veM&lfbg҆WDiPjLjwAkR6dm+qmd [l΃tn oD/Z*t[ȏћ]Bj_`6buddkeAa0fcV}hoLi@j5kφn+kk4y(mH ip'"YsyZǕ.5\I^o`nlbFu$c"jd`?f0UgKNh?i䉖4j)jwj+lVqxXf Yp[~}:]C_Kf~va;tbmid _eSTfJg?iY3iߋS),j {Mil| 1psX ܠBYZ ZZٟB\|d^}L`sraۗhQc0<]dhuS`eHfŐ>gO34h(h>hыkD|q&WQX>ZZR\ :]|$_žqafbe\scR$dfGeblgmhtnjo^lKxpmn1po!cqVpYfrqOrsFCstt7tu,uv!twWZtw uxhj(ki{k jDlkQmBulnmownpmoiqcdp%sXptENUqunBdrvd6swI,t-x!Ptxsy; u"z(fo5g9pRhq iQqˊjrlOsSw2m^tm!n7tbo uX6ovMpwAqx\6gry+s@y sz,s=zx t{`UdUue-v kf4v?gviOv΀@jw7vlkwlblxPb mxWfnymLoyAEq/zy6r0z+Qr{a rX{r{ s|cz>czƙezfXzhzvi{uj{Wkk{aHl{Vm|Ko|?@pg|5pqT|*q}/ qh}fr}z s-~ )a͟bFc~Ԑe?~f~~h~ti~jj~`k~Ul~Kln~@os~4pq *Hp,pDq> rdc`Ba/Cb{/d5Ae悸}g~thPji‚$_jU-lJm(A?n74go8)p opҀ >q[_H`>?aRcd҇ }!fs)gihՅ^i!Tdk,JlE>m3n(nSm܃o pΣ]b_Ft`rMzbw:c؋|eerSfۉh0g/]i&mSj_ISkw>"lQ3me(~m[~ln˃pi\w:^!l_yoaNb'{dqufg4g3\hZRiHZj=kÈ25l'ljkn1!uqƒ\+n]E^Ɏ+`9rbzcⓄpee;ff`[g}vQh GbiPKgFh;i1jڍT&k Njʋm %sϠZӦȚz[]8,g^ءD+`3xNbM&mccwdc%KPd袨AVe\6f,gv!}gh2 k(_zREq^$q_raޑrtcԈAs e~sgutitjtk`tlVu.njLujoAvuqA5uwTrg*wsvwtK!wt xKuѥod6oe&pfu2pggqii~1rkptwrljsn=`xsoV1tq-Ltar@Bus4vkt*Lvuovcvvv wAxli9m5jmk)nlSom}pntq;oj$qq `&rKr,UrswKLsjt?tu4Xuv)uwWEumwuxI ~vtyZjAnjoAkplpʆ&mq|orIseos%ip|s_q$tU"quJrjv?sw3txR)gtxtycu y buzh|t@i*t\j t k,uHlvu}|murnvho@w.^pwTVpxcIqy>_ry3csz5)tzszto{ 2u+{fyUg{yLhbyCiy]jy{-lWyqmHzFgmz^nzS{o{#I p{j=r!{2s |8(msE|sr|t| 9t}NAe~f[~gA}hu}^Vfz&Tgn+JHh\ @i"6FjE,k0/!k% l+ mm։ wio]]^_`Z{Cb rcggd]e۠RfʞIg?:h]v4i*jC if kю !m+yI\+n3] 0^"_uz/aIpc qfdU[e?Qf1GgS> g3hڜ)i~9?i k mwx{xϠu%^J'u-_ޓvuOaucMueizHv]gLpvhfvj|\wClS/wUmIwUoR>\x;p3'xq(y-rEys&yXs yu3MrcEs dĒzsrfsgmtqi1ytjpuUlHfy-l|s//msFmsnt dotwnpun%quudqv[[rvPs"wFsx&;dtx0uyf&|uyuzEvzrv{.jxkZxtl$xcm+xevn`xvoxmKp=y,cpyZAqVyPr0z#Erzl:t z/t{Z%t{etD{u{v|lei}Hoj*|j|k|~m/|sun]|xlto"|co|YrpT}OAq4|E*r|: s,}4/As}y%s}sR}.t}au|}Қh"Uh񁤎Oiفj~l-gtm`0kn&$b*nȀXo{Np[Dtq+i9~rS.s $skry~t^t*f}ghiޅ,}vk&t+ldjm0a-mjWnMoCzpl$8q.3r#qс$prt[eILf6GgZh߉|j7srkilbz`4m%Vm*LnڅxBo8p-p-#uppXTqHumdef,g,|MiRrj+hkB_,lb_U~m6tKn"B n7+o,pB:"pcoʅqM|v2@cTd9e&5g{]hsqiݐ|gjՏJ^k"TIldJmHAn 6o,'o"1oEo: p0vlb6cٚۊudf1zgpifi\jÒRkI=ld+?m#5nc+nF";ny n pw}g bY-}c,#d Zed?xfӛ|o`hCefi0[VjLQIjߔGk>ll604mI*m莑 mu2n 6oQGwa*$bvYcNpdwfnAgdKhZ iUOj-Fj= kW3.llx)NmllNn. oDyĒ`Ԯa kb}~cvGeKm+fࣉc1gdXhYNiXE9jBB;jQ1k'lFZk͓7mH o1:{_ዶ`(al}bޭud~lf$bgLLWh6Moh9Ci:j0k8&kk(FQmV oۆt|9+x^xVx_xaZxcE~ y"e$uWyVfkyhayiX}ykOlym*Fsyn;gz@p0zq!&i{r"{4r{s>1|tvcl+vdtveGwUg}whtzx jdkx@kaxnmXxnRNxoE(xq:GyrQ/zs_%z/t=Lztzu+{8vw@ththuiuj|zv#lrF| sSwxh̏hij@j}kwlmn dnۊ ZeogDPpqGpɇ>q{3r )rhk 1r -r& sw쁉gy hʓdPi\~jڑFv$l)lmQcnYAnOoCFp=p3Xqh)Xqq!Tqq| rZ0x󂴏g9 gDŽhΗ}0i8tk=kjlwam:2WmސNJnsE2o##<o2ph)p֊`HpTq qRy߂sfg6Mhh{i6Ns\jqj6k2`glyVm! LmuCnW:nǐ.1(o'pSBo(pÊ pJze˥4fkg#:zlh\xrihj_8kԛUGl|fKm Bhm9Em/nے&IooUq  qqC|1def@y#gxphգgjD^k4Tkܞ J9lp2Al:7m5j.Pnm$n:Nnzp :r 6{}d,Jd5Ke[ wfohfi\jRkBI k١?l^6l- m\#|mėmq@p-rD~€~|c^|g_݇|raps|zc'x||dp|ff|h=\|iS|vjK6|5lB{n+8#|o-[}4p#(}yq}r7~GrB~UsԒYz^c=zd.bzeG8zfwr{(hXo${Yif{ikO\{klSd{\mJ{3o'A{ p7{q,|9r"|is|yt }6tw}}uבmxzgxhqxi^~y+jxvyknz(lezMn\KzOo+SzPpDJz7qj@z r5zs+p{~t!{u<j{@u {vl|pwpvlNvl߅wm~wnrvxx]wx3xzyc)SxyRxz #xhz y zz{jdqzrVzesz>{xszCsCtmzYju+zb$uzYgu{IP|vL{Fv{k=`w{I2w{(x?{x |w{ bxp|uz|pqq^q~zr~grsY~2j t ~'a*t~4Xeu~QOVuv~LEu~ FpE>p5SpǓ,,]qa"q69q.hs. t+k~if zi7zQj{cskujlˡbEnHXnܞNoMEroG~Nm4C~n)o ps:q! 5Bqs'~Rb`~Zcր;~odyb~fHq~gi~i`~jW~akN~ m|n{GuytvyA|wy2uwyBmx#yneBxy\xyTQy)zjKyezBpyz9Iyz/zP{%z{Zt{kz{T -z|}P|t~2]uP}|u}tv}Rlw}4d-w}<[x}ZS;xO}J}x}Ax}`8wy1}..dy}g$uz}y}+zA} zM}} ~(st=W{tցtuilv- cvʀ[ w"RKwuIwƀf@x$ 7x{.x$1yxyx y})}~jr]s^{vsttl*uWc6vZUva2Q`vHvb?wi7YwςP-x:0#xOwہx"Sy'I~_q!r9{Ls pt[sktbuUZYuPluGv6z?'v6w,w##w?w`xh x~ʀ{oq qz}r:smr&jsɍIattXuObu;Fpu>u5vN,5v·/"vvw߄nxH0}.S(p~LpxqTqrior`sԐWSt=NtEtՍw|y59|y+e}z\!}1zc|z5}z|{3}.|ex}|"y|uz|]nz|Ag z|+^{?|;Vi{h|mN={|E{|=,{|4b|!|*||! |||i|||+|}&}w{xuyy ny:fz^z\UzMTzDz{MAkC6`l,Zm"KnՄ%oZ o p~Sr^~;b]yN|c@sgdQm-efkg#^腊hViNk ElA=anm5|6}.}5%m}_P=}c"B}I t}io}Ewz]rzmj{*fS{wQ^{׊V-|)M|?NEg|Z=1|d5;|m-S|sP$q|{|Յ|؄ }}Fv3ya7qvyܑdlzZe$z]{9U;{L{%D,{ӌP;{ҋ[3{NJF, {<#Z| ||,|[ H||x}Vux&p)y?jyRczU\XzKT;{IK{8+B{[0:U{N2p{0*zz"H{V{ {߈ | |sxnx`ix4bsyy[ zSzJZzÕ{Azp9zA1z)8zlI zюPzI{ {|rwmxgxY&axYyQzRI4zW@^z7z}/zQ.'yYzmz.{9{K|qw,/l>wqfNwƤ_x[XyTPyHy?3z,&6z/.y&yGz/dzJ{{K}Vx^s_n.`gb#a3cZ(eiR&rfIhA0in9Kj1llE(ц_mjdcn2n 2\oeptw%?bBrcmEdgC4ee`pfYC1hFQ6i}Hj@Wk8m#0Džnc'o…p@^p q{b-ruvCfrXfm3gg6h`8ziXLj5jPlHQl@mn8o)/#pH&qGqTr_ 5sA!t[w/u!jqƇjm$kCg!ql _XlXM:mPInG߆ oQ?p;7qC/br,%>sN%s|s ;Tt'xujxvnkqonlneφ_oz^1pWpO9q}G+ r1>r6Ä8s|.Pt*%5tu*u^ ʁv-րw`yurp˅(ryjbrdQr]ks\UsN:trF^5u>Ru6u-;v@$2vGw [w WXwxztwvov`i݄?vYce@v\CvTՃwM3w}Eo\w=~%xI5Dxl,x#Ղxýy -yǀXz|t2wzoziBzOb'zG[bz=SzbLzDHzN} }XC~~zrsUmhLJ4aɁnZ=R{fJW[7BvH:22#k+ "6B2THЀ- Ot`qKxlހkg3aYYޅWQcIgӄA[*91A*`z!k[ dÁidp+>k5f܊`C X3mPu_HSQD@"98-09)/΅ >Cӄ#qh 8* o~\j~eu2^ZoWOxٌG7Ό >ȋC6[/8b_'eY=~M ~3~m}i5}c~^]z~ V?NLBFF=T<5~/7-~&A~/~P~K~N~_ ~fnl},g}ubc}\~T~qM_~˕E~┏#s}Ԓo~~^ ~ #}`~%jK|Ye(|xR_|YZ|R}plK1}LB~-m:$~T1~N*}H"4}{}ߑ<} }䈠}ȄK}q4^lv_g`a%aZԎcT)e8LfDnig<i4ϊj-.k$\m;wnOGn uoͅqouob)kv~bfc`me'ZfSBgKSi,CjD;kh3׉l,m#]Jo;p04hp qf,sNIvnюej flfzgO`֍hVZisR֌1jKykB犷ly:m~3 n+>7o"pKqr' ys$mtx nkijjf~9j`ɋkY͋lhRt6m=JnBnn:\ o28p*q!r@sM؆s Ԅxt]vZy6oKmjqmeB>nO_enXpoQLp1IlpAq9Gr:1ˇr)Ȇs!3tk)tDu7 v$PLwz5nqi qd5,q]r5W@wrP,s4Hds@tp9&~t1u?)xu vFv넹v ;swy>{7nuhu}b/u\uUΈuNvQGyv?놋z7^-zK/zO'օ~zD#z>zH{% {|}k~g/!}~aЇb}[a } T3|LІ|Ec5}=څ}6R}.ʅF|'+|}`}M},}܁~~{j f`Zaa]|[USJLpD~?<υ_5B-&wTY4qRie``[Sm;KuC8;3,6J%܁Zx ˂mD3\#hud̉`*ZR8J݇B1:l2+ڃŅX$^Z C0˂cgJcE䎆^!XY/#QFGxIpAA$9nR1*m\#Gԇ ӄMgif`Za+r\yV҃OꃬH_ @f+8Hk0l_)s!?G{Ă- v7h%e!`[^ٗUMN2GnS?mZ7N/&"'' RGq  C%5c@>_0VYRS}MbF`>e5 -&qZȁGc чderb]X>RL7UEP=Z4ڂٜ,̂%E]ρϔQ `| ^هj ~{iwa^d{__R`YijaS)_cnLђ5dE*fK=ѐHg~6Z8h/ j''kp l\n"͊YnoFqugƔacj~b^cX3dRjfLKlgDlhphqvr4^-s,WuxfJi bi^^cjRX萺kRN3kKYlCώm<nL4qo3- p:%sqPrMs>و sنtmv%ygmbm=]RvmWnFQBnJEoB荳pT;aq3׌5q,YVr\$as8t ߈t lu$"v!xAzg/Vpbip\lnq#VqPUrIRrB#s':Ō-s3U{tI+t$uˈuՈlvH G v wy{f@taTt[itUtOru8HfuATv:pv2v+'5w#w+݈w܈ex3 xvyj{|e%Fx`OyxwZxZUx{N[xGyx@dHy9 yX1ي5y*y#%yzz!zg {{ك|}d|_|fZu|T:|M|FU|?u|$88|(0։|))|"{ވ#|e| U}Ks}u/~.~bꀦ^5YT MBE6/4~(Ј~! ~vQ~l !/&~ !~~aOz]ɋYY[HShLƒ0E _=؂5މe8.ҁ'9!C1,Qˀ …b%!p`\ЊAXiR`hK1DنZHt ߅!KOt_][}njV^PJ>!BR;P3J,W0%q / _ȃۂ^OZJ+UXO3GHnA҈⎼:82aW+'$'jE*gZq/ l-TJ]GX–T ҖN8GȈ,@ˆL9/Up1u+)Α"B2冯!r $\KWiZR`dLRBF] I4IZnV^ QgKE >͈7A/e6ܔwg/ГfPgJȖ+hD8i<j5k.l'm [~nɎp(q ӊr$svFlyx^jhZYOiUʖiPjJa.keCڔ2l:1ʏ{=*͎;{@$,^{8{,s!{YQ|c H}}~s~]-ZPV|~Q~LW0~E~? ~8/~\0؎~8)~#b}>}~~C~yv~~EYGUKQW,K_EG40>L7 Ɓ/ێ6\(񍀁"x'Rx{3N tw_XTϐPrJǐJDP=Z!6 |#.͍'FN!~Q˃qx@ Ђ7}TрWjыSEO I|uC<9q4-ȍa&΍ HY狰1 n ?dVN6qRYbMwH@A⎳5;!i3܌,h%E$jM i4m҅ǀU*Q BLGœ@l:+2ލj+x$Bc> 5m6 >u TO玱KEEώ|?7951܍{*rZ#oˌIs@ b ݁PcRMNaJqD?>8ݜ0ލ")w"_%ˌXLXuV †ڇ RWl>^RѠ_M`HhaBƝkb=#d)6fes/Ǚf)g"Ki#jBUkNm? hnptxUaRbbQMȞc;HdaBל^eg}83}1o}*}b#}?ّ}&А} Jf} ry~Q~.~}~hPށM7IDJDb>>7u10C)#Iƀݏ W% C_QOr82M;+($_T ّ  ~ fۆTXìJFXXBQ)=\ݝ7z}1W*ҙ#˓1dLRo  ;7`zM.^IE^ER_?=a:bV5c/sed(f"g-Thq("isјj }NlQbnj=qsu{L`I02aE8b@ʣc;"e 5@f'/gI(jhJ!ciD$jb+kRBEl /n(pX9xs\wd|Kԥ'cH4dEm)ew@ɢ fm;>g5C5h.۝i(*jY!k9Wl;יm"n Kpxnr-u6xy}UKfH.gD*h+@+h:ȟi5Vj.>k'ޜIlw!=Om9%n#np` @Br)ws덋vy}LfjH jD6nk>?Jk:l4rm.+nK'n ˚opBL}pؖr7 sux'&zw~LRn*H@n7Cnl>n9No3pI-p' q 2qsrr~@t# vuwoyM{KנqGm_qBq=|qr8r3V|s--os&wttnؘtt 5v#ߓw%yQ{7Q|JuFuuBZ_u]=vru8@Qu2vD,\v%"vZCwg5w/_FwJ ĕxy#zWf{K|L}?IYyF1yOBy$=?y97ٜyU1yz+y%yyחyy ~4z|@ڐ } q}~vH}9E|A |<-|7^E|1UN|*I|$6|ᘵ|~5|s|m &}iJ~~~'~G~DϞ A;<Ȁ6ʛc0P**#W\yah ޔa)sV\$KGD @`;iM5󛜄/΃)&"cJMBb pؑDAր5#F*OC ?E:fL4ћK.(Ňj?9>Ì3 8-z'a g8ȉsGw{ ҄~4(܀ACœ[@<<+8'2,y&+/&EqH<}u ԓvJ ݍAjBf}??;7#1h+=%.#ڒ=xp |; pUCF)WAe>} :50W*$2S`t%  q!ބ NC歑\@cq]˦p):Fp-5p1qL,Gfr&L]rݠssqsttt pvH@x;쓔z.(|T}A榞t >I7s: s5t0ȣvt+u%u~3Ouuqv;av V xO&zk>| }gt~Ax;=w9!w5gw0ix+*xt$ڠx| xb^xix{yY {|[j} ~^|@{=1{9{56{0{*[}{$1{{H{b6{ *|> \}YL~ؒ~X~~?/d ƑF;<p>>L;N8n4f. H(21"ysQ2 ֛Ɓk Gr*aTe=b:7Ms2ݢi-,'$!$h n#WT ɃИzt2&~<|9f6+OO1,zҋ~&'I  cM< NޅS*cZ 9;Te8E55_0+z琔%ɡE ȍ>wʼn X09 xi96*3֣6T/*es$ǡ}A/M#9A%8 4 Ӝ2טyB7/%yE8V{5ˣ2E.)V#~&9 h !%#VCe[\ f/]f_њgb-i dV[j f|Qjhjpkj5elnk[mhmPnnDop8q!q"-*qr1!qsqsm s]t|abgbdceޙdgf ighkX{OhlpHin0ejoZkpOlr9D.nYsM8oktX-iouN"ov p3v SqwkJ^ni_jn`klbll{admenzg7oonhpdirZjsRNlt]CZmmuA8 nmv,nv!nw`ohw 9px[o]*p2y^p`cqCbRqod9ry$es6ngJsd htYWiuN@kvBlxw@7tmw,[nx]!'mxnx -pyLYv/[u \v D^evM`vbvxd7w7newcAg-xXhxMiyBkgyr6ly+mz/ lzmTn&zu o{MUY*zZDzc[zD]^z(_mz$azXwc*zmUdzbfzWg{Lh{UAj{6mk{+la{ l|m{ oI|yX)Y8~ɛZn~!|\!}É^L}`}}vb}luc}ae}W0f}Lhg}Ai}6k}+,k} 9k6}m} n~VƄ^WaIY.q[&]$_Iou`Fkbka cVoemKf7@~h5i*j\ikV m%U9v;V|FWY熉\^ ju_Յ jaZ`.b҄Ud\zKe؂?g4hR*iShb/j n+QSvuT)LV2X%ZيB~S]t(^Έi`X6_Ka߇zTcaJBd҅?0f}24=g})g,g6j'h n@R:SUMW}AY}k[s:]Ìh_T^S`SbgIcֈ>wev36fP(#f!=eh`9r(`QloR˘ T1Vm;X |ZZԒr \ug^;3]3_ŽRaQ^HbNj=!d1dԉ&dbd҈fPu^Q"z0RbbSʝJxU˛zWߙ{!Yp[f<]-{[^Q`/Ga7k}3l})!mA~xl~.Sn~( pk~YM[s<\D ^T(`| arFch*dÀ]f SOgVHi$>j3@k(l km $pXyaYOZN\τ^ׅ*{5`քqPbYgCc]eRtfGHg==iv2jp'j7 i:lju -p.W=XEFY8[f]zv_ˆppaNTfSb\dQeZGQgKzt7R縹S۶sUV~`|=X8rdYh[a<]y\~SD]I_%?`h5eao*aɚ ad  mчE&|brl1[Xlb]l_mKanc~@netSogjp0i_pkhUqm'K r;n?sCp!4tql)tmrtrDr4 rs)fs>tmrusv& Jtwgfg`fhUg^iQhjil|k8mprlCnhm&o^nqT%orbIp8s=qZt3ar u(rJv|qw&sws 'sx-cYmd"mdnBfSoL2h p{iprjqh>kr^*lsSmtHko$u=bpUv2qwa(aqExpx|rax siy`smasRycsz=ds˄$fnt/zh"tqBiaucgsjju]AkvR}lwVGn-xyQkz4Glzv0m &ImMlots=LV[k\߆ ^0_ʄa$wwc`mdce݃"YgOh~tERi:k7/k%QkkUpKms_Z[[.\݉[^CN`qrvbYlcDbdꆧXf3NguDh9j?/jE$j7jum7gqځBgY1Z\ɐ[]s_]uaRkb+acRWe9xMfCh 9YiK.iцu$ij {'l*tmX7zYggZ_\i)~^St`Ajah`bIVd%LeBf83h -h #EhM^i: jx)"~Wv˔XpEYȚ"H[}9]_s{_Fiia`_AaߒvUHc6Kd}Ae 7g-ig"g.(hb jxkVңW|YZ{\)rB^jMh_|]`SbHJ4cK@d6Hf +fu!eލgx iC\vVW]X|ǃZ z[ȡq]Xf^I\`%]R}aslHbg?acy5e*ef ldg{ kyMV2VX䂑Yi{ye[$o]e^PY[<_h@Q/`*Ga>$c'3d%4)odF6dBf֍ ma{@U+VW:X֯\xZj~n\[d]Y^¥iO`FFda)ko wlXonZmFpdmqZnrPqosEqt:ru07rv%rwCxrAwt wuy3/eqeqǐffr#hrimsvjsmxktJcluYmuOznvmDpw2:q/w/qxy%>qxqyDsyut\zcw~cwWdw;f?w:gwXviOwlj]x c/k9xY2lJxNmyBD ny9p!z .pz$pz"p/zrP{?s{tb|]b{~c{ce{.}f{!uh){3kiD{hbHj%{Xjk3{N lv{Cm|8n|_.io|$o|oe|'q|t\}]<`̀Rab|c}e~t g"~jhH~a)i8~WajB~MJk~Bl~8[n~-n~#n|~nS~up~v~._WT`kamބb^|durf~iXg?H_hAV iVLZjjBXk27l-ml"l"m)n׀>uޘ]=n_ G1`?za{cbr9ehfM _gVyU@hwKifAk7&l,ml;X"k"lF{n`t󀒖\׏]܎<_&f`}{bTqdge]^faTSgHJh݇@j6k1,k|!ktkl umv˕[̔\ړ^*_zz-a8Xpb)fdV\eSS.fzI~g?h5ui+@jX!iɇZk*x NlyyZۏ[N\S^x`@Nocaec?][d@QecH/fG>h4i+'ir hji` lz[ZAh[ \;8]ǜ&w_qWn3a'd?b^Z6cd=PEd}Fe =gm3h )hIgi EkWCxf 8Yǧ=TZ[~]vE^m`pcaXbNcEpdӖ!<=fO2:f(%g!fޏsi0 n)zՂqY^hZ#Z}\OHt]k_a`Wa՞Mb᜞D&d:e60e&ff`h猀 o|V8Xó YZJd|:[[s]'cj^``HVLa'LVb)Bc<9dmK/e%efhq~Z)r[^r]wgƁnide_j6\jRdkހHlw?0n>4n/*qo@' no pm/u~̒a݈4bχ0c݇.eFwfmh'Rd|i[i\Q`kGlc>Ym74n)n a ImX nN p.w֑w`hab&d*vqe)mg+^ch9Yi Puj )Gk0i=lR3mC")UmuClLnG_ o:,-xd__`~a~c uhdlfb_g7XhO3iFj/g4WCh;:>iLG0j7&jz[j#il6> m:{i]臲^.0G^ny`XqRaʝhQck^~dvTeTOJf`AgP8hN"//i %fi?Eiz-k o͆z|qlA] b]-^:-xX_zp`g%b]`cÞS@dIeB@ffzW7gr-h'$h khskvHq~"\4\~]aw^n`6Ofa%\0cRcۢ1HDd^?$eY6Nf,gRn"g(EMh k sQӀtv"[ڎv]ZBv+_vs`xvbpJwdgwJf\]wgT:wiK@wkDAx&l7;xn?,yZoj"pypa yVp zqX{=rѓTs`sa݇-t:ctdwu!fKoZuh fMui\v9jSv|lBJ1vm@cw[oK6xp, xsq!xrx/s ly|szfudqe\qf7r:g3Qrhew2stint3ketlV\tmSuTnIeup?hv~qX5w3rp+wvs_!w_twt{ xdtyvbodj-oj̆'p3k~plbvqmUnrnJesToB\ spujsj4av:tQ*8vxu tgu3u%vV)}unvuBwVeuJwr vOwy?y?akt`l*tKltF|mttntlouYcFpuZ]qvQqwG0rwj=asWw3 txd(tkxt?yty usyyzqiysjy%Kk:x{l@xsmUxkJn~yboByvYoyPfpxz&FqEz&1oJTpS}ŀ_bFvbڛ}cudGmRf#dgggZhnQ1i,Gi3? j͏6kǎG-Bl#l&glunq>9}҇7ab{}bAt$cke;cf7YgOh_ Ffio=iߓ5 j&+k"kߏ"+lzNl_3{m)X{nK{o| p4 |p}rpw~`Nwawbyx,d7rFxejxga8y iWy,jeNyCkFyZm;p6Rq`,r w#r qys  s~hL\hlzeis\jjkߋam XvmƊ@O n9|Fnۈ=o5p,q"xqp rqsTx5Q;gO~Bg瓘xhqiiSjڐ~`[lvW lɎiMmV[Dm5CK kӕAlTY9al1&mSC(#mԐ#mǎ}o Wp uՄpdߦze9\seҢlfdh1D\piS+jy-Ik@Zk27k/lc&lm0oG p҈sKw~6cxdSrdke,cgS~[/hҢQiJHBjI?jٞq6k&%.Wk~%l{1m xoa q x\}k\b}i]B|=}]^u[}R`rm}Lb>e}Ad\}?eS}5gJ}!hB|j<:|k0O}Wm1%~ n:~Xn"~oC ~p%qB{K`U{faLz{brt5{cl{ed|g3\+|hS+|iJ^|k3A{l9{n/_|oc%s}pd}@q }qG U}r&q~"tEKyYdDyeQzyfMsygql,zchd,zj[zkGRzljJzmA'zn8{8p.7{q*${r|r|or|s~uԄwhwiz.wjRsjxIk1kxlcym[yn RhyoIyp@yq!7Mz@r -czr#{sztr{t(J{uw?umjvmyx1G[vx>Zvx5WwEx+Wwy!x9yzxyyByyzi{p{q|q{vlr&zoorzgzszy_2tJzVtzNOu5{Eu{A(os߅^Mtte8 Wuw+}kx#lDrnlސkmЏcn͏ZoQpP!HpA@q@7q0r)'rr4s9sˆ] u4v؃-{jvkpD!6p.q m%q̋Lr)st tyvȃzqiuHjTo\j#hxk`lXUnFOTnFo.=Io`5oޑ-p$o$pΏ<q#s Xt qxy;i$siw!mj g j_UlWmS/Nn Dnws;n!3o+oGv#=opr sɇyxhZqrhliei3^k;UlHLmbCmɞ:n8=2}nh*n@">owpSHrp t{/g\|A]9u%^ok`+h a`fcW\eHN+fFsh%>i6s*kT,Tl"3ymyĀnnrX|oi"qvH` zRatZbn^lcg se_mdfWDhNX"i`E~j=~l$5~pm+`~n!wop peBiq=uLs~}\dy}ydtc}em}ff}h<^~.iVj~!jM~kE[}m<}nH4}oo*g~$p ~jqPJ~q ~q~bruS~u{hTy{ht{im|$jf|k|^3|lpU|miMw|nXD|ogz.vuypIv^yivyawmyzYwyQx6yIlxz6A*xzg8y/zo0Kyzj&zzzB{~zFz F{{Z{{|{%t~ut~,ou.}hu}qa7v[}5Xv},Pw5}EHw}C@Ow}?8xT}/x|&zy8})Ey^}T(yq}/ z$}pz}o}zUs uCsPo\t8htȁh`ue XYuPvVGv|?{wD7Sw/6w&xrxyxm yH0z:~~ybr8ktrnsL h>s{`)tWuAO%u;Fu>ovJc6cv.yw,B%wtwex#d xoỳvx;qK s}qϋ.mr^g.s_\s҉-VtqN?tEu#[==uk5`u݅-v<$vvʄ\w -x-yxvp2qpĐl$q?Gewro]rҍUsLsD tL;t13t,u.#u|uׇ w w}yufo<pwoÕ(jp=(dq#/\Yq T6r+Kvs+Bs%:>s2\t*t9"0ttv v*z!tqw6>q.Nqv&qrϔ7t>4v8w7}z慀\-u{?])o{^hiW_bTTaZclRdJ4PfPAg:^iT2j(Lvkl;mrFmn}q_xԃh_sW`n{Rah\@cCaCdYfWQgIkPhA*j.9k0@l'?nсnoH PopWswcsedvn1eehf`適gYgiQ${j+HCk?@li8Vm/{n&qop p ISqYhrJu/wgshbmig'i`hajX̀kPclHl*m@&n7o/Jp%qJr:Xr[ arsvpx3~Clnr~wll~lf~m_1n3W2nOoGp?Y~qG6~r.g~r$s8s~s ~t~Luww,|pq|pk}CpeQ}q]}qV0}rNf}rFi}si>V~s5~&t~-B~/t$A~ZuE~gun~0u }vOn}wWy7uztp{qtj{tdP|/t\||uU|ufM}|uE|v^=}v5J}2w,}:wI#}w}w}w w}nxZ}by=zufyy&p*z?xj$zxc{x[{dxT{xLt{y$D{yd<|$y4|`y,F|y#3|zI} z8}"z >}?z}|{=|Ntxz}}oy|iy|by|Z[azZ|5Sdz|?Kz|bC{|t;{O|3{|b+{|H"|G||Y|.|| ||!}}9}swoxixbty;ZysRyJzBzQ;%z3tǏ:kuuSveu̍_TvjWvAOw~GwΊ?0x 7x'2/~xa<'xOx׆cx@5zcz:|ρFnsLjtbjdhtْ]uVsvNvF7w=w] 5wy-w&uwcwxC:ydy&W}msNhsbsy\jtpUuaWMdvPDvlFoeeo_p[XpPāqkI,rAs~r9fs[1g[s)8AtJ 6tuju v~wz"olsj0sdv}s^sVt3OtH@u%@u8v0wvZ(܀bv v-wVw xk3~y{Gn~xipwcOw]N~wV(wNwGBxS?x8#x0:y(Ky yMPyNy~zK~{i|m}S|>h}{c~*{}\~g{XUb~{LM~{dFN~{>~{7V~{/{'/{a{;{ |2 ~|~}}l|9Jg|bk}1b\},T}L}~EQ~ ~=~5~6R~N~.~r~~'~~R}~~j~~l ~~}j~~o~~~k{{LZg{a|PX[|T|L}2Dj}[[<}5T}-}]&f}~R~ ~N~4;~jHze{)`{zZd{·,R|K|kkCF|;m|j3|ń,n|?%|}?m}: A}E}z~shyЍdxz9_Kz,XzQ{ZJ{ĊXB{9| 2*| 5*|`#||W5|6 U};m/}:)`^@gxc yN]yWz)PxzGH{%z@{K8{~0{z)T{o"{LC{;|5 m||߃fxqax\)xڕVycOyݓGzt?z 7UzJ/Wzi'zڏ zFz'{J |I@|neUw=`TwZx/TxMy/Fyؗ>z"6z^>.zz#&zHIz*zp{ P{|w'd1we_wq?YgwSBx LxEzyG=iy 4y,zg%byۗy3z\T{ {<|Xk펇\HgH]-a~^8[_Ua4O6QbGda?Ɋ+e8g0h).i ckWPKl ʆlom[ot[jY_f8`qaBax[jgbUd1NF`eFf>ۉHh7iJ/vj'އ?lmdGgnA n,ourv'iScecaOd[geTՉgM։eh4F/iK>>RjH6mkb.l'um݆oxopjqyswKhۉfe,7gl`h,[4iThyiM9YjEk=Sl5نm.0,n&}oEpqDqrauIK7>/󁍀)~k"a$6[0L* a}+b{b)I^QZ \(B_}ÖHZp}ҕOU:~ pOW~RH~A:='1\*Nc#2$>)~) ~֊Zr ~~b]}RY}CS}oM}G~ @~9~Ȗ0~)& 2!~đ~ ~go ~s~j~v_\|֡!W|R|ҞL} FM}}?~ 7~YY/~%(~ ~p~,Y}A,} }d}d-#\M_5]YZ^ T_fM琬`Gb@c9e@1΍Hf*ӌ;h$ ik NJk lZY_mpu8b^_^^4`9Y)a.S3bvMWcF؎e8?f|86Mg0ߌh)ыj5#3ikh0m m iWFjE>"k/71xk/؊l(n%".o[pc·p ŅqrutxaHjP\,jWjR)kKl\Dm!=m6{n/Loo(*0pM!pIq?/]r(rc ᅩs?ctwT)yan\jn*Vn[Q%xnJokDp=p5ꉌqj.r'qr ‡s<QsEtE $uvmSxz`>q[oqUqPr;I%rC s<=s50t..Jt&tQuHuv] w1xU.z1|_`_uZuU"uOxvuH9uB=v;;[Jv4Iv-9w;&<)whFw8xx `yezn{}6^0yYňyTyYNህy`HBbybAU y:my3TYy,Oy%y1y@zc z  {G?|M }D9~m]}Xۇ}MT|NB|G|@xq|9w|2E|+Lo|$ ||i|o}G \ }8}0~[[aW Sf2M F~?րX8w%1F*$#g;/5_,h '{3t Z6V͆:4R^_LIFF@>Ȇ57T탈/ۅ(ͅk"eE"7OR7~Jd@Y%0UlQP΅pTK$oDX=6,QK.9'/! . iI H/CdXTNT)O]ISC\挪<5ȋf-ˊ&V0/<7ƇlYd gYkW,֔R䓩MHP!BQQ;g3c,hv%#Dwތ܃oO͉K ӂ@͂܁B@Va[ \EV\P엜]K薄_GFr`?Lb$92Bc2%[d+D\f$4g8hqjՌk m[hnXqD3uZ_*U_P,`KNb8Ez{c{??td8prf1^g*kh;#ɏibk Ս)lyAm _np9sNw Y/{bfU&7cPcKw dEcPf?sg57h?0i0)j?#?k lwgn*o% p<q\t9xX.eTÓfVPgKgD?h>vi7j0kb) lX"m|ŌnoFZp ͈qn\sv xYiTiOLjCJ/jD9k=rl|6mN/m),Mn"xoo6`p`Wq|rY yslbt!x|MY^Mm9T+imUNmIYn!C.An<oM6Zp/d5p(q+"qr~sW'at#eu1vye|X]pS)TpMpH8qZBCeq<,rB5r.čjs>'s!ҋ80)w)ʊ$#k*ʁj_2~ P X5 *}Q_njM.I Cou=W6%/⊾)(Š!$< hށ҄3P4>LH܌GÊqBp܋<\ˋV5݊.ՊQ7'7 ̉-ˉLÆU!T& `Ԅv,n;O8JUF^kZA#U;'Z4ŠXU-&^Љ ".!W jdjtNՀMΘIʉۗkE?93~,Ǔ%Βz AK 80 x``Yt;|LԉbHjcCՉo>8؉2+R$m0f a oZă"53 ^QԞ,\4M=\H-]CO_=`\82Pa1Ș&c+d8$ eraf8hsi /kYlnFsByP_Li_Hi`C\a=yc7|dI1_es*`fy#̕glh&j%)k 6m0nKqu*z7Ob(L-9bH!cC;d=we7of0ϖg*h#eijZ^lm< UcnSp"r.v`zOeKԚeGhf{B~gKz9'z2Nz,Zz%#z)zzz${|5}}~KJǓ~GZ~CVi~x>g~j8l~Z2-~F+<~$}G9}m}+}r >~%V~Z~n8~ ~I3/ FCy'Bj>y=9I4.2'd6 #9ŋz,_ d0͇€E4Ae=M\82m,UT&QA!ޏvh;wv *Չ ՆՁ Cϐ_@9G<9|7`W1Ő9F+ΐ %H w-dJb 00 2·ɂȀH a\C\?]:ѡ^5?`0a>*{wbv$*_cnd)BeE%g hbjlp^u|oG^CK_i@ v`[;Oras5?b0c)d#e;fSgǘi3 9kl=n rw }FpaCY+b ?ʠLb;?Bc5žd0 e)Ǜf#@,gfhaik Y{l+n41spft3$w}F?dBe!?De:>f5Pgj/ƛhZ)i."hijk[Sl .nuCor ubx~vGZ/hJBhh>jnh9git4hj*/*/j)Ek"lZxmz#mn !)pWytqktw5yrFkBk=k8lR3ɛl.xm(n[" nqo[+oMp ӓr;=swEvxzF oAn<ߜn7)o\3o. p(q !_qnZqr$r 4yt,ؑuwz/~|E`rA8r<r70r2Is-W2s'K^s ֗tMtPtz>΍d{tC|~WCBz4?y;Ϛy7Hy1יy,Ey%y6+y#yӕy7+z2 {|V}<}IcB}>O};P}w6ՙ:}p1C}\+N}Y$R}3W|C|||} }Џw~Z~TY~+A!>_:l=N5阹$0k) *j# aˀWPl8 ӓ ӑlF&@_<9%p4E/Aل)Sd"4sɃcdrRu +; a|iyL>ӊU;7j3lh. (E?!ՈRpׇclsK b8=v낞D_=Џ:fi>6.2GD,j'9(n ㌶p]ۊ0}y  "x <09?5r1#+ӗ:&& iX ڇ.d!W:рw:ꘗ7!p4ej/WP*%֗R7aI^P ŕF ZI>BZ:ɩ[6\27]-_({`L#2Ha~#gbSc頔d ff]thW:j{amr31y.=|]:^u7_j37p`-a(b"cdee.Mf h|Z!j{痀loPt6z=,`u:a!7ea3Zb.d(e "eSbf_gzh AjU/tl?n` qu{7f:(Gf5gE1ţh ,ڢh'5i"ejӠk"kxl L n 9oߕr$:u7-x@|h=Фj9ҤKj%5LjI0ˣDj,'k'kly!m%hnmxnHn p&qtC#wyV})t-v'x{#G~0<EqC8tq4Eq/qW+Bq&bwrG ur7r^.sgs nitޗ|v xzo|^mB;*u7ӢJt4 t/ t* u&%unpus9uurv) )w(y ɓz|N}g":1Tx7/x3Mx/~sx*xx$x@xxܝxry ޙxz 3{x8|}s~(91|l6zI|?3F|;/!|;)=|A$9|Q3$|2Ɲ{{ |K |-|}o} O~ ~T8 ?m1/*p!Q7ińs4Aa1[ՄO- 7 '"_KD_%pE \Gs,ӒX$6PW3t0+ٟu&О*!MN5sօ ӛzȀ€4ɠ2+.{*%. Hgy?ZqƊY% rΘӅA;m3RB0ßd-w)$4>( cf O߆ ,)#1ƛ/|8,j(z#E6Nq / $r\ H攲*GU(ScRX6PdZNd]e_CfaŁgdwhfkihaZjqiW$kkLClm@nna4no)o*pnq,pqfrOrk_^`_a`c~bjegcfdhuf1jk&gVl `hmyVioKMkpd?llq4kZs3lLt(luWkun>usqw!kXumYm[PnB9]enˇp_aor}a`p.scpizdq_-frTgMsI{ht>j:u3k1v[(7ktvIjwUmSwi[qx>V-t^Wis虮Xs[4t]Pt<}e_ts5a0uhbu}^"duSevHgw@=liw2ujx]'jZxjylxPrz8UxVxlWx*(Zx\x|_^CxFrM_xgax]xc*yRdyDGfdyV{Í"X{Z{j{]1{q'^{f`t{\b {Rc{Gqe:{ci/pdB $ce#+gՀgsN-P PQSSΌpVw(XSmZ/b[ljAX]ixN_!D`9b`/c(u$bd#I'ft߁OMØmNܔMP3҈RbT_vVBkXَ:aZq=W\0M]ՊC_}92a3.a$AaYfub RkAyaM%BN +OTBQ~TStU͔wjW#`EY8V-ZOLm\zB^8_.`ۊ#`G )a刺 KkMkz>M@Lդ=M㎌N꟞[P|Rϛs^Tؙi*V^X LTYK6[EAd\Đ7\^@-H_)#_W):a> Jiw҃EL~TMh+|NمPN{R>r T'gUϝ]qWSpX|IZ@/[6']u,^6!^L`_ lizAL&L#MCN#8Oԩz`Qg pSofUI\ VB%RWHY>Zo14\Cz*\ڕ ]}lI_U nS |_LLʔeM\LNOzy&PoxR˪?eHTYZUPVɣUGX9=Yp*3[.)[:G\ܕ_GMlxlxnAy)tzf6Xw6Yw_Zwf\wf^wkxV`wnbfxdcxdZweGxOfyE h{y:Piy/kzI%k2zckFzmzt_{W|X{~-Y{[z]zw_{ma]{7cb{\Yd%{uOe{Dgc{9i |/j|_$ni||jO|zl|YuO}VW$X~Z~\~dv ^~\l|`E~fba~IXc~>N?d~;CfK~396g~`.Ah~|#h`~qi;~X~k(~ku~rT vV$^WqCQYq~\[cRu&]pkq_ a`xWa݁TMUcCe!8~f-gV"fsgwMi uSzTVX%}ZstI\=jt]ׅ`_LV`LfbgBbc7em--e."e!qfozi<.ulRPS9XTvVË|X͊sNZ ii\c_x^U_KyaJGAb冏7vdl,e"Vdh fBu hЂvPהQSUUp{W|r(Yh@[g^5\ЌTE^DJ`@a6cF,c"tcYe7{ rl{ P1꒸Q%zReTqznVe pXfZ5V\[R\Ik^͎G?`q63b,bЊ"EbYRdQ l{!OPfQ7-Siy UqoWeY$[gZuQ[H+]7>_64`*+Ca;!Sav)c IkPF#y ȗJOv"P3H1QMR9wT njZ`m lxPQn(n6EoFo:_pLp/pr0% qs0dpsrtJZuMucdceӒndfehgiw h}kmzilRcjmYko O|lp|Dnq9|o@r.os$otou\:quBuvw_jZ`kJakcRlemverjkfgsb!gsXhtMjUubBkv(8=m v-mw#}mxmxbox(uzF[v\vb]v-_v=}aXv?e5dՅ4f#D*f gf"nh. wkExρKT `UU!hVG X:xZmnn\.^d]bZ^P`}Gb>Mc4Vd*{eK eZgR mh{S9ɎT{U7}WvXm$Z[c;\Y\]O_3FS`ōF=b`3d*ed md3Gf_ m9{ʒR9Ss߆T[x~V0ux my,TnyD p/yxjzѕ^Gyُ_yn_y aXxxZbxoZdyf&eyJ\fyS-h-yIiz >k zY4l~z*Nm{ l{Kn {= Pon{0x|EC]-~S^}d^|`_|wTa|XnXc|He d|_[e|yRg0|HSh|>Pj|3kJ|)k}ik@} l| m}=xz(}X"[R\]_1v`̀$mebdcZdQfrGkg@=i63$j:R(jgY_is+kO~ %l~lx~uZH?[-\AR~^]u_/lfaic b^YcЂPe Fzfv-gmBYg'Bi9 p} /?VWU삋XDzZ vr[[˒*i]_d_ U`*rL+a]KBb͌:dl1)e(fdWf/wlh~ o(}_ *UٝBV7WnyY$pZėRg\^]"Td_J`)`Aa8c.v/d:&ebje|agɈ Cn{4U^ZUVpxX4}oY̜f[\\R]LIH_ @J``7kaq.}cg%ecdg pa}PU EUXC~tUovWiBnEXeOZƟ[\Q]:G^>_N6`ŗ-#b(($ bR"d6fr%s2>*TQU}AUZu{V2lX%dZdZc[LVPI\0F]-=^Y4_ϛb+a"aSDcrMf=Mtq@pXhp ZpF\dp^`xq6`oqbfrJdn]rfCSs?hJsi@~tHk5tm+uvnh!uo)ukp vpnxqmj^Jm_mfn`nbiwokd4npf epg\q3i3SqjI`rul|?mrp"3sq[)srX stsss tt/yRuΒghwhriaii~jIjv^kUkmlldmgm[hnnQnoGoq=pr;3KqsC)\rZtPrtrku squywCewmf&n-fn_}hJnuHioljpDckq#ZlqPmrFns}D]^Є€_Ԅ yWaWpbӂgd\v^eq*UbfcKgBh+9j/k%j̀9j+il ~nt&{~ \]xE ^x`p-agc3a]dUT1eCCJfnAg18i/Mj$H%j7itl; o{ʼn[dE\;P~]!}wo^Čo`Kea\ZcRdIe46@f_85g憎.i1%JiWmi3QkDq~3Zm!S[}][u]m_d|`LZaގQxbƍH(c?`e76f.Kh%~hoh~Maj,r>,!XYZ.{Z՘tc\}l]땇c2_Y`Pa^FbƐ =c5ue]O,f׌$,g+J gi rQx~ǀ|hYPYNzmY7r[upj\㚷a^XP_ZN`ELabtIsResswut ut |vɋiljOlqjmJx7kmpmngn#oc^npVVoq LpDqC!qr9}qs/rt%s#u/rut4u vtvj}x:gqhsq~Wi#qw/jDro k^rfflr^mlsU;n$tALntBfou_8pu/qv% qw3q{wJesPw< sxm}yfv߃fv}kgdv*v3hv;nivLekv] lvTQlwqKCmwAnw88oxS.'pYx$Lpqy(oy@qy# ry}p{d{zeNz|fzug;z}mohoz\dizY\jzS7knzJ-lFzA mMz7n_z-o9{(#ou{[Io8{]qH{7 r{||2hcDc|d~}tf'~+lgp}ch}[i}R jj}Ik?}@ lP}]6mi}Y-n0}t#[n<}m}fco}!q}|}maW3bn{ectd;kfCcgUYhPiOGj*?kE/63l|,m;"mljnq+~f~}|~ e`Ā_anzbWsNcykeb%f~/XgmOh1Ubbg5c.-d%ieMTfyip lQyvYgvZ|v\]uw>^.mwm`%ewb] wcSxeSKxDfBxrh9xjp/yRk%ym"cyn zn_{9o:}q34t]t_ {t`AtukalucdvFeL\vfS0vh0JPw iAwHk;8Lwl.{x|n($xoCxoyp)MzqhPsr_b>rczrd#tsseflDtfdth1[yuAizRujIul @vmn7Evn-zwo#wpw}qHxq yrGu$ipRf pgTz:ph+s^qi#krlj,cXsWk7ZslKR-tuGs"ouptjutVvtywZuxlHp~lp~xdm8pqtn0qioqacprYprPqTsGqt!>Ort5sVu/+Tsu!svHsvcuBvm#v(wTy]#ju,}k twVktpZlthm~u2`snuX1oSvOovFpv=qDw!4qwv*rw!rxEyrxBItVxKuy$zPhz8}ibyviy\okyTgl y<_m!yAW8myNnyEoDy= py3py*:qz? qzrJqzhCsz}t{|$gp~z|h}uh}Soi}g3j|^l|V9l|Mm~|Dn1|<o|3Co|)p| >p|p| rR|yu||Sf {KfÁu^gtnshfiဘ]k:U5kʀLZliCm";nK2hn),ooq~o~ q~\fu9}}me%z}e_tfsmg0eh]iTjKkS9BWl:m A1m(nn7cod p.uc~~Dc׋ycdp se dlfPdgs[hRixIj@j؆:8k؅l0lք(=m9'mnP ;ovq|b.wcNr ckjerbf-yZ\geQbhPHXh?i7Yj/ik'Dl!l2Zm[ nj\v{kavCbpvb~iXcٓlasd@XfG'Og?Fg>h5iS~.jHJ%kG~k lވ@ n&wujz`✸taVnaugb_c8WeKNfBEfH?zh=5{i, {kJ"x{l\@{m$j|mz}n7p΀xB]{}x_^ux_nxa}giy(c$_yndWyfNN^ygEyi=Lyj4yz!l**zm|!`{?np{8n |o0|up+sLv*azvYbtvcnNwdfwzfI^xgVmxOhMx}j%E5xkmJs4uBhsv59t0vn0tv'uSw)uw]vwz w(wxxz|!lxvmx2pnYwjo$wb^owZLpxRqrxtIqxA:rwx8s y0+sy&tTykHtyuey v|z5x!z|{/k}v l8|p l|(i\m{an{Ypo{Qp7{Hp{@q[{7r{/r{&sV{sy{t{ ur|5w|E|z`jwUu2ko\kŀ hl`mcXNn.Oo/G$o~>pS~6q~.q~=%r~Mr~Ps~ t}xP}y}yi`tinj^hk`#lSWm}Nn.F$nR=oH5p{.p%BqOq}asM ~t{Ux~~zxIh7Esbh}miVfjS2_ kMV}lPMmrDmr<`n U4n愜- o$lpmtp (rG 1sTNyIuvfIqg[ykge#i]rj U kEL6k͊|CalM:lՈ3m+~nP#ocM{o̅q rqy؁uEe蔝p3fFjAfߒcg⑶[hؐSiJjAk:9mk1lV)la"mnp Yq녦ykseneFDheØb fZkgR1hmIri@@j,>8j!0k&(}kb l+xn0p: KqB{grdLmhdbgRd|`eXfPgjH&hʘ)?;i>!6i.jk'jrE\kqPmHoˊJ{q|ށ@qcyklcec_5duWeѠOg$Fg=h`5_h̛ -ri%iS&Pjjmos-~a|e~\Yv~FZpa~2[j!~]b~_[1}aiR}cJO}dA}f9}g1}iW(~ j~jk~tl ~ll0mplz |]}u|/^uoi|E_i ||aa|bZ!|d^Q|eI|g,A-|h8|j0O|k'}7lM}m}m ~naY~0o}ry3zamtRz6b7nz`c7hlzdpa-zeYo{VgQB{vh\H{i@{zj8,{nl4/v{m|&0|An|o8|ob }o};q t{yx)esx]f2n>xfgyg`y~hXziPz2kHyzEl@zBm+7zBnb.zoq%]{#pf{`q{q {q|Wruyjvpj^srvjkm_vjfwyk_swlPWxtm(OxnGxn?-y/o6yEp.yq$zrIz8rPzr {s`{tw2x#tnrrunlTuoneuoC^nvvoVvpkNwZq;Fwq>wr5xKs-Yxs$xtEy!tyt Mz(u/b{4vtxvrrq+sdrk\srdt{s]kusPUusNvtdFvlt=vuX5iw!u,wmu#wv\Gx v\yv y_w2zx_z0uqXwPpqvjrvds v\svTtbwLtwDu;woሧ6pF/ p݆'qQrLrH8tquK}1o jbijdk5]l!V%l*N0m̎VEngm=@nҌ5o--wo&pfcpɈrstt}mihiIbj<\"k TkǓLl̒Dhmj;mՑ3n),n$n׍KoqɊ{ Ts9t넶~lhcg)ha)iZi?SYjԘKkCl:l2o9rru~#am~8ah~Tbbm~xd[s~eQS~fK~gC~h;~j93~ck+I~l!~m nf~n -~oc~pthr|Le5m|qeh |fja|gYZ}8h[S;}ibKZ}jdC\}k];C}fl3$}Am*}zn!c}oW}p}p@}p}rVus zimzig.{j%`{gjY{kR)|l{Jt|mkB|:n<:a|\o2A|Qo)|p |q}qP}!q|rP}t&wqxml4y5mf&ym_ynxXzCnQ2zoIzpuAzq9{#q1r{hrU):{r M{s|V{s|cs*|tb} vx\pmw7qkwqeDxq^xvrWxrlPyBrHys@yt 9zt0zMt(zwu,zu{u{u{vxa}wyouv>jTv8udWvu]w(uVuwuNxv:G_x^v?xw7ywX0yhw(yw%z9wYz_x]{Ux>{qxu}z {motAzitycu^y]2uyUvuyyNvyFwPy>wz75xz>/lxz9'xz0yXzky}z zziz{-~U{|n1s~hs}ct.}\t}UU"uf}3M7u}IEvZ}S>#v}W6w;}O.w}'x7|fx} x} y}25z}+~}}m*r hrb\s[sFTYti LbtDui=0uڀ5vTu.v&iwhw:wt yLy~~~~kq0>fqxaqZr~S?sVK!sx_s8u놵 IvKxWgen#b-n:\lnpVoZ~Np G[p㑟?:qb7qď/ q'r. rX5s"1uT v+xY3f7m@q`mHZmTn^MoFp=p5p-q&&Oq; qKr΍mu vq0xelw$_lkYl#S[mzLSnJDo2Ă'hn6܁i/k&l;/m9\$n8Aop;~rGv'jdfe.ae[fT gM@hE)i>j6Bk.sm&Tnno>pV~qo~=sw-kdhf0fi`ziZj{1y/:!{yn2{y+9| y#|iy|y|y 1|z|{|}"fwj}ax3|\tx|sVCy-|AOy|LGey|q@Ez=|9dz|2+z|*{^|#{|g||~E|6| j|d|(|}}~bev=aw&[w\Uox=N xFox?'yN8Fy1z)z`"$z {>{ { |j~~d)u_v]ZUvT1w(2M wEew=xjH6ix/x'yH yy{!z< V{@8|kbuP^u-Xux%RvKvD)wOOd}HNee@ކ f99g1{i*5jx"km+_n PnorvcJd_VdZօneiU-MfTNGgKG9hN@8iI8j#1gk6)ly!mn>}o \mptq tIwcThG_.htYhTiMsjhF~k:?=l$7ăvl0O[m(߃n!Po6]plq r!suxcl(^~l.XڂlgSlL;mEenn6>Odn7Xo/Sp\(Bp (qrQr eGsOtwFybp]oWށcpQnp_K$jpDUOqM=aQq6BVr/`s'Tsg ;JstjBmt uMvx{abt%\sW'sQ2sJdAt&Ca>t<|Qu5f\uz.B}u'zv€v;qvw wyz|,` ~xx [~wV,~wP[wI=wBfRw;ix34xs-x&qx6xhy yc SzGz|#}^}8{Z}{fUh}{GO~{$H~P{1AR~{{M:i~{d3~{,~{%{|4{z.{\2{ -%|R"|}R]|SY|1T|N}#~G}q~@f}~9K}~2]~~+n~"~y$w~B~;~s~!L~~A~~v~~t~~\n{~XY{{Sa{ƒ3M| F|]?d|t8-|(0})}C#}`D}}Ȁ ~]b~!1~N[zaVzmQzLz7E^{B>>{j6{/|,|(T|Z!|m?|x} }a~+~UYyOUkyaPgy\JyD zR(=zƊ5{.{T&{{@{=|yt }eS~D~3XxTxNxAI#yByq;y#4\zVz,z %3zYlzz{\ Q}# } ~AWxfRwԗ]M^wϖfGx/A]x:yF3,y+by#z"z cz/T{ |x}_~dVqwmQxw'LwFUw`@wך9x2y*5yQ"yynYy`9z _z쇨8{/k}^YYЏzZT @[oN{\H^vBa`;wNa4*b-?dV&Ntegq&iXjS rkJ'\lW_ovn\\X]S^N:_GaNAb:w`d3EeB,#ff|%Jgۈi@PkJGlE مmM;nhqw[s`W<`SFaM؋bGFc@e)9_fU2gV+qh~$iakbilm ÄQo p~six[cWfd'RdMGLeGf@kg9aQh2i*ij$"kԆm)no5 DŽpqDtyD\4gW~gQrh&LQhFi?qkj8 kr1sl4*Xm#n*o Cp:=p68qrvxz[kBVkVPވ&kKl(Dl>t:mj7ʆn<0n)Ȇvo# pUmq qՃr6s@tw{uZFnUnOӆoJpoCo=z,pm6q0q))r("[Jrs 5,sxXy+rzn|J~W dzRăz4Mz H.yAȃz:ރz4]z+-'Uz3&q3z; zEzOz *{|{~Z|}UԂ~+QЂ}M}Gp}A}:}3"}m,,}M%v}-$l} ՂP|:}: }%}W~7~sTDPLFNÁ?V92 +$GO >y*8, S>kObJ}"Dဵ>[70ρ!)D1"ށ?q p! rk QfMzDIC̊/=]6O-/`(g8!lf1No 5(;P~ L~OG~؏B*< I<5.dǍ$'- /ӊ'G@ ч^%O~ K8}F2~@~G:~<4M-G9=&hgqDV ~; ~:e~=G/N}YI}L8D}N.?~}d9|}3&~c ,~$~ݕ~ w~~w E~ /}/~VVYQZTKP[?F\@^:_4a-2\P7]RKH^@F?_@`9b83?c|,`qd%eRg>Sh1Lj鉁l' ̇mWoUrvSБ_O`SJa*Eb;?Ɛ[ca9rd2e+뎇f%*g ijÊolIzm hn!p|swqSc+NqcJ%?d!E)e?4-f8g2Qg+th$iTklcPmo3DpU|qBuNxT1fN+gI ghDWuh,>Oh8&vi1j*䌀kg$alIDm:[nAɈo {p&{qswH|tSpjaN0jpHjCCkP=qk7WWl0mh*@n#n|xowop9mq. Wr(\s Eu%x}Ra mM6gmGnB9n1qLsuqG+qB %q;r,5}r/ds (sU"0rst tfCu7 ܆;vgwya{_~XPXuKwugFuIAa/ub;Cuv4퉲u.:u'ȉv!`vKnOvvw| xʅgy{(|{N艚yIJxE׉x@`x:6x4!x-y&߈ry yy'ʇVy?my {\{|G}M|I|ED|p?|i9p|[3cK|W,|=%||8{{|Ņ}0}}R~OLs퀤H܀D>؀l>釿.8퇳2o+b$܇biu%,~s~ g~|~v~ ~~Kʅ#G*ׄBԆㄥ=لC71T郰*{>#ׂ;aՁN cV#o..IՅމEAy!,τǓ]93ׄ-.'9 >}f߅" i,ӁKFo3B =m8m;_2o,%ߕO9ᄶ 􃀉e ́E>ہiLAYpGZBl:Z=\K8V]2Ɩ_,`d&a\bfd\pelPg iHk$0mrxK\WG(]B]=_7`L2a+b%Scd!fKgi kЋLlш1otzGJ[R_eF_BWl`=pa7ɕb1ڔc+'d$ef&h'>ik @m n|qCu{J bEbA=c<וsdf7MeN1fH+;5g:$gZhPLj kim0 -n{prv{JЕf:EݕafS@#f<"Tgf6h0ɒh*,i$)j{+kR|l5^mK:n pb ^qtxD~J"iEJi@i;aDjg5j0k*3l}#mckmnfo; Wvp3q?scvhyo~ImDUl?% m:ccm4m/on)i[o+#oˏoΏ$pt"Cq rys uPxzt?HpCp>p: Lp4kq&.+q(q"$[r9 rcYrbsp fEt-v-숒w.y{G7tBtN>6 t.9whtK3ِ tc-st'Ďt!KtB;u!u`u w"Tx~y{a|Ex"BUw=Đ'w8܏w3LFw-Bw&Yw b*w_w9x+xm k@yԉwz[{|~(D{A0{]=M{C8E{@2{;,<{4&{xzi]zzQ{& |.^|}D}-CU@0< g/7N(~1ԍ~+~%`~jdN~0C}}} $~Vƈ~5j~-~[i~Bi>Ǎăi:ۍ;5o0P*'j$v́i)9 zX 5ƇeTA49D=94ԇ4/B)Yx"󌄆 zEՃ lj a\K?ˍ<#8}3d>. /y(+J !݌0ihRYi fa sV>^b:ߋ6֋2*ƑB,ɋ& ;;$DK-(8 /fv0mI[=S95l0[+V%׋/l %цC{fBVҀBhVY:>@Y9ɠZ5_[0F]+l^b%>u_`Eaܙ8cBzd ۔ug-ۑijk!nu_|aAş\>(R\:;]5^0_*`$bf=blce>f yi5]3jAm qv}A_=(_w9z`-5]a/b*bc$$ad$sd"e&fh Yj>cl㍅nrx'~9@Нb'=? bl9)]b4vc/d*e$,f]㘑ggJPh j PlBn5pO`t'wx~Ae}=!e8g_e4hf.ؙgK)|h#hwit8j4k Zl 4ny oƌ]r %uzrA hqt0wN{h@k;k6tl2Lly-`l(Km"Onjnln 2oQ pqTr4lsvAx|^?&o;(o6}o2#o-p'Bp|!ߕpq ϕ;qO_q +rՏtčvU\xKz[}]>>*s:ys:6%r1s8,NsR's! s˕ ss0tH YluPvcx`zBG{~=w 9"v5v1?v,v&_v Fv䔚vZv.w wyoz|Q} €;z`8ؖ}z85)z'0oz(+zz%zsAyHy+"yْy Abz{t|}MH}:ȖN~7ޕ}46J}/Ŕ}*^}$ϔ}{}K} 8|)R}' }}>}t~~K9ϕ_.62.x6)^q#ǁC|$쀦C d pԍYe~_7-85nV1"K-6("}Vbu+߄͓t{ 2rƁ7(w40I?+Z&7f![NVTS7m ϑaqioփggw=5;2G/ N*“ B%돐 .$6KڌU͓? oƅ(Ԍ@{4X1Ots-ؖ)v$RNOؓ ߓ!W Vӆ%%8!X5ZY0Z;,ǥl[G(\a#S]¡^ޡu_w`4b7 zd,yjfnhkHpyL8o[t5U\1\-M]()^"_J1`Ia b [d( f:(hy`jmrz7饅^4䤥^1i_2-&`%(%a"ޠb%(Gc;cdu !f hjBSl"o9t:{l7{a4]aT0a,b'cc"d]ce)^ekfw g r,il W@nGqhu|8dd4\Odr/d+ej'f"!fgh+6h Mj 1k?mMp4)sQv|7}gu3ס7gy/Fg+%>h8&Gnh!_i%j40jk lVm˕o$ZrKuDZxP}6נj2cj.Oj*;k%k l@@lCmWm (nmo"rtw,(y~6-nO2n.HXn*"n_%n o'뜜oo9o Ú%pmrBRtk>vx{ X5bor&1q-vq)ᝪq%qrr2"'r_rrAr Ws1tTwՐyz|I4:u1OuG-u+)~ uI$ucJurlux.u$>Cu vlSwJyZj{0|\}2y0Mx-"x)x$xxx@xX x `yzi{3|o} ~1|/e|,>y|( |#@~|H|]i|n{ ښ| ј:||}]I}"~;~f1$.Js*&כh"?>. Xu BI> 1r~e `'='0L-!()%= ̛ tl:|kƛ vՁYb.Z+؊T(zZ$a SK"s䛨 8ڄqBؐ9,ɜ*:ːH'0*#-iFc̋z KՄ]E'sF&+G(%!6n"a` Eˆ [iLUӄC)xxXJ%`UnaWŚUbZbc\d_>|beaqsfcfgMe\whFgRigiGjkA;sl&l/lm$ln=loZn{ptq9[]]^ߘ^N`_badzbjffpSch:edi[ekRgLm.Fhn:j0o/jp$jqjrklrv!tOX;dYeyZfR\g@^uhym`6jo@akydcRlZdn0PeoEwgp9hq.ir$"iks__s0XasNc.tqCdu-8fiu-g"vs#Rfvgw iwAw&xQLvǚoRv~Tv,Vv#XHv vvZ{vElu\nvbQ^vX#_wMaw_BcLw7dxB-5ex"eix9fx hy.wzTPzڗ{QzC]SylU-y~*W>y[u)YzykM[RyaK\yW(^yL`VyBMaz!7Nczo,dz".dVzf+z 0izxm{lO~ǕP~Q}@T!} |V=|sXv|jZF|`4[|}V&]|zK_>|lA`|`6b|+c[|!yb|d|c j| y/|뚴N"OcP-R̀{TQrW/hX_ZU\7nK](@_~6a9~+Ea~ ay~Fc~` 7ko~Yyq~%L|'M؆.O6CQ]zS,qU׃gWS]Y@T Z傓J)\@8^b5q_߁m*`"4 _b6m ky.J׋SLOMO܉zRLpTkfVJ \W܆RYI6[o6?u]*4^*g^ _Ipac llruz-UIQEJLŁNPxPovReTȋ[V\\QX HY>[4C]3)]j1^'`C 1m'V z߁HcI_MJLdwuNn QId#S$ZTPeVYuG X.(=tYϊ3[)[]R_c Tl,3z'HHpFI\K䙢v MݗlP(bQXSM|OTۑEV<XK;'zY([[#_׋ o |^H6hH҄VH˨|JsQrL!iN9_O蟝UQLCR3CjSљ9U a/V&1Wܓ(ZNbp~fH@HigamhccieYjtgOkiDlkd9ml-non#Vn:o:nEo p_pJwq`=\ٜa1^Va`nc$a؀dPcveSelf;gbgTiYh#kLNilCkna8^l7o-lp"lqlro Enrfxtgp[cԙ\d^e_f~ahucbikd\kaelPWfmMh?oXBip7mjq,kr"0k2sjWls mtY6xu.XxiYjh['j]k}_&lFt.`mRjbn:`do,We@paLfqAhfr6is,'j7tp!iuk"uP lu%ywe*UipΗ_VpX~pWZp[|a]ps1_q7i`q_bTrUcs:Ket'@gt6hYu+i vX!Uhvj`w lwyNyT_uߕUuVu-Xu3{Zu3rn]uh^u^`v1U#bvJcw!@eqw5fx2+7gx glx3imx -kyyzSyTyiaUxGWxz.Yxq7[yg]y@]_2yTT-`yIby?d"z4ezi*fz dfGzhaz jl{]:z| R}S}'T|V|DxX| oZ|f\|/\^|S_|&HaQ|:>b|P4Bd|)e>|d|g| m}{3}] Q'"R9;SoUxWnY}eW[d[[\+R^LH`~=a~3c?~)?c~c_~&eb~ m~{[~O1PJRT.w)V6mXfdEZZ[~|P\&G^=B`m3aj(aā6daɀd* zn[p{}NwOBP'RZvCT‡lVc)X}YnZO[xF ]p<_*e2`(5`aK6c WnC|1LMN}QuS1'kU|CaW1XXNrZE [L;]LJh1_('_@D`S{b Yn|QKuLH΄Mi|wOsQ>j@Sސ`UVVMXZCZ6:\ 1c]']_CyKaɆ vncw{J'NKLwzNr PhhR_T[-U=UKVܑ{BX9Zwa0)\-+&\Ìd'^)`$ In{J0KhKy~MpOqgxQ]S1JSTPJ`U|*AWO]8?X뒟.ZuD%[_]b+ %p(m}JJɩ +K5"x LoNfP\`R=RdSAITIK@OVI6Wvh-X$4Z)on\kd\r{hWm:JJ~JѭvLS2mMdOc[ Qn[QR[GSL?T螷5V0,EW?o"YMS[ΐ3fh<tFgiV)8gXgZ,h\i}Rii^sj@a%jOkc<`keTVlgPM mi@B nj6oli+pm!fonp)o qpJx^qǝc\BdR]d_D.ea|fcrgei!hf_sihUjjoKklL@mm5no+DnpO nEq8(nq "p8rwyt_bp`}cWajdjrbe{d1g&qe}hgfj^agklThlJjn?ko4lq*m;r ?lrns/ oWskz>u\0hw]1hR^Ui`jPyakbp|clYfdmT]yfniSgaoIhp?jr4>kes)ksk~tnNm&t n]u`zwYdn|*Zn_[n]nx_o}o{ap*fcp\deqReruHg_sc>#htC3ju)sjuajUv1lUv\ |mw>zxWtXtKYs߁[sw]pt n_twe8a>t[buRdAuGev-=eg[v2hwk(iYwi&x,tk`x? my{zIeVxWvxdXuwZNwv\wm^6xd2_x`Za6xyQ!bxGdGy e~C&e~Jd~"f} rp}}F}8R[S T݃}|6VʃsXj>Z`\EWB]{M^CDE`:bH0c&jc3=cv-e UpIhF}~ Q&pR-S]{dUPMrWBi.Y^_ZgV\/L{]C<_S: a 0Hbl@&Aba=cOe OpS~OJP[QČz+SqpUgWߊ#^OYleTZK\) B]V9K_/a%`/bk LdӃ o ~NLO.iP)UxR*0oTfVA\WˍSAYIZ@\)8]/_%_#aVc؆ p|ZM݅N1~OwQ%n^Re;U 0[VQWHzY I?Z6\C|-^[$^_`@cJ ip'V|NrM1܄,Md}`N3uP%lQicS̙Z*UQPkVVfGW>TYH5YZ,j\5p#S]R_ݍ$`dnJr ~eL㨩M{MTtO0CksPӡ,b{Rן XTO"OUYh@mbPi`nFjo<5kq)1m&r3'ms m2s\o5s Np.t|v]2l^Elń_fm|amtObn:k`dCnbBeoYfpOrgqsEi5rq;bjsp1ktF'!lTtbl!ul@nQu 3oRv|xZrԋ1[r]rF|^r sC`rIjbbraScsDX7esNfhtaDgu:ihu0[jvn&k*vkw?mowS oxu}yאZ wZwO[tv{%]3vrk^vi`v`Xb8wWAcrwgMdwCf3x9gxz/i[x&!iyQ.iytlKyb 9pxzQ,~{HY{YzvZzy\9zZq_]z+he_z)_'azJVbHzaLczC!ez9Ufz/[h{.%eha{bgh{jUj{Lq.{~|VWXn~5YC~Ix[}pI\}g1^}V^`}OTa(}4Kbp}/B,c}8ev}-.f}e$f}sg}Dh}q}(~F}fVVHWOwYoS[kMf]a\^ŀS_ۀcJja$/A.b7d<.'e$&ddeGg~Nr~uw7~7TicUm9~XVnvX7nZZIe[[]m4Rs^I-_Ƀ[@(a]7,c -dMA#d'e^Zgjrb*M~`GR׌Š }TՋtuVm#XcZZ}[#Q]G^N>_ن)6saz-b#rbӄd+fsM~3QRH{S7tU kV玑bXcYZ\qO[gFf\=^5_戭,aw#a!c~MejqՃ~P)OQI z!R9rSmj!Ua&WWY>NPYD[[rn]jIoY`aobXpld OqeFqg;rki1s"k'&s_lormitm .tnk{pj[j\kF^2zl_rClai}m|c`n*eEWnfNQonhDp(jn:ql!0-qm&3r=nJqosso \t%pZ}rӎg`sh+aW)hbwz|icqjteThkf_lXh5Vm iM]mkCnl9on,/bpol%ppkp}qruqS s=rH~Rt#de.efDegyfhphi,gi`j;^jakQUklwLkmClo 8npR.oqa%orr4fo7rqRs r.s~KuakAbak\Jckwdlpoem#fg^m]h^nUiYoKjpAkq}8lr.$msn$nf|35fg|E+h|y"Jh|ip|hj|78s|H|Y~#ZlzB[kr]j^&a`3XaaObWHFHc}#=d~4fY~+8gW~!f~Dg~Xi~ "s}})XYyLYPq[i]4 `^߃iWs`N:`DbM4Z×5[-\%y^s,a,Fc፧ kшx,!|fRjvRkp2Ri7Ta0UgXWO_X="np4o2q+p(r!pjsg%p~sr>sttwdco(~dKo xldo qHfRoi?go`hpXriqVOjqFkr=Xls=3ms*nt nuB5o`ugq"u\uJvxۃatJ}bPswJcsp0dsh/es_gIt&WmhmtNi\uEjKuh/NjSw knv~j~ }>ZxR[K5am6bׇ~.Pd[&1e\fJh] NkH6 wzVX/Bu%X|-o[YAh1Z`R\W]N^}E_D<` }4a%M,b$cGeCug k䅗x'xWUzsWf&mWfYak^ZVN\5M@]J?D*]ݒ+;]^36_+``ݎ<#]a4dtkg mVyMwVr%V5l%V͞e/XA ]YYYTZK\VB\09].1]x)_,"`ʐcێhf o4z(vWU)pUYjU夦cWD[XSZ FJ[A[8[h0m\ (] `Ic~`f< 6p}4n{聢t V} tX:vtYp4tp[ht]`lu_WupasOuc"Fcud=vnf4vhd*wi wjfwkxlDyQmKp $qw[A{q\buq]oJr_\gra_ssbVsdlNEtLeEtglsot*pZtp uqU wr_ujiyji:skMillPjmdmAkB\nXl"T~om(Lon C@pen:@po1qp'rq9rrskr 1ts xt8w8~h)mxhmryimkj?nxckOn[l\oSmLpyK1nq*Bnq9Coru0,pss%' qsptY,rAtc sHtx'v x|f&rwwfrGqPgDr-jhqrubirZjs RksJQlt$AmKt8nt/nuq&tovovTqXvG rDvxfwy| dwvdw*peivifvagvYi:vQj+wI!jwF@kw7lw/ mw%ngx6yncxk\pxxS }q[x_xy{zb{ucg{6od5zhe_za fzdXgzLPshzqGizzx?njOz6kLzi.^lIzv%3lzlzozs 8oz&y{{yatb6nc ~gdE~-`Ie~}Wf}~OYg}tFhH}Z>.i}?5j$}-k*|$k|k|m|| n|yC|j|x`As`%mag&b)_]d0Vem!N)fWETf _5`-`{%a{jacʏeg8i/r9}'p2YjYdYhS^&ZVc['NH]cUgim\s~~|wVwwX*pwYj|w[c w]v[=x%_^RxUaJQxmbAxd]9xf!1y+g'!yi*BzIj$zvj {kc{lqozu[uu/\!ouq]iiu_ b vB`Z8vbpQvcIuw$egAwaf8wh/x&j%xkZ~ylB7yzl zmH{HnurEyr_ts_o-s]ahsb`aGtrcY^ue6Q#ufHug@Tvi%7vQj.vl%6wm0wmxxn" jyn{ptyCpcItpcn?qRdgr e`krfXshPsti4HBtrjG?tk7tl-un$vMovoXw{o Pwp{quxynh+snhSmvochfp%i__pjiWqkUOr^lYGRrm?>s]n-6so%-8tVp$uqtqvjq vr`{svxwlrlrllltm_len7mm^TonVonNpoFvqGpI>qp5,rqq,hsrJ#lss>ssnBus~ vt4{uxhvj\q(qrjpkJkpdlbq`]HmPqUnPr*Mo(rEosX=,pts4qt,+qt~"r=uruntus uGv,{owyuhJupyiuOjiu.cju7\~kuFTluLpmuD6nLvF;nv3ov+@pVv"qwMqkwxsw WtlxX{yr{tfz}ogdyih5yc+i;yd[jKy8Sk]y3K_l$ymC ly}:msy2nMy~*o*ya!oypQy(ry sRz[r{z{se~1nfS}hg}hǃ76ir/jp4(Fkh %l%?m\oπ1q|~~zoajb e bs^cȉWdNeEF=fŇ=g95cgȆo-h&ijIlփVo'aqC|1pnR`L)iQ`Scha.\bZUjc\MZdDeR<,e@3f?c,nfS%"g3whlTnUr]},l_Wg_ma_є[a`SaKc(C^c:dT2d*eD#e5gFkQ3 4mTtW~nk^rf\^`]^dY_Rh`JhaBb9qc12cO)c*"d!g' j׌M BlAu܄j\],d]^]]Xy^P_bpLxR6|px|.q}x&rxrx@sx fuyvMymHz{mi|hj}|Ubk6|\~l {U(l{M;m{EBnq{=1n{5Xo{-pD{_&Np{3q`{Or{< l~DmH~;m~4nP~~,o~5%o};p?}q}} s}zt}5C}`}kg~Kffg`h9Z^i|Rjb9Jk@Bk傃:lM-2lف+|mG$TnCNnq- r!Hum/~~uif$df`t^fXg9Q`hԇI|iAEjlv9j˅1kA[)kᄐ"lwJmxWsp lqX"uvh,d͏Xce][eWfOg\"GhOi?i7i_/i=(_j<>!Mj.lbBoTH pbvfcac[dUe NJeFg>lg-6)g|.1h?&hzi Mkyn p/x1eb`-bZRbИkTcח0LdEe = f4f|,fВ%tg Mgknw pnycdRa^a_XaRbKqctCdu;eh3e+e&$$efϒv"jQnnP 2p1Dz3p~WKj~XEd~Yw^~[!W~\Pg~^H~`b@~pa8~gc}0~[e%(~^f"ghHh]i3Nkom^|Zh|[c|\]}^XV}$_O6}2aGo}=c?}?dd7}Be/}5gX'C}yh~%iR~ej` Q~j~Jk7mr3lz}^bhz_,bz`/\{-arU{ubNm{d"F{ej>|f6|g.{iZ&x|Mjf|k(}k c}&zh69zj!.>zkj%{l{mc{m /{n{nqtmt>zxtzhvEz v{dx{K|!}fm oam~[n0~Un~:NQo~Fpd}>p}7?qk}/q}(r}u!s}?is}3u| }u}*Lx}}p~e`k`4lc=ZlTHm^MnfEYo=o|5p7.Qp'Gqo @qcrVt ?uP(x~~cnj^mjXkSiRl,KlHCm<*nJW4@n,oY%o{oUqs tBpyyaiQ\iW/i;QjyIkBlg:mz2m[+-m($m@*n8LpSsri sՃ:z,`h0C[Sh2%UhLOieWH}j&xAk9Kk1LkٍZ)l "l@vlo?q-KsŅ{_Lg$YgTgANh(Gh?iϓ7jp/jr(@jV!hș$6ib.iq'i ikEUouX mq^ttS}ŀiKWXcX:]YFXNZQ=\J^dC'` ;ma3c,|d$Ikfgvch |in jlqfbZub[e]\WD^ P_Ia&Ab:Vc2e?+ef"hiTj ykf~lopt!eg~]a+~^\X~_VaO6bZHYcA0dd9jf1WgL*85h"1cij:k ~Wm}n*que)}a`}%bd[}:c%U}zd$O}e0G}fC@k~gQ8~#hD11~in)}j!~:k~`l}ms }%n|orve{af`{sf{m+78{Jm/{n'{o8 4{o|pU|p {q{suxcwm^HwmXxbnRxnsKynDy\ow=yp,6]yp.zLqF'wzqzr{rx#{Yr zsA{u wz,b]v!r]AvnqWvqQw>rJwr;Cwr5Txs.yt &y^tR@ytztzu7 z~v{JwWy`{pa)tyv \@tuVuduPuuIvPuBvu;wvV4\wv-(wv%xVvxwsy$w<!zw -yxtMzy_z}+`ry[IstyVty^Pty:IuyEAuyw:vy3vwy,nvy%Hw`y wyxCyytz*ykz{}{^|N~^q}Z[rX}uU&r}=O&sk}H2s|@tm} 9t|2xuh|+hu|$VvW|Yv|wc|Ax|:x|g{}}]pƂ)Yq/Sq~mMrGr?s$8Fs{0tE)t~"tu97vY wxp~|~~\oWqoÆTRpLEpxEqD>Eq䄫6r8/\r( s/R!6sZs 4u v܁G&w}fHZn.UnX9PnJoKCo߉tSl#MxlGlɔAml5:8n*2n*n㑅#no'ps8 u3&hwրVkQQk Lj^F`kv?l[8m&1rm×j)mݖ,"6m۔qnVpNsN u x3a3WY\TaX"VY!QrZK*\QD^=]_5Ra#.x)b'!d$ey=gNg ׂh7jJm@r_5ZCZ[,V,\LP]J5_8C`<-cb%4˄@ci-`d&f&ng>aB9c*;],d\4eq,f%Ph iV%jXk ހl(nLqv]Ba,YJaTbOcHdAӁe:f3@g+߁h$i3mk,Ձl5Հm݀n)'`osPw]΀Ie`XԀ2eS/fM4fGBg@Vh9ci2npjY*쀚k1#ʀl0nm!.mron~oR~^qty ]5~Ti/X:~niAR~iM~j/Fp~j?~k8 lf1)m*vOm#&bnro'o~p}q$}s_vvz\]|mW<|lQ}m6K}QmEF}xn>}n7}oV0}o)~'po"~Npz~bqTQ~ q }r}ss}hubw{.Z{6qV{apP{pK{qDw|qM=|?q6|xrW/|r(|s(!}*sy}_s}Qt. H}zt}5u{}awy|RYyuUztOzftJ>ztCzt<{t5{auc.{u'{u!C|!vf|^v>+|v |wQ0|x}Gya{}XMxxT xx8Ny)x#ISydxByx/;zx]4zax-zx',zx {3x{sx{y B|Jy|czv3}{r||pWw|WSw{Nw{HoxS{Ax{:y{3y^{,y{&!z{zO{z{{2{ {|\{|~})}Uv{Qv,LvG&w@wj9wy2x?Q+x%$x~y(~cy^~<z~K {~~U{~q~~Tot$P%tK'u2qEu?2v8Xv{l17v )w?"w|9vwx6oy쀥 ziv{!WS s NsIs։&Dt:=t 7u>/u=(v!wv-5vBgxwRXy(. #y{+QrMOrH5r BrlFqJPA&q֒:rT4er-6s~%sYs%tv wKxㅖzlOpJpE"p'?pɘ(9qJ33r!+r$lrBrPsobuzK v_wNJxY DWS/WNpXIaPZ\C+[<&]66_#/j`{((a!ce:fօDhK FiɂkJnsRsrW 7Z Rӊ,ZN$[H]LBv~^<`)5 a.cb'0c e1gh5Vj#krEXm+puXV]AQ]M^^HA` AaF;^b4yc-{Sd& ewgehyjc ăQk"lnr vU"`QQa@Ls aG4bAc:d3͆Jf,Ն,f%gJJiOEjal Ehm4nNpsyUUօdPdKe9FCWf@=f9g2h,i%nj|̄-klm enGovqu`zUDhDP$hTJ hEyiJ?i8j2?k+]l0$lC+mĂnop pxq~sv{eTMkO$IkIׂl/Dpl>m7|m1^lnc*sn#rouoYop},qs or3s1juxi|YS oN/oHQoC3p=YXpB6Ep0q4qJ)Jq#Xr @rt^"rCs 7tu@Hwy}QsMNsqH2s^Bsu<0s6 -s/(t>(Eto",ZtEtƀ2u'u Zv<wxM~y{g~P~wZLT~wG[~vB~v;#v5);w.{]{8}{12|+3|J$l|P|ɀm|ǀeB}- }~=D~uK.y8GyBzg=z/7zx0{){R#%{^o{Ƅ {ă|t |c}~Y7JxǍExAxF;y5y/hz (zcPw'VKOEWEqXj@Y;[`56\.ʎT^s(_!Íja)b`d)%fW fthj lIo{tN⏏YJaZEl[h@\\:m^4K_w-]`'0a cdދfI hW ӆjY:&3fgh] ik 4mqyn؁ptzDMɋEcHyId CIYdf>Ce=8df2h4f, g%hUVijk"mn ]Bnb=pT/rvy|LdgTGЉgbByg=~hX7}[h1i+qj$숌k-Zkl $m Zn iprtw} KjF%jAku?u:u4u.gu( v!uvUv!_vFuv Ƃw)y zDH{}GEySCayA>DŽ y=9ƒy<3y2-y5'y0 zyXy y yR zwc_{:ȁ|R|~wE낻}*B}=Ȃ}8|2|,|&|xE|^HB|6| ł|E F|x)}D}C}DnZ@QgW89YR2WZ-"V\'&] ܓ'^`acF ephDj{leqwE=YjA1Zѐ%f[9АKf5HgO/_g*-h$jVi|C0j[jՍmkTl ]nzpWru7y~`Bi=i8i4_jq.؎Oj)\kx#Sl&4lmm n Ɉp)r2CtwWzPFAm=Am]8nme3cm.{)n(ӌnd"^nQoop jq rxtlKvy{@qg0Gx:w6w2 w,Xw&Ê7w jw)w$ww ܇sxۆyz||<>{9{5{1{+{r%׉~{[vt{z(zވ]{ :{B}|5$d|};}y;8#4H/g*j6$r~3~kx~* ~ !}~!~k ~V~6y:]焖6ɇF2҄.H)Ճ\#`@jm  1$n0=h!aJ8@5?<1s,ވV'"s3 Vo (r-w{lcCO&273]0Y/+1&lk4 ̆҇2[z Ї~_?C-632._*Q,%0 X АW)ie ۅHOv$>1.`[7К\]3z\/?]*^$7_`a}bLd. fqyhk*mrw}:Қ _7_@2˙G_.~`e)}aK$9bBc1cזwd f h;gj.l[o s~mxh};H^bI6٘0b\2b-McV(Ζd #def5`f ԓhB Fj'C1l_틈nq}u zB:}e_63eh1[e-37f=(f"grhAhi7 j{ )l5n-8pzsv{E9Wh5Bh0{h,LTiC'( $FA,>ُ. =BĊf5xCŀ(-R*NT&ӍbJ"ٍKQwH ԎP ڍ7߃oLb-2u2U/V%*-V'W"J(XZ# [8Q[ ٟ|]E %_y(%z {|;[|m~R*;|'P|$L| _|zƗ|?{ȘF{ ԗ{7{h|/v|}<}X}9)D,&D "^ #lJ[5Ȁ 2~!~~.n~%'>/_$h!Յƅz#Ä]˗ǃ ]M@sGpZb}% #:K ,Wl֖퉙 ߗ |D|܏ @؀V$M!—IՖ@jtӎ ^Ֆiფ `K^R̟ _U/s`CWɋa*Z/b1\vb_"kcaha6dcWeweNfgCFhwie6ij+IjGk SilRkJm glm zoHQYyZU[\38[]\`J^*b*u_Sd/j`}f4`iagWbiMdkWBf@l6/gzm+gn 9g6oIip qlqzrâ$TaVhbđ Wc㇣Xei}~[%fs\gi^ib_`-jUarl9Lbm@dn5eo*-f.pveq@gq m_r{tMPoi]RixSiƅVjK{XjrVZkhz\l^^TmT_nJabo?c'p4admq)drdMsHfs$ mt#{uўMoO(oSPoSVozVoqKXgoghZp]\eqS^:qI]_rr>as53bs) c7tcht eu n)vn{wLtGMth2Ot+VQtyTspIVZtSfeXt\ZetR\)uH8]um=_{u2`vh(oaYvb w~dw =nw|py"L x?DN75O`,.Q\!"TW ftQ2AiiA릿{BsD&k^F:bHkYVIOIJߛ1FLKݙ>Me4Nv*O!IR摅tXk hVvCAgAŭzMBqrCک^iEǦaGۤWI3MI DJvLFMyOÁSpQgqT^UЀGTW1KXAZv8\u.7]7f$a]0B^~Ed~es~7~IJ>Lx?N'Jo~PafLR\TVSOUfIW @X肦7yZ>-[#\^C6eS?s1{GbsH~JIevLbn#Ne P+[RQSHU9?W6X9-Y愰#.ZE5\҃=fX t E2Fi|H9u'JmlzLcNZPPpQЋ/G.Si>zTr5Vs,iW퇘#:Y?M[c8f`tcDQՂ7EG{WFhusHBjJbMXNNOӏEQ =QRb4LTg+-Uŋ"XFfZo f('sCܟbDyE^dqGiTI}`KЗW.M[DM|NMDvOD<#P3 R0T)S7 VӍ0Y h_u9C~D9wDݣgpFȡgH_9JÝUL4LLCMə :Oj71P=u(RkXUNn[a jwSC}uDv_DHnF$*fbH]J TlKQJKAL9M0tNo'/PtT *B]㍤ lydS4XeUAgeKWfYxsf\ing^e4h{a[iKc,RSj>eBHk,gE=ulXh1m=jg'*m_kllMnm rpn@\}pF/`YbCaNZa\c^w3c`m\`s]b~_ccPuj`dkb!fbBcgXdniO|ejEgl;6hm0Jio%%ipipbkpq{r~t\XLeXfZVgM}/\Ahs^ij_j,a(azk3Wbl[NwdmDecn:/fp/hq%`h0qYhrg$jrqs~v iTl Vl WlO{Ylr[mGi]n `,_gnW`oMrbcpfCbcq[9(etrP.fs0$fsgzt/itZnqu~wRYr*pSqt8Vct.eu^$8eu_fsvnhvkrhw,yYQevRfvGSuyUupWvgoYv^+[v(U ]6vnK^vA`Ww7aw{-ycTw#cx;ehxYgxsyzPJz7&QayRyhwTyNo[Vy2fDXy9\Z}y\6~5y]~+^~"]_~`~:gJ~ u }}KM7%{NtPTkRbTփYMViOW^FX=Z4\ep+f]a*!^`=~dgĀku2q~ⅠJ;KuzLOs>N׈jPa`S3WT~NvŬE-W#`8R0 Sx'fU`Xh[ jd[v+E⤰z]Fn7sG/lH,d[Jў[LRBNaHNș?O7P˖+.Q}%T[_)Wk^jo l]4x~ExF.rJFɨkH:bJAZ:KPMHGGM>`NP6"O#s-gP$SRmVLz`q nPzłgS#)gU!hWN{hYs!iL[ij^ a j`MXkbrOlLdEm"f:pn:hH/2oi$o k nkplzErm~ogdY"dwZrde \|e]rf_iga_hcVicexMj6gMDk&iD9Cl_j.tmbUu4cvo*eEv!te{wUgw~iwku0xzSoy%dThx{[Ux`sW]xMk>Y2x+bF[#x*YF\x/PY^xUG6__x=`x47bax*ycyG cylfLy}hAy7uzQ{R.|SI|=yT{rCVN{iX{S`Z{ W[{O\{E^ { <_{!3ea{C)b{{ ob{dq{F uiW{Ev.{| P~DQxS#q0T6hV~_X~AVZF~M[J}D\};^}2_})Z`}`}Rb}# Vi}v|}O s|PKwQpRS^ gUIu^WMUXpL@Y2C-Zր:\2^MPWN7NPE!P<1Q8L3R%+S!#eV‘Y3aZB n1vz+UyH vsHmIUfJ^LLUV:NM%O lCOuV:O 2P2*NR O"UXƑ8cW mp!Y\|jS\jU}jW)ukkYCml [dl]\om[_T-maK"ncAoQe74p:g,Fpi"pjI1pkrktloI2g[XvgY}Fh.[uh]hm8i_Ud9ja0[}kLbRkdIzlfk@mh[5nj+voBk~!o6loumB)q3m5unqՈd] d^|eG_uf4aPlEgIbc(hVdcZKiFeQhigTH4jh?kj4ll$*mmj mwnZ"n9n ooLupPs`?caczads(c9ejdRfaegY(fiKPjgjIG?hky=il4jn>)ko` ekp/mp npuqu \hY]hy2^iTq`=j(iaj`ckX>dlOemF]fngYsTw.Z s*o[sHgf]s ^_s VCa(srMbSsDctC;1dt1fMu7($gyugvBjMvW kvwzwyVw{WwvXw^nZXwOfw\w]]vU_WwLU`vwACIaw{:Rcw1dnw'exNf8x hxt ]k.xwyz*U{z8V{-tWzmTY]zeQ[zY\\zS^z$J_z"A`Az89?az=0MbzZ'czdzkfzU kzxXz{l}TexUB~sgVa~kl?X ~d5Y}[t[}R\} I]|@^|8`+|/a|&b|qc0|d|' lH|Gnx|$|w|!RCwSrNT[kTVc)X[6ZIZQI[MQH.\?.]7^/`9T&2abU~dp~8 zl~,x}}zPᇲv$Q*pS(iTaVYXX|OY FZa=[T85\΂.D^"%_oha3b9co =}qe)3rif)1shW.s iw\sj tjwuko ajXJ|EjYvk][Nol&] gl^_ m`Vn:blNndEloOe<2p g2Kpi=(6qjzqlkr]l+ salxUmqJg\|h ]v@h_Boi`fjbA^\kcUl]e/M%mfDXmh;(nZi1\oLkB'kolomkSq.m r1nqGxosVbyF5cyA,e&y[#eygyiIy` [ny;zzF{wW~(sPX}mY}+f[|_B]|lV^|!N_|E:`m|_~3ra~+b~M##c/~ e})g/}: o}%{d||u TUpUkVąhdXa\YTY[eK]\BX]9]02;_B*`݁"]acPf6 o{~}~&s|RCoSiT4bVib[/WRYIZ@[8t[Å0\م)C^R@!z`Cb e$ =pr*j{6qQ;mKQhRʏea(TYYV YQ/WJHNXu?Y7 Y/8Z'[ه^ae"u p]@|6p4PtkPfVQ__S +X TnOUڑ|FVߐ\>!W$w5Wzt-X)>&&Y׌]z`sg\>r} .nO$=iOdP1^QVS hN.ThEUhqc@re+7rf.sWh$si)sjuk2 v l {`mmqyykm\itk]ol\^hm`Ga:maYnc>PodHupe?pgk7&ph-qjy#rqk}ral{3tJl tm{o(scyh`ti>anibh'jc`fkeXNlfGPmg{Gnph?1ni6HoNk+,p/l#Mpm,pnU.sn ~so^|ptxefs`f\f{mggfh4g_iShWjniNkujFlDk> m l5/mm,nqn"o4oopZ.rp rq_7|ErvlwTbkrck.l]dzk}eel]flUh4mjMi\n%EjPn=4k'o4kp>+lp"mxqancrGprm -qs'H|'twu`opasok:biodcp\e pgTfspLgqVDhq`_tNcnat=[citSdt)TgxP hVxjDx_lxzjqy}+yzq[|m_\|Eg]{aX_!{Y`}{\Qa{!Iab{@cb{8rd%{0eJz(fUz 3fzmhzjQzyrZz{}{{pZ_llQ[Zf\e`]WX_~P`~fH-ai~2?Ka~6b}/c}(4e}Se}h|i|wr|W<}|t|okXƄjYFeZ_(\wW]qOo^@F_=`!5`5.Ma'+c/$dmf@h~s~6~0}}mV䉑i.WdX]FZ$U[{DM\ᆀE=]م<^2^4Y^,_ %`@4bׂaeRggs>~ka~kU%gkUӎQbVV[X7T/YwLZӋC[!;;\22\+@]$^fat d hڃqZsL~~jcSՕ|eTy`UZ(VsbRW:JXB9Z9Z=31uZQX)Z2"j\`1qcq jۆTiu5Q<(hRdBS=_+SgXT QVHW`u@Xv8X:/X(*X0 [j^_b݋ luvЃgaQɢ]bR$]RhWJSOTmGV"#??V06V.VZ&W84Z*^0<csk n,x3utATptQUk-txW*dtY]nu ZUu`\Mu^E{u`s=$v b+4vc,w e"$wfHwg7y\hyh~FjnsqX o\qYPjWr.Zd r\\s7^BTs_LtaDjt_c<)td3ufE*ug!vWivix5j#PxjN|lr,ro\nUor]iAo^Wcp_[qDaBSrbKrdCre_;`sQf2shV)te,fnY^gnW`ho>OjoGkpX?kp7lqu/Mm@q&mr:njs6jt-.ckth&)lt|luoEu5 puzuvO x)zm`whyaw[bbw\dvUeevMfvEgv=Th=v5:hw-{iw %jw  kfwO\nw] oJwUuVxHyzk_{TgY`{baz[bz~Td zGLe2zDhfz*<fz)3g1z,h4y%;i'yjyly my/uzz{k^w~fi_h~a"`\~NZa~Sb}Kc}?C:d}):e}2e|+f|$g|_Ah|.k{ Hm-{v{||i\+e&]ǂ_^~Y_R6a"JBbi Ac9#cT1c€/*7d#\e+vg~9j~a lk~v}}w}g[cd[]\W]P_2H`ZH@.a7a_6L_4.X_g'_ ae&hk ud6v"f$.~vDg%vhwDiUx0jN y2jz kn;t l=ph_ggp`|bqjad[rbTrcM}sdEtf>tng5th[-ti% u@jukDvl- wlymgouBlCn5d=fndaoWeZpfSpfL_qgDr i =ri4sj,sGk$Jsltmun |vznxo]qw k;khelzh`3m2hZ niRnjjKSok7CpRl<pl4,qbm+qn\#xr@o ro@to /umpwqXtx?ii[mdjl_ jmPXkmQlnJ?mnBnoO;o!o3Eopr+0p3p"pwqGEqqsq t_rx=srvyhSgqtch q1]hq:Wiq_PjqI?kqAlrd9mYr2ms)*Ansn"bnsotRrwt& ~sTtHxuwzgAdv(bcf4u\gRu:Vheu$OivuHAjru9@qk(u8ku0lSu)dlv!mvbnvTq2vd Crvywy}|fXczady\ey`Vfy+NgxGDhx?`ix7eix/jy(}kQx!Ylxmjxox pyTyMyz|eib}`|c}1[+dx|Ue|Mf|cF7g|'>3h)|6hz|.[h{'vi{ j{zl\{Dgn{ p{Qy{Q{}ca!_aOYbÁSc뀡Ld6De^76_Ct.^ '=^{ _'$bՋ.f& 4kt7ty}f \YW1YQZyK[{D\j=>]E5];-]@Q%\ה^naGf lE5u.~ŀ}j{TTrd{dU^{VX{XQ{ZUJ{\8CN{];{_3{a8+{b#|.dO=|e1=}e p}f;}gj)pbgxWbyX]yXZ*Wy[Qy]kIz_ BzC`:azea2zci*ze"]{fU@{gB|eg |h|ilsdf(vj[eav\Q\wE]rVw^P"x`7HxaA;xb9y d1y/ey)y2f!yh+z,iC{%is {j6>{kAn4tetB_[a%t`[uA`UuaNvWcGvd4@dw>e\8wfb1wg)1wh xj *xjykE >yk{qlovXer9c`lrcZsKdgTseSMtnfEFtgA?dukhO7ui40 v.j'(@vKk- 3vlwlxmxm{gnqwdpg_opgYqghSr hLriEs:j\>tskF6t0l/atl'_tmxu?n- un"wowo{psxcUmk^DnkXojlRp#l{KplDqxm=rrnQ6rn.s o&sco spitpvqpvqw{ruz)b9kp5]GlloWmSoQn$p*JnpiCopZwg{Uh{Oi{hH#j}{8@k7{9k{12lz)lz#3mzmzpLzZ hqz}zsrz|{'{~]eRYfXSgMh;Fh~?Vi~7j~x/jc~;(lj~!k1}Sl<}Mo0} p}?s|}X}}2[cW-djoQe%Kf,Eg+=gۂ6hO].Vh~&h Uhjʀ8m oZtw=}~~wYbUlbQPcMJHdg7C~e<<@f4f,f %fmgD8il n`"u[~~X`pSaNaHb Aca:dL3,dˋ+nd$d_Reht;kd nHwz ɀWL_^Rc_6L` PG1a#Y@pa9Pb1c&0* bď"bd}Cg^ju oXw9V]Λ\P^,K^E_?`7aAu0wa(a!Sa c}ffc1jZ p%yPbmTn]bUoXHYVRu;l7umn0v"n )vn"Jvovox(o fxpxq}Ss}vzZpnVjqKnQ>rnKroDs/oV=so6t"pd/tp(~tqI!ruBqGu}qJwBr wrx9sj}ux@|YnrU_orPMpPrJprCqrpypy0qyt+y tzvzjI{2{^VFj~RkE~CMk~Gal}@m0}9m}2\nC}[*n}(#n|eo |p|bs|W Ls|w||}8ThσEPEiTK2iۂEj6?%k_80l 0l.)qlπ"ZlkmePo?q r~hx~~~hRg6NgIh IDh=iG6jt/ojX(j jT[kꃔn p|rO}yQteLfGfK1Bkg,<g֊5>h.i'&idhjzmf oUrzڂPd^K}dwaFqdđ}@e:f73f,gC6%f뎥g*.riIWl63 "nns|{NbәRJc&Dcm?odM9dÕ2el+Fe#eW?f"&h)k= Pn;t„~|ƁJZTaVKUJQ3|VvKBXE~Y?[8]40^)q`/"#abłFd +[eupfhltsX'WBTӁLXVPmYK|[!Dm\=сR^!6ɁX_/p`(@xb(! mcedaf1 /{paQ{baM3|c G|;cAy|ld:|e4|f,}g%}Vh}Zi}}Bjt}(kd &|l|m~ptyUyCeQ4yfLVz9fFzg4@gzg9zh2{)i,{j]%{k{k|lhM|#m@ {nm{o!quzTw5iPXwiKYxjExj?Ly2k(8yWk2yl+zm$JzUm~zn3nzn{8oX lzpq*{5qu#sv{S}umO$v/mJEvmDwFn>rwnc7wn1x@oq*xo#XxpMy#pyvpz_q $z/rzsvx}R+t qNtqAIIuOqSCuq|=v:q6vzq0 vre)w2r"Pw}rws0gx=s_ ygt y@u_zJvwy~RPru#MsXtHSstBt_th}8h2i,jH2%jauj^kޏnV o (q*vl|5R~`TMΈuTHyVCW=Y57r#Z0ކ\)]#_Q``Նb6rsd e"gwimuPoVL]WH0YB`Z<̆=[6g]t/^(΅`"aO8bIdX f q'gXi@6Mkp<wlObOZKZG4[B ]3<^z5y_.l`(qa!]Pc1dڃ%fog iMjmmqxN]J^F $^@_:!a 4b#.-c8'e&d Ăe+Iyf]g&xin jklGnsFz4NMa2I܁)aEzb'?ec:c3ǁed-Pne&f 3dghixk7 Dl~mpt{BM~dI&2e D3ez?&f?9f2g,{h%π iPOj!jk ~l~Dn<~ orv'|L|h}H<}ghCF~h>#~7i8~xj1~kj+~km%~k~l~3~m~m ~n0}pM}qytdwl} K{lgG?{lPBl|zl=]|l7P|m91|m*} nG#}?n}Xo}So}~o }`q*}rI+}5svy~JJypJFYztpA{p<{3pH6{pv0*{p){q,"{qV|q{q)|arW |}spI|nt|v2xVz~XI8xsE{y3s@ys;ys5zIs/Uzfs(zt*!zt.ztNzth{}t {u{w |x|z|.H$wZwCDkww/?x_w;:xw>4yw<.sy6wJ'ybwS yw>yw/yw7Pzwx zx{hya}z{}Fu{0Cv={>v{9w"z3wz-jwz&xzxNznxlz]y$z3Gz3zi zY{>{K{|q}NEsAWt@s=$tK7uf23u~,vg~%fv~av~.bw-}x\}\ y_}V7y}{(}~~VCrn?r;sP6is̃x0tm"*t$u3zu?uw| xq#79qʈ4rF2/Br),s]"s s݆wtvo^ vsx,{@ovv[29.\a4]-^'X` !IQa)b%ceM gփi\uk-nr|xFOM\B#]d=^8_ 3`-LBa2'b? cd$~QeYg ԃiXǂYkblosyFw`eAy`^stwWzR=Bo>+n9)n4%o/?^o-)=_op#3o_oYp+}p 8q * rt=vx{A~rd=Pir>8rF4'r].)rs(:r"FrĀArȀ;r s! wsqquT?6vxzm}@}u{yq;|lyz7}&y26}_yx,}yl&}yX N}y3~Fy ~cx~y ~y~zk~{|m}% U:'V6PW1ёX,W`ZA&[ ̐'\/]ǐ-^`~ Ҍ+bMe^gEj_nZt0{=`X9Y5ԐZP16S[l+ڏ\&0b] W^;_Q`KbF zdgiD΄el ou9{<ɏ1\)9 0\4ďP]0C]+^%` a abkd& 7fWhj؃mqv-|DSm N'xE~i 55R1zS@-T )VUD$V{W䗨Y  Yc[Y ]`bnwei)>mu|4U]1V-V)tTX$GY7ߖZMV[eZ\H]P _m aUdgk\p?w~4XC0mX-8XYe(Z_#[[n\z핣]o^ /_P baF#c*fi{m qx~3G[H0[,.['\##]^_蔾`=a[ hc%ej%h< k(Znms(ya~3"^^R/{p^+s^'h_"`kYaM2blob ΒNc eZэggj !mptz%X2ota^.Ғa*ē%a&b!c=1co d-e ae Ǝgil}nxrv{1d.=d*e%בe 둏ffgig hd Ri.kZYn Zqtxw|0hO-l hZ)qhx%~Dh i'{il ii NXjlm+pq ~svtayJ~/k,k(ߏQk%l Cl?lW>lulz mIrnԊp=r uxzz9.o@+ю oE(~(oC$ovύo|okoUoA oq%3rWuZw|yF|r-D7rv*Ӎr'r$ r;r⌿rōr` ⌣rP ɋ:r6-tuwy{ ~,v)ȋv7&ٌv~"voCvCuɌYu #u v8wR_xlz{${~+Az%(7z%Vz/!pzˊyEyqy yDyۉz"USz{|X}~)ˈ~'!~t#쉉~S ~ Q}}d} }=l}*]|})p }~~N'r%`Y"t?JفQ Agv&~~~[{|&1m#䇶! وZR 6K'z z 5KqR݀$R"eʇ'+ [n ="8^QDƄ1Ԁ+Q("RD$S c Gfwj5n*u|*Z-'ZT#pZy$[L\%IA].S] ^ƚ` b dWhbkpp+v|)] &t];"&]^5d^'_Л `< \4abfkdG(fYEjRmr<iw}Z)G_%њn`"H`wma la)b;b c[]dDfGi/lcp%tny~,(0c%'c>!cchdTS9de5 f-gh.akKnrpu7zs0'bf$f!;nf^>g gUgs,g h|_i`]k%Pmp`tJwm{&f1j8#՗j& ח-j0jVjcjRj jk Hm \p(Ksv*x}L%/mj#Nm} F9mm%m$mcm OmnWpsvx}z#Ԗp"p;q8 q1pp rpwpёq$svx=y|3"ɔt'!Yt]єKt3=tBtd}s sȒt8(u%v@1xUyz={~_"ex- x2kGxcTx%7w`wt w6+w=xr yzez{t$|2|I h|=|{|3|0{7{y F{{@{q-|<|}*}Z~ڒ<U}ӑ]O 뒟 ӑ[ 錟~@~~ /r:5nw ̒C0.^QhC!-*N4ԋ,ّ Ǒhh`р]g\PB]7R]U?^gW{`_+ZYq_\f+a_6[aaRbid J/ce>eg2*fh&fifjvhjrkmmVXXYpXB[΃Y]ryOZf` o [bd]mcZ]faRG_gHaJi=Zbj1cl &cldkmf`mrnq7Q_?QdaS8S/bgUbwWd~mYecZgiY\iP]jeG"_k;a,l0/bm%iancoTeots7pxruKgsMXgO?gQh5uThl=VibjXjYZ_kO\+lE]nC:_Yo%/k`Oo$_pnapeq 6sr t&BH)mImL m~/Nm|tQPmkTma3VSnWXHoN(Z-oD [p9]zqS.^lr$N^Ar `ZrelsO'stKuŔG rHrtJyr?|Lrs=O%r8iQr|_TTr@VV%rM(WrBYsh8[s-[t`#\rth^tGfGuUtv=w`Fv{_Gv$Iuz`Kuq{MuhnPhv^RuUT[uLVv&AWv\7Xv-Yv"Zv][vguw2Q4S!N*S UtY i~w}}t? "@ƈzBsIDYjGaIwXK5dNLU EMy@1q]BQhD `jGCWHʉMkI͈DcKZ;Lz2M)Oڅ B >B7D7YB-Ds$CGcR #c% p؆^}&_Pi_RNjQ`UY`WwhahZvmbY\bcj_OXd3aPdcGwfIf ;gg/hh$h]j AhjjkHt1l?nZgW08ZY[Z\\u+]_Oj^aua%_cW`eOhagEci0:Ae6j.fk$elfm|hnteo1qS^"V_*9WY`l}IX5bdsAZci|\e=_]sfV^hM` jDak8cgl-d&m#DcnePogonu-psOJeȋPf" Rf{>TgTqWhh1Yyh^[4j/U\kYL^+lB_m7an,b=o"apucpgoqH=u~rKu Kul`2Mml9OkyfQlp`aq"!`xrcbrfgsP2utmviIqKbqaM!q)x~O0q'o4QqFeT]q\VqSXqJ%Z+re@[r5]Zs+^,t !y^t|a)t hufvHv{x$aIuJbuH~KuvMu mPQu3dRu=[yUu4RqVurIXu?8Yv5[vW*[v ]3v_v RiwfYvxuyGyEIex|K xQtLxIlEOXx>cJQx>Z7Sx0Q)UxJGVxi>#XFx4KY}x*EZ-x b[yr^;x !iy=Gwyz+F|H7| zI{s@L{~jNS{7aPzXR]zOSzFU z=Vz3Xz)X{Z{&\z j+{ wq{f{jE-[FyH9r#J~iM~{`OR~WP}N{R.}E7Sx}<UE}2V}g)AW;}XY)}0[&| j|xU||Cw~ E96x`Fq9IhiKo_MnV~OY&MPeCQ:Sdn2;T!(UX)\^, *k~Sx~R~Aԇ|CcvE =oGfIv^EKDžJU MQKNHBOe"9Q1RR( SV]]G l^y"?{>Au BmD؋]eQG\IkSyJJKˆA)L8Nh0OB'MR0uXT]l! lyQ=y>s2@BekBqmcD̏Y[%GPQHHI=?J 7K.Lۉ&PLS$D^ۆ ]lޅJyf}~;ǙLw<ݘJqL>#gj@96bBYDuPFC_G FƑ>iG`6HӏU-Jh$N QD^a Ln{#{;YuhZ? `xA֜X9C2ODEE=EFW5mFb,wHm#\KݐMSceq ,p-|8y;s _og4aApY)bq,bnq7dr jr3w>sv~Lp!No|OotQokoTcob!WpY9Yp`PXZpG\aqg=']q3'_Pr)`sSTa scss jtwvx KotLtEzN@tsPsjRt`UtX'W"tOGXt]FZ1tlIgcKZM҄9QuO3H)Pt?3Q6R.T7"%U`X\`` mL3z]~{BLvCPq;E jG%UaISYKwOLˇFMg=Nr5O#-dQA[%T[mV`H? nnplzzR@us`?=m@?fB^DƓV'F>LH%CH{T;I30Jb*L3"?PHT֊}c TpJH4|J{v=qd>k@)>eAȜ]&C˚TEKF8B6F 9F 1G)[J N!Weseg5r..~t=~o>j*?fOYvdg#[\g^ Sh`LJibv@jd5kf9*^l-g khli mjVwkin `VDa2W aYvbW[mcv]c:d|_yZ+e_aqQ}fcjHge?>h/gF4Qi`h)oij0Qisk:tk:k dllltxmq`>\N[8]\|]^it^_k`6a~ava1cAXae!OcfrFdpg=ei37gk(gl7gm im{ kn:,xoXrtWaX bz3Y\crpZdih\e`2^\fWq_jhbN`iEEbjn]s/_;tJ%`tau'dBu_ mfv/ywiy!WM0vzSNvtOvmQv{dSvH[VuS7WvJ}XvDAZGvz8z[v.] w%f]wS0`Owqbwo mxyxy|LzXxNMgzrNykPyclRy_ZTyQV8yHWKy@Xy,7^Z/yD.([Wym$\Zy^yay_ nyhzDz]zzJ}vL}qM}DjyO|b"Q|SYZS{PT{G{U{>V{6"Xv{-tY{$oZ{m]N{Ma/{? Zn{{{{yDI |u%Jt@pHLiM`P WQ,OSB~ES~=$T~5 V~h,X~D#Y~\?}bM}R oo}T{|}wGLsHTnJD gL_N"VP MQ?|D~QЂ4;R3Tk|,&U #:X5*ZGc4 NpUE|~~#vwEd]rFlGeIՉ]K҈6UM4L%NۆCOO:lP 2Qu*SJ3"VqOYc2 8pzD|s/uCQpKDU\jE dG \&ISKTJLtALȊQ8MA1 NT)*P!GTW pdSs 0pNS|us@nlB$mi:ChbE3ZG7;R0IIDJ@!J;7Jo4/K*'NˌRXf">fVk5r.`}q*@9lAgB`D&$YEPGGH=e>G^6G}.?I;H&7Lʐ/P[ h}g!sfUDol@j@eB_lCOWDiO5Fh#FdF=DFx4E,G՗j$K$Oq] juބ gP~gRxgTqIhJVhiY_i[NWhj}]OLk_Fika;jf41kg&vli;kj4mj nk{lq`7Z}&`[vaa]doYbq^fac`{]2dbTeecKfYe4Bg@f9h0h/iUj%ik<ilDlAl_ 1nmC{\nr[a`z\AaTtk]MbKm ^cWd`d[af>S`bgCJch8Adi`8ej.gl'$gm6jhemjn( no{Zpet1}WAfWxXhfrYg:k[gca]5hZ^iRm`5jIaqkt@blQ7hcmZ-ena$UeoK goiyp! op{6rYu|TMkw0U}kqwWljeXlKb.ZlY\mkQp^DmH_n@`o86b o-!c2p#cqo~eqth0r opr{lthwZ{?QqvSRq]pTRq=iWVGq%aXpXZpP\\kqPG]q? ^r#5`/r,saXs&#b+sdtft. ou#s{v~xyvP@utQfuo:RusgTuF_VtWXtO ZHtF[au=\uW4]u+^u"`v/bv\eOvr fp,w$r{x5y|wiOysrP`ymQxfSx^Ux3VUW[xMXxEYx<@Zx23\xA+]xb"+^xTa^xd.xo ,px=|;yziuM|qHO0|]l^P|eR{]T_{IUVzLUWOzCXz:Xz2ZZz*}[z!]Tz_zBdzCpz|z{esLKRoMkO?dQ ?\R~ST~ JU}BVA}9FV}1X~}N)Y})!7\(|\^|e|;tq|A}Q|7|qrWJ^nQK iMbcO(=[QRXRIS^@T7T0pV,[)"X Z]$DfL~rm~@}}}pHlIÈgKuaLYXNPPXGQGi?Q6Rj/S;'UY5@[fs ~: ~poF^+jGeHɍ_@JWLWOF!]H>V$JMKDELvf<7LZ3L<,Mŋ$oQ?U(w \ }iI)tsTWm:k`CtgMDl`b|Ez^\%FTHzLLIݕCJf:I2TI~(*K#O?LS4 k_M -k3vjiBԣeCa`D!ZEҟ{RGPZJHNB1H!9^H,0G,)OJ/!MpuT,a mujxS|j{PwjRqjTjk\VbkXZl[Rym#]Jem_AnCa8ob.od$ip9f Xpfr)gxrhlv}inJ|DgUawig`VqgXjhZb]i\|Yjf^NQGk`Hka@Jlcc|7mBeS-^nf#.nKh>fntipi~qjJ}l@p|cZvd([Tqd\ie^Dahg _Xha\PhbGidI?j\e5k8g},]li"^lFj2ljnkQ:r&l5~6mry__)t`_naagbb)_d cW6e"dOfPfFgh hX4hi+nik2!jl4mkXlmEm(&rHm ~otw[dr\eAm^ef_Af^6`gV.bhMciEdjyYj,k[jrd\k]^*kU_lQLaklDbm< cn=2dn)eto yf2pihpjq$rq2}sw(t^UoDoWo jiXocZeo2\\ GdL]? Lw6L.GKґ&NiQW֋d 3nӆ'ycEѡq`F [G^UTHMIUEJ=K5JG,J:%)LGOۑ\ZZ;fZB pz؂ugmQpmRk#mTdnWV]7nXUhoZMlo\En_DnaA;o b2od)ptfpg_ qh ds.h1uiykrsg_YozgZjNh\co6dp5-ep%ep\gqvjq jlrcvs/uxlWQrhcXryckZr\\OqU^qM_qE`rI=ar5nbr-cgs$csR5f$sims ]kAt`v uvySjUvfW0vbb1NZ* NӐ?"}QoT<4]6 hrgpd{^rHŞZIVJFPKHL@Mi8Ma0LB (MO\!OǓ T됊` jt8[}o pQ1jrpReq'T^qVwWqXxP+raZwH[r\c@dr^86s3_/sa' tgc0$tdVIvd KveNxfi5pm_mUiEnpob6Hp/d]-pe$pgH'q:hHsih vtikyjcmgtBlxhB]^gh^@bi_Y\ j}`TkaM=lbEqm^d<=meQ5snnf,nh#oiHoj1qj rkLyYl6o0upke)bfebaMfcWZgdHSheFKifXDCjg`o`.w6`kw.`w'aw ,c^wq#fww iwn owoz8xTy9|cW|^X{Z4Z${TQ[{M"\{,Ei^z=-^z4^~z,^z&_z[bzeyh7ys ?poy zyz}aV ]W@XXeRYLK[~C\:~A;\~3\V}+A\8}$]})b`|d*|&f{q?{{Y{{~#_Sq[T܄-VV PWXIXB0YT:Z1Y)YN4#%[H~^b~f~]q}{L}}K%]Qi[YRU$SOT H VC\@rW58\Wt.0:Vυ(V;!Y/M\pBS`$$h0`q9{]~\*O%X"P;ZS~QUMRF{SΌ,>Tb6T̊.Sa'3T^ WZ/`L jFs}0ZMVN|QOLPDQ=-R]5\RN-vQB%RqU oXcf nl>u݄ ~nY L=lU M$ PmMJOCQO;P3P>-,Oc\$nPܓ)Sb|[e VnwYi~tQbdtER_!tT[YtV.RuX JuVZC;u[;yu]3u_\+Wvfa "vb{#wAceycyddN|ehq>fq4TbqVA^Nr+WXArYQ)s0[DIs\As^:Kt,`2`ta*/tc/!gu>dueQwf`x)f|hkIsenXao4Y]o[$Wpp\Pq$^Hq_A r?`9orb:1rc)Vs e2 s~fl_tg@v-g'vhy|imtek\al][mm^Un4_No`Gob8@*pzcl8pd0q@e(qPg4qhUriti"ujD|knuei>a%`j a[jbMTkcAMldKFmeT?n=fl7zngZ/oFh['wotio!oj[xq3k~stktl3|m{pw cf.e_g?eYhEfCSi#g Lj5gEWk(h=ki6mljV.m!k&}mpkRml}om 9rmsn: |orxbNc4j^]djXeEjRfvkKgkDChl&dr:ter2fs+fosD#fsah9slks Tmt3st\}uw|z^j\wcZ3^wUb_|vOp`vHavhA8cv:9ScvH1EcvE)cv="dv#?fuMjWv lvqtvI}wy|][zYJ\zTR^zgNy_Nz,G`}y@amy8ay/ay{(EayW!by%e}xix k=xtrx9}ylzB}\&Z~W[J~;R\w~ L]}F^}R>_|6`|.c_|&_B|N a {ud!{0g{ ^k-{,t{L}{f{~YW˂UXPZ!_K [LDK\cs<]K5]l,\ڀM%v\_ 0b7~me} j}t}~O}|XUSV‡ZO4WЇIHXjBY;BZͅE3jZӄ+Z c$'Zl] `=dh l78up~~~FVSQ7R@T}MUzGVD@W9XH1X;^*2WA"Xmj[DY^Uye FnwuU QPRsKSjF*Ts?[Uf8U0yU(TD!mVMY1L^h?o $pyHSPOWPJxQǗDR=S6S/So'mSL T'Wca b j"rTwzcwQ^wRXxT+Sx3ULcxVWEMxtY=x[6fx]-.x^&y9`nyaz:bg {wc{c~ehr`tT\u-VX uWRv(YK@v}ZCv\qlj7ym]k04ml8(nJl!`nmXomrLn Rsenvo[q;tzZemmVTfem2QIgm$KnhmmDim=jn6Zk)n.ko'koh rl4o;mhojpp@ qqOwqsvT|YvbqU1dyq(PKepJmfqCgq'`F7`/a J(/`~!`~wcV}fO}8ij| o3|x7|||RY߆,M[I\jCa]<]j5^.h^p&]_-cSad i-q<kyf~~p~PWLIXʊGeYƊOAZ;B[4O\,[ۈ%P[OO]%_c ok s2{>O2UJVEW@X9YQJ2Y+oYAE#Y\[3K]牦8d Kldt߄s|8MTI>U D*Uٕ>V8-W`&1FW* W"Wؑ{YF\ʍf̊ YnvT~r\#{gQxW}{RRS{SL{UFC{Wv?{YU8{[1|\)|0^B"|]_B|`}La } c|d fk tvYtxT{UyUQyW4KyXEPzZi>G$qe@r e9rf2rg+sqhn$si*si tjkvj vzlCwmptz TlglPmgKngFohj?p'i8pi1qj*qk0#qkqlMs&luuHm iunWx orDu{,SrjkOakXkJlkEmdk>nlf7nl0o mi)ojm"on;onqn.soN TtpxFqtew|bR%goN:iToIjo~D#kYo=l$o6lp/m!pl(xmcp!imupnq Xplq& rHqsryot vx0}kQ ftsM5gsMHhs0C7is5{)@fz:mfz3g$z,AgMzP$fzgZyiylcya knoy]sy`{z\{ |La.HbDRbB>c~8dp~1e~K*e(}#8d}:e}hD|]j|: mA|_7s|JJ|$|z|}K^넔G_τ-B`=$ake7b0ib)/b"!bEd fZi7 jnv u~w}~~NTI^\E[]7@^F;k_ #5]_.`'X'_ ``7Xkb<Ed, h fp,,wlgREGZC[n?\9\ʍT3]s-V]&F]S@^lo`ncN jRnq3yF/XݕB#Y=Z?8EZۓ2C[a+[~$[tv\0^펐c= ls)jzALTdQZPRdK2SEUI?W9lX2oZ+z\$I]^`az~cl~dglv#Q|TN}}Y8}[p1:~\*!~C^1"~w_p~`~tbM~3c}eAw}rfiowPzWrMK{+X}I>{YD{[=|\q7|:]0*|x^)$|` "|a7|b|c |eVX|Mf7|lhjkKpJxP x[Ly0[Gy\Bxz]MsbBJtbEuycV@kud :@vKe3v}e-vf&Nw>gswh"whxil xjxk{2mpt{$MrfmDs|f?etgn95tkh#2th,ti%Vufj#ujukewk wl xmH|(or v|KojjHpjCqjW>vr1j8drkB1rk+s-lL$4slsmt4mnv-m vroMwpI{qtw}:JmQnFnmBom=p,&i_|%8iX|i=|F/k"{cmf{o o({iq{'y{|Z|~CdD?d{;e06f-0f*gF#fрgKgi&k/ zm~?s~Mz~Y~S~LAa >(b9c54cĆ/-dUI) d"Edde)Xg1jO }nWMucG9|B@ _ύi]:^6_1_,%_f&`i`ݏ)b̎d j#q$vL{oK҄OQGQBS%=T7bVc1ƃX+\Y$[\^P_Y 9ak=c0e3henwISF3ITBV+=W6Y#0Z* r[#R]+^YS_baa Àrcke6g5j~qyCHVDbW@X;Z?5[/\),^"-_)`2ac7 `~e!|~df~(hl3rYzG}ZQC~Z?u [:|/\4S^.a_"(mh`?!axb!cu~xe 1}fH}8hVt}jzmszF{]B|b^A>w} ^9})_3}p`-}ja'p}}b }c}df}ye}Nf |lh|>jK}l2ot{Ey(a8Bza=zb=8{Cc 2{c,{d&{e {f={f{gU|Dh {ie{kM~\mqGv;|^EvdA,xe7Arp:$sp58tHpF/tpm)Stp"tptpu"p`vq 1wqwrytDvvxZ|=@pIs=AqVs9.r"jׄqk m/Ioi *p_tGz{8ei4f0gK/,Cg剺&hx!Qn9Rq4S/{U)ЈW#XJYZ[ f\ ^Մa5$cUeiow@Igk.ry{?܅dV<(U\:Y<]<6]1^^+_&F` va[bOc#,dc 'f:hW~jGlpQv)|=l~`9`~5?a 0-a+Kb%h1ced7>dŁ9ecʀf h@v~j3}lnwr w}m<|c8}c4[TdX/yd*2e$f2tfgCgrh j~k}amorx~#;yzgq7|Kg3}g/}h.)}h#}i}i}i}j }k }llw}n|oruz_:_yikC6zk'2{k-.S{ky(|Ck#-|Ck|l?|"l/|pl} |mr f|ln|3pE@|Ir,tw{9wn6y?n28zIn-zxn(Lzn"wzo3zo zn+{Lo. 1{p{yq8{r}ftvx}8vq5Mwq1WxrB,xrD'y7rG!yTrE?yr%yZqzIq Izqrzsv{y)ty$uby1uy\uy Bwdxxx Xy&yTzty|z{|-3Qok~10Iq~,r~(Kr}#3sq}s}Zt*|Vv`| Gw|axx|z|~}7}~#1m.o+p;&pn!q%qPrpt u{vyYH$~Llf/kd,m>)xnz%o oIp<qs@ sԄQuyh}z.(j +Xk'm #m{Umnߋpy q8 rjpu(Vy|}*"8) O4ZP0KQ+ȐmR&TN!UW XYb [j^`…cf?ksz6Rh3ˎoSM0?Tc+U&>CV X(ٍYMٍZ.m[V ËL]`bPehmgu|i6uUc2V/BV*W%Y) :ZQ]5[]vn\.-]Q 9_k܇amdCwgAjov}5cX~1X-rYq)lZ^$>[oo\̊]t ^&ي6_N ׈Za;c?f9Gyh*l+ pw}4a[w1-[-9\(މ]^#n^I"_+/`tF`Ba cslme~GhGjnrKx~3^0Z_ ,_(+`X#aއaqb|懛cc _feXgu+xilosy43a/b_+Ɔb'Rwce"Jjc"d~d8el fH ӄHgi^i_kon~quJz1߂me.كwe+!{f'&Ąf!焚fpgMՄ_g92g ʃh ^jKkn*pptw5|e0āic-݂ if*i&Di!jjj/jP6jO k.恟l{n 4pWsuy}/l- l)ށtm%ǁ}m1 mD`zm5Ibm&/Dl ҁm,nĀp}runwzD.~o,78p1)7p%5p 1Cp pqp,np pgqisT:uwyp|-|s+}ks'~t#~mt/~t~s~sX sT 's t*~v~xSy{~r+z w)t{&w&+{w"A|[w|w3}wBd}5v Q~3w G~w~x4~y/z{|MN*cw{'y9{$z{ z{{${g{{ 3|)z }Ez}{ }{~{|T|}(uv%w#x{w/xsy'zUS{7~ |~|~zn}$~0}G~&~Q~~&u&$dv9!v八ws@x5y?z:I bz{V{=}S$sW"tV $umIvov؉x> Xy= $y<'z\3z'w}-$N*ۗ>O'>Pz"ؗQPRpT9ѕU1NVI X ZsY]C>`Ad howk}-zQ*uRS'SP#-Tb UVWl3Xz 3Z\Pԍc_HbTf)LjCry47,Td)ۓT&U"UVWC>X˓vYz Z ۑN[F^ado\g~ksFz+SWX(ђkW%HX! X9YZZ[ P\ ]I`bf1imtgz*(Z'ݐZ$[ ~[\d]T֐s^ D^ o`WHb8bdhkv@ou{n*$]'?^]~#^܏o^46_V@_;`z am mbdn#f)j;myqv|h)`H&`#=~a0 asb'bb fcdfh@mloQsxo}{({@c%d)"dn/d( e e?e ifDg5MhokX{knr uNy~'W+gh%g"+lg9hɊ}h.h[hV hikbkmapt6v{y&@ j$j!k=!kiVk[()k Ljk/ kmfl$n [ptcszwvOKx}!$m#8Wn; njnnnI'Vn8 n`+Jowq syv"txWz~#ąZql"&qȅr@4^rW~rz}q Mqz]qar\tkiv|xxYz |"u 惡u6uuuW+t Ytu1uvwY,xzc{(||!zyayy#yxmyx Xx<%y&y}zBz{|}j'~~F~8}}wu}5 `}(:|T}S}}A}}M[BCy+NT 8 Y9\5b)dI=~O[ ~~Ĉ6F l4jCz:ˀ.#t#ML =NԟNwOQ1R) ƜSgTVf^Y[ \`elt{ #7P0!xPdQ[R7STq FU4V/XT[y_ cgDnv|"2S STĜT'USxV WX`Z$]Z`d%iep2w'}5"kUVjVPV8WX #YZ\ >_\`bf[j qx} XAX?Y*HYJZb_[/ \G]]Dn ^auid?hls$y!~e tG[! [\ Q \]˗.] ^s_7a=cxfj>otz="^<~^s__X_@`b aE1b$cGSf#i5mqevS{p+aœabTZb'bc& cPdv+ehpk oishw|wǒAeeWeYe֓e f :fvBf@&hsfjn!Rruayq}th2hiii ]"i *i[imkEmqtw5{kHkglyUllT l@lfɍlnzq! tvx|knBokcPo?o!~o "[o΍op3q tahv]x3yu{~r`s4sl;s;Ŏs rڌrusu_7w xyz}IwFwHCwPw pv Ìvˋw{wxyz{o|'~P{T{΋{֋{ QS{_{J {BS{M||Q|}$k}ŊɊBEoY #A#{.p=#~P~~&Ԋsˉ a= sp!l`Q7",  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}~}~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}~}~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~mft2!h5j8 < p  ?.$yof\SI?6,"  !!!"w"#m#$d$%Z%&Q&'G'(=()4)***+ +,,- -.../u/0k01b12X23O34E45;56267(78899: :;;};`>?V?@M@ACAB9BC0CD&DEEFFG GGH{HIqIJgJK^KLTLMKMNANO7OP.PQ$QRRSSTTTUyUVoVWeWXZXYLYZ>Z[1[\#\]]^^^_r_`d`aVabIbc;cd-deeffgg|ghnhiaijSjkEkl7lm)mnno oppypqkqr]rsOstAtu3uv%vwwx xxyuyzgz{Y{|K|}=}~0~"qc܄VυH:,{n`ٍRˎD6( xj\ՖNǗ@hEؚ"lIܜ%oLߞ)sPLɡE¢?82+% zsmf`ݱYֲSϳLɴFµ?92+% ztmg`ZSMFA@ɿ>ʾ=˼<̻:ͺ9ι8Ϸ7ж5ѵ4ҳ3Ӳ2Ա0հ/֮.׭)؞هq[Eܺ/ݤގxaK5 ~hQ;%nXA+tp$}~dK1-<KZix   - < KZix-<KZiy-< K !Z!"i"#y$$%%&&'-'(-(()`)*,**+^+,*,,-]-.)../[/0/01!12233~34p45b56T67F78989+9::;;<^>?P?@B@A4AB&BCCD DDEvEFhFGZGHLHI>IJ0JK"KLLMMMNrNOdOPVPQHQR:RS,STTUUVV{VWnWX`XYRYZDZ[6[\(\]]^ ^^_w_`i`a\abNbc@cd2de$effggghshieijWjkJklĘIϙUښ`lw+6BǤMӥXަdo{ #.:E˰Qֱ\hs'2>ûIϼTڽ`kwjEgBįŊd?Ǭȇa<ʩ˃^9ͦ΀[5У}X2Ӡ zU/֜ wW@ٴ)ڝۆoXA޵*ߞ&6GWgw 0AQaq *;K[k|$5EUfv@!aB" c  C $ d1kO3lP4nR6pT 7 !!!"q"#U#$9$%%&&s&'W'(;())**t*+X+,<,- -..v./Z/0>01"122x23\34@45#566y67]78A89%9: :{:;_; >}>?`?@P@AXABaBCjCDsDE|FFG GHHIIJ%JK.KL7LM@MNINOQOPZPQcQRlRSuST~UUV VWWXXY'YZ0Z[9[\B\]J]^S^_\_`e`anabwbcddeeffg gh)hi5ijBjkNklZlmfmnrnoppqqrrs)st6tuBuvNvwZwxfxysyz{{||}}~*~6<2( {qg\׊R͋HÌ>4*  |rh^ٖTϗJŘ@6+! ~tj`ۢVУKƤA7-#vkaܮWүMȰC9/%wmc޺YԻOʼE:0&ƒyoeZP_ɬSˠF͓:χ-z!nԻa֮UtcRA۹0ܨݗކujgc`]YVROLHEB>;741-*&#  PhS9HbBW^]]MW=dS#nj1L(p}GI,tCu0|z2AL3}?D8@ A2?K?eWЁx>6eY:]z4Z9\!g75%&Cȳ݉hXênt女ԓXεmѵ2{̑oϝ˘yopӯ+'N̽h7WpsԀjo:SMhVbLD[\+"d~U" jq2P(p(J~-]v'F1zaD=4~PB)9SBC$B[LmsB(XpiAf==z<::m`GC^0}B_ Ov^ן]bΌHmW5HϔU ĕEQ"5ϳЁFPJWԸKʩlt:R+MoQV2-hZacZ!jtS(7pO.uWJ^2%{oH6:@FO;ӁGDł`0DM"D{Y-D g#A@{-?%=DфKse{U~孀5u#ϗ鶞@͎tY>̮ΐԯM :+ZF[q«ι%Ҙ A>qwzYPKuUT.oZYmeg|a_!iX( pS .OvEN>2|ZL7J"=RJE5GM0FYLjF fC{܉`A@EPl{͢X̎ɲޔ`ƻɹ̐aAͯג0}<)rG׼qХ7.m킺˩|NIXzS1uIXl`vLc!h]'pMX6.v6R3t|P+8逵LM? GKPEJMaHMYڌ]$I*g$@G|k DˋzuCyVvzgfܑ8dkk)D ɅֲLĴDJJi?};7ʈ( ǵұQӹٰԺ xL giQ9|W/s_>Ki gc&'Po]/vvBY^4|T}: Qr@HROUFK{܎HGJ[_Φ/,{F蚹ƹJ̼\WE<foؼԯu}ՈkRT:Ӫ3{ԓDzH{]'NS0T~ |{]te3lJ&nc-x?_4|[kZ;^VB_RGMLrFSNY9OfqO}/LԓLQUJfn tr ׫FE+M: ȘȚɕōk߽E#Qz{KͬͮЄbӳԇyE{VK_0RW!#I[{dItX%ml-PwsLf4}Ce`{٧J q$ͥ\šӏlj &֞i<,d;<,Gl{͈p!ddQPɭDҼ.)؃Ԋ I=MEH%L!V6&bUBp"k{,lv3u3W~nA53FMhO㖮a\N qh*LrM2~P}F(ˮ#,6 ` S>o;PIUa7bߝ'oE1{u&:u-HG;JT>\ИĈEd;?r[V|߉&δ̘C3MݫEB トHȐcЭqSõͽ͊SDXoѦ |O@5!e͛q&/v )9U02E7P_@s$l7/bzIo8„F ݖlSH+V_qfr t&6Z>|[ؘ{űvKˉhpx~¿fۤaYáں NU?QŹ6ʹN'J^<籀琐52{#'e[ԷA!޶H+ڵ -5sj&B1xz:M (Z/ h)­',vv6nCLZQ~o_kfxoƥtX#6cӋн)sJ3ñƒŧõEǕk-KʰXКxͩ-+ז _'ŮuslQճ &ߺT0X =aI.DU :b[&5n\2}7k^=ňCȬ%O1_њ8`[ f ]t*DzŲ۽J O3 ‰PЬ.m`8}Z-ֺGu˫Ϝʷdzݧ`lD@[ ٖd㯘;!w9(lrNV1&zܼ/^h <G}QR_k#4kCx/x|7M F>2f/7R#[Kՠm$Ť|+ˉ6ɐ7AJë߹ƻz<4<@mʲ?3OتtƥQYQЋ9k=/Ӱ,x۫җ0 ˪Ȓd!@$#3-}j ::G~EO*z[] gο+Ksw2}%1kzsB`5H>XBѩhMЍqcaM6{ͨ\#\!俶e&ݹ^ȞvkMe_K#/ͨNΗΧȢMԯƠϛ~ȟd/0;C0Qy8PyM=P"}&+% 9 C&H9M4Y@d&n<+s4+4tO637|W|;lmfFJں^)^X%·ǜ#Ȍ * Ph3ۯWOHJߨ9Ve[ж9McB'-tS&@ɫӓ4oۗ'+@g¯ : h*.Ŧ7gƍ A!?2OK#Ul_k"}in-"iONY)p/hux‘5SvHcm5>~<>3CʮA1ɾӪDνy& 7тgà9$ӝ̦ҰKӭcծ/k֯-Κהaxe};-+v^Ug©a7HvϛUݳ #]ЗˡZ6̳ŮխQ4S{:ϩ1q֍kא0Mwئ9ܝO<cm'ȟ*5Q ?6H uI ɂSFj]?ܥ]_|$iY)9q/:҃D%LU|l:g\ e{î6ϻ̬ƤƲѥfe Ͼ_A%Т,+ΰ4Ѳܸ҆-?'s"ւ^Uו\+?ק׌OأL4|(/<cm'ȟ*5Q ?5H tI ɂSFj]>YWQb]-1!9f%-!vשZ@͜*ߎ\RLxi>m >moj+V-I&ekDllԌ+ԟAV4l$\֘ɺovuϦdy`Vo }u<cl'ȟ*5Q ?5H tI ɂSQRN?YY e61\v%?vFb^m7p֡tׄɢHRӯ#dLӊ>ɚw.ғѮHmI!5ձIɔéſnG fDŒkƦ]Qۥ!یrA ;Ȭ+ܿ!<cl'ȟ*5Q ?4H tI R |AmJmIa։9Up!gç+5w{|N뎸a݅`ܾr{rا띷nhyǬN:?R\ww$&5҉fڇ`Mr܆~VژNMܷmྻݗՂJr)2ȟ}95<ck'ȟ*5Q ?3H sI \Ea@ W4)_D˧T-$jh9iQԐݱaݟuQ;NjǫԜ`iӧbĽތG&Щ3ԐӧˉY'3bL۹EZ<‏ܢ~oȉ|ޘ}{ j{ĻhxT<bj'ȟ*5Q ?3XϽ @$SD0lՍEc-X.X-t@5RS!``呲2u-Π@:xՙ6젣'0Nq Q+Tۥq؆ڣ0vͤhG@RT~)ܫb}%܅{xC yFފvఙ}<bi'ȟ)5Q ?2T&$7t/@cC٬!y`v0{b{}C։Tvۄ`Қ _onj|I ֘@֚)PډِْKM8ssѪ~,~/١ܥ}܅z50x/ulKs͕ᕚqO|O+p: S;bh'ȟ)5~/}>1{3/.Hl!\h2*ED"SsߝdWh۽p<ʂMױ[șv ,ٶ΢HG~Xڂؠt{zʊWzҌ`z+Zw7tuދ7q:bn֛߈mA-ᡘktЌ>id8HT;bg'ȟ)55|lYn-61yQz(ll6€zEY {`RPVd˗6}]q+Z\y7zPP}*ʢ!ۀRS-}ڛz}djx9۰ʝTuO?"t!nҎqu֖oICkl@-jgF≗fheNd;bf'ӤC &N߲OF0F|Z=#*s 9ZtgEl`vi!S~ dܼq2~N=ؿХb˔ˡŁg}JŨzT%uOԜso񽩛pp1įmxk jݙԌihދfH×Id8[c ܩa;J;be'q א"S ;$b.4uz*eсq>FS}ˢ*W'<ڒ2}||_۔w,8r߱ oXݿk¾^i-g&c^fT9e(c IXaNࠕ_֔^u^hj3QH^cWTW6^" ZuWbS h"aM&TmDGQ*sA]B4-xj?D1}EXU> I=T =d=8vx7O~45$}?=Ogfo0ͪw``~"vקՁ1$z/Vw+s`ukl٤fc ( q_sњغ\@pBQdj Ti.c>LXf[aiXUhxQr&tnJu+tdE/jyUBV2}@R7_@?р@JGw@|U=?ct;xT:Ł`82>CQU53n@Yx?^cإucרl@{2ʺxߧȜtؽkzh YdJ܃`݅^ɚduhOndpTEiX`8`(Z6gDS%6o^N+tQI0yFs3~ D8QDAxpCJꃋUCBV}\AdD?ymj=#;`3{G$z\9ǑUw|w2^Nȉv85Q)MΨVԶy|֗~oy2ב;u!ppGݣj/eϞJb`O_Q{JOMYfu`ySEpJWe_)_LgWDX$nR)+ju=N51RyJJ5 Hz:,HTC"6FKE]WoE8e= By@d-V>YKSb,Q^ᩎqО٢ѬˇaeoMѢ)ː:ǘ}.Oz0dùv}2oؓok٥ظGg\i&cY,`dmKs|APGv1Vk~]\cfZK]$^n@W+tfQ1~{|N6.L;FK1C wHKoGXSfGe@Ez(NfCnq APj̴֊ޑu֔#Kሣ?>멲ȘԬ{Ā~Hx֏^u׎]qTzmYؾshڙ%d)Ұaq18!I{F,NQ}'hTLt\brj^eZb$mw\+u"qX2:zSY6SP=cMYCK/KČmI-X&Ie Hy>F Ek#VZ7ty冒^8b{ϳNӥ԰@QJXе1S-}x,zFQw1%rnٰAiډ=fbɜzE-K@ZQc'}vGZtFc/Dl!l>d{*Lu0s_2q{.Z 7V?RDً&LK!LX N]dMz KHoJ͐_uZрҗ\bwЏi"#,Tӕ`|lں|K޸[yS֧ߵJt~/"pCkA> gK;Jdx hAPH9|N;J X}"bat9!Skm@*6u|f2D|_8:[+?NrUEqPOK-PVeTfR{<;O۔ Oi$[:3MuTʕKFJϩK3ε~Ϡ&<*e*֩~|Iuy8ֿZtD|;o񤒩j#JgܴWi -(q = DL5pPU2fa|F *jAt)uxl1&}g18ԂE`=@ZExTKmUY\Zj7\\WA8Vɗ_U,t3lѹЗL-3H_[8 ͘*˭?*Ԍ }֤]x zu=p=Ҥhl?t#n>jP1 :96 @\HoRՋ^^,d?i.|7(Csqt(0@~n8ą f@`H7M\N[^\[bNl.a^v\gjzt8W qőpTjgh?ϹÆn@M{& «{׀쩢wp6ʸZ 3 dTҵ,#ԧު[j{א5y1לhtT{upۗ衷pݪtnME~ަ?1줬9Lá Ar+L4,XBN]eً%\pVk.|~7erxCorqMLRsWVvtSb瘋q}oCm#%7n9opá&ʆ+.:+QWԱj܋5"qҜ=ƒHݦGvt!ouyAt٦uBmqp<ªL+ĨJ5P >"Io :T~Yb?#no.Jz!7_MzDލ1}Pm}_Z | b;^ynߢ6w6Iw1}>l:;\j0ʌʼnŜkܷ[$ĴƒRFА(UҴ=3ѽ:w~y "t/=isңbt߸WvᩚJOF$_/yë :9H&HERQ+ݢq_r0K)fHM>bRc>֛̈́ȳ8*!Z_- đ OأqnsHfߝO;E躍##r-K :~*G%m5S@ηBK!lz0|;E:ճ:7e7jXݶGnAbo-)H(.nȹйIΨ:Њb!iԥh< Ȏz"?k߶Z닇\D䝗㉌受$ּ& !2]+ V9// EYXP#]jZL,v*V4~ɱ-)tP1A|F=Aծ/N`.U:{ !Ȯq'i":a)!!ǷX !ߨ%Yѫd#TH,59B- تJG |۾ʌ[ޛ= EypԗK J7ƽ`@ $a)7Y Cq N3)TvZUff(q.ƾ&m9%?l1&.w*ؼ8},D(\-YzpFx0P~qXΫͥ$wtw8!o`qĩ}׀>r~k̛HҤ煢RN߄{Wƅ m㶙oSsƏO1࿇}%(%c57 ALVHb$mYc!f(Z,NrS2z{|D%w`$owKGuQذ9ϣ{y!ӜYw٫ߺV&٘îٽ􆢧ۓȡ#iެw᪛+䖘Zyeu|䤖qy"*ej =•&3n o?y#IŽ3Tye^y]NY^!dM$&mb4}ɤ;Gztc=?Yӈxޘs8i~܌ƈPyu񧺆6Ԧʁα۩b|XzCꡃuBx}&|悕wl橕uԠ58ugӒxĔe4$m1 <dDfKA|7XIR _(=&̦كڴM(ަ{ݭxttI*rŸlڲsUsm桖g棖_b{梕_$ >"[s#1ZR <NCE1giPMҦ R9UHSС>_(r*97X[T /Mb.cly/Ȑ-c1sͥꉺbȩ)Wؗ ׷إz@YgvޔsqloǾ\mXጝj +dйCŘb^4f\oc[ԓ+>"[r#1ZR <OCE1ghPEpL CݦPȐ_Xy+2sΘ/=ES0`ezSkъ/֦٦H.^ {svڻeuq3$l?ީil,fDⰛ^bx(^bA.厙!_w旊]:\/n甓ZеHCYߐ>"Zr#1YR <OBE-E./ R ?AOc.zjF@R ]"yn|$؊6}~z^cw>(q$sknNf!cb`Rݞ"^ ׫嘙\ӭ [;ωaYʏ˕8XsA稔 VÈ !Tc2!S˽迎i>"Yr#1XR <OBE,&ܞj =3fN|hV$1"AeO: a˃%mCj~U~9'vkMo˩ hg[^cZ` ]fĘZal*vW~{VSjTJ\SӈޒqQYˑ*Q)e֏OO肎FMĥ螌V>"Xr#1WR <+F.cT$} =G*NT$($o4h5izrB6wTN={aE4zݸm 4|}wfPokޭmb@afU\°֗Y~&VEȵTUіQOdPe%ߓXONN"ݿďLn׭%K<ꎌoJ+sH,#="Wr#1V̦4h N`Xc>#b8 I?AVk[ōV(v P6rMAukJ}UHf woozܨzΞt_ݑ jFiBy w\,6 hXG!sfTHR䒽z2O̐MкLʍJ !+*Hg⭊GF_ڼ逈mEtք.DӀW1=!Vr#1Uژ_=] ~"fSCV,cmm,yvzO-9COmeA?f"Jr f"sOߵogvݻ{dq&f`苖$jon%X<'Tt6Q %Zqp]t8`#)D~yLFU!eK\/gxq:[g,A͍d|Nzhrb`LmJnt@P}HnUpepc喐TJQQoM4?=LI纸TF_ E,1ȷ@C͝UBhԅAlۼ?䉁(>6p =~1=!Tr#' T(?ッ?*lS M'^gw11xLl[ :phdVD)f`\TӏF`B_@glۗoo}jhhaV*CV` N&gIK3TjIsʆFUC"IAX,Az>8>sԗ<~m;~:L~=!S]^UMS +6ӏ0DZ(k1l1zh }9aG\UNcGd~dmmіj~f@h(c|\UыxSя Kb灐HeEy; B顬?1>rL&=`< ;b}:' |8Zz7Gzj|P5wdUSM^N_XBW`RgN1#kG(r?B$,ww>0*|<<(3~p;;5?-=[Z?H?~S2>c#:?wA9G6۠~@e&Oĺ~e }&zܚxDsυlj˥f۹dObܝ"j_@Ě<)ZؘaVV^SH⚔y7OJ L喑LugNspxRUjAVa$^KZ_g%cS#n N>)sTI".x E2}CF6`B?BoIptAT-Kb@c9>wك<":[DDƊaV:' mzZ1;ҸR}ֲ[{J:=wm؜|&gǟưc܀Hĥ``ݎ##[_WԗjcTGm*P“N^]|K}vKPUqQSUf^]`8efX"muSD*:rM/xH3h~Gi7LFANOE^JDUDedOBx,_*?H=i؄=HeFM\ɟwKT㌁Nݮ,WW}ֲ3ypל_ͳsJXƓi0SeDN4a>]YE+IUᾖRm( O}œ I~|-OJvT'nq'[]dtPd?j^ "!lW1)sR0My_M4 K9X9H]AGJmzFV\(FdEx{GBe{@2VM YRcb#씁76;SSJԶ|E{( uɥ4kٮg~;scT-^m¸0ZߪWHbIS0#P~5GyMb|S)u(Zwjsc,b!l\y)EsV4/{Rt5YyO;,LAχ]:J>JHVgHcی*GwEYD 2RllB͋ ދtH҄PѢvt|YֿTǞv?nڙ4if ׻.e"y(`ݗl\ѲX࠘gT򖠬Qg巕 KCzpIkyOl9~AXu$a;k pje-'s|^.0[{6YO6 :UUtil'sd0{_6\[=UCOjJ(OT}QdÒ2Rz$mN2NLcc뉄}|Ϥok(E(uԩÂ:[:|xjwS$r1ny iSdd܄`ݥ!=\T߉Z31sW[ՕM ~:bĕ BFId`S;^s}shyt&kr|k4.}f768`x=ىLYCyTJAOTV=Ԭ}e:Ha0~ ]㼖Z3Е@6. '= _ELzP^3d\ wg2|$qt3.}nf6GULf>Gb_Fy\LQp+\5Z D`k ]}_~3\K[ z> Λ/ܺux+:=Bխʺ={!쩔z^tŮt%k۬oUjG iM¦e]޹a}ޢj_,n]$.,09J B(iMLcX鋿|e#Zp^|M-%|vw;5uo?_Wg`HߑePiIf^Khmff~ae0Gb󱟞3' "ei3ջ̼ddVMɶنcޱj7z=hv5q_ڼo$£2mܹ?gޱdՙdCȕ`儕9+ܥ{6cz >,I[ T%c&!nEp+zN>~5kz=AqOKWH1sU8sma$pncllmvIokki字bq[ɱ7ȴӳNدϲ+өp}),x֛t{lpHp$ފkಛ jf|fbWKի*%Ω"0X :yED Fv-Q`( l+qy*E]5Bs}NI}Y{bymv2.Cv.@n|ޝqTXǸY%ˤ?2ѐăEթH+x/֟tپqu/[pЛLq^ᗙ@pmq-\lR}iͰ j +O5] B*?H6N?.& \ptj(*vd4-kEA?.OYZ(bkmHՀK뿇OgÆo؝Pȕ4k#|θ$-<5j%Fղ!Hyc_thHucG9JJX)^g棜(u3@LQZc ub凞n֒=:,,\v%cԆ7Hsw2<4>σ(<)wd󭵞Z4ĤЙ_ܽ}TP}ᘛY3{Vx)~ksЖnYεմ,#x.,s Y-Kߞ|OZh=eAM{֩w嶤fإD5ʣNl׳՟ɬ̵*׳iȚF(Ԕed-ݣdߤM% CI~+.zFTpvxs*椕ӵ"R, y;dkH4@RTXd%+q$2@<\DEuDQ$JY=S^hCMsMǧ5Ć(E$ʟѪ4Tz`ǭ<3(+H熩ޝa]Bj~^嫗}{N挕{v桕+]rշ!#+? 9 }FbR#aM!nw/}{:҆\Դ5r*4j.u70EgoTyފտm:ąUƮֿ}z=4vm!2)`t#OTRԠDn.Qѡ EΌ`Ś)妗ݖ€xezh桕s${<桕30$z*8 DsP%$_.jQ-}yUT0zLJ)Dq!R.Kw:t9̃~;MT 3`c|=zkʖODBKΎѱ߫ <՝R=*83 _gm1ks=HdU)i桕x桕oك^桕kg+ԕ<Kr (T@6f> C'N>j[عN'h)tT#%j&lۓ!JgX+s6b|PBB9S [ԨwH]C5 ̘Ѥ6 LiǵR%sSݾӄc{b=ⵚpz@x|`y#j1pi0Tfy~!h')3ƾT A#m/Lm=W_d}oi\]KaRZ)!n31yrAD!]ZDrǡ''[qs? }חNjƵؼgڏbR}ʯX2w05ߙD{5o"yݧE惖$v!V浕trl屔m.Bd%d^Iӏ=@TR$2I„ >o HSn`9ӴX*rPr|^t$j@21Z|DG*_,:xנva67PW".׫3qx~F%y #sՠjCj]&b!f桘+am桗\^@D]AT禓[ǝ)Saew]鍍™'kÏ"r0v;X3 E3TOUZlHjBQX[Ǿ .$ kyf6|1:KHŽv_kv9wџK:avo(x݉48W{,FwyQV{e{vt/ݝmߵ{9`bYT+Q!,M׮K᎑J޵ HUď7G_f鮍EYsD=CƥPBꋅwB~N $ss #ǡ!.1:9` 5Lpw=]̩.Ў476:~QJ tkJ/}v`+;i*C$gnQ~lbYi Wltbgᵉe嗏RdM嫛J].G҉MC99Aeʴ@$ӨG>i{h&f&5OiYtx-Z ~;ɤXE $p?|02~nS;c]%DAaZa9dg:eRsn$Da@uSi曎IY$F 胟;(Ad'܅>ٵR<:a:8d9iZ8=~~x5.*}n4 U|4 8{3iLz{2tGyU $sr Ǡ .-i b<tVխ3 x@]_I.(pt3}i2;a!@G[TY]MdѕRbv iRx[2TMŎWFh;Bт? ʤ2:S/<|8~6}4RɄ|3z1y0Txp/w0ov/{v $sr Ӂ%vOZʺ/z% I _{s+r#i+3~d-b(2~]=/WsRW"_Xh.Zh=v1mWN楍G\O6Bh=릕R}8옗z+4]#xW1톫`w/ݵDu.-uA-ZătS,,mr*q*a؃pk)voG(gYn #[ߧR1Ubbra1dTm|/#CeLd_+t\R1|W?yVOWƄnSaTjΌ)VN vDT֋K{"DJ لS@;Kq;7{66C x12t.whs:,ԯr+tqa+09p):o([n( .m '?]k&)j6lMf PmN^SW9[RUHdDN;hmG%n BE)yt>=y-yzR60}Y7%5q}F8Aa|=9xMQ|r8`|$s48rJ}my2~z0y\4}T?ŽL6WY3W (Tz8OLEu.IfoD:o;QAN>ZG:0Ө76~y 4e{|2y/jxrnLPlPEe?RB\mHZbUc*PhWJO$o+D*t]?g-rzm\;1 ~p:#7~ ;B~D[k?4OB>`;Xsj{8Ɗ6` ~o F%~JwgP)OpVWd_V^eh:V_#pP, vw[J0}H\4ȀD,d ;U-99KZE7}P B H^~UMcGvdQVl^cg@["peT+wDO16~aL5恾nJUwlBPPYb T,zׂժӳ}-}syۤ\(f%%l^އXѳRd`eN嘓OMLڑHԏ5F^雌Eꐊ]CRØAІ,d+C57S h>  I`pU ay~Plct'yOn0i/g8+3c_Aю,$YHƔVR\eŕu_JzYJWMlǰ6FX:ȪF͙կnpv'i(a`+[ߨ TvԫPi O!a/L蜐 ZYKzV溓OS'O.躐 K@FLꋊe[G+bԬvܪt#Ǩ/=9 sJzWї!@g#seq0\f;l}HizUiQy_t6i7r~ $s/x윐<~ΏI@C%;?,1yס6^_'lCkT}hh݃aw4ѳj|(<!61 "D=Qja~kgm99-yP1y}dr-vw_.Nv`Z 5$NȒ]ݓgΝUJE"⳱ć̀ɬV}Ҧ>H8拀0G~&桕t!桕l|Õjhy1Bc!t ,ly:HM\jzCvZihIߌXg꾉y յfnm&c73 B`;O'x^l+x %fn,p!h#%%k2{D2FG]-_8ӳxnQΒ}TiuH ؈ٜ ޔh优,{2rٖsi.Jgъ2pdtВb2`ǀG|e뮇Xt3UHs`껊S,pV"ָ:W{$/Q1y A@Z M=TB[ԯ&iqk ]H lA[c/@uʈ>jSΞ-פlD" IՉ"EDˌ܎}cypɳWSn{桕`jHĎc=ۏ"_降 [ߌCW`]Ԋ쑄MTqO5Q.|됇nOy+ú UԺ}@(Ca ]Ja`'X˷,tfdYo N_Oj} b;*qͳ-8ƃ:aPJToiw؜٥A{ڕtzNʛkчDgWD`e0TZ!FdUf鉐=RyRꦊQ#YOK몆N1Y5Mu-JOH[eSR ;h-sb;WP GDR l\jؔGR =yN\_0c*rf:c, QaiݐaDyX6wjBkwdޕo^oߓZ;V>璏MøDGYF颋cF 둈JG;G2THGF}Cj&~`C'v}N 2N=,kjE+,D7 Cî !N.E xFG1= *=XN_.tF|;ۅ=JLx^єzsDqk^`1ۤ)Y㰷RTOŐTG3鄌AyB;tꔍyIxl¡÷1('\Q4?q I#.r,F 2>rBMUg .z>=obEuc)PVd fl宇v:W:Z4P܊6JgI,CD0=5IP6.I예432^A3D3;3/ŝf|$4$z.4{hx4vC4!DuSƓ%  4 I|?[e6Yu >cD(S?sSŢN(lc&-bN{2< rKQ:eW:]d4Y{|SĈSG?髯>]9R»:24ϒ./:.1~~,,~M,`}S+2|!+ͷfx,u,s-Tr-޹qRƓ%  4 u<%DZ] '˭==ĬZ}]kp-n7ebCYvYWhCU8cG s> ˓6BB~M/O켰},`J™|7)#z(} w&?uf&u6&޲Nt&0ך|s%q%GoL%.l&TD3l RƓ% 4 lD% rZ p'> DLRi_[!r.t.~nf4\6D6Q'q^:.QnBO领!V@ؒCv8"~/학x*Sum'(-s%xr$bp#٪nk"_m!gmA!ol!]+k!zZj!Hii!ҁg5RƓ%Є[#yUn * ; (ͪZ J!aU|@%frd r--_ZA4,O3PӃK|b}GmɄNA}4)O ccl[$asSZo,+|XE9}KT~Ee~:Ox-v=0~~Y7/췗zzF.NOt(  o'h!Af:Gd[տ.dV$bc͠at`_8!@](,^.e:^<wX4^ RғUMIf5rEБ q8\VREz6xeYaM#sIOV'|\Bt1B\Si|HgvqJ yr8c솉z+2-vD+dJWp&ݤHko#$f@Ҫc*w_7^S<]CK]x[\.ceZYwXW0XQ %hbq pMI j=IMVUhjP0iW$#r{F (yFJthH!^[puC^i8rj?ur4tnju). ӝJq+jD%ר7g!.򠪺cuk7`-.L\s%\Y @X XB^K[W`VkhgU  TXwSRQ IJB|ܮ2_*8]8!~! BXy*. WC_i9^>+fX5g4GgJlF7]:lz=6_jo5|hp4/p`,bwk&lg"[uecfDj`>s\ϯ!Y|URSƃS 63ͧR-XcQmZPG)ONQ5W)Y~ToޗflR]PBx9!8F jG~j0Yb#0^#_F._O\-8fGHSJe>^i4hlk8فmg**nl*xfy#jQd ;&W`W\iXtrUn*XR@OZ9N wON-GM2IMNVL~cLQnKJg,M_PWdVQ i]JeF> k1XB%o> )t8-&yj2.1|k5?:z5QHzM4>[z1%mz#/܇Sw-)v20%x9EGKGJzH͎Cg@>r9SX5/|i2y/gvN,s:*hr! (pF'QntL YILmLfO8\TUK-]PFfI kED%p?*Tvy:w-{;D42 ~G#7;|J7H|o7[{3n]|{2w zh/xt3^v{Y>'ľ'J`agOtNw-KE暏cED抟?됆F޶:Cy7Y} 4vi{`׻1 xY9.Iu,sͅ*V{q(pYy G\tKXn/JNQucbS Zg\SeM MlC0Gx%qA*x=.6| 9?3% :$=L~zlnBq]PLgS䎖WR7GM%F臌OA!%9\\r C BIawhQIn5Yf|c*b=\(hl8T%@sN7-az=I1GY6ECy&DnM D\CCo?ԆN|=~DCpT14eWExbIv#ܴ[_%ץSTPԭKA9E_vA>[>뺅ȷ;pPĎ8WϿ4}n12|17&zr%0bxy7l ;>: EMNy: WJl`Lchk[#tgT,|P2ˁM8k6H5Cۈ+H!M7G]09Foϊ5D~BKva(_:GYlt)hX&^৚U⑕NN dGCwî@銆>5\;/ 9S~7|`6{3{>0Ē8r @XuzJkd,Twg_'blicM"s\]-|Wy3HSL9SrPBIMI:J]ݏMYpkkHx6GS:fclהrrjhsٺkmKѢa@˕W2uƣO䎓5§J#HF蕋λC܉1bA6铇 ?bك=M:Wu=8~6~)/)9W1>: FSZP+"]ovh)l!sd,<}^3 Y:lT+BaLLZO^Rq/MގɓvmM+\dzh ޔxAPJm؏9c(܅DŸZ #R⼔@wL峑8H灎8E裋0C04Alo¦?앃=bς;QBi:%%ҟ(2!>O*r3 ANJ8Zq܀.gCv Hrimz)xGfS3Rx_<]}"XuDQM RV3` ZtmTސ3]Sˬ0fwf}|@guOܥĕe?\ոlUіyOΓgJ;Ha贎u"E騌LDAw!@q`?=#zOzcUO#.`_H^\RQ'Q`csvavᗆ(^{Ja[`7&tͯAd7ҭOxb&j ՠ`wKXcQ孕ʨPN_罒kL_贏Jn鈍FSFQOEFCA옃وB?-Jxꥑ`);09z G;S5 c A_py})}wQ4KnyA$.hII 6iSCidXbpfwwjg 2fL듅i߭{ը_ѝ~xʦn0 cܢd[m_V iR挒UOVw@Mk&ʏIGꮉE~V-DdB쯃[:i6a;~(.h9L EAR[ bM[Woth*qzvz4݂ct@IuF鎯xPR[vgaeLmr6p_Ju1!)ˢptϪ1Rvw{Ҩvpפdh˞a] cV&%SOy9Kx"քLK괉|GꁊQx;F"2t;D©#at&ڥT^8 kE r QaBxnr;*xn}5[D~.<҈(BTgJBF[}m@} nTCh$9&aJO-\9瞓U ~PA{@O賏wNl錌m IjejH~ZfGGkbޫRL8%b 6 DLR QwꘓN`rcmr*vQw5n69^=CfkkQQhʣ恏lW"+ γ՗˙ŠE8ç+u3MtߔTqiԖFkY'`i洕w[ ĕie|N:fdB}j`V?iTĈhT$cO븅 $Ш5C9 PZ_/;,lQV*u-}2~+2~yjv4рݧ;LAJa쩨gV\n]ڭ6ї.̘̋8ꚑէۗ9~Y}ߚfxT}kxnP,vaf<棕m`d棕g[ە+|gkdrdl`"f\_ `V\mhO¬#۩44hckBP P0읊M^x&k^*itPQ.xq.Xx.yH3~!IFuffهDo,q zpo $OYa.~C~F嫗{ Llʯ"!Ȭ)`2B8Ac*U NK!]0jʘ) s"'pt!iAĹ#k#B0&wՖHub:|5ج"P׫Ӱ"ե5v:ە ADyL;棕lɕ[f^y烓cbu8plH{T|\fl鹍Z jꯊ)YiXWfuuQb샄s h]$=ϱ{ 3+/5> yLSw [wXhlq!2l=j_'mZU Y]f7-}pSblXꨡfCZ4-M FfHNOS(L#hɹ4|^1H@VSe~ł9FٷxUy0o ≘d \Ȫ|罒X](ȏVM鮌TYPS R뺆Q@엃Mlr츃J]}쮃I y3HNv9Ȁ'@ø&^Qѵ*ش9qg OG=c \S3j_ H[ FF 9(+ ;eQQ!g.d3AyH ]mzC݈uěrekӿܙ c!8^U7[{*gtV6N̶J뽊IV쉆kJnPkI۞^tHq~D4B]~dA;}U@e2|J߻TmhȻl#ٺo&r(QùP5FtC_ tO. 'G?/&>$B ;0QK!f1{Cb0n=wN)GgiRt)@]⪪,W@EQً'Nef*HЃꇇ@hn\:t3X9˸!9l=~:/y=U$|?Xy>>lxO=M7w}<*viiRa4 GݾUi#S2 {? KBڡM-0h 8oy(4 ;@I4fHS|$Ek1h}vA6mRR‡]aː]Y{ SiMpMH!aID#:Zi$h2ZH},͌5-R.y~06 |X1~Ky2Ϯw3ku25s6XzqJ0 vr-"p;Ku{0uR@ہ/d+ D|^Im(p{.K5tzMjd>"^a.KFX!_nWuw L&݄:Es1N/=D~5B~>,{'[&T%?b~d&s{'*>xm(Bu)1s.*.Sqp-xo.y|nySmĝU5DD8+ȍ95,3N2UI/|E RJ›ec#'groh3~{ao:XOۂT`ZdHBrlE髐0;G={1czm+Nz$rz" ۃx!w!v!W:u! Ӭt!χ qV"v̮Qn#nx\l$]k$ djySmĜT4DC8+֘jd%{õn2ȨA Q,gx#Dv\a.XAT6OkKSHf~>Wv];~럓(0Soy'D3_ty$GNr RrHr>ͱp;mK5lxQl7lk9jd'gT&.d]ecySmĜS3DC̄"Y^MiunҎR$:ŘVfV%difC x9T&'V\=zp?Tڀ Fzicw[6/z%}62f{A)̜u;%_m r"Riu)]hh;VCfqYhdBuc8:bocFc?~ګb a.^xSmĜS2DC;)k?p)˜/AHeE[\rgjZ vF/n%Z~_D*KvFD`\pFZo\ng6YMsU,Et(Ԥm!iتd@`Z`K'_$]Zf\[ZbCZU.[2%4[@ZxSmĜR1Vf7ݏFGފ780=UNy^%ޕg DF|:[a<mZ%bnWn4kF(M0l9pf[pi5gLh*=mih]*4vd2 󪋏]"}c_u_Sn[gOW3%7SOyӸ9PNDN"L@LmLpRL+,qK%KEh Kna>AMgVkPPPZDXJ`aDgCI"k{>>&p:*{tf20xZ16?x2CRv0Vv.jv,StA*r-7 u^P4g|A7އtFv㳌1EbڋCxΉeR>}ńc8z3azi0Qw}c-Ntf*`vqڨ(Hn&bUmfb%k#j/v# Fp Jh=ML]q_PTHX#Nm`J1WgE"lj+@'Ar;*v24/{|3g6{V4Cy 3Uy<0njyU/2v- Cu5/x9ßFN@LE]jNTL揑G A4Ƈ%2;쯂D~6}@3z 0!wՆ-uE+fAsG)q l'oY&smo B| 3FIvT J7lPka_UX1_RSi!K!o%DI'uq?T+z\:0179\8~!;G3~&:V{}`7k~]U4|2-Ez7PXICɵT |RbO䨒QIP焎@Bzܳ=v>#8 v5,I|OԨ2z /jyw+,t+Zr)\2pϿ( _oj?S %C|] HsNYi:U ,^^H|>VE:jy8]%5};ζw4I˞!eX"DVWRՔm`Kڏ.D~ؑ?̅uL:RҠ7~l 4@{1-y5Ǫ.w^,t +Q4sT*Mq;3- 3@} Eaz,LrpdU9d\[h=\S xpLF'wG.'|D`2AO񣊆PsGcfZ0fݳb3fؓXᮗ ՌPݓjH納R+q/2S:[ E* O1AyZ ldz'bo['fy2MUx/xRQW5->M<4%IMJH[ZZHluEZfCʥϊNiےw@f׮R_m/¢ڮeQ[QٔIJfďgEU+,AT髇5N?<ǂеV:97}6t|Ф3| 2z<#o[*43?r KVVVxltbdl2nc_&+yV]/}oW5ć!S?oIKJW LZ7_NljJ#/I]Z(W`w#&Hr h\޸ǴTkkM嬑kH$e9D9 A݇@q뜄-B>};Xu/8)lc7/~ⓢ5hV}!'ȝ"f㛻+`b9 G&`S aCw.mm${(_f/pm_7XdA7QJzRgY+SlEOP+OxtbD"<%ը6ٕyע|̉jɠz` ݻW_칲O 82J0YF覌DBSBG@Z>짃a==D2:d8C<))7 E|6R(@`b|hmq#zSi/Uct9^PCEWJaVY5[p_%xWYUҭӗKqzυ!ލ `<+R'iVgp'Pg6z De) Q1`umu$yOm0Mg9;n)e@扻aH^WYbp7_܌&}G^*eJŬ@׼1 ^'s|jBOgMj^ޙg/V⻗H-R. t=NY蠐Q~KZ2H "qFDdžcBqAD}~V?=${+%%i4c wCu< Q:_Ely %w0]q1~p^8ZrX=}p0Ed2n1U nm]gi˳T;oH(׮þ>M:Cx,rkUKeݩc\Y}윕W恓x@RYDNϏ͊RKi[-J~F꾉{E[뫆wD[uCDPH}#ϟ3Bc' =P/B^?k}&u8]u-1}yi471ˀA2$Pn8xf+8t؉"Y{9|ҀcW1AEy,o e{h^Ȝd<^\Ǔ%nT1-M|O狓M|eMw€R(ioH鬌lBGꠉhZFZyhGK؂|Ԩflզ\!e02/UAHg@ /OB^4Ԋrwj&sI} /pzq_0{lb2~9˕*HʑVmb]nݦ ܌?^Ĉ0ʶ[Բw}Bֵ)tךs?Ln!嫓ąbyZqTxfI~R`$zjR݈alU촁eOf=bQNyƩ7 (C [L1?@] N[]\i'&q+t,8t.lx"Ħ36CŋaEƜvLؘJ1NX7L8#4 0{ހ3z众r}zha樕n_楕gqZXҕA|k$sd5Uk_pdFY~_T|ZR쟃 LB0Kt|?| M g7 [nhp&!p{'&n@q%m[H$m,uw+Cr8׸aN1|/ cFWА c܏oߝkBNzY栕rpz桕fhxb~c璓:^a__[%]U:ffQ UY굊TdX?듇4S Wqt} ר|_.#>Dd K0 gZsgR jҨ2c]^W+'mvBh~@ԑE[}sכ`ܻ{ڼY Mb,[n[ݰj~梕nu.毕g|aabvZj{띇E\nЌZkXj,T!eYPb쿃NT`@&QmѮr9ޫ$,%< 2WIud X,e$%]6H(OUtJY_P<'dy6w"KV6Ѯf gp"AέrT3}BΚvU洕nt怓iK)^%ZJby:vUzdꆊQw냇OtYPp|HjMIsDZ=ݱ/ͯ&)=!8UF4m Uץl^ IvҢ MX\\*z{z|4w۞͋,pZ {h`V礓Yv\肐%UP5駍*vH!/Fw|푀DxdQdzwڶ' m>Ʋ%Js'4m.HD-) Q cJ2mD\h A;a^/\#P:*Z=}3C:*^:$Cq&kX+SN VƘ$IqjiKk`Mm ΒT{CdM\:"KiHRR0Ï (N8wci`1mqQXXN#r>S&z3~pERm;BZ`/p<1Nvv]qB(K s|&o Lj fledΑcWSxahm`h 9_I`u`f`S}>^s\Y=LM @+j ٴ<Fyޣs@!2/yqPx5р0 wRd de^b7!eV9)Li{B+Cj*xGs9/c[g^.O|{$iP1ueM!U^i3ey:߬a;R˯]9[y\)[ fаZ:Z`X WL(V&rW*X3XXA} Z>JM ;2D@_Eց>OKK?=sq RfZh[t"_E2>&kw:):FCg3rTeW+ue9e0z_~%Ycw 櫌d2-_ޯ[ԲCVSS;SIЛRGQ,P qP_F7PrQ4\Q{ Z>HMn[]z4pdiIfMnL5!GB,d(SbcU4U %W>MC0v_9@G`'Uc, l\ VblFia%ܭ^_ۯZֲU.VRw#O#MGMJMXMlLZ"L7L KB3LzZ>ƈL OOrS"߼q.0JAw8;i(=qb EY5 Te]o!`PBP#W73l:C[,*E_@-\Y"co*\=?\:Ps[가YK糑TQYx-/NLkJrH RI ^It 1pԌIG 4vۭH Ks.H G qG5 I'G~NEED ɦE YыE  אE mEU 1 #D )RD0qmlAX[@;-Y?' 5=XLF%N =r`4$XY mGJPK|QMA('Q,"j8XMU GdQQukR8PuP\ NuK JnG˽'E }DALCn :C^ :[?B JCM .D: D 4D #~DOqpe CiY Hbk KX}NUDOSv$2lD6zZLQS%P[VLqdHj`B$o >(t7,yj23+| 3=Fx~2O1xG0Wfx8.gu,t /w*9G̍HQ|{ FS LA ;.ށ57B|'03w޴-u 4+LCr6(pf&5mй%Ql0'$8j+ȵ"h`Q>j} Dx Gn 8M-abRlX0Z PndKjKD$cq?(vw9-5|0@443~Sn8PA{k5O z3=f{1 Xx.vx2ȳz?مMދL+pI[,CP阈&=`pN7}2~ytX/`vi-7t *lr*(o&3n/!%lCp$kVi; A\} E]uj hKSk*XQEW^MXV'cPk+/G$rB)Ix8<-}J85Z3*;C&~f2:LO}@D7f}_41|/1PSz:7K:( DيRqF~PN&LtHAE>9'a#4Cx{iQ1x/ v,Et-V*Hr(ykoпH'D|ngO&@muS5yoh=+ ;B'| jHqPafb W[bT] k.K#te{Ek)oylA/ZC<96>D>P;f{[8 >4꟬}<:KFC WfB UTⲕN(F觌>4@Fm֮;だ68} 3`{06x.vq6+sm*=rr)q(pq ,dR5dP|X1"y4/x-vV},u), t 8*$̕T.s24~@Zm cIs{*cT0'oN_2NbjZ!}uS *}N1ĂK8-FGGV3FgćB.3?ʣJ@:bO!fݣ۵^ࣚ3TDK=!DΊp@MІ >07Q:[ KKHAImV98HgE[!sCQG?|qMtnk e`C9WM5DG[8Cź?YBS>W;z?ǭ9}6g6G}XK4d|s3{U1!zA`T&%s,ǒQ9!$ E0 Q=/{^ nRjSdyv ]])~$W3E22T;MPFK"LT0]JfezHG.m\ZNuؕo_=d`RDžY-PɻJ汏\QF@ Bꙇ@̄?ڂ<$:0홀N7H<5i=~%3 |v#sp*Ĕ:V7DP P6~m^s$jJg8tu`n+|[4BWZ_a-9Ƃj]CRL_XNg1 T..xS 8W RsIESm{cnabo#WhƪP暕MMyqI1鐍3FaE5ߍ9Ch%DL@ӃO?tnr=mL}n&5h4yoB]c OvGF]tz^i!7o|!;re:.0zhoi2|~ l75h.?k^JR_2d\򆦗_dCt]ѩ1{qΤeVnQ^d;V凔QIC!M<+TJ8猐HVrmEPDHeyBۃ wBHrAN~&$C2R} At NT0]~EBh+Ft"pmU-jwt/zw 2_~w9usdGAoFa(lqrʒR@cth٩`mO?c>d]Yk}UkjO}rKx耐hNvꥊ*svHoWG xk=EՅiF .sfBDmSXٟ9"%̜0~p@NM; [gUx"n|#(qℓ*s]$-.u2~^?3}\`g2|ԅs᝟'΢MJϒ#y%wؘjqn;?ݍ fd`}Zd澕x#c/؆a]1`eہkQc1L̉ edN쵂`K!]zJXPf_ߞP.~>*4Lsa0 "[| *fd}"m.# k|,$&k&nF-+w>;\ɏ]yȪL4XШaڮvl{]fu妖/k桕q`椕gCY@l4tc k^Q{糃[ATxʸ̜"Ϸe=ӌϖdZNVfٙD~8bwLs桕hiac"竒oYmd[4]\VefH;BVYTXMR-V첃PUf ɨ`JW-*6 ;NIFN &Wegd ݙ1\cT}OjQc&6cAk;qsƦU\} ln7޷kXMщOٜSמJ3桕rtP桕g80bDy[ih|S[oYYm{"Wk,Sf챃P=c4AM`K+^療D'g8{F+U:#_buMy 3B ] ;uFDٽ!XHP3nOMGfa&71\7"݁ɜߜbzݲ0wyS=Ԋx*~29we27ASX_Ç7ZPN,L Rϲˁk2ĩ䆁,,Ƕzj/ /}1)z5 .v7qsU7Wr;6!q5Րp%f== p(b緵6a@8jlJW .;yU9*Aclhp1tT:~Q[} DqRC9&\T{^9"ey.%}$x﹂7PZ!qp#I{%QEx,'Ƶ6t+}kqu-Dn/=l/Tkι L"龒H:"eb8myo#vGd0Dp* $ HxdZl'iV,t _3dHkOX qH7l rI;쨀w!9%uI1lu)oɢw". 9x|9!r|Hl{"xl0tm p _yn!ҸVl2$_}4j&ui`DOQoV.@ /dQLTu"Ɲ)q+9ӊ fR{qf5dM]@?#mU70kP@iK9*W`i> dnq5}\o-[q):n^rrtcrNinrVrg؉q q  m6Ii#JgPnf'+e#.I@Č%  A^1>0gJ5΍B~*`h@}l, Ya]j c &d]y3KbHNIeAXg11aik.bkp"{vo(l.ykrk1"ͨig`fxsgw~g|M*gedW)bX_>W^/IA%p7K!/[;Y?v3P'|ULF#+9F+m ]Yca#\U!bfIN+j^:aPJg79YZ\b%n"i+Ald3jjg9s b`6`MJ_JF][\[`jh]d!v]`1L/`&AXcz"r+b\#`QpOOc`r!\IWqVV`V,Vn}фUTT lSH S-TvSUYF8T/IB?ɬVl^j>2ڝ$'qAY&' BQp4i IQYQ ~YhM)T$2A[I0hZRY@*bWzuL]*]􀦲\MlY4UWRMbO)O vO ;O UN N% KMt W&wMz Nf N/eFQLz* ;R5>c&ew77^ KpQE0TrJ^UAH&PW+>Y$`/QXoZe%Wz5X kV]Vt^ SyP}^NE罸LNi.J ^JC iJA o|JU uڸI I fH (hH }TIv0svWw`8=,Ik6am#+O`|'gMLOJ N_/Ye7Q(!GRD$ZP8gTR~Q DZQѮP]x.NYL)KJHF $ E a0F. φF eFC  E ZE K6D W=DY\ICf]Peݎ0|s<FWFFyI-$?_n=Q)FIgJ9ZP'9OS%IzMUUZDQ<4lNv PMP &LpK>*Jjr8H ҽEF}~E9 2|D PN6C oYB kw,B z B B lB3 A WA-=džMHcӯְfM0cռ@00O)I% h+P?J?@H@'Gk&0 L%'5>yG+FO l*Y\L wfl IH(kGi3G eƾE DP qkC oOhB zǦA @ <@2 ʉ? џ@ `A$ A B Amm:h Bgb HVYLwM\PpSGX$B__?6+e> ie:$-lO4)o0*2?r*,!7koE)JoB4'b`n$|l#Ii$Dl+sx16 }9ᩀ7nj5\}|/x8+")g!eba@o_rX^Gt8[p 7AAj CH`X LU eOfgLPXGF`_A$g&?3!Yko<7$n&6u)r11u"-7!ra ,J_q1.)8bYqSV'|om%lYV'%o-/~gw,tt (wop&,?lG$j߫"?g(i!e@1cia9 `8x{q6 v?r JFg L)[OXQVJK_DgA!ld?>%p9U*wuAw1T1x/t7Et0 Is+bDt=#)~q3(Mo*Tr]4Ő||B{OA鉇i?:a4{V.^u*?]q'n| &"^lC$i"Igґ e)d~Enc2o}5=y3 EpN JcObX%TO5` JgE!m<+@&7s.;G*wn1}1E|f4<y2Iv/b9v,o}ts*r. vL9ҁG fE鶌 CNՉ6<섃7I5+| 04Jw+s_S)p'n`%l$ j"hy!GLg;Ü fۅ-f^;! Bv Hl NOJ_ITU-^OfhI#!n9B&Mu*<+?z=371~k7=|5 ITy3ay0_w-u~2X'zd@^K⦑NI揚Eʋ6>T7~{%2fyT_.$u]+.sԥ)q6'en%xlƝ$[gj#|i;# i ~,%+<.6#?}Y F`tW fM3hYSX6\j ]hSi.Lu pTE|&vU?u+u|}93;?Mh>8I}{7bj|+o3N{f0f!x7A~FЅhSPy拕TN唒Y#Gc@Sjݦ9*n84gm{\02Jw?-uY+8s])Wp9'in&\m.(v+t *rD)qs(pj'o~#|h['4>Jo G2y P=Lnh [bzR:zၜ7-!JoB Yl}ZW2PvSMw^-FD"π>뷅˥9_Ʈ5M3}2i{E#1!z/w.*uܪ,tեk+*sԠ +0QsoN9'y}24< TF|| OKq^J[dfbZTrR8$({XL-pJS4ʃsGwCӅEFRR^@cx=Fm0:XfJHkQb<-)_Z1)!O忓.OGD6AAeN=}ꬃ90j,7+Q}\4JQ}+[2{8l1hyj{0![x2.wS-vcx&{V'1&;f F~M /OKsn\wekgHd\sU$zON.N;5 J5B!I P!FCb@І+>`TOȠgEݏuc޻^mۚR*ãJI?DЊ@Ѳ>tB<H9~T6}(4v} 3{{1T4zSi07MyC@%,ʔ/u{:9h|EC LOKAvo\S}h\g{e_brW&xhS0|S6 P8@XKM|EKdNuCbqAΨSZλ/C‰0h[$`RVKᕖXM:HCjC1Ajd$? a0X=炓t;P폀 8zn%5y}脣4 |3{8yp#ۖwt-ߐm8xnD^ `O9Ly/[kghbpZ(vZ(0y&[5}j>W+=|QMINbiMH̃,H)"}ZN% J懎ͯjAMdiWZ>Q9gR*K]H鱌HE-͖BCÆ4A})?>)x= р]:~Z~Z:A|0y9]Uz_iyh7"E4+:<6ZMCS NQ}' [oZf.d~o ^)t\b.vtd3:zpa9MtWLCuHEы;FvD뷆ÂxB졃|@_y?~s:>E}enF={ FϜ_ I-(940MnAvNV ^[muez)hl*j{'ohp*0shsN.nyqr3~j,@rQ\`X|0o桕o蘏`/GXፒT] 씄BSa 2P|lOw좃FLls큀Qs+zDk{i~{Ch|Ae{B: é& {.I 2,OAyP Գ:+<̃%Hܔ*\!&! .VkqIHި%bnz5wyM"n|mhic>gHԸYawh_QnΐXOdS5ëd&aJ Af멎N.Aצ>Y0ha UmMSG_YRwΆOI'鹈Kn G%a΂=ɳ'T8y:]w%~=Wzl>-tx<# v;8u;%Wtl8BQ[tS6 gt[szֳ 8h)B9%y,MjRSC`\| .&l[<\5}TR][}Fo|IG鎠yF24E9ԟ@ |9},ĸ#2&k﭂'9*zz,ڪw0֤HsH3\p2{6od2?an2m䱉ٴɷtHŶJzյ#7 ZA|8GLjcH\,Y:3-4I(\:b*mZF0NzMTsLAuo=HYx;^xH9Ŀw43gvl)az! #U5U-|exw u_$8Rq'o1n)O2l*V)j+q@i .Nqм6yp4#+\.S9/05H;ûtZsX%[9Qf4b]W,etXE>`NET5e.?hk8$9mq2ԗo ,(pO%J:s/ٍudYx yNщ^xXv+D6r!nzkP i!E#g#RfdlV5AFR({0A |*s؅*J2-и*7 ;+gi#Ii5Yb%Z&] 1WGw7a9WGfr@b_I0wd7`!ak }n__q@aRp ZRo>T eoH}n6#nKBj\fd/cpGbE4[B__5_IJu,ܼ,yGiԗ<(H~+IH8tPg\^MRG^=N1(-`m59cx7O\%5^em"nz$d&b 몔hîfArf"f {fdcxb*xAcXLocLcc_%\~([4EBaJ5^ͤ^*|2KF׺&4_G7 \ko=bg O3\[WRz[GLT=)S\1E["&O]Z$i\}a=ɒb&b!t;]vضBZ [[M ړZ X H_Wd EY #Z\ dZ :X*ӹlVd 3ؾ~%+H0ZڋG6ϠO$j-+N"ElPAW' .R'IEYIV)H3([,=GoV+@]/Q7`meWeZ[ YD-cUR GPkQ KɄR RR a^Q| uQ HqKP #P 5cQ KR SRN3jNaJ,G($>Ӕ@'`5F(q |)`C|M OKPj@?^T+~=4QgFEU$~arMoS?TS]e-SyϸRMHjPyмM L- 9K V?K y[kK VK fK( Jc rJ+ N7K` L3'`W>IF06A;Ͳ9++5z tl4i0S9DL,IFH(K6QU"<=OtJ?Q_N sNRMRN.MK1I ټH0 G :CG G vGC Gl F 07EEF#Mȁ<[@4FJ3* X=!Nr^7(1_<$5LIiCB1H9!"L3"p2NL*bG*CLJxbJR!x@I"LH_yHMԾAFE _ĥE_ nMDL uCj KˋCP |C}~׆C`C@B*=A@Y?44vկֽ:˭V?,"2Q%+oePEv7=^AC9JG/J%A0J=(=G"T>{d?7HHy A^ΒDߪD D 1/4 Nr4!W.w0Ȳ~s\~ `TY F8?.*!E,SES*F "4@'jA@BcY9p?f @ ˍ? ?i 0> 2> ͚>@&=X=Ag>X0>?"?K>m81Uzf^i9faYAYD HvN LFT CA}[J=a:hff9~ Bh3$lBd./#m)2xjc&D9jc#x]_i!x gW %dg ܭfZ&an0 ҹw1y/ex- v)*p%N$j!ee bg\T_+]j?[fZ;XQcWs4-,n6ggz?`X kHU MKQCDso[ @Pba>xg9;!jt7<%nC0/TpXm,"2lrg(CmZ%\]4k#kxtjM"!Dg"i *Vàq?5R6}c4}x2M{0x!*BrB%#l45"{6gP* dbl`lP_4>]aٴ\x[7aZ}{h')u3*}py=hy H] PM0uQQ>IZD-+b@h~>"lP9&pM2/sL-3o%9+$CoR'])o~%yfm $jXƄQ;욂4cX{. u)<{o%lkw$.i;":g dӰcrFb}{aZL`*F~O8x dE{nP bK`~P\U7XpMTcHxjoC3#o=(u2w/P{3?7{ 1(Byue.b\u- +Kzs((pI,۴yu:ԁDC❊;%B{>|s_6}/Xw~+!Lr|ޓ'ni$%ll4מ$sj"Fh[o f-l e~ČNd9c *#4$Cv \Ii ;P=7\vVS&JcKXlI[F"q?(jxi7-}"6r7:}21Dv/]vh,b{xt *rm/|w&?Њ]E毌i5D钊@V꧆98y2KyB݌-Ft)q'A'o&9]mK̳$pk1^"zh4"O6hP!6gN#!f1 . r1)AH{( H-p #Otb[V{W.bP3l5.H!syA'zkj;.19Y:5 3bEw1]x.}:v,eQtj3g{pE⋮I蛏G1CI飈A;첂*ڟ55C|&չ0~;wo,t̀*hrpE)p&mW& lȳ%l3H$k $5j- 60AJ| ;Gr OU}eEVsYjbR'mJ tkC*'{mf=-?:};2> M3Y^Ty0}x.Nv7"=LۤMM J9ۙE_=>OA8 Gi3zȪ/Iw ,Yu+s*Er$)9pƪ(noť'znࠜ'7#ny X"06(@~wGt O+wgW}[^cSm KurD&J{f@.{=x;G?MCu5}^{~2~z0^y2䊓/XMoG绍Y@Yˡ;쟂L5~5C2b}{D20y/3w -u,t+7s*brH*ujq {/t?NGw 9OYvk X]/cTo/M8uG'zV!C/~QA:|BLy Z9q^|N5N}mP2ۥ{BŎOV⁗TpIR}͞K@)LDω>>л:?с.`7|4w|}3/{j1y0+^x{3.wW- v-Ht Jyg_/$G>Fy[ OHtm X_cNV"nN!St Li)wJ1z2Fd9?EK Eb 99H6~:~Y;8ڶY}ሗTKGNH0MG璌Bh馈~?8 <_-9훀|7/5d}y2{ۇ1xzz0y5~30twÖ AR]J.%=k5E{ 'Oqp 4YbdX$nmT#9qS+ rRm1xM7^HGVMiGx`a\>i|@#EƵXaDaU^0XjRXdK֐Ѫ5E闌@MBQ@9D>rkd3{=`M}+ux|]<|B؛Br}%)A.5QfALw|Yl+q.`may/` bZ0g &LnA6{{#SrKtLpzP~u/sgMJ+qz2m朮/i .[弖|S1CxJRLj J66f"HdI0BcIR̂`yHv4\PFL~XDB}hSBs|؝'c)M'2?qtVKz ?Xr+uy`@+}Z$WHXeښZj!Xdl64tڝ Qpclݺ&D]f=r󝲔:vVʣx'4u.|xdo楕lRYsDhi~pb^?i3Y0`{Q\\O΃W[MtTEL#PI~wMH9} [eXez$ߗR/Ǒo<IW(:}n]pZQM}6J#KY Q[;ᴫ5kIg0OUv.i٘\х X-佘 {mn桕d?eWq]^N4gLgnWZ굊TX[RW쑄"PU`OT~ULR7|IPNn|PuX;瞒 p*V8cpG}rU Qi D I<> 68a ;/P_4`u޺JoZc}"΀#x~ݠ̒wkGX}&塔kሁߕd5;]y;VqSm,XSi+ WFl#&LXc햁Kaxo}J|_{Fv\K| DZ)zuhVYŞP%`3~@CXRx'AA칃J-9wC^ /FGƋ,ZRn>An&]W6"u}3!s!\GcyB۲^wdY̏YZKY鍿LQ$ M}{섄Jy!pIyuPOhtZyCl}+Ai^{?fL#z?d/Zx)nC ui0[C/}6@ ?ui&/X zGPc #x5ݰ@٭!YXB2n IDTiϪh YdەщbHI\8ԺUE;S$鼈N/LIFcE+C%w}A|@{|=قZy;|x:xx9sw79olvO\unǩe ӧ#t*n;o "Ӱp`P_vdnš6 9ZSpN(ok i[;zUH]Y/O9YP"۰eL5׆|Hݱ탎F7낁eB~853qoe5~{9$^v9$tI8s6rP6)qD5p4/p+3{/db '۪T$޳0 #%fnk-qt Ѳ?34[Ozz%bMPC.'wZCtPzU>{{@붢z?1|?sa5z;|xw3gy';Ô]!h# I{'%2w)\st,ۣeo/l.fcl-[:k,ԎHkG:$y~޲w ıZԱgTvL("a2f{Koخ7ͷ)f`\ݚ[ UnAm5/qb4r^3‡q.q$su$ y{%5𭀨0{!yrwuqyLLni"k%BiP'if(e@0C۳> O1% %b@L*D"6T;M `H*fA FDfd#^Rat,GS/Go3`;FneM?wf_u=f_*Hh'µxj n.m׽p|$u-uuC"rȢZnê\jLg edY /bND_;lTQ澈O8{YJ<֦,`14׏)-ҵ'iq{ZU_ q=aw`O3aB Ba V6_ Z<] g^ j_ D_ ӳ^ Ч\GY;X2o<pP+7=I͂0UՁ'i۝-)s)\in% u3ZIJK TKRA sS'?SE L4S7YGdSvXrƍbXרYW* T# V GV< ڼT -1Tu -S6 -U U `QV VT * R"Y< )oH 9%2ez܅&%15$2o>>cs:MWyIJ mL2; Qb$I2FQ %CLxOiP{yceM4}PhdQ5MP V'P N: /a{L 0)M 3"ӬN M&6M N3MqhL;~w6M/mpN\NYX NF<g>'Ɍ-aXҳ0ͻo'&3jr<!S']=sBM G`=#/Jy1jNC!6jJ8?QJTJZjBJrJ3JcJ( ֽ[H \G JGlGH.rHPUWG8Fhb>G1H'p?H9l$l-\ԓBU%߼-šz΅ c<3H @R*C3'(Jrv'4GglBECZDl@S/8F 㛠EqE ()E |.xE` \1Dt~ C3C} CbJCjCozCxBe-BC1j;2-ߚΙ*N-=tY22q @&v{ S<,>3=o<S>?+nw=F!/> A3(D7F*=iZ?0yr@h??@ |A ȻAT ?AJ˪@̌@W[ͨ@;9@}ٓ@^߁??V 9>*ks<'ʞB7-\K(`~-Z,%"2eFi0 4 ;>P)A 6A.V=.=9>EJh: l]>9=0="}=B-==87=p5=nMIۓ<D\Vb A6DL6Yb75wv6W Q9A E: Z: >: Fњ;{Nц;( P`;7s`r;F5_,;CdC;Hd;8ib;k;)k;b:k.$bez/o`(8RPW A=M G0DT bLe>V5:B\7)a4^e1hr+(}j?j$7*gO#=eb 1VdsaCB^ѭ9`!h)p!)oq. 'o%l!fa gd%[EXVVTf9:.SG{RdݓQ\و2Qs:)m+#h45_@@V H&J {M'CPUJ:>|%\:[b8fs6t ix-)zmg&+h%s.'^n5#i]b[^){[MYc]W^YV'T{T gV7SyPu.!%o1f)?] HR M HYT#A] >dM<g9!kh`1)]nv*],j/I(;%j#Ui"&t-g d]!6Tgl1(#o7A*8uU0Z3!w7)G=:km%HWl#v:j8!g$Pkq.`vDA5~3\|2|z-Kuk:( n!$Vi9!jf!E d.[b,-d`n1wa^x^0^Y]]hDX&~w|a:sq8 aGd4 MoVMQGM\[DgCWk:?<#q*7*vV013Vyzb)>m:]&$Xm$jwfs el,&{V;=uGi =C;Uс|5"|0QCw,s)5pŝ'Qnr&"l@%Ll$k2.# iզ#j&;#$*ii,Bp%};w6$Hk N]b lSSL^KiE3pVPA.!Rs9[)zl1x3~\5G|*Z9s.)Qzlq{C'o/qw~}BxuBՇ@h|>St9?`3E{J.wQ+t,*rY)q"(p'/o'EnW&i.u#uV-tsT{:+,t ֍g)^N$q- <}MHsqNf VA/Y `MPX$iPkuiN%3kI+>zN=!ڣ|U~QؓILM@IΎxD2@Ʉa=Bۂ<:;|7I58=~'3(q|H 2z*zd2?qxt0w]o0"u #_K<%GPv6NdjVfS]^T9fVaheW!,i'U'JoO0-vF2:@CjVyvsxT"{b\;{y[t8;|AU6X{~J !W9D}MsWLf\Mp^WBxV4(X]q:f {3ttvOGCnkQÐnՍD!n&>amXxe䜕_^ R xNR裏muIedgGEꯉgH{zdGZ+7`EZCb(~VTAw|N=@~@I;4]~2ڕ@/ + P,7*wC&w2_LwVafr  Zz8NoLaMeNM\3k\'SLw7g!~tـҁ{Zsm *d[>t.LD^i畓1pZ]汕fP퀁pp [΃[KMR=_PD쏃]xO5WL5mR@I~MG1)}JEq}EB} 36_#5 C@iJ|+Ujp OwExH A* ?F @'fSF236cjޠJmeFvQ/,~񤛈=oFsyڿ~桕tsI梕ef=!o#mtggLV 36\Hϐ^2WۻYFmfBҬ_mtz4K&yZ޻e f+猓IcC _~x韍dVqtG'Ro뤇0Pi좃Tk}JdeIaw|E]|D[zBYy*B2X=rwB&GAC*6UDB/-Ϳ`;"Ӝ ~%g/g>wȯ)nQЩ<9pe܎wQw|*omwm[l^ՏEVTITU?cČ_UENPى%첃lIS׃FR{/휀DwT~Mvx\@n:|?jZDz=gx>eu>cksth 0:˝V#әl0_v?*'clJ wEҾ3$cX]Kބp5[OΖIr0eny̷F veD}d~`M]gMVTcl%K{>K˄Hn혀CJ~Atd{> cy=Պ*x_<+w90[v|8{f&u}7v;AhOE>Rb),A-/w*\{bH^[VT1W="FodMBs^.j2 Eir-lM)lG@pjEkw |:|huz"q$n >Mju >g"A3eg$8c&Ea &5616d΀ׅ2ۼ/)50ug|x6gD]5]&8HH_ 0mREfL*P'7[ob4c섲X%\8aa"Bd|QnhkOlZ p xp зp ˜nLjT9fimcI,#a:`Q^O5+2U'1K#bڞ% Ѳ8FÍ9"qpl6m+e5 nAN20OTIN>G/Nr7xFEcN_&Q\(U7tZ$S>\7)_5<c2 fAg5 f `?dD e C׮fL '/f 2<bc_ZŦx\]][[Q2̸+t5+eu(^(_$l A! ~g"\aJ @SES HtHK9N|+6KN+WG3H{8Y!QZHmR-[TIYW )IY. aűZ dx[@ x[Z4XM;Yb4Z^[m_Z КW TɕS-r/Š1̘%Hޖ2Z% Ʉ$|KՋ i,)QqA=L?JJ k.N$v<{ έ? e@^'@bs@m@T@]@@ ޴@ y?Vo=]>p"?V&$+(϶6Yگ ˵,DbjJQ$?r1W4 -7 \m ?&$<)!29H5RV[3 +Sm.9 K9v9 3a:-H</М<N6Ў=0?P=U,E=wO=\L-=Z_ڲ= r`^2 Du;2 }34h*,55ZD67bkI7u8T8c 8Տ988J8[_7el1 }f!P`-!X9DM@B9 * Z %9^&g!$cX *4_oPF^.oZp[%WN{YJ C`#qh|"h fa=cW1~[6FUs/P{g-N[LM0L9KEJXIJXr`dn:gmW'sr^.%6kTf@8I 'FS>I Kq9U:4]!1`T+ya) Bi!d p5a!P_%6p[[RS=Y&AOw[!HAb~$k#i!gdg^Z7LWNQSQxON Lv]L65,L 8Lytn!f3\?/]Q/ FE rL3e?\W::c]+7V b5f/xp[iBY1_>U\ G}H ~M B;PV0V HJ1 KMBW/=_J : d 9hA/#QlP,0m!>8_bR4b r_,)O:\| v_#ȷi3(XoL &kSmz%l\/$vj xdF8]_\xZ&YjU]^W2V9Vx4HMUV~6yptEl1b4?CX HKV MCYW#>_:d8,i{.#_P8_/:{4wo1lf @$\JsP {OsF/vY (@a=wh?6lt/]"jp=+2rX-RCGrg![Tg4 9uda!JUg-*ӆt.sw#.uM-u\8,-s(.n%/k"Whɍ!UEgN mf] d ?dk FicdOedzĀe } mypql1dhB?_)KlRv OvHN Y-B\b>Kii8Zlo1#p-t2s.Ds/"Uh!vg SdL${k2#z#p1 z;X2[yz1xؠ/Wv+MFr/(o%l^$kQj$pj# iߧ#iL/"|h"hԓ"'h4Ձ*/ {>)s-1wiA(a%LNU/ pPwJ, Zo,Cc?h;zk m5%o-0,2tg1COu5v$V k#{vj;"&gX);pN! d7^U~6}؎5&|σ3A{.v+i!sf)q(pC 'moz'En&An2%lԌ%lLn%Ll: H } Uvd1xnAdM,XCQ?M Ym,EcCn=e?phd:'mX2]0v 3@w3FZyBm&8vm$Jk~(k(+k&lw2<0엂 :_恬7DS2{˰0lax.fvkw-hu,>t|+aGrڋU*Smqą?)zq8 (pjx'o@c qdyS0YrfB8hM[/SEP Zb6I`Ia'H !cE&j9-zv@k5F:.zp5wX{/X-uxr2۝4q>A7bqVD8;q/wu)A逇`?ʅԵ>)9~n5}Z3{|]18@ywB05x܄/v}. tx.,lsr`,prl*qƆɄ A|M04uCIlNNT_ZT LS9 Yb Q[S3[&S2aQ gG|)bp9I2}9?WT}>p)wEZCFuyڜF2tCLxu8~tGݍ?EjcpBG֚F?S솃;ퟀՇ17~L6|}5"{u32yo#2jx]g0(wb/vg^.9uajyW0yDsqNudUhV X+F]AU^`bfTg4dZ ia`r]"j_!T3uyQN|ތTnU*~xuɝX+4xOwۭD䅇ɦ;ǃL( G3ODņiA|?~wB>$'}pO=I{g:z`o7uzZd4zU1'zQU0Scy ׉ҊDP0~?EvN#j Uf GTqLx!Jx~.L]A&Q `]u.1lEmJXuhg }hy{hܪzF\4QM HhQ疓.}L訏rHGlFkmhkE?dDN4_Bc~.Y@g|P;G~J8X~+Fa6jw}A4=}v6荰*↠X0hDzMxo4UuM+H \B f@&ĕ 4AZ7D*S)߲y1cNHnT.~]bv^sz# yv]~jet|^B|a橕pY@洕-ejTbOr^NJ#Z?KW(J~QG[V}2JDC[}EA&}TB$>/|(?=q{Q /XbD@}LwuRBʓt5]ߡ20լ,/ y 73'#_J՝1CZśGRe#c$armBց?t 8~&|imnLu3hp d'i$猓Ko]nIUffUXUQVăzOU :NTJ}K6QYk|3G@Nf{rDTLۙ +.լC?_Z/ LRg )?iAA?.OB\͢ [kaswtyyYs#xYaTQ V `x/Vbv{Q~r[EO7kPIfGc}Ea |C]zAZyW@Y4w? Wau=U0t 1֗x+Ӎjtd({=p__yݛf8y<:lv;'Ptr8Ajqs6ws 4~re3ybq3tq'2lp p1kp"ƗgGH;Μ(!-DF u&l08#K<ݗc˶ߝD$FۇKB~N!Y`15hMWVp{H*Kt6H kuUD׷w?֯v9AguZ8Tt.3avh*1u*cr-ڛn.l-Sk, k,("j+΁n4j')|gBJ%M m>hɮ$,h#=CWT̤hilTU7H.' ըt6(T+:)HTԚ%˙_o.vP|DXza 6nYa!MPU*N#CJTP2lZ' b'e(Eie%hf5Ljc@qpUw\7_qlii'f(xc^[-`!۠^!NYʟ!m  Y )4$alߜ5!K ;%!%6&~"F#ec ;JLE +I`4>O'waU6!WY!͠Z}^ 9;bce MiSkдdl Fi DZeagC_.]ݮo[e`Zy]t{`yaѾ&`̜^6 MlZ6 5W3VƸ/QХDZPG%w"\Љ|    g{og\Z2:F@HW=-9iDt+G!:CQ5PGX?hQDHL NΰQARTWTeRGSY3vT8KV)dUUДsS% P B7L* vm DĚ!KT?6RSJcZ` E!:j-VF, G.dYCL2@RA:JYi=O f l_E5 G4 qH 6 4I|TJ938JnuԬKQKk*J*IhK`xL&0]MZcjLXNGFfD "Kv б& ۠|AG  o@ cMs(6 [=97 r=*u@,( ?VL3=;J5,^8_XmMۢ_? fw-A^;.b ?,84,z 9l">H-085]; 4G!}J7^S6Vwo8 u:u8+K=v->]r?`/?7]?Ӄ@CQ5@VI'݄@F9??x{ =v'>Fn?~6>#uA %P̹3҂MB+jW9/OM 6:,-43=I< 8q-4>5IG5G d66_/uS3 6B9:2_џ;]љ<`G_w<fP<Xl:<{V<l;$:b9,. 9 9}ڢ8kf_߲.LPybh_{>#' /-UjD6 9]$4-B04W6:2Q-G gD3/~3B"5 e߮6"/7IՒ8TԆ9 )9:+Xf:S :H908d7(55L5@1_??t?,+T߇7jvYPl&1%"1E6 J53 ~$i36/ +?]1 kGX0 ,Gk20h=11m/2|&G3X45ؖ6u'37<7h֊8>"Z8_8 | 75~$6/PI@4x3ՙ˜T`͠iҕnCj{I r_j9AW%L;&!S].4 + f/\0?+_ 7w-n J, \.-n.jt /Ghj0@\17xA2y33~%K4j?565l d6T3ع67&6\a35j@5 :`3_%dUZ _$cV)#LxE5~@ =u0m MAm! CCPr 5H/L&Ngd Sn#8RME2U`MTRQlPMӪNvcTO*ѸZ'tY?WX)T~}Py+JE 2C_BWtB?A&AZ_BXC9_e; P`JnX~(N&5A:=2 (A#s #C [IoaM2@/P~$'gZ"VL:3VNTlQYArN#7dOSmtUӃ\(# ZaXU}Uy>}QK}H-Fn ED{wDaE;5E٠F`iTf* aXKxY9\(O6 B>A4Bb$ Dv MJrPNQ$*`"VG49W;WBOLU*n=QiO UPyZgeVg&r]I[4*YOYV@RY~MvJ7IwJIAH(xLH p#jH6[HrӪIDaRg bDqZT7(P6TCP>6C% EI! lL LOT#W+$aE $zOۨNPքNotpNˑNă?OLc!(i {d+)\(So7G7?:GD )/ F$ 6NT!RG++<_M|e)v n)udCn64Y9IfP0XBltpT3R@ixT'\܆a_zGg^9#] ^Z1#V$/Tߥ S 9GRDROϣXqR,E/ I4)= Q1@^")bUh6 z,g#=f>Qb\NrYe(VE#Z!Вe^!qg+!!fp!\fk!{ez d4Q6`ѵK^ %^#]l\߳\`]#],^3iS o' jCbc)'Y8*N@B:EF3J/ @R 3m^ *$c4GiJ"M-h$?ugQ_%=t8[@ЗY +^$$jd#njy% Qk7%uxkM%2k^#^i!2 e[dWAOc+bӯ@gb8HbO b=bcD_cTk q*x#mVid'\[O8EQRAoEG7MLr6 {ZN5.]",la$XhYY%Y-hZ&>i@Qb t~_ $m^\kpcZ UZ)jp)p(p\U&Cm$V+jǶ#[is# /h"~h!g!gP!g!gw"Kgn s^oAg&^7T]IBHn`IJA,QF#C~ TaBXU>IBY6b-'k.+7o: )tS{q'qNh,gwY3gY2Yϖh*ml5qO}k3=|q2m{08]xơd.Ovpc, u X+cs+?r)qze)+ps5'omE'1o7h%YmatuFvz9#$uQm%eD7\sDVPxlLo IePLS PZMCOhLU*H]D>W!g01r9 Or9kneߍ>%lC֓A{kF?FoD¼4u\=y>!0:{타Z6(~%2|30 y~0xFx/vp-ui,se+Pr`+|q\q)o^x,}ys<$j17`EVxO7XBAOw]0 .J_ID`sMWY]TU`qZM0kOKJKrNi+sOUoWáRnUK v{OA1O}EKꁊJoCdVA쀄+>*흀{;E{|w\92zkk6{\f53y_.2<0y Y0.x%U.vRa-rP6,q|X)̀W}o :wc["mni`6KeLpFq_JNQhYH1q >ox <~ $?}DwOS!m/]beFKmR[b^bqq8b=odep{Xл|N?M'LԏL{wFꂊ7pD,GjPBDbd?L}]>{V%; H|Nb6||H&3|D 2s{B2EwB2u2LS {!{s7EkGyn M;{S<:we;:T#uC Fw:ELt[9sDrCUrE'A7~NG(iuðy0\(ªya~(Ն5fl +?F?jR֛UV`0ϘnmkꀻoHn#;;v]dʾO7UP}뵆N6w썄XT-s2|wF3g\~C$b|B`azF@]2y>Z^wb>YN+tD[%lW{nUHCVqL@sq@WMtX:jw;v(8.t6q4%$o3hn2$m/|}n/nwmt,rj,m j*,%iibpw5 |uB#jL^Y8ݶQ8!ڙ$ֿ90xbҌ lNZ2`Hc`OhHDl{kD ѿ{n@꿴p:Lp%1~n}0/nA*oF|p&80 p&X/m(ki)Kg(̏f(Uf,&5c]&c#'{dbTݚqIo;༝:HI{R9/<d$z݆c ]2dIJIM'Z^6DFeb 19ލpe41mgN2⦽i.j*Sg,$jΦi p6BpdTn^jTbf!zrb$@`_"F["4 ["T\&ꍙ-a 9_n0 BC6R*7F u/?-S F7d}Tb&R:Z9#_he\P"b \Z#^T$_!fM`z c kIq)q Ik뽞/fN8d@i`n^dAW#|!U}m.TÎ ڢR_o(Kػ ~շۜӶ ΒM `-Jey;@3%>23@!B#]P{QaPwSUW's[l[ٴ^:0azOeHifWK[cc ,_ lrZ9 YsS­hRQN,T96 .7 ! A "H b ;m c"SIH48}=,,!AL&8@Y!H2txJ{:LQ<=0P uTJ/WlBXd@V߁FYlת[MZ W ZIT^ âNC MM&^<,VCī } )d%(B` mq xg]7Bg132q(=9>5$)*87];qK@Fk5Bx Ec H:KJ0L^4eM^yNL)toN.g=OHFPz%L6J]΋H TjGA/ CE 8EVFMqFUpEhCm1FxH_۱qEP'DԧC3xt I`o[ MyO@c&sD1 4A,xF'p'E6 z)=`i$Y6h'27b-=1HU2 6l8+}: V';~cG=7#v?_)@.@c/0١@>a 7F>2ݴ ?C#ǒI!]ΆPRE ,fWyiHXRRE"6 4F"/*.(m9>  7 B$4M7/ @2] \3|p4hd:5˞7ȷ8:s;%) 'Y'p#v0`* %.=U2*+ ~0C0)( fS+1 f4,LZ}r-zi.~0+si11]*2}B34F4)85m$ 60%$ڙ6n-46e{W[4{x3Re1/ΦSAʻ |7 d 20 $EoZS 2J"(*$Nl) )B+$& -'_q5d(v ^HQ'?X)jX*Ё+yȘj,-Hƃ.9.cU0n2Sޜ3Gv4K@݉5:ܐ5`F4oc3i26?00BGMNKt)E$P9M/+j6d6h8 ]<=k= @*_D!3C3Kc0KI,jFCeCsF KJIHE.-F1qDvz? b: 7s7 -25A 6 W7 7 O8 :EGbLFx$:0/. ,6 z8- Q;'>4>CAFCHCe2 LKJjoG7ҊxC(D A GLJHWFuDO@1 : 8 a9 g 9{|; Ev;YB@=e=FIQMTjGX#;//N7"\y8 <v >? C'JL2fLVKL1KRkGrDJ~=D¾Hs6:LC4KZIOGEj@s<<=Z|2 >$+>=?ۀ@AGy}hIGNcQ(HV#:&1 0C7#j8 .17%O98 <. R?B| H>7Rtq#RFf24GNQMaLLGlI.FCj#GsKcH׉NM,KIi_wHuF"EiDeExEٿF ӤFζnFǓHXIXL]#P cJF# @1.37'9& A= @ KDaN}=Rm%CS#$50NIMmM0n Jh3`Gm[H0:Mb3PAyZO;HL|cKK)xJMH0HH*I^ҡ3JJ% KsMKKNHR-L"uBle/:6i7%C5=E>] 4A {FRw;T h (T t76O  O4OSoL[>I0KyYPV}R{P9OPXOPWw@Oެ? MMS[NZONf=NѽNгP kQIMPTN"%D// 9g28)=c> oCde (LGySqJUY`*(U[M7Vr-OQ!pNK^MM@ZT%L U8GS@USUAU/T4FSH&?R|ʒxR5STVTAUKVOS6VQ !F.<#8#-> t@7F$ PV 2ThoT*sW>79Xc]PS/qP(MmQ(#YXD{nYul[\[/!Y?YéXh/XFYCw`Ze6GwZ6K2\RXzUgY(TSdRI.Q?8E1'? !A~%4I`' O"$StdqUQv)wY*:[QPV'sqSFPC MhNEHPO)+a$V Ccc΂bCSk`~_ձ2_._!z`!Q6`ߐh`ZmS`Є^U`U,ICXp5[!&VLY-BtQ8e5;%@+D52J- Mq(OP+Z"tUh%\P8`]O_Kr*W(%ՙjUU!foVX<V8$kgO#jL"i O!yg$#!\vfiV fOw Uf\ !f!>jeł d{ dsV OdEX4g[P^ZP -F?89@<G> |I;H J3MU+> T `' 4`} Nc#n4]']\-0]+ -Xɗ^Z&Bݳahv*twr-*)LqԳx)qd(So&9n& lW%tlM%HkaO$kw#j1p#,iqkE"Hhf"g[^b9+]XUt,J9>@^BKIL- FAJ E]G2Iy?y'Q&-ru]9).dm/JfE4gd9bҙ=bȇ:ĤfY1&l'o[1zz0Cx.Uv",ft*frz*!qt%(pl'yo[g&dmxb&.l{^2%jZ%i_1b1Yfc b8@Y',$PK:9R!DZ=VDe]=^ :\ ?CXFM%TF-`gDDgGcidKfsMa5fsFԽm> Ӏtr3z͐:m%7#~߁4Q|MwF2xl|/wXf9/@ua- u[f,Ps]V+7pS*7nQ *>mN*'lbfv jo g_;+Vk;mdpEFk6{s*:y'5}e*o{q T5oEHE%d+WAm_@bY\i\g?^y|g _h)T3rcJ,||@WxDHZ{pzXbnvdl'jE_Vvr3WЀa L6R_L4괉WaM.x[H=CSC{l}I]>(`}D;4}9@s9||=!7[y$Z췃NcUm}JQ.r|ELzBJ0y{?H|xP;&E/t9Dr8D{p7CSn5Bml< q)x$tkrok'* f<G񼰭v>*ݻgR& ^tP<[$+s77W*o6V8m4Sl25Qpk17P jo* >v+~? {L'̠MF)o߶Z&4Da ٭Cc47ɗ,n1JI5FZ\kapc^h*8g#_ jP[©oC/tg8Nu<`v9vf6z!Vtp4syr3oAq3kq/f m._blT-)`Tk.-^VAip+[`hs!.{cҁ2C9 㙴2 ?A gqB ۮ£Z Ȭ+COp>Y3'IhŹE8YW۶XaSePͧ_hHjW;l(3ˬD n2ء6n0Zeo0SUk,ňk7+҄:3j,+nGi)'zf\)ue)&pe(l@e`(th$e3wBRnEcߠAe곸eپ@PаZGЭiaA3oՎi/0r(FsT;/\WDRvK^@ub @̷eS< Vg6"9f*Df(fr$l>ik&!lcj"j#g% l1c%Pb-#^[#^D#2^$E~^$_yc^~+tse#Ҹ3'þ IπLAT_Cռ;ۢ   (`$AF %JP2SBXR. Ll[.6^/ܑaQ*^b@&^`>haiĮ" f'c(`6fX'VvViV‰W=,`@G٩ķ"zo&պ72ۓ &d0n}5"N6~D=S6pJ#k7xP -eSF OU PW|!AͲXVZ{ oacTg b5 _AJ\eq}RURW9+S?]QҞNP"-P:n~͢_䆽ڢøY2z{oQ;7߳lzl>^9Ciw2]7F4E#[|@1 H KL0Nm~R nU]@WW_[-]λ\}ZrR yO TNpN@QMALe ʟ=值 y~ɃAE hGv޻.sx(MdI, |$853*(n2+27!fWY 6hx AXE tH :kLoPFON3N<PQѷRFL\I ›I; ;kHv8Hמ 츫Ba 0У  EޠU]pL_ EqOA76 ",4-j]33X4/d+J4 Fl : a(c= Aް2EEb֝FCV[Fi"qCM~En:GbڣlF2umED YPB/QA! c[Hޥ$x ( ֕!ݯPNy +ho>Sc 7;D2:'57 7)gM$28,o !J03>jd6Jozx7 s:it=Dc+>R?Yٜ?qs?-=;=*l>&(6?."C2>kԩ?=/䨴`ޚ IWw 7 lڞ {CisT 5L"^+{3 ~p 4"0*22a+u@J,4 8k' 6UҴw"@gyB]E&)-&! /ap2-12,F,)933*&$D)Xc.ek5/Xj0Q]2;q4"5ʢ6z7y#8YB׼889V6c5:}2z2/2M33vw -=ɓ}%;pK Cq܅Y+߯lPx3"%+ %+$'~.(<o6' MI&3\,"n-l[l.0gn1UK38f5#+W6!(6%)ڙ7E6Uu4w}>2g;/_f/dN4/ioO&Fǒѫ\ 2il.V}ށ`dE-hT(\d(`! (2*z v*4'(E'1 d/( e:'= .L)`(*sj+AÊ-^.[Q/Mж01O_03L5 nJ<5|J5r342l90UD-Hd,/mѾ~Ӥ/&  p!3qnS 3i` T!!+K A'f +##% +m& 3'l t@)&90P=' b%w()3 *k+` N+,MHq/G243G|)3zߟ3I37s]1\~.E;+ƫ 2ӭԿ ]I؜}cF V%T7BL8% a^G& k<% b&' .O'I d6K%Z C# $S1! 6d!}z${tJ}?Fg ; ܆8&W7s9;]: R8 6 X4 -! +@ 4,r)M'g *4 - .P j/0D+w$Z+#2-"E3C &*+0.5 _8 717:R?<!g>G1f@$JL?.g< 8 v7a:< ;# 9D 7j [5B Q3 / ,*u: -? 7/P 0 x1ߎ S4,r$-)l"/Nm"4` j'z*/p1;e5< ^ 9 8i9$;o>r A0CRJ@.Ph< 49 ߦ8ںf;u =,; ,9 ;7 6- F!3 l0 H UB.+p $/ {1 X3 `5  6 v8%-;#(.B"25!#6< <)wZ*/ S12A6 ; :N $80K:5=P)@#aCD40`DK@|i=" m949[<>E<: 8 5~6j C4k} R1 G3v 4% 'j5 7Y 8 Zy:9Ҍ ;x."0f"E3 7 +58**i+16 ' :P9<:?ACoc Fe1DzyKLAJj= NjQ::>B?Z=& ;i _9? 7HH =54 7 S 57\ 7 :?V[;֝^<=>Y@1!3|!C5 9-=* 1N6  ;];b!>>:BhFl#FK2EnLB lv?g?<;XN%?;+A'ǀXC'dtD24!76{ 8 8;q */)"2){6m{J>~B^EܠBy@}h==w?2UANAtA7pB[^fBRC}`&DɣF$RGaQIZJU7k 9?s n;Pv>3!)|%k2j6l< ?*, 1D  I:Ji$PI6-IFqMFXnCˑd@jְAʨDD'cDB".CkE)mG7}G0ڃhGt?HFNH`IKKw M  @N0?O;:y6 X;QL ==O I@K96`)Z(N2%7K5<q@F6 iK  J`&JR8 KbgNHgoE&!A|vCG@g;G@F]KFLܠMlx3LϔM9Ǔx*MJM߳VLOQzsQߜw:So`HU< > @LF  :?), 2ei8q";[!,C^F& JLp9&L^9MICNKpfHD9CIγDEDT(oIUSThaSJLcSp TMTwqUW9OZXDZ .n Zs@"AEAGI>)D1C2z%9-B@.mD& E \G9M$!M<>8zN  NOZUo|K /KL 6|M;4<9NX,#OO]-)^_]W[#[ƤI\.\=]u<]π^xX ^qmFk^EhGGKYyC(6^e25T,:<#A<C&6! B*E3L"~^P{3R nHKT*S JjSf5#R߷(N;R)(aT.#&CXJB[I!Sgn!tgBq!6G2>'N(\&].V[o*AGY/cZ3VY+8.Xï6 \|-tUb$g6)p(No'n7%Fk~$skJv#Yipn";ih"+]gdJ!z gd_ ef[!qeW"AdKMOoS~KB&Ht0V6;\"8K]:.]V+Z<0TI H8(GIVA+:T>}>k@_^ B^^©FeY]>I.\ѭ B÷ d:nl/rX0ys60 w6{-Uuq*qhc)];obr'Pm]'lY(&jT&iQH&Uh`N&pfJ,&fOWQTX:Pr$'ZV,mi6n6Dn u_z80}u''h/=_V(LĂX;X6ZVmX^Yvp]ڦ[8^CP~FjPGSsYxE>zrA>R}*i6<>z^5{bW0 xxiQ&.8sN,pL, p8I-mG-LlD#-~kA-6i?-8iUSoT%W\"gWN$!4ik`'xjA!ĀjsOgꟈE~f5/!v'1Eao:QjSYiq [gaN\©Qn,mSw^~J~`[IfVXEM}'3xcy==t4)v^<5xs=]7o<@7mX96l(86j8W70Lh[YZ` qdfF{ -`닡/S̙&*HJY7|ᑧ4, $=)8H٢CRlO}nMXC7xahpo9flG`-fptYcф{^Z䢹`L(e?Nxk2o4_Zn2-^n0 vqn,pYj@+k'i~+Ph&Fh*Ad{g)Jaf(_^ye'\}e'Zbd0~xf {5 U/鈩ޯ?-'{*Ɍ&'/eaf*T$1@dS6fObTNS]WO{\K3|_CĸO_7b+Q)f*ung(gi*h%Aca%da=%}d`%wa`%rH`-%mU`%iG[`j%d`oCƪ Dzڔ*)QJȄwI)l>n&˔ $kƎ!=6Nx,kN@HS<ÇpJX<QN*QhfRa*1U{*W&["DVR!T'SS ſp^7`Yln !V>TUÝ8R%Vo$P?QQXfR}s̲s۠8uɥħX0եlԎ~䃢+hgS4Kz 31A!-5@GObKdM&绯OoZZMe7[L6N ԸU&]S cQ >sPl*,]NʧUMc(JL*(@Kw˜8"K!r)W۹  ſL Ĉ P Hz|op%Zn`=?:C)#I:P^X1%>][A%cB}C%eĝEa Gt BG;8J NO^MDIM1М^=`;aB;{ pQ}Ii3*ĵ|H*a{߆ldPO8'J#]* :,& #2 s2% GK,]c/lh{1=4)' 6H 7P8w.>7Vp4}2v14o57/׸7a6o5 )EpbչIa٩{Q^ FJ 9)(\$O,rE)U $+O/(9)9'dO+cb-yo/y}1CXY3=?%5 26B<܌6;hl4~2l 0P-6Z$.Dl01Aj1בOiͽ4˶śr%f =ڟ`ނlQP 5G "Ib"S' 8(4)#% +&?Gw3&'`A%U*)f+~`-V.|/$z30uy2j8p]3-r333x1[Z.!,ǡq"K#zS"#Q&Td(R)T*uX*5ADz+].=P*J&) ¹;[6j'0_w-#Xx;0Un`J5%m-$=/($$#.#g+!F)!3`gB@n4iMr8=bvbrJ,E(]33X9< 5i!mV0%+&z'z(We )[.@I+@# '8'xL'`b& &'c.v 1 2` o1 3 57!a6A c%7 38 OK7 eD3 g. S,, R++ ŧ,Ӟ+ߍ(H9&%= 4b\(6UqNB!{$'S:3'<I&Hl&u(C._2x 2 \2 5  66 $96 2:p I9 f13 . +x -T ǃ,],m(L' +%vd|*hFe|vd) 0:#h&^&8v)?v'&'1& &h g'-[2 ^3v b4B W67/9M "!;[o1T< I : gB4, J/} + R4- Qɠ-'׸,l)&K8'N%r$W94wHe'K"%B'* xK.R & R&!!&#v8&! Q').3r 4 #5 p.7(T86;T M=cY/?X I; h[4 |/ ,,! d.p Q. "Z,Q)F#'%}$qU Rm!=P$G']) Pe-. / 2#&"&a#&":,'Z.54]M 4 G7ip8i:8=V@$/4@ J; ic55 0v :-l /2 S/. d,I)9'&3$1%#!'#) ^O,"8 /} h23 I4 6#H&#`&$q&7%%#|'R.41 5 8:w)='\@;B?0@; K< j6 1 -o R0 v/ ,*/([&^) * K-K . 1 4 >7\ k9bFkZ<#&: &O&f!&B'1%'N%&3'Y. D4K8O  :< = \AC NB2A@hM#< lT7 Ȍ1 0.] 2 ׁ1 -+S@ %{,( _0P z1 &2n] nm3ݡ 6sF _M8̬.;RÞ> @eC.(%(%)%*I%Z(d'/.4Pn9= @Tf D2Cj"B13As9M> mj6 2< ˯D1 $5 3+ )i0s +0.E 5 7 88ߏ 9Go T:҂;E?{{AO*DFH*%+%,%(+$<)&Bq B/ ^4i8> B DC>$C5UBgN@% nY8 y4g944 4/X& /n .y;9tr>|@@;zD?l]JAXp=Ce'FHlH=3tJjTDL")N,aX$i,h$Y-bo#.#u-D% ~.a43z9#)= Al 1D ^C$DQ6AiN? n;P6&d08 wT:7;A9MFvHMѥHv@HnKGTtJI.JҨ2CLMBNPيQ߂CSz/#0C""b35"1 %$ j.%_24, ;.YA6#@l ARpDy!D)@5Dg LCNFmYBgB(B}CjDe1F Q GP6 OsOA*O|):P`kQ珯TWOBT~oVu]W}mB]WX5!5*"&6h!8!i5<$+ .a64,={<;N=a3K<& >;CGM2H.IDJDfJ *Iې$ JR%NK VNQ!PQ1O[UsZ&XX:-YۄwZz4[ p\c[^"[AMb|= q: ;!s:#=,!EF2RO:{J12E1#=5. `>?5H#|-L&8DhP)+`Pi/PC4&bOܿ1޷S* Yk"[]$] ~fn Pdpc{.a`r1c`l*U`\dQ7`__Z,_T> ^N_fMJG0A-c 8?"L'6aX/]u*\}5Z4W eM&/?BMAZTȼB4zSET&?iA[64b,i)q+~' o7t)%qll.#jBc Mf^ f$Z!heS" cMf"cI%"'cE"PbA!c%ZtX*TPe4O^HEl',p3tC u x6manY5ͫY9$ET85O.QS}UԩUqUCvWLUM[MaDAjq>:gqb-w[/wWu-WsJS*3nN"(-iJ(VhHk(wgD'fA'6fg?&#f):%fe5%efaeW p`I] "^h >[u]oj{Oj ||h㘂sMx>,i q#P="qi6I?Ge#O*PAdl@SRb݊Y&|FYeCg`NjDoZGSetMA 2~TC99E}:>54ihv3@h; ulQ? ǀS G Y?%’'r( ZP"ᄔ!B5RW5AQ{MHьx4iO~prXk9jk#cb'kK[s,q@Thw?ZPv:KaYs7G p26ICkX4Aj3T@Oh2g?g%1'>f,0U=e/rHcX Q^_~V1Vם.TG*]4;a-fS)g(~pe(bud`&m'b&hb&xe2b:%`ma$^`[$p\]_$1Y_Z$Wx_$( ʉM _. rS:(IS˵HI"Io') W yT 7_3HdN[NvOK欷uS5FXJTW>geS3Y(%]$Eg^v"VF]!ɋ,![-! #Z;!~Z!zZ!uXY!p&Y!l %Z-!g"Zl!d6Z!gd()iP箜r㽧ueڬj7'_OBM zbަf  0e Q5Lkc*IE>EcJ8lOE84R1"pOG*mN # WR T\qUvU-T ;RLQvSR ORtR{.hS"waSV򺌀C[i 3so?x.jY&.d_ʍ |rUTͷ0x:(A}*n9Ff'dI'qL'/M! GKaGG(K2 OP 5R=KPˤTNxaM#cK$JJc7KX4M#ɆFrM&юx'\ 叡g ]ԵP#3O ݬ1ɹ2!^UOzucFة *, 9:Cx3.?/^wB4ErE H޽|D7j? SBװYBWM>K }Jf NgInVHFStOGkٟ"G4F|FYcBە #KcFoͩ x}:.ң ${hw-U X:c$ !gSg0.u5_WU8RӀ:F=KAk?; ;=n7L9ۉ@",ΜDDZDt]CqB F6OB wBBB恕roXJϋƉsƤ 5R K9?}mhXYn!vH H3t' F' A(* yZP,K iv- a 2 ,̸6 5 /1:9Y*_ .g6!:ѩ=L}։", k0hCj32S0"X5,#)(v((bJs,z0#[3Bs6'{"&5;4|*"4ێZ|5ˢ6̌ ܲvё&v w-۟<`Kv E<$G r#L`#8 +1[ *I" c%1#|)# ,/0E._ .V-+(%1t(SB,Sx/O<0IY/R²:J,'-o6mڰ wBlZhCH&?By8!.-$(Y p\#C @$! 2.# 9!VOM& ya2'_|s+nڋ-I/AR1'I/3Q*NM'>.w")F9u,#,#]%8)=g*P[7nƟ{p(,#[ragD0w#R1`&e& pI$#& +$ $3" ?' ^ ZO"4 b#[jwr&:S':)6$+2r*'?i%?# M$>6c*$!": #WI :EfS2$8sRT 7m{]'& c z"%$T-8"'  5 X#BGRp ep #3x!.!#w%Å%؀&$K$LW#rE"X!j "+((k#I M 0{´{z%sA af9Gi (MJ -.7#$6""d &L!c),BM71 CEWQD3ig|zZ& gڮ  _!T !ci &8mT\, &'"$@Wsr+5BE9UxqZ[QA>5 ` [,@OR "rCtP.x^'- [,ZTw4,4EySXkj~UgcxƝ ~M[nECCW3oZ{S% $vȲ>YѪ̬ھJ|xlM2Y TL~n^q U<|q !P;({409cHyWm} WqTа}-ɛ~Wx7{|{) %& & V*p))))}) u* J+ ,j 7. 0+ ~!1 d'2" B42j L1' ;d.Mx1) l%+%UU V&d-< -RL 7N i6H6)N)Te)))bd7*W +Y B,D (.G a0 1 ]2 %3 34,~ K3N d/g)h &)#"mPQL3D`:z hg ) i<1*Q<"t))~))g)$ <+ + ,/ @2/ 3 D4 $66 2e6X I5p if@/vN)C $Cv#jǂ"`6XMeqaO B xrA70v ("&.I)^e) ~)j)I`) , L M, |-1l 3 t5 6 !8B 0190 $H6 Cg|.(h$"F!t(\N7G  85{u 9$#='YYn'ps)x#)TU)JHz)/( -F -es // b3S %5pQ68Q:v.; I6 h.h( #n![+ }u4S- {]wMz8 WE#7(?(Kц k+A6)LW)(r)"((&- .7 1 5\ 8 V8<;P= /5; JZ5 j*.B(!#=غ1#C; +du(OaH%mP@%21M>z*y$t)ֽ*t ". , 82,|)t("((R(, g /f 4A  .8n :- ?=g $: 38 VMC4 m- ['&"6#7!n% /.M 2~ 3h 3 R2 N35⺈ :֮ >G@JcAA־ݠBl!{C ȋ˓FQ}I$JW=O֨rO^OBO=-NӄPNwKE8QimQf}~iR_RTZ7(TKI_-F<R@k;>h#Gy*NM2H)UB&9H+ )* ]4H>Y*E?#2@GD'(]Hi+|G0/G-@K'@jOu x۠T\v6XdQw\l[YwyWn(U'g@wU`60VRXWRp)YXLD>YHVYXGV*SOFRJy"+NMY#]?[^Y# zTW-RF%=Fr95E7$BEȧ7&9bJvn:VL>sKp@˒K\b5ac4[Eb1lURb.Nc,oc3l l Xky!jhr\4pyCuxmz8{My wq#\i 4଩c3@"_TJGӓ.^eJ]cOxUݛZbKfsV=E%k?7 ^x+=5 v >55^Unj<2cj(5u+ jh.&g_,t&Cf.*f&Fe)&\yd(;&d '*'2[cf&'Mb]t StLu'Uuz(v{}AWb?T *~z4,yBz"2f8uI@Ar9lEϧ]F0h[ɒpG#&11IC=r\8Gri[x:I]QuR7Mz0[?sa3n߀f+ht'i)Xagf'.\Wd3%Uia$Q4_%N^% K^R%NI]%G\&_FM[&YD[7ƃډ8Í:6; ɠ(m"Z¶8 t e|݅o' 1m;8@^!MRH.Z]vM(P–*JZDݰFS73Y*]x$E_$ z^"s\p!jZk!5e:Y!#b?Y!_%FYq \DXY7 YodY WfX TkXsHqn嬎_{݈0 ݥ9)n6A9«[MT<kL:}е -r)/c[18?JD?IGGoJB^J9`YHw/V$P%TJ-*U2ZTbʼn2lSkwR}!QytQtRRF1oSRjSSwf_THbe>T)%꓈=ⵙ$T^ۨޭ"^ 9f7ǹB\kJ{8)0`Թu+G5&)=8@CN4fG&4hJ+ṵD%WC ݫJDDM 5M2GM],ULT^FJ$JBKCL}M 3yMnuNi킅luO v Rj͠`~SୄqF+QiP Ȫ'k  Oǝ&_5va8'6=z$ǩaA$D#XDDj:Oʌ9BB ZH ΰXJE H0{Go*yF3阮WEf:EVF rG<-aHeJՋf㱎oማB.ΰxi-|#`‘-旔Ɵ)}MʏAp^I״zA (Yb0&B06QY9ؓ=0?N@WM98 0/ D֟4kE<~ C[CBK aAs v/AB AߝA^e@FA乌Б;' E 仕)ulzU pFs\ҡadصP9B' 79s+;u'2s.*9,/QG/#z2XQ5R雼6o{.`ٯ%})~q3}8:[;`:5: :; m!<63^=SU&߂KA޳d<wb.Q5@=-  K U&!mL;#vWs)%8֘(,"xh)]B-Fy;6(x/A3. e4]ūU345 6J3ބ~>NGb‡fmĴVѮUu.` M`z = k,=$# ! j XiGM#%F[N`KjN/ %])^Fk r]#5 =~"A|d)xQ-Ϙ.C-.h  ֫ в|ﶭ Ł Jrζ ׼q\4LrF 6'[/ #@ m (l"-KFy]sc55{BU$nf(?Hʊ&+sV"[6 8 ,#Dpgx!C/%؍_(Ue(/2lz#Q yXrڎWV39i?M&C Cm_T A!TTG*v *: M8%K<ab!pzt&Q\(bH)@P0) a'5[w!=& x"[XxU!ty{ kYڱu})Vjw:!m;h"*D!o!I j(3?7- 72 _rJ5u_9qd^ z!|Ժ#L"͂!_v:`sw>Lq # -L3 \+|ƸCn t"gKI!.L^k | !p<;\2" g)U2 [k3\ƁӬLvָXz1\]i4@H'I  1R&qM~"Nr*}u3xuM>MP(Ad4%uΎASKPf-X._[mUc O! t6 WΫ 1ؚھonMQU6 ?PuJSkF}w!=y+IJ3<@<?RllefxAY U\,-9E?QZF_..Nd Z8 vCKYoԵ\QL!٠c@=Fk% #*] M/ !{Xv,Q 7 M4 &B !U; !g |W  ]n}g' y u x7zU(zVqKc{'}'1='R W & l b% % ^%- >%' 3' C) +w r8+ (, s6,<M-*^e'%o!V=×;.AضT޻h |t 3A |Ol9 L Gl Md|(I''.I'- c && q% % 2X&) 7) +b i- w- u'8. 4. aK, *e;)~?%] ė.y{?  aaKt"Q<f)?f(V('b' y 3&W < & e' * ]- h. / ,%0 360 J/3 dd+$$b3&҅ܵf9'E dbY\9{xA3Iy B*M )90)(v' x&  3'2 ) , T/P 0 71 "2> 13f H1 e)o#7_ٶtwƝt"^2x ] #0l9!D   v!0 + j=* )F1((q't ' 9*X.^1 H3 4] 3 k5+ "/6D H1g/((!SYXhxD R5 fUB / @I D @:p!hj!)* $+ ;*.?5(' (Y a ,? 03 5 E7M ]9U X.e7 qIt02i'M ['VQ  6 0 l >`9yjs[F8 !b!2&v ʿ^&((([)* LN+)]`+u / F4# T 7D!8:H]9' 004 Jc.j$3sSx d@Cl ( Mc sj;f|!{"v N%- *yn /!D&\' q|()M* +f - Y1"7M : kJ;.: M!|6 1x2 mJ,{k" =YϪ< (eE$H r!B'u"܎!҉!aG(u, 4.m :3ߨ2 7*$)&1%!b% b'U~ (!*9G-;1z8xb=( [$ 3R 3/Kx*l t?JNWG&{r<2z>PF$ڗ'P(ԇU#sΌ>%4& aq+ 2婞 \7X8;ړ?1z/zO"t,fj#&% H&x|(-,E}s1Z*7Ij<*y9 5: $1 4$-/K)l ]T d +" P$ v# L")ٮ+f /r˜ .Ž *.= . C0Ϋz "772<+P@jZCEHE<9I5G0B"+o#$%z%@*M(31)%870 Z 8 S3D "F/ _3, I.& g,,{u,(.C'/W)10c31х p3ϋ 2u,2 4J8 X: a *:U d:7LFBRW=70 5'';-0P731S). L/( 4/064 Dl6ߣ[_7~R7 6љ8k 9B(Ť<$Uٚ@J&qA7_<jEΜ9lEܑ?)FqEF!vH)HjONJbA6K\MVLQNTP?Pf N`TK%FC@mH"[Mm)G?2E!*^4R4dm?(b; ?=>V#X?&u?9U*R=@*B##GiB8'KNϓpQzpQ\}PsO'kMcLLZNSONQI7QE^R`A^Kf]eXqZ t V QT[3 ]i3[~RM_B8 11!@<26B6gP!D9mC=D9I@0PU'ΊV]&t6^^Ch\aXWV OET7He9RCs6uS@~SE=UsSi;GmSw8eSp<nRm+ hjyh-ze$2pZ:.hpdcLZa^VUTh$N45'J2?PH1JEKpfhDMIE+FBUN2w=X#gd3S#`[*YkfUW%(fL#cD `=\^9RY+7:U35@aUt5;uJU4DU3-U1@! UwTw/wv0vS\ultpc:porqւrb3Wil Bc7,ħ]08ZF@协ZxaCY|GrR P`0HG\/RrBjbC<:;j:4k67/{g-(e'"d'~!V`'! ['4"[q&#'Z&X$3Z&%FY%&YSYqxyy\yyZyz+xHyn݄ƒ[+ ^yTv| hwt$"s/0o`9OdI,LK,ih+5FLdW*Ax`.(;]$4Y\#0 0Z#0;ZG#/IY#/YYo#/mY#/uXyTz z|$}Dcۯi׎20]KՐM ]9{+)}փ>G6>l|U@d}q+BXsyJIt=QUeCΠiCk>ZeB6S>*®H"l K;LdL:K9JJxIYu Ip JmKui'L,e`BMIaiNe~f㙄ߪ2G9V,WY>k"Za!eʯVψ,9 sϸC Zֲ#B}" 42ǫ;q:0/cX>0HRC (/#);@!:lB/uDG[E{E tDь}C݈hCcc̵0cJ8 ?ЮD@ Xb@ (jz?4 p>4ҕm=;/=5?jLJ@Bk9 Bw뫦 6 ѱ(*fҠbSz<}HKiǛVҺ<5Μ <(d˪/.,+0T/ӝ}3>A7 Ӗ/ {D%-Ұކ)&Ϩ1<¸9N!918R4V8e 9 V~ 98 9d -9/:̅lD5 /ْΐ~s=«K| ɔrN^ldʇYAGA,B1fZ` MR jjז(! MiMC% pߛt($⺚, S),s9#Ӿ%7< #w%`.T01=a2 022r 4 ^o4 <6zേۍ  V ī <"j ֗_o|\GI896߸X*YL#QVHnX(nZ:%_b#sV0<e _<  ٲ"2~)"yȇ;+a+-2m. R/SzӔ{1 119u+̸ѯo4Z8GP7QR!&%2@ A fBB ;3fe@ڪ# yeG{*UtVKcݶcT$Hς%/ˋ&Ţe'>{qћXe Ѵ? $l"|WGBS0 "l d>x#N7CF -mb vt7}pƘtkMMBbDUpg"Z=FW>ߘxs*- !Ͽ@<ɔ61 @m-RJ; 'E*| l0w (eM9>$t 4@G}`Ysn؍"%[&]#*e*Rkgs dOEY-+C;0 :8 bn!cΧ +pjMRO6M :/=jKc;* #<<(Qx/3k`7>yIWClA{/jo˜w12 O3"Kz `\@ khX<_ [|r_6B'+ H752Ilfa#s-X6. HFY\9;pm R<" "gɩ ch M\0. L,(C -qhjt,ɿDgDh UoSb8It PZ ,I ] 6!/(G( X( Y?% "Q c- V(7 2$I jA^W wPn |~}xEJ"_k"v Hf+k4s0<%A9ek 谔7ƶr'.~&٧dRH#,a R"{m hvo 4   j .pU"7z.N:_`cL2Y_G=q> 5[  ^e [3 Ф Q Us]S|5U ?>Xz>BMC. =π Vh9 0qSٿ ZZ>5$ E f"Jj6e#N0U<M{uathVkkӴtKF%>**I[];as 3 k& G %s $  #\ ! o !  O# $ &{(e* '+6&HN$kKf%"a Q\dA  ܹ $"Z cPU[&c)\e1gB'w B K& P % * M$ r"5 &!  R ! ?$s & G(Q*!~(F){5(L&ie$Ѐn!Y_˰{%zO b 0"(1 M471^_He- a(V~' Q '& ? $%A  # !  5#5 %% (+ \W* *&Q+@ 3+1K{)GKd&^c!w%i#<jҽlD m߸ @ 7_|B v7!Qp0* k3g * (' F C&  c$ b"T ! 4$ ' %* X, , $H, 2g- zI,#e &惃Jj&C) # }   k mA; CDr W| wp^mG)T *7 x_)' : c&p $| # e &A )f ,( +.h []/ !0 014 Ga.TjvfY#`3+^yg8 ȠdM,%];}`g f\Y{pOG<[ ($2(r) E*E' w % , % ' . ,/ y1f 2d 3 -4 kH+g EjY&g-q$ٝ)) Tc ) e.3{uyuHLGo%&';( *;g' 0( *}{ 0/d] 2 5I />6 45 /C1W{I'}il~ KX]l 6 86E;oa~h_w%`Fۺ$X"%##i%q')( * )-y 2o 6& 88+R7: L10,=J5$6?jn" ߩ2_0F[r \?/ YiF(pl;X[fQL&q Y-$._!+y"'#q0#%'*I*?{/C =`5B:" 49 2 #Y+2&`JujsBipXYv G5  j2w76vџvƱ4G&]#.m+D wg1+s 674&K0,.,q",&# b%E("?,3;9: \ R5 -$>'m4E |Jd7jFiH+U̴J%;!r!AŸf#6!r' /ۓ _5ԉ 9n@=uBQ"?pJgA^MDW>uFR#H[ThYn WP S 0N I  H<mL!PC[: -Du!,j0(51hσ895ǖ S5"Ip6:_%Ì}6ڳJ&֥8rN ȹ>q|͍Bǝk3F^GH1 I:zsPHbnFg (E/_~DlT3 F'NEH{JJ F!T>K%BfKi&g$fb(ch> _PY[f[ \&QPRIA$:>ֵ0(Ȑ,R3ۺA+L2; 1#K;Ѭq4 h;c7<`/4e*@Ώ,kG܇*%ǣM|2RuqTgR$R^PShNMv MF\KY= J7K4`L2gMP1YMn#nEmlkjj%j_ec1^ 3\ZHזVhNS ݶH-\D/7oCCF1={:Fa=[H~>*B^Fr:t,Od1?VXT(f?]L!5_adC-^u?cX<aS8c Pv0{NF)N=*;oN+bN, QO+>O`Zqpqpp"p/ov_o,k j{myҖkg3obb t ]E$XX-q1UhA 9WU]xt[i@9_o1/9f('dq&>$`@&$PZYm)2$bS'!O&h sN&K!fN&"YN%$GOH&]%nBO9rs sMsWs|psmscvyzQǩz -HwP tU o ,l/*)'i >F2!zDfZ 9lbin@^]*HPX#NB>SzU4N_t[(}J`&E'[#~?gY$"t:| U!5SF!.P1",NM!p+M6O!+W-O",#P"#,P$wttbu<xv$w6/{oFۄ͋}2#ZĺVdڥ1X: c& "w=}18/3fbvO9_x j;8SJtC?Ep4I8k|N,afR#cjV<^U^WS)[RJPN/ObHMDHM BN(AN@#N<>oOvvx{Iܣ$nӹ @ģr3C3[3Po @jE~ v!brk20|R솑H)8Oi=zF:*<5!Ca/{$G*%tTеJ"MJxLo KRLiKJF`cFI^]H}kZOCIWAIUUJRKPL?xx|ܕ+dY i "o4/=5*uL{ Kc+_O44(/2A\@5Z>6Gd5:g8W9/z7':O@~CrJDF4D\(OC~qByBB)sIAbnZrBj$0DCeE[b1G@&_)YHy\}ݒTdž6TRŖ= L԰sw0MO9z9Ȁ!Hcke S:>2O+X-u7S1+M^5+gN8#c2Ϯb1Iج9T D;СV=dY=;:}m9t;}T=0yt?'u*@q>BTo}i!V2vHf~>Hɩ̪1ΡXO*ױ!Gpi(L]rD_+$&-W&2-+ݺW/ |2]T1C׾S&-/s'b /8P4nQ6}6 m5 4 x4S5!71o9ln;Fb٭P\w'Р• F±D=҉$Ht{\až&Mtǖ5R mbI,"ɜO%Qv) д$,zN찎$Z -+'+sC%i.l[..aZk/ l./ >0 ܙZ1 n2ڐd4=7:eK eS  aa_{C\hLz~q.f_Rȴ@*'3 ҋ$ uJ\ oq U  &A Ff"ZU =]"I%&R(LϮZ*@, +"[- 3/dބFWwcER Տa|iȢVmC{|1%ACA$(ڟzJ a 4 Di+=qc{H+L@UЭ ։]a M1s  &yj!sA"ܻw$5}e&hЮO(לIONrđ:tn5 < ̑9Q̻iUӐB 9 06"%(vnO1~ 0T<) b4\`kb[myBBrL?6 BvmӖfʋS+ILt97 ܨ꯹LiOъgh%Q>q,r$O dS=}:^4} Ϲ ?ՙ 40=++Z }hwh6_f !1< ʵGĦb>6T9H̿+hNMF76"2 wzE=i~.X+)E ~M_jETRt ~:4GV7ysj~y=` DF e% P$^I `c ,ޣ9X贸LW@w9lEPO30mr{> Tw/ Ljcgf"\s-X,6B$GX+ \lW0etJ8{B z> HjfmC$K28wZy< 6II~ѽ ~BY=0 h" ac ' n s , <@  EkTm `'lni23C`cS=f |} B 7 hmg+Ku'I8,=8;ǒI i$ZJ(0 ^cGDgF%pb v.| j&G4VD.V*]7hoPYS^xyw~@J& 'ED,;Fl=ͧS%χ~ZA% & f)JO V{Gb`v('5{]EdJY )Yk ǃY.ֲa b?*  "CJ ꨒƣɩ < sjOܚ7 mk$PZ.ataJQ 5vQ-zf8M IK5\Dn+׆Jǝo&$}2$I8!i% a &M m %@  _$$ (ri$(-2(  JI&v\zdL#y`ñ _GsѷHۿ-br>F| E*.:B N.A(9( u)S;'Y k& ! 2$ Y o!! Y" \$ '5 ;)H s* Y"*_1W+Hi).A)$ hg#8 7ێQX_ʉ~1*r!&T""#"&{(/ (Ij) <, x1(M4[ 5n f,L0p%II^Kh- bdZy̍%9}h.* GnB ~&p Ͼw {÷$3H1!_2g/Z] 3,t!&?"!E#nz%_' r, 20*5" M 7 -th!%2IZh6G0^We]t q9\0R 66hܿScԾqU6BɧZ HQ [I,%< v,<9yS5/+{!$"#0 )P05 / *$#3YIg Ef^Wbڟ _@>  ߛ{( <o ('  ̢F] ,c<2_"j*̊n B!1w~ 25G*E EAS<U6/*B &,.&!., O % lW#)2C`f|`n ԟ q8Ќ ܿ# [.ʧP[u:V!٪5$,%&R2(V /z <4fo L8|ew(j;T R N]JXE2=?Xi87` /# #lu 3| ; -M%="+W"gAUr"!.*$,Ʀ&$N踠(=l̇+ .> 3/= (1 ,4[' 6C5w yv4} m4zr M3fZ 8\$&[>OR,*6%t-Lw&o027*CG3E.c32P24~2/8h~)n?8"EvJn`Mc9L0WFK&M1IREAF<{E+ DS%#F"aH!m($J"BKFj j9i ge0c+b\FY*VZR2τN))G FA-%z>,/z"=@4Aj[N4:Du50}^?<>m+7TF_.кpMSv&@SEj7ZmA*U>9Q>6M/o^K$LeK<LuSL~}M DMMm|;lCll`k'ji0#fLYdΚdǷc=_Z!=U~C2Q-((N;X0&O4U3vOvnb7f{J@WBN/JE8S=68VN+*_I%&]&&U&%@OE$U"LL@rKFL?L6LL]Lo;nTnSn+n;un[p!qeqƣqBnJn =k6Jg@c$!-Mab7* qL_,Q12e\th%80XzW ^AKSGQ>OM=1K6R'(FUj!]C.T>Qa8N%2MM,/*JHMI!h+J.#N-Jt$O KpOppݏquխvxv ˠ}?(^Jǂ%9|2i2~\h~>WG{E5"xg!!Zmdu#3'_oID1)Wqc3RMnqP:>AcjA4aftF(cJd aIM\|N UKPILiHH]AG~^Gm+<D;MF:GKU9H>9VpIpqrܯuVxzt{?fՅ2 :, ƊVKGqf~_w⋒ lÈEZ-(,KˀP@0GMa,2tAcz17E:P+5? "W}NBr!{DuEkn<@Cwf~>C bV^B?^A^X @U9yBfRACwOmEM;F>ޡtt=wz<OՂ|"op ݎ'aF CAeU Řq!]J{XI=$s%:P9-6U];0W/Xw.])eH/<${S7Tʓ3:G;k;P]:|:w:r9kk9gu;5c>.`@<]_BEܱx{L*9}ˁ-pɑ} Sp4@sw"7S<SKwG Y}cWM? 7Ơ"8(3(z%X+$w*& 't,/A`2 1 x3 Վ$2 2 .1_ ~1?{4f.w866rs48no;E{)*}ŀ$L͡ ڠ%E4@ r`gu6L|ڧh7TU >)& &02zv/"Q{$Zs#QR!G}辕O $#3*HL,J,+! + >+0 ډyW, "/_1 ؀k4?ٸ}0֪PуjЈʚkU9CEr$S )mӱ0i[vFp%.|@Y E'TaKP~Ĝm EcOP &emNWQ!//*!#3ëZ#B$#l:U$C&; ( }~* ZX?- ؾ~s %S ̵} nKN ˒NrWW`ܹ$tLPa8$ i dU 1EuC;h֊" Ѳ{ Յ&/{Dz:0Z4+dSc!m;#ќ&sӯR D  ~㤪zGr*$y"WdP<"> g*s 1cgֿv׌q[ڂ?a%dmSq" Qܬ`ܺ8 6^B{% ؞.JL8'3ָ)rγGKÊ/%ڹ|C!~Ҫ TSU [r,?+_- ry?dPY=VӪ+jg'2/T,c߽F:^`a ,_$ݥɓv5f*{R9Dw- ҭ!]Fȹuƒ 9F$sJ΢C2MS m|fcMԧ:Kٶb'UA<;C M_ ) o;m>Yw![=Gx(+1` "C }ĴпJ٢1,p {_ [e Jt3< .hrK' owPOoHm3)@+_[ sWUh(v U"? u L0/ 'e /, m N^ )tEu ߾*P+k&GXk-}MD1 uf[WQ>K > xdk kc )8  _z(h  5G~ J[ lb "]煆 LNМ v Hqo. @0$P% }|k{?:9 ~줤SN4b ĤA %Xۦf:x!? :='*%^[ qDq#<3ZA"fRdI{-ʐf0ЩH :'Q35j'G@W[c$z ^gčlוEv(e ;@A HW-`  e"Y^1B?PNI c`5v̍5ΤI mڑ{ 'D(@Rvl e ,ǃ €zZTۗ9#"E'JAFXZ C n ]YGw;&aq4ECSmf8z0 ʐ\8ΧBϤA}>H&(s#'ʤj ,lJ؇F&/Fh  h]q\ -WO3&gO*eN6A?[F'aX"i<!Tyv5ҪS -0''M'% & $ ! "# u !d  [*H1g -@:uFNbmff~?X] Y1ԉos!*?O!ETc0$- =')&% 8 H%. W#i > _  n$cg E cK*}G8_MlneH~jeØg  ֛)<#pi@)h)'xZY2-C*$ ') 'CF&# q $  " RI'=  \@!'g!u6n x$L}dI~P+N }C\?F9MGP4+9( {Q (@ )8 O'% M $* !K \-yf j x Nk"4 #U%?#K4"J!$qDdD~ 1sRP J_#w2|y''Z5p& 9;&b'( 7' % # 0 2 X > a L"Q $, % #B%1%wH$DdM: mz{0  R'U 7P0&S!cZu ܔ L$$&:O' (v ', l%T ; W"  i"1 $ k&e ( 5 P(f0 )F#ed2ydm B ,Eu}[q  W8Rl+q $2"!|" #.&r'} C8( %_ 4# & %Z -' u+* &#,  -h-')HSe AZãSP 5o{>_-*~J % . 3T 2?,>z" ) - k) %["!4"f%?5k& !( %h ( +~B. S0X(a0gH?en MX GO*w$il*U=&(- aѯfTGA踏c P52/K) ""?.#p@\&2 K(F+)  /W< 2 '!J19Hi dO`K&/fpg Q:)PB ) Ђ0 fȂ %18/MO s֕n@{\(=W94.MO'O !|!A?%y,,a *t2 6(F6#~4VGE7)b"}rGX9^Ug*;ک,wՠhE) ÄXjMʭm-^?l d#uw+>LyIE4@RZ;wb5/-R%#!g!I)_G(U v!f_1 6@>\A ݧ\u T ϓF˚,Ȍj<a{wjek¦Hlk]؎I yW &m2 .c "5CZu W T P(=JDiA=yt6K/+\/ `vh{p+ 9y< SM lºğ C;vlN!W #%P 5+ 7m,k Ii,x? 4,m[ 5k-cZ+uY |0P(E6vHuQ: ]V\Z#WT6QUL_8%Fm :+-'IE B Z@Ζ # 4!n\J #Ted#l$kv,'-},i041>:8[~H :fqn :e 8^ 88 V M6I <6tA F6:: 25>1-?qb `_]{cZWShO D>I3H)| ȹ$H P dk(".(YO%B+ Z)^o)͘,~w+%*0'&"6|' -=p7Ag}F ^FR5~ETG=B=z@T4]Ra>,R<~'c:#3>U#?TCsg^ f}ecjMaxP_K\fY4ԒT(OȡK0DE@{mFu[,KE1P$NJDsP?+BO8sDL +X5FI"(H_E@p:;/$>oB%Ej" ii?Dh[dE2a ɓ_ ä_#[WtWR NR'WKm#!kH6* yIOA-VoJxh1aEŀ8T0@TAPE9$H;L4njL,b,gRc%'(4R$(&NM2 RKFd J. HM$BK7->+{B#y,DBl"G4k8ޏjjPkB l42kβjjRjz jEhNf!GOci_d] ,.x[w3#4j YK+_VbB1RSz8GPr>2;KfD.H$I'$EoL'6BNVE=K4qHFR,F;%DTB)@JqChEz?:FDl[m8o՛pqq̽p7s\u/}y4*z(WSx4v8NuuWzsC  vQpTQfm/ XhC*Pj^`,aGhx2>*^1{{1K'z "5bx!8tu׸:ws<;kfl;4"d:fa*9\]9&QU8#Q 7N:$Ki<\I>ztsttu5{<c\¨1-O;42#{.shbU|Q C_*4P 5 % //U&)Yo8$|&#͎1,}ubÉ/&.0 1 0 z1' "u1 mq0 j0 Je718cb}4~z]27\:(ַuu/vͺ{ 8L˜;^6R2q %zu[Hd:>Wnf[F 0sO4#0. ; }Py!/m)E.}ŢW# ؞5*%z*&gm'̌' G' )'k }' x) uf, qv/m2dv^Ҝx<Pz ̏ M kk ۣ :k*^Mt{!Tba,M6r"I .)! JIjU< U ~T( O'ԧBy#d䘅 p! )rC$ 0$( ,~+^dxjѵy}˶ d ǐ K3 ѐ⢷-ɤR7zݧ0fѨS?&`]dz? µ"$ L}FOɻf)_< p92Խ6] v jpW;//"zioNL4R! JoD#ӶyѦ|gyȰ&,?R  F4l1gYPEP0˻& FmEn ?V{bȵƽ}NFQ(&& ~  1Wv^&?8SP_'|QQ ʬ~ ŵ 3  W X xq-K`YJ7U`$m*΢Ѯ;]ϛzgrq1 ʃ"ϓAvEʕV :2u:xVͩ͜ee{h:C7~䭹rS_8_#K{8J&5U$ UR"Տ[4#ֻ9W"r [Qݽ>N؜qڸ#O(@+lʮ ^ż . C9K կgѧK{o }w.ȟ^6I4,a[$&j ASRRp" 8kUn ܉k6?: lSMM!?~š4 Fbהu'.Ŗ avFl"/r'K+}M DkfI<  '=yXWp$ˬHƧTTCJ51 Jݜg!G6șƳ $o<I.F T dk$i 2R2'XEX+uZflAQsaj~'!% )J=FMD1me<Y\}7? 0J'#}1DOf l!oV\2B@yR`f5}K,ӭOP6t!*>$cOå+a,PEGo^I'6;' onl,*}vd O c"bX^1B? O<Taoraى5:ɟ!3 wR2 "/(2# Ω\Jo6VZd) %o $`p*$o\V2@?OJarwىK*@ǜ5#۱jRZM Z#W lcup ͊mӔH& g2 gZ`a ,KI*OYF(sca4BCzS2Ld8vˌe?ʠ!!< Ņ Y .'$ %{ . $ #A  !Jfv\0v*l" .x(0/& 9$c  oEZ' 3#!_!!I)$t% $' $ ! K] !%7 %1-'"fT^FzocszR`¥/eZճZ2/%=>50&Xҍ B$1&F-R(6"!Qk#<r$ 'G $P i d  "} %$ '3!F/gF_-_yvK&eݝh1\6=+Գݦ.~\ ֛'m#5O:73.Kc&t!U# & [$ f & X(X>L FV22Di6\-\qN =C-8x("ɖ\6՛|Ҡ4 F-'Ѱ<jB.sM ?bH1F1=BL?ga93E+V,# l6"&)i V 8 -!T0H@zWsGmts0|a^2    lj H}x4DMJ7GbC 2?3v8v2(UAM V$ eqg;qh .(j%;b)RBR+jEpĐjB&%=Vэ[Pַ+6P;/$D ʇKwx$iUh_ 0hQTDO?LHC?9 0De1%B 6mmUS'[}N_s$':C4 $KK d+7|A ܮ O 5 2D̀=ߕߌzo!C#{vH kjR! `!7[g.UKt"CP) US{TQNJF~#@79+s0 w: 8ϑ  ? +% 0[n]BĨ]Qo;_r;RpUC:j 숋d$ G܇)(x m,j Cc-s]9 R^-R F$,I* PK-;> `U.9*A3&Z,+) R'/!\ZJX:V ,ROl1JڎEEؗ>5Q) =~Qb(L:] T4L#k#X"k{ V(rQM/%iy3!`<6Y >:L:9> 8C48 "$7,}4 5  2 /u, 2.} r5ْbؘa{f`+&]Z1XQTPÎKrFA?:p2ng<0 - W.4E~2Kc!+wc5d"js2y)(^,C1zS&}7H t=>LA0wLGF) CR(@=%: . 7_=+=7 Z6y=. p5A7^dgcjb,a@˦_Ǔ^\Y1VB$TUPKHE }C' ' :@x ?0m@Fj"_dB5^x% W>r -IJ9Q4a>3^M;~2.?&(XDI#HnxFGA";76:7 B7 i >3C L6R>7'fe ϒd˲dbdu‡cbb_S8_;_^(8Z<TzU |S7[wQjBP,P_uOBq TMW& IBKum},(?VH"1j2E6(>Cg+;'@;>t>A'8?0)A=)e;K%82lm5!fY6Qx5nnQ6Q 76g!hph#hvqhkhh Jj 5pm&:3lykVlVh„fw|vvvdg,c  yZax%L^8EU_P =]^k,$1\z*|(Zޝ3. Yx2!Wˠ4Uu6c.Pm5L^5E.3?5l3c 72Dx(90"0-$1&@4ώjjk%|l6l(n5qqt$̢v)JwD`xY}Sv)UQwt75gAtJGWrA Go:m2L47oM. rf2&~pT oTL$~qn*b'lʝ)ojy+ aig+ b+& ^s+ Y* R) Kh( B)a @S- =0lm n* no ߷it=yA3z+5 , {61/k#ZۀoGށ;P6~#(~ -#Ia"d>|: +Pl @G ߹xOL hwr m f ` MtY![ X&} U>*non0p[=qJ ҽPuz } f \mGʉsD%op5\h`w/rM7+$Ҍ0Q )'}D Wb4y5 \ Fs2+7K }0^ހ zRd&u:iHk}h"op?Lq*q Ot&y+~V0悤G9; dDzH%SucXe{UMA||'{4 Y ~ u F?a ֞(_k INgzgЩ“T^P۬ByD/Ő5 ` cDWB}K$z[fqwirƜtw~'Ne ߉bUy*jg[ۙH3 Lݤ R[ħ+ɫ&:[mx4]Ǚ_k) m[BEK '܋p)z^rRtm9ueۅen` nU|oeb%K`SNģ!;Y&׬ N+6nV^q~FPB2*q7U7*{yag WE ʛvƜzI E( l Ôݖ rTjdT:A,`#Aa*P-6/"Oi{b;N"2fčІ+.1,Tf/mD;ŭ /< B< i[AX~HePxNUBJ- ª# 55PL e9Khʒ̢Y ݂èD)A'f!Zn 3 wB%+yr!O~U?CvS,WIj2{g ζ%,ϝ7Q MCAeuJF͢ծϋL|Iݖр~_գ5TO% h7 % s壀iѨV@{ڳ;cA&)ב  qKP#NAs-|<QQ8h/ͅߟ*D]J n>tJӑ5l(4\ed񯂕 ѫ},U k2[0oK"OB)a0 qh 7/pz7$D[S"n }/ >SQw7fn]痗 հp +ƺ`:7s!!1q?Ro uc|s `ɴ<[J)L/\d $ -| GN!FUR2@A!T qi.9ˁ~9[z#ݲ[z Ug%<%"A7F$dJh{EL_U; M[lrc, l Zk#*Y`1B=M!Z'_N?o9Zԅ3-WQ,ӭ *y) jCp.7 ZلmKEL#)Gf?I &gZ9m !,$ ,: Q1v/$[[2)A=LYU&]4m:8ʁ=[ēi2Ϩq̞MJ'#'%' *$R " i o L KwY7|p#8k/=n8IO1 M e/ lA|UiMY_˟|hפ@ږk> IM uL(, fq1/ "&N% 5$W "  F .y_x.I*_;!Zvz,;MJ`d$|j GqC t+BQ=_ 7 hf G :5 ' W' W%X q # G ->y)I.qbP`+My8UL0dC| Mg̭/װڸJ)ݍL߹(SazHm F/ q&R& c(_$ 5 S#N W H C =P(B67J(cS| {P)u Ԃ|ڱ?nqm),V$b| }ASz.$T(e%$&8 I ($ " p @>t >{g}%3yHqcIf}mg#h|?ƳTNܿ].&0={*fIJq  8$U!|!!#VM$L& B' $a ! x)t@'cB! |1hGZb?{ nPu\7dV ʫ$pg;zi& Z3 gԬnW):% F" B^#$ ' $/ z M  ?Ul: `?-z?F `f-`kvRO?$  Lޝ&5d1ق]t!jx%Z|־! }!`a" 53K./*D$ ]!a# & ~#   q 3!V &/ qEg\(pk gVI 7IA/6"̉[ׯׁ٘^e0Pr PƄa-Rw=nz96/p (Y"7H" % #| ) #&T %J0WEAVBzg&kgN&3ͪ7X4=ʹ^:T͓l%̴ez# - =*$+ܪ.( },.NWDllA >M 093,:"%2v?!% 4$dC e>+  .nF'Vh B}aW@G~DYBs=92M) l!M5@ A zoih\9+H՜%7Vd˭MNcH Jy+A5P's$ݫ0&OCkATP 8.b`e {t%)sI"hq^ LJJH6C>^6v-G#z[ tS(S&*$p3ZGu*n_ Rsި$qb 1 ;|gq*fW%8\?W#J*RgZoLMMYB 2RPRMJG%B<c40U(C޻Mr0: -& ߨ =r VK kP zs՗$ P gz= .Erk"en.%4X"%N@&DV &7'C3_BB%1 - L' JY$2YWVS OKokF=@Ɏ9Ā0%< %$% 5cy M:d}!{~tm&dĻ*>[Iщ.1S l2aFF N3: 3$.U K1# 0v D03 * " Rw} &^x]n[YEWHNT?PLG6A1*;;(L6i)i5 -c5 4,*'N?%+Ms#/ '<δ`̒`"J_x^+]J[hY&UjQN` 0ID"0?F;K{9 n7*ve9c>,\;iV_P8ii% E4}@,P8.4-+*S8$'ˤ;#|> 4>'8Ma5uv5! &m5JK.R$mH$*babnǤbwa`_7^\KO[O,Z >WVxvSY%N+){kJmIZ6 VaH$/UG95>LG%ON$BEey$ 9DR!)n-B4/%%0@v2{>Ƴ6R;7P7x8p`+'72%2)"0 Y3 v2q){z'uK./ye:e$ ddmdXdgnce`Qff e!pd:Uv%a#"z^kX\^eZ7 PY;DV2=cXXI5.X6c;,WV}S!$V&CU(B)gS,R;ز- P.O I[T, Esi,u t?{,$ 5* *p) H *? c#*j "/)g8$g+,gPggik ֦&m/W_Bn,jjoLkoVj}mEgcnj~x^zj`64Mi+N>g]1e- *fF%$i_w Th{!hٓ4hGlg-J e׺ Se!9`R Z voW!FrP!LaIR! @) :`# 98(~hĵii/j)# lEo~q sr 9_v(Vwok>xqwnjcuc_Qw?Sx,Cva !vL'wAjy^)L}s U{" {N D a{.@zrqyxDvBo^hcb3_ XjS' AP ƲjjkD%m pL %txLv ̝y_ D}BL uz?Lg WʀF.=w4 i  n_j ] 0S։$i0B(=ֵMӨd }Jվ߭1?qD <R X[ֹ >΃%[PR:qM ҡ#ݜ~G k PRÀ%> ۏ9kc<ݟ-.ܡ_Q5,H+ۇ%L/*;ٌK3P_-rJSݴ ׉uUO7oM~ƕ Т)@_T ӧ w)` @" J(~OU)S( 9#/: KaVtǎZ tM7s@{Z\~S ,Vb/4 /V#ljPp(2;=2 omWc!S  _"W^1B?aP("d2x}ˏg4ϨՃJ`R &&}ɥWˮw? `#a?i2 )^QDe$YMi Gj#Y`1B=MWH`(pׇ!(BśC$۱loZݣ:? 7!P0s YՌ̭B SlYN;+.2 mo6n ! *g2 js(#Yb1C<J]1\p5k_6ʐe2ϥ㶅"|tF#$ $ " 9 v   ;)G8  #r 80O = VTO-dY{8 *.Q,(6֚74 Q߰c]K! QI &Qz$ <$>  " p W@3"tLD{ G! )." ; N ,edc{1 8P2ˡ2Mտ@U=+O7 p.buX K/W & !$'Qd$ Y #  s7++=8-'L/ c | hx_ VΗհS׿ڻ-}JTp h ID 8v%?&4 'Tl$  :" , g=Z^J$"p)56yJ(cK V| `[A~KQh TWAp6.2 ;-#Hh$gj% 'b $J "J G 5OU?3Dh\~qR&0G40_HXbr({ W8R8sMA |<NI uQ;_QX" =."9D# % b'> #  r P043G"21pF{5b<4w.kSH@uAf#tjU?Q3)"a<ުss$+3,+ A'k9"z @"\$ a&d # _N C8vxzv h-ECC] qC.<#V)o֣׶Dړ 4Ab$B Isiz'ȶ.W 5j0,M&Gp;h!6mN#0  & [# o  3#@0@K_!B;4XM;kV9K)̍>/Lfu$׫BڧX APoU I;@p:q-#; a85.I%/w) m#;" v%GT"% $ -? Aj*l9.=$٭!R5e&.y]+YB™a_]S"uEjR o6i?W=:3<,v%G  >  |Fdn;"tf,?08M?!at5bsSg iV4\Ͷ*( / #fL0|Ci@:R3"0'ycwNiLϘ)(Xm94\Ha2\PobeL\ } Ď)u(!ʏc*G a~5qvn6e h93 _YlIG#VD.0@;:4x *Q!4``Z()L׎ z0R R 1+A~ت V)k`6LH-ϼ*d]V+u.xPkalJWgS8 z u3  +A| otDkv>bi!EU K-) M@u!4'"0N*/H9+C:(,@VU%CS-OW}L02H(C>&6p+!rn Po  X" ȋC1 Gp<}_tsAmSZd^T V@$_N6 )8Cz ,Y4,)?*! ' MW$W3L  OT\xʖ\ȹZtY?:W {TQ)NHIC2x>7.9L#3[*v +1@m#>9e&V]@&Nj0&"=*J6;.-c8b/| 7O1& /<.^'a_-6 u,J(& Ue3&,b^5baaaY_ ө`7 `._~̎^b]L}Z{FDqW53cToUuRfHyQ BPpai 1b.\]XH67OItZJ6f)ggDi<@k:n;o7q gt+{|Qviwl;w\Y_v2ytOwf?ix '{} E}D^^6Q˃hm7H!P@05"~|uJp_dgkY3~we' acahhMikNos qG 䡛sR CyHƄ{sq\]cR~x&$TaD0)w\.S,3A.NLeGX!s_s+ SCsśV~W~#|wt,(ijj "EkU Hm rqw:W|Hkt}Y#jt!hX H,7#!}2UI6cZq{|M z ˺n->4^"߂5j=Ok)lXuLxyE n~ цJub$*`oKk,?)^ D#df-'D}.Fm1F>_-CprGوTKy.8ϭBړ"P; Xx|kC  Ñb v>_ B?]%8y6W3"kWs~$Wt3D1\[lraFH@0hntfuZ5"M :EXfL } is)tM'ѷ gðn {SZt!CW-K 7g%G ]sof>!B]XSm@ôE{)ŠuWRR o!XR lO- rI [ڭ-p9F"9 ds. #$6W.^I7H[9nĿvG=MŨ<4˔Ђk΀ac 9o/E {^g&jK d Qг6τ ξ͸̽ %~,ʻ.=U6ʦEUȫfI{žӢtҜ-\])"ZA?(^U<2Q\~ r{ \\J;ƤC u\(6. v ږ f tDa׋&և/v9GXkZ֓ܗ ح kSgT&)\F(P ’s p | s-h9 O$D/܄qjla-MUMg )Am~$^,/w29I] co5߇7ꐝR1 bz" L Ҟ č ƒƩGls!<]?BI7?L/Ixh")DYg l:6i"X`1B=nM>a`qو(@ǝq0 ߳_JJ>l?%#!YޏgAo,v|hO (Mv/ 5ekh7 '>~* fr'#Ya1B<KG[0\l8ˁ6^œJg2Щqڹߞ#J$ # "   ^]@hX_Z c Lx"18c>De|O}2dJ.sy00B >> #c{M2A֐+a٘) M ",U- M o& T$ *# ! ? G;_@?3Saa~, R!h@.<:NFud ,z# \ ~9~ioJԺd'VZd"W!d M 7&i Q'x >$ N#L  KYMe  , L9 Lc^cp4z: M/96v{|3^tk |ޥgM Eo#f xLv1ޜ~$[% 'w$ $" | V *' FZ_  r) 6 YJib`{EzaÔ 'Dږߒuv6H F$}ٚ"U#\$ 6& x# J  ' z(wfVG% 14 I! cb1 9i yPSlZ Iv A ~>-_Mt#߫bܢz֖Mr#<!9"$ & ^# Oz @Y"2 Fd`(tk?j CƱBj- IRVZEtXҒ&*W,NJX(dXo# !ouU#; % u# X P BBC265xS-e2D|+Zq 0l)~oc@1 L,u.$`/؛8 RfK{d"-27/qJ,'d& -B"L%b" 1 _ oWJ#/h8t?O߇S1ufDxŏV h eɓ-H+yU!{l>{1+d0%7H3EC .s(c "9'_ F  t`6 ?4,d4;:N(,`GRp/K/&f;AO|h B=.pV#q;72*'#EG:ljSKn^ sxd5 KֲF)06$BPH%Z<kKw}.Dk9l:x%)P"ڍͥ=) TB;dg;S&36~Vd'@\=9?3X+<#f,w_(kEJC ZFб F$v2?BeGTB̥f|1wsWFfUս2/}7yw" o =iS c; _M G%iDB_ݓ< ܈81hZ' 7ؕ)N*F"1=ˬb'-?6;7N buut(* i(D٢eKumo(i0f ^bU)NwQITEP%8AR~$MyK?H,D@J;Mɍ4ƥ,*# {1 4Ok3${44}Ie_yYq/z֜+tٱ muI f܉>`y{ES@H;j_*sg)cVO'8S2Q-OLI.EMA:0'oUz HKU . }]@ unX Mlkm 0e_9&vXGnQ I' !o!?{#1e#* B#& ! r   ~ #Z%XwW3FU6RNJFSD@p910|(^ _#?\w n%%J &f7F^ WNU cLxRD3I;;#a0Wn((ل+- K1Tb Y- &!tZ=G jn r][KZY W#Ua3R/Nh,IqD5K&?>&5@9}2v (eah' ^'qVR*2IMS-2HC,^9)r2.O&K#X&%.q&")D%-)^/ T.')aD%{j_u  ^;]~\[XycXKV5#ZU*zR+8N=VIw^Z}EZWs%Ah; \:NzQ:Z( Fx;/PG>&:B3;Yq+;nz$*:-U9vQ!<7M$55% 3G& o,[&c -%j"&0 [$?M d#Ev}| _<_G_^/\nj\j]\ 8ƒ{Z?f&WQ~UusUR&%hP l\5L='LEJ ?J^e3I&*+K;6%KVSKlk LgbLJLJ KI Ky`; B>MC?"mh}1<'61 "<1: _v nka/a4a^/`zaYaza azB a8f`(53v_1vqi]z^[Z N&Yn](\Gb )\ &Yz a'Ud aO9kG^jl>>8$~1Ļbeb bWbgcB e*f(2e9&f#LTfdmflup`d" RncvC0c-6ef\f] g44o iM7 lckm{mmŝ7nnmD kreA[gaZDV! P 1J o7ddA_dfVsgOh{Fi76jm*m:7yn2erdnN&%VSlGT+zr A~O .&BaZ= e?NlSa?"w.oJqs-!%8~ͪ}8|"}anfJrgi">=q5,ty&} E`q[8\Ⅺ A.#; iWFF x.A?fXexm,sj zz5   nC_si,!m6sw$|Y`t|jnh P/Y ;C$ /l>=SksvsBy;N@u]ƭ#TB gt^tyQ #{QiӀ".|8 ˂튣q\0,?5!2  ^k*V%y,2 @cUxih߅YfLT ѭ kעy~Y_l,:qdz f3 J8%ѫ "" 76X *W3AuU6k|~[7"qu#x6N ~Ux ԟԈ z nNu2X0g#6jnvV 5@yQ D"JZ,75+LA=%Ppex<ΔI;;^d[ j$zI gw cG#Š=R  T:?,A]#CY-#3P50? Ke^,n-9TyĦsVhGִ  ٟϐݐ^4ΐԓ%;튝vi mWX;&67Lπq\ 0 ĆFS%œ-5[AiN I_qڈ?Ȋ|:#ӿ;i8~א M(ks1Hw!dJֹ 0 gt{r  ty;'׶p'0/)c7{E~XTs>eifz-ť ØKʓzϸH׮5MdsΚZ* T o#0 Z=:,Ւ G*7C6(A|+zG `/[%' /w7F"Wff| 7^̧憺A ^^ӸKNuP?gꟆ ƣ x[e@ LQ$, WX*{uLKTk !9_+ O$1W =9?HY2hap}D50l{G$*up y$E # "X  ch U\03 A #2)1=X@8O!c~mBw VYI=(ʍfӘa(:0#p~{# 'M \&}$ ## ! % E  mHN21${ YVLe!7tE/;-Nc6sxL16N+wd2~vэ` { R43+wE @] L~2>% v'+ 0$ ># u $q<6+ -f^x9 Mb yM AǓϓ5#DU B\܉3/_ 3B Gx$H=Y$ p%A &sr# "~ P } hXre,. )h7Jj!bkEy< OAFcIɣzѓ0hE(\<3( +B= F?7;7Y^hc !P"$d & l#  } g4( W>%} 5mHawz aH78+oPjȶѻ@1# :i)'jϓ@#J!%r-!# &m =#f T C2 'QzMdCO S# i32~hF,^ qq6RS ֒FfB &WtzR1 6 >,ݲpW9ZNa+ N*'#>A> E" %m n"  85 1R&S mU 0.^ n8BW5WځHhqzqUd;%Dה!XJ!883Ь[g Of , ޸,) %O K/!~q f  _ } |( 3<!->!+PF(bEL=pPZKX ƫ̣_M>Xb8!S\-zqhZb60+2& 0Q>    f;^//*9Hd*7pƀJw!,[ Fix~U5:0w *!ʩb0O&~5 0,e%T kkO4E]7:, Q*)wR#'!['4)1FDqESoodq;US#nE1x+R4>_ rD"Nj }x>{;-{7|X1o)"nUdB 0$jF ;Ŋw;I!ub/Z$=%.M_PmJ~?yB`!C  2e1b/pru?Eko=Fd/N[_=ZZ[L-gD Bo?t:4:,$|cCA" PJ =b0)A1"6UH/Z*j}$},Qu{ !vgp!%eN<#\8W PDqI[\Du;A@>c Jz92H(R-# .F &G 7I KY1VB V{iwCrUߓa.m̩'g%~bfԪ[ OnDsW8.],2Zp.W x'q& *$[^Q%OLJF)B=l6-%N(-o/,Y=|(t:Dl Oe' d_m xd ?Yu Ɍ S& M >EDJc4F+#%%! g&M! ,t' F  LpOZqYuXOVOU >OQ QO* aK+4;F<>a8A<*;;;{3r*)'j%#nUQ` V!& N #- PE%AS;%bW1=#jO'!u!!  8 f/#8#6"hz*V GiCL f  _8N[&[6TX&X=>WgaUScQ{c+MBf2I+14DjB?rw?i; _5S1A^3( 53:+4:Q$4g4WEm43V2D 0ރ+&Q0 +!)"   ]\3Zoe~Z%"ZA|[*hGYSsWv6T4 4QwNiJP|w_G1SE; BA;%6/C *YB  #D4 zDNA Eem"F};G8d GVWnFr F+GlAE*h>Fj2^ ' ! j"<zO^Z^N]g\]^^TK]4%\%7[@E`Y qW'&aTU~R*FP2 4:P"QQ1fQ R +R25wUNHW TcV-2V{Wv WxwWW WOWMVUhMdVEW =4 "*70m`%`_"-_> ŧL`6a_ -a*O`.`"9|b`asnk@_wrW"\ Jw[;:[&]Y_ J_M`/obXF:$?d Z2cy,d-dڥ$d1z]"c8W`E<_[^.[$ Y,TNE_I5ZԵaa`^au c dO Ϛdad˄fFvHfbeMcz>|d8,egQjs,lT4l,KkB8lReDnaDm}l6tm -kjj6hı(eg a:a-ݿ_`]$bbvb_uci ?f/f55h2"skL~Qm-lniYAmD @sml/=nhpdqt 9t+/s*&#\s =D7sQ") t[X av4dHu}rqzq_pڷo0lFj g`jj~c\cdJfj,nh"lؑoqm es^/vlvUydvj.{Mv/wy8:z`{ y{2{&z){; xNy[w|O`G~fo}{X {yky*+x xRx'uʓtњuڤw<bd'Pdklekpe ͖t;x zCn/}Z~>@/c& T_bk8S*/>9OIE~\A7aUeAhA}- rYhkݽE,$VK fe*^js ep"&s-x |Y~zcxLe+ N6 -B5 uXu+q 7 uLu.l^[f[j+) n]t_GcLDΜLkqgu6wQ6|7uW_6tP nBWێ<5  RM"e.7VJ.`y(lbssy~c.T.E.yw{(o> ۄc-ubVF#dtn`Jzv&F 1<%L1`!En}+:\1)$V酈W E#SXnzpS}| j[T+@2b s Pj/#&K0F8tnGWX#g)w5ńU녊ދ5C*qz3m ȔWekh t ^`;DT_IcVPnYg Qg&/r6|LBjP.all|?R,xH˲)ѤZ Ӗ- nvPۇf{ݙWj T^ 1Y ĂIM ho!(0"68ANya!pCN.Dʁ:U$ʝQ F+ sȟ aѨ#"G$?znII *S{d#^5$7T-gI 4w! Q;cG!Ue9)x&Όe.IĿXô UΓGūקC x4"܇ |Fk U5~%V$:H]e~fxZ ] ʵ''.GG4?7KK[ʺi g}_4nS]] Ӧ8  Q KTw֫8P_,@ tXKb)IU3 % +n;ԟrhj : ؖf[b3׈!NR('/6c6CmN9^;mtٰK! 봦 f@T;̓Gey@| m$ Q#3 " b _ _L`vi5; 9&%b1v{;<g5O(#bKGu1>F>c?}IJӐf(Z0IE%R EDS L ~4&gp# t# a S ; cu|jU- )## /$:*Mp!av<&@`' dz=ɶGy`P)T GQ +0. tG FS$%j & $$ &" !t [3LMkWos T ;H-'8LA a vFtxoάME 'BRܵ1t H! \>e ݧnX#XH$g A&B^g#  !* ' t: jHGRh4{ my#)6zt/Jaw(?n`0_~7p{.t jG 7ޕۣB:0!B"va$ &% `# C =v"oag I)%5 IJ`rucBQbS3ݷ ޯ ,!SORR ?3wrі0X"Q]|o!PU# 2& "m 7 5_ =EkU`8 O!c3e ?Fg*6]NKn"jo:CK~۝JlI ~N qG 53]]0)R+ k u:^Z$ !I2B0d z  \  +I j.= K %/1@ AMSwKdcʔs{% FHz., Vg'I"Sf,^ î;d@"x^%! /=Y 2 Ss I72  h 1= G/ U*,N;zHLe\j%x]j:.eB6@J ԭ$ ìe-C# *#)&%G!B THBlC Khn]cn݊7(_(5j=Fb[0TtMc,Vn|/Z<0- say0&&"ͤ^ ;~+c')4/*J$lbC 3^&@C%$o> 8;ۭ!-`)(J#|2A ?12M7 #] $hu D7(#8QL ȇ 6HlD );| 0to3<09f5/Q%%ן%k ҏ(ΛG[ up"8qZ+,u,8 H!@,:R3z*;#pE`-_PS>8t?,xAr,!j4dPH-]]X1oTRQL| Gs A@ 6g,c%3#I)"6.U S~  VFTR4PUMQ0IwE~@:k2j*[|!?qiy;8k ):7dg ] @}USD-9Mc?7ET >h 7Hp=/i)st#y3 \ {  JG P# }YuLt l ZXW,V2/GT^LQ>OR ]0L9YHzC6U>,*}7r.g~&lOL`>W(KBCG#%U;x?89 2NZ *Sd|#;8{wΒUl ݿ _ u t* d&~ nMb / iYX|W}U*Tp\R P YM0H4CPDgcw@ k|:L_3U.C Io'Tx)=' 1~); 3)*3 #5+I 8-pa:w-ws//K)~ $.o-ՅQ*;&?  8 +  4rYY:YQbX)-;;<7);+l:8}=C/JC=Fa?_4 1 A t Z A BST B! JB=pZB3:B8=^13 $NnsYaZaU6Z>`Y oZ)ZU<[QZVCY?ՍWdUySyPMlPd_]MO KId?>H71+HIHXhIS J,M?ooN\_OqQ\QQ.QOԅMKEIhC;+`*4E.% 9[vm\ZN\(l\H]@V] ]` x[G&[cxhZhXXTT\TAR.0RU-}V:XFuX(:sY< 9Z[L/Zt3bqEI5qRC2-t$UD vY zN]/|o0 |7{|Ӕy }5~V=}vzZ wѽcEekno뗵s2w_Tyt|br}cKB+ =#lc4?}M2T|9{C&Xz}2|DI wR xpZ"{b]~`| ed^ &x<p [,(YõOnqr ߥIs ̛zxUI{Y~/i{ǂ7 jxTu8c֐A, q  t(/3#@kT,\_Abn dZCe\W g|mO|<&)H~+L* WMRYvCRw|+S<>GrĈ_X C͒!K.;\ vWZ7R)2T JY;dpA~cDw5ª2۱U݋m:h CK p&[ ^K)C\ x UyHLz !['/Q5a=JkKX eOo#|l$M³OPǸ_ Њ{xiDh>R1v?stÞ n7T9u?#|*H05?@JZfLhxW_YEηiDԀM$[psd_&XE=Ę9{\ .ŇR\T Vy&4 -g3y;4DxO^lzŸĨZ\+ѵ{5U.2] a# H# 8  9 M* ]6P 1  6&LC1N <>NU@a$s_'N &;vTK?Ӈf(p0ߍ ' J F u&&qgg#d#P E 2Y5B_f3Sr4 7I,#M/0:5!! L\#7,` !tWr(lRzXO9U sQ"Re\ K h=I#$ &s $B  ! q P d$62$ R3 A$-8%tIE C(^IB 3BJ/a_ K 5F QK"$ m%9\#e y m  9W`9n r3$)+,6Y I?/_LuJ:n5GSR/ې{F Jf0yٌy%RsQ3!L# % Y" ! _H LZ,5&GE 4^0G& ,^ 0s V-)BFu) qݙM"[N 0DC O 9C<,g)d-, l ^Vl `"6!  )P&?oF~-# 3EY6[Jj ע4{ufțs451j k߫ cLc0y 5 wBEu[ gPf I10 Z/  A\PQ'#/V{i?mP1͂aGm{i8n< iHiRуј8vˑ 9-ߺި&ip nS?\*HA0w  19yIu-0i#"+\#9]*0J MyWcnzj",GEն%h-1"vΡ*xBp(.p(D$! P+XY#@L=N['?0 C?߄Xހ0/%&yd64PW=B%bNNe\f+p{VfG3?$B1T ?/&%#גq!/ˊ&Q8&">.{2p5-&(x"*gE R-(t 3- n [D!gm^!/t$x:{ 3G48SD9u`(iu =[Kv1 sO78)}tmhO(Ӿ951Л*[$9[ e;Q ~#  /- I j+(,4~@;@)rL}[|eyzq{|{*x=tr#mrill/d ]dW<1Q@1>(U; 6/(8! nh:u2)*==bD ME/z<K94tIupoOV7ndc'mpli/e~a-\.Yt;V>{H A X=09,|Z5x|cFDBV>::v3 _+$kV09Y C"07Vf# f yu'm4h7=E]duuSOb;c_v[)~*V QL F?@d23 >&i!H\ nX MKh81'r!ivHwp&1j f&].YAT/VOgsJsd}2kEdA,@;'e91 ( B}O[^*~ j1 1 b}I+  ϰT7R+PN>JHGL)B`>z 7"/~^'s>,*g-,^ ] \T:9M#&E~ u8C>H M 6Ab/(Iw W( 採 #a 6 w tv j R2E R   i" $]VD+U;6^Sq2VQD_O\ [L5I~ kEV+P@`v;"w4skS*_".SBq'Nw2D` ;2M3|O)G " ^ 8rp x.txH C ԨyYG p~ * $  J VNCUTz,Sy!QOG*M pIO#nERQX|`A7'%q<XTe>5T+n8H%p&?!V{*3 x2'z"n!M$&.)%BC m&([ 9'/o0 (V v ( Y)zO ) 6,& #n 0HD> C Z   v} 1 X; NWGtVp!UfTSYP8N6 JGQxGMIk9Dok`?tM*L8@@3g#0B1 3b-3s 6''O 7m> N9 W;lI<[=+=HS>=,>^ =`9*/J" C; 7w  ɭ'YviX@OXSpX;~WqV ʐaTeRD P"u*N hkK?<[ Gb?'C?'1=L#= Bi:BQD#% G8\EQ^GijH|JlhKMJ HnEBÞ>nS>=9R42K,_YZZ&0Y<+[\ZRY X|m=V@~U sdT*fR RNiA)7F0$EgGKM{ L` L'2mL;K5PXLf{NxPdQޝQTP|NKaI̽EѐG@B^[6[Ai[1]8\\J [V >[k O}{[5qnd\2HQ^%Z! H|V(OOSQRNRewQP0P{5Q<Q'OQgdRvtT䅖VQW"XZF8W W NS@S|;N\W3\LiK]S#^H/t^ ^h_w a sw.cALfb4WSfa8<^=YYYWWVtUtTE-, S6IOUt9 'XO=O2X$O%We XvZS\ ^ǣWd-cH'a#e0]xj\|\t]O^1_ `_c ƊgGPi&]iD:I hI*hc*`zl^ 6\=[/%ZVlY8*5VXk7&+Y;Ew[#<NI^BSW^zS?`jbahag+j&mnjCg5f Gg]F^)_d g4k49njxep fq Tzp;Fqs k_f d4 bQ*`3 _2^~( ]D5[0\>7)3^K@;`C(d aD) cG 6 f9II_jM(@n`ZrWmct*~ut tR14srswjn1"p t4 [:EOS^;vhudSъxdM#So?e#7 -" ! ! % d 39%gt@ Ya01&.%2_ =CAN?a8#s^&M?xZ 5L4|d(ـ0(4! L k< {&KE]#pY#- p ; 4*iL(L W1)$N0sj2:10L*&`#s]h6#mr"9G|οO;]EV ݖP#r M 4iA]'$S & $\!` \ 3 027l9 4 !a ."8qOK0_%#t\k_t/G6e1@ ;CC.!#6 LI.>G2"i/P# %].S#? i  Y #bf 6[Fj+,/6V+Is5^B"t[_>bT \ba,D)uU ; QJ L<(ݗkת~ѡ6]EEMs !^  R y 1 s4x/-  1'044G[[ 5]B@mH~@Sу6/?́?יk߿! aFV$VE)Μ 5MƯY 0C1W:x4o iY&%+#"2u)DZJWVTB)d7mrx|Uǀ0ŦB9ט۽LѮ>b=\./} ;g!8%:9r8,:j" Cf!5  4VO!.I'< JD@WB[dp4|"aid 2f|,7*.[g+fL"yϤzkM& %Y!!:6) +7"(_8S:$' eճ%5;AM#[zeoBwn~ n$#69jI,߆ NA! ǖJ) %&#V=M 5p]s  o2 NI 7 4!0 79kX+2E4QZ^f_lVto*MϢ:f43|7 (12($ }$1\/})B%|Շ =԰lϊXʵiǣ Y +g40S_P(R:3)/=q J1w;Q)v'[}eBq0-fZ " "Ѯe$xb5oi^"dl̈7Af3/<Y)Ư#`o"] e`G3 : $E%F tHC.(s4nl7@\'iK9FiS\j!^ lhsrGpJplj=jVe^YV PL%?z<9{4-,%+  2qk'=> ~p #e0'`:R_KG_5O7^Nn\H^6iL\5{ZW:NSWZOʱNO DE?<c9:4S0D6C@<7h0J)#"/d?79y7+xgb.[T+8V87SGQ}TO{c Mu5KZG#C!RsOP2N" K% H|=D@;c4k- w% '&l.,_+Rud"OJ D=Yb=t%3^#5 F-=\ya'to)!ƈ2) ^UV +ѫ C@  g C   5i co  |PT5NRQ;GKOL ]L2J@ lLF#B9%li=z8pp0>e(JJ?V|SHE1C@ l%; ,SY2 6M()<..j!@SW0IkS Mw W <  .  e  = I J o% W ~M :XTԨGS-5R/Q1Ob=LmKIFAB v>Wl]9\`[1O'k%>e#5A( *d  O C'`<;X3 [4;kI2)5+a!(G)+ +2/5! 07Dy2O} F5f5568~9<94</ *"r$IVoVV!kUYTxRیFPBJNyB{^KoI /-dEJ@WB\b1B;7f#(4?5vr9A;Q<=?0Gt_9v XlYJAZh #Y5Y%yXN V/VpxVk]W[UF~Q*(^I 1FGG=&E lFD)F.bG1GAGfQjIeLwkPDQؙT0U~T_Q;M@nK&gZ)7Z' [Fr[Q[IZ 7Z@] sz_J'c\]&?P[;KY_SHNM%VKW CIOI.H&\H/J0K2LCMQTPVhaS{bWQZj^h^UK0\˻AoY꿩*XeZ)Z$\k\]c.'`hbcd|dkeDZdhGQb)b9]ZS~Q Ot M^LL !Kk/L72,M3Oi4RF/U[^Z]pu\@^a@bxb%K aN)aGs[:G[:]-&a4 d^#g iukuckDQj8kqqlbc XWUR SQo!PO\Nw,Nz3O4CQ5IR7  VHb[\h]|l3_gxaRcddFgd]JOa~e қyh)Dkk#4o |p ms[yrREs}'u;uBO'j# _ 4] [%YW3V UTa+"S\3'T(7(Wh9Z_<[? _oNa[?$dsif{Yg{frfr%hkڪhu5jnmW ̓q Ƌtc ,uOtvxdcySM|2}~s kUih*f*c*b"T`-+^5?^3<M^A(QaE8eHG gJvulQ9n^`r%lr}sArx'q6piߝr6^ud>xHzy}Ck]-WƁ|= z( w uity6r0"q.o'o1;lR8jDXR j)J+ kN@ pQZ sU[cuX~-wZ{&|c }pof}{_ }j}ώ$wmzf |}=~ H r!>aȆ(Jr)BxcI Ij V0P"2%C~_#!Z},*|`2||<xGwaQrwGX"y[*|_ ` b} cdglg[o }HKd}QCD'„JxMiZ)Uŏ:gnm0 iO,ANkld&.$5C "?PKeX.]Nc)] da /f1fhj)k0dm s}O 4ㅦF~fqs7apEJ(I kS p(0Bi5/?sJZJb)Cf=j(k8mpT(r@*swu?zoZmCdxDiAWMOGN>al#s^&MmBR@`ƂK͑O%p_(ٌ0* 5 >M3 s&MW#a" 8 &e &c I2Vrm DQ<:% j E15<$M33&`#s]fyH .!I7+Ȯx_MV ݵPr$N @M.%+b!vD$. $% [#XJ! I  nO3 Qx Rc ".)9KK|%/`."t \!XTL4ĖjtDZ ]*?s ؙF8Z )M[$ݼq  Tv 3I LP Ik  <v 2&lk ?p)+p56 1I5_"Bfo~g ` W++r~ϬMRݗ M$r[(vYC [Fq]OqZ YcU~2 QbS-'>4lGO$$QbэP^mŽ|E\ <0-1r*̖L֐'hd7|}!'/õ[N$ >Mu761 Jf /i -\=h,')$Nl!3 \$ <.J-&\Y¥i?u(+qLjDrvĭЪpg-߻tO }2?K4 jU B "fwMUf#SD!o:)t4RB<J!N"<\*Df'oTax{c cYC ճ8))~n+4X% Z g'&i2U}f qeܶ XA&SӒG9t;v-7-P)Do* O |-\>)@dgjqJ4\1:(@ 8Ed$Tٝ14݃9(2x5B$aڢ!_r7MfE*6͑( am oE)xc4"`S0K9Mm*DypfNFFx,X{I^f*v|J!W'!͊ƍs6Iw*,yb,-(?% b!ɀCVE: :85 V +?&v?2$,k@;-hfSF&hDLhFk MR 6p!#^}vk}{S |K'v x 9u*m}f|a|5y)2.'" Nae  ;FEDQWa$/ 0 p3e, ^5 \@\E_K;bTUe.eXfyf<cf0I]udEY`_Y5RMHM=:~771t)A$Q<k CAB`z7 &iajX~%S&2N P<9PDQMlS[ROiQOIFUE?͍AI:!n3I/UbS,rB"@w>/:t4;-&} R_D(7et] x qjYTL -H/Gb9F<GDyUAgOCA>&=,48-('5pTTu+IG$EA>:3+Q$'H|!q "dBI+Y8OInBU?/Dyxm r X' '  _2M$Pq R^N>GLA5lI[(EB*C=z9?#P1fzZ)qw"gY>M6e"B}>y/810Z+?3%bSF!.hXfjzįB^ G < S Y e s+8QBiPt,O cL3>J k[GgDz@'(]|;$t45 ! j,GD`%P8C,6 \ 2?`)!5 'F 96Oa'e{ _| VBj%l7FXA h  ?u32[RY;Q43:P)ENCLL uI^Ff aB/ry?pH: f%4} [.I~$u ;D*V` "1$!C2 5$yKbxJVv#@& 7p"/N ֿ4*! _  >mSe(.REQAP9NrRK IShFQ&fwCmZ?0 cn;`%V6Ew-?2& !=#;$  '.H'_3b)yG,\</p13қD507:8h/F$ϱ 5e4.q^TT SnR=2Q:N PL^J,uFJ`jDupa~@U4T{>.9A6k%(/ *r-/qP/E1#053E:@`@+vA<C$DC@`@B49{/-o)%3TUUH TyT~CR$QpTOVuMZ|uKe!jIa]_G4!NDE5>J=P8,4]594k5ar5!h6#7E38SCA;RAjEyHgJJI4EuAǰ;27ŠwVT V VoVsU Ў\S5RTQ,tQrgRXO*DLq1'E9 B=<98 885S9_!:$;4 =]C5?fPEiJ|rM;P>pQBPOK¶GÅVPFWRWbWHW53V9VV"Q}YF ro1Z)aYN;+; S;; :;4#=>&=>%(>3B@FQEsUaJjeMxLP RT~T[hUXT*cUNrbW41YסX4Y#Ye ΍^\^7_> ox6`h `W_uEZ]%XuWL^C}_Ax @ .@X@ ?v'j@)CN+E$.E^6HIcJeWLcOoRUtVBW[/Zذ{Y {Y Z] a*c leFq fI_fKNeu6e4a]Q-[L} 4J GJH*H}G'[G.Im0K2Mm3zO>QNT[-UeXWuZ}r]E]gC]Z ,^?adgwjgyl"i`lCX'liCNm%nLib*X U SQTOO#N'N90O)3Q5KS7U98XFE[+O3]\]M`mRb{ccjcBQe\_gg*i/"l pa ~q }pt`tC&Ju0OwXz w"4i (d a_h-^ j\q) f#e!+/c94Fa φau]f"`T,94|ˠW/-%(}} '.3;F?RP` bAfbNh9j*#l#knKpTqQs=9ƈg{t<nw_ H( f  C`@#,)x05t<cFPW^[2hbjomF7 oJJqQvsKu x ey[X}u_o_f:1U";*)2OD:osU_{; /@$0f*06D> G%P0\Tgpzp!sunivv~wu>yq"W&!   X6N=e~bm O{SU)(8&3:e}?;JO{@&CJVQL&S%ZJ;d.lq}u;^v=x!}B.K}* "J&_Vr2YG ]  DB?%HS< rq@  I"\p"N:3%K.524Q.&;>$J['t WbjEo~gqrzuw~}s"K NE*q+_rQ*B Y71 /l, $1ډKz*ۉ" b)$m10&"76xBFTC#O5[6ScnkUl|n@@tj| $ۺܭJ7ުO"FΟ4# ޴bxB+  1Yr 5/. .N 'ɍ*Zf\v V?i3(xSE2";M# E3{M_]yVW 6}5^f$DloiuH>|4b_~P!YyGn*}'LL#ҰX%6 o#˛QP& ' K> &[ n[(9wI2D3l/Q98g"C;g"Jg?jNJq@Y,{6h}bv{~x0t|q~>"!AɄo'W}8$+v`\+>R'}X$;kP{o"jx(6JtB4 . ]1|,>pd)\X2X\:XA\EalNJg^H omooajf9cFeZ:s7)j\c_/4./+ %`u/u 8+ɦ 3<[id! %o&_2U!ONk,K3L9OARLWY[j:]fC[KXSl N{V1PJC;F:7U3,.{(E"q@M 2vS:;^h>HlST^ QPHC'B0VCc4-D>DLE_jHhuJ<EQ?tH8$460Z!,p)'@>;9f$8-u8z39&A5YN<z6 -#] }h|jY^+x/ GF$C*@  <;7[0 *o#D}SOtko 97_ S2HJ93N.!@--+<5+_o*z,v+#,:  zuwԤM9LBJAGQ!C T?<;n5|/t'" k!MJ^TS~+H=A:b.;($"! 6_P6MdxZw Z 7r]&%m:TcPf/n Oq ]M qL4J jOGDOA I=w8bn!142e*I;X!X!Ku! >r4/% & 8y M!i Sv4^4I `i tKt G#6J ݓG ,07^ vKV,iP&IO fIMRK qEIHƋF sDC}@t-< k.6a0R(T>EF!165$G f Qu1EbtEjZo?eٗsظm f 1Ci;QZ@PcLOw>MpK mHsrE|B"]rE?i; _7O/d:B)l=0q$2&' a)"Q'":#%L )I`*]uW*)1*y)Ѡ$L!ؤV5VMR:Qp2tP2{Odj^M 8K:]H`{FTPpC6GgF@l1/]=hN70?2i2'+I$m!"N!#?$D'(6 0K6d;|>@߰ B!?ȫ: 3=˩+*%S  RR=/Q,6"O4 wM'ZK {I>(pFIvgjD;9\C.If?B 3:i4,v9&5%%CN%`&'k%*X20D7X8?pC}3EJEEADLBADŽ=m7şT$PSS+7R.,QK O5NQ|LprL.djM#UKG-?C[%&AV >V2+&**;* H,]V.cd-'0]4<6>C~;/Sx?fBrEԃG$I NIH=GU TYTT! ÑS1 &R"-Rlay>TkV&&|^HTLVR92L IDD54l4# 3z4446 :8"\8.;s:0>|H"AVEXeGq I}LNOXmNOU uUTUU ȒU W[s]*e\QTZC6X$SR3HK><< <nOO pNQ[ tWxa%ykg {ucdx5-y z }} qCcJO\3 [$GK{,z<x)w9v[ us#;t%|^s.7sy4 pQ; nFr mL: nP9M qfRZ sUlcvX*y [+{f]}W`! de lB|opP} ^,xkZD&b$(/וu,R 1]$7M $~'E~!Y}({0{5|@!wH\kvP8vV"wZQ$z \o.|<^+` a| ce d\ h|l#}脦r c1Q6@^ ?8zA>CA 2 @$ +2#7AeK=R4~[z "_"a^u]bn da-f/f gij6*`o {x͈YjkV\ߏEB%9 iQ DCiKBoL -4&-Q2s97ABNKZ/^Ncryeq f{[hj)Wm= napjU҇mzdr<d[:1RH8& n G9vE!(7.3$8MB*=KL$Wc1e(shZ]j elC!l qmW na]p8U ?"d#  qP 8q{SO 69:o&)i.3m{e@POG;a0.s$|Y{Iԕ/~D' q$:ѫٕJ=߂ejn<9"} J$}S@  Fc\d]y mj'q%2a =BN#3`\f͸knqv~WyZlѾ@ܞ*Pp$ 6+ K~$m#e0Y|]  &r]GaV ; +# 0Af3:4m9K*S3(Yoj'[?k!Zq"a;Y'0\XbXi?u{#{ MX>G-I[ QS#RB.+d@N# I4 m1 Z ;Q% %,"7'>?MÃF;G<DgKy4R|sNX /yZx,#[w&\4i;*7 LȻK2Yۜ?!*̌ I L}b:E2 -n[I Lwd# oX b) T )aQ15=B67C8AB JZzjOIw4JU4u&Ws#OX$7rDY /qj1["6o5|'<$-/6` R_fJK"KuB9r e+ 91y<N7&_#,^3 3(7F6.,@*zH u MqPRO7o>kSJmTYmYU>m6[%l_zpU-?g0 ;da-kuxm 8IfqT *f E'9 OV^ @ORQ @-"h0+|Y3>x/=3qRF9moyKIjzMKhN GgOngwSBRffYGFf]fyaIpKpSv ,޳ V3w5*ָ26@ 7z]+ "? ;Ļ     A~$"%T*8rV0Hh)60c=IcaV `r}]R_a _eF+L(+*ۑ;2/2+"c˄&ʽ\ Ą!A4<|EG` w8 U,2]ph _&Ws/S4S<XB[F~\K\Q[XX Yz`JXe Vj\h8{6$z s_6)&""|Fz  P%s>+jk>}f- + 62 "I  w^NGH&E.F4J%8ODWRxLxRT{Q^O eWMkfL[tW[cƇha%\n1-U))#ks  8<4 &8LZZ?|16Er e JOAe; f9(:.4>3A>F!KG[DsdGrvHvG;Fs?LMsGXCW9u5 2 ,&%!~z 5#="Jz<1L"eEWC 50 .!j0g&215:7O=hAE_>l94Y,m4&G.#i{*)'e?O=]:5E0p)$ D{vz[rWd^TJ8q+]['a''%)16(E_1o4Z%+n!Q(>~ƨ XFMDN+Bu>f:EZ4 ;.r,'~!w+nUc{ lRZIN*D%-)"#  $ l-R%X u#="k' ` <cb;x}K NJ% /H$VE n;A b>8 J9I)G3w+n% f% [TZql%Oe#D~a!6_%S(: " ;,)Gtt^n: v/yrSRgPx|"<MK j#J h H EB+?z;\q5P#'i.e><`'Sj *OGO ;]h,!& d #1"~lDKBY!lk,vap @A4UKwFgJ lMu L gtK mIh'xF!D k@y!=)oF9 fi3_]|.N%d"Ad53(~#\ Z $lJD g+<+[Om1fh}Nr=H( 3 [X.Vj SQ'NXoN `LpJj H E }"CNw@Km#cPV%j/&'^'' %y ىVزKOO.WNjK I lG Eo wQB l?N"c=A/Z9K~2:=.$.' ("U[ )IC)' &=S-Q3Af72~9d:1;L9RŊ3Ș-?'&P@PP<HOG`M KJ LHwE^lC}+Ec@9<9Y?*G!; 226E0) Y ( - !"<$**99 1OKy8#b=v3@AB?MBd@=9QQ;Q;9YP|OB?MdLD GJ xHlUH5BaCH@2RG =A/%= 3:)/(_(K' 'D(R+q{+x$ -041;7J<^u?`iBHtcD(FlG㨃G~4FHU'R_R&@R}P)xO\wNfVM {uSPgQ4[PIN2?(0HD@B100 0 K0?035} 5+m7N4[;K?^=K@xXDhg FsIKM2L۝rMS9S dSUQ wQNx3U '}'W piYLPb2XnQVP@T#NOeMrDt:=9 8 N9?9st89";&(v>70e@D9ACG[DMEVnJ5h MfvsOQSVRSSSDW{ Y]LTxD_5i_@Z5^I\~2 \IW$RLG{B 'A8 @m "@@?r!=?)AN*C,9ET-E3H>?]J[ILTOO]Q=jISwV=WV"]Y5\3 _+al~cDgr&d ccQc>c#Lc^ )VL;I ?G 0FxF4G-GFl!E*F.LH0J1tL2M<7OAQJ TU8Wb Zn`[ zm\<_\a đSd  |fQhrOxj3ijRZj mEk^+yl mc,[UTUK S RPNN}NW!M,(M1N3P4R6g T7U:CX{B [iNa\^"ZafdpfQ|g)\iik'`m2|ok pr'aq NrK4tcvu;jqb" _^\B>[(Z,5*X7W #+ U,T3s1T7AVC9#fY;[<\U> ^@faI=VeTh_Kkjns}n\ q3rt tCuv heweWxB*z"~H } q j ifh7Kfd-c6ba%$_/&^ 5//]09T\?M ^AZOa%D.2c\F7eHF gJukOGoY8rchum,uT v ]w^Szgz; n|`}Lڀ%1$@ Q0uO sOAq*q omvGlP>lG!]kt).i#04k$g6f f>seD~> eHBhK,jkLBlNO pQZ rT']uYe+y_Y2|-fv!yk z|M/t0gLV͂A\"]Lcr '}Y{{y|xe10vMAv%ufP8t$vU/s,VsP2~pt83o5AXn1IS mM? nPP quS[ sOT`vYW%yl[,{"]}6_ 'cP}` k~zx }o `XN3  pwX4sIQ,~N -M}!Ob|['d{.{ 3{;yxDvLF]vS0'v+XC&wfY$y[*{^I+` 3az xcm d(Z&c}ughȇ X>C$m: QH$# a*>0& 5x=VGN}dVw }T\}_J`%bud,ZpeZ fm g xXZoxaqw OL85|`᝝M` W mH||rWf%w+1>6H b=&GiS;4[3_P,cYda 8eTT e])f+f fm g -!6 3 O a" u1cI_ I18g&)03|]@GWPS[@2P3}O[tySP2:uUPI_j{DK3K7%wߡvܽz, 3R7"zR5'31 _zG'mZ+Kg $-#m-58w`;\1A@i>Q@Syr]:@u/B p-H\lKLjMLi^NIhNEv^SM|-7I`J(٩ Ґ /e3X=G8 #CC \Y MJ_MJIy6%X# z (I0O5K54-xT2;t08"n=@*ka>F*h`|I:fKDAeKAdL5=chMItTb~t1CS!DŽ :^6Nc 1,^^Z4 ! |=!mF<ݑKLJ2$֐2*32Rk2Ct 0nY 6 iN>6fLDq"c8G`b.H9a@H_ `I`L`PkaK3QŬn| ®9\0bW/5" ֎< 1h( ,ͪHI÷Y!N.q}5U2+_%/Zl~-gj4cX:)_*@]C\|D[E[_H[0LZPZpTncfap #.' W(Sgl'Ӗ? Z8 JkB^d # C" I (u&_]t9!l:(Ve )_(1ZJ7!X2=~V@V=BU(ETITzN$SRS3WRp\v~Q%)C6H-ܘ"+GF [ 8)B%Z 5G }A& kU M$( J0Kf5*N:M=NDENJJMbPLXJ]zJ\a`tu$Dyrj(d%"9ayD"s_3'"%$B 2L pa ss[Eo@+! =(>/hCd3~F<GCEJEU3C^SAcBbinQ6_ dgbae[0+[(i#PZ"|-z+?oTa;o) cP MK820!u2&7.8:7=C<N:U[>l A{BBFLFVB9@;41]+6&)!Qs O-6'}-~w1"cAUA e-u)>s()) +*.5"2G4;_;ye;@7NZ2*./'-Dm)Y0&F ?6=:55:Y/1) #~ %(ixy lb];Im7|y$# a!!;"b R"+$ >I.k2r*!h‘q"EkC{Arr>:9/3- 0'|!6u^85mPb% phHXBLB+ woD%$ R)qtgZS C 4pD%E!^V~Gs5pK* VITmGsDlx@ Sm=i 88o}2uR*"m%)(d LSJXht(Nyj$CDf#5]$7)C j"# D [o _h:Jl\߯$OL5xK;SJ npGbDA F>yn:x o3ug-0._'A*QQF#O8:/Of++ &5 1/BJVDiNJ&i}'!(6 _CHeRQ|XM-/L/[J tH`8F vCA p@/w< m7 e2^\c-( M'$F@D( 1n" ! 02 (I8L)dMz], b*# 6}LUS:RMLcMY$Kz_I Gj[E ~B;Gu?ol;] c6Y2J*F>6%8" -% B$  .?#&{7v J#a$D cc;#X8NJh1;*<,)&'"e' %j&,;,O2dy6 {x89l:$9Ű4-^(#&P#5OZq|% F:[Z1b5/( +; K!z!T#\() 6/I7`eƫ:ȜAPP]_OfM LBXK IYvG4kF/f`rG7D5QF+9"=@@%= |8.'3'6#& &T(!*1*",.0^86%H;Y>zgHAeqWDvXEaG2tG Fr]QQSDPkO@~NGZM L sO=fPO ZO/#+I#LA)0FC?00(//q0/S2W4Kf5#*n6+36:>D7&BUCJD^KDSfHe)LrNe~PQwSR"aS VVd Xn\Ew.^i^ YB\H[Y1ZUPEU@? ?C '?Z>>= >n(@7)B+oD - D3Gq=(I-GK]MMYPgRtTGVщUA*XE?[7 ^? r`}X}b=xpcv bbPb=a"bz\TJHk Fp dELrEF EC D*E9-;G/I0K1K6NO?PH RR?Vv^Xk"Zw+[!^gaL]c7 ʼne8gu@wh@hif.Xid,Di*k vfaYO-S RJ yPm}NYMZCMn&M0!L+5L12M42OW3Qz5wS.6 S8 V.@AK Z"Li\hWq_c6bmdxfp吽h:EIjr Glg{nU noap Mp4zruoh2M_ ] [ZY# (WA)"V\- T"  T+SI2+S68 T7LWr9Y;Z<[>v ` FI b}P^ ez\uiflp&_m=p 9qv r]tjuhgwv8 mVw/Ay?!9|,}b{n xh -gKfcdba=`)*_2$C ].B \4e[8V"[:< \>_^B'GavD4c2F6e>H[BhLmVA paj rihsaun vWZyfy&m{l_{K~/偣 ۅGr?r$po~enGmLkiEjI4i KiC(f/B7e5.d =VkcICZA cMFk3 eHD gJtjt/s*r9r)#CW*p*Mp1m6'6lT?kGD kK5 lBNOC mOL pR9[ sU3bvBY'x[ *z]~FbPˆF|B%}y sn ` m%M1 ]Ls 3J<~Y1}AKO-|G<{izC 2yJ&x},x2x;.tA sJVrs3P'IsBTAUtVbvYa$yg[,|^~h`m` a|ck|+8tTg߆ W-A͍##3 < PVcnL [!@j"R-(WC' /qCz4o&M;U~E&| LzSzY(z\-| ^p~`g a} \c_ dae_~6v n ` N4 sZ3 [ CN!('`$ *Y0w5><FuRZWc\K`]c _ /c_ d[ do\ dae]   s s DWpx<v &# $)-3xS@\PS.`h (mApYt/yfYd]LσR]u`h# Hu$Z)a_c< +*N&SH l YA3'c"2t >M-fM@Trk*[pR?^5e' ^ ~^ac2eym(Wx)Ym˥ I$hͱ7yn IߥwY* nfj J r{&6 ?]`k9e)$8 M0l&:ޅXB.H0FKaV#I,xCC.e?b^s?_D/h1LFw''[j+yv<RT4֮ կ/ݵ+6|}<)W:{ A+rJI? $ }~CnSFtn(C,Np"L+,#2^6#(8)1!6_/\Uh41"XL7"V;yT>S>R?aIj<w;}oˍk3 vB,6b' E)U4GtTR^2 uM Lh_!mR'%|%/c5(32^%Z-Wk12^ T6RP89Pe;1Od;N=EN.@d^SL yj!Ʀ f+= #U?: fPo9cW!p) m )6ۉgzZM:qN07?!!(KT 1C1Z)#0U+$R30 O3M6L$8KT98J:J"?$JCV,MskupH5 Upx ĭZ7ޭP}996 4٢H:R&q Ѥfψjm ǹ 1 C9dҥAP(Q-SN'K-I1G+4AFE51E6 Ev8E@=TEBD<F3M,Q}KNn^)=?rX,ϒ hG P=hZ F! Fm"@rw JLyZ%>K\F\!D)BQ.fA;1QA'2[@a4>8?9>A>F>IJg3{ DBy5B)[!ŋF[ 8 !NϬ< O 4 WA"W'Oh7f A;!9$:*,9i,9a/929P6: :49B8I&6MGR@q:kAiz&n.xV9q '$!H8O&#J}/'[+9e" f'! - mFW3.%]-.=!0%1-,0192{51t<1kFE/L<0XDwY9d ` Z\.:*'#,Fww */;VK>}9(j_ IR(4 $$>1%("d)()/)j6(A.[2i|6u;1VA}Ku-F=AH7B30(*2% c :8\"nzn`R> > !/a c9 x"X)9""2&I.j042(L.*q(,xr(*[%$Ȥ><~9X4.^(a .A# A|cztUi`GZlG"}4rzB  $&^(M0(lb.7)K ,tOȌU4uc DB6 @|<482, 8&O {- 4rECj`d -kCVFJ4@* W8 T" "Gjn_A X8i AL" 7 #lz_sZJeLHe)FR|gC=}8?<<U7%{2 r)&-j$\XcV@4Vv(Lx)AAM/4B\"Q$  m= V jN_o(!j>qu$f`*:K[ oJr iIrF_C [@~]= v9FmZ2/3e,64]&"A%OWD+7)7 y-  ls+U= Pd~x;1õ7$` i al,;-K o3K o3IGJYDSA}U>t;Y k6X!$c80Z+J#,>bV/A!) q `" 4 xFx]&p\Ivd 4 0 ޹nSRiMWkKs"JHp F3cuC |@:s=j9pa5U W0I#)Ba!<#V,Ig& +"< (_ $sj5AG"\=#p$`$[{%A$By!Tص8P9=cNfLqKO I GlqEj|gB {s@@j<a:C[9WN6[H.;|*&&1Q Wky _f #%9J*L 0'a4tv6؎078M96.)$NYMiM sK OILoGi s|EsCii@o0a>54$V<*E9 _!04.,\'u , s b!"d&?&3.F5}Zv;m>#@f9A_A9@ =;:DODN\N/ucLQ K[vIc_}GntE}iE=M^E/$PD~)<.>S%<;f 7-h&w&% 1%t&W)/)l!&+|,.64~Em9ZTGJp_eB >~/q..=--,. 023|'418W:`;H&=PA`DmFyPIqLJ!L QP^PJ OAIN>Q1yTHmoU }`UPOSk?Q"HKXIA"x7f66+ 56u6i6 89"Q;s$;. <3@@BI COF`EJvnLzN4P'.Q QGWQMvTMvW<FZut\=g\?XZGYP1X6SjNCC?r>R H> >h=2W< =K&>(4@)A+Bt1E"9KGyCiIjJKmTMbPRo0R{T"aSWT @Y ˌ\\^j{aoa aF` O`,<_[[~R(}HuE DD C CD<C|B(C[+E-H(/I[0JG52K<N%EOPO-SYUe`WqY~s$^-9`ca Nd ΀6e9urg@ gcg@Wg9Cgg*h dT_`eVP O[ M_ ZK{KUK5iK @J)Jo/Kx1MO2O4!Q05KQ6S=V VIZYR,]^$`0hb,sCd Ififjzlmm _6n Ln3p~|rHke\ Zj XW3U+S,S+Rx Q*bQM1Qh4Rt6T7W^9X:Y<\Ck_nM bX]eb ikkn~9o~`q< xrsetM UEtz@w lzJzlrkQ e pd-b|a(A_ ]$-\>M[x"LZ,#Y2(X7c]$X:Zb<\g>^=?w_B@aE8esIOi.R$Ll&^:ne+r s;^t xwOky4^9yJ|F.9 1 o. pml{8kdRih\3fV9$f9e&c-b1a3L `9( `K?5 `!C9bbEo:dG:f&IOiKu'kWMt: nQhWs1Yzua>vw;}Cy rd|pe})S?i qM' av tk6$s"r\q(< oh GnLPDm!cl(+l0* i5"#h<qgbCM gJH1hJtiL9lGNTGogvY(z_zI|oGkqnLw@nP;N p]QW r5S[tW4wZ*&zy\0|^~r`-~z% sA8fx U@v"ag$a zL  #~'@~*! Q}&|W-{2{8|C3wIecvP\vVg!vY%x9Z(z]|_-f` ca{ Gc`|ׄ uʅdmN ^ L3A.} /+ikjQ#)|/"4U,9 TCL}R- }zZ}]~>_~`Y` aZ~ ^a{ *cb&Ms+(%#    ~tj`VMKLMNOZix  5 !K!"`"#u#$%%&&''(()$)**++, ,---.m./G/0!001g12A23334U45%556]67.778g89F9:%:;;s;">??@@AAB BCCD DEEFFGGHHII~IJqJKcKLVLMFMN3NO OP PPQpQRZRSBST)TUUUVkVWVWXGXY9YZ*Z[[\ \]]^^__``a$abbccdddeyefnfgHgh"hhihijBjkkklOlmmymn?nooiop/ppqlqrHrs$sttntuJuv'vwwtwxRxy1yzz~z{n{|l|}k}~i~g{I}OML mڑH"iהD3(5ǜY}H󠞡I󢞣I򤓥5֦w[êLխM|Bٲp }xoݹK'q߼M( |qgVEļ3Ū!ƘLJȅɆʇˈ̉ ͕Τ,ϴ;KZixՈ֗ץ,س9GUe~ ޗ#߰?P@@AeBBC.CDDE EEFsFGbGHMHI6IJ JK K}KLfLMVMNKNO@OP5PQ*QR*RSXSTUUVJVWeWX]XYUYZMZ[E[\9\] ]s]^E^___`P`a"abbcccdtdeief]fghhiCijlkklElmnKnopRpq|r rs$st>tuYuvnvwxxyyz+z{6{|3|}/}~,~(!tVǃ8m݆N/bҊC<5.' :͑_񒄓;וzcMr7ŞRݟaiqy|si_ڨUЩH3 j߮XӯMȰC9/$N{?ָq"Ӻ4弖G较V)Lc{Ɠǫ*ȩ(ɧ&ʥ$ˣ"̡ ͠ΟϞМћҖӏ ԇՀxn`QCڻ4ۭ&ܡݗލ߃ylO2jMv9^"GPRTWY gz1DWv:`$J2jJ)a@x W@!a2b * ]  S JU y/?.yWKy  ) !F!"c"#$$%=%&h&'()()S)*x+ +,1,-V-.y/ /0(01H12g23445D56l778(89k::;V;<=A=>?3?@~A$ABpCCDTDEF8FGzHHILIJKKLSLMNrssttuCuv{wwxQxyz(z{c||};}~vN聃T%ȆkT<ߋ%ȍkT󐓑2ҒqP,ʗiD~T𝍞)Ɵa4Ϣk;ԥl6Ψg0ȫa*®_@ీ!ej÷o˹{+ܻ{2o&c+\M}>o0`!R3^ 7b;f?jCn:b&Mu9a%Lt8_?wT1hE|"Ymft2pO. |[[^ad h m s z   +6@??>>=0"p] I !6!"#"##$ $%%%&y&'r'(u()~**+ +,,--.M./z001>12k334=45y667R789+9:T:;{<<=5=>\>?y?@AAB BCCDDEEFFGGHHI IJJK"KL1LM?MNNNO`OPuPQRRS*ST?TUZUVvWWX XY;YZTZ[d[\t\]^ ^__``aabbccd deeffg&gh1hi>t>?]?@E@A-ABBBCsCD\DEEEF/FGGHHIIIJvJKkKLdLM^MNXNOSOPMPQHQRERSBST?TUh>?@@A(ABBBCTCDaDEmEFyFGH H}HIWIJ0JK KwKLPLMPMNXNOaOPjPQsRRS;STtUUVKVWXXY)YZ5Z[A[\N\]Z]^7^___`_`a[>?(??@P@AAyAB>BBC\CDDsDE-EEFDFFGWGH HiHII{IJ2JJKEKKLYLMMmMN(NNOBOOP\PQQuQRBRSStST@TU UrUVPVW1WXXXYaYZ>Z[[}[\Q\]&]]^d^_5_``o`a@abbzbcJcdddeSef$ffg`gh4hiirijFjkkzklDlm mrmn |0:| $({c}RA}}S}m}Ѹ}}L}| |ʆs[|Ć-f|DžY|DL!|><|D0,{؄8#{:|[|e|#f|,|-t8|6"p|Cz|]i|r b|Dds^|Tf|iY|X6L |8>b| 0o{l#{{˜]{"߸{<Ҟ{O-{l{{y{{B{>r{ߋ;f/|2Y~||}1{ņ${V${,zUޝzb0[z|)zƗzũuzϓ䛯z&{_{D1rL{e{Y{ދQLl{(?z|2X{!%{[%zDy8y[my؞XÆz/:xzbzAzDLzz3pz䐣d{PX{tLO{Ό?D{׊1{${dz%y(݊y.ijyG!y yĞyhy/y֗Mz#qzPYezǑyY{&M {Q?{Uj1{) #zy|xIxTex˧®y+by6yXxҜy92hyryі f-zTZ zLzא>zӎI0z"zkyxXxI%5xe]lx{2xצwȢ/x>xby!rybf%yY4z4AKzT,=mzN&.z 4 zy[VYx+8x `ܲwϞwx@6xw-;wU~x%x%rxdy`WKy}Iyٔ&;yג -*y:xˍLx8w܀w,wwر@w.mvGw!Č8whx'rfxdqxVNyAHFyl:,yx\+y1eWxHlx !w_mwtwduWu`,uڭhvn:w#~w#qwIcxvrTxFx<8y * xwvůw3ª-wVu!tN-t}u)duҭdvri~ev+pwbx(StxoE4x6x (Vxv~BvTv+nrc;rshͲst0tw0u5u뭦}v7pw a(wǣRzxDFDx5x&xL-voH vrqhΆr$=Jrr꺶s׷tYt;kut}v%Ho[vЩ`NwQxYC-xd(4xs?%wsvb:t&pR{p*q&qrNs˧H;+/H}wocb#UH}:+,\% *ڄ瞂߂>H:PbGPV ܊|m`o&SGbG&$U9ՁG:%,!~p ~BjMC0Ͷ(W燏ޗ G|I@ob4ĄaUCGB:*~,E~w}_qٯ7EֲUꉑĈ{oQbUURG G:~„-#~\!}c6sؼW)T`̿OCdO豈JI={UVopbLU@$Hm;~M.~"~-S,~ț&ׯ~aH~}~~n^*~x~~"z~эm~aU4T~HV~;~Ӈ.~!~0 ~{~$~ʙ~ }}̘} ~=eB~O}zr~hl~J`a~T~׌,H~ϊ;U~_.1~~&!3~~0+f}ǥ֮}\}be}}{7}B}̗و}ڕz}mM~a%~O.U3~rkH~j;~E0-} Y}c}⭞t}$w}Q!}] }NW}T}e:}s^}{z}m}Ĕa~Uo~!Hh~ :}ٍ,}q|։}}d6} w}} }!})}/ۇ}4Bz}^n}a}aT}̓$G>} 9[}t*||D~}}@|ɑ|Ư |竿C}p.}\9|cO|z}(m}W`N}R}EB}s87m}0)P| {}M3}8t}|Ӷl|@v|̯ݭ|j|1|צ|Уz|Em}*_j}VQ}_ C}M6}]'| {@}}7"|Ժȗ|_|ݭE|ͰZV|6||ym|ϣkl|w^}P}B;|e4]|Ė1&{z؏O}|}F|̾~&|ʻK|·Ƭ|1|ݒ|j |x|k4|ң{\}{N}@|n2|$s{j_z}ȡ}Lŀ3|5||û\2|.|y%||xx^|jz|Ҧ\}M}?}1r|#|Pzr}93}Y ӫ|ŽH|Vw|̾|y||| w|ĭNi|[.}L}1?>}0f|J!|{s}Mޔ}Y0|ƾ|ű|V|ξ|t| ]|nwD|i}9Z]}DFK}_=}V/}9 | |‹Ȉ} ԇ}i?};~Wy~dE~R7zQGlŃh` SC*F8"+ Ѐ1쒆˃}UօgVÃ[PĢ(͂N2.ylf(_RQEȀԁz89LV*,~̅y܉[sȁJŃׇס/8GxḱP_xcRE>8t+!&~Ԃ:꼄ʃ~ N3aׂ놁x|ikǁp_%S F=a9[f,R~Ճ=nK肏5WL_^b.AxR:k8_Y݈TR瀕FQB9腶,{~`y`M@ ԘJd܁^ȭ5/ȏw,k_ RrF\4v9t, +ܛL:+ŧ:=ƙI`{qNT2wi3*j=^U(RHF1k9|؉0, *!(t ¢A\W7_$ "(ۖwʓjԑP^쏗RF`9n,y)~hi<۟֩Ԁj=D@Nc呵ri0w}yk _&$SGFC^8 +^~Q}))`4eʦ__sA8zwwk6#k*H^`R!JE 7~)P~G}#4ژ zַ[zU7KRx~wT>j]/aP;C~5~'~}2䲁60QϱR:ͩW`V(+(~~Ϣ1v~li~\O+~A~ΕH42~:&c~ |}4)LC΀J_ö{InK\R ~~v8~h~ɟ['~Mv~V@ ~2~C$}~|ԁXg]3κw`?K~*~k~Ru~h~Z~ΟLY~ǝD>~1~"}jG|$AÀd!‚ɾ`L}=9~~Q~u ~[gN~Y~ѣKA~Πh=~;/~`!}і1|QԀ3vnBPК S~G~tc~f~ȩeX6~iJN~<~ʡ1.~ I~B}ᐁ^{69Iv(qZ+ߍe~ܷ~ҳs~6e~WXIc!; V-~K~~AUE{"|ϖ|^}8}=?}ޞrq~~Nq~vn~i~];; PكOC|6؂7)t㷋_N ǂYЈ>WםmÁjn9u(i/\ȃuPoځC26||)4Ȁmlb‚=N-Ԇ} ҅T:ƃHtWui \ЃRPQ C7X*L3Rρ.(כՍ*Lõ+өt΄ F%Su rh-\P< C恱v6*Ah< a`֜]h?ߐ^?O!؄ˍL73vt҂lh[Ɉ\yPz D=7߁k+Tʄ"ֆ54ˌhrN!ȃv; Ut]hMd8\g?+PUD71+$VX~AkބқLڧ C>ɂՂ5t+HgԂ\P NjTĆo7q*ʅQ΢ʟ<Þs{\3Eӂ]ÔtX.h\:PP\uD17ǀ*nWY/Ll]CΥ&\. 𠖦T򁜙_Ci/t1` h H=\TGFټ'МQ}ẑWE#ٽЁ_ ܶ}.*p)pb\6TYᩏFӀڦ9s+―ɀl!ۍyUzЎ{l|)u|Ћ||ᙀk}*T}p^X}s8}fk~3Z@~N3~A] 4胃9(3dNJb:ފט1r{qrO€geÆ bYLwMA74ς뀝(W[ڃņ.,̅ۅ0y߄D߄4߃.cqنHeYMC~A=v84؂(zƁ%΁Gٌ!0Blt Љٗ$3'Ytqe*FYM{UA05ezo(HpE8Ŝh~=ix#՗`J,l~q,egYR:MņA 5Tu(遺ׯΔZ׉7?ܓ"7܇sʖӆfԎ~3qMddY.MqAy5Kt)̆*:W@B1ښQxBҔϖK#7O~p˄amd1XیMPyAp5Sg)0LJTljeͳ< bu ƚաӆ.؅w̄}2pDdYcOM Aւ5@),>g?KMtäHD,A`q\E=}[ɖp(dCkY2 MA%t5(#ኃhի·k8*𸤆{^ʅӣx2˄!߃㛫|oFpu1"d+X“4LĂ^F@Uԏy3vV&A MðXچݭ*S{Ҡ٤1:^,|r,pB4dqØWJ=>̑1MI$=EԌ懜Wy쯅م9#͓ƇՃ`{ÂoÂZcVhfI =0C&#όT)\b˛sL8%e۳ra$f;Ω‡U&{ţn󂑠bXpUDQ7H?;t.+!biӸRQ,j҆ϸL KŃ wz9nF{aoaT(\CG$:*-/ ׀UBRLeƨʠuW}㶧ȼmJ#6Kym}`eVS"]FC*8+ҁ_tˀOs| ǀ>l y\}q#yVl䂘_R6Ed7#*ߜ|Ҋm݈α[b⵷?_(}ׄӃ:PxblŮ^낶QSD26i )Ȃ7#t`Mxg y|̒z\tz.{{۔&|%6N|{ߋ|o%}3c'}V}Jׇ~F>܆~2υ~&ɄQ Eb!*Ǐjܟ)(Id{JxnC<b9WVHfJVq>Sx2ȅ52؄D&GYi90c ‘3nKvH+ɩw҇Efz=fmTaVKȄCJ>˄~2ׄ& ؂(vZ497֝Wz_mv̇aAUuJn(>Ȅ3 'Gp5KƏܗm:ލč}j gψ,y m>O`Ut1J;J>݇|2'Lzq\Qxƨ%//C֋HQah܉nBjyml`ih|U tIfq>s3 '6H$^o h싈zǕ؇Гy'lƆkz`… U~J?+IC3b '!ہ҇vD Ǥͼ̋עiGA䛑# ?T`W1x5lX`ۅU΅!+J>ڃ2#&`ez6aŠFؼyJLJp٦։v"ކꚙxI1[lVK`܅:jUӒI˄D=19$Hɉive.ȼ*_p c%TăZw΅䛙lgT`1TN H *;/lm"iÊ쌹ķۻ̊채 ͧnцEw?k(u_˄Ě SgsF:gv-ނ!Bc iuJ sm!ʍè>vdj݄^ QeE_C8kG,YJn[(MS[=ًCֻ 'YNBrYbݩku?Gjѣ(]„9PhD]7c*ꖀ/'(HDMO1k ְ-i+cA֭SuE: iSʦ\ObC 46FZ)~p9bTRʻIW͋.Ӻ2!'BYCtLh۪]\#O{BVR5HN(bЛ2 5y)OΏ>,L /çL9!] c'sqg҄[IN(sA-4[Q'k+/| wyx)y'|y쥄zd뒥zv{- }{w"{j|\^|RM}HGj};Շ~:0+~$`~F`~d~2b~~ˤPd~~R~qH~xvgG~i~]~RV4F㈊s;Vd/A#0pYv $ۑKƂO/>vJҁi]oRh_GF;+k/ņH#*8ɭQ5ոH=_Sᘋ-D*v'Ii/]ϊ RaF ;s3/܅$,႟؂nn{Xoe‹Ϣ‘Y◫x;&RuЇiD]]|R*G;Ά70h$ԅJGǸ@6֒đ2RΖ^bDu3#i,\EBQ{FLJ;dž܇G0% ,u C2]Xu2AD ' ǏtVh\!Q?DF+;J0p%4|.2/Ӛc#nxƌRtALhf2\wmvQʍ]G:A<2A0Ņb$v냅גHqU,ĚoU@sωVh)Ē\ȈRjGJY;֌0 #݄%sǃjƾŠaTz܈oi.LcuX5খKF>І2]I%̆ t oאkJ /ʕ%$z4nJIc WgJب=ĥC1iF$Іe ßuϼ"v۳Hw%x˟fy;!2y2dz+~$zr{ f\{Z{O?|DK+}&9$}-Ԉ}"9c~7qB~ka|@k|=}L}~)7}y`w}tl}}U}fq̐0}e}YK~ N~oC~8lT~-%!܅ޝ;̙+>ޖ#=2Z};mqŀeBYNCc8 -d뀿!ŀNzFzαk6v܅ҔH8}-qBeQЃqY?NӋd$C*8-Â]"v㌶)Gְ#`H+ |K_IqՆew YMN=UCފ9 .݄"= ^Hΐ=P֔"*f{슞pxwd+XȌ#NCE9䆠.=م#Ѕmz˄k^;㥚O7ʐ2`Ӑ{ocdG#X;#MbC9 .,"Ç,yӆ!$Öگ"ѥ0,BDq~ؓzio!md X[N .CH9/L.I"EP p M ҟkw󐀙n.)_z.ەLo+vcыX[N=ǏCو8ȇጁ-L>!w!ڿ ebޔXc J֝Wy\n6c3XB N{C7l+ȆՍVLS{|,}6k[ģя&JN(yn癶cZꗭXLYA.75{␘);^uϾг%J)̤ʫ U3râxsmi"bWӘL<@24zӓ($s}rr|ݶ*3̲Ҥ2vؙc }wɌdl^aيm)V剜Js>pu2އÕ&;qbŅ]?=w“?xߣ0ˏ2pPRKw'0l.aDUyI=[1u%8' LӔòP@7M)PtĎ(!v} kRx`+1ETbLHzՐU uj_O7/T mG+;IW/,s"5A) Yôr<@CJb&^ti/^yR]S.7FljW:[".5ϟ!술1E +ƻģtu¬vɣwtzxݙxy5yJyn zb[zVj{,Kڎ{AIO|p6z|+k|}( 8}Y}h{ ({r{\|4|(˙|>*|pxd|m1#|zalm|V}5K&L}@}5̋f~%*Ê~6X~'܇}j҂RGnYښuTx:ma-VK+/@:5͋2&*!}c|_Q~„6Bw#ClǒO`U.K#ǂ{@`J5ߋ*iC%?ȹөɜފۛb/ZRǁ|wTill߅`LLUK@LV6/+Ue {b?95ryؘ '6EvÓ6qk㑉`p U HJx@>\6<+l 2~쇅ퟣ~蓟=𒒟B,60\v4Ɍkg%_T\kJMNA@)63+f /B쇝-An6[_EV˗"6Qcuϑѐk Ll_TsÌJk@6v+O1520 ӰࠃM5AG%!cd'і,uX5Fjƒ_T~SJvMu@IAE5*f Qްmf5ڔ^w4tӐj#Q_?T[J?hx4[׍(ߌm z묶3D ӞҖvUf;~tF=i^ƖTW+Ir= 2E6&&,@̆jίӘAŗzm6Z~S$shَL^@S HÖ!Fq y'۠nOd@ߛYOgCَ{8k -E~";*e- F@ٛul}̪ŕxW}mǒcEIXXN;Bk7.h,UY!du$ۊĎ vV <.dye4O]Ηy$ w\lʥbTpW9_M'Ai|5<*򌦗u‹ʔD '_ (2@ÁEzv5&l!ad`&VÐ22L(~@d4Ν)݌ޚ!!؋̌ .[@ܟpq-#~!uҔ,k"`sfUА@lK??j3!(ҍ*~GnEѧR35\Ăޗ!hu8j\ɳn_[TbJ8i>zf2OT'ԍz-эS(lѭi0rZsmgst/pu{vQyw oXFwdϙx YїxNٕyDbza9W{E.){#9|o㌡| !}tux{yx4dyytw]yxznGz]ctz_XLzMK{Ca|8đZ|-Ϗo}("ۍ}auM}{ ƉJ}Kߥ?p#~~a~m"~*x%}mq}cZ:}XW}Mɕ~/C\!~8y~-'"") UN.䪣˨pgƔCYɁן_Iw؝#mgc݁XM$CR+8uށA-<#,\> ^w(ޜ;ň꣎R~!ʅw0Ym8pbZ=WTMLzC8{c-2#{Tn̪ULqkKƒ牰?M\vlؙbWL@Bϒ8h.W$cO; e fKDYPeul^b3WIÉ LipB~8p.j$sqdWb~tPJSHuSk7ha0-5\y~ u=.kjАa6fV)KK򓎍TBv7=-#"P T @ܢAs/(82#~ݙ5t͙ۗ>j[`ɖV0{XKA7:⎠,Hz!W  ɤϒyR`~<tO*_jmf?`C^UKA&@a5ˏǐ*؎5 "ҍwQ3 Qa欋~ƞi}šysi_LU֘J~4?Hw5G0*ˍ팖֋5 vyơڡ07LW2d| rјJhK^dS퓞rIr_X>kA3ǏO)u$yE猖 fxSڟٝg|-`q `gfz]CߢRߓ&HiS=^G2י1(m)b㌅ 7Ϩ2I9z)`Qm*{OpڬfJ\.ʧ Q֓.Gh^[6ȫPޓFpw;Y0E%♇ 5͍5˒rqLӛ&ysoCydՖLZfڰOE;:o/ $IڎiNJbryrϘrxƪ2s=~t6}u3s/uj#v_6w,UHxJx?fIy4 z*{vs| C*|U cV}Myx+wGج4whTwxK|(xrˡxh.y[^yXTlzIk!z>{4|I)|(|| [}~Ğ~}'}@Hi}5|/|rwC|h|^X|sS'|I }>Z~4~)~h~S~ ~l :c[قc6с{=Qr4׀hL^86S[€]H֗>=I3ܓ:)c4Àir ǀT*􈳝2ѕ|BAۆBE8{qBg]ɛSpSHN=>!=3Г%)Lqe k@s ŔόETr8z^'pŇgz]FwRܙ" HF!= {49*'W DŽ MhūcX[aŤayʋpkfg0]A-R戎H= 4K =*c xֆ^ ]NHb<݋̂yjbp f\šR#GŊ5=ˉ4&*-& k fحA>ݓѨϕ]ckxof3vq\8]]QgiG_=a3ËG)|܎U~ k,ns-['xo QAe([yQP=IG}R<Ԕx2ߒx(vfv 8/"Ȃ%uqy 󁖜ό7x}͈t/ kJaX1MNCPS9 ԅ//%v1 K#B `ʅQ8|swsQjr&_aqWӞNM#C28ƇO/[%{F% R:`AF7fG3ސM|CEsYGj΍2`۠X.W@DMъB֙‰8h/%H2c A*ϱؖȔ[č>|ޒar6i`VVӍLBp(8Og.k3%*JD)J~p4IӪ {rFlia_V!L}B7T.[Z.$̓jSE ̚fӭjG{VqƤGha._Օ$UyKytAm78-ߕ$FQT)$gPn%}фXzJjq?4gP^UTJ엍@ 7ғ,l"uPS"~ጐҮo ! zlp fݢ3]NSI?k6o,Քl" wSjn Cl]ϮUkɲyoȢ f9\CfRj_H>ܝu5eU+ߖ!smS hkOLӓ61tyXSnHye6[/(QdJ[G=D4[םc* {7 ms묽ŔsǦa$x4n#d$Z0{PhBF<3])ANޓf n뇲iLo4SSC2k=xmY c6Y_OTEȚ<%82r-(GRqkb k*[|qGqފ6rryrqusng穆tg^u?UuK6Av@w5>x*y zvz +u{TT| Iw,wƉ#w؁N@vBx˯vpvfũwU]Z@wSϣwIx??y4(z)]{H 8{:I{ |O|}r}0X}&A|x{ou{Ofv{O\{UScUzI~{>ܝ|N4P}**%} 7O}} r}~ոǂА:Tہ3ځIx^߀o]fF\ZS~I1?1>ŝ4 "* P W/~ fbK)_ZHw^nt e\SR}Hßg>dt4b*nȂ –r% SuH ro߈vϬEm eS[R$Hi3>fB4g* 섘N, 㓏=:I$+H~寂yv+m1dw[PR+ˈRHAl>F3^4HڇH*!1醾 d=RiJА~)u@lʩ[c囹ZQGğ'/=3o*[x6 ▴2c Ɠ[.zk%f~g ulQ(caZHێqP`rG;=q΋3)ij ˕fK q4nΎʃ铤K?CX#h~%:ukɩblbYБ(PHV F<ĎE3-u)ig )ČqbS 02;uҚ}ޯtYk8bo~X֣ڔ!OeE.ߚfk ޖ$@Լ5huc{yp౅h'un_SVEՂkLCmb9 /?o&ug 3 O@ً/:p37xڴ2cp+gm^1MUeLݥ C9n/5&/֚ePWf H6IV݇x4֋o{΋fɭŠI^(ډ{ULthBd9E/,3&8MbWmZ= _^ca^ܶ:`wz_o0{Zf[nb]gTߧ͋gKݥ'Ba8ؠRp/:b%ۛԉw7D5 Ӗ)'mwSnѰTyeέK`]vBT #K-Ab8T2.ŝ֋%t͋;F™QV #M 9nwZYn_Me'HM\KtSQJLA7̠,'.X͍%̍H+q HPNJj؛1>;,wrn]d[M[RܓIu=@`75=-$oɌ Όû/[vxmyz"cyZ7QHe?͔^6}^F->ؒ*$ |~=싛 HD@#pjϹ~hfvl?cYڛP.rG>{5,ٝ $Ś 3ً :66zZRש~ !urnlbBYݠOʨAFН0=HY4љ2+%#;ؔ(BpיWƏ1¹,-8~ }uLmka",X\OUXFr<3s+6"LD$=wPØp~*u8ͺkh;waWQNHE.ȫO<P3_b*2j!Us/I R OՄ˷Tj~ zuQ[j޾`iw6VƩ#UMjuDM;;2EI)W c%"%[G mRo|OqtJpl">qLc贽q*[2kraRbdroIѫos@t6ѥv"+w!HxXy 5zm|!}ÐvuzCvrŻBujʷuEb)tZuDQ-tH"u?h$v5:)x *yU z]dz c{|}i~|{g{rS{0jзzbygYy}PɭxGy4>קz4{*gU|9 Z}} ʝ~bQ~EԂ¿8{{}4~* ! prPљ zxrj ̓maXدHP)āG:z>4l*E!エjxP/x9fցAy»rqԸi[q`ƲAMXD7OͬUG=фo4TJi*!ӟԅÞdK+//F-ۇ=y(* q0D9h"v` WOXF<=q4-:*ۡه5!ɟчfo8@хgk񆇿SxʏphY΍_WNFD5˦:-z^$(ܠZ ‡cy(rq|uq_u nKlndo\9oTsoL5q Dr];s1|u)&Ҧv,xCXy0 z;V|~#x4{ŵvs}=skPs}cVs[øsSQ^rJHsBKt|91u0 -w%ЦxyV)zv ={}.T~σgZ}q{|szkycy_[xSw&JwoB4x9_y/xzV%vo{褲|{} _~zZƐ1{߀t'l&c׺~w[hg}sRƴ\|JP|kA̮|9e}9/u~5%8pP0k 2*ĀŶlz8s\kw~)c 1ZR*ȁGJ؀A`8|/d]r&( ![U Az@©rj%bX҆,Y궆QaIhgAA82„/)=.&ㄹFZtA yl.Ѐďy>rGj ҊUaYF;QII,@77/,&܇T6 db q~R2dky&(qڿniڼx a_;(X̵OPc܋yHl銥@"7X`.S%ߢ6 ۈ/%}nOxۓqq6iE`wX&Տ}OŲÎG܍?J 6SB-܋%\5n KJFx͖qw(in7`W˒NFί琎>s5\-^᎟$ѣ1C rl5SExۚ$qG7i/E` V޵䕞N7ߔE=O5),u$1oŒ 7w6umxYIqY5hk_>V2M^EO<4Qɔ,6#~’.Z-= Y,Ǜ~Ĝx*ph_^й|UOULtaD;ǭߘ3q+#"(ߣ5 TuTހ~>wŒ:p"Fg^ԠTzZKÞ%C1X:ܮK~2*C혡"_6ԤeF 1&T~2Żw0oXyg^2]qɦ\z|ޘzzӈ,}%zƇqg{3d{QV{Hz <z儘/z˄B$Gz"wKYwxxxtexАJ=y.y$yьnZzT|~zYGp+zPczӈoVzIzwٕg\xDx{y ?my`ayэ2Uz5Izpqv_0svY!uuYxт{wm{+0|eD|;T}CpW}€6}̀} ~z~m~Wad~U d~HB'~:~~-6~`" }M큀5 ֏ʚ~xgã@jw~݁Cz~1m~.ar~!U/~YH~;}π.k}Z!|~(~-~N<~켇~@~~'~x~hC~Jy~4mk~&`~0T'}G}}:}}\.^}$/"u|}}.Ԉ}zȥ}}}ȉ~}Д}}%yN}m}`}MS}GR}lB:}=.+|Q!|^|Ŕ"|{|Ǥ|Ȑy|܏/ |}} v|Ox}il3}$z_};Sm}@F}0:7} :-Y|ń |?{T{^ҏ{Ƥ{C1||0J|O*|p|jx;|zWkA| ^|҉R|F"|9i|І,|| {{-ݿ{){;{R{vM{{{8| w|bj|*^)|nUR|E|9|r, |WS1{ۆZ8z*z zzŪzמڹzv{{8PW{^.{6w{Nj{}^{R{|F |)9A|&+{߈{<5zK:z63#z'pzWzzyzٜ z{{w{Djk {(E^{{LR{gE{8T{*{Hzzۯyޭyƪ3y Pz98#zonTzƑXz1czÚwz{jz^{Q{2D{26{(zyƉyϴA9yЎy{3yRylvz1[zOzazwzjzA]+znOzBz4z'zEx&Wyyzl2ySyyUOyyV"zMBz$[zMvzmiy\OzNz:A8zA\3z%^%y'xysyhy7yHȶyzyEy̫ y *z uz'hySZyM5yC?yÖ1y#y_w*bysyY`yÆy2nyqhy7y:yy̨utygx䡇YyNKy>1y0byG"6xiw{Jyjeqyƒyylya%iytٛyyQ ytx gxYxJyH=yb /y5/ xfCwLyLxix(±x`yLɧyM}yk1y]܁tytewf^xLX!xΤJy&w<yD . yxT?wj4y,6,xmxp"x\x4,xHy:byRTwrsww1exW}]~+Pl~NC~w6q~(~~U}~孃%Ѓ )('łǁ$[t񫱂ҞS뀗wj_^oR€E^9a~ꀚ-~Y }o-CvM췢LBD؃Bv >jG^+QfEF9"~ ,~ u}V݁dE5ԀKÊRoÝ05{v'{igq]HQ oE|~8~V,Y}Ѓ }☀cQiœELɎ̐N,ui^~]J~/Q~džkD~8~ +}WE}ݘK׈ Mu" i~叨~B~u%~h~\w~P4~zC~J7V}소*}T|)~6H~~´~z~|I~^~?ׂ0~9Ft~3h~BK\~YO~OC~!i7:}Ȉ<*}^,|eK~\~q ~2~k~Y~Bb}=}ŕF}Ɠ{t}h1}ˏ\ }_P}C}W7W}\*=|戺&|ߦ~K~ ˾}ͤl}8}N}I}'}gÁ}kty}oh }\}P}&C}fy6|)3|YY{{~!@}ҫ\}L*}n̳}\}UI:}<}F}t6}#g}9[}TzO&}<BR|5|[&{Ћcz̉j~Դ}l}Z}),.}$A}!@}~|р|Ns|ݚg|oZS|M|ٓ@*|3{%}{Rzw~:}ʙ}D_d} |nr|B |ӦO|t|s\|fT|EYN|L@|e?|h@1{3$,{jyF ~b}"}9}Ų|}|Э=|% |&i|6r|!eq|FW|Jy|i=V|04{S"Qzyuv~9}ɛ}:˾.}˱|pz||~|f~|{q|ivd|hfV|I{|l<| .{F z y4%ۦ~)ęғ} }E} |<|旃||Z{~@|pGqJ|ac|fV|uHk|^L:|")-O{iz"'Oy`~38}`g}P^D}0w|V||NO|c}||p|pMb|}U|=Gt|w9|8#,3{ʜ%z3My~5˒}Ǹ}^ɼ}  |g|ͼ8|щ|u||Xo|b*|T(|Fv|n8|d+=|'z[zީ`yTyzC{"{q|хT|\|,|s}'g{}`[X}NR}A4~ 4~T(~2>u2 ӽŇ ͆f"ⅹܚl׍]Ҁsg{0[OxBCL7<+Q~QJ҆AMN7^CԄX<֙k&ss/g`[FZ/OqCfb71Ɂ* c~Xok#Ȗ+MnӃӈVΙ(чD[ȅrفr4f0ZSOB o6{*=~ł8}_ڥߑ4oY Ǭ֏`ƂŘ|!0r=fɇAօ65X)~ }ڃփ얨ЏyEƂC52&ϗ~z</r|emYOMA5R?G)~=}ل%*CAߗESYA~JGqg+e, YNWMd݊(AR 5!(~}Fصoϖ偶޻S6 җܖހw􊩀 ~Kْrqie@!YXMhCA5a~(~ |q&+*ŦPȺҀـ>qkZ+}q geWYUM&M&AZ~͌4~J'}|fZج*Ήl3 AtS܀na}|7p"dXL~ѐ@~l3}V%l} ,{ՉօҰT۬bGrŭ١Gɣ+y30"}~:p~d~ܗWl~=Jh~|=~%/1}r#|{_˶͂DwűP=oC~R|~ןo~c~OVc~{I~N<}0}"|{FW{@՚6S~LȯLPuD6~{~0o0~+b@~x]U~aG~,e;0}ՖV.b}Tj |sE5{̍z)~m;~_~^R ~D~]a7~y*g}U}E|AҪKuqp߀u1ĞZ* ~˴yt~ȱlb~^~Q,~{C~6~m)a~x} }2h֕w͸xYypъz z'z׈6{c<{}^|%p'|od|XP$}BKm}?!}3~(( ~~Օ~X̜~w~Ÿ"~ڭ<~ҡ%V~ӕk~܈|~|~~oՄc<-X,RLho@-4c(y}I}Ä0}Jp.˔wԂ'|>o{\ćW8~LFY@p߁44m(;.DWu։%Nm-HEr{OoZc?WPKr*C?3͂'g(~9tύζ5«K؊„Y{΃n˃7bӆWrKIY?g^3v2'~ꃰ~M<:9ɡ>󒊵߆T?م"wb1<{J4nb‰bBwV.HJ‡y?;3'.C~ѕS󆿘񿋆$b"ѩۅ+4y9z=m^aς$V-ꊯJ>2&І:~/ȸ7ihUz^rږF0z[BUmց㏵aӁGVAhJȁ?>3``&GX~.-вVjc/ߡ:b+ڜAV͘y:oyݔ{maLV5iJπč>@s2%~׉W}.ӅP؄ |΃q잇i./yom#@aj UـԑIq=q0T#~}=MpQ"B02`$\]턣lxSl`̖TY]G1T;e}.*"~`2})αmyЄò u߂쩨eҁ΄rx/%pl Λ_VS_\ F:z-~K ~*}u8RY꽜 v0bȭ <ʏh§σEwuk'^t^R%PE^8|,W~?~+ }2%ͪMȄ~rւ!*ގ߁ǂ3vـ楣jw}]րePODE7*~&~ |ԋc"{ DZwMö3)ڎ;a5}v8Tiŀ\nONDC*6`ԛ)zW?~}(7lԄ#wں5e;ōLQui\-OrB#=5S(Z- ~LN{û߻"DĿヒuZ޷Lut*hFԭJ[WINA"4TL'^b  λvtwzgxLAxy]zrzw5zx{Ll{`T|,T5|IAN}X=q_}1k}%j~݁5~Cݑ:|oG}M :} }ߌ}]}̏Ċ}{}xa~kc~-_dž~lT*~H~<~1$%@-d@#;ƏP&ZܱqZ\A',͏n ȈEwԁk7؀_}SKH8o<0$ԁm5\fXbw!mһ p> yqmsj^݃xD[w:jR{_6=SĄH-"qthÍ}Ռ`F݋Lv>j@UE^YψtRPG+}a͢ڇC>1֘tЄ8h󃸔]IRmݑCFN;.Ӏ!<:; ]䫄؇g~疘סH#*GtFhlq]Q D9, U5:^t܈vѭ֭_)I?fޢCsig2\$˜P)lUDI7ˁ`z+vȐȀb̉9?Vej对tJ~s g'[ N҂b5B6\Y<)ѓB>;.(=I@nx&ɴ,߅ݔ+}}rfqf_ꡞZMiNAL34Z(ݕE~̊){?ɵЇn|R[ шل}Aqrpe2Y95La@,3͛:'&WF= <̉MhF)'yż8+'|sqHdXiK\?(@26%/ Dk!)qWG}e=Cv{8^pFd'W֩JւY>/u1Up$  uD"vCX-w*yw򡫑x|wLy y_zsƌztgz[{cP?c{DG|z9-|..}I"k}}={{|VU|o|W|/8|~ጶ}sB#ĕ<&Vuz;ep~hsHf[ &OӇBDI_9E ->"(דw)1a|ÎÈǓŒKH}rlÆf`Zԅ'OD9^/.;":P6 ##' _먤ݎčeY}@gqɉ"se/Z _O HDX߆9y.Z"l"43xVs25S’H^[ُ |rq9enċmYuN^D9U߈.I L")u3ۏ,0%`ݍ %/6{pe/A8YN݅DO49p.O"́T5؎[|r{2u}?{z^pcdґ Y%O[DYύ90-(!A!|ȤTȧ򠡜J8zo=dvYʒONυ-Cr38, kyP  VC@:^ͱ(s~Sp‰oz`?oT d+YSy M*AׄYo6*/CqInٱ:ΌҰȌ Lڊ =B3yˇln~cXo@L@,4惍I(.Pyw@:NĮ^GSto異y,'nsbcW3%KF?U3l~ 'aL/֍1鷙U𯛋nޥчũxmVQaۅV3(J>N2 % }5* uӶ5G{4_Vb[d!wنlFaUTI!7<[[0ă$ #,aŗD&Y_:OjS^Z&lw(kS`S[TVH/ ;r/%#]ܗ) `^ %ƾ@TR֘XhXvyk'{_Ƭ]S.gGD:.r"QW_\d =s#tgsvvOwZwɒ'xzoyoCycydzW΋zL{6AI{6 |@+| |OP|꾷zޙXz{`{Vb{{F{ᑓ{y{n3|+b|tWd|LS}9AN}6J}+$h}*~~ǀ޶-*x'D#HiyˏN;n/bK3WRL_zAI6Ce+5!e ~H>τ}w\ǑoVymÂnR7Gb΁WPLDvAIQ6`/s+eF Ǽ`o_ėf(X>wEx̎2mŒą2bsVSGKBA>06!R+ ̂I~֏*y:h1B?xm!a/a%fV?KruA 6 f+ӆ d`胶Ӗ&Tꓳ3aϗFrߏmw~laUK lj@H6+ӆ %C{ӛ%ޙ䒵 sy*R&wI l("`̊mU(PKMY@of6rq+ H̓r 堹𞷪ёӡcf!m8vjk`AUK8卻@6P*Յ(8%¹ȓ==1kR UÝ~_vAk.;`-AUYJ@ 4兽8)J=XPy\[;8gCH-L뜅un2j_U: GIՇO>C2ЅݏZ':TI¸TU?+D͠ŏIۥptŊiꉯ_GTaۗ'Hۇ,*=>x\1&!,-HYЉԸU+_{ŸƭT!QaStQi7p4^8S2,G;ن[04$g,.Dy- ㈫ɐ cx@W~t"sp#hH]_]R%xF[";:t.مE#.bim R4WQ^=D ޯ}r g‰4\OQ9E_9m-?!ŖN?Y iv|0¯- tgƴR|q f:[[PVD['8\ǟ,|h, t܆` L?BޑɌ'J¢ݎ 1EƸ|r{3{){w{h{,Dxy?H2yÞNqyTz3zzuzj.{?^{Sz|H||=|3O}(ki}4'})م|vd 4ٛי~ܓ~+~nG_~\tƒ~~iŐ~7^R~RSm~H4~=~3G~(W8~+~|~]Ү1Pߝ}dwB!z~ٓǂtniLo^8S2B'H|#>3L( Ā?PVĴMŘOY~H)fsۑni#Єc]KRHAh=r!3=( c΁zC fޛ י\֛Ƌ "iQ}s:hr2]a RbƆGދ=Ԋc,37) ՃㅜGd)rV&a<1VG!|ܒDr*gA\׍UQҌGe==3(ׅWą5)38k4$eMÒ̑|5{r2gN\Q⋈GҊ=Ɖ3Q(~H&NT)n𓎗r|8(qqg!Ő\;sQq1Gvh=R_2ĈK'4+~}φ>̖5*W'ӛ?{q*fS[Ռ$ZQ^ G f=[EЕHPEܑ: Z/ $L,݆5 [&«⣕J9{7z| LoڍМePZvPqD9.~#M/†G M2aJ\ϫȏ\Z_8yˎȣbod~QYcNnsCr8/,!bʆb Jy5ȳNwyn[hc\$XًFVMdBf6+B w3͍ 섒9yJKT"xT~mRbM'W?-LdAUf5-$*Iqň ؇lѕ~٩k~U1 zȶL~wo^lӍObbQkWHTKx@Nۢ4[C)1䛽u N[RDʼn3nŐûKsvˎll[a=fV=eK?Q3(:0={`q[3r=sP9trt؅lu{@vp疺w f3w[xkP,yEQy;+zZ0Uhpukeag<}Vώ┠LAʌ~7,eX!?x@P <·ì3/c无ףtau5xj<`V&Kq@xC5e+>H$ qF8Z KCۯќ|HV Z[~Dthej_U(u/JS?la)4mS)U׉n ˅4`,͖{}}vs4i)Ф^ƏT0\INj>Fz3:(cd&|gE.˙3ʷ!B]Aͱ}2ir˒%hNZ]ۏS=ZHyZ:=7+2(~'JӘ8ĉgJz ©WϿs.9$n|h]qgrƬ\󏛪RNm G}xy<)1&6$=Êc<ߘϚz~J(,{bq0fر\QkFK;!0 >Z%"}yʊZ׃¨˩pq qXfrstuӜDuXkvavVwLxTAy6y+}z wze{ Ct{fvdvM v'wrw~ x t֛xjx`ny=Uӕ\yK/Uz~@ё{5珏{+| |P@|[ 1}Ψ|MC|?[{Ӣ;{ᇠ{~7{tqd| j<|$`7 |Uz|uK#|@K}A5G}+l} }pS} n~)Tq[{n~ ME}ŝJtj"_ؖkU%vJ˒@ 5*ݍ. 7  }a6†4΅ӏ˅>}psXiC'_GTYJxZ@RՂ:5*+$ b6z E⥨d+$0ܞ :|`燒r׆iB̆C_8ᅵT :J%W@x5ل6+x$!RM# o%d;OT桶\{<{yrEkhƗp*^ÕtT.ʇI&.?5Îچ;+-!kZ׊h gN76[Q]2{Xqh9^A1S̓r:Il։x?hL5pB+Yև!#h$ 5M=o]עĖXɓz񚑑qngC]܎SY'I? ;5=*팍 /7B ]xPf} ̚zp]g3Փ]:JR⒆H>n4QR)`I+fΈ6 mxf фGz3ěvpiifLw\RA, H=\2(J:_?ȉ5 b\Qy1R)# LКBCy0oyeݔߛV[ߓgOQbG-<=2u(;2l g*>ŮʕɝSBƒ;xĤlnߖ(dؔkZɓ-%PoFp;c41& ώ}EՆ/ß}ܜr+@`Ʊn|Axzm0cٔnY +OgDhG:O

yznze({ [3u{P{F*|G;|1X}D'C}~H}-} !}Ϭ3?]$2Chpwnk~d˜c~Z̚"~QPE~Eߕ;bgk10q'ӎ x/[ n}KT&kooVɉO#:Jw\:mƞ d^Ԃ[ZuP^EM;I<1,J'.0 񈰀ʞp"̦È{/fvbՆm-,c^Z*D OE_"d;!21=5'{jK $ J"T@*r~uml,Kc}YOYGE; e1Z( 'xߍKY ׃c‘$Ӑۏ~]uP%l#Œ.b皚8Y-fND:ÒɈz1'k5ex `,ؖ~akt㞰Tkz0b_T X]N_Z)DXa:k0'&8e qȜwT^p7ZM~ӕ`tIk,aҚaX M0 Ch9ߒlJ0j&4(f [`C?Bw6q\)}㟳t+:j.aGI2WfMe[Cb9$c/%(i0 s09<+징ZFq N7}sj `ԚxV—L[B*8dʓ9.E#]l&j X|o|Kr؜i(G_q}UݜK'jAg_7z-"򎭑wr פµŕ#4{ |Dêrfh=^[FQTyJjf@T6WЙ,J-"-ԓ却 ̋KGě#fI䅱B{dq-[g=٪]S*SbI^?O5B眺+:OP! K ɋZ/aϠJ^{& p\SrfJ¯\X$R^He(d>a4]*OpQ G~ ދy*HMpʞzX.ofer[t1Qxί^G{MN=yݧ>3|&)k+ Hus_mԓ"nƌoЄp{|#qsM>rj#sr`ѠtlW7u!Lٛv#BKrw7vx ,ɔx" yJy(_zy{~ t?Ls t8yt{uurSui%#v_Πw5V*&wrKڛxQAJy26z,cz"e{'h{S #{|yz௑ynxSyyyzԨyqWyhz_dMzYUzKKu2z@{6K|;,M|"y}6#}0%}y}ɘҰڀl]Ca!z~~q~Zhba~_}U\}K}@g~R6E!~,t "]1"$(c*Uʮ τyyצ߃pMg҂2^lT zJh@9p6F,"ޒC~́Sf΀įo/bщ0!oy'Zp7φ.gN[^6TJvG:@J6B,ヷ#&cZ~͊ށՍmӌ^ׁZkxDogf]ĞTQeaJ=@l6 ӆ ,ͅ#;N؎,hl#w9d[px9}ofA]$@SIÉA?—5ɕ4,U"뇛GyDžMՃή;P۪?Àѧ䑺wRneY{\nS⌃I3?Q5jZp+x "执ӐS AAjq@YcK`2Tӕ-w4n4e,[QRwď@H{A>ڗss5 :+Q"%O."ˆI(?#Bˆj"PLw0mSdn#[7œQÛdHb>c`(4+5!E.ۉL=ُ̈F vv£(m_%cß+&Zp>PGDۖ=̖T4C*'ґ)p͐Jk x)쉛R}ӈ\v>,l[ТbKYtO˜>Fl<▽3h*dr hhbJᯒجuEkgbm5XrvNޚEh#;ݖ2(˕ve8 vÔ7F)X~?zujˠ a!!bWqBMۚDg:ۖŸk1'N9r c-#Z?gdɥ*~.ȸtlʵiɲ`)V4L㚍Cm90מ&2{Ñ8 ↷/xͨ'ݧ5ČPY}si_DU:LBǪ8 Y/ %iYˑ X$KJޓ3mQԵmDž`Wo}԰tputPpl7qcdrZऒs@QtMG@uj=?v2Ew'x3x, y SyzĒշcs͌t.t|ٯstXtkubuY٤=uPvFw8D5|,?#Iŕ[EHKsF0լt\vlצmbO7YmO~2Fz=VO4 +r"hGWIb movn~Dn[voLnnofQTp]MqTȨlr3KsZByt8ӈ5yI,P"4#% Hʗ elz\s*ĐjaYnPVӌGY>R45^+Ԝ"}ՓώI8-ށOzYrj4a XSeOяF\=4R+i쌽"fSS?"ښ0$:z|9rií`lWsNqE{f=C4Nz+"PUlEECنķ߀̵֜z5rii_4V¨M֦Em<"23qe*|ؐ!%k$ VTԒ`Ey8sKݡoyPqbhd*^ܫQU稸xL8#D֗;f=2*!蒿!~T:R&}]y$Hpðg^MdH\CXTO_L DC:d1,'A]Z Dc~>J#{ItNl@df누\S0KCC!:ᅰ1z'6T; Z\~\_lzt 5lYd [%SƊNJ Bll9{s0zQ5'zP S<@W5 z@W$sϸ6lVBciDZlMRvZJ!tAY8̤/9&$@ 3; )ټnvzGssykߵQ{cK[iZNb\QLIL[@˧f~8/],D&͍ ɝE КוѼ~yXsfksbԲl}YpbP쬪DHoI?만a7jf.ޢ,&0}(W@ {gliQyvs :k/b+XݯPזOGCP?Ŕ]6Q./5إ/=-t%;⒀ačh њ j3<~} xqiࡢ`MW$Nf]iEŪ˜Q=QU[4,ߗ?$\>9zT, }ϽDpwqmiJ`VQFMzaD>ӭrv161wr,iYx" z&z{|Y}<|~{u}Hnȿ|g>{_{`V޵zENʲyIFy`>ty5z,7| "}1(~(~ MALi݀{,unAKfg^v@3V9~N?&~FOJ~=ݬr~5s#,"$<m聅 Ao{ ^Zt"?mWe]ٷʄUMÊ=T4ݩ9z+񦲂# yT`Ѓփ ^"dԀzbKs!lX ecT]KmUUM(WwEiy=>}4Y+ɦt"pQ͆y܅ g1YxyksU_le0\ET L{DI<}3܈:+9x)":䢕F jL-xBZr}lXŐ~d\SۍKӰCݮ4!;s33ɋ *c!-1a࡬ О0Ă%̀x~Ib9FA=c9 0/( bK VwsqݿKkJc4AZLBP?~Hyu@^ߘ8:Q05t((Ҕ 4S9a8LwkңDqU[jNubFYuP GΝ?6:7]^/Wޙ'IDRMӔ;,8]ŅȘ3v]pj6b#}XݷGO)1F8Q>h6}4e.vdc&[̙^^sGa!6&jovf߮5pSiaͻVX+HNUdEDz=+5-О%z:=g}j "2ןӄaeAhvmyohiGaFX-WOMzER=JjF55-+;k$C]t ˢ{{z{zؑ{{w{{{|{|{|D{}E{}{{}nQ{}a;|}T{}F{~#9${~\+-{G~~zu~yayנy˚z!$zWzizzzՀ{Izɀnyza`z逹T8z߀Fzɀ9z,zV#jzufxxxk֎x̆rʉyyW y yۄz7lz@zz=o~zb.zTzGzd;zM0[zK#uz?Bv w=նw{w+xSްOxy6ypryzy݆OozKcYzV[zI(z5z ;6z . yυ!5yE0rps <s|tQu2uĕOev`uv+wfy@wlBxfi_xSyXG"yv:Ny[-RyU Txm0q'uަqءUrSs:`t@tΙD u|Qv$dvyJw/ljw `#xRYTxnjG{yQ:ny+,xxx1to娭$pRqmr3ߺ>s ss*t ueنvyvlqw*`CwƐSx@Fx`9x+xSAwqAn[ݢozipRq8.r*s0s񞧓.tN%ujxulsv_w3YRwXEw8w)wv@!m}\n__9oOƁpL>qOyrQΟs82uw0kl˩\mFo")pUqQtr=\fs }w)}Ƥ}}t}L}}} x}l}3`}!T*}"G}r>;p};Y.|x"|YT|6l~|_в|.||ń2(|Ɵ|j}}w|kI}v_S} :SH}F|:||-|k!{ׁz͋]ڨ{ {0Ĉ{e`#{d{؞v| !Q|+{ |Cw|[mj|t^|VR|F7|{9|V,| {ruyKyyÅzH&zz{#{[샷{v{;j6{h^|Q|1E[|-=8| ,{Ä{3x\xnxєˆy(`yhyVzDĐzwqz͌5v{il{\]1{P{̇Dw{ڇ7{ˆ.+J{hzw@Jw}:wxYxũay 2ysyѐz!tuzwhzɌ\{$GP{d D){7{|*{Kzv&דvrvɝw)Uwx7hx1y`ymuyȐhz$E\zPz֌-Dj{7{x*zΈbaz v$uup̷uڢevA`v؞!pwxw؏%xk˂UxΕuGy8hy\z(P~zckCz6z|^)Xz+ yUztքtuebt3u]v'vЛawK}w˛:x5uxhy#\FyOyԐBy5KyS'?ymxWes#s!tjtдYuG*mvvw4xw@tx.hDxZx;My2@yL*3^y6h%xw~Mrլr,s1|sܬtuZmUvȍv*wtwfxLYxnLx?yxՓ2x$Jx7|w =q1TqǶ.prr|s,jsŭqt-u[iuv"}wZvWpqpqQrrssәZtuc"uߦ,rv eCw'WwuIwۛCȀ}%|}"}~{˕Or {ԓ^e{Z{N |A{팒4{)'{/zDd {=){{{/6{NJ{nT{l {o~l{|q{me{[Y{-M{T@x{^3S{%}zt=yN .{ ϖztjzƫz㨆k{颯{*Nx{,͊#{-V}{@qW{He{R0XzꔳJz㒜>6zŐ1Zz$yxmׅzz z'zzʪzTz񤧉z} zRpzcz:VzoIJAz=ezp0Qz3t"yDNxzΕzvzkz1Rz8zTz|z|szozbzxUzHnz;y.yƔ !y (x4vzϽzzlzPz> zBzKzV{zRo*zbyTyGzyӚ:]y-.y\uyxlXw|Ջzm:z?zUVzu=5zr#zs]zizc{9zqnzjaCy0Sy$Fyy9+y+yG *xDPjwԮz&wzxÍzs|f|oYԁl|M|B|}^6m%}*\~~~}M b}z}}|}H}>~~ ~5q~^}~ql~~ep~YԀ~N/jBP:6O\[*%~$}_n/j#ւֺOw=}.31Y|r#{zeF5~~L~k9I~A~}Ᶎ},z}m}a}PU}aH?} ;|F/o|"{Nz.v0ȯ~۰~H~=~ԝP}ڦn}d}wy}wQmJ}N`}S}G|ᔠ;#|~.{!nzy5+~g~t´~#9}ڭ}}{M}Ex}4l|}_}!R|ݙE|`9g|@m,{kmzz9yьE}ǎ~~mJ~>}ѱ%a}}_)}%tV2NE&x0~Z0H*"݆(ooׅґ=fSy plނ} a U|Iс5I>$2n&+y~&SDƍ*3:񅫋_؅+&28y7nyl`MU4RIO=]27ƃd&Y~ XÒVA8 Fۍ̛txLYx㉕ky`AT (It=t<1%~w~ ̐ZTIO71' ̂ҐJXMώ xokc_TH̀t=51S%w~ކ)}o18!4<ʱݘނGR,΁3Efw~kLV_]T#4H슪=j1%~XY}+˷fŃς\ԁWGܔwj֕AU}ހxqׯQepX[ KH>2L~ա%%~v\]}ېh }D 7tuDvgw-wwڙ x}y yuziz^J{R4{Ge|TPV#̓;Ղu邆h;]2gQ́F;[}/F#쀟Tz዁󊼋9,|DRpUˇ)Gt;hU \„Q|DF.:ӂ8u/g|#‣s] ݵ` ǫWڇ=Oksgф\C2Q2E낭:\/Z`#逗A.ZR͔.t+5ȕ\u񅦎8~ sV1g$[BPEn+:ه\/&3#n;tSľs޴f<͖5𔢅Q}~@MVrكg2u[ĂDPX2E݊):M3/CI#yr~ƆNFDUÝ|-*&4C p}ѓr]9fd[uZPEb::&.zE"]jT~()ùFJģдA=G!];|5}'n-q҂GfPf_[:PD-9-  Fx}»p̅[Vㄿ*)>߃|q8e߂3wZƔxNd~B6d+!ȍ~I}wįƻY,tay ]m򒗃ܣ^K_{dpge5YtFM3+Aۀ@53)o~Ǎ}يSІ^ŅhŨӭ'̄3Mƃ.{i7o݂:d4X]]JLh@z4!H(eY~ˏ_t}hxߺ޷+!Kb3|†0ẑo7)5cvEWaSK+$?Ù!3I^&g~l(}R~xM޻pGڧܐރ녇z%n.bV~V J=˜1ɀz7%]5 ~D㸋T+󄱺, 1 ҃$yumԂGaꁻUqI!<^<ހ 08$NTspΏ ~ҾdžĆ0i9Xľ/I5DxmmarTŁH*|Q;ցIq/#EJ\ g&g2s tK.?"K4(yn_dfTܬD%8 ‡U*v[kN`؄UJ*>2XF'5/򺮊]ɉPXi̩͗ 0 s+kvá3Ȗsx͊ȯۆ;tɅ2iG^jC6RȠnF}s:A.ςÙ"E( FW7O, )+r+5ʳW @CtHhۅG]Z QߤBE}9<-! >- ɷ_[}‰ÊIo#2I{aڷ~j[is_ͱbh;a\P̈́ jD8},P ؂] 昽rgsWg*tDHt\uvkאw(wӏwlxna2xVyK zA@2Nz5J,{L*+{{|xxEy By^ ymzzew1ozl({ `͋y{dU1{J|C?҇|4|)}#bz}L>}\=}ٱ}ܩ}𠘓}喋$}Ɍ}Z}v}ln}`}U~(J~d?~4x~)e~R~ ~|$T 4^נ?zam ]vP"k‹`A~UH[JdU?I4>s*!;Xڄ/=_}HPxSيƏl;\u쌷Hk,h_Š gTىJ?p!4)W*N3O5ȌϒtQ7u9=oj~_CƆTT҅I1?@4߆_*P,W5*<:a*Y ,FО) wyF Ɍ1t0iي_8^K0SooIH?54*"4N˃&2В I N8-+/~t؎|icÍ?^@SuI"#>_K4s)Ʉi*`!Z菃BvzlÈd ~2[csJhމGL]FSBuI>ȅo4#W) /BE;M hMԞʝ؜2њوH̘}іrԕ$hOj]ꑶSBH]=􅗍2:' Fm%ǴN $ZSUr_3ՌUËP}br`ug]RɒG~I<q0ڄE%.ƈ `fvVɒO`$|o q)QfM\^aQFx;"K?/҄$b**g ݭ3rt'~ֆS{ԉƢq:f,[t%(PmEږ9-.`"ԃ"S6 ˈ#WӴћ*$KPX{)p`Ĥ5e{ZOzX,Cٚ8bZP,'!T* ݁Q2a9vSݶxȅC7 zp{oKdćsYˆqN{VBȅٝ7&w+ i PrmK/󍀾I8׸,ΊF*tyqon􈲬cX pMiAy6*{9ʄהvw=8oռ"ϊ,xn5Űc9 X-L@0 4H)jPo-rfq*~r srݘstwu]}v-svh%ww]x4R1xGey&|ry|v|b雲|]o|z|T||q`||A|q|gDm|\+}Qwb}hFƋ}FXdwEҕ![oԗM*8y\ndThjY.O<)EE=;PU0Y&7W)]VX4#5Eb)S;Eיx}Tn# 4cŋY0ǐNŏDLjF:^/$ 9Xy ٔyD ~C܂7wٙmcX|NuGC8ӏ"-"~n2 JOTϓ某+cƢ*w=}lȌlObL_6W> M=BxS7~,i!yB8 5 ]M=֐7ȏ[H#v@l 4:az+VSLPA.f.6$+>ti[ ot95s_;:'6EuЍkOJ` VK=?mx4ȇϗ)zY녞 #'iûXxu ,jy_U.J6;>وw03(ksL1ۓ1MqܒRtcKٺSɷkގȴb~ߍ̱tJ஝iƋ_TMI<.g=È2o#'Bp7_ ՄBcTё?w 2~"Ŷ*s+h_^CSffH>Qv<ѤS1`a@&+чc\!%5oEpqJrTsG0tBxF!u%n,?ucmvX~waNFxCَ+x9eyg.Ry$z*zH/za=MuTau;v/Ipvݚw/8wwUxCmVxby,X!yMqzXCz8j{D.L{#剺{{d{uzڟz_s{{ {BƘ{qv9{lO{b{W|FM>|B}8+}@.E}S#މ|}J8<}͆$} h'b "<ȀAqvsCl~b5~WVC~L쎽B֍Y<8E.F'#K~F~~T[𢾝en`ڄWLB+8ȁ.Cr6#6m S$#3=5B6ȗ{~KuFh:3Ҋ4h)g&҈6ȇU VÆkŘq y&Ób{B2q+ڠfo\lRpH=2r#L'3\Ih(: Nؖ镭]U߅# #z٧paf}[ĎQQq`F;7<12[o&pሟ‡Ii6EĞU]d_Ue|֮yˑo\eCqZڎJ&PvVEԌ :ŋN0=%w򄆤 T͖.^̕/eѓ涓’ѳyndiucYYODȌ-*9v;.犵b$Ottg$85ڣ: 2q3л~ȸjxFmcvz 4z)]{TM{މ{ @:|_BPyMϣySyvwygyzz%qmzwg̗zy]zS<{\I{>ؐ*|J36|)`~?<~I~xz}\~%pX~ gYM}]QW}RГT}H~B>~x3~)#4~~d_~ ?~ۢ<ΛѢA\JjyUpqf́]gR0He[&>_3ځ)I Em I9;0Q݋߇2y5)oϘ>ef]U\nR5H >_3ă0)PtJ eݢA>mwJ[ς x>o7͈eו\+=QqG=v3Í7)͌݊yym hnʑF4T?=EXǛXx*3jnȗXeE[ʉQFG8L=d!3}d=)zOE " ɆC)ڒdsh5wnKd+ZuPFАE=ߊ3$)uߊ(FV ʄ<tkwI͕)mÖd#ZBZUŐPA-nFVÎB ^2VۢMxp;6̝RØWvʗzm&tc|ޕYdJOڒEŏsA;t-0쌑d&e Cϋ+[6KaӦa(I + wڃ/#7񏧙]|㷮rMJh.Z^/_SݑI ?04B* ͕ ܈%̆3lmnťo&2pvJrm$LrcsZ&tOhuER=v:gw/ߑ!x%ly yvl@yMzٜqr}ۧ7s%ۥs~8tuZ8uZl'vb囦vY[wLNxDhx9̒y/zf%6z!{ s{/ʈ |8w}TwnwӤUxU~xuxkyZbp6ybX yN|zD{A9y{/|d%|U||ˋ|,}LM|~ Y}}l}G}ҡi}$t@|kA|a|XL|N [}C=}9^:~#/ef~e%~d>~|~v~ ۦ䂩ނ3}"ās잧cjacW=MxCx9D/VL%%]F $À *U]/مm7=|z-s=j!a$W؃M5ƃhC,29 /T/%ލ vˋ Ёn=Ulƣ̡{䟪3ri`6W L֕Bޓƅ8O/_%ˎp_q 炲MItJ1oQ[{|Fur$2i%_&Vk/:LZyp2眱f"]WtSӗ8I!l@,l6#,;d"Hjz&ƃyk,p9*yUWomi}eޘƟN\J+GR HƓ>T57+!9tČU 8ψ^ u!n-){ xШn Wd|[AQ~ykGۜ=̒N4,*^R ^v%  f3Izvˊ Ý1xum͙ثMdhZAnPr{F<[2򐤛H)AŔjl •edƟ\yE+a6we4l̰6c SYOO|4E;|91Ȟe(6FrW! 8|/!%*ՈqHvl*xbHT/XlND$:Ē0'Cpy\Q F\jkmlqmƀ nx\p oqgr^sTt'Ju@2!v%5aw.+x 0xĐx My)z8qܭqNǫr-arwso +t`fu6]5uSqvI%wh?FxS4ϕly(*Гy ޑzWz Ӎ{{򔹮vvw wsw,wnxeQx\xwS dy!I;y>{z4h){S*O{ |6Ґg|M |)}302|A@|1||CwR|nL<{eE|\:~{R|Hљ|l>5|4@}*}!~/$~ ~M~y LȫsKzIHxvmd Zk[RFH3@>84>ǀO*g!>j`z >ܓwFA`Ά#~ujm)sd3[KQK4G>4V*גₖ!eOӏTsց:ë\'èE~+IuWldct>Zϝ:Q(Gޅ=ܖDž84*ք!zBM,*jp#Qy퍐}ČtkE c 8Z$vPߚGB=v|3W*m!% 2x!/y0Յ}FtIkg bȍY3P:t\FPt=E3Y)[*o )U ^q\\Brnçu|vdt (Mjޠɑ4aޞXҜOUF 6<1L2)5 iI=- ڌZZoŠXm|c`s-jCa+qXceNњD,Ef,<# 2ҍ)R Oƈ ڌ vimZߢ0Mn|-"O煘z {jXipk&=lyܮmqoinp`ɥq2WPrNΠsIElt_;Wu09v& wJw͔2x fxzp$pmq'yqpԫrhDsk_ͥtPW tMŠPuDZv:+w/xx%yT!yDy *zS| WvrVuRv y''vOpتnvh.w__CwVw}Mg xECdy 9ؚy/_Tz%f{Z{{ |y}/{"{{yo{Bp{1gɧW{ _{&V=ZzM{&C {9y|d/e}%)}z}R}r y}֊~J݆2w xYŀoF]g)^NUǡ4LR0B䜺K90I/&< lG _`fOPtSD~hw0o>YfQ^ՃcUPrLXB{r8)d/ႀ&Ur0P6ѓ, u/am~VwnLeV]uvT͡KڞBn\#8/Wք&لBq$ A˂ ʰbD鮔~\vR/n;bely\ޣT$ĉK*Z[A8ɇ=.%˕:h fɋW' τqQ~i]vS|mѧd7\<،SuJy-AGڊ(7.ah%f:>ےЇ $`̯3?u}\umddP[R|I"@͌7j .)J%d54 dt SŃˮK}jg!u l姓c ZӢQH-?؏r6뙜-חi$֔֌S2\ J  H]?[|abu -l6bZFQ H 9?n6X-F$F{8Onޑ! lj߈|i| txĢWkb=+Y;P3]GQx>2ו5]4,<$Lkkꋩ qyH+M|+SskʦarXgdOTFnm=OKV4q%+8#h“;JR n*ZS􁑇{_sq`*juS`FWX(NqiiET<[F3w/*ٙV":&L 7B}nҫҽGA^{*·rݦ۵Ni_עVQMNDPs;jV2xL)җ*!0N<+ r%L$VafzCorDuh餕l^UǠLCHCĝV:fh1iX(͗6z rY։TomKiÀ*jyεlr?mj%mbnZU oQۧ9qHhrP@ s5t+HMv!)fwN+wxMy,{7u4v*x ߚ,xyJ ɗDyHz|3͸vrගvyf^uru%iua~uXWuPvbGwF>x34QyD*z= zJ{K"{|Q}T{ѵ{pyd{4rzQiKz5ayXz-P5VyGSz5>,z4j{*|!}#ɘY}qٖ}k}~^jځtMxqPNi ` *X)d~O~OF*~^=~l~4*|!xf%$%KʶG~Kcx-pƄ'he(_'WO>gEFǂ=3/3❽*gH!zuΖt%ӊ,~ՉnwooQgʬa_a-W&NF =3ʝ*V!qPS},'L}{c1wVjoꋦgf\^ԩƊVu>JN ňEa5&0ƘmјݔBQ /ZrϱqzItdJkSbY P5Gޫ>6"-<%=ܙי l )0hɀfyϯqsоkksb;ʹXOͶxOXвFů>+5Ex,J$FmʙWp B ϿphyAKivr#jAj6kwc[l1[űmiSˮbnRKmoC'yq$:xr0s&K@uKmvIv x *y7{~yp>xtnqź6njkgob2pZޱpR׮ q(Jƫ&rCB06sy91t/΢ov%wP)^x*x ny{.|~*vxYuPqNtjtbճtZtRltKJeuAިv9 w3/|/s6@-A$ў2K{he ؙM f׀zĔiu;ۓ~o7ϒg۳O_V˭NpFF<Ҏ=ަB]5~-6-$hߌ :=X t4Yvzu ۖoٕgi_VM[EX$\ rz%ƛtn&g~$^^ėUHLīDv$<.;37+H,# u uQy➣tmf(]蚚TkP菳>CIwĺh@ql®gJjDOhbeiE[Թj$TIjM.lE`n#=Ao4qO+\r!'tMnnuQIv+^fw|>!z}/v/lplj jlb̼ym[5mSõnL9oeD{ph+`[Y,[Q IRAH91K(Х @ybӢ Wޝijрs Rmм_gŽ`X˵MPgHċh@ͭ08ƪ50ꉴ(Cɣ[gaRш6}vrྐྵmgĺ` X]86OsjGԯĎ?77ܪQ/'}fK  ̉uwkr۾8m>gI`{#TWڵCrN|Fّ?\6Ґt/"'(Dݡj DΖ[7Àrm-g5_ٸ5W,\N8F">'?64.ZD&T:nd0rlۜfӜ^ݸ?V[MUșES'2=Xv5 -wT%ʥo*p[H^DӅ*M6qu[k&e^UqʝLgDvs< 4s,ΘF$FCړtFr 򠊉d|n &ހhpӿ kM eDy]Tȶ,KCߠ;l3ݝ+ܩN$ј?Qko ,͝V?pK!Dmanopۣ:qܠЏrǞvsutJri^u\uNuAvG4`vU&u卢tglj Ek)lem"u1u-&#tsmhEִiYoFjkߴSm4\noƍpʨqt$rfsCXusםJtP=gt/t" sskCgd|;hiϺOckl|֧mƲ Go 8Ip,^Pq%Lsxqer̢Wsm*Is<4t=.t'r s!]s^f¸gbgh޿jO+kWomnboprq8dra"VsjHs';Gs-tsΜ@Cr soNe:fÉh%Cifj컢l]טmopr q^dr]UrGsW:Ys.,s{9r%ZsS}vE}fv}Nw¾}Jx}UyCe}hz7t}lzΐ9}e{V}\{u}<{jH}p|S]}`|Qe}:|Ej}"}l9&}},|~E +|C~;{K|){q}{}_{}͵{}|~!|3~_|N~|X~u|Zi|o-]|;Q|dE||9|Y-|  {yGyzCKz{fzSz'{D{tǎ{{u{Łh{_\{>P|+D| 8}{+{{JxDx)1y>?yJGyz]7zMzf{t{*(h{g\{XP^{D*{7{s+{T6~zޜwDiw'w@xjLxyXyDz8zNt!zgzچF\{%O{JC{Rx7E{@*{z݇uӁvF6v%w=zhwɏNPx\) x͍ y5ysygzC[lzOBz݇Bz[6z*zz&u~tҔu`uzkvvwj7pw̍?xkzxɎ'sy1g"yZzRNzd9Bz86zL)ze~5yхs\:sڝ-te5Kuku—֥>vs wzwDx Hsnx{gx&ZyqNyˋSBz63z)Ry߈zy1.r7rsTܽttԜuvF.EvUw]yrw㒥fxpZxNy]By%5Iy(yFx\iڋqLqǜrbws&Tsutם+uۋv:LvrwQfQw哖ZxkMxŏ@xB3xꌹ&xnKw3o[pUqkȼrSRs-t&ϗtIuO~v2r4v˘ewONXw"Kxx1>x6j1x#$zwjvf^nnoqpqu|rjsp=tHAu ~GuNqv3dbvWw.Jw=wȒ0wđ##iwD-v'n nг~Ƌopq#rrs8tdR}tpucv2 V[v~I5vߗ:<1wa/w!tvV0u6om$|mZnӴӻohpޯq 5rzş|tdpubuU0v*~Gv@:vw-}v|iusuH.ׅlaHmzmnpIq=rFs40|[s٨z]1z]#yUxueʾuu~vNv^wYwOx`T{xnxby>UyxHy~?~^3}'}fh'|Jaƾs^GYUܒ "4M~߆zT~m~`b~pVw~jsJ~E?~3/}-',}x|Jc~)~ ~~~~ ~w~~~D y~ #m9~=al~ U~ J-}>^}n2}}k&|Q|2~~/}U}}}Q~}L}y4}\l}0`}0Uz} |ډ?2,|F%|%l{4x͸}ʼn|韟|ٝs|ݧA|ۛ}|??|ԔxV|l$|`j|pU|̍I|=|uA1||${xzkt|y|q"|W1|I||Z||w|mk|Y`|j|>{渫{|{o{yٗ{{{t{g{[Z{CMm{3l@z;4?zQ'yy~6x lx Y{{ž{p5E{Vy{j#{yT{o{sF{~f{qAY{YLl{N^?z~37z&vy"xm tyb^}tTtͻzukvWφw;wڏ텕x y"w'ykkz _zTQ{'H{<7{01~|E$|J6}]˞yÌCyztц.zե{{l{;|wLQ|ik-|_:}T8}GHׁM}=l}1~ &8R~Df~E~~Fن569?`.Q 5+-wY3k 6_kQSHeHw=)R1&~E}@84ل^k-΃ùiYM]1R G:Ʌu;k0;~P$~ME}oDŽ+쿠㓨遤qt6}Xg=卅hu90Eh,]j͉GR sF;e2/~$~d}C(pxf1̶Gޕʢ##򀟒U1=tchY]QƓ~;~U|~p~:e}X}ϝ(L.}@ }f3|'|1Y:zzB@G <tt:ʞ ~ޯ~9|~Vp0~9`d^}XW}ʠK.}>}c2} &W|lz͑N xzgZ^N+t 4Ҟ  t~~{n~!o~Pc~V}٤'J)}=}y1}*%'|={S BzAypy}gp3\Ñ~ۆI~гz~n~vb~-U}I#}ޥ<}0}r($}R| Az*wsnsմދtbumMv<ww$x\scxgyl\!z!PjzE\{_:{.L|"#s|\f|Dxpv`xͳ݊yRayى9zyz҇z~{Qr{g'{[t|]P_|E!}9ςg}].v}"耾}2}~ }r};}'~l~(~#~ ~ #~>rY~Wfل~m[~PES~E~9ˁ~.: #[cJ3ϊbĂʩ-7} H}yVre(fw[*XP ڀDD9.Nn" QY ۉS]@Yc6EΆ"w"|򄸄qބ /ekZlO'Dc 95u.̂5" y-M6,><_NJm2]K|Sq'm=eV}Z&O%8rD DŽ8Bj-"X#HSDmʐ kۜ~ф-m{̓fpWdrOY$NCɁ}"8j-~".Ѕ,~ᄄօƘظum$BńQLbɑR [T{Op#\adیYNNC8~A-n!=:~U 44kSk#ƛ̖ȃlHғz]o琊dAyY/9NX{CV8Z8,# ~-}WV̈́L +rP+:?*k^znc,XŀhMʀB97?'+m~*|?gƷ!+TZ@8,y֙$nc`c1 X1$LMLT@쏣5p&)|~ߌz~$d} ;-ĪbS, ~ Obx遥m/b,VЀVK0?;4"5(J~T}nj|Є۵胐(Ѫt$zѣ&xWm avUހ: J >g2W&~s}|׉µ"Dsڂ?N[ぽ4wol]`uT-TH= 1I"X%m~v&}l g|W+ X\ͬ̂3NƂIǍX5«Gw tsk`wS-Gm;/>##~Q}ԏ |O$2𺉢ژNAӯUvYijg_.@R=FL:.`$"~g~M }Hn=MYr_+EˁMuYj+=H^= Q`E>29Q-!Q~Ď ~͑rErϮsŎtuA/v1vywnx'c,txWއayiLzAiz69{!+{{H|wA;wx,xy y{Pyyazkn)zb{4Ws{Lc|+AV!|6N>|+7W}ʂc}F!N}|q|F|&.|M|[x|Ên}"y%`}Tn Y}}bp9}WOU}LO~.AR~[6M~t+.~ ~-~ۺւIč쫻)YqD ׀ă$ҀxÀzm߇ÀYb-EVڅ\K…3q@Ԅuo5ڃ`*ԀKy3XՀ*ʍ\? Lԋńsp wm(Ea3٠Bhʇֆ-?ut j돞_C7U ǍJM@Ɋ5L,* zq%Xoň8Y(ъVpɖ0tׅ)}j_F)TcJ#a?Ij4Aˋ(́0W $:j%YI Ն tt> iuM!^̓2TarHۂ=d+628&߁BvW}= ȨW՞ֆܤTNZQ*~x:shȄ^XQSLɕAGkl<1"gV%؎ǀ_4.T҇ذB\t﫢,|UɅ؈z{}shڝ0]=&RLFG6;*Ȕh/N$*ǐ4  IS+٦ʆ^<(ǫTS}B6roignŠ\z*P邥E-Dd9ᗗ.]e"Ӏ ݏ_ ~LJ 5 nÇXIE|sqjf̤[O삥2DH8- ![7[I J¾ɬ#/}sȑQ{фq{f Z!N₵ Bj7b R+ށ RĀ܍O MC2.އ2z̛AQj{ pOe4 Y;Mק;A邠6KS*łj:un.p4q8rjs[t/Uu uuvjwV_wT/xI=yU>cy3zi(zT{f{3_!u2#vz6 v[wnwjxdMxttyziy^LzZSى#zI{T>H{3|("|c@*||ʹh_{Io]{sJ{ؑ6{ {̈{~||t8}|Wi*|^V|S}HЇ}`>}3c}(}N~ !~{o(nRrMpx$w}@s؋qi1e]OVS?F]H^w=o3Nw(zr[m5W!mh囸pÎpt}9ssAhv]zRчH7"=C39fe(5Ȳъԉ֣ߏ׉p󇲆Ѝ |orS…gщT\ሊRGZG†=W 2QU(s!v䏦p=Ȏbyz#g7BU{2hqg\#QX$G]= 2/(.ii{plMSꪔ_Г%ِ>I|V-{d^qcfm[ˇ~QnG<=]2b( ㆭ ߄^׎[59 ͌U1ߋ9z牱pϐf뎺[]XPTCFׅN<W27H\'a{e(p mH͍ Wq)kqŊ zX.o^xewZ䆥BPFgV;Kt1(?%=( A%mt꠩(DGyĈ٘oNd͇C'Z[]GP:E':{/׍<#ك( jc Jxul_ʣFiUy%nޚdYhO<]uD0ܒ9P*."݃;Tb d}CT։XxWncUȜ;XۙM7B΄7Ą,q!_ %R= Q>槺#be4l$uɧw%mc{bWᅺFLօ%A6b)+E LP &խbhۊJʖ쉻:/Ȉw:bliaW Kͅ&|@b^5$9\)ǗIJǦ;ۻ07vp  vukra2$V!ĥ J…=?;ҠC3^(Ld8xyϿv̉-PMu( k1[`]ѬsU(BIc>+ 2߄'P QЂRo\pevq6r@sדtzItpNueAv~ZӍw-P5'wEx;y70y&z6zKaz[t,uGuv#vȓ wRyƑwo#xeyZAyOz E7{z:̉M{0Z<{w%‡:{߆+{{խ7y򦌗z z5Czi'z6zyAzoH{Rd%{Z{OvO|VE(|:|0:}-%}S}CIS}3 T0(~U~"~Xx~Sn%~Zdw~lY~tO5~D~:~02~%~酠~g ~rlB륒!L ӕ݃wsx 9n.c/Y)[N>Dm,:P 03%ᆪ1G2ЫNЕdY:ߓ'ZRŎw`[mmc7XpN7fDkj: s0%` u-#Î!=cqq/vlō!bJhWM"!C=9LjV6/‡n%~+ЅA)mL>]ѓhڜ{ꑅw]u #%v>l?bWnMXCd59·/%&}a -lk֜Z[|"_~ǍbtEjoI`EG8V5uL'OAnn6ߍ+Ȇ$ bc ҐXP_ҡ~ si_xUMK @U`5*߆ e ] {c.Ы0Ǝ^^}z$sGҟi^ٛOTMIƇ><45X)nTmJh ςfqt,խԑ) MG|ЌzrhKС]Չ"S]yHߚ&=D12҆( H%F̄jwÏӷ|%9oy0|#R qڋmg](RrQG$st(tʇru~v7tyvjZw`xUxKXycAcy7*zy-cz";{ F'{ "{7xzXxoxӐUay 0y]}AyszjFzH`14zUw{&KO{A/| 7Z|],֊|"|+|n)|n~}ؘ}}R}o}}Rsq#} iגs}>_}kU#}J퍥}@ߌe~6~<,~4"[~ ㇦}0}<*]US |_8rʓ6v,Ā1"!h4_01vݘݎaYi{"r#넨ha7^T3lQJ,@X 6܂,"o $)bub?N9؊ ɕ~>{|qrg4^ SIb?ۅ6H,V"Cvۇ 1Ǒ7𗃎䍫Kdz^qgVt9]vZS>wIG{?p>5Z, =!1Q< DžBLfiWASz}pefƏ)\XRȍH?=51+R!gyІ ܄&ImwQurރ6:yo_f(#\L*RDHq>4x*o Ib'̇ vj[؞J!ry)DoVex"[tQBG,^=yR3j(v놷{ ]0啑(Ҍₙx؜ndkZ͍EPF֊/Rw֐mmchYՍ!ONjӘAEٖ::0&&QSBꇞ$]~{lҮѓSI5wGm-B+cHXvND_Й9/;I,$ywĐǠRkʱUܯ&vX'$lW0b@AAWMC@۝8s$-o#b!ى 1RhAXcuk+MaeFW-LΤIB7AP,É'"p1ֈ p ]Vؔ!@^c:ڶ.tߐ j.`NVD<KAw6)z+g!KTl5 }i"lmnk o}#py?qo*rfCs\ɕ@tR,uHF_vs>w@3%x(HWx؋y.yP TzcJXqrr]sr=tLx:uouev[ڔw3QwGux=_yyL2z'zzlz {͞v͘vϟBwJwxwȚ xonx=xeGy7[Q]yQrzLFz<3{Q2JZ{'ы|IY|e|P | |eI.|6|%Ɯ|%T|#wD|m|8d|Zߓ|gP|Fw}<ю}f2 }'n~q~} W~A˂M͟`݁W2v!smhKEdpZoP9FQE)oJa#h`~ctܗXkbUIXȒeNԐɇE i;g1x1'艳`@ ߅ ɞĜ@}옰Yt\Uk3OaWX"^NHw_D;܈17Dm'e͇j0وsr $acʕh+=}s"6jaa鐢WoMMD:pn0&9!nʇI=؄bР ݞQBÜ;|}sexi`i}SVӑM$,CK9n&/"D$ΊB7:" Ś֥\wޘ󡂅|arԔi?_8(U˖GLLQeBs8P\.wp$͉덫sE>AD!*,j/, {Ңar[hhH7^>T됢K%A!7[-Pvf#ٌkk[G◟f{9hqCJg]vSې"I?5,g"e %2I{„ $v6 M7,2z"pl%f \RҐxH>4x *닂!AQK{ 1nGTmyѕ{oSe͒[ۑQܐEGӏ6u=b3P4Q) [| JF&ނ˗^غĕٸysn Oe[PݬOFΏYőJ4ߏ+5X!_L sǓavD-"v3`lЙYcŘZE4nPߔGaד=CJ4*g. [{ ۈ˃i">7x6g~bun\l ~bmY<OdF,<&38ll)э̏Q?ˌ @?i҂Y$|~=tQkARa-XAߠ$NYD;YI1r(R)m< ghW5&q}Эt@Bjaf*`חW@ߤMgCޒ ::)20'$9r0~j ЉYH4\ž )ۄܛ|sSÏBQнJX|?RrO7hΘ/l_#[UpZKJA?8b].ԟn%"x =ن8܆l@pi/jK;k}m8t楍nlodp[sMrR\s'HYt(>Wu@3vR)w,{wz\x !qxGxzn%o^ѩ;pN|a7q6t#rkȢrc%VsZmtQQuyGv`=fwh2rxS)2yKyy zy{y8sGbtިjt|tlu\tNukf0vNbvY靑w?PÛwG!x;6L.NG%;򏄐.z RJ#~RHvhܭ.mwdcZbQaH 3>ҖC5ܔ\q-h#W S@G\WQRҢ}׵u˟}lTc]Y›F0P~RG-9=ȖU4ɔu+򒓜,"̑om @!ˆw+ Ὤ|䠘u C+kb;5X=O"FKT<̖m3ǔ*ڒʜ!‘g|n}M7MW:>hSi|kul0n,mhffn]äoU>-qL~}r=COsd9&ۚˆ5m,eJ#+P ׎A,*HpypÑrːi`磅XWX(OIUGe>,z50,/N#V0hW6`$ ͍܉cӖ`MyHqFi%B`6{?WR8NԟMIF*?=q04k+T#!P>-Q k'P~)oxpWhv,_suV¡TM[EEn<4o+e"MƒQD Y#$q$ ~pɣ9x^pagڤH^ŢU1jMVDTX;3h*" w- `&}ͪtwyo¥Φg$],U.XyLTCb::2 )񕭔!ÑZFɍA+IΩ}5>vo-Bfl]5ͨdTT CKySBMH95'1(ו× n%%3ՍF|fbv>R n|Ųe"}\]tSnˬiJ5AL8<0"'̕ߚO/)'{nč[ {@u޻wmjdբַ[DRIҞ&[@֜P7A/5&Ė :y[R\ ˈŎqOg|-huojnYkf殜l_TmOWDnO1oF_q9=̠r3ŝs)Upuvܘv w/gxZ!z\!l{mun}n nfCo^^EpVWqQN-rhEsYsPH@./7ٞ/x;g'Z= '#p|יwc=q^.j|0aL%XP*Ք G%?NM7.2&yʗᖺ ]ܐ.L|)žev7upiP`ê\W٨$O[藟Fޣ̖>{X?6Փ.KW&*[؎75* 3r{ov 룗o\=hRb_GV N F=r25'- ]%3Jאj񖉍 %-V(ހ{uFon?g۪Ы_fVH Mɥ Eo<Ǡ4P,%5]$49ȓm{ uΈc&zun ugYH^èmgUHLDƨ<3o$+91#7՗*KՖ䌯 r.y;tmnFf۹^?TǦd*LCТ;G2y *R8"K!SV y qz;.f;tE&g'mh fjik_gjxXT`koP\mHȪzn@p 8@q}.qr$3tSu3h!u FvLxs{uyykCsLlmplf~rm_n%Wfn|OάoG4q?IrP7ZMs-u#؟Vv`zw1;w y yEuzL|ytqsŹ\pm˷q(fq0_qWbqOWrGs?t6v-i`wS#xzy?Sy {X|4[}x^wsjv+m5v8gu_ZvVu6N8uG?v?)wu6xz-y#zD{gX{ e|*7}T~xl}Bs|m |Af(7{^Z{\V;G{:NyzFz>uW{5ϣ{,Ϡ|#}~(2~ љ0:gwܸςrclETeZ]/Ṷ?N(F0> y58Z,pӀ0#'pU pks>w j.qwSknd%]UHRM~ăE>G=5-,S#yt"уσ : tyvsӋ"q'Rk7dU\N>T燩LͪgD<ڥ_4Յ+|#>@ǜ.@z څ"Sk uѷgpjOcg\J T L-XD։< E3Ϣl+U\G"͞(}aZ雾H ™ c-_uVppTjncñ@[îSQIKB C1Ռ;$S 3 P*ĠQ"k È *yu=p)9jvc c~:4[@NRpJj.BK::2Cڎ;*@U""Ό|ꊧ z㒜(tնo64ifabAZQάIIAq9`1w)ŠT!rD< ӗE3 tOoMi7a]Y Pʘ Hªh@4!8!0(s0!MmKq җV>*s&nV~1hl[a+XůFPGꪛ?j7إ똸/X' k+UZ%= ۘbBGڀrH?mgڤ`U^W} O$9GY? $75.ͣ&+ ^ ŏ SʆGܒrm:g-.t_XWjUNu1FL>Nң6bq.!&/IL&/сxor}3lپfȱat_}VǭMEp=f5<-:v%X&e&!A qdIldese^ͻgW|h]Q`FizJkCBl:ϫn2p<) qsI t& JuDv`ya}zqfikieWjU^kuWmlPelpI%mAoc9p1re(Nsu\Fv0 "aw/6Qx{ ~Tq7nk㾿neOo_CoWoP EoH[pAZ~r9wsb1Ent(vGvwZxm @yzcz|g~qtktLfNUtC_sW>tOsQHPt,Au9E9v0ܨ.wD'xhyBz {|*}~Kpy{k {eFz^.yVyOJxGSx@yJ8y0 z'|Z{;} },z~m!΀$oje dt]hVWn6ͅ.$9&օz.Ɇy>ŝ݀m񼌎h5cZp\=TċMIaE{=ҬU=6.5 6&W |@^mr:hac W \OET}L_0D$ʍqd芥 KÄ݀log7b_E[s S>,JαGoB;.3q&a+Xv${̐ P&p [(ĄlfgSH ab_Zx(rRZ˘IpB$:p?2B+ #!Ob تe7ne/Ѫ3'ɧ 8g⣅_ à,?%Vwet*ءwu@wu9xvcxvwҫ,xxAy yyFzOyzvy{ZjzT{]Vzb{Pzj| D)z|8{}!+z}z~ Bt|uA|xu|ZjvL|̶v}%fw7}w}ѐx~)`xg~rvex~jy$~^yQyE&y98y,byyBs~\t;otā9eub2uv~ www܀uw&hxO\`xOxрCLx6{x쀿)xx rrƇ st?!t煙uTv/Tv1=w(uwWhwʃ;\px7Px|CxB6x*x]w[q Qqʜr^s%sߊA tguNu vw'tvІhwd\ow5P xECx}6x{)x:;wmo͓9p}xɾq>rr㎽-st|u*}uĊvtvGih[vh\yw|Px3DXx7xH*xkw ݊n`Abo.pp甇Yqٓ mrϑRsI*teut{udgvT[wOwC2w߇6x *%wwkbmm뜬nٚoҙ"pڗ<'qݕrēsq8tRtPt@gu[vg9OvCDwV6w* wm,vAkҢlșminoכopq7rؕsstK2gpu^[`uߎOWvz Bv6wn(vBu۩j`5kpbPlm౜n⟆cp#q#trjrQs`s)gtZuJNcuۏTAv=4vjtϒO1Jtא#t.!rf[dhrLdy>efehnj)k{:l۱Xn$~|;o6oop<bqT&q΢Fr\y9!r_+rrqr؊cĀ,d:@f-Ǻg$iBl~jɷl7?m{}nnoXa@pjSAqqEr 8*rZ*rpVr-۫{zseu{jtH{fuE!{~vIy{w:g{x.{x|y)|zssj|zg|f{N[|{O||,C|x|7|b})++|)}{~+xzqѫy=zy{Vy{z!{zf|Jz|Ez}/z}s{}f{E~[{p~SO[{~Cv{~7d{E+{DzwФxx`xÀy+yVy߀z)+~zb7rNzOfFzQZozEN{OB{&f6{*Iz؀z:v@v?w7wx!xy=ybo~y+qy܂fz*Z1zr\NHz"BGz6=z*z{y쁘Fu"u0Guyv˯.wZwD?x/x~mxdqyGey.YzN zR&Azr5zqW)z9yls/t8UtďbucUNvLvČNwP`wˊ~)x8qxe`y YYyMayIAPz5(z(y℉yR֎rSYr镘Ès&t8ܭuu̐Kvm v}wwq7wdxXy^Lybl@y4y(aymtM`tSuXGuh:fu-uZ Hu tjx9kukl{Xmn pvq# r#]yr꣛msà`tfRtݛEu9s8uf,u3t)KtXѽilaj-Zk͵lôn-n o\+p}uqyrYlasC_5s3Qt{Dtܜ7u*tĘ{7st h¾Ȏiƿjs/kmM\jn-oְpIxQqЪ^krǧM^isPt Ct/6t)t`^rsg;h%iӽߴkalœmo2\pUwqEjrK]sP sBt75tfL(}tDr} tJ_rfsE~t~u~vy~wr~xxBP~Zy|~.yp}zwc}{ W}{zK}n{?}6|l3X||&|O}q{V~*}Bxˢ}5x~}.y?}4z8}Pz}c{}b{J}[|${}I|o}6|c}3}RX6}2}L}'}A5} ~L5|~)|{S>{~&{~U{~{~ɬ8|.~r|a~R|y |/{}|Koj|mc|X|L|A|5l|)z|,{Ebz7Gz_z˶z˃{ E{u{{{{˂Ko/{cz|W|y#syXyQz z(zȆKz{&{xn{8c{W_{K{ك?{ՃO3{'{Z'zwjwՎ)x xЩy3yy0zlzzPn;zbwzV{2[K {Y?7{_&3Q{A'Pz1tzMv6ǛvоRvwoVx$xyFyPz?ymy܊azHVz2zކZ&zyمku a3upξ u@vwۨwR!w’瑂x/xAyxmy6ay9Uz JazR>zl2z_&Oz dyswƻt`tޛ߳uF\v5sv֑wcF2wٓy/x@lxva4yUyzJy+>z1y%7yox\rۤ-,s^Kxs]`tu`!vmvw3$xwOloxo`xUyI yGcl~p}2~ }'B}~Tz|~̮}ĭ}}òv}(e~]~ $/~,V~~Wx[~~|l;~~`~~U4~y~I~R>~A3}c'i}D|y~`&~TŻ$~LK~Qzf~g-~z䏙~_~.x:~ dk}@`8}.T}Ie}Ѐ=}2l}L&|΀{}B} )}{X}5m}W^'}Ў}{VM}_w}Orkd}H_}aT}zYH}m=p}C1|t&|6n{|F{@={Sc|t|^w|Ŏ#||Nw|j|_/|׆9S}H4}<|儐0|%3|5{wZH{Zzђnz8{!"{y{ύǍ{܌M{ыv{jB|^|DS#|G|<<|y0|I${AA{&zd=zhaz zTz{ /{^{"v{Dj{_^~{XS{ڊBG{@<"{V0~{~${MzKx~2KxyU%wqv w7yGr?r or|s% ttu@|$vOpvcwdVwЦXJ xX=xO1@xG$wƘv| w6wq{rt's\rt9uvvǀރwux0i >x]5yQvXz?E΀z:8;{?.{"~|@\}|cwVwx3Nxy'yz-ztx{h{e]e?{R&|DG|;ـ|0{}G$~}\}}ŷ | |i|ݬ!}s}!s}>J2}k}tzP}h}]=~%Qd~WF ~;~0<!~$~{~1}łe?f]Ӂׁيρ_t4hC1s\lQրlFtf;4-W/~H$L~:}(9,[ܴ"I ǟ9фL~0s჏g \nyQL[FQ:~ł /o~W#}8|ہJԻT-(A6lIUԇ~HQrDg[eP EA~ۄl9~.~$z#}|‚t*rWP՞\f6}~re~fl~[~O~PD~9}~1.}مB"}Vy|.~՗~Ö!F~~`F~M~ʐI~O}-~dq~6fQ~ Z~O~D}鈢9}.<}7"|E{Mg~C~9,~.ni~6~> ~D~ |}qM}Ȑ e}Z{}?Ow} Dw}96}(-|!|z=}йu}ڟﱀ}͞}ϜGR}ҚW}՘ }{}p}uce}ZZ }a N}WC}8/|,3|)bo{=3zY}}}}z}~v}S}p{3}Vo}1d}Yf}M\|A|C5|*@{].zzI}~T4}[Vv}?@}:K}9Ր}C}/sz} Oo5|c|W|L/|@|Q5{).{Nzt}zz}FO}%*} K}}1U} ͅ*|jy|nb|b| V|vJ|Cj?{H3h{B'z jy;@yȊE})} ¯)|o||v|䄎|٦[yB|Σm|)b%|~oV |YI|!={ӗ2+z&Czi>yRG y;i}3U} h|ϴ|ʲJn|ɯ)|ά|ɪz~ގ36~x3'}}+,|\VB~5Ѐ֣yV\~>J"u j_fTAH~=~,22~7&}l||ٷ\zŪ]2πt͊ŀP"-ti^:S ~G~<<~\0}Z%5}l{;|Gy {7́Q(Vk%W/"5;7tBԢi54],R~ FX~:~V/_}F#}6{я} {Puāc>CtFys.~Es֦hl\0'Q~鞏E7~D9~Ls.}"K}g?*|\ A{mw_V-o_ҀG3}Qr骚g\BP!~SD*~)8}~h,~ !}G| {Ƴz֭qfroePI}7Jrf[]O_C~ߣ7i~&+~U~}畇z}K|xp7qq࠻rʖsDteu`vv*k爐v`·gwUux[Jy?y4Fz@)}z}{E{N̎ uFZuv;vŕ!wVWw"zx}vjykty`|z&UzzJm{.?e{4|)ǂ|X| ||ٶ z-݌_zbz)zҕKEz{1{v0{k_|`|eU/C|JK}$?}e4+})o}}+~0/nEkHy0~?~~uLJ5~k X~_w~TI<M? \4X^)X4dkm#lrѮЊkMЃڝGs/Rg]u (jfā_ET[oIy>Z]3邻8) DISʊ4Hc;ÈUGUч2a~tXᅂi(^wkS߃ I6>r3ႃ))0}SJ *Ǐ+ML+΍/\FƆTaj~s@υ3K( \Hb͔fiM\e9NՎ'}<s'h]ك]SHZ>+E3ņ(4AK'tLFc[(}r_gz]5RH9E=݉3EX(T -2UKzʛf7sz̄|^Oq܃gMF\R37cG'=z2P'd[~˅آqAL ~񄏛.+{q,LGfД\LQǁޑ"F};=802ʌ$=uzX~!bvӪޅ'rۣ]1򅐃ڝz{pteׂ[`PEI/:T/)T#݀-Rd ~-3ժل}ԙ̄;u򃜢Bz[Ho‚ehZoԙ,OQmD9@-ـG"}Џ  ~Hڅ dڢ$H#X>}y/)oѡdSVPYǜN6aJBˁ %7m,tD!.o~͎o }dʅzx"8د֎mV}ux-\nFҥc\3X̠kM(gA6R+WU씧9U ~T)AŴ5~Ex1X&؂'hW ߦ D񖒋-ЊYPx׉unԈds-YƆ\OH,E e:0ńk&yXt/𑴞ߋZ|3Ïh%3RxOn>Ӌ%c,Y]-#NPDՅ:0k&92~n+M2ȋ v~Ɋo2҈͐wΈmAfcjw1X兲N$D:806nV%zՀ̈́МM_e`o׋ٖ4D;w+0lϑbNX^TN7ÍD Bu9R//=$0u:uׇ ـ^0:AЉϟ`֔]LȘvslDu3aÓW MmTB7у{k,,"S! e2@JaࢂXr鞡guÆ˚k}0a/VĔL&AՃw6B,Ɏ!'>@Ձ Tթ6nΩo|ieZׇ+Tuj`eNV GKU#@rz=5*ւvTсhL= 밖܈}pň6 G~it\` j٠_1XUqJ5y?,js4L)soyԑ9 aP!׵[\ְem-}ȩsKHiCˤ^Dž-JTnI=m3(!zb;t#ӺI,ŻE&ц}!:rShnթ]:pS#|H%<ƃ1ă$;&͂əx#؄,ڿCA="#8|RͲqggj\WR"GU;q0k%&_o%Y Fnnݜ?op4qnrwsmZ^tbuYXznv"N((vCw9BxP/ x$‡yR'"yy©irŕs-\s-tZmux5uvvlwwXxMƊy)CNy9z?.ȇz$i{{0;?{Rw.wxŒxYxېy v+dytlkybHziWWzM[6{AC 5{8ֈ:|.R|Y$3q||0|>|¡A|6|Z<| ,|H%|pu|l |a&}WH}DL}vB}8}.j }$*1~B}h}ȧE\LirDc~tHgk\Pa_%VߊxLB^8T.D$5[hj𠂒^TՑ ÅQ̄}ׄCtSji`:*V1L >3{t)!Sމ F+! z hyŊƟo؉eljA[dQpmG5[< 2/c'ԐUT'r !U&*Ep/Ƌσ?yy Co ҡdZшFvPYF ;R0ŅsV&Eד9yG3х5g~l,ޯόf۫ xQ[n:Dd( Y9tOTD솟: /tK$߅([WC|ֹD(x+:ފwA@mbcP QYANZC׆8$#.=n#Eф,ğΌq݌+ERҋҁ%5v){M:Y{K+{]y{`pmM{ug{]D9|R卷|kH،|>o}5 M}G+)6}U!*6}?I| ;5}ǘz؀X yAMoΑ@feM2\+Rlo)HnK4>DG4Ê*A*!~Ӈ8~ X2~[Ҙ™:ږٕBӓփxhMo&/eďʂ\heQ͍G݌ >14k*Չ Ƈ2; K5ƗhuW+r/e1>`wƒ nWF‰i=ꈹ3i)DCq3 \Ŕ]ݓ5-򖼈\ܑv/풊l3c"YrOOQFX1Hˊ->Sϣ3;)oIbLjO DˇJkE1lcNm n&~{o_uplݗZqcrZsP$tFAKu}4ˋ̒+cr!$,"ŃVٕ]:w'KimWrdD`ZuFuP֏]G1Ԛ=T 3qƖe*] P ,_f8h燡Ϋqvc l)c-Yw>Oȏ"F ܞ<<ʜ2䙪(Ɋu[ 2 >>p*F<Δm~̓Fu߭k֒b4$XENˏ5hD:0'|/YSK F-]&1E0J~ GtȲk a`)WZM؏UaC9ҍ z/ʌ6/&b{߉[ Fi٤^j1klx n*oםobg8p^uqU7 rKisAQt6u,v"+wwwU x3yrAnln١olApwDlqn꜖r^fHs\]tRTFu2Jlv@Ww6#x ,jFx"y>yyy#z撕orÍ&s=4stqw>unv(ue8v@\7vS?wI;xY?]y25y,z"~z{{~{h7| wڌ xvx_xw>xn xeHyb\ySTz%Iz?{Z5?{+ݎ|\"Wy|S|V|͇}CM}K}D}y~ܞV}5/+"bb݌6eGg(/ڇ܋Q;枏}v,ul, cIZޖKQÔՃH0`>5 +Ǝ"Dfz]8Af^Ίܟ; U}tk=bŇZ(+QeG>2s4!+e0"܄545TàS䎾|8 t.k ebQ_YuP\>Fuj=4.fe*!ކIՅԉB󟽓鉨փN|sRjaX O F6H*aT8K+B6k8ӏ/Qf& %H %k˅ɂODSe6ԙjycp'[fg]N?S-JA uv7.Zsk%"5k os4m 1Kم8*/!xcoI7e=\d*R)I?6"-?#]7/ KnBlZ5 cw nd-[(R7H8>摪5w2,9"ґ>5ފY6Ќh0)iJjxkq_m+i>#nU`oXqpOzrFL"s,xyf{Wq>ʧqrxsdp(sgHt_u!WuN'vDЗw:ܕRx0;y\'Wyszf>iz o,{o}|GvEv.w7xow`pKwgx_xVxMUySDO)y:z0{`'Nv{3|w"|$ |DG}P |JO"|E|3wԢ|o|fD|^){V&|M'|]C|:}#0r}'9X}}} ~CɈi~ed=\~ew'P1n蠐fSǀ]€GUȀ5LɀC90dӀ'>D( ;͎Ѐ =ЃI}avmʅJn:eJH]NSTeLsMB֖9x0'x'3w?s; hၖJߥ}p67}J։us}kjbJY˚Q㔏H/(?^O6ؓo.p$pC܋C ~|khzqsSj6a˛DX$P"G%e>7%q52c-o,I$F뎷 9)6솁Kܡ1[iNzNEr j`QKXɟdOkFݛ=4v)N,)'#h_{ \irʠΰ{Ѯyqҝ^iG:V`rWPNQEӠ< 3J:*בKy" ɔl).xZ؁ ~ix[&q#ho쭲_.̫V2M1IDץz:+21QC)k (܏ƀuʠL}@@w՞pMDgֳ^[UZvWLTOC7驐9?1'k(^ِFȑyZyy f%.gxtiVqҪ2jjBkblm9ZnRPoI%q1@ϛrd6's,t"ߕ9uv)}vfЏwgy'Gk!~pl;x,m[q;nFidoEapKYqJQhTreH۝sp?jt6u+Ԗv"Zw4wx,yA{ݚy&5Rjz++z"pv{Kk<{kp{xҎ|-mn}@z}zwʩmzpzhz`Y{X7IzP {G\{n>{4B|}+}"X}`̓}`}T l }}ɂɁ}H^w ̀o5h_ǣW]OtIF3=^?4'z+"F u 2щ~+|vʅNvE>oFwvgd_8WqANߞ^FYB=e6Q4] =+Pۂ]"(Sʒ$ˁ { b;{Hbu䧾nʥ>f^!VhN Eꅊ<ۙԄ3𗷄*앏"(Ʉ`xRm ,gU{_u[pnXfi^ ȊRUM\ÈDޛR<13e-*}g! {7@$荇'Ns +z訥|u!m`e检7]XuTLD;|B2՗j*MZ!x0ߌ!&ԁrӔzxt9moC[eRfu\T1KC::™z2V_4)ѕ#!I/)鈎ɄQ'zKt#ܗZlǥ(MdRF[ۡ{BS[$J̝*BP9䙀1ŗI)Zw ˓.+Ccx8H~H%|T ~زiâxad XOGR>5ޙ&- j%ЙLg1ڒL A{Rƽv?pxl_i&`JWlO %F'=ʛ4%,$9) ΐҍ?}e{wDifpݱhjY3i1cj[kTImdLnCƢp';?\q~1r'qt%u-uu vRݑwz%{j9vkBpl8iخqlbW nZͩnSpK+xq8Br`:LAs0u&ov&v w_ ɕxJLyp9{~{ovoppj0pbHqZqRrJϤsBt9ӟu0`qw&ʚ.x!xCy@ 0zz|y{]suvsqtPj>tbguKZuR@uJovhB3wM9Vx40 /y:&z/Bzq@{ k{|c}l{yv #ypEXyi\Zya5yYyQykIգNyA~z_8y{/ {&|}}D }!}'~vzаUurqowxh`~Y~Q/1~DIE~5A~28J~m/G~&tbҗ$ &gUyr0t愕n3 g<`X.4XP‚H4@wK7؞/"΁&c#ڗɂ[;t AuƁj y.ftgnWgxɇ_ۨW妢mOaG6r?7M.i&Oߖ^ <,V xAsmXg o'_XknWCSO-%G">ć6K.-S%" t4S ÔZ\`x%>s:mJf3^ڨ4V'Ng?FL틍>&5|->%: ^c  \ۀwǯr୆PmM풜fI^WUئ&MTEn=I΍51-&1*$̋,B ݏwC闚rVul+e9] UU(kLĤDRB~߁f:>2L@()t!r"4iY  sZq?l2f$`XzQ =I]4A9ݤ:q1¡)y)!˛ɄN ŗ΄ ]/Cp~֌k.fV[ _RaX3(P`*H@j 91Ç(󟂆 d*pR$ d>2/p{k_ڏSf_RW/OȌG٨@_>8;0^(ho PH:7 e Dł2o=yke_ EW9ېNG?1lb7\4/Ό'uo BL\&ه uxcoDj#e*w^_VN$͓F9<>R6U.ס'ol.gjg7ۖpBnvidN&]O)UBMn7o/qI&Krvt1ct v/cwbz~kjftkia/QlNZlSKlLmEYoK>5>p6{q.ss%tZ7vPnQw SxVUyP{kp4fptaw_p[6pSprL)2q8D~rN=sT6-(t.Xu%QwAbxyT 5z{<}Yj6khw fv`v~Z3fuRtKuD~v:=Nbv5w-4.x$yt{-{ }*Q}y~IjD~ e[}T_Ƿ|BYd{RTh{(K@{LDm{h<ë{54l{,ܦ|$}zn~4sb [Vyib'WdNx_VX+Q΀JqC뀐<4ur4 f,{$gdrEEd \ќHǀ|hԺd+Ɔ^жІXfQZWJ+B̭j;p13Ã,&^$#+? ϟˀdhN*cȸX^cXB~PIzhBM: 3+sB# $H Q`pnUuҀNgŏ\cy^WWٴ6P`ƌH¯AC5j9ū20)Fw)"2נ% R!Ą܀ fRa췺\|UٳN1ۖFG0>ȭqf7Je/Ω,(g![J۠ӌ r暻!e鹀qa,[A>T6[M5E]= 6~/fP'} WMd76ŌC Ğp̛>e+`MSRZ۶TLYsDaN <^5B.=͚&q^ XΐeV% 0fU؃dbH_ZSPKrΣCy0<E4جw-gP%bk|x {Q ƀcܹ~^θY=R/JB;P4P5;,֩2%ؘޏHС~ ꆏܛK2u'q4uxr;usezvEtkvuwvjwvwzwxxyisxuzg6yzt[y|zNy{9By{6Dz|W)y|byr}Qyr y?ry]fsyt4zdtzup{^u{ve|.v|sQwD}xg%w}Zx'}NAxZ~Ax~c5zx~)xn"`x=p~q~Ar~ּsA~0sYtuN,\uNv\rvfwJZqwNkx BFxU5xi )vx8Q+w#op||6q]zr S~r s˂txu-=Hu+rIu#f vZw MwxAwo5cwȁ`(wRxvŁYgnPo$Ep peqՇrsvvtA>t|rTunev|YvMwAwm&5]w(w_vZכmb(Kncnqoލ~pیjq܋{rs|~tkMvͅAw* 5yXnWm oq`#pVRpIE)qrF7q*qqyp qxbxɌcѽX2e+Bflh]inkZl5xmª3l@n_Oo٤ QpD>q 7qP)poNpa;b~dVeۻg>i7ojAlwm2ktn`i^of|Pp:COpX6+p(p nܒ8 p(dy?pzyBquýycrsysݮyt6yvzxzy.{|bym|1py|dy}X8z8}dL{zk}@z~-4z~~(~z@~}ygӟu}a:u}yv }v}w~$w~7x~iNxx~{x~oy$cyuEX yXLhz~@z)4z'(y}yBQҔs‚ItNq1tڂiunYv $v,wEw{xoZxqcsxځmWy@TKyB@+y84Fy6(+yw5xÁ<r}wsK-sζ&tMPuhu'vWv܅F{wao-w˄lc/xIWhxɃKy:?yN3y]'y-wxVXq^ȽqHr*sDt 3tъUuzv{x3x$'xw w΅;nՙljo(PpS$q7>r&dsSsڑtz@uw2x&w&Sv~mnYo7=p0q5ޜr]w2"w%wBv'wl?rm+ͽn"óo,.pXnqq9rSs-xsltauw@U6vIIv=7v0vዑ#vv)tkel U[m1/n7 o}p"q+1r4xLsK l=t`itSun Gduݐ[;)v!.v !uNrtl͗iŤkּlmLnEn9^op샏q՝wrwk}sx_!t&RtŔFXu?9u~R-Bua St?:t7Cii:jB_k6lpmԨWo p&q#TvqjrC^sQctDtj8et+tsOshėi,zjW?kئmYDnV[olnMpwvDq\DirP]\|{n2|| &|#|{o}O^zv Wzv~{w.{6w騒{mx {y6,{y{zx{{,l{{a={|HU||J>|}>| }3{~'&{~>z~͉x{ŭy3|yn|[y|z|zu}z}az}xz}l{~Ba{S~|U{~J*{~>{&2{`'{1Zz|~wVw;:x;.Wx'[yyIyр΄|z xz>lzt`zUU{I{,>R{32{&zyvrpvѻ4wbZwZx ~xzxyBTx9yl(y̓`z*@TzIbz=z˂q2(z=&Azjkyw?wgx Zkpxq_ySytHdyl l`@mԯA`np q+O-r~mrܣrrsftu{ZtMru[Au4u(uWlttk2fl\hlCn o=zw2ww&wWOuΐ2vOio{vpGwp򱀦dqЯPrߐss-tgytmu;bNvFUv)Iqw=dw8<1Zw,o%5vub vnn*oj?pOp*qrsͫxtp1m>u(acuףTvYHjv|q{| {q`|7e|~Zk|OJ}?Dm}9a~}.5~Q~"}~L6|~=X~7~~~~LJ.~|UF~q~e~Z~Os~7DS~S93~Sf.}u"}`/|p~Єm~5~ ~C~Â~Ԃ&~Y{`~1p_~be ~FZ~FzO~M[C~,B8}-}")}|.}}5}`U} }ЇS}{}z}o} d}tYd}„N6}׃C'}ɃQ8},}L!|ɂf`{"P|d|X|L|ی]} c}@k}z|o|#d-}OX},M}UB}Tw7}0,k|y!)|u '{{۔{V{y|-ܚ>|^|h|`Cz|A;n|C.c|[X|Mn|IB|7~|,T|I {\z{.{EIL{\{N{ȓ{Y&{yL{nA{Pc{ҌW|L|.B|97 |+{ć{Dz8'z]zƜzޛ@{9{K9{Lk{}x{& m{8be{[Wr{{LQ{A9{6{*c{1zWyyˆ9zGTz]Lzwzz{&C{+zw{"lzazڒV{-J{?e{4zꌱ(zyypNyzIzbyzUvz[zҞ[zޜSvzߚXkz6`zJU9zfIz>gz2zy'YzGyQyعyvy y˩z dzKLzVzEvKzk y˛~_yT/zHz~$4:~C=)8}S}l|<Ŵ_!U tv~D~铃s~ h~^(~hS~_H~O>~Q3=}3'}%|M{ƅns~ơ,~~ ~t~~}}~~(~3~9d~?D|~.q^~ f}ٚ[}Ph}q^E}?\9|钡.|>#q{ڏMzیp z͈}w~Lm ~*_~B~~Ć~"{{U~ p}e}ȞZ}O6}XC}8{|֕-N|_ "{jq>zFk z$ǰK~V ~!}ę}} K~z~ 'o}d}Ţ?Y}N*}Q'B}7:|ΙD+|a {a zb Az&~` ~b}1}ɏM}=~y~0n}c}̦X}gM }[A}6|؜*||4{'z z@~c~5}۹.m}Ў}A~x~(&n~c}ުW}LL}o@d}74|)|  |1:zz[ɍ0n%ό\n&o pߒ@q~r~sssth2ur^H5vESVw2Hx=ńx2vyH( yz0ށzzs!ƊsWt5xtב$uqv.}vs7whOx1]oxS-yHR#z=z2{(+F{{耠|$Dw'x)/xwxʑd$yfyl}Dys3zThz]DŽ{.R{H|=|_2h|(|}H}sM"||&|ʚ|אчT|͆||>|rw}2h&}b]}R@}G%~#=~K2~a'~~~~-'x3bˆ"م҆"{υqՄ̀}g3Z\:Q/6GQ΀9{֛wVm">bĀ7XjSMCB 7̏t- x;!~q~"R }kQf)"Gۤx遥vflAaԀƙW]^LAȓ6l+ ~ }Ƌ }Z{PɤG ՝Sʪxq&JúQkb `߀VQO&KI@54lA*\]~k}_ |©TSɣEvl:~^tR-ju_ހmUGSJ+s>l3m(/~G}O|8]?Q0x=~tcdi%^ӥpT=aI_=^2}'2Iz~͓-~P\~} *lXGAވ`y}sA|hD^S7vH $<1H&|B*[~ъe~N&m_Tn!o*Tpq dr#ySsnsdtZ2uO뇧vE>w]:x0fx%y#ywyrr:s/@sՌtpuMxvnlvd6wmYxO xE=yi:y0 zl%t$zt{O{q᎕v_v,wAЌwx׋xox/xn.7ymdCyYPzbO0zD{K:O{/߄e{%K|8\ |i|C{e{qnjI{y{{Ds{w{mሌ|:c|{Y|N|D`O}9: }s/}%9Z}}聞}8j+ʊPBkqvhmtc_X<QN.TC܅ b9og/^%20P@,.| Dv'lsFbkpW҂MGCŃ95B/V$"nx q5Љ8|) 38u{tkۆ,aW![LĄ^B8 .e$ 4TXڧ؉{ ΚI؋~ct&k4[a%UVLjMBdX8}.`$PuDŽ]f‚`)G''"~t`jk`ҋV+@bKՉsBw8%#.#E ꁧ3ۙB+:}z&ps*iՄ_ЄiUݍCKnA"7lΊh-Bw"= ÀT0=}#퐲]j|ӅLr&iL_TAK@X5sh+1x pY b bGD~A/s|Khr)Иh3R^&Ε2TA`Iˑ?Mt#4~")čQSv A;]PʅȤy)B{Vq\gG%]&RH=+3dl(с^2%ˀ j̆WÆ"AΫXQ[FRӅ%z٣ ppfd \/Q3GP}<1􁵔'e@^N#{ iÅN$R᩟ȳfoe ex[.yP͂F"y;P0%\Z&ޒH I eʅ%<:͌ՄMҮxnnadZ1O E:,/_ߚ$wƁ8[΀  慢k1H~ز{xѰ-m℈c.]Y>N#ZC8W.:m# ,>,hoXlq bm8kn2\o%.p:}ՐqJt)r>j/s7`t#V4uK uAv7r5wm-]`x#2xwx=yp֞(q[5rQrBs|9t^s[u!iu_vUwgKuxA%x7y^,y"ц-z=bazhEzܒuB"uAuevapv|]wcrrwiZIx}_].yU=yK& z$@؈.z6ć[{,{k"{ {{J3zFWz(lzUbzgSz{ʎzrjzi {@_{Ti{J|@@|6|,gC|":}Մ| 6|0&Ӑ,֏~ۍ~/~|{Z~UqE~`h\!~|^~uTT~J1>~@&~67~,I~"Bg~~b&$~E%;ez<wz_Rqg]ቚS~WIx"?S5߆,+"AFl5{$Z8P9ˆbyp`kg]9RFH܇?@5u+߅҂!*T9*ǎKՍč|1q挖̋銨y/2oي?fVVd\wRzH~ >5 L+Sj!aᄊ*}D Ѓ{OjCsՒ;PxU!xwo:e[Q&H>M 4*ƅ$ SF #ŌlI= ֊wxۑXn!dA[0~QErG[=z3D)؉iOŃۆ{ ۂfy8{.{: $Dh%Q@A ω>g~2qt>;BjU`p0VjLXӝ/B/7y--G"̃Ԕ\[gnf?U ~}dosb&ioi_/2UeKCܡ_@=16Eœ+Ԅe!sɏn ނۈ1,zkЎ'g݈|br#Fh^=TtmJ:?ąX5-* 1k ڃ` okLlqm +no;x4opTn qiejrk[`seQtVHuA>qv43`v*w\wn ww^x xh[ow6^p IVp?qriwEsDn nt-dǐu[3uQXSvGp"wj=Yx3x)ىy; %y؇\y Ez(sϖŖt.-ztiu%ݓFuv˒,vFmvdu~wZΎ.x/PxGyjL6:,h퐋"W%eH: F<¦ǁ[y΢oY7eҋr\;RHو>/4ɇ *|!De1<쎬 _ډ_%x܉TŁ$x1jn~ LdW$[?$Q|G=23p)B0 4׈83+Ӕ2C)ֲtLǀSݮwYb#mcHZGPspFe8φ\XxCS+1I@16--Ī #ԃ1A]ۏ ~ܕBvc[mZŠdh[ 5R[߈xH?5bƆ+ۊf"15 )'qyA C~k),u)l‘cːZQY HA7>34c*e!0j D"c䙉_ EI}buqhUl a-c8YPjGَ >`ԍ4'*m ؈ ӈ օ݅̃ߔ56 z}TCt̘kaNb*̕X[OˍFN=X3ώ)0 @jY l)1Ï݊afebĠ|xs֑P@jsa6{WANESe;f2Z)7f "Xa# $ui)]!ާ~D{ri5`?CVdPMktDVd:]z0劉'2U؇l&Y   8zʑjrvh_E(rUWLkkBY|97dn/w &P6k 5Jٓ%Nyگy6qEOgB^P(TXOK\yaAk 7~&.1ě^%-py =Ă܋“솶np鑪y9prhJfҏۮ8]e 1ShwJ_L@6؋- V#4# "IꢸhJriwߠj{kt@~v4=w*`w 1xY9x 4y#zL?pqiF<<Ő 3ȝs*c!Č6ӋSgLWg8&A~9ydkrj`W"MNmGER;'2m4)v ŏŠUZՄ~Tg!Ԧ6h7{ictݢjmGkem&]nUDoLq CŖr1:2s\0tq&EuYS-ucv0  w)]_x놭jOuk{+ltDBmlxnd՞o\q-Tvr;KsEBzt`9Cnu}/4vv%w=aww y^z Moo{b;ptvqylr,dwr\>sT-tK~5uB^*v8wo.%xO%fx9yfy UOz߇{jsǀta{g}u teuJlGudv$[ϛvSw:KwAx8Ey.z6%Kz.z{{ y {h|:my=1Mqe4Șr*s!dtZu1. uԎevx~Ki2yjhskl lem]nV/pN~؉~E|wqOjcZc[orS4K CM:1і) {H8puK7|wwmqb#pjbݡZ٠RݞJ̜DMBe:q1f:(T Y׃05{]@vp󤰊6jb`xZ6vR&LJJWAК#9gF(0ۖ[(4ZԅۅdɄ`hy3~zuŽIp}ei~یaء5HYQaI3ӊL@8"0O;T'͔<b·ۑ.)taz4Œ7uYoA h󢴐La@XןjPHLōG@w7/˖*'@'ՑȞ愭qy}>tgoK h2`o=W`bO`G^Ґ?(7q/.C'Ќ)ߒNq{[>xs𤭜Gn>gLER_W5NuwFjڔn>&55(-1&_쒯]Q tK {x&}sImӢcf^\V/VMᜠUE2=ahx5*0""̌3bӕt ܑ^pblfF'_駣"Xa3P2(BH506@?nm8Xzo0xa3(!ؗQ&牟 |u'o㫵k5Ee*j^(WnOB-GFM[?[u7nR/y'C| ӗ㍺֔@ m * o1je@§E^A[dV֣NpNFp>t67.^&goMv 0nv{iԨf`d1]άUUME6 =ş5Ş-@[%<2Ӕ oEZ6)mhٷc \dU_LDΡ<񟡩 4,)$b䅥m<o9b iڶ;c)cd3]Ѳ>eWEg[PĬhI7jBOl;:ˤm2Go_*#p Zr&לr0s t=Xwzm淄figcóg]qi(VخjfP~kH۩m$Adn9o1Equ)r͝t$tuyvQ+yi{majbikd8k^lW-m|OʫnH{doA/p9r71s s(tnvv.@w>xz|mVoi2odho^2pWpOvWqH#r@Цs9'#t0u(<[vPcx2xyǗzR|%}nTtit0c*t]d&tV?tNܪu'Gqu@:!v8aw0 x]'ßOyZh7ZB/Y8'<$v)ޛO3hkg%ai[$TMvcE3%>C6.נ݂c&מ˂~ςqVٙlĂ=Ձ1j+fFa[T!Lv#E熫=ֆB5좻.;d&`RP>c$F? njtɍf'Aa/RZ͋S%KԨDAĊ<5!-m%x,{&rISVCArjw$eq`ƮnZZ+SKCvōV;֤4G),٠z%nu˜?'I'7:}~iuMe`#`VYR@JFQBϐ:ۏ3dӏF+o$۞ndR=~"JؕqHԏ;JhD(d6_5tX)Q2וdIQA: 22k+ؑP#➃"fՋ`B dT^ \fgٱfec\^C2Wߚ0P5EH`"f@ʧt9;I1G*'("ƑM6n해VSfݱLbdK^]FˠkV 3OQ1Gg\?ާa8`10ϣ)!Ο4ђݛ$a X{9 fIįa\_pV֪xNDjF|h0>7Ǡ\0)](J " ݞ!圷pЛ/ p`0؀we¯a[쬮U\:M٩Eܧ>VF6椚/G֟'mא؛v ΀f{_xa@*`n[v\aUƷcOOе#e I7fBQh;ެjw4lE-Cn $ҤmopҢJq w)rœ\teBxW~Wec{`d^[saeaUfOhWh H걪iBk=;?l3nn,Np#qorv1s AuÜv/z \'dg`h\Wi;V8iOyk2HleA®dm:ūo53:p+r7#!Tst`u ]wx{dgwdnlt`ڹvm#\EgmXVO%mvOnqHnrolAmp:odq3$s +RFtr"Ǥ u Ww}w 3y9arz|er`Ÿir[r UqNArLGگs@حpt 9ժt2]u*ZDw "Ux0 =yi5z> .{K|~dŹ/y`.xZwTųvN8w GErw@Jx"9@x1JyS)z" { /|.}! W~@46~4c_F~Z%C~6TE}rM}cF}?}}8+}1_})~!!~ 뀏 mnF4c^nY괧5SDzM6sF+_O? -7͂0)1|!zƠ :EBEJb^t&Y,ySq5 L!E ?>b7//nN(L! F)>; &%?vX b"?^YWًhS$L[VcVfٚMOwHAx :Bv3%+Ԩ$#k=d ohƃ3L]^(ZWşEUj1OQGV@gA9Ta24+\#vQA,yBk ۝OY+R]ܷ{YlTvN4G ?Ρ;8eܠc1Qp*\"[Ɏ5 ̆-pB$]HXS?M`تF#>7$h0©)"̤< ,d 򠀉dEҙwtՃsn)sRo^òspùOtHr8tsHu=tuuȉvv}vwpHvxcwtyGWwyKx\z:?gxz36x{p&x|w|ovDjpiv,q;w`rxKrxTsy%Mt'y4tz|u){p#u|cvB|Wv|Kw0}:?w~}3w~'Kw]~6v%nc|yo/|Fp|p|ݬq|r}sc}bt}|It~ou%~vcu~Wv[~Kv~?w3w7b'vOv%m+Enno pנqԀr=sg{totcbu-WwuӀKvB?v3v'IvzuRk͆slmnIoprqrx{sEosWc&t WBuQKut?vC@3vn'zvGXuqYjȁkmlh4munoljpX,q{zr{#otsAubtVtʅ%K6un?]u3nv'Wv8guL}i˔)ǥjg!kgl%m"ntop䋙zqˊorbdssVtRJu ?u3uͅW'ut*h`ijkln8ԑoBpB@z_q/nurb r܋FVVsÊJt?u 3 uM&u?`twg3 hiӳj^l4~%mondoyp>mqar`VsNnJkt>t2Et%tQ6s5fX'Ʃg潈hj>kkl˙ݐmoVy pqm#pa8qꐨUerɎIxssm=Xs0sΊ#rωqΪe]fV^g,iҧjl ʐ)mJDŽ6n`xToklzpo`qdbT-r{Gr;ZrӎT.r" qɋ qFlceP'fh!5(iRkCϏlmewnkoј_pHRq`4FKqےn9r-pZcBŲdpjeЭgMʦh4jkΣvlvnk o*^pYQpDq;8Sq[+q ]oŏps b-4c egHfh b)iéLkO@lLv8mpjJn']ouPp/CppD6p*EpkOnFpFa`vbd+e4guvi ΍jvkFuvlϥoim]AnOo]Bo5p(own"of̑`\aܼ gcHdSf_hMiŮ̀jtl6hmk\rnwO o$Ao54o'od7m ]n_`ʹbujḍe"gG0idjWrskwglj[nN/nd@o)3oB8&n#m? BoA^vm]Rvn{w9pwqZwrwsՑx`txv.yywBmySx>`yyU!yyIbzzO=z,z1z${%y|Ey(|t ttxu]=xpu1xz%x;wbdoąepfqMqdhrƄ=stWgu8xHulbv7`ovςTwh\I0wӂ.=x1x+%w w2ˌn+o-޺o q31fq$pUvoY ]xRLy1Fy~;yt0 yc$OyE\xlbrpprՉ~KsQs tpu{v ivtwhw]Rx{Qx Fx;:yT/y#xԂOxqN'qȎ۴rQsvsϋەtu:>fuÉt6vJhv܇\w{1QTx |F"xo:xP/bx#xSqw_!;p(MpմEq]wr'Ss s܎t~us[ugvS\*vPwEw:`x(D.x+#,wІ^vԅnonOopPUq/r1hs 9s}tgXrug u[veqPKvAE$wu;9wQ.%wy"w7v!~”mrnsLoGp:5qDQrJɈs K}*sqtqHfNu)[u܏OvtDAv݌t8w\,vي[un{u<.lmZ̳*nEoH2ppnqrb|cs;psӕ}etZLuEN8u#BFv6v&q*ukdt+tڈ{kl-BlWSmJw%noopžq{rgps'ds얢YtMuABuz85qu)ub,tJtjr๜k`l]$mknͤ͑op蠄{ q`ofr,csUXsKtd?t3t˒(tbs58s?i{\jx`k|TLlCmQo9p2JzZqnq韠c0rȝ&WsfJsϘ>t2t&srR rhsijkܯXm.ߐn}l5oypjmqUbfr?V5rIs_=vsa1Ks%sOqݐ rˈghhiǵkD0l`m®.n׫xoǩ3mpĦaqUPrnHrsM#r40q rf۽"gͻD hFj(nkfCm ̃n-=xo+lMp70`q1uTeqGr^;TrQ/$rП"r|qq grȇ]~Yly~ mh}n}p9}qc-}r}s~}trX}uf}]v[m}QwO}PxD}+yM9K|z-|z"&| {dnz{¡|*r|5s|NsکZ|dt|{u_|va'|w)}|wr%|xf|y|[D|z-O|zD|{q9|i| .O||"{}*z}zywUzxF.zxĨzy?{8y{tz{zx}{zr3{{nf{{[,{|oO||D| }E9{}.N{~"{>~X'zH~x}x}y>}Zy}y}ݓ6zS}و&z}},z~qz~KfIz~[{:~O{z~D{9f{,. {SR"zv+y'wรwЂbdx!'xxyt}yd|yVqz$=ezhZzO{ DP{19{2-{ "Hzy}v|ɷv㯙w-Mwwx cxx݅2{ypyb~eYyZz'Nz3Cz8xz-8zw!z4=yhu7AJu uvq@wkMwx {x>SpxdyYayw3I3)w@'|vmu؋|v9(HnoH(pp"qOr,svt/ktٚ`~uTuHvN=vx1v&v2Mt3um0n[QFo0gp!aq+r+сr碡vBs|jtJH_tSuuGuȗ;u0au攩$uq{t2 tȸTlxy(yz z43vzHakzp`zU{ J{Q?{qi5*{j*G{1@zyζw &wawx9dzxy7߀^yhuyjyЌ_z&cTz}VJ.zƉn?z4z)z+yQykvhvevϗ)wWw%xxxbtx jy>_yQTey IzD>z`3zS(Zyxx܅_u xuxڧuLvÔmw#owȗ~xtx`ui*x^_yFSynH=y8qv,fw [wP-wטDx9,x-w"whPvR} vquMqnrs]t?ou -{upv.evZw,O%wqCZw7wŘP,wR w  v=- vkpDqqrsKtz{3upuldv%)YvN'whBAwY6w+ewc\vkvG9 Evp>op47pԵdqSrİgsӮzqtEoIu'cuXvBw M5w4 *Cw vvWyvIq(vх}llׅlbn|o+DŽpSqorsu:sgj>t]_ upT vwI߁Cw[>x#3tx) y}Ly~mz<݄qGƄGqѥr\sHȃXt߂tkut4viw;_A_wTxIyy>׀lz4! z)K{~{~{ȴ,vS6vvvтswa?wԈxI~xt:Wy`iy^zTTBbzIo%{P>{4 ~|")4 |y~n|}|{Si{*Y{XGS{w={S*{~.{s~|>iO8|^|T|IV}6>b}{3 })~}}~}*~*Nހ+,,:A:l4J|^r~h^|]f\SIOH7h>3[~(~_}}zK4=tK4FU3|)r~h9~]o~R~H!~Ł=~3~s[(p~,}|󀿱Y~> ~3 ~0 d~Lt~oÆ~)|z~hr~'h}\~ R~(fG~C<~;2l~ X'}}8`|}[H"}]ۢ}e}ې9}΅}׊{}1q}hgV}V\t}gQ}G.}B<}2G}u*'}$|,{|c|ʢR|S|9}I}@{6}$p}f|ʋ[|ߊzQ'}F}{&`R{:{O{<{˜l(| x|ny{:d{vY{ᓞN{C{8{l-h{("2ziy yȇz_z{ {Pލ{܂k{ўw{ۜm{ћc{Xs{M{Be{7tzܑ*,xz!Rz3-yN{ y\yzɭ8zЫTzک_{"c/{[6{w/{l{a{WW{TLGz͗A z6z3+zD yTwxߍ_ kxz䤤zzz͋k{1~{?vZ{k{`{eVD{hK(zD?zm<4zK)z g~yrx xʆ#qzbzbzuJ7z{ {au}{j{_{EU6{ZJ{[>z@ 3z,(xyy0y>tyy RUzbz>z6k`z0z<{met{i{_ {~2T6{MH{l=z2uz<'ay yRy)yp튊k؉l~uamnَ̈.o pzqp1Kres[tQQuFv;w0ڂxI&&xDqyGypňoq#.qʇrss^t7z u oÅNuefv[whPhx8Fx;py0z&C~zLzo{Hu{J"uǞֆv0|`v3wwyxotxehy5ZGyPPzCEiz;A{=0Ɂ{&1{SN|s|Nuz<߅zGz{.Dz zńzxK{'o({e{ZV|'OH|E |:}%0n$}P%䀡}p}`7}ì;tW~ބx~jK~Ʉ~ʃ~rx p~n`~dmn~Y؂~O6~D~:<0%%ǀa(#|MЄ7y(σU+0 HwtmcځY-\NTDa:;0% ~߀`Jʉ0Ie'O4v܅mxeJc]X$MփCƒW9/iD% TMU~Ёh5L,сr6yvc*lĀĈqb{X YMF!CU39O ./-DŽ$dDN~̃`~P٩2݀鐫Q㏻ۍuƀkDaWj㉪MшB8m.>U#~\~UC,};z< gQT5ՀPS~ƀY`t%2kߏaVLopAY6+~!_~BC}t} D}"Y י~Ә%▪~Ht'ϓjav`TR V2KDA~65~+l~n ~}5| %|æKyxCx}e`sdiD_} nU?~䒼J~@~4~fa*.~^K}|h (|(֥oT/~BP3~ )G}Ï[}2|\ G{ۆ?S3֘7鏫$5{`qBgy]1~R~H0~[c=V~|2}ړ'}\} |{ąУV&/~@!]z\=pHfR[~蟗Q~2F~K< ~1N}җY&}z|k||}s{˅k\Q!A)~!~`zZoN3eb)Z~P~$E~J:~0}ٚ%a} i}G|Jf{фOE^6~l+~%{!y<fn]Xdt=YO|~SD~^9~)v.}$C}k=}O6})P|X쎝kOlEm-茍nIደoWzppuqokr9r]aNYsQWgZtVMduaCvF8y3w.w#x)]xق$xঞ oݠqpdq#NqҊr~stt^kGu7`{vVvLwB+xU8-x-ۄ y{#zsyɂz!~zti0tyu7e%uhv,~ vt|Gw=j܇qw`ㆩxVy Lw:yB z-7z-z#i{D͂Y{zF{|xMyXybCyy}Gyt z0jz`{VT*{VL{A΄!|7|V-|#=||o} ]s~ى }}7}y:}a|d}]s"}iDž}`A}UƄ}K8}AY~7PV~8-T~C#2T~F~9~O[{ Oԇeo{І9rqi2C _wU"A{J҃J@O6Ճ"I,悰0"3Hm) (E׆n79|{$qυOh^^ׄTZÃTJy@76Qy,y}:"?}ll-ņ.Օ獵ۂ:z4)쁖 (UQ" ăvЖi:ICyR#ov f<\RCH~>LƉ3}~F(ˁ f.˄vw̘`˃GxoneQ[ӂ4Q㎙H \=ik?2ā3H(NۊqgLJU &1̃Q1'w n2tdQZWPGI*t|\6uPR-v*H؈Hv>w4xV*ن,x ܅yByf Bys-Pstat.u5xkuo[xvYfsw \LwRUx\Hxx>Vy4Udy*qzb zLmz {wNwɒx&4xc`fxxxny3eȉy\z4QzH 1z>{b4{*:c{ H|{ |-w|6z|dc|[S|V|ZwO |YnJ|e |[@|Qz}G}-=M}i3Ӆ}*',} ^}7}^ s}r_ ֗R9 눽׊iv]5mt*d}#ZP!F<3U)~ nP ]~0FV]υՋP΄?8ulكc‡QZ>:PpF 7 ;Ά13id&r #xe[WM}s臑jaOJWޅN*'Dm:z]:0 %Bi;eb5g`}ms?i܆}`ߐNW#I M~ȍCR9/Y%Dg}9$/{͈(Мg@_<|S@r{i%P_V/bLyBV8@.I}g$ /ӂw`&ИDJŇP %Yڞ{^q[hݙO^aUӕKEDAuO7Kv-5>C# քe-rȋx7zzU=pƆ]g%k]ASքJ)@ 5SR+׃$!΂{ j ,{p 􆺫ڊn႕My!of4\y2RHބ u>თh4C*y bm `ʈUIcݏ񆟰׉ÆJ(xQn@e@ [p4QG)=3_E;)0ʔ `y/Vaʎ􆔵dž:nц2wӆndMZnHPԦ|F?+.ʒR ANwnc}eZ\ǦS!ID@CA69-;g#І3Wޅ*\|m _܌3wmd%[u[xRHKHߍ ?85Ӌ+wr":{(^Q_=یŒ݌ST,}vklcƔXZQTEH>†㎹4*6 Q6 D 8hь  Y&a~) =url3bOYvؖP%Fca=D3oU)ЅĎMΌ ԈV\OsJ}JtOkMaÉJuXdNE}M;㆝18(@㒂 ヾdq_Q|`_sj`‰(WSM·DGC:01I&υ<!ƓG<ƌ f% ^ 8ʉdͯʃPk{t,rei)W_>VH[LcCHQ9T/K*Z%D݅ޒ % p{'kd؂TFz dqǮhH^ɉUJK =AV8&.P$Wyʋi=2ՒPh05ij~~|kvjlnnfoG]-4p`TqwJLrAs8ty-u^#PPv3]vqv-x9lvum m}ӖnuڕomÔFpe{$H{e?{5{+O|Z"|y |D|2 }"[~ו~~^|;~t }kg}b㐸}Zaj~Q}=~G@}>`W}4E~@*ŠI~y!'~T~ljy~9~4aO{mu}sJv jnb28YPčρaGF=Ȍ3W*p:!m<`EzÕ/vczfzƆOr͑υjӅGaXsOY%Fj=<3]* Ԉт;" цÅc*ً z7r@L:ij]`2X~OE&#ňULJ}@w q??T|u1rlc6ZPHG?>P4͉Y+P^"k}v%DU'hM_3{tV@k׭bNlY*OH F =1ţ3*X!Cfmsj;a]R怭[gqhP~T[i_wwj|p>Vkhɘm `(ngXoO-pF??q=+r2׏ t (tیuyu ‰evoox k 6k~ Ulw monng-o_pW>qN[rEas;6u2v(wcvXwRw x94ynӃov~Gqp9wp poqgFr{_sXVetBNFu&DʑRv;"v1_Lw( xmԋx*y oyfza04}&}i}} D~?b~k#ς+{tWm(e{\Ɣ TK>B..9h /ހ&?`ـ8. t ֆp8_{UtLBl"d__\SKσwA8̎/u&Q8‚܋NN RQ͙ܘ1{+ɉttÈl:c[,!:R̆J3A-g8T .؍A%Čg߄^0 ;Dh}Q]zc7sYk`Qb:ZmQHY @R1?7|.QP%4M)C'@ E"zY{UtazGu[sw}Xjb%YsdPH?̋6-njv$Vg a {A0'F~Ӗty{r˔;jVa` XOؐG ]>6 h-6#5e6 FcUn~AxєМq =iIU`MfWNuEf=6Z48,99#JoEΊǘȁ6\}ܣbwה@p'h-i_;7VgA&MODQ';ݎHd3 ** !"knԅԁ3q|Ivo7"g4&^'MUUL8CI:E1>P)1 7wƆ;{|u*n4f>Z]#ΦTSjKx.BN_9aU0DU'׌@}D52 f܆ބAˀ+~}'yXtzm֒ieP39\3;S]J2A|^8Fq/${{&/9%Zryq 1x-h)Vf"}Ng vסh>ppCivi6jal>Z mQ-nIPo@lq.7r\. su$]tYGvtu#?v.NxVѣi|sjvv kpoݟlqhymtaRnY"~oQ"q Hޖr!@ s@6ߓ,t]-'buk# v=g vvxRymH|Lnv֠Cnp1ohQp`qmXr]Pؘ6sTHntM?uB6v=,lw)#8wxAxvъ~y{ Dq|r)v럡rpE6sXhs`?CtEXMtPuH,v?*Ewg5ݒ}x9,?x"y{ڎyy{zC|.v|>vv:w o_wFgTw_wWx:O—VxGJy^>_ y5DczW+䐮z"ӏd{Kӎg{b{ŊH|d}*Ġr{{i{uq{n3{f{^L{OW {O|FȕV|>=|j4Q|+|"V}El}u_}Պc~ ~|Łgzwt쀝mٜSf=R^WVc3NsF==d4SK4+!")?LԊ~8yQXt5TmXke˃]_U_M+$E<6\5H-e%菤eŽ㍺ 񋐈/*xsѭnGެgH_\BVw0N5pEv@=.Y4$ ,Ú$|/ȍH b#N䃒_vzrrmKyfqׯt^q_UPMI^DӔo<:_3p6*#[9 [)zੀduI=enfh h(aңKiZС6jSHldKymC o;`p^2q(r~st t{ux3ygthn֦jhtwk aRlua6\̈́.0%_},x l⍷uu~pkYe2]Ċ7UOME=15Q-%7Uچ- xhƋgtp9Uk$Td~'\垝TƝ,Ln@D̋<"4֖- ىh%Ȉ‘1\ KgVsʣzoXVjh/c\(SnKmC֎;13䖃,MƋ$(-ݑw P2szniԘ b[IRӜJ]uB⒘:F2)+Ɏ$ `䊷 ՃnErPmڠha.Z_QiIؚA˙Q9ܗM1Ow) "גo ЎPTˀqTlݠ*g`˞Y2@PH\5@ڙ*8ʜ60I(唘!O} HX;ڂpJ7kٟ|f_םX6PnWG3?7ėƠZ/M8' cK amo;@j͟=e8^OWHDO!:G> T6֗Ť.JS&5 v_%rNbld4f:e9`LfbZ<8hSiLpkEWl=pm5ok-,zp#]qxrsE @tLAv2y?q fCl70g]fҫhK`ƩinYjR{l#Kϣ)mDXnsy;̞%t}3$u*v!w;x8x iyRz|TqlsBlDs|f֩Us`vtVYKtXQtJ{uBvl; w.2w*x!ܗyi{z0!^z 6){P|%>}QpKxkxxfxm_&xXzgx&Q xIǡxyBF{y:z27z){!{Io|QO| O}Y}~o~j~We4O}^়}W}PV7}H7}?A/}^9ڝM}z1ڛ})}!c~m~\ &jn۪$j/Vd駩^WbrOۢHn@ߞЁ9/Z1X7)Jf!ʁ}˖ q (n2ijd#^V OKTGàSQ@&8x0(֙ iT ;V?m\Hi Bd Ŋ]E%ViN-F#?M[$70ņ(_ i#+w zwUulShiڎc&]UͣMF%>iII6Ɯ}/O'݉F :.؇1Յ `EQkgTb¦z\C TnME8&=v[o5М.^'*ߋߕׇ 1Y ^jٗ fa¦u[S壁"KXDB*l<4ߜ-M쏼&&uU4o' ,-3iwe`¦^ ZRݣ{KkCN>o;3,W#+%#>Iw jV̎iWdF_ޥ'-YFbR J)B{N:Ԟ.3+TM#SEdn5= eXh8Įc󥲭&_qXzgQ3IDGATM9 24*e؜Q"땂*}2ʅ$pg?4b.^#WP=_Hd@>9n1I1)\Л!ɘƖJ S$?*vi`duha^bXЯdR̭nfBLgEbi>k7bl/nJ'oSpVq }rIswt{hFccγe^FfX/gRiK骃j_E k=mW6Pn/pD&qrSGs dtux\|8ggc˲Ah_2`iYxPjR٬!kKlDnM=Vo6%p.r<%st& ui g7v[wgz%|jgkcޱCl__zmYnRrnKmaoDQ"p=#r5s&.~t]%QuȜv@wK x;1Dyl/{^}h㱓q(d=qj^ݮqXѬqQrpJĨs*Ct~6~g$z}qb|]F{W/{Px {0Ib{nBZ{;3{3С|B,+ |$QY|M}WF~ /TE kftłb j.]VܫAMP!pH駖Aťv:q33{+c#倆FE P͖Ӑ倎eů95a\mVyŅOHW:A#9գ*>2:+!m#4 ΃Ja}-e֋aym\A V mXO.G@i9 1<*D#,mnuL ُՀ4dk`p7[ҍsU7CK/3(M"f؛_щ fOndb^^fZS.L{E$=ƥ6cB/i'城! {kN: \\etsa"]@XRY KED) n<ץ/57.@T&ג ǐfx8D |h(iVZ=`\qWQJC1<;v4ޙa-O#%:Ӟ<:8-O} ͗9~1{Rx_խ;[ϬW#P쩛NI B>T:z3g,{̝$9( 9SkW_ [`lV?EP'I iFA u:E>3 b+e$ИM.KK` ñd`_][_ VG`kPصb KIcElHe>歖g81iV1MUk*7l"inn%oߡpeʟXqEsyw~_#:aZMb,V~;cQ1dKyfDh0>0Ti7ik0~>m$)Rn!?p[Eqj|rj7s)Kuy;^Oe[LeV+fQ³h3KciD;j=l[7Sm0 oH(¥p j|rK!sx9,t\uZw^z4^%i[:9iW3jqQkKWlDfm=8o6pA/q(E;r 9tVnuxjvZOw̙yo;{5`"~n[unVnnTQ mo,JIpCq B7=00?):h"l̢e‹# D=t5 Yo U~PT0JvDi=F-I6NJ/Rg(bɔ)!rJ t捗|׉ _rTXHmTb2OౢuICr0x`ry yIs~yltz`t{BTu`{ISu|'=vF|1vb}'%{v}Ku~=6kyl}yݼm}zNnzozp{6q\{r,| xr|ls} `t8}[Tt}I1u;/%u %tJg׉gµh$miЇklHTm?nƒ;oZwpl-q_rqTsTHt==Pt1t゠%tcsς7GfgzhuiMkSΙlƋ ;m݊Gnqw>o숫kp_WqчSrΆ1Hqst]Soǒ$Qph\Dp֎8qj,mpٌ>o IpT|adcOdf6iTgעmٞ2 mK%Gml77 mz]ٽ_`Gb*(deƴ)_gGM{hOoigck8tX*l`Jm =mo1mp$Vlpx l mgZtxj]tkݹEumuxoupcvqvswt\v wuiwv]xwRuxyx~G xy:;xy/xz#x{rw|3qqQrrrss]ttu]tv 1u0wux*uv!y%ivz ^(w zRw{JG5w{;x|u/x}#w}v~?]ojx2upxpy&qyurz_svz^t%zց.t{Subu\{iu|v^vy|Rw };G*wr};w}0w~[$w^~vHBZn,}y\n}o}Fp~q~r~\sP~-t~Rut~iau?~]u~R[v!FvP;w:0wK$)v u:Ɲm vom-nMopq|rXn>s ctsUi5tJ]uL2RuFv;_vЁ /v$v:u=ūk潇l]9mA4n='oH p=Aq:r*t`suhsτ ]tQuZQFRu;vZ/v|$v?S%u_QĎjEk:;l#Cjm/rnA4o>ˊ-pI0~q^srEhJsW\\s醗PtÅEunG:uބ/Mv 3#uуu i@jkj"lmIn=oōK~UpȌbs#qmgr[[s_PPbt6cE*p 2p&p7n p/bѶLd%eDfͯEhb+6i쪶k'3y.lDmm]bnwxV;oUIo=1p6|0p%$}o`jn .o4ajc,Idh$e̚yg3yi.jzx^k]lla'mUfnԡ}Hor<5oǞ/o#_nŗsnC oaTaSbK=c)efε hol6iįwj kl$]`KmZTn[$Gof;0oSj.o+)"DnFn"S ox i3xkT xDlx}nbIxoUxqyCrS~Bysrytfyu[zvP8zTwDzyx9zzy|.uxHvLy4vy}w!zSrLwzfw{[nxf| P'x|Dy|9y4}q.`y"}"x~Ow~q|FHrF|x+r|Ǩs|pt]}u&}u}E}hv8}qrv}fw1}[Ew~:PxA~vDx~9x~.?x="xQywEphaq=q׀ۧrʝNsutMt|~u|qhvfv{Zw6oOwŀnDox(t98xX|-xP"Hww"/omwo'pvqgrUsm rb r?VsK(t-?Ztp3t(trnsRij1;kpl7JmnΜقowp,l;qcIa4r?LUrdJs>TsېW2s4&sSr%r}h ųiGj#ki l@nnvoߜknp`XqTrSnHrƔX{vMMk|w7B\|x7R{x, {y {zmz { yoyp\yqAz0rAzksG;ztHJzu2z zvnzvc{wX{@xM{cyB{izR7{J{ ,{{ zu|Zyu|awu$wu"xJv35xvԚ;ywgycwyxz yy'nyyczzXvzj{Mjz{Blz|37rz|,az}. z}y}ﻆuzԴ>v z{vz{Vv{kw{x{҄7xq|yx|^ntx|c+yN} X1y}RM'z }B#z;}7%zB~=, z~ y~x~tQtRuiRu.v{w<kwxx\wmx[bxWy,LyAy6y+y Tyyx؀sosÄȪtB1vtۃɗ_urvK,lvwwm8wbxKW!xLy A*yV6?ys+FyY xdxSBVrUrus8sֈʗtuk~_uwvA}mvawQ[V|wK|xsc@xƃ5x烘+xڃ@xrwqRױvqяyr]Vs ds֌`6tu2vul(vav1UwJ[Kw׆@Ex55{x`*xMXwτ wZp-pƔKQqi=r,Ŗs^sۏ\trPutIk&uD`)v+"Ute_]u Tv;Iyv>Tw39w''vuCumhnBcoj֟pT@qYrX#s tCsi\tH^uSuxH'u ]jc(k mS~n~o-~qu~r(j~{s<`E~1t}Uw~uJ}}v?}w4}x^)}6y"|y={z}oI}o§q}p}q;}rG}s}tuu}uTj}{v/`%}ZwUk}RxJ}Ux?};y4}zG*|z|{v{-{{t;{t|u(I|{~3{)-{V1z:zPDwp{w̓x&xy:y}ysy݁i1z ^kzb[Sz&H{ >E{53{.(zzt*zv׫vˈEww[x#x/}x酾syZi y>]yUSzHAz=z53)z(zz hy(u^ܫquv%$v{wJƇBw} x+IrxXhLx]WyRdy~]Gy=!zP2z!'yXyDy\t*tcu"uviΆw |MwZqwgpw\xuQxG0yX2R9s'sWtZyuEo0u%dmvYvO+wDwb8w]-wVT"jvŒ_u u򇴮p 0pq[)r8#Ls ;s_y tn]ucuYvNvBv˒M7vې,v!Ev$\uR urGoƧoͩp|T>qdvtrYasDUxGsSmt}hbtjXuDMv3AvKU6vi+sv= Xucu uT*nDn_ofpqoDr6wsElsattWuKu@huҘ5@uH*uJu# u! IuLAm^0n nop˫k}qکvrksR`sVtLJu"?Juhh4u(umTtu  uvklsmjmճnԱp8q!urjrè|_sjXUt!It>7u $2u8'tot&t؋4uiY,ja*k΂lܐfan(od|.pqrzqfցr\sR4?u Gv<v2xw'R xz=~eyL}y`no+woUppq΀r{sq"ftf+u\IvrQw]G5lx1<3x2 ~y'?~yz!%}z}/z$ss⠉ tU*tuv/zvp|wfNIx/[xQ~yiF~zvvv-wyw™h~xbtx_jx`fyWV.yeKy#@y5y*ylx܋six+ xЧ_tҤ8yuAu #vdiw~$wsx4ixZ_OxUxJmy?y-b4fy!)x)xWI@w `wކPsѠtx&tw0uvd}dwsw hwܜ/^@x(DSxv5I!x6> xĔl3]xÓ(xwMfwd(w~es6@stɐFtu|vr2vgwe],wRxGx;\wwNjwԅX0rUumrί×sGdtt{uqRv|fv\wOQwSFwݝ=;x0x&wߗQw.wxqadeq᳭rlӎsHۅtEzu=ppuevu}[(vߥYPw?Ew0:w#/wʜ$wvvwxM۩އi%և)ikElzmnvplq!bar3XrQsQNtDHu9svk.w4$#w€xQQximnOof05pTmqFAr)vDs!l4tb tXuMvCw9"XxQ.x$>|yjqyz7΄rơ@ds.+stPtupu׃v"lvb)wWx7MaaxBԁ!y8mz.z# zf{]~{J*wwтxxXlx~xu!My:kyaVz3WOzL{B}{8z\{.r|"$|^V~|~Z|է|V|J|4|K|O}|_t?X|j׀|a}V΀j}&L]N}PB@+}8}-}#H~s~~4~~5&ǘdy&Z.|′sgvj(`lUKAk7p-W#w~~d}l L珓!Ä+|Kڃri]b_5UW;JB@M6?, "~g~'JO}ˀѤ~ɞI~]h~Ɖt~ޅ~{rE~h~_'~T~FJQ~@'~J6K~,g~y"=~F}s }1ߣ}ŝ}I~~)#.~P{1~wNq~Vh0~*^b~ T)~ I~#B?~35~2+}߅!a}q |M |}GE}Nϖn}\r>}U}z}p}ߎgc}]}S}Ik}?})4}`*}=|{ޅN {|#|3|Ж׍|{}@3y}p}f}R\}9>R}> } 3[|ۊ(|_|u{p {ʠ|J]b|Y|kp|d|蘁y }:o=}/e} ![|钙Q|G|֏=|26|Q'|0{w{z1 Dz0|||I|[h|x3|SnV|d|ݗZ|)P|VFn|;|1{&d{zyz‰zW{v{ {|(Cp|}fwd|̟mi|˝cu|ěYX|OE|E |O:w|0{%{K9zr)zzle{ѭNd{ǫ{{𧽀|Tv|lq|¡bE|X|N|fvC|'W9${.{g$D{uzmzczyL{4{{+{#|5u|ku|a8|V|L|]nB|M7{ٛs-j{9"zꖚEz9X z?4z{u{{p{`~|Ot|Ajr|`4|¨U|K|bAu|{6{ڞ,;{!{z! z<{ڣh-Hi;jmGl*mV{{nq͈+ogׇp]qTJrJą t@|u62&u,v!&w!vwx fxvWmfm{nٌoƒjpzqq*rgls]tlSӅuUJnvB?w5]w+5xe xE y yƠԈrrj-rs9et'ztp]upgKv3]vSTwIx>?cx5uyn+wy!_z+szg ,{ev^1vw.҆wgwy)wp@xfgx]^)ywSFyIA/zL?,z5Bq{(+h{i![{׀{ 1|=c@{{){!{r~|4$}*}9!F}J}B }U;q :R<8 vwF nn et?)\%Q삎~GW~=%~3*T U~ ~1'R u烶ƃp_vуmdтv[T:5QF݁R<ЁB3R7)P ̀g ](ă.<凘Іv;om\dZPqjFpQ`1n ' Z2Kr~wq }ԃҕ}ڕ2Ѐޓ~ftZ jՐza}VXD:(ND:w͊07&3>~o~}s+ ဂ1l͆vn}sjM`8W1Mʐ C9Ini.:`$~[~Y}Çx}22C41ـ"ƀ8 |Yrti'EF_ Uʕ LATBQ8L-~׏#{~9~}1|rՓ&5𣃄 {.qՀN;h)%^^xTJrA(%6~P,~ "~J3}̍ X}|ag(̨Iizvp:g,]OSqId? 5~˗+M~! ~?}ȏF }|(Аɪyo6f)&\4REĠHii>4;~ʚ)~8~MmR}ێ\ }}Aa㳏^xPn;Ze!39[3EQ0٥IGC}-=b3~(~n~~3t }*}Μ &hjiej{Hk~ȍlv6n lLo!c)np-Yq>P:zrZFvs}uAypgga-k^oUBKɆKB8hH4.%n+{ t͕sꐮ腸zy7\oƅ(f]#TyKOA57҇.`$+oJnS);Y Ɓ쒩x̑}o se߄7a\ЃHSC.J?@삝6Â^,ς(#S@?+3ăkћmxbgwńSn=wdރݓ [mRvI?K5r+V!fGKqV߄M/ 3 vރmHc Z4QEȔG߂dY>v4 s* iz b  XV䣙~ɠauփl\ba"Y}yPFB=Ք 3)M+=ڏD> M]y}t݃kjKaJZX]NɂEC5;1m/'Ӂ(ր\ X3t'уொ]u|zs߃yjp`߃IWF MD::p0ft&t@ABpŌj T^xxVpv{qXr߃v9iqH_^s/t&5uX"uu wvull Rm^nPw叙oJopKf㍕qM]rET~s8Kmt.Bu8ku.v%ew.w4w !x_o5pvqTqwrio1sfus]ċtTuKvOAw7ɈUw.xK$xexRx IyΒfAttrtjuUwhun uf v]w9TTwJ!xAny7hy-Ey$%z+ z0Ӆ%zzђAx֌xY7x~xvymڌHyQeOMy\Zz*SzzJz@_{6臗{u-M{#ʆc{a{{c|l}u֍}w|~|uO|l|dz}[}AR}YIH_}S?}R6>Y}{,І}#r:}}]}(Q}F9dƍ3Єȁg};<*t񋩀l*c['DR(oH>}5,@"/~eI~ΆcKo|} tck`+bZHQU7Gj>:5+ֆ "9<Ƅ*'Ìh|NWsۊ1j߉b-fYk(P}p8G=}=o4+<"8ʃYׂ5 ]되_dx8A{ډۍlsX|yjUaqSXOEFg\=q4 *B!քӆI_:>n"3n$񈦉ɓ{{{W,}rgin`ێlW3jNeEMX]4Ξ+E!S86O샦 +sgZh*izj0rEkpjlb`mYoP̏8p.GӍqR>rg5{sZ+ tA btψuC Uu{wTj*kgZldy{bmPqɓOn\i)ogapYqPO}rG.Es=-t|4RKuc*@(v0 6v0]v 8wx勀n\oC/oyApqƒPq`iair$a ?rXsOtFu=Pv^3w)w {x9;xc xZy rs5syXt%qth쐵t`uXVvGOō+wFDw<ƋAxK3+}x)INym2yky AzT.'{wVHwYڒwxƑwpwh1 x3_xWy5NyEy<0zU2Kz(&{! {dF{Z {` |_|%{~{wё0{oɐ]{gu{{_/`{VA|FN3B|uD׋x|{;q|1|(O }}'} }b}RR5ր~T.v됞ofs^iVMmD&1:̊~1p~(3$Ն ҂~쑪}`vn#f Z5]PUBILYwCr:U1@sg(`nFVچ /5V ;}}W9vDm eQن\ߌՆ'TXޅK5B29‰0 '-xu P'|um&mًId=\LSj]0J|qA‡9&/܈p&Շ̆be iYT%VŒb|l0JuSRl,Zc[3؍Rl쌨IA^8n.4 %45]N$W 3݃vrfnM {wtslc2Z3mWQa9HƏ ?7Jj-拼$ˆɊWꅘs rGK=zsKUk#b Y%8PHRGl>ޑ5/,j#aC قQZb sgšyqr0iǜm`pXǙIO#*F3vY=MÔ4g+V~"ri_@^|! ~5Vxq/ʣh֋_֋8LV늣MEn;2 )͇!yBG/̌ǭ{}\weשp>g؋A^Ë U܊;LCk*:1t(i l+<.؀]{+vioXHf؋]Tڊ}!KB݉r9ʡ0j(1'-b4 ˄JwfIg'yњhsi0ljdۖk\Bm(TlnZKԒQoC p:fgq0=r&"stSƋ[t Yvuiw9䛗ijryvkvH w?e"xmCCmyns!rowksUp3cJAq[\qSwrK sAяt8ggu. v%@wA9w^fw oxoz&q"qyr^s`rkbs]b픘sZBt}S7uOJ{vAs-v7w.,xS$xlyy+ ͇4zoX{HBu~uy(v2rXvpj}vb w ZwR'`x:Iːx@y7ly-z+$Bzzz Ά{҄<|qoz~#Ezyx'zWqDzWiuzLatz~Y[BzQc{HI{?Ў{6{-0|,#ދ||㊑|ډ| }(0,}<4}Hw;~pV$~Yh%~;`ӓ~1X~PP͐~HfN~?Wv~W6U~,n~e#ҋQ~d~Sy~ ~\~Ł|vԕYHoݔ~h$`GWޑWOƐGc> O5Í6,#ʊ&T ʀ>Ƅˀ<{sv\'oe߆g%_7V^NFO=5΃y+d#Z!ۉ3U ɍ:(5o- $T2V)~ xQe~)xز]t!noyihӏլ`yuW4OF=ÍGZ4ʌ+ĝ#wN@ ÆMc:}e.xiefrMgkh1dלQix]̚jV lNN#lmEn=p 5FQq<+r^!gs;鎸s֍~t U~uWw|xhfwWi4qڞJj kuk dJla]mUlknMoEu1p=r4+s:*3tK!>u\u|{ uv1yj|kw}vlr%^m_kɜn&dso0\qpTqMDDrE"s <t 3ipu)u v@vLwZ։xz{owKpFr9pkכdqd>'r*\*rT|Ms}L핼t[D͔ uB<v3v)w gsx>n}z&~&D~2~cz~~텘~z:u0owe7hۙMaj0Y`QIIڔ+AĀ9X0z>'܏ yG׀֍uw3MyLVsto†5hg`旪TXޖPHL@ϒo8Af0Z'] (bcgC'nx3 sǚ0snOgHE`ZCX(:KP·G}L?ݒ,7Ӑ!/ŏ҅&jqBfA䄔%Ђ`Mw؎r"nrgs_—;W^ O.F]\> 6و/$>&n;Ë. o 4#v9r8 mG8fS^dKVtƏN2zE6=ۑ5񐻌 .C|&H֋x ˈyۆVluǘĚqqlJ`ela]ŕÖLUmM(ʓD钸<4k!,Ϗ6%] ڋ< uSp\1k;dS\F TQLv9Cے ;t3iQ+a&M$1_-= < Ks8oLjKNcI[S?=JKDBȒe:yfT2/M7)."y ڋ( lҀrhenªThbW=ZR3]J'AT9m`1W(A!VGG~^ "+zq5Xl g5asFYdhQ6I +@֒Q;8{g/h'a ʕ|}t! ˈۆjLҀuZcp{>dj?+edBf]hVşiOrkLGٛMl@ mm8{oD/p&qrr s=ntwtfoogjHhci]r6ǖs.. tG$/uNޑuˑIv' \w ? xezsmognjqoVd7ap\pUd\qM웕rkFwsM>tH6Xeu?-v-$w̑wPw @x[4yi{uro6ri͡Ls5cts\7rtTtMI"ukE™}v"=̗v5:w--x.$xlyieys z&z|t?Yw:owKiwkb\w[xwSzxLxEy=Gy4ޕy,~z^$zɑG{`y{^ |F|}s |Wm |h:{a{Z{SI{KW|D[|X<8|4`|,$|#ɒ}:1}8w} ~s~r~r<9mljsgϟ alXZ9RdK'UC~k<;3}+,#`U^afw hm. qi;lϟ؅gf;`˄YyRC9JcB:䖑D3)+:ӂo"Ow Ɂ0pd\kvfߞ`biY!5QUIR1AΗن: WC2]녮**"Ņ  ÍDhXloNKyk%QfBL_՝#X{|PH4c@ؗ9:71̈*g"[I׆2؎ σhn 8nSij\e|g^W׏OnG&?ח 8@H0ʋ`)=Qv!đ4jB 􋵄Ym|iYEdv]ΜuVcN}Ft>͗Ő6W/^܎'_S!E"~: yƉ 6lAh}c\֛PUșMEg=Dw62.A~&:7 }B)- _\ 2k˥/g]bi![қ>TDuLQD)<4- U%d?ffhUR qLjӂqj^fM!aIZϚΦSz K{C—$;{3, $4Lc.Y ̅i]le1@k`>]YᚉRJѩB՗; 3N+#d&j + ꎔ_(5(#lb*gݪcbad.\ceV gOhHj Aokq:vl2iRnM*Ko p'qr ns,uxk{egebf\@hfU1iN3jGܡ lP@2m9=*n1$p>).#q srÖs]*UsCtˍZw^z"k hNgzi!btj\DkIU}lfNˢmrGn@Ho8p0r&(s\4tkoHuupv!xR{j)kflbLm\nmU£oCNw,pG8Aq?Qr8[hs 0yt.(uAfv;vpw\ xpʌy${lMpg7qaݦq[ʥ qTor|Ms1Ft ?;t7u/jvq'wIw7xY/2x'#y}z=ݕwz@{S鐑|Ō|@}j~zez`UzBZBySVyLDzKEz=@{6e{b.{&{|^} }~z~nn~iħ e1 C_YϣR K(Do#=5E. ~&\I~SymK6IQ΀Aho[dz_k:YXRhK_CM'*F"痤eD!mBYd8o`0z8[iU,4gN>LFX?6k70E&(c!ڏ9inⓝ1Ԉ<˅c(5c;D_ahZ|WTHFnMaaEמ>Zw6D/_'ݙ 80A r; ;4늟JЀb3E^<éY|;SjLsDhs=k=6!.zٝG&W'u֕/wo YLPlzҀa7(],B5X}G|RxFKz<@C+<`5*-ž%ZTmŕJ= Xo΀d`_`YbMTi2cNePHfA̦dh}:)j3k,m!%;n%o pP qVrRv!{bʱb^cYueTfkN7qgGܨEiGAj:"l%3m+ɟo #ϝpjМqr2 fOsDStxHv}b).e^yfZ7gTiBN~j~Gk@ĥl9ǣnF2ro+1fp#nr<1sTjGs =uܔvy}Tb53i^jZRkSUlgN`4mXGjDnP@q1ot9wp24q*&r":t(u/u ˘nvxPz}Jcn^ʭnY2nT&moMpFqr?Ĥrh8ǢsZ1ktL)u8"/;v.w,w ByFYz${}gc s^VsYsSXsSL1tEWt?Xu8"ZvL0v)Iw!FxcyF⚇y f{7A|}U~Way]kixXQx8RxwL xE;x>by7x y0OCz(ޞz{!VQz{Ԛa| V}l;~~^a<c\竵~Ww~R }qKK}aD}=}6}/}(XX}!}?E~ !]= e`+C\^WރQTK$΂mD"!d=296n .䟫'̞ oH> 򗜂8]p_ψX[W#n&QZJtsC߆F ǃ]yn]]Z?3IUߨP>HPԆ ߅Α߃<\HY0)TNҧH'^@줭9/2l+tď3$ԜpVMEh ږSS[ZXD@SMG9(?Ŕ}8ţ#1*#gf8{ ƕևA<LZwVuRu4L֚Ff>7ˣg60)'"Γ}1Aafs (~Ց߃A YW@VOQ4 Kޥ Ee=6ܣX/֢Ck(РC|!k.6 ;7ۂXͩUPKFDR/=.ا6r/*O' _Be Ӊ!V߅рZ]cVM^`Qke_L(La+FΰbA+:d:֫f4\Sh:-i&ɤk{m+Sn< oڞypr2w^Ya_U۶`QôbQL~cF2ey@g:*lh3!jQ,ۦk%ꤍmBn[p +q6ra%tx8XӷbUµcR eȫr8=s1t{*ťuX#hv0vYUx `ya֜zE|&}YvTbtP5tJЯ"tDIu>dvj7Gw)1?w*2cx~# yԢyD;z :|+Ɯ}%>c~39Xz}uTr{O-{Jty{ D9{8={6{0X|+)|i"~|-|} ZC'*7%WݲS΁OxeJӁ3CȬ.=f#6gc/ (Ϥʀ" 0:ƀ̠u (<ydAW0S_ZOIíeC[Ѕg<|)Y5;(.c(!nݡ;E# G|/xdVVM/R NIjBΫe;ǪK41.X'Oo ޢkxasԅ &hqUAU}QՎ|M߮xH|Bu9;4%1-@p]& -Ј e_1yTyPΒjL}GOf@x:36>&,b%8 a܋܉ 56}SpOݯdKF& a?ҫ9Y2Cm+|$iPΐqpK$ *tlx@́#mR"NBJtmE"l>֫8U~1G˗*l/#֥bt.% `ؚ:ݕAeIP桘MrIN=D(ȟ=ͬ170M:k)"ꦙ +/t ΝG.@OӱLeHW}|C7^<Ԭ}&6/ny)"@w1Fuw;uvIx/vry|#v'zJuKzjp[6kqlrmmysxnt[ou0(pLv9q wPuqxMirzy']s8yRSsziFtz;t{/u|/#t|s}NhwHiwyejwkx{-m+x+nNyXoLy݀pCz]u,q{iXq{]r{R$sk|YFt |;at~}/t}y#tG}s]~dg|;h|9i|k|:lI|ڗm|4n}qo}4tpq}hq9}]^r~Qr~:Fs~f;^t~/t*~#srU,fq gshxiq&k9Zl>_m5n/tQo/hp8] q1Qrk"Fs';Zs/s#$s:ErU ef gPǪh~&j kڊl4mӃUsnhyo\p{Q+qׂ,F,r;sD/s#s9l"rx^cqdme򉵩g^']hljskb~lsWn Oho[p+ PqDnEr/:rԃu/>s!#rۂr?bbOcke/ofh'ؔxiJj}l/rmY gQnp[}o{PKpEaq:.r&b.rm"rG+qzb-c@zdw.eag̓ij[@}IkqlÍfmJZnOpDp9tq-q!q p Vahb/2cؚeZN>f𗂓Mh i\|kq=lG1emc}ZoniOonYCp38p,,p|o[o…`aߢXQc2df\h Qsirv{jpvk֔elYmMnAo5o%Z)nۋEmnz_aDb?dŝleˠgyhݜ}{jdokKRdClpXmmLn@ntd4n(n?lی_nSU[^ٮU`=,yacWxe QfŢÅh%|z/im!njcPk™]Wl—KOmA >me3 m 'mkڎm6]N_fа`;bdMctfgcpyHhmi\brk$W l.GJ6l>=l喬1|lp%zl%kYK *lu,]8^2`aHcdeBfZx{gliHajEV!kIJl)!iᖶjю# olÍrPgcri8s kslAtn.Ktgotq~Kurrusfvhu[/vv3Ow w"Dw~x9wx.2wy"{wRzv~{`Yo"n޻oo̳hpqq,r,qsGrrt9.sDuR}svvrFtbwftx[.u~yYOvzDvxz9v{j.v|"VvU|u}~lwumRvn=vĩ*o5wcp?wq;x{r y }cryqsxzafVt{ [t{Ou|| Du|9\vD|-vK}k"Fu}u~sk{%k{V~l{.m{o|;p7|>2q#|t|q|qr}fsq}dZt8}Ot}D_ur~<92u~-u~";uetr~j游jBk3ln(soMpI|Sq(qrerZYsOtpD$u 9ur-u"8u"Jtt}hiT9jݦkуmIn(o?{pApq5e^r^Yr$N}sӁCt~8t-u|!tqbt&yg`hDuiUJj' kчzm n/zoSEp pSdqPRYr?Ms-KBs7ti,tq|3 qf'hp^o-=upc,d\̬eѣgh⍙j)ik]wls-kmp9`n6Uo\>Ip=pk.24pw&]o܎1n,oTbC'c{ d˧fEugۣ9id${jv?kk lĚ_mݘTjn^HcoD~iɢukjj*lG^m7SnnGCn;$nA/Yn˕#mrm| $nP-`aŲc7d8fFgݩTitjMZiJkq]l^Rym}FNn:nR-n"lm) nC_`b9˟!cҲweyLg`h^si.h_jʥ]kQlETm9mѝS,m lF!km o^`abs㉩&siqr ghijԚc@l(mu'#nlt9oSi?p-~^bqSqOGrq<`r0r%rr np qhf߯!gChiӔ}kZFl0~NmPsTnhCo]zpqRjq&.Fq;Vrj/rh$Cqm'pLX )p0eЮPfgͥCiYnjK|kG}l6rmLgZnՙR\o̗?Q]p@Eq9q78.Pq'R"pkkoc pJd8eȫfМmhJ̒yik\|l qm0fzn-[o-POo|Dwpc8pO-[pu'!ooi oφŲc۲d,xf?}gn"hƆjXd{kfplemZnODoUCeoК7o+o SnUo; o憻bYcKe,f\hic{jokҦdl;YmN;nƟBPoK6yo{;*o5%moq bycLdNehgB߅:hϯIz>jnk*eclIXmdM4n>lA1nš5`n)nmL8nr_y:fy7h-'yPiǠyykBylٌynPz'ovzZpkzor@`zosUztKzu@4zv5Pzw*azyx8yy}yz6x?~3xb~) xA w9wmt>pVpDq|rAVs!!t~6tsuigu^vSSv퀞Hwu>wр3dw(w|wGwGuocbot*P]ctކRuGv1R=v2lvքj'pv u^vڱmAD=mno@paq[|`r>lqrxgUs\tNQtGu%pc2p)'p@ocq*tʱ|f|gL|im|jב|l^|m}6|orT|pSg|q]2|rR|t'H|u?=i|vE2|kw2(%|x*{[x+zyBzl6zmZ{*n{Wo{pF {qt|{rr{sg}{tw]{uRx{vG{w=4{xe2{y1'{ryzz {${xqXdyEqߡyr}ysJz-t)zxt{zuqzvkgzw(\}zwR{xGp{Cym<{Kz'2U{/z'z{cz${y|6[wvwmvסgww<xQwxxyGxa{yzxqhyypfyy\&yzQ~z/{Fzl{<"z| 1z|w'z2|yh}(yD}u`|6u|=vH{v|7wm|1x|AzxT|px|ex}[zy?},Q y}ZFNy};z}16z~&y~Key~py~tlQ,t׀ğuPVu$wv}w(ywowexZxPYyEyw;y0y&5yBxxȭs7yst,t΄%uWvpٟxsqiArL^rT6sIt>wtn03t(tfszxstRAke.lfglܩm‡o }yptrphhSqx]rHyS sTH]sN=Gs藖2ctH'xs>lr+sߋtFe jyl k%Vkm n3|oMhrp7Eg`qG\qMstij:՗Uk +l*ma{nBq.ofmpb[q Q qF-r:r0s%*rqs2 u#fg:i(%ejt;khmOx3nmocvzpYfrJOO~sD~t:~u01~Ov%}wT}0wV|xw~kc~l~ ~mr~n~o~pw~qmi~rc5~tsY~=tN~uDi~v: }w/}xl%7}Ey|y|/zD}4p}Oq#}rqv}r~J}sJ}tv}tl}ub}vwXn}mwJN}bxC}ex9N}Ny{/}z $|zf{z {{{u~@{u.{v)|@v|v|w`vQ|wl|xbw|yX |yM|z(C8|z8|{5.|{$M|){L{Z|6 {"|˨ky{)z.z'zzzzm{Uz~l{zt{{UkZ{{a{|Wo{|?MD||B|9|8q|>}3.B|}o#{}4{ }!{}rxytyZDyz.~~z~tz~jz a!zV{@~L{~B{7{--{8#c{t;z) zdw w`z.V4zKzrA'{8X6{^>,{K"zzG zmv]v@waPFw݇Ɔxb }#x}syiyI_yUywKzF@z6z`,Gz!zV$yu y݁u~Ku>vjڏv uw|x@rxYix_-xۈ TyDQJty@(z5z*+Tz+ yx x򂭤 teОJtyuk3Kv +v{wRrwhEw^Zx8,T-x'IyA?yb|4ys*$yE=xYwÅ pwsZ'sԗtuu&Owu{?vqHvgnwEy]~wQSpxIJxx>qx3x)7x[!nwo w_t dw#ˢ7rdrZPstHu -znu˕pev=Zfjv\kvRnwoHwȎ=Ewz2ws'wv}w)(v˅~q| r {rsstCjyu ou/eou[Qv`QRvғFGw)< wU51.wP%&w<vUNv̉ v p$q/pqrqsvxtQntߜ dhucTZ/uҘPvGEv;v̓$0vۑ%vu}vzvcoșpD-Kpܧqʥrwsmth.u^QluTZvJHwt?x=5x+Hyo!]~y~ z }zÀt tހul3u߄PvLzkvqD1w=gw^x~SWy IBy?k1z85oz+~{!u~M{[}{v }B|~yߛ)~y~y~yɂ(yyfOz0p0zf~z]R~{ES?~{I ~{>~|;4~|*~[| }|I}C| |}`}F~њZ}o~)^}}H}}~}x~E}o9~:}f~ ~'\~~=Rp~~&HY~$~/>2~.~_4K~$~*~}~ }~|~ |~|&i|X|E|т\}w}Wn}\pem}F[[}K5Q}tG~}=G}À3c}ƀ)}}Jp#|G ~|}{{O;{ {݆F|1w:|:m|d|[%| Q|˃F|8<},2}0(}|NK| {܁!Vy|zI9zzt~{Rv{mY{Xc{҇Zb{P}| XFl|Z&zшz2Gz yyw0Nwow6xs~ytyrkyٓ!ayWzNzT"DDz9z.zt$z( lyyykymvno}vŞwņwf}x\syj'y@`|yoVyLyɒRCy8pzf-ya#ty`x]yTyKu1juɎvVMw|w3sxii,x_[x?Uty'KySAyt7ryT-Fy""y?xm yyGVtߨ$u"Zuv@#{vgr!wѠh1x6^/xT7xx<93xh)xxhw$w xfoPoю݅p~UFq;~΅ rurlSscatnY܃HuaTR~XJ~BA~?7/~o,}#}} ||~i}&}BI}Y}x}ؔo ~ve~ 0\}S.}ǏI}]@j}6 }+}S!}| ||6|Ӟ|1|}Fw} nR}͗d}"[u}Q}6H}e?@}< 4}*q}  |a| |fu| 0||#|}!v}I~m[}c}2ZA}P}ZGC}.=|W3|ȑ)~|E|D9{ {̇]{D|w|n [|vi~|ɣu}lb}l8b}k`Y}iOm}EE} <||Ė2w|(_|zZ|:{ {\|琟|iB|Oޅ-|D}|9t|^kY}Qa}]W}]N;}<D|;.|1$|u'*|@%|{ތ {]1|Oyn|H=#|$f|||ds|ŪjO}>`}[V}[FM}[RtrI08@?5$,u5#Z"s~I~x~~;:߅82}'uIfl0cZЃ)QӂׂWHv? w5SZt+т(c"j݁1ׁMԀm@RXjfa|}XtJ6k̃/c҆AZ,Q-08G>ф4遾+y"OPjր@BNÄ󂞌}"tkIZbh=YuPw0GUpc>3G4l9A+."%ۅbcj~Ȃ".:7\| t jaƍ2X}AO/MFJ=щY3) FfqՆ UWm ~ގAeۉlfle{qsBi!`gW&NxߎEg^lu4Ƈvx*冏w !S ww`w"x$)r rFLr{*shsasjtMbtY0uPPvgGAw=ׇw4FxM*Mx yCyy<zvƋvGvzMvr(iw>iwaAxXexO⇱xFyj=y34z:)Åz "Mzz zOv{0z犞zbzydzq*zhz`N_{.Wڇ{uO{E{ )} ȁȂ`_҅Ε9}3u|%m6 d5q[FRsI'@Œ8"ft.>)$̂ ؂C Z}\߅:=6|.*t$lT]cT Z]QiLH~ߑ@?t6 h,Սy#Knk` *e_L ĠEʟ{s}ĜYk7bF_YE^P@xG>>gAS5ё+"'lA ?f Ɋ]#ML߄ۄ.ȳzrS~j}ha6X'3OF=%<4'*f!ȉ$Cy~|pGxPqLCÃJ:)1(؂_C Јd€efz|LgauGhn2if k1^ldUmMHnDo;Xq2r(}sksчs :tvD'iLⓍi{ƒju'km)le&m]o UE pLq Cˋr5:Ԋs51O't''`.t}>uu BvrZMx _l@m{呒nBu/omoeVCp]?qT׍>rqL:7sXC<6tC:,Vu0hu&Ԉvnww ɄwZyr葯pӁJqU{`qu#r]mOrdnsY\ɍqtTstLluBۊv_9w/ʉ5w&/$xDՇxG[x /y_Tz^u2uC{ut&ulSLv)dv[wSNjwK:x"B'x8py/'y~%yJz*Ɇ;z kz,{qy>&ygz,yUs81ymkYyc4y[z&R zJvTzA[z82%{ .{l% {Ԇ{~ { j|k@ |]~l}y+}_r8}Fjq}7bWT};Z;x}lR}I}@Q}7}n.r}$ɇ}ӆ} } ߃})~$ ~Íjx֍hqÌၗi[>a YwQ1#Hh?πS7O. $·Dg  kYyK\~KxtqK1`ic`+}X]2PIG̈w?#R6uт-l$jۂmuLR ΃$Iet}w0w؊0pыnh`OLWۉՇO`$(Fp>aޅ5݇f%,ڇ!#~!ڄ΄= ۀ'j|cjwdvpWhZX_%VXYNdE=q5 +"` 4U N-w\M{vHo^gU ^UM@ID^ @V7t/|R;wMrkkcL2ZK;xQHЇ?07)3._%oTcvELW h,{%PvSp]j5a Y?EPΤGʇ>6!-%c$-Ø]փ[ >bbSd{6eu'afnޗ3ggi"`㔩jXWkP$mH4n8?zoo7F+p-cq#wr?sdsA t:0q6r,hps"ŋtoBtډu`vx\mkzsllu m$nmg8n_oW'pObqGvr>ALy,zv[{~BxyKwsJrwlx#dx]]xUIyMiyE:ypoj$QbwpZ QI/AH9ex 1F(\„Lʉ6aes7`y?uqpw iʏda YyQZHΌ@߈8.0qN'щ8q [aFtz-xݐLtӏoFh؎ː``"X9P*MGȌRi?q7jŋn/s h&ڈӉ<2WeZ %}(#1jx/t ߗnˎgߎ `zWcgO2?Fɋ6>jA6C.*ˍ%􈌋f&چԈ3 )PwΎ{rFmfW^KV|NRZE?=14a,$ψV/x*w ;{>v/inq lke@=]͌UUL"D~<P3P+-#H^VCzc ˃:jtVp?ԧk1UdP\TYiR)kJSlMB_2m:]n2,p(q+wq_r\ rt"vw=g)sdgm>hgdi`GkXlFQ{em|I nA˓o9p1 r ' s,!st f|tvxwBjbr`k(mxkgAfl`5VmX%nQ oIgcpAiq9%r0M s&掹tu^g[u vFw z=vUmrvnmqo9g&o_䗕pX}q;PrIrAXs8t/u&[vm}vw" Kwڈ.x{wښr2r|rdl̘rfhsF_&sWtJPou HO2u@9v_7v/hfw&&xBAxx &Eyuze| wwvrqҘv~kxvegv^FwwV•YwxOMx Gx?x70by[.ƏEy%z/'zÌz {X{}uŘ{pezjzdz]bzUzNs{?Fے\{>2{66{.I@{%$|Qd|̌w| +}<A}~0u LMp3jw\3cf \~U"{~Mx+~E ~=Ր~5ŏ~-~i$~ -1)9tbo/@j c|΃i\. TnLDϑR<쐉5z-|L$3dmMZ ۀ\s9Ynɖi*ubP[}S@KҒfCTm<54I(u,*#Ѝdk8)< m Eqb;3q9mihb犎['R[J2B|;3}A+#sjNń W0eqGm!hAqa9ZERpIA:ۋ42v͊Q+e#EΊۇ @@} vXւpRlLg7`u~Y%Q IHH@q8쏃{11|7)k"ʋ7n f ՇMQoJk1fz_WX^HOחG?Ґ57[/Z"(;Qi!Hڊ;`Չn GŶrn?wiⓇ0dٓ ^;VNߑFՐX>]6@).N&ݍPʋE`fB Ӈ9^l@hDc\]02UՑMˑFEǐY=c56p-S%\kǓ抓k<;BӇ1"k3gobu\9T̑}oLƑDƐ{<ď45,u_$lx-Ў`3ds,O%q 9bkmcend_f YYg`RhKq!j$Ckl<`l4n,֔]oZ#,pʑq::q --rqsw1oLejڡpfemtg_|8hXŝiQ;k2JlrC>m;`n3啴p+qF"dfr`wbs 搫sS ؍t5㊚uyenۡvhjiejj_RkXlQmJMnBro;Ᏺvj hw_㉝y9{[oqpkjvpd4q'^˜qWۛrgPksILsAޗot:uX21v*v!nwYxTx9 yPxz|?o4tiޞatd(u^quAW PuOԚv1HhvA7 wj9w1zNxl)zx!&\yOyᏦz4 &{ t|}8mWyJhҝy,c92y3]2yVAyBOyGz@zr8Uz1 z){ ؑW{@f||^ -|}~Ym3~hFF~(bߜ}\t}oUb}^Nv'}tG}?W}8}0_}(} P~ ~q~ ~É/3Vld+gbm\.TU2 MȘFPC>Ö70E/o(#A o;E匤ˉVkIՇhfܜ@a뛄[(T{M hEw=ە6Rl_.*'QyFD ی;V63jfaK#&Z%S-MLK&DȈ`<镍5dAg.(&ÆC&҄74 RYifeh`y؎ZgSK\[C;敁4a@8G1.㗮)3"Ch̏b~֌:<^ԁdǧ`ę(][z*UʣNȗG9a?7Ǟ0,ۛ(!'> %`hc˙~R_ڬZ!+TɗMŖӨFE+4>g87N/Fٟ'ĚNÑ som &S$dTCg٨aBbb]KchWdQ£[f KtgDh=jR6Jk.m$'b!nv斷o?%p XJpʑqRtxKf%dbd]EfW[gAQKhJϠiCǟ k'<^lg5ym.o%pKzqaߕq rHsvzeҧfa[g]hW飋iQkJJl0CymT<]nr5#o-|gp%Ur 1ss \td#ux zvejFaեj]PlWբlQWNmJSnC,o<]p4q-r$Ss|tuO v)w22>y?I{9g nan\أo\W Rp PwpIMqBrz;VsJ3ښ\t&,St$=uUv%w3 wRy#9zC|ffraq#r\0rVXs|Ojt HОtA۝&ut:v3iv+wS$1w xyy6 Uz/z3,{F}"eGaw`|wo[FvULw?NwHxA"x: Cy2y+Apy#6z2ٕzq{m e|<g|c}p~d}_|{Z({U{Nb{Gt{@gp|990|h1~|*|#S|x1}g[} Q~;~V7c(j_^qZoiT~P#MݟF՝?8h124g*̀&"v< :P9&׀bȆ^YS;M\F$i>ܛքd7r0f)f\"i8Ԕ! /8D}Li,TvaH]顥Yj_SqLɞ`Eq-U> 6Hw/ԇ(jq!ٖ  & A5P܀5 `J\fXk&RUK4/D=*5C.ۊ,'hk! tg Ǐӄ҃M4(_Т [:W|Q!QR>kJ#Cs<<y4b-W&b֖ SR9z3^͡З$ZաVV3P80I Bh7;d3Ě,1%JuJ* CFu "]ǠYU::OC4H>A{?M:)"P2-T+$tlpR*5 f\7oXlTNHGϢ@堤9>1#*#vSXL9 oҀ[fWmS*$M^ZFǜz?8W1 )Иޜ)"}:@rZ_% Gu#&^_pZ`JU)LahObJ$dPDTpe=egn7hh0%ijl) \k!mTonXZnrpo1q 0u{]\yaYbU1d Oݩe_IҨfCh+]y}^lQYblTm$OSmIFnBo;p4ߠq-0r&stuoyvQ Iwxh{W}]pXpoT pNLqaHFrAǤ r;7s4Bt-IuP%םpv v̚w|>xz Qy~zh|`~;\quXttSGNtMΦu#GNuAv\:gw32w,x.%6xKyyb!z e[{|p}[ѩ{WyR٧ywMYPyGy@zKzI9z2۟z+U{F${{a?| }~*F~S[# W 6nRq5LFkl?ݢ9&v2m+5\$k6P"蘉tE7~܀GZ/oV]R`LnT%F?A8J胕1Qk`*xۃ%#Ӝd+ ԙؘ]O  !rY:qnUfQF{K#E>c7͇N0zK)dž# K&3(, >݂9`>^XQ,LTҧPĦeK$ŋD=HK6/Ps(֊"FY]k:Z=aAbWl"SOOIषC.<;5!.{'ȞX!8,›sʙf̗?XI6^EVdDRNmpHǓBv;Lk4-&՞R *ڎmʙ=bAvӆ w~UQdM!_GZAp}:m3;,Ǡ%瞶Fbc aӉfNׂ9fT P)LAFӤ@s9Z2O-+٠@T% "*KJ͋ zɈgsyS [OK`qEzw?x8ѡx1i++i$:Wf?R ( 鄅UZo\QL ]L^G`XBUdb<߬c6ey0Qg)ҥh#-xjeIk "l mn 2r+wi ~T7O^P곗`!LaeGbBBdv©8A 1S*ǂ|$h@c͂-à>' Psf]TPwUMlBI RDl>E>70@*,i#14zP|Xž Kt9˓0<O-vLHҫNjCh=6ħΊ09e)U4"ԣI"R= +[iՀNڭjKzɏGBg\Z3 x--& '<*: ڛ5m̀IbK;H jD>Io?39@2b,4-=%7e,Ӑ/ M$p<܀rJFDC7w>?48?1+Mm)%wyaѣL UP LPG=l~eۼEmgPminjo>lHon4po~q qrAqrfr\s[ruOsuDtmv9ktw-tx"8tyqsz6gninWj+DoÅno^Yc_t`$kbdR|f |gvxVh͐m)j =ak@Vl]*Kmn@nG5vnʈ)nmną]ꡨv_$e`wbcܙ׍e gTwhXlZia.jǑ Vkݏ?JJl>m`3Um\<'m Ek%mY]8[^kl$j{jd kż[ ]#9M^`ckb'c򥈀,eJtfi_g2^Fi#S'j'AFj0:Rj.jx# ih!iӏQ l%f[G\o]C_alHc=~dsxekh4g*]2ht7RiEi9Aj~-i!hi n'ZBms[]^Գ>`Sbz}cӫ rve2hg.f\+gڢQh`Di|86i,zip h, ci oYkZɼh\B M^ x_񴽈a|c q{daf+e䩰[*gGP!hqICh7+i,H+nh@gPAi}q2pe.pofƯ phqj*rkrmsFoztspot7rctssXtu4tMuuBv v7v>w,Zv4x uymu4zll+Gmvm)#n5nv*noɚoq-p53qY(qBpF~qH apc9d@eBgM8hޒe~jtk@ilS^m{)SnHos={p2rps'pA npp4vaeM>bcўe85ufΘpho~i;sjʓhkے]lpRmG]nn;nQ0yo g%n}dmJn1`#aҢۧc4d/f?-gP}ifrjFgkX\lqQm=F=mU:n;/%n-%#mggm6 n _ݩˮ}a䦵bmݝKcegE|hftqiwfjp[kԗTPlADm#^9emk-mG%" l*l{A YmY_`IaKc:gd f{gtph@ej Zk%OkCl7ld,l.!Akoel h mO^J4_z2`ѯ'bi֐daezfmoh1#diVYjSNkiBkF6l'+k j k~ o]^q_a0XcRdyf0yng{chXiMwjԟAkZ>5ky*lkVjkq:\L]̹_٘M`m[bփd-&xeyymf̫bhWiOLrjA@{jɢ4k)Uj›ikrŅJs[djYsf sgءtQi|Btk5uIlun`vvokvqa`vrUw%sK$wu @gwv'5wwN*wwxwvynAvfz7p~jհq#k۩qmFrxnSns#osq ZtCr3vutsskcut`duAvU{uwJv3x?vx5vy*&vzu{Pu|myq/,n rhnrҟosptquLruvs&vk!sw`t>xU&tybJIuz?uz4v{l)u|u]|u^}kHwL4l!wmxnxyoHx݊poy8DqMyuqzjrz_se{ Tt%{It|?HuI|4u})un}lt}yt~j8|k|rXl|rm,|n]|o|Aph|tq;}:ir}^_r}T9s}I3tS~ >\t~T3Ou~(tsKti) $j Rkol.Pmk,n~o tpg&ihqK ^{r' S{rHusƀ=tV2t>'tmgks}7t0g7hڅPtiބkP=la=m}nvso}Ehpm]qkRrOdGs/.=#sЂ20t'ts'tS9f"g͊,hЉojkoInlÇ}m9rngo-]pR;qGWrzym23dmAR(Xl7kmr\_̹B`wa൐c^Bef#ug«jh^_jTZk:IIl=l2Ol'Dleqk|}mtvcثJvet,vg=wJhӒ[wj_wl-}xHms xoh;xp]xr SysNHny@tj=yXu3`yHv(xwx"xwyKpt+jtjXu-l"um^v%nvp}7vqBrw1regw}s]6wtRxuGx\v=]xqw2xKx(Fwybw;z^w){*qo2rp.s-qisqtprۆu!s|kutquugjvv\v}wR/vx^Gwby)=wy2wz'w^{Bv{v|>oBuqoupvxqvސrwR ssw{tx/qtxgtyz\Fuz"QvzFv{7<v{1v|V%vp|uH}W3v$}Cm{7n{ol{,|pW{QqX{rU{zs{ps|%fTtC|d[t|Qu{|F/v}L;vr}0v}%^v#~]t~4u~Xl類mn|G{oi.pt qz z r3#or)es8ZtQ,PKu9EuZ;vs07v%%)utguxkզlBmg|n^#`oy̓pyqPko}q?erZQsOtTDuq:ZuV/uG$ukAgte<uyjikxTl[RZmenoqxpsnq4d?qYr҄O sDatP9tу`/u.$ tÂsق]u iА6pjjkؕlSm΋2nwoNJ7mppc]qZXr.NMrCsV8t0-tLt"sхr jt;iVj jؕxlm5gnh9w4o8lpbpʌXqMrtBs7sp^,osl!brAq r+hcB%iFj;k^VMlm͓ivinlozapEuW@q LqیArH6rj+_r.qzq' 8qUKg1htilKjnkK mu~nknהv`oVCps:Kq@q_5qÍR*aqpJp pfLg̛h?+işwk@lGtm1j9n_ndU3oՔJpu?qpő54%p#(p|o9p1vq?e/fgڑhj>~`kxsloi7m_^nHTo1IaoՖ >.p)j3:pN5(pn;p'GrcdۭޠMe¬"0fehYid}jrkh)l]imSnH4o86oăKp|̙q2Nqsr~souOt3[ktAaqu$VuڀLvA{w7w\,wg"#w v$ v΀Pinܠ]opdp, !q rq~Frׅ]Xq2b}rsris8&_sɇrUNt|Ju,@Vuv5v *v ujNt Cu@mhmӒ%nnop|q~rrhr^s;TxsJt?u'4uYv)u1t7ms Rsl53l—mוnϔL7o| pڑqqzegr/]rSsdIgt >tW3tZ(tr^sVHsFkKlklmLo#{6pqpĔ!fqr\r\RrHsN{=[sD2sI'sVrrr爇s3jjk)7lm([n5hz[oEppepn[kqTQjrG.rn<.r1Ds &rUxqN r`Tsi`jIkal=Tm\ymnsooCdp ,Z>pgP7qlEr; rN0ro&'r7p玈rtzh5jiZj.skW IlxmnncoXYpO pΚDqg(9q/RqӕT$q}GAprstiJgݙ9hj"xi@Zfjr`Ek'wlڥmṃbnWo`Mp3CpЛ8q&r.q:q#pUoVqv?&fȴ>&g{s`hThiTj̬3vll-mamVnȣLoBfp;7p,p"ho,oy Bqw7d}cǟ,}e6}ft}h }i~1}k4t)}li}m_}o6V?}gpLj}>rBN}-s68?}tE.:|u@$"|[v{v{Ywn"{h؞|#iΗ|VjY|l|me}f|ns|oi|p_|rU||sDK|stiAc|qu7|_vz,|"wV"3{xzx zyz"m}zjn]zo!zp{Bp|{qr{ri{s_2{tU7{uK{v@{wq6`{xA+{{y zyyz az {xcr xs=ys\ytZzt{zvuy}4zy~*ay~)yg~Dx~K Yx~t Ϛt`u4uрvyy,wYowiTfwL\x 7RxH9x=y\3y)yt6y'x x|sR#sadt3Ft߅#(uxv8o)vevh[wVQwۂGxYY=9xĂ'3 x(x؁"xTxX wԟSr.rsUttt͈wu nzudvH[vSQw2FwsS tw5vv̓l9mGm񥆅n|os p hq4^rSzTrߚJsr@sݖ6pt z,*t"s s tn;vkǭ_ lSln{orp('gp6]qjSrCIrܜ?sJ53s?*s3 skr svrxjб͑k] Sl :~mGzn:7q)oc,fpD2\q fRqHrF>r4r)rӚr$=#rT< s\qz5QɁcǘdfa]gʁȁsi[x8jnl"eml[V{nR!pHq}>}r4Ls+0~t!_~|ux5}v }^vghh,imc}uZG}vPt}{w_Fv}~xzZa4{bW{.\N {l8D{(9{7/{I&{G{N6Z{^zdw`wلƍxX x߃|y^Grxyςijz`CzGyVz1MAz΁CL{!9'{c/{nk% {9Gz]zz_Tvvwx {xRryhySI_yV9yͅELzBzw?8z.z$zygyȃuy Syau^vDv9w9/{XwϋAqxa}hQx^xUy!WLy~Bjyӆ8WzO.y%2yIxyCxȂtiu0Iu?vXLzw@q3wDgwU^/x2iTxvuKZx֊mAy,}7XyH-Cy'#txƇdEw憚xosxR.*stKΊtĕłuqyv$ppBvגBfw5]wSwюJ/x(x@xuE6 xH,xu"+x wp w͆uxbrs^{sܚPtyu[ozvQev\#vᓖRw.-Iw?w͏*5w *wԍ7 w]Nv] w5Gyxx}r#Sr%r‰sƝuwtn{u[hduԘZv=YQ7vGv>;w,g47wT*Qw_ voWv9 vy+,q:Gq\r hrݡvs*mtcu.Yu5OvFvY}BV5}e*+9}[!}"| |P|^{yS)zlMz؋S~?{8u{l>|3c | Z|#P|5BG|^>|4|z+|.!u|){F {+{́yyy}z`uzk{Obs{`YF{w:P${WG{f={ވ3|){K {{ "{PD{ghxQxÕy |y t#zjzawzX/zߎNzE{o<{3H2{\({R{8zx yz{`wwꙭxI{xڗnsUyq/jz`z!W7zMcMzaDz{;z31zN'nzzd{vz ^ z6{ȍvޟtw ^kw|.zxr'x~hy`&_qyVyɖ3LyߔCzy:hyo0z&f&jz&oyȍUy yĆ2|Nzv}7vR$vy}wRNqx gxĝQ^UyTyN"KQyizB'yz9 y|/Ly%fy@yFy| MyC}$$Wu?Kuu/x]v|owRfx']AxSx֞=t5u,vL"RHvcw ށw\\6x{ppwp܃…^qi|Cqt'rkscG|sZtQauXHv>v4Uwu+fx!ÁxaTx xyyu$/*u).uc{!us` v jvwb7zvYwPwGRUxj=ʂx4ys*y!Yzz Gzk{yZybyZzy{r)yi`y`邞z+XJZzwOozFz<{B3{)qb{{ { | W|hׁg}@}}Yy{}Pq }@h }D_}eW(}N[}E9a};P}2*;}(}}Wg} ]}$C}ԌhUʀcxԁLpS+g6-^Ɓ VGMՀwDC;T1(a  J_ |ۆ;xF]p#fg ug^wNUÀ6LVD:|1] g'W˂+Sv 5_~Ӏ3~ڌ -gx7foÈf]~ULJvMCoj:a0m'`lbH_~Ѓ /~fE~5A"~MN~D[~ȎGw~oP2f=b]08TN};E}d2\|6(|Ιp|, | =}|͎c4d~Ѝex$fp2h_hvgi_kVl;NmvE n=p3q*Z0r !_r[,sK]stωgόhS}Ei1wjXot-kg|l^mVXnM/oDVq";چr:2n$s=(t@tt ΃uftv*\k<'l-}lvjmo nfuo^HpUÈqhLarTDsF; t.1u ( *uv3kQvV ΃vwoσp>}rpvAqCnÈqfrq^s%U9sLֆutCu~:wav.1 v'>wv=w_w x9ׁvy<~tgňt_|ctu$tmuCeXu]v>TavKwOBхPw9xT0'x&cJy=ʃyk\yQ "Jy@zy$x@xf{Exct xlxd1x[yUSyK 'yAz98Äz~/gAz%{M{"7z {x{|ƀ7|qzS|;s|8kx|0c|FZA|{R|J|A&I|8|.|%}B}| }!+})lSzCwhrT:jՅ8bGZQFI5@od7~0.$lA$?L1`~ ~<~m!hazr5j|aԄUbY}PHoPt?̃7ځ-ށ$DŁ{ӂ^1 FN_iÿr,Lj%jɇafXǃUyP4Gg? y6E?,߂L#D>z& ց<tこȎ~xq/i(a`$WΉOZ=F΂5|>Q5ށĆ,1x"',pC +K}QEwlpp{hv_V܂WN%"Eڋ=4Q+N/!8? H,  |ʗvog$^ׂ9UM&ɐtDjJ;23v䌳)ߌ CԋurX#RuiNE {hu~nmflȘN]TՁKcC"D:2 (G Ӏk. U-2Є,i/tz-6$t^@m(d\e3\aSJˁfAށ9Eʕy0i'/$<~Ȁ@ pm~F!x9s k8%d][RicIT@8/\R&*VoрX ,}w6qˀjˁbI,ZupQ}aHQ?m6ˀ.SF$-ڀ ݀ sc~]dowe_qfjmh bҎinZjRkImAng8o/8p%ۈRqgr>^r ^sUeIt˂&$gA}gw&VhpƏiinkaڎ lCYmaQZ:ntHދHo@GKp7jq.Cr$s·t rtt7 u"ɂvj|mkw+lTpYm*i'na?oX4oPƋcpHEq?r6͈s-QIt#Ju<^vuyuv(xgn|Oo_wopy-phq`0qXVrtPs-Gt ?*t6"@u,vS#Pvw#Ȅw+x&y΁s:|sIv2sor*sgՋt__֋+tWˊ`uqOvG>v>oSw"5tw+\x&"rxCxxz-yQ{+wK{Ow6uFwXb{ŎYQm6HӋ@` 80X&'qY:k M"A.zNuІ\pQUi3JaxAX.PmɐG{?p7@T/2#%$D@ ؆ԃyt՚o$ҙhؘu`^ӗ5W˕O]uF̅5><ВZ5`-돋$8'k|n qwkx9#sJmąwfօz9_+{VyaN=9E<48,TK#hA@׏) $|Rv…qglk7e6]:Uʅ>M#Dx圂;ȄF3_#F*"PcNq큟 s# ȀoutpJDk/d \]TąLCbڡ:22%2)!y<܁ËZ F|cRvҖdpdjєf7dg\ϒiTfjLL͐bk~DdCl<m4o2*fpN NJq؊VqV@q7*ruzߕrfugZpXoh0jiLb풺jr[kSŐlK揗mCn;LRp)2:qB).0rJϊ[s UsW `stwTy֔IjujpqkiblebmUZnPRoCK-p-Bq&:|r+1s(mtjtȉat uHfvnxyO&mu=nApiniAobp5ZpRqKreBsI: t51t'NJ"uev?@vW FvMxzzquYro;rfhqracsQYsQtJBu$Aju9rvZ0v'Dw&wsx ~xy{+ygut`[unEGugяv4`[ vXSvQ hwiI)wA xO8x/Zx&щywˆyˈ1y VzBz|Exjys2ym*yfy_;}yWz!PzzH9'z@9f{7{/{+&jT{o{?{ f|2|z}sw~r ~lҎ}f)j}^}V=}O6^}GC}?C}7,<}.퉠}%}~;} @f~AS~O~wf^_r3\lPQ;eǁ^-LV1uNWFFQ<>R6i΀.S24%^[lE{ "+0o_v>qCۆkэe4];U=MuEv̄(=w5hL-ƈς$> x 󅢁CgQtxpS, kE݊odz]NT싦L'D[<4ω,-y$t ȂуNb2so:jacX\ eS KvCq8;oM`3{+ #fp -KHz#sf]knPi|/bŠ[ ء/5.-t%JmC\mHX~nt^vbncti/dkcIe\fUshYN'"iFaj>l-6͑)m~.ߏn%So!yp'"p qruren*fhggbhw[ٖiTؕjMW_lE6m:=nX5o-+p$q.rdьr Fesb"t%wqhmmihjbkT[ޕlmTmaL铜n^EQ{oT=hGp^5pqy,rx#rsds!Gt ItVuvyOqlbmyWlhmbynn[o+ToL|pDq= r}5Jsu,tR#Du5t0} }#~C ~o{jqˁd𓊁 ^ʀWl"ORuHB?N@c%8q1T)d!b+  m `nCiAvdu]AV䑛WO2Gm܃?k8  0,)QD CCo R`0l?hۉ%cڒk]pĈFVP.N~}F>7ʆ/ʌ{( l@ & K/Ӆ^kfg:c\UzM$FE>=Ŏx6A.Ȍ'GӉƅƉ  ʀkKIfבha˒[kXTZLrD<M4G`-_=&Gl]: چ-܁jX"eɐp|`ǐ'ZCȖS6aKwxCHY;{3Ír,F2$EhtӉ1}iсhАKdp _uY VrR :JiBx: 2+#4q\'؅Qgac=^%[ WP鎫6I]UAl֜9|k1ך )܌"S5]z !Z+f aЏ\ V͎OԎqH^&M@l8yb\0؞I(p!KGޑڈʌ +2)GT/l4afşbx`Ǟcw[IdU&f)N\g|G,h?ؗj#8m>kq0l)jno'ΐo׏p,`q svjd|eneO`fdZgzTUmhMiFsyk*?,lQ7m~0*4n(o*>qdq8r=rnu @xiƞgesh@`ǜiEZj1TvxkDMp3lFF mS>ȖnW7:$oq/p'*qr%s!?sz tK8wyi'jet}k_`lRZm TmM wnEo>kp6{q/:r'"sxFtUet k\u`vx=zkjכne[n_o~Y pSIpLLq~EtrP=ƕQs6!s.t&ouXivvx vҋwy{XjrfdÚr_rY=ns\Rs|sKQtoDou%= u5vO-֒vv&$>w\xK196/R(Q!9JmLJ C/Ή4ĆNa痍]Ė-Y!RܕL#DÔO=4g5.Cΐ'.S >DӎGON_s ꄵsZ`]\v WǕQ KC“y<0 4-3I& Q Q ҋ`݀s_k[MV1PHI"B;03ck,-<$񐫖ΏxΌԋQ =8h'y^9HZ@UpΧOVHߓ٤A^:::ȡq2’M+:#䐬,O@، Mekb`;]aNX$/b%S$cuMdFKfG@g9"i 2Pjn+k#Ɩm,}n'fEn opsNx"aFc3]cXK2dR塾fLPgXFUh?mi8ok$1`lb*5Om"bn{o%pt `sqVPry!umy`Ge\ϣJfX4gShLޟriF*j?al 8m0nnI)o!ٖXpXqUr MrXtwz``Wui \siX@mjRǠk`LlTEםAmD>͛nE7Ԛeo90pO)Piqd!|reJsH-s Atudx+zxa l\m&WmRrngK6o+Eo>3@p71q/r((st!tI#YuKhu vh9IwhLye{DaXp\'pVѠApQ]qJr3DkTr=s6tb/x7u 'u vY4w@,w 쐫xe$$y;Az|_t[+[tUtPwuJ.VuCvV7[0+)[# wV*zL2ʆ >y_ÃYV7UmQGK2xDޛ6=L6$D/H(!ۍa[mr %ZX!.vT&O J$1Cٚy<5ɘ.'> Ԗ -ǎ_# 7t4?V뜔SNǛptI B՚ <R4֘{1-ܚv&P֕˕q3 :\0URhMH(]~Aߙ; 3P,ۗ5%͖řu蕶6%ی8 %`/_xxHY(^nT_BOש`WKaEu+c9?@d9/^fG2g+ߞi'%0j8zkl ٙm#nVpu itP{rX L`TUaP.bK0dAE+e?g8hk1۠Xi+"k$Qljmn *oitp6’r v}w|W[cT1XdPQeK3_fE]g> i48;Yju1k*;l#Ҝn,9:oTݚUp+ qqt8w}eW0fSg|P:hhJijEj{>mk7l1p qq ߘrs{SuxY}hXaj^TjOhkpJLl[DImA>n=7d`oH0p,)yq!"Μrsꙛs t^+u7w{yyv}WnSnbN,nIozC>p>=^q6ԟr0r)QUj|VQA{M&w{}G{A֡{;e{4|"-|>'MY|e Л|L|}b k~j~eWOT+PʁL\G^9AS:F3€-.&- .rٙXƘz [рրk@SSP+gL?nFآK@0H:3*,Pd%KÃ]ガ Q́1eXROf7KFs?*95҈2N|s+f].$ŜʇHu]!„ +1’QԤNf)J[DءҍH>͠׌8*1Qv*}z#ۜ>9fܗ| DC"F̏55P̤{M?RI0CґI=א7(ː60R)"zv?W 6N͓C.ԀWOK_GB<26'攃/Q˔"(J!+yZ势 @G]:PN]J뢸QFݢEA:;5".^'8 /" ފ! s‡ ~ZWǀM@I)YEv@ :飔4U-2&ѝ$ C60퉍 pMOM[K\Gs]B_l=a87b2/da+զ e%:gp*iij_Rk,l ֚mP q!"w^~NƲ.^K_3G`rC=a=Xcf7fd1ufo+/g$Ƥi<\Zj5kҠ8l$mgod fs98xN*`KpaH EcCEqdT=e7g1Ohx*[i$dkۢl~vmnoq2 ty_N cK9LdGeBf=hh%7io1jj*k$`mn_1opџQp q/jsvWz9OHlgVK\FgGhBV>idn/o)Fp# qNrszt 5YvwZy{qN'oKJ2odEo@ҪMpX;`q.5r/eFr(s"qty^u.ynuҞw @x y{f}M\sI!sEd(s@td:'t5u.vU(Bv!ԢNwa w. x_>y {ݘ|z}5~OLyvI(yEx@y&:{yo4]Ky.z>'ezz!#z{Ο{\i|曅}X~lO~{YK QHzDi?h9Io3ȥ-Tc&ѣ-u loucmn6؛MkHX"Jȫ7GΪDCee?@,@9f(3.,<%ۃϠut  ,%΀}IKG*%C>v戇8S2S"+.%$͡|Qu ל߄aڙmr9giIAF&^Bk=Q7J1I*ɤ6$JB! OE Ɇ<y]HBEёAV@<86B0N)Ԥ[#[&W;D Ҝ)~FFCѩ3@$ ;#5zӔ/S”F(ޤ"g : ՎJl ƙԅ<FE1-B=>F:/L4et.L'!h|1b\ 7\Gd*i 5DqQwA{]B=pS9g+3_\-U]&dA B0)T WK=\&jobjdkfl}h.mGj-Dn lnmzox6qy*r(z.wrSzxszbr1!crìePsvftKht iujv=xkvmlwbFmxWHny>LcoyAzpzp6sq{*qq{2q{ sf|9a*w峀bxw cxe@eMxFfy 'hyXJiyx kyll5ztam=zVnD{^Ko8{A o| 6 pk|*7p|0p| r}`]|5a|Wb|J dj|c1f |9g|zi|wxjN|lhk}a7l}9V'm}fKNn}@|o}5o})pq~ p}r~'_:-`vaƀ,cLeьif́h/virkj`lUm'yJn<j?ol4oz)Up tp)RrNZ]ϰ _2` b =cWe̓#gAv"hk9iނv` k. TliJmn?in>4yo(ooq䀠\T]ͧ0_[abSdΆ؀JfGguigjxhe_jjPTLk Ilȃ>m?3nF(}nBn|Spŵ[\ې^D9=`Kga Hcы7eWutfih^ivSjHk>Flt3Zmy'mlmucuXn{v>jVoYw#_Wp!xTqxIqy? rZzE4Qrz(s{s^{u|Ydvevfwdh>wix&k5x{lextmpy^inby^oUzT pB{IMq{>q{3r|r(3r|kr|t}]c{Id{x>e{gT{h{։'j\|~k|/tl|wiTm|^Zn|Soo} HJp}n=CqC}2jq~ '#q~1r)~-t~~dbcdUfJh{2i1t'hřYhZktZe[N%\Г^Zl`7~]aίsc4hdy7]eS!flHmgT{nwqoxJfppx\ qF`rz:s5{0 sM|I%s|mt|{u|;fzaygzUhzmjzkxzυlzzm{Epn{f.o{[_p|Pqx|lErJ|:Zr}H/{r}$s#}2sw}[uJ~f~ѧVf~g~Uki/~Fj~;Al~)m@%lno o\`E aabړ)d eg"tGhAiiXW^jUTkXIl>l4 l(lidkn9 >po9_6C`va⦰ccWe}fsSsgAhohV]iZSNjǘEHkr3=kݔ2ld()kPkmVq^ʯ4_?acbOd2|eqfۢLg'gA\`i %RjGjܙT1k\&kjd^m>Os]_s`.aՅcYc{mdڨpf#wfgNU[uqYus5ORv8trDvu:vv0gvsw%vxPwx gx\y5o3lompn_q&o#qprqxsRrn^sscttY=tjv NtvD.u_w8uy-uxy#1uzQvQz9 Qwz^ls1lsmt2ntZouDpuwqvSmr'vc]rwXsTxN\syACty8$tz,t{"ot{u{ v|?xjxk\xl7y gmCyAnty|{oyvphzlq!zxbqzX'r{(MsP{Bs|7tR|,tI}"9tk}4Rt| vV}}{i}ju}ekK}2XlS}*m}$n}0uo}]kpW}aq&}W_r}Mr}B"s~7 s~_,Ts~!s~t~[ u~|h ifjIka׈Yl~mwunҀqk3opap^WVqN(Kr(A!r6Xsi'+sv9!Gsl(is ?u5gYMhLRiIIjzՇkʄU~#mtDmjZn˃p`1o$UpKaqtb@rA35rƂ$+;r؂ rs @sρ(fKg>hDfiGjۈ}ml, ssmviwn_LnBUoׅJp@q56rX*r qr) rĂKeZfhݎj>|krlhmg^knIT6o>Ip?Lpׇj4)q+)`qyp?q*r-dCeJg #hBBi|k,qlglݎ]mSanMI*o#>Go2pr'onЈ8 qkqFUdued.fqlgkiK{Njspkq"flJ\sm)2RUnHn"= o,1o:5&ndnpqj c¢d _eɟgĄhsziəp+jƘAek[LlQ)mhFnc<no1n&n"Dmz{FpKr ob징8cCeFfPbpgQyui8njPdwjrYkݘOlΖEml:mN0EmҒ/%meblŽjuo+r86bccdlepfӤxEh6kmiOYcAj?fXk2sNl,fDKlИ9m/ m+$ll o!zu\a7b&[Vc*dlew@gilhyb%itWjrMkRCl0{8Kl-l#zklR n=;w1>`Ta=ݐbGceBvWfkgܨa&hᦏViᤑLbjxAk7"k~,k?"Bk"Wl nw yƦ wawbwd;Dxecxegxizuxkjyl`y9mVyxu-xWv"x{wyw yxΤsPkʞsltGmktnhujo}upsvSqivr_vsUw)tKwtu@wv5wx+?wEx wey_x#y/ yz$*pq_qRqߗ1qrvBrsRss|trt#sLttiu)u_uZvUTuwuKv0x4@cvy5Fvy*Pvzzv{z;wPz ux){{nw}9oDwt6pwBpwDžHqw{rxFrdsPxhsyN^tOyTtzJxuvz?u{4v"{)u|JQu|iv{ @w|̢xm|m:n*|31n|?o||Ict|>um}B4+u})ou}uq}Vvt} w~ llEm:OVm`nkoz#phpqlg&r,l]drfSsGHtR9=tK3Ru5g(uFtxu9 vlPkghl8m n o+yp#pp̂fbqlc\r$RGrGs=btBZ2tK(:tBt*%u/ u)|jS3k$ tl^m >in,fxoCo1o;ep[qS(Qqr&G2r nqrovڃxe©fgePhg|iʢRsYkZi/l n^l✢TmJnf@n6jo:,Lo6[")nGnҏ qh-wv˃dܮ`eyfy儔g{h馩rQjNh!kN]l-STlIm?nS5*n+nu m•W^n iqV[BxՂݗcd0PeTfĭ0zhqgig(j\k|Rrm33m)m˚lؕPnc( =p金$z{Sa{Xb {gd!y{e{ghy{ip{jf{k\M{mcR{nIs{{pf?{q5{tr+{?s {^tC| t m|uܞy?fyxg$yhMuyiz7kyzilojzmezo[zp:RFzqHzr>bzt 4zu(*zevznv{v {wwSj)wkwlxXmJxnx@y3onycpe1yq[yrQysGyt=yu2yw(ywNyx3,zvx zy5unpup"v8qyvqwlrbwxsnWxCsdxst[7xuqQTxvJGSxwuƁlwmOn ov{psrjr14Vr=*r* q@hqڋ 3s7yiΎMjPQkÀ lwgm%%n nMgdoZ$oɚP7p^JFpz=qa2q~)q\UpIqV sЈ-xϒhiW jZ~kmvDlBxlmzc nXXo NoJEpSm;p1p٘0'p'o q\ sˇIzg[h``i }j(u.kbklbmWnj.Mo|DYo:p0p5&oodqP s|TA)am!bv6cvev} g(tk~hj~j8a~kW~lN~2nfE}o< }q%2}rL(}esW5}t ~t&~uI}xH5xK+Xx!x:wp7x3Ox .,r/rs]#tvxtԉm u]cuZpvOQ4vHw(>w:4w˄+wa!w[Eva wQx$FqcBrr~sWvt'(ltHc#u^pYuPgv GUv>#v4w7*vֆ HvPu…' _vRxXplq&q}rvusTZkt.Ab"t/Xu.O[}mw4}lxz*}Ex |yV|yr %}y}Tzzw͉Y{,w{w{{ws|KxjS|xia|xY|yLP5|yF|y=l|z)3|z)|z|{|/{ b|{9||4x|^By|)z2{zbz{q{{h{u|`>{|=W{|tN||E|<|{} ~| }|S}Ǎ.w݀xWy6 yypzgvz^zVp{,}M{ooD{b;l{V1|e'{n{Y{:) F{W${|~w93w8xJqy-xЄpyJgNy҃8^z UzRMzQD5zʁ;*{ 1m{<'{2v%z߁HVzp zbzvw ̀wyxIpxgGy2^Pyp}UPyLyхqCz:z`L0z&zwz7^y ?yԁ{uv;tvxwFRp[wgxz]xTxOKy"C"yd:by0Ay߆e&(yͅMyPVyXL yb<Z| tГh2uSjruʑwvdolwfJw\wSxv5Pv˓+v"vv\<rwfxN~߀s{q#Ҁ7qOz+qrrIjsatIXu0NuREu|d6f|,|"|Ad|H|a|1~ky@~yyzqzi{4`{{[W{rN{F{={5#{Ĉ+{'!{{M{y|%J1x`A}x͕[x y8epyɓnhzS`_zӑbVz?M{ 9D{<{{4{ *z{4 {/dz҉$l{w{ʄw|}wvx\o]ygZy^z.UzT;LzCz;zM2zn)LzCzG_z, { C{7]v{6wuPwnx;cfxݛ ]yTpyĘVKVyBWz9y1Ky'yyBy( z{8uyvEtv9lwcdxk\gxSSy˃;tt uxvpm+}Ɇmx~~nLq͆anjDAob0pZYޅq%Q{ qHτjr?s6}t-n=uN#ûv2v2 WvڀxB5q}rRqwWrp;ri !s`sX̄}t7P#tGꃺuq?Lv6v,w>#wڂ7wȁw 2xW,yu|uv}&uov(gvj_vWwwGO2UwFɃx=x~4x+iyF"tyy(y kdz<zȂdz{qyu]ynl yf}y^6zV6zjNzEmz=D{ 4C{1*{u!{v{{oD{|OsQ~{~/t́}m}e'}]G}U?}M}D́}} ށ|}M}}h}}fbzŀɂtā-m2e]=]XT,LDD;D3iԀ)߀ q+C ~^<`l!5ztpfm'|e2\TMJK݀sCOv;H:2-)J I!c4ԁS&~ ,yMus'l߉d\7XSr JBz:a2@,(g2_2 ;`~(|~WxS~ɏor kmAc[QRUuI~AAX9+0'g PO~͆3 ~ԅ ~{}w~39q~yKjq~[b ZZ-AbQi!RH]@(~O7~/~y&~u,~~G. ~n"~btz}qu}p8~i(~Tac~Y ~䔠P=~ϓjG~~ВR>~6~c.t~Q%Q~!~^} /~$n~Ny}Mdt}z-n}g~`~SYW~O~FE~=~h35@~%-}ǒ+#}}#} }~0xi}-s>}C9mh}lf}p^~V~bM~l8E~vL~RC~d ;~?2} *e}zt!}R}U } (}*~~U a,yb s'clSdse؍e^gvVlhMj E>kT=>l5hHn,o##EpE7pGp˅=qt|̎Ddw܍erCf|lgdwi]jRU{k|MA:lDlmӂ6 .̃H%XЂ ܀,v,[r]9m2MfZFe^CVc7\NE==J5Ճ . ~%:_/؃K c;Eukqtpl Se;]US?LdxD-<^4,ǂJI#݂NC݆Z. 6xMtpUkԑd \'Tc#JKMCčn;9|w3a)Z+ϊB"ډ[ *_+s܁똎o*iObтx[^SJ~J˂aBRuj92M2ێ*{!to= نwcrkܝmh%aviZ> R$dIJA!;80%(<` Vbހ3 +,yqգUlAáf`-ݟKXQ+H"\?q7}S/`D'LܒnGրCoҨj򁪧#em^;WآO tG]>ӂ6U.+;& qf1vqa!qԓal!Cbf*`d9_uheXWg8P_hHǎ|i@k8clY0Em'd3n_oډ#o ⇮pruudpВPeCkf7ep g^^|jhWiOkGȍl-?mP7n/Xo&p1qfq r̅jtkwtsvhpVhkjiej^2kWq6a-r-dsd$st'1tnt u wQyu{ooÎ^pj((pqc鍫p\ˍ+qUMr MrENj$sv=Њst5t,uf#*ufvU+UvR QkwBփxzt[so+si1(sb֌tB[KtT9u LuD]v9=v41w,xwi#DwM/x-x' yX\z'z{swnwhQwawZjwS3x5KDxDy<<#yX4&y}+y"xyz,e\z' Vz8{k|rhL{mui{g{Sa-{]Y{XRi?{}J܉{C {;R{3n{+n{"|0Ԇ|`NB|d O}G}y~"ql؊g p`CYT=Q~I(~B~:D*~2~*LJ~W" ~P|~܆~ 愙~j,~~p k*f,`ރ7XƉP݉AHgA:9G1(i*/!Rچ4 Lx:} o(jr9f&V_)mH0@ʅJ8UE0DŽC)~L!U0Mv8 j,n)rj$e-u6^[W.:OJZG? C75Ԉ9/Su([҆ %L$؄хqǃ )5򁷁mBi d]VT,NdkcF<>ό6k.'!ot ĭ llǗ@gjb\9UMSE!<ꆀ4݆(-<%*9WX:wI0Dž axjfza@ZۆZS(L6Dh;ÆD+36+}$8tӄόU ^zc eif)dr_Ԇ:Y:ZR? KNC/:'2{ט*dp"ڄܓaVǃQ Ĉ(s2>hc>:^XcQ{"JB91_ȝ)ra!5ߑ@ ₈΄nibo+`iRad8b^cWeYQaSfI"hB8#iS:j3 k+[Sm0"hn<kn<o5 ljpAMshvm]chdcÖVe]sfWShPui\I ZjAv]k9֐;l2'n*.o2!}p/;,pp rdu xjlg=hlgcɕh]5iWZijP>kHlA m9Hn1Vo)np!qJrB^rsvylysl7jh$ekIcl]lWsmOёn^H?o1@o8ݎp1q)tr yUsϋ1s ctMAuLwz]mbNnh 7nboS\Ē0oUpN琶q-Gq?r8'sV0gt (vtX*uOu uv)#y2{Wl(rXgt&rhaʒr[Os Us~Nt Fǎt?N6uH7hu/vD'ދvw-ƊwX ̉Xw㇑xjzz|)k4v$f_Xv`UvZᐨvcTvM0-wESw>x 7xi/?(x'rkxy,يTye yyz2{}jzce͐z`cyZaz S~zLfzNEz=+z6nz.{&{Wx{b;{|Їh|&}v~:iܐ.~e0)~]_ڐ}Yu}R֏}KO}Dv}<}5 }-K}&=}Ċ1}:~ ~]rb~m ~.~hLdJ_,cX'RJB)|;V<3€,%FZLрwى btK-S<g[Sc_^/XmnQxIԍ?BÄ:b*n2k+$*0׈S ~VE96 >NfQ}bkQA]ҎWŠh7:/1(Vލ!; dt1eN -u}?5`cSR^ڌFQY(S]M×KEP=#D6ڔ.g_'!Lʍ勶 ɇރɀa]XȞRsKދjHDA=P+dIf B˗.gf;uh4:i-1kR%ɑlאm6n zn>oɈwrmJ$Qny"oqo p$cqtxde f`Rf[gV hOiHږjAk:nl3 am+o"#퐽p2qqp 2qsVtXvzd%iU` j[WjUʗkOaldHxm4ATn): n2p+Rlq #.qFrScs wksՊAtnwOzeWm"`jmiZ mU"nNKo4GHo@p9}(q2rL*s#stzt *u)Hvy%{dp_vpY՗Pq T@bqMrFr@osz8גt1t*u?"uVvNvz ]w'Mxgz|ct\^zt^XΖtrSAtL͕u9F0u?QvP8&v0(wC)8w"KOw`GxG܍x ȋyszZ|5}\bgx]ԖUxcX}3xBRϕLxL=xEzx>{yX7>y0 y(z!ێz!͎Tzz ߋ{#|W}z~la}](|X|]R@|nK'|aDI|u=+|6]b|/6m|(Ax|!Q|L}}i }ӊ~+~`\5^rWyQXKC6"/?֘'?!f?=uhތka hKG4׀?XmTtOIJ=C됯= x?5.8& : S 4؈H؁΀]F_ Xg*_R`N"b$Hc|B$*d;fU49g-ʘi' 4jk k;l#m m~ot>3xx[aW9bSscM)dGfAqgL:h4i-Lj&1lE|mt}nQnowqvyZdWmCehSA^fGN*gPHhoAi:4j3 k,l%bn /oopu{q>fsAwXzZˠgW5Lh^RoiMIiGjAAk:^l3Sgm,On%WoޔpuqVrҏrtx}z\ kGWO9kRPlMlFpm@1nw9јoe2ܗp,+q$qq2rԓsZstƌvy{[nVѝdnQ o*LCoFpn?ٙq.93Ur2@Ur+T=sY$&t$tu6muEvrbxCh{}ZrvUלrxPrKFsEI{s?,-t&8t1u`*u#vevawA ؑwxmhzr|o~YvU4evsPDv^JvDΚw>{wl7w0ʖx6)x#Ioxby˒y zmՏ{7|S}8sX;{TzOӛtzJkpzDHz=ʘz6E{//[{J)49{p" {{`| V|T}X[J~~xWcSuOZI֚ zC6S=>G6 $/$~(b~!~~#>~ 3`w-{bJVwRON̚s IEC΃x8D唾1C *A #eM`  \ JQMqeI'Cڗ=ؗ7H0L;)J"jЕђˎ/ nńZOQLXH'aB+<ۖT6VGz/bÝ(WV+!iɖՒ,$2 Q_ۉvS]kO^QJ _=Eå`@Sb:)cw4xd-f['pyg!i3ayjvk ̘-l#l ouA| R_O`JaFc@["do:S|e3g$-bhX&ɝ#i 8j tll mn /rBw@}RQ֧cbNצ0cuJdaFe@7f:Dg39i#-j8&ckfNlpm-n o|lpTsxg\}Qe|NYfCJ,ĝrl3& (mHfnp?omטp> nq3;rRuByj}Ri NUijIiEzn8şoc2ppW+Ɯq%%oqUJr7sGt tJWux{Qp1MSp;HepJCMp=ޠ&q8rN1͝Us+!@s$$ta!u u~v4 NwYkx\z|PtILƢ|t2Ht)Ct=tu 7{Su1v8*iv#ۚww{0w x $yѓ5z|G~ OʢxL%xG¡ix\B9x<0x6םy00Ny)y#+ymz:jzq̗q{> T|a|}~N͢;~ZKa}GO}uB7}~8ɝV2|!+Ҝ%{%%:ǚ g٘oy C0 i 4#~uIÕ0F[%BX =_ȓO71v@(*՜V$'Ӑ v͘ċ J ؂HОE9HAZ㜡<\60qYM)ۜJ#-akN>טW RLRO܂:ӀzGfB D&¥@qK;~(5͝K/{)ꛦ"]{$ʚɊ .)J;`ZFA[B/] =^x8`3ma-c('Nwd!fkgDh ϟ iAjUFl p xT[I&]MF8^ZB<_>`8bT2(c,e3&*fx _g)\i+5rjA RkulBOGn bryHQ_E`B]a>-c+8d3 ge,ʤg,&ahLli j=k 8m"mfo t|z3HvbE czBXdy=۩e8gf2Хh,Vi>&(+j?kZYlmm 8nśoBquzIf&EѫfAg9=hN7צih2>Rj,k%lm{nTo .\p@qs}wjm{KIhiE7iAj=|wB}OE{Bܨ { ?>.z:{5{0/ {~(p{"g{,{w{B|W }qn~~|~1~EdB8V>٦%:%4x .k(#F!ce~h }<D7iA~ >19T73Ѥ2-):%5 00@*a$]5/"6 ad s\S߃8~?<9"W4J/n)#d :œ_P-@ Ȉtf{,i>uؠ;8bK{3ۥ}t.}r(V"yh7,\i ٞYȘFy=Qhf_ ha1idtjafk&hl jlkummnjmo._npTo3rHprijv^kwSlwGnAxn;ox0p2y%GpMykozK r zᵧ^"uŮ_Qv`vibDvϓ/cw:Tew~gPwshxPhix]kyiS)kzFmzZ;nz/o{$ao{\o{ q~|*]Iz~^ize0_zUa_z~c7zqez}f{s*g{Wh@i{]9jc{R_kw|Fl|6; n7|`/n|$o |o | q=}o\R~ʫC]j~j^~!`K} bI}d9}}8e~r}f~ghL~%\oi~Qj~ F lj~:m~'/ny~9$@n~Jen~L p~[;;,\Dy]ɘ_$c"a<=cF|xd΁qffgn[h߀vQj(4Elkր:m3/m#nni ypSYi[!ס_\w^9O`J؆/bQ{c6pe5f)f}[9gPiiFDj*9Rlc."m$"mqmh7 o ϯX6YʋС [H]&ɏ:_9Ta?bzb҇p+dE3eVeZygOh`DWj9kN-k僩"kGlB =mρW 0X͒.ZNW8\+^Bل`XzaoQchddԊYf9Og}Ch 8vj`-jw!i,vj3 _nVXd_Y@[Õ ]_y5a:nfbcdOXeN.fыBKg6hӈ+i @h8.Kj2 o"2VXX3YB1[o_Q]_x>amcbzqbc˒WeMf"AgP65h&0+0hb g>i͇ oSIVŧӧ8X dY0p[>x]G_!w#`l*aaMc*VdXKea@f|5Zg'U*gjg ~iD Dpf=VcWޫvYg[]H^ǡu`|jaiL_b UgcJdV?XeY3f(fbe Rh:3qSްUҳ?W7֟pX̮VZC\J^^Uu&_ɤ:i`^bmT4cCId:G>Eeo,2fD'ff=fh4BsȄU,VgX^sY갾\ s]^t_2h`cn]aS bϡ0Hc̞=dڜ1eF&Le#e/h9vzDhzoj ze7k2{(Zl{yOHm{Co|8{p"|X-p|"p|Ip| r}@_}ԦH`}ra}Kc1}9e }Kf}byzh}oi>}djp}Y`k}Nl}Cgn[}8-o~-Qp ~;"2p~Wp~k Zr@~ܬ^(_yo`b"dexgGnShf~cieXj8N#l*Bm7nԀ,op!oep% q7]L^c֝ _ aJpc).ewf\mglbhXj4M{kZRB3lԂ6n,n n_o/ pU.s[]^~G`iiN3j-$)'jJ0IiÊl 0pIY2[W\z^+(`}aśs0chdI]ebSbfHg1=h3)i75(ib9ixkxq*Y$Z˩$(\5#]֥E_|ac~rbPg>cʜI\dך-R'fGfڕV!YwD!Ẕ6\o^|=z`"oaSdbZcOdrEe:fϜ0/tg~$sg$P:h jSy%wWvWn zX8Z[ȳ~]yK_enI`ӫc)avXc?NodKDUe99ifE.Lfԝ<#=fEg# jOylln_Xnao8c od;pfBq/hyqjor,l8dArmYs>ogOspCtr'8#us=-)utO"uu8\uu vv謵ke>lGfԞlh'kmin}ka5oIm xonmnip\ocpqWYvq9rO!qtOC#suI7tv5,tsw#!tcwetFx^ uyoh)l(Whmi$nEij1oM kp_Rlq]x1mrSmnys`co9t]XouNgpvBtr!wf6s7x,sx!Zsxyos|y tz誩e*r*es fs|gtX%itׁzk%uLwl=umSm$vcnwpɁ" >qRW_m3n(nkm݃/o p|^Oj_rD`bDd|e#rxfBhGhf]i6SjjIRk>!lb3mk(~m`}ln̓p傎]ږv^P`52ac{e=IqfgHg\hRiҋHUj݊m=ks22ly'lkn5,uqÃТ]VU^^u_Ǝa=Tc zdpef-g&[hQi$GZjiΓ/j%/jQWj l@t2[]ܔV^. _ܧawcKm&dObbe]WfyMgfCh9i7.}j _#iƓj6ZlvC|[3\=:]lފu_`'vlbakcx`dfV[e0LbfBjgq7h-Ei_"h=i kzxuZbN[kv\^C;_ta!jyb_cU$e!K8fA>fa6h ,h!jh}i% kTze=q^ q`w0rbf7rdS-s,f+sh ut)ikStkNatlVu1nM ugp3Avrqj5uwRr*wswt`!wt xvoOdՠboeOp/g(Fph.qj=~rktrmMjs n`sxpV?sqLt$r@Euct4vFu*PvkvvvvvppjKqCq`9qrUrtsK\ru?tva4cuw")u,wNtxu%uJx vzhpiqjhr(krÆls2}Unssnt{iou4_p'v U4pwJqw?sxz3ty)qtMytytz iuw{PgFv֝gvݖhwj wMkcwx|hlwrmx=inRx^o8yTepyIpz">jrYz3lsTz) s{AsN{t{ 7t|f[{{g {itg{Kmi{Djs{>{Mk{[ql{hmu{^ ne|So~|Ip_|O=q|2r|(sr}r}'s}+ =t}ҡeNɛLfLff~eh.~̓wi~zjk~pl~g(l~]Am~Rn~Hmo~|=%q~2%q~'r<~=q~sA~ sd&e]f̋ghjhނyjGokMf-l\>lRRnGndҞtfHj5gS_h;Uxi-Ki;Aji7k-Ulr#ibZ@qiJ67k,kє !kwlC bnCwuj^_+_M+`SXa&{cCqdߥgf`]f_RgΟrHht?&iS4j\*kG jlc n! yI]^pۋ_C`ܮzbg#pd feK[f6Qg)Gh=h3iĝ+)qjU0iՕl n/k{ɠu&^eu1`;uTaьucvezvbgkpvifvj\wJl%SNw\mIwZoq>fx?p3+xq(y/rEys&yWt yuEBrd1s"e.RsfitgقtivytkpOu_lfoum\uoRv#pHvHr=\wjs#2Kx$t)(x5uwuxTv :xw{pi4qiqjr"l @rm7y5snnotoet\p\KtqR1tsH u-tDvvwT%wpw wymnn"onpP`opꁯpqtxqr'o'r?s ers[rtQsTuGpsv;uww1 ux&vxyuxvy#vzwkLu?ku=lux^munuwovTnJpvdq'w~[qxPrgxFry ;otJy0u!y&u6zL#tzLuzyvZ{ŜjzPjz#kpz Tlqzmzvnz,mgoz}dp!zZLp{Pq{Er^{L:s{/to{%t|ls|*uL|8u|i/~i~' j}Lk}~l}um}ln}c%o_}Yxp }OFp}E/q}:r}/Es}%!s}s!}1t~ duW~Eh͕h-iājS~1lumCkn b1nXocgNpADvq9r;.r$slrestfЇZg h׆?iM}k.t>lh6o70,$oL"/o`oF/ p:vud?đeXfgdde_fCxgٜmoi3ewj[^jחOQDkGlJ>_lŒ4xmz*nJP mˍn@m 1oDw!bը%cUdۀYewg n7hud9i_Yj#TOjFokEnN oj|5rx^xx_xaxcF~Hy!e&uyUfl yhb#yiXykOym-Fyn;qzAp0zq"&l{r"{4r{s?1| tvcvvd vewZg"}\whtxjokOxCkaxrmX1xncNxoE3xq):Myr[/zsf%z1tCLztzu0{6vtheti-u'j 1uk0|v-lft vmjwnaBwJoWwtpN>wr(DwsQ9QxtP.yQu*$yOudxvSyv>z wGrmfrm,s4nsoa|Itp'squvpjHuq`v rW{v=sMvftCvu8wvE-x_v#xWwuwwZxxyyospRs'psqs{4rt`rmstiWt!u`1tFveVtvLuweCuvw7vx-MwGx#AwrF srw iIj]klw'm8xmn\doZeoPp&Gp>q3r*F)rl 1r-r- sw큡)hŌ?i~yj^~koLv3llmÏcnwY?nOoFp=L=p̊3Tq)UqÈJq5pq6 r]/x􂽐Kh+"hיi}ZjƗ+tkkwmaam͒WndNEn=E*o< oV2p)q Dp~q? qĆys>gv*h!׃hh{isak)8j-lJ`Zm VmLn<Cnђr:o41 pS'p2Łg z]iXrj;hk_,lX6U;mKmB\n$I99nr/oL4&Aomo.qS q>|8eIfEfyh piV gjE^kzSlIJ.l8A mxy7m.En$nFnؒ<q6 1re0v}dɯeKK;ebwglohvtfiޥ\j٣Rk4Il6?lȞ6m-mϚ7#tnn/m:p$r{~ʀ{|c^|g_݇|raps|zc'x||dp|ff|h=\|iS|vjK>|4lB{n,8&|o-\}4p#(}yq}r7~GrB~UsԒvz]c=zd/yzeGLzfw{(hYo5{Yif{ikO\{klSp{\mJ{3o(A{ p7{q,|9r"|is|yt }6tw}}uבxygIxhq%xi^ y*jywyknz'lezMn\\zOo+S"zQpGJ z9qo@z"r5zs+r{t!{u>j{Au {vl|pwtvltvmwm~wnvxAoVmxp+ey+q[y4qRy?rIzy9s@ y8t5z(u*{zv1 zvzKv zwj{~x7tqXu>qur }v@ruvsm wsdDwtd[Nwu$Rx/uHxXv9?xkv4MyGwr)yx yxWy'xk ayy5zuz:rvKs*vԃsv|tvtu=w)luwcbvDxZvxQnvyGw+y>ewcyB3x3y)XxzWxzJ)x/zE xzy{qB{Ɖ$q{mr{6{s3{+sVs{(kt{Ab-u<{}You{Pu|Fva{=fv{2w{(x|Gw|Yw|: fxE|z}8pO pnq){r`~rs,~js~a.tq~Xht~OXuR~Eu~i<{v*~=2Zv~O(cw.~ev~^v~8 wx~k(y~Xpo@pт pzqr6r\EiRs+`VsWht!NStRE/u;u1v1'v`ymuTu vPw:nbooׇzpqqshr_s ZVDsnM!sۄPDFth;@t1Buq'uWtS_u u`zQ'mnjo znoqph@q^ryXULrĈLs+CesĆ:tK0tx&tɄJtNUxtm tXPzlmmpnmfyoL^ppOQgZqOO]qԍET3r(XJrSBCs19s/t :&t gsstI_ t {lGlZ~m6wno5ofp\}qTRq3Iq@rZ8Kr;.s2.%$sHrosg t |5Rk`i(k }Jlummndo[#pO]Qwp˔H=q1?|q6qݏ-rl$rqً st d}jr{j{ktlllCmczn֛YoP pFp>p5Kq{,Wq"qȐ{3qnsftag~iqwizNj7skjl bFmgXn͝NoVQEno՚~Nm4C~n)o ps:q! 5Bqs'~Rb`~Zcր;~odyb~fHq~gi~i`~jW~akN~ mx(}Jxt}Ax}8zy }m.gy}$xy}y}-z*} z6}} ~8/s"t=f{tԁtu~lv)%cvƀ[ wRKwpIw~@x'7xq.x$1yxyp yqL}!orɈ`so{xsZttl+u]$c7v ZUveQQ`vHwi?wi7XwςS-x:3#xPwہx*Sy#[~^r'r{Ns:t[s ktGburYu·Pku^GvH?&v6w!',w##w[wcxh x~ʀ{tq^Gq>z~rXsms,ljsatʌXu,O_uaFmu>v5vf,3v`"wv7w愉xJ>}.S"pY~GpxqqrHils`sWPt]N tE t܄_^k-_{Gatbm+mdGeb e\gsSkhJցjBfk:m&0HmnX%т/o@(op2 q\r`bZcz[dsOel/6g}dqi [ŁjJRmk|JPlA쀂n9oe/p%f'qhyqjr r[t˄xWs|\yOJ|pyF|y>|y5:|y+e}z]!}1zc|z5}z|{7}-|lx}P|(yx|uy|nz\|sgz|U^{!|`Vk{L|N?{~|E{|=.{|4d| |*|v|! |||[||},|}1'}ŀw{xuyynyKfy^zVUzMUzDzRAkC6bl,\m"Knք%oZ o p~Sr^~Yb]yj{cAs͆fdRm,efg$^hViNk ElA=dnm5>n+q&o!lpLq8ނq8rpbt}fLxg sgm_i f.j9^wkdV lmMmlE"n~|6}.}6%l}`Q=}e#B}K t}j o}Hwz/frzmn{fV{V2^{V0|M|(:Ei|G=3|V5<|c-T|nI$q|||х|ք }}HvsN%s|s ;Tt'xujxvnlqznl ne׆_oz^0pW#pOr6Ą8s}.Qt*%5tu*u^ ʁv-րw`yurpЅ'rykardPr]ns\UsN;trF_5u>Su6u-;v@$2vGw [w WXwxztvvoƒv`iބ>vYcg?v\DvTփwM4w}Eo[w=%xI5Dxl,x#ւxýy -yǀXz|t2vzoziCzNb%zF[czM} }XC~~zrsVmhMH6aʁlZ=R zgJWZ8BvG:22#k+ "6B2THЀ- Ot`qKvlހkg2aYYڅXQcIgфA[*91A*`y!k[ dājep(Wk2f銍`CX9jPtbHRTB@"<8-!08)/҅ >BՄ#ti 8* o~j~epA-^}iWOvG5>؋?6Y/6q^')fcF~N ~2~m}i+~Yc~]r~V9> NGtFq=y75zP4-&>~Ƌ-~N~͉L~N~d ~anl}ӛg~ bU~@[~T~ٖMV#D/$~Uc~~j ~a2l~/~; kX}Of]}ӟ `}Z~0S~aL4~ޚ@C~:;<v2~i+(~>#m~i~\~@Z ~6!~ a~j+}e }_}YB}衈Rj~FHK~+B~ӞQ:~t1~ћ)~pC")}q~K3~A ~%}脲M}q^lӑ_g_r`aba[cTKe7LfDcg q^r%WG[rP1s*HPsAth9(ot1u:)pu vCv넷v ;rwy>{7n_uhÈudcub\uUӈ|uNv?G|xv?$w;8ew0Z]w(vw兊xTR9x:RxPy.z|Jlyh yNbfy"\y*Ty7M!yuFhy>pz7az6/z?'؅nz9z?zI{ {|}k}g2 }NaӇK|[d |T6|L҆|Ef!|=܅|6T|.̅6|'-|}V}?}{,}܁}~{j f`Y^a]{[TSI}LiD~8<υ^5C-&tEY2voKix+ew`[SnHKuz C9;3,7F%܁Zx ˂mD3\"hd`ljDZԈR҈RJćBH:Z2 +ۃf$Uc ?1Ȃ"cgRcHÎ^X] 3QJ&It!A9qc1*oK#Hɇ ̈́JiifbДIah\\VՃoO탎Hc@i38Kt0oH)z!DHoł$ p7g%e `[_ԗUNN Gp=?oC78/($' S=p C$7cx_+YwSゖMaǚbF`^>e5-斞&qMǁSb ܇ddyb`Q]ՂQXBRSL1EKŞ=W۝4؂ꜗ,ʂК%BtḱMM y Z zi^d__a`Y-aSY)cYLdEf<=&gr6dh/ j!'km |l]n!͊RnoCquhac4b^ӓcY"dR)f-L2gD;h=ei5}dj.'Ql8&!mrn(p'jp {q^twgFe2c.e^PfY&gRhK͐AjD9`k76~/)~(ш~p!~GR~m|~  ~!~~aNg]ʋWY\ES^L'E ]=Ղ5߉b3.Ё'8!C,+Qʀ …a l`m\ӊzrXlRPK2D܆\僷Hu ߅"FOr_Q[7V󉨌Q JDgpB$;Tϊ3,Z%t)E ` ؂^ZU͒UfOݐHAڈ :@U42(+,ƌ$,CIĊPj?ZA [.uPJ]S0YZTkRNCX_G҈^t@ˈ8981}8)L"_ꆄ> \ߝW|RLpFq?Ƈ똏8=͗0](·l\!O퍌jQ G)?!>/IZ򇛣GVhQqKˇE>ׇ7J/Fm'a ؕ/C8'Mj B<܂ aњ^q\zR_1V`$QmaqKmbE"\d>>"2e6$f/ڒh.) i!^jljpHmt /nn"o\$r"sv_ę{a8[a b Vc Qd=JeDtf=ngh 62ri#/ TjG('k l*nM0oZ {pZqbtVx^٘/d^ZeVoEeQdfJ╔hDLi5= j<5̒k/.l>'xmn d?nЍo-q ֊rswv>iyw^gZh8UhPXiJwjCkNoHp^BPq;wq4NDr^-0ur&Fst"dvuu ^vpwaz"|Y^%/rxXdreSQrMؒrGĒsTAs:Jt}3t,u[%uRv Kvwp ׉x2yk{}@\vQX>vRv MqvYG.vv@v9׏w]2*w+Ǝjw$x2xZHy⋁y ԉzz){x|O~[MzgWiGzRz@yLyF z ?Kz48fze1юzw*Ԏ z$21zvzx{J]6| Kk|}@h}Z'Z~V~!Q쑴}L[}E}?}8}0ێ})}#e}h+}R}~O9~{m~~?Y7UMx7/ێ/>(z"y( aRu_19 rw~_XTѐPs~}Jǐ&DQ=[|6 w .΍'B@!{Rȃhx> ΂3}SWpSO I{@C <8‰;4%-Ǎ1&͍ G\狲 p ?dV[ȑ%ReMNHKŏAh;)(3􍦍Y,_%Ռ+&Zi kMd҅ȀU=AQ!oL|fG>}@ƍ: 2[+$$4!i` o9@ o T*ɜOK[Eљ?9i 1%6*#|׋J:Ëg T!ZāQ^SxNfJhDǍn>fr8(510)T"o1ًޒY(`~ džtNWΠ*]S^MM_5H`B蜝a=AcI6d/ޘ~e))8gM"Εhicik m p;npGs xV- `.RBp`MbHߜc7Bd~<ǚ7e62g/Rh$(~iH!wj-kmFLn 1~pL͋r&QuyOUHc%Qٝ_cM՜dHޛeC fta;u CFv؍5x!@y,{W~SteOt5Jt"E{t|?t9uM3u,>:v*%Zv9Yvɑw%%w ,y9z6G{D}#RϘxyNǘox)JA2wEYx2?=x[8x2Dx+sy $˓y8 yk_ yÐz[ ӎ{_|G} }Q/|M|FIǗ|D|">:|-89h|=1te|M*|8#|4ޑ|?Ր|DMP| ug}~ 0~Ot~egPM;};IG*D>7w00k)x# pޏ X&r=V}<QOLcᅈHf\C+=(t6/0(L"xF‚W QʋɁ ԈnUNwK5aG&*pA啢;5lr9.'5e! }1Յ# ݃l͋H_V MJ &E@b4:Č4\M-&=? ߑՐE5 f~/VelLJHA Dƕ!E?^9F3Y,[!%7*Αڌ6͑R /⊻JG/KQ͜G0C.>K@8u2_t+2!$𒁒ʑ䐾 F lXƃ[j΀J,eF{CBr'=za71pW:*#З㒁t֑a z  D= dd}MA\ Iɥ^\EIq]@"c_";`5b/cr)Wd"fg}BhJj8 l_mGpuV{L^I\C_EN`@c @(d;feT5idf.3g(L7h!5iujk7#m [yo{q-tYx }UK֣6d3HKdE Ke@R@f:g5&h.~i'j!\klbmoT Pq-rGujy.}MgHǡ3gD\hh?i<:@Nj-4k*.Jl'l mndowq brtbwSz3w~LϠjHcHkCkJ>k9nl4im-̛Tn'*voJ op5qrr ͓tv6x,{CKn[GnKBnW=n8ko3opq-4q.&q MrOGrЗcso tPv\-sx#zn:|yJsrF7qBnq=rX8Rr2sz,mt%͙t}ituu`mu ͕lw x[@zA{;}\?Iv.F?uB%Ou=L]v7ivj1bv+Cw1% wewwx? y{-ݐ|(_}<~)HziECzAz?9B3䋴-WV' J;uHg^ Ʉn5 (؀?CM@<0'8'2,k&+ԏ(8/qD}r ӓvJ ލ?iBC?U&;Л7y1 +%-ْ=yp }: rTBE)VAEܣ>9m: 6Ş{0N*1$Mrc$>J  y(%SDY@Za3cA.,d'e!{"f8Ag[7hpj6 Ǜle.Dn"tp uzDB+a}?bGᦀk:\7k5hl!1(m+,[n9&_ o[opNq)q {_tHvsx{B}2A]oC>Wo$:o"5o0գDpg+q<%q> r\lr|}sfktB ]vfTx%z|h~iA s]=ds$9s5rs0ss*t$⠂u uKi:uCvVv }yzl |R}ve@rw=wk9Twh5=hw0^w*aTxS$5fxx,xgy$ Ŝy E{N|ْ}M~>~x?6}"X;䂞8yN4g.T(ȠH"=Jk' ؛ H^b _U =l:uF7Z32I-'ɠІ!6- (- MӘ`_{<9967⋾1â%P,w&ʠԊ Hv( %ֈ]R[ RUN[ 6; (8Nd5ܐJ0@+%Р"O&Omz ݇?1' qf9[603أ/s *hє0$ɡO: q##A# 7 3 Ҝ%טk88'%rB8V5ɣԜ2.l.k)T o#gD돫Vʋ ڈ #"Y:zf]Vf_jgafh2cÑi=e݇jg|jiq4k'kf/kmb[lNo#PmcpsDoqD8pHr-:ps!psq9t7 ruAqa(f%bfԣxc8hTcje l.fgm{g;o.phHpqeiXq[jHsOkt#DEmt8n|ube|Wg=|Lh|Aj#|6skd|+k| k|#mW| o}X((Y:JZe8\Z]^36S`Q4w!a-lcI)adW3fC~Llg~Aig~6j~+/kQ~ =j~l~w n~˪dVHX4JYE^[+]5}_MOv>` kb\a#ćVoeUCKfˀ@h5iŀ*j;^i.k mթWUzVXZ G\1=^EuY_ljam`HbzUdeJeۃU?g4h*h\ShZ/j n+ިS厢U3MuV*XE[d~]@t^j`wY_iaTcvJ@d?/f]4ve34f_("f-Wehg;7r*'RT7EdUbWY|[|rx]cg^ۑ]T`FRaCHc=dB!1d&dadވ)fOua4R(7SvgT}VX4yCZ^n"["b\X ^%bM_RC`f#8atC-a"`$>b gkZyQ_BRGTӏ:V+W_xYmp[E*a\V]L^B_ܢ7`џ$,a!>!`ז+b vl{ɭi]o"i_KjPaT4kcfkelgxm@iimmk,cLnQlXo:nxMopB3qq>6rrW+r{sp grEtUrt xsv!fd0{fbefgIghhj8ilwjVnm$kobkpWlrLnsAo?t6jp:u+epvx Bpw%qw brxa{h~c{t;e6{j fq|_g|TiF|;Ij|k?l|4m+|)im}m@} oV}$ p}[K<\=k][~^~E`~}6b~sddO~i9e~^f~T&hW~Ii~>kd~3l~)$m~{l~Vn~ pH'Z[*T\K^D_|barclhMd{]eJSPgzHh>jv3Ak(k퀀khdmK %p/>XY[#R]3^{`3qbjghcy]e RsfHg/==iv2j'j| i<:lc ,pFvWAf4X|A7Y=[슆]≨z_ pajtf|b·\,d#&Qe{GPg X=Z8[v]l6^a`W>a40MZb!Ctc&8dt.eWN#dei~gu UȮV*WYƧ[vhu];k!^x`__U`LboBCc?=7d7,d",cɒ*e jbyxwU0V!ÒWuYI@kZu\4j0^_0_)T`z/vTZU_eV≧X{h~ZJtH\'iS]z^)^S_IaT?b5Hc*cWc#ek n0|ql,l\l^l`mb)nXdMofu ohjp3jJ_pkUqnmK ro8?sp4sq)t?rts2tt0 uUuħkic4iddjneԑ:kAg_l$i~ljtmlkinn_(no~ToRqVJpLr>qks4r&t)tryuzr)vssNv Ut'xgeiejؘfkߐglᆭhn9}j!oQs(k$peikq^lrTpWu3rq!v(qwwfqwr{x> 1syyʥ0apbq [cqdr-fr|EhAsQrjithqjt^Dk{uSlvH~nwA=to_w2p1x(npyp yxqy )rz`vbK`vZavcveAv{Ifw6qh/wgiCx+]SjxRky GmKyo`z^'oz.oHz1qe{ (r|GT_fz`9za8znybzid[zwzCfzpgRzfhc{6\i{VQk{Glw{<^m{1n|C'/n|n|p|r }^b~ɚ_B~[l`C~Ca}ǂ}c}yRe>}of}eg}[h}Q=j)}Fk}<m~1Zm~;&n:~Z1m~`Op,~rRq~.]9ۙ^;6_C`QbxdZnedfZgPviULFjÀ;7l0l&Jm. lns;ПG[߇P?\m_^*T_(Hawcj4mdceYg:Oh|ERir:k2G/k*%QkkMKmNscZޘz[]^ɉd`vbrlc‡ecdXfB:NgDi9jG/je$j<jmngqځsYŗZo\] _tvawlb݋vadWeOMfCh9XiV,.iچ$i j&l/tYKZau[H}]M _u `jbL`cfmVdLeBg78/h4G-hO#Dh[]iB jx+!X4ZʏT[1l\}^s`\Gia_]bĔUOc~KeHAfB7g-ah"grh j,xmXå~VYގbZ<\O|^;r_ݜDhga_^ b-SccJ+d@eœ69fx+g ]!fWǧp zi[vXYoӍZ\%{]q_xNgL`8\aCRbEHc/?Ke&5f*fB ]eg k͈y[MWڱ/:XhZz[0z]$p^af[`<4[a9!Q@bhGcw> d{3eX)Zeg:!eAg mR{RޛW&>X |YgZ-y\ho^E1e3_Z[` Paڥ!FQbol\Vo^"8o`=pNa#pczqeprgfri_\skRs|lHAsnm=to2up'}ururvs;xvt¡}lbjPm*cTmdٌn^fN ogyoipp]k:f#pl\q~n"QroFrq';srW1}tns|'7tttuX^u>uCuwbigJjXh̓GkiۋkjllxmmmoQnUneno[oHqjQ'p rF6q@s;Hr]t0ru&svervtYw>uDxğ2en'fo1TgnoOhPpciqx.k*qnlrdls^ZmtrPnujEpv7:q1v0Fqw%qxqxmsxtzctŗdct͑"eiu/fu4Sh'uiw-iumjv[d"k|vZ lwkOmwDox:#p_y/pyw%Jpypz!rzJs{wbycmytdgy`eyL6gyKv#hyliyc@j}z,Y}"k1!lD{nt],k^'E_l`Ҍ{Pb}qd6geu^*fu7TYggJh釗@j$6k9-,k!k tk tm(v\q]_^ꔅ`67z|aԑpc|qfdȏ$] eS2fŌIyh?i*65rj +>jf9!i҇Zk0 Mlyz\Rn]5^Fk+_y;aIob㕃ed[euQf H&gG|>h4in+!in hjz lz[{\ @\ѡ ]_Q$x`ٜ9nbpadmcZIdtPDer4Ff}=gÑ3}h2)yhhii܋ @k_@xh B[\ty$]^壍w`ermbQc]c&UXcnNd晟E_e藯<)g 2*gϔJ(gْgr<i, n+! z݂ [[ج㇠\C^(v_tlaiJbZb)Wco8Mdg^DeNG:faa0gL&g g3m|is oՆw|QJZE[9Άs\}]Ft^>k=``aVZbͥLNcȣTBd79e/f^%fTSgiq?~dr\r]Fr_s?afscTut%ePl`tgbthXuUjMOul E#um:Cvo/wWp+%wq+wXqxrkyspRa$pb͎lpdqe}rg/trhks!jdaskWsm)MtnCu/p29 uqn.vlr$vssx&utwitxv,?mfÔGnIgnhoui}p8jt/ql>jqmqaYr nWtroMcsq-Btrg87tsq-u>tb#u8u.tu7vXv)wTw%j]l̓Cjmdknln|amoLspnp"jo~q`pqWpes Lq)t*BUrIu7s[u-`sv#7swsFwlu w4v>yA4gs2hdsi,sFjfs{Sksrnlt]i?mt_n:uV#o,vIKp&vAqCws7*rbw,rxy"rxwrXy Ym8'4n)n ImT=nH p#w-`a]bYkdQzvelm>g?chIYiPvj?Gk9{=lY3mI1)TmyClLnHz o:[-x8`wafbT~YcIuel#f~bogXhQyO1iEuEj`Fq~,]ΰ^f_ w`=o aecS\dZQe!&H+f#? f韕68g՝,h^I"h0t;iuk֊{wsnڀYv[ڏv]\v0_vx`yovbpwdgswKfp]whTpwiKewk[Ax+l7IxnM,y\os"uyph yWq zqX{>r۔dsatb0tRc`tdxhu+fouhu@s4cvt*:vUuE @vuuv vvux~xL(lGqV>lqNmqd~2nquo}r8mprd+q1s[#qwtxQruH#ru>svX3tv)tw|twotw ux y2yאjvv%kv_{kv4}+lvItmvl;nvcaowJZnp0wQ px6G?qxy=orx3syy&(sysyt#y uzhy{Xif{izŃujz|kzjslzqkdmzbnzYoD{Ppo{1Fp{&=q{%2r{\(s{r{s{ t|Ly|ˎhm9Ji~i~4{j~s_k}jm }am}Xn}O]o+}Ep}kZ6vl:/-:m#lblnqC8}҈ccw|c|te7l@fmc@gڛdYhOi]EFXi=j4kZ2+l "lR"lndr;[bBҁb%zc os d]jeagXBg?NqhDiM(<-iu3j*[k1W!#kPlgnBto]aUa xbA:qfcdDiAd]`f;Wg6M3gpCh:i/ 2Yii)jjzlu= n0uʄy[y]U~y^{Zy`sybkXz$dub>zBf Xzcg|O~zxiG.z\j>zNl_3{m)\{nM{o| p5 |p}rpMw`wa}wbzVx*d9rxejaxgaky iX$y+jfOyDkF(y[mB= yn2z?p (zq!zqzrI q{s q|tȌnue(ueufyvXhrvibiwj`wkWwmNx(nMEbx^o;xp1ywq'yrysys zBtd{v,si݆sjttk7yvtlqluglhvCm`8vnWOvoN#wpDwIq;(wr0xos&xttxtxu WyZu{fwqo%qo3r_oxdsppUspgtqe_Ou!r3Vuas MOusCv&tn:cvu0wau&1wvXwovwv *xJw{yZrnto|t~jp%txwBptoKqufrud^ns*vUsvLtw5C9twq9u)w/ux%v8xvxvx w=y|zވmtyny:}Xnxv*o}xnSpdyfqUy4]qyTrxyKszp6Rqc,r#r qys s~)hҐilz|j)skkjl,amJXwmO nhFo=oň5p ,qC"xq prssUx5Quh&~nhxi>qjUi^km`^l`W m:AMm$Dn@7lH/mT&m&mo q1lDw!~"dǪxe)%re|krfch[!ilQjVH4j? k|6kӜ.Il,%m wmroݍ\ qmxi }k\b}i]B|=}]^u[}R`rm}Lb>e}Ad\}?eS}5gJ}!hB|j<:|k0Q}Wm2%~ n:~Xn"~oC ~p%qT{L`U {faL{ {bstC{cl{ed|g3\8|hS6|iJh|k3A{l9{n/b|oc%t}pd}@q }qG U}r&q~"tEyZduyeSzyfNsygrlNzbhdGzj[zkHRzlkJzmA2zn8 {8p.;{q*${r|r|or|s~uՅwhwizqwj_sxKkcvy5_vy+^wym!wywyyyy~z{ p|l|q|vq{orY{gs{T_=s{`Vt^{NWt{EuL{=u{4MvI{*v{ wV|w!|xz|+x|}K]o|:pCvpxoqfrX~^zs~Us~MJt~Dt~<+u~K3u~*v?~* v~GDvR~)aw~x}~2n{qoLuo@npfqV]ro U+rLisXCsԁJ;ytl3$t|)uo fudBuk(Svw~mlznk}uUonoއf0p†c]oqT~r5^KrBs_:s2t:)\tނu yu v%;wd~mymt>nRmoe@p \npWSqqyJOqAr' 9rŇ1sJ)(ns煍Lt tg@ Wuw+}lPx3lؒrymfknIco8ZpQpHp@qT7qҊ0rO]'ossPsن u=vك3{kuvkql~jmpobnaBYoOPoޑGopK>p6{qJ.qb%rHrVs tՇ6xv˃zcju:j霚oNk{Shllj`mlXKnwOJo$.Fo =?o5pB^-p~$}qqe sI St=mxy/isimj%gkc_LlrCW mNn[DnЙw;o?K3o}+o#5pMpƐs tyxhrhplixejXR]kUlŠLm@CnC:n}2un*n\"9oplGro t6{6g\|A]9u%^ok`+h a`fcW\eHN+fFsh%>i6s*kT,Tl"3ymyĀnnrX|oi"qvH` zRatZbn^lcg se_mdfWDhNX"i`E~j=~l$5~pm+`~n!wop peBiq=uLs~}\dy}ydtc}em}ff}h<^~.iVj~!jM~kE[}m<}nH4}oo*g~$p ~jqPJ~q ~q~bruS~~{hTy{ht{im|#jf|k|^4|lpU|miMz|nXD|og}+yU}_ z }z}}zZs "uGsco_t6htŁ`ua&XZuPvPGv?|w b7Sw~/7w&xixpx y=Rz+~~yerNtrņnsWRh@s`*t0WuFO%uNFu>ovKi6cv.yw-F%wtwex"k xoyɀ#x=qsrmrg-s?:_[sVtN=uAEu;=;u~5_u-vEB$vv΄yw -x-yxvp]qql$qevrS]sU|sLt,6Dtyj;t}3uf,uHZ#uЇu8w wyu^o'ppp?jpJcqdK\Tr >T1rEKqs]?BsS:9sA2Wt6*td",tuv4 w)z t9nWon,i5osbpVZq#RrJ7rlA`ro8s2R0sh),s t0ptS?v TvH{Ssmsmmgnta(oQwYp1.Qq3Iq@r*7rw/rP'r4sI@0t'=OuOvsC|1qlfllf}m|{_nVXfoGPp]Gqz>qe6AqZ.Nq+&qrX;t 9v w5}z\.u>])o^iig_baSaZclRdJ9PfPAg:^iT2j(Mvkl;mrFmn}q_x܃h_sW`nRahc@cCaIdYfXQ‚gImPhA+j.9k0@l'@nсnoH PopWswcsedvn1eehf`ꁩgYiiQ%{j+HCk?@li8Vm/{n&qop p ISqYhrJu/wgshbmig'i`hajX̀kPclHl*m@&n7o/Jp%qJr:Xr[ arsvpx3~Clnr~wll~lf~m_1n3W2nOoGp?Y~qG6~r.g~r$s8s~s ~t~Luww/|pq|pk}CpeQ}q]}qV0}rNf}rFi}si>V~s5~&t~-B~/t$A~ZuE~gun~0u }vOn}wWy7uztp{qtj{tdT|/t\||uU|ufM~|uE|v^=}v5J}2w,}:wJ#}w}w}w w}nxZ}by>zumyyQp.z5xj(zxc{ x[{cxT{xLu{y)D{yh<|$y4|_y,F|y#3|zI} z8}"z >}?z}|{?|PtxS}ox}.iy\|by|[dz3|jSgz|nKz|Cz|;{3|3{|+{|_"|7||K|/|| |}#}}J}sw~oxixbuxOZym RyJyBzJ;&z3~{7V~{/{'/{a{;{ |2 ~|~}}l|8Og|bl},l\}z5T}L}EQ~~=~0~6S~J~.~o~'~~S}~~k~~l ~~}j~~p~~~kz{Rgg{a|Ta[|T}L}4Dj}]`<}5T}-}`&e}~R~ ~N~3<~jIze{`{sZe{LJ"R|K|dbCG|;m|f3|Ą,n|?%|}@o}< A}H}{~shyld|z_NzfXzҋsQ{ye6y.z!&yOy}zau{ T{҆|^(dKv<`_*v^Y~vSWw"Lw˜Ex=xy X4y],y%mybyB7yZ{n {@|0lR\Lg]1b3y^;\!_Ua5OWObGĊdb?ۊ*e8!g0h)3i ckWQKl ˆlom[ot[j_fY5`taua{[ebU(d2N__eFΉf>Hh7!iK/|j'?lmdHgnB n,ourv'iceca3Md[eT쉧gMdh5FGQjI6tkb.ćl'umކoyopjqyswKhfeG6gm`h,[FiTxyiMEXjEk=Rl5݆m.3,n&oEpqDqrauHvV@vOvHwAw:iw3 ux&+GxD##xSx炧x ý"zXـI{|f/{!alz[@zfUƃIzUN΃\zSG5zp@Vz9z1ׂz*z#:zGT{%E{W ]s{;|F9Z}!}d~`~ ~k[`R~%U_e~N4}F‚}}?]}8;K}0,})ق}"}zс}} Ӂ3~'~+s~~cЀ_7][}U!MāFˁ>L7>/󁍀)~k"a#6[0L* a}+b{b,G^RZ ;TLÀE%<=5N.~߃'̓R ΀Oy PoajA ]#ydXfRoۊ4KDM, c(F^~2@Ze~7JU1~gkOO~H~뒰AU: l 1*J#/C>&)~Zp ~b]}Y }ߚS}M~0G~~|@~80:)K,!~~~o~q~~_\}W}Ru}L}F=~ ?~7~؛K/~' ~֖ ~S~ ;&}㉇} }wd\P_]YK^TR~_fN`Gȏb@c9"eA1܍Cf*܌8h$ik Ɋk lZY^mpu8b|__^a%`9Yda.Sؐ$buM{cFe7?f{8DEg0~h)׋j5#7gkk/m m =ngoKrwa b]cxY"adPSebMQFfFg?Ch7^i0Uj)6l$"mng>or @pC<qt&texaEfY]KSfX gSThjLۍ,iRFj@>ʌk+78mk/܊l(n$"0o[pcχp Ņqrutxb ,jG\jWjR9jkK lUEm=m6mn/Ool(,(pK!qCq>0Zr%rb ᅧs?btwT)yan\xnVnMQ0[nJo`Dho=p5zqc.q'er Çs:RsEtD !uvmSxz`q[x`qUqP]r&IrCtrȆ77T/څ(ͅl"e@"7OR6~Jd@YMUp.PхNsK'QDlx=v6.?`@!b9Hc|24=d+MCf$ g:hrj֌k m[cnWqC3uZf}_U8_Q*`Kӕ bE=c]?W>d8Ee1hg *qh.#̏iNk׍luCm Xnp7sNw Yp)b?U^bPؔcKdE~ e?7g8]h%0i)j-#Cks$lyUn$o! p:q[t9xY$eT쓉fP5@fK#gEh>2i7pjv0kE)lA"mjȌnoHLp ΈqnVsv xZGiST̒HiOe&iJB|jDkq=ɐ%lG7cm 0m)3n"~Co;>p|c=qq쉭rQ {sfctw|MYxlTAlN m-IgnmC;nX=(o6dho/mpd(Xp" qrdsF*Hthu"vyb|XoplS:p]MptHGpBQqR<8:q5r.΍r'si!DsQtF犨u u wхxz}bW0t*RzsM&sG܎t:A-tw;at4ʌuS-挃u',u SvEJv|0w& ^x#ry7z|'B~KU1wQKwLSwiGRwAzw:w3Ox:-x[&Qjx x5xyW 7zKӋ80&p)ʊ#h+ȁa_0} P W+ (sQaWMI CtY=[6)/† (!&&􉎄 cށ҄3P<^LOBGˊBwC6Ǐ j 2 {bbZh<zLHC>(802J+@$yQc)oȋ : r܆\ƃ7(]R:[M \fHk]eC|d^=˚T_8Caj1֗b+"d$eDjf@mgŒHi~ 4kFlpn:s9yPќ5^qL_1H`0C|8ab=Fb7c1.e*o'f,#ٕ?gF"hi0kc mnOquz7Oa_L]ybHDbCSc=e7f,0g;*Zh'#t}i3(mjsekm [1n'or!vVzOdK@eGeBӗf= g|73h01in)~j8##k-ӒlLlmŐn +zp$qt鈃t wb{P*hKԘh9FᗳhBietuDJvF w xMze|\MvIuDelu?uu91v3hvS-5v&=v *wYwNwx yyqkz|}EKEyH*y}CyU>=yu91y2y,b_y%y0Pyyz){ | |}}~)J˓}G_}C[G}l>l}k8N}f21}b+!}?$}J |U|.| ,}H~~!.~j~I(FgVBd8=oE71Fb*U#C6bPh& SljT)HRE,J@z<6nr0+ )w"WJ؄@!T% GI߈cGȋbCʋ?Ց:Z;56/Љc(ce!E@҇!m` n-R>1/ FP BL>搤94z@.\'i =9Nj_/_ f0͇Á€EAy^-=_Sh82,'&]‘,r~9 .و׆ C@RexWf h{j#l6wpup|oG=%]JCr^ @1_ ;s`25ٞ~ag04'b*c#LdU}ekygDۘ0h jœl/n<r%v}F_CR`?{a;bzb5\c0)'d):e#\fgiyjm i l18imImPoEqlu&Bx~vG>ff:g4h/Kqi~)>jf"kYkl1Fm 1oq&sYvtyrGi\Bio=Ҝi9!jG3k.k(l"<^mgnDnĕo Fqb"ru#x|zF-'lAɜ*l=l8om33Qm.)n(QoI!orOpQprq Bs-㐮tw\yb{E.pA0o<[o7pU2ۙp-oqi'aq jrQ˖r*s3s Bu͐FwPpx>z|D,Es@z sy z {y|}DKB {>{p;W{n6ۙ {1Ih{+S{$-{\{nH[{a{|| } ҏc}mK}M~? A>:p5혘~0n e*m~L$ dR[H:x ԓ, Ԑ:$ @3=S9)>4 /E)WFq"҄ufQ?Tf` ,0 askjsGav>;7K3oԉ.v(G&!施rfymd6 c)4j䂔E]=͏:ee6)2F,b5'9 ڌFpP^ՉyD 熥 c lX:#Y66Z2_[-`]K)^#V` Fa0ubTc 8e^IgLiNla uq_+y+=˨[I;\)7ڦ]+3`^U.c_( `"Ӣ bdc dNea ؝VgAoi< k@ snd sRz=W]:^7_z3D`.+Na(b"2dwd2eg hCj–=l p4 ~t{=`s:Ba6ޤa2b-lc(3e"gfOfWgjh j10lוn ;q%v{>^c:Nc6df1eO,fE(gc"2hHfhij dli nF"pi swa|@=f9f5nug0g,HYh'i!ß9jk0kbsl nCKp##rh,uxC|=6i9 i4i09jh+kW'lP!?m om$n n p@r:']t.awz\<~<.mH8m44]4m7/Zm+YKn]&y o eoK#prpqxq8 |r2twyT{i';9hq7p4p/Ѡq7*q%r-Ş,rrs4s 2u wΓyP{8|":=t7;ut3¡t/9t*nuF%u uu䝚uyv Qw8y;p{N|w}99x6x3Mx/'y)y<$>yq8yu˝yHy] z {1|q|?}O}|f8B*~{5~U2~F.PW~1)~7#m8~)T}}J}U N} ~]~A~n~g~P7rr41d-n(}G"eIтmt t< ^tԑA S#6Z3}0%Hx+ុ&מS!T;3ASK כoqTĀ4Р>2$y.9;*%ƞ` N0E(󞙊Ý SИC=n3S0ğГ-R)$6l+?D Xf O҆儸 ,#1頴]/z,a(w/#|8D6ېNތ- B rZ G唳)@Q(d~Ze]/e_HMfaFlbe\m'n^Vmy_naou1cpjdqq`erUfsJ?hwt>iu3jvO(kIvjwBmTwSqxWqXrZSrd\BrĈ^s.~f_st(atic,t_GduTevVIguw>1hw3&ix!(IjGxZixlxdqz"VvΡQWvY!v~[v\w }]^wBs:`whbw^,cx,Se#xHfy =wh@y2iGy'iz&iNzGlz?Wq{rV/zfW'z-Xmz]Z=zPt\z0|L^#zQrG_zga)z]zbzRd\zGe{/Fftir~s1~R3)SQT΄ڌeVфeXԃyZuon\4e7^6Z_Pma`Fb遪:d/ey_%Ke,e+h8qasPkQډєSv؋U=VWxY̆n[wd2]Y^lO`[EKa#:=c/odG$c+e*gʁgszO PipyRrT0VUwXmZcc+[gX]N_@D`؆9bt3/c9$b-d+%ftɠNG?O3P֓u=R#UvW@loY aZ}W\:cM]C_90aM.b *$?alsb̆ OkFye/N4Oё{PRiTחuyVҖ7kX`Z(VJ[cLg] B^_8`)).`#`_G'a HkRhzCK8NޘOQfRb~IT4tRV,iX,F_)YomTZȖ|K.\DWAR]r7M_m-=`2o# _7a\> GiwփCQO?OdP󨝇pRU}sTPs\V1hW]X~SZ3uI["@\6^+_2!_C` l(gzEJO{OƱ5NPRE|TrvU2gWd\XRSYHZ>\)4]Ι*^H% r^,`B fn}|Y"N<\OPɴʆRX$|?SiqUfW(w[tXEhQYP/GZ=[3]w)x]~'^i`T @pl;~g[g\h?_i`ic?~&je[sk@g9hki6^lLkT+m(lIGn n]=o3o2p p'pArorqs rtcbQccsSdteKeffwhk|gbj3rtgl"h hm]io,ShjrpHEkrsgׁ NiրuP!SƉTVjXc~MZVt\cVj]`_frV`΄LdbuyBad7e-,f"e"8qfyi-uiRVv&StCUW}Ys[,0i\ω_^BU_$KvacmAb7td}#,e"Udt;fI h҃:v Q7kRݎmS⒋UX|W&rYh[^h]TV^nJ`>@aۉ6c[,d "rcseC plA{QŝQRSњTU{DWqvY}xgB[\\RxR]I__^?`؍6-bYO,|b)"Cbqd` l{QVR+S݃UzW*pCYeZR[[—Q\H^>`$4a+7b-!Ja c‹{ FkUD!y ǚZQГORhSuU&yVo\DF]ۘ=I_D3`)a.g a> )cn@ mևC{xϚQ95RnD%Sc#"Tx8VgNn;XLcYY ZN[E]1<^x2m_P(`>`xcJB ~pdb}RQ/ 0RwS"TwVmrWbYb]WZTuM[JDH\:]ʠ1%_$'i_i]``Uc:Xeq܅&'jFZjp\rj^gfk`]l%bzldomfzen!hX[nj'QcokFmpdms;0qLn0qp2& r%qQ:qrs:rtvtGWf`gUb,hche$eifxjhnk.jgdkl(ZplmPcmoEn1q:qo@r*/osD%ot/votquNiu5w*bgWbhדciĊdjfHkwgEmXmhhnuciRoYjq.OkHroDlsp9mt]/nu>$nu nviJpvOu`x^rn_No`go^apcpve(qglf{r-cgrYhsNjtCku8lvr.mmw$mwmwoxluyўY\bt~]]ttX^t%`,t~atucuMldubDf3vaX+gvMiwwC jx8Okx-lx#lyS myo=y/u{6[y.\xΎ]x_)x}`xtbxkcy6a[e1y~WmfyLh*yBXizH7k z-al z"k{ \lT{8nb{v|}^Z|[|u\| }^W{|`{sa{j c6|`fdr|Ve|OLDg>|\Ah|~7Pj`|,k |"4j|k| m}ow`};YZ[{]\<{_~r`~ib>~_]ck~Usd~KwfR~A=g~6iW~,&j~!i~j~ !l`~x~ٙ)XFYZӌ,Z}&\C{0^Bq_ځha>^Xb|TfcсLJeX @|f6hY+Mh€ gӀEilv k"Jx\0Vꈜ6X YK[wz\p^҅Rg`<]Da~|S>bلIdc?eF5;g8*gT sfjsh7 #jQw/UmV%WfYЊy[o]f _!m\$`eR&a·5Hc\>d4f0m*f ff*h2 vkDxЁHTCUVXxZhn\id]Z_&P`Gb0>Kc4Ue *zea eeg\ n{_T'SUx则Vu_X7wNYm[Γc|]8qYz^ZO_FIa<\= b3d4g*cdT ldEEfk mN{ɔT[ՎUTv{V++Wߝ.vYt[lb[Lb/\X]+NE_D`e;aޑ2ucb) cюxc !e @mxz(VqTTXUƆUޥ ~4WotXkq~S״TӅUJ}VsFX2iYZ^[[T2\LJ?]n@^Q7_.`ܛ%"`sb|e4ms+m Z*mW[Cm]È$n$_nauoLcloebnpngnXpiDNsqkCrHl8s n.6sod$spUsYq&]uqvEsRj1`(hjaYk3bkd}letqmWgjni"aGnjWio;lj{4k{*Ul| lC|;m|( Uo|4x}#]]~^~v@`*~7wa}ncF}e"d}[e}R#f}HWh6}>Ti}3j})ku}mj}l} m~1{z#~/[уf \p]_-v`/mbddcZdɀQeUGmgV=h3%j(j?aiJk) 'lxnx+Z|N[by\m~^@v_lav0c)bYcԃqPe Fyfs`ǚ5b-cM#cWBdבxg9s(;'wVWhDWޮzwY;nvZd\_Z]Pj^YF_7g=` 4ak+b4"bQ)d/g9u bpAYpZ[o@p}]5p_yqOa)pqc$gr_d^rfTHsLhlJsj8@tMk5tmV+uvn!uo(ugp? vpoxr2%m_v6n`RnZájocDxodop4fftphD] q7iS7qk7Iqrkl?;s@np4t o*trp thq4tOr- Vu8s+y tk%dzkeA#kf9^lg\wmzhnn_j eokU\?olRrp3mHpoe>qqp3rq)s0r ss}s)s *tuy@vg]jgjhkQil\vjm>mkn$dlo[|lpVQmq^H nzr=ost3]ptI)mqyt`q$uqu rvyxHd$p|dpۅeq-~,fqfuhqlikrvcjosZksQl6tFmHu4z;lz1mz'nC{zm{7o{ p{,z|`~YLa_}͂b}T{$cj}1rd|if|`gE|Wh%|N0i9|Djm|;*k|0l}&m}!l}n| o}b~z}s_l2a`*pazebqqcՀheG_fSVgGMh\gCi1:ij0:k&.lTk\~m\~ n@~nz:~d^%g^4N_턊yab q:b؃|hd[^elUbf[VKgwBh9j g/k@%j:jlk nY{9\ъ8]g^x`2pnaBg,cI]dgT4eRwJfzAgh8i/Lj'|%j8il6 o#{5[Əe\q]dw^oR`rea\rc8RdIeFP@fv83g.i;%Ii_i9PkHq~4t[3\}\͔vB^SUm_da1[ bS5Q|c&H dL?Zer~6fŠ.Jh/%}h{h^`j*r@H#X[,j[|\9t]ll_xcc`YaQPbwFc=d5jeَr,g6$&gs h OiˈrSx~ɀ|[[>{e[zs] k0^pb)_XoaENa˗E:bȖ-<~c3d+{f2P"fBgXisKWZ%Zz\[REr\Gj];`_z6W7`kM_a8Cb&;bp2d~*e=!Pe]g;7i_fu9OVZIZKyZq\i]c_^V`L `MBa9b9I1XcVk(dqd͕f? ^i~VwksYs{[s\|s^t{tF`ktbbu dWY=uZfPugFui=Lvqk,2wl(wmwnwoI xozq]q1^ЉqS_ރqa{rbsKrdQjs(fasgXlsiO8tXjsEtl;um1v7n'vovpvq wr{sHncodSo}eKzpf~rkpgiqi.`r#jpWrkNurlDsna:tio0u+p'uq+uFrkur $v4s"|iulXhbli miymjq|nkhol~_p{mWpnMqToD:qp:5rq0sr&Ctskst2ttl tu|who3i*oiodl f9Rc&gYhtPi<`Gj? k+64lav,m!Y"l8llnq'}x~`׈a zbpFsc͆kAe&b9faXgxOh9qFi=j;f5k,5lQ"lF89lqndoq̀\:}_᎕`pGya'Dr_bJjc^aeNWfQN?gEBgF !iԇjOl%'tgYI^|_Cv_toWa!gbN^Jc+TdKseLBVe39f1h :)ij hыN1i։XktɄ|S^{^un_m`ukea\c(ScJdH@e>8tf50Mg&(hM+hji Qkvv*^)z^8gt@^l_ءdva[btSRBcaHcV?d7 e7&.f)&gGgiǎ nk_wȃI]icy]vs^]ĩ8k_Jc_`biZaǣQb̡Goch>8cߟ*5df-}eB%Ufl3giliߍb lty%vYkvZ}rv\dvw8^5nwh`+f`wb]swcTxeZKmIXtn@'to6uuq ,vTr #+vrsv)s,wscxth=v:n%lƀCnlynmromjpnsbqo)ZrpQfr{pH`sq?8sur5t6s^,But"ruAttt\vzu"vvWxkr/krJxlrMqm#rin ra~o%s\Y#ot.PpOtGpuI>`qu5rv+bsv!s0vsvtw.ux1yi`wd}iw wjtvpkmvhlaw`mw1XDnMwOnwGox<=pfxO4q0x~*qx!ryr#xSsyuz{fnhR{}'h{Cviezojjzgkfz_lzWBmVzNmzEn{ =oz4p]z*Dq!{ qK{5Sq{KsI{Jt{|hg8|>g~v(h~o/i~LgGj~^k}V>l}Mm*}Dm}<%n}c3Io}K)pG}W CpD}Tp}* r}D}u}?}f#={fug nhfiǁ9]jU6kL[lJnCm1; m2jn).ovoMgo! p~iu5~s~UeCzetfmg\eh„]i9TjKkVnBVl:mz1m (nnqdoZ pt/u@~dydse(lfgdg[h:RiIj$@jK8k߅}0l܄(d@jec fZdgxQahHRi2?iЊ7UjH/gk'Cl>l8Zm_ ny\v{blvc]pcxEidaeΓXgOg8Fh>i 5ip.j%k*k9Xl n0wvjzbUguKbo7bқh dA`eWf[lNg:EsgĔpHz]hz_`zaX.zckO7zdFzf>Uzh>6{i,{kJ"}{l\B{m$l|m{}n7p΁Dx=]{xZ^vx_o`xagy%c(_yldWLyfPNygEyi=byj4z!l++zm}!d{?np{8n |o0|up+sLkv(a{WvWbuvcnwdg#wzfX_xgVxQhNxj1ESxk{p*I6p.q~%ra~rY~s~i t]~YxK}}yijtinjh+k`*lWm~"Nn-F$n=oD'5p.p4%BqPqbsAG sWx*~xjh^shىmih!fja[_kXVlYMm Dmx<`nb4nꄩ- o$lpop(r[ 1sQqytvgqg؏khme0ig]xjZU kbL2l 8C\lh:l|3mX+|nZ#oig{oЅq rzy؁uuf͖pXgj\g$ch[i}SjJk6Ak9dl1l`)m5"n(Inۉ#q` XqyktOfBnfohfzb gȘZshR.iȕIhjpW@jۓP7kC*0k(tl> m qnK)pxV FqΆ>{jreKmege`f:Y gݛPi Hip*Csq셰|=qmdjkded_eҢWf䠵Oh!fFhN=iU5Li-`iq%j(CkL_n wos &~i|e~\Yv~FZpa~2[j!~]b~_[1}aiR}cJO}dA}f9}g1}iX(~ j~jk~tl ~ll0mplz|]}u#|/^uou|D_i|{aa|bZ,|d^Q|eI|g,A5|h8|j0T|k'}7lN}m}m ~naZ~0o}rykzaotz5b9o z_c9hzdqaRzeY{VgQW{vh]I{i@{zj86{nl4/|{m|&3|An|o8|ob }o};q t{y^x'et5x[f5nxfhyg`y}hXziPz2kHzEl@*zBm,7zBnb.zor%`{#pf{`q{q {q|Xruyvxjsvjmwjgwk_wleWxwm9Oxn,Gxo?:y2o6yGp.yq$zrOz9rPzr {sg{tw9xgtnru nlutnfuou^vzoVwpOw\q[Fwq>wr5xKs*-Yxs$xtQy!tyt Nz%u=b{1vxvrksqPrsBkyssMdtAsq]ytsUuztN utF vBu%=vu5kwu,wTv#wvxHxv]yv y=wdzxzLv#pxpq-xjqwd%r\w\swTswLtp"6pcR/pG'qY.rLr[8t quL}1okjkcd#kϒ ]lV#m[N+n5EnÎ=8o%N5otO-qo֋#&p9`p9r#su&t}mj]Zhjzo9rru~#am~8ah~Tbbm~xd[s~eQS~fK~gC~h;~j93~ck+I~l!~m nf~n -~oc~pthr|Le5m|peh|fja|gYZ}8h[S;}ibKZ}jdC\}k];C}fl3%}Am*}zn!c}oW}p}p@}p}rVus&zim3zigD{j&`{gjY{kR3|l{J||mkB|:n<:f|\o2D|Qo)|p |q}qP}!q|rP}t&wqxmlUy6mfBym`ynzXzCnQ?zoIzpuAzq9{#q1v{hrU)={r N{s}W{s|cs*|te} v x`pw8r k.wqeXxq^xyr,Wxr~P&yErHys@yt9zt0zNt(zxu2zu{u{u{va}wyouPvjbuvLdcvuv ]wuVzwvNwvaGaxJv?xw!7xwp0y^w(yw&z6wYz\x"]{SxD{kxv}z{tos{QitLzctzX]=usz%Uv z Nvz4Fvzd>w_z7;wz/qx@z'xzqy&zyRzzjzlz{b~P||n9rhsg~~cs~\t}U&u.}M'v}6w}.w}o'x }:ixq}Gx}> y}i7y}f~}}m/r h"r-b^s[shTZtd/LbtDud=0uԀ5vM.vـ9&iw^w;w yly|&~~~kqDfqarBZrS?sZ.K;sCgtbl;t3u#,vu%vhve2Hw x5gox<$jp\e p_dq+YqnQrWIr*Asow9sć1t!*t`>#pt]u) vgZ (wYx݀ hovco]pWp'PFqcGHr@r8dr0zs()(se!s\t #6u GvʅJx`g[nb"n\anVoNpkGTq7?3q6rQ/rBe'rmB rsK.uډv v)xl1f/m`mZm険TnMopFpL=p͕5q0-qn&Iq-qrku v-xe l7_lYxlמSUmyLMn~\Do\m_ P`Hjbc@oGc8eN0烋f)9hL DifM'jZk 큖lnrl7u]#gN^b2_\`V b OcGCrd?qĂ'hn6܁i/k&l;/m9\$n8Aop;~rGv'jdfe.ae[fT gM@hE)i>j6Bk.sm&Tnno>pV~qo~=sw-kdhf0fi`ziZj V{@8|obu&^uPXueRv!KvGD&w`COƇaIc@A+d9e2]g*h#WiOkyBl u:mcn+vpv%cK`__a'[mbUӆc>O`d}H\ee@ f9Ag1zi*8jx"km+_n Pnorvcad_jdZneiU;LfTNFgKG8hN@?iI8j$1fk6)ly!mn?}o \mptq tIwdThG_ .htYhT iMyjhFk:?Al$7ǃvl0R[m(n!Qo6]pmq r!suxcl(^l.XނlgSlL>mEgnn6>Qdn7 Xo/Sp\(Bp (qrQr eGsOtwFybp]oW߁cpQnp_K%jpDVOqM=bQq6CVr/`s'Tsg ;JstjBmt uMvx{abt%\sW'sQ2sJdAt&Cb>t<|Qu5f\uz.B}u'zv€v;qvw wyz|,` ~xx [~wV,~wP[wI=wBfRw;ix34xs-x&qx6xhy yc SzGz|#}^}7{Z}{gUi}{HO~{$H~P{1AR~{{M:i~{d3~{,~{%{|4{z.{\2{ -%|R"|}R]|OY|?T|N}~G}k~@f}~9K}~2^}~+o~~~$w~?~>~r~"L~~A~~w~~u~~\n{XY{Sa{ƃ?M|F|_?d||8-|.0})}D#}`D}}Ȁ ~]b~!1~T[z^VzmQzLz4E^{B>>{f6{/|,{(T|\!|oC|~} }c~,~UYy,jUnyCPiyk:Jy݋D z< =z5{.{Dv&{v{@{=|vq }`S~D~4XxUTxKNxjI)xʐ=By:;yʎ4az(I,zf%6z6ozz{P S} } ~AWwoRwMMiwWGwAfx7J:x铲33yM.+iy#yӑX'yя[hyX{u |z}P~cVvQvZLvVFev@wz:mj7φn<0Ćn)ʆvo#"pVmq qՃr6s@tw{uZFnUnOنoJuoDo=},pm6q0q)*r("\Jrs 5,sSvSjvN}vnIgvuBgv;τFv5w.9wC'owr w[wZx& >xXy+rzn|J~W `zRŃ{z2MzH/yAȃy:ރz4[z*-'Sz2&q1z; zEzNz ){|{~Z|}UՂ~$Qт}M}Gq}A}:}~3#}i,-}J%w}*$i} ՂN|7}9 }%}V~6~sTGPLFN?X92 +$GO >v*7, S>kObJ}"Dဳ>\70ρ)@3"ށ<q q  pk Q}MBICي,=\6S*/b(g7!lg2Mn 6%=P~Lz~LGB&)<j95.bۍ '+ . ފ&F? ڇ_&O~K.~XF(~r@~:~֓94H;-Bi8%cgS% ~É8 }~Qc~FF/N~,FI}-D}ؚ'?q~_9q~c3~Ř,$09o }~ ?~> +}ކ,~VƔYQZYK[AFɓ\@播^!:ב_41a-F6bU&zc YeAfތ hjjU NVkm:pzuU/\P]SK^AFC1_@.`:b83Sc},ojd%eXg>Vh3Kjꉁl' ̇mWoUrvT_O`SK*ta)Eߐb:?Nc`9d2Ύe+~f%1gōijŊmlI{m hn!p|swqSc(O$^cJF,dEDe?If9 g2\g+|h$ČiVk lcQmo3DpU|qBuNxT0fN֏fIgaDj_h'>]h80fi1j*tkd$dlGu8F\uAgu9;IuP4u.u'͈v!dv7q5vyvwr x̅Wy{&|zNcyJuxEމx@,x:x4&x-ix&Kx xy ·>y*Xy z^{|B}M|hI|CEH|'?q|%9S|3f/|,|%{{!{{|yƅ}}l}M~ILs뀚HڀtD>ր`>ꇽ8퇰2p+^z$܇\Hv ~l~ h~w~p~~~K6G+ЄBԆ償=܄971T냥*{5#ׂ;`ԁM c V#p-*IمE؉A}S/:75!V.~(?~!|#= Uwwo Qq >ׄ߁6G|Cdm >Ԅh93܄-' BVA  j-ԁFFq B=p8pN2M,%󄹕R<쐠䄙 mf ́F@݁hLY]G]ZBZ>!\98~]2▲^,`Y&$aEbRdV`enCg iIk1mrxKf=\8GX\Bؘz]=՗^8`321ax+b%Y`c d%f@gni kҋ;lш)otzGJ_8F_B`=Ua7ޕb1电c+d${efhBi~kx Bmyns|q?u{J5bmF!PbAcK<#d67[le&1f&+Cg$gahV$ik[m& n}orv{JeEf@f]<0g(6`g0Ӓh*i$2jVk3Ll8m8=n pUHqt xB~J9i,E]i6@$ij;pj5Qj0&kv*lE#ll+mnnB o [Pp7q sDvYyl~I%DlDfblz?7l:sm4Zm/|n9)un# oF֏Lo؎pC* p rgNsucБpo:pU4|lp.Ïq(?q"1qr=mr"&s< ltukwy{G&sC su>Hs\9s3菝s. t'юtX!X_tvMtˍouŌju mvZx.y{<|E&w&Bv=ҏv8Gv3Yv-N|w & wJ mwCiuw_ w2x pyS؉Qzn_{|~ DzA8Sz=&zp8Lzy2Zz, z&z|~zVo1zLzZVyz {E|P}})C~@"~<#V~7Q~k1׍~P+~9%N}g;}E} q}m} %~Lj}k~~?e~Bj>ȍ]:܍/5i0J*!]$vɁU)6 wB !ƇrbBA4>=9x4ׇ /B)YU"󌄅yEԃ ljゾ ]ZK?ꌄ<+Ny8%D3j V.(/'^!kSTI hya"tV>:싌6⋐25k,ӋcP' lC8,3< 3чohxnJW=chU9C5g1s+F%7ZɌu_ \*ՆF~F+X΀BX>sCYT9ꟛZ>5s[~0Y[\+'^%M!_e$t`QacAd @g ⑽hpjnu]|aAJ[l>J\:T\58^$0)M_F*0`}$šOavb{dcdIf liej lipv}A:$^;=ԝ^:_5u`0a*vb$tcc, d3e}f"h b{jFlIOngr x%~9@a.=]Sa9Eb4Ϛb/c*2d$Amefgq[h jW ZljKJmpXq:q[6>q21֖-q,q'r#!"r}ߔrCr?Qs_ etv/&wey({v ~=-t9t5Mt1Qt,*u &pu@ V=ul;uW.usv w!xz{<|;햾x85xm54xr0Ǖ-x+x%ĔKx|xxw4xpx G4yx{ w{y|9}:͖&|7㕗|4;%|/ʔ|*<|{$ԓ|p|.{<{-7|F |}@}ge}~9ҕG6ρ2┋.z#S)`"#~z&߀: fn eՍP,f3$-85pB^1)-8("r;df-҄uΓhf 3 aÀ7'w440I+X]&3 !\IWOڈ h ϑ]qYoу]gv=52`/h*ʒΐ%Ə -'T5PLڌ6ѓ o̅'Ԍ@~4n[1cݘ-M)=[$B(Րn a ar+Uσ(8SWS5IX1X,Z(;z[Y#s\S]^x_+a  ceĕ@h 2k p1yL8Y5~Z1V[|-tY\(N]]#G^k`if`ߠ a s3cb je~90gnmi ~m(rAz8\z5 ]1']-J)^(H._#3`Ja8bEc 9Ve. gF/Aibak ns{l7_*4_0ע`',)a'9b"ɟ9c$cdkea wf i.^kemI 2pt|8ơbL4bt05b,,c'6_dv"CoejĝfGfJg ֛h F jlZco rREvN|8e!3ke8/lRe`+Jf &kf!gG3hQ@hܜi j slܕ4n1p t5"w}6h3h.h)*]h%ƞ io! j?jӜkIrJk >fmnups Rvy ~z6MHka2kL.gkN*Ak%3lT hl mg@mƛn יoD}pr ukwzvW5|n2Ln.n)#o%-oU o:p*p Ep gq?s ]au`ܐxwy{4Kr>1)r-er)re$+r[r}s /rLsV txux^Hzy{}q3Nu0Xu-.u) Fv$#vIdv[dvTIv v ghwxnz]{[|~1y/lz,EKz#('z'#FWz:ƛ#z$Gysy ޚmz ՘zf{|ZK}} ~1".NK*&ۛb9""~A~G~ D7} 3}s}X~NU~~~0 l-'˄)c%c њqJeɛ -Z_._bP+(-$feЉOpxtj蛇 ~\*ِ4,˜{*;o'1#.[kЍx!/dz =^3(s@#+F3(⛿0%Q!s4뒅m!`` Rb ZfLSքB&wxSHbiXpsc Zc\d^ꆟe-a[|ecjqfebffg\gniRh*kGi|m;jn/ko % k\pUkptm+qtsI&]<`]bZa]d@_2f'`Bg{2aZippbjfc+l\ cnR"eioFgp:haq/ir$hsiutktvv9WiW>XjYk#[\k냰]ly^mo`Nne/ap[bqRPd#rjEes:9g#s.gt$:gu>ThujvXvtx:TJpFUp#W?pkYp˂NZq,x\qn^rLdE`sZ|"3c|e{ 2i|xj|kP LoQOyRy~Tw~}vVe~t;Xz~ojQZ4~j`J[~PV$]O~K^}A`~}6b,}+b}!}b}d} j~% y.~$N\O׃+Q]S|U)s?WF`iDY4_;ZU\%K]Y@_q6a+Ea aBGca 6kpys6;L퇸N\ԍOQ…{S߄rQV }hMWׄ#^'Y^T ZVJ&\‚@6^bh5o_ق(*` _灞b&Z kyKX֔L匐N;YPY^zRq`TgAVr]XRYSI2[?r]E4^r*d_ _Omag' lq)sz1 Iޑ `KPLONٍyQ pHSG fUE[VQXBHZ$>[ۇ4@]S )]p^;`V -m. z LI`3MJa:KvC-MxO^oQdSZ_TPoVGXfQ=pY3[Ɖ)\]|_| Plo0z%J*u\K#rK̀MwoOkmQX"cNS XTKOU#EWDO<>Xs 2vZB(Zٌ\jU^4 +m2=-z#YJr2KG ^KϤMv7OlqQbRWqSΚMUDV:WŔ1,YJ'lYTy[_ o%|]JאKl(Kc.M;udNkjPq`RQ\VS\LGTnCGUڜ^9Vۚ /X.&Y[LbHq~oJ¶YKq8XK~M;`tNjPg_R8TRuJSAUH 8zV".W6$XZPds .seUXÜeZCf4\ŒEf^iga xh;c=n5ie)cixgJZji7Ojk%Dll9m m-mo#fm"pHm'q o=r]vs `_aa bb֊c'dZdf7w dh:le"jDbelYflmNgoOCifp|8wjq-k:r"ksXks [mtwx|vjEZh&\hܑ]i,^jh`0kualkbnaco@XdpMfqqBhr7iSs,ity"Hiuoju_ lvEExwWWnXnӐ/Z o<[o~]pt_ypj`q`bbrTW*csPLe&tXAfu6hu,>hvS!hUviv kw1xy@UtpWsX3sZ t|[tGs]ti_puA_`uUbrvKdv@ewT61gw+gx9!fg}xivx kpy~yBzUGxFVCwWCwÄY w{oZwr[\x%h^lxv^_xU'abxJc!y&@'dy5fy+@fz& fzF>hz< 2kw{y{T| Ux{/Vc{$X(zzYzq1[{g]{F]^{7T,`i{WIb%{?c{4eB{*f| je| g| ml|b}4Ed,})d}d}f} m~X{2~mEQ~5RhŚUārxWoNYe[U[\R^->H_=a3c )@cyc,(e8 m{[kTPӏQ)RuJT|wVgUnXXdZ)Z[NP]G^‚=@`h@3aׂ(adade yn^n{8N`OĊcQ I*SwU mcW>]cyXYZKgO[F]W<_?2`T(3`aQc& UnRA|4-M(iN:Շ\Oy Q3uSJl@UNjgbIWrXAXԉNnZ?=E \!x;]臗1_D'_Wz`dyb Vn|O LelM4N+I}P<tRjTFt`UPVW;AMX6CZh:\51`]؉'^ _WHaއ snh{2LbM6NW|pP5s1QșiSʗ8_UsUeVOKWϓBYt29}Z&0$\t&\$^Pa; Fn{M"MAN5{OOqQzh_S}^8TSUJQVUAxX8)Z.[q%x\;^9b; !p&k}M;ϋxM׃MzjOqQ~gMS S]TfRUzHVg@-W6Y1-ZHc$[WV]PdrZSt7gMcaMc*MYzOgpGPҫf\R˩A[T*IQZUGUڤ'>WGy5XgQ,$YZ*"Zb]V f!tw#hXphhZ6h\. i8^/~}i`^tjbjkKdr`kfmVlhRM mZj.B nZk6oOm+onU!kodokop- pqxBs6bdx^e_ eoadufXb|g)ds*gfi`hhx_i jWUilBKjxn@ko^5lp+YmHq lrt?mr 7o)tyuܛ_e_fō[`gah{c6iqd*kh5eel^}femTg1oJhZp@iq5k3r*ks WkQtDlt nXuzz$w\[lΓ?[m&\m^n zO`8npaog5c;pi]dCq_SerPIfse?2hyt34Vit*jeuj uel v* mxwCzx{XrYr`Zr0\ry(^'so`sfBat\btRd_u-Heu>8gevz3hw )iMw}uiwk_w mxzz@Ww2)XvYv[Gvw\vn^w%eC`]w{[awRcGxGdxY=qfZx3 gy)(h^yrh@yjy mz{w{'WK{ WzAXz/rZlzv\ zm^z=d0_zmZ`zgQ#bJzGczPzwRmSduUZzVP|WӘGY>VpOWKpo{0}|dY&}kY|Z|py\0|Sqt]|ho_q| _'`|Va|Lc:|C$d|9Yf/|_d6qa,b>#qb߄dxfTs ^L3sR/YRԒ@|SNtU}l{ASsmU GjVaXrWYNRZ3D[ <=\֎B3^k+(` "`يuc 1eF8lqхrD}ހچRGtRySrTiuV`CWϚVY"KLYCzZە:\2E]v))^Ɛ!`brnfԉWs8%=RLRuxRq)ThIU_Wa+ i2*u&RU|RVx>Rk7pKS٪gOU4^V楋TX JXW@YS7Z5K/~[F'\јfL_)ga. vkd wfmWmY;n [}_nb\tn_kowabp bYsp~dOqfFJqhe;rkj1sk|&sXlrmtn! 1toMm{qk](kN^Dk_|4l=a!splbjNmda1n>f)XngNqoiiGDpk:pl0,qm&3ro Lqo!sAp: ksmqd}sȏNh#b,8hbi czie,r0jfi&kg`l9iIVljM_mikCmm9oo/ipp%pPqoqqr )r`s ~/^t~_sw3asnb|t7ed t}]eEtTHfNu[KguA*hv:7kj'v-kmw<$>kwul wntwMry"zw]]x]xC}W^wu_wmaJwdbx\d8x!SGe@xaJ ftx@~gx6iy-jxyi#Gjyvk'ym~ys!z{ш\n|E]{|q]{bt_.{Ol`{cb{ ZcU{R dP{Hez{/?f{369h"{O,iG{"in{+j9{l7{ysk|C|[[>{\~t^~|k_~'ba}YbQ}PcH}Gdp}>e}5jg#}{+h5}"Oh }i}oj}y;s}y}DY[Zz[ys8\j^@a`XaAOb1SFHcR'=d4f"+:g!f}Gg8i$s~~ZX_Y?fyZ)rh[Aj]N`^Wy`N8a5Db e?]!7&^c._X&`.bh5d jfv郢U^yUj s0UkWc+XIZ6YԝPZ-G;[>\U|5]"-^5%g_eaސ5d~ kx8U/xU*Fr5UHjVbWߥYY_OZmEZ<[54e\N,.]<$^adB mȇIyxpWrpXpZwqS\uoDq^vfr3`v]rbITsd KsqeBbsg8tiH. uAj#u{kiulvOm/vnP~Lp(nP\Pnz]}n^v}oW`{nob/e]pc\sqerSq}fJ~qhxA rj(7 sZk-sm#JtLntnuov}p'r舟ka,la|l`c uIm!dHmmedNng[qodhNRoiIwpmj@q lv6(qm,/rn"rorpimtpZu(r/thf,iQf{9lrQ4ms+%ns!oNtr8otqku tvB xw!b]rUJbrxcmr"qdrVifragfsXhasOiMt+Fj=t=pkWu3lu*mv mvxHnpv&pWvju3x y烪`w }aFvwavopzc7vhddv_evWg$wNhwPF i wzU)Ok5zk1zllz nxzu{|"R^~{_=~u`}nah}efb}]d,|U?e,|Lf |Cf|:h|2 iE|(j|:i|k|n El|v5||9]k*z^yu0^m`[ea)]c(Td,K3ddB]e49g~1JhI~(i ~h~jG~D k~Kvu}}\=z\%tQ]DŽl_9d`r\bRcIcт=@d8fy0gW&'hhOj5 kov/~}Zڊ3x[zes\Kk]ψc_?HZ`QaHYbu?c^7dQ/f5'fEg$if` jBw%|pY wGZqZj"\9b]YL_P`)F`މZ>3a6b쇛.Ndk&0eif$ph LkKx wG{Y^TuYoZ h[x`\#W^'N_E_<`Y&4aP,bQ$cjeOg k慮x&yY tpYnsYq7gZҙ_\Vi]eyM=^[D^;K_r3'`E+Tas#Tb`.dg% mTyOxXɤ/s[XmXΡ3eZ$k][UU \K]B^n9^(1_7q)`8!adr{Yg o3/z%xHXkoriXGkXh7dYR\pZţmS\%J]JA^]nN8]˝0P^<(w_& aHWdsHg "p&d{tV~sXxtZ,qtj\it]aEu_X|uuaOucbFve> vtf4vh*wi wklwkxlSyQmep#Cq[}q]wq^Rpr_hsa`&scNWgt dNtXfEEtgsp0tp[tqq uqw}ruWjEj~zdjjsjjmkke"llc\nmTnnLo3nCHoo:IpSp1 qNq'rBrf@r8rss ?sswu(w fphyJg'pJrgpSkhpdiq[jqSkrYKIlrBm}sh9XnZs0@oPt]'otouF=q}u< ruxw&yN}zdu@xeFuqetjfubh+uZiUuVRj^uJhk/v Alv\8lv/mv&nw4$nw`pw@ qwxSyz|cyvdyNpdyiexb fxYhBxQi6xI0jy@jy27ky+/lyC%myqmyioy\ pz'ixz{zby}huc|oc|hd|Ma%f5{Xg_{PyhE{Gi{?ti{7j{.gk{%;le{lq{n{p >o| ,x|!|]yabtb 6nbhdw`Ze3Wfn~O]gT~Fg~w>2h~P5i~ -j}$kp}ks}mm}e ni}y<}J}@y `PKt,an+a>gNb_pd&KVe^N)fDETf܁B:d2#e*fƅ"gik{ Knrz3zt] o]Ti]Œb_Z`lRa\4Ibz4A9b-8cZ0dv)!eT!re舀h(r:j oXzs\^nE\ɚ'hR\aI^GYx_M)Q"`H~a~?au7bWC/bݏ'ccdጵ gjqV|ru\Xm \])f\:_]o=X^sO_TF`=`(5ha?-a!%b_SdiNg8j#%rH|}$$q[k[ҦsKn6sou-8tDp\$tq2tqv^q vr{tvxkn5slnllnf mn^nnoVoUoNpp}Fpq >qAq55qrE,prr#qsGsfCshsGuEs ut{ vDx}wIisbqiskj/sek+s=]cksUmsMmtfEnt=@oVu&4pu]+pu"q`uqv#tv tw{_xYzug2xpgwjhwxdiw_\jwBTkwZLlwDHm9w;mx3nx +Podw"-p.xB(pxks xd asy[{z4{Ttff|of{ig{Dc8h{[izSjzKhkzCl(z:lz2mz*ntz}!ozoz1rz (r{Qy{{|'seqnnf~hf~bog~DZh}Ri}JNj}Ak4}9k}f1l},*)m|!]nA|n|q| r|H|(||sdvme_h5eafāZgׁQh逹Ii@kjP8Ejǀ0k)klQ mGnG~p~q~I |~ }qc0lcWfd_`]exQXfPkg;Gh^>h˃|6ir /jm(Fk` &lm*]oq|V~p+aΌk#b,He2b^cWdNf`FcaĐ]bݏUscˎMVdDe<%f3fq,lg%!gPvil `nYr^}+mM`h`b`햵[zauSb9KdCMd :e /2eZ*e#f haAk| 0mt tY~ml!`f```+bZa"RtbJ_cyAcߗY9\d1dQ)yd"dΐgkB 8m@:u k-_e_s_Q_NX`jQ aUIIbq@c8cF%/cg((c cg8FkbN mgIww{0W qp{,X3k.{*Ye {-[L]{4]&V{A_M{U`E{UbN=`{fc5H{e-{g7#?|Oht}|i.}Ai V}ijit}kotxZox[jqy]dya^\y`TUyaLzcxDzdyTF^ny>qo|y6py.py&qfye'qyJsy otyuzss>{O{ni~hj}bj}C\k|U.l|MAmd|EHn |=8n|{5_o|h-o|9&Vp|{p|rM{ Cs|(u|8[f||m*hgi6b$i܀[j7TIkLAlvDm|;mO4!n,n~%o~}?p~Iq~ r~ t}F}}kgvf|g`hrZeiRjdvJkABk:lJn2lԂ+|m$Tn6 NnՀqv r Iuj~uif0pdfu_ gXgVQchᇰI{iˇAEju9jԆ1kHm)k焦"lzJmzsrp lqV"u<yhIe`c-e]ieWfOg"GhP?iRv7i/i㉽(^jLo!LjDlgBoWR plvgdad[eUehNEfQFgS>^hUf6h.'h&h`iGIkʉnΈk pJx2ed`XdEZkdTe Le՗Efz.p~WKj~XEd~Yw^~[!W~\Pg~^H~`b@~pa8~gc}0~[e%(~^f"ghHh]i3Nkomt|Zh|[c|\]}^YV}#_OC}2aGz}|f6|g.{i[&~|Mjh|k)}k d}p~{7Cq3~Z/q~9(rS}!r}ms]}7uV}f u}Px}}~ekk`;leoZlTHmMnb>EZo =o5oq.Rpu''Hq Aqs>drEt @t*x?c{j^vj Xk^Rl4KlYCm<*nOc4@n,og%o}oUqs t@yyaiŽ\iW1j; QkRIkNjBl:m42mk+*m$nu*n=^pV~rq s׃:z,`h[ZhcUi8OjzHtjAk9Al1Cl?:)l_["lm 5oԈrrIs؅{_gh6GYh0ThJN iGi•?j7k /k=(4kE.!2kUOlFmo Pqt6#|ȁI]gDXgExRgDELh0-Ehٛ>viF6jA.j]R' juZjakҐKo֌Q er1XtO}̀iKWXcX:]YFXNZQ=\J^dC'` ;ma3c,|d$Ikfgvch |in jlqfbZub[e]\WD^ P_Ia&Ab:Vc2e?+ef"hiTj ykf~lopt!eg~]a+~^\X~_VaO6bZHYcA0dd9jf1WgL*85h"1cij:k ~Wm}n*que)}a`}%bd[}:c%U}zd$O}e0G}fC@k~gQ8~#hD11~in)}j!~:k~`l}ms }%n|orve{`f`8{rf=Z{fT{gM|hZF|RiC?|j?8|k0K|k(|l }mQ}=nQ|o $|hpH0|eq[tPwdyj _yj YyjKSzDjLzkEzlR>{m+7@{Jm/{n'{o9 6{o|pU|p {q{suxcwn^jwmXxfn,RxnKynDy_o=yp46ezp/zMqK'zzqzr{rx${Yr zsA{uwz,brvrR]TvjrWvrQw>r$JwrXCwrx}%j{}Y}]pĂNYq*SqxMrJGr ?s8Gs0t u)tq1"tu&lvIH wGx_|~~\o+WsoʆuRpLEpEqH>Dq焵6r@/\r( s1Z!6sZs4u vہU&w}fZZnzUnPn\JoCp gOg ׂh7jJm@r_ 5ZCZ[,V0\LP]J9_9C`aB9c*;],d\4eq,f%Ph iV%jXk ހl(nLqv]Ba,YJaTbOcHdAӁe:f3@g+߁h$i3mk,Ձl5Հm݀n)'`osPw]΀Ie`XԀ2eS/fM4fGBg@Vh9ci2npjY*쀚k1#ʀl0nm!.mron~oR~^qty ]5~Ti/X:~niAR~iM~j/Fp~j?~k8 lf1)m*vOm#&bnro'o~p}q$}s_vvz\c|mW@|lQ}m6K}QmEF}xn>}n7}oV0}o)~'po"~Npz~bqTQ~ q }r}ss}hubw{.Z{6qV%{apP{pK{qD{|qM=|?q6|xrW/|r(|s(!}*sy}_s}Qt. H}zt}5u{}awy|RYyu"UztOzhtJCztCzt<{u5{buf.{u'{u!D|!vf|^v>,|v |wR0|x}Hyc{}XSxJxTxxlNyxEIUySx6ByxC;z xm4zZx-zx'-zx {1x{rx{y B|Hy|`z}3}{x|pWwS|Sw|_Nw|HHtx| Ax}|:x|3y.|,y|&%y|z+{zk{{{ {|{{|~}C}UvuQvPLv&G'w@w]9w2x1w+xJ$x y~dyJ~bz~l z~V{~~~TotVP%uK&u5Eu?1v8Xv|r17v)w@"w|=vwx4oy뀭 zg{+[S shNsȉIs~Dt[=tˈl7uW/u͇z(v!uv;gvKxwU(Xy+> "y{,QrߏMIrǏH/rȎcBs3tyS4{'tPq!KqҔ>FquA r:r4as'-2s/%sus"t6v wJxz˂kOpښxJpEpT?p9qme30r+r$krĔBr0secuvK vmwgGyYUm7|m1`lnc*sn#rouoYop},qs or3s1juxi|YS oN0oHQoC3p=YXpB6Ep0q4qJ)Jq#Xr @rt^"rCs 7tu@Hwy}QsMNsqH2s^Bsu<0s6 -s/(t>(Eto",ZtEtƀ2u'u Zv<wxM~y{g~P~wZLT~wG[~vB~v;#v5);w.~,u}[}%}} }}}}F}} D~Q}0~r}$~~~J~LzoHnz)C{8>{^8}{:2|+3|J$l|Q|ɀm|ƀgB}, }~<D~wK-y=GyBz o=z77z0{!){V#${co{ʄ {ǃ|v |c}~Z7Jx{ExAx+;y5y/jy(zX*!zzzއH{ H{S |݄}́1HwDUw?w8:Ew4Txj.!x돞'myP* jy@yy1z҈ Gz{'{ہGv[C vkR=vTk8vЕ3wZg,w&&xGxiTxCby0{ y' yky{>PّVK:WEhXoAY;D[d5Y\.P^v("_!Ѝga+Ȍbed*%fX gthj lIo{tO-YJZE[k@ \:^4g_y-Z`'?a njcdfJ hX ԆjY;We>8sf 2t3f,(g%hZUijk#mn ^Bnb=pT/rvy|McgUG≞gcBg=~hX7[h1i+wj$k.Zkl $m Zn jprtw} KjF%jAkDŽy<9ƒy:3y1-y4'y/ {yXy y yQ zvc^{:ȁ|R|~wE삶}&B}=ɂ} 8|2|,|&|x?|[I=|3|ł|D D|x'}B}B}DnX@Oh+cD%dGkae^feg$jh ]Ik-lmyho r)u{:Duc?c*:cz6dL0re *e%hf׏=gh_,ZiJrj "lnCplt3w}CfK> fS91f5UgH/Kg*3h$nGixE"i]j֍bk~Tl ^ n{pVru7y~`Bi=i8i4g}jf.ݎ4j)`ko#?l!lÌl m n ʈ|p"r/@twVzPFAm~=JmH8umN3>m.m(׌nW"Cn9oowxo lq rytfLvy{@q;9w:w6w2Jw, w&ʊw qwws*wfw ߇Wxކyz{u|<{]9{N5{O1 i{9+‰Z{#%܉Y{{Ozwz,qz>z ={Dg| &T|})}r;8$4H}/:*k$~s~t5 ~5z} } "}~~T~K~4y:]鄇6ɇ82ԃ.H)փR#`@fl  1$i08h_H85CӉj1w,È'Ç"`Rlp- )l7wzn_CP&27n3*0)Y+&q@_ цׇ v|~։ `AD,69ޕ2.1%*VoA%57'8] n5 ߅#R[&?,.olp) Jq+ *Tr苓t|AhvZyz~6rg3-er4/Hr"+rW&frq !rrMqrlGr sӌul9v̉xFz{5GHu2Wu.ju*|u%{uuufu[wu v/ewӊy5$zB{%}+4yH19yI-ya)pKyO$yC!y'Cxlx x wyzhe{gˈ[|E||r}3 }/ },X }{(}E#=}||zb|< "|o ͍3||}K‡}}~1ԏ.3+Oj&Ž!܏wi~ u+ T4I%Ru(rDQ"0+d-~)ć %ks p0 `lhȏ Z[ف߈v M{.e+O( $$ԌEŠ+Asُ. <FĊg5xEƀ'-' *[&ލ"Tm#Ì ߎ_W ꆨ„r6R-~2U/%&U+V`'W"[XY/5[_P[ 9] _K˙ardE^gUjpx{~2W/ZXb+Y'ZFZ*"F[+\7]/֟] N_ Ϝ6archafNic5m1s:z#2 Zv.PZ+=[q'\a"P]QꞦ^Np}_3_ ` *bSe%]hknutz1]9.N]}*F]&D^!0_`yGpaIa |b bdJfyi3lpHu{2v`R.*`_)y`%ĝaZ!1b-bݜmc>d ћ^e$ 3 fhZk6xnxrxKv|1tkc -xJc)Rc8% c TDdeHc|e盞fP XgT &h&j+qmp,ptJx.}0Lre,Me(+Mf $Rfgg" g˚hOeh +aiEjy]lo'krvy~/iC,Mi-'-i$$ixQijdjj vkHTmacnq#u:wz.l+|ln'-lL#lrl1mT[m?q;ۏOt1Iw1y||Y-o*o'o#Aoohpop Gpr sqv]yDz;~",=Or)r&r"Ęls0 &s@Иs.r A.s [sԔBtlv䎧x$z{VI+(v(v%Gv!×v#vΗvɘ^vJ vo?vDx.yy{zz{D|d~:*Bz'%z$R{ ekz̗rzzJΘ"y ٗizE^Dgj_}iI``&kHW-`mMbwnuBd!o6JeTpf+.eq, Veqggor6 ls0zuTPgUh0VhXi}Yjs[gki]l_^In^V_toL&`p@bq52crq*Hcscszf@s "mAu?{w IPnRAn8SnUtn|Wwo4rYJoh[+p^\qlU ^+r?K_s=?aCs4wb|t)bu1buI`eCu} mv{xYOEs aPnrQs"Ss.zUsOq]Wsg|Y|t<][2tS\tIi^^u>_v3a;v)3ayvawdwE n!xir{y+Nw OvϊPvaRvy!TvpVw'fMX_wT\~Zw^R[wH9]Fw=^x<2_x(x`Gx a;xcx >nz|mz MzKNzDPyQywSynUyeW}z[nY zQZzGh\%z<=]zzT2@^z'_.zi`zc3z o{}:{iL}MK}rN}P|vR|mT|dVk|ZTW|PY}|}F~[|t<_\m|e1]|s',]|y_v|_Ga|b Gp`} F}| JFhKĆM**~O+uQlSPnbU SYV O]X~EY~;[G~1\y~v&\Z~ci]~1a~, p~W~*}Γ HōJ&K~~M uOkQLaSWU N0VyDX; Z 0["&DZـT2\ b:qsu~~?FdAHmɅuJ6}XLt5N:jPs`RZVSLU6>CW4:FX߃0/Y‚%YЂS[c9VqfSzEP~F:}Hrx|IJsLiO $_PȈU^RKSeBU9MW3/.XC$XfZzwGdtrX]CؒDĂFozHqJ~hDM |^'NŌSPJ]Q| ApSR8.T.V(%.W 1YE]dr:rƒ׀C;D܁DyGpvHfK,\LzRoN`IOkH@XQ77Rm-oS֋J#V3X)AJdPrcgQEZDD%bDѢwE[ xGnHϜ$eJ֚+[]LS\PMU GNy?6O%5Pj,)Qv"TW3ftYDE EħvG;mHadNJ7ZLRCOgM*F&N1e=Oy/4Oė*P0!8SgX hPvKD>EPsEѮbvIGlHcFJ駊XLyߋQ$yRAy=|Sy%sUySjWyoaYyX<[yN\xyD^-y:]_z$/`zY%`zbz[e[zqL{~x|DN}3eO|Q+|X{S|ErT|3iV|.`bX|?W Y|M[_| C]|09^y|İYK#%LyyENpHPvfR]TSIUτ,IW.@Yj7vZ-[#\ V^=eY;sӀ|H-Iu/#Jx"LoO ReQZ[RQT#HUv?WK\6Y,Z$#,Z2\ㄆ8f_y t'vFEG}~HvKmMd>ObZ[PPkR YG(Sb>uU>5V舭,fX#6Y`4J[3fhVt !EFf:}GsuMIvlAKgObMXO'NP9EQc=KS.4GTF+)UB!Xj}Zf^#sFyWGq|GsI%jKC2a}M4TWNM{OyD`PH<Qۓ3R)T W+Y h\uĄKFĩGR{ G^rIzpiKGI`5M*>V7NKO+"BP:Qh1Q(sSVDV2[ jwPFưG@zGrI+hK _LTN;JNޣAOgJ9}P{0PP!' RЙU^, dlчyneV/eWfZf\yg2^^og`e`hb[i^dRYj(fHjh}=slj1lkH'-lljlm\_mn; op0n}rEa\Jb5]tb_=c`wTd@bmie dcefZ,fhPfwjG=glct.du$dufv$hv{zqw~yS(u-fTuU@tzVtqXu/hZuw_6\uV]uL_av\B`v8fbbw/.0cw$JcwpeOwygxIr]y2zҍRx釞SixTtxZyV xNpYWxogWYx^#[xU \xK^GxA_y.7a>yq-by#bydy g6z@s{A{܋QJ|ARP{S{wU0{oJW{\f9Y{Z\Z{@S[{KJs]2{f@^{r7`{,a?{#ak{?c{[f$|  t&||OP~R~vS~nhU~Fe(W~[Y8}RZv}I3[}?]d}67^},X_}"`-}b4}f}t}}uVNՄOHi}Pv1RimTgIdVcZW뀝Q5YhGZpD>\ 5x]+^"^^`ugLpu~~C@LAM|OuyP&lSbU YXVOW;F}X=Z4\eB+e]W!]`.obgȁhu6fQKJkL{M}tDOIkYQTYaSXTNqV|E(WT [vn~] h0uMG1Hѕoy(IٔqAKbhrM_ OU4Q-KRBSb:TԌ1uV=e(WۊmZ\ш3 hXuREBH~UI5qwI(oKfMJ]OSPOJ QdZAR<8S20T-'aVY%d\ jjWwHا}WIg(vJnKeM9\ENRxP8HP?Qz7aR.SEo%UeXPo^b lm0xHŮ}IBvIЫQmK,edL%[NQ1OߣaG!Por>5Q5Q-DRD$UWȒSa%W `nzڂ}h]UhuWzhYu}i[ttui]jjQ_akaXkcOlQeEmg:jni//njl$nknNlp*m$Zqo)~q d[eD\ɄLe^G|/fQ_rg$ai5gck`he-Vi6fMihDjj9Ikl.|lmc$[lmn{YloJJmprqtP'`a` a*bKjacbzhbdq>cfgd;g^qeiMUpeQjLFfmlZBgcm8Uho -ip#ipjQqclq}scsAuFZhS[i$\ix^)jXo_k&f`lQ]famTcbnbK5co_Aea\x,4bx+d0x!dry fyi yqu'z{4T?{G0Uz{)V3zsWzk'YTzab;[zUY?\z@PU]zXG5^zs=`^z4:az*bz!cOzsezh;{_9u{|aR~S~,z$T}rVy}j"X.}GaY}W[q|O\|E]|<_4|3g`|)a| sb|d| viU}v-} |ׄ Q R=ty7SeqU i$Vր;_XVZ1M[*mD\[I;]2_[)\`Q~`~Tbc~ Vi~v~3}O?}PxZQpSh0Uzj^WhU}XςkL&FYP\Ԉ_> jtvу~&K&xK朞rLtkMbO{YeQA ORolFS$g=S5WT-U$X>an[|^ lWxi }8KUdwKqpLoiMʡa OKXP뜷NQER<S3S+T#TW4Zz)al: n:tz/S|K*GwKpL0}hMv_O 7VPM:QxCR:R-2cR*/S!W.erZ #c܋A SpMGS|kUkik4W kHXx>kZojlB\f.l^]Om`TnbKgndAoOf7.p,h3,Bpi"pj0pkrrTl tmip=hZhX[~h]uviO_nj `djb[kjd6RleIxlgc@mii:5nZj+uo l!nm"o)m7pnnGunp0s/d_e9`|eau8f|c l}gkdcThJeZ_i gcQfi}hH6j3j6?jk5km_*lnx lpoZ4mgo)4i#p5*jq ~iqkr mzrusvK[pl\kly]Qm#r$^mi`nUaanXVboOcp}Fweq"4~zsOuPjcp QhS\`U&WV,NeWֈzEUXbNz5ciz,d|z#ezfzhz ^n{?z{{lxOWsXEn7Y~g[a~_Q\~8V^Y}N_k}E;`}<`}q4b0}>,Fc`}#c}xeR|qg| o0|z||Rw4VyrWsmLX+fBZ$^^[BU]$L^)vC^A;=_3s`+bTd#&bd~+f~ o~l{a~}8uTqRUTlVdX[] ZTV[KZ\BU])I9]29_?[*`΁"]arcՁf o {]~St[S=moSjQUdc.V[]X4RYćIZ^@[78p[;0\y)A^e!x`$Bbe& ;pui{OrQn7RU[hS-aT㎍YVRQ9WӌpHJXNj?Y97YƊ/5Z'[^;aMe' pƒ>|9q`Q}lQDgRv ` TXFUV1OVFW>W?5WҎ-Xg&#Y7]` gvl n5?l~n,mqo"nWpnq=q]qt qrE|-t+vqwan!ruan\lbnedn^e_oJVfepNgpEhq$=Nipq47jQr+4k&r"5ks#wm-s|os @ptW|vPwv!_s8q _s k`s#db s8\c^saTdsMesDftI;+f^wc2gvnZgpts8jMfFmjfgkag!aKl4gYmhQniInjAoZk~9ola1 pIm](ApnBLqtoyrvo{tXo-u{prvqfl,lRfl,fzglX`hlXifmPjnIknA lho`8m o0mp}'hngpnq|pq rrV"t5sFubwpcJqQjdq9eaeq*^f3q[WzgqOhXrGi`r@ j?r7k sI/eks&l#slt ?ont# dq/ttuQwwvxnza`v ib=ud,cPu]d~uiVeudNfu|Fgu>hu6i`v".zjv2&?jv0kvfnSvl ovuw+yFzm`@yh~a1ycb6yK\csxUdxMexEfx=ag_%66J_P.U_'` a e0Hhq :m9w5eXʕ `UYTZYגT[M;[EM]="]4],]g%]؋ok`')cӈOg' oWxcXD^XY}Y6~S)Z/0K[C\;\3u\^+\=$\_$>bڌf pֆQzj;bWy]XX@XQYdSJ,ZMB=[N:A[@2[*(Zۗ"[XC^\jbhOyXq{qwTTlwwUfGwW_xXXx5ZQxe\Ix^d@x`8xa0y(ch(y}dWzf zf t{g6|hj9ooobtX!juFYMeauZ^v\LWv{]Ov_Gwa0?wHb7wd/we&x8g@xh.yh zi9 {9ilurn;r\Fis]5dHs^\]t_VtaNu7boFuc?ud6v'fX.vIg%viwGj[x1j\ y3jz knSt mp`hpa7bqb\r.cUprd,MseFFt fe>2txge6th-ti% uDkukBvlD wly mpuBm$nSe%gnedaole[fp fT&pgLqhDr#i= rj`4skK,sAlI$Ism)tmun+ |vmnxor2w kkif0l]i`cmiZ*mjRnk/KWo|kCp+l<pmn4,q7n+qn#yrodrpoAtp 2u8pwqtKx?igoVdho_&io'XjboQkkoJSlkp;BmJp;)mq73Wnq+Ao5q"or#Qprrds&rx ssyx*tJvyhet3cfs^gjsWhisPipsIXjvsAk>tF9kt2lt*Wm-t"wmtnu cqu ruUxv xzgQd xsbze!x]f(wVg*wrOh2wLHUi-wH@iwt8j~w0kw)wkw!lUwjtmw{ pvw~ QqjxT"y yzF|facO{adD{v\e5{ Vf;zNgAzGMh*zu?ihz{7niGzn/izb(jz5!fk/ylyoey !pZzy>z{p|eb``c=~[.d+~GUe;}NfB}F;g&}m>7g}W6 h}6.`h|}'|iS| j|k|:nn| o|ey|F|}d a_*aYbScׁhLdׁDeՀM0^F^>_6`21._Ւ'/_Dn `zc$'fɊ /k|4t|}h \u[wWr[Ş{Q\@9K]* D^="^Ț5j_&^-u^ %^'_擆b5f‹ l\,u(~̀zj{GT{eb{WU_t{xVYq{XRb{Z]K.{\=C{^;{_3{a;+{b#|.dQD|e2@}~e r}f<}gj)pbh(xWcxX^yMZ5Xly[Qzy]pJ z_BVzA`:zcb2zcl*ze"lzfWG{gC|dg |h|ilsdgBv][ybv\^]w<]}Ww^Px`=I!x}aAxb9yd!1y/e|* y2f!yh-z,iG{%it {j8?{kGn9tftG_bt`T\|uEaVfub&OpvZc@H"vd[@w@e}9wf}11wg)Gwi xj2xj"ykH =yk{rlpvXfrNd#ardZ[_s\dUDseNJtzfFug?uth7uih0v4jR(HvQkQ 7vl)w!lxm,xm{hnqwe1p*hS_phaZ+qphT)riVMriEs?j>sk6t1lK/_tm']tmvu?nS un"wowo{psxcml^gndlXo=lRpm!KpmDqSn=rqn6rroM.ro&sEpE s}ptupvwq;rvqx{s'uz)b_jOr%]djrWkqQlqJmqCnr1<`o2r4or-hpZs.%psSqfsZrss[us{o{: oqv{zs\{|{|~]es*Yf6SfkMgFh?Xi|7iN/j#(ojp~!j~uWk~n} pd}Cs}}Q}}i[c̅6W4dxQe/dKf3Eg =gۃ6hM.VhxY&h UhXjm΀Q oD tt?}.~Zb UxbȉoPcdJFdzQC|eNaә7bz0abŗ(b@ !>b'-xdOgW#jډ pyZbmTn]bUoXHYVRTwcNwdH+xDeA"xf:xg2yAhu+yiZ#yjYyk6zLk Ezwlzn I|&osdx`]tgXu$g*SugMv*hAGvh@vi9wWj1wkR*iwl"xQlQxmS%y/m ynryQo|qty\yrk Ws:kRuskaLtpkEtlG>uAl7um0v&n2)vn"Hvo7vox)o fxpxq}Ssvz[p=oVzqoKQHqo?Kr}ouDso=sp&6tp/trq(tq~!ru4qGusqJw=r+ wsxtl}uxm|YmtUun\t4Pbo1sJosDpst5qtY.rStz'rt sOtstvt vuJwv~rxRy}rXl;xaTrm xOpmwInwC o@w;ow4p]w-pw&q6wqwrNwUtw 0ux|vy!zz~XWkr{Snl'{Nzl{lHm{9B*n){:n{3o*z,Poz%IozpGz:q:zkszC tHzvu{#O{{|^VIjxyRk#Mk~GelZ~@l~9m~P2`m~"*n5}#np}jn}gp8} r} Ps}Mw},}h}9Th҃PDiU(K1iڂEj?$kY/80l0l)ql."ZlۀmMCRomq r[jx~~hRg"RNgIh_Dh=i[6j|/njk(j jn[k샶n pyrLyQueLftGf6Bcg;h!58hɋJ-i[&i&bhjmk oYrzۂPeKveXFce@fR':qfq3g,gؐt$gsgkiϋQli nLj(ks{Nd4JdeDd?Ye=8eӗ[2mf+3f#fE1ofoiMk Ent΄z|΁GZTaVKUJQ3|VvKBXE~Y?[8]40^)q`/"#abłFd +[eupfhltsX'WBTӁLXVPmYK|[!Dm\=сR^!6ɁX_/p`(@xb(! mcedaf1 /wn}7wn1xCo*%xo#\xpXy%pywpz`q #z/rzsv"x}R4sqN#tqIPu?qCuq=v3q6vsr&0 vr)w.r"PwzswsAgx4Ok-l 'lQl+l0o7 qH IrA+wLz~G i*BiF> ix8i˖2jf,j%k hjftlan pO "r&vr|4R`TMшuTHyVCW=Y57r#Z0ކ\)]#_Q``Նb6rsd e"gwimuPoVL]WH0YB`Z<̆=[6g]t/^(΅`"aO8bIdX f q'gXi@6Mkp<wlObOZKZG4[B ]3<^z5y_.l`(qa!]Pc1dڃ%fog iMjmmqxN]J^F $^@_:!a 4b#.-c8'e&d Ăe+Iyf]g&xin jklGnsFz4NMa2I܁)aEzb'?ec:c3ǁed-Pne&f 3dghixk7 Dl~mpt{BM~dI&2e D3ez?&f?9f2g,{h%π iPOj!jk ~l~Dn<~ orv'|L|h}H<}ghCF~h>#~7i8~xj1~kj+~km%~k~l~3~m~m ~n0}pM}qytdwl} K{lhGI{lQBr|zl=b|l7S|m:1|m*} nG#}?n}Xo}So}~o }`q*}rI+}5svy~JXypRFeztpA{p<{4pI6{pv0.{p){q,#{qV|q{q*|arW |}spI|nt|v5xYz~XI>xsEy5s@ys;ys5zKs/Wzhs(zt/!zt2ztQzth{~t {u{w|xz|.H,wwDowwk?xBwc:xw]4xwT.ty,w]'yZwc yzwKyw9yw?Pzw zx{]yb}z{}Fuj{Cu{>vt{9v{m3wE{M-pw{'&w{xzsx0zxzjKz z z3{x{,{|},NEsAXt+=&t7uOU25u ,vM~%hv~v~ldw~!x=} yB}:y}{~~:~jCrw?r$;sR6hs΃0tn)*t$u4uFuwz x7`Cy+Z&z(BpX>qN9q/4rf/@s)*su"sȇcsvtŅvuz v{x-{@oڐˊs[49ϊ+\c4].^'ƉW`!QPa(b%ceM g׃i\uk-nr|xFfK\B9]e=^8Ȉ_3(`-V@a3'$b@ ƈcd%PeZg ՃiXǂYkblosyFv`fA`<‡La17 b2Qb,uc&ld e^f g}7h wk5lnqvE|EOYc@Ʌd;ꅮdd7-e/1de+Rf%ge5h"S*hiÃyj 7lunG=p^sw}|DbegE?߃Dgp;-g67h`0s0h*i$j9jk0Ãk ۂl nzpr<uhx~SC< k-?k :RkE5yk/肫k)ln#klmDm57n/ o6 pyr>^stwWzR=Bo>+n9)n4%o/@^o-)=_op#3o_oYp+}p 8q * rt=vx{A~rd=Pir>8rF4'r].)rs(:r"FrĀArȀ;r s! wsqquT?6vxzm}@}u{yu;|ly|7}&y26}_yx,}yl&}yX N}y3~Fy ~cx~y ~y~zk~{|m}z.y܃C|>?S3;T6T2MOV4,蒚W'Y !0Zq{[\^ My`c^"eZhzl$"qyO>lV:V6FW1Y,zZZE&Ő[ ߐ"\,]ѐ*^` Ռ,bNe^gEj_nZt0{=Y:!Y6ZU1ZM[p+\&E^] g^G _Y`PbG |dgiD΄el ou9{<+\,94*\4K]0`]+*^% `aabkd& 9fWhj؃mqv-|D}r~9~~0-Ȁ$*W&(i!B*ˁ߃KyF <8ցflCE$/4~ދU,]~($ȉ؀M>fԈ~mu|4Uf1ΘV.V)FX$nY=ZSm[jj\E]Q _maVdgk\p?w~4BXH1']X-hJYj)Zc$P[r\~]r&^"4_P caF$c*fi{m qx~36[K0C[,R[(\#9]*^_`>aZ cc$ei&h; k'Znms(ya~3EO^S/a^+^'| _"`vOaM%)bogb ϒGc eXҍgej"mptz%X2fa].撟a*ԓa&Œb!c;%crd#e ce ǎgi l ynvrv{1d. +d*e%ݑe zf fg lg} h` Ti/k[Pntww|0hE-shP)vlhk%'h iidii PDj{lm-pj wsvq`yJ~/k,k(&k% l Hl/lJBljlo m?uznw׉p0rux zz9.o+؍o"(o $oWՍoaoUoBč~o- o犥qrDuJwsyF|r-Mr<*܌r^'r$rCrꌊr{̌r= qr, ΋r;stu!wytz~,'u)ы~u&⋼v,#v$Luuьu] *|uj bukw cxyRy{{~+y(y%]ry!wiyҊy}y,Ë@x xyRyY5z{x||O}~)͈~S'#~7#|~ }S}|}| | V|,H||q}~~C'r%`P"t>FׁJ @gh& b{mYyv&5‰#燛%!ˆU RLy7z v 5NqR݀$"kφW0׋Ċ a< A;`rb%6b!Mc4Kc-dadhd tefCh7"jndrAu7zs0'u~f5$fD!Nfcqff g:_g cj2;dj&dkdln@fmM rxnoXP\X^X_YayYd oZf d\gZ\jURU]vkI_m=r`n 1ajn&`ob$p dprr(sPQeQfKS5gTgwhVimWjGcYqkgYZ=m0P[nIG4]Foz;^p>0I_p%_ qh`qkdZrvsstՖM6l"NHlhOl%QmuSKmlPUnn-btW)o#Y XoOZNpE[q:]%r{/]r$]ks^_s dt5?sugv Jq TLq!Mq;}IOpqbtKQ]qjSr/a0U[rWWrN,XstDZ?t 9[t.\Uu$a\z#[zFg{Iu{ zpEG5~LH~*wbJ}nL}eN}\SP}kSR}_ISb}L?T}'6]V},Vi|!X|Y| h\}v#}{eCEW~xGRvI#nKFdMzU[=O,QPhHMQ?Svu5T/+{T~!gV~pX~ h~[v~|̉A]C}EkuGs0mIcK>Z MPcNFP]>Q؁4S2*S} UY߀ iNwJ}ۈ@6DA|CtE}kĠHbJ XK*NLEMTĂ{?{MA^sNC?UjeEqa'GʊW;IXMaJHaDZKy;M2N)P! 6R|Z΅ lkoxON,XPB\4A Vk:x1;Gj<@x=SpW>4g}A@^{CZTgD.JFEz5AFD,9G0rHxI&Kۍ<Nۋ^ *n?oHeAo ]CjRD͛HE"@$E48E˕/8F}d%IR,PPu`n nt{ށ=o}>/u?vm@SdBUR[D!6QhDG Ej >Ea70F-Ft$*HScG|pX} a3T(8a2VBaCXaZvb;]lb_jbcaXccPdfPGze0h>;fli/g9j$fkWglshmtopn[[ \*\\^~]Z`Kt]bj^Jda1^gW^igOx_jEadlV:Zbm~.cnn$5c o-dofptBr2s͓TscV0c؅V]e}W~fsAXhiZiM_[jV\l~M]mD'_n9`o-ap#aa2q&cLqfrrusu'pOjQkRak{T&kqUlhMWm[^YoniUZoOL\pBB]qe7_9r-_r"_sbsdgOt7KuhuvmM*pN}p"OpMySQppMSpgUq]WqTYriKZrA\/s6]t5,S^2t"7^zu6a$uCpgv8uwS w̌LtGM9t:Nt1wP"t;nREteTZt\VMtSWuOJ%Yu@Zv5[vh+\vv!]Qv`w$ hwvFx y'tKkwф{L|w}MwnuO/wym2QVwdeS~w[cUKwRaVxIWx5?2Ylxp5Zqx*Zx \cx_y PiyVwzz{J%{K_z|=Lzut{NTzl Phzc*RzZ!T'ziQUiz{GVz>X*z4FY-z*CYz b[{zp]z i{Bw&{{bH~6KI}{:K"}sL}{kO}JbQ*}#XR|OS|F~U2|=V|3W|)XQ|ZT|#\S| j5}?w{};|TuFFDHGŀzYIprKU}j*M$aOWQ2NqRSyE/SS<U5+2Vw)>V~X~[-~ j~x]~@}#DnnF5yGƄ r;Ii*K3_NVuO[M P0CQȁ:S{27TQ(UW$\h "kgOx~JB߈`~DZxEpGȇegJ^LAUMKNJB|O9QWi1MRŃ( TbzVn ]R llyGH@D}B;vCQo9EfaGЊ]ISrKYfJL1A!M#Z8N0O'HRbSTȅ]y ly%>|@ueAgomC\dEs[GpQIHI?J;7L4.M0#%PM SW^ Ul셼yl>=z{ >|tV?lOA^|cC ZfEPF뒜GG`>`G6IP-JÎ2$NQ5QlWa En{'>Ƥ y?or@BHjAmaCԝXEO$FcEcGjPikc{jmunqok^ZW_-[_]6{3`:_qR`agOac]be*TagKbiMBkd k7e;l[,QemL!e8n'fnhovHqQ rY8`ʇYa)YtdxZue7oq[fe]Yg\\]]j/S^kBJT_lj@aPm6Fbn+kco!2cEpA0ep i qvs tuRhͅSiD"UDiw2VojmXmkRdyZLl[>[(mR[\n:I.]o"?_^pX58`q&*arq ar?dGr Uis]vt uOnPn}xREnuSoRlUocOWpcZ=YfpQaZqjH\Fq>]r4_ s^)_s `ktAQc2t ium?w)v wjN!s5GOCs,{Ps%tRsBk=T-sbVCsY7X tP[YbtbG%Zt=3\4u237]vu)'^vh_]v?b5vs jwMwx xӅMfvYNlvyOvrjQ viSv`U2vXVvO>X8w*FYwkZ~7]~ li~Wyy}|GtzHNuI:nK݂eN\\PRQguIRCI@tSD8 T/VJ&WWqSYx_8 "mAy}~EZ7yF tqHm)JdwYBpqXCaiEwa'GmWIYN\J܌E%Kg@-pAhpCW_EVGvLH]CI:I3*Jt*L̍`":PITc NpUD2|MzzU@ tAOnB8g C^daZ-eScqQqeelHfig%?g;i4XhSj|)yhkahlimk jnxYpPq/]_2]`8|5]atl^c"k!_da`1fNX`Xh\PaLiGbxj=clz3Pdm(en^eo go kpAxrs2VfYWjg\z XdhrYhi[pi`B\jW~]el/N^lE_m<]ao22bo'c0p,cq)jfpqt lIry7stÃRl~}SlxTm`pVmhPX{n9_5ZnV[foM\p0D]p;!_bq1Q`rR'Uarrbs76eisz lAt/xuv.Pq|QqwRqoTrgVjrn^"Xjr}UYrL[&s9C\ws9]t#0F_t&_u&auCd]u jlvyXwx"Ou{zPuuQunCSHueU>u] WCuTXuKYvB[(vY9G\{v/]v%^kw<`w\2cow m`xyyy~Ny6yOxtPxlRxdT^x[VFxvS)WxJsXxAYx8x[Ix.\Dy$%k]yN6_yVb=yn mzUyzzj|MH|fxFN|9rO| k|Q{cVS`{ZU3{)QV{{(HWh{*@Xy{17XY{5.&Z{E$[{W^t{M`{L n {ezI|${P{Kyw$LIqN3jO~bQQ~\YNS}PuT}GrU}>V}6X:}w-sY`}j$oZ}Wn\}/Ka2}$ Vn}w{}|/zJIƂv K|qLSj4NaaBPRTWR%OS_bET>=T݀5V,W#Yxa\ bR ow~{~@}3y)H[tIW!oJօhLy_NVPRMQ{uDwR1;Rڂ3T|,"V #7X.'Zmc< Hp^|o~@x(FHsGS{n'HBfJr^PLSUNLO6BO:fPZ-2Q*Su"VȄ"KYc< 2p#|uAvDJrE%vlF_&e"H1+\J!SK̋JLߋ)AM.8M1N")%Q&)!CUTX id^ *pQ|uB?JpC1k D_4cF [SGmRRII;J@J7zJ^/KU'O 2R Xo`8f`/r7^}tMB$oLC} iDb\FYGw:PHGI>Ic6H?.6Iɒ&0M")P֎[ hctdWCs\C?n,DrhUE*RaF\X^GȢOZIF8IȞ=IP4H6,I˙O$LjP(HY] juh?SLhh&tkjkMjm}VQjxWEk0sXxkkZlc|[klZ\mR~^n[J_:nA`|o7apR.bq $rcYq+e.rgrh -ns{uu|*SpGwPTpMqUpbjWpbAYDpYZqAQ~\oqI ]r@+^r|6_r-9`sr#asdt ftx oSu{Tw wjz~ROtuS9t}p*Tpti2Ut`WtXYt|Pb[tG\*u?]JuG5^_u,_hu#$`Wv!c/vDev ow}{xxxQax2t:R\xnSxgU#w_VwWXwtOYwFZw=[w4\w+]x"_xAbxNdx ip'ynu{z.yw>P%{rQY{PmR{fT|9{UzuNg~qO~QlQ-~eR}]T}LyjUMԄcO=[1QHRQRIyS߂s@T457T0lV+y)W Z] ^@fR rttA}~}rI1qmJa0hKaMk1YO xPPGQ?Qͅ6RA/Sk'UY? [fs ~:~wpGLlKHIgIo_KWLϋO4N\FgO9=OMp5%O-P&StW:ZŅJgorق@}[oFE0jFAeGWY^iH,VtJML!nDLᎎ<0L3L,N$jQvUU\ wiSut{Vn:mEXi"FDcG2\HeETImL9KmCK[:J2JJ*L&B"OFFSh-e_W3 (k/vqlnEzgF!bwG{[H*STIJJB K99JĜG0IT)3Kr!yNyTZaΌ mdx\jSzjTtjVmkXdlZ[l\|S?m?^hJm`HB nGb8oc.oeX$cp&fSogjrgri v}jnJ}gWxgYAs'h`Zki\zc#i^*Z"j_Qk2ayHkc@=lVd7m'f>-Xmg#*nhcnEipPj%qkR}m_p{d]\vvd]qe~^ifY`2a}gUaXh-bPhdWGie? jg 5jh,[ki"_kjlvkmlwQqn"~ory` bt`bna}cgbd_cseW6d2gSOeIhBFfi9>fj\5g"k+hl!h{mjn3kn?rp)3}r twZthr[xi:mJ\if/^j#^F_ k>V@`lFNahlEbmm= con03dOn*e4o!EepO'^ay;1`yBcy=Wgys_z+~zzpQ}kR}@gT[|`#U|XW|?PY {GY{?2Zw{6[{/4\={'I]/{q_{['a{5 h^{r5s{{znP8jQNeR_HTsWV&OHW~FXn~=X~g5hY,~5.Zx}&[}B^}\aN} i"}6t}<|{m}NiOуdQ!]RV)TQlMUсEV<7VJ4W,XH%ZP]r+`@ Nit~}}kLgMbNꇕ[PTVR2L!SuCrT9:T>2TY%+;Ue$X?\^u *iՀ8u~~jTJ_f3Kya>L"ZMNICRONJmJQ*AQLj9SQj1Q~)Rچ"iVGFZ[%^Ʉ juˁ hHbdI`5_JsXLgQ8M}QHNώ-@iOZY7O/N (P TyXia |lXEw gHjbI]I֙fWFK8OLU9GSMV>M{:6zLe.?LI&NQWߋd' /nۆ$yeH:axIR\~JXUKN L9EMR=uMk4Lg,L%MPNZq2fj; pɆ zނ ymRsmTsmmV?fn_X-^nZVo[NOo]Ep?_=pa944qb+ rda resfF tfvgiowjWFrYkXmkZDfKl,[]l]U-m_(Ln+`D]nb<;oc2oe7)pefpgqhm bsi0uilOru g[pohh\ki^dki_i\Xj`SkbKlBckC/ld:m^f1mg}(nvhnigp/jC q`j ukn_s|sBd`Lnte]ahf bbDfc!ZgdARi)eDJ\ifjBEjg_9k9h0kni'lkLlwknnlR nmunptq_fl`fg4avgo`b#hY biQFdmjNIVekAJfk8gal{/gmL&hnienl8o mpKufpsivp-[lgke\lxf]tm_m^mjX_n%P&alnHAbo@WM GQMJ%O>B-O$:Oے 1Nl*O0"xQÎTɌ]/^U hrmmb{_Kc[RL'6VwLPEMȝsHNM@O-8Oa0sNN4(Nڗ Pה7U` jň}t@X}rpRwmpSgq U`quWYDqYeQRr[[JI,r]@r^8s4`x/sb'#thc-tdHve HveLxfiepp-mVknFWfnY`&ob['X#p\Op^eGq_?qZad7@qb.rEda%resftg< uihy_iksnkBZjk[elf]$^m^}Vm_Nna-FoJb|>oc6Hp(e -pzf$pg#q/hsah usiyjmtBmh_h\i;_ci`\jaU kcMjldE}m_e6=mf25mnTga,nxh#nioujqj rbkyUloupkejhq_y6 _y._y'#`yt 6buy./ey)hdy/ oyvz,zy|cAW}^X}Z.Z}TL[[}QM\|Eg]|=,^U|r4^|h,^|?&_>{a{e{5g{ Bpi{o%z{n{}aV!Q]WHXXhRYKZC\;\g3\G+A[~$]Q~e`I}c}!f}pq<}V{U}|c~#_S/[UVVT6U .T&'/T WCZPo`ȅ jdCsŃ } .[ N֗OVO RPtKQzDR]~=#RE5TRÐy-oQ %R.UMjXcm klLJ[u ~mYN UeOXPP hJnP&C/Q7;RnE3R+Q6$UR,T>x[e PnwWl^sR g(tSia8t\TZtVS]uXKuGZCu\^<u^ 3u_+vdaL#vbi~qUeqW>`!rXYrZLR?s,[J\s]Bs_:t-`2ta*Qtc!xu@d'ueRwf&]x'f|hDk`sh nYcoB[^o\6X>p|]Pq-^I4q`@ArrFa9rb1rd)[s"e s~f\tgvv-g%vh|j m&tgl*^+b0l^\m_VnM`Opo!aHoc @`pd%8pe0q;fQ(qGgqhricti uj|knueib`jVb[\kcUkdpNleZFmfB?n+gB7tnh/o'i'toNiojwqkh~sUkttl|mpw deg_3fgYghShhLii@EWji=kwj6olk^.ll&llUm,m$o{m@qn+ so(|pUrxbuahm]bmlXcZmRdmKen9D\fn_q~c6_~..d_1~&^} `}]yc|5gB|t ak(|t|{O}|{~YWUYmPZ5-K[XDH\fO<]E5]^,\ā?%u\^;be j~t~A~L~ }X"ULjSVO/XWICYBZ'6;?Z3fZ9+Z+$$ZX] `>da l7u2~z~_VS[RPTŌMUGVڋg@Wӊ9Xz1Xj*.Wn'"X[5U^mveS Dnpwx5UVRPSBKT:FU?RU吆7VP0sU(U9!iV|YTj^7hE "pyLSR OkRћ*JhSDT =U;,6pUt.T'VTU+XMZa\ j+rZuzewWQ`JwRZ[wTGTx[6x]A.x^'y7`vya.z7bj {uc{c~ehrbtUK^Fu VyYwuWS;vYpL"vp[Dv\= w^?5w>_-wa%wbMxcxdq zeNzf8~gk[tGaXrY6\rZ(X ss[QQs\Jt]Ct_T<uc`4ua,uc)$vdvvCezwfB LxgXyMgimu{`o]C[p]VNqU^PPq_Ir`B\s.b ;sc%3td +tGeF#t4ftfgvBh* w.hxia\kQnv_m}a}ZnJaUobeNocAH0pgd3Aqe&9qf&2Pqf*rYg#rlhritj, ujvk+mIpx ]jeYkeSlf0MmwfFn(g?nhZ8odi31@oi)pFj"pvkELpkKsl9 temv\mogryg\)f.kWgk*RSi/jLqjPk!EkEk>lk7~ll09m`m(mm!dn mnn7rnx [rovpr tzZc"pVmdpQceoKfoDgp=hpD6tiip/ ip'jAq jq1Ql q1~oqW pra`vrtvT|YaltUFbtPad+sJesCf(s`.7`ۀ/`J(/`I!`cf~qi,~; o/~x2}}|RZ M[*)I\8C^]4O<^ 5^[.f^&]_.QaEdj i.q<,yd~~PWԋLEX GaYrAZ;?[@4L\:,[9%M[mL]==_͆ ch lkos{?tO:VwJWsEX6@X9Y2Z++kY#Y"[SG^5d Iltr|7MUњI'VDWg>X/8XÖ\1/X)XP"XГgZpP]C f؊ TnvX~t]L{HQX{wRS-{SML{UF{W@{Y_8{[!1\{\)|,^G"3|[_S|`}Ka } c|d fk tvZxTVxURsynWFLyXEyZs>z\7jzU]0 z^(z`? za{b| c {eIz{fi"mevOYv6X+UvY*QwTZ[Kpw[Dx]=xh^g6hx_/y`'yBb yAcytd zeA Rz3fzYhejo wFXt\$Txt\OuD]Iu^C^v:_m~mi7n m0nn2)nn"o9nooq|o02so csYqx/s ucw|bR?f9riNTgqIhqD=iq=jq7kq/kr(kr!kr)lr;mosr* q`rr4t,yVut w2x0}kQ4evMJf5uHgZuCNh1umd|@e|j:qf>|'3f{,Gf{$fB{gf{ i zkz rm{es{,h{{n{|LaHaDSbҀC>c8d91dU*d~#;d>~=ek~3"g}bjv}t l};s}ON|}V}}K _G_℘B`?="av7b z0hb).b!b<=cfiP knuuyx} ~TI[\ԉEX]W@^f;i_'F5[_҇.`?}'` ^`IibJCd{ h ep.wgSEG[WC[?\9]3]d-Q]&B]^`ca, jV~qIyFZWB Z={[8/\ "2.\+\*$\`m]‘@_*c3 l$s&hzDKTQaP\RkKpSFUM@W9gX2lZ+\$S] _`a{~cm~dglv#R|T)O}.UoK }VE}Xq? }Y8I}[u1[~\*7~A^4#~u_r~`~sb P~2c}eAw}rfiowQzWM{XI{YDl{[>|\v7<|6]0Q|u^)@|` "-|a9|b|c |eV[|Lf8|lhjkQpJxPx[Ly([H/y\By]NmsbJtcFuc@vd[:}vPe93vf-:vf&fwAgwh8whxix ~xjxl{3mpt{$MqfIrfDsg8?t%g9Ttthp2ti,%ui%[ukjQujuk7cwk wl x mH|(oKr8v|Ko[jH#pjCqj>|r)k48ark1rl + s$l$2sylsmKt0mv*m veo@Nwp{r4tw}:Jl oFmo4Bo+n=on7po0pod*q"o"qRo:qYorp=tpe dtqus(|tvyF~eIjSsFkksAlsd&b9cI"4cֆ/,dek) d7"CdpeWWgfjQ |nX!Muc8|B?`V<_`8(aY35aÌP-bK'b} bKdFf]l h oQvm|6>R_-:_6`1`uZ,`ޒ& `>Zaclbew j7q/vO{pK҄OQGQBS%=T7bVc1ƃX+\Y$[\^P_Y 9ak=c0e3henwISF3ITBV+=W6Y#0Z* r[#R]+^YS_baa Àrcke6g5j~qyCHVDbW@X;Z?5[/\),^"-_)`2ac7 `~e!}~df~(hl3rYzG}ZTC~~Z? [:.\4R^.a_"(ph`?!ayb!cu~xe 3}fI}8hVt}jzmszF{]B|`^E>}^9}(_3}o`-}ia'|}|b }c}dj}ye}Nf |kh|>jK}l5ot{F/y%aCrp:$spj58t2p/tp)Stp"tptpup`vq0 2wr(wsytvx^|=@o&t=TpMt9?qPt4kqt.rbt(rt}!rtdrtbsshu;t; \u~uKmvvGDzwyy}?bm_x;nnx7oVx3*px-pqx'hpx; px pwrwcosw [txpvyO{]z-{{v~w=xkT}:l`|6!mM|1Qm|+ns|Y%n|in{o{~q{ :s {)t_{]wo{e}|r|}-;ii8Cj4Tk_/lc*+l$Nllnf;yp~ "q~s~y\~c;~~}9gx6hc2i\-i(j]"j܄:pk m1ko *p\tGz{8 eg4fs0g,?h 5&h!9hÉ igk‡m/t _n7uu Ozm:lII6^dp\3$ep=/Vf5P*f%yg gf,xhjt ik݉ oԆw@uz5Lzs8fBӉ~P>Qn9Rq4S/{U)ЈW#XJYZ[ f\ ^Մa5$cUeiow@Igk.ry{?܅dV<(U\:Y<]<6]1^^+_&F` va[bOc#,dc 'f:hW~jGlpQv)|=l~`9`~5?a 0-a+Kb%h1ced7>dŁ9ecʀf h@v~j3}lnwr w}m<|c8}c4[TdX/yd*2e$f2tfgCgrh j~k}amorx~#;zgr7|Jg3}g/}h.)}h#}i}i}i}j }k }llx}n|oruz_:tyikG6zk(2{k-.Z{kz(|Ck#1|Ck |l@|"l/|pl} |mr g|ln|3pF@|Jr1tw{9wn6(yAn2AzIn-zxn(Rzn"{zo6zo zn-{Lo. 2{p{yq8{r}gtvx}8vr 5Owr1ZxrS,xrQ'y9rR!yUrN?yr.y[qzJq Hzqrzsv{;ui~wLxz$7]svN3u5v40/vxv(+wv&gwku wu)wcuzx3u!`yFuQ wy_v$zvzxayz} 56qz2rz.uszx)ttzH$tz9u\y&uNyzIwy+xyC ^xyzHy|{||-3To5~0Mp~,q~(Nr~R#7s>~s}s}iZv4}< Jw}GexM}y|~}o}~#1m.o!0+p<&p킇!q4%qPrt݁ uvрyXv%~wl/k,m_)vng%o1 ȯpJ)qsD sքZuyh}z.j+Ol'mm#mҍn<  op qlj4 rdžfmu.Sy~}*"8IO4RP0kQ+fR&ǏTQ!UW XYc [j^`…cf?ksz6Rk3jSQ0YTf+U&N?V X*YNߍZ/m[V ƋL]`bPehmgu|i63qUe3V/WV*͌W%Y+ 8ZSd3[_|l\/1]R ;_l݇amdCwgAjov}5sX1X.oYs)jZ`$<[qw\Ҋ]u ^'܊6_N ؈[a;c?f9Gyh*l+ pw}4i~[x1+[-E\(牒]`#m^J!_,3`wE`Ba cslme~GhGjnrKx~3^0__ ,_(2`Y#a⇚atb|臚cc _feXgu+xilosy43a/b`+ˆb'Wwcf"Mic"d~d9em fH ӄHgi^i_kon~quJz1߂me.ڃwe+#{f'&DŽf!鄚fogMք_g:2g ʃh ^jKkn*pptw5|e0āic-݂ if*i&Ei!kjj/jP6jO k.恟l{n 4pWsuy}/l- l)ށtm%ǁ}m1 mD`zm5Ibm&/Dl ҁm,nĀp}runwzD.~o,78p1)7p%5p 1Cp pqp,np pgqisT:uwyp|-|s+}ks'~t#~mt/~t~s~sX sT 's t*~v~xSy{~r+zw)t{&w&+{w"B|\w|w3}wBd}5v Q~3w G~w~x4~y/z{|MN*hw|K'y |-$y| zx{{ {{{3|%z }Dz}{ }{~{|V}}(uv!%w#xx0x0ty(zNf{. | ~|~o}~@}E~7~c~~&u8 $bvm!vw|dx<yDz=X az{W&{>}S$sҍ"tӌ !uFv7mv뉸xJ XyE "yJ&zg2z&v}-N++O'svP#tQr~ST?U5LVK XZs[]C?`Ad howk}-VkQ*gR['}SX#STi(UV/Wo2X| 9Z\Q֍d_HbTf)LjCry47,“Tk*T&U"u VWU8XؓrY} Z O[G^ado\g~ksFz,JW^(cW%gX!$X3Y‘Ze[ P\ ]K`bf1imtgz*Đ"Z'Z$[ [\`]Wߐq^ I^ r`W!Hb8cdhkv@ou{n*:]'TZ]#^l^A3_XJ_B`{ am !mbdn#f)j;myqv|h)`J&`#K|a1a}b(b~b icdfh@mloQsxo}{(>c%d*"do-d/ee@e ifEg5MhokX{knr uNy~'^*gh% g"1kg?~h͊}h.h]hV hikbkmapt6v{y&D j$j!k= kiYk\*)k!Ȉk/ kmfl$n [ptcszwvOKx}!$m#;Wn< nlnnnI(Vn8 n`+Jowq syv"txWz~#ŅZql"'qɅr@5]rW~r{}q M qz]q`r\tkiv|xxYz |"u 惡u5uuuW)t Ytu0svwY,xzc{(||!zyayy"yxnyx Yx< y$y}zAz{|}j'~~E~8}}tv}0 a}#2|U} O}}A}}MZEDx+LU 8߁ Y9\5b(dI<~~c^ ~~ӈ6I l5d?z7ɀ.#ŸM]!=N#iO4_P ֞Q%LR0 לSkT VgaY[ \`elt{ #{P>!W`QOQםGR&STw UU>V3XQ[y_ cgDnv|#*S ʛSӛT$TFUhrV 'W#X\Z%]Y`d$iep2w'}5"UњV VXVRWX !YZ\ 9_Z]bfZj qx}!%XHȘXÙ3Y/=YAZej[1 \GX]Co^asdd=hls$y!~e =[&![\]\]З)] ^t_8a:crfj|u'0~~}~H~~%֊v̉y a>~ vp"k_P6",  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}~}~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}~}~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{|}~mft2!h5j8 < p  ?.$yof\SI?6,"  !!!"w"#m#$d$%Z%&Q&'G'(=()4)***+ +,,- -.../u/0k01b12X23O34E45;56267(78899: :;;};`>?V?@M@ACAB9BC0CD&DEEFFG GGH{HIqIJgJK^KLTLMKMNANO7OP.PQ$QRRSSTTTUyUVoVWeWXZXYLYZ>Z[1[\#\]]^^^_r_`d`aVabIbc;cd-deeffgg|ghnhiaijSjkEkl7lm)mnno oppypqkqr]rsOstAtu3uv%vwwx xxyuyzgz{Y{|K|}=}~0~"qc܄VυH:,{n`ٍRˎD6( xj\ՖNǗ@hEؚ"lIܜ%oLߞ)sPLɡE¢?82+% zsmf`ݱYֲSϳLɴFµ?92+% ztmg`ZSMFA@ɿ>ʾ=˼<̻:ͺ9ι8Ϸ7ж5ѵ4ҳ3Ӳ2Ա0հ/֮.׭)؞هq[Eܺ/ݤގxaK5 ~hQ;%nXA+tp$}~dK1-<KZix   - < KZix-<KZiy-< K !Z!"i"#y$$%%&&'-'(-(()`)*,**+^+,*,,-]-.)../[/0/01!12233~34p45b56T67F78989+9::;;<^>?P?@B@A4AB&BCCD DDEvEFhFGZGHLHI>IJ0JK"KLLMMMNrNOdOPVPQHQR:RS,STTUUVV{VWnWX`XYRYZDZ[6[\(\]]^ ^^_w_`i`a\abNbc@cd2de$effggghshieijWjkJklĘIϙUښ`lw+6BǤMӥXަdo{ #.:E˰Qֱ\hs'2>ûIϼTڽ`kwjEgBįŊd?Ǭȇa<ʩ˃^9ͦ΀[5У}X2Ӡ zU/֜ wW@ٴ)ڝۆoXA޵*ߞ&6GWgw 0AQaq *;K[k|$5EUfv@!aB" c  C $ d1kO3lP4nR6pT 7 !!!"q"#U#$9$%%&&s&'W'(;())**t*+X+,<,- -..v./Z/0>01"122x23\34@45#566y67]78A89%9: :{:;_; >}>?`?@P@AXABaBCjCDsDE|FFG GHHIIJ%JK.KL7LM@MNINOQOPZPQcQRlRSuST~UUV VWWXXY'YZ0Z[9[\B\]J]^S^_\_`e`anabwbcddeeffg gh)hi5ijBjkNklZlmfmnrnoppqqrrs)st6tuBuvNvwZwxfxysyz{{||}}~*~6<2( {qg\׊R͋HÌ>4*  |rh^ٖTϗJŘ@6+! ~tj`ۢVУKƤA7-#vkaܮWүMȰC9/%wmc޺YԻOʼE:0&ƒyoeZP_ɬSˠF͓:χ-z!nԻa֮UtcRA۹0ܨݗކujgc`]YVROLHEB>;741-*&#  X2Q5I :v?m .A5;=G*%L$P^ ^S c!S w!Zzc&`q[!1rbZ!>Pdh O,f!}c*e {e!fp2{P:SisγɔΜٙ[l=͚!sΚR-ϐuЛ8֯$=мa!1"¸BY8H.ѾSӿ]w70W95rP` y8E >?;TF0L**OX"nuT[#9T B\S$b2"0e3$=fo"Ni9#Gch"{zh#j 7[X}`|D`#˗5cبL7_'Хݴxڑ6³ʃٱ ֯( ͢{rR1Ԫ_ݪ!]Ӊc^-])3lW7K s>jAE75L6/FO_'T3L"pWy O^ &$Ne@$y0uf&=(hS$N*k6%qck$u|kb&@m L=ֱUw_@뾅djwӝʝ8uܹc̷7;EꔘΉ+K xɑ!Ϣ=7\cϐ%WϵRҎ3%PD]ϩb`ir*Yc4q0\b6R =G7D?2K?w22QcQ*IU6$Y!PaF!$fL&0h;)1;sknG'Lo>)'coJ'|o )tq>CMwgy衎ײ~ށx;ٟ@ˬ^vP9uﶃͺZ=Inͧ|vn @PzOj re(k".1c4hX 7; M |BDJm9Q0O0]V#%]|!c$$8gX*}0k66+;Ho,Lq+cs+N}s,]tI8qBjClιܶrל1;ӫ۹ \̪~<:\Xnаp͐d&ŮEԉЯ]ŅU˱ǩz$r+ikd1q` 9%\T AKII@BP66WP*-^%Id)2&Qi J-0m.:7s0L1u^/d9w/~w0y OݵL| x̽ҟɨ>ʰOśii:[ʗr˸G˚!ʍIEoЈZ,Ь]hɪ!c|'u.ti6'^ >SGHO>yX 3C+_F*e.'bl1/1 s28xi5K{q6d+|,6W ~7f2Z蹤鼋QͮyjdzCt0WӨLϊʻ՛lǍ@C$ a2>":ʯόtzv\TଳԫO= ^f$~l+@tK3_g3 <&\5EqQz#NDEX <n_2 fo5x(li30xn(7h9| <@L~=d6<)s=ĞKeyPWk6+5t?+͂1hȢțęK ҖUh)7p?xRbvHdy՚K !A͆'( ~61rv :e+CXZALNOVC|9b>0"f0;{)=nt7/{=;LAMlGCe-B&]C򠒋tPah'jDyԉYYŘ+^R&MC1;Ɣqҷ]a͜Ƴu)5 Hffo;>Wri$O~/|v F8qi AHd$K X&VL\:bD"h&?* qq?(1P|Do=GN I1e$I܆K01%DF/2iҩ͈r~m2ƴMt2-q'W״Iٲ9⏧/h@ДىѼIө>㨲-zyt| u+_6o{ 8?pIIbUV$bYL#j$EC*wr_G2|(MK?ÄYKMuOd|&SR}$Tɗ+[yL;XER]ÿ

0U3"3jLQ+s/Q!4W|UBPM\Vj ?O_-_].ᬝ:}.͛ûPƪg}#dɅM]Ȳ8~E5 6YYGvЌͩϬIхQKԿ>'Hd n*!;.k Z:lFv_{OJRl`Lo`#$k*U,t4 \5}^C)X^S~;jnZlq{o"">;TŨ{nLǦăEGYƴX*Ի=? p 5͛Ó{<ύᩚ±lZ%VHӡ ĭԄ@鬔?e;IV'qG\<)F X6BDO~&T^]q"8jda,0uWj 5knvCwJ\33zCpZzӋIblմ̜ӄ%Nem,!Ȋ^Pʛ4ə+ItMӴ j{пgհ> Ӈ _=zN ܳn,²kM*MZd9#2vm '?M&]c i z,v[|)4āD:EÍՍ^WQkr-鰌zt'狕.֑ϿlPǯWÀXӿ@tu'aqnʟ2okac & >ӨȓIrzЮ˭r=[ՉyԷ' ϵx߳EӰܭ&,? ;]J98]Y@ gnN+!sjs4 JDߟ^[vﲢr眡a*v3 aӒݽ@ˤv;`ÕƤ§pgHrʓ<)HP:Ǖ4`@)ЎP_ݮX; $p#Q, vI&ʹV 55mBE-%TɪVd`)r*3g@a2KYHƞoϦg:Ǻ۽JϵW_*ؿTrDŽ6Dd=#Тf*@[Eި\aE9"%Ɣ8Ң|MԖ݌&vֱXp#F2 XݼƻDo#Jٹ92g)%BnRӶaA&Ao9;30y@f/7@EQxOؓd"ǝ~ݨZ¬#ƟF>Ëıٳ}BI1kUevJ۲=? u}=(yCڑS՜ȐPשŏnׇ!p#M9 Q\tM 7/- @-SNUx]*ʭ!$g2,vB}x6UgFθ:ڍ[(@oԥ}xu€hX>ßǪ'^;ŭREd¶LJ )l+_ꜜsߛ߮ϙˬ5䫨p(;͓(Cu q#e; =`ij+s i S.V{!h"2=|qA9e6Iv &f -!'@MP=OՓšJφS%HJ%ѩݧaw܈t?Z׾؃o١K}/ݎyl5%v$ _"! 8`XJE%DI1,. B>U,(kjz=76|iftBlxSobjYir`H"uҋYv>׎ΘiE>ȋAh͇%څV,}ۡ `+iě+8}Z̟|azԺQyv$ _"! 8`XJ݌A _/}xi4DV"[_.oo?0:|dE|k{;XŅfa-xex3I;zل(qn$XرJ&ע$AI֏æ>sӑӵ܋8~L=yۚ}Sގzǩߓxļcxzߏtᅙ)v$ _"! 8axRyDnE(3lIO#_r1se;~anHp+_Qfa`]ofrv2ֈ }? CI ΡϽ΢ÄcCn(5Wغрm܅ӡ5}eծȟzԫ݆wCu*_K r˴ᙸqFMzn5iv$ _"! 8a5#g(<"^ 8Q}F&gufH2u^<~^JF ^YT^_+elokmu町IzPȨ|ϴٟb}ڤ+|(˂|yӍ}{LH{yK~vr4nԃ඙"kҌ{,igd嗖Av$ _"! 8U#M'n_N" o~Z'JӃ\uۿƛvr۫ڕp۪ݣTm .j0ّޘ`gf =䃖c䒔.v$ _"! 8I; +,'Fc)ʮz_")F\qd^*nSA?1dzS>WmK["Y y\oa_jwkލwfꓪlllƚmZoݦ)"olQo|Fza"2_[`^y ](v\w?YB/R24_I &8@ ?5E*KQ#TOPoQq0qR Wm%<]a /` ;btMd `bc{yc dv.rvIfŸ럅Oҫ<<'~u}չ /y@תMHuظ>lCnjh̟Scܢ: `aݩX]6홹^-Y*3R~6~F =< D2qJ)'6Nf"SGS;h!aXSe !( ,Y #`.[!/2b#C;dg Mf!b2f!(z f"Tgu2{Os$nd9{߻*Vө͂c{g@}SzYYwP{n šzidտaݐI^(ޫsd3*^0X6M7 $<B nCo8 J80N#e&S^["QUp !}n[ <"?b!.e%2:fh#0L4i$bhj%#Qzj+$1k8BрuW<x*#_ѹ)L`SܩӢ ol~{bw qr5ٵ1jِgڪ[bw_Mٚqkb'tdr. ]3TN :H B8>hsI2Og+aSjN%ZV"]\ dM$.GgW'B9iQ&Kk8&eb&m%zmFE'Vn=>-3^C켂 䄒3W؋r;"ڬDѡ cXTնgW| ب:oxԧʼnsظ\lnىNlhY]"dHܱ_-tHb$m?+eD1SsZ 58OT @DH}:=O_0TY<'Zb"sl`!v ge'.imW*k8 l<*Jo))Fbqa,)b|q+0rD)g# SfޜόD jӾRvea_~k8Ոǃ|k\ťyWyBr4XhmIif!dA`{!t(@m.k`6hV K>K FgAdMX6U6(*\#bY$"Gi!u+~.k,~8:q1/8Jr,bKu-3|vuK.vJKŏXpyv*12~ѻnNAةoMNʩSG{ѧcw։s׿pjo{G1iooea t&d~D$w9*jk3` $<T E!HMgW>V+"2bN])=c+5#jK//oL06v3J x4^b {h3|O5}Y TjЅ)`̨&ي m&Ϫ1H@3ŤЌ À^ZؾP}-Ԯ ytJ?#pղNklm;fb2Pc!'vK0Wj \9\^w 6BR'KF"U"=]2FeN1$kq3V/ht7r36{59_J2}^;Dc~x9h;w^ݍYtյ;A#<*Vlj);êՁ^h?}ըYzHtϥoDYX>i62WfVhdޟۑQLC8<$@d.t_7gf J@[J^OO;T|E^= ejz8&al6.Ty:=6}?KI`A7ce@ZׇMB‰@k&乚-oٳD˫ΘɶVͰc῔zEۺgѵRDɩ#}ֆ)XyyЬtM=qn1l(jIRgW}J g)+~6s >eH#YT N +_BD@ ogK;?T'naOMKY)fȔ\l]Y䉛X\'ZşDZǞ|P .&۬h&C߫4ԅѥ|֨wjۧq#s$VQWr蚒tW$ĨxzY՝MO@v)ʐ6\ C(}}Oo]]'b hGV* r%UZ 3{9]_@ZNhClXKj2*lWMHLXE ˕?13VԷ1=!ױΑx%Э䯱Ӛߣ`iՏ}jw/(uhץSx3޸v:Cuⵘ|F#lfK6#q1 @rCGKM;$~[.t HgNf*rZg4|kLA;WsfWsm$x_ed?>ƪТ*M'FJNi*!7O|٦VEtIeНlϨ~ӥR}|ٕz|˛Xy㥘ٴ ߳ UƱm;{)rG檌DUQS-a ;fRJ@@X]f|)sx'2~BaBZ"H# pn#M5Wmn忛 ÷Vsɢݫ ͠D&u9r30ԥw9ֿbkeأޒZ}ݪ>߹~3|Nї|_"ӶXtu߰I嬹) n8!5;F/UGÕxze‹;(}p2~}8A'Xꘑ6q硡ibкcjtÔ:ǐIibʗK1Nő^ޯݭ膑M/ ׄߘI ِTpb&?yqv%㖙}͗L$zշ!(O Us=K'y&,5lMhDsSYbߕ'voI1v~>O\YȈr Yґm53H=:Ã.LO -v˚ ̥q3}D׎ԄbLM©Íٌ;fУ1ߣ4ˏVĀ6.2m%K ":tմJ#)v*Y1+ #Bb2|/P%_x"!ojD{.ue7SީSAݱl$ϭJ߰ V?oͯ t8Ƙ q񖖓y-s~|N'ۤޜ50EN3Ǚݗ؇.>巖OM$ "^1H }.m5 ?VrAM#S,[ʠzbe)r%5VH+aȬKv޴(N5^$n̹,d'j٠[ΰ1D,R,ŋP&Vr;\ܹ'ݑՊ4⬙6䰘;Ėk׈愕L$"3NHN+)e* cGFڦHYukT. cT\,8u:qQArO}s6XlGscĕfu/^?y߉y̥쮾!^Ĩ&T pʛ4Ԙ֟w3җxp 彔ku 檓~K$ "ŒazTŜ$ƽ#6p" :} ?o>CLN̑`b*,p5!H~Ji,-ii].fʔ1گ_K)to|YtŇK%%#|Ƭ ǽs&ٔ#/!ͬ-dH+t ]goE(pvS9/|O!:ĀUQG~W]WoeeY`|UTPt/PS~oOZO15nPHMOc %MہLHKejAuќ=lk~=8~JkL+PoEU0xFM_aZ|HjEwk{~;~h{'?ymp6p3Zs63ybt4O[v6 ׷_x7iýzV9'8{94z9[עz8cqz7w[zS6p=zU6z^ŇL%&#}l&c}1ɪ-RB0`{UO__a 2M[[q;^N8E$fKsNlP`mCzbzJDk~R@|}:x:|pn1!n,ﮊm-wn.o0yr1xt62u3S*v3Pӿw 31`zv3bv2v%2tuZ1-R2J7'@ >b6QDm+J#MPzQRU$[q._8 0:ha$>Lc4aWbFzLawcK+9Ds_DӋy_*b{*uzסv}iܒrjm֧ۗh Ocݔ@_a h[YṘ1Uі)8Rq3 NYْ/BKc_'+Y 1LR5F <$< "Ci1rI(Mx#c+QUq R!bW+#B^/c -a!9Sc Le!6`ed Xy#eE!Gf3/ìxQJag9Y.|3;ުx70tO=Ap ãTi+υcnܬͤ_[kfȅV;Sxk4Oa+%L啑(f(_^/%YB4N :C= B8@6ID.-M^n&)Rud"<T!RX!`c!-\c$T8e#FKmg#ah"]yh#ih4`h}>QG pZzgŪ:$o{NG.w oؕUaiF0sd{ʝaX\ޒ'1X(T7PГM5vlv%eE+_92-U8I @>gHB7H!Lq, ROZ%Ux%#)Y? cb@",fb&S8\h&*JkC%eal)$zla&!Em:Y1 -Y*zב`Sí ښ~h!H_y׭?uد6jĠfpǛb]Қ*QY4,4V8ᥖZR}!uN䷒u"ne(We/%[7Pq ?EEvG:NYg0,S1E' X #Vx]6Jf^%,hDi)_6kV(Inb.(`oD(!{p,) qX@aG8ṼH/Qٖfʪxm`բ}քBvWshlL\Ʈgݟċcܘ`U_[<պaWQ#IR jOyw|gup&nNZ,ma25mW3 A=4K EqB<rMTf7S +g[$/`" +gFn)o-vjQ-+7UoN-Iqb+`t+{tI-uFĵj((t~݆t >z=ƪp~2x\qHٺjDَ3eY`݂\3жWޗTS.P הD!y.(n9V1b m:7>U[ BILQL?e?6T-3O\*b(m!$ij.z-m/5u2Hv2a/y2:}z{q3k{P-RxSwAHK8ъ;ȇl΋їˢդzeyTQBrؠLl٫{h;mb]ܽP]К(XPET֪kQ8擕c2|Av>%w.&xj7^ ACRJJduGTL)ܮ^9ޝxY\W㮖S"{ʎ !r4+v5Mih >\qHEPRG+E\=bd06~$"kZ6-hvL7g5J}>I @a/=?}@&Ee0b1ޗfϡp 7<ˎYaY7*lǽ@zhyQs#ozOiڴqd6ܹcޞ^#ږvXZSZVe'x>p lBr[(_i3tB 2z\&>!#XZL/>ej*8g:+Oi|N9ޞƙ*9DZf53ǽ *ʹ K/oiIH1A۫~Y0w v5s m2sFܚpuޗȔorj:bϰK*59Ŧ lǜ/~] =SK-8Xu3dg(Xptd35zTi?v[[qJTxrkw) }dzª4v(*Ȣ얅 KO@$y>.ө|nZ2va"~wF 1wGut0tD.oϒKe3棕ٳ |JE* e9/mH<+%Ud'{('p%w61~8@&]Xy܉SpHL狞焓<_|lDō!+Ɏϗ&|-‘dϋ^ƯԊ-צFۛ/1ݚN}ߟ`;|Jeys^sӖ.!m*|h#棕ԵN!شdW38ʭquKe(x7j F(kZS썦Jb&o:1T{?ЊeX ¤q%͏Z M)8ʨzƁgEZ2[M,ԮSد w65je'`㏘{9Їu斷p桕xTjX槕3#rӵ t5z&T%HY5|sA FD5E*Q@a/$lg/|lְ"1& vA}4P垉A^g,,0su70ERއՀmWC=ư翅W*[buohmЗ-ՅێTƩۛMLь՛^ /-AÖƃ6@E{~桕sox桕ms•m5J%#!Z)Aִ~ <^l.[ ?6M`< Wi?`/ t'o[5~o߬I`yKx{<=2PȝکĚdmכӂɕZM8GLu{"ևTܸHɇ⻚ږˍ揕xa棕n樕jNf{gG&# RZ:#{඿+0 ;XJ6Nl݈Y($jE0w4@q%߉RŖYSnZЯְѝ5Ϳh&ԓRμ Qftٰ"/CNۧӠݜM"lc0Tb]雌^鼌)%?W#! W<kBŽ#:t4զ5. 5=QId]ӭ)2p2!4|~I8fV?,ؤx3*gȀ!C\۸}eϜqvKoyXfa鷏ݘ=_45*[ƮyZ)PX;豏V/AUՌZSԙJ%4k'%Z$Î!dĘ`5fhs#.M%dF3֊F}Y!*)lh|O6[{kFDTu `&|܌zxi|8^|a{Wڛs$haya/ۛh[pdzA.Y+IW¾=V_胒U1Sp/R$ÊQ2;UPɆk&%$|r!r C5ʇqˠ{0?_3]ʕq2H]M+mm7z+cVEeXꌻmq薙xY]kAb@mUjݶЛeX 皰^~@X!枚+S @(Qf_OU睒eN:UKčJ˿EJYوH!놅G[&%$|r!r C5ʇqˠz2m)6q(KAcA{!}-pa59}Z]aCـ[#Tچ{_g3j. ]eℝ]s#E\~UEZ֗LT9Q$LNz纔`KBWA|I*'2H([겎F|BD˅ᇘC"JJCxA{M[&%$|r!r C6ʇq's( {9(^QBi!bh:@,u%Uz3_sS-CXW&V~xWd+YÁO=[NlĦLȵLDK`dIMcG᥎F?v蓍D{\B餉@7xu?t!6>UI U|sT:!kY*MxSbK6/{UMxML럅I'yaLpFFGgru:O@z z9p-Sqn8T@a'=7iC,i*o,j#r-O}Зs-2t՞t ,y^s,ks,s,9zs9+rY+)qY[&%$}r"!B%&CI,O$+/Z *@Rt/VQc%^a25[SD:tcKGJf{G#VkD&_opIsko7|'w4o+)T.Lt2A ::71 AU*eG"FNL'jP#hQqDR#V +[~7!]J_ _Y^wS^8_l$tk9y瀍FNџ_xZՙ@U⁖'PɓJ| jE6Aiȇi>\ݜ:!46}Y3zZ1axS.vb&G&[o,T*2&H8= @.1SF& L1|PNQoRao"X+*]6Q`C"I2b|D^awab?#b@(o.? Vԅcޣ]ଚWڗ- Q䴔qL 榐?ߢFs裋hB*{?x닆 ;{Ł8r5'O|Q2ezK0FRx/h#a)Z0P6uD :=8 E- K$fRPEd oRg mS![.)`!5b^ He ]eD Kw3d!e-;uB Dæ`^W(gy'7a{qZ[ፘwTG"M|!ToGu~C霉~@#է=)V9E96b}.3{ɼ1\%yzo hJ&aq#-dX5K dO:-8s~o4q}:Ý1^z2wq`#hj* ^3pS:F C#rm:"7dnxT#-qqڱ&mۧHfo)_W(؅Q咓IŎFdbC-?kmn < B9Q?6#~3G|y mqqL&Td0HZ(9 M )ABXJ"w6)QPQ+V4%f[.cn#t'gx),4jV)QE nnD(Z]pE(gx

d{L;4넁=7nc~`6+E|8|"q_,jic5WW *>K G@RP4+X)D_W$^:f0()8j`J,;4'o/qDsb/"]u.Dyv/mwFxi}?}{נ[ztǦGٰlբ_ cݫJr[᱙hT+☕zM>DJi1Ga+C䉠V@l{><%~O8}!Lsr7]~'{y(wn2Ab' \<+U F@HtO,F~"ʩۭxG- nKFd#\V2᠖9O!OL弐IvUE8Ƌ@B껇 ??w< à9퉀Sj-i%yk/Cl9S_b CR];NcCEYb;a*0hN4)oj12{B9Dl}==^LE;)}<󝼄SZ|՘sb'Ԭ5|ֽѬuطgbN_p䚸Xz빓Rb(}NBJݐDFbCꍉ=@ņ >쫃Z<<^Hy; u{ Q wj!J+,w7gi A\ LPOXGCcT=m!hv:*r9D2~(@F3NC'^~B=~NGDmf#yŏ®tע4NRԇx+ájƠyb-G6ZӘܰS;ŖO?橔.KTHxeF ꣉C뮆rAW쓃튵? 0c4 G ݋LE(ۂ5vw ?i%K9ZXN-clD"jg@2,tA5*~IHH yHW^,^Jہ_=M͒Egwˤ&=ij#hn0 ң(y_rn9\9dAS2[EB`U䙖`R8O(J K}j{GAOFOȅC%r}B9փ, IVp6#v1k| <=v4 KHHfaVYmbVO#iG,uL7XN`HX3P^VmX_X7Ή˩ϪQ ȪNzAۦwpޣ}ekΞ a\1UMZ偔ޛ-Vaؓ(S=&NΏΈgM!B<H,[xFHsD^]b[i Օr,y9 G\tcT{ee`eYd#lR"/CuW9uUHŒ3_>d75dWgTeٝʥS!;S7Ҷ3xcnۖZzlݝd▘▗_宕$Z瀓jT}O窒x=L袏qQJrdlHꑊgFh%ɯ@]BK[JU)Ò7u ?Ehi}Qn_Nha#kd.Fxvn;sdO uhPyNT$-%۶/I+Ә}Ae_^q}(YUbgRaRckO΋gMa꓉dLUAҰկ{άt03&Ho68 D+fmxPa yT]{nt!jz-jwً9POR Tm n9`;SI^wɚ|{<ͭ~ivxᘛu䛕!np}c桕u]欕gaՁ6f혁&gSG鎌jrU̅_^Mq'Ͳ iа"R֦k%f3”Q C:,_OJ\vg,;tTb9GCdQ$ɨm $όD#Mz/ù1ΜTʈL`̈Oߟ0viUk}ݗ~i}w吖\Rny桕xf棕p`椕gY*澕v%k[s"a#kY[Z!N{:ܳL9!Ͳ*!߰?9lƨkDb#Z̟W3 AvbN$[` d*(sp6?GVPߓn/=辞«~'eJhW7huaʉw4ߠ䮘={?嵖|%s梕qlie c_nVrj임#lze8gaS_X)մ^"۳ ⲵeux1P !0~1D] ?tyMTtU`_ %m&b 4NȒ_ݏg̝5oyf i)&ڲ22Ӣ1aO~ܴʙބecw„桕l|ƕchDwScmrSk4u%[g\*Y`dY4Xb뜇FSv^믆$\ӵ}U"}״j˲Q)3>ɨW.# =wjKWoMhGXt!hg"2{G hGa_nFӷyҕlTΏۓ1M&2h桕wřfGbee\ _蟐T_`eČd"TuꀊRrmQm0Pjcу&0$ӶH!޵ @ձ^ͭ'+ c/9 CEyO"an-Gsǘ+=(~PWkE܎(Z֦c|ںK4w{qNb)桕\ÒXɠz赏V|/鑌U->SƑe꜉Yo-ςP쁄LV쭃Jc{7΃I[w>&6&$QX?&IR4Ǩ69= ;mHm&Z˨'o`9.~Mg$c }p`{ y +Iu:% pyL2fs`9^淒Z RY4Nݵ3Q?LK׈NL\WKnGI{HE~DÒ# Bt~Bo>|W& A%$ yY:,!&-y(Q4%w9AqU㮮B$j)s1~xwaBlcP";dLkk>܌{^hLMa`*On([V_ώlOp GEA뚉U@I? >X=nx}>=jAzb>\~x=}wi;놬{?P>g=f8r20-5-|-z$y.)ё^u-sY-V(4=0 Pdj,`T EB \m"kPS]*!uP B(oJK(LnSE~]_p%@`po$1B0m.(o?/2t/z ,:A |+d|5+%"|=* z#)xG(v'؆sr'gooN'6l'6!k'4j*%j&J$ nh?Qc*h޷:&EbdL1桌i Lw o`{_6 nVAs2jP>iKfHTgm=t^>mD6xk)Dnk2+29_"Je}#%Olh%0Љpt$q`$5Ip$-q#gp#KoS"ym")jk"h!ٜf""B5du%j&J$ ni*; N$MHp*B$ూX^:a&Q fha+c[q6{aH Jcz31Lm;m`f\0Op|gL-ю7a %9`<|[1)\\~bbO{f{R+g/sQygqvgh,|IgifhaS~e obQ `%j&J$ rx$kn l"4.F&A cACzJUd {_ ^e0o\Fmx2kf:FeY9?oVaO,ce4Dw|]"Q{b?E\Wv@Sw챚SotZ3]P+G^[W^dQ^~F__2^4F]!l\%j&J$ ݖ$ "/WY[-d XGf9Z_&YFM{,`A4?\hL$i..Q ;ZjHNNVa8#NNM)SG2LV4DU2|TKT,j2baT! pZSZY: U0 Q_UMRBJ?GxTEpBnH7sJku֥KR3L7M/7MN:N%j&Jш&Y5N,i] -(m-]} A[pR$T yQF.R/ 3W39FR1{[N dVqsV@7To9Ѧ R&HҫYMJ<1SHfeEBE@`J@2rEa\cSFqH&gICII}JKiJ%&LDcD7uyz. s+fK*m&4DORxJ OB?X*]QG7?A>Mm-(IO''~\O&i&QxRWRQ]Nj~J\۲H{UF-BZA@<~6?'= =+ATCvܼE}mEQFII6F]#eV)lO4/BC58 =+P sD!IALzOPl!R*VW4ZbG/[(][HtZeAf[!,f}2azdG{ҹhJRa@NI粎qD1+>먄N8r4U| 1y;.mu߻+(s%ܯ)pU(oX&;mdv!|]8&U -JEe4> <2{ #Ca&2I MROCQXb TX(Yq$3[F^R\O^;uM]:^#جuj8lNd՟EVr⥗"QN;KɐEŋY'?DO:x16}l3z0$Fw=-Wt+v3rM)pѬ'ok dl$6].*Q2EK:49 B,H#+$M~PQT GUb&\ k2^Da [?act`؏b N' op5>̅V̖ ZTyTNtXM向_G-Am긇e<윂>825N;|"1xd/4zvӲ,tsY*frNv)&perl-\!@d~('pZd0M"8iA @45H'yN`z"aQs DS UW%^_!M1a!WCd pZ-d )td` e_,OtkEjƎ#^ڜ`#]՚<V=aO zI0瓎B戅@= 0:47 }03zҤ0mEx.u+.sV)Uqz`tTk$B`.IVpx6H >t<. G%.QNJx']"R+g"zU xY#FaP"1`dS$%Bfe"~Yha"lu,hK#|ip2"=z`L'8g3ܧ-`o)Yj቗TQ䉔SJID]鞊?;뼅ױ;챂J9,el4`|26z!ɥ/Nw,(vt *~LrEjb{ItM!g*\4Pn TL I|FT2;]./1eb.#l/0tu59=y_8Yn|D=6y^8"!U3ՀeՍ y#!6oe*X˔ZbdSD⤔;LG熌踂DQ؊A:>좂:ҡ7/~\4G|<2.z/ڏ!%|?1n,q<;_4 pGnPQxTR3F \;eq|7%m3[/{ ;]?}?dYg>?z @\aLݜ1jаۥ!祝Awa4Mg ]r bVᲖFN乒8I-Ү EӪB{Qϣ?!=>w: '6l"~3}>^YHn] t g˅-zV|9l D].QUQL]EKf8>(/n;0|F}=7)q_o(M~7@{ Bn2"M6_S7Z(Sf W)dq&^q5}]EՍjca5m@lگ_i7?fKGI&ګպu} "o6sgܔ^㞘KTX气xRa 0MM\J1ۏOxG0KqF@o[EÂicDd)B ~k+Hx֥ ~4h=&~T5I A9tD L?eX~be;n(qVv&4WyIXR{IeMzم>a1!ޤ@ת?ʡ Л}wr㟟l09gӊ\呖U@p_7uPiJNdH%+fnJ)qbH9/_5Fc:\O GȨGxK$U3F @{?yK7CmmWz7bg&ow܏3Ӏ$+JΓ񖔻gdUΆB܀B,Qiїˋ|SѤl<[Ռt@)t r1c歕tZ浕cpςjdÀiRR!lgUye2Oy`EL6\Iǯ0w<>G9i` # 1 i>TJEGxU]`%my3~sUI첨fc5ap쬩&ݰߘZʷϥ\Ne9|csٖ,|;h(棕oV^s渕g=Wt l@qB^-gOWo_P:ZL쌄ZLpΰ ^̮=׬g"(R9&˝,!/l/ =VWhI[xRD\:h"7j1{!IFuffهDo,q|m] mx/B[u+^؃yiwvnrѕDh?cb^bskfUkzde_c[U4WRTQ!:vͲ !SѰrٯr)NQٜ-;|0|H7>6LJUwEdC0&w՘Hub9|A$:e몂Xߐ؞jɗLxeY|< 悕o楕gP{+Wbt訐=ix>~[jKތXf*Wd 1?Q^JA N9[RMY}ٳ"!бPPw'Ӧ*9S "BvrEf0kM2\m>-~p[.y`}쌄]SzH`OvPqₓQq}}Hi *Fieq}ӵ#Ե#ش-!Ჰr=1Ϭ Q#&Tb6[8H :fpCY S9P#hb5w~:Jb6dQy6ڠѡSA7Q}EPڶq*ѯ晣h·_bqZo$Tq\=wQ<N'L쫃3J;F̉:퀁 CꃺB~Tl~K@xS|?r{}0%?=&v$ӵ >a̯<"g^.+G+t /9mNJɟNxgd=3jyBAD#OrUhPn y~叟\bW;(`ݹiY{xT2ϗ謋NF{KΆA0΃?Ү} @-F}A-{@8 y>\x=(w낷{"A@|>j.a|7] 5.^ڂ.'*﯁)ҜX{)w*-uS+ZB$r+zso+ʵm3.2j.Di$%?&¦:&v#voԷO d&)3ِp&^?8OsFaX|(jZL"<_GO?HaEW_d9gof+s'i-/fj0gr-ov)'x$_|X#{"~ܾNx6"u #10q$+m$0^k$h%hg% Pf4Đ $:&y;&;$D*ybp"O++yt#߫?@نY>EV\bci c2\Oi=@`DsI`b?W`i61jao5W\!,_!"F%e#vm #qH+Lq r zqyPpzMn5umjsسfLZd ,Jc!a=nb$Đ $:&y;&;$D*y+ #@[w)׺/ۻ*@ nGuZ\c/ `Ve._;p;e@2L^r<__Y*r_"ؑ|&U28?O{"HCS%a9MrEmyQs-kO7ĩ/N6G8$GxβuDJ6B8g<@O?UE כFryUG[@HIZ|IJ6JĐ$:&%;33N9k ]JA_0U+7odpIPgJPG.D O1H3Oy$al9RG$'ObMP\ePqM/MKo9KF G?IJxCx2LA?]B>^ = > .iA }:B CDDVEFTF}Đ$̑# 8i dUZ3l[Z0t?=f;S( NL'L=b"Nl+5fL')f DIORN_1LXMtkIPᎹHTG-²C4ANX?J= YI< YE;\ ^}B >5B##גK ,TOD?[m>֙&@d `z/de m@Q#_GG0G9?&KJ)&9F!>I3NIp%g=P(d}ED~dDcױB=j@7>=2 <<6 P: B9z jɃ88 7Z gΉ8^ i< U? `pAa >:B <6B_q> oX}%LP+&E2P: x:r,B AF0JKN^N9PhL(RY!3U(CW1[[WgrU`mEWb|-ʾu_C2LLy0HD5鸊G>T8*'2{yc.vn,VtX)rp' nހ%mk$j׎#i[ff_("mWP(WL0@&73 ?z&p FWlK*xO P{_EQx'#U +1W-AZqZZQarIY>IۍZM!%fc3 {2Jx/tP>柕$TKqF@ ꆅQ994{C02xFc.u)+Orq(p 'Ym%olӄ$kn3g_n%S2.G5: k>- E"nKzOQ sRR%WI0ZJ A\X>]\#[r\$]$kQ:!fRgȕ,SߖNTiH[A]%;‚F5-|2y/Nw,t *_q~Օ(p#&-n-;%xluMof\"4\ +O4RoTR$RYxq/^R?__V`r_ mUa+A()Yp+A]͇&Zpޙ?WBgPs~'J"XCpq=lBk7~h޽4}g{\91xB.vN,+sг*q̌(ToǕ%l|Vunc(X|n2J,S:=s $Co.:KS$Po XSeTx"\c x.saL!9>c ,Und rcR 1d-auNH3`ݴpYZaSk]K挐?E mߩ?̅lܢ994+6K}53z0gFxR-uz+KLs,(p*&m-t}%w k %]_003S8E8 DA7J,)O[#6cUZ#4Ur `a!-dG$5=EeT"MU h?"rh #XiSc3곥|P{fsT]V8⡖,&Mϑ+F裋@U;}Ɓ8_ 5z@} 2y^.w!+sn)9q~0(pDՍB9?x]gjTj*}^5XP O?tB )I4!fQ_+ V=>%Zud]$S-hNG(1;)jKK&8TnM&sn<'֕sox=ƅ$o^Qӂ2k@Ub1[YሗP:9HjI?BW > ͈:͂r8m3O|r0y.v%,yt3*drJ *h8wt'WhL2[YZlXL'=_Eg_m(-kQ&+:q,eSrr+sntM-Pu@FY_Ll~ט5pڥޣfݭ\H\ҙycSg㋔уKbuD׊@鿆<=nr:QE5C}2D{0S\y.vN,tg`x 쐎5"Ot.iqdS9I7U DH$PJN;@Z/a(.iX_..n09v3 Rx2SsQ{,m3 {P{F psߦHk Q/_U≕ɆLۑB Gk޿eB?}>\Ͱ:f}֨5i|ؠ2zΘ0kUxא.mw#1dxUtV*zr6-a B`RN@MF%YO:a0 i3.qt C6a9|,;S~9wC ;G2$8 4r}B2N{M0yxfW^)Vix5f MAJX6M<@K.X@a*>%i.<&.sy8A=EV*jG/x݊_H٤E)t}`3bҫ/Y褐vtФZd ܎u[XaRE8KW.F鐌C_A몆>1;eǀ^8p~!7{w5=zؠ&"6qϏf(<{|C25Hm@]LVOVCaRL% jzK1Dx N@?9MRqV"|rWɪ.V{ȁ2=eƀw qh?!]ޗҫS䖖8CO0GpI铍FꖊvE'뒆B'욄?폁z>Z}r=={j;LzP/4*gzvK&4r?QbJ[U>TS a3[X$|m^Q2Vy~D^AՉ9^Z;3f~qhԮ¡o>ѵπ0ÍѼx6t7j*ΠOb޽KY9S*")M"f Lꃊv~EGORvEQ벆rDkBAbe@U=}_>^|ƧRBWK:%~3w.>h IB0ZSaU^Il"kWs1G}vD&y0`̙vZg{˭/|(@ߕ99h"xJ0ިrۆnhcp_}剕wV qYAꐊyP靌lI"Rg:GjSgH쒃Lc Flf^~D~ZB^} }MJ1Ct$ (2e|;=[o|G~hQWx][_J! i`\0hz NDCXaR6 5thl\,˸ ӿȡ;{ׁ֗sbhAr=Ci'y\潕{d߆xboGhQ齌lU 쇂dN켂w_K h[H]XNF+}.ͨۥZ~euV"?0)_[Oe]NYNKV/I}"{dF][1I d.;z3E_sKT<䯮 cy,umw+Cr8׸aN1|/ tҚb2ԩՈw=~|sЕFjfՕ:b^|irjvBle^Y땇^[UL=YTvk SPJjPM~oƯ \ū)¦-w- E+e8 A/ E{jNǗl[+(my Bi~DԌH[FĊtлyHM'ٌ̜Che染\3-'UݰGQ t MTHKl퉀IF}DB-`~]@?|>|K{vB<4+n-ˊD-M|.x/oyu1ϯ`q#3HlGn3!m30IIm/m{#D&y'%.R!i= #|N(8T.O"FUXkN)kLn-.)wU)JmNc`jCPoLo8&s!7{=u<&Tw8x0-P}'!n׊p"y*z$ ό|u%hgr&Âo')}=kY~43Y>8Y-XLV(v\T#@I!ģ%'),7 2AWIb>!11]9id KX)SL; UQ@%)UK,BQ%sPP$JdoM~htR PezN`ׯJWNHEl62I-MDTcwO;OOP+$QsQQWQ!P?G!ģ%'K^Rp[&"/]x?=U QDI{(T@H5#BNS,7wO&cE(MqQP6`M zMT8@Ko԰jJAR.GD]BPA@~ 5E[ )G \g:I GI J Kp*K%LVL6?G!Ģ% >"aIEK ,W]&ӵ*5HP.hCwJ 8R8KJ=$N(l:K%EJ^PMfqI>!9AN~Ho.IG_C]AA? A[? 3>=^ vA ECU "ޓD |$E F Gp G~ oG?F! iNHkf/~GWOSc\,}{>1Y GNM`bIO:NG%].M((>Es E,IZI`6ij@E_EDC*^e@> > 6< 3; R5; ѩ= M?[ 9A% eeBG I C> :C 63DŨ C5P4lpM`)}X!)+mR^dTp.j8|UbCVDbG2YgK1#B2DG!:E&HIA}]EVom=f`;Bdt?'o?>; #s=' '; A:( Bgp8 7 u7 L9 <* B= {3> R@ @GYE6m)^^@ |F.0_*,<C E:3ZE!'gH"v2DC# ?=DcKf@Wra?#2ƇF;4@<Ŀ= eF; #): KPɖ9$ zi7 ˏ6 ˳6 5`5 d#9) <\ Yb> ? +@HaY^!Rl&FR"z C H,y^L9 VLfNay9%BP}{l1'QW=@Sh XR{pQTqR{.])Tp;>E㜋BňD>bnX7.:~0~x,5r)o'Bm%@vk #hx"jIf!eغ ddhaUwY$ M-%A4k5 <& YCH HShL/NOrP$Qh[/SnD>VCVUs*p|T_jUb 1b.FvEKL<~Iqg4Eeً@A9,a_2jzK-{uM;+r (ow&Al$j$#i*i"@g!uffpOi`U`3!&[UY)I24;3:h- B"G HL!TPPfS#S. U;r @/ 6G#GN`bQt|tR=!W+]9^QR`Uo^#`60)q,DIttVYјrT㵖LE跋r>ׅS81[3zvܡ02w!.luU+|;s )Kp̢'pn`$Ak#Aih )x|n_ `a'*U5F=8k G (Nz#=Rr S ZI~q*a 7aP'dso bdC/2>w[L~_eyokWMaOi2G}@S4n: l5h8|X62z0/Pwϓ,t*nrf'yn& lѷ&%;kw z9}mc%`u1?S:DL D4Nzy+S^%V]^T~ (ke$6e"Oci#qRiJ$jn9!Z]4$eq[1^@RĔoݹJ#9ڢB}=YҖ85\|Y2zƀ.Nvտ+sոv*"q(p&FnMrыs my ukY,\ 8M C@~FMt4}*TC(.8[,bh#r(LhZ)6l(K'DNn8'oo))pB6 'gz࠙j ܭ:`5WVȕךKYD鎊l?d떆`:캂7lH3|0y'.Mv,Dtt*jr|)]q'+Pe tHt)fw5`V &@RGf OL?o;\U1.$Q^$'e**#k1 -6s(/_Mu/ qNw0: xNYx^̨9o*{WdBޔYỗU;21].fF2*pG{35{ K8N| 7r<:iV u_Ɉ?|\TWݸtٮ~gm~UZ߾OKPٓJ PD諊w?^ϱ>& D;735}N$2{E0l=xt.wi.u@g14;bzl|`'4hmU39^'?M KZB=Sk16\=!eSG IFV S3CZH_!g|G-)vQJ;JPՎMu?PڧwV&.5HҟtDcp'a`VcNTC3IV͚EsʒC1y@σ1=T~l;o|w!:1zm38"ze26N'y <ii~^k%vwE1tfn=W_ QHDJ:#QmP[ZjUQ 2h>W._v<p{Z nzw?qYr2ʱܱ%2ԢsUr$VHj<d HXUOk眓3S롇7nH髌jG{ɉAhYGJbcEO]B~X@|PP<F~$P>}}tS#40Tqd:a Di HL{Bx[VЃ[ek),Et[=벇1[5g"wԹo-bhߒ4݃Bruّ4s͚vn~_ǕaqlU&_aQjQlltSj d[M컂_gJAZGV~VuDO}GNy@;-~kǧs{TZҠw1sp{. !Y/ov:g kC}IVSzera磁*s>=0\{yȽW&fܦ kUR-񭢙rCФ){P"1qnʖ y.c檕jXqzc*qA](iX`ރ_`P6셄\FM$dXJ~SG3}M"Cs2~$M{T+t{ S҇-}|8{ APFYN!*;[@'MlOa>Q{糃[ATxʸ̜#mӢ֖N+bϢ@Ę"w挕pk&_d`VVp`h위*jd _Z뽆ZuTOyVRHRO`NL[}JI)d|LwaXmXn+/Ӄ#98 ;(2> ?.gFʂP?h&6cEq;ssƬUXԞޥ􅧖n ,}梕jKߕc|/j6}뮇Z?moZlrAFTeŁ ͂ z r 桕^̟Cb^XZfQ N{}ɃLXvNOu {Dl~'Bkg|K@c{@H`Fxϱ f̰W!@ʮ  "+%r#Dr]!7|%) 9+R}*pn>mYwyevoUWKmاӘf]L篐lV~苗PfbL을^I튀E#dCa}AN|?^T*{=O{y<; zxG9uw8ouشa ݳK"Ͳ"XΰZq&`dY)K ek"aP+mN1ʼnpPX&Im116:dyqGU\=e`!~W-YUP%ݝJ*Х lE;늀q=gX7 5߭_z8Ч`w95tv8B5as6r45sq 533o4 Vn Ӷ#ӵ3%;״{#/߳hrF.K,nJ/lk{/@jC,yKj+9j & [+%6${(l(,$ ѐ)v]#6z;P'l @Ȋ'AUg$h Ka,#qOC6hPd`LcGvte3Bo1o5 r2otj* Ey"Em|)U~ҜwCqυr!aep"jly#ǻiC%7fgR&e2'c)$]X'Ib'=!$?A'e"NI|.."hy G.iBXyaB.TDXN/0aJDV9{N['<\c'|\_>$ ^%h–fC#֙l<>pP>vxuX/s{قp>"lKӉhq^e{cۿa ˺v_Œ#ñH'ĭ^(1'%A!# C{ !+ܺA+0A/6"u 'LT_qY7Nc'R,D2VR55>xRL++L`Ss"vb|UIuV';Vag Xed,irkilvk=jiܼe>'b+aK}:^!"J]W@lk[q{T#nĻC'_[(M}Uu(lP61Xm F-/U&v@` TX-SSO(;Nx3_58R$A;Va*+VMheSH{SC7SBPe>R NZ@P]h^>`"h`|;.`:*_b .i]WZ9MVUmdS#`Ĺ@&nP(_L qbNO3`%/,ofF{Qd UHVB4E S*.;P%S-GN NNjP!$uNK#O*]LcrXI ~%bK8=FPB ܫRTU%KsEU;Um0V&cU~kSiQ jOR#Sĸ=&%}+g3IxM~3Z0vl5.`jIJ).RGRlN'R1P'SH>Jk NiELg"W4KeWkJu.IvIzlH/"Dr9B qE zZI (!sK lL Mf F7NX }[N mNJ nN pNMg=Q#H_MBxAC9Rk6\V0n];tM7MkK!J9pM3"[3L&!8GH[I!B\@A~rtFsF F#D2CrA~ û?? > \dA DxDZ ޻F F RG XH BTgI1 BIY M)aIe/ɇP5{8<;G\O b8&1za}?Gz @I@O#H"-KS\1JL;bFvO!Dd;zB#BLq`aA=t@( ? Å= '<6 T: %= ? A mB 9MD =9D ="D R"*EPW&?7h @T 7+la&t($tJ_.~RADgl^E7:8G@&DJV3}D?kCAN>Wg? w(?%͐=/į?= q> ^ ?a M5@ A@ .zA{ӆ%Ul<&/"hb?K;5Jf*7c;6EPOAA~,V@t'FH$1;)X3uBgEF9qX*?kgln7LO;>;a$a:{ %: Q9~ }ʄ8H @˹7N6qK5U5 ҕ6~9E1X:d= K6u:\\;d?p"8+ I83*F5 v7 r7 E̶6 Ͱ5v4jJ4L33`Y#73 >619_[i8t,0zy^U+Z&r'nW%7kg$%i}"Eg !%e2 lcٗbBa_rktbqjWl%J/1={7j/ ?" OFRJNhOy Q+u*QJq9BSw^QS~umQRv振SLoa/wGQ@^F3駌Aꠇ:偪=3qz-Tt1)``pA',m%nkq#hj"=gl_!f Qd^|tcFys>k_kD"S',ME47u>p' EWKOMPzt_ QcZ+rVX7 V}N OwWUSwmU_tIW f7R~LA_I谏XCȉ=7듄|7F~s1'x-t+*fqt)of&4mY%k#jLɉ!&ag[ ;d! {pc-]d"|%|W0G: 9 eC)K ]QRY{U5'H]\4\}L_.ol+]v_*r-rH$[iW9PSH|͍@T9}P03z./AsvgQ-s6*Tr<Ѡ(ao&nOm#Qip"i1hc1!FgpUn\ |Cp~p b/,dV47>E l@5 Ke*P;X!vVVl TXkY$ib!2a iKe ld! e[48)|CVl\יuTؕkdK欏MC/ʈļwd0vSa1XwὗKuN?姑EE$E>ҍ9h^"4{|j1y./v˽+)s)q@(6o|&>m%lcic'6c{I(:nl(E^4PI/?@ J]2R])fW{$b%&Hj",5p<0+KpO*mr_,Xt;Io]e; \bIRYhGNߌAX7;T 6~ǿv33p|81$yү.v<, t*_{rj(p7'Onz`o  }WqFM'l^a3S?D J6RHO,X ,4acuq/b'mp_1<3x2dKRv1nzr3}{Wp r&a+jܗ0A_ |Sg˫J)KD/ˉc? :?W7|@3{r04x3.Pv,ttu,vr݃y*^r9};UA|u.tQ&eq3Ve>lG Il}:[3Q:56X7ac[&;)o8#46}?N7<p<̟Hf5C[ّn ۧmau.Vk:>M3F݌S$B ۆO=,9픀6p~m3{ӈ0)y0wMy.vNq-7uL%Nw4tu&Bi')2NdY>J IGm>P?dWC)dXC*yrFCN7lGN&aDqL1G~MSK;͏&@S,oeNZ` ֳRPH蓎飴D܉&@5LV=Mʉ:#8P|y,5~{4n4z f2/Iy a;0wDH>SZuԍH&L{$m1QJ\ E}Zi=>{`9n{pYJ6A{&R2{9$g ?#q0CkaS:SR9 Eɛ"`Z7>7sjoNyg$ ߥ?՚y૝.㠙m梕ehĒ^_x WHoYSixZShfŃN}aK]I/Z@ }G[V{yESyBAPQVxw,~N`ˡm\F&v*c) )C*W |(^;O40O3s0Xe΀CycǪ^{mQz1Ļj.l^bG桕ZYWߌRVސ빆Ṗ?엄9J~쾃iHy_{OyAzBqn}&@i {u>feBIy?FbYvz>_tfѯZ .vd\<lv|"̍$ۛ6dJ6 .tԯI&beR49| Q R{nDԡof>i g4ԋĒaؽV}TPUJ߮FӀCb}Ae{h?lKz>xx;օKl$q y8QcQl8e_ 4^$Q,BaHTdD4ohj.Cl2 j/#щn-XpZ%uHYZy {\zctjqJp$ɢl4&i! ce"Voc$:ga%w=c`mp!&IP)'j҇&&P16>c7 ϐ 2,[h AhdQ^v+OM|3cTHD>{T>KSRR.8d_XL*}EY"p\A!`o : գhOmUm xsrpKD)CmL]%3iZdTbi`$^2 \8B/R %s((p)gWv:I}?2|2C2?3n"# GOT5JN!Nr?v/sL5S'>Jn,.KEJZPzQqO}(O\yP^ecrghyRU+h7s=gdJC]f)C-aٌ1]V[NuYTʎ>XHì:l%(q jC+, BKCk$S 3W|Nq;YSP[LQv?DNQ@+3>M(,WPBIGkJtNX^'LtTL7MOݯ9L nM U Y~Zm 7K\! \H >[ D?[q :nDY߶VoSޭS^R^è4~i$- #3WTLFHҁ9̰b)`1h=jBTV LGHN786Q#R7J ![ĩt"?.zG=z0UG9I*J9;oM`+VMi5OH(tBCkRCli_>PDoB^GgC B A, A $FM ]H QyJ w(J SWK PK 2LH Y,K WGK|óV9Dqw4lYh(Ap.6iq 2y8G0Rd 9H@E=EI-K$.F25F&C>;mWD?Sn<>Y->X6@ #> 8=qsD<Z=׉ABjD% ;>mER *F5RF,G/Fð S;s_?{D**P }<~\/V<;N(RFO2cH*G)1 A=9)?;E=+}_}6in7 <}[{; O;= 0; Y}:D9g8}i3:c/n<>.n@S^A.=BA>B}*wU4nr*g\RM)$')_~<jQj0MH<@=E,E~(@(P-"@b?7Q6$b9V,sG56c6 Q39M pRs9 zˊ876v6̫5Ѯ693^b;nw9<6>ei>J0&>;8/m}/\QDVO'lj6/)#RP!Za0rw9e;=.t<(W=9J|2;D5'P]2Eb1Yx1'2 B5 ͏6v 5h͆4̓4sN;3?3+b3UvT46_8]9z+:|:ا.E<Jc@274&Iq4z, v$I%32>4g77 <E-682_F6]U0 i2 25  Y2P f2l Lϰ3e 3 Ͼ2-a2g'=Ј2N1xS 17\51P 469u|:x:e\]iU I(=A/S0}P8]# ?E bCv%F0GJ8L(.J9`KPJn kIfqIqS< e0lxx3z|  3C GI|)JN&L07MHNM<k_KlLUժW;$5Lka8E8:w5O~/w))'LZ6sOHAMO kN#}N<[)tqh+>K%R=賄j81Vz p+ xr2&Q m#i$"1fE!'e< cG%al`ֲ_!Ҁ8^}<WsnsaN3_U^'$G-09P:( AB2 'H7L$NLpOl)R}4Q'L-RjnQNQ`0Tx"DgޠmB~<@쉃 o3{^,'t(Bo%fSkJ#i+"=g+ެ!e& `d ծ=!bJaeSf^*LK~Av'j?]I#P.@61? Ar" HLPQz'U4j43SJEUcj&TbmU) f9NʬaLIkGlEB㋳>Mc5}.}vO *gq?R''m%~kXk$iqz"8g!Efτ ?d[ʾb _YA  ~erf rdY*J$4:z?)S tH= M[PxR!&X)+^2WJZ7jWXKZ%lAu,M-玒@Gȍ@ wt8r#h1( G$\N, QiLTE#_^8x/1]FI`s\i_, ,`-tu9LԒHTPjK>GC_|J;Ă4d{s /ev,sf)q6(ogɛ%Ikå"hϺ`"$g!pfk e/>6${]obbm(2T63Cn>C4' XG%NyCSJ!fZqL!jd%3f J.eZo!Aj#d!=f>5}fWڄTY$NeB4F{~>87n~Ֆ2sy%.Fv˺+'sƢ)pɾE&mq%pl$j#i/!NhN!~ &k}Dcqd:'W[3F{=72 G)Ol#U-%_]p!P!eh.m* 3k%%Ili|$ljr%Z&l :>H_xƛ WᙗhzQÔ=HIԍה@$҅:yͽ4l|/nxn,u+bs,)RpL&nע&>]mc%'k~$:j. wsgL&YU3?IR=: G-No+Te(2,`W($uj.4qA*Ho)kqU+vs;0I>ÿ7daj\ܫU⮕ԷL6,C4}=X؄d7w2{{ñ/Uxw.?vez, s)qؐE( oa'q.n\&6nL_ r~|")zO|vDi&%\ 2M<< GK0Mc2T11_3&ku12Qy:9BK]}1 lzz33{93Ʊ~Q>:c~ b8\YdbNb˜F4JL@dž\n.S~@#EH2DJM8;T)]BwR`IjuCꟈsd>숃:=+t6~,3y|~;2zu1|wk/v3e.gu7_-7t-5rrO**}n&ip$E$bbkh0UE.;RD DDKhqIS M|aNaMh'XoKJ5 ~$KKK8mC5O~{Q} MۋџDUBb˯TܖLM"GXvC!.!?`vlZ=_}x<4L{lC9 zeb/6:zMZ2yTP0o[yO/Tv?Q,r #u"Htf /Yy7:_J CTHE]CQga-^`b&n c6 ~q\TMg*`?n/!aUcaũY\`sצpf|88\$]@S&4}#MjZywFʉ]oDQkB팀eNA/"~^>{Td94|M6|H3|-Dm2Zkz|Fln{ӎ{h~ m-],8T]j C>lEy*L*Z3<"jm6{n{PֆXԛul2gu2{s 孨g4ϯv̥?othYlYLb`?QfJ|lfLgaI~^G,kX0DP}>N>:~JHx:Cd~0C 6t}t?3} l=v/B]$m8GrU,lbm6p };d *AHIJVS2)!ae56:tڹQQrlK3M*`ޒTsr ͳ_}`zfᏛLPrÒs]槕AhpB[5YbKO ^M&.[0K}UG5}zMTBq1~=G>tt}B:yL|?\7|֡7ivg5 . C[xD*cl3ug7-~ ;E BN_JhY Q[;ᴫ5kIg0OUv.i٘\w Z 2Y(ێCm~ur梕irefsak(]i=c]6WAWSTʃJTQ?5OL~'JHg|EE|PAcAu{??^z`r7w*x/c$(dS.T,7e.¡G38a ;Ċ1Pf4`~ֺJo8c6~% πΊ& ,8¥l8jw| l)foa*~dWsS8l됇mQhcLbd혁JJ_/GZ^|F,WeyCSeKx@XP)wD=MuͧMiOiZ6FŖW揎nJ%6. "B} N*x 03HG!8+Zma>pKRZ~Fv}s.\eE bl]b畓0Vm[闍QZӉO:G̃ ^E| KAw}@lq{>`l-jy=ngw=nd*XtK;`r9]Xqg-"ݦ ivl1 6ato&j 3Lp#H0A8ڵ"}[7-5ry M|ilϸkMd~䉋b{_ Zx`*ma[HhQlbl;U|8xq=}Tw<Êy:8wH7.t.ٜs#0Zxɴv:r Xyn")skh%>g'd'c'c)&a[>b0״# ޳$@ұP!%%?ޝ'F=)HJd/$ˢ\ g{,bWJbO[]u`C]3VPHGh:ka-<NJcT3 neo:ّ`,hW+,Ͽi!)Ij>!iOhpw}~t5׻pw"pQY@lGlh#kne aߴ_!E]#\iNvJ=%$[n)ºQ' g;&kfE(:g2J`v)WHOT_6D?=oPQ=WOO$eBX!Y ]> >7?*=2F<գB,i/E4F~5BGpH kHlHAxH(Hbø$g~) H&E &\-`+W\4?[A5% DP-XeB=,!>:3)=wHG5YW{0w Qj8 SP9jR'8; U:Yɖ:ʙ9e9$y 9?>=?@3BqB0CCoC΁X!RT$vjBQ1`@$,$Krh+KR72'B6yB<)z?,q;'x3:<XH7M W1 n>5 N6떒4 6j7xr6̔6G:̥5М6{9* z;$MJ=$s->m6'>:;>[@$$n,+Gء# %B 0 db./Y=:a9o= 9"w @5&#+;Y';376oG0 ]3z q2 T2 {3@W ]3Η4= 49,3%*37ϯ3t{7\36^8W9:<:c:!hN۬&i@.+g&`[ $|6sP.490 $6B=pah%6NI24[:0~kK.L 7`0# Tv*/T/iR0cJ¿10:1EѮ1zP1[ј1e1Wll1ul1[!739C5l7v7A7^/;_$E H%o*4znq*mQ3BO/061A<8MM7''O3^5#0~ A^/< fQb/; c-j z- g0-G-u.0zԌ/zK/I&/Ԑ//E&/ ?/vf1^/b4`Q68y8 J>.AJCE( Ia"xF5\H"R/ME;jD0dElM1i^k)m!p*?zq$(f+oI$Y3k, eX`IB]1~VKHY BVisWfVX#vj/>}5KD?mJ?ꗅj9Q1ye!,Js)(woڡ&dl֌$jҝ#2iR Kf6q4{bEa߳{`=f`~rieUpX?'AJ81:@<( E \K/Q _%wQ1 B;P1E( TKQ}/:.QW(, K\)!2i/2q2Iv)j qi+vsLi/{/pwҢ-wun+tz`=_{6|;R!›JԷ0B鈈>xh7G~>2{FS0y/wk{-us,oas"i+Or[c*q"^*5pAOZ~?~psb}g9#Y/|Jx9< BDh%GH(P[Kl#jqB1{1EbHe3EWiTHa8#K ~ׅH> ˼XൗbNےEp@) U7Dm\&L:`@7YG_l!ik\2z@XJDž0[.k;ZC(;\T@SHR\Qߠ^TCP3J霍oWE\vBml?~ e>X|;_P:8{T*6n;{L2{aI%1?^ypFd1wE17ttBw$lid2|Un}p)!PcX-V7a :^o @zHRQSr΃e|-3 t?Bu)M~eqi VÓn֋Ƃ2nila_ǻߦq ܓl[^jiKJ)鮌fJi`yFZC~#UApz|J:W~5{=t5xh!>K;?x{uLrm~*v.0 _>93 } 9n @0fSF236cjޠJmeFvQ/,~ԤFYswք~{aq8ma\牓Sjc\VHVR RNMKb)}GPF|BB)-{R?Q?zG=5= x;=v6m1nwTIv'l%"$;P#D@ 38iHϗf2WfFkfF_t줺zyKypBdp&o5{d`…誐6b (RUpVn|}IEbJ&`i{E[f{CWJ?x@S#w=Ou;L=t.:dJrcޠv/j9J͎`Ψ() 5:ӿ %yEj>>)dRÁ:2g4Uy'{ŷpKwmz_XQX8RYMFZgA0:n~H|v˫{<*w:0yt7frw5qF5 )9o33tn/{xn'/Fum>.pl.8j=lé$ J.ԦWR43<#v9 QGV;{M3o4y' 4PeSr?-kH]ڡ@uOvى^ zPJ}އ|\Kϱ}GܰʠC)B};ISw6ģ"s8,es)rH)nL,gC(jy+7i*g)f*uh(Ie(Ae\%%@eĨMP) %*q}ߛ 3>tBc>o Y]KO|_ 52|S\#FhA2t;^Ss7{s6gtp8Ȉv56oژtS17o 'zު-m&rnr nq/VjX6Idf"Pngck$ަ-m`d$z_$_A$0_:ikղs+ұhv!ǯ)|"շg&Yӽ;fWb5-f;Xأ6RK,_n @_a0RmRL,:TKjSEHGEP9x:+QFB09B%C5FS!YI FsIuCmKJ8IQ/ rەY ',\ >^yS]]z]\ W]?X TRRϰQvPm u>' $58,4(7dA+.Hf586=HdEBr4D,9+cH& /9t2@x #WD"8)2fW?"m2;@A aDxK OuFoQA/R`sRr ?{1x>ӠCx@ߚGiInJJ3aK&KK}I,G~"w&E O-f #&#46ڠX a`f4&2Ds<*E(X D$?V.)s>XJ<4,I2e a765qn38M09=tT:Wʧ:9|>=^ABB DjDOul?E[+E 4EW9Dy1w/޷!q$#vJ \zX"U!Rv9062>u6 9(f ; k)8Y 16>s3xJ2 Gd3{|3p^ 4oy5 ̧6w4675h59;"[=SV:4>;IlH^*,MAN{%k6 (6 :11B*j 78+ \I*1 d[+No0*|ֈ?+ ա+{Ÿ,!ԙ._.?.k/0{/hB^/ I/tܦ1X_3:-Ar4f2,5V5b5$׾'ڄ۽y%g!3Y2ix ydY<'+l0(403 !m/')q0(c_:~(p kK)_%(s(5(} )2'*V+k{,'>,c-n؛-x= - 6-%.1Dv4TG&55$B5l4/bZ;/N!A)1S0"62 <g(>RI?@9EUA1DBOJpA}g7?{?8H=[I|V"gk!fdZ_)7[CXK9UT8SO0GR#2RSR`QQtf^l3@b=UdI+u&W:w.()B5U!N :k @A WB,F+hCD1CD"IC?gA@B+V]J5rZ$Ej#i!1Vgb*H^ZK#2XWVTGtU}e TxASf2Sit/S^_7S{t k:]OQ;"Cd+91)24(#Z ; ACsZDftGzE}1|FIE8gQDkD$M^_&yֻmnt%\5k"ei)4d_P\{dY}*Xc$WeK2VE~U[UT=TT}zYw*0p&K\a&T F*62%;7 ? C%E(J L1HvHGh!FFsP.co#)ڝp:'nG$l(kEM!/ fbT\^[ZaY7XiyNXى;mW#ԱVϒT#~j&xip|FblVg HA)7=3i(<;9U B1 DjzF6LbG!VN1JHJgI| j!g!f) y;dVc-bbJbapaZ y%mP_}yR%C04;%!C H X~OQ!9W\u`<#D/eE]a gr`Na.8>vK!4FcQc~<|-e8{7ֱ2z=r-{u_(p&l{$k#LipV"*gњ!LVgE!fz!$qeL!6e9 o|(o}lbt@zU<%=FQ/8Mq:'NC&_ jH)eNL)tW#!el])0pj/+>F^p{#gi##oj''j+9 k?)&j3AYӘ=rC6~j /xo,*t>K)jp飒'o8U&}MmΏ_$k$aj}$'jt#jrm#A$i, 6NT(}r>4e~X${J//$;9.JA3 F9L\>5X0f300q 3Esw],i2sL2'qi8p07Nqߢ0%s6GŐB'\):됁K3b|Z/hwݓ,tY+.drޅT* qzC(ppo'oh'5?n;b&rm9]&ekiz 74cDv"jO\#~N/*?18=5>]C 9CEKLXGF;>W^C `e;-w&@&E~L?aewHCQjuFɵtӎCZw9a{ ME_xFL迌MH?쌃833+~|N}:2wytZ0w&kZ/ub-6t+\u,\rwV+pR+` otO@*{m xMfFz oba|$"2S)-D>6KP1:TVp d?[HT^S[=8d@U/~sgTH{JEU e݀WҤUi`y*X$xtO$}˱LD؅`:1L !PD뱆9@퍁 sk=|$e:z[5zU2ezN0jxWJ/vIe/LrGo0qEK0go &>BsRf!9Y,4Xn3cjd5xqz :{] CL\u1"l*ډmHvtdjd{iyشhzm\|Q8e_Ē~QCnII>zKhmG쫃`.D,~W@)|Mg:Q~0H7o}B3u[|A|2yA3vVA3ls?2r6p o:&OwRlr^>+lg.~|06p5 ;W0C_2Swˌ1c=pHnTK~bnvE5?{=4xY=34u=5 rqЖYU|[!qF0g(X~w'~&4) -+y 73'#_J՝1CZśGRe#c$armBց?tB~0{~n s9rCr1桕dd|Tkve![V%ATQD3NiK}IH|qDD4| ??z{=W> x;=vY;p/}LMJEzD됰pA,{;x9'xv7rb>t6ls;3fq5Oc|Tn3_mK1)[l/Xlȟd'[!st0VI!Bǰ rPS[Z#8OJ6-WѤI81jal5Fp_Qc\u*[ĚMwIYFѱ|zhR Ȍ{EῩݓ{@Y|9Bu6rr38 o1+m{.l-xk,Mj, z%j+t+if+|n #!֣yw\6Vf4KW B)@?ZBm0W#:D #2"C"@6B%eY>sgGx;EEG*I sMDR44V@7WX(!@WWS 'Pl @-NliaMShL8M+ ME\H#@$bK9Ƒ{fLZ1EgF@R*0Gr)z.C):;R)!1+;%D3V; =.k: << ni~<{&?EqU `J<nLwlM{M^Nv;iN%wDJ*H* GX * Ma1ݶm&%rm'Ӵ Llp,%* I"52JA1wi=#w@ ?1!{=K38A/)=17lUk1l5bЅ6 7u@9^:AӺ>~BjE,eF]5F8F!,F`FeEcdCITUؚ^hjFҩU(DqxU ]jD.8b 9I3A8 @pU 9/27/ G@1 P6\?1rBpa1;2).&3y5 6?O&62Ֆ8w< V>vC4*?@??Z@\jAO/7 9M:c:NC{O6"0 S+h E34N-f*)nQ1* lI?(Q( re?%}) R)*@,<-|@.)Q./ Up/+/2_L_3SK4Q4cm4דC%!u?ϷEC ?QkBi'C#$X(~(_=1Y j-U#' #+p(k ^r3n( zC %2>VO&OHix&a1J0&E'T?1(k) _*/)+ھ,u_-` -S+-i.0$1&202W /tC@=O  K]X }2k%+A:, ]$/g F((<T'%e% +-&7 6% H\# EZ!m$$ J"auw%0cA&jR'bp=(~/<)%`*k(+f+v8+N,@/h~1;{2'{e2`}dfH+^2QE;-$4+"72+yi 5 R;[991d< <03>@EIH< fT9 q: @ /rK,W,HxXDfWF UfLmS:0 ?I >p4fM;X<GBxbN*Z 1Z}*Y.mW\ UtRUPsS4yOKO]O5O5 O(6O9܊^Nb`]h`XSgvG!#N7*%;1 67 |;~:B>Ee쿒Q ]6<]A[=YPV!WS R ^Q7QKxPP,P4P"PcRYkaBTHM"8*a&1/6$> K<`;>w.CG/BdIAf?P0?JGA*q,17@> ?E^K@NY0I>GJgHiH=};Q ,c#j">h7 f c7`z^W\n_[tZCAX~U6mST 8Si_loshoZXNS!+>;,_/a1v7s?" NA|HN PJrf1ZR^FMSgIMQLEU況W{%0k|!'n%*l#i"x/gj dޗobז;S` j_+\EX׺3?XRWbYX9OWl@jrY2j]lP} wCG)2i0!8$ g> CR Ki6Pu; QE/W2AERg\QaQ@%0_j,{t+tm)p'Gm.%ik#c h eybDž4_}~][]7\7;\v\Ra\!nt.s<On#p3_S eEN)50#48x>5AE: KWRR U.X\CX=fXZґ1X"h;@XYY.4v,sP)pN%sl"5hG idɴs Qccpbw7aA<(aDGZ3`܈^J`IrPaqu9pIbUH(09q0'7"4h?$h D"K k".R"_Zf!,c$DfeS`;T`U"Ӻ}`u %S2aX#"RD`']@1y{-wui'fn%Okm#>{hW"g›t!fH fG\!4e~ !eLs* dl $e tg yes)fg8YxLG'C:2B,270o=k1. 9B?1CI)m02Q&`ll'+hL*An&eUi|+f?g2f2Vh&݆+ߞi'л:jA,r:an4>V{8_zhT4*y]0wV.vRU.!&tN-q7J - pBH9-zmE-l.CB-k~4ug_Zh!OV+^,kC.u2|' 9R-Cgx9Rn.tbfDloqd#`pRbo±(doVX=|@MׁcQ牓QQmkNF}r`A@C}S,:"|I:5|C2{C 28y+C]2FtB:2rvA2o@2,`n?1lyy4Jn&jxl^ E_n%rSf%z`&))̕-Ǚ T7xIG^.Y"~Cdw]kt|@mpsމ"fTsgYPs@hNJFy_m:_LꥉZG~Nd@p-~iD9{}n@6}E>4{M=4w=O3Ht=4Uq>5En>4ldAZ uR}q@cswob:;b: j*9AΩ'-O⽛5AZ0\bMry7i]*szFxz~cimY`kj죄]Y酕SPP~KhIz[}CCu{??z~=>2 x;=v;U]Ziv=W,;s;0SrP8P>p{7LMfn5Kmh3~Hll2 F~k@ l둾6 {8flw~RVaLjh>\lu:ܨ :p2P+㲬R"Aٷ4QTYclKkfpZe7m)lodm߬rnUpv G7zDќ"~?,z9}C v5}sZ3LuAq]1o!p0iRo/dmK.`l-\j,MYBi+VshG9 LҖg*VZhz[i~AǬ<x.͓\\ߣս[3 ,%!@Ś.Wf[Ag?YǼ6]lW. npUL!MqzMrAزr7 -s4qF0>m,j*nh)g)f(f5(ye(seB(le(gkd둖5 ߚe/|`jRib~rB@^Kkwiߋwrې]Ŋ]օAf'XR|·7dHTgCЖ}kNCvѾem@K p: o@1l+Ĕi"rihⰥ7h6!Zd#q`$d_# ^f#o~^#^]#^<$~^/ ٞOS*L"(ɧA qՊ 0ٹ%@ԭI~VE_MC .QpC0PpVv?23_3܉La/rd0*Jf2vi-jQ*!eL XcLuf-g%cs?_5G\Y=';Vo/V2VdFV'(.Ȣ)@HfFhW Bk!;ժޕ/Iߴ2.G+M1j#XC=})R+)R)Y"EHY?!`l/Yc#N8X"_\#c]\^T GFb֖fc sI_ \BXT}$^SQ6QE%P'Oי-#2P. >1W{h'2߈ 'QU+c+0HQ$=+?4"=16t2B&A E_L䇈KqLD:NJPMS DT[\ `.[qO XCy6T iQ ̒qO|~M*LrXL^ݛlA&˿+ n*۫utI|C> MT;Zg8r"HSm58Y@6*s>'18%J9@6~t3Zd?k9yACE =˶JݡLb1pPNQ|URFQQ8N+{lK T/UI XVHW-BHd NO hn \Ľ S KAe$BE^y69A@9"pj >z"8.6$2;5HS1 l7b+8 7:z=Dэ?]DtGBgdHMpIIy,I)8~$H  E`C 1CYʼzLpr ܛ vk rge!A%9234a>V9e y"j31/ >+oQ/#hf0d1M3TL34 {6L8|=@@7@1,A7?4@~K B=B|#SlŊFPk ۤ3_jRfy64GRu&3@-]$X4lY7 1Cg,+k"2*,B(:V,Ej,{./]F0f3Rjh3SUa48$9:U;GK< @<Fi#E*Hj, + - & N'&M L0& <$ M4! $b"(~wG$qA%{^' J(n1Z)lݓ+q, c, ,MY,*/S0T110AӞڧU L j aq7! wx*UK' J& 5!$ O(& i3J$) A<" Q d! | $* }%t&& wě&Sf'8pN('>)4*/+%h/ݒ+X&(ޕ+. ;q/6//xkٖ۲Ǿ߻hN w+Ri)+$w(" l' Tg$i"%,$ 6"k ;E! nW wiD#~$4s%}d&/h&p&os&!oK'c\(R)5L)EF*G!,+g/M+06;0AkFKAW1"":*9/3 k35 M5i 4 Q4 5U "W5R 18 H6= es3o _3Wq!99VAL{ ܹMgM1}LLnLyK4O/Jo]J~K* JNJ}IyJTBqG5oKq~B2"#.*P/0 N5 5 4 f5 6 S 6 +09\ {H7 e4 υ4̤:KDCsMubNx}C[N M?MXLoLK=&K| K?K@JQK#sK/D,ZH_MVCKm4 "$%)/ t6 6 n5g v*679 /: H9 f6l HZ6*p4;ʽEh3ҾO:n$aOvO'?N N(M;L L|)L|Lpf6K:n{KݵG;KA8LEB/ISZ8N&@D5"%G~)v/ 6 6o 6Jj6v:K|=Q/\< HZ: f:84 ԇ-8 B>w^GX,PfPs:PkORNM4+N#qMRMDZMDMPM^ouM>LyG.JBO7(Gh7$"&\)Dl/ 8(6 \ 16 7R78&<?/<>pvH< fa:U y7:.@XJNIR]yRnQPp;P54gOZO^HOJO']O,ܱVN׉NM>̋[KH#K!)PG8V"g(N6)j/,4 / 7` 7_:"r>A/ @|]HU?f<Bh<RC QŏM>LT<+Ug;5S4vxR5qP\QR &F^Q? P5P<DPַ?QBNɄeLJJ NRIll;"!+)0"4 8E ,9g|=C'BpD$/nCFC f@@ioG\SE'yXXXRuVny%U1eURMuT7TUSsSRi 2O>Y"M޸ ~oMNMcPULE>!-)v/O}5X: =vV@E)DH`/I>E FFgDD+^L+΂ZA]3-[72YZM.NYWYx~QPRQpQQǥQvQOxSnWN@!t0( W/274tw: >l C HKx/LKEbJfI\HQbbb.`l|^Xo^]H]P]\`Њ@ZAV]9TTE"UC^U UtVpRqVYQCDi 4:(#/B4:b > DX"NKjs8M|/PJCOeNN,N8?>ZdVNdN!9{e!e dq\b6^Z)ZFpZG6ZAN;Z a,Z@[[U_uYMZ\W;T'I9(.'Y/{l4"(8 s )> DLA}nP0,V)@ZLeV1֒U?U! /VW0LV1&pRmwX$k= f[/b`\`y`7p_^_^_{v`rVo`Ji`_Y5c\L3`X8bXs/K=~',>M/]+31 80<* hBd$WLKb"%T&^ >b"sb8^4&yw]WT,_]=~-Ȉ^"~&h^b.+1t'pn$kv !gq* fw e>S!e>w5 fe>m de1d_dZ ccm\ _d4\K-O]CH'E4. ;24CX63DP7Bp ?G= IT2U~?'."e2~3 =fm5^d9[c=ob˳;7!d 1֜i'pm2M{.?u>)p&KJlx2%Nl~ov$k^gL#k#_#i2Z)#chT$fEN$fI%eK`djhbaD>SAG%Fp0*MP*IqX-[3`[ 9+W CNPH(_>G>fmI[j2K fM]f_PF l|=rǡA빆vz<ퟀڂ5|"s 0wJdu,Q?s[l+,pU* oVQ*#mL*=kYH*&iE*ShA*vdhD>){gdnh)n,\gYAoLp#Yt"|f"rP"z=$}j+ }5q GaeX*V_M?Abm]pYXgֲ^z=f_%gKS*rI~WLꊊ]nEw뤆fTBq~U#8E|?Iv1ny F20uE1rPB0qB0_n@0|l?2/j=?.*i;&-KhgTm3rk]Yk{CFaАha<ޒ)%@L=+,N>w>Z-pXbʥnv d&ljY_vpW7ׁEaMS_dLe꣉]gIaeM?<6~c?3}f>G3byX=2vS?4Ur?<4M6o>3l<2\k7Xhdnpt5nz[vly9mxj}Ŧ{5X߷Hx Y*ye&Wdw;E\r9LWz2o7TiunF5PmS2Mk0Jj06H>i.EVTh/DufsHZy_T$ʀEM/}qpxezV4{TlJ(kuNԑ¬ּ )82!K.{]I<[kb cxgզJg_xjPrzmoCwr9= xw:dt$4[Fo-.zm-vrkX,mjh+g&i*b`hr)^qg~(Zf(/We'Teua}xQ*0Hfm>b_Hta;jð#߳qդ)gyOɲ:ť5{,N-b>2]W-pZaS55geP'>iSHi=tqyh1el/ܪj)w~g'ndi&^2?b%׈Yb %ga%}m\a'%vY`%pTK`%j2U`%d`wyTAMY? 9s$_$lW.J7QL#^3sԀG ?ޣvZhѤ7a#O/J}4] CGBOQ^h?hva?ݥe<7fg6rle,nˆc'4bg aˮ`Ц^ 7,Z!}s!YT :sX tX cY!J7Y!} YȀIo? @B(9+2VǼQՐҰ?"7Lo~_Ki@۔k9LOM(:M.U08HW,ln[e-۬7]/`)a&%]ۢ\<^rt^QZfWųUSǤjQ$&.Q  QR1 u&8~imH\LNS< q ;xaSG F9;PG(P)sN $AP$NhQ'ՔoS grVרVV)mW# Xֵ\JWc 0S ?ȳMQ@NiIMM=ҫLPcL "Aͱ8ȕwЉB Qv o $d,_s+yAxr 3H&Au,)Q:N=? aAid"F YGEKP[N |P|QD R]RCrP2U#M ҎOJ ̭OIPRCHL'HG8 Z1=#;ЕAՠ tҙsŦ]ѱN+e8 3iKzFO3)9^ 03"Q7E!?)4E ?0]2!t.8_o=]H@B!&G3iN~I,pqVHsI3JqJ1AJ܎H#~EW xD@ \C ʼC*q{OѺCH]ک ߲ ˟  !3gqGO%Y6l-""x 14x{P3'}(/:k+S- m=3㈹50 8Uǻ:pО;=%Y@OLMA AVB%*AAr?=Bl=S{O* 6Aֆ(Q @ QerB &2S' '2 1o#%V)/'a:B&*3O]+Zc,T,y,D̑.aL0<j2+7 3/ 7O98:: <A;x; ~!9J8a霼oǔEٚκ#3k0 I{`%B+f<. 0S-i '(&+ >y0&F=#V?Qg'< Re%1~) >7*,`A.s //3q(4Yk5^5r6B 6BM63c5]2#WRү۬e(OƟ- K%.\P7B"mKC,*. <o' -"% *% 3$ B! V"{i%.p&#a|'VB):7(4*,9 ۗ-M-u/qK1(~2iz 2%|2Mz2z1*86wA٥>ܕ ]FM“Bs;'9LC (r&(I$:A^(I G%)v"& ->$i 6"% ,G g[,!l}m$$x#)~'%v &=^о(:C)f6*+3+5y+b_-_`/Ch90e{/_.`/8ٲG]c݈ i͢$e-+Q(,J.,|')b3,0/w$k")A- Z / 9+/q / 0 1! #1R 10 4I/# dA-P - 2*9wˤAَD5E`FGIFEF/6eG=}H#HK?^HRYHHG>kRG( 3+S -1[h%"d):P.7 + `/ "/ 0 1 2 "i2 \01 H{0t \di. / `53gv;7CUGEGEFRGIH+HuHoHg\PIa\jNIP5HN?"DE}4F,8F[r6GW EIvHI*pGI9I#H=#HmI9|I,)./l3=(") {W/ 060 ]2 4 4t pN4 /5 cG3 0en1 1˦6ݼP>тExF Fq-@H8Ek?f<73<2~Ar&ʹJJnKsJTJL]VNyQO8P8O9TN`K$TJJC0KGqL8' 9;?]2%N$z(.|.2y6  >;A~q<3%>5A-CDC5"eA-@#۳ElэN}ORNIiM$\Nf|uPRADCReQ̓O'qxML3|iNFVNΝ<:Oȑo#_Q;g=-?CB5E'N)'V-515I; ;=MRA4bE,GA{H#eRF|8KDDJ ϘENZW/E0C7AU_P_W7zWψT_&Q>%P԰]QvcQhRJYT` ZTY5Vb>@BG?9-)`'C-< 0!HB5y $8F ?n{Dx?|I+J@MdWLgKrLa5MoM+7M9p_H;^<[rV0V3V,@VΏ;~+W.Y{(YprZh ZBdADiAG:lJp=.{&])h+/o/q0m4O0K7(o E<ED+Nzx5'iPDH!btJ#M|aO~CShH XqDc"M?#qU #YzZ#w\&o[G.]U7AHGC'R!?8^#ˎD>V^e'FX|-]pKIR\wCc)\:9jN*.q1zy-um!)q b&lkZ% iU %IgQO&f{Hj&ueC6%e?/%?e;$hPf5#f OURdTmsYM Tea]$n]u{~nTvPz(ziN=_'M(LY:WZXT7]Yt][E^'P7@j F tro?6n|xh@~%X!8p{L0{xH-pD.lsB:.Kk@I-#i<,kQh:=+lh77)Tg5*'g82"&gT4UQXC=]E"U&0du&@O q Tk >~5Ev'?Eo:Q-jSlXip[gaB"]nnhkS†wA^K~H\wINM@r.~g@5}h@,3s@3$ZnW>O1l=1km<50EBi6:.fhl7,g4+Spg2})g\>Zq[faex=<͗wt =mW2|ᑧ4, $=)8H٢CRlO}nMXC@waop3nl`e txR6\d{NVZlHN;w|S@uCy;:5B؎`LM}ꍣeYvq']6d扞dTք.lF-~3[s=xJzS:amv8pdq1Xem41/T.jJ.PINi-M7gh+I*h +Ff,De%,wBds-@crNkuUw`M}F W.ŠEG8Lyz{|N:_&Z7H z~/W/iCv{NE;R4gF]YcXq^Zp` Ld?ih2{m1wm9+ÃC6j)=x[fD(p"e*'jdt'iec&l`;b%\_Ub$%Xda%Uha%-Qza}8 X2 8(ʐ'KWѫW㰵崱K ׻X1g9Yƫܿj2-t(E_;GRBS3U(XO`(}I\Kd`k_D#:^9 G`$,.c-(`d%fHRaa#7]"\w"_}\:"O["{;["tc["n["hh["cc[݆]#ʌJ N02\J1&0ot^̢ƱtMFLҵ }g.] ^FtB0`Uk?]KfT<GrX;q\ 7Ƀ[02ɽZ( ƢߘZ+"}­ZhoNZb#Y"0hV3 S,R]S$݌dS1W,T>΁L T|_Uɐ1 FHG^)pʡ PAӹ-KM \d+g0H+tkDb8'-@L,!DgN)^jeQ*%T*%DfWh%~)U!/ܠR`uR+U %œT0RI%P O~MLsGL3.MK?^N:B= 5|?% DL"]£F2/YP ry [O|? 07 ޖ?%ޔ&Fj=9GeOJonLAmEoNѭN@K;M4 OhqRQN d̀7L" ǽ?J~,I%THsH:GBlGfk5 U ѹn 0 jѳ%9z ܒ-{BQ*\<~+c%Fn96!= 9P=]Ga>E$V>2$?QӣB 7C+9FGqBH ߍIgHyTFc>.DX ECC; bƩ#BECٸvC4 +RY@-EԓϘI԰ :@.< ΁d H,Rx%[}dE.v$\+S`9 )IiRX-| E{X5bh6 E<2A!A>+> @DA/&B<ܐ@9٭d>i= `l=e 8=R ']囵˖Mҧ Ra֋ ٟx߹|C ekE2u)$j3b.)+=+"vd71$ S,yl.(TS1J?14A6 7lND5p:4Rb5a8PLd99ajR98S(6C7ByRԳӽγ <@)f ܁c)A7tb&&F'% rd)Y+ $ +~$o7#VX>Nr'q 0c&${)+@D1,- Ԗ-g/k0|sN1Tr1!33O3l3%@2o\ ޘ?xzXŊW 9/!/bCm;!))Et&G \&u F# C&^%7 0" ; f M! bt"zhw$&Bd'Iq)D>8*G߲*I8s+O!W-#T-U>-Z(j.x].aV-/r.ͼDƓ-,_Z$#;vP[e ,5 (6(" (|S%!#*# b3! AF S! Te"}%] t&jp'Ws'vs;'sx(Yui(Bs"):W*@I+C>M+?p+>;*?H*$ÖvκųhOKg)B B %6$y, :)Ct%7$n%#-" {6! pED YW!i$z:%>o'&aA'1h'q'Cq($qm(r{(Cr)$/t1)B3k).v@)8lp).)_Kd ya%~ [/}9SB=%0J+'m$l\$'#0" `9!4 vH a P[ m3##N~?%o&td%{&ry'w(w(\x(.w)(,}r('(P!'&ϡ AZD״ 6c<:pJJs} m'od V(B$$Ea $6)"2@!~ =r IKxM _5Sp"2J#0=$&$x$=$&89'@'(^(M+(-z}( *'^&@ z):9)߯  Ńw bS;8 @ uV d>'3#V"# ""+!H3s+@V "3N<=aj ru] /ץ!ռ"51!U!c#XL%&o''H(1,}z( 'm&C!p!_! "! ) u )^ c y*a *- 0+ -3 =- %w. 3.- LJg+ kd+CǁT* 1- :2\@9w=U'?B$B@s=g8b>?O 4D!OFg#kHo1iG[{Fw~!~!T!+ '!)x l ) E ;* * , .T . $. 2%. I@, bd+* K*.* B2B:eq<{>N@!ECwB=? EA&LCsFa,gHR!oG?  yG`{GAI!3[!$_ ?~ 7B!)-x* $ * &,. r.d /Z 0 b!0M 0x0 H-.M dE++ ̡. :4/Z:i<^l>f?~AXDqBO%D\CGN#kHC,G~ yF$uGeܝaG! 1 / 0 !!I ( * +h-q :/ R10 1y n 1 b/ 2o iG/ do, S, ]. e5h͐;ݟ;=!{R>@CF H)gHH0G0*lG>pGPHF{Em!! !;y",Y* > mD(_+ ., . 1 2 M3 y3@ -3 G1 Qd. ,. 2/l y6gϾ;1;. Z0Y4^ -6 u8[869 -]:9 D8 !et4 3"4,:J: P:wl 9P,i>zK1C8F3XIJԼhH̙E:f#Dr6B EJtG#(5E(qE0)tV+b( ' 2._ 1F g59T z:r:&; ,=ZCC;X e_8 hl6<7'=\> T71 2/.0=VCf.jGecIֺKrX'HǙ`3FٺkE0FH:JHIK,A;,-.5,mcs' ,4gc.38I ʄ;U<.<,Gi9`E JEL%LL5H/7H5(~HөAgJ5WLe-N5Q`O |Q/a//1/(! &4!}*w!3- 25 @;<A@+)CC9>DDcA5B^g@EBp4D>ӵDl kD?vAP\Vt]QƉPIMVLĨ8M$\NЏ4P_IRhzL\So0Sg7T3335_3FT)Ih%V,'1<6+r1/-#3&` 5 >;rD#HktJ:J`]J@\JPr#KA$Kz m{M ΆNOJ5!Yu{IcWWoU jS$nTVt_Wh^WaWYYXRHY@ D$t#K(7OZ,WP/f}P946Op1Rd)YV":߱[Z[\dc-aV~_9tn\i\ibb)\{X\P\IIy]C"^m>N{^MJF*@ 6W>KIhQ|X~\$\bfYW Q+IC-?y>B$J]:5 U}c@VRTW.Ba~Dl"i|1l9+rh6*Dg3(g0'/sg.%gE,$%FfP*$6&fY)M#mfQmrkPmamlol6so 6 ]:^Jn8(r( ZP"ᄔ!B5RW5AQ{MHьx4iO~wrXkid [^`ܶlN^Xr8F~R$z?H w:dg(Ksf"&.c %Kwml`<$ki]#sge]#=b]J"]\"Y{\"U\#"RC\\#zO\&aÍr ꙟE倨 |`$sՃFGo>S/:G;7{*8$1n|$<>Y7JNͨPNKvS)FtT\>i=RG4ǬW:)JBZ1#/G\!"-YXuVJUR=EU<M"MU+Hy`USsUwBm$UAgKVsaWou9']fqַ"c͇[s9oµdP=p4zv$Mz$Wu>DϻH0I0VlY XP rTוV._ 5%D;D-D&eG(a@2F_& fIs'^Ly&Y RAJ FE֛IXϪBF`D9 S\C& ~_B޷BKBQB壢fCNIHpf }2bےӔ ;k#JeMIOaܖt6XhC97!H "*R0*f"5v56j5BJ]6aO8bî;c ѭ> q::976j+PL8J<?up@3 >(<̴>; LT< Ͼ=;j=h$7QLb"AĦ&^~Vz_;|Fe~*} P&0o'x2! W* hz- X1?6ݺ6V 2U-kJe0V 4 6I78Cܢ8Q*ٝ696}J6x *6g}㫁:*M4覊ڠ )%z/`Y E +~&FFt]E"+ i4fP$'0l'}+ ;.)91-ܳ/[.,w/uM)31o{)}FF+Z:.8n^S0 r15I0QN0ںW0ܾN$D<p׺ ,ܴir{/ aD( := 5 $~"e'! 7;MT wcdu!*}%nl#'uF )dCb*uin),'-y<)/&%-(: *(C*)+$*ګTC'cY;tم["]Z  _<8 $a!u( <#!#I$U#) 5/ ;I WL! `"r% &>kU'h(l"kO(( N'X(')i($K%p& &e.&Տ/[۾]\2=Ƥڋ,j&E'aS[!G )mn $ $-!W$U\*" 3$!8 #? mOz!B /b!w5$&&|m#'Nk\'qv'&o&g% %f%)#(z $#J#jj#Ѱ ^Qc0 +  ^4[ f<3" I(h2;#x:p#[##,!  5 BCc 7 S~(eY z#X$% &8؀&'U%ck%'^$$5 )$$' $ "m!$ȜʙԙޟЦ-sk(M: ^(PQ"AZ)i$ ^"t"1&&[!.I 37S-Es*IW@i/|ӕ"B|#y #ڇ#L5##C#H#"e*# 'o%R!c ؗ$Oo `c f7C( "%-":3!Z 1 Q 'JS&-<&h: GH[C=3lmaZL X%,zg& S3!"@p!!I*& "x&%gcn<Q6[b{DZ 6{oWd '!6 z0_"vc(Yk.7G7$HuX\Km{OZ}Ɋ5y($  H"&  " "#&&X#O' e' H' Wl' h'' 1& }J' (K GP) ) U)'* 84+ K+ d+wρ+ F, ," V4 ff8%;9Hv=.; 9 97 6 E73 ;m?-`B|DO*lG9I+'rC'd['g{'jy'/7>'0 ': X( ( I) * Y+' %l+ #3]+ AJ+ udW+]* %+ ~n*G "3m O;6! 9B=.yb>sz<- ak9 n8 J::K?eB1DCbGnG&K& 5&Y&}& ( ' ( ) 7*^ + )y, #,21+ qI+ ad~+*D )V $- x1\ 5>4 u6:>k?  (' z) =* + 5-w J.: !T.Q 0~/y G, Ad*yj) (i - _\1 K2e 4 A 7qFR;K@\p>7?5_B:*EoQ\GFvF؛ADQ%i%Y%%% k*B [ (  \) *z- /2 _/ H0" *.1 Gd- d)Nd( 7' w-V }̯/ ݲ0i N1 5. -8a4 $g$N$CN$#{x#,)Aq*! + /fH 1 43 H53 &4 -Z3 |E/u |d+p!( ( "(]o+ 0B* ?B,5 uN.q. W53<' BFF~E~-fA/m?=͵=9#Zh#?<#2#m^'#>g(D\* -G0 1 L4E D x6b h6 Z5 ,4 D%0 d,) &[ )/ۍ) t(:FF( [/= 8\>dN.D |G5ZDkΣ@ W>t >=㧅@!tP"#"V"v":M)'s"+ |/:Q3{y6 18Y 7I +K6 .,r6 xBk1 Kd7.{ 5#* 5'~%+Cg,%|1#&K( Pg6Q<RAkJD+;C%@<?A! >^:AeZhD,[hFi) % "X A"4h!Q&1)^w),05 8!67 +>7S ?5 c0 ,r !\.oz0Ջ1? / .`B7>%Bj ,CȤoB  "@yO?穛Bv E GeJG~L3/;,z&  "[ 9!:##&#(}* /q&27= #7fA8+ )R9 IWZwuWTP9 J#N9cVoQs[]SJ\W8jK " >67ן7!Dɑ9o4J;MvLe>(pK@K˨r`\bpAv xgurhw].ǽS ;%f0B aeE+c *lb) Wb)ao)}0`): Ek`<(G`_qf qdi plAoqmw0tbe Kǃ,Ӈw鄀2\z(6gqZ#i 5 c3A _JG5_etJ]]OvVAZa|KgUODΐl?05kyQ>4Rs<1Vky7+cg,$safr(7 e( e3' bdG'!'Kcd'!<&b'r!]3a'!UEaz4C zA {]@ |#> @|= L ъ7H.꺍ƌ6Ld_T *~z4,yBz"2f8uI@3D>Oru\\G|iwI]\jQM{ЮZc?u~`2oqNfy+LgmGh'^`e %VTbS%L^&pG\4&E-['B$Z'R@e%Z%=[b%;[<%:^[,؊HnoI3 R$Ta!Վ(;lqqbշy?Ʀ J(mQ'2SiW;A]ƒ_RHFZgxOM&PJ&DmڭtRz7(W*[~#^e"~[z!^uXkVrdU#`JV6h[VVVRWL OW!MVA؍6t\P $5"W)oʪ;ë-bvD,K~ĝb~. hz!4MT@4`BIK-GG}pJBrJ9OG0UN}&47P?R"QoSP@k]:NCHHN>~+JN-x!POs|q4Pk P]eXQt`tR;Q;1  9  ܾ u`'"_áQIn2RPVoo ]Qr5Aʴ.H@a7CC3ոhyG4%J+WD%XA! *GG8>H{J JkSHtF G-dH=CIIO&Jv~KiyLI=3Gnj,T J^&ϋgo :R3&VÊ]ygѵZJ ?ƕ2}(!)@'%I<%=z#bA# D#2௓D:@y̻8n.? RDh n=&D Ը#C AB4B#/AmABu' ï:D >!@eHكFB+kӜ. \4+_65X]8\>@Δ>  nU/K رfeۼdhxr*)J֖4lR]%%6-U  E&g(K2,73,ohX8.|밁^1+4&O58 /_%D(\i-5,46a5F4F˱4ņ5 ֽ6 ߷o47얔*c ߗ"B$ŠʸHiϬ$̒qظr#YO:AHI&eKF E \d15vdS _y"9'&IJ-^ ?(D@ qD{Ix3%>R)vG./)ن. y/3Ͻz/ʀZ01q鞹tע;U0Ȫw$Ч q#{۹7sZxBC=U+)8ufc  1^N md3ō"Xr'D*!"?b ) "Y$)!(t')!}>ˮePy1Ӟ@ަ u|6R[ A6%&U :o ?Q&=548{L$YCfH\L}a䚼"@O%3 ц${W#V"#8 $ !i96 A,|!o"}F"ZQ5U" vC{\b>Z+!dp!!c\e J)3""L.,-B;L@|a Wt$EL%5s'Rp@( e''w_$q7 R#t_X~'y&ARKM]̂M] aO \NMrpCc*Ts b{  8!_ i@!BY}c,#nj$ Us)\$‡乬'V3fjX7G h$qI JFzEf /$G+H4lW@iLMq`du|XxI2U1[ҍtV>\U%bxy$ !-sK`]KG 87S5,|}^ q<IuG qSJZe K^#,375B<VN??ftyiHLđjhJer?^)jTayC)nl" [N93C ڊ _nQJ/ N W =k+m: F4' 2 v1[ 0 3 19NQ<) h>yA|&&T&I&C H %% n o%C % %6 & F' _(*$&)4z*}K* hd+* ʟ*y *3 V. Ա2 6- 9 OM8 ov6 J4 *3 K|2M P|81Z ;S>oAr"DZ"'_pR')&U&} :&6 _ 1% ; % % ' ( W)t 2)$)2*B 8J+D \dt*`) /.( * + \/J ?2 7B$: Q9P b7C g5 I5 ;)@>q~AN(D rG 3(W ' /'&F&w P& K& & v(d )k %~) i * j"*11~+) hI+} %d**>H(7 v&u´.')q+/ . 2 8D<n 9(B 8[ :M{ >&;mA$)D} vGu);D ) SO( (+'|&A&`  & M' ) u*E + , F f, D/. 2G6*e(V&C ]!^#v˂$&~) Y." P 3 3?9>Z=@=rY@D%Gv٧VCqH>Ny5''(v ,) '1'& 'r (e *V+  -t .  . -$/ G)te'Ai$b!R!t!!v#i~( e. d6O@yaA\"@p E޷GWجvBd=ɪ;#%+& ]( x( ' _( ) +b .>0 FB2$ 0 ,/EO)e$!\Qz(4h * 5&=tCBFE9=eiBAEyGnTIeq}mKINJEQBoZ<6e/4G2J3#0&'M'& b* 2 0q%3I58HU-7Ux798E: 8';Q(=C ? :a`RDzwEEE؁o)FyrJ,If}cK^ZM&VOkNOU/OV2SRaPK;oG_O@gjkF)WIHVGu@85Md$'h1!=:2֕!3>:#L@Ʈ&}p?پ*?8@P*ƩA#gEѿI_M 1Q Q#w~P8mfNvf,M ^WMS =OKQFQBQ>Rc;a_H\O~Xg,Sd[3_D^wK \ZSzE-9 /#1kr ]rv oelht.QtXrDpi#Oa(KV$0N65 K1?RCIGEEaKe%Dϖ_M@ECFMt=Ypac5b Q+j GW(}gK:#1e.upc-_.- OAY.[!]UO-b!Ue," Up,")Ux,?!V,"!U~F}F}rF};H|J {M c}g}}y48uar< Ěi w c?,9]08!ZF_@ԍZaCY|Gp~RQ_8H\QBEcaB8Tk{<2;j.2)g)M"fc' b~( ]X)B!KbYD) !tiY)!qX(!wX)"EW)"^Wс2u9 IUN龄9҃[ӇP˯d| hwt$"s/0o6l|V@d~pBxXmzJ IvEP< q^Wy.jٮ\%c`"[]J!R$Z#XL]W0"EU AU!?yUV"=PUy"K;]U"8V"7VNNIJ֋ꌷ"Ώ  Zs:Dln1]a(U3Mtj›ǸmaҮUnP3~T Yc +P럑19JE GZ>CxCjC^>(B6{==+F#HBImIIHHIH{ HAtIBDoJ5jKV~dFL}U_3M򑌦f1铌t⃌hD5䜗 ̠tԦ >~ae {>>mֻh?Ly,9'91>:/Dzd<>/B';3"'4(9nz>.V@9nAѨBB A*%?@8rA&]Ca! D]}F"1wi/GVm6驌n二I Uk|yjRq+I[!2 Fտq0Sŀ:>))#h2"8d4/ e^47 5; D;Ɔ0ʎ. }5 ɲT9]k:ٹ7: *9 (9:n;TMJd=@e䌚?8d ׬ >O ʲƶ $ FxzX]ӉA='% %P.̫x.y4~,U4QX/@թ/3OW^7oeF0 GԶŢ%(2(!/7՘k2Q~2R {1O[T233 4$ %5L6{⠠8Q!s< PQ|ϤP*|f>S}ϯdղJZ *Q0l> fڃ!# 1! ߿S$ R|' 1攧Q+h ,NѪ$x~$ ^;@aq'#v$* ԫ**]+, K- J0' 1䟌5e  /r Ǚb  5$r1?RcjQwy: =2#0f~ &3/y?n2Oxhv7e%"xܪ$D 2W@ pG~#6%(L2|%z&?JϢ=("~ )Q֮$Ѣg 5 #Diտkے +S`M; ':zej uz{*FhK# kf0ލivO$co H:s 7+Ln(* 號 {_Ű ָ,*"Bn5UG >  &c4 D I y I1k "WJJee+}oQ,8֬-'#TV[K !$) bj@-:Χk[=*#SkǑ<ujW% S NCr_r8M:%`c.>5b"H[\XuniI{V#Dz, ۑc`- )'9e5@ [C06IJób[1I |b_J  @#&]zm  Uw.{Y'b/ yb8 6K5H^[Dfwo4vkf#6"F ,]V>7kDE !]y>;tץSmoS 04hP 6)A ew 9c  $Q yc/e ~:T0L Oa Aq ]\ r EР E A.zkRdDz> ofO' lfxbL > }dKHR i)C pO $ Hzi hDF Jkkh v$P0-=`0rN*-Bza_u! 5(6CW\`* Z~y^O^6d&"K2nIS # i&" D %a $ C #  "Y  !y 0 ! W#% $R %1'#*&36&hFN4(f/(}F) țg* ) .1 13/ 3c ,\2 1) @E/1 - 9b,Q)w*O j1 5q 08TuLg;& / H&< K %o 8 N$_ z"  7! !\ " H$$ %# & '!(1'x5(1yL( e)q* f) 1' + 6Ѥ0N 4> 4 +2 1 / .+ic H0 ! 45 7'u;7=m;&L& = $&V ? $%? + $ "c ! 2#j >% && h& 'W&%(ML3}(vK) 6d*iX( j'/'j'+$ ߭/ 4 5 A3 2 0K /_ 7&3= 37_I :=#}B' ),'2& 4 A&4  c%  # " 9$X & 'B 0' D( #(ku29) I*w d)f& _ j!Ǿ#$$' . qL5 _7< 4m 3 d45 cl6s :=?<B uBd'' ( ~(z& + a&  $ # 8 %^ ' (R ) T) r!!)0* @G*xd'[j#|yNZ ? '> +/5 F7}z .8 &9; 7 ZI8ic<$I&Z+' Bd(Th& m % ) %z ^& (5 )l *@ X+A +_-,|F(d$ n1q1ˠ3uPO' z2#>&قs*Ѕ ~d0 g2: 3 4 /3 [4+ 9}lK=0&@-Ce`t?wb<"6u03p)D%H$v$i!N*+$* & #]'lF9 p7[qU } #ڵ%m/%Oa % '-ӊ*(Ű 1/ b4 P5F h5 p4r 9LMr=Cy@n7CgdEuPLZA_JmT\Ee_?|T8P4W4:/"6'p"\A[# # < $B(VEt4-Wl:P-sv-β/4R-0Ź1ϳ3<5X 8B -;4!=T?>7?(q?hrdAf"VDa\bGUXITN[K(]`[iXTpP8JT7Hs(I0DoH|[-GR0wIK_KF&L.ALv=t%Ln|l`xjeb@w^,@]c8_ [aRG^>|C 1'˚,M=3,4-= 2,E(<4#f;Ŧ7Xd-i1U@9CU\F2!zDfZ 9lbYn@^$\QIPVԣ_O{BP;W5rI4]|+aBZa(i9]$,2[$,W$* 5T%&QN&-%PB&'%P&F%P&d%Q&z%Q)w2#ZqEGSou\E|!.dʇIYaҥN 4gKz&$"vD}8/fKvO9^xRj&;2S:v7BEqvH8liN.+(hѕR!c VrZ0TR6vSN_KP:FP5AAhO0u=~Nr;{dO79IO8$0P b6&PC'tFoӂ"؎h@kJ`Ku<4Inҕ^$2bՔ r"_3[2$RH8O֊jc=qFVPN9=U}AA/>E%U}ΡI^wKS|}KRBrsJjlI`.cWI:]SHVIxRK OLLLJM~_xJkm<3m݋? [ [ٙVg՟ ;{yu4 \go"J.G1(@ʗqBU5l=ٛe:Y79/aC6'ʞ괽>+ #Q@j' AǖA%ADEA,ڀA5yxAsB|Bm7D+g|EbbXGQ;]SH:䝄 HE  ‘E,=CMاb{(da' GJ#5n%o/,?:+1*_5*򯪈8#WO1J/6E^R6 w^8 9+8+7ꑽ8ҋ.:X}|@UwvAP[ܙ ׆nj -M ڥM89QYt$Chm@L 3ӸJ #p*5+Y.Gf1M+1JIIR&'[&\,2v0E/̷2]0/0 1O ӡ2Ȝ`315e7ދ:IC=)ԡ*̋ &Do9ҮX" dJS-څoMVɱ;pr $ h !q}2 "O`S%TRQ|(66,Ϭ)$ ~kW0ӎ\Ӝ"|> %p&nKm'@6(*o.,  >Ƞc u gۍʶ_ܺafeq 9p+!8]#;?f%\(zR*}&'خ^;ɣVJ7I ۝4}@z\pc(KJF53܁4]EFO8 ! + VKX6q<KejZ^`.{WZ P * cW4JP۟@/aό""Н~ܗ> xgw6B|LTe8ִLt5^<#E3g2 &Fj$o5) H 3YkF/9=PafSn[Js${#βhv+Y՟(|"u geO98?#]d]@1B+;+;FMSbـ} 1NilC3~9d, hh3 hp 'nEk=khM-l( a dzq"t GW[no&NRG M;] !A_)Y j ).JT - 2 |x$ = KR32dHIE]u_C!4I&! Y}O6v EVq [zo2IoEmB[o!൰ /"`^P&Vyj ~\ ; + x'M[~~?1%/'.r6\I[XUnMFrREܘlrҮOe6<\;'._^ zDgXAG@Z =dF &' A' PP Aj < S"s ^( {3gID JU h #} 7d\9 4 6<st9'0]p .  5KlHfQ}"pu>lU% z;-I && | e Q' 03hiDLVdi"@]a" D+rSbXLlvy+#)0X y歴]~‘ѣe~d0J -{_ %!#~A %H6A)HZ5F&~BY5k+^k&77ϲg b}ew*m+2*4*)V B7W ;d˷ *vYae@$Z eQ`{kTO&tg-|l8XdILcI\|nGʆVt~)ݴW 7Q+0)(&g, 1 P % l %9  x$ K" !H -PR %D  : ~! )="]$S<+#8#O %QMf&퀿'p O&# @^(# }+ . v." P, a+w)W(F&)%L^!3_( . YH3 |6}v&9 e& r %6 $; "& g & +] n! "u jg#E %$)_%7$M&]e'{)(n d( m&r *G l.z Jܸ0, / 6. u(,V*RI(!&_4% v,n o1< #l5x 7 8'V1U& & d % = B# 2! 7 fs "8 #p +$E s%'B%4%9L'ue((r0( ˞#w%v$Ӎ& !a+ 9*1^ o0 / `~-`x*VV)QP+^ 0 |4. 7ovx;r B' :(CI&* j% P $  #H ~ v! #K a$ %Z R&$&3'zJ{(dd(T%H=wյ+" c*_ lq2 26 /y< . / + ؞FnԷ )$ ** 4t4 4 v4 3 Ll2 ]\6?+ :x k;,e 8 "$V$5d& (B *& K %  $ $)  % D' (> ) V).*LFO&_dq!^g# Hɐ Wغ hCDS -\-l 8$8N 8S- 7 7r5 D9i 09 6u 5}\uL "bZ$ 'C&r c% o L&_ M' ) ) * +8,{'zD!Mcʃvtj=<' Mm5<<|<1 }: 6 4ƫ o3K R3*("d$V9 yA!~#4&p "&W' ( *Qr,G p- (A,n#9D dcy% $8uޯ80($ H1 49(> >5%3 72b $2 T1 /111.v*;$i:lB"dAo% y )*2 S m+ z/ )(K#E,_Bb t9'f L\,τx+d0)$ ߖ_>$ /.\ g1 $4< 1k S0~ 0b /0+ 2<^9K5/X1)#x= P$z*W .0 ? j)* T"aH+F}?v`5M[dܠt iQU r) }yx  (\o[УR&o \k, . 70, y/Wi /c Pz1q Y6w b:I}\FXfxBri= 6/(`'#Z p&' #g 0VP()8qk X&dwW ז #a0Ԉ ½~Ӻ -~ҙL9'$? ~,jK /q M0V D0M R0W j5Sz T9n~=d&6@VdSP~"KNOFf-@~C84M0Rj#0?  T '#'ߕ3+!؞JM"^`Sn"nɍ9#$x&Y;|&@;)* G[>]A`RtlD{L?_F:d2bFn_\UWRHKSK}CE(7`H $8 ei%`U'|b /,rMFT.oqJew-۳W!.!0O3XĽ7 Y;>~,CnxDc~xD\P`CVRCNp CG&gEA"F;H6t}Ij~ih.gf&cr^C|h[S4MS?7F. Ԗ*[ /A'*a'+2+@2H.)`2a2 ~t3<00 6*) =n!FAEqoZL{`rPS(OJKNTD LC?J8dI- H),J'&L&L3L&iLuktisQr6=pU,mk.iq`\HVҤP<4AgY4w7Ct5~D>ۍ(=j 7dH X/xOJ'V6J^3zWW0R+ 8O{'nN#N);`MF\MT!OzL"pL$x`L`yFxx v&t0s_6q/lig]e`ZRaUQQQ8() N;02O:UN3vOin]7eJJT,ASVB)JE7T:>4RѦV(/$Gb'F"\*M#LT)+!P>'MnN%M0LL!2tL#5UeL$`*SL% :Ly\y fwdvVt#siqsLqŠpvFoInP3o=k6Jg@c$!-Mab7* qL_,Q12e\`h.85XsVAELR>G?LN22F`ͳSL'|?X#9 W,"_2{S"^+P#b)!zN "%L8Lm L#"? LR#$"%L#"LZy x-wCvxyw0xbț{}3}~O$01J}^~;RX{]Cx!#dlus3'__oIa13WqFc3JM[o݀g9Al@l3hgE'eOI/axM'ZWMRALFJ)jKEjK AiDJ8|rH6CJ5B K3L[2Lrxy"y&k{A?Dzp\}3YiJl AS:RݭKQk1z\uSA i]W/%)KՀA0BG]PB:UUOCPPEFM|FJ2GHIy ze}}G|Щ_ " >"VZH<=[>=UH{Wlh8U)VD)@(9Q7;. 5-^0P/x.Z)U.$ƭ5xJo60ۂ8IR8ӌ8A8~9my9?q:ck%9=7e?a oA\'C{~[2~̘p ro 1| T]':s%xtFp֟2G`kCrdY@]1'!%w't5(%%YZ+#|*Kҏo&u|&7,!֚- i/ 8/4 Ŝ./ ÖI0 Ï / =1 4!37ewz9u^<0٩N܀n~ȕ%2g9UɡLJX7jAxĭNb.g2lEe~K-뱜8$$2"-S$y#FP!Qfzq  ?&"dE %#)n%&&( G) `F+2 . 0 3>7I"l wV0 ̘>(n(|ZDg12zNA%Q3.ÉI {}5;%/M_ON ~sW  PX3K>UfIA"Xy;YZo.B ذ h#f &I ( lPG+rU֛.n*,ÿ ղdG ƧJ1JH9l㾈U<˨$ЄnQ ?G+|Jdn2շ5.m :4\:+aڬ1J8t) -Ҿnt_-Ɣo:}?w ^#87LF˙BPѣ3BOw 7r^¢\ɕC +a()E7*_ %ۙ&)G>{Qj: =׶o'`JtcAD4wa;fx(FF^ ϐЌMv" ְSYլzkλZrtZʐ^NFz֤".&h"NrMo&wDeog$ 򖯡}OSoqW 5 ݩ 1ۏ$?=Q Ǫ<czaQIr 2  = P,*N& ڴƢ:rҩ.n+O!utX 9#B PM7 wT{ +! ,9tP5 DpH.\]5m6Tӷ >є 7mv#+d. /*!g۵0/NA ̤Kŕ фֽb D]  &+ %~4<VU.$~1BjSm/Ee'bx3ͩQޔ7_0Z =ˮ(۵zrjkwPM 1F  'vAB  U"[1I?)PpcN4EvFm=ƤN= )k߷ew9/0S ҭ;tеz u؅c9A (N< )7%: r 9nG&e4NBSf9G|;̨wϤ^1$.0*k1 xXOl 8p Dgckh7Z1db*k6JKF`{XG?iLx<ͫS 5/[/04, t% % < '$H "B w RiX8L z oo, : 6Oz!sof#DGQ$ #w'&&7ʹ)S(LS3& %$_"s!C?0yoZ% 2, 17L&% % : I%8 # b# z! B 7yKuq/o!!*!8#  % &R ' T( (),%E>Gc]<@'HM }9j^ Ax2P 18M 7ߪ +6 80 .kȢ /. @-+Z(*#My2" ;$ !' %O v r'; C ' -)k ) %w,#Cta,! Gio˙% Z'[&j E3,S 56#B 8b g2/M hd,a„ $~+,r <,u62c.s"k(s)"= :$ '(h )z * f$L,G?@ "r_^)"-~ҕ KQ(*YIq1א&n #,z9 204 /.q)*f+ q,ATv> c9&4-(&4 YYP$"](n*  {$* n =OY"[1zA(~Am1*Q2 یJ:uG#G(,"7Q+j)s*E ~,R (2MJ"KXGgB"o;D5Z,y.#a[^ [!!#Y pr;a'f-06 uS~ v q Do ѵNS".!C6jͿ&iFA#q{|)+c {,pq-,;*&zM =h0'n 5d l;Q[Y]{VzyQ K[Fq>85.v  ` \L =!;ڐ H1| JpAh*$]`y2 ¹ !!##N*R F0 r1} C3w= 4Rn &4fY 4z\ 9Q3?rI ANa`ZW_T]ZVRHOl I-+(>Z,L VҢeď9,#]A$aR$AL%>V&ߦl*_fH.UՈ3  |.7yr;i@$>][J?W1?FQI?Jn>C<=zJ+>Knq8p !nlj2fb]:^{ZM+U#NZF[A %c'<6:U'U'"m: 7-cmw.Px :5e4|?^U`-*G1Gk&;I,E/Dl`J?%>Nd8QO0!M)ZKV$m*J9JdIi .DD|6?C.0D -Ee,FW8,IGDTrsיt!sY!s<txB|~6 /A:R$2vka4lvP}*C"Ey;(@f{ [)9wSp*/0~/'}m3|6gz8x!:ov9-fG:Sa@:W\;ccU~<6N>=J@RDGvAEICu׀vӭu0t]6y[{%(^2/I҇4*lsxdxN>ԋ,# R3n66%(.ی@WI&)9ro$j&:h#J*WE,- . 7 A- Q)/ }#0 &x18 p}2\ice4i#d7$`g:f[4=H؇wԾvv"5z7{MQ #H] ԔK[`|Ypj'#&5P:/ e)S"ux2# q )XQ!q +qk[+Zٶ c8 Ĥ!I& <6H#< j %) _&q \c( +R -~&9. ay`2 t;^4քwҘx7xe|,1h4nnɖX 65MoRZ ='6 "F.n٭Lo6 7 7b}'r!(&,).t q%AICP)dGw=#]Z8Bڮ )K2H>7XWs WiVӇb3yh Tl#t[O|}m;IX@=@В)i & 70 ޱ@(g@aW_!Pz^в_TG+} ܲb.-6֔e Хˢ'D!͋<#xt02[D2,F&<dbs fda[)$!A_G~f]1Lh> 4E s$[Ò53 үܨ۪%ʑb] G du\I@]1h%] QP\'~$Q .F].6A.\:tj0", Y1 H$XCU /FZUhD;OE ުϘzT qԯSf 7s ~/ \<EybTv%Co2G1 'MZk>m E^O{U2n+0-6nACP Pz +"% M4d@k $y 1!`=?7h u\!gW2I@{S*tfsD}f.2έ0GA#{V$+'rm2oa' ‰xsםR N.O X7' !3SD f~H # S"XZ1I?O8{a}wt͉Dw޴Wodat 4)%L` ", Ѳe`? # ># x o = d4$h_2H?eOaat͉8J(ױN  1f+K#*NkȵS ˕t@לJR K-l  {VA?@UU(rg4LBSt^dIv}OI a%ܴ&b ń׹um0$+ %R = $ : # ! A h 8qzI[|7}v"u.<QoJOXwg~mY~6h,6QCbx2XHl9;j*$VUry&.h%(%; I$  $# o K!3 rxS5*#c; !&2,:^g|Nf3J~<b |O !r !y{ g.|*:%9bWK"-#$K)F `'F &da%% 3 '$ C " / t jMXzbB_}M*N7Lzve pV zD s# b'Ы=ܚ#sZx"! (ROyH: av&'T u-$ & ?'G8% g {$ !  hAQ'h5IKXXad!!$8Avx" mҫw]pl%=F!#E# %Rc !0/#oY#%+B 9.;"DW=$7% D'< $ : # _ ( VR -ue2W U# (3I|!>]c!`]75Bu <&O$ J'FR'g)z( )e v,a;+^M!"$"%O e& $ #"  amHu  m"!" 0^"L%F"Xc^$u(T-?F JQ70u6 -' -8 >-8 r-M sV-}e)Y)4X (&4!ahE! eB$, & $ " 7 I( ""c%H %,"DJ`}95 6pT\ ({ + a3kz 2 ./[2j*'%*)$A+%I0,0,(*d!=U>) ,*#V s& $r -"S # *$ % !|,B-N^zYlv6J7XH!a v"I ~I.` 0$ѷ *˔0&X$j"W-S#U5$;_7B3M,.&K8M! N% $V c & &DVX+ >5ZCx'siSf4ܑ+;V #s6|՗#<PIV$>Y*PH &JF$t!Gq#E$HrD2v@r:3+_!f %Q & 0nf') b'8TLRߨ5mqX "! 7@ѭ*oLS __׸'u% .` <c Nz%l&H2!_#^!\#k1%;PsN6 #J FY@7k9j2~|(],F y@\(ym#f3%!LKԄgmOw#^5ψÍg4a^d|ΙY"̐&%ň&TF$ryz"kh &b+,VTAQNJF BLƟKjڌ~"j &u=(mu*Id]q,=^5+BWK~)M .(Ek 03`^\:XESNG?O2+#iB } U U KԷ'V9Yo`rr=k_pfJ#@ )sv s-c 36WM 3]NK {4G& -56A0 36< Wz5/8 T22 ![6. =9bvU`_bV[/X2TYwOIBp;NҲ,H Į~L"s5 Q#j"a!HŖ'Hr}8/c5S =F*z?:FUh?x06$>,I=t*[];&"f||;[8=7{7z9$gzf1eњc ͢a=_è]zdZ"VSvQ8LEC7 3 ńZAx6?0em@E"@dB*^u%WT>r-JQ94>2 ;3+.@*d%צDCK*,I?2LDz+Bh?Zd<p877! 8;iG;hiѐfoed#cEa%_t\(_];]YmWzUe |S7[wQjBP,P_uOBq TMW&IdKm,R?G13lCyX7(S?4K=c :3A'3?{D )WC V#A!T@gy?P= {;s8#{:#>bӵjпiJoiu)h{5guf`,f#8P:<8O39z)9%:My&Lu<%3>, jͦkrkj=ijHQmZ/nJ)p}q̑qaOopw`|oEBt2q uqfht?=U1s U Dp }:vm2y4oN-sPd%rh+Br"rau%q>'f o( Yl( )c+c {^t, YQ. Q/j _I0Af27s?5/0>58TΫm7m m l(mpj!ro uyU*y5^Zyu{`\h ~TԂ AQk 1(~/+#ŀjJk:vdOxCXY!KT xH]D/byC>s!lV$, f& T_^( [r, X31nnm^ nq;u w1|&$ xӄpSPkP@L[CFcD,:K, "~'*lyE_ez\yq 6| o  q e~\ t VQNW|#k^BMytk#: pH'poboop uax 4{Ng P}YMoh&x`L1*hA ^%c s A |dc $ p) Kݍh۠ $G"ݳL1ia maBMӈF1vPD  m #l9$^2,I=&Lr6^lvāpm5̨s̜Br:-% A$ 6 # ! ! crG06>#i|#Y/=t=rOSb(fS}n*׫%{VfՊk/"6<X PC (SGgr s%@$ L$  #W X <  vZ,c!3,;)UM#f]1}ӗlE9 q_G*Z\6X 4T5 1B{N" =& &k U%. 6 $m 6 "  Ak2%:k +P+T?8L{el~'ET\ZcM>?U& $P${1 F|v F&8E$a{% 6'@R$ e _# z!\ Na?Sq8<phP(M6F,KGdw~R &lsۿ v*usRuGH D8!$ST)!*#k!$r ,'= $ 5 #l 9  ma01V/Hq/$kE4  Irc~}^]'NTLiUFw I,xe!B0#Yu$% &ޯ&vI%Nz G!$C -& $ " !N:u1c!:1lG,b#}_" ?āJTC`AK%'`)m)l)X*ܦ&## m"))3$C`X d0#r &b $_ " 9N"5} !}, D1_c{qx*"P%Ǝ]Эk!@It$N P@/] )0C)*n,{%!twCo 37V.L*#Uj|;9"q '% $,   ! U3"L, "A+0]#LtOhkC?,޴A֥i 9R/]):֯+%&k~p!q|*H D>-:&6/r/C(t-Ln !~ %S b# , " #i/Nt+!#F+S %º@J#pzV! :LZ) 6F C@x_;dD4,#P_ $+$Q YZ!_&p-6e2N#w6fG/ǂ0˴bω :̻ dYR !x"˛ _ >;]d *JF DA<~<45<,? "XmY 2 `/, B6 5B1ZG<4b S|eG"!@5kF0H@a\"1: e#B|!v) Ujto!8`,% T.R:cO&JeD/9=@4&px WxwA 5 ާ(l@5ah+zs?x[5tzPD !u gd oK/xmzP oKG$wg'>^v)X-(9S&M 'D ,6!ZXhWVQM)[GAY8c,&!ot+[ 87+ )# S 45 S JR- Il Pv)=E z {8݋ ^mk'$^$+rP .H (0B N1n .6o*-Tv'3 [&%}-({,v!*CynX-L]Qd+q5 V()I$1:(d8U.֬H :Q87Y377>7& ~5" 3&F6bγa`_^)M[XU"HP'LIEI+?P;U!{:9n8*-e9v>L\;]V^P+9Uj$Ew4},8,4/'8&"]<NtAo> [;@e9Hg 78>#7=7 X65 .h6/ =7(ΪccCȡcKëa`^/^Z Zl (}Z KuWT{Z~!P%:M/-{kJmIZ6 VaH$/UG95>LGOX)BExe$F9C)/ @y(/%<64O7l80;-);d%c:]"A87*7;6 Y6$gX6CJC6fCȡedccb/bR`braSя_e](Y\v[:7j[^OZW OYUDV2=DXI4Y)cR+X|!-#tW%VH(-Tn +%Q.D >I. ?S0Y Q |j Y^s$}!w r0TmjjUj&lB o Fpܠ/ta Cz O|p߀[e;JVSDO+K f sK9kK\YOvhNzR)gUDu0Wk)R0Q PԇB+k3dkj(l?n BryQvX}f8ŀ {p*iJ]4Jŕ43vꟀ0h_6VNn{ZhӚg@,0 ϲ^DK:'Z >kJlp&mQtsxF h~0:mGWsސ4aK >O';7#>2>!)sC!q7Uqsqˊ^ϱ;#'аjm K u1@CIm}p vdVz rv G EiܚA(S)A<)۰SLLoPH5=$X8l,QPnT١q>F1TT2n…ܑ5$5 Šj{v5z 㭾}ئF"h JQ"CtLI\8RNCz+"- c+9n Q*){@9LNhžQǐAeˤѾ|+hv߻ ּ ^xu tF[ꂍ x[]X~ g6K.:TC'pP:-<$OͮgWN}UZcnֳ  bʪ0ٶڲlf _45cI- ߣ@+<V`qzZG;˶ D 6tq V+Cߐ$(#s/>SRdheDٔo מ ׇȆ$uˁ 4܈>eQ.J ɣ䓳aoh:{HBKf K") :(gG#O= MpP# /<_N3c{ޒm뫬ݘqL޳`1O\qsّ^Z0 @9anqReZ!@^ג ga1L\:g 4  N+rOBH#/c15i>0O8eV~!~m (ݶ  [ >:) 3 7\{诿:gltTN30X=J #w(JZr> Xg sP" Y1I?P8'do@x-j7̩~W.Z/$$K Δ$ ^B?ƭrra\~B1$K E91%P% e 7H )[%#[1I=Mrr`/pBˇL)ֱpQBHK," ӏ5ʫM{HhýO83_A`D k Sdh0#\1I</JuA\RkND#:ȥ.ᶕ6t|$-Y$ >$i 7 # !- a8XV.p#f0 f=FO;f4*}M?>5{Ju[WӼdܢ!u[  T7I  #/^ %Ky$ V$  # 8 1 zQLq*(@  U!-< 6 NUDe}kM>Zj֑ݢkZ1E  e<?iPc & {8&9b$ ,$* o"b +Yn 1",  }'8zLQeJ}hva+ECΪ]ىpmKRtN{4ux(28p} 6#$% &Tl$ W J# j! Z$  sV7)@69K)dl~Z\ٲ" _Mai%.(6gW=Nߙo#  A"WN$g e&$l  # Y  T6J &CB4yHI5c~2 NV9fuOZܮ* HHe@%gC ."u2V#ޫ!غ(RR!mH$ & $C " MH~]|V\<" 1Ghb )K{W~?@% \&!oTC#p%&&jۀ"[ו,V *&y5d mG" % $,  " S Rvo|-,LC'^Lw@?4K'`) Ӆp>y~W#. :+z 9m,ٽ&!3!Q; 5*0xd,%=`>W|! %d # '=yDu-0,)@;MY~n\Uז<o՝#m >,?2$AK'2̥~!_JHiX@>9^_62{/)}ZS S$ L# T  D !Jr*F_&9c2P}Wg32 $˚w"ɍ˒P3\%ܓY `NհYÖ-f"z} ޯ@]_#=XOf 2NBg@ <96w/i '6Q P  mi%, )$m4:wJ/F"aH8x/~43~ɳw#l.,(>|) aoK#u!Cj21I,0EB*jM$BKo#'D2v-%TRPCMG߄Hd Cg8 <4w&֩W`7թM 颋=35 L e̎ x| +{ % w \t;hYUa#kLn=(EN+E?2 Cc-s76 2/H2 .l-.+$+b(' +פZ$0XHԁV>]RϳNuJȭE@g18W.#/@y  b e-3DCDu~^_kwBppRd\C\WZ$J6Z+= 22` 3+"1+$n X2 @3 4uc 1 N.r ' *%]C\ȄZXU^RRNIC)?V83V/k$ (T"v!'m#<f&aU]&j?Q!$ !D!P)99.-/ 2#96?217R[97;47r5<7B X6 0(*cG$=%6_^^)\]OZWyTQ& 'ML'GgD(&5*?o8:2Ar%0 mf0 #|^:27uUv4NJ93d{@0{#6*ȓ*+%j0-$!sǹ25S;$7dh B6H6zD6[ I6# 3+Mg9%((ơac}` _]D^O\X X=/EVT}PLI(MIzE31q'B1/dB eYANsA32EA#IHa-6baa`4^2]OB^( ]6[ClWr~Uzu4S kARSPaRR3UbRfGRX v )_''#`5@U cUBcnOeAf]C fqf ew`ZweTWK1Gw" ?F# U:A)$q 8X)ddmd cNkc#f-afwIf 8{egxcgcjdIkgae.DAUgDm&,r Coxs o "i  p8;r Mr.V  w-g2w}WyyIz l{MY{uU{wm u p thk4a\E|!T]P e)ee6fgh 1j~j>& jaQq kLVcm-+XpaHu3{=.~ c |~P;?7ŀ_WX gk;Fu@\|4 bPIQC OW+%kLy *u o37gSkf Qf}=#fU h|j5kndqr |JrNj5uf\xM~;# 5n'*4aR@mcE:fiJ?G/qM -Fceq$W@#u!D3hgqh;j2;`lx-q_z L {oP}b-ex3E^ yu &e=H9&s ƙF. U'_^& q#(r- 8#J1`w{Z )ķO >4ZSsIRB ` ^B3P5 l~ =RmS@V5kJEP! i$շj>a#(a0>?;dKoau>ݤC;ⴈj۵}̂ҝÌX֎܊2s hs/3X vƢO b*kBG#:% A>J6b & ֹ֍{q2 s%A0 :0ԢI&^lγL?ȫ5 ;X@`Rܒ\|Lߓ`ۚU  lVV9̿;ی 5'1uk jA<5v*%/9(J^0r♊-R_xC/>)"%Y"[6vۖw6 ȅ۠yrv c J\),Z.J cD%0,; Ax4#p/np<5M at01JFS06.R"q)2izџ} 3vm!X:? >9ն)K1*!gP b   Z$"Z1I>MU`Ys& ̈Jv$۳cs8,8/'K<^ 0F7w G#dlL/2(]:aa R 8 g0#\1I<;KzC\/l?F&t&5ͩ?qک(<W([#-!$ A$M ) #I  R7{l>Exl/ Tb#6>1867>\Pe |z 2w y Vƹt Ǽ ? ھ 0 Z s HQC-A Su x& S$ N$V " S & CrN5f-u # F. 

% !&DR$ ($  a" z*8TEpr 0 , 9 `L dc}<ԗ:'Oz٭\߷$#= w+ -\^D Ccj4_*#5$ %&n$& G 9#Y `  !@]!wMa)&>I75 K0a3dN4}2 r,ڒ <  uPAE'7ߟ# b!A# &k |$- " . k5 +&r4Fw;I_cY|TyGy N "fZ!R7 ;Mq(@|!G8Nٞ xSnsS!,:# &: $  " ki$}YI4TK" [1$G3a;yV6g J H:kBd> 4x)k#\œF7ֺl!9V5|}1 * #IjXWz ui  J ^ ;8/O mvOa_(x}7dپ)LlΨ1bv.fb+EC' Jv(C?^/^=d u n#`6t0M71dw,a Q.Le mrq;%fxX,^y+|U]c#ZO"LKp!kG% YDRPNؘL<ַGԍD%4?6ϴ8:.`$ -J)BLM 0& 21G2h_No센fpmx. ?n(ιc:V.5I"R@}+%9,(1}+-J(+f4%*~"+< \>V2xS˗QNNKFBNSq EvHXc >o4*i hV^RBFV v͉"8) ){+d y," xP.B7 C.( 5/O xL.u '! H2$kZ YcWU.RNJ,F@]m:1 1Q)!O,=` ^xQR n!"` Lf"6x_ MVY JcJz ?f ` R2&t% , t.| 4 3 z1@# G.Y)s<8%qH\O)k][ZX%VTI?P s L;H D@6L+>r (8|1v (eah' ^(3V[*2JMk-%HC,_ 98)s/3%N#l'"m' !*i$\-R4x :3[ 1q2/K.,8X$4! vZ^10]0e[zg: \:NzQ:Z( Fx;/PG>1:B4(:Z +:0op$85eT"q0&{+yՁ( A'd, m, {^- Z-g2o-*&% R9i_,^n]ZZ.[m^@Z_TX0gS+P)'tAM+ jZJaIz1XI#C*L#J ?J 3oI'!2+K:t%,LyU)MRl)bM؆^%MfaLʵ2 K7Ф H1 2@R=Q^ 6! -Q$I U&q& !'j $Y$S !`T_._I]]^9W]Af[$YzsWe iaS53`RWS|IU|8[4(Y~! X Y8H ]L ]g _s . i` `ڰ a? M`W {y`_ YaYh}o!T~"K Dm_>+[ ; U4w 幌ayaR_ >_ ݧ`_a azM`E~^a8Zs2\jb[YWG[L^ <#b$ohg_ EgVS .hL5>t piM`loC`EpzErhs֬Ntu9u$s[Y~ngf,_ YBvUJMbb[ aBhc(c LdHטdi狋c !~PbxlbkyZcINe@Dj+)qC,uv3hKv:[x2?v&M//mA5t2m|gI p(LN ι99sٜƢ0F+q̟-mԮ`ÊCvyy} LzIщrUu?\b̘{Egp#.뻘%]x?d5!HT,>x63E`CZ}p ؈L:g U :5Q\̳A0w}n  hf|?j,=R0^Xl 3uarZ$ W+ . 68kD TqhYŐRX>J#f1$ %ѥܠ?6 NJ_eY5r! B^0B.|KΈZGğe"_`B$- 5^{B@PObdtc~A:ŧ%1bKɃټbuOTx{oYY Ї{!whۤ R2+' o%ԯ>?A4.к$$,%v͓/͖6yDs˙S}djyO'ֳ' W מqt}zF@rc Ð;ە$j9r_ `- F'#4 !='GJ  I</+#"&x/~8YH,Zky丄nm<u2~h՟LJ)* чs+zʢ-XiaSXr8Q˥ /7(wbxP+@G0!:'  FS`#1<Q;CJ`]?,nqE{f'4#mI㈈ Jr| ax:Hhš(g 5-b udjdft@ & Q>$q0.2;VJ*\"kЁ f:uq VիXt>I{*{$c <$( " #(  [I|9Gf65#TD1u>)]oO^e_{TީVk'lRwفw fi^8ZwW7sst 1^)- o%}$& M$9 " @ ( jm~I8  !XMf/jb0 =Xy)Ca"Q$O &t# B .#@ n [ y ).~TZEg o9*)>7y&OKGc Y|h s|xw pR i E! .x}y Ep!|)#x I&q$ "  >]*n|` % 4Io Wb V{%L[ɂ2t0=8 | kY>5 1ۼfQt!dZ! #; & # ! C |KLS# "  2s 4iG3F `mRxkp[+ Oҿ(imtzmR ;6-IZϨ5+'#^#XMe! % s# ! !./Bn7[NlEMԀU ՏڭR>ջ*{ Zc#$Yg#[gj$ ʷo#GþP/ `+ m'0!!Cn +x  *) 0 u gEqUb (+.<-P|mYcv.+ s{#]W3/I /(2ڝFdHη0s?G=(S;25,@&o"'dr`c pi S8 S  W ){&z5%WIK/M\U|m=zr;7$`RϢlYV7V,Y)t<`' hDhe=993)!w G_Gd?3z  ]0&tC 9ʺb0AThfx' $K[M#ہֲ]1*ᤏQ#4n/!i2ȁ>{sC(@W<52m-U% Cb3R*:}7 TCo9N6}p=)aa9M brU"5<^&^ɬ^m r}v\PHlw7d|`]IIF^CJ?:Ma2&V Ŝ 3S1O0 ==3>+G,G]4mB|9*.'~1n~ "c[`+=2R> !L3Gu+CU @ 7ҞN K?HD@Ɣ;P4+"q_ 2lYSU/0%+;@)7X Q|f{~$x p g~n_B 0T-&FC=.5 b#.9M2%+"$+ * 7) 'q~$zRĖP)NdKZGC>E9;/&'XU"p|"vuX7El Ogk Dbwb w Yx  nN B j4 1*!" 7U$<R V$!J Rj#m!!3#[J 8 Qϼ0XP6W3[UncRaOKG?C=77[2-%iC@[z n ==e_8 ^1 WG 9 ,^gQ#޽#(|ڀ#VfE%R^$yR$jt#&*M p6@?W\7 ŸZ"XsWyU2DSc%tPp*&MLI3E^?c@$39x1 p*%i#9RO` V!gM N#- PE%AR:%X 1P#ku(l "$:!#^($#&W#?%3hEd# "YgkZ [#Y:XmV T SDQ~"NZI>`tEM^Zxm@ k: c6\3nS1A^3( 5#3:+3Q%*3h9Z210_,wq)=} $! ^!"K  m#c_z# w#0!N*ozYpص}\IYXdXg'\$jYmEnupZe6sSy=.h o ^ex.A @>"T[QgekPwk oLsCԝi hNK8C"cepjH@m q ЊDse~u o`y_C}Jކp* %=tf! />,TGh0rBuzX)[ڊ1ѓס:>$\l ˨niq v Py;W{Fw/9g|S8ƞ 0%80?Qaey/(yb(wi[Э_3ǿ 0nsTvrz!C} Y~{ p!_MBĚ!llX >p 6T~()2>\PFe>iu҆C:ݍꔒ CW 9}lz}k~ +Ʉ2FwRf̔(O_b-0 eC)kE|7H!3))T 2C;f ۔'ʮ"΂ΨȜ іЅ V!~.Anȗ [GBP?"=3nUJH)B"')2|:gGoxW|hVwDJ$ĸU緮,G_ثς\c<\wYA8f, NU-RM' 0yIH<#k+#n+3lA;9G#zUgyيkKhQѸ1x)6ݶѳ}X ~ nc[KBY!ȝ/ v" &=-4à@2Kę[ńjƃzǏZ(2 ǹ٫ސ_n-XޚU GvԝfTfN'OX2*)ԙ ?SӒ! pؾ Jpח MHXr ?% 'V17CԳPja՜p  ֌ ɹa A? ٪Ƨx֗1cާŕY)',~sLn:]U_DY#Vr W>B1b B(Gm8i j'/~7C-DS`cku J-㞯JY=m>J_fր4e"o$? /#  " v j `X?gI3ht 0RE}%q1 >`:!P/dm -z.? M%ƛXb3]}6au'b'b7pTr H&~r# E$ "  'u"Wc7p t"`U'0&-;g *N7cLR4zt<"bʎJ5,V 4[(2A;c[h$ &8 $$ #E ! v q4Wj#U<z s ]-i%9l<3M9@AcR {Z9_ OB8dV'vYF`c VRixWV L"T7# % U$ , $# Q Z A ;99'[~lK 2|*>d:75KybR{""#77o.UBE`w 7X"Rg *q+!:# % g# {"s | zO~<>)DrC%5Hmb!JzXvg"ےf#F b w)BIPp!4uhDl" % x# ! =L+< H"l3[F _ w #%0p "QE AB˸ QU,!L CR]vz ֛j9'i6&%#]V4d  @ v P <z Q! .( 5V.UBEFXq[:g2z:k Ȱ̉!? %:I<uփl!jlWHK:&#|( Mdrl rx  ~Q  c# -^ -;.+A;M'M/i _Vn x&y0v $Ceߟ=ۍX }SNjBvpe/C*$#gd?Y+" H<jn F+<$9[3g2DxUV\"gZv#{F5VC·a+*#TrYȞ9M$ďWp9|4-D.R'{ X =$=n3!tiD>9 Q8۱"ZIþ-G<rN}$gacnk|Y Py IZ ?RO쓴;8 Zg|'(w5:_@=9"3ߤ+# j.֎? <0 !Y o,%G,6$P6H72[3i]u'j7"Џ^44pLMQsC Rg/aL]&\YCECmӥ@uF:5,v%M*Eœ7CW0< BY{JL0TA^:T2 dqK/KCy| o wh(ksaK yXpmO3.*]HBC+a%?e}<=mVK oHNF%B=@9 1\&0<I LFI16V86 _ &h|I83v/Mgr_ qrp-m`hbo.ZWP ~B(z :9^s2Z. W)&/'"L'TN&olxONDLIDo@f;5S.+.<$Zg19 zA1:"rAk3dwrHA`[3[A'nQHGm j<41ڲ)v# ql \n nI(~T 1  IU"T%RV}O LkHTDe@r:W3+J}l"|s20l q97d =(\ B?Ue,6N `?2FGU! <jo q2.(")vd"ŵ8!@cBkth 0 | M (HM}$(=WA[V*T5/RP9.L~TJ^=CF,A+D<z5n+/-d$L>_8W7Ko9C_/% ;382 1MN *$d#|*k{pAm"-"9WksT~&  3 %m ѰXNVOBUSq8RJ}PNV dJ$sEHN|A#!p YX iWfUU8T3>Qx3gM $IS^tEKHgBVSZ=o M9q9Ds8v(983(u;{&:MQ=.r>E@^ !BBt 9CP !C= JBK A_Z 0?G k3nO&IrMU06 uY\ whi"%y@||1T<}Q}-~4%бL~gz|vA3D]cs]h^BC_BA_LbH c2 wc!,gcc(WeTEPh)pxVyx$wo|~v^Qw(<x=v3PwZ  z] P~u`}k;`{]? $^$ 7--I.wK^+^B r_.Mc %f~@xh5zh+pib l wPGp^:wtO@b |&)WT*A88A}gN`1|^?a`_cR fc9r[>$Ŝ8%&Sٺ_ ԩc: ΥfY!j Ql22m'zoYjrZv(G.})ׇN׋c _9 +bG7 K*\OzdOgzjg*Gnu yz2.9\ ɹG_[is`k#lnV Ȕ~r Bsf$truyGd3|UO6Mt LH] M-Oz6H^u XfA~e } urcLe*4B ;x{ z M%J.6FD5Qdb/qv.z\}U?dyѨ޶~:Ptyk:Wv;ҢRaEaj4+# E&/6C QzbnJ}8 dSZ٩O4* ; @~G=sScK*: j f !Em!$(J07}B8P+axm{WI_7Dhk\Nɼ=24BOzk[Xw >Pz!=k=]#G*[1M7YCdO_/"ljtzv}EerAbgǻ4Z|q- ғ t mXcȟ LӪg-dW 5 jG %'`s$K,6 3e:\cDNs`Lo882Nķ3ֆ/LΔۉ Ge8z* k| Y@еɉOʐ ʽib] 'C&S./54/Ǧ"l/P dlH(ywH>(lO(k&Q$\o2bt J ypc[ :% T$# 6v# "I &yMljK$.W 0&;>O:chCyt W#!hP],+H,R"R7X4>X$V & $X \#O Z z&qhL J N-&9c<&MZ\c#~y >>PbbyY.{)wyg9 ^R]|8!>]!_1# !%l L#  " = X 7 +3I R*]G 7;1KH)ba&z8eVTR hU!S Z0] a:A3ߖ!A N"R  "d $ ^# o"V _ j:o.Ot 3&;5Y5IWS!awayZ["{ހ,qhL,#J !1PKHk %aCmdGOz X |"< "" B 1[U * #B$34F+{%_6/s}T30kz޳Τ'*Vg;!`*9zW!v  Gu91 C\E \{:/mr=AaqWTח"d [sFF ǩ&4&of!7 Mvߵ2[u0!5i5*CZQi^#6o4%z:\+pZ u0> H_q0*)8LSJh,¶0YNhTvVZo5,_(:Yʫ%HYmӑk?(Iv:۰uiqR-*Z'#*(Lx!IEk774 w;Hx?D-2"AQ1@Pa,&l4xz ²O ~oA}&ٌC6a[2-/&B? 54ޑk "m٫2 0 /hc.':{^&+3=?"86pIgB!Zr"Sftp,yPz,4 820tw P.8͈Pg xq<h;ru71/&tҡS :͈?$SĂ p+8 ZFMq0("G)$33%HC I$^S^Ab<jov|gq^<6 CweoO|3 n`udc_N%=Z* ;VMAB̭@D=.ȿ9 32è*#}|"H^8%-.%&,%:{%L/mw#[xfpx"v'vuLso)g]LWUUXL3DA?N;8EBHQF&C@;5,>%= 7/;E3 L x"%o43j,BF'g|SVgd=fFxaZuRK60I> 7E9.`*=/N($q%n$IH"zbNNFLAJ"EBVv>]932-J)]"`S}5Jkv_[}v<m f8H`m-ZA$U|QRgeJʀA7T , $,d3'= < 4 Q^r/ =SBQPM$IFGJB> 8c0;'MJt,*ia20b kN\U#/9MM4%FG 7^> `M4 dD *\{0 #yB " ɽHV 'B < 1S W 9nmC ?"T5S$yR+=RP1L~J=vHjC&t> } 94sW1gv)OL\!ATk%NApi$D ;2g3zK({Hf "_< >s\uE .I ; *  G h' ZROK  U<HS'RLQi*OM _J$FDJAu=k78 ^0PH(fe#F#l%? m&3 x2'z"n!X$.,$CJ %%j[ o%p zh%} c$ "T5R ة"`cy:I _  e_3|V" WTTwSRZ8 P:M v\I~RzEl/6nB<9c=1%V8E1b":v..D/4Eq3QT6t%C ;8<|:eV~DAc>#i=b:F=9T,. 9 T> B3mBi|D &G5FJwF]aM|NO.OaOLOS"NH*P1B=dh7r0T0XKFW XWW U 3RIOGtMv hJeaZG/<&GD9iB2MB)"mEK>Nv@J IiH/jVAC5OXUD4Zj[) ]~]V\]@H^.^7Ү^YfTOLId/YL0Y5iZf XY$YG{WFoT< S[ q;Q"IbPK RND+@)MC:'N TZY%Z6[[#QF]i8}-A_aCi >bJS.6hې[kN\>t];`;Kbc_{yclVd\ft$Mpi6opyzx! 4us'6tO(5tD3WtS$Atv3`r$FH5rR2-tUD vvYBy\.~fDs Z n$΍:* )ɬ!.uĥ2]Kab c f`{L1{ z~&z 2{D w@Q wsZy\ +{^~`iHG mqvg}(9 }YF0bO  Nfhk|lm{p. ns`,vsLj~o3g _ u31P'GT:2lP;>x}aL{Z#|j^` c,k dT[ sgn ?m fyip@k)*yh0moLr t uuy gd|yCUv+>&)aٛc0 @K }j)2 ="M6\_cw] fhhQl/#[mA Hn2 t }цuBiqwZxT^zWz~}t m聨 p_ IJ((wfp% @"a#=,Z 4,:>IK]^ggm>* 2qQs;uwy>,|b: M4{Z i| }ȀjIu]eg) TL8f} s0 rG $-4@L)\ohdt;wQz}zz/w NQ" 76V|/jroK>` HD' 8%I v|Qp b&.5yE@L\3hW`tEP-.iXG"aZ І-=,zuvlhL~UΛ:^ҾhN <N*!'/5?9vKx/Zelg5@r;\Gvˊ}$(ޡ.7P^}̏+paIݤ*; #  5t \T Z#Y%*W.0.51?PJtXt.fF qh~Ph!Fc'+S,qawnXh71V0=: Aɧe_4 x8 K5a$w+K2 7?J W+d?qcp)O+:AȣI'# # " H 1  q ,]z'' w[.'K82g=>r*P d?(yxJ'&w ӕF\_._s O8# G&e* /% L# 0m# " u [k3 It |6w%nH1T(; 9Oc_&y|h ;aR ˠy k@*:'L;8qq+$+$ % $ T#8 E uov/ =r}  5".$9$Mc~%y@ 5 dmjDF:umaYhoF-#SuO p!5n#  $ C#  " O0|zM< {o+g#7S-KNb5$y6W I@>^Uti{ִ& Ll.&G 20]7[ dLRD[t=1  5" S  E[U$1 C&)-'s52\W1I(a v!4D0ܓbާ?j@J6ʿwRsjO1! bҤ6{Uc&OmE L_ o5k $/3L Fo:-]lٞz\ϐ{m{Wk9Bu -'3j P&Y >ny!m$W2MW?-/ ; 5kzi+" "/b%?9Nͥ&]e@iw[_BUh " $I_J??PԁfYhtKÍ7ƺ9?q"9x1IFK6 5jh_BU4X(-^I$5=ƯNC}P `wlqvcEkWk'\KA";K2&ov*&.!]#j3ubG2$  ؒ*!&N'8Y.c,:,FI9Xdn$ltB}0NFR.B,>zJ3؉ޮ409ݡ*o #? ( ύ1 a.NW$%E:34 4\A^q1P2_wfl}xU6|@ Ďلxc{S}smLҴ;"Ѡ7Zy3α+%KV r›aH*"4 T 5y56]=.5:eJ|AHY2{2aN|i{}6y9 &F-0s)2z=lj bi\ $U#Qn}JA=W>:|6J/'!{7&PBbe 34 sY@)*}u$sc3myDTkP]mV1["nhn[zl j9nhAbZR4 VH~Ad<"6- 8S4K[EDA=H8;2*j$$5sCDZ#\@"sLjc-^==L^6I_Y$X^kY[S9[L9E; 2 +r>(%ar 5>Fd^QR(KH:INlG<#DC5b@[<6/'. !5Jcuf j{b[ Tx&>O7KJG`n?+r:/1&) a )kFQG\+o 8J [ j  QEO(M7jJ GY)D W@; 4C- x%'%mI:.,cb3)XQ jKQK; WD6f>s25F+` k^C# rB j x 22   W /, K#  N1-F x  m%  K@RplPO^ ZL K=ICo9 d3eY,J%2X;S83\ *d  O N'c;jSb v qi m <k )M c *1 P cW \x [  0 )~ SP9R%RVQ8OZ8LO I?aE'ju4a-B,6.&k%&,D +/V16?V3N6e6M{8IQ8Aa7@7X6d81Y?*n[V"    Tb%TZ/S R/Q4N K ~ HS5qwE(H]fBOK[>L:X5<\4@%/4F:; &; |;4+BNBmE*W!GnI,ImIЪII?1IO$FD@;I*4=ci.6ƧlU}UUJ}T?iS<^PW NTU|KoH#8e"EF?WC' FM@BU61> (< BEWF wG I1NX7PHTK]qULpVՃvVx;W$X8X_X1WQf"L F^VVVKVWDU ЍCRLP[{NKm'MH:~_K P1I@(=G@&H LRQQsQR{,8S4W:CZ>H\KE^}\aoZb;c_McqqdS~6e)fz^e"`%M]WXX{WAV ITT=v^Tf'SVXRpHhQ$3RX\^@ B\Q\y\C\4*\>T5_yBM)aE=dPI;-fN`UjlqmCn hoT#ph(poQo8mKX "Y ɢ-YD"Yi66XىY2}Z sn>Z `YPZA[u'(ahfud SccCcQ 'b1Cb@'c2F+eaHv#1g}JM7jW!ndsuT ucvYwPQ-wovYvygY[Z Zb]B^_ vv_h`& Ya:Jb4hZqtFl` j%i.hAhZ 1Cg.A2KgZ=8(fH&;hfK YjL9 lOJplZ7tdvyp3x{r"{+n {j3 {ǣ*{ʯfDZ2^Gn`U@c?nc ~hdP{pe cqfrSZi>Aob&tx=}{Ut\qq o{ @o!2o].'m9$lID7m#O!B oQV rT\^ tVxlx_(zPe|Bn }z&SA1SnV;eNc $e]gJi5 +iwkNimF:\pHw1 U&.D ~T|J"|%{z #yw/Oz}:&vfHf ueS-vX(x[-*{i]|_ bogR qo{3  =(gj5l ҏ9mHoD}p wptJcv R};ڇ8'SGe,^&)^1&-F9p cI~T~]{` cMh ddfc !gAlnNu$l}q ͐sJwdtb!uWvy7 i|S\ G&l#J Ts ha3}; 5h)t&129kGXYSp`$$f~>h;j("m n^pTt z;K爣yw+Axwƅy|f|pdB8 R46M4P%. bGHY "+q3j:[GJTUdai nAqOsCuDx[jy |(( D{ ~}*wkk ]ˏF.C%" 1 ,@riAY b$-34<vFCT aoVorw"y{n~OQL sF .~R sf q RB7؟}w/*+{ f &/-4-=ImU,bl) yMP{~pu5I+jgƇ/yydm"i^d  G+`' \>2 %*6C!o'g(.4$o81y*<4OdV&y}l % M b„_̲׃d q#FpMT_*<E1Qe#]7"A o# 8" y  -x^EF<O]X %#"'"/":&McLx%y ֏ VѼ[!FKXK.W /lO +ޝY%  U y   f P A xepT$p Y65,JK7D+Kba)pUmۃx7 $ыN<nʃֳջ^,my>}@N!?@ uWJ1Qkf H\|K<}@ Al((>5U_1Ik) DYw*dqגvс-x?ɿ@G7~:mq$<{!/պr 1/y U vf;  k~  %S _cx)$"3l.B/O.HbP3n{=U&hV3Ik Ȩ5 dyDYҺ8WvIp6*C7 ~k<}<IGo3, 8 R:n:jw( !n-6F"Gc7P2S0>#Ta$yku~h7,I;/zXnʲGPL v]} 9? u T*5DKG)t8 X %fV}_BIF&%D00 ˌK/~x=:Ma/I;0V?@b$k*r -x#Qr`62i1: R\Bb,5M1(,$ ;!T_ܼt١֜1:y 1o XSDr4 Vf#3D?FNN4[$d h0nt~[(5:i,Z1:#ӧ[Ps9 }0֊1Fՙ+3&pӗ AC˫ZNA, `Y[ :: ^h4+#p$8H |T h{]&}a~!kzQ ě&-"%=uxoigk8`4ǃ0Ś*SÂ$YOJ 01*?Os  " #5 n #1w)(2phDA/nM]oVU@EE x\  nd,`9>`wF:bMQe\mejvdbEa|*V\_7K\s SWN)yD>4[ 7| 2P 0q rCkAn? [; 5H/("=E%4:"-y"w1"e]U$eRN4{P}@QMU`Prw7J6D+?է4>-1'0 "Yj }LEM Zn "IkG~ VElEB<>:oe4zK,% x+lb(&b8WrNFYD 1A?? V"6.m!2'O"kke9 yLukH i ` GD 8y1 ΦN2BL5dJ5fGz}E4 _B8+9=C9&Y/1y)pQ"SPf]bRAe#F?f9EQ2"/*,@?&$J`VPkE]^dC(Ƿ #ձ= 1 Kp /t _  c@s cO(M lMJ=HKEBG!=x8Oo11e*@<\#4Pu6D-8 JP2>_)x!S 'A 9aP6afY}#R . ?O !{ AX  M s Q< ( X  7p4P)Oe[OM {LYJfGG Cs}?s;b j6) `9/T2)#=F"w261 'O"}1!L4 K51XLP'ciHWzj*&mw*VqYIVyx>  'n bc cgQ[0P (.f@9[$5N>/{L?)%,#C/"&$ 9['pY)=2H+EI/Y1on1118Y190/'"0)f}]//Rd:QQ4oPTM{ J^G xDEl{AhI_c3>'X8:7JW5}.:{0 %+F)F03.+=D*7%7:51>$H9A_Cjp'D\BD:7D.|DFCD!>81+S`SuRv.Q*O uLGJ wGWzkD4Sb@J5U?*2DsH FAI+J.N3R66$SA VPXb ZNu)[, ]4 \]\ĭC.[緉f[r:ZFnZNUQ IU'U%RT RrP^O#`rP =c>NBUuM/9E\Lt?(1'MxQUWS2S RfnS|S/C S6SV+9 )Y;IZME ]&S`emcfwRcc#cDbڧa aC%gyV2V.V(V" ȐgTjtU#yVvjU ]]U9MT >5U%Z:aad[/ ZZ%[#Z,>Z8z[{=IB^n@)`eC"a JF cXffehpei{j(XBhiG&htlVFWWKY ъYuր%[9r1[e[dVK\,G]11ai|mf; zc bIb(PbX"20a+~$Eau84$abCcBFq#eH<g|JmioRBNl^^"nieWkpmr|Hs։isP ss,Y Ϡ;\,[^UKx_P d`(ay`{lp` _`b#P c=hV$qfwtvl [kajsic+OiB?3i+Khc7PgE&'h6Je jLBmCO?SoQ%Vr8Yt _ue yiqf1{||%|p};5}o`$cG c e erFrf`Jf_h XjEp.zK\{ wWutz2s$$3s!=63s-As8-pADIzoN`HpRuX sLT`uXV/vY'z ]0|5bXi|r$%{9l m1hg8ZhWj Sjyl.l3n=`Zq6O>wY8a&-x3?~E1} 1R}$vp|S.l|6k}bExO wXs!y2[*{x]}_"` +a{jfDGmzuf0}RJ;mzoM$o}qU r^t@fv X$|D9$JÔ  `Gztsw&N/&71CASZ`BqCbp ;d^e^ g'0hNnkgqyxJō:s t4ւu: {x6xdKlZ{4af0OK3ڙ 'H D kh >(r0`6BbP)` ^cDgni2jl oiUpTsGx~wzCx'~ z]s[~ng'PY]mCÑ# 7? .uy<Y"N?*a 17O^C8cNC]fp(k n`[ upQSqtgvcxz"K~*|.~ yS nLn b@@Pir4M2 tpj|#9++219fDN3\,gnr!uiewV%yB|L~ & |u.Zi^a ZϒCDR%Q$ll$g 4t0[ %J- ?3:YhEiP.F^(fqXxRo3Ph dEO%yװf8ֿV z4 5^; fiaw!B  [^(l<  <sk_ 6%#y: 0%;d'Nkcwq,puO?tfmx)Y?=AKX]?t%LWt ݤ#b R&lz -l *Ac7) 2 ?"-%8(L=D[m^"bn;z/,rpty= B: 1"*F@`0%!K<^u<=zNi; Q ^ `Met")6/qycT " bÔ :l%"0N23- 8hFX|bPDz Z3{^u~doxa5\~Ր(׉qδ-f͜)T}% V#r{hlWqx}4,ZB 8  EwF$%zH3,2t>=?*owKFNn=R-*p5OV7r`vNkbz~hT? Zh}zu|lKfB?6/2).,z'v"P dJ_='(^* +H }}s7jgI+Fb6 ao Cyd`JGf^lQ1Kg]iSjjl{epQCnWiW`]y}Ua|OonJp><96dk/c* $LR; Q EGwX s{80'm 0` W".S(2G R<U*CSZNl[t_aQZrWX<T1R"M?E >;:`5J 0 -f7 .5A^?<79"3J,d& u,|UW xnn9]gP' GEj-LE5HGbAqIgUFjIAe:63 )$/\ _ ~ ^ qAYfF7GNEC?=sIY lF@WCL?u{c; r,4$(i)-?<`'hW!SRK ?[20 &Nu {/ H 4+J `v 0 4 Ƨ"G9Dh QM pM1L8YI G1D0*@tx<n7 d1[s,aO[&;c"A 53`"P ( Qz i1cF|$9]r*2+I`~S B 41t֡O1eaNBM[[K^gH TE ~6B`Fui?-k:a6 V1+JW+M<%s;* () ;B $$78(2I+_+q+ *ß))D3)s$^ &+u4)&b',A0x,5::K=b>1o[>>Q>J="<ǚ<f6 2+HQ9P- P }N'fKOJI s}kF&rC]g@2_>a>'R*;MB8kt(.53d2d0147t <(~?q1D.@uGR-HdIt}I}H=H1(H+>G FqȷFkKSF+{bQ"Q9QGOY>M0JhJe}JHs {s?FOgfzD/fYCE"I@\:9?U$?G A@C?> d@gA)F.bK27L9pNWF&QUG&R[gbRLuR+~QHPPdOO]0VܬR Rt-RgmP-XNQ"Lf} Kn+K8`(J-RIc.8CfGM.H|L P)\LJL9 sKNmLN+O13Q5T7 )U?#WK.ZY\Wi]-s]]\3[8ZlZx~S\S\ SvLRDPhIQ>uRggHQ)YPZKHPPA;EQ $_U [\kV VVRW;).Vu).V06#X:rCkZ<\Bo\?i2]F_sP|b]ef[epg:gf 0e e3T/gT"T[:UgW- |jWnTW zb W>RWpDX).\M;c/hav^j {]^~^T(3^k)@ ]6+ T]>8#_B*aD-cGV8 dL.TgV$i_Cke? o*qp~pC"p1Rok!VNY2-)Z ɋy[&A\&u8\h\\R]L^;:b#iqnykg f> eDSd%dg+d(O&ad-4`c@"dGB- fvI~\ hK<jgLClvSfDo.ZBq#`6sbhvrCxX}y(yci^l `A Ǎ` ]akza nnb ccuU eBj+TsD{zt poLnmIXRm'Nm) k3EkW@ jJ/ l N@n/PP pR\ rT-] tWuv]K'yd@|k ~Fr.yZ~[dIelmf, jfgtg5hic'\lsbKqt5zjXH? Y{ }yryEww0%v!J3v+*v4*s>wrK_arsRxRsU`uXb.x5Z*y\,z]~b gs n+ot# |7j[jՃUkCylmnbr uTXw?A "~n{<- `&; +I !3#:H#M<~-c~4l~?p*{Kz0Uz [+{^}_"T` a| cbgDeW kq<x>oo~q {tEt"i#v ]z K0勛=5 A a )% .{5_+]>DKUJd]6dbut pc[ e d MfQhhiXk|pL ts 6t0z voDydp|U:Ay"d2_wC "/+! '/!,5#7>JZ>q 0Qa$g1 d#*1Z69@JVfaNmQorsgv+x.Ez|~{t AlJ`Žl M앪3M(bSP6!VH%.,01m7AJ\T)`jZv3ztx0yzfw{=|~fC"^! 6 w  % R ) 4? A RH e53y+S)(W%k)mrc3j*Î ;@u ^T@4I(>  L @e 2&492(? )Q MdY)pKn46tX+x3~#Ê4P uf' /X n[i .78K`o %9M1$ a],#L1(<=BO*:\EaY_'a0cftk0rI|#dh)?hGan49XS 7!6ܪq&q@L, T oz d CYZ!?_l! -q"99#IFЭ-K,HuIMfNN?pZ  b hm'oq+ ѹ'Zh AYYf 0tO &6C?1O { M QnJma$ */5]3/P57,;;GPARM]r.X/a~g00j;lxo{ts ![+t"p|L6 x"*O>!rH6? kbJD uz +P,-JzJ7c%ma/ ɂ+5GU*6+%@?wBK|-zN % ' _FAu 8h8+b&5bsAnb,HidKAeYeRqFg^M jjmC}jjuhLqxYvSqiOctG4x08T+n$~  9" ~" 3<7Hjy! uZdX"jT 00O S8UO@ZGz]Q]q^N_JnV`z]x]5?[YdXޤYpStLnMG^r :l7K3.*(#2S3 :H 67 i=Is e| 3TGE)E3HW8K FOVpNeL}xK5nGqEz?5ۨ8Kb 1 \-/ C*K Ԩ?=<751V+0%,@fi[^FyFo+h&VF 9i7"8-#;>5>Je< bF7hu2a*%) f #v AyMbQ:LECAU> :m5Ie/)"{rj 86aW1JO;7*f)*((g+9&ZcoPV1 ͙ 43z.HDUrz(|ϞJ\ RI<sG1TDpA T=f ;8R}2uX*Y"l%4b^d 1OH]PS7,HwBJQ=Iz lFC i@ax~<u8 ln0*.d]+Y*(\%%U)RSQF);g!! -) *n 01eDgwZo^*# I:5/ #TyW  K jK_ eJ< sGCWDOAA|)=r9 iX4 `.V( J#,>VZ/QA!7 lJV* +<OZ>eD z㑯XPe(ײ+ 2 3$ O3RLe-L1iKwH3 E]]B z' Q^'cJ&s%d|$#0"ض7"(kiDN\M"h1K\PI? F]D]y2Aeo=8e:'\16P1 E`-:5(#<%0! {J$T&"!,13-A7T7d7q6=5ݏ4b3ங22)Ձ0 .,]>NON b)LtOJY H/^vE |xC%+nW@!teO< [:tO8)@x4V-1/.*w +-1y7a"d:8->7CK D[DgDtDCCB[BXA@ŔC+;yOBO( wNuK WIKGB yIE+TnBpc@iBV@!%G>;5!8<E#d;p P=n$sA+-G/JW6TKAlN@NP0^PxlOvUO~OQN!MM;Lm3PV-{Pw?O7q1L K6NI7 yG j0H7]FMOE#*AC0-(DGAJLHvGn FUH~I'L2O"3Q5R;)TEG5XQ<Y`sZfjZuzZZ{jXkXFWQP]jPC Na M,?'MeqN6deM3VMHK3i89L"P5VOV~S7 S& RSfSA'uS46T?77zW:>KMY<[GZC?\K^TEa:^bhd udd5J,bOHb,4QQOQ`yHR&|S| xrTejS ^SaOS7B9S-Wy]c ]iZ Z~ Z[!|Z&=[ 4 `Zm;@f\#>Wy^A@C`~C3a.HG cPeeXA.g_jhltmwmY7l tSV W,hX~[Y5QqjYSeY+KYTY&IfZ}8Z]!d,lT h b a``,1`\'a&J`J3O`E=`C'bF3dH> fIdgMnjU[l:[2obqi>tKt8$uDVuΊA\ \^ ] ^A v^j^`F_ cQ]a}@/e[)=m5vhub n !kQj)iTmh}:g9h'2g1V$gt=` gG-gJoj L?=laNkHnPO o>QYqWt_veyk |]s (}{iRaha 1b {c'p dece*XZgIl1tx~.|u t% r}r+q>#q0p(+6p2*n;j&nHN[mNP oBQ S qS&] sUb tV\guX+y+]M-|c~hr un^s#4frgIguhjGjM_"m {Pq>y!u58> }|jp{^-z?z!y^!qx*}xr2<z"=$uGstPx@tUZvX'xZ&y\--{g]|_-a Beh*k]@ 'qk(2kzm$ooe[rXgYbvo-Hf}z/`A ЍiSjaWGW$.27n"L.1,RH~3w9};H#|QW~{GY {]]}K_~`X aQ cLi de\*fcf Mi[nӃ!oF}Gpdur)kuaxMR ?B VHܕr~ n7W|K %_ -3 y;G>^U3aZY_eo'br yc[ da fnhYi,k:oVwtT;xvh>qxgi{AW["wJt0N 2HQs 'Jw-3;F TR]bUq|ee!g0h?j?*l 1noUqQzyLt\{ mO}bƀLTԈ@" |Pd 4JK=L!<9(/x4M;FPP+_ dAg_k"l n`pTgrt3`vw]~3ohރi\( Kmw1Ȣ4!=   \*"*xd! #[*#0"5#o<'G;IO[g~jhn9qv;qfrset'9u Q!!W 9 H k ~ I5x P *44AB@ RI eR1 vx2-  ˙1܋' i"z-2{ :\g-S. C] xURk:$ 0&+53'?!(Q:wGbjL|m!poHt{^2AXŘ$,`ti Q9&Dzt U3_{ g )  - %  U q"B+$K15)<6L4!U;&Zbf-[H]`gd j\rrU +!ۣ(9p~*#4!TaBhO#uZzM."* BP)j3v .S  --#7%?b>F,H-Il3R?4Y[Daeg9iuO/|q3ܸ5 9ڰ$ջs-C080JH3/ j 42j{a<! _f*3h92"7m\L,9A?:eQ Y<.`i031G!79,CA~L|$:VR!z [z]{ua{e{l{tf{yOBE; Qpw<Eڪ= Oբ@ie,Ϳ! R T y+E.Q$#%.~=a4qCx,>rHppNmpvURs6Y%u ^ueLvluteu|s{h.lv{aT9#U Hb=ʃ *v G ,+\; %% P- Z t%&&qO/kd8Fh@$CgJL?gMDi ~QXk,\One;nmpmxl(k~ 7ۆ7~+~zu+fI'# { Z -{@h| f {uRs/bS(V]P3c]E=^E`H5adN&b4W$edfqdbf"hb.iJsphrb3y/2)*$sJH 4ni. @LVX }< *r bB QN,N5PE<T+ETX N\YYZi,Z[WUxS TURPRFpKoFFts n96e2->'"&REt 2*vhgsJP'pcV RC@%A01DY4GeCKTIbHwBGCY?=ԣ36:1V -: &)~ X?^W=!:q6 [0i*?$ _zc~pw6mfTdDa *42? W3l'692h:DD97^2q/ *D$2G-   K=U2[ҡE$CA}>>S9 4+.(n")yqh%#he w30`6"UWH95a&R%El&R$(J5%iW9k}~E : !=GMxH \Rŝ&I H>&FPrCx(@? D@<V'7>|2sK)%+k$]YcD:[~m^ Q|c"G^I:I(2QF- &E+cE ;[/o.JuS[\vuڹ&_  SJ@I?'H,E%B50?|q<s7'j0 b**![$;P0QEF:jdf,$fx 0Ih:~V_CiOn0'Kokcg$ KK<:J nIa9FbC+@ hz=Wq'8 !ge2_i.Us(& IR#  =Q5.!H?  )! /x ']9^Ka}uB bs- ݶL G eC fLvKtRIGT D qA x>o[;,$ce>5\b1bQ,%RF&'GU8"-(xf8 t(8 89!$LC%]&$nQ#4"~!  #߸kMWwcLkuJ-Hj E }COw@pm< 'd913/[ 5>P0c D+' 4'q"$<: _##^O&!*+01?7R73c 7n6O}5U4~3a2f1x/-P?N,n5LAK7I G+ D ~wwB0'm> 0d;Z99N64?3K,, 0.<,)+,|0i6+!9-E>"6<BHDjXDefD=qD}MCACAAd@?B%*NcN/iMmJE H F5 wCDm_Ab?U? -F=;-7>:5#C:j o;;[.9R8 ;bB<"@)FS.=IU5:J?MQKOa\KOjOt<O|lNM`M L4KOOwO ]Nr5K J$AG xF i-F\E bNZd[Vffw]pliuf,kzr.l~lp;Gk3RU< fU`8WA }W pAWRdW1WX(HX7b\ !^bObj/g/>a `_C_%4_K%)_%{A_^3TC_H<)_B4aD3cG9e_HF fL,yhRjZ8ma=#p:gds3qtk}Etu[ R[3\ ]Q u]i]_b^oPk_?Uc(k=!ts0l i hggH2f1g'K'f1`Cf\<QeF?`fI^hK0jMIlNNmPP pTU }sb^*uzcxGi+zpqf|ysK ` ` .a zjb< nc dsdW|f Hj71r|}HztZ6r?qp oHGoyYn'N2oW1;m;lGWT lMd6 mOJ oQY r4S] sUb t~V3hw['z6a }wf%ld q*eGf ~fYytxg2i3i:]k Pp=Jw!*{ {z<hy?yHYx6Tw!7wL([wK2\w=&tFh{shO2EsdTUtVRdvYi$xUZ*y\,{;]~9` dG|j> owiZjy}kn{m dfp zXGtG{{.h 3|m"0'%=~"OE~+m-~(2W}:~Hz-OryX%!y[){W]|_~`D !as| ~cm 6d^ h+~ln4{o tpjnt,`wQ}>Y4) L!# a$,3:U zFR@~YP~^pxaay cd dc cfgj gi{m?~@s!Dwu,gpYw=fay nZ I.ۖq<>c jQIV{ b& -R3 :cDQZ`WIdM[ KebT fm5hRjh*$l#mq mo8Xz@xds;zk|Db:8Sl>h!bPZv( %7zC  '.3:DN^bfChju(lxRn3pTq7sv}hn gM\Jy0lrޟ# 4^J#)^e/E5;; ENZ8ei FkI nD oSpTq}Rq sX%8w UN k( bt"l 6 Yr*4BB SK dO/r3uszp6 `QOL. fG eQ7C !qa}),Y; {.'L/3N'@.Pz&^HbdSfpiCnFu`T/p!Ѡ>V J5u(,,2!"''Y\ @. } `rTU"*$gF1e,<" 9HӐ'MH@MP^Q&R'%*UbZ`fpIxR#<z!,3I6d=3xs {%|R*o\,!!-W!4Y`0:l>P@R[@XI2 }.kPK{=WD'{& [v{=]{_Z hD3<Kza8yM-4JQVJID" +A -Y_`sy#E< (tp 1ƈ$6a^7 Q5h9}h>{yH y uNRwJUT3vY)w'[+w]wa!n6< >3nҟ6qtLT i}7Qmv:6D# f=+ E + |'zTNޫ!F(*kt@4}g868|V3}RL /E3=Hb$+S:\&2'v<1*r19"oEimVvJDlSNXlUQ;lTemf:Zt(mk`8njeHn~igtu3)7v\tup&K+ ~Ӄi/X)̺ Lǹ 8T 9 U,4,2I:!;,p /Pknl7yKh'AgUH?gL$DhN7Dg{RqVgqYOh `hehkhrFj/) ~)1<~#gˣʀ'w; æS]s.=K0 ` U06TEG$%|$g+b4 _<__yC`2Fa-JrcjQHb:Xh)c*`bhi bp+azp^Twe|v*&"78+,YQG1@yj }* =1 :}f4Go!FW"NSw3.. TW6U?XCgYI'[cPq\4[$ZeZqaX}CXW_Soo' /g/a^2St-b9)#^x4px%LZ@8 vz/P 7o^ HZE&F1H6LF?+OJP>TPaOYozMnKJJgkPQnvJIp O}:8 :F+G<1*@9WEAMC^vABm$?y;8>#5'1 `//$0g n+ (K &?E<695&/u)o j$y{UsjcR7B ,+6+"/-4i>p44X-i)f%&;Fyڃ4 *GjH S$i5D(QA1@=9 31-G3''|!PumTf %$]BRF53 8 f #o1"Ndy]|- ,1$ %P;"-&6#+lF( I;lG oENBs?k J@;&(b66y0 p(h$-SPa?%Y@s'OXf#D#[8C&/ \UY%Ry? T hz&7VuqP }.kZ 0>eou*# I>I6 kCG9=DzA' e>z:q;52h..16a) X#n]&Nn;CO^ 8Hg*/ ; `,}=^.OfHbCHs/PPSW&Dz9&x2F4 iJ hI qHG\E B` bz?exU;!n7; e=1W]O,S+&TG"$;@, :?k 4p FXi }x 1zZ+/',}*B')V+.4F 7+M_ LcRJ ItCG ~D uBb=lC?43a>*Tn=7F!;G59"8 98[6f6 9g_;!->)vC,GR3I=ZL&IN8X\NggN{pSNx~MLPKKJӴDNu|MtK J]|Hb F> uE sg[DZD$/M C.?A'?+ACGTE.C C DFJ%GH/L2zON4:P8 QB TL WcZWcYnX4|X|WVxV#Oh4NjMjKO J {KnK6b4JMTHIF8HW0d6I!LbOR.RBhP O NiO)P&"P2Q5T7q ZWf:Gk:X@YH6\PSR ^X^"`b5a|nb;|b ak@`̗OOMOHXWNsO6PDu%Qkh6PI\gOM}O@'P+S&Y*^uYBW WWCX@%!X%4$Wu3sW9LKY;V?[>]@i_Eu`L:DbS$ZdZrcgfcinojzk9hjeQD[ST#U+{$VgnVG c,V V]V&GV6~Y ` g\e8_J ^I]3^z^f S^$2I]2B)]:3+^O@Y `C ;bIEV;cG79eJNfPhVH'k^$n[dpm rx sTtNY ΍YlX"[LX[ tsg[Gh\]-]N]>a['hqpHj~ !gw <fve6e+d$*f6&Bd0'd,;KcD@ dH; fIfi#K|'jLGkND mRgp[8sa=ufZJxl#zvze_E 6_m`Fxc`ma< cb"V cFg/p6yz;wZ p *o`nmYlFl`Tl&Ll02j9jEL joK0 kM=mOM oQY qOR] rTQ_uY}3w_0+zd}|i o>d( Gd|drEeUggI<[isNm;uK x2fs}O ByGw>vBu$ufN!u 6+Bt'ltM0u :8qCpMDqguXy-w$Y%x[O+{^~b gwv Zl}Php'~Giwjlk3c nVr2Fy- :zt *M~z}f}h5;}":|D!{*{<1{c8{FwMwUw#Y#x[s*z\0{^8}_!,` /c xfM jxUl]z6msoAfhr/^t Ow{'<`ivn 8Q#%*>#[P0=+I/H2]m9HiDs}MB|kV|A\|_D~t`a Obr dS[Ce\W foj!|bq* urnuIew5 Xv|HeV.y%@ Ys ; Q%Dg,K2I9{ COfSV ]W)b@kczb dIYe\ $g6hj)lpxivKqHxjcz]`~P> Ք G@+ P'[< & -Q29NCM\_md`}frgi@(jm qnQ pTt{ m\}fb6ZIo/O,睥+M <w @. K!Z(@?.3j9NCCBLe\Yd<ce&%hm3k!lt#m mgnHpT&Ms+(%#    ~tj`VMKLMNOZix  5 !K!"`"#u#$%%&&''(()$)**++, ,---.m./G/0!001g12A23334U45%556]67.778g89F9:%:;;s;">??@@AAB BCCD DEEFFGGHHII~IJqJKcKLVLMFMN3NO OP PPQpQRZRSBST)TUUUVkVWVWXGXY9YZ*Z[[\ \]]^^__``a$abbccdddeyefnfgHgh"hhihijBjkkklOlmmymn?nooiop/ppqlqrHrs$sttntuJuv'vwwtwxRxy1yzz~z{n{|l|}k}~i~g{I}OML mڑH"iהD3(5ǜY}H󠞡I󢞣I򤓥5֦w[êLխM|Bٲp }xoݹK'q߼M( |qgVEļ3Ū!ƘLJȅɆʇˈ̉ ͕Τ,ϴ;KZixՈ֗ץ,س9GUe~ ޗ#߰?P@@AeBBC.CDDE EEFsFGbGHMHI6IJ JK K}KLfLMVMNKNO@OP5PQ*QR*RSXSTUUVJVWeWX]XYUYZMZ[E[\9\] ]s]^E^___`P`a"abbcccdtdeief]fghhiCijlkklElmnKnopRpq|r rs$st>tuYuvnvwxxyyz+z{6{|3|}/}~,~(!tVǃ8m݆N/bҊC<5.' :͑_񒄓;וzcMr7ŞRݟaiqy|si_ڨUЩH3 j߮XӯMȰC9/$N{?ָq"Ӻ4弖G较V)Lc{Ɠǫ*ȩ(ɧ&ʥ$ˣ"̡ ͠ΟϞМћҖӏ ԇՀxn`QCڻ4ۭ&ܡݗލ߃ylO2jMv9^"GPRTWY gz1DWv:`$J2jJ)a@x W@!a2b * ]  S JU y/?.yWKy  ) !F!"c"#$$%=%&h&'()()S)*x+ +,1,-V-.y/ /0(01H12g23445D56l778(89k::;V;<=A=>?3?@~A$ABpCCDTDEF8FGzHHILIJKKLSLMNrssttuCuv{wwxQxyz(z{c||};}~vN聃T%ȆkT<ߋ%ȍkT󐓑2ҒqP,ʗiD~T𝍞)Ɵa4Ϣk;ԥl6Ψg0ȫa*®_@ీ!ej÷o˹{+ܻ{2o&c+\M}>o0`!R3^ 7b;f?jCn:b&Mu9a%Lt8_?wT1hE|"Ymft2!h5j8 < p  ?.$yof\SI?6,"  !!!"w"#m#$d$%Z%&Q&'G'(=()4)***+ +,,- -.../u/0k01b12X23O34E45;56267(78899: :;;};`>?V?@M@ACAB9BC0CD&DEEFFG GGH{HIqIJgJK^KLTLMKMNANO7OP.PQ$QRRSSTTTUyUVoVWeWXZXYLYZ>Z[1[\#\]]^^^_r_`d`aVabIbc;cd-deeffgg|ghnhiaijSjkEkl7lm)mnno oppypqkqr]rsOstAtu3uv%vwwx xxyuyzgz{Y{|K|}=}~0~"qc܄VυH:,{n`ٍRˎD6( xj\ՖNǗ@hEؚ"lIܜ%oLߞ)sPLɡE¢?82+% zsmf`ݱYֲSϳLɴFµ?92+% ztmg`ZSMFA@ɿ>ʾ=˼<̻:ͺ9ι8Ϸ7ж5ѵ4ҳ3Ӳ2Ա0հ/֮.׭)؞هq[Eܺ/ݤގxaK5 ~hQ;%nXA+tp$}~dK1-<KZix   - < KZix-<KZiy-< K !Z!"i"#y$$%%&&'-'(-(()`)*,**+^+,*,,-]-.)../[/0/01!12233~34p45b56T67F78989+9::;;<^>?P?@B@A4AB&BCCD DDEvEFhFGZGHLHI>IJ0JK"KLLMMMNrNOdOPVPQHQR:RS,STTUUVV{VWnWX`XYRYZDZ[6[\(\]]^ ^^_w_`i`a\abNbc@cd2de$effggghshieijWjkJklĘIϙUښ`lw+6BǤMӥXަdo{ #.:E˰Qֱ\hs'2>ûIϼTڽ`kwjEgBįŊd?Ǭȇa<ʩ˃^9ͦ΀[5У}X2Ӡ zU/֜ wW@ٴ)ڝۆoXA޵*ߞ&6GWgw 0AQaq *;K[k|$5EUfv@!aB" c  C $ d1kO3lP4nR6pT 7 !!!"q"#U#$9$%%&&s&'W'(;())**t*+X+,<,- -..v./Z/0>01"122x23\34@45#566y67]78A89%9: :{:;_; >}>?`?@P@AXABaBCjCDsDE|FFG GHHIIJ%JK.KL7LM@MNINOQOPZPQcQRlRSuST~UUV VWWXXY'YZ0Z[9[\B\]J]^S^_\_`e`anabwbcddeeffg gh)hi5ijBjkNklZlmfmnrnoppqqrrs)st6tuBuvNvwZwxfxysyz{{||}}~*~6<2( {qg\׊R͋HÌ>4*  |rh^ٖTϗJŘ@6+! ~tj`ۢVУKƤA7-#vkaܮWүMȰC9/%wmc޺YԻOʼE:0&ƒyoeZP_ɬSˠF͓:χ-z!nԻa֮UtcRA۹0ܨݗކujgc`]YVROLHEB>;741-*&#  D|wvrnkjGfBb_9[X{UsRPMJHGGGiHvJbM+PSW,\`agum|s‚~{cvqm\hd`]CYVROYLJG}E CYAAAC=ENHILOORXV]cjp}yv#qUlhGc_V[WTMPM&I~FFCA ><<>;<>@CGKTOTZ`g'myuq(l#gc^ZbVWRMNKFGC@[=:8|66 679<=@DWGKQW^dj~tplyg:b^DYUQCMIEBp>:7l4510/035J8t-15C9?BGbMSZI`%f{kg\b]0WSXNJF'A>951."*q&#u!"K$',/17E7o2-e($ X7%T+2^81 D$INSZ!TO I@AK92n+%_ : kJv"(.495=C(HM SXjT9N@HV@+8;0)#&3  1@ x!'-3 7<[@G]K>QWR:L+F*=5-&} Q ~$ V &a,,266:AFLQ,VIPmJED';3V+@#E OKcw $*0e5Z: ?EKPLUOFIB:1)!J< ~ ! d \Z# (/ 37>CHtOUhNHBF90(E0 A $/q!h'I-2*554p)1 @%+0B4;A9F'KR|P7J C;^3*#7Vij'0yU *%5*/39?EK2QQKE=5.' vvZZ!Q%*.2B8>FCIOTfNH@9[2H+&" o c!V"3!! B!#j&*.2o78h2.J*'&$$T$%&_&''2&&%%b'/)-8/27&<AGM\W|R[KzE?W:j6`2X/-S+~**{*+y+,t+,$*+m+4+-W/1D37oCIOgb^NX]RN>IEdAh>S;d9Z7Y6;5c5v56W66Z5655O45729<=AlFLR"lhc^6Y#TZOKpGgDpA?<;[:b9t9::n:v:s:g99g99;!= @DIOTqmidI_VZUQMJGiDBw@>>H>=? ? ?&>>>"=>?ADHM[RXwms^oje`Y\WSP_MJxHED@C0BCnD#DDXDCCaCCDFzIMFQV[}0yRupkfbC]YVSPGM_KIIHHTHIIIIIIHIPJZKNR;VSZ`q{9vqmviKeBa^IZWTQOfM!JvGFEF G(IKORV[Z`flr~zuqlcgc_\CXUQNtKHFD'B;@@Y@{ACFJNQWD\bi6o|xu7p_kgAb^OZ3VSLOL,HEB@C=;;:W;^BFJPV]ci|sokwf+aj]%XTIP LyHDA}=963j0/;.0 1M3p7N;@CGN/Tp[`gokNga\XSOaK0GC?<,854_0-8*\((),03t8=uAF LaRW_ egjfMa\VR MI/D>@=9B40-,)n%"J !"&n+]0H5;3@DKJP"V^\{b"g|b^WRgMyHDF?1;a7|3p/!*'+# qt"'-3:P>CHNUZ0`ad_ZTNID7?:951-)%! X%,29W=aAXHM4SXq^a\WQNKF @:Y50,o($p R9$+,18<@FrLQW\_ZUsNHiA<71,Q'#]s@ $ *1+6;@FKAQ~VP[n]XSrL3E_?83+,(\#dgp #*0)6;n?=EKEPTZy[DVUPINA;_5/p)Q$$o&N , j#)]/6:@>GDJWO_TZYkSMFd>81+%Z [ K  s9/")7/94p9x> CIL:SWDW%QIKC;4-'!n  _ / M a":(+.;418CJOT&NHBg90({ = W [   +!'-16=CGN;RNH3A90K', ~  1q "N %,Q05;+B GKQiNHBE90(C-: j$]aC$j*/3:N?DJQ,OIC:2*K"}m=d\QW%K#)M-2`8>JCIPOQKE=P5@-&h 7_I6kFgSE#)-F1`7Nd72Q-*'R$#x"#h#$%&%$B$$ $%'+-05:@&FCL\W2R K$D>951.,;*j)S()F)*M***m)z)))+5,/r16;@FM$a\WQKFzA=\86R31c/.../0!///9/J/I./K0N14 8>=BkHWNgHb^ XRMID@=T:806'433434444\4x433@457;@EQ@"CGL4QkWw7s%oLie0_[WDROeLSIfFDABAABBBBBBB ABcCE6H]LPUzZ|yufpOjfa]9XU6R'O:L.J H@G=GGH_HhHHwHPGG~HI'JMQ&ULY_#rzuq,lhda,]ZKVTQHNLIGEE;EFFMHHK$NQUcZ`%elrmS}yuApqkg=c_[X1T~QMKHfF+CA~??|?@C FJMWQV\FbPho.|Tx]tokBfa]YVRO:KGE B ?=;I:/9:p;>FAEIAMRX_ elMwszojxeaE\XlTuQ MDIFBQ?l;=730E,)(n')+/27<@E1KQWQ^NdjHea$[>UQ'LHpC@u:62.8*9&u"E}!@'M-39z=BHN T YS_c^Z#SMHB>]85E18->) $ O$j`$+28=Z@vG)LXRW]2a%[WPJDD?95/+'#)s>;#*b17;i@F&KPhVM[x_YTnN GA;}6@0+&"K #5)0`5;?EJ"PUXZ\W=RK[Dw>F802g,'"t ")8/I6:>DKJWOfSYxZUPFHA:4g.7(#C-}<N J  "(w.4*9[=iCI/MSXX&S]ME>_7f0*c#O* - W)PI!(M.S38<,BH/MyRVPTPJC);c4-2& O r9 \!S'E-T3O74;AGZLQWWTRN[Hx@Z81Q*x$O @oo  &,y27;@ELoPUQSMG?37/D'!K V gB R%+15::@E2JlO|TQKEu=4,$B :Pg ^a$)0539(?BJOTOIC:2*5"=j z.dx 8"t'.35>"CJ O(RNHvB.9e0(7 >f2 j L ' &-*060' % YI0#).=29?$DJPNOI~CN:25)"(uX:I1uc'"(?,18=^CAItOQ|KiEe=4-8&k&Vk>;1"(+0v6_<AGN7SN H>@J81z*%!!0][V^I9 B$3(,0/5,:@%FHLWRLE0>'72-n(&#"!"Z"##$$P### "$j&*_,/v4y9?AEsL\WWQJD>95z1h-+)(&'(();)))o((((*+.(05 :?ELga\WQbK~FBA<8520.---......=.6-./0379<AGMg#bi]WR}MHC@*<97m5H3323 3|23b3P3f322%346:?*DiJ-PYl1gch]XSOJF,B?<:877'67j77777X66u7@8:>NBGM&Sqm>i.c^YUPLUHEB@M>h<;;;v<<<="=r>@D H KvO5TZ`gAmzvs(n:id`1[WTWPMIFeC\@>k;97779;?\CGEK9Q2W?]d9jv0rn hd<_[ VRZO*KXGD@=I:h75:3<2H1347;G?CGN TTZahqm\i8c^ZVQMKIFBs?a;B751.,,,-037<@EKQX^enmid_YUsQLHlD}Ac=+952/5+h(U&w%'),`05:t>CIP%V"\aMhc_cYaSOJFB(>~:6d2{/*'Y# #( -2/8shDfINTIQhKKE<<4. &fr6y 2g #R(.37>dBGMFSQ0KDDHONGGA8/'&F u 6 C %.<w 97i!e',H06=/AHSOOXIB:/1) DPJWeQL?D=7)1n,(*%*"V v !,!".!!! X!#')-#17(=CzJ2\VQJD>;934S07,)'%%U%W&+&^'<'2&&q&?%&H')V+5-2q7=CJaU\OWvQKE@<`74#1a.q,+E*+++,#+++r+*+&,+-0Q49?yEL0fb]WRLHCG>;753 1t0/0:000000=//e0N148==BjHVNkgic]xX_S"MIE/A>R;865h44N4575F5I5A44G34628F<@EKbQwqClhc^SYsTuOK(GDA@>>\>??????>?p@BdEINS6X|xtojter`u[W/SOLIG=E`DSDDEEEEEEDEdF}HK"NSW]c|xsDnXiea{]ZW.TQ.NuL"IiFCB&A"A*BADZG_K3NzRW]:c6izo~zw8rqmhd"_[XDTQeNJH5EC@~=<;>;M<>BF.IMSQY:_velyuqlh0co^ZEV#RO@LHLDA?5=:755}57,9=:AEaIpOU\.bhtplg[b]YXTPMKIF#By?;8632 0@/02c5(8=AELTRYX_fpQkgb5]AXTJOK9H$D@=K9520H-h+3**T+8-1U5|:>C!IP^W]Kcl gc(]cX*SOJFFB?~;74j0,*=&$$%A&).2807 0*$P `T#! ( $v*0n5D9?"DvIO6RUQK/C;*3-B& S L4 *#)/488 =CHHLSdUNH@80)v#0a 3M K"(.I27w=BGzCJ?M.MGR@7.&6 $%h /!C'*u/4CIOqlhcf]XJSNIFWB?<:8A666788%8*77:679 ;>BGMtSbvrniJcV^YTP+L HErB@CGLQWZ|{xtoYid_ZVR-NKHEZCpB[B"BCCDCCC?BCDF]IwM+QVi[Ă<{vrm hd@` \YUROM JHEB+@F?;?C@bBEILPV/[ahPn}yuq'l:gob^jZ0VSHDz@=:Y62.+?)%#/""$i'+M0o5:g?FKGRY*_e`\#UP0K FBI>:`63/r+( %!$Dr!#U(d. 48=9BIlP$Ut[b]XQKFA<9D41j-)%!Rk2|> &,37`:AGMSoX_YTMGA<720+($4 DI%,159@E|KPV\WRRKDf>]9 3/R)&W"CrU  vA$+149?8DIOTXZUOH.A;B50<*&;  + 68#)0X48=CHaMRYS^N-Fy?<8Z2,Y&"| |@ #")m.T37[=BsH/LR7UR:LkDo<5q.(" y_0 "P'-26% I &,L0v5:K?EeJPQ]JF>6-%G 43P FX%+/3:O>dD}HOXPJDvB!GNO+HB90((~ e0&.  ")-M17yEtKPMGA08@/U&u  b  7{O c#(+2V7>0DHOHBw91( ]M= z u c _fj + ?"&+r07_=AHPJD<%3+$L+Q,@ g%Q*/5:A}HS@MPGu?h70T)$&Gr{&t&\ $S(B. 3:@GWQnKD^=>60+&!8ei|f"a!8$r',29?F[V`Q-J1C=83-*W&$! g  !!!!! #9%W(L-3D9@XG_a\W(PJEf?:$52.Y+V(&%%%&&&&&R&'%%E&o(b+!05;B(Ifa]GWDQLDKkg&b]$WRKLGC?0;m8"420/|/1/0F0g0q0q0//$0138B.FEKPOV |jxmtn`id5_ ZTQMPIqF\CA@~@D@AABNB BAA9AC DGKPUZ~(zupkgMb^[&WT5QNWKIFfCr@>=q=y>@DHKpO0TZ`g:m|xtojf(a]]XU8QNNJHEYB@=:P8`7/788:>lBFpJpPwV\cjnwRs/oBj&er`[W3ROhKHE"A?BI4OV\cmi?d_FZ)UPLGDD@=U:@6d20 -(+Z(~&Y& &) ,j06^:?FsMVSZR_ixd`@ZLTPK|GB>;^8x4W1-;*'$p"O b"3%)*.38v=_D\IQU]d`_kZTKNwIID@g<38g41-F)&8"y' Z& +16;2ACGMSZ`[VOID$?d;>743!/'+(L$! S`Cj$_*05Q90?EuKQ/V]XHSLE?:6 2 .*L&R"GO_+ #).37x=CdIINT[;UPbI+B`<(61-:($ .{N []L"'.6397[BI7LRLG?)6.&3 zHHU0 n[#).28Z=C5HMRL?F=W4,;$d o% #)>-1&7=APGLPJD;3+D"<z  l"(,1v6@7.% DBB vH"F'-r28<%C;GsMGA;8K/c&( "|X>UDee h!$*16J8E~[VhQ6J9C=73-m)f%"9v"z *"|%+01:7>Ea\ W/PJEY?:!41 -)&$#x"#`######H""i#%(-39@Gfa]NWKQLFAY'(`(((((''(*-#17'=C{J6kg-b]6W~QLLG6B1>:630.-,-+-..-.1--F,-/16*;@FM0q lhb]rWRMEHFD@1<:936W322A3333433%2357=;$?DJPvrn}hcB]XSRN$JEB`?;98w84899:.:C99g99;'=@DIOT|kx`tbn\i/c^%Y&T-OL GDA?>>?%@@_@@@k??@PAC:FxJRNSYb}(ytojf!a]xYVYROLJ8GEB3?<;;< 865S5\696RLGC>v:,6D3&/},D(b%!yz#)/4u9B?[ELYQXf_`Z$UNEGBE=`940-)&p"H!8>EV"m(.3"7=CIOMU\CVQJrC=8l3/+'$ -g I j  !'2,16;*AiFLRYTCNGn@s:4^/*&#% #  &,04: ?DJPMX.QL6E.=720l+n&"]siF  L z6%+/3B9>^CH}NtVPKlCy:4.('"1M Ew %*.h388u>4BH)LUVOPI\@72D+$i)* m;5 \!#*-228D=AGXKSMG>5b/(D!N  #(,1s6;AQFJRKiD=5x-%Z' z zX%"',(0,5j;1@EJR,KE<4$+#9Jp% . xfP]!q&*/5L:v@hEHQDJD;3\*" ck %*/:4:?_C-ILNHRA9 0('R E z 44X$*^.038=CGHO/HB90' 4Z!  $q(,2w9<-B=GN>GA8/& oA*1 #&&N,26;@GMGnA 8/"&7Y DJ>a"^Ys!&(40x6;JB}FN#GAn8/&0OX  Y#O)s-59;>LF.O4HB91e( V (  p ro yGg"&3-37M>FSPJDjCSpMG?70* $5.<Q yQa#)/6=DWDQLD=61+%%!]RW+0c7 e"H(D.5 82-(}$ Yrv,#%)/S6 =@Da8\0WVPJE?94k03,(U%'"!  !G!!  #>&\+18D?&FLfa]sWmQKF5@;7:3/Q+)C&%%\%&^&y&&&%%2&Y(M+/5v;BHkgNb]UWpQQLFFA.=+95&1.,p**w*++, ,++.*+-/4q9?;EmKq*lhb\WRLGwB>;574100711122)11M013\59>9CI`Ovrnhc]WRMID@=r:B766c7 78888@77s8:9;?-CrHbMS|}xdtWnhcM]XsSSNJFCF@]>K=<=>>?'?F>>z>,>@AE'IMRXZ|ChJPWc]adpCkgb&]0XCS}NJLFC?;j74h1\-)&$"9( $T)/4:AAG[NTZa\WQbKUEAD<8=4w1-()&'#| 1W$ !3't-27k=CIP@V^(XSLFV@;y783/;+'b$![? F&3,p0`4;@GLS[UP$HB;6X1-)&z"irY 2[ 2`%*/3<9?4DJOXRMYE>82!,(j%/!/` p 4X  $/*E.k2<7=*BGNVQKhC<25.)|$ h 8=?{ o#)-17 <`ACFKUGOIA:=2+% !_ K> "',05;?EJ3RMG@8v0q)R"/, l #h!'+/5i:;?DuIS&LF?56.k&d0 2 &S*/4::?#CHAQKoF[=p4,A#7 -sD6%)-W38=CiHQKEZ<3+4" HYj 0)$)E-R38~=BF.OHB;/2*'!c  pU`j#(,28%;qBFO'HBg9s0'yS Z1 #'(,a1V6#; AEuOYHB90' p, l"V&5)04~9?FNH5A80'-N{ L4$S`!P%*.5z8?E*NGAj8/&" ( $(_/29?C;NqHA80*'z 5Dp n5 !"' ,L3-8<1DXOIDC:h1)!Cz~hSO! G!z$+.W5)]8;2,'#2Wclnj;tC &-4;Ccaw\sWQ-KBE3?93/H+'# X^ZM\n $/)06=E"fb>]WQLF5@V:6p1.*'m$#E"#<#$'$5$9##R"$+&<) .<3:0@Gl gc:]NWzQKFi@<;;d<==m===='<=>@CGLQWmC{cwrmhd_[GWT PMHJmGE]B>?<]: 88:&;9953`2 23}6*9>B|FMSaZ`gtdp$lfb]WSXNKFGD'@=:8%53 /,+v+-0'4Y9u=B7HOVi\doTjfa\WRHMZHE?A>%:7e41/n,)&%=%P'/*/S49|>PEeLdR Y^{jeas[V>QtLGC?i;8X41.W+)N&#F /!%+1$6;BHOTr\xf$aF\VcPKG B4=`96+2/k+).%T#- H|"'.H3k8>#ELRY2`[VPIDh?:6n2.+j(~$!j Wt;1%R+04x;BH/NT] WRrKiD>95O0- )3%"`s # $%*C.629?EK&QxYTFNGo@u: 4b/+f(# J N 2#N(',1b6=BwHMW^QKDI<6/*&" 3nlui <U!<', /5:@EKUOIB:v3I,&"41 4e!D'P*/749>zDYItTN@HM@81)#]~t =<)N+-e &k*.748>BHS.MlGX?[7/%' oC ?Hl E%:)=-38=?AGPLG>V5-a%D ={| xw#(,)17'=*116.;@EYPJ]DBOIDB:1(3No Y;o6  D$)Q.2$8=bC?NHBN9o0'] # ^cz#(,26=BNH?A90]'+ O 8<r&-L28'r72+%^ n!M  T$N+A2:5A\W;RK/D>8~28,'"<vl%,3?:BXa\XQKEp>93.*P%")+QZk".(..5=~DI>QKU_ZUNHC>*9[40-B)&s"G+6YlA#P).3H:0@FMPS \VQMJ(Cu=[8 3/+'$2 ='N . E Z=!(,,%1i7=>CImOXS'MF>8e2-)%!{P D !&*/5(:@}FKVIPwJB;c4Y.($! 7tx ^UP w"%{),3F8>TDITNH@81o*$ $U 7i W$(,17d<AFS"M G>6.'!VH] & :(#'+15;@0ES+LF=}5-%/ p^ "'W#&n+05:?DRTL E3=j4,#92 :T67 IrhJ" &-*0/4:?$CQK;D;3*"<" l=L v|B $).39Q>RCRPILB9~2*Z!}8 G9J1 O$`(W.3f7=BHPJD ;"2Y)_ gu|e ;  $-'-3t8tPJYD=;3t+m# @v ju7 ^4!t'+36>RBL>FM>6(.'!B4 dO&M B$+0&7@ETNIAD92,X%]% #5    J : Nl$9)R08@XsRMtF?*82X,E% zOq  l 3v 1l")1v9&@]WRKEm?9%2,q'x"{z cy##y*2 9AfbH]OXR#KE?9q3.)% Sm?cLVVq  a&-O4_;C8gc ^XRHLF/@0:J5L0, '#!V   /[ ]"%+S1X7>FlhMd ]W?QKE?:6j1-)&$$q%& &n&&&_%%&(+^0=5;BOI&rmikcj]HW7QYKEs@BFJP.U}yv?qTlMg"bc]YUR5NKSHmECA@)=s:97667:d=BFEIPV0\cPjx@t$p@k/fa'\ WS"OrKH7DA>R;8I520^-*(o(|*7-p174;@EG)MS[`mi6d_ *!v(G+18?~E-KQ[UPEIB7;61-[)C%"T1 ' r%|*1/5$<BGNWR&LD=60+'# & k3uj "$(,_38>DJUQOlIA92,(&!%h ` ?O! w"'*0-6<'AGSMG?V7Z/("\1 yE_ '" &H*N-GA`:2r) d $$*y/g48? NHB'980' W3% v;b A$i(E.392>0P IC:2)!  @m >$)g,(3.7=OICs:2M)!^p & V#"(-26?0P&IC;H2*# D C!&,p18F?Q2KE<4,%ex 6lN: f"*16?RLG>7./)" (L rJe)- \#/*/ 7@UUOIB:3-t& OE rM<bP1f "(0 84>YSN,F@ 93,&L [*  , r P 9 ^ " m!%(0k87@7]XbSPLF5?93$,'}"=.d?y.")s18@b]Y%RL{Fs@ 93.c)F$lU %K%^,53m:B|hJc_XRLbF;@5:40+&"B]Bd}1]!5$*,0W7> EMmJhd^@WQKEh?:51,O(%7#7"#k$$%%%F%$$9%h'h*8/54:AHyrmic@]WRQIKNE_@_;62.+))*+s+,',N, ++P,N.0p49?ELDwsoLib\VPK F+A7<8u42i001n223N3z3<223b46:?wDJnP}lxptnhb\uVPKG&B>;9Z878y9::D:::9:;=AFEjJ8OUY}GyWupkfxa]3XUQsMJGDBg?T<9c6557 9=AEGIXOtU\biwsojei`q[aVRWNJG_C@=;m8~52/.h.s/26;?D/JQ>X]er7mid`_oZuUDP{LH7D@=[:7>42?/E+('9'F),]06R:?FsMCSZ_umhd*^vYLTmOUJ@EA>2:630-+u(%"@ 7 G"m&O+w16Y;qBHtP9T] h0ck^XSINVI?DJ?~;74K0-3*'R$!ME &-m28 =ELRVc^YSoMHJCz>|9k51.**' #! p!ew#*D/4;yBCIHNU^@XSLFu@;61-)&S"w  &*037=2DQINZOTOYHA:5*0l+'# ## e ;Yt#)-3k:L?FKWQ?KC+6.(& P dXL#p'-+27=BQKEp<4,9${r_E &* fB"',1d6O;|@Q JD l U"&%+04:m?rQJQC<)3S*! %Z% ?!=%Y*/49>PJGC:3) @ x $,)R/ 4L9;=PJlD;2) $\( 2e9#).a37=jPoJCi;@2K)X ` oy`/#l)6.28 2+)E M~ | '.:#'',32U6[ G"*%-q63:GVPfJC#;5.(1  $}8H! &t/p7)E+Kxmt o7ic!\VPJE@x;741s//0w122q22k21246E:<>DIP}ytnhb\"VPPiKF}A=:8776789U9:99i9%9;7= @DIOT|xup"kea\X*TyPM>IFDA>;86C55 6_8<@DHNU-[bfhwroid_ZV,QMJCFC@=5:75%1/--//26#;?5CJ3PW]eqmPi+c^YTOKFGvC@!<9@6b31U.`+'&C&P($+05:#>ELSZ9_-lzgc]XSNIyDA=T962/,*d'$k!% !S%S*05:B=HOTx\?gb^.XRMHnCq>:63G/,(&# %,17J=`DI`QVc]Y%RLGkB=8i40,)]%"nd}K !)F.2/:u>G6KS]X>SLE?:50,b($!QzLI ] y $p>E%d).5;BHlO"YTNG"@93/ *^&" mh|D  D!'?+18X>:DJ VKPxJB;e4\.($  , r/8A$(/4:@aGSMG?7/("%v! > #5T /#"=&n,t2F8 =BQKE='4,%)O Os Jx BH![$*05:l@PJD;3[+ "A E8P jH  $U(.39>MP>J|C:2C*!x# Jq   N#) -27:/4/u*H%D l2 I"(.55/+ &p" J!M":"##3#""R#%(-39@GsoEjdi^ WQK,E ?:50,)''(|))*`**c*)*,/38>DKaxtoic\VPJIEa@J;Y63Q0//./01P1111r1.2359>fCIO~Kyuyohb\XUP!JEAY=^:'766I68889q9D889k:<@*;~8D54458s<@D\HyNT[kbhvrnikdT_WZ=UQ$MhIFB?<: 7(41W.--.15:>C?IPvW%]b q6lhc;^>YAT O/JFC)?;8520-*s'U%%'|*/5%9>~EJRY_lgic]>WSMHD?@a<85X1.+)&G# W0@ $)035$:FAH&NTa[gbC]WQLGB=96&2v.+<(%("i%+1\6=gD0HPUb]rXRLFA<73/, (^$!Rs6z%!;(~-19>mFEKUR]WRnKeD>94/+T'z# o "(-4:AsG9MYSgMFh?P82.)1$ J}S  . M1 %*066.'!Yf 20 K[$0*U06 ;@QHKDlPRJC;2Z)! P.S R&!'9,/1S6;O\IB:2)W [n >2^[ B%!Q&s*0F5.:pPJeD;0( 'igmS P_ _%+/49PJ0C92\(.7k[ !+$)/38Q1JB90'U!4MX M $$).2m8$P^JC<(3@*a!e a8 $(-2=7R KE<3+M"n s- !  y#u',227OIOE<4f,$_o0FE b}!',)1r6PJD<3+k#>u 5 Z(YX!%<+28DRLF>^6L.'F Zs *r7: Wh 0$,2U80S MG9?'7W/("   &-^1-8vT N/Hf@v81+!$(hf s; w *&*/39UOJXB;P4.'o %Q {dM C#;-h0B9XRyME>81g*$>k 5+5t 7A%*3D#^7z(]X# *C19nA5jeaZT_N G@:q4/Y*$&>$&W"(!.5w&'()`)*)))S*],$.3:8i>:DK'ytp|j)c]qVPJyE ?:6v20)..U/-0\01X11l1013=5o9u> CsIJO~5z7uohb\fUOJE@<97d65678Q89888[9:sCIP>U]aplwhJb]XSNJ2m0&-D* &%+%9'*/A49k>AEBJRW _6kgb\WRMH[C?<8l41D.J+i(%# $4)/4:?GKTVXfa]2W QhL\G:B5=E9e51.0*']$|!1@VWh$+06K284 .*&"c V4 "`'-g39@\F#LTXRM_E>8 2+-(( #` ~   h$5( /5;@HU8OQIA92+&Z!NS 3 %*16=CgRL~Fr>5.&  z' W!(Q-e49?PJDO;3*"  U "%W+w061/(kBw,' m#(-27PICJ:1( (? |t#a((,2/6OIC5:91>& <u u6"q&,v156$NJbD;3A*\!Wr n-&2vNns!':+w05QK'D<3+&" UoHO!&\+`/O54QKKE=w4+#j4g > %f*}/4iPJD!;3,%H s $ c$).r4RKE=5-&xV Q( S mw"*M0 5SMG?70R)E"ZQ 9 l*E$*D/x6T@N`H@91+$ i <Ii%*/9,U@OwIB:3-"& B+F#3b$*29VQ>KD%<6b/|)" D !z#,17:Y3SNOG @693 ,j%#?@b l*%*3;\WRaKE>K70*)$Lbt U kL$L,5I=a)\ WEPJC<5/h)#^ ;v, CpF'5/376?:f5ao\VDOI4BY;5"/E)#iP?"*19LAkyfbC[U*NH"A{:56/*$pJY`!'.p5Z!DmKzBuKqjd2]W PJD?:602/.P..001 1^1@0013 5R9[>C\I5Ou~zvQoiib\V/OJEa@<9s7556@7c88_888x8?9:Y;9e640.,,.71-5K:Q>}BIP#V ]Rbpl1hb]X_SVNnIFBj>;4742,/-)&%%&*v/+49Z>3EMKRVW^kZfbO\}W4REM.HCe?;840-+(%"$)/4:?G`KSXfga\VQ KFA<95%1u-*;&$!xj(.F$+043EmJ~X>RLEg>271,'a#i J ViV2_ 4i*"p&.U3:c?FTNIA9P1+J% a Ss] z#)c055K<;AR=LF=5U-^%-n  v3: &k+2I7=PjJ"C;!2z)!`; 8x ;#)H.4:COrIB90(a DO R <$(s-2QKdE;2+S" tN ;M#(<-w2RLQD;R2J,%bE <A_ vg>"6',1UR;LE?6.&e '  pJ"7&0,`3ShMG?n70%(!y3n M$"2(-4$S@MIGfAF925+D#5 z "e'-5UOJ BX:3,& E6 L  x# &.a7VPKFC! M SPI +3>8X1RM(E>8Z1+b$  #%\-"0Y:4ZrUOHA;4. 'h! Hz I,I )3Y7]XSLF?82^+%p,]5H<P Z$V- 5=bO]UXRK]DT> 7B0+*$o =R. Pt'X/G7>?[gLb^W]PJ+Cp19fAlhc?\V0OZHB;25/*T$Q]EO"(.5r6DK${vJqkQdo^)WPJE$?:62q/.;-./001c1N101395k9q>CpIGO{|vpFic \VUOJES@<9b7 55v617V88\8888V9:o<^?D.IN}TY{wsnid_[bVSIOLHEB@=;%854F4O58;;@aD.HNNT[1aNeuqmhc^YnTPWLHEcA>;9\64 1 .=,,.]1Q5l:p>CIP&V=Zyc pmlgbV]RX3S-NCIEBI>;742"/-*'%?%M',*/Q49y>JEcK-R0Wt^}k-fb\JVRLGC6?[;74a0-+ (%# ($H)/4:@G.KSXGf9a[\V{PKFA<841I-*&$!iaxu$+04VENTNH@81*% "W/P ^.: `' )\"(.3:?RKE=I4,%`  G \ r7$V*05<7P/IC:2)!-Ef   2u!u'3,/27O:HBv90'   >Jm r$* /5dO*HBa9l0x'W  O KU#|(k-3/OkIC090(FS #S x4"',1Q6JD:2)!C @4 J4"'/+1QK5D<1*#, x8 ^d!&+U0gRKE`;35*$DaS2 @Q!0%V*0JRcL2F =z6x.C&iD !6 $;h g%[)/;SMH@J8F0`(!T Z}j`3X#+n1TONIkAM9l1*$ E `BG%+1TNIA)93,%s Y L YM%,,4VQIKD<5.(" &WO `QU %/>6WR]LE{>|71%*#m uK X"p*0P6YTNG@:[3->&RakH5*A &\K$%/9[VsQBJGC<60)#@mOm OgI0DI [  !+4#9(_KZ'U/NGA~:3-';!U`ws  $r PB$3,5;c^YSLE?M8}1+%9 d  3 5 J '/7?h{c_HXQK;Dv=60+%3\DPi$#z*29AomhdM]{WPgI^B<6H0*%BCB|"(.5yDK[{Iw rukeQ^X QvJES?:6A2/.d..001111U1%2359>_CIO| wQpj?c\VPJEn@<97/556V7}8?889889c:<@5DkIINT{wsnid_[`VSQOL3HEC@=;f8`54458<*@DqHNT[Rafuqmhc^YhTPXLIEuA><964d1a.-'-2.15:>CVIOVZbp\kgbB]?X&S%N;8752Q0-c*e'{%%'+ /5<9>CKO_W[kfzb \5VQLGC1?\;84z0. +A(%#k aq $*0J5C86@GLS=Xf&aH\VePKFA<841U-*@' $@!Ex,B'%B+.56<AH8MQa\jWyPJET@b;^6925.a*' # B!LkPI %!+07=9CI\O[VQBJCi=M73 -)%!,/R > C #Y &+ 07=CgHWR?LE=7 1 +&"Iw q m%q ~ %,E2r8,>mCTNH@81v*$8P Tt<I {p( 'f-239F>tQKE=*4,%-UC m1"j 9?").4 :PIC~:1)Z  E)*!4 \"g%;*06O"HBZ9`0i'v 2 c ~"c'-3QOHBE9L0P'Ye| ,% 1 %+W0OHBE:L1h( _fk)R%V*1/wPKD;2*O"(D Y DO[$)\.QIKD;3O*#SlP h $(-P}LZF*=6$-% +j: |#K([-QlKGH@+7/(4 m V ^<"(.TNIA91*#QA 1v O#)g/T9NKHr@8U3d,% H/! h#)0VRPJC<5.s'X z;  #,2XsRMZE>70b)I" P( 'k-3YtSNG^@93&,%Y>  ."')_-5M[UPjI\B<[5.("4 M6:1"'H1J6]?WRLE?81*$ 9}/!j*.8`[VP7IC71+&# @gD]n=>q$<+A2:(Anjeo^X QbJC<618+g% ow%l#W),/x6@=XDs>nicQ\UOHIAL;50<*%"Q " !"u##W#]#/#$F&U)8.Q3:A@Gwsnga(ZzSMFU@n:5b0m,H)7'k'())*g***|*V+Z-/4 9(>E!K|xsle_XQKE@;620N..|/E0}11122112469:1>DIP|xq4jd&]VPaJEA=9761567889,8I9E99;,=@DIO T{wsnid_[~WSzOLlIF1CiA >P;86l5*5469;845l20~-+(6&~&([+0M5:H>D\KOW\sk$fb\?VR MGCV?;8E41[.s+)\&$"!`Rb!%*058@DLPYf/aQ\VpPKFA<85/1.*'~$"DPey>&,t/H5c<#BDNRa\tWPJEa@u;{6b2e.*'f# C*?!w&+07),.4O.HBh9p0|' Y-2 i" "%+1SOHBV9\0d'p R^6p YQ\9#).OICT:1( 9) 5  "'-PJD<<3+" xG(/^ Pc!&,QL%E=5Z,$_  w  o!R&+SMGu?"6.&f   %+U/OH??81)#"`a0 ; O&W,V#OJ ?:3,K$v" | %  '?,UOJ$B>:5.r&` (FP n!'_.WR>LEX>7t0V)"\g wOk Lw$,*1YTyOG@8]2T+$e, :+^  %,3)[UPsI_B};4.Y'!<-I $!i',6\WVR4KLD=70W)# bc3T+C &1 9^YTMG@:N3,& |cYe{U f'#,08b.]3XfQK@D>710c*e$j\ {9 ; 1 m J9&&e*3OHB;B4o._(" l r_'b!)D08=Ekfa[@TqMzF?83-2'F!dF :%E,3Z:Bnp!kOf_Y RsKD=72,=&h!&IaK>!$h*0D6=E?t]ojd@]VOIBPA?P<:7667:O=B3EIOV[`0gv&qnhc^YUaQM`IFgC@=T:863O0/U/`037,)(P(]*-T17;l@*ELYQ'W]Tklfbc\WLRmM|HxC@3<952l/,*(%#m!!#'l,r2V6:lA\ENLQ4Ufza\VQ#LGABB=g952/+(&A#!i!-@"!'+"1~6 :9AFMURKa\WQJK;E@<73,/+(%S">D73?t# (,.46:-B?G8Mj\[VQJC=83.*&#d N5[630"F&E)0n5<@GeXTRME>R71,'#X b(d [ R  X$6)0g5K;@TO I4A.9r2#+x%!  t N F m6t FF$*05c5.o&k H5Aa =WA" 'SMG?~7`0)"E{e f!(,UOIA9.1,P$L  x ")\VQK]Cz=}6'.&  |a^ AK#)RYYSNGA?80)"Q   %_-yXS'MHA93+% j A5OP i"(.[6UPvJC<]5J.'!3 8& 2#*j2]XSLE? 70*#za S^g]8 C%g$.5_oZJURNH A:3,& nG( GgnMK [ .3"+06Ua\WQJD6=U6?/e)e#C  JNg 0  A ly&S'01:d_[STNRGx@93-'  : 3 2 ;3+!%#,59hd4_ XRKbD=71+%?@T%3l$\)E08@mhd]HVOIB#;A5S/n)#PD{zN5On!j'|.5<>Cr"mqhvb[5TM{F?93.(?#%2J<0   !h#&,2 8?[FkvVq|le_BXsQgJC=82Q-(%)#'"#$%{&&p&&~&t')x,&06X<\BIzupjkc\UOH>Bm<7@2{.+))*x+},Q,-H-_-D-2.&/2!6f;N@FMY.z4unha5ZiSLGA<8k42^001h23X34Q4b4@4'46i8{;9Q8 78x9:}:;):v;^;@;=@?BFKVPVR|x$tbosjte`\ZX TQMJgGDB@=;8778;D>C FJPV\`hh(vkr>nIi!dG_UZXUQ~MJiGC@>;974]100248=YASEJeQU\]`plhbb]YT!ONJGKC@b=97J420N-+G))+k.28963P0.+)]'D$#-#;%5(-3c5;AG IRSVAfa]MW&QLGB=:U63R/,)'u%0#&!.?#(,2=6< B G=JVSrb1]X7QKFCAq<730Q,)&y#! p*!(-@17=}B>HM0\WNRJD_>[9!4e/+'${!HI/Px3"%)05;R@FXS ME>892]-t($ |L/PA og $*/5;@UUOqIA92,1&"1{-r6  <  O (#*9/4:RLF>96.:& j`ac  @j i0g$a*G/5PJDt;3A*"vP r;:  z.yM%*0OICT:1) ] PFs  &,OICC:m1( yW 5 P}#J):PJyD>;2*"{(dA  !=&RqKVE5=5b-x%  +[e 8$ D%SMG?7/(k!>$   M%T ObI@92C*#R- "! 9&FWxQL#D$970f)("{ kA^\" ["K*2_ZUNGH@592E+%x=$ -0HN! f= $.C5>a+\$WMPICe^XQJJpC<60*%jUf#L)!/p60=YDsznic8\xUNG@;5"/I)$ : !r!!!" #N%k(^-3L9@VGiwrngE`.YRKD?9)3n.D)&$$Y%;&B'''(%(()0+-2B7=oCJ~{wrkbd]VPI*CR=8E3/,+?*+,--..../1!3j7TLMGB=9j53{2 1234{45y55w5d6379=`AFLfRhvztmaf_Y RZLGCs?<:L9 89y:;;<.;N@CGL2QiW|tx}tojfa6\XUQN_K&HfECA>pBZFKXRQVJ]zaqPlhcX^jYTOKGDA3=:8O531/,+C+O,/4*9B=@HG~JRzV^lgc"]]X$SWNIE*A>:74c1/@-$*(&%%&*n/$46;(74P1. +:(&$" cs!%*k.}3%7j=? HyL.Sb]XR2L5FB=]841S-*'%" F #).27q=k@HM]'WRKD?9570,)%"}O;2H#&7+@/5:EAEY)SN F?~832.b)& "\A^< u(8 #*.5n:u@[UOJ5BM:3-"'#B+%7B vy").49S9M+G.>6/!'!v1 , S x t /  4 {#m)c.4QlK9E<~4+$4 e  b /U$ B<%#)/PzJ4C;82*!/W e 0;y  IF Gp?*%+PlJ$C;$2})! ecGB l  !c'cQAK D6?.p' %>2 @e #TNFHS@8z0)"~ d &i #U OJB :3,p%B  &^ I$}XRMLD=6/@' {pv e dS&ZTRNF?b61*l#F a (\VOfG'A;3-%pT ISfBd$@*\WJRKD=[6?/(A"  H\  Ve%-w^YTLG?X9B1*$]>. /N ")9 ">*b1_ZWuOqHB:4-F' Rnu 3 q X '-4c^Y+8#28,Y&!6r<+Hy"2%f*17>EtpFkDdp]VOI&BF<]60+6&" _!3""##$ $$4%c'c*4/24:AHpxso>h|aZSLF@2:W4/+z(Z&&&&'()n))))*,/<38>DKy|x!s[lDe^WQJ0DT>9s41.],,u-K.>/!/0 0E0;071248=CHO&*|iwpic\)UTNHC>:7143`3356 6>666678:>BGMbSR{tn=gj`xYS*MHDo@=;o:49:;<==Z<==>J?AJDHM/RVW|xu1pNkdfa]YGURsO2LIQFDB(?=p;7::;P=@E)HLR_W[9btfw6so$je=`d[W ROPKHEzB@=;9f643d3n47j;?C~GLS WZcqmmiIc^ZUXPLfHEwB+?;9}7520.}--.15:A952/E,D)l&$"!\ow"&T+/.3J52x< S{#)QJD<3+8#D? M84~/ %QKE="4,% N E "SMG?]7b/t(W!j~ a:^- L{!mTObI@9$2&+%$[7>F c0 rwe!VQjKC8`1)#~ 9`$` $ %.`[W(NHSA1:3,`&-  hVtM b#*0b])XQJC=Z6.("~qk  ; E  r ',0^d` [/TxM0F?m81s+G%' ^  a$(7/8fb%]zVP\IB;<3.'!'VCx "U-c4;je `Z;STLE>71+%zuY\\FF[x!(04==}mhd|]WPYIB};5p/e)C#`Hr[[.U9 #'.92_:jAZrmVha["TMxF?v93-(?#r# * y !."w$',29?D)vQqple_#XNQmJC=72/,(x%#"#u$E%%& &H&d&'),206^<;;I;=>8>i>>?>?@BEINJS`X}`yruplg7b^?ZVSWP$MJ]GECbA@><;;= :86T556p83CIqBHMQYhOc^XSpNIEH@=H9631.i,J*X('%$B$O&;)+w15h6>AH=LRfc^YSMHxC?K:7#30-+/(&$#d"! A J!$(,0h39=NC@GUM^bYSMF@;7b3/X,)&h#! l!$(4,106a:@DZrTOH/AI:5g0,) %# 4~s J"$*.49+?+W)QgKD<5/*&p#0 ?`&))P$I)3-r38/TNH@81*$ (CKe`Kh!(+,3/RLF>_6=.n'" C2 # ^ ; @ Z ."'-QKE=#4,%!F<O+ < &5xS ^C 8"d(zQKE=4,%s) '#u fA $RLF>'5."&1 7bF >N TTN\Hw@W81* #(H 0 h0VOWJB{:3,% 1ZU 4 .f WQL~D=6q/P(U!>;F\ yt` c]!RZNRNpF@9n2#+# nt"[[VQ8IB<64-& uqm~3'B c6&\B7o08) " 6JVJ-(!'^oY4VxOHA 92+%\E@H XRp] O% i%-a ]WPoJB7p0*W$A/': w R x m  u.^!]'-&4fa!]"VlO HFA}:D3,& w VjqAS3IJ%i) 0&9HoEje_XQKD=60*% ?hVl # $Q*"0_4b;CsnJjcq\UNGA:5/=)%"? ] & !""#5###%)',*/29?G?wrnDgt`iYRKE?*9V3.*'c%%!%&'w((h((()+.T28!=DHJ{kvqk d2])VmOHB=73 /!,C**C++,-j--../ 027)<AGMuzwungaZ8SULFA<68(99R99 :::<=AsEJ`OU|}woiKbw[U!OKFC(@;>(<<=\>??@?@@{A'BRDGE=,=5>]@CGK5NSlY]dOh>xZt?p\kNfa]XTQ7MJGEB@\>)BFHOZR>Y]Vernje:`g[WRjNSJGDA>W;c86&320[.,++-40(4G7g;?D8F-O;RqYidG_YTOOJFbA>;P8I5g20@.=,e*)N'&&(+-333:>DFNRd_ZTuNIzD@z<85f2d/-*(':%$###$y$)-1459=CgGMb_(YTNGA= 84{0-+(|&>$T"! ~ *"& *0- 1t6[;@PD[AUPlI1Bf<062O.C*'%P#!@uRZOb "^&*04498>WRLLE=7 1#,0(R%C" =SBENA$).m3:8UvOIA:.2,o&" fx6_v*Og"'-&2SMG?7/("* l  *!' ,RLF>S6/.]'  q b Zqz ,}!n'fRLF>@6.D& 8) ]FZQY!@ "SMG?S7T/(!; fn7M 5U1OJIxAy92+$)~  |5 KVQ1KC<-5=.H'2  D; K bYSWM8E>70)") N* <Z-TNIQB?:3,% ^t ha"^XS L9C=6/V(:"29K u nz %^ZUcLMEy@/9 1*$ ^ oOu!4'`]?XOJ%B/;4V-3'! 3 s p  r !T&,b_DZ$RKD> 6/)#tx~ m  0  o i NG#s*Y0e*`\UNGg?9S2!,%  c  -G*IR35!&-5hc6^WQIC;4.("}c2b'< g%*29>jf aZkSLE>7[19+(%);|6V}#*16 ;7midk]WOI A:4.("A'pL!3$K(/R3R8iAqlch*aCZ#SLE>8Z2S,Y&"`)n ` !,!'!">#}%&,.6l941+.n,,-@-.//0+0D0_1C259=CHO?{vp&ib_[}TMHB=96632Q2 2344555568:=B+G1LRzsm%fC_`XQL\GRB>;98F889:;;Z:;;<=?CGKQ Vx~xq6jVc\VGQLcH0DA?>>Y>@@AlAA7B#BBCEHLvPU[,~zw r?myhd)`[XUoRZO[LJdHJFlD/A?>>@ B6EQI@LPATZ^Ibiytqlgfb^YURPO#L IFdDA@>;988: EBGORXuie`ZUGPL GC^:'62/- *(&%\$D#:"c! !!#7%%'*-:26<%@NE\&VQoJNC=8<30,)'%#"c!$ K+t!#'*04: >XSIMFD?(82.*R'q$" UMc%6) .y28VjPJC;4.>(%"gf=rr1"' ,2'TNH@91*%% `,&IN8S\M!*&,&SMG?70)"XJ<& - c  4| &SMG?70("_   a &u]u x[_!xTNH@81b*j#}W yGt8)=B V&PQJB;04-&I?e  =wWR2LD=6/("` u #XTlNG?9|2}+$ /{&4 ~[WfR JC}<5b.C'F!LYw F!O !_!YTLF?H80)# IZjP.+[ ^%Ca\WWGNHA:3z,e&N \i=c{.> ! ]r- 9)Qd!]dYSR#KC=%5.(" K*[ v  B & k' a&,{d_#[ToMF?8n1E+5%/5>n ~4N%$*_0g6b]VOIB :3-'!}gN">'/5j ef`WYsR]KD=l6Q0;*.$(1|X_&![%-38lgb\U9NrG;@ 82,& 1}!%,2*5K<ojf9_XQJvC~CHzuqjvc\uUNGAn?AmDHMLRqX y0rNkmd]WRjMIF#CWA^@?@@ABCCpCCCDyEG7JHMRAW\lU{vws nUiea]YVSPN(KIGECA@@ACFJNQVbY3`cwj|yuqlhJc_ ZVSPiMdJGECyA?=;::<>VAEGLNUeX_btxp9l1fb2]YTPM^JGGLD{A?=t;98065N5X69+<9764y210b0m145;>?FgIlOSXjea[VYQMCHDAw>j;86{4=2o0/f.!-,5,;-0'268<? EHNSf;a^\V~PKGlC.?;8631A/=-,!*))N(()*-13v3:> aXSNMFH?,8:1W*#*W _>@^ [UP=HA:3-&&J e qP gi]XSSLL.E =6/(# F} 0 ~[$aKz z'&!:^qZrUTNCG@92+%(tElY_ B+$e`]oYQJCh70*y$ $c 6 d c & rl5e &,Bga;\EUOH9A9: 2,& H #^y.[DrTq$*+.iac_XQvJ|C<5f/])\#d8z1R/6"(06kfb%[BSMNF7? 71+%^h^!tv#>(.#36nibd]VOcHA:4.}("_\o;Qi@[! #'-u0;6x>qflg`ZS*KE=71+&"FAL3 ! !e!"f"#0$*%<'-)14E_J |Owrke#^'WP"I/Cb=841!.-&,-.=/4//0B0v0135H9M=CRI(LzvoPh>aoZSLG7A=$85311G1233444557P9Z=AFL.R)I~yrke ^+W\PKEA^=d:,766O6789,99::):<2>AEJzOUE}]vzoqha[TO9JaFB\?e=K<;<=>>?>??@fACNFJeNSYr!zSsvle_XSO@K5GE CBABiCDYDE3DEEFEG[HKOSX]À4|\xto]jfFb;^M[ XUR8OM|K|IGECBBCEHLOQWZaekzvrmi]d`C\ X,TQNL-IGiEYCA?>1== >I@CGIMPW@Yadukq6m7hcT^Z^URNKIFFCA?=<:8779 ;>AQEEMNVY`>phlgbO]]XTP+L$IEC3@>;:8c65v413'31478==dBGKN[UXlkgb\WSNJwFXC>@L=; 8643Y20//:/A0x045+;=AqBK*NT5gPb]WR1MBHD@=:815310A.-,,Y++,~-035=8;@D1IuM:b]XQKF%A=9641/-,>*)((-&<&&&((+.047<@E^TYSLF@;74&1T.,*)$'&%k$~##l""}""#$')-15:0>.[.UPWIBL<62:.,J)'&$#"8!/ =HUK#Z&).28gXSMF>8K2r-)'I%#!L\/Qn8#&,1W QHKC<}5/k*&%"p %; 42\2\W-!%&+gV*PVJB;64'-'"{b3J6-5 (c%=VPGJB;#4-q&!Uo{+ 2 `VGe xVQKpC70)#a* B*x 7# Z0TO5G@93,l% Y t)3P 5|.\MVQJzC6/)$-V n X U&")SelbO[U@NoG@9i2W,b&t ? (Ha[% ;!&+hSc^WPIB;4.("LE6b]Z89k %+82rkeaZxS_LEq>I7>1>+A%TDll"F,t$+06n"hd\VNG@93-'"P?gk `,!%F*/y4C;okNf:_X6QJuCe7Evr3m.fU_xXRQ9J?C4=37T1-G)&%& &'(()Y)*]*+T-/]062<~?GzuOpj c\UMF@;M6B1.w,*++,-}-.,../P0<14 6;AaEK~ydtpmff_XGQJE?;631>//0q122X23)3a34q57;@KEmKNL|~wpib\ U*NlHC?9;;754E445O6g6727x7789;?{CHNS{2t)mff_XR@fCGLnQW>V~wqj'cZ\VPL6HDhA?>[>!>?@AAVA AABCEvHLYPU[Zl{tmg$`Z\UrPMIGE&DCDwEF_FG:FGGHVIdJMQ]UZ-_R*}Yyupkgc_\YVSQzOEMRKIGEEEFH JNQSY\bfl;{wso jfa]oYVzSPMKtIVGWECB2@?~?@BEHKORX[a9evwrKnWi/d`([WxSPMJH0ECA@>r<;:s:|;=ABDGHNQ[X6Z_qm#hc^ZJUQMJGE)B@=>(<`:9i8656 7W9;7??DFMPgVOY'lhFc^3YT}PGL&H&E$BO?=H;97u64322E2E3O37E8I=v;}CEKNzThc_0Y*SNJFB?=:}8H6@4310//d..-042'43:M:AE1IMc[^XYSM(GCf?;96n462=0/-,+*y*+))x*7* +=-/"249=mAFE_ZhUZNHJB=96}31k/V-,*)E(S'o&%%%$$%')<*P/02`6:H?z\WQJD">841i.,*('T&!$##"!! / !!$'+/%38ZTO G@:q40;,o)'%#"]! Y [u!'$/(,10XtRM;E>~71,(-%#" eZ|4 ,s!&:+OWQLF7f0*#~ R M  <}hYOD DYTINGs@j9q2,%d !ihi 3; 5[VPIB;4.D'"V4 .E$  ]XLSLE&>L7T0)$::  ,9`B+`)[^UOYHHAj:y3,&! M Hn+f7 6 , bb]MXRKK\D8=965/J)c#I ]8 ~ 7 , a ?t%ff`ZYSMF?81+% *_  >=l#)gb]VP]InBQ;;4E.M(j"T:I"' ,ke`iYRKD=60*$ci@(I,Bs"&`-2mgb\@UN)G:@93-)'L!CbRM I"'+16ojte^WuPIB;5/)$(l"HhZ !Z"e$P'+/5%8 2%,K'"$ K!a"7"#b#$F$%.&z( ,Y+\3; @ugokd]TVeO}HhA`;p50 +='c$##% %&''(k(),){+5- 13l;s?~Ex}to'ga YRKD>9C4/,")(()*++,B,-_-.y/2 39Y?HBH{wxrOkd]VOHB=N8q4G0.--./i0v01!112R31459>bAGfNIzvoKh6aNZFS%LGFA=!9:63223V355n556Y67e8:>oAXFKR9~Fy:rnkd7]VP JEA^=:8P767d89$9d9:6:e:;Q<>vAFJPUφeu|unha&ZcSNIEA><;;`;<=>>n>???5?ABFINxSXم&y`rkd^+WRN'J FCA@@ABCCXCCDDD[DFGJNgRW\΍} v+o\hb\W/RNKIGHFBFFGHHI\IIIJKMOSKWW[`4~lzv;qmChda-^[+X[USMQ)OCMKIH?GNGUHTJAMPSUX^`h*l|xupAkggc^[8XU@RwOMiK^IpGF5DCABCE*HJONQTV]`gwsxojvea]DYUZRNOtLJ5GECBo@?z>)=&=.>U@AFIoJTPRUQ[`rn^jDd`[WSrOLIG;DB@>=[<:988:'<@=ABGHN>QVPYnieC_ZVQMJG(DnA?=;:87655S5O6069<>V>kDjGlKOmUie`ZUGPLtHDA?N<:87D54322o0x11N2569S;=AFJOd_[TNIE`A>/;k8653m10..--$,,--A-0;13361:=mBwEa[VPGJ"D?<-86l420`.-g,++*))((g'(m(*(+},7027:??]XS~LF@<;-7"31{/6-J+*!('&%%$P###K##q#%0&(H,/ 48[V#PIB<7U2.,*S(L&$#"! !mwc J~"$*)O-P2$YTfNG@:84/c*'%^#O! i^;|"&+jYS}MF?m82- ($( >{~, 2M1%YSoMFq?[824,&k!uF1KW.v o M G o ?@TYT=NGd@e92,&N!- y  ajpVm 5 ^UPIQBY;h4.,'"0xB 8{nLx 76I]WRhKWD\=60<)$nQ JGb [w- _YTMF@9\2+&F O 1Hr b\WPIC813+R%Xz  / C q1 "?%{gLbE]>VOHA:3-'"'e  #[g%+Pk$_)je` YRK2D&=6/0C*d$*W(#u'f/1lga[TMF?82,&!s 98 X#)E.B3nid]W4P$IA;5/)P#g2  ~ !%)u-27q}lgr`}Y^RKyDm=q7w1+&h!") M!B!""#Z#$Q%/&)-`13=Dto jc/\U N F?94 .e)m%h"!"#$A%/%&^&'K'( (*-07<|Aw@rmYfM_|X Q3J1C4=E7z23-*'&'())*?*+l+,/,-/37=8A@Ezupib[TMF@;F6W2.,++,-../S/0a0134d8B=3@ED~K}y>tm%ff_'XEQ?JMD?j:63100123j34445T6(78w<>D"IBP|wpib[TMHC?L;86556;678S89 9S9:];=ACHNkT{tm#f_ X0QLGC?= ;99:=;+;<3<==:=m>"?[A"DyHpMR8WӈD~Rwsp4ib[UPKGDNAs?k>C> >?@z@A @AABCEVH{L;PUZzsm#f]_YTP2L5HF"D=C+BCDEEF"EFFGmH~JMPTYl^'A\~}wpjc]YTPMKGIHHUHIJK4KK_LL1LMO8QURYF]b~{@vr0miZeta^[XVCSQONQL~JI HH!IKMQHRVY*_bhlY},y>?;<;:99;;)?>?CHI]NQV[nje`![VRNJGE,B@p>`<;98766\6V7+7:=??DGLYQTj>ea[3UQ"MI;EB@=;98765443v2u22J357:;v?BEGCJOFe0`E[UBOJdFBj>$3" KcY,"C&+YTNG1@/93-(%!'bnne}`" lBt%YTNG @93-'T"b>,72z~J'5AxvZZTOfHA:L3-V'(!r T 7 $oB'? pQ"IC<5z.(y"TL  dcB,u ei]X/RKD>)7{0*]$'h #3U~+[ A_ZYUINOG_@93X,&!:O { a/Y 0b]uX{QJxC<6/Q){#|  j  [ ^@!ez`b[|TMF?M81+&3  %  y .d)6%fb]WjP8I>B@;L4^.v("$@ 8Y|!'M x$)je`YRKD=60+%?r H%x 6#'/wl8gb\LUN3G1@'993N-i'!g1376!$#).3xoWjKew^WPIB;5/)$X a'G  !!!#O&A*.36r#m.ha#ZS5LE>82<,w'0" #!I"?"##$^$%S&#'*.2J7=tojcY\{UfNG@:4/"*>&N#"# $%>&&'a'(P()!)+.1p81==wsmf`XQJC=8'2.u*('')**+n+,l,-2-.138g=AF${lvOq^juc3\WU=N3G}oxZqjcj\SUINIAD^@ ADItOU"U={twmf_XRRM2HDR@=;::;7<"<=*==>2>g?@NBE\IBMRXw~wpjc)\VFQELHE BR@Q?.>?@|A_AAABBCkDF4IOMQ\VH[%A{3t~mf`aZDUaPLIFEDCD^E[F[FFFGGHDIRJMQMUqZ_=~x"qZjdK^[YUiQNL JKIPIIJKKL]L(LLMNORVY^hcS&e{wFrnkjf9b_\YW7TRPOcMKJ=IRIYJQL1NRWT;WZv`bi(l}yv&qZlhdL`D\YVTQO%M*KJIH-FE%D)D1E;G9J LNOPUVX^bxhfxtpkgb^Z~VSQNvKIGED{C A@r?}?@BD)HpH,LNMTWD^B`yso{klfa^] XTQ2NSKIFDB@?>L=)<3;h;o<<@x@qE=GK@LUT W=\3o.jfz`[WSwOKHFOCA?=@@EHLQUjfNa\VRNJCFCAQ?=;198I7I6S5534;4=5?758;FpBFHbK]9XTQKFgA>3;86O4X20/.-,C,++**J**,,-138(;@S_GZ TN'GB!=:9I631T/-,.*)((;'&&,%%%%%' (j)-/58u\WRTKHD>951-.,*('o&%$#?"w!d!  M O  #%b*-2[TUPIJB #%iSb_kXQ=J7C.<<5Y/q)#[Md;f 6%@*lf`ZSLE>71,&G z04SN9i $c(/lhc]jV(O/H#A :44J.n("x4^2 x 5"Z$*/N3pk{fu_XyQJC<60+%v qAy Y !h"#"##$'j*.3'6smib[HTMF? 93?-(`$!6 h!C"#$r%%%&w&'(a+.3I96>Xupkd]pVOHA};50B+}'%$$%&'(L()d)*%*+J-04z8=u?xtng`YRKD>9/4/,A)) )u*+,A,--.\./Q02h5L9>ANF|`vrDkTc]1VOH$B_= 8G4:1...d/?0 1(1w2223O45b6:?@@FIZzunog`YRKFSA?<85333>4556I677v789; ?@wEKO~(xrWkRd.]#V&OJBEpA/=:87789:p:;*;; ?AF6KPT-|wunfgc`RYS7N+IEwA?:=M`>?)?u??@ACuFJOT W6Nxqjc]]W1RDMIF\CA@@Y@ABBCMC/CD'DEGJN9RzWZ\{u?niga?[5VeQNJH/FXEOEEFGGH=HHHIJLNRqV[&`=[xrk{e,_KZVqROM2KzJJSJKLMWMMZNN/NOQ#SWZ_dd?dataO+ 9\ڇt<.YF?wq4FgG|mօTt I)dVȢsԏl|textVersion = "ProfilingLib 5.0.5 1.75 Dec 9 2005" ProfilerType = 1 GopMode = false ProfileSize = 3 UseLinearization = 1 Perceptual = 1 Separation = { SepID = 7 StartK = "0" WidthK = "1" MaxC = "83.3203125" MaxM = "77.0703125" MaxY = "79.609375" MaxK = "95" MaxCMYK = "335" } Options = { .ReferenceColorDataType = "CMYK" ICCProfileVersion = "2.4" .DCColRI = "No" Copyright = "Copyright by LOGO GmbH, Steinfurt" GamutMappingMethod = "CIECAM02 GamutMapping" CopyPerceptualToColRI = "1" } LastSave = "1/08/2006" textdescXeikon FA Uncoated 320%Xeikon FA Uncoated 320%lcms2-2.12rc1/testbed/Makefile.am0000644000175000017500000000175513775114656015613 0ustar martimarti# # Makefile for building testcms # # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src check_PROGRAMS = testcms # CFLAGS = --pedantic -Wall -std=c99 -O2 # The testsuite binary is statically linked. This is necessary as it uses some # of the internal functions that are not necessarily exported by the shared # library. testcms_LDADD = $(top_builddir)/src/liblcms2.la testcms_LDFLAGS = -static @LDFLAGS@ testcms_SOURCES = testcms2.c testplugin.c zoo_icc.c testcms2.h EXTRA_DIST = test1.icc bad.icc toosmall.icc test2.icc \ test3.icc test4.icc \ test5.icc ibm-t61.icc crayons.icc bad_mpe.icc check: if [ $(top_srcdir) != $(top_builddir) ]; then \ cp $(top_srcdir)/testbed/*.ic? $(top_builddir)/testbed; \ fi LD_LIBRARY_PATH=$(top_builddir)/src/.libs ./testcms if [ $(top_srcdir) != $(top_builddir) ]; then \ rm -f $(top_builddir)/testbed/*.ic?; \ fi lcms2-2.12rc1/testbed/test2.icc0000755000175000017500000237624013775114656015311 0ustar martimarti lcmsprtrCMYKLab 5acspMSFT-lcms desccprt#wtptA2B0,_fA2B2,_fA2B1a_fB2A08B2A18B2A22d8gamt kdmnd dmdd ,tdesc,Test profile, not suitable for real use-Test profile, not suitable for real usetextNot suitable for real useXYZ IÂmft2 -Ge % M u EtHHt !"$,%Z&'(*+E,s-.0132e345728]9:;=>;?i@ABD"EPFzGHIKLCMjNOPRS&TKUjVWXYZ\]*^F_b`abcdf g&hAi]jyklmnp q-rMsntuvwxy{ |"}9~Phʄ*AXoĐؑ.<=<:852/+'# ׮ϯǰo]K9'ǼȪɗʄp\H3ҵӒnI#تـT'ݘg5e0[%k&V7Yy.Pw/P^X"7Ni * Jl.[8^!"+#V$%&())*S+~,-/011a23467;8e9:;=>J?z@ABD!EGFlGHIKL$MGNjOPQRSUV5WRXoYZ[\^ _%`>aXbrcdefgij;k[l|mnoprst5uPvkwxyz|}"~Ca{˄8Rmӏ,9FR]hr{|wroljiijkmosvspmkihfeeeeeeeefeedb`]O?.ժ֏rS3ܟuJZ&Br,T t(=KT\ fnf>j#6Ld~  5RpAa / S!x"#$&'#(E)g*+,-/0>1`23457889]:;<=?@A:BUCqDEFGHJ K#L:MPNgO}PQRSTVWX3YDZU[f\x]^_`abdef5gKhcizjklmnpq0rLsituvwxz{2|O}l~Á6Rm֌2G\oəٚ $'+/38=BGMSZ`gnu|“ÚĢŪƬǧȢɜʖˏ̆}sgZL=+بٍqS4ߩS!K_!_Mt*Jf8T[:i&8Ng *@Vl $<T m!"#$%&().*E+\,s-./0124 5"687M8c9x:;<=>?A BC4DHE\FpGHIJKLMOPQ-R@SRTeUwVWXYZ[\^ _`.a@bRcdduefghijkmno"p3qCrTsdttuvwxyz{|},:IWftȍ֎ $0|7{̑|֩ڽ|}|u|YԢ|1|,.||/iG|=TN|A;|z3}ط}7u`|є|ɲ|OC|.za|f{Q{ר9&{pjx$N~~"dVfqth}^E2#TCG.c0ϽaĨ܄s>ӄ]LDq#߅f{s]jY dǂcA4QVBւ3mr!.\NDO$D텃_/ {͂S_ꏙTmpځG[~C$H4끃 \ ف~O0ׂ΀oZ1C$[$u:{s6Eƾǡ㵏Xo2ߚ풪vmlmY"|8A "(爂.jJ*֐=?~^vk[WC䓒?5pS%;|=FrG7碽|)\itU{S3='?~t >X ٝ$yRgG^SS~ӛe;~wV}rƂུ˜@47w%%n yې_3I-U kꞝ` JxCfbSP"<9كXܸ{Ĩ(٩J'vZڜd.Q:ƀNGؑא$W ΰ^|NڃxtblȞ>Od8D~ZՒt3YmلÂGaqhP~_v2L57 |ٍӟ%p|~?u"ҐQMo ]L+I;3-~Y{'|c|䏆}s}Ԍg~*~|щjV(L@*Մ!ڈfS؃Rʂˋ劁{SL ikPUՇ?b!፳5)*,5f61Fy戻h-Tdž߇>[!ЎbIc!sΌ\Ysx[%vfۇ$S@=񅨊!͏ӊmF8זɐvڇme.RK=J!}ېaџbj̜̋>͔bÈTtԇcQ.>;ÄGlʑY͐=m ⌢@ WrrayOR{90ɐn=fЌ{lҦ{݉iGpn;p_M 7ǂϕm+ܐ¼.h?Gĭu娼~]n+堓]u1KipU5#gyS˺N0?uغxD+{=SkZ„PH)2X~3g}aRyދ %PyG!1i@m\X_F=0(⠐|γ{!{|*E|}_x~'vQe׀TS =!?#ق۔trdӓL͎̄~uAĂkdcD#Q_< É7Ay3*7pՇˇ,c3sՌ;c! PމF;9 ɉ``,LёCZ[/)dErJa͊,O͈H;" JǗ7Ɖ󈲐(ӛs )]xwjt[.J~7ǑQ`O2o󟉘avh@UYh$.Hv5HX6d*O9~$Wt8_fsՔ_WfG3q AԞlH`=LTdrFdqpU9E\V1u6<j2$' ;~@9pcbKS^֛QC?/2@N4ƥjf_ѕW{2m_ƌ٣PK@m(,U}̱NSry-kݏ`]MNe5=̥)8 -czJJzH{L{[|~w}Wi~hZ\Iߐ5X\Ў06#4ϣBSdZ€xv hU8qYLuHΏb 51DOWݛsg~Sə-ta}fX(.GɎq4tщ@v"Ǣrћˉƀrψ\eVҐ"FŎ3ŒPMc51ў{/P~ygqfCjd|U>E΍wm3gp'{3P|oԐb6aSݏpDNQ1%8|f-աԝؔ qaę/zlm}`4RQ#Ba/ mϫsᤓ[졞x+k-^Q?P$@ыF-gT߯ I .vi\IpN7>x+KϚ tTF_fz-tQgZڥ@Y搼K;(fEQ ЇǦWȼ?dʚ³re\ĬWː ILg9jͥ=%Ǚ QkLZ7z!0z{ JM{||&p8}c~TȕE#1Ƒ ^ƪfǢznSaMSP-Dn1;UbuƄnUyTm$`qRoC _0drL) C>Tġwkbt_KQ0B/lE5/ǎf==v\6jҋQ]OsA&qR/*Bb=ì(ԕq`ztѐhSc][֖hNV?8-N3_lƢ\ϝZDL~v%r*fuY@L}=e+q0稲 *}EpJdĘ'X0MpJ˒dѕ,,GGτܑ:Pr|.hqكe7Y Lv=-q,rM'W0dDNzo=dTXF}KEW=y+vՐ&G\Ve yDn'bgVJRM<+΋g*㏁ȘIůҫwlD>aLLUCfH΍:ȓ?Y):`nyvcșIٗ"vvejء_MdScFۖd9Ǒ'{6 ߉Leﯿժt?~iHk]Q普E=7W% 뉣bwӥS~Nzs+g\xP"m7Cb5~#;u հn|ةDq6He¡Z kN KPA H2Ÿ| 8<PE{U݆JV`{ocdXSa L3/>`00r} .{lҺ{D{u {jI|7`|T~ G枰9P'wZ~. sOi^æ(S܀Fݝ8Κ&'j  ؽˆ츽9}[rͮ>huɂ]mR]%eEޝ38 [&U0E^,{q2g"\:†VQuoDŜ|K7DF&>cggڷz6KpGhOeƨZZ#OɟΉC͊:6݋&.j3Z|ylԐndRkYkNJJ.BFBz5@G$͓` ǏQXQxm?bݧWGL@ӑ3͒"ѓ3 S^I5=vڱUl9lal=VKF ?BUIG=(09 H |x~sX iBX^kSrqDgf\VpZK마?!-2"N څuT8|Ƅlr޻i<ƒ_kU_Jߦ;?S1 R!D 񕫈{Y(qXh%^`T'υI+>O1S/!~G ?NH*B3zp鹻go].R#UHxJU=ˊ=0a!AZ xeѓ y*oعAe[QG";Ѡ3/ /djxȖHnǸ㔋dóZP[#EƤD:jG.B,HL>ywsmbc1YO(D۔9P,ϗW,PvmldbX\pMxC7 *͚me݊XO4uVpfkP_a0V]LbdAw5w(|l4f~7Wt#qj'\`穖UNKT3@u.3%^t|' ]|{\|||};|e}}db~~!~~ډun_F}E;" {d {˃+|7|}A^X}ɃXn~\ntC~^>Ƅ!E>"ڃYz;zC{?{ω|lƙ}'}Rs$~J]BDj K#vy6ޗyɓ'zdϻ{{O!|Fх|jq}N\@~hxCd`#RYxdyxy&zA2z`{΄|=p|[H}ČwHӲx.4xа]y (ya y8{ zj%h>zޞS{K;{4zk5x=lx ]xy=ygyUx^z9ezQzŠ;8zx3xTy38y-Byg+yyڷvz Ccz9NzFw6yy$Mwڌ`z0͂~zɃ5{ׂ ||}Xk~,Epς/[YBmH!v;x́sdǁBR,S+]с%Co|"ZtBAC!"wř^ VFxSHhnjΆIYp1iA݇J!ҌH)GÍг&Y摌ފm Xi@ [!ł_~~i~ٖձ4~ߔ~m~x2kxWoߋ@Onp!ہ]~nϷ~k[@~d~e m~d~}||f~i~U9>ဂ~|͑~s~6~~<~z~*sg~VT~6<~Ӑ~,c~}K}ͨ}1}7w}Oe}ӘR?}:~?4}y ~a^F~(~}" } f}|ㆯ}h;u}^c}cP }g8}=r{׶~ʜ~k ~ }ָ8}l}N2r}#`}MP|5|upz]կt ~ ~^ܣz}{}}7Wj݄V?pqL QVڄKH^|М˄wH {ՃiuUg>M F0ؔ!SWӍ֪LŋkՃ\mzIhOʈT>Z <֚x]ז )$xĂWg$USa=^;m 3Ԏ %>jOЃVh.ǖ܂4/vɑe/Qpb;ہs%ҝĩ'#sGޟzAτŘtrQ%cP#̑9؀v|Ѳi(d;肖ϒBۂtbSrMaN_/Z7ΔdT~؏v(>3xR1*p ^LB5}*gwaȄҬpR}mu?o\@Iw`2~C4{ʋj ;Ȅ ცÜ<ڋ[ {tԲk/YUF~0l}zұDxrx7qy~Gzј!{ȉ'|x>}gF4S=xjJыUێL|–Q楢ˉi`WzwcTeRņdE6ۂ}J=Ɗ!o'ņ<{ԅ4l/\=UJr4聭uBO3 eOy3j\ОZ⛠HX$2+~IG PeƈǶMd)w'gуWt}Eu/(H}!UQʶ6Ɉxc 5te?WU"!C-Ym {∬wNx1ky 2zĎ{ |$r}`b[s~Pt:ʈ}E F~:~~~Ȝޏrsxcq{a ЁNĂ9.dÅ -'=Ҩ͐Wv5F*~pc_lj1M׈h9l\ߍ[>SH菰I:|u}.(n^nLo8IfE׎ٿ͓qQm鍟{l]K̊7{ޏ rϰ~Vpyw k[QUYJ%(59 s;3S`ߎnΓ)ƚU\wBhوYI˒ HN3g.2K6CBQގ:"Hru2/fχ/W^IFp1탙EGseَ-](zs CdC3U=՚Drc/ؘkKڻqV͌i~͊kppb%cRnA,ڂa ~^5`W_~{ӌt|Wlnw_񆩪PV=?2qJ*Kh <}?bvٙwwxFyzz{lÏ2|]~{KЌ 7pˌӹ}<9+}ږ}~Hd~ybvPkO[Ɍ3JZ6R¸ уv}@H]w׏փ!igZHI/5'b/Q՗ՉQ^~@ v-5'hbTY4H4ӉΈpKƛʎtÒS㐅6t\fጴW?Gz`E40|-S@+fPĒ>ސ rd*V$oE툿32]j5x^/f&O,} pv7bዴT+GD#0=%z󠹈Ñ{Ï^gn|P`DRMjBB],.ʕqM_Rc䧅ʑ^y%6llq^ӊP8@H ,B {}s۞ wu jҤ\dM=)h] d䇳KA(uzh fZ@P{Kg?; $&Ѓ> #~.BvuEwa)xYyyFz>sZ{`f?|Wh~PF3Db'|{|i}V}~~1r~dْVV(8E;2rچ 3͂ Ղny\rO}XrFpzcT􏔃Dߍ1S R#4o:ɛØv {φojSbDS놝CՌۇ0M7󏙩֝& ߋz 3mwˊY`jRgEBٌ3#0;o։pahYN%rAt x"kM^⍛PAW.֏DҍN%^l$Q*Jv%fmi\ŏrNҍ5?e,@|x0 9tJgZ M=܊s'*X Ʌ%RUȝҙ~ġr_(eˑHX뎱KV1;͉(U Mr۠ݝOIϙ|̨p8ϥcVmHe9 %pPϟև ܴzǖհnVAa~T1QFX6""ˆeSj㪄v}4wG[x{!xxByl8{ _|kQn~ B5~/cPT| ڦE|`5|j}(v/}ję?~Z^c[MPA+E.U7IvkmuFyi^]KOaH@--e騈Lʊ+QF~s݅gٗr[ N"g'?/ۇy,@{ "{9K}kr$?f[LIZCbLꑾ0>=. ,H/Ik*ۆW{Vp\Ɏ+d΍PXیKJ/x<Ǝ*vZy~yRXߗ4yɔTnrbnVpIz;^( FϧzƝكܛx5lș#`T GÐE9^@&o ɆՇK.ɤhݟšvybfj _&֛SwEԏ嘚7T *$bq?uή:ިti hg] FP̒Ck 4!mߖW~IrΜqg,ڪ[1NْO=AHU*2RU&Θ3&v܎Nwvxz1.xo̢dydzX||>Kg~<*5k{b|&B4|]x٥t|ne}8c72}W~Jy<)ߒTƁ 䬸𨂀wm a蝁9VkI~;)9ʼn.İ+Mɀ݅AvkI`zфUfHNG:.A(ۊM$Et|Hj_*aSSG$9M( %-PLܫ.}ڎs hy,]lBR2E 7&o` Iݯo}|qlfȞӑH[JUPWȏC䔓66k$~ɔ$ FZDěVzQ`ore4ZNhBD'4픾"([uՃqx4.nPK"cQ(XfL|@kϘP2 )zT) ˪רtw/֐4E(Ղl&77uWGjU`>uTIŦY< \9-ZOpX)wcxzQxpy1fjy\q}zQ|KD~!6Ҁ%;oK //=t|8]|]y6|oz|e}.[5}PU~CR6$u JOĀY%x[nPd~܀ZO4B5A+b$+ c `B|@vޮm kuc)$0X8LMYAܚͅ4r`# zo÷.u "kǩňa٥wWiL@ʚ3#; `}$}wtSj`J`bUK0g?^}2_!˓0 ӎZQؕ#|'r=hd^㤕;TdI =ʙ0Ǖxzozx,{iYqg3]~>R>H E7c~;00 |wf|nܷ|eг|\O}R}H̥~=/ܝǃsAӊ? (A1l*.v'mcdز?L[vEQ GŤp<4/1߅Ì ]T~uɻtl:JczZP?F߄_;7ۅ.k *u}tω4kSbŇYZBO9Er:=-ܛ+/:ɐ Ć}\sGj״az7XaN:D8t,ٗ,|F듹rْwi2`Gʐ%Vͪ(L{B7+,Ζ 0{(.q幍h1_)gU{KAa6%)~BϖgMzpǹ_g1]'TYFLJP͗?[4<#'ҙ/^̏rx߾OoSMf*P\R):H¥>@=2y$r%$ˌwwnUIIdܨ[_mQGh<á&S0"%\/qybvۢyw6zyg{5z,Z{{X||ph}u}q~R~\ cCف lwwfٛx3ykzz/@z{΀|apo}Z~BQ vזww3xVy1kzpz{Do7|ׅ"Y}ez*U{"Zm|X}*@~k 䀽ktQuxtv{!woxn ybGoz`l{^W|x@V}6 TsϢ tџuߜp.v֙wӖ֎xŔ]}VyjzVP{Í>|׌ ~[@sLt[.uwܭvjWw^njAxGzy6hzTt{B<{|Ls5<̏t'u"ҫsvv/wџJxxxfyRzb;{ mzېMsG]t#u%uٯovwbvyxNdSyPy(8z+'GycإsXtkL0u8uQv w^_sx MaxMy 6)yAcRwڌcֆt,Թt ujvv v'w>cqw̮_PxBK_x 3x\v֊Lu[Yvgx9"ygzb{ڀL}m%~[XTy@E6ՈY޲}}X~$~Z~P~Ȱ7~2K~&~kڀ jW8W?}Ã1ܲ|†+^}ǽ}MbX}}Ύ~J}"~ȄjOV)>-Vڤ{|O| N|eX|}\}A{~}iH~U@> )(-،zіA{/{e{D|I| z}Ag}֋eT~_=fj7$(ez/l z·z{X}{$u|"w|f!}/R}؍n;~ƎeZy"z$>zz{@{u|[d|P}$9}~ y ©yzBzz֡{4s{,b| .N|ww8|2Q|6yyy쵭z"Cz]1zzࣆq@{6x_{L{֘5{ݗzzgBz-mzLBzm-z  z`nz]9{J{7p3!zO5yWzV+z:Tzu䜲z{2zwq|zDlizEZzGz0zO x?MՓHt(v"„Nwoۃxʃyg{7zM|h]}T=zj>+ӟ|7}уG}~)~HVyg:St<kѧ_B$܂U×1郤ԃw҃eR`,;߂ÆˋϨ:@Fҁ{J!LPvd-BQMq@;!n͢*/C𒏰ـߢ:n{^:PtOcQrPI:q:=LˋF_%{D͓bra~͎EN8`+=ɐWŞb^C{pC0!_j9LUW6s_"ȩ{1v9L~}~қn&~]t~@K!~4~o-}J ±ƨ USYP~~?{g~|k~L[N~-I ~ G2}|"|,mu  ~vx~GPii}NX}FR}l"0 |3z‰xJĚԅ~v~g0}Vn}P1C|٥O-{ݞ ygbt!`ufvRvqwHyQY zt܆{|c}PɅm:Hȋ={c Q{Y|}<|}݂F~s]vbobtO19ԅtLoƦ6'[uƆq a*pNwL9C*ļR6_م LtZćp_J_ЃMs87ۈ&"-ʇIFȅ9} n׃^;Li 7|Jx‡ @4;N^KՄ{u'lۂ\~JقV5A=҆&۞{jϕOn yZjoZAI3T; Wȓͅ0wBhXtYGD1j7=@f¦du6fuVE1X/}&Ѫօ׶#ǩrVc.TBz,~ O|RN׆ƻ!~󂪲pŭaрݪBQЀl@ 0*n}Ŝ zنſ;sx!tvHwTx}z o{^}1MJ97,,`xzHُ$zM{1j|N.}| }m~]@Kڇ7[؋! @0wсCj_Dizt`l4f=\YJԃ6/z׎̈,s چq/xjZ؆I5ZLj6'QQ񑷊" wKiY&CHm04 ]o`P?Гfu \g&\W܅F)2/YF)-8V㛈yy>y>5e-rie֑UބmE)}0CDH$Nx0wO~Zpކskc X?S[wCk[..Y.0QHt m|FKnȆ`@QٙAY,z .~ڈs@7ز~B1y#lqפd^nOed>,)ـN }R#ѿEV-P?Xwgjd\g6M+<7'LĚT|s @tHuQ9vڃmx0vŽyiR{.YȌ|HΊ4Xa\Yyi"z!zَd{A|Ru(}J'+ݎTVzחʓؘWL}+rVq'eYAKH<#) 91Þ+džٕm{]oʐƖcŎdWkI֊“:ψ', 0dƥ4F'ym吀aێ]Ux>G݊K8ƈO%;_/m֎F4MNwuܥkɐ]_$S6Et6ɝ"T6䗦.t[t;WIuҭWi>}]ɍ5Q:CQ3LՕiCmrٓHsIu(~vXswhVyy\MzN|?S ,T-qIxSy֞y}&zrh@{Lf䖼|NZF}Ml>A E+҅>l-}ΐm'~T~e{F~peYLA_=;I*o,1yorNL/z%o^ȃ$cI\XBփK<6)!AǗ߉.fЈ0#x܇mԗUb.Vݒ8Iɏ臡;>ӈ)GV?iX6u#LvǙZ}l `”0U#H+J9č('c < /ɒtoj2"D^擓aSG F\Ď8"% *ܡ웾lɚ~}MsHhv•'](,QDEv6X#MօM0䢗z|ORXqoef|[VܘO>B֗*4Rj!9;vrЃm çzdV3ocd`YBM}@`w1i>s\;F7_.䯘x]mݘZ_bFWogK>H"/-|~ےAs*t!l uuv:kjwh`֜_xUczyH|q:)L'ʒ ̐ͬnx2dx~;yet3zj=z_|{TT}6G~9)O' }9%}t|äv}rס.~h~{^/)SFr@n83&RP KjoJ{Q,qbr4gl"J\ƚQŗ)3EC}>7?%1 cfˇEyoejC[ccJPshD<6V5%\t wBPvxUn[<dWߊrYӊ&NӕҊB ~4鐋#u@ 57pv0lڏbvXe2M^@ؒ36f!Xے؉7MZ ~楳u4ߖ k%a|VcKl?5&1dJ%(O"C}[siJ(_Z՘TxI=]/Y猁JR{rq֡Yg<]uRG];p,܎ыu2σ{uz pCf2[͚PeEĔ&9**h$o+s}رtuUul "v~b`wXȡxN=}z}Bm|4Q"w q_x\|ɰExt2ysjLzazW{M}@~3:!Օއ0 ~|{~}4s>}qi}}`n~*VbJ~K?Ё^2a!: rほzqƪ|hw_U}0J>"1o ? n\9ygKpɅg5]Ԣ1S՞IN=Ϙ80J )x#o)Beƥu\XRV$fH|6{߰ܣeril=_֤`V&uKbAWSo5P a'Ϛ8zuq*C3E&Frb􉩀ssTjϴVb5Y=CP1蕐F6<1wJq$'•Kr@Ƞi0`دfWϫvNvDG:Ȝ/]&!𗬖qh\_DYV(MXVC9a`-} k> v#rxwswumxvyx zy{{{m||X~:~p@^o~tzqu{lv|Dw|x}Wy~fz:lO|W}j?}w^s 2`t9&uu*v9wx}zk {KJV||>~6qJۗq6st^u7Hvʈmw| y@/iz{Ug{ֆn>}^k_p|qԺs\tau+wzwxhhhUyDT`{A=m|e~Ao;q%θNrFsu/vmxawfxxRzN\;{}b}vo &~prUsbtuޖvwHdZxQPy9z| {ҟnɯP3p/eqOr棟Qt%݄OuW{sv)bZw3O5x̓p8yylnp 0ZqodrsѦt{qv`.w!M$x5xx1np7}qKrvsvtXo u]vJuwYU3Tw*v䊩oYͰp|ɬq!r ?sT}yu5\uɹvvuvwzyx{jxxYNyFyi0AyF x^*us:ui}vv߆w[wwͯ9gx>W x-DlxO-x8 EwḘprY`^t3Iu9wSÁOxvzd|1QWw~:bʰ5xR 4y=r4z9T:{C| l|t~ cV'P.9ۂȬ~)|"ju;OUv@s߁bG9O܃9˄΄_1ƞ}͇}.o~&}~LPm~q~q `x}M8:&TĎ|ҏx}Wt}<.}k*})}ފMo~7_Y~LP7}$L^n|e|R:|Ù_|Ē h|}|}5 m}]}~K[~54}dh{yx{ȝ|s|H3|nz|k|[}SQI}Ď3~+{~پ){?װ{xƢ{{֞{x|+6i|kY|xG}2}$s |{,a{Rܠ{s{{vX{Şg{Wz|&'E|N/| {&{T#{iS{w.k{|3X{t0s{e{ T{C{-{ uyƇ{٪ {G{;]{m@{M:q{D1b{8cR{'c@z*z >x?zp>qŨ9s&u8v_xapz_{M}7oۈyj()wD\xEyWRzIH{F}|No}y^~LjR6j56~qp~Ϥ6)a|)fm]`KJ#6>vt)0քOzdQl2\3J,[m5HنËͺ@=͂HZx!judZk6I 4 =¸.Qh$ZEc vٍhX߀GӋ&25ŜAV~.s1 Z*/txQyf_#VE 0߀:"S :8/a̞KscrmЗd`nToCK9.~7s%SL4)}pSh)bGR~ߘFA~,~ |΁Q f{m_~Px~Z=?L}䜾)| z{iڿ > y]k~ޫ>]~Z NH}ॼ<}<\'s{暬Uy݄nvorgq?Pr [tlfv3xwjy[Ib{Iއ}5)Y`EvUHw]ÊCxtD`yt~zwM{is|Y~KHD40{ʈĊ-.}ȊA}L~~u~w~uhRFXց1G}3C;6ۊ1Pʙe)ătftWI JFf2ăd*Yۣx0ʆd_rZOd愺UJEP145C򈲑א#h}WPQp]gb T,C2/ǍX,+\k{4ВjnD`vR:뎷Aj-؂Q$𠿝|,@y6XlM_2PdI@2+ր0 بݏ kw.jG1k\k1N`j>)W) }نԥև̆ލ٪f٧tǤhZ[K3t;J&~"|S,Ɉ*cЇ ̅ԳyrHfVXÌ.9$$8}}{ìoO~$pqr)t!~ꍾur;wse ZyJV:d{ 7*ڎui}ڊ5r4ʖfvYqg KW<D(Z8 |(d򒯌颕|V0{p@od+W{IȖ:R&;_Kw@_J~yʉˤn7VaކܠU9G1F7n#2;}Ѓ뎟鎸ƃBwl4_򆗧S=&EϤ5R <|}dښ)o&np&re.sw'?uk:w4^ЏyP{A}-,_Պa>"tԗvwF5xSucyhiz]l7| O}?ዳ,HgkM2z֔34{}$|.~Y|t}khC~4\r)NHh>ʊ9+Պg~?זӡ o34~pr-ysoVu6d1vXxKLz6N$O ·Ϛ%z yHo!veZڐOC 4"k])ܜJs)xZn/cLY'M AU$37E T  }g"#(X~vؚlnoKb(WMǖL?p13?ɂU"r~|tšjvO`%ǞU>IC=.E. 4ҁ,2|Jrh4^cHSoHH ;ģ","z*OYovҥKpz#+rpKsgAfu\ۙvQ'|O~(C3k54c #YV _ʥ~~Ѣ~u lecXܗRqN=ρHB48"j g}ktуk#aWL@ȅ3GȇN!⎈C Epq4{erD7ҏ( )W} ns٠GjamW^!M&B;_5̢̎'R.gpox>q-p7rggss^FuTՙz1=]}R?TNc9t|w&ueovSfDwK]jbxOS]yIk{)=ʘ}#0NwH2n~D_yuymާzHez\7{R|H}<ʗ/iV2BW}$}t˩~lC~icŢ~Z럫A8"}6#)[]щJwރrB}=j}zb୾}Z~Rx&~I~a@":}5*.>(nF,op:qHi|aϬY QYGHbƂ? [44P-'ј$djpD*8:Ď/֙}#_Blֳ*dɯ-\ͫ T\BIKףhB㒾9#lf.#|?iVl@nC%:pqs(CtuUvI&cw݈_Py:{a~̰k̾NmKo( 6pOhr\ssCuzbwOFx9z_:|rHʀj{lܭxn"pqLsHptܑ`v]Mpw97yBAKzDy#j=al 5m좺oq%z~rnt<^ u@Kw50x%xj{kŮmGo)׋np|=r7ls[u IvE+3ww0åj.%kҷmopDyqBjsGWYetqGui0~uÙ \ufj_ƶk[mSolp`uwqgr㩢W+sDt.(t 'tͪxblyn(yq'zRszu"V{vv|xe}zQ |:܀F˓vt߽w{v+0xSwyxēyzz{8t{|}c|}P~-69ف*Utu|һv}a1w }!w~xysz;bi|Og}Q9~G =Jsڹt„uބ} vԄ\ w̄E|F)|J ,{3|!Ț|'|'|"v'|i"|[|tL|v<{ݛ&{Zz+|;0|*|{t*{٫eg"{ŨkY{J{}9{$myĘx@eKkmoȌLqstAufwWyF|72U{qFxrS>Rsu261v=wrlLyTezV*|Ex~1Oox_#yʕ;zo${{}|Rpڄ]}7c~;TބjDM0S؇ot KE%{o(oKb:Sy&C#:/d2!| Ch2y˅m~`ZRNBkJ.֋}v|GVً탲v9wkʉ^zP_5@uQ,݁Պ3ߊǃ|@?H󁜁uvi*\덛N{Č>*U ׀o4+Eǘa\sg}Z؀HL <Ґ(p- ~XjbEo}qzeXJh:&r~@2|ޝvMҒBө0N{}ʤoǀ5cuAVH6Hh~ԛ8W~r0t&{$upaveB'xhYizK{<ȊV~W)ӊp݉{`Iv񍒑w,xyyopzcҌA{X%},J9~;~(݉9 x1D|Ӌِ}a*7}w؍~~mw bFWV?Ii[:B'󈕆 􉙈“\Ԋ'݂{Pv5;k_`ŠrU5]H#9|օ' {$p"P$~ptXB%j^SvF} 7%iP f c?~|rl6hQ]!QD6+(q#<v j愛z⌕p4fMʑ[FO҇fB\4wXs! pсރALՂΛXy =nʊԘjds_YmMAl2wR1QÍwl bb]WV›Kӆl>ƅ+/܃ϛ ʂ'Z.~㍚|u4njmz`٤UqMI S(7HVѓ< D._G0&wRnڑe<[FQ+[F:_9ˆ+cxJMv.m!åAcȣYÍmOOܡD^70s)D0D_k|m\tž(o kɛpbƙFrX—txNAvB7x4D{" υ`Tp{qsosAjrtaiUuWs.wM yW@W{o31~:!4$Quz9v}r&wwixv`lyV1KzKޓ>|/?ۑ{}2* QH&.^zxɝ{5p<{g|^}DTؔ_~.JRJ>1$ xTwZ oa]f8]J-SxIUj=0*F~5ͅuĜKmvdS([GQŅG<.x]|1t/Ck-bЖ͉YؔaP;E&:=X,팵ɐ'vʁ{ ǐrIj#1a/RX-%NlD=8+>1{א4р#yoyph{Y_Vs4LOBs)64);J"wNvo&ǜEf$%]%T;KJ@`4rf&v3me9[%R͒VH됱=>`2l:^$%pzMl$rmko9bpZP rPutcGv};x.Q|Ɂ ry+pqoqiߣs#atlYuOƛwRE y!:{R-U ~W攴&ۑ5Iwup8vhw`MxW*yNz[D${9},d4j"v ynzpgQ{&^ {V=|Ml}CǗ7~8v+sKPNOluw9~m(~f]].UcWUL6ɁBQ 7i6*j:6ttlBvdU\6Sٚ;JAr5{) iݐ6rեۈjۢ߈qbˈjZWR1"RI?c4=f'j⍄䎍S 8qWjiaiaOPYPGm=Ȕ!2O%Đ/;og8`W!ODEÖ<&0Бӓ#|Snb՚GfRיu^UUϛM0Cؖb:̘.o!-V ӌYlndᡰh\۞TGKȞB( /8;},˔ W凫nڳZlgįn`۬PoRY3pQrdHӢt6?vI4x( |)Sn=pf⮿q_5rX9t%PzumGΡv>x3ќ{''-~v85[bm?teu^:vW1wOtxFԠy=Ɲ{{2!}&U{j8kXydɬy]MzZV {NR{E|<~b10[%zƗI߁jjy}gc}\n~>T~M4^DC;Ёu1ID$$}3SVibwD-[OcSkK͡C::</#LXnJvT]ha>Y(R JHAy8]-B!8Flg__*XNPƣ`-H۠'@07],or 01f(+>^ÐWJAJO]G[>35k5* C dݗG]R}Uɦ.MEm<Ŝh_3mt(`͘$qZ \Tc\FQTvϜLY{D4;&-199&W` 'ohbpk4r[mڣksp&u rvrtvwvdyxQf{{:T~}^v mqZo-rptrKv7sw'uay twzcTx|P5z}9o|vmkyJ6mz4oO{1p{kr|ԂtT}s v~obwDOyˀG8{Ƃj k򁹫m㝑oqz'sxT)OxxZyxtpqrçsvUtCiPuX[v&#Lv؛<w[&v7x pkqrysh1tRt6gNtYuGJv2c9vk$?ukyQg1jIlʍoqVtCsguW:xFz1}aۮ}nףH~p~Qrr ~t~us/weey%VgEzEc*}0Oֆ!|Nu̡V|v|x,>}Ty<~E}zUqt~{ld!~|UT}D8:/FSz|؟T{P}c"{}U|*~|s|o}b}HS~`CN2.̀-oyTz3z{{z{n|`|RT}r`A~h-lOsix$2yycz,}xzl{6_{Ո!P|@d}s,Q~u<qjĤ`wtxNUx4>yw'vyj z}/]{RN{>|vm*@} I~V#w wkxLʀ=x͕7tyHhy͒4[:zXLz<{8(C{q|wvwBȉwҝ~5xMrx™fywBmzu.օ} }!n8|Poq̄sqyVu%mv`QxQ zA~|-DŽWu3tu#w6xWwykz^{P}o@J,ăՇơG{a|5|}[u怜~ i݀~]YO9(?b+΂6MΟK9VdJt+h:[BM݀:>D„*火s承8~撳~G~3}G~r3~fU~ՇUY-L*V8<̇):|| ?H@}Ԑ}ӎ4}{9}Sp,~d\~X~AIJS~}:~̋'( 0Ɔ6}! }9>}OlyO}V'nF}Wb}kVE}H} 97}ӎ% }n}фY||ǜȂA|֛wY|ؙQlV|ϗ`|ؖTa|┰F|퓷7>|哗"|O9 |||q|b|Cu/|5j/|s1^v|hbR:|YDl|@4{zɕ|S|lGk|j~$|bEsK|IhN| \|PU{ܢBk{2q{ay8/ =g?$ikgl8~ˈnbtphkr\7&u%New>zZ+h}]׆3ndm}osqC}rrrtf݆v[Zʆ-x;Mz;=|*V N sЏyuv^{ldwpօxe^z Yj8{qK҅}<#)O1 pVĆz܆DzȄ{yJ|Qo"}cÄ|}W:~Jx ;Y9(U鄂 _]䅠W)Kw=@myɁb/{VnAyI%1/:=U['j ͅ|ꄱƊDSӆzudXk@`[7TeIG{N8`j%Ȋ P!~U""ti?^s늟ŔMEwJ6b#nρNP/()|t&r+)ǵ4\<]Q 鎨CY54k!n 2R֍Q6xz zpGeZπO6FB39~}N悤:2xjǟzn-Ecր1X7M?>R0~+}& Ђ\$Ev:lWLb[}VТ KC<=~.e}|{;Ygi΀̎lv؍un=l׌fpjaՋrVOtI("wa:RzK'B~C ύmHUlo 2IpuFJrkHPt9`\|uTwG2y9$|&7_ <ɆDr5tH} us/viÊBx)^{y~SzFF|8~%7 $xĄy{ʋzr{kh(6|I]mv}9R:~LEfR6$B 17c~.&zpaf1[vPӆ΁D#a5φ1;#]芉R%x;+nFdƇ^Z,1O{B4E@O!vӅOzkvQHlbކXMrME>c@2Jo,I&ΆÉc}ՐtjՆHaVJ K?0̓ZHّ--݉P+{crj i_ATI{=+5.тs܁)yyp f,~]6)?RFEGa:,A׀ ꧃wԇnцIe.[lѡlPݠÊT8\)񀨜\~8 _gixknӒnep![8rNPd}tC荌w+5z6# ~.l~nvphm\mr dsYՎuOwBy4|z" Tυr9}iVsutkݐZv%bwvXxMzvA|V3~!)Ww{˒@xshyjLPzla${cW|rL}@S42g%j KA} z4<}q֏~IhȎQ~_yU/K5 ?Â:1]=?ւxudp =gv]SIÄ=酈/׈P<d1Svkn6@Ve)߈9\s(R <5Go;'$.e;/yj*}tt7lycnEMZS،PfFo:k-,]~5{#s Oj/aɒXVND2֑c83 *]'|4yΏҜq:` hݚ _pV=LBH5 'ÄSQwom&{gB]!,TʼnLJˈ5@IƟ3gt%hݙK5~IgvƜ/io kfm]oTDUr Jth>Cbv0zz(h% }HluinZmpe+q\ sNRVuHꑹw%=#nyr/|jl ZH{՛qsrlKt.c˕uy[>vQ\xNGĐy< |.~zzavrwj̖xbWyYؓzPiY{F}:䎅~-]冼Pzx{q |SiY|`}X}~mOZLEFǀZ9,ۉVdςKwPokKg_C# Vё:}MxC83+ˇN̋χ݁9uɘ=Vm˖Uce`{]~UKAݍW6p)@&Pt(lċdGˋ[֑eSUCIXO@,4ËS'Dre>;jpQbTZ!tQDH:Ԑ&>b*c2芬%@Qph`_X:O&LF:c:3|&ߐJcmrEf^PWDO/eFe'=#)2.J%j ylфDdh]UUmM}VoDF;fK0ta#4B勫Ѐj>c Չ[КZSKĉC9.Ώ!g"h;i ɏsa`#ZARIJzP{H|~@}7י--V9$ ̄hc8}\x~8Uۢ~N%qGD['? ؁6]oh+rizL\!?b U[/-ThDME=iB4܅*0ψ&,( RqT݀`k]Y̤uSKD-2&;ޙ3R(6 s su_e錬XtQ3J&|B:7A{1S܎&pw^!W gPPHu,]@ʛe8J擨/?}$]d \}Wsvntw^vyKy${{5{}x4ځgtA,j uvl7w 7nx:p yo{qzms{\u|Jkx"~.4?z(1e|jhF}Wj}7l~)n~yp5kkr[HtۀNIJw3sy}kd6fOi.jIkSE&mv!xCoiqYs̓H8v2xyQ|" %bȪeN g/j5flhv2ngp5X'rχFu 18w1 z|iax Yd.giJk'smeo͌V1qߋwDsz/Lu8 x͈`l cYVf!4hk+jqlϓ2cnSTXpCCr6-vt= wIUJ`b£_Teugƞ}njZolan1wR[pTAUq֒+grYiu_xbǔe8gjc{i9m~kQ_gmPo9>p1(pIu`@_θJbVd.gyi%ktk ]_lpMnifxihtxkHynt0zqf{sW|vE~dx02{XtQku_mvyoNweq8xPs0ryTue zuw U{xD}[{#/=z}["ermrPsstuAuv}wwpx&y=cyazTxz| C_|U}.S~[Dpyrznsv{Dt|| u|oOv}bxE~gSyLB;{Os-u}?!J*Ϩ%op:rs sXzDtmuՂ`w-ZQxA&zPD,|- †mqoSprIRx4sktن^v2oPwK?y=a+z؇W }lnK^pqiv r3isf\uRN$v=x )yM |*kΗ_m|0Ho:p>t qgs+zZty8L\u6<3w'(wzegVk:=l❧0n}oqq8erwXs:Jpt:Eu %vAxjln={ioopecnq=Vs :H't7tƘ5"Zt3cI|#jɱ-lUDmYyso%mpIa~q_eTrg9F#s85srC~i{c|fc|i2r|kz}VnJnz}pa{~sIRmuBx-G{ yyjz;l znȄ{{py:| rl|t`}uvQi~cx@z,F} أwqaxrގ-yltnzuwzw6k\{x^|azP#}\{?~}}+Q` U ~v"xPwy59xz( x{uy{iz^|]{F}N|N~>}**hD: 'φRotJuTv >w_tx\hy</Mr{E=|)~0 ākjHs_Sty(8u}1vrw\f-xAYy5KzD;{ '|ׇ 7rFxszÆt{udpvd)wg,WxSIyMd:8z`{%{E/}qݎ{rs钁yt֑Unu*bEvUwx)H*x]|8yDQ#y{Ӄp𜀌frۂsJ6wt1lu `UuwTvFFw}!6x,!wY|p4qrztsĞxit{^/uLQvDv4&w7v s=N~peh(qz}rzss`h t\LtġPue-B u؟1ust <yc?f>)h_%kit6mhfpe\ZrNR/u>~x]*c{ Љ-:~jfAlbn=}p)rr"g%:tZv*M%xH=Iz)V} ;t}Tp{}q~s{~iuq>~vxewYyK{-<}=(Ty օ{w|Aw|yz"}#yo}|zd }{X~n} Jh~E:'^^W -U̖zX}z~{~~xa{m|Obw|ʀ!V}YI~ 9~&wJ y&HyȄIzrRvgzTk{R_`{τvT|]Go}8S}ޅ$~ˁExxӊ~yt^ziz{F^zR{wE| 6|*"}Vslw^ x4|xȐKryyBehy\z#Q*zC{4{ {/}%ЎVvǙmwvzx+pxnf'y"ZynOQyՑBz8l2zQy\e4v_/gwzxwȝnix0(d xXxؙ*M7y&?ya0wya |x v$fvɧvwrlwˣb4x WxNCK^x.=x.=xGrv .ccf+.hx k2mׅ=mbpVrI!uG:xx@& { QYi؄~k}^mve/ol=qa'sUuHNw9Dz%Ӆ}@zo q7~rttJju_wRT>xGz8} $̄߀:7euʆ4v|큶wsyiz^({0Rˁ|hE‚}6#у8C|d]|{+{}GqRy}glp~\6Q\Dy5߁_"悩0DUnHy7woj|evZfOB`4Vtv!0Oms~ }~]|w;~Cmt~ c~X~M~·A2Q 逃}dw~}uZ}؎)k}a}ڌW3}kL}?c~0~3~8~l|ɖn|}asr};[i}?V_}1]U`}0JF}-=}/.}|_|\zz|qZ|՛/g|̙]|ST|H7||;^|X,p{zr|x|JUo|{e|d.\|1Q| Ff{ٞM9m{*0z霆xԎ.cË|f*yhppkfpm\SoQ>yrxDyOu5x," |oiQkVx]empnoXe^Fw4Ç}z}!~JĈAnhpvr.mSscu5YvN\xBAzt3u| )}vt}Futw k_x(bRyMX zMFE{@˅4}e2l,ȇv;nzx{ {=sS|j7|`˄}Vn~_K0Q?)1ui<pn ԅRizqt9h?A^́TڃziJ9:=+/V\=ʄ+_px7soچfYs~]SHi^<29./:atN~vO_vm!d[X;`QE%F:O,!(} {tnĒk|b‚UYOz.'Dɏ8rT*HW{rpUi`W Mu8Bހ6(~{}y#Llp#h^*UKTAp4~ѝ%}~S|= ecyFf.q%hhŏ j_m*wl0w9oϊ:jgƉv_.VMjB*7K)ZTʌTv?Hm~f ]uىT҆KNAL`5Ɗ(Jw It@l4dE[98S EIr?3˃&CAr]9djJtbQ YkQG֔=x1#x3ԉpޞh`@XJXOU\Gw dpe|f@hh`͔djXlOCo^EnUq9яt,ZAw]|@\+vhn#jgl_v-nzW;pdMsrnDAIt8}w"+A0z<_ uTmmo+f5jp^rKUsLƏ`uC@w7wy*3!|isrlsdAu \vJTxwKsDyAލ*z6vf|)%A~aqwjxc8(yz[7zpS+_{uJ%-|@}5SX(# .)pR|hڑ}ka<~Y~Qw{HFQ?+X3NJe&RΊĀnđg6q_ʏuWŎ;OF>=?e 2n$E~nm?e^#VfN'E ̈~;0]#-afkMcяi\r#NTjˍ%LMaCN%I9ˈ.鏡!' !i;0q3{tx&eww}.߀lShegj^lbW n4OfEpFr= tX2sv%]z.рkmdn]^p>UїqN7)s`Eu<w1uyl$^|Di|qbr[t@TyuLvD`zx_;Tz0^|1#]yH؅h:cv@aYwKZxcS(ynKzC'k{:)}>/K&"hm'-kFxfb{_Ԙ{Y |Q}J~[A^8-Ǐl mƉ~eT|^PWl6O/HYe[?ېՃ'6ڏ\=, 5'x yc`\U=NYFF>;&E52B*bpTo 5b-![-iTKL4El<3n (\O`!YR9Js C0F:1^g&< wVI_DW񕒗P՗IQ A*8׎|/֚$-mvJZzbϨ:d\yfVQehoOV jvHQl@-n7zqV,ҙbt% w ~78ah[hjIUEkNImG>o?&q6s+Kvz K`lZFXnT'oM3qF1qr>(mt~5v*:y$| XY }_UpY 8qRsIKtE[u=Yw4|yn)*{1P Vπ^ ntWơ#uQwJƜxpؚhrjt7 lutowUfq]xW5sz[Ev5{/x} ~m_aw%d8xfy%iz4kz{ rm{e>p |Ur}Du~.w |V!_&rb[veΊg~lj iqVlocn T~qUWCrs.2v\ {u˫]"4`džɔcrf@ |XhхoZkCamKRp1Arń,u( yۅP\r1_k&[bMe!+z)gGm@j7s_lPo@?qZ*sSr x<R[kU^\7ag$:dx fkHi5]kUO$n>p?(qIvƄp Z]`bc8Pveޗ:iEhTI[jÓeM=l Ń~Bk?fϡNli4nkpm~qpJq7serucu-tTwvCTydy-|{h hnY:jplqEnxs|fpEu6orvbUtxgSAvyB1xE{,z} /HfuhwjxXly'znz`r|KQt}VAw"~+y l~d}g~ i[~{kc~xmnilVoq_HqWPs@vo+*xer R}Acc1/eg]jvl8jcnG]opdNry>t̄)vޅM {ˡaߖd@f֋E/itk*hSm>U[so[MqjLzp{)|} ܂Q$kt̕muoHw px4trZy^hszz\Fu{MwK|=yK~H({ WYj|k|0m}.~8oV}s.p~Yg@r~ZtOLvDgQnIxwn_dxbQxea~yh-szMkh{*m[|'pM}asV=rvI(|yiZ5u+fvhrwj}wm rGxohfyqZSzsLE|rpiedka^ulݣ_kn~aoMVtpk3Jqy=Rr?-rxpr|z_t|bIF}=e's9ށiv"%yzш,zWeÉzh{zjyva| ll,|na}Qq-Ua~sG~u8Cx$i{_zqxflym~yotzq{j{CsA_|uT|vF}x7{#"}僶vr,wks|xJuryvbhyw^ zyR{zgEp|{6b}}"ۀEkčtxIuy{vzq>w{pgYx|L\ys}(Q3zl~D*{#5K|ـ}!~6su?t}yu=oKvwevwaZxOpOzyIBzZ3{ }Dir,-;sN wtxmGunc}v]XwIMx9@y5M2 zE{;~JՇbq9~-rUusxketpraudWvLKw2S?xZ0`x y 0Qpo/|+q7srDi{sZ_tzU/ujJv@)=Gw.vwvڐ32oڛz plpr#gbr]sՖS#tH u^;u,v7tՏKotxpOoqerj+[s.QXs朻F }K/~2]Rzi€Gwxxoy`2fyQ]pzp}SLzH{bbre)iԆVg`jnVmLo?Cr1ZucyqUfe;y3g|qLihOk_En4UCprJr>luT02x= {#ŀH |7=|4;1|!#{ϕ@4{`q{6Di {cLa{kX{O{FM{y<#{^/{!b!8zrv zzz-_rubpjebgZj1PlF~o:rv,ˊ̓O2„%- nifӃG_^WE8OZsFQnt30wC%zN׎+Vրl`nqeLo^b(qjVNrO wtFRv*=:w1يz$N|")jōshct\uULw M;xXEy;Љ{?0}#|3ibxbyl[.z^S{PK+|TC_}n:6~/(f!#?gO}`f~^YmQ׉ J6?vAR8qg-j 62 eaX^WÈ P.&mH]?톴6Ɔv+1m ŇCc/\މ0ފG534)넨Wu=ǃb-[ tj,v!z( /rb'm}\`oUqpNؒ1r&Gs?ou{6wf+ˎy| ԐaurZs]T7tM}vF[wb>.x5tz*t| 6_铳vY^nwR&xKz D{-<|p3ߌ})&gY Ӌ^l{W̑r|QL:}gJ.~;C :׌02'csGt Džq\V*{O]H6Ab ^91E0m)%TLkӄW[oTʆN#Fv?I7xF.VS#Ӊ=^H*YrSwRЏ+LHE΍I=̋5,!{C,lWʏ˓Q0%JoWCw8<3ƉҖX*mٕ@y\*`VGbPӞgdJ'gClis;^k3n(]jq6 u6{}[ldrUvfcOhZILj^BNls:w%n2 q&'e@s2w_, ~ӀZ<]hlTJj$NkG mA8_o9pq1s&uv_6yۀX lzRHnM3oFq)?-r8?t/v%cy4t|ƒ6WpQ qKTs\EXt>v;7 w.˓dy$Q|:KׄV7uP;v3JbMw]CЖx=-y5}{E-8u}"ő]?xTyNЙ zHЗl{B.|;}=}3Ò~+n  G茍ST~MB20GO@9u2 !)84.HyQԙ KxE•䄱?UZ8=00fll'=_BqրPRgAJ ܉DMC=?6Z.k%ŏ юC TFNԏHOBzƐk;.A4,#܎ѕ peZREgY]•i(a`-kd}?lhpbnkbqnBSsoqBjvKt ,yvK!z^bb"*ddޓfgQijO{xk4lnmiogasoqR_r4tDABuv+Kx5xka| _ib7ldn$ogpyirm&ks`nmuQpw@&syl*v{+}~u]-qΙ_s#bte5uwgw1k}jhxr^{myOoz?r|J)u\}|8%Zy]zU`{cj{v7f7|ih}+\k}NsnV~>q=>) szӁAXk}[с^aށt7dŁgg[4jKLm>iIhhS}uV+Yĥ_u>\j/_^Jb"bQdpCf!3,gњf=iZ kw]hlamndwpgklqj^snOup?xjs)1{v{硦g)ahd~jgtNljvnllipVo]r^qN~tt=w$v(Rz0x}vd}i[fkhhmjot_lqhNnsd[quRM=sTw1~;Xb~e~d~gb~si{4ik^umRoE5qŁ5t!;uH/|'Ia(0c{eqh)gjP\l^PnnCtpr4 r{U;s~[_⌂pbCyd:of䊥eiZk(Om83Ao$2vp5Lq ^ܔZa9wcmeҐchXj MNl@mڍ0oSn^+-`]ubke{ag Vi KGj=l\.Imfl]U}&_psb3id=_f<#UhI~i嚛< kx|s0z:~6|Zq=)mUzyyn{TppG|gq|^{s}nTHtX~,Iu=w&.x,zY2k0w|mT_nnep\\qĂ*RjsGto;Luă,w"Ywo~juwllm}co SZp7Pq.Fs.F9tf+2u9u| is~k ;klbnXozNpČ=DKq 7sH)Qsۍt hyh2qhjA>hkӔT_m0}VnLo,BKp֑5qU&rrwh4otigk^'lbUmKn@o3pc$p%|q|[W{.}@^Mr}a]i~dA`Y~~g:V#jKcm$>p0r6s]U5v za,yo{#cq{fDh|Jh^|k-T}mJ!~up==wr/JuCxxtgwy(iolyk4ftzm4]m{hoBSo|8qMH}su<~*u..xC;"{^~7vlluwEnmx%p;dxq[ys}Rzu#G{v;X|x-~4z>}|Strtut&kvzudchoXjO]mUDo8r*̓uyw}f}o~Ihh4~j_ lW@xnMpCs7āVuT)xz{v|ln=|{mf|or^+}qqU}rL`~tBn&vV6xM(-z~NtHz=qlzrd{YtW\{uTV|svK}xXA*}y5k~{p'})MrdxwjjyEx\cyyZZzzKR{{IIZ{|P?|l}v3}<~&~Mipw1}?hw}a)x~tXyG PyGzi={(H2-{܂u$c|}~ _nucfv_^wpW8xOxhEyV<#yn0z"{ |-Ylte u]veUnw }M>wDx7:ex$.y)R yc zjtctΐ)[uStvKGvnB$w"8hw!,wǑBw ay/Xhsma9tUYtQuFRIu@iv b6vj*vpkuYxr[k1g^cac[ӆdSfJi@̆l5#Vo'Xrvq `icDbmjeZlShR]DjzIDRl?o4r8&<8uPyÀodehg`惼jXlQ n'H pA>}1r2t%)w{mk(fj l_InWw2p@ONrFs=;u1ƃ]w$kzs߇~kLpldŀkq]s-UtN4vE`w{;jy0z#}I,j,~ub~v[)wT?VyLz#C{P:c|/~9! hs}f{Ha8}|Z}|Rm~"}J~V~bA~I8~݀`-bF~ Wf|4_e|yXb|P|iH}1@E}k6}x+}(~H /d{'*]{oDV{mN{G?| >|OZ5=|x,)|)| }pbzJ[zTzԍMzEP{<{663={EJ'{=zב@|)`yYyҔ|Rz9KUz (Cz*Z:z1#1xz#%yjyzi\bȍ^\saXTcMhfDeit;!l_/֋/oY"=tr Lvh)`a`ZcZebSK_gKƉjC,l:o.q!&u Ǝ(yfel_≨gjYO8irQkwJmARo8Bq-tr w} |e jj@^SkWŇmPyXogI q6@s7u,7wJ;z, Xcjo(\ĆwpVE'rO szGąu?fv6sxU+nzR} 0aPt2[uUTvM[wFXx=DŽ=zK4݄:{)愂}Sz ]`yPY_z3R̃{#Kh|DR3} <~$3 t()6JDŽ.^?~WiQ y IIBj:XN1p}&v3 \z̈́U⁢OhvCH6C@ 78/5$瀟kzZTŠM+FNR|? 6̌-"lJ~퍔qX׀;RGKÑDv=Q4~ɓ+~h f}}p~`]O\BZR^SӒYa[L֑~cEʐf=i24l)oTrTpUx#^`XbReKg`DBi`d8 Ċ80='Dq 'PxhOJDΎD&0=R6Z.EE%h. ڂVe\nPV^K$a,Dc>1f!6th. k#5FnrOOqyU`KOmbsI旀dCXf= Ai 5\ek-n"4pCt T|SSۘ}d=N3Cf.Hh%BYj&;l64Mn`,p!;sPCvp~RhJLjG[kA m:oy3qq*ؑ,s `vEy~oQ$ltK\mF;o?.q-9]*r1אht)vy W|6O'pIr#Dps>#t7Ðvk0=Hx ( yj|U9NHu 0J?( bڌG~UAdj<r05yI.{'$]jْˉXxaU\cYe\ng`zt+i{dgkge[+mjLpcm;sip%wsgtxmr^]``ccB}eMfr|ghfjikYl\nnKQnq:qs%uSu~zv4[Cd]g`i{ckpemdh;pXpjr?J mtJ9p|vk$Xsx?}|]X lc[n^!oy`qro cscWfxtViCv:Hl w8nyU#qz{~#U>t X|u"[vFx(^wMmqaxYadyVUgzZGj}{P7mz|V#p%}]Fz?”jR{yVD|&Y|v#\}$k`}_c~Sf ~Fh6Yk!mҀZz9PTPTU.~X! t[^i^^"aRdDpgX4i j~O &R]||Vr*Yщ+g]\e`PxcBeʇ%3LhhT M QizzU3p=Xe[nZ^ÍlNa}A7d91f"jf}LPo@xTT6n*Wu@cZX]fL`N-?AbM/[cӑF;dUQL[OfvpSPslZVb"YV\hK=^=`-aa}cutfUĎZgY[]iJ]yj`nld c/nsgLVpyjHrm8sup"y8syHb\Pd_xfc whemHjhalkhUnn+Gqap7`t!s{"wqu^{"_dDNbfddiv2fkIkhm`CkoT?mqF[os6Yrv7!$~}g\k?_]mP~botcdpj fr{^i^tRkuE!nhw[5Rqy sz?}L Yr2\t|_uLrbtvjhmew]?gxQ{j9yClz4Yo|r}dX| Wz- Zzz]{sp`| fc\|[}e}EOh}Bkk<~2mLYot~.rU}X́x\*n_da΁YdyNg!"@ia1gkflބ(*SW/svZl]qb`JDWbLqe?7h/jjCRm}U؏tY6j\`^V(a8Jd5=fk.)hD`hQ@{TܖrX;h[q^]˓m}/p~qZl{]Pr`Fi)bĀS_e5UgIiׁM=l-no?u[X͆y|[p^SgNa1]cSYfHWhQ;zjc,mlxm;9BWtwxZ[ln]Oen_֌[bN{QdFfڊ9hu*i$k~VvuYYZl\Jcc^ZaOcJDeaC7f3(_gSj+|Us`Xij[[a]XE_uMb xCc5eGE&ReiϊnVcoYwp]Cmr`csJcY9tfMv9j5@xmN1tzmp~ s{|k\~m_unbl-pe_b}qwh!WsjLtm?vp90`xs|2u~rhca|jet l[hjmjPaolVqanKvs5q>{u#sA/VwYuzMx$ f'izh$kr>j-mhloY_mq%U orJ.qt=Ssv}.Nuxx_zcpyeqphsAgKj t^luSmw)Hox<3qy-Tt-{gvv}katw/wcx nf1xekhEy\f1g"f" QlT?sVytYpt]Mgu`t^YvcT xfI.yViEtt9w9vd|njf|fVh}]j}Ulx~>KXn~Ao5qO~&ruEftclre'd{gX[i,S@j2Ilu?}n*3oo%psramjc̉"beZg̈QuixGk#k=l1mЉ(#CnY r=p`h|b`dڏ`XfOzh>oEi6;kJ/k2 k Cp㇝nt_Mfa—Y^cҖsVNezMg D8h_:i-jXi6 8pj<zwVrOxxZ j2y*]_ajy`oXzcN{~fDO|i8}l)p1s1xu\pv _rhwb;_wdW.xgMryj!C){l7|to(~Lr"uwvrbnsdgtg^vviQUwkL9xHmByp5zrw'|u"wup&h`m&qj5e[rl\tmTkuPoJvq@ws4yUu&{ w4~zs.mnCkdo^ocpq6[jr7rS st#Itu?v8w.3wx%yfzZ|`}q;kt'tz2Xu|9$Ew}}zmobizNgkz_m}{Wn|OO|pT}F>q}H}i>(~rl2WoK$>urFR9u}oFwbgxd\`DyyfX+zBhP{kF{mV=|o1Q~!r#5t}-x5mungfvqiz^w}kgVxcm?NyHo$EzjWc_Z\Q@]Ti`bLcSCǂf=:6iE.lK o hs;h\a_4ZEaS6dTKmfBgiv9 l)-nq 0ugX}Ma`R}cYo~Tf$Q~hSJ(AjAjl8o(,qCtg ?xe{"f^{hW|gjP^|lxH}nf@(~"pW6~rc+tw -|cyl]ymV\zo-N{"pG{{rc>|lt5}1u*o~8wz g~b%w/qP[QwrTxsMAyzu%Ezvz=Szw42{yT(|{}}^̀u`du|vYv]wRwExKswyD xz;yL{2vy}'Az~\{b=~8^{s|fWt} Qu}Iv}~fBZw(!9w0xl%yyp|Ã@\rSUswOQtnHu }@u80vT/vօ#w1wr'C{A4ZqYSrHM_s9 Fs؉N>t^6Btъr-u#!u):ul}XpeR,qBKrDgr=s04sc;+Ws~)st8b&W[lZUR]Mч3`IF|c!=7t`^\Z%a_SjaLldE~+e| _}2G}suTxNykmH{y AzC:zf2wz̃^){{6qP{8 RwLx;TFx?x[8y%0yH*'yP ;y'` zXYQvJw*Dw'=wȍ6wَ.wא'%w0*w xYX5SeGZM[]F`9?9b7 e.Ih#zMkv)naǏuX\iR`^L aKEKc>uf%6kh-kC"umvpcxV`PbJReD g==Fip5Ok,Kn!w:psQ{wU*eO)gIKhBfj;Jl4an+wq _sTv'~SiMkMGmATn:p~2مrI*Kt7IvZyE\rQ7nBL 2oF<1q7?$r9t51?_8b0ܑe?([h j[m'xNNؒ\.IY^Cv`=c.7c[e/h'G1jbm# pE{*My`H Yb7BdZi4"k-fm% ,pHrm jv!ӀJahPEVj@gk9m3oQ,(fq.#֋s0ƌul I)yI)lCQn>qo8O{q52 r*t"12vk2x }yGEpBr>H{9N |3 },Ćs~%$JeI8„˃Bn<'7L1*4s#qO(ׄ> Ă@`/:ą5Έ/NoL("!@ тN]fJ]PIs_|T,a6X7uAc#[je__ gOcURifDl^j:4oms8owYWЇl\[}^7^ls`a~ibd]e^gQgjCjml3mp;,prZxV*_LlXa|[Cdq]gg`i\ScjlP|f@nnBip2ksntzRfƃQUhhz XYjp [Ple^VnZaLpOdKriAg3t41jv lw||^iOnA2R8oxUwqn>Xr{dF[sYP_#u1MbCv@geEw0h,y_jz3(}KuOuvvSwflKVnxcN{/e|ih}HI=}.|M }gsP}jSTo}`W~UU[A~J^|=vaU~.2cf\G8zKkqN7h~R{ ^VTKYhI\<_Y,a(dE/xIOpM(fPŊG]-T_RWGZۈ:]JS+$^WncOdD.vGnKǑdO[[XRPVEX<8Z) Zgkb`}IC(,tFԚlIJ=cN YQzObTYD`W:y7&XS'(Xy1daP1c:TydXoofh\eh!_Zj"cHNlQfA1nj1aqm]uoygc^WՁ#_[xa^KncaWd edrY'h2gcMjj`@m&m30eop sHr@{9CZd^*\av0^dqt|%Vf.})Yvh)tM\&j2j^l&aa{n(Vdd)p Kfq=is.l:uo w_~SmZ{$VqnrtYhpNi \Kq__5s3Tb tIdvH>km;Dmp+prst[Fe}w]g~n`iefb_k\&dmQg,oGiq~:.lsl+nur rw5}XlSuZml]Zogc_pZbrtPesEguo9j$v*lxq\pdy{]UAs#sXt*jZu8a]vCX`pwWNcxaDWeyv7hz(j2{n}IyTRzqUzhX{`[{W,^n|w6PoSgV^PY@Ux\smK_A4a4cr%d`kdu1N‡m"QЇe1Tb\WćSZI];?_3,as $-aň)j)?sML[kP[c)Sl ZV6tQXH'[e=]]1@^!^5 lqLJi*O =a\R9XTSP9WVFY<3[/\o\h of~iQvNjU"mkXdmJ\7[:n_Pp?cF rfm9Jt:i*Qvl{1o}|fQWtxg[liF^!cja YldOnWfDpSi8Br{l)Qtoy"qizc^_rd`jjfcazh{eXsjghlNqlljCnmI7Epo([s r;(w6tTx_dpafhch_fjW h6lM+j^nBlp6ScvkJYfxfw|2Jhi}#i~_p6SpUQiX La]ZX][Py_-Fb5Hopo22qr{#stxwpYapjOhc~ka!emXgoa_4bĊb(c;!dЍvdUp7]?WVZN[E]ܐ><_aV30`u ''`@c\)1xprRpirUaHsYXt\JP]u_FvbnbVp:eMqgDsBi:tld.vn xqp }trkii1ccje\lVgTmiLokClq0m9ro-tqvt7 D{woif]iTbBhk[ilS9kngKFm[pBIoq8ps,ruItPw% zzgco5`lepYLgqQips%Ik@t@lu76nwF+pLxOqzs ^x2~9eaWu'^cjv WmevOgcwGi9x>jy5l{)m|cn~7vOc_A{T\aY{Ucv|`Me[|F%g5}=Wh~V3j_2(dkkk&lZgu.Ta]fZ_}SaL+csJDee@;f΃23h&hŅAjSw̓G_[Ј\X]؈AQ_ވ1J6a6BqcLV9d0;ey$eehьBz^Z_W\S9P ^BH~_鎰@am7b.{c,V"bTgύk}ivRb&wTUZwYERx\dJy_Azb7{e,2}hk *o}gsX*`tZYxu]Qv`IwcN@xf6zh+={k~nhr3f:p]|_ r_Ws'bfP;tSdHfug)?vi5xKk*Pynn{p递u-dsn#b]`omdVlpgNr iGsek0>Ytm>4v@o^)Uwq~ysX~xvbkuh][ljTnVkMnomEq6o\=6rq3t#r(autwdv}{`hmYjoRS+lpKmr%D?os;pu2mrv&sex tz{:~_fsX+hRtQUjuIkvBvmw9nx0ozD%Op{ri}Zy_ ]#dyrVOfBz$OhzH:i{@k|d8Glq}F/m~S#nqUpczʂ[>bTyddMf OFzg? iH6j[-bk^!k[n· }%$YJa RbKdbMDeΆ= g4h$+ihʈhmFWl_~Pa!JbBd ;me6?2e)f7f lub{S1[)|V@Tm|tY\L|\aEY}_q<~cbr3%e'&h|kc-xp#`xX3YylZSz]Kz`RD!{c;{|e2&}hp&Bk#mZs^v],X5v_QwaJUxdLByf:fzi 10{kx%}Xmp[4_v_]6smb=VtgdJP$uff`HvkhmAw{j9p}Lsāy[pg^U qi!Ns jGt(l@juLn8vtpL/wr+#yt { v]|kYnvlSLonLpoErq>s5r6t]t-uu"j<7k0n/k_&wl/lEc ^q]PodKJ+f;iCg=hs 6 i<-i$i~j1 kp ZQSSVMDYoF\X?_M7.b6.e-"n7hgjV#q`X~5X6R~ZLw~]yEyp`>\b6eM-g!yJjrYm tWO{\Q|2_&K|aD,}[c=,~ f)4~h, j UmGowUyaOycIzneB{&g;{i3|k*}n6p2r~W(zTvfQNwbhH1x!iA}xk:ym2zos){q^}sJ]ut}MRUt]k8L[u,lFunV?vo9wqz1xs(Qytzv},yJPr=p8JsqDtr> tt7Guuo/Ovv&wsx_=xFz@ {}Np'uHqvBr w<]rx5sy-tz$uE|Qu~o y=Ln@{Go7{A:p,|:q}e3q~P+rvo#rsO wJlEms?>n^88o1o)p$#!p#%>q3JvfIjwC?k=}lf6mH'08mÊ;(2mی1mPo6u3RTSLkVFY@\W9C_+11`a(G7d'gm [MjxuPX-K7ZEVZ]L>„_8 b]0 d'6ig|>i lxBOu\rI^D:a=cZ6߃e.g&.jEKl 4ol{8MW`H1bBd<'rg5i-k/%mKz/o_ *rx}LJ}e2F}dgA4}h:~Ej4X~l,n#{p~irl uJziE{Bkn?{m91|Cn2|p`*}r "J~rsu byHxntCOyBo=yqT7bzer0zt&)!{u s|nwJ}dyV r~GvslAw\t<wu5xv//y&x2'hyyzT{-{E}}E4tx?uy:1vz3v{-cwB|%w~ w#yHY{惞C,r~7=s8t51t+Yu3A#u^u#nwOszOUANq ;qE6Hri"0r݇;)s1!s r u|>I"T DgV?;Ys9 f\!2k^*a"8d4 f~֑+jycHVWCZo=a\7Ŋc_[1za)ŠdI!f3h@l|.G[AÈu^+<^`m6ob0Ld(g* iaKkfo~ES_@pFb;E@d56]f/h1'[j:lDՊ-n3(sDTd!? e9g3Ai-{k&mn|oVqAvBhY=ii8? k29YmO, o$o7pʄ)r2vtuz@l; n6jOo0`q*,r"~t-ւNum$x{h~c>~q$9~Drn4~s.~u(cBvt wZy ΁}'`<|Lu7|w2|xI,}y}&~}}z}|b~~ ~ Հ:zq{:5z|Z0z}*{+~$I{~Y{e~{ |8xSF3xS.y(yM"My|y8iyD{mft2 -Ge % M u EtHHt !"$,%Z&'(*+E,s-.0132e345728]9:;=>;?i@ABD"EPFzGHIKLCMjNOPRS&TKUjVWXYZ\]*^F_b`abcdf g&hAi]jyklmnp q-rMsntuvwxy{ |"}9~Phʄ*AXoĐؑ.<=<:852/+'# ׮ϯǰo]K9'ǼȪɗʄp\H3ҵӒnI#تـT'ݘg5e0[%k&V7Yy.Pw/P^X"7Ni * Jl.[8^!"+#V$%&())*S+~,-/011a23467;8e9:;=>J?z@ABD!EGFlGHIKL$MGNjOPQRSUV5WRXoYZ[\^ _%`>aXbrcdefgij;k[l|mnoprst5uPvkwxyz|}"~Ca{˄8Rmӏ,9FR]hr{|wroljiijkmosvspmkihfeeeeeeeefeedb`]O?.ժ֏rS3ܟuJZ&Br,T t(=KT\ fnf>j#6Ld~  5RpAa / S!x"#$&'#(E)g*+,-/0>1`23457889]:;<=?@A:BUCqDEFGHJ K#L:MPNgO}PQRSTVWX3YDZU[f\x]^_`abdef5gKhcizjklmnpq0rLsituvwxz{2|O}l~Á6Rm֌2G\oəٚ $'+/38=BGMSZ`gnu|“ÚĢŪƬǧȢɜʖˏ̆}sgZL=+بٍqS4ߩS!K_!_Mt*Jf8T[:i&8Ng *@Vl $<T m!"#$%&().*E+\,s-./0124 5"687M8c9x:;<=>?A BC4DHE\FpGHIJKLMOPQ-R@SRTeUwVWXYZ[\^ _`.a@bRcdduefghijkmno"p3qCrTsdttuvwxyz{|},:IWftȍ֎ $0=_u{|;n`S7Tҽb5%bŪ=җ#-x{+Sam@\_:RZ⁨5bI /M]ׇVy1 k~^m~VQ~ᯃp T%=}vC9Ywx~j~đ/]5~P~賋}s슒}AK~3z6~̇5N\Abrtc]wUVƒS΄^o2K""Ճo$q?cOeU\V'.aDZ쉪CTGq b{KUagsԛ{zZjb` bٚ҄K˃҈~0p^Ib(Ufᡉو"ؕ<ޒyސ/j싘V}o1bBUj9JʈϢ.󇷞%|ry뎒|EPnljqt>7h\Q{섺̺(֍ϋP]_"aG}~L5rhfō[GP*_ 24t]W|pςyey Z}bP!DC{őJ||i})f}œHh~~ŊvPzh]҄Sςʄ5v➌̍5VF}rÇ{hM]pHSw`Yy_R<ݒqR |qMLg'\S|k7Qn5M1-UCwz-`p*ދf[񃋆R%[Jǘ5ޜߙbS⃄Sy!ʏnwe:[?QF .&NPӡyڑΝ\=rwqmUcڋZPo h!ϡ^ӎϘ{{)|}"m}|~rBg]"`RfŻ6.]:ݛG1S:a;'{" qm?g_W\R؄ᢡ I~gzDpVf{Ⴭ\g6R̃$"ˆq&ޑ 7yoɋ8ef\ʄRGP7\\ԡJB&njؓIxڍneX[˅e!RxΡĪԓ,S&@wmފ>d~[R"w[pڔJK͐ev#.lΊ#c1Z9}_Q?t靜l& G|~WPtԌ=@kebDYePq[c@{_ 㚪Ē@|spBj>0azDEXzvOu陓[ߞZ{9ɖqӋJh`>W\AOͮ6]ԣ?&՘pǍܡ胜 yɎpmI0g\U^ą!Vd`NYرzԧ{N~{̔ŝ|YJ|}x*T~nudb [2hQτۃ簢wȦΥGĝ@Ҋ逇Z>w6mF`dUׂ4Z⇜Q̄vㄫ.O[`IizvN+l󍻂c̊SUZ&QɄAhhw+ǟΆ̇х~V*]uNl*.cCӄsZQeQƃi:~ABۛGOzC}:tSkf4bÉZZPQÃkgg!受wߍ΅ό{{s" jd*a㆘Yp܅Q<§9-ᖷ~ 8qzqݏiHCarXd!PjmYHB_biiH_yQWPph?L`6WׄOƧ@ȔOD\۔xonSg_-V"OӦ}5_H7u].КWyvʔmet]·8qUNpߥ <wlz~%=u36l_dq1\ڋAUMÄXm{Px{䦷{,|`|{ڙL}s\ ~jb Y@vPυImyϦx|zܘr}gyi]6a]YPՄ37"cƥfՂt;WyGqɂXi@ǂa ҃)XÈPڄ[yڇΆנ8܁T!xUp*Jh1+`L1XPP߄*Fo^E;;wۖoג;g֎`%΅/XW?PلmIT܍ڇ4?v7WnŒ f_rR,WdžDžfPianØ$gDڏ^}ƚYuNjme񍦈w^݇!WLOքʠ2T񨒗Hs|tial&e7]։oVNنdNU؞ҕ!qQz{ntsA kō`cϋ \UiN[䝰ѣYeS:zE,qȒ j5nbjN[T:MӁ}aɓ" kX'{xpǔ i"asZ.mSM^$<|!4j|Mz|w|}֡},v}ng~f?^܎W*!O兯% pی|u#m1me򒕁,^wV(OINٵjh؃As|tP@l薃ea^rVԉPtүxΩĆƤV{ esf.lՃd‘P]VCP U􊟉/Tԣ6zrQkI/d'5]__V;P>s$Aܨˣyy 4qWpj]ac`'\ŋۅV AOĄΘΓʐ0ЇըWxpڊ{ijb\ ]U^>N6ܗ׏mۨ~ˢw Rrohvha/[_釁TƆ'NQy׎ɘԧɖ}Ǣhkv n ag='`׎Š ZvCTPM‚?dU|?3t m|Rf~卮_Z?YZSԆMDׄ@ϭ ]{s꜎Ple^BXWRKh7L؁}PF}g\}CR}~}Cw1}zpCD~i~b[ؐN2U2%O B}ʋYwu}Mvoonhab!ρ$[U5O"huՄ1փs˯|=unמhKHaT[G UO7GA_4 {̩,tߣWn gza!nZtT퉞7OJiƂORn{~Zt SmF+fՅ`DŽZ焥Tى-O[̐ʺBŋYz.s3lsf3_,ZwȦ[p͠jcՕ]א/|݇w}u~~&t_ydUvك>y*zG$z{,|4P|؊} ~/sj~#d8UwxOyoz4jSz{|EX|3 }r~cIUxtqyyƜ}%́px)k^OR߀!4g߃zܢЪ^=NV]ovÀ[jj)^ 臻QX ضӨiy!l%me7♵cu= i nj\uQ)Tx+3 .k9Be4Ý/sjɒgvz[:&Pt~\KDi.8N J^ti~mqf6Z~O~xy1z8{tf|e_}Yo}~_{*lm℟`ЃÁT9:FX識-ۈQFz8}m*! `cNT)8҉KAŘӉ1_eJe+jyQl|_ރvTwՋRƷYgІ͈NIӇZކrx^kЃ2_uIT .׵iiߨSO=XGЄW3wsk.ÆS_ESkNuX`޳/ΐN@ԎJv-j8S^S[˗g"ұšdIx(owE~pti]2Rb2ɷnټ دƇ,[΅) | shHh s\ȇ[QQ튖ʭ}]9nݗ}kѓ|qf΁'[iPm"],dDߟ{ p4qe5ԌZ_PNUlŷCC˯ZNnQͣkyXunc7cҀYOĉ>On~>xFxy짏 zۛȌ>{׏Ċ|ރވ}w$kxi_sSFɴ~e ~~W:Nptvj…_.S͂߃O0"SE\aᤂH+v u׆}j1^XS}ƅ캃箴È٢_mшSdtil^7TS"0&3ޡd^ފ[\݈@t~ h̄(]܂S΃1r)Ǖ-Oϒן 1n匧}erȅg݃5]R]epyʊєa5,|O0qkfȃD\' QQ݄1k泭nTRCم%zԅp%1eĂ܉[CQeKvަ<_a|lڕyF?nՎ`d~ZI;PLbCE"f Tl|]`wIm"c &Y߈6OxHov{l;ڊ[ߋyCqvu􄰖k4a؍)XO Gwx锆y1zy {x|2}s|~hۇwQ]΅S63E}=Y}٩t~/{~7~ԍv~sh-]cSJlјOŕ ɝboi}qwrBugy\CR郡WCDjjHVj{q]f:\bKۊ4X݂CO[gL|ݑĎqTߚo}7usYi]`׃|EWOz W(ZL:ewˋ{]rh b_(?VŁ`HNUw=cxsm,ynUMz^yl{U^|jzl }p,~~fK[݆R+[|}Ms}~#0~3 ykyoZegl[~Ră3Ɂ&˂xvnjRdч[%:Qcòh};a7YX߅qP%9žu ,y<ֈp鍰h`t߅XC8 PmVۢenƒAщ8*whbo$B`{'>~NՃevT 8nN$fȍ>_%AwWpP,%Έ`S(C}=0)uYemŐf+^„wW:XPSk^&׋Q| t7هl!e;,^CvVOnިkUAwւY0zϗ7s dkdD)]9ʆnU񅝅lN삌Aђ ǔ"X?yю-qLj7c_\xZXUB(NC c)4ԣʀZ=x~pӒjiӌ5b^L$[2T]M,q(̙K~Hw)DSoRhIwa$iZZwSDM,7èFT^@ND鄕:_khp{k tDVmIf}`5ZȆS Mh2Mdʕܣyzh=sClQe@_V5@YITSMٜ>BwNy@r!Tk6\nkޛd]e͖l_ڂYʍK*S߃N^hLDž[dž~wޤޅLqvk#Ge$΄_,1YSm2NHH2}ũw>pjS-db+^#Y/S{넨NḮ@⮴6|v1boŞmiuc]א GXnRcM@8F Ng|*uj.Zg (7a9F:[fV$/P/L(Ї|C]yrҢOlqJfB؎`sxZDNUGNP=~yKȁ=ywXzqxx{y{zİ|q{衞}*|k}~~sFc΀xTvTxq?yDBz 5zҀ9?{y6|vđ=}Q~+jrcfTrlwUxdx.ry>y􅭭z{Ȅ|1}q~jcTtvHvqw:Ɂx7ry+z)`{|T}4q$~ b&T=lucm{vc Ǜwoxpay{bz~g{v |p{}bS~ĄTX]tßWeuМ2zvw_x z:{}|"ot}AWa~ZT$rtO<^uj4Ovw?;xtyz|{;n?|ى`}S'[t>Ou@GFvMBwK?xO 'yQ\zZz{d}m|y_}R?~`tTPuBC>v:gw*?x">yszqy {k|% ^}7Qt~Z4]t:u%voszwJDx)!y /ypw)zj{ގ]2|kP~ _ju.YNu %vwe-x/pKx҂yלSuzh{\|(P%}ƄZvԯhwƵvxz {]L|<}z~pǀbJgT2>~"~~N~~{~~J~? ~ p yaT1v} }J>$}е9}su~1~΋ }~Po[!a{T/3| 7-|gF|Ɗv}!}~}~o|~naT.$F{?O{v| |oͤ:|֌}Q;U}ډ{~onC`T-XfLz3N{ij{{K|ZN|؎}cxzV}'m~`FSmz?WzS{3D{>{|zl}Ox}Uk~9^_~نR~cz- Xz]z+{K V{+|#I|$wk}:yj}֊^~siQuz@bhzBhzӧ{&j{y%U{療|du|퐑iz}G]~2P~-zazȳŵLz{9S{teN{͝ |6t|g}4[}ƈP?~dSϔ{{Cs{$h{I{o{y~| |r|xfh| Z}~O~u؋uh[wuxMHuy@z͖|}J|v~nTa`тSS˂La|ɦT}e}篡~dV~蕕%u{!ꀪm߁P`e܁SႬ􂲃dw؃B1Bukz9blc_kS|"΋-PJ #C׀܆z@҅yBׅl=]_S6JHؐhouOyvA=xTQ6kv_FSǃtc"[Uw -4ՏǍ{ŋcw ܉[jQ^/qR[͖vv̙=yiׁcuvmi]GR ˙ Σ1*Vuk%+7: t=thr4/\TQ0uɸɩ`k,1~훺i~ϗ~~er~ŏng7~ۋ[~Pn&̀c׺2攓~ڟx~|~q ~qe~Zq~O~IλހAg@7~ʣ~{~Qo~@TdD~CYf~T#O/~lgZ^u$*Uvk5Awĩ^yzS{Q|xa~Bk_g8Si̪O{\|g_} a}b~55~܄,mwՀRk2D^SRG\jχ{VᆐB΅т2#r)ق=vσN`jǂ^PS< 7 F$ԇ|(˙cjхAuނÄyiقM^.惟S(Huُ]9x'£wmʊ47ހt>i8ۅh]ԁhS1šY5N%C3VsƈhGg]5Rw0񫬄[׃rBʈ΂YQ}͌rV[g23\$QDAمѩJW,~|#miq sf.[D/PЃ(쩷 fP'iɂ[dzoNd2ZM͇jOh I+"$"\!}b!؎<-x΀ؔjmQ1c|݌ Y$sOM ?|dZn/9!قWwDl b,0X#$N~YAt_uwBaxyތ7{6w|uDK~i$^S ¬zٷnu{p|31|ږ&D}~J׆!tZhᄡ]R킦֌ ً((S$oŃyK%o)ue" d[IdQTr0l4ܐs>ȎfC_Ŋ·|܉+x6nMMdZAQ8\Д_1MdvYm/cZ?˄QJ˱ }giFVGG~و;juukbY^P{PmKy+nЍKɐɋj5 }kՏ1t"2jфaÃ:IX݆!OvPW576.;{rӎiL&`ՉcWtN#𑗧Lev~Ή8zP;q.~2h_PuwVENV:BӬԟlVۛexGoх3Df̓O^sUM_O^'tRݘuv"]x7ڐyIzw[|Zn+}d\{Z'QTOyzeS{6֒{􉗐7|%}v拾~mGctZAtQ:,~٤* Ej_TKu(l Mc(YQ#%cC؄ÖAܙ,7f݃+}ጯtk| br(YVQ ȃט=P]'ݎؐ%ώ9k|sEjb QYC+PsũYŎڕ&QoXۄ[{brjxiއnva=}XPnc^ȑ6ϏzڍHyqeh`RW̃7IOwO@Ӕ_bSvxp.g_uW ÅN!ė1PnIs wKW3n)f#$^s0V3XnN@9-@:nz{T:~x_uNJmsяe%Œ](ȉU4M'OfP2|k nϜ}.twЕ$l0cl\ lTWeM3Єbtuvx'}yj{zss|Gj}aɉd}Xف;P\aU)y^zfz؋˖{q|^z}Kr0~PiՋoa9؀XZPLT o~A~g+~ UTyOqXi `QX@アP<䞽=I^Vq$dVxϏ\pth`Z`+΂WrJP.5"r*VwÎoЌPgɄB_RW P!߃Hsod:S̔%O~/NvqknņfC^ԅWOh@'F і!g}K.u\;τz=Cerԑ kdc]HVOZCxЈƀb@yqanj'cA\/UmdN˄!YiN›`A$̊w֔7p刦ib[ևTN4C9ٓK/}bvnjZosh7Ya-[?T9vqMńOӢ[_|Ηulndg΋ `É=Z>·SMUc⊟9{xؓt=&wm!f^n_TYX\RULt3_њezOsl ueR[^X!Q݃+LRu֌XvÅw~xxyq{jU |c;8~ \?lU?|N,i yzJϣLz}؟/{w%|DpE.}/iR~6bd[؋ЀU 7N_}}ȃ뢀~|f~\vLS~oqBhb 耸[v;TׇNXɐժdj`dӏZ^;X׈1RʅR?LdTƄԒ}3w pyڍ/j{c1]׋`X,R!݅L|uȨ(V| u⚽oXhlbގ͋p\͋/WQRg LI |y{t䚀Nn_AgM5au[ϊV#HgPdK򄓉v!w}ͩ5xUwy:qʟz,kD{`eЖ|_[~4YS{MꅇV-zYHz}V{ v{q|[km}>e8~?_ oY/RSV"2MU}nn}|iw}v?~3p^~jbd9^X㌵S2M#{u|oDiρdt]^4N1zAns䠆nЅ9h2ab]MW֋,R)3MzRVyIy4=sJm+E^g_Նa咆\njpW@vQMeP~ThxcSq Mrt!Uu|vܐ8Qx5 yzzm1|kG`}Ӆ3SXF+prs4uנvuZwё?y5yzl|_ }g$Ri~ڃjpRq̥ksX;t!vwsNxؑwz8j{o^!} Q~upIq+s1AtNuߝvw4xqvy(i{H]|P~pýq̵sTteuۡЍwxi_tSy`h zs[|XP#}ʄ pr+jswæAttuצw 7xC-ryzxfzZ|rO}4%|4r~|t|uֲb}\wg:}y~Bzb~| ||}rn1~`܀ES@zy{Yzн{{|h||}Sc}~2~6~{~m`mnGSv=Xyb)z:s&z灈{%|! |ӁÈ}z~\m.+`ASjׂkhxyDy8JzRPz{_ |!o|y}̄Fl}~_2S`xvw(exW}y-)yɞzg5{w|Xx}@k~9A_J*SV wvԗrdw7wx詨y[Νzvz􌳄{ڊwk|Ɉj}Ɔ^~R9ΔvEmw3gx+x󕳛yݎz/V{uu|ai}YX]~KQBśvܿlv vwОEx6yZz1{Nt| h|\}ㆹP~׃ʉvyvШ~wxaXyAy!z͓ s&{gv|<[}PA~xȆv4nvŮnwqxfnPydyΚ};zqn{o6e|KZ}1HO~"Ɛvw*wѮxj5yoly{znzo{50d|Y|O }؄*kzq Xs5uZ|v?xz$=+{yKU}=lC~_k̀NSΜ0xK/y2.zހ2{8|WW}~~xXfk X^UCR<"%w<]AV<qŐ Ewp2j؀^1RD~侱~1^~aզ~^~莢~Evyj* e^/vRҀ}!μ}[}X}̊4$~E~N~ui]ԀR "|v|}ǣ }@U}{"}ˋj~)tK~ h!Y]R(!FP{v|EЭ||ۓm}}e~s}Ìar~3g~\*,QC{K{<#|%|EJ|R|'} |}cq}Ќf{~I4[L~kPr7a{A{I|ӝx|G|uw|M{[}p7}{eO}튋ZZ~_)O~҃׿m{կH{קH|~|>|Z|y|ٔCn}3 c}Y7~O~x|q|%|'B|6B|BÂ|mx |m%|b}OX;}N~)!ΆqTs5stv6Xx9yт{xu4}i~^ WRxxywxz({|=2} ~ui8e1]6@R[Wy~~΃Qs-NP΂Ct/)h䁦]- Rf5$ɫv҂f)ɂ݉Ӄ~ks?>gg\ɁWRKOʂ}Xi?P_ʈK-}}rVLg@|\mR3ekt"5׋.|q$xRfVz[QS/ZԁNÚ̀oc>QzEoӀ EeLGZ̀^PA]ѣ瀮ۘ_!*uېsyn-dRYOiI,r!zؗ*"]rǖ܁w`:mFHc2'הg1:znmrPi`s\XZP=<՛בpNM+eς-ryÄ(qXhʆ`fX pP$4o'Tފ%ȎS"ֈyĊxU4p*g̅c_{WkOq֐i>Ode Oxvmn2f^VNف5-&KRˍ{<} uNm>e]ꃍU^N'ܞ-ȏߗ֍T|ы|tgxl{#Q{€|ny1}r}k$~c^\U NT\~ˍu.+@ x+q"3KjUic=^\K UJNT; o}`w-Sp<|ib![އU>TN]O˛!ǃڗՆ?|ʔŅvLo(h%aʉL[8 TN-א֋}W{Ftϑ6nb ga`Zw Sل?vM󏖝xψZ8sizgҋs}lGf0`YÆ$S8DŽL~ S2;2ry8ur\kፃaeĉ_-LXRTtLb%8Ǚ~ؖSw0qA j(d\]]W7QKꀭ9W}!v’p%ǑiُcZ(][V͈xQzKKWKir‡#t ȠEuX{Jvuxn{yh5 {Wa}ZN~TTNvCwbxzoyt6'zmŔ{gM}`~yZTN |EGzd2m{{y|Psd[|m}f搘~`wTZ+S2Nxɥw~5E~~x $r{l=,f4ހ_ꌬ0YˉSMפU~!w]qʁkvme)F_b YpSLMR҉Ԥ݃M>~}W!vp&ij̄+d^vX{S MكޣH{ш;u5oiE+c]݊X7RlVLR 7AgzXMt1n"hɈb捋,]uSWzQۄL^Մ$N)yRsSm^gZb\M{VۇUQ;&=Kg8{?xŚir~l[f`G[LUㆋPzKqKyN}ewšgSqk e`QZo+U "OԃNK[Rstz.*ut~w4ox{iaycᔦ{^ }OXX&R"M`F5w4~wy|Ʀ4wC+q:lDWNfԕia\JWyt뉀o idk_g?ZZBUą!PcK߂&8?Iy`~sʟw2n/Fhߗc2^iYɆTKP KjK~V7xprӟm8eg閱bÊe] XSTцOTzfKU[}uw7qlcgTaܒc\􎔊QW툱SAg'NJiځsn)u#pvUsw|uoxvyx̊{6z|||Bn~}`}S]+ؘr`vTsw=uy;vnzWw{xy$|Vz}{|~n }`}SO֜p~kmrg~ؼksOJumRv2xeV.yz{qmU}P`~SB/ԏo rq6rPt{꠭vw$yByzۃcl|_~"S6ς0҅n`ŀp q\s6uC MvxxzIk|_P}S+w{nmuFloNPqsϖuۀwOtyyhzʼn\\|yVP~9KFl?TRn{p qɞYsbuDdwms1xgzk[|.P/}݃;lar=n5zZpaqˣLs}u%}x}vz yBzz{|k|}Fx}~ak~_ 퀒RÁ}v'}/w"}x%~:y~ztYuɗW vMzx4`}'y}sqzċf|[Z}UPM~Sqŧs tZѝu>vZw딽{y/#pgzpe|{5Zl|O~:qծIxsȧt\/u|ːHvawĘyxnz,d{cYP|N}ヹrs0ʥt` urjvMGwZxGxʖtm]yb{X[|PVNy}0~n)~Op7H~r`~tV-~v[bIx=z(v{/{j:}^IR[ہ\|u}vh}_wҤ }y~z` ~{|u~ i3c]πR=qĄ{`{{||R}Z~.O~[w:ڭwvxyI'yO}zx{bm|,cq|Y}ʆO~wC7w/xy3 Iy͚$zuEvk{'ol{䎧b |X }pDNv~8wkw֟$xJy|y*zLWtzj{|`|]#W} M}߿#*mfor$]tz'v x~ysT{g}\&QAhtbuɨRwAdxIy7E{5}N|rie}gHH\EQ؁󻤀zȱ{|X y} t}~r|y0qf[؁9}Qu;,GHio#́{Qp9e򀂂/[r˂WQy ~~O~~υ~zWz.Yo eR [f%Q[Â.}ˍʫ}{~!~3h~TH~3x~ч n)dpZaPǀPi}.}b9}mV}M}4~NwX~^mN~cp^YsO΃/w|ؚ,}ϝ}*h}P}t}fu} l%~Ib~XO2Ub|?F|ŝG)|E}N}&Q~2}\lt}j}싽ao~EW~;N~郏|{e؃\}[qQs̴sЪ[u<v+!xtyptzy|Bo[3}e'/ZQF8ԅyƩ Oz{z=|B}CR}x~ndMZ uQׂX(dXڀ:+fu񀴀wyICmcف́Z*DP{q셤zPRL2Zvalxc=TAYˁ:Pс&ӭ5͊aՇ~KSuAkkbdׄYP> JJCҘځTZ!q|̀ۊ sj{yEan[XCAOo(;#@ޕ 8xˁ{jkrv0id`)WzʅGNi_Ş؁--6ǔ\\yq(ҍKh8_ZV_N :b?ǁ{t(xmҒofR^=&U~My~փW73|ˀwrnhEe5]"~ՊT~!L~~׭&^m֤+oЛDqܒsɉuʇwvym{c}YPǃ ;sitؙԉvTw͇y~zu| l2}b%"Y\P=+x yԘ\zďT{|}~}htA~^kfn^bBqY!wPq?}z.~q,~ϖӈ$202:|JbQsjׁ7aXz:PJ₺UWǕXT~g|zW{7riEaXeP&7aS ʇbnyƄqY`rh`C%=WO$ $5]_N.cxap䇲g@_ZzVcNҀQ凨'pŐ܎Cw)npf̈C^1V.N {9fr|r5uo~vuÂʎ?m e}e]LJU`0M}~PņURO4̈́Vq|XtJlLFd1 \TeToʆBL3ćO֔*EՅ0Pc+{5"sBkpWc[GSqLy~ۃޤ6moۏ"rusMuzʊ_wrlyiw{a}XKO݃.ɑs&t(v'5wxyzhq4{h}`u#WBOoYx9y94@zA{,C|x}p~h3@2_]ẂO揘}N}ӏ̌f~]~zIw%oۀUgn_TvW0[;OvNsĂ^L3krz[(y~wvn~n1f^̓V߂OXiʌ쉉},uFׅ(meP^ yVCxNց~Kw{\Mxnwt {ćsYlj#d]3U@NsӍ^ŋ%zv(rBkOc\h-T΁|MsxC˖FDAf;y"Ɏqj)Ib)[7T rL߀#̆zv. wp 0Ch݃aĊZ]=S,L\ؕ ,O@}ۇ˗ZveEznꑠg`qlY`J)RjCwKM8n]p:}r!Vs}1uu+wng0yfF{^c}VO`st^uՐqwZ|^xthz@m~{eЈ}q^,#V_N~wCx&yz{}{t|lÉ}e& ]HJV N˃ٗd|]|}~zb~s @kdti]$nU2ri~x;t2wvqwjWycF{\Q~U"~EN;S<s0t:u}{VwLvxp3@z3i{bx}r[Ԉ*/TՅN%ʐ"wg|x_'yZ|y~zZv {]o`|zh"}b~[^BT|Nu{\|6:|{k}ru~n~h iat4kZQTGAM8ڙχ?& oFzgဈt Xm gb|`܈Z~TTM살i#xƃy6;r|l]hfp[`WY݆[SoM};v!͕䇞~r:wqʎ+k{؅ei%_-Y#ZRރLہ#]kl}A}vӐ3pjq]dv$^Z Xu KRCLG:ψޗN #| SuɌsoB"i`cy]vZW.QKƀ̃里pz%tYugnG药h-bXHW\f&VP؂4|KTk?;uy”Ts8,-m0g#6a_[|U҃P/υJoq]}^rw.trvflx?fz+_ԍ|/Y2~IStfxMst}gv,wDwqK+xkH.zUet@{_Pd}YMNS4܁Mv<􇸡"wLȝxJ|(yIv4hzGpY{Fji|hd܎}^ҋ~XJRYMg΃*Ƞ:{֜{{2|muM}o}iՐ~d4^^LIXpCRނLMYg\ɟl~ߜ%0zDtmnْ7iހc]ʊtX/0RlMM~ћqy3)sdmےh.8bz]߂W]!RbL炏Ğ S}Ț҆xrN`l̑g0aҋn\NW7VՄ QdLO ̂-|Nxw qM kӐOfF*`s[مlVdWPdKŁ灉{ߌvpFjѐeR`ZƈbU߅P`tKL#gÑzz5tזAo .Wi"d>I{_YχTDžhO?J„WQyq@{sԕn"ۏhɎ cOF^0(XS4OJn%p{r-vsq\Qu.l_vgxa{zn\|jW;~}QDL݅t zuIuvpp^wkxf~+zwas|\L}VlQ?LԄewsz)xWu;$y9pzz2k{-e]|U`}[~V[SQ,L˄N~zy`{ctpB|oH|ja}ieM~A`m1([I(VJā6QUWLÃ~}Ϥ~x5~nsl~n3i1dƀ&_xZ݌J_V7 Q-5LU|=twwrǜmhڕ|c_,ӂDZBUPƅUL]܃|+vݟՄqڜYl˜r#gc ^_BYTP?'KςW{<*u?pz kᆂgTb?]!XTrO„AKNރz\}upkbf;Ԉaiy<\ٍ?X9SчCO95J݁ryyt&Wo|j Ie>a`t[ƇWYRNDžJy$x/sDn@8i.dd _[%\RG@NgZJ%4q-jdrm %soucrbvtkxKvFyxyR{zlL}K|_8~RfπoarF‘pskruê t?wJuxؑgw|zKy-{xVz}k|~z^~RUbmyozʴqk{as(|Tt}Uv~x~wfzV{j|9,^\~RE]lCpn:pCr!tɎuӂwҁvhyj${]}R7j꼿mBo/q(+s'?@u|w!ury#6i{{7w]};R)DƻiӐ>lծn_bpmRr~t<vt/xhz\|˃Q~ۂRhwkSDmÓo_qʉt~Nv(rx9gwzQ\|[P~l hj՛m:o^ꓐq sK|uqwՊfvy3[+{P ~hCjlTvjkvl8wo|xqҚyt9Gzvk|xvV}Czj~|]~Q=YtQqutsbvu3wv̘xxmz y`{S{}ub||i\~~i]`lQȀҁ+irxҸtyЭumzۢYv{× w|yB}Dz~aty|1h}\~QlqqXr΀2tQuuw @xxyNs{twg}\~Q zp;q8sHtv4-w}yG8rz߃gX|+\6~Qxo@pnjŨCr*tvKuSEw2|mxq]z^fo|[}PIinHƱNpߦEq;s"ouVvzxKp yeg{}i{m oCprzyt utwPjx`z0W {ćM}azjW{SlǪa{oU~|[q|t}v;~~>xyse zg|\v~Q_y5q!-yrߨzt{CvTX{ww|y}}{3ry~g|g8]~W\KQ@=U wwڱjxx yqz bz:{{|7{|||}q}~f~[րQ#ف+vo~we~JxaSyDnz({d{v|!p}1e~Qg[6gQ{FuG/vR飙we+x^]yWz`zP{xo|1e@}ւZ~P$9StVuyʡvۗ`wFx yɇ"xz8n|Ld`}[ZZ,~lPdys(tɐvw%fx5݁ayPZwtzvmW{Scb|YT~IO8òvstOTuvwxߍvz jl-{;Mbv|v1X}N~Ńr̞˦Is>u5vPL=wix~Uxtyjzߋ8aj|W}[qqs,4v{yx]pfzé7|[(~P +~p~Wrn~tI~u w`yEyzo-|e~HZ$P||v}xI}vyN_}z]~'{p~|{x }n~ds!ZMP@ɱ{}9${}|p~J|~ċ=}MAm}w~[3m~c1Y@Pz%zoomz[{}JK{.|~,}v}l~cc2#YڂtP[TFyz$2z7{N={ۆ~|yu`}#kk}݄bZ~XbIOҀx͏y|Rez.zƋ{Ys}.{.s|j}dah~*`X~O ԪxXy—yAzHz{{:r|8]i|`}WN~oNZxzS3xz0o{2f|D2^F|6U}HM3~Tpwxwny ՉVy8\z$w^zn{Xze{]1|[T}VL~˄zjYlo*Fpqo# suw?xEmxzcy|Ym PskU)pDr !sقgu˂5wJnxv7zl|rc~:Y|PG|v!dwWxmny~Rz~HI|u}v#>}~}vj}ύn3~e~A]~jUY~ɅVMAI<} Ȗ}**}I}Z}J}h;t}l}d}D\~,Tn~hL~tr}%}}#Ԅ},{}2ss}MCk}pct}[~}ډS~LF~JY`j݈lוo:qvCs{usdxDjmUza|XF-O͂ԁ̈pc^qϔJsĆuWx[wzބxrm6zi|^`6~9XʀOkϣ:uuCv؅xny6@}zkyʃ{q|h܃~.`RWUOxz\9{Y|d*}}x6~p@hz_*WU恗OQTƀJ؄HɀćPׁ.wxbo%gF_,VQO.Tl9^R/~Q/v?ل7nbfNW^h+XV_N܂ɜփF㔣W|ၧtTm0 'eEօ]]U~MSŐ(b>CJ{)s؉lWdO^ \2TzMKԃ/udOsԁ1z1ĎrpsKj,|cH[ƆT(Lc[0eÁ˘$d?x~Jq %i֌bVZdSH1L7~e-5~ွwg@MohaGY R~؆?K~Zj͖*mouڊq@^swH>vos&x^gGz_7}V*XNG%o͋qksuD~{vv@qxnnzfx|^^~EV"N˂ۂ tjv>wix|zuD{`m|eل~^V23NtHyzɊ{"|x{Ά}Ct8~l҅~e;]xU܂N$~琝Pezjs4#kVdg}]UXPNm4ڏ7·5ŀDy]TrejރFc+\RvTۃMC%4q xʆpÃi<[b[>TDWMH$" }ą3vJoshÇcaZZŁ{YS݄SL@Pd񃢅|lˍuzpnlgXa`Y dRmL#уwb[!h<o[z_tdmffdo_GkX܀mRyKnˇ3ć7e4 y@rڃJ.kreWT^WA\QdKCtkDxms͏o=qy錉srv1k\xvdGz]d}!UrN#,XoAqsxFu*x݋vqȊ xjވz|c4|^\x~QUANC:ݑBtuׅsw1~]xzwڊypZ{j|b}[CzTɄMڂy?yz4z}_}{vˉ|o}iJ5~bQ[yT|M҂v?Q}x~,(~|B)uƉ)o ̀haT'[9T5&NM܎7Pqkzytm+g炣`؄ĂZ[SMKֆZ\FۆyfsJQl†fqd_B;Y0S$LGN3ZҊq~Qxhrpk%Beut_ɅX肶Rg/Lo⏟dm}?w'qpjdp{N^,XXBQ8K7(h|:uň*oiQTcJ8]舊WΆPʅ?K)փ\L0Ӗ@zE>t͒'nsVh?bL\.VCgPUiJ͍k̖tm+pzrtt5n vcg׋xa:zZ}KSMg+既p cq$syu/svmLxg#z`|mZB~hSVeMQktGbu~ؒ/vxx8r ylzfx)|``S}YІ}S_ׁM<7xtoye}GzYw8{Lqˍ0|@kF}Bel~L_gYaS_M)тr|h}/|l}vc~\p_~jߊe 3^ XzR߃PMs7.ʀ{t3u|goȋi܉ہd#^,zSX^RcqLA .#z2tC]n 0hƉPc&]TWlQƂ탂Lxh~hys"ImgňΆ#b=\zW Q6rKn*}ywюq&lk$1fY:aJG[ZVNzwPKБ |*vlpk2e_`80 ZUbZO灏J5ȀՑzt?u]]o_j#ed[_K̊Yׄ&T&OK,tJYl&5nylpt\rotiZzvcҍx]}{3XG}R^LtZp|~C/r$yfssuqn?+whxc<2z]|Ww~R0L›t>}T1ux4tvrx5m}Rygzby|c]&}WQ䅬1LҁȚw|]?yw@zq֒{lx{gF} b~&\}RW#PQ0L$Ú{{d_|ivS}p%}k䏧~nfL%as\ ܀VʆɁyQzVLă:@tzTuA7omje6`e[`EVDug7pΌ7kSfό aԊ]dX[ŋWkS?jNكJuBpݙloqGgݓscF_*Z ]VrRNZ>J@8t,okpfߒ/b`^79ZUQ}]MăI܃sojfjaN]fɉ1YTU- Q;MCIncfN{pi7qlHssonuqMvt@xvuzry"il|{}]~}P lkm๠n]p]p_r@r2t*t vuw~wyty{}h{}6\~ ~P4aju^lvnx'6qyW s zu{bw%|sy?}h{n~\O}P̀ h|ȵkL}Zm}o~rr~Ht:a~2vlrx5g[z逕[}&Pl gpilɝnރq(Tsi} uqxfzk3[|Pvf8?h[ks nDpoZrĆ{u"pweyZ|MPa~лe4Eh jmmSoo݋r@%zto`wdy|gZ{ڃO~>*d&gmڣ-jTVlג4oV߃qōxt9Zn-v#cyYZ{qN}؂}d;gOi薌lsn|qhw3sߎlvH5bxbX{NX}}Ǵd"nfПKiџ"lO(nǗq0NusknuMax\WznM}, d+f訦iLl.n~9p~t.scXj'u?`gx3Vzt0M]|Drfm:tAiDul?vnwq yBt.~!zvr|*y gU}{[i}P06qmqrot'qޝ'usҒvu·xew}yyq{{`f}@}1[`~~PqEo]tqu;rwqtfx1uzw{:{y;|rpz}e|~Z~vPbtLauvNdkxNnbzSzX|GNf~9riPȥHk(\m~Wo܇q4}s폗tujrwiayWM{XM}ڂԭsi'Rkqƙlm˜}{oș@q|srui wi_yCVZ{$MM}{i,1|keOmfo@qzsxq?un gw]E^yNU{BL}:I.wf xmiQ0yRl<znߏzq{tz|vo}yeK{ZD}P vf\um7SvoSwqxsyuzwky|y_o}A{Ad~}-Z~O ót%sҩuhuEvvȖwxXxy{_zzx{Y|nB|}cc}~YQO݀rzgt{-@u{uv|x}vyL~)wpz~m_|cZ}y?YZ~OȀHnqTr tv6uЁSw%qxv\yl{lb|Y~zO񁺭p?D0q˚sQ9u ӇvrS~dwuyZOkpza|~3Xe~O: oVZqhrEvto,z_z}q{h|B` }W/~ׂN$t^Duivꉌ)w򈮁xxypp{g|-_*}CGVo~Y[Ngmsˑu TvSIwbՀ+xi^wywo=zzf{ ^W|υU}%M`~򂱠s^Ә'tݏuv~xv;ynz&e{D]j|iT}~L~ s#oWteuj`v}wLtxǏly֍8dXz\C| T}!LW~,#:s tB]u}уv{wssxknysc?zW[D{>S]|φ7K}ۃRhf瞴iNlVnq|4t s|'vjbYy'aY{X~>O.7̥"l'`nהq1su{*wrhyi{`})Wg#O ρ}r~t ]~xu~wxyVzq{hҀ}`~~WUNlkm|hxD|y@}dzDj}{3C~|$x~}p~~hs~_VNȁ{:}f{~iX|b~ |I}Aw}o~E}g>~ۀ^|CVNz@z烀{m|O~|0vm}nz}fG~M^;~V mN1E>Syh z({zڄ{x5}{u|mE}$Be>}ʄ]c~xUQ8M~x֎\ytzTO~z{{ss| l&|dH}P\\~-T~LFxby"Ny吤zzz[{5r{~j|=cC|[}^S~=L`~قx>xޗFylz6xz~q({NFi{b|Z}9S}݅SK~x+Awnaxyo yUwzwo{h{1a |>hY|戡R]}K~$V}ig9~iԏτlDŽVo qw܃to߃Ovgy?_J{V̂~hNl nspㆁAr~΂tv͂vnyfȂi{^J}5Vi9BNn4Rar|sfu8;=v}x}]az&}ksS}nlb}Ge}^}ڊ{X ~ QV~LK ~e%gGYj5ElفoRzqsw)tPl3ovdyk]&|UM~MD-lnňdpȆryʅtrSvk`yc{$\}OTlMyqsBPtvyxxqyj{0cB||\~T3M<ՓGRv1wkNx~cz w2{'p|Ci@}fb~[{TS'Mq܂؅>{wׄ|3$[|}6}vZ~Eo~h邌a=C[T MZUUOU_{߃$uMXnDgaZet'S?\L ܃7FztPmQf؁d`)%YRRွLXˍApERy9ŕ?l7/eۀ_QXvnRHDK̀j!~ٌowwEqkd׀q^j8X.{QքRKT/* 0wȑ}1vp?iڀYec ]\Ј)W5PqJGY͗ {9uJϑo]hȀb\suV^BuPFjJ~~h6j׌}m+|A5ouro:t}hwăqy[d|4Sh~Lz^lӇ㌉n܁ap{31rttnXvgy a-{2Z}gSL ȍqYirStz"9v3swmyfg9{`%|Z=~SNgQLՂ `uc[wXVxWyJyr=zlF{ftY}!_~hYS LÂ=KnUzd&_{6~-i| wh|qe}k}~ce._]Y+-RɂLႆm~߂ΈL|݇vp҅xjҀdĄ1^LXROYLQl?z̓G{Rum Go;i@,căw]ŃW߂ QKĀB.KzF\t>tmn{hwb؂\GW:Q( KCu#ڇ|~dž3yۊcs mWgAaむ\ӅV2P.JӀ NhQ}]IwxqlPfVՊ`Ђ[c`UÆ O3JptƔ|vi ;p7kIeTv"_ばuZAT̀bOI؅1J_h9kC|k{mvoprQjPte"wB^!yX熤|kR8 LJ܁mۑo{ngqusptj.{w dxy%^jv{PXv }R;L=isq9ďrze`tqtv o40wipyMc׈7{]|X w~Q1sL0?G~uZ~vyOgwsynLOzWh{c'x|]W)~MWQL$|{yt}zZxB}{Br|%mkx}g݈}b{~\΅WBcQHL9܎}|P#~w~q9*l\ff/a\=VفQɂYKĂ耰ʁ{guڋpik=$:e߆҂[`|[OiVRPFK=E`y…ptg>oSj4dHw_ׅ6ZU}ՃP ̓JŀуC~x8ssn8yi'.cʆ^􄔅ỸrHTЂ`O^ J]jj|ό&wfˌrHqmgb܅U]X߂S셔NހJ{‘vv:hq-k􇥍af:a]FXS>bNRIizl u甄nGpNpk͐rfu0ahw[z$V|Q OK7~ޗmyЕozurqloNsWk 3uAeލ'wH`ً'y^[7{V?V}P΅K/}閵qEx唐rt.rto!]vjQQwe{%d:|*_i}@[#~ZWSP߀ÓK Ӄs{Zod| k|g]u}cg~Z_= [@|WZRPNK_JÂ^2r~nj6fsĀ b^w^iZ~aV`ˁReĂdN>ǂJQYq]miIe!ga‚]Yˉ^UɇFQC3MփN\Iq}p0lʔS hۑd`ڍ3\ۊZYل0U%DŽQe˃MdރI p3vkؓψgߑscď _茬[p X9QT`F*PSLނu5I@ojXg"bT_6[0WۆSՆ(P]LkHiнkbTmeToghq>kʒsnuq} w tqyUw}f{z8[ ~ |OtTii|kk&mnop"rsCut+u|{vcwpxye{&{Z}}OĹgzpܮiralFthnvpw3sHy/zuzp x|.e?z}ZM}~O.exh:yjzKme{ 9o{re|yt}o#ww~dzRY|O=c@fiՖlEnTqxt.nEvڀdyY|?O~ b6e˟h`k^'n"!pׄwFsm,vO c3yY {́O/~}Q)al dgNJ%jpm~pE~usikuԅKbGx%XJ{YN~`cՑSg #vicl匡~otr&juaiakx1WzM}`1..cTʙf]i}>lr|oQ-s6r/iut`qwχVzMX}Sg_u3cqfSeiBd~l0azo jqquh^t_:wyUz=L}_覣]bf$TOi kyn˔pqqg2thi^-w-U ybLv|pbmqyerhtkkunwqyy0to/{wd|zTY~|O,mi`ok֠3qgnfCsptsvuZxxqwnOz`yc|k{Yk~k}O$rlpGmr osqu3swEXuxwwz{myy|cT{}Y}O ajAw#:lnx4nyP.pzYr{it|dvv}^ly ~Jb{Z5X}Oh}pk~N,mk~o#hq~tuv;m_Ão͋Gzr5qtJhw_ypEVk{ƒMa~*=elgTjm8l oYyqȌpWt:glv^y U{aL}yIdНjgz6j1 2l_qowq| nscf"vP]x T{ `Le}]ddO\gVili|nі=v;q8msev\xgMTzL}QtZbupeΛvizwkSxoyqvr{Htl|wb~>zpX}NFҬrYiFAskKun=v_pwr~yu4unzwk|yb}|X8C~Nڀ5po¡rqssju)u!vv}x3xtwyz:j{m{au}"}W~Nunv8pw\rext yZuz|PwU{sny|j z~ `|W~\ Nmi|oK}q5}r~3t~{&v;rmxMiUz,)`P|W;}N>"l,ʜLn2p@rsyu҂yq6wchTy=_{V}}NQVk"䚅mI4oyRqlހsWy!;^{U}Mx~ځajk䘶lSnƌfpƋ)wrvtnvmf=x)]zUJ|L~lAilnD"3pIP}rK}utImvHe,xF]zF4T|.^Lc~ ix"k͘npb|jqt-sl)uQcw[y쇆S{օ#K}̛i~pk(TmŚ=oQ{ qirsjubwZyS {K}hxc Gygfz%i7zl${o{|qs}iti~iw`~zWq}INU Hvi0wkZxn#ypvXzrz{ur|wti"}y`1~|W~>N?>kuoE v;qwas^x{tł!yvyzxEq4{zhb}{_~`}V,N*ـásuVgtvNv'wوwcy xzFxsy{up:{%|g|y}_ }~Vc-N{r${Os{u|v[}Vw}wXy ~oFzl@f{^}YeV~ŀN%cBp* rI"tlu~&vv x]n ýe{M]|ׁU~LMoYqtssPitӅ|vOtwɄlyD6dz˃\|X1T}ςL8 o@p틚rt.{Cuskw?kxņczR\5{ℂT5}[nLn~łVn phHrqsyu@r$v͊rjxYbyU[Z{zS|.K~_ng2pqѓ}samx^t_pvuNi\x@ay#ZL{R|K~ؕXn8ፓoMq~qs&wtov&hBwp`y?Ycz̈(R|IK&}}cl}gf`}ij~+lJ~o7wrotgTw^zV[X}sME{Bi+ {kz|dn ~|p]~}rv~!un~wgfky^g!|U~]Mׁpynڔzdp{r4{tm}|v=u}Bxm~ye~{]}Ud>M7x2t yuՋyw.zxw|d{yt|h{ m}A|Te#~#}]M ~UOMځ?*vzwz*x{y|{8z}Hs{~ l,|~dl}\~:UMruv刖w/xsyy怸rbzk{4c|f\~ TwM"ՕtŅ?u†w-xv}tgw֍mgxfz6_{#aX|DQ}RK~Rr𙼇t'|u`Byvvs*wlCxeyK^zЉW{Q"}KJ~bpcofljہoilrl{@voisr~QU~O~YJ1!o|e|t|v|鐄p}kX}=Je}s`!} Zg}PT~AO1~I~҃Dze&g}܈jwƇmQq/pkÆireu_\xjYb{KRf~$KB k ipRl|ŇnYvÆpq6rjuyTey`szyn4x{h}|b}]d~W^QhK$(H{}t|Fx}rr}m~hg]b \`̀mVρPdKa7d݃e|*3vĂɀq7nk$fria#z[@V.5PrnJ怺m8zׂa&upɃj߁wey1`FZۀeUAOkJvH wyɇtVnY*؆=T:N4I8|N,v{q؀8l]g bsЊE]X`wSc\NGJIv<^N'e|hw쌑k+rPmmYplgֈs!bwu\xW{Q~gK7I4j{팙lYvnnqEpl sguiaنw\$K#V|}4zewqP{?rn|m|h}c~_)ZZc+UOۂ!Jف{UV~WvF~q_lgFc:^J$YVցT6O_kJgz_uǂ}phk/fbb]}XSSN*JxˆHs(oJejz{eՅ.a0!\wWلJOu&ycqyz_mJX{Yh|Hd}1`\e~\#1 WSCNJ]݂tF|pn}l<~WgF~cȇ_yŀ[WVDRqNAekIes{o[-k?Jf򈝁b^^1Z=V^~REMځIr΄5nN0j>H,ea̓]҅YلUQ~MjtIBHq?m2ni$d~`DE\X eTQ oLH@mpl‹:l*h.Gd`̈_\XBTDPm-LvńWHshowj]kWlgݒ0odq_ҍt"[vWXy|S|CNnJLrڗlkUnKmmk68og2$qcds_Iv[P(x]V>zRe};NIJԁr ?nn$0ptj/rDf*t"b͎1u^njDwZiyV|Ru~)N' =JchЎheQ4at^1Z"W, S*P-LLw;\HckqgڎVWdW?`]J.YVd R愓JO-LӃHjfˈ$c|_bD\YRURJKOÄKx,HjGi]k ax\me-ohq)ls^o[xurmx,ucszxX}{NQH~fe/$hhkDjmmwop^rirwtulwxbzHzXz}|NY.dglcFfn}ippl3rnt{qzvvt(xlvzlb:y|LX*|}N`qbPs|me-tܚHhvHjwmx~@pzGtsa{kCvB|ay6}W|! Ng `uzqc{(f{bi|]l}D}o}sr~jvuaxW{ Nm~k^9b6DeQh[kӁg{njrqiiwuW`Zx6;W{GN ~Pا]ߝa4 dg=k]z>nFqmqm)het_wV^zӂMp}G\ŽI`A Uc͋ˊlg"juWxmp?pght^wJSUzhL}%\"@_c4ڈfJi)wm;Qo p~yf[s]vU z Lf}* 0[К[_Ub敱fEH~ivlwmp*e%s`\v6T8yK|܂]H[j_ j2bjej}IiXltlrloގds[vHSyvK|m!^onapfe~rh؇slD~3uotwrkKyua|yW~`{M瀲~$je> lh ;njpm9rpV}trsvuj}y,xa{zWT}}MDnBhlMjn&m%pYo[rcqtv{svosv+xlixzZ`qz|PW}k~M٦]fri4t1ku,nwpxzryrud{Khw|_zv}V|M}=ydyXgz+ej[{l{тSo~|yr }cqt~$h*wD~_]yzVu|M$cÙf^iB-k`nxJqOosg6v^yt U| M~bD 4eKh\!{k*Qm]vpnspf0v2]xUD{L~Kiaq(hdz&Ig"jm$}mJ&up"mrekr'ct[6wˆS7zK}6oK`G~0cQΉ^fb"\iDsyl!qniq؍rbtZNw~RzAPK0|@q5^蜟rbJLseʋu5i@vlozx#oqyrh{{v_}Yy/V5|5MCuoeVphr7jDsmuzpMykw0rpxuhzx&_A|zV8~}v}ex~]{1[UZ}gMhǜDh~UAj~l o;d|qtsm"vaexS\zT|M !'fHiylănr{lp΃Yss" kuudwЂ\7z0KT4|wLz~fhPJkBmzp'r]r'jtZcwW[yS|K~Aerď%h pjm(xooq ritb&v_ZyVR{K}8eDggkjT~~lϏw;oCoqht$(a v=YxPR={PcK }SdߚgsDj }lun(nq`gzsҌf`vBXxQ{J}DuF_gzvCbwBf"xQi\~yelvzon{s ff}'v,^~y\U{|lM!xs4ertsh.Muj_vm}xIpPuyrm{ue|{x7]~zU'}fM )qRkm^rmtBoτuq|w7ttxvmzBx*e{z=\}s|\T~XMHtoqbq>rgrttv!{av/wswy=l3y{zdN{.|K\}|}T~@LInw>5oxGqyWysqz\z;u5{crv|akXx}_cz~P\|i=TK~5Ll|n}yep}r~xxtb~qv;mjLxbyI[Z{倩S}LM]kmołv~qlw|sdpwlexQhMy7kz&myu{pWr|rj}ucT~xJ[0zT'J}Lh"uk6rvmawoWxqxezsq+{-uj|Nxb}uz7[]~|dS~tL{spȋuFrk'vt~wuwIy wWp3zIxiJ{zb||+Z~}SaQLΑtrvFzswhuZx|vyv6xzoCym{h~z}af|.~Zl}!SK~!L}Qq>{r|MOtW|{~u}tw@~5n"x~gzi`{Y}|R~~L!߁p8p Yqρs~/zu Qsvvlxfuy_{ Y|R:}KbȌoQ*q[rmxtU rdu넯kwwLe}x^z~Xp|Q}K$~nY|yR~LgxupGyTqz3syf{ u\s/{w l|xf_}zh_~i|Y2E}Rw'mL $wuex v~y wxEyyr/zzRk{{e||_#}}X~R72KNuzq>v{7}6x |vy|pz}j{!~Bd|$~^`}/X.~;ZQBK@tcu{w8uxUJoykiz}c{%]|cW}Q6~K"{sLNu5"znvut`wnxǃhypbz>\|V}:P~KJMwvwӎvqxAlyfgz b]z≏]m{UX@|oS8}=N}RI?~ b~exhs kmƄenhqbt\w.VTzSPЃ,}rJу i]f|i2wkr.nSlbpgX,szav \4xV{P~>J͂)k{m>vonq8qlisfPuaX;x$[,zjV-"|P^%Jɂ1;぀oz|qMuxsp6ttk-qveځrxl`wz7[2| Ú}P*JŁ΁~9sy]MuRtkavo=sxjOyez` |CZ}Ur  O=kJs}GxCxDyKs5nzTn{TiG|Sd.}M_? ~DZ D;T1O"J} |~|v~]}*q~}l~~nh0c2;^bs/YRTdPO%AJSz}Fu} p}ہKk~}g.~^bJ~]~X/4S|_N͂}IyN|tU|o}7j}wf+}˄Da_~ \~bW~SH `NAeIaw{s|Znc| i|ve}F`\}L[}酴W~F R~_M Ifv{q{&mG|>:h|Ed|҉W_}}'][}~gVi}VQ~PBM?~/H+|ߊGcwuesShn[ki"n~deqt_tyZZ wU,yzO}J1j{ψg+virfrl&mnhՆ#q)cޅs_v_Y\yTЃ{Ojd~J4-zhk9um]qnDolqh-sc9v^+x?YtzTzD|O<7J6xyoLtօqpi#rktgC8vbxX]gz/X |T$~OgJ9&xfsTsĄwtolv=jӃwfxOy,aӂz]V|Xe}SԂ)NJ;Ɂw1wSrsxtnP#yi˂ze{`<|\}WSa#Ny5IZ?v {7qz|m/R|h}d~O` [ʁdWE:yR߁1N)I䂀tȁ0pPl g\gc)_: [ ՁyVRf.MŀyIFxs< o,k 'f+b-^_o+ZIP)V:$Qڀ(MY HrTm}iYMe/a]oEYoτU<Ä{Q+ LHŃq(lڀhۉCd`\q3X^T\PcLlo H~}Fv@dqlfm׌=iiyl`eVo(`߈r \tW܆wSB{NZ~IuGCgq$jEm lho*dq`Ft)\ vWvyjR|"N4"~IKhtLkpml+ogqct _vA[,xzWJzRp}*NvI݁sOo.o&qkDrg$tc?v_6xe[ hzCV|5Rc~-M%IvrKrn4tejbufXwvb(x^tezZ|VF}RW$MЂI/q8svm*wibxehz1a]{a]|Yׄ}Ub~Q̀!M7LImp/}z l#{h\{doY|`}\؄~YjcU Ԁ?QCEM%I25o }k~HgfM~cl_\muXk݀TP{PցɂLˁGvĤm3j ?xflb_ l&[L܂UWVS҂PYVLjނHol҅?h􄣄eY ap^ڄlZoNGV̄!SCSO僸K}yH`:kgdi\`]JZY҆ VCSR O1{K(H+փ^oeLkڑwghtjtdNm"a1o]V.rYu|U-xtQu{yM/a~pIVnhkXQ\ `mc׋z+grQk1fjnЇbrj[u[S.yK}fW[_=c{8xg0Wqj֋xinsarZ%uRvy;K#|Wh^[f_d~c(0w~fߐoj[hn `qYRucQxJ|u]CjGZwl ^:mb oeĀqizx7hn>yBkHqnJjqij{sJmsuJpl/wYsd"yvp\*{yoT~%|OLZ~-igkj&mlpozr&qyrtXskivv4cxx[{E{S}}RLZgom]ioÈ)lbqns}yrq uVqsfw"juxbx;z[=z|S}=~KL[!eshCuNjvkm~wxXoy.pr}zjit{b=w|Zz:~S`|5L[_W_cy"fz2i{s}lw|+wo|oq}htQ~Farw~Z7yR|`)L ~be僢hр|k=unUmnq gs`vxYy8Rb{K~,aedυ +g{0jτPtxmmpkfs/1_uXxĂgQ{zK~E`߇VdgD$yj0>s;m Xlloqer^uX:x`QR{J}ꌏ`|(c"fߍvxaiˌqlk5o~LdrT]u2zWYx Pz˃J^}i:`7R.cbv}fwipplDj)o"cq]t)Vw†:PzQJ}"q[Ȏs3_]^tc ufxw$jq`xmjz*qb{t[}xSbp{LJRoaqAdrg~tmjwumpvwpi]y_sa{,vZ}yS~|KpmgoojqMl}sovtqjovshxv3aWzxZ#|z{R~z}{Kyӑkmw mo`QoqR|Zqs2usunuvgwx`yzY{|R~ ~gK1gis6l.tn~v{.pw`trxmtzg%w{f`)y6|YL{n~Rh}FKÀh`xԆjym[zyo{lsgq|Clt}f9vU}_jx~XzpQ}).KU*g~Qqi~lg~xonJrq"ksre:uD^xXzgQu|K"~߁Q~fhփ}kXw%n'ppnjr҂dOu,]w]Wy(P|=J~re`ih!:|:j݇umdooچ0isrJ~c^t]w VykPs{܂JV~?dgzjotslnuohbhHq݈8bQtI\vVy3O{yJ}OdbgUCygjs>lmYoegFq{ahs'[Evm{UGxON{A%I}su\}v_Twc{uxftyjtmzmgK|*qV`V}stY~xMRy1{KLYsbte v/hzXwqjsxmm#zpf{_s_|vY~3yR4|K8qg/s/jtly>v-nrwq`lUysezv7_;|xX}{2Q;}KԀ Jomqo~sSqxtrqvtk}x.ve=yx^{szX>}|Q~~Kvdn(rz]ps}NrunwsvpuxOjwHydy{(^%z|W|}Q~aVK %lwƁnx{pyurzot{iv|cxR}]pz0~oWR|SQ}4K2kw|mm}jz}o}tgq~]ns~huRbw\y:V{P}iJ5sj ~lقy(o#s-q6mys8gu2aw"[yV({P!|JX~Ł̃iʆ}l#~wnvqplUrft`v[*xUz O|I~biD| kvdmppkr*elt4*_v4@ZCxCJTzMSO |UڀzCP@}AJvAyg{zzjCv.{lp|>o&kn|qe}s`~pvqZ0xU{OՀ~Jrx:lzBy:nuz7po{rj{te4|v`}xZ~zU'b|OO~Jn<~kvqGywrsxtnyvizwd{yF_m|zZ}|mT~~OyJj0}uvuwvwrwxWmy yhzzc{#{^|,|Ys}@~T^~S=O!haJ*u{tWzgvtu{5qw|lqx<|gyY}bzw~B]{~X|S}̀qN~'IzDse~u'tKpUv<k\wzfxPayր] zX!|)BS^}RNO~wIq$xrNstAo(u5jEvփex`yH\@zwWt{R|悩M~I$0iwrrs(muivPmr`lhncq^tYiKwTPzN}I؂g{7~ hv8~xjrq~ll;oFgqbt^BvXy"S{Ń}~PIہy|lqu}nypz}pk~rg~tb;v]xxXzSv|NIށ)x{ps{rvo||utj}ufN}wma~#y]~zX$O|cSd~NI@owyurzvcnZ{owi|xe[|z9`}^{{\I~|W~}Rd9N1|IӁvExyAqyz2m/z{#h{J|dY{|_|}[}d~V~!R~ހ]M7IP_ tw}zpax~ly~gz ck{L_|Z|ҀwVX}R~dpMr/ISsw o2xjy fyb{z^*{*Z|KBU}!\Q}vM~˂Hr]vkmwvaixy-eyUavz#]>zaY5{̄T|P}yL~r!H~DqulvhwKdx؇`y\sziX{\TX|KPV}<_L1~%HI~wd`2rcBnfTj|ine&lao\rWÃovKSNyN<}I=4{vzdOqgm˃iiKSl|e"o7`yr \tW_wRÂzMꂳ}IH€uhGhZqFjlFmh~8o~dU(q_tS[vWy[R|{MȂ2~IQVtIlconokpxgrc(t_E9v[LxVgzR6}MCIZfs0penrksf؀ub2w=^]xZzV8|gQ~&MIIbr ~Nt\m~ui~w!e%xb[y]{3Y|U&}Qv=MFπI2)p}HZmGzՃid{de{탳a|[^e|Z}.W}uSM~XO~9K$H#lzKQhSz܆d{ga{׆:]|?Y|rVh}' R}O(~EKr~փG_qbahmd]iʈ gOeŇpjOamN]ކpkYysUvQ`iz*L}xHpelcgijoeMmaTo]Q6rYqu\U?:xGQ!{@Lփj~.Hă ohkφk(h4mdY;o`r?\̄[tYwT냑yP5|ML~HԂXn(lpjng\pc)r` t\;{vX/xT{P}TLnHAmpjqfhsb܃"uq_ew.[xXpzT8D|Pu~NLHlshu>elva;x,^ yZ{Wy|oS}PPLWHƁw$kwFgx|dyasz]T{Z2=|V΁*~S51OLL `H~gjzf{c|`3}`\~#Y}~V/RqO\8KHRQ*MWJzG3kbh'xee xhHafk-^ZZnZˈMqWWIt*SWw^OͅvzK償}H5ـjfgd%hdS>k`Hm]ȈXpXZNisVuS=xO{KՄ~HLbGi݊iSfkcm`X=pG]=brY؆uVwoRyOjB|Kǃ%Haiyle܈nbp_1r\ktYTvV"yRV{RO:}KHuh7?oeqb.s_/uW\ ~wXӄxUFzRW|O+~vKMH*gHs;d/taRvO^9Kw[QyTX- zU(|VQ}N‚bKy-HdQf`vacHw`ly]az@Z{sWz{|T}QlNgIK0uH"ReU"ybWz_H{\|YσT}VԂ~hSxJP 6N!JEGdSK|ah}^~A[̃"~YV+N#Sg쀺P}WM1J|GcB`c:w]Z}LX?UoRWBOM/JGGK&b4!_pF\JjZ 상WT́1R3ԃOmLX}I-dG_ LcUf Yˍh.^ jb}mf)udojmKrnduq\xuT|eyK}a\c` \f$cNhf|~kj_thnml}qqd=ttP\x\wS{zL~C^VcoaDfVd2i1gKk{bjmnswmqIkpsctXv[wyfS{p|L~g[jR_lpZb[nepz.i+rrqltjpvbsy[?wH{S{}L2~Ykp]rx`tLdHu{ygvqokxmjoGyb\s{QZv|SWz~"LD~`|W{wiD[`xM7_Ay5~czwfzpQj{in|aro}ZIvI~fRz+2K}U}Z}^1~,}db5~}vlf*~o/j%hnu`qYuRhy?K}}T̃Yo ]<*| aZu:ejn$iwag;my`qwYuhQyX;K}3HS~SXD\z`t dՆJmhyfWm_NqXku Qdy(J|߁dSW͍)\qyZ`Jrdtkh{e_l+^mpWthPxJ[|ċS=j8W}~[x(_qdk h;JdlD|]p`VtzP>xJ|SSgV}iiZ:kH^mbbzofr@qjyjtzndbwBr?[z.v/S#}>zK\}~d]g`qidc5kgcedf\Xgi1~jDkwm nproqVi6rt auvZ0yyR|I|:K~ߓ_jbl4en`}hpvkronthorva uGyYx{0R{}EK$N>]pe5`qzd s|rghuujvnmx0gqAy`xt{EVQuOyI|߇WaC[Pz_0tbtnfhbjz>bTn+[qUuWOtyGI|.kWNl[5nf_7}[p;cvbrgo&t7jhvqn`xrY{jv{R:~zVKC~> h]j`؃la{|\e0|Jvhl|pk}zin~cq~]8u3Vx;P{YLJ~Yԇ#]h`Ԁ{d4tgnjՀhnbqO \tVowǁ'P3z4JJ}A\x`ycu!sf݄mj5>gmapу^[t!Uwf{Oz I}["}_9x7cSrFfkilifm`pjZsƄUwO,zII}Gn["|_!vbYq fkiXel3`)pZ;sviTlvӄNzIg}C;nX%op [qx_y3scrtglv~kBezxjo^z{rX|vQ[~zJ~l9^maJ~odxqgqsyk k6un\dwq^3ytW| xVQ%~]{J~ic̃kf}un iVwp/l prTnjutqzd>vt8]y'wWW{{yP}|JLegi4jk|0lvmunp2oq1rkistcvv];xyyVz{ZP}t}JȆeo/hipzjrtmtVopv hrwbu6yk\w{Vzm|P} ~wJ#^d)tWfuyiwslwxSmo'ygqzb4t~{\ w4}V/y~

|fJ)bz}ezx=h{irak|lnV|fq}aVs~B[lv~UyeO|RJK~LaI|yd|vgq4jkmfptS`sDZvU(xOe{0I~Kd`ńQ{cufpijlCeo_r‚Zu~Tx?N{PI}큿I`-9ycZtFfwniiyluadom^rTY?uMq%ptkruf#tw`w)yLZy_{ U\{|O}~JUfhKszju.um+v}oowjqye>t*za_vn{Z\x|T{ ~0Op}RuJQfxytiyt0l$znn{ciq |;dDsr}_u}Yx+~TizO|ՀXI #}e}xh~Ark4~mm~hpKTc\r^Su1YwnSz N|c,I~|dvgqjrlmggoPbpr3:]t%Xbw-SfyN9|IK~>zd[`u_g(phiSkIlflo$Eajq\t5BWvȃRyP:M{I}'y:ctfo@ikj8lern `qH[sΆ1Vvo?RyNMK{oWH}iHuZ|pv]vwaKq#xdkyhezl4`p|=oZ}sUH~wrO^{EJ.)s_-{?tbTuvep9wUhjxkeIzn_{ur9ZX|uT~SxOg|1J)kqd>zsfttioNvl]jwody#q_lztY|@wXT}z9O8d}J$~1oiIxqlkssmn\tpiLv{rUdx/t^yvY{y8TQ}6{O ~}JA|mnBwoprqqmtsshulucawAwh^hy y;Y'z{ T||N~~JP{slos%vJntqlpul]rwUgtxbvoz]xS{yXz@|S|'~/N~Iz*kwumZxp/oyk6qzfs{au|\w}Wy~S&{yN3}iIkTxj |sl`}on}j%p~er~`u!\'wW[y$(R{%M}3I4~w^i0+rwk9mmHip&\drSr_ty[bvVxR4zMu|H~uhq%jAlmQgocwqɄA^sZvUxAMQzfL|lH~HGth ojv!klΈ_fobqP^ s&YuuUNw䄻PzL|&AHz}|yG[wy^r|zb'mC{pehK|3i9c}l^~ pkXtSʀ wN#{IB{wB_vpx7bqy)flkz&i3g{ lIbx|/on]}ArXt~YuS}py3N_|IzhubduUvgIpwjkxlfzoWa{Lr]|tX}wS5~zN9$}^Im8y"siGt/ukovYmjwp(fyrmaFz\t\{wW}yaR~O{N~+I wqmssonuqivseawuz`yqwZ\'zy9WY|W{R}|ME~Ivprqr>tmlsuhuvdwwxo_xy[|z'{XV{|RL}A~s{ gruV{cyv|_x}e[yg~+X z~T|PN}ML=~SHX΂nq~Ajs~fjtbv^wj[ xπQWaz(S{$O|⁓K~5Ht[lp.hruEeKs[auqj]vׂxZ6xCVyR{OQ|K}G$kp?gqޅdRsni`t]$vVY~wȄVy.2R[zN|-K1})G~r]im`jce܀gCaj]>nY~q}UPHd[lxqpi/ysezstb{EvW^|wZ|yWT}{%S~|OQ~^L)HskwuGh#xvdywazly.]{LzmZ |/{V} |S}~3O|~vKH3jvy(gwzcx{ `?y{\z|Ym{}V|x~R}kO&~V|K|EeG)Ciu|fv}bw~_]x~\"y7XzUt{PR |N}vK1~G҂hQudv(awA'^fxSg[CyXWzbT{b Qq|t?N=}pJ~Gg=tO$cu`v]wȃZx҃WHyT1z郟P| wM}+MJ~BGsBl6^i9aeуeb&hG^xk~ZVnWP:r2Sd/uO.yJK>|GփVbkbyhgeZe~h5a}vk^qmZrppVrtS~w+O_zeK}G့kf'g+hdT@kN`ԁ[m]upzYs!VuRӁxO2{wK{4~JHtj"iflcnh`#:p\qrYxuNV!wR+z Ol|Kp~HPi%~5mne~owb~qx_z#sy\ZtupXwpU+ykR>{vN܀}KfLH-h!|qd}^ra}t^~1v3[~wXV yU0}{*Q|N_~K7Հ9HHg-{tc|Yv `|wu]}`xZ}z'W~b{T~|Q]b~-NAJ_GՀ݂)fzx&b{ryC`|zX\|{cZ}1|cV}}gT ~S~eP~oMfxJzG|mey{az|c_&{B}*\${}YS|~VT}0ISx}Px~bM~_Jt Gt'cy`y^"z[8{GwX{U|@R}6O}M~HJ:GL܂bxN__y&]AyZmzW{kT| RN|Os}sL~1I~G* g`dqc+af+^]iG[l^XV_oU*rQvQN4,yJ}HG_f͆vcc͆fQa i ]5k[nWzqTʄ tQdwNzJX}G}-f fcii`akk]`"nrZpWpsTndv7Q#,yM{J~GAeKj;baol_9n\ qYsGVuT wP߂zYMɂi|J\M|Mj]~JvuhGbt_u]Q%wZCxxX _yUF{PR|Oр~)MJ;G'Ta~w=^&xw\}RyYzWZ{T}R~)Ol@PLՀetJGRȂ`~z]]~X{S[~|@Y~}"V}TV~QNvL~IIŀ4G)u_}E}\}~:Z}~X.~(U~zSd~Q~1N~?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~O3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBQQSbUtWYZ[\]ߣ_ݣ`ڢaءbԟdҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgO3PAQQSbUsVXYZ[\ߨ[ۧ\إ^ԢbҠdўfўfўfўfўfўfўfўfўfўfўfўfўfўfўfўfўfO3OAPPRaTrVXYZZY۪Yب[ԥ_ңbѡdРfРfРfРfРfРfРfРfРfРfРfРfРfРfРfРfРfN2OAPPR`SqUWXYXܬVجWԩ\Ҧ_ѤbУdСfСfСfСfСfСfСfСfСfСfСfСfСfСfСfСfСfN2O@POQ_SpTWXWޭUذRԭXҪ\Ѩ`ЦbϥdϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeN2N@OOP^RnU}WWUٴOԱSѮYЫ]ϩ`ΨbΧcΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeM2M?NNO]RlUyVUܳPշMѲTϯYέ]ͫ_ͪaͩc̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨dM1M>MLN[RhTxT߱Q׿FѸOϴUͱZ̯]̮_ˬa˫c˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪dL1L=LKNXRdSzRھGHκP̶V˴Zʲ]ʱ_ɯ`ɮbɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcK0J+"?,Q6_>iDqJvPzS}UVWXYYZZZZZZZZZZZZZZZZZJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P8QGSWUgWwY[]^`dgilߙoۘrؘu֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙wK*O8PGRVTfVvYZ\]_behkܜn؛rԛuқvқvқvқvқvқvқvқvқvқvқvқvқvқvқvK*O8PFRVTfVvXZ[]^adgݢj١mӞrϝuΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvK*O8PFQUSeVuXY[\^adݪh٩iԧlͤqɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuK*N7OFQUSdUtWYZ\_bޱfڰfհgЫiʧkťoŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsL*N7OEQTScUsVXZ]`a۷cֶeѱfͬgʧhťkĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnL*N7OEPSRbTqVY[]]ܹ]ֹ_ѴbαḓfʩgƧiħkħkħkħkħkħkħkħkħkħkħkħkħkħkħkL*N7NDPSQaSpV|YZZݸYּYҸ]δ`̰cʭeɪfȩhƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjM)M6NDORQ`SnVyYYߵXٿTҼXη\̴`ʱbɮdȬfȪgƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiM)M6MCNPP^TkWuWW۾RSϻX̷\ʴ_ɲaȰcǮeǬgĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhL)L5LBMOP\TgVuU޹SLS̼Xɸ\ȶ_dzaƲcưdůfîgîgîgîgîgîgîgîgîgîgîgîgîgîgîgK(K4K@KMPXTbTxREMSɽXǺ\Ʒ^Ŷ`ŴbijdòefffffffffffffffK(J3I>LIQRSeQzDENTƿYļ\ú^ù`÷b¶cdeeeeeeeeeeeeeeeI'H1G;MDPQPhF|IPUY\^_`bbcccccccccccccccE"B*H.K@GW/k6{AJQVY[]_``abbbbbbbbbbbbbbbAB"H,FC*X2j:wCKQVY[]^^_`aaaaaaaaaaaaaaa>DD/$E-W6f>rEzLRVXZ[[\]^_______________>A/2'E1T:aAjGqMvRzT|V~WXYZ[[\\\\\\\\\\\\\\\>5 !2+B5O=YDaIgLkOnQpSrUsVtVuWuXvYvZwZwZwZwZwZwZwZwZwZwZwZwZwZwZwC#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#O0P>RLT[WkYy[]_dhlprtvxߔ{ܔ۔۔۔۔۔۔۔۔۔۔۔۔۔C#O0P=RLT[VjXx[]^bgkpruwޕz۔ؕוווווווווווווC#O0P=QKSZViXwZ\^`ejpsuݖyڕ֗ӗҗҗҗҗҗҗҗҗҗҗҗҗҗD#N/O=QKSYUhWvY[]_diosݛwٙ~ԘљΚΚΚΚΚΚΚΚΚΚΚΚΚΚD#N/OH/[7j>vFNSWZ]^_`abcddddddddddddd=BE!?6)I2Z:gAqHxO~TWY[\]^_`aaaaaaaaaaaaaa=A?$#7-I6W>bDjIpOuSyU{W}X~YZ[\]^_____________==&'70F9Q@ZFbKgMkPnRpTqVrWsXtYuZu[v\v\w\w\w\w\w\w\w\w\w\w\w\w\w; '+54AOKQWTcVnYx]bf߶iֽn̴sĭy=J'L2M>OJQVSbWlZu^|ceglƻpv|=K&L2M=NIPUT`WiZq_wc}޾dfimrx=K&K1LK&K1K;LFPQTZXa[g]t]`cegjlotz>J%J0J:LDPNTVW[XjXwV\bdfhjlot{>I%I/I8LBQJTPV^TmK{SY^bdfhjlpuyyyyyyyyyyyy>H$H-H6L>QDSQRbGpI}QW\`ceghjmrtttttttttttt?G#F+H3M9PAPTGe@sHPV[_adeghjnpppppppppppp@E!E(I.M1NDGW:g?uHPVZ^`cdefhkmmmmmmmmmmmm@CE$I'K4GH3Y:h@uH~PUZ]`acdegijjjjjjjjjjjjBAEH#F7-J5[fDoKvQ{UXZ\]_`abdeeeeeeeeeeee< A A0*)<1K:WAaFiKoQsTwVyX{Z|[~\]^`abbbbbbbbbbbb<> 5",,;5HOHSRV[Yc^icp߽dgmrx7CJ)J2L=OFSPVXY^_cao`ekpu|7CI(J1L;ODSMVTZX_]_n^~chmrx7CI'I0L9OBSIVNZT\aYl]|bfimqw}7DH&H/L7O>SDUJVXSdUp]{adgjmpu{7DF%H-L4O:S=SMO[JhQtY~^cfhjmptzƒ7EE#H*L0O3P@MPA_GkOvV[`dfhkmqv|ŁŁŁŁŁŁŁŁŁŁŁ7ED!H&L*M3LD9S@aFmMxTZ^befhkmqv{{{{{{{{{{{8BDH!K$J68G9V@cFnMxSY]`bdfhkmquuuuuuuuuuu8@DHG'<92I:X@dFnMvS|X\^`bdfhjmppppppppppp9 @DE>*,<4K;XBbGkMrSwW{Z~\^`bcegilllllllllll: @ B >$-.=6K=VD_IfMlRpUtXvZx\z]{_|a}b~dfhhhhhhhhhhh;?='.0<8H?REYJ`MdPhSjUmWnYp[q\r^r_satcudvdvdvdvdvdvdvdvdvdvdv:; *.3:;DALFRHWK[N^Q`SbUcWdXeZf[g\g^h_iajajajajajajajajajajaj7'# .+65==@DCJENHQKSNUPWRXSYUYVZW[Y[Z\~[\|]]|]]|]]|]]|]]|]]|]]|]]|]]|]]|]].'1'7/96=@3"!,/4;;FBOHVL\OaRdUgXjZk]m_naocpeqgr~js|lt|lt|lt|lt|lt|lt|lt|lt|lt|lt5<6$"..79>CDJGPIULYP\S^V`XaZc\d]e_faf~cg|ehzgizgizgizgizgizgizgizgizgizgi56 (!1,95>=ACDHFLJOMRPTRUTVVWXX~ZY|[Z{][z_[xa\wb]wb]wb]wb]wb]wb]wb]wb]wb]wb]1  !+4(70;6>;A@CCGEJGLI}OJ|QKzRLyTMxUMvWNuXNtZOs\Pr]Pr]Pr]Pr]Pr]Pr]Pr]Pr]Pr]Pr]P  $*."2)6.:2=6@8|C:zFuL?sN@rO@qQApRAoTBnUBmWClXDlXDlXDlXDlXDlXDlXDlXDlXDlXDc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzuc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzuc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzuc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzue- v5=F(N3T>XH[R^[ebjhplupxr}t~v|w{w{xzxzxzxzx{w|w|w|w|w|w|w|w|w|wg- x4=F(N2T=WHZR][bbiiontrxt}wx}y}z|{|{{{|{|z}yzzzzzzzzzzzzzzzzzzi- z4=F'N2SVHYQ\Z_cgkorޘv{ؒэ̉džÄs+ 3=H"L+O4S=VEYN\W`_ggߤmrמw{ϗɓďt* 3=H!L*O2S;VCYK[Sa[eg٪lrФt|ȝ|™v* 3=H!K(O0R8V@YH\OaWݵcfҲjrɩq|yw* 3=H K'O/R6U=XC\I_W`e͸grðn|v~x* 3>GK&O-R3U9X?\D[U^deql{szy) 3>GK$O+R0U5X8ZCTT\ccpj{pw{) 3>GK"O(R,U0X1VASSZbaogznt|}) 3>GK N$R'T(U0L?QQY`_mexkry~yx}) 3@GKN Q!R(J3L?POW^]kcviov|ˉvɔqǠmƬsx{{{{{{{{{( 3 AGKNOI+A7ICPNV\\hasf{lryzՂtӌoҗjҤhаmǰp°p°p°p°p°p°p°p°p°(2 CGJLH!8.?;FGMRR]Zf`newi}ms~yx؁t֊p֔m֟g֬eԵeԵeԵeԵeԵeԵeԵeԵeԵ'3 C GIG/%72>>DJKUP^Wf]mbsfxj|ns}yy݀v݈sݑoܛkۡkۡkۡkۡkۡkۡkۡkۡkۡ'5B F F7.(65=ADLJUO^VeZj^obsfvjyn{~r}zx~w}usq~q~q~q~q~q~q~q~q~&8BD<%.+77=BDLJTO\TaXf\j_mcpfrit}muzqwwuxuzxrxqxqxqxqxqxqxqxqxqx%<A=& 0,88>BEJJRMWR\V`Yc\f_hbiek}hlzknwoourprwpq{qq{qq{qq{qq{qq{qq{qq{qq{q&<< )!2-97@?EGHMKROUSXV[Y]\__`}aa{dcyfdvietlfrofprgprgprgprgprgprgprgprgprg$9# !+!4+<4?;BAEFIJLMPPSRUS}XU{ZVy]Ww_XuaYtdZrf[pi[nk\nk\nk\nk\nk\nk\nk\nk\nk\,  %.4(8/;5?:B>FAID~LF{OGyRIwTJvVKtXLrZMq\Mo^Nn`OlcPkePkePkePkePkePkePkePkePkeP %*/#4)8.;2?5|B8yF:wI;uKpQ?nS@mUAlWAjYBi[Ch]Cg_Dg_Dg_Dg_Dg_Dg_Dg_Dg_Dg_D  $).!3%|7)w:+t>-qA/oD0mF1lH2jJ3iL3hN4gP5fQ5eS6cU6bW7aY7aY7aY7aY7aY7aY7aY7aY7aY7X+h0u7? G*M4R=WF^MeS|lXyr\vx_t}arbpcodnenenenememendndndndndndndndndndX+h0u7? G*M4R=WF^MeS|lXyr\vx_t}arbpcodnenenenememendndndndndndndndndndX+h0u7? G*M4R=WF^MeS|lXyr\vx_t}arbpcodnenenenememendndndndndndndndndndZ+i0w7? F*M4R=WF]NdT~kY{q]xw`u}bscqeoeofogogngngnfofoeoeoeoeoeoeoeoeoe\*l/z7? F)M3R=WF[NcTjZ}p^zwaw}dufsgqhqipipipioiphphpgnhnhnhnhnhnhnhnh])n/|6>F)M2RF(M2R;WEZM`Uh[n`ud}{gzixkulsmrmqnqmqmrlpmlnkokokokokokokokoa(r. 6>F'M1S:WD[L^Tf[mateyi}kzmwnuorprpqoropomplrlrlrlrlrlrlrlrlrc't- 6>F&N/T9WBZK^Td[lasfxjm}oyqvrsrqrrqpqnsntoupvpvpvpvpvpvpvpve'v- 5>G%O.S7WAZJ]RbZkarfwkoqzsvtruovnvqurwsxsytytytytytytytytyf&x- 5>H$P-S6V?YH\P`Yj`qfvlptyvuxtyszszuzv{w{x|x|x|x|x|x|x|x|x|h%z, 5>I#O+S4VJ"O)R2V:YB\K^Sg[oeْxmҌs̈xDŽ|~~}~k$}, 5?K O(R/U7X?[G^OeZٟmeИvnʓ~tĎz~l$+ 5@KO&R-U4X<[C^LܫcZҥkeʞsn˜{u{m$+ 4AKN$R+U1X8Z>߳\Kճ`Y̫heäpnxu{n#+ 4AKN"R(U.W3Y:ڿWJϹ^XƱfdmnuv}|p#+ 4BKN Q%T*W-W9SI\Wdckmruz|q"* 5CKNQ"T%V'P7QHZVbcimouw|s"* 5EJNQSS#G6OFXU`aflmtt{|~z|u!* 6 FJMPRK!G4NEVS]`djksqzyzuqrvz||||||||w!)7 FJMOKA#H2MBTQ[]bhhpowv}~xÈrmihlqrrrrrrrrz )9 F JL J5?&H1M?SNZZ`efmmt}tzv|~o҆jБeΞa̫^ʺbļghhhhhhhh~):F I I ;4=*E5L@RKYV_`dhjozqtsxyl|gb]ߦX޵X\^^^^^^^^*=EG? *4"<.C9ICOMWU]]bcgi~lmxrqryulwhydyay]yW{V{V{V{V{V{V{V{V{+@DA*3%;1B;HEMMTTYZ^`cdghzlkurmpxolpiqfqcp`q^r^r^r^r^r^r^r^r,@@%!+4(;2BGCLGPJ~TL{WOxZPu^RraTpdUmhVkkWioXfsYcyZb{Zb{Zb{Zb{Zb{Zb{Zb{Zb{Z  '04&8-<3@8D<H?{LAxPCvSEsVGqYHo\Im_JkbKieLghMekNboOaqOaqOaqOaqOaqOaqOaqOaqO  %+0"5(9,=0|A4xE6uI8rL:pO;nQhY?g\@e_AcaBbdC`hC_iD_iD_iD_iD_iD_iD_iD_iDӾ %+0!}4%w8(s<*p@,nD.kG/iJ1hL2fN2eQ3cS4bV5`X5_[6]]7[`7[a8[a8[a8[a8[a8[a8[a8[a8 %y*s/n3j7!g;"e>$cA%bC&`E&_H']J(\L([O)YQ*XS*WV+UX+UY,UY,UY,UY,UY,UY,UY,UY,R,Z, h2r:xA!{H*zN3wV:u^@rfFomJktMi|OfQdRbS`S_T_T_T_T_T_T`S`S`R`R`R`R`R`R`R`RR,Z, h2r:xA!{H*zN3wV:u^@rfFomJktMi|OfQdRbS`S_T_T_T_T_T_T`S`S`R`R`R`R`R`R`R`RS+[+ j2t:zA!}H*|N2yT:v]AseFplJmtNj{PgReScTaT`U`U`U`U`U`UaTaTaSaSaSaSaSaSaSaSU+^+ l1v9}@!G*M2|S:y[AvdGskKosOlzQjShUfVdVbWaWaWaWbWbWbVbVbUbVbVbVbVbVbVbVW*`* o1y8@ F)M2R:|ZAybGvjLrqPoySmUjWiXfXdYcYcYcYcYcYdXdWbYbYbYbYbYbYbYbYX)c)q0|8? F)L1R:XA}`HyhMvpQrwToWmXkZi[f[d[d\d[d[eZfYd[a\a\a\a\a\a\a\a\Z(e(t07>F(M0R9WA_H}gMynRvvVs}XpZn\k]i]f^e^e^f]g\d]c_b`b`b`b`b`b`b`b`]'h(w/7>F'M/R8W@\GeN}mSytWv|Zs\q^n_k`i`f`g`g_f_eadcedededededededed_'j'y.6?G%N.S6W?[FcMkS}sXz{[w^s`pbmbjcibgbgbfdgehfigigigigigigigiga&m&|.6?H$O,T5X=[EaLjSrX~z\z`ubqdnfkgighhigkhkiljmkmkmkmkmkmkmkmkb%o&- 6@I"P*U2Y;\C_KiRrXz]|bweshqjoknlmlnlolpmqnqnqnqnqnqnqnqnqnd$q%- 7AJ!R(U0X8[@^HgPpXۆy_Հd|hykwmuotpsprptpuquqvqvqvqvqvqvqvqvqf$s$, 7BKR&U-X5[=^EeOْnXҌw`̇fǃjn}p{rysxtxtytytztzszszszszszszszsg#u$, 7CMQ#U*W1Z9]BڟcNјkXʒt`č|gloruv~w}w~w~v~v~u~u~u~u~u~u~u~ui#w#, 8DNQ!T'W-Y4ݪZAӥ`N˞iXØqaygmqtwyzzyyxwwwwwwwwj"x#, 8ENQT#V)X1زT@ͪ]MŤfXnavh~mrvx{||{{zxxxxxxxxk!z", 9FNQSU$ݴS0ҸR?Ȱ[LdWl`sh{nrwz|}~}|{zzzzzzzzm!|"- : GMPRTG.̿P>¶YKbVi`qgxnsw{}~|{{{{{{{{o ~!-: IMPQ޹OD-NIKJ5 ;A'I6QDYP`Zgbniuo{~ttxo{j}f~c~d}h}l|l{l{l{l{l{l{l{x/@HH>/;C$H3PAWM^We_lfysls{pmɅtgǐwbŜz^é{[{Zz^zbybybybybybybyby|/BFB" /9B%J0O=VI\RcZ{jasqglykf܃o`ڎr[כtWԨuSҸuQuTuXvXvXvXvXvXvXvXv0CB"$ /8A)H3N}PBxUEtZHp^KmcMigOflQbrR^yTZTWUSUPUPUPUPUPUPUPUPU! */4#9)>/B4}G8xL;tQ>pU@mYBj]DhaFeeGbjI^oJ[tKX{LTLQMQMQMQMQMQMQMQM պ %+0 5%:*z?.vD1rH4oL6lP8iT9gX;d[]g?Zk@WoATtBQ{CQ{CQ{CQ{CQ{CQ{CQ{CQ{Cش &,~1 w6#r;'n?)kD+hG-fK.dN/bR1`U2^X3\\4Z_5Wc5Ug6Sk7Po8Oo8Oo8Oo8Oo8Oo8Oo8Oo8ϼ !z't,n1i5f: d>"aA#_D$]H%\K&ZM'XQ(VT)TW)RZ*Q^+Oa,Me,Le,Le,Le,Le,Le,Le,Le, |u o i&e+`/]3[7Y:W=U@TCREQHOKMNLQJTIW G[!G[!G[!G[!G[!G[!G[!G[!K,R,Y. d6j=lD!kL(jV/h^4eg8ao;^x>\@YAVBTCQCPCNCNDODPCPCQCQBRBSASASASASASASAL,S,[. e5k=mD!lK(kU/i^4ff9co<`w?]@ZBXCUCSDQDODOEPDQDQDRDRCSBTBTBTBTBTBTBTBN+V+]- h4n<pC!oJ(nS/l\5ie9fm=cu@`}B]CZDXEUFSFRFQFRFRFSFSETEVDVDVDVDVDVDVDVDO*X*`, k4q;sB!sI(qQ/o[5lc:ik>etAc|C`E]FZGXGVHTHSHSHTHTGVGWFXFTGTGTGTGTGTGTGQ)Z)c+ m3t:wA wH(tO/rY5ob;lj?hrBezEcF`H]I[IYJWJUJUJUIWIXHYGVIUJUJUJUJUJUJUJT(\(f* q2x9{A |H'zO/vW5s`;oh@lpCixFfHcJ`K^K[LYLXLVLXKZKYJWKVMVNVNVNVNVNVNVNV'_'i) t1|9@G&N.zT5w^;sf@pnElwHiJfLcMaN^N]N[NZNZMZLYNXPXQXRXRXRXRXRXRXRX'b&l( x09@G%M-S4{[;xdAtmEpuIl~LiNfOdPbQ`Q_Q]P]O[PZR[T\U]V]V]V]V]V]V]V[&d%p'|09@G$M+S3X:}b@xkFttJp}MmPjQgReScTaT_T^T^U_W`XaYbZbZbZbZbZbZbZ]%g$s&/9AG"M)R1W9_?}iExsJt|NpQlTjVgXeYdYcZcZdZe[f\f]g]g]g]g]g]g]g]_$i#v%/ 9AH N'S/W6]>gD~qJx{PtTqWnZm\k]j^i_h_i^j_k`k`l`l`l`l`l`l`l`a#l"x$/ 9BIO$S,W3\;eCڄnK~xRzVwZu]s_qaobncncncococpcpcpcpcpcpcpcpcb"n!{$0 :BJP!U(X/Z8ّbCъkL˅tSƁ}X}\{`ybwduftgsgsftftftftftftftftftftfd"p }$0 :CLSV$X+۞X8җ`CʑiLČqSyY^b~e}g{iyjxjxjxixixhxhxhxhxhxhxhxhf!r$0 : DNSU ߥU)դT7̝]BėfLnTvZ_cfikl~m}m}l}k}j}j}j}j}j}j}j}jg s$0; EPRSڭL(ϩQ6Ƣ[AdKlTtZ|`dhkmnoonmlkkkkkkki u$0; G OQPԶD'ʮO4YAbKiSqZy`eilnpqqponmmmmmmmjw$0< I N O۵GϻC%ŴM3W?_JgSoZv`~eimpqrrqponnnnnnnly$0=K M L 4A$K2U>]IeRlZt`|ejmpr{sxsxrzq}p~o~o~o~o~o~o~on|#0>KK޸D2?"I0R=[HcQjYq_yeim|pwrstptosrrupwowowowowowowop~#0>IG$0< G.P;YF`OgWo^vchyltporkshsfsjqmpoooooooooooooos#0?Gߺ;%/:E+N8VC^MeUl\~taw|frjlnhpcq`r^qapdofofofofofofofov"/?A&3 :C(L5T@\JcQ}jXvr^pzcjgej`l\nXnVnWm[m]m]m]m]m]m]m]mz -;޿+'4>D%K1SHG?C?@@=@=@=@=@=@=@=@ѷ"(.w3p8!k>$gC'dH)aM+^Q,\V.YZ/V_1Sd2Pj3Kp4Hw5D~6A6>7>7>7>7>7>7>7Ӳɾ  {"t(n.h3d9a=^B![F"YJ#WN%TR&RV'O[(M`)Je*Fk*Cp+@v,>{,>{,>{,>{,>{,>{,>{,˺~ wp j"d(`-\2Y7W;T?RBPFNJLMJQHVEZC_ @d =i!;m!;m!;m!;m!;m!;m!;m!ÿzpj d_Z V& R* P/N2L6J9H<F@ECCGAK?O>S;W9\7_7_7_7_7_7_7_E-L,P-U2 [:]B^K]U$[_(Yh,Vq/Rz0O2L3I4G4E4D5B5@5?5?4@4A4C3D3F2F2F2F2F2F2F2G,N+R,W1 ^8`@`J`T$^])\f-Yo0Ux2R3O4L5J5H6F6D6C6A6A6B5D5E4G4G3G3G3G3G3G3G3H+O*U+Z0 a7c?cHcR%a\)^e-[n0Xv3U4Q5O6L7J7I7G8E8D7C7D7F6H6I5F5F6F6F6F6F6F6J*R)W*]/ d6g>fGfP%dZ*ac.^l1[u4X~6T7R8O8M9K9J9H9G9F9G8I8J7H7G8G9G9G9G9G9G9M)T(Z)a- h5k=kEiN%hX*ea/bj2_s5[|7X9U:S:Q;O;M;L;J;J:K:J9J9I:HJ@J@J@J@J@J@J@R'Z&a&i* q4u<vCtJ$pS*n\0jf4gn8cw:`<]>Z?X?V@U@T?T?R>Q=N?MANCODODODODODODODT%]$e%n* v3z;{BzI#vP)rZ/oc4kl9gua@^A\B[BZBXBWAVATBRDSFTGUHUHUHUHUHUHUHW$`#h#r)z2:AH!}N(wV/ta4pj9lt=h~@eBbC`D_E\FZGYGYGYGXIYJZK[L[L[L[L[L[L[LY#c"l"v)2 :AGM&~T-y^3th9pr=l|AiDfGdIbJaK`L_L^L^L]N_O_P`P`P`P`P`P`P`P["e!o!z(2 :@GL$R+[1|f8vo>qyCnGlJjMhNgPeQdQdRdQcRdSeSeTeTeTeTeTeTeT]!h r }(1 9@FL Q'Y/ڂc8|l?xuEt~JrMpPnRlTkUjViViViViVjWjWjVjVjVjVjVjV_ ju '1 9 @FKO#ڏV/щ`8˃i@qF{zKxOvRtUrWqXoYoZnZnZnZnZoYoYoYoYoYoYoYa lw '19 @FKܛJ"ҕS.ː]8Êf@nGvL~Q|TzWxZv[u]t]s]s]s\s\s[s[s[s[s[s[s[cnz&09 A GK֡E!͛Q-ĕZ7c@kGsM{RVY}\|^z_y`x`w_w_w^w]w]w]w]w]w]w]ep|&09A H ܦEѦC ǠN,X7a@iGqMxRWZ]`a~b}b|b{a{`z_z_z_z_z_z_z_fr~%09AI ױ5̫A¥L+V6_?gGnMvS~W[^acdddcb~`~`~`~`~`~`~`ht%/9AߪFҶ3ǰ?J)T5]>dFlMsS{X\_bde|fze|d}cbaaaaaajv$.8Aڵ5ͼ1=H(R3Z=bFjMqSyX\`c|exfugrftevdxcybybybybybybly#-6=. ;F&P2X<`DgLoRvW\~`yctepgmgkglfodqcrcrcrcrcrcrcn|!*1ܷ+, 9D$M0V:^CeJlPtV||[v_qbmeifegcfcegdjcjcjcjcjcjcjcq%% ) 6A"K-T7[@cHjNzqTtyYo]j`ecae^e[e[d^cacbbbbbbbbbbbbt &3?H*Q4Y=aEyhKsoPmwUhYc]^_ZaVbSbRaUaXaY`Y`Y`Y`Y`Y`xٴ*4=F&O0W9x_@qfFlmLfuPa~T\ʼnWWÕZR\O]L]K\L\O]P]P]P]P]P]P]} ѹ ,7 >E"M+yU3r]:kd@ekE`sIZ|MUևPPԔSLҡTIϱUFUEUDVGWHWHWHWHWHWHWձ˿ , 5<C~L&wT-pZ3ja8dh=^oAXxDSGNIJKGLDLBK?L@N@O@O@O@O@O@O ٪θ * 29?xG%rO*lV/g\3bc6]i9WqM@HAEBCABA@AfD!bJ$^P&ZU(V[*Sa,Nh.Ip/Dy1?2;3734323232323232323اʹ¿ ~ v&o-h2c8_>\DXIUN!QS"NX#K^%Fe&Am'=v(9)5*1*.+-+-+-+-+-+-+ϰżyrk f'`-[2W7T<QANEKJHOETCZ>a:i7q 3x 0!-!,!,!,!,!,!,!Ǹulf`[V% R* N/ K4I8F<D@BE@J>O;T7[4a1h.n+v+x+x+x+x+x+xvkb[UOJG D$B)@->1=5 ;9 9= 7B 5G 2L /R ,W *] 'c'd'd'd'd'd'dA-F,I-K0L7 P@QJQTO^Lh!Hq#E{$B%?&='<':'8'7'5'4'4'3'3&3&5%4$3$3$3$3$3$3$B,G+K,M/O5 S?TISSQ]Of!Kp$Hz%E&B'@(>(<(;(9(8(7(7(6(6'6'5&5%5&5&5&5&5&5&D+I*N+P.R4 V=WGVRU[Re"On%Kx&H(E(C)A)?*>*<*;*:*:)9)9(8(6'7'7(7(7(7(7(7(E*L)Q)S,V2 Z<[EZPXY Vc#Sl&Ov(L)I*G+E+C+A+@+?+>+>+=*<*:)9)9*8,8,8,8,8,8,H(O'T(W*\1 _:_C_M]W Za$Wj'Ts)P}+M,K,I-G-E-D-D-C-C-A,@+?+<-;.;/;/;/;/;/;/K'R&X&\(a0 e9eAcJbT _^%\g(Yq*Uz,R-P.N/L/J/I/I/H/G.E.E-A/?1>2@3@3@3@3@3@3N&U$\$a'g/ k7k?iGfQ d[%ae)^n,Zx.W/T0R1Q1P2O2N1L1L0K/H1E4D6E7G8G8G8G8G8G8P$Y#_#f&l- p6q=oElN iX%fb)bl-_u/\1Y2W3V4U4T4R4Q4O4O4M7L9K:L;M[?Z@Z@Y@YAXBXCYCZDZDZDZDZDZDX!bjs$z*2 9@F}N yY&tc.om3lv8i;g>e@dBcCaD`E_E_E_E^F^G_G`G`G`G`G`G`GZdnw#~)18 >DLـV&z`.vi4rr:oz=mAkCjEhGgHfIeJdJdJcJdJdJdJdJdJdJdJdJ\gqz"(06 <AڌHцR&ʁ\.}f5yn;vv?sCqFoHnJmLkMjNiNiMhNiMiMiMiMiMiMiMiM^it}"&.5: ޖ=ӒDʍP%ÈZ.c5k;|s@y{DwHuJsMrOpPoQnQnQmQmPmPmOmOmOmOmOmO`kv!%-37؜6͗BŒM$W-`5hI"S,\4d;kArFzJNQTV}X|X~{X}zW~yVyUxTxTxTxTxTxTeq}!$%Ԯ ɫ/ <G!Q+Z3b;iApFxKORUW|YyZvYuXw~Wx}Vz|Uz|Uz|Uz|Uz|Uz|Ugsݫϳİ- :EO)X2_:g@nFuK~OS}VyXuZr[o[nZpXrWsVsVsVsVsVsVivճ ʹ+8CL(U1]9e?lEsJ{OzRvVqXnZj[h[gZhYkXlWlWlWlWlWlWlyتϷÿ(5@J&S/[7c>jD}qIxyNsRoUjXfZc[`[_ZaYcXeWeWeWeWeWeWo| ҮȻ$2>H#Q-Y5`<|gBwoGqvKlPhScV_X[YYYWXXX[W]V]V]V]V]V]Vr֧ͳ / ;E N)V1{^8ue>plDjtHe}LaP\SXUTVQVOUOURUUUUUUUUUUUUUvѬǸ+ 8BK&zT-t\4nc:ij?drC_{GZKUNQPMQJQHPHPJQLQLQLQLQLQLQ{  զ˱ *5?zI!sQ(mZ.ga4bi9]p=XyAS˃DOʏGKȝHGūJDþJCIBJBKDKDKDKDKDKDK ڠϬŸ +5 |>tFmO"gW(b_-]f1Xn5Sv8N߁;Jݍ>Fܛ?Bڪ@@ؽA>@=@;B6<588696969696969סͮù'x/ p6j>eF`M\T!XZ#Sa&Ni(Jr*E|,A-=.;.9.8.7-5-5-5-5-5-5-ܜЩƵ ~w#p+ i2c9_@[FWLSSOYK` Gh"Bp$>{%9&5'3'1(0(/'/'/'/'/'/'Ҧɲ{ smg% a, \3X9T?QEMJJPGVC]?e:n6x2.+ ) ( ( ( ( ( ( ˯{qib]X%S+ O1 L7 J<GADFAL>R:Y6`2i.s*}'$""""""Ķ}pg_YSMI"F'C,A1>6<; :@ 7E 4K 0R ,Y )a %j "s{sf]VOJ FB>;!9&6*4.22/7-<)A&H"OV^ekkkkkk<,@,C-C0B6A> CICTA^=h:r7|531/.,++**)((&$$#####>+B+D,E/E4E= FHFRD]Af=p:z86421/..-,,,*((&%%%%%?*D*G*H-H3I< JFJQH[EeAn>x<9864322110/-,+('''''A)F(J(L+L1M: ODNNMXJbFlCv@><:8776655220-+ * * * * * D'J&N'P)R/S7 TATKRVO`LiHsE}C A ?!=!=!YHWSU]RgNpKz!H"F"D#C#C#B#A"A"?">!= :#7%7&6'6(6(6(6(6(J$P#V"[%^,`3 `;_E]OZZWdTm!Qw"N#L$J%I%I%H%G$F$E#D"A%@'>)>+=,=,=,=,=,=,M#T!Z `$d*f1g9 eAbL`V]aYj"Vt$T~%R&Q'P'O'M(K(J(I)I)H*G,F.E/E0E0E0E0E0E0O!W^e#j)l.m7 l?hGeRb]_h"\r%Z{'W)U*T,S-R-Q.P.O/O/O/M1L3L4L4M4M4M4M4M4R [bj"o'r-t4 s<pDlNiZfd#bn'_w*]-\/[0Y1X2W3V4U4U4U4T6S7R8S8S8S8S8S8S8U^fn!t&w+z2z9 x@tKpVl`$ij)fs-d{0b2a4`6_7]8\9[9Z:Z:Z:Y;Y`>_>_>^?^?_?_?_?_?_?_?Ycmv|#',2܇9 уD~OzY%vb+sk0ps4n{7m:ki@gAfBeBdBdBcBcBcBcAcAcAcAcA[epy"$(-ԍ5 ˉAÅLV%}_+yh1vo5tw9r

oAnBlDkEiFiFhEgEgDgDgDgDgDgDgD]gr| "#ە%ϓ2 ŏ?JT$]+e1|m6zt:w|=u@tBrEqFoHnHmHlHkGkGkFkFkFkFkFkF_iu~՚!ʘ0 <GQ$Z+b1j6q:}y>{AyDwFuHtJrKqKpJpIoHoGnGnGnGnGnGalwݚОŜ.:EO#X*`1h6o:v>B~E|HzJxL|wLzvMxuLxtKysJzrIzrIzrIzrIzrIzrIcny֟ ˢ+8CM"V)^0f6m:t?|BFI|Kx~Mu|Ns{NqzNqyLrxKtwJtvJtvJtvJtvJtvJep|ٚУŧ)6AK T(\/d5k:r?zC}FyIuLrNnOlOjOj~Ml}Lm|Kn{Kn{Kn{Kn{Kn{Kgsԝ˦&4 ?IR'Z.b4i9p>{xBwFsIoLkNhOeOcOcNeMgLgKgKgKgKgKiv٘ϡŪ#1 =GP%X,`3g8zn=uuAp~ElHhKdM`O^O\O[N]M_L`K`K`K`K`Kly Ԝʥ . :DM#V*~]0xe6sl;ns?j|CeGaI]LYMVNTMTLULXKXKXKXKXKXKp } ڗϡŪ+7AK }S'w[-qb3li8hq|HvQ#pY)k`.fg3ao7\w;X>SAODKEHFFEFEEEGFHFHFHFHFHFyږϡū !/ {;tEnNiV$d^)_e-Zm1Vu5Q8M;I=E>C?A?@>??>@?@?@?@?@?@Ԝʧ {+t7 mAgJbS]["Xc&Tk*Os-K}0G҉2CЗ4@Υ6>̷6<6<5:7888989898989ڗΣĮ|u*n4 h>cG^PYWT_Pg!Lo$Hy&D)A*=+;,9,8+6-4/3/3/3/3/3/ҟȪ}un'h0b9 ]AYIUPQXM`IhDq@| =":#8#6#5"4!1$0$0$0$0$0$֛˧²~t mg"a+[3 W; SBPILPHWD^@g6H3S 1^ .h ,r)|'%$""   9+<*>+>.<3<<:G7Q 5\ 2f0p-z+)'&%$$##"!!;*?)A)A,@2@;>D =O :Z 7d5n2x0.,+*)((''&$#" =(A'C'D*E0E8CB BL @W=a:k7u5~310/..--,+))&#!     @&D%G%I'J.K6I? HI FTC^@h=r;{97655443210.+(('''''B$H#L#N%Q,Q3O< NF LQJ[GeDoAx?><<;;:98762100/////F#K!P T#X*X1U8TB SMPXMbJlHuF~DCCBA@?>=<:98 8!7"7"7"7"7"I!OTZ"^(_.]5Z> YIVTS_PiNrL{KJIGFEDDCCB!A#@$?%?&?&?&?&?&LSY`!d&e,d2b: _D\PZ[WfUoRxQP O!N"M#L#K$K$J$J$I&H(G)F)F*F*F*F*F*OV]ei$k*k/i6f@ dLaW^b\kZs X|#W$V&U'T(S(R)Q*P*P*O+N,N-M-M.M.M.M.M.QYbin"q'r,q2o< lHhSf]cf ao#_w&^(\)[+Z,Y-X.W/V/V/U/T0T1S1S1S1S1S1S1T\ems v$x(x.v8 sDpOmYjb!gk%es(d{*b-a.`0_1^2]3\3[4[4Z4Y4Y4Y4Y4Y4Y4Y4V_iqw{!}$(}4z@vLsVp_"ng&ko*jw-h/g1e3d4c6b7a7`8_7^7^7]7]7]7]7]7]7Xaktzօ#̄1À>}IySv\"td'ql+os.m{1l3k5i7h9f:e;d;c;b:b:b9a9a9a9a9a9Zcnv}݇Њ Ɖ/;FP|Y"ya'wi+tp/sx2q5o7n9l;kg=g=fzj=zi=zi=zi=zi=zi=^hs|ڊѐƓ*7 BKT!\'d+k/|r3zz6y9w<u>|t@yrAvqBtpAso@sn?tn?tm>tm>tm>tm>tm>`ju~ Վ̔'5 @IR Z&b+i/p3x7~:||=xz?uyArwCovCmuCmtBmsAmr@nq?nq?nq?nq?nq?bmxڊВǘ%2 =GPX%`+g/n3}v7y~:v>r@oBk}Ci{DgzDfyCfxBgwAhv@hv@hv@hv@hv@dp { ֎̕œ"0;ENV$^*e/|l3wt7s|:o=l@hBeDbD`D_C_~B`}Ab{@b{@b{@b{@b{@f s ~ Ғș -9CLT#\(zc-vj2qr6mz9i=e?aB^C[DYDXCXBYA[A[A[A[A[Ai v ٍΖÞ*6 @J~R yZ&ta+oh0kp4gx7c;^>Z@WBTBRBQBQAQ@S@S@S@S@S@mzӒɛ&3 >}GwPrX#m_(if,en1`v4\8X;T=P?M?K?J?J?I>K>K>K>K>K>rڌϗĠ!/}: vDqMlUg]$bd(^k,Zs0U}3Q6M8J:F;D;D:C:B;C;C;C;C;C;wԒʝ|*u6 o@jJeR`Z\b#Wi&Sq*O{-K0G2D3A4?4>4=4<5;6;6;6;6;6~ۍϙţxr$m1g< bF]OYWU_QgMo"Iy%EDŽ(AƑ*>Ġ+<°,:,9+8,7.6/6/6/6/6/ԕɠ|pje,`7[A VJRSN[KcGlCv@ہ<ڎ!9؞"7֮"5"4"3#2$1&1&1&1&1&ڐ͝ħtke_(Y2U;QD NM JUF]Ce@n[ :d7n3z0.,*)((((((ʣ~pd\ VQL$H,D3A:>@;G8O4W1` -k *w & $ " !      ītg[TN JEA#>);/855;2A.H+Q&Z"eswj^RKFA =:64#1(/.,3)9%@ HQ\hu {m`TJC>962 /,*(!%%"*06>G Q[envvvvv3,5+6,4/15.=+G&R"]hr|    5*7)8*7-433<0E+P'[#f!py            7)9(:(:+818:5C1N,Y)c'm%w # !              9'<%=&=(=.=7;A8K3V0` .j +t )} ( ' & % % $ $ # # !          <%?#A#A%C,C4A>>H:R7] 5g 2p 1y / . - , , + + * ) ( ' % " !      >#B!E G#J*J2H:EDAO >Y |=<<;;98766543222222EJNTX%X,V3R<OF MQ J\ HgFpEyDCBAA@??>>=<;::9999HNSZ^#_)]/Y7VATM RY OcNlLtK|KJIIHGFEEDCBA A A A A A KQX_c!e&d+a3^=\I YTX^VgToSwRQPOONM L K K!J"I#H$H$G$G$G$G$NU]dhj"j'h-f8dD aO_Z]c\kZsYzX W!V"U#T$S%R%Q%Q%P&O'N'N'N'N'N'N'PXahloo!n'm4k@ iKfVd_bg`o_v!^~#]$\&['Z(Y)W*V*V*U*T*T+S*S*S*S*S*SZdkprsu"t1r= oHmRj[hcfk er#cz%b'a)`*_,^-\-[.Z.Y.Y.X-X-W-W-W-W-U]gnsvw zz.x: uErOpXn`lh!jo$iv'g~)f+e-c.b0a0_1^1^1]0\0\/\/\/\/\/W` iqvy} ǀ+~7 {BxLuUs]qe"ol%ms(l{*j-i/h1f2e3d4~b4}b3|a2{a2{`1{`1{`1{`1{`1Yb lsy ~͂…(5@}J{Sx[vb"tj&rq)px+o.m0l2~k4{i5yh6wg6vf5ue4ue3td3td3td3td3td3Zd n v |Ђdž&3> HQ}Y{`"yg&wn)uv,s~/~r1{q4xo6un7rl7pk7oj7oi6oi5nh4oh4oh4oh4oh4\ g q yր̆‹#1< ENW^"~e&|l)zt,{y|/xw2uv5qt7ns8lq9jp9io8in7hm6il5il5il5il5il5^ i s |҄Ɋ .: CLT\!c%}j)yq-u~z0r}3n{5kz7hx9ev:cu:bt9bs8br7bq6cq6cq6cq6cq6a lvψŎ ,7 AJRZ {a%wh)so,pw/l2h5e7b~9_}:]{:\z9[y8\x7\w7\v6\v6\v6\v6cozքˌ)5?HPzXu_#qf'mn+ju.f~2b4^7[8X9V:U9U~8U}7U|7U|6U|6U|6U|6fs~҈Ǒ%2< ~FyNtVo]!ke%gl)ct-`}0\3X5T7Q8O8N8N7N6N6N6N6N6N6jwڃ΍Ö!.~9 xCrLnTi[ec"aj&]r*Y{-U0Q2N4K5H5G5G4G4F4F4F4F4F4o|ԉɓ}*v6q@ lIgQcY_`[h"Wp%Sy(O+K.G/D0B1A0@0@1?1?1?1?1?1u܃Ϗřyt%o2j< eF`N\VX^TePm Lv#I%E(B)?*<+;*;*:+9,9,9,9,9,|Պʖ~p kf,a7]A YJ URQ[McJkFtC? <"9#7#6"6"5$3%3%3%3%3%݅ϒŝwh_\$X0T;PEMN IV F_Cg@q=|:Έ7͗4˧2ɻ110.....ԎɚpbXTP)L4I>FGCP@Y=b :k 8v520.ߵ,+*)))))͘ãvh[S OJ#F,C5@==E:N7W4`1k.w , ) ( & % $ # " " " " ơzm`TMHD@$=,:37:4A1I-R*\'h#t ~pdWMFA =96!4(1..4+:'B#KUao     tgZOE>95 2/,*!'&$,!29BL X fuxj]QG>62.+' %" #)0 8ANZfq}.+0*/+,.'4$<FQ\f p y0*2)1)/,*1):%D OZdnw        2(4&4'2*//.8,B'L!Wakt}   5%7$7$5&5-562?.I)T%^!hqz       8#:!;!:#<*<39<6F1P-[*e'n%w%~$$#""!!     :!=>@!B'B0@9=B9L5W2a/k.s-{-,,++*)('&%% $ # # # # # # =ACGI%I,G5D>@Hu =| = < < < ; : : 98876554444DINTW W%T,P4M>KJIUH_ Gh Fp FwEEDDCBAA@?>==<<<<<GLSY\\!Z&W.U9TERP QZ PcOkNsMzLKKJIHGFFEDCCBBBBJOW]aa_]']4\A[L YVW_VgUnTvS}RQPPONLLKJIIHHHHLR [aeecd"e0d=bH `R^[]c[kZrYyXWVUT S!R!Q!P!O"N"N"M"M"M"M"OV _ehh h kk-j9hD fNdWc_ag`n^u]}\ [!Z"Y#X$V%U%U%T%S%S$R$R$R$R$QY b h k mn pq*p6nA lKjTh\gdekdrby a"`#_%^&\'[(Z(Y(~X'}W'|W&|W&|W&|W&|W&S [ d j nrsvw'u4s> qHoQmYlajhhogv!e~#d%c'b(~a*{_*y^*x]*w\*v\)v[(u[(u[(u[(u[(U ^g mrvxz{${1y< vFtOrWp^nemlkt"j|$i'}g)zf*we,uc,rb-qa,p`+p`+p_*o_)o_)o_)o_)W `iov{}!/~:{D yLwUu\scqj pq"|ny%ym(vl*tk,qi-nh.lg.ke.je-jd,jc+jc+jc+jc+jc+Yclsz ,8A ~J|RzZxa}wh zuo#vtw&sr(pq+no-kn.hm/fk/ej/di.dh-dg,dg,dg,dg,dg,[fnw~ *5? HPX{~_x|f t{m#qyu&nx~)kv+hu-es/br0`p0^o0^n/^m.^l-^l-^l-^l-^l-]hq{Ȃ'3= F~NzVv]rdok#ks&h~|(e|+b{-^z/\x0Yv0Xt0Xs/Xr.Xq.Xq-Xq-Xq-Xq-`kuŇ$0; ~DyLtTp[mbii!fq%bz'_*[,X.U~/S|0Q{0Qy/Qw.Qv-Rv-Rv-Rv-Rv-coz̄ -~8xA sJoRkYg`ch `o#\x&Y(U+R-O.L.K.K-J~-K}-K|,K|,K|,K|,hsȉ })w5r? mGiOeWa^]fZm Vv#R&O(K*H+F,D+D+D+D+D+D+D+D+myυďzu%p1k;gD bM^U[\WdSkPtL~!H$E&B'@'>'>&='='='='='='sրʌ|qlh,c7_A[I XQTYPaMiIrF|B? @;"9,754>2G0Q-[+f(r&$"!àwi\PE=963"1*.2+9(B%K"V bp{m`TI?830-*'%%,!2:DO\ k {qdWLB91-)& # $*2 ;FTbsugZND;2+&"  ")2<IWfs)*))'*#-3;D OZdnv~+(,'*(&+ 09BM X bkt|.&.%-%)(&.%7 @JU_ h qy0$1"0"-$-++4)=#GR\env} 3!443!4(310:+D&N"Xbksz6879;&:-764@/J+T(^&g$p$w#~"""!  9;<@A"A*>2;;6E3P0Z/d.l-t-|,,,,++**)))('' & & & & <?BFHG%D-@6=@9K8V7`7h7p7w7~6666554322 1 0 0 / / / / ?CGLNM I'E0B:BFBQA[Ad@k@s@y ? ? > > = = < ; : : 9877777BFMRSRNJ(K5LAKLJVJ_ Ig Hn Gu G| FFEEDCBA@??>====EI Q VXVPR#T1T=THRRQ[ Pc OjNqNxMLKKJIHGFEDDCCCCHMU Z [ YW Z\-\9[DZN XW W_VfUmTtS{RQPPNMLKJJIHHHHJ QY ]^`_ ac)c5a@`J ^S ][\c[jYpXwWVUTSRQPO~N~N}M}M}M}ML T\`dfegi&h2g=eG dP bXa_`f^m]t\|[ZYX~W{U yT xSwSwRvRvQvQvQNW_chkjln#n/l:kD iM gUf]ddcjbqay`~^{] y\!w["tZ"sX"rX"qW!qV pV pV pV pV PZagmppqr r-q8pB nK lSjZiaghfo}ewzdxc ub!sa#p_$n^$l]$l\#k[#kZ"kY!kY!kY!kY!R\dkqtuv ww*v6t?rH qPoXm_}lezkmwjtth}rg!of#me$jd%hb&fa&f`%e_$e^#e]"e]"e]"e]"T^fntxz{||({3y=wF uNtV{r]xqcupkrnrom{ll"ik$gj%dh&bg'`e'`d&`c%`b$`b#`b#`b#`b#Vajry}%1~;|D ~{LzyTvx[svbouimtpjry gq"dp$ao&^m'\k'Zj'Zi'Zh&Zg%Zf$Zf$Zf$Zf$Ydmv}".9}B yJ tRq~Ym|`j{ggzndxvaw"^v$[t&Xr'Vq'To'Tm'Tl&Tk%Tj$Tj$Tj$Tj$]gr{+}6x?sH oPlWh^eebl^u[~~!X|#Uz%Ry&Pw'Nu'Ms&Nr&Nq%Np$Np$Np$Np$`kwƀ |(w3r=nE jMfUc\_c\jYsU|R!O#L%I~%H|%Gz%Gy$Gw$Gv$Gv$Gv$Gv$eq|Åzu$p0l:hCdK `S]ZYaViSqO{LI!F"C#A#A"A"@"@~"@~"@~"@~"jwʂzrmi,e7a@]H ZP VWS_PgLoIyFB@=;;::::::p~ʼnvjd`&]2Y<VDSMOU L\ IdFmCw@=:865544444yˆtcZVS,P6M@KHHPEYBa ?j &H$S#_!lzߞݲtfYMB7-* '% #( 09CO\jz xj]QF<2)%" "*2< HUev}naTI?5-% "*3?N^pseXKA7/'   !+6DUfv$)#(),19CMXaks{&'%&"&).7 AJU_hqx)%(#%# %,5> GR\enu|,"+ ( #!#)!2;EO Xbjry..,*+&)/%8AKU^go v | 11/12#0+-3(=#FQZcksy454887&3//8*B'L%V$`#h#o$v$}$$$$$##"!!!!!    78;>> = < < ; : 9 8 8 8 8 @ DK N M GEIK-L9LDLMKVJ^IeIl Hr Hy G F F E DCBA@??>>>>C HORQQN QS(T5T@SIRRQZPa Oh No Nu M}LKKJIHFFEDCCCCELRUXYVXZ%[1Z<YFXOWW V^ Ue TkSrRyQQPON~L|KzJyJxIxHwHwHwHGOUZ^_]^`!a.`9_C^L\T [[ ZbYhXoWvVU}T{SxRvQtPsOrNrMqMqLqLqLIRX^ceccef+e6d@cIaQ `X __^f]m~\t{[|yZvYtXrWpUnTmSlRkQkQkPkPkPJT[cgjii jj(j4i=gFfN eU c\}bczajx`qu_zs^p]n\l[jYhXgWfVfUfUfTfTfTMW_flnnmno&n1m;lDjL ~iS zhZwgaufhreopdwmckbh`f_d^b\a[aZ`Y`Y`X`X`XPZbjprsrss#s/r9qA|oI ynQ umXrk_pjfmimjhuhgefce`d^b\a[_[^[][][\[\[\S]fntwwwxx x,w6|v?wtG tsO qrVmq]kpdhokemsbl}`k]j[hXgWeVdVbVaV`V`V`V`V`jrx|||}}}){|4w{=szEoyM lxTiw[fubcti`sq]r{ZpWoUnSlQjPiPgPfPePePePeYdow} z&v1q;mCjK f~R c}Y`|`]{hZypWxyTwQuOtLrKpJnJmJkJjJjJjJj]is|yt#p.l8hAdIaP ^W [^XfUnRwN~K|I{FyDwCuCsCrCqCpCpCpbnyzrmi+e5a>^F[N XU U\RdOlLuHEC@>=}={=y=x=w=w=whutk ea&^1Z:WCTKQRNZ Kb HjEsB~?=:97777777o|pc\X U,R6P?MGJOGWE_ Bg ?q <|97532210000wDŽ}n_S NK%I0F9DBBK@S=[;d8n6y 3 1 / - , , + * ***̀Œzk[LB@='<2:;8D6M4V2_0i.u,)(&%%$####NJsdVH;31/&-0,9+C)M(W&b$n"} zk]PC7,# !"+5?KWdrӃҖЪ pcVI>3)  '0: F TcsuhZNB8.%  !)4@O_qzl^QF;2)!  ",8GYlpbUH>4+#  $0?Qdv'''*/6@JU_hpx~!%$%',4>GR\fmu{##!!!#* 2;EOYbjqx~% #'/ 8AKU_gnuz)'"! $,4= GQ[cjqw},*&(( %( 09CMV _ g n t z /--/.+#&+!3=HR[cjpv|21 4 540+$$,"7$B%M&V'^(f(l(s(y(((((''&%%$$####5 49 ; 94,+%.20=2H2R3Z3b3h3o3u3{222210/..--,+++8 9?@=526 9-;9CDCA= @B(D4D?DIDQDYC`CgBmBtB{AA@? > = < ; ; : 9 9 9 9 =BGILKGHK$L0L;LEKNKUJ]IcIjHpHw G F F E D C B }A {@ z? y> y> y> y> >FKPSSNPR S-S8RARJQRPYO`Nf Nm Mt L| L K }J{IxHvGuFtEsDrCrCrCrCAINUYZUVXY*Y5X>WGVOUVT]Sc Sj Rq |Qy zPxPvOsNqLoKnJmIlHlHlGlGlGCLSZ^_\\ ]^&^2];\D[LZSYZ }Xa {Wg xVn vVvtUqToSmRkQiOhNgMfLfLfKfKfKFOW^cdaabc$b/b9aA`I}_Qz^X w]^ u\e r[lpZtnY}lXiWgVeUcTbRaQaPaPaOaOaOIR[bghfefg!g,f6e?{dGxcNubU ra\ o`c m_jk_ri^{f]d\a[_Y]X\V\U[T[T[S[S[SLU_fklkjkkk*~k4zj=viEshLpgS mfZ jea hdhfcpcbyaa^`\_Z^X\WZVYVXVWVWVWVWOYcjopono o}p'yo1uo:qnBnmJklQ hkX fj_ cifahn^gw[fYeWdTbS`Q_Q]Q\Q[Q[Q[Q[R]gotssst }txu$tt/pt8ls@irHfrOcqV ap] ^oe[nlYmuVkSjQiOgMeKdKbLaL`L_L_L_Ublsxwwx~ywzrz!nz,kz6gy>dyFaxM^wT [v[ Yuc VtkSssPq~NpKnImGkFiFhFfFeFdFdFdZgpx|{|~xplh)e3a<^D[KY~RV}Y S|a P{iMzrKx|HwEuCtAr@p@n@l@k@j@j@j`lv~}rj ea%^/[9XAUHRPPWM_ Jg GpEzB?}=|;z:x:v:t:r:q:q:qfr|{nc]Y V+S5Q=NELMIUG\De An >x <975444|3{3z3z3zmyyj^T PM%K0H9FADIBQ?Y=b;k8v5 3 1 / . . - - - - - vugZMFC@)?3=<;D9L7U5^3h1s/,*)'''&&&&reVI<75!3*240</E-N,X*b(n&{$"!ˆ|oaRD8, )' %)$2";!EOZftvhZL?4)$-7BN [ i yŊÝ|n`RF:/% '2>KZiz׍ԡҶseWK?4+!  +8FVhzxi\OC8.% $1@Rdw}n`RF;1( )9K_q&% %(+4=HS]fnu{#""$)2;EPZckqw}! '/8BLW`gnty~  %,4>HS\cjpv{"!)0:DNW_flrw|%"$, 5?IS[bhnty(% % &#&/ 9 C MV^dkqv|+ (+ , )"'3>HQY`g m s y  .-21, $ ""&.(9)C*L*U+\+c+i+o+u,|++++*)(('&&%%%13762/* .1)243>4H4P5X5_5e5k4r4x44433210/.----38;<>;68:$<0<:=D=L=T=[=by=w<v;t:t9s9s9s98@EKNMHHIK(K3K<KEJMITI[HaHhGn~Gv|F~yFwE uD sC qB pA n@ m? m> m> l= l= ;CJQTSNN PQ%Q0Q9PBPJOQNX}N^{MeyLlwLsuK| sK pJ nI lH jG iE hD gC gC fB fB fB >FPVZXTTUV"V-V7U?UG|TNySUwR\uRbsQiqPq nPy lO jN hM fLdKcJbIaH aG aF aF aF AJT[^]ZYZZ[*[4}Z=zYDwXKtXRqWYoV`mUg kUo iTw gT eSbR`Q^O]N\M\L\K[J[J[JDNX_a`^]^__'{_1x^:t^Bq]Io\Pl[Wj[^hZe fYm dYu aX _W]V[UYSXRWPWOWNWNWMWMGR\cedbbb czc$vc/sc8ob?laGjaNg`Ue`\c_c a^k ^]s \]~Z[XZVYTWRVRTRSRRRQRQRQJV`ghgffgzhuh!qh,ng5kg=hgEefLceS`eZ^da \ci Ybr Wa|U`R_P]N\MZLYLWMVMUMUMUN[dkkkjk|lulpmlm)im3fl;clC`lJ^kQ[jXYi_ Vhg Tgp RfzOeMdKbIaG_G]G\G[GZGZGZS_ionnn~ovqorjrfr&cr0`r9^rA[qHXqOVpVTo^Qne Omn Llx IkGjEhCfBeAcAaB`B_B_B_Xdmrrrryupvix dx`y#]y-Zy6Xy>UxFSwMPwTNv\KudItl Fsv Dr Ap?o=my ;x 9v 8t 6r 6q 6n 6m 6l 6k 6k epy{zz|rh\U QN%L/I7G?EGCOAW?_ ;8#7,553=2E0N/W-a+l)x'%$"!"!!!!}wj^QE8/-+$*-(5'>%G$P"[!fssg[NA5) "+4=GR^k{ }pdWI<1&   '1;FR`oyk]OC7,"",7CQ`qʄȗƫpbTH<1'  &1>N_qߛݬ۾ugYL@5+" +9J]ozk]PC8.%  $4EXk}$ ##$)1;FR\dkqw|!  !&/9CNX`gmsx}$,5@KT]djouz~!)2<FPX_fkqv{  %.7AKS[bgmrw|   (2<ENV]cinsx~!   !+6@IQY_e k p v { $ #!  $/:CLT[agmrx&&)% * 5!>"G"O#V#]#c#i$o$u$|$$$##"! ),.--*$ &)%+0,:,C-K-R-Y-_.e.k.r.y.---,+*)(~(}'}'}'+12896103 4+565?6G6N6U6\6b6h5o5v5~554}3{2z1x0v/u.u.u-u-/5:@B?:9;<'=2=;=C=K=R=Y<_l=j<i;h:g9g8g8g86=GMNLHGHI I+I4I=~ID|HKyHRwGYuG_sGfqFmoFumEkEiDgCeBdAb@b?a>a=a=a=9CLRRQLLMNN(N1{N:xNBuMIsMOqLVoL]mKdkKkiJsgJ}eIcIaH _G ^E \D \C \B[A[A[A<GQVVURQR R}S%yS.vS7sR?pRFnQMkQSiPZgPaeOicOqaO{_N ]M [L ZK XI WH WF WE VE VD VD ?KUYYXVUV |WwW"tW,pW5mW<kVChVJfUQdUXbU_`Tg^To\SyZR XQ VP TO SM RL RJ RI RH RH RH BPY\\\ZZ~[w[r\o\)k[2h[:f[Ac[HaZO_ZV]Y^[YeYXnWWw UW SU QT OS NQ MP MN MM ML ML ML GT]___^^y_r`m`i`&f`0d`8a`?_`F\_MZ_TX^\V^dT]lR\v P[ NZ LY JW HV HT HR HQ HP HP HP LXabccb{csdme hede$ae-^f5\e=ZeDXeKUdSSdZQcbObjMatJ` H_ F^ E\ CZ BY BW CV CU CT CT Q]effffvhnigj bk^k [k*Yk3Wk;TkBRkIPjQNiXLi`JhhGgrEf~ Ce Ac ?b >` =^ =\ =[ =Z =Y =Y Vbiiiijrminap\qXqUq'Sq0Pq8Nq@LqGJpNHpVFo^DngAmp?l|=k ;j 9h 8f 7d 7b 8a 8` 8_ 8_ \gmmmm}noqet[wUx QxNx#Kx-Ix5Hx=FxDDxLBwS@v\>vd;un9tz7r5q3o2m1l1i1h1f1f1fcnqqqqyskwbyW}MHFC)B1@9>A=H;P9Y7~b5}l3|x1{/y-w,v+t+q+o+n+m+mjuvuuvvxi|^SH?=:#9,745<4D2L1U/_-i+u*(&%$}$z$x$w$v$vr{zzz~{rfZOD820/&-.+6*>)F'P&Z$d"q!{zncVK@4) %#"& /7?IS^kywk_SG<1& %-6? J V cqsh\PD9.# !*4>JXfv}qfZL?4)  '1<IXiz|m_QE9.$!,9HYj}ԒӧжrdVI=2( &4DWkwi[MA5+! /?Sh|"!!"%/:EPYagmsx} #,7BMU]djoty~ !)3>HQY`fkpuz~&/9CLT[bglqvz  !*4>GOW]chmrv|  $/8AJQX^dinsx~ (2<DLTZ`ejou{  !, 6 ? G OV\aglry  &1:BJQW]ciou}$$))&"!#,$5%>%F&M&S&Z&_&e&k&r'z'&&&~%|$z#x"w"w!v v $(/330,)+-'.1.:.B.I.P/V/\/b/h/o/w}/{/y.w.u-s,r*p*o)o(n'n')-7;;852 35#5-666>6E6L6S~6Y|6_{6ey6lw6tu6}s5q5o4m3l2j1i0h/h.g-g-,5>AA?<9:;<)<2<:~`=^<];\:\9[8[7[73@IJJIFEE FzF#wG,tG4qG<oFCmFJjFPiEWgE^eEecEmaEv_D]D\CZBX@W?W>V=V<V;V;8DMNNMJIJyKuK qK)nK2kK9iK@gKGeJNcJTaJ\_Jc^Jk\IuZIXHVGUFSDRCQAQ@Q@Q?Q?<IPQQQONzOtOpPlP&iP/fO7dO>aOD_OK^OR\OZZNaYNjWNsUM~SLQKOJNHMGLELDLCLCLCAMSTTTS}RuSoTkTgT$dT,aT4_T;\TB[TIYTPWSXUS_SShRRqPR|NQLOJNIMHKGIGHGGGFGFEQVWXWWxWqXjX fYbY!_Y*\Y2ZY9XY@VYHTYORXVPX^NWfMWpKV{IUGTESDQCOCNCLCKCJCJJUYZ[ZZs[l\e]`^\^Y^'W^0U^7S^>Q^FO^MM^TK]\I]eG\nE[yCZAY@X?V>T=R>Q>P>O>OOZ]]^^|^n`fa`cZcVdSd$Qd-Od5Md<KdCJdKHdRFcZDbcBbl@aw>`<^;]9[8Y8W8V9U9T9TT_`aaaxbkebfZhTi PjMj!Kj*Hj2Gj9EjACjHBjP@iX>iaq>=qE;qM:pU8p^6oh4ns2m0l/j-h-f-d-b-a-`-`ahhhh{ipken[qRsGw@y=y;y"9y+8y26y:5yA4xI2xR1w[/we-vq+u~)s(r'p&n&l&j&h&g&ghlllmxmnoatWwNzC}9 421&/..6,=+E)N(W&b%m#~{!| {yvtrqoopqqqqurju_zT~I?4+ (& %(#0"7!?HR]iw}{zxxwvvv|vryg}[PE;0% (08AKWc q }|{{z}ncXLA7,"  '09CN[hxvk`TI>3)  %.8CP^nsh]QF;0& "+6BQas~rf[NB6+!  (3AQcvʋɢǸ}paSF:/%  #0?QdxufXJ>2( ,=Pdx #-9DMV]djoty}!*5@IRY`fkpuy~'1;EMU\bglquz #-6@HPW]chlqv{  '1:CKRX^chmqv|  ",5=EMTY_dimrx~&/8@HOUZ`ejou{  )2;CJPV\afl r y   #-6>ELRX]ciov~}{zyxx $#!(19AHNTZ_e l s {} { ywusrqppp"+--+'" $%#&,'5'='D'J(P(V~(\|(bz(ix(pv(yt(r(p(o'm&k$j$i#h"h"h!!+24420,,-.(/1/9~/@{/Fy/Mw/Su/Yt/_r/fp/nn/vm/k/i/g.f-d+c*b)a)a(a(%29::863344$|5-y55v5<t5Cr5Ip5Pn5Vm5]k5di5kg5tf5~d5b4`4_3]1\0\/[.[-[-+8=??>;99 }9y:!u:*r:2p;9n:@l:Fj:Mh:Sf:Ze:ac:ia:r_:|]:\9Z9Y7W6V5V3V2U2U21=ACCB?>|>w?s?o?'l?/j?6h?=f?Dd?Jb?Q`?X_?_]?g[?pY?zX>V>T=S<R:Q9P8P7P6P66BEFGFC~BwCrCmDjD$gD,dD3bD:`DA^DG\DN[DUYD]XDeVDnTCyRCQBOAN@L>L=L;K:K:K9;FHJJIGyGrGmH hHdH!aI)_I1\H8ZH>XHEWHLUHSTH[RHcQHmOHwMGKFJEHDGBGAG?G>G=G=?IKMMM~KtKnLhL cM_M\M'YM.WM5UM<SMCRMJPMROMYMMbLMkJLvHLFKEIDHCFBDBCBBBABACLNOPPzOpOiPcQ^RZRWR$TR,RR3PR:NRAMRHKRPJRXHR`GQiEQtCPAO@N?L>J=I=G>F>E>EHPQSSSvSkTdU^VXWUWQW"OW*MW1KX8IX?HXFFXNEWVCW^AVh@Vr>U]\<\f:[q9[}7Y5X4V3U3S3Q3O4N4NSWXYYzZoZc]\_SaMbHcEcCc$Ac,?c3=d:j;j!:j)8j06j75j>4jF2jN1iW/ia.hl,gy+f)e(c'a'_']'[(Z(Z^_``}`rahc^fUhLkBn9q 5r3r2r%0r,/r3-r;,qB+qK)qT(p^&pi%ov#n"l!j hf d c a accddydoeegZkQnHq>t4x,z*z(z 'z(&z/$z6#z>"zF yPyZxfwsvtrpnljiihhhhviljbmWqMuDx:{0% ")19AKVbo~ ~ | y w u s r qmmm}msnip_tTxI|@6,"" * 2 : DO[hw~}|{srrzrqtfx[}PE;2( !*2<GSaoyxxyxm}bWMB7.$  )2<IWfvvj_TI?4*! &1<JZk~sh]RG<2'  ".:K]q~rg\PC7,! +9J^s܉ڞگٽ~sdUG;/$(8J_s",7AJRZ`fkpty~(3=FNV\bglpuz%.8AIQW]chlquz  *3<DLSY^chlqv{  $.6?FMTY_chlqw} (19AHOUZ_chmrx#,4<CJPUZ_diou|%/7>EKQV[`fkry}||| ) 2 9 @ G M R X ]cipx~|zx v u s s r r  #,5<BINTZ~_|fzmxuv~trpomlkjii%''&#( 0 8!>}!Ez!Ky!Pw!Vu!\s"cq"jp"rn"{l"j!h!f eccbba',..-+'%&'$|(,y(4w(;t(Ar(Gp(Mo(Sm(Yk)`j)gh)pf)yd)b)`(_']&\%\$[#["["#.24421., {-w. t.(r.0o.7m.>k.Di.Jh/Pf/Vd/]b/ea/m_/w]/[/Z.X-W,V*U)U(U(U'*3689754z3u3q3n4%k4-i44g4:e4Ac4Ga4M_4T^4[\4cZ4kY5uW5U4T3R2Q1P/P.O-O,O,/7:<=<9z8t8o8k8h8"e9*b91`97^9>\9D[9JY9QX9YV9aU9jS9tQ9P9N8M7L5K4J2J1J1J04;>?@?}=u<o<j< f=b=_=']=.Z=5X=;W=AU=HS=OR=WQ>_O>hN>rL>~K=I<H;G9F8F6E5E5E49>ACCCy@q@jAeA`A]BZB$WB+UA2SA8QA?OAFNBMMBULB]JBfIBqGB}EAD@C?B=A<A:A9A8A8=ADEF~FuDlDfE`F[FXFUF"RF)PF0NF6LF=JFDIGKHGSFG[EGeDFoBF{AE?D>C=A<@<>===<=;ADGHI{IqHhHaI[JVK RKOKMK'JK.HK4GL;ELBDLICLQALZ@Lc?Kn=KzQOW09WE8WM7VV5V_4Vj2Uv1T0S/Q.O-M.L.J.I.HLOQQ{RqRfS\VUWMYE[@\ =\;]9]&7]-6]44];3]B2]J1\S/\].\h,[t+Z*Y)W(U'S(Q(O(N)NPSTUwUmVcWYZR[J]B`:c6c4d2d#0d*/d1-d8,c?+cG)cP(cZ'be%ar$a#_"^!\ Y!W!V"U"TUWXXsYjY`[W^O`Fc>e5i.k+k*k(k&'k-%k4$k<#kD!jM jWibioh}fec`^\[[Z[\{\p]g^]`ScKfBi:l0o&r"s ss"s)s0s7s?rIrSq_qkpznlj hfdcb_``v`madbZePiGl>o5s,v"y| |||#|*|2|: {C {N zZzfxuwuspnmlkde~dsejebhWlLpCs:w1z(~ $,4=GS`o}{xvutjiziqjik^oSsIx?|6,#$,5?KXgwooxopoesZyP}E;1( #,6AO^ouuwumyb~WLA7-$ !+6CRcv||uj_TI?4*! )6DVi}si^RG=3( &4EZn҄ИЪϹ~sh^SE8-!  #3DZq*4=FNU\bglquz&/9AIQX^chlquz !+4<ELSY_chlqu{  &/8@GNTZ_chlqv| !*3;BIOUZ^cglqw~ %-5=DJPUZ^chmsz (08?EKPUZ_diov~"*3:@FLQV[`els{~{yxwvuu  %-5<BHMRW]c}i{py yw usqpnmlll  (07>C}I{NyTwZv`tgrnpwnljhgedcc c  ""!#|+z3x9v?tErKpPnVm]kdilgueca`^]\[[["&))(&# {w t!'r!/p"6n"<l"Bj"Gh"Mf"Se"Zc#aa#i_#r]#}\#Z#X"W VUUTT!(,..-,|)x&t&p'm'$j(+h(2f(8d(>b(Da(J_)P])W\)_Z)gX)pV){U)S)R(P&O%O$N#N"N!&-0231|0v.r,m, j-f- d-(a-/_.5^.;\.AZ.GX.MW.UU.\T/eR/oP/zO.M.L-J,I*I)I(I'I&+14665x4r2l1h2 d2`2]2%[2,Y22W28U2>T2DR3KQ3RO3ZN3cL3mK4xI3H3F2E0D/D-D,D+D+/479:|9t7m6g6b6^7[7X7"U7)S7/Q75O7;N7BL7IK7PJ8XH8aG8kE8wD8C7A6@4?3?1?0?/@.38:<<x<p9i9c:];Y;U;R;P;&M;-K;3I;9H;@G;GF;=:<8;7;5;4;3;26;=??u?l=d=^>Y?T? P@M@J@$H@*F@1D@7C@>B@EA@L?AU>A^=Ah;@t:@9?8>7<6;69787776:=@A|BrBiA`AYCTCODKDGEEE!CE(AE/?E5>E<=ECADFGuHkHaHWJQKKMDN?O y4}+" '0:GVfxlulnldpYuOzD:0' &0<K\n}surlua{VKA7,# $0>Nav}yu|j_TI?4*!  "0@Rg}ȒƦŸsi^SH>4* /BWl'/8AIQX^chmqv{ "+4=EMSZ_dhmqv{  '08@HOUZ_dhlqv|#+3;CJPUZ_chlqw~ &/6>EKPUZ^cglrx!*19?FKPUY^chmt| $,4:@FKPUY^cipx~|{zzz '.5<AGLPUZ`fl}t{~ywusrqppo !)07=BH}L{RzWx\vctjsrq{omkihgfff  $~,{ 2y 8w >v Dt Ir Nq To Zm `k hi qg {e c b ` _ ^]]\  {xu's.q4o:m@kEjKhQfWd^bf`n^y][YXVVUUU!#$#~!yvspm#j*h0g6e<cBaG`M^T\[ZcYlWwUSRPONNNN"'()(x's%o"l i f!c!&a"-_"3]"9\"?Z"DX#JW#QU#XS#aQ$jP$uN$L#K#J!H HHHH!'+--z,s+n)i'f& b&_'\'#Z'*X'0W'6U(;S(AQ(HP(NN(VM)_K)hI)sH)F)E(D'C%B#B"B!B!%+.01v0o.i-d,`,\,Y,V, T,&R,-P,3N,9L,?K-EI-LH-TG.]E.fD.qB.~A-@,>+>)=(='>&>%).13{4r3k2e0_0[0W0 S0P1N1$L1*J10H16F1<E1CD1JB2RA2[@2e>2p=2}<2;1:/9.9,9+9*9),146x6o6h5a3[4V5Q5 N5K5H5!F5'D5-B53A5:@6A>6H=6P<6Y;7c97o86|76655342404/5.5-0478u9l9d8\7V8Q9L9H9E9C:A:%?:+=:1<:8;:?9:F8;N7;X6;b5;m3;z2:1907060402011137:};r;i<a<X;R<L=G=C> @>=>;?#:?)8?/7?65?=4?D3?L2?V1?`0?l.?y->,=+;+:+8+6,5,46:<z>o>f>^?T?M@GABB>C :C8D6D!4D'3D-1D40D;/DB.DJ-DT+D^*Dj)Cw(C'A&@&>&<&:'9'8:=?w@lAcAZBPCJDDE>G9H4I2J0J/J%-J+,J2+J8)J@(JH'JR&J\$Ih#Iu"H!F E C A!?!>"=>@BsChD_DWEMGGHAI;K4M.O ,P*P(P"'P)%P/$P6#P="PF POPZOfNsMLJHFDCBBD|FoFeG\HTHKKEK>M8P0R(V$W"W!WW%W,W3W:WCVLVWUcUqTRPNLJIHFHwIkJaJYKQLINBP;R4U,X$[^ ^^^"^(^/^7^?^I]T ]` \n [} Y WUS Q P OKLsMhM^NVONPFS?U8X0[(^ adff f f$ f+f2e;eDeOd[cibxa_][XWVO{PnQdQ[RTSLUCY;[4_,b$ehkn nnnn&n-n6m?mJlVkcjrigeca`_TvUjUaUYVRXH[?`7c/f'ilo ruuvww w(w0w9vCvPu]tms~qomkih~ZqZgZ_ZX[N_Dc;h3k+n"ruwz}~ ~")2<HVf~x|{xvutx_m_e___UcKg@l7q.u&x{~  "*5@N^ptdkded\gQlGr=w3|)   *5CTf{rjljdmYrNxC~9/% *8I[osplraxVK@6," *9Lawtyj_TI?4*  +<Pf{ߐݠ۬ #,4=EMSY_dhmqv|  (09AHOUZ_dhmrw}#,4<CJPUZ_dhmrw~ '/7>EKPUZ^chlry#+29@FKPUY^cgms{ &-4:AFKPTY^chnv!(/6;AFKOTY^djrz}{ywvutts #*17<AFK~P}U{Zz`xfvntwrpnmlkjji %~,|2z8y=wBvGtLsQqWo]nclkjthfecba```  ~{x u's.q4p9n>mCkHjNhTfZeacias_~][ZYXWWW{wv s p m "k )i /h 5f ;e@cEaK`Q^X\`ZhXrV~TSQP O O O O ztpmk hfc%a+_1^7\<[BYHWNVUT]RfPpN|MKIHGGGG!#}$u$o"j gda^\!Z(X.V4U9S?QEPKNRL[KdInGzFDCBAAAA"%'y(p(j&e%a#^![ X!U!S!%Q!+O!1N"6L"<J"BI"IG#PF#XD#bC$lA$y@#>#=!< ;<<< &)+u+m+f*a(\'X&U& Q&O&L&!J&(I&.G&3E'9D'?B'FA(N@(V>(`=(k;(w:(9'8&7%6#7!7 7 #),|.r.i.b.],X*S+O+L*I+F+D+%B++A+0?+6>+==,D<,L:-U9-^8-i6-v5,4,3*2)2'2&3%3$'+.y0o1f1_1Y/S.N/J/F/ C/A/?/"4;494 74&64,44235925@15H05Q/5[.5g-5s+5*4*2)1)/)-*,*+-13s5i6`6Y6R6J6D7@7<888694929$19*/90.97-:>,:F+:O*:Z):e'9r&9%8%6$5$3%1%0&/14}6p7f8]9V9N9E:@;;<7<3= 1>/>->",>(*>.)>5(?<'?D%?M$?X#>c">p!= <;975 4!347y9m:c;Z;R;K<C>>>9?3A.C +C)D'D&D&$D,#D3"D:!DB DKDVCaCnB}A@>;:987:v<j=_=W>O>H?@A;B6C/F)H$J"J JJ#J)J0J7J?JHJSI_IlH{GECA?=<;>r?f@\@TALAEC>D9F3H,J%MP QQQ Q&Q-Q4Q<PFPPP\ Oi Nx M K I G E C B?{AmBbCYCQDJEBF[5_-c%fil ortvw wxyz${,{5{AzNz]xnwutqonnWdW\WVWM[C_:d0i(l psvy{~ %.9FVg{||j\b\\\T_Id?i5o,s#w{~ %0=M^ribcb[dPiFo;u1{'  %1@Sg~jhcjXpMvC|8.$&5G[qkpavV}K@6+!  &7JaxҏѡϬ  (09AHOUZ_chmrw} $-5<DJPVZ_cgmrx (07?EKQUZ^bgmry $+3:@FKPUY]bgms{'.5;AFKPTX]bhnv ")06<AFKOSX]ciqz~}{zyyy $+17<AFJOSX~^|ezlxuvtsqponnm&,~2}7{<zAxFwJvOtTsZqaohmqk{jhfeddcc |zx!v(t.s3q8p=nAmFlKjQiWg^eecnay_^\[ZZZZ ~ y wt rpm#k)j/h4g9e>dCbHaM_T^[\cZlXwVUSRRQQQ ~wqnl khfc%b+`0^5]:\?ZEY KW QU YS aR kP vN L K JIIIH xpkgdca ^\ Z'X,W2U7T=RBQHOOMWK`IjHuFDCBA A A A }s kfa^\Y WUS#Q)O.N4L9K?IEGMFUD^BhAt?><;;;;; y#o#g#a#\!YVS PNL J&H+F1E6C<BC@J?R=\<f:r98665556 $v&k'c']&X$T"P!M!J G E C #A!(@!.>!4=!:<"@:"H9#P8#Z6#e5#q3#~2"1!0 0001$'r(h)`*Y)T(P%K%G%D% A%?%=% ;%%:%+8%17&76&>5'F3'N2(X1(c0(o.(}-',&,$+"+ ,-"&|)o+e,],V,P+K)F)B)?)<)9)7)5)#3)(2*/1*50+</+D.,M-,W,,b+,n),|(+(*'('&'$(#("%)y,l-b.Z.S.M.G-B->-:.7. 4.2.0.!/.'-/-,/3+/:*0B)0K(0U'0`&0l%0{$/#.","*"(#'$&',v.j/`0W1P0J0D0=1925222 /3-3+3*3%(4+'41&48%4@$4I#5S!4^ 4k4y320.,+**.s1g2]3T3M3G3@3955507-7)8'8&9$9"#9)"9/ 969>9G9Q9]9i8x76420/..~1o3d4Z5Q5J5D6=77839.:(<$= !> >> >&>->4><>E>O>Z=g=v<:975321z4l6`7W7N8G8A8::5;0<+>%@C DDDD$D*D1D9DBDLDX Ce Bs A @ > < : 8 75u7h9]:S:K:E;>;8=3>-@(B!EHK KKK! K' K. K6 J?JIJTIaHoGEDB@>=9q;d<Y=P=I=B>M^q~{zyw`UYUTTLWB\8a.f%kor vy|~  *6EVi_ZZZS\Ha>g4m*r w|!,;L`va`ZaPgEm:t0z&  .?SjbgXmMsB{8-#!2F]sɉɝǫ $-5<DKPV[_chlqx!)18?FLQVZ^cglry $,3:@GLQUY^bgls| (/5;AGKPTX]bgmv #*17<AFKOSX]bhpy%,27<AEJNSX]cj}t{~yxvutssr  '-27<}@|E{IyNxSwYu_sfqooynljihggg~ |zx"w(v.u3t7r<q@oEnJlOkTi[hbfkduba`^]]\\|yusqom#l)j.i3h8f<e@dFcKaQ`W^_\h[rY~WVUTSSS { t omk hgec%b*`/_4^8\=[BZGXMWTU\SeRpP|NMLKJJK ~tmhd ca `^\ Z&X+W0U5T:S?QDPKNRMZKdInG{FECCBBB xnga^[Z YVTR"Q (O -N 2L 7K <J BH IF QE YC cA n? {> = < ;;;;sib\XUSQPMKJ$H*F/E4D:B@AG?O=X<b:m8z76544 4 4 |oe^XSPMKH FDB!A&?,>1=7;=:D8L7V5`4l2y10/..//xl!b"Z"T"O KHEB @><:#9)7.645;3B2J1T/^.j-w,**))**u"i$_%W%Q$K#G"C @ = :864 3 &1 ,0 2/!9.!@-"H+"R*#])#i("v&"%!%$$%%!r$f&\'T'M'H&C%?$;$8$5$ 2$0$.$,$#+$)*%0)%6(&>'&F&'P%'[$'g"'u!&!% # ! ! }$o&c(Y)Q)K)E)@(;(6(3(0(-)+)))')!&)'%*.$*5#*<"+E!+N +Y+f*s*)'%#"!#z&l)`+V+N+H+B+=+7+1,.,+-(- %.$.".!.% .,/3/:/C/M/X/d/r.-+)'&%%w)i+]-T-L-E-?-:-4.//+0&1#2 3333#3*40484A4K4V3b3p21/-+*)(s,f.Z/Q/I0B0<07012-2(3$578999!9'9.969>9H9T 8` 8n 7} 6 4 2 0 . -,o/b0W1N2F2@2:253/4+5&7!9;> ??? ?% ?+ >3 >;>E>P=\=j @CE HK KKKK%K,K4K=JHJTIcHrGFCB@>p7b9V9M:E:?:::5;.>(@"CFILOP QRRS!S(S0R9RDRPQ^PnOMLIGFj;]<R=I=C===9=1@*D$GJMP RUW X XYZ[$[,[5[?ZKZYXiW{UTRPOe@Y@O@G@A@=@5C.G&K NQT WZ]__ `abcd&e/e9dFdTccav`^\[X_DTDLDFDAC:G1K)O"SVZ ]`beghi jklm!o)p4o?oNn^lpkigfeZIQIKHFH?J6O-T$Y\` cgiloqrst vwy{"}+~7}E|V{hy}wusrWNPMLLDO;T1Y(^cg knrtwy|} #/=M`uVSRRKTAZ7_,e#jpsw{~ &4DWlXXRYG_=e2l(rx}  *:MbzY_OdDk:r/z%,?Um!)18?FLQV[_chmsz %-4;AGLQVZ^chnt|!(/6<BGLPUY^bhnv $+17=BFJOTX]bipy&,28=AEINSX]cjs}~|zyyxx !'-27<@DI~M|SzXy^weunsxqonllkkk~|{"y(x.w3v7u<t@rDqHpMoSmZlajihsfdcaa``_}xu rpon$m)l.k3j7i;h?gDeIdOcUa]_e^o\|ZYWVVUUysoki gfec%b*b.`3_7^;]@\EZKYRWYVaTlRxPONMLLLzqjeca_]\[ Z%Y*W/V3U8T<RAQGONNVL^KiIuGFEDDCC t j c^ [ YX VUSR"P&O+M0L4K9J>HDGKESD\BgAs?>=<<<< znd]XTR P O NLJI#G(F,E1C6B<AB?I>R<[;f9r8665555 ui`YSOLJH G E C B @ %? )> /< 4; :: A8 H7 Q5[3g2s0/ . . ...qe\UOJFDBA?=;:!8'7,62483?1G0P.Z-e+r*)('' ( ( |nbYQKFB?=;9 7532$0)//.5-<+D*N)X'd&p%$#"""#yk_V N H C>;853 1/-,!*')-(3':&B$L#V"b!o~vh\!S"K"E"?!;!7 30.+ )'%$$# *" 1!!8 !A!J"U"a!n!} se"Z#P$H$B$=$8#4#/#,#)#&# ##"$ $$"$(%/%6%?&H&S&_%m%|$" o!b$W%M&F&?&:&5&1%,&''$'!(())) )&)-*4*=*F*Q*^*k)z(&% "! | l$_&T'K(C(=(7(3(.())%*!+,- ....$.+/2/;/D /O .[ .h -w ,+)'% $y#i&\)Q*H*@*:*5*0*,+&,#,.02 34 4 3" 3( 30383A3K3X3e2t1/.,*(t&e)X+N,E,>,8,3,.,*-%.!0246 9 9999&9-949=8H8T8b7p6531/.p*a-U.J.B/;/6/1/-/(0#2468 ;> >???#?*>1>:>E>Q=^ @C DDEE E&E.E7EADMDZCjB{@?<;:f1X3M4D4=47434/4(6"9<>A DGIJ KKLM#M*M3M=LHLVKeJwHFEBA`6T7I7A7;76626,9%<?BE HKMPQ RSTUV&V.V8UCTQTaRsQOMLJ[:O:F:?::969/<(?!CFJ MORUWXZ [\]^!`)`3_>_L^[]m[YWVUU>K>C>>=:<3?+C$GKO RUX[^`abd efhi$k-k8jEiUhgf|eca`QBHBBA?@8C/G'LQUY\_begiklno qsuw&y1x>wNv`utrpomNGHFDE=G4L+R!W\`dgjmpsuwxz|~(5EWk~MKIJCL9Q/W&]ch lotwy|  -<NczOPJQ@W5]+d!jp uy} $3EZpQVG\==<<vi ` Y U QONL KJIH"G&F+E/C4B9A>@E>M=V;`:l8y766555p d[TNK H GF DCBA?#>'=,<1;69<8B7K5T4^2j1w0//...y k`WOIEB@ ? > =<:9 7$6)5.443:1A0I/S- ^, j*w)((((( ug\SKEA=;98 7 5 4 2 1 "0 '/ ,- 2, 9+ @)I(T&_%k#z" " ! """ rdYOHB=964310.,+*$(*'0&7$?#H"R ]jx   naVLE?:620-+) (&$#""(!. 5=FP\iw|k^SIB<73/,)&$" %,3;DOZgvxh[PG?940,)%! # * 1 9!B!M!Y!f t      ueXM D!=!7!2!. * & " ""# #$$$!$(%/ %7 %@ %J %V %b$q$" qbV!K"B#:#5#0#+"'"$"#$%'( ) ) ) )%),)4)<)G)R)_)n(~'%#!n_"R#H%?%8%2%-%)$%$"%&'(* - ....#.).1.:.D.O.\-k,{+)'&$j"[$O&E'<'6'0'+''&$' ')+,/1 2333 3'3.373@3L3Y2h1y0/,*)e%W'K(A):)3).)*)&)#)+-/1 36 7 8999$9+949=9H8V8e7v5430/a)S*H+>,7,1+-+)+&+ -024 69;< =>?@!@(@0@:@E?R>a=s<:985\,O-D.;.5.0.,-)-#/257 9<?AB DEFGH$H,H6GAGNF]EnCA?>>V0J1@19131/0,/&2 58;=@CEHIK LMOP Q(Q2P<PIOXNiL~KIGFQ4F4=47423/2)5"8<?B EHKNPQST VWY[#[-[7ZDZSXdWxUSQOL8B8;86736-8&<@DG KNQTVYZ\]_ aceg'g1g>fLe^cra_]\G<@<:;7:1<)@!DIN RUX[^acdfhik mor!u+t7sFrXqkoljiE@??<>6@-E$JOT Y]`cfilnprtvxz |#/>Ocy}{yDEACCHMQUY^djs~ '-39>BGKOTY^dkv~| "(.49=AEJNSX^en{~|{yvsq#).38<@D~H|M{SyYx`vhtsrpomkjhg|y xwvu$u)u.t3s7r;q?oCnHmMkTj[hcgme{cba_^]\ysomkjih h%g)g.g2f6d:c>bCaH_O^V\^[gYuWVUSRRRvnhdb` ^^]] \%\)\-Z1Y5X:W?UDTJSQQZPcNpM~KJHHGGyme_[XVU TSRR Q%Q)P-O1N5M:K@JFIMGVF_DlCyA@?>>>pf]VRONL KJIIH!H%G)E-D2C6B<@B?J>R=\;h:v977666zj_WPKHFDC BA@??!>&=*<.;3:98?7G6O5Y3e2r10//..sfZ Q J E A ?=<; :9877"5'4+30261=0D/M-X,c+p*)((((n a VMF@<9 7 654 3210/$-(,.+3*:)B(K'V%b$o#~""!""{j ^RIB<8420 / . . ,+)(!'&&+%2$9#A! K U b o~w gZOF?941.+)( ( & % # " ! $ * 1 8ALWdq  t dWLC<61-*'%#"  #)07@JVbp  qaTI@93/*'$!  '.5>IT ` m }     m^RG>71,($!  $ + 3 ; EP]jzj[OD;4/*&"   "( 0 8 B M Z hwgXLA92,($  ! ####$&$-$5$?$J$W$e#u"!cUI? 6 0 * &" ! # %' (())#)*)3)<)G)T(c(s&%$! `RF!<"4"-"("$!!!  "#% ')+ ,-..!.(.0.9.D.Q-`-p+*('$[ N"B#9$1$+$&### ""$&' ),.0 12444%4-464A4N3]2m1/-,,W#J%?&6&/&)&%%"% $&(* ,/145 7 8:;;";*;3;>:J:Y9j8}6421R'E(;)3)-(((%'#&)+-0 257:;= >@BCC&C/B:BFAU@f?z=;:8L+A+8,0+++(*&) +.14 69;>ABDE GIKM"M+L5LAKPIaHuGDBAG.=/5//.+-),#.158 ;=@CFHJLNP RTVW&W1V=UKT[RpQNMKB29232/1,/'1 59= @CFILORTVWY[ ^`c!d+c7cEbU`i^\YX>6763503+5#9=B FJMQTWZ\^`bdfh knq%r1q?oOnblxjhf<:794809'=BH MRVY\`cfhjlnprux {)7G[}pzyu<>9<5=,B"HNTZ^cfiloruwy|~  .?Rg~>A;A1G'NU[agkpswz} $4G]sAF7L-T#[b iouy~+>Si %,39?DIMRV[`flt~!'.4:?DHLQUZ`fnw~ #)/49>BGKOTZ`hp{}xt$*/48=AEJOTZa}j|uzxvutqmj ~||{%{*{/{3{7y;x?wDuItNrTq[odmnlzjhgfeb`}wsponmm m%m)l.l2k6j:h>gCfIdOcVa^`h^t][ZYXVUxojfcb a``` `%`)`-_1^5\9[>ZCYJWQVYTcRoQ}ONMMKJwld^[XVV UUTT T$S(R-Q1P5O9N?LEKLJUH^GjFwDCBBA@|nd[UQNML JJIII I$H(G,F1E5D;BAAH@Q>Z=f<s::9877tg\SMIFDBA A@@@? ?$>(=-<1:79=8D7M6W5b4o210///naVMFA><;:9 88776!5%4)3.231:0A/J.T-_,l+}*)(((yi\QHA<854321 00/.-",&+++0*7)>(G'Q&\%k$z#"!""teW L C < 7 3 0 .,+* ) )('&&#%($-#4"<!E OZhwpaS H @93/, ) ' % $$ #"!  %+2:CMZgvl^ PE=60,(%"    #)09 B M Y gui [ MB:3-)%!       " ) 1:D N Z g v  f XK@70+&"    ' . 6?JVds  cUH=5.($    $+3<GTbq`RE;3,&"   !(1:EQ`o]OB80*$   &. 7 B O^mYK?6.'"   ! "#$$$$,$5$@$L$Z#k"}!VH<3+%  !# % ')))")))3)=)J)X(i'{%$"!QD90)# "$&(* ,.///'0/0:/F/U.e-y,*(&M@ 6!-!'!"  ! #%'),.0 2 4677#7,666C5Q5a3u20.-H"<#2$+$%#!"! !$& (+-02468 : <>? ?)>3>>=M<];q9864C%8&/&(&$%!$#$'* ,/2479;=?A CFII$H/H:GHFYDkB@>=>)4*-)'($'"&'*- 1469<?ACEGJL NQT S*R6QDPTOfM}KJG9-1-+,'+%) *.2 59<?BEHKMOQSVY \_a$`0_=^M\`ZuXVT61/0+/)-$.27 ;?BFJMPSUXZ\^acfimo*n7mGlYkmhfd44/3-1)2 7<AFKNRVY]`bdgiknqtw{#0@~R{fx~vt4826.6%;AGMSX\`cfimortvy|(7J^u7;4:*@!FM U[afimqtwz}.@Uk:?0E&LT[bintx| $6J`u  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./012456789:;<=>?@ABCDEFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~Q՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԜfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԜgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԜgԜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՜eԜfԜfԜfԜgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՜eԜfԜfԜfԜgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՜eԜfԜfԜfԜgԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՜e՜eԜfԜfԜfԜfӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՜eԜeԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՜eԜeԜeԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgQ՛d՜d՜dԜeԝeԝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgR՛d՜d՜dԝdԝeԝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgR՜c՜d՝dԝdԝeӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgR՜c՝c՝cԝdӝeӝfӝfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛fԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛fԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMiY՛e՛e՛eԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMiZ՛e՛e՛eԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMjZ՛e՛e՛eԛfԛfԛfԛgԛgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMjZ՛e՛e՛eԛfԛfԛfԜgԜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMkZ՛d՛e՛eԛfԛfԜfԜfԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMkߜZ՛d՛e՛eԛfԛfԜfԜfԜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgLlޜ[՛d՛e՛eԛfԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgLnۛ]՛d՛e՛eԜfԜfԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgLo؛a՛d՛e՛eԜeԜeԝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgLr՛d՛d՛e՜eԜeԝeӝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgKu՛d՛d՜d՜dԝdԝeӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgK}՛c՜d՜dԝdԝeӝeӝfӜfӜfӜfӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgL՛c՜c՝cԝdӝeӝeӝfӜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgM՜c՝bԞcӝdӝeӝeҝfҝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՚e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJQT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJQT՛e՛e՛eԛfԛfԛfԛfԛgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgIQT՛e՛e՛eԛfԛfԛfԜfԜgԜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgIRT՛e՛e՛eԛfԛfԜfԜfԜfԜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgIRT՛e՛e՛e՛fԛfԜfԜfԜfԜgӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgISU՛e՛e՛e՛eԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgITU՛d՛e՛e՜eԜeԜfԜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgHVU՛d՛e՛eԜeԝeԝeӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgHWU՛d՛d՜dԝdԝeӝfӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgGZU՛d՜d՝dԝdӝeӝfӝfӜfӜfӜfӜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgI]V՛d՜cԝcӝdӝeӝfӝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgJfߞX՜cԞbӝdӝeӝeҝfҝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgKqP՞`ԞcӝdӝeҝeҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QjZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QjZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QkZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QlZ՚e՚fԛfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgHQr[՛e՛f՛fԛfԛfԜfԜfԜgԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgG>Qs[՛e՛e՛fԛfԜfԜfԜfԜfӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF?Qtߛ\՛e՛e՛eԜfԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF?Qvܛ^՛e՛e՛eԜeԜeԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgF@Py؛b՛e՛e՜eԜeԝeԝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgEAP|՛d՛e՜d՜dԝdԝeӝfӜfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgDCP՛d՛d՜d՝dԝdӝeӝfӝfӜfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgDDP՛d՜c՝cԝdӝeӝeӝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgEFP՜c՝bԞcӝdӝeҝeҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgGMMߥOԞbӝdӝeҝeҝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgHWH#6BʻLʷRʴWʲZʱ\ʰ^ʯ_ʯ`ʯ`ʮaʮaʮbʮbʮbʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OQW^՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OQWߙ_՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgG+ORWޙ`՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgG+OSWݙa՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OSWܙa՚fԚfԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OSWۙb՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OTWښb՚fԚfԛfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OTWٚc՚fԚfԛfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OTWؚd՚fԚfԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,NUW֚d՚f՚fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,NUW՚e՚f՚fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF-NUW՚e՚f՛fԛfԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF-NVW՚e՚f՛fԛfԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE-NVW՚e՚f՛fԛfԛfԛfԛfԜgԜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE-NWW՚e՚f՛f՛fԛfԛfԜfԜfԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE.NXW՚e՚e՛e՛fԛfԜfԜfԜfԜfӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE.NYW՚e՛e՛e՛eԜfԜfԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD.NZW՚e՛e՛e՜eԜeԜfԝfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD/M\W՚e՛e՛e՜eԜeԝeԝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgC0M^W՛e՛d՜d՜dԝdԝeӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgC1M`X՛d՜d՜dԝdԝeӝeӝfӜfӜfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgB2LdX՛d՜c՝cԝdӝeӝeӝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg@3LhT՜c՝bԝcӝdӝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgA4JiNۧKԞcӝdӝeҝeҝfҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgC6Jhߴ@+;DKǽQǻUǹXǸZǷ\Ƕ]Ƕ^ǵ^ǵ_Ƶ`Ƶ`ƴ`ƴaƴaŴbŴbŴbŴbŴbŴbŴbŴbŴbŴbŴbŴbE==]o)w3}TeZۙcԚfԚfԚfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM>TfZٙd՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM>TgZؙd՚fԚfԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM?ThZ֚e՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM?ThZ՚f՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM?TiZ՚f՚fԚfԛfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM@TjZ՚f՚fԛfԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM@TjZ՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM@Tk[՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE LATl[՚f՚f՛fԛfԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE LATl[՚f՚f՛fԛfԛfԛfԛfԜgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgE LATm[՚f՛e՛f՛fԛfԜfԜfԜfԜgӜgӜgӛgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD LBTo[՚e՛e՛e՛eԛfԜfԜfԜfԜgӜgӜgӜgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD LCTp[՚e՛e՛e՛eԜfԜfԜfԜfӜfӜgӜgӜgӜgӜgӜgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD!LCTr[՚e՛e՛e՜eԜeԜfԜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgC!KETt[՛e՛e՜e՜eԝeԝeӝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgC!KFTw[՛d՛d՜dԝdԝeӝeӝfӜfӜfӜfӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgB"KHT{Z՛d՜d՝dԝdӝeӝeӝfӜfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgA#JJSX՜c՝cԝcӝdӝeӝfӝfҝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg@#ILO{S՜bԞbӝdӝeӝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg?$HPLvLحBԢ\ӝdҝeҝeҝfҝeҞeџeџeџeѠeѠeРeСeСeСeСeТeϢeϢeϢeϢeϢeϢeϢeϢeϢeϢe<%FFGp(0>FLQTVÿXÿZþ[¾\¾]¾]¾^^___```````````?#CF`#o.x6|>EJNRTVWXYYZ[[\]^^^^^^^^^^^?$ = K+S4X;^@dDiHmIpLsNuPwQxRzTzU{V|W}W}X~Y[[[[[[[[[[[;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_՚fԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SIXk\_ԚfԚgԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԛhԛhԛhԛhԛhԛhԛhԛhԛhԛhԛh<M,SJXl\`ԚfԚfԚgԚgԚgԚgԚgԚgԚgԛgԛhԛhԛhԛhԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛh=M,SKXn\aԚfԚfԚgԚgԚgԚgԚgԛgԛgԛgԛgԛhԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh=L-SLXo\aԚfԚfԚgԚgԚgԛgԛgԛgԛgԛgԛgԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh>L-SLXp\ޘbԚfԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh>L-SMXq\ۙc՚fԚfԚfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh?L.SNXr\ٙd՚fԚfԚfԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh?L.SNXt\֚e՚fԚfԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh?L.SOXu\՚f՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh@L.ROXv\՚f՚fԚfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh@L/RPXv\՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhAL/RPXw\՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhAL/RQXx\՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӜhӜhӜhӜhӜhӜhӜhӜhӜhAK/RRXz\՚e՚f՛fԛfԛfԛfԛfԛgԜgӛgӛgӛgӛgӛgӛgӛgӛgӜgӜhӜhӜhӜhӜhӜhӜhӜhӜhӜhBK0RRX{\՚e՛e՛e՛fԛfԜfԜfԜgԜgӜgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgBK0RSX|\՚e՛e՛e՛eԜfԜfԜfԜfԜgӜgӜgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgCK1RTX~[՚e՛e՛e՜eԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgDK1RUW[՛e՛e՛e՜eԜeԜeԜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgCJ2RWW[՛e՛d՜eԜeԝeԝeӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgCJ3RYVZ՛d՜d՜dԝdԝeӝeӝfӜfӜfӜfӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgBJ4Q[TY՛d՜c՝cԝdӝeӝeӝfӜfӜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgBI5O[QV՜c՝cԝcӝdӝeӝfҝfҝfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgAH7KXL|P՝aԞbӝdӝeӝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg?G9GNL{߭Gֶ<ҫOѦZѤ^ѤaУbФbФcϤcϤcϤcϥdΥdΥdΥdΦdΦeͦeͧeͧeͧeͧeͧeͧeͧeͧeͧeͧe>@/HNAr2>GMQTWYZ¿[¿\¿]^^__``aaaaaaaaaa;B*>Ja(n1w9|@GKORTUVWXXYZ[\\^^^^^^^^^^;;*>$L/T7Z=^BbFeGgHiIkKmMoOpPqQrSsTtUuVuWvYwZx[x[x[x[x[x[x[x[x[x9".*63;9@;D=I?MAQCTEVGXIZK[M\N]P^Q_S`TaUaWbYcZcZcZcZcZcZcZcZcZc. ?O4WM[f]_cݗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. ?O4WM[f]_cݗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. ?O4WM[f]_cݗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. ?O4WM[f]_cۗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. @P5WN[h]_c՚gԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. AQ6WP[j]_ߗdԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚi/ AR6WQ[l]_ۘeԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚi/ BR7WR[n]_יfԚfԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhӛhӛhӛhӛhӛhӛhӛhӛhӛh0 BR7WSZp\_ԚfԚfԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh0 CR8WTZr\`ԚfԚfԚgԚgԚgԚgԚgԛgԛgԛgԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh0 D R9WUZt\`՚fԚfԚfԚgԚgԛgԛgԛgԛgԛgԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh1 D R9WVZv\ߘa՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh1 E Q:WVYw\ݙb՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh1 E Q:WWYy\ۙc՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh2 F!Q;WXYz\ٙd՚f՚fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh2 F!Q;VYY{[֚e՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh2 F!Q;VZX}[՚e՚f՛fԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӜhӜhӜhӜhӜhӜhӜhӜhӜh3 G!QT]WZ՚e՛e՛e՜eԜeԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh4 J"Q?T]VZ՛e՛d՛e՜eԜeԝeԜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg5 J#Q@S^UY՛d՛d՜d՜dԝeԝeӝfӜfӜfӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg6 J#PAR^TW՛d՜d՜dԝdԝeӝeӝfӜfӜfӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg7I$OAP]QU՜c՜c՝cԝdӝeӝeӝfӜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg9I%L@L[MzQ՜b՞aԝcӝdӝeӝfҝfҝfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg;H&I=HSMzMڪHԞaӝdӝeҝeҝfҝfҝfҝfҜfҜfҜfҜgҜgҜgҜgҜgҜgҝgҝgҝgҝgҝgҝgҝgҝgҝg>G&C6IOIwܹ<5ϸEγOͰU̯Y̮[̭]˭^˭`˭`˭aʭbʭcʭcʭdɭdǭdƮeĮfĮfĮfĮfĮfĮfĮfĮfĮf?@ C+EP3n!1>FLPTWYZ\]^^_`abcddddddddd=;A.,J!^,k4t;zB~HMPSTVWXYZ[\]_`bbbbbbbbb3<+,>(K2S9Z?_DcFfHiIkKmMnOoPpRqSrTsVtWtYuZv\v^w_w_w_w_w_w_w_w_w8.#$.-65=:BWWZr\^ޘcԚfԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԛhӛhӛiӛiӛiӛiӛiӛiӛiӛiӛiӛiӛi~%7G)U?WXYt[]ۙcԚfԚfԚgԚgԚgԚgԚgԛhԛhԛhԛhӛhӛhӛhӛiӛiӛiӛiӛiӛiӛiӛiӛiӛi%7G)U@WYYu[]ؙd՚fԚfԚgԚgԛgԛgԛgԛgԛhӛhӛhӛhӛhӛhӛhӛiӛiӛiӛiӛiӛiӛiӛiӛi&7H)T@VZXv[]՚f՚fԚfԚfԛgԛgԛgԛgԛgӛhӛhӛhӛhӛhӛhӛhӛhӛiӛiӛiӛiӛiӛiӛiӛi&8H*TAVZXwZ]՚f՚fԚfԛfԛgԛgԛgԛgӛgӛgӛhӛhӛhӛhӛhӛhӛhқiқiқiқiқiқiқiқi&8H*SAU[XxZ]՚e՚fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛhӛhӛhӛhӛhқhқhқhқhқhқhқhқhқh&8I+SAU[WyZ\՚e՛e՛fԛfԛfԛgԛgӛgӛgӛgӛgӛhӛhӜhӜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh&9I+RBT\WzY\՚e՛e՛eԛfԛfԛfԜgӛgӛgӛgӛgӜgӜhӜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh'9J+RBT\VzY\՛e՛e՛e՛eԜfԜfԜfӜgӛgӛgӜgӜgӜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh':K,QBS\UzX[՛d՛d՜eԜeԜeԜfӜfӜgӜgӜgӜgӜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh':L,PBR\TzWZ՛d՛d՜dԜeԝeԝfӜfӜgӜgӜgӜgҜgҜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh(;M,OBQ[SyUY՛d՜d՝dԝdԝeӝfӜfӜfӜgҜgҜgҜgҜgҜgҜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜh(<N,NAOZPvSW՜c՝cԝcԝdӝeӝfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜhҜhҜhҜhҜhҜhҜhҜh)=L+L@LWMqPR՝bԞbԝdӝeӝeҝfҝfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg*>J*H=HQMnOߩLبKӞcӝdӝeҝeҝfҝfҜfҜfҜfҜgҜgҜgҜgѝgўgϠhΡhΡhΡhΡhΡhΡhΡhΡh+@F(D7IILoH0ҸAаNϬWϩ[Ϩ^Χ`ΧaΧbͧcͧdͧd̨ęf˩fʪgȫhūi¬j¬j¬j¬j¬j¬j¬j¬j-CA#C-ILDl0>GǿNǼSƻWƺZŹ\Ÿ^Ÿ_ķa·abcdfgikkkkkkkk/@;D-@Le'v0=.F%X/e7n=tByH}MQSUVXY[\^`bdgiiiiiiii47:+";,H4Q;X@]EbGeHhJjLlNnQoRpTqVrXsZt\u_vavdwfwfwfwfwfwfwfwfw07"'.067=;B=G?KANCPESFTIVKWMXOYQZS[U\X]~Z^|\^z__yb`yb`yb`yb`yb`yb`yb`yb`4 !*,%/*2.427598<:><@=~B?|D@zFAxHBwJBuLCtODrQEqSFoVGnXGl[Hl[Hl[Hl[Hl[Hl[Hl[Hl[H  "%)-"z0$w3%s5'q7(o9)m<*l>+j@,iB-hD.gG/fI0dL1cN1bQ2`T3`T3`T3`T3`T3`T3`T3`T3h#g+ m9qD$yM4UE[U`cdogyjlnoqqrsstuvwyyzzzzzzzzh#g+ m9rD%zM4UE[U`ddpgzjlnoqqrsstuvwyyzzzzzzzzi#h+ n9sD%}N5VG\X_gctf~ikmopqrrstuvwxyzzzzzzzzi#j+ p9tE&N7VI\Z^jbwehkmnpqqrstuvwxyzzzzzzzzj"k+ q9vE'O8WK\]^m`{dgjlnopqrrstuwxyyzzzzzzzk"l, s9xE(O:XM\_^p_cfikmnpqqrstuwwxyzzzzzzzl"n, t:|E)P;YO[b]s_behjlmnpqrstuvwxzzzzzzzzm"o, v:F*QXSZh\}]_begݗhڗiؘiטi֘j֘jטlؗnؗpؗrؗtؗvؗyؗ{ؗ{ؗ{ؗ{ؗ{ؗ{ؗ{o!s- z;H,U?WTYj[]^beܗfؘgԚgԚhԚhԚhԚhԚiԚiӚjԙmՙpՙsՙvՙxՙxՙxՙxՙxՙxՙxp!t- {;H,T@VUYk[\^aݘe֙fԚgԚgԚgԚhԚhԚiԚiӚiӚiӚiӚkӚoӚsӚuӚuӚuӚuӚuӚuӚuq!u- |;I,S@VUXlZ\^aٙeԚgԚgԚgԚgԚhԚhԚhӚiӚiӛiӛiӛiқlқpқrқrқrқrқrқrқrr!v- ~<J-S@UVWlY[]ߙa՚fԚfԚgԚgԚgԚhԚhӛhӛiӛiӛiӛiқiқiҜnќqќqќqќqќqќqќqr!w- <K-R@TVWmY[]ݙa՚fԚfԚfԚgԛgԛgӛhӛhӛhӛiӛiқiқiқiќmќoќoќoќoќoќoќos x. <L-Q@TVVmXZ\ܚa՚f՚fԛfԛgԛgӛgӛhӛhӛhӛhқiқiқiқiќmНoНoНoНoНoНoНos y. <L-Q@SVUmWY[ښa՛e՛fԛfԛfԛgӛgӛgӜhӜhҜhҜiҜiҜiҜiНmОoОoОoОoОoОoОot z.=N-P@RUTlVXZٛa՛e՛e՛eԜfԜfӛgӜgӜhҜhҜhҜhҜiҜiҜiОmϟoϟoϟoϟoϟoϟoϟou {.=N,O?QTSkUWYٜ`՛d՜dԜeԝeӜfӜgӜgҜgҜhҜhҜhҜhќiѝjϟnΠpΠpΠpΠpΠpΠpΠpu |.>M,N?OSQiSUWڝ\՜c՝cԝdӝeӜfҜgҜgҜgҜgҜhҜhҜhѝiϠl͢p̢q̢q̢q̢q̢q̢q̢qv ~/>L+L=MQOfP{RTܡV՝bԞcӝeӝeҜfҜgҜgҜgҜgҜgҜhѝhϠḳn˥rʦsʦsʦsʦsʦsʦsʦsw /?J*J;KNMaPwQQۧNա\ӝdӝeҝfҝfҜfҜgҜgҜgОgΠi̢jʥmȧpŪu«x«x«x«x«x«x«xy0AH)G8HINZOyNܰGմBҬQѧ[Ѥ`ѢcТdТeϢeϣfΤg˥hȦiƨlêo˿rɻwƹzĹzĹzĹzĹzĹzĹzz0BE&C3I@M]KyݸB5нBͷM̳T̰Y˯]˭`ʭbʬcɬeƭfĮhƿjźlķp´sy{{{{{{{|1DA!C+IAI^ݿA*2C#X,g4s:|CJOSWZ[]_bdgkotxzzzzzzz!46=0*?)O2[9d?kDpIuNxP{S~UWZ\_behlpvxxxxxxx /9/'%7.B6L<@=~C?{F@yHBwKCuNDsPEqSFoWGmZHk]IjaJheKggKggKggKggKggKggKggK  $(,"~0$y3&u6(r8*p;+n>,l@-jC.iF/gI0eK1dO2bR3`U4^Y5\]6\^6\^6\^6\^6\^6\^6\^6  { up l$i(f+c.a0_3^6\8[;Y>WAVDTG SK QN!OR"NT"NT"NT"NT"NT"NT"NT"]%W*T3 Y?eG"oN0vV=z\H|aR~fYj`md~ph}rk}tm|wn{yo{{pz}qzryrxrxqxpxoxnylylylylylylyl]%X*V3 Z?hF$sN1yU?}[JaTe]iclholqotqvs~xt~zu}|v|v|v{vzv{u{s|rzqzqzqzqzqzqzq^$Y*W3 ]>lF%vN3|T@[M`We`igllopqssvuwwyyz{z~{~{~{}z~y~w~v{v{v{v{v{v{v{v_$Z*Y3 a>oF&zN4TBZO`Zecijlpntqxszu|v}xz}}|{|{|{|{|{|{|{|{`$[)Z3 e=tF'~N6UDZQ`]dghnkunyp}rtuwy|~󁍁}}}}}}}a$\)\3i=xF(N7UF[T^`ckgsjzmoqstvxz}󉃉񆈈b#])^3m=}F)O9VH\W^daofxilnqrstvxz{}툈녎肕肕肕肕肕肕肕c#^(`3r<F*P:WJ[Y]g_sd}hknpqstvxy{|鎁苇戎䅗䅗䅗䅗䅗䅗䅗d#_(b3v<G+Q;XKZ[]i^vafjmoqrtvxy{}厄㋋ቓ߆߆߆߆߆߆߆d#`(f3z<G+RL*N9PIRZTkV{XY[\^۞cћjОmΟr͡vˡ{Ȣšßj!g&}1>K)L8NHPXRhTwUWYYުXԨ]Сf̢jʥqɥvŦ}¥k!g&1?J(K6LENTPcSpU|VUܲQӳRϬ]ͧeɦiŨnvʼƻk!i&1@H&H4IBLOQ\SkSRڼHҾJͶU˱]ʬcƫgʿlɺsƵ}òl!l%1AF$F1G=MHPXQnN>BMɻVǶ]Ƴbf»kqym q%1BC!B,I6MEN\Jp/:ENVü\¹aeinvo v$1 B?C%I1KHE^+p1=GPV\`cgms{p |#2 >=DG4AJ(^/n6{@HPV[_bfkqxŁƌǙƣr"29 >C >6$J,[4i:sA|IPVZ]adiov}͇ΑΝyϫyϫyϫyϫyϫyϫyϫt!28>;#7(H0V8a>jDqJwP|TWZ^bflrz؂׋y֕t֡t֡t֡t֡t֡t֡t֡|199##4,B4N;WA_FeKjMnQqTtXw[y_{c|h}n~u~~}}{|v~ppppppp27!(/0:8D>KCQEWG[J^MaQdTfXh\j`kdl{inxonuvns}nqmnmnmnmnmnmnmnm3 "+'4097;==B@GCJEMIPLRPTSU}WWz[Yw_Ztd[qi\no]ku]h{]f]f]f]f]f]f]f]   $)-#0)4.73:6=9@;}D=zG?wJAuNBrQDpUEmYFj]HhbIehJbmK_rK\zK\zK\zK\zK\zK\zK\zK  !&*/#{2%v6(r9*p<+m@-kC.iF/gJ1eM2bQ3`V4^[5[`6Ye7Vj8Rp9Rp9Rp9Rp9Rp9Rp9Rp9Կ  zto$k(h,d/b2_6^9\<Z@XC VG!TK"QP#OU$MZ$K_%Ge&Ge&Ge&Ge&Ge&Ge&Ge&}slg b^[ X U# S& P) O-M0K3J7H:F?DCBH@M>RmF%sM0vU;x[EyaMyfSxkXxo\ws_vwbu{ct~esfrfpfpfqfqercockchcgcgcgcgcgcgcV%Q+K1 Y6h>rF&yM2{S=}ZH~`P~eW}j]}na{rezvgxziw}kvlultmtlulujuipjljiihihihihihihiW%R+O0 _5n=xE'M4S?XJ_Td[ibmgqj~um}xp||qzrysxsysyrzpuqqqmpkpjojojojojojoX%S*S. d4s<~E(M5SAYM]Wc_hfllpptswv{x~y}z|z}y~wzxuxqxowlvkukukukukukuY$T*W, i3x<E(M5TBYN]Yabgjkqousyv|z~~zvs~p}o{nznznznznznzZ$U*Z+m2}<E(N6UCZO\[_edniun{ruy~􆆆逗zwttt€tttttt[$V)^*r2;F(O6VCYP[\^gapgxlqtx}򊁍팄膐‡{yyyyyyyyyy\$W)a(v1;F(Q5TBWPZ\\h_rd{kpsw{捇ڀ~~~~~~~]#X)e'y1<G'P4SAVOX\[h]s`}hpsy}䑂ފׄх̆ȅĄ„]#Z(h'}0<H&O3Q@TMWZYg\r^}eotz㐁܎Ӊ͊ȋŋŠ^#\'k&0<I%M1O>RKUXWdZp]{`lt~؍ΏȐĐ_#^&n%0<J$K/MDG'K1N9R@UFVUTcTr^el}a"h#{#0 >CG#K*N0P;PKFZFiOwYaitˆb"k!"0 ?BGK"L/K?9O>^DlLxV_fo~ǐãc!o "/> BGH!F2/C7R>`DlLwU]dkw̘ͅzȩe!t /> B DB$)50E7S>_EjLtU|\ahqӍwҠrͰw{~g!z0=A>!'*72E9R@]FfLnTuY{_elw܅wړm٦hԸmȹpsuuuuuum3<; #(,74D;OBXH`MgRlWq\vbyi|q~{|}x|ofੁ`ݾbf€hhhhhhu38 &(/57?=ICQHWK]ObTfYj_meo{lqwursrpphs`uYvYvZvZvZvZvZvZv~0& )%2099?ABHDMHRLVQYV\[_|aawgcsnenwfjefdae[gTiQiQiQiQiQiQi   #, 4)70:7=<@ADEHHMK|RNxVPu[RqaTmgUioWdxW`W\WYVTWQXQXQXQXQXQX ֿ  !'+ 0&4+80<3~?7zD9vHpQ@lVAi[CfaEbgF^oGYxHUHQHMHKGKGKGKGKGKGغ  "',{0"v5%q8(n=*kA,hE-fJ/cN0`S2]Y3Z_5Vf6Qn7Mw8I8E8C9C9C9C9C9C9ڴ} vq"l'h,d0a4^8\<Z@WD UI!RO"OU#L[%Hc&Dk'@s'<}(:(:(:(:(:(:(Ͻyojea] Y V$ S( P,N0L4J9H=FBCHAO>V:]6d3l1r1r1r1r1r1rznf_YT PLIFC@">&<):.83684>2D .K +R (Y '] '] '] '] '] '] G)B0<7>9A> KFROVW"W^(Xe-Xl1Wr4Vx6T~8R9Q:O;M;KP>M?K?K?L>L>M=M5B7H< RDXL\T%^\,_c1^j6]p9\vY?W@UASBQBNBOBOBPAQ@Q?Q>N>M?L?L?L?L?L?J(D/A4E5M: WB]J`S'bZ.cb4bh9an=`t@^zB]C[EYEWFTGSGSGTFTEUDVBRCQDPDPDPDPDPDPDK(E.D2I3 R8\@bH eQ)gX1g`7gf=fmAdsDbyFaH_J]K[KYLXLXLYKZJZHXHUITJQJPJPJPJPJPJL'F.H0M0 X6b>gF"kN+lV3m^:le@jkEiqIgwKe}MdObP`Q]Q]Q^Q^P_O^NZOYPUPSPSPSPSPSPSPM'G-K.R. ^5h=nE#qL-rT5r[=qbDpiInoMluPj|ShUfVdWcWcWcWdVdT_V]WYWXVWVWVWVWVWVWVN'H-P,W,d3n<uC$xK.xQ7xY@w`GugMsmRqtUozXlZk\h]i]h]i\i[e\b]^]]]\\[[[[[[[[[[[[O&J,T*\*j2t:{B$J.P8~VB}^J{ePykVvrZty^q`obmcmcmcnbkbgccdadacabbabababababaP&M*X(a(p1{:B$J.P9UC[KcSjY|p^xxbuerhqiqiqhpgjjfjejfighgggegegegegegeQ&P)\'e'u09A#I.P8UCZL`Uh\ob}wgykumtotoumnojpjqkplnlmlklilililililiR%T'_&j&z/8A"J,P7VBZL]Ue^nevk~oyrwtvsstnvowpvqtrrrpqnqlqlqlqlqlqlS%V&b$n%~.8A J+R6U@YK\Ua^kftm}s}wwywxr{t|u|vzwxwvwsvquouououououoS%Y%e#r$. 8BL)Q3U>XH[R_\ifro|v~|txz{|€}~|{|x{vzszqzqzqzqzqzqT%[$h"u#- 7DM&Q0T:WDZN^Xfcrnٍz̈́~zxu}r}r}r}r}r}rU$^#k!y", 8FL#P,T5W>ZG^Pd^եnoȚ|||yvssssssU$`"n |!, :HLP'S.V6Y=\J^]dzinu}}zwttttttV$b!q ,<HLO!S&U+W3OHY[dmo|~{xuuuuuuW$e t-> HKOQR!G0MDVX`jkzyt{yvvvvvvX#hw.A G KML<&F2MATT]fgvus͌gɫox~{yvvvvvv["k{/BGIF0:*B7JDRQ\`dpp}r܂eڠaϺkrx}~{xvvvvvv^!o0BEC $/!8.@:GGNSX_ajktwy|mb઀^elqv|yz{w~u~u~u~u~u~uct0@@% %/$80?xNBsTEn[HibKdkM^uOWOQOLNGPESFTGVGVGVGVGVGV ݳ #)/!4&9+y=/uC2pI5lO8hU;d\=_c?ZlASxBMCGCBB?AAD?F?F?F?F?F?FѼ !'z-t2 n7#j=&fB(cH*`N,\T.X[0Tc2Nm3Hy4B5<67545747474747474ӷ~x ql$g*b/_4[:X?UDRJ OQ!KX"Ga$Al%;y&6'1(-()()()()()()(ճɾulg b]Y U% R* O/L4J9G?DEAL>T9]4h/u*'""""""˻ujb[V QLHEA!?&=+;0866<3C /L *V &` "k w       wkaZTNJG C@=;9 6$4)1..4+:&A!JS[ffffff>,9267999=8C %<&:'8(6(4)1)/).)/(0(2'3&4%4%3%2&2&2&2&2&?+:2:4=6>9?? EIHRI[Ic Hk#Ft&C}(A)>*<+:+7,5,2,3,4,6+7*8):(8)5*3*3*3*3*3*@+;1=2A4B7D= JFMONXNa"Nj&Kr)I{+F-C.A/>/<0908090;/-;.8/8/8/8/8/8/A*<1A0D1F5J; PDSMTV T_%Tg)Rp-Ox/L1I2F3C4@5=5?5@4A4B3C2D2A3=4<4<5<5<5<5<5B*>/D.I/K1P8 VAYJ[S"[\(Ze-Xm1Uv3R6N7K8H9D:D:E:G9H9I7J7G9C:B:A;A:A:A:A:A:C)A-H,N,Q.X5]=`FaP$aY+`b0^j4[s8X}:TI?J?L?M?N>PI@GAGAFAG@G@G@G@G@D)D+M*S*W,_3e;gChL&gU-f_3dh8`q<]z?YAUCPDODPEQDRDTBRDNFMGLGMGNFOFOFOFOFOFE)H)Q(X(^)f1l9oAoH'nQ.l[5jd;fn?cwC`F\HXITJUJWJWHWISLRMSMTMULVKVKVKVKVKVKF(L(U&]&c'm/ s7w?xG'vN/tX6qa=njBjtGfJcM^NZOZO[N\NXQWSYSZS[R\Q\P\O\O\O\O\OG(O&Y$b$i%s- {6>F&M.|T7y^>ugEqqJm|NiQdS`T]T_R\U\X_Y`YaXbWbUbTbSbSbSbSbSH(R%]#f"n#z+ 6>F$M-S6Z>}dExnLszQnUiXeYbX`Yb]d^f_g^g\h[hYgWgVgVgVgVgVI'U#`!j s!+ 6?G!N*S4XהfL͌rXņah|myoxoynymyjxhwevbu`t^s]s]s]s]s]O$] iu+8 DOSU#W-֧V=˟bLmXzckqttrpm~j|g{dybx_w^w^w^w^w^Q#_lx+9G OQSغG+̲R;]KiXudmtxxurolhe}c|`{_{_{_{_{_S"bo|+:KM N ۽EB(½O9ZIeWpc~muy|zwtpmjfda~`~`~`~`~`V!dr+;IJߺE2?%K6VFaUlayltvzo{sxzu~qnjgebaaaaaX gv*<FA'4="H3SC]Qi^uiurkwcygwnttqxn|khecaaaaa[kz&:?(6?G.P>ZMfYwrdkǃmaÚrXtZscripomsjvgye{c|a|a|a|a|a_o 1) 5?H)P9XG|cSop]c݁eX٘kPӶmOlWm^mdkiimfpdrbtatatatatact ) 4=!F+M6V@{`JnkTb{\V`NbIcMfSgYg_ecdgbi`k_k_k_k_k_iz  պ*4<"B+I5Q=w[ElfLasRVVLWHVG[J^O`T`Y_\^_]a\a\a\a\a\o ֳ!+28!>)D1{M8rV>j_DbkIXzLNOFODNCSEVJXNXQXTXVWVWVWVWVWvڬϺ&-39&{@,tH1mP6gY;`c?XoBODFF?FAD?I@LDNGOIOKPKPKPKPKP Ҵ !(.z4 r;%lB)gK-bS1\\4Vf6Nr9F;=<7<:::=;@AF>N9X3d-t& бŻ|oe^WQ LHC?$<*:0774?0G +R %_ n        ǹrf\UOJF B>;85$2*/0+6'>!HTcr ui]SMHD@= :742/,#*)&/#6?IT _krrrrr6.0526382<0B+I&S&] %h#r!|  6.1545565:3@/H+Q +[ *f(p%{#  7.246384886>3E2O 2Y0c.n+x(%"  8-5291<2<5;;8B 9L 9V7`4k1v.+(%"!$'#"!9-80=.@/A2@8=? ?I@T?^/.?-=/<2<3?4@4B4B3B3B3B3B3=*F'N%T$X&Z)^1 a:aD`O_Y$]c)Zn,Vy/R1N3K4H4F4F3C2C3A7C9F:H:I:J9K8K8K8K8K8@)J%R#Y"^#b'g/ j8jAhJgU%e`+bj/^u3Z5V7S8P9O8L8K7G;J>M?O@Q?Q?R>R=R=R=R=R=C'M#V!^ d i%o- s7t?rGoQ%l\+ig1er5a9];Z|EyM$tX+pd2lo7g};c?`B]D[EZFYGZI\J]J^I_H_G^E^D^D^D^D^DH$S ^gov#}+4 <DK!T)z`1tl9ny?kEhIeLcMbNaNbOcPdOdMdKdJcHcFcFcFcFcFJ#Vakt|")3 ;CIQ%څ\1~g:xsCtIpNnRkTjUiTjUjTjRjPiNhLhJgHgHgHgHgHM"Ydnx!(2; BGؕK$ΏX0ʼnc;nD~zLzRwVtYrZqZqYpWpUoSnPmNlLjJjJjJjJjJO![gr| &09@ ڣ<ΞG"ĘT0_;jEuNTZ}]z_x_w]vZuXsUrRpPoNnLnLnLnLnLQ ^ju#.7ݩ:Ь7ƦD Q.\:fEqN~V\`bb~`|]zZxWvTtQrOqMqMqMqMqMS`my(.Ժ"ȵ3AM,X9cDmNyV]b{dudxb|^~[}XzUxRvPtNtNtNtNtNVcp}ؾ 0 >J*U7`BjMvU]wboejembr_v\yY{V}|S~zQxOxOxOxOxOXfsֳ, :F&R4\?gJ~rSu[l`ed_dbbh_m\qYtVvTwRy}Oy}Oy}Oy}Oy}O\jw֫θ'6C#N0Y;~dFtoOk}Wc][`UaV_^^c[hYlVnTpRrPrPrPrPrP_n| ٥бȾ'3?K*V6ua@lmIc{QZVRZM[LZSZYY_WcUfShQjOjOjOjOjOdr ҫʷ)6 >H$wS/n_9djA[yHRӋNKϢQFRCRITOUUTYS]Q_PbNbNbNbNbNix զͲþ(3<}FtQ'k\0ag8Xt>OCHFCG=G@KEMJNONSMVLXKXKXKXKXKoڠϭƸ%/8v@nK#fU*_a/Vm4M~8E;A;=:8@>A?C?C?C?C?C?֣̰º}u% m-f5`>ZGTQN["Fi%>y'6)/*,*,)/,1042649595959595۟Ϭŷw pjc& ]-W6R>MGGQA]9k2}* #! !& (!)$+&.(.(.(.(.(ѩǵuld \WQ$L, H4 D< ?E;O4[,j%~!"""""Ԧɲui`XR LGA ='9.561?,J%W g }         ˰xk_UNID ?;74"0),0(8#AN^ rö|nbWLGB>:6 30-)#&)"19DRdxrfZPGA=962/ ,*'$!#*1; GUcq-1*5-5-7+;'A!HR]iu.1,4/305.9*?%FP[ gs  /1/2213327.<*D"MXdp }    00205/606439/A)J!Ua m y          105-9,;-:0865=0F(Q'] %h #t    3.9+=)?*?->1;87B5M 4X 1d/o,{)'%#!  6,<(A'D'E)D-B4@> @H ?T=_:j7u420.,+**(%#')+,,,,9)@&F$J$L%K)K0J: JE JPH[EfBq?|<:766531,'!,#0$3$5$6$7$7$7$7$<'D$J"O!R"T&U-S5 S@ SKRWObLmHxF C!A!@!?!>!< 9!4%5'9)<*>*?)@)@)@)@)@)?%G"OUX\$^+]2]< \GZRX^UiQt!O#L$K%J%H%G$E$A)?,A.D/F/G/H.H-H-H-H-H-B$K SZ_d"g(g/g8 eBcM`Z]e Zq$W~&U(S*P,O-M-M-K0I3K4M4O4O3O2O1O1O1O1O1D"NW^ek n&p,q5 p>lHiUfb!bm'_y+]/[1Y3W5V6U6T7S9U9V9V8V7V6U4U4U4U4U4G!Q[bkqu$x*z1z: wDtPo]#lh*hs/f4c7b:`<^=]=\=[>\>\=\<\:[8[7Z6Z6Z6Z6JT^fov{!&-5 ڂ?~LyX$uc,qn2ny8lf=ei=i=i=i=S_iu  ՚Σæ 1 >J!U+`4j{l>{l>{l>Ual x ֗ϟƩ-;GR)]3g;qB{~HtMnQiSeRfPkMn|JqxGsuDtsBuq@vp?vp?vp?vp?Xdp} ړќɥ)8DO&Z0d9zn@rzGlLeP`R[R\ObMfJi~Gl{EnxBovApu@pu@pu@pu@[h tԘ̡ê%4 AL#W,ya5ql=jxCcI\MVORORNXL]JaGeEg~Ci{Aiz@iz@iz@iz@_l yڔϞǧ0 =HyS(q^0ii8bu>[DTHNJJJHJOITHYF\D_BaAb@b@b@b@cpԚʤ*8xDpP"i[*af1Zs7SF>J>M=O=Pg8x1.+)$(!+$.%0'1'1'1'1'ԝɩ{ne^WQ%L/G8CC >N 8Z1i+{%""%&&&&ڙ̧±}pd[T NHC$>-:56?0J*W$h |       ϤŰqeYOJD ?:6 2(.0*9#CQc z    ǮtgZNE@:61 -)& "(1; HZqxk_SH>940-)%"!*3?Oc~}ocWLC:40-)&# # ,6DUh{%4&4'4&5#:?G P\gs&3(2*2)4&7!=ENYeq~'2+0-0-1*5%:BK Vcp{*0/.1-1./2*7%>GS _kw..2+5*5+3.03+:#CNZfr ~  1+6(9':'9*6.15.?*J%V bmx          4)9%=#>#>%<);19;6F1Q-]+h )s '~ % $ # " ! !        7&=#A!D D!D%D.B7@A<:9!;!=!>!> > > > > @ HOTY^`$_+]3Y=WI UVSbQnOyNMLK J H!H!F#D%D&E&F&F%F$F#F#F#F#CLSY`dg!h'f.c7bD _Q]][hYsX}!V#U%T'R(Q(P(O*M+M+M*N)M(M'L&L&L&L&FOV]ejmo"o(n1l? jLgXecbn"`x&_)]+\-Z.Y/W/V/U0U/T.T-S+R*Q)Q)Q)Q)HRZa iosuww,v; sHpTm_ ki%is)g~-e0c2a4`5^5]4[4[3Z1Y/X-W,V+V+V+V+KT] e msx{~ˀ(7 |DyPv[!se&po+nz0l3j6h8f9d9b9a7`6_4^1\/[.Z-Z-Z-Z-MW_ i q x }Ղ͆É$4AM~X!{b'xk-uv2r6p9n;l=j=|h<{g:|e8|d6}b3}`1}_0}^.}^.}^.}^.OYblu |փΈō 0>JT _'h-|r3y}7w;~u>yr?up@sn?rmlp;nm9pk6qi4rg2se1se1se1se1T^ ht}Ն̎”*8 DOY%c,}l2ww7r_AZBWAW?\~=`y:bu8er5fp4gn2gn2gn2gn2Yeq}ֈ̑™ !1=IzS t]'ng-gr3a8\S5A6F5J4M3O2Q1Q1Q1Q1fs߃ґǛztn.h; bG\SV_Pj Kw%E(@+<,:,8-7/<0@0D0F/H/H/H/H/l|ٌ̘âshc%^4YA SNNZHgCu>φ:Κ!6˳"4!2$/'2)7*:+<+>+>+>+>+tѕǠ{la[U,P:LGGT Ba>o962/,((,"0#2$4$4$4$4$~א˝rdZ TO%I1E<@I;V7d 2t .+('""%(****ދϛŦvi\RLGB'>19<4G/U*d%w!    ӘȤyk_RID?:6%2..8(C"Qbw   ʣ{maTJ@;61-) %(!1<J \tìqcVJ@72-)$ ! ) 3AUmuh[OD:0)%   *8Kczm`TI?6.&" %1AUl 4"2!248>EOYeq|"2$0$0"26; BLWbo{$0'.'-&/"38?IT_lw(.++++*,&/ 4< DP\gs~++.)0'/(++&07@K Wbny/)2%4$3$1&,+(3%=GR^i t~2&6"8 8 6!3&3/08,C&N!Ydoy          5#9<=<<"<+:47>2I.T*`(k&u&&%%$#"      ! ! ! ! 8 =ABCFE'C/@9=D9P6[4g3q3{2210/.-- , *((*+,,,,;AEHKNN#L*I4F?CK@W?c>m >w > = = <;:997544555555>EILRVVT%Q-N8LEKRK] Jh IrI{HGGEDCB@?==>>====AHMR Y\][Y%W1W?WL VX UcSmRvQPONMKJIGEEEDDCCCDKQ W ^ aba_b,b;aH _T^^\h[qZ{XW V"T#S#Q#P#N#L"L!K JIIIIFNT\b f gghk(k7jD hOfZddbmaw _#^%]&[(Y(W(V(T'S%R$P"O!N NNNHP W`fjmopt$s3r@ pLmVl`jjhs#f}&d(b*a,_,],}[+{Z*zX(zW&zU$zT#zS!zR!zR!zR!KS Zdjotvx { {0y= wHuSs]pf np$lz(j+h-}g/zd0vc0ta.s_,s^*s\(tZ&tX$tW#tW"tW"tW"MU]gnuz}-: ~E|PyZwc!um%rw)}p,yn/um1qj2nh2lg1ke.lc,ma)n^'o\&o[$oZ$oZ$oZ$OXakszƀ)7CMW~a ~{j%zyt)uw-qu0ms2iq4eo4dm2ck0eh-ge+hc(ia'j_%j^%j^%j^%Q Zdnx̀†%4@ JT|^wg$rq)n|-i|0ez3`x4]v4[t3[r1]n.`k,bh)ce(dc&ec&ec&ec&T ]hs}ȅ !0= HzRu[pe#kn'fz,a/]2X4U}4S{3Sx1Vu.Yq,[m*]j(^h'_g&_g&_g&Wamy΃ċ,9 yDsOnYib dl%_w)Z-U0P2M2K1K0N{.Qv,Ts*Vp(Xn'Xm'Xm'Xm'[erʉ}'w5rA lLgVb`\j!Wu%R)M,I.E.D-C-E,I~+Ly)Ov(Qs'Qr&Qr&Qr&_jyІŐy t!o0j<dH _RZ]UgPs K#F&B(>(=';)<)@(D'F~&Iz&Iy%Iy%Iy%dq؁ˍpie)a7\CWN RYMdHpC~?; 8!7 4"3$7$;$=$@#@#@#@#izщƕ|k] YV.R<MHIT E` @m<{8521.,-146777rل˒ufVKH"E1B??M;Z8h4w 1Љ .Ϡ+̼* '$#'*,---~юƛ{l^QC?;%936A3O/],m)&$"  !"""׊ʙqdVJ>941'.3*?&M"]o    ΗâugZNC82-*&$"/:IZ o ơxj]PE;1*&" (4BUl|m_RF<3*"  +:NgreXK@5+" "1E_xj]QF<2*!  *<Tr20026<CLWbnz0..049@IT_kw!.",!+-0 5=FP\gr}$+&)%("),28BLXbmx((*&*$'%!',4=HS^is|,%.".!,!'" &09D NZdnw/#120,*#(,%5?IU_ i s { 2 565342'/0*:%E!P[eox59;:;<:"7+45/@,K*W)a)k)u)~))))(('&%$" ! ! " # # # 8<?? CDB>$;.795E5R6]7g7p7y77766432 1 / - , - - - - - ;@C EJ KID?%?2A@CLCXCbCkCt B} B A A @ > =<:97555555>CFKP Q N HGL,N;OGNSN] Mf Lo LxKJIHGEDB@>=<<;;;AF JQUVURSW'X6XCXNWY VbUkTtS}RQONLJIGEDCB~A~A~ACIMUZ\^]\`#a2a?`J _U ]^\g[pZzXWVTRP}O{MyKxJxHxGwFwFwFEKQY^cfee hi/h;gG fQd[cdam`v^][ |Z!yX!vV!tT sSrQrOrMrLrKrKrKG NU]dilmlop+o8nD lNkXiagjfs~d}{c!wa#t_$q]$n[$mZ"kX kVkTlRlPlOlOlOJ PXaiortsuv(v5tA sKqUo^~ng{lpwjz sh"pg$le&ic&fa&e_$d]"d[ eXfVgUgTgTgTLS\entxzz|}$|2{>yI wR|v[xtdtrmppw lo#hm&ek'ai(^g'^e%]c#^`!_]a[aYbXbXbXNU`jsy~!/;F z~Pu}Yq{bmykiwu eu#at&]r(Zo(Wm(Vk&Vh$Wf"Yc [`\]\\\\\\QXdox,~8xC sMoVk_fhbr^}~"Z{%Vy'Rv(Ot'Oq&On$Pk"Sg UdVbWaWaWaT\iu~|'v5q@mJ hSd]_f[pW| R#N%K~&H|&Gy%Gu#Hr"Km NjOgPfPfPfWbo{Äxs"o0j<fF aP]ZXdTnOzK G"C#A"@"?~!@z CuFqHnIlIlIl[hvʂ{ojf+b7^BYM UWQaLlHxD@<:987;~>y@uAsAsAs`o~ʼnzh_[#X1T=QHMS I^ EiAv=96331/2589|9|9|gxˆvdTOL(I5FBCM@Y<)977D5Q2_/m,~*'%$" !$%%%}ˍvgYK=0 ,*((6&D%T#d!uӊѣ    Љŗ|m_QD8,# !'4BSf{     ɕqcVI>3( $0 >Qf~ tfYLA6,# *9Ldxi[NC8.%  "2F`~oaTG;0&  *>Z}ugZNB8.% "7Su0.. 049@IT`lx.,,-16=FP]it}+))* -28BLXdox!(!&%&).4=GS_js{$%$""!!$ (09CNZdnv~("(&!#,5?IU_iqy+,+& (0 :DPZdmt|.0.+)(%# ,5?J U _ h q y       133 /21-(%"/9EP[dm u!}!!"!!47779 83-'&%2)?+K-V/`0i0q0y000//-,+*(&$#$$$7: :>@>8 //4,7::F;Q;[DFCA;=A'D5EBFMFWF`EiEqEz D D C A @ > = ; 9 7 5 4 ~4 ~4 ~4 = @BIKNMIHL"N1O>OIOSO\Ne Mm Mv L KJHGEC|Bz@y=x<w; v: v: v: ? BGNSVWTR UW-X:XEWOVY Ua Tj SrR|QP~O{MxKvItHrFqCpBp@p?p?p?AEKRY]_]Z]_*_6_B^L]U \^ [fZoYx|WyVvUsSpQnOlMkKjIjGjEjDjDjDCGOW_cedbde&f3e?dIcR b[~ad{`lx^vu]q\nZkXhVfTeRdPdNdLdJeIeHeHEJS]diljhjl#l0k<jFiP {hXxgatejqdsnc~jag`d^a\_Z^X^U]S^Q_O_M_M_MGKWbioqpop rr-r9}pCyoM unVqm^nkgjjpgh{dg`e]cZaX_X]WZWXXUYSZQZQZQJO\gntvuuw xx*{x6wwAsvJ otS ks\hredpn`oy]mYkViSgQdQbQ_Q]SZTWUUUUUULTaltz{{|}~~y&u3p~>l|Gh{Q ezYayb]wlZuwVtRrOpLmJkJhJeJcL_N\OZOZOZOYfqz~vr"n/j:fDbN ^W Z`WjS}tO{KyHwEuCrCoClCiEeGbI_I_I_R_mwwn if*b6^A[KWT S] OgLrHDA>~<{l@iBfBfBfVfs~sf`\$Y1V<SGOQL[ He DpA~=:7654}4y6t8p:m:m:m]n{paU QO*L6IAFLCW@b:;537":0<<=G>P>Y>b>j>r>z==<;97~6|4z2x/w-w,v,v,88<@FHGA> BD+F8GCGMGVG^FfFnEwED C }B z@ x> u< s: r8 p6p4o3o2o2:;@GNQPKHKM(O4O?OIORN[NcMkLt }K~ zJ wI tH rF oD mB k@ j> i< i9i8h8h8<=DNUXWTQSU$V1V<VFUOUX~T`{Sh xRq uQ{ rPpOmMjLgJfHdF cC cA b? b> c= c= >?IT[^]ZXZ[!\.]9\C}\Lz[UwZ] tYf qXn nWxkViTfScQ`O_M^K]I \F \D ]B ]B ]B @COY`cb`_` bc+~c6zbAwbJtaRq`[ n_c k^lh]ve[bZ_Y\VYTXRXPWMWK WH XG XF XF BGT^ehgfef g|h'xi4th>qgGnfPkfX hea ecjbbt^a[_X^U\SYRWQUQRQORM RK SJ SJ DKYcjlkkklzmvn$rn0on;kmDhlMelV bk^ ^jg [hqXg}UeRcOaL_K\KZKWKTLR MP MO MO FP^hppppqzrstot lu-ht8etBbsK^rS[q\ Xpe UnoQm{NkKjHgFeEbD`D]EZFW GU HT HT IWdnuutuwsyl{ h{d{)a{4^{>[zHXyQUxZ Qwc Nvm KtyGrDqAo?l>i>f>c>`?] AZ AY AY M]jt{zyz||ne_\$Y0V;TDQNMWJaG~k D|w @{=y:w8t8q7m7j7g8c :a ;_ ;_ Tdq{yj^VSP*M6K@HJESB^?hD!K Xgx{wj]O@3& %2?M ] n   ƇteVH;." "0>N`tyj\MA4),<Nbzԗи}n`RE9-"  '8LdqcUG;0&!4JexiZL>2'  /Gf~pbTG;/$)De +)**-2:DQ]hqy( &&'*.6@MYdlt{%#"$%)0;HT_gou}"  #,7CNYaipw}'2=IS[cjqw}#-8CMV^ekrx~  '1<FPX`fmsz#   +6@JS[biov~& $ #/:D M V ^ elt| ) '"$  (4>HQZaip x ,*)*,+' ""%/':)D*M+V,^,e-m-u-~-,+*('}%{#y!xwww/,/3884/*.1*364@5J6R7Z7b7j7r7{665|3z2w0t.r,q)p'o%o$o$1.4<BB?:68;&=2><?F?O?W?_?g?o}>x{>x=v<s;q9n7l5j2i0h.h,g+g+32:DJIGB@AC"E.F9GCGLGT}F\zFdxFluEusDpCnBkAi?f=e;c8b6a4a2a1a156AJPONKHIKL+M6~N@{NIxMQvMYsLaqLjnKslJ}iI fH dF aD _B ]@\>\;[9[7[6[67:FPUTSQOP R~S({T3xT=uTFrSOoSWmR_jRghQpeP{ bO `M ]L ZJ XG WE VCV@V>U<V:V:8>LVZYXWUW}XxY%uZ1rZ;oZDlYLjYTgX]dWebVn _Uy \T YS WQ TO RL QJ QG PEPBP@P?P?:CQ[^^]\[}]w^r_"o_.l`8i_Af_Jd^Ra^Z^]c\\l Y[w VY SX PV NT LQ KO KL KIKGKEKCKC<IV`bbaa~awcpdleie*fe5ce>`eG^dO[dXXcaVbj S`u P_ M] J\ GY FW ET EQ EN ELEJFHFH?O\effffxgqijj fkbk'`k2]k;ZkDXjMUjURi^OhhLfs Ie Fd Cb A_ ?] ?Z ?W ?T ?Q?O@M@MDUbkjjjjtmkocq^r[r#Xr.Vr8SqAQqJNpSKo\HnfFmqCl~ @j =h ;f 9d 9` 9] 9Z9W9U:S:SK\hponnoqrgu\xVySyPy)Ny4Ky=IxFGxPDwYAvc>uoL<V9a7~l4|z2{/y-v+t+p+l*h+e+c,`,`\kvzyxxxyl}^SF>;9(725<4F2Q0].i,w)'%#}#y#u"q#n"l$i$ies~}~thZNB5/-+*)5(?&J$V"d!r{xusso}}pdWJ>1$ +6AN\l~  ~~zyl`SF:.!  *6CRbtui]PC6*)6DUg}sgXJ=0$ '5DXmdžĥzk\NA5) "2DZto`QD8,"  -B\zteVH:/$(>]{m^QC7+$<[('&')08CP\dmt{ %$##%+3>KV_hov| "  %-9FQZbipv} )4@KT\djpw} $/:DNV^dkqw} )3>GPW_ekqw~  #-7AIRY`flsy   '1;DLT[bhnu}  +5>GOW^dkr{"  $ /9BKSZahpx}{y y x x $ $'&"*4 >"G#O#V$^$e%m%u%%$}#z"x usqppoo'!&031.*# &)%*0,:-C.K.S/Z/b/j~/r{/|y/v.t-q+o)m(j%i#h ggg)'09;:74002!4,566?7H~7P|8Xy8_w8gu8ps7zq7n6l5i3g1e/c-a*a(`&`$`$*+8ABA?<99;<)~=3{><y>Ev?Mt?Ur?]p?en>ml>wi=g<d;b:_7]5\3[0Z.Z,Z*Z*,1>GGGEB@A B{C%xD0uE9rEBpEJnERlEZiEbgDkeDubC`B]A[?X=W;V8U5T3T1T/T/.7DLLLKIFHyIuJ"qK-oK7lK@jLHhKPfKXcK`aJi^Js\IYHWFTDRBQ@P=O:O8N6N4N4/=JPPPPNLyNsOoPlQ*iQ4gQ=dQEbQM`QV]P^[PgYOqVN}SMQKNILGKDJBI?I<I:I8I82BOTTTTSzRsTmUiVfW'cW1aW:^WC\WKZVSXV\UUeSToPS{MRKPHOFLEIDGDDDAD?D=D<6HTXXXXXtXmZg[ c\`\$]].[]8Y]@V]IT\QR[ZO[cMZmJYyGXDVBT@Q?O?L?I?F?C?B?A=MY\\\\}\o^g`aa\bYb!Vc+Tc5Rc=PbFNbNKaWIaaF`kD_wA]>\)H(S&~_$}m"|} {xvrnjgdbbdrutsrvsku_yR}H<0& #"# -7AMZhx|wtpnlkn{{yx}xryf}ZNC8,  $.9 E Raq~zxwvy~{nbVJ>3($/;HWh{wk_RG;0$ $/<K]pth\OD8,!  !-<NczsfYJ=1%+;Pg҄Ϩ|l]NA4) );RnqbRD7+  %;Utyj[M@2&  9X|&###'-6BMW`hpv}#!"'0=HR[cjqw}!+7BLU]dkqw}&1<ENW^dkpv}  !+5?GPW^ejpv}  %/8AJQX_ekpw~  )2;DKSY_ekry #-6>FMT[agnu} &09AIPW]cjrz~|{{{    *4 < D L SZahpy|y w u srqqp "  %/8@HOV]e~m|vywtromkihhg g %*,+(% "+$4%<&D}&L{'Sy'Zw'bu'js'sp'~n'l&i%g#e!ca``__ .3431.*(*,'|-0z.9w/Au/Is0Pq0Xo0_m0hk0qi0|f/d.a-_+])['Z$Y"YYX )69:98531 }3x4#u5-r66p6>n7Fl7Mj7Uh7]f7ed7ob7z_6]5Z4X2V0T-S+S(R%R$R#!0<>??>;9{9v:r; o<*l=3j=;g=Ce>Kd>Sb>[_>c]=m[=xY<V;T9R7P5N3M0M-M+M)M(%6ACDDC@{>u?p@lAiB'fC0dC9aDA_DI^DP\DYZCaWCkUBvSAP@N?K<I:H8H5H2G0G.H-*;EGHHG~FvDoEjF fGcH$`I.^I6\I>ZIFXINVIVTI_QHiOHtMGJEHDEAD?C<C9B7B4B2B11AIKLLKzKpJjKdM `N]N"ZN+XO4VO<TODROLPOTNN]LNgIMrGLDKBI@G>D>A=>=;>9>7>66FMOOOOvOkOdQ^SZSWTTT(RT1PT9NTALTJJTRHT[FSeCRqAQ~>P`D<`M;`V9_a6^m4]z2\0Z.X-U-Q,N-K-H-F-EJXZ[[[u[k\__WaNdEg@g=g;g&9g/8g76g@4gI3fS1f^/ej-dx+c)a'_&\&X&U&Q&O&M'LR__`_|_q_ha\dSfJi@l7o 4o2o!0o*.o3-n<+nE)nO(mZ&mg$lu"j ifc`\XVTRZddddxdndeeYiOlFo;r0v)x'w%w$#w-"w6 w@vJvVuctrsqnkgda^\[djjihuhliakVoKrAv7y,} &09DP~^ }m |zwtp l i g e dmpon}mrmio]rRvFz<~2''2<IWfx~zwspnmxwutzspsewY{NB7-" (3@N^o|zy~|zzzm}aUI>3( )5BSf{vi]QF:/$ (5EXntg[OC8-!  %5H_yĘsfZK>1%"3Ie~n^O@4( 3LjvgXI;.! 4Pq"  #*4>IS\ckqx~#.9CLU]dkqw}(3=FNW^ekqw} #-6?HPX_ekpv} '09BJQX_djpv}  !+3<DKRY^djpw%.6>FMSY_ekqy  (19@GNTZ`fmu~~~ "+4;CIPV\biq{|ywvttss   &/7>ELRY`g}o{ yx vsqomkjiii   *2:A}H{OyVw]uesmqwnljgeca ` ``` $&%# %|.y6v>tErLp Sn Zl bj kh uf ca^\[YXXXX )+--*(%" {#w$!s%+q&3n';l(Bj(Ih(Pf)Xe)`b)i`)s^)\(Y'W%U"S!RQQQQ(/2331/|-x+s+o,l-'j.0g/8e/?c0Fa0M_0U^0]\0fY0qW0}U/R.P,N)M'L%K"K KK/47887}4w3q2m2i3f4$c5-a65_6<]6D[6KY6SW6[U6eS6oQ6{O5L4J2H/F-F*E(E%E#E!$59;<<;x9q7l8g9 c:`;"];*[<2Y<:Wl<f>a?]@Z@WA(UA0SA8QA?OBGMBOLAWJAaGAlE@xC?A>?<=9<7;4;1<.<,<+1=ACCDxCpBgBaC[EWETFQF%OG-MG5KG=IGDHGMFGUDG_BFj@Ew=D;C9A7>7;786673717/6BEFGGuGlGaG[IVJQK NLKL"IL+GL3EM:CLBBLJ@LS>L]R7=R?;RH9RQ8R[6Qf4Ps2O/N-L,I+F,B,?,<-:-9BJMNNxNnOdOZRSSKUDX?X=Y;Y$9Y,7Y46X<4XE2XN1XX/Wd-Vq+U)T'R%O%L%H&E&B&@'>IOQRRtRjSaTWVPXGZ?]7_ 4_2` 1_(/_0._9,_A*_K)^U'^a%]o#\~!ZXUROK H F DQTVV|VqVgW^XTZL]C_:b1f+g)g'g#&g,$g4"f=!fGfRe^dkc|a_\YUROMKYZ[[x[mZd[[\Q`Hb?e6h,k!o ooo&o/o8nBnMmZlhkx i g d a ] Z WUS_``_t_j_b_XbMfDh;k1o'rux y x x( x2w<wGvTubtrrpmifc_]\ffe}dqdhd_eThIl?p6s,v"z} !+5@M\~l}zwspljgfmlkyjoigi[mPqEu:y1|' ",8ETey{xtsqtrqwooocrWwL{@6,!  #.:J\p}{ywxvly_~SG<1'".=Od}vi\PD9.# !/@Umtg[NB8-" /C\y؜th\L>1%  -EdsdTE7).Hj '1:CLU]elrx~!)3=FOW_flrx~$-7@IQX_fkqw~  (1:CKRY_ejpw~ #,4=DLRX^djpw &/7?FLRX^dipx!)19@GMSX^djrz$,4;BHNSY_fmv}{yyxwv '/6=CIOU[b~i|rz}xvsqpnmlll !*28?~E|KzQxXv_tgrppzmkigecbbaa %|-y 4v ;t Bs Hq Oo Vm]kfiofzda _ ] [ZYXXX ~ zv s)p1n8l>jEhLfSd[bc`m]x[YVTRQQP P P "%''%}#x urnk%h-f 5d ;b!B`!I^"P\"XZ"aX"jV"vT!Q OMKJJIII#(+,,~+w)r'n%j$ g%d&"a'*_(2](9[(?Y)FW)NU)VS)_Q)hO)tM(J'H&F#D!DCCCC)-011y0r.m-h+d, `,]-[.'X./V/6T/=S/DQ/KO/TM/]K/gI/rF.D-B,@)>'>$>">>>$-145~5u5n3h1b1^2Z2W3T4%R4,P54N5;M5BK5II5RG5[E5eC4q@4>3<1:/9,9)9'9$9"9 +1589z9q8j8c5]7X8T8Q9O9"L:*J:1H:8G:?E:GC:PA:Y?:c=9o;9}987654414.4+4)4&5%059;<w<n<f<]:X<S=N> K>H?F?'D?/C?6A@=?@E=?Mn5>|3<1;08.6/3/0/-0+0)59=>?t@j?b@X@RAMBHCEDBD@E$>E,=E3;E;9EC8EK6EU4D`2Dl0Cz.A,@*=):)8*5*2+/+.9>@B|CpCgC_CTENFHHBI>JBDFxFmFdG[GQJKKDL=O7P 4Q2Q0Q&/Q.-Q5,Q=*QF(PP&P[%Oh#Nw!MKHEB?< 9 8CFIItJiJ`JXKNNHOAQ9S0W,X*X(X"&X*%X2#X:"WC WMVYVeUtSQOLHEB@>IKM~NqNfN]NUOLQES=V5Y,\#_ ___%_-_6_?^I^U]c\rZ X V S OLIGENQRyRmRcRZRRSIVAY9[0^'behhg g(g1 g: fE fPe^dmb`^[WTPNMUVWuWiV`VXVPXE\=_4b+e"hk oppp"o+o4o?nJmXlhkyifc`\YWU\\\q[g[^[V[K_Ac8f/i&mpsvx xyy$y.y8xDwRvbussqnjfca_bbzan`e`]`RcGg}3)  (5FZqw~uvtkv^{QF:/%(8Le}uh\OC8-"  );Sn̒ȿth[OB8-" *@[{wl`PA1$ )De%,4=GPX_fmsy%.8AJRY`flry   )2;DLSZ`ekrx $-5>FMSY_djqw '08?FMSX^cipx"*29@GMRX]cjqy %-4:AGMRX]dks~~|{z (/6<BHMSX_fn}x{ywusrqppo "*17=C}I{NyTx[vbtjqtomkihffeee ~%{,y3v9t?sEqKoQmXk_iggqe}ca_]\[ZZZ  ~{yu r(p/m5l;jAhHfNdUb]`f^p\}YWUTRRQQQyus q m j $h+f2d8b?`E^L\SZ\XeVpS|QNLJ I IIII  !!x rnki eb `(^/\5Z<XBVITQRYPcNmKzIGDCBBB B B !%&{'s&m$h"d a^[Y %V!,T!3S"9Q"@O"GM"NK#WI#aG"lD"yB!@ ><<<<<<!')+w+n+h)c'^&[%X%U&R'"P')N(0L(6J(=H)DG)LE)UC)_@(j>(w<':&8$6!66677 &+-~/s/j/d.^,Y+U+Q, N,L-J-&H.-F.4D.;B.BA.J?.S=.];.h9-u6,4+2)1&1$1!122%*/1{2o2g2`2Z1T0O1L1 H2F2D3$B3+@32>39=4@;4H94Q73[53g32t11/0-.++,),&-#-!.).24w5l5d6\5V5O5J6F7B7@8>8!<8):9099679>59F49O28Y08e.7s+6)5(3&0&-'*(((%)#-257t8i9`9Y9R9I:D;@<<= :=8>6>&4>-3>41></>D.>M,=X*=c(m?c?Z?R@JACC=D7F0H,J*J(J &J'%J.#J6"J? IHISH_GmF~DB?<9642;?AvBjB_BWCOCGEAF:H3J,M$P !Q QQ#P+P3P;PEOPO]NkM|K I F B?<:8@CErFfF\FTFLGEH>J7L/O(RVXXXX'X/X8 WA WL VYUgTwRPMIFC@?FH|InJbJYJQJJJBM:O3R+U#X[_ ```"_*_3_<^H]T\c[sZWUQNKHFLMwNjN_NVNONHO>R6U.Y&\_b eg hhh$g-g7gBfOe]dnb`]ZWSQORSrSfS\RURNRDV:Y1])`!cfiln oppq'q1q<pHoWnil|kge`]ZYY|YnXcX[WTVJZ?^5b,e$iloruwx yz{ |)}4|A|Pzbyvvtpmhfd_w_k^b][\P_Ec:h0l'psv y| !,9HZo~{xtpfseiccbXeLiAn6t+x!|  #/>Qg}mrkkialTqHv<|1& "1CZu|ttrkt^yQE9.# #4Kg|v}i]QD7,! $8Rrvk_TG;-"&>] (09BKS[agmsz !*3<EMU[aglry  %.7?GNU[`fkqx  )19@HNTZ_djpx#+3:AGMSX^djqz &-4;AGMRW]cjr~ (/5<AGLRW]dlw~{yxvvuts #*06<AGL}R{Xy_wguqr}pnlkjiihh~%|,z2x8v=tBsHqNoTm[kcimfxdba_^]]^^| xvt!q'o.n4l9j>hDfJdPcWa`_i]u[YWUTTTTT { v sp nki#g*d0b6a;_A^G\NZUX^VgTsQOMLKJJJJ {snjh gda_&],[ 2Y 8W >V ET LR TP ]N gK sI F D CBBABBumhc`_]ZX"U)S/R6P<NBLJJRH[FfCrA?<;: : :;; {!p!h!b ^ZXUSPN&L-J3H9G@EGCPAY?d<p:8643445 5 !$v%l&d%]%Y#U!RO L J G!#E!*D"0B"7@">?"E="M;"W9"b6"n4!}2 0...//0 %'s)h)`)Y)T'P%L%I%F&C&A'!?''>'.<(5:(;9(C7(K5(U3(`1'm.'|,%*$)!()**+$(}+o,e,],V,P+K*G*C+@+=,;,:-%8-,6-25-93-A1-J/-S--_+,k),{'*%(#&##$!%&&"(+y.l/b/Y/R/M/F/A/=0:1 715242#22)120/27-2?,2H*2R(2]&1j#0y!/ -+(% "! "&+/v1i2_2V2O2I2B3<4854617/7.7 ,7'*7.)75'7=&7E$7P"7[ 6h5x42/-*'$"*/2r4f5\5S5L5F6>7984:/;+< )='=%=$$=+"=2!=:=C4?.A'D GJ JJJ%I,I4I> IH HT GaFpEC@=:74 29<u=g>[?R?J?D?>?7A1D*F#ILP Q Q Q!P(P0P9ODOPN]MlLIGD@=;8>@pBcBXBOBHBBB;C3F-I&LOR UX XXX$X,W5W?VKVYUhS{ROLHEB@D|ElF_FUFMFFE@F8I0L(O!RVY\^ __``'`0`:_F_T^d\vZYUQNJIJuKgK[KRJKIFI^C\J[QYYWbUmSzQOMLKKKM w pkhe ca_]%[*Z0X5W:U@SGRNPVN_LjIwGEDCBBCC zphc_ ]\ ZXV!T'R-P2O8M=KDILHTE^CiAv?=<:::;; tjb]YVU T Q O M $K *I 0G 6F <DCBK@T>^<j9w7 5 4 33334 }oe]XSPNL JHF!D'B-@3?9=A;I9R7\5h2v0.,+ , ,-.xk a!Y S NKHFCA?=$<*:1877>5F3P1Z/g,u*(&%&'( ( u"h#^$V$O#J#F!C@= ; 9 7!"6!(4!.2"51"</"D-"N+"Y)!e'!s% #!  "#$#q%d&Z'R'L&G&B%>$;%8%5&3&1&0&&.',-'3+':)'B''L%'W#'d!&r%#!"}&n(a)W*O*I)C)>)9)5*2*/+-+,,*,#(,*',1%,8#,@",J ,U+b+p)(&#  %z)k+^,T,L,F,@,;,4.0/-/*0 '1%1$1!"1'!1.161>1H1T0`/o.-*'%"$)v,g.[/Q/I/C/=/8011-2)4$5 6677%7,746<6F6R5_5m 3~ 2 0- * '$"(,r/d1X2N2G2@2;253/4+5&7 :< <<<"<)<1<: 48536-7(9";>A C C C B&B-B6B?AKAX@f>w=;952/-2z5j6\8Q8H8A7;76819*;$>@CFI JII"I*I2H;HGGTFbEsDB?;8637u9e;X;N;F;?:::5;->'@ CFI LO PPQQ%Q.P7PBOON^MpKJFD@<;<o>`?U?K?C>>=9=1@)D#FJM PSUV WXY!Y)Y2Y=XJXZVlURQMJEB{BjC\DQCIBBA>@5C-G%KNQ UW[]^ `abc#d-c8cEbUaf_}]ZVSPMtHdHXHOGHFCE:H1K(P SWZ^`dfgi jkmn&o1o>nNmakwifd_\YmN`NUMNLIJ?L5Q,U"Z^aehjnqrtv wy{~)6~F|YzoxtqliehT]TUROPFR;W0\&afimqtwz}!-=Qgxte[\YWWNYA^6d+i ot w{ $3G^zda__W`Jf=l1s&x~ (;SphgagTmHs2& 1Nq  (09AIQX^djpv~  "+3<CJQW]ciov~ &.6=DJPU[agnv (07=DIOTY_fnw ")07=CHMRX^foy|zz $*17<AGLQW^gq}}zwtsponn%+17<}A{FzKxQvXt`rjpumkigedcbc{ xwu t&s,r1q7o;m@lFjLiRgZedcoa}_\[YXXXYxsomkih"g'f-e2c7b<`A^G]N[UY_WjUwSQONMMNO~tmiec a_^]#[)Z.X3W8U=TCRJPRO[MfKrIGEDCCDEvkd`]ZX WUS R%Q*O/N4L:K@IFGOFXDbBp@><;;;;<| o e ] X U SQ ONLJ"I'G,F1D7C=AD?L>V<`9m7|6433334 vi_XRNL J I HEDB$@*?/=5<;:C8K6U4`2m0|.-,+,,- qd[SMIFDBA ? = < !:'9-745:3B1K/U-a+n)~' & %%%&& }m`WOIDA>=; 9754%2+01/8-@+I)S'_%m"}   !yi]SLE@=:7531/.",(*/)6'>%G#Q!]k{  uf Z!P!H!B!=!9 5 2/- + ) ( &!&%!-#!4!!< !E!P!\ jzq c#W#M$E$?$:$6#2#-$*$(%%%#&"& &$&+&2&:&C&N&Z%h$y# !   n#`%T&J&C&<&7&3&/')(%)"*+ +++"+(+0+8+A+L+Y *f )v '&#   |#k&\(Q)G)@):)5)0),*&+#,.0 0111&1-15 0> 0I0U/c.r-+(%""x'g)Y+N+D,=+7+2+.,),%. /146 6 6 6#6*626;5E5R4`3p21.*'%"&s*c-U.J.B.;.5.0.,.'/"1368< <<< <'AK@Y?j>}<;751.{0i3Z4N5D4<47323.3'5!8;=@CFG HIJJ'J0J:IFIUHeFzDB>;86u5d7V8J8A8:76625+8#;>AD GJMN OQRS"S+S6SARPQaOvMJIDB>n;^<Q<G<?;::69.;'>BEI LORUWX Y[\^&^0]<]K\\ZpXVRPKIh@YANAE@>>;=3?*C"GKO RUX[^`ac dfh j*j6iEhWfkda^\VTbFUFKEDD@B8D.H%MQU Y]_cfiklnp rtw#y/x=wOuds~plig`\LRKKJFG>I3N)SY] aeiloruwy{~ &5G\v~yvpYRRPMNEP9U.[#`f joswz}+=SmYXUUMVA\4c)iou{~!2Hc]]V^Jc?j3p'w~ '=XyaeUkJq@x4),Hi  $-5=ELSY^djqy'/7?FLRX]bhox!)18?EKQV\bhoy #+28>DJOUZ`gpz~}| %+28>CHMSY`hrytqoo&,17<AFLRY}a{jyuvtqolhfed }|{ z&y,x1w7u<sAqFpLnSlZjdhnf~dba_\ZZZxtqomkj!j'i,i1g6e;d@bFaM_U]^[hYwWUTRQPPP|rlheb `_^^"](\-[1Y6W<VATHSOQYOcMqKJHFEEFFqhb^[XV UTSR#Q(P-N2M7K=JDHKGTE^ClA|?=<<;<>wi`ZURON LKJI H%G*E/D4B:A@?H>Q<[:h8w6543346oc Z S MJHFE CBA@">'=,<1:79=7E6N4Y2e0t.-,+,,.zj ^UMHD A ??=<:97$6)5.342;0C/L-W+c)r'&%%%%%u fZPIC>;98 8 6531!0'/ ,- 3, :* B( L& W$ c" r   qbVLE?:74321 /-,*%)+'2%9#B!LXet   m^SIA;730.,* )'&$##)!07@JVds {i[OF>840-*'%# !  '.5>IUbr       wfXLC<61-)&"      % , 4!< G R _ntcU I!@!9!3!.!* ' #!"#$%%%%"&) %1 %9%C%O$\$k"}!p_!R"F#=#6#1#,#(#%#!#%&(* * ** *&*.*6*@*L)Y)h(z&$!l!\$O%C&;&4&/%*%&%#%&()+ . 0000#0+03/=/H/V.e-x+)&$ z!h%X'K(@(8(2(-(('%'"'*+- 034556 6(505:5E4S4c2v1/-)&$u%c)T*G+=+6+0*+*')$)+.02 589 :;<<$<-<6? @BCE D)D2D>CKB\Ao?=:942i/Y1K2@28120./+.$0369 ;>ADFH IKMN$N.M9LGKWJkHFCA<:c4S5G6=56413.1(3 7:= @CFIMOPR TVXY)Y4XBWRVfT~QNKIC\:N:C:;96735,7#;?C FIMPSVXZ\^ `ce#f/e<dLba`x]ZVTQV?J?A>;<7:0<'?DI MQTX[^adfhjl oru't5sEqYoqmiea]REHDAB=?6A+F!KP UY^adgjnpruwz|  -=QjzvqlOJHHDF=G1L&RX^cgkoruy|~ $5Ia}OPKMDM8S,Z `g mrv{ *>WuSTMTAZ6a*gnu|3Lj‘W\LaAg6n+u|(A`ڻ  (08?GNU[`fls{ "+2:AHNSY^eks} $,3:@GLRW]ckt}| &-39?EJPU\ckv{urq  '-38>CHNT[cmy~{ytnigf !'-27<}A{FyMwTu\seqqomkhea^]\|ytsrqp!o'o,o1m6l;j@iFgMeUc_ai_w][YXURRR|snife cbba"a'a,_1]6\;Z@XGWOUXScRpPNLKIHHH|pga]ZXW VUTS"S'R,P1O6M<LBJIHSG^EjDzBA?>>>?rf]WSPNL JIIHH#G(F,D2C7A>@E>N=Y;e:t8764467zk_VOJGECA A@?? >$<);.:48:7A6J4U3a1o/.,,,-/sdYOHC?=;:9 8776!5&3+2017/>.G-Q+^)m(&%$%%'n`S J C = 9 6543 210/.#,(+.*4);'E&O$["j!{!|i [ OE>94 1 / . -, +*)'!&&%,$2":!CMZhzwe WKB:50-*)( ' & $# "  $ * 1 9 B N Z hys bTH?72-*'$#"  #*1:DO\ j z   o^QE<5/*'#!!(/8 A LXfw  k[MB92,($!  % , 4=HUdt |hXJ?60*%" " ) 1 : ERas wdUG<4-(#  !#$$$ $'$/$8$B$O#_#p!s`QD : 1 + & "! #%' ()**$*,*5*@)M)\(n&%"n\M!A"7#/#)"$" !  !#% '*, -/00!0)020=/J/Y-l,*'&!i X#I$=%4%,%'$#$ #"#%( *,/13 4677&7/696F5V4i31/,*&c%S'E(:(1(+'&'"% $&(+ -/2579 ;=??"?+?6>C=R@B DGII'H2H?GNE`CxB?<97W.H/=/4/-.),'*!,/2 58;>ADFIKM PRU"T-T9SIQ[OsMIFB@Q3D4:322-0+.$037 ;>ADHKNQSUXZ ]`b'a4`C^V\lYWSPJK8@88725/3)4 8<AEILPSWZ]_bdgjmq r-q<oOmeifb^XG>>=8;58.9$=CHMRUZ]adgjloqtx{&5G]|zxsohDC>A;>5>)DJPV[`dhkorux{~-?Vr{EHAECHNU]g}t{xusleb`_}{zzy"x'w,w2v7t<rApGoNmVk_ikfzedb_YVUTxqnkj hgff"f'f,e1d5b:a@_G]P[YYdXqUTRRMKKJ}qhc_]ZY XXWW"W'V,U0S5R;PAOIMSK]JjH|GEDBA@@qe]VSOMLK KKJJ"J'H,G1F6D<CCAL@X>d<u;:98778vg\SMGECA@ @@?>=#<(;,92887?6G5S4_3o10/...0n`TKD?<:876 55543$2)1.04/;-C,O+[*k)}(&&%'(yhYNE=8521/. . ---+ *%)+(1'8&@%K$W"g!y "tcTI?83/,*((' '&&%$"#(".!5 =HTcto_PD ; 4 / * ' $#"! !   %+3;ERask[L A 8 1 + & #    #)1:DP_ p  {gW I>5.(#          ! ( 0 9 D Q _ o wd TF;2+%!     '.7AN\m r ` PC8/(#   $+4?KZk o ]M@5-&!   ")2<IXj~ kYJ=3*$  '/:FUf}gUF:0("  ! #$$$$%-$7$D$S#e!{ bQB7-&  !#% (***"***4*A)P)b'x&#!]M?3 * # !$&)+- /111(111>1L0^/t,+'$#XH!;"0#(""!  "%'),/13 68::$:.::9H8[6p42/,)R#C%7&-&&%!$" !# &(+.1479<> ADE D*C6BDAW@l>;852L(>)3*+)%(!&#$' *-0369<?ADGJ MPP%P1O?MRKgIFC?;F-:.0-),%*#'(,/369=@CFILORUX\_ ^,]:[MYaW{SPKFA262.1*/',",159=ADHKORUX[^ae imp&n4lFj[gtb_[S<746/4-1'16;@EINRVY]`cehkorw {->S{lvrod:<5:27-7"<B HNTX\aeiloruy| %6Kdx;@8=4<(BIPX^dilquy}-B\|?D@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06<'D8KLSaYv]`aѻa̴bƭccѻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻd' * 06<&C7KLRaWv[]^Ǽ_`aıa̩cԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩc' * 06<&C7JKQaUwY\]^__`ǟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟb' * 06<%C6IKOaTvX\]]^_`—bȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗb& ) 06<$B5HJN`SuX[\]^_`bbbbbbbbbbbbbbbbb& ) 07<#B4GIL_SsWZ\]^_accccccccccccccccc&* 17EFTOaTlYt\z_~a{cwfrhrhrhrhrhrhrhrhrhrhrhrhrhrhrhrhrh$,550 71=ADONZTcYj\o_r{buwdxsfzpi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|%.4*. 5/;7G={OAvUErZGp\Im^JkaKicMheNheNheNheNheNheNheNheNheNheNheNheNheNheNheNheNheN# &-!4(;.xC3sK6oQ9lV:jYe_?da?da?da?da?da?da?da?da?da?da?da?da?da?da?da?da?da?}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww~' ) .4:"C1KCTV\id{krvzܞ~ؙϑ~īwīwīwīwīwīwīwīwīwīwīwīwīwīwīw& ) .4:"B1JCSV[jb|hmqݨtڢw֝{˒}ɯ|yͧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}& ) .4:!B0ICRVYj`}ei޴kۭnاpԡr̛xήvФ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|& ( .4:!A0IBQVXk^beۺfشgԮjϪnɦsЮuҡz̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z& ( .4: A/HBPVVk[_aӽ`ͶcǰehʺlаtӠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠy&( .4: @/HAOVUlY\^Ⱦ__a³cɬfϤmҟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟx&( .4:@.GANVSkX\]^^^_Ǡb͙hЕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕr%( . 4:@-G@MURkW[\]]^_`ȏe̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l%( . 4:@,F?LTQjV}Z\]]^_aeŃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃj%' . 4:?+F=JTPiU{Y\\]^`be}i}i}i}i}i}i}i}i}i}i}i}i}i}i}i$' . 5:?)C=HSOgUyX[]^_ac|fxixixixixixixixixixixixixixixi$'/ 5;>(@=GRNeTuX[]_`b}dwgsjsjsjsjsjsjsjsjsjsjsjsjsjsjsj#(/ 6<;(>=DQMbSpW|[^`b}dwfsiokokokokokokokokokokokokokokok#(07 96)==GFPNVT|[Xw_[tb^qe_ngalicikdgmegmegmegmegmegmegmegmegmegmegmegmegmegmegme"*%!(.#5-<5D=MCzTGuZJr]Mo`OlbPjdQhfSfiTekUekUekUekUekUekUekUekUekUekUekUekUekUekUekU!#%+2&9-~@3wJ8rQ;nW=lZ?j]Ah_BfaCecCceDbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfE  !'. 6%u<*nD-jL0gQ2dU3cX4bZ5a\5`^6_`7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7v' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrw& ( ,28@+J;TK^\gkpyy闉哐⎕ߋօzqpppppppppppppx& ( +28@+I:SL\]enm|u}朄▊ߒێ̃wsttttttttttttty&( +28?*H:QLZ^cojry~ܕؑ€twxxxxxxxxxxxxxz&' + 28?*H:PLX_`qgntyޞ}ژӒy{|||||||||||||{%' + 28?)G9OLW_^rekoߩrۣv՟}ϛèà|%' + 28>)F9NLV_]schjܰn֫sЧyʣ¸ĥŜ}%' + 28>(E9MLU`[s`dݾgֹkѳpʮué{÷ƢƘ~%' + 28>(E8LKT`Yt^aeϽhȸl³qwõ~ơǕ~%& + 28='E8LKR_Xt[_bľehlpéwƟ~Ȓ$& + 28=&D7KJQ_VtZ]_bdgkžqƘzǎŒ$&+ 28=%D6JIP^UsY\]^`cfkčsƊˆ$&, 28=$C4IHN^TrX[\\]^bfn{$%, 28="C2GHM]SpWZ\]^_aeyjutuyuyuyuyuyuyuyuyuyuyuyuyuy#%, 3 8= @2DGK[RmW}Z\^_aczftjoqntntntntntntntntntntntntnt#%,3 9<<2CFJYQiVwY\_aczetholjqisisisisisisisisisisisisis"%-4 :8;2@EHVPeVqY{]`bzeugpjkmgrfsfsfsfsfsfsfsfsfsfsfsfsfs!&.672 92?BGQO^UiZq]xa}zcvfqhmkindsctctctctctctctctctctctctct &/5.1!80=?EKNVU_Zf^l{bpvdsrgvoixklzho|dr~cscscscscscscscscscscscscs'0.'/ 6-<9CDLMTTZZ{^^vbaredohfljhiligokcrmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsm',&,3)93@;JCRHyXMt]Pq`RncTkeVihWgjYemZbp[bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\$ #)0$7,=2}G8wO&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysooooooooooooq&}( * 06>&H3SB]Ph^rj|t|􎏂쇝鄣恨yqmmmmmmmmmmmmr&~' * 06=%G3QB[Qe`omxy𒊊돒狙䇟~unqqqqqqqqqqqqs&' * /6<%F2OBYRcblqt}}옆甎䏔مzqrttttttttttttu%& ) /6<$E2NBWSadisqy鞁嘈܍͂wrvxxxxxxxxxxxxu%& ) /5<#D2MBVS^efunu|✂ޕؒȈ~wz||||||||||||v%& ) /5;#D1LBTT\fdwkrwߡ}؝љĐ|~w%& ) /5;"C1KAST[fbxhms٨zТʞx$&) /5;"C0JARTYg`yejܶpҮvʧ}ãy$%) /5;!B0IAQTXg^zbhֽn̴sĭyy$%) /5; B/I@PSVg[{aglƻpv|z$%) /5; A.H?OSUgY{_dhmrx{#%) / 5;A-G>NRSgXz]aehmrw}#$) 0 6;@+G=LQReWxZ^adglqx~~~~~~~~~~~~~#$)0 6;@)F;JPQdVvY\]`cfkq{zyyyyyyyyyyyyy"$)0 6;@'B;HOPbUsX[]^`b{fvkqsnpppppppppppp"#*1 7<<'@;FNO`ToX}[^`b{dugpkkqgyffffffffffff!#*18 :7(>:DLM\SjXv[^a|dvgpilmgqcxa~a~a~a~a~a~a~a~a~a~a~a~ #+28 46(=9BILWScXn\v_}~bwerhnkinds`x^}^}^}^}^}^}^}^}^}^}^}^}#,43 -5(;7AEJQR[Xd\k`pycusfxoi{kl}hods_w]{]{]{]{]{]{]{]{]{]{]{]{$,1& ,3'93??HIQRWY\_yactdfpgimjkjlmgoocrq`ws]zt]zt]zt]zt]zt]zt]zt]zt]zt]zt]zt]zt$+'#*1$7/=8FAOGVMx\Qt`UpcWlfZji[gk]en^bq`_ua]xb]xb]xb]xb]xb]xb]xb]xb]xb]xb]xb]xb"$!'- 4);1B7|L.rG2nO5jU7gY9e];d__f>]i?\l@ZoAZoAZoAZoAZoAZoAZoAZoAZoAZoAZoAZoA  &-y4!q:%jB(fH*cN,aS-_V.]Z/\\0\^0Z`1Yb2Xe2Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3  "y)q0j6d<aB!^F"\J#ZN$YP$XS%WU%VW&TY&S\'R^'R^'R^'R^'R^'R^'R^'R^'R^'R^'R^'R^'i't( ~* .5'F6MHU[[nbiѼpDzu|v#$&- 39>&E5LGSZYn`~gmrxw##&- 39>%E4KFRZWm^~ekpu|x"#'- 39>$D3JDPXVl\|bglrx~~~~~~~~~~~y"#'- 39="C0HCNWUjZ{^chlrxxwwwwwwwwwww{!"'.4 9>B/FCMVShXy[_cglq~xyurqqqqqqqqqqq}!"'.4 9==/DBKTReWuZ\_cgxksqnxk‚iÒkġkġkġkġkġkġkġkġkġkġkġ !'.5 :9cInTy]djos{vxyu{r}n~ih}iyiyiyiyiyiyiyiyiyiyh%t%~' + 28@&K2V?`KkWvaiqv{~{wrmjlm}m}m}m}m}m}m}m}m}m}i%u%' + 18?%J2T?^LiYsd}nv}쁥}yrlmoppppppppppk$w%& + 17>%H1R?\Nf[phzs|쌍臖䂟~{upqsttttttttttl$x$& + 17>$G1P?ZNd]mkvw叇ۈօςzuuwxxxxxxxxxxm$y$%+ 17=#F0O?XOb_jnr|zޕؒю̋ljzy{||||||||||n#{#%+ 17<"E0N?VO_`gpnޢw֝ϘɔÑ}o#|#%+ 16TO]adrlשtΣ}Ǟp#}#$+ 16SO[abr۸jЯrȨyq""$+ 16<B-J=QNYa`qhʶov~r""$+ 1 6;B+I;PMW`_qf~Ľls{s""$+1 6;A*H:NLU_]pd}jqw~u!!$+1 6;@'G7LJS^[na|hnt{{zzzzzzzzzzzv!!$+1 7;@%D6KIR\Ym_zekrxƀÉ}usssssssssssx  $+27<=#B5HHPZWk\xaflry}ɁwnjsǗn¡lllllllllll{%,28 :8$@5FGOXUgYu]bg~lwrqylʂhʍeʙeɩeeeeeeeeee~%,3848$?5DEMTTbYn\y`|ctgmmgsc{_΄]Ϗ\Р]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ%,33 .7$=3BBKOS[Yf]oavwe|pijmdr_x[׀W։T֖T٢T٢T٢T٢T٢T٢T٢T٢T٢T٢%,1% .5$;1A>IIRSX\^czbisfnmjrhnvcsy_x{[~}W~SPPPPPPPPPP$*&# ,3#9.?9GBPJXQ{]Wub\og`jkcfofbsh_xj[}lWnToQpQpQpQpQpQpQpQpQpQp"## *0 6*=2E:NAzVFt\JoaNkeQgiTdmVaqX^uZ[z[X]U^R_R_R_R_R_R_R_R_R_R_  &,3$:+~A1wK6qS:mY>i^@fbCcfEajF^nH\qIYuJWzLTMRNRNRNRNRNRNRNRNRNRN  "(/~6$t=(mE,iN/eT1cY3a]5_a7]d8[h9Yl:Wp;TtP~>P~>P~>P~>P~>P~>P~>P~>P~>  $}+t2l9 g@#cF%`L']Q([U)YY*W]+Ua,Td-Sg-Qk.Op/Mt0Mt0Mt0Mt0Mt0Mt0Mt0Mt0Mt0Mt0ۼ   } t'l.f4a9]?ZDXHVLTP SS QV!PY"N\"M`#Kd#Ig$Ig$Ig$Ig$Ig$Ig$Ig$Ig$Ig$Ig$} s k"e)_.[3W8U<S@QCPFNIMLLNKQITHWFZFZFZFZFZFZFZFZFZFZ[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T](g'o) v, z2}9B!O*}\2zi:uu@sEqIpMnOmQlSjTgUeVcWbX`Y^Y]Y]Y]Y]Y]Y]Y]Y]Y]Y_'i'r( y+ ~18@!M*Y4f<{rDx~JvOtSsVqXpZm\j^h_f`daba_b```````````````````&k&t' |* 07?!K+W5c>oG}{NzTxYw\u`sbpdmfkghiejcjcgcececececececececeb%m%v' * 07>!I+U6`@lJwRY|^zcxgujrlpnmpiqfreqflgigigigigigigigigid%o%y& ) 06= H+S6^BiLtV^d}jznwrturwnyj{gzhvipjmjmjmjmjmjmjmjmjme$p${%) /6< F+Q7\CfOqY|ckq}wy{urokj€lzmumqmqmqmqmqmqmqmqmqf$r#}%) /5<E*O7ZDdQn]xh튂q鄌y~{yxvpnpqyquququququququququh#t#$( /5;C)M7WEaSk`tl}wሆ܅ւр~|vstu}uyuyuyuyuyuyuyuyuyi#u"$( / 4:B)L6UE_ThcpqߖyzّҌ̉ȆÄ|wyy€y|y|y|y|y|y|y|y|y|j"w"#( . 4:A(J5SE]Ueenr؝w{Зɓď|}}~~~~~~~~~~~~~~~~~~l"x"#(. 4:@&I5QDZUceګkrФt{ɝ|™m"z!"(. 49?%G3ODXU޻aeӲiqʪq{£yn!{!"(. 49>$F2NBVT_d͹gqİn{v~o!| "(. 49>"E0L@TS]cepl{szp ~ "(. 4 9> D-J?RR[bcoizpw~~}}}}}}}}}r "(/4 9=C*H=PPYa`ngymt|{vvvvvvvvvvvt"(/4 9=>)G;ONW_^lewkqy~ysooooooooooov")/59 9=)E:MLU\\jbuh~ov{̉uʕpȡlŬgghhhhhhhhhx")/56 4<)C9KJSYYg_rezj~qwypՃkӎgҚcҧ`̱``````````|")/4, 3;)A8IGQTXa\l`u{f|sklrfza؄]؏ZלWةXջX̾X̾X̾X̾X̾X̾X̾X̾X̾").,)29(?6FBONWY]b}ajufpmjvgozav~[}V߆SޑPޝP஀Q~Q~Q~Q~Q~Q~Q~Q~Q~!&)(07'=2D=NGVP\Wwb]qgbklgeqj`vn[}pWrStPtMuKtKtKtKtKtKtKtKtKt"'.4$;.A7K?TFx[KqaPlfTgjXco[_u][{_WaTcQdMeKeKeKeKeKeKeKeKeKe$+1 8(>/|H6vQ;pY?l^CgcFdhI`mK]rMZwOV~PTRQSNTLULULULULULULULULU !'-4"{;(qC,lM0hU3e[6b_8_d:]hWr?Tx@R}BOCMDKDKDKDKDKDKDKDKDKD  "){0r7 j>#fF&bM(_S*\Y,Y^-Xb/Vf0Sk1Qp2Ou3Mz4J5I5I5I5I5I5I5I5I5I5   z%q,j2d9`?\EYK WO!UT"SX#Q\$Oa%Me&Ki&In'Gt(Ex(Ex(Ex(Ex(Ex(Ex(Ex(Ex(Ex(ջ y p i'c-]3Z8W=TBRFPJNMMQKUIXG\F`CeBhBhBhBhBhBhBhBhBhyph b" \' W,T1Q5O9M=K@JCHFGIFLDOCRAV?Y?Y?Y?Y?Y?Y?Y?Y?YU)^(e* j- m2n:oCoQ#l`)ik.ex2c5b8`:_;^=]>\>\?Z@W@VAVAUATASASASASASASASASAU)^(e* j- m2n:oCoQ#l`)ik.ex2c5b8`:_;^=]>\>\?Z@W@VAVAUATASASASASASASASASAU)^(e* j- m2n:oCoQ#l`)ik.ex2c5b8`:_;^=]>\>\?Z@W@VAVAUATASASASASASASASASAV(_(g) l, p1q9rBsO#p^*lj/iv4f8d;c=b?a@`A_B^C\DZDYEXEWEUFUFUFUFUFUFUFUFUFX'a'i( o+ t0v8w@xL$v[+rg2ns7k!H.R;\JfXodڑymҌs͇xȄ{Á~}}wv|vvwpvmvmvmvmvmvmvmvmg!s !&, 27= G-P;ZJcYڟmdјumʒ~tĎy}}{€{y{s{p{p{p{p{p{p{p{ph!u !&, 27=E+N:WJݬaXӥjdʞrnØ{u{|ussssssssj v &,1 7<C)L8UIִ_XͫhdĤpnxu{xuuuuuuuuk x&,1 6;B'J6SHк]WDzecmmuu}|zwwwwwwwwly&,1 6;A%H5QG[Vcckmruz||yyyyyyyyn{&,1 6;?!E3OEYUabhlouw|{zz}z{z{z{z{z{z{z{z{o}&,16 :>D1MDVS_`fkmtt{|}yssss|s|s|s|s|s|s|s|q&,16 9:C/LBTQ\^dijrqzyytplkkk}k}k}k}k}k}k}k}t&,1529B-J?ROZ\aghpowv}}wĉqlhdccd}d}d}d}d}d}d}d}v%+1//8@,H+E9NGUT\^cgzinrpslxxf|`~[ WੀU຀S~TyTwTwTwTwTwTwTwTw~#%"-5<*B6KBTL[Vza^rgeklkdro^zsXuTwPwNwMvMrMqMqMqMqMqMqMqMq# ,39'@1I;RD{ZKtaQmfWgl[br_]ycWfShOiLjIjHhHhHhHhHhHhHhHhHh ! )06#=,F4zP:sY@n_EidIdjM_pP[wRWUSWOXLYJZGZFZFZFZFZFZFZFZFZ &,3:&wA+pK1kU5g\8ca<`g>\mAXsCUzEQFNHKIIJFKEKEKEKEKEKEKEKEK ־ !(/x6n=#iF'dN*`U-]\/Za1Xg3Um4Rs6Oz7L8I9G:D;C;C;C;C;C;C;C;C; ٷ #w*o1g8b?^F [M"XS$UX%R^&Pd(Mi)Ko*Hv+F|+D,A-@-@-@-@-@-@-@-@-߱п  v n%g,`2\9X?UDRIPNNSLXI]GbEgBm @s!>{!=}!=}!=}!=}!=}!=}!=}!=}!Һ um f _& Z,V1R7P;M@KDIHHLFPDTBX?]=b;g:j:j:j:j:j:j:j:jul e^Y! T& P* M/ K3 I6 G:E=D@BD@G?K=N;R9V8X8X8X8X8X8X8X8XN)V)\*a- b2b:`C]R]`![l%Xx(V*T+S-R.Q.Q/P/O0O0M0J0J0I0I0H0H0H0H0H0H0H0H0N)V)\*a- b2b:`C]R]`![l%Xx(V*T+S-R.Q.Q/P/O0O0M0J0J0I0I0H0H0H0H0H0H0H0H0O)W(^*b- e2e9cBaP`_"^j&[w)Y,W.V/U0T1S2R2Q3Q3O3M3L4L4K4K3K3K3K3K3K3K3K3Q(Z'a(f+ h0i7h@gMe]#ch(`t,^/\1Z3Y4X5W6V7V8T8R9Q9P9P9O9O9O9O9O9O9O9O9O9S'\'c'i* l/ m6m?mJkZ$hf*eq.b~2`5^7]9\:[;ZU>T?T?S?R?S=S=S=S=S=S=S=S=U&^&f&l) p. r5r=sGqW%mc,jo1g{5d9c`?^A]B\CYDXEXEVFUFVDVAVAVAVAVAVAVAVAW&`%i%o( t- v4w<yEwS&ta-ol4lw9i=gAeDdFbHaI^K]L\M[MYNYLZIZFZFZFZFZFZFZFZFY%c$k$s' x, {3}:C}P'z]/vi7qt=nBlGiJgMePdRaS`U_V]W\U]R^N^K^K^K^K^K^K^K^K[$e#n#v%|+ 29AM(Z1}f9xqAt|HqMnRkViYf[d^b`aa``a[aWbTbPbPbPbPbPbPbPbP]#h"q"z%+ 18?K(W2b<mE{xMvTrZn_kciehfhfgfefebf]fYfTfTfTfTfTfTfTfT_"j!t!}$* 17>H(T3_>jHtR{}[watergpinkmkmkkkjgjbj^jYjXjXjXjXjXjXjXa"l v $* 0 6=F'Q3\?gKpW݃z^c{hykvmtosprpqpologobn\n\n\n\n\n\n\n\b!n y $*0 5;D&O2Y@cMۑmWӋw_͆eǂjm}pzrysxtwttqtksfr`r`r`r`r`r`r`r`d p{$*/ 5;B$M1W?ܞaMӘjW˒s`ō|fkoruv}w}wxuxoxiwcwcwcwcwcwcwcwce q}#)/ 4:A"J/߬T>ե_L̞hWĘp`ygmqtwyzz}y}r|lzezezezezezezezegs#)/49? H-ڳR=ϫ\KŤfWn`vg~mrvy{||{un~h~h~h~h~h~h~h~hhu#)/3 8>F,ӺP<ɱZKcVk`sh{nrwz|}~}wqjjjjjjjjjv#).3 7<C*N;÷XIaVi_qgxnsw{}y~s}l}l}l}l}l}l}l}lkx#).37 :A)L:VH_Tg_ngun~sx{~~z€w{wtvmvmvmvmvmvmvmvmmz#(.25 4?'J8TG\Sd]kfsm{sw{~~yur€o|ovooooooooooooooooo}"(-123>%H6RDZQb\idpkxqv|zv}qmjg|hvhphohohohohohohor"'+-'4<"F3OBXN_Ygbniuoz~tsxn{i}d~a~_{`v`o`o`o`o`o`o`o`ou!%''4=E/M>UK]Ud^lexskq|pk˅tfɑwaǞy\ĬzY½zWxWsXnXnXnXnXnXnXnXnx!( 2:B,K:SFZPbYwi`ppeiyjc߃n^ݏqY۝sUثtQսtOsPoQjQjQjQjQjQjQjQj} ' 08?*H5P@~XIv_RofXhm^bvb\fWhRjNkKkIjIgJdJdJdJdJdJdJdJd & .5<&D/N8wV?p^FieKdlP^sTX}XS[O]K^H_E_E]E[E[E[E[E[E[E[E[ؼ # +29"}@)uJ/oT5i\:db>`iB[pEVyHRJNLJNGOEPCPAOAOAOAOAOAOAOAO   '.~5t<"lE'gN+bW/_^2[e4Wl7St9O|;L=H>E?C@AA>A>A>A>A>A>A>A>Aһ  #~*u1l8f?aH"]O$YV&U](Rd*Ok+Lt-H|.E/B1@1=2;3;3;3;3;3;3;3;3Ե} t%l,e2_9Z@VGSMPSMYJ` Gg!Dn"Aw#>~$<%:%7&7&7&7&7&7&7&7&װ̽ |rj c% ],X2T8P>NCKHINFSDXA_>e;l9s6{33333333ι{q ib\ V% Q* N0 K5 I9F>DBBF@K>P;U9Z6`4e1m1m1m1m1m1m1m1mƾ|qha ZUPL#I(F, D0 B3 @7 >: <> ;B 9F 7J 4O 2S /Y /Y /Y /Y /Y /Y /Y /Y H*O*T+W. X3 V:TERRO_LlJxG F!D!C"B"B"A#@#@#@#>#<";";":":":":":":":":"I*P)U*Y- Z2 X9VDTQQ^OkLwJ!H"G#F#E$D$D$C$B$B$@$>$>$=$<$<$<$<$<$<$<$<$J)R(X)\, ]1 \8ZAXNU\SiQu!O#M%K&J&I'I'H(G(G(F(C(C(B(A(A(A(A(A(A(A(A(A(L(T'Z(^+ `/ `6^?[LY[Xg Ur#S&Q'P)N*N*M+L+K,K,H,G,G,F,E,E,F+F+F+F+F+F+F+N'V&]'b)d. e5c>`H^X]d"[p&X|)V+U,S.R/Q/P0P1N1L1K2K2J2J2J0K/K/K/K/K/K/K/P&Y%`&e(h, j4i<gEeUcb$`m(^y,[/Z1X2W4V5U6T7Q7P8P8O8N8O7O5P4P4P4P4P4P4P4S%\$c$i&m+ o2o:nClQ j_&gj+cv0a3_6]8\:ZU?T@S@SAT?TI'ޝT5ԗ^ȂhKŋqSyY^b~e|gziyjxjwiudt_sYrVrVrVrVrVrVrVcny!',1 6<G%إR4͝\AŗeKnSvZ_cfik~l}m}lzhxbw\vYvYvYvYvYvYvYdp| &,05;ݰD$ѪO3ǣZ@cKkSsZ|`dhkmnook}d{_z[z[z[z[z[z[z[fr~ &+04 9ظA"̰M2X?aJiSqZy`eilnpqqmga~]~]~]~]~]~]~]gt %*/2 5Ѿ?!ƶK0U>^IgRnZv`~eimpqrr|o{izcy_y_y_y_y_y_y_iv %*-0/=I/S<\HdQlYt`|ejmprzswstqtkses`s`s`s`s`s`s`kx$(++, ;G-Q;ZFbPiXq_yeim{pvsrtotlrlllflblblblblblblbm{"%%* 8D+O8WD_NgWn^vc~hylspnrjsgsdrdlefebebebebebebebp~ + 7B(L6UB]LeTl[}taw|fqjkmfpbq^q\p\k]f^b^b^b^b^b^b^bs - 6@$J2S>[HbP|jWuq]ozbiÃfcj^lZmVnTmTiUdVaVaVaVaVaVaVaw , 6> G.P9XC{`KsgRmoXgx\aԂ`\ҎdWϛfRͩgO˻hLgMdN`N]N]N]N]N]N]N]{ع * 3;D)M3zU7<7:797979797979797٫θ z$ q+i3b:]BYIUQRX N_"Jg#Gp%Cy&@'=(:)8*6*5*5*5*5*5*5*5*ܦѴǿyp h& a-[3W:SAOGLNITF[Bb?k;u8~530///////Ӱɻx ng_ Y% T+ O2 L7I=FBDHAN>T:[7c3k0t.}+)))))))˸vld ]WQM#I)F. C3 A7 ?< <@ :E 8K 4Q 1W .^+e)l'r'r'r'r'r'r'rýylc\U PKGD!A%?)=-;194785=2A0F-L *Q 'V &Z &Z &Z &Z &Z &Z &Z C+H*M+O.N3 M; JEGQD^@k=w;98765543330/..,,,,,,,D*J)O*Q-Q1 P9 MCKOH\DiAu?=<;:99887643311111111E)L(Q)T+U0 S7 QBONLZHgFsCA@?>==<<;987665555555G(N'T(W*X/ W5 U?SKPXMeJqH}FED C B!A!A!@!?!=!\AZCXDXDWEVEWCX?YeCcEbGaI_J^K]K]K\J^F^B^?_<_;_;_;_;_;_;X bks z&,2 9AM#}Z,xd5so=pyBmFjIhLgNeOdPcPbQbPcLcGdDc@c?c?c?c?c?c?[enw~%+1 7?J"V,݁a6|k>wuDt~IqMoOmRlSjTiUhUgUhQhLhHgDhChChChChChC]gqz%*0 5<G ݎS,ԉ^7̓h?~qFzzKwOuRsUrWpXoYnZmYmVmPlLlHkGkGkGkGkGkG^is}$).4 :EՖQ+͐\6Ŋe?nFvL~Q{TyWxYv[t\s]r]rZqTpPoKoJoJoJoJoJoJ`kv#(-2 8ڡBϜN*ƖY6c?kGsM{RVY}\{^z_y`x`v^uWtSrNrMrMrMrMrMrMbmx#(,05ԧ@ɡL)W5`?hGpMxRWZ]`a~b|b{ayZwUvPvOvOvOvOvOvOcoz"&*.۲0 έ>ĦJ(U4^>fFnMvS~W[^acddc~]~|W|zR|yQ|yQ|yQ|yQ|yQ|yQeq}!%()պ- ɳ;H'R3\=dFlMsS{X\_bdf|fyex_wYv~Tv~Sv~Sv~Sv~Sv~Sv~Sgs #$޺!* Ĺ9F%P2YI+R6Z?bGiNyqSsyXn]i`dc`d\eYdYaZ\[W[V[V[V[V[V[VqԶ /;F'O2X;`CxgJroPlwUfYa\\_XaTaQaQ^RZSVSUSUSUSUSUSUu خϻ "/ 9C#M-~U6w]>peEjmJduO_SYȊVUƗYPæ[M[J[IYJVKRLQLQLQLQLQLQz ҳ"- 7@~I'vR0o[7ic>cjC]sGX}KRۉNNٗQJ֦RFԷSDSCQDOELEKEKEKEKEKEK լ̹ * 3~;uE!nO(hW/b_5\g:Wo>RyAMDHFEGBH@H>G>E?D?C?C?C?C?C?C٧ϳſ' /u7l@fI!aS%\\)Wd-Sl0Nt3J6F8B9?:=;;::999999999999999ѮȺ# v+ n3f:`C[LWTS\"Ne$Jn&Gw(C*?+<-:-8-6-5-5-5-5-5-5-5-ԩ˶ vm& f- _4Z<UDQLNSJ[FcBl>v;7 5!3"1"0"/"/"/"/"/"/"إͲü~tld ^' W- S4 O;KBHHEOAV=^:g6q2|/,*(((((((ϯŹ~rj b[UP%K+H1 E7 B= ?B ,;0956:4@1F-M )T %\ "e l v y y y y y y vi^VOJ FB?<9"7&5*3.02.7+<(B$H!NT[]]]]]]>+C*F+G.G3D; AD >P:]6i2u0.,+*))((''%#"" @*E)H*J,I2G9 DC AN=[:g6t420/.--,,++(''%$$$$$$$A)G(K(L+L0J7 HA EMBY>e;q8~654322100/-,+*)))))))C(I'M'P)P.N5 L? JJGVCc@o={<:987766632100///////E&L%Q%T'U,T3 R< PHMTI`FlDxB@?>>=<<:987666666666H%O$U$X%Z)Z1 X9 VDSQP]MiKuIGFE D C!C!B!@!?!>!>!> >>>>>>>>K$R"X"]#`(a/ `7 \@YMVZTfRqP|!N#M$L%K&J'I'G(F(E(D(E'E&E$E#F"F"F"F"F"F"N"V \ a!f&g- g5 d=`H^V\cZn"Wx%U(T*R,Q-P.N/M0L1K1K0L.L,M*M(M'M'M'M'M'M'P!Y`fk%n,n3 l;iDgRd_!aj&^u*\.Z1X3V5U6T7S7R8Q8Q8R5S2S/T-T,T,T,T,T,T,S \djp$t*u1 t8rApNm[#if)fp/bz3`6_9]:\<[=Z>Y>X>W>X;Y8Z5[2Z0Z0Z0Z0Z0Z0U_gou#y){/ |6 {>yJuW$qb+ml2jv6h:e=d?cAaB`C_D^D]D]A_=`:_7_5_5_5_5_5_5Xajsz"~(.4 ;G~S$z^,uh3qr9nz=l@jCiEgFfHeIdIcIcGdBd>e;d8d8d8d8d8d8Zdmv~!',2 9ߋDՆP#́[-|e4xn:uv?rBpEoHmJlKjMiMhMhLiGiBh?hǓK"V,_4h;pAxE|IzLxOwQuRsSrTqSrNpIoEnAnAnAnAnAnA_ju"%(أ-˞<H!S+]4e;mAuF}JM~P|SzUxVwVvVvQtKsGrDrDrDrDrDrDalw !ߥ!Ѩ+ƣ:FQ*[3c;kArFzJNQTV}X|X}{X|zS{xNzwIyvFyvFyvFyvFyvFyvFcnyڮ̭(8DO)Y2a:iApFxKORUX|YxZvYuUt}Ps{KszGszGszGszGszGszGep|Ӵdz&5BM(V1_9f@nFuK~OS|VxXtZq[nZnWmQmMmImImImImImIgrլ̺ #3@J&T0]8d?lEsJ{OzSuVqYmZi[g[fXfRfNfJfJfJfJfJfJiu٥а0 =H$R.Z6b=iD}qIxyNsRnUiXeZb[_Z^X_S_N_K_K_K_K_K_Klx  өʵ- :E!O+X3`;{gAvnFpvKkOfSbV]XZYWYUWWRWNXJXJXJXJXJXJo} ףήĺ)7BL'U0z]7te=nlCitHd}L_OZRVTRUOUMTOOPLPIPIPIPIPIPIs  Ҩɴ$3>I"yR+sZ2mb8gj=brB\{FWJSLNNKOHOFNGKHHIFIFIFIFIFIFx֣ͮù$0 ;yEqO%kX+e`1`h6Zp;Uz?PЅBLΒDH̡FDʲGBGAFADABB@B@B@B@B@B@~۝ЩǴ"- x7qAjKdT$^\)Ye.Tm2Ow5J8F:BWGSPOXJaFjBt >!;#8$6$4$3$2#1#1#1#1#1#1#ݛѨdzy pia'[/ U7 Q?MFINEVA^=h:s620.,+++++++ԥʰxog`Y S'N.J5 G< CC @J *@+@.?3<:7D 3O .\ *h &t # !            ;*?)B*B,A1>9:B 7N 2Z .f +r '~ % # # " !               =(A(D(E+D0A7?@ AI >U 9a6m3y1//.-,,++)('%$## # # # # # A&G$K$M&M*K2J< HF DR@^=j:u8765443310/.-,,,,,,,,D$J#O"R$R'S/Q8 NC KOH[EgBr@}>><<;;:8765555555555G#N!S W!Y&Z-X5 U? RKOWLcIoHyFEDCBB@?>====>>>>>>>J!RW[_$a+`3 ]< YGVTS`QkPuNL K!J#I#H$G%F%E%D%E$E"F!FFFFFFFMU[`e#h*h1e9 aB_O\\ZgWq!U{$S&R(Q)P*O+N,M,L,L,L*M(M&M$N#N"N"N"N"N"PX_ek"n(o.m6 j>hKeXbc _m%]w([+Z-X/W0V1U2T2S3R3R1S.T+T)T'T'T'T'T'T'S[cjp t&u,u3 s;qGnTj_"gi'es+b|/a1_3^5]6\7[8Z8Y8X8Y4Z0Z.[+[+[+[+[+[+U^fnuy$|*}0|8 zDvPr[#oe)ln.iw1g4f7d9c:bh?fAeAdBcBd=d9e6d3d2d2d2d2d2Yclu| $(ۍ/ω=ƅIU#|^*yg0vo5tw8r

n@mBlDjEiEhEhAh=h9g6g5g5g5g5g5[enx "Ԕ,ɏ;GR#\*d0|l5yt:w|=u@tBrEpFoHmHlHlEl@l{AyDwFuHsJrKqKpHpB~p>}o:}n9}n9}n9}n9}n9_is}Ԟɞ&6 BM!W)`0g6o:v>B~E|HzJxL|wLyuMwtJxuEwt@wrpv=pv=pv=pv=pv=bm y ߖҟɧ !1 >IS'[/c5k:r?zC}FyIuLqNnOkOiNjHj}Cj{?j{>j{>j{>j{>j{>ep {  ֚͢¬/ <GQ&Y-a4h9p>{xBvFrInLjNfOdOaOcIcDcAc?c?c?c?c?gr  ەўȧ,9DN$W+_2~f8yn=tuAo~EkIgKcN_O\OZN[I\E\A\@\@\@\@\@j v ֙͢ë(6AK!T)}]/wd5rk:ms?h|CdF_I[LWMTMRLSHTDUAU@U@U@U@U@m zܔўȧ #2 >H|Q%vZ,pb2ki7fq;az?\CXFTHPIMJKIKFLBM?N>N>N>N>N>q֙ͣí.:{EtN oW'i_-dg2_o6Zx:U=Q@LBIDFDDCDAE>F;>:>8?6?6?6?6?6?6}̥֚¯z%r1k<eF_PZYUa"Qj&Lt*H-Dڍ/@؜1=խ2;29190808/8.8.8.8.8.ܕТƬ{s!k,c6 ^@XJTSO\KeGoCy"?$<%9&7&5%4%3%2%2%2%2%2%2%Ԟʩ{skd']0W9 SB NKJSF\Bf>p:}7420/.,,,,,,ٚͦırj c\ V)P1L9HA EI AQ =;D7L3T /^ +j &x "         ɭwj^VP KFA=$:*70461=-D)L$V bo~´zl_TLFA= 9520#-(*.'4#:BLVb nzqdWKC=951. +)&$ !%+17@ IR[dggggg6+9*:+:.733:-D'O![gs     7*;(<)<,:1681B,M'Y"eq|   9(='?'?*=/966@2K-W(c $n !y          <&?%A%B(@,=3<=9H4T /` ,k )v & $ $ # " " ! >%B#E#F%E)D1B:@E

KI GU D`Ak@v>=<<;;99776666666666G MRUY"Z)Y1U: RE OQL]JhHrG|FEDCBA@????????????JQV[` b'a.^6Z@ WLTYRdPnOxMLKKJ I!H!G!G!F!GGGGGGGGGMTZ`fh%h+f3c< `H^U[`YjWtV|!T"S$R%R&Q'P'O(N(M(N%N#N!NNNNNNPW^ekn"o(n/k7iD fPc\af_o"]w$\'[(Z*Y+X,V-U-T.T.T+T(U%U$U"U"U"U"U"RZaios u%u+t3q@ nLkXib fk$ds'c{*a,`._/^1]2[2Z3Y3Z0Z-Z*Z'Z&Z&Z&Z&Z&U]dmsx{!|%|.y< vIrTo^!mg%ko)iw,g/f1e3d4b5a6`7_7^5^1_-_+_)_)_)_)_)W_gpw|ރ҃*ǀ9 }FyQv[!sd&ql*os.m{1k3j5i7g9f:d:c:b9c4c1c.c,c,c,c,c,Yaj sz؉ˉ'7 CN|X!ya'vi+tp/rx2q5o7m9l;jmt9mt6mr3mr3mr3mr3mr3`ju  ӏʖ-:EOX%`*g/n3}v7y~;u>q@nBk}Dh{DezDfy?fy;gx7gw5gw5gw5gw5gw5b lxٌϓŚ*8 CMV$^)e.{l3wt7s|:o>k@gCdDaD^D^@_<`~8`}6`}6`}6`}6`}6e o{Ԑ˘'5 @JS"[(zc-uj1qr6lz9h=d@`B\CYDWCW@XY@UARBPBO?Q;Q8R6R6R6R6R6kx֐̚¡.:}DwNqV"l^'hf,cn0^v4Z7V:Q=N>K?H>H1<1;0;/;-;,;,;,;,;,|ތјȢxoj)e6_A ZKVTQ]MfIpE{"A·$>͖&;˦'8ɻ(7'6'6&5&5%5%5%5%5%ה̟©qic$]/W:SE OO KXGaCk?v<964210/.....ݏМƧwic\V)Q3M<IEEO AX =b:m6y31.-+*((((((ԙɥ|naZ UO!J*F2B;?C;L7U3_ /k +y ( & $ # " ! ̣íqdXRLGC ?(;/865>1F-O(Z$f uŬtgZOIC?;74#1)./+6&>!FQ^l} xi\PG?;62 /,)&!#' -4<G S`n~}oaTH>72-*&#! #* 1;EQ]gppppp2+4*4+3-/3):"CNZf r|3)6(6)5,21-8&A LXdo z 6(8&9'8)5.05,?'I!Ualw     8&;$<$<&9+523</G*R%^!it~  ;$>"@"?#='==<;::99988888888GMQUZ[$Z+V3R>OJ LV KaIkHuG}GFEEDCBBAAAAA@@@@@JPU[`b!a(^/Z8XE VR T]RgQpPxONNMLKJIHHHHHHHHHHMTY`egh$f*b3a@_M ]X[bYkXsW{VU T!S"R#Q#P$O$N#O OONNNNNOV\ dilml$k.i<gIeTc^ag_o^w ]~"\$Z%Z&X'W(V)U)T(T%T"T TTTTTRY` hmprqr*q8nElPiZgcfk ds#cz%a'`(_*^+],[-Z-Y-Y)Y&Y#Y!X!X!X!X!T[ c kqtv wy&x5uBrMpWm`kh!jo$hw'g)f+d-c.a/`0_1]0],])]&]$]$]$]$]$V^ f n t x {}#~3{? xJuTs]qe"ol%mt(l{*j-i/g1f2d3c3}b3|a0|a,{a){a&{a&{a&{a&{a&X` iq w|Ѐǃ 0= ~H{RxZvb"ti%rq(px+o.m0l2~j4{i5yg6vf6uf2uf.ue+te(te(te(te(te(Yblt{ԁ˅.; FO~X{`"yg&wn)uv,s~/~r2{q4wo6tm7rl7pk7nj4oj0oj-oi*oi)oi)oi)oi)[ dnw~ЅNJ+8 CMV^"~e&|l)~zt,{y|0xw2tv5qt7nr8kq9ip9ho6hn1in.im+im+im+im+im+] fqzւ͉Ž(6 AKT\!c%|j)yr-uz0q}3n{5kz7gx9dw:bu:at7bt3bs/br,br,br,br,br,` it~ӇɎ%3?IRZ {a$wh(sp,ox0k3h5d8a9^}:[{:Zz8[y3\x0\x-\x-\x-\x-\x-bmxڂϋŒ "0< F~OyWu_#qf'mn+iv.e2a5]7Z8W9T9S8T3U0U~.U~-U~-U~-U~-eq|Շː-9 ~CxMsUo]!jd%fl)bt,^}0Z3V5S7O7M7L6M2M0N-N-N-N-N-iu݂эǕ(}5w@qJmRhZdb"`j%[r)W|,S/O2K3H4F4E3E0F.G,G+G+G+G+m{؈͓Û{#u1p< jFfOaW]_Yg!Tp$Pz'L*H,E.B/?/>.?,?*?(?(?(?(?(sҏșxqm+g7cB ^KYTU]QeMnIx!E#B%>';(9'9'8&8%8$8$8$8$8$zڊ͖ğsfb!^0Y;UF QO MYIbFkBu?ł;Ð86433222222Ғȝ|l^WS&P3L>IIES B] >g;r85؎2֟0Գ..,,+++++؎̛¥seXRMI*E5B?>I;S8]4h1u / , * ) ' % $ # # # # # Иƣxj]QK FB!>+;38<4E0O-Z)g%t#!ɢ|naUJD?:7 4'1/.7)?%I!Taq     ªqdWLB;73 /,)!&(#/7@KY i|ugYMC:3/+'# !&- 6AO^n{l_RF;2+&"  #+6BP]jwyyyy.*/).*+-&2 9B MYeo{0)1(1(.+)0#7@J Wbmx2'3%3&1(--&4"=HT_ jt4%6#7#5%1),1*;$EP\gq {    7"9 : 9!6%4.27.B(M#Xcmw          : =>=<"<*:47>2I-T)_&i$s#|""!! =ACCDD'B0?:;E6P3[0f.o.x--,,+**)'''('''&&&&@EGHLL$J,F5C@?K>=<;;;::9 9 9 9 GLPUYZY#U+P4OAMNMY Lc KkJsJ{IIHGFEDCCCBBBBBBBIOS Z^`^[$X/X<WIVT U^TgSoRvQ~POONMKJIIIIHHHHHLR X_ cdc_a)a8`E ^P ]Z[cZkYrXyWVUTSR P O ONNNNNNNNU [c g h g fi%i5gA eLcVb_`g_n^v]}\[!Y"X#W$U$T$T"SSSSSSSQW_fjlmmp"o1m> kIiSh\fdekcrbz a"_#^%]&['Z'Y'~X%}X"}X|W|W|W|W|WS Zbinqss uu.s;qF oPmYkajhhogw!e#d%c'b(~`*{_*y]*w\(v\%v\"u\ u[u[u[u[U \elqvxy{{,y9vD tNrVp^nemlkt"j|$h'|g)zf*we,tc,rb,p`+p`'p`$o`"o_ o_ o_ o_ V ^gouz~)~6|A yKwTu\scqj pq"|ny%ym(vl*sk,pi-nh.lf.je-je)jd%jd#jc"jc"jc"jc"X`jry&4? I|RzZxa}wh yuo#vtw&sr(pq+mo-jn.gl/ek/cj/di*di'dh$dh#dh#dh#dh#[cmv~ƃ#1= GPW{~_w|f t{m#qyu&mx~)jv+gu-dt/ar0^q0]o0]n+^m(^m%^l$^l$^l$^l$]fpz͂È /: D~MzUv]rdnk#ks&g~|)d}+a{-]z/Zx0Xv0Vt0Ws,Wr(Xr&Xq%Xq%Xq%Xq%_itʇ,8~B yKtSp[lbii!eq%az(^*Z-W.T/Q}0O{/Py,Px(Qw&Qw%Qw%Qw%Qw%bnyЄƌ(}4x? sHnQjYf`bh_o#[x&W(S+P-M.J.H-I*I(J&J~$J~$J~$J~$fr̉‘|#v1q<lE hNdV`^\eXnTw"P%L'I)F*C*B*B(B&C$C#C#C#C#jxӅȏysn+i7eA aK \SY[UcQlMuI F#B$?%=%<%;#<"N^m|))))()$,18ALWcnx+(,'*'&* /6 >IU`kt~.&/$.%*'$+2< FR]hq{1#1"1".$('#/ 9CN Ydnw3!542-#+,)6#@JU`j s { 68865 4(12-<'F"Q\fow 9<=;<<%:.681B,M(X&b$l$t$|##""!!  =@ABDC!A)=39=5H2T0^0h/q/y/////..-,,+++*****@CEHKKH$D-?7== < < ; ; ; ; FJ NT WVSLN*O8PEOPNZ Nb Mj LqLyKJIIHGFEDCCBBBBBHMRY[ [ V TW%Y4XAWLVV U^ TfSmRtR|QPONMLJIIHHGGGGK PV]`_^\_!`0`=_H]R \[[cZjYqXxWVUTRQONNN~M}M}M}M}MM RZ`cffd fg-f:eE cO bWa__f^m]u\}[YXW~V{TySxSwRwRvQvQvQvQOU]chkljlm*l7jBiL gUf\ddcjbr`y_~^{] y\!vZ"tY"rW"qWqWpVpVpVpVpVQW`flprpqr'q4p?nI lRjZiaghfo}ewzdxc ua"r`#p_$n]$k\$k[ k[jZjZjZjZjZSZcjquwvww$v2u=sG qPoWm_}lezkmwjtth}rg!of#le$jc%gb&e`%e`"e_e^e^e^e^e^U]fnuy||||!|/z;xE vMtU{r\xqcupkrnrom{ll"ik$fj%ch&ag'_e&_d#_c _c_b_b_b_bW_iry~ -8}B ~{KyzSvxZrwbouiltpisy fq"cp$`o&]m'[k'Yj'Yh$Yh!YgYfYfYfYfYcmv~*6}@ xI tQq~Xm}`j{ggzncyw`w"]v$Zt&Ws'Tq'So'Rn%Sm!SlSkSkSkSk\fq{Ń&}3w=sF oOkVh^deam]uZ~!W}#S{%Py&Nw'Lv&Lt$Ls!MrMqMqMqMq_kv̀{"v/q:mD iL eTb\^c[kWtT~P!M#J$G%E}$E{#Ez FxFwFwFwFwcp|Ȇy so+k7f@bI _Q[YXaTiQrM|IF C!A"?!> ??????iw΃Črjg%c2_<[FWN TV Q_MgJpF{C?=:98888888o~ʊma ]Y+V7SAOJLS I\ Fd Bn?y<96432211111xІő{jYQN"K/I:FDCN@W=a;k 8v 5 20.,,+*****ׂʏteUF@>"3+ (% #* 4?LYiz  vh[NC8.&" %.9 ETfyzk^QF;2)  &1=M`upaTG=3+" (4DWlvhZM@5+#  *:L_s%($(!)+07@IV`kv''&%$&)- 4<GS]hr{*$)#'#"%*0:DOZenw,", * %"%-7 AKVajs{/0.*#!"*3=G R]fow~232.,+&'/!9CNX b k s z 676343"0++5%> IT^gow~9;: ;<:7&2/-9(D&O%Z%c&l&s'z''''''&%%$$##""""<> > B CA<7(22/>1J2U3_3g4o4v4}44332210/..--,,,?B CH I GA:8+;9=E>P>Z>b>j>q>x===<;; 9 8 8 7 655555B EHMNK D @D&G4HAHLHUG^GeFmFt E{ E D D C B A @ ? > = < < ; ; ; E HMRSQNJN!P0Q<PGPQOZNa Ni Mo Lw L~KJIHGFDDCBB A A A GJQVXZXT VX,X9XDWNVV U^ Te SlRsQzQPONL~K|IzIyHxHxGwGwGwGIMUZ^`_\]_)_6^A]J\S [[ Zb YiXpWwVU}T{SyQvPtNsNrMqLqLqLqLqLKPX^cffbce%e3d>bGaP `X __]f\m~[t{Z}yYvXtWrVoTmSlRkQkQkPkPkPkPMS[bhklhij"j0i;gEfM dU c\}bczajx`ru_zs^p]n\kZiYgWfVeVeUeTeTeTeTOV^flpqnn oo-n9lBkK ~iS zhZwgaufhreopdxmbjah`e_c]a\`[`Z_Y_Y_X_X_XQYbjqtvts tt+s6q@}oI ynQ umXrl_pjfmimjhvggefbe_d]b[`Z_Z^Z]Z]Z\Z\Z\S\fouy{zyyy(x4|v>wuF tsN prVmq]jpdhokentbl~_k\jYhWgUeTcTbTbUaU`U`U`V_jsz~~~${~1v|;r{DoyL kxT hw[evbbuj_sr\r|YqVoSnQlOjNiNgOfOfOeOeOeXcoxz!u.q9mBiJ fR c~Y`}`\{hYzpVyzSwPvMtKrHqHoHmHlHkIkIkIk\ht}y so*k5g?cG`O ]W Z^VfSoPxMI}G|DzBxAvAtBsBrBqBqBqanzÃrkg%d1`;]DYLVT S\ PdMmIwFC@><;;|;{;y;y;y;yguʀnb^[,X7U@RIOQLZ Ib FkBu?<:765544444n|ƈ}jZTQ$O0L;IDFMDVA_>h ;s 8 531//.-----w̅wfVI EC'A3?==G:Q8Z6e3p0}., * ( (' & & % % % ҁƎpaRC8 53'220=.H-S+^)k'y%#!ˋxi[M?2' $"#!/:FSaṕ˔ɪŕ~oaSF:/$*6C Q asޜܴseXK?4*! %0=M_rxi[NB8.%  )6FZp}m_QE:0'  .>SitfXJ>2(   %5I_t ''(*/5=GS^js|"%!$%' ,29EO[fpx%##""$(.6BLWblt|( &## +4>HS^hpw~+*' '1:DOYcksz..+%# #-5 ?JU_gou|11.++)$(1:E P Z c k r x  55 3 3 30+"%+4?KU^fmt{88 7:: 60)""-$9'E)P+Y,b,i,p-w-~--,,+*))(''&%%%; <=@@; 2*/'245@6K7U7]7e7l7r7y7766543210//...>?BFEA;7;!>0?<@G@P@Y@a@h@n@u?}?>>=<;99876555@BGJKLGB EG+I8ICILHUH]HdGjGqFxF E D C B A ? }? |> z= z< y< y< y< CDKOSTRLMO'P4P?PIOQOYN`MgMn Lu K} K J ~I{HyFwEuDtC sB rA rA rA rA DHOUZ[ZTUV$W1W<VFUNUVT]Sd Rj Qr }Qz zPxOvNtMqKoJnImHlGlF kF kF kF FKSZ_a`Z[\ ].\9\C[KZSYZ }Xa {Wh xVo vUwtUqToSmQkPiNgMfLfLeKeJeJeJINW_dffaa bb+b6a@`I}_Pz^W w]^ u\e r[lpZunY~kXiWgVdUbSaR`Q`P`O_O_O_OJR[chkkhf gg(f4e>{dFxcNubU ra\ o`c m_jk_rh^|f]c\a[^Y\W[V[U[TZSZSZSZSLU_gmppnlkl%~k1zj;viDshLpgS mfZ jea hdhecpcbz`a^`[_Y]W\UZUYUXUWUWUWUWNXckquvtqp~p"yp.uo9qnAnmIklQ hkX ej_ cig`io]hx[fXeUdSbQ`O_P]P\P[P[P[P[P\gpvy{zv}vxvsv+pu6lt?isGfrOcqV `p] ]oe[nmXmvUlRjOiMgKfJdJbJaJ`J`J`J`Talu{}w| q|n|(j{3g{=czE`yM]xT [w[ Xvc UtkRsuOrLqIoGmElDjDhDgDfDeDeDeYfqzqkg$d0`:]BZJWRU~Y R}a O|jL{sIy~FxCvAu?s=q=o>m>l>k>k>k_lw~nc_\+Y6V?SGQONWK_ Hh Eq B}?=:}8{7y7w7u7t7s7s7sfs~|j[VS%Q1N:LCILFTD]Af>p ;{ 9 64211 0~ 0} 0{ 0{ 0{ n{yfVKHF*D4B>@G>P;Y9c7m4y1/ - + * * ) ) ) ) ) vȃtcRC<: 8,665@3I2T0^-i+v)'%##"!!!!!΀Œ}m^N@2-+ )+'5&@$K#V!c pNJufWI;/#'2>JXgw  {l^PC7+! !-:HXh{ѐΦqcUH<1' '5DVh}ufYK?4*!  .>Rf|zk\NB7-#  &7LbyrcUG;/% 0DZp&%&)-2:EQ]hqy$## %*/7BNYdmu} !  !%*4>JU`iqx#  (1;FQ\eltz&$ %-6ALW`hou{)'" )2<GR[cjpv|-+& # "$-7BLV^elrx0. *+)%& 0 ; FPYahnu{3 2020* !(5@ K"T#\#c$j$q%w%~%%%$#""!! 65685-&!&#*0,;-F.O/X0_0f0m0s1z000/.-,+*)((((98<==;5/ 25+778B9K9T:[:b:i9o9w9~98875432}1|0|0{/{/;;ACGFB;<?'@3A>BGBPBWA^AeAl@s@{@?>~=|<z;x:v8u7t6s6s6s6=?EKOOLEEG#H/I:IDILHTH[GbGhFoFw|EzExD vC tB r@ p? n> m=m<l;l;l;@CIQUVTNLNO,O7OAOINQNX~M^|LeyLlwKtuK} sJ qI nH lG jE iD hC gB fA f@f@f@BGOW[][US TU)U4U>TF}SNzSUwR\uQbsQjqPq oOz lO jN hM fKdJbHaG `F `F `E `E `E CJT[`ba[YZZ&Z1~Z;zYDwXKtWRqWYoV`mUg kUo iTx gS dRbQ`P^O\M[L[K [J ZI ZI ZI EMX`egfb___#|_/x^8u^Aq]Io\Pl[Wj[^hZe fYm cYv aX ^W\VZTXSVQVPVO UN UM UM UM FQ\dikkhdc{d wd,sc6ob?lbFjaNg`Ue`\c_c `^k ^^t \]Y[WZTYRWQUPTPSPR PQ PQ PQ IVahmppni{huiqh)nh3jg<hgDefLbfS`eZ^da [ci Ybr Va}T`Q_O^M\KZKYKWKV KU KU KU MZemruutpvn pnln&hm1em:cmB`lJ]kQ[kXXj` Vih Shq Qg{NfKdIcGaE_E^E\E[EZ EZ EZ R_jqwz{zwptitft"bt-`s7]s?ZrGXrOUqVSp^Pof Mno Kmz HlEjCiAg@e?c?b?` @_ @_ @_ Weow|~~m|b{_{\{*Yz4Wz=TyERyLOxTMw\JvdGum Dtx Bs ?q=p;n:l9j9h 9g 9f 9e 9e ^ku}{j\ WT%R0O9MAJJHRFZCbA~l>|w ;{ 9z 7x 5v 3t 3r 3p 3n 3m 3l 3l eq{xgWNKH*F4D=BE@N>W<`9j7u420. -~-{,x,v ,u ,u ,u lyucSD @>#<-:78@7I5R3\1g/r,*('%%%$$$$uÁp_O@4 20%./-8+B*L(W&b%n#}!zjZK=/$ " $.8CNZhwÉrcTF8,   + 7 BO^mxi[M@3('3@O`qņÛ}n`RE9.# ".<M_s܊ڣսsdVH=1' (7I^twhZL@4)  !2D[q~oaRE7,! +?Ul%$$'*08DP\gow~"! !$&,5@LXckry "(1<HT^gnt{%.8DOYbiou{! "*4?JT\djpv|$   %/9DNW^ekqw}'$  )3>HQY`gmrx* '!" !,7BKT [ b i o u | .*))$  %1<FOW^dkqx0-//+(!!,$7%A&J'R(Y(`)g)m)t)|)))('&%$#"!~!~!3056861( *-'/20=1F2N2V3\3c3j3p3x32210}/{.y,w+v*v)u)u)55:@BB=657"9.:9:B:J;R;Y;_;f:m:t:}}9z9x8v7t6r4q3o2n1n0n0n07:@GKKG@=?@*A5A>BGBNAUA\}Ac{Ajx@qv@zt?r?p>n=l;k:i9h8g7g6f5f59>FMQROIE FG'H2H;HD|HKzGRwGYuG`sFgqFnoEwmEkDiCgBeAc?b>a=a<`;`:`:;ALSWXVPLLM$M/|N8yMAvMHsLOqLVoK]mKdkKliJtgJeIcHaG _E ]D \B[A[@Z?Z?Z?=FQX\]\VRRR!zR,vR6sR>pRFnQMkQTiPZgPbeOicOraN|_N ]M [K YJ WH VG VE UDUCUCUC?JU\aba]W~WyWtW)qW3nW<kVChVJfUQdUXbU``Tg^Tp\SzZR WQ UP SN RL QK PJ PH PHPGPGCOY`egfc]y\ s\o\&k\0i[9f[Ac[HaZO_ZV]Y^[YfYXnWWy TW RU PT NS LQ KO KN KM KL KKKKFS^eikkidtanaja#fa.ca7a`?^`F\`MZ_UX^\V^dT]mQ\w O[ LZ JY HW GV FT FR FQ FP FP FP JXbinpqo~joghfdf af+^f4\f<YfDWeKUeSSdZPcbNckLbuIa G` E^ C] A[ @Y @W @V @U @T @T P]gnsvvu|qmnal^l[l'Xl1Vl:TlBQkIOkQMjXKiaHijFhtCg Ae ?d =b ;a ;_ ;] ;[ ;Z ;Z ;Z Vclty|}{zyjv[t WsTs$Qs.Os6Ms?KrFIrNGqVDp_Bph@or=n;l9k 7i 5g 5e 5c5a5`5`5`\irzxh~W|N{L{I{)G{3Ez;DzCBzK@yT>x\;xf9wq7v}4t2s0q/o/m.j.i.g.g.gcoyudTF B@$>.<6;?9G7P6Z4d1o/|-}+|)z(x(u's'q'o'o'okwq`QA864'2009/B-K,U*`(k&y%#! |zxxxt}m\L>/)(&($1#;!D OZgu~wgWH:-(1;FS` n  o`QB5)%0;GUduufXJ=0%#.:GWh{{k]OB6*   *7FXlсϙ̱paSF:.$ #2CXnteWI=1& ,>Un|m^PB4) ':Pi#"#$(.7CO[elsz!  !$)3?KW`hou|$/;GR[cjpw|"+6BMV^ekqw| '1=GPX`flqw|  ",6AJSZaglrw}!  %0;DMT[bgmsy$ *4>GOV]ciou|'! " - 8AJQX_ekry*$'&'$ (3<E M T![!a!g"n"u"}""! ~|zyxxx,*,242-$#&#(.)8*A*H+P+W+],c,j,q,z,}+{+y*w)u's&q%p$p#o#o#./5<>=82-01*243=3E3L4S4Y~4`|4gz4nx4vv4t3r3p2n0m/k.i,i+h*h*h*/3=CFFB<6 79&:0:9:A};Iz;Px;Vv;]t;dr:kp:sn:}m9k9i8g7e5c4b3a1a0a0a019CJMMJD>>?"@-{@6xA>uAEsALq@So@Zm@ak@hj@qh?{f?d>b=`<^:]9\8[6[6Z5Z54>IOSSQKED}ExF*uF3rF;oFCmFJkEPiEWgE^eEfcEnaDx_D]C[BYAX?W>V<U;U:U9U97CMTXYWQL|JvKrK'oK0lK8iK@gJGeJNcJUaJ\_Jd^Il\IvZHXHVGTERCQBP@P?P>P=P=;HRY]^\XRwP qOmP$iP-fO6dO=aOD_OK^OR\OZZNbXNjVNtTMRLPKNJLHKFKEKCKBKAKA?MV]acb^XrUkTgU!dT+aT3_T;\TB[TIYTPWSXUS`SSiQRsOR~MQKOINGLFJFIFGFFFFFFDQ[bfggd}_mZfZbZ^Z(\Z1ZY9XY@VYGTYORYVPX^NXgLWqJV}GUETCSBQAOAMALAKAJAJIV_fjllj{elb`_\_Y_%V_.T_6R_>P_EO_MM^TK^]H]eF\oD\{B[@Y>XbzjY0 -+!**(2';&D$N"X!dq~{yvtrqqs}zjYJ;-! "+4=GS_m} ~ |{{|tdTE7*  ! + 5?KXfv|l]N?2&   *5@N]lsdUG9-!  (3@OasxiZL?2'%1?PcyŒî}m_PC7+   !.>Qf~rcTF:.# *<Qhyj[L>1&$8Oh!!!"%,5BOYbipw}  &1>JT]elrx~"-9EOX`gmsx~ )4?IRZagmsx~ $/:CLT\bhmrx~  )3=FNV\bhmsx#-7@HPW]chnsz '1:CJRX^diov} *4=E L S Y _ e l sz  } | |{!"#  $.8@GNU[ahow~|zxvtsrrq#")/0.(! *"3#<#C$J$Q$W%]~%d|%kz%sx%|v%t$r$p#n!m kjjii$(28:94.& (*%+/,8,?~,F{-My-Sw-Zu-as-hr-pp-yn-l-j,h+f)e(c'b&b%a$a$&0:@CA=8002!2+{34x4<u4Cs4Jq4Po4Wm4]l4ej4mh4vf4d3c3a2_0]/\-[,[+[*[*+7@FIIE@97|8w9(t91q:9o:@l:Fj:Mh:Tg:[e:bc:ja:t_:^9\8Z7X6W4V3U1U0U/U/.<FLOOLGAz= u>q>$m?.k?6h?=f?Dd?Jb?Q`?X_?`]?h[?rY?}X>V=T<R:Q9P7P6O5O4O44AKQTURMHuC oCkC!gD+eD3bD:`DA^DG\DN[DVYD^WDfVCpTC{RBPBN@L?K=K;J:J9J8J89FOVYZXS~NpIiHeHbI(_H0\H7ZH>XHEWHLUHTTH\RHdPHnNHyLGKFIEGCFAE@E>E=E<E<=JTZ^_]Y{TlOdM`M\M%YM.WM5UM<SMCRMJPMROMZMMcKMlILxGLEKCIBHAF@D@B@A@@@@BOX^bdc_yZjV^S ZSWS"TR+RR3PR:NRAMRHKRPIRXHRaFRkDQvBP@O>N=LVu^T<]^;]h9\s7[5Z3Y2W1U1S1Q1P1O1NS_gnrttrtoflUhGe CeAe"?e*=e21lF0lO.kY-kc+jo)i~'h&f$e#c$`$^$\$[$[altzo~_{Oy?v2u 0u.u!,u*+u2)t:(tB'tK%sU$sa"rm q{pnljhedcbis{}l[K<-%#"~$ ~,~4~=}F}Q|]|j{xywuspnlkkq{wgVG9*%-6@ K X et|ywutt{qaQB4' %.8CP^myiZK<0# $/:FUdvpaRD6*#.:IYkvfWI</#   +9J^r{k\M@4((7J_xדկpaRC7+   %6JbzvgXI:." #5Jc| #*4ALV_fmsy$0=GQZahotz +7BLT\ciotz  '2<FOW]dintz  !,6@IPW^dinty &0:BJRX^cintz  *4<DLSY^cinu|$.7?FMSY_djpw  '09AHNTZ`flt|~|zxwvuu   *3;BIOV\bi~p|yzwusqpnml l k &+,*% %.7>E~K|QyXw^vetmrvpnljhfedccc&/5750*"!# $*|%3y%:w&At&Gr&Np&To'[m'bk'ii'rg'}e'c&a%`$^"]!\ [[[ .7=?>94-){+w,&t,/q-7o-=l-Dj-Jh-Qg.We._c.ga.p`.{^.\-Z,Y+W)V(U'U%U$T$&4>CFEA<6y1 t1p2#m2+j33h3:e3Ac3Ga3M`4T^4\\4d[4mY4xW3V3T2R0Q/P-O,O+O*N)-:CIKKHC=s7m7i8f8(c80a87_9>]8D[8KY9RX9YV9bU9kS9vQ9P8N7L5K4J2J1I/I/I.2?HNPQNI}Do=g<c=`=%]=-[=4Y=;W=AU=HT=OR=WQ>`O>iM=tL=J<H;G:E8E7D5D4D3D27DMRUVTOzJkDbA^BZB#WB+UA2SA8QA?OAFNBMMBUKB^JBhHBsFBEAC@A>@<@;@9?8?7?6<HQWZ[YUwPiK]G XFUF RF(PF/MF6LF=JFDIGKHGSFG\EGfCGqAF~?E>DKpQG=QP;QY:Qc8Qn7P{5O3N2L1J1H1G1E1D1CKW_eijjgsde`U\FX CW@W >W(=W/;W6:W>8WE7WN5WW4Wa2Vl1Vz/U-T,R+P+N+L+J+I+HQ]ekoppnrkdhSdB`;^9^7^%6^,4^33^;1^C0^K/^U-]_+]k*\x(['Z%X$V$T%R%P%O%NXckquwwupraoPk@h3f 1f/f .f(,f0+e7)e?(eH'eR%e\#dh"cv ba_]ZXWUU_jrw{~~~|my]wMs=q.o'n&n$n##n+!n3 n;mDmNmYlfktjhgdb`^]\gqyziY~I|:z,yx www&w.w6w?vJvUub tp s qomj h f e dpyudSE6(  '0:DP]~k}|{yvtqonmy~n^N@2%  (2=HVev|zxxvgWH:-  )4?M]n}m^OA3' (4AQcwsdUF9,   '4CUjyiZK=1% #2EZq΋ͦ~n^OA4( 1D]xsdTE7+ 0E]x '3?IS[cjpv{".:DNV^ekqv{)4?HQY_ekpv{ $/9BKSY`ekpu{  )3<ELTZ`ejou{ #-6?FNTZ_diou|'09AHNTZ_djpw~ !*3;BIOTZ_ekrz~|{{z #,5<CIOUZ`fnv|zwutrqpoo &/7 > D J P~ V| \y cw ju ss}q o m k i h gfee #()&! !*2|9y@wFuLsRqXo_mgkoiygeca`^]]\\$-231-'|x%u.r5p<n Bl Hj Nh Uf!\d!cb!l`!v^!] [ YWVVUUU,5:;:60)y# t$p%!m%*j&1h'8f'>d'Db'K`'Q^(X\(`[(iY(tW(U'T'R%P$O"O!N NN%2;@BA=82s+l*i+e,&c,.`-5^-;\-AZ-GY-NW-VV.^T.gR.qP.~O-M-K+J)I(I'H%H$H$,8AFHGD?|9n3f0b1_2#\2+Z22X28V2>T2ER2KQ3SO3[N3eL3oJ3|I2G2F0D/C-C,C*C)C)1=EKMMKEy@k:`6 \6Y6 V7(S7/Q75O7;N7BL7IK7QI8YH8cF8nE8zC7B6@5?3>2>0>/>.>-6BJORRPKvFh@[< V;S;P;%M;,K;3I;9H;@G;GE<=;;9:8969493:2:1;FOTWWVQsLfGXBP@M@J@#H@*F@1D@7C@>B@E@AM?AV>A_5<5:58575655?KSX\\[WrSeNVIKEGEEE CE(AE.?E5>E<0=0;0:09EPX]aa`]qYdUUPFK AK?K=K%;K,:K38K:7KA6KI4KR3K\1Kg0Jt.J-I+G*E*C*A+@+>+>JU]bfgf~dp`c]TXCS;Q9Q7Q"5Q*4Q02Q71Q?0QG.QP-QZ+Pf*Ps(O'N%M$K$I$F%E%C%CP[bhkml}jogbdR`A[4X 1X0X.X&-X.+X5*X<)XD'WN&WX$Wd#Vq!V TSQNLJIHWainrss|qnn_kOg?d/`)_'_&_"$_*#_1"_9 _A_K^U^a]o\[YWUSQPO^houxzz{yku[rKo0$  #.;J\oqbRD6)".<NbzwgWH;."  .>Riǃß|l\M>2%-AXqqaQB5( +@[x%0;FOX`fmrx} +6@JSZagmrx} &1;DMT[bgmrw}  !+5>GNV\bglqw}&/8AHPV\afkqw~ !*2;BIPV[`ekpw$-5<CJPUZ`ekry '/7>DJPUZ`flt}~{ywvuuu  !)18?EJPU[a}h{pxyvtqonlkjii #+39~@|EzKwQuWs]qdolmvkigecb``__ %%#  { &w -u4r;pAnFlLkSiYgaeicsa_][YX W W V V "*/0-)#z uq!n)k0i7g=eBcHaO_V^]\fZpX|VTRQPOOON*27862-&slif%c ,a 3_!9]!?[!EY!KW"RV"ZT"cR"mP"yO"M!K JIHHHH$19=?>:5{/n(e$a%^&![&)Y&0W'6U'<T'BR'HP'OO(XM(aK(kJ(wH(F'E&C$B#B!B BB*6>CEDA<w6k0_+ Z+W+U+&R,,P,3O,9M,?K,EJ-MH-UG-^E-iD-uB-@,?+=)=(=&=%=$=#0;CHJJGBt=g7Z1T0Q0N0#L0*J00H16F1<E1CD1JB2SA2\@2g>2s<2;1:08.8,8+8)8(8'5@GLOOLGrBe=W8N5K5H5 F5'D5-B53A5:@6A>6H=6Q<6[:7e97r76654433313/3.3,3+:DLQTTR}MpHcDV>I: E:C:@:%?:+=:1<:8::?9;F8;O7;Y5;d4;p2;1:/9.7.5.3.2/0/0>IQVXYW|SoObKTEE@ @?=?;?"9?)8?/6?65?=4@E3@M1@W0@b.@o-?~+>*=);(9)8*6*5*4CNU[]^]{YnVaRSMDH:D7D5E 4E'2E-1E40E;.EC-EK,EU*Ea)Em'D|&C$B#@#>$<$:%9%8ISZ`cdc{`m\aYSUBO4K 1K/K.K$,K++K2)K9(K@'KI%KS$K_"Jl!JzIGECA?>=OY`ehjizglc`aP\@W1S*R(R&R!%R($R/"R6!Q> QGQQQ]PjPyOMKIGEDCU_flopoynlk]hMc=_.\"Y YYY$Y+Y3Y;YDXNXZWgWwVT R P MKJI]fmruwwxuiqYnJk:g,ecbaa a'a/a7 a@ `K `W_d^s][YWUSQPemty}~~u|dxTvEr6p(nl k kkj"j*j3j<iGiSh`gofdb_][YXmv|p_O}@z2y$wv uuuut%t-t7sAsNr\qko|nkifdbav~yiYI;-  '0;~G}V|ezwyvtromlrbRC5( (3@N_q~|{zyiYI;." )5CTg}o_PA4' )7H[qtdUF8+(8Kc}zjZJ</" );Qj߅ۤo_O@3& (>Wq"-8BKT[bintz (3=FNV]cinty  $.7@HPW^cinsy(2:BJQX]chmsy#,5=DKQW]bglry '/7>EKQW\afls{!*18?EKQV[afmt}~}{{z$,3:@FKPV[agox}zxusqpooo &-4:@FK~Q|Vy\wcujssp~nlihfeddc  '|/z5w;uAsFrLpQnXl_ifgoezca_]\[ZYY""  }xt"q)n0l6j <h Ag Ge Mc T` [^ c\ mZ xX V U S RQQPP (,-*& tmjg$d+b1`7^=]C[IYPWWU`SjQuONLJIIHH H (0453/*z#nea^ \'Z.X4V:T?RFQLOTM]KgJsHFDCBBBAA#/7:<:72v,j%_ ZW T $R *P!1N!6M!<K!CI"JH"QF"[D#eC#pA#~?">!=;;<<<)5<@BA=8s3g-Z'S%P%M%!K&'I&-G&3F&9D'@C'GA'O@(X>(c=(o;(}:'8&7%6#6!6 66/:AEGFC}>p:d4W.M* J*G*E+$C++A+1?+7>+==,D<,M:,V9-a7-m6-{4,3+2)1'1&1$2#2"4>EJLLI{Dn?b:U5H0 D/A/?/"=/(;/.:/480;70B61K51T31_21k01y/0./-.,,,*-(-'-&8BINPQNzJlEaAS;E6>4;49474&64,44235925@15I06R.6]-6j+5x*5)4'2'0'.(-(+)*=GNSUVTyPlK`GRBD=99 694929$19*/90.:7-:>,:G*:Q):\':h&:v%9#8"7!4"3#1#/$.BLSXZ[YxVkR_NRJCE4? 0>.?,?!+?(*?.(?5'?<&?E$?O#?Z"?g ?u>=;97543GQX]`a_w\jY_VRRAL2G)E(E&E%E%#E,"E3!E:ECEMEXDeDsCB@><:98MW^cegfwcj`_]OY?T0O#L LLL"L)K0K8K@KJKVKcJqIHF DB@>=T]dilmlvjjh\dL`<[-X USSSS&S-S5S= RG RS R`QnPOMKHFD C[dkpstsvrgnXkHg9c*`^\ \ \["[)[1[:[DZPZ]YkX|VTROMLKclrwz{zsxbuSrCn5k'ig feeee%d-d6d@cLbYah`x_\ZWVSRltz~m~]{Mx>v0t#rqpp ooo n(n1n;mGlTkcjthfdb^]\u}wgWG9~+}|{zzz zyy"y+y5xAwOv^uosrnljifo_O@2%  $.9GWi}~}ywutwgWG9, $/=Nau}m]M?1$ $1ATirbSC6( #3F\uxhXH:, #5JdҁѠο}m]M=0# %9Qk*5>GOW^djpu{ %09BJRY_ejou{  !*4<DLSY_djou{%.7?FMSY^cint{  )19@GMSX]bhnt}$,3:AGLRW\bgnv &.5;AGLQV\bhox}zxwvut!(/5;AFKQV\c|jzrw}trpnljiii #*06}<{AyFwKuQsWr^oemnkxhfdb`_^^^ ~y$v+s1q6o<mAlGjLhRfYdaaj_t][YWVUTTSw rnk%h,f2d7b=aB_H]N[UY]WfUqR~QOMLKKJJ&)*'#zogc ` ^ '\ -Z 3X 8V >TDRJQROZMdKoI|GED C B BBB&.120,'u!j_ ZWU#S)Q/O4M:L@JGHNFWEaClAz?><;;;;; "-48973~/r)f#ZROMK%I+G1F7D=BDAL?T>_<j:x97655556(3:=?>:{5o0c*W$M HF D "B (@ .?!4=!:BDC@y;m6a1T+H&B$@%=%;%%:%+8%17&86&?5'G3'P2'[1'f/'t.',&+%*#*!+++3<CGIIEwAk<_7R2E-<):)7)5)#3)(2*/1*50+=/+E.,N-,Y+,e*,s(+'*&)%'%%&$'"'!7AGLMNKvFjB^>Q9D48/ 4.2.0. /.&-/-,/3+/;*0C)0L'0W&0c$0q#0"/!- + *!("&"%<ELPRSPuLiH]DQ@C;55.3,3+3)4$(4+'41&49$5A#5J"5U 5b5o4320.,+*@JQUWXVtShO]KPGCB4=)9 '9%9$9""9)!9/ 97:?:H:S:`9n9~86420/.FOVZ]]\tYhV]SPOAI2D$@ ??? ?&?-?4?=?F?Q?^?l>}=; 9 7543LU\`ccbt`h]]ZNV>P0L"HFFFF#F*F2F:FD EO E\ EjDzCA?=; 9 8R[bfijisghdZaK\;X-TQN M M M M'M/M7MAMLLYLgKwIHECA?>ZbimpqpsnekVhFc8_)\YWVVVV$V,U4U>UITVSdRtQOMJHFEbjptwx~wqu`qQnBj3g%ec a` `__ _(_0^:^E]R\a[pZXUSPNMjrx||~l{[xKt=r/p!nlkjjjii#h+h5hAgNf\emcb^\ZXVs{ueTE|7z)ywvuut ttts&s/s;rHqWphn{lkgecb}~m]M>0#  (3A~P|b{uywuqonteTE7) +8GYm~}{j[K<."  ,;Nd|p`PA3& .@UmvfVF8*0F_zșŷ{k[K;.! 3Kg '1;CKSZ`flqw}  ",5>FNU[afkpv}'08@HOU[`ejpv}"*3;BIOUZ_djov~ &-5<CINTY^cipw (/6=CHMRX]cipy~|{ #*17=BGLRW]cjs}|zwusqpoo %,17=BG~L|QzWx]vetmqwoljhfedcb&|,y2w7u<sBqGoLnRlXj`gherc~`^\ZYXXX   }xs!p'm-k2i7g=fBdGbM`T^[[dYnWzUSQPONNN zr mie"b(`-^3\8Z=YCWIUPSXQaOkMwKIGFEEED$''$ uj b ]ZX#V)T.R4P9N?MEK LI TG ^E iC uA @ >==<<<%+//-)|$qf[S P N L$J*H/F5E;CABI@Q>[<f;s9765 5 5 5 5!+25640y,n&b WL HFD!B&@,>2=8<>:F9O7Y5d4q21/..///'17;<;7w2k-`(T"HA?=;#9)8/655<4C2L1V/b.o,+)(()**-6<@A@=u8j3].Q)E#< 864 3 &1 ,0 2/!9.!A-"J+"T*"`("m'"}%!$ ##$%%1:ADFEBs>h9\5P0D+8% 2$0$.$,$#+$)*%0)%7(&?'&H&'R$'^#'l!'| &$"   6?EIKJHrCg?[;O6C26,-)+)))')!&)'%*.$*5#*=!+F +Q+]+j+z*)'%#" ;CINPO~MrIfE[BO=B964(/ %.#.".!.% /,/3/;/D0O0[/i/x.-+)'&%?HNSUU}SqPfLZIODB@4:&64444#4*41494B5M4Y4g4w3 2 0 .,*)DMTXZZ}YqVeSZPOLAG2A$=: :::!:':/:7:@ :K :W :e9t87531/ .JSY]``|_q]eZ[WMS>M/I"EA @ @ @ @% @,@4@>@H@U@b?r><;8643QY`dfg|fqdfaY^IY:T,PMJH HHH"H*H2H;GFGRF`EoECA><:9X`fkmn|mqkdhUdE`6\(XUSR QQQP'P/P8OCOON]MlL~KHFCB?`hnruu|tor_nPj@g2d$a^ ]\ [ZZY#Y+Y4X?XLWZViT{SPNLIHipvz||z{jxYtJq;n-lihffe eddc&c0b;bGaV`f^x\[WUTRry~sc~R{Cx5v'tr qppoo onn!n*m5mBlPkaitgeb`^]{|k[K<.!}|{{{zzz zzz#z.y;xJw[vntqpljirbRC4'  %2ARg~}zwyhYH:,'6I]tn^N>1# ):OhtdTC5'  ,@XsyiYI9, .Gc  $.7?HOV\bgmrx )2:BJPW\bglrx#,5=DJQV\afkqx '/7>EJPUZ`ekqy#*18>DJOTY_dkr{ %,29>DINSX^dkt~}{yxvu '-39>CHMRX^~e{nywvtqomkjih "(.3}8{=zBxGvLtRrYp`nhkri~fdb`^]\\ }y#v)s.p3n8m=kBjGhMfSd[ac_m\xZXVTSRQQ  }wrnk#h)e.c3b8`=^B\HZOXVV_ThQtOMKJIHGG um hc`]$Z)X/V4U9S>QDOJMRK[IeGqECA@??>>!$$"{pf ] XURP%N*L/J4I:G@EGCNAX?b=n;|:877666#),,*&x!mbWN JHF D&B +@ 0? 6= << C: K8 U6 `4 l3 {1 0 ///// */331-u)j#_SHA?<;"9'8-62593@2I0S/^-k+z*('' ( ( )&/58984s/h*\%QE; 8542$1*/0.6->+F*P(\'i%x$"!!"## ,4:=>=}:q5f1Z,O&C!81/-,!*')-(4';&D$N#Z!g v09>BCB|?p;e6Y2N-B)7$, )'%$$# +" 1!!9 !B!L"X"e!t! 5=CFHG{EoAd<X9M4A/6+*& #$!$ $$"$)%/%7&@&J&V&d&s%$" 9AGKMLzJnFcBX?M;A662)-) ))) )'*-*5*>+H+U+b*q * ( ' % # !>FLPRQzPnMcIXFMBA>59'4/ ..//$/+/3/< 0F 0R 0`/o/-,)'&$CKRUXWyVnScPXMMIAE2?$:75 5 5 5" 5)515:5D5P5^4m4~21/,*)IQW[^]y\nZcWYUMP=K/F!B> < <<< <'FLRX]chms{  )19@FLRW\agmt| $,3:@FLQV[`fmt~ &.4:@FKPUZ`fmv~| "(/5:@EINTY_goy|ywtrqpo $*/4:?CH~M|SzYx`uisrp~nkigedcb%|*y/w4u9s>qCpHnMlTj[hcelcx`^\YXWVV |xsp%m*j/i4g9f>dCbH`O^V[^YgVsTRPNMLKK xr mie b%_*]/\4Z9X>VCTJRQPYNcKnI|GEDBBAA{phc^ZW T%R*Q/O4M9K?IEHMEUC_Ak?x=;:9988!!wlaY TPMJ!H&F+E0C5A;?A>I<R:\8h6u4321100!'*)'#si^S J FC@>"=';,91876>4F3O1Z/f-s,+*))))(-00.|*q&f![PE< 97 5 4 #2 (0 ./ 4- ;, C* M( X' d% s$ # " """"%-3664z1o-d(Y#NB81 .-+*%(*'1&8%@#J"V bq   *28;<:y7n3c.W)L$A 6, (&$#""(!. 6>HTao /7<?A?x=l8b4V0K+@'5"+" %,4<FR_n3;ADEDxBl>a9V6K2@-5)*$ # * 2!:!D!P!] !l !}    8?EHJIwGkD`@V=K8@450*,'$$$$!%(%0 &8 &B &N&[&j%{$#!<DJMOOwMkJ`FVCK?@;57'2-* * * * *&+.+7+@+L+Y+h*x)'%#! AIOSUTvSkPaMVJLGAC2=%84 1 0000%1,151>1J0W0f/v/-+(&%GOUY[[vYkWaTWRLN=H/C!?;8 8777"7*737<7H6U6d5t420.,)NV[_aav`l^b\WYHT9O+JFCA@ ??> >(>0>:=E=S`/]"YWTSR QPPO!O*N4N?MML\KmIHECA?fmquwwwvfrVnFj8g*db_^]\[ [ZYY%X0X;WIVYUjS~QOLJHouz}~~o{_xNu@q1o$mj iggffe edd c*c6bDaT`f^{\ZXTSx~xhW~G{8x*wusrqqqqpp ooo#o/n=mNlajvhfdb^o^N>0#}}||||||| |||'|5{FzYyowtrpoueTD6'  +<Pf|kZJ;, 1E\vq`O?1#"5MivfUD5' '=WtΕʽ'08@GNTZ_djov}"+3;BHNTY^ciov~ &.5<BHNSX]bhow!(06<BHMRW\bhpy #*16<AFKPU[ahq{~|zxw%+16;@EJOU[b~j|tyvsqnlkjj  &+0~6}:{?yDwIvNtUq\odmmjyheca_]]] }y!v's+q0o5m:k>jCiIgOdVb^`h]sZXUTRQPP|wrnj"g'e+c0a4`9^>\DZJXQUYSbQnO{LJHGFEE {sl hc`\"Z&W+V0T4R9P?NEMLJTH^FiDvA?>=<;;  vld^ YUQO"M&K+I0G5F:DABH@P>Z;e9r8654332}rh ]TP KHEC"A'?,=1;6:=8D6M4W2b0o/-,++++%''$z!oeZP FB><97#6(4-2319/A-I+T*`(m&}%$$###&+..+x(m$cWMB 9 530.-$+)*/(6'>%G#Q!^ k{$+1342w.k*a%U!K@6- ) ' & $ # &! , 3 ; DP\j {  )16897v4j0`,T'I"?5+" #)19BN[iz    .5:=><u:i6_1S.I)>%4 *  '.7@L Y g w 29?BCAt?h;^7S4I/>+4'*#  % , 5 >JWeu6>CFH~GtDhA^=S:I6?25.+*%    #!+!3"="H"U"c!s!;BHKM~LsJhG^CTAJ=?966(0,'%&&&"&)'1';'F'S'a&q%#"@HMPR}RsPhM^JTHJDAA3;%62 .- ,,, ,',0,9,D,Q,_+p*(&$" FMSVX}XsWiT_RUOLL=F/A!=964 3333%3-372B2O2^1n0/,*'&LTY]^}_s^i[`YVWGQ8L*GC@=< ;::9#9+959@8M8[7l6520.+T[`de}ftejcaaQ\BW4R&NK HFED CBA A(A2@=@J?Y>j=};9753\cgkm}mtlkj[fKb<^.Y VSQONM LKJJ%J/I:HGHVFgEzCB><:dkost}tuteoTlEh6d(a^\ZYXWV UUT S*S6RCQRPdNxLKIEDmsx{|~{nx^uMr>n0k"igeccbba` __^%^1]>\N[`YtWUSQNw|vf}U{Ew6u)sqonmmmllkkjjj*i8hHgZfoda_^[~m]L=.}!|{yyxxxxwwwwww"w0v@uSthromkjtcRB3%  &6J`y}{zziYH9*+?Uoo^M=/!1IctdSB3%"8QpÓ#,5<DJPV[`ekqx '07>DJPUZ_djqy"*18>DIOTY^djr{ %,28>CHMRW]cks~ &-38=BGLQV]dlv}zxvtrq "'-27<AEJP}Vz]xeuos{pnkhfedd#}(z,x1v6u;s@qEpJnPlWj_ghetb_]ZXWVW |wtp#m(k,i1g5f:e?cDaJ_Q\YZcWnT{RPNLKJK~wq lheb#_'],\0Z5X:V?TERLOTM^KiIvGDBA@??vmhc^ZWT#Q'O,N0L5K:I@GGEOBY@d>q<:86655 | qg_Y TPLJG"E'C,B1@6><<C:K8U6`4m2|0/.--- xnd YPK GC@=;#9(7-62483?1H/Q-]+j)y(&&%%%#$$!vkaVLC> :7420$.)-.+5)<(D&N$Z#g!v $)++)t%i!_TI? 62 .+)' &%$+#1!9 ALXet"*/11~/s+h(^#RH=4+ & # "(.6?J V ds'/467}5r1g.\)Q%G =3)      % , 4= H T b r    ,38;;|:q7f3\/Q+F'<#3)     " ) 2;FR`p   18<?@|?q<e8[5Q2G-<)3%)!    (09DP_n 5<ADE{DpBe>[;Q8G4=04-+)% &.7BO]m:AEIJzIpGfD[AQ>H;>754)/*%" """"$",#6#@#M#["k!} ?FKNOzOpMfJ\HREIB@?3:%50 ,) ((((#(+(4(>(K(Y'i&|%"!DLQTUzUpTfQ]OSMJJ=D/?!:631 0/..!.).2.=.I-X-h+z*(&$!KRW[\z\q[gY^WUTGO8J*EA=:87 6555&505:4G4U3f2x0/,*(RY^bczcqbh`__PZAU3P%LH EBA@ ?>==#<-<8@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./012456789:;<=>?@ABCDEFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~񪌫ۊa۶iUֆAaߖg\;~cibvBAj+0}" d[dgܿδӟr<@\12d&(WuD{ܳX7pѣxWH;_¸ܼаaDXhC9sB6 ix qjbT$WЧwF$Gۯ[?)7ܽkZS̾ҳǢhM3ڪ~V3c҆S%FB -bznTcYQ^G HÝdG3 AƲp[M;Aô˪x_GGϟuR3%j;|UbjI4c"8dy5qmUA1!n׼zk\PD3nȻë~eLqѢzY=# Xܓ]0 79/Ps`N(>R0{#O/  {ri_TE4Ӽy]絎oU=% a4uu+Vy: ! I|qnb Y;QpM JQHE?Ȩ|viYIݴz`I3ByI#%+_|kT@.En1`1|=#)wƼxT7!)w=Ia/TtDxoi\ Q0FZ=5.[*%rVh%;Oe~ܱ{tomlls~6Pj[R;&Ft6^KB p(Cb󒡶aF2# REypbUAJg@6.I%|,y M?8Z#7I\q˭uja[UPKJLQ`xW/8#?}'Pv%P}'a) x 0Ga}ŻuYC1"&/u2g_[QF6=]4+*"[ hG5PnFASdv鼟}qg^XRMIGDGRd3 ;n%Kp6aW-8T$5H]tǽy_L=0' &O>}s;gc]T$KIBq8%-V!%2Lv-C\wlhzƥ|tmhc^YVTV\l0@O{>c9c* &?k$=XwK9J[lŽxcUIB<72.*'%&+4Kpf4\ -wRmyb;-Iq /JjH+;MavԪ~|{}E6,$  BwP+{(Mq,R"Bc/LmS ,>Qhu}tmhda_^]^chv) %[J q*N7q@e8 <[h );Pgdx˽aZUQONMMORZez)JPjt*Qt6?gY5Sv(1EZsltPLIGHIJLSYh|<.\`Ak߂) 9VwK/CXp҄xUIJMRY^pV0Jhp>^y򣅦desc Little CMS Little CMSdesc2.x 2.xlcms2-2.12rc1/testbed/.deps/0000755000175000017500000000000013775114656014560 5ustar martimartilcms2-2.12rc1/testbed/zoo_icc.c0000755000175000017500000001667213775114656015357 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "testcms2.h" // ZOO checks ------------------------------------------------------------------------------------------------------------ #ifdef CMS_IS_WINDOWS_ static char ZOOfolder[cmsMAX_PATH] = "c:\\colormaps\\"; static char ZOOwrite[cmsMAX_PATH] = "c:\\colormaps\\write\\"; static char ZOORawWrite[cmsMAX_PATH] = "c:\\colormaps\\rawwrite\\"; // Read all tags on a profile given by its handle static void ReadAllTags(cmsHPROFILE h) { cmsInt32Number i, n; cmsTagSignature sig; n = cmsGetTagCount(h); for (i=0; i < n; i++) { sig = cmsGetTagSignature(h, i); if (cmsReadTag(h, sig) == NULL) return; } } // Read all tags on a profile given by its handle static void ReadAllRAWTags(cmsHPROFILE h) { cmsInt32Number i, n; cmsTagSignature sig; cmsInt32Number len; n = cmsGetTagCount(h); for (i=0; i < n; i++) { sig = cmsGetTagSignature(h, i); len = cmsReadRawTag(h, sig, NULL, 0); } } static void PrintInfo(cmsHPROFILE h, cmsInfoType Info) { wchar_t* text; cmsInt32Number len; cmsContext id = 0; len = cmsGetProfileInfo(h, Info, "en", "US", NULL, 0); if (len == 0) return; text = _cmsMalloc(id, len); cmsGetProfileInfo(h, Info, "en", "US", text, len); wprintf(L"%s\n", text); _cmsFree(id, text); } static void PrintAllInfos(cmsHPROFILE h) { PrintInfo(h, cmsInfoDescription); PrintInfo(h, cmsInfoManufacturer); PrintInfo(h, cmsInfoModel); PrintInfo(h, cmsInfoCopyright); printf("\n\n"); } static void ReadAllLUTS(cmsHPROFILE h) { cmsPipeline* a; cmsCIEXYZ Black; a = _cmsReadInputLUT(h, INTENT_PERCEPTUAL); if (a) cmsPipelineFree(a); a = _cmsReadInputLUT(h, INTENT_RELATIVE_COLORIMETRIC); if (a) cmsPipelineFree(a); a = _cmsReadInputLUT(h, INTENT_SATURATION); if (a) cmsPipelineFree(a); a = _cmsReadInputLUT(h, INTENT_ABSOLUTE_COLORIMETRIC); if (a) cmsPipelineFree(a); a = _cmsReadOutputLUT(h, INTENT_PERCEPTUAL); if (a) cmsPipelineFree(a); a = _cmsReadOutputLUT(h, INTENT_RELATIVE_COLORIMETRIC); if (a) cmsPipelineFree(a); a = _cmsReadOutputLUT(h, INTENT_SATURATION); if (a) cmsPipelineFree(a); a = _cmsReadOutputLUT(h, INTENT_ABSOLUTE_COLORIMETRIC); if (a) cmsPipelineFree(a); a = _cmsReadDevicelinkLUT(h, INTENT_PERCEPTUAL); if (a) cmsPipelineFree(a); a = _cmsReadDevicelinkLUT(h, INTENT_RELATIVE_COLORIMETRIC); if (a) cmsPipelineFree(a); a = _cmsReadDevicelinkLUT(h, INTENT_SATURATION); if (a) cmsPipelineFree(a); a = _cmsReadDevicelinkLUT(h, INTENT_ABSOLUTE_COLORIMETRIC); if (a) cmsPipelineFree(a); cmsDetectDestinationBlackPoint(&Black, h, INTENT_PERCEPTUAL, 0); cmsDetectDestinationBlackPoint(&Black, h, INTENT_RELATIVE_COLORIMETRIC, 0); cmsDetectDestinationBlackPoint(&Black, h, INTENT_SATURATION, 0); cmsDetectDestinationBlackPoint(&Black, h, INTENT_ABSOLUTE_COLORIMETRIC, 0); cmsDetectTAC(h); } // Check one specimen in the ZOO static cmsInt32Number CheckSingleSpecimen(const char* Profile) { char BuffSrc[256]; char BuffDst[256]; cmsHPROFILE h; sprintf(BuffSrc, "%s%s", ZOOfolder, Profile); sprintf(BuffDst, "%s%s", ZOOwrite, Profile); h = cmsOpenProfileFromFile(BuffSrc, "r"); if (h == NULL) return 0; printf("%s\n", Profile); PrintAllInfos(h); ReadAllTags(h); ReadAllLUTS(h); // ReadAllRAWTags(h); cmsSaveProfileToFile(h, BuffDst); cmsCloseProfile(h); h = cmsOpenProfileFromFile(BuffDst, "r"); if (h == NULL) return 0; ReadAllTags(h); cmsCloseProfile(h); return 1; } static cmsInt32Number CheckRAWSpecimen(const char* Profile) { char BuffSrc[256]; char BuffDst[256]; cmsHPROFILE h; sprintf(BuffSrc, "%s%s", ZOOfolder, Profile); sprintf(BuffDst, "%s%s", ZOORawWrite, Profile); h = cmsOpenProfileFromFile(BuffSrc, "r"); if (h == NULL) return 0; ReadAllTags(h); ReadAllRAWTags(h); cmsSaveProfileToFile(h, BuffDst); cmsCloseProfile(h); h = cmsOpenProfileFromFile(BuffDst, "r"); if (h == NULL) return 0; ReadAllTags(h); cmsCloseProfile(h); return 1; } static int input = 0, disp = 0, output = 0, link = 0, abst = 0, color = 0, named = 0; static int rgb = 0, cmyk = 0, gray = 0, other = 0; static int count_stats(const char* Profile) { char BuffSrc[256]; cmsHPROFILE h; cmsCIEXYZ Black; sprintf(BuffSrc, "%s%s", ZOOfolder, Profile); h = cmsOpenProfileFromFile(BuffSrc, "r"); if (h == NULL) return 0; switch (cmsGetDeviceClass(h)) { case cmsSigInputClass : input++; break; case cmsSigDisplayClass : disp++; break; case cmsSigOutputClass : output++; break; case cmsSigLinkClass : link++; break; case cmsSigAbstractClass : abst++; break; case cmsSigColorSpaceClass : color++; break; case cmsSigNamedColorClass : named ++; break; } switch (cmsGetColorSpace(h)) { case cmsSigRgbData: rgb++; break; case cmsSigCmykData: cmyk++; break; case cmsSigGrayData: gray++; break; default: other++; } cmsDetectDestinationBlackPoint(&Black, h, INTENT_PERCEPTUAL, 0); cmsDetectDestinationBlackPoint(&Black, h, INTENT_RELATIVE_COLORIMETRIC, 0); cmsDetectDestinationBlackPoint(&Black, h, INTENT_SATURATION, 0); cmsCloseProfile(h); return 1; } void CheckProfileZOO(void) { struct _finddata_t c_file; intptr_t hFile; cmsSetLogErrorHandler(NULL); if ( (hFile = _findfirst("c:\\colormaps\\*.*", &c_file)) == -1L ) printf("No files in current directory"); else { do { if (strcmp(c_file.name, ".") != 0 && strcmp(c_file.name, "..") != 0) { CheckSingleSpecimen( c_file.name); CheckRAWSpecimen( c_file.name); count_stats(c_file.name); TestMemoryLeaks(FALSE); } } while ( _findnext(hFile, &c_file) == 0 ); _findclose(hFile); } ResetFatalError(); } #endif lcms2-2.12rc1/testbed/testthread.cpp0000644000175000017500000000466613775114656016436 0ustar martimarti #include #include "lcms2_plugin.h" static cmsContext ctx; static cmsHPROFILE prof_cmyk, prof_rgb; static volatile int rc = 0; static void* MyMtxCreate(cmsContext id) { return (void*) CreateMutex( NULL, FALSE, NULL); } static void MyMtxDestroy(cmsContext id, void* mtx) { CloseHandle((HANDLE) mtx); } static cmsBool MyMtxLock(cmsContext id, void* mtx) { WaitForSingleObject((HANDLE) mtx, INFINITE); return TRUE; } static void MyMtxUnlock(cmsContext id, void* mtx) { ReleaseMutex((HANDLE) mtx); } static cmsPluginMutex MutexPluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginMutexSig, NULL}, MyMtxCreate, MyMtxDestroy, MyMtxLock, MyMtxUnlock }; static DWORD WINAPI one_thread(LPVOID lpParameter) { int i, j; cmsUInt8Number rgb[3*1000]; cmsUInt8Number cmyk[4*1000]; Sleep(rand() % 500 ); cmsHTRANSFORM xform = cmsCreateTransformTHR(ctx, prof_rgb, TYPE_RGB_8, prof_cmyk, TYPE_CMYK_8, 0, 0); for (i=0; i < 100000; i++) { for (j=0; j < 1000; j++) { rgb[j * 3 ] = 189; rgb[j * 3 + 1] = 100; rgb[j * 3 + 2] = 75; } cmsDoTransform(xform, rgb, cmyk, 1000); for (j=0; j < 1000; j++) { if (cmyk[j * 4 ] != 37 || cmyk[j * 4 + 1 ] != 188 || cmyk[j * 4 + 2 ] != 195 || cmyk[j * 4 + 3 ] != 7) { OutputDebugString(L"ERROR\n"); rc = 1; } } } cmsDeleteTransform(xform); return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { int i; cmsContext ctx; OutputDebugString(L"Test in progress...\n"); ctx = cmsCreateContext(NULL, 0); prof_cmyk = cmsOpenProfileFromFileTHR(ctx, "USWebCoatedSWOP.icc", "r"); prof_rgb = cmsOpenProfileFromFileTHR(ctx, "AdobeRGB1998.icc","r"); #define NWORKERS 10 HANDLE workers[NWORKERS]; for (int i=0; i #endif #define cmsmin(a, b) (((a) < (b)) ? (a) : (b)) // Used to mark special pointers void DebugMemDontCheckThis(void *Ptr); cmsBool IsGoodVal(const char *title, cmsFloat64Number in, cmsFloat64Number out, cmsFloat64Number max); cmsBool IsGoodFixed15_16(const char *title, cmsFloat64Number in, cmsFloat64Number out); cmsBool IsGoodFixed8_8(const char *title, cmsFloat64Number in, cmsFloat64Number out); cmsBool IsGoodWord(const char *title, cmsUInt16Number in, cmsUInt16Number out); cmsBool IsGoodWordPrec(const char *title, cmsUInt16Number in, cmsUInt16Number out, cmsUInt16Number maxErr); void* PluginMemHandler(void); cmsContext WatchDogContext(void* usr); void ResetFatalError(void); void Die(const char* Reason, ...); void Dot(void); void Fail(const char* frm, ...); void SubTest(const char* frm, ...); void TestMemoryLeaks(cmsBool ok); void Say(const char* str); // Plug-in tests cmsInt32Number CheckSimpleContext(void); cmsInt32Number CheckAllocContext(void); cmsInt32Number CheckAlarmColorsContext(void); cmsInt32Number CheckAdaptationStateContext(void); cmsInt32Number CheckInterp1DPlugin(void); cmsInt32Number CheckInterp3DPlugin(void); cmsInt32Number CheckParametricCurvePlugin(void); cmsInt32Number CheckFormattersPlugin(void); cmsInt32Number CheckTagTypePlugin(void); cmsInt32Number CheckMPEPlugin(void); cmsInt32Number CheckOptimizationPlugin(void); cmsInt32Number CheckIntentPlugin(void); cmsInt32Number CheckTransformPlugin(void); cmsInt32Number CheckMutexPlugin(void); cmsInt32Number CheckMethodPackDoublesFromFloat(void); // Zoo void CheckProfileZOO(void); #endif lcms2-2.12rc1/testbed/testplugin.c0000755000175000017500000012501013775114656016113 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "testcms2.h" // -------------------------------------------------------------------------------------------------- // Auxiliary, duplicate a context and mark the block as non-debug because in this case the allocator // and deallocator have different context owners // -------------------------------------------------------------------------------------------------- static cmsContext DupContext(cmsContext src, void* Data) { cmsContext cpy = cmsDupContext(src, Data); DebugMemDontCheckThis(cpy); return cpy; } // -------------------------------------------------------------------------------------------------- // Simple context functions // -------------------------------------------------------------------------------------------------- // Allocation order cmsInt32Number CheckAllocContext(void) { cmsContext c1, c2, c3, c4; c1 = cmsCreateContext(NULL, NULL); // This creates a context by using the normal malloc DebugMemDontCheckThis(c1); cmsDeleteContext(c1); c2 = cmsCreateContext(PluginMemHandler(), NULL); // This creates a context by using the debug malloc DebugMemDontCheckThis(c2); cmsDeleteContext(c2); c1 = cmsCreateContext(NULL, NULL); DebugMemDontCheckThis(c1); c2 = cmsCreateContext(PluginMemHandler(), NULL); DebugMemDontCheckThis(c2); cmsPluginTHR(c1, PluginMemHandler()); // Now the context have custom allocators c3 = DupContext(c1, NULL); c4 = DupContext(c2, NULL); cmsDeleteContext(c1); // Should be deleted by using nomal malloc cmsDeleteContext(c2); // Should be deleted by using debug malloc cmsDeleteContext(c3); // Should be deleted by using nomal malloc cmsDeleteContext(c4); // Should be deleted by using debug malloc return 1; } // Test the very basic context capabilities cmsInt32Number CheckSimpleContext(void) { int a = 1; int b = 32; cmsInt32Number rc = 0; cmsContext c1, c2, c3; // This function creates a context with a special // memory manager that check allocation c1 = WatchDogContext(&a); cmsDeleteContext(c1); c1 = WatchDogContext(&a); // Let's check duplication c2 = DupContext(c1, NULL); c3 = DupContext(c2, NULL); // User data should have been propagated rc = (*(int*) cmsGetContextUserData(c3)) == 1 ; // Free resources cmsDeleteContext(c1); cmsDeleteContext(c2); cmsDeleteContext(c3); if (!rc) { Fail("Creation of user data failed"); return 0; } // Back to create 3 levels of inherance c1 = cmsCreateContext(NULL, &a); DebugMemDontCheckThis(c1); c2 = DupContext(c1, NULL); c3 = DupContext(c2, &b); rc = (*(int*) cmsGetContextUserData(c3)) == 32 ; cmsDeleteContext(c1); cmsDeleteContext(c2); cmsDeleteContext(c3); if (!rc) { Fail("Modification of user data failed"); return 0; } // All seems ok return rc; } // -------------------------------------------------------------------------------------------------- //Alarm color functions // -------------------------------------------------------------------------------------------------- // This function tests the alarm codes across contexts cmsInt32Number CheckAlarmColorsContext(void) { cmsInt32Number rc = 0; const cmsUInt16Number codes[] = {0x0000, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777, 0x8888, 0x9999, 0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 0xeeee, 0xffff}; cmsUInt16Number out[16]; cmsContext c1, c2, c3; int i; c1 = WatchDogContext(NULL); cmsSetAlarmCodesTHR(c1, codes); c2 = DupContext(c1, NULL); c3 = DupContext(c2, NULL); cmsGetAlarmCodesTHR(c3, out); rc = 1; for (i=0; i < 16; i++) { if (out[i] != codes[i]) { Fail("Bad alarm code %x != %x", out[i], codes[i]); rc = 0; break; } } cmsDeleteContext(c1); cmsDeleteContext(c2); cmsDeleteContext(c3); return rc; } // -------------------------------------------------------------------------------------------------- //Adaptation state functions // -------------------------------------------------------------------------------------------------- // Similar to the previous, but for adaptation state cmsInt32Number CheckAdaptationStateContext(void) { cmsInt32Number rc = 0; cmsContext c1, c2, c3; cmsFloat64Number old1, old2; old1 = cmsSetAdaptationStateTHR(NULL, -1); c1 = WatchDogContext(NULL); cmsSetAdaptationStateTHR(c1, 0.7); c2 = DupContext(c1, NULL); c3 = DupContext(c2, NULL); rc = IsGoodVal("Adaptation state", cmsSetAdaptationStateTHR(c3, -1), 0.7, 0.001); cmsDeleteContext(c1); cmsDeleteContext(c2); cmsDeleteContext(c3); old2 = cmsSetAdaptationStateTHR(NULL, -1); if (old1 != old2) { Fail("Adaptation state has changed"); return 0; } return rc; } // -------------------------------------------------------------------------------------------------- // Interpolation plugin check: A fake 1D and 3D interpolation will be used to test the functionality. // -------------------------------------------------------------------------------------------------- // This fake interpolation takes always the closest lower node in the interpolation table for 1D static void Fake1Dfloat(const cmsFloat32Number Value[], cmsFloat32Number Output[], const cmsInterpParams* p) { cmsFloat32Number val2; int cell; const cmsFloat32Number* LutTable = (const cmsFloat32Number*) p ->Table; // Clip upper values if (Value[0] >= 1.0) { Output[0] = LutTable[p -> Domain[0]]; return; } val2 = p -> Domain[0] * Value[0]; cell = (int) floor(val2); Output[0] = LutTable[cell] ; } // This fake interpolation just uses scrambled negated indexes for output static void Fake3D16(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const struct _cms_interp_struc* p) { Output[0] = 0xFFFF - Input[2]; Output[1] = 0xFFFF - Input[1]; Output[2] = 0xFFFF - Input[0]; } // The factory chooses interpolation routines on depending on certain conditions. cmsInterpFunction my_Interpolators_Factory(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags) { cmsInterpFunction Interpolation; cmsBool IsFloat = (dwFlags & CMS_LERP_FLAGS_FLOAT); // Initialize the return to zero as a non-supported mark memset(&Interpolation, 0, sizeof(Interpolation)); // For 1D to 1D and floating point if (nInputChannels == 1 && nOutputChannels == 1 && IsFloat) { Interpolation.LerpFloat = Fake1Dfloat; } else if (nInputChannels == 3 && nOutputChannels == 3 && !IsFloat) { // For 3D to 3D and 16 bits Interpolation.Lerp16 = Fake3D16; } // Here is the interpolation return Interpolation; } // Interpolation plug-in static cmsPluginInterpolation InterpPluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginInterpolationSig, NULL }, my_Interpolators_Factory }; // This is the check code for 1D interpolation plug-in cmsInt32Number CheckInterp1DPlugin(void) { cmsToneCurve* Sampled1D = NULL; cmsContext ctx = NULL; cmsContext cpy = NULL; const cmsFloat32Number tab[] = { 0.0f, 0.10f, 0.20f, 0.30f, 0.40f, 0.50f, 0.60f, 0.70f, 0.80f, 0.90f, 1.00f }; // A straight line // 1st level context ctx = WatchDogContext(NULL); if (ctx == NULL) { Fail("Cannot create context"); goto Error; } cmsPluginTHR(ctx, &InterpPluginSample); cpy = DupContext(ctx, NULL); if (cpy == NULL) { Fail("Cannot create context (2)"); goto Error; } Sampled1D = cmsBuildTabulatedToneCurveFloat(cpy, 11, tab); if (Sampled1D == NULL) { Fail("Cannot create tone curve (1)"); goto Error; } // Do some interpolations with the plugin if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(Sampled1D, 0.10f), 0.10, 0.01)) goto Error; if (!IsGoodVal("0.13", cmsEvalToneCurveFloat(Sampled1D, 0.13f), 0.10, 0.01)) goto Error; if (!IsGoodVal("0.55", cmsEvalToneCurveFloat(Sampled1D, 0.55f), 0.50, 0.01)) goto Error; if (!IsGoodVal("0.9999", cmsEvalToneCurveFloat(Sampled1D, 0.9999f), 0.90, 0.01)) goto Error; cmsFreeToneCurve(Sampled1D); cmsDeleteContext(ctx); cmsDeleteContext(cpy); // Now in global context Sampled1D = cmsBuildTabulatedToneCurveFloat(NULL, 11, tab); if (Sampled1D == NULL) { Fail("Cannot create tone curve (2)"); goto Error; } // Now without the plug-in if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(Sampled1D, 0.10f), 0.10, 0.001)) goto Error; if (!IsGoodVal("0.13", cmsEvalToneCurveFloat(Sampled1D, 0.13f), 0.13, 0.001)) goto Error; if (!IsGoodVal("0.55", cmsEvalToneCurveFloat(Sampled1D, 0.55f), 0.55, 0.001)) goto Error; if (!IsGoodVal("0.9999", cmsEvalToneCurveFloat(Sampled1D, 0.9999f), 0.9999, 0.001)) goto Error; cmsFreeToneCurve(Sampled1D); return 1; Error: if (ctx != NULL) cmsDeleteContext(ctx); if (cpy != NULL) cmsDeleteContext(ctx); if (Sampled1D != NULL) cmsFreeToneCurve(Sampled1D); return 0; } // Checks the 3D interpolation cmsInt32Number CheckInterp3DPlugin(void) { cmsPipeline* p; cmsStage* clut; cmsContext ctx; cmsUInt16Number In[3], Out[3]; cmsUInt16Number identity[] = { 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 0, 0, 0xffff, 0, 0xffff, 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; ctx = WatchDogContext(NULL); if (ctx == NULL) { Fail("Cannot create context"); return 0; } cmsPluginTHR(ctx, &InterpPluginSample); p = cmsPipelineAlloc(ctx, 3, 3); clut = cmsStageAllocCLut16bit(ctx, 2, 3, 3, identity); cmsPipelineInsertStage(p, cmsAT_BEGIN, clut); // Do some interpolations with the plugin In[0] = 0; In[1] = 0; In[2] = 0; cmsPipelineEval16(In, Out, p); if (!IsGoodWord("0", Out[0], 0xFFFF - 0)) goto Error; if (!IsGoodWord("1", Out[1], 0xFFFF - 0)) goto Error; if (!IsGoodWord("2", Out[2], 0xFFFF - 0)) goto Error; In[0] = 0x1234; In[1] = 0x5678; In[2] = 0x9ABC; cmsPipelineEval16(In, Out, p); if (!IsGoodWord("0", 0xFFFF - 0x9ABC, Out[0])) goto Error; if (!IsGoodWord("1", 0xFFFF - 0x5678, Out[1])) goto Error; if (!IsGoodWord("2", 0xFFFF - 0x1234, Out[2])) goto Error; cmsPipelineFree(p); cmsDeleteContext(ctx); // Now without the plug-in p = cmsPipelineAlloc(NULL, 3, 3); clut = cmsStageAllocCLut16bit(NULL, 2, 3, 3, identity); cmsPipelineInsertStage(p, cmsAT_BEGIN, clut); In[0] = 0; In[1] = 0; In[2] = 0; cmsPipelineEval16(In, Out, p); if (!IsGoodWord("0", 0, Out[0])) goto Error; if (!IsGoodWord("1", 0, Out[1])) goto Error; if (!IsGoodWord("2", 0, Out[2])) goto Error; In[0] = 0x1234; In[1] = 0x5678; In[2] = 0x9ABC; cmsPipelineEval16(In, Out, p); if (!IsGoodWord("0", 0x1234, Out[0])) goto Error; if (!IsGoodWord("1", 0x5678, Out[1])) goto Error; if (!IsGoodWord("2", 0x9ABC, Out[2])) goto Error; cmsPipelineFree(p); return 1; Error: cmsPipelineFree(p); return 0; } // -------------------------------------------------------------------------------------------------- // Parametric curve plugin check: sin(x)/cos(x) function will be used to test the functionality. // -------------------------------------------------------------------------------------------------- #define TYPE_SIN 1000 #define TYPE_COS 1010 #define TYPE_TAN 1020 #define TYPE_709 709 static cmsFloat64Number my_fns(cmsInt32Number Type, const cmsFloat64Number Params[], cmsFloat64Number R) { cmsFloat64Number Val; switch (Type) { case TYPE_SIN: Val = Params[0]* sin(R * M_PI); break; case -TYPE_SIN: Val = asin(R) / (M_PI * Params[0]); break; case TYPE_COS: Val = Params[0]* cos(R * M_PI); break; case -TYPE_COS: Val = acos(R) / (M_PI * Params[0]); break; default: return -1.0; } return Val; } static cmsFloat64Number my_fns2(cmsInt32Number Type, const cmsFloat64Number Params[], cmsFloat64Number R) { cmsFloat64Number Val; switch (Type) { case TYPE_TAN: Val = Params[0]* tan(R * M_PI); break; case -TYPE_TAN: Val = atan(R) / (M_PI * Params[0]); break; default: return -1.0; } return Val; } static double Rec709Math(int Type, const double Params[], double R) { double Fun = 0; switch (Type) { case 709: if (R <= (Params[3]*Params[4])) Fun = R / Params[3]; else Fun = pow(((R - Params[2])/Params[1]), Params[0]); break; case -709: if (R <= Params[4]) Fun = R * Params[3]; else Fun = Params[1] * pow(R, (1/Params[0])) + Params[2]; break; } return Fun; } // Add nonstandard TRC curves -> Rec709 cmsPluginParametricCurves Rec709Plugin = { { cmsPluginMagicNumber, 2060, cmsPluginParametricCurveSig, NULL }, 1, {TYPE_709}, {5}, Rec709Math }; static cmsPluginParametricCurves CurvePluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginParametricCurveSig, NULL }, 2, // nFunctions { TYPE_SIN, TYPE_COS }, // Function Types { 1, 1 }, // ParameterCount my_fns // Evaluator }; static cmsPluginParametricCurves CurvePluginSample2 = { { cmsPluginMagicNumber, 2060, cmsPluginParametricCurveSig, NULL }, 1, // nFunctions { TYPE_TAN}, // Function Types { 1 }, // ParameterCount my_fns2 // Evaluator }; // -------------------------------------------------------------------------------------------------- // In this test, the DupContext function will be checked as well // -------------------------------------------------------------------------------------------------- cmsInt32Number CheckParametricCurvePlugin(void) { cmsContext ctx = NULL; cmsContext cpy = NULL; cmsContext cpy2 = NULL; cmsToneCurve* sinus; cmsToneCurve* cosinus; cmsToneCurve* tangent; cmsToneCurve* reverse_sinus; cmsToneCurve* reverse_cosinus; cmsFloat64Number scale = 1.0; ctx = WatchDogContext(NULL); cmsPluginTHR(ctx, &CurvePluginSample); cpy = DupContext(ctx, NULL); cmsPluginTHR(cpy, &CurvePluginSample2); cpy2 = DupContext(cpy, NULL); cmsPluginTHR(cpy2, &Rec709Plugin); sinus = cmsBuildParametricToneCurve(cpy, TYPE_SIN, &scale); cosinus = cmsBuildParametricToneCurve(cpy, TYPE_COS, &scale); tangent = cmsBuildParametricToneCurve(cpy, TYPE_TAN, &scale); reverse_sinus = cmsReverseToneCurve(sinus); reverse_cosinus = cmsReverseToneCurve(cosinus); if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(sinus, 0.10f), sin(0.10 * M_PI) , 0.001)) goto Error; if (!IsGoodVal("0.60", cmsEvalToneCurveFloat(sinus, 0.60f), sin(0.60* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.90", cmsEvalToneCurveFloat(sinus, 0.90f), sin(0.90* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(cosinus, 0.10f), cos(0.10* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.60", cmsEvalToneCurveFloat(cosinus, 0.60f), cos(0.60* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.90", cmsEvalToneCurveFloat(cosinus, 0.90f), cos(0.90* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(tangent, 0.10f), tan(0.10* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.60", cmsEvalToneCurveFloat(tangent, 0.60f), tan(0.60* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.90", cmsEvalToneCurveFloat(tangent, 0.90f), tan(0.90* M_PI), 0.001)) goto Error; if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(reverse_sinus, 0.10f), asin(0.10)/M_PI, 0.001)) goto Error; if (!IsGoodVal("0.60", cmsEvalToneCurveFloat(reverse_sinus, 0.60f), asin(0.60)/M_PI, 0.001)) goto Error; if (!IsGoodVal("0.90", cmsEvalToneCurveFloat(reverse_sinus, 0.90f), asin(0.90)/M_PI, 0.001)) goto Error; if (!IsGoodVal("0.10", cmsEvalToneCurveFloat(reverse_cosinus, 0.10f), acos(0.10)/M_PI, 0.001)) goto Error; if (!IsGoodVal("0.60", cmsEvalToneCurveFloat(reverse_cosinus, 0.60f), acos(0.60)/M_PI, 0.001)) goto Error; if (!IsGoodVal("0.90", cmsEvalToneCurveFloat(reverse_cosinus, 0.90f), acos(0.90)/M_PI, 0.001)) goto Error; cmsFreeToneCurve(sinus); cmsFreeToneCurve(cosinus); cmsFreeToneCurve(tangent); cmsFreeToneCurve(reverse_sinus); cmsFreeToneCurve(reverse_cosinus); cmsDeleteContext(ctx); cmsDeleteContext(cpy); cmsDeleteContext(cpy2); return 1; Error: cmsFreeToneCurve(sinus); cmsFreeToneCurve(reverse_sinus); cmsFreeToneCurve(cosinus); cmsFreeToneCurve(reverse_cosinus); if (ctx != NULL) cmsDeleteContext(ctx); if (cpy != NULL) cmsDeleteContext(cpy); if (cpy2 != NULL) cmsDeleteContext(cpy2); return 0; } // -------------------------------------------------------------------------------------------------- // formatters plugin check: 5-6-5 RGB format // -------------------------------------------------------------------------------------------------- // We define this special type as 0 bytes not float, and set the upper bit #define TYPE_RGB_565 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0) | (1 << 23)) cmsUInt8Number* my_Unroll565(CMSREGISTER struct _cmstransform_struct* nfo, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt16Number pixel = *(cmsUInt16Number*) accum; // Take whole pixel double r = floor(((double) (pixel & 31) * 65535.0) / 31.0 + 0.5); double g = floor((((pixel >> 5) & 63) * 65535.0) / 63.0 + 0.5); double b = floor((((pixel >> 11) & 31) * 65535.0) / 31.0 + 0.5); wIn[2] = (cmsUInt16Number) r; wIn[1] = (cmsUInt16Number) g; wIn[0] = (cmsUInt16Number) b; return accum + 2; } cmsUInt8Number* my_Pack565(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { CMSREGISTER cmsUInt16Number pixel; int r, g, b; r = (int) floor(( wOut[2] * 31) / 65535.0 + 0.5); g = (int) floor(( wOut[1] * 63) / 65535.0 + 0.5); b = (int) floor(( wOut[0] * 31) / 65535.0 + 0.5); pixel = (r & 31) | (( g & 63) << 5) | ((b & 31) << 11); *(cmsUInt16Number*) output = pixel; return output + 2; } cmsFormatter my_FormatterFactory(cmsUInt32Number Type, cmsFormatterDirection Dir, cmsUInt32Number dwFlags) { cmsFormatter Result = { NULL }; if ((Type == TYPE_RGB_565) && !(dwFlags & CMS_PACK_FLAGS_FLOAT) && (Dir == cmsFormatterInput)) { Result.Fmt16 = my_Unroll565; } return Result; } cmsFormatter my_FormatterFactory2(cmsUInt32Number Type, cmsFormatterDirection Dir, cmsUInt32Number dwFlags) { cmsFormatter Result = { NULL }; if ((Type == TYPE_RGB_565) && !(dwFlags & CMS_PACK_FLAGS_FLOAT) && (Dir == cmsFormatterOutput)) { Result.Fmt16 = my_Pack565; } return Result; } static cmsPluginFormatters FormattersPluginSample = { {cmsPluginMagicNumber, 2060, cmsPluginFormattersSig, NULL}, my_FormatterFactory }; static cmsPluginFormatters FormattersPluginSample2 = { {cmsPluginMagicNumber, 2060, cmsPluginFormattersSig, NULL}, my_FormatterFactory2 }; cmsInt32Number CheckFormattersPlugin(void) { cmsContext ctx = WatchDogContext(NULL); cmsContext cpy; cmsContext cpy2; cmsHTRANSFORM xform; cmsUInt16Number stream[]= { 0xffffU, 0x1234U, 0x0000U, 0x33ddU }; cmsUInt16Number result[4]; int i; cmsPluginTHR(ctx, &FormattersPluginSample); cpy = DupContext(ctx, NULL); cmsPluginTHR(cpy, &FormattersPluginSample2); cpy2 = DupContext(cpy, NULL); xform = cmsCreateTransformTHR(cpy2, NULL, TYPE_RGB_565, NULL, TYPE_RGB_565, INTENT_PERCEPTUAL, cmsFLAGS_NULLTRANSFORM); cmsDoTransform(xform, stream, result, 4); cmsDeleteTransform(xform); cmsDeleteContext(ctx); cmsDeleteContext(cpy); cmsDeleteContext(cpy2); for (i=0; i < 4; i++) if (stream[i] != result[i]) return 0; return 1; } // -------------------------------------------------------------------------------------------------- // TagTypePlugin plugin check // -------------------------------------------------------------------------------------------------- #define SigIntType ((cmsTagTypeSignature) 0x74747448) // 'tttH' #define SigInt ((cmsTagSignature) 0x74747448) // 'tttH' static void *Type_int_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt32Number* Ptr = (cmsUInt32Number*) _cmsMalloc(self ->ContextID, sizeof(cmsUInt32Number)); if (Ptr == NULL) return NULL; if (!_cmsReadUInt32Number(io, Ptr)) return NULL; *nItems = 1; return Ptr; } static cmsBool Type_int_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { return _cmsWriteUInt32Number(io, *(cmsUInt32Number*) Ptr); } static void* Type_int_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsUInt32Number)); } void Type_int_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } static cmsPluginTag HiddenTagPluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginTagSig, NULL}, SigInt, { 1, 1, { SigIntType }, NULL } }; static cmsPluginTagType TagTypePluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginTagTypeSig, (cmsPluginBase*) &HiddenTagPluginSample}, { SigIntType, Type_int_Read, Type_int_Write, Type_int_Dup, Type_int_Free, NULL } }; cmsInt32Number CheckTagTypePlugin(void) { cmsContext ctx = NULL; cmsContext cpy = NULL; cmsContext cpy2 = NULL; cmsHPROFILE h = NULL; cmsUInt32Number myTag = 1234; cmsUInt32Number rc = 0; char* data = NULL; cmsUInt32Number *ptr = NULL; cmsUInt32Number clen = 0; ctx = WatchDogContext(NULL); cmsPluginTHR(ctx, &TagTypePluginSample); cpy = DupContext(ctx, NULL); cpy2 = DupContext(cpy, NULL); cmsDeleteContext(ctx); cmsDeleteContext(cpy); h = cmsCreateProfilePlaceholder(cpy2); if (h == NULL) { Fail("Create placeholder failed"); goto Error; } if (!cmsWriteTag(h, SigInt, &myTag)) { Fail("Plug-in failed"); goto Error; } rc = cmsSaveProfileToMem(h, NULL, &clen); if (!rc) { Fail("Fetch mem size failed"); goto Error; } data = (char*) malloc(clen); if (data == NULL) { Fail("malloc failed ?!?"); goto Error; } rc = cmsSaveProfileToMem(h, data, &clen); if (!rc) { Fail("Save to mem failed"); goto Error; } cmsCloseProfile(h); cmsSetLogErrorHandler(NULL); h = cmsOpenProfileFromMem(data, clen); if (h == NULL) { Fail("Open profile failed"); goto Error; } ptr = (cmsUInt32Number*) cmsReadTag(h, SigInt); if (ptr != NULL) { Fail("read tag/context switching failed"); goto Error; } cmsCloseProfile(h); ResetFatalError(); h = cmsOpenProfileFromMemTHR(cpy2, data, clen); if (h == NULL) { Fail("Open profile from mem failed"); goto Error; } // Get rid of data free(data); data = NULL; ptr = (cmsUInt32Number*) cmsReadTag(h, SigInt); if (ptr == NULL) { Fail("Read tag/conext switching failed (2)"); return 0; } rc = (*ptr == 1234); cmsCloseProfile(h); cmsDeleteContext(cpy2); return rc; Error: if (h != NULL) cmsCloseProfile(h); if (ctx != NULL) cmsDeleteContext(ctx); if (cpy != NULL) cmsDeleteContext(cpy); if (cpy2 != NULL) cmsDeleteContext(cpy2); if (data) free(data); return 0; } // -------------------------------------------------------------------------------------------------- // MPE plugin check: // -------------------------------------------------------------------------------------------------- #define SigNegateType ((cmsStageSignature)0x6E202020) static void EvaluateNegate(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { Out[0] = 1.0f - In[0]; Out[1] = 1.0f - In[1]; Out[2] = 1.0f - In[2]; } static cmsStage* StageAllocNegate(cmsContext ContextID) { return _cmsStageAllocPlaceholder(ContextID, SigNegateType, 3, 3, EvaluateNegate, NULL, NULL, NULL); } static void *Type_negate_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt16Number Chans; if (!_cmsReadUInt16Number(io, &Chans)) return NULL; if (Chans != 3) return NULL; *nItems = 1; return StageAllocNegate(self -> ContextID); } static cmsBool Type_negate_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { if (!_cmsWriteUInt16Number(io, 3)) return FALSE; return TRUE; } static cmsPluginMultiProcessElement MPEPluginSample = { {cmsPluginMagicNumber, 2060, cmsPluginMultiProcessElementSig, NULL}, { (cmsTagTypeSignature) SigNegateType, Type_negate_Read, Type_negate_Write, NULL, NULL, NULL } }; cmsInt32Number CheckMPEPlugin(void) { cmsContext ctx = NULL; cmsContext cpy = NULL; cmsContext cpy2 = NULL; cmsHPROFILE h = NULL; cmsUInt32Number myTag = 1234; cmsUInt32Number rc = 0; char* data = NULL; cmsUInt32Number clen = 0; cmsFloat32Number In[3], Out[3]; cmsPipeline* pipe; ctx = WatchDogContext(NULL); cmsPluginTHR(ctx, &MPEPluginSample); cpy = DupContext(ctx, NULL); cpy2 = DupContext(cpy, NULL); cmsDeleteContext(ctx); cmsDeleteContext(cpy); h = cmsCreateProfilePlaceholder(cpy2); if (h == NULL) { Fail("Create placeholder failed"); goto Error; } pipe = cmsPipelineAlloc(cpy2, 3, 3); cmsPipelineInsertStage(pipe, cmsAT_BEGIN, StageAllocNegate(cpy2)); In[0] = 0.3f; In[1] = 0.2f; In[2] = 0.9f; cmsPipelineEvalFloat(In, Out, pipe); rc = (IsGoodVal("0", Out[0], 1.0-In[0], 0.001) && IsGoodVal("1", Out[1], 1.0-In[1], 0.001) && IsGoodVal("2", Out[2], 1.0-In[2], 0.001)); if (!rc) { Fail("Pipeline failed"); goto Error; } if (!cmsWriteTag(h, cmsSigDToB3Tag, pipe)) { Fail("Plug-in failed"); goto Error; } // This cleans the stage as well cmsPipelineFree(pipe); rc = cmsSaveProfileToMem(h, NULL, &clen); if (!rc) { Fail("Fetch mem size failed"); goto Error; } data = (char*) malloc(clen); if (data == NULL) { Fail("malloc failed ?!?"); goto Error; } rc = cmsSaveProfileToMem(h, data, &clen); if (!rc) { Fail("Save to mem failed"); goto Error; } cmsCloseProfile(h); cmsSetLogErrorHandler(NULL); h = cmsOpenProfileFromMem(data, clen); if (h == NULL) { Fail("Open profile failed"); goto Error; } pipe = (cmsPipeline*) cmsReadTag(h, cmsSigDToB3Tag); if (pipe != NULL) { // Unsupported stage, should fail Fail("read tag/context switching failed"); goto Error; } cmsCloseProfile(h); ResetFatalError(); h = cmsOpenProfileFromMemTHR(cpy2, data, clen); if (h == NULL) { Fail("Open profile from mem failed"); goto Error; } // Get rid of data free(data); data = NULL; pipe = (cmsPipeline*) cmsReadTag(h, cmsSigDToB3Tag); if (pipe == NULL) { Fail("Read tag/conext switching failed (2)"); return 0; } // Evaluate for negation In[0] = 0.3f; In[1] = 0.2f; In[2] = 0.9f; cmsPipelineEvalFloat(In, Out, pipe); rc = (IsGoodVal("0", Out[0], 1.0-In[0], 0.001) && IsGoodVal("1", Out[1], 1.0-In[1], 0.001) && IsGoodVal("2", Out[2], 1.0-In[2], 0.001)); cmsCloseProfile(h); cmsDeleteContext(cpy2); return rc; Error: if (h != NULL) cmsCloseProfile(h); if (ctx != NULL) cmsDeleteContext(ctx); if (cpy != NULL) cmsDeleteContext(cpy); if (cpy2 != NULL) cmsDeleteContext(cpy2); if (data) free(data); return 0; } // -------------------------------------------------------------------------------------------------- // Optimization plugin check: // -------------------------------------------------------------------------------------------------- static void FastEvaluateCurves(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* Data) { Out[0] = In[0]; } static cmsBool MyOptimize(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* mpe; _cmsStageToneCurvesData* Data; // Only curves in this LUT? All are identities? for (mpe = cmsPipelineGetPtrToFirstStage(*Lut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) != cmsSigCurveSetElemType) return FALSE; // Check for identity Data = (_cmsStageToneCurvesData*) cmsStageData(mpe); if (Data ->nCurves != 1) return FALSE; if (cmsEstimateGamma(Data->TheCurves[0], 0.1) > 1.0) return FALSE; } *dwFlags |= cmsFLAGS_NOCACHE; _cmsPipelineSetOptimizationParameters(*Lut, FastEvaluateCurves, NULL, NULL, NULL); return TRUE; } cmsPluginOptimization OptimizationPluginSample = { {cmsPluginMagicNumber, 2060, cmsPluginOptimizationSig, NULL}, MyOptimize }; cmsInt32Number CheckOptimizationPlugin(void) { cmsContext ctx = WatchDogContext(NULL); cmsContext cpy; cmsContext cpy2; cmsHTRANSFORM xform; cmsUInt8Number In[]= { 10, 20, 30, 40 }; cmsUInt8Number Out[4]; cmsToneCurve* Linear[1]; cmsHPROFILE h; int i; cmsPluginTHR(ctx, &OptimizationPluginSample); cpy = DupContext(ctx, NULL); cpy2 = DupContext(cpy, NULL); Linear[0] = cmsBuildGamma(cpy2, 1.0); h = cmsCreateLinearizationDeviceLinkTHR(cpy2, cmsSigGrayData, Linear); cmsFreeToneCurve(Linear[0]); xform = cmsCreateTransformTHR(cpy2, h, TYPE_GRAY_8, h, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); cmsCloseProfile(h); cmsDoTransform(xform, In, Out, 4); cmsDeleteTransform(xform); cmsDeleteContext(ctx); cmsDeleteContext(cpy); cmsDeleteContext(cpy2); for (i=0; i < 4; i++) if (In[i] != Out[i]) return 0; return 1; } // -------------------------------------------------------------------------------------------------- // Check the intent plug-in // -------------------------------------------------------------------------------------------------- /* This example creates a new rendering intent, at intent number 300, that is identical to perceptual intent for all color spaces but gray to gray transforms, in this case it bypasses the data. Note that it has to clear all occurrences of intent 300 in the intents array to avoid infinite recursion. */ #define INTENT_DECEPTIVE 300 static cmsPipeline* MyNewIntent(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { cmsPipeline* Result; cmsUInt32Number ICCIntents[256]; cmsUInt32Number i; for (i=0; i < nProfiles; i++) ICCIntents[i] = (TheIntents[i] == INTENT_DECEPTIVE) ? INTENT_PERCEPTUAL : TheIntents[i]; if (cmsGetColorSpace(hProfiles[0]) != cmsSigGrayData || cmsGetColorSpace(hProfiles[nProfiles-1]) != cmsSigGrayData) return _cmsDefaultICCintents(ContextID, nProfiles, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); Result = cmsPipelineAlloc(ContextID, 1, 1); if (Result == NULL) return NULL; cmsPipelineInsertStage(Result, cmsAT_BEGIN, cmsStageAllocIdentity(ContextID, 1)); return Result; } static cmsPluginRenderingIntent IntentPluginSample = { {cmsPluginMagicNumber, 2060, cmsPluginRenderingIntentSig, NULL}, INTENT_DECEPTIVE, MyNewIntent, "bypass gray to gray rendering intent" }; cmsInt32Number CheckIntentPlugin(void) { cmsContext ctx = WatchDogContext(NULL); cmsContext cpy; cmsContext cpy2; cmsHTRANSFORM xform; cmsHPROFILE h1, h2; cmsToneCurve* Linear1; cmsToneCurve* Linear2; cmsUInt8Number In[]= { 10, 20, 30, 40 }; cmsUInt8Number Out[4]; int i; cmsPluginTHR(ctx, &IntentPluginSample); cpy = DupContext(ctx, NULL); cpy2 = DupContext(cpy, NULL); Linear1 = cmsBuildGamma(cpy2, 3.0); Linear2 = cmsBuildGamma(cpy2, 0.1); h1 = cmsCreateLinearizationDeviceLinkTHR(cpy2, cmsSigGrayData, &Linear1); h2 = cmsCreateLinearizationDeviceLinkTHR(cpy2, cmsSigGrayData, &Linear2); cmsFreeToneCurve(Linear1); cmsFreeToneCurve(Linear2); xform = cmsCreateTransformTHR(cpy2, h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_DECEPTIVE, 0); cmsCloseProfile(h1); cmsCloseProfile(h2); cmsDoTransform(xform, In, Out, 4); cmsDeleteTransform(xform); cmsDeleteContext(ctx); cmsDeleteContext(cpy); cmsDeleteContext(cpy2); for (i=0; i < 4; i++) if (Out[i] != In[i]) return 0; return 1; } // -------------------------------------------------------------------------------------------------- // Check the full transform plug-in // -------------------------------------------------------------------------------------------------- // This is a sample intent that only works for gray8 as output, and always returns '42' static void TrancendentalTransform(struct _cmstransform_struct * CMM, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number Size, cmsUInt32Number Stride) { cmsUInt32Number i; for (i=0; i < Size; i++) { ((cmsUInt8Number*) OutputBuffer)[i] = 0x42; } } cmsBool TransformFactory(_cmsTransformFn* xformPtr, void** UserData, _cmsFreeUserDataFn* FreePrivateDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { if (*OutputFormat == TYPE_GRAY_8) { // *Lut holds the pipeline to be applied *xformPtr = TrancendentalTransform; return TRUE; } return FALSE; } // The Plug-in entry point static cmsPluginTransform FullTransformPluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginTransformSig, NULL}, TransformFactory }; cmsInt32Number CheckTransformPlugin(void) { cmsContext ctx = WatchDogContext(NULL); cmsContext cpy; cmsContext cpy2; cmsHTRANSFORM xform; cmsUInt8Number In[]= { 10, 20, 30, 40 }; cmsUInt8Number Out[4]; cmsToneCurve* Linear; cmsHPROFILE h; int i; cmsPluginTHR(ctx, &FullTransformPluginSample); cpy = DupContext(ctx, NULL); cpy2 = DupContext(cpy, NULL); Linear = cmsBuildGamma(cpy2, 1.0); h = cmsCreateLinearizationDeviceLinkTHR(cpy2, cmsSigGrayData, &Linear); cmsFreeToneCurve(Linear); xform = cmsCreateTransformTHR(cpy2, h, TYPE_GRAY_8, h, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); cmsCloseProfile(h); cmsDoTransform(xform, In, Out, 4); cmsDeleteTransform(xform); cmsDeleteContext(ctx); cmsDeleteContext(cpy); cmsDeleteContext(cpy2); for (i=0; i < 4; i++) if (Out[i] != 0x42) return 0; return 1; } // -------------------------------------------------------------------------------------------------- // Check the mutex plug-in // -------------------------------------------------------------------------------------------------- typedef struct { int nlocks; } MyMtx; static void* MyMtxCreate(cmsContext id) { MyMtx* mtx = (MyMtx*) _cmsMalloc(id, sizeof(MyMtx)); mtx ->nlocks = 0; return mtx; } static void MyMtxDestroy(cmsContext id, void* mtx) { MyMtx* mtx_ = (MyMtx*) mtx; if (mtx_->nlocks != 0) Die("Locks != 0 when setting free a mutex"); _cmsFree(id, mtx); } static cmsBool MyMtxLock(cmsContext id, void* mtx) { MyMtx* mtx_ = (MyMtx*) mtx; mtx_->nlocks++; return TRUE; } static void MyMtxUnlock(cmsContext id, void* mtx) { MyMtx* mtx_ = (MyMtx*) mtx; mtx_->nlocks--; } static cmsPluginMutex MutexPluginSample = { { cmsPluginMagicNumber, 2060, cmsPluginMutexSig, NULL}, MyMtxCreate, MyMtxDestroy, MyMtxLock, MyMtxUnlock }; cmsInt32Number CheckMutexPlugin(void) { cmsContext ctx = WatchDogContext(NULL); cmsContext cpy; cmsContext cpy2; cmsHTRANSFORM xform; cmsUInt8Number In[]= { 10, 20, 30, 40 }; cmsUInt8Number Out[4]; cmsToneCurve* Linear; cmsHPROFILE h; int i; cmsPluginTHR(ctx, &MutexPluginSample); cpy = DupContext(ctx, NULL); cpy2 = DupContext(cpy, NULL); Linear = cmsBuildGamma(cpy2, 1.0); h = cmsCreateLinearizationDeviceLinkTHR(cpy2, cmsSigGrayData, &Linear); cmsFreeToneCurve(Linear); xform = cmsCreateTransformTHR(cpy2, h, TYPE_GRAY_8, h, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); cmsCloseProfile(h); cmsDoTransform(xform, In, Out, 4); cmsDeleteTransform(xform); cmsDeleteContext(ctx); cmsDeleteContext(cpy); cmsDeleteContext(cpy2); for (i=0; i < 4; i++) if (Out[i] != In[i]) return 0; return 1; } cmsInt32Number CheckMethodPackDoublesFromFloat(void) { cmsContext ctx = WatchDogContext(NULL); cmsHTRANSFORM xform; cmsHTRANSFORM l_pFakeProfileLAB; cmsFloat64Number l_D_OutputColorArrayBlack[8]; cmsFloat64Number l_D_OutputColorArrayBlue[8]; cmsCIELab LabInBlack; cmsCIELab LabInBlue; cmsUInt16Number Lab_UI16_Black[3]; cmsUInt16Number Lab_UI16_Blue[3]; cmsHPROFILE OutputCMYKProfile; cmsUInt32Number l_UI32_OutputFormat; cmsPluginTHR(ctx, &FullTransformPluginSample); l_pFakeProfileLAB = cmsCreateLab2ProfileTHR(ctx, NULL); if (l_pFakeProfileLAB == NULL) return 0; OutputCMYKProfile = cmsOpenProfileFromFileTHR(ctx, "TestCLT.icc", "r"); if (OutputCMYKProfile == NULL) return 0; l_UI32_OutputFormat = 0; l_UI32_OutputFormat |= COLORSPACE_SH(PT_CMYK); l_UI32_OutputFormat |= PLANAR_SH(1); l_UI32_OutputFormat |= CHANNELS_SH(4); l_UI32_OutputFormat |= BYTES_SH(0); l_UI32_OutputFormat |= FLOAT_SH(1); xform = cmsCreateTransformTHR(ctx, l_pFakeProfileLAB, TYPE_Lab_DBL, OutputCMYKProfile, l_UI32_OutputFormat, INTENT_PERCEPTUAL, 0); cmsCloseProfile(OutputCMYKProfile); cmsCloseProfile(l_pFakeProfileLAB); Lab_UI16_Black[0] = 0; Lab_UI16_Black[1] = 32768; Lab_UI16_Black[2] = 32768; Lab_UI16_Blue[0] = 0; Lab_UI16_Blue[1] = 8192; Lab_UI16_Blue[2] = 8192; cmsLabEncoded2Float(&LabInBlack, Lab_UI16_Black); cmsLabEncoded2Float(&LabInBlue, Lab_UI16_Blue); memset(l_D_OutputColorArrayBlack, 0, sizeof(l_D_OutputColorArrayBlack)); memset(l_D_OutputColorArrayBlue, 0, sizeof(l_D_OutputColorArrayBlue)); cmsDoTransform(xform, &LabInBlack, l_D_OutputColorArrayBlack, 1); cmsDoTransform(xform, &LabInBlue, l_D_OutputColorArrayBlue, 1); cmsDeleteTransform(xform); cmsDeleteContext(ctx); return 1; } lcms2-2.12rc1/testbed/test4.icc0000755000175000017500000016713413775114656015311 0ustar martimarti\lcms spacRGB Lab %acspMSFT-lcms4V*Lm,W!֌] desclA2B0ttA2B1uB2A0w8t4B2A1lrig0h wtpttcprtPchad,dmnd2dmdd8$mluc enUSPTest profile, not suitable for real usemAB  PsparaparaparaparaparaparawyBRn aJe zT]oVvPO8RHBɢ=D: 6N#2&?.(*,P%/а xX0z|g~s#8jeWa*YLQJaD]"&>& :(B7P*A3-0N0z,@3|(S6F$o~rQ8uxAyoX[~Df(]. QT"Mi%F(ה@+<|.81-4441m7<-:*`<9&gui!k~ 5pt!tk"$fya'LY)P,GI.錶C1ʐ>4:-6B5:!2b=/@5+C`(q)_R*(`'\aV(e0{v(i4p+ng~.s^,0z-Uc3>MZ5̈́F7@Q9m;<7D@n4Ce0wFT-IH)6QVk51W3X1Z탑0^*x2rcm57hd8Gn[ :TtR)v~DsA? D:JGp46YI2PLu.O+AN.AO?O=rP9R`:Wv/<]j?-c4`Ai^WCoO$F6u_H2IzBK!=;Nd8P׈v4jS&0MU3,sMFLF]2LFȞIGMEGEK0DPNstFVgH]\KYdST MjLPKpES+v?V{;^Xrw6Z82\ׇ.V[>\??ǮY?TV>Re=vP?]NCB}O"HpPRQcS*XYU_JQ7XSeJKZl"C]r9>R`OwE9bd{5dOP0oi)9Rh9/g8̮He 7B(an5]568[t6Z$:|{ZBn\L~`^*SWKaZO`baHNegBJhsm YgEPʕKI',E|<,J,QT!+*)b(իk'&9:&Ϙ&.v'v*{-w/]o 6c>SXݝODhP$S)Ȼ*>)(?Zi' i%ϭ?$.#ѭ "]" "#bh%$4*>x0/OnQ+6b̥5={Wk1 {S wrɑRjIΔa Z?xRl)'KTE @P"1B/6>512G4੏.7˫ *:^'uYw xᅤ{6|  s_"SNj$`&KRX(Pf+0J."hC10>A4 :c6693Y;Ƥ/>H,AA)I%mo&p'r[(ux*-yjo,H~Tf .2\/ׇTr2]8M65;yG7h@:<8=38F?4B61E/-G *m/f:1g1tiވ2@l3sp uY4et k6xbr8X~XY:43Q2yD!:dFw6zHf2Kq/N'+<^` =_>t`Ӑ=Mb.SR^RqT̃AR2XwSH^lScbUPiYWsooQY(tJ[zC]U >6_! 9`5"b$0`FaGdaGawH`HJ_~KB_EO;]USt]GYoi^_^`dVajROcpRHehucAgIz@eM;nksFpp@qu:szV5z{ sB$}ErHos{OgcsUZ5tZR"va/Kx8fEyl^>{q8ۆ+9!¤v98ps8涾\8u F7ݪ7#[677r9,~=g{'}cC4mF}Jh`~zPW~VWO܀]"IÂxcCyh<6T7O6*p5޴5 4U3'3FA3z l5߅9x@jj҇G!^NVKOSNYH\_AR5Ū5l4ט4 3S3E2z1ez1 1,4W'a8pu_{>h瑢En]}LUE{QMWRF֠s3c3)3=13312ӳ2q=1tv16 0›01Oi4Bj8s>|g/D\JT@P L1Ǩ2)1L1rϨq0\F0o0/b6..2/013|7aq2$=eģxC[pDIRد/ȵ<0vj0e65/Ĺ˰.ֵ-ױ9-nX,dk#+_+ZQ+m,D/N12zc6o<dBZ5dw:e"w2n Uf$]mUN I!#BC %><(W:R+Ѯ6.C31̱/r4+X7G'-Ɍ?{?*rrC '$il!`#{X%/Pe)NI+ܣC.E>0Ƨ;3~C76\4,9S0<9W_65a'0X8TZV-U\.WmR\Xȗ\-Z9[]4[`ze[dp\MiOf]m^^s1U`nxN"b'}'Gxc܁@eh<gO7ch2dM0g[NJhP~iQGhRkgTBfVσMf8Zwfe_lfdpcgi/[fB>󼨋?bJ@e@Њ@2@kCA# PCE}=K!pQ[dV[҇*[TPbaMNftF‹k?E;S7<5<5B<>˔<6< ;Ρ_<&<2?(yBz;GnuMaPSyYʑGXRd]KcDtr9˜:69)9!B9ű#9U9J89ߙ9f:X V Q![IL7v77Ӥ77÷7&7Z7#JC6x67X=8H+;Q?;t衧DtiJ^O&VSO"56365͹P5y5 w4磌45H4}4֘]53 6ڇ9%~%=KsBhG]qLTƳ"3h+G4Ă4_=43&q3!2άȲ2[2X2fns2U3Y5O]7p{;q@fıAE\HDy%X{ߛ sQZja< wY"RZ$vL"'AF)5?,</$a8u2}45Z=183I-; a*jpI I"5S~#ٓvw%Zn& d(h\'+S-MlL/ĦxF21@x4㪾<7ìF9^:6=ʮ2@/pC,%ׅU(r9*у,bz-{q/!h1Ob_3.W5KOs8_H:rmB[<ɤ=?Y:sB^7D3G30aIK-.k~ 0~3Ј6q7cw8m:Jd<[=S?ZLhB#ED,?G<Ik8K5ND1Ph."8ur;Wv=wn?xA{}"B~ysCӂwjDE,Ta8FXH`PJfJ>L|SCNy>vPQ:S?6Uo3 W/lD)mJ;FmHnJpKr2LuiyMxpJN|gJP_^QeV?SNTH:VAXՔ=Z͗9\Ӛ[5^1OdRe=TfěUgVjWxlcXovXswmrYwdZ{\\mS]L_;Fnm19nI4h4T3kUZlVݧnoWnY}m[,m]mkavzqme3pkn0iXgoFm^_-p~rOWaqvOs{lItB_uɃQntVcu҂[8k_aلVd=Z-bhRΆmKrE7wo>0C{ҎD`E(EtF):F!GaH qJOd L~9Qs\\\U˙a5Nj)fFP[=]>U>z>nG>:>\>ɥIX>۟ ?PA?Џ1CnYG0ySKn7GPaUZZSѣ^K;Rɳ;%< {<}_<z<R< q<GF@DwYIl)NX`iSXݪX0P9<ʦj9Ė9S9غ9Q9o99{9ݮt:1:< =^B\uFjmOL_wPVQ6G7vH8'7J79h7xO7P7HI7>d7d07Ŗ 8E9v<}n?s=YDzhI]Ě?c9+E w"o#?f$e?^5&RcV(XN+H-/B04> 1wf:u4)68!3;0>߸,#r0[&(*I)Θ}{'+r,Oi-_/X 1f9O3I6PHC]9>< S;? r7A4D<~15F-+%<.0/,2~3&v51m^6d*8\>[a:WRåEA ?CM.3l6W9(;m郦=pz>GSqw?ސhmAl_CWDOmG;XHI9BK> N:PHC7R3T۪//<}S,Wu\LkX`_byd[5hTBlLrDDy˳7E FhFݜ}GGH{Id֜XJuߜHL[O3}Ss SXhОJ\_C`XdQj/HoAjBBݤCPbCDߤDWD EhF{zI(L?{0]OpUAf1Y]]V bM4}>~?}IJ?ؾg?\@,>S@d!@AޫA9B_C E?sIjx M>naRscV[\P10"S>iGB>h9?~H@:BFvߴJlwOaaTXb:#Ź/:2;;ýu;k;;»;ũ,m;䣗I< <<*<@p~ Cu`H=jMU_6" $&mۄ'|({at)\l*>c#+Z,Rs.rL0-$F*3@r4<9D8<)5r?2 BX_.*$',ܚE.E 0N1MwY2:,n3te4ڨ\6WgT?8IL:F-JȮG:MTx7iO4Qޱ08[Hi;n>@ֆBu~-D6uEmFטd HO[_JS L)L3NJFPf?RW IY/C][T>o\Y:^ۦ!7`3I}kM}HP}S~hyUXY;weZY nt[Ge\ߍ]`^-U`1N?aژ9Gc4AceFn:M?oǙ;Jq6`krdl6|gZlNim˜ko#^lpދmr݃5nuzQoxqap|hrVz`sjGXtQ#uJeww_Dx>Gz_8mbpcsOdΪuevg wh1xjVyfmzplw?zsno{wfC}z^@~e~@V́OpH܉B,a:<yKZi|:[ظ#]3^q{_$`ИRb~"eSg}Äk(tCnkr6cu\?yyT}RMOF1?RJTV2WBX^%Yv[ b\_Pbzefqqih䑩mjaq!Y”[tRr=yK<}CMē Na]OyLMqӡNN<硚OP:PLR7U~YOuy<]^kRa$cRre[ͧ"hT\mL EͨFŌ{GEHШHI2IȦ(GJozwKrLeNJQ|U%rYik ]`ƮqaXްf9PiC CDF[D寋DwTEjkEFrrG& HZI?豞K7}MzQ1pVgZ^>_JT@q @Z}AT|tAŽB BV&B%>C_CD'GDޓ[FC_)HEPKJxKNnz3SdXZ=X}>+>Đ_?\h?|[n?G?ǰ1%@h\@>o@AAECA%E6n-GwKlPa*ew,|-.t/^yg/ٰ=q'0h0dr_10W2+O4 KI7C8ɽ[>=(:@V]7PC3EǾ0R1.L3:$5j7"w8<,|:9t93k;:ӭa; Y<ƱPS>J9ADC4?FE;H8TK\~4M1U75΢:o=h ?߇@ ASvBznuCdD\$FESH!LjJ]F"Lv?NSYbl:[7K]Ͱ3AEfIHL/OEQَS~l, :m6qX?}\}P_}b}ϙey~{PaØ~bƁd*qe4^f'NDg!Xhk/mapwfsnڌpvfz _,:}WɁPLI,BYȻ[S\%0]˯w^ܧ_|ac ɓe~h0}/kwtInl,ordluZ\ܚ9xU||N#FS̑T~lUH:WX*Y>5ZpB[䕩]jk`?cJzɟpfqwj i~mMa䣬pZrDtUV"ZXu^^5lacҴ{e[鶏iSXG*GɃFH鲉I!߳{I sJNMJqKLM˶_M=NM*PJR|cVsZiɻ6^{`CbWDPDEZF@,FG2GHPTHI9d IhdK2M6ɿOzZ RpEWg\[]@YASBkƐ BC(zïCS6ZCCЬ/|DYŗD0E9m Q?܁@FBx@ϰpAQgA´^BZVCe NDE HGGAJ!=L!:kO*6Qq$3@>ѦcA8 D}F* G}ŃHt{dI(]sGIjsJڭaU0;WT8Y4cD}m9HgK-җN&YnO[P~JQvhz:j6S7ϲ WD3[e^gauᏃbӎdq~ e9ufRmgdhܚA\juCTl MmaGo7ZAp̦@='r.8t\ `dYݥgjAl0m͇nzp brtqIjrx|asYuR$vKx2Ez`šbc:4fih}ktnlTr eu6]ZexU|MsQ$TBEUV᧚XY#wZ%[Q{z\Ƭ5^o`ÃoczSgqjziCmbHNqZjtQN%;mO&OêoQůRK#%SznT{~Uy|dV$X Y1\/F"_twʷ)bnfdg?i_&OmVnwK6̲L)LňXMrkN'N޹jOv"PhݺQZ*nRSXUXB~[u_ lQbcg?ZGӺH_I'JsRKKKL4MMXNO1&QĻT|Ws..[i__nDtE 6FFwXFF`GPɌGH:ʫH͡(IˊJx K׌#zMԃPzT+pXfC;;=+=Z>">6v>A{J>5s)> j>b=FZ=dP?ýJAsDTD9$?=G#G;Ic8 Lc48ACdEKF4FG!}\GduVGmHdHz\+HSJSLLV FRNG@@QP|o}QEfQɵ^bRdVSNUyQHWBZY>[2Y:r]6IK ^NKQɡkTߓVg."WxXL*z~X評r~Y«iZa [X\RP^dJ`Da]?VcI;e+7QDU|YT\%S^C_M`}aVub{mcddا\f Tg^Mi nGjAlr=nL?8Y8 E]9`ѓZ3d%NghȔijykךqlם'i>mΟ9`&odXp¤jQr>tKs¨1ETuF?w:aĺe=timOdorȏMs/~tG[~uw^uvmwex™t][z4QU{Nm}EH~ˢC rC.{/}K}u9m+eiSc]ډnV1~PN۝Gҍ j2͒tjĤSkSl'lmuwno̓Tq*]s7vzWxre{jA~ob郎[VބŞ:OLa֛6b*bcdf _g ЦJht2iߐlnGq wso3vgy`PT}+XPm"Ynպ%['\']\]+^Z{_ۥaUbSdInfLi}yl/to.lyr^gJfk[ƼL5ֶLMMrN]ônNԽxOZŃO!fP8QhRvȖSa-TɤW BYi~v\u`Gl"ΕdbĔH׃IȇJ.ˇ'JoVJ=̴J߻͎KL]Kð(LlM&oN O>LYPōRӅҞU_|ӧXsEՀ\hC]ID۹ءEr:E֐ElNEE[wE6pD h*EƇ`^D^WDsO#DHH)CNJ>mMpDz:Odz6HBKL}MMOMѷrmN-NXyN`qNiOaOmYO6QQRiRj:Xɶ\:G_]bG(d衮fXYgFƁhyh0r iaMijCPaVk8+Yal QlmKinEpH[?r0;;` cӚ\g$jX;lњ9nڛOop}qur]ms?e"tF]#u|'UvNx+tHyC%{]r=HgkēM5o¬\rbu/wGy;z(J{'Dy{aq|Üi}f}`~ơYj+nR0cL6+F@)pgtދx$|z)ׁkČvj~vwn/Zf^&ڛMVϋ-OAIώ CRz{v~ǃ@ zuVԊU]݋>Ru6x{26rWj󒑐Kb[qiTDpMٛF{|9#|me{Ϻ{kR{ԩԔ|BO}&g~ ftxW2pDhs``Y QϢ3Js1zs[#sws|sʮcgts)uF8vxۢ1wʍyl{E}}u|:m^e^3$AVnNܛiԵjzk ä8kqel,lݪmnǚp άqɭEsĂٮBv1zoxr{j޲~bc1[l9SCa0؜bЫcgcԿ&daze}fgy7hgxjZ7lkF ne,`q?wsovh$y`Z}gWخ[pز,\І}]9]{Z^#^ֳ_iV`Mac{!xe] gR i}lu@Yomrdfvm[뷂VºsW"WXsELYY$ZN[/\ű]HcU^`gǒbsȝedzhvr?˺kip_1QŸQRƩSS\SɃT[ʑToˈU`V`6WX.mZN\Cϱ^S3aux idoCheSɡLMԶͯN$NDЬNOO4ӳP=9ԄQ?ReRyTRE UתW^Y:ٍ]]uuK`kLK߾2LѿMY˞lMzL?LRLƨ|LgtL;&mLL*qeKˀ^FK VlJeNJ,HYMy=BNQ>=SdO9PܸR{S1oTT,U-UQ0~U5vMU.znUkg-UH_UƞXDVDPWoJ|XƉDXZ!r>\<Ɲ:UNW㳺Yx[P\p:]]$]jx2]spC]ῠh^M4a{^Y_aQ`pKaEb@ d;ZKd]R_a[Mc2dְe ezf"Zrf`k8gOcg\h5bT%iMSj'Gk#Al<`p@$cfQQ*h)lkl֎emnmZ}nuonofCp^qGWr Os@Its~D v!>fס龯j.)m`pM7rEt?vw#LawUyxqxiyLaz@VZe{6R|w L}ڲ G _@m>ˆq3uřSxȘ6{}؞}c~ :v }a~9uLm.eQ1]섍=VхOŇI0CvƯz풑;~wqWz뚈˒7)=ၪ˗yŋcr$jaŽ2ZmTqSM?FMN뇺u8 ސOH+Œ%su0~= vUדnf^VWњPIRϘő=/9zصgCi-ќI)ṫ*r‰;{m֋swk*cG\@JUMF|K{v{w´{0F{&{़|}&~-SVtbGfxepxha+AYQrs7sZ̨sq{ssѭCtxzuQEvtx ny{Y}}u/möÃHUTlAV*]S_a$brcRc(dL|zd`W|Ld@:tdMmkdZfd_eX2e[Pf?rJg'DhQŕ>b +dó"f޳é^hٳj\٘8k֏l6\l~lCwlo}lwh]m2amZnR2nKoEpU?fjA}l+ogzq| sAǒVt5+tܱu yu6rmuku湷cvL\vTw)Nx;HDzZAmvÌp짷DtBƯv٦y1Z{O|Xx}YJ}꫰}S~u~"n~f_hX/PށﶒJabDst#xʼ{~ß8P׃ q1Ѣ0ŀydNqꇱj&bt魐[7ܮTHMqG6}Ḿ6Єʘ3,Q8덺ۚFU%(}-y un f'Ts^hWP͖J-ԓ_DŁ](_LѢfՑfҘד≴yry0jWb=p[BT]M-?%ҊL퉦ԉIΉH~󖟢Sk⍁o~9~sYSvpogd_`XuʜP=Z^ ž?CWnPi‚ݣӃjBPϋJ*qʼn2{sɍkdx;SXy>{e}n}u`mZMf]]{l.ျ]l]إlpy$laȀ;lLêllޱImnVǧo}=Rp̒trt:vz,y r͐{jPbaeMģe]4e[ҰefVʣene'f/#fή?gЦhɟsj4k4m\,o 0\qwtodxif˼^2w^z^^ԛѸ^5^<ԇ^s}_yc_+ab5z؏c{./dfڀhvj}qEmt>qFkEWQ WܻWXXʐYO!zZq[RK[|@WZZYEY}Yҍv;Y$nYhjY>ԱaXkZXԼT"XAMXZdGK[@`aÀbĮKb,)c'mcMȜcVZcI1 c̨wbp bNib\c3zƗ蝕Õ,jdc}UkvnΠt%fD_@XlP畇ܙǑX[$#`5UƧE%PCz&nSrƪ?k1cd[᭏RT@`գŊ:ɩp 3׮3Ka\ݰ^xNm5ۍeJ)~(3v.oa:g˶'`!WdBgb?ҵqUgEϸk֣WR3„R,߇n{)sQl/dg#\J}#||IIl{ʾ{+R~{" {({Ã|.}\5~2żՃ"x݅tqU9i@>`jttܻ?tvnŇt5;Ǒs)sݼRs4KtXiu̽u6w0#xL}yᅉ`{}}е}uOmӥe'MmCmކJm^l"!ltѹl̿ҚmTtmNCnL nհo!>q;rΊרtYvzzyar"|bieӒe߹՚eטee%eÖf#hf>܄gF *hFi?cdjkXߟm=To"SrYww[uRn]VG]R]Fm]}Խ]u0^oNjQ_4_ҹ`{abc{eDHfE1hBj}znt(bc_B/b} biVbj#@b7asaՅYazatּsa.\l`f_`P_uاY_R`)עLa`FDgHki)_j6ҭ|j:cjˣ*kɔlk jcjС{jѩtiҠn icӏgigahz[hBShMFiEG!lz3nI_pÃypo.qlrcrOrǗrUr^}orevQqmoEqiqAlcp\gpХUpaMqHqAs}̺ uRw55xiyDVzzFчrzo$;zLx?zWq?yjyydy7˩^y.AVy4Oy-IZvιy{丗X}¸N u 2D&zb 7sulÁ]fR`XQwňJD}"q‚ͷbΦ3$8Z#9ty}Unv?8o=hqݿaӊiZpShELj.[Cn$6Q,v9[А]}ۀcyCϴr:۶k=5d`]|4VZwOL&XAڥE"> Ǧ]L̩GW|SuhnKg(N`/@jYnnR$ci:Nr\ܟG?%k$y3 g'6ylWrTF j𥽪c\iɭUFr>ǣۗVK˪K>җɝ(cљt#&}h3v,P o:g^B_ZjX0z ё԰*AÞP5ȲF>)qcjXM͉zBҷzOHrktc%[e⊴?F@w V,7ۿ1[q5/(qh,~!wo)hg;`橽!LiªBPĻ]lxǧT9w%%^؛ɞ2ʋK{BtJj)ldb}iƏ}|gY|$Q{ǩ{Ud*{Gk{Jzѕ{㧮 |wb}ү~kD.[$xm~qˈ}h*uu?ttզtw t@00t8jtRٸtYulvP`wxPxܹyꅫ{}h~ u&mDkmmmܳm\ջfm3i߀mmG3mimnw:/o8p]@Nq s%tmwz2yrfce;eeH?eњf ʚfkÉQfμgF|ghԧQiƟ jXl3npo#~rw jskкk|vj Sj_jtl^jdi:imٓhQxh]qg]kBf&efF^eXUfۡQf9K)oUq#˾rL̘nrҩs(@yNYn󘏳mU}'*v?o]PhZb[),S_$n#8½H޺g-٩)?n󘡡яޯD 䲢y:rf#kdġܸ^Vٳ]ȥT%@mߩC=MǜQ̌*2:ͪ|umn\g`Yܠ`݂cӂiI°< vg(q v{ZqޠA=գ0ޥyϦr(kg"d`\yz& x=җ:.#+.ݽ9?׽,+#<}vio>&Wg_F.둝ܖ(˃ݐp01?=%ϐl-*ڡ_xƔƔJz@sSk5dHɊ劕7-˪LJA5+u(W{pojOϋ]Fōoߐwцp DhDhw}9ӛ8a t˃x!92n![݆)PP{@t-l=~&c}{}bߖz|\|Pܻ|Ƹ{޼{u{֯|djV|}ؘ'1~ ကF|x呆p۶vvKuuuZ u(Wt³t1uާonimncmD߇]lCWہXRt.Q}iŲ\v%\3/B w^)ז-f2Ӎ~}ԙxiՓq#~k~Re}`}^װYs|FR>sȶ.O$ŸIQ>|CYʀ_˹hۉfvys]"m(gB a^Zԅ/ӐS[nҋ'=$T0.šJ8%ː V4@Z?V|;u-̢nhЍcb\TϻU+뽒pνyD\˶~5c^i€3ä~,xSƥqikLdӖ!y^}=Wc&Ù`"u1!@nJ&q<!-W;;¿zC4s m%CfמĄ`PY֊ |-Ѳ( ĩ?\w;>>0G}ڬѡ%ۮc\谩ᲒyqslT·,ee^ĦߨS֯yƊץvrJuȦO󦧜ʺwl¨axڄ-U}:!vPomҰKhAa%{q۪zG ݞÖhGܞ̩[!̠%âZÈmXՁG2kz( s&EkҪ)dXĈNǘYzژ3ϨuGٿD՗߶DuEf ="ѕq׍gœ1̃~!TJvóh̟λu۵^ӖA!hh*Ֆ̑bR,}Q{:ߕ‚5p{ֈ4s=3l>/dFRwم@c:ݚQxtPݦގQ)参߻}wlnoEɅ3f)Ғl%h샱u噃ti؅N=ؓȆ͋fm{ s,M?~~qހ} ,}L}VZ}%i*}$}--W}|}!~h9}]pԃw^wuwN}wKlvdvvGvgv=¹vDwnvd&vȬwr!2x,{xiykz^!{|Q{זł|J}Z\}ٲ3}?w|sIU{޲hzy<-x(w{ wtzvL2n2uhdubtE\vs LyXҹ3JDqId,|+us‹neKâgNaҴO۵ {سֳؾi`ϴGɴ4Aܺ+zor~ݺ}w: qUjOоcgپcԭ°SÜÉL;Uǡf.l \.泘zasdm)fǒAޮʂTWTo̫}ȧ&̹/a& ˗ݕf͍Wʊ V~%ɡw#(Xp.Shiyѝ_YңA}}0ӳ;Ÿá]6nӠ٢!ԓQNwڂ18Vzs,l\ % %dG4lܮ!G4"dK݋`如5Z_MMGܖ~ܞ4w}ܾ pn`-YUJo䡒[c叓嶓Vԓ+݊D''ߘ{篚s=m]'ctg~i鉌_VꄌJPT f샌:MczF؏^mrZ-v{P2짇!ƆɆO$Ѯ)(+ƲT!nl{#JQz򞀭􎀽y'ݙR$3p$!~~}tgР7GcurvcurvcurvmAB  PHyS6{j,paraffc G 33paraffc G 33paraffc G 33mBA  Psparaparaparaparaparapara?ĪtZ k"z%e۔$8LN&&(sqtz(茪f(]d(by J! '! $"n"3 aʡFy Z!Q#k%$)Ɖ)du)r'ϋd6(ӊb(1\!e("&""L"߇# zų1쥻 ed!%#Nxt'LjEx )ck)c0)U^#}I #xf'#~$D$!}$d%!u8"ŵ`:aʔFL}#~uy'Y|m)+yrc )bs{Qo(vyM1%5m*f&t\&%w@"&A|' &o 3tN/[f:{88sud"sn 'ncx)KhR)%mN&f6%\f%'Nj"(rF!u(v0M){WɋE 8z] u|tMoEgq dc'aY~(^K(X8(NX((e] #'b)OhhErXNiA[}ˡU}¢ n"iv`z{Yj/T[3%QO(M>+I,*N',USa9ZbIgZY>r4d)|p,lV8jjd ]: W.Qyt?4H.` CS${@yDn)=,5,>+Q4HE3#T>MKXx VactnCqayH~ ][FΓYiM:H @os>9+]0Jl#.:(((7d51)B>#N*IIUXT(bs]nixzuS7+g0!3Ip>=udM60sA ,+^L('L1#%=8W$.qD,Y)Oj5$Z?6!ndK4-mVc+ycbfOr~!x+~0 +C/)5u'#%w.-#a6O\>4F?E1RQ&^([*%d4!o@$vJjWweזp`]+/+p/$<"04~LB rlLT5] RN!W<^E-eU#$o%!w/u1CHTKa+/+/' ƢBP؋[x 7{`[if"ZkhHn9s({ ~"! J*S?gDLRU*`+/+/MQ]Ʈ_uRnBRrgԆu qxy*g|4V^b>Fn7%ݑt "!ԡ"q@OJt,w.x,.iwTYgLqՙ pvcؕb|TeuDЛ5@%*z!8[$!÷'j#-6@ #0, oXykT[/J;-%м'!%"#%5$'*%._֟TͯZ鲯z#@PصM dS=S]+A/"Čh&/#&c%c&b&&SO ("A,>%F7$${&כ͋&(.YuO(ݍEg^(e (gb KA (!$7xWsŞ= Ҝ#Л!%tl$ۊ'-)0#sN'Ōed(ċFc&'[ G!%" "j"i#pߟT i U!×x$K.#y'x(o(ecl(_"vH"{'#~$@#? $dyJ%30+6`ʭ9@ۘîzh?%~xw'U}on)%{d)wV(wL$op-3&u'%z"$&f}H&~('?' y"+t_o'pUd|(lV)mN&g6z$g%v'l")s (y;)|X5= =_  lV|nyr΅UmkuS .gCgm&cZ'a:M(\6;'Y((5^"T(d92DlJGu5ZM:mϓ6 Φ w:xp eaQ]BnUeW^%TNP'uP@)L/B*yP-%2 UY?M^yKi[ u0gSso6nXLkѲ ^kWz=vJe!^GJPoT^7Lq?\|')#h#G$&%aƮ'%!@=!ӑ৥̪zzm}/+p@WTBS'6 '#'ǘ&' ''7䮝ܢm! %!Ɨ$ &&v!(Xw*g`(e"ύ/_#.c\U ("yN?JJYjc ڠ#䘴%Pm$'(t*(Jf(c'Zy 2F!I&0" " tx7k.١}gOӫQ !Y$ؖ'x'z(Nq((Ie (߉R`!H",~(#Rt$#`$f[%HnmgPb(i즖"#6u"G{'ls)~7g)zYg(*ymLq$/r-$u%%h} !f&&Ä'.r!cG3 ,}g]!wt' u i(q])nO&Xjk8%1i%(oV"{(s)b{n.-聚Z<PÐ M" levPpOzXjj&e] 'cbO'^=(0\*'_R,'f|a6oMz+]ˀn4 zѣ7 [mt{jmarIU[b%*XNS(%SD)P2<+O5W| AaM k^xSiiVyTisBs$5o] jeΛsM\ KT)ng&OPv_,MP2aJ A5H029oIiDStPV]]ij@uKdv+eի0eΗ`T8N0 $Im0Ey^7B N>??C;AO0"GCx RhN]YheDOuqr|?Ќv+0%aQ]`L#BA#A,2(>n7<:^3D8OK7@&Pn8i0T:"k^F&ghQs ]Ii3v]`~1.q+u0 @5P413ȂA2pL16aRY/SWV.bC8\R-2w`/#i9VsE~RzbKQm Nt+0%+/!%m"3<&De(P)x/YV(8g_-&X'c#Gg^!b5j C#sM){|5xES_, Vlu+/-+/'9)4|I`ZՑb ~ikml]-p?Lu-lpQc8BFS&)?FPV-S"`?`Mlmy${n1h yjcf@-]K!W./wSDwV9=Ng%A?K5X1GHHL\K19OPhM;*TQZQ_P\:lhxBt@M+0/%xW7RnNN.IKV=LG{wG>DsgZO BXTAIYqB"9]JD,"aIkTwa/oyPg+0++0.%?2*? >>1M<`y W,:j/\9o\a(7OLIe75;h8,l<.cu7HW'meYp3]7w\+02+02/N/Nɮ?:/rS 2.^2~d1oh/`l-OpQ+t>+sj*D-v,k~8:G.U+b:իoL+08,/ЖEzuوX"e' n)DMr'wv%\gy#4T{B}/ނ b#@&qK64HT2T>],/Ж,.ФlWsX? ! ЂL^o \Kύ<=JB,' ="#,0"MF6SI,/М{!:&*d?[iE|(6o~ni!XG6$4 a%_#Oz(r${Ɵ*%)#~;y"ו!ԣuϥų4 XޒfyB c/NQ#@-&g!q&\%&ǿ'&A)\&Д5$ٸ#z"QeϽČٵŤaP'q4^0N(2l["(%(gɗ*)?)(= ӧy}禚)!S;n$á`#΢qI&8&M(z)Xu*9jV$b@$w^s'W!Az #Ϩwe!S;u"f$o#ʞc&y+(N~w(oZ(od"\ +Dlu%1bQ u,PӦI&|h m$h_M$!b'ꂤ)]sl(g(-` 셬I 4)!ֈM#g# l R"Z%PHE蹮HyUՠ"˔# %it(كm#*`<'}ZN y8/#w|g%%xJp&U'ˇ<E<8Ҹ qyˆɋ!}ya&y}nA(vb}(psMRO%|p8=$nz*))Is -z 1TQ`~DOԔh؋m>⃋zԅ'Dvw,Fqj/m[/jJ/%g6(0g.";8lPFcu5Ú)k5Loam҈ 3t S [w\%=q-lt3qg^d7cvVF8`D;`w1?]a gHmgWt*dqm~ {|_%*ɺ s9#dl-if6a4r={]1bBvZiRG+YBKG[2 O.^"jVce7p`q|^}%Amۍps*os^iE*a'I8[kGBW pJTaTQRR-USBYV3^[&%a_omlG|myTGmH}qa[k],`+%Y9TGPveQ~Mq XKb^*KGRbKmC#fN4jIRO'@mXn z%d(O;r䓊|ky)+0(6*1 JT4K"lKH,aXF`DsyeSCYeiAkTn@@Dr%CT5uEF( xLZ:דfhgt#){+0<+0#I9R7L8#_;iR;m:wq8iNu6X y74F|345L6'u:H-+KJ[9 Xe*r+0rͫ,/#ЮSB%Zf)t0|y2|1+.?n̂+\)MJӇ&9.%'ˋ(?q;2MFvxU4c,/Т,/мvW"߁_$(A%^#w bUPd >z/M!ҫ&"6~tD ÏUj ,/ Щ0$Oݍ]#6i bŢ٤V%#=YmN[|Jj9㯖%,M "*'$ƻ)%WC!%-%0ڱ$O!B\ΟuLھ`'6_!kF<&X1CeZ)21#'0&'tȷ('d0-)%˞%/ر#zdu əɾ!I7$rf`"Pnɒ4M)$)P')f)'(t*H(sƪ 2_t Oīg!.ǨW$ #&ģAN&ԏ(0q)#},(o% cn$_!s#G & #q!%n,oӧ "n$)#Q&yK(z(ϕq$ey#Û^y0=ڒ$#ic ըg͸&yT 0$ $ 'SO)Wu(mi#^e 鈸J /B!: L!z$Ֆ"f`"a?&u'ͅx)m(*b'Y~P< }^:"V&u$Ӆ*B&ɇ3&` Fw|ձRҘPQgP%#+;v.~_i.{ Y-x>F*_v1,Zt"R2|~D~@V_k<#z`tӭ(mc ^#h,F~72yq5u+c]6*qR6'o>09*p,E@oh.JzBZsmڑuqHn7  3ڸ!:5,y{4t|9ko0l>;kj^@hM-Ch:%IXk$*uN4m[wgKwFLG{o ڣ D~ (%u砽4o=i{Eek'K c&[vPbK"TGd6;Xtgy,]jgqti@t0s䁾Q}%rEFvި xܢ!r#d4 jCBcL)_lzS]jZ+["[N^\Kb|_TkdgTB[kTKomW=fs>[/v>`@"t~?iNuC~+03B+62-V.-B^T0VQ"bOHjN }nLns>B 0E !ДR_ 2Xl_t|,/1Ч,/7c/9u3i8cQ:}:R-r8v5wdo3S\1CB1000138!.<>|zPxiY3fq,/#Юo(L~'&S+~-- ]+~~F*jE(X3!%5F=!3ȤtI O )-Z:L%VZ,/еM&߾&ڤ%ѯ+˭X.@kq¬$_kS^Mp~S:%`#$(%*&4,I"&ř9'`L&bلR#[՘ŽH#GК1Hmr!Z{G,u')((T*( 9+'ޝ<'1ݣ&%؜!VB Rʔ#*˵Qct&bʦ.R 6`X&*9(a)$))<*(R? Fk !u" ŧ#qC'ʔh'1a(x9')Ф~~)ht%d$p_w&,G$$$&)$$j^C|K P9 | !ʪvz$U#d•4&ᢆ'u%)vz(imr$x`z>]+!7"P%aQ6٫ ~5z#u<$o.$v")zV+n(` v6L=0R 씋#%'hO I6ިjg&!ݜ%O))Ґ4-Yw-hb,ևW&B#!1($/%4BgUmr=ض^Aאܠx\=)B H1ʆ6kly9:|j;yZ = wFAx&3Fy"Nc~{A^(o2fw۝PW$1{Ó%2NN9|@wuEt]f I^rULqaCRs3Wv$L^{9lzj{|]O';CY*v07~LM`̑_ 2+0=M.T6:@_O]@aZ);lXVtVW )xVYx;}[TfSUV?F.Y7z]h*d7p_y5O+0&u,.{W KgMӵvN2}O49NTWM*zJha8IIWwJGbL8 P+Uc?oEwO,.i_-0.tҊqc:=BM|DÏ&DȓYB~?Wl=[5<8J;:9=)iBSU^༚m5,/-кv,`꾈,ܟ0P4#f748 5sP3xqƦ1_/N*;pa'7'w--$7@2ŜR6ƶa`8)])C+K))o2$q&À&%TM$%z4[#fS@u>|(n&q&ȵ*S&J?{#ɾR"荈(Ez+((0'ۮ,!mЃʖ8rʞ4P=-pSX] ɈKt/6':*))++c(,S(e1(r(8'>ڸö#pH]!nѻ v w&! dk!JSΦZ8q̈'1+i")?*d*)˴+z)W۹& ,b!"HE"cK#,!';^'v(y)~)Gu-%.eEU (#\(2&ƿ'(&.' &- Ϭ:! "{+#%/#O'"K|ů(sb ߫Sp"fL##)фi-Uqv+\f–xO(6g,+"*w&h)ұf+?\R?w@.%J o(-v13~2pp1`@+rH %;-%׌'LQAΝw@bЪ2E | WQhi (ؤS.ߕ\3’7+$x8i7V6@9*<jJ5z]%];kS"ɣjhj-!8/r6<8@υIs}BbODRKNVHB:N^+>UUcpn4j|eŗt86W1+T8vB lHـ~N}nRB{U^GUzoKZb|v:_,fς<"o=B|ӗōin9`B' t=7ܶ^DOXz?Vw}\umat\fuLjj/x{jw0W~{{!L-S`#\ (&k*)kpcj3rt?ItxY!nej"oMhu]gz0z(fn4~+fp]ˁh?N3k?_)p 1t$ m}I? !+0GY3!ZdqGheq9]elc7vaR~`tr_A^*oO]d^^NbH?;f2tPk<%(t)}+00р-.ҒcbSuW"X&XX1X VHmTCqS`9SPjV@Z3w_f&4Cgԯrq|,.sj-J.Ң}@s"I [sLȽ,NHO# L%IXtXGcOFRFA~JY1^M""TKcÄp,/7~./ي4Oꃫ;r$>xBCO>K;yov8gix6Vx_3C1<.ܽ3G ǺW!cf7 :+爏+͡b,.t/>0?Υ_04J.,D,)6P)n.:&Zů EIZ0Z*(,('ʯE$oWK#Ē)ᝢA*í*ަ4*&I̩&Y!U~*ї!St#!az΂ :N;2(+CB+*,@)V˱- ()ދ)l)Bݚƨ&|ٶ#!։#^#tM!Siӹ"$#,yr#cf,#kUY, :Ͷ(P,@ *+ ̝+E*JS,)XK!OX!L"޳x"ڮ-#.'p'ڪW*TP*ѧ8)u&KCg驩G !ǁ+~$)u'C(;(v'j8",$c!3#"Fkj$:\'+1*@ *֨):r%ꦚdCû(?% &(tƮ&*3%ۜZؽaܯ!s#!%D)癰*+4(o Wd7*"V& g) Iw+]^=SK^Sv!{+ի -1F4u4Ay64^g07O)2x+9u-X:EަRf fT5Տƙ)֩ձ 4h8v͏;=~r?=p^<ҐGG?ΐ0DCё:N'e_p* ?ޅۑ&fĄ5J0VxMZg^*UcFCiD4QnnQ&CtYmv"Q #st&^1K٦@ȏTM؈߬lWԄ,f_*`e~wj~eo ~UseENvڄ6,{w'֋c$}Z (|.BŊلQ׃W^P}f+gz?oxň v~w~wyw4f}xUs{Fp86j)ŊOE )p-x.spZpa !+0Jц: `S$k2lm+wktkʼnjph摘gGyfggWWjwGѝm8ٟr,"y? Ɓ跚 +09ь-1.ҩnZbaʔGbo b4{`ǟ7]{r\h]JX_Hb88e+kGu? - .|w-c.Ҹ Jw'1R uWYE,8Ys8SVTS}wrQ\k˱PZôPIx,S77˸U_(Ĺ]-Xj` v0,/@ҁv5휙 6.pBu|J᮸LmȧpM`YHiEɽB5oV?^$‹-C.҆PŸ_(,,5fM[x} g4pqyIP/o8u^ O@C͋1M#GQl#! -DrN2tI}aI6FnFzO|"{,l3z@ yxoy^8{OZ>@у2ޟ=$# *"Y3 _CFg\owvX uދt;sק~s>WqRҟpLp⢭p_rOu@ݩIzP3(k&W%{ m,.|`-Wv`琉qk}l lGljSgf]r^XfgawhQjg@Ln2s$oz MÏm-.҃xJ]N-dZ oR/8zi5-0.tҋT6}?-ZK~TWZWySi]OhLx4IfL˾FR>ΌDX:/ 4B7fGӈGƳ9Cଐմ@ *-+,U,+X͏-D*O^F" ٶh#s$5'?d(R*j+,ω.4-iv(U\#6N,&4˱*(*K))(%WCwA ΂D[b5#s%5'R*nT +?}..u%+˹m &IwU$+'ʟ))_'+'7&u&c۹@=8 krҔ4"c{^'ʘ)u'a!M¹bm>&$(*}ȳ&w@m Md ߺlTWߚ\ܾ/p ַ&/(5FyF8o '8mx4Q](1bE:S2ܸHV4ōtvǚBd 'ca\.*i6Ƚ@|G>xL"M>pMcTVN:YT^'_zkֲc$ Rz#د c$%-.ᅭ@<7J)ݮR>Y^]f(~Q`cjMd!Ti*@3pw0va}k&W&眩(T*٨38zB{ֻO~7Z9rb{hm'z`qߘfuԙnTzݛbC64J$} ( K,'1%C.T'ӏ`1UGiqf xv}ґxl̒fDž?UɈqF;6EC 'Bq1^+00*@ rVʕGeҔpeQz ̋? @=x2'g<4VG8$j)C 9٪!0=t _8z#TǀiGx|Å+ޅA@K՘^oÜ ygg/cW{~HN\8Dz*L!'.a 6|cSSmSis{oع~F^}ҳ%}ɦ{*,zz!Jyhd{HX}HL؀84D)JǾk- .҇k^~Oe)q둢vLߝv+Avku.21ϼ.g,Ε.+G5X'-Zͳ. .A`ײ/S1\1~XU0&]ٱ.`-vZh,S~+j*Y(x@6+.Ͼ,,-c+,-+|O+5 #$ 'Ym(xq,ͅ.ˑU.G.˦vC* !]%.&͋+()*L(Sm˛ݩ I%?"AΓ'ݫ[,hλ.} .EX,m<)~Q&%,()*}9(4+˹'Fè1 9hHݏD"'Ua-Sіe.̶.QI+LJe'&`B[!H+'jB Ń!;v!i Bf&;ܛє3(8:<=Η>,;'a7$>::J!M!_T^x6" ey"_$$_^~(a.֭=F?Pbƣ@T VzSWP`Y̻Be]+hj{&?&|&۱(j<+55^8FL,5R2\|\XHcWg,(jҭtnS^sHy*5~N$#Ժ  f]a)qtY+X/Ī8FI\M?XcXøl orx]6|5p>^FKN9d9)F.띂+ߔP.ᙳ4kK^ShȮs ̸{ɞåA[Iڜ7pBZ^vrNDm=q|-ٙ {.e.3~eI~]oZyڈzꙒ/:;Ô'\g=p]_?>yOd?0 !yׯ0 2u%H~[ep䮂ߌ^T2t̍ۖY'ƒ@Cq ]`+,O֭ĒL?7f0"!CFAj)Z:r \pwr5Ø2[㵡vb騬!H7Մqq׷ a+WOڹt>ъ`/c㌋Y/-.ҒraZk찗tt:K֑+Cb+|[Tz\8QyTsPHyaCzO+|<}~+v<-1.қVᘗ_4BfiyNpģx߿ƤwdȪu3qםoR̯m`uQilra΢lMn9q&jy"̃ <^H?E-OMo[G`b5nm CiDeرbK؉_wS]}bEL]K܌]o6 b*Y m&v$2b56vM;z4JRSZWz[۷Y^ TbhQ.KψFGt4RA6[F:A4إA1O+Ѫ](ϸj& e0梧4V58eP7B{D6ܮ:ͰV6tw4Q2k0WRٓ/)@;r/10/-]ѰK*WbZ(x/X/6!2,v2Dׇ3و3أ2}Q1 L)/-.J-ls-Z;*B9_,/Т--ϊ.,d.z+#ҘTW $-GI #ŗ@+. -/˷.T.$ζC8ӣsۃd|cSjV(WbD څ1u̲ vV].b뵭=k鰼w=>(7VӬ}z^+xO~ vjgvpUՎw&@nyL,Л~%Ƈ=",Ddş JT&SaFh#֨pFrGpl]i*f}ڶdfޱ`BOKc9}i,Ѻr( |E%[4b9ҼE"N_oZ^׫]^ݺ[ޙVcKSRޤOwJ_jEhFp4H4+iY<-Fәc)om&2Q469+>~D;}HުJޢD!5t!!3!230%&ǚ,1:.~/1Lt.^+.9l.ϲR+KД/+?,K+)C,ν($!ȏ]#mG$a,!@" ^&*ߝD-Ol0u~0U.ŀ[.e.ӑBD.{/.I*N"Wy "#&!˻)Td' cu-c1b/;\MDE-JI܈FH}jESEK&{.Yi<#um"d}/ѿ&K&(,ŏ+8I3pY@p TMZܹZwdĹhڥkWΎnԴuJq9/ZhtA7y!%B>Z*Cy+յa-̼OZ2KU]ؠg?0o\y+v?˨{liˊ҃Sts膵[|LACˉ+Ȓ̾7-_k024ˮ Lw]Vn5wxōKžUʿь*r W]yI"4̟Â!6Lj/R3#{|E5[A.l~,s%y.bϝ8 "mqn}^Lĸ:)3G3JDߑ\VkP~{")q܄j뢋IHXH0ueөNq_EKOڰP>ݳ2-#~G6nnM5Z>o4Cp֛2v2h֋E.&[t+Ӏc)3⍴+4Ѫ6 ֹ6ݯ7!ۚ 9:گ56;4O3._2٤1'm0PZ/Eԩ/1If/Y./-vmX*"9~/H C$f&ݩ(Gڍ -X.u/lȓ4.`."t,^^+ Б0+;V.+i"++)# $ӻ 0!C $Iy'ߨj( g-pb/ i/cS .c.Zpl/67SS_ڮUrBSHӛ(41H^e{Ү:h$Uy”Br0aȓ9 S*Q^=s!b᤭{֊ѵ\յҴϢӴp,s{i4WVGM6S濁$7R_;Cq 1嫄vܗ1Y\pڮ %Ȟ`2,Yۏ7{Ři|PWl(EB3?S"U_%tqYzg‡c~ʖju'1k̶T0Γ>f|Ͼ^iW̡D/`uJi(qv꿥陸V' 3 dٓù#٥3ILo|QafuQTӵQ;Ɣ. R&;`}c\j(tJѴ3j׼ۑµ KiI"sԁ^֮HL4,&'LAYZKbVhvzriw>ضzصU{18wNtMۤro^ko+VSn?Yu01>|,rV( E9KP4w\a;d2i}Led0ޞ`!ޕ^L~[{yXe&XvP_Z9ڝc0Cn+`wm)U45*7H ALq٨Q%WH]8YFR~PKF75L6$ 7t؞:۷Gw!G\o۔6<5t44/iڟ2n1[ڔ0FN092"E0;/Ѯ0D-ԛ\%+6" v7q "X&߰(5I$)m^-ӷ.ΒR/’.c. q-Λ_,1,B.,dШ,,v*$_$Z"u8#?&Mܮ)N).co/tИ/O..͞lP0!St-12. ю.~.)F, L$b%&gC'j2&% T'\G*K.{ͽ0W1t/#w.~1Wef1B<0#1D+T}){$}%î(A˫)Z+}#,JD293إGevQ|W޹yW5U>ހp>S2NW2gw,Hܐ'Fl$(%v*iw,ə/Ϙ;ډOR\o3hЄr uQExux}|1b:F&=2Eځ%E#0-T/df1xRʺRXsd~u@iwŒ: nEۇqoY4Wz'f>'ڧ֊02SN"\~.dwVёו2~Ӡk)'aq[<[JDDZWձ/ >%4.@WkZk5f_DuR뾛ؗIĮĥLl7!\*NCrùZ^̒JQ8*&AZ bwªgi yѶ4\ Gtԙq Y`fscYR`IOǵ=?+ZDd눗iwt~D奚␪܏հUNĴ=Ƀ3öpT@zȶsft`QNRκ;*lxu}ʉ( 湘^Zt梺7Ȫ ۫Zס(֚Ȇ C*r.a]2HJ4GV+}'lu+ufzsuK馼3̛zџCڧԷ޵Rݟ٩bc~*'i'ԛSSӀ>Ӫ1Ph+zbjj#nD-z%l?ӏ؏$V́; inj^y.u{_J͆5Ӟ/;ݑ,+RȦtaOcjmNӀx^ݔ=J)8A5]ځY1'la-@n*&5{X :OSi84י;tHw ,K=Ko.B!6Lܪ5ہ3o^ڸ3b\.2UGm1b2#1 0;KOu.Ղ]-+$S!`"eMt%m'7$)so*d \.m/΢/( .ej.&q-t_K-с1j-I/h-5--R+%DS-&$W%2A(+,+߆/"Ͷ/٤T/>(.E;-͢k0+S.H1./>.Ѻ-Q$&˨'`(X())`(,+e/1R&2ӖR1s.~"1ibd2ՒA1&2}I(ل,WYڣ(;%'ō)f+o+Ps.4Sr=S;5N[@ӽ]>9&_x߂Zp r\WS[8 r?.iދ*s&*j^+qp-yˊ4uЮKݓX5[c oٲqwoy߁޹Ȃg!e&M8*ͣ"%.07-c3".Y\\ӄ+lTQszXۂ:CnngIϚݟ\orG۳Z@!Aũ/w%!1"V5SX^qY'k#ߴ}x xBKͶ3%DTԓ c}Ǵhbص'նJg50+3NW\km y]W;Ԍ&Ӯݹ_Φ4Tk\{`}?՜h$S@y?Ď/L={u]\k}`7}P1dT-Sػ˻Mɮɮ=lʜaˢPY}|δjWxX ϱ5EФz3[$j_.؜m;4%G.d^rի1 DׂB}6N h ԁS׿?j0mzuAs";椝浱1乼yndomvsDڵ赓.!݉etx_J߫6 ]0qYiw넘~LQ/m%ՠ6d9Ч 1@?QZkQ˚kPVZh]BWӑ3PZ/.ace{m?\q^5~˕Aߟׂ,ܰB;J\xG׉&buՌL>(8JG0ӷ-͞_*sc!0ejrgӮ{~y`҄A݊}zڣx`p*FxZ׾zGֱ}6480Ӟ,IfLM\BasMcjg߉mۮqc׽ܲpŶiWg!iVf2GڲfkiCcT6ݾgZ>|n3Xvw/ v+ʲ9KutPrUޓ]ݡ/^xٽar^W,0SPyJdTeIP5RJ7ܙ` 2bgQ.cr+6>XRr;I-ݣL.۷QZګVEߎJ<{D6M53oz4]5KZ2320[r.)a,dparaparaparamBA  @paraparaparas`para  {para*,{paraGI {fU"YNX|3-$ ˙oݦparaj !49gRȪ=parajuELV>8paraj?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M \lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} 0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ ~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;'\A*ىJ nyg؜(VN#q6\DՊB*|i˽?zzhzMџzEzrn8zY,{dBS| '|⃔*Z Ђ`>mۘ:Xc€A'4 uh¨h$nk)l]'Wf@&8[/Թ|zY9_N3kV41@49%wUh 3?Vkؔ.Uٓ|??R~%nVӎȩ5U.k~j9V"U"똬>Ð?%' Ȃ}ˡWml}ʗiRT>OlT$iƝaʚ=\},?iT- =$e0yYq,<-A_|?h@SG=ҩ$leLy)yywydGzPOsz:{ )|qʬί(h䁙~ڀvcc&OS#9tL߮=.v10b䞼 N8ՙ,K.Fpj癪7̥0uPhbQM88Ajʗ׋xAʜڨ†󤔗tuϔaMKMB=(7kua ,̘/1Hsʠ5`\Lk7M (_XĀ⫹}£rs@C`)6OLA;6}Ȕ@(Bat{C rȟH_֧Kť6#̕O&3"^ļ֢qrb_cKu6{ݤ < (ytյy:}Ѱy2ldygZ8dyF冷zj1{r{(B€}b kYdrFl1l;nˉՍވI|ϯkUYz4EƄ0ˀh|RjΌcX}-EYW0,\>շFiba{{4j$W]D?50>R*>6Ā;ٱџziWyZD}p/'g^ȶ6pDzi/W%ԞD9I/Ĝ' J״"ԯzWhy1VߣKC/1ŀٵ˰tzhVﭠCߟ8//)cyxr|xaixPqyS> sy)zjfY{ C7ċ恶q¹JaJm~P ~=_~)]f2ÀDÒG'q^`۳uOY=RZ)#JNO©k#_p鷼`k&O:%=j(Hڧ,O[pt` N֐&<èi(ץc^PbB7pM@s_ϱ ,N&q<Е(¤+8fը*p_oN<}:(nN&Q̺o_Nw }gu~_jx&thxQy7Qẙzi%u7{Z{=v|k|v՟wӾ xѦx Ryosz'kYuzیM1<} #}oha}?'O|}g3}f }É\}Y}|ȸזP|D|mg|˨N|3,}X S}(d}5<|0|nƕ|4~|8f|eNT|2|L |Qvww~~x }1xfyzM(zI28%{1 ։$|y<Ǽ|>ډcΒhU~|nWdQL\15 쇋Z⊩!_+7/0 zXcⅩFK&0D!D $~uI&%ڏ͆.yl bDŽ̋vJQ/nFY k솷&ڸWlΆN]xa„I.~ ҃ᆤh/jhwo`ӃX^H.Е QLr71Nu vf`ҟGHUXu-{8IF,mźg߄ދuނ_gfGǁ-pȑ=ͅtؠ/IzKhu5^ՂGJ,^&J5uYv vw6rw]xEry+Nz|},SP~˛S~~~Sr ~O\~mD΋o~*'C~,lWح46uxp[(/C񊁃)cM &oA(7ȍpofZ0C(e_׃GgϐNanً(AY@RBS( Ѓj<ŏJmQXm@A<'|;Ȇ<[9%_5,~4m,WƈA' U<ϻ6ʱ^ly0W(W@@&֚$`|źm[xR`k7NV@-&H;/ݲàztáHuNvz t9t|uOqEu^sJvJw5Wxk@kx0| |$p|spv4|p]ڜ9|J"|4}-И5}ls?䄅lfo1]Μ=*ڙʜ]1zlʫrզЮb*|Pܟ s>Ԧ*d0vsQysjٶCt+['tJu8vF$R+v Xw {.yzj `xbiAY3I?N7#ףV> J߻bSxPgi5YuߓHU7]ӑ#âk t€ޢ_x ڟdhY9>kH§79,# MbwյZhưkYeH^7 # { >w9hX#H97# `- a{n1rmŶs7_XsPst'@t/E!udukoMw${h@zmz_^kyPpIy@z /RzVG1z_ /|F"{rmÞ_G=PN @}:m/PGw}Iu!{pm}s_gP%ԅ@^/Jn{[emep^P‹@Oߊ/P܊߫Ћ0${9%mT^PՑ@O/aґ {ńumGꜳ^`GP f@[%]/yyK!;΄7z0m?[^,Pa@guY/Vx@jzĝ>m>᫓_ 8[P*̦3@פ/E1gȥFvpswKsxt̢*xu$yvqczwW{Ox;/|1y}!yt~hku~v|}we}ʈxK}p.y3}V[z}:z~ {T}1r̚td_u Fv ~wnxBU>xy8yĂyՂ iq8rsltюLuvmvT*w!7xxpu2q/r+sŖՄtl|viS#w 7wwq?lo pqˣrzwtkXu53R.vA6BvvKNn뷌p[q1r0z̓0!{ ){ͮwӹx*NxelxTyZy,4byqJz!K/z\r zˇ6wswwܳ5x'xx ay'Iyk.yN Bz-Uw>JwQ#_wwwwx$/a x{ITy'.}yAo y~p3qrrڌsvGu `\v5HwU-ńxR܆Oy`Fzꅻzs {u{Wu{_[| Gh|i,؃|/}u\1_rك,tT^QkFǂD+n9 ­Ǐ*1ɂ|q|sB6]5kEՁJ+,x~(Ta؂ uz)Qr-\5TEh*x }0@Wd8EqZ[QDD)D=DI7ˀNdK [p=DZC~")Q~B?θڬ&2`Nos~NY~C ~wp(~^~ܾxӾc$~5n~@IYE~ sB~0(y}^~&\Wo5p!rs.lˋtTWu@v&;w*$yXySCGyyz?k֊_zVf{$@ {%{ۈ}iI ]~׊Sij̉7UJ?6$΀,Mԋˋ>j}*iT·>>k $PYفKIŠ˔8o-|:7h1kS߆a=#ċ%ʁs Y{ygʆq[S1<#,!V5q zٟg՜{Rj"0Ճ'=r'@ zVfQPQƄ;Ο_"a?) Œn;y]eQD;d1!"ospA(~|݈C|BxGgtXUѕB{5.l ʓ@lןzwߕWfɗ/SU/B{@. 'F΀F(wD f9tTAA-ma8KΞNvҤeTQA-X9ub;k)v"xFeAS*A/:-}v 4n~W{oo]p/_yqKNrhSU7Ct214+}pO@bqSb&C%1#!}ip aƫɗRB1Ҡޔz~.Nx}joدPa=RB\p1Jf|yv}6GoЯ+Va]RdB1vɔŅ(rHlemX9nIӷo:up)S4q-p)t{rwtpeÿtX:tIu@:vu)v!uxr:{er{EX&zIֵ$z:{){8n{}.re&WjBIҀ:f)0!rvҊ e_WEIu:QsQ)GIUrQheJWNTIg":Al^)!'XPr0Pe?bW Icϓ:?)8`-!GrӠ`e=̞W՛Id:::ҙ)}yM:qv6eCPWC(Ikwk:E)Q)ЧʜERٵqlrn7touIq-vkrjwtRxu6zyvzyv׷oWwppxGIrAxKsy4ttyivzQPw4z5hx!{>xzmogp–rIs^htOuJ4lvwA"kJmo:pu~r1gWsvNt3uru0zjo;l@̩Tm֔?o^}Rp⏔f%r^Ms2tGtԆ&ik8#lϝan\Q|o*e qh?Lr1s? eshԻjgk+Im{od&p3Lq1:rZ sGhi˶ kSÐ^l֫z/njcWomKpqC0q grybιg`ia}ajںclM`ymmڮbohJpP0p q%Zyk}zdmKzn{hptyU{qb||sJ}t/}v 9dv7wv{>${* I|}9z Xz Əy|zhz1Tzy>z$zjR{݂\y yVy|yh9ySyA=z|$ y͘_{^؋iڜk~mpyofipQbr$; s!tNw$setU u2x?veqvQw;xx jx{j|ۚՇ{|ن} w}!dq4}FP)}u:Qr} U}~цZ>vScyO\yI98ƃoÏۘ"ubgbo֊dNkuJ82n2f{.י~~0\to3a0Mx8EERX 2ȃEvsš`ā7&M͕7ǀvQlWJ#&r&`VLS977ߛD-`3^|r<_|Kz6Xy iNԓ&k#yln̐nj\oIqt3֍rrz쓔rZsM't3mu[čXuHUEv3(ww~{Nb{}~!{mX{Z |G|_2~c|~||lZ+ |~5l YւXFΉӂ 10&,{^kY-F1YPƇXRQ?{7~j5X^ՏFEmԍ0ˇ)MIZ0zy͚iz^=W! DՇ[0^Wh̉إy܊Dh܈ɟWD@I/慽)aV{yVܫ9hNRVCՆ/8kH(؞ĥלLjsߚl4cėmR oI?씆p+Jqlq/}А@qcHrQsˑ{@*Y{q/{%Ϛ̂=nq-ya&P{7>*)ޏ
ґƗYp`O֑ =z)w>{UƓGxp<@` O33`=%j)"]Ƙ~ϙo_z`Nu<(όؒikU~"RCo^͜Nܚ<&O(k8KW=}Ôn^VM[Q;όƠ(!7h7vm\-=nknlpvZoRiʯ(p\WpMTq>p^r-:Isj㣧sF7uav |vi`w\Gw`Mw>(x--xxT^zXu~]h}~[w}M4}=Ǣ},Рj}Z}~uDhX.[τLm=rd,2kٞ;th(urZXL_yX=h,_hҝ#te=gZn#CL<ԟ,0;ڜYVjBt]םg-;Z2VKآ<억+뜓vƐSdt.~gZ.K]<{)+뛾њ|j2f]λ@hP㷖ipC#j4*k#>l!Hksi=n2]Ϻ9nPBoCEwpn4[.q1#sJqpx)iͼud]uPմuC&v4Qv|#vv&|"ir|k]af|P]{Bw{4-{#{g{hiz1]5#PVKB+4#0liN<]PDB 3#:槫i)]GP?Bl3񨛍#2E"Y߀i Y]PDYUBM3ǔ#^?YHh]#IPQ|B%3 n#"V PlmfDn0huojqcl{rndUtOp}LlurP1vs x1s\iqTXkrgmmswogtyquc>rvKasw0txU vtwɈg|`i|\k|_&m|}xoV|bp|JYro}/s+} !t|ǻePh Pj `kw*m̓`o/ITq.q vsdF4)f|Th~juln_nCH`oˆA.p+ rxRc!e?p8gUiS tkG^m!3Gn)-in hq öad@*fUhTksjR]l3FmT,m˒ pa< cĜSeLgri\kmF$l,Ol٘\ pj`b盲d%fNrhکs\]j¥>El7>+l mp_te`uglvqiwZkrxBm\Zy,oESzq+zs}s}Fr=osfq;Zturpuvsqvst[jwquDvx]v*8yw{[xp.zk>qrzrz?s{Bot{ZDu{Csv|2)XwN|?zy|l)n]ʨo31p샖rnxsOY'txBun(u.x1lя)'n2Ôo|PlpmFqXs4RAt-;'tDywdlxklmnM#Col0pِW)r@s'>rVgvރjl$mTInkGoV`q.V@>r8&qޒ#'wJ|i߮>kLl~vmϣjwo"aUpn7?q]&IpwYVib$jɴ#k}m/>inzUoţg?p %pw=p|dM}g}TiW|}kgh}meTD~VoS>~q$r&gtSzn3{'p{zqh{u{rg|:sSS|u=8},v#C}vxqxxyMyyyzKz&zfzzvRf{z*:FEeWqcbEa?b!PX>V e*5qE|czieYlDgx\dirLIkM:6 l%ّ8n ZduΤ[fˌWg/GR6Ґě.'K͒F؋RFn9ab]cU:eGi;gW8Mh'6j*inbmi?ajTFkG@m*87`nS'?1oq-n-simpa9qsTr7Fޢs7ퟹs'rt.sx0lx`xSS,xFjzx73yA&ݜyl2x0|cl(l`8PS+E&71~&p~~k_٣wS%DžE P6؛&o(ƀkd}_ҍRߟ猲E:6&;%Jۀk$_T&R3D_Y6@%a'j𤡝_VRD؛V63%j a|`U|bRIde`"m$gsinji]plFrEo,s&p v*q d%jѭKflhn,jorFlq`\nrEpItS+pu] mthukIaud vNf}vshwpjx\[lyDnpy+nz rz-w_K]aCdlȃfoiiZRkMCl)*Bl~vq~]U `ܕbie nRgbY5iBk9)krY?q[^pa-1cm-fX\Zyc]Vj_1bpl=dޕ1WjgAqh(`h|sYY\b|^_avknc眙Vf,@gɗ''f"Ds XԵ~[?^D~`!jcVe`~@Mf'neș_t̳7n_GpOb1qd~hrgwjt?iUulM?vnw&wZo2{ ql,i{mkoPmP}kpnir pUsxr2>ts%Wutxyruɰ1isk~tߎ{m u{nvhzp0w`Sqx.=rx$ry&yzFg~&if~-k!~.zl~)g8ni~0Ro~;=q~<#p~[zS~+eGgliiy.k flхQnlgonp,\qEUIrL64rcqˈKmkUܐHH;ʂ9V)07vdh'mO'aՊUTEG9vv(ϋQu߀mB a5UyGiӏ8t(pnjрla_}TԘ_G 8r(9ŕ'Ɏ0'ebW[Z^M#`e@[b1dh e emdc'YdMmf@l{hV1Ҝi j Oird+juY kMl?n1o Кo }lo{wcqXkrzLhs?y0z' M-z1 z*b,VWqaKuH>|0UN % b&-WyK$>(܆f/2mD t ΀a՜^+V̚JJӘ=ؕ/Dv~ %z!a˖V$Jŗl=(/Jg[ 숟Y#ZdNR\Bd^5`',b#abhEcZqXpga}McB#jd5.f:':g`gpҦhQvXhhMJ iAЩj588k'l sl|9mxgzWo:Lߪ&oAWp4Uqm&ߣq Nq\rA~WRvLvAv4w3&wm ]w)Ÿx>V}#LP*}J@դ}N4^7}?&t}3}~^V-L)@u4Al&t4G->!zVҋCL2@g42&]!6MVb4~L z"@U4.#&g/&jp&aSYc]6f/`7hqcLkjfFW(li%A*nbk'nmtnų*]daq`fc6h~Kekjh m(Vj@o.@5kq'lr^cu5sANZo]pJM`q|c&rinet TguC?>ivV&Qiew ux"tWy[y܍^ z9{Y`zhc{Se{k>Ng{%f{v$|UxFX΃u[y^łyfaRd=veʁX$dvmRSvfVZx] je_(Qbp pE [pqL.~sǤbmdo7fpxshqa8js&Mlti8mu|m.u~-xe4_wbPx0dxr_fyQ_hyLjzc7kzjz~T|f]}``]-b|&pd^fဤKhԀw6jKkht~uԠc[{+^B `oc ]e@Jg56ChXf~_Yt2\̀_>oa$]coJe܌5fe3~Xas[Y^ [nJ`l\ZbaIhdi57e7:d6~Wة6Z ~]#m_{N[aĜXHcš4dc x~ɀ|6pXq\`}gr_ltbZuDedGvgh2whj`^wkZrmbne|1pAgikqiYrkFtm28to`tovȘjl ?l@m{moUjo&pXpr(Fqst1rt|cr&tzhuiv~ykgwFi:lwWnlxEoyA0pyoy~qeggyl*zGn@{mzsj~t lyp{tn`uoP2vq>w]r]* wsE=yr}ps}kqto)ru_svOOtzwK=guOw)uxivwnk||Po}n p}W^q}zN]r}h-jKO0j,lksjgg>i[ kfM#l=xnd-o}oNq6rp?ofqYr8LJs>=4pt#,mt6t] vq}BwexYy"K]yh[img"ndgQf7\@gPPiCk=4l#mn^l^sf~qm[^nObp*Beq<3슀r #or7rxe}uLZvNvA.wP3fw#w SwN|d|Y0}KNg}{A }2އ}"ن} }dZYRwMh /@vT2Z"X3!GcއEY M/$@?,;2/g"6僠c|X!|L˅MS?O1sn"*ۂ] \URBYXF[E9]+}_I`JamI\]QY_UF7ay9cr+Qe Peߘer1[_dCPeEg9i&*jV&jjwZ@kZP8lDѕm8jan*joݔ3o.p#{eZ LrOs[D0t7ƒ|t*u-u!1*u.YsyO}zCC.z7Qz)zq-z;{XkN>;CL#6폗). PX\`N/:;B66(܍~sG+X7N rBÏ6o(WrT PaTMFbV;M Y=.[i \]`|q.Oƨ[*EĦ]7:_2.` [mb+ǥbleuO=SaE-c:Ae.~fy gVѢg iz<NǤ hDYi9k-IllƠ?l(wo+}NK oqD+kpN93q-+Lqqq5u Mנjv`Cʞv8(wU,뛞wXw؛w^qzTMs}UC}8},7}&]}љ} ~M$YCJsq82, w{{L)C(8dЋ,ٗDݏgZS]W|`[5wPc,^debCPhe;ih#%ipjygl˧V^ Y`\cv _fxcbiOe"k:fm"eeolyqgRhGVUjsYlLt\nb2_oNb^q9ds!btyvbOSrݔzS sڄ| X_|VEb(|1c|cD|dQGg{Q*gh{4jz{oY|\jn^_eaFO'cgd=e ;*Me$,h;WO{Z}m]^_Ndax"W`ixGkZyT6lxy#ml9z qze~bYr7d9dfVpgFiT6j_"i p}`(&q^bZddL4Uf F=g5ph"g nτC} ^p`ԏcdbЎU dkEfP4g ".e؋ m<|]Wp2_ baJTcdaE)d4xe!dbQ knd xyRmzbV` {YQ{])BG|h`0}Ab~ld#dy wv`[Hkw(^/_w`PxcAy}e0tzGg{h~)i|v}s cjte]u gOui@vk/w}m5wm{nuDpkisq:m}\rOnOsEp`?t.q/!trtryt(tmWt7hKnu:[ovNpv?jo}.pR}o}x<~r:i3fjZl Lxm%"=n-nnumx8qgFfiCYxjKk=(l,l߉+kx:qfqehXip"KejŒ\]2D^$g`Oؔ`ԑ biqRˑ ^?Hܐy`g> bm1؏d9#䏯eeggvRBe@Hf=(Kh1/i#TjJjl{<Q9lUGDimߡ;Md|Qg"lUAi{[ XkH[m4\o]Jq$}KtEERހC2SXW)} :qJ@wEhIW;ME\P{2.Q5!gUʆ}08?e=vvBgnG5VKDNԌ1O1T|436;vqABgF KVlJ?cDMY1M^PSϏ|8ZMC]aR v[_V9f}bZ/Ud]C=ga/Oh@diufTmґyUWXZu-[^Je^avTa1dxBcjgJ.d]iNf`jrPaITmcsWfPdZhSV]jAc_m-`ncowbLjGPslqTnVbWRoR)ZYqx@j\r-] t8ats{vHt~Lu{pPvca`T,wW~+V ^dXB[|~G nKDm_OOR~C>XTԄ+TLU]?{DʏmI0J_M&OP=R܊+-RG*]뉛>{C mVG^KNO E=QE*P^i@aN zdRlf&V]h9YMVj.];k`'lcpdhq'\WyH_Zwkca]\{dQ`LYfrc:h)fu'BhhCnhvhnXb`Fw[[bj-^ec[\`gKibj: dl &dmkmzT0iivWykBhZtm Z]0nJ?_pJ9aUq%`r ixr~#2PkrtSsgAW)tXZuI\\v8L^Kwq%g]x ~i1x:M!{sP|f6TG|oWWV|H{Y|7[}C$Z} Ri|~ ~JMrNYa.Yy@[tӄypqsMerQXxsUUJuX;v-\ *wC^x0`~bZxolUcnjYW_o\.Iq6_!; rja*RsZdCt d~g!|mh]bRjx`V6l#cHmei:&ng)oi7p}i~l*l5df`fhThiGj6k9FkmM(ln]mnn~eqja#nF_cfoSedpFgr8hns"(mhsjs~.wi^v^`vwPRbwEd\x7ey'eyxhyg~0{h[K~]]~R` E6a 7c+'Gb/qff$~h%Y]D[Qy^ D_ㅉ6a)&`a&eTD0}gW-\Z3P\^6D"^2"6 _?j&g^ad8~5dz MZYzPN{TA|dW2t}LZ!~] ̀]xe{cEuTXvXLw[@*x]1y`S!zgb |b=jH~aq\W]r_Kta?/uc0ue vxg |yAgoV`md2VoQf4Jph>7qi0r~kYrl? 0vXl t_j\kUlm_Imin=,no/xoOpKoq sqny^vgFsTitHjutX\L`NOCS>7 Va(YVZ\q[i5~WxNS|MVBy`Yq6,\(^I3_C`nmVH{ZZLT|]@A{|_5>}_a'S~ck~d/eVs$U+waK1xc@VyUe4Xyg&zhzi/s}jox Tt9iGJ)uRj?Uv/l63bvml%w7nXGwn^Z{io|rS&q,pICroq>sdr2tsg%7t=stsbyCuRQnwx Hsox=py1qyk$qyr&yxJ{sQl'tGm=Xn1o$eoRBp:\x'Q%j?GolM|np3}6oh(q}}p"}pl ~pvUFy1t]=z-u3\zu'{vrzv |6vl{GFOv{lAUx5:W+>Z:[\Ґ^.i#yt=o}[4P]*_gd`a*c:nV}X<b3tid&)Det"fKfght;ˇi]2j(kkBk?kn0y;;)p)1p'wqyq熮qtS}:|w 1]w|'vew.wIwnz+: ~'0~O' ~1~\~.~mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~"hN~uO 7A胬|.A|33|M|WE|ߓ}OgV}ьN~|M6g\7{cߥ{fǪ{ `{ɞi|+~|fn}CAN.}{5~zʸU/zDzCz{,a{}|$Ye|ȕM}5[~_wzRêzF2 z] z;{|{d|`L}5P4~=cyy@yz:z$| {[@dH|Lo|4}uyZy2yƔyj;zdj{w{ @c{̡L |34=}S~6׆}}p}UR*}u{}că~5Lx~5(=}p@kcyԃ-bKÂ4؂zGetMڽos ČX9wxʂʈaiJ͂&L43oۅO_tz莴r wA`ցNjdJh3\lԟ[7—vx`9Iue3${K͂:X2-{6 uȀ_JH䀯:2ՃsV/&ĤuU^THiS2`rփȥ$ƁWSJЀatk.\^)H;20T7Yn#s]ƞGЕV1||c|:;h|G|rʼni} ]}G{~2Q9*ǔR<6W[䂶q҈=\+3F遢1˄ڣ9Wr݌>WpxpЇh[HwFF1T4B،lkȉR9oهZ؊&Eo0샠ᤔÇ [ޘ:OnkY΅J4D=[05 ֵK\wʤĘRL~nY+ΒDsЌ0EڇDէи\Qڗݧ*mwzXbDsl0VŒj¦ψԖч{Ά=[l)X6NC'/тNA̩ՊMĠ'-7lgWԃٜmCx/O{Y{Q{F '{s~{ju|wV"}9B~P/BB̝ҹ<Ւ4 $~ӁiڍcUƋY1A7.zB!DE.Z.7} }iцJUAtp .!c˒ɒW|-Qh )TX@ۆ.e^fDi{ 3gQSm@]a..4ت`"סp 91zL fS6t@0-؆d VבAȣyf cRƈ?熏 -؄.eNĠ!|iDxFeDRk6?A -LŅq͒rƋwx{(e R?p-@ zɠz|zzur{Vb| P*[|=~ ,j;ӽp|Μsn%tŕb ǀO=n5,IY6ܟn웅φAusPaRPNل[= ,,ĻݔОD[ٚ̏~sd`TNf4<,è靎e!4ڔ&rٹޔVj)0Jp ^*L ;+Ņ􈉰(z&z ~z}HzjlJ!z[{J |9j})Ћį\RfԨف|PZk2"Z}Iʀ69!K)k9wkR{|GsGk]HYEsI 8䎛)ςϝ.4js2{{5j\pYTH`8n)GɬjԋIz,iX͕HTŊV8q*фDb7ɥR zi#fXVQH0k8Z* nԫ^D-yhTWGŐM8>*håڊʨly1hTW|Gj8*5%*؇TLdWɴ艴ux՜MAhF WxKGn/38*yǓyqb -RƇC`q:5ل(!ރ,ǘiq[LOa3R#C'Ή@4C(HaB%7y֙paDQ՚~UB84폿(in.֮z@ILp5`%QB֔4Ff(/\ ̀Ҥp^`žQqBT4(YϞM g<4˨s0p(Wd`PQ[HB 4ꎶ( Qy2yPxybiy[gzhL죡{O>|b1}%to<&؆ѻxE\i[~L,>1%܍2k3w+;iM"AZLb>-1@K&68P.TwOh~_t1S&HNBHƸyw3hzZ%XeK'T>k<1˒3&Nj„B]{vᖛhfғYK֟}>_ 1ݒU&RN:hvıQh?AKYإ/KĞ>X-1܉e',ƓM v͡Fh,YɤRK>UD1q'QZtvQh'9Y̤,KǞW>n20'onщ$yp{6y(nfhy/`췎ySxzND~}46~}y-z4*z{;24{Ё||vBd}.MU~6:hxYjxyxҪ^zzɈ}{d{c|_L}}[5L~?w31֮wȗxhبyyTzAzb{K|G4~ ivGUvޢrwާwxAMyy(zrb {K|,o4$}uoӿv'vͦצ7wϏ/xnxyia9z|J_{m3}u{ҝuv7$v=w䣍wQxs`z I{K33M|ˆhtqѰu'u¸{7v+`wqvx_yI^z2|t'tUAtɛLujnv$wux+_jy[Hz2|6♄x͍xxx8yd \z uz_{IU|3|~uႎ\?(e+kt 9^sHu2ZIQAAًnŀM>.s)]5GdX2Vݿ(%ǔ|B\PtKnr\1\Gņt1݀4DBAdz~{~ҝ~JA~q~[~ F{9m1t0~t~1c}X}Ӟņ=}ߚHp~ [9~V6E~Œ;1Q~2l}~\}^ǚ}C!^}Zo}Z}E~\0~ }Ė}:||ͭM|禛o9}-Z}E!~+0~f}J|'|5D|o;|Xn|դ`Y};D}ȓ=0c~tvٿ|wW-wݗ_x|yCmцz4Y{FD{|0Z~kud5<іZelgX@{C̄,/n*&T5ɇʕ4ЅkWm,C+w/ԁΉB7Ώˍvj3V|Bۅ/9K]́ih"4Ɇ~d1jUދBPy.ӄ[iLz6W b}yiGU]TA؋.l f3D^'DŽΧɃڢ|hsTفݓ=AWr~.'ʠǼcՐj{wh 2TiA .VΈ uͷ6,ׁEخ|lKe}v̊ c)bP‡>P,ńK'&t1uegFU7}EqЄ6L(z򂅤j?tqdȖJJTȊ;E%6(d(pcc`OޗCtN<9d<7TJ8DԎ'6ه(ϣ奖ԜVsϘcƕ"S푟 D5g(Nz]s]F+c_gSAD`5ۊ n([B?Hjr>c eSWD3_5ĉό(ٙltiNw@2Ǐ&z)"{ɪ{.ZblYLJ]b?N@GԄ2҃&GΓ\rys᥎qup[wF\x됔1zf۳n#o²apݻr;su~p`u [vwEx1Qza rÚs9(tN@uhdvpbw[3yNF>z1~|գ}f|r}|h}|}|~|oi~m}OZQ~}Ef]~71!~#{|(|`R|(e}kn\}pYq}D~p0uҞztDzi`{5n{.|mU|%X}%fD}焋0/~܂g.yƽyͩz9ݕz{-l[{tW|sC}L/~Ux٦y0ymByؚZzd}kw{W-{َC|ȊI/}ax5Lxz}xǦy4'y˜jzV{VmB|W/W}9whxxGx~ayKjzmVzBR{)/&}0ͯwj^\w_w趔xEZ}x$iyUz^- dƵ*% -6 v2~ٟxcG~̙P~Ҕ>p,Qtո1~_u~ob~iP[~}>2~,չwpFqLrІtsъiunaZvOx=Pz+|~Dy,yzC7zrJ{6`{Nl|[OLR;a^+ s6Z IMȈ 9-ەo`]L$;و4+ mvUjF|n)j] )FK2:؂fh*|HwT̡n\gK]Ғ :^*Rb!8†­)lmNj\a0K :kĎ *ځZo#+q NrQ{ҒsjCuYߎvIxf8dzs)|쪓xqx狏yX{eyj:/zYA{KH|,8H}B)5~×C,؀^z:Oir)X H7)'Ֆ+ňzey[HOh6YW*kG}7) ߁+KА]qxtfgOW`YG5X7]) Uܧ*rߗ1 וpwg) t%lǎۢv}Tf UF/Ґ 7) /ʥ#ޖ<׮ֆIjuNeD'UbsE놁6ۄ) wͣ o[pqq™ssJb4StR#vpCJx>4hqz_&|6w'xp}xq<`y'aByRzB{4A}&ˈ~Ďjiǚ`"pLa:~Q$BF4&H⟲ƍ~~[oՖI`sHQ CXB>&3'T"Ϗᛞ~,Hos_ߒkPxxAi3L9'*BD}ƒn~T_WPHhA3ɈH'@y̚Vn}2)m^ݑO.)A|,39#'S3~DZi|şPm^sO’AAŎG3ԉ'b@8Įڊ<|9n@m$H^FOJaAq3!'nߐo~pBvqhrYڜtKWv9=ʓx0ezN$|ېvڃlwCuʣwgɟxxYqyPKWDzR={r0j|$Љ~hy~yr~)uUk}gMl}Y`~KA~Z=m~03%ӏ`P^t_fĝadXeJTM=;0q%Q6vX¤yt?f1X7qJY%=Y0%=ÔGɒsːKe͎WЗ͋J‰<쏦0rl%!:-$0s>1+e[22W|5:Iݓ-<<׏30%҆צǟseW7.I_<0|%cōrjrrY?dΚ=V7IqD7<:01&WFnxaokƬq&^rQt1Eu8 w,8z="'|҄nvxJvxkw^ͦwQСxDky8{-%'|#0~SLM};w}|kh|^|Q}/DЛU}8~&-N3~#xX(.w\Mj~^-QJDVM8-o[#͉热0wChjF]̣QDvt8 -$YuvjSʍ]ԋP˝ˊDS@8do-$Rz嘞vj+P]N/P*D6 h8-i/$ ްivi릧|] PnDF8zB-ό$Yv;i5i]PX D 8ό-⌛$͇my0nem}oaεJpV r=JG\s>u3ʜw)z1 |yiuomua3vQV"GwJ_x'>ۡyg4z*|q!~>y>|m{aֲ{V {JU|R>j|4(}*U~" ym\aɁU׀JRX4EY*π~"y߀xm?saaUɅQJ-k>Y4`ɂ*ґH"֊8xƻ&Dm-gat؋UJ"ňG>y4zK+R##xlm$apU%2J >ʉ4Nq+2Q#b:]x am"]jasPU6Jn4>;?4ɉY+VB#݃x{&m'ꝑa|UJ$/?4Y+m臉#yڥqm*ƦsQnIJ+tpW uq釴w0sr&xuB\ywGm{y#2}{ضoxqkxrytOyuz4q"w=z[x{Fz|2%|}n[oQDqT{rށ5WtopvZwр=Ey1{4lnE ocqք sCunu Zv鄶EZx81D{QzӢkG}mŬ nprr;mt!Y?vDxJX0z2XjIlvmɛȖTo#q_lsVXuoGD?wJ0z;PikI mXMnşpl-r2WtڑCCw60[yφ"Јhjwlhqn'p kxr+-WUtdCovΎ{0'yuSh|jSHkēm8ojqVsgCvv/y,Szl$zm{(o,{qT"|Ls j|tV}vB~y/{`x/v}xw0Rx?z>-| 'qro(ksKLt?xufFdvRx11?y؍*-{®q*r ٝrܰsƪ'wotd]vL!QwΖS?=y$-{n`{kR݂m?o ^pvrcȁxtQrv>x,{Iuɀvc_vڈKFwu;xbDyP[]z>|,y}&~٪~ƙX~~6~~t~~b ~OZ~=,FII}t6}}}s}ᄯa0~%N~{=~,||9|`|{r|䊜`^}ENb}<~O+v{{ꕦ{'{ГOq|s_|M} <]}c+~жzؤzz͂{q{n_{1Me|x<}@+~- zK8fzZzdDCzfpSzᛂ^p{kL| `;|ۋ+}׆yWy*zy}zozk]zL{F;|+}ׯf;jNlYn~pGn)r#\)t#KWQvI:@x){sjt]u~vmOw[y JAzJ9ك{)}m |H}#[%}>}V}blo}[,}J-D~;9~)ւR (`)ᄡ|kqDZۂIX 95i)Ɓc,/͌ {qjzYUI#8J)v9?^zCi聱XY">H=8o)_ǚv͊{Hyi9X"HYT8o8)0w%dۂԁáyH hX .(G鏆8AҊ)ۅeăd<}E`UxhbWG48C))jNl?--nuvoeqUm sELv6 x'v{5s>teu t:vdꋍw?TډxE=y5dž{~'}Yl){I`{Ń{t|Ed(d|T<}DD}5~<'@~zۃHrtns$҂jcdPS؁DC_45Y'rX\#_r@ψbP6SC䅑5,CC'ȝ͍ڔ.Ӏڊqb\R0*C4'z)/[-rpވYbapLR+C͉1(%ۄyHgАvY4hPZckLA'>Ԇ1%3c0 v?th:YَK⊋=>g8o1&ƃ'惆uʑ4|gYRJK>)ċ1y"&$lO]Ψ?/^ugѠKgFEY*IKD=c-1c@&4%􈀦li|Qkom]bvIoGUqPG)s:fu.;x#!{Wql{rsoGsb#tTvG_w:Cy>.Oo{#y}1 x{kyEn̝Dyaz2TWfzG{:`8|.\z}#Ƈ~ĀJz͟ln a SMFƑ:7G.e$zf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i 9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy }>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$yzz~n{D{]{{K||r:}}?* ~%FwzKxx~yDQmz\'z݀K{Ҁw:^|0*~Tۮvvfw`\}xlx[^yᅜJzV:|<*}ktufvV|wkwZyRJz79{*}1Ь&tt̛ku}l{vDEjw7ZxUIy|9{*u|sh$ t$tӟ{2ujYvVYwɓI7y9Kz*h|ersMtTzuuiv>YwKHx9 zL*^|쥋|e;gȈDj,xl{hQnW3qWGrs7rv(jz\nSoqtwƂ\rg~tW v4Fw7#y(k|>wEhpx #xvyofz/VZ{Fh{6ۀ|(k~#H߀ SuezUF6(k^~ˆK~/Y~sIt~]Jd~dMU ~XE}~σY6_5G(k}\}1q}uvs}jd9}~Tv}E~6(~(k8e|ٚR|˜ |vs>|c|S} D}k 5~ (k~ǃJ|4ȑ|$|Cr{c|$Ss|Dj|5}(k~k{{ {4{r{yb{_S|D|5}By(k~!E1d鋩gl}݋hio:Al(`nPއq As3rv%zajmy!o}pnrE_zsPYuAw3Fy&!|0u߉v|1twmkx_^ÆkyFO˅zzDA6{U3|&>}ݖ"#~~G{& ~_lن~q^.~OJ[~@惑~2%&XIf5ˆWȅzG҅+ln]| NۃV@P2&nȔkɎcэZyދkIV\σ)NZ|)@Gꅎ2y&Dž xzj3 \7qMЋ@C2& G_2yxhj~[Ԓ!MnF?ƋJ2x&K:Ʉw i[SOdM#ǒ?Y2m-&(dg sYieߐkXnWJpc{"r}~zsIzgh{L[p{O|4B+|7;S}o,Ox~0"Յ~~vrf=BZܒNـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! }~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2u6x)Gz_юzb〾eqhbmk~Rր$nCq4u7&y7}Gh}kj}lp}oa~8qR7~sTC#*u4xA' {*{&q{{r~{t&o|2ug`|vQ}AxB}y4N~{.'|y6z?wyz}z!{Loz{`{?|9Q{|BZ|}R4%}}',~w݊|x%|xnnyH _JzP]zLA{3}'9~u)vNovꊍ{wqm9x+2^xOyA{^3|f'C}䁀uA؈u5zvElw>&]xOXy,ABz\3{Ѕ+'L}lltq5u#zUuŖkv{]cwhNx@yҊv3{U'S} sڤtyu01kvu:\vҕ8Nx*@y\3Wz'Y|u_wbviehͅhoZRkXLEni>[Wq0u<$yB˅h.j@ul^h,n{YpKуXr>ul0Ђx $ւ{!pQVqtՂs!g"yK펭gXwOiknjk_EmRekp'E$r9u&-Jw"ք{1ov勋pkTr ^!sQuE"v8腦x-Pz#|`vvwj/xV]y'QTzDąz8{-S}#U~Aq~0uQh~ri\~]BR~PM~Dzk~8"-Z\# ވ9tCLh?\8 PyBXDKh8-]r#LFt5^ hwZ\?O@OgC邡N8Z-ZqW#Ӂ ~؆'sh[ԃ4OC8 ^^-Y#~se"g[uOOCWq8-Sf$QUx3f_)m2bb!dW:gKoj?ln4}q})鉪u= hyPwfmFhbNjVmm͉/}4/U4+d *u"5wtjCԉ _w TYI=6>gg4+* "cjt<ѐlj)(_?JtTO}I o>-4* "(5sIi^SىHӇ؍"> %3*R"ӂmBo^cxaYZdcNgbDLj9ѓAm/qi&όKuByTlec4gYPj#NDlD6 o 9ؑq0[t'w{l1:lbnXoN^qCsp9ŐOu01 w'az|k|s0bt9XuLM"vwCw9y#09z'|A W}k8yalzJWzM{PCv{9~|09}j'~E "jʚրKa=LRWX:M@C69h0<'އ p0jm醤`f,WtMɄB9F0G!n'k!%j'*`V֓iLƑ Bǎ-^9]07(݃+!R|i`"IV˓Y;L`Bōu9*s0Pg(6oZ!v%pb^Y}s`P7cFѠf=ij48m+wqM#uETyUbdY/"fPgi0F\k=q nb4_qK+tZ$hhw-zak$XԥtlOšnxFpj=]wr4mt,1w@$Ō,y|sapqVX}rsOisFS#u =;v4mx=,W_z%{ }a#wxX8Ax!O)xFy=%z~4l}{,vG|%Q#}K~`ݤ]}X }Oq}E~= ~J4ui~,Q%Rυ`fzWANuEO<4u,~E% `v*W؟ON囨xE֗ĆJ<̅/4hׄ*,ۃ>%W D`YWӞNEӗp?|sk2}v%z0xtkumwvoiVw(qh[3xVsCLyu7?){#wI1|y%~|Eqtrruutvh{uUwZyvxLrxy{1{|U& }}Ǝo|q}Strh}gts}YuH~Kw~M>ox~1z~&%}=T"n!Hot pyfruXt4KSu> w1z:^&9|Zl΍|)nTrsVo͋!eqZXis(Ju=w-$1ky&J|$k•vmWrnڑempr/WrFJntYl=v1Wy{&X{Tj&lrAndogWq"J$s=[v1/x&c{imZ{8]o\2a\b~DdU/^h G΁k:o~.2s#lxA~bz~einh aAjTmcGfp=:Js@.|v#z.|`jy|lm}n`}\pS}rF~Qt:^~v.pyU#〽{z.rxztl{uM`.{v~SK|4wFt|y :}zn.g~{$}xDzwx{Ykyu{_Uz|ERz|F{};9|}.c}~f$<*vvwqkxS^xɁR&yEzF9{À.P}$_~XauzNv&vAjWv^wjQx@3P5i+U"Mv~h"la~sa~[VP~<"K~AG?~oy5L~+Z3"ǁ v)}rk}a}zU}bJ}tW?}5~,+_~"Zu|k|ד/`|ʑU|J`|ˌ?[}5}U+W~;#pu^Zf]p\ms`Qd6Fzg;ϊk1zMox'هsqxZo4a`fd [䍉fQL$iFtl};9o1r(pve >z#nheUj[LlPĊQnFq;|s1gv(B;x j1{n;odqZrP7t Eou;:Jwd1o-y9(b+{5 H}@m,vpc=w^Y6xAOy EI z:{1\|0(}=}_!~l䈺}McY}Yh}O-~D~U:~1\~(nZ!@lZbԆƒX׃YNڂDX:1nF(!qQkubXNUDu:I1K(Á*!kᐿbI9XmSNMHDA[:m1F(р!-eޛ1Y\\S`AI픟c@"gh6fkL-Wo_%Wsxbe"G`}\k?c)S.eIh?Xk6jo+-Wr%[vJzd'g,[ԕ?iLR3kI=m?pJ6VDr-u%x{dm[8KoPRYpH͏=r?d t62v-x%܆zc}csWt3ZuIQv`HXwz?$x6z-{d&|~[bzZ=K{:Q7u{Hw|+>p|5r}T-~&(~8rbY5PgGm>v~5؇n-n&Hi 7_b*φYSPG}>n5Ճ=- &h} f6$aYoP㊄Gf݈>r85Ɔ-̄lq& ځ[\XSP\1J垦_BHic&9f1',k )_koL"^s^xhZڢ_pRԟbJ}dBh9 kG1=|n)r`"ϋGv:>zZkeR^gJ!j8Al9^dom1ArM)׍ZuK#-xw†{Z kQmI1o[ApqR91sq1&ـX/zP[Hޔ8@ő=e8Ў1108*_K_$J[cXoP͖)aHɓ~S@8֍z1E*t$c,4i\U+2_Y&c]}Lf0`litd[lhK;pm(;tq,xv媋X_a\ob`3_eW|'cWhLkfkIZjnaJnq:s4u4+wy>UgiY>k\m~z`ojxdqYhsIm7v :@qx+w{vR=ssKVct&Zduy^lviSbwYgy I:kz]9p{+v7}BOw}BS}nX"}x4\d}h[`}XIe~>Hj~9o~+unM Q†=V8w=Zg}_]WdQEH8i9To +t"K)sOׅT*vzY@uf^WcCGhV9"nt+tiIN$!SMuXfD]7VbeGg8m+t+Hp7M{RK\upW!e\;8VXaGDgb8mr+scU5fiY:Ih]'ukxaeqn,dUqhF/t(m77+wq)[{Xw +`0^呣caEeetc0QgCnll05q)|v#bQ1MU"|YnM]Џ_b,,Qf֊Ckp5p)vMUPjT|Xsm\*_OaZPf!Bk)O5zp)uR[k5UVmYV{'n]=mpa^gsdOuLiASwmI3vzq&}w+g^jbiazl dlnLg]pjOsIn@vqk3Fy/u'&|yQdagx fixialkknB\npNuqpr@tut3#wx<'{{Satpad@qwfsWiit[lv5Mow@ s4yb2v{1'*z}.^y.[ayvfdzhg{%[j{Mng|l?r }&2u}'>z~ގ\ƁR_uwc h f1gZYi"Lm+?Rq2u)'Oyk]Zi{^MtagWdԇmYh]IL!l()?p* 2t}']x聫Y\t`L/fc'Y3g`!KkU>o}2ts'ix}ƌX|Y[7s_YvfJbҒXfKdj>n2Ks'rx'rU~LsYqqu)]Odva#WFx eIyiOr7)t.̂wY&y߂=|eǀq,\rS€t JWuz@߀w7sx.zN&Ł | *l}e~w\M5xS3OyIXzf@{j{77R|.}&E~ i dv}d~}[}~R~~Im~!@$~P07(~_.~' +c|([j|Rq|*I>}{@}U7}[.~='~k c{*[{ʊOR|#H|Q?|U6}.}'$~x W^㓈TVXN \fE%`a<~d3h*ˊm#Mr&w^[U^MwvbDep;ȋyi 3 l*dp#u yU]XgbUEddL=gD:jb;}md2.p+s#wl&z\hT jLClCȈo6;+q2̆t.+zv$0{y|e\ oT&pKErECKAs:5u28w+$Fy$aw{}[u uaS{~v|KGwBx:y2z+17|@$}+~Z{S |'Js|B|:n}w2~+GM~$<gZFpRJhTB\:4݀2P7+?$ہ2 Z3HHR'Jy B_τ:b2ZM+|߂$/TܜT#MZWE [>_6&d.`5h'Emm| r҈~wToRaX1R^DteA6lC*sJ>9Dz|JoP`V+R]LD,d}b6k^*rރK(f9k'y7oԃ-}t$ysyTJnXc]EXa@`MUeBj]7`o7-ct@>$ywlsQltWU+buYdVwU]KBxb?zf4|k*W~p!dvuoXkp\La.r_VtscJvbgC?Vx~k04zoO*l}Ds!xtkq`jmcj`4ofVUAqiKJtlX>vo4Oy!r*u{v" ~z{sLhh9igjju_llT|odnIlqqS>{ts4!wve*zy8"M}|/re)ohRgqs^ jsSmBtHpv)>*s2w4vfy*y{"} }q!bwvgexa]phy7RkpzH^nz=q{3uK|*x}"|`pS`k~fc\f5Rei@Gm1W=yp3tW*x("{р8o^f4a\AeAQh3Gxl=!oɂ3sY*w"{]2o9]$e`[deQgG.k%`[nb 5f,Mk$bCq5ՄvaCjWY[OPGJ^G6b=f4Ձ{j,[o8$sRqx`C|^X |aO}dF~.g=~kC4n,Z\rv$OvaIz[_Tye^W"zgN{j_E{l=|o4T}r,N~u% xI{^pvOlVNwnMxoEFyq<{t4|Nv6,B}x%0zkn}G]srUult!MGvunDx!vb.8XfH0j(fo "5sxV]IO;`uGc?vg7(j/nX(Ճr6"vFgzLUҁcNvfSF܂7i?#4k7P(n/,q(?u%"rxЂ{U)j Ml&F9nL>1p7 ar/u_(w"`z)}T_|p[M}qE~sz>-~|u6~v/Mx(z#t|ts~;SzvyL{wEB|{xt=} yn6{}z/k~2{)~|#D~!{3SAx|YLz/|D{&}-={}6@|}/:}R~x)~#o~RwqKxDz=qzX6U{/h||)'}c#~~NؓOHJSAqX:=\2av+#f%AzkqovM̐UGRY}@]_9}?aq2le+jO%lo RsGxM[F,_?Ռ)b8f2i+y1m%q [v/; z>LxaE|d?1g8{j1ɇm+eoqF%jt xM{Kڈ^gESj!>{l8o1q+\t%τwb }zA|KAmDƅo>@qn7Ąs^1s9up+cw%y!&| aN~JsDL t=v"7w{1Lx+Zmz&|![}~JLy/C炗y=z7V^{X1-|2+E} &2~!~ځ,I|~CR~=U~71l~1$0+T|&(!ĀTmft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92EJL`KqJڪMϩVȨaŪk¬u}ŶʲЫ֤ܚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚ82EJK`IqHۭJЬRɬ]ƯgñqyIJˬХ՝ړޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ82EJJ_HpFܯGҰNʱWȶbźlxŭ˧ϠӘ׏ڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏ82DKI_FoDݳCӶH̷Q\lxƩʢΛєԌ׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌72DKG^DnA߸>ֽBJ¾\lxƥɞ̘ϑҊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊ72DKF^Bm>};yN_kzpwtuwsyr{q}poˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀ )A$U5eFpTy{avhrnoqmtkwjyizh|g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@OTNdOuQڥXѢbɟmşwžùǶ˳ϱԮקէէէէէէէէէէէէէէ9*F@NTMdNtOۧUҥ_ʣiŢt¡}øȵͱӮاڡ֡֡֡֡֡֡֡֡֡֡֡֡֡֡9*F@MTLdLtNܪSҩ[˦fƥpåzøɳϰիڠܛ؛؛؛؛؛؛؛؛؛؛؛؛؛؛8*E@LTKcKsLݭPԬX̪bǪlĪv~¸ɳϬգښܖؖؖؖؖؖؖؖؖؖؖؖؖؖؖ8*E@KSJcIrJްMհUΰ^ɰhƲsò|ɮϥ՜ڕّّّّّّّّّّّّّّܑ8*E@JSHbHqH߳JֵQжZ̸eʽq{ȦΝԔ؎یٌٌٌٌٌٌٌٌٌٌٌٌٌٌ8*E@ISGaFpFGٻNӿWcpyǠ͗Ҏׇه؇؇؇؇؇؇؇؇؇؇؇؇؇؇7*D@HREaDoC}DJTbnxǛ̓Њԃւււււււււււււււ7*DAFRD`BnA{BFRamxƘʐΈтӀӀӀӀӀӀӀӀӀӀӀӀӀӀӀ7*DAEQB_?l>x@FQ`mxŕȎˇ΂6*CACP?]Rcpzċņǂ5*BA?7J0R/U,h0BWgs|2*8=/E)H%R)l1EZit|~~~~~~~~~~~~~~~0*/8&<;#W*o5J]ku{~}{zyyyyyyyyyyyyyyy.*%0-A#Z.o<O_lt~x{{y}xvāuÃtÄs†s†s†s†s†s†s†s†s†s†s†s†s†s†s†$%#,F&[5lDzSb|lxquusxqzp|o~ǹm̂l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄ 1G,Y]?fCmMoNYfqyĆǀ|zyyyyyyyyyyyyy5"B7AE=P;Y69A4H3M6P6g;{HXgr{|zzzzzzzzzzzzzz2":43=.B/A.U3k;~J[is{}{ywwwwwwwwwwwwww1"31+6&6&A,Z3n=M^ktz}|zywussssssssssssss.!*+",-#G+]6oB}R`l~s{wx{v~tǀsƂqńpćnĊnËnËnËnËnËnËnËnËnËnËnËnËnË* "3#J.^FJFVHbKmOwU^lȷqw}Ɣɐˌ̊ɊƊƊƊƊƊƊƊƊƊƊƊ6C.F>EJEUFaIkNtU{ajĺpu{ŎȊʆˆɆƆƆƆƆƆƆƆƆƆƆƆ5B.E=DICTD_GhMpVudzinty~ĈDŽɀʁȂƂƂƂƂƂƂƂƂƂƂƂ5B.D=BHASB]FeMkXmazgmrw}Â}z{}}}}}}}}}}}}5B.B<@G>Q@YD`NcYg`yfkpv{}xvuwwwwwwwwwwww4A.@;=E;N>UDYOZQlZ}biqw~|yvtrrrrrrrrrrrr3A/=::C8J;OENF_KqR[fpx|ywvtttttttttttt3>.975?5D9EBHDRHZNaVgbmgmrx~‚ƒ3A&B3@=@GBOGWM]X``lf~kqv|}{}3A&A2?<>EAMESNVZW^kd}jotzzwtwzzzzzzzzzzz3A&?1<:IDMOMWV]jc{hmsx~ytqnqttttttttttt3@&<0989?%9.656::WEgKuS^h|qxwt}pȂnLJkŋiĐhĖfÞeåeåeåeåeåeåeåeåeåeåeå//*"$!# -55I4N?\JfUoy^urd{nk~jphueyc}bځ`ڄ_ه]؋\א[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔  !.,?7MDXOaxYhq_mjdqgjtdowbty`xz_{{]~|\}[~ZYXXXXXXXXXXX   $//==IIRxTZpZ_i_ddegaji^nk\rm[vnZyoX|pW~pVqUrTsStStStStStStStStStStSt'-49~BCwMJnSPgYUb^X^d[[h]Yl^Wp`VsaUvbTxbS{cR}dQdPeOfOfOfOfOfOfOfOfOfOfOf*(~82vD:mKAeQF_WI[]LXbNUfPSjQRmRPpSOrTNuTMwUMyUL{VK~WJWJWJWJWJWJWJWJWJWJWJW->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;VG[Ta`hkpuz䇃߂~zwtrpnmll¤nĤoĤoĤoĤoĤoĤoĤoĤoĤoĤoĤ->K.Q:TGXS^_djluv~䊀߅ۀ|yvsqonmn§p§q§q§q§q§q§q§q§q§q§q§->J-O:QFVR[^aihtq~|߉ۃ{wtrpooqrssssssssss->J-M9OESQX\^herm|wߌۇց}yurporstuuuuuuuuuu->I-L9NDQPV[\fbqi{s}ۊքzvsqqtuvwwwwwwwwww->I,J8LCOOTZYe_ofyoyێևҁ|xussuwxyyyyyyyyyy->H,H7JBMMRXWc]mcwkuܒ~ӌ̆ƀ|yvvwyz{{{{{{{{{{->G,G7HAKLPVUa[kati~ޟsԘ}ˑĊ|zyz{}}}}}}}}}}}->F+F6GAIKNUS^Yh`qhz٥s͜zŕ~}}~->E+D5E@HILSR\Xe_mްivҩqȠx~-=D*C5D>FHKQPYWa^iڴisͬo¤v|-=C*B4B=EFJOOVV]`dԸgrȯmtz-=A*@3A2?;BBGINOWS^_˾dqjpv|~,=?(=1>9A@FEMIXK\^cphntz{xwz||||||||||,==';0<7?)F:MKUZ\hbwgm~svypŁjĉfÒbÜ`æ_ô_¨aaaaaaaaaa,51 .#-"3:.B@IPN_Ul\wc~jvqoyk΀g̈dʐbɘ`ɡ_ɫ_ɹ\â\â\â\â\â\â\â\â\â\â,0,'&- 73>EETLbRnXx}`vipqkxheцbύ`Δ^Λ]ͣ\ͭ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ,+$+&48>KGV}Q^vYen_jhendkraqt_vv]{x[yYzX|W}V~TSSSSSSSSSS   +06=@H}KQuTXmZ]g`bcfe_kg\piZtkXxlW|nUoTpSqRqQrPsPsPsPsPsPsPsPsPsPs־ "!..9:|DCtNJlTPeZT`_X]eZZj\Wn^Ur_Tv`RyaQ}bPcOdNdMeLfLfLfLfLfLfLfLfLfLf %1*|<4sF;jLAcSF^YIZ^LVcNThPRlQPoROrSNvTLyUK|UJVIWHXGXGXGXGXGXGXGXGXGXGX'{3$q<,hC2aJ7[P;VV=S\@P`ANdCLhDJkEInFHqFGtGFvHEyHD|ICIBJBJBJBJBJBJBJBJBJBJ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9G%N1U=[HaSh^ohxp~xz~vspnkjhgffǔfДhГiДiДiДiДiДiДiДiДiД( 9F$M0T >(@0C8H?NEUK޻^TдdeŬksqx~' 7=='?/B6G0C4L6R?YQ¾`bfpl}rx~}xustwx¨x¨x¨x¨x¨x¨x¨x¨x¨' 588#9(<,B.L-O=WP^`doj|pv||vrommp§r§r§r§r§r§r§r§r§r§& 466!6%9'@&I(NNLVY]eco~jxvpnwhc·_ΐ[͚YͥWβV“VДWϕWϕWϕWϕWϕWϕWϕWϕWϕ& ,& '4#=3EBKPR\Xf|_ntfulmzfua}]܆ZۏX٘VءTجTطSɋS֋S֋S֋S֋S֋S֋S֋S֋S֋$ &  &2(;8CFKRR\|Yds^kjdpeluatx^|{[}YVߒUޚSޢRݪQݶQݿQݿQݿQݿQݿQݿQݿQݿQݿ!   &1,;:DGLQ|SZsY`k_fefjamm]tpZzsXtVvTxSyQzP{O|N|N|N|N|N|N|N|N|N|  ' 2.=;EE{MNrTUkZZd`_`gb\meYrgWxiU~jSlQmPnNoMpLqKrKrKrKrKrKrKrKrKr )!4.?9{GAqNHjTNcZR^`VZfXWlZUq\Sv^Qz_O`NaLbKcJdIeHfHfHfHfHfHfHfHfHfͻ, 7+zA4pG;hMAaTE\ZIX_KUeMRjOPnQNrRLwSK{TIUHVGWFWDXDYDYDYDYDYDYDYDYDY".y8%n>-fE2_L7YR;UX>Q]@ObBLfCJjDInEGrFFvGEzHC~HBIAJ@K?K?K?K?K?K?K?K?K?K $w-l3c:$\B(VI,QO/NU1KZ3H^5Fb6Df7Ci8Al8@p9?s:>w:={;<~<:<:=:=:=:=:=:=:=:=:=u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁v$w5yBI'Q2X=_HfQ~nZywbuiqnmskvhyf{d}cba`Ă_΂_׃aۃc݃d݃d݃d݃d݃d݃d݃d݃d݃w$x5|AH'O2V=]GdQlZ|tbxitoptlxj{g~fdba`Dž`Ӆbمd܅eۆeۆeۆeۆeۆeۆeۆeۆeۆx$x5~@G&N1U<[FbPiYqb{{ivprunyk}ifecbaˇbՇdڇeوgىg؉g؉g؉g؉g؉g؉g؉g؉y#y4?F&M0S;ZE`OgYna~xiyptvp{mjgedbÉbЊd؊f؊g׋h֌i֌i֌i֌i֌i֌i֌i֌i֌y#z4>E%L/Q:WD]NeXkati|pwvs|okhfdcnjcԌf֌hՍiԎjԎkԎkԎkԎkԎkԎkԎkԎkԎz#{4=D$J.N8TBZLaVi_phzp{wv|qmjgfeǎfԏhӏjӐkґlґmґmґmґmґmґmґmґmґ{#|4<C$H-L7RAXJ_Tf]nfwo态v{}uqnkihhϓkѓlГmДoГoѓoѓoѓoѓoѓoѓoѓoѓ|#}4;A#F,K5P?VH]Qc[kdumކ~u؀|zvromlkȖmϖoΖpϖqϕrϕrϕrϕrϕrϕrϕrϕrϕ|#}4:@"E+I4NEK2TC[Saahmnwtz{upmjiÜk˛n̚o̙o̙o̙o̙o̙o̙o̙o̙!+ 3214;?I0RBYQ`_fklur~xztojgdcd͘g͘h͗h͗h͗h͗h͗h͗h͗h͗!) 0.,/8 =H.P@XO^]dhjrpz{vt}nhda^]]Д`ДaДaДaДaДaДaДaДaД!( , (& (2 >G,O=VL\Ybehn{ovtu|m|hc_[YXWԎYӏZӐZӐZӐZӐZӐZӐZӐZӐ!'' !  0=F,N:UH[Ua`|gitnpmuvg|{b˄~^ʍZʗWʣUʯT˾SՆTوUىUىUىUىUىUىUىUى% /:"C1J>PJWT|^]tedlljftoa|s\لvYَyU٘{Sڣ|Qڰ}P۾}P|P~QQQQQQQQ  .9'B5IAPK{WSr]Zjc`dje_ri[zlWnSqPrNtLuKvJvJvKuKuKuKuKuKuKuKu !.9*B6JA{RIrWPi\VccZ]i^YpaUwcRfOgMiKkJlImHmGnFnFnFnFnFnFnFnFnӺ "/:+C5zL>qQEhVKa[O\bSWhVToXQuZN|\L]J_H`GaFbEcDdCdCdCdCdCdCdCdCdֲľ %2<)yE2oJ9gO?_UCZ[GUaJRgLOlNMrOKxQI~RGSETCUBVAW@X@X@X@X@X@X@X@X@XƸ  (4w<%mB,eG2]M6WS:SY=O_?LdAJiCHnDFsEDyFB~GAH?I>J=K$[D)TJ,PQ/LW2I\3F`5De6Bi7An8?s9=w:<|;;<9=8=7>6>6>6>6>6>6>6>6>|q$ h+_2W9Q?LF!HM#ER%BW'@[(>_)vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj$i2 l>vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj#i1 n>wE|M(~T3|\E%L.S8ZAaKiS|q[v|bqhmmiqfucxaz`{_|_}b}c~df߀g߀g߀g߀g߀g߀g߀g߀g߀o!o0 ~6<D$L-R6Y@`IfRnZ|yawhrnmsjwgze|c~bÀbӁd߁eނg݂h݃i݃i݃i݃i݃i݃i݃i݃i݃p!r/ 4;C"K+Q4W=]FdOkXu`|hwnrtnyk}hfee˄f܄hۅiۅkۅlۅlۅlۅlۅlۅlۅlۅlۅq!t. 3:C!I)N2T;[DbMiUs^ۂ|f|owurzoljiiĈi؈kوlوmوoڇoڇoڇoڇoڇoڇoڇoڇq v, 2:B G'L/R8X@_IgRڏp\чxfʁo|vw|tqomllϋn׋o؊p؊qىqىqىqىqىqىqىqىr x+ 09AE%J-P4V<\EܛeOғm\ʌufÆ}ov|}xusqppɍqՍs֌t֋t؊t؊t؊t؊t؊t؊t؊t؊s z* /9?C#H*N1T8\@՟bN˘k[Ñrfzow}}ywuttŏuԎvՍwՍw֋w֋w֋w֋w֋w֋w֋w֋s |) /8=A!F'L-R3ܪY?УaMƜiZpewov}~{yxxyӐzԏzՍ{֌{֌{֌{֌{֌{֌{֌{֌t~( .8<?D$J)Q.֮W>˧_MgZneun|v}~}}~Б~ӏ~Ԏ~Ս~Ս~Ս~Ս~Ս~Ս~Ս~Սt'.7:=B H$߷N,ѱU=Ǫ^LeYldsnzv|̑ӐԏՍՍՍՍՍՍՍՍu&- 68;?FڻK+ʹT<®\KcXjcqmwu~|}{ɑ|Ӑ|ԏ}Ս}Ս}Ս}Ս}Ս}Ս}Ս}Սu%- 568=EվI*ȸS;[JbWhbolut|{|yvtƑuӐvԏxՍxՍxՍxՍxՍxՍxՍxՍv$, 235:?H)ĻQ9YH`Ugamktszz{vronÐnӏpԎrՍrՍrՍrՍrՍrՍrՍrՍw", 0 /17 ;F'P8XG_Te_kirqxx~ztoliggՎiՍl֌l֌l֌l֌l֌l֌l֌l֌x!+, * + 29E%N6VE]Rc]igpovvy}|snieca`ҋc׋e؊e؊e؊e؊e؊e؊e؊e؊z )'$$'7C#L4TB[ObZhdnlytrs{xm}hc_][ZЇ\ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ~& %5A!K1R?YL`Wf`zlgssmlzsgwb{^~ZXVUρVނX݂X݂X݂X݂X݂X݂X݂X݂ &6@I-Q;XH^R{eZskalrgfylaǁp]ƊtYƔvVşxSƬyRƻzQyQzS|S|S|S|S|S|S|S| &4? G-O9VD{]LsdTlkZfr_ayd\ԂgXԋjUԕmRԠnPԭoNռpMoMpNrNrNrNrNrNrNrNrع  ' 4>$G0N:zTCqZJiaPdhU_pYZx\V_SbPdMeKgJgIgHgJgJgJgJgJgJgJgJg ۱ʽ (5?&G1yN9pT@hZFa`K]gOXnRTuUQ}WNYK[H\F^D_C_B`A`A`A`A`A`A`A`A`ާ˶ +6@&xH/oM6gS<`X@[_DVeGRlIOrKKyMHOEQCRAS?T=U=VLh@InAFuCC|D@F=G4>3?3?3?3?3?3?3?3? y o( g0_7X>RDLJ"HP$DU&AZ'>_);d*:i+8n,6t-4z.3/1000.1-2-2-2-2-2-2-2-2 ujb!Z) S1M8H>CD?JwFxN(wV1t_:nhAjsHf~NbS_V\ZZ\X^W`UaTbScSdRdTdVdXdYeZfZfZfZfZfZfZfb$^/j5 t<zD|L'{T0w\9reAloHh{NdS`X][[^Y`XbVcUdTeSfTfVfYfZg[h\h\h\h\h\h\h\hc$_.m3 w:}BJ&R0|[8wcAplHlwOgTcY`\]_[bYdXfWgVhUhViYh[i\j]k^k^k^k^k^k^k^kd#a-p2 {8@I%Q.Y7|a@viHpsOlUhZd^aa_d]f[hZjYkYkYk[l]m^n_n`o`o`o`o`o`o`oe#d+s0 ~6?H$O-W6^>|fFvpNq{UmZi_ecbf`i^k]l\m\n]n^o_qaqbrcrcrcrcrcrcrcrf#g)w. 5>G"N+U3\_JeUl^sfzlrw|{wtrƒrڃsށt߀uuuuuuuo#+,,16ɻCM.V<]IdTj]qexkqvyzu~qnlkՂmށo߀pppppppq!)'&*5ĿAL-T;[GbRi[ocvj~|oxtsyo|khfeрfh~j~j~j~j~j~j~j~u % "3 @J+S9ZEaPgYm`~tgxzmrrmvhyd|a~_~_~_}b}c|c|c|c|c|c|c|x0 >H(Q6XB_MeVk]xrdryilngrbu_x\zZzYzXz[z]y]y]y]y]y]y]y} . ;F%O3V?]IcRxjYqp_kwdfiam]pYrVtTtStStTuVuVuVuVuVuVuVuٸ +9D"M/T;[DxbMqiSkoYev^`~b\‡fXhUkRlPmOmOlOnPoPoPoPoPoPoPoگͻ +9CK*S5yZ?qaFjhLeoR`vV[~ZWχ]Sϑ_PϜaNϩcLϸcKcLbJeKfKfKfKfKfKfKf ަδ¿ - 9B J*wP3oX;i_AcfF^nJZuNV}QR߆SOߐVMߛWKXIYHYHYGYF[F[F[F[F[F[F[ѭ¸ .:C!vJ*nP1fV7`\<[d@WkCSrFPzIMKJMHNEPCQBQARAR@Q@Q@Q@Q@Q@Q@QԥIJ$1~;tB lH'eO-^U1Y[5Ub8Qh;Mo=Jv?G~ADCBE@F>G4>3?3?3?3?3?3?3? v$n- f5_<XCSINO!JU$F[&C`'@f)>k*;r+9y-6.4/1001.2-3,3,3,3,3,3,3,3}rha'Z/ T7N>IDEJAO>U;Y9_6d4i2p /w!-"+#($'%&&%&%&%&%&%&%&%&xo d\T N'H/C6 ?< sHrQ&oZ.jc6enxqFs{MnSjXg]e`ccae`g_h_i`iajbjcjdieieieieieiei^#i"v#, 6>EL"S*Z2߅e;~mExvMtTpZl^ibgeehdjckclcldmflglhkhkhkhkhkhkhk_#k y"+4 <CJP&X.׊a:΄jE~sMy{Uu[q`ndlgjjhlgngogohoiojnkmkmkmkmkmkmkm_#n{!*2 :AGM!ږU-Ϗ^9ȉgDoM~wUy[v`sephnllnkpkqkrlqmpmpnonnnnnnnnnnnna!p~ )1 8 >DߠJӚR+ʓ\8dCmMtT~|[zawetirmpporosospsprqqqpqpqpqpqpqpqpc r'/6 ;@ڤFΞQ*ŗZ7bBjLrTy[`|eyjwmupssstsutttsuruqupupupupupupet&-4 7 =ԧDɡO)X6`BhKoSvZ~`e}j{nyqxswuwvxuxtxsxqxqxqxqxqxqxqgw$+03ܮ7 ϪCťN(W5_AfJmStZ{`ejn~q}t|u}|v|}v|}t}|s}|r}|q}|q}|q}|q}|q}|qiy#),/ײ4 ˭AL'U4]@dIkRrYy_dimq|tyvwvvvvtwsxrxqxqxqxqxqxqk{!&'ߴ)ҵ2 ǰ@K&S3[>cHiQpXw^~di~mzqvssuqvovptqsrrsqsqsqsqsqsqm~" ں!͸1 ´>I$R1Z=aGhOnWu]|c}hxltpprmtjuiuitksmqmqmqmqmqmqmqpӽȻ/<G#P0X;_EfNlUs[}zawfrjnnjqfsdscscreqgpgpgpgpgpgpgpsپ -:F!O-V9^CdLjS|qYvx_qclhhkdn`p^q]q]p^p`oaoaoaoaoaoaow׵ *8DM+U6\@bI|iPvoVpv[k}`fdbg^j[lXmWmWlWlZlZlZlZlZlZlZl| ح ͸ '6AK(S3Z<}aEvgKpmQjtVe|[`_\bXeUfSgRgRgQhShThThThThThTh ۥαŻ#3 ?H$Q.}X8v_?ofFilKdsP_{T[XW[T]Q_O`M`M_LaMbMbMbMbMbMbMb Ъŵ / <F~O)vV2o^9hd?ckD^sIZzLVʃORʍROʘTMʥVKʳWJWIVIXGYHZHZHZHZHZHZԢǯ !0 ;}DuM$nU+g\2bd7]k;Yr?UzCRڃENڍHLژJIڥKH۳LGLFLFLDOCOCOCOCOCOCOۚʩ %3 {<sDkK"dR(^Y-Y`2Uh5Ro8Ow;L=I?GADBBCAD@D@D@D@C@C@C@C@C@Cͣ (x2 p;iCbJ\P#VW'R^+Oe-Ll0Is2F{4C6A7>9=:;;:<9<8<8<8<8<8<8<8<|t&l0 e8^@XGSMOT KZ"Ha%Eg&Bm(@u*=}+:-8.6/40312212121212121212yog"`,Z4 T<OCJIGOCU@[>a;f9m6t 4}!1#/$-%,&+&*')')')')')')'~ukb[T&N.I5E< AC >H;N8S5X3^1d.j,r*z'%$#"!!!!!!~pg^ VOI C'?.:47:3?0D.I ,N )S 'X %^ #d !l t }L*H3O4T7ZA\JZTW`$Tk*Px/M3J6G9F;EC?B?B@AAAAABABABBADAFBGBGBGBGBGBGBM)J2Q2W6\?^I]SZ^$Wi*Su/P4M7J:HFNW&~a1xj:ssBo|HlMiQfUdXcZa\`^`_`_a_a_c_d_d^d^d^d^d^d^[ ht~#+4 ;CJڊT%Ѓ]0~g:xoBtxHqNnRkViZg\e_dadbdbdbebfag`h`h`h`h`h`h`]jw!)18 ?ݔGҎQ$ʈ[/ƒd9~lAytHu|NrSoWm[k^j`hchdhehdidjckbkakakakakaka_mz'.5; ֘C̓O"čX.a8iA~qHzyNwStXq[o_nbmdlflflfmendncnbnbnbnbnbnbao|$+1ݠ6 ќAǗM!V-_7g@nH~vN{}SxXv\t_rbqepgphpgqfrerdrcrcrcrcrcrccq!',ؤ2̟@ÚK U,]7e?lGsM{S}Wz\x`vcuftgththugvfueududududududet#ߦ&ҧ0ȣ>IS+[6c?jFqMxRW\}`{czf~yh{yizyiyzhzzfzyezydzydzydzydzydzydgv۫Ϊ/Ħ=HQ*Y4a>hEoLvR}W[_~czfw~hu}is~is~ht~ft}eu|du|du|du|du|du|dixծʭ-;FP)X3_bpC^wGZKVNSPPRMTLTKTKTJUJVJVJVJVJVJV֘ɥ(6 AyJrR&lZ-fa2ah7\oqHjPdX%__*[g/Wn3Sv6P9Lӈ;JӔ>GӠ?EԮ@DԿAC@D@BBADADADADADADјå }&u2n<gEaM\U W]$Td'Pk*Ms-J|0H2E4C5A6@7?7?7?6=8=8=8=8=8=8ơyq'j2d; ^CXKSRPYL` Ig#Go%Dw'A)?*=,;-9.8/7/7/6/6/6/6/6/6/{tmf&_/Z8 T@PGLNHUE[Bb@h=p:x8 6"4#2$1%0&/&.&.&.&.&.&.&yphaZ#T+O3J;FB CI @O=U:[8a5h3o0x.,*)('&&&&&&xlc\UOI&D.@4<;9A6F3L1Q .W ,] *d (l %u #! yk^VO IC> 9'5-23.8+=(B&G$L"Q W^enx        B-B2H2L6N<PGPRN_KkHw$E'B*A,?.?/>0=1=2<2<3;3;4;4;4<3<3=4?5?5?5?5?5?5C,D0J0N4Q:SFRQQ]Ni Kt$H(E+C-B/A0@1?2?3>4>4>5=5=5>5>5?4?6A7A7A7A7A7A7D,G.M.Q2T9WDVOTZQf Nr%K})H,F.E0D2C3B4B5A6A6@7@7@7@7A6A7A8C9D9D9D9D9D9E+I,P,U/Y7\B[MXWVc Ro%Oz*L-J0H2G4F5E6E7D8D8D9C9D9D9D9D:E;FH?J@J@J@J@J@J@G*P'X&^*c3f= fGdQ`[ \g&Yr+V}/S3Q5P7N9M;LK>L=K?KAJBLCMCNCNCNCNCNCJ(T$\#c(h0l; lDjNfXab%^m+[x0X4V7T9S;Q=Q>P?O@O@OAOAOCNENFPFQGQGQGQGQGQGM%W!` h&n.r8 rApKmTh^$di*at0^~4[8Y;W>U@TBSCRDRERFRFRHRIRJTJUJUJUJUJUJUJP#[dm$s+w5x>wGtPoZ"ke)go/cy5`:]>[AYCXEWGVIVJUKUKVLVMVMXMYMYMYMYMYMYMS ^hq"x(|1~: }CzLvWra(mk/it6e};b@`C^F]H[KZLYNYOYOZPZPZP[P\P]O]O]O]O]OValu |%.7 ?H}Sw]'rg0np7jxHQ%X._5f<}mAxtFs{KoOkRgUdXaY_Z_Y_Y_XaWaWaWaWaWaWo  ߍҘʢ© /<FO#V,]3}d9wk?rqDnyHiLePaS^U[WZXYWYWYV[U[U[U[U[U[Us ̜ؑå ,9DM T)}\0wb6qi|HuP!oX'j_-ee2`l6\t:X|>UAQDNFLHJHIHIHHIHJHJHJHJHJHJΔ¡ /{; tEnNhV!c]'^d+Zk/Vr3S{6O9LG?F@E@E?DACBCCCCCCCCCC֍ƛ y*r7lBfKaS\[Xb#Ti'Qq*Mz-J΃0HΎ2EΚ4CΨ5Bθ6A5A5@7?9>9>9>9>9>9ʖx sn&h3b> ]HYPUXQ`NgKo Hx#Fށ%Cތ'Aޘ)?ަ*>ߵ*=*=*<+;-:.:.:.:.:.vnic'^2X;TD OLLSI[FbDjAr?{<: 8!7"6#5#4#4#4#4#4#4#4#uid^Y&T0O8K@GG DN AU?\A;G8N5T 3Z 1a /i ,r *} (&%$#""""""sgYSMHC?&:-73390?.D+J)P'V$]"e ny         tgXMGB <840%,+)0%5#: ?DIOV^hr~      9/<0A1D4D:DEEQ C]Ai>v<:9 8!7#7#6$6%6%5&5&5&5&5&6&6&6&6'6(6(6(6(6(9/>/D/F2H8HCHO G[DgBs?=$=%=&<'<(;);););*;*;)<)<*;+;,;-;-;-;-;-<-D)J)N,Q4R>RJ PUMaJmHxE"C$B&A'@(@)?*?+?+?+?,?,?+?,?->/>0?0?0?0?0?0@*H&N&R)V2W<WG UQR]PiMt J#H&G(F)E*D+D,C-C-C.C.C.D-C0B1B2B3C4C4C4C4C4C'K#R"X'\/]9^C [NXXUdRo Pz$M'L)J+I-I.H/G/G0G0G0H0G2G4F5F6F7H7H7H7H7H7F$O V]$a,c5d@ bJ^T[_Xk Uu%S(Q+O-N/M0L1L2K3K4J5K5K6J8J:J:K;L;L;L;L;L;J!S[b"g)i2j< hFePa[^f [q%X{)V,T/R2Q4P5O7N8N9N:N:O;N=N=N>O>P>P>P>P>P>MV_g l&o.p8oB lKiWebal%]v*[~/Y2W5V7T9S;SR?R?R?RARASASATATATATATAPZdlq#u*v3v= sGoSk^fg&cq+`y0^4\7Z:YW@VBVCUCVDVDWDWDXDXDXDXDXDXDS]hpv z&|.|8zD uOpZlc&hl,fu1c}5a9_<]?\A[CZEZFYGZGZG[G[G\F\F\F\F\F\FU`ktz")ނ3@ zLvVq`%nh,kq2hy6f:d=b@`C_E^G^I]J]J^J_I_I`H`G`G`G`G`GXcnw~#և.̃= I{Sv]%se,om2mu7j|;h>fAeDcGbIbKaLaLbLcKcJdIdIdIdIdIdIZfqz݋Ћ,Lj; GQ{Z$wb+tj1qr6oy;m?kBiEhHfJfLeMeNfNgLgKhKhJhJhJhJhJ\ht}֏ˎ*Œ8 DOX#|`+xh1uo6sv;q}?oBmElHkKjMiNiOjOkNkLkKkKkKkKkKkK^kv ۏ Вǒ'6BMV"^*}e0zl5ws:u{>sBrFpIoLnN}nO{mPznPyoNyoMyoLyoKyoKyoKyoKyoK`m y ۋ ԑ ̕•%4AKT!\)c/~j5|q9zx=xBvEuI|sLyrNvrPurPsrPtsOtsMtsLtsLtsLtsLtsLtsLbo { ކՎϔ ǘ#2?IR Z(a.h4o9v=}~A}{EzyIvxLswNqwPovPnwPnwOnwNnwMowLowLowLowLowLd r ~ڈАʗ›!0=GPX'_-f3m8t={{AxEtHq}Km|Nk|Oi{Ph|Ph|Oi|Ni|Mj{Lj{Lj{Lj{Lj{Lf uԋ˓Ě.; ENV%],d2k7zrmBiFeIbK_M^N\N]M]L]K^K^K^K^K^Km|Ոʒ )6 AJR!~Z(y`.tg3on8kuQ@OBMCLCLCKCKDKDKDKDKDKD}ϋ–-}9 wCqLkSfZ"ba&^h+Zo.Vw2S5O8L:JE?E?E?E?E?ڃǑ {(u5o@ iIdQ_X[_ Wf$Tn'Qv*M-J0H2E4C4B5C4B5A7@7@7@7@7@7΋{tp"k0f<aE \NXVT]QdNlKt"H~$EȈ'Cȕ(AȢ*?ȱ+>+>*>+=-<.<.<.<.<.ē{pg d`*\6XATJ PR MZJbGiErB|@؇=ؓ<ء:ٰ 9 9 9 8"7#7#7#7#7#{pe]ZV'R2N<JDGMEU B\ @d>l;v9754221111111{ocXTQM&I/E8A?>G94 0,)&""',16<AHOW a l y 116.:/;2;9;C9O8\ 6h 4t2100//.........//......3/9,=->0?6?A=M<<;::9999999:9!9#9$9$9%9%9%9%<'C#H"L&O/P9NCLO J[HfEqC|BA@?? > >!>!>!>!>!?!>#=%='=(=(=(=(=(=(?#G LQ$U,V5U?SJ PVNbKmIwGFE D!C"C#C#B$B$C$C$C%B(B*B+A+A,A,A,A,A,C JPW![(\2[;YF VQT]QhOrM|K J!I#H$G&G'F(F(F)F*G*F,F.F/F/F/F/F/F/F/FNV\`%b-b7`A]L ZXXcUnRwP"O$M'L(L*K+J,J-J.J/K/J1J2J2K3K3K3K3K3K3JRZaf!h)h2g<dH aT^^[iXr V{$T'R*Q,P.O/O1N2N3N4N4N5O6O6O6O6O6O6O6O6MU_fkm$n,m6kCgOdZ`d]m"[v&Y~)W,V/U1T3S4R6R7R8R8R9S9S9S9T8T8T8T8T8OYcjort&t1q?mKiVf`ci"`q'^y+\.[1Y3X5W7W9V:V;VZ?Z?[>[>\=\<\<\<\<\`>`=`=`=`=Wb l t z ~ ҁȁ'6|B xMuVr_"of'ln,ju0h|3g6e9db@bBbBbCcBcAd@d?d?d?d?d?Yd n w}Ԃ ̄Å$4@ |KyTv\!sd&qk+or/my3k6j9h I}RzZ wa&uh+so/qw3o~6n:m=k?|kByjCxjDvjEvkCvkBvkAvl@vl@vl@vl@vl@] it|ЃɈÊ /< GP~X|_%yf*wm.ut2t|6r9|q=yp@voBtnDrnEpnEpoDpoCqoAqo@qp@qp@qp@qp@_kvˆŋ -: ENV]$~d)|k-zr2}xy5zw9wvf~Ac~Ca}D`}D_}C`}B`}Aa}@a}@a}@a}@a}@gtLj&3? HPX z_%ve*rl.ns2j{6f9c<`?]A[BZCZBZA[@[@[?[?[?[?jx̓Œ#1< FNzVu]#pc(lj,hq0ey4a7^:Z=X?V@T@T@T?U?U>U>U>U>U>o|ȇ .9 CyLtSoZ ja%fh)co-_w0[4X7U9R;P=O=O,=-=-=-=-=-ljsj gc(_5[?WH TP PXM_JfHnExBÂ@Î>Ü<ë ;ü!:!;!9"8$8$8$8$8$uj^YW!U.Q9NCKLISF[ Cc Ak>u<р:ь8њ6ѩ5ѻ45433333uj^TL JH&F2D<BE?M=U;]9f7o 5z 3 1 0..--,,,,,vj^SIEB@$=.:68>6F3M1U/]-e+p){(&%$#""""""wj]QF?<96 3(10.6+=)D'J%R#Z cn{xj]PD:52 .+(!&'#- 39?EMU_jx       yk^PC8/+'$!#(-28? F OYer,/0,2,30160A/M-Z+f)s(~ ' ' ' & &&&&&&&&&&''&&&&&&.,3)5*6-645?3K2W0d.p ,{ , + +****)))))**+***))))1)6&9&:);2;=9H7T5`3l 2w 0 0//.........//.......4&9#=#>&A/A9?E=P;\9h 7s 6~5443333333334332322228#= AE#G,G6F@DLAX?d >o>=========< qInRl[ibgj"fq%dx(c+a.`0_3_5^6^8^8_7~_6~`5~`4~`4~`4~`4~`4U`ipuxz{z/x<uF sPpXn`kg!jn%hu(g|+f.d1c4c6|b7zb9yb9xc8xc7xd6xd5xd5xd5xd5xd5Wblsx{} ~~,|9yD wNtVr]pd nk$lr(kz+j.~i1{h4xg6vf8tf9sf:rf9rg8rg7rh6rh5rh5rh5rh5Yenv{ *7}B {KxTv[tb ri$qp'~ow+{n.xm1vl4sk6pj8nj:mj:lj:mk8mk7mk6mk6mk6mk6mk6[gqy~ (5@ I}R{Yy`wg#|un'ytu*vs}.sr1pq4mp6ko8io:ho:go:go8ho7ho6ho6ho6ho6ho6^jt|%3> GPW~^{|e"xzl&tys*qx{-nw0kv3hu6ft8ds9bs:bs:bs8cs7cs6cs6cs6cs6cs6amw#0<ENU{\wc!sj%oq)l}y,i|/f{2cz5`y7^y8]y9\y9]y8]x7^x6^x5^x5^x5^x5dpz .9C LzSuZqa nh#jo'gw+c.`1]3[6Y7W8W7W7X~6X~5X~5X~5X~5X~5ht~+7A yItQpXl_hf!em%at(^},[/X1U3S5R5Q5Q5R4R4R3R3R3R3ly '~4y>sG oOjVf]cc_j"\r%Y{(U+R.P0N1L2L2L2L2L1L1L1L1L1q~|#w0r;mD hLdT`Z]aYhVp!Sy$P'M)J,H-G-F-F-F.F.F.F.F.F.w}wso,j7eAaI ]QZXW_SfPnMvJ!H$E&C'B(A'A'@(@)@)@)@)@)~ul ie'a3^=ZFVN SU P\McJkGtE~B@> < < < ;!:":#:#:#:#yma]Z X-T8QBNJLRIY F` DhAq?|<:8767554444{ocXP ML%J1G;EDCLAT>\=<&;19;8E6M5V3^1h0s.,ۍ*ܝ)ܭ(('&& & & & ~qeYMC:5 31 0*.3-<+D*L(T']%g#s" reYLA8/- +(&$$+"2!9AIQZersfYK@5,&$ !"(.5<CL V b ougZK?3)!  # (.5=FQ]k{',**+**.&4%?#K!X dp{     )*,'.'-*,2+=)I'U%a#m"x"!!!!!!!!!!!!!"" " ! ! ! ! ! ,&0$1#1&2/1:/F-R+^)i(u''&&&& & & & & & & & ' ' & & & &&&&/#3 57#8,876B4N2Z0e.p-{-, , , + + + + + + , , , , ,,,,,,,37:= ?(?2=>;I9U7a5l4v3 2 2 2 1 1 1 1 1 1 2 2 2111111117;?CF$F.D9BD?P=\FJDVCbAl @u ?~ >==<<<;;;<<<<<<<<<<>DJOQR#Q-O8MEKQI\Gf FpExDCBBAA@@@@AAAAAAAAABG OSVWV%U1S?RLPW Na LjJrIzHGGFFEEEEE F!F!F"F!F!F!F!F!EK S W Z[ZZ+Z;XHVS T\ RePmOuN|MLKJJ!I"I#I$J$J$J%K$K$K$K$K$K$H OV[ ^ ^ _`'_6^C[N YXWaUiTpSxRQP O"N#N%N&N'N'N'O'O'P&P&P&P&P&J SZ_bc ce#e2c@aK ^T\][eYlXsVzU T"T$S&R'R)R*R*S*S)T)T(T(T(T(T(LV]cghhj i/h<eG cQ aZ_a^i\p[wZ~!Y#X%W'W)V+V,V,W,W+X*X*X)X)X)X)OY`gjllmn,l9jDhN fWd^be`l_s^{!]$\&[([*Z,}Z-|Z.zZ.z[-z\,y\+z\*z\*z\*z\*Q[djnpp qq)p7nBlK jTh\fceicpbx!a$`&}_){_+x^-v^.u^/t^/t_.t_,t`+t`+t`+t`+t`+S^gmqss uu't4r?pI nRlYj`ighnfu!}e}$zd&wd)uc+rb-pb/ob/nb/nc.nc-nc,nc+nc+nc+nc+U`iptwwxy$x2v=tG rOpWo^md}lkzks wjz#ti&rh)og,mg.kf/if0if0ig/ig-ig,jg+jg+jg+jg+Xclsxzz{|"|/z;xE wMuUs\{rbxpiuop rnx#om&ml)jl+hk.fk/dj0ck0ck/dk-dk-ek,ek,ek,ek,[fov{~~-9}C {K ~zSzxZvwasugptnmsv"jr&hq(ep+bp-`o/_o/^o/^o/_o-_o,`o,`o,`o,`o,^iry+6@~I yQu}Xr|_n{ekzlhyt"ex}%bw'`v*]u,[u.Zt/Yu/Yt.Yt-Zt,Zt+Zt+Zt+Zt+amv} (4~>yG tOpVm]icfjcr `~z#]}&Z|)X{+V{,T{-S{-Tz-Tz,Ty+Uy*Uy*Uy*Uy*eqz $}1x;sD oL kTgZdaah^p[x!X$U&R)P*O+N+N+N*O*O)O)O)O)ju{!w-r8mBiJ eQbX^_[fXmUvR!O#M%K'I(H(H'I(I'I'I'I'I'o{~wso)k5f?bG_O \VX\UcSkPsM}JG!E#D#C#C#C$C$C$C$C$C$utn jf%c1_;[DXKUS RZ OaMhJqG{DB@>====<< < < |{oc_\Z+W6T@QHNOKW I^ Ff DnAx?<:988776666sgZS QO$M0J:HCFKDRAZ?b=k :u 8 64321100000ui^SGCB@'?2><5-% $#"%!. 7@JS^jx{naTH=3*" &-5=FP[i x }obUG;1'  # ) 08ALXfwqcVH:/% #*2<GTcs")#'#( +1=IVbnx$'&$&$$'"/ :FS_ju'#) ) (#)-'7%C#O![fq{+--. /)/4,?*K(W&b%m$w############$$$$$ $ $ $ $ .1256%6/4:1F/R-],h+r*{***)))))***** + * * * * * * 258;= <*;59A6M4X3c2m2v11000//// 0 0 1 1 111111169>ACB#A.>:=Ft ={ = < <<;;;;;;<<<<<<<<= BH K LLJJ,K;JHHSG]Ff Dn Cv C}BAA@@@@@@AAAAABBB@ FLOP O OQ'Q6PCONMXLa Ji IpHxGGFFEEEEEEFFFFGGGBJPTVU UV"W2V?TJSTQ] PdNlMsLzLKJJIIIIJJKKKKKKEMTY[[Z[\.[;ZFXPVY U`ShRoQvP}PONNNN N!N!O O OPPPPGQX]``^ `a*`7^C]M[U Y]XdWkVrUyTSSRR!R"R#}R#|S"|S!{T!{T {T {T {T JT\addc de'd4c@aJ_R ^Z]a[hZoYvX}XW}V {V"yV#wV$vV$uW$uW#uX"uX!uX!uX!uX!MW_dghghi$h2g=eGdO bW a^_e^l]s}]z{\y[v[!tZ#rZ$qZ%pZ%o[%o[#o["o["o[!o[!o[!OZbgkljkl!l/k:iDhM fU e\db}bizbpxaxu`s_p_!n^#l^%k^&j^&i^%j_$j_#j_"j_"j_"j_"R]eknonopp,o8mBlK jR ~iY{h`wffufnreupd~mckc"ib$gb%eb&db&db&eb$ec#ec"ec"ec"ec"U`hnqsqrst*s6r@pH}oP ymWvl^skdpjlmiski|hhfg!dg#bf%`f&_f&_f&`f$`f#`f#af"af"af"Xckquwuv wx'w3v=|uFxsN urUqq\npckojinqfnzcmal!_k#]k%[k&Zk&Zk%[k$[j#\j"\j"\j"\j"[fnty{yz {|$|1|{;wzDsyL pxS lwZivaguhdtoasx^r\q Zq"Xp$Vp%Up%Up%Up$Vo#Vo"Wo"Wo"Wo"_irx}~!{.w9rBnJk~Q h}Xd|_b{f_zm\yuYxWxTw!Rv"Qv#Pv$Pv#Pu#Qu"Qt!Qt!Qt!Qt!cmv}}yu+q6m?iGeO bV _\\cZkWsT}QO~M~ K}!J}"J}!K|!K{ K{ K{ K{ K{ gr{|vrn'j2f<cD`L\S ZZ WaThQqOzLJHFEEEEEEEEmxtn if"c.`8\AYIVPTW Q^ NfLnIxFDB@????????s~{le`][)X4U=REPMMTK[ Hc Fk CuA><:99998888zuh[V SQ#O/L8JAHIFPCXA_?h=r :} 8 6433322222ymaUKGED'B2A;?C=K;S9[7d5n3y1/.- ,, + + * * * }qdYMB; 875)423;2D1L/U.^,h*t)'&$###""""sg[OD:0* ('&'%0$9#B"K!U _lz͊͜ήuh\PD90(  "+4=HS_m~ߑ wj]PD8.%   ! ) 1 ;EQ^nyk^QC7-#  %.7BN]n{m`RD7+!  !)3>K[l&$%'.:G S _ k u           #!!$,7DP\gr{""! )4@LXcnw%&$%&%$0!;HT_is|)*),,!,+)7'C%O#Z"d!n!w!!!    !!!!""#######,.0332%00.<,I*U*_)i)r(z(((((((((()****** * * 02 6 8975(352B2O1Z1d0m0u0|/////////00 0 0 0 0 0 0 0 3 6< > =<99-:<:I9T9^8g7o7v6}6655 5 5 5 5 5 6 6 6777777;@BB ?>@'A6ADAO@Y?a>i=q=x< < ; ; ; ; :;;;<<<<<<<:@EHHF EG"H1H?GJFTE]DdClBs Bz A A @@@@@@@AAABBBB<DJNOMKMN-N:MFLOKXJ`Ig Hn Gu F|FEEEEEEEFFFGGGG?HOSUSQ RS)S6RBQKPTO\Nc Mj LqKxKJJIIIIJJ~K~K}K}K}K}KCLSXYXV WX%X2W>VHUQTXR_ Rf QmPtO{ONN}N{MzNxNwNwOvOvOvOvOvOFPW\^]Z[\"\/[;ZEYMXUW\ Vc UjTq~Tx|SzRxRvRtRrRqRpRpSpSpSpSpSpSISZ_ba^_``,`8^B]K\R[Y Z` }Yg{XnxXuvW}tWrVoVnVlVkVjVjWjWjWkWkWkWLV^beebbcd)c5b?aH`P}_W z^] w]d u\ks\rp[{n[lZjZhZfZeZeZeZeZeZeZeZeZOYafhief gh'g2f=eF{dMxcT ub[ raa paim`pk_yi_g^e^c^a^`^`^`^`^`^a^a^a^R\dillij jk$k0~j:ziCvhKsgRpgY mf` kefhdnfdvdcbc`b^b\b[b[b[b[b\b\b\b\bU_glpolmno!}o-yo8unArmInlPkkW ik^ fjedilait_h~]g[gYfWfVfVfVfWfWfWfWfWfYbjpsspqr|sxs*ts5ps?mrGjqNgqU dp\ boc_oj]nrZm|XmVlTlRkQkQkQkRkRjRjRjRj\fntwvuvzwvxry'oy2kx<hxDewLbwS_vZ ]ua ZuhXtpUsySsQrOrMqLqKqLqLpMpMoMoMo`jrx{zzz{t| o~l~$i/f9bB_~I]}PZ}W W|^ U|e R{nPzwNzKyIyHxFxFxFwGvGvGuGuGueow}~sl he b,_6\?YFWNTUR\ Oc Mk KtHFDBA@AA~A}A}A}A}ju}yjd`]['X2U;SCPJNRLYI`Gh Er B}@><;:;;;;;;q{se\W TR"P-M6K?IGGNEUC]Ae>o <:9)827;5C4K2S1\/f-q+*('&&%%%%%xk_SH=4/-, +)*2):(C'L&U$_#k"x {nbVJ?5,$ &/8AJUaoƑǤǹ~qdXK@5+#   ! * 4 > I U brԄԘԫsfYL?4*!    (1<GTctuhZM@3(  %.9ESdvwj\O@3'  *5CRcv#!! $ +7DQ]hr{ ) 4 AMYdnw%0=I U ` j s |   ",8DP[fow""!"" '2>KV`jrz&% ( )(& $+!8 DP[emu}   !"""#####) *./ -+("&/&='J'U(_(h(o'w'~''''''((())******-0342 .,.(/70D0O0Y0b0j/q/x///...///00011111058:95 46"818?8J8T7]7d6l6s6y55555555 5 6 6 7 7 7 7 7 3:?BB>;>?,?:?E?O>X=_=g^qF\pMYpTWp[UobSoj Pns Nn~LmJmIlHlGlGlHkHkHjHjHj^gnrrqzqqrktfucv`w(^w3[x<YwCVwKTwRRvYPv`NuhKuq It| GtEsCsBsAsBrBrBqCpCpCpclsvuvuvixcz^|\}Y~$W/U8S@PHN~OL~VJ~]H}eF}nC|y A| ?{ >{<{<{v;9 8 6 6 6 6 6 6 6 6 ox~wk^UNJHG%E/D8B@@G?O=V;_9h7s5310////// / v}peZOFA >=;(:19:7B6J5R3Z1d/o-{,*)(''''''~vj^TI@7210!.*-2,:+C*K)T(^&i%v#" }ocWMC80($#!! )1:BLVao~uh[PE;1' &.7ALW e t zl`SG<1' $,6@LYhy̌˟˳|obUH;0&  "*4?KZj}ݑݤ޶qdVI</$  '1=KZltfXK=/$  #.;J[m  (5ANZenw %1>JVaks{  "-9FQ\fow~( 4 ALWajrz   ".:F R \ e m u |   &3?KV_how}""%$! *8EPZbjqx~   !!""#####%(*+(! !$$%2&?'J'T']'d'l'r'y'''''(((()******(.353-*-.,/:/E0O/X/_/f/m/s.z.....///0011111-5:=<73 46'747@7J7S6Z6a6h5o5u5|555555566777772;ADC?; ;<"=0=;=E=Nk >k `inmmxmlnap[rVt RuPvNw'Lw1Kx9IxAHxIFxPDwWBw_@wh>ws<83245*555@5I5P5W5^5d4k4r4y4~4}4{5y5x5w6v6t7t7t7t7t75=BDB>98::&;1;;;D;L;S:Z~:`}:g{:ny:uw:~v:t:r:q:o;n;m;m<l<l<l<l<9BGHFC?> ??!@-@7@@}@H{@Oy@Vw?]u?cs?jq?rp?zn?l?k?i?h?g@f@f@e@e@e@e@>FKLJGCCCD~D){E4yE=vEEtDLrDSpDYnD`lCgkCoiCwgCfCdCbCaD`D`D_E_E`E`D`DAINOMKGGG|HxH&uI0sI:pIBnIIlHPjHVhH]fHdeHlcHuaG`G^H]H[H[H ZHZIZIZHZHZHELRQPNJJzKvLrL#oL-mM6jL?hLFfLMdLSbLZaLa_Li^Lr\L|ZLYLWLVLUL UL ULULULVLVLHPUTSQMzNuO pOmP jP*gP3eP<cPCaPJ_PQ]PX\P_ZPgYPpWPzUPTPRPQP PP PP PPQPQOQOQOKSWVUT|PuQpR kShTeT'bT1`T9^TA\THZTOYTVWT]VTeTTnRTxQTOTNTLTLT KT LTLSLSMSMSNVZYXWwTpUjVfWbW`X$]X.[Y7YY?WYFVYMTYTSY[QYcOXlNXvLXJXIXHXGXGXGXGWHWHWHWQY\[[}ZrXkYeZ`[]\Z\!X]+V]4T^<S^DQ^KP^RN^YL^aK]jI]tG]E]D]C]B]B]B\B\C[C[C[U]_^^x]m\e]__Z` WaUbRb(Qc1Oc9NcALcHKcOIcVGc^EcgDcqBc}@b?b>b=b`>`>`Yaaaataia_bYdTf QgNgLh$Ki-Ii6Hi>FjEEjLCjTBj\@ie>io=:731 12 3+353>}3F{3My3Tw3Zv3at3gr4oq4wo4n4l4j5i5h5g6f6f6f6f6f67>BA?<8677|8'z81w9:u9Bs9Iq9Pp9Wn9]l9dk9ki9th9~f9d9c:b:a:`;_;_;_;_;_;;BEDC@=;};y<u=#s=-p=6n=?l=Fk=Mi=Sg=Zf=ad=hc=qa>{_>^>\>[?Z?Z?Y?Y?Y?Y?Y??FHGFD@|?w@ s@oA lA*jA3hA;fBCdBJcAPaAW`B^^Be]Bn[BxZBXBWBVCUCTCTCTCTCTCTCBIKJIG}CvCqD mDjEgE'dE0bE8`E?_EG]EM[ETZF[YFcWFlVFvTFSFRGPGPGOGOGOGOGOGPGEMMLKJxFqGlGhHdHaI$_I-]I5[I=YIDWIJVIQUJYTJaRJiQJtOJNJMJLKKKJKJKKKKJKJKJHPOON{MsIlJgKbL_L\M!ZM*XM2VM:TMASNHRNOPNWON_NNgLNrKN}INHNGOFOFOFOFNFNGNGNLRQQQwPnLgNbO]P ZPWQUQ'SQ0QR8PR?NRFMRMLSUJS]ISeHSoFS{ESCSBSASASASARBRBRBQOTTT}SsSiQbR\SXT TURUOV$NV-LW5KW<JWDHWKGXRFXZDXcCXmAXy@X>X=Xc>=cEg4*!  "+5@N]nvgZNB7,"   )4BQbuɊɟʱn`SF:/$  (4CTg|fYL?2$ '5FXk,9EPZckrx~ (4ALV_fmtz "/;GQZbiouz )6AKT\cjpu{ "/;ENW^djpu{'3>HQX_ejpv|   ,7BJRY_ekqw~   $0;DLSZ`flry!%"*5>GNU[agmt|~}|zyxxx"),*'#$/9AIPV\bi} p| xz y!w!u"t"s#r#p$o$o$n$n$)020.*'# #$%*%4&=}&D|&Kz&Rx&Xw&^u&et'lr'tq'}o(n(l(k)j)i*g*g+f+f*f*/66540-*)*|+%y+/w,8u,@s,Gq,Mp,Tn,Zm,ak-hj-ph-zg.e.d.b/a/a0`0_0_0_0_04;::8520{/w0t0!q1+o14m1<k1Cj1Jh2Pg2We2]d2eb2ma3w_3^3]4[4Z5Z5Y5Y5X5X5Y58>>=<:}7x4t4 p5m5j5'h60f68d6?c6Fa6M`6S^7Z]7b\7jZ8tY8W8V9U9T9S:S:S:S:S9S9<A@@?~=x:s8n9j9g9d:$b:,`:4^:<];C[;JZ;PX;WW;_VN>N>M>N>N=N=?CCCBz@s=m<h=d=a>^>!\>)Z>1X>9W>@U?FT?MS?UR@\P@eO@oNAzMAKAJAIBIBIBIBIAIAIACEEEEvCo@h@cA_A \AYBWB&UB.SB6QB=OBCOCKNCRMDZLDcJDmIExHEGEEEEFDFDFDEDEEEEEFHHH{GrFjBcC^DZE VETFQF#OF+NF3LG:KGAJGIIHPHHXGHaFIkDIvCIBIAI@I?J?J?I@I@H@HIJJJwJnIeE^GYHUIQJOJLJ!JK)IK1GK8FL?ELFDLNCMVBM_AMh@Mt>M=MQS=R\U+=V24\F3]N1]W0]a/]l.]z,]+]*]*])]*\*[+[+ZUUUrUgV^VTWLYE[?]:_6` 4a2b1b#0b+/c2.c:-cB,cJ*dS)d](di'dv&d%d$d#d"d#c#b$a$aXXzYnYcYZZP\H^A`:c4f/h ,i*i)j(j&'j.&k5%k=$kF#kO"lY lelrlllkkjihh\\u\i]_]V^LaCdk7n0q)u"x{}}}~"~*~1~:~DNZh x  ~ ~ } } | { zewejeafVhLkBo9s1w*z#~    # + 3=HTaq~jqjgk[lPpFtQez)5AMV_fmty $1=HRZbiouz +7BLU]djpuz%1<GPW^ejpuz +6@JRY_ejouz$/:CLSY_djou{  (3=EMSY_djpv~   ,6? G N T Z _ e k r y  }|{{{ %/9AHOU[agnu}~|zxwutsqqqp%%#! )3<C~J|PzVy\wbvitqszqonlkjihhgg&***(%"|$z.w6v>tErKqQoXn^lek mi vh!f!e"c"b#a#`$`$_$_$_$,///-*(}$z" v#s# q$)o$2m$:k%Aj%Gh%Mf%Te%Zd&ab&ia&r_'}^']([)Z)Z*Y*X*X*X*X*13332/y-u*r( o(k)i)%g*-e*5c*=b*C`*J_+P^+W\+^[,fY,oX-zW-V.T.S/S/R/R/R/R/R/66665y3s1o/k.h-d.b.!`/*^/1\/9[/@Y/FX/MW0SV0[T1cS1lR2wQ2O3N3M3M4L4L4L4L4L39999|9t7n4i3e2a2 ^2\3Z3&X3.V35U4<S4CR4JQ4PP5XN5`M6jL6uK7J7I8H8G8G8G8G8G8G8;<<<x<p:j7d6`6\6 Y7V7T7#R7+P72O89M8@L8GK8NJ9UI9^H:hG:sF;E;D<C<B<B=B<B<B<B;=>>>u>l=f:`9[:W:S;Q;N; L;(K;/I<6G<=G\C>fB?qA?~@??@>@=@=@=@=@>?>?@@A|AqAh@a<[=V>R>N?L?I?G@%F@,D@3C@:BABAAI@AQ?BZ>Bc=CoE8=E?*VF)VO(WY'Wd&Wr%W$W#W"W"W"W#V#U$UMNuNiN_OVOMPER?S9V3X/Z+[*[(\'\$&\+%\3$]:#]C"]L!]V ^a^n^~^^^]]\[[Q~QpQdR[RRSJTAW;Y5[.^(`$b "c!cd d'd.d6e>eGeQe]ejezeeeedcbbTxUkU`VWVOWFY=\6_0b)d#gjllmm!m)m0m9nBnLnXnenu n n m m l k k jYrYfY\ZTZJ\A_9c1f*i$loru www w# w* w3 w< wGwRw_wowwvvuttt{]m]b^Y^N`EcM]pduWyK~?4)  &3ARdy\PD8,!  &5EWkӂӗөҸUI=0%  '8J]r &2=HRZbiouz !,8CMU]djpuz '2=GPX_ejpuz!-7AJRY_ejotz &1;DLSY_diotz  +5>FMTY_dinu{$.7@GNTY^diov~   '19AHNTY_dkrz~}{yxvuu t s s    * 3 ; B I~ O} T{ Zz `x gw nu vt r p omlkjiii~${-y6w=vDtJsPqVp\nbmjksi}hfecbba```"#$#" ~|z wtq(o0n8l?kEiKhQfXe^cfbo`y_]\[ZYXXXX'((('{%v#s q nki#g,e3c:bA`G_M^T\[[bY kX vV!U!T"S"R#Q#Q$Q$Q$Q#+,,-|,t*o(k%i"f!c"a"_#']#/\#6Z#=Y$CW$JV$PU$WS%_R%hQ&sO&N'M(L(K)K)J)J)K)K)./00w/o.j+e*c'_' \'Z'X($V(+U(2S(9R)@P)FO)MN)TM*\L*eJ+pI+|H,G-F-E.E.E.E.E.E-123|3r3k1e/`-],Y, V,T,R, P,(N-/M-6L-<J-CI-JH.QG.YF/cE0mC0zB1A1A2@2?2?2@2@2@2355y6n5f5a2\0W0T0Q0N0L1J1%H1,G12F19D1@C2GB2OA3W@3`?4k>5x=5<6;6;6:6:6;6;6;6678u8k8c7]6W3S4O4K4 I4F5E5"C5)A5/@56?6=>6D=7L<7U;8^:8i99v897:7:6:5:6:6:697989~:r;h;_:Y9S6N7J8F8 D9A9?9>9&<9-;:4::;9;B8;J7;S6<\52>1>1>1>1>2=2=;<{<n=d=\=U<N:I;E<A=>=<=:>9>#7>*6?15?84?@3@H2@P1@Z0Ae/Ar.B-B-B,B+B,B,B-A-A=>w?k?a@Y?R?I>D?@@K9L3N.P(S$T "U UVV$V,V3W;WDWNWYXfXuXXWWWVUUItJfK\KSKKLDM[6_.b&fjmps vx xyyyz&z/z9zDzPz_zpzzzyxxwj[_[V[L\B`9c0h(l ptw{ ~  (1<IWh{e`\`QaFdPdz͑ͤʹMA5) !1CVk !-8CMU]ciotz (3>HPX^djotz#.8BKRY_ejotz (2<EMSY_dintz",6?GMTY^chntz &08@GNSX]chnt| )2:AHMSX]ciow~}{zyxwxx  #,4;BHNS}X|^{dyjxrv{tsqpnmmlll  ~%|.z6x<wCuHtNsTqYp_nfmnkxjhg e d c c b b b }|| x u r (p 0o 7m >l Dk Ji Oh Ug \e cckbu`_]\[ZYYYY~xtqq oli"g*f2d9c?bE`K_Q]X\_ZhYrW}VTSRQQQQQ ""#w"p!ligfca_&]-\4Z;YAXGVMUTS\RdQnOzNMKJJIIIJ$%&{'q&j%f#b!`^ [YW"U)T0S7Q=PCOJMQLXKaIkH wG F!D"D"C"C#C#C#C"')*v*m*e)`'\%Y#W!U!R!P!N!%M",L"3J"9I"@H"FG#ME#UD$^C$iB%u@&?&>'>'='=(=(='>'*+-r-h-a,\+X(T&Q&N% L%J&H&"G&)E&/D&6C'<A'C@'K?(S>)\=)f<*r;*:+9+8,7,7,8,8,8,,.{/o0e0]/X.S+P*L*I* F*D*B*A*%?*,>+3=+9<+@;,H:,P9-Y8.d7.p6/5/4030202030304//1w2k2b2Z2T1O/K-G.D.A.?.=.;."9/)8//7/660>50F51N41W32b22n13}03/4.4-4-4.4/3/313t4h5^5W4Q4K2F1B2?2<2 938363 43&33-24414;05C05L/6U.6`-7l,7{+7*8)8(8(8)8*7*745q6e7[7T7M6G6B5=6:677 472718/8$.8+-92,99+9A*:I*:S);^(;j';y&<%<$<#<#<$<%;%;6|8m9b9X:Q9J9D9=99:5;2;/<-=,=*=!)=((>/'>6&>>%?G$?P#@["@h!@v @AAAA@@ ?9x:i;^<U<M<G<@<8=4>0@-A*B 'B&C$C#C%"C,!D3 D;DDENEYEeEtEFFFEEDD<s=f>[?R?J?D?=@6A1C,D'F$G !H III"I)J0J8JAJKKUKbKqKKKKKJJI?o@aAWBNBGBAB:C2E-G(I#KMO PPPP%P,Q4Q=QGQRQ_RmR~ Q Q Q Q P POyCjD]DSEKEDE>F6H/J)L$OQSV WXXX X( X0 X9 XC XN XZXhXyXXXWWWVsFdGYHPHHHAI:J2M+P%R UXZ] ` ` ```#`+`4`=`I`U`c`s`___^^^lJ_KUKLLEL=N5P.S'V Y\_b eg ghhhi&i.i8iCiOi]imiihhgfffOZOQOJOAQ8T0W([!^beh knp p qqrs!s(s1s<tHsVsfsyssrqqpaSVSOSEU;X2\*`"dhlo rvyzz {|}~"*5AO_q~~}\XTXIZ?]5a,e#josw { ",8FVh~Y]N_Cb8f.l$qw| #.<L^tSdGhHPW^dioty$.9BKRY_dinty )3=EMSY_dinsy #-7?GNSY^chmsz '09AHMSX]bgms{ !*3;AHMRW\agnu~~}}}} $-4;BGMRW\~b}h{pzyxvutrqpppp'}.|6z<yBwGvLuRsWr]qcokntl~kihgfeeee  ~| ywu!s)q0o6n<lBkGjMiRhXf_egcpbz`_^\\[[[[|vsr q nli#g*f1d7c=bCaI_N^U]\[ cZ mX xW V T S R R Q Q Q }tmjggf c a _ %] ,\ 3[ 9Z ?X EW KVQUYSaRkPvNMLKJIIIIvmfb_^^ [YW U'T.S4Q;PAOGNNLUK^IgHsFEDCBBBBB }!q"h"a!\YWUTQON#L*K0J7I=GCFJERCZBdAp?}>=<;;;;<!#x$l%c%\$W#S QOM KHG E&D-C3B9@@?G>O=X<b:m9{8 7!6!5!5!5!6!6!#&t'h(_(X'S&O$L"I G DB@ ? #> )< /;!6:!=9!D8"L7"U6#_4#k3$y2%1%0%0&/&0&0&1%&(q*e*\*U*O)K(H%D$A$?$ =$;$9$7$&6$,5%34%:3&A2&J1'S0']/(i.)w-),)+*****+*+*,)(|*m,b-Y-Q-L,G+C(?(<(9( 7(5(3(2(#0()/)0/*7.*?-+G,+Q+,[*,g)-u(-'-&.%.%.&.&.'-+x-j._/V/N/H.C-?,;,7,4, 2,0-.--- +-'*.-*.5)/=(/E'0N&0Y%1e$1s#1"2!2!2 2!2"1"1-u/g0\1S1K1E1@0;0603001-1 +1)2(2'2$%3+%32$3:#4C"4L!5W 5c5q666666650q2c3Y4P4I4B3=37314.5+5(6 %7$7"7!8" 8(80879@9I:T:`:n:;;;;::9}2m4`5U6M6F6@6:646.8*9&:#; <===>%>->4>=?G?Q?^?l@|@@@@??>y5i7\8R9J9C9=9791:+<'="?AB CCDD"D)D1D:ECENE[EiEy E E E E E D Dt9e:X;O;G<@<:<4<.>(@#BDFHJ JJKK% K- K6 K@ KJ KV KdKtKKKJJJIn<`=T>K>D>=>7?1@*B$EGILNQ Q Q QQ"Q)Q2R;RFRRR_RoRQQQPPPh@[APAHAAA;B4C-E&H KMPSU X XXYYY%Y-Y6YAYMZZZiY|YYXXWWcDVEMEEE?E7G/I(L"ORUX Z ]_ ` `aab b'b1b;bGbUcdbvbbaa``]HRIJHCH:J2M*P#SWZ] `cfgh ijklm"m*m4m@mNm]momllkkjXMNMHL>N5Q,T$X\`d gknprrs uvwxy#z-z9zGzVyhz|yxxwwTQLQBR8U/Y&^bgk oswz|~ %0>M_sRVGWr2x'  #5I^uیܟܫ $/9CKRY_dinsy*4=EMSY^chmsy $.7@GNSY^chmsy(1:AHNSX\aglsz "+3;BHMRW[afmt}%-5<BGLQV[`gn~w}{zxwvvvuu  '/5}<|A{FyKxPwUv[tasiqqp{nmkjjiiii{ ywv"t)s0q6p<oAmFlKkPjVh\gdeldvca`_^^^]] | wtq omki#h*g1e6d<cAbF`L_R^X]_[hZrX~WVUTTSTT zrli g f db`^%]+\1Z7Y<XBWGVNUTS\ReQoO{NMLKJJJJ~sjd`^] ] ZXV U'S-R3Q8P>O DN JL QK YJ bH mG zF D C B B B B B xlc]YVTTS Q O M "L (K .J 4I :GAFGEODWBaAl?y>=;;:::;sg^XSPNLL JHFE$D*B0A7@=?D=L<T;^9i8v76443344|nc Z S NJHFECA?> =';-:39:8A7I5Q4[3f2s0/.---..x j"_#V#O"J!F CA?= ;976#5)40361>0F/O.Y-d,q+*)( ' ' ( ) t#g$\%S%L%G$B#?!=:7 5310 /&.--3, ;+ C*!L)!V("b&"o%#$###"$"$"$#$$##q%c&Y'P(I'C'?&;$8"5"2"0" .","*")"#(#*'#1&$8%%A$%J#&T"&`!'m '}'((((('~%n'`)V)M*F*A)<(7'4&0&-&+' ('''%'$'!#('"(.!)6 )>*H*R+^+k+{,,,,,++z'j*]+S,J,C,>+9+4*0*+*)+&+#,", ,,-%-,-3.<.E/P/\/i0y000000/v*g,Z-P.H.A.;.6-1-,-'/$/!01 1222"2)31393C4M4Y4g5w5555444r,c.W0M0E0>08030/0)1$2!356 77888&8.969@9K9W:d :t : : 9 9 9 9 8n/_1S2J3B3;36312,3'4!689;= >>>># >* >3 >< ?G ?R?`?o???>>>>i3[4P5G5?59545.5)7#8;<?AC D D DD D'D/D8EBENE[EjE|EDDDDCd6W7L8C8<87818+9%; =@BDG I J KKKK#K+K4K>LILWLfLwKKKJJJ_:R;H;@;:;4;.<'>"ACFIK NPQ QRSSS&S/S9SESRSaSrSRRQQQY>N>E>>>8>0@)B#DGJMP SUWX YZZ[\!\*\4\?\M\[\l\[[ZZYTBJBBB^2c'jpx  &8Kaz7j+p x ,@WnԆԛӫ *4=FMSY^chnsy %.8@GNTY^cgmsz )2:BHNSX]bgls{ #,4<BHMRW[`flt}&.5<BGLQUZ`fmv}|||||  (/6<AFK}O|T{Zy`xgvpuzsqponnnnn~|{y"x)w0u6t;r@qEpJoOmTl[kbijhtfecbaaaaa~yuq omlk$k*i0h6f;e@dEcJaO`V_]]e\oZzYXWVVVVVzrligd ca`_%^+]0[6Z;Y@XEWKVQUXSaRjPvONMLLLLL | p h b _ ]\ ZXWV U&S+R1Q6P;OANGMMKUJ]IgGsFEDCCCCC ti`ZVT S S QONL!K'J,I2H7G=ECDJCQBZ@d?p>~=<;::::|nbZTPMKK J IGED#B(A .@ 3? 9> @= G< O: X9 c8 o6 ~5 4 3 2 2 2 2 wi^UOJGECCB @ ? = < $; *9 0877=6E5M3W2b1n/}.-,+++,rdYQKFB?><; :875!4'3-230:/B.K-T+_*l){('&%%%&~n`VMGB>:8754 20/-#,*+0*7)?(H'R&]$j#y"!   zj]S J D >:7420. ,*)' &&%-$5#="F!P [hwwg Z!P"H"A";"7!3 0-+(&%#!!$ *2:C M!Y!f!u"""""!!s d"W#M$E%>$9$4#0",")!&!$!"! !!""!"(#/#8$A$K%W%d&s&&&&&%%p"a$T&J&B'<&6&1%-%)$&$"%%& &''''%(-(5)>)I)U*b*q*** * * *)l$]&Q(H(@)9(4(/(+'''"()*++ ,,,-#-*-2.<.F .R ._ /n / / / .. . .h'Z)N*E+=+7+1*-*)*$* +-./1 222 2 2' 2/ 38 3B 3N3[4j4{333332d*V,K-B-:-4-/,+,&,"-/1246 8 8 888$8,848>9J9W9e9w988887_-R.H/?08/2/-/)/$013579 ;= >>>>!>(>1?;?F?S?a?s?>>===Z0N2D2<25201+1&2 468;= ?AC CDEEE$E-F6FBFNF]FnEEDDCCU4J5A59534.4(5"7:<?A DFHI J KLMN N(N2M=NJNXMiM}LLKKJP8F8=87817*9$;=@CF IKNPQR STUVW#W,W8WDWRVcVwVUTSSK<B<;;5;-<&?BEHK OQTWXZ[\ ]_`bb&b1b>aLa]ap``_^]G@??:?1@)C!FJNQ UX[^acdegh jlno o*o6nEnUnhmmlkjDD>C5D+G#KOTX\`dgkmoprtuw y|~".=~M}a}w|{zyCG9I/L%PU[`ejnrvy|~ %3DWm=N2Q(V\bhnty~ ):Mb{6W,\!bipw~ 0CXp0b%ipx  %8Ne~͖̩ %/8@HNTY^chmsz )3;BHNSX]bgmt{ $,5<CHNRW\agmt}'/6<BGLQUZ`fnv !(06<AFKOTZ`g~o|zzxwutsttt#*}0{6z;x@wEuItNsTqZpanimskihgfeffg|vt rqpp$n*m0k5j:i?hDgIeNdTc[ac`m^y][ZYYYZZ{snjgedccb%a*_0^5]:\>[DYIXOWVV^ThSsQPONNNNO{phb_][ YXWW V%U*S0R4Q9P?ODNKMRKZJcIoG|FEEDDDEq f ^ Y UTRP ONML K&J+I0H5G:F@EFCNBVA_@k>x=<<<;;; x j_WQM K JI H FEDC!B&A+?1>6=<<C;J:R9\8h6u5443333 qdYQKGDB A A ?><;:"9(8-72695?4G3P1Z0f/s.-,++++}l_TLFB><:: : 8 654 2 $1 )0 // 6. =- E, N+ Y) e( s' & % $ # # # xh[QHB=975332 0 / - , !+ '* -)4(;'D%N$Y#e!s sdWME?:520.-, +)(&%$$*#1"9!B KVcqp`TJB<62/,*(&% #" !'.6?ITapl]QG?94/+(&$"  $,4=GR_niZNE= 61-)%#  ")1:EP ] l | eWL!B!:!4!/!* &#    !!"""&#/#7 #A $M $Y $g $x$$$$##bT!I#@#8#2#,#("$!!!!!#$%& ' ' ' '# '+ (4(>(I(U)d)t))((('^"Q$F%=%5%/%*$&$"##$%&() , ,,,,!,(-0-:-E-R.`.q---,,,Z$M&C':'3'-'(&$&!&&')+, . 0 11222%2-263B3N3]3m322111V'J)?*7*0*+)'(#()*,.0 1 45 67888"8*939>9J9Y9i9}88776Q+F,<,4,.,*+%+ ,-/13 5 7:; < =>?@@%@/@:@F@T@e?x?>>==M.B/9/2/-.(."/0257 : <>ABC D FGHH!H*H5HAHOH`GsGFEEDH2>26201+1%2469< ?BDFHJKL NOQRR%R0R<QJQZQmPONMMC6;645/4'5!8;>A DGJMOQSTUW Y[]]]*]6\D\T[g[~ZYXW?98938+9#<?CG JNQTWZ\]_`bd fhkk#j.j<jMi_hugfed==7<.=%@DIM QUZ]`cfhjkmoqt vy{{'z5yExYxmwvut_C^H]N[UZ]XgWrUTSRQQRR|qid`^\ [[ZZY%W*V/U4T8S=RCPIOPNXMbKmJzIHGGFGG~pf^YVSRP OONN M%L*J.I3H8G>FDEKDSC]Ah@u?>====>uh]UPLJIG FEEDC B%A*@/?4>:=@;G:O9Y8d7q6544445~m ` V N H D B@?> =<;;:!9%7*60554<3C2L1U0`/m.}-,,,,,w g ZPIC> ; 9 8 76 54321"0'/,.2-8,@+I*R)](k'z&%%%%%r bVLD>9631 0 0 / .,+*)#()'/&5%=$F#P"\!i ym^RH@:51.,** ) ( ' %$# " &! , 3 ; D O [ i y      iZNE=71-*(&$## "     # * 2:DP\j{eWKB:4/*'$"   !(09CNZiy    bTI?71,($! &-6ALW e u    _QF=5/*%"  # * 3 < G S aq\NC:3,'#      '/9CP^nXKA80*%!   !!!$","5"@#M#Z#k#~#""!!UH> 5 . ( #   " $ % %&&&!')'2'='I(W(g'{''&&%Q E!;"2","&!"!   "# % &( ) +,,,,&-/-9-F-T-d-w,,++*M"A$8$0$)$$#!"""#$& ( *,. / 02333"3+363B3P3`3s22100I%>&4'-'(&#%$%&(* , .0245 7 8::::':2:>:L:\:o98876D):)1)+)&("'()+. 0 2579;<> ? ACCC#C.C9CGBWBjA@?>>?,6,/,*+%*+-/2 58:<?ACEFH JLMMM(M4LBLQKdK{JIHG;03/-/(-"/147 :=@CFHJLNOQS UXYX"X.W<WKV^VsUTRR8312,1%258< @DGJMPSUWYZ\^a dfgf'f4eDdWdkba`^5705(7 :=B FJOSVY\_adegilnq tww v-v=uOtcs{rpo5:+;"?CH MRW\`dhknqsuwz| $3E[r/@%DIN TZafkoty} );Pg)INT[bipw} 0E\t"T[bjs{ &:Qhˁʖ %.6>DJOTY^cipx  (07>DINSW]biqz "*18=CHLQV\bir}zx $+17<AFKPU[bk~u|zxwvurnl %~+|1z6y;w@vDuIsOrUp\odmnlzjhgfeda`}wspoooom%k*i0h4g9f>eCcHbNaU_^^g\s[YXWWWVTulhda` ____]%\*[/Y3X8W=VCUISPRXQaPmN{MLKJJJJrg_ZWUSR RRRQO$N)M.L3K8J=ICHJFRE\DgCuBA@@?@@tg]UOLJHG G FFFED$C)B-A3?8>>=E<N;W:b9o8766666|k^TMGCA?>= =<<<:9$8)7.635:4A3I2S1^0k/{.----.sdWMF@;87654 44321 0$/)./-6,=+E*O)Z(g'w&&%%%&m^ R H @ : 6 2 0..- , ,+*)( '%&+%2$9#B"K"W!d sh Y M C<61 - * ( ' && %$$"!!" (.6?ITapc UI@82-)&# "    %+3<FR_n_QF<5/*&"          " ) 1 : E Q _ n  \NC:2,'#        ( 0; F Q ^ m   XK@70)%!      % - 6 A MZj|UI>5-'"       "*3>JXgzRF;2+%!   '0;GUdwOC90)#    $-8DRbuL@6-&!      !!"!*!5"A"O"_"r!! H=3+$   !" $ &&&''''2'>'K'\'n&&%$#D90(#  !"$&(* + ----$...:.H-X-j-,+*)@ 6!-!&!! ! " $&(+-/0 2 4555 5*565C5S4f4|3210<#2$*$$# "!!#% ' )+.02468: < >>>>&>1>?=N=a@BD F IIH!H,G:GIF[EqDCBA4*,*'("'(*- 0 369<>ACFHJLNP STTS'S4SCRUQjPOML0-+,&+,.2 59=@CFILNQSUWY\_ bccb,a<`N_b^{\[Y/0*/"037;?DHLORUX[]`bdfimp tts%r4rEpYoqmkj.3%58<AGLQUY]aehkmortwz~ +=Rg~): =BHNTZ`dinrvz} !3G^w#CHN U\cjqv{ (<RjNT \dlt|1H_vȎ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗  9` ˻0ƸOg{ĵ˲ѯխ٫ܩާख़㡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘  9` ˼.ŹMfzŵ˱Ѯլ٪ܧޥ࢚➙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙  9` ˾,ŹLg{Ŵ̰ѭի٨ۥݣߟᛙ⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙  9 ` ˿+ĺLg{Ŵ̰Ѭթئۣݠޝᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚ  8 _ )¹Mh{Ƴ̯Ѫէؤڡܞݚޕ  8 _ )Ni|Ʋ̭ѩԥעٟڛܗݓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ  7 ^ ǿ+Pj|ư̫Чԣ֟؜٘ڔܐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ  7 ^ ľ-Qj|Ʈ̩ХӠ՝ّ֙ؕڎێێێێێێێێێێێێێێێێ  6 _ 0Sl}Ǭ˧ϢўӚՖ֓׏؋ًًًًًًًًًًًًًًًً  5 b 3Um}ƪˤΟЛҗӓԐՌ։׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉  7 e 8Xn}Ƨɡ̜ΗϓѐҍӊӇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇ  : h>[o}ģǝʘ˓͐΍ϊχЅхххххххххххххххх  > mD^p}ßřǔɐʍˊˈ̅̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓  B rI`p}ÕđƍNJLjȆȄɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂ H xGbq|ÊĈĆńŃŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁſ% N p9Xlz€€€€€€€€€€€€€€€€€1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ0 S'|̨Dƥ]¤pùǷʵγбӰկ׭٭ګګګګګګګګګګګګګګګ0S&|˩CƦ\¤o~ùȶ̳ϱҰծ׭٬ܫݧۧۧۧۧۧۧۧۧۧۧۧۧۧۧ0S%|˩BƧ[¥n~ĸɵͲѰԮ׭ګܩߨߣܣܣܣܣܣܣܣܣܣܣܣܣܣܣ0S$|˩AƧZ¥m}ķɴαӯ֭ګܩߧ⤑ࠎܠܠܠܠܠܠܠܠܠܠܠܠܠܠ0S#|˪AƨY¦m}ŷʳϰԮثܩߧ⥗栖ݜݜݜݜݜݜݜݜݜݜݜݜݜݜ 0S"|ʪ@ƨX¦l|Ŷ˳аխڪݧच⟘㝚ᙗݙݙݙݙݙݙݙݙݙݙݙݙݙݙ 0S!|ʫ?ƩW§k{Ŷ˲ѯ֫ڧݤߠ◚ᗜޗޗޗޗޗޗޗޗޗޗޗޗޗޗ /R |ʫ>ƪV¨kyŶ̲Ѭ֨٤ܡݜޗޒޒޒޒޒޒޒޒޒޒޒޒޒޒ /R|ʬ<ƫU¨jwŵ̯Ҫ֥ءڝۙݔސގݎݎݎݎݎݎݎݎݎݎݎݎݎݎ /R|˭:ƬT©is~Ų̬ѧբמؚږۑ܍܋܋܋܋܋܋܋܋܋܋܋܋܋܋܋ /R|˯8ƭR«fo~ưͪѤӟ՛ًُ֗ؓڈڈڈڈڈڈڈڈڈڈڈڈڈڈڈ .Q|˰5ǯOð`l~ǭ̧ϡҜӘԔՐ֍׉؇؇؇؇؇؇؇؇؇؇؇؇؇؇؇ .Q|̳0DZLĸVnǩˣΞϙѕґӎԋԈՅՅՅՅՅՅՅՅՅՅՅՅՅՅՅ  -P|̶*ȷDYpªǦʠ͖̚ΒϏЌщч҅҅҅҅҅҅҅҅҅҅҅҅҅҅҅  ,O{ͼ"¼<^r¦Ţǜɗʓː͈̍͋Ά΄ττττττττττττττ  + N zFbtÞřǔȐɎʋˉˇ̅̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃  ) L ~%OfuÖőƎNjljȇɆɄɂʂʂʂʂʂʂʂʂʂʂʂʂʂʂ ( R -WhuÌĊňņƄƃƁǁǁǁǁǁǁǁǁǁǁǁǁǁǁ - Y +Pgu~ˆ†…ÃÂÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ 4 [v%E]ny~~~~~~~~~~~~~~~:Uh-x@Vgs~x{|ywÂu„t…srrqqqqqqqqqqqqqqq'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~')F5iިAǜaĜq›~ĹǷʵ̴γвұӱԮԬҬҬҬҬҬҬҬҬҬҬҬҬ'(F4jݨ@ǝ`Ĝqœ|ºŸɶ̴ϲѱӰկ֯תէӧӧӧӧӧӧӧӧӧӧӧӧ'(F3jݩ?ǝ`ĝpž{¹Ƿʵγѱӯ֮ح٪٥դԤԤԤԤԤԤԤԤԤԤԤԤ''F2jݩ>Ǟ_ĝoyøȶ̳бӯ֮ج۫ܦڢ֠ԠԠԠԠԠԠԠԠԠԠԠԠ&&F1jݪ=Ǟ^ĝoxĸɵͲѰծج۪ިߢڞ֜ԜԜԜԜԜԜԜԜԜԜԜԜ&&F0jݪ<Ǟ]ĞnvķʴϱӮ׬۪ި⤐ۚיՙՙՙՙՙՙՙՙՙՙՙՙ&%F0jܫ;ǟ]ğlt~ŷʳаխ٪ި⥗柕ۗזՖՖՖՖՖՖՖՖՖՖՖՖ&%F/jܫ:ǟ\Ġjs|Ŷ˳ѯ֬ۨߤ៙㜚ᗖܔؓ֓֓֓֓֓֓֓֓֓֓֓֓ &$F.jܫ:Ǡ\ġhqzŶ̲Ѯשۤޠᖛᕛݒؑבבבבבבבבבבבב &#F-jܬ9Ǡ[ģfnxŶ̰Ҫצڡܛޖߑߑݏُ׏׏׏׏׏׏׏׏׏׏׏׏ &"E,jܭ7ǡZťc©kuų̭ҧ֢؝ژےݎ݌܍ٌ׌׌׌׌׌׌׌׌׌׌׌׌ %"E+jۭ6ǢYŧ_­fp~ưͪѤԞُ֙ؔڋۈۈ؈׈׈׈׈׈׈׈׈׈׈׈׈ % E*jۯ4ȤUƫXó_n~Ǭ̦РқԖՑ֍׉؆؄ׄքքքքքքքքքքքք %E'j۰1ȨMDzNXpǩˢΝЗђҎӋԈՄՂՁՁՁՁՁՁՁՁՁՁՁՁՁ $D%jڲ.ʯ@Ƚ=]r©ƥɟ˙͔ΐόЉц҄ҁҀҀҀҀҀҀҀҀҀҀҀҀҀ $D!jڴ)ͼ(CasšǛɖʑˎ͈̋Ά΃΁πππππππππππππ #Ci#LeuÝŗƓǏȌɉʇʅʃˁˀˀˀˀˀˀˀˀˀˀˀˀˀ "Bh /Thv”ÐčŊƈƇƅǃǁǀǀǀǀǀǀǀǀǀǀǀǀǀ @ _ 4Zkw‰ˆÆÅÃĂāāāāāāāāāāāāā  = c3Sgt}€€€€€€€€€€€€€  Aax2L_nx|}|{zyxxxxxxxxxxxxxx " BZ(j9wI[i|qyvvzt}rqȁpǃoDžnƆmƈlŊlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋ &=N/[?gNq{[yveqlnrkwizg~fՀeԂdԄcӆbӉaҋaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ "0:=YJy؛[Ǖrŗ{ØúŹǸɷʶ˶~̵}̳|ͯ|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯| !/:}֨DɨOǰSŸYm}Ƭ˥ϟјӒՌ׈ׅ׃քԄффффффффффф%91Z<~׬;ʭDɹEYo~ƨʡ͛ϕЏҊӆԃԁԀӀррррррррррр$9/Z9~ٴ/̸2½@]q~Ťȝʗ̒΍ωЅЂр~}}}}}}}}}}}}"9-Z0z!Hbs~àƙȔɏʋˈ̅͂̀~||||||||||||8)Z$t*Oet›ÖőƍNJȇɅɂʀ~|||||||||||| 7%Zh 2VhuÌĉņńƃƁ}}}}}}}}}}}}6P f6Vjv~†„ƒÁÀ~~~~~~~~~~~~ 4 Eh7Ser{~}||||||||||||  ' Ie%x9O`mux}{z}yĀwÁvƒu„tsrqqqqqqqqqqqq  ,H\1kBvP~~_{iwntsqwpzn}mĺk̓j̅i̇hˉgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌ -A(P9\Hf|Tnw^uqezmk~jphufxe{c~bځaك`م`؇^؊^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍ (7.C=N|KWwV_o]ehbjdinaoq_ss]wu\{v[~wZxYyXzXzW{V|V|V|V|V|V|V|V|V|V|V|V|'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'5/DJQe^~۔mϒwŒēÒ¼~¼}û{Ļzĺyĵyõyõyõyõyõyõyõyõyõyõy&4/CJPe]ڕi͔tŔ~ĕ•ûĺ~ź}ƺ{ƹzƵzƱzızızızızızızızızızız%4/BJOf\ږf̕qŕ|Ė—úŹƹǸ}ȸ|ɵzɰ{Ǭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{$3/AJOf[٘c̖oŖy׺ŹǸɷʶ}˶|˰{ʬ|Ȩ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}$2/AKNgYٙa˗mŗwÙĹǸɶ˵ʹ~α|ά}˨}ɥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~#2/@KMgWٚ^˘jřtÚ}ºŸȶ˴γвѬ~Ϩ~̤ɡơơơơơơơơơơ#1/?KMgUٜ\ʙhŚrÜzùǷ˴βѱӬӧФ͠ʞƞƞƞƞƞƞƞƞƞƞ"1/?KLgSٝYʛeŜoÝxĸɵͲѰծקԣџ͜ʚǚǚǚǚǚǚǚǚǚǚ"0/>KKhQٟVʜbŝlßu~Ʒ˳ϰԭ٨ڢ՞ћΙʗǗǗǗǗǗǗǗǗǗǗ"0/>KKhO٠Sʞ_Ɵiár|ǵͲҮتߢܜ֙җΕʔǔǔǔǔǔǔǔǔǔǔ!//=KJhM٢Pˠ\ơeänx¸ȴΰիݥ曑ݖהӒϑːȐȐȐȐȐȐȐȐȐȐ!//PUQhS{WԞ_ʛkśuÛ~ŷʴϲҨϣˠǝś™%4%C>NUNhPzRա[˞fƝqÞz¹ǵΰԩ֡Н˚șŗ–%4%B>LULgMyNդV̡aơlâv÷ʲҬؚ۠ї̕ȔœÒ$3%B>JTJfJxK֨Qͦ[ǥeħpzö˯֥族ړґ͐ɐƏÏ$3%A>HTGfGwG٭KϬTȬ^Ưh±s}˥Քޏڍӌ΋ʋNjČ$2%A>FSDdCuB۴DҵJ˷Sʾ_n|©˜ҍ؆هӇχˇȈňˆˆˆˆˆˆˆˆˆ#2%@>CRAc?s=޾;?J]o}ãɖΊӁՁ҂ς̃ɄƅÅÅÅÅÅÅÅÅÅ#1%?>@Q>;O7]3j1u)8Ocsďȇʀ|zyz|}}}}}}}}}}!.%<>6L0Y,b'm&jNCdTH^YL[_OXdRUiTSmURqWPtXOxYN{ZM[L\K]I^H_H_H_H_H_H_H_H_H_H_$y3"p;*hB1aJ6\Q;WW?S]BPbDNgFLlHJpIItJHwKF{LEMDNCNBOAPAPAPAPAPAPAPAPAPAP' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K0YCcTidprz~≂܅؂}{ywvtsrqqsttttttttt' ;K0YD`UfdmswጀۈՅ҂}{ywvutsuuvvvvvvvvv' ;K0YD^Udejts}ًԈЅ͂}{yxvuvwwxxxxxxxxx' ;J0XD\Uaegtpߏz؍ҋ·˄ȁ}{ywvxxxyyyyyyyyy' ;J1UDYU^edtlޑv؏э͊ɇƄā~{ywxxyyzzzzzzzzz& ;I1SDWU[eathޓr֑{ЏˍNJĆÃ{ywxyyz{{{{{{{{{& :I1QDTTXd]tcޖm֓wБʏƍɄ{yxyz{{|||||||||& 9H1ODRTUcZs_ޙi֖rϓ|ʑŐË{yz{{|}}}}}}}}}}& 9G1MCOSRcVr[ߝdךmЗwʔŒŽ{ijzī{¦|}~& 8G1KBMRPbSqW^؞gЛqʘ{ŕ’ŷ|ɫ|Ǥ}à~& 8F2IBJQM`PoT}Xڤbҡk˝uƚ˜¶ˬ}΢ɝĚ& 7F2GAHPJ_LmP{Tܫ\ԩeΦoȣzßİΠљʖŔ& 7E2E@FOG]IkLxOߴUٵ_ӵiεv|ġΔҐˏƎŽ& 6D1C?CND[EhHtL~Q[kƽqxÔ͉҇̈ljÉ& 6B1@>@L@YAdDoIwR|bhnvπ̂ǃĄ& 5?0==hOCbUG]ZKY`MVePSjQQnSOrTNvUL{VKWIXHYGZF[E\E\E\E\E\E\E\E\E\ ~)u5#l<*dC/^J4XP7TV:Q[Kd@JhAHlBFpCEtDDxEB}FAG@H?I=J=J=J=J=J=J=J=J=J| q$g,_5Y=!TE&OK)LR,HW/F]0Da2Bf3@j5?n6=s7KKPXUdZpa{iޚsו~Ўʅ}xy{}~ 4B$C0E=HILUQaWl]wcm֞y˕~|~ 4A#A/B;EGISN^ShZra{ۯn̦v~ 4?"?.@:BEFPKZRcYk߽drѶlĬsz4=!<-=8@BDLIUQ\Zaboɼipw4; 9+:5=?BGHNQR[Y`mgmt}x|386)82:;?AGETEWX^kd~krzvorwz}~353'4/65=8H8MEVV\ib{howxnhiosvxz{{{{{{{{300#/)2-;,@:HLN\Vl]zem}vsălgefknqstttttttt1-*)"-!3,XFeOpXzzdsmmvhdЈ`ϒ^Ν\ͩ[ιYȚZʜ\ɝ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ  "'-96J?XHcRmz\urd{mmhud~`؆]֏Z՘XԢWԮVԼV͐VђWѓWѓWѓWѓWѓWѓWѓWѓ   #*.;8IBUL_zVgs^mkdrflwbtz_|}\ZߋWޓUݜTܥRܯRܻQ̅RڅRڅRڅRڅRڅRڅRڅRڅ  $*09:EFOzQXrX^k^ceeh`lk]rnZypWrUtSvQwPxNyMzMzLzLzLzLzLzLzLzLzظ '(35??yJGpQNiWSb]W^d[Zj^Wp`TvbR|dPeNgLhKiJjIkHlGlGlGlGlGlGlGlGlݯż *#~6-vA6mHk2CE@K=P;U9Y7^!5b"4g#2l$1r%/w&.}'-(+)+)+)+)+)+)+)+)+)vs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvst1 rBtO'xX3y`?wiJsqTq|\nckiimgqetdvbxay`{_|^}]}]}_}`|b}b}b}b}b}b}b}b}wtu1 sBwM'{V4|_@zgKwoUsz^qenkkpisgweyd{b}a~`_ŀ^Ё_ڀaހb߀c߁d߁d߁d߁d߁d߁d߁d߁xuv1 tBzL'U4]@~eLznVvw_tfpmmrkviyg|e~cba`DŽ_ӄaڄc݃d܄e܄e܄e܄e܄e܄e܄e܄e܄yvw0 vB~K'S4\@dLlVzt`whsoptmyk|hfecbaɇaՇdڇeڈfوgوgوgوgوgوgوgوgوzxy0 xAI'R3Z@bLiW~qa{{iwqswp|mjhfdcb΋d֋f֋g֌h֌i֌i֌i֌i֌i֌i֌i֌i֌{yz0 |?H&P3X@_LgWnaxj{rwys~oljgedďdҏgӏhӐjӐkӐlӐlӏlӏlӏlӏlӏlӏlӏ|z{0 >F&N2V?]KdVkask~s{zvrnkhfeʓhѓjДkДlДmДnѓnѓnѓnѓnѓnѓnѓnѓ}{|/ <E%M1S>YJ`Uh`pjyt|zuqmiggΗk͘l͘n͘o͘pΗqΖqϖqϖqϖqϖqϖqϖqϖ~|~/ ;C$K0P(B2G;MDTM[UܰeaΨlqßt|§åţƢȟȟȟȟȟȟȟȟ- 49<&@/E8K?SF\MӶb`ƭipqy¨æŤƢȠȟȟȟȟȟȟȟ+ 279$=,B3I9R>XL̺`_gon~v~~¨æŤƢȠȟȟȟȟȟȟȟ* 146!:(@-H1Q7VK^]enl}s{ytwz§|å}ţ~ơȟȟȟȟȟȟȟȟ( 1236"=&G&L5TI\[cljzqywpln§ræuĤwƢxǡzȟzɞzɞzɞzɞzɞzɞzɞ& /./2:DJ3RGZYaigxnvyohdeŤjţmƢpǡrȟtɝuʝuʝuʝuʝuʝuʝuʝ$ + )),7AI0QDXV_fetl|tqib^]ɞbȟfȟiɞkʝn˛n˛n˛n˛n˛n˛n˛n˛#' " $ 0=$F4NDVR]acokztsk~bȌ\ȜYȱWΖ[͘^̙a̙d͙g͘g͗g͗g͗g͗g͗g͗g͗!  .:)C9JHPVWb_lvhulr}c~\،W؝TװT͌UӏWґZѓ\ѓ_ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ  ,7.@=HJOVV`v^ilepdpw^||YVޗSݦQܸQԄSڇT؉V׊X֋Y֋Y֋Y֋Y֋Y֋Y֋Y֋ ٿ ,!70@>HJPTwW]m]defj_pnZzrVvSyQ{O|M|M|P|QRށSށSށSށSށSށSށSށ ۷ ,#71A=IGxQPnWWe^\`fa[oeVxhSkPmNoLqJrIrHrKrNsNtNtNtNtNtNtNt ެ˺!.#9/B9wJBmPIeVN_^SZeVUmZRu\O~_LaJbHdFeEfDgCgEgFgFgFgFgFgFgFgʹ $0 ~;*tB2kH9cN?]UCX]GSdJPkMMrOJyQGSETCVAW@X?Y>Z>Z=Z=Z=Z=Z=Z=Z=Zҭ &|1q8"h>)`E/ZL3TS7PZ:L`Fm@DtBA{C?E=F;G:I9J8J7K7K7K7K7K7K7K7K w# m*d1\8U@"PH&LO)HU+D[-Ba/?g1=m2;s39z5765738291:0;0;0;0;0;0;0;0;| of^! V)P2K:FABH?N5D2I0N.S,X*])c'i%o$w"~!hd#_/^@cKgT%h]/fg9drAb}H`N]R[VZYX[W]V_U`TaTbScRcRcScTcVbWcWcWcWcWcWcWcie#`._@fIjS%k\0ie:gpBd{IbO_T]X[[Z]X_WaVbUdUeTeSfSfUfVeXeYfYfYfYfYfYfYfjf"a.`?iHmQ&n[0ld:inCgyKdQaV_Z]][`ZbYdXeWgVhUhTiUiWhYhZi[i[i[i[i[i[i[ijg"b.c>lFqP&rY1pb;lkDivLgRdXa\_`]b[eZgYhXiWjVkUlWlYk[k\l]l]l]l]l]l]l]lkh!c-g<pEtN&vW1t`;piEmsMj~TfZc^ab_e]h\jZlYmXnWoWoYo\n]o^p_p_p_p_p_p_p_pli!e-k:tCyL&zU1y]\IdSk]vfoxwr~mjhhЌkՍmՍo֌p֋q؊qىrڇrڇrڇrڇrڇrڇrڇspu&, 6@F'L1R;YE`OhYߎscՆ}nxxsomlȑnґpӐrԏsՍt֌t؊uىuىuىuىuىuىuىtqx$+ 5>C$I.P7VA]JߝgTԕobˍxnÅyyurqsДtђvґwӏwՍw֌x؊x؊x؊x؊x؊x؊x؊ur{#) 4<A"F*M3T<[DףcS̚lb“un~y{xvwϖyДzђzӐzԏzՍz׋z׋z׋z׋z׋z׋z׋us}!) 49>D&J.R5ܯYAϨaRŠiarnzy~|}͗~ϕ~Г~ґ~ӏ}Ս}֋}֋}֋}֋}֋}֋}֋vt ( 37;A"H(P.ԴV@ɭ_Qg`omwx˘ΖДҒӐԎ֌֌֌֌֌֌֌wt'2 48=F!ܿL,ιT?ñ]Pe_lltw|}zǘ|Ζ}Д~ҒӐԎ֌֌֌֌֌֌֌xu&/ 04:DH+ȽS=[Nc]jjqvzytqØsϖvДxґyӐzՎ{֌{֌{֌{֌{֌{֌{֌xv%+ , /6<G)Q;YLa[hhotw~yqlikДnђqґsԏuՍv֋v֋v֋v֋v֋v֋v֋yx#&%(07E'O9WJ_Xfemqu{z~qjebcґgӐjԏmՍn֌p؊p؊p؊p؊p؊p؊p؊{|! $5C$M6UG]Udbkm{svr|~jc^[[Ս_Սc֌f׋h؊jوjوjوjوjوjوjو|%6A!K3SCZQb]~igtqpk{xd~]XVUۆXڇ\ڇ_ڇaۆcۅcۅcۅcۅcۅcۅcۅ~ھ %5@!I/R>YK`Wvhampiezp^̆uX̕yȚ{Qͼ|P|SU߀XށZށ\߁\߁\߁\߁\߁\߁\߁ ۵ % 3>%G2N?UIv]Smf[eoa^zgX܆kSܕoPݦqM޻rMqNtPwRxSyUzUzUzUzUzUzUz ݫ͸ % 3='F3N>vUGl[NdcU]mZXw^SbNeJgGiFiHiKjLmNoOpOpOpOpOpOpOp б '4>'G2vN;lTBdZH]bMWkQRuUMXHZE\B^A_@`C`G_HaIcIcIcIcIcIcIcԩµ )5~@%tF-kL5cR:\Y?V`CPhGLqJG{LCN@P>R=T;U;UA;C9E8F6G5H5I4I7I7I7I7I7I7I7Iɫ~u' l/d7\>VE"PK%KR(FX+A_->g/;o18x364361708/:.;.;-<-<-<-<-<-<-<yne^' W0Q7K>FEAL=R9X6_!4f"1n$/w%-&+())(*'+&,&-&-&-&-&-&-&-}ui _WPI&D. ?6 ;= 7C3I0O.U,[*b'i%r#{!|peZQ IC=8&4-03-9*>'C%I #N !T Z a i r |  \W&Q2N<WE[N\X"[c+Yo2Wz8T=RAPEOGNIMKLLKMJNIOIPHPHPIPKPMOOPOPOPOPOPOPOP\X&R2Q:ZC_M_W#^a+\m3Yy:W?TCRGPIOKNMMOLPKQKRJRISJSKSMRORPSQSQSQSQSQSQS]Y&S1T9]BbKbU#`_,_k4\w;Y@VETHRKQNPOOQNRMSLTKUKULUMUPTQURVSVSVSVSVSVSV^Z%T1X7a@eIfS#d]-bh5_t<\BYGVKTNSPQRPTOUNVMWMXLXNXPXSXTYUYUYUYUYUYUYUY_[%U0\4e=jGkQ$iZ-fd6cp=_|C\IYMWPUSSURWQYPZO[N[O\Q[T[U\V]X]X]X]X]X]X]X]`\$V/`2j;oDpN#oW-ka6gl>cxE`K\OZSWVVYT[S\Q^P_P_R_U_W`XaYb[b[b[b[b[b[b[ba]#Z-e/o8tAvK#uT-q]6lg?hsFdL`R]VZYX\V_T`SbRcScUcXdZe\f]f^f^f^f^f^f^f^fb^#^*i-t5z>|H"{Q,xZ6sc?mmGizNdT`X]\Z`XbVeUfTgVgZg\i]j_j`jajajajajajajajc`"b'n*y2<F!O+X5{`>uiGotNjUf[b__c\fZiYjXkZk]m_naobocndndmdmdmdmdmdmda"f%r'~0 ;EM)U3^=}fFvpNr|Um\hbdfaj_m]o]p^p`rbsdsesfrgqgpgpgpgpgpgpeb!i#w%/ 9CL&S0[:cDlMywUt]nciifncqatauavdwfwhwivjujsksksksksksksfc!m {#. 8AJ#Q-Y7`AiJ߁tSz~]teolkqhufxeze{h{j{kzlxmwmvnunununununugd p~", 7@H N)U3]<ݏfGӈoSˁy^{funqtnxk|j~jl~m}o|pzpypwqwqwqwqwqwqwhd s +5>DK%R-ߝZ7ӕcFʎlSÇu^~g{owuszp~ooʂpށq߀r~s|szsysxsxsxsxsxsxifv*4 ;AH O'آV6̚`EÓiRr^zgo}vy|vttńu݃vށvw}w{vzvyvyvyvyvyvyiix(2 7=DݭK$ЦT5Ɵ^DfRo]wgow~}{zyz܄z݂z߀z~z|yzyyyyyyyyyyyyjk{&03 9AֱG#ʫR4\CdQl\tf}ov}ۅ݃ށ~}}}{|z|z|z|z|z|zkm~$,/4 ݺ:еF!ůQ2ZBbOj[reznv||ywׅx݃zށz{}|{|z|z|z|z|z|zkp"&)/ֿ6ʺD O1X@`NgZodwmu{ztqoхq݃s߁u~v}w{wzwzwzwzwzwzls !&4 ľBM/V>^LeWmbuk~ryyr~mig̓iނl߀o~p|rzryryryryryrymv2 @K,T<\IcUk_rhy{orvk{fb`ʀbe~h|j{lymxmxmxmxmxmxn{ڻ / =I)R8ZFaQh[zpdrykkqdv_z[|Y|Z{^{azcyfwfwfwfwfwfwfwp ٳ Ͼ ,;F&P5XA_M|gVso^kwedk^pYsUuTuSvWvZv\u_t`t`t`t`t`t`tr ٩ε )7D!M0U<}]GtePlmWev^^ācYÎhTÝkQîlOmNmPoSpUpXpYpYpYpYpYpYpwޠϮĹ )7BL)T5u\?mdHelO_vTYҁYTю]Pѝ`MҰbKbJbKfMhOiQiRiRiRiRiRiRi ҦIJ * 7B}J)tQ3kY:daA^kGXuKSOOSKUIWGWFWFYG\I^J`K`K`K`K`K`K`ٞǬ , 9|AsI'jP/bW5\_:Vh?RqBM|FIIFKCM@N?O>NBOCQDSETETETETETET˦ . y7p?hF"`M(ZT-T\1Oe5Km8Gw;C=??D>F>F>F>F>F>FП{t* l3d;]CWJ QQ$LX'H`*Dh,@q.<{192543617/8.9-919393939393939}vme$^- X6R=LEHLCS?Z>>>=>=?>>@>C=D>F?F?F?F?F?F?P K*E5J8M=QHRRQ^Oj%Mw+J/H3F6D8C:B@?@@?@?@>A@@B@E@FAHAHAHAHAHAHAQL)G4M6Q;UFVPU\Rh&Pt,M1J5H8F;EC?CABAABAC@C@CCCFBHCIDJEJEJEJEJEJERM)J2P3U9YCZMYX Vd'Sq-P}3M7K:I=G?FAEBDDDECEBFBFCFFFIFKGLHMHMHMHMHMHMHSN(N/T0Z6^@`J^U [`(Xm/Ty4Q9N=L@JBIDHFGGFHEIDJEJGJJIMKNLOLQLQLQLQLQLQLTP'R,Y-_2d<fGdR a\(]h0Zu6V;R?OCMELHJIIKHLHMHMHNKMNOPPRPSQTQTQTQTQTQTQUQ'V)^*d/j:lElO hY(dc0`p7\|=XBUFSIQKOMNOMPMQLQMQPRRTTUVUWUXUXUXUXUXUXUWR&Z&b&j,q7sBsLpV(k`0fk8cw>_D[HXLVOUQSSRTQUQURVTXVYXZZZ[Y\Y\Y\Y\Y\Y\YXS%^#g#p*w5 z@zJxS&s\/nf7ir?e~EaJ^N\RYUXWWXVYVYV[X]Z^\^]^^]_\_\_\_\_\_\YV#b l u(}3 =GP${Y-vb6qm>lyEhKdQaU^Y\[[^Z_Z`Za\b^b`baabac_c_c_c_c_c_ZY!fpz&1 ;DM!V+~^4yi=ttEoLjSfXc]a`_c^d^e_f`fbfdeedecfbfbfbfbfbfb[\iu~$.8BJR'[0݁f:zpEuzNpUl[i`fddgcibjcjdjfighhgifidididididid[_ly!,6 ?GO"܎X-҇b:ʁlE{uNvVr]nbkfijglgngnimjlkjlilglflflflflflf\bp|)3 <DߚKӔU,ʍ_9‡iEqO|{Wx^tcqhnllolplqmonnolojoiogogogogogog]dr&08 ?؟G͙R+Ē]9fDnNwW}^ydvismqqqrqsrqsosmsksjrhrhrhrhrhrh^gu#,3ݨ9 ѣEǝP*Z8cDlNtW|^d|jynwrvtvtwrwpwnvlvjvivivivivivi^ix',֬4 ˧CN)X6aCiMqVy^djo}r|t}|u|}s||q|{o}zm}yk}yi}yi}yi}yi}yi}yi_k{ ݰ$а2 ƬAL'V5_AgLoUw]din|rwtuutsuqvow~mx}kx|ix|ix|ix|ix|ix|i`n~ֶ˴0?K%T3]@eJlSt[}bhymtqptmtmsoqpormsktitititititiaq ٵ ϹŸ.=I#R1[>cHjQrYz`xfrlmoirfserhpjnllmkninininininicu ܢԭ ϸ ɽ+;G!P/Y;aFhOpWxx^rdkifmbo_p^o`ncmfkgjihihihihihihgy ߚӦ̱ǻ(8DN,W8^BfKxmSqvZk`ed`h[kYlXkYk\j_iahcfcfcfcfcfcfk~ ̪֞Ĵ$5 BL(T3\>ydFqkNktTd~Z__ZbVeSfReRfUfXfZe\d\d\d\d\d\dp ݖΣĮ 1 >I#R.zZ8rb@kjGdsM^|SYWT[P]N^M]K_N`Q`S`U`U`U`U`U`U`wӛƨ ,:FzO'rX1j`8dh?^rEX|ITɈMOɕQLɥSJɹTISGUHXJYLZNZNZNZNZNZNZܓʢ ,9yCqM jV(c_/]g5Xq:S{>OوBKٖEH٦GFںHEGDIBMDOEPGRGRGRGRGRGRϛ~-v8nAfJ_R#Y[)Ud-Pm1Lx5I8F:C<@>?>>>=?=B?D@F@F@F@F@F@F֓ģyq+j6 c?]GWORW!M`$Ii(Fs*B~-?/<1:38465655476989898989898Ȟyskd'^1X; SCMKISEZAc>l;v!7#4%2'0(.)-*,*,*/*/*/*/*/*/*um e^W#R,L4H< CD ?L94%0,,2(8%>"DJQYcn|  rdTKD=7 1,($" ',16<BI Q Z fsD$?.<6@8A=AEAQ @]?j4B6D;DCEO D[Ah?u4@4A4A4A4A4A4G"A,E/I0L5M=NHMTKaHn E{%B(?+>.=/<1<2;3:4:5:5:5:5:5>5A7B8D8E8E8E8E8E8H"C,H,N-Q1S9UESQQ]Nj!Kw&H+E.D0B3A4A6@7?8?8?9?9?9@8C:EH@JAKAMAMAMAMAMAMAJ H'Q%X%]*`3c?bJ`U\a#Ym)Uy.R3P6N9L;K=J?J@I@IAJAJBJDLEOFPFQFQFQFQFQFQFL L$U!]!c'g1j< jGgRc\#_h*\t0Y5V9TeDbI`M^P]S[U[V[V\W]W^V`U`TaSaSaSaSaSaSPZepx$.8 BKW#yb/tl8ov@lFhKfPcSaV`Y_Z_[`[aZcYdXdWeUeUeUeUeUeUP]it}!*4= ܋HхT#^.zh8uq@qzGnMkRhVfYe\d^d^d^f]g\hZhYhWhVhVhVhVhVR_lx%/ޕ8 ӐEʋQ"…[.e8{nAwwHtNpSnWk[j^i`hai`j_k]k\lZlXkXkXkXkXkXTbo{(ؙ3̕BĐN!Y-b7k@|sHy|NvTsXq\o`nbmcnboao_o]o[oYoXoXoXoXoXVdr~ݞ ў1ǚ@L V,`7h@pH~yN{TxYv]tascrdsdtbt`s^~s\~rZ~rY~rY~rY~rY~rYXgu֣ˡ/ž>JT+]6f?nGvNT~Y{]ya}xdzxeyxexybyx`yw^yv\yuZyuZyuZyuZyuZyuZZix ݚ ٢ Цƥ,<HR)[4c>kFsM|SX]zav~ds}eq~eq~cr}`s{^tz\ty[uyZuyZuyZuyZuyZ]l { ܓ՝ ѥ ʪ*:FP(Y3a]xCXGTKPNMPKPKPJQLRNRPRQQQQQQQQQQv݉ʗ%4 |@uJmS#g\*ad0\m6Wv:S?OBKEHFGFGFDIEJGKILJLJLJLJLJLѐž y.r< lGeP_Y!Zb'Uk,Qu0Mρ4Iώ7Fϝ9DЮ;B;C:@>>@@BACBDBDBDBDBD݈ǘx tn+h7aB\MWVS_Oi"Ks%G~(D+B-?/>/>/<19496:8;9;9;9;9;9͒~tnhb*]5W? RHMQJZFcCm@x=!:#8$6&5&4&4&2(2+3,3,3,3,3,}qgb\W'R1M:HB DK AT>\;e8o5{20.,+********{oc[UPK#F,B4><:C7K4S1[ .d +o (| &$"! {n`TNIC?:%6,23/:+A(H%O"W `ly         |m_QGA< 72.*#&)"/5;BIQZf t   }m_PB:5/* &"#(-3 9 AIS^l|9'3254868;6C3N1[ /h -v+))((('''''''''(+-/////:'4181;4;9:A7K5X 3e1s/--,,++++* * * * + +,/!1"3"3"3"3"3";&50;/>1?6>=k;x977 6!5"5#4$4%4%4&4&4&5%5&6(8):)<*<*<*<*<*=%=*C(G)I-J6JAIM GZEgBt@> ="<$;&;':(:(:):):):);):+;-=.?.A.A.A.A.A.>%A&H$L%O)R3Q>QI OVLbJoG{ E#C%B'A)A*@+@,?-?-@-@-@/?1A2C3D3F3F3F3F3F3@$E#L R!V&Y/Y:YF VQT]QjNu!L%J(I+G,G.F/E0E1E1F1F2E5D6G7H8J8K7K7K7K7K7A#IQW\#`,`6`A ^M[XXdUp#S|'P+O.M0L2L3K4K5K5K6J8J:JO@OAQAR@S@T?T?T?T?T?FPYbhl$o.o8nDkNh[dg#`q*]{/[4X8W;U=T?SASBSCSDSETEVDWDXCXBXBXBXBXBHS]fmr!u)v3v> sJoWkb#gl+dv1a7^;\>[AYDXFWGWHXHXIYHZH[G\F\E\E\E\E\EKWakrx{$}-~9{FvSq^$mh,jq3g{8d=bA`E^G]J\K\L\M]L^L_J`I`H`G`G`G`G`GNZdov}'ۄ4ЁC|OxZ#sd,pm3lv:j?gCeGcJbMaO`P`PaObNcLdKdJdHdHdHdHdHP\h rzފ Ҋ0Ɇ@M}W#ya,uj4rr:o{@lDjHhLgOfQeReSfQgPgNhLhKgIgIgIgIgIR_k u ~ ֏̎.Ë= JU"~^+{g3wo:tx@rEoImMlPjSjTjTkSlQlOkMkLkJkJkJkJkJTa n x ܉ ؏ ГƓ+; HR!\+d3|m:yu@w}EuJrNqQoToU}oV|oT|pR{pP{oN{oM{nK{nK{nK{nK{nKWc p|܅ԌГ ʖ)9 FP Z*b2j9r?|zEzJxNvQ{uTxtVvtVutUuuSutQusOvrMvqLvqLvqLvqLvqLYfsֈϐʖĚ&7 DNW(`1h8p?xDI}}Mx{QtzTqyVoyVnzUnzSoyQpwOqvMquLquLquLquLquL[iw݂Ћɓę$4ALU'^/e7m=uC{~HvLrPnSkUhVgUhSi~Qj|Ok{MlyLlyLlyLlyLlyL^ lzֆˏė!2?JS%\-c5k;zsAu|FpKkOgRdTbUaTaRcPeOfMg~Lg~Lg~Lg~Lg~La o~ЉƓ /=HQ"Y+a2yi9tq?oyDjHeLaO^R[RZR[P\O^N`LaKaKaKaKaKdtڂˎ,: EOW(y_/sf5mn;hw@cE_I[LWNUOTNTNUMXLYK[J[J[J[J[JhyчŒ(6 BLxT#r\*ld1gl6bu;]@YCUGQIOJNININIPIRHTGTGTGTGTGnʍ#2~>wIqRkZ%eb+`j0[s5W}9S=O@LBJCIBHCGDIDKDMDMDMDMDMDu҆Ó {-u: oEiOcW^_#Yh(Uq-Q{0M4J7G9E:D9C;B=B>D>E>E>E>E>E>}ɍytp&k5e@ `K[TW]ReNo#Kz&GȆ)DȔ,BȤ.@ȸ/?/?0=3;5<6=7=7=7=7=7цxne c`-[:WF SP OYKbGlDwAׄ>ؓ <أ!;ٷ":":#7'6)4+6-6-6-6-6-ŐwlbZXT)P5L?HIES B\ ?fC;K8T6]3h 0t . ,*(''&&%%%%%vi]QIFB>!;*734:0B-J+S(\%f"s         vi[NC>: 62/#+*(1$7!?FNXcpwhZL@72.*&# &+28@H R ]k}xi[K>2+&!  $ *07@JVdu/++2/104/9+A'L#X!f t    !""""/+.02/3126/>+I)V'c%q$~ # #"""""""""""###$&''''0*1-5+7-624:2E/R-`,m *z )(((''''''''(((')+,,,,1)4)9(;*<.:69B7O5\3i 1v0/..--------..--/122223)8&=$@%A)B3A>?J=W ;d 9p7}655443333345433 6!7!8!8!8!8!5'="B F H%J/I:GFER C_ Ak?w=<<;;:::::;:!:#:%:%<&=&>&>&>&>&9$AGKO"Q+Q6OALM KZIfGrE}CBBA A!@"@"@#A#A$@'@)?*@*B*C*C*C*C*C*< EKQVX'X1W<UH RTPaNmLxJI H"G$G%F&E'E(E)F*E-E.E/F/H/I.I.I.I.I.@IPV\_#`,_7]BZO X\VhSrQ} O$N'M)L+K-J.J/J0K0K2J3K3L3M3N2N2N2N2N2CLT\aef'f1e=cJ `W]bZmWw#U'T+R.Q0P2O4O5O6O6O7P8P8Q7R6S5S5S5S5S5FPX `fjl!m+l7jE gRc^`h ^r&\{*Z.X1W4U6T8T:S;S;TX?X@Y?Y?Z>[<[;[:[:[:[:[:LV ` h o swyy.w> tKpVm`!ji(gr-ez2c6a9`<^?]A]B]C]C^A_@_>_=_<_;_;_;_;NX clsx{ ~~+|;yHvSr]!of(mn.jw3h7f;e>cAbCaEaEbEbCcBc@c>c=c|g=|g=|g=|g=R]irzʃņ&6CN|X y`'wi-tp3ry7pwj>wj>wj>T _lv}Ƀć#4ALU^&|f-yn2wv7u;t?|rCxqFupHsoIqpIqpGqqDrpBroArn?rn>rn>rn>rn>V boýŇ 1? JS\%d,k1}s6~{|;zy?vwBrvEouHluIkuIkuGkuEluCmsAmr?mr?mr?mr?mr?Yer|DŽ /< HQZ$b*i0|q5xz:t>p}Bl|Ei{GfzHd{Hd{Ge{DfzCgxAhv?hv?hv?hv?hv?[iv̀È ,: EOW"_({g.vo3rw8m_A\DZEXEXDXCYA[@]>]>]>]>]>bq~È%4@ JyStZ#ob(jj.fr2a|7]:Y>V@SARBRAR@R?U>V=W=W=W=W=gvɃ!0< xGsPmXh`$dg)_p.[y2W6S9P;N=L=L2@2A2A2A2A2|Š|phfc-^9ZDVN RWO_KiHsE~B ?"=#<#<#:&8(7)8*8+8+8+8+Ʌ|qf[WV#S2P>MHIRF[ Ce@o>{;ω9ϙ7ϫ664210!/!/!/!/!}qf[PG FE'D5A@?K=U:_8i5v 3 1 / .--+*)((((~qeYND? =;#9.684B1K/U-_*k(x&%#""!!     qdXLA85 30.'+0(8&@#I!R]iyrdVI>4.+ (%"&-4<DNYg w   sdVH;0'#  !' . 6>HTbsteVG9-#   &.7AM\m$/%/(/'1$6 >IVdr    %.)-+,+.)3$;FSan{       &-,).(/*-/)7'C$P"] jw             !!!!**/&2$3%2*14/?-L*Y(f&r%~%% % % % $ $ % % % % & & &%%&''''.&4"7 9!8%9/8;5G3T1a/m.y - - , , ,,,,,,---,,,-....2#8<>@"A+@6>B xJuSs\qd"ol'mt+l|/j2i5|h8yg:vf;tf#="=#<%;&;&;&;&;&;&zui^[Y$V1S=PGMPJY Gb DlAw><98775433 3 3 3 vk_TL KI(H5E@CJ@S>];g9s 7ǀ 4ǐ 2ǡ1ȵ00.-,++++xk`TJ@:98(756@4K3U1`/l-z+؋*؝(ٱ''& % $ # # # # yl`TH>5- ,+)*(5'?&J$U#a!n ~zl_SG<2*% #!"+4>HR_n      |m_RE9/&!(0 9 C N\l}n`RC7+"  "*3=IWi~paRC5)  #+6CSez/ ,!,.3<F T a o {                      -#)$)"+08CP^kw#*&&(%''#+3@MZgs~&&*", +"(&'0$<"IUbnz     *".000"0,.7+D(Q&]$i#u#########$$%%$ % % $ $ $ $ $ .35588'734?2K/X.d-o,z,,,,,,,, , -- , -,,,,---27:<?@">-<9:E8R7^6j5t5~44 4 4 3 3 3 3 4 44444344446;> CFFF&D2B?@L?Y>d=o}H |Q{zYwy`swhovp!lux%it(fs+cr.`q/^q0]q0]q.^q,^p+_p)`o(`n(`n(`n(Ubmu{.;~E zNuVq^n}fj|m g{v#cz'`y*]x,Zw.Xw/Ww/Ww.Xv,Xv*Yu)Zt(Zt'Zt'Zt'Yfqz +}8xBtL oTl[hcdkat!]}$Z(W*U~,R~-Q~-Q},R}+R|)S{(Tz'Tz'Tz'Tz'^kv~~{'v4r?mI iQeYb`^hW{!T$Q'O)M*K*K)L)L(L'M&N&N&N&cp{zur"o0j;fEbN _V[]XeUnQxN K#I$G&E&E%E%E%F$F$F$F$F$iv~pkhf*b7_A[JXR TZQbNkKuHEB@ ? ?? >!>!?!?!?!?!p}wi`][$Y1V<SEPNMW J_ GhDsA><:998777777xznbUPNM(K5I?FIDRA[?d+<6;A9K7T5_3j1w/-+**) ( ' ''''rfZOD:0.-,)+5+@*J(V'a&o$#ϑ!ϥ н tg[NC9/' &1<HUbrvh[NB7-$&0: F S b txi[M@4*!  $,7BPauyj\N?2'  '1>M_u|l]N?1%  !+9J]s,)(+0 8DQ^lx)&%',4 @N[ht&!" !#'0<J W c o z                ""$$"",8ER^ju&((&&&(#4 @MYepz*---.-",.):&G$T#`"k"u"~""""""###$$%%%%$$$$.12 4553'14/A-N,Z,e,p+y++++++++,-- - - - - , , , , 15 6: <;97+695G5T5`5j4s4|4433 3 3 3 3 4 4 4444444458<@A A?<"=1>A>O>Z=d=nCKQTTRQS"U3TATLSVQ_ PgOoNwNMLLKKKKLLLMLLLL@GPVYZXWYZ/Z=YIXS W[ VdUkTsS{RQQPP P!P!~Q }Q}Q}Q}Q}Q}Q}QBJTZ^_^\ ^`+`:_E^P \X [`ZhYpXwWVV~U!{U"yT#xU#wU"vV vVvVvVvVvVvVENX^bdcacd(e7dCcMaU `]_e^l]t~\}|[yZ wZ"tY$rY%qY%pZ#oZ"oZ pZpZpZpZpZHR[bfhhfgi%i4h@gJfS e[db~cj{brxazv`s_!p^#n^%l]%j^&i^$i^"j^ j^j^j^j^j^JU_ejlljkm"n1m=lGkP jX|h`xggvgosfxpemd!jc#hb%fb&db&db%db#db!ebebebebebLXbinppnprr.r;qE}pN znVvm^slepkmmjujigi!eh#bg%`g&_g&^g%^g#_g!_f`f`f`f`fO\emrutst vw+w8|vCxuL ttT qs[nrckqkhpseo|bn _m"]l$Zl%Yl%Xl%Yl#Yk!Zk[k[j[j[jS`iqvyywy {|({|5w{@szIoyQ lxYhwaevhbup_tz\tZs!Wr#Ur$Sr$Sr$Sq"Tq TpUpUoUoUoWdmu{~}}|x$u2q=mFiO fV c~^`}f]|nZ{wWzTzQy!Oy"Ny"Mx"Mw!NwNvOuOuOuOu\hrzytq n.j9gCcL`S ][ZcWkTuQNKIH GGH~H}I|I|I|I|anx{pk hf)b5_?\HYPVX S`PhMrJ}HECBAAAABBBBgt~uga^\#Z/W:TDRLOTL\ Ie GoDzA?=;;:::::::n{{nbWRQO(M4K>IGGPDXBa?k =w : 86544333333wsg[OGDCA+@7?A=J;S9\7g5s20.- ,, + * * * * * xk_SH=6 43!2,170A/K.U,`*m){'%$##"!!!!!{naUJ?4+$ ""!* 4?JVcsDžǙȮ}pbVJ>4*" %0<H V e x ֍ ؤ ؾ   rdWI=2(  $.:GVg{teWI<0%  !+7EVh~vfXJ;.#  '4CUixhYK;-! "0@Si(%% '-5AO\it~%"!# (0=KXdpz"" ,9FS`kv(4 A N[fqz     !! $/<IUaku~%%$ ##")5CO[fpy() (+ +)&"#.!; I U `!j!t!|!""""###$%%%%%%%%%, -.11 /+)%(3(B*O+Z+e+n,v,~,,,,,,,--....----/15763/.1,3<4I5U5_5h5p4x444444 4 4 5 5 5 5 5 5 5 5 5 35:>@=7 8:&=6>D>P=Z=c=kGPVXYVSTV%W4W@WJVSU[ Tc TjSrRz}R{QxPvPtPsPqPpQpQpQpQqPqPqP@KTZ]^[XY["\1\=\G[PZX Y` ~Yg{XoyWwvVtVrUoUmTlTjUjUjUjUjUkUkUkUCOX]ab`\^`a.a:`E`N~_V {^] x]ev\ls\tp[}nZkZiYgYeYdYdYdYdYeYeYeYeYFR[aefcabde+e7eB|dKxcSuc[ sbbpajm`rk`{h_f^c^a]`]_]_]_]_]`]`]`]`]JV^eiigef hi(~j5zi?viIshQpgY mg` kfghepedycd`c^b\bZbYbYbZbZa[a[a[a[aMYbhmmkik m|n%xn2un=qnFnmOklV hl^ ekecjm`iv]i[hXgVgUgTgTgTfUfUeVeVeVeQ]flqpon}pxrus!rs/os:lsDirLfrTcq[ `pc ]pk[otXnUnSmQmOmNmNlOkOkPjPjPjPjUajqutt|svuqwoxly+iy7fy@cyI`xQ]wX [w` XvhUuqRu|PtMtKsIsHsIrIqJqJpKpKpKpZfovyxxwyo|j} g~d&b2_=\FZNWUT~] R}e O}oL|yJ|G{E{D{C{CzCyCxDwDvDvDv_kt|~}~rfa^\!Z.X8UBSJPRNZKb Il Fw CA?=<<<===~=~=~fq{ym_XTRP'O3M=KEINFVD_Bh?s = : 8 766555666myrfZPI GE D+C6A@@H>QKZj~̫̔|n`RE9.#  '1>K[nބߛߴpaSE8,!  $/<K]qrcTF7*  +9J^tteVG8*  (7J^v$" !$)2>LYepz! #-:HUalv )6CP\gqz $0>KWblu~ + 8EQ\fpx   $0> J V a j s { " ! ! (6COZdmu}&%&'%! -<I U!_"h"p#x###$$$$%%&&&&&&&&)(-0/+" #&'(6*D+O,Y,b,j-r-z--------..//....,.5996/-0!214>5J5T5]5e5m5t5|554445556666555/4<AB@:69;,<:=F=P=Y=a=h @B'C5DBDLDUC]CdCkBsB{B A A A A~A|AzB yB xB xB xB xA xA 6@HMNMIEFH#I2J>JHJQIYI`IhHoHw G }G zGxFvFuFsFrGqGqG qG qG qF qF 9DLQSRNJKM O.O:OEONOVN]~Nd|Ml yMt wL} uLsLqKoKmKlKkLjLjLjK jK jK jK =HPUXVSOPRT+T7TBTK|TSzSZxSbuRi sRq qQz nQlPjPhPfPePdPdPdPdPeO eO eO ALTY\ZWTU WX'Y4}Y?zYHwXPtXXrW_oWf mVn kVw hUfUdTbT`T_T^T^T_T_T_S _S _S DPX]_][XZ [}\$z]1w]<t]Fq]No\Ul\]j\d h[l eZu cZaY^Y\X[XYYYXYXZXZXZW ZW ZW HS[aba_\^{_xa!ub.rb9obClaKjaSgaZe`b c`j `_s ^^}[^Y]W]U]T]T]T]U\U\U[V[ V[ LV_dedcaybudreof+lg7jg@gfIefQbeX`e`]dg [dp Yc{VcTbRbPbObObOaOaP`P`P` P` OZcihggyesgoiljik(gl4dl=blF_kN]kVZj]Xje Vin Six QhNhLgKgIgIgIfJfJeKe Kd Kd T^gmlkkskmmhn epbq$`q0^q:\qCYqKWqSUpZRpbPpk Nou Ko InGnEnDnCmDlDkEk Ej Ej Ej Xclqpozonpes`u]v[wYx+Wx6Ux?SxHQxOOwWLw_JwhHvs Ev Cu Au?u>u=u>s >r >q ?q ?p ?p ^iquttutiv^yX|T}R~Q&O1M;LCJKHTF\CeAp?~|<~ :~ 9~ 7~ 7} 7{ 7z 7y 8x 8x 8x doxyy{ypzd|XPK HG E+D5C>AG@O>X4*!! + 6 A N \ l teWK@5*!  "+6BP_qćĝĵxj\OA5)  !*5CRcxՏէ{l^PB4(  '3BTg~}n_QB4'  $1AUjqaRD4&!/AVm  %.;IVbmv  *7EQ^hrz%2@LYcmu}  ,:GS^gpx  &3@MXajrz  +9FQ[dlt{   " 0 > J U ^ gov~ (7DOYaiqx"!'*)$"1 >!I"S#\$d$l$s$z%%%%&&&''((''''&)1440)#&(+*8+D,N-W-_-g-n.u.}......////////)18<<92- /1&344@5J5S5[5b5i5q5y5555556}6{6{6z6z6z5z5-7?CD@:679":/<;h >g >f?e?e?d?dWaihg{gqgeh\jXlTnRoPo$Np.Mp8KqAJqIHqQFqYDpbBpl@px>p0$  !,:J]rzk\M?0# +:Maym^O@1"  );Of"+8FS^irz&4BNZdmu} ".<IT_hpx   (6CNYbkry "/<HS\elsz  (5ALV_fnt{  -:EPYahov}   $ 2 >IS[cjqx#%$+8CMV]els{       &-0.(" &!3">#H$Q$Y%`%g&n&v&&''''((~)})|(|(|(|($.5861,&&(!*.+9,D-L-T.\.c.j.r.z//}/{/z/x/v0u0s0s0s/s/s/*5;?<83/.02)354?5I5Q5X~5_}5f{6ny5vx5v5t5r6p6o6m6l6k6k6j6j5j50:ACA>:65 78%:1;<|;Ez"z?.x@8uABsAJrAQpAYnA`lAgjAphAygAeAcAaA`A^A^A]A]@]@]@]@9CJKIGDA~AzBvCtE*qE5oF?mFGkFOjFVhF]fFedFmbFv`F^F\E[EYFXFXFWEWEWDXDXD=GNNLKI}ExFtGpHnI'kJ2jK<hKDfKLdKSbKZ`Kb_Kj]Kt[JYJWJUJTJSJRJRJRIRIRHSHAKQPON~LxHrJnK kMhN$fN/dO9bOBaPI_PQ]PX[O`YOhWOrUO}SORNPNNNMNMNMNMMMMNLNLDNTSRQzPrMlOhP eQcR!aS,_S6]T?[TGZTNXTVVT]TTfRSoPS{NSLSKSISHSHRHRHQIQIPIPHRWVUTvSlQgSbT_V]W[W)YX3XX<VYDUYLSYSQY[OXdMXmKXxIXGWEWDWCXCWCVCUDUDTDTLVZYX{XqWfVaX]YYZW[U\&S]0R]9Q^AO^IM^QL^XJ^aH]kF]vD]B]@]?]>]=\>[>Z>Z>Y?YPZ]\[v[m[a[[]V^R` PaNb"Mb,Lc5Jc>IcFGcNFcVDc^Bch@cs>co=o"JV`hpx~ +8EPZckry  %2?JT]elsz  ,8CNW_gmtz  $1<GQY`gnt{  )5@JS[bhou}  !.:DMU \ c j q x  ! &3>GPW^els|#)*&"!-8BKRY`gow~ } { y!w"v"u"t!t!t!!+11.*&! !(#3$=$F%N&U&\~&c|'k{'sy'|x(v(t(r(q)o)m)l)k)k)k(k((28752-)' (*#+/~,9|,Bz-Jx.Qw.Xu.`s/gr/op/yo/m/k/i/h0g0e0d0c0c/c/c/.8=<:730. /{0x2+v35t3>r4Fp4No5Um5\l5dj5lh5ug5e5c5a6`6_6]6]6\6\5\5\43<A@><96{4w5t7q8'o92m9;k:Cj:Kh;Rg;Ye;ac;ib;r`;}^;\;[;Y;X;W;V;V;V:V:V97ADCB@~>y;t:q:m<k=$i>/g?8e?@d@Hb@Oa@W_@^]@f\@oZ@zX@V@T@S@R@Q@P@P?P?Q>Q>;EGFEDyBt>o?k@ gAeB!cC+aC5_D>^DE]EM[ETYE\XEdVEmTExREQDODMELEKEKDKDKCLBLB?HJIH}GuEnBiCeD bE_F]G(\H2ZH;YICWIJVIRTIYSIaQIkOIvMIKIJIHIGIFIFHFHGGGFGFCLLLKyJpIiFdG_I\JZKXL%VL/UM8SM@RMHQNOONWNN_LNiJNsHMFMEMCMBMAMALALBKBJBJGOONNuMlLcJ^LZMVNTORP"QQ,OQ5NR=MRELRMJRTIR]GRfERqCR~AR?R>R=RW{?\F>]O=]W;]a:]l8]y6]4]3]1]1\1[1Z1Y2Y2XTYXXsWiW`XTYN[H]C_@`>a=a ;b):b29b:8cB7cK6cT4c]3ch1cv/c.c,c+c*c*b*`+_+_+^Y\\{[o[e[\\Q^I`CbKYi{w}uptbuUxI|?4+" "+5BP_q}x|i|[NA6,#  "+7ETf{qaSF9.#  !+8HZnyhYK=1%  +:L`wؒجp`QC5(  *<QggXI:* ,?Un%2?KV`hpx -:FQ[cksy  (5@KU^fmtz ".:EOX`gmtz'3>IRYagmsz !,8BKSZagmtz%1;EMU[bhnu|   )4>GOV\cipx   " . 8 A J Q X ^ e lt}~}zxwwww!$# '2<DLSZ`~h}o{xyxvtsronmmmm )+*($  "-~7|@zHyOwUv\tcskq tp n!l!k!i"h"f"e#d#d"d"d!&/10.+($ ~ {"x#)u$3s%<q%Cp&Kn&Rm'Yk'`j'hi(qg({e(d)b)`)_)^*\*\)\)\)\(,55431-|+y(v'r)p*%m+/k,8j,@h-Gg-Ne.Ud.]c.ea/n_/x^/\/Z/Y/X0V0U0U/U/U.U.1:9876z2u0r.n. k/i0!f1+d24c2=a3D`3K_4R]4Z\4bZ4kY5uW5U5T5R5Q5P5O5O5O4O4O36=<<;{:t7o5l3h4 e5b6`7(^71]8:[8AZ9HY9PW9WV:_T:hS:sQ:O:N:L:K:J:I:I9I9I8J8:@??>w=p;j8f8b9_:\;Z;%Y<.W=7V=>T>FS>MR>UQ>]O?fM?pL?}J?H?G?E?D?D>D>D=D=E<>CBB}As@k?e<`<\>Y>W?U@"SA+RA4PB<OBCNBKMCRKCZJCdHCnGC{ECCCBC@C?C?C?B?A@A@@AEEEyDoDgB`?[AWBTC QDOENE(LF1KF9JGAIGHHGPFGXEGaCHlBHx@H>HCKFBLMALV@L_>LjPC%cG#cQ"d\!didyddddca``_YX{XmXbXYXPYG[>^7`1c*f$i !j jj k(k0k9kBlLlXleltllllkihhg]]u\h\^\U\K^Ba9d2g+j$mps ttt!u)u2u;uFuRu_ un u u ut t s q q pbapadaZaObEe2' $1@Re}o_QC6*  $3DXnшФgWI;.! $6I_x_PB4& %9Og"/;GR[dlsz *6ALV_fmtz $0;FPY`gntz *5@JRZagmsz#.9CLT[agmsz (3=FMU[agmsz!,6?GOU[agnu}   %09AIPV\bipx~}|{{{{  )3<CKQW^dl}t|~z x w u s r p p o o o    # - 6~>|F{MySxZvauhsqq{pnlkihfeeee$$#!|y(v1t:rAqHoOnVl]kdimhwfdca`^]\\\\%*))(%}"yxvro#m-k5i=hDfKeRc Yb aa i_!s]!\!Z"Y"W"V#U#T#T"T"T"+...-|+v(r&o#m! j"g#e$)c$1b%9`&A_&H]&O\'V[']Y'fX(pV(|T(S)Q)P)O)N)M)M)M(N(02221v0p-k+h)f( c(`)^*%\+.[+6Y,=X,DW-LU-ST-[S-cQ.nP.zN.L/K/I/H/H/G/G.G-H-4555{5r4k2f/b._-\.Z/X0"V0+U13S1:R2BQ2IP2PN3XM3aK3kJ3wH4G4E4C4B4B4B4B3B2B28888w8m7f6a3]2Y2W3 T4R5Q5(O60N68L7?K7FJ7NI8VG8_F8iD8uC8A9@9>9=9<9<8=7=7=6;;;;s;j:b9]7X6T7Q8 O9M9K:%J:-H;5G;<F=<=:=9=8=7=7<8;8;8:=>>|>o>f=^=X;S:O;L<I=G>F?"D?*C?2B@:A@A@@I>AQ=AZ@@@xAlAb@[@T?N?J@FADBBC@C?D'>D/:EF9EN8FX6Fb5Fn3F|1F0F.F-F-F-E.D.C.CCCCtChC_CWCPCHCDEAF>G nJnWnenvnmmllkjjZtZfZ\YSYHZ?]6`.c&gjmqt w wwww$x-x7xCxPx^xoxxwvuutt~_n_b^Y^M_Bb9e0h'lptw {~ &0;HWh|weid_cRdGgGNU[agmsz#.7@HOU[`fls{ '1:BIOU[`gmu~ !*3<CIPU[ahp~y|{yxvusssss   $.6>}D|KzQyWw]vdtlsuqonlkihhggg  |y(w0u8s @r Fp Lo Sm Yl aj ii rg ~f d b a ` ^]]]]{xxw sp"n+l3j;iBgIfOdVc]af`o^{\[YWVUTTTT""##"y!sonm jge'c/a7`>^E]K\RZZYbWlVwTRQONMLLMM&''({'r&l$h!fdb_]#[+Z3X:WAV HT OS WQ!_P!iN!tM!K"I"H"G"F#E#E"F"F!*++,v+m*f)b&_$]"[!X"V#T$(S$0R%7P%>O&EN&LL&TK'\I'fH'qF'E(C(A(@(?(?(?(@'@'-./}/q/h.a-]+Z(W'T' R(P)N)%M*,K*4J+;I+BH,IF,QE,ZD,dB-o@-}?-=-<-:-:-:-:-:,:,012y2m2d2]1X/U,Q,O- L-J.I/"G/*F01E08C0?B1GA1O@1W>1a=2m;2{928262524242515150345u5i5`5Y4T3P0L1I1G2E3C3B4'@4.?56>5==5D<6L:6U96_76k66x472717/7/7/6050504667r8f8]7V7P6K4G5D6A7 ?8>8<9$;9,:939::8:B6:J5:S4;]2;h0;v/;-;,;*;);*:*:+9,889|:n:c:Z:S:M:F8B:?;<< :<8=7=!6>)4>03>72??1?G0?P.?Z-@f+@t)@(@&@%@$@$?%>&=&=;<x=j=_=V=O=I=B=<>9?6A4A2B1B/C%.C--C4,D<+DD*DM(DX'Ec%Eq#E"E EEDDC B!A>?t@g@\@S@L@F@>A8C4E0F-G +H*H)H"(I)'I1%I9$IA#JJ"JU JaJoJJJJJIHGGBBpCcCXCPCICBD;E5G0I+K&M $N"N!O O%O,O5O=PGPQP]PkP|PPPPONMME{FkF_GUGMGFG?G7J1L+N&P SU VVV V'V0V9WBWMWYWhWyW W W V V U TSIvJgJ[JQJJJCJ;L3N,Q&T!VY\^ ^^^"^* ^3 ^= ^H ^T^b^s^^^]]\[[NpNbNWNNNGN>O6Q.T'W!Z]`c f gggg$g-g7gBgNg\gmgffeeddczRjS]RTRKRBS9U0X([!_beh kn ooopp'q0q;qHqVqfqyqpoonmmsXeWZWQVFWHRZbiou{ !,8CLT\ciou{ '2<FNV\chnt{!+6?HOV\agmsz %/8AHOU[afls{)2:BIOUZ`flt} #,4<CIOTZ`fnw~|{zxxxxx &.6=C~I}O|Uz[yawiuqt|rqonmlkkkk  | z(x0v8t>sDqJpPnVm]ldjmhwgedca`````| y x usp#n+l3j9i@gFfLeRcYba`j_t]\ZYWV V U U V vqnm m j g e &c .b 5` <_ B^ H\ O[ VY ^XhVsUSQPNMMMMMwoifddb_]![)Z1X8W>VETLSSQ[PeNpL}KIGFEEEEE!"|"q"h!b_\[Z WUT%R-Q4O;NBMHKPJXHbGmEzCB@?>=>>>#$%w&l&c%]$Y"VTS QNM"K)J1I7G>F EE MC UB _@!j?!w=!;!9!8"7"7"7"8!8!&')s)g)_)X(T&Q#O"L"J"H"G#E$&D$.B$4A%;@%C?%J=&S<&\:&g9&u7'5'4'2'1'1'2&2&3%)*},o,d-[,U+P*L(J&G'D' B(A(?)#>)+=)2<*9;*@9*H8+P6+Z5+e3+r1+0,.,,,+,,,,+-*-*,-y.k/`/X/Q.L.H,E+A+?, =,;-:.!9.(7./6/65/>4/E3/N10X00c.0p,0*0)0'0&0&0'/(/(..0v1h2]2U2N1H1D0@/<0:1 71625233%23,13304;/4C-4L,4V*5a)5n'5~%5#5"5!5!4"4#3#213r4e4Z5Q5K4E4@4:374452607/7.7"-8)+81*88)9@(9I&9S%9_#9l!:| :::9988746n7a7W7N7H7B7<75829/:,; *<)<(=&=&%=.$=5#>=">F >P>\?i?y???>>=<<7z8j9^:S:K:E:?:9:2<.>)@&A$B"B!B C#C*C2C:DCDMDYDgDwDDDDCBBA;v<f=Z=P=H=B=<=6>/@*B%D!FH IIII&I.J6J@JJJVJdJtJ J J J I H G G>q?b@V@M@E@?@9A2B+E&G!IKNPPPP!P)P1 P; QF QQ Q_ QoPPPPOONM}BkC]DRDJDCCGOW]ciou|"-7@IPW]chnu| &0:BJPV\agmt| *3;CIOUZ`fmt} $,5<CIOTZ_fmv~&.6=CINTY~`|gzoyzwutrrqpppq !})|0y7x=vCtIsNrTpZobmjktjhgeeddccd~{wurq#o+m2l8j>iDgIfOeVc]be`o_{]\[YYXXXY }v q om kige&c-a3`9_?]E\K[RZYXbWlUxSRQPONNNNtlgec c a^\![(Y/X5V;UBTHSOQVP _N iM vK I H G F E E E E xme_\ZZZ W U S $R +P 1O8N>MEKMJUH^GhEuCA@>====>rg_YUSRR PNL J'I.H4G;EBDICRA[?e>r<:8755667{ m!b!Z!TPMLKIGED$B*A1@8??=F<O:X9c7o5~320///00"w#i$^$V$P#K"H FEC A?>!<';.:59<7D6L4 V3 `1 m/ |-!,!*!)!)!)!* + "%s&e'['S'L&G%D$B!?!=! ;!9"8"6#%5#+4$23$92$A0$J/%S-%^+%k*%z(%&%$%#%#%$%%$%$%'o)b*W*O*I)D(@'=&:%7&5&4'2'1("0()/(0-)7,)?+)G))Q(*\&*i$*x#*!****) )!((|*l+_,T,L,F,A+<+8*5*2+0+ .,-,,,*-&)--(-4'.<&.E$.O#.Z!/g/v////..--+x-h.[/Q/I/C/>.9.4.0.-/+0 )1'1&1%2#$2*#21!39 3B3L3W3d4t44333321.t/e1X1N2F2@1;16111+3(4%5#6 !6 77 7'8.868?8I9U9b9q999888761p2a4U4K4D4=48434-5(7$9 :; <===#=+>3><>F>R>_>o> > > > = = < ;}4k6]7Q7H7A7;75707*9%; =?AC CCCD'D/D9 DC DN D[ DjD|DCCCCBAx8g9Y:N:E:>:8:3:-;'=!@BDFI J J J J#J+J4J>JIJVJeJwJJIIIHHr<b=U>J>B=<=6=/>)@#BEGJL O P QQQQ&Q/Q9QDRQR`QrQQQPPOOl@]AQAGA@@9@2A*C$FHKNQ SVW XXYZ!Z)Z3Z?ZLZZZlZYYXXWWeEXEMEED>D5E-G%JMPSV Y\^_ ` abcd#d-d8dEdTdfd{ccbaa`_JSJJICH9I/L'ORUY ]`cfhij k mnpq&q1p>pNp_psoonmllZOPNHM=N3Q)T X\` dhkortuwx z |}(5EVk~}|{zVTNSBT7V,Z"_ch mrvz} ,;MbzUYHZ;]/a$flr w} !1CWpNa@d3i'nu| %7LdFk9p+w +@XtӒҰ>y1# 3Kd )4?HPX^ekqw~ #.9BJRX^djpv} (2;DKQX]chov~"+4=DKQV\agnv %.6=DJOUZ`fnw'/7=CINTY`goz~|zyxwxxwu !)07}=|CzHyMwSvYtariqsomljihiiii|ywvt#s+q1o7n=lCkHjNhTg[eccmbx`_]]\\\\\xtpm kihf%e,c2b8`=_C^I\O[VZ^XhWsUTRQQQQQR ~ s l heca _]\!['Y-X3V9U?TESKQRPZOdMoL}JIHGGFGG ukc^[ Z Y WUSR#Q)O/N5M;LAJHIOHWFaEmCzB@?>===>|nd\VSQP P OMKI%H +G 1F 8D >C EB M@ U? _= k< y: 8 7 5 5 5 5 6 vi^VPMJIIH F D C!B(@.?5><=C;K:T8^6k4y21/---./qdYQLGDCBA @><;%:+82796@4H3Q1\0h.w,*('&'()}m`VNHC@>=;9865"3(2/160=.F-O+Y*f(t&$"! !"#yi!\"R"J"D!?!< 9854 20/.%-,+3*;)C'M&W$d"r  u"e#Y$O%G%A$<#8#5"3 0 .! ,!+!*"("#'")�%#8##A"$J!$U$a$p$$$$$$##"q$b&V'L'D'>'9&5&1%.$+%)%'&%&$'#' "''!(. (6(>(H)S)_)n))))((('%n'_(S)I*B);)6)2(.(*(&)$*"+ +,,,$-+-3-<-E.P.].l.~.. - - -,,|(j*[+P,F,?,9,4+/+++&,"./0 1112!2(20293C3N3[3i 3z 3 3222 1 1w+f-X.M/C/<.6.1.-.).#02356 7778$8,85 8? 8J 8W 8e8v8877766s.b0T1I1A19141/0+0%2 368:< = = = =! =)=1>;>F>R>a>r>===<<<m2]3P4F4>47423-3'4"68:=? A C DDDD$D-D6DADND\DmDDCCBBBh6X7L8C8;75606)7#9;=@B EGI IJKK K(K2K=LILWKhK}KJJIIIb:T;I;@;9:39,:%<?ADG ILOP P QRTT#T,T7TDTRTcTwTSRRQQ\?O?E?>>7=/>'@ CFIL ORTWXY Z[]^_&_1^=^L^]^q]]\[ZZVDKCCBFLRX]cipx &/7?EKQV\ahpy  (08>DJOUZahq{|{y "*18>CHNT~Z|azixsvusqpoooml ~}|$z+w1u7t=rBqHoMnSlZkbilgxfdba`aaa`|wrp nllk%i,g1f7d=cBbH`N_U]]\fZrYWVUTTTUUunifc a`_^ ]&[,Z2X7W=VCUISPRXQaOlNzLKJIIIIJtjc^[YW VTSR"Q(P-N3M8L>KEJLHTG]FhDuCA@@??@@ y l a Z U R PON LKJI#G)F/E4D:BAAH@P>Z=d<r:9876667 re[SNJH G G EDBA @%>+=1<7;>:E9N7W6b4p210/..-.}l_UNHDA@@ @ > < ; 9 "8 (7 .6 55 ;3 C2 L0 V/ a- o+ * ( ' % % & ' wg[QIC?<:998 7542%1,02/:-B,K*U(a&o$#! scWME@;85432 1/-,"+)*0(7'?&H$S"_ m~o_SJB<741/.,+)(' %&$-#4"= FQ]k|}k\P G ? 941-+)'% $"! #*2:DN[izzgY!M"D"<"6"2!.!* ' $"  !!!"!"'"/"8#A#L#X#g#x# # # # " " !vd"V#K$A$:$4$/#+#(#$# #$%& &&''%','5(?(J(V (d (t ( ('''&&q"`$S&H'?'7&1&-&)%%%"%'(*+ ,,,,",)-2 -; -F -R-`-p--,,,++m%]'O(E)<)5)/(+(''#'(*,.01 1 1 1 1&2.272B2N2\2l2211000h)X*L+A,9,2+-+)*%* +,.024 7 7777"7*838>8J8X8h8|776665c,T.H/>/6.0.+-'-"-/1357 :; <=>>>&>/>:>F>T>d>w>==<<;^0P1D2;241.0)/$02469 ; =@A B CDEF"F+F5FAFOF_FsEEDCCBX4K5A59524-3&4 58:= @ BEGHJ KLNOO%O/O<OJOZNmNMLKKJS9G9>97817)7!9<?B EHJMOQRT UWYZY)Y6YDYTXgXWVUTTN=C=<<5;,<$>ADH KNQTWY[]^` bdgg"f.f<fMe`ewdca`_IBAA:?0@&CFJN RVZ]`cegikmo ruwv&v5uFtYtosrponFF@E5F*H LQV Z_chkoruwy{} +<OfFK:L.O#SX^ diotx| !1D[v?R2U&Z`g mt{ &9Pj7\+ahp x.E_~ɞȾ/i#py #:Tr !+5>GNU[afms{ $.8@HNTZ_ekr{(19@GMSX^dks| !*2:@FLQV\cjs~}| #+29?DJOU[ckv~|zywrpo %,28}={CyHxNvTu[scqnozmljihgedc{xv utsr%p,n2l7j<iBhHfNeUc]bf`r^][ZYYYXXyqmif edcc a&`,^1\7[<ZBXHWOVWT`SlQyPONMMMMMukd`]ZX WVVU!S'R,Q1O7N=MCLJJRI[HfFsEDCBBBCCxjaZURPN M LKJI"H'G-E2D8C>BEAM?V>a=n;~:988899o b X Q LIGFD CBAA?#>)=.;4::9A8I7R6]4j3z210///0 x h \RKE A ? >=< ;:98 6%5+40372>1F/P.Z-g+w*)('''' rcVME@<97 6 6 54210"/(..-4+<*D)N'Y&e$u#"  m^RHA;74200 0 / - , * ) %( +' 2& :$ C# M! X e u       {iZNE=830-+**) (&%$##)!1 9BLXfvweWKB:40,)'&%# "!  '.6@JVdt  saSH?72-)&$"  $+4=HTbr       o^PE<5/*&#! ")1;E Q ^ m k[MB:2-($! !!!!"& ". "7 "A "M"Z"i"|""!! gWJ!@!7"0!*!& "  !#$& & & & &"&*'3'='I'V'f'y'&&%%$c T"G#=$4$.#(#$"!"!"#$&( * ++++,',0,:,E,S,c,v,++**)_#P%D&:&2&+&&%#$$$%')+ -/ 00111#2,262B2O2_2r1100//Z'L(@)7)/))(%'!&'(*,. 024 5 6788 8(829=9K9[8n877655U*H,=,4,-+(*$)*+-/ 1 468:; = >@@@$@.@9@G@V@i@?>=<<P/C/9/2/,-', -/13 6 8;=@ACE FHJJJ(J4IBIQIdH{HGFEDJ3?36301*0#1358 ;>ACFHJLNO QTUU"T.T<TKS^StRQPONE7<756/4&57:= ADHJMPSUWX[] _bbb'b4aE`W`m_]\ZYA<:;49*:!<@C GKOSVY\_acegjm psr r-q=pOoenmkih?@9>.?$BFJ OTX]aehknqsux{~ $4F]v~|z?D3E(HLR W]chmqvz~ )<Rl8K,N SY `gntz 0F`~1U$[aiqy %;TqȒų)biq{ /Ie&0:BIPV\bhov  *3;CIOU[`gnv #,4;BHNSY_fnw~%-4;AFLQW^eny|vsr &-4:?EJPV^f~q|}ywusrnige  }&z-w3u8t>rCpIoOmVl^jhhugedba`\[Z~xsom lkkj h&f,e2c7b<`B_H]O\WZaYmW{VUSRRPOOxngc`]\ [[[Z!X&V,T1S6R<QBOINQM[KfJtIHGFFEEExlb[VSQOO NNML!J&I,H1G7E=DDCLBU@`?n>~=<;;;;<~naXQLIGED CCCB@"?'>,=2;8:?9G8P7[5h4x3211123vfYPIC@><;: :9976#5(4.342;0C/L.W-d,s+*))))*n_ S J B = 9 6543 2110/.$,*+0*7)?(I'T&`$o#"!!!!"{ h Z NE=8 3 0 . - -, +*)('!&'%-$4#="F!Q]lu dUJ@93/,)' ' ' & %$"! $+2:DO\k}q_QF=60+(%#"! !     " ) 1 9 C O \ k ~  m\NC:2-(%"  !(09DP] k |  iXK@70*&" %.7 @ K X gxeUH=4-(#   " ) 2 <GTcuaRE;2+%!   &/8DQ`r^OB8/)#     !#!+!5!@!N!]!o! ZK?5-'" ! " # $%%& &(&2&=&J&Z&l&%%$##UG ;N;`:w98765G);*2*+)%'!&'(*, /1468;=?A CEEE!E,D9DHD[CqBA@?>B-8./-)+$**,. 1 47:<?ADFHJL NPPP'O4OCOUNjMLJIH>251./). .137 :=@DGILOQSUXZ ]_^ ^,]<\N[cZ~XWUT:634-2$369=AEILPSVY[]`behk oon%m4mFk[juhfdb8927(9;?DIMRVZ^behkmpsvy} ,>~T~k{zwu8=,>"AFKQW\bfkotx{~ !3Ib1D%HMSZahnty (>Vs*OT[ bjs{2KfƇ©"[b kt}'?[z ",5=ELRX^djrz %.7>EKPV\bjr|'/7=DIOU[ais{vt  (/6<BGMSYaju|smjh !(/5:@E~K|RzYxbvltyrqomle`^\|zx wxwt!r'p-n3l8k>iDhJfQdZcdap_^]\[WTRQtnjfec ccca!_'],\2Z7Y=WCVKUSS\RhPwONMLKIGG|ne^YWUTS STRQ!O&N+L1K7J=IDGLFVDaCpBA@??>=>ocYQMJHGG FFGED!B&A+@1>7=><G:P9[8i7z6554445teXOHC?=<<; ;;:97!6&5,42391A0K/V.c-s,,++++,l]QH@;74322 2 110/-",(+.*5)=(F'Q&^%n$##""#$weVKB:50-,+*) ))('&%$$*#1"9!C NZi|p_Q F = 5 0 + ( %$## " "!  &.6?JWfxk[ M B 9 1 , ' # !     #+3<GTcug W I>5.($           ! ( 0 : E R a s      c SF;2+%!        ' / 9 E Q ` q      _PC8/(#      $ , 6AN]o\M@6-&!      !)3>KZlXI=3+$     '0;HXjUF:0("     $-8FUg}QC7.&         !!*!5!B!R d zM?4+$  !# %&&&'''2'?&N&`&w%$#"!H<1("  !#%') , ....#...;.J-\-r,+*)(D 8!.!&!  !#%'),.03 5 6666)666E5W5m4210/?$4$+$$#!  !# %(*-/2479;> @AA@%@1@@?R>g=<:98:(0()'#%#$%( *-0368;>@BEGJ MMLL+K:JLIaH|GECB6,-+')#'(*- 037:=@CFHKMPSVY [[Z%Y4XFWZUtTRPO30,.',-/2 6:?BFILORUXZ]`cgk lkk,i=gRfjda_]13,1"259 =BGLPTX[_behknquy} $~5|I{axvsp16&8;@ EKQV[`einrvy|~+@Ys+> AG MT[ahnsy~!5Mi#HNT\dmu| )A\|U\enw6Qn߱  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C"K2TE]Zdqjo˸r±twĴ{ͫԢۙᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚ%0:C"K1TE\[cqimɿpruëxʢ|љؐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ%0:C"K1SE[[argknqsvȚyΒ~ԉ؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉%0:C!K1RDZZ`rejmprtĔwʋ{τԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄ%0:B!J0RDXZ^rdiloprvƆz%09B J/QCWZ\qdiknoqtx{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}$0 9BJ/PBUY[pchkmoqt}ww|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|$0 9BJ-O@SY[ocgjmoqszwt{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{$/ 8AI+M@RXZmbgjmoq{tvwq{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{$/ 8AI(L@QWYkazgknp}sxusxn|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|$/ 8AF(LAPUXfatg~korzuuxq{l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~#- 6 =F*K@OQX`akhtm{qytuxr{n~kւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւ#,/;E+I=NLWXaaiionytruwuqzwn}yk{i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|""':B*F9MEVObV~j\wp`sucoxem|gjhhjfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfk& :>'D3K=UE|aKujOppRluTjyVh|WfXdZc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[ & 6;#A,J4xS:q_?liChoEetGcwHb{Ia~J_J^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8@I+R<\Oedmxsըy̟}ŗŶ̲ү֧~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~"- 7@I+R<[Pddlyrӭwʤzœ~÷ʲҮئڡաաաաաաաաաաաաաա"- 7@H+QG(N9TNYe`{fjmoruxz}tqqqqqqqqqqqqqqq!, 5>G'M8RLWd_zfjloqt|wv|qnnnnnnnnnnnnnnn!, 5>F%M6OLUc_xeiloq~txws{nkkkkkkkkkkkkkkk!, 5>F"K4OLTb^tdimorzttxp{khhhhhhhhhhhhhhh!+ 4 =EI5NLS_]pd}inq{tvwqym}iŁfąfąfąfąfąfąfąfąfąfąfąfąfąfąfą *3 <BI5MJR[]ietj}o|swwszo}lрhЄeχeχeχeχeχeχeχeχeχeχeχeχeχeχeχ )13 B!H5LFQU]`ejlq}qvwvzsy}o|l߀iރg݇e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉%"2A"E3JAQM]Vf^}ndvshrxkn|mlojpgresctctctctctctctctctctctctctctct1>"B/H:PD\K{gQtnVosYlx[i|]g^f_d`baababababababababababababababab 2:?*F3O:x[@qfElmHhsJfwLd{MbNaO`P^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q  05<$|D+sM1lX5gc9ck;aq=_u>]y?\|@[AZAYBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>F%P4ZEdWmiw{}ٖюˈǂ~zwuµqórrrrrrrrrrrrr* 5=F%O4YFcXlku}ߣ{՛͒Nj…|ùyǵvʭuƫvīvīvīvīvīvīvīvīvīvīvīvīv* 4=F%N4XFaYjlsݨxӟ~ʖĎŷ˴|ϫxϥyȤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤy* 4=E%N4WF`YimqܬvФ{Țŷ˴βѤ|џ}ʞ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}* 4<E$M4WF_YgnoڱtϨyş}Ƶ˯ϪҞә̘ʘʘʘʘʘʘʘʘʘʘʘʘ* 4<E$M3VF^Zfomٶsͭwĥ{Ʈ̨ϢҙӔ͓˓˓˓˓˓˓˓˓˓˓˓˓* 3<E$L3UF]Zeolػq̲uí|ƨˡЛӔԏΏˏˏˏˏˏˏˏˏˏˏˏˏ* 3<D#L3UE\ZdojoʹtzƢ˛ϕҏԊΊ̊̊̊̊̊̊̊̊̊̊̊̊* 3<D#L2TE\Zbphmżsx}ŝ˕ϏҋӆΆ̆̆̆̆̆̆̆̆̆̆̆̆) 3;D#L2SEZZ`pflqw|ŗʐΊхҁ΁́́́́́́́́́́́́) 3;D"K1RDYY_pdjoty}Ðȉ̃~}|||||||||||||) 2;D!K1QCWY]ocimptx†}ƀzvvwwwwwwwwwwwww) 2;C K/PBVW[nchlnqt~xw|rmmnnnnnnnnnnnnn) 2:CJ.O@RWZmbgknqtywt{njgfffffffffffff) 1 :BJ+L?QVYka|gknq{tuxp{lhdccccccccccccc(0 9BG(L@QUXhawglo~sxvryn|ifbaaaaaaaaaaaaa'/ 8 AF*L@PSWcapg{mqzutyp|lh̃dˈaʍ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ&-4<F+J>OOW\ahhqnx{s}uxq{mjڃgنd׋a֐`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց#&)<D+H;MIWTa]je|pjvvnqzqm~tkvhwfycza|`|`|`|`|`|`|`|`|`|`|`|`|`|( ;A)F6LAVKaR{kWtq\ov_l{aicgdefcgah_i_j_j_j_j_j_j_j_j_j_j_j_j_j ) 9>&D0K9T@xaFrjJlpMivPf{QdScTaU`V^W]X\X\X\X\X\X\X\X\X\X\X\X\X\X )4:!A)zI0rR6l^:hh=do@atA_yC^}D]E\E[FZGXGXHXHXHXHXHXHXHXHXHXHXHXHXH* 06w>"nG(fP,aZ/]d1[l3Yq5Xu6Vy6V|7U7T8S9R9R9R9R9R9R9R9R9R9R9R9R9R9R9) 5;D!N-YFI3NIT]\nc}imq{usxn|ieb_^^^^^^^^^^^^$,4 =BI3NHRZ[icvio~swwq{lhʃdɈaǎ^ƕ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ#*25 BH4LFQU[bdmkvp}yuszn~kׂgՆdԋaӐ^і\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ!&%3B!G3KBPO[Zecljzrptxto|wlzh|f}c`^ߖ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ3@"D0I=PH[PeWzm]tsaoydk~ghifjdlbm`n]p\q\q\q\q\q\q\q\q\q\q\q\q 3< B,H6O?ZFxeKqmOlsRiyUf~WdXbYaZ_[^\\][^[^[^[^[^[^[^[^[^[^[^[^  39?&F.zN5sX:mc?ilBerDbwF`|G_H]I\J[KZLXMWMWMWMWMWMWMWMWMWMWMWMWM! .4; vC'mL,fT0b`3^i5\o7Zt8Yy9X}:W;V;UR>R>R>R>R>R>R>R>R>R>R>" )~0s8i@bI#[Q&WZ(Ub*Ri+Qo,Ps-Ow.Nz.N}/M/L0K0K0K0K0K0K0K0K0K0K0K0K0K0(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(39BK'V4aBmPw]hr냒{}xtronlk›iʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜ'28AJ'T4_CjQt_~l펈x燏―{wtqomlægæiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡ'1 7@I'S4]ChSrb|pꔅ}㋋݄~zuromikmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥ'0 7@H&R4\DfTpdys瘂ߏوҁ{vspmknppppppppppp&0 6?H&Q4[DdUnewvܔԌ΄}xutpoqsssssssssss&/ 6?G&P4YDcUlgux|٘ѐʇł|ztrtvvvvvvvvvvv&. 6>G%O4XDaVjhszz͔֝ƍ}yvxyyyyyyyyyyy&. 5>F%N3WD`Vhip{ުwП|Ǘ~y{}}}}}}}}}}}&- 5>F$M3VD_Vgin}֬sʣz~&- 5=F$M3UD]Vej߸k~ЯqŦx~%, 5=E#L2TC\Vcjڻi~̲pv|‹Š%, 4=E#L2SC[VajԿh~Ƕntz†„%, 4<D"K1RBYU`jf}¹lrx~€%, 4<D!K0QAXT^ie|kpv|}{yzzzzzzzzzzz%+ 3<D J.P?VS]hc{iotzzwtsttttttttttt$+ 3 ;CJ,O=UQ[gbzgmrx~ytpnmnnnnnnnnnnn$*2 :BI)L;SQZe`xfkpv|xrmjgghhhhhhhhhhh#)1 :BG%K;QPYc_tejosuxn}iea__bbbbbbbbbbb!(08 @E&K;OOW`_of|lqzuszlgDŽcƊ_đ\ęZäZİZİZİZİZİZİZİZİZİZİZİ &.3<E(J;NLV[_hgsm|~rvxp}kԂf҇cь_ϒ\ΙY΢XͫXͫXͫXͫXͫXͫXͫXͫXͫXͫXͫ#&);D)I:MHUU_`hhopxuurzym}ie߉bݎ_ܓ]ۙZڡX٨X٨X٨X٨X٨X٨X٨X٨X٨X٨X٨) ;C(G6LCUM_Vi]ypbsvgn|jjmgodqar_t]uZwXxXxXxXxXxXxXxXxXxXxXx ) ;@&E2KG"R-]:iGtS~_ir}yxtpmkjiȓfϕdѓeԎeԎeԎeԎeԎeԎeԎeԎeԎeԎ&0 5=F!P-[;fHqV|bmw耕zuromkiɞeɞg͘iѓiѓiѓiѓiѓiѓiѓiѓiѓiѓ&/ 4=F!O-Z;dIoXyeqꋌ|䃒}xtpmkf§hƢj˛lΖlΖlΖlΖlΖlΖlΖlΖlΖlΖ&. 4<E M-X;bJlYvhu珉ڀzupmkhkæmȟo̙o̙o̙o̙o̙o̙o̙o̙o̙o̙%- 3<D L-W;`KjZtj~y䓆܋Ճ|wtspknpƢrʜrʜrʜrʜrʜrʜrʜrʜrʜrʜ%, 3;DK,U;_Kh\qlz|ߗՎͅǀ{xvupqtĤuɞuɞuɞuɞuɞuɞuɞuɞuɞuɞ%+ 2;CK,T;]Kf\onvՙ}̑Ŋ|zytuwæyǠyǠyǠyǠyǠyǠyǠyǠyǠyǠ%* 2:BJ+S;\Kd]loۥsΝzŕ~}zy{|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ%* 1 :BJ+R:ZKb^jpөpȠw~}ţţţţţţţţţţ$) 1 9BI*P:YKa^ܵgqάoäu|ĥĥĥĥĥĥĥĥĥĥ$) 1 9AI)O9WJ_]ֹfpɰmszææææææææææ$) 0 9AH(N8VJ^]Ѽeoijkqw~ææææææææææ$(0 8@H'N7UH\\̿coipu{~{}}§}§}§}§}§}§}§}§}§}§$(/ 8@G&M5TF[[bnh~nsz~zxuwx§x§x§x§x§x§x§x§x§x§#'/ 7?F#L2REYZ`lf|lrx~}xtqopr§r§r§r§r§r§r§r§r§r§"'. 6>F K.PDXX^kezjpu|}vqmjijkækækækækækækækækækæ &-5 =DH-OBVV]hcxhnt}zvpkgecdeŤeŤeŤeŤeŤeŤeŤeŤeŤeŤ%,3 <@H.MBUT[eatfl~rvyoƁjʼneŒbĝ_ħ]Ĵ^Ĥ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ#)14 AG.LASRZaanhynzur|k҂eψ`͏\̗ZˠX˫W˺Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙ %$2 @G/K?QNZZbejn}ruux{o~i݄dۊ`ّ]ؘZ֠X֨VմTTTTTTTTTT1@E.JC+H7OAYI}cPwmVptZkz^hadcae_g]hZiXkVlTmTmTmTmTmTmTmTmTmTm 2;A'G1N9zX?sbEnlIisLfzOcQ`S^T\UZWYXWYUZT[T[T[T[T[T[T[T[T[T[Ϳ!17>"}E)uM0nU5i`9ej_w@\~BZCYDWEVFUGSHRIQJQJQJQJQJQJQJQJQJQJϸ#-3y;pC"iJ'bR*]\-Ze0Xm1Vs3Ty4S~5R6P7O8N8M9L:K:K:K:K:K:K:K:K:K:K:"( v/m7e?^GXN!TW#Q_%Ne&Ml'Kq(Jv)I{*H*G+F+E,D,C-C-C-C-C-C-C-C-C-C-t# i*`2Y:SBNIKQHXF]DcCgAl@p?t >x =| qJ}U^g{nvsrxo}ligƆeψb׊aوb݂ccccccccc}y&|. 2:CL'X3c?nLzWbk~syztpljhƏfђbђdՌeۆf݂f݂f݂f݂f݂f݂f݂f݂f݂}z&, 1 :BK&V3a@lMvZfp삔y{uqmkișd˛eΗgґh؊iۆiۆiۆiۆiۆiۆiۆiۆiۆ~{&+ 1 9BJ&T3_AiOs]~j쌈u煑~xrmlkŠgǠh˛jДlՍlىlىlىlىlىlىlىlىlى~{%* 0 8AI&R3]AgPq_{m參zއ~xtqonkţkȟm͘oґp֌p֌p֌p֌p֌p֌p֌p֌p֌|%)/ 8@H%Q2[AdQnavpܑ~҉˂}xusrpæoƢq˛sГtԎtԎtԎtԎtԎtԎtԎtԎtԎ|%(/ 7?G$O2YAbRkbޞrsҕzʍÇ}ywvvsåuɞwϖwґwґwґwґwґwґwґwґwґ}%'. 6?G#N1WA`Rhd֢pt̙wÒ~{zywyǠz͘{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ~$&. 6>F#M0V@^RݮfdХnsƝu|~}{}Ƣ~̙ДДДДДДДДД~$&- 5=E"L0T@]Qײdc˩lsszŤ˛ϕϕϕϕϕϕϕϕϕ$%- 5=E!K.R?[Qѵccƭjrqw~ĥʜΗΗΗΗΗΗΗΗΗ#%, 4 <DK-Q=ZP͸abhqo~u|æɝ͘͘͘͘͘͘͘͘͘"$,3 <CJ+Q;XOȼ`agpm}sy|zzæ{ɞ|͘|͘|͘|͘|͘|͘|͘|͘|͘!$+3 ;BI(O9WN^`eok|qx~}xussæuɞv͙v͙v͙v͙v͙v͙v͙v͙v͙ #*2 :AH%M8UL]^cnj{ov|{vqnlmæoɞp͘p͘p͘p͘p͘p͘p͘p͘p͘")08@F K6TK[\blhxnsz{uokhffŤhʜi͗i͗i͗i͗i͗i͗i͗i͗i͗!'/6 >CJ4RHZZ`ifvlr{xtnieb`_Ša̚bϕbϕbϕbϕbϕbϕbϕbϕbϕ %+18C I3QFXW^edrj||ptwn~hÇc_\[³ZŚ[ϕ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ!"%7C"H3ODVS]`ck~juup}nwgbЇ^БZМXЧVеUǑVԎV֋V֋V֋V֋V֋V֋V֋V֋V֋&7B#G2L@UM]Xeaylirtol|tgxb{^~[XߧUޱS޾R҃Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂ &8@"F0K!D,J5S>y]ErfJmoNhvRd~UaW_Z\[Z]W^U`SaRaPbPbPbPbPbPbPbPbPb ָ ) 5;B&}I.uQ4o[:ie>enAbuD_|F\HZIXKVLUMSNQOPPOQOQOQOQOQOQOQOQOQگƼ+ 18y@ pG&iO+cX/_b2\k4Zr6Xx8V9T;RN>M?K@JAJAJAJAJAJAJAJAJAȵ & -u5l=eD^L"XT%U]'Re)Pl*Ns+My,L-J.I/H0G0E1D2C2C2C2C2C2C2C2C2C2 }!r( h0`8Z@THOOLWI]Gc Ei Do!Bt"Az"@#?$>$=%<%;&;&;&;&;&;&;&;&;&znd# \+ U3O;IBFIBO@U>Z<_;d9h8m7r6w5|43222222222pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl(k1 u6 {<FP!^*~k3{x;xBuHrMpQmTkWiZg\e^b_`a^b\c[dZdZbZbZbZbZbZbZbZbqm(n0 x4 ;DN![+h4u=|EyLvRrVoZm^jahcfecgai_k]l[m\h\g\g\g\g\g\g\g\grn(q. {2 :CL!Y+e5r?~H|PyVu\r`ndlhikgmdpar_s\t\q^l^k^k^k^k^k^k^k^kso't-~1 9BK!V+c6oA{KS|[xatgpkmojshvexbz_|]{_v`p`n`n`n`n`n`n`n`ntp'v+/ 8@I!T,`7lCwMW`zgvnrsnxk|hf͂b؄_܅`azctcrcrcrcrcrcrcrcrtp&y*. 7?H R,^8iDtP[e}nwur|njgeʍbԎb؊c܄e~fxfvfvfvfvfvfvfvfvuq&|(- 6>G P+[8fEpR{_ꅅj~tx}rmjhhÑgђeԏgىh݂i|jyjyjyjyjyjyjyjyvr&', 5=FN+Y8cFmTwboڀ{zuqnlkk˕iДkՍlۆmm|m|m|m|m|m|m|m|vs%&, 4<DL*W8aGjVre،{sυ|zvspooĘm͘oӐp؉qނqqqqqqqqwt%%+ 3 ;CK)T8^GgWڙogϑxsNJ}zwtsrr˚sГt֌u܄uށuށuށuށuށuށuށuށxv$#*2 :BJ(R7\GޥdXѝmfȕus|}{ywvwʜwϖxԎxۆx݃x݃x݃x݃x݃x݃x݃x݃xx##*1 :BI'P6ZFةcW̡kfšrrz|}{{{ƞ{͘|Ӑ|و|܅|܅|܅|܅|܅|܅|܅|܅yz"")1 9AH&O4ߴYEҭaVǥieprw|~ž̚Ғ؉ۆۆۆۆۆۆۆۆy{!"(0 8@G$N3۸WDͰ`V©gdnqu{|˛ѓ؊ڇڇڇڇڇڇڇڇz} !(/ 7?F"N0ռVCȴ^Ufclps{z~~ʜД֋ووووووووz!'.6 >EL/пTBķ]Sdbjoqzw~}zxwʝyϕy֌y؉y؉y؉y؉y؉y؉y؉y؉{ &-5 =DI.SA[Rbainoxu|{wsqpȝrϕsՌt؉t؉t؉t؉t؉t؉t؉t؉|%,3 ;BH,R@ZQa_glmwtzzupljiślДm֌m؉m؉m؉m؉m؉m؉m؉m؉}#)18 :F*P>XO_]ejktq}xztnifcbØeѓf֋gىgىgىgىgىgىgىgى~!&,19D(N;VL]Zcgiqoyzvs}mhc`^\”^Ӑ_ى`چ`چ`چ`چ`چ`چ`چ`چ  ,;D%L8TI[Wachl{nusu{l|gb^ZXWX׋Y܅Y݃Y݃Y݃Y݃Y݃Y݃Y݃Y݃,;D%K5RDYR`]|fftmnlttf|yaͅ}\̎Y̙V̥T̳SąS݃S~T}T}T}T}T}T}T}T} , <C%H3P@YK~`Tvh\oobhwhcl^ވpZޑsWޛuTާwRߴxPxOxOuOtOtOtOtOtOtOtOt۸ - ;A$G/N:~XCwaJpiPjqUeyYa\]_ZaWcUeRfQgOhNhMhMhMhMhMhMhMhMh ݮ̼ / 9?!F*|M2uW9n`?iiCdqGayJ]LZOXQVRSTQUPVNWMWLWLWLWLWLWLWLWLWδ / 6=xD$pL*jT/e^3ag7]o9ZvV?SAQBPCNEMEKFJGIGIGIGIGIGIGIGIGѮ"+ ~2u:lBeI"_Q%ZZ(Wc+Tk-Rr/Py0O1M2K4J5H5G6F7D8D8D8D8D8D8D8D8D8{' q.h6a>ZFUMQUN] Kd"Ik#Gq$Fx%D&C'A(@(?)=)<*<*<*<*<*<*<*<*<*wm"d* \2U9PAKHHOEVB\@a>guEqKoPlTjXh[f]d`ab^c\e[fZc[`][][][][][][][][ie(n+x. 6?HS%`/l8|yAxItPqVnZk_hbfedhbk_m]n[m\h^d________________jf(q){, 5 >GP%]/i:uD|MxUs\oblgikfocrau`w\x^r_m`hbcbcbcbcbcbcbcbckg't'+3 <EN%Z0f;qF|Q|Zvbqilphudzb~aa_~awbrcmdgdgdgdgdgdgdgdglj&w&*2 ;CL$W0bF M-X<٠aL͘jYőreznv}}ywuttƏu֋v݃v|vtvtvtvtvtvtvtvtou%-5 =EL+߫W;Ҥ_KȜhYodwnv}~{yxxzՍzۅz~zvzvzvzvzvzvzvzvpv%,4 <CK)گU:ͨ^J fXmdun|v}~}}ӏ~ڇ~~w~w~w~w~w~w~w~wpx$+2 :BJ'ԳS9ȫ\IdWkcrmyu|Αو߁yxxxxxxxqz#)1 9@ݼH%϶R8ï[HbVjbplwu~||{ˑ|؉}ނ}z}y}y}y}y}y}y}yq|"(/7 ?F$ʺP7YGaUhankut|{|xvtȑv؊w݂wzwzwzwzwzwzwzwzr &-5 <D#ŽO5XF_Tf`mjsszzzuromŐp؊p݃q{q{q{q{q{q{q{q{s$*15B!M4VD^Rd^khqqxx~ytokhgŽi؊j݂k{k{k{k{k{k{k{k{t %*2 AL1TB\Pb\ifonvuy}{smheb`bوcށezezezezezezezezv0 ?J/R?ZMaXgbmkytqr{wl|gb^\Z[ڄ]^x^x^x^x^x^x^x^xz / =H,P;XI_Te^ylfrrlkzrfvaz\}YWUUVzXuXtXtXtXtXtXtXt 1 =F'N7VD]OzdXrj_kreeyj`ɂo[ɋrWȖuTȢwRȯxQxPwQsRoRoRoRoRoRoRoRo ߮м 1 =D&L3T>{\GscOkjVer\`z`[كdWٌgSٗjP٣lNٱmMmLlMjNgNgNgNgNgNgNgNg Ѵſ"3;B$I.{S6s\>ldDglIbtM^|QZTVVSYQZN\M\L]K]J\J\J\J\J\J\J\J\Ԭŷ$2:A xH'pP.jZ4ec8`k<]t?Y|BWDTFQHOJMKKLJMIMHMHMHMHMHMHMHMHMڣDZ'/ }7t?lG fN%`W)\`-Yi0Vq2Sx4Q6O7M9K:I;HD>D>D>D>D>D>D>ˬ$z, p4h<aD[KVS S["Pc$Mk&Ks'Iz)H*F+D,B-A.@.?/>0>0>0>0>0>0>0>0 v l( d0 ]8W@QGMNJVG\DcBi@p?x=; :!8"7"6#5#5#5#5#5#5#5#5#} rh_#X+ Q3 L: GACH@N=T;Z9_7e5k3r1z/.,+********xn cZRK$F,A3 <: 9@ 5E 2J 0P .T,Y*^(d&j%q#x" \"W-X3_6 c= eFfPe^dn"a|'_+^.\1[3Z5Y6X7X9W9V:U;TU>T?S?R@R@R>R>R>R>R>R>R>]!X,\0d3 h: kClNlZjj$gx)d.b2a6_8^:]<\>[?ZAYBWCVDUDTETETDTBTBTBTBTBTBTB^!Y,_.f2 l8 oAoLqWng%ku+h0e5d9b<`>_A^B]D\FZGYHWIVJUJUJVGVEVEVEVEVEVEVE^!Y+b-j0o6 r@tJuUrd&or-l3i8fxHyRw`'tn.p{5m;jAgEeIcLaN`Q^S]U[VZXXYYVZS[O[M[M[M[M[M[M[M` ])h)q+x3 |<}F~P}](yj0uv8q?mEjKgOeSbV`Y_\]^\`ZaZ`[[\W]S^Q^Q^Q^Q^Q^Q^Qa`'k&u)|1 :DMY(f2zr;u~CqKmQiVf[c_`c^f\i[kZk\f^a_\`XaUaUaUaUaUaUaUbc%o$y(0 9BKV(b3n=zyGuPpXk^fdci`m_o^p^q]q_kafbac\cXcXcXcXcXcXcXcf#r"}'. 7@IS(_4j?tKx~Ur^mejjgmepcsbtauavcqdjeef`g\g\g\g\g\g\g\ch!u %-5 >GO([4fAoN}yXw`sgollpisgvfxeyeyfvhoiiicj_j_j_j_j_j_j_dk x$,4 <EM'Y4bB׉lN΃uX}~axhtmprnulxj{i|i}jzlrllmfnbnbnbnbnbnbnbem{#*2 ;CK%V3ږ`AώiNLjrXza}hynusrwpzn}m~mn~pupoqhqdqdqdqdqdqdqdeo~")1 9AI#ޡT1Қ^@ȓgMoXwah}nzswxt{s~qqr؁txtqukufufufufufufuffq!(/7 ?H ئR0̞\@×eMmWta|hn~t{xy|wvuvтxzxsxlxhxhxhxhxhxhxhgs &.5 =߯FҩQ/ǢZ?cLjWr`yhntx}||zzz̓|||u|n|i|i|i|i|i|i|igu%,4 ;۳DͭO.æY>aKhVp_wg~nsx|ʄ}vojjjjjjjhx#*19 շBɰN-W=_JgUn_uf|msx|}{yDŽz{w{p{k{k{k{k{k{k{kiz!'.޽5 к@ĴL,V;^IeTl]sfylrw|{wtrăttxuqvlvlvlvlvlvlvlk}#)0 ˽?J*T:\GcRj\qdwkq~vy{t~pmkmnxoqplplplplplplpln!-=I(R8ZEaQhZobui~|oxtsyn|jgeehxiqjljljljljljljlq+;G&Q6XC`NfXm`~sgwzlrrlvhyd|`}_~^}avbpclclclclclclclt (9E#O3W@^KdT~k\wqcqxikmfrau]x[yYyXyZs\n]j]j]j]j]j]j]jy ܮһ %6B L/T<\GbPwiWpp^jwceh`l\oXqUsSsRsToVjWgWgWgWgWgWgWg ҳɾ#3 @J*R7ZAxaJphQjoWdv\_`ZňdVĒgSĞiPĬjOļkNjOhPdQaQaQaQaQaQaQa Ԫȶ %5 >H%P0xX:p_BigIcnO^vSYWUӉZRӓ]OӠ_Mӭ`KԾ`J`K^L\LZLZLZLZLZLZLZڢʯ (4=D"wN*oW2i_8cg=_oBZwEVISKPNMPKQIRHRHRHQHOHOHOHOHOHOHOͩ *3|;tClK#fT)a]-]f1Yn5Vv7S:PK@IAGBFCECDCDBDBDBDBDBDBDBѢ (y1 p9iAbI\P WY#Tb&Qj(Os*L{,J.H/F1D2C3A4@4?4?5?5?5?5?5?5?5Ī~u%l- d6]>XERMOUL\IdGkDs B|"A#?$=%;&:&9'8'8(8(8(8(8(8(8(zpg!_)X1 R9 MAIHEOBU@\=b;i9p7y5320//.......vlbZS$M+G3 C: ?A ;G 8M 5S3X1^/d-k+s)|'%$#"""""""~pg] TMGA$<+72480=-C*H (M &R $W "] c k s |          R%M/Q2W5Z< [EZOY]XmV{U"S%R'Q)P*P+O,O-N.N.N/N/M0M0L0L0L/L/L/L/L/L/L/S$M/T0Y4]: _C^N]Z[jZy!X$V'U)T+S-R.R/Q0Q1P2P2O3O3N4N4M4N2N2N2N2N2N2N2S$N.V/\2`8 bAbL`X_h]v"[&Y)X,V.U0U1T3S4S5R6R7Q7Q8P8O8O7P5P4P4P4P4P4P4T#P-Y-_0c6 f@fJeUceas#^(\,[/Y1X4W5V7U8U9T:T;SkHjShafp%c}*`/^3\6[8Z:XW?VAUBUCTDSDTAU?U\A[CYEXGWHVJVKULVJWFXCY@Y?Y?Y?Y?Y?Y?W"Y'c&k(q0t9 uCuMuY!qg)mt0j6fHR!~_+yk5su>nFiMeTaY_\]_\a[b[cZc\`_Z`UaQbMbKbKbKbKbKbKY!b nx#+3 <EN![+~f6xpArzKmRiXf\d_bb`d_f^g^h_fc_dYeUePeOeOeOeOeOeOZ eq|")1 :CL X+b7~lCxvLsSoYk^ibfeehcjbkblbkfdg]hXiSiRiRiRiRiRiR[ gt '/7 @IU*ۊ_7фiC}rLx{TtZq_ndkgijglfnfofojhkal[lVlUlUlUlUlUlU\jw%-5 >FޖR)Ґ\7ʉfBÃoL~wTy[u`rephmllnkpjqjqnkodo^pXpWpWpWpWpWpW^lz#+3 ;EכP(̔Z6čcBlLtT~|[z`wetirmppornsosrnsfs`sZsYsYsYsYsYsY_n}")09 ޥCџN'ǘX5aAiKqTy[`|eyjvmuqssstsuvpwhwbw\wZwZwZwZwZwZaq &.6 ة@̣L&œV4_@gJoSvZ~`e}j{nyqxtwuwvzr{j{d{]{\{\{\{\{\{\cs#*2Ҭ>ǦK$U3^?eJmRtY{`ejn~q}t|v}|v}~ske~^~]~]~]~]~]~]eu &۴.ί=êI#S1\>dIkQrYy_dinq|tyvwvvtylyfz_z^z^z^z^z^z^gw!շ*ɳ;H"R0Z=bGiPpXw^~di~myqvsrupvousmsft`t_t_t_t_t_t_izݹϺ(ķ9F P/X;`FgOnVu]|c}hxlsporltjuiulmmgn`n_n_n_n_n_n_l} տʾ&7DN-W9^DeMlUs[|zawfrjmniqfscsbsflgfh`h_h_h_h_h_h_o ڭ Ӹ #5BL*U7\AcJjR|qYvx^pckggkcn_p]p\p_kaeb`b^b^b^b^b^b^s ۥѱ˻ 2 @J'S4Z>aG|hOuoUovZj}_ecag]jYkWlVlXhZc[^\]\]\]\]\]\]x ߜҩɴ¾/ =H#Q/X:|_CufJomPitUd|Z_^[aWdTeRfQfRcT_U[VZVZVZVZVZVZ~ ֡ʭ +:EN*}V4u]=neDhlIcsN^{SYVUYR\O]M^L^L\NYOUPUPUPUPUPUPUݘͦ (7B}K$uT-m\5gc*=+;+;+:+:+:+:+:+:+:+~wog&`/Y7 T?OGKNGVD]Bd@l=u;~9765332 2 2 2 2 2 2 {r jaZ"T*N2I: EA AH >N;U8[6b4i2r/{-+*)('''''''zmd\TMH$B,>3:96@3E0K .Q +W )] 'd $l "v yk_VN GA<7$2*/0+6';%@"E JPV\dmw         I'D1K1P4R:RC QNO\MkLyKIHH G!G"F#F#F$F$F%F%F%F%F%F%F$F#F#F#F#F#F#I'F/M/R2U9UB TMRYPhOwNLK!J"J#I$I%H&H&H'H'H(H(H(H(H(H'H&H&H&H&H&H&J'H-P-U0X6Y@ XKUVTfRtQO!N#M%M&L'K(K)K*J*J+J+J,J,J,J+J)J(J(J(J(J(J(K&K+R+X.[4]> ]IZTYbWqU~ S#R&Q(P*O+N,N-M.M/L0L0L1L1L1M/M-M+M+M+M+M+M+K&N)V)\+`1b; bF`Q^_\mZz#X&V)U,S.R0Q1Q3P4O5O6N7N8N8O5P3Q1Q/Q/Q/Q/Q/Q/L%Q'Z&`(e/h9 hCgNeZbh _v%]*Z.X1W4U6T8S:R;Q=Q>P?P@Q>S;T8U5U3U3U3U3U3U3M$T$]#e%j-m6 n@mKkVhd!eq(b}-_2\6Z:X=W@UBTDSFRHQIRHTDV@X=Y:Y8Y8Y8Y8Y8Y8N$X!a j#p+s4 t>tHrRo_#kl*gw1c7`=]AZEXIVLTNTPTPSQTNWJZE\B\>\<\<\<\<\<\HT"~_.xi8ss@n|GkLhQeTcWbZ`\`^_^__bYeSgNgJgFgFgFgFgFgFWdp{"*2; DފQ!Ԅ\-~f8xoAtwHpMmRjVhYf\e_d`cacbe]iWjQkLkIkIkIkIkIkIYgs~ '/8 B֏N ̉Y-Ńc7}k@ytHu|NrSoWm[k^i`hcgdgdiamZnTnOnKnKnKnKnKnK[iv$,4ܚ?ϔLƎW,`7i@~qHzyNwStXq\o_mbldlfkfmdq\rVrQrMrMrMrMrMrM]ky!(0՞=ʘJT+^6f?nG~vN{}SxXv\t_rcqepgpgpft^vXvRvNvNvNvNvNvN_n{#ݥ+ϡ;ŜHS*\5d?lGsMzS}Wz\x`vcufthththx`zYyTyOyOyOyOyOyOap~ר(˥9FQ)Z4b>jFqLxRW\}`{czf}yh{yizyi||a~~Z~}U~}Q~}Q~}Q~}Q~}Q~}QcrߪѬ&Ǩ7 DO'X3`=hEoLvR}W[_~czfw~hu~is~ivbx[xVyQyQyQyQyQyQeuٯ̯$«5 CN&V1^;fDmKtQ{V[|_xbteqhnimiocr\sVsRsRsRsRsRsRhx ޠ ֩ Ҳ Dz"3 AL$U0]:dBkIrPyU{Zv^rbnekghhghicl\mWmRmRmRmRmRmRk{ ֣Ь ˵ 1 ?J"S.[8b@iHpNzwSu~Xp\l`hcdebf`fbbe\gWgRgRgRgRgRgRn ٛϦɯĹ/=H Q+Y5`>gEznKtuQo|UjYf]b`^b\cZc[`_[`VaRaRaRaRaRaRr ߓџɪ,:EO(W2^:yeBslHnsMizQdV_Y\\X^V_U_U]XXZT[P[P[P[P[P[Pw֘ˤ(7CL$U.y\6rc=mjCgqHbyL^PZTVVSXPYOYOXQTSPTMTMTMTMTMTM}ߏΝè#3 ?IyR(rZ0ka7fh.=.=.=.=-=-=-=-=-=-şztm f*_4Z= TEOLLUI]FeDnAw?=; 9!8"7"6"6"6"6"6"6"6"6"wo g`Z'T0O8J@ FH CO@V=^;e8n6w420/.-,,,,,,,uia [TN"I+D2@:+C(I%O#V!]eoz           ugXNHA ;61-")(%-"28=BHNU]g r }        ?*?0D0H3I9HBFM E[CiAw@?>>====<<<<<==========@*A.G.J1L7K@JK HYFgDuCBAA@@??????????@@@@@@@@*C,I,M/O5P>NI LVJdHrGFEDDCCBB B B!B!B!B!B!C CCCCCCCA)F*L)Q,S2T<TG QRO`MoL|JIHG!G"F#F#F$E%E%E&E&E&E&F$F#G!G!G!G!G!G!B(I'P&U(X/Z9ZD WOU\SjQwON!M#L%K&J'J)I*I*H+H,H,H,I*J(J'K%L%L%L%L%L%C(M$T#Z%^,`6`A ^L[WYfWrU~"S%Q(P*O,N.M/L0L2K3K4J4K3M0N-O+P)P)P)P)P)P)F%P!X _!d*f3f= eHbS`a]m Zy%X)V-T0R3Q5P7N9N;MR@QAPBPCPDPCR?U;W7X4Y2Y1Y1Y1Y1Y1M W`io%r-t7sAqKnXjd$en+ay3^8\IS'[0b8i>pDxI~MzQvUrXoZl\k\kYnRqMrHrGrGrGrGrGf u܏Ҙ̡Ȩ-<GQ%Y/`6g=nC}vHy}LtPpTlWiYf[e[eYhRkMlHlGlGlGlGlGi x֒͜Ƥ+:EO#W-_5f;}lAxsFs{KnOjRfUcX`Y_Z^XbRdMfHfGfGfGfGfGl|ފЖȟ(7 CM!U*\2|c9wj>rqDmyHhLdP`S]UZWYWXV[P]L_G`F`F`F`F`Fp֏ʚ$4 @JS'|Z.va5ph;ko@gwDbH^LZOWQTSSSRRUNWJYFYEYEYEYEYEuϓğ 1=H|P"uX*o_0jf6em;`u?\~CXGUJQLOMMMMMNIPFRCRBRBRBRBRB|׌ș ,: {DtNnV$h]*cd0_l4Zt9V|K=K=K=K=K=͒&z5sAlJfSa[#\b(Xj,Tr0P|3Mņ6JĒ9Gğ;EĮ#<$;$:$9$9#9$9$9$9$9$9$~si d_ Y+T5O>KF GN DWB_?g=p:{8653211111111~qe^ YSN'J0E9A@>H;O 8W 6^ 3g 1p .|,+)(''&&&&&&~pdXR MGC">*:2793?0F-M+T([&c#m!y            ~pcUKF@;73#/)+0(5%;"AGNU^htpbTF?94 /+'#!%*/4:@FN V `lx6-9.>.@2@8>A@J>W *C*F-G2F<EHCU Ab ?p=}<;;::::99999::::::::::9+A'F'J)K/L9KEHQ F^DlByA@@??>>>>==>>>>???????=(E$J#N%Q,R6QAOM LZJgHtGFEDCCBB B B!A!B"B"B CCDDDDDD@%H!O S!W)Y3X>VI RUQcOoM{KJI!H"G$G%F&F'E(E)E)F(G&H$I"I IIIIIC"LSY]&_0_:]E ZPX^UjSvQ!O$M&L)K+J,I.H/H1H1H1I.K+L)M&N%N#N#N#N#N#GPW^c#f,f6dA bL_Y\eYp V{%T)Q-P0O2N3M5M6L7L8L8M5O1Q.R+S)S'S'S'S'S'JT\ci l)m2l= iGfTc`_k"\u(Y-W0U3T6S8R:Q;PU?UATBTBUAW[AZCYDYEXFXF[@^;_7`3a1a1a1a1a1S]hpw|$-;zIuTq_$mh+jp1gy6e:c=a@`C^E^G]H]I\I_Db>c9e6e3e3e3e3e3U`kt{އ'ф7F{Qv[#re+om1lu6j|:h>fAdDcGbIaKaLaLcGeAgm:n7n7n7n7n7Ye q z ݎϏ ƍ2AMV"|_*xg0uo6sv:q}?oBmFlIjKjMiOiOjLmEo?p;q8q8q8q8q8[gs}ކٌ Ց ʒ0?JT!])}e0zl5ws:u{>sBrFpIoLnN|mO{mPznM|qF~sAt=u:u:u:u:u:]jvىҏϔ Ŗ.= HR [(c/~j5|q9zx=xBvEuI|sLyrNvrPtrPtrOvuGxwBzx>{y:{y:{y:{y:{y:_ lyރӋ͒ɗ,; GPY'a.h4o9v=}~A}{EyzIvxLswNpwPnwPmwOpyHr{Ct|>u};u};u};u};u};a o|نώȕÚ*9 ENW&_-f3m8t={{AwEtHp}Km|Nj|Oh|Pg|Pj~ImCn?olBhFeIaK^M]N\M^H`Cb?cHQ ~Y'x`-sg2on7ju];];];];];n~΋ĕ .; F~NxV#r]*md/ik4ds8`{<\?YBUESGQGPGQDS@UΨ&<κ&<&<%;%;%;%;%;%;%;%Óyod ^[ W-S:PDLN IW F_ChAq>|<߉:87665444444ymbXUQ M+I5E>BG?O=X :` 8j 6t 320.--,,,,,,,yl`UN JFC'?0;88@5G3O0W._+i)t' % $ # " ! ! yl_RHC?;7!4)00-7*>'D%K"S \frzl^PD<73 /+(!%'!-28?FMV`l {    {l^OB61,'# !&,1 7 >FOYft./3,7-80764?1K/X,f*t ) ( ( ( ( ' ' ' ' ' ( ( ( ( ( ) ) ) ( ( ( ( ( 0-6*9*;.:48<6I3V1c /q -~ - , , , , , , + , , , , , , - - - , , , , , 2+9(=(?*>0=:}==<<;;;;;;;;;<<======="DIMP&Q0P;NFKS H`FlExDCBAA@@????@@ABBBBBBB@HNRV#X,W7UBRM PZMgLrJ}HGFE D"D#C$C%C&C&D$E"F GGHHHHHDLRX]_(^2]=ZI WUUbRmPwNL"K$J&I(I)H*H+H,H,H+J(K%L"M MMMMMGOV^be$e-d8aC _Q\]XhVrT{"R&P(O*N,N.M/L0L1L2L1N-P*Q'R$R"R"R"R"R"JS[bhjk(k2i>fL bX_c\m Zv$X~(V+U.S0R2R3Q5Q6P7P7R3T.V+W(W%W%W%W%W%MV_ glpq"q,p:lH hTe_bh!_q&]y*[-Z0X3W5V7V8U:U;U;V7X2Z.[+\(\(\(\(\(PY c k ptvw%v6rD nPk[gd!em'bu+`|/_2]4\7[9Z;Y=Y>Y>Z;]5^1_-`*`*`*`*`*R\ f n t x{| {3wA tMpXla!ji'gq+ex/d3b6a8_;^=^?]@]A^?a8b3d0d,e,e,e,e,U_irx|  ́0|? xKuUq^!nf&ln+ju/h}3g6e9db@aBaBbAd;f5g1h.i-i-i-i-W alu{ӀЃ Dž-< }HyRv[ sc&pk+nr/my3k6i:hyn8zo4{p0|p0|p0|p0|p0[fr{ςɇĊ(8DNW|_$yf*wm.ut2t|6r9|q=yp@voBsnDqnEpnErp?sr9us5vt1vt1vt1vt1vt1]it}˅Ċ&5BLU]$~d)|k-zr2}xy5zw9vv HQY!`'{g+wn0su4o}7k;h>eAb~C`~D_~D`@b:d6e3f2f2f2f2dr~LJ .; FOWz^%ue*ql.ms2i{6f9b=_?\AZBYBZ?\:^6_2_2_2_2_2hv͂Œ +8CLyTt\"pc'kj,gq0dy3`7\:Y=W?T@S@T=V9W5Y2Y1Y1Y1Y1m{ȇ'5@ yJsRnYi`$eg(ao,^w0Z3V6S9Q;O&=&=&=%=$=#=#=#=#=#Ljsh`^[,W8TCPLMU J]GfDoAy?ȅ<ȓ:Ȣ9ɳ887766666th]S OM"K0I<FFDOAX?a5;>9G7P4Y2b0m.y,+ ) ( ' ' ' & & & & & th[OE> <96%4.17.?,G)O'W%a#l!zugZMB851.+)&%-#4 ;CKS]jxvgZL?5-*& # #)/5=E N XetwhZK>2'#   "(.5=GR^m~*-.+0+0..5)=%I#W!dr,+0(3(3+11-:+G(T&a$o"|""!!!!!!!!!""""""""""".(3%6%7'5-482D/Q,^*k)w('' ' ' ' ' ' ' ' ' ' '(((((((((2%7":!;#;);49@6M4Z1f0s. . . - - - - - - - - - . . . . . . . . . . 5";?@B&B1@<>H;U9b7n 6y 5 4 4 43333333444455 5 5 5 5 9?CFI#I-H8EDCP@] >i =t <;;::9999999::;;;;;;;=CHLOP(O3M?JJGW Fd DoCyBA@??>>>>>>?@@AAAAAAAGLRVW$V.T9QEOR M^ KiItH}FEEDDCC C!C!C!DEFGGGGGGDKQW[]]([3Y?WMTY RdPnNwLKJ J!I#H$H%H&H'G'I%J"KLLMMMMGO V \`bc!b,`:^H[T X_ViTrRzQ!P#O%N'M(M*L+L,L,M*O&P#Q RRRRRJR Z ` eghg$f5dDaP ^[\dZmXu W}#U%T(S*R,R-Q/Q0Q0Q/S*U&V#V!WWWWM U]di k lml1j@gL dWa`_i]q!\x$Z'Y*X,W.V0U2U3U3U3W-Y)Z%[#[![![![!O Wahmpp rq.o=lI iTg]debm!at%_|(^+]-[0[2Z4Y5Y6Y6\0]+^(_%_#_#_#_#Q Zdlqtu vv*t:qF nQkZibgi!eq%dx(b+a.`1_3^5^7^7^8_3a-b)c&d%d%d%d%S]gotxyzz(x7vD sNpWm_kg!jn%hu(g}+e.d1c4b6|b8zb9yb9yc4ze/{f+|g(|g&|g&|g&|g&U`jrx{}~~%}5zA wLtUr]pd nk$lr(kz+j.~i1{g4xg6vf8tf9sf:sg6ti0uj,vk)wk'wk'wk'wk'Wcmu{#2~? {JySv[tb ri$qp'~ow+{n.xm1ul4sk7pj9nj:mj:mk7om1pn-qn*qo(qo(qo(qo(Yepx~ 0=H}Q{Yy`wg#|un'ytu*vs}.sr1pq4mp7jo9ho:go:gp7iq2kr-ls*ls(ls(ls(ls(\hs{ .;EOW~^{|e"x{l&tys*qx{-nw0kv3hu6et8ct9at:at8cv2ev.fw+gw)gw)gw)gw)_lv +8C LUz\vc!sj%oq)l~y,h}/e|2b{5_z7]z8\z9\z7^{2_{.`|+a|)a|)a|)a|)boz(6A JzRuZqamh#jo'fw+c.`1]4Z6X7V7V6X1Y-[*[)[)[)[)fs~$2> yHtPoWk^he!dm%`u(]~+Z.W1T3R4Q5P4R0S,T)U(U(U(U(kxƒ ~/x;sE nMiUe\ac^j![r%W|(T+Q.N0L1K1J1L-M*N(N&N&N&N&p}~ zu*p7lA gJ cR_Y[aXhTp Qz#N&K)H*F,E,E+E)F'G%G$G$G$G$w„tol$h2d=_F [O XVT^QfNnKxH E"C$A%@%?%?#@"@!@ @ @ @ ~wjca^,Z8WBSKPS M[JcGkDuB?=;:99999999ymbVSR#P0M;JEGNEWB_ @h =r ;~8Ì6Û5ë333221111{ncXMD CB%@2?==G;P9Y6c4n2z0҈.Ҙ -ө ,Ӿ , + * ) ) ) ) ) |ocWLB9 542'120=.G-P+Z*e(q&%#"!  }pcVK@6/-+)"'+%4#<!ENXdqqcVI=3*&$ !")19AJUa o   rcVH;0&  $ + 2;DO\k}sdVG:.# $+3=IVfx%+()))(,#2;GUbp|()+&,&+)(/"8 DR_ly*&.#/"/%,+*5'A$N"[ ht."243 2&22/>,J*W'd&p%{$$$$$$$$$$$$%%%%%%%%%2688:#9-8:5F2R0_.k-v,,+++++++++,,, , ,,,,,,5:=?AA)@4=A:M8Z6e5q4{3 3 2 2 2 2 2 2 2 2 2 3 3 3 3 4 4 4 4 4 9>AEHH$G/D;BG?T>`>>>>>>?@@AAAAA@F K Q STT"R-P;OIMUK` IjHsG{FEEDCCCCCCEEFFGGGGDJPU X YXW$W5UDTPR[ PeNmMvL}KJIIH H!H"H"H"IKKLLLLLG MTZ]] \]]0\?ZLXW V`TiSqQxPOO N!M#M$M%L&L&N"OPQQQQQIPX^bca bc,b;`H]S [\ZdXlWtU{T T"S$R%Q'Q(Q)Q*R&T"UVVVVVLS\bfhggh(g8eEcP aY_a]h\pZwY!X#W%W'V)V*U+V,W)X$Y ZZZZZNW_fjlklm%l5jBgM eVc^be`l_t^{!]$\&[(Z*Z,}Z-|Z.{[+|\&|]"}^}^}^}^}^PYcjnpppq"p2n?lJ jSh[fbeicpbx!a$`&}_){^+x^-v^.u^/t^-u`'va#wb wbwbwbwbR\fmrtttut/r=pG nQlYj`ighnfu!}e}$zd'wc)uc,rb.pb/ob/nb.od(pe$qf!qfqfqfqfT_ipuxxx yx-w:uE rNpVo^md}lkzks wj{#ti&rh)og,lf.jf/if0hf/jh)ki%li"lj lj lj lj Wblsx{|| }|*{8yC wLuTs[{rbxpiuop rnx#om&ll)jl,gk.ek/dk0bk/dl*fm&fm#gn gn gn gn Yeov|(5~A|J ~zRzxYvw`svgptnmsv#jr&gq)dq+bp-`p/^p/]p/_q*`q&ar#br br br br \irz%3>~H yPu~Wq}^n{ekzlhyt"ex}%bw(_v*\v,Zu.Yu.Xu.Yv*[v&\w#\w \w \w \w `lv~!0~;yE tNpUl\icfjbr _{#\~&Y})W|+U|,S|-R|-S|)U|%V|"W| W| W| W| dpz},x8sBnK jSgZca`h]pZy!V$T&Q(O*M*M*M'O$P"PPPPiu~ yu(q5l?hH dP aW]^ZfWnTwQ N#K%I&H'G'G$H"I JJJJn{upm#i0e;aE]M ZT W\TcQkNtKHE C!B"A"A BBCCCCuyjec`+]6Y@VISQ PY M`JiGrD}B?=<;;;;<<<<|}qdZWU#S0P;MDKMHUE] Ce @o >z;97655444444th\PI HF'E3C=AG?P=X:a8k6w4 2 0 / . . - , ,,,,vj^RG=876'534=3G1Q0[.e,q*)̐'̡&ʹ%%$#####xk_RG=4+ &%%%$0#;#E"P![ hvއߙ߬yl_RF;1)!'09CNZgw {m_RE9/% % - 5 ?JWfw}n`RD7,"  '0:ESbupaSC6*  !)4@N^r )"'"'*09E S ` m y             #&%$%$#',5BP]jv         &#( ( &""( 2?LYeq|*,,+)$(/%;"HTamw-0101 0*.6+C(O&\$g#r#|""""""""""###$$$$$$$146798%613=1J.V-b,m+w+*********++,,,,,,,,59: >@? =*;78D6Q5\4g3r3{222111 1 1 1 2 2 3 3 3 3 3 3 3 3 9= @ D FED#A/?<>J=W>>>>>>?@@@@AAA? DJNPO LLM0M?LLKWIa Hi GqFyFEDDCCCCCDEFFFFFFBGOSUUR ST+T;RHQRP\ Nd MlLtK{JJIIHHHHIJKKLLLLEKSX[[XXZ'Z7XDWOUX T` ShQoPvP~ONNMMM M MOPPPQQQGOW]``^]_#_3^@\KZT Y\XdVkUrTzTSRRQ!Q"Q"~R!~S~T~U~U~U~U~UJR[adecbc c0b=aH_Q ^Y \a[hZoYvX~WW}V!{V"yV#wV$vV$vWwXwYwYwYwYwYLV_ehihg hh-g:eEcN bW a^_e^l]s~\{{\y[vZ!tZ#rZ$qZ%oZ%p[ q\q]q]q]q]q]OYbhlmlk ll*k7iChL fT e[cb}bizapxaxu`s_p^"n^$l^%k^&i^&j_!k`kalalalalaQ\ekoqqoop'o5n@lIjR ~iY{h`wffufnrevpd~mckc"ib$fb%eb&db&dc"edfdgdgegegeS_hosuusst$s2r>pG}oO ymWvl^skdpjlmjski|hhfg"cg$af%`f&_g&_g"`hahbhbhbhbhWbkrwyywxx!x/w;|uExtM trUqq\npckojhnqfnzcm`l!^l#\k%Zk&Yl&Zl#[l\m]m]m]m]mZfov{~~||}}-||9wzCsyK pxS lwZivafuhctoasx^r[r Yq"Wq$Uq%Tq%Tq"VqWqWqXqXqXq^isz {)v6r@nIj~P g}Wd|^a{f^zm[zvYyVxSx!Qw"Pw#Ow#Ow!PwQwRwRwRwRwbnw} xt&p2l=hFeN aU ^\[cYkVtS~PNL J!I!I~J~K~K~L~L~L~gs||uom!i.e9bB^K[R XY VaShPqM{JHFDCCDDEEEEmxylfca)^5Z>WGUORV O^ LfJoGyDB@>===>>>>>ssd\ YW"U/R9PCMKJSHZEc Cl @v>;9877666777{wk_RMKJ'H3F=DFBN@V>_;h9s7 4 2 1 0 0 / / / / / / {ocWKA>=;):49>7G6P4Z2d0o.|,*)(('&&&&&~qeYMB8/ -,+)*3)=(G'Q&\%h#v"Ɔ ƘƫsgZNB8/& %/:DP]k|׏ؤٻuh[NB7-$ # - 7 B O ]mwi[NA5*!  "*4?L\myj\N@3(  &0<IZm{l]O@2&  !+7FXk&$$'- 6CP^kv#!!#)2 @ MZgs}""!$/<IV b n y         %&%! !+7EQ^it})*)'(''#3 ?LXdnx-.. //.!,-)9&F$S"^"i!s!|!!!!!!!!""##$$$$$$$02 36 652%02-?,L+X+c*m*v**********++,,,,,,,4 69<< ;85)473F4R3]3g3p2x222211122 2 3 3 3333337:>AA? <:;1<@DGHF@ BD+D;DHCSB\BeAl@t @{ ? ? >>>>>>??@@ A A A A =CINONIIJ&K6KCJNIWH`Gg Fo Fv E}EDDCCCCDEFFF F F F @GOSUTPOP"Q2Q?PJOSN\Mc Lj Kq JyJIIHHHHHJJKKKKKCKSXZZWTVV.V;UFTPSXR_ Qf PmOtO|NNM~M|MzMyMxNxOxOxPxPxPxPFOW\__\Y Z[*[8ZCYLXUW\ Vc UjTqSy}SzRxRvQtQsQqQqRqSqTrTrTrTrTHS[`cca^ __'_5^@]J\R[Y Z` }Yg{XnxXuvW~tVrVoVnUlUkVkVkWkXlXlXlXlXKV^dghfbcd$c2b=aG`O}_V z^] w]d u\ks\sp[{n[lZjZhYfZeZeZe[f[f\g\g\g\NYagjljggg!g/f;eD{dMxcT ub[ raa paim`pk_yi_f^d^b^a^_^_^`_a_a_b_b_b_Q\djnpnkjkk,~k8zjBviJshRpgY mf` keghdnfdwdcac_b]b[bZbZb[c\c\c]c]c]cU_hnrtsoo o}p)yo5un?rmHnlPklW ik^ fjedilaiu_h\hZgXgVgUgUgVgWgWhXgXgXgXckrvxwss |txt&tt2ps=msFjrNgqU dp\ apc_oj\nsZn|WmUlSlQlPlOlQlQlRlRlRlRl\gov{||xzyuyrz#nz/ky:hyCdxKawR_wY \v` YuhWtpTtzRsOsMrLrJrJrKrLrLrMrMrMr`kt{z~snkh,e7b@_H\~PY~WW}^ T|f Q|nO{xL{JzHzFzEzDzEyFyFxGxGxGxepywkf c`'^3[<XEVMSTP[Nc Kl IvFDB@?>??@@@@kvse] ZX!V-S8QANILPJXG`Ei Bs @ ><:98889999r}zm_TONL'J2H<FDDLBT@\>f;p9|7 5 3 2 2 1 1 1 1 1 1 zrfZNE B@?*>4<>;G9O7X5a3l1y/-,+**)))))vj^RF<5 32!1+/5.>-H,Q+[)g't&$#"!!  zm`UI>3*$ "! !* 3=GR^l|}obVJ>3*! %/:F R ` p ΃ Η ά qdWJ>2(  $.9ERbsވߝ߳seXJ=1&  "+6CRbvugYK</$  '3@QcwwhZL<."  #/>Obw#!!$*3AN\ht~  %0=KXdpz! , 9FS_ku~ (4 A N Zfpy ##!#/;IU`jt|'' % & %# (5BOZenw+ ++- ,)& #-!:HT _ h q!y!!!!!"""##$$$$$$$$//232/+'"'2)A*N*Y*b*k*s*z******+++,,,--,,,238995. /1,3;3H4S3\3e3m3t2{222222223344444458>BB?88:&;6EIJGA?A!B1C>CIBSA[Ab@j@q?x?? > > > > >?? @ @ @ AAA<CJOPNIFHI,I:IEHNGWG^FeFlEs E{ D D DCC~C|D{DzE zF zF zF zF zF >HOTUTPL MN(N6NAMKMSLZKaKhJo Jw ~I |IzHxHwHuHtIsIrJrJ rJ rJ rJ rJ BLSXZYVRRS$S2S>RGQPQWP^~Oe{Ol yNs wN{ uMsMqMoMnMlMlMlNlOlO lO lO lO EPW\^^[VVW!X/W;VDVM|UTzT[wTbuSh sSp qRx oRmQkQiQgQfQeReRfSfS fS fS fS ISZ_bb_ZZ[[,[8}[AzZJwYQtXXqX_oWf mWm kVv iVgUeUcUaU`U_U`V`VaWaW aW aW LV^cffd^^__)|_5x_?t^Gq]Oo\Vl\\j[c h[k fZs dZ}bZ_Y^Y\Y[YZY[Z[Z\Z\Z \Z \Z OYafijhbb ~czc&vc2sc<obElaLjaTg`Ze`ac_i a_q _^{]^Z^X]W]V^U^V^V^W^W^ W^ W^ S]djmnmg~g xgtg#qh/ng9kgBhfJefRceX`e_^dg \do ZcyXcUbSbRbQbPbQbQbRbRb Rb Rb V`hnqsqkxkrknlkl,hl7fl@ckH`kO^jV\j]Yie Wim Uiw ShPhNgMgKhKhKgLgLgMg Mg Mg Zdlrvwvyqqqkqhqfr(cr4`r=^rE[qMYqTWp[TpcRok Pot MnKnInGmFnEnFmFmGmGl Gl Gl _iqw{|{uxkwew ax_x$]y0Zy:XyBVxJSxQQwXOw`LvhJvr Hu} EuCuBu@u@u@t@tAs As As As dnv|re]YW U+S6Q>OFMNKUI]FfD~pB~{ ?~ =} <} :}:~ :| :{ :{ :z :z :z it|{n`UPNM&K0I:HBFJDRBZ@c=m;x97 5 4 3 3 3 3 3 3 3 pzuhZOG DCA*@4?==E;M:V8_6i4u20.-,,+++++xzmaUI?976"4,352>1G0P.Z-d+q)'&$###""""reYNB7.)('"&,%5$?#H"S!^ jyuh\PD9/&!*4>ITbq yk^RF:/%   (2=IWfwƋƠŶ{m`SF:.$ '1<IXi|ֿ֧֒~oaTF9-"  $.:IYkqcUG9,  !+8HZmteVH9+  (6GZn  !'0>LYepz!-:HUalv (6CP\gqz  $0>KWblu}  * 8EQ\fow !  #0>J V ` i q y %##$! '5COYcks{('**'" -< I S!]!e"m"t"|"""####$$%%%%%%%,-243.% %'')6*C+N+W+`+g+o+v+}++++++,,---.---03:=<91.0!203=3I3R3Z3b3i3p3w2222223344444443:ADDA;789+:8;D;M:V:]:d:k9r9z9999999:}:|;|;|;|;|;7@GJKIC> ?@&A4A?AIAQ@Y@`@g?m?u?}>}>{> z> x> w? u? t@t@t@s@s@s@;ELOPOJDEF"F0G<FEFNFUE\~Ec|DjzDqyDywDuC sC qC pC nD mD mE lElElElElE?IPTUTPJIJK,L8KBKJ|JRyJXwJ_uIfsImqIvoHmH lH jH hH gH fI fI fI fJfIfIfICMSXYXUNNOO)P5{P?xOGvOOsNUqN\oMcmMjkMriM|gL eL cL bLaM`M`M `N `N `N`N`NGPW[]]ZSR S|S%yT1uT<sSDpSLmRSkRYiR`gQheQpcQyaQ `P ^P \P[QZQZQ ZR [R [Q[Q[QJSZ_aa^WV zWvW"sX.pW9mWAjWIhVPfVWdV^bUe`Um^Uw\U ZU YU WUVUUUUU UU VU VU VUVUMW^beec\{[u[q[n\+k\6h[?e[Gc[NaZU_Z\]Zc[ZkYYuWY UY TY RYQYPYPY QY QY QY QYQYQZafhig}`u_o_k_h`(f`3c`<a`D__L\_S[_ZY_aW^iU^sS^~ Q] O] M] L^K^K^ L^ L] L] L]L]T^ejmmlxeodidedbd%`e0^e:\eBZeJXdQVdXTd_RdgPcqNc{ Lc Jc Hc Gc Fc Fc Fb Gb Gb GbGbXbinqrqtkiici _i\j!Zj-Xk6Vk?UkGSjNQjUOj]MjeJinHiyFi Di Ch Ai @i @h Ah Ag AgBgBg]fmsvwvpreq\pXpVpTq(Rq3Pq<OrDMqKKqSIqZGqbEplCpwAp?p=o ;p ;p :o ;n;n;m;m;mbksy{|{|mz`xVwPwNxLx$Ky.Iy7Hy@FyHDyOByWAy`?xiC=K;S9\7f5q310.----~-}-}-}nx}pcUKA;98"7,654=3F2O1X/b-n+{*(&%%%%%%%vvi\PD:1-,+$*-)6(?'H&R%\#h"w zmaUI=3*! $-6?JUapqdXL@5*" "+ 5 @ K X gxugZNA5+!  "+6AN\mxj\OB5*   "+5AP`rχϝϳzl^PB5) (4AQcw|n`QC5(  $1ASf|paSE6'  !.@Sh  $.<JVcmw *7ER^ir{ %3@MYdmv}  -:GS^hpx  &4AMXbjry  ,9FQ[dlsz   " 1 > J U^fmt{" #$! )7DNW`gnu|&'-/-'"1 =!H"R"Z#b#i#o#w#~#$$$$%%&'''''')06872+%')+*8*C+L+U+\+c+j+q,x,,,,,,-.....~.~..7=??<5/ /1&232>3H3P3X3^3e3l3s3|333}3|3z3y4w5v5u5u5u5u53=CEFC=668!9.999C9L9S9Z9a~9h|9oz9wy9w9u9t9r9q9o:n:n;m;m;m:m:9BHKKID><=>*?5??~?H|?Oz?Vx?]v>dt>kr>sp>|o>m>k>j>i?g?g?f@f@f@f?f?=FLOPOJDA BC&}D2zD<wDDuDLrDSpCYoC`mCgkCoiCyhCfCdCcCaC`D`D`D_D_D`D`DAJPSUSOIG }GyG"vH.sH8qHAnHIlHPjHVhH]fGdeGlcGvaG`G^G\G[HZHZHZIZIZHZHZHDMSWYXTN}KwKsLpL+mL5kL>hLFfLMdLSbLZaLb_Lj^Ls\K~ZKXKWLVL UL TLTMULULULULHQW[\\YSwOqOnPjP(hP2eP;cPCaPJ_PQ]PX\P_ZPgXPqWP{UPSPRPPP PP OPPPPPPPPPPPKTZ^``]|WrTlShTeT$bT/`T8^T@\THZTOYTVWT]UTeTTnRTyPTNTMTKTKT JTKTKTKTKTKTNW^bddbw[mXfX bX_X"]Y,[Y6YY>WYFVYMTYTRY[QYcOYlMYwKXIXHXGYFYEYFYFXFXGXGXR[afhigr`h^a] \]Z]W])V^3T^;R^CQ^JO^RN^YL^aJ^jH^uF^D]C^A^@^@^@]A]A]A\A\V_fjmmlogdd[bVbTbRc%Pc/Nd8Md@KdHJdOHdWFd_EdhCdsAc?c=cr@=rH;rP:rY8rc6rm4rz3r1r/r.r.r.q.p.o.o.ofovz|~}r}d|W{LzBy)G(P'Z&f$s#! t}~qeXL@6,% #"!% .6@IT`n~}wi]PE9.% $-7ALXg w {m`TH<0& $.8DP^nqcVJ=1&  %/9FTdvtfXK>1&  $.:GWi}ɔȪwhZM?1%  "-9IZn߅ߜ߲yk\N@1$   +:K^sm^PA2$ ):Mbx!+9GT_js{ '4BO[env~  "/=JU`iqy  )7DPZcksz "0=IT]emsz  (6BMW_fmtz -:FPX`gnu{   %2?IRZahov}#(*'!,8CLT\bipw     $,131-%  &!2"="G#O#V#]$d$k$r$z$%%%&~&}'{'y(x(x(x(x(+39;:6/('( )-*8+B+J+R+X,_,f,m},u{,~z,x,v-u-t-r.q.p/o/o/n/n/1:?AA>81./0(132=2F}2M{2Ty2[w2au2it2pr2yp3o3m3l3j4i4h5g5g5f5f5f46?DGGD?94 56$|7/y79w8Bt8Ir8Pq8Wo8^m8el8mj8uh8g8e8d9b9a:`:`:_:_:_:_:;CIKLJE?: {:w; t<+r<5o=>m=Fk=Mi=Sh=Zf=ad=ic=ra=}`=^=]>[>Z>Z?Y?Y?Y?Y?Y>?GLPPOKEz@u?q@m@(kA2iA;gABeAIcAPaAW`A^^Af]Bo[BzZBXBWBUCTCTCSCSCTCTCTCBJPSTSPJuEnCkDgE$eE.bE7aE?_EF]EM[ETZF[YFcWFlVFwTFSFQFPGOGNGNGNGNGOGOGFNTWXWT{NpJiH eHbI!_I+]I4[I<YICWIJVIRUJYTJaRJjQJuOJNJLKKKJKIKIKIKJKJKJKIQW[\\YvSkNdM _L\MZM(XM1VM:TMASNHRNOPNWON_MNhLNsJOIOGOFOEODPDOEOEOENENLU[^``^rWgS^QYQWQTQ%RR/QR7OR?NRFMSMLSUJS]ISfGSpES}DSBSAT@T?T?T@S@S@S@RPX^bee}bn\cYYVTVQVOV"MW,LW4JW<IXDHXKGXSEX[DXdBXn@X{?X=X^a<^l;^x9^7^6^5^4_4^5]5]5\5\Yaglnnvlgi\fQdHb DbBbAc$?c->c5=d=s4r 1s0s/s#.s+-t4,t<+tD)tM(uW'uc%uo$u"u!u uutsr q qksy|~tgZM~C~8}/}(} &}$}#~%"~-!~6!~?HR^kz~|{{{rz{m`TH<2( &.7ALXeu {seYLA4*!   & / 9 DP^nwj]PD8,"  '1<HVew{m`SF9-#   (2>L[lqcUG:-"  '2@O`tËáøseWI;-! &2ASf|ٔ٫vgYK<.!  $2CVkj[L>/   #3FZq(7DQ\fow~$2?LWajry ,:FR\eltz  &4@LV_gnt{  -:EOX`hnt{  %2>IRZahnt{  *7BKT[bhnu{  !.: D M U \ b i o v ~  $%" '3>GOV\cipx}||{{!)-/,' !-8AIPW^dks|}|zxwv t!r!q"q!q!q!(05751+# !'"2#<#D~#K|$R{$Yy$_w$fv%nt%ws%q&o&n&m'l'j(i)h)h)h(h(.6;==93-' '("|)-y*7w*?u*Gs+Nq+Tp+[n+bl+jk,ri,}h,f-e-d.c.a/`/`/`/`/`.4<ACC@:4.z-w.s/)q03o0;m0Ck1Ji1Qg1Wf1^d1fc2oa2y`2_2]3\3[4Z4Y5Y5Y4Y4Y48@EHHF@;y5s3o4l4%i5/g57e6?c6Fb6M`6T_6[]7c\7k[7vY7X8V8U8T9S9S:S9R9S9S9<DILLKF}@s;l8 h9e9"c:+`:4^:<]:C[:JZ;PX;XW;`V;hUM>M>M>M>M=M=@HMPQOKyEn@f= b=_=\>(Z>1X>8W>@U?FT?MS?UR@]P@fO@pN@|LAKAJAIBHBHBHBHBHAHADKPTTSPuJjFaB\AYBWB%UB.SB5QB=OBCOCKNCRMDZKDcJDnIEzGEFEEFDFCFCFCFCFCECEGOTWXX~UqOfJ\FWFTFQF"OF+NF3LG:KGAJGIIHPHHXGHaEIlDIxBIAI@J?J>K>J>J>I?I?IJRX[]\{YmSbOWLQJ NJLKJK(IK0GK8FL?ELFDLNCMVBM_@Mj?Mv=NRT2]F1^N0^W/^b-^n,_}*_)_(_'_'_'^'](](\\djnoyonn`kTiIg?e5c 2c0c/d!.d)-d1,d9+eB*eJ(eT'e_&fk$fz#f"f fff e d c!cbjpsuuuit\rOqDo:n0m)l 'l&l%m$$m,#m4"m=!nF nPn[ngnvnooonmlkkiqvy|{q{d{WzJy?x5x+w"vvwww&w.w7x@xJxVxcxrxxxxwvuutqx|wj]PD8.$ '0 9 D P ] l~y~}obUI=1&  )2=IVevtfYL@4(  "+5@N\nxj\OB6) "+6DScw{m_QD6*  !+8GXk~pbSF8*   +:K^sҋҤӻsdVG9* *<Od|fXI;+  +>Sj&4AMXbksz !.<HS]fmu{  )6BNW`hov| #0<GQZbiov|)5AKT\ciou{ ".:DMU\ciou{ '2=FOV\chou|  *5?HPV\ciov  !  # . 8 A I P W ] c jqz~|{zxvuttt&**(#'2;CKQ~W|^{eylwtv~trqonmkjjjj&-131,& "~,{6y>wEuLsSqYp`ngmpkzjhge d!c!b"a"a"a"a",48985/(!{ w!t"'q"1o#9m#Ak#Hi#Nh$Uf$[e$cc%kb%ua%_&^&]'[([(Z)Y)Y)Y)Y(29=??<60y*r&n'k(#i(,f)5e)<c)Ca*J`*Q^*W]*_\+hZ+rY,}X,V-U-T.S.R/R/R.R.R.6=BDDA<{7r1k, g-d-a.(_.1].9\/@Z/FX/MW/TV0\U0dS1nR1zQ1P2N2M3M4L4L4L4L3L3:BFIIGBw=m7d2 `2]2Z2%X3-V35U3<S4CR4JQ4QP4YO5aM5lL6wK6J7H7G8G8F8F8F8F8F7>EJMMK~GsBi=_7Z6W7T7"R7*P72O89M8@L8GK8NJ9VI9_H:iG:uE;D;C<B<A=A=A=A<A<A<BINPQP{LoFeBZ=T;Q;O;M;'K;/I<6G<=G\C>gB?s@???>@=@Ce=Cq;C:D9D8E7E7E7E7D8D8CIPUXYXvVhP]LSHJE FDDDBD"AE)?E1>E8=E?I=I;J&:J.9J58K=7KD6KM4LV3L`2Ll1Mz0M.M-N,N,N,M-M-L-LPX]ab{ap_b[XXNUCQ;O 8O6O5O#4P+3P22P:1PB0QJ.QS-R],Ri+Rx)R(S'S&S&S&S'R'Q'QU\bfgxfme`aU^J[?X5V1U0V.V-V',V/+W6*W>)WG(WP&XZ%Xg$Xu#Y!Y YYYX X W!WZbgkluljk]hQeFc;`1^*] (]&]%^#$^*#^2"^:!^C _L_W_c`q`````_^^]`hnp|rrrfqXnLlAk6i-g#fffff%f-g5g>gHgSh_hnhhhhhgfeegosvxxmx`wSvFt;s1r'qqp pppq'q/q8qBqN q[ qi qz qqqppo n nouy~|t~f~Y~M~@}5}*|!||| | | ||!|)|2|=|H|U|c|t|{{zyyyxw|yl^QE9-#  #,6BN]m~~qcVI<0$  $.9FUexugYL?2&  %/<K[nxj\NA3&  $0?Pbx{m_PB4&  $2CUj̜̃˵paRD6' $5H\scUF8(%8Mc|#0=IT^fnv|  +8DOYaipw}%2>IS\cjqw}  ,8CMV]dkqv|%1<FOW^djpv| *5?HPW^diou|#.8AJQW]ciov} &1:CJQW]cipw~}{zzyxx  )3<DKQW]c}j{rz|x v t s q p o nmmm#&&$   " ,~ 5|=zExKwQuXs^qepnnwlkihfedccbb$*./-("}yv's0q8o?mFlLjShYgaeidrb~a_^\\ZZYYY*15641+%ysol"i+g3e;dAbH`N_U]\\d[nYyXV U T!S!R"R#R#R"R"/6:<;82z-r&j f c!a!&_"/]"6["=Z#DX#JW#QU#XT$aS$jQ%vP%O&N'L'L(K(K)K(K(K(4;?A@>9u3l-c'^&\&Y'"W'+U(2T(9R(@Q(FP)MN)UM)]L*gK*sI+H+G,F-E-E.D.D.E-E-8?CEEC{>q9g4^.X+U+R,P,'O,/M-6L-<J-CI-JH.RG.ZF/dE/pC0~B0A1@2?2?3?3?2?2?2<CGIIHxDm>c9Z4R0 O0L0J0$I1+G12F19D1@C2GB2OA3X@3b?4m>4{=5<6;6:79797:7:6:6@FKMNLuHjC`>V9M5 I4G5E5!C5(A5/@56?6=>6E=7M<7U;8`:8k99y897:5:5;4;4;5;5:5:CJNQR~PsMgH\DR?H:D9A9?9>9&<9-;:4::;9;B8;J71>0?/?/?/?0?0>0>GMRUV|UqRdLYIOEE@?> <>:>9>#7>*6?15?84?@3@H2@Q1A[0Ag.Bu-B,C+C*C)D*C*C+B+BJQVYZyZnWaRWNMKCG:C 6C4C3C 2D'1D/0D6/E=-EF,EO+FY*Fd)Gr(G&G%H$H#H$H%G%G&GOUZ^_w^k\_XUUKQ@M5J0I.I-I,I$+J+*J3(J;'KC&KL%KV$Lb#Lp!L MMMNMLL KSZ_c~dtcia\^R[GXf3e)c a` ````&`.a7a@aKaX af bv b a aaa ` _ _fmq~suujt\sOrCp8o-n$lkkj j j j! j) j2j<kGkSkakqjjjiiihhmsw{zp{c{VzIz=y1x'wvvv v vvvv$u,u6uAuNu\ulu~ttssrrquz~vi[NA5)  &/;GUex~}}|{n`RE9,!  (2?M]prdVH;." )5CTf{ugYK=0# )8HZoxj\M?1# +<NbzƔƭl^OA2$  -@Tk`RC4%  1F\t ,9EPYbjqw~'3?JT]dkrx~ ".9ENW^elrw~ (3>HQX_ekqw} "-7AJRY_ejpv} &1:CKRX^dipv~  *4<DKRX]cipw  #,5>EKQW]cjqz}{ywutrrrqq  %/7>~E}K{QyWx]vdtkrtpnlkihgff e e  ##  |y(v0t8r ?p Eo Lm Rl Xj _h gg pe zc b ` _ ^ \\[[[!(++)${u q n!k*i2g9e@dFcMaS_Z^b\k[vYXVUTSRRRR(.221-'z!rk gda%_-]4\;[BYHXOVVU^SgRrPONLKKJJJJ-47874}/t)l#d^[Y!W)U0T7R=QDOKNRMZKcJnI|GF E!D!C"C"C"C"C"28<>=:y5o0f*^$W T Q O!%N!,L!3K":I"@H"GG"NF#WD#`C$kB$yA%?&>&='='=(=(='='6=@BB?v;l6b0Y*Q% M%K%I%!G&(E&/D&6C&=B'DA'K?(T>(]=)i<)v;*9+8+7,7,7,7,7,8,:@DFF}Ds@h;_6U1L+G)E*C*A*%?*,>+3=+9<+A;,H:,Q9-[8.f6.s5/4/30201111212030>DHJJ{IpEe@[;R6H1B. ?.=.;."9/)8//7/660>50F41O31Y22d12q03/4.4,5,5,5-5-4.4AHLNNyMnJbEX@N<E7=3 93736343&33-24414<05D/5L.6V-6b,7o+7*8(8'9&9'9(9(8)8EKORSwRlO_IVFLBB=88482818/8$.8+-92,99+:A*:J);T(;_'!>"=#=#<IOSVWuVjS]OSLJH@D6@/= -=+=*>!)>((>/'>7&??$?H#@R"@]!Aj AzABBBBBAAMSX[}\r[gX[TQRHN=J3G*C &C%C$C#D%"D,!D4 E<EEEOFZFhFxGGGHGGFFRX]`zap`e^YZOXDT9Q/N&K JJJJ!K(K0K8KBLLLWLeMuMMMNMMLLW]bewfmfcdVaJ^?[5X+V"TR RRRR$R,R4R>SHSTSb Tr T T TT T S R R]dh~ktlkl_jRgEd:b0`&^][Z ZZ [ [' [0 [: [E[Q[^[m[[[[ZZZYdkn{prrgqYpLn@l5k*i!gff e eedd#d,d5d@dLdZdid{dccbbbalquxwmx`wRvFu9t.t#rqq qqp ppoo&o0o;oGoTodounmmlkkksx}{s}e~X~K~>~2~&}|| |}}| ||||!|)|4{@{N{^{ozzyxwvvzxk]OB5)  ",8FVh|}oaSE8+  ".=M^srdVH:,  #1ASgugYJ<-   $5G[rj[M>/! '9Md~ܙܰ]O@2" *?Um  (4ALU]elrx~#/;FPX_flrx~ *5@JRY`flrx~$/9CLSZ`fkqw~ )3=EMTZ_ejpw",6>FMSY^djpw &/7?FLRX]cjqy~|zxxwww (19@FLRW}]{czkxsv}tqpnlkjjjj !~*{2y9w@uFsLrQpWn^mekniwgecb`__^^^  ~ yur#o+m3k:i@gFfLdRcYa`_i^s\ZYWVU T T T T %((%!{tn if d %b -` 4^ :] @[ GZ MX TW \U dT oR {PONLLKKKK&+//-)}$tle_\ZX'V.T5S;RBPHOPNWL`KkIxHFEDCCCCC+14541x+o&f ^W TQO#N*L1K7I>HDGLETD]CgAt@?=<;;<<<069;:~7s2j-a'Y!Q LJHF&E-C3B:AA@H>P=Y<d;q987 6 5!5!5"5!6!4:>??{<p8g2]-T(L"FCA?"> )= 0; 6:!=9!E8"M7"W6#b4#n3$~2$1%/%/&/&/&0&0&8>BCCxAn=c8Z3Q.H(@$ =#;$9$8$&6$,5%34%:3&B2&J1'T0'_/(l.({,)+***)*)+*+**+*<BFGGvElBa=W8N3D.<) 7(5(3(2(#0()/)0/*7.*?-+H,+R+,]*,j(-y'-&.%.$/$/%/%/&.?EIK~LtJjG^BT=K9A48/2- 0-.--- +-'*..).5)/=(/F'0O%0[$1h#1w"2!23333 3!2CIMO|PsOhL\FRCI??;66.2 +2)2(2&2$%3+$32#4:"4C!5M 5X6e6u77788877GMQS{TqSfPZLPIGE=A3=*9 %7#7"8!8" 8(80989A:K:V;c;r;<<==<<;KQUXyYnXdVXQNOEK:G0C'@ > >>>>%>-?5?>?H@S@`ApAAABBAA@PVZ]v^l]b[VWLUAQ6N,K#HE DDEE"E)E1E;FEFPG^ Gm G G GGG G F FU[`}bscjb`aS^GZUJVWVeUwUUUTTSSbhlwnoocnVlIj=h2f'ecba `` ____&_/_:_E_S_a^r^]]\\[[jo}rutju]tOsBr6p+o nml lkk jjjj!i*i4i@iNi\imhhgfeedqvzyp{b{U{Hz;z/z#yxw wwwwv vvvv#v.u:uGuVuht|tsrqppy}vhZL?2%  &2?O`u~~zl^PB5'  (6EWk~paSE7)  *:L`xsdVG9* .@TjgXJ;,  2F]vԒի[L=/ $8Ng $0<GQY`gmsy  +7BKS[agmsy&1;EMU[aglrx  *5>GNU[aflrx $.8@HNTZ_ekqx (19AHNSY^djqz~ "*2:AGMRX]dks}}{xvusqpppp  $,3:}A{GyLwRvWt]rdpmovljigedccbc ~zv%t-q4o:n@lFjLiRgXf_dgbq`|^\[YXXXWW~ w rnjh'e.d4b;`@_F]L\SZZXbWlUwSRPONMMMM"%%"}un g c_]![(Y/W5V;TASGQNPUN^MgKsI H G E D D C C D $),,*&w!nf_Y U S Q "O )M /L 6K <I BH IF QEZDdBp@?><;;;;<)/221|-r(i#aYQLJHF$E+C1B7A>@E>M=V<a:m9|76543444.4786x4n.e*\$TLF B@? ='<-;49:8B7J6S5^3j2y0/.---..28;<<v9k4b/Y*P%G@ <:86#5)40372>1G/P.[-g,v*)(' & ' ( ( 6<?A}@t>i:_5V0M+D%; 6320 /&.--4, ;+ D*!N)!X'"e&"t%###"$!$!%"%"$#$:?CE{DrCg?]:S6J1A,8&1# .","*")"#(#*'#1&$9%%A$%K#&V"&c!'r'(())))(>CGIzIpGfDZ?Q;G7>25-,( ('''%'$'!#('"(.!)6 )?*I*T+`+o,,------AGKMxMnLdIXDO@F==834*/$, !, ,--%-,.4.</F/Q0^0m11122211EKOQvRmPbNVIMFDC;?1:'62 2222"3)314:4D4O5\5k6}66 7 7 666IOS~VuVjU`SUOLLBI8E.A$=:88899&9.97:A:L ;Y ;h ;z ; <<<< ; ;NTX|[r[hZ^XSUIR>N4K*G!DB@ ??? @# @+ @4 @> AJAVAeAvAAAAAA@TY^y`p`f`]^Q[EW:T/Q%OLJH GGGG H(H1H;HGHSHbHsHHHGGGGZ`cwenfefYdL`@]5[*Y WUS RQ PPPP%P.P8PCPPP^PoPOONNMMaf}itllmakSiFg:d/c$a_^ \\[ ZZZY!Y)Y3Y?YLYZYkX~XWWVUUhmzprrgrZqLp?n3m(kjh ggff e eddd$d.d:cGcUcfczba`__^otxwnx`xRwEw8v+v tssrrrqq qpppp'p3o@oPo`ntnmlkjiw|{s}e~WI</"~~~~~~ ~ ~~~ ~+}9}H}Y|m|{zyxwwi[M?2$ "/?Pd{{m^PB4& $4FYppaSD6' '9Md~dUG8),@Vǫ͋XI:,2H`{ !,8CLT[bhntz '2=FOV\bhnsy",7@IPV\bgmsy &0:BJPV[aflrz *3;CIOUZ_ekr{ #,4<CINSY^dks}}{yxwwu&-5<BGMR}X{^yexmvvsqomljihhi  |'z.w5u;tArGpLoRmXk_ifgpe{cb`^]\\[[  { wso!l(j/h5g;eAcFbL`R_Y]a[jYuWUTSQPPPP wqkgda"^)]/[5Y;XAVFUMSTR\PeNpL}KIHGFFFE ""woh a ]YVT#R*P0O5N;LAKHIOGWFaDlCyA@>=<<<<"'))'{#qiaZ S OLJH$G*E0D6C=AC@K> S= ]; h: v8 7 5 4 3 3 3 4 ',//.w*m%d \TLF C A ? > %< +; 2: 88 ?7G6P4Z3f1t0.-,+,,-,145}4t1j+`'X!OG@ ;976!4'3-241;0C.M-W,c*q)'&%$%&&169:{9q6g1]-T(L"C;5 21/.$,*+1*8)@(J'T&`$o#!   4:=>y=o;e7[2R-I(@#80 ,*)' &'%-$5#>"G!R ^l~8=ABwBm@c<Y7O3F.=)5$- ' %#!!$ +2;E O!\!j"{""#####<ADFuFlDbAW<M8D4<03+*&#" !!""!"(#0#8$B%M%Y&h&y&'''(''@EH}JtJjI`FUAL>C::612(- ) ''''(%(-(6)@)K*W*f+w+ , , , , , +DIL|NsOiN^KSGJDB@9=/8%40- ,---#-*.3.= /H /U 0c 0t 0111100HMQzSqTgR]PRLIJ@F5B+>":74 33 3 3 4( 41 5;5F5R6`6q6666665MRVxXoYeX[UQRGOHPW]ciot{#.8BJQX]chnt{ (2<DKQW]bgmt{"+5=EKQV[afmt| %.6>DJPUZ_flu~~| '/7=CINSY_em~w|zxusrqppn !)07}={ByHxMvRtXr_qgopl{jhfecbaaa|xu#r)p0n6m<kAiGhLfRdYc`ai_t][YWVUUTU  {u plhf#c*a0`6^;]A[FZLXSV[TdRnQ{OMLKJIIIy qke a]ZX$V*T0S6Q;PANGMNKVI_GiFvDCA@??>?zrjb\WSPNL%J+H0G6F<DBCIAQ?Z>e<r:9866555 $&&$u ld\T N JGDB @%?+>1<7;>9E8M6V5a3n1~0/-,,,,%*,-{+r'h"_WOHA >;98!6&5,322 91 A/ I. S, ^+ l) |( & % $ # $ % */22y1o.e)\$SKC<5 3 1 / . "- (+ .* 5) ='F&P$\#j"{ /367v6m3c/Y*P%H ?80,*('%$$*#2":!C NZhx37:~;t;k8a4W/N+E&=!4-& #" !'/7AKWev6;>|?s?i=_9U5L0C,:'2"*" $,4>IUct  :?B{DqChB^>S:J6A29-1)(%  ")2<F S a !q ! " " " " " !>CFyHpHgF\DR?I;@884/0','# !!"" "'#/ $9 $D %P %^ &o&&&&&&&BGJxLoLeK[HPDGA?>7;-6$1-*( ' ( ( (% )- )7*B*N+\+l++++++*FKOvQmQcPZMOJGG>D3@)< 841 / ..//#/+050?0L1Y1i1|11000/KP}TuVkVbUXSNPEM:I/E%B>;9 7 6666 6)627=7I7W7g7y766655PV|Zr[i[`[WYLV@R5N*K HFC A@ ?>>>>&>/>:>F>T>d>v==<<;;W\y_paha_aT^G[:W/U%RPM KJI H GGFF"F,F7FCFQF`EsEDDCBB]bwenggh[fNcAa4^)\ZWVTSRQ QPOOO'O2O?OMN]NoNMLKJJe|itlmnbmTkGi:g-e"db` _^^]\[ ZZYY"Y-Y:YHXXXkWWVUTSlypsshsZrLq?p2o%nlk jjiihgff feee'd4dCdSdec{ba`_^}twwny_yQyCy6x)xwv uuuvuttsss rrr r,r;qLq_qtponlk{{r~d~UG9+  #2CVl~}|vhYK<.   '8Lb|j\M?0! -@Vo_PA3# 3Ib~SD5& %;Snߌݩ$/:CKRY^diou| )4=ELSX^cinu} #.7?FMRX]bhnu~'08@FLQV[agnv !)29?EJPUZ`gox}|{zwu #+28>DINS}Y{`yhwqu|spomkjiig }$z+x2v8t=rBqHoMmSlYjahjftda_^\[[ZZz uqnk%i+g1f7d<cAaG_M^S\[ZdXnV{TRQPONNM |unieb_]%[+Y1X6V;UASGQNPUN^LhJuHGEDCBBB{ sle_ [WTQO%N+L0K6I<HBFHEPCYAc?o>~<;:9888uld ]VQ MJGE D&B+A1?6>=<D;K9T7_6k4z210//.."$$z!qg_WP IE A><:!9&7,62483?1G0P.[-g+v*('&%%%#(**w(m%d [RKC = 96310"/'--,4*;)C(M&X%e#t"  (-/~/t.j+a&X!OG?81 .+)('#%)$ 0# 7! @ J U b r       -14|4r3h1_,U'L#D<4-& $ " !   % , 4=GSaq158z9p8g6]2S-J(B$91*# !)1:EQ_o     59<x=o=e:[7R2I.@*7%/!(  &.8BO \ l   8=@wAmAd?Z<P8G3>06+.''# # , 5 @ L Zi|<ADuElEcDYAO=F9>652..%*%!    "*3 > J!W!g!y!!!!! @E}HtJkJbIXFNBE?=<59+4"/+( $ ###$ $(%1%<%H&U&e&w&&&&%%EI{MsOjO`NWKMHDEO2L(HEB@=<; :999 9)949@9N9]9o887765UZv]m_e_]_R\DX8U-R"OLJ HFED C BAAA&A1A=AJAZAl@??>=<\|`scledfYdKa>^2[&YVT RQONML KKJJ"J,J9JGJVIhI~HGFEDcygrjkl`kRiDf7d*b`^ ][ZYXWVV UTTT'T4TBSRSdRyRQPON~jwnpqfqXpJoK=S;]9i7x6432211zph_ XQL HDA?=!<&:,91776>4F3O1Y/e.s,+*)((( !!ulcZR KD@ <8643!1'0,.3-:+B*K(U&a%p$"! "&(|'r%i"_WNF? 84 1.,*)"'(&.$6#>"G R^m~'+-y-p+f(]$TKC;4 - ) &$"! $*2:DO\j| +/1w2n1d.[*Q%I @81)#    ' . 7 A M Z i { /36v6l5c3Y/P+G&>!6.'       # + 4? J X g y37~:t;k:a8X5N0E,='5#-&    ( 2 <HUev6;|>s?j?`=W9M6D1<.4*,&%"   &/:FSbt:?{BrChC_BV?L;C7;430,,$)$   $-8DQ`r>CyFpHhH^FUDK@C=;:37*2 -)% "   " +!6!A!O!^"p"!!! CHxKoLfM]KTIJFBC:@/;%73/ ,)' &%&&!&)&3'?'M'\'m''&%%$HLvPnQeR\QSOJLAI5D+@!<96 20/ .----'-1-=-J-Y-k-,,+**M}RuUlWcW[VSUGQ;M0I%FC? =:87 6 5444$4.4:4G4W4h4}32110S{Xs[j]b][]OZBV6R*O LIGDBA?> ==<s0r#qo nmmmmlkjiiih hhg!g/g?fRffedcbawxmz_zPzBz3{%{zyyyyzzzxxwwwwwwww&v6vIu_uwtsrqq~cTE6(,?UmfWH9*!3IbZK<- '=UpM?/  /HbЀНи  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ݯŌh̜λŽzې[=eu4TӔ~I,Nʳ~emŮ滑tcĚsE&4}U0 `t5 R4Oi  R;5L[ML^`6`ʼϚmZF|>&T<.Sm1 aZ]5\} T}EDd/"7IXkA(?cղ廗wb۞g6 ?^ف9/Z$^w%j}[+L<0 -a''U'%ʝv]J<2-,09GԻ縏jK/og4<ւ;1oBPi7/"y4Ftjc)"aW7hӮ|uqprwۺiiȓe=ێLn|,E*"D}6jXFG5% ' p pUB3& &ӼҩeH,q<O5u#gCH.8thB`z]a$fɬ}vqligfgkpzŪyawݦwP, 1Np`o7@r_M;*3^+ ƣhM2|Fq|/;d tjK0/Ryt6m|i hpaPliZI9X)V/)G .>RhҰw]B( J}EP h6HuiR>3+X"\Jzwz LWhtңzX:)#RiC4yO]:*Ot3grD\A_KW $1?N`t¾~S?0# vuFNDkyf!SJ?w+ EM.*-E`ct˷|xtplhejH- 1B)kZN4 =eNCzt _t,8ESbrٲymd]VQKFA<82-(#K% f=3l 5[/^w^C@^N,>Rj|þm[L@7/(" 4v$Q|yfQ#:62/.1%B} 9b"Hri(N\3.2Rwr/BXpon~dVKC<60+'" RmQ:B#h >m7/Ptr*AZuXDTdu{xvtrsuxO:0(! #i 9c4[I9]{ !8RoX)9IZl~wqlhda^[YXWWY^eq1 V/W|7+a ,Pv0 #;Wvc*;L_tſld^YUQOLJHGFHKPYf&VP:y !2X1Z'KqI/Jhu&8J^urZSOKHFDCBABCGNYi}.VA{ 4`?%Jqf*Db5+>QhvPJGEDDDEFGKQZhA6ce 'Ls/*DbP6Ja{҇|SGIMQV`sV5Pmo>_{desc Little CMS Little CMSdesc2.x 2.xlcms2-2.12rc1/testbed/new.icc0000644000175000017500000006123413775114656015026 0ustar martimartiblcms@mntrRGB XYZ  .acspAPPL????????-lcmsΌ΋Ԓ:*#-wdeschcprt*dmndedmddglumiwtptbkptclrt$~vcgtrXYZ gXYZ bXYZ rTRC  gTRC  bTRC  targRDevDRCIEDRmetab,pdesc*Huey, LENOVO - 6464Y1H - 15" (2009-12-23)textCopyright (c) 2009 Richard Hughesdesc IBM Francedesc ThinkPad T61XYZ XYZ @ڲXYZ WUclrtRed4QGreen3QBlueT vcgt~C r [ L D E LXk&/42-" !"#b$:%%&'([).**+,-i.H/+00123456i7Q899 ::;<=>~?c@HA-BBCDEFGoHRI6JJKLMNxOWP5QQRSTUrVSW5XYYZ[\]^_p``aQbCc6d+e"fghhijklmnopqrstuvwxyz{}~*9I[m͊ "8Nezח6Oh͢ .Sy߫>dߴ*Lnӻ>_9Uqʎ˩,?Paq׃ؔ٦ڶ"&'(&# |m\K9&c.fL 7 '   &09AFHE=1  rO,  !"#|$X%4&&'()w*N+&+,-.}/R0'0123~4U5.66789n:I;%<<=>?o@JA%BBCDEpFMG)HHIJKvLQM-NNOPQsRPS-T TUVWXpYTZ;[#\ \]^_`abc}dqehf^gUhMiEj@k;l6m1n,o'p#qrstuvwxy z#{(|.}3~9@HNV_hr|̍ݎ0Ha}֙7Y{š;gƨ#NyӰ1^ҶAeҾ>cÆīFp˜GqҚ3X~ڤ4Ts#'+.0233430-)$o>J q N +uL \&v8w4c  !"<"#$T%%&f''(w)()*+@+,-\../~06012_3345D567t8089:e;";<=Z>>?@NA ABCACDEvF3FGHdIIJKHLLMrN,NOP[QQRSRTTUVTWWXYgZ/Z[\]S^^_`aXb+ccdef_g:hhijklqmRn4oopqrstvu^vFw0xyyz{|}~{vspopsw}ʒߓ/MlԜ Iu٤JȩGѮ tʲ wζ%}׺2P~VG`ΣXի~V0 .ZXYZ g:XYZ ge #/XYZ '! curv566789<?CHMT\dny2Mi6_DxYY.xd `  m * R b @%yqopw,C^}5a !.!"k# #$X%%&Z' '(w)1)*+s,:--./0[1:233456789:;= >?7@TAsBCDEG!HHIoJKLN O2PYQRSTV+WYXYZ\(]a^_abbcef[gijzkmDnpqstuwyxz||}/ą^A던JƔZ*՝q_Y_qϱ2]׿'BȨ͏}aI޻(FEcurv>>>?@CEIMSY`ir}0Je+R{/`8r-n? of  m % G  w K %w`OD>=BKYk -V%g !]" "#j$$%&I''()Q**+,-].7//0123456789|:z;y}?@ABCDEFGHIJKMN'OEPhQRSUаq_ާ+cd*#Rcurv   )2=IVdt 'DcCn/c J O&r`  ^  m * Q  ^9vdVLFCDGMU`p+ M !v""#F#$%+%&~','()M* *+,W-$-./01e2M3:4-5$6 78#9+:7;G?@ABD E'FCG`H|IJKLMOP(Q?RUSlTUVWXZ[<\i]^` aKbce?fh iyjl\moLprWsuvw xz8{}q^ v1񌶎R0Bp԰ @dϾq7ǡ̞.ѺCLH!HtFtextCTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Wed Dec 23 22:15:31 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "LUMINANCE_XYZ_CDM2" LUMINANCE_XYZ_CDM2 "127.028906 131.252608 110.265656" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 250 BEGIN_DATA 1 100.00 100.00 100.00 96.782 100.00 84.010 2 100.00 100.00 100.00 96.777 100.01 84.020 3 100.00 100.00 100.00 96.788 100.01 84.020 4 100.00 100.00 100.00 96.772 100.01 84.031 5 31.885 32.743 34.098 7.1032 7.3802 6.8529 6 100.00 0.0000 100.00 55.780 36.372 72.216 7 100.00 100.00 0.0000 80.854 85.328 14.457 8 0.0000 100.00 100.00 56.563 77.910 81.478 9 0.0000 100.00 0.0000 40.875 63.371 11.930 10 0.0000 0.0000 100.00 15.810 14.641 69.711 11 100.00 0.0000 0.0000 39.878 21.756 2.7475 12 0.0000 0.0000 0.0000 0.17553 0.17594 0.25002 13 0.0000 51.304 100.00 22.522 25.400 72.122 14 100.00 0.0000 52.136 42.427 23.732 13.824 15 100.00 53.349 100.00 66.148 52.993 75.881 16 100.00 50.680 0.0000 49.155 36.601 5.9995 17 0.0000 0.0000 51.028 2.4104 1.9441 10.620 18 0.0000 47.489 0.0000 5.7397 9.0981 2.2239 19 0.0000 100.00 51.303 44.137 65.955 27.134 20 100.00 100.00 51.850 84.316 88.033 29.972 21 49.802 0.0000 0.0000 6.4137 3.5753 0.86717 22 51.124 100.00 0.0000 47.587 67.171 12.592 23 48.380 100.00 100.00 65.011 82.675 82.298 24 51.210 0.0000 100.00 25.331 19.848 70.617 25 100.00 50.901 49.331 52.066 39.002 18.084 26 51.774 100.00 50.462 52.565 70.678 27.391 27 49.649 52.597 100.00 33.463 33.521 73.671 28 51.542 52.524 0.0000 15.593 17.815 3.9856 29 0.0000 49.855 52.382 9.3552 12.535 16.059 30 50.495 0.0000 52.232 10.396 6.3389 12.078 31 100.00 0.0000 26.371 40.575 22.270 5.3257 32 0.0000 76.339 100.00 33.117 42.238 75.617 33 100.00 26.813 100.00 58.154 40.221 73.093 34 100.00 100.00 26.811 81.805 86.044 18.357 35 0.0000 100.00 26.561 41.683 64.002 15.669 36 0.0000 74.410 0.0000 16.553 26.310 5.8403 37 73.129 100.00 100.00 77.078 89.284 83.240 38 24.348 0.0000 0.0000 1.5806 0.94588 0.39630 39 24.581 100.00 0.0000 42.402 64.305 12.083 40 0.0000 0.0000 23.698 0.60600 0.52986 2.3141 41 100.00 24.746 0.0000 41.937 25.103 3.4946 42 0.0000 0.0000 74.250 5.8374 4.7142 26.433 43 0.0000 22.539 0.0000 1.3574 2.0990 0.67487 44 100.00 74.753 75.649 68.886 62.128 43.069 45 100.00 76.339 0.0000 62.462 57.635 10.241 46 24.206 31.137 100.00 20.445 20.011 70.880 47 25.917 100.00 72.959 50.277 70.535 45.749 48 76.337 0.0000 100.00 38.220 26.844 71.585 49 0.0000 24.325 100.00 17.209 16.902 70.232 50 26.062 0.0000 27.693 2.6404 1.6716 3.2251 51 76.301 0.0000 0.0000 17.471 9.5861 1.8037 52 55.636 60.634 54.991 25.396 27.543 20.720 53 100.00 26.133 71.401 48.116 30.123 30.439 54 100.00 77.105 100.00 78.967 73.238 79.928 55 23.671 0.0000 100.00 17.792 15.732 69.897 56 72.829 0.0000 29.441 18.321 10.226 5.0650 57 0.0000 100.00 76.177 48.934 69.941 49.240 58 100.00 100.00 76.418 89.056 91.989 51.716 59 0.0000 29.974 25.001 2.8197 3.9290 3.7811 60 0.0000 57.015 27.590 9.3374 14.253 6.6740 61 0.0000 28.308 73.540 8.3865 8.2748 30.381 62 76.657 100.00 0.0000 58.486 73.085 13.506 63 64.153 30.592 100.00 34.100 27.580 72.132 64 71.382 21.927 0.0000 16.352 10.568 2.1399 65 100.00 0.0000 76.747 46.215 26.809 31.233 66 27.952 76.398 100.00 38.158 47.484 76.623 67 25.044 23.803 0.0000 3.1989 3.4516 0.94842 68 72.705 100.00 67.176 65.219 78.350 41.182 69 24.328 100.00 100.00 58.674 79.222 81.658 70 64.851 75.219 27.792 34.393 40.055 11.987 71 29.088 75.418 0.0000 21.568 32.158 6.9815 72 34.835 0.0000 75.524 9.7135 6.9067 27.814 73 26.706 100.00 26.286 43.777 65.280 15.882 74 100.00 26.507 23.928 42.870 25.991 6.1375 75 72.058 68.299 100.00 51.802 51.213 76.973 76 100.00 77.005 25.017 63.975 59.343 13.512 77 0.0000 76.928 72.429 24.440 33.728 36.299 78 78.340 69.846 0.0000 35.875 37.663 7.7361 79 66.707 33.434 33.732 18.891 14.189 7.8290 80 34.882 32.846 73.035 13.171 12.155 30.726 81 75.109 100.00 24.682 60.342 74.358 16.877 82 31.212 66.797 38.917 18.813 25.858 12.802 83 68.904 0.0000 75.143 22.341 13.755 28.600 84 76.754 53.206 80.475 38.684 33.327 43.582 85 29.586 54.279 73.897 18.407 21.380 34.674 86 75.371 75.671 53.308 43.274 45.919 23.595 87 56.532 76.867 0.0000 29.508 38.086 8.0739 88 54.003 77.595 77.133 38.695 45.551 43.420 89 24.398 54.999 100.00 26.998 30.453 73.147 90 100.00 76.564 50.245 65.863 60.652 23.156 91 66.860 18.485 62.967 20.587 13.490 21.742 92 24.183 49.695 0.0000 8.8779 12.706 2.9761 93 78.333 0.0000 52.106 23.870 13.663 13.120 94 0.0000 23.637 48.179 3.7379 4.0541 11.297 95 22.616 0.0000 51.502 3.9387 2.7979 10.933 96 0.0000 54.844 76.717 15.263 18.585 36.843 97 100.00 53.854 25.700 51.217 39.263 9.5218 98 100.00 24.647 46.990 44.331 26.934 13.674 99 0.0000 75.599 49.685 19.861 29.364 18.736 100 52.521 50.873 28.108 17.420 18.438 7.5397 101 78.092 100.00 46.699 64.577 77.105 25.944 102 50.291 100.00 24.042 49.033 68.153 15.815 103 50.424 22.665 16.009 9.2454 6.8360 2.6549 104 49.722 100.00 78.883 57.544 74.988 52.621 105 79.368 49.717 100.00 48.282 40.940 74.559 106 100.00 51.006 76.266 56.735 42.868 39.442 107 26.966 48.404 51.309 12.011 14.642 15.944 108 12.885 47.590 21.789 7.5012 11.020 4.7464 109 46.216 23.744 47.696 10.450 8.0488 12.057 110 26.537 79.034 57.906 27.559 38.504 25.533 111 20.035 78.679 16.337 22.591 34.435 8.7121 112 16.510 13.523 16.825 1.7900 1.7041 1.7702 113 80.772 52.239 39.693 33.078 27.980 12.670 114 52.025 78.476 100.00 47.545 54.688 77.922 115 53.644 19.450 81.363 18.926 13.807 39.159 116 76.390 76.738 79.766 50.525 52.251 47.617 117 16.719 20.668 80.444 10.058 8.9001 36.936 118 49.975 75.940 54.965 31.330 39.094 23.463 119 69.366 54.269 19.639 25.409 24.153 6.8096 120 78.357 44.403 54.054 30.871 24.243 18.910 121 86.769 22.037 79.950 37.403 24.170 38.874 122 23.991 100.00 48.167 45.424 66.697 25.173 123 52.705 49.623 76.910 24.219 23.477 37.566 124 83.235 21.483 18.262 25.590 15.580 4.1464 125 21.860 81.987 82.201 34.008 45.513 49.781 126 26.586 30.174 50.611 7.3390 7.3835 13.410 127 46.176 21.625 100.00 24.801 21.044 70.937 128 46.137 76.930 18.751 27.310 36.755 9.5612 129 91.475 88.357 12.710 61.517 65.249 13.071 130 47.690 27.399 0.0000 8.0330 6.7579 1.5938 131 18.097 39.910 80.111 13.722 14.465 39.178 132 50.349 0.0000 22.838 7.8953 4.4977 2.9459 133 17.466 14.543 39.302 3.1271 2.8099 7.1455 134 88.169 58.584 62.262 44.929 37.898 26.976 135 79.316 19.798 100.00 41.429 29.927 72.136 136 35.363 60.522 16.345 15.432 20.828 5.9239 137 12.495 34.970 8.4353 3.9039 5.6312 1.7456 138 11.590 84.378 36.985 27.019 41.132 15.132 139 85.444 85.726 34.888 55.147 59.454 17.245 140 85.787 17.402 36.424 28.453 16.913 8.3840 141 58.643 35.988 52.638 18.012 14.705 15.942 142 81.323 85.139 100.00 68.844 71.876 80.538 143 75.581 44.352 0.0000 23.219 19.240 3.9417 144 15.160 63.749 47.500 15.748 22.422 15.763 145 15.120 11.073 59.779 4.9766 4.1407 17.560 146 86.028 63.414 16.582 40.018 36.610 8.5068 147 18.812 62.643 85.866 23.314 28.403 49.950 148 18.635 62.340 7.9476 13.120 19.901 4.7801 149 36.339 46.262 87.864 21.038 21.293 50.395 150 65.242 88.476 43.595 46.005 56.607 20.611 151 80.989 100.00 84.297 74.943 85.016 60.461 152 64.260 64.440 85.027 37.886 38.184 50.670 153 35.612 10.187 17.227 4.2728 2.8720 2.0278 154 45.235 41.275 11.575 10.744 11.202 3.1960 155 85.017 19.190 57.638 30.797 18.973 18.858 156 89.001 65.879 87.121 55.655 49.365 55.199 157 88.405 92.832 62.808 68.473 73.860 35.158 158 17.469 44.939 63.608 11.395 13.546 23.474 159 80.504 39.649 23.740 27.475 20.347 6.3547 160 43.343 42.624 45.299 13.137 13.443 12.245 161 62.199 90.166 13.536 43.288 55.885 12.147 162 70.382 64.985 39.990 32.692 33.527 14.444 163 63.092 9.8060 47.998 15.628 9.5134 11.663 164 66.260 33.082 79.344 26.255 19.929 38.922 165 12.275 38.293 42.578 6.3997 8.1986 9.9833 166 44.729 63.293 89.315 30.599 33.805 55.854 167 86.795 39.767 90.083 44.341 32.719 54.910 168 33.191 13.557 63.471 8.2257 6.2326 20.467 169 0.0000 80.502 22.254 20.757 32.527 9.3004 170 35.165 87.442 45.762 34.459 48.798 20.511 171 53.417 63.795 12.922 21.988 26.302 6.5595 172 89.333 37.028 40.649 35.328 24.164 11.600 173 61.924 10.479 11.308 12.127 7.1155 2.0297 174 12.932 63.448 65.784 18.065 24.136 28.144 175 35.002 91.990 14.251 36.328 53.552 11.796 176 64.449 90.256 86.679 56.213 66.205 59.305 177 10.665 88.325 62.489 33.596 48.909 30.886 178 63.940 84.034 63.097 44.778 53.082 32.060 179 32.000 18.251 87.257 14.031 11.523 46.040 180 35.653 63.179 55.913 20.158 25.389 21.282 181 65.306 14.719 95.163 29.039 20.848 61.885 182 12.598 97.956 15.904 39.378 60.643 12.953 183 43.443 13.667 2.3608 5.4401 3.6576 0.92719 184 98.776 12.908 14.035 39.533 22.251 3.7953 185 42.232 44.658 62.606 15.929 16.220 23.280 186 5.7304 86.513 87.282 36.670 49.953 57.088 187 71.195 63.035 64.720 35.902 35.055 29.083 188 14.721 0.0000 24.188 1.2792 0.89876 2.4744 189 45.845 91.742 61.379 43.699 58.499 32.373 190 20.168 99.403 86.193 52.928 73.203 61.291 191 15.692 16.462 98.892 17.172 15.886 69.143 192 49.711 33.832 30.462 11.632 10.157 6.1786 193 92.778 86.752 83.442 72.329 72.554 55.382 194 36.175 85.461 71.738 37.083 49.576 38.944 195 56.241 41.455 91.468 27.602 24.111 56.814 196 63.698 49.811 44.158 23.262 21.617 13.662 197 13.503 85.866 0.84329 26.655 41.607 8.7405 198 50.699 14.090 33.318 9.4038 6.1358 5.8677 199 92.677 38.376 11.214 36.660 25.036 4.8570 200 88.086 68.014 37.675 46.350 43.023 14.745 201 86.614 18.702 0.67590 25.468 15.095 2.6278 202 16.608 0.33745 82.586 8.6870 6.8624 35.442 203 32.618 49.231 35.380 11.728 14.545 8.8331 204 39.446 87.298 89.309 44.627 57.160 61.307 205 89.388 7.1485 88.115 40.442 25.084 47.530 206 65.767 34.460 14.625 17.275 13.256 3.7698 207 84.147 1.8202 16.654 24.638 13.568 3.3843 208 16.889 65.227 27.821 14.968 22.334 8.5395 209 44.534 84.792 4.0875 31.689 44.876 9.3930 210 66.804 16.467 27.933 16.085 9.9479 5.2045 211 58.514 1.6609 86.699 20.583 13.786 42.312 212 4.6391 51.042 39.609 8.8369 12.694 10.054 213 36.900 7.6973 46.164 6.3700 4.2844 9.9811 214 0.87002 15.107 86.749 10.426 9.1195 44.882 215 30.735 26.754 16.517 4.9434 4.9146 2.4919 216 48.174 63.612 69.758 26.386 29.858 32.524 217 13.565 42.325 96.225 19.720 20.671 65.570 218 50.679 66.092 39.202 23.997 28.917 13.327 219 19.235 27.685 65.367 8.1114 7.8623 23.101 220 49.578 25.709 65.082 14.319 11.100 23.330 221 14.832 83.246 100.00 40.590 53.196 77.677 222 82.546 2.4242 67.048 29.152 17.129 23.053 223 33.942 16.843 32.549 5.2516 4.1097 5.4367 224 81.040 38.112 70.346 33.904 24.732 30.546 225 15.556 11.826 1.2429 1.2368 1.2292 0.48138 226 16.070 28.919 29.585 3.9659 4.7704 4.9137 227 49.118 89.394 35.809 38.873 52.843 16.831 228 99.042 12.511 70.128 45.566 26.901 27.920 229 62.910 46.590 2.6010 17.842 16.999 3.6820 230 2.6256 14.517 68.056 5.8511 5.1761 23.910 231 1.1839 16.197 20.949 1.2511 1.5596 2.3249 232 89.271 1.0849 39.328 30.650 17.054 8.2370 233 100.00 31.073 85.483 52.649 34.793 46.962 234 95.707 39.925 60.884 45.356 31.307 23.501 235 72.034 26.792 47.480 21.993 14.839 12.971 236 74.942 79.821 13.360 41.681 47.180 10.494 237 2.1562 64.147 13.993 11.998 18.939 5.1968 238 29.116 42.872 16.700 7.8853 9.9731 3.6404 239 71.555 16.349 81.097 26.938 17.794 38.944 240 0.49326 39.374 86.691 13.684 14.195 47.050 241 2.2551 37.126 61.253 7.6245 8.7861 20.592 242 32.266 80.382 29.691 26.509 38.248 12.348 243 87.493 76.037 64.364 54.202 52.866 32.110 244 3.9929 62.442 91.329 23.002 27.808 57.715 245 43.125 31.672 87.678 19.105 16.428 48.611 246 51.638 6.7350 70.225 14.187 9.3494 25.409 247 66.079 45.918 66.274 26.496 22.757 27.299 248 0.74401 10.382 39.234 1.8689 1.7543 6.7768 249 32.358 69.996 77.444 27.183 34.110 41.254 250 38.655 2.4066 90.080 14.980 11.200 47.523 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispread" CREATED "Wed Dec 23 22:15:31 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.0000 0.010727 9.3233e-03 0.0000 3.9216e-03 0.013642 0.012421 4.1199e-04 7.8431e-03 0.016648 0.015579 2.9755e-03 0.011765 0.019730 0.018814 5.6001e-03 0.015686 0.022904 0.022095 8.2551e-03 0.019608 0.026169 0.025467 0.010986 0.023529 0.029526 0.028901 0.013748 0.027451 0.032990 0.032410 0.016571 0.031373 0.036545 0.035996 0.019455 0.035294 0.040223 0.039658 0.022400 0.039216 0.044007 0.043412 0.025406 0.043137 0.047929 0.047242 0.028473 0.047059 0.051942 0.051164 0.031601 0.050980 0.056031 0.055146 0.034806 0.054902 0.060227 0.059174 0.038056 0.058824 0.064485 0.063233 0.041352 0.062745 0.068788 0.067277 0.044694 0.066667 0.073136 0.071305 0.048066 0.070588 0.077470 0.075288 0.051438 0.074510 0.081773 0.079225 0.054810 0.078431 0.086015 0.083085 0.058183 0.082353 0.090196 0.086870 0.061555 0.086275 0.094331 0.090593 0.064897 0.090196 0.098375 0.094240 0.068193 0.094118 0.10236 0.097810 0.071473 0.098039 0.10623 0.10134 0.074708 0.10196 0.11006 0.10481 0.077928 0.10588 0.11380 0.10825 0.081102 0.10980 0.11746 0.11164 0.084245 0.11373 0.12108 0.11502 0.087343 0.11765 0.12462 0.11839 0.090425 0.12157 0.12810 0.12177 0.093462 0.12549 0.13153 0.12512 0.096468 0.12941 0.13491 0.12850 0.099458 0.13333 0.13822 0.13187 0.10242 0.13725 0.14151 0.13524 0.10536 0.14118 0.14476 0.13861 0.10829 0.14510 0.14800 0.14197 0.11119 0.14902 0.15122 0.14533 0.11408 0.15294 0.15442 0.14868 0.11695 0.15686 0.15764 0.15203 0.11978 0.16078 0.16086 0.15535 0.12261 0.16471 0.16410 0.15866 0.12541 0.16863 0.16738 0.16197 0.12821 0.17255 0.17067 0.16526 0.13098 0.17647 0.17401 0.16855 0.13373 0.18039 0.17739 0.17182 0.13648 0.18431 0.18079 0.17508 0.13919 0.18824 0.18425 0.17835 0.14191 0.19216 0.18773 0.18160 0.14461 0.19608 0.19124 0.18485 0.14731 0.20000 0.19477 0.18810 0.15000 0.20392 0.19832 0.19133 0.15268 0.20784 0.20188 0.19460 0.15537 0.21176 0.20545 0.19786 0.15807 0.21569 0.20899 0.20114 0.16077 0.21961 0.21254 0.20443 0.16349 0.22353 0.21608 0.20774 0.16622 0.22745 0.21962 0.21103 0.16895 0.23137 0.22315 0.21434 0.17169 0.23529 0.22666 0.21767 0.17443 0.23922 0.23017 0.22100 0.17719 0.24314 0.23365 0.22434 0.17996 0.24706 0.23714 0.22768 0.18273 0.25098 0.24063 0.23104 0.18552 0.25490 0.24411 0.23438 0.18833 0.25882 0.24761 0.23774 0.19113 0.26275 0.25110 0.24109 0.19394 0.26667 0.25460 0.24443 0.19677 0.27059 0.25809 0.24779 0.19957 0.27451 0.26160 0.25113 0.20241 0.27843 0.26509 0.25447 0.20523 0.28235 0.26860 0.25783 0.20807 0.28627 0.27208 0.26117 0.21091 0.29020 0.27556 0.26453 0.21376 0.29412 0.27904 0.26789 0.21662 0.29804 0.28251 0.27124 0.21949 0.30196 0.28598 0.27462 0.22234 0.30588 0.28943 0.27797 0.22522 0.30980 0.29287 0.28133 0.22811 0.31373 0.29628 0.28470 0.23099 0.31765 0.29970 0.28806 0.23388 0.32157 0.30312 0.29142 0.23677 0.32549 0.30652 0.29477 0.23966 0.32941 0.30993 0.29812 0.24256 0.33333 0.31331 0.30147 0.24543 0.33725 0.31669 0.30481 0.24831 0.34118 0.32009 0.30816 0.25119 0.34510 0.32351 0.31148 0.25406 0.34902 0.32691 0.31482 0.25695 0.35294 0.33033 0.31817 0.25983 0.35686 0.33378 0.32154 0.26271 0.36078 0.33721 0.32491 0.26558 0.36471 0.34066 0.32830 0.26847 0.36863 0.34415 0.33170 0.27134 0.37255 0.34766 0.33510 0.27422 0.37647 0.35119 0.33854 0.27709 0.38039 0.35476 0.34199 0.27994 0.38431 0.35833 0.34546 0.28278 0.38824 0.36191 0.34894 0.28560 0.39216 0.36553 0.35247 0.28843 0.39608 0.36918 0.35601 0.29123 0.40000 0.37281 0.35956 0.29407 0.40392 0.37647 0.36313 0.29689 0.40784 0.38015 0.36672 0.29970 0.41176 0.38384 0.37031 0.30253 0.41569 0.38755 0.37394 0.30536 0.41961 0.39129 0.37758 0.30819 0.42353 0.39506 0.38125 0.31104 0.42745 0.39883 0.38492 0.31389 0.43137 0.40259 0.38863 0.31678 0.43529 0.40635 0.39236 0.31966 0.43922 0.41012 0.39612 0.32256 0.44314 0.41392 0.39988 0.32547 0.44706 0.41775 0.40365 0.32839 0.45098 0.42161 0.40743 0.33132 0.45490 0.42547 0.41122 0.33426 0.45882 0.42931 0.41505 0.33722 0.46275 0.43316 0.41888 0.34022 0.46667 0.43700 0.42271 0.34321 0.47059 0.44088 0.42654 0.34623 0.47451 0.44477 0.43037 0.34923 0.47843 0.44866 0.43420 0.35229 0.48235 0.45257 0.43804 0.35534 0.48627 0.45647 0.44189 0.35839 0.49020 0.46040 0.44575 0.36147 0.49412 0.46435 0.44962 0.36455 0.49804 0.46828 0.45351 0.36765 0.50196 0.47225 0.45742 0.37076 0.50588 0.47625 0.46133 0.37391 0.50980 0.48026 0.46525 0.37707 0.51373 0.48429 0.46918 0.38025 0.51765 0.48835 0.47315 0.38347 0.52157 0.49242 0.47710 0.38672 0.52549 0.49653 0.48109 0.39001 0.52941 0.50065 0.48508 0.39330 0.53333 0.50478 0.48907 0.39660 0.53725 0.50893 0.49306 0.39989 0.54118 0.51312 0.49708 0.40323 0.54510 0.51730 0.50111 0.40658 0.54902 0.52148 0.50510 0.40996 0.55294 0.52567 0.50913 0.41337 0.55686 0.52987 0.51318 0.41677 0.56078 0.53408 0.51722 0.42019 0.56471 0.53829 0.52128 0.42361 0.56863 0.54250 0.52534 0.42704 0.57255 0.54675 0.52943 0.43049 0.57647 0.55099 0.53352 0.43394 0.58039 0.55521 0.53761 0.43740 0.58431 0.55946 0.54173 0.44089 0.58824 0.56370 0.54586 0.44437 0.59216 0.56796 0.55000 0.44788 0.59608 0.57218 0.55416 0.45139 0.60000 0.57642 0.55834 0.45493 0.60392 0.58067 0.56255 0.45847 0.60784 0.58494 0.56680 0.46201 0.61176 0.58923 0.57105 0.46558 0.61569 0.59348 0.57533 0.46918 0.61961 0.59774 0.57961 0.47279 0.62353 0.60201 0.58395 0.47642 0.62745 0.60630 0.58830 0.48006 0.63137 0.61059 0.59265 0.48371 0.63529 0.61488 0.59702 0.48739 0.63922 0.61917 0.60142 0.49107 0.64314 0.62342 0.60581 0.49477 0.64706 0.62773 0.61022 0.49850 0.65098 0.63204 0.61465 0.50224 0.65490 0.63639 0.61907 0.50600 0.65882 0.64080 0.62354 0.50980 0.66275 0.64524 0.62802 0.51360 0.66667 0.64971 0.63252 0.51743 0.67059 0.65420 0.63700 0.52129 0.67451 0.65867 0.64154 0.52515 0.67843 0.66310 0.64611 0.52905 0.68235 0.66748 0.65074 0.53297 0.68627 0.67182 0.65537 0.53692 0.69020 0.67620 0.66001 0.54089 0.69412 0.68064 0.66461 0.54488 0.69804 0.68513 0.66917 0.54890 0.70196 0.68966 0.67373 0.55294 0.70588 0.69419 0.67831 0.55702 0.70980 0.69873 0.68292 0.56115 0.71373 0.70323 0.68756 0.56532 0.71765 0.70768 0.69216 0.56950 0.72157 0.71211 0.69676 0.57372 0.72549 0.71653 0.70127 0.57800 0.72941 0.72093 0.70578 0.58231 0.73333 0.72535 0.71025 0.58666 0.73725 0.72979 0.71473 0.59103 0.74118 0.73425 0.71920 0.59541 0.74510 0.73870 0.72366 0.59982 0.74902 0.74314 0.72811 0.60426 0.75294 0.74755 0.73257 0.60871 0.75686 0.75198 0.73704 0.61318 0.76078 0.75639 0.74150 0.61769 0.76471 0.76080 0.74595 0.62222 0.76863 0.76518 0.75042 0.62679 0.77255 0.76954 0.75486 0.63143 0.77647 0.77388 0.75933 0.63613 0.78039 0.77823 0.76378 0.64086 0.78431 0.78256 0.76825 0.64567 0.78824 0.78689 0.77272 0.65052 0.79216 0.79124 0.77720 0.65541 0.79608 0.79556 0.78170 0.66029 0.80000 0.79983 0.78624 0.66516 0.80392 0.80406 0.79078 0.67007 0.80784 0.80830 0.79536 0.67507 0.81176 0.81254 0.79992 0.68019 0.81569 0.81678 0.80446 0.68537 0.81961 0.82100 0.80902 0.69059 0.82353 0.82519 0.81360 0.69581 0.82745 0.82936 0.81814 0.70105 0.83137 0.83352 0.82267 0.70628 0.83529 0.83767 0.82718 0.71151 0.83922 0.84186 0.83166 0.71676 0.84314 0.84602 0.83616 0.72204 0.84706 0.85020 0.84063 0.72734 0.85098 0.85435 0.84511 0.73268 0.85490 0.85849 0.84959 0.73803 0.85882 0.86261 0.85408 0.74342 0.86275 0.86674 0.85853 0.74882 0.86667 0.87086 0.86300 0.75427 0.87059 0.87497 0.86746 0.75975 0.87451 0.87903 0.87190 0.76527 0.87843 0.88307 0.87630 0.77086 0.88235 0.88710 0.88067 0.77655 0.88627 0.89110 0.88501 0.78235 0.89020 0.89506 0.88931 0.78833 0.89412 0.89903 0.89355 0.79445 0.89804 0.90295 0.89776 0.80072 0.90196 0.90687 0.90193 0.80719 0.90588 0.91075 0.90605 0.81386 0.90980 0.91461 0.91014 0.82068 0.91373 0.91846 0.91420 0.82760 0.91765 0.92227 0.91824 0.83465 0.92157 0.92607 0.92226 0.84178 0.92549 0.92985 0.92625 0.84898 0.92941 0.93362 0.93024 0.85621 0.93333 0.93738 0.93420 0.86349 0.93725 0.94113 0.93817 0.87086 0.94118 0.94487 0.94212 0.87826 0.94510 0.94861 0.94606 0.88579 0.94902 0.95235 0.95000 0.89339 0.95294 0.95607 0.95392 0.90111 0.95686 0.95979 0.95782 0.90887 0.96078 0.96352 0.96175 0.91670 0.96471 0.96721 0.96564 0.92459 0.96863 0.97090 0.96950 0.93259 0.97255 0.97456 0.97336 0.94067 0.97647 0.97824 0.97720 0.94890 0.98039 0.98189 0.98103 0.95718 0.98431 0.98553 0.98486 0.96556 0.98824 0.98917 0.98866 0.97404 0.99216 0.99278 0.99245 0.98260 0.99608 0.99640 0.99623 0.99126 1.0000 1.0000 1.0000 1.0000 END_DATA dict 0@EDID_md5f09e42aa86585d1bb6687d3c322ed0c1lcms2-2.12rc1/testbed/test3.icc0000755000175000017500000006750413775114656015310 0ustar martimartioDlcmsspacRGB Lab  1 acspMSFT-lcmsdescA2B060B2A0760wtptncprtn,#dmndnPdmddntdesc,Test profile, not suitable for real use-Test profile, not suitable for real usemft1  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ymb XPIC$<+6209+?%FLR z {~ ~sh^VN$G*@0963<-B'I!OUopt|yq!~g%^)U-M2E7>=7B1H*M$SY,i-j-m/q{1uq3zg6^:U>MBEF=K6O/T)Y"_=d>e>g?jAm{CrpEvgG{^JUNMQEU=Y6]/b(f!N`NaObPdQgRjzTnpVsgXx^[}U^MaEd=h5l.p'^[^\_]__`aadcgydkofpfht]kyUm~LpDs=w5z.nWnXnYoZo\p^qasexthovlfxq]zuU}zLD=5}S}S}T~U~WY\_bwfnien]rTvL{D=OOPQRTVY\_vcngek\oTsLwDKKLMNOQTVY~]v`mddh\lTpLG©GHIJKMOQTW}Zu]lade\iTCƷDķDEFGHJLOQT}Wt[l^cb[@@@ABCDFHJLOR|UsXk\c<<<=>?@ACEGJLO{RsVj8899:;<=?ACEGJMzPr{od ZRKD&>-731:+@%G MS ~ uj`W O%H+A1:74=.C'I"OUtvy~ }s#h&_*V/N4F9?>8C1I+N%TY.m.n/q0t|2xr5}h7_;V?MCFG>K7P0U)Z#_>g?h?j@lBp{DtqFxgH}^KUNMREV=Z6^/b(g"ObOcPdPfQiSlzTppVtgYy^[~U^MaEe=h6l/p(_]_^__``acbeciyempgqgiu^kzUn~MqEt=w6{.nYnYoZo[p]q`rbsfxuiovmfxr]{vU}{ME=5}T}U~U~VXZ]_cwfnjfn]sUwL{E=PPQRSUWZ]`wcngek]oTtLxDLLMNOPRTWZ]vamdeh\lTpLH©HIIJLMORTW~Zu^lade\iTDƷDŷEEFGIKMORU}Xt[l_db[@@AABCEFHJMOR|UsYk\c<===>?@BDFHJMP{SsVk999::;<>?ACEHJMzPr ~ r g]UM#F)?/963<-B'H!NTxmcZ#R(J.C4<95?/E)K"QV }!~"$u&j)a-X1P6H;@@9E2J,O&UZ0t0u1v3y~4|s7i9`=W@ODGH?M8Q1V*[$`@lAmAnBqCt|EwrG{hJ_MVPNSFW>[7_0c)h"PfPgQhRjSlTo{VsqXwhZ{_\V_NbFf>i6m/q(```a`bacbechdkzfophsgjw^l{VoMrEu>x6{/o[o\p\p^q_qbsethyukpwogys^{wU~|ME=6~V~W~WXZ\^adxholfp]tUxM}E=RRSTUWY[^awenhel]pUuMyENNNOPRTVX[^vbmeei]mTqLI©JJKLMOQSVX~\u_mbdf\jTEǷEŸFFGIJLNPSV}Yt\l`dc\AABBCDFGIKNPS|VtYk]c=>>>?@ACDFIKNP{SsWk:::;;<=>@BDFHKNzQrxlcZ#Q(J-B3<95?/E(K"PV}q!g$^(U-M2E7><7B1G*M$SX%&')x+n.d1[5R9J>BB;G4L-Q'W!\4|4}5~68u:k=b@YCPGHKAO9T2X+]%bCsCtDuEwFy~H|tJjLaOXROUGY?]8a1e*i#RlRlSmToUqVt|XwrY{i\~`^WaOdGg?k7n0r)aebebfchcjdlfo{grqivhkz_m~WpNsFv>y7|/p_q`q`qarcsethukzwnpxrgzv_}zV~NF>6ZZ[\]_adgxjongr^vVzM~F>UUVVXY[^`dwgojfn^rUvMzEPPQRSTVXZ]`wdngek]oUsMLêLLMNOQSUWZ~]v`mdeh]kTGǸGŸH¸HIJLNPRTW}Zu^lade\CCDDEFGIKMORT|Wt[l^d???@ABCDFHJLOR{UsXk;;;<==>@ACEGJLOzRr~ s"h&_*V.N3F8?=8C1H+N%SY"#$&w(l+b/Y3Q7IMBEF>K6P0T)Y"_99:;nAeD[GSJKNCR;V4[-_&d G{G|H}H~JKvMlOcRZUQXI\A_:c2g+k%UsUsVtVuWwYy~Z|t\k^aaYcPfHi@m9p1t*dkdkdlemfogqht|iwskzim~`oXrOuGx@{8~1rdresesfthujvlwo{xrqzuh|y`~}WOG?7^__`acehkynpqhu_yW|NF?YYYZ[]_adgxjomgq^uVxN|FSTTUVWY[]`cwfojfm^qUuMOëOOPQRTUXZ]`vcnfej]mUJǹJŹJ¹KLMNPRTWY~\u`mcef]EFFFGHJKMOQTV}Yt\l`dAABBCDEFHJLNQS|VtYk===>??@BCEGIKNQ{Ts''(*y,o/e2[6S:K>CCZ6^/c(g"KLLMNOyQoSeV\YT\K_CbXAOEGI@N8R1W+\$a56689w;m>cAZDQHILAP:T3Y,^%c<<=>@{ApDgF]IUMLPDT=X5].a(f!FFFGHJvLlNbQYTQWI[A^9b2f+k$QQRRSU|VrXhZ_]W`NcFf>j7n0q)]^^^_`bycoefh]jUmLpDs=v5z.jzkzkzk{l|m~npwqmsdu\wSzK}C;4xqxrxrysytzv{x|z~~|ulcZRJB:jjkkmnprt|wszj}bYQIAccdefghjmo{rruixa{XPH]]^^_`bdfhkymqpht`wWzOWĮW®XXYZ[]_adfxiolgo_sWRɼRǼRüSSTVWY[]`bwenhfl^LMMMNOPRSUWY\~_vbneeHHHHIJKLNOQTVY}[u^mCCCDDEFGIJLNPSU|Xt<<=>?{ApCgF]IULLPDT=X5\.a'f!??@AB}DrFhI_LVONRFV>Z7^/c)g"EEEFHIuKkNbPYSQVHZ@^9b2f+j$MMNNOQzSpUfW]ZU]L`Dc=g5k.o'WWXXYZ\v^l`cbZeQhIkAn:r2u+bcccdeg|hrjil`nWqOtGw?z7}0oooppqrtyupwgy^{U~ME=6{y|y|y|z}{~|~~wne\TLDxxyyz{|~wne]ULEppqqrsuvxz~|uld\SKiæijjklmoprt|wsyk|cZRbdzbijccdefgikmo{rrujwazY\\\]]^_abdfhkymqpis`VVVWWXYZ\^_bdfxiplgPPQQRRSTVWY[]`bweoKKKLLMNOPRSUWY\~^vPPPQRT|UrWhZ_\V_NbFe>i7m/q(RRSSTV}WsYj\a^XaOdGg?k8n0r)VVWWXZ[v]l_caZdQgIjAn9q2u+\]]^^`aycoefg]iTlLoDrw6{/eeeffgi~jtlknbpYsPuHx@{91lllmmnoqxrotfv]yT{L~D<5uuuuvwxy}zt|j~aYQHA9~~ypg^VNF>vmd\SKC|sjbYQI yqh`WOwƬwìwwxyz{}~wof^VoɸoǹpĹpqqrsuvxz~|umeĄ]hhhiijklmoqsu|wtyl|caabbccdeghjknp{rruj[[[\\]^_`acegikymqUUUVVWWXZ[\^`bdgxccddefg}itjjmaoXqPtHw@z8~1eeefghi~julknbpYsQuIxA|91hhhijklmvomqds[uRxJ{B~:3mmmnnopryspufw]zU|ME=5ssttuvwx}ys{j}aXPH@8{{||}}~wne]TLD<|sjbYQIAypg_VNFvmd\TLĤ¥|skbZR~ǰ~Ű~°~zqi`Xv˼vɼvżwwxyz{}~ÂwĄoņglj_ooooppqrtuwxz~|vmҁehhhhiijklnoqsu|wtylaaaabccdeghjlnp{rs[[[[\\]^_`bcegikylĹmijmīmġnėoōpŃqyspufw^yU|M~E=5n¹n³n¬o¢pØpÎrĄsztpvgx^{V}ME=6qqqrrstu{wryi{`}WOG?7uuuvwwxz~{t}kbZQIA9{{{||}~xne]TLD<|riaXPH@wne]TLD|sjbYQIĞypg_WOƩĩvme]TɴǴĴ|skcZ}Ϳ}}~~€‚ÃĄņƈzNJqɌiʎauuvvvwxyz{}~р҂xԄoՆgnnnooppqrtuwxz~|vnggghhiijkmnoqsu|wt`aaaabcdefgijlnp{vȼvȷvȰvȦwȜxɒyɈz|u}lcZRIA:wƽwƷwǰxǧxǝyǓzȉ{}v~lc[RJB:yĽzĸzızĨ{Ğ|Ŕ}Ŋ~Ɓwne\TKC<}~~~ƒypg^VME>|sjaYPH@wne\TLD‘{ri`XPHĚwne]ULƤä|skbZRɮƮ®yph_W˸ɹƹvm™eě]ÄÄĄĄąąņŇƈljȋɌʎ|ːt͑kΔc|||}}~~рҁӃԄՆֈz׊q،iuuuuvvwxyz{}~ကxpmnnnnoppqstuwyz~|vggggghiijkmnpqsu|̴̻̫͎͘͡΄zqh_WNF>˻˴ˬˢ̘̎̅{ri`WOG?ȼɵɭɣəʏʆ|sjaXPH@ŽŶŮťƛƑLj~ulcZRJB‹Šxnf]ULDÑ{ri`XPHĘvmd\TLƠàzqi`XPȩƩªvne]U˳ɳų|skbZͽ˽Ƚþ™ÚĜyŝpǟhȡ`ȋȋȋȋȌɌɍʎʏː̑͒Δ~ϕvїnҙeӃӃӃӄӄӄԅԆՇֈ։׊،َ|ۏtܑk{{|||}}~ဤၛ⃓ㄊ䆂zrttttuuvwxyz{}~xmmmmnnoppqstuwyz~ÈпиаѦѝѓ҉Ҁvmd\SKCÉϿϹϰϧНГЊрwne\TLDċ͹ͱͨΞΔ΋ρxof]UMEĎʺʲʩʠ˖ˍ̃zqh_WNFœżŴūƢƘǏDž|sjbYQIƘ؈vme\TLǟğzqh`XOɧƧ§~umd\T˯ɯİzqi`X͸˸ǹ¹vn­eĮ]ššššÛÛÜĜŝƞƟǠɢ|ʣs˥kͧc͓͓̒̒̒͒ΔΔϕϖЗљҚӛy՝p֟h׊׊׊׊׋؋،،ٍڎڏۑܒݔ~ߕvnㄽㅶ䆮䇦初払犍茄|t{{{{{||}~zsstttuuvwxyz{}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !!"#$%&'()*+,-../0123456789:;<<=>?@ABCDEFGHIIJKLMNOPQRSTUVVWXYZ[\]^_`abccdefghijklmnoppqrstuvwxyz{|}~~  !!"#$%&'()*+,-../0123456789:;<<=>?@ABCDEFGHIIJKLMNOPQRSTUVVWXYZ[\]^_`abccdefghijklmnoppqrstuvwxyz{|}~~kP7kP7kP7kP7kP7kP7kP7kP7kP 7 !!!!!!!!!k Q$7- 111111111k*Q68< ?????????-l>QF8K!MMMMMMMMM.ElPQW8Z"\\\\\\\\\-JYlbRg9j#kkkkkkkkk(NallsRw9y${ { { { { { { { { Qgu~mR:%|` F ,  |` F ,  |` F ,  |` F ,  |` F ,  |` F ,  |`F-|aF-|aF$-+--------}a/F8-=>>>>>>>>}8aDGJ.NOOOOOOOO?}NaWG\/^________DW}bbiHm/oppppppppG^l}ub{H~0Heu~bI1 j~~cI2/0011q2V2;2!22222222/0011q2V2;2!22222222/0011q2V2;2!22222222/0011q2V2;2!22222222./001q1V1;1!11111111*+,,-q-V-;-!--------%&'((q(V);)") ) ) ) ) ) ) ) !!q"V"<"""(")")")")")")")"r$V3<:#=>>>>>>>.r@VI';`tsX?(e|ˌsY@) ˢtZA+BCCDDDfDJE/EEEEEEEEBCCDDDfDJE/EEEEEEEEBCCDDDfDJE/EEEEEEEE@AABBBfCJC/CCCCCCCC=>>??@f@J@/@@@@@@@@9:;;<S SSSSSSSNOOPPPwPZP>Q!QQQQQQQJJKLLLwLZL>M!MMMMMMMDEEFFFwGZG?#G"*G,G,G,G,G,G,G<==>>?w2?[???F?#I?J?J?J?J?J?J?/122)3E3wR3[Z4@_4$a4b4b4b4b4b4b46Rb xk \q!@u!%v!w!w!w!w!w!w!?^o{x\A' Dg{y]B( Goҕy]C*uӬz^D,z_F. {`G0ijjjkkkjkLk.kkkkkkkghhiiiijjLj.jjjjjjjffgggghjhMh.hhhhhhhccddeeejeMe/eeeeeee_``aaaajbMb/bbbbbbbZ[\\\]]j]M]0] ]]]]]]TUUVVVVk%WN3W0:W =W=W=W=W=W=WKLMMN(NBNkNNNUN1YO[O[O[O[O[O[O?@AB=BUCcClkCOpC2sCtCtCtCtCtCtC-./L0e1s1}2l2P232222222WqƂ m P 5  _|ƜmQ6eƴnR8oS:!pU;$ qV=(}}}~~~~z~\~=~~{{{||||z}\}=}}}}}}}xyyyzzz{z\z=zzzzzzzuuvvvww{w]w>wwwwwwwqqrrrss{s]s>ssssssslllmmmm{n]n? nnnnnnneefffgg|5g^Cg@JgMgOgOgOgOgOg\\]]^;^R^|^^^f^@j^l^n^n^n^n^n^PPQ!RPRfRsS||S_SAS!SSSSSS??5@`AwABB}B`CBC#CCCCCC @!m#$ٕ%&'}'`'D(&((((((Xwٰ~aE(bF+ cH-dJ0fL3lL(lL(mM)mM*mN+}}~~~~n N&,046666vvvwww-wFxnSxOZx-^xaxaxaxaxaxmmmn nMnbnooowoP{o/~ooooooaaa>bcbwcccocQc1ccccccPQPQtRR̗SSSpSRT2TTTTTTW7^89::̳;;#vZ@'}\8}\9}]:}]:~^;~(^;p stttt~~~~<_s`?rrrVrvs߉ssttat@ttttttPbPbhbccߪddddbeBeeeeeeLLLMNNOOOcODOOOOOO""#%&(())d*F*#*****eH'gJ+hL/ jN3lImImJnKnL>oNMW"\^___)Shtp}N$SqфpO'>>>lѨqP*…ÅÅÅÅttttuuuvvrvRv-vvvvv___``aaabsbSb0bbbbb???@ABBCCuCUC3DDDDDvW6wY:y[=z]@"Ο}Z-˟~Z/Ơ~[0\2\3(15667R`]i5orsttDfy^7/h䖢â`9xxx亖Ė˖ЖaԖ<֖זؖؖؖχڇ⇤臃b>rrrrssttttdtAt tuuuWWWWXXYYYYeYCZZZZZ!"$$%&g&F&&'''iI$kL*mO/kA߱ߏkBڲڏlCղՐmDβΑm6FDLOQQNdzeǑsn|G[xՋoIeeee|մĴpɴK̴δϴддͨרިrMʘʘʘʘ՘sOtQ%lllllmmnnnvnTn*nnnnDDDDEEFGGGwGVH/HHHHyX4{[9}^=|S|T}U~W;PX\!cgij>>>>pƩѤс[)Ƥǂ\-Һ^1`5b9d=______``aaafaAabbb iD kHlJf1f3g5i7"2Ufjr:y}Vw؊푡k=xxxxxػm?ٶٓnBͷ͔pEqHsKuOwwwwwwwxxxxwyRyyyyMMMMMMNOOPPyPUP&PPPMMMMMMNOOPPyPUP&PPPMMMMMMNOOPPyPUP&PPPxHyIzK{M4BIMQk||OKKKKKKnǫ}Q~SV ߦXѧу[ ](`/a1a1a1a1\^_EaWahk?jفc ھe&g,i1k6m;׻ؖo?׻ؖo?׻ؖo?׻ؖo?׻ؖo?׻ؖo?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~XYZ MtextNot suitable for real usedesc Little CMS Little CMSdesc2.x 2.xlcms2-2.12rc1/testbed/ibm-t61.icc0000755000175000017500000006123413775114656015417 0ustar martimartiblcms@mntrRGB XYZ  .acspAPPL????????-lcmsΌ΋Ԓ:*#-wdeschcprt*dmndedmddglumiwtptbkptclrt$~vcgtrXYZ gXYZ bXYZ rTRC  gTRC  bTRC  targRDevDRCIEDRmetab,pdesc*Huey, LENOVO - 6464Y1H - 15" (2009-12-23)textCopyright (c) 2009 Richard Hughesdesc IBM Francedesc ThinkPad T61XYZ XYZ @ڲXYZ WUclrtRed4QGreen3QBlueT vcgt~C r [ L D E LXk&/42-" !"#b$:%%&'([).**+,-i.H/+00123456i7Q899 ::;<=>~?c@HA-BBCDEFGoHRI6JJKLMNxOWP5QQRSTUrVSW5XYYZ[\]^_p``aQbCc6d+e"fghhijklmnopqrstuvwxyz{}~*9I[m͊ "8Nezח6Oh͢ .Sy߫>dߴ*Lnӻ>_9Uqʎ˩,?Paq׃ؔ٦ڶ"&'(&# |m\K9&c.fL 7 '   &09AFHE=1  rO,  !"#|$X%4&&'()w*N+&+,-.}/R0'0123~4U5.66789n:I;%<<=>?o@JA%BBCDEpFMG)HHIJKvLQM-NNOPQsRPS-T TUVWXpYTZ;[#\ \]^_`abc}dqehf^gUhMiEj@k;l6m1n,o'p#qrstuvwxy z#{(|.}3~9@HNV_hr|̍ݎ0Ha}֙7Y{š;gƨ#NyӰ1^ҶAeҾ>cÆīFp˜GqҚ3X~ڤ4Ts#'+.0233430-)$o>J q N +uL \&v8w4c  !"<"#$T%%&f''(w)()*+@+,-\../~06012_3345D567t8089:e;";<=Z>>?@NA ABCACDEvF3FGHdIIJKHLLMrN,NOP[QQRSRTTUVTWWXYgZ/Z[\]S^^_`aXb+ccdef_g:hhijklqmRn4oopqrstvu^vFw0xyyz{|}~{vspopsw}ʒߓ/MlԜ Iu٤JȩGѮ tʲ wζ%}׺2P~VG`ΣXի~V0 .ZXYZ g:XYZ ge #/XYZ '! curv566789<?CHMT\dny2Mi6_DxYY.xd `  m * R b @%yqopw,C^}5a !.!"k# #$X%%&Z' '(w)1)*+s,:--./0[1:233456789:;= >?7@TAsBCDEG!HHIoJKLN O2PYQRSTV+WYXYZ\(]a^_abbcef[gijzkmDnpqstuwyxz||}/ą^A던JƔZ*՝q_Y_qϱ2]׿'BȨ͏}aI޻(FEcurv>>>?@CEIMSY`ir}0Je+R{/`8r-n? of  m % G  w K %w`OD>=BKYk -V%g !]" "#j$$%&I''()Q**+,-].7//0123456789|:z;y}?@ABCDEFGHIJKMN'OEPhQRSUаq_ާ+cd*#Rcurv   )2=IVdt 'DcCn/c J O&r`  ^  m * Q  ^9vdVLFCDGMU`p+ M !v""#F#$%+%&~','()M* *+,W-$-./01e2M3:4-5$6 78#9+:7;G?@ABD E'FCG`H|IJKLMOP(Q?RUSlTUVWXZ[<\i]^` aKbce?fh iyjl\moLprWsuvw xz8{}q^ v1񌶎R0Bp԰ @dϾq7ǡ̞.ѺCLH!HtFtextCTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Wed Dec 23 22:15:31 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "LUMINANCE_XYZ_CDM2" LUMINANCE_XYZ_CDM2 "127.028906 131.252608 110.265656" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 250 BEGIN_DATA 1 100.00 100.00 100.00 96.782 100.00 84.010 2 100.00 100.00 100.00 96.777 100.01 84.020 3 100.00 100.00 100.00 96.788 100.01 84.020 4 100.00 100.00 100.00 96.772 100.01 84.031 5 31.885 32.743 34.098 7.1032 7.3802 6.8529 6 100.00 0.0000 100.00 55.780 36.372 72.216 7 100.00 100.00 0.0000 80.854 85.328 14.457 8 0.0000 100.00 100.00 56.563 77.910 81.478 9 0.0000 100.00 0.0000 40.875 63.371 11.930 10 0.0000 0.0000 100.00 15.810 14.641 69.711 11 100.00 0.0000 0.0000 39.878 21.756 2.7475 12 0.0000 0.0000 0.0000 0.17553 0.17594 0.25002 13 0.0000 51.304 100.00 22.522 25.400 72.122 14 100.00 0.0000 52.136 42.427 23.732 13.824 15 100.00 53.349 100.00 66.148 52.993 75.881 16 100.00 50.680 0.0000 49.155 36.601 5.9995 17 0.0000 0.0000 51.028 2.4104 1.9441 10.620 18 0.0000 47.489 0.0000 5.7397 9.0981 2.2239 19 0.0000 100.00 51.303 44.137 65.955 27.134 20 100.00 100.00 51.850 84.316 88.033 29.972 21 49.802 0.0000 0.0000 6.4137 3.5753 0.86717 22 51.124 100.00 0.0000 47.587 67.171 12.592 23 48.380 100.00 100.00 65.011 82.675 82.298 24 51.210 0.0000 100.00 25.331 19.848 70.617 25 100.00 50.901 49.331 52.066 39.002 18.084 26 51.774 100.00 50.462 52.565 70.678 27.391 27 49.649 52.597 100.00 33.463 33.521 73.671 28 51.542 52.524 0.0000 15.593 17.815 3.9856 29 0.0000 49.855 52.382 9.3552 12.535 16.059 30 50.495 0.0000 52.232 10.396 6.3389 12.078 31 100.00 0.0000 26.371 40.575 22.270 5.3257 32 0.0000 76.339 100.00 33.117 42.238 75.617 33 100.00 26.813 100.00 58.154 40.221 73.093 34 100.00 100.00 26.811 81.805 86.044 18.357 35 0.0000 100.00 26.561 41.683 64.002 15.669 36 0.0000 74.410 0.0000 16.553 26.310 5.8403 37 73.129 100.00 100.00 77.078 89.284 83.240 38 24.348 0.0000 0.0000 1.5806 0.94588 0.39630 39 24.581 100.00 0.0000 42.402 64.305 12.083 40 0.0000 0.0000 23.698 0.60600 0.52986 2.3141 41 100.00 24.746 0.0000 41.937 25.103 3.4946 42 0.0000 0.0000 74.250 5.8374 4.7142 26.433 43 0.0000 22.539 0.0000 1.3574 2.0990 0.67487 44 100.00 74.753 75.649 68.886 62.128 43.069 45 100.00 76.339 0.0000 62.462 57.635 10.241 46 24.206 31.137 100.00 20.445 20.011 70.880 47 25.917 100.00 72.959 50.277 70.535 45.749 48 76.337 0.0000 100.00 38.220 26.844 71.585 49 0.0000 24.325 100.00 17.209 16.902 70.232 50 26.062 0.0000 27.693 2.6404 1.6716 3.2251 51 76.301 0.0000 0.0000 17.471 9.5861 1.8037 52 55.636 60.634 54.991 25.396 27.543 20.720 53 100.00 26.133 71.401 48.116 30.123 30.439 54 100.00 77.105 100.00 78.967 73.238 79.928 55 23.671 0.0000 100.00 17.792 15.732 69.897 56 72.829 0.0000 29.441 18.321 10.226 5.0650 57 0.0000 100.00 76.177 48.934 69.941 49.240 58 100.00 100.00 76.418 89.056 91.989 51.716 59 0.0000 29.974 25.001 2.8197 3.9290 3.7811 60 0.0000 57.015 27.590 9.3374 14.253 6.6740 61 0.0000 28.308 73.540 8.3865 8.2748 30.381 62 76.657 100.00 0.0000 58.486 73.085 13.506 63 64.153 30.592 100.00 34.100 27.580 72.132 64 71.382 21.927 0.0000 16.352 10.568 2.1399 65 100.00 0.0000 76.747 46.215 26.809 31.233 66 27.952 76.398 100.00 38.158 47.484 76.623 67 25.044 23.803 0.0000 3.1989 3.4516 0.94842 68 72.705 100.00 67.176 65.219 78.350 41.182 69 24.328 100.00 100.00 58.674 79.222 81.658 70 64.851 75.219 27.792 34.393 40.055 11.987 71 29.088 75.418 0.0000 21.568 32.158 6.9815 72 34.835 0.0000 75.524 9.7135 6.9067 27.814 73 26.706 100.00 26.286 43.777 65.280 15.882 74 100.00 26.507 23.928 42.870 25.991 6.1375 75 72.058 68.299 100.00 51.802 51.213 76.973 76 100.00 77.005 25.017 63.975 59.343 13.512 77 0.0000 76.928 72.429 24.440 33.728 36.299 78 78.340 69.846 0.0000 35.875 37.663 7.7361 79 66.707 33.434 33.732 18.891 14.189 7.8290 80 34.882 32.846 73.035 13.171 12.155 30.726 81 75.109 100.00 24.682 60.342 74.358 16.877 82 31.212 66.797 38.917 18.813 25.858 12.802 83 68.904 0.0000 75.143 22.341 13.755 28.600 84 76.754 53.206 80.475 38.684 33.327 43.582 85 29.586 54.279 73.897 18.407 21.380 34.674 86 75.371 75.671 53.308 43.274 45.919 23.595 87 56.532 76.867 0.0000 29.508 38.086 8.0739 88 54.003 77.595 77.133 38.695 45.551 43.420 89 24.398 54.999 100.00 26.998 30.453 73.147 90 100.00 76.564 50.245 65.863 60.652 23.156 91 66.860 18.485 62.967 20.587 13.490 21.742 92 24.183 49.695 0.0000 8.8779 12.706 2.9761 93 78.333 0.0000 52.106 23.870 13.663 13.120 94 0.0000 23.637 48.179 3.7379 4.0541 11.297 95 22.616 0.0000 51.502 3.9387 2.7979 10.933 96 0.0000 54.844 76.717 15.263 18.585 36.843 97 100.00 53.854 25.700 51.217 39.263 9.5218 98 100.00 24.647 46.990 44.331 26.934 13.674 99 0.0000 75.599 49.685 19.861 29.364 18.736 100 52.521 50.873 28.108 17.420 18.438 7.5397 101 78.092 100.00 46.699 64.577 77.105 25.944 102 50.291 100.00 24.042 49.033 68.153 15.815 103 50.424 22.665 16.009 9.2454 6.8360 2.6549 104 49.722 100.00 78.883 57.544 74.988 52.621 105 79.368 49.717 100.00 48.282 40.940 74.559 106 100.00 51.006 76.266 56.735 42.868 39.442 107 26.966 48.404 51.309 12.011 14.642 15.944 108 12.885 47.590 21.789 7.5012 11.020 4.7464 109 46.216 23.744 47.696 10.450 8.0488 12.057 110 26.537 79.034 57.906 27.559 38.504 25.533 111 20.035 78.679 16.337 22.591 34.435 8.7121 112 16.510 13.523 16.825 1.7900 1.7041 1.7702 113 80.772 52.239 39.693 33.078 27.980 12.670 114 52.025 78.476 100.00 47.545 54.688 77.922 115 53.644 19.450 81.363 18.926 13.807 39.159 116 76.390 76.738 79.766 50.525 52.251 47.617 117 16.719 20.668 80.444 10.058 8.9001 36.936 118 49.975 75.940 54.965 31.330 39.094 23.463 119 69.366 54.269 19.639 25.409 24.153 6.8096 120 78.357 44.403 54.054 30.871 24.243 18.910 121 86.769 22.037 79.950 37.403 24.170 38.874 122 23.991 100.00 48.167 45.424 66.697 25.173 123 52.705 49.623 76.910 24.219 23.477 37.566 124 83.235 21.483 18.262 25.590 15.580 4.1464 125 21.860 81.987 82.201 34.008 45.513 49.781 126 26.586 30.174 50.611 7.3390 7.3835 13.410 127 46.176 21.625 100.00 24.801 21.044 70.937 128 46.137 76.930 18.751 27.310 36.755 9.5612 129 91.475 88.357 12.710 61.517 65.249 13.071 130 47.690 27.399 0.0000 8.0330 6.7579 1.5938 131 18.097 39.910 80.111 13.722 14.465 39.178 132 50.349 0.0000 22.838 7.8953 4.4977 2.9459 133 17.466 14.543 39.302 3.1271 2.8099 7.1455 134 88.169 58.584 62.262 44.929 37.898 26.976 135 79.316 19.798 100.00 41.429 29.927 72.136 136 35.363 60.522 16.345 15.432 20.828 5.9239 137 12.495 34.970 8.4353 3.9039 5.6312 1.7456 138 11.590 84.378 36.985 27.019 41.132 15.132 139 85.444 85.726 34.888 55.147 59.454 17.245 140 85.787 17.402 36.424 28.453 16.913 8.3840 141 58.643 35.988 52.638 18.012 14.705 15.942 142 81.323 85.139 100.00 68.844 71.876 80.538 143 75.581 44.352 0.0000 23.219 19.240 3.9417 144 15.160 63.749 47.500 15.748 22.422 15.763 145 15.120 11.073 59.779 4.9766 4.1407 17.560 146 86.028 63.414 16.582 40.018 36.610 8.5068 147 18.812 62.643 85.866 23.314 28.403 49.950 148 18.635 62.340 7.9476 13.120 19.901 4.7801 149 36.339 46.262 87.864 21.038 21.293 50.395 150 65.242 88.476 43.595 46.005 56.607 20.611 151 80.989 100.00 84.297 74.943 85.016 60.461 152 64.260 64.440 85.027 37.886 38.184 50.670 153 35.612 10.187 17.227 4.2728 2.8720 2.0278 154 45.235 41.275 11.575 10.744 11.202 3.1960 155 85.017 19.190 57.638 30.797 18.973 18.858 156 89.001 65.879 87.121 55.655 49.365 55.199 157 88.405 92.832 62.808 68.473 73.860 35.158 158 17.469 44.939 63.608 11.395 13.546 23.474 159 80.504 39.649 23.740 27.475 20.347 6.3547 160 43.343 42.624 45.299 13.137 13.443 12.245 161 62.199 90.166 13.536 43.288 55.885 12.147 162 70.382 64.985 39.990 32.692 33.527 14.444 163 63.092 9.8060 47.998 15.628 9.5134 11.663 164 66.260 33.082 79.344 26.255 19.929 38.922 165 12.275 38.293 42.578 6.3997 8.1986 9.9833 166 44.729 63.293 89.315 30.599 33.805 55.854 167 86.795 39.767 90.083 44.341 32.719 54.910 168 33.191 13.557 63.471 8.2257 6.2326 20.467 169 0.0000 80.502 22.254 20.757 32.527 9.3004 170 35.165 87.442 45.762 34.459 48.798 20.511 171 53.417 63.795 12.922 21.988 26.302 6.5595 172 89.333 37.028 40.649 35.328 24.164 11.600 173 61.924 10.479 11.308 12.127 7.1155 2.0297 174 12.932 63.448 65.784 18.065 24.136 28.144 175 35.002 91.990 14.251 36.328 53.552 11.796 176 64.449 90.256 86.679 56.213 66.205 59.305 177 10.665 88.325 62.489 33.596 48.909 30.886 178 63.940 84.034 63.097 44.778 53.082 32.060 179 32.000 18.251 87.257 14.031 11.523 46.040 180 35.653 63.179 55.913 20.158 25.389 21.282 181 65.306 14.719 95.163 29.039 20.848 61.885 182 12.598 97.956 15.904 39.378 60.643 12.953 183 43.443 13.667 2.3608 5.4401 3.6576 0.92719 184 98.776 12.908 14.035 39.533 22.251 3.7953 185 42.232 44.658 62.606 15.929 16.220 23.280 186 5.7304 86.513 87.282 36.670 49.953 57.088 187 71.195 63.035 64.720 35.902 35.055 29.083 188 14.721 0.0000 24.188 1.2792 0.89876 2.4744 189 45.845 91.742 61.379 43.699 58.499 32.373 190 20.168 99.403 86.193 52.928 73.203 61.291 191 15.692 16.462 98.892 17.172 15.886 69.143 192 49.711 33.832 30.462 11.632 10.157 6.1786 193 92.778 86.752 83.442 72.329 72.554 55.382 194 36.175 85.461 71.738 37.083 49.576 38.944 195 56.241 41.455 91.468 27.602 24.111 56.814 196 63.698 49.811 44.158 23.262 21.617 13.662 197 13.503 85.866 0.84329 26.655 41.607 8.7405 198 50.699 14.090 33.318 9.4038 6.1358 5.8677 199 92.677 38.376 11.214 36.660 25.036 4.8570 200 88.086 68.014 37.675 46.350 43.023 14.745 201 86.614 18.702 0.67590 25.468 15.095 2.6278 202 16.608 0.33745 82.586 8.6870 6.8624 35.442 203 32.618 49.231 35.380 11.728 14.545 8.8331 204 39.446 87.298 89.309 44.627 57.160 61.307 205 89.388 7.1485 88.115 40.442 25.084 47.530 206 65.767 34.460 14.625 17.275 13.256 3.7698 207 84.147 1.8202 16.654 24.638 13.568 3.3843 208 16.889 65.227 27.821 14.968 22.334 8.5395 209 44.534 84.792 4.0875 31.689 44.876 9.3930 210 66.804 16.467 27.933 16.085 9.9479 5.2045 211 58.514 1.6609 86.699 20.583 13.786 42.312 212 4.6391 51.042 39.609 8.8369 12.694 10.054 213 36.900 7.6973 46.164 6.3700 4.2844 9.9811 214 0.87002 15.107 86.749 10.426 9.1195 44.882 215 30.735 26.754 16.517 4.9434 4.9146 2.4919 216 48.174 63.612 69.758 26.386 29.858 32.524 217 13.565 42.325 96.225 19.720 20.671 65.570 218 50.679 66.092 39.202 23.997 28.917 13.327 219 19.235 27.685 65.367 8.1114 7.8623 23.101 220 49.578 25.709 65.082 14.319 11.100 23.330 221 14.832 83.246 100.00 40.590 53.196 77.677 222 82.546 2.4242 67.048 29.152 17.129 23.053 223 33.942 16.843 32.549 5.2516 4.1097 5.4367 224 81.040 38.112 70.346 33.904 24.732 30.546 225 15.556 11.826 1.2429 1.2368 1.2292 0.48138 226 16.070 28.919 29.585 3.9659 4.7704 4.9137 227 49.118 89.394 35.809 38.873 52.843 16.831 228 99.042 12.511 70.128 45.566 26.901 27.920 229 62.910 46.590 2.6010 17.842 16.999 3.6820 230 2.6256 14.517 68.056 5.8511 5.1761 23.910 231 1.1839 16.197 20.949 1.2511 1.5596 2.3249 232 89.271 1.0849 39.328 30.650 17.054 8.2370 233 100.00 31.073 85.483 52.649 34.793 46.962 234 95.707 39.925 60.884 45.356 31.307 23.501 235 72.034 26.792 47.480 21.993 14.839 12.971 236 74.942 79.821 13.360 41.681 47.180 10.494 237 2.1562 64.147 13.993 11.998 18.939 5.1968 238 29.116 42.872 16.700 7.8853 9.9731 3.6404 239 71.555 16.349 81.097 26.938 17.794 38.944 240 0.49326 39.374 86.691 13.684 14.195 47.050 241 2.2551 37.126 61.253 7.6245 8.7861 20.592 242 32.266 80.382 29.691 26.509 38.248 12.348 243 87.493 76.037 64.364 54.202 52.866 32.110 244 3.9929 62.442 91.329 23.002 27.808 57.715 245 43.125 31.672 87.678 19.105 16.428 48.611 246 51.638 6.7350 70.225 14.187 9.3494 25.409 247 66.079 45.918 66.274 26.496 22.757 27.299 248 0.74401 10.382 39.234 1.8689 1.7543 6.7768 249 32.358 69.996 77.444 27.183 34.110 41.254 250 38.655 2.4066 90.080 14.980 11.200 47.523 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispread" CREATED "Wed Dec 23 22:15:31 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.0000 0.010727 9.3233e-03 0.0000 3.9216e-03 0.013642 0.012421 4.1199e-04 7.8431e-03 0.016648 0.015579 2.9755e-03 0.011765 0.019730 0.018814 5.6001e-03 0.015686 0.022904 0.022095 8.2551e-03 0.019608 0.026169 0.025467 0.010986 0.023529 0.029526 0.028901 0.013748 0.027451 0.032990 0.032410 0.016571 0.031373 0.036545 0.035996 0.019455 0.035294 0.040223 0.039658 0.022400 0.039216 0.044007 0.043412 0.025406 0.043137 0.047929 0.047242 0.028473 0.047059 0.051942 0.051164 0.031601 0.050980 0.056031 0.055146 0.034806 0.054902 0.060227 0.059174 0.038056 0.058824 0.064485 0.063233 0.041352 0.062745 0.068788 0.067277 0.044694 0.066667 0.073136 0.071305 0.048066 0.070588 0.077470 0.075288 0.051438 0.074510 0.081773 0.079225 0.054810 0.078431 0.086015 0.083085 0.058183 0.082353 0.090196 0.086870 0.061555 0.086275 0.094331 0.090593 0.064897 0.090196 0.098375 0.094240 0.068193 0.094118 0.10236 0.097810 0.071473 0.098039 0.10623 0.10134 0.074708 0.10196 0.11006 0.10481 0.077928 0.10588 0.11380 0.10825 0.081102 0.10980 0.11746 0.11164 0.084245 0.11373 0.12108 0.11502 0.087343 0.11765 0.12462 0.11839 0.090425 0.12157 0.12810 0.12177 0.093462 0.12549 0.13153 0.12512 0.096468 0.12941 0.13491 0.12850 0.099458 0.13333 0.13822 0.13187 0.10242 0.13725 0.14151 0.13524 0.10536 0.14118 0.14476 0.13861 0.10829 0.14510 0.14800 0.14197 0.11119 0.14902 0.15122 0.14533 0.11408 0.15294 0.15442 0.14868 0.11695 0.15686 0.15764 0.15203 0.11978 0.16078 0.16086 0.15535 0.12261 0.16471 0.16410 0.15866 0.12541 0.16863 0.16738 0.16197 0.12821 0.17255 0.17067 0.16526 0.13098 0.17647 0.17401 0.16855 0.13373 0.18039 0.17739 0.17182 0.13648 0.18431 0.18079 0.17508 0.13919 0.18824 0.18425 0.17835 0.14191 0.19216 0.18773 0.18160 0.14461 0.19608 0.19124 0.18485 0.14731 0.20000 0.19477 0.18810 0.15000 0.20392 0.19832 0.19133 0.15268 0.20784 0.20188 0.19460 0.15537 0.21176 0.20545 0.19786 0.15807 0.21569 0.20899 0.20114 0.16077 0.21961 0.21254 0.20443 0.16349 0.22353 0.21608 0.20774 0.16622 0.22745 0.21962 0.21103 0.16895 0.23137 0.22315 0.21434 0.17169 0.23529 0.22666 0.21767 0.17443 0.23922 0.23017 0.22100 0.17719 0.24314 0.23365 0.22434 0.17996 0.24706 0.23714 0.22768 0.18273 0.25098 0.24063 0.23104 0.18552 0.25490 0.24411 0.23438 0.18833 0.25882 0.24761 0.23774 0.19113 0.26275 0.25110 0.24109 0.19394 0.26667 0.25460 0.24443 0.19677 0.27059 0.25809 0.24779 0.19957 0.27451 0.26160 0.25113 0.20241 0.27843 0.26509 0.25447 0.20523 0.28235 0.26860 0.25783 0.20807 0.28627 0.27208 0.26117 0.21091 0.29020 0.27556 0.26453 0.21376 0.29412 0.27904 0.26789 0.21662 0.29804 0.28251 0.27124 0.21949 0.30196 0.28598 0.27462 0.22234 0.30588 0.28943 0.27797 0.22522 0.30980 0.29287 0.28133 0.22811 0.31373 0.29628 0.28470 0.23099 0.31765 0.29970 0.28806 0.23388 0.32157 0.30312 0.29142 0.23677 0.32549 0.30652 0.29477 0.23966 0.32941 0.30993 0.29812 0.24256 0.33333 0.31331 0.30147 0.24543 0.33725 0.31669 0.30481 0.24831 0.34118 0.32009 0.30816 0.25119 0.34510 0.32351 0.31148 0.25406 0.34902 0.32691 0.31482 0.25695 0.35294 0.33033 0.31817 0.25983 0.35686 0.33378 0.32154 0.26271 0.36078 0.33721 0.32491 0.26558 0.36471 0.34066 0.32830 0.26847 0.36863 0.34415 0.33170 0.27134 0.37255 0.34766 0.33510 0.27422 0.37647 0.35119 0.33854 0.27709 0.38039 0.35476 0.34199 0.27994 0.38431 0.35833 0.34546 0.28278 0.38824 0.36191 0.34894 0.28560 0.39216 0.36553 0.35247 0.28843 0.39608 0.36918 0.35601 0.29123 0.40000 0.37281 0.35956 0.29407 0.40392 0.37647 0.36313 0.29689 0.40784 0.38015 0.36672 0.29970 0.41176 0.38384 0.37031 0.30253 0.41569 0.38755 0.37394 0.30536 0.41961 0.39129 0.37758 0.30819 0.42353 0.39506 0.38125 0.31104 0.42745 0.39883 0.38492 0.31389 0.43137 0.40259 0.38863 0.31678 0.43529 0.40635 0.39236 0.31966 0.43922 0.41012 0.39612 0.32256 0.44314 0.41392 0.39988 0.32547 0.44706 0.41775 0.40365 0.32839 0.45098 0.42161 0.40743 0.33132 0.45490 0.42547 0.41122 0.33426 0.45882 0.42931 0.41505 0.33722 0.46275 0.43316 0.41888 0.34022 0.46667 0.43700 0.42271 0.34321 0.47059 0.44088 0.42654 0.34623 0.47451 0.44477 0.43037 0.34923 0.47843 0.44866 0.43420 0.35229 0.48235 0.45257 0.43804 0.35534 0.48627 0.45647 0.44189 0.35839 0.49020 0.46040 0.44575 0.36147 0.49412 0.46435 0.44962 0.36455 0.49804 0.46828 0.45351 0.36765 0.50196 0.47225 0.45742 0.37076 0.50588 0.47625 0.46133 0.37391 0.50980 0.48026 0.46525 0.37707 0.51373 0.48429 0.46918 0.38025 0.51765 0.48835 0.47315 0.38347 0.52157 0.49242 0.47710 0.38672 0.52549 0.49653 0.48109 0.39001 0.52941 0.50065 0.48508 0.39330 0.53333 0.50478 0.48907 0.39660 0.53725 0.50893 0.49306 0.39989 0.54118 0.51312 0.49708 0.40323 0.54510 0.51730 0.50111 0.40658 0.54902 0.52148 0.50510 0.40996 0.55294 0.52567 0.50913 0.41337 0.55686 0.52987 0.51318 0.41677 0.56078 0.53408 0.51722 0.42019 0.56471 0.53829 0.52128 0.42361 0.56863 0.54250 0.52534 0.42704 0.57255 0.54675 0.52943 0.43049 0.57647 0.55099 0.53352 0.43394 0.58039 0.55521 0.53761 0.43740 0.58431 0.55946 0.54173 0.44089 0.58824 0.56370 0.54586 0.44437 0.59216 0.56796 0.55000 0.44788 0.59608 0.57218 0.55416 0.45139 0.60000 0.57642 0.55834 0.45493 0.60392 0.58067 0.56255 0.45847 0.60784 0.58494 0.56680 0.46201 0.61176 0.58923 0.57105 0.46558 0.61569 0.59348 0.57533 0.46918 0.61961 0.59774 0.57961 0.47279 0.62353 0.60201 0.58395 0.47642 0.62745 0.60630 0.58830 0.48006 0.63137 0.61059 0.59265 0.48371 0.63529 0.61488 0.59702 0.48739 0.63922 0.61917 0.60142 0.49107 0.64314 0.62342 0.60581 0.49477 0.64706 0.62773 0.61022 0.49850 0.65098 0.63204 0.61465 0.50224 0.65490 0.63639 0.61907 0.50600 0.65882 0.64080 0.62354 0.50980 0.66275 0.64524 0.62802 0.51360 0.66667 0.64971 0.63252 0.51743 0.67059 0.65420 0.63700 0.52129 0.67451 0.65867 0.64154 0.52515 0.67843 0.66310 0.64611 0.52905 0.68235 0.66748 0.65074 0.53297 0.68627 0.67182 0.65537 0.53692 0.69020 0.67620 0.66001 0.54089 0.69412 0.68064 0.66461 0.54488 0.69804 0.68513 0.66917 0.54890 0.70196 0.68966 0.67373 0.55294 0.70588 0.69419 0.67831 0.55702 0.70980 0.69873 0.68292 0.56115 0.71373 0.70323 0.68756 0.56532 0.71765 0.70768 0.69216 0.56950 0.72157 0.71211 0.69676 0.57372 0.72549 0.71653 0.70127 0.57800 0.72941 0.72093 0.70578 0.58231 0.73333 0.72535 0.71025 0.58666 0.73725 0.72979 0.71473 0.59103 0.74118 0.73425 0.71920 0.59541 0.74510 0.73870 0.72366 0.59982 0.74902 0.74314 0.72811 0.60426 0.75294 0.74755 0.73257 0.60871 0.75686 0.75198 0.73704 0.61318 0.76078 0.75639 0.74150 0.61769 0.76471 0.76080 0.74595 0.62222 0.76863 0.76518 0.75042 0.62679 0.77255 0.76954 0.75486 0.63143 0.77647 0.77388 0.75933 0.63613 0.78039 0.77823 0.76378 0.64086 0.78431 0.78256 0.76825 0.64567 0.78824 0.78689 0.77272 0.65052 0.79216 0.79124 0.77720 0.65541 0.79608 0.79556 0.78170 0.66029 0.80000 0.79983 0.78624 0.66516 0.80392 0.80406 0.79078 0.67007 0.80784 0.80830 0.79536 0.67507 0.81176 0.81254 0.79992 0.68019 0.81569 0.81678 0.80446 0.68537 0.81961 0.82100 0.80902 0.69059 0.82353 0.82519 0.81360 0.69581 0.82745 0.82936 0.81814 0.70105 0.83137 0.83352 0.82267 0.70628 0.83529 0.83767 0.82718 0.71151 0.83922 0.84186 0.83166 0.71676 0.84314 0.84602 0.83616 0.72204 0.84706 0.85020 0.84063 0.72734 0.85098 0.85435 0.84511 0.73268 0.85490 0.85849 0.84959 0.73803 0.85882 0.86261 0.85408 0.74342 0.86275 0.86674 0.85853 0.74882 0.86667 0.87086 0.86300 0.75427 0.87059 0.87497 0.86746 0.75975 0.87451 0.87903 0.87190 0.76527 0.87843 0.88307 0.87630 0.77086 0.88235 0.88710 0.88067 0.77655 0.88627 0.89110 0.88501 0.78235 0.89020 0.89506 0.88931 0.78833 0.89412 0.89903 0.89355 0.79445 0.89804 0.90295 0.89776 0.80072 0.90196 0.90687 0.90193 0.80719 0.90588 0.91075 0.90605 0.81386 0.90980 0.91461 0.91014 0.82068 0.91373 0.91846 0.91420 0.82760 0.91765 0.92227 0.91824 0.83465 0.92157 0.92607 0.92226 0.84178 0.92549 0.92985 0.92625 0.84898 0.92941 0.93362 0.93024 0.85621 0.93333 0.93738 0.93420 0.86349 0.93725 0.94113 0.93817 0.87086 0.94118 0.94487 0.94212 0.87826 0.94510 0.94861 0.94606 0.88579 0.94902 0.95235 0.95000 0.89339 0.95294 0.95607 0.95392 0.90111 0.95686 0.95979 0.95782 0.90887 0.96078 0.96352 0.96175 0.91670 0.96471 0.96721 0.96564 0.92459 0.96863 0.97090 0.96950 0.93259 0.97255 0.97456 0.97336 0.94067 0.97647 0.97824 0.97720 0.94890 0.98039 0.98189 0.98103 0.95718 0.98431 0.98553 0.98486 0.96556 0.98824 0.98917 0.98866 0.97404 0.99216 0.99278 0.99245 0.98260 0.99608 0.99640 0.99623 0.99126 1.0000 1.0000 1.0000 1.0000 END_DATA dict 0@EDID_md5f09e42aa86585d1bb6687d3c322ed0c1lcms2-2.12rc1/testbed/testcms2.c0000644000175000017500000074405613775114656015477 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "testcms2.h" // A single check. Returns 1 if success, 0 if failed typedef cmsInt32Number (*TestFn)(void); // A parametric Tone curve test function typedef cmsFloat32Number (* dblfnptr)(cmsFloat32Number x, const cmsFloat64Number Params[]); // Some globals to keep track of error #define TEXT_ERROR_BUFFER_SIZE 4096 static char ReasonToFailBuffer[TEXT_ERROR_BUFFER_SIZE]; static char SubTestBuffer[TEXT_ERROR_BUFFER_SIZE]; static cmsInt32Number TotalTests = 0, TotalFail = 0; static cmsBool TrappedError; static cmsInt32Number SimultaneousErrors; #define cmsmin(a, b) (((a) < (b)) ? (a) : (b)) // Die, a fatal unexpected error is detected! void Die(const char* Reason, ...) { va_list args; va_start(args, Reason); vsprintf(ReasonToFailBuffer, Reason, args); va_end(args); printf("\n%s\n", ReasonToFailBuffer); fflush(stdout); exit(1); } // Memory management replacement ----------------------------------------------------------------------------- // This is just a simple plug-in for malloc, free and realloc to keep track of memory allocated, // maximum requested as a single block and maximum allocated at a given time. Results are printed at the end static cmsUInt32Number SingleHit, MaxAllocated=0, TotalMemory=0; // I'm hiding the size before the block. This is a well-known technique and probably the blocks coming from // malloc are built in a way similar to that, but I do on my own to be portable. typedef struct { cmsUInt32Number KeepSize; cmsContext WhoAllocated; cmsUInt32Number DontCheck; union { cmsUInt64Number HiSparc; // '_cmsMemoryBlock' block is prepended by the // allocator for any requested size. Thus, union holds // "widest" type to guarantee proper '_cmsMemoryBlock' // alignment for any requested size. } alignment; } _cmsMemoryBlock; #define SIZE_OF_MEM_HEADER (sizeof(_cmsMemoryBlock)) // This is a fake thread descriptor used to check thread integrity. // Basically it returns a different threadID each time it is called. // Then the memory management replacement functions does check if each // free() is being called with same ContextID used on malloc() static cmsContext DbgThread(void) { static cmsUInt32Number n = 1; return (cmsContext) (void*) ((cmsUInt8Number*) NULL + (n++ % 0xff0)); } // The allocate routine static void* DebugMalloc(cmsContext ContextID, cmsUInt32Number size) { _cmsMemoryBlock* blk; if (size <= 0) { Die("malloc requested with zero bytes"); } TotalMemory += size; if (TotalMemory > MaxAllocated) MaxAllocated = TotalMemory; if (size > SingleHit) SingleHit = size; blk = (_cmsMemoryBlock*) malloc(size + SIZE_OF_MEM_HEADER); if (blk == NULL) return NULL; blk ->KeepSize = size; blk ->WhoAllocated = ContextID; blk ->DontCheck = 0; return (void*) ((cmsUInt8Number*) blk + SIZE_OF_MEM_HEADER); } // The free routine static void DebugFree(cmsContext ContextID, void *Ptr) { _cmsMemoryBlock* blk; if (Ptr == NULL) { Die("NULL free (which is a no-op in C, but may be an clue of something going wrong)"); } blk = (_cmsMemoryBlock*) (((cmsUInt8Number*) Ptr) - SIZE_OF_MEM_HEADER); TotalMemory -= blk ->KeepSize; if (blk ->WhoAllocated != ContextID && !blk->DontCheck) { Die("Trying to free memory allocated by a different thread"); } free(blk); } // Reallocate, just a malloc, a copy and a free in this case. static void * DebugRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize) { _cmsMemoryBlock* blk; void* NewPtr; cmsUInt32Number max_sz; NewPtr = DebugMalloc(ContextID, NewSize); if (Ptr == NULL) return NewPtr; blk = (_cmsMemoryBlock*) (((cmsUInt8Number*) Ptr) - SIZE_OF_MEM_HEADER); max_sz = blk -> KeepSize > NewSize ? NewSize : blk ->KeepSize; memmove(NewPtr, Ptr, max_sz); DebugFree(ContextID, Ptr); return NewPtr; } // Let's know the totals static void DebugMemPrintTotals(void) { printf("[Memory statistics]\n"); printf("Allocated = %u MaxAlloc = %u Single block hit = %u\n", TotalMemory, MaxAllocated, SingleHit); } void DebugMemDontCheckThis(void *Ptr) { _cmsMemoryBlock* blk = (_cmsMemoryBlock*) (((cmsUInt8Number*) Ptr) - SIZE_OF_MEM_HEADER); blk ->DontCheck = 1; } // Memory string static const char* MemStr(cmsUInt32Number size) { static char Buffer[1024]; if (size > 1024*1024) { sprintf(Buffer, "%g Mb", (cmsFloat64Number) size / (1024.0*1024.0)); } else if (size > 1024) { sprintf(Buffer, "%g Kb", (cmsFloat64Number) size / 1024.0); } else sprintf(Buffer, "%g bytes", (cmsFloat64Number) size); return Buffer; } void TestMemoryLeaks(cmsBool ok) { if (TotalMemory > 0) printf("Ok, but %s are left!\n", MemStr(TotalMemory)); else { if (ok) printf("Ok.\n"); } } // Here we go with the plug-in declaration static cmsPluginMemHandler DebugMemHandler = {{ cmsPluginMagicNumber, 2060, cmsPluginMemHandlerSig, NULL }, DebugMalloc, DebugFree, DebugRealloc, NULL, NULL, NULL }; // Returnds a pointer to the memhandler plugin void* PluginMemHandler(void) { return (void*) &DebugMemHandler; } cmsContext WatchDogContext(void* usr) { cmsContext ctx; ctx = cmsCreateContext(&DebugMemHandler, usr); if (ctx == NULL) Die("Unable to create memory managed context"); DebugMemDontCheckThis(ctx); return ctx; } static void FatalErrorQuit(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { Die(Text); cmsUNUSED_PARAMETER(ContextID); cmsUNUSED_PARAMETER(ErrorCode); } void ResetFatalError(void) { cmsSetLogErrorHandler(FatalErrorQuit); } // Print a dot for gauging void Dot(void) { fprintf(stdout, "."); fflush(stdout); } void Say(const char* str) { fprintf(stdout, "%s", str); fflush(stdout); } // Keep track of the reason to fail void Fail(const char* frm, ...) { va_list args; va_start(args, frm); vsprintf(ReasonToFailBuffer, frm, args); va_end(args); } // Keep track of subtest void SubTest(const char* frm, ...) { va_list args; Dot(); va_start(args, frm); vsprintf(SubTestBuffer, frm, args); va_end(args); } // The check framework static void Check(const char* Title, TestFn Fn) { printf("Checking %s ...", Title); fflush(stdout); ReasonToFailBuffer[0] = 0; SubTestBuffer[0] = 0; TrappedError = FALSE; SimultaneousErrors = 0; TotalTests++; if (Fn() && !TrappedError) { // It is a good place to check memory TestMemoryLeaks(TRUE); } else { printf("FAIL!\n"); if (SubTestBuffer[0]) printf("%s: [%s]\n\t%s\n", Title, SubTestBuffer, ReasonToFailBuffer); else printf("%s:\n\t%s\n", Title, ReasonToFailBuffer); if (SimultaneousErrors > 1) printf("\tMore than one (%d) errors were reported\n", SimultaneousErrors); TotalFail++; } fflush(stdout); } // Dump a tone curve, for easy diagnostic void DumpToneCurve(cmsToneCurve* gamma, const char* FileName) { cmsHANDLE hIT8; cmsUInt32Number i; hIT8 = cmsIT8Alloc(gamma ->InterpParams->ContextID); cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_FIELDS", 2); cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", gamma ->nEntries); cmsIT8SetDataFormat(hIT8, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8, 1, "VALUE"); for (i=0; i < gamma ->nEntries; i++) { char Val[30]; sprintf(Val, "%u", i); cmsIT8SetDataRowCol(hIT8, i, 0, Val); sprintf(Val, "0x%x", gamma ->Table16[i]); cmsIT8SetDataRowCol(hIT8, i, 1, Val); } cmsIT8SaveToFile(hIT8, FileName); cmsIT8Free(hIT8); } // ------------------------------------------------------------------------------------------------- // Used to perform several checks. // The space used is a clone of a well-known commercial // color space which I will name "Above RGB" static cmsHPROFILE Create_AboveRGB(void) { cmsToneCurve* Curve[3]; cmsHPROFILE hProfile; cmsCIExyY D65; cmsCIExyYTRIPLE Primaries = {{0.64, 0.33, 1 }, {0.21, 0.71, 1 }, {0.15, 0.06, 1 }}; Curve[0] = Curve[1] = Curve[2] = cmsBuildGamma(DbgThread(), 2.19921875); cmsWhitePointFromTemp(&D65, 6504); hProfile = cmsCreateRGBProfileTHR(DbgThread(), &D65, &Primaries, Curve); cmsFreeToneCurve(Curve[0]); return hProfile; } // A gamma-2.2 gray space static cmsHPROFILE Create_Gray22(void) { cmsHPROFILE hProfile; cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 2.2); if (Curve == NULL) return NULL; hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); return hProfile; } // A gamma-3.0 gray space static cmsHPROFILE Create_Gray30(void) { cmsHPROFILE hProfile; cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0); if (Curve == NULL) return NULL; hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); return hProfile; } static cmsHPROFILE Create_GrayLab(void) { cmsHPROFILE hProfile; cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 1.0); if (Curve == NULL) return NULL; hProfile = cmsCreateGrayProfileTHR(DbgThread(), cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); cmsSetPCS(hProfile, cmsSigLabData); return hProfile; } // A CMYK devicelink that adds gamma 3.0 to each channel static cmsHPROFILE Create_CMYK_DeviceLink(void) { cmsHPROFILE hProfile; cmsToneCurve* Tab[4]; cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), 3.0); if (Curve == NULL) return NULL; Tab[0] = Curve; Tab[1] = Curve; Tab[2] = Curve; Tab[3] = Curve; hProfile = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigCmykData, Tab); if (hProfile == NULL) return NULL; cmsFreeToneCurve(Curve); return hProfile; } // Create a fake CMYK profile, without any other requeriment that being coarse CMYK. // DON'T USE THIS PROFILE FOR ANYTHING, IT IS USELESS BUT FOR TESTING PURPOSES. typedef struct { cmsHTRANSFORM hLab2sRGB; cmsHTRANSFORM sRGB2Lab; cmsHTRANSFORM hIlimit; } FakeCMYKParams; static cmsFloat64Number Clip(cmsFloat64Number v) { if (v < 0) return 0; if (v > 1) return 1; return v; } static cmsInt32Number ForwardSampler(register const cmsUInt16Number In[], cmsUInt16Number Out[], void* Cargo) { FakeCMYKParams* p = (FakeCMYKParams*) Cargo; cmsFloat64Number rgb[3], cmyk[4]; cmsFloat64Number c, m, y, k; cmsDoTransform(p ->hLab2sRGB, In, rgb, 1); c = 1 - rgb[0]; m = 1 - rgb[1]; y = 1 - rgb[2]; k = (c < m ? cmsmin(c, y) : cmsmin(m, y)); // NONSENSE WARNING!: I'm doing this just because this is a test // profile that may have ink limit up to 400%. There is no UCR here // so the profile is basically useless for anything but testing. cmyk[0] = c; cmyk[1] = m; cmyk[2] = y; cmyk[3] = k; cmsDoTransform(p ->hIlimit, cmyk, Out, 1); return 1; } static cmsInt32Number ReverseSampler(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) { FakeCMYKParams* p = (FakeCMYKParams*) Cargo; cmsFloat64Number c, m, y, k, rgb[3]; c = In[0] / 65535.0; m = In[1] / 65535.0; y = In[2] / 65535.0; k = In[3] / 65535.0; if (k == 0) { rgb[0] = Clip(1 - c); rgb[1] = Clip(1 - m); rgb[2] = Clip(1 - y); } else if (k == 1) { rgb[0] = rgb[1] = rgb[2] = 0; } else { rgb[0] = Clip((1 - c) * (1 - k)); rgb[1] = Clip((1 - m) * (1 - k)); rgb[2] = Clip((1 - y) * (1 - k)); } cmsDoTransform(p ->sRGB2Lab, rgb, Out, 1); return 1; } static cmsHPROFILE CreateFakeCMYK(cmsFloat64Number InkLimit, cmsBool lUseAboveRGB) { cmsHPROFILE hICC; cmsPipeline* AToB0, *BToA0; cmsStage* CLUT; cmsContext ContextID; FakeCMYKParams p; cmsHPROFILE hLab, hsRGB, hLimit; cmsUInt32Number cmykfrm; if (lUseAboveRGB) hsRGB = Create_AboveRGB(); else hsRGB = cmsCreate_sRGBProfile(); hLab = cmsCreateLab4Profile(NULL); hLimit = cmsCreateInkLimitingDeviceLink(cmsSigCmykData, InkLimit); cmykfrm = FLOAT_SH(1) | BYTES_SH(0)|CHANNELS_SH(4); p.hLab2sRGB = cmsCreateTransform(hLab, TYPE_Lab_16, hsRGB, TYPE_RGB_DBL, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); p.sRGB2Lab = cmsCreateTransform(hsRGB, TYPE_RGB_DBL, hLab, TYPE_Lab_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); p.hIlimit = cmsCreateTransform(hLimit, cmykfrm, NULL, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); cmsCloseProfile(hLab); cmsCloseProfile(hsRGB); cmsCloseProfile(hLimit); ContextID = DbgThread(); hICC = cmsCreateProfilePlaceholder(ContextID); if (!hICC) return NULL; cmsSetProfileVersion(hICC, 4.3); cmsSetDeviceClass(hICC, cmsSigOutputClass); cmsSetColorSpace(hICC, cmsSigCmykData); cmsSetPCS(hICC, cmsSigLabData); BToA0 = cmsPipelineAlloc(ContextID, 3, 4); if (BToA0 == NULL) return 0; CLUT = cmsStageAllocCLut16bit(ContextID, 17, 3, 4, NULL); if (CLUT == NULL) return 0; if (!cmsStageSampleCLut16bit(CLUT, ForwardSampler, &p, 0)) return 0; cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3)); cmsPipelineInsertStage(BToA0, cmsAT_END, CLUT); cmsPipelineInsertStage(BToA0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 4)); if (!cmsWriteTag(hICC, cmsSigBToA0Tag, (void*) BToA0)) return 0; cmsPipelineFree(BToA0); AToB0 = cmsPipelineAlloc(ContextID, 4, 3); if (AToB0 == NULL) return 0; CLUT = cmsStageAllocCLut16bit(ContextID, 17, 4, 3, NULL); if (CLUT == NULL) return 0; if (!cmsStageSampleCLut16bit(CLUT, ReverseSampler, &p, 0)) return 0; cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 4)); cmsPipelineInsertStage(AToB0, cmsAT_END, CLUT); cmsPipelineInsertStage(AToB0, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, 3)); if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) AToB0)) return 0; cmsPipelineFree(AToB0); cmsDeleteTransform(p.hLab2sRGB); cmsDeleteTransform(p.sRGB2Lab); cmsDeleteTransform(p.hIlimit); cmsLinkTag(hICC, cmsSigAToB1Tag, cmsSigAToB0Tag); cmsLinkTag(hICC, cmsSigAToB2Tag, cmsSigAToB0Tag); cmsLinkTag(hICC, cmsSigBToA1Tag, cmsSigBToA0Tag); cmsLinkTag(hICC, cmsSigBToA2Tag, cmsSigBToA0Tag); return hICC; } // Does create several profiles for latter use------------------------------------------------------------------------------------------------ static cmsInt32Number OneVirtual(cmsHPROFILE h, const char* SubTestTxt, const char* FileName) { SubTest(SubTestTxt); if (h == NULL) return 0; if (!cmsSaveProfileToFile(h, FileName)) return 0; cmsCloseProfile(h); h = cmsOpenProfileFromFile(FileName, "r"); if (h == NULL) return 0; cmsCloseProfile(h); return 1; } // This test checks the ability of lcms2 to save its built-ins as valid profiles. // It does not check the functionality of such profiles static cmsInt32Number CreateTestProfiles(void) { cmsHPROFILE h; h = cmsCreate_sRGBProfileTHR(DbgThread()); if (!OneVirtual(h, "sRGB profile", "sRGBlcms2.icc")) return 0; // ---- h = Create_AboveRGB(); if (!OneVirtual(h, "aRGB profile", "aRGBlcms2.icc")) return 0; // ---- h = Create_Gray22(); if (!OneVirtual(h, "Gray profile", "graylcms2.icc")) return 0; // ---- h = Create_Gray30(); if (!OneVirtual(h, "Gray 3.0 profile", "gray3lcms2.icc")) return 0; // ---- h = Create_GrayLab(); if (!OneVirtual(h, "Gray Lab profile", "glablcms2.icc")) return 0; // ---- h = Create_CMYK_DeviceLink(); if (!OneVirtual(h, "Linearization profile", "linlcms2.icc")) return 0; // ------- h = cmsCreateInkLimitingDeviceLinkTHR(DbgThread(), cmsSigCmykData, 150); if (h == NULL) return 0; if (!OneVirtual(h, "Ink-limiting profile", "limitlcms2.icc")) return 0; // ------ h = cmsCreateLab2ProfileTHR(DbgThread(), NULL); if (!OneVirtual(h, "Lab 2 identity profile", "labv2lcms2.icc")) return 0; // ---- h = cmsCreateLab4ProfileTHR(DbgThread(), NULL); if (!OneVirtual(h, "Lab 4 identity profile", "labv4lcms2.icc")) return 0; // ---- h = cmsCreateXYZProfileTHR(DbgThread()); if (!OneVirtual(h, "XYZ identity profile", "xyzlcms2.icc")) return 0; // ---- h = cmsCreateNULLProfileTHR(DbgThread()); if (!OneVirtual(h, "NULL profile", "nullcms2.icc")) return 0; // --- h = cmsCreateBCHSWabstractProfileTHR(DbgThread(), 17, 0, 0, 0, 0, 5000, 6000); if (!OneVirtual(h, "BCHS profile", "bchslcms2.icc")) return 0; // --- h = CreateFakeCMYK(300, FALSE); if (!OneVirtual(h, "Fake CMYK profile", "lcms2cmyk.icc")) return 0; // --- h = cmsCreateBCHSWabstractProfileTHR(DbgThread(), 17, 0, 1.2, 0, 3, 5000, 5000); if (!OneVirtual(h, "Brightness", "brightness.icc")) return 0; return 1; } static void RemoveTestProfiles(void) { remove("sRGBlcms2.icc"); remove("aRGBlcms2.icc"); remove("graylcms2.icc"); remove("gray3lcms2.icc"); remove("linlcms2.icc"); remove("limitlcms2.icc"); remove("labv2lcms2.icc"); remove("labv4lcms2.icc"); remove("xyzlcms2.icc"); remove("nullcms2.icc"); remove("bchslcms2.icc"); remove("lcms2cmyk.icc"); remove("glablcms2.icc"); remove("lcms2link.icc"); remove("lcms2link2.icc"); remove("brightness.icc"); } // ------------------------------------------------------------------------------------------------- // Check the size of basic types. If this test fails, nothing is going to work anyway static cmsInt32Number CheckBaseTypes(void) { // Ignore warnings about conditional expression #ifdef _MSC_VER #pragma warning(disable: 4127) #endif if (sizeof(cmsUInt8Number) != 1) return 0; if (sizeof(cmsInt8Number) != 1) return 0; if (sizeof(cmsUInt16Number) != 2) return 0; if (sizeof(cmsInt16Number) != 2) return 0; if (sizeof(cmsUInt32Number) != 4) return 0; if (sizeof(cmsInt32Number) != 4) return 0; if (sizeof(cmsUInt64Number) != 8) return 0; if (sizeof(cmsInt64Number) != 8) return 0; if (sizeof(cmsFloat32Number) != 4) return 0; if (sizeof(cmsFloat64Number) != 8) return 0; if (sizeof(cmsSignature) != 4) return 0; if (sizeof(cmsU8Fixed8Number) != 2) return 0; if (sizeof(cmsS15Fixed16Number) != 4) return 0; if (sizeof(cmsU16Fixed16Number) != 4) return 0; return 1; } // ------------------------------------------------------------------------------------------------- // Are we little or big endian? From Harbison&Steele. static cmsInt32Number CheckEndianness(void) { cmsInt32Number BigEndian, IsOk; union { long l; char c[sizeof (long)]; } u; u.l = 1; BigEndian = (u.c[sizeof (long) - 1] == 1); #ifdef CMS_USE_BIG_ENDIAN IsOk = BigEndian; #else IsOk = !BigEndian; #endif if (!IsOk) { Die("\nOOOPPSS! You have CMS_USE_BIG_ENDIAN toggle misconfigured!\n\n" "Please, edit lcms2.h and %s the CMS_USE_BIG_ENDIAN toggle.\n", BigEndian? "uncomment" : "comment"); return 0; } return 1; } // Check quick floor static cmsInt32Number CheckQuickFloor(void) { if ((_cmsQuickFloor(1.234) != 1) || (_cmsQuickFloor(32767.234) != 32767) || (_cmsQuickFloor(-1.234) != -2) || (_cmsQuickFloor(-32767.1) != -32768)) { Die("\nOOOPPSS! _cmsQuickFloor() does not work as expected in your machine!\n\n" "Please, edit lcms2.h and uncomment the CMS_DONT_USE_FAST_FLOOR toggle.\n"); return 0; } return 1; } // Quick floor restricted to word static cmsInt32Number CheckQuickFloorWord(void) { cmsUInt32Number i; for (i=0; i < 65535; i++) { if (_cmsQuickFloorWord((cmsFloat64Number) i + 0.1234) != i) { Die("\nOOOPPSS! _cmsQuickFloorWord() does not work as expected in your machine!\n\n" "Please, edit lcms2.h and uncomment the CMS_DONT_USE_FAST_FLOOR toggle.\n"); return 0; } } return 1; } // ------------------------------------------------------------------------------------------------- // Precision stuff. // On 15.16 fixed point, this is the maximum we can obtain. Remember ICC profiles have storage limits on this number #define FIXED_PRECISION_15_16 (1.0 / 65535.0) // On 8.8 fixed point, that is the max we can obtain. #define FIXED_PRECISION_8_8 (1.0 / 255.0) // On cmsFloat32Number type, this is the precision we expect #define FLOAT_PRECISSION (0.00001) static cmsFloat64Number MaxErr; static cmsFloat64Number AllowedErr = FIXED_PRECISION_15_16; cmsBool IsGoodVal(const char *title, cmsFloat64Number in, cmsFloat64Number out, cmsFloat64Number max) { cmsFloat64Number Err = fabs(in - out); if (Err > MaxErr) MaxErr = Err; if ((Err > max )) { Fail("(%s): Must be %f, But is %f ", title, in, out); return FALSE; } return TRUE; } cmsBool IsGoodFixed15_16(const char *title, cmsFloat64Number in, cmsFloat64Number out) { return IsGoodVal(title, in, out, FIXED_PRECISION_15_16); } cmsBool IsGoodFixed8_8(const char *title, cmsFloat64Number in, cmsFloat64Number out) { return IsGoodVal(title, in, out, FIXED_PRECISION_8_8); } cmsBool IsGoodWord(const char *title, cmsUInt16Number in, cmsUInt16Number out) { if ((abs(in - out) > 0 )) { Fail("(%s): Must be %x, But is %x ", title, in, out); return FALSE; } return TRUE; } cmsBool IsGoodWordPrec(const char *title, cmsUInt16Number in, cmsUInt16Number out, cmsUInt16Number maxErr) { if ((abs(in - out) > maxErr )) { Fail("(%s): Must be %x, But is %x ", title, in, out); return FALSE; } return TRUE; } // Fixed point ---------------------------------------------------------------------------------------------- static cmsInt32Number TestSingleFixed15_16(cmsFloat64Number d) { cmsS15Fixed16Number f = _cmsDoubleTo15Fixed16(d); cmsFloat64Number RoundTrip = _cms15Fixed16toDouble(f); cmsFloat64Number Error = fabs(d - RoundTrip); return ( Error <= FIXED_PRECISION_15_16); } static cmsInt32Number CheckFixedPoint15_16(void) { if (!TestSingleFixed15_16(1.0)) return 0; if (!TestSingleFixed15_16(2.0)) return 0; if (!TestSingleFixed15_16(1.23456)) return 0; if (!TestSingleFixed15_16(0.99999)) return 0; if (!TestSingleFixed15_16(0.1234567890123456789099999)) return 0; if (!TestSingleFixed15_16(-1.0)) return 0; if (!TestSingleFixed15_16(-2.0)) return 0; if (!TestSingleFixed15_16(-1.23456)) return 0; if (!TestSingleFixed15_16(-1.1234567890123456789099999)) return 0; if (!TestSingleFixed15_16(+32767.1234567890123456789099999)) return 0; if (!TestSingleFixed15_16(-32767.1234567890123456789099999)) return 0; return 1; } static cmsInt32Number TestSingleFixed8_8(cmsFloat64Number d) { cmsS15Fixed16Number f = _cmsDoubleTo8Fixed8(d); cmsFloat64Number RoundTrip = _cms8Fixed8toDouble((cmsUInt16Number) f); cmsFloat64Number Error = fabs(d - RoundTrip); return ( Error <= FIXED_PRECISION_8_8); } static cmsInt32Number CheckFixedPoint8_8(void) { if (!TestSingleFixed8_8(1.0)) return 0; if (!TestSingleFixed8_8(2.0)) return 0; if (!TestSingleFixed8_8(1.23456)) return 0; if (!TestSingleFixed8_8(0.99999)) return 0; if (!TestSingleFixed8_8(0.1234567890123456789099999)) return 0; if (!TestSingleFixed8_8(+255.1234567890123456789099999)) return 0; return 1; } // D50 constant -------------------------------------------------------------------------------------------- static cmsInt32Number CheckD50Roundtrip(void) { cmsFloat64Number cmsD50X_2 = 0.96420288; cmsFloat64Number cmsD50Y_2 = 1.0; cmsFloat64Number cmsD50Z_2 = 0.82490540; cmsS15Fixed16Number xe = _cmsDoubleTo15Fixed16(cmsD50X); cmsS15Fixed16Number ye = _cmsDoubleTo15Fixed16(cmsD50Y); cmsS15Fixed16Number ze = _cmsDoubleTo15Fixed16(cmsD50Z); cmsFloat64Number x = _cms15Fixed16toDouble(xe); cmsFloat64Number y = _cms15Fixed16toDouble(ye); cmsFloat64Number z = _cms15Fixed16toDouble(ze); double dx = fabs(cmsD50X - x); double dy = fabs(cmsD50Y - y); double dz = fabs(cmsD50Z - z); double euc = sqrt(dx*dx + dy*dy + dz* dz); if (euc > 1E-5) { Fail("D50 roundtrip |err| > (%f) ", euc); return 0; } xe = _cmsDoubleTo15Fixed16(cmsD50X_2); ye = _cmsDoubleTo15Fixed16(cmsD50Y_2); ze = _cmsDoubleTo15Fixed16(cmsD50Z_2); x = _cms15Fixed16toDouble(xe); y = _cms15Fixed16toDouble(ye); z = _cms15Fixed16toDouble(ze); dx = fabs(cmsD50X_2 - x); dy = fabs(cmsD50Y_2 - y); dz = fabs(cmsD50Z_2 - z); euc = sqrt(dx*dx + dy*dy + dz* dz); if (euc > 1E-5) { Fail("D50 roundtrip |err| > (%f) ", euc); return 0; } return 1; } // Linear interpolation ----------------------------------------------------------------------------------------------- // Since prime factors of 65535 (FFFF) are, // // 0xFFFF = 3 * 5 * 17 * 257 // // I test tables of 2, 4, 6, and 18 points, that will be exact. static void BuildTable(cmsInt32Number n, cmsUInt16Number Tab[], cmsBool Descending) { cmsInt32Number i; for (i=0; i < n; i++) { cmsFloat64Number v = (cmsFloat64Number) ((cmsFloat64Number) 65535.0 * i ) / (n-1); Tab[Descending ? (n - i - 1) : i ] = (cmsUInt16Number) floor(v + 0.5); } } // A single function that does check 1D interpolation // nNodesToCheck = number on nodes to check // Down = Create decreasing tables // Reverse = Check reverse interpolation // max_err = max allowed error static cmsInt32Number Check1D(cmsInt32Number nNodesToCheck, cmsBool Down, cmsInt32Number max_err) { cmsUInt32Number i; cmsUInt16Number in, out; cmsInterpParams* p; cmsUInt16Number* Tab; Tab = (cmsUInt16Number*) malloc(sizeof(cmsUInt16Number)* nNodesToCheck); if (Tab == NULL) return 0; p = _cmsComputeInterpParams(DbgThread(), nNodesToCheck, 1, 1, Tab, CMS_LERP_FLAGS_16BITS); if (p == NULL) return 0; BuildTable(nNodesToCheck, Tab, Down); for (i=0; i <= 0xffff; i++) { in = (cmsUInt16Number) i; out = 0; p ->Interpolation.Lerp16(&in, &out, p); if (Down) out = 0xffff - out; if (abs(out - in) > max_err) { Fail("(%dp): Must be %x, But is %x : ", nNodesToCheck, in, out); _cmsFreeInterpParams(p); free(Tab); return 0; } } _cmsFreeInterpParams(p); free(Tab); return 1; } static cmsInt32Number Check1DLERP2(void) { return Check1D(2, FALSE, 0); } static cmsInt32Number Check1DLERP3(void) { return Check1D(3, FALSE, 1); } static cmsInt32Number Check1DLERP4(void) { return Check1D(4, FALSE, 0); } static cmsInt32Number Check1DLERP6(void) { return Check1D(6, FALSE, 0); } static cmsInt32Number Check1DLERP18(void) { return Check1D(18, FALSE, 0); } static cmsInt32Number Check1DLERP2Down(void) { return Check1D(2, TRUE, 0); } static cmsInt32Number Check1DLERP3Down(void) { return Check1D(3, TRUE, 1); } static cmsInt32Number Check1DLERP6Down(void) { return Check1D(6, TRUE, 0); } static cmsInt32Number Check1DLERP18Down(void) { return Check1D(18, TRUE, 0); } static cmsInt32Number ExhaustiveCheck1DLERP(void) { cmsUInt32Number j; printf("\n"); for (j=10; j <= 4096; j++) { if ((j % 10) == 0) printf("%u \r", j); if (!Check1D(j, FALSE, 1)) return 0; } printf("\rResult is "); return 1; } static cmsInt32Number ExhaustiveCheck1DLERPDown(void) { cmsUInt32Number j; printf("\n"); for (j=10; j <= 4096; j++) { if ((j % 10) == 0) printf("%u \r", j); if (!Check1D(j, TRUE, 1)) return 0; } printf("\rResult is "); return 1; } // 3D interpolation ------------------------------------------------------------------------------------------------- static cmsInt32Number Check3DinterpolationFloatTetrahedral(void) { cmsInterpParams* p; cmsInt32Number i; cmsFloat32Number In[3], Out[3]; cmsFloat32Number FloatTable[] = { //R G B 0, 0, 0, // B=0,G=0,R=0 0, 0, .25, // B=1,G=0,R=0 0, .5, 0, // B=0,G=1,R=0 0, .5, .25, // B=1,G=1,R=0 1, 0, 0, // B=0,G=0,R=1 1, 0, .25, // B=1,G=0,R=1 1, .5, 0, // B=0,G=1,R=1 1, .5, .25 // B=1,G=1,R=1 }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F); p ->Interpolation.LerpFloat(In, Out, p); if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number Check3DinterpolationFloatTrilinear(void) { cmsInterpParams* p; cmsInt32Number i; cmsFloat32Number In[3], Out[3]; cmsFloat32Number FloatTable[] = { //R G B 0, 0, 0, // B=0,G=0,R=0 0, 0, .25, // B=1,G=0,R=0 0, .5, 0, // B=0,G=1,R=0 0, .5, .25, // B=1,G=1,R=0 1, 0, 0, // B=0,G=0,R=1 1, 0, .25, // B=1,G=0,R=1 1, .5, 0, // B=0,G=1,R=1 1, .5, .25 // B=1,G=1,R=1 }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsFloat32Number) ( (cmsFloat32Number) i / 65535.0F); p ->Interpolation.LerpFloat(In, Out, p); if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number Check3DinterpolationTetrahedral16(void) { cmsInterpParams* p; cmsInt32Number i; cmsUInt16Number In[3], Out[3]; cmsUInt16Number Table[] = { 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 0, 0, 0xffff, 0, 0xffff, 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsUInt16Number) i; p ->Interpolation.Lerp16(In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number Check3DinterpolationTrilinear16(void) { cmsInterpParams* p; cmsInt32Number i; cmsUInt16Number In[3], Out[3]; cmsUInt16Number Table[] = { 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 0, 0, 0xffff, 0, 0xffff, 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; for (i=0; i < 0xffff; i++) { In[0] = In[1] = In[2] = (cmsUInt16Number) i; p ->Interpolation.Lerp16(In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number ExaustiveCheck3DinterpolationFloatTetrahedral(void) { cmsInterpParams* p; cmsInt32Number r, g, b; cmsFloat32Number In[3], Out[3]; cmsFloat32Number FloatTable[] = { //R G B 0, 0, 0, // B=0,G=0,R=0 0, 0, .25, // B=1,G=0,R=0 0, .5, 0, // B=0,G=1,R=0 0, .5, .25, // B=1,G=1,R=0 1, 0, 0, // B=0,G=0,R=1 1, 0, .25, // B=1,G=0,R=1 1, .5, 0, // B=0,G=1,R=1 1, .5, .25 // B=1,G=1,R=1 }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT); MaxErr = 0.0; for (r=0; r < 0xff; r++) for (g=0; g < 0xff; g++) for (b=0; b < 0xff; b++) { In[0] = (cmsFloat32Number) r / 255.0F; In[1] = (cmsFloat32Number) g / 255.0F; In[2] = (cmsFloat32Number) b / 255.0F; p ->Interpolation.LerpFloat(In, Out, p); if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number ExaustiveCheck3DinterpolationFloatTrilinear(void) { cmsInterpParams* p; cmsInt32Number r, g, b; cmsFloat32Number In[3], Out[3]; cmsFloat32Number FloatTable[] = { //R G B 0, 0, 0, // B=0,G=0,R=0 0, 0, .25, // B=1,G=0,R=0 0, .5, 0, // B=0,G=1,R=0 0, .5, .25, // B=1,G=1,R=0 1, 0, 0, // B=0,G=0,R=1 1, 0, .25, // B=1,G=0,R=1 1, .5, 0, // B=0,G=1,R=1 1, .5, .25 // B=1,G=1,R=1 }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, FloatTable, CMS_LERP_FLAGS_FLOAT|CMS_LERP_FLAGS_TRILINEAR); MaxErr = 0.0; for (r=0; r < 0xff; r++) for (g=0; g < 0xff; g++) for (b=0; b < 0xff; b++) { In[0] = (cmsFloat32Number) r / 255.0F; In[1] = (cmsFloat32Number) g / 255.0F; In[2] = (cmsFloat32Number) b / 255.0F; p ->Interpolation.LerpFloat(In, Out, p); if (!IsGoodFixed15_16("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodFixed15_16("Channel 2", Out[1], (cmsFloat32Number) In[1] / 2.F)) goto Error; if (!IsGoodFixed15_16("Channel 3", Out[2], (cmsFloat32Number) In[2] / 4.F)) goto Error; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr); _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number ExhaustiveCheck3DinterpolationTetrahedral16(void) { cmsInterpParams* p; cmsInt32Number r, g, b; cmsUInt16Number In[3], Out[3]; cmsUInt16Number Table[] = { 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 0, 0, 0xffff, 0, 0xffff, 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_16BITS); for (r=0; r < 0xff; r++) for (g=0; g < 0xff; g++) for (b=0; b < 0xff; b++) { In[0] = (cmsUInt16Number) r ; In[1] = (cmsUInt16Number) g ; In[2] = (cmsUInt16Number) b ; p ->Interpolation.Lerp16(In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } static cmsInt32Number ExhaustiveCheck3DinterpolationTrilinear16(void) { cmsInterpParams* p; cmsInt32Number r, g, b; cmsUInt16Number In[3], Out[3]; cmsUInt16Number Table[] = { 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 0, 0, 0xffff, 0, 0xffff, 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; p = _cmsComputeInterpParams(DbgThread(), 2, 3, 3, Table, CMS_LERP_FLAGS_TRILINEAR); for (r=0; r < 0xff; r++) for (g=0; g < 0xff; g++) for (b=0; b < 0xff; b++) { In[0] = (cmsUInt16Number) r ; In[1] = (cmsUInt16Number)g ; In[2] = (cmsUInt16Number)b ; p ->Interpolation.Lerp16(In, Out, p); if (!IsGoodWord("Channel 1", Out[0], In[0])) goto Error; if (!IsGoodWord("Channel 2", Out[1], In[1])) goto Error; if (!IsGoodWord("Channel 3", Out[2], In[2])) goto Error; } _cmsFreeInterpParams(p); return 1; Error: _cmsFreeInterpParams(p); return 0; } // Check reverse interpolation on LUTS. This is right now exclusively used by K preservation algorithm static cmsInt32Number CheckReverseInterpolation3x3(void) { cmsPipeline* Lut; cmsStage* clut; cmsFloat32Number Target[4], Result[4], Hint[4]; cmsFloat32Number err, max; cmsInt32Number i; cmsUInt16Number Table[] = { 0, 0, 0, // 0 0 0 0, 0, 0xffff, // 0 0 1 0, 0xffff, 0, // 0 1 0 0, 0xffff, 0xffff, // 0 1 1 0xffff, 0, 0, // 1 0 0 0xffff, 0, 0xffff, // 1 0 1 0xffff, 0xffff, 0, // 1 1 0 0xffff, 0xffff, 0xffff, // 1 1 1 }; Lut = cmsPipelineAlloc(DbgThread(), 3, 3); clut = cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table); cmsPipelineInsertStage(Lut, cmsAT_BEGIN, clut); Target[0] = 0; Target[1] = 0; Target[2] = 0; Hint[0] = 0; Hint[1] = 0; Hint[2] = 0; cmsPipelineEvalReverseFloat(Target, Result, NULL, Lut); if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0){ Fail("Reverse interpolation didn't find zero"); goto Error; } // Transverse identity max = 0; for (i=0; i <= 100; i++) { cmsFloat32Number in = i / 100.0F; Target[0] = in; Target[1] = 0; Target[2] = 0; cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); err = fabsf(in - Result[0]); if (err > max) max = err; memcpy(Hint, Result, sizeof(Hint)); } cmsPipelineFree(Lut); return (max <= FLOAT_PRECISSION); Error: cmsPipelineFree(Lut); return 0; } static cmsInt32Number CheckReverseInterpolation4x3(void) { cmsPipeline* Lut; cmsStage* clut; cmsFloat32Number Target[4], Result[4], Hint[4]; cmsFloat32Number err, max; cmsInt32Number i; // 4 -> 3, output gets 3 first channels copied cmsUInt16Number Table[] = { 0, 0, 0, // 0 0 0 0 = ( 0, 0, 0) 0, 0, 0, // 0 0 0 1 = ( 0, 0, 0) 0, 0, 0xffff, // 0 0 1 0 = ( 0, 0, 1) 0, 0, 0xffff, // 0 0 1 1 = ( 0, 0, 1) 0, 0xffff, 0, // 0 1 0 0 = ( 0, 1, 0) 0, 0xffff, 0, // 0 1 0 1 = ( 0, 1, 0) 0, 0xffff, 0xffff, // 0 1 1 0 = ( 0, 1, 1) 0, 0xffff, 0xffff, // 0 1 1 1 = ( 0, 1, 1) 0xffff, 0, 0, // 1 0 0 0 = ( 1, 0, 0) 0xffff, 0, 0, // 1 0 0 1 = ( 1, 0, 0) 0xffff, 0, 0xffff, // 1 0 1 0 = ( 1, 0, 1) 0xffff, 0, 0xffff, // 1 0 1 1 = ( 1, 0, 1) 0xffff, 0xffff, 0, // 1 1 0 0 = ( 1, 1, 0) 0xffff, 0xffff, 0, // 1 1 0 1 = ( 1, 1, 0) 0xffff, 0xffff, 0xffff, // 1 1 1 0 = ( 1, 1, 1) 0xffff, 0xffff, 0xffff, // 1 1 1 1 = ( 1, 1, 1) }; Lut = cmsPipelineAlloc(DbgThread(), 4, 3); clut = cmsStageAllocCLut16bit(DbgThread(), 2, 4, 3, Table); cmsPipelineInsertStage(Lut, cmsAT_BEGIN, clut); // Check if the LUT is behaving as expected SubTest("4->3 feasibility"); for (i=0; i <= 100; i++) { Target[0] = i / 100.0F; Target[1] = Target[0]; Target[2] = 0; Target[3] = 12; cmsPipelineEvalFloat(Target, Result, Lut); if (!IsGoodFixed15_16("0", Target[0], Result[0])) goto Error; if (!IsGoodFixed15_16("1", Target[1], Result[1])) goto Error; if (!IsGoodFixed15_16("2", Target[2], Result[2])) goto Error; } SubTest("4->3 zero"); Target[0] = 0; Target[1] = 0; Target[2] = 0; // This one holds the fixed K Target[3] = 0; // This is our hint (which is a big lie in this case) Hint[0] = 0.1F; Hint[1] = 0.1F; Hint[2] = 0.1F; cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); if (Result[0] != 0 || Result[1] != 0 || Result[2] != 0 || Result[3] != 0){ Fail("Reverse interpolation didn't find zero"); goto Error; } SubTest("4->3 find CMY"); max = 0; for (i=0; i <= 100; i++) { cmsFloat32Number in = i / 100.0F; Target[0] = in; Target[1] = 0; Target[2] = 0; cmsPipelineEvalReverseFloat(Target, Result, Hint, Lut); err = fabsf(in - Result[0]); if (err > max) max = err; memcpy(Hint, Result, sizeof(Hint)); } cmsPipelineFree(Lut); return (max <= FLOAT_PRECISSION); Error: cmsPipelineFree(Lut); return 0; } // Check all interpolation. static cmsUInt16Number Fn8D1(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8, cmsUInt32Number m) { return (cmsUInt16Number) ((a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8) / m); } static cmsUInt16Number Fn8D2(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8, cmsUInt32Number m) { return (cmsUInt16Number) ((a1 + 3* a2 + 3* a3 + a4 + a5 + a6 + a7 + a8 ) / (m + 4)); } static cmsUInt16Number Fn8D3(cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8, cmsUInt32Number m) { return (cmsUInt16Number) ((3*a1 + 2*a2 + 3*a3 + a4 + a5 + a6 + a7 + a8) / (m + 5)); } static cmsInt32Number Sampler3D(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) { Out[0] = Fn8D1(In[0], In[1], In[2], 0, 0, 0, 0, 0, 3); Out[1] = Fn8D2(In[0], In[1], In[2], 0, 0, 0, 0, 0, 3); Out[2] = Fn8D3(In[0], In[1], In[2], 0, 0, 0, 0, 0, 3); return 1; cmsUNUSED_PARAMETER(Cargo); } static cmsInt32Number Sampler4D(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) { Out[0] = Fn8D1(In[0], In[1], In[2], In[3], 0, 0, 0, 0, 4); Out[1] = Fn8D2(In[0], In[1], In[2], In[3], 0, 0, 0, 0, 4); Out[2] = Fn8D3(In[0], In[1], In[2], In[3], 0, 0, 0, 0, 4); return 1; cmsUNUSED_PARAMETER(Cargo); } static cmsInt32Number Sampler5D(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) { Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], 0, 0, 0, 5); Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], 0, 0, 0, 5); Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], 0, 0, 0, 5); return 1; cmsUNUSED_PARAMETER(Cargo); } static cmsInt32Number Sampler6D(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) { Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], 0, 0, 6); return 1; cmsUNUSED_PARAMETER(Cargo); } static cmsInt32Number Sampler7D(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) { Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], In[5], In[6], 0, 7); Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], In[5], In[6], 0, 7); Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], In[6], 0, 7); return 1; cmsUNUSED_PARAMETER(Cargo); } static cmsInt32Number Sampler8D(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void * Cargo) { Out[0] = Fn8D1(In[0], In[1], In[2], In[3], In[4], In[5], In[6], In[7], 8); Out[1] = Fn8D2(In[0], In[1], In[2], In[3], In[4], In[5], In[6], In[7], 8); Out[2] = Fn8D3(In[0], In[1], In[2], In[3], In[4], In[5], In[6], In[7], 8); return 1; cmsUNUSED_PARAMETER(Cargo); } static cmsBool CheckOne3D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3) { cmsUInt16Number In[3], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); // This is the real value Sampler3D(In, Out2, NULL); // Let's see the difference if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; return TRUE; } static cmsBool CheckOne4D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4) { cmsUInt16Number In[4], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); // This is the real value Sampler4D(In, Out2, NULL); // Let's see the difference if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; return TRUE; } static cmsBool CheckOne5D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5) { cmsUInt16Number In[5], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); // This is the real value Sampler5D(In, Out2, NULL); // Let's see the difference if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; return TRUE; } static cmsBool CheckOne6D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6) { cmsUInt16Number In[6], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); // This is the real value Sampler6D(In, Out2, NULL); // Let's see the difference if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; return TRUE; } static cmsBool CheckOne7D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7) { cmsUInt16Number In[7], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); // This is the real value Sampler7D(In, Out2, NULL); // Let's see the difference if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; return TRUE; } static cmsBool CheckOne8D(cmsPipeline* lut, cmsUInt16Number a1, cmsUInt16Number a2, cmsUInt16Number a3, cmsUInt16Number a4, cmsUInt16Number a5, cmsUInt16Number a6, cmsUInt16Number a7, cmsUInt16Number a8) { cmsUInt16Number In[8], Out1[3], Out2[3]; In[0] = a1; In[1] = a2; In[2] = a3; In[3] = a4; In[4] = a5; In[5] = a6; In[6] = a7; In[7] = a8; // This is the interpolated value cmsPipelineEval16(In, Out1, lut); // This is the real value Sampler8D(In, Out2, NULL); // Let's see the difference if (!IsGoodWordPrec("Channel 1", Out1[0], Out2[0], 2)) return FALSE; if (!IsGoodWordPrec("Channel 2", Out1[1], Out2[1], 2)) return FALSE; if (!IsGoodWordPrec("Channel 3", Out1[2], Out2[2], 2)) return FALSE; return TRUE; } static cmsInt32Number Check3Dinterp(void) { cmsPipeline* lut; cmsStage* mpe; lut = cmsPipelineAlloc(DbgThread(), 3, 3); mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 3, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler3D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne3D(lut, 0, 0, 0)) return 0; if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0; if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0; if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0; if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0; if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check3DinterpGranular(void) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 7, 8, 9 }; lut = cmsPipelineAlloc(DbgThread(), 3, 3); mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 3, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler3D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne3D(lut, 0, 0, 0)) return 0; if (!CheckOne3D(lut, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne3D(lut, 0x8080, 0x8080, 0x8080)) return 0; if (!CheckOne3D(lut, 0x0000, 0xFE00, 0x80FF)) return 0; if (!CheckOne3D(lut, 0x1111, 0x2222, 0x3333)) return 0; if (!CheckOne3D(lut, 0x0000, 0x0012, 0x0013)) return 0; if (!CheckOne3D(lut, 0x3141, 0x1415, 0x1592)) return 0; if (!CheckOne3D(lut, 0xFF00, 0xFF01, 0xFF12)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check4Dinterp(void) { cmsPipeline* lut; cmsStage* mpe; lut = cmsPipelineAlloc(DbgThread(), 4, 3); mpe = cmsStageAllocCLut16bit(DbgThread(), 9, 4, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler4D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check4DinterpGranular(void) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 9, 8, 7, 6 }; lut = cmsPipelineAlloc(DbgThread(), 4, 3); mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 4, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler4D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne4D(lut, 0, 0, 0, 0)) return 0; if (!CheckOne4D(lut, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne4D(lut, 0x8080, 0x8080, 0x8080, 0x8080)) return 0; if (!CheckOne4D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888)) return 0; if (!CheckOne4D(lut, 0x1111, 0x2222, 0x3333, 0x4444)) return 0; if (!CheckOne4D(lut, 0x0000, 0x0012, 0x0013, 0x0014)) return 0; if (!CheckOne4D(lut, 0x3141, 0x1415, 0x1592, 0x9261)) return 0; if (!CheckOne4D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check5DinterpGranular(void) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 3, 2, 2, 2, 2 }; lut = cmsPipelineAlloc(DbgThread(), 5, 3); mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 5, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler5D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne5D(lut, 0, 0, 0, 0, 0)) return 0; if (!CheckOne5D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne5D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234)) return 0; if (!CheckOne5D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078)) return 0; if (!CheckOne5D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455)) return 0; if (!CheckOne5D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333)) return 0; if (!CheckOne5D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567)) return 0; if (!CheckOne5D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check6DinterpGranular(void) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2 }; lut = cmsPipelineAlloc(DbgThread(), 6, 3); mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 6, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler6D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne6D(lut, 0, 0, 0, 0, 0, 0)) return 0; if (!CheckOne6D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne6D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122)) return 0; if (!CheckOne6D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233)) return 0; if (!CheckOne6D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344)) return 0; if (!CheckOne6D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455)) return 0; if (!CheckOne6D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566)) return 0; if (!CheckOne6D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check7DinterpGranular(void) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2 }; lut = cmsPipelineAlloc(DbgThread(), 7, 3); mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 7, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler7D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne7D(lut, 0, 0, 0, 0, 0, 0, 0)) return 0; if (!CheckOne7D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne7D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056)) return 0; if (!CheckOne7D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088)) return 0; if (!CheckOne7D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987)) return 0; if (!CheckOne7D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988)) return 0; if (!CheckOne7D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56)) return 0; if (!CheckOne7D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe)) return 0; cmsPipelineFree(lut); return 1; } static cmsInt32Number Check8DinterpGranular(void) { cmsPipeline* lut; cmsStage* mpe; cmsUInt32Number Dimensions[] = { 4, 3, 3, 2, 2, 2, 2, 2 }; lut = cmsPipelineAlloc(DbgThread(), 8, 3); mpe = cmsStageAllocCLut16bitGranular(DbgThread(), Dimensions, 8, 3, NULL); cmsStageSampleCLut16bit(mpe, Sampler8D, NULL, 0); cmsPipelineInsertStage(lut, cmsAT_BEGIN, mpe); // Check accuracy if (!CheckOne8D(lut, 0, 0, 0, 0, 0, 0, 0, 0)) return 0; if (!CheckOne8D(lut, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff)) return 0; if (!CheckOne8D(lut, 0x8080, 0x8080, 0x8080, 0x8080, 0x1234, 0x1122, 0x0056, 0x0011)) return 0; if (!CheckOne8D(lut, 0x0000, 0xFE00, 0x80FF, 0x8888, 0x8078, 0x2233, 0x0088, 0x2020)) return 0; if (!CheckOne8D(lut, 0x1111, 0x2222, 0x3333, 0x4444, 0x1455, 0x3344, 0x1987, 0x4532)) return 0; if (!CheckOne8D(lut, 0x0000, 0x0012, 0x0013, 0x0014, 0x2333, 0x4455, 0x9988, 0x1200)) return 0; if (!CheckOne8D(lut, 0x3141, 0x1415, 0x1592, 0x9261, 0x4567, 0x5566, 0xfe56, 0x6666)) return 0; if (!CheckOne8D(lut, 0xFF00, 0xFF01, 0xFF12, 0xFF13, 0xF344, 0x6677, 0xbabe, 0xface)) return 0; cmsPipelineFree(lut); return 1; } // Colorimetric conversions ------------------------------------------------------------------------------------------------- // Lab to LCh and back should be performed at 1E-12 accuracy at least static cmsInt32Number CheckLab2LCh(void) { cmsInt32Number l, a, b; cmsFloat64Number dist, Max = 0; cmsCIELab Lab, Lab2; cmsCIELCh LCh; for (l=0; l <= 100; l += 10) { for (a=-128; a <= +128; a += 8) { for (b=-128; b <= 128; b += 8) { Lab.L = l; Lab.a = a; Lab.b = b; cmsLab2LCh(&LCh, &Lab); cmsLCh2Lab(&Lab2, &LCh); dist = cmsDeltaE(&Lab, &Lab2); if (dist > Max) Max = dist; } } } return Max < 1E-12; } // Lab to LCh and back should be performed at 1E-12 accuracy at least static cmsInt32Number CheckLab2XYZ(void) { cmsInt32Number l, a, b; cmsFloat64Number dist, Max = 0; cmsCIELab Lab, Lab2; cmsCIEXYZ XYZ; for (l=0; l <= 100; l += 10) { for (a=-128; a <= +128; a += 8) { for (b=-128; b <= 128; b += 8) { Lab.L = l; Lab.a = a; Lab.b = b; cmsLab2XYZ(NULL, &XYZ, &Lab); cmsXYZ2Lab(NULL, &Lab2, &XYZ); dist = cmsDeltaE(&Lab, &Lab2); if (dist > Max) Max = dist; } } } return Max < 1E-12; } // Lab to xyY and back should be performed at 1E-12 accuracy at least static cmsInt32Number CheckLab2xyY(void) { cmsInt32Number l, a, b; cmsFloat64Number dist, Max = 0; cmsCIELab Lab, Lab2; cmsCIEXYZ XYZ; cmsCIExyY xyY; for (l=0; l <= 100; l += 10) { for (a=-128; a <= +128; a += 8) { for (b=-128; b <= 128; b += 8) { Lab.L = l; Lab.a = a; Lab.b = b; cmsLab2XYZ(NULL, &XYZ, &Lab); cmsXYZ2xyY(&xyY, &XYZ); cmsxyY2XYZ(&XYZ, &xyY); cmsXYZ2Lab(NULL, &Lab2, &XYZ); dist = cmsDeltaE(&Lab, &Lab2); if (dist > Max) Max = dist; } } } return Max < 1E-12; } static cmsInt32Number CheckLabV2encoding(void) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[3], aw[3]; cmsCIELab Lab; n2=0; for (j=0; j < 65535; j++) { Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; cmsLabEncoded2FloatV2(&Lab, Inw); cmsFloat2LabEncodedV2(aw, &Lab); for (i=0; i < 3; i++) { if (aw[i] != j) { n2++; } } } return (n2 == 0); } static cmsInt32Number CheckLabV4encoding(void) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[3], aw[3]; cmsCIELab Lab; n2=0; for (j=0; j < 65535; j++) { Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; cmsLabEncoded2Float(&Lab, Inw); cmsFloat2LabEncoded(aw, &Lab); for (i=0; i < 3; i++) { if (aw[i] != j) { n2++; } } } return (n2 == 0); } // BlackBody ----------------------------------------------------------------------------------------------------- static cmsInt32Number CheckTemp2CHRM(void) { cmsInt32Number j; cmsFloat64Number d, v, Max = 0; cmsCIExyY White; for (j=4000; j < 25000; j++) { cmsWhitePointFromTemp(&White, j); if (!cmsTempFromWhitePoint(&v, &White)) return 0; d = fabs(v - j); if (d > Max) Max = d; } // 100 degree is the actual resolution return (Max < 100); } // Tone curves ----------------------------------------------------------------------------------------------------- static cmsInt32Number CheckGammaEstimation(cmsToneCurve* c, cmsFloat64Number g) { cmsFloat64Number est = cmsEstimateGamma(c, 0.001); SubTest("Gamma estimation"); if (fabs(est - g) > 0.001) return 0; return 1; } static cmsInt32Number CheckGammaCreation16(void) { cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0); cmsInt32Number i; cmsUInt16Number in, out; for (i=0; i < 0xffff; i++) { in = (cmsUInt16Number) i; out = cmsEvalToneCurve16(LinGamma, in); if (in != out) { Fail("(lin gamma): Must be %x, But is %x : ", in, out); cmsFreeToneCurve(LinGamma); return 0; } } if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; cmsFreeToneCurve(LinGamma); return 1; } static cmsInt32Number CheckGammaCreationFlt(void) { cmsToneCurve* LinGamma = cmsBuildGamma(DbgThread(), 1.0); cmsInt32Number i; cmsFloat32Number in, out; for (i=0; i < 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); out = cmsEvalToneCurveFloat(LinGamma, in); if (fabs(in - out) > (1/65535.0)) { Fail("(lin gamma): Must be %f, But is %f : ", in, out); cmsFreeToneCurve(LinGamma); return 0; } } if (!CheckGammaEstimation(LinGamma, 1.0)) return 0; cmsFreeToneCurve(LinGamma); return 1; } // Curve curves using a single power function // Error is given in 0..ffff counts static cmsInt32Number CheckGammaFloat(cmsFloat64Number g) { cmsToneCurve* Curve = cmsBuildGamma(DbgThread(), g); cmsInt32Number i; cmsFloat32Number in, out; cmsFloat64Number val, Err; MaxErr = 0.0; for (i=0; i < 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); out = cmsEvalToneCurveFloat(Curve, in); val = pow((cmsFloat64Number) in, g); Err = fabs( val - out); if (Err > MaxErr) MaxErr = Err; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); if (!CheckGammaEstimation(Curve, g)) return 0; cmsFreeToneCurve(Curve); return 1; } static cmsInt32Number CheckGamma18(void) { return CheckGammaFloat(1.8); } static cmsInt32Number CheckGamma22(void) { return CheckGammaFloat(2.2); } static cmsInt32Number CheckGamma30(void) { return CheckGammaFloat(3.0); } // Check table-based gamma functions static cmsInt32Number CheckGammaFloatTable(cmsFloat64Number g) { cmsFloat32Number Values[1025]; cmsToneCurve* Curve; cmsInt32Number i; cmsFloat32Number in, out; cmsFloat64Number val, Err; for (i=0; i <= 1024; i++) { in = (cmsFloat32Number) (i / 1024.0); Values[i] = powf(in, (float) g); } Curve = cmsBuildTabulatedToneCurveFloat(DbgThread(), 1025, Values); MaxErr = 0.0; for (i=0; i <= 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); out = cmsEvalToneCurveFloat(Curve, in); val = pow(in, g); Err = fabs(val - out); if (Err > MaxErr) MaxErr = Err; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); if (!CheckGammaEstimation(Curve, g)) return 0; cmsFreeToneCurve(Curve); return 1; } static cmsInt32Number CheckGamma18Table(void) { return CheckGammaFloatTable(1.8); } static cmsInt32Number CheckGamma22Table(void) { return CheckGammaFloatTable(2.2); } static cmsInt32Number CheckGamma30Table(void) { return CheckGammaFloatTable(3.0); } // Create a curve from a table (which is a pure gamma function) and check it against the pow function. static cmsInt32Number CheckGammaWordTable(cmsFloat64Number g) { cmsUInt16Number Values[1025]; cmsToneCurve* Curve; cmsInt32Number i; cmsFloat32Number in, out; cmsFloat64Number val, Err; for (i=0; i <= 1024; i++) { in = (cmsFloat32Number) (i / 1024.0); Values[i] = (cmsUInt16Number) floor(pow(in, g) * 65535.0 + 0.5); } Curve = cmsBuildTabulatedToneCurve16(DbgThread(), 1025, Values); MaxErr = 0.0; for (i=0; i <= 0xffff; i++) { in = (cmsFloat32Number) (i / 65535.0); out = cmsEvalToneCurveFloat(Curve, in); val = pow(in, g); Err = fabs(val - out); if (Err > MaxErr) MaxErr = Err; } if (MaxErr > 0) printf("|Err|<%lf ", MaxErr * 65535.0); if (!CheckGammaEstimation(Curve, g)) return 0; cmsFreeToneCurve(Curve); return 1; } static cmsInt32Number CheckGamma18TableWord(void) { return CheckGammaWordTable(1.8); } static cmsInt32Number CheckGamma22TableWord(void) { return CheckGammaWordTable(2.2); } static cmsInt32Number CheckGamma30TableWord(void) { return CheckGammaWordTable(3.0); } // Curve joining test. Joining two high-gamma of 3.0 curves should // give something like linear static cmsInt32Number CheckJointCurves(void) { cmsToneCurve *Forward, *Reverse, *Result; cmsBool rc; Forward = cmsBuildGamma(DbgThread(), 3.0); Reverse = cmsBuildGamma(DbgThread(), 3.0); Result = cmsJoinToneCurve(DbgThread(), Forward, Reverse, 256); cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); cmsFreeToneCurve(Result); if (!rc) Fail("Joining same curve twice does not result in a linear ramp"); return rc; } // Create a gamma curve by cheating the table static cmsToneCurve* GammaTableLinear(cmsInt32Number nEntries, cmsBool Dir) { cmsInt32Number i; cmsToneCurve* g = cmsBuildTabulatedToneCurve16(DbgThread(), nEntries, NULL); for (i=0; i < nEntries; i++) { cmsInt32Number v = _cmsQuantizeVal(i, nEntries); if (Dir) g->Table16[i] = (cmsUInt16Number) v; else g->Table16[i] = (cmsUInt16Number) (0xFFFF - v); } return g; } static cmsInt32Number CheckJointCurvesDescending(void) { cmsToneCurve *Forward, *Reverse, *Result; cmsInt32Number i, rc; Forward = cmsBuildGamma(DbgThread(), 2.2); // Fake the curve to be table-based for (i=0; i < 4096; i++) Forward ->Table16[i] = 0xffff - Forward->Table16[i]; Forward ->Segments[0].Type = 0; Reverse = cmsReverseToneCurve(Forward); Result = cmsJoinToneCurve(DbgThread(), Reverse, Reverse, 256); cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); cmsFreeToneCurve(Result); return rc; } static cmsInt32Number CheckFToneCurvePoint(cmsToneCurve* c, cmsUInt16Number Point, cmsInt32Number Value) { cmsInt32Number Result; Result = cmsEvalToneCurve16(c, Point); return (abs(Value - Result) < 2); } static cmsInt32Number CheckReverseDegenerated(void) { cmsToneCurve* p, *g; cmsUInt16Number Tab[16]; Tab[0] = 0; Tab[1] = 0; Tab[2] = 0; Tab[3] = 0; Tab[4] = 0; Tab[5] = 0x5555; Tab[6] = 0x6666; Tab[7] = 0x7777; Tab[8] = 0x8888; Tab[9] = 0x9999; Tab[10]= 0xffff; Tab[11]= 0xffff; Tab[12]= 0xffff; Tab[13]= 0xffff; Tab[14]= 0xffff; Tab[15]= 0xffff; p = cmsBuildTabulatedToneCurve16(DbgThread(), 16, Tab); g = cmsReverseToneCurve(p); // Now let's check some points if (!CheckFToneCurvePoint(g, 0x5555, 0x5555)) return 0; if (!CheckFToneCurvePoint(g, 0x7777, 0x7777)) return 0; // First point for zero if (!CheckFToneCurvePoint(g, 0x0000, 0x4444)) return 0; // Last point if (!CheckFToneCurvePoint(g, 0xFFFF, 0xFFFF)) return 0; cmsFreeToneCurve(p); cmsFreeToneCurve(g); return 1; } // Build a parametric sRGB-like curve static cmsToneCurve* Build_sRGBGamma(void) { cmsFloat64Number Parameters[5]; Parameters[0] = 2.4; Parameters[1] = 1. / 1.055; Parameters[2] = 0.055 / 1.055; Parameters[3] = 1. / 12.92; Parameters[4] = 0.04045; // d return cmsBuildParametricToneCurve(DbgThread(), 4, Parameters); } // Join two gamma tables in floating point format. Result should be a straight line static cmsToneCurve* CombineGammaFloat(cmsToneCurve* g1, cmsToneCurve* g2) { cmsUInt16Number Tab[256]; cmsFloat32Number f; cmsInt32Number i; for (i=0; i < 256; i++) { f = (cmsFloat32Number) i / 255.0F; f = cmsEvalToneCurveFloat(g2, cmsEvalToneCurveFloat(g1, f)); Tab[i] = (cmsUInt16Number) floor(f * 65535.0 + 0.5); } return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab); } // Same of anterior, but using quantized tables static cmsToneCurve* CombineGamma16(cmsToneCurve* g1, cmsToneCurve* g2) { cmsUInt16Number Tab[256]; cmsInt32Number i; for (i=0; i < 256; i++) { cmsUInt16Number wValIn; wValIn = _cmsQuantizeVal(i, 256); Tab[i] = cmsEvalToneCurve16(g2, cmsEvalToneCurve16(g1, wValIn)); } return cmsBuildTabulatedToneCurve16(DbgThread(), 256, Tab); } static cmsInt32Number CheckJointFloatCurves_sRGB(void) { cmsToneCurve *Forward, *Reverse, *Result; cmsBool rc; Forward = Build_sRGBGamma(); Reverse = cmsReverseToneCurve(Forward); Result = CombineGammaFloat(Forward, Reverse); cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); cmsFreeToneCurve(Result); return rc; } static cmsInt32Number CheckJoint16Curves_sRGB(void) { cmsToneCurve *Forward, *Reverse, *Result; cmsBool rc; Forward = Build_sRGBGamma(); Reverse = cmsReverseToneCurve(Forward); Result = CombineGamma16(Forward, Reverse); cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); cmsFreeToneCurve(Result); return rc; } // sigmoidal curve f(x) = (1-x^g) ^(1/g) static cmsInt32Number CheckJointCurvesSShaped(void) { cmsFloat64Number p = 3.2; cmsToneCurve *Forward, *Reverse, *Result; cmsInt32Number rc; Forward = cmsBuildParametricToneCurve(DbgThread(), 108, &p); Reverse = cmsReverseToneCurve(Forward); Result = cmsJoinToneCurve(DbgThread(), Forward, Forward, 4096); cmsFreeToneCurve(Forward); cmsFreeToneCurve(Reverse); rc = cmsIsToneCurveLinear(Result); cmsFreeToneCurve(Result); return rc; } // -------------------------------------------------------------------------------------------------------- // Implementation of some tone curve functions static cmsFloat32Number Gamma(cmsFloat32Number x, const cmsFloat64Number Params[]) { return (cmsFloat32Number) pow(x, Params[0]); } static cmsFloat32Number CIE122(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number e, Val; if (x >= -Params[2] / Params[1]) { e = Params[1]*x + Params[2]; if (e > 0) Val = pow(e, Params[0]); else Val = 0; } else Val = 0; return (cmsFloat32Number) Val; } static cmsFloat32Number IEC61966_3(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number e, Val; if (x >= -Params[2] / Params[1]) { e = Params[1]*x + Params[2]; if (e > 0) Val = pow(e, Params[0]) + Params[3]; else Val = 0; } else Val = Params[3]; return (cmsFloat32Number) Val; } static cmsFloat32Number IEC61966_21(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number e, Val; if (x >= Params[4]) { e = Params[1]*x + Params[2]; if (e > 0) Val = pow(e, Params[0]); else Val = 0; } else Val = x * Params[3]; return (cmsFloat32Number) Val; } static cmsFloat32Number param_5(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number e, Val; // Y = (aX + b)^Gamma + e | X >= d // Y = cX + f | else if (x >= Params[4]) { e = Params[1]*x + Params[2]; if (e > 0) Val = pow(e, Params[0]) + Params[5]; else Val = 0; } else Val = x*Params[3] + Params[6]; return (cmsFloat32Number) Val; } static cmsFloat32Number param_6(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number e, Val; e = Params[1]*x + Params[2]; if (e > 0) Val = pow(e, Params[0]) + Params[3]; else Val = 0; return (cmsFloat32Number) Val; } static cmsFloat32Number param_7(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number Val; Val = Params[1]*log10(Params[2] * pow(x, Params[0]) + Params[3]) + Params[4]; return (cmsFloat32Number) Val; } static cmsFloat32Number param_8(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number Val; Val = (Params[0] * pow(Params[1], Params[2] * x + Params[3]) + Params[4]); return (cmsFloat32Number) Val; } static cmsFloat32Number sigmoidal(cmsFloat32Number x, const cmsFloat64Number Params[]) { cmsFloat64Number Val; Val = pow(1.0 - pow(1 - x, 1/Params[0]), 1/Params[0]); return (cmsFloat32Number) Val; } static cmsBool CheckSingleParametric(const char* Name, dblfnptr fn, cmsInt32Number Type, const cmsFloat64Number Params[]) { cmsInt32Number i; cmsToneCurve* tc; cmsToneCurve* tc_1; char InverseText[256]; tc = cmsBuildParametricToneCurve(DbgThread(), Type, Params); tc_1 = cmsBuildParametricToneCurve(DbgThread(), -Type, Params); for (i=0; i <= 1000; i++) { cmsFloat32Number x = (cmsFloat32Number) i / 1000; cmsFloat32Number y_fn, y_param, x_param, y_param2; y_fn = fn(x, Params); y_param = cmsEvalToneCurveFloat(tc, x); x_param = cmsEvalToneCurveFloat(tc_1, y_param); y_param2 = fn(x_param, Params); if (!IsGoodVal(Name, y_fn, y_param, FIXED_PRECISION_15_16)) goto Error; sprintf(InverseText, "Inverse %s", Name); if (!IsGoodVal(InverseText, y_fn, y_param2, FIXED_PRECISION_15_16)) goto Error; } cmsFreeToneCurve(tc); cmsFreeToneCurve(tc_1); return TRUE; Error: cmsFreeToneCurve(tc); cmsFreeToneCurve(tc_1); return FALSE; } // Check against some known values static cmsInt32Number CheckParametricToneCurves(void) { cmsFloat64Number Params[10]; // 1) X = Y ^ Gamma Params[0] = 2.2; if (!CheckSingleParametric("Gamma", Gamma, 1, Params)) return 0; // 2) CIE 122-1966 // Y = (aX + b)^Gamma | X >= -b/a // Y = 0 | else Params[0] = 2.2; Params[1] = 1.5; Params[2] = -0.5; if (!CheckSingleParametric("CIE122-1966", CIE122, 2, Params)) return 0; // 3) IEC 61966-3 // Y = (aX + b)^Gamma | X <= -b/a // Y = c | else Params[0] = 2.2; Params[1] = 1.5; Params[2] = -0.5; Params[3] = 0.3; if (!CheckSingleParametric("IEC 61966-3", IEC61966_3, 3, Params)) return 0; // 4) IEC 61966-2.1 (sRGB) // Y = (aX + b)^Gamma | X >= d // Y = cX | X < d Params[0] = 2.4; Params[1] = 1. / 1.055; Params[2] = 0.055 / 1.055; Params[3] = 1. / 12.92; Params[4] = 0.04045; if (!CheckSingleParametric("IEC 61966-2.1", IEC61966_21, 4, Params)) return 0; // 5) Y = (aX + b)^Gamma + e | X >= d // Y = cX + f | else Params[0] = 2.2; Params[1] = 0.7; Params[2] = 0.2; Params[3] = 0.3; Params[4] = 0.1; Params[5] = 0.5; Params[6] = 0.2; if (!CheckSingleParametric("param_5", param_5, 5, Params)) return 0; // 6) Y = (aX + b) ^ Gamma + c Params[0] = 2.2; Params[1] = 0.7; Params[2] = 0.2; Params[3] = 0.3; if (!CheckSingleParametric("param_6", param_6, 6, Params)) return 0; // 7) Y = a * log (b * X^Gamma + c) + d Params[0] = 2.2; Params[1] = 0.9; Params[2] = 0.9; Params[3] = 0.02; Params[4] = 0.1; if (!CheckSingleParametric("param_7", param_7, 7, Params)) return 0; // 8) Y = a * b ^ (c*X+d) + e Params[0] = 0.9; Params[1] = 0.9; Params[2] = 1.02; Params[3] = 0.1; Params[4] = 0.2; if (!CheckSingleParametric("param_8", param_8, 8, Params)) return 0; // 108: S-Shaped: (1 - (1-x)^1/g)^1/g Params[0] = 1.9; if (!CheckSingleParametric("sigmoidal", sigmoidal, 108, Params)) return 0; // All OK return 1; } // LUT checks ------------------------------------------------------------------------------ static cmsInt32Number CheckLUTcreation(void) { cmsPipeline* lut; cmsPipeline* lut2; cmsInt32Number n1, n2; lut = cmsPipelineAlloc(DbgThread(), 1, 1); n1 = cmsPipelineStageCount(lut); lut2 = cmsPipelineDup(lut); n2 = cmsPipelineStageCount(lut2); cmsPipelineFree(lut); cmsPipelineFree(lut2); return (n1 == 0) && (n2 == 0); } // Create a MPE for a identity matrix static void AddIdentityMatrix(cmsPipeline* lut) { const cmsFloat64Number Identity[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }; cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocMatrix(DbgThread(), 3, 3, Identity, NULL)); } // Create a MPE for identity cmsFloat32Number CLUT static void AddIdentityCLUTfloat(cmsPipeline* lut) { const cmsFloat32Number Table[] = { 0, 0, 0, 0, 0, 1.0, 0, 1.0, 0, 0, 1.0, 1.0, 1.0, 0, 0, 1.0, 0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0 }; cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocCLutFloat(DbgThread(), 2, 3, 3, Table)); } // Create a MPE for identity cmsFloat32Number CLUT static void AddIdentityCLUT16(cmsPipeline* lut) { const cmsUInt16Number Table[] = { 0, 0, 0, 0, 0, 0xffff, 0, 0xffff, 0, 0, 0xffff, 0xffff, 0xffff, 0, 0, 0xffff, 0, 0xffff, 0xffff, 0xffff, 0, 0xffff, 0xffff, 0xffff }; cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocCLut16bit(DbgThread(), 2, 3, 3, Table)); } // Create a 3 fn identity curves static void Add3GammaCurves(cmsPipeline* lut, cmsFloat64Number Curve) { cmsToneCurve* id = cmsBuildGamma(DbgThread(), Curve); cmsToneCurve* id3[3]; id3[0] = id; id3[1] = id; id3[2] = id; cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, id3)); cmsFreeToneCurve(id); } static cmsInt32Number CheckFloatLUT(cmsPipeline* lut) { cmsInt32Number n1, i, j; cmsFloat32Number Inf[3], Outf[3]; n1=0; for (j=0; j < 65535; j++) { cmsInt32Number af[3]; Inf[0] = Inf[1] = Inf[2] = (cmsFloat32Number) j / 65535.0F; cmsPipelineEvalFloat(Inf, Outf, lut); af[0] = (cmsInt32Number) floor(Outf[0]*65535.0 + 0.5); af[1] = (cmsInt32Number) floor(Outf[1]*65535.0 + 0.5); af[2] = (cmsInt32Number) floor(Outf[2]*65535.0 + 0.5); for (i=0; i < 3; i++) { if (af[i] != j) { n1++; } } } return (n1 == 0); } static cmsInt32Number Check16LUT(cmsPipeline* lut) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[3], Outw[3]; n2=0; for (j=0; j < 65535; j++) { cmsInt32Number aw[3]; Inw[0] = Inw[1] = Inw[2] = (cmsUInt16Number) j; cmsPipelineEval16(Inw, Outw, lut); aw[0] = Outw[0]; aw[1] = Outw[1]; aw[2] = Outw[2]; for (i=0; i < 3; i++) { if (aw[i] != j) { n2++; } } } return (n2 == 0); } // Check any LUT that is linear static cmsInt32Number CheckStagesLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) { cmsInt32Number nInpChans, nOutpChans, nStages; nInpChans = cmsPipelineInputChannels(lut); nOutpChans = cmsPipelineOutputChannels(lut); nStages = cmsPipelineStageCount(lut); return (nInpChans == 3) && (nOutpChans == 3) && (nStages == ExpectedStages); } static cmsInt32Number CheckFullLUT(cmsPipeline* lut, cmsInt32Number ExpectedStages) { cmsInt32Number rc = CheckStagesLUT(lut, ExpectedStages) && Check16LUT(lut) && CheckFloatLUT(lut); cmsPipelineFree(lut); return rc; } static cmsInt32Number Check1StageLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); return CheckFullLUT(lut, 1); } static cmsInt32Number Check2StageLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUTfloat(lut); return CheckFullLUT(lut, 2); } static cmsInt32Number Check2Stage16LUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUT16(lut); return CheckFullLUT(lut, 2); } static cmsInt32Number Check3StageLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUTfloat(lut); Add3GammaCurves(lut, 1.0); return CheckFullLUT(lut, 3); } static cmsInt32Number Check3Stage16LUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUT16(lut); Add3GammaCurves(lut, 1.0); return CheckFullLUT(lut, 3); } static cmsInt32Number Check4StageLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUTfloat(lut); Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); return CheckFullLUT(lut, 4); } static cmsInt32Number Check4Stage16LUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUT16(lut); Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); return CheckFullLUT(lut, 4); } static cmsInt32Number Check5StageLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUTfloat(lut); Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); return CheckFullLUT(lut, 5); } static cmsInt32Number Check5Stage16LUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); AddIdentityCLUT16(lut); Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); return CheckFullLUT(lut, 5); } static cmsInt32Number Check6StageLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); AddIdentityCLUTfloat(lut); Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); return CheckFullLUT(lut, 6); } static cmsInt32Number Check6Stage16LUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); AddIdentityCLUT16(lut); Add3GammaCurves(lut, 1.0); AddIdentityMatrix(lut); Add3GammaCurves(lut, 1.0); return CheckFullLUT(lut, 6); } static cmsInt32Number CheckLab2LabLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); cmsInt32Number rc; cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2); cmsPipelineFree(lut); return rc; } static cmsInt32Number CheckXYZ2XYZLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); cmsInt32Number rc; cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 2); cmsPipelineFree(lut); return rc; } static cmsInt32Number CheckLab2LabMatLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); cmsInt32Number rc; cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocLab2XYZ(DbgThread())); AddIdentityMatrix(lut); cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocXYZ2Lab(DbgThread())); rc = CheckFloatLUT(lut) && CheckStagesLUT(lut, 3); cmsPipelineFree(lut); return rc; } static cmsInt32Number CheckNamedColorLUT(void) { cmsPipeline* lut = cmsPipelineAlloc(DbgThread(), 3, 3); cmsNAMEDCOLORLIST* nc; cmsInt32Number i,j, rc = 1, n2; cmsUInt16Number PCS[3]; cmsUInt16Number Colorant[cmsMAXCHANNELS]; char Name[255]; cmsUInt16Number Inw[3], Outw[3]; nc = cmsAllocNamedColorList(DbgThread(), 256, 3, "pre", "post"); if (nc == NULL) return 0; for (i=0; i < 256; i++) { PCS[0] = PCS[1] = PCS[2] = (cmsUInt16Number) i; Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) i; sprintf(Name, "#%d", i); if (!cmsAppendNamedColor(nc, Name, PCS, Colorant)) { rc = 0; break; } } cmsPipelineInsertStage(lut, cmsAT_END, _cmsStageAllocNamedColor(nc, FALSE)); cmsFreeNamedColorList(nc); if (rc == 0) return 0; n2=0; for (j=0; j < 256; j++) { Inw[0] = (cmsUInt16Number) j; cmsPipelineEval16(Inw, Outw, lut); for (i=0; i < 3; i++) { if (Outw[i] != j) { n2++; } } } cmsPipelineFree(lut); return (n2 == 0); } // -------------------------------------------------------------------------------------------- // A lightweight test of multilocalized unicode structures. static cmsInt32Number CheckMLU(void) { cmsMLU* mlu, *mlu2, *mlu3; char Buffer[256], Buffer2[256]; cmsInt32Number rc = 1; cmsInt32Number i; cmsHPROFILE h= NULL; // Allocate a MLU structure, no preferred size mlu = cmsMLUalloc(DbgThread(), 0); // Add some localizations cmsMLUsetWide(mlu, "en", "US", L"Hello, world"); cmsMLUsetWide(mlu, "es", "ES", L"Hola, mundo"); cmsMLUsetWide(mlu, "fr", "FR", L"Bonjour, le monde"); cmsMLUsetWide(mlu, "ca", "CA", L"Hola, mon"); // Check the returned string for each language cmsMLUgetASCII(mlu, "en", "US", Buffer, 256); if (strcmp(Buffer, "Hello, world") != 0) rc = 0; cmsMLUgetASCII(mlu, "es", "ES", Buffer, 256); if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; cmsMLUgetASCII(mlu, "fr", "FR", Buffer, 256); if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; cmsMLUgetASCII(mlu, "ca", "CA", Buffer, 256); if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; if (rc == 0) Fail("Unexpected string '%s'", Buffer); // So far, so good. cmsMLUfree(mlu); // Now for performance, allocate an empty struct mlu = cmsMLUalloc(DbgThread(), 0); // Fill it with several thousands of different lenguages for (i=0; i < 4096; i++) { char Lang[3]; Lang[0] = (char) (i % 255); Lang[1] = (char) (i / 255); Lang[2] = 0; sprintf(Buffer, "String #%i", i); cmsMLUsetASCII(mlu, Lang, Lang, Buffer); } // Duplicate it mlu2 = cmsMLUdup(mlu); // Get rid of original cmsMLUfree(mlu); // Check all is still in place for (i=0; i < 4096; i++) { char Lang[3]; Lang[0] = (char)(i % 255); Lang[1] = (char)(i / 255); Lang[2] = 0; cmsMLUgetASCII(mlu2, Lang, Lang, Buffer2, 256); sprintf(Buffer, "String #%i", i); if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } } if (rc == 0) Fail("Unexpected string '%s'", Buffer2); // Check profile IO h = cmsOpenProfileFromFileTHR(DbgThread(), "mlucheck.icc", "w"); cmsSetProfileVersion(h, 4.3); cmsWriteTag(h, cmsSigProfileDescriptionTag, mlu2); cmsCloseProfile(h); cmsMLUfree(mlu2); h = cmsOpenProfileFromFileTHR(DbgThread(), "mlucheck.icc", "r"); mlu3 = (cmsMLU *) cmsReadTag(h, cmsSigProfileDescriptionTag); if (mlu3 == NULL) { Fail("Profile didn't get the MLU\n"); rc = 0; goto Error; } // Check all is still in place for (i=0; i < 4096; i++) { char Lang[3]; Lang[0] = (char) (i % 255); Lang[1] = (char) (i / 255); Lang[2] = 0; cmsMLUgetASCII(mlu3, Lang, Lang, Buffer2, 256); sprintf(Buffer, "String #%i", i); if (strcmp(Buffer, Buffer2) != 0) { rc = 0; break; } } if (rc == 0) Fail("Unexpected string '%s'", Buffer2); Error: if (h != NULL) cmsCloseProfile(h); remove("mlucheck.icc"); return rc; } // A lightweight test of named color structures. static cmsInt32Number CheckNamedColorList(void) { cmsNAMEDCOLORLIST* nc = NULL, *nc2; cmsInt32Number i, j, rc=1; char Name[cmsMAX_PATH]; cmsUInt16Number PCS[3]; cmsUInt16Number Colorant[cmsMAXCHANNELS]; char CheckName[cmsMAX_PATH]; cmsUInt16Number CheckPCS[3]; cmsUInt16Number CheckColorant[cmsMAXCHANNELS]; cmsHPROFILE h; nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix"); if (nc == NULL) return 0; for (i=0; i < 4096; i++) { PCS[0] = PCS[1] = PCS[2] = (cmsUInt16Number) i; Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (4096 - i); sprintf(Name, "#%d", i); if (!cmsAppendNamedColor(nc, Name, PCS, Colorant)) { rc = 0; break; } } for (i=0; i < 4096; i++) { CheckPCS[0] = CheckPCS[1] = CheckPCS[2] = (cmsUInt16Number) i; CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i); sprintf(CheckName, "#%d", i); if (!cmsNamedColorInfo(nc, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } for (j=0; j < 3; j++) { if (CheckPCS[j] != PCS[j]) { rc = 0; Fail("Invalid PCS"); goto Error; } } for (j=0; j < 4; j++) { if (CheckColorant[j] != Colorant[j]) { rc = 0; Fail("Invalid Colorant"); goto Error; }; } if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; }; } h = cmsOpenProfileFromFileTHR(DbgThread(), "namedcol.icc", "w"); if (h == NULL) return 0; if (!cmsWriteTag(h, cmsSigNamedColor2Tag, nc)) return 0; cmsCloseProfile(h); cmsFreeNamedColorList(nc); nc = NULL; h = cmsOpenProfileFromFileTHR(DbgThread(), "namedcol.icc", "r"); nc2 = (cmsNAMEDCOLORLIST *) cmsReadTag(h, cmsSigNamedColor2Tag); if (cmsNamedColorCount(nc2) != 4096) { rc = 0; Fail("Invalid count"); goto Error; } i = cmsNamedColorIndex(nc2, "#123"); if (i != 123) { rc = 0; Fail("Invalid index"); goto Error; } for (i=0; i < 4096; i++) { CheckPCS[0] = CheckPCS[1] = CheckPCS[2] = (cmsUInt16Number) i; CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (4096 - i); sprintf(CheckName, "#%d", i); if (!cmsNamedColorInfo(nc2, i, Name, NULL, NULL, PCS, Colorant)) { rc = 0; goto Error; } for (j=0; j < 3; j++) { if (CheckPCS[j] != PCS[j]) { rc = 0; Fail("Invalid PCS"); goto Error; } } for (j=0; j < 4; j++) { if (CheckColorant[j] != Colorant[j]) { rc = 0; Fail("Invalid Colorant"); goto Error; }; } if (strcmp(Name, CheckName) != 0) {rc = 0; Fail("Invalid Name"); goto Error; }; } cmsCloseProfile(h); remove("namedcol.icc"); Error: if (nc != NULL) cmsFreeNamedColorList(nc); return rc; } // ---------------------------------------------------------------------------------------------------------- // Formatters static cmsBool FormatterFailed; static void CheckSingleFormatter16(cmsContext id, cmsUInt32Number Type, const char* Text) { cmsUInt16Number Values[cmsMAXCHANNELS]; cmsUInt8Number Buffer[1024]; cmsFormatter f, b; cmsInt32Number i, j, nChannels, bytes; _cmsTRANSFORM info; // Already failed? if (FormatterFailed) return; memset(&info, 0, sizeof(info)); info.OutputFormat = info.InputFormat = Type; // Go forth and back f = _cmsGetFormatter(id, Type, cmsFormatterInput, CMS_PACK_FLAGS_16BITS); b = _cmsGetFormatter(id, Type, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS); if (f.Fmt16 == NULL || b.Fmt16 == NULL) { Fail("no formatter for %s", Text); FormatterFailed = TRUE; // Useful for debug f = _cmsGetFormatter(id, Type, cmsFormatterInput, CMS_PACK_FLAGS_16BITS); b = _cmsGetFormatter(id, Type, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS); return; } nChannels = T_CHANNELS(Type); bytes = T_BYTES(Type); for (j=0; j < 5; j++) { for (i=0; i < nChannels; i++) { Values[i] = (cmsUInt16Number) (i+j); // For 8-bit if (bytes == 1) Values[i] <<= 8; } b.Fmt16(&info, Values, Buffer, 2); memset(Values, 0, sizeof(Values)); f.Fmt16(&info, Values, Buffer, 2); for (i=0; i < nChannels; i++) { if (bytes == 1) Values[i] >>= 8; if (Values[i] != i+j) { Fail("%s failed", Text); FormatterFailed = TRUE; // Useful for debug for (i=0; i < nChannels; i++) { Values[i] = (cmsUInt16Number) (i+j); // For 8-bit if (bytes == 1) Values[i] <<= 8; } b.Fmt16(&info, Values, Buffer, 1); f.Fmt16(&info, Values, Buffer, 1); return; } } } } #define C(a) CheckSingleFormatter16(0, a, #a) // Check all formatters static cmsInt32Number CheckFormatters16(void) { FormatterFailed = FALSE; C( TYPE_GRAY_8 ); C( TYPE_GRAY_8_REV ); C( TYPE_GRAY_16 ); C( TYPE_GRAY_16_REV ); C( TYPE_GRAY_16_SE ); C( TYPE_GRAYA_8 ); C( TYPE_GRAYA_16 ); C( TYPE_GRAYA_16_SE ); C( TYPE_GRAYA_8_PLANAR ); C( TYPE_GRAYA_16_PLANAR ); C( TYPE_RGB_8 ); C( TYPE_RGB_8_PLANAR ); C( TYPE_BGR_8 ); C( TYPE_BGR_8_PLANAR ); C( TYPE_RGB_16 ); C( TYPE_RGB_16_PLANAR ); C( TYPE_RGB_16_SE ); C( TYPE_BGR_16 ); C( TYPE_BGR_16_PLANAR ); C( TYPE_BGR_16_SE ); C( TYPE_RGBA_8 ); C( TYPE_RGBA_8_PLANAR ); C( TYPE_RGBA_16 ); C( TYPE_RGBA_16_PLANAR ); C( TYPE_RGBA_16_SE ); C( TYPE_ARGB_8 ); C( TYPE_ARGB_8_PLANAR ); C( TYPE_ARGB_16 ); C( TYPE_ABGR_8 ); C( TYPE_ABGR_8_PLANAR ); C( TYPE_ABGR_16 ); C( TYPE_ABGR_16_PLANAR ); C( TYPE_ABGR_16_SE ); C( TYPE_BGRA_8 ); C( TYPE_BGRA_8_PLANAR ); C( TYPE_BGRA_16 ); C( TYPE_BGRA_16_SE ); C( TYPE_CMY_8 ); C( TYPE_CMY_8_PLANAR ); C( TYPE_CMY_16 ); C( TYPE_CMY_16_PLANAR ); C( TYPE_CMY_16_SE ); C( TYPE_CMYK_8 ); C( TYPE_CMYKA_8 ); C( TYPE_CMYK_8_REV ); C( TYPE_YUVK_8 ); C( TYPE_CMYK_8_PLANAR ); C( TYPE_CMYK_16 ); C( TYPE_CMYK_16_REV ); C( TYPE_YUVK_16 ); C( TYPE_CMYK_16_PLANAR ); C( TYPE_CMYK_16_SE ); C( TYPE_KYMC_8 ); C( TYPE_KYMC_16 ); C( TYPE_KYMC_16_SE ); C( TYPE_KCMY_8 ); C( TYPE_KCMY_8_REV ); C( TYPE_KCMY_16 ); C( TYPE_KCMY_16_REV ); C( TYPE_KCMY_16_SE ); C( TYPE_CMYK5_8 ); C( TYPE_CMYK5_16 ); C( TYPE_CMYK5_16_SE ); C( TYPE_KYMC5_8 ); C( TYPE_KYMC5_16 ); C( TYPE_KYMC5_16_SE ); C( TYPE_CMYK6_8 ); C( TYPE_CMYK6_8_PLANAR ); C( TYPE_CMYK6_16 ); C( TYPE_CMYK6_16_PLANAR ); C( TYPE_CMYK6_16_SE ); C( TYPE_CMYK7_8 ); C( TYPE_CMYK7_16 ); C( TYPE_CMYK7_16_SE ); C( TYPE_KYMC7_8 ); C( TYPE_KYMC7_16 ); C( TYPE_KYMC7_16_SE ); C( TYPE_CMYK8_8 ); C( TYPE_CMYK8_16 ); C( TYPE_CMYK8_16_SE ); C( TYPE_KYMC8_8 ); C( TYPE_KYMC8_16 ); C( TYPE_KYMC8_16_SE ); C( TYPE_CMYK9_8 ); C( TYPE_CMYK9_16 ); C( TYPE_CMYK9_16_SE ); C( TYPE_KYMC9_8 ); C( TYPE_KYMC9_16 ); C( TYPE_KYMC9_16_SE ); C( TYPE_CMYK10_8 ); C( TYPE_CMYK10_16 ); C( TYPE_CMYK10_16_SE ); C( TYPE_KYMC10_8 ); C( TYPE_KYMC10_16 ); C( TYPE_KYMC10_16_SE ); C( TYPE_CMYK11_8 ); C( TYPE_CMYK11_16 ); C( TYPE_CMYK11_16_SE ); C( TYPE_KYMC11_8 ); C( TYPE_KYMC11_16 ); C( TYPE_KYMC11_16_SE ); C( TYPE_CMYK12_8 ); C( TYPE_CMYK12_16 ); C( TYPE_CMYK12_16_SE ); C( TYPE_KYMC12_8 ); C( TYPE_KYMC12_16 ); C( TYPE_KYMC12_16_SE ); C( TYPE_XYZ_16 ); C( TYPE_Lab_8 ); C( TYPE_ALab_8 ); C( TYPE_Lab_16 ); C( TYPE_Yxy_16 ); C( TYPE_YCbCr_8 ); C( TYPE_YCbCr_8_PLANAR ); C( TYPE_YCbCr_16 ); C( TYPE_YCbCr_16_PLANAR ); C( TYPE_YCbCr_16_SE ); C( TYPE_YUV_8 ); C( TYPE_YUV_8_PLANAR ); C( TYPE_YUV_16 ); C( TYPE_YUV_16_PLANAR ); C( TYPE_YUV_16_SE ); C( TYPE_HLS_8 ); C( TYPE_HLS_8_PLANAR ); C( TYPE_HLS_16 ); C( TYPE_HLS_16_PLANAR ); C( TYPE_HLS_16_SE ); C( TYPE_HSV_8 ); C( TYPE_HSV_8_PLANAR ); C( TYPE_HSV_16 ); C( TYPE_HSV_16_PLANAR ); C( TYPE_HSV_16_SE ); C( TYPE_XYZ_FLT ); C( TYPE_Lab_FLT ); C( TYPE_GRAY_FLT ); C( TYPE_RGB_FLT ); C( TYPE_BGR_FLT ); C( TYPE_CMYK_FLT ); C( TYPE_LabA_FLT ); C( TYPE_RGBA_FLT ); C( TYPE_ARGB_FLT ); C( TYPE_BGRA_FLT ); C( TYPE_ABGR_FLT ); C( TYPE_XYZ_DBL ); C( TYPE_Lab_DBL ); C( TYPE_GRAY_DBL ); C( TYPE_RGB_DBL ); C( TYPE_BGR_DBL ); C( TYPE_CMYK_DBL ); C( TYPE_LabV2_8 ); C( TYPE_ALabV2_8 ); C( TYPE_LabV2_16 ); #ifndef CMS_NO_HALF_SUPPORT C( TYPE_GRAY_HALF_FLT ); C( TYPE_RGB_HALF_FLT ); C( TYPE_CMYK_HALF_FLT ); C( TYPE_RGBA_HALF_FLT ); C( TYPE_RGBA_HALF_FLT ); C( TYPE_ARGB_HALF_FLT ); C( TYPE_BGR_HALF_FLT ); C( TYPE_BGRA_HALF_FLT ); C( TYPE_ABGR_HALF_FLT ); #endif return FormatterFailed == 0 ? 1 : 0; } #undef C static void CheckSingleFormatterFloat(cmsUInt32Number Type, const char* Text) { cmsFloat32Number Values[cmsMAXCHANNELS]; cmsUInt8Number Buffer[1024]; cmsFormatter f, b; cmsInt32Number i, j, nChannels; _cmsTRANSFORM info; // Already failed? if (FormatterFailed) return; memset(&info, 0, sizeof(info)); info.OutputFormat = info.InputFormat = Type; // Go forth and back f = _cmsGetFormatter(0, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); b = _cmsGetFormatter(0, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); if (f.FmtFloat == NULL || b.FmtFloat == NULL) { Fail("no formatter for %s", Text); FormatterFailed = TRUE; // Useful for debug f = _cmsGetFormatter(0, Type, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT); b = _cmsGetFormatter(0, Type, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT); return; } nChannels = T_CHANNELS(Type); for (j=0; j < 5; j++) { for (i=0; i < nChannels; i++) { Values[i] = (cmsFloat32Number) (i+j); } b.FmtFloat(&info, Values, Buffer, 1); memset(Values, 0, sizeof(Values)); f.FmtFloat(&info, Values, Buffer, 1); for (i=0; i < nChannels; i++) { cmsFloat64Number delta = fabs(Values[i] - ( i+j)); if (delta > 0.000000001) { Fail("%s failed", Text); FormatterFailed = TRUE; // Useful for debug for (i=0; i < nChannels; i++) { Values[i] = (cmsFloat32Number) (i+j); } b.FmtFloat(&info, Values, Buffer, 1); f.FmtFloat(&info, Values, Buffer, 1); return; } } } } #define C(a) CheckSingleFormatterFloat(a, #a) static cmsInt32Number CheckFormattersFloat(void) { FormatterFailed = FALSE; C( TYPE_XYZ_FLT ); C( TYPE_Lab_FLT ); C( TYPE_GRAY_FLT ); C( TYPE_RGB_FLT ); C( TYPE_BGR_FLT ); C( TYPE_CMYK_FLT ); C( TYPE_LabA_FLT ); C( TYPE_RGBA_FLT ); C( TYPE_ARGB_FLT ); C( TYPE_BGRA_FLT ); C( TYPE_ABGR_FLT ); C( TYPE_XYZ_DBL ); C( TYPE_Lab_DBL ); C( TYPE_GRAY_DBL ); C( TYPE_RGB_DBL ); C( TYPE_BGR_DBL ); C( TYPE_CMYK_DBL ); C( TYPE_XYZ_FLT ); #ifndef CMS_NO_HALF_SUPPORT C( TYPE_GRAY_HALF_FLT ); C( TYPE_RGB_HALF_FLT ); C( TYPE_CMYK_HALF_FLT ); C( TYPE_RGBA_HALF_FLT ); C( TYPE_RGBA_HALF_FLT ); C( TYPE_ARGB_HALF_FLT ); C( TYPE_BGR_HALF_FLT ); C( TYPE_BGRA_HALF_FLT ); C( TYPE_ABGR_HALF_FLT ); #endif return FormatterFailed == 0 ? 1 : 0; } #undef C #ifndef CMS_NO_HALF_SUPPORT // Check half float #define my_isfinite(x) ((x) != (x)) static cmsInt32Number CheckFormattersHalf(void) { int i, j; for (i=0; i < 0xffff; i++) { cmsFloat32Number f = _cmsHalf2Float((cmsUInt16Number) i); if (!my_isfinite(f)) { j = _cmsFloat2Half(f); if (i != j) { Fail("%d != %d in Half float support!\n", i, j); return 0; } } } return 1; } #endif static cmsInt32Number CheckOneRGB(cmsHTRANSFORM xform, cmsUInt16Number R, cmsUInt16Number G, cmsUInt16Number B, cmsUInt16Number Ro, cmsUInt16Number Go, cmsUInt16Number Bo) { cmsUInt16Number RGB[3]; cmsUInt16Number Out[3]; RGB[0] = R; RGB[1] = G; RGB[2] = B; cmsDoTransform(xform, RGB, Out, 1); return IsGoodWord("R", Ro , Out[0]) && IsGoodWord("G", Go , Out[1]) && IsGoodWord("B", Bo , Out[2]); } // Check known values going from sRGB to XYZ static cmsInt32Number CheckOneRGB_double(cmsHTRANSFORM xform, cmsFloat64Number R, cmsFloat64Number G, cmsFloat64Number B, cmsFloat64Number Ro, cmsFloat64Number Go, cmsFloat64Number Bo) { cmsFloat64Number RGB[3]; cmsFloat64Number Out[3]; RGB[0] = R; RGB[1] = G; RGB[2] = B; cmsDoTransform(xform, RGB, Out, 1); return IsGoodVal("R", Ro , Out[0], 0.01) && IsGoodVal("G", Go , Out[1], 0.01) && IsGoodVal("B", Bo , Out[2], 0.01); } static cmsInt32Number CheckChangeBufferFormat(void) { cmsHPROFILE hsRGB = cmsCreate_sRGBProfile(); cmsHTRANSFORM xform; xform = cmsCreateTransform(hsRGB, TYPE_RGB_16, hsRGB, TYPE_RGB_16, INTENT_PERCEPTUAL, 0); cmsCloseProfile(hsRGB); if (xform == NULL) return 0; if (!CheckOneRGB(xform, 0, 0, 0, 0, 0, 0)) return 0; if (!CheckOneRGB(xform, 120, 0, 0, 120, 0, 0)) return 0; if (!CheckOneRGB(xform, 0, 222, 255, 0, 222, 255)) return 0; if (!cmsChangeBuffersFormat(xform, TYPE_BGR_16, TYPE_RGB_16)) return 0; if (!CheckOneRGB(xform, 0, 0, 123, 123, 0, 0)) return 0; if (!CheckOneRGB(xform, 154, 234, 0, 0, 234, 154)) return 0; if (!cmsChangeBuffersFormat(xform, TYPE_RGB_DBL, TYPE_RGB_DBL)) return 0; if (!CheckOneRGB_double(xform, 0.20, 0, 0, 0.20, 0, 0)) return 0; if (!CheckOneRGB_double(xform, 0, 0.9, 1, 0, 0.9, 1)) return 0; cmsDeleteTransform(xform); return 1; } // Write tag testbed ---------------------------------------------------------------------------------------- static cmsInt32Number CheckXYZ(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsCIEXYZ XYZ, *Pt; switch (Pass) { case 1: XYZ.X = 1.0; XYZ.Y = 1.1; XYZ.Z = 1.2; return cmsWriteTag(hProfile, tag, &XYZ); case 2: Pt = (cmsCIEXYZ *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return IsGoodFixed15_16("X", 1.0, Pt ->X) && IsGoodFixed15_16("Y", 1.1, Pt->Y) && IsGoodFixed15_16("Z", 1.2, Pt -> Z); default: return 0; } } static cmsInt32Number CheckGamma(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsToneCurve *g, *Pt; cmsInt32Number rc; switch (Pass) { case 1: g = cmsBuildGamma(DbgThread(), 1.0); rc = cmsWriteTag(hProfile, tag, g); cmsFreeToneCurve(g); return rc; case 2: Pt = (cmsToneCurve *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return cmsIsToneCurveLinear(Pt); default: return 0; } } static cmsInt32Number CheckTextSingle(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsMLU *m, *Pt; cmsInt32Number rc; char Buffer[256]; switch (Pass) { case 1: m = cmsMLUalloc(DbgThread(), 0); cmsMLUsetASCII(m, cmsNoLanguage, cmsNoCountry, "Test test"); rc = cmsWriteTag(hProfile, tag, m); cmsMLUfree(m); return rc; case 2: Pt = (cmsMLU *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; cmsMLUgetASCII(Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); if (strcmp(Buffer, "Test test") != 0) return FALSE; return TRUE; default: return 0; } } static cmsInt32Number CheckText(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsMLU *m, *Pt; cmsInt32Number rc; char Buffer[256]; switch (Pass) { case 1: m = cmsMLUalloc(DbgThread(), 0); cmsMLUsetASCII(m, cmsNoLanguage, cmsNoCountry, "Test test"); cmsMLUsetASCII(m, "en", "US", "1 1 1 1"); cmsMLUsetASCII(m, "es", "ES", "2 2 2 2"); cmsMLUsetASCII(m, "ct", "ES", "3 3 3 3"); cmsMLUsetASCII(m, "en", "GB", "444444444"); rc = cmsWriteTag(hProfile, tag, m); cmsMLUfree(m); return rc; case 2: Pt = (cmsMLU *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; cmsMLUgetASCII(Pt, cmsNoLanguage, cmsNoCountry, Buffer, 256); if (strcmp(Buffer, "Test test") != 0) return FALSE; cmsMLUgetASCII(Pt, "en", "US", Buffer, 256); if (strcmp(Buffer, "1 1 1 1") != 0) return FALSE; cmsMLUgetASCII(Pt, "es", "ES", Buffer, 256); if (strcmp(Buffer, "2 2 2 2") != 0) return FALSE; cmsMLUgetASCII(Pt, "ct", "ES", Buffer, 256); if (strcmp(Buffer, "3 3 3 3") != 0) return FALSE; cmsMLUgetASCII(Pt, "en", "GB", Buffer, 256); if (strcmp(Buffer, "444444444") != 0) return FALSE; return TRUE; default: return 0; } } static cmsInt32Number CheckData(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsICCData *Pt; cmsICCData d = { 1, 0, { '?' }}; cmsInt32Number rc; switch (Pass) { case 1: rc = cmsWriteTag(hProfile, tag, &d); return rc; case 2: Pt = (cmsICCData *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return (Pt ->data[0] == '?') && (Pt ->flag == 0) && (Pt ->len == 1); default: return 0; } } static cmsInt32Number CheckSignature(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsTagSignature *Pt, Holder; switch (Pass) { case 1: Holder = (cmsTagSignature) cmsSigPerceptualReferenceMediumGamut; return cmsWriteTag(hProfile, tag, &Holder); case 2: Pt = (cmsTagSignature *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return *Pt == cmsSigPerceptualReferenceMediumGamut; default: return 0; } } static cmsInt32Number CheckDateTime(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { struct tm *Pt, Holder; switch (Pass) { case 1: Holder.tm_hour = 1; Holder.tm_min = 2; Holder.tm_sec = 3; Holder.tm_mday = 4; Holder.tm_mon = 5; Holder.tm_year = 2009 - 1900; return cmsWriteTag(hProfile, tag, &Holder); case 2: Pt = (struct tm *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return (Pt ->tm_hour == 1 && Pt ->tm_min == 2 && Pt ->tm_sec == 3 && Pt ->tm_mday == 4 && Pt ->tm_mon == 5 && Pt ->tm_year == 2009 - 1900); default: return 0; } } static cmsInt32Number CheckNamedColor(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag, cmsInt32Number max_check, cmsBool colorant_check) { cmsNAMEDCOLORLIST* nc; cmsInt32Number i, j, rc; char Name[255]; cmsUInt16Number PCS[3]; cmsUInt16Number Colorant[cmsMAXCHANNELS]; char CheckName[255]; cmsUInt16Number CheckPCS[3]; cmsUInt16Number CheckColorant[cmsMAXCHANNELS]; switch (Pass) { case 1: nc = cmsAllocNamedColorList(DbgThread(), 0, 4, "prefix", "suffix"); if (nc == NULL) return 0; for (i=0; i < max_check; i++) { PCS[0] = PCS[1] = PCS[2] = (cmsUInt16Number) i; Colorant[0] = Colorant[1] = Colorant[2] = Colorant[3] = (cmsUInt16Number) (max_check - i); sprintf(Name, "#%d", i); if (!cmsAppendNamedColor(nc, Name, PCS, Colorant)) { Fail("Couldn't append named color"); return 0; } } rc = cmsWriteTag(hProfile, tag, nc); cmsFreeNamedColorList(nc); return rc; case 2: nc = (cmsNAMEDCOLORLIST *) cmsReadTag(hProfile, tag); if (nc == NULL) return 0; for (i=0; i < max_check; i++) { CheckPCS[0] = CheckPCS[1] = CheckPCS[2] = (cmsUInt16Number) i; CheckColorant[0] = CheckColorant[1] = CheckColorant[2] = CheckColorant[3] = (cmsUInt16Number) (max_check - i); sprintf(CheckName, "#%d", i); if (!cmsNamedColorInfo(nc, i, Name, NULL, NULL, PCS, Colorant)) { Fail("Invalid string"); return 0; } for (j=0; j < 3; j++) { if (CheckPCS[j] != PCS[j]) { Fail("Invalid PCS"); return 0; } } // This is only used on named color list if (colorant_check) { for (j=0; j < 4; j++) { if (CheckColorant[j] != Colorant[j]) { Fail("Invalid Colorant"); return 0; }; } } if (strcmp(Name, CheckName) != 0) { Fail("Invalid Name"); return 0; }; } return 1; default: return 0; } } static cmsInt32Number CheckLUT(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsPipeline* Lut, *Pt; cmsInt32Number rc; switch (Pass) { case 1: Lut = cmsPipelineAlloc(DbgThread(), 3, 3); if (Lut == NULL) return 0; // Create an identity LUT cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(DbgThread(), 3)); cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocIdentityCLut(DbgThread(), 3)); cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocIdentityCurves(DbgThread(), 3)); rc = cmsWriteTag(hProfile, tag, Lut); cmsPipelineFree(Lut); return rc; case 2: Pt = (cmsPipeline *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; // Transform values, check for identity return Check16LUT(Pt); default: return 0; } } static cmsInt32Number CheckCHAD(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsFloat64Number *Pt; cmsFloat64Number CHAD[] = { 0, .1, .2, .3, .4, .5, .6, .7, .8 }; cmsInt32Number i; switch (Pass) { case 1: return cmsWriteTag(hProfile, tag, CHAD); case 2: Pt = (cmsFloat64Number *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; for (i=0; i < 9; i++) { if (!IsGoodFixed15_16("CHAD", Pt[i], CHAD[i])) return 0; } return 1; default: return 0; } } static cmsInt32Number CheckChromaticity(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsCIExyYTRIPLE *Pt, c = { {0, .1, 1 }, { .3, .4, 1 }, { .6, .7, 1 }}; switch (Pass) { case 1: return cmsWriteTag(hProfile, tag, &c); case 2: Pt = (cmsCIExyYTRIPLE *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Red.x, c.Red.x)) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Red.y, c.Red.y)) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Green.x, c.Green.x)) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Green.y, c.Green.y)) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Blue.x, c.Blue.x)) return 0; if (!IsGoodFixed15_16("xyY", Pt ->Blue.y, c.Blue.y)) return 0; return 1; default: return 0; } } static cmsInt32Number CheckColorantOrder(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsUInt8Number *Pt, c[cmsMAXCHANNELS]; cmsInt32Number i; switch (Pass) { case 1: for (i=0; i < cmsMAXCHANNELS; i++) c[i] = (cmsUInt8Number) (cmsMAXCHANNELS - i - 1); return cmsWriteTag(hProfile, tag, c); case 2: Pt = (cmsUInt8Number *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; for (i=0; i < cmsMAXCHANNELS; i++) { if (Pt[i] != ( cmsMAXCHANNELS - i - 1 )) return 0; } return 1; default: return 0; } } static cmsInt32Number CheckMeasurement(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsICCMeasurementConditions *Pt, m; switch (Pass) { case 1: m.Backing.X = 0.1; m.Backing.Y = 0.2; m.Backing.Z = 0.3; m.Flare = 1.0; m.Geometry = 1; m.IlluminantType = cmsILLUMINANT_TYPE_D50; m.Observer = 1; return cmsWriteTag(hProfile, tag, &m); case 2: Pt = (cmsICCMeasurementConditions *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; if (!IsGoodFixed15_16("Backing", Pt ->Backing.X, 0.1)) return 0; if (!IsGoodFixed15_16("Backing", Pt ->Backing.Y, 0.2)) return 0; if (!IsGoodFixed15_16("Backing", Pt ->Backing.Z, 0.3)) return 0; if (!IsGoodFixed15_16("Flare", Pt ->Flare, 1.0)) return 0; if (Pt ->Geometry != 1) return 0; if (Pt ->IlluminantType != cmsILLUMINANT_TYPE_D50) return 0; if (Pt ->Observer != 1) return 0; return 1; default: return 0; } } static cmsInt32Number CheckUcrBg(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsUcrBg *Pt, m; cmsInt32Number rc; char Buffer[256]; switch (Pass) { case 1: m.Ucr = cmsBuildGamma(DbgThread(), 2.4); m.Bg = cmsBuildGamma(DbgThread(), -2.2); m.Desc = cmsMLUalloc(DbgThread(), 1); cmsMLUsetASCII(m.Desc, cmsNoLanguage, cmsNoCountry, "test UCR/BG"); rc = cmsWriteTag(hProfile, tag, &m); cmsMLUfree(m.Desc); cmsFreeToneCurve(m.Bg); cmsFreeToneCurve(m.Ucr); return rc; case 2: Pt = (cmsUcrBg *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; cmsMLUgetASCII(Pt ->Desc, cmsNoLanguage, cmsNoCountry, Buffer, 256); if (strcmp(Buffer, "test UCR/BG") != 0) return 0; return 1; default: return 0; } } static cmsInt32Number CheckCRDinfo(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsMLU *mlu; char Buffer[256]; cmsInt32Number rc; switch (Pass) { case 1: mlu = cmsMLUalloc(DbgThread(), 5); cmsMLUsetWide(mlu, "PS", "nm", L"test postscript"); cmsMLUsetWide(mlu, "PS", "#0", L"perceptual"); cmsMLUsetWide(mlu, "PS", "#1", L"relative_colorimetric"); cmsMLUsetWide(mlu, "PS", "#2", L"saturation"); cmsMLUsetWide(mlu, "PS", "#3", L"absolute_colorimetric"); rc = cmsWriteTag(hProfile, tag, mlu); cmsMLUfree(mlu); return rc; case 2: mlu = (cmsMLU*) cmsReadTag(hProfile, tag); if (mlu == NULL) return 0; cmsMLUgetASCII(mlu, "PS", "nm", Buffer, 256); if (strcmp(Buffer, "test postscript") != 0) return 0; cmsMLUgetASCII(mlu, "PS", "#0", Buffer, 256); if (strcmp(Buffer, "perceptual") != 0) return 0; cmsMLUgetASCII(mlu, "PS", "#1", Buffer, 256); if (strcmp(Buffer, "relative_colorimetric") != 0) return 0; cmsMLUgetASCII(mlu, "PS", "#2", Buffer, 256); if (strcmp(Buffer, "saturation") != 0) return 0; cmsMLUgetASCII(mlu, "PS", "#3", Buffer, 256); if (strcmp(Buffer, "absolute_colorimetric") != 0) return 0; return 1; default: return 0; } } static cmsToneCurve *CreateSegmentedCurve(void) { cmsCurveSegment Seg[3]; cmsFloat32Number Sampled[2] = { 0, 1}; Seg[0].Type = 6; Seg[0].Params[0] = 1; Seg[0].Params[1] = 0; Seg[0].Params[2] = 0; Seg[0].Params[3] = 0; Seg[0].x0 = -1E22F; Seg[0].x1 = 0; Seg[1].Type = 0; Seg[1].nGridPoints = 2; Seg[1].SampledPoints = Sampled; Seg[1].x0 = 0; Seg[1].x1 = 1; Seg[2].Type = 6; Seg[2].Params[0] = 1; Seg[2].Params[1] = 0; Seg[2].Params[2] = 0; Seg[2].Params[3] = 0; Seg[2].x0 = 1; Seg[2].x1 = 1E22F; return cmsBuildSegmentedToneCurve(DbgThread(), 3, Seg); } static cmsInt32Number CheckMPE(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsPipeline* Lut, *Pt; cmsToneCurve* G[3]; cmsInt32Number rc; switch (Pass) { case 1: Lut = cmsPipelineAlloc(DbgThread(), 3, 3); cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4(DbgThread())); cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV4ToV2(DbgThread())); AddIdentityCLUTfloat(Lut); G[0] = G[1] = G[2] = CreateSegmentedCurve(); cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(DbgThread(), 3, G)); cmsFreeToneCurve(G[0]); rc = cmsWriteTag(hProfile, tag, Lut); cmsPipelineFree(Lut); return rc; case 2: Pt = (cmsPipeline *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; return CheckFloatLUT(Pt); default: return 0; } } static cmsInt32Number CheckScreening(cmsInt32Number Pass, cmsHPROFILE hProfile, cmsTagSignature tag) { cmsScreening *Pt, sc; cmsInt32Number rc; switch (Pass) { case 1: sc.Flag = 0; sc.nChannels = 1; sc.Channels[0].Frequency = 2.0; sc.Channels[0].ScreenAngle = 3.0; sc.Channels[0].SpotShape = cmsSPOT_ELLIPSE; rc = cmsWriteTag(hProfile, tag, &sc); return rc; case 2: Pt = (cmsScreening *) cmsReadTag(hProfile, tag); if (Pt == NULL) return 0; if (Pt ->nChannels != 1) return 0; if (Pt ->Flag != 0) return 0; if (!IsGoodFixed15_16("Freq", Pt ->Channels[0].Frequency, 2.0)) return 0; if (!IsGoodFixed15_16("Angle", Pt ->Channels[0].ScreenAngle, 3.0)) return 0; if (Pt ->Channels[0].SpotShape != cmsSPOT_ELLIPSE) return 0; return 1; default: return 0; } } static cmsBool CheckOneStr(cmsMLU* mlu, cmsInt32Number n) { char Buffer[256], Buffer2[256]; cmsMLUgetASCII(mlu, "en", "US", Buffer, 255); sprintf(Buffer2, "Hello, world %d", n); if (strcmp(Buffer, Buffer2) != 0) return FALSE; cmsMLUgetASCII(mlu, "es", "ES", Buffer, 255); sprintf(Buffer2, "Hola, mundo %d", n); if (strcmp(Buffer, Buffer2) != 0) return FALSE; return TRUE; } static void SetOneStr(cmsMLU** mlu, wchar_t* s1, wchar_t* s2) { *mlu = cmsMLUalloc(DbgThread(), 0); cmsMLUsetWide(*mlu, "en", "US", s1); cmsMLUsetWide(*mlu, "es", "ES", s2); } static cmsInt32Number CheckProfileSequenceTag(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsSEQ* s; cmsInt32Number i; switch (Pass) { case 1: s = cmsAllocProfileSequenceDescription(DbgThread(), 3); if (s == NULL) return 0; SetOneStr(&s -> seq[0].Manufacturer, L"Hello, world 0", L"Hola, mundo 0"); SetOneStr(&s -> seq[0].Model, L"Hello, world 0", L"Hola, mundo 0"); SetOneStr(&s -> seq[1].Manufacturer, L"Hello, world 1", L"Hola, mundo 1"); SetOneStr(&s -> seq[1].Model, L"Hello, world 1", L"Hola, mundo 1"); SetOneStr(&s -> seq[2].Manufacturer, L"Hello, world 2", L"Hola, mundo 2"); SetOneStr(&s -> seq[2].Model, L"Hello, world 2", L"Hola, mundo 2"); #ifdef CMS_DONT_USE_INT64 s ->seq[0].attributes[0] = cmsTransparency|cmsMatte; s ->seq[0].attributes[1] = 0; #else s ->seq[0].attributes = cmsTransparency|cmsMatte; #endif #ifdef CMS_DONT_USE_INT64 s ->seq[1].attributes[0] = cmsReflective|cmsMatte; s ->seq[1].attributes[1] = 0; #else s ->seq[1].attributes = cmsReflective|cmsMatte; #endif #ifdef CMS_DONT_USE_INT64 s ->seq[2].attributes[0] = cmsTransparency|cmsGlossy; s ->seq[2].attributes[1] = 0; #else s ->seq[2].attributes = cmsTransparency|cmsGlossy; #endif if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, s)) return 0; cmsFreeProfileSequenceDescription(s); return 1; case 2: s = (cmsSEQ *) cmsReadTag(hProfile, cmsSigProfileSequenceDescTag); if (s == NULL) return 0; if (s ->n != 3) return 0; #ifdef CMS_DONT_USE_INT64 if (s ->seq[0].attributes[0] != (cmsTransparency|cmsMatte)) return 0; if (s ->seq[0].attributes[1] != 0) return 0; #else if (s ->seq[0].attributes != (cmsTransparency|cmsMatte)) return 0; #endif #ifdef CMS_DONT_USE_INT64 if (s ->seq[1].attributes[0] != (cmsReflective|cmsMatte)) return 0; if (s ->seq[1].attributes[1] != 0) return 0; #else if (s ->seq[1].attributes != (cmsReflective|cmsMatte)) return 0; #endif #ifdef CMS_DONT_USE_INT64 if (s ->seq[2].attributes[0] != (cmsTransparency|cmsGlossy)) return 0; if (s ->seq[2].attributes[1] != 0) return 0; #else if (s ->seq[2].attributes != (cmsTransparency|cmsGlossy)) return 0; #endif // Check MLU for (i=0; i < 3; i++) { if (!CheckOneStr(s -> seq[i].Manufacturer, i)) return 0; if (!CheckOneStr(s -> seq[i].Model, i)) return 0; } return 1; default: return 0; } } static cmsInt32Number CheckProfileSequenceIDTag(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsSEQ* s; cmsInt32Number i; switch (Pass) { case 1: s = cmsAllocProfileSequenceDescription(DbgThread(), 3); if (s == NULL) return 0; memcpy(s ->seq[0].ProfileID.ID8, "0123456789ABCDEF", 16); memcpy(s ->seq[1].ProfileID.ID8, "1111111111111111", 16); memcpy(s ->seq[2].ProfileID.ID8, "2222222222222222", 16); SetOneStr(&s -> seq[0].Description, L"Hello, world 0", L"Hola, mundo 0"); SetOneStr(&s -> seq[1].Description, L"Hello, world 1", L"Hola, mundo 1"); SetOneStr(&s -> seq[2].Description, L"Hello, world 2", L"Hola, mundo 2"); if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, s)) return 0; cmsFreeProfileSequenceDescription(s); return 1; case 2: s = (cmsSEQ *) cmsReadTag(hProfile, cmsSigProfileSequenceIdTag); if (s == NULL) return 0; if (s ->n != 3) return 0; if (memcmp(s ->seq[0].ProfileID.ID8, "0123456789ABCDEF", 16) != 0) return 0; if (memcmp(s ->seq[1].ProfileID.ID8, "1111111111111111", 16) != 0) return 0; if (memcmp(s ->seq[2].ProfileID.ID8, "2222222222222222", 16) != 0) return 0; for (i=0; i < 3; i++) { if (!CheckOneStr(s -> seq[i].Description, i)) return 0; } return 1; default: return 0; } } static cmsInt32Number CheckICCViewingConditions(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsICCViewingConditions* v; cmsICCViewingConditions s; switch (Pass) { case 1: s.IlluminantType = 1; s.IlluminantXYZ.X = 0.1; s.IlluminantXYZ.Y = 0.2; s.IlluminantXYZ.Z = 0.3; s.SurroundXYZ.X = 0.4; s.SurroundXYZ.Y = 0.5; s.SurroundXYZ.Z = 0.6; if (!cmsWriteTag(hProfile, cmsSigViewingConditionsTag, &s)) return 0; return 1; case 2: v = (cmsICCViewingConditions *) cmsReadTag(hProfile, cmsSigViewingConditionsTag); if (v == NULL) return 0; if (v ->IlluminantType != 1) return 0; if (!IsGoodVal("IlluminantXYZ.X", v ->IlluminantXYZ.X, 0.1, 0.001)) return 0; if (!IsGoodVal("IlluminantXYZ.Y", v ->IlluminantXYZ.Y, 0.2, 0.001)) return 0; if (!IsGoodVal("IlluminantXYZ.Z", v ->IlluminantXYZ.Z, 0.3, 0.001)) return 0; if (!IsGoodVal("SurroundXYZ.X", v ->SurroundXYZ.X, 0.4, 0.001)) return 0; if (!IsGoodVal("SurroundXYZ.Y", v ->SurroundXYZ.Y, 0.5, 0.001)) return 0; if (!IsGoodVal("SurroundXYZ.Z", v ->SurroundXYZ.Z, 0.6, 0.001)) return 0; return 1; default: return 0; } } static cmsInt32Number CheckVCGT(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsToneCurve* Curves[3]; cmsToneCurve** PtrCurve; switch (Pass) { case 1: Curves[0] = cmsBuildGamma(DbgThread(), 1.1); Curves[1] = cmsBuildGamma(DbgThread(), 2.2); Curves[2] = cmsBuildGamma(DbgThread(), 3.4); if (!cmsWriteTag(hProfile, cmsSigVcgtTag, Curves)) return 0; cmsFreeToneCurveTriple(Curves); return 1; case 2: PtrCurve = (cmsToneCurve **) cmsReadTag(hProfile, cmsSigVcgtTag); if (PtrCurve == NULL) return 0; if (!IsGoodVal("VCGT R", cmsEstimateGamma(PtrCurve[0], 0.01), 1.1, 0.001)) return 0; if (!IsGoodVal("VCGT G", cmsEstimateGamma(PtrCurve[1], 0.01), 2.2, 0.001)) return 0; if (!IsGoodVal("VCGT B", cmsEstimateGamma(PtrCurve[2], 0.01), 3.4, 0.001)) return 0; return 1; default:; } return 0; } // Only one of the two following may be used, as they share the same tag static cmsInt32Number CheckDictionary16(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsHANDLE hDict; const cmsDICTentry* e; switch (Pass) { case 1: hDict = cmsDictAlloc(DbgThread()); cmsDictAddEntry(hDict, L"Name0", NULL, NULL, NULL); cmsDictAddEntry(hDict, L"Name1", L"", NULL, NULL); cmsDictAddEntry(hDict, L"Name", L"String", NULL, NULL); cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; cmsDictFree(hDict); return 1; case 2: hDict = cmsReadTag(hProfile, cmsSigMetaTag); if (hDict == NULL) return 0; e = cmsDictGetEntryList(hDict); if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; e = cmsDictNextEntry(e); if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; e = cmsDictNextEntry(e); if (memcmp(e ->Name, L"Name1", sizeof(wchar_t) *5) != 0) return 0; if (e ->Value == NULL) return 0; if (*e->Value != 0) return 0; e = cmsDictNextEntry(e); if (memcmp(e ->Name, L"Name0", sizeof(wchar_t) * 5) != 0) return 0; if (e ->Value != NULL) return 0; return 1; default:; } return 0; } static cmsInt32Number CheckDictionary24(cmsInt32Number Pass, cmsHPROFILE hProfile) { cmsHANDLE hDict; const cmsDICTentry* e; cmsMLU* DisplayName; char Buffer[256]; cmsInt32Number rc = 1; switch (Pass) { case 1: hDict = cmsDictAlloc(DbgThread()); DisplayName = cmsMLUalloc(DbgThread(), 0); cmsMLUsetWide(DisplayName, "en", "US", L"Hello, world"); cmsMLUsetWide(DisplayName, "es", "ES", L"Hola, mundo"); cmsMLUsetWide(DisplayName, "fr", "FR", L"Bonjour, le monde"); cmsMLUsetWide(DisplayName, "ca", "CA", L"Hola, mon"); cmsDictAddEntry(hDict, L"Name", L"String", DisplayName, NULL); cmsMLUfree(DisplayName); cmsDictAddEntry(hDict, L"Name2", L"12", NULL, NULL); if (!cmsWriteTag(hProfile, cmsSigMetaTag, hDict)) return 0; cmsDictFree(hDict); return 1; case 2: hDict = cmsReadTag(hProfile, cmsSigMetaTag); if (hDict == NULL) return 0; e = cmsDictGetEntryList(hDict); if (memcmp(e ->Name, L"Name2", sizeof(wchar_t) * 5) != 0) return 0; if (memcmp(e ->Value, L"12", sizeof(wchar_t) * 2) != 0) return 0; e = cmsDictNextEntry(e); if (memcmp(e ->Name, L"Name", sizeof(wchar_t) * 4) != 0) return 0; if (memcmp(e ->Value, L"String", sizeof(wchar_t) * 5) != 0) return 0; cmsMLUgetASCII(e->DisplayName, "en", "US", Buffer, 256); if (strcmp(Buffer, "Hello, world") != 0) rc = 0; cmsMLUgetASCII(e->DisplayName, "es", "ES", Buffer, 256); if (strcmp(Buffer, "Hola, mundo") != 0) rc = 0; cmsMLUgetASCII(e->DisplayName, "fr", "FR", Buffer, 256); if (strcmp(Buffer, "Bonjour, le monde") != 0) rc = 0; cmsMLUgetASCII(e->DisplayName, "ca", "CA", Buffer, 256); if (strcmp(Buffer, "Hola, mon") != 0) rc = 0; if (rc == 0) Fail("Unexpected string '%s'", Buffer); return 1; default:; } return 0; } static cmsInt32Number CheckRAWtags(cmsInt32Number Pass, cmsHPROFILE hProfile) { char Buffer[7]; switch (Pass) { case 1: return cmsWriteRawTag(hProfile, (cmsTagSignature) 0x31323334, "data123", 7); case 2: if (!cmsReadRawTag(hProfile, (cmsTagSignature) 0x31323334, Buffer, 7)) return 0; if (strncmp(Buffer, "data123", 7) != 0) return 0; return 1; default: return 0; } } // This is a very big test that checks every single tag static cmsInt32Number CheckProfileCreation(void) { cmsHPROFILE h; cmsInt32Number Pass; h = cmsCreateProfilePlaceholder(DbgThread()); if (h == NULL) return 0; cmsSetProfileVersion(h, 4.3); if (cmsGetTagCount(h) != 0) { Fail("Empty profile with nonzero number of tags"); goto Error; } if (cmsIsTag(h, cmsSigAToB0Tag)) { Fail("Found a tag in an empty profile"); goto Error; } cmsSetColorSpace(h, cmsSigRgbData); if (cmsGetColorSpace(h) != cmsSigRgbData) { Fail("Unable to set colorspace"); goto Error; } cmsSetPCS(h, cmsSigLabData); if (cmsGetPCS(h) != cmsSigLabData) { Fail("Unable to set colorspace"); goto Error; } cmsSetDeviceClass(h, cmsSigDisplayClass); if (cmsGetDeviceClass(h) != cmsSigDisplayClass) { Fail("Unable to set deviceclass"); goto Error; } cmsSetHeaderRenderingIntent(h, INTENT_SATURATION); if (cmsGetHeaderRenderingIntent(h) != INTENT_SATURATION) { Fail("Unable to set rendering intent"); goto Error; } for (Pass = 1; Pass <= 2; Pass++) { SubTest("Tags holding XYZ"); if (!CheckXYZ(Pass, h, cmsSigBlueColorantTag)) goto Error; if (!CheckXYZ(Pass, h, cmsSigGreenColorantTag)) goto Error; if (!CheckXYZ(Pass, h, cmsSigRedColorantTag)) goto Error; if (!CheckXYZ(Pass, h, cmsSigMediaBlackPointTag)) goto Error; if (!CheckXYZ(Pass, h, cmsSigMediaWhitePointTag)) goto Error; if (!CheckXYZ(Pass, h, cmsSigLuminanceTag)) goto Error; SubTest("Tags holding curves"); if (!CheckGamma(Pass, h, cmsSigBlueTRCTag)) goto Error; if (!CheckGamma(Pass, h, cmsSigGrayTRCTag)) goto Error; if (!CheckGamma(Pass, h, cmsSigGreenTRCTag)) goto Error; if (!CheckGamma(Pass, h, cmsSigRedTRCTag)) goto Error; SubTest("Tags holding text"); if (!CheckTextSingle(Pass, h, cmsSigCharTargetTag)) goto Error; if (!CheckTextSingle(Pass, h, cmsSigScreeningDescTag)) goto Error; if (!CheckText(Pass, h, cmsSigCopyrightTag)) goto Error; if (!CheckText(Pass, h, cmsSigProfileDescriptionTag)) goto Error; if (!CheckText(Pass, h, cmsSigDeviceMfgDescTag)) goto Error; if (!CheckText(Pass, h, cmsSigDeviceModelDescTag)) goto Error; if (!CheckText(Pass, h, cmsSigViewingCondDescTag)) goto Error; SubTest("Tags holding cmsICCData"); if (!CheckData(Pass, h, cmsSigPs2CRD0Tag)) goto Error; if (!CheckData(Pass, h, cmsSigPs2CRD1Tag)) goto Error; if (!CheckData(Pass, h, cmsSigPs2CRD2Tag)) goto Error; if (!CheckData(Pass, h, cmsSigPs2CRD3Tag)) goto Error; if (!CheckData(Pass, h, cmsSigPs2CSATag)) goto Error; if (!CheckData(Pass, h, cmsSigPs2RenderingIntentTag)) goto Error; SubTest("Tags holding signatures"); if (!CheckSignature(Pass, h, cmsSigColorimetricIntentImageStateTag)) goto Error; if (!CheckSignature(Pass, h, cmsSigPerceptualRenderingIntentGamutTag)) goto Error; if (!CheckSignature(Pass, h, cmsSigSaturationRenderingIntentGamutTag)) goto Error; if (!CheckSignature(Pass, h, cmsSigTechnologyTag)) goto Error; SubTest("Tags holding date_time"); if (!CheckDateTime(Pass, h, cmsSigCalibrationDateTimeTag)) goto Error; if (!CheckDateTime(Pass, h, cmsSigDateTimeTag)) goto Error; SubTest("Tags holding named color lists"); if (!CheckNamedColor(Pass, h, cmsSigColorantTableTag, 15, FALSE)) goto Error; if (!CheckNamedColor(Pass, h, cmsSigColorantTableOutTag, 15, FALSE)) goto Error; if (!CheckNamedColor(Pass, h, cmsSigNamedColor2Tag, 4096, TRUE)) goto Error; SubTest("Tags holding LUTs"); if (!CheckLUT(Pass, h, cmsSigAToB0Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigAToB1Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigAToB2Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigBToA0Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigBToA1Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigBToA2Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigPreview0Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigPreview1Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigPreview2Tag)) goto Error; if (!CheckLUT(Pass, h, cmsSigGamutTag)) goto Error; SubTest("Tags holding CHAD"); if (!CheckCHAD(Pass, h, cmsSigChromaticAdaptationTag)) goto Error; SubTest("Tags holding Chromaticity"); if (!CheckChromaticity(Pass, h, cmsSigChromaticityTag)) goto Error; SubTest("Tags holding colorant order"); if (!CheckColorantOrder(Pass, h, cmsSigColorantOrderTag)) goto Error; SubTest("Tags holding measurement"); if (!CheckMeasurement(Pass, h, cmsSigMeasurementTag)) goto Error; SubTest("Tags holding CRD info"); if (!CheckCRDinfo(Pass, h, cmsSigCrdInfoTag)) goto Error; SubTest("Tags holding UCR/BG"); if (!CheckUcrBg(Pass, h, cmsSigUcrBgTag)) goto Error; SubTest("Tags holding MPE"); if (!CheckMPE(Pass, h, cmsSigDToB0Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigDToB1Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigDToB2Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigDToB3Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigBToD0Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigBToD1Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigBToD2Tag)) goto Error; if (!CheckMPE(Pass, h, cmsSigBToD3Tag)) goto Error; SubTest("Tags using screening"); if (!CheckScreening(Pass, h, cmsSigScreeningTag)) goto Error; SubTest("Tags holding profile sequence description"); if (!CheckProfileSequenceTag(Pass, h)) goto Error; if (!CheckProfileSequenceIDTag(Pass, h)) goto Error; SubTest("Tags holding ICC viewing conditions"); if (!CheckICCViewingConditions(Pass, h)) goto Error; SubTest("VCGT tags"); if (!CheckVCGT(Pass, h)) goto Error; SubTest("RAW tags"); if (!CheckRAWtags(Pass, h)) goto Error; SubTest("Dictionary meta tags"); // if (!CheckDictionary16(Pass, h)) goto Error; if (!CheckDictionary24(Pass, h)) goto Error; if (Pass == 1) { cmsSaveProfileToFile(h, "alltags.icc"); cmsCloseProfile(h); h = cmsOpenProfileFromFileTHR(DbgThread(), "alltags.icc", "r"); } } /* Not implemented (by design): cmsSigDataTag = 0x64617461, // 'data' -- Unused cmsSigDeviceSettingsTag = 0x64657673, // 'devs' -- Unused cmsSigNamedColorTag = 0x6E636f6C, // 'ncol' -- Don't use this one, deprecated by ICC cmsSigOutputResponseTag = 0x72657370, // 'resp' -- Possible patent on this */ cmsCloseProfile(h); remove("alltags.icc"); return 1; Error: cmsCloseProfile(h); remove("alltags.icc"); return 0; } // Thanks to Christopher James Halse Rogers for the bugfixing and providing this test static cmsInt32Number CheckVersionHeaderWriting(void) { cmsHPROFILE h; int index; float test_versions[] = { 2.3f, 4.08f, 4.09f, 4.3f }; for (index = 0; index < sizeof(test_versions)/sizeof(test_versions[0]); index++) { h = cmsCreateProfilePlaceholder(DbgThread()); if (h == NULL) return 0; cmsSetProfileVersion(h, test_versions[index]); cmsSaveProfileToFile(h, "versions.icc"); cmsCloseProfile(h); h = cmsOpenProfileFromFileTHR(DbgThread(), "versions.icc", "r"); // Only the first 3 digits are significant if (fabs(cmsGetProfileVersion(h) - test_versions[index]) > 0.005) { Fail("Version failed to round-trip: wrote %.2f, read %.2f", test_versions[index], cmsGetProfileVersion(h)); return 0; } cmsCloseProfile(h); remove("versions.icc"); } return 1; } // Test on Richard Hughes "crayons.icc" static cmsInt32Number CheckMultilocalizedProfile(void) { cmsHPROFILE hProfile; cmsMLU *Pt; char Buffer[256]; hProfile = cmsOpenProfileFromFile("crayons.icc", "r"); Pt = (cmsMLU *) cmsReadTag(hProfile, cmsSigProfileDescriptionTag); cmsMLUgetASCII(Pt, "en", "GB", Buffer, 256); if (strcmp(Buffer, "Crayon Colours") != 0) return FALSE; cmsMLUgetASCII(Pt, "en", "US", Buffer, 256); if (strcmp(Buffer, "Crayon Colors") != 0) return FALSE; cmsCloseProfile(hProfile); return TRUE; } // Error reporting ------------------------------------------------------------------------------------------------------- static void ErrorReportingFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { TrappedError = TRUE; SimultaneousErrors++; strncpy(ReasonToFailBuffer, Text, TEXT_ERROR_BUFFER_SIZE-1); cmsUNUSED_PARAMETER(ContextID); cmsUNUSED_PARAMETER(ErrorCode); } static cmsInt32Number CheckBadProfiles(void) { cmsHPROFILE h; h = cmsOpenProfileFromFileTHR(DbgThread(), "IDoNotExist.icc", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromFileTHR(DbgThread(), "IAmIllFormed*.icc", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } // No profile name given h = cmsOpenProfileFromFileTHR(DbgThread(), "", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromFileTHR(DbgThread(), "..", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromFileTHR(DbgThread(), "IHaveBadAccessMode.icc", "@"); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromFileTHR(DbgThread(), "bad.icc", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromFileTHR(DbgThread(), "toosmall.icc", "r"); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromMemTHR(DbgThread(), NULL, 3); if (h != NULL) { cmsCloseProfile(h); return 0; } h = cmsOpenProfileFromMemTHR(DbgThread(), "123", 3); if (h != NULL) { cmsCloseProfile(h); return 0; } if (SimultaneousErrors != 9) return 0; return 1; } static cmsInt32Number CheckErrReportingOnBadProfiles(void) { cmsInt32Number rc; cmsSetLogErrorHandler(ErrorReportingFunction); rc = CheckBadProfiles(); cmsSetLogErrorHandler(FatalErrorQuit); // Reset the error state TrappedError = FALSE; return rc; } static cmsInt32Number CheckBadTransforms(void) { cmsHPROFILE h1 = cmsCreate_sRGBProfile(); cmsHTRANSFORM x1; x1 = cmsCreateTransform(NULL, 0, NULL, 0, 0, 0); if (x1 != NULL) { cmsDeleteTransform(x1); return 0; } x1 = cmsCreateTransform(h1, TYPE_RGB_8, h1, TYPE_RGB_8, 12345, 0); if (x1 != NULL) { cmsDeleteTransform(x1); return 0; } x1 = cmsCreateTransform(h1, TYPE_CMYK_8, h1, TYPE_RGB_8, 0, 0); if (x1 != NULL) { cmsDeleteTransform(x1); return 0; } x1 = cmsCreateTransform(h1, TYPE_RGB_8, h1, TYPE_CMYK_8, 1, 0); if (x1 != NULL) { cmsDeleteTransform(x1); return 0; } // sRGB does its output as XYZ! x1 = cmsCreateTransform(h1, TYPE_RGB_8, NULL, TYPE_Lab_8, 1, 0); if (x1 != NULL) { cmsDeleteTransform(x1); return 0; } cmsCloseProfile(h1); { cmsHPROFILE hp1 = cmsOpenProfileFromFile("test1.icc", "r"); cmsHPROFILE hp2 = cmsCreate_sRGBProfile(); x1 = cmsCreateTransform(hp1, TYPE_BGR_8, hp2, TYPE_BGR_8, INTENT_PERCEPTUAL, 0); cmsCloseProfile(hp1); cmsCloseProfile(hp2); if (x1 != NULL) { cmsDeleteTransform(x1); return 0; } } return 1; } static cmsInt32Number CheckErrReportingOnBadTransforms(void) { cmsInt32Number rc; cmsSetLogErrorHandler(ErrorReportingFunction); rc = CheckBadTransforms(); cmsSetLogErrorHandler(FatalErrorQuit); // Reset the error state TrappedError = FALSE; return rc; } // --------------------------------------------------------------------------------------------------------- // Check a linear xform static cmsInt32Number Check8linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt8Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; n2=0; for (j=0; j < 0xFF; j++) { memset(Inw, j, sizeof(Inw)); cmsDoTransform(xform, Inw, Outw, 1); for (i=0; i < nChan; i++) { cmsInt32Number dif = abs(Outw[i] - j); if (dif > n2) n2 = dif; } } // We allow 2 contone of difference on 8 bits if (n2 > 2) { Fail("Differences too big (%x)", n2); return 0; } return 1; } static cmsInt32Number Compare8bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt8Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; n2=0; for (j=0; j < 0xFF; j++) { memset(Inw, j, sizeof(Inw)); cmsDoTransform(xform1, Inw, Outw1, 1); cmsDoTransform(xform2, Inw, Outw2, 1); for (i=0; i < nChan; i++) { cmsInt32Number dif = abs(Outw2[i] - Outw1[i]); if (dif > n2) n2 = dif; } } // We allow 2 contone of difference on 8 bits if (n2 > 2) { Fail("Differences too big (%x)", n2); return 0; } return 1; } // Check a linear xform static cmsInt32Number Check16linearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[cmsMAXCHANNELS], Outw[cmsMAXCHANNELS]; n2=0; for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; cmsDoTransform(xform, Inw, Outw, 1); for (i=0; i < nChan; i++) { cmsInt32Number dif = abs(Outw[i] - j); if (dif > n2) n2 = dif; } // We allow 2 contone of difference on 16 bits if (n2 > 0x200) { Fail("Differences too big (%x)", n2); return 0; } } return 1; } static cmsInt32Number Compare16bitXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) { cmsInt32Number n2, i, j; cmsUInt16Number Inw[cmsMAXCHANNELS], Outw1[cmsMAXCHANNELS], Outw2[cmsMAXCHANNELS];; n2=0; for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) Inw[i] = (cmsUInt16Number) j; cmsDoTransform(xform1, Inw, Outw1, 1); cmsDoTransform(xform2, Inw, Outw2, 1); for (i=0; i < nChan; i++) { cmsInt32Number dif = abs(Outw2[i] - Outw1[i]); if (dif > n2) n2 = dif; } } // We allow 2 contone of difference on 16 bits if (n2 > 0x200) { Fail("Differences too big (%x)", n2); return 0; } return 1; } // Check a linear xform static cmsInt32Number CheckFloatlinearXFORM(cmsHTRANSFORM xform, cmsInt32Number nChan) { cmsInt32Number i, j; cmsFloat32Number In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; cmsDoTransform(xform, In, Out, 1); for (i=0; i < nChan; i++) { // We allow no difference in floating point if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out[i], (cmsFloat32Number) (j / 65535.0))) return 0; } } return 1; } // Check a linear xform static cmsInt32Number CompareFloatXFORM(cmsHTRANSFORM xform1, cmsHTRANSFORM xform2, cmsInt32Number nChan) { cmsInt32Number i, j; cmsFloat32Number In[cmsMAXCHANNELS], Out1[cmsMAXCHANNELS], Out2[cmsMAXCHANNELS]; for (j=0; j < 0xFFFF; j++) { for (i=0; i < nChan; i++) In[i] = (cmsFloat32Number) (j / 65535.0);; cmsDoTransform(xform1, In, Out1, 1); cmsDoTransform(xform2, In, Out2, 1); for (i=0; i < nChan; i++) { // We allow no difference in floating point if (!IsGoodFixed15_16("linear xform cmsFloat32Number", Out1[i], Out2[i])) return 0; } } return 1; } // Curves only transforms ---------------------------------------------------------------------------------------- static cmsInt32Number CheckCurvesOnlyTransforms(void) { cmsHTRANSFORM xform1, xform2; cmsHPROFILE h1, h2, h3; cmsToneCurve* c1, *c2, *c3; cmsInt32Number rc = 1; c1 = cmsBuildGamma(DbgThread(), 2.2); c2 = cmsBuildGamma(DbgThread(), 1/2.2); c3 = cmsBuildGamma(DbgThread(), 4.84); h1 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c1); h2 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c2); h3 = cmsCreateLinearizationDeviceLinkTHR(DbgThread(), cmsSigGrayData, &c3); SubTest("Gray float optimizeable transform"); xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h2, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); rc &= CheckFloatlinearXFORM(xform1, 1); cmsDeleteTransform(xform1); if (rc == 0) goto Error; SubTest("Gray 8 optimizeable transform"); xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h2, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); rc &= Check8linearXFORM(xform1, 1); cmsDeleteTransform(xform1); if (rc == 0) goto Error; SubTest("Gray 16 optimizeable transform"); xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h2, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); rc &= Check16linearXFORM(xform1, 1); cmsDeleteTransform(xform1); if (rc == 0) goto Error; SubTest("Gray float non-optimizeable transform"); xform1 = cmsCreateTransform(h1, TYPE_GRAY_FLT, h1, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); xform2 = cmsCreateTransform(h3, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); rc &= CompareFloatXFORM(xform1, xform2, 1); cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); if (rc == 0) goto Error; SubTest("Gray 8 non-optimizeable transform"); xform1 = cmsCreateTransform(h1, TYPE_GRAY_8, h1, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); xform2 = cmsCreateTransform(h3, TYPE_GRAY_8, NULL, TYPE_GRAY_8, INTENT_PERCEPTUAL, 0); rc &= Compare8bitXFORM(xform1, xform2, 1); cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); if (rc == 0) goto Error; SubTest("Gray 16 non-optimizeable transform"); xform1 = cmsCreateTransform(h1, TYPE_GRAY_16, h1, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); xform2 = cmsCreateTransform(h3, TYPE_GRAY_16, NULL, TYPE_GRAY_16, INTENT_PERCEPTUAL, 0); rc &= Compare16bitXFORM(xform1, xform2, 1); cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); if (rc == 0) goto Error; Error: cmsCloseProfile(h1); cmsCloseProfile(h2); cmsCloseProfile(h3); cmsFreeToneCurve(c1); cmsFreeToneCurve(c2); cmsFreeToneCurve(c3); return rc; } // Lab to Lab trivial transforms ---------------------------------------------------------------------------------------- static cmsFloat64Number MaxDE; static cmsInt32Number CheckOneLab(cmsHTRANSFORM xform, cmsFloat64Number L, cmsFloat64Number a, cmsFloat64Number b) { cmsCIELab In, Out; cmsFloat64Number dE; In.L = L; In.a = a; In.b = b; cmsDoTransform(xform, &In, &Out, 1); dE = cmsDeltaE(&In, &Out); if (dE > MaxDE) MaxDE = dE; if (MaxDE > 0.003) { Fail("dE=%f Lab1=(%f, %f, %f)\n\tLab2=(%f %f %f)", MaxDE, In.L, In.a, In.b, Out.L, Out.a, Out.b); cmsDoTransform(xform, &In, &Out, 1); return 0; } return 1; } // Check several Lab, slicing at non-exact values. Precision should be 16 bits. 50x50x50 checks aprox. static cmsInt32Number CheckSeveralLab(cmsHTRANSFORM xform) { cmsInt32Number L, a, b; MaxDE = 0; for (L=0; L < 65536; L += 1311) { for (a = 0; a < 65536; a += 1232) { for (b = 0; b < 65536; b += 1111) { if (!CheckOneLab(xform, (L * 100.0) / 65535.0, (a / 257.0) - 128, (b / 257.0) - 128)) return 0; } } } return 1; } static cmsInt32Number OneTrivialLab(cmsHPROFILE hLab1, cmsHPROFILE hLab2, const char* txt) { cmsHTRANSFORM xform; cmsInt32Number rc; SubTest(txt); xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); rc = CheckSeveralLab(xform); cmsDeleteTransform(xform); return rc; } static cmsInt32Number CheckFloatLabTransforms(void) { return OneTrivialLab(cmsCreateLab4ProfileTHR(DbgThread(), NULL), cmsCreateLab4ProfileTHR(DbgThread(), NULL), "Lab4/Lab4") && OneTrivialLab(cmsCreateLab2ProfileTHR(DbgThread(), NULL), cmsCreateLab2ProfileTHR(DbgThread(), NULL), "Lab2/Lab2") && OneTrivialLab(cmsCreateLab4ProfileTHR(DbgThread(), NULL), cmsCreateLab2ProfileTHR(DbgThread(), NULL), "Lab4/Lab2") && OneTrivialLab(cmsCreateLab2ProfileTHR(DbgThread(), NULL), cmsCreateLab4ProfileTHR(DbgThread(), NULL), "Lab2/Lab4"); } static cmsInt32Number CheckEncodedLabTransforms(void) { cmsHTRANSFORM xform; cmsUInt16Number In[3]; cmsCIELab Lab; cmsCIELab White = { 100, 0, 0 }; cmsHPROFILE hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); cmsHPROFILE hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); In[0] = 0xFFFF; In[1] = 0x8080; In[2] = 0x8080; cmsDoTransform(xform, In, &Lab, 1); if (cmsDeltaE(&Lab, &White) > 0.0001) return 0; cmsDeleteTransform(xform); hLab1 = cmsCreateLab2ProfileTHR(DbgThread(), NULL); hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_LabV2_16, hLab2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); In[0] = 0xFF00; In[1] = 0x8000; In[2] = 0x8000; cmsDoTransform(xform, In, &Lab, 1); if (cmsDeltaE(&Lab, &White) > 0.0001) return 0; cmsDeleteTransform(xform); hLab2 = cmsCreateLab2ProfileTHR(DbgThread(), NULL); hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_LabV2_16, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); Lab.L = 100; Lab.a = 0; Lab.b = 0; cmsDoTransform(xform, &Lab, In, 1); if (In[0] != 0xFF00 || In[1] != 0x8000 || In[2] != 0x8000) return 0; cmsDeleteTransform(xform); hLab1 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); hLab2 = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hLab1, TYPE_Lab_DBL, hLab2, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hLab1); cmsCloseProfile(hLab2); Lab.L = 100; Lab.a = 0; Lab.b = 0; cmsDoTransform(xform, &Lab, In, 1); if (In[0] != 0xFFFF || In[1] != 0x8080 || In[2] != 0x8080) return 0; cmsDeleteTransform(xform); return 1; } static cmsInt32Number CheckStoredIdentities(void) { cmsHPROFILE hLab, hLink, h4, h2; cmsHTRANSFORM xform; cmsInt32Number rc = 1; hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hLab, TYPE_Lab_8, hLab, TYPE_Lab_8, 0, 0); hLink = cmsTransform2DeviceLink(xform, 3.4, 0); cmsSaveProfileToFile(hLink, "abstractv2.icc"); cmsCloseProfile(hLink); hLink = cmsTransform2DeviceLink(xform, 4.3, 0); cmsSaveProfileToFile(hLink, "abstractv4.icc"); cmsCloseProfile(hLink); cmsDeleteTransform(xform); cmsCloseProfile(hLab); h4 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv4.icc", "r"); xform = cmsCreateTransformTHR(DbgThread(), h4, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); SubTest("V4"); rc &= CheckSeveralLab(xform); cmsDeleteTransform(xform); cmsCloseProfile(h4); if (!rc) goto Error; SubTest("V2"); h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); xform = cmsCreateTransformTHR(DbgThread(), h2, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); rc &= CheckSeveralLab(xform); cmsDeleteTransform(xform); cmsCloseProfile(h2); if (!rc) goto Error; SubTest("V2 -> V4"); h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); h4 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv4.icc", "r"); xform = cmsCreateTransformTHR(DbgThread(), h4, TYPE_Lab_DBL, h2, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); rc &= CheckSeveralLab(xform); cmsDeleteTransform(xform); cmsCloseProfile(h2); cmsCloseProfile(h4); SubTest("V4 -> V2"); h2 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv2.icc", "r"); h4 = cmsOpenProfileFromFileTHR(DbgThread(), "abstractv4.icc", "r"); xform = cmsCreateTransformTHR(DbgThread(), h2, TYPE_Lab_DBL, h4, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); rc &= CheckSeveralLab(xform); cmsDeleteTransform(xform); cmsCloseProfile(h2); cmsCloseProfile(h4); Error: remove("abstractv2.icc"); remove("abstractv4.icc"); return rc; } // Check a simple xform from a matrix profile to itself. Test floating point accuracy. static cmsInt32Number CheckMatrixShaperXFORMFloat(void) { cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; hAbove = Create_AboveRGB(); xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hAbove); rc1 = CheckFloatlinearXFORM(xform, 3); cmsDeleteTransform(xform); hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); xform = cmsCreateTransformTHR(DbgThread(), hSRGB, TYPE_RGB_FLT, hSRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hSRGB); rc2 = CheckFloatlinearXFORM(xform, 3); cmsDeleteTransform(xform); return rc1 && rc2; } // Check a simple xform from a matrix profile to itself. Test 16 bits accuracy. static cmsInt32Number CheckMatrixShaperXFORM16(void) { cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; hAbove = Create_AboveRGB(); xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hAbove); rc1 = Check16linearXFORM(xform, 3); cmsDeleteTransform(xform); hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); xform = cmsCreateTransformTHR(DbgThread(), hSRGB, TYPE_RGB_16, hSRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hSRGB); rc2 = Check16linearXFORM(xform, 3); cmsDeleteTransform(xform); return rc1 && rc2; } // Check a simple xform from a matrix profile to itself. Test 8 bits accuracy. static cmsInt32Number CheckMatrixShaperXFORM8(void) { cmsHPROFILE hAbove, hSRGB; cmsHTRANSFORM xform; cmsInt32Number rc1, rc2; hAbove = Create_AboveRGB(); xform = cmsCreateTransformTHR(DbgThread(), hAbove, TYPE_RGB_8, hAbove, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hAbove); rc1 = Check8linearXFORM(xform, 3); cmsDeleteTransform(xform); hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); xform = cmsCreateTransformTHR(DbgThread(), hSRGB, TYPE_RGB_8, hSRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hSRGB); rc2 = Check8linearXFORM(xform, 3); cmsDeleteTransform(xform); return rc1 && rc2; } // TODO: Check LUT based to LUT based transforms for CMYK // ----------------------------------------------------------------------------------------------------------------- // Check known values going from sRGB to XYZ static cmsInt32Number CheckOneRGB_f(cmsHTRANSFORM xform, cmsInt32Number R, cmsInt32Number G, cmsInt32Number B, cmsFloat64Number X, cmsFloat64Number Y, cmsFloat64Number Z, cmsFloat64Number err) { cmsFloat32Number RGB[3]; cmsFloat64Number Out[3]; RGB[0] = (cmsFloat32Number) (R / 255.0); RGB[1] = (cmsFloat32Number) (G / 255.0); RGB[2] = (cmsFloat32Number) (B / 255.0); cmsDoTransform(xform, RGB, Out, 1); return IsGoodVal("X", X , Out[0], err) && IsGoodVal("Y", Y , Out[1], err) && IsGoodVal("Z", Z , Out[2], err); } static cmsInt32Number Chack_sRGB_Float(void) { cmsHPROFILE hsRGB, hXYZ, hLab; cmsHTRANSFORM xform1, xform2; cmsInt32Number rc; hsRGB = cmsCreate_sRGBProfileTHR(DbgThread()); hXYZ = cmsCreateXYZProfileTHR(DbgThread()); hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform1 = cmsCreateTransformTHR(DbgThread(), hsRGB, TYPE_RGB_FLT, hXYZ, TYPE_XYZ_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); xform2 = cmsCreateTransformTHR(DbgThread(), hsRGB, TYPE_RGB_FLT, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hsRGB); cmsCloseProfile(hXYZ); cmsCloseProfile(hLab); MaxErr = 0; // Xform 1 goes from 8 bits to XYZ, rc = CheckOneRGB_f(xform1, 1, 1, 1, 0.0002927, 0.0003035, 0.000250, 0.0001); rc &= CheckOneRGB_f(xform1, 127, 127, 127, 0.2046329, 0.212230, 0.175069, 0.0001); rc &= CheckOneRGB_f(xform1, 12, 13, 15, 0.0038364, 0.0039928, 0.003853, 0.0001); rc &= CheckOneRGB_f(xform1, 128, 0, 0, 0.0941240, 0.0480256, 0.003005, 0.0001); rc &= CheckOneRGB_f(xform1, 190, 25, 210, 0.3204592, 0.1605926, 0.468213, 0.0001); // Xform 2 goes from 8 bits to Lab, we allow 0.01 error max rc &= CheckOneRGB_f(xform2, 1, 1, 1, 0.2741748, 0, 0, 0.01); rc &= CheckOneRGB_f(xform2, 127, 127, 127, 53.192776, 0, 0, 0.01); rc &= CheckOneRGB_f(xform2, 190, 25, 210, 47.052136, 74.565610, -56.883274, 0.01); rc &= CheckOneRGB_f(xform2, 128, 0, 0, 26.164701, 48.478171, 39.4384713, 0.01); cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); return rc; } // --------------------------------------------------- static cmsBool GetProfileRGBPrimaries(cmsHPROFILE hProfile, cmsCIEXYZTRIPLE *result, cmsUInt32Number intent) { cmsHPROFILE hXYZ; cmsHTRANSFORM hTransform; cmsFloat64Number rgb[3][3] = {{1., 0., 0.}, {0., 1., 0.}, {0., 0., 1.}}; hXYZ = cmsCreateXYZProfile(); if (hXYZ == NULL) return FALSE; hTransform = cmsCreateTransform(hProfile, TYPE_RGB_DBL, hXYZ, TYPE_XYZ_DBL, intent, cmsFLAGS_NOCACHE | cmsFLAGS_NOOPTIMIZE); cmsCloseProfile(hXYZ); if (hTransform == NULL) return FALSE; cmsDoTransform(hTransform, rgb, result, 3); cmsDeleteTransform(hTransform); return TRUE; } static int CheckRGBPrimaries(void) { cmsHPROFILE hsRGB; cmsCIEXYZTRIPLE tripXYZ; cmsCIExyYTRIPLE tripxyY; cmsBool result; cmsSetAdaptationState(0); hsRGB = cmsCreate_sRGBProfileTHR(DbgThread()); if (!hsRGB) return 0; result = GetProfileRGBPrimaries(hsRGB, &tripXYZ, INTENT_ABSOLUTE_COLORIMETRIC); cmsCloseProfile(hsRGB); if (!result) return 0; cmsXYZ2xyY(&tripxyY.Red, &tripXYZ.Red); cmsXYZ2xyY(&tripxyY.Green, &tripXYZ.Green); cmsXYZ2xyY(&tripxyY.Blue, &tripXYZ.Blue); /* valus were taken from http://en.wikipedia.org/wiki/RGB_color_spaces#Specifications */ if (!IsGoodFixed15_16("xRed", tripxyY.Red.x, 0.64) || !IsGoodFixed15_16("yRed", tripxyY.Red.y, 0.33) || !IsGoodFixed15_16("xGreen", tripxyY.Green.x, 0.30) || !IsGoodFixed15_16("yGreen", tripxyY.Green.y, 0.60) || !IsGoodFixed15_16("xBlue", tripxyY.Blue.x, 0.15) || !IsGoodFixed15_16("yBlue", tripxyY.Blue.y, 0.06)) { Fail("One or more primaries are wrong."); return FALSE; } return TRUE; } // ----------------------------------------------------------------------------------------------------------------- // This function will check CMYK -> CMYK transforms. It uses FOGRA29 and SWOP ICC profiles static cmsInt32Number CheckCMYK(cmsInt32Number Intent, const char *Profile1, const char* Profile2) { cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), Profile1, "r"); cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), Profile2, "r"); cmsHTRANSFORM xform, swop_lab, fogra_lab; cmsFloat32Number CMYK1[4], CMYK2[4]; cmsCIELab Lab1, Lab2; cmsHPROFILE hLab; cmsFloat64Number DeltaL, Max; cmsInt32Number i; hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, Intent, 0); swop_lab = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); fogra_lab = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, Intent, 0); Max = 0; for (i=0; i <= 100; i++) { CMYK1[0] = 10; CMYK1[1] = 20; CMYK1[2] = 30; CMYK1[3] = (cmsFloat32Number) i; cmsDoTransform(swop_lab, CMYK1, &Lab1, 1); cmsDoTransform(xform, CMYK1, CMYK2, 1); cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1); DeltaL = fabs(Lab1.L - Lab2.L); if (DeltaL > Max) Max = DeltaL; } cmsDeleteTransform(xform); xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, Intent, 0); for (i=0; i <= 100; i++) { CMYK1[0] = 10; CMYK1[1] = 20; CMYK1[2] = 30; CMYK1[3] = (cmsFloat32Number) i; cmsDoTransform(fogra_lab, CMYK1, &Lab1, 1); cmsDoTransform(xform, CMYK1, CMYK2, 1); cmsDoTransform(swop_lab, CMYK2, &Lab2, 1); DeltaL = fabs(Lab1.L - Lab2.L); if (DeltaL > Max) Max = DeltaL; } cmsCloseProfile(hSWOP); cmsCloseProfile(hFOGRA); cmsCloseProfile(hLab); cmsDeleteTransform(xform); cmsDeleteTransform(swop_lab); cmsDeleteTransform(fogra_lab); return Max < 3.0; } static cmsInt32Number CheckCMYKRoundtrip(void) { return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test1.icc"); } static cmsInt32Number CheckCMYKPerceptual(void) { return CheckCMYK(INTENT_PERCEPTUAL, "test1.icc", "test2.icc"); } static cmsInt32Number CheckCMYKRelCol(void) { return CheckCMYK(INTENT_RELATIVE_COLORIMETRIC, "test1.icc", "test2.icc"); } static cmsInt32Number CheckKOnlyBlackPreserving(void) { cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), "test2.icc", "r"); cmsHTRANSFORM xform, swop_lab, fogra_lab; cmsFloat32Number CMYK1[4], CMYK2[4]; cmsCIELab Lab1, Lab2; cmsHPROFILE hLab; cmsFloat64Number DeltaL, Max; cmsInt32Number i; hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); swop_lab = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); fogra_lab = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); Max = 0; for (i=0; i <= 100; i++) { CMYK1[0] = 0; CMYK1[1] = 0; CMYK1[2] = 0; CMYK1[3] = (cmsFloat32Number) i; // SWOP CMYK to Lab1 cmsDoTransform(swop_lab, CMYK1, &Lab1, 1); // SWOP To FOGRA using black preservation cmsDoTransform(xform, CMYK1, CMYK2, 1); // Obtained FOGRA CMYK to Lab2 cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1); // We care only on L* DeltaL = fabs(Lab1.L - Lab2.L); if (DeltaL > Max) Max = DeltaL; } cmsDeleteTransform(xform); // dL should be below 3.0 // Same, but FOGRA to SWOP xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_ONLY_PERCEPTUAL, 0); for (i=0; i <= 100; i++) { CMYK1[0] = 0; CMYK1[1] = 0; CMYK1[2] = 0; CMYK1[3] = (cmsFloat32Number) i; cmsDoTransform(fogra_lab, CMYK1, &Lab1, 1); cmsDoTransform(xform, CMYK1, CMYK2, 1); cmsDoTransform(swop_lab, CMYK2, &Lab2, 1); DeltaL = fabs(Lab1.L - Lab2.L); if (DeltaL > Max) Max = DeltaL; } cmsCloseProfile(hSWOP); cmsCloseProfile(hFOGRA); cmsCloseProfile(hLab); cmsDeleteTransform(xform); cmsDeleteTransform(swop_lab); cmsDeleteTransform(fogra_lab); return Max < 3.0; } static cmsInt32Number CheckKPlaneBlackPreserving(void) { cmsHPROFILE hSWOP = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); cmsHPROFILE hFOGRA = cmsOpenProfileFromFileTHR(DbgThread(), "test2.icc", "r"); cmsHTRANSFORM xform, swop_lab, fogra_lab; cmsFloat32Number CMYK1[4], CMYK2[4]; cmsCIELab Lab1, Lab2; cmsHPROFILE hLab; cmsFloat64Number DeltaE, Max; cmsInt32Number i; hLab = cmsCreateLab4ProfileTHR(DbgThread(), NULL); xform = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hFOGRA, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, 0); swop_lab = cmsCreateTransformTHR(DbgThread(), hSWOP, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); fogra_lab = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hLab, TYPE_Lab_DBL, INTENT_PERCEPTUAL, 0); Max = 0; for (i=0; i <= 100; i++) { CMYK1[0] = 0; CMYK1[1] = 0; CMYK1[2] = 0; CMYK1[3] = (cmsFloat32Number) i; cmsDoTransform(swop_lab, CMYK1, &Lab1, 1); cmsDoTransform(xform, CMYK1, CMYK2, 1); cmsDoTransform(fogra_lab, CMYK2, &Lab2, 1); DeltaE = cmsDeltaE(&Lab1, &Lab2); if (DeltaE > Max) Max = DeltaE; } cmsDeleteTransform(xform); xform = cmsCreateTransformTHR(DbgThread(), hFOGRA, TYPE_CMYK_FLT, hSWOP, TYPE_CMYK_FLT, INTENT_PRESERVE_K_PLANE_PERCEPTUAL, 0); for (i=0; i <= 100; i++) { CMYK1[0] = 30; CMYK1[1] = 20; CMYK1[2] = 10; CMYK1[3] = (cmsFloat32Number) i; cmsDoTransform(fogra_lab, CMYK1, &Lab1, 1); cmsDoTransform(xform, CMYK1, CMYK2, 1); cmsDoTransform(swop_lab, CMYK2, &Lab2, 1); DeltaE = cmsDeltaE(&Lab1, &Lab2); if (DeltaE > Max) Max = DeltaE; } cmsDeleteTransform(xform); cmsCloseProfile(hSWOP); cmsCloseProfile(hFOGRA); cmsCloseProfile(hLab); cmsDeleteTransform(swop_lab); cmsDeleteTransform(fogra_lab); return Max < 30.0; } // ------------------------------------------------------------------------------------------------------ static cmsInt32Number CheckProofingXFORMFloat(void) { cmsHPROFILE hAbove; cmsHTRANSFORM xform; cmsInt32Number rc; hAbove = Create_AboveRGB(); xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING); cmsCloseProfile(hAbove); rc = CheckFloatlinearXFORM(xform, 3); cmsDeleteTransform(xform); return rc; } static cmsInt32Number CheckProofingXFORM16(void) { cmsHPROFILE hAbove; cmsHTRANSFORM xform; cmsInt32Number rc; hAbove = Create_AboveRGB(); xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_SOFTPROOFING|cmsFLAGS_NOCACHE); cmsCloseProfile(hAbove); rc = Check16linearXFORM(xform, 3); cmsDeleteTransform(xform); return rc; } static cmsInt32Number CheckGamutCheck(void) { cmsHPROFILE hSRGB, hAbove; cmsHTRANSFORM xform; cmsInt32Number rc; cmsUInt16Number Alarm[16] = { 0xDEAD, 0xBABE, 0xFACE }; // Set alarm codes to fancy values so we could check the out of gamut condition cmsSetAlarmCodes(Alarm); // Create the profiles hSRGB = cmsCreate_sRGBProfileTHR(DbgThread()); hAbove = Create_AboveRGB(); if (hSRGB == NULL || hAbove == NULL) return 0; // Failed SubTest("Gamut check on floating point"); // Create a gamut checker in the same space. No value should be out of gamut xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_FLT, hAbove, TYPE_RGB_FLT, hAbove, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); if (!CheckFloatlinearXFORM(xform, 3)) { cmsCloseProfile(hSRGB); cmsCloseProfile(hAbove); cmsDeleteTransform(xform); Fail("Gamut check on same profile failed"); return 0; } cmsDeleteTransform(xform); SubTest("Gamut check on 16 bits"); xform = cmsCreateProofingTransformTHR(DbgThread(), hAbove, TYPE_RGB_16, hAbove, TYPE_RGB_16, hSRGB, INTENT_RELATIVE_COLORIMETRIC, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK); cmsCloseProfile(hSRGB); cmsCloseProfile(hAbove); rc = Check16linearXFORM(xform, 3); cmsDeleteTransform(xform); return rc; } // ------------------------------------------------------------------------------------------------------------------- static cmsInt32Number CheckBlackPoint(void) { cmsHPROFILE hProfile; cmsCIEXYZ Black; cmsCIELab Lab; hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test5.icc", "r"); cmsDetectDestinationBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hProfile); hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); cmsDetectDestinationBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); cmsXYZ2Lab(NULL, &Lab, &Black); cmsCloseProfile(hProfile); hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "lcms2cmyk.icc", "r"); cmsDetectDestinationBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); cmsXYZ2Lab(NULL, &Lab, &Black); cmsCloseProfile(hProfile); hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test2.icc", "r"); cmsDetectDestinationBlackPoint(&Black, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); cmsXYZ2Lab(NULL, &Lab, &Black); cmsCloseProfile(hProfile); hProfile = cmsOpenProfileFromFileTHR(DbgThread(), "test1.icc", "r"); cmsDetectDestinationBlackPoint(&Black, hProfile, INTENT_PERCEPTUAL, 0); cmsXYZ2Lab(NULL, &Lab, &Black); cmsCloseProfile(hProfile); return 1; } static cmsInt32Number CheckOneTAC(cmsFloat64Number InkLimit) { cmsHPROFILE h; cmsFloat64Number d; h =CreateFakeCMYK(InkLimit, TRUE); cmsSaveProfileToFile(h, "lcmstac.icc"); cmsCloseProfile(h); h = cmsOpenProfileFromFile("lcmstac.icc", "r"); d = cmsDetectTAC(h); cmsCloseProfile(h); remove("lcmstac.icc"); if (fabs(d - InkLimit) > 5) return 0; return 1; } static cmsInt32Number CheckTAC(void) { if (!CheckOneTAC(180)) return 0; if (!CheckOneTAC(220)) return 0; if (!CheckOneTAC(286)) return 0; if (!CheckOneTAC(310)) return 0; if (!CheckOneTAC(330)) return 0; return 1; } // ------------------------------------------------------------------------------------------------------- #define NPOINTS_IT8 10 // (17*17*17*17) static cmsInt32Number CheckCGATS(void) { cmsHANDLE it8; cmsInt32Number i; SubTest("IT8 creation"); it8 = cmsIT8Alloc(DbgThread()); if (it8 == NULL) return 0; cmsIT8SetSheetType(it8, "LCMS/TESTING"); cmsIT8SetPropertyStr(it8, "ORIGINATOR", "1 2 3 4"); cmsIT8SetPropertyUncooked(it8, "DESCRIPTOR", "1234"); cmsIT8SetPropertyStr(it8, "MANUFACTURER", "3"); cmsIT8SetPropertyDbl(it8, "CREATED", 4); cmsIT8SetPropertyDbl(it8, "SERIAL", 5); cmsIT8SetPropertyHex(it8, "MATERIAL", 0x123); cmsIT8SetPropertyDbl(it8, "NUMBER_OF_SETS", NPOINTS_IT8); cmsIT8SetPropertyDbl(it8, "NUMBER_OF_FIELDS", 4); cmsIT8SetDataFormat(it8, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(it8, 1, "RGB_R"); cmsIT8SetDataFormat(it8, 2, "RGB_G"); cmsIT8SetDataFormat(it8, 3, "RGB_B"); SubTest("Table creation"); for (i=0; i < NPOINTS_IT8; i++) { char Patch[20]; sprintf(Patch, "P%d", i); cmsIT8SetDataRowCol(it8, i, 0, Patch); cmsIT8SetDataRowColDbl(it8, i, 1, i); cmsIT8SetDataRowColDbl(it8, i, 2, i); cmsIT8SetDataRowColDbl(it8, i, 3, i); } SubTest("Save to file"); cmsIT8SaveToFile(it8, "TEST.IT8"); cmsIT8Free(it8); SubTest("Load from file"); it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8"); if (it8 == NULL) return 0; SubTest("Save again file"); cmsIT8SaveToFile(it8, "TEST.IT8"); cmsIT8Free(it8); SubTest("Load from file (II)"); it8 = cmsIT8LoadFromFile(DbgThread(), "TEST.IT8"); if (it8 == NULL) return 0; SubTest("Change prop value"); if (cmsIT8GetPropertyDbl(it8, "DESCRIPTOR") != 1234) { return 0; } cmsIT8SetPropertyDbl(it8, "DESCRIPTOR", 5678); if (cmsIT8GetPropertyDbl(it8, "DESCRIPTOR") != 5678) { return 0; } SubTest("Positive numbers"); if (cmsIT8GetDataDbl(it8, "P3", "RGB_G") != 3) { return 0; } SubTest("Positive exponent numbers"); cmsIT8SetPropertyDbl(it8, "DBL_PROP", 123E+12); if ((cmsIT8GetPropertyDbl(it8, "DBL_PROP") - 123E+12) > 1 ) { return 0; } SubTest("Negative exponent numbers"); cmsIT8SetPropertyDbl(it8, "DBL_PROP_NEG", 123E-45); if ((cmsIT8GetPropertyDbl(it8, "DBL_PROP_NEG") - 123E-45) > 1E-45 ) { return 0; } SubTest("Negative numbers"); cmsIT8SetPropertyDbl(it8, "DBL_NEG_VAL", -123); if ((cmsIT8GetPropertyDbl(it8, "DBL_NEG_VAL")) != -123 ) { return 0; } cmsIT8Free(it8); remove("TEST.IT8"); return 1; } static cmsInt32Number CheckCGATS2(void) { cmsHANDLE handle; const cmsUInt8Number junk[] = { 0x0, 0xd, 0xd, 0xa, 0x20, 0xd, 0x20, 0x20, 0x20, 0x3a, 0x31, 0x3d, 0x3d, 0x3d, 0x3d }; handle = cmsIT8LoadFromMem(0, (const void*)junk, sizeof(junk)); if (handle) cmsIT8Free(handle); return 1; } static cmsInt32Number CheckCGATS_Overflow(void) { cmsHANDLE handle; const cmsUInt8Number junk[] = { "@\nA 1.e2147483648\n" }; handle = cmsIT8LoadFromMem(0, (const void*)junk, sizeof(junk)); if (handle) cmsIT8Free(handle); return 1; } // Create CSA/CRD static void GenerateCSA(const char* cInProf, const char* FileName) { cmsHPROFILE hProfile; cmsUInt32Number n; char* Buffer; cmsContext BuffThread = DbgThread(); FILE* o; if (cInProf == NULL) hProfile = cmsCreateLab4Profile(NULL); else hProfile = cmsOpenProfileFromFile(cInProf, "r"); n = cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, NULL, 0); if (n == 0) return; Buffer = (char*) _cmsMalloc(BuffThread, n + 1); cmsGetPostScriptCSA(DbgThread(), hProfile, 0, 0, Buffer, n); Buffer[n] = 0; if (FileName != NULL) { o = fopen(FileName, "wb"); fwrite(Buffer, n, 1, o); fclose(o); } _cmsFree(BuffThread, Buffer); cmsCloseProfile(hProfile); if (FileName != NULL) remove(FileName); } static void GenerateCRD(const char* cOutProf, const char* FileName) { cmsHPROFILE hProfile; cmsUInt32Number n; char* Buffer; cmsUInt32Number dwFlags = 0; cmsContext BuffThread = DbgThread(); if (cOutProf == NULL) hProfile = cmsCreateLab4Profile(NULL); else hProfile = cmsOpenProfileFromFile(cOutProf, "r"); n = cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, NULL, 0); if (n == 0) return; Buffer = (char*) _cmsMalloc(BuffThread, n + 1); cmsGetPostScriptCRD(DbgThread(), hProfile, 0, dwFlags, Buffer, n); Buffer[n] = 0; if (FileName != NULL) { FILE* o = fopen(FileName, "wb"); fwrite(Buffer, n, 1, o); fclose(o); } _cmsFree(BuffThread, Buffer); cmsCloseProfile(hProfile); if (FileName != NULL) remove(FileName); } static cmsInt32Number CheckPostScript(void) { GenerateCSA("test5.icc", "sRGB_CSA.ps"); GenerateCSA("aRGBlcms2.icc", "aRGB_CSA.ps"); GenerateCSA("test4.icc", "sRGBV4_CSA.ps"); GenerateCSA("test1.icc", "SWOP_CSA.ps"); GenerateCSA(NULL, "Lab_CSA.ps"); GenerateCSA("graylcms2.icc", "gray_CSA.ps"); GenerateCRD("test5.icc", "sRGB_CRD.ps"); GenerateCRD("aRGBlcms2.icc", "aRGB_CRD.ps"); GenerateCRD(NULL, "Lab_CRD.ps"); GenerateCRD("test1.icc", "SWOP_CRD.ps"); GenerateCRD("test4.icc", "sRGBV4_CRD.ps"); GenerateCRD("graylcms2.icc", "gray_CRD.ps"); return 1; } static cmsInt32Number CheckGray(cmsHTRANSFORM xform, cmsUInt8Number g, double L) { cmsCIELab Lab; cmsDoTransform(xform, &g, &Lab, 1); if (!IsGoodVal("a axis on gray", 0, Lab.a, 0.001)) return 0; if (!IsGoodVal("b axis on gray", 0, Lab.b, 0.001)) return 0; return IsGoodVal("Gray value", L, Lab.L, 0.01); } static cmsInt32Number CheckInputGray(void) { cmsHPROFILE hGray = Create_Gray22(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHTRANSFORM xform; if (hGray == NULL || hLab == NULL) return 0; xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hGray); cmsCloseProfile(hLab); if (!CheckGray(xform, 0, 0)) return 0; if (!CheckGray(xform, 125, 52.768)) return 0; if (!CheckGray(xform, 200, 81.069)) return 0; if (!CheckGray(xform, 255, 100.0)) return 0; cmsDeleteTransform(xform); return 1; } static cmsInt32Number CheckLabInputGray(void) { cmsHPROFILE hGray = Create_GrayLab(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHTRANSFORM xform; if (hGray == NULL || hLab == NULL) return 0; xform = cmsCreateTransform(hGray, TYPE_GRAY_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hGray); cmsCloseProfile(hLab); if (!CheckGray(xform, 0, 0)) return 0; if (!CheckGray(xform, 125, 49.019)) return 0; if (!CheckGray(xform, 200, 78.431)) return 0; if (!CheckGray(xform, 255, 100.0)) return 0; cmsDeleteTransform(xform); return 1; } static cmsInt32Number CheckOutGray(cmsHTRANSFORM xform, double L, cmsUInt8Number g) { cmsCIELab Lab; cmsUInt8Number g_out; Lab.L = L; Lab.a = 0; Lab.b = 0; cmsDoTransform(xform, &Lab, &g_out, 1); return IsGoodVal("Gray value", g, (double) g_out, 0.01); } static cmsInt32Number CheckOutputGray(void) { cmsHPROFILE hGray = Create_Gray22(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHTRANSFORM xform; if (hGray == NULL || hLab == NULL) return 0; xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hGray); cmsCloseProfile(hLab); if (!CheckOutGray(xform, 0, 0)) return 0; if (!CheckOutGray(xform, 100, 255)) return 0; if (!CheckOutGray(xform, 20, 52)) return 0; if (!CheckOutGray(xform, 50, 118)) return 0; cmsDeleteTransform(xform); return 1; } static cmsInt32Number CheckLabOutputGray(void) { cmsHPROFILE hGray = Create_GrayLab(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHTRANSFORM xform; cmsInt32Number i; if (hGray == NULL || hLab == NULL) return 0; xform = cmsCreateTransform( hLab, TYPE_Lab_DBL, hGray, TYPE_GRAY_8, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(hGray); cmsCloseProfile(hLab); if (!CheckOutGray(xform, 0, 0)) return 0; if (!CheckOutGray(xform, 100, 255)) return 0; for (i=0; i < 100; i++) { cmsUInt8Number g; g = (cmsUInt8Number) floor(i * 255.0 / 100.0 + 0.5); if (!CheckOutGray(xform, i, g)) return 0; } cmsDeleteTransform(xform); return 1; } static cmsInt32Number CheckV4gamma(void) { cmsHPROFILE h; cmsUInt16Number Lin[] = {0, 0xffff}; cmsToneCurve*g = cmsBuildTabulatedToneCurve16(DbgThread(), 2, Lin); h = cmsOpenProfileFromFileTHR(DbgThread(), "v4gamma.icc", "w"); if (h == NULL) return 0; cmsSetProfileVersion(h, 4.3); if (!cmsWriteTag(h, cmsSigGrayTRCTag, g)) return 0; cmsCloseProfile(h); cmsFreeToneCurve(g); remove("v4gamma.icc"); return 1; } // cmsBool cmsGBDdumpVRML(cmsHANDLE hGBD, const char* fname); // Gamut descriptor routines static cmsInt32Number CheckGBD(void) { cmsCIELab Lab; cmsHANDLE h; cmsInt32Number L, a, b; cmsUInt32Number r1, g1, b1; cmsHPROFILE hLab, hsRGB; cmsHTRANSFORM xform; h = cmsGBDAlloc(DbgThread()); if (h == NULL) return 0; // Fill all Lab gamut as valid SubTest("Filling RAW gamut"); for (L=0; L <= 100; L += 10) for (a = -128; a <= 128; a += 5) for (b = -128; b <= 128; b += 5) { Lab.L = L; Lab.a = a; Lab.b = b; if (!cmsGDBAddPoint(h, &Lab)) return 0; } // Complete boundaries SubTest("computing Lab gamut"); if (!cmsGDBCompute(h, 0)) return 0; // All points should be inside gamut SubTest("checking Lab gamut"); for (L=10; L <= 90; L += 25) for (a = -120; a <= 120; a += 25) for (b = -120; b <= 120; b += 25) { Lab.L = L; Lab.a = a; Lab.b = b; if (!cmsGDBCheckPoint(h, &Lab)) { return 0; } } cmsGBDFree(h); // Now for sRGB SubTest("checking sRGB gamut"); h = cmsGBDAlloc(DbgThread()); hsRGB = cmsCreate_sRGBProfile(); hLab = cmsCreateLab4Profile(NULL); xform = cmsCreateTransform(hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); cmsCloseProfile(hsRGB); cmsCloseProfile(hLab); for (r1=0; r1 < 256; r1 += 5) { for (g1=0; g1 < 256; g1 += 5) for (b1=0; b1 < 256; b1 += 5) { cmsUInt8Number rgb[3]; rgb[0] = (cmsUInt8Number) r1; rgb[1] = (cmsUInt8Number) g1; rgb[2] = (cmsUInt8Number) b1; cmsDoTransform(xform, rgb, &Lab, 1); // if (fabs(Lab.b) < 20 && Lab.a > 0) continue; if (!cmsGDBAddPoint(h, &Lab)) { cmsGBDFree(h); return 0; } } } if (!cmsGDBCompute(h, 0)) return 0; // cmsGBDdumpVRML(h, "c:\\colormaps\\lab.wrl"); for (r1=10; r1 < 200; r1 += 10) { for (g1=10; g1 < 200; g1 += 10) for (b1=10; b1 < 200; b1 += 10) { cmsUInt8Number rgb[3]; rgb[0] = (cmsUInt8Number) r1; rgb[1] = (cmsUInt8Number) g1; rgb[2] = (cmsUInt8Number) b1; cmsDoTransform(xform, rgb, &Lab, 1); if (!cmsGDBCheckPoint(h, &Lab)) { cmsDeleteTransform(xform); cmsGBDFree(h); return 0; } } } cmsDeleteTransform(xform); cmsGBDFree(h); SubTest("checking LCh chroma ring"); h = cmsGBDAlloc(DbgThread()); for (r1=0; r1 < 360; r1++) { cmsCIELCh LCh; LCh.L = 70; LCh.C = 60; LCh.h = r1; cmsLCh2Lab(&Lab, &LCh); if (!cmsGDBAddPoint(h, &Lab)) { cmsGBDFree(h); return 0; } } if (!cmsGDBCompute(h, 0)) return 0; cmsGBDFree(h); return 1; } static int CheckMD5(void) { _cmsICCPROFILE* h; cmsHPROFILE pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); cmsProfileID ProfileID1, ProfileID2, ProfileID3, ProfileID4; h =(_cmsICCPROFILE*) pProfile; if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID1.ID8); if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID2.ID8); cmsCloseProfile(pProfile); pProfile = cmsOpenProfileFromFile("sRGBlcms2.icc", "r"); h =(_cmsICCPROFILE*) pProfile; if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile, ProfileID3.ID8); if (cmsMD5computeID(pProfile)) cmsGetHeaderProfileID(pProfile,ProfileID4.ID8); cmsCloseProfile(pProfile); return ((memcmp(ProfileID1.ID8, ProfileID3.ID8, sizeof(ProfileID1)) == 0) && (memcmp(ProfileID2.ID8, ProfileID4.ID8, sizeof(ProfileID2)) == 0)); } static int CheckLinking(void) { cmsHPROFILE h; cmsPipeline * pipeline; cmsStage *stageBegin, *stageEnd; // Create a CLUT based profile h = cmsCreateInkLimitingDeviceLinkTHR(DbgThread(), cmsSigCmykData, 150); // link a second tag cmsLinkTag(h, cmsSigAToB1Tag, cmsSigAToB0Tag); // Save the linked devicelink if (!cmsSaveProfileToFile(h, "lcms2link.icc")) return 0; cmsCloseProfile(h); // Now open the profile and read the pipeline h = cmsOpenProfileFromFile("lcms2link.icc", "r"); if (h == NULL) return 0; pipeline = (cmsPipeline*) cmsReadTag(h, cmsSigAToB1Tag); if (pipeline == NULL) { return 0; } pipeline = cmsPipelineDup(pipeline); // extract stage from pipe line cmsPipelineUnlinkStage(pipeline, cmsAT_BEGIN, &stageBegin); cmsPipelineUnlinkStage(pipeline, cmsAT_END, &stageEnd); cmsPipelineInsertStage(pipeline, cmsAT_END, stageEnd); cmsPipelineInsertStage(pipeline, cmsAT_BEGIN, stageBegin); if (cmsTagLinkedTo(h, cmsSigAToB1Tag) != cmsSigAToB0Tag) return 0; cmsWriteTag(h, cmsSigAToB0Tag, pipeline); cmsPipelineFree(pipeline); if (!cmsSaveProfileToFile(h, "lcms2link2.icc")) return 0; cmsCloseProfile(h); return 1; } // TestMPE // // Created by Paul Miller on 30/08/2016. // static cmsHPROFILE IdentityMatrixProfile( cmsColorSpaceSignature dataSpace) { cmsContext ctx = 0; cmsVEC3 zero = {{0,0,0}}; cmsMAT3 identity; cmsPipeline* forward; cmsPipeline* reverse; cmsHPROFILE identityProfile = cmsCreateProfilePlaceholder( ctx); cmsSetProfileVersion(identityProfile, 4.3); cmsSetDeviceClass( identityProfile, cmsSigColorSpaceClass); cmsSetColorSpace(identityProfile, dataSpace); cmsSetPCS(identityProfile, cmsSigXYZData); cmsSetHeaderRenderingIntent(identityProfile, INTENT_RELATIVE_COLORIMETRIC); cmsWriteTag(identityProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ()); _cmsMAT3identity( &identity); // build forward transform.... (RGB to PCS) forward = cmsPipelineAlloc( 0, 3, 3); cmsPipelineInsertStage( forward, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero)); cmsWriteTag( identityProfile, cmsSigDToB1Tag, forward); cmsPipelineFree( forward); reverse = cmsPipelineAlloc( 0, 3, 3); cmsPipelineInsertStage( reverse, cmsAT_END, cmsStageAllocMatrix( ctx, 3, 3, (cmsFloat64Number*)&identity, (cmsFloat64Number*)&zero)); cmsWriteTag( identityProfile, cmsSigBToD1Tag, reverse); cmsPipelineFree( reverse); return identityProfile; } static cmsInt32Number CheckFloatXYZ(void) { cmsHPROFILE input; cmsHPROFILE xyzProfile = cmsCreateXYZProfile(); cmsHTRANSFORM xform; cmsFloat32Number in[4]; cmsFloat32Number out[4]; in[0] = 1.0; in[1] = 1.0; in[2] = 1.0; in[3] = 0.5; // RGB to XYZ input = IdentityMatrixProfile( cmsSigRgbData); xform = cmsCreateTransform( input, TYPE_RGB_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(input); cmsDoTransform( xform, in, out, 1); cmsDeleteTransform( xform); if (!IsGoodVal("Float RGB->XYZ", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->XYZ", in[1], out[1], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->XYZ", in[2], out[2], FLOAT_PRECISSION)) return 0; // XYZ to XYZ input = IdentityMatrixProfile( cmsSigXYZData); xform = cmsCreateTransform( input, TYPE_XYZ_FLT, xyzProfile, TYPE_XYZ_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(input); cmsDoTransform( xform, in, out, 1); cmsDeleteTransform( xform); if (!IsGoodVal("Float XYZ->XYZ", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float XYZ->XYZ", in[1], out[1], FLOAT_PRECISSION) || !IsGoodVal("Float XYZ->XYZ", in[2], out[2], FLOAT_PRECISSION)) return 0; input = IdentityMatrixProfile( cmsSigXYZData); # define TYPE_XYZA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)) xform = cmsCreateTransform( input, TYPE_XYZA_FLT, xyzProfile, TYPE_XYZA_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA); cmsCloseProfile(input); cmsDoTransform( xform, in, out, 1); cmsDeleteTransform( xform); if (!IsGoodVal("Float XYZA->XYZA", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float XYZA->XYZA", in[1], out[1], FLOAT_PRECISSION) || !IsGoodVal("Float XYZA->XYZA", in[2], out[2], FLOAT_PRECISSION) || !IsGoodVal("Float XYZA->XYZA", in[3], out[3], FLOAT_PRECISSION)) return 0; // XYZ to RGB input = IdentityMatrixProfile( cmsSigRgbData); xform = cmsCreateTransform( xyzProfile, TYPE_XYZ_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(input); cmsDoTransform( xform, in, out, 1); cmsDeleteTransform( xform); if (!IsGoodVal("Float XYZ->RGB", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float XYZ->RGB", in[1], out[1], FLOAT_PRECISSION) || !IsGoodVal("Float XYZ->RGB", in[2], out[2], FLOAT_PRECISSION)) return 0; // Now the optimizer should remove a stage // XYZ to RGB input = IdentityMatrixProfile( cmsSigRgbData); xform = cmsCreateTransform( input, TYPE_RGB_FLT, input, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, 0); cmsCloseProfile(input); cmsDoTransform( xform, in, out, 1); cmsDeleteTransform( xform); if (!IsGoodVal("Float RGB->RGB", in[0], out[0], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", in[1], out[1], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", in[2], out[2], FLOAT_PRECISSION)) return 0; cmsCloseProfile(xyzProfile); return 1; } /* Bug reported 1) sRGB built-in V4.3 -> Lab identity built-in V4.3 Flags: "cmsFLAGS_NOCACHE", "cmsFLAGS_NOOPTIMIZE" Input format: TYPE_RGBA_FLT Output format: TYPE_LabA_FLT 2) and back Lab identity built-in V4.3 -> sRGB built-in V4.3 Flags: "cmsFLAGS_NOCACHE", "cmsFLAGS_NOOPTIMIZE" Input format: TYPE_LabA_FLT Output format: TYPE_RGBA_FLT */ static cmsInt32Number ChecksRGB2LabFLT(void) { cmsHPROFILE hSRGB = cmsCreate_sRGBProfile(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHTRANSFORM xform1 = cmsCreateTransform(hSRGB, TYPE_RGBA_FLT, hLab, TYPE_LabA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); cmsHTRANSFORM xform2 = cmsCreateTransform(hLab, TYPE_LabA_FLT, hSRGB, TYPE_RGBA_FLT, 0, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); cmsFloat32Number RGBA1[4], RGBA2[4], LabA[4]; int i; for (i = 0; i <= 100; i++) { RGBA1[0] = i / 100.0F; RGBA1[1] = i / 100.0F; RGBA1[2] = i / 100.0F; RGBA1[3] = 0; cmsDoTransform(xform1, RGBA1, LabA, 1); cmsDoTransform(xform2, LabA, RGBA2, 1); if (!IsGoodVal("Float RGB->RGB", RGBA1[0], RGBA2[0], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", RGBA1[1], RGBA2[1], FLOAT_PRECISSION) || !IsGoodVal("Float RGB->RGB", RGBA1[2], RGBA2[2], FLOAT_PRECISSION)) return 0; } cmsDeleteTransform(xform1); cmsDeleteTransform(xform2); cmsCloseProfile(hSRGB); cmsCloseProfile(hLab); return 1; } /* * parametric curve for Rec709 */ static double Rec709(double L) { if (L <0.018) return 4.5*L; else { double a = 1.099* pow(L, 0.45); a = a - 0.099; return a; } } static cmsInt32Number CheckParametricRec709(void) { cmsFloat64Number params[7]; cmsToneCurve* t; int i; params[0] = 0.45; /* y */ params[1] = pow(1.099, 1.0 / 0.45); /* a */ params[2] = 0.0; /* b */ params[3] = 4.5; /* c */ params[4] = 0.018; /* d */ params[5] = -0.099; /* e */ params[6] = 0.0; /* f */ t = cmsBuildParametricToneCurve (NULL, 5, params); for (i=0; i < 256; i++) { cmsFloat32Number n = (cmsFloat32Number) i / 255.0F; cmsUInt16Number f1 = (cmsUInt16Number) floor(255.0 * cmsEvalToneCurveFloat(t, n) + 0.5); cmsUInt16Number f2 = (cmsUInt16Number) floor(255.0*Rec709((double) i / 255.0) + 0.5); if (f1 != f2) { cmsFreeToneCurve(t); return 0; } } cmsFreeToneCurve(t); return 1; } #define kNumPoints 10 typedef cmsFloat32Number(*Function)(cmsFloat32Number x); static cmsFloat32Number StraightLine( cmsFloat32Number x) { return (cmsFloat32Number) (0.1 + 0.9 * x); } static cmsInt32Number TestCurve( const char* label, cmsToneCurve* curve, Function fn) { cmsInt32Number ok = 1; int i; for (i = 0; i < kNumPoints*3; i++) { cmsFloat32Number x = (cmsFloat32Number)i / (kNumPoints*3 - 1); cmsFloat32Number expectedY = fn(x); cmsFloat32Number out = cmsEvalToneCurveFloat( curve, x); if (!IsGoodVal(label, expectedY, out, FLOAT_PRECISSION)) { ok = 0; } } return ok; } static cmsInt32Number CheckFloatSamples(void) { cmsFloat32Number y[kNumPoints]; int i; cmsToneCurve *curve; cmsInt32Number ok; for (i = 0; i < kNumPoints; i++) { cmsFloat32Number x = (cmsFloat32Number)i / (kNumPoints-1); y[i] = StraightLine(x); } curve = cmsBuildTabulatedToneCurveFloat(NULL, kNumPoints, y); ok = TestCurve( "Float Samples", curve, StraightLine); cmsFreeToneCurve(curve); return ok; } static cmsInt32Number CheckFloatSegments(void) { cmsInt32Number ok = 1; int i; cmsToneCurve *curve; cmsFloat32Number y[ kNumPoints]; // build a segmented curve with a sampled section... cmsCurveSegment Seg[3]; // Initialize segmented curve part up to 0.1 Seg[0].x0 = -1e22f; // -infinity Seg[0].x1 = 0.1f; Seg[0].Type = 6; // Y = (a * X + b) ^ Gamma + c Seg[0].Params[0] = 1.0f; // gamma Seg[0].Params[1] = 0.9f; // a Seg[0].Params[2] = 0.0f; // b Seg[0].Params[3] = 0.1f; // c Seg[0].Params[4] = 0.0f; // From zero to 1 Seg[1].x0 = 0.1f; Seg[1].x1 = 0.9f; Seg[1].Type = 0; Seg[1].nGridPoints = kNumPoints; Seg[1].SampledPoints = y; for (i = 0; i < kNumPoints; i++) { cmsFloat32Number x = (cmsFloat32Number) (0.1 + ((cmsFloat32Number)i / (kNumPoints-1)) * (0.9 - 0.1)); y[i] = StraightLine(x); } // from 1 to +infinity Seg[2].x0 = 0.9f; Seg[2].x1 = 1e22f; // +infinity Seg[2].Type = 6; Seg[2].Params[0] = 1.0f; Seg[2].Params[1] = 0.9f; Seg[2].Params[2] = 0.0f; Seg[2].Params[3] = 0.1f; Seg[2].Params[4] = 0.0f; curve = cmsBuildSegmentedToneCurve(0, 3, Seg); ok = TestCurve( "Float Segmented Curve", curve, StraightLine); cmsFreeToneCurve( curve); return ok; } static cmsInt32Number CheckReadRAW(void) { cmsInt32Number tag_size, tag_size1; char buffer[4]; cmsHPROFILE hProfile; SubTest("RAW read on on-disk"); hProfile = cmsOpenProfileFromFile("test1.icc", "r"); if (hProfile == NULL) return 0; tag_size = cmsReadRawTag(hProfile, cmsSigGamutTag, buffer, 4); tag_size1 = cmsReadRawTag(hProfile, cmsSigGamutTag, NULL, 0); cmsCloseProfile(hProfile); if (tag_size != 4) return 0; if (tag_size1 != 37009) return 0; SubTest("RAW read on in-memory created profiles"); hProfile = cmsCreate_sRGBProfile(); tag_size = cmsReadRawTag(hProfile, cmsSigGreenColorantTag, buffer, 4); tag_size1 = cmsReadRawTag(hProfile, cmsSigGreenColorantTag, NULL, 0); cmsCloseProfile(hProfile); if (tag_size != 4) return 0; if (tag_size1 != 20) return 0; return 1; } static cmsInt32Number CheckMeta(void) { char *data; cmsHANDLE dict; cmsHPROFILE p; cmsUInt32Number clen; FILE *fp; int rc; /* open file */ p = cmsOpenProfileFromFile("ibm-t61.icc", "r"); if (p == NULL) return 0; /* read dictionary, but don't do anything with the value */ //COMMENT OUT THE NEXT TWO LINES AND IT WORKS FINE!!! dict = cmsReadTag(p, cmsSigMetaTag); if (dict == NULL) return 0; /* serialize profile to memory */ rc = cmsSaveProfileToMem(p, NULL, &clen); if (!rc) return 0; data = (char*) malloc(clen); rc = cmsSaveProfileToMem(p, data, &clen); if (!rc) return 0; /* write the memory blob to a file */ //NOTE: The crash does not happen if cmsSaveProfileToFile() is used */ fp = fopen("new.icc", "wb"); fwrite(data, 1, clen, fp); fclose(fp); free(data); cmsCloseProfile(p); /* open newly created file and read metadata */ p = cmsOpenProfileFromFile("new.icc", "r"); //ERROR: Bad dictionary Name/Value //ERROR: Corrupted tag 'meta' //test: test.c:59: main: Assertion `dict' failed. dict = cmsReadTag(p, cmsSigMetaTag); if (dict == NULL) return 0; cmsCloseProfile(p); return 1; } // Bug on applying null transforms on floating point buffers static cmsInt32Number CheckFloatNULLxform(void) { int i; cmsFloat32Number in[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; cmsFloat32Number out[10]; cmsHTRANSFORM xform = cmsCreateTransform(NULL, TYPE_GRAY_FLT, NULL, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NULLTRANSFORM); if (xform == NULL) { Fail("Unable to create float null transform"); return 0; } cmsDoTransform(xform, in, out, 10); cmsDeleteTransform(xform); for (i=0; i < 10; i++) { if (!IsGoodVal("float nullxform", in[i], out[i], 0.001)) { return 0; } } return 1; } static cmsInt32Number CheckRemoveTag(void) { cmsHPROFILE p; cmsMLU *mlu; int ret; p = cmsCreate_sRGBProfileTHR(NULL); /* set value */ mlu = cmsMLUalloc (NULL, 1); ret = cmsMLUsetASCII (mlu, "en", "US", "bar"); if (!ret) return 0; ret = cmsWriteTag (p, cmsSigDeviceMfgDescTag, mlu); if (!ret) return 0; cmsMLUfree (mlu); /* remove the tag */ ret = cmsWriteTag (p, cmsSigDeviceMfgDescTag, NULL); if (!ret) return 0; /* THIS EXPLODES */ cmsCloseProfile(p); return 1; } static cmsInt32Number CheckMatrixSimplify(void) { cmsHPROFILE pIn; cmsHPROFILE pOut; cmsHTRANSFORM t; unsigned char buf[3] = { 127, 32, 64 }; pIn = cmsCreate_sRGBProfile(); pOut = cmsOpenProfileFromFile("ibm-t61.icc", "r"); if (pIn == NULL || pOut == NULL) return 0; t = cmsCreateTransform(pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, 0); cmsDoTransformStride(t, buf, buf, 1, 1); cmsDeleteTransform(t); cmsCloseProfile(pIn); cmsCloseProfile(pOut); return buf[0] == 144 && buf[1] == 0 && buf[2] == 69; } static cmsInt32Number CheckTransformLineStride(void) { cmsHPROFILE pIn; cmsHPROFILE pOut; cmsHTRANSFORM t; // Our buffer is formed by 4 RGB8 lines, each line is 2 pixels wide plus a padding of one byte cmsUInt8Number buf1[]= { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, }; // Our buffer2 is formed by 4 RGBA lines, each line is 2 pixels wide plus a padding of one byte cmsUInt8Number buf2[] = { 0xff, 0xff, 0xff, 1, 0xff, 0xff, 0xff, 1, 0, 0xff, 0xff, 0xff, 1, 0xff, 0xff, 0xff, 1, 0, 0xff, 0xff, 0xff, 1, 0xff, 0xff, 0xff, 1, 0, 0xff, 0xff, 0xff, 1, 0xff, 0xff, 0xff, 1, 0}; // Our buffer3 is formed by 4 RGBA16 lines, each line is 2 pixels wide plus a padding of two bytes cmsUInt16Number buf3[] = { 0xffff, 0xffff, 0xffff, 0x0101, 0xffff, 0xffff, 0xffff, 0x0101, 0, 0xffff, 0xffff, 0xffff, 0x0101, 0xffff, 0xffff, 0xffff, 0x0101, 0, 0xffff, 0xffff, 0xffff, 0x0101, 0xffff, 0xffff, 0xffff, 0x0101, 0, 0xffff, 0xffff, 0xffff, 0x0101, 0xffff, 0xffff, 0xffff, 0x0101, 0 }; cmsUInt8Number out[1024]; memset(out, 0, sizeof(out)); pIn = cmsCreate_sRGBProfile(); pOut = cmsOpenProfileFromFile("ibm-t61.icc", "r"); if (pIn == NULL || pOut == NULL) return 0; t = cmsCreateTransform(pIn, TYPE_RGB_8, pOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); cmsDoTransformLineStride(t, buf1, out, 2, 4, 7, 7, 0, 0); cmsDeleteTransform(t); if (memcmp(out, buf1, sizeof(buf1)) != 0) { Fail("Failed transform line stride on RGB8"); cmsCloseProfile(pIn); cmsCloseProfile(pOut); return 0; } memset(out, 0, sizeof(out)); t = cmsCreateTransform(pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); cmsDoTransformLineStride(t, buf2, out, 2, 4, 9, 9, 0, 0); cmsDeleteTransform(t); if (memcmp(out, buf2, sizeof(buf2)) != 0) { cmsCloseProfile(pIn); cmsCloseProfile(pOut); Fail("Failed transform line stride on RGBA8"); return 0; } memset(out, 0, sizeof(out)); t = cmsCreateTransform(pIn, TYPE_RGBA_16, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); cmsDoTransformLineStride(t, buf3, out, 2, 4, 18, 18, 0, 0); cmsDeleteTransform(t); if (memcmp(out, buf3, sizeof(buf3)) != 0) { cmsCloseProfile(pIn); cmsCloseProfile(pOut); Fail("Failed transform line stride on RGBA16"); return 0; } memset(out, 0, sizeof(out)); // From 8 to 16 t = cmsCreateTransform(pIn, TYPE_RGBA_8, pOut, TYPE_RGBA_16, INTENT_PERCEPTUAL, cmsFLAGS_COPY_ALPHA); cmsDoTransformLineStride(t, buf2, out, 2, 4, 9, 18, 0, 0); cmsDeleteTransform(t); if (memcmp(out, buf3, sizeof(buf3)) != 0) { cmsCloseProfile(pIn); cmsCloseProfile(pOut); Fail("Failed transform line stride on RGBA16"); return 0; } cmsCloseProfile(pIn); cmsCloseProfile(pOut); return 1; } static int CheckPlanar8opt(void) { cmsHPROFILE aboveRGB = Create_AboveRGB(); cmsHPROFILE sRGB = cmsCreate_sRGBProfile(); cmsHTRANSFORM transform = cmsCreateTransform(sRGB, TYPE_RGB_8_PLANAR, aboveRGB, TYPE_RGB_8_PLANAR, INTENT_PERCEPTUAL, 0); cmsDeleteTransform(transform); cmsCloseProfile(aboveRGB); cmsCloseProfile(sRGB); return 1; } /** * Bug reported & fixed. Thanks to Kornel Lesinski for spotting this. */ static int CheckSE(void) { cmsHPROFILE input_profile = Create_AboveRGB(); cmsHPROFILE output_profile = cmsCreate_sRGBProfile(); cmsHTRANSFORM tr = cmsCreateTransform(input_profile, TYPE_RGBA_8, output_profile, TYPE_RGBA_16_SE, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_COPY_ALPHA); cmsUInt8Number rgba[4] = { 40, 41, 41, 0xfa }; cmsUInt16Number out[4]; cmsDoTransform(tr, rgba, out, 1); cmsCloseProfile(input_profile); cmsCloseProfile(output_profile); cmsDeleteTransform(tr); if (out[0] != 0xf622 || out[1] != 0x7f24 || out[2] != 0x7f24) return 0; return 1; } /** * Bug reported. */ static int CheckForgedMPE(void) { cmsUInt32Number i; cmsHPROFILE srcProfile; cmsHPROFILE dstProfile; cmsColorSpaceSignature srcCS; cmsUInt32Number nSrcComponents; cmsUInt32Number srcFormat; cmsUInt32Number intent = 0; cmsUInt32Number flags = 0; cmsHTRANSFORM hTransform; cmsUInt8Number output[4]; srcProfile = cmsOpenProfileFromFile("bad_mpe.icc", "r"); if (!srcProfile) return 0; dstProfile = cmsCreate_sRGBProfile(); if (!dstProfile) { cmsCloseProfile(srcProfile); return 0; } srcCS = cmsGetColorSpace(srcProfile); nSrcComponents = cmsChannelsOf(srcCS); if (srcCS == cmsSigLabData) { srcFormat = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0); } else { srcFormat = COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1); } cmsSetLogErrorHandler(ErrorReportingFunction); hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, TYPE_BGR_8, intent, flags); cmsCloseProfile(srcProfile); cmsCloseProfile(dstProfile); cmsSetLogErrorHandler(FatalErrorQuit); // Should report error if (!TrappedError) return 0; TrappedError = FALSE; // Transform should NOT be created if (!hTransform) return 1; // Never should reach here if (T_BYTES(srcFormat) == 0) { // 0 means double double input[128]; for (i = 0; i < nSrcComponents; i++) input[i] = 0.5f; cmsDoTransform(hTransform, input, output, 1); } else { cmsUInt8Number input[128]; for (i = 0; i < nSrcComponents; i++) input[i] = 128; cmsDoTransform(hTransform, input, output, 1); } cmsDeleteTransform(hTransform); return 0; } /** * What the self test is trying to do is creating a proofing transform * with gamut check, so we can getting the coverage of one profile of * another, i.e. to approximate the gamut intersection. e.g. * Thanks to Richard Hughes for providing the test */ static int CheckProofingIntersection(void) { cmsHPROFILE profile_null, hnd1, hnd2; cmsHTRANSFORM transform; hnd1 = cmsCreate_sRGBProfile(); hnd2 = Create_AboveRGB(); profile_null = cmsCreateNULLProfileTHR(DbgThread()); transform = cmsCreateProofingTransformTHR(DbgThread(), hnd1, TYPE_RGB_FLT, profile_null, TYPE_GRAY_FLT, hnd2, INTENT_ABSOLUTE_COLORIMETRIC, INTENT_ABSOLUTE_COLORIMETRIC, cmsFLAGS_GAMUTCHECK | cmsFLAGS_SOFTPROOFING); cmsCloseProfile(hnd1); cmsCloseProfile(hnd2); cmsCloseProfile(profile_null); // Failed? if (transform == NULL) return 0; cmsDeleteTransform(transform); return 1; } /** * In 2.11: When I create a RGB profile, set the copyright data with an empty string, * then call cmsMD5computeID on said profile, the program crashes. */ static int CheckEmptyMLUC(void) { cmsContext context = cmsCreateContext(NULL, NULL); cmsCIExyY white = { 0.31271, 0.32902, 1.0 }; cmsCIExyYTRIPLE primaries = { .Red = { 0.640, 0.330, 1.0 }, .Green = { 0.300, 0.600, 1.0 }, .Blue = { 0.150, 0.060, 1.0 } }; cmsFloat64Number parameters[10] = { 2.6, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; cmsToneCurve* toneCurve = cmsBuildParametricToneCurve(context, 1, parameters); cmsToneCurve* toneCurves[3] = { toneCurve, toneCurve, toneCurve }; cmsHPROFILE profile = cmsCreateRGBProfileTHR(context, &white, &primaries, toneCurves); cmsSetLogErrorHandlerTHR(context, FatalErrorQuit); cmsFreeToneCurve(toneCurve); // Set an empty copyright tag. This should log an error. cmsMLU* mlu = cmsMLUalloc(context, 1); cmsMLUsetASCII(mlu, "en", "AU", ""); cmsMLUsetWide(mlu, "en", "EN", L""); cmsWriteTag(profile, cmsSigCopyrightTag, mlu); cmsMLUfree(mlu); // This will cause a crash after setting an empty copyright tag. cmsMD5computeID(profile); // Cleanup cmsCloseProfile(profile); DebugMemDontCheckThis(context); cmsDeleteContext(context); return 1; } // -------------------------------------------------------------------------------------------------- // P E R F O R M A N C E C H E C K S // -------------------------------------------------------------------------------------------------- typedef struct {cmsUInt8Number r, g, b, a;} Scanline_rgba8; typedef struct {cmsUInt16Number r, g, b, a;} Scanline_rgba16; typedef struct {cmsFloat32Number r, g, b, a;} Scanline_rgba32; typedef struct {cmsUInt8Number r, g, b;} Scanline_rgb8; typedef struct {cmsUInt16Number r, g, b;} Scanline_rgb16; typedef struct {cmsFloat32Number r, g, b;} Scanline_rgb32; static void TitlePerformance(const char* Txt) { printf("%-45s: ", Txt); fflush(stdout); } static void PrintPerformance(cmsUInt32Number Bytes, cmsUInt32Number SizeOfPixel, cmsFloat64Number diff) { cmsFloat64Number seconds = (cmsFloat64Number) diff / CLOCKS_PER_SEC; cmsFloat64Number mpix_sec = Bytes / (1024.0*1024.0*seconds*SizeOfPixel); printf("%#4.3g MPixel/sec.\n", mpix_sec); fflush(stdout); } static void SpeedTest32bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgba32 *In; cmsUInt32Number Mb; cmsUInt32Number Interval = 4; // Power of 2 number to increment r,g,b values by in the loops to keep the test duration practically short cmsUInt32Number NumPixels; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGBA_FLT, hlcmsProfileOut, TYPE_RGBA_FLT, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); NumPixels = 256 / Interval * 256 / Interval * 256 / Interval; Mb = NumPixels * sizeof(Scanline_rgba32); In = (Scanline_rgba32 *) malloc(Mb); j = 0; for (r=0; r < 256; r += Interval) for (g=0; g < 256; g += Interval) for (b=0; b < 256; b += Interval) { In[j].r = r / 256.0f; In[j].g = g / 256.0f; In[j].b = b / 256.0f; In[j].a = (In[j].r + In[j].g + In[j].b) / 3; j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, NumPixels); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgba32), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest16bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgb16 *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256*256*256 * sizeof(Scanline_rgb16); In = (Scanline_rgb16*) malloc(Mb); j = 0; for (r=0; r < 256; r++) for (g=0; g < 256; g++) for (b=0; b < 256; b++) { In[j].r = (cmsUInt16Number) ((r << 8) | r); In[j].g = (cmsUInt16Number) ((g << 8) | g); In[j].b = (cmsUInt16Number) ((b << 8) | b); j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgb16), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest32bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgba32 *In; cmsUInt32Number Mb; cmsUInt32Number Interval = 4; // Power of 2 number to increment r,g,b values by in the loops to keep the test duration practically short cmsUInt32Number NumPixels; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_FLT, hlcmsProfileOut, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); NumPixels = 256 / Interval * 256 / Interval * 256 / Interval; Mb = NumPixels * sizeof(Scanline_rgba32); In = (Scanline_rgba32 *) malloc(Mb); j = 0; for (r=0; r < 256; r += Interval) for (g=0; g < 256; g += Interval) for (b=0; b < 256; b += Interval) { In[j].r = r / 256.0f; In[j].g = g / 256.0f; In[j].b = b / 256.0f; In[j].a = (In[j].r + In[j].g + In[j].b) / 3; j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, NumPixels); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgba32), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest16bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgba16 *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_16, hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256*256*256*sizeof(Scanline_rgba16); In = (Scanline_rgba16*) malloc(Mb); j = 0; for (r=0; r < 256; r++) for (g=0; g < 256; g++) for (b=0; b < 256; b++) { In[j].r = (cmsUInt16Number) ((r << 8) | r); In[j].g = (cmsUInt16Number) ((g << 8) | g); In[j].b = (cmsUInt16Number) ((b << 8) | b); In[j].a = 0; j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgba16), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest8bits(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgb8 *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256*256*256*sizeof(Scanline_rgb8); In = (Scanline_rgb8*) malloc(Mb); j = 0; for (r=0; r < 256; r++) for (g=0; g < 256; g++) for (b=0; b < 256; b++) { In[j].r = (cmsUInt8Number) r; In[j].g = (cmsUInt8Number) g; In[j].b = (cmsUInt8Number) b; j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgb8), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest8bitsCMYK(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgba8 *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_CMYK_8, hlcmsProfileOut, TYPE_CMYK_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256*256*256*sizeof(Scanline_rgba8); In = (Scanline_rgba8*) malloc(Mb); j = 0; for (r=0; r < 256; r++) for (g=0; g < 256; g++) for (b=0; b < 256; b++) { In[j].r = (cmsUInt8Number) r; In[j].g = (cmsUInt8Number) g; In[j].b = (cmsUInt8Number) b; In[j].a = (cmsUInt8Number) 0; j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(Scanline_rgba8), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest32bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; cmsFloat32Number *In; cmsUInt32Number Mb; cmsUInt32Number Interval = 4; // Power of 2 number to increment r,g,b values by in the loops to keep the test duration practically short cmsUInt32Number NumPixels; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_GRAY_FLT, hlcmsProfileOut, TYPE_GRAY_FLT, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); NumPixels = 256 / Interval * 256 / Interval * 256 / Interval; Mb = NumPixels * sizeof(cmsFloat32Number); In = (cmsFloat32Number*) malloc(Mb); j = 0; for (r = 0; r < 256; r += Interval) for (g = 0; g < 256; g += Interval) for (b = 0; b < 256; b += Interval) { In[j] = ((r + g + b) / 768.0f); j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, NumPixels); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(cmsFloat32Number), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest16bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; cmsUInt16Number *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_GRAY_16, hlcmsProfileOut, TYPE_GRAY_16, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256*256*256 * sizeof(cmsUInt16Number); In = (cmsUInt16Number *) malloc(Mb); j = 0; for (r=0; r < 256; r++) for (g=0; g < 256; g++) for (b=0; b < 256; b++) { In[j] = (cmsUInt16Number) ((r + g + b) / 3); j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(cmsUInt16Number), diff); cmsDeleteTransform(hlcmsxform); } static void SpeedTest8bitsGray(const char * Title, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; cmsUInt8Number *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Die("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(DbgThread(), hlcmsProfileIn, TYPE_GRAY_8, hlcmsProfileOut, TYPE_GRAY_8, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256*256*256; In = (cmsUInt8Number*) malloc(Mb); j = 0; for (r=0; r < 256; r++) for (g=0; g < 256; g++) for (b=0; b < 256; b++) { In[j] = (cmsUInt8Number) r; j++; } TitlePerformance(Title); atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256*256*256); diff = clock() - atime; free(In); PrintPerformance(Mb, sizeof(cmsUInt8Number), diff); cmsDeleteTransform(hlcmsxform); } static cmsHPROFILE CreateCurves(void) { cmsToneCurve* Gamma = cmsBuildGamma(DbgThread(), 1.1); cmsToneCurve* Transfer[3]; cmsHPROFILE h; Transfer[0] = Transfer[1] = Transfer[2] = Gamma; h = cmsCreateLinearizationDeviceLink(cmsSigRgbData, Transfer); cmsFreeToneCurve(Gamma); return h; } static void SpeedTest(void) { printf("\n\nP E R F O R M A N C E T E S T S\n"); printf( "=================================\n\n"); fflush(stdout); SpeedTest8bits("8 bits on CLUT profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); SpeedTest16bits("16 bits on CLUT profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); SpeedTest32bits("32 bits on CLUT profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on Matrix-Shaper profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); SpeedTest16bits("16 bits on Matrix-Shaper profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); SpeedTest32bits("32 bits on Matrix-Shaper profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on SAME Matrix-Shaper profiles", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test5.icc", "r"), INTENT_PERCEPTUAL); SpeedTest16bits("16 bits on SAME Matrix-Shaper profiles", cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); SpeedTest32bits("32 bits on SAME Matrix-Shaper profiles", cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on Matrix-Shaper profiles (AbsCol)", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); SpeedTest16bits("16 bits on Matrix-Shaper profiles (AbsCol)", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); SpeedTest32bits("32 bits on Matrix-Shaper profiles (AbsCol)", cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("aRGBlcms2.icc", "r"), INTENT_ABSOLUTE_COLORIMETRIC); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bits("8 bits on curves", CreateCurves(), CreateCurves(), INTENT_PERCEPTUAL); SpeedTest16bits("16 bits on curves", CreateCurves(), CreateCurves(), INTENT_PERCEPTUAL); SpeedTest32bits("32 bits on curves", CreateCurves(), CreateCurves(), INTENT_PERCEPTUAL); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsCMYK("8 bits on CMYK profiles", cmsOpenProfileFromFile("test1.icc", "r"), cmsOpenProfileFromFile("test2.icc", "r")); SpeedTest16bitsCMYK("16 bits on CMYK profiles", cmsOpenProfileFromFile("test1.icc", "r"), cmsOpenProfileFromFile("test2.icc", "r")); SpeedTest32bitsCMYK("32 bits on CMYK profiles", cmsOpenProfileFromFile("test1.icc", "r"), cmsOpenProfileFromFile("test2.icc", "r")); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsGray("8 bits on gray-to gray", cmsOpenProfileFromFile("gray3lcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); SpeedTest16bitsGray("16 bits on gray-to gray", cmsOpenProfileFromFile("gray3lcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); SpeedTest32bitsGray("32 bits on gray-to gray", cmsOpenProfileFromFile("gray3lcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsGray("8 bits on gray-to-lab gray", cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); SpeedTest16bitsGray("16 bits on gray-to-lab gray", cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); SpeedTest32bitsGray("32 bits on gray-to-lab gray", cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("glablcms2.icc", "r"), INTENT_RELATIVE_COLORIMETRIC); printf("\n"); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SpeedTest8bitsGray("8 bits on SAME gray-to-gray", cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_PERCEPTUAL); SpeedTest16bitsGray("16 bits on SAME gray-to-gray", cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_PERCEPTUAL); SpeedTest32bitsGray("32 bits on SAME gray-to-gray", cmsOpenProfileFromFile("graylcms2.icc", "r"), cmsOpenProfileFromFile("graylcms2.icc", "r"), INTENT_PERCEPTUAL); printf("\n"); } // ----------------------------------------------------------------------------------------------------- // Print the supported intents static void PrintSupportedIntents(void) { cmsUInt32Number n, i; cmsUInt32Number Codes[200]; char* Descriptions[200]; n = cmsGetSupportedIntents(200, Codes, Descriptions); printf("Supported intents:\n"); for (i=0; i < n; i++) { printf("\t%u - %s\n", Codes[i], Descriptions[i]); } printf("\n"); } // --------------------------------------------------------------------------------------- int main(int argc, char* argv[]) { cmsInt32Number Exhaustive = 0; cmsInt32Number DoSpeedTests = 1; cmsInt32Number DoCheckTests = 1; cmsInt32Number DoPluginTests = 1; cmsInt32Number DoZooTests = 0; #ifdef _MSC_VER _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif // First of all, check for the right header if (cmsGetEncodedCMMversion() != LCMS_VERSION) { Die("Oops, you are mixing header and shared lib!\nHeader version reports to be '%d' and shared lib '%d'\n", LCMS_VERSION, cmsGetEncodedCMMversion()); } printf("LittleCMS %2.2f test bed %s %s\n\n", LCMS_VERSION / 1000.0, __DATE__, __TIME__); if ((argc == 2) && strcmp(argv[1], "--exhaustive") == 0) { Exhaustive = 1; printf("Running exhaustive tests (will take a while...)\n\n"); } #ifdef LCMS_FAST_EXTENSIONS printf("Installing fast float extension ..."); cmsPlugin(cmsFastFloatExtensions()); printf("done.\n"); #endif printf("Installing debug memory plug-in ... "); cmsPlugin(&DebugMemHandler); printf("done.\n"); printf("Installing error logger ... "); cmsSetLogErrorHandler(FatalErrorQuit); printf("done.\n"); PrintSupportedIntents(); Check("Base types", CheckBaseTypes); Check("endianness", CheckEndianness); Check("quick floor", CheckQuickFloor); Check("quick floor word", CheckQuickFloorWord); Check("Fixed point 15.16 representation", CheckFixedPoint15_16); Check("Fixed point 8.8 representation", CheckFixedPoint8_8); Check("D50 roundtrip", CheckD50Roundtrip); // Create utility profiles if (DoCheckTests || DoSpeedTests) Check("Creation of test profiles", CreateTestProfiles); if (DoCheckTests) { // Forward 1D interpolation Check("1D interpolation in 2pt tables", Check1DLERP2); Check("1D interpolation in 3pt tables", Check1DLERP3); Check("1D interpolation in 4pt tables", Check1DLERP4); Check("1D interpolation in 6pt tables", Check1DLERP6); Check("1D interpolation in 18pt tables", Check1DLERP18); Check("1D interpolation in descending 2pt tables", Check1DLERP2Down); Check("1D interpolation in descending 3pt tables", Check1DLERP3Down); Check("1D interpolation in descending 6pt tables", Check1DLERP6Down); Check("1D interpolation in descending 18pt tables", Check1DLERP18Down); if (Exhaustive) { Check("1D interpolation in n tables", ExhaustiveCheck1DLERP); Check("1D interpolation in descending tables", ExhaustiveCheck1DLERPDown); } // Forward 3D interpolation Check("3D interpolation Tetrahedral (float) ", Check3DinterpolationFloatTetrahedral); Check("3D interpolation Trilinear (float) ", Check3DinterpolationFloatTrilinear); Check("3D interpolation Tetrahedral (16) ", Check3DinterpolationTetrahedral16); Check("3D interpolation Trilinear (16) ", Check3DinterpolationTrilinear16); if (Exhaustive) { Check("Exhaustive 3D interpolation Tetrahedral (float) ", ExaustiveCheck3DinterpolationFloatTetrahedral); Check("Exhaustive 3D interpolation Trilinear (float) ", ExaustiveCheck3DinterpolationFloatTrilinear); Check("Exhaustive 3D interpolation Tetrahedral (16) ", ExhaustiveCheck3DinterpolationTetrahedral16); Check("Exhaustive 3D interpolation Trilinear (16) ", ExhaustiveCheck3DinterpolationTrilinear16); } Check("Reverse interpolation 3 -> 3", CheckReverseInterpolation3x3); Check("Reverse interpolation 4 -> 3", CheckReverseInterpolation4x3); // High dimensionality interpolation Check("3D interpolation", Check3Dinterp); Check("3D interpolation with granularity", Check3DinterpGranular); Check("4D interpolation", Check4Dinterp); Check("4D interpolation with granularity", Check4DinterpGranular); Check("5D interpolation with granularity", Check5DinterpGranular); Check("6D interpolation with granularity", Check6DinterpGranular); Check("7D interpolation with granularity", Check7DinterpGranular); Check("8D interpolation with granularity", Check8DinterpGranular); // Encoding of colorspaces Check("Lab to LCh and back (float only) ", CheckLab2LCh); Check("Lab to XYZ and back (float only) ", CheckLab2XYZ); Check("Lab to xyY and back (float only) ", CheckLab2xyY); Check("Lab V2 encoding", CheckLabV2encoding); Check("Lab V4 encoding", CheckLabV4encoding); // BlackBody Check("Blackbody radiator", CheckTemp2CHRM); // Tone curves Check("Linear gamma curves (16 bits)", CheckGammaCreation16); Check("Linear gamma curves (float)", CheckGammaCreationFlt); Check("Curve 1.8 (float)", CheckGamma18); Check("Curve 2.2 (float)", CheckGamma22); Check("Curve 3.0 (float)", CheckGamma30); Check("Curve 1.8 (table)", CheckGamma18Table); Check("Curve 2.2 (table)", CheckGamma22Table); Check("Curve 3.0 (table)", CheckGamma30Table); Check("Curve 1.8 (word table)", CheckGamma18TableWord); Check("Curve 2.2 (word table)", CheckGamma22TableWord); Check("Curve 3.0 (word table)", CheckGamma30TableWord); Check("Parametric curves", CheckParametricToneCurves); Check("Join curves", CheckJointCurves); Check("Join curves descending", CheckJointCurvesDescending); Check("Join curves degenerated", CheckReverseDegenerated); Check("Join curves sRGB (Float)", CheckJointFloatCurves_sRGB); Check("Join curves sRGB (16 bits)", CheckJoint16Curves_sRGB); Check("Join curves sigmoidal", CheckJointCurvesSShaped); // LUT basics Check("LUT creation & dup", CheckLUTcreation); Check("1 Stage LUT ", Check1StageLUT); Check("2 Stage LUT ", Check2StageLUT); Check("2 Stage LUT (16 bits)", Check2Stage16LUT); Check("3 Stage LUT ", Check3StageLUT); Check("3 Stage LUT (16 bits)", Check3Stage16LUT); Check("4 Stage LUT ", Check4StageLUT); Check("4 Stage LUT (16 bits)", Check4Stage16LUT); Check("5 Stage LUT ", Check5StageLUT); Check("5 Stage LUT (16 bits) ", Check5Stage16LUT); Check("6 Stage LUT ", Check6StageLUT); Check("6 Stage LUT (16 bits) ", Check6Stage16LUT); // LUT operation Check("Lab to Lab LUT (float only) ", CheckLab2LabLUT); Check("XYZ to XYZ LUT (float only) ", CheckXYZ2XYZLUT); Check("Lab to Lab MAT LUT (float only) ", CheckLab2LabMatLUT); Check("Named Color LUT", CheckNamedColorLUT); Check("Usual formatters", CheckFormatters16); Check("Floating point formatters", CheckFormattersFloat); #ifndef CMS_NO_HALF_SUPPORT Check("HALF formatters", CheckFormattersHalf); #endif // ChangeBuffersFormat Check("ChangeBuffersFormat", CheckChangeBufferFormat); // MLU Check("Multilocalized Unicode", CheckMLU); // Named color Check("Named color lists", CheckNamedColorList); // Profile I/O (this one is huge!) Check("Profile creation", CheckProfileCreation); Check("Header version", CheckVersionHeaderWriting); Check("Multilocalized profile", CheckMultilocalizedProfile); // Error reporting Check("Error reporting on bad profiles", CheckErrReportingOnBadProfiles); Check("Error reporting on bad transforms", CheckErrReportingOnBadTransforms); // Transforms Check("Curves only transforms", CheckCurvesOnlyTransforms); Check("Float Lab->Lab transforms", CheckFloatLabTransforms); Check("Encoded Lab->Lab transforms", CheckEncodedLabTransforms); Check("Stored identities", CheckStoredIdentities); Check("Matrix-shaper transform (float)", CheckMatrixShaperXFORMFloat); Check("Matrix-shaper transform (16 bits)", CheckMatrixShaperXFORM16); Check("Matrix-shaper transform (8 bits)", CheckMatrixShaperXFORM8); Check("Primaries of sRGB", CheckRGBPrimaries); // Known values Check("Known values across matrix-shaper", Chack_sRGB_Float); Check("Gray input profile", CheckInputGray); Check("Gray Lab input profile", CheckLabInputGray); Check("Gray output profile", CheckOutputGray); Check("Gray Lab output profile", CheckLabOutputGray); Check("Matrix-shaper proofing transform (float)", CheckProofingXFORMFloat); Check("Matrix-shaper proofing transform (16 bits)", CheckProofingXFORM16); Check("Gamut check", CheckGamutCheck); Check("CMYK roundtrip on perceptual transform", CheckCMYKRoundtrip); Check("CMYK perceptual transform", CheckCMYKPerceptual); // Check("CMYK rel.col. transform", CheckCMYKRelCol); Check("Black ink only preservation", CheckKOnlyBlackPreserving); Check("Black plane preservation", CheckKPlaneBlackPreserving); Check("Deciding curve types", CheckV4gamma); Check("Black point detection", CheckBlackPoint); Check("TAC detection", CheckTAC); Check("CGATS parser", CheckCGATS); Check("CGATS parser on junk", CheckCGATS2); Check("CGATS parser on overflow", CheckCGATS_Overflow); Check("PostScript generator", CheckPostScript); Check("Segment maxima GBD", CheckGBD); Check("MD5 digest", CheckMD5); Check("Linking", CheckLinking); Check("floating point tags on XYZ", CheckFloatXYZ); Check("RGB->Lab->RGB with alpha on FLT", ChecksRGB2LabFLT); Check("Parametric curve on Rec709", CheckParametricRec709); Check("Floating Point sampled curve with non-zero start", CheckFloatSamples); Check("Floating Point segmented curve with short sampled segment", CheckFloatSegments); Check("Read RAW portions", CheckReadRAW); Check("Check MetaTag", CheckMeta); Check("Null transform on floats", CheckFloatNULLxform); Check("Set free a tag", CheckRemoveTag); Check("Matrix simplification", CheckMatrixSimplify); Check("Planar 8 optimization", CheckPlanar8opt); Check("Swap endian feature", CheckSE); Check("Transform line stride RGB", CheckTransformLineStride); Check("Forged MPE profile", CheckForgedMPE); Check("Proofing intersection", CheckProofingIntersection); Check("Empty MLUC", CheckEmptyMLUC); } if (DoPluginTests) { Check("Context memory handling", CheckAllocContext); Check("Simple context functionality", CheckSimpleContext); Check("Alarm codes context", CheckAlarmColorsContext); Check("Adaptation state context", CheckAdaptationStateContext); Check("1D interpolation plugin", CheckInterp1DPlugin); Check("3D interpolation plugin", CheckInterp3DPlugin); Check("Parametric curve plugin", CheckParametricCurvePlugin); Check("Formatters plugin", CheckFormattersPlugin); Check("Tag type plugin", CheckTagTypePlugin); Check("MPE type plugin", CheckMPEPlugin); Check("Optimization plugin", CheckOptimizationPlugin); Check("Rendering intent plugin", CheckIntentPlugin); Check("Full transform plugin", CheckTransformPlugin); Check("Mutex plugin", CheckMutexPlugin); } if (DoSpeedTests) SpeedTest(); #ifdef CMS_IS_WINDOWS_ if (DoZooTests) CheckProfileZOO(); #endif DebugMemPrintTotals(); cmsUnregisterPlugins(); // Cleanup if (DoCheckTests || DoSpeedTests) RemoveTestProfiles(); return TotalFail; } lcms2-2.12rc1/testbed/Makefile.in0000644000175000017500000004755013775114656015627 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building testcms # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = testcms$(EXEEXT) subdir = testbed ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_testcms_OBJECTS = testcms2.$(OBJEXT) testplugin.$(OBJEXT) \ zoo_icc.$(OBJEXT) testcms_OBJECTS = $(am_testcms_OBJECTS) testcms_DEPENDENCIES = $(top_builddir)/src/liblcms2.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = testcms_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testcms_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/testcms2.Po \ ./$(DEPDIR)/testplugin.Po ./$(DEPDIR)/zoo_icc.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(testcms_SOURCES) DIST_SOURCES = $(testcms_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src # CFLAGS = --pedantic -Wall -std=c99 -O2 # The testsuite binary is statically linked. This is necessary as it uses some # of the internal functions that are not necessarily exported by the shared # library. testcms_LDADD = $(top_builddir)/src/liblcms2.la testcms_LDFLAGS = -static @LDFLAGS@ testcms_SOURCES = testcms2.c testplugin.c zoo_icc.c testcms2.h EXTRA_DIST = test1.icc bad.icc toosmall.icc test2.icc \ test3.icc test4.icc \ test5.icc ibm-t61.icc crayons.icc bad_mpe.icc all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testbed/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign testbed/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list testcms$(EXEEXT): $(testcms_OBJECTS) $(testcms_DEPENDENCIES) $(EXTRA_testcms_DEPENDENCIES) @rm -f testcms$(EXEEXT) $(AM_V_CCLD)$(testcms_LINK) $(testcms_OBJECTS) $(testcms_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testcms2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testplugin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoo_icc.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/testcms2.Po -rm -f ./$(DEPDIR)/testplugin.Po -rm -f ./$(DEPDIR)/zoo_icc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/testcms2.Po -rm -f ./$(DEPDIR)/testplugin.Po -rm -f ./$(DEPDIR)/zoo_icc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile check: if [ $(top_srcdir) != $(top_builddir) ]; then \ cp $(top_srcdir)/testbed/*.ic? $(top_builddir)/testbed; \ fi LD_LIBRARY_PATH=$(top_builddir)/src/.libs ./testcms if [ $(top_srcdir) != $(top_builddir) ]; then \ rm -f $(top_builddir)/testbed/*.ic?; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/testbed/crayons.icc0000644000175000017500000002107013775114656015705 0ustar martimarti"8lcmsmntrRGB XYZ  acspAPPL-lcms#|i/dE descbcprtl wtptchad,rXYZbXYZgXYZrTRC gTRC bTRC chrm"$mluc enGB(enUSFCrayon ColoursCrayon Colorsmluc enUS XYZ -sf32 J*XYZ o8XYZ $XYZ bcurv  !#$%&()*+-./02345789:;=>?@BCDEGHIJLMNOQRSTUWXYZ\]^_abcdfghiklmnoqrstvwxy{|}~    "#%&()+-.0134689;<>@ACEFHJKMOPRTUWYZ\^`aceghjlnoqsuvxz|~   !#%(*,.1358:<>ACEHJLOQSVXZ]_adfikmpruwy|~   #&),.147:=?BEHKNQTVY\_behknqtwz} "%),/369=@CGJMQTW[^behlosvy} "%)-148<@CGKORVZ^bfimquy} !%)-159>BFJNSW[_chlpty}  $(-16:?CHMQVZ_chmqv{  !&+/49>CHMRW\afkpuz      " ' , 1 7 < A F L Q V [ a f k q v {      $ ) / 4 : ? E J P V [ a f l r w }      $ * / 5 ; A G M S Y _ d j p v |     & , 2 8 > E K Q W ] d j p v }      ! ( . 5 ; B H O U \ b i o v | ")/6=DJQX_flsz  '.5<CJQX_fmt{  '/6=DLSZbipx #*29AHPW_gnv}'.6>FNU]emu} #+3;DLT\dlt| (08AIQZbjs{ #,4=ENW_hpy &/7@IRZclu~ &/8AJS\enw $.7@IR\enw )2;ENXakt~  *3=FPZcmw '0:DNXblu )3=GQ[epz'1;EPZdoy *4>IS^hs}'2<GR\gr|    ) 4 ? J T _ j u !!!!%!0!;!F!Q!\!g!r!~!!!!!!!!!!!""""%"0"<"G"R"^"i"t""""""""""""####*#5#A#L#X#c#o#z###########$$$$($3$?$K$V$b$n$y$$$$$$$$$$$%%%%)%5%A%M%Y%e%p%|%%%%%%%%%%%& &&#&/&;&G&S&_&k&w&&&&&&&&&&&' ''!'-'9'F'R'^'j'v'''''''''''( ((#(/(;(H(T(`(m(y(((((((((())))()4)A)M)Z)g)s)))))))))))* **$*1*>*J*W*d*q*}**********+ ++$+1+>+K+X+e+r++++++++++,,,,(,5,B,O,\,i,v,,,,,,,,,,---!-/-<-I-V-d-q-~---------....,.9.G.T.a.o.|.........////,/:/G/U/b/p/~/////////000"0/0=0K0Y0g0t00000000001 11(161D1R1`1n1|111111111222$222@2N2\2j2y222222222333#313?3M3\3j3x333333333444$434A4O4^4l4{4444444445 55)575F5T5c5r555555555666!606?6N6\6k6z666666666777,7;7I7X7g7v7777777778 88*898H8W8f8u8888888889 99+9:9I9X9g9w99999999::::.:=:M:\:k:{::::::::;;;%;4;D;S;c;r;;;;;;;;;<<<-<=>>'>7>G>W>g>w>>>>>>>>???'?7?G?W?g?x????????@ @@*@:@J@Z@k@{@@@@@@@@AAA/A?AOA`ApAAAAAAAABBB&B6BGBWBhBxBBBBBBBBCCC/C@CQCaCrCCCCCCCCD DD+D;DLD]DnDDDDDDDDEEE(E9EJE[ElE}EEEEEEEFFF(F9FJF[FlF}FFFFFFFGGG)G;GLG]GnGGGGGGGGH HH-H?HPHaHsHHHHHHHHII"I3IEIVIhIzIIIIIIIJJJ*J;JMJ_JqJJJJJJJJKK"K4KFKXKiK{KKKKKKKL LL.L@LRLdLvLLLLLLLMMM+M=MOMaMsMMMMMMMNNN)N;NMN_NrNNNNNNNOOO)O;ONO`OrOOOOOOOPPP+P=PPPbPuPPPPPPPQ QQ/QAQTQgQyQQQQQQQRR"R4RGRZRmRRRRRRRSSS)SUQUeUxUUUUUUUVV%V8VKV_VrVVVVVVVW W W4WGW[WnWWWWWWWX XX1XEXXXlXXXXXXXY YY0YDYXYkYYYYYYYZ ZZ1ZEZYZlZZZZZZZ[ [[3[G[[[o[[[[[[[\\#\7\K\`\t\\\\\\]]])]=]Q]e]z]]]]]]^^^0^D^Y^m^^^^^^^__%_9_N_b_w______```/`D`X`m```````aa'a;aPaeazaaaaaab b b5bIb^bsbbbbbbccc/cDcYcnccccccddd+d@dUdjdddddddee)e>eSehe}eeeeeeff'f=fRfgf}ffffffgg(g=gSghg~gggggghh*h?hUhjhhhhhhiii-iCiXiniiiiiijjj2jHj]jsjjjjjjk k"k8kNkdkzkkkkkkll*l@lVllllllllmmm3mIm_mummmmmmnn'n=nSnjnnnnnnooo3oIo`ovoooooopp*p@pWpmppppppq q"q8qOqfq|qqqqqrrr2rHr_rvrrrrrrss,sCsZsqsssssstt(t?tVtmttttttuu&u=uTukuuuuuuv v$v;vRvjvvvvvvw w$w;wRwjwwwwwwx x%xyVynyyyyyyzz*zBzZzqzzzzz{{{/{G{_{v{{{{{|||5|M|e|}|||||} }$}<}T}l}}}}}}~~-~E~]~u~~~~~7Og)AZrԀ5Nfȁ*C[tւ 9Qj̓0HazĄ݄(AZrօ!:SlІ4Mgˇ0Ib{Lj,F_xĉމ*C]vŠ܊(B[u‹ۋ(B[uŒ܌)B\vÍݍ+D^xƎ-Ga{ɏ1Keΐ6Pkӑ"\{4Sr ,Kj‰¨$CbÁà<[{ĚĹ6UuŔų0PoƏƮ ,KkNJǪ(GgȆȦ$DdɃɣ"Aaʁʡ @_˟˿?^~̞̾>^~͞;?_Οο @`πϠ!BbЂТ$Deхѥ'Gh҈ҩ +LlӍӭ0PqԒԲ5Vw՗ո;\}ֿ֞!Bcׄץ)Jk،ح1Rsٔٵ:[|ڞڿ"Deۆۨ -Noܑܲ8Y{ݜݾ"Deއި /Prߔߵ<^(Jl7Yz$Fh4Vx#Eg4Vy$Fi7Y{(Jm<^ .Qs!Df7Z}+Nq Cf8[~ .Qt$Hk?b6Z} /Rv'Ko!Dh>b9]4X| 0Tx,Pu)Mr'Ko%ImchrmT{L&f\lcms2-2.12rc1/src/0000755000175000017500000000000013775114656012704 5ustar martimartilcms2-2.12rc1/src/lcms2.def0000644000175000017500000005741713775114656014422 0ustar martimartiLIBRARY LCMS2.DLL EXPORTS _cms15Fixed16toDouble = _cms15Fixed16toDouble _cms8Fixed8toDouble = _cms8Fixed8toDouble cmsAdaptToIlluminant = cmsAdaptToIlluminant _cmsAdjustEndianess16 = _cmsAdjustEndianess16 _cmsAdjustEndianess32 = _cmsAdjustEndianess32 _cmsAdjustEndianess64 = _cmsAdjustEndianess64 cmsAllocNamedColorList = cmsAllocNamedColorList cmsAllocProfileSequenceDescription = cmsAllocProfileSequenceDescription cmsAppendNamedColor = cmsAppendNamedColor cmsBFDdeltaE = cmsBFDdeltaE cmsBuildGamma = cmsBuildGamma cmsBuildParametricToneCurve = cmsBuildParametricToneCurve cmsBuildSegmentedToneCurve = cmsBuildSegmentedToneCurve cmsBuildTabulatedToneCurve16 = cmsBuildTabulatedToneCurve16 cmsBuildTabulatedToneCurveFloat = cmsBuildTabulatedToneCurveFloat _cmsCalloc = _cmsCalloc cmsChannelsOf = cmsChannelsOf cmsCIE2000DeltaE = cmsCIE2000DeltaE cmsCIE94DeltaE = cmsCIE94DeltaE cmsCIECAM02Done = cmsCIECAM02Done cmsCIECAM02Forward = cmsCIECAM02Forward cmsCIECAM02Init = cmsCIECAM02Init cmsCIECAM02Reverse = cmsCIECAM02Reverse cmsCloseIOhandler = cmsCloseIOhandler cmsCloseProfile = cmsCloseProfile cmsCMCdeltaE = cmsCMCdeltaE cmsCreate_sRGBProfile = cmsCreate_sRGBProfile cmsCreate_sRGBProfileTHR = cmsCreate_sRGBProfileTHR cmsCreateBCHSWabstractProfile = cmsCreateBCHSWabstractProfile cmsCreateBCHSWabstractProfileTHR = cmsCreateBCHSWabstractProfileTHR cmsCreateExtendedTransform = cmsCreateExtendedTransform cmsCreateGrayProfile = cmsCreateGrayProfile cmsCreateGrayProfileTHR = cmsCreateGrayProfileTHR cmsCreateInkLimitingDeviceLink = cmsCreateInkLimitingDeviceLink cmsCreateInkLimitingDeviceLinkTHR = cmsCreateInkLimitingDeviceLinkTHR cmsCreateLab2Profile = cmsCreateLab2Profile cmsCreateLab2ProfileTHR = cmsCreateLab2ProfileTHR cmsCreateLab4Profile = cmsCreateLab4Profile cmsCreateLab4ProfileTHR = cmsCreateLab4ProfileTHR cmsCreateLinearizationDeviceLink = cmsCreateLinearizationDeviceLink cmsCreateLinearizationDeviceLinkTHR = cmsCreateLinearizationDeviceLinkTHR cmsCreateMultiprofileTransform = cmsCreateMultiprofileTransform cmsCreateMultiprofileTransformTHR = cmsCreateMultiprofileTransformTHR cmsCreateNULLProfile = cmsCreateNULLProfile cmsCreateNULLProfileTHR = cmsCreateNULLProfileTHR cmsCreateProfilePlaceholder = cmsCreateProfilePlaceholder cmsCreateProofingTransform = cmsCreateProofingTransform cmsCreateProofingTransformTHR = cmsCreateProofingTransformTHR cmsCreateRGBProfile = cmsCreateRGBProfile cmsCreateRGBProfileTHR = cmsCreateRGBProfileTHR cmsCreateTransform = cmsCreateTransform cmsCreateTransformTHR = cmsCreateTransformTHR cmsCreateXYZProfile = cmsCreateXYZProfile cmsCreateXYZProfileTHR = cmsCreateXYZProfileTHR cmsD50_xyY = cmsD50_xyY cmsD50_XYZ = cmsD50_XYZ _cmsDecodeDateTimeNumber = _cmsDecodeDateTimeNumber _cmsDefaultICCintents = _cmsDefaultICCintents cmsDeleteTransform = cmsDeleteTransform cmsDeltaE = cmsDeltaE cmsDetectBlackPoint = cmsDetectBlackPoint cmsDetectDestinationBlackPoint = cmsDetectDestinationBlackPoint cmsDetectTAC = cmsDetectTAC cmsDesaturateLab = cmsDesaturateLab cmsDoTransform = cmsDoTransform cmsDoTransformStride = cmsDoTransformStride cmsDoTransformLineStride = cmsDoTransformLineStride _cmsDoubleTo15Fixed16 = _cmsDoubleTo15Fixed16 _cmsDoubleTo8Fixed8 = _cmsDoubleTo8Fixed8 _cmsDupMem = _cmsDupMem cmsDupNamedColorList = cmsDupNamedColorList cmsDupProfileSequenceDescription = cmsDupProfileSequenceDescription cmsDupToneCurve = cmsDupToneCurve _cmsEncodeDateTimeNumber = _cmsEncodeDateTimeNumber cmsEstimateGamma = cmsEstimateGamma cmsGetToneCurveEstimatedTableEntries = cmsGetToneCurveEstimatedTableEntries cmsGetToneCurveEstimatedTable = cmsGetToneCurveEstimatedTable cmsEvalToneCurve16 = cmsEvalToneCurve16 cmsEvalToneCurveFloat = cmsEvalToneCurveFloat cmsfilelength = cmsfilelength cmsFloat2LabEncoded = cmsFloat2LabEncoded cmsFloat2LabEncodedV2 = cmsFloat2LabEncodedV2 cmsFloat2XYZEncoded = cmsFloat2XYZEncoded cmsFormatterForColorspaceOfProfile = cmsFormatterForColorspaceOfProfile cmsFormatterForPCSOfProfile = cmsFormatterForPCSOfProfile _cmsFree = _cmsFree cmsFreeNamedColorList = cmsFreeNamedColorList cmsFreeProfileSequenceDescription = cmsFreeProfileSequenceDescription cmsFreeToneCurve = cmsFreeToneCurve cmsFreeToneCurveTriple = cmsFreeToneCurveTriple cmsGBDAlloc = cmsGBDAlloc cmsGBDFree = cmsGBDFree cmsGDBAddPoint = cmsGDBAddPoint cmsGDBCheckPoint = cmsGDBCheckPoint cmsGDBCompute = cmsGDBCompute cmsGetAlarmCodes = cmsGetAlarmCodes cmsGetColorSpace = cmsGetColorSpace cmsGetDeviceClass = cmsGetDeviceClass cmsGetEncodedICCversion = cmsGetEncodedICCversion cmsGetHeaderAttributes = cmsGetHeaderAttributes cmsGetHeaderCreationDateTime = cmsGetHeaderCreationDateTime cmsGetHeaderFlags = cmsGetHeaderFlags cmsGetHeaderManufacturer = cmsGetHeaderManufacturer cmsGetHeaderModel = cmsGetHeaderModel cmsGetHeaderProfileID = cmsGetHeaderProfileID cmsGetHeaderRenderingIntent = cmsGetHeaderRenderingIntent cmsGetNamedColorList = cmsGetNamedColorList cmsGetPCS = cmsGetPCS cmsGetPostScriptColorResource = cmsGetPostScriptColorResource cmsGetPostScriptCRD = cmsGetPostScriptCRD cmsGetPostScriptCSA = cmsGetPostScriptCSA cmsGetProfileInfo = cmsGetProfileInfo cmsGetProfileInfoASCII = cmsGetProfileInfoASCII cmsGetProfileContextID = cmsGetProfileContextID cmsGetProfileVersion = cmsGetProfileVersion cmsGetSupportedIntents = cmsGetSupportedIntents cmsGetTagCount = cmsGetTagCount cmsGetTagSignature = cmsGetTagSignature cmsGetTransformContextID = cmsGetTransformContextID _cmsICCcolorSpace = _cmsICCcolorSpace _cmsIOPrintf = _cmsIOPrintf cmsIsCLUT = cmsIsCLUT cmsIsIntentSupported = cmsIsIntentSupported cmsIsMatrixShaper = cmsIsMatrixShaper cmsIsTag = cmsIsTag cmsIsToneCurveDescending = cmsIsToneCurveDescending cmsIsToneCurveLinear = cmsIsToneCurveLinear cmsIsToneCurveMonotonic = cmsIsToneCurveMonotonic cmsIsToneCurveMultisegment = cmsIsToneCurveMultisegment cmsGetToneCurveParametricType = cmsGetToneCurveParametricType cmsIT8Alloc = cmsIT8Alloc cmsIT8DefineDblFormat = cmsIT8DefineDblFormat cmsIT8EnumDataFormat = cmsIT8EnumDataFormat cmsIT8EnumProperties = cmsIT8EnumProperties cmsIT8EnumPropertyMulti = cmsIT8EnumPropertyMulti cmsIT8Free = cmsIT8Free cmsIT8GetData = cmsIT8GetData cmsIT8GetDataDbl = cmsIT8GetDataDbl cmsIT8FindDataFormat = cmsIT8FindDataFormat cmsIT8GetDataRowCol = cmsIT8GetDataRowCol cmsIT8GetDataRowColDbl = cmsIT8GetDataRowColDbl cmsIT8GetPatchName = cmsIT8GetPatchName cmsIT8GetPatchByName = cmsIT8GetPatchByName cmsIT8GetProperty = cmsIT8GetProperty cmsIT8GetPropertyDbl = cmsIT8GetPropertyDbl cmsIT8GetPropertyMulti = cmsIT8GetPropertyMulti cmsIT8GetSheetType = cmsIT8GetSheetType cmsIT8LoadFromFile = cmsIT8LoadFromFile cmsIT8LoadFromMem = cmsIT8LoadFromMem cmsIT8SaveToFile = cmsIT8SaveToFile cmsIT8SaveToMem = cmsIT8SaveToMem cmsIT8SetComment = cmsIT8SetComment cmsIT8SetData = cmsIT8SetData cmsIT8SetDataDbl = cmsIT8SetDataDbl cmsIT8SetDataFormat = cmsIT8SetDataFormat cmsIT8SetDataRowCol = cmsIT8SetDataRowCol cmsIT8SetDataRowColDbl = cmsIT8SetDataRowColDbl cmsIT8SetPropertyDbl = cmsIT8SetPropertyDbl cmsIT8SetPropertyHex = cmsIT8SetPropertyHex cmsIT8SetPropertyStr = cmsIT8SetPropertyStr cmsIT8SetPropertyMulti = cmsIT8SetPropertyMulti cmsIT8SetPropertyUncooked = cmsIT8SetPropertyUncooked cmsIT8SetSheetType = cmsIT8SetSheetType cmsIT8SetTable = cmsIT8SetTable cmsIT8SetTableByLabel = cmsIT8SetTableByLabel cmsIT8SetIndexColumn = cmsIT8SetIndexColumn cmsIT8TableCount = cmsIT8TableCount cmsJoinToneCurve = cmsJoinToneCurve cmsLab2LCh = cmsLab2LCh cmsLab2XYZ = cmsLab2XYZ cmsLabEncoded2Float = cmsLabEncoded2Float cmsLabEncoded2FloatV2 = cmsLabEncoded2FloatV2 cmsLCh2Lab = cmsLCh2Lab _cmsLCMScolorSpace = _cmsLCMScolorSpace cmsLinkTag = cmsLinkTag cmsTagLinkedTo = cmsTagLinkedTo cmsPipelineAlloc = cmsPipelineAlloc cmsPipelineCat = cmsPipelineCat cmsPipelineCheckAndRetreiveStages = cmsPipelineCheckAndRetreiveStages cmsPipelineDup = cmsPipelineDup cmsPipelineStageCount = cmsPipelineStageCount cmsPipelineEval16 = cmsPipelineEval16 cmsPipelineEvalFloat = cmsPipelineEvalFloat cmsPipelineEvalReverseFloat = cmsPipelineEvalReverseFloat cmsPipelineFree = cmsPipelineFree cmsPipelineGetPtrToFirstStage = cmsPipelineGetPtrToFirstStage cmsPipelineGetPtrToLastStage = cmsPipelineGetPtrToLastStage cmsPipelineInputChannels = cmsPipelineInputChannels cmsPipelineInsertStage = cmsPipelineInsertStage cmsPipelineOutputChannels = cmsPipelineOutputChannels cmsPipelineSetSaveAs8bitsFlag = cmsPipelineSetSaveAs8bitsFlag _cmsPipelineSetOptimizationParameters = _cmsPipelineSetOptimizationParameters cmsPipelineUnlinkStage = cmsPipelineUnlinkStage _cmsMalloc = _cmsMalloc _cmsMallocZero = _cmsMallocZero _cmsMAT3eval = _cmsMAT3eval _cmsMAT3identity = _cmsMAT3identity _cmsMAT3inverse = _cmsMAT3inverse _cmsMAT3isIdentity = _cmsMAT3isIdentity _cmsMAT3per = _cmsMAT3per _cmsMAT3solve = _cmsMAT3solve cmsMD5computeID = cmsMD5computeID cmsMLUalloc = cmsMLUalloc cmsMLUdup = cmsMLUdup cmsMLUfree = cmsMLUfree cmsMLUgetASCII = cmsMLUgetASCII cmsMLUgetTranslation = cmsMLUgetTranslation cmsMLUgetWide = cmsMLUgetWide cmsMLUsetASCII = cmsMLUsetASCII cmsMLUsetWide = cmsMLUsetWide cmsStageAllocCLut16bit = cmsStageAllocCLut16bit cmsStageAllocCLut16bitGranular = cmsStageAllocCLut16bitGranular cmsStageAllocCLutFloat = cmsStageAllocCLutFloat cmsStageAllocCLutFloatGranular = cmsStageAllocCLutFloatGranular cmsStageAllocToneCurves = cmsStageAllocToneCurves cmsStageAllocIdentity = cmsStageAllocIdentity cmsStageAllocMatrix = cmsStageAllocMatrix _cmsStageAllocPlaceholder = _cmsStageAllocPlaceholder cmsStageDup = cmsStageDup cmsStageFree = cmsStageFree cmsStageNext = cmsStageNext cmsStageInputChannels = cmsStageInputChannels cmsStageOutputChannels = cmsStageOutputChannels cmsStageSampleCLut16bit = cmsStageSampleCLut16bit cmsStageSampleCLutFloat = cmsStageSampleCLutFloat cmsStageType = cmsStageType cmsStageData = cmsStageData cmsNamedColorCount = cmsNamedColorCount cmsNamedColorIndex = cmsNamedColorIndex cmsNamedColorInfo = cmsNamedColorInfo cmsOpenIOhandlerFromFile = cmsOpenIOhandlerFromFile cmsOpenIOhandlerFromMem = cmsOpenIOhandlerFromMem cmsOpenIOhandlerFromNULL = cmsOpenIOhandlerFromNULL cmsOpenIOhandlerFromStream = cmsOpenIOhandlerFromStream cmsOpenProfileFromFile = cmsOpenProfileFromFile cmsOpenProfileFromFileTHR = cmsOpenProfileFromFileTHR cmsOpenProfileFromIOhandlerTHR = cmsOpenProfileFromIOhandlerTHR cmsOpenProfileFromIOhandler2THR = cmsOpenProfileFromIOhandler2THR cmsOpenProfileFromMem = cmsOpenProfileFromMem cmsOpenProfileFromMemTHR = cmsOpenProfileFromMemTHR cmsOpenProfileFromStream = cmsOpenProfileFromStream cmsOpenProfileFromStreamTHR = cmsOpenProfileFromStreamTHR cmsPlugin = cmsPlugin _cmsRead15Fixed16Number = _cmsRead15Fixed16Number _cmsReadAlignment = _cmsReadAlignment _cmsReadFloat32Number = _cmsReadFloat32Number cmsReadRawTag = cmsReadRawTag cmsReadTag = cmsReadTag _cmsReadTypeBase = _cmsReadTypeBase _cmsReadUInt16Array = _cmsReadUInt16Array _cmsReadUInt16Number = _cmsReadUInt16Number _cmsReadUInt32Number = _cmsReadUInt32Number _cmsReadUInt64Number = _cmsReadUInt64Number _cmsReadUInt8Number = _cmsReadUInt8Number _cmsReadXYZNumber = _cmsReadXYZNumber _cmsRealloc = _cmsRealloc cmsReverseToneCurve = cmsReverseToneCurve cmsReverseToneCurveEx = cmsReverseToneCurveEx cmsSaveProfileToFile = cmsSaveProfileToFile cmsSaveProfileToIOhandler = cmsSaveProfileToIOhandler cmsSaveProfileToMem = cmsSaveProfileToMem cmsSaveProfileToStream = cmsSaveProfileToStream cmsSetAdaptationState = cmsSetAdaptationState cmsSetAlarmCodes = cmsSetAlarmCodes cmsSetColorSpace = cmsSetColorSpace cmsSetDeviceClass = cmsSetDeviceClass cmsSetEncodedICCversion = cmsSetEncodedICCversion cmsSetHeaderAttributes = cmsSetHeaderAttributes cmsSetHeaderFlags = cmsSetHeaderFlags cmsSetHeaderManufacturer = cmsSetHeaderManufacturer cmsSetHeaderModel = cmsSetHeaderModel cmsSetHeaderProfileID = cmsSetHeaderProfileID cmsSetHeaderRenderingIntent = cmsSetHeaderRenderingIntent cmsSetLogErrorHandler = cmsSetLogErrorHandler cmsSetPCS = cmsSetPCS cmsSetProfileVersion = cmsSetProfileVersion cmsSignalError = cmsSignalError cmsSmoothToneCurve = cmsSmoothToneCurve cmsstrcasecmp = cmsstrcasecmp cmsTempFromWhitePoint = cmsTempFromWhitePoint cmsTransform2DeviceLink = cmsTransform2DeviceLink cmsUnregisterPlugins = cmsUnregisterPlugins _cmsVEC3cross = _cmsVEC3cross _cmsVEC3distance = _cmsVEC3distance _cmsVEC3dot = _cmsVEC3dot _cmsVEC3init = _cmsVEC3init _cmsVEC3length = _cmsVEC3length _cmsVEC3minus = _cmsVEC3minus cmsWhitePointFromTemp = cmsWhitePointFromTemp _cmsWrite15Fixed16Number = _cmsWrite15Fixed16Number _cmsWriteAlignment = _cmsWriteAlignment _cmsWriteFloat32Number = _cmsWriteFloat32Number cmsWriteRawTag = cmsWriteRawTag cmsWriteTag = cmsWriteTag _cmsWriteTypeBase = _cmsWriteTypeBase _cmsWriteUInt16Array = _cmsWriteUInt16Array _cmsWriteUInt16Number = _cmsWriteUInt16Number _cmsWriteUInt32Number = _cmsWriteUInt32Number _cmsWriteUInt64Number = _cmsWriteUInt64Number _cmsWriteUInt8Number = _cmsWriteUInt8Number _cmsWriteXYZNumber = _cmsWriteXYZNumber cmsxyY2XYZ = cmsxyY2XYZ cmsXYZ2Lab = cmsXYZ2Lab cmsXYZ2xyY = cmsXYZ2xyY cmsXYZEncoded2Float = cmsXYZEncoded2Float cmsSliceSpace16 = cmsSliceSpace16 cmsSliceSpaceFloat = cmsSliceSpaceFloat cmsChangeBuffersFormat = cmsChangeBuffersFormat cmsDictAlloc = cmsDictAlloc cmsDictFree = cmsDictFree cmsDictDup = cmsDictDup cmsDictAddEntry = cmsDictAddEntry cmsDictGetEntryList = cmsDictGetEntryList cmsDictNextEntry = cmsDictNextEntry _cmsGetTransformUserData = _cmsGetTransformUserData _cmsSetTransformUserData = _cmsSetTransformUserData cmsGetHeaderCreator = cmsGetHeaderCreator cmsPluginTHR = cmsPluginTHR cmsGetPipelineContextID = cmsGetPipelineContextID cmsGetTransformInputFormat = cmsGetTransformInputFormat cmsGetTransformOutputFormat = cmsGetTransformOutputFormat cmsCreateContext = cmsCreateContext cmsDupContext = cmsDupContext cmsDeleteContext = cmsDeleteContext cmsGetContextUserData = cmsGetContextUserData cmsUnregisterPluginsTHR = cmsUnregisterPluginsTHR cmsSetAlarmCodesTHR = cmsSetAlarmCodesTHR cmsGetAlarmCodesTHR = cmsGetAlarmCodesTHR cmsSetAdaptationStateTHR = cmsSetAdaptationStateTHR cmsSetLogErrorHandlerTHR = cmsSetLogErrorHandlerTHR cmsGetSupportedIntentsTHR = cmsGetSupportedIntentsTHR cmsMLUtranslationsCount = cmsMLUtranslationsCount cmsMLUtranslationsCodes = cmsMLUtranslationsCodes _cmsCreateMutex = _cmsCreateMutex _cmsDestroyMutex = _cmsDestroyMutex _cmsLockMutex = _cmsLockMutex _cmsUnlockMutex = _cmsUnlockMutex cmsGetProfileIOhandler = cmsGetProfileIOhandler cmsGetEncodedCMMversion = cmsGetEncodedCMMversion _cmsFloat2Half = _cmsFloat2Half _cmsHalf2Float = _cmsHalf2Float _cmsFreeInterpParams = _cmsFreeInterpParams _cmsGetFormatter = _cmsGetFormatter _cmsGetTransformFormatters16 = _cmsGetTransformFormatters16 _cmsGetTransformFormattersFloat = _cmsGetTransformFormattersFloat _cmsQuantizeVal = _cmsQuantizeVal _cmsReadDevicelinkLUT = _cmsReadDevicelinkLUT _cmsReadInputLUT = _cmsReadInputLUT _cmsReadOutputLUT = _cmsReadOutputLUT _cmsStageAllocIdentityCLut = _cmsStageAllocIdentityCLut _cmsStageAllocIdentityCurves = _cmsStageAllocIdentityCurves _cmsStageAllocLab2XYZ = _cmsStageAllocLab2XYZ _cmsStageAllocLabV2ToV4 = _cmsStageAllocLabV2ToV4 _cmsStageAllocLabV4ToV2 = _cmsStageAllocLabV4ToV2 _cmsStageAllocNamedColor = _cmsStageAllocNamedColor _cmsStageAllocXYZ2Lab = _cmsStageAllocXYZ2Lab cmsMD5add = cmsMD5add cmsMD5alloc = cmsMD5alloc cmsMD5finish = cmsMD5finish _cmsComputeInterpParams = _cmsComputeInterpParams cmsGetToneCurveParams = cmsGetToneCurveParams lcms2-2.12rc1/src/cmsxform.c0000644000175000017500000013704613775114656014721 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Transformations stuff // ----------------------------------------------------------------------- #define DEFAULT_OBSERVER_ADAPTATION_STATE 1.0 // The Context0 observer adaptation state. _cmsAdaptationStateChunkType _cmsAdaptationStateChunk = { DEFAULT_OBSERVER_ADAPTATION_STATE }; // Init and duplicate observer adaptation state void _cmsAllocAdaptationStateChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { static _cmsAdaptationStateChunkType AdaptationStateChunk = { DEFAULT_OBSERVER_ADAPTATION_STATE }; void* from; if (src != NULL) { from = src ->chunks[AdaptationStateContext]; } else { from = &AdaptationStateChunk; } ctx ->chunks[AdaptationStateContext] = _cmsSubAllocDup(ctx ->MemPool, from, sizeof(_cmsAdaptationStateChunkType)); } // Sets adaptation state for absolute colorimetric intent in the given context. Adaptation state applies on all // but cmsCreateExtendedTransformTHR(). Little CMS can handle incomplete adaptation states. cmsFloat64Number CMSEXPORT cmsSetAdaptationStateTHR(cmsContext ContextID, cmsFloat64Number d) { cmsFloat64Number prev; _cmsAdaptationStateChunkType* ptr = (_cmsAdaptationStateChunkType*) _cmsContextGetClientChunk(ContextID, AdaptationStateContext); // Get previous value for return prev = ptr ->AdaptationState; // Set the value if d is positive or zero if (d >= 0.0) { ptr ->AdaptationState = d; } // Always return previous value return prev; } // The adaptation state may be defaulted by this function. If you don't like it, use the extended transform routine cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d) { return cmsSetAdaptationStateTHR(NULL, d); } // ----------------------------------------------------------------------- // Alarm codes for 16-bit transformations, because the fixed range of containers there are // no values left to mark out of gamut. #define DEFAULT_ALARM_CODES_VALUE {0x7F00, 0x7F00, 0x7F00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} _cmsAlarmCodesChunkType _cmsAlarmCodesChunk = { DEFAULT_ALARM_CODES_VALUE }; // Sets the codes used to mark out-out-gamut on Proofing transforms for a given context. Values are meant to be // encoded in 16 bits. void CMSEXPORT cmsSetAlarmCodesTHR(cmsContext ContextID, const cmsUInt16Number AlarmCodesP[cmsMAXCHANNELS]) { _cmsAlarmCodesChunkType* ContextAlarmCodes = (_cmsAlarmCodesChunkType*) _cmsContextGetClientChunk(ContextID, AlarmCodesContext); _cmsAssert(ContextAlarmCodes != NULL); // Can't happen memcpy(ContextAlarmCodes->AlarmCodes, AlarmCodesP, sizeof(ContextAlarmCodes->AlarmCodes)); } // Gets the current codes used to mark out-out-gamut on Proofing transforms for the given context. // Values are meant to be encoded in 16 bits. void CMSEXPORT cmsGetAlarmCodesTHR(cmsContext ContextID, cmsUInt16Number AlarmCodesP[cmsMAXCHANNELS]) { _cmsAlarmCodesChunkType* ContextAlarmCodes = (_cmsAlarmCodesChunkType*) _cmsContextGetClientChunk(ContextID, AlarmCodesContext); _cmsAssert(ContextAlarmCodes != NULL); // Can't happen memcpy(AlarmCodesP, ContextAlarmCodes->AlarmCodes, sizeof(ContextAlarmCodes->AlarmCodes)); } void CMSEXPORT cmsSetAlarmCodes(const cmsUInt16Number NewAlarm[cmsMAXCHANNELS]) { _cmsAssert(NewAlarm != NULL); cmsSetAlarmCodesTHR(NULL, NewAlarm); } void CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number OldAlarm[cmsMAXCHANNELS]) { _cmsAssert(OldAlarm != NULL); cmsGetAlarmCodesTHR(NULL, OldAlarm); } // Init and duplicate alarm codes void _cmsAllocAlarmCodesChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { static _cmsAlarmCodesChunkType AlarmCodesChunk = { DEFAULT_ALARM_CODES_VALUE }; void* from; if (src != NULL) { from = src ->chunks[AlarmCodesContext]; } else { from = &AlarmCodesChunk; } ctx ->chunks[AlarmCodesContext] = _cmsSubAllocDup(ctx ->MemPool, from, sizeof(_cmsAlarmCodesChunkType)); } // ----------------------------------------------------------------------- // Get rid of transform resources void CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform) { _cmsTRANSFORM* p = (_cmsTRANSFORM*) hTransform; _cmsAssert(p != NULL); if (p -> GamutCheck) cmsPipelineFree(p -> GamutCheck); if (p -> Lut) cmsPipelineFree(p -> Lut); if (p ->InputColorant) cmsFreeNamedColorList(p ->InputColorant); if (p -> OutputColorant) cmsFreeNamedColorList(p ->OutputColorant); if (p ->Sequence) cmsFreeProfileSequenceDescription(p ->Sequence); if (p ->UserData) p ->FreeUserData(p ->ContextID, p ->UserData); _cmsFree(p ->ContextID, (void *) p); } static cmsUInt32Number PixelSize(cmsUInt32Number Format) { cmsUInt32Number fmt_bytes = T_BYTES(Format); // For double, the T_BYTES field is zero if (fmt_bytes == 0) return sizeof(cmsUInt64Number); // Otherwise, it is already correct for all formats return fmt_bytes; } // Apply transform. void CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number Size) { _cmsTRANSFORM* p = (_cmsTRANSFORM*) Transform; cmsStride stride; stride.BytesPerLineIn = 0; // Not used stride.BytesPerLineOut = 0; stride.BytesPerPlaneIn = Size * PixelSize(p->InputFormat); stride.BytesPerPlaneOut = Size * PixelSize(p->OutputFormat); p -> xform(p, InputBuffer, OutputBuffer, Size, 1, &stride); } // This is a legacy stride for planar void CMSEXPORT cmsDoTransformStride(cmsHTRANSFORM Transform, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number Size, cmsUInt32Number Stride) { _cmsTRANSFORM* p = (_cmsTRANSFORM*) Transform; cmsStride stride; stride.BytesPerLineIn = 0; stride.BytesPerLineOut = 0; stride.BytesPerPlaneIn = Stride; stride.BytesPerPlaneOut = Stride; p -> xform(p, InputBuffer, OutputBuffer, Size, 1, &stride); } // This is the "fast" function for plugins void CMSEXPORT cmsDoTransformLineStride(cmsHTRANSFORM Transform, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, cmsUInt32Number BytesPerLineIn, cmsUInt32Number BytesPerLineOut, cmsUInt32Number BytesPerPlaneIn, cmsUInt32Number BytesPerPlaneOut) { _cmsTRANSFORM* p = (_cmsTRANSFORM*) Transform; cmsStride stride; stride.BytesPerLineIn = BytesPerLineIn; stride.BytesPerLineOut = BytesPerLineOut; stride.BytesPerPlaneIn = BytesPerPlaneIn; stride.BytesPerPlaneOut = BytesPerPlaneOut; p->xform(p, InputBuffer, OutputBuffer, PixelsPerLine, LineCount, &stride); } // Transform routines ---------------------------------------------------------------------------------------------------------- // Float xform converts floats. Since there are no performance issues, one routine does all job, including gamut check. // Note that because extended range, we can use a -1.0 value for out of gamut in this case. static void FloatXFORM(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number* accum; cmsUInt8Number* output; cmsFloat32Number fIn[cmsMAXCHANNELS], fOut[cmsMAXCHANNELS]; cmsFloat32Number OutOfGamut; cmsUInt32Number i, j, c, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); strideIn = 0; strideOut = 0; memset(fIn, 0, sizeof(fIn)); memset(fOut, 0, sizeof(fOut)); for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*)in + strideIn; output = (cmsUInt8Number*)out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInputFloat(p, fIn, accum, Stride->BytesPerPlaneIn); // Any gamut chack to do? if (p->GamutCheck != NULL) { // Evaluate gamut marker. cmsPipelineEvalFloat(fIn, &OutOfGamut, p->GamutCheck); // Is current color out of gamut? if (OutOfGamut > 0.0) { // Certainly, out of gamut for (c = 0; c < cmsMAXCHANNELS; c++) fOut[c] = -1.0; } else { // No, proceed normally cmsPipelineEvalFloat(fIn, fOut, p->Lut); } } else { // No gamut check at all cmsPipelineEvalFloat(fIn, fOut, p->Lut); } output = p->ToOutputFloat(p, fOut, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } static void NullFloatXFORM(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number* accum; cmsUInt8Number* output; cmsFloat32Number fIn[cmsMAXCHANNELS]; cmsUInt32Number i, j, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); strideIn = 0; strideOut = 0; memset(fIn, 0, sizeof(fIn)); for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*) in + strideIn; output = (cmsUInt8Number*) out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInputFloat(p, fIn, accum, Stride ->BytesPerPlaneIn); output = p->ToOutputFloat(p, fIn, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // 16 bit precision ----------------------------------------------------------------------------------------------------------- // Null transformation, only applies formatters. No cache static void NullXFORM(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number* accum; cmsUInt8Number* output; cmsUInt16Number wIn[cmsMAXCHANNELS]; cmsUInt32Number i, j, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); strideIn = 0; strideOut = 0; memset(wIn, 0, sizeof(wIn)); for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*)in + strideIn; output = (cmsUInt8Number*)out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInput(p, wIn, accum, Stride->BytesPerPlaneIn); output = p->ToOutput(p, wIn, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // No gamut check, no cache, 16 bits static void PrecalculatedXFORM(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { CMSREGISTER cmsUInt8Number* accum; CMSREGISTER cmsUInt8Number* output; cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; cmsUInt32Number i, j, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); strideIn = 0; strideOut = 0; memset(wIn, 0, sizeof(wIn)); memset(wOut, 0, sizeof(wOut)); for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*)in + strideIn; output = (cmsUInt8Number*)out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInput(p, wIn, accum, Stride->BytesPerPlaneIn); p->Lut->Eval16Fn(wIn, wOut, p->Lut->Data); output = p->ToOutput(p, wOut, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Auxiliary: Handle precalculated gamut check. The retrieval of context may be alittle bit slow, but this function is not critical. static void TransformOnePixelWithGamutCheck(_cmsTRANSFORM* p, const cmsUInt16Number wIn[], cmsUInt16Number wOut[]) { cmsUInt16Number wOutOfGamut; p ->GamutCheck ->Eval16Fn(wIn, &wOutOfGamut, p ->GamutCheck ->Data); if (wOutOfGamut >= 1) { cmsUInt32Number i; _cmsAlarmCodesChunkType* ContextAlarmCodes = (_cmsAlarmCodesChunkType*) _cmsContextGetClientChunk(p->ContextID, AlarmCodesContext); for (i=0; i < p ->Lut->OutputChannels; i++) { wOut[i] = ContextAlarmCodes ->AlarmCodes[i]; } } else p ->Lut ->Eval16Fn(wIn, wOut, p -> Lut->Data); } // Gamut check, No cache, 16 bits. static void PrecalculatedXFORMGamutCheck(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number* accum; cmsUInt8Number* output; cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; cmsUInt32Number i, j, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); strideIn = 0; strideOut = 0; memset(wIn, 0, sizeof(wIn)); memset(wOut, 0, sizeof(wOut)); for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*)in + strideIn; output = (cmsUInt8Number*)out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInput(p, wIn, accum, Stride->BytesPerPlaneIn); TransformOnePixelWithGamutCheck(p, wIn, wOut); output = p->ToOutput(p, wOut, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // No gamut check, Cache, 16 bits, static void CachedXFORM(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number* accum; cmsUInt8Number* output; cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; _cmsCACHE Cache; cmsUInt32Number i, j, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); // Empty buffers for quick memcmp memset(wIn, 0, sizeof(wIn)); memset(wOut, 0, sizeof(wOut)); // Get copy of zero cache memcpy(&Cache, &p->Cache, sizeof(Cache)); strideIn = 0; strideOut = 0; for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*)in + strideIn; output = (cmsUInt8Number*)out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInput(p, wIn, accum, Stride->BytesPerPlaneIn); if (memcmp(wIn, Cache.CacheIn, sizeof(Cache.CacheIn)) == 0) { memcpy(wOut, Cache.CacheOut, sizeof(Cache.CacheOut)); } else { p->Lut->Eval16Fn(wIn, wOut, p->Lut->Data); memcpy(Cache.CacheIn, wIn, sizeof(Cache.CacheIn)); memcpy(Cache.CacheOut, wOut, sizeof(Cache.CacheOut)); } output = p->ToOutput(p, wOut, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // All those nice features together static void CachedXFORMGamutCheck(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number* accum; cmsUInt8Number* output; cmsUInt16Number wIn[cmsMAXCHANNELS], wOut[cmsMAXCHANNELS]; _cmsCACHE Cache; cmsUInt32Number i, j, strideIn, strideOut; _cmsHandleExtraChannels(p, in, out, PixelsPerLine, LineCount, Stride); // Empty buffers for quick memcmp memset(wIn, 0, sizeof(wIn)); memset(wOut, 0, sizeof(wOut)); // Get copy of zero cache memcpy(&Cache, &p->Cache, sizeof(Cache)); strideIn = 0; strideOut = 0; for (i = 0; i < LineCount; i++) { accum = (cmsUInt8Number*)in + strideIn; output = (cmsUInt8Number*)out + strideOut; for (j = 0; j < PixelsPerLine; j++) { accum = p->FromInput(p, wIn, accum, Stride->BytesPerPlaneIn); if (memcmp(wIn, Cache.CacheIn, sizeof(Cache.CacheIn)) == 0) { memcpy(wOut, Cache.CacheOut, sizeof(Cache.CacheOut)); } else { TransformOnePixelWithGamutCheck(p, wIn, wOut); memcpy(Cache.CacheIn, wIn, sizeof(Cache.CacheIn)); memcpy(Cache.CacheOut, wOut, sizeof(Cache.CacheOut)); } output = p->ToOutput(p, wOut, output, Stride->BytesPerPlaneOut); } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Transform plug-ins ---------------------------------------------------------------------------------------------------- // List of used-defined transform factories typedef struct _cmsTransformCollection_st { _cmsTransform2Factory Factory; cmsBool OldXform; // Factory returns xform function in the old style struct _cmsTransformCollection_st *Next; } _cmsTransformCollection; // The linked list head _cmsTransformPluginChunkType _cmsTransformPluginChunk = { NULL }; // Duplicates the zone of memory used by the plug-in in the new context static void DupPluginTransformList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsTransformPluginChunkType newHead = { NULL }; _cmsTransformCollection* entry; _cmsTransformCollection* Anterior = NULL; _cmsTransformPluginChunkType* head = (_cmsTransformPluginChunkType*) src->chunks[TransformPlugin]; // Walk the list copying all nodes for (entry = head->TransformCollection; entry != NULL; entry = entry ->Next) { _cmsTransformCollection *newEntry = ( _cmsTransformCollection *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(_cmsTransformCollection)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.TransformCollection == NULL) newHead.TransformCollection = newEntry; } ctx ->chunks[TransformPlugin] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsTransformPluginChunkType)); } // Allocates memory for transform plugin factory void _cmsAllocTransformPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { if (src != NULL) { // Copy all linked list DupPluginTransformList(ctx, src); } else { static _cmsTransformPluginChunkType TransformPluginChunkType = { NULL }; ctx ->chunks[TransformPlugin] = _cmsSubAllocDup(ctx ->MemPool, &TransformPluginChunkType, sizeof(_cmsTransformPluginChunkType)); } } // Adaptor for old versions of plug-in static void _cmsTransform2toTransformAdaptor(struct _cmstransform_struct *CMMcargo, const void* InputBuffer, void* OutputBuffer, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, strideIn, strideOut; _cmsHandleExtraChannels(CMMcargo, InputBuffer, OutputBuffer, PixelsPerLine, LineCount, Stride); strideIn = 0; strideOut = 0; for (i = 0; i < LineCount; i++) { void *accum = (cmsUInt8Number*)InputBuffer + strideIn; void *output = (cmsUInt8Number*)OutputBuffer + strideOut; CMMcargo->OldXform(CMMcargo, accum, output, PixelsPerLine, Stride->BytesPerPlaneIn); strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Register new ways to transform cmsBool _cmsRegisterTransformPlugin(cmsContext ContextID, cmsPluginBase* Data) { cmsPluginTransform* Plugin = (cmsPluginTransform*) Data; _cmsTransformCollection* fl; _cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsContextGetClientChunk(ContextID,TransformPlugin); if (Data == NULL) { // Free the chain. Memory is safely freed at exit ctx->TransformCollection = NULL; return TRUE; } // Factory callback is required if (Plugin->factories.xform == NULL) return FALSE; fl = (_cmsTransformCollection*) _cmsPluginMalloc(ContextID, sizeof(_cmsTransformCollection)); if (fl == NULL) return FALSE; // Check for full xform plug-ins previous to 2.8, we would need an adapter in that case if (Plugin->base.ExpectedVersion < 2080) { fl->OldXform = TRUE; } else fl->OldXform = FALSE; // Copy the parameters fl->Factory = Plugin->factories.xform; // Keep linked list fl ->Next = ctx->TransformCollection; ctx->TransformCollection = fl; // All is ok return TRUE; } void CMSEXPORT _cmsSetTransformUserData(struct _cmstransform_struct *CMMcargo, void* ptr, _cmsFreeUserDataFn FreePrivateDataFn) { _cmsAssert(CMMcargo != NULL); CMMcargo ->UserData = ptr; CMMcargo ->FreeUserData = FreePrivateDataFn; } // returns the pointer defined by the plug-in to store private data void * CMSEXPORT _cmsGetTransformUserData(struct _cmstransform_struct *CMMcargo) { _cmsAssert(CMMcargo != NULL); return CMMcargo ->UserData; } // returns the current formatters void CMSEXPORT _cmsGetTransformFormatters16(struct _cmstransform_struct *CMMcargo, cmsFormatter16* FromInput, cmsFormatter16* ToOutput) { _cmsAssert(CMMcargo != NULL); if (FromInput) *FromInput = CMMcargo ->FromInput; if (ToOutput) *ToOutput = CMMcargo ->ToOutput; } void CMSEXPORT _cmsGetTransformFormattersFloat(struct _cmstransform_struct *CMMcargo, cmsFormatterFloat* FromInput, cmsFormatterFloat* ToOutput) { _cmsAssert(CMMcargo != NULL); if (FromInput) *FromInput = CMMcargo ->FromInputFloat; if (ToOutput) *ToOutput = CMMcargo ->ToOutputFloat; } // returns original flags cmsUInt32Number CMSEXPORT _cmsGetTransformFlags(struct _cmstransform_struct* CMMcargo) { _cmsAssert(CMMcargo != NULL); return CMMcargo->dwOriginalFlags; } // Allocate transform struct and set it to defaults. Ask the optimization plug-in about if those formats are proper // for separated transforms. If this is the case, static _cmsTRANSFORM* AllocEmptyTransform(cmsContext ContextID, cmsPipeline* lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { _cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsContextGetClientChunk(ContextID, TransformPlugin); _cmsTransformCollection* Plugin; // Allocate needed memory _cmsTRANSFORM* p = (_cmsTRANSFORM*)_cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM)); if (!p) { cmsPipelineFree(lut); return NULL; } // Store the proposed pipeline p->Lut = lut; // Let's see if any plug-in want to do the transform by itself if (p->Lut != NULL) { if (!(*dwFlags & cmsFLAGS_NOOPTIMIZE)) { for (Plugin = ctx->TransformCollection; Plugin != NULL; Plugin = Plugin->Next) { if (Plugin->Factory(&p->xform, &p->UserData, &p->FreeUserData, &p->Lut, InputFormat, OutputFormat, dwFlags)) { // Last plugin in the declaration order takes control. We just keep // the original parameters as a logging. // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default // an optimized transform is not reusable. The plug-in can, however, change // the flags and make it suitable. p->ContextID = ContextID; p->InputFormat = *InputFormat; p->OutputFormat = *OutputFormat; p->dwOriginalFlags = *dwFlags; // Fill the formatters just in case the optimized routine is interested. // No error is thrown if the formatter doesn't exist. It is up to the optimization // factory to decide what to do in those cases. p->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; p->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; p->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; p->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; // Save the day? (Ignore the warning) if (Plugin->OldXform) { p->OldXform = (_cmsTransformFn)(void*)p->xform; p->xform = _cmsTransform2toTransformAdaptor; } return p; } } } // Not suitable for the transform plug-in, let's check the pipeline plug-in _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags); } // Check whatever this is a true floating point transform if (_cmsFormatterIsFloat(*InputFormat) && _cmsFormatterIsFloat(*OutputFormat)) { // Get formatter function always return a valid union, but the contents of this union may be NULL. p ->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat; p ->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat; *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; if (p ->FromInputFloat == NULL || p ->ToOutputFloat == NULL) { cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported raster format"); cmsDeleteTransform(p); return NULL; } if (*dwFlags & cmsFLAGS_NULLTRANSFORM) { p ->xform = NullFloatXFORM; } else { // Float transforms don't use cache, always are non-NULL p ->xform = FloatXFORM; } } else { if (*InputFormat == 0 && *OutputFormat == 0) { p ->FromInput = p ->ToOutput = NULL; *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; } else { cmsUInt32Number BytesPerPixelInput; p ->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; p ->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; if (p ->FromInput == NULL || p ->ToOutput == NULL) { cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported raster format"); cmsDeleteTransform(p); return NULL; } BytesPerPixelInput = T_BYTES(p ->InputFormat); if (BytesPerPixelInput == 0 || BytesPerPixelInput >= 2) *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; } if (*dwFlags & cmsFLAGS_NULLTRANSFORM) { p ->xform = NullXFORM; } else { if (*dwFlags & cmsFLAGS_NOCACHE) { if (*dwFlags & cmsFLAGS_GAMUTCHECK) p ->xform = PrecalculatedXFORMGamutCheck; // Gamut check, no cache else p ->xform = PrecalculatedXFORM; // No cache, no gamut check } else { if (*dwFlags & cmsFLAGS_GAMUTCHECK) p ->xform = CachedXFORMGamutCheck; // Gamut check, cache else p ->xform = CachedXFORM; // No gamut check, cache } } } p ->InputFormat = *InputFormat; p ->OutputFormat = *OutputFormat; p ->dwOriginalFlags = *dwFlags; p ->ContextID = ContextID; p ->UserData = NULL; return p; } static cmsBool GetXFormColorSpaces(cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], cmsColorSpaceSignature* Input, cmsColorSpaceSignature* Output) { cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut; cmsColorSpaceSignature PostColorSpace; cmsUInt32Number i; if (nProfiles == 0) return FALSE; if (hProfiles[0] == NULL) return FALSE; *Input = PostColorSpace = cmsGetColorSpace(hProfiles[0]); for (i=0; i < nProfiles; i++) { cmsProfileClassSignature cls; cmsHPROFILE hProfile = hProfiles[i]; int lIsInput = (PostColorSpace != cmsSigXYZData) && (PostColorSpace != cmsSigLabData); if (hProfile == NULL) return FALSE; cls = cmsGetDeviceClass(hProfile); if (cls == cmsSigNamedColorClass) { ColorSpaceIn = cmsSig1colorData; ColorSpaceOut = (nProfiles > 1) ? cmsGetPCS(hProfile) : cmsGetColorSpace(hProfile); } else if (lIsInput || (cls == cmsSigLinkClass)) { ColorSpaceIn = cmsGetColorSpace(hProfile); ColorSpaceOut = cmsGetPCS(hProfile); } else { ColorSpaceIn = cmsGetPCS(hProfile); ColorSpaceOut = cmsGetColorSpace(hProfile); } if (i==0) *Input = ColorSpaceIn; PostColorSpace = ColorSpaceOut; } *Output = PostColorSpace; return TRUE; } // Check colorspace static cmsBool IsProperColorSpace(cmsColorSpaceSignature Check, cmsUInt32Number dwFormat) { int Space1 = (int) T_COLORSPACE(dwFormat); int Space2 = _cmsLCMScolorSpace(Check); if (Space1 == PT_ANY) return TRUE; if (Space1 == Space2) return TRUE; if (Space1 == PT_LabV2 && Space2 == PT_Lab) return TRUE; if (Space1 == PT_Lab && Space2 == PT_LabV2) return TRUE; return FALSE; } // ---------------------------------------------------------------------------------------------------------------- // Jun-21-2000: Some profiles (those that comes with W2K) comes // with the media white (media black?) x 100. Add a sanity check static void NormalizeXYZ(cmsCIEXYZ* Dest) { while (Dest -> X > 2. && Dest -> Y > 2. && Dest -> Z > 2.) { Dest -> X /= 10.; Dest -> Y /= 10.; Dest -> Z /= 10.; } } static void SetWhitePoint(cmsCIEXYZ* wtPt, const cmsCIEXYZ* src) { if (src == NULL) { wtPt ->X = cmsD50X; wtPt ->Y = cmsD50Y; wtPt ->Z = cmsD50Z; } else { wtPt ->X = src->X; wtPt ->Y = src->Y; wtPt ->Z = src->Z; NormalizeXYZ(wtPt); } } // New to lcms 2.0 -- have all parameters available. cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID, cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[], cmsBool BPC[], cmsUInt32Number Intents[], cmsFloat64Number AdaptationStates[], cmsHPROFILE hGamutProfile, cmsUInt32Number nGamutPCSposition, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number dwFlags) { _cmsTRANSFORM* xform; cmsColorSpaceSignature EntryColorSpace; cmsColorSpaceSignature ExitColorSpace; cmsPipeline* Lut; cmsUInt32Number LastIntent = Intents[nProfiles-1]; // If it is a fake transform if (dwFlags & cmsFLAGS_NULLTRANSFORM) { return AllocEmptyTransform(ContextID, NULL, INTENT_PERCEPTUAL, &InputFormat, &OutputFormat, &dwFlags); } // If gamut check is requested, make sure we have a gamut profile if (dwFlags & cmsFLAGS_GAMUTCHECK) { if (hGamutProfile == NULL) dwFlags &= ~cmsFLAGS_GAMUTCHECK; } // On floating point transforms, inhibit cache if (_cmsFormatterIsFloat(InputFormat) || _cmsFormatterIsFloat(OutputFormat)) dwFlags |= cmsFLAGS_NOCACHE; // Mark entry/exit spaces if (!GetXFormColorSpaces(nProfiles, hProfiles, &EntryColorSpace, &ExitColorSpace)) { cmsSignalError(ContextID, cmsERROR_NULL, "NULL input profiles on transform"); return NULL; } // Check if proper colorspaces if (!IsProperColorSpace(EntryColorSpace, InputFormat)) { cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Wrong input color space on transform"); return NULL; } if (!IsProperColorSpace(ExitColorSpace, OutputFormat)) { cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Wrong output color space on transform"); return NULL; } // Create a pipeline with all transformations Lut = _cmsLinkProfiles(ContextID, nProfiles, Intents, hProfiles, BPC, AdaptationStates, dwFlags); if (Lut == NULL) { cmsSignalError(ContextID, cmsERROR_NOT_SUITABLE, "Couldn't link the profiles"); return NULL; } // Check channel count if ((cmsChannelsOf(EntryColorSpace) != cmsPipelineInputChannels(Lut)) || (cmsChannelsOf(ExitColorSpace) != cmsPipelineOutputChannels(Lut))) { cmsPipelineFree(Lut); cmsSignalError(ContextID, cmsERROR_NOT_SUITABLE, "Channel count doesn't match. Profile is corrupted"); return NULL; } // All seems ok xform = AllocEmptyTransform(ContextID, Lut, LastIntent, &InputFormat, &OutputFormat, &dwFlags); if (xform == NULL) { return NULL; } // Keep values xform ->EntryColorSpace = EntryColorSpace; xform ->ExitColorSpace = ExitColorSpace; xform ->RenderingIntent = Intents[nProfiles-1]; // Take white points SetWhitePoint(&xform->EntryWhitePoint, (cmsCIEXYZ*) cmsReadTag(hProfiles[0], cmsSigMediaWhitePointTag)); SetWhitePoint(&xform->ExitWhitePoint, (cmsCIEXYZ*) cmsReadTag(hProfiles[nProfiles-1], cmsSigMediaWhitePointTag)); // Create a gamut check LUT if requested if (hGamutProfile != NULL && (dwFlags & cmsFLAGS_GAMUTCHECK)) xform ->GamutCheck = _cmsCreateGamutCheckPipeline(ContextID, hProfiles, BPC, Intents, AdaptationStates, nGamutPCSposition, hGamutProfile); // Try to read input and output colorant table if (cmsIsTag(hProfiles[0], cmsSigColorantTableTag)) { // Input table can only come in this way. xform ->InputColorant = cmsDupNamedColorList((cmsNAMEDCOLORLIST*) cmsReadTag(hProfiles[0], cmsSigColorantTableTag)); } // Output is a little bit more complex. if (cmsGetDeviceClass(hProfiles[nProfiles-1]) == cmsSigLinkClass) { // This tag may exist only on devicelink profiles. if (cmsIsTag(hProfiles[nProfiles-1], cmsSigColorantTableOutTag)) { // It may be NULL if error xform ->OutputColorant = cmsDupNamedColorList((cmsNAMEDCOLORLIST*) cmsReadTag(hProfiles[nProfiles-1], cmsSigColorantTableOutTag)); } } else { if (cmsIsTag(hProfiles[nProfiles-1], cmsSigColorantTableTag)) { xform -> OutputColorant = cmsDupNamedColorList((cmsNAMEDCOLORLIST*) cmsReadTag(hProfiles[nProfiles-1], cmsSigColorantTableTag)); } } // Store the sequence of profiles if (dwFlags & cmsFLAGS_KEEP_SEQUENCE) { xform ->Sequence = _cmsCompileProfileSequence(ContextID, nProfiles, hProfiles); } else xform ->Sequence = NULL; // If this is a cached transform, init first value, which is zero (16 bits only) if (!(dwFlags & cmsFLAGS_NOCACHE)) { memset(&xform ->Cache.CacheIn, 0, sizeof(xform ->Cache.CacheIn)); if (xform ->GamutCheck != NULL) { TransformOnePixelWithGamutCheck(xform, xform ->Cache.CacheIn, xform->Cache.CacheOut); } else { xform ->Lut ->Eval16Fn(xform ->Cache.CacheIn, xform->Cache.CacheOut, xform -> Lut->Data); } } return (cmsHTRANSFORM) xform; } // Multiprofile transforms: Gamut check is not available here, as it is unclear from which profile the gamut comes. cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID, cmsHPROFILE hProfiles[], cmsUInt32Number nProfiles, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsUInt32Number i; cmsBool BPC[256]; cmsUInt32Number Intents[256]; cmsFloat64Number AdaptationStates[256]; if (nProfiles <= 0 || nProfiles > 255) { cmsSignalError(ContextID, cmsERROR_RANGE, "Wrong number of profiles. 1..255 expected, %d found.", nProfiles); return NULL; } for (i=0; i < nProfiles; i++) { BPC[i] = dwFlags & cmsFLAGS_BLACKPOINTCOMPENSATION ? TRUE : FALSE; Intents[i] = Intent; AdaptationStates[i] = cmsSetAdaptationStateTHR(ContextID, -1); } return cmsCreateExtendedTransform(ContextID, nProfiles, hProfiles, BPC, Intents, AdaptationStates, NULL, 0, InputFormat, OutputFormat, dwFlags); } cmsHTRANSFORM CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[], cmsUInt32Number nProfiles, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { if (nProfiles <= 0 || nProfiles > 255) { cmsSignalError(NULL, cmsERROR_RANGE, "Wrong number of profiles. 1..255 expected, %d found.", nProfiles); return NULL; } return cmsCreateMultiprofileTransformTHR(cmsGetProfileContextID(hProfiles[0]), hProfiles, nProfiles, InputFormat, OutputFormat, Intent, dwFlags); } cmsHTRANSFORM CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID, cmsHPROFILE Input, cmsUInt32Number InputFormat, cmsHPROFILE Output, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsHPROFILE hArray[2]; hArray[0] = Input; hArray[1] = Output; return cmsCreateMultiprofileTransformTHR(ContextID, hArray, Output == NULL ? 1U : 2U, InputFormat, OutputFormat, Intent, dwFlags); } CMSAPI cmsHTRANSFORM CMSEXPORT cmsCreateTransform(cmsHPROFILE Input, cmsUInt32Number InputFormat, cmsHPROFILE Output, cmsUInt32Number OutputFormat, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { return cmsCreateTransformTHR(cmsGetProfileContextID(Input), Input, InputFormat, Output, OutputFormat, Intent, dwFlags); } cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID, cmsHPROFILE InputProfile, cmsUInt32Number InputFormat, cmsHPROFILE OutputProfile, cmsUInt32Number OutputFormat, cmsHPROFILE ProofingProfile, cmsUInt32Number nIntent, cmsUInt32Number ProofingIntent, cmsUInt32Number dwFlags) { cmsHPROFILE hArray[4]; cmsUInt32Number Intents[4]; cmsBool BPC[4]; cmsFloat64Number Adaptation[4]; cmsBool DoBPC = (dwFlags & cmsFLAGS_BLACKPOINTCOMPENSATION) ? TRUE : FALSE; hArray[0] = InputProfile; hArray[1] = ProofingProfile; hArray[2] = ProofingProfile; hArray[3] = OutputProfile; Intents[0] = nIntent; Intents[1] = nIntent; Intents[2] = INTENT_RELATIVE_COLORIMETRIC; Intents[3] = ProofingIntent; BPC[0] = DoBPC; BPC[1] = DoBPC; BPC[2] = 0; BPC[3] = 0; Adaptation[0] = Adaptation[1] = Adaptation[2] = Adaptation[3] = cmsSetAdaptationStateTHR(ContextID, -1); if (!(dwFlags & (cmsFLAGS_SOFTPROOFING|cmsFLAGS_GAMUTCHECK))) return cmsCreateTransformTHR(ContextID, InputProfile, InputFormat, OutputProfile, OutputFormat, nIntent, dwFlags); return cmsCreateExtendedTransform(ContextID, 4, hArray, BPC, Intents, Adaptation, ProofingProfile, 1, InputFormat, OutputFormat, dwFlags); } cmsHTRANSFORM CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE InputProfile, cmsUInt32Number InputFormat, cmsHPROFILE OutputProfile, cmsUInt32Number OutputFormat, cmsHPROFILE ProofingProfile, cmsUInt32Number nIntent, cmsUInt32Number ProofingIntent, cmsUInt32Number dwFlags) { return cmsCreateProofingTransformTHR(cmsGetProfileContextID(InputProfile), InputProfile, InputFormat, OutputProfile, OutputFormat, ProofingProfile, nIntent, ProofingIntent, dwFlags); } // Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed cmsContext CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform) { _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; if (xform == NULL) return NULL; return xform -> ContextID; } // Grab the input/output formats cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform) { _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; if (xform == NULL) return 0; return xform->InputFormat; } cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform) { _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; if (xform == NULL) return 0; return xform->OutputFormat; } // For backwards compatibility cmsBool CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat) { _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; cmsFormatter16 FromInput, ToOutput; // We only can afford to change formatters if previous transform is at least 16 bits if (!(xform ->dwOriginalFlags & cmsFLAGS_CAN_CHANGE_FORMATTER)) { cmsSignalError(xform ->ContextID, cmsERROR_NOT_SUITABLE, "cmsChangeBuffersFormat works only on transforms created originally with at least 16 bits of precision"); return FALSE; } FromInput = _cmsGetFormatter(xform->ContextID, InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16; ToOutput = _cmsGetFormatter(xform->ContextID, OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16; if (FromInput == NULL || ToOutput == NULL) { cmsSignalError(xform -> ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported raster format"); return FALSE; } xform ->InputFormat = InputFormat; xform ->OutputFormat = OutputFormat; xform ->FromInput = FromInput; xform ->ToOutput = ToOutput; return TRUE; } lcms2-2.12rc1/src/cmslut.c0000644000175000017500000014617113775114656014371 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Allocates an empty multi profile element cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID, cmsStageSignature Type, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels, _cmsStageEvalFn EvalPtr, _cmsStageDupElemFn DupElemPtr, _cmsStageFreeElemFn FreePtr, void* Data) { cmsStage* ph = (cmsStage*) _cmsMallocZero(ContextID, sizeof(cmsStage)); if (ph == NULL) return NULL; ph ->ContextID = ContextID; ph ->Type = Type; ph ->Implements = Type; // By default, no clue on what is implementing ph ->InputChannels = InputChannels; ph ->OutputChannels = OutputChannels; ph ->EvalPtr = EvalPtr; ph ->DupElemPtr = DupElemPtr; ph ->FreePtr = FreePtr; ph ->Data = Data; return ph; } static void EvaluateIdentity(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { memmove(Out, In, mpe ->InputChannels * sizeof(cmsFloat32Number)); } cmsStage* CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels) { return _cmsStageAllocPlaceholder(ContextID, cmsSigIdentityElemType, nChannels, nChannels, EvaluateIdentity, NULL, NULL, NULL); } // Conversion functions. From floating point to 16 bits static void FromFloatTo16(const cmsFloat32Number In[], cmsUInt16Number Out[], cmsUInt32Number n) { cmsUInt32Number i; for (i=0; i < n; i++) { Out[i] = _cmsQuickSaturateWord(In[i] * 65535.0); } } // From 16 bits to floating point static void From16ToFloat(const cmsUInt16Number In[], cmsFloat32Number Out[], cmsUInt32Number n) { cmsUInt32Number i; for (i=0; i < n; i++) { Out[i] = (cmsFloat32Number) In[i] / 65535.0F; } } // This function is quite useful to analyze the structure of a LUT and retrieve the MPE elements // that conform the LUT. It should be called with the LUT, the number of expected elements and // then a list of expected types followed with a list of cmsFloat64Number pointers to MPE elements. If // the function founds a match with current pipeline, it fills the pointers and returns TRUE // if not, returns FALSE without touching anything. Setting pointers to NULL does bypass // the storage process. cmsBool CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...) { va_list args; cmsUInt32Number i; cmsStage* mpe; cmsStageSignature Type; void** ElemPtr; // Make sure same number of elements if (cmsPipelineStageCount(Lut) != n) return FALSE; va_start(args, n); // Iterate across asked types mpe = Lut ->Elements; for (i=0; i < n; i++) { // Get asked type. cmsStageSignature is promoted to int by compiler Type = (cmsStageSignature)va_arg(args, int); if (mpe ->Type != Type) { va_end(args); // Mismatch. We are done. return FALSE; } mpe = mpe ->Next; } // Found a combination, fill pointers if not NULL mpe = Lut ->Elements; for (i=0; i < n; i++) { ElemPtr = va_arg(args, void**); if (ElemPtr != NULL) *ElemPtr = mpe; mpe = mpe ->Next; } va_end(args); return TRUE; } // Below there are implementations for several types of elements. Each type may be implemented by a // evaluation function, a duplication function, a function to free resources and a constructor. // ************************************************************************************************* // Type cmsSigCurveSetElemType (curves) // ************************************************************************************************* cmsToneCurve** _cmsStageGetPtrToCurveSet(const cmsStage* mpe) { _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) mpe ->Data; return Data ->TheCurves; } static void EvaluateCurves(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { _cmsStageToneCurvesData* Data; cmsUInt32Number i; _cmsAssert(mpe != NULL); Data = (_cmsStageToneCurvesData*) mpe ->Data; if (Data == NULL) return; if (Data ->TheCurves == NULL) return; for (i=0; i < Data ->nCurves; i++) { Out[i] = cmsEvalToneCurveFloat(Data ->TheCurves[i], In[i]); } } static void CurveSetElemTypeFree(cmsStage* mpe) { _cmsStageToneCurvesData* Data; cmsUInt32Number i; _cmsAssert(mpe != NULL); Data = (_cmsStageToneCurvesData*) mpe ->Data; if (Data == NULL) return; if (Data ->TheCurves != NULL) { for (i=0; i < Data ->nCurves; i++) { if (Data ->TheCurves[i] != NULL) cmsFreeToneCurve(Data ->TheCurves[i]); } } _cmsFree(mpe ->ContextID, Data ->TheCurves); _cmsFree(mpe ->ContextID, Data); } static void* CurveSetDup(cmsStage* mpe) { _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*) mpe ->Data; _cmsStageToneCurvesData* NewElem; cmsUInt32Number i; NewElem = (_cmsStageToneCurvesData*) _cmsMallocZero(mpe ->ContextID, sizeof(_cmsStageToneCurvesData)); if (NewElem == NULL) return NULL; NewElem ->nCurves = Data ->nCurves; NewElem ->TheCurves = (cmsToneCurve**) _cmsCalloc(mpe ->ContextID, NewElem ->nCurves, sizeof(cmsToneCurve*)); if (NewElem ->TheCurves == NULL) goto Error; for (i=0; i < NewElem ->nCurves; i++) { // Duplicate each curve. It may fail. NewElem ->TheCurves[i] = cmsDupToneCurve(Data ->TheCurves[i]); if (NewElem ->TheCurves[i] == NULL) goto Error; } return (void*) NewElem; Error: if (NewElem ->TheCurves != NULL) { for (i=0; i < NewElem ->nCurves; i++) { if (NewElem ->TheCurves[i]) cmsFreeToneCurve(NewElem ->TheCurves[i]); } } _cmsFree(mpe ->ContextID, NewElem ->TheCurves); _cmsFree(mpe ->ContextID, NewElem); return NULL; } // Curves == NULL forces identity curves cmsStage* CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]) { cmsUInt32Number i; _cmsStageToneCurvesData* NewElem; cmsStage* NewMPE; NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigCurveSetElemType, nChannels, nChannels, EvaluateCurves, CurveSetDup, CurveSetElemTypeFree, NULL ); if (NewMPE == NULL) return NULL; NewElem = (_cmsStageToneCurvesData*) _cmsMallocZero(ContextID, sizeof(_cmsStageToneCurvesData)); if (NewElem == NULL) { cmsStageFree(NewMPE); return NULL; } NewMPE ->Data = (void*) NewElem; NewElem ->nCurves = nChannels; NewElem ->TheCurves = (cmsToneCurve**) _cmsCalloc(ContextID, nChannels, sizeof(cmsToneCurve*)); if (NewElem ->TheCurves == NULL) { cmsStageFree(NewMPE); return NULL; } for (i=0; i < nChannels; i++) { if (Curves == NULL) { NewElem ->TheCurves[i] = cmsBuildGamma(ContextID, 1.0); } else { NewElem ->TheCurves[i] = cmsDupToneCurve(Curves[i]); } if (NewElem ->TheCurves[i] == NULL) { cmsStageFree(NewMPE); return NULL; } } return NewMPE; } // Create a bunch of identity curves cmsStage* CMSEXPORT _cmsStageAllocIdentityCurves(cmsContext ContextID, cmsUInt32Number nChannels) { cmsStage* mpe = cmsStageAllocToneCurves(ContextID, nChannels, NULL); if (mpe == NULL) return NULL; mpe ->Implements = cmsSigIdentityElemType; return mpe; } // ************************************************************************************************* // Type cmsSigMatrixElemType (Matrices) // ************************************************************************************************* // Special care should be taken here because precision loss. A temporary cmsFloat64Number buffer is being used static void EvaluateMatrix(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { cmsUInt32Number i, j; _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; cmsFloat64Number Tmp; // Input is already in 0..1.0 notation for (i=0; i < mpe ->OutputChannels; i++) { Tmp = 0; for (j=0; j < mpe->InputChannels; j++) { Tmp += In[j] * Data->Double[i*mpe->InputChannels + j]; } if (Data ->Offset != NULL) Tmp += Data->Offset[i]; Out[i] = (cmsFloat32Number) Tmp; } // Output in 0..1.0 domain } // Duplicate a yet-existing matrix element static void* MatrixElemDup(cmsStage* mpe) { _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; _cmsStageMatrixData* NewElem; cmsUInt32Number sz; NewElem = (_cmsStageMatrixData*) _cmsMallocZero(mpe ->ContextID, sizeof(_cmsStageMatrixData)); if (NewElem == NULL) return NULL; sz = mpe ->InputChannels * mpe ->OutputChannels; NewElem ->Double = (cmsFloat64Number*) _cmsDupMem(mpe ->ContextID, Data ->Double, sz * sizeof(cmsFloat64Number)) ; if (Data ->Offset) NewElem ->Offset = (cmsFloat64Number*) _cmsDupMem(mpe ->ContextID, Data ->Offset, mpe -> OutputChannels * sizeof(cmsFloat64Number)) ; return (void*) NewElem; } static void MatrixElemTypeFree(cmsStage* mpe) { _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; if (Data == NULL) return; if (Data ->Double) _cmsFree(mpe ->ContextID, Data ->Double); if (Data ->Offset) _cmsFree(mpe ->ContextID, Data ->Offset); _cmsFree(mpe ->ContextID, mpe ->Data); } cmsStage* CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset) { cmsUInt32Number i, n; _cmsStageMatrixData* NewElem; cmsStage* NewMPE; n = Rows * Cols; // Check for overflow if (n == 0) return NULL; if (n >= UINT_MAX / Cols) return NULL; if (n >= UINT_MAX / Rows) return NULL; if (n < Rows || n < Cols) return NULL; NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigMatrixElemType, Cols, Rows, EvaluateMatrix, MatrixElemDup, MatrixElemTypeFree, NULL ); if (NewMPE == NULL) return NULL; NewElem = (_cmsStageMatrixData*) _cmsMallocZero(ContextID, sizeof(_cmsStageMatrixData)); if (NewElem == NULL) goto Error; NewMPE->Data = (void*)NewElem; NewElem ->Double = (cmsFloat64Number*) _cmsCalloc(ContextID, n, sizeof(cmsFloat64Number)); if (NewElem->Double == NULL) goto Error; for (i=0; i < n; i++) { NewElem ->Double[i] = Matrix[i]; } if (Offset != NULL) { NewElem ->Offset = (cmsFloat64Number*) _cmsCalloc(ContextID, Rows, sizeof(cmsFloat64Number)); if (NewElem->Offset == NULL) goto Error; for (i=0; i < Rows; i++) { NewElem ->Offset[i] = Offset[i]; } } return NewMPE; Error: cmsStageFree(NewMPE); return NULL; } // ************************************************************************************************* // Type cmsSigCLutElemType // ************************************************************************************************* // Evaluate in true floating point static void EvaluateCLUTfloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; Data -> Params ->Interpolation.LerpFloat(In, Out, Data->Params); } // Convert to 16 bits, evaluate, and back to floating point static void EvaluateCLUTfloatIn16(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; cmsUInt16Number In16[MAX_STAGE_CHANNELS], Out16[MAX_STAGE_CHANNELS]; _cmsAssert(mpe ->InputChannels <= MAX_STAGE_CHANNELS); _cmsAssert(mpe ->OutputChannels <= MAX_STAGE_CHANNELS); FromFloatTo16(In, In16, mpe ->InputChannels); Data -> Params ->Interpolation.Lerp16(In16, Out16, Data->Params); From16ToFloat(Out16, Out, mpe ->OutputChannels); } // Given an hypercube of b dimensions, with Dims[] number of nodes by dimension, calculate the total amount of nodes static cmsUInt32Number CubeSize(const cmsUInt32Number Dims[], cmsUInt32Number b) { cmsUInt32Number rv, dim; _cmsAssert(Dims != NULL); for (rv = 1; b > 0; b--) { dim = Dims[b-1]; if (dim == 0) return 0; // Error rv *= dim; // Check for overflow if (rv > UINT_MAX / dim) return 0; } return rv; } static void* CLUTElemDup(cmsStage* mpe) { _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; _cmsStageCLutData* NewElem; NewElem = (_cmsStageCLutData*) _cmsMallocZero(mpe ->ContextID, sizeof(_cmsStageCLutData)); if (NewElem == NULL) return NULL; NewElem ->nEntries = Data ->nEntries; NewElem ->HasFloatValues = Data ->HasFloatValues; if (Data ->Tab.T) { if (Data ->HasFloatValues) { NewElem ->Tab.TFloat = (cmsFloat32Number*) _cmsDupMem(mpe ->ContextID, Data ->Tab.TFloat, Data ->nEntries * sizeof (cmsFloat32Number)); if (NewElem ->Tab.TFloat == NULL) goto Error; } else { NewElem ->Tab.T = (cmsUInt16Number*) _cmsDupMem(mpe ->ContextID, Data ->Tab.T, Data ->nEntries * sizeof (cmsUInt16Number)); if (NewElem ->Tab.T == NULL) goto Error; } } NewElem ->Params = _cmsComputeInterpParamsEx(mpe ->ContextID, Data ->Params ->nSamples, Data ->Params ->nInputs, Data ->Params ->nOutputs, NewElem ->Tab.T, Data ->Params ->dwFlags); if (NewElem->Params != NULL) return (void*) NewElem; Error: if (NewElem->Tab.T) // This works for both types _cmsFree(mpe ->ContextID, NewElem -> Tab.T); _cmsFree(mpe ->ContextID, NewElem); return NULL; } static void CLutElemTypeFree(cmsStage* mpe) { _cmsStageCLutData* Data = (_cmsStageCLutData*) mpe ->Data; // Already empty if (Data == NULL) return; // This works for both types if (Data -> Tab.T) _cmsFree(mpe ->ContextID, Data -> Tab.T); _cmsFreeInterpParams(Data ->Params); _cmsFree(mpe ->ContextID, mpe ->Data); } // Allocates a 16-bit multidimensional CLUT. This is evaluated at 16-bit precision. Table may have different // granularity on each dimension. cmsStage* CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table) { cmsUInt32Number i, n; _cmsStageCLutData* NewElem; cmsStage* NewMPE; _cmsAssert(clutPoints != NULL); if (inputChan > MAX_INPUT_DIMENSIONS) { cmsSignalError(ContextID, cmsERROR_RANGE, "Too many input channels (%d channels, max=%d)", inputChan, MAX_INPUT_DIMENSIONS); return NULL; } NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigCLutElemType, inputChan, outputChan, EvaluateCLUTfloatIn16, CLUTElemDup, CLutElemTypeFree, NULL ); if (NewMPE == NULL) return NULL; NewElem = (_cmsStageCLutData*) _cmsMallocZero(ContextID, sizeof(_cmsStageCLutData)); if (NewElem == NULL) { cmsStageFree(NewMPE); return NULL; } NewMPE ->Data = (void*) NewElem; NewElem -> nEntries = n = outputChan * CubeSize(clutPoints, inputChan); NewElem -> HasFloatValues = FALSE; if (n == 0) { cmsStageFree(NewMPE); return NULL; } NewElem ->Tab.T = (cmsUInt16Number*) _cmsCalloc(ContextID, n, sizeof(cmsUInt16Number)); if (NewElem ->Tab.T == NULL) { cmsStageFree(NewMPE); return NULL; } if (Table != NULL) { for (i=0; i < n; i++) { NewElem ->Tab.T[i] = Table[i]; } } NewElem ->Params = _cmsComputeInterpParamsEx(ContextID, clutPoints, inputChan, outputChan, NewElem ->Tab.T, CMS_LERP_FLAGS_16BITS); if (NewElem ->Params == NULL) { cmsStageFree(NewMPE); return NULL; } return NewMPE; } cmsStage* CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table) { cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; int i; // Our resulting LUT would be same gridpoints on all dimensions for (i=0; i < MAX_INPUT_DIMENSIONS; i++) Dimensions[i] = nGridPoints; return cmsStageAllocCLut16bitGranular(ContextID, Dimensions, inputChan, outputChan, Table); } cmsStage* CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table) { cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; int i; // Our resulting LUT would be same gridpoints on all dimensions for (i=0; i < MAX_INPUT_DIMENSIONS; i++) Dimensions[i] = nGridPoints; return cmsStageAllocCLutFloatGranular(ContextID, Dimensions, inputChan, outputChan, Table); } cmsStage* CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table) { cmsUInt32Number i, n; _cmsStageCLutData* NewElem; cmsStage* NewMPE; _cmsAssert(clutPoints != NULL); if (inputChan > MAX_INPUT_DIMENSIONS) { cmsSignalError(ContextID, cmsERROR_RANGE, "Too many input channels (%d channels, max=%d)", inputChan, MAX_INPUT_DIMENSIONS); return NULL; } NewMPE = _cmsStageAllocPlaceholder(ContextID, cmsSigCLutElemType, inputChan, outputChan, EvaluateCLUTfloat, CLUTElemDup, CLutElemTypeFree, NULL); if (NewMPE == NULL) return NULL; NewElem = (_cmsStageCLutData*) _cmsMallocZero(ContextID, sizeof(_cmsStageCLutData)); if (NewElem == NULL) { cmsStageFree(NewMPE); return NULL; } NewMPE ->Data = (void*) NewElem; // There is a potential integer overflow on conputing n and nEntries. NewElem -> nEntries = n = outputChan * CubeSize(clutPoints, inputChan); NewElem -> HasFloatValues = TRUE; if (n == 0) { cmsStageFree(NewMPE); return NULL; } NewElem ->Tab.TFloat = (cmsFloat32Number*) _cmsCalloc(ContextID, n, sizeof(cmsFloat32Number)); if (NewElem ->Tab.TFloat == NULL) { cmsStageFree(NewMPE); return NULL; } if (Table != NULL) { for (i=0; i < n; i++) { NewElem ->Tab.TFloat[i] = Table[i]; } } NewElem ->Params = _cmsComputeInterpParamsEx(ContextID, clutPoints, inputChan, outputChan, NewElem ->Tab.TFloat, CMS_LERP_FLAGS_FLOAT); if (NewElem ->Params == NULL) { cmsStageFree(NewMPE); return NULL; } return NewMPE; } static int IdentitySampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo) { int nChan = *(int*) Cargo; int i; for (i=0; i < nChan; i++) Out[i] = In[i]; return 1; } // Creates an MPE that just copies input to output cmsStage* CMSEXPORT _cmsStageAllocIdentityCLut(cmsContext ContextID, cmsUInt32Number nChan) { cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; cmsStage* mpe ; int i; for (i=0; i < MAX_INPUT_DIMENSIONS; i++) Dimensions[i] = 2; mpe = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, nChan, nChan, NULL); if (mpe == NULL) return NULL; if (!cmsStageSampleCLut16bit(mpe, IdentitySampler, &nChan, 0)) { cmsStageFree(mpe); return NULL; } mpe ->Implements = cmsSigIdentityElemType; return mpe; } // Quantize a value 0 <= i < MaxSamples to 0..0xffff cmsUInt16Number CMSEXPORT _cmsQuantizeVal(cmsFloat64Number i, cmsUInt32Number MaxSamples) { cmsFloat64Number x; x = ((cmsFloat64Number) i * 65535.) / (cmsFloat64Number) (MaxSamples - 1); return _cmsQuickSaturateWord(x); } // This routine does a sweep on whole input space, and calls its callback // function on knots. returns TRUE if all ok, FALSE otherwise. cmsBool CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe, cmsSAMPLER16 Sampler, void * Cargo, cmsUInt32Number dwFlags) { int i, t, index, rest; cmsUInt32Number nTotalPoints; cmsUInt32Number nInputs, nOutputs; cmsUInt32Number* nSamples; cmsUInt16Number In[MAX_INPUT_DIMENSIONS+1], Out[MAX_STAGE_CHANNELS]; _cmsStageCLutData* clut; if (mpe == NULL) return FALSE; clut = (_cmsStageCLutData*) mpe->Data; if (clut == NULL) return FALSE; nSamples = clut->Params ->nSamples; nInputs = clut->Params ->nInputs; nOutputs = clut->Params ->nOutputs; if (nInputs <= 0) return FALSE; if (nOutputs <= 0) return FALSE; if (nInputs > MAX_INPUT_DIMENSIONS) return FALSE; if (nOutputs >= MAX_STAGE_CHANNELS) return FALSE; memset(In, 0, sizeof(In)); memset(Out, 0, sizeof(Out)); nTotalPoints = CubeSize(nSamples, nInputs); if (nTotalPoints == 0) return FALSE; index = 0; for (i = 0; i < (int) nTotalPoints; i++) { rest = i; for (t = (int)nInputs - 1; t >= 0; --t) { cmsUInt32Number Colorant = rest % nSamples[t]; rest /= nSamples[t]; In[t] = _cmsQuantizeVal(Colorant, nSamples[t]); } if (clut ->Tab.T != NULL) { for (t = 0; t < (int)nOutputs; t++) Out[t] = clut->Tab.T[index + t]; } if (!Sampler(In, Out, Cargo)) return FALSE; if (!(dwFlags & SAMPLER_INSPECT)) { if (clut ->Tab.T != NULL) { for (t=0; t < (int) nOutputs; t++) clut->Tab.T[index + t] = Out[t]; } } index += nOutputs; } return TRUE; } // Same as anterior, but for floating point cmsBool CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void * Cargo, cmsUInt32Number dwFlags) { int i, t, index, rest; cmsUInt32Number nTotalPoints; cmsUInt32Number nInputs, nOutputs; cmsUInt32Number* nSamples; cmsFloat32Number In[MAX_INPUT_DIMENSIONS+1], Out[MAX_STAGE_CHANNELS]; _cmsStageCLutData* clut = (_cmsStageCLutData*) mpe->Data; nSamples = clut->Params ->nSamples; nInputs = clut->Params ->nInputs; nOutputs = clut->Params ->nOutputs; if (nInputs <= 0) return FALSE; if (nOutputs <= 0) return FALSE; if (nInputs > MAX_INPUT_DIMENSIONS) return FALSE; if (nOutputs >= MAX_STAGE_CHANNELS) return FALSE; nTotalPoints = CubeSize(nSamples, nInputs); if (nTotalPoints == 0) return FALSE; index = 0; for (i = 0; i < (int)nTotalPoints; i++) { rest = i; for (t = (int) nInputs-1; t >=0; --t) { cmsUInt32Number Colorant = rest % nSamples[t]; rest /= nSamples[t]; In[t] = (cmsFloat32Number) (_cmsQuantizeVal(Colorant, nSamples[t]) / 65535.0); } if (clut ->Tab.TFloat != NULL) { for (t=0; t < (int) nOutputs; t++) Out[t] = clut->Tab.TFloat[index + t]; } if (!Sampler(In, Out, Cargo)) return FALSE; if (!(dwFlags & SAMPLER_INSPECT)) { if (clut ->Tab.TFloat != NULL) { for (t=0; t < (int) nOutputs; t++) clut->Tab.TFloat[index + t] = Out[t]; } } index += nOutputs; } return TRUE; } // This routine does a sweep on whole input space, and calls its callback // function on knots. returns TRUE if all ok, FALSE otherwise. cmsBool CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], cmsSAMPLER16 Sampler, void * Cargo) { int i, t, rest; cmsUInt32Number nTotalPoints; cmsUInt16Number In[cmsMAXCHANNELS]; if (nInputs >= cmsMAXCHANNELS) return FALSE; nTotalPoints = CubeSize(clutPoints, nInputs); if (nTotalPoints == 0) return FALSE; for (i = 0; i < (int) nTotalPoints; i++) { rest = i; for (t = (int) nInputs-1; t >=0; --t) { cmsUInt32Number Colorant = rest % clutPoints[t]; rest /= clutPoints[t]; In[t] = _cmsQuantizeVal(Colorant, clutPoints[t]); } if (!Sampler(In, NULL, Cargo)) return FALSE; } return TRUE; } cmsInt32Number CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[], cmsSAMPLERFLOAT Sampler, void * Cargo) { int i, t, rest; cmsUInt32Number nTotalPoints; cmsFloat32Number In[cmsMAXCHANNELS]; if (nInputs >= cmsMAXCHANNELS) return FALSE; nTotalPoints = CubeSize(clutPoints, nInputs); if (nTotalPoints == 0) return FALSE; for (i = 0; i < (int) nTotalPoints; i++) { rest = i; for (t = (int) nInputs-1; t >=0; --t) { cmsUInt32Number Colorant = rest % clutPoints[t]; rest /= clutPoints[t]; In[t] = (cmsFloat32Number) (_cmsQuantizeVal(Colorant, clutPoints[t]) / 65535.0); } if (!Sampler(In, NULL, Cargo)) return FALSE; } return TRUE; } // ******************************************************************************** // Type cmsSigLab2XYZElemType // ******************************************************************************** static void EvaluateLab2XYZ(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { cmsCIELab Lab; cmsCIEXYZ XYZ; const cmsFloat64Number XYZadj = MAX_ENCODEABLE_XYZ; // V4 rules Lab.L = In[0] * 100.0; Lab.a = In[1] * 255.0 - 128.0; Lab.b = In[2] * 255.0 - 128.0; cmsLab2XYZ(NULL, &XYZ, &Lab); // From XYZ, range 0..19997 to 0..1.0, note that 1.99997 comes from 0xffff // encoded as 1.15 fixed point, so 1 + (32767.0 / 32768.0) Out[0] = (cmsFloat32Number) ((cmsFloat64Number) XYZ.X / XYZadj); Out[1] = (cmsFloat32Number) ((cmsFloat64Number) XYZ.Y / XYZadj); Out[2] = (cmsFloat32Number) ((cmsFloat64Number) XYZ.Z / XYZadj); return; cmsUNUSED_PARAMETER(mpe); } // No dup or free routines needed, as the structure has no pointers in it. cmsStage* CMSEXPORT _cmsStageAllocLab2XYZ(cmsContext ContextID) { return _cmsStageAllocPlaceholder(ContextID, cmsSigLab2XYZElemType, 3, 3, EvaluateLab2XYZ, NULL, NULL, NULL); } // ******************************************************************************** // v2 L=100 is supposed to be placed on 0xFF00. There is no reasonable // number of gridpoints that would make exact match. However, a prelinearization // of 258 entries, would map 0xFF00 exactly on entry 257, and this is good to avoid scum dot. // Almost all what we need but unfortunately, the rest of entries should be scaled by // (255*257/256) and this is not exact. cmsStage* _cmsStageAllocLabV2ToV4curves(cmsContext ContextID) { cmsStage* mpe; cmsToneCurve* LabTable[3]; int i, j; LabTable[0] = cmsBuildTabulatedToneCurve16(ContextID, 258, NULL); LabTable[1] = cmsBuildTabulatedToneCurve16(ContextID, 258, NULL); LabTable[2] = cmsBuildTabulatedToneCurve16(ContextID, 258, NULL); for (j=0; j < 3; j++) { if (LabTable[j] == NULL) { cmsFreeToneCurveTriple(LabTable); return NULL; } // We need to map * (0xffff / 0xff00), that's same as (257 / 256) // So we can use 258-entry tables to do the trick (i / 257) * (255 * 257) * (257 / 256); for (i=0; i < 257; i++) { LabTable[j]->Table16[i] = (cmsUInt16Number) ((i * 0xffff + 0x80) >> 8); } LabTable[j] ->Table16[257] = 0xffff; } mpe = cmsStageAllocToneCurves(ContextID, 3, LabTable); cmsFreeToneCurveTriple(LabTable); if (mpe == NULL) return NULL; mpe ->Implements = cmsSigLabV2toV4; return mpe; } // ******************************************************************************** // Matrix-based conversion, which is more accurate, but slower and cannot properly be saved in devicelink profiles cmsStage* CMSEXPORT _cmsStageAllocLabV2ToV4(cmsContext ContextID) { static const cmsFloat64Number V2ToV4[] = { 65535.0/65280.0, 0, 0, 0, 65535.0/65280.0, 0, 0, 0, 65535.0/65280.0 }; cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, V2ToV4, NULL); if (mpe == NULL) return mpe; mpe ->Implements = cmsSigLabV2toV4; return mpe; } // Reverse direction cmsStage* CMSEXPORT _cmsStageAllocLabV4ToV2(cmsContext ContextID) { static const cmsFloat64Number V4ToV2[] = { 65280.0/65535.0, 0, 0, 0, 65280.0/65535.0, 0, 0, 0, 65280.0/65535.0 }; cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, V4ToV2, NULL); if (mpe == NULL) return mpe; mpe ->Implements = cmsSigLabV4toV2; return mpe; } // To Lab to float. Note that the MPE gives numbers in normal Lab range // and we need 0..1.0 range for the formatters // L* : 0...100 => 0...1.0 (L* / 100) // ab* : -128..+127 to 0..1 ((ab* + 128) / 255) cmsStage* _cmsStageNormalizeFromLabFloat(cmsContext ContextID) { static const cmsFloat64Number a1[] = { 1.0/100.0, 0, 0, 0, 1.0/255.0, 0, 0, 0, 1.0/255.0 }; static const cmsFloat64Number o1[] = { 0, 128.0/255.0, 128.0/255.0 }; cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, a1, o1); if (mpe == NULL) return mpe; mpe ->Implements = cmsSigLab2FloatPCS; return mpe; } // Fom XYZ to floating point PCS cmsStage* _cmsStageNormalizeFromXyzFloat(cmsContext ContextID) { #define n (32768.0/65535.0) static const cmsFloat64Number a1[] = { n, 0, 0, 0, n, 0, 0, 0, n }; #undef n cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, a1, NULL); if (mpe == NULL) return mpe; mpe ->Implements = cmsSigXYZ2FloatPCS; return mpe; } cmsStage* _cmsStageNormalizeToLabFloat(cmsContext ContextID) { static const cmsFloat64Number a1[] = { 100.0, 0, 0, 0, 255.0, 0, 0, 0, 255.0 }; static const cmsFloat64Number o1[] = { 0, -128.0, -128.0 }; cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, a1, o1); if (mpe == NULL) return mpe; mpe ->Implements = cmsSigFloatPCS2Lab; return mpe; } cmsStage* _cmsStageNormalizeToXyzFloat(cmsContext ContextID) { #define n (65535.0/32768.0) static const cmsFloat64Number a1[] = { n, 0, 0, 0, n, 0, 0, 0, n }; #undef n cmsStage *mpe = cmsStageAllocMatrix(ContextID, 3, 3, a1, NULL); if (mpe == NULL) return mpe; mpe ->Implements = cmsSigFloatPCS2XYZ; return mpe; } // Clips values smaller than zero static void Clipper(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { cmsUInt32Number i; for (i = 0; i < mpe->InputChannels; i++) { cmsFloat32Number n = In[i]; Out[i] = n < 0 ? 0 : n; } } cmsStage* _cmsStageClipNegatives(cmsContext ContextID, cmsUInt32Number nChannels) { return _cmsStageAllocPlaceholder(ContextID, cmsSigClipNegativesElemType, nChannels, nChannels, Clipper, NULL, NULL, NULL); } // ******************************************************************************** // Type cmsSigXYZ2LabElemType // ******************************************************************************** static void EvaluateXYZ2Lab(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { cmsCIELab Lab; cmsCIEXYZ XYZ; const cmsFloat64Number XYZadj = MAX_ENCODEABLE_XYZ; // From 0..1.0 to XYZ XYZ.X = In[0] * XYZadj; XYZ.Y = In[1] * XYZadj; XYZ.Z = In[2] * XYZadj; cmsXYZ2Lab(NULL, &Lab, &XYZ); // From V4 Lab to 0..1.0 Out[0] = (cmsFloat32Number) (Lab.L / 100.0); Out[1] = (cmsFloat32Number) ((Lab.a + 128.0) / 255.0); Out[2] = (cmsFloat32Number) ((Lab.b + 128.0) / 255.0); return; cmsUNUSED_PARAMETER(mpe); } cmsStage* CMSEXPORT _cmsStageAllocXYZ2Lab(cmsContext ContextID) { return _cmsStageAllocPlaceholder(ContextID, cmsSigXYZ2LabElemType, 3, 3, EvaluateXYZ2Lab, NULL, NULL, NULL); } // ******************************************************************************** // For v4, S-Shaped curves are placed in a/b axis to increase resolution near gray cmsStage* _cmsStageAllocLabPrelin(cmsContext ContextID) { cmsToneCurve* LabTable[3]; cmsFloat64Number Params[1] = {2.4} ; LabTable[0] = cmsBuildGamma(ContextID, 1.0); LabTable[1] = cmsBuildParametricToneCurve(ContextID, 108, Params); LabTable[2] = cmsBuildParametricToneCurve(ContextID, 108, Params); return cmsStageAllocToneCurves(ContextID, 3, LabTable); } // Free a single MPE void CMSEXPORT cmsStageFree(cmsStage* mpe) { if (mpe ->FreePtr) mpe ->FreePtr(mpe); _cmsFree(mpe ->ContextID, mpe); } cmsUInt32Number CMSEXPORT cmsStageInputChannels(const cmsStage* mpe) { return mpe ->InputChannels; } cmsUInt32Number CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe) { return mpe ->OutputChannels; } cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe) { return mpe -> Type; } void* CMSEXPORT cmsStageData(const cmsStage* mpe) { return mpe -> Data; } cmsStage* CMSEXPORT cmsStageNext(const cmsStage* mpe) { return mpe -> Next; } // Duplicates an MPE cmsStage* CMSEXPORT cmsStageDup(cmsStage* mpe) { cmsStage* NewMPE; if (mpe == NULL) return NULL; NewMPE = _cmsStageAllocPlaceholder(mpe ->ContextID, mpe ->Type, mpe ->InputChannels, mpe ->OutputChannels, mpe ->EvalPtr, mpe ->DupElemPtr, mpe ->FreePtr, NULL); if (NewMPE == NULL) return NULL; NewMPE ->Implements = mpe ->Implements; if (mpe ->DupElemPtr) { NewMPE ->Data = mpe ->DupElemPtr(mpe); if (NewMPE->Data == NULL) { cmsStageFree(NewMPE); return NULL; } } else { NewMPE ->Data = NULL; } return NewMPE; } // *********************************************************************************************************** // This function sets up the channel count static cmsBool BlessLUT(cmsPipeline* lut) { // We can set the input/output channels only if we have elements. if (lut ->Elements != NULL) { cmsStage* prev; cmsStage* next; cmsStage* First; cmsStage* Last; First = cmsPipelineGetPtrToFirstStage(lut); Last = cmsPipelineGetPtrToLastStage(lut); if (First == NULL || Last == NULL) return FALSE; lut->InputChannels = First->InputChannels; lut->OutputChannels = Last->OutputChannels; // Check chain consistency prev = First; next = prev->Next; while (next != NULL) { if (next->InputChannels != prev->OutputChannels) return FALSE; next = next->Next; prev = prev->Next; } } return TRUE; } // Default to evaluate the LUT on 16 bit-basis. Precision is retained. static void _LUTeval16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D) { cmsPipeline* lut = (cmsPipeline*) D; cmsStage *mpe; cmsFloat32Number Storage[2][MAX_STAGE_CHANNELS]; int Phase = 0, NextPhase; From16ToFloat(In, &Storage[Phase][0], lut ->InputChannels); for (mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) { NextPhase = Phase ^ 1; mpe ->EvalPtr(&Storage[Phase][0], &Storage[NextPhase][0], mpe); Phase = NextPhase; } FromFloatTo16(&Storage[Phase][0], Out, lut ->OutputChannels); } // Does evaluate the LUT on cmsFloat32Number-basis. static void _LUTevalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const void* D) { cmsPipeline* lut = (cmsPipeline*) D; cmsStage *mpe; cmsFloat32Number Storage[2][MAX_STAGE_CHANNELS]; int Phase = 0, NextPhase; memmove(&Storage[Phase][0], In, lut ->InputChannels * sizeof(cmsFloat32Number)); for (mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) { NextPhase = Phase ^ 1; mpe ->EvalPtr(&Storage[Phase][0], &Storage[NextPhase][0], mpe); Phase = NextPhase; } memmove(Out, &Storage[Phase][0], lut ->OutputChannels * sizeof(cmsFloat32Number)); } // LUT Creation & Destruction cmsPipeline* CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels) { cmsPipeline* NewLUT; // A value of zero in channels is allowed as placeholder if (InputChannels >= cmsMAXCHANNELS || OutputChannels >= cmsMAXCHANNELS) return NULL; NewLUT = (cmsPipeline*) _cmsMallocZero(ContextID, sizeof(cmsPipeline)); if (NewLUT == NULL) return NULL; NewLUT -> InputChannels = InputChannels; NewLUT -> OutputChannels = OutputChannels; NewLUT ->Eval16Fn = _LUTeval16; NewLUT ->EvalFloatFn = _LUTevalFloat; NewLUT ->DupDataFn = NULL; NewLUT ->FreeDataFn = NULL; NewLUT ->Data = NewLUT; NewLUT ->ContextID = ContextID; if (!BlessLUT(NewLUT)) { _cmsFree(ContextID, NewLUT); return NULL; } return NewLUT; } cmsContext CMSEXPORT cmsGetPipelineContextID(const cmsPipeline* lut) { _cmsAssert(lut != NULL); return lut ->ContextID; } cmsUInt32Number CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut) { _cmsAssert(lut != NULL); return lut ->InputChannels; } cmsUInt32Number CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut) { _cmsAssert(lut != NULL); return lut ->OutputChannels; } // Free a profile elements LUT void CMSEXPORT cmsPipelineFree(cmsPipeline* lut) { cmsStage *mpe, *Next; if (lut == NULL) return; for (mpe = lut ->Elements; mpe != NULL; mpe = Next) { Next = mpe ->Next; cmsStageFree(mpe); } if (lut ->FreeDataFn) lut ->FreeDataFn(lut ->ContextID, lut ->Data); _cmsFree(lut ->ContextID, lut); } // Default to evaluate the LUT on 16 bit-basis. void CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut) { _cmsAssert(lut != NULL); lut ->Eval16Fn(In, Out, lut->Data); } // Does evaluate the LUT on cmsFloat32Number-basis. void CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut) { _cmsAssert(lut != NULL); lut ->EvalFloatFn(In, Out, lut); } // Duplicates a LUT cmsPipeline* CMSEXPORT cmsPipelineDup(const cmsPipeline* lut) { cmsPipeline* NewLUT; cmsStage *NewMPE, *Anterior = NULL, *mpe; cmsBool First = TRUE; if (lut == NULL) return NULL; NewLUT = cmsPipelineAlloc(lut ->ContextID, lut ->InputChannels, lut ->OutputChannels); if (NewLUT == NULL) return NULL; for (mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) { NewMPE = cmsStageDup(mpe); if (NewMPE == NULL) { cmsPipelineFree(NewLUT); return NULL; } if (First) { NewLUT ->Elements = NewMPE; First = FALSE; } else { if (Anterior != NULL) Anterior ->Next = NewMPE; } Anterior = NewMPE; } NewLUT ->Eval16Fn = lut ->Eval16Fn; NewLUT ->EvalFloatFn = lut ->EvalFloatFn; NewLUT ->DupDataFn = lut ->DupDataFn; NewLUT ->FreeDataFn = lut ->FreeDataFn; if (NewLUT ->DupDataFn != NULL) NewLUT ->Data = NewLUT ->DupDataFn(lut ->ContextID, lut->Data); NewLUT ->SaveAs8Bits = lut ->SaveAs8Bits; if (!BlessLUT(NewLUT)) { _cmsFree(lut->ContextID, NewLUT); return NULL; } return NewLUT; } int CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe) { cmsStage* Anterior = NULL, *pt; if (lut == NULL || mpe == NULL) return FALSE; switch (loc) { case cmsAT_BEGIN: mpe ->Next = lut ->Elements; lut ->Elements = mpe; break; case cmsAT_END: if (lut ->Elements == NULL) lut ->Elements = mpe; else { for (pt = lut ->Elements; pt != NULL; pt = pt -> Next) Anterior = pt; Anterior ->Next = mpe; mpe ->Next = NULL; } break; default:; return FALSE; } return BlessLUT(lut); } // Unlink an element and return the pointer to it void CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe) { cmsStage *Anterior, *pt, *Last; cmsStage *Unlinked = NULL; // If empty LUT, there is nothing to remove if (lut ->Elements == NULL) { if (mpe) *mpe = NULL; return; } // On depending on the strategy... switch (loc) { case cmsAT_BEGIN: { cmsStage* elem = lut ->Elements; lut ->Elements = elem -> Next; elem ->Next = NULL; Unlinked = elem; } break; case cmsAT_END: Anterior = Last = NULL; for (pt = lut ->Elements; pt != NULL; pt = pt -> Next) { Anterior = Last; Last = pt; } Unlinked = Last; // Next already points to NULL // Truncate the chain if (Anterior) Anterior ->Next = NULL; else lut ->Elements = NULL; break; default:; } if (mpe) *mpe = Unlinked; else cmsStageFree(Unlinked); // May fail, but we ignore it BlessLUT(lut); } // Concatenate two LUT into a new single one cmsBool CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2) { cmsStage* mpe; // If both LUTS does not have elements, we need to inherit // the number of channels if (l1 ->Elements == NULL && l2 ->Elements == NULL) { l1 ->InputChannels = l2 ->InputChannels; l1 ->OutputChannels = l2 ->OutputChannels; } // Cat second for (mpe = l2 ->Elements; mpe != NULL; mpe = mpe ->Next) { // We have to dup each element if (!cmsPipelineInsertStage(l1, cmsAT_END, cmsStageDup(mpe))) return FALSE; } return BlessLUT(l1); } cmsBool CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On) { cmsBool Anterior = lut ->SaveAs8Bits; lut ->SaveAs8Bits = On; return Anterior; } cmsStage* CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut) { return lut ->Elements; } cmsStage* CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut) { cmsStage *mpe, *Anterior = NULL; for (mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) Anterior = mpe; return Anterior; } cmsUInt32Number CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut) { cmsStage *mpe; cmsUInt32Number n; for (n=0, mpe = lut ->Elements; mpe != NULL; mpe = mpe ->Next) n++; return n; } // This function may be used to set the optional evaluator and a block of private data. If private data is being used, an optional // duplicator and free functions should also be specified in order to duplicate the LUT construct. Use NULL to inhibit such functionality. void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut, _cmsPipelineEval16Fn Eval16, void* PrivateData, _cmsFreeUserDataFn FreePrivateDataFn, _cmsDupUserDataFn DupPrivateDataFn) { Lut ->Eval16Fn = Eval16; Lut ->DupDataFn = DupPrivateDataFn; Lut ->FreeDataFn = FreePrivateDataFn; Lut ->Data = PrivateData; } // ----------------------------------------------------------- Reverse interpolation // Here's how it goes. The derivative Df(x) of the function f is the linear // transformation that best approximates f near the point x. It can be represented // by a matrix A whose entries are the partial derivatives of the components of f // with respect to all the coordinates. This is know as the Jacobian // // The best linear approximation to f is given by the matrix equation: // // y-y0 = A (x-x0) // // So, if x0 is a good "guess" for the zero of f, then solving for the zero of this // linear approximation will give a "better guess" for the zero of f. Thus let y=0, // and since y0=f(x0) one can solve the above equation for x. This leads to the // Newton's method formula: // // xn+1 = xn - A-1 f(xn) // // where xn+1 denotes the (n+1)-st guess, obtained from the n-th guess xn in the // fashion described above. Iterating this will give better and better approximations // if you have a "good enough" initial guess. #define JACOBIAN_EPSILON 0.001f #define INVERSION_MAX_ITERATIONS 30 // Increment with reflexion on boundary static void IncDelta(cmsFloat32Number *Val) { if (*Val < (1.0 - JACOBIAN_EPSILON)) *Val += JACOBIAN_EPSILON; else *Val -= JACOBIAN_EPSILON; } // Euclidean distance between two vectors of n elements each one static cmsFloat32Number EuclideanDistance(cmsFloat32Number a[], cmsFloat32Number b[], int n) { cmsFloat32Number sum = 0; int i; for (i=0; i < n; i++) { cmsFloat32Number dif = b[i] - a[i]; sum += dif * dif; } return sqrtf(sum); } // Evaluate a LUT in reverse direction. It only searches on 3->3 LUT. Uses Newton method // // x1 <- x - [J(x)]^-1 * f(x) // // lut: The LUT on where to do the search // Target: LabK, 3 values of Lab plus destination K which is fixed // Result: The obtained CMYK // Hint: Location where begin the search cmsBool CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], cmsFloat32Number Result[], cmsFloat32Number Hint[], const cmsPipeline* lut) { cmsUInt32Number i, j; cmsFloat64Number error, LastError = 1E20; cmsFloat32Number fx[4], x[4], xd[4], fxd[4]; cmsVEC3 tmp, tmp2; cmsMAT3 Jacobian; // Only 3->3 and 4->3 are supported if (lut ->InputChannels != 3 && lut ->InputChannels != 4) return FALSE; if (lut ->OutputChannels != 3) return FALSE; // Take the hint as starting point if specified if (Hint == NULL) { // Begin at any point, we choose 1/3 of CMY axis x[0] = x[1] = x[2] = 0.3f; } else { // Only copy 3 channels from hint... for (j=0; j < 3; j++) x[j] = Hint[j]; } // If Lut is 4-dimensions, then grab target[3], which is fixed if (lut ->InputChannels == 4) { x[3] = Target[3]; } else x[3] = 0; // To keep lint happy // Iterate for (i = 0; i < INVERSION_MAX_ITERATIONS; i++) { // Get beginning fx cmsPipelineEvalFloat(x, fx, lut); // Compute error error = EuclideanDistance(fx, Target, 3); // If not convergent, return last safe value if (error >= LastError) break; // Keep latest values LastError = error; for (j=0; j < lut ->InputChannels; j++) Result[j] = x[j]; // Found an exact match? if (error <= 0) break; // Obtain slope (the Jacobian) for (j = 0; j < 3; j++) { xd[0] = x[0]; xd[1] = x[1]; xd[2] = x[2]; xd[3] = x[3]; // Keep fixed channel IncDelta(&xd[j]); cmsPipelineEvalFloat(xd, fxd, lut); Jacobian.v[0].n[j] = ((fxd[0] - fx[0]) / JACOBIAN_EPSILON); Jacobian.v[1].n[j] = ((fxd[1] - fx[1]) / JACOBIAN_EPSILON); Jacobian.v[2].n[j] = ((fxd[2] - fx[2]) / JACOBIAN_EPSILON); } // Solve system tmp2.n[0] = fx[0] - Target[0]; tmp2.n[1] = fx[1] - Target[1]; tmp2.n[2] = fx[2] - Target[2]; if (!_cmsMAT3solve(&tmp, &Jacobian, &tmp2)) return FALSE; // Move our guess x[0] -= (cmsFloat32Number) tmp.n[0]; x[1] -= (cmsFloat32Number) tmp.n[1]; x[2] -= (cmsFloat32Number) tmp.n[2]; // Some clipping.... for (j=0; j < 3; j++) { if (x[j] < 0) x[j] = 0; else if (x[j] > 1.0) x[j] = 1.0; } } return TRUE; } lcms2-2.12rc1/src/cmsio1.c0000644000175000017500000010427613775114656014255 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Read tags using low-level functions, provides necessary glue code to adapt versions, etc. // LUT tags static const cmsTagSignature Device2PCS16[] = {cmsSigAToB0Tag, // Perceptual cmsSigAToB1Tag, // Relative colorimetric cmsSigAToB2Tag, // Saturation cmsSigAToB1Tag }; // Absolute colorimetric static const cmsTagSignature Device2PCSFloat[] = {cmsSigDToB0Tag, // Perceptual cmsSigDToB1Tag, // Relative colorimetric cmsSigDToB2Tag, // Saturation cmsSigDToB3Tag }; // Absolute colorimetric static const cmsTagSignature PCS2Device16[] = {cmsSigBToA0Tag, // Perceptual cmsSigBToA1Tag, // Relative colorimetric cmsSigBToA2Tag, // Saturation cmsSigBToA1Tag }; // Absolute colorimetric static const cmsTagSignature PCS2DeviceFloat[] = {cmsSigBToD0Tag, // Perceptual cmsSigBToD1Tag, // Relative colorimetric cmsSigBToD2Tag, // Saturation cmsSigBToD3Tag }; // Absolute colorimetric // Factors to convert from 1.15 fixed point to 0..1.0 range and vice-versa #define InpAdj (1.0/MAX_ENCODEABLE_XYZ) // (65536.0/(65535.0*2.0)) #define OutpAdj (MAX_ENCODEABLE_XYZ) // ((2.0*65535.0)/65536.0) // Several resources for gray conversions. static const cmsFloat64Number GrayInputMatrix[] = { (InpAdj*cmsD50X), (InpAdj*cmsD50Y), (InpAdj*cmsD50Z) }; static const cmsFloat64Number OneToThreeInputMatrix[] = { 1, 1, 1 }; static const cmsFloat64Number PickYMatrix[] = { 0, (OutpAdj*cmsD50Y), 0 }; static const cmsFloat64Number PickLstarMatrix[] = { 1, 0, 0 }; // Get a media white point fixing some issues found in certain old profiles cmsBool _cmsReadMediaWhitePoint(cmsCIEXYZ* Dest, cmsHPROFILE hProfile) { cmsCIEXYZ* Tag; _cmsAssert(Dest != NULL); Tag = (cmsCIEXYZ*) cmsReadTag(hProfile, cmsSigMediaWhitePointTag); // If no wp, take D50 if (Tag == NULL) { *Dest = *cmsD50_XYZ(); return TRUE; } // V2 display profiles should give D50 if (cmsGetEncodedICCversion(hProfile) < 0x4000000) { if (cmsGetDeviceClass(hProfile) == cmsSigDisplayClass) { *Dest = *cmsD50_XYZ(); return TRUE; } } // All seems ok *Dest = *Tag; return TRUE; } // Chromatic adaptation matrix. Fix some issues as well cmsBool _cmsReadCHAD(cmsMAT3* Dest, cmsHPROFILE hProfile) { cmsMAT3* Tag; _cmsAssert(Dest != NULL); Tag = (cmsMAT3*) cmsReadTag(hProfile, cmsSigChromaticAdaptationTag); if (Tag != NULL) { *Dest = *Tag; return TRUE; } // No CHAD available, default it to identity _cmsMAT3identity(Dest); // V2 display profiles should give D50 if (cmsGetEncodedICCversion(hProfile) < 0x4000000) { if (cmsGetDeviceClass(hProfile) == cmsSigDisplayClass) { cmsCIEXYZ* White = (cmsCIEXYZ*) cmsReadTag(hProfile, cmsSigMediaWhitePointTag); if (White == NULL) { _cmsMAT3identity(Dest); return TRUE; } return _cmsAdaptationMatrix(Dest, NULL, White, cmsD50_XYZ()); } } return TRUE; } // Auxiliary, read colorants as a MAT3 structure. Used by any function that needs a matrix-shaper static cmsBool ReadICCMatrixRGB2XYZ(cmsMAT3* r, cmsHPROFILE hProfile) { cmsCIEXYZ *PtrRed, *PtrGreen, *PtrBlue; _cmsAssert(r != NULL); PtrRed = (cmsCIEXYZ *) cmsReadTag(hProfile, cmsSigRedColorantTag); PtrGreen = (cmsCIEXYZ *) cmsReadTag(hProfile, cmsSigGreenColorantTag); PtrBlue = (cmsCIEXYZ *) cmsReadTag(hProfile, cmsSigBlueColorantTag); if (PtrRed == NULL || PtrGreen == NULL || PtrBlue == NULL) return FALSE; _cmsVEC3init(&r -> v[0], PtrRed -> X, PtrGreen -> X, PtrBlue -> X); _cmsVEC3init(&r -> v[1], PtrRed -> Y, PtrGreen -> Y, PtrBlue -> Y); _cmsVEC3init(&r -> v[2], PtrRed -> Z, PtrGreen -> Z, PtrBlue -> Z); return TRUE; } // Gray input pipeline static cmsPipeline* BuildGrayInputMatrixPipeline(cmsHPROFILE hProfile) { cmsToneCurve *GrayTRC; cmsPipeline* Lut; cmsContext ContextID = cmsGetProfileContextID(hProfile); GrayTRC = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGrayTRCTag); if (GrayTRC == NULL) return NULL; Lut = cmsPipelineAlloc(ContextID, 1, 3); if (Lut == NULL) goto Error; if (cmsGetPCS(hProfile) == cmsSigLabData) { // In this case we implement the profile as an identity matrix plus 3 tone curves cmsUInt16Number Zero[2] = { 0x8080, 0x8080 }; cmsToneCurve* EmptyTab; cmsToneCurve* LabCurves[3]; EmptyTab = cmsBuildTabulatedToneCurve16(ContextID, 2, Zero); if (EmptyTab == NULL) goto Error; LabCurves[0] = GrayTRC; LabCurves[1] = EmptyTab; LabCurves[2] = EmptyTab; if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 1, OneToThreeInputMatrix, NULL)) || !cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, LabCurves))) { cmsFreeToneCurve(EmptyTab); goto Error; } cmsFreeToneCurve(EmptyTab); } else { if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 1, &GrayTRC)) || !cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 1, GrayInputMatrix, NULL))) goto Error; } return Lut; Error: cmsPipelineFree(Lut); return NULL; } // RGB Matrix shaper static cmsPipeline* BuildRGBInputMatrixShaper(cmsHPROFILE hProfile) { cmsPipeline* Lut; cmsMAT3 Mat; cmsToneCurve *Shapes[3]; cmsContext ContextID = cmsGetProfileContextID(hProfile); int i, j; if (!ReadICCMatrixRGB2XYZ(&Mat, hProfile)) return NULL; // XYZ PCS in encoded in 1.15 format, and the matrix output comes in 0..0xffff range, so // we need to adjust the output by a factor of (0x10000/0xffff) to put data in // a 1.16 range, and then a >> 1 to obtain 1.15. The total factor is (65536.0)/(65535.0*2) for (i=0; i < 3; i++) for (j=0; j < 3; j++) Mat.v[i].n[j] *= InpAdj; Shapes[0] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigRedTRCTag); Shapes[1] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGreenTRCTag); Shapes[2] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigBlueTRCTag); if (!Shapes[0] || !Shapes[1] || !Shapes[2]) return NULL; Lut = cmsPipelineAlloc(ContextID, 3, 3); if (Lut != NULL) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, Shapes)) || !cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (cmsFloat64Number*) &Mat, NULL))) goto Error; // Note that it is certainly possible a single profile would have a LUT based // tag for output working in lab and a matrix-shaper for the fallback cases. // This is not allowed by the spec, but this code is tolerant to those cases if (cmsGetPCS(hProfile) == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocXYZ2Lab(ContextID))) goto Error; } } return Lut; Error: cmsPipelineFree(Lut); return NULL; } // Read the DToAX tag, adjusting the encoding of Lab or XYZ if neded static cmsPipeline* _cmsReadFloatInputTag(cmsHPROFILE hProfile, cmsTagSignature tagFloat) { cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsPipeline* Lut = cmsPipelineDup((cmsPipeline*) cmsReadTag(hProfile, tagFloat)); cmsColorSpaceSignature spc = cmsGetColorSpace(hProfile); cmsColorSpaceSignature PCS = cmsGetPCS(hProfile); if (Lut == NULL) return NULL; // input and output of transform are in lcms 0..1 encoding. If XYZ or Lab spaces are used, // these need to be normalized into the appropriate ranges (Lab = 100,0,0, XYZ=1.0,1.0,1.0) if ( spc == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID))) goto Error; } else if (spc == cmsSigXYZData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToXyzFloat(ContextID))) goto Error; } if ( PCS == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromLabFloat(ContextID))) goto Error; } else if( PCS == cmsSigXYZData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromXyzFloat(ContextID))) goto Error; } return Lut; Error: cmsPipelineFree(Lut); return NULL; } // Read and create a BRAND NEW MPE LUT from a given profile. All stuff dependent of version, etc // is adjusted here in order to create a LUT that takes care of all those details. // We add intent = 0xffffffff as a way to read matrix shaper always, no matter of other LUT cmsPipeline* CMSEXPORT _cmsReadInputLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent) { cmsTagTypeSignature OriginalType; cmsTagSignature tag16; cmsTagSignature tagFloat; cmsContext ContextID = cmsGetProfileContextID(hProfile); // On named color, take the appropriate tag if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { cmsPipeline* Lut; cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) cmsReadTag(hProfile, cmsSigNamedColor2Tag); if (nc == NULL) return NULL; Lut = cmsPipelineAlloc(ContextID, 0, 0); if (Lut == NULL) { cmsFreeNamedColorList(nc); return NULL; } if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocNamedColor(nc, TRUE)) || !cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID))) { cmsPipelineFree(Lut); return NULL; } return Lut; } // This is an attempt to reuse this function to retrieve the matrix-shaper as pipeline no // matter other LUT are present and have precedence. Intent = 0xffffffff can be used for that. if (Intent <= INTENT_ABSOLUTE_COLORIMETRIC) { tag16 = Device2PCS16[Intent]; tagFloat = Device2PCSFloat[Intent]; if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence // Floating point LUT are always V4, but the encoding range is no // longer 0..1.0, so we need to add an stage depending on the color space return _cmsReadFloatInputTag(hProfile, tagFloat); } // Revert to perceptual if no tag is found if (!cmsIsTag(hProfile, tag16)) { tag16 = Device2PCS16[0]; } if (cmsIsTag(hProfile, tag16)) { // Is there any LUT-Based table? // Check profile version and LUT type. Do the necessary adjustments if needed // First read the tag cmsPipeline* Lut = (cmsPipeline*) cmsReadTag(hProfile, tag16); if (Lut == NULL) return NULL; // After reading it, we have now info about the original type OriginalType = _cmsGetTagTrueType(hProfile, tag16); // The profile owns the Lut, so we need to copy it Lut = cmsPipelineDup(Lut); // We need to adjust data only for Lab16 on output if (OriginalType != cmsSigLut16Type || cmsGetPCS(hProfile) != cmsSigLabData) return Lut; // If the input is Lab, add also a conversion at the begin if (cmsGetColorSpace(hProfile) == cmsSigLabData && !cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV4ToV2(ContextID))) goto Error; // Add a matrix for conversion V2 to V4 Lab PCS if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID))) goto Error; return Lut; Error: cmsPipelineFree(Lut); return NULL; } } // Lut was not found, try to create a matrix-shaper // Check if this is a grayscale profile. if (cmsGetColorSpace(hProfile) == cmsSigGrayData) { // if so, build appropriate conversion tables. // The tables are the PCS iluminant, scaled across GrayTRC return BuildGrayInputMatrixPipeline(hProfile); } // Not gray, create a normal matrix-shaper return BuildRGBInputMatrixShaper(hProfile); } // --------------------------------------------------------------------------------------------------------------- // Gray output pipeline. // XYZ -> Gray or Lab -> Gray. Since we only know the GrayTRC, we need to do some assumptions. Gray component will be // given by Y on XYZ PCS and by L* on Lab PCS, Both across inverse TRC curve. // The complete pipeline on XYZ is Matrix[3:1] -> Tone curve and in Lab Matrix[3:1] -> Tone Curve as well. static cmsPipeline* BuildGrayOutputPipeline(cmsHPROFILE hProfile) { cmsToneCurve *GrayTRC, *RevGrayTRC; cmsPipeline* Lut; cmsContext ContextID = cmsGetProfileContextID(hProfile); GrayTRC = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGrayTRCTag); if (GrayTRC == NULL) return NULL; RevGrayTRC = cmsReverseToneCurve(GrayTRC); if (RevGrayTRC == NULL) return NULL; Lut = cmsPipelineAlloc(ContextID, 3, 1); if (Lut == NULL) { cmsFreeToneCurve(RevGrayTRC); return NULL; } if (cmsGetPCS(hProfile) == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 3, PickLstarMatrix, NULL))) goto Error; } else { if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 3, PickYMatrix, NULL))) goto Error; } if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 1, &RevGrayTRC))) goto Error; cmsFreeToneCurve(RevGrayTRC); return Lut; Error: cmsFreeToneCurve(RevGrayTRC); cmsPipelineFree(Lut); return NULL; } static cmsPipeline* BuildRGBOutputMatrixShaper(cmsHPROFILE hProfile) { cmsPipeline* Lut; cmsToneCurve *Shapes[3], *InvShapes[3]; cmsMAT3 Mat, Inv; int i, j; cmsContext ContextID = cmsGetProfileContextID(hProfile); if (!ReadICCMatrixRGB2XYZ(&Mat, hProfile)) return NULL; if (!_cmsMAT3inverse(&Mat, &Inv)) return NULL; // XYZ PCS in encoded in 1.15 format, and the matrix input should come in 0..0xffff range, so // we need to adjust the input by a << 1 to obtain a 1.16 fixed and then by a factor of // (0xffff/0x10000) to put data in 0..0xffff range. Total factor is (2.0*65535.0)/65536.0; for (i=0; i < 3; i++) for (j=0; j < 3; j++) Inv.v[i].n[j] *= OutpAdj; Shapes[0] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigRedTRCTag); Shapes[1] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigGreenTRCTag); Shapes[2] = (cmsToneCurve *) cmsReadTag(hProfile, cmsSigBlueTRCTag); if (!Shapes[0] || !Shapes[1] || !Shapes[2]) return NULL; InvShapes[0] = cmsReverseToneCurve(Shapes[0]); InvShapes[1] = cmsReverseToneCurve(Shapes[1]); InvShapes[2] = cmsReverseToneCurve(Shapes[2]); if (!InvShapes[0] || !InvShapes[1] || !InvShapes[2]) { return NULL; } Lut = cmsPipelineAlloc(ContextID, 3, 3); if (Lut != NULL) { // Note that it is certainly possible a single profile would have a LUT based // tag for output working in lab and a matrix-shaper for the fallback cases. // This is not allowed by the spec, but this code is tolerant to those cases if (cmsGetPCS(hProfile) == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLab2XYZ(ContextID))) goto Error; } if (!cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (cmsFloat64Number*) &Inv, NULL)) || !cmsPipelineInsertStage(Lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, 3, InvShapes))) goto Error; } cmsFreeToneCurveTriple(InvShapes); return Lut; Error: cmsFreeToneCurveTriple(InvShapes); cmsPipelineFree(Lut); return NULL; } // Change CLUT interpolation to trilinear static void ChangeInterpolationToTrilinear(cmsPipeline* Lut) { cmsStage* Stage; for (Stage = cmsPipelineGetPtrToFirstStage(Lut); Stage != NULL; Stage = cmsStageNext(Stage)) { if (cmsStageType(Stage) == cmsSigCLutElemType) { _cmsStageCLutData* CLUT = (_cmsStageCLutData*) Stage ->Data; CLUT ->Params->dwFlags |= CMS_LERP_FLAGS_TRILINEAR; _cmsSetInterpolationRoutine(Lut->ContextID, CLUT ->Params); } } } // Read the DToAX tag, adjusting the encoding of Lab or XYZ if neded static cmsPipeline* _cmsReadFloatOutputTag(cmsHPROFILE hProfile, cmsTagSignature tagFloat) { cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsPipeline* Lut = cmsPipelineDup((cmsPipeline*) cmsReadTag(hProfile, tagFloat)); cmsColorSpaceSignature PCS = cmsGetPCS(hProfile); cmsColorSpaceSignature dataSpace = cmsGetColorSpace(hProfile); if (Lut == NULL) return NULL; // If PCS is Lab or XYZ, the floating point tag is accepting data in the space encoding, // and since the formatter has already accommodated to 0..1.0, we should undo this change if ( PCS == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID))) goto Error; } else if (PCS == cmsSigXYZData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToXyzFloat(ContextID))) goto Error; } // the output can be Lab or XYZ, in which case normalisation is needed on the end of the pipeline if ( dataSpace == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromLabFloat(ContextID))) goto Error; } else if (dataSpace == cmsSigXYZData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromXyzFloat(ContextID))) goto Error; } return Lut; Error: cmsPipelineFree(Lut); return NULL; } // Create an output MPE LUT from agiven profile. Version mismatches are handled here cmsPipeline* CMSEXPORT _cmsReadOutputLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent) { cmsTagTypeSignature OriginalType; cmsTagSignature tag16; cmsTagSignature tagFloat; cmsContext ContextID = cmsGetProfileContextID(hProfile); if (Intent <= INTENT_ABSOLUTE_COLORIMETRIC) { tag16 = PCS2Device16[Intent]; tagFloat = PCS2DeviceFloat[Intent]; if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence // Floating point LUT are always V4 return _cmsReadFloatOutputTag(hProfile, tagFloat); } // Revert to perceptual if no tag is found if (!cmsIsTag(hProfile, tag16)) { tag16 = PCS2Device16[0]; } if (cmsIsTag(hProfile, tag16)) { // Is there any LUT-Based table? // Check profile version and LUT type. Do the necessary adjustments if needed // First read the tag cmsPipeline* Lut = (cmsPipeline*) cmsReadTag(hProfile, tag16); if (Lut == NULL) return NULL; // After reading it, we have info about the original type OriginalType = _cmsGetTagTrueType(hProfile, tag16); // The profile owns the Lut, so we need to copy it Lut = cmsPipelineDup(Lut); if (Lut == NULL) return NULL; // Now it is time for a controversial stuff. I found that for 3D LUTS using // Lab used as indexer space, trilinear interpolation should be used if (cmsGetPCS(hProfile) == cmsSigLabData) ChangeInterpolationToTrilinear(Lut); // We need to adjust data only for Lab and Lut16 type if (OriginalType != cmsSigLut16Type || cmsGetPCS(hProfile) != cmsSigLabData) return Lut; // Add a matrix for conversion V4 to V2 Lab PCS if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV4ToV2(ContextID))) goto Error; // If the output is Lab, add also a conversion at the end if (cmsGetColorSpace(hProfile) == cmsSigLabData) if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID))) goto Error; return Lut; Error: cmsPipelineFree(Lut); return NULL; } } // Lut not found, try to create a matrix-shaper // Check if this is a grayscale profile. if (cmsGetColorSpace(hProfile) == cmsSigGrayData) { // if so, build appropriate conversion tables. // The tables are the PCS iluminant, scaled across GrayTRC return BuildGrayOutputPipeline(hProfile); } // Not gray, create a normal matrix-shaper, which only operates in XYZ space return BuildRGBOutputMatrixShaper(hProfile); } // --------------------------------------------------------------------------------------------------------------- // Read the AToD0 tag, adjusting the encoding of Lab or XYZ if neded static cmsPipeline* _cmsReadFloatDevicelinkTag(cmsHPROFILE hProfile, cmsTagSignature tagFloat) { cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsPipeline* Lut = cmsPipelineDup((cmsPipeline*)cmsReadTag(hProfile, tagFloat)); cmsColorSpaceSignature PCS = cmsGetPCS(hProfile); cmsColorSpaceSignature spc = cmsGetColorSpace(hProfile); if (Lut == NULL) return NULL; if (spc == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToLabFloat(ContextID))) goto Error; } else if (spc == cmsSigXYZData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageNormalizeToXyzFloat(ContextID))) goto Error; } if (PCS == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromLabFloat(ContextID))) goto Error; } else if (PCS == cmsSigXYZData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageNormalizeFromXyzFloat(ContextID))) goto Error; } return Lut; Error: cmsPipelineFree(Lut); return NULL; } // This one includes abstract profiles as well. Matrix-shaper cannot be obtained on that device class. The // tag name here may default to AToB0 cmsPipeline* CMSEXPORT _cmsReadDevicelinkLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent) { cmsPipeline* Lut; cmsTagTypeSignature OriginalType; cmsTagSignature tag16; cmsTagSignature tagFloat; cmsContext ContextID = cmsGetProfileContextID(hProfile); if (Intent > INTENT_ABSOLUTE_COLORIMETRIC) return NULL; tag16 = Device2PCS16[Intent]; tagFloat = Device2PCSFloat[Intent]; // On named color, take the appropriate tag if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*)cmsReadTag(hProfile, cmsSigNamedColor2Tag); if (nc == NULL) return NULL; Lut = cmsPipelineAlloc(ContextID, 0, 0); if (Lut == NULL) goto Error; if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocNamedColor(nc, FALSE))) goto Error; if (cmsGetColorSpace(hProfile) == cmsSigLabData) if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID))) goto Error; return Lut; Error: cmsPipelineFree(Lut); cmsFreeNamedColorList(nc); return NULL; } if (cmsIsTag(hProfile, tagFloat)) { // Float tag takes precedence // Floating point LUT are always V return _cmsReadFloatDevicelinkTag(hProfile, tagFloat); } tagFloat = Device2PCSFloat[0]; if (cmsIsTag(hProfile, tagFloat)) { return cmsPipelineDup((cmsPipeline*)cmsReadTag(hProfile, tagFloat)); } if (!cmsIsTag(hProfile, tag16)) { // Is there any LUT-Based table? tag16 = Device2PCS16[0]; if (!cmsIsTag(hProfile, tag16)) return NULL; } // Check profile version and LUT type. Do the necessary adjustments if needed // Read the tag Lut = (cmsPipeline*)cmsReadTag(hProfile, tag16); if (Lut == NULL) return NULL; // The profile owns the Lut, so we need to copy it Lut = cmsPipelineDup(Lut); if (Lut == NULL) return NULL; // Now it is time for a controversial stuff. I found that for 3D LUTS using // Lab used as indexer space, trilinear interpolation should be used if (cmsGetPCS(hProfile) == cmsSigLabData) ChangeInterpolationToTrilinear(Lut); // After reading it, we have info about the original type OriginalType = _cmsGetTagTrueType(hProfile, tag16); // We need to adjust data for Lab16 on output if (OriginalType != cmsSigLut16Type) return Lut; // Here it is possible to get Lab on both sides if (cmsGetColorSpace(hProfile) == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_BEGIN, _cmsStageAllocLabV4ToV2(ContextID))) goto Error2; } if (cmsGetPCS(hProfile) == cmsSigLabData) { if (!cmsPipelineInsertStage(Lut, cmsAT_END, _cmsStageAllocLabV2ToV4(ContextID))) goto Error2; } return Lut; Error2: cmsPipelineFree(Lut); return NULL; } // --------------------------------------------------------------------------------------------------------------- // Returns TRUE if the profile is implemented as matrix-shaper cmsBool CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile) { switch (cmsGetColorSpace(hProfile)) { case cmsSigGrayData: return cmsIsTag(hProfile, cmsSigGrayTRCTag); case cmsSigRgbData: return (cmsIsTag(hProfile, cmsSigRedColorantTag) && cmsIsTag(hProfile, cmsSigGreenColorantTag) && cmsIsTag(hProfile, cmsSigBlueColorantTag) && cmsIsTag(hProfile, cmsSigRedTRCTag) && cmsIsTag(hProfile, cmsSigGreenTRCTag) && cmsIsTag(hProfile, cmsSigBlueTRCTag)); default: return FALSE; } } // Returns TRUE if the intent is implemented as CLUT cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection) { const cmsTagSignature* TagTable; // For devicelinks, the supported intent is that one stated in the header if (cmsGetDeviceClass(hProfile) == cmsSigLinkClass) { return (cmsGetHeaderRenderingIntent(hProfile) == Intent); } switch (UsedDirection) { case LCMS_USED_AS_INPUT: TagTable = Device2PCS16; break; case LCMS_USED_AS_OUTPUT:TagTable = PCS2Device16; break; // For proofing, we need rel. colorimetric in output. Let's do some recursion case LCMS_USED_AS_PROOF: return cmsIsIntentSupported(hProfile, Intent, LCMS_USED_AS_INPUT) && cmsIsIntentSupported(hProfile, INTENT_RELATIVE_COLORIMETRIC, LCMS_USED_AS_OUTPUT); default: cmsSignalError(cmsGetProfileContextID(hProfile), cmsERROR_RANGE, "Unexpected direction (%d)", UsedDirection); return FALSE; } return cmsIsTag(hProfile, TagTable[Intent]); } // Return info about supported intents cmsBool CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection) { if (cmsIsCLUT(hProfile, Intent, UsedDirection)) return TRUE; // Is there any matrix-shaper? If so, the intent is supported. This is a bit odd, since V2 matrix shaper // does not fully support relative colorimetric because they cannot deal with non-zero black points, but // many profiles claims that, and this is certainly not true for V4 profiles. Lets answer "yes" no matter // the accuracy would be less than optimal in rel.col and v2 case. return cmsIsMatrixShaper(hProfile); } // --------------------------------------------------------------------------------------------------------------- // Read both, profile sequence description and profile sequence id if present. Then combine both to // create qa unique structure holding both. Shame on ICC to store things in such complicated way. cmsSEQ* _cmsReadProfileSequence(cmsHPROFILE hProfile) { cmsSEQ* ProfileSeq; cmsSEQ* ProfileId; cmsSEQ* NewSeq; cmsUInt32Number i; // Take profile sequence description first ProfileSeq = (cmsSEQ*) cmsReadTag(hProfile, cmsSigProfileSequenceDescTag); // Take profile sequence ID ProfileId = (cmsSEQ*) cmsReadTag(hProfile, cmsSigProfileSequenceIdTag); if (ProfileSeq == NULL && ProfileId == NULL) return NULL; if (ProfileSeq == NULL) return cmsDupProfileSequenceDescription(ProfileId); if (ProfileId == NULL) return cmsDupProfileSequenceDescription(ProfileSeq); // We have to mix both together. For that they must agree if (ProfileSeq ->n != ProfileId ->n) return cmsDupProfileSequenceDescription(ProfileSeq); NewSeq = cmsDupProfileSequenceDescription(ProfileSeq); // Ok, proceed to the mixing if (NewSeq != NULL) { for (i=0; i < ProfileSeq ->n; i++) { memmove(&NewSeq ->seq[i].ProfileID, &ProfileId ->seq[i].ProfileID, sizeof(cmsProfileID)); NewSeq ->seq[i].Description = cmsMLUdup(ProfileId ->seq[i].Description); } } return NewSeq; } // Dump the contents of profile sequence in both tags (if v4 available) cmsBool _cmsWriteProfileSequence(cmsHPROFILE hProfile, const cmsSEQ* seq) { if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, seq)) return FALSE; if (cmsGetEncodedICCversion(hProfile) >= 0x4000000) { if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, seq)) return FALSE; } return TRUE; } // Auxiliary, read and duplicate a MLU if found. static cmsMLU* GetMLUFromProfile(cmsHPROFILE h, cmsTagSignature sig) { cmsMLU* mlu = (cmsMLU*) cmsReadTag(h, sig); if (mlu == NULL) return NULL; return cmsMLUdup(mlu); } // Create a sequence description out of an array of profiles cmsSEQ* _cmsCompileProfileSequence(cmsContext ContextID, cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[]) { cmsUInt32Number i; cmsSEQ* seq = cmsAllocProfileSequenceDescription(ContextID, nProfiles); if (seq == NULL) return NULL; for (i=0; i < nProfiles; i++) { cmsPSEQDESC* ps = &seq ->seq[i]; cmsHPROFILE h = hProfiles[i]; cmsTechnologySignature* techpt; cmsGetHeaderAttributes(h, &ps ->attributes); cmsGetHeaderProfileID(h, ps ->ProfileID.ID8); ps ->deviceMfg = cmsGetHeaderManufacturer(h); ps ->deviceModel = cmsGetHeaderModel(h); techpt = (cmsTechnologySignature*) cmsReadTag(h, cmsSigTechnologyTag); if (techpt == NULL) ps ->technology = (cmsTechnologySignature) 0; else ps ->technology = *techpt; ps ->Manufacturer = GetMLUFromProfile(h, cmsSigDeviceMfgDescTag); ps ->Model = GetMLUFromProfile(h, cmsSigDeviceModelDescTag); ps ->Description = GetMLUFromProfile(h, cmsSigProfileDescriptionTag); } return seq; } // ------------------------------------------------------------------------------------------------------------------- static const cmsMLU* GetInfo(cmsHPROFILE hProfile, cmsInfoType Info) { cmsTagSignature sig; switch (Info) { case cmsInfoDescription: sig = cmsSigProfileDescriptionTag; break; case cmsInfoManufacturer: sig = cmsSigDeviceMfgDescTag; break; case cmsInfoModel: sig = cmsSigDeviceModelDescTag; break; case cmsInfoCopyright: sig = cmsSigCopyrightTag; break; default: return NULL; } return (cmsMLU*) cmsReadTag(hProfile, sig); } cmsUInt32Number CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info, const char LanguageCode[3], const char CountryCode[3], wchar_t* Buffer, cmsUInt32Number BufferSize) { const cmsMLU* mlu = GetInfo(hProfile, Info); if (mlu == NULL) return 0; return cmsMLUgetWide(mlu, LanguageCode, CountryCode, Buffer, BufferSize); } cmsUInt32Number CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info, const char LanguageCode[3], const char CountryCode[3], char* Buffer, cmsUInt32Number BufferSize) { const cmsMLU* mlu = GetInfo(hProfile, Info); if (mlu == NULL) return 0; return cmsMLUgetASCII(mlu, LanguageCode, CountryCode, Buffer, BufferSize); } lcms2-2.12rc1/src/cmsopt.c0000644000175000017500000020015413775114656014357 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" //---------------------------------------------------------------------------------- // Optimization for 8 bits, Shaper-CLUT (3 inputs only) typedef struct { cmsContext ContextID; const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. cmsUInt16Number rx[256], ry[256], rz[256]; cmsUInt32Number X0[256], Y0[256], Z0[256]; // Precomputed nodes and offsets for 8-bit input data } Prelin8Data; // Generic optimization for 16 bits Shaper-CLUT-Shaper (any inputs) typedef struct { cmsContext ContextID; // Number of channels cmsUInt32Number nInputs; cmsUInt32Number nOutputs; _cmsInterpFn16 EvalCurveIn16[MAX_INPUT_DIMENSIONS]; // The maximum number of input channels is known in advance cmsInterpParams* ParamsCurveIn16[MAX_INPUT_DIMENSIONS]; _cmsInterpFn16 EvalCLUT; // The evaluator for 3D grid const cmsInterpParams* CLUTparams; // (not-owned pointer) _cmsInterpFn16* EvalCurveOut16; // Points to an array of curve evaluators in 16 bits (not-owned pointer) cmsInterpParams** ParamsCurveOut16; // Points to an array of references to interpolation params (not-owned pointer) } Prelin16Data; // Optimization for matrix-shaper in 8 bits. Numbers are operated in n.14 signed, tables are stored in 1.14 fixed typedef cmsInt32Number cmsS1Fixed14Number; // Note that this may hold more than 16 bits! #define DOUBLE_TO_1FIXED14(x) ((cmsS1Fixed14Number) floor((x) * 16384.0 + 0.5)) typedef struct { cmsContext ContextID; cmsS1Fixed14Number Shaper1R[256]; // from 0..255 to 1.14 (0.0...1.0) cmsS1Fixed14Number Shaper1G[256]; cmsS1Fixed14Number Shaper1B[256]; cmsS1Fixed14Number Mat[3][3]; // n.14 to n.14 (needs a saturation after that) cmsS1Fixed14Number Off[3]; cmsUInt16Number Shaper2R[16385]; // 1.14 to 0..255 cmsUInt16Number Shaper2G[16385]; cmsUInt16Number Shaper2B[16385]; } MatShaper8Data; // Curves, optimization is shared between 8 and 16 bits typedef struct { cmsContext ContextID; cmsUInt32Number nCurves; // Number of curves cmsUInt32Number nElements; // Elements in curves cmsUInt16Number** Curves; // Points to a dynamically allocated array } Curves16Data; // Simple optimizations ---------------------------------------------------------------------------------------------------------- // Remove an element in linked chain static void _RemoveElement(cmsStage** head) { cmsStage* mpe = *head; cmsStage* next = mpe ->Next; *head = next; cmsStageFree(mpe); } // Remove all identities in chain. Note that pt actually is a double pointer to the element that holds the pointer. static cmsBool _Remove1Op(cmsPipeline* Lut, cmsStageSignature UnaryOp) { cmsStage** pt = &Lut ->Elements; cmsBool AnyOpt = FALSE; while (*pt != NULL) { if ((*pt) ->Implements == UnaryOp) { _RemoveElement(pt); AnyOpt = TRUE; } else pt = &((*pt) -> Next); } return AnyOpt; } // Same, but only if two adjacent elements are found static cmsBool _Remove2Op(cmsPipeline* Lut, cmsStageSignature Op1, cmsStageSignature Op2) { cmsStage** pt1; cmsStage** pt2; cmsBool AnyOpt = FALSE; pt1 = &Lut ->Elements; if (*pt1 == NULL) return AnyOpt; while (*pt1 != NULL) { pt2 = &((*pt1) -> Next); if (*pt2 == NULL) return AnyOpt; if ((*pt1) ->Implements == Op1 && (*pt2) ->Implements == Op2) { _RemoveElement(pt2); _RemoveElement(pt1); AnyOpt = TRUE; } else pt1 = &((*pt1) -> Next); } return AnyOpt; } static cmsBool CloseEnoughFloat(cmsFloat64Number a, cmsFloat64Number b) { return fabs(b - a) < 0.00001f; } static cmsBool isFloatMatrixIdentity(const cmsMAT3* a) { cmsMAT3 Identity; int i, j; _cmsMAT3identity(&Identity); for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) if (!CloseEnoughFloat(a->v[i].n[j], Identity.v[i].n[j])) return FALSE; return TRUE; } // if two adjacent matrices are found, multiply them. static cmsBool _MultiplyMatrix(cmsPipeline* Lut) { cmsStage** pt1; cmsStage** pt2; cmsStage* chain; cmsBool AnyOpt = FALSE; pt1 = &Lut->Elements; if (*pt1 == NULL) return AnyOpt; while (*pt1 != NULL) { pt2 = &((*pt1)->Next); if (*pt2 == NULL) return AnyOpt; if ((*pt1)->Implements == cmsSigMatrixElemType && (*pt2)->Implements == cmsSigMatrixElemType) { // Get both matrices _cmsStageMatrixData* m1 = (_cmsStageMatrixData*) cmsStageData(*pt1); _cmsStageMatrixData* m2 = (_cmsStageMatrixData*) cmsStageData(*pt2); cmsMAT3 res; // Input offset and output offset should be zero to use this optimization if (m1->Offset != NULL || m2 ->Offset != NULL || cmsStageInputChannels(*pt1) != 3 || cmsStageOutputChannels(*pt1) != 3 || cmsStageInputChannels(*pt2) != 3 || cmsStageOutputChannels(*pt2) != 3) return FALSE; // Multiply both matrices to get the result _cmsMAT3per(&res, (cmsMAT3*)m2->Double, (cmsMAT3*)m1->Double); // Get the next in chain after the matrices chain = (*pt2)->Next; // Remove both matrices _RemoveElement(pt2); _RemoveElement(pt1); // Now what if the result is a plain identity? if (!isFloatMatrixIdentity(&res)) { // We can not get rid of full matrix cmsStage* Multmat = cmsStageAllocMatrix(Lut->ContextID, 3, 3, (const cmsFloat64Number*) &res, NULL); if (Multmat == NULL) return FALSE; // Should never happen // Recover the chain Multmat->Next = chain; *pt1 = Multmat; } AnyOpt = TRUE; } else pt1 = &((*pt1)->Next); } return AnyOpt; } // Preoptimize just gets rif of no-ops coming paired. Conversion from v2 to v4 followed // by a v4 to v2 and vice-versa. The elements are then discarded. static cmsBool PreOptimize(cmsPipeline* Lut) { cmsBool AnyOpt = FALSE, Opt; do { Opt = FALSE; // Remove all identities Opt |= _Remove1Op(Lut, cmsSigIdentityElemType); // Remove XYZ2Lab followed by Lab2XYZ Opt |= _Remove2Op(Lut, cmsSigXYZ2LabElemType, cmsSigLab2XYZElemType); // Remove Lab2XYZ followed by XYZ2Lab Opt |= _Remove2Op(Lut, cmsSigLab2XYZElemType, cmsSigXYZ2LabElemType); // Remove V4 to V2 followed by V2 to V4 Opt |= _Remove2Op(Lut, cmsSigLabV4toV2, cmsSigLabV2toV4); // Remove V2 to V4 followed by V4 to V2 Opt |= _Remove2Op(Lut, cmsSigLabV2toV4, cmsSigLabV4toV2); // Remove float pcs Lab conversions Opt |= _Remove2Op(Lut, cmsSigLab2FloatPCS, cmsSigFloatPCS2Lab); // Remove float pcs Lab conversions Opt |= _Remove2Op(Lut, cmsSigXYZ2FloatPCS, cmsSigFloatPCS2XYZ); // Simplify matrix. Opt |= _MultiplyMatrix(Lut); if (Opt) AnyOpt = TRUE; } while (Opt); return AnyOpt; } static void Eval16nop1D(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const struct _cms_interp_struc* p) { Output[0] = Input[0]; cmsUNUSED_PARAMETER(p); } static void PrelinEval16(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const void* D) { Prelin16Data* p16 = (Prelin16Data*) D; cmsUInt16Number StageABC[MAX_INPUT_DIMENSIONS]; cmsUInt16Number StageDEF[cmsMAXCHANNELS]; cmsUInt32Number i; for (i=0; i < p16 ->nInputs; i++) { p16 ->EvalCurveIn16[i](&Input[i], &StageABC[i], p16 ->ParamsCurveIn16[i]); } p16 ->EvalCLUT(StageABC, StageDEF, p16 ->CLUTparams); for (i=0; i < p16 ->nOutputs; i++) { p16 ->EvalCurveOut16[i](&StageDEF[i], &Output[i], p16 ->ParamsCurveOut16[i]); } } static void PrelinOpt16free(cmsContext ContextID, void* ptr) { Prelin16Data* p16 = (Prelin16Data*) ptr; _cmsFree(ContextID, p16 ->EvalCurveOut16); _cmsFree(ContextID, p16 ->ParamsCurveOut16); _cmsFree(ContextID, p16); } static void* Prelin16dup(cmsContext ContextID, const void* ptr) { Prelin16Data* p16 = (Prelin16Data*) ptr; Prelin16Data* Duped = (Prelin16Data*) _cmsDupMem(ContextID, p16, sizeof(Prelin16Data)); if (Duped == NULL) return NULL; Duped->EvalCurveOut16 = (_cmsInterpFn16*) _cmsDupMem(ContextID, p16->EvalCurveOut16, p16->nOutputs * sizeof(_cmsInterpFn16)); Duped->ParamsCurveOut16 = (cmsInterpParams**)_cmsDupMem(ContextID, p16->ParamsCurveOut16, p16->nOutputs * sizeof(cmsInterpParams*)); return Duped; } static Prelin16Data* PrelinOpt16alloc(cmsContext ContextID, const cmsInterpParams* ColorMap, cmsUInt32Number nInputs, cmsToneCurve** In, cmsUInt32Number nOutputs, cmsToneCurve** Out ) { cmsUInt32Number i; Prelin16Data* p16 = (Prelin16Data*)_cmsMallocZero(ContextID, sizeof(Prelin16Data)); if (p16 == NULL) return NULL; p16 ->nInputs = nInputs; p16 ->nOutputs = nOutputs; for (i=0; i < nInputs; i++) { if (In == NULL) { p16 -> ParamsCurveIn16[i] = NULL; p16 -> EvalCurveIn16[i] = Eval16nop1D; } else { p16 -> ParamsCurveIn16[i] = In[i] ->InterpParams; p16 -> EvalCurveIn16[i] = p16 ->ParamsCurveIn16[i]->Interpolation.Lerp16; } } p16 ->CLUTparams = ColorMap; p16 ->EvalCLUT = ColorMap ->Interpolation.Lerp16; p16 -> EvalCurveOut16 = (_cmsInterpFn16*) _cmsCalloc(ContextID, nOutputs, sizeof(_cmsInterpFn16)); if (p16->EvalCurveOut16 == NULL) { _cmsFree(ContextID, p16); return NULL; } p16 -> ParamsCurveOut16 = (cmsInterpParams**) _cmsCalloc(ContextID, nOutputs, sizeof(cmsInterpParams* )); if (p16->ParamsCurveOut16 == NULL) { _cmsFree(ContextID, p16->EvalCurveOut16); _cmsFree(ContextID, p16); return NULL; } for (i=0; i < nOutputs; i++) { if (Out == NULL) { p16 ->ParamsCurveOut16[i] = NULL; p16 -> EvalCurveOut16[i] = Eval16nop1D; } else { p16 ->ParamsCurveOut16[i] = Out[i] ->InterpParams; p16 -> EvalCurveOut16[i] = p16 ->ParamsCurveOut16[i]->Interpolation.Lerp16; } } return p16; } // Resampling --------------------------------------------------------------------------------- #define PRELINEARIZATION_POINTS 4096 // Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for // almost any transform. We use floating point precision and then convert from floating point to 16 bits. static cmsInt32Number XFormSampler16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsPipeline* Lut = (cmsPipeline*) Cargo; cmsFloat32Number InFloat[cmsMAXCHANNELS], OutFloat[cmsMAXCHANNELS]; cmsUInt32Number i; _cmsAssert(Lut -> InputChannels < cmsMAXCHANNELS); _cmsAssert(Lut -> OutputChannels < cmsMAXCHANNELS); // From 16 bit to floating point for (i=0; i < Lut ->InputChannels; i++) InFloat[i] = (cmsFloat32Number) (In[i] / 65535.0); // Evaluate in floating point cmsPipelineEvalFloat(InFloat, OutFloat, Lut); // Back to 16 bits representation for (i=0; i < Lut ->OutputChannels; i++) Out[i] = _cmsQuickSaturateWord(OutFloat[i] * 65535.0); // Always succeed return TRUE; } // Try to see if the curves of a given MPE are linear static cmsBool AllCurvesAreLinear(cmsStage* mpe) { cmsToneCurve** Curves; cmsUInt32Number i, n; Curves = _cmsStageGetPtrToCurveSet(mpe); if (Curves == NULL) return FALSE; n = cmsStageOutputChannels(mpe); for (i=0; i < n; i++) { if (!cmsIsToneCurveLinear(Curves[i])) return FALSE; } return TRUE; } // This function replaces a specific node placed in "At" by the "Value" numbers. Its purpose // is to fix scum dot on broken profiles/transforms. Works on 1, 3 and 4 channels static cmsBool PatchLUT(cmsStage* CLUT, cmsUInt16Number At[], cmsUInt16Number Value[], cmsUInt32Number nChannelsOut, cmsUInt32Number nChannelsIn) { _cmsStageCLutData* Grid = (_cmsStageCLutData*) CLUT ->Data; cmsInterpParams* p16 = Grid ->Params; cmsFloat64Number px, py, pz, pw; int x0, y0, z0, w0; int i, index; if (CLUT -> Type != cmsSigCLutElemType) { cmsSignalError(CLUT->ContextID, cmsERROR_INTERNAL, "(internal) Attempt to PatchLUT on non-lut stage"); return FALSE; } if (nChannelsIn == 4) { px = ((cmsFloat64Number) At[0] * (p16->Domain[0])) / 65535.0; py = ((cmsFloat64Number) At[1] * (p16->Domain[1])) / 65535.0; pz = ((cmsFloat64Number) At[2] * (p16->Domain[2])) / 65535.0; pw = ((cmsFloat64Number) At[3] * (p16->Domain[3])) / 65535.0; x0 = (int) floor(px); y0 = (int) floor(py); z0 = (int) floor(pz); w0 = (int) floor(pw); if (((px - x0) != 0) || ((py - y0) != 0) || ((pz - z0) != 0) || ((pw - w0) != 0)) return FALSE; // Not on exact node index = (int) p16 -> opta[3] * x0 + (int) p16 -> opta[2] * y0 + (int) p16 -> opta[1] * z0 + (int) p16 -> opta[0] * w0; } else if (nChannelsIn == 3) { px = ((cmsFloat64Number) At[0] * (p16->Domain[0])) / 65535.0; py = ((cmsFloat64Number) At[1] * (p16->Domain[1])) / 65535.0; pz = ((cmsFloat64Number) At[2] * (p16->Domain[2])) / 65535.0; x0 = (int) floor(px); y0 = (int) floor(py); z0 = (int) floor(pz); if (((px - x0) != 0) || ((py - y0) != 0) || ((pz - z0) != 0)) return FALSE; // Not on exact node index = (int) p16 -> opta[2] * x0 + (int) p16 -> opta[1] * y0 + (int) p16 -> opta[0] * z0; } else if (nChannelsIn == 1) { px = ((cmsFloat64Number) At[0] * (p16->Domain[0])) / 65535.0; x0 = (int) floor(px); if (((px - x0) != 0)) return FALSE; // Not on exact node index = (int) p16 -> opta[0] * x0; } else { cmsSignalError(CLUT->ContextID, cmsERROR_INTERNAL, "(internal) %d Channels are not supported on PatchLUT", nChannelsIn); return FALSE; } for (i = 0; i < (int) nChannelsOut; i++) Grid->Tab.T[index + i] = Value[i]; return TRUE; } // Auxiliary, to see if two values are equal or very different static cmsBool WhitesAreEqual(cmsUInt32Number n, cmsUInt16Number White1[], cmsUInt16Number White2[] ) { cmsUInt32Number i; for (i=0; i < n; i++) { if (abs(White1[i] - White2[i]) > 0xf000) return TRUE; // Values are so extremely different that the fixup should be avoided if (White1[i] != White2[i]) return FALSE; } return TRUE; } // Locate the node for the white point and fix it to pure white in order to avoid scum dot. static cmsBool FixWhiteMisalignment(cmsPipeline* Lut, cmsColorSpaceSignature EntryColorSpace, cmsColorSpaceSignature ExitColorSpace) { cmsUInt16Number *WhitePointIn, *WhitePointOut; cmsUInt16Number WhiteIn[cmsMAXCHANNELS], WhiteOut[cmsMAXCHANNELS], ObtainedOut[cmsMAXCHANNELS]; cmsUInt32Number i, nOuts, nIns; cmsStage *PreLin = NULL, *CLUT = NULL, *PostLin = NULL; if (!_cmsEndPointsBySpace(EntryColorSpace, &WhitePointIn, NULL, &nIns)) return FALSE; if (!_cmsEndPointsBySpace(ExitColorSpace, &WhitePointOut, NULL, &nOuts)) return FALSE; // It needs to be fixed? if (Lut ->InputChannels != nIns) return FALSE; if (Lut ->OutputChannels != nOuts) return FALSE; cmsPipelineEval16(WhitePointIn, ObtainedOut, Lut); if (WhitesAreEqual(nOuts, WhitePointOut, ObtainedOut)) return TRUE; // whites already match // Check if the LUT comes as Prelin, CLUT or Postlin. We allow all combinations if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &PreLin, &CLUT, &PostLin)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 2, cmsSigCurveSetElemType, cmsSigCLutElemType, &PreLin, &CLUT)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 2, cmsSigCLutElemType, cmsSigCurveSetElemType, &CLUT, &PostLin)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 1, cmsSigCLutElemType, &CLUT)) return FALSE; // We need to interpolate white points of both, pre and post curves if (PreLin) { cmsToneCurve** Curves = _cmsStageGetPtrToCurveSet(PreLin); for (i=0; i < nIns; i++) { WhiteIn[i] = cmsEvalToneCurve16(Curves[i], WhitePointIn[i]); } } else { for (i=0; i < nIns; i++) WhiteIn[i] = WhitePointIn[i]; } // If any post-linearization, we need to find how is represented white before the curve, do // a reverse interpolation in this case. if (PostLin) { cmsToneCurve** Curves = _cmsStageGetPtrToCurveSet(PostLin); for (i=0; i < nOuts; i++) { cmsToneCurve* InversePostLin = cmsReverseToneCurve(Curves[i]); if (InversePostLin == NULL) { WhiteOut[i] = WhitePointOut[i]; } else { WhiteOut[i] = cmsEvalToneCurve16(InversePostLin, WhitePointOut[i]); cmsFreeToneCurve(InversePostLin); } } } else { for (i=0; i < nOuts; i++) WhiteOut[i] = WhitePointOut[i]; } // Ok, proceed with patching. May fail and we don't care if it fails PatchLUT(CLUT, WhiteIn, WhiteOut, nOuts, nIns); return TRUE; } // ----------------------------------------------------------------------------------------------------------------------------------------------- // This function creates simple LUT from complex ones. The generated LUT has an optional set of // prelinearization curves, a CLUT of nGridPoints and optional postlinearization tables. // These curves have to exist in the original LUT in order to be used in the simplified output. // Caller may also use the flags to allow this feature. // LUTS with all curves will be simplified to a single curve. Parametric curves are lost. // This function should be used on 16-bits LUTS only, as floating point losses precision when simplified // ----------------------------------------------------------------------------------------------------------------------------------------------- static cmsBool OptimizeByResampling(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* Src = NULL; cmsPipeline* Dest = NULL; cmsStage* mpe; cmsStage* CLUT; cmsStage *KeepPreLin = NULL, *KeepPostLin = NULL; cmsUInt32Number nGridPoints; cmsColorSpaceSignature ColorSpace, OutputColorSpace; cmsStage *NewPreLin = NULL; cmsStage *NewPostLin = NULL; _cmsStageCLutData* DataCLUT; cmsToneCurve** DataSetIn; cmsToneCurve** DataSetOut; Prelin16Data* p16; // This is a lossy optimization! does not apply in floating-point cases if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; ColorSpace = _cmsICCcolorSpace((int) T_COLORSPACE(*InputFormat)); OutputColorSpace = _cmsICCcolorSpace((int) T_COLORSPACE(*OutputFormat)); // Color space must be specified if (ColorSpace == (cmsColorSpaceSignature)0 || OutputColorSpace == (cmsColorSpaceSignature)0) return FALSE; nGridPoints = _cmsReasonableGridpointsByColorspace(ColorSpace, *dwFlags); // For empty LUTs, 2 points are enough if (cmsPipelineStageCount(*Lut) == 0) nGridPoints = 2; Src = *Lut; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(Src); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } // Allocate an empty LUT Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels); if (!Dest) return FALSE; // Prelinearization tables are kept unless indicated by flags if (*dwFlags & cmsFLAGS_CLUT_PRE_LINEARIZATION) { // Get a pointer to the prelinearization element cmsStage* PreLin = cmsPipelineGetPtrToFirstStage(Src); // Check if suitable if (PreLin && PreLin ->Type == cmsSigCurveSetElemType) { // Maybe this is a linear tram, so we can avoid the whole stuff if (!AllCurvesAreLinear(PreLin)) { // All seems ok, proceed. NewPreLin = cmsStageDup(PreLin); if(!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, NewPreLin)) goto Error; // Remove prelinearization. Since we have duplicated the curve // in destination LUT, the sampling should be applied after this stage. cmsPipelineUnlinkStage(Src, cmsAT_BEGIN, &KeepPreLin); } } } // Allocate the CLUT CLUT = cmsStageAllocCLut16bit(Src ->ContextID, nGridPoints, Src ->InputChannels, Src->OutputChannels, NULL); if (CLUT == NULL) goto Error; // Add the CLUT to the destination LUT if (!cmsPipelineInsertStage(Dest, cmsAT_END, CLUT)) { goto Error; } // Postlinearization tables are kept unless indicated by flags if (*dwFlags & cmsFLAGS_CLUT_POST_LINEARIZATION) { // Get a pointer to the postlinearization if present cmsStage* PostLin = cmsPipelineGetPtrToLastStage(Src); // Check if suitable if (PostLin && cmsStageType(PostLin) == cmsSigCurveSetElemType) { // Maybe this is a linear tram, so we can avoid the whole stuff if (!AllCurvesAreLinear(PostLin)) { // All seems ok, proceed. NewPostLin = cmsStageDup(PostLin); if (!cmsPipelineInsertStage(Dest, cmsAT_END, NewPostLin)) goto Error; // In destination LUT, the sampling should be applied after this stage. cmsPipelineUnlinkStage(Src, cmsAT_END, &KeepPostLin); } } } // Now its time to do the sampling. We have to ignore pre/post linearization // The source LUT without pre/post curves is passed as parameter. if (!cmsStageSampleCLut16bit(CLUT, XFormSampler16, (void*) Src, 0)) { Error: // Ops, something went wrong, Restore stages if (KeepPreLin != NULL) { if (!cmsPipelineInsertStage(Src, cmsAT_BEGIN, KeepPreLin)) { _cmsAssert(0); // This never happens } } if (KeepPostLin != NULL) { if (!cmsPipelineInsertStage(Src, cmsAT_END, KeepPostLin)) { _cmsAssert(0); // This never happens } } cmsPipelineFree(Dest); return FALSE; } // Done. if (KeepPreLin != NULL) cmsStageFree(KeepPreLin); if (KeepPostLin != NULL) cmsStageFree(KeepPostLin); cmsPipelineFree(Src); DataCLUT = (_cmsStageCLutData*) CLUT ->Data; if (NewPreLin == NULL) DataSetIn = NULL; else DataSetIn = ((_cmsStageToneCurvesData*) NewPreLin ->Data) ->TheCurves; if (NewPostLin == NULL) DataSetOut = NULL; else DataSetOut = ((_cmsStageToneCurvesData*) NewPostLin ->Data) ->TheCurves; if (DataSetIn == NULL && DataSetOut == NULL) { _cmsPipelineSetOptimizationParameters(Dest, (_cmsPipelineEval16Fn) DataCLUT->Params->Interpolation.Lerp16, DataCLUT->Params, NULL, NULL); } else { p16 = PrelinOpt16alloc(Dest ->ContextID, DataCLUT ->Params, Dest ->InputChannels, DataSetIn, Dest ->OutputChannels, DataSetOut); _cmsPipelineSetOptimizationParameters(Dest, PrelinEval16, (void*) p16, PrelinOpt16free, Prelin16dup); } // Don't fix white on absolute colorimetric if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) *dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP; if (!(*dwFlags & cmsFLAGS_NOWHITEONWHITEFIXUP)) { FixWhiteMisalignment(Dest, ColorSpace, OutputColorSpace); } *Lut = Dest; return TRUE; cmsUNUSED_PARAMETER(Intent); } // ----------------------------------------------------------------------------------------------------------------------------------------------- // Fixes the gamma balancing of transform. This is described in my paper "Prelinearization Stages on // Color-Management Application-Specific Integrated Circuits (ASICs)" presented at NIP24. It only works // for RGB transforms. See the paper for more details // ----------------------------------------------------------------------------------------------------------------------------------------------- // Normalize endpoints by slope limiting max and min. This assures endpoints as well. // Descending curves are handled as well. static void SlopeLimiting(cmsToneCurve* g) { int BeginVal, EndVal; int AtBegin = (int) floor((cmsFloat64Number) g ->nEntries * 0.02 + 0.5); // Cutoff at 2% int AtEnd = (int) g ->nEntries - AtBegin - 1; // And 98% cmsFloat64Number Val, Slope, beta; int i; if (cmsIsToneCurveDescending(g)) { BeginVal = 0xffff; EndVal = 0; } else { BeginVal = 0; EndVal = 0xffff; } // Compute slope and offset for begin of curve Val = g ->Table16[AtBegin]; Slope = (Val - BeginVal) / AtBegin; beta = Val - Slope * AtBegin; for (i=0; i < AtBegin; i++) g ->Table16[i] = _cmsQuickSaturateWord(i * Slope + beta); // Compute slope and offset for the end Val = g ->Table16[AtEnd]; Slope = (EndVal - Val) / AtBegin; // AtBegin holds the X interval, which is same in both cases beta = Val - Slope * AtEnd; for (i = AtEnd; i < (int) g ->nEntries; i++) g ->Table16[i] = _cmsQuickSaturateWord(i * Slope + beta); } // Precomputes tables for 8-bit on input devicelink. static Prelin8Data* PrelinOpt8alloc(cmsContext ContextID, const cmsInterpParams* p, cmsToneCurve* G[3]) { int i; cmsUInt16Number Input[3]; cmsS15Fixed16Number v1, v2, v3; Prelin8Data* p8; p8 = (Prelin8Data*)_cmsMallocZero(ContextID, sizeof(Prelin8Data)); if (p8 == NULL) return NULL; // Since this only works for 8 bit input, values comes always as x * 257, // we can safely take msb byte (x << 8 + x) for (i=0; i < 256; i++) { if (G != NULL) { // Get 16-bit representation Input[0] = cmsEvalToneCurve16(G[0], FROM_8_TO_16(i)); Input[1] = cmsEvalToneCurve16(G[1], FROM_8_TO_16(i)); Input[2] = cmsEvalToneCurve16(G[2], FROM_8_TO_16(i)); } else { Input[0] = FROM_8_TO_16(i); Input[1] = FROM_8_TO_16(i); Input[2] = FROM_8_TO_16(i); } // Move to 0..1.0 in fixed domain v1 = _cmsToFixedDomain((int) (Input[0] * p -> Domain[0])); v2 = _cmsToFixedDomain((int) (Input[1] * p -> Domain[1])); v3 = _cmsToFixedDomain((int) (Input[2] * p -> Domain[2])); // Store the precalculated table of nodes p8 ->X0[i] = (p->opta[2] * FIXED_TO_INT(v1)); p8 ->Y0[i] = (p->opta[1] * FIXED_TO_INT(v2)); p8 ->Z0[i] = (p->opta[0] * FIXED_TO_INT(v3)); // Store the precalculated table of offsets p8 ->rx[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v1); p8 ->ry[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v2); p8 ->rz[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v3); } p8 ->ContextID = ContextID; p8 ->p = p; return p8; } static void Prelin8free(cmsContext ContextID, void* ptr) { _cmsFree(ContextID, ptr); } static void* Prelin8dup(cmsContext ContextID, const void* ptr) { return _cmsDupMem(ContextID, ptr, sizeof(Prelin8Data)); } // A optimized interpolation for 8-bit input. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static CMS_NO_SANITIZE void PrelinEval8(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const void* D) { cmsUInt8Number r, g, b; cmsS15Fixed16Number rx, ry, rz; cmsS15Fixed16Number c0, c1, c2, c3, Rest; int OutChan; CMSREGISTER cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; Prelin8Data* p8 = (Prelin8Data*) D; CMSREGISTER const cmsInterpParams* p = p8 ->p; int TotalOut = (int) p -> nOutputs; const cmsUInt16Number* LutTable = (const cmsUInt16Number*) p->Table; r = (cmsUInt8Number) (Input[0] >> 8); g = (cmsUInt8Number) (Input[1] >> 8); b = (cmsUInt8Number) (Input[2] >> 8); X0 = (cmsS15Fixed16Number) p8->X0[r]; Y0 = (cmsS15Fixed16Number) p8->Y0[g]; Z0 = (cmsS15Fixed16Number) p8->Z0[b]; rx = p8 ->rx[r]; ry = p8 ->ry[g]; rz = p8 ->rz[b]; X1 = X0 + (cmsS15Fixed16Number)((rx == 0) ? 0 : p ->opta[2]); Y1 = Y0 + (cmsS15Fixed16Number)((ry == 0) ? 0 : p ->opta[1]); Z1 = Z0 + (cmsS15Fixed16Number)((rz == 0) ? 0 : p ->opta[0]); // These are the 6 Tetrahedral for (OutChan=0; OutChan < TotalOut; OutChan++) { c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; Output[OutChan] = (cmsUInt16Number) (c0 + ((Rest + (Rest >> 16)) >> 16)); } } #undef DENS // Curves that contain wide empty areas are not optimizeable static cmsBool IsDegenerated(const cmsToneCurve* g) { cmsUInt32Number i, Zeros = 0, Poles = 0; cmsUInt32Number nEntries = g ->nEntries; for (i=0; i < nEntries; i++) { if (g ->Table16[i] == 0x0000) Zeros++; if (g ->Table16[i] == 0xffff) Poles++; } if (Zeros == 1 && Poles == 1) return FALSE; // For linear tables if (Zeros > (nEntries / 20)) return TRUE; // Degenerated, many zeros if (Poles > (nEntries / 20)) return TRUE; // Degenerated, many poles return FALSE; } // -------------------------------------------------------------------------------------------------------------- // We need xput over here static cmsBool OptimizeByComputingLinearization(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* OriginalLut; cmsUInt32Number nGridPoints; cmsToneCurve *Trans[cmsMAXCHANNELS], *TransReverse[cmsMAXCHANNELS]; cmsUInt32Number t, i; cmsFloat32Number v, In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; cmsBool lIsSuitable, lIsLinear; cmsPipeline* OptimizedLUT = NULL, *LutPlusCurves = NULL; cmsStage* OptimizedCLUTmpe; cmsColorSpaceSignature ColorSpace, OutputColorSpace; cmsStage* OptimizedPrelinMpe; cmsStage* mpe; cmsToneCurve** OptimizedPrelinCurves; _cmsStageCLutData* OptimizedPrelinCLUT; // This is a lossy optimization! does not apply in floating-point cases if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; // Only on chunky RGB if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE; if (T_PLANAR(*InputFormat)) return FALSE; if (T_COLORSPACE(*OutputFormat) != PT_RGB) return FALSE; if (T_PLANAR(*OutputFormat)) return FALSE; // On 16 bits, user has to specify the feature if (!_cmsFormatterIs8bit(*InputFormat)) { if (!(*dwFlags & cmsFLAGS_CLUT_PRE_LINEARIZATION)) return FALSE; } OriginalLut = *Lut; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(OriginalLut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } ColorSpace = _cmsICCcolorSpace((int) T_COLORSPACE(*InputFormat)); OutputColorSpace = _cmsICCcolorSpace((int) T_COLORSPACE(*OutputFormat)); // Color space must be specified if (ColorSpace == (cmsColorSpaceSignature)0 || OutputColorSpace == (cmsColorSpaceSignature)0) return FALSE; nGridPoints = _cmsReasonableGridpointsByColorspace(ColorSpace, *dwFlags); // Empty gamma containers memset(Trans, 0, sizeof(Trans)); memset(TransReverse, 0, sizeof(TransReverse)); // If the last stage of the original lut are curves, and those curves are // degenerated, it is likely the transform is squeezing and clipping // the output from previous CLUT. We cannot optimize this case { cmsStage* last = cmsPipelineGetPtrToLastStage(OriginalLut); if (last == NULL) goto Error; if (cmsStageType(last) == cmsSigCurveSetElemType) { _cmsStageToneCurvesData* Data = (_cmsStageToneCurvesData*)cmsStageData(last); for (i = 0; i < Data->nCurves; i++) { if (IsDegenerated(Data->TheCurves[i])) goto Error; } } } for (t = 0; t < OriginalLut ->InputChannels; t++) { Trans[t] = cmsBuildTabulatedToneCurve16(OriginalLut ->ContextID, PRELINEARIZATION_POINTS, NULL); if (Trans[t] == NULL) goto Error; } // Populate the curves for (i=0; i < PRELINEARIZATION_POINTS; i++) { v = (cmsFloat32Number) ((cmsFloat64Number) i / (PRELINEARIZATION_POINTS - 1)); // Feed input with a gray ramp for (t=0; t < OriginalLut ->InputChannels; t++) In[t] = v; // Evaluate the gray value cmsPipelineEvalFloat(In, Out, OriginalLut); // Store result in curve for (t=0; t < OriginalLut ->InputChannels; t++) Trans[t] ->Table16[i] = _cmsQuickSaturateWord(Out[t] * 65535.0); } // Slope-limit the obtained curves for (t = 0; t < OriginalLut ->InputChannels; t++) SlopeLimiting(Trans[t]); // Check for validity lIsSuitable = TRUE; lIsLinear = TRUE; for (t=0; (lIsSuitable && (t < OriginalLut ->InputChannels)); t++) { // Exclude if already linear if (!cmsIsToneCurveLinear(Trans[t])) lIsLinear = FALSE; // Exclude if non-monotonic if (!cmsIsToneCurveMonotonic(Trans[t])) lIsSuitable = FALSE; if (IsDegenerated(Trans[t])) lIsSuitable = FALSE; } // If it is not suitable, just quit if (!lIsSuitable) goto Error; // Invert curves if possible for (t = 0; t < OriginalLut ->InputChannels; t++) { TransReverse[t] = cmsReverseToneCurveEx(PRELINEARIZATION_POINTS, Trans[t]); if (TransReverse[t] == NULL) goto Error; } // Now inset the reversed curves at the begin of transform LutPlusCurves = cmsPipelineDup(OriginalLut); if (LutPlusCurves == NULL) goto Error; if (!cmsPipelineInsertStage(LutPlusCurves, cmsAT_BEGIN, cmsStageAllocToneCurves(OriginalLut ->ContextID, OriginalLut ->InputChannels, TransReverse))) goto Error; // Create the result LUT OptimizedLUT = cmsPipelineAlloc(OriginalLut ->ContextID, OriginalLut ->InputChannels, OriginalLut ->OutputChannels); if (OptimizedLUT == NULL) goto Error; OptimizedPrelinMpe = cmsStageAllocToneCurves(OriginalLut ->ContextID, OriginalLut ->InputChannels, Trans); // Create and insert the curves at the beginning if (!cmsPipelineInsertStage(OptimizedLUT, cmsAT_BEGIN, OptimizedPrelinMpe)) goto Error; // Allocate the CLUT for result OptimizedCLUTmpe = cmsStageAllocCLut16bit(OriginalLut ->ContextID, nGridPoints, OriginalLut ->InputChannels, OriginalLut ->OutputChannels, NULL); // Add the CLUT to the destination LUT if (!cmsPipelineInsertStage(OptimizedLUT, cmsAT_END, OptimizedCLUTmpe)) goto Error; // Resample the LUT if (!cmsStageSampleCLut16bit(OptimizedCLUTmpe, XFormSampler16, (void*) LutPlusCurves, 0)) goto Error; // Free resources for (t = 0; t < OriginalLut ->InputChannels; t++) { if (Trans[t]) cmsFreeToneCurve(Trans[t]); if (TransReverse[t]) cmsFreeToneCurve(TransReverse[t]); } cmsPipelineFree(LutPlusCurves); OptimizedPrelinCurves = _cmsStageGetPtrToCurveSet(OptimizedPrelinMpe); OptimizedPrelinCLUT = (_cmsStageCLutData*) OptimizedCLUTmpe ->Data; // Set the evaluator if 8-bit if (_cmsFormatterIs8bit(*InputFormat)) { Prelin8Data* p8 = PrelinOpt8alloc(OptimizedLUT ->ContextID, OptimizedPrelinCLUT ->Params, OptimizedPrelinCurves); if (p8 == NULL) return FALSE; _cmsPipelineSetOptimizationParameters(OptimizedLUT, PrelinEval8, (void*) p8, Prelin8free, Prelin8dup); } else { Prelin16Data* p16 = PrelinOpt16alloc(OptimizedLUT ->ContextID, OptimizedPrelinCLUT ->Params, 3, OptimizedPrelinCurves, 3, NULL); if (p16 == NULL) return FALSE; _cmsPipelineSetOptimizationParameters(OptimizedLUT, PrelinEval16, (void*) p16, PrelinOpt16free, Prelin16dup); } // Don't fix white on absolute colorimetric if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) *dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP; if (!(*dwFlags & cmsFLAGS_NOWHITEONWHITEFIXUP)) { if (!FixWhiteMisalignment(OptimizedLUT, ColorSpace, OutputColorSpace)) { return FALSE; } } // And return the obtained LUT cmsPipelineFree(OriginalLut); *Lut = OptimizedLUT; return TRUE; Error: for (t = 0; t < OriginalLut ->InputChannels; t++) { if (Trans[t]) cmsFreeToneCurve(Trans[t]); if (TransReverse[t]) cmsFreeToneCurve(TransReverse[t]); } if (LutPlusCurves != NULL) cmsPipelineFree(LutPlusCurves); if (OptimizedLUT != NULL) cmsPipelineFree(OptimizedLUT); return FALSE; cmsUNUSED_PARAMETER(Intent); cmsUNUSED_PARAMETER(lIsLinear); } // Curves optimizer ------------------------------------------------------------------------------------------------------------------ static void CurvesFree(cmsContext ContextID, void* ptr) { Curves16Data* Data = (Curves16Data*) ptr; cmsUInt32Number i; for (i=0; i < Data -> nCurves; i++) { _cmsFree(ContextID, Data ->Curves[i]); } _cmsFree(ContextID, Data ->Curves); _cmsFree(ContextID, ptr); } static void* CurvesDup(cmsContext ContextID, const void* ptr) { Curves16Data* Data = (Curves16Data*)_cmsDupMem(ContextID, ptr, sizeof(Curves16Data)); cmsUInt32Number i; if (Data == NULL) return NULL; Data->Curves = (cmsUInt16Number**) _cmsDupMem(ContextID, Data->Curves, Data->nCurves * sizeof(cmsUInt16Number*)); for (i=0; i < Data -> nCurves; i++) { Data->Curves[i] = (cmsUInt16Number*) _cmsDupMem(ContextID, Data->Curves[i], Data->nElements * sizeof(cmsUInt16Number)); } return (void*) Data; } // Precomputes tables for 8-bit on input devicelink. static Curves16Data* CurvesAlloc(cmsContext ContextID, cmsUInt32Number nCurves, cmsUInt32Number nElements, cmsToneCurve** G) { cmsUInt32Number i, j; Curves16Data* c16; c16 = (Curves16Data*)_cmsMallocZero(ContextID, sizeof(Curves16Data)); if (c16 == NULL) return NULL; c16 ->nCurves = nCurves; c16 ->nElements = nElements; c16->Curves = (cmsUInt16Number**) _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*)); if (c16->Curves == NULL) { _cmsFree(ContextID, c16); return NULL; } for (i=0; i < nCurves; i++) { c16->Curves[i] = (cmsUInt16Number*) _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number)); if (c16->Curves[i] == NULL) { for (j=0; j < i; j++) { _cmsFree(ContextID, c16->Curves[j]); } _cmsFree(ContextID, c16->Curves); _cmsFree(ContextID, c16); return NULL; } if (nElements == 256U) { for (j=0; j < nElements; j++) { c16 ->Curves[i][j] = cmsEvalToneCurve16(G[i], FROM_8_TO_16(j)); } } else { for (j=0; j < nElements; j++) { c16 ->Curves[i][j] = cmsEvalToneCurve16(G[i], (cmsUInt16Number) j); } } } return c16; } static void FastEvaluateCurves8(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D) { Curves16Data* Data = (Curves16Data*) D; int x; cmsUInt32Number i; for (i=0; i < Data ->nCurves; i++) { x = (In[i] >> 8); Out[i] = Data -> Curves[i][x]; } } static void FastEvaluateCurves16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D) { Curves16Data* Data = (Curves16Data*) D; cmsUInt32Number i; for (i=0; i < Data ->nCurves; i++) { Out[i] = Data -> Curves[i][In[i]]; } } static void FastIdentity16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D) { cmsPipeline* Lut = (cmsPipeline*) D; cmsUInt32Number i; for (i=0; i < Lut ->InputChannels; i++) { Out[i] = In[i]; } } // If the target LUT holds only curves, the optimization procedure is to join all those // curves together. That only works on curves and does not work on matrices. static cmsBool OptimizeByJoiningCurves(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsToneCurve** GammaTables = NULL; cmsFloat32Number InFloat[cmsMAXCHANNELS], OutFloat[cmsMAXCHANNELS]; cmsUInt32Number i, j; cmsPipeline* Src = *Lut; cmsPipeline* Dest = NULL; cmsStage* mpe; cmsStage* ObtainedCurves = NULL; // This is a lossy optimization! does not apply in floating-point cases if (_cmsFormatterIsFloat(*InputFormat) || _cmsFormatterIsFloat(*OutputFormat)) return FALSE; // Only curves in this LUT? for (mpe = cmsPipelineGetPtrToFirstStage(Src); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) != cmsSigCurveSetElemType) return FALSE; } // Allocate an empty LUT Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels); if (Dest == NULL) return FALSE; // Create target curves GammaTables = (cmsToneCurve**) _cmsCalloc(Src ->ContextID, Src ->InputChannels, sizeof(cmsToneCurve*)); if (GammaTables == NULL) goto Error; for (i=0; i < Src ->InputChannels; i++) { GammaTables[i] = cmsBuildTabulatedToneCurve16(Src ->ContextID, PRELINEARIZATION_POINTS, NULL); if (GammaTables[i] == NULL) goto Error; } // Compute 16 bit result by using floating point for (i=0; i < PRELINEARIZATION_POINTS; i++) { for (j=0; j < Src ->InputChannels; j++) InFloat[j] = (cmsFloat32Number) ((cmsFloat64Number) i / (PRELINEARIZATION_POINTS - 1)); cmsPipelineEvalFloat(InFloat, OutFloat, Src); for (j=0; j < Src ->InputChannels; j++) GammaTables[j] -> Table16[i] = _cmsQuickSaturateWord(OutFloat[j] * 65535.0); } ObtainedCurves = cmsStageAllocToneCurves(Src ->ContextID, Src ->InputChannels, GammaTables); if (ObtainedCurves == NULL) goto Error; for (i=0; i < Src ->InputChannels; i++) { cmsFreeToneCurve(GammaTables[i]); GammaTables[i] = NULL; } if (GammaTables != NULL) { _cmsFree(Src->ContextID, GammaTables); GammaTables = NULL; } // Maybe the curves are linear at the end if (!AllCurvesAreLinear(ObtainedCurves)) { _cmsStageToneCurvesData* Data; if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, ObtainedCurves)) goto Error; Data = (_cmsStageToneCurvesData*) cmsStageData(ObtainedCurves); ObtainedCurves = NULL; // If the curves are to be applied in 8 bits, we can save memory if (_cmsFormatterIs8bit(*InputFormat)) { Curves16Data* c16 = CurvesAlloc(Dest ->ContextID, Data ->nCurves, 256, Data ->TheCurves); if (c16 == NULL) goto Error; *dwFlags |= cmsFLAGS_NOCACHE; _cmsPipelineSetOptimizationParameters(Dest, FastEvaluateCurves8, c16, CurvesFree, CurvesDup); } else { Curves16Data* c16 = CurvesAlloc(Dest ->ContextID, Data ->nCurves, 65536, Data ->TheCurves); if (c16 == NULL) goto Error; *dwFlags |= cmsFLAGS_NOCACHE; _cmsPipelineSetOptimizationParameters(Dest, FastEvaluateCurves16, c16, CurvesFree, CurvesDup); } } else { // LUT optimizes to nothing. Set the identity LUT cmsStageFree(ObtainedCurves); ObtainedCurves = NULL; if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageAllocIdentity(Dest ->ContextID, Src ->InputChannels))) goto Error; *dwFlags |= cmsFLAGS_NOCACHE; _cmsPipelineSetOptimizationParameters(Dest, FastIdentity16, (void*) Dest, NULL, NULL); } // We are done. cmsPipelineFree(Src); *Lut = Dest; return TRUE; Error: if (ObtainedCurves != NULL) cmsStageFree(ObtainedCurves); if (GammaTables != NULL) { for (i=0; i < Src ->InputChannels; i++) { if (GammaTables[i] != NULL) cmsFreeToneCurve(GammaTables[i]); } _cmsFree(Src ->ContextID, GammaTables); } if (Dest != NULL) cmsPipelineFree(Dest); return FALSE; cmsUNUSED_PARAMETER(Intent); cmsUNUSED_PARAMETER(InputFormat); cmsUNUSED_PARAMETER(OutputFormat); cmsUNUSED_PARAMETER(dwFlags); } // ------------------------------------------------------------------------------------------------------------------------------------- // LUT is Shaper - Matrix - Matrix - Shaper, which is very frequent when combining two matrix-shaper profiles static void FreeMatShaper(cmsContext ContextID, void* Data) { if (Data != NULL) _cmsFree(ContextID, Data); } static void* DupMatShaper(cmsContext ContextID, const void* Data) { return _cmsDupMem(ContextID, Data, sizeof(MatShaper8Data)); } // A fast matrix-shaper evaluator for 8 bits. This is a bit ticky since I'm using 1.14 signed fixed point // to accomplish some performance. Actually it takes 256x3 16 bits tables and 16385 x 3 tables of 8 bits, // in total about 50K, and the performance boost is huge! static void MatShaperEval16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER const void* D) { MatShaper8Data* p = (MatShaper8Data*) D; cmsS1Fixed14Number l1, l2, l3, r, g, b; cmsUInt32Number ri, gi, bi; // In this case (and only in this case!) we can use this simplification since // In[] is assured to come from a 8 bit number. (a << 8 | a) ri = In[0] & 0xFFU; gi = In[1] & 0xFFU; bi = In[2] & 0xFFU; // Across first shaper, which also converts to 1.14 fixed point r = p->Shaper1R[ri]; g = p->Shaper1G[gi]; b = p->Shaper1B[bi]; // Evaluate the matrix in 1.14 fixed point l1 = (p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b + p->Off[0] + 0x2000) >> 14; l2 = (p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b + p->Off[1] + 0x2000) >> 14; l3 = (p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b + p->Off[2] + 0x2000) >> 14; // Now we have to clip to 0..1.0 range ri = (l1 < 0) ? 0 : ((l1 > 16384) ? 16384U : (cmsUInt32Number) l1); gi = (l2 < 0) ? 0 : ((l2 > 16384) ? 16384U : (cmsUInt32Number) l2); bi = (l3 < 0) ? 0 : ((l3 > 16384) ? 16384U : (cmsUInt32Number) l3); // And across second shaper, Out[0] = p->Shaper2R[ri]; Out[1] = p->Shaper2G[gi]; Out[2] = p->Shaper2B[bi]; } // This table converts from 8 bits to 1.14 after applying the curve static void FillFirstShaper(cmsS1Fixed14Number* Table, cmsToneCurve* Curve) { int i; cmsFloat32Number R, y; for (i=0; i < 256; i++) { R = (cmsFloat32Number) (i / 255.0); y = cmsEvalToneCurveFloat(Curve, R); if (y < 131072.0) Table[i] = DOUBLE_TO_1FIXED14(y); else Table[i] = 0x7fffffff; } } // This table converts form 1.14 (being 0x4000 the last entry) to 8 bits after applying the curve static void FillSecondShaper(cmsUInt16Number* Table, cmsToneCurve* Curve, cmsBool Is8BitsOutput) { int i; cmsFloat32Number R, Val; for (i=0; i < 16385; i++) { R = (cmsFloat32Number) (i / 16384.0); Val = cmsEvalToneCurveFloat(Curve, R); // Val comes 0..1.0 if (Val < 0) Val = 0; if (Val > 1.0) Val = 1.0; if (Is8BitsOutput) { // If 8 bits output, we can optimize further by computing the / 257 part. // first we compute the resulting byte and then we store the byte times // 257. This quantization allows to round very quick by doing a >> 8, but // since the low byte is always equal to msb, we can do a & 0xff and this works! cmsUInt16Number w = _cmsQuickSaturateWord(Val * 65535.0); cmsUInt8Number b = FROM_16_TO_8(w); Table[i] = FROM_8_TO_16(b); } else Table[i] = _cmsQuickSaturateWord(Val * 65535.0); } } // Compute the matrix-shaper structure static cmsBool SetMatShaper(cmsPipeline* Dest, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3], cmsUInt32Number* OutputFormat) { MatShaper8Data* p; int i, j; cmsBool Is8Bits = _cmsFormatterIs8bit(*OutputFormat); // Allocate a big chuck of memory to store precomputed tables p = (MatShaper8Data*) _cmsMalloc(Dest ->ContextID, sizeof(MatShaper8Data)); if (p == NULL) return FALSE; p -> ContextID = Dest -> ContextID; // Precompute tables FillFirstShaper(p ->Shaper1R, Curve1[0]); FillFirstShaper(p ->Shaper1G, Curve1[1]); FillFirstShaper(p ->Shaper1B, Curve1[2]); FillSecondShaper(p ->Shaper2R, Curve2[0], Is8Bits); FillSecondShaper(p ->Shaper2G, Curve2[1], Is8Bits); FillSecondShaper(p ->Shaper2B, Curve2[2], Is8Bits); // Convert matrix to nFixed14. Note that those values may take more than 16 bits for (i=0; i < 3; i++) { for (j=0; j < 3; j++) { p ->Mat[i][j] = DOUBLE_TO_1FIXED14(Mat->v[i].n[j]); } } for (i=0; i < 3; i++) { if (Off == NULL) { p ->Off[i] = 0; } else { p ->Off[i] = DOUBLE_TO_1FIXED14(Off->n[i]); } } // Mark as optimized for faster formatter if (Is8Bits) *OutputFormat |= OPTIMIZED_SH(1); // Fill function pointers _cmsPipelineSetOptimizationParameters(Dest, MatShaperEval16, (void*) p, FreeMatShaper, DupMatShaper); return TRUE; } // 8 bits on input allows matrix-shaper boot up to 25 Mpixels per second on RGB. That's fast! static cmsBool OptimizeMatrixShaper(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* Curve1, *Curve2; cmsStage* Matrix1, *Matrix2; cmsMAT3 res; cmsBool IdentityMat; cmsPipeline* Dest, *Src; cmsFloat64Number* Offset; // Only works on RGB to RGB if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE; // Only works on 8 bit input if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE; // Seems suitable, proceed Src = *Lut; // Check for: // // shaper-matrix-matrix-shaper // shaper-matrix-shaper // // Both of those constructs are possible (first because abs. colorimetric). // additionally, In the first case, the input matrix offset should be zero. IdentityMat = FALSE; if (cmsPipelineCheckAndRetreiveStages(Src, 4, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &Curve1, &Matrix1, &Matrix2, &Curve2)) { // Get both matrices _cmsStageMatrixData* Data1 = (_cmsStageMatrixData*)cmsStageData(Matrix1); _cmsStageMatrixData* Data2 = (_cmsStageMatrixData*)cmsStageData(Matrix2); // Input offset should be zero if (Data1->Offset != NULL) return FALSE; // Multiply both matrices to get the result _cmsMAT3per(&res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double); // Only 2nd matrix has offset, or it is zero Offset = Data2->Offset; // Now the result is in res + Data2 -> Offset. Maybe is a plain identity? if (_cmsMAT3isIdentity(&res) && Offset == NULL) { // We can get rid of full matrix IdentityMat = TRUE; } } else { if (cmsPipelineCheckAndRetreiveStages(Src, 3, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &Curve1, &Matrix1, &Curve2)) { _cmsStageMatrixData* Data = (_cmsStageMatrixData*)cmsStageData(Matrix1); // Copy the matrix to our result memcpy(&res, Data->Double, sizeof(res)); // Preserve the Odffset (may be NULL as a zero offset) Offset = Data->Offset; if (_cmsMAT3isIdentity(&res) && Offset == NULL) { // We can get rid of full matrix IdentityMat = TRUE; } } else return FALSE; // Not optimizeable this time } // Allocate an empty LUT Dest = cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels); if (!Dest) return FALSE; // Assamble the new LUT if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1))) goto Error; if (!IdentityMat) { if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest->ContextID, 3, 3, (const cmsFloat64Number*)&res, Offset))) goto Error; } if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2))) goto Error; // If identity on matrix, we can further optimize the curves, so call the join curves routine if (IdentityMat) { OptimizeByJoiningCurves(&Dest, Intent, InputFormat, OutputFormat, dwFlags); } else { _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(Curve1); _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(Curve2); // In this particular optimization, cache does not help as it takes more time to deal with // the cache that with the pixel handling *dwFlags |= cmsFLAGS_NOCACHE; // Setup the optimizarion routines SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Offset, mpeC2->TheCurves, OutputFormat); } cmsPipelineFree(Src); *Lut = Dest; return TRUE; Error: // Leave Src unchanged cmsPipelineFree(Dest); return FALSE; } // ------------------------------------------------------------------------------------------------------------------------------------- // Optimization plug-ins // List of optimizations typedef struct _cmsOptimizationCollection_st { _cmsOPToptimizeFn OptimizePtr; struct _cmsOptimizationCollection_st *Next; } _cmsOptimizationCollection; // The built-in list. We currently implement 4 types of optimizations. Joining of curves, matrix-shaper, linearization and resampling static _cmsOptimizationCollection DefaultOptimization[] = { { OptimizeByJoiningCurves, &DefaultOptimization[1] }, { OptimizeMatrixShaper, &DefaultOptimization[2] }, { OptimizeByComputingLinearization, &DefaultOptimization[3] }, { OptimizeByResampling, NULL } }; // The linked list head _cmsOptimizationPluginChunkType _cmsOptimizationPluginChunk = { NULL }; // Duplicates the zone of memory used by the plug-in in the new context static void DupPluginOptimizationList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsOptimizationPluginChunkType newHead = { NULL }; _cmsOptimizationCollection* entry; _cmsOptimizationCollection* Anterior = NULL; _cmsOptimizationPluginChunkType* head = (_cmsOptimizationPluginChunkType*) src->chunks[OptimizationPlugin]; _cmsAssert(ctx != NULL); _cmsAssert(head != NULL); // Walk the list copying all nodes for (entry = head->OptimizationCollection; entry != NULL; entry = entry ->Next) { _cmsOptimizationCollection *newEntry = ( _cmsOptimizationCollection *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(_cmsOptimizationCollection)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.OptimizationCollection == NULL) newHead.OptimizationCollection = newEntry; } ctx ->chunks[OptimizationPlugin] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsOptimizationPluginChunkType)); } void _cmsAllocOptimizationPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { if (src != NULL) { // Copy all linked list DupPluginOptimizationList(ctx, src); } else { static _cmsOptimizationPluginChunkType OptimizationPluginChunkType = { NULL }; ctx ->chunks[OptimizationPlugin] = _cmsSubAllocDup(ctx ->MemPool, &OptimizationPluginChunkType, sizeof(_cmsOptimizationPluginChunkType)); } } // Register new ways to optimize cmsBool _cmsRegisterOptimizationPlugin(cmsContext ContextID, cmsPluginBase* Data) { cmsPluginOptimization* Plugin = (cmsPluginOptimization*) Data; _cmsOptimizationPluginChunkType* ctx = ( _cmsOptimizationPluginChunkType*) _cmsContextGetClientChunk(ContextID, OptimizationPlugin); _cmsOptimizationCollection* fl; if (Data == NULL) { ctx->OptimizationCollection = NULL; return TRUE; } // Optimizer callback is required if (Plugin ->OptimizePtr == NULL) return FALSE; fl = (_cmsOptimizationCollection*) _cmsPluginMalloc(ContextID, sizeof(_cmsOptimizationCollection)); if (fl == NULL) return FALSE; // Copy the parameters fl ->OptimizePtr = Plugin ->OptimizePtr; // Keep linked list fl ->Next = ctx->OptimizationCollection; // Set the head ctx ->OptimizationCollection = fl; // All is ok return TRUE; } // The entry point for LUT optimization cmsBool CMSEXPORT _cmsOptimizePipeline(cmsContext ContextID, cmsPipeline** PtrLut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { _cmsOptimizationPluginChunkType* ctx = ( _cmsOptimizationPluginChunkType*) _cmsContextGetClientChunk(ContextID, OptimizationPlugin); _cmsOptimizationCollection* Opts; cmsBool AnySuccess = FALSE; // A CLUT is being asked, so force this specific optimization if (*dwFlags & cmsFLAGS_FORCE_CLUT) { PreOptimize(*PtrLut); return OptimizeByResampling(PtrLut, Intent, InputFormat, OutputFormat, dwFlags); } // Anything to optimize? if ((*PtrLut) ->Elements == NULL) { _cmsPipelineSetOptimizationParameters(*PtrLut, FastIdentity16, (void*) *PtrLut, NULL, NULL); return TRUE; } // Try to get rid of identities and trivial conversions. AnySuccess = PreOptimize(*PtrLut); // After removal do we end with an identity? if ((*PtrLut) ->Elements == NULL) { _cmsPipelineSetOptimizationParameters(*PtrLut, FastIdentity16, (void*) *PtrLut, NULL, NULL); return TRUE; } // Do not optimize, keep all precision if (*dwFlags & cmsFLAGS_NOOPTIMIZE) return FALSE; // Try plug-in optimizations for (Opts = ctx->OptimizationCollection; Opts != NULL; Opts = Opts ->Next) { // If one schema succeeded, we are done if (Opts ->OptimizePtr(PtrLut, Intent, InputFormat, OutputFormat, dwFlags)) { return TRUE; // Optimized! } } // Try built-in optimizations for (Opts = DefaultOptimization; Opts != NULL; Opts = Opts ->Next) { if (Opts ->OptimizePtr(PtrLut, Intent, InputFormat, OutputFormat, dwFlags)) { return TRUE; } } // Only simple optimizations succeeded return AnySuccess; } lcms2-2.12rc1/src/cmserr.c0000644000175000017500000005102713775114656014350 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- #include "lcms2_internal.h" // This function is here to help applications to prevent mixing lcms versions on header and shared objects. int CMSEXPORT cmsGetEncodedCMMversion(void) { return LCMS_VERSION; } // I am so tired about incompatibilities on those functions that here are some replacements // that hopefully would be fully portable. // compare two strings ignoring case int CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2) { CMSREGISTER const unsigned char *us1 = (const unsigned char *)s1, *us2 = (const unsigned char *)s2; while (toupper(*us1) == toupper(*us2++)) if (*us1++ == '\0') return 0; return (toupper(*us1) - toupper(*--us2)); } // long int because C99 specifies ftell in such way (7.19.9.2) long int CMSEXPORT cmsfilelength(FILE* f) { long int p , n; p = ftell(f); // register current file position if (p == -1L) return -1L; if (fseek(f, 0, SEEK_END) != 0) { return -1L; } n = ftell(f); fseek(f, p, SEEK_SET); // file position restored return n; } // Memory handling ------------------------------------------------------------------ // // This is the interface to low-level memory management routines. By default a simple // wrapping to malloc/free/realloc is provided, although there is a limit on the max // amount of memoy that can be reclaimed. This is mostly as a safety feature to prevent // bogus or evil code to allocate huge blocks that otherwise lcms would never need. #define MAX_MEMORY_FOR_ALLOC ((cmsUInt32Number)(1024U*1024U*512U)) // User may override this behaviour by using a memory plug-in, which basically replaces // the default memory management functions. In this case, no check is performed and it // is up to the plug-in writter to keep in the safe side. There are only three functions // required to be implemented: malloc, realloc and free, although the user may want to // replace the optional mallocZero, calloc and dup as well. cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // ********************************************************************************* // This is the default memory allocation function. It does a very coarse // check of amount of memory, just to prevent exploits static void* _cmsMallocDefaultFn(cmsContext ContextID, cmsUInt32Number size) { if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never allow over maximum return (void*) malloc(size); cmsUNUSED_PARAMETER(ContextID); } // Generic allocate & zero static void* _cmsMallocZeroDefaultFn(cmsContext ContextID, cmsUInt32Number size) { void *pt = _cmsMalloc(ContextID, size); if (pt == NULL) return NULL; memset(pt, 0, size); return pt; } // The default free function. The only check proformed is against NULL pointers static void _cmsFreeDefaultFn(cmsContext ContextID, void *Ptr) { // free(NULL) is defined a no-op by C99, therefore it is safe to // avoid the check, but it is here just in case... if (Ptr) free(Ptr); cmsUNUSED_PARAMETER(ContextID); } // The default realloc function. Again it checks for exploits. If Ptr is NULL, // realloc behaves the same way as malloc and allocates a new block of size bytes. static void* _cmsReallocDefaultFn(cmsContext ContextID, void* Ptr, cmsUInt32Number size) { if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never realloc over 512Mb return realloc(Ptr, size); cmsUNUSED_PARAMETER(ContextID); } // The default calloc function. Allocates an array of num elements, each one of size bytes // all memory is initialized to zero. static void* _cmsCallocDefaultFn(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) { cmsUInt32Number Total = num * size; // Preserve calloc behaviour if (Total == 0) return NULL; // Safe check for overflow. if (num >= UINT_MAX / size) return NULL; // Check for overflow if (Total < num || Total < size) { return NULL; } if (Total > MAX_MEMORY_FOR_ALLOC) return NULL; // Never alloc over 512Mb return _cmsMallocZero(ContextID, Total); } // Generic block duplication static void* _cmsDupDefaultFn(cmsContext ContextID, const void* Org, cmsUInt32Number size) { void* mem; if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never dup over 512Mb mem = _cmsMalloc(ContextID, size); if (mem != NULL && Org != NULL) memmove(mem, Org, size); return mem; } // Pointers to memory manager functions in Context0 _cmsMemPluginChunkType _cmsMemPluginChunk = { _cmsMallocDefaultFn, _cmsMallocZeroDefaultFn, _cmsFreeDefaultFn, _cmsReallocDefaultFn, _cmsCallocDefaultFn, _cmsDupDefaultFn }; // Reset and duplicate memory manager void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsAssert(ctx != NULL); if (src != NULL) { // Duplicate ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); } else { // To reset it, we use the default allocators, which cannot be overridden ctx ->chunks[MemPlugin] = &ctx ->DefaultMemoryManager; } } // Auxiliary to fill memory management functions from plugin (or context 0 defaults) void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr) { if (Plugin == NULL) { memcpy(ptr, &_cmsMemPluginChunk, sizeof(_cmsMemPluginChunk)); } else { ptr ->MallocPtr = Plugin -> MallocPtr; ptr ->FreePtr = Plugin -> FreePtr; ptr ->ReallocPtr = Plugin -> ReallocPtr; // Make sure we revert to defaults ptr ->MallocZeroPtr= _cmsMallocZeroDefaultFn; ptr ->CallocPtr = _cmsCallocDefaultFn; ptr ->DupPtr = _cmsDupDefaultFn; if (Plugin ->MallocZeroPtr != NULL) ptr ->MallocZeroPtr = Plugin -> MallocZeroPtr; if (Plugin ->CallocPtr != NULL) ptr ->CallocPtr = Plugin -> CallocPtr; if (Plugin ->DupPtr != NULL) ptr ->DupPtr = Plugin -> DupPtr; } } // Plug-in replacement entry cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase *Data) { cmsPluginMemHandler* Plugin = (cmsPluginMemHandler*) Data; _cmsMemPluginChunkType* ptr; // NULL forces to reset to defaults. In this special case, the defaults are stored in the context structure. // Remaining plug-ins does NOT have any copy in the context structure, but this is somehow special as the // context internal data should be malloce'd by using those functions. if (Data == NULL) { struct _cmsContext_struct* ctx = ( struct _cmsContext_struct*) ContextID; // Return to the default allocators if (ContextID != NULL) { ctx->chunks[MemPlugin] = (void*) &ctx->DefaultMemoryManager; } return TRUE; } // Check for required callbacks if (Plugin -> MallocPtr == NULL || Plugin -> FreePtr == NULL || Plugin -> ReallocPtr == NULL) return FALSE; // Set replacement functions ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); if (ptr == NULL) return FALSE; _cmsInstallAllocFunctions(Plugin, ptr); return TRUE; } // Generic allocate void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) { _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); return ptr ->MallocPtr(ContextID, size); } // Generic allocate & zero void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) { _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); return ptr->MallocZeroPtr(ContextID, size); } // Generic calloc void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) { _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); return ptr->CallocPtr(ContextID, num, size); } // Generic reallocate void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) { _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); return ptr->ReallocPtr(ContextID, Ptr, size); } // Generic free memory void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) { if (Ptr != NULL) { _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); ptr ->FreePtr(ContextID, Ptr); } } // Generic block duplication void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) { _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); return ptr ->DupPtr(ContextID, Org, size); } // ******************************************************************************************** // Sub allocation takes care of many pointers of small size. The memory allocated in // this way have be freed at once. Next function allocates a single chunk for linked list // I prefer this method over realloc due to the big inpact on xput realloc may have if // memory is being swapped to disk. This approach is safer (although that may not be true on all platforms) static _cmsSubAllocator_chunk* _cmsCreateSubAllocChunk(cmsContext ContextID, cmsUInt32Number Initial) { _cmsSubAllocator_chunk* chunk; // 20K by default if (Initial == 0) Initial = 20*1024; // Create the container chunk = (_cmsSubAllocator_chunk*) _cmsMallocZero(ContextID, sizeof(_cmsSubAllocator_chunk)); if (chunk == NULL) return NULL; // Initialize values chunk ->Block = (cmsUInt8Number*) _cmsMalloc(ContextID, Initial); if (chunk ->Block == NULL) { // Something went wrong _cmsFree(ContextID, chunk); return NULL; } chunk ->BlockSize = Initial; chunk ->Used = 0; chunk ->next = NULL; return chunk; } // The suballocated is nothing but a pointer to the first element in the list. We also keep // the thread ID in this structure. _cmsSubAllocator* _cmsCreateSubAlloc(cmsContext ContextID, cmsUInt32Number Initial) { _cmsSubAllocator* sub; // Create the container sub = (_cmsSubAllocator*) _cmsMallocZero(ContextID, sizeof(_cmsSubAllocator)); if (sub == NULL) return NULL; sub ->ContextID = ContextID; sub ->h = _cmsCreateSubAllocChunk(ContextID, Initial); if (sub ->h == NULL) { _cmsFree(ContextID, sub); return NULL; } return sub; } // Get rid of whole linked list void _cmsSubAllocDestroy(_cmsSubAllocator* sub) { _cmsSubAllocator_chunk *chunk, *n; for (chunk = sub ->h; chunk != NULL; chunk = n) { n = chunk->next; if (chunk->Block != NULL) _cmsFree(sub ->ContextID, chunk->Block); _cmsFree(sub ->ContextID, chunk); } // Free the header _cmsFree(sub ->ContextID, sub); } // Get a pointer to small memory block. void* _cmsSubAlloc(_cmsSubAllocator* sub, cmsUInt32Number size) { cmsUInt32Number Free = sub -> h ->BlockSize - sub -> h -> Used; cmsUInt8Number* ptr; size = _cmsALIGNMEM(size); // Check for memory. If there is no room, allocate a new chunk of double memory size. if (size > Free) { _cmsSubAllocator_chunk* chunk; cmsUInt32Number newSize; newSize = sub -> h ->BlockSize * 2; if (newSize < size) newSize = size; chunk = _cmsCreateSubAllocChunk(sub -> ContextID, newSize); if (chunk == NULL) return NULL; // Link list chunk ->next = sub ->h; sub ->h = chunk; } ptr = sub -> h ->Block + sub -> h ->Used; sub -> h -> Used += size; return (void*) ptr; } // Duplicate in pool void* _cmsSubAllocDup(_cmsSubAllocator* s, const void *ptr, cmsUInt32Number size) { void *NewPtr; // Dup of null pointer is also NULL if (ptr == NULL) return NULL; NewPtr = _cmsSubAlloc(s, size); if (ptr != NULL && NewPtr != NULL) { memcpy(NewPtr, ptr, size); } return NewPtr; } // Error logging ****************************************************************** // There is no error handling at all. When a function fails, it returns proper value. // For example, all create functions does return NULL on failure. Other return FALSE // It may be interesting, for the developer, to know why the function is failing. // for that reason, lcms2 does offer a logging function. This function does receive // a ENGLISH string with some clues on what is going wrong. You can show this // info to the end user, or just create some sort of log. // The logging function should NOT terminate the program, as this obviously can leave // resources. It is the programmer's responsibility to check each function return code // to make sure it didn't fail. // Error messages are limited to MAX_ERROR_MESSAGE_LEN #define MAX_ERROR_MESSAGE_LEN 1024 // --------------------------------------------------------------------------------------------------------- // This is our default log error static void DefaultLogErrorHandlerFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text); // Context0 storage, which is global _cmsLogErrorChunkType _cmsLogErrorChunk = { DefaultLogErrorHandlerFunction }; // Allocates and inits error logger container for a given context. If src is NULL, only initializes the value // to the default. Otherwise, it duplicates the value. The interface is standard across all context clients void _cmsAllocLogErrorChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { static _cmsLogErrorChunkType LogErrorChunk = { DefaultLogErrorHandlerFunction }; void* from; if (src != NULL) { from = src ->chunks[Logger]; } else { from = &LogErrorChunk; } ctx ->chunks[Logger] = _cmsSubAllocDup(ctx ->MemPool, from, sizeof(_cmsLogErrorChunkType)); } // The default error logger does nothing. static void DefaultLogErrorHandlerFunction(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { // fprintf(stderr, "[lcms]: %s\n", Text); // fflush(stderr); cmsUNUSED_PARAMETER(ContextID); cmsUNUSED_PARAMETER(ErrorCode); cmsUNUSED_PARAMETER(Text); } // Change log error, context based void CMSEXPORT cmsSetLogErrorHandlerTHR(cmsContext ContextID, cmsLogErrorHandlerFunction Fn) { _cmsLogErrorChunkType* lhg = (_cmsLogErrorChunkType*) _cmsContextGetClientChunk(ContextID, Logger); if (lhg != NULL) { if (Fn == NULL) lhg -> LogErrorHandler = DefaultLogErrorHandlerFunction; else lhg -> LogErrorHandler = Fn; } } // Change log error, legacy void CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn) { cmsSetLogErrorHandlerTHR(NULL, Fn); } // Log an error // ErrorText is a text holding an english description of error. void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...) { va_list args; char Buffer[MAX_ERROR_MESSAGE_LEN]; _cmsLogErrorChunkType* lhg; va_start(args, ErrorText); vsnprintf(Buffer, MAX_ERROR_MESSAGE_LEN-1, ErrorText, args); va_end(args); // Check for the context, if specified go there. If not, go for the global lhg = (_cmsLogErrorChunkType*) _cmsContextGetClientChunk(ContextID, Logger); if (lhg ->LogErrorHandler) { lhg ->LogErrorHandler(ContextID, ErrorCode, Buffer); } } // Utility function to print signatures void _cmsTagSignature2String(char String[5], cmsTagSignature sig) { cmsUInt32Number be; // Convert to big endian be = _cmsAdjustEndianess32((cmsUInt32Number) sig); // Move chars memmove(String, &be, 4); // Make sure of terminator String[4] = 0; } //-------------------------------------------------------------------------------------------------- static void* defMtxCreate(cmsContext id) { _cmsMutex* ptr_mutex = (_cmsMutex*) _cmsMalloc(id, sizeof(_cmsMutex)); _cmsInitMutexPrimitive(ptr_mutex); return (void*) ptr_mutex; } static void defMtxDestroy(cmsContext id, void* mtx) { _cmsDestroyMutexPrimitive((_cmsMutex *) mtx); _cmsFree(id, mtx); } static cmsBool defMtxLock(cmsContext id, void* mtx) { cmsUNUSED_PARAMETER(id); return _cmsLockPrimitive((_cmsMutex *) mtx) == 0; } static void defMtxUnlock(cmsContext id, void* mtx) { cmsUNUSED_PARAMETER(id); _cmsUnlockPrimitive((_cmsMutex *) mtx); } // Pointers to memory manager functions in Context0 _cmsMutexPluginChunkType _cmsMutexPluginChunk = { defMtxCreate, defMtxDestroy, defMtxLock, defMtxUnlock }; // Allocate and init mutex container. void _cmsAllocMutexPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { static _cmsMutexPluginChunkType MutexChunk = {defMtxCreate, defMtxDestroy, defMtxLock, defMtxUnlock }; void* from; if (src != NULL) { from = src ->chunks[MutexPlugin]; } else { from = &MutexChunk; } ctx ->chunks[MutexPlugin] = _cmsSubAllocDup(ctx ->MemPool, from, sizeof(_cmsMutexPluginChunkType)); } // Register new ways to transform cmsBool _cmsRegisterMutexPlugin(cmsContext ContextID, cmsPluginBase* Data) { cmsPluginMutex* Plugin = (cmsPluginMutex*) Data; _cmsMutexPluginChunkType* ctx = ( _cmsMutexPluginChunkType*) _cmsContextGetClientChunk(ContextID, MutexPlugin); if (Data == NULL) { // No lock routines ctx->CreateMutexPtr = NULL; ctx->DestroyMutexPtr = NULL; ctx->LockMutexPtr = NULL; ctx ->UnlockMutexPtr = NULL; return TRUE; } // Factory callback is required if (Plugin ->CreateMutexPtr == NULL || Plugin ->DestroyMutexPtr == NULL || Plugin ->LockMutexPtr == NULL || Plugin ->UnlockMutexPtr == NULL) return FALSE; ctx->CreateMutexPtr = Plugin->CreateMutexPtr; ctx->DestroyMutexPtr = Plugin ->DestroyMutexPtr; ctx ->LockMutexPtr = Plugin ->LockMutexPtr; ctx ->UnlockMutexPtr = Plugin ->UnlockMutexPtr; // All is ok return TRUE; } // Generic Mutex fns void* CMSEXPORT _cmsCreateMutex(cmsContext ContextID) { _cmsMutexPluginChunkType* ptr = (_cmsMutexPluginChunkType*) _cmsContextGetClientChunk(ContextID, MutexPlugin); if (ptr ->CreateMutexPtr == NULL) return NULL; return ptr ->CreateMutexPtr(ContextID); } void CMSEXPORT _cmsDestroyMutex(cmsContext ContextID, void* mtx) { _cmsMutexPluginChunkType* ptr = (_cmsMutexPluginChunkType*) _cmsContextGetClientChunk(ContextID, MutexPlugin); if (ptr ->DestroyMutexPtr != NULL) { ptr ->DestroyMutexPtr(ContextID, mtx); } } cmsBool CMSEXPORT _cmsLockMutex(cmsContext ContextID, void* mtx) { _cmsMutexPluginChunkType* ptr = (_cmsMutexPluginChunkType*) _cmsContextGetClientChunk(ContextID, MutexPlugin); if (ptr ->LockMutexPtr == NULL) return TRUE; return ptr ->LockMutexPtr(ContextID, mtx); } void CMSEXPORT _cmsUnlockMutex(cmsContext ContextID, void* mtx) { _cmsMutexPluginChunkType* ptr = (_cmsMutexPluginChunkType*) _cmsContextGetClientChunk(ContextID, MutexPlugin); if (ptr ->UnlockMutexPtr != NULL) { ptr ->UnlockMutexPtr(ContextID, mtx); } } lcms2-2.12rc1/src/cmshalf.c0000644000175000017500000010503213775114656014466 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // // #include "lcms2_internal.h" #ifndef CMS_NO_HALF_SUPPORT // This code is inspired in the paper "Fast Half Float Conversions" // by Jeroen van der Zijp static const cmsUInt32Number Mantissa[2048] = { 0x00000000, 0x33800000, 0x34000000, 0x34400000, 0x34800000, 0x34a00000, 0x34c00000, 0x34e00000, 0x35000000, 0x35100000, 0x35200000, 0x35300000, 0x35400000, 0x35500000, 0x35600000, 0x35700000, 0x35800000, 0x35880000, 0x35900000, 0x35980000, 0x35a00000, 0x35a80000, 0x35b00000, 0x35b80000, 0x35c00000, 0x35c80000, 0x35d00000, 0x35d80000, 0x35e00000, 0x35e80000, 0x35f00000, 0x35f80000, 0x36000000, 0x36040000, 0x36080000, 0x360c0000, 0x36100000, 0x36140000, 0x36180000, 0x361c0000, 0x36200000, 0x36240000, 0x36280000, 0x362c0000, 0x36300000, 0x36340000, 0x36380000, 0x363c0000, 0x36400000, 0x36440000, 0x36480000, 0x364c0000, 0x36500000, 0x36540000, 0x36580000, 0x365c0000, 0x36600000, 0x36640000, 0x36680000, 0x366c0000, 0x36700000, 0x36740000, 0x36780000, 0x367c0000, 0x36800000, 0x36820000, 0x36840000, 0x36860000, 0x36880000, 0x368a0000, 0x368c0000, 0x368e0000, 0x36900000, 0x36920000, 0x36940000, 0x36960000, 0x36980000, 0x369a0000, 0x369c0000, 0x369e0000, 0x36a00000, 0x36a20000, 0x36a40000, 0x36a60000, 0x36a80000, 0x36aa0000, 0x36ac0000, 0x36ae0000, 0x36b00000, 0x36b20000, 0x36b40000, 0x36b60000, 0x36b80000, 0x36ba0000, 0x36bc0000, 0x36be0000, 0x36c00000, 0x36c20000, 0x36c40000, 0x36c60000, 0x36c80000, 0x36ca0000, 0x36cc0000, 0x36ce0000, 0x36d00000, 0x36d20000, 0x36d40000, 0x36d60000, 0x36d80000, 0x36da0000, 0x36dc0000, 0x36de0000, 0x36e00000, 0x36e20000, 0x36e40000, 0x36e60000, 0x36e80000, 0x36ea0000, 0x36ec0000, 0x36ee0000, 0x36f00000, 0x36f20000, 0x36f40000, 0x36f60000, 0x36f80000, 0x36fa0000, 0x36fc0000, 0x36fe0000, 0x37000000, 0x37010000, 0x37020000, 0x37030000, 0x37040000, 0x37050000, 0x37060000, 0x37070000, 0x37080000, 0x37090000, 0x370a0000, 0x370b0000, 0x370c0000, 0x370d0000, 0x370e0000, 0x370f0000, 0x37100000, 0x37110000, 0x37120000, 0x37130000, 0x37140000, 0x37150000, 0x37160000, 0x37170000, 0x37180000, 0x37190000, 0x371a0000, 0x371b0000, 0x371c0000, 0x371d0000, 0x371e0000, 0x371f0000, 0x37200000, 0x37210000, 0x37220000, 0x37230000, 0x37240000, 0x37250000, 0x37260000, 0x37270000, 0x37280000, 0x37290000, 0x372a0000, 0x372b0000, 0x372c0000, 0x372d0000, 0x372e0000, 0x372f0000, 0x37300000, 0x37310000, 0x37320000, 0x37330000, 0x37340000, 0x37350000, 0x37360000, 0x37370000, 0x37380000, 0x37390000, 0x373a0000, 0x373b0000, 0x373c0000, 0x373d0000, 0x373e0000, 0x373f0000, 0x37400000, 0x37410000, 0x37420000, 0x37430000, 0x37440000, 0x37450000, 0x37460000, 0x37470000, 0x37480000, 0x37490000, 0x374a0000, 0x374b0000, 0x374c0000, 0x374d0000, 0x374e0000, 0x374f0000, 0x37500000, 0x37510000, 0x37520000, 0x37530000, 0x37540000, 0x37550000, 0x37560000, 0x37570000, 0x37580000, 0x37590000, 0x375a0000, 0x375b0000, 0x375c0000, 0x375d0000, 0x375e0000, 0x375f0000, 0x37600000, 0x37610000, 0x37620000, 0x37630000, 0x37640000, 0x37650000, 0x37660000, 0x37670000, 0x37680000, 0x37690000, 0x376a0000, 0x376b0000, 0x376c0000, 0x376d0000, 0x376e0000, 0x376f0000, 0x37700000, 0x37710000, 0x37720000, 0x37730000, 0x37740000, 0x37750000, 0x37760000, 0x37770000, 0x37780000, 0x37790000, 0x377a0000, 0x377b0000, 0x377c0000, 0x377d0000, 0x377e0000, 0x377f0000, 0x37800000, 0x37808000, 0x37810000, 0x37818000, 0x37820000, 0x37828000, 0x37830000, 0x37838000, 0x37840000, 0x37848000, 0x37850000, 0x37858000, 0x37860000, 0x37868000, 0x37870000, 0x37878000, 0x37880000, 0x37888000, 0x37890000, 0x37898000, 0x378a0000, 0x378a8000, 0x378b0000, 0x378b8000, 0x378c0000, 0x378c8000, 0x378d0000, 0x378d8000, 0x378e0000, 0x378e8000, 0x378f0000, 0x378f8000, 0x37900000, 0x37908000, 0x37910000, 0x37918000, 0x37920000, 0x37928000, 0x37930000, 0x37938000, 0x37940000, 0x37948000, 0x37950000, 0x37958000, 0x37960000, 0x37968000, 0x37970000, 0x37978000, 0x37980000, 0x37988000, 0x37990000, 0x37998000, 0x379a0000, 0x379a8000, 0x379b0000, 0x379b8000, 0x379c0000, 0x379c8000, 0x379d0000, 0x379d8000, 0x379e0000, 0x379e8000, 0x379f0000, 0x379f8000, 0x37a00000, 0x37a08000, 0x37a10000, 0x37a18000, 0x37a20000, 0x37a28000, 0x37a30000, 0x37a38000, 0x37a40000, 0x37a48000, 0x37a50000, 0x37a58000, 0x37a60000, 0x37a68000, 0x37a70000, 0x37a78000, 0x37a80000, 0x37a88000, 0x37a90000, 0x37a98000, 0x37aa0000, 0x37aa8000, 0x37ab0000, 0x37ab8000, 0x37ac0000, 0x37ac8000, 0x37ad0000, 0x37ad8000, 0x37ae0000, 0x37ae8000, 0x37af0000, 0x37af8000, 0x37b00000, 0x37b08000, 0x37b10000, 0x37b18000, 0x37b20000, 0x37b28000, 0x37b30000, 0x37b38000, 0x37b40000, 0x37b48000, 0x37b50000, 0x37b58000, 0x37b60000, 0x37b68000, 0x37b70000, 0x37b78000, 0x37b80000, 0x37b88000, 0x37b90000, 0x37b98000, 0x37ba0000, 0x37ba8000, 0x37bb0000, 0x37bb8000, 0x37bc0000, 0x37bc8000, 0x37bd0000, 0x37bd8000, 0x37be0000, 0x37be8000, 0x37bf0000, 0x37bf8000, 0x37c00000, 0x37c08000, 0x37c10000, 0x37c18000, 0x37c20000, 0x37c28000, 0x37c30000, 0x37c38000, 0x37c40000, 0x37c48000, 0x37c50000, 0x37c58000, 0x37c60000, 0x37c68000, 0x37c70000, 0x37c78000, 0x37c80000, 0x37c88000, 0x37c90000, 0x37c98000, 0x37ca0000, 0x37ca8000, 0x37cb0000, 0x37cb8000, 0x37cc0000, 0x37cc8000, 0x37cd0000, 0x37cd8000, 0x37ce0000, 0x37ce8000, 0x37cf0000, 0x37cf8000, 0x37d00000, 0x37d08000, 0x37d10000, 0x37d18000, 0x37d20000, 0x37d28000, 0x37d30000, 0x37d38000, 0x37d40000, 0x37d48000, 0x37d50000, 0x37d58000, 0x37d60000, 0x37d68000, 0x37d70000, 0x37d78000, 0x37d80000, 0x37d88000, 0x37d90000, 0x37d98000, 0x37da0000, 0x37da8000, 0x37db0000, 0x37db8000, 0x37dc0000, 0x37dc8000, 0x37dd0000, 0x37dd8000, 0x37de0000, 0x37de8000, 0x37df0000, 0x37df8000, 0x37e00000, 0x37e08000, 0x37e10000, 0x37e18000, 0x37e20000, 0x37e28000, 0x37e30000, 0x37e38000, 0x37e40000, 0x37e48000, 0x37e50000, 0x37e58000, 0x37e60000, 0x37e68000, 0x37e70000, 0x37e78000, 0x37e80000, 0x37e88000, 0x37e90000, 0x37e98000, 0x37ea0000, 0x37ea8000, 0x37eb0000, 0x37eb8000, 0x37ec0000, 0x37ec8000, 0x37ed0000, 0x37ed8000, 0x37ee0000, 0x37ee8000, 0x37ef0000, 0x37ef8000, 0x37f00000, 0x37f08000, 0x37f10000, 0x37f18000, 0x37f20000, 0x37f28000, 0x37f30000, 0x37f38000, 0x37f40000, 0x37f48000, 0x37f50000, 0x37f58000, 0x37f60000, 0x37f68000, 0x37f70000, 0x37f78000, 0x37f80000, 0x37f88000, 0x37f90000, 0x37f98000, 0x37fa0000, 0x37fa8000, 0x37fb0000, 0x37fb8000, 0x37fc0000, 0x37fc8000, 0x37fd0000, 0x37fd8000, 0x37fe0000, 0x37fe8000, 0x37ff0000, 0x37ff8000, 0x38000000, 0x38004000, 0x38008000, 0x3800c000, 0x38010000, 0x38014000, 0x38018000, 0x3801c000, 0x38020000, 0x38024000, 0x38028000, 0x3802c000, 0x38030000, 0x38034000, 0x38038000, 0x3803c000, 0x38040000, 0x38044000, 0x38048000, 0x3804c000, 0x38050000, 0x38054000, 0x38058000, 0x3805c000, 0x38060000, 0x38064000, 0x38068000, 0x3806c000, 0x38070000, 0x38074000, 0x38078000, 0x3807c000, 0x38080000, 0x38084000, 0x38088000, 0x3808c000, 0x38090000, 0x38094000, 0x38098000, 0x3809c000, 0x380a0000, 0x380a4000, 0x380a8000, 0x380ac000, 0x380b0000, 0x380b4000, 0x380b8000, 0x380bc000, 0x380c0000, 0x380c4000, 0x380c8000, 0x380cc000, 0x380d0000, 0x380d4000, 0x380d8000, 0x380dc000, 0x380e0000, 0x380e4000, 0x380e8000, 0x380ec000, 0x380f0000, 0x380f4000, 0x380f8000, 0x380fc000, 0x38100000, 0x38104000, 0x38108000, 0x3810c000, 0x38110000, 0x38114000, 0x38118000, 0x3811c000, 0x38120000, 0x38124000, 0x38128000, 0x3812c000, 0x38130000, 0x38134000, 0x38138000, 0x3813c000, 0x38140000, 0x38144000, 0x38148000, 0x3814c000, 0x38150000, 0x38154000, 0x38158000, 0x3815c000, 0x38160000, 0x38164000, 0x38168000, 0x3816c000, 0x38170000, 0x38174000, 0x38178000, 0x3817c000, 0x38180000, 0x38184000, 0x38188000, 0x3818c000, 0x38190000, 0x38194000, 0x38198000, 0x3819c000, 0x381a0000, 0x381a4000, 0x381a8000, 0x381ac000, 0x381b0000, 0x381b4000, 0x381b8000, 0x381bc000, 0x381c0000, 0x381c4000, 0x381c8000, 0x381cc000, 0x381d0000, 0x381d4000, 0x381d8000, 0x381dc000, 0x381e0000, 0x381e4000, 0x381e8000, 0x381ec000, 0x381f0000, 0x381f4000, 0x381f8000, 0x381fc000, 0x38200000, 0x38204000, 0x38208000, 0x3820c000, 0x38210000, 0x38214000, 0x38218000, 0x3821c000, 0x38220000, 0x38224000, 0x38228000, 0x3822c000, 0x38230000, 0x38234000, 0x38238000, 0x3823c000, 0x38240000, 0x38244000, 0x38248000, 0x3824c000, 0x38250000, 0x38254000, 0x38258000, 0x3825c000, 0x38260000, 0x38264000, 0x38268000, 0x3826c000, 0x38270000, 0x38274000, 0x38278000, 0x3827c000, 0x38280000, 0x38284000, 0x38288000, 0x3828c000, 0x38290000, 0x38294000, 0x38298000, 0x3829c000, 0x382a0000, 0x382a4000, 0x382a8000, 0x382ac000, 0x382b0000, 0x382b4000, 0x382b8000, 0x382bc000, 0x382c0000, 0x382c4000, 0x382c8000, 0x382cc000, 0x382d0000, 0x382d4000, 0x382d8000, 0x382dc000, 0x382e0000, 0x382e4000, 0x382e8000, 0x382ec000, 0x382f0000, 0x382f4000, 0x382f8000, 0x382fc000, 0x38300000, 0x38304000, 0x38308000, 0x3830c000, 0x38310000, 0x38314000, 0x38318000, 0x3831c000, 0x38320000, 0x38324000, 0x38328000, 0x3832c000, 0x38330000, 0x38334000, 0x38338000, 0x3833c000, 0x38340000, 0x38344000, 0x38348000, 0x3834c000, 0x38350000, 0x38354000, 0x38358000, 0x3835c000, 0x38360000, 0x38364000, 0x38368000, 0x3836c000, 0x38370000, 0x38374000, 0x38378000, 0x3837c000, 0x38380000, 0x38384000, 0x38388000, 0x3838c000, 0x38390000, 0x38394000, 0x38398000, 0x3839c000, 0x383a0000, 0x383a4000, 0x383a8000, 0x383ac000, 0x383b0000, 0x383b4000, 0x383b8000, 0x383bc000, 0x383c0000, 0x383c4000, 0x383c8000, 0x383cc000, 0x383d0000, 0x383d4000, 0x383d8000, 0x383dc000, 0x383e0000, 0x383e4000, 0x383e8000, 0x383ec000, 0x383f0000, 0x383f4000, 0x383f8000, 0x383fc000, 0x38400000, 0x38404000, 0x38408000, 0x3840c000, 0x38410000, 0x38414000, 0x38418000, 0x3841c000, 0x38420000, 0x38424000, 0x38428000, 0x3842c000, 0x38430000, 0x38434000, 0x38438000, 0x3843c000, 0x38440000, 0x38444000, 0x38448000, 0x3844c000, 0x38450000, 0x38454000, 0x38458000, 0x3845c000, 0x38460000, 0x38464000, 0x38468000, 0x3846c000, 0x38470000, 0x38474000, 0x38478000, 0x3847c000, 0x38480000, 0x38484000, 0x38488000, 0x3848c000, 0x38490000, 0x38494000, 0x38498000, 0x3849c000, 0x384a0000, 0x384a4000, 0x384a8000, 0x384ac000, 0x384b0000, 0x384b4000, 0x384b8000, 0x384bc000, 0x384c0000, 0x384c4000, 0x384c8000, 0x384cc000, 0x384d0000, 0x384d4000, 0x384d8000, 0x384dc000, 0x384e0000, 0x384e4000, 0x384e8000, 0x384ec000, 0x384f0000, 0x384f4000, 0x384f8000, 0x384fc000, 0x38500000, 0x38504000, 0x38508000, 0x3850c000, 0x38510000, 0x38514000, 0x38518000, 0x3851c000, 0x38520000, 0x38524000, 0x38528000, 0x3852c000, 0x38530000, 0x38534000, 0x38538000, 0x3853c000, 0x38540000, 0x38544000, 0x38548000, 0x3854c000, 0x38550000, 0x38554000, 0x38558000, 0x3855c000, 0x38560000, 0x38564000, 0x38568000, 0x3856c000, 0x38570000, 0x38574000, 0x38578000, 0x3857c000, 0x38580000, 0x38584000, 0x38588000, 0x3858c000, 0x38590000, 0x38594000, 0x38598000, 0x3859c000, 0x385a0000, 0x385a4000, 0x385a8000, 0x385ac000, 0x385b0000, 0x385b4000, 0x385b8000, 0x385bc000, 0x385c0000, 0x385c4000, 0x385c8000, 0x385cc000, 0x385d0000, 0x385d4000, 0x385d8000, 0x385dc000, 0x385e0000, 0x385e4000, 0x385e8000, 0x385ec000, 0x385f0000, 0x385f4000, 0x385f8000, 0x385fc000, 0x38600000, 0x38604000, 0x38608000, 0x3860c000, 0x38610000, 0x38614000, 0x38618000, 0x3861c000, 0x38620000, 0x38624000, 0x38628000, 0x3862c000, 0x38630000, 0x38634000, 0x38638000, 0x3863c000, 0x38640000, 0x38644000, 0x38648000, 0x3864c000, 0x38650000, 0x38654000, 0x38658000, 0x3865c000, 0x38660000, 0x38664000, 0x38668000, 0x3866c000, 0x38670000, 0x38674000, 0x38678000, 0x3867c000, 0x38680000, 0x38684000, 0x38688000, 0x3868c000, 0x38690000, 0x38694000, 0x38698000, 0x3869c000, 0x386a0000, 0x386a4000, 0x386a8000, 0x386ac000, 0x386b0000, 0x386b4000, 0x386b8000, 0x386bc000, 0x386c0000, 0x386c4000, 0x386c8000, 0x386cc000, 0x386d0000, 0x386d4000, 0x386d8000, 0x386dc000, 0x386e0000, 0x386e4000, 0x386e8000, 0x386ec000, 0x386f0000, 0x386f4000, 0x386f8000, 0x386fc000, 0x38700000, 0x38704000, 0x38708000, 0x3870c000, 0x38710000, 0x38714000, 0x38718000, 0x3871c000, 0x38720000, 0x38724000, 0x38728000, 0x3872c000, 0x38730000, 0x38734000, 0x38738000, 0x3873c000, 0x38740000, 0x38744000, 0x38748000, 0x3874c000, 0x38750000, 0x38754000, 0x38758000, 0x3875c000, 0x38760000, 0x38764000, 0x38768000, 0x3876c000, 0x38770000, 0x38774000, 0x38778000, 0x3877c000, 0x38780000, 0x38784000, 0x38788000, 0x3878c000, 0x38790000, 0x38794000, 0x38798000, 0x3879c000, 0x387a0000, 0x387a4000, 0x387a8000, 0x387ac000, 0x387b0000, 0x387b4000, 0x387b8000, 0x387bc000, 0x387c0000, 0x387c4000, 0x387c8000, 0x387cc000, 0x387d0000, 0x387d4000, 0x387d8000, 0x387dc000, 0x387e0000, 0x387e4000, 0x387e8000, 0x387ec000, 0x387f0000, 0x387f4000, 0x387f8000, 0x387fc000, 0x38000000, 0x38002000, 0x38004000, 0x38006000, 0x38008000, 0x3800a000, 0x3800c000, 0x3800e000, 0x38010000, 0x38012000, 0x38014000, 0x38016000, 0x38018000, 0x3801a000, 0x3801c000, 0x3801e000, 0x38020000, 0x38022000, 0x38024000, 0x38026000, 0x38028000, 0x3802a000, 0x3802c000, 0x3802e000, 0x38030000, 0x38032000, 0x38034000, 0x38036000, 0x38038000, 0x3803a000, 0x3803c000, 0x3803e000, 0x38040000, 0x38042000, 0x38044000, 0x38046000, 0x38048000, 0x3804a000, 0x3804c000, 0x3804e000, 0x38050000, 0x38052000, 0x38054000, 0x38056000, 0x38058000, 0x3805a000, 0x3805c000, 0x3805e000, 0x38060000, 0x38062000, 0x38064000, 0x38066000, 0x38068000, 0x3806a000, 0x3806c000, 0x3806e000, 0x38070000, 0x38072000, 0x38074000, 0x38076000, 0x38078000, 0x3807a000, 0x3807c000, 0x3807e000, 0x38080000, 0x38082000, 0x38084000, 0x38086000, 0x38088000, 0x3808a000, 0x3808c000, 0x3808e000, 0x38090000, 0x38092000, 0x38094000, 0x38096000, 0x38098000, 0x3809a000, 0x3809c000, 0x3809e000, 0x380a0000, 0x380a2000, 0x380a4000, 0x380a6000, 0x380a8000, 0x380aa000, 0x380ac000, 0x380ae000, 0x380b0000, 0x380b2000, 0x380b4000, 0x380b6000, 0x380b8000, 0x380ba000, 0x380bc000, 0x380be000, 0x380c0000, 0x380c2000, 0x380c4000, 0x380c6000, 0x380c8000, 0x380ca000, 0x380cc000, 0x380ce000, 0x380d0000, 0x380d2000, 0x380d4000, 0x380d6000, 0x380d8000, 0x380da000, 0x380dc000, 0x380de000, 0x380e0000, 0x380e2000, 0x380e4000, 0x380e6000, 0x380e8000, 0x380ea000, 0x380ec000, 0x380ee000, 0x380f0000, 0x380f2000, 0x380f4000, 0x380f6000, 0x380f8000, 0x380fa000, 0x380fc000, 0x380fe000, 0x38100000, 0x38102000, 0x38104000, 0x38106000, 0x38108000, 0x3810a000, 0x3810c000, 0x3810e000, 0x38110000, 0x38112000, 0x38114000, 0x38116000, 0x38118000, 0x3811a000, 0x3811c000, 0x3811e000, 0x38120000, 0x38122000, 0x38124000, 0x38126000, 0x38128000, 0x3812a000, 0x3812c000, 0x3812e000, 0x38130000, 0x38132000, 0x38134000, 0x38136000, 0x38138000, 0x3813a000, 0x3813c000, 0x3813e000, 0x38140000, 0x38142000, 0x38144000, 0x38146000, 0x38148000, 0x3814a000, 0x3814c000, 0x3814e000, 0x38150000, 0x38152000, 0x38154000, 0x38156000, 0x38158000, 0x3815a000, 0x3815c000, 0x3815e000, 0x38160000, 0x38162000, 0x38164000, 0x38166000, 0x38168000, 0x3816a000, 0x3816c000, 0x3816e000, 0x38170000, 0x38172000, 0x38174000, 0x38176000, 0x38178000, 0x3817a000, 0x3817c000, 0x3817e000, 0x38180000, 0x38182000, 0x38184000, 0x38186000, 0x38188000, 0x3818a000, 0x3818c000, 0x3818e000, 0x38190000, 0x38192000, 0x38194000, 0x38196000, 0x38198000, 0x3819a000, 0x3819c000, 0x3819e000, 0x381a0000, 0x381a2000, 0x381a4000, 0x381a6000, 0x381a8000, 0x381aa000, 0x381ac000, 0x381ae000, 0x381b0000, 0x381b2000, 0x381b4000, 0x381b6000, 0x381b8000, 0x381ba000, 0x381bc000, 0x381be000, 0x381c0000, 0x381c2000, 0x381c4000, 0x381c6000, 0x381c8000, 0x381ca000, 0x381cc000, 0x381ce000, 0x381d0000, 0x381d2000, 0x381d4000, 0x381d6000, 0x381d8000, 0x381da000, 0x381dc000, 0x381de000, 0x381e0000, 0x381e2000, 0x381e4000, 0x381e6000, 0x381e8000, 0x381ea000, 0x381ec000, 0x381ee000, 0x381f0000, 0x381f2000, 0x381f4000, 0x381f6000, 0x381f8000, 0x381fa000, 0x381fc000, 0x381fe000, 0x38200000, 0x38202000, 0x38204000, 0x38206000, 0x38208000, 0x3820a000, 0x3820c000, 0x3820e000, 0x38210000, 0x38212000, 0x38214000, 0x38216000, 0x38218000, 0x3821a000, 0x3821c000, 0x3821e000, 0x38220000, 0x38222000, 0x38224000, 0x38226000, 0x38228000, 0x3822a000, 0x3822c000, 0x3822e000, 0x38230000, 0x38232000, 0x38234000, 0x38236000, 0x38238000, 0x3823a000, 0x3823c000, 0x3823e000, 0x38240000, 0x38242000, 0x38244000, 0x38246000, 0x38248000, 0x3824a000, 0x3824c000, 0x3824e000, 0x38250000, 0x38252000, 0x38254000, 0x38256000, 0x38258000, 0x3825a000, 0x3825c000, 0x3825e000, 0x38260000, 0x38262000, 0x38264000, 0x38266000, 0x38268000, 0x3826a000, 0x3826c000, 0x3826e000, 0x38270000, 0x38272000, 0x38274000, 0x38276000, 0x38278000, 0x3827a000, 0x3827c000, 0x3827e000, 0x38280000, 0x38282000, 0x38284000, 0x38286000, 0x38288000, 0x3828a000, 0x3828c000, 0x3828e000, 0x38290000, 0x38292000, 0x38294000, 0x38296000, 0x38298000, 0x3829a000, 0x3829c000, 0x3829e000, 0x382a0000, 0x382a2000, 0x382a4000, 0x382a6000, 0x382a8000, 0x382aa000, 0x382ac000, 0x382ae000, 0x382b0000, 0x382b2000, 0x382b4000, 0x382b6000, 0x382b8000, 0x382ba000, 0x382bc000, 0x382be000, 0x382c0000, 0x382c2000, 0x382c4000, 0x382c6000, 0x382c8000, 0x382ca000, 0x382cc000, 0x382ce000, 0x382d0000, 0x382d2000, 0x382d4000, 0x382d6000, 0x382d8000, 0x382da000, 0x382dc000, 0x382de000, 0x382e0000, 0x382e2000, 0x382e4000, 0x382e6000, 0x382e8000, 0x382ea000, 0x382ec000, 0x382ee000, 0x382f0000, 0x382f2000, 0x382f4000, 0x382f6000, 0x382f8000, 0x382fa000, 0x382fc000, 0x382fe000, 0x38300000, 0x38302000, 0x38304000, 0x38306000, 0x38308000, 0x3830a000, 0x3830c000, 0x3830e000, 0x38310000, 0x38312000, 0x38314000, 0x38316000, 0x38318000, 0x3831a000, 0x3831c000, 0x3831e000, 0x38320000, 0x38322000, 0x38324000, 0x38326000, 0x38328000, 0x3832a000, 0x3832c000, 0x3832e000, 0x38330000, 0x38332000, 0x38334000, 0x38336000, 0x38338000, 0x3833a000, 0x3833c000, 0x3833e000, 0x38340000, 0x38342000, 0x38344000, 0x38346000, 0x38348000, 0x3834a000, 0x3834c000, 0x3834e000, 0x38350000, 0x38352000, 0x38354000, 0x38356000, 0x38358000, 0x3835a000, 0x3835c000, 0x3835e000, 0x38360000, 0x38362000, 0x38364000, 0x38366000, 0x38368000, 0x3836a000, 0x3836c000, 0x3836e000, 0x38370000, 0x38372000, 0x38374000, 0x38376000, 0x38378000, 0x3837a000, 0x3837c000, 0x3837e000, 0x38380000, 0x38382000, 0x38384000, 0x38386000, 0x38388000, 0x3838a000, 0x3838c000, 0x3838e000, 0x38390000, 0x38392000, 0x38394000, 0x38396000, 0x38398000, 0x3839a000, 0x3839c000, 0x3839e000, 0x383a0000, 0x383a2000, 0x383a4000, 0x383a6000, 0x383a8000, 0x383aa000, 0x383ac000, 0x383ae000, 0x383b0000, 0x383b2000, 0x383b4000, 0x383b6000, 0x383b8000, 0x383ba000, 0x383bc000, 0x383be000, 0x383c0000, 0x383c2000, 0x383c4000, 0x383c6000, 0x383c8000, 0x383ca000, 0x383cc000, 0x383ce000, 0x383d0000, 0x383d2000, 0x383d4000, 0x383d6000, 0x383d8000, 0x383da000, 0x383dc000, 0x383de000, 0x383e0000, 0x383e2000, 0x383e4000, 0x383e6000, 0x383e8000, 0x383ea000, 0x383ec000, 0x383ee000, 0x383f0000, 0x383f2000, 0x383f4000, 0x383f6000, 0x383f8000, 0x383fa000, 0x383fc000, 0x383fe000, 0x38400000, 0x38402000, 0x38404000, 0x38406000, 0x38408000, 0x3840a000, 0x3840c000, 0x3840e000, 0x38410000, 0x38412000, 0x38414000, 0x38416000, 0x38418000, 0x3841a000, 0x3841c000, 0x3841e000, 0x38420000, 0x38422000, 0x38424000, 0x38426000, 0x38428000, 0x3842a000, 0x3842c000, 0x3842e000, 0x38430000, 0x38432000, 0x38434000, 0x38436000, 0x38438000, 0x3843a000, 0x3843c000, 0x3843e000, 0x38440000, 0x38442000, 0x38444000, 0x38446000, 0x38448000, 0x3844a000, 0x3844c000, 0x3844e000, 0x38450000, 0x38452000, 0x38454000, 0x38456000, 0x38458000, 0x3845a000, 0x3845c000, 0x3845e000, 0x38460000, 0x38462000, 0x38464000, 0x38466000, 0x38468000, 0x3846a000, 0x3846c000, 0x3846e000, 0x38470000, 0x38472000, 0x38474000, 0x38476000, 0x38478000, 0x3847a000, 0x3847c000, 0x3847e000, 0x38480000, 0x38482000, 0x38484000, 0x38486000, 0x38488000, 0x3848a000, 0x3848c000, 0x3848e000, 0x38490000, 0x38492000, 0x38494000, 0x38496000, 0x38498000, 0x3849a000, 0x3849c000, 0x3849e000, 0x384a0000, 0x384a2000, 0x384a4000, 0x384a6000, 0x384a8000, 0x384aa000, 0x384ac000, 0x384ae000, 0x384b0000, 0x384b2000, 0x384b4000, 0x384b6000, 0x384b8000, 0x384ba000, 0x384bc000, 0x384be000, 0x384c0000, 0x384c2000, 0x384c4000, 0x384c6000, 0x384c8000, 0x384ca000, 0x384cc000, 0x384ce000, 0x384d0000, 0x384d2000, 0x384d4000, 0x384d6000, 0x384d8000, 0x384da000, 0x384dc000, 0x384de000, 0x384e0000, 0x384e2000, 0x384e4000, 0x384e6000, 0x384e8000, 0x384ea000, 0x384ec000, 0x384ee000, 0x384f0000, 0x384f2000, 0x384f4000, 0x384f6000, 0x384f8000, 0x384fa000, 0x384fc000, 0x384fe000, 0x38500000, 0x38502000, 0x38504000, 0x38506000, 0x38508000, 0x3850a000, 0x3850c000, 0x3850e000, 0x38510000, 0x38512000, 0x38514000, 0x38516000, 0x38518000, 0x3851a000, 0x3851c000, 0x3851e000, 0x38520000, 0x38522000, 0x38524000, 0x38526000, 0x38528000, 0x3852a000, 0x3852c000, 0x3852e000, 0x38530000, 0x38532000, 0x38534000, 0x38536000, 0x38538000, 0x3853a000, 0x3853c000, 0x3853e000, 0x38540000, 0x38542000, 0x38544000, 0x38546000, 0x38548000, 0x3854a000, 0x3854c000, 0x3854e000, 0x38550000, 0x38552000, 0x38554000, 0x38556000, 0x38558000, 0x3855a000, 0x3855c000, 0x3855e000, 0x38560000, 0x38562000, 0x38564000, 0x38566000, 0x38568000, 0x3856a000, 0x3856c000, 0x3856e000, 0x38570000, 0x38572000, 0x38574000, 0x38576000, 0x38578000, 0x3857a000, 0x3857c000, 0x3857e000, 0x38580000, 0x38582000, 0x38584000, 0x38586000, 0x38588000, 0x3858a000, 0x3858c000, 0x3858e000, 0x38590000, 0x38592000, 0x38594000, 0x38596000, 0x38598000, 0x3859a000, 0x3859c000, 0x3859e000, 0x385a0000, 0x385a2000, 0x385a4000, 0x385a6000, 0x385a8000, 0x385aa000, 0x385ac000, 0x385ae000, 0x385b0000, 0x385b2000, 0x385b4000, 0x385b6000, 0x385b8000, 0x385ba000, 0x385bc000, 0x385be000, 0x385c0000, 0x385c2000, 0x385c4000, 0x385c6000, 0x385c8000, 0x385ca000, 0x385cc000, 0x385ce000, 0x385d0000, 0x385d2000, 0x385d4000, 0x385d6000, 0x385d8000, 0x385da000, 0x385dc000, 0x385de000, 0x385e0000, 0x385e2000, 0x385e4000, 0x385e6000, 0x385e8000, 0x385ea000, 0x385ec000, 0x385ee000, 0x385f0000, 0x385f2000, 0x385f4000, 0x385f6000, 0x385f8000, 0x385fa000, 0x385fc000, 0x385fe000, 0x38600000, 0x38602000, 0x38604000, 0x38606000, 0x38608000, 0x3860a000, 0x3860c000, 0x3860e000, 0x38610000, 0x38612000, 0x38614000, 0x38616000, 0x38618000, 0x3861a000, 0x3861c000, 0x3861e000, 0x38620000, 0x38622000, 0x38624000, 0x38626000, 0x38628000, 0x3862a000, 0x3862c000, 0x3862e000, 0x38630000, 0x38632000, 0x38634000, 0x38636000, 0x38638000, 0x3863a000, 0x3863c000, 0x3863e000, 0x38640000, 0x38642000, 0x38644000, 0x38646000, 0x38648000, 0x3864a000, 0x3864c000, 0x3864e000, 0x38650000, 0x38652000, 0x38654000, 0x38656000, 0x38658000, 0x3865a000, 0x3865c000, 0x3865e000, 0x38660000, 0x38662000, 0x38664000, 0x38666000, 0x38668000, 0x3866a000, 0x3866c000, 0x3866e000, 0x38670000, 0x38672000, 0x38674000, 0x38676000, 0x38678000, 0x3867a000, 0x3867c000, 0x3867e000, 0x38680000, 0x38682000, 0x38684000, 0x38686000, 0x38688000, 0x3868a000, 0x3868c000, 0x3868e000, 0x38690000, 0x38692000, 0x38694000, 0x38696000, 0x38698000, 0x3869a000, 0x3869c000, 0x3869e000, 0x386a0000, 0x386a2000, 0x386a4000, 0x386a6000, 0x386a8000, 0x386aa000, 0x386ac000, 0x386ae000, 0x386b0000, 0x386b2000, 0x386b4000, 0x386b6000, 0x386b8000, 0x386ba000, 0x386bc000, 0x386be000, 0x386c0000, 0x386c2000, 0x386c4000, 0x386c6000, 0x386c8000, 0x386ca000, 0x386cc000, 0x386ce000, 0x386d0000, 0x386d2000, 0x386d4000, 0x386d6000, 0x386d8000, 0x386da000, 0x386dc000, 0x386de000, 0x386e0000, 0x386e2000, 0x386e4000, 0x386e6000, 0x386e8000, 0x386ea000, 0x386ec000, 0x386ee000, 0x386f0000, 0x386f2000, 0x386f4000, 0x386f6000, 0x386f8000, 0x386fa000, 0x386fc000, 0x386fe000, 0x38700000, 0x38702000, 0x38704000, 0x38706000, 0x38708000, 0x3870a000, 0x3870c000, 0x3870e000, 0x38710000, 0x38712000, 0x38714000, 0x38716000, 0x38718000, 0x3871a000, 0x3871c000, 0x3871e000, 0x38720000, 0x38722000, 0x38724000, 0x38726000, 0x38728000, 0x3872a000, 0x3872c000, 0x3872e000, 0x38730000, 0x38732000, 0x38734000, 0x38736000, 0x38738000, 0x3873a000, 0x3873c000, 0x3873e000, 0x38740000, 0x38742000, 0x38744000, 0x38746000, 0x38748000, 0x3874a000, 0x3874c000, 0x3874e000, 0x38750000, 0x38752000, 0x38754000, 0x38756000, 0x38758000, 0x3875a000, 0x3875c000, 0x3875e000, 0x38760000, 0x38762000, 0x38764000, 0x38766000, 0x38768000, 0x3876a000, 0x3876c000, 0x3876e000, 0x38770000, 0x38772000, 0x38774000, 0x38776000, 0x38778000, 0x3877a000, 0x3877c000, 0x3877e000, 0x38780000, 0x38782000, 0x38784000, 0x38786000, 0x38788000, 0x3878a000, 0x3878c000, 0x3878e000, 0x38790000, 0x38792000, 0x38794000, 0x38796000, 0x38798000, 0x3879a000, 0x3879c000, 0x3879e000, 0x387a0000, 0x387a2000, 0x387a4000, 0x387a6000, 0x387a8000, 0x387aa000, 0x387ac000, 0x387ae000, 0x387b0000, 0x387b2000, 0x387b4000, 0x387b6000, 0x387b8000, 0x387ba000, 0x387bc000, 0x387be000, 0x387c0000, 0x387c2000, 0x387c4000, 0x387c6000, 0x387c8000, 0x387ca000, 0x387cc000, 0x387ce000, 0x387d0000, 0x387d2000, 0x387d4000, 0x387d6000, 0x387d8000, 0x387da000, 0x387dc000, 0x387de000, 0x387e0000, 0x387e2000, 0x387e4000, 0x387e6000, 0x387e8000, 0x387ea000, 0x387ec000, 0x387ee000, 0x387f0000, 0x387f2000, 0x387f4000, 0x387f6000, 0x387f8000, 0x387fa000, 0x387fc000, 0x387fe000 }; static cmsUInt16Number Offset[64] = { 0x0000, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0000, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400 }; static const cmsUInt32Number Exponent[64] = { 0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000, 0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000, 0x06000000, 0x06800000, 0x07000000, 0x07800000, 0x08000000, 0x08800000, 0x09000000, 0x09800000, 0x0a000000, 0x0a800000, 0x0b000000, 0x0b800000, 0x0c000000, 0x0c800000, 0x0d000000, 0x0d800000, 0x0e000000, 0x0e800000, 0x0f000000, 0x47800000, 0x80000000, 0x80800000, 0x81000000, 0x81800000, 0x82000000, 0x82800000, 0x83000000, 0x83800000, 0x84000000, 0x84800000, 0x85000000, 0x85800000, 0x86000000, 0x86800000, 0x87000000, 0x87800000, 0x88000000, 0x88800000, 0x89000000, 0x89800000, 0x8a000000, 0x8a800000, 0x8b000000, 0x8b800000, 0x8c000000, 0x8c800000, 0x8d000000, 0x8d800000, 0x8e000000, 0x8e800000, 0x8f000000, 0xc7800000 }; static const cmsUInt16Number Base[512] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x0c00, 0x1000, 0x1400, 0x1800, 0x1c00, 0x2000, 0x2400, 0x2800, 0x2c00, 0x3000, 0x3400, 0x3800, 0x3c00, 0x4000, 0x4400, 0x4800, 0x4c00, 0x5000, 0x5400, 0x5800, 0x5c00, 0x6000, 0x6400, 0x6800, 0x6c00, 0x7000, 0x7400, 0x7800, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8002, 0x8004, 0x8008, 0x8010, 0x8020, 0x8040, 0x8080, 0x8100, 0x8200, 0x8400, 0x8800, 0x8c00, 0x9000, 0x9400, 0x9800, 0x9c00, 0xa000, 0xa400, 0xa800, 0xac00, 0xb000, 0xb400, 0xb800, 0xbc00, 0xc000, 0xc400, 0xc800, 0xcc00, 0xd000, 0xd400, 0xd800, 0xdc00, 0xe000, 0xe400, 0xe800, 0xec00, 0xf000, 0xf400, 0xf800, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc00 }; static const cmsUInt8Number Shift[512] = { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0d, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0d }; cmsFloat32Number CMSEXPORT _cmsHalf2Float(cmsUInt16Number h) { union { cmsFloat32Number flt; cmsUInt32Number num; } out; int n = h >> 10; out.num = Mantissa[ (h & 0x3ff) + Offset[ n ] ] + Exponent[ n ]; return out.flt; } cmsUInt16Number CMSEXPORT _cmsFloat2Half(cmsFloat32Number flt) { union { cmsFloat32Number flt; cmsUInt32Number num; } in; cmsUInt32Number n, j; in.flt = flt; n = in.num; j = (n >> 23) & 0x1ff; return (cmsUInt16Number) ((cmsUInt32Number) Base[ j ] + (( n & 0x007fffff) >> Shift[ j ])); } #endif lcms2-2.12rc1/src/cmssm.c0000644000175000017500000004521413775114656014200 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // ------------------------------------------------------------------------ // Gamut boundary description by using Jan Morovic's Segment maxima method // Many thanks to Jan for allowing me to use his algorithm. // r = C* // alpha = Hab // theta = L* #define SECTORS 16 // number of divisions in alpha and theta // Spherical coordinates typedef struct { cmsFloat64Number r; cmsFloat64Number alpha; cmsFloat64Number theta; } cmsSpherical; typedef enum { GP_EMPTY, GP_SPECIFIED, GP_MODELED } GDBPointType; typedef struct { GDBPointType Type; cmsSpherical p; // Keep also alpha & theta of maximum } cmsGDBPoint; typedef struct { cmsContext ContextID; cmsGDBPoint Gamut[SECTORS][SECTORS]; } cmsGDB; // A line using the parametric form // P = a + t*u typedef struct { cmsVEC3 a; cmsVEC3 u; } cmsLine; // A plane using the parametric form // Q = b + r*v + s*w typedef struct { cmsVEC3 b; cmsVEC3 v; cmsVEC3 w; } cmsPlane; // -------------------------------------------------------------------------------------------- // ATAN2() which always returns degree positive numbers static cmsFloat64Number _cmsAtan2(cmsFloat64Number y, cmsFloat64Number x) { cmsFloat64Number a; // Deal with undefined case if (x == 0.0 && y == 0.0) return 0; a = (atan2(y, x) * 180.0) / M_PI; while (a < 0) { a += 360; } return a; } // Convert to spherical coordinates static void ToSpherical(cmsSpherical* sp, const cmsVEC3* v) { cmsFloat64Number L, a, b; L = v ->n[VX]; a = v ->n[VY]; b = v ->n[VZ]; sp ->r = sqrt( L*L + a*a + b*b ); if (sp ->r == 0) { sp ->alpha = sp ->theta = 0; return; } sp ->alpha = _cmsAtan2(a, b); sp ->theta = _cmsAtan2(sqrt(a*a + b*b), L); } // Convert to cartesian from spherical static void ToCartesian(cmsVEC3* v, const cmsSpherical* sp) { cmsFloat64Number sin_alpha; cmsFloat64Number cos_alpha; cmsFloat64Number sin_theta; cmsFloat64Number cos_theta; cmsFloat64Number L, a, b; sin_alpha = sin((M_PI * sp ->alpha) / 180.0); cos_alpha = cos((M_PI * sp ->alpha) / 180.0); sin_theta = sin((M_PI * sp ->theta) / 180.0); cos_theta = cos((M_PI * sp ->theta) / 180.0); a = sp ->r * sin_theta * sin_alpha; b = sp ->r * sin_theta * cos_alpha; L = sp ->r * cos_theta; v ->n[VX] = L; v ->n[VY] = a; v ->n[VZ] = b; } // Quantize sector of a spherical coordinate. Saturate 360, 180 to last sector // The limits are the centers of each sector, so static void QuantizeToSector(const cmsSpherical* sp, int* alpha, int* theta) { *alpha = (int) floor(((sp->alpha * (SECTORS)) / 360.0) ); *theta = (int) floor(((sp->theta * (SECTORS)) / 180.0) ); if (*alpha >= SECTORS) *alpha = SECTORS-1; if (*theta >= SECTORS) *theta = SECTORS-1; } // Line determined by 2 points static void LineOf2Points(cmsLine* line, cmsVEC3* a, cmsVEC3* b) { _cmsVEC3init(&line ->a, a ->n[VX], a ->n[VY], a ->n[VZ]); _cmsVEC3init(&line ->u, b ->n[VX] - a ->n[VX], b ->n[VY] - a ->n[VY], b ->n[VZ] - a ->n[VZ]); } // Evaluate parametric line static void GetPointOfLine(cmsVEC3* p, const cmsLine* line, cmsFloat64Number t) { p ->n[VX] = line ->a.n[VX] + t * line->u.n[VX]; p ->n[VY] = line ->a.n[VY] + t * line->u.n[VY]; p ->n[VZ] = line ->a.n[VZ] + t * line->u.n[VZ]; } /* Closest point in sector line1 to sector line2 (both are defined as 0 <=t <= 1) http://softsurfer.com/Archive/algorithm_0106/algorithm_0106.htm Copyright 2001, softSurfer (www.softsurfer.com) This code may be freely used and modified for any purpose providing that this copyright notice is included with it. SoftSurfer makes no warranty for this code, and cannot be held liable for any real or imagined damage resulting from its use. Users of this code must verify correctness for their application. */ static cmsBool ClosestLineToLine(cmsVEC3* r, const cmsLine* line1, const cmsLine* line2) { cmsFloat64Number a, b, c, d, e, D; cmsFloat64Number sc, sN, sD; //cmsFloat64Number tc; // left for future use cmsFloat64Number tN, tD; cmsVEC3 w0; _cmsVEC3minus(&w0, &line1 ->a, &line2 ->a); a = _cmsVEC3dot(&line1 ->u, &line1 ->u); b = _cmsVEC3dot(&line1 ->u, &line2 ->u); c = _cmsVEC3dot(&line2 ->u, &line2 ->u); d = _cmsVEC3dot(&line1 ->u, &w0); e = _cmsVEC3dot(&line2 ->u, &w0); D = a*c - b * b; // Denominator sD = tD = D; // default sD = D >= 0 if (D < MATRIX_DET_TOLERANCE) { // the lines are almost parallel sN = 0.0; // force using point P0 on segment S1 sD = 1.0; // to prevent possible division by 0.0 later tN = e; tD = c; } else { // get the closest points on the infinite lines sN = (b*e - c*d); tN = (a*e - b*d); if (sN < 0.0) { // sc < 0 => the s=0 edge is visible sN = 0.0; tN = e; tD = c; } else if (sN > sD) { // sc > 1 => the s=1 edge is visible sN = sD; tN = e + b; tD = c; } } if (tN < 0.0) { // tc < 0 => the t=0 edge is visible tN = 0.0; // recompute sc for this edge if (-d < 0.0) sN = 0.0; else if (-d > a) sN = sD; else { sN = -d; sD = a; } } else if (tN > tD) { // tc > 1 => the t=1 edge is visible tN = tD; // recompute sc for this edge if ((-d + b) < 0.0) sN = 0; else if ((-d + b) > a) sN = sD; else { sN = (-d + b); sD = a; } } // finally do the division to get sc and tc sc = (fabs(sN) < MATRIX_DET_TOLERANCE ? 0.0 : sN / sD); //tc = (fabs(tN) < MATRIX_DET_TOLERANCE ? 0.0 : tN / tD); // left for future use. GetPointOfLine(r, line1, sc); return TRUE; } // ------------------------------------------------------------------ Wrapper // Allocate & free structure cmsHANDLE CMSEXPORT cmsGBDAlloc(cmsContext ContextID) { cmsGDB* gbd = (cmsGDB*) _cmsMallocZero(ContextID, sizeof(cmsGDB)); if (gbd == NULL) return NULL; gbd -> ContextID = ContextID; return (cmsHANDLE) gbd; } void CMSEXPORT cmsGBDFree(cmsHANDLE hGBD) { cmsGDB* gbd = (cmsGDB*) hGBD; if (hGBD != NULL) _cmsFree(gbd->ContextID, (void*) gbd); } // Auxiliary to retrieve a pointer to the segmentr containing the Lab value static cmsGDBPoint* GetPoint(cmsGDB* gbd, const cmsCIELab* Lab, cmsSpherical* sp) { cmsVEC3 v; int alpha, theta; // Housekeeping _cmsAssert(gbd != NULL); _cmsAssert(Lab != NULL); _cmsAssert(sp != NULL); // Center L* by subtracting half of its domain, that's 50 _cmsVEC3init(&v, Lab ->L - 50.0, Lab ->a, Lab ->b); // Convert to spherical coordinates ToSpherical(sp, &v); if (sp ->r < 0 || sp ->alpha < 0 || sp->theta < 0) { cmsSignalError(gbd ->ContextID, cmsERROR_RANGE, "spherical value out of range"); return NULL; } // On which sector it falls? QuantizeToSector(sp, &alpha, &theta); if (alpha < 0 || theta < 0 || alpha >= SECTORS || theta >= SECTORS) { cmsSignalError(gbd ->ContextID, cmsERROR_RANGE, " quadrant out of range"); return NULL; } // Get pointer to the sector return &gbd ->Gamut[theta][alpha]; } // Add a point to gamut descriptor. Point to add is in Lab color space. // GBD is centered on a=b=0 and L*=50 cmsBool CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab) { cmsGDB* gbd = (cmsGDB*) hGBD; cmsGDBPoint* ptr; cmsSpherical sp; // Get pointer to the sector ptr = GetPoint(gbd, Lab, &sp); if (ptr == NULL) return FALSE; // If no samples at this sector, add it if (ptr ->Type == GP_EMPTY) { ptr -> Type = GP_SPECIFIED; ptr -> p = sp; } else { // Substitute only if radius is greater if (sp.r > ptr -> p.r) { ptr -> Type = GP_SPECIFIED; ptr -> p = sp; } } return TRUE; } // Check if a given point falls inside gamut cmsBool CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab) { cmsGDB* gbd = (cmsGDB*) hGBD; cmsGDBPoint* ptr; cmsSpherical sp; // Get pointer to the sector ptr = GetPoint(gbd, Lab, &sp); if (ptr == NULL) return FALSE; // If no samples at this sector, return no data if (ptr ->Type == GP_EMPTY) return FALSE; // In gamut only if radius is greater return (sp.r <= ptr -> p.r); } // ----------------------------------------------------------------------------------------------------------------------- // Find near sectors. The list of sectors found is returned on Close[]. // The function returns the number of sectors as well. // 24 9 10 11 12 // 23 8 1 2 13 // 22 7 * 3 14 // 21 6 5 4 15 // 20 19 18 17 16 // // Those are the relative movements // {-2,-2}, {-1, -2}, {0, -2}, {+1, -2}, {+2, -2}, // {-2,-1}, {-1, -1}, {0, -1}, {+1, -1}, {+2, -1}, // {-2, 0}, {-1, 0}, {0, 0}, {+1, 0}, {+2, 0}, // {-2,+1}, {-1, +1}, {0, +1}, {+1, +1}, {+2, +1}, // {-2,+2}, {-1, +2}, {0, +2}, {+1, +2}, {+2, +2}}; static const struct _spiral { int AdvX, AdvY; } Spiral[] = { {0, -1}, {+1, -1}, {+1, 0}, {+1, +1}, {0, +1}, {-1, +1}, {-1, 0}, {-1, -1}, {-1, -2}, {0, -2}, {+1, -2}, {+2, -2}, {+2, -1}, {+2, 0}, {+2, +1}, {+2, +2}, {+1, +2}, {0, +2}, {-1, +2}, {-2, +2}, {-2, +1}, {-2, 0}, {-2, -1}, {-2, -2} }; #define NSTEPS (sizeof(Spiral) / sizeof(struct _spiral)) static int FindNearSectors(cmsGDB* gbd, int alpha, int theta, cmsGDBPoint* Close[]) { int nSectors = 0; int a, t; cmsUInt32Number i; cmsGDBPoint* pt; for (i=0; i < NSTEPS; i++) { a = alpha + Spiral[i].AdvX; t = theta + Spiral[i].AdvY; // Cycle at the end a %= SECTORS; t %= SECTORS; // Cycle at the begin if (a < 0) a = SECTORS + a; if (t < 0) t = SECTORS + t; pt = &gbd ->Gamut[t][a]; if (pt -> Type != GP_EMPTY) { Close[nSectors++] = pt; } } return nSectors; } // Interpolate a missing sector. Method identifies whatever this is top, bottom or mid static cmsBool InterpolateMissingSector(cmsGDB* gbd, int alpha, int theta) { cmsSpherical sp; cmsVEC3 Lab; cmsVEC3 Centre; cmsLine ray; int nCloseSectors; cmsGDBPoint* Close[NSTEPS + 1]; cmsSpherical closel, templ; cmsLine edge; int k, m; // Is that point already specified? if (gbd ->Gamut[theta][alpha].Type != GP_EMPTY) return TRUE; // Fill close points nCloseSectors = FindNearSectors(gbd, alpha, theta, Close); // Find a central point on the sector sp.alpha = (cmsFloat64Number) ((alpha + 0.5) * 360.0) / (SECTORS); sp.theta = (cmsFloat64Number) ((theta + 0.5) * 180.0) / (SECTORS); sp.r = 50.0; // Convert to Cartesian ToCartesian(&Lab, &sp); // Create a ray line from centre to this point _cmsVEC3init(&Centre, 50.0, 0, 0); LineOf2Points(&ray, &Lab, &Centre); // For all close sectors closel.r = 0.0; closel.alpha = 0; closel.theta = 0; for (k=0; k < nCloseSectors; k++) { for(m = k+1; m < nCloseSectors; m++) { cmsVEC3 temp, a1, a2; // A line from sector to sector ToCartesian(&a1, &Close[k]->p); ToCartesian(&a2, &Close[m]->p); LineOf2Points(&edge, &a1, &a2); // Find a line ClosestLineToLine(&temp, &ray, &edge); // Convert to spherical ToSpherical(&templ, &temp); if ( templ.r > closel.r && templ.theta >= (theta*180.0/SECTORS) && templ.theta <= ((theta+1)*180.0/SECTORS) && templ.alpha >= (alpha*360.0/SECTORS) && templ.alpha <= ((alpha+1)*360.0/SECTORS)) { closel = templ; } } } gbd ->Gamut[theta][alpha].p = closel; gbd ->Gamut[theta][alpha].Type = GP_MODELED; return TRUE; } // Interpolate missing parts. The algorithm fist computes slices at // theta=0 and theta=Max. cmsBool CMSEXPORT cmsGDBCompute(cmsHANDLE hGBD, cmsUInt32Number dwFlags) { int alpha, theta; cmsGDB* gbd = (cmsGDB*) hGBD; _cmsAssert(hGBD != NULL); // Interpolate black for (alpha = 0; alpha < SECTORS; alpha++) { if (!InterpolateMissingSector(gbd, alpha, 0)) return FALSE; } // Interpolate white for (alpha = 0; alpha < SECTORS; alpha++) { if (!InterpolateMissingSector(gbd, alpha, SECTORS-1)) return FALSE; } // Interpolate Mid for (theta = 1; theta < SECTORS; theta++) { for (alpha = 0; alpha < SECTORS; alpha++) { if (!InterpolateMissingSector(gbd, alpha, theta)) return FALSE; } } // Done return TRUE; cmsUNUSED_PARAMETER(dwFlags); } // -------------------------------------------------------------------------------------------------------- // Great for debug, but not suitable for real use #if 0 cmsBool cmsGBDdumpVRML(cmsHANDLE hGBD, const char* fname) { FILE* fp; int i, j; cmsGDB* gbd = (cmsGDB*) hGBD; cmsGDBPoint* pt; fp = fopen (fname, "wt"); if (fp == NULL) return FALSE; fprintf (fp, "#VRML V2.0 utf8\n"); // set the viewing orientation and distance fprintf (fp, "DEF CamTest Group {\n"); fprintf (fp, "\tchildren [\n"); fprintf (fp, "\t\tDEF Cameras Group {\n"); fprintf (fp, "\t\t\tchildren [\n"); fprintf (fp, "\t\t\t\tDEF DefaultView Viewpoint {\n"); fprintf (fp, "\t\t\t\t\tposition 0 0 340\n"); fprintf (fp, "\t\t\t\t\torientation 0 0 1 0\n"); fprintf (fp, "\t\t\t\t\tdescription \"default view\"\n"); fprintf (fp, "\t\t\t\t}\n"); fprintf (fp, "\t\t\t]\n"); fprintf (fp, "\t\t},\n"); fprintf (fp, "\t]\n"); fprintf (fp, "}\n"); // Output the background stuff fprintf (fp, "Background {\n"); fprintf (fp, "\tskyColor [\n"); fprintf (fp, "\t\t.5 .5 .5\n"); fprintf (fp, "\t]\n"); fprintf (fp, "}\n"); // Output the shape stuff fprintf (fp, "Transform {\n"); fprintf (fp, "\tscale .3 .3 .3\n"); fprintf (fp, "\tchildren [\n"); // Draw the axes as a shape: fprintf (fp, "\t\tShape {\n"); fprintf (fp, "\t\t\tappearance Appearance {\n"); fprintf (fp, "\t\t\t\tmaterial Material {\n"); fprintf (fp, "\t\t\t\t\tdiffuseColor 0 0.8 0\n"); fprintf (fp, "\t\t\t\t\temissiveColor 1.0 1.0 1.0\n"); fprintf (fp, "\t\t\t\t\tshininess 0.8\n"); fprintf (fp, "\t\t\t\t}\n"); fprintf (fp, "\t\t\t}\n"); fprintf (fp, "\t\t\tgeometry IndexedLineSet {\n"); fprintf (fp, "\t\t\t\tcoord Coordinate {\n"); fprintf (fp, "\t\t\t\t\tpoint [\n"); fprintf (fp, "\t\t\t\t\t0.0 0.0 0.0,\n"); fprintf (fp, "\t\t\t\t\t%f 0.0 0.0,\n", 255.0); fprintf (fp, "\t\t\t\t\t0.0 %f 0.0,\n", 255.0); fprintf (fp, "\t\t\t\t\t0.0 0.0 %f]\n", 255.0); fprintf (fp, "\t\t\t\t}\n"); fprintf (fp, "\t\t\t\tcoordIndex [\n"); fprintf (fp, "\t\t\t\t\t0, 1, -1\n"); fprintf (fp, "\t\t\t\t\t0, 2, -1\n"); fprintf (fp, "\t\t\t\t\t0, 3, -1]\n"); fprintf (fp, "\t\t\t}\n"); fprintf (fp, "\t\t}\n"); fprintf (fp, "\t\tShape {\n"); fprintf (fp, "\t\t\tappearance Appearance {\n"); fprintf (fp, "\t\t\t\tmaterial Material {\n"); fprintf (fp, "\t\t\t\t\tdiffuseColor 0 0.8 0\n"); fprintf (fp, "\t\t\t\t\temissiveColor 1 1 1\n"); fprintf (fp, "\t\t\t\t\tshininess 0.8\n"); fprintf (fp, "\t\t\t\t}\n"); fprintf (fp, "\t\t\t}\n"); fprintf (fp, "\t\t\tgeometry PointSet {\n"); // fill in the points here fprintf (fp, "\t\t\t\tcoord Coordinate {\n"); fprintf (fp, "\t\t\t\t\tpoint [\n"); // We need to transverse all gamut hull. for (i=0; i < SECTORS; i++) for (j=0; j < SECTORS; j++) { cmsVEC3 v; pt = &gbd ->Gamut[i][j]; ToCartesian(&v, &pt ->p); fprintf (fp, "\t\t\t\t\t%g %g %g", v.n[0]+50, v.n[1], v.n[2]); if ((j == SECTORS - 1) && (i == SECTORS - 1)) fprintf (fp, "]\n"); else fprintf (fp, ",\n"); } fprintf (fp, "\t\t\t\t}\n"); // fill in the face colors fprintf (fp, "\t\t\t\tcolor Color {\n"); fprintf (fp, "\t\t\t\t\tcolor [\n"); for (i=0; i < SECTORS; i++) for (j=0; j < SECTORS; j++) { cmsVEC3 v; pt = &gbd ->Gamut[i][j]; ToCartesian(&v, &pt ->p); if (pt ->Type == GP_EMPTY) fprintf (fp, "\t\t\t\t\t%g %g %g", 0.0, 0.0, 0.0); else if (pt ->Type == GP_MODELED) fprintf (fp, "\t\t\t\t\t%g %g %g", 1.0, .5, .5); else { fprintf (fp, "\t\t\t\t\t%g %g %g", 1.0, 1.0, 1.0); } if ((j == SECTORS - 1) && (i == SECTORS - 1)) fprintf (fp, "]\n"); else fprintf (fp, ",\n"); } fprintf (fp, "\t\t\t}\n"); fprintf (fp, "\t\t\t}\n"); fprintf (fp, "\t\t}\n"); fprintf (fp, "\t]\n"); fprintf (fp, "}\n"); fclose (fp); return TRUE; } #endif lcms2-2.12rc1/src/cmsplugin.c0000644000175000017500000007224513775114656015063 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // ---------------------------------------------------------------------------------- // Encoding & Decoding support functions // ---------------------------------------------------------------------------------- // Little-Endian to Big-Endian // Adjust a word value after being read/ before being written from/to an ICC profile cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word) { #ifndef CMS_USE_BIG_ENDIAN cmsUInt8Number* pByte = (cmsUInt8Number*) &Word; cmsUInt8Number tmp; tmp = pByte[0]; pByte[0] = pByte[1]; pByte[1] = tmp; #endif return Word; } // Transports to properly encoded values - note that icc profiles does use big endian notation. // 1 2 3 4 // 4 3 2 1 cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number DWord) { #ifndef CMS_USE_BIG_ENDIAN cmsUInt8Number* pByte = (cmsUInt8Number*) &DWord; cmsUInt8Number temp1; cmsUInt8Number temp2; temp1 = *pByte++; temp2 = *pByte++; *(pByte-1) = *pByte; *pByte++ = temp2; *(pByte-3) = *pByte; *pByte = temp1; #endif return DWord; } // 1 2 3 4 5 6 7 8 // 8 7 6 5 4 3 2 1 void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number* QWord) { #ifndef CMS_USE_BIG_ENDIAN cmsUInt8Number* pIn = (cmsUInt8Number*) QWord; cmsUInt8Number* pOut = (cmsUInt8Number*) Result; _cmsAssert(Result != NULL); pOut[7] = pIn[0]; pOut[6] = pIn[1]; pOut[5] = pIn[2]; pOut[4] = pIn[3]; pOut[3] = pIn[4]; pOut[2] = pIn[5]; pOut[1] = pIn[6]; pOut[0] = pIn[7]; #else _cmsAssert(Result != NULL); # ifdef CMS_DONT_USE_INT64 (*Result)[0] = (*QWord)[0]; (*Result)[1] = (*QWord)[1]; # else *Result = *QWord; # endif #endif } // Auxiliary -- read 8, 16 and 32-bit numbers cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n) { cmsUInt8Number tmp; _cmsAssert(io != NULL); if (io -> Read(io, &tmp, sizeof(cmsUInt8Number), 1) != 1) return FALSE; if (n != NULL) *n = tmp; return TRUE; } cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n) { cmsUInt16Number tmp; _cmsAssert(io != NULL); if (io -> Read(io, &tmp, sizeof(cmsUInt16Number), 1) != 1) return FALSE; if (n != NULL) *n = _cmsAdjustEndianess16(tmp); return TRUE; } cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array) { cmsUInt32Number i; _cmsAssert(io != NULL); for (i=0; i < n; i++) { if (Array != NULL) { if (!_cmsReadUInt16Number(io, Array + i)) return FALSE; } else { if (!_cmsReadUInt16Number(io, NULL)) return FALSE; } } return TRUE; } cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n) { cmsUInt32Number tmp; _cmsAssert(io != NULL); if (io -> Read(io, &tmp, sizeof(cmsUInt32Number), 1) != 1) return FALSE; if (n != NULL) *n = _cmsAdjustEndianess32(tmp); return TRUE; } cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n) { cmsUInt32Number tmp; _cmsAssert(io != NULL); if (io->Read(io, &tmp, sizeof(cmsUInt32Number), 1) != 1) return FALSE; if (n != NULL) { tmp = _cmsAdjustEndianess32(tmp); *n = *(cmsFloat32Number*)(void*)&tmp; // Safeguard which covers against absurd values if (*n > 1E+20 || *n < -1E+20) return FALSE; #if defined(_MSC_VER) && _MSC_VER < 1800 return TRUE; #elif defined (__BORLANDC__) return TRUE; #elif !defined(_MSC_VER) && (defined(__STDC_VERSION__) && __STDC_VERSION__ < 199901L) return TRUE; #else // fpclassify() required by C99 (only provided by MSVC >= 1800, VS2013 onwards) return ((fpclassify(*n) == FP_ZERO) || (fpclassify(*n) == FP_NORMAL)); #endif } return TRUE; } cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n) { cmsUInt64Number tmp; _cmsAssert(io != NULL); if (io -> Read(io, &tmp, sizeof(cmsUInt64Number), 1) != 1) return FALSE; if (n != NULL) { _cmsAdjustEndianess64(n, &tmp); } return TRUE; } cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n) { cmsUInt32Number tmp; _cmsAssert(io != NULL); if (io -> Read(io, &tmp, sizeof(cmsUInt32Number), 1) != 1) return FALSE; if (n != NULL) { *n = _cms15Fixed16toDouble((cmsS15Fixed16Number) _cmsAdjustEndianess32(tmp)); } return TRUE; } cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ) { cmsEncodedXYZNumber xyz; _cmsAssert(io != NULL); if (io ->Read(io, &xyz, sizeof(cmsEncodedXYZNumber), 1) != 1) return FALSE; if (XYZ != NULL) { XYZ->X = _cms15Fixed16toDouble((cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) xyz.X)); XYZ->Y = _cms15Fixed16toDouble((cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) xyz.Y)); XYZ->Z = _cms15Fixed16toDouble((cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) xyz.Z)); } return TRUE; } cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n) { _cmsAssert(io != NULL); if (io -> Write(io, sizeof(cmsUInt8Number), &n) != 1) return FALSE; return TRUE; } cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n) { cmsUInt16Number tmp; _cmsAssert(io != NULL); tmp = _cmsAdjustEndianess16(n); if (io -> Write(io, sizeof(cmsUInt16Number), &tmp) != 1) return FALSE; return TRUE; } cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array) { cmsUInt32Number i; _cmsAssert(io != NULL); _cmsAssert(Array != NULL); for (i=0; i < n; i++) { if (!_cmsWriteUInt16Number(io, Array[i])) return FALSE; } return TRUE; } cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n) { cmsUInt32Number tmp; _cmsAssert(io != NULL); tmp = _cmsAdjustEndianess32(n); if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1) return FALSE; return TRUE; } cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n) { cmsUInt32Number tmp; _cmsAssert(io != NULL); tmp = *(cmsUInt32Number*) (void*) &n; tmp = _cmsAdjustEndianess32(tmp); if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1) return FALSE; return TRUE; } cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n) { cmsUInt64Number tmp; _cmsAssert(io != NULL); _cmsAdjustEndianess64(&tmp, n); if (io -> Write(io, sizeof(cmsUInt64Number), &tmp) != 1) return FALSE; return TRUE; } cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n) { cmsUInt32Number tmp; _cmsAssert(io != NULL); tmp = _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(n)); if (io -> Write(io, sizeof(cmsUInt32Number), &tmp) != 1) return FALSE; return TRUE; } cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ) { cmsEncodedXYZNumber xyz; _cmsAssert(io != NULL); _cmsAssert(XYZ != NULL); xyz.X = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(XYZ->X)); xyz.Y = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(XYZ->Y)); xyz.Z = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(XYZ->Z)); return io -> Write(io, sizeof(cmsEncodedXYZNumber), &xyz); } // from Fixed point 8.8 to double cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8) { cmsUInt8Number msb, lsb; lsb = (cmsUInt8Number) (fixed8 & 0xff); msb = (cmsUInt8Number) (((cmsUInt16Number) fixed8 >> 8) & 0xff); return (cmsFloat64Number) ((cmsFloat64Number) msb + ((cmsFloat64Number) lsb / 256.0)); } cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val) { cmsS15Fixed16Number GammaFixed32 = _cmsDoubleTo15Fixed16(val); return (cmsUInt16Number) ((GammaFixed32 >> 8) & 0xFFFF); } // from Fixed point 15.16 to double cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32) { cmsFloat64Number floater, sign, mid; int Whole, FracPart; sign = (fix32 < 0 ? -1 : 1); fix32 = abs(fix32); Whole = (cmsUInt16Number)(fix32 >> 16) & 0xffff; FracPart = (cmsUInt16Number)(fix32 & 0xffff); mid = (cmsFloat64Number) FracPart / 65536.0; floater = (cmsFloat64Number) Whole + mid; return sign * floater; } // from double to Fixed point 15.16 cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v) { return ((cmsS15Fixed16Number) floor((v)*65536.0 + 0.5)); } // Date/Time functions void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest) { _cmsAssert(Dest != NULL); _cmsAssert(Source != NULL); Dest->tm_sec = _cmsAdjustEndianess16(Source->seconds); Dest->tm_min = _cmsAdjustEndianess16(Source->minutes); Dest->tm_hour = _cmsAdjustEndianess16(Source->hours); Dest->tm_mday = _cmsAdjustEndianess16(Source->day); Dest->tm_mon = _cmsAdjustEndianess16(Source->month) - 1; Dest->tm_year = _cmsAdjustEndianess16(Source->year) - 1900; Dest->tm_wday = -1; Dest->tm_yday = -1; Dest->tm_isdst = 0; } void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source) { _cmsAssert(Dest != NULL); _cmsAssert(Source != NULL); Dest->seconds = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_sec); Dest->minutes = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_min); Dest->hours = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_hour); Dest->day = _cmsAdjustEndianess16((cmsUInt16Number) Source->tm_mday); Dest->month = _cmsAdjustEndianess16((cmsUInt16Number) (Source->tm_mon + 1)); Dest->year = _cmsAdjustEndianess16((cmsUInt16Number) (Source->tm_year + 1900)); } // Read base and return type base cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io) { _cmsTagBase Base; _cmsAssert(io != NULL); if (io -> Read(io, &Base, sizeof(_cmsTagBase), 1) != 1) return (cmsTagTypeSignature) 0; return (cmsTagTypeSignature) _cmsAdjustEndianess32(Base.sig); } // Setup base marker cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig) { _cmsTagBase Base; _cmsAssert(io != NULL); Base.sig = (cmsTagTypeSignature) _cmsAdjustEndianess32(sig); memset(&Base.reserved, 0, sizeof(Base.reserved)); return io -> Write(io, sizeof(_cmsTagBase), &Base); } cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io) { cmsUInt8Number Buffer[4]; cmsUInt32Number NextAligned, At; cmsUInt32Number BytesToNextAlignedPos; _cmsAssert(io != NULL); At = io -> Tell(io); NextAligned = _cmsALIGNLONG(At); BytesToNextAlignedPos = NextAligned - At; if (BytesToNextAlignedPos == 0) return TRUE; if (BytesToNextAlignedPos > 4) return FALSE; return (io ->Read(io, Buffer, BytesToNextAlignedPos, 1) == 1); } cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io) { cmsUInt8Number Buffer[4]; cmsUInt32Number NextAligned, At; cmsUInt32Number BytesToNextAlignedPos; _cmsAssert(io != NULL); At = io -> Tell(io); NextAligned = _cmsALIGNLONG(At); BytesToNextAlignedPos = NextAligned - At; if (BytesToNextAlignedPos == 0) return TRUE; if (BytesToNextAlignedPos > 4) return FALSE; memset(Buffer, 0, BytesToNextAlignedPos); return io -> Write(io, BytesToNextAlignedPos, Buffer); } // To deal with text streams. 2K at most cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...) { va_list args; int len; cmsUInt8Number Buffer[2048]; cmsBool rc; cmsUInt8Number* ptr; _cmsAssert(io != NULL); _cmsAssert(frm != NULL); va_start(args, frm); len = vsnprintf((char*) Buffer, 2047, frm, args); if (len < 0) { va_end(args); return FALSE; // Truncated, which is a fatal error for us } // setlocale may be active, no commas are needed in PS generator // and PS generator is our only client for (ptr = Buffer; *ptr; ptr++) { if (*ptr == ',') *ptr = '.'; } rc = io ->Write(io, (cmsUInt32Number) len, Buffer); va_end(args); return rc; } // Plugin memory management ------------------------------------------------------------------------------------------------- // Specialized malloc for plug-ins, that is freed upon exit. void* _cmsPluginMalloc(cmsContext ContextID, cmsUInt32Number size) { struct _cmsContext_struct* ctx = _cmsGetContext(ContextID); if (ctx ->MemPool == NULL) { if (ContextID == NULL) { ctx->MemPool = _cmsCreateSubAlloc(0, 2*1024); if (ctx->MemPool == NULL) return NULL; } else { cmsSignalError(ContextID, cmsERROR_CORRUPTION_DETECTED, "NULL memory pool on context"); return NULL; } } return _cmsSubAlloc(ctx->MemPool, size); } // Main plug-in dispatcher cmsBool CMSEXPORT cmsPlugin(void* Plug_in) { return cmsPluginTHR(NULL, Plug_in); } cmsBool CMSEXPORT cmsPluginTHR(cmsContext id, void* Plug_in) { cmsPluginBase* Plugin; for (Plugin = (cmsPluginBase*) Plug_in; Plugin != NULL; Plugin = Plugin -> Next) { if (Plugin -> Magic != cmsPluginMagicNumber) { cmsSignalError(id, cmsERROR_UNKNOWN_EXTENSION, "Unrecognized plugin"); return FALSE; } if (Plugin ->ExpectedVersion > LCMS_VERSION) { cmsSignalError(id, cmsERROR_UNKNOWN_EXTENSION, "plugin needs Little CMS %d, current version is %d", Plugin ->ExpectedVersion, LCMS_VERSION); return FALSE; } switch (Plugin -> Type) { case cmsPluginMemHandlerSig: if (!_cmsRegisterMemHandlerPlugin(id, Plugin)) return FALSE; break; case cmsPluginInterpolationSig: if (!_cmsRegisterInterpPlugin(id, Plugin)) return FALSE; break; case cmsPluginTagTypeSig: if (!_cmsRegisterTagTypePlugin(id, Plugin)) return FALSE; break; case cmsPluginTagSig: if (!_cmsRegisterTagPlugin(id, Plugin)) return FALSE; break; case cmsPluginFormattersSig: if (!_cmsRegisterFormattersPlugin(id, Plugin)) return FALSE; break; case cmsPluginRenderingIntentSig: if (!_cmsRegisterRenderingIntentPlugin(id, Plugin)) return FALSE; break; case cmsPluginParametricCurveSig: if (!_cmsRegisterParametricCurvesPlugin(id, Plugin)) return FALSE; break; case cmsPluginMultiProcessElementSig: if (!_cmsRegisterMultiProcessElementPlugin(id, Plugin)) return FALSE; break; case cmsPluginOptimizationSig: if (!_cmsRegisterOptimizationPlugin(id, Plugin)) return FALSE; break; case cmsPluginTransformSig: if (!_cmsRegisterTransformPlugin(id, Plugin)) return FALSE; break; case cmsPluginMutexSig: if (!_cmsRegisterMutexPlugin(id, Plugin)) return FALSE; break; default: cmsSignalError(id, cmsERROR_UNKNOWN_EXTENSION, "Unrecognized plugin type '%X'", Plugin -> Type); return FALSE; } } // Keep a reference to the plug-in return TRUE; } // Revert all plug-ins to default void CMSEXPORT cmsUnregisterPlugins(void) { cmsUnregisterPluginsTHR(NULL); } // The Global storage for system context. This is the one and only global variable // pointers structure. All global vars are referenced here. static struct _cmsContext_struct globalContext = { NULL, // Not in the linked list NULL, // No suballocator { NULL, // UserPtr, &_cmsLogErrorChunk, // Logger, &_cmsAlarmCodesChunk, // AlarmCodes, &_cmsAdaptationStateChunk, // AdaptationState, &_cmsMemPluginChunk, // MemPlugin, &_cmsInterpPluginChunk, // InterpPlugin, &_cmsCurvesPluginChunk, // CurvesPlugin, &_cmsFormattersPluginChunk, // FormattersPlugin, &_cmsTagTypePluginChunk, // TagTypePlugin, &_cmsTagPluginChunk, // TagPlugin, &_cmsIntentsPluginChunk, // IntentPlugin, &_cmsMPETypePluginChunk, // MPEPlugin, &_cmsOptimizationPluginChunk, // OptimizationPlugin, &_cmsTransformPluginChunk, // TransformPlugin, &_cmsMutexPluginChunk // MutexPlugin }, { NULL, NULL, NULL, NULL, NULL, NULL } // The default memory allocator is not used for context 0 }; // The context pool (linked list head) static _cmsMutex _cmsContextPoolHeadMutex = CMS_MUTEX_INITIALIZER; static struct _cmsContext_struct* _cmsContextPoolHead = NULL; // Internal, get associated pointer, with guessing. Never returns NULL. struct _cmsContext_struct* _cmsGetContext(cmsContext ContextID) { struct _cmsContext_struct* id = (struct _cmsContext_struct*) ContextID; struct _cmsContext_struct* ctx; // On 0, use global settings if (id == NULL) return &globalContext; // Search _cmsEnterCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); for (ctx = _cmsContextPoolHead; ctx != NULL; ctx = ctx ->Next) { // Found it? if (id == ctx) { _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); return ctx; // New-style context } } _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); return &globalContext; } // Internal: get the memory area associanted with each context client // Returns the block assigned to the specific zone. Never return NULL. void* _cmsContextGetClientChunk(cmsContext ContextID, _cmsMemoryClient mc) { struct _cmsContext_struct* ctx; void *ptr; if ((int) mc < 0 || mc >= MemoryClientMax) { cmsSignalError(ContextID, cmsERROR_INTERNAL, "Bad context client -- possible corruption"); // This is catastrophic. Should never reach here _cmsAssert(0); // Reverts to global context return globalContext.chunks[UserPtr]; } ctx = _cmsGetContext(ContextID); ptr = ctx ->chunks[mc]; if (ptr != NULL) return ptr; // A null ptr means no special settings for that context, and this // reverts to Context0 globals return globalContext.chunks[mc]; } // This function returns the given context its default pristine state, // as no plug-ins were declared. There is no way to unregister a single // plug-in, as a single call to cmsPluginTHR() function may register // many different plug-ins simultaneously, then there is no way to // identify which plug-in to unregister. void CMSEXPORT cmsUnregisterPluginsTHR(cmsContext ContextID) { _cmsRegisterMemHandlerPlugin(ContextID, NULL); _cmsRegisterInterpPlugin(ContextID, NULL); _cmsRegisterTagTypePlugin(ContextID, NULL); _cmsRegisterTagPlugin(ContextID, NULL); _cmsRegisterFormattersPlugin(ContextID, NULL); _cmsRegisterRenderingIntentPlugin(ContextID, NULL); _cmsRegisterParametricCurvesPlugin(ContextID, NULL); _cmsRegisterMultiProcessElementPlugin(ContextID, NULL); _cmsRegisterOptimizationPlugin(ContextID, NULL); _cmsRegisterTransformPlugin(ContextID, NULL); _cmsRegisterMutexPlugin(ContextID, NULL); } // Returns the memory manager plug-in, if any, from the Plug-in bundle static cmsPluginMemHandler* _cmsFindMemoryPlugin(void* PluginBundle) { cmsPluginBase* Plugin; for (Plugin = (cmsPluginBase*) PluginBundle; Plugin != NULL; Plugin = Plugin -> Next) { if (Plugin -> Magic == cmsPluginMagicNumber && Plugin -> ExpectedVersion <= LCMS_VERSION && Plugin -> Type == cmsPluginMemHandlerSig) { // Found! return (cmsPluginMemHandler*) Plugin; } } // Nope, revert to defaults return NULL; } // Creates a new context with optional associated plug-ins. Caller may also specify an optional pointer to user-defined // data that will be forwarded to plug-ins and logger. cmsContext CMSEXPORT cmsCreateContext(void* Plugin, void* UserData) { struct _cmsContext_struct* ctx; struct _cmsContext_struct fakeContext; // See the comments regarding locking in lcms2_internal.h // for an explanation of why we need the following code. #ifndef CMS_NO_PTHREADS #ifdef CMS_IS_WINDOWS_ #ifndef CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT { static HANDLE _cmsWindowsInitMutex = NULL; static volatile HANDLE* mutex = &_cmsWindowsInitMutex; if (*mutex == NULL) { HANDLE p = CreateMutex(NULL, FALSE, NULL); if (p && InterlockedCompareExchangePointer((void **)mutex, (void*)p, NULL) != NULL) CloseHandle(p); } if (*mutex == NULL || WaitForSingleObject(*mutex, INFINITE) == WAIT_FAILED) return NULL; if (((void **)&_cmsContextPoolHeadMutex)[0] == NULL) InitializeCriticalSection(&_cmsContextPoolHeadMutex); if (*mutex == NULL || !ReleaseMutex(*mutex)) return NULL; } #endif #endif #endif _cmsInstallAllocFunctions(_cmsFindMemoryPlugin(Plugin), &fakeContext.DefaultMemoryManager); fakeContext.chunks[UserPtr] = UserData; fakeContext.chunks[MemPlugin] = &fakeContext.DefaultMemoryManager; // Create the context structure. ctx = (struct _cmsContext_struct*) _cmsMalloc(&fakeContext, sizeof(struct _cmsContext_struct)); if (ctx == NULL) return NULL; // Something very wrong happened! // Init the structure and the memory manager memset(ctx, 0, sizeof(struct _cmsContext_struct)); // Keep memory manager memcpy(&ctx->DefaultMemoryManager, &fakeContext.DefaultMemoryManager, sizeof(_cmsMemPluginChunk)); // Maintain the linked list (with proper locking) _cmsEnterCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); ctx ->Next = _cmsContextPoolHead; _cmsContextPoolHead = ctx; _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); ctx ->chunks[UserPtr] = UserData; ctx ->chunks[MemPlugin] = &ctx->DefaultMemoryManager; // Now we can allocate the pool by using default memory manager ctx ->MemPool = _cmsCreateSubAlloc(ctx, 22 * sizeof(void*)); // default size about 22 pointers if (ctx ->MemPool == NULL) { cmsDeleteContext(ctx); return NULL; } _cmsAllocLogErrorChunk(ctx, NULL); _cmsAllocAlarmCodesChunk(ctx, NULL); _cmsAllocAdaptationStateChunk(ctx, NULL); _cmsAllocMemPluginChunk(ctx, NULL); _cmsAllocInterpPluginChunk(ctx, NULL); _cmsAllocCurvesPluginChunk(ctx, NULL); _cmsAllocFormattersPluginChunk(ctx, NULL); _cmsAllocTagTypePluginChunk(ctx, NULL); _cmsAllocMPETypePluginChunk(ctx, NULL); _cmsAllocTagPluginChunk(ctx, NULL); _cmsAllocIntentsPluginChunk(ctx, NULL); _cmsAllocOptimizationPluginChunk(ctx, NULL); _cmsAllocTransformPluginChunk(ctx, NULL); _cmsAllocMutexPluginChunk(ctx, NULL); // Setup the plug-ins if (!cmsPluginTHR(ctx, Plugin)) { cmsDeleteContext(ctx); return NULL; } return (cmsContext) ctx; } // Duplicates a context with all associated plug-ins. // Caller may specify an optional pointer to user-defined // data that will be forwarded to plug-ins and logger. cmsContext CMSEXPORT cmsDupContext(cmsContext ContextID, void* NewUserData) { int i; struct _cmsContext_struct* ctx; const struct _cmsContext_struct* src = _cmsGetContext(ContextID); void* userData = (NewUserData != NULL) ? NewUserData : src -> chunks[UserPtr]; ctx = (struct _cmsContext_struct*) _cmsMalloc(ContextID, sizeof(struct _cmsContext_struct)); if (ctx == NULL) return NULL; // Something very wrong happened // Setup default memory allocators memcpy(&ctx->DefaultMemoryManager, &src->DefaultMemoryManager, sizeof(ctx->DefaultMemoryManager)); // Maintain the linked list _cmsEnterCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); ctx ->Next = _cmsContextPoolHead; _cmsContextPoolHead = ctx; _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); ctx ->chunks[UserPtr] = userData; ctx ->chunks[MemPlugin] = &ctx->DefaultMemoryManager; ctx ->MemPool = _cmsCreateSubAlloc(ctx, 22 * sizeof(void*)); if (ctx ->MemPool == NULL) { cmsDeleteContext(ctx); return NULL; } // Allocate all required chunks. _cmsAllocLogErrorChunk(ctx, src); _cmsAllocAlarmCodesChunk(ctx, src); _cmsAllocAdaptationStateChunk(ctx, src); _cmsAllocMemPluginChunk(ctx, src); _cmsAllocInterpPluginChunk(ctx, src); _cmsAllocCurvesPluginChunk(ctx, src); _cmsAllocFormattersPluginChunk(ctx, src); _cmsAllocTagTypePluginChunk(ctx, src); _cmsAllocMPETypePluginChunk(ctx, src); _cmsAllocTagPluginChunk(ctx, src); _cmsAllocIntentsPluginChunk(ctx, src); _cmsAllocOptimizationPluginChunk(ctx, src); _cmsAllocTransformPluginChunk(ctx, src); _cmsAllocMutexPluginChunk(ctx, src); // Make sure no one failed for (i=Logger; i < MemoryClientMax; i++) { if (src ->chunks[i] == NULL) { cmsDeleteContext((cmsContext) ctx); return NULL; } } return (cmsContext) ctx; } // Frees any resources associated with the given context, // and destroys the context placeholder. // The ContextID can no longer be used in any THR operation. void CMSEXPORT cmsDeleteContext(cmsContext ContextID) { if (ContextID != NULL) { struct _cmsContext_struct* ctx = (struct _cmsContext_struct*) ContextID; struct _cmsContext_struct fakeContext; struct _cmsContext_struct* prev; memcpy(&fakeContext.DefaultMemoryManager, &ctx->DefaultMemoryManager, sizeof(ctx->DefaultMemoryManager)); fakeContext.chunks[UserPtr] = ctx ->chunks[UserPtr]; fakeContext.chunks[MemPlugin] = &fakeContext.DefaultMemoryManager; // Get rid of plugins cmsUnregisterPluginsTHR(ContextID); // Since all memory is allocated in the private pool, all what we need to do is destroy the pool if (ctx -> MemPool != NULL) _cmsSubAllocDestroy(ctx ->MemPool); ctx -> MemPool = NULL; // Maintain list _cmsEnterCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); if (_cmsContextPoolHead == ctx) { _cmsContextPoolHead = ctx->Next; } else { // Search for previous for (prev = _cmsContextPoolHead; prev != NULL; prev = prev ->Next) { if (prev -> Next == ctx) { prev -> Next = ctx ->Next; break; } } } _cmsLeaveCriticalSectionPrimitive(&_cmsContextPoolHeadMutex); // free the memory block itself _cmsFree(&fakeContext, ctx); } } // Returns the user data associated to the given ContextID, or NULL if no user data was attached on context creation void* CMSEXPORT cmsGetContextUserData(cmsContext ContextID) { return _cmsContextGetClientChunk(ContextID, UserPtr); } lcms2-2.12rc1/src/cmsmd5.c0000644000175000017500000002250213775114656014241 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- #include "lcms2_internal.h" #ifdef CMS_USE_BIG_ENDIAN static void byteReverse(cmsUInt8Number * buf, cmsUInt32Number longs) { do { cmsUInt32Number t = _cmsAdjustEndianess32(*(cmsUInt32Number *) buf); *(cmsUInt32Number *) buf = t; buf += sizeof(cmsUInt32Number); } while (--longs); } #else #define byteReverse(buf, len) #endif typedef struct { cmsUInt32Number buf[4]; cmsUInt32Number bits[2]; cmsUInt8Number in[64]; cmsContext ContextID; } _cmsMD5; #define F1(x, y, z) (z ^ (x & (y ^ z))) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) #define STEP(f, w, x, y, z, data, s) \ ( w += f(x, y, z) + data, w = w<>(32-s), w += x ) static void cmsMD5_Transform(cmsUInt32Number buf[4], cmsUInt32Number in[16]) { CMSREGISTER cmsUInt32Number a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } // Create a MD5 object cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID) { _cmsMD5* ctx = (_cmsMD5*) _cmsMallocZero(ContextID, sizeof(_cmsMD5)); if (ctx == NULL) return NULL; ctx ->ContextID = ContextID; ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bits[0] = 0; ctx->bits[1] = 0; return (cmsHANDLE) ctx; } void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len) { _cmsMD5* ctx = (_cmsMD5*) Handle; cmsUInt32Number t; t = ctx->bits[0]; if ((ctx->bits[0] = t + (len << 3)) < t) ctx->bits[1]++; ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; if (t) { cmsUInt8Number *p = (cmsUInt8Number *) ctx->in + t; t = 64 - t; if (len < t) { memmove(p, buf, len); return; } memmove(p, buf, t); byteReverse(ctx->in, 16); cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); buf += t; len -= t; } while (len >= 64) { memmove(ctx->in, buf, 64); byteReverse(ctx->in, 16); cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); buf += 64; len -= 64; } memmove(ctx->in, buf, len); } // Destroy the object and return the checksum void CMSEXPORT cmsMD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle) { _cmsMD5* ctx = (_cmsMD5*) Handle; cmsUInt32Number count; cmsUInt8Number *p; count = (ctx->bits[0] >> 3) & 0x3F; p = ctx->in + count; *p++ = 0x80; count = 64 - 1 - count; if (count < 8) { memset(p, 0, count); byteReverse(ctx->in, 16); cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); memset(ctx->in, 0, 56); } else { memset(p, 0, count - 8); } byteReverse(ctx->in, 14); ((cmsUInt32Number *) ctx->in)[14] = ctx->bits[0]; ((cmsUInt32Number *) ctx->in)[15] = ctx->bits[1]; cmsMD5_Transform(ctx->buf, (cmsUInt32Number *) ctx->in); byteReverse((cmsUInt8Number *) ctx->buf, 4); memmove(ProfileID ->ID8, ctx->buf, 16); _cmsFree(ctx ->ContextID, ctx); } // Assuming io points to an ICC profile, compute and store MD5 checksum // In the header, rendering intentent, attributes and ID should be set to zero // before computing MD5 checksum (per 6.1.13 in ICC spec) cmsBool CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile) { cmsContext ContextID; cmsUInt32Number BytesNeeded; cmsUInt8Number* Mem = NULL; cmsHANDLE MD5 = NULL; _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; _cmsICCPROFILE Keep; _cmsAssert(hProfile != NULL); ContextID = cmsGetProfileContextID(hProfile); // Save a copy of the profile header memmove(&Keep, Icc, sizeof(_cmsICCPROFILE)); // Set RI, attributes and ID memset(&Icc ->attributes, 0, sizeof(Icc ->attributes)); Icc ->RenderingIntent = 0; memset(&Icc ->ProfileID, 0, sizeof(Icc ->ProfileID)); // Compute needed storage if (!cmsSaveProfileToMem(hProfile, NULL, &BytesNeeded)) goto Error; // Allocate memory Mem = (cmsUInt8Number*) _cmsMalloc(ContextID, BytesNeeded); if (Mem == NULL) goto Error; // Save to temporary storage if (!cmsSaveProfileToMem(hProfile, Mem, &BytesNeeded)) goto Error; // Create MD5 object MD5 = cmsMD5alloc(ContextID); if (MD5 == NULL) goto Error; // Add all bytes cmsMD5add(MD5, Mem, BytesNeeded); // Temp storage is no longer needed _cmsFree(ContextID, Mem); // Restore header memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); // And store the ID cmsMD5finish(&Icc ->ProfileID, MD5); return TRUE; Error: // Free resources as something went wrong // "MD5" cannot be other than NULL here, so no need to free it if (Mem != NULL) _cmsFree(ContextID, Mem); memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); return FALSE; } lcms2-2.12rc1/src/cmssamp.c0000644000175000017500000004270013775114656014516 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" #define cmsmin(a, b) (((a) < (b)) ? (a) : (b)) #define cmsmax(a, b) (((a) > (b)) ? (a) : (b)) // This file contains routines for resampling and LUT optimization, black point detection // and black preservation. // Black point detection ------------------------------------------------------------------------- // PCS -> PCS round trip transform, always uses relative intent on the device -> pcs static cmsHTRANSFORM CreateRoundtripXForm(cmsHPROFILE hProfile, cmsUInt32Number nIntent) { cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsHPROFILE hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); cmsHTRANSFORM xform; cmsBool BPC[4] = { FALSE, FALSE, FALSE, FALSE }; cmsFloat64Number States[4] = { 1.0, 1.0, 1.0, 1.0 }; cmsHPROFILE hProfiles[4]; cmsUInt32Number Intents[4]; hProfiles[0] = hLab; hProfiles[1] = hProfile; hProfiles[2] = hProfile; hProfiles[3] = hLab; Intents[0] = INTENT_RELATIVE_COLORIMETRIC; Intents[1] = nIntent; Intents[2] = INTENT_RELATIVE_COLORIMETRIC; Intents[3] = INTENT_RELATIVE_COLORIMETRIC; xform = cmsCreateExtendedTransform(ContextID, 4, hProfiles, BPC, Intents, States, NULL, 0, TYPE_Lab_DBL, TYPE_Lab_DBL, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); cmsCloseProfile(hLab); return xform; } // Use darker colorants to obtain black point. This works in the relative colorimetric intent and // assumes more ink results in darker colors. No ink limit is assumed. static cmsBool BlackPointAsDarkerColorant(cmsHPROFILE hInput, cmsUInt32Number Intent, cmsCIEXYZ* BlackPoint, cmsUInt32Number dwFlags) { cmsUInt16Number *Black; cmsHTRANSFORM xform; cmsColorSpaceSignature Space; cmsUInt32Number nChannels; cmsUInt32Number dwFormat; cmsHPROFILE hLab; cmsCIELab Lab; cmsCIEXYZ BlackXYZ; cmsContext ContextID = cmsGetProfileContextID(hInput); // If the profile does not support input direction, assume Black point 0 if (!cmsIsIntentSupported(hInput, Intent, LCMS_USED_AS_INPUT)) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Create a formatter which has n channels and no floating point dwFormat = cmsFormatterForColorspaceOfProfile(hInput, 2, FALSE); // Try to get black by using black colorant Space = cmsGetColorSpace(hInput); // This function returns darker colorant in 16 bits for several spaces if (!_cmsEndPointsBySpace(Space, NULL, &Black, &nChannels)) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } if (nChannels != T_CHANNELS(dwFormat)) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Lab will be used as the output space, but lab2 will avoid recursion hLab = cmsCreateLab2ProfileTHR(ContextID, NULL); if (hLab == NULL) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Create the transform xform = cmsCreateTransformTHR(ContextID, hInput, dwFormat, hLab, TYPE_Lab_DBL, Intent, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); cmsCloseProfile(hLab); if (xform == NULL) { // Something went wrong. Get rid of open resources and return zero as black BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Convert black to Lab cmsDoTransform(xform, Black, &Lab, 1); // Force it to be neutral, clip to max. L* of 50 Lab.a = Lab.b = 0; if (Lab.L > 50) Lab.L = 50; // Free the resources cmsDeleteTransform(xform); // Convert from Lab (which is now clipped) to XYZ. cmsLab2XYZ(NULL, &BlackXYZ, &Lab); if (BlackPoint != NULL) *BlackPoint = BlackXYZ; return TRUE; cmsUNUSED_PARAMETER(dwFlags); } // Get a black point of output CMYK profile, discounting any ink-limiting embedded // in the profile. For doing that, we use perceptual intent in input direction: // Lab (0, 0, 0) -> [Perceptual] Profile -> CMYK -> [Rel. colorimetric] Profile -> Lab static cmsBool BlackPointUsingPerceptualBlack(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile) { cmsHTRANSFORM hRoundTrip; cmsCIELab LabIn, LabOut; cmsCIEXYZ BlackXYZ; // Is the intent supported by the profile? if (!cmsIsIntentSupported(hProfile, INTENT_PERCEPTUAL, LCMS_USED_AS_INPUT)) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return TRUE; } hRoundTrip = CreateRoundtripXForm(hProfile, INTENT_PERCEPTUAL); if (hRoundTrip == NULL) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } LabIn.L = LabIn.a = LabIn.b = 0; cmsDoTransform(hRoundTrip, &LabIn, &LabOut, 1); // Clip Lab to reasonable limits if (LabOut.L > 50) LabOut.L = 50; LabOut.a = LabOut.b = 0; cmsDeleteTransform(hRoundTrip); // Convert it to XYZ cmsLab2XYZ(NULL, &BlackXYZ, &LabOut); if (BlackPoint != NULL) *BlackPoint = BlackXYZ; return TRUE; } // This function shouldn't exist at all -- there is such quantity of broken // profiles on black point tag, that we must somehow fix chromaticity to // avoid huge tint when doing Black point compensation. This function does // just that. There is a special flag for using black point tag, but turned // off by default because it is bogus on most profiles. The detection algorithm // involves to turn BP to neutral and to use only L component. cmsBool CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsProfileClassSignature devClass; // Make sure the device class is adequate devClass = cmsGetDeviceClass(hProfile); if (devClass == cmsSigLinkClass || devClass == cmsSigAbstractClass || devClass == cmsSigNamedColorClass) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Make sure intent is adequate if (Intent != INTENT_PERCEPTUAL && Intent != INTENT_RELATIVE_COLORIMETRIC && Intent != INTENT_SATURATION) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // v4 + perceptual & saturation intents does have its own black point, and it is // well specified enough to use it. Black point tag is deprecated in V4. if ((cmsGetEncodedICCversion(hProfile) >= 0x4000000) && (Intent == INTENT_PERCEPTUAL || Intent == INTENT_SATURATION)) { // Matrix shaper share MRC & perceptual intents if (cmsIsMatrixShaper(hProfile)) return BlackPointAsDarkerColorant(hProfile, INTENT_RELATIVE_COLORIMETRIC, BlackPoint, 0); // Get Perceptual black out of v4 profiles. That is fixed for perceptual & saturation intents BlackPoint -> X = cmsPERCEPTUAL_BLACK_X; BlackPoint -> Y = cmsPERCEPTUAL_BLACK_Y; BlackPoint -> Z = cmsPERCEPTUAL_BLACK_Z; return TRUE; } #ifdef CMS_USE_PROFILE_BLACK_POINT_TAG // v2, v4 rel/abs colorimetric if (cmsIsTag(hProfile, cmsSigMediaBlackPointTag) && Intent == INTENT_RELATIVE_COLORIMETRIC) { cmsCIEXYZ *BlackPtr, BlackXYZ, UntrustedBlackPoint, TrustedBlackPoint, MediaWhite; cmsCIELab Lab; // If black point is specified, then use it, BlackPtr = cmsReadTag(hProfile, cmsSigMediaBlackPointTag); if (BlackPtr != NULL) { BlackXYZ = *BlackPtr; _cmsReadMediaWhitePoint(&MediaWhite, hProfile); // Black point is absolute XYZ, so adapt to D50 to get PCS value cmsAdaptToIlluminant(&UntrustedBlackPoint, &MediaWhite, cmsD50_XYZ(), &BlackXYZ); // Force a=b=0 to get rid of any chroma cmsXYZ2Lab(NULL, &Lab, &UntrustedBlackPoint); Lab.a = Lab.b = 0; if (Lab.L > 50) Lab.L = 50; // Clip to L* <= 50 cmsLab2XYZ(NULL, &TrustedBlackPoint, &Lab); if (BlackPoint != NULL) *BlackPoint = TrustedBlackPoint; return TRUE; } } #endif // That is about v2 profiles. // If output profile, discount ink-limiting and that's all if (Intent == INTENT_RELATIVE_COLORIMETRIC && (cmsGetDeviceClass(hProfile) == cmsSigOutputClass) && (cmsGetColorSpace(hProfile) == cmsSigCmykData)) return BlackPointUsingPerceptualBlack(BlackPoint, hProfile); // Nope, compute BP using current intent. return BlackPointAsDarkerColorant(hProfile, Intent, BlackPoint, dwFlags); } // --------------------------------------------------------------------------------------------------------- // Least Squares Fit of a Quadratic Curve to Data // http://www.personal.psu.edu/jhm/f90/lectures/lsq2.html static cmsFloat64Number RootOfLeastSquaresFitQuadraticCurve(int n, cmsFloat64Number x[], cmsFloat64Number y[]) { double sum_x = 0, sum_x2 = 0, sum_x3 = 0, sum_x4 = 0; double sum_y = 0, sum_yx = 0, sum_yx2 = 0; double d, a, b, c; int i; cmsMAT3 m; cmsVEC3 v, res; if (n < 4) return 0; for (i=0; i < n; i++) { double xn = x[i]; double yn = y[i]; sum_x += xn; sum_x2 += xn*xn; sum_x3 += xn*xn*xn; sum_x4 += xn*xn*xn*xn; sum_y += yn; sum_yx += yn*xn; sum_yx2 += yn*xn*xn; } _cmsVEC3init(&m.v[0], n, sum_x, sum_x2); _cmsVEC3init(&m.v[1], sum_x, sum_x2, sum_x3); _cmsVEC3init(&m.v[2], sum_x2, sum_x3, sum_x4); _cmsVEC3init(&v, sum_y, sum_yx, sum_yx2); if (!_cmsMAT3solve(&res, &m, &v)) return 0; a = res.n[2]; b = res.n[1]; c = res.n[0]; if (fabs(a) < 1.0E-10) { return cmsmin(0, cmsmax(50, -c/b )); } else { d = b*b - 4.0 * a * c; if (d <= 0) { return 0; } else { double rt = (-b + sqrt(d)) / (2.0 * a); return cmsmax(0, cmsmin(50, rt)); } } } // Calculates the black point of a destination profile. // This algorithm comes from the Adobe paper disclosing its black point compensation method. cmsBool CMSEXPORT cmsDetectDestinationBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsColorSpaceSignature ColorSpace; cmsHTRANSFORM hRoundTrip = NULL; cmsCIELab InitialLab, destLab, Lab; cmsFloat64Number inRamp[256], outRamp[256]; cmsFloat64Number MinL, MaxL; cmsBool NearlyStraightMidrange = TRUE; cmsFloat64Number yRamp[256]; cmsFloat64Number x[256], y[256]; cmsFloat64Number lo, hi; int n, l; cmsProfileClassSignature devClass; // Make sure the device class is adequate devClass = cmsGetDeviceClass(hProfile); if (devClass == cmsSigLinkClass || devClass == cmsSigAbstractClass || devClass == cmsSigNamedColorClass) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Make sure intent is adequate if (Intent != INTENT_PERCEPTUAL && Intent != INTENT_RELATIVE_COLORIMETRIC && Intent != INTENT_SATURATION) { BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // v4 + perceptual & saturation intents does have its own black point, and it is // well specified enough to use it. Black point tag is deprecated in V4. if ((cmsGetEncodedICCversion(hProfile) >= 0x4000000) && (Intent == INTENT_PERCEPTUAL || Intent == INTENT_SATURATION)) { // Matrix shaper share MRC & perceptual intents if (cmsIsMatrixShaper(hProfile)) return BlackPointAsDarkerColorant(hProfile, INTENT_RELATIVE_COLORIMETRIC, BlackPoint, 0); // Get Perceptual black out of v4 profiles. That is fixed for perceptual & saturation intents BlackPoint -> X = cmsPERCEPTUAL_BLACK_X; BlackPoint -> Y = cmsPERCEPTUAL_BLACK_Y; BlackPoint -> Z = cmsPERCEPTUAL_BLACK_Z; return TRUE; } // Check if the profile is lut based and gray, rgb or cmyk (7.2 in Adobe's document) ColorSpace = cmsGetColorSpace(hProfile); if (!cmsIsCLUT(hProfile, Intent, LCMS_USED_AS_OUTPUT ) || (ColorSpace != cmsSigGrayData && ColorSpace != cmsSigRgbData && ColorSpace != cmsSigCmykData)) { // In this case, handle as input case return cmsDetectBlackPoint(BlackPoint, hProfile, Intent, dwFlags); } // It is one of the valid cases!, use Adobe algorithm // Set a first guess, that should work on good profiles. if (Intent == INTENT_RELATIVE_COLORIMETRIC) { cmsCIEXYZ IniXYZ; // calculate initial Lab as source black point if (!cmsDetectBlackPoint(&IniXYZ, hProfile, Intent, dwFlags)) { return FALSE; } // convert the XYZ to lab cmsXYZ2Lab(NULL, &InitialLab, &IniXYZ); } else { // set the initial Lab to zero, that should be the black point for perceptual and saturation InitialLab.L = 0; InitialLab.a = 0; InitialLab.b = 0; } // Step 2 // ====== // Create a roundtrip. Define a Transform BT for all x in L*a*b* hRoundTrip = CreateRoundtripXForm(hProfile, Intent); if (hRoundTrip == NULL) return FALSE; // Compute ramps for (l=0; l < 256; l++) { Lab.L = (cmsFloat64Number) (l * 100.0) / 255.0; Lab.a = cmsmin(50, cmsmax(-50, InitialLab.a)); Lab.b = cmsmin(50, cmsmax(-50, InitialLab.b)); cmsDoTransform(hRoundTrip, &Lab, &destLab, 1); inRamp[l] = Lab.L; outRamp[l] = destLab.L; } // Make monotonic for (l = 254; l > 0; --l) { outRamp[l] = cmsmin(outRamp[l], outRamp[l+1]); } // Check if (! (outRamp[0] < outRamp[255])) { cmsDeleteTransform(hRoundTrip); BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // Test for mid range straight (only on relative colorimetric) NearlyStraightMidrange = TRUE; MinL = outRamp[0]; MaxL = outRamp[255]; if (Intent == INTENT_RELATIVE_COLORIMETRIC) { for (l=0; l < 256; l++) { if (! ((inRamp[l] <= MinL + 0.2 * (MaxL - MinL) ) || (fabs(inRamp[l] - outRamp[l]) < 4.0 ))) NearlyStraightMidrange = FALSE; } // If the mid range is straight (as determined above) then the // DestinationBlackPoint shall be the same as initialLab. // Otherwise, the DestinationBlackPoint shall be determined // using curve fitting. if (NearlyStraightMidrange) { cmsLab2XYZ(NULL, BlackPoint, &InitialLab); cmsDeleteTransform(hRoundTrip); return TRUE; } } // curve fitting: The round-trip curve normally looks like a nearly constant section at the black point, // with a corner and a nearly straight line to the white point. for (l=0; l < 256; l++) { yRamp[l] = (outRamp[l] - MinL) / (MaxL - MinL); } // find the black point using the least squares error quadratic curve fitting if (Intent == INTENT_RELATIVE_COLORIMETRIC) { lo = 0.1; hi = 0.5; } else { // Perceptual and saturation lo = 0.03; hi = 0.25; } // Capture shadow points for the fitting. n = 0; for (l=0; l < 256; l++) { cmsFloat64Number ff = yRamp[l]; if (ff >= lo && ff < hi) { x[n] = inRamp[l]; y[n] = yRamp[l]; n++; } } // No suitable points if (n < 3 ) { cmsDeleteTransform(hRoundTrip); BlackPoint -> X = BlackPoint ->Y = BlackPoint -> Z = 0.0; return FALSE; } // fit and get the vertex of quadratic curve Lab.L = RootOfLeastSquaresFitQuadraticCurve(n, x, y); if (Lab.L < 0.0) { // clip to zero L* if the vertex is negative Lab.L = 0; } Lab.a = InitialLab.a; Lab.b = InitialLab.b; cmsLab2XYZ(NULL, BlackPoint, &Lab); cmsDeleteTransform(hRoundTrip); return TRUE; } lcms2-2.12rc1/src/cmsgmt.c0000644000175000017500000005016313775114656014347 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Auxiliary: append a Lab identity after the given sequence of profiles // and return the transform. Lab profile is closed, rest of profiles are kept open. cmsHTRANSFORM _cmsChain2Lab(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, const cmsUInt32Number Intents[], const cmsHPROFILE hProfiles[], const cmsBool BPC[], const cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { cmsHTRANSFORM xform; cmsHPROFILE hLab; cmsHPROFILE ProfileList[256]; cmsBool BPCList[256]; cmsFloat64Number AdaptationList[256]; cmsUInt32Number IntentList[256]; cmsUInt32Number i; // This is a rather big number and there is no need of dynamic memory // since we are adding a profile, 254 + 1 = 255 and this is the limit if (nProfiles > 254) return NULL; // The output space hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); if (hLab == NULL) return NULL; // Create a copy of parameters for (i=0; i < nProfiles; i++) { ProfileList[i] = hProfiles[i]; BPCList[i] = BPC[i]; AdaptationList[i] = AdaptationStates[i]; IntentList[i] = Intents[i]; } // Place Lab identity at chain's end. ProfileList[nProfiles] = hLab; BPCList[nProfiles] = 0; AdaptationList[nProfiles] = 1.0; IntentList[nProfiles] = INTENT_RELATIVE_COLORIMETRIC; // Create the transform xform = cmsCreateExtendedTransform(ContextID, nProfiles + 1, ProfileList, BPCList, IntentList, AdaptationList, NULL, 0, InputFormat, OutputFormat, dwFlags); cmsCloseProfile(hLab); return xform; } // Compute K -> L* relationship. Flags may include black point compensation. In this case, // the relationship is assumed from the profile with BPC to a black point zero. static cmsToneCurve* ComputeKToLstar(cmsContext ContextID, cmsUInt32Number nPoints, cmsUInt32Number nProfiles, const cmsUInt32Number Intents[], const cmsHPROFILE hProfiles[], const cmsBool BPC[], const cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { cmsToneCurve* out = NULL; cmsUInt32Number i; cmsHTRANSFORM xform; cmsCIELab Lab; cmsFloat32Number cmyk[4]; cmsFloat32Number* SampledPoints; xform = _cmsChain2Lab(ContextID, nProfiles, TYPE_CMYK_FLT, TYPE_Lab_DBL, Intents, hProfiles, BPC, AdaptationStates, dwFlags); if (xform == NULL) return NULL; SampledPoints = (cmsFloat32Number*) _cmsCalloc(ContextID, nPoints, sizeof(cmsFloat32Number)); if (SampledPoints == NULL) goto Error; for (i=0; i < nPoints; i++) { cmyk[0] = 0; cmyk[1] = 0; cmyk[2] = 0; cmyk[3] = (cmsFloat32Number) ((i * 100.0) / (nPoints-1)); cmsDoTransform(xform, cmyk, &Lab, 1); SampledPoints[i]= (cmsFloat32Number) (1.0 - Lab.L / 100.0); // Negate K for easier operation } out = cmsBuildTabulatedToneCurveFloat(ContextID, nPoints, SampledPoints); Error: cmsDeleteTransform(xform); if (SampledPoints) _cmsFree(ContextID, SampledPoints); return out; } // Compute Black tone curve on a CMYK -> CMYK transform. This is done by // using the proof direction on both profiles to find K->L* relationship // then joining both curves. dwFlags may include black point compensation. cmsToneCurve* _cmsBuildKToneCurve(cmsContext ContextID, cmsUInt32Number nPoints, cmsUInt32Number nProfiles, const cmsUInt32Number Intents[], const cmsHPROFILE hProfiles[], const cmsBool BPC[], const cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { cmsToneCurve *in, *out, *KTone; // Make sure CMYK -> CMYK if (cmsGetColorSpace(hProfiles[0]) != cmsSigCmykData || cmsGetColorSpace(hProfiles[nProfiles-1])!= cmsSigCmykData) return NULL; // Make sure last is an output profile if (cmsGetDeviceClass(hProfiles[nProfiles - 1]) != cmsSigOutputClass) return NULL; // Create individual curves. BPC works also as each K to L* is // computed as a BPC to zero black point in case of L* in = ComputeKToLstar(ContextID, nPoints, nProfiles - 1, Intents, hProfiles, BPC, AdaptationStates, dwFlags); if (in == NULL) return NULL; out = ComputeKToLstar(ContextID, nPoints, 1, Intents + (nProfiles - 1), &hProfiles [nProfiles - 1], BPC + (nProfiles - 1), AdaptationStates + (nProfiles - 1), dwFlags); if (out == NULL) { cmsFreeToneCurve(in); return NULL; } // Build the relationship. This effectively limits the maximum accuracy to 16 bits, but // since this is used on black-preserving LUTs, we are not losing accuracy in any case KTone = cmsJoinToneCurve(ContextID, in, out, nPoints); // Get rid of components cmsFreeToneCurve(in); cmsFreeToneCurve(out); // Something went wrong... if (KTone == NULL) return NULL; // Make sure it is monotonic if (!cmsIsToneCurveMonotonic(KTone)) { cmsFreeToneCurve(KTone); return NULL; } return KTone; } // Gamut LUT Creation ----------------------------------------------------------------------------------------- // Used by gamut & softproofing typedef struct { cmsHTRANSFORM hInput; // From whatever input color space. 16 bits to DBL cmsHTRANSFORM hForward, hReverse; // Transforms going from Lab to colorant and back cmsFloat64Number Thereshold; // The thereshold after which is considered out of gamut } GAMUTCHAIN; // This sampler does compute gamut boundaries by comparing original // values with a transform going back and forth. Values above ERR_THERESHOLD // of maximum are considered out of gamut. #define ERR_THERESHOLD 5 static int GamutSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { GAMUTCHAIN* t = (GAMUTCHAIN* ) Cargo; cmsCIELab LabIn1, LabOut1; cmsCIELab LabIn2, LabOut2; cmsUInt16Number Proof[cmsMAXCHANNELS], Proof2[cmsMAXCHANNELS]; cmsFloat64Number dE1, dE2, ErrorRatio; // Assume in-gamut by default. ErrorRatio = 1.0; // Convert input to Lab cmsDoTransform(t -> hInput, In, &LabIn1, 1); // converts from PCS to colorant. This always // does return in-gamut values, cmsDoTransform(t -> hForward, &LabIn1, Proof, 1); // Now, do the inverse, from colorant to PCS. cmsDoTransform(t -> hReverse, Proof, &LabOut1, 1); memmove(&LabIn2, &LabOut1, sizeof(cmsCIELab)); // Try again, but this time taking Check as input cmsDoTransform(t -> hForward, &LabOut1, Proof2, 1); cmsDoTransform(t -> hReverse, Proof2, &LabOut2, 1); // Take difference of direct value dE1 = cmsDeltaE(&LabIn1, &LabOut1); // Take difference of converted value dE2 = cmsDeltaE(&LabIn2, &LabOut2); // if dE1 is small and dE2 is small, value is likely to be in gamut if (dE1 < t->Thereshold && dE2 < t->Thereshold) Out[0] = 0; else { // if dE1 is small and dE2 is big, undefined. Assume in gamut if (dE1 < t->Thereshold && dE2 > t->Thereshold) Out[0] = 0; else // dE1 is big and dE2 is small, clearly out of gamut if (dE1 > t->Thereshold && dE2 < t->Thereshold) Out[0] = (cmsUInt16Number) _cmsQuickFloor((dE1 - t->Thereshold) + .5); else { // dE1 is big and dE2 is also big, could be due to perceptual mapping // so take error ratio if (dE2 == 0.0) ErrorRatio = dE1; else ErrorRatio = dE1 / dE2; if (ErrorRatio > t->Thereshold) Out[0] = (cmsUInt16Number) _cmsQuickFloor((ErrorRatio - t->Thereshold) + .5); else Out[0] = 0; } } return TRUE; } // Does compute a gamut LUT going back and forth across pcs -> relativ. colorimetric intent -> pcs // the dE obtained is then annotated on the LUT. Values truly out of gamut are clipped to dE = 0xFFFE // and values changed are supposed to be handled by any gamut remapping, so, are out of gamut as well. // // **WARNING: This algorithm does assume that gamut remapping algorithms does NOT move in-gamut colors, // of course, many perceptual and saturation intents does not work in such way, but relativ. ones should. cmsPipeline* _cmsCreateGamutCheckPipeline(cmsContext ContextID, cmsHPROFILE hProfiles[], cmsBool BPC[], cmsUInt32Number Intents[], cmsFloat64Number AdaptationStates[], cmsUInt32Number nGamutPCSposition, cmsHPROFILE hGamut) { cmsHPROFILE hLab; cmsPipeline* Gamut; cmsStage* CLUT; cmsUInt32Number dwFormat; GAMUTCHAIN Chain; cmsUInt32Number nChannels, nGridpoints; cmsColorSpaceSignature ColorSpace; cmsUInt32Number i; cmsHPROFILE ProfileList[256]; cmsBool BPCList[256]; cmsFloat64Number AdaptationList[256]; cmsUInt32Number IntentList[256]; memset(&Chain, 0, sizeof(GAMUTCHAIN)); if (nGamutPCSposition <= 0 || nGamutPCSposition > 255) { cmsSignalError(ContextID, cmsERROR_RANGE, "Wrong position of PCS. 1..255 expected, %d found.", nGamutPCSposition); return NULL; } hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); if (hLab == NULL) return NULL; // The figure of merit. On matrix-shaper profiles, should be almost zero as // the conversion is pretty exact. On LUT based profiles, different resolutions // of input and output CLUT may result in differences. if (cmsIsMatrixShaper(hGamut)) { Chain.Thereshold = 1.0; } else { Chain.Thereshold = ERR_THERESHOLD; } // Create a copy of parameters for (i=0; i < nGamutPCSposition; i++) { ProfileList[i] = hProfiles[i]; BPCList[i] = BPC[i]; AdaptationList[i] = AdaptationStates[i]; IntentList[i] = Intents[i]; } // Fill Lab identity ProfileList[nGamutPCSposition] = hLab; BPCList[nGamutPCSposition] = 0; AdaptationList[nGamutPCSposition] = 1.0; IntentList[nGamutPCSposition] = INTENT_RELATIVE_COLORIMETRIC; ColorSpace = cmsGetColorSpace(hGamut); nChannels = cmsChannelsOf(ColorSpace); nGridpoints = _cmsReasonableGridpointsByColorspace(ColorSpace, cmsFLAGS_HIGHRESPRECALC); dwFormat = (CHANNELS_SH(nChannels)|BYTES_SH(2)); // 16 bits to Lab double Chain.hInput = cmsCreateExtendedTransform(ContextID, nGamutPCSposition + 1, ProfileList, BPCList, IntentList, AdaptationList, NULL, 0, dwFormat, TYPE_Lab_DBL, cmsFLAGS_NOCACHE); // Does create the forward step. Lab double to device dwFormat = (CHANNELS_SH(nChannels)|BYTES_SH(2)); Chain.hForward = cmsCreateTransformTHR(ContextID, hLab, TYPE_Lab_DBL, hGamut, dwFormat, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); // Does create the backwards step Chain.hReverse = cmsCreateTransformTHR(ContextID, hGamut, dwFormat, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); // All ok? if (Chain.hInput && Chain.hForward && Chain.hReverse) { // Go on, try to compute gamut LUT from PCS. This consist on a single channel containing // dE when doing a transform back and forth on the colorimetric intent. Gamut = cmsPipelineAlloc(ContextID, 3, 1); if (Gamut != NULL) { CLUT = cmsStageAllocCLut16bit(ContextID, nGridpoints, nChannels, 1, NULL); if (!cmsPipelineInsertStage(Gamut, cmsAT_BEGIN, CLUT)) { cmsPipelineFree(Gamut); Gamut = NULL; } else { cmsStageSampleCLut16bit(CLUT, GamutSampler, (void*) &Chain, 0); } } } else Gamut = NULL; // Didn't work... // Free all needed stuff. if (Chain.hInput) cmsDeleteTransform(Chain.hInput); if (Chain.hForward) cmsDeleteTransform(Chain.hForward); if (Chain.hReverse) cmsDeleteTransform(Chain.hReverse); if (hLab) cmsCloseProfile(hLab); // And return computed hull return Gamut; } // Total Area Coverage estimation ---------------------------------------------------------------- typedef struct { cmsUInt32Number nOutputChans; cmsHTRANSFORM hRoundTrip; cmsFloat32Number MaxTAC; cmsFloat32Number MaxInput[cmsMAXCHANNELS]; } cmsTACestimator; // This callback just accounts the maximum ink dropped in the given node. It does not populate any // memory, as the destination table is NULL. Its only purpose it to know the global maximum. static int EstimateTAC(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void * Cargo) { cmsTACestimator* bp = (cmsTACestimator*) Cargo; cmsFloat32Number RoundTrip[cmsMAXCHANNELS]; cmsUInt32Number i; cmsFloat32Number Sum; // Evaluate the xform cmsDoTransform(bp->hRoundTrip, In, RoundTrip, 1); // All all amounts of ink for (Sum=0, i=0; i < bp ->nOutputChans; i++) Sum += RoundTrip[i]; // If above maximum, keep track of input values if (Sum > bp ->MaxTAC) { bp ->MaxTAC = Sum; for (i=0; i < bp ->nOutputChans; i++) { bp ->MaxInput[i] = In[i]; } } return TRUE; cmsUNUSED_PARAMETER(Out); } // Detect Total area coverage of the profile cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile) { cmsTACestimator bp; cmsUInt32Number dwFormatter; cmsUInt32Number GridPoints[MAX_INPUT_DIMENSIONS]; cmsHPROFILE hLab; cmsContext ContextID = cmsGetProfileContextID(hProfile); // TAC only works on output profiles if (cmsGetDeviceClass(hProfile) != cmsSigOutputClass) { return 0; } // Create a fake formatter for result dwFormatter = cmsFormatterForColorspaceOfProfile(hProfile, 4, TRUE); bp.nOutputChans = T_CHANNELS(dwFormatter); bp.MaxTAC = 0; // Initial TAC is 0 // for safety if (bp.nOutputChans >= cmsMAXCHANNELS) return 0; hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); if (hLab == NULL) return 0; // Setup a roundtrip on perceptual intent in output profile for TAC estimation bp.hRoundTrip = cmsCreateTransformTHR(ContextID, hLab, TYPE_Lab_16, hProfile, dwFormatter, INTENT_PERCEPTUAL, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_NOCACHE); cmsCloseProfile(hLab); if (bp.hRoundTrip == NULL) return 0; // For L* we only need black and white. For C* we need many points GridPoints[0] = 6; GridPoints[1] = 74; GridPoints[2] = 74; if (!cmsSliceSpace16(3, GridPoints, EstimateTAC, &bp)) { bp.MaxTAC = 0; } cmsDeleteTransform(bp.hRoundTrip); // Results in % return bp.MaxTAC; } // Carefully, clamp on CIELab space. cmsBool CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab, double amax, double amin, double bmax, double bmin) { // Whole Luma surface to zero if (Lab -> L < 0) { Lab-> L = Lab->a = Lab-> b = 0.0; return FALSE; } // Clamp white, DISCARD HIGHLIGHTS. This is done // in such way because icc spec doesn't allow the // use of L>100 as a highlight means. if (Lab->L > 100) Lab -> L = 100; // Check out gamut prism, on a, b faces if (Lab -> a < amin || Lab->a > amax|| Lab -> b < bmin || Lab->b > bmax) { cmsCIELCh LCh; double h, slope; // Falls outside a, b limits. Transports to LCh space, // and then do the clipping if (Lab -> a == 0.0) { // Is hue exactly 90? // atan will not work, so clamp here Lab -> b = Lab->b < 0 ? bmin : bmax; return TRUE; } cmsLab2LCh(&LCh, Lab); slope = Lab -> b / Lab -> a; h = LCh.h; // There are 4 zones if ((h >= 0. && h < 45.) || (h >= 315 && h <= 360.)) { // clip by amax Lab -> a = amax; Lab -> b = amax * slope; } else if (h >= 45. && h < 135.) { // clip by bmax Lab -> b = bmax; Lab -> a = bmax / slope; } else if (h >= 135. && h < 225.) { // clip by amin Lab -> a = amin; Lab -> b = amin * slope; } else if (h >= 225. && h < 315.) { // clip by bmin Lab -> b = bmin; Lab -> a = bmin / slope; } else { cmsSignalError(0, cmsERROR_RANGE, "Invalid angle"); return FALSE; } } return TRUE; } lcms2-2.12rc1/src/cmsintrp.c0000644000175000017500000011616213775114656014716 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // This module incorporates several interpolation routines, for 1 to 8 channels on input and // up to 65535 channels on output. The user may change those by using the interpolation plug-in // Some people may want to compile as C++ with all warnings on, in this case make compiler silent #ifdef _MSC_VER # if (_MSC_VER >= 1400) # pragma warning( disable : 4365 ) # endif #endif // Interpolation routines by default static cmsInterpFunction DefaultInterpolatorsFactory(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags); // This is the default factory _cmsInterpPluginChunkType _cmsInterpPluginChunk = { NULL }; // The interpolation plug-in memory chunk allocator/dup void _cmsAllocInterpPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { void* from; _cmsAssert(ctx != NULL); if (src != NULL) { from = src ->chunks[InterpPlugin]; } else { static _cmsInterpPluginChunkType InterpPluginChunk = { NULL }; from = &InterpPluginChunk; } _cmsAssert(from != NULL); ctx ->chunks[InterpPlugin] = _cmsSubAllocDup(ctx ->MemPool, from, sizeof(_cmsInterpPluginChunkType)); } // Main plug-in entry cmsBool _cmsRegisterInterpPlugin(cmsContext ContextID, cmsPluginBase* Data) { cmsPluginInterpolation* Plugin = (cmsPluginInterpolation*) Data; _cmsInterpPluginChunkType* ptr = (_cmsInterpPluginChunkType*) _cmsContextGetClientChunk(ContextID, InterpPlugin); if (Data == NULL) { ptr ->Interpolators = NULL; return TRUE; } // Set replacement functions ptr ->Interpolators = Plugin ->InterpolatorsFactory; return TRUE; } // Set the interpolation method cmsBool _cmsSetInterpolationRoutine(cmsContext ContextID, cmsInterpParams* p) { _cmsInterpPluginChunkType* ptr = (_cmsInterpPluginChunkType*) _cmsContextGetClientChunk(ContextID, InterpPlugin); p ->Interpolation.Lerp16 = NULL; // Invoke factory, possibly in the Plug-in if (ptr ->Interpolators != NULL) p ->Interpolation = ptr->Interpolators(p -> nInputs, p ->nOutputs, p ->dwFlags); // If unsupported by the plug-in, go for the LittleCMS default. // If happens only if an extern plug-in is being used if (p ->Interpolation.Lerp16 == NULL) p ->Interpolation = DefaultInterpolatorsFactory(p ->nInputs, p ->nOutputs, p ->dwFlags); // Check for valid interpolator (we just check one member of the union) if (p ->Interpolation.Lerp16 == NULL) { return FALSE; } return TRUE; } // This function precalculates as many parameters as possible to speed up the interpolation. cmsInterpParams* _cmsComputeInterpParamsEx(cmsContext ContextID, const cmsUInt32Number nSamples[], cmsUInt32Number InputChan, cmsUInt32Number OutputChan, const void *Table, cmsUInt32Number dwFlags) { cmsInterpParams* p; cmsUInt32Number i; // Check for maximum inputs if (InputChan > MAX_INPUT_DIMENSIONS) { cmsSignalError(ContextID, cmsERROR_RANGE, "Too many input channels (%d channels, max=%d)", InputChan, MAX_INPUT_DIMENSIONS); return NULL; } // Creates an empty object p = (cmsInterpParams*) _cmsMallocZero(ContextID, sizeof(cmsInterpParams)); if (p == NULL) return NULL; // Keep original parameters p -> dwFlags = dwFlags; p -> nInputs = InputChan; p -> nOutputs = OutputChan; p ->Table = Table; p ->ContextID = ContextID; // Fill samples per input direction and domain (which is number of nodes minus one) for (i=0; i < InputChan; i++) { p -> nSamples[i] = nSamples[i]; p -> Domain[i] = nSamples[i] - 1; } // Compute factors to apply to each component to index the grid array p -> opta[0] = p -> nOutputs; for (i=1; i < InputChan; i++) p ->opta[i] = p ->opta[i-1] * nSamples[InputChan-i]; if (!_cmsSetInterpolationRoutine(ContextID, p)) { cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported interpolation (%d->%d channels)", InputChan, OutputChan); _cmsFree(ContextID, p); return NULL; } // All seems ok return p; } // This one is a wrapper on the anterior, but assuming all directions have same number of nodes cmsInterpParams* CMSEXPORT _cmsComputeInterpParams(cmsContext ContextID, cmsUInt32Number nSamples, cmsUInt32Number InputChan, cmsUInt32Number OutputChan, const void* Table, cmsUInt32Number dwFlags) { int i; cmsUInt32Number Samples[MAX_INPUT_DIMENSIONS]; // Fill the auxiliary array for (i=0; i < MAX_INPUT_DIMENSIONS; i++) Samples[i] = nSamples; // Call the extended function return _cmsComputeInterpParamsEx(ContextID, Samples, InputChan, OutputChan, Table, dwFlags); } // Free all associated memory void CMSEXPORT _cmsFreeInterpParams(cmsInterpParams* p) { if (p != NULL) _cmsFree(p ->ContextID, p); } // Inline fixed point interpolation cmsINLINE CMS_NO_SANITIZE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cmsS15Fixed16Number l, cmsS15Fixed16Number h) { cmsUInt32Number dif = (cmsUInt32Number) (h - l) * a + 0x8000; dif = (dif >> 16) + l; return (cmsUInt16Number) (dif); } // Linear interpolation (Fixed-point optimized) static void LinLerp1D(CMSREGISTER const cmsUInt16Number Value[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p) { cmsUInt16Number y1, y0; int cell0, rest; int val3; const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; // if last value... if (Value[0] == 0xffff) { Output[0] = LutTable[p -> Domain[0]]; } else { val3 = p->Domain[0] * Value[0]; val3 = _cmsToFixedDomain(val3); // To fixed 15.16 cell0 = FIXED_TO_INT(val3); // Cell is 16 MSB bits rest = FIXED_REST_TO_INT(val3); // Rest is 16 LSB bits y0 = LutTable[cell0]; y1 = LutTable[cell0 + 1]; Output[0] = LinearInterp(rest, y0, y1); } } // To prevent out of bounds indexing cmsINLINE cmsFloat32Number fclamp(cmsFloat32Number v) { return ((v < 1.0e-9f) || isnan(v)) ? 0.0f : (v > 1.0f ? 1.0f : v); } // Floating-point version of 1D interpolation static void LinLerp1Dfloat(const cmsFloat32Number Value[], cmsFloat32Number Output[], const cmsInterpParams* p) { cmsFloat32Number y1, y0; cmsFloat32Number val2, rest; int cell0, cell1; const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; val2 = fclamp(Value[0]); // if last value... if (val2 == 1.0) { Output[0] = LutTable[p -> Domain[0]]; } else { val2 *= p->Domain[0]; cell0 = (int)floor(val2); cell1 = (int)ceil(val2); // Rest is 16 LSB bits rest = val2 - cell0; y0 = LutTable[cell0]; y1 = LutTable[cell1]; Output[0] = y0 + (y1 - y0) * rest; } } // Eval gray LUT having only one input channel static CMS_NO_SANITIZE void Eval1Input(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p16) { cmsS15Fixed16Number fk; cmsS15Fixed16Number k0, k1, rk, K0, K1; int v; cmsUInt32Number OutChan; const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; v = Input[0] * p16 -> Domain[0]; fk = _cmsToFixedDomain(v); k0 = FIXED_TO_INT(fk); rk = (cmsUInt16Number) FIXED_REST_TO_INT(fk); k1 = k0 + (Input[0] != 0xFFFFU ? 1 : 0); K0 = p16 -> opta[0] * k0; K1 = p16 -> opta[0] * k1; for (OutChan=0; OutChan < p16->nOutputs; OutChan++) { Output[OutChan] = LinearInterp(rk, LutTable[K0+OutChan], LutTable[K1+OutChan]); } } // Eval gray LUT having only one input channel static void Eval1InputFloat(const cmsFloat32Number Value[], cmsFloat32Number Output[], const cmsInterpParams* p) { cmsFloat32Number y1, y0; cmsFloat32Number val2, rest; int cell0, cell1; cmsUInt32Number OutChan; const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; val2 = fclamp(Value[0]); // if last value... if (val2 == 1.0) { y0 = LutTable[p->Domain[0]]; for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { Output[OutChan] = y0; } } else { val2 *= p->Domain[0]; cell0 = (int)floor(val2); cell1 = (int)ceil(val2); // Rest is 16 LSB bits rest = val2 - cell0; cell0 *= p->opta[0]; cell1 *= p->opta[0]; for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { y0 = LutTable[cell0 + OutChan]; y1 = LutTable[cell1 + OutChan]; Output[OutChan] = y0 + (y1 - y0) * rest; } } } // Bilinear interpolation (16 bits) - cmsFloat32Number version static void BilinearInterpFloat(const cmsFloat32Number Input[], cmsFloat32Number Output[], const cmsInterpParams* p) { # define LERP(a,l,h) (cmsFloat32Number) ((l)+(((h)-(l))*(a))) # define DENS(i,j) (LutTable[(i)+(j)+OutChan]) const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; cmsFloat32Number px, py; int x0, y0, X0, Y0, X1, Y1; int TotalOut, OutChan; cmsFloat32Number fx, fy, d00, d01, d10, d11, dx0, dx1, dxy; TotalOut = p -> nOutputs; px = fclamp(Input[0]) * p->Domain[0]; py = fclamp(Input[1]) * p->Domain[1]; x0 = (int) _cmsQuickFloor(px); fx = px - (cmsFloat32Number) x0; y0 = (int) _cmsQuickFloor(py); fy = py - (cmsFloat32Number) y0; X0 = p -> opta[1] * x0; X1 = X0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[1]); Y0 = p -> opta[0] * y0; Y1 = Y0 + (fclamp(Input[1]) >= 1.0 ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { d00 = DENS(X0, Y0); d01 = DENS(X0, Y1); d10 = DENS(X1, Y0); d11 = DENS(X1, Y1); dx0 = LERP(fx, d00, d10); dx1 = LERP(fx, d01, d11); dxy = LERP(fy, dx0, dx1); Output[OutChan] = dxy; } # undef LERP # undef DENS } // Bilinear interpolation (16 bits) - optimized version static CMS_NO_SANITIZE void BilinearInterp16(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p) { #define DENS(i,j) (LutTable[(i)+(j)+OutChan]) #define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a))) const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; int OutChan, TotalOut; cmsS15Fixed16Number fx, fy; CMSREGISTER int rx, ry; int x0, y0; CMSREGISTER int X0, X1, Y0, Y1; int d00, d01, d10, d11, dx0, dx1, dxy; TotalOut = p -> nOutputs; fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]); x0 = FIXED_TO_INT(fx); rx = FIXED_REST_TO_INT(fx); // Rest in 0..1.0 domain fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]); y0 = FIXED_TO_INT(fy); ry = FIXED_REST_TO_INT(fy); X0 = p -> opta[1] * x0; X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[1]); Y0 = p -> opta[0] * y0; Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { d00 = DENS(X0, Y0); d01 = DENS(X0, Y1); d10 = DENS(X1, Y0); d11 = DENS(X1, Y1); dx0 = LERP(rx, d00, d10); dx1 = LERP(rx, d01, d11); dxy = LERP(ry, dx0, dx1); Output[OutChan] = (cmsUInt16Number) dxy; } # undef LERP # undef DENS } // Trilinear interpolation (16 bits) - cmsFloat32Number version static void TrilinearInterpFloat(const cmsFloat32Number Input[], cmsFloat32Number Output[], const cmsInterpParams* p) { # define LERP(a,l,h) (cmsFloat32Number) ((l)+(((h)-(l))*(a))) # define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) const cmsFloat32Number* LutTable = (cmsFloat32Number*) p ->Table; cmsFloat32Number px, py, pz; int x0, y0, z0, X0, Y0, Z0, X1, Y1, Z1; int TotalOut, OutChan; cmsFloat32Number fx, fy, fz, d000, d001, d010, d011, d100, d101, d110, d111, dx00, dx01, dx10, dx11, dxy0, dxy1, dxyz; TotalOut = p -> nOutputs; // We need some clipping here px = fclamp(Input[0]) * p->Domain[0]; py = fclamp(Input[1]) * p->Domain[1]; pz = fclamp(Input[2]) * p->Domain[2]; x0 = (int) floor(px); fx = px - (cmsFloat32Number) x0; // We need full floor funcionality here y0 = (int) floor(py); fy = py - (cmsFloat32Number) y0; z0 = (int) floor(pz); fz = pz - (cmsFloat32Number) z0; X0 = p -> opta[2] * x0; X1 = X0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[2]); Y0 = p -> opta[1] * y0; Y1 = Y0 + (fclamp(Input[1]) >= 1.0 ? 0 : p->opta[1]); Z0 = p -> opta[0] * z0; Z1 = Z0 + (fclamp(Input[2]) >= 1.0 ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { d000 = DENS(X0, Y0, Z0); d001 = DENS(X0, Y0, Z1); d010 = DENS(X0, Y1, Z0); d011 = DENS(X0, Y1, Z1); d100 = DENS(X1, Y0, Z0); d101 = DENS(X1, Y0, Z1); d110 = DENS(X1, Y1, Z0); d111 = DENS(X1, Y1, Z1); dx00 = LERP(fx, d000, d100); dx01 = LERP(fx, d001, d101); dx10 = LERP(fx, d010, d110); dx11 = LERP(fx, d011, d111); dxy0 = LERP(fy, dx00, dx10); dxy1 = LERP(fy, dx01, dx11); dxyz = LERP(fz, dxy0, dxy1); Output[OutChan] = dxyz; } # undef LERP # undef DENS } // Trilinear interpolation (16 bits) - optimized version static CMS_NO_SANITIZE void TrilinearInterp16(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p) { #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) #define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a))) const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; int OutChan, TotalOut; cmsS15Fixed16Number fx, fy, fz; CMSREGISTER int rx, ry, rz; int x0, y0, z0; CMSREGISTER int X0, X1, Y0, Y1, Z0, Z1; int d000, d001, d010, d011, d100, d101, d110, d111, dx00, dx01, dx10, dx11, dxy0, dxy1, dxyz; TotalOut = p -> nOutputs; fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]); x0 = FIXED_TO_INT(fx); rx = FIXED_REST_TO_INT(fx); // Rest in 0..1.0 domain fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]); y0 = FIXED_TO_INT(fy); ry = FIXED_REST_TO_INT(fy); fz = _cmsToFixedDomain((int) Input[2] * p -> Domain[2]); z0 = FIXED_TO_INT(fz); rz = FIXED_REST_TO_INT(fz); X0 = p -> opta[2] * x0; X1 = X0 + (Input[0] == 0xFFFFU ? 0 : p->opta[2]); Y0 = p -> opta[1] * y0; Y1 = Y0 + (Input[1] == 0xFFFFU ? 0 : p->opta[1]); Z0 = p -> opta[0] * z0; Z1 = Z0 + (Input[2] == 0xFFFFU ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { d000 = DENS(X0, Y0, Z0); d001 = DENS(X0, Y0, Z1); d010 = DENS(X0, Y1, Z0); d011 = DENS(X0, Y1, Z1); d100 = DENS(X1, Y0, Z0); d101 = DENS(X1, Y0, Z1); d110 = DENS(X1, Y1, Z0); d111 = DENS(X1, Y1, Z1); dx00 = LERP(rx, d000, d100); dx01 = LERP(rx, d001, d101); dx10 = LERP(rx, d010, d110); dx11 = LERP(rx, d011, d111); dxy0 = LERP(ry, dx00, dx10); dxy1 = LERP(ry, dx01, dx11); dxyz = LERP(rz, dxy0, dxy1); Output[OutChan] = (cmsUInt16Number) dxyz; } # undef LERP # undef DENS } // Tetrahedral interpolation, using Sakamoto algorithm. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static void TetrahedralInterpFloat(const cmsFloat32Number Input[], cmsFloat32Number Output[], const cmsInterpParams* p) { const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; cmsFloat32Number px, py, pz; int x0, y0, z0, X0, Y0, Z0, X1, Y1, Z1; cmsFloat32Number rx, ry, rz; cmsFloat32Number c0, c1=0, c2=0, c3=0; int OutChan, TotalOut; TotalOut = p -> nOutputs; // We need some clipping here px = fclamp(Input[0]) * p->Domain[0]; py = fclamp(Input[1]) * p->Domain[1]; pz = fclamp(Input[2]) * p->Domain[2]; x0 = (int) floor(px); rx = (px - (cmsFloat32Number) x0); // We need full floor functionality here y0 = (int) floor(py); ry = (py - (cmsFloat32Number) y0); z0 = (int) floor(pz); rz = (pz - (cmsFloat32Number) z0); X0 = p -> opta[2] * x0; X1 = X0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[2]); Y0 = p -> opta[1] * y0; Y1 = Y0 + (fclamp(Input[1]) >= 1.0 ? 0 : p->opta[1]); Z0 = p -> opta[0] * z0; Z1 = Z0 + (fclamp(Input[2]) >= 1.0 ? 0 : p->opta[0]); for (OutChan=0; OutChan < TotalOut; OutChan++) { // These are the 6 Tetrahedral c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Output[OutChan] = c0 + c1 * rx + c2 * ry + c3 * rz; } } #undef DENS static CMS_NO_SANITIZE void TetrahedralInterp16(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p -> Table; cmsS15Fixed16Number fx, fy, fz; cmsS15Fixed16Number rx, ry, rz; int x0, y0, z0; cmsS15Fixed16Number c0, c1, c2, c3, Rest; cmsUInt32Number X0, X1, Y0, Y1, Z0, Z1; cmsUInt32Number TotalOut = p -> nOutputs; fx = _cmsToFixedDomain((int) Input[0] * p -> Domain[0]); fy = _cmsToFixedDomain((int) Input[1] * p -> Domain[1]); fz = _cmsToFixedDomain((int) Input[2] * p -> Domain[2]); x0 = FIXED_TO_INT(fx); y0 = FIXED_TO_INT(fy); z0 = FIXED_TO_INT(fz); rx = FIXED_REST_TO_INT(fx); ry = FIXED_REST_TO_INT(fy); rz = FIXED_REST_TO_INT(fz); X0 = p -> opta[2] * x0; X1 = (Input[0] == 0xFFFFU ? 0 : p->opta[2]); Y0 = p -> opta[1] * y0; Y1 = (Input[1] == 0xFFFFU ? 0 : p->opta[1]); Z0 = p -> opta[0] * z0; Z1 = (Input[2] == 0xFFFFU ? 0 : p->opta[0]); LutTable += X0+Y0+Z0; // Output should be computed as x = ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)) // which expands as: x = (Rest + ((Rest+0x7fff)/0xFFFF) + 0x8000)>>16 // This can be replaced by: t = Rest+0x8001, x = (t + (t>>16))>>16 // at the cost of being off by one at 7fff and 17ffe. if (rx >= ry) { if (ry >= rz) { Y1 += X1; Z1 += Y1; for (; TotalOut; TotalOut--) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c3 -= c2; c2 -= c1; c1 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; *Output++ = (cmsUInt16Number) c0 + ((Rest + (Rest>>16))>>16); } } else if (rz >= rx) { X1 += Z1; Y1 += X1; for (; TotalOut; TotalOut--) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c2 -= c1; c1 -= c3; c3 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; *Output++ = (cmsUInt16Number) c0 + ((Rest + (Rest>>16))>>16); } } else { Z1 += X1; Y1 += Z1; for (; TotalOut; TotalOut--) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c2 -= c3; c3 -= c1; c1 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; *Output++ = (cmsUInt16Number) c0 + ((Rest + (Rest>>16))>>16); } } } else { if (rx >= rz) { X1 += Y1; Z1 += X1; for (; TotalOut; TotalOut--) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c3 -= c1; c1 -= c2; c2 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; *Output++ = (cmsUInt16Number) c0 + ((Rest + (Rest>>16))>>16); } } else if (ry >= rz) { Z1 += Y1; X1 += Z1; for (; TotalOut; TotalOut--) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c1 -= c3; c3 -= c2; c2 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; *Output++ = (cmsUInt16Number) c0 + ((Rest + (Rest>>16))>>16); } } else { Y1 += Z1; X1 += Y1; for (; TotalOut; TotalOut--) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c1 -= c2; c2 -= c3; c3 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; *Output++ = (cmsUInt16Number) c0 + ((Rest + (Rest>>16))>>16); } } } } #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static CMS_NO_SANITIZE void Eval4Inputs(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable; cmsS15Fixed16Number fk; cmsS15Fixed16Number k0, rk; int K0, K1; cmsS15Fixed16Number fx, fy, fz; cmsS15Fixed16Number rx, ry, rz; int x0, y0, z0; cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; cmsUInt32Number i; cmsS15Fixed16Number c0, c1, c2, c3, Rest; cmsUInt32Number OutChan; cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; fk = _cmsToFixedDomain((int) Input[0] * p16 -> Domain[0]); fx = _cmsToFixedDomain((int) Input[1] * p16 -> Domain[1]); fy = _cmsToFixedDomain((int) Input[2] * p16 -> Domain[2]); fz = _cmsToFixedDomain((int) Input[3] * p16 -> Domain[3]); k0 = FIXED_TO_INT(fk); x0 = FIXED_TO_INT(fx); y0 = FIXED_TO_INT(fy); z0 = FIXED_TO_INT(fz); rk = FIXED_REST_TO_INT(fk); rx = FIXED_REST_TO_INT(fx); ry = FIXED_REST_TO_INT(fy); rz = FIXED_REST_TO_INT(fz); K0 = p16 -> opta[3] * k0; K1 = K0 + (Input[0] == 0xFFFFU ? 0 : p16->opta[3]); X0 = p16 -> opta[2] * x0; X1 = X0 + (Input[1] == 0xFFFFU ? 0 : p16->opta[2]); Y0 = p16 -> opta[1] * y0; Y1 = Y0 + (Input[2] == 0xFFFFU ? 0 : p16->opta[1]); Z0 = p16 -> opta[0] * z0; Z1 = Z0 + (Input[3] == 0xFFFFU ? 0 : p16->opta[0]); LutTable = (cmsUInt16Number*) p16 -> Table; LutTable += K0; for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) { c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Rest = c1 * rx + c2 * ry + c3 * rz; Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); } LutTable = (cmsUInt16Number*) p16 -> Table; LutTable += K1; for (OutChan=0; OutChan < p16 -> nOutputs; OutChan++) { c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Rest = c1 * rx + c2 * ry + c3 * rz; Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); } for (i=0; i < p16 -> nOutputs; i++) { Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]); } } #undef DENS // For more that 3 inputs (i.e., CMYK) // evaluate two 3-dimensional interpolations and then linearly interpolate between them. static void Eval4InputsFloat(const cmsFloat32Number Input[], cmsFloat32Number Output[], const cmsInterpParams* p) { const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table; cmsFloat32Number rest; cmsFloat32Number pk; int k0, K0, K1; const cmsFloat32Number* T; cmsUInt32Number i; cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS]; cmsInterpParams p1; pk = fclamp(Input[0]) * p->Domain[0]; k0 = _cmsQuickFloor(pk); rest = pk - (cmsFloat32Number) k0; K0 = p -> opta[3] * k0; K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[3]); p1 = *p; memmove(&p1.Domain[0], &p ->Domain[1], 3*sizeof(cmsUInt32Number)); T = LutTable + K0; p1.Table = T; TetrahedralInterpFloat(Input + 1, Tmp1, &p1); T = LutTable + K1; p1.Table = T; TetrahedralInterpFloat(Input + 1, Tmp2, &p1); for (i=0; i < p -> nOutputs; i++) { cmsFloat32Number y0 = Tmp1[i]; cmsFloat32Number y1 = Tmp2[i]; Output[i] = y0 + (y1 - y0) * rest; } } #define EVAL_FNS(N,NM) static CMS_NO_SANITIZE \ void Eval##N##Inputs(CMSREGISTER const cmsUInt16Number Input[], CMSREGISTER cmsUInt16Number Output[], CMSREGISTER const cmsInterpParams* p16)\ {\ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table;\ cmsS15Fixed16Number fk;\ cmsS15Fixed16Number k0, rk;\ int K0, K1;\ const cmsUInt16Number* T;\ cmsUInt32Number i;\ cmsUInt16Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];\ cmsInterpParams p1;\ \ fk = _cmsToFixedDomain((cmsS15Fixed16Number) Input[0] * p16 -> Domain[0]);\ k0 = FIXED_TO_INT(fk);\ rk = FIXED_REST_TO_INT(fk);\ \ K0 = p16 -> opta[NM] * k0;\ K1 = p16 -> opta[NM] * (k0 + (Input[0] != 0xFFFFU ? 1 : 0));\ \ p1 = *p16;\ memmove(&p1.Domain[0], &p16 ->Domain[1], NM*sizeof(cmsUInt32Number));\ \ T = LutTable + K0;\ p1.Table = T;\ \ Eval##NM##Inputs(Input + 1, Tmp1, &p1);\ \ T = LutTable + K1;\ p1.Table = T;\ \ Eval##NM##Inputs(Input + 1, Tmp2, &p1);\ \ for (i=0; i < p16 -> nOutputs; i++) {\ \ Output[i] = LinearInterp(rk, Tmp1[i], Tmp2[i]);\ }\ }\ \ static void Eval##N##InputsFloat(const cmsFloat32Number Input[], \ cmsFloat32Number Output[],\ const cmsInterpParams * p)\ {\ const cmsFloat32Number* LutTable = (cmsFloat32Number*) p -> Table;\ cmsFloat32Number rest;\ cmsFloat32Number pk;\ int k0, K0, K1;\ const cmsFloat32Number* T;\ cmsUInt32Number i;\ cmsFloat32Number Tmp1[MAX_STAGE_CHANNELS], Tmp2[MAX_STAGE_CHANNELS];\ cmsInterpParams p1;\ \ pk = fclamp(Input[0]) * p->Domain[0];\ k0 = _cmsQuickFloor(pk);\ rest = pk - (cmsFloat32Number) k0;\ \ K0 = p -> opta[NM] * k0;\ K1 = K0 + (fclamp(Input[0]) >= 1.0 ? 0 : p->opta[NM]);\ \ p1 = *p;\ memmove(&p1.Domain[0], &p ->Domain[1], NM*sizeof(cmsUInt32Number));\ \ T = LutTable + K0;\ p1.Table = T;\ \ Eval##NM##InputsFloat(Input + 1, Tmp1, &p1);\ \ T = LutTable + K1;\ p1.Table = T;\ \ Eval##NM##InputsFloat(Input + 1, Tmp2, &p1);\ \ for (i=0; i < p -> nOutputs; i++) {\ \ cmsFloat32Number y0 = Tmp1[i];\ cmsFloat32Number y1 = Tmp2[i];\ \ Output[i] = y0 + (y1 - y0) * rest;\ }\ } /** * Thanks to Carles Llopis for the templating idea */ EVAL_FNS(5, 4) EVAL_FNS(6, 5) EVAL_FNS(7, 6) EVAL_FNS(8, 7) EVAL_FNS(9, 8) EVAL_FNS(10, 9) EVAL_FNS(11, 10) EVAL_FNS(12, 11) EVAL_FNS(13, 12) EVAL_FNS(14, 13) EVAL_FNS(15, 14) // The default factory static cmsInterpFunction DefaultInterpolatorsFactory(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags) { cmsInterpFunction Interpolation; cmsBool IsFloat = (dwFlags & CMS_LERP_FLAGS_FLOAT); cmsBool IsTrilinear = (dwFlags & CMS_LERP_FLAGS_TRILINEAR); memset(&Interpolation, 0, sizeof(Interpolation)); // Safety check if (nInputChannels >= 4 && nOutputChannels >= MAX_STAGE_CHANNELS) return Interpolation; switch (nInputChannels) { case 1: // Gray LUT / linear if (nOutputChannels == 1) { if (IsFloat) Interpolation.LerpFloat = LinLerp1Dfloat; else Interpolation.Lerp16 = LinLerp1D; } else { if (IsFloat) Interpolation.LerpFloat = Eval1InputFloat; else Interpolation.Lerp16 = Eval1Input; } break; case 2: // Duotone if (IsFloat) Interpolation.LerpFloat = BilinearInterpFloat; else Interpolation.Lerp16 = BilinearInterp16; break; case 3: // RGB et al if (IsTrilinear) { if (IsFloat) Interpolation.LerpFloat = TrilinearInterpFloat; else Interpolation.Lerp16 = TrilinearInterp16; } else { if (IsFloat) Interpolation.LerpFloat = TetrahedralInterpFloat; else { Interpolation.Lerp16 = TetrahedralInterp16; } } break; case 4: // CMYK lut if (IsFloat) Interpolation.LerpFloat = Eval4InputsFloat; else Interpolation.Lerp16 = Eval4Inputs; break; case 5: // 5 Inks if (IsFloat) Interpolation.LerpFloat = Eval5InputsFloat; else Interpolation.Lerp16 = Eval5Inputs; break; case 6: // 6 Inks if (IsFloat) Interpolation.LerpFloat = Eval6InputsFloat; else Interpolation.Lerp16 = Eval6Inputs; break; case 7: // 7 inks if (IsFloat) Interpolation.LerpFloat = Eval7InputsFloat; else Interpolation.Lerp16 = Eval7Inputs; break; case 8: // 8 inks if (IsFloat) Interpolation.LerpFloat = Eval8InputsFloat; else Interpolation.Lerp16 = Eval8Inputs; break; case 9: if (IsFloat) Interpolation.LerpFloat = Eval9InputsFloat; else Interpolation.Lerp16 = Eval9Inputs; break; case 10: if (IsFloat) Interpolation.LerpFloat = Eval10InputsFloat; else Interpolation.Lerp16 = Eval10Inputs; break; case 11: if (IsFloat) Interpolation.LerpFloat = Eval11InputsFloat; else Interpolation.Lerp16 = Eval11Inputs; break; case 12: if (IsFloat) Interpolation.LerpFloat = Eval12InputsFloat; else Interpolation.Lerp16 = Eval12Inputs; break; case 13: if (IsFloat) Interpolation.LerpFloat = Eval13InputsFloat; else Interpolation.Lerp16 = Eval13Inputs; break; case 14: if (IsFloat) Interpolation.LerpFloat = Eval14InputsFloat; else Interpolation.Lerp16 = Eval14Inputs; break; case 15: if (IsFloat) Interpolation.LerpFloat = Eval15InputsFloat; else Interpolation.Lerp16 = Eval15Inputs; break; default: Interpolation.Lerp16 = NULL; } return Interpolation; } lcms2-2.12rc1/src/cmswtpnt.c0000644000175000017500000002530513775114656014734 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // D50 - Widely used const cmsCIEXYZ* CMSEXPORT cmsD50_XYZ(void) { static cmsCIEXYZ D50XYZ = {cmsD50X, cmsD50Y, cmsD50Z}; return &D50XYZ; } const cmsCIExyY* CMSEXPORT cmsD50_xyY(void) { static cmsCIExyY D50xyY; cmsXYZ2xyY(&D50xyY, cmsD50_XYZ()); return &D50xyY; } // Obtains WhitePoint from Temperature cmsBool CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number TempK) { cmsFloat64Number x, y; cmsFloat64Number T, T2, T3; // cmsFloat64Number M1, M2; _cmsAssert(WhitePoint != NULL); T = TempK; T2 = T*T; // Square T3 = T2*T; // Cube // For correlated color temperature (T) between 4000K and 7000K: if (T >= 4000. && T <= 7000.) { x = -4.6070*(1E9/T3) + 2.9678*(1E6/T2) + 0.09911*(1E3/T) + 0.244063; } else // or for correlated color temperature (T) between 7000K and 25000K: if (T > 7000.0 && T <= 25000.0) { x = -2.0064*(1E9/T3) + 1.9018*(1E6/T2) + 0.24748*(1E3/T) + 0.237040; } else { cmsSignalError(0, cmsERROR_RANGE, "cmsWhitePointFromTemp: invalid temp"); return FALSE; } // Obtain y(x) y = -3.000*(x*x) + 2.870*x - 0.275; // wave factors (not used, but here for futures extensions) // M1 = (-1.3515 - 1.7703*x + 5.9114 *y)/(0.0241 + 0.2562*x - 0.7341*y); // M2 = (0.0300 - 31.4424*x + 30.0717*y)/(0.0241 + 0.2562*x - 0.7341*y); WhitePoint -> x = x; WhitePoint -> y = y; WhitePoint -> Y = 1.0; return TRUE; } typedef struct { cmsFloat64Number mirek; // temp (in microreciprocal kelvin) cmsFloat64Number ut; // u coord of intersection w/ blackbody locus cmsFloat64Number vt; // v coord of intersection w/ blackbody locus cmsFloat64Number tt; // slope of ISOTEMPERATURE. line } ISOTEMPERATURE; static const ISOTEMPERATURE isotempdata[] = { // {Mirek, Ut, Vt, Tt } {0, 0.18006, 0.26352, -0.24341}, {10, 0.18066, 0.26589, -0.25479}, {20, 0.18133, 0.26846, -0.26876}, {30, 0.18208, 0.27119, -0.28539}, {40, 0.18293, 0.27407, -0.30470}, {50, 0.18388, 0.27709, -0.32675}, {60, 0.18494, 0.28021, -0.35156}, {70, 0.18611, 0.28342, -0.37915}, {80, 0.18740, 0.28668, -0.40955}, {90, 0.18880, 0.28997, -0.44278}, {100, 0.19032, 0.29326, -0.47888}, {125, 0.19462, 0.30141, -0.58204}, {150, 0.19962, 0.30921, -0.70471}, {175, 0.20525, 0.31647, -0.84901}, {200, 0.21142, 0.32312, -1.0182 }, {225, 0.21807, 0.32909, -1.2168 }, {250, 0.22511, 0.33439, -1.4512 }, {275, 0.23247, 0.33904, -1.7298 }, {300, 0.24010, 0.34308, -2.0637 }, {325, 0.24702, 0.34655, -2.4681 }, {350, 0.25591, 0.34951, -2.9641 }, {375, 0.26400, 0.35200, -3.5814 }, {400, 0.27218, 0.35407, -4.3633 }, {425, 0.28039, 0.35577, -5.3762 }, {450, 0.28863, 0.35714, -6.7262 }, {475, 0.29685, 0.35823, -8.5955 }, {500, 0.30505, 0.35907, -11.324 }, {525, 0.31320, 0.35968, -15.628 }, {550, 0.32129, 0.36011, -23.325 }, {575, 0.32931, 0.36038, -40.770 }, {600, 0.33724, 0.36051, -116.45 } }; #define NISO sizeof(isotempdata)/sizeof(ISOTEMPERATURE) // Robertson's method cmsBool CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint) { cmsUInt32Number j; cmsFloat64Number us,vs; cmsFloat64Number uj,vj,tj,di,dj,mi,mj; cmsFloat64Number xs, ys; _cmsAssert(WhitePoint != NULL); _cmsAssert(TempK != NULL); di = mi = 0; xs = WhitePoint -> x; ys = WhitePoint -> y; // convert (x,y) to CIE 1960 (u,WhitePoint) us = (2*xs) / (-xs + 6*ys + 1.5); vs = (3*ys) / (-xs + 6*ys + 1.5); for (j=0; j < NISO; j++) { uj = isotempdata[j].ut; vj = isotempdata[j].vt; tj = isotempdata[j].tt; mj = isotempdata[j].mirek; dj = ((vs - vj) - tj * (us - uj)) / sqrt(1.0 + tj * tj); if ((j != 0) && (di/dj < 0.0)) { // Found a match *TempK = 1000000.0 / (mi + (di / (di - dj)) * (mj - mi)); return TRUE; } di = dj; mi = mj; } // Not found return FALSE; } // Compute chromatic adaptation matrix using Chad as cone matrix static cmsBool ComputeChromaticAdaptation(cmsMAT3* Conversion, const cmsCIEXYZ* SourceWhitePoint, const cmsCIEXYZ* DestWhitePoint, const cmsMAT3* Chad) { cmsMAT3 Chad_Inv; cmsVEC3 ConeSourceXYZ, ConeSourceRGB; cmsVEC3 ConeDestXYZ, ConeDestRGB; cmsMAT3 Cone, Tmp; Tmp = *Chad; if (!_cmsMAT3inverse(&Tmp, &Chad_Inv)) return FALSE; _cmsVEC3init(&ConeSourceXYZ, SourceWhitePoint -> X, SourceWhitePoint -> Y, SourceWhitePoint -> Z); _cmsVEC3init(&ConeDestXYZ, DestWhitePoint -> X, DestWhitePoint -> Y, DestWhitePoint -> Z); _cmsMAT3eval(&ConeSourceRGB, Chad, &ConeSourceXYZ); _cmsMAT3eval(&ConeDestRGB, Chad, &ConeDestXYZ); // Build matrix _cmsVEC3init(&Cone.v[0], ConeDestRGB.n[0]/ConeSourceRGB.n[0], 0.0, 0.0); _cmsVEC3init(&Cone.v[1], 0.0, ConeDestRGB.n[1]/ConeSourceRGB.n[1], 0.0); _cmsVEC3init(&Cone.v[2], 0.0, 0.0, ConeDestRGB.n[2]/ConeSourceRGB.n[2]); // Normalize _cmsMAT3per(&Tmp, &Cone, Chad); _cmsMAT3per(Conversion, &Chad_Inv, &Tmp); return TRUE; } // Returns the final chrmatic adaptation from illuminant FromIll to Illuminant ToIll // The cone matrix can be specified in ConeMatrix. If NULL, Bradford is assumed cmsBool _cmsAdaptationMatrix(cmsMAT3* r, const cmsMAT3* ConeMatrix, const cmsCIEXYZ* FromIll, const cmsCIEXYZ* ToIll) { cmsMAT3 LamRigg = {{ // Bradford matrix {{ 0.8951, 0.2664, -0.1614 }}, {{ -0.7502, 1.7135, 0.0367 }}, {{ 0.0389, -0.0685, 1.0296 }} }}; if (ConeMatrix == NULL) ConeMatrix = &LamRigg; return ComputeChromaticAdaptation(r, FromIll, ToIll, ConeMatrix); } // Same as anterior, but assuming D50 destination. White point is given in xyY static cmsBool _cmsAdaptMatrixToD50(cmsMAT3* r, const cmsCIExyY* SourceWhitePt) { cmsCIEXYZ Dn; cmsMAT3 Bradford; cmsMAT3 Tmp; cmsxyY2XYZ(&Dn, SourceWhitePt); if (!_cmsAdaptationMatrix(&Bradford, NULL, &Dn, cmsD50_XYZ())) return FALSE; Tmp = *r; _cmsMAT3per(r, &Bradford, &Tmp); return TRUE; } // Build a White point, primary chromas transfer matrix from RGB to CIE XYZ // This is just an approximation, I am not handling all the non-linear // aspects of the RGB to XYZ process, and assumming that the gamma correction // has transitive property in the transformation chain. // // the alghoritm: // // - First I build the absolute conversion matrix using // primaries in XYZ. This matrix is next inverted // - Then I eval the source white point across this matrix // obtaining the coeficients of the transformation // - Then, I apply these coeficients to the original matrix // cmsBool _cmsBuildRGB2XYZtransferMatrix(cmsMAT3* r, const cmsCIExyY* WhitePt, const cmsCIExyYTRIPLE* Primrs) { cmsVEC3 WhitePoint, Coef; cmsMAT3 Result, Primaries; cmsFloat64Number xn, yn; cmsFloat64Number xr, yr; cmsFloat64Number xg, yg; cmsFloat64Number xb, yb; xn = WhitePt -> x; yn = WhitePt -> y; xr = Primrs -> Red.x; yr = Primrs -> Red.y; xg = Primrs -> Green.x; yg = Primrs -> Green.y; xb = Primrs -> Blue.x; yb = Primrs -> Blue.y; // Build Primaries matrix _cmsVEC3init(&Primaries.v[0], xr, xg, xb); _cmsVEC3init(&Primaries.v[1], yr, yg, yb); _cmsVEC3init(&Primaries.v[2], (1-xr-yr), (1-xg-yg), (1-xb-yb)); // Result = Primaries ^ (-1) inverse matrix if (!_cmsMAT3inverse(&Primaries, &Result)) return FALSE; _cmsVEC3init(&WhitePoint, xn/yn, 1.0, (1.0-xn-yn)/yn); // Across inverse primaries ... _cmsMAT3eval(&Coef, &Result, &WhitePoint); // Give us the Coefs, then I build transformation matrix _cmsVEC3init(&r -> v[0], Coef.n[VX]*xr, Coef.n[VY]*xg, Coef.n[VZ]*xb); _cmsVEC3init(&r -> v[1], Coef.n[VX]*yr, Coef.n[VY]*yg, Coef.n[VZ]*yb); _cmsVEC3init(&r -> v[2], Coef.n[VX]*(1.0-xr-yr), Coef.n[VY]*(1.0-xg-yg), Coef.n[VZ]*(1.0-xb-yb)); return _cmsAdaptMatrixToD50(r, WhitePt); } // Adapts a color to a given illuminant. Original color is expected to have // a SourceWhitePt white point. cmsBool CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, const cmsCIEXYZ* SourceWhitePt, const cmsCIEXYZ* Illuminant, const cmsCIEXYZ* Value) { cmsMAT3 Bradford; cmsVEC3 In, Out; _cmsAssert(Result != NULL); _cmsAssert(SourceWhitePt != NULL); _cmsAssert(Illuminant != NULL); _cmsAssert(Value != NULL); if (!_cmsAdaptationMatrix(&Bradford, NULL, SourceWhitePt, Illuminant)) return FALSE; _cmsVEC3init(&In, Value -> X, Value -> Y, Value -> Z); _cmsMAT3eval(&Out, &Bradford, &In); Result -> X = Out.n[0]; Result -> Y = Out.n[1]; Result -> Z = Out.n[2]; return TRUE; } lcms2-2.12rc1/src/Makefile.am0000644000175000017500000000162213775114656014741 0ustar martimarti# # Makefile for building lcms 2 library # # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign # CFLAGS = -pedantic -Wall -std=c99 -O3 includedir = ${prefix}/include # Shared libraries built in this directory lib_LTLIBRARIES = liblcms2.la LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBRARY_AGE = @LIBRARY_AGE@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include liblcms2_la_LDFLAGS = -no-undefined \ -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS) liblcms2_la_SOURCES = \ cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \ cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \ cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \ cmshalf.c cmsalpha.c lcms2_internal.h lcms2-2.12rc1/src/cmsio0.c0000644000175000017500000016333313775114656014253 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Generic I/O, tag dictionary management, profile struct // IOhandlers are abstractions used by littleCMS to read from whatever file, stream, // memory block or any storage. Each IOhandler provides implementations for read, // write, seek and tell functions. LittleCMS code deals with IO across those objects. // In this way, is easier to add support for new storage media. // NULL stream, for taking care of used space ------------------------------------- // NULL IOhandler basically does nothing but keep track on how many bytes have been // written. This is handy when creating profiles, where the file size is needed in the // header. Then, whole profile is serialized across NULL IOhandler and a second pass // writes the bytes to the pertinent IOhandler. typedef struct { cmsUInt32Number Pointer; // Points to current location } FILENULL; static cmsUInt32Number NULLRead(cmsIOHANDLER* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count) { FILENULL* ResData = (FILENULL*) iohandler ->stream; cmsUInt32Number len = size * count; ResData -> Pointer += len; return count; cmsUNUSED_PARAMETER(Buffer); } static cmsBool NULLSeek(cmsIOHANDLER* iohandler, cmsUInt32Number offset) { FILENULL* ResData = (FILENULL*) iohandler ->stream; ResData ->Pointer = offset; return TRUE; } static cmsUInt32Number NULLTell(cmsIOHANDLER* iohandler) { FILENULL* ResData = (FILENULL*) iohandler ->stream; return ResData -> Pointer; } static cmsBool NULLWrite(cmsIOHANDLER* iohandler, cmsUInt32Number size, const void *Ptr) { FILENULL* ResData = (FILENULL*) iohandler ->stream; ResData ->Pointer += size; if (ResData ->Pointer > iohandler->UsedSpace) iohandler->UsedSpace = ResData ->Pointer; return TRUE; cmsUNUSED_PARAMETER(Ptr); } static cmsBool NULLClose(cmsIOHANDLER* iohandler) { FILENULL* ResData = (FILENULL*) iohandler ->stream; _cmsFree(iohandler ->ContextID, ResData); _cmsFree(iohandler ->ContextID, iohandler); return TRUE; } // The NULL IOhandler creator cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID) { struct _cms_io_handler* iohandler = NULL; FILENULL* fm = NULL; iohandler = (struct _cms_io_handler*) _cmsMallocZero(ContextID, sizeof(struct _cms_io_handler)); if (iohandler == NULL) return NULL; fm = (FILENULL*) _cmsMallocZero(ContextID, sizeof(FILENULL)); if (fm == NULL) goto Error; fm ->Pointer = 0; iohandler ->ContextID = ContextID; iohandler ->stream = (void*) fm; iohandler ->UsedSpace = 0; iohandler ->ReportedSize = 0; iohandler ->PhysicalFile[0] = 0; iohandler ->Read = NULLRead; iohandler ->Seek = NULLSeek; iohandler ->Close = NULLClose; iohandler ->Tell = NULLTell; iohandler ->Write = NULLWrite; return iohandler; Error: if (iohandler) _cmsFree(ContextID, iohandler); return NULL; } // Memory-based stream -------------------------------------------------------------- // Those functions implements an iohandler which takes a block of memory as storage medium. typedef struct { cmsUInt8Number* Block; // Points to allocated memory cmsUInt32Number Size; // Size of allocated memory cmsUInt32Number Pointer; // Points to current location int FreeBlockOnClose; // As title } FILEMEM; static cmsUInt32Number MemoryRead(struct _cms_io_handler* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count) { FILEMEM* ResData = (FILEMEM*) iohandler ->stream; cmsUInt8Number* Ptr; cmsUInt32Number len = size * count; if (ResData -> Pointer + len > ResData -> Size){ len = (ResData -> Size - ResData -> Pointer); cmsSignalError(iohandler ->ContextID, cmsERROR_READ, "Read from memory error. Got %d bytes, block should be of %d bytes", len, count * size); return 0; } Ptr = ResData -> Block; Ptr += ResData -> Pointer; memmove(Buffer, Ptr, len); ResData -> Pointer += len; return count; } // SEEK_CUR is assumed static cmsBool MemorySeek(struct _cms_io_handler* iohandler, cmsUInt32Number offset) { FILEMEM* ResData = (FILEMEM*) iohandler ->stream; if (offset > ResData ->Size) { cmsSignalError(iohandler ->ContextID, cmsERROR_SEEK, "Too few data; probably corrupted profile"); return FALSE; } ResData ->Pointer = offset; return TRUE; } // Tell for memory static cmsUInt32Number MemoryTell(struct _cms_io_handler* iohandler) { FILEMEM* ResData = (FILEMEM*) iohandler ->stream; if (ResData == NULL) return 0; return ResData -> Pointer; } // Writes data to memory, also keeps used space for further reference. static cmsBool MemoryWrite(struct _cms_io_handler* iohandler, cmsUInt32Number size, const void *Ptr) { FILEMEM* ResData = (FILEMEM*) iohandler ->stream; if (ResData == NULL) return FALSE; // Housekeeping // Check for available space. Clip. if (ResData->Pointer + size > ResData->Size) { size = ResData ->Size - ResData->Pointer; } if (size == 0) return TRUE; // Write zero bytes is ok, but does nothing memmove(ResData ->Block + ResData ->Pointer, Ptr, size); ResData ->Pointer += size; if (ResData ->Pointer > iohandler->UsedSpace) iohandler->UsedSpace = ResData ->Pointer; return TRUE; } static cmsBool MemoryClose(struct _cms_io_handler* iohandler) { FILEMEM* ResData = (FILEMEM*) iohandler ->stream; if (ResData ->FreeBlockOnClose) { if (ResData ->Block) _cmsFree(iohandler ->ContextID, ResData ->Block); } _cmsFree(iohandler ->ContextID, ResData); _cmsFree(iohandler ->ContextID, iohandler); return TRUE; } // Create a iohandler for memory block. AccessMode=='r' assumes the iohandler is going to read, and makes // a copy of the memory block for letting user to free the memory after invoking open profile. In write // mode ("w"), Buffer points to the begin of memory block to be written. cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode) { cmsIOHANDLER* iohandler = NULL; FILEMEM* fm = NULL; _cmsAssert(AccessMode != NULL); iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER)); if (iohandler == NULL) return NULL; switch (*AccessMode) { case 'r': fm = (FILEMEM*) _cmsMallocZero(ContextID, sizeof(FILEMEM)); if (fm == NULL) goto Error; if (Buffer == NULL) { cmsSignalError(ContextID, cmsERROR_READ, "Couldn't read profile from NULL pointer"); goto Error; } fm ->Block = (cmsUInt8Number*) _cmsMalloc(ContextID, size); if (fm ->Block == NULL) { _cmsFree(ContextID, fm); _cmsFree(ContextID, iohandler); cmsSignalError(ContextID, cmsERROR_READ, "Couldn't allocate %ld bytes for profile", (long) size); return NULL; } memmove(fm->Block, Buffer, size); fm ->FreeBlockOnClose = TRUE; fm ->Size = size; fm ->Pointer = 0; iohandler -> ReportedSize = size; break; case 'w': fm = (FILEMEM*) _cmsMallocZero(ContextID, sizeof(FILEMEM)); if (fm == NULL) goto Error; fm ->Block = (cmsUInt8Number*) Buffer; fm ->FreeBlockOnClose = FALSE; fm ->Size = size; fm ->Pointer = 0; iohandler -> ReportedSize = 0; break; default: cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown access mode '%c'", *AccessMode); return NULL; } iohandler ->ContextID = ContextID; iohandler ->stream = (void*) fm; iohandler ->UsedSpace = 0; iohandler ->PhysicalFile[0] = 0; iohandler ->Read = MemoryRead; iohandler ->Seek = MemorySeek; iohandler ->Close = MemoryClose; iohandler ->Tell = MemoryTell; iohandler ->Write = MemoryWrite; return iohandler; Error: if (fm) _cmsFree(ContextID, fm); if (iohandler) _cmsFree(ContextID, iohandler); return NULL; } // File-based stream ------------------------------------------------------- // Read count elements of size bytes each. Return number of elements read static cmsUInt32Number FileRead(cmsIOHANDLER* iohandler, void *Buffer, cmsUInt32Number size, cmsUInt32Number count) { cmsUInt32Number nReaded = (cmsUInt32Number) fread(Buffer, size, count, (FILE*) iohandler->stream); if (nReaded != count) { cmsSignalError(iohandler ->ContextID, cmsERROR_FILE, "Read error. Got %d bytes, block should be of %d bytes", nReaded * size, count * size); return 0; } return nReaded; } // Position file pointer in the file static cmsBool FileSeek(cmsIOHANDLER* iohandler, cmsUInt32Number offset) { if (fseek((FILE*) iohandler ->stream, (long) offset, SEEK_SET) != 0) { cmsSignalError(iohandler ->ContextID, cmsERROR_FILE, "Seek error; probably corrupted file"); return FALSE; } return TRUE; } // Returns file pointer position or 0 on error, which is also a valid position. static cmsUInt32Number FileTell(cmsIOHANDLER* iohandler) { long t = ftell((FILE*)iohandler ->stream); if (t == -1L) { cmsSignalError(iohandler->ContextID, cmsERROR_FILE, "Tell error; probably corrupted file"); return 0; } return (cmsUInt32Number)t; } // Writes data to stream, also keeps used space for further reference. Returns TRUE on success, FALSE on error static cmsBool FileWrite(cmsIOHANDLER* iohandler, cmsUInt32Number size, const void* Buffer) { if (size == 0) return TRUE; // We allow to write 0 bytes, but nothing is written iohandler->UsedSpace += size; return (fwrite(Buffer, size, 1, (FILE*)iohandler->stream) == 1); } // Closes the file static cmsBool FileClose(cmsIOHANDLER* iohandler) { if (fclose((FILE*) iohandler ->stream) != 0) return FALSE; _cmsFree(iohandler ->ContextID, iohandler); return TRUE; } // Create a iohandler for disk based files. cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode) { cmsIOHANDLER* iohandler = NULL; FILE* fm = NULL; cmsInt32Number fileLen; _cmsAssert(FileName != NULL); _cmsAssert(AccessMode != NULL); iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER)); if (iohandler == NULL) return NULL; switch (*AccessMode) { case 'r': fm = fopen(FileName, "rb"); if (fm == NULL) { _cmsFree(ContextID, iohandler); cmsSignalError(ContextID, cmsERROR_FILE, "File '%s' not found", FileName); return NULL; } fileLen = cmsfilelength(fm); if (fileLen < 0) { fclose(fm); _cmsFree(ContextID, iohandler); cmsSignalError(ContextID, cmsERROR_FILE, "Cannot get size of file '%s'", FileName); return NULL; } iohandler -> ReportedSize = (cmsUInt32Number) fileLen; break; case 'w': fm = fopen(FileName, "wb"); if (fm == NULL) { _cmsFree(ContextID, iohandler); cmsSignalError(ContextID, cmsERROR_FILE, "Couldn't create '%s'", FileName); return NULL; } iohandler -> ReportedSize = 0; break; default: _cmsFree(ContextID, iohandler); cmsSignalError(ContextID, cmsERROR_FILE, "Unknown access mode '%c'", *AccessMode); return NULL; } iohandler ->ContextID = ContextID; iohandler ->stream = (void*) fm; iohandler ->UsedSpace = 0; // Keep track of the original file strncpy(iohandler -> PhysicalFile, FileName, sizeof(iohandler -> PhysicalFile)-1); iohandler -> PhysicalFile[sizeof(iohandler -> PhysicalFile)-1] = 0; iohandler ->Read = FileRead; iohandler ->Seek = FileSeek; iohandler ->Close = FileClose; iohandler ->Tell = FileTell; iohandler ->Write = FileWrite; return iohandler; } // Create a iohandler for stream based files cmsIOHANDLER* CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream) { cmsIOHANDLER* iohandler = NULL; cmsInt32Number fileSize; fileSize = cmsfilelength(Stream); if (fileSize < 0) { cmsSignalError(ContextID, cmsERROR_FILE, "Cannot get size of stream"); return NULL; } iohandler = (cmsIOHANDLER*) _cmsMallocZero(ContextID, sizeof(cmsIOHANDLER)); if (iohandler == NULL) return NULL; iohandler -> ContextID = ContextID; iohandler -> stream = (void*) Stream; iohandler -> UsedSpace = 0; iohandler -> ReportedSize = (cmsUInt32Number) fileSize; iohandler -> PhysicalFile[0] = 0; iohandler ->Read = FileRead; iohandler ->Seek = FileSeek; iohandler ->Close = FileClose; iohandler ->Tell = FileTell; iohandler ->Write = FileWrite; return iohandler; } // Close an open IO handler cmsBool CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io) { return io -> Close(io); } // ------------------------------------------------------------------------------------------------------- cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*)hProfile; if (Icc == NULL) return NULL; return Icc->IOhandler; } // Creates an empty structure holding all required parameters cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID) { time_t now = time(NULL); _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) _cmsMallocZero(ContextID, sizeof(_cmsICCPROFILE)); if (Icc == NULL) return NULL; Icc ->ContextID = ContextID; // Set it to empty Icc -> TagCount = 0; // Set default version Icc ->Version = 0x02100000; // Set creation date/time memmove(&Icc ->Created, gmtime(&now), sizeof(Icc ->Created)); // Create a mutex if the user provided proper plugin. NULL otherwise Icc ->UsrMutex = _cmsCreateMutex(ContextID); // Return the handle return (cmsHPROFILE) Icc; } cmsContext CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; if (Icc == NULL) return NULL; return Icc -> ContextID; } // Return the number of tags cmsInt32Number CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; if (Icc == NULL) return -1; return (cmsInt32Number) Icc->TagCount; } // Return the tag signature of a given tag number cmsTagSignature CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; if (n > Icc->TagCount) return (cmsTagSignature) 0; // Mark as not available if (n >= MAX_TABLE_TAG) return (cmsTagSignature) 0; // As double check return Icc ->TagNames[n]; } static int SearchOneTag(_cmsICCPROFILE* Profile, cmsTagSignature sig) { int i; for (i=0; i < (int) Profile -> TagCount; i++) { if (sig == Profile -> TagNames[i]) return i; } return -1; } // Search for a specific tag in tag dictionary. Returns position or -1 if tag not found. // If followlinks is turned on, then the position of the linked tag is returned int _cmsSearchTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, cmsBool lFollowLinks) { int n; cmsTagSignature LinkedSig; do { // Search for given tag in ICC profile directory n = SearchOneTag(Icc, sig); if (n < 0) return -1; // Not found if (!lFollowLinks) return n; // Found, don't follow links // Is this a linked tag? LinkedSig = Icc ->TagLinked[n]; // Yes, follow link if (LinkedSig != (cmsTagSignature) 0) { sig = LinkedSig; } } while (LinkedSig != (cmsTagSignature) 0); return n; } // Deletes a tag entry static void _cmsDeleteTagByPos(_cmsICCPROFILE* Icc, int i) { _cmsAssert(Icc != NULL); _cmsAssert(i >= 0); if (Icc -> TagPtrs[i] != NULL) { // Free previous version if (Icc ->TagSaveAsRaw[i]) { _cmsFree(Icc ->ContextID, Icc ->TagPtrs[i]); } else { cmsTagTypeHandler* TypeHandler = Icc ->TagTypeHandlers[i]; if (TypeHandler != NULL) { cmsTagTypeHandler LocalTypeHandler = *TypeHandler; LocalTypeHandler.ContextID = Icc ->ContextID; // As an additional parameter LocalTypeHandler.ICCVersion = Icc ->Version; LocalTypeHandler.FreePtr(&LocalTypeHandler, Icc -> TagPtrs[i]); Icc ->TagPtrs[i] = NULL; } } } } // Creates a new tag entry static cmsBool _cmsNewTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, int* NewPos) { int i; // Search for the tag i = _cmsSearchTag(Icc, sig, FALSE); if (i >= 0) { // Already exists? delete it _cmsDeleteTagByPos(Icc, i); *NewPos = i; } else { // No, make a new one if (Icc -> TagCount >= MAX_TABLE_TAG) { cmsSignalError(Icc ->ContextID, cmsERROR_RANGE, "Too many tags (%d)", MAX_TABLE_TAG); return FALSE; } *NewPos = (int) Icc ->TagCount; Icc -> TagCount++; } return TRUE; } // Check existence cmsBool CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) (void*) hProfile; return _cmsSearchTag(Icc, sig, FALSE) >= 0; } // Enforces that the profile version is per. spec. // Operates on the big endian bytes from the profile. // Called before converting to platform endianness. // Byte 0 is BCD major version, so max 9. // Byte 1 is 2 BCD digits, one per nibble. // Reserved bytes 2 & 3 must be 0. static cmsUInt32Number _validatedVersion(cmsUInt32Number DWord) { cmsUInt8Number* pByte = (cmsUInt8Number*) &DWord; cmsUInt8Number temp1; cmsUInt8Number temp2; if (*pByte > 0x09) *pByte = (cmsUInt8Number) 0x09; temp1 = (cmsUInt8Number) (*(pByte+1) & 0xf0); temp2 = (cmsUInt8Number) (*(pByte+1) & 0x0f); if (temp1 > 0x90U) temp1 = 0x90U; if (temp2 > 0x09U) temp2 = 0x09U; *(pByte+1) = (cmsUInt8Number)(temp1 | temp2); *(pByte+2) = (cmsUInt8Number)0; *(pByte+3) = (cmsUInt8Number)0; return DWord; } // Read profile header and validate it cmsBool _cmsReadHeader(_cmsICCPROFILE* Icc) { cmsTagEntry Tag; cmsICCHeader Header; cmsUInt32Number i, j; cmsUInt32Number HeaderSize; cmsIOHANDLER* io = Icc ->IOhandler; cmsUInt32Number TagCount; // Read the header if (io -> Read(io, &Header, sizeof(cmsICCHeader), 1) != 1) { return FALSE; } // Validate file as an ICC profile if (_cmsAdjustEndianess32(Header.magic) != cmsMagicNumber) { cmsSignalError(Icc ->ContextID, cmsERROR_BAD_SIGNATURE, "not an ICC profile, invalid signature"); return FALSE; } // Adjust endianness of the used parameters Icc -> DeviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Header.deviceClass); Icc -> ColorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.colorSpace); Icc -> PCS = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.pcs); Icc -> RenderingIntent = _cmsAdjustEndianess32(Header.renderingIntent); Icc -> flags = _cmsAdjustEndianess32(Header.flags); Icc -> manufacturer = _cmsAdjustEndianess32(Header.manufacturer); Icc -> model = _cmsAdjustEndianess32(Header.model); Icc -> creator = _cmsAdjustEndianess32(Header.creator); _cmsAdjustEndianess64(&Icc -> attributes, &Header.attributes); Icc -> Version = _cmsAdjustEndianess32(_validatedVersion(Header.version)); // Get size as reported in header HeaderSize = _cmsAdjustEndianess32(Header.size); // Make sure HeaderSize is lower than profile size if (HeaderSize >= Icc ->IOhandler ->ReportedSize) HeaderSize = Icc ->IOhandler ->ReportedSize; // Get creation date/time _cmsDecodeDateTimeNumber(&Header.date, &Icc ->Created); // The profile ID are 32 raw bytes memmove(Icc ->ProfileID.ID32, Header.profileID.ID32, 16); // Read tag directory if (!_cmsReadUInt32Number(io, &TagCount)) return FALSE; if (TagCount > MAX_TABLE_TAG) { cmsSignalError(Icc ->ContextID, cmsERROR_RANGE, "Too many tags (%d)", TagCount); return FALSE; } // Read tag directory Icc -> TagCount = 0; for (i=0; i < TagCount; i++) { if (!_cmsReadUInt32Number(io, (cmsUInt32Number *) &Tag.sig)) return FALSE; if (!_cmsReadUInt32Number(io, &Tag.offset)) return FALSE; if (!_cmsReadUInt32Number(io, &Tag.size)) return FALSE; // Perform some sanity check. Offset + size should fall inside file. if (Tag.offset + Tag.size > HeaderSize || Tag.offset + Tag.size < Tag.offset) continue; Icc -> TagNames[Icc ->TagCount] = Tag.sig; Icc -> TagOffsets[Icc ->TagCount] = Tag.offset; Icc -> TagSizes[Icc ->TagCount] = Tag.size; // Search for links for (j=0; j < Icc ->TagCount; j++) { if ((Icc ->TagOffsets[j] == Tag.offset) && (Icc ->TagSizes[j] == Tag.size)) { Icc ->TagLinked[Icc ->TagCount] = Icc ->TagNames[j]; } } Icc ->TagCount++; } return TRUE; } // Saves profile header cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace) { cmsICCHeader Header; cmsUInt32Number i; cmsTagEntry Tag; cmsUInt32Number Count; Header.size = _cmsAdjustEndianess32(UsedSpace); Header.cmmId = _cmsAdjustEndianess32(lcmsSignature); Header.version = _cmsAdjustEndianess32(Icc ->Version); Header.deviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Icc -> DeviceClass); Header.colorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Icc -> ColorSpace); Header.pcs = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Icc -> PCS); // NOTE: in v4 Timestamp must be in UTC rather than in local time _cmsEncodeDateTimeNumber(&Header.date, &Icc ->Created); Header.magic = _cmsAdjustEndianess32(cmsMagicNumber); #ifdef CMS_IS_WINDOWS_ Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(cmsSigMicrosoft); #else Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(cmsSigMacintosh); #endif Header.flags = _cmsAdjustEndianess32(Icc -> flags); Header.manufacturer = _cmsAdjustEndianess32(Icc -> manufacturer); Header.model = _cmsAdjustEndianess32(Icc -> model); _cmsAdjustEndianess64(&Header.attributes, &Icc -> attributes); // Rendering intent in the header (for embedded profiles) Header.renderingIntent = _cmsAdjustEndianess32(Icc -> RenderingIntent); // Illuminant is always D50 Header.illuminant.X = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(cmsD50_XYZ()->X)); Header.illuminant.Y = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(cmsD50_XYZ()->Y)); Header.illuminant.Z = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(cmsD50_XYZ()->Z)); // Created by LittleCMS (that's me!) Header.creator = _cmsAdjustEndianess32(lcmsSignature); memset(&Header.reserved, 0, sizeof(Header.reserved)); // Set profile ID. Endianness is always big endian memmove(&Header.profileID, &Icc ->ProfileID, 16); // Dump the header if (!Icc -> IOhandler->Write(Icc->IOhandler, sizeof(cmsICCHeader), &Header)) return FALSE; // Saves Tag directory // Get true count Count = 0; for (i=0; i < Icc -> TagCount; i++) { if (Icc ->TagNames[i] != (cmsTagSignature) 0) Count++; } // Store number of tags if (!_cmsWriteUInt32Number(Icc ->IOhandler, Count)) return FALSE; for (i=0; i < Icc -> TagCount; i++) { if (Icc ->TagNames[i] == (cmsTagSignature) 0) continue; // It is just a placeholder Tag.sig = (cmsTagSignature) _cmsAdjustEndianess32((cmsUInt32Number) Icc -> TagNames[i]); Tag.offset = _cmsAdjustEndianess32((cmsUInt32Number) Icc -> TagOffsets[i]); Tag.size = _cmsAdjustEndianess32((cmsUInt32Number) Icc -> TagSizes[i]); if (!Icc ->IOhandler -> Write(Icc-> IOhandler, sizeof(cmsTagEntry), &Tag)) return FALSE; } return TRUE; } // ----------------------------------------------------------------------- Set/Get several struct members cmsUInt32Number CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc -> RenderingIntent; } void CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> RenderingIntent = RenderingIntent; } cmsUInt32Number CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return (cmsUInt32Number) Icc -> flags; } void CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> flags = (cmsUInt32Number) Flags; } cmsUInt32Number CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc ->manufacturer; } void CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> manufacturer = manufacturer; } cmsUInt32Number CMSEXPORT cmsGetHeaderCreator(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc ->creator; } cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc ->model; } void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> model = model; } void CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; memmove(Flags, &Icc -> attributes, sizeof(cmsUInt64Number)); } void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; memmove(&Icc -> attributes, &Flags, sizeof(cmsUInt64Number)); } void CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; memmove(ProfileID, Icc ->ProfileID.ID8, 16); } void CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; memmove(&Icc -> ProfileID, ProfileID, 16); } cmsBool CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; memmove(Dest, &Icc ->Created, sizeof(struct tm)); return TRUE; } cmsColorSpaceSignature CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc -> PCS; } void CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> PCS = pcs; } cmsColorSpaceSignature CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc -> ColorSpace; } void CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> ColorSpace = sig; } cmsProfileClassSignature CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc -> DeviceClass; } void CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> DeviceClass = sig; } cmsUInt32Number CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; return Icc -> Version; } void CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; Icc -> Version = Version; } // Get an hexadecimal number with same digits as v static cmsUInt32Number BaseToBase(cmsUInt32Number in, int BaseIn, int BaseOut) { char Buff[100]; int i, len; cmsUInt32Number out; for (len=0; in > 0 && len < 100; len++) { Buff[len] = (char) (in % BaseIn); in /= BaseIn; } for (i=len-1, out=0; i >= 0; --i) { out = out * BaseOut + Buff[i]; } return out; } void CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; // 4.2 -> 0x4200000 Icc -> Version = BaseToBase((cmsUInt32Number) floor(Version * 100.0 + 0.5), 10, 16) << 16; } cmsFloat64Number CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; cmsUInt32Number n = Icc -> Version >> 16; return BaseToBase(n, 16, 10) / 100.0; } // -------------------------------------------------------------------------------------------------------------- // Create profile from IOhandler cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io) { _cmsICCPROFILE* NewIcc; cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); if (hEmpty == NULL) return NULL; NewIcc = (_cmsICCPROFILE*) hEmpty; NewIcc ->IOhandler = io; if (!_cmsReadHeader(NewIcc)) goto Error; return hEmpty; Error: cmsCloseProfile(hEmpty); return NULL; } // Create profile from IOhandler cmsHPROFILE CMSEXPORT cmsOpenProfileFromIOhandler2THR(cmsContext ContextID, cmsIOHANDLER* io, cmsBool write) { _cmsICCPROFILE* NewIcc; cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); if (hEmpty == NULL) return NULL; NewIcc = (_cmsICCPROFILE*) hEmpty; NewIcc ->IOhandler = io; if (write) { NewIcc -> IsWrite = TRUE; return hEmpty; } if (!_cmsReadHeader(NewIcc)) goto Error; return hEmpty; Error: cmsCloseProfile(hEmpty); return NULL; } // Create profile from disk file cmsHPROFILE CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *lpFileName, const char *sAccess) { _cmsICCPROFILE* NewIcc; cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); if (hEmpty == NULL) return NULL; NewIcc = (_cmsICCPROFILE*) hEmpty; NewIcc ->IOhandler = cmsOpenIOhandlerFromFile(ContextID, lpFileName, sAccess); if (NewIcc ->IOhandler == NULL) goto Error; if (*sAccess == 'W' || *sAccess == 'w') { NewIcc -> IsWrite = TRUE; return hEmpty; } if (!_cmsReadHeader(NewIcc)) goto Error; return hEmpty; Error: cmsCloseProfile(hEmpty); return NULL; } cmsHPROFILE CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess) { return cmsOpenProfileFromFileTHR(NULL, ICCProfile, sAccess); } cmsHPROFILE CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char *sAccess) { _cmsICCPROFILE* NewIcc; cmsHPROFILE hEmpty = cmsCreateProfilePlaceholder(ContextID); if (hEmpty == NULL) return NULL; NewIcc = (_cmsICCPROFILE*) hEmpty; NewIcc ->IOhandler = cmsOpenIOhandlerFromStream(ContextID, ICCProfile); if (NewIcc ->IOhandler == NULL) goto Error; if (*sAccess == 'w') { NewIcc -> IsWrite = TRUE; return hEmpty; } if (!_cmsReadHeader(NewIcc)) goto Error; return hEmpty; Error: cmsCloseProfile(hEmpty); return NULL; } cmsHPROFILE CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char *sAccess) { return cmsOpenProfileFromStreamTHR(NULL, ICCProfile, sAccess); } // Open from memory block cmsHPROFILE CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void* MemPtr, cmsUInt32Number dwSize) { _cmsICCPROFILE* NewIcc; cmsHPROFILE hEmpty; hEmpty = cmsCreateProfilePlaceholder(ContextID); if (hEmpty == NULL) return NULL; NewIcc = (_cmsICCPROFILE*) hEmpty; // Ok, in this case const void* is casted to void* just because open IO handler // shares read and writing modes. Don't abuse this feature! NewIcc ->IOhandler = cmsOpenIOhandlerFromMem(ContextID, (void*) MemPtr, dwSize, "r"); if (NewIcc ->IOhandler == NULL) goto Error; if (!_cmsReadHeader(NewIcc)) goto Error; return hEmpty; Error: cmsCloseProfile(hEmpty); return NULL; } cmsHPROFILE CMSEXPORT cmsOpenProfileFromMem(const void* MemPtr, cmsUInt32Number dwSize) { return cmsOpenProfileFromMemTHR(NULL, MemPtr, dwSize); } // Dump tag contents. If the profile is being modified, untouched tags are copied from FileOrig static cmsBool SaveTags(_cmsICCPROFILE* Icc, _cmsICCPROFILE* FileOrig) { cmsUInt8Number* Data; cmsUInt32Number i; cmsUInt32Number Begin; cmsIOHANDLER* io = Icc ->IOhandler; cmsTagDescriptor* TagDescriptor; cmsTagTypeSignature TypeBase; cmsTagTypeSignature Type; cmsTagTypeHandler* TypeHandler; cmsFloat64Number Version = cmsGetProfileVersion((cmsHPROFILE) Icc); cmsTagTypeHandler LocalTypeHandler; for (i=0; i < Icc -> TagCount; i++) { if (Icc ->TagNames[i] == (cmsTagSignature) 0) continue; // Linked tags are not written if (Icc ->TagLinked[i] != (cmsTagSignature) 0) continue; Icc -> TagOffsets[i] = Begin = io ->UsedSpace; Data = (cmsUInt8Number*) Icc -> TagPtrs[i]; if (!Data) { // Reach here if we are copying a tag from a disk-based ICC profile which has not been modified by user. // In this case a blind copy of the block data is performed if (FileOrig != NULL && Icc -> TagOffsets[i]) { if (FileOrig->IOhandler != NULL) { cmsUInt32Number TagSize = FileOrig->TagSizes[i]; cmsUInt32Number TagOffset = FileOrig->TagOffsets[i]; void* Mem; if (!FileOrig->IOhandler->Seek(FileOrig->IOhandler, TagOffset)) return FALSE; Mem = _cmsMalloc(Icc->ContextID, TagSize); if (Mem == NULL) return FALSE; if (FileOrig->IOhandler->Read(FileOrig->IOhandler, Mem, TagSize, 1) != 1) return FALSE; if (!io->Write(io, TagSize, Mem)) return FALSE; _cmsFree(Icc->ContextID, Mem); Icc->TagSizes[i] = (io->UsedSpace - Begin); // Align to 32 bit boundary. if (!_cmsWriteAlignment(io)) return FALSE; } } continue; } // Should this tag be saved as RAW? If so, tagsizes should be specified in advance (no further cooking is done) if (Icc ->TagSaveAsRaw[i]) { if (io -> Write(io, Icc ->TagSizes[i], Data) != 1) return FALSE; } else { // Search for support on this tag TagDescriptor = _cmsGetTagDescriptor(Icc-> ContextID, Icc -> TagNames[i]); if (TagDescriptor == NULL) continue; // Unsupported, ignore it if (TagDescriptor ->DecideType != NULL) { Type = TagDescriptor ->DecideType(Version, Data); } else { Type = TagDescriptor ->SupportedTypes[0]; } TypeHandler = _cmsGetTagTypeHandler(Icc->ContextID, Type); if (TypeHandler == NULL) { cmsSignalError(Icc ->ContextID, cmsERROR_INTERNAL, "(Internal) no handler for tag %x", Icc -> TagNames[i]); continue; } TypeBase = TypeHandler ->Signature; if (!_cmsWriteTypeBase(io, TypeBase)) return FALSE; LocalTypeHandler = *TypeHandler; LocalTypeHandler.ContextID = Icc ->ContextID; LocalTypeHandler.ICCVersion = Icc ->Version; if (!LocalTypeHandler.WritePtr(&LocalTypeHandler, io, Data, TagDescriptor ->ElemCount)) { char String[5]; _cmsTagSignature2String(String, (cmsTagSignature) TypeBase); cmsSignalError(Icc ->ContextID, cmsERROR_WRITE, "Couldn't write type '%s'", String); return FALSE; } } Icc -> TagSizes[i] = (io ->UsedSpace - Begin); // Align to 32 bit boundary. if (! _cmsWriteAlignment(io)) return FALSE; } return TRUE; } // Fill the offset and size fields for all linked tags static cmsBool SetLinks( _cmsICCPROFILE* Icc) { cmsUInt32Number i; for (i=0; i < Icc -> TagCount; i++) { cmsTagSignature lnk = Icc ->TagLinked[i]; if (lnk != (cmsTagSignature) 0) { int j = _cmsSearchTag(Icc, lnk, FALSE); if (j >= 0) { Icc ->TagOffsets[i] = Icc ->TagOffsets[j]; Icc ->TagSizes[i] = Icc ->TagSizes[j]; } } } return TRUE; } // Low-level save to IOHANDLER. It returns the number of bytes used to // store the profile, or zero on error. io may be NULL and in this case // no data is written--only sizes are calculated cmsUInt32Number CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; _cmsICCPROFILE Keep; cmsIOHANDLER* PrevIO = NULL; cmsUInt32Number UsedSpace; cmsContext ContextID; _cmsAssert(hProfile != NULL); if (!_cmsLockMutex(Icc->ContextID, Icc->UsrMutex)) return 0; memmove(&Keep, Icc, sizeof(_cmsICCPROFILE)); ContextID = cmsGetProfileContextID(hProfile); PrevIO = Icc ->IOhandler = cmsOpenIOhandlerFromNULL(ContextID); if (PrevIO == NULL) { _cmsUnlockMutex(Icc->ContextID, Icc->UsrMutex); return 0; } // Pass #1 does compute offsets if (!_cmsWriteHeader(Icc, 0)) goto Error; if (!SaveTags(Icc, &Keep)) goto Error; UsedSpace = PrevIO ->UsedSpace; // Pass #2 does save to iohandler if (io != NULL) { Icc ->IOhandler = io; if (!SetLinks(Icc)) goto Error; if (!_cmsWriteHeader(Icc, UsedSpace)) goto Error; if (!SaveTags(Icc, &Keep)) goto Error; } memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); if (!cmsCloseIOhandler(PrevIO)) UsedSpace = 0; // As a error marker _cmsUnlockMutex(Icc->ContextID, Icc->UsrMutex); return UsedSpace; Error: cmsCloseIOhandler(PrevIO); memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); _cmsUnlockMutex(Icc->ContextID, Icc->UsrMutex); return 0; } // Low-level save to disk. cmsBool CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName) { cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsIOHANDLER* io = cmsOpenIOhandlerFromFile(ContextID, FileName, "w"); cmsBool rc; if (io == NULL) return FALSE; rc = (cmsSaveProfileToIOhandler(hProfile, io) != 0); rc &= cmsCloseIOhandler(io); if (rc == FALSE) { // remove() is C99 per 7.19.4.1 remove(FileName); // We have to IGNORE return value in this case } return rc; } // Same as anterior, but for streams cmsBool CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream) { cmsBool rc; cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsIOHANDLER* io = cmsOpenIOhandlerFromStream(ContextID, Stream); if (io == NULL) return FALSE; rc = (cmsSaveProfileToIOhandler(hProfile, io) != 0); rc &= cmsCloseIOhandler(io); return rc; } // Same as anterior, but for memory blocks. In this case, a NULL as MemPtr means calculate needed space only cmsBool CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded) { cmsBool rc; cmsIOHANDLER* io; cmsContext ContextID = cmsGetProfileContextID(hProfile); _cmsAssert(BytesNeeded != NULL); // Should we just calculate the needed space? if (MemPtr == NULL) { *BytesNeeded = cmsSaveProfileToIOhandler(hProfile, NULL); return (*BytesNeeded == 0) ? FALSE : TRUE; } // That is a real write operation io = cmsOpenIOhandlerFromMem(ContextID, MemPtr, *BytesNeeded, "w"); if (io == NULL) return FALSE; rc = (cmsSaveProfileToIOhandler(hProfile, io) != 0); rc &= cmsCloseIOhandler(io); return rc; } // Closes a profile freeing any involved resources cmsBool CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; cmsBool rc = TRUE; cmsUInt32Number i; if (!Icc) return FALSE; // Was open in write mode? if (Icc ->IsWrite) { Icc ->IsWrite = FALSE; // Assure no further writing rc &= cmsSaveProfileToFile(hProfile, Icc ->IOhandler->PhysicalFile); } for (i=0; i < Icc -> TagCount; i++) { if (Icc -> TagPtrs[i]) { cmsTagTypeHandler* TypeHandler = Icc ->TagTypeHandlers[i]; if (TypeHandler != NULL) { cmsTagTypeHandler LocalTypeHandler = *TypeHandler; LocalTypeHandler.ContextID = Icc ->ContextID; // As an additional parameters LocalTypeHandler.ICCVersion = Icc ->Version; LocalTypeHandler.FreePtr(&LocalTypeHandler, Icc -> TagPtrs[i]); } else _cmsFree(Icc ->ContextID, Icc ->TagPtrs[i]); } } if (Icc ->IOhandler != NULL) { rc &= cmsCloseIOhandler(Icc->IOhandler); } _cmsDestroyMutex(Icc->ContextID, Icc->UsrMutex); _cmsFree(Icc ->ContextID, Icc); // Free placeholder memory return rc; } // ------------------------------------------------------------------------------------------------------------------- // Returns TRUE if a given tag is supported by a plug-in static cmsBool IsTypeSupported(cmsTagDescriptor* TagDescriptor, cmsTagTypeSignature Type) { cmsUInt32Number i, nMaxTypes; nMaxTypes = TagDescriptor->nSupportedTypes; if (nMaxTypes >= MAX_TYPES_IN_LCMS_PLUGIN) nMaxTypes = MAX_TYPES_IN_LCMS_PLUGIN; for (i=0; i < nMaxTypes; i++) { if (Type == TagDescriptor ->SupportedTypes[i]) return TRUE; } return FALSE; } // That's the main read function void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; cmsIOHANDLER* io = Icc ->IOhandler; cmsTagTypeHandler* TypeHandler; cmsTagTypeHandler LocalTypeHandler; cmsTagDescriptor* TagDescriptor; cmsTagTypeSignature BaseType; cmsUInt32Number Offset, TagSize; cmsUInt32Number ElemCount; int n; if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return NULL; n = _cmsSearchTag(Icc, sig, TRUE); if (n < 0) goto Error; // Not found, return NULL // If the element is already in memory, return the pointer if (Icc -> TagPtrs[n]) { if (Icc->TagTypeHandlers[n] == NULL) goto Error; // Sanity check BaseType = Icc->TagTypeHandlers[n]->Signature; if (BaseType == 0) goto Error; TagDescriptor = _cmsGetTagDescriptor(Icc->ContextID, sig); if (TagDescriptor == NULL) goto Error; if (!IsTypeSupported(TagDescriptor, BaseType)) goto Error; if (Icc ->TagSaveAsRaw[n]) goto Error; // We don't support read raw tags as cooked _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return Icc -> TagPtrs[n]; } // We need to read it. Get the offset and size to the file Offset = Icc -> TagOffsets[n]; TagSize = Icc -> TagSizes[n]; if (TagSize < 8) goto Error; // Seek to its location if (!io -> Seek(io, Offset)) goto Error; // Search for support on this tag TagDescriptor = _cmsGetTagDescriptor(Icc-> ContextID, sig); if (TagDescriptor == NULL) { char String[5]; _cmsTagSignature2String(String, sig); // An unknown element was found. cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown tag type '%s' found.", String); goto Error; // Unsupported. } // if supported, get type and check if in list BaseType = _cmsReadTypeBase(io); if (BaseType == 0) goto Error; if (!IsTypeSupported(TagDescriptor, BaseType)) goto Error; TagSize -= 8; // Already read by the type base logic // Get type handler TypeHandler = _cmsGetTagTypeHandler(Icc ->ContextID, BaseType); if (TypeHandler == NULL) goto Error; LocalTypeHandler = *TypeHandler; // Read the tag Icc -> TagTypeHandlers[n] = TypeHandler; LocalTypeHandler.ContextID = Icc ->ContextID; LocalTypeHandler.ICCVersion = Icc ->Version; Icc -> TagPtrs[n] = LocalTypeHandler.ReadPtr(&LocalTypeHandler, io, &ElemCount, TagSize); // The tag type is supported, but something wrong happened and we cannot read the tag. // let know the user about this (although it is just a warning) if (Icc -> TagPtrs[n] == NULL) { char String[5]; _cmsTagSignature2String(String, sig); cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "Corrupted tag '%s'", String); goto Error; } // This is a weird error that may be a symptom of something more serious, the number of // stored item is actually less than the number of required elements. if (ElemCount < TagDescriptor ->ElemCount) { char String[5]; _cmsTagSignature2String(String, sig); cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "'%s' Inconsistent number of items: expected %d, got %d", String, TagDescriptor ->ElemCount, ElemCount); goto Error; } // Return the data _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return Icc -> TagPtrs[n]; // Return error and unlock tha data Error: _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return NULL; } // Get true type of data cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; cmsTagTypeHandler* TypeHandler; int n; // Search for given tag in ICC profile directory n = _cmsSearchTag(Icc, sig, TRUE); if (n < 0) return (cmsTagTypeSignature) 0; // Not found, return NULL // Get the handler. The true type is there TypeHandler = Icc -> TagTypeHandlers[n]; return TypeHandler ->Signature; } // Write a single tag. This just keeps track of the tak into a list of "to be written". If the tag is already // in that list, the previous version is deleted. cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; cmsTagTypeHandler* TypeHandler = NULL; cmsTagTypeHandler LocalTypeHandler; cmsTagDescriptor* TagDescriptor = NULL; cmsTagTypeSignature Type; int i; cmsFloat64Number Version; char TypeString[5], SigString[5]; if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return FALSE; // To delete tags. if (data == NULL) { // Delete the tag i = _cmsSearchTag(Icc, sig, FALSE); if (i >= 0) { // Use zero as a mark of deleted _cmsDeleteTagByPos(Icc, i); Icc ->TagNames[i] = (cmsTagSignature) 0; _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return TRUE; } // Didn't find the tag goto Error; } if (!_cmsNewTag(Icc, sig, &i)) goto Error; // This is not raw Icc ->TagSaveAsRaw[i] = FALSE; // This is not a link Icc ->TagLinked[i] = (cmsTagSignature) 0; // Get information about the TAG. TagDescriptor = _cmsGetTagDescriptor(Icc-> ContextID, sig); if (TagDescriptor == NULL){ cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported tag '%x'", sig); goto Error; } // Now we need to know which type to use. It depends on the version. Version = cmsGetProfileVersion(hProfile); if (TagDescriptor ->DecideType != NULL) { // Let the tag descriptor to decide the type base on depending on // the data. This is useful for example on parametric curves, where // curves specified by a table cannot be saved as parametric and needs // to be casted to single v2-curves, even on v4 profiles. Type = TagDescriptor ->DecideType(Version, data); } else { Type = TagDescriptor ->SupportedTypes[0]; } // Does the tag support this type? if (!IsTypeSupported(TagDescriptor, Type)) { _cmsTagSignature2String(TypeString, (cmsTagSignature) Type); _cmsTagSignature2String(SigString, sig); cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported type '%s' for tag '%s'", TypeString, SigString); goto Error; } // Does we have a handler for this type? TypeHandler = _cmsGetTagTypeHandler(Icc->ContextID, Type); if (TypeHandler == NULL) { _cmsTagSignature2String(TypeString, (cmsTagSignature) Type); _cmsTagSignature2String(SigString, sig); cmsSignalError(Icc ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported type '%s' for tag '%s'", TypeString, SigString); goto Error; // Should never happen } // Fill fields on icc structure Icc ->TagTypeHandlers[i] = TypeHandler; Icc ->TagNames[i] = sig; Icc ->TagSizes[i] = 0; Icc ->TagOffsets[i] = 0; LocalTypeHandler = *TypeHandler; LocalTypeHandler.ContextID = Icc ->ContextID; LocalTypeHandler.ICCVersion = Icc ->Version; Icc ->TagPtrs[i] = LocalTypeHandler.DupPtr(&LocalTypeHandler, data, TagDescriptor ->ElemCount); if (Icc ->TagPtrs[i] == NULL) { _cmsTagSignature2String(TypeString, (cmsTagSignature) Type); _cmsTagSignature2String(SigString, sig); cmsSignalError(Icc ->ContextID, cmsERROR_CORRUPTION_DETECTED, "Malformed struct in type '%s' for tag '%s'", TypeString, SigString); goto Error; } _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return TRUE; Error: _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return FALSE; } // Read and write raw data. The only way those function would work and keep consistence with normal read and write // is to do an additional step of serialization. That means, readRaw would issue a normal read and then convert the obtained // data to raw bytes by using the "write" serialization logic. And vice-versa. I know this may end in situations where // raw data written does not exactly correspond with the raw data proposed to cmsWriteRaw data, but this approach allows // to write a tag as raw data and the read it as handled. cmsUInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* data, cmsUInt32Number BufferSize) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; void *Object; int i; cmsIOHANDLER* MemIO; cmsTagTypeHandler* TypeHandler = NULL; cmsTagTypeHandler LocalTypeHandler; cmsTagDescriptor* TagDescriptor = NULL; cmsUInt32Number rc; cmsUInt32Number Offset, TagSize; if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return 0; // Search for given tag in ICC profile directory i = _cmsSearchTag(Icc, sig, TRUE); if (i < 0) goto Error; // Not found, // It is already read? if (Icc -> TagPtrs[i] == NULL) { // No yet, get original position Offset = Icc ->TagOffsets[i]; TagSize = Icc ->TagSizes[i]; // read the data directly, don't keep copy if (data != NULL) { if (BufferSize < TagSize) TagSize = BufferSize; if (!Icc ->IOhandler ->Seek(Icc ->IOhandler, Offset)) goto Error; if (!Icc ->IOhandler ->Read(Icc ->IOhandler, data, 1, TagSize)) goto Error; _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return TagSize; } _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return Icc ->TagSizes[i]; } // The data has been already read, or written. But wait!, maybe the user chose to save as // raw data. In this case, return the raw data directly if (Icc ->TagSaveAsRaw[i]) { if (data != NULL) { TagSize = Icc ->TagSizes[i]; if (BufferSize < TagSize) TagSize = BufferSize; memmove(data, Icc ->TagPtrs[i], TagSize); _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return TagSize; } _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return Icc ->TagSizes[i]; } // Already read, or previously set by cmsWriteTag(). We need to serialize that // data to raw in order to maintain consistency. _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); Object = cmsReadTag(hProfile, sig); if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return 0; if (Object == NULL) goto Error; // Now we need to serialize to a memory block: just use a memory iohandler if (data == NULL) { MemIO = cmsOpenIOhandlerFromNULL(cmsGetProfileContextID(hProfile)); } else{ MemIO = cmsOpenIOhandlerFromMem(cmsGetProfileContextID(hProfile), data, BufferSize, "w"); } if (MemIO == NULL) goto Error; // Obtain type handling for the tag TypeHandler = Icc ->TagTypeHandlers[i]; TagDescriptor = _cmsGetTagDescriptor(Icc-> ContextID, sig); if (TagDescriptor == NULL) { cmsCloseIOhandler(MemIO); goto Error; } if (TypeHandler == NULL) goto Error; // Serialize LocalTypeHandler = *TypeHandler; LocalTypeHandler.ContextID = Icc ->ContextID; LocalTypeHandler.ICCVersion = Icc ->Version; if (!_cmsWriteTypeBase(MemIO, TypeHandler ->Signature)) { cmsCloseIOhandler(MemIO); goto Error; } if (!LocalTypeHandler.WritePtr(&LocalTypeHandler, MemIO, Object, TagDescriptor ->ElemCount)) { cmsCloseIOhandler(MemIO); goto Error; } // Get Size and close rc = MemIO ->Tell(MemIO); cmsCloseIOhandler(MemIO); // Ignore return code this time _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return rc; Error: _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return 0; } // Similar to the anterior. This function allows to write directly to the ICC profile any data, without // checking anything. As a rule, mixing Raw with cooked doesn't work, so writing a tag as raw and then reading // it as cooked without serializing does result into an error. If that is what you want, you will need to dump // the profile to memry or disk and then reopen it. cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; int i; if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return 0; if (!_cmsNewTag(Icc, sig, &i)) { _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return FALSE; } // Mark the tag as being written as RAW Icc ->TagSaveAsRaw[i] = TRUE; Icc ->TagNames[i] = sig; Icc ->TagLinked[i] = (cmsTagSignature) 0; // Keep a copy of the block Icc ->TagPtrs[i] = _cmsDupMem(Icc ->ContextID, data, Size); Icc ->TagSizes[i] = Size; _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); if (Icc->TagPtrs[i] == NULL) { Icc->TagNames[i] = (cmsTagSignature) 0; return FALSE; } return TRUE; } // Using this function you can collapse several tag entries to the same block in the profile cmsBool CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; int i; if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return FALSE; if (!_cmsNewTag(Icc, sig, &i)) { _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return FALSE; } // Keep necessary information Icc ->TagSaveAsRaw[i] = FALSE; Icc ->TagNames[i] = sig; Icc ->TagLinked[i] = dest; Icc ->TagPtrs[i] = NULL; Icc ->TagSizes[i] = 0; Icc ->TagOffsets[i] = 0; _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex); return TRUE; } // Returns the tag linked to sig, in the case two tags are sharing same resource cmsTagSignature CMSEXPORT cmsTagLinkedTo(cmsHPROFILE hProfile, cmsTagSignature sig) { _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile; int i; // Search for given tag in ICC profile directory i = _cmsSearchTag(Icc, sig, FALSE); if (i < 0) return (cmsTagSignature) 0; // Not found, return 0 return Icc -> TagLinked[i]; } lcms2-2.12rc1/src/.deps/0000755000175000017500000000000013775114656013715 5ustar martimartilcms2-2.12rc1/src/cmspack.c0000644000175000017500000033756113775114656014510 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // This module handles all formats supported by lcms. There are two flavors, 16 bits and // floating point. Floating point is supported only in a subset, those formats holding // cmsFloat32Number (4 bytes per component) and double (marked as 0 bytes per component // as special case) // --------------------------------------------------------------------------- // This macro return words stored as big endian #define CHANGE_ENDIAN(w) (cmsUInt16Number) ((cmsUInt16Number) ((w)<<8)|((w)>>8)) // These macros handles reversing (negative) #define REVERSE_FLAVOR_8(x) ((cmsUInt8Number) (0xff-(x))) #define REVERSE_FLAVOR_16(x) ((cmsUInt16Number)(0xffff-(x))) // * 0xffff / 0xff00 = (255 * 257) / (255 * 256) = 257 / 256 cmsINLINE cmsUInt16Number FomLabV2ToLabV4(cmsUInt16Number x) { int a = (x << 8 | x) >> 8; // * 257 / 256 if ( a > 0xffff) return 0xffff; return (cmsUInt16Number) a; } // * 0xf00 / 0xffff = * 256 / 257 cmsINLINE cmsUInt16Number FomLabV4ToLabV2(cmsUInt16Number x) { return (cmsUInt16Number) (((x << 8) + 0x80) / 257); } typedef struct { cmsUInt32Number Type; cmsUInt32Number Mask; cmsFormatter16 Frm; } cmsFormatters16; typedef struct { cmsUInt32Number Type; cmsUInt32Number Mask; cmsFormatterFloat Frm; } cmsFormattersFloat; #define ANYSPACE COLORSPACE_SH(31) #define ANYCHANNELS CHANNELS_SH(15) #define ANYEXTRA EXTRA_SH(7) #define ANYPLANAR PLANAR_SH(1) #define ANYENDIAN ENDIAN16_SH(1) #define ANYSWAP DOSWAP_SH(1) #define ANYSWAPFIRST SWAPFIRST_SH(1) #define ANYFLAVOR FLAVOR_SH(1) // Suppress waning about info never being used #ifdef _MSC_VER #pragma warning(disable : 4100) #endif // Unpacking routines (16 bits) ---------------------------------------------------------------------------------------- // Does almost everything but is slow static cmsUInt8Number* UnrollChunkyBytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt16Number v; cmsUInt32Number i; if (ExtraFirst) { accum += Extra; } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = FROM_8_TO_16(*accum); v = Reverse ? REVERSE_FLAVOR_16(v) : v; wIn[index] = v; accum++; } if (!ExtraFirst) { accum += Extra; } if (Extra == 0 && SwapFirst) { cmsUInt16Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); wIn[nChan-1] = tmp; } return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // Extra channels are just ignored because come in the next planes static cmsUInt8Number* UnrollPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number i; cmsUInt8Number* Init = accum; if (DoSwap ^ SwapFirst) { accum += T_EXTRA(info -> InputFormat) * Stride; } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; cmsUInt16Number v = FROM_8_TO_16(*accum); wIn[index] = Reverse ? REVERSE_FLAVOR_16(v) : v; accum += Stride; } return (Init + 1); } // Special cases, provided for performance static cmsUInt8Number* Unroll4Bytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(*accum); accum++; // C wIn[1] = FROM_8_TO_16(*accum); accum++; // M wIn[2] = FROM_8_TO_16(*accum); accum++; // Y wIn[3] = FROM_8_TO_16(*accum); accum++; // K return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll4BytesReverse(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // C wIn[1] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // M wIn[2] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // Y wIn[3] = FROM_8_TO_16(REVERSE_FLAVOR_8(*accum)); accum++; // K return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll4BytesSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[3] = FROM_8_TO_16(*accum); accum++; // K wIn[0] = FROM_8_TO_16(*accum); accum++; // C wIn[1] = FROM_8_TO_16(*accum); accum++; // M wIn[2] = FROM_8_TO_16(*accum); accum++; // Y return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // KYMC static cmsUInt8Number* Unroll4BytesSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[3] = FROM_8_TO_16(*accum); accum++; // K wIn[2] = FROM_8_TO_16(*accum); accum++; // Y wIn[1] = FROM_8_TO_16(*accum); accum++; // M wIn[0] = FROM_8_TO_16(*accum); accum++; // C return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll4BytesSwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[2] = FROM_8_TO_16(*accum); accum++; // K wIn[1] = FROM_8_TO_16(*accum); accum++; // Y wIn[0] = FROM_8_TO_16(*accum); accum++; // M wIn[3] = FROM_8_TO_16(*accum); accum++; // C return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3Bytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(*accum); accum++; // R wIn[1] = FROM_8_TO_16(*accum); accum++; // G wIn[2] = FROM_8_TO_16(*accum); accum++; // B return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3BytesSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { accum++; // A wIn[2] = FROM_8_TO_16(*accum); accum++; // B wIn[1] = FROM_8_TO_16(*accum); accum++; // G wIn[0] = FROM_8_TO_16(*accum); accum++; // R return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3BytesSkip1SwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[2] = FROM_8_TO_16(*accum); accum++; // B wIn[1] = FROM_8_TO_16(*accum); accum++; // G wIn[0] = FROM_8_TO_16(*accum); accum++; // R accum++; // A return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3BytesSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { accum++; // A wIn[0] = FROM_8_TO_16(*accum); accum++; // R wIn[1] = FROM_8_TO_16(*accum); accum++; // G wIn[2] = FROM_8_TO_16(*accum); accum++; // B return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // BRG static cmsUInt8Number* Unroll3BytesSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[2] = FROM_8_TO_16(*accum); accum++; // B wIn[1] = FROM_8_TO_16(*accum); accum++; // G wIn[0] = FROM_8_TO_16(*accum); accum++; // R return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* UnrollLabV2_8(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L wIn[1] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // a wIn[2] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // b return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* UnrollALabV2_8(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { accum++; // A wIn[0] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // L wIn[1] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // a wIn[2] = FomLabV2ToLabV4(FROM_8_TO_16(*accum)); accum++; // b return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* UnrollLabV2_16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // L wIn[1] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // a wIn[2] = FomLabV2ToLabV4(*(cmsUInt16Number*) accum); accum += 2; // b return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // for duplex static cmsUInt8Number* Unroll2Bytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = FROM_8_TO_16(*accum); accum++; // ch1 wIn[1] = FROM_8_TO_16(*accum); accum++; // ch2 return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // Monochrome duplicates L into RGB for null-transforms static cmsUInt8Number* Unroll1Byte(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll1ByteSkip1(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L accum += 1; return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll1ByteSkip2(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = FROM_8_TO_16(*accum); accum++; // L accum += 2; return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll1ByteReversed(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(FROM_8_TO_16(*accum)); accum++; // L return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* UnrollAnyWords(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number SwapEndian = T_ENDIAN16(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number i; if (ExtraFirst) { accum += Extra * sizeof(cmsUInt16Number); } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; cmsUInt16Number v = *(cmsUInt16Number*) accum; if (SwapEndian) v = CHANGE_ENDIAN(v); wIn[index] = Reverse ? REVERSE_FLAVOR_16(v) : v; accum += sizeof(cmsUInt16Number); } if (!ExtraFirst) { accum += Extra * sizeof(cmsUInt16Number); } if (Extra == 0 && SwapFirst) { cmsUInt16Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); wIn[nChan-1] = tmp; } return accum; cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* UnrollPlanarWords(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap= T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse= T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapEndian = T_ENDIAN16(info -> InputFormat); cmsUInt32Number i; cmsUInt8Number* Init = accum; if (DoSwap) { accum += T_EXTRA(info -> InputFormat) * Stride; } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; cmsUInt16Number v = *(cmsUInt16Number*) accum; if (SwapEndian) v = CHANGE_ENDIAN(v); wIn[index] = Reverse ? REVERSE_FLAVOR_16(v) : v; accum += Stride; } return (Init + sizeof(cmsUInt16Number)); } static cmsUInt8Number* Unroll4Words(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll4WordsReverse(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // C wIn[1] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // M wIn[2] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // Y wIn[3] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; // K return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll4WordsSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // KYMC static cmsUInt8Number* Unroll4WordsSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // K wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll4WordsSwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // K wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // Y wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // M wIn[3] = *(cmsUInt16Number*) accum; accum+= 2; // C return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3Words(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // C R wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // Y B return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3WordsSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // C R wIn[1] = *(cmsUInt16Number*) accum; accum+= 2; // M G wIn[0] = *(cmsUInt16Number*) accum; accum+= 2; // Y B return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3WordsSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { accum += 2; // A wIn[2] = *(cmsUInt16Number*) accum; accum += 2; // R wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // G wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // B return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll3WordsSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { accum += 2; // A wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // R wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // G wIn[2] = *(cmsUInt16Number*) accum; accum += 2; // B return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll1Word(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; accum+= 2; // L return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll1WordReversed(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = REVERSE_FLAVOR_16(*(cmsUInt16Number*) accum); accum+= 2; return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll1WordSkip3(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = wIn[1] = wIn[2] = *(cmsUInt16Number*) accum; accum += 8; return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Unroll2Words(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { wIn[0] = *(cmsUInt16Number*) accum; accum += 2; // ch1 wIn[1] = *(cmsUInt16Number*) accum; accum += 2; // ch2 return accum; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // This is a conversion of Lab double to 16 bits static cmsUInt8Number* UnrollLabDoubleTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> InputFormat)) { cmsCIELab Lab; cmsUInt8Number* pos_L; cmsUInt8Number* pos_a; cmsUInt8Number* pos_b; pos_L = accum; pos_a = accum + Stride; pos_b = accum + Stride * 2; Lab.L = *(cmsFloat64Number*) pos_L; Lab.a = *(cmsFloat64Number*) pos_a; Lab.b = *(cmsFloat64Number*) pos_b; cmsFloat2LabEncoded(wIn, &Lab); return accum + sizeof(cmsFloat64Number); } else { cmsFloat2LabEncoded(wIn, (cmsCIELab*) accum); accum += sizeof(cmsCIELab) + T_EXTRA(info ->InputFormat) * sizeof(cmsFloat64Number); return accum; } } // This is a conversion of Lab float to 16 bits static cmsUInt8Number* UnrollLabFloatTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsCIELab Lab; if (T_PLANAR(info -> InputFormat)) { cmsUInt8Number* pos_L; cmsUInt8Number* pos_a; cmsUInt8Number* pos_b; pos_L = accum; pos_a = accum + Stride; pos_b = accum + Stride * 2; Lab.L = *(cmsFloat32Number*)pos_L; Lab.a = *(cmsFloat32Number*)pos_a; Lab.b = *(cmsFloat32Number*)pos_b; cmsFloat2LabEncoded(wIn, &Lab); return accum + sizeof(cmsFloat32Number); } else { Lab.L = ((cmsFloat32Number*) accum)[0]; Lab.a = ((cmsFloat32Number*) accum)[1]; Lab.b = ((cmsFloat32Number*) accum)[2]; cmsFloat2LabEncoded(wIn, &Lab); accum += (3 + T_EXTRA(info ->InputFormat)) * sizeof(cmsFloat32Number); return accum; } } // This is a conversion of XYZ double to 16 bits static cmsUInt8Number* UnrollXYZDoubleTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> InputFormat)) { cmsCIEXYZ XYZ; cmsUInt8Number* pos_X; cmsUInt8Number* pos_Y; cmsUInt8Number* pos_Z; pos_X = accum; pos_Y = accum + Stride; pos_Z = accum + Stride * 2; XYZ.X = *(cmsFloat64Number*)pos_X; XYZ.Y = *(cmsFloat64Number*)pos_Y; XYZ.Z = *(cmsFloat64Number*)pos_Z; cmsFloat2XYZEncoded(wIn, &XYZ); return accum + sizeof(cmsFloat64Number); } else { cmsFloat2XYZEncoded(wIn, (cmsCIEXYZ*) accum); accum += sizeof(cmsCIEXYZ) + T_EXTRA(info ->InputFormat) * sizeof(cmsFloat64Number); return accum; } } // This is a conversion of XYZ float to 16 bits static cmsUInt8Number* UnrollXYZFloatTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> InputFormat)) { cmsCIEXYZ XYZ; cmsUInt8Number* pos_X; cmsUInt8Number* pos_Y; cmsUInt8Number* pos_Z; pos_X = accum; pos_Y = accum + Stride; pos_Z = accum + Stride * 2; XYZ.X = *(cmsFloat32Number*)pos_X; XYZ.Y = *(cmsFloat32Number*)pos_Y; XYZ.Z = *(cmsFloat32Number*)pos_Z; cmsFloat2XYZEncoded(wIn, &XYZ); return accum + sizeof(cmsFloat32Number); } else { cmsFloat32Number* Pt = (cmsFloat32Number*) accum; cmsCIEXYZ XYZ; XYZ.X = Pt[0]; XYZ.Y = Pt[1]; XYZ.Z = Pt[2]; cmsFloat2XYZEncoded(wIn, &XYZ); accum += 3 * sizeof(cmsFloat32Number) + T_EXTRA(info ->InputFormat) * sizeof(cmsFloat32Number); return accum; } } // Check if space is marked as ink cmsINLINE cmsBool IsInkSpace(cmsUInt32Number Type) { switch (T_COLORSPACE(Type)) { case PT_CMY: case PT_CMYK: case PT_MCH5: case PT_MCH6: case PT_MCH7: case PT_MCH8: case PT_MCH9: case PT_MCH10: case PT_MCH11: case PT_MCH12: case PT_MCH13: case PT_MCH14: case PT_MCH15: return TRUE; default: return FALSE; } } // Return the size in bytes of a given formatter static cmsUInt32Number PixelSize(cmsUInt32Number Format) { cmsUInt32Number fmt_bytes = T_BYTES(Format); // For double, the T_BYTES field is zero if (fmt_bytes == 0) return sizeof(cmsUInt64Number); // Otherwise, it is already correct for all formats return fmt_bytes; } // Inks does come in percentage, remaining cases are between 0..1.0, again to 16 bits static cmsUInt8Number* UnrollDoubleTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number Planar = T_PLANAR(info -> InputFormat); cmsFloat64Number v; cmsUInt16Number vi; cmsUInt32Number i, start = 0; cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; Stride /= PixelSize(info->InputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; if (Planar) v = (cmsFloat32Number) ((cmsFloat64Number*) accum)[(i + start) * Stride]; else v = (cmsFloat32Number) ((cmsFloat64Number*) accum)[i + start]; vi = _cmsQuickSaturateWord(v * maximum); if (Reverse) vi = REVERSE_FLAVOR_16(vi); wIn[index] = vi; } if (Extra == 0 && SwapFirst) { cmsUInt16Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat64Number); else return accum + (nChan + Extra) * sizeof(cmsFloat64Number); } static cmsUInt8Number* UnrollFloatTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number Planar = T_PLANAR(info -> InputFormat); cmsFloat32Number v; cmsUInt16Number vi; cmsUInt32Number i, start = 0; cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 655.35 : 65535.0; Stride /= PixelSize(info->InputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; if (Planar) v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[(i + start) * Stride]; else v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[i + start]; vi = _cmsQuickSaturateWord(v * maximum); if (Reverse) vi = REVERSE_FLAVOR_16(vi); wIn[index] = vi; } if (Extra == 0 && SwapFirst) { cmsUInt16Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat32Number); else return accum + (nChan + Extra) * sizeof(cmsFloat32Number); } // For 1 channel, we need to duplicate data (it comes in 0..1.0 range) static cmsUInt8Number* UnrollDouble1Chan(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsFloat64Number* Inks = (cmsFloat64Number*) accum; wIn[0] = wIn[1] = wIn[2] = _cmsQuickSaturateWord(Inks[0] * 65535.0); return accum + sizeof(cmsFloat64Number); cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } //------------------------------------------------------------------------------------------------------------------- // For anything going from cmsFloat32Number static cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number Planar = T_PLANAR(info -> InputFormat); cmsFloat32Number v; cmsUInt32Number i, start = 0; cmsFloat32Number maximum = IsInkSpace(info ->InputFormat) ? 100.0F : 1.0F; Stride /= PixelSize(info->InputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; if (Planar) v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[(i + start) * Stride]; else v = (cmsFloat32Number) ((cmsFloat32Number*) accum)[i + start]; v /= maximum; wIn[index] = Reverse ? 1 - v : v; } if (Extra == 0 && SwapFirst) { cmsFloat32Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsFloat32Number)); wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat32Number); else return accum + (nChan + Extra) * sizeof(cmsFloat32Number); } // For anything going from double static cmsUInt8Number* UnrollDoublesToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number Planar = T_PLANAR(info -> InputFormat); cmsFloat64Number v; cmsUInt32Number i, start = 0; cmsFloat64Number maximum = IsInkSpace(info ->InputFormat) ? 100.0 : 1.0; Stride /= PixelSize(info->InputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; if (Planar) v = (cmsFloat64Number) ((cmsFloat64Number*) accum)[(i + start) * Stride]; else v = (cmsFloat64Number) ((cmsFloat64Number*) accum)[i + start]; v /= maximum; wIn[index] = (cmsFloat32Number) (Reverse ? 1.0 - v : v); } if (Extra == 0 && SwapFirst) { cmsFloat32Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsFloat32Number)); wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsFloat64Number); else return accum + (nChan + Extra) * sizeof(cmsFloat64Number); } // From Lab double to cmsFloat32Number static cmsUInt8Number* UnrollLabDoubleToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsFloat64Number* Pt = (cmsFloat64Number*) accum; if (T_PLANAR(info -> InputFormat)) { Stride /= PixelSize(info->InputFormat); wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 wIn[1] = (cmsFloat32Number) ((Pt[Stride] + 128) / 255.0); // form -128..+127 to 0..1 wIn[2] = (cmsFloat32Number) ((Pt[Stride*2] + 128) / 255.0); return accum + sizeof(cmsFloat64Number); } else { wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 wIn[1] = (cmsFloat32Number) ((Pt[1] + 128) / 255.0); // form -128..+127 to 0..1 wIn[2] = (cmsFloat32Number) ((Pt[2] + 128) / 255.0); accum += sizeof(cmsFloat64Number)*(3 + T_EXTRA(info ->InputFormat)); return accum; } } // From Lab double to cmsFloat32Number static cmsUInt8Number* UnrollLabFloatToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsFloat32Number* Pt = (cmsFloat32Number*) accum; if (T_PLANAR(info -> InputFormat)) { Stride /= PixelSize(info->InputFormat); wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 wIn[1] = (cmsFloat32Number) ((Pt[Stride] + 128) / 255.0); // form -128..+127 to 0..1 wIn[2] = (cmsFloat32Number) ((Pt[Stride*2] + 128) / 255.0); return accum + sizeof(cmsFloat32Number); } else { wIn[0] = (cmsFloat32Number) (Pt[0] / 100.0); // from 0..100 to 0..1 wIn[1] = (cmsFloat32Number) ((Pt[1] + 128) / 255.0); // form -128..+127 to 0..1 wIn[2] = (cmsFloat32Number) ((Pt[2] + 128) / 255.0); accum += sizeof(cmsFloat32Number)*(3 + T_EXTRA(info ->InputFormat)); return accum; } } // 1.15 fixed point, that means maximum value is MAX_ENCODEABLE_XYZ (0xFFFF) static cmsUInt8Number* UnrollXYZDoubleToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsFloat64Number* Pt = (cmsFloat64Number*) accum; if (T_PLANAR(info -> InputFormat)) { Stride /= PixelSize(info->InputFormat); wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); wIn[1] = (cmsFloat32Number) (Pt[Stride] / MAX_ENCODEABLE_XYZ); wIn[2] = (cmsFloat32Number) (Pt[Stride*2] / MAX_ENCODEABLE_XYZ); return accum + sizeof(cmsFloat64Number); } else { wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); wIn[1] = (cmsFloat32Number) (Pt[1] / MAX_ENCODEABLE_XYZ); wIn[2] = (cmsFloat32Number) (Pt[2] / MAX_ENCODEABLE_XYZ); accum += sizeof(cmsFloat64Number)*(3 + T_EXTRA(info ->InputFormat)); return accum; } } static cmsUInt8Number* UnrollXYZFloatToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsFloat32Number* Pt = (cmsFloat32Number*) accum; if (T_PLANAR(info -> InputFormat)) { Stride /= PixelSize(info->InputFormat); wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); wIn[1] = (cmsFloat32Number) (Pt[Stride] / MAX_ENCODEABLE_XYZ); wIn[2] = (cmsFloat32Number) (Pt[Stride*2] / MAX_ENCODEABLE_XYZ); return accum + sizeof(cmsFloat32Number); } else { wIn[0] = (cmsFloat32Number) (Pt[0] / MAX_ENCODEABLE_XYZ); wIn[1] = (cmsFloat32Number) (Pt[1] / MAX_ENCODEABLE_XYZ); wIn[2] = (cmsFloat32Number) (Pt[2] / MAX_ENCODEABLE_XYZ); accum += sizeof(cmsFloat32Number)*(3 + T_EXTRA(info ->InputFormat)); return accum; } } // Packing routines ----------------------------------------------------------------------------------------------------------- // Generic chunky for byte static cmsUInt8Number* PackAnyBytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info -> OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt8Number* swap1; cmsUInt8Number v = 0; cmsUInt32Number i; swap1 = output; if (ExtraFirst) { output += Extra; } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = FROM_16_TO_8(wOut[index]); if (Reverse) v = REVERSE_FLAVOR_8(v); *output++ = v; } if (!ExtraFirst) { output += Extra; } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, nChan-1); *swap1 = v; } return output; cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* PackAnyWords(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number SwapEndian = T_ENDIAN16(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info -> OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt16Number* swap1; cmsUInt16Number v = 0; cmsUInt32Number i; swap1 = (cmsUInt16Number*) output; if (ExtraFirst) { output += Extra * sizeof(cmsUInt16Number); } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = wOut[index]; if (SwapEndian) v = CHANGE_ENDIAN(v); if (Reverse) v = REVERSE_FLAVOR_16(v); *(cmsUInt16Number*) output = v; output += sizeof(cmsUInt16Number); } if (!ExtraFirst) { output += Extra * sizeof(cmsUInt16Number); } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number)); *swap1 = v; } return output; cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* PackPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info ->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->OutputFormat); cmsUInt32Number i; cmsUInt8Number* Init = output; if (DoSwap ^ SwapFirst) { output += T_EXTRA(info -> OutputFormat) * Stride; } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; cmsUInt8Number v = FROM_16_TO_8(wOut[index]); *(cmsUInt8Number*) output = (cmsUInt8Number) (Reverse ? REVERSE_FLAVOR_8(v) : v); output += Stride; } return (Init + 1); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* PackPlanarWords(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->OutputFormat); cmsUInt32Number SwapEndian = T_ENDIAN16(info -> OutputFormat); cmsUInt32Number i; cmsUInt8Number* Init = output; cmsUInt16Number v; if (DoSwap) { output += T_EXTRA(info -> OutputFormat) * Stride; } for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = wOut[index]; if (SwapEndian) v = CHANGE_ENDIAN(v); if (Reverse) v = REVERSE_FLAVOR_16(v); *(cmsUInt16Number*) output = v; output += Stride; } return (Init + sizeof(cmsUInt16Number)); } // CMYKcm (unrolled for speed) static cmsUInt8Number* Pack6Bytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[3]); *output++ = FROM_16_TO_8(wOut[4]); *output++ = FROM_16_TO_8(wOut[5]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // KCMYcm static cmsUInt8Number* Pack6BytesSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[5]); *output++ = FROM_16_TO_8(wOut[4]); *output++ = FROM_16_TO_8(wOut[3]); *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[0]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // CMYKcm static cmsUInt8Number* Pack6Words(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[3]; output+= 2; *(cmsUInt16Number*) output = wOut[4]; output+= 2; *(cmsUInt16Number*) output = wOut[5]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // KCMYcm static cmsUInt8Number* Pack6WordsSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[5]; output+= 2; *(cmsUInt16Number*) output = wOut[4]; output+= 2; *(cmsUInt16Number*) output = wOut[3]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack4Bytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[3]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack4BytesReverse(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[0])); *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[1])); *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[2])); *output++ = REVERSE_FLAVOR_8(FROM_16_TO_8(wOut[3])); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack4BytesSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[3]); *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[2]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // ABGR static cmsUInt8Number* Pack4BytesSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[3]); *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[0]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack4BytesSwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[3]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack4Words(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[3]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack4WordsReverse(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]); output+= 2; *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[1]); output+= 2; *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[2]); output+= 2; *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[3]); output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // ABGR static cmsUInt8Number* Pack4WordsSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[3]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // CMYK static cmsUInt8Number* Pack4WordsBigEndian(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); output+= 2; *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[1]); output+= 2; *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[2]); output+= 2; *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[3]); output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* PackLabV2_8(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0])); *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[1])); *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[2])); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* PackALabV2_8(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[0])); *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[1])); *output++ = FROM_16_TO_8(FomLabV4ToLabV2(wOut[2])); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* PackLabV2_16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[0]); output += 2; *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[1]); output += 2; *(cmsUInt16Number*) output = FomLabV4ToLabV2(wOut[2]); output += 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3Bytes(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[2]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesOptimized(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[0] & 0xFFU); *output++ = (wOut[1] & 0xFFU); *output++ = (wOut[2] & 0xFFU); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[0]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesSwapOptimized(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[2] & 0xFFU); *output++ = (wOut[1] & 0xFFU); *output++ = (wOut[0] & 0xFFU); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3Words(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3WordsSwap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3WordsBigEndian(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); output+= 2; *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[1]); output+= 2; *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[2]); output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[2]); output++; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1Optimized(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[0] & 0xFFU); *output++ = (wOut[1] & 0xFFU); *output++ = (wOut[2] & 0xFFU); output++; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(wOut[0]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[2]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1SwapFirstOptimized(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = (wOut[0] & 0xFFU); *output++ = (wOut[1] & 0xFFU); *output++ = (wOut[2] & 0xFFU); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[0]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1SwapOptimized(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = (wOut[2] & 0xFFU); *output++ = (wOut[1] & 0xFFU); *output++ = (wOut[0] & 0xFFU); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[2]); *output++ = FROM_16_TO_8(wOut[1]); *output++ = FROM_16_TO_8(wOut[0]); output++; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3BytesAndSkip1SwapSwapFirstOptimized(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = (wOut[2] & 0xFFU); *output++ = (wOut[1] & 0xFFU); *output++ = (wOut[0] & 0xFFU); output++; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3WordsAndSkip1(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3WordsAndSkip1Swap(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3WordsAndSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output+= 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[2]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack3WordsAndSkip1SwapSwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[2]; output+= 2; *(cmsUInt16Number*) output = wOut[1]; output+= 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1Byte(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1ByteReversed(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(REVERSE_FLAVOR_16(wOut[0])); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1ByteSkip1(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *output++ = FROM_16_TO_8(wOut[0]); output++; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1ByteSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output++; *output++ = FROM_16_TO_8(wOut[0]); return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1Word(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1WordReversed(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = REVERSE_FLAVOR_16(wOut[0]); output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1WordBigEndian(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = CHANGE_ENDIAN(wOut[0]); output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1WordSkip1(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { *(cmsUInt16Number*) output = wOut[0]; output+= 4; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } static cmsUInt8Number* Pack1WordSkip1SwapFirst(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { output += 2; *(cmsUInt16Number*) output = wOut[0]; output+= 2; return output; cmsUNUSED_PARAMETER(info); cmsUNUSED_PARAMETER(Stride); } // Unencoded Float values -- don't try optimize speed static cmsUInt8Number* PackLabDoubleFrom16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(info -> OutputFormat)) { cmsCIELab Lab; cmsFloat64Number* Out = (cmsFloat64Number*) output; cmsLabEncoded2Float(&Lab, wOut); Out[0] = Lab.L; Out[Stride] = Lab.a; Out[Stride*2] = Lab.b; return output + sizeof(cmsFloat64Number); } else { cmsLabEncoded2Float((cmsCIELab*) output, wOut); return output + (sizeof(cmsCIELab) + T_EXTRA(info ->OutputFormat) * sizeof(cmsFloat64Number)); } } static cmsUInt8Number* PackLabFloatFrom16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsCIELab Lab; cmsLabEncoded2Float(&Lab, wOut); if (T_PLANAR(info -> OutputFormat)) { cmsFloat32Number* Out = (cmsFloat32Number*) output; Stride /= PixelSize(info->OutputFormat); Out[0] = (cmsFloat32Number)Lab.L; Out[Stride] = (cmsFloat32Number)Lab.a; Out[Stride*2] = (cmsFloat32Number)Lab.b; return output + sizeof(cmsFloat32Number); } else { ((cmsFloat32Number*) output)[0] = (cmsFloat32Number) Lab.L; ((cmsFloat32Number*) output)[1] = (cmsFloat32Number) Lab.a; ((cmsFloat32Number*) output)[2] = (cmsFloat32Number) Lab.b; return output + (3 + T_EXTRA(info ->OutputFormat)) * sizeof(cmsFloat32Number); } } static cmsUInt8Number* PackXYZDoubleFrom16(CMSREGISTER _cmsTRANSFORM* Info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(Info -> OutputFormat)) { cmsCIEXYZ XYZ; cmsFloat64Number* Out = (cmsFloat64Number*) output; cmsXYZEncoded2Float(&XYZ, wOut); Stride /= PixelSize(Info->OutputFormat); Out[0] = XYZ.X; Out[Stride] = XYZ.Y; Out[Stride*2] = XYZ.Z; return output + sizeof(cmsFloat64Number); } else { cmsXYZEncoded2Float((cmsCIEXYZ*) output, wOut); return output + (sizeof(cmsCIEXYZ) + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat64Number)); } } static cmsUInt8Number* PackXYZFloatFrom16(CMSREGISTER _cmsTRANSFORM* Info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { if (T_PLANAR(Info -> OutputFormat)) { cmsCIEXYZ XYZ; cmsFloat32Number* Out = (cmsFloat32Number*) output; cmsXYZEncoded2Float(&XYZ, wOut); Stride /= PixelSize(Info->OutputFormat); Out[0] = (cmsFloat32Number) XYZ.X; Out[Stride] = (cmsFloat32Number) XYZ.Y; Out[Stride*2] = (cmsFloat32Number) XYZ.Z; return output + sizeof(cmsFloat32Number); } else { cmsCIEXYZ XYZ; cmsFloat32Number* Out = (cmsFloat32Number*) output; cmsXYZEncoded2Float(&XYZ, wOut); Out[0] = (cmsFloat32Number) XYZ.X; Out[1] = (cmsFloat32Number) XYZ.Y; Out[2] = (cmsFloat32Number) XYZ.Z; return output + (3 * sizeof(cmsFloat32Number) + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number)); } } static cmsUInt8Number* PackDoubleFrom16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info -> OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> OutputFormat); cmsUInt32Number Planar = T_PLANAR(info -> OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35 : 65535.0; cmsFloat64Number v = 0; cmsFloat64Number* swap1 = (cmsFloat64Number*) output; cmsUInt32Number i, start = 0; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = (cmsFloat64Number) wOut[index] / maximum; if (Reverse) v = maximum - v; if (Planar) ((cmsFloat64Number*) output)[(i + start) * Stride]= v; else ((cmsFloat64Number*) output)[i + start] = v; } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number)); *swap1 = v; } if (T_PLANAR(info -> OutputFormat)) return output + sizeof(cmsFloat64Number); else return output + (nChan + Extra) * sizeof(cmsFloat64Number); } static cmsUInt8Number* PackFloatFrom16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info->OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info->OutputFormat); cmsUInt32Number Planar = T_PLANAR(info->OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 655.35 : 65535.0; cmsFloat64Number v = 0; cmsFloat32Number* swap1 = (cmsFloat32Number*)output; cmsUInt32Number i, start = 0; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i = 0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = (cmsFloat64Number)wOut[index] / maximum; if (Reverse) v = maximum - v; if (Planar) ((cmsFloat32Number*)output)[(i + start) * Stride] = (cmsFloat32Number)v; else ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v; } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number)); *swap1 = (cmsFloat32Number)v; } if (T_PLANAR(info->OutputFormat)) return output + sizeof(cmsFloat32Number); else return output + (nChan + Extra) * sizeof(cmsFloat32Number); } // -------------------------------------------------------------------------------------------------------- static cmsUInt8Number* PackFloatsFromFloat(_cmsTRANSFORM* info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info->OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info->OutputFormat); cmsUInt32Number Planar = T_PLANAR(info->OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0; cmsFloat32Number* swap1 = (cmsFloat32Number*)output; cmsFloat64Number v = 0; cmsUInt32Number i, start = 0; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i = 0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = wOut[index] * maximum; if (Reverse) v = maximum - v; if (Planar) ((cmsFloat32Number*)output)[(i + start)* Stride] = (cmsFloat32Number)v; else ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v; } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number)); *swap1 = (cmsFloat32Number)v; } if (T_PLANAR(info->OutputFormat)) return output + sizeof(cmsFloat32Number); else return output + (nChan + Extra) * sizeof(cmsFloat32Number); } static cmsUInt8Number* PackDoublesFromFloat(_cmsTRANSFORM* info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info->OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info->OutputFormat); cmsUInt32Number Planar = T_PLANAR(info->OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0; cmsFloat64Number v = 0; cmsFloat64Number* swap1 = (cmsFloat64Number*)output; cmsUInt32Number i, start = 0; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i = 0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = wOut[index] * maximum; if (Reverse) v = maximum - v; if (Planar) ((cmsFloat64Number*)output)[(i + start) * Stride] = v; else ((cmsFloat64Number*)output)[i + start] = v; } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat64Number)); *swap1 = v; } if (T_PLANAR(info->OutputFormat)) return output + sizeof(cmsFloat64Number); else return output + (nChan + Extra) * sizeof(cmsFloat64Number); } static cmsUInt8Number* PackLabFloatFromFloat(_cmsTRANSFORM* Info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsFloat32Number* Out = (cmsFloat32Number*) output; if (T_PLANAR(Info -> OutputFormat)) { Stride /= PixelSize(Info->OutputFormat); Out[0] = (cmsFloat32Number) (wOut[0] * 100.0); Out[Stride] = (cmsFloat32Number) (wOut[1] * 255.0 - 128.0); Out[Stride*2] = (cmsFloat32Number) (wOut[2] * 255.0 - 128.0); return output + sizeof(cmsFloat32Number); } else { Out[0] = (cmsFloat32Number) (wOut[0] * 100.0); Out[1] = (cmsFloat32Number) (wOut[1] * 255.0 - 128.0); Out[2] = (cmsFloat32Number) (wOut[2] * 255.0 - 128.0); return output + (sizeof(cmsFloat32Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number)); } } static cmsUInt8Number* PackLabDoubleFromFloat(_cmsTRANSFORM* Info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsFloat64Number* Out = (cmsFloat64Number*) output; if (T_PLANAR(Info -> OutputFormat)) { Stride /= PixelSize(Info->OutputFormat); Out[0] = (cmsFloat64Number) (wOut[0] * 100.0); Out[Stride] = (cmsFloat64Number) (wOut[1] * 255.0 - 128.0); Out[Stride*2] = (cmsFloat64Number) (wOut[2] * 255.0 - 128.0); return output + sizeof(cmsFloat64Number); } else { Out[0] = (cmsFloat64Number) (wOut[0] * 100.0); Out[1] = (cmsFloat64Number) (wOut[1] * 255.0 - 128.0); Out[2] = (cmsFloat64Number) (wOut[2] * 255.0 - 128.0); return output + (sizeof(cmsFloat64Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat64Number)); } } // From 0..1 range to 0..MAX_ENCODEABLE_XYZ static cmsUInt8Number* PackXYZFloatFromFloat(_cmsTRANSFORM* Info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsFloat32Number* Out = (cmsFloat32Number*) output; if (T_PLANAR(Info -> OutputFormat)) { Stride /= PixelSize(Info->OutputFormat); Out[0] = (cmsFloat32Number) (wOut[0] * MAX_ENCODEABLE_XYZ); Out[Stride] = (cmsFloat32Number) (wOut[1] * MAX_ENCODEABLE_XYZ); Out[Stride*2] = (cmsFloat32Number) (wOut[2] * MAX_ENCODEABLE_XYZ); return output + sizeof(cmsFloat32Number); } else { Out[0] = (cmsFloat32Number) (wOut[0] * MAX_ENCODEABLE_XYZ); Out[1] = (cmsFloat32Number) (wOut[1] * MAX_ENCODEABLE_XYZ); Out[2] = (cmsFloat32Number) (wOut[2] * MAX_ENCODEABLE_XYZ); return output + (sizeof(cmsFloat32Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat32Number)); } } // Same, but convert to double static cmsUInt8Number* PackXYZDoubleFromFloat(_cmsTRANSFORM* Info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsFloat64Number* Out = (cmsFloat64Number*) output; if (T_PLANAR(Info -> OutputFormat)) { Stride /= PixelSize(Info->OutputFormat); Out[0] = (cmsFloat64Number) (wOut[0] * MAX_ENCODEABLE_XYZ); Out[Stride] = (cmsFloat64Number) (wOut[1] * MAX_ENCODEABLE_XYZ); Out[Stride*2] = (cmsFloat64Number) (wOut[2] * MAX_ENCODEABLE_XYZ); return output + sizeof(cmsFloat64Number); } else { Out[0] = (cmsFloat64Number) (wOut[0] * MAX_ENCODEABLE_XYZ); Out[1] = (cmsFloat64Number) (wOut[1] * MAX_ENCODEABLE_XYZ); Out[2] = (cmsFloat64Number) (wOut[2] * MAX_ENCODEABLE_XYZ); return output + (sizeof(cmsFloat64Number)*3 + T_EXTRA(Info ->OutputFormat) * sizeof(cmsFloat64Number)); } } // ---------------------------------------------------------------------------------------------------------------- #ifndef CMS_NO_HALF_SUPPORT // Decodes an stream of half floats to wIn[] described by input format static cmsUInt8Number* UnrollHalfTo16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number Planar = T_PLANAR(info -> InputFormat); cmsFloat32Number v; cmsUInt32Number i, start = 0; cmsFloat32Number maximum = IsInkSpace(info ->InputFormat) ? 655.35F : 65535.0F; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; if (Planar) v = _cmsHalf2Float ( ((cmsUInt16Number*) accum)[(i + start) * Stride] ); else v = _cmsHalf2Float ( ((cmsUInt16Number*) accum)[i + start] ) ; if (Reverse) v = maximum - v; wIn[index] = _cmsQuickSaturateWord((cmsFloat64Number) v * maximum); } if (Extra == 0 && SwapFirst) { cmsUInt16Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsUInt16Number)); wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsUInt16Number); else return accum + (nChan + Extra) * sizeof(cmsUInt16Number); } // Decodes an stream of half floats to wIn[] described by input format static cmsUInt8Number* UnrollHalfToFloat(_cmsTRANSFORM* info, cmsFloat32Number wIn[], cmsUInt8Number* accum, cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info -> InputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info ->InputFormat); cmsUInt32Number Reverse = T_FLAVOR(info ->InputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info -> InputFormat); cmsUInt32Number Extra = T_EXTRA(info -> InputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsUInt32Number Planar = T_PLANAR(info -> InputFormat); cmsFloat32Number v; cmsUInt32Number i, start = 0; cmsFloat32Number maximum = IsInkSpace(info ->InputFormat) ? 100.0F : 1.0F; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i=0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; if (Planar) v = _cmsHalf2Float ( ((cmsUInt16Number*) accum)[(i + start) * Stride] ); else v = _cmsHalf2Float ( ((cmsUInt16Number*) accum)[i + start] ) ; v /= maximum; wIn[index] = Reverse ? 1 - v : v; } if (Extra == 0 && SwapFirst) { cmsFloat32Number tmp = wIn[0]; memmove(&wIn[0], &wIn[1], (nChan-1) * sizeof(cmsFloat32Number)); wIn[nChan-1] = tmp; } if (T_PLANAR(info -> InputFormat)) return accum + sizeof(cmsUInt16Number); else return accum + (nChan + Extra) * sizeof(cmsUInt16Number); } static cmsUInt8Number* PackHalfFrom16(CMSREGISTER _cmsTRANSFORM* info, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info->OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info->OutputFormat); cmsUInt32Number Planar = T_PLANAR(info->OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 655.35F : 65535.0F; cmsFloat32Number v = 0; cmsUInt16Number* swap1 = (cmsUInt16Number*)output; cmsUInt32Number i, start = 0; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i = 0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = (cmsFloat32Number)wOut[index] / maximum; if (Reverse) v = maximum - v; if (Planar) ((cmsUInt16Number*)output)[(i + start) * Stride] = _cmsFloat2Half(v); else ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v); } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number)); *swap1 = _cmsFloat2Half(v); } if (T_PLANAR(info->OutputFormat)) return output + sizeof(cmsUInt16Number); else return output + (nChan + Extra) * sizeof(cmsUInt16Number); } static cmsUInt8Number* PackHalfFromFloat(_cmsTRANSFORM* info, cmsFloat32Number wOut[], cmsUInt8Number* output, cmsUInt32Number Stride) { cmsUInt32Number nChan = T_CHANNELS(info->OutputFormat); cmsUInt32Number DoSwap = T_DOSWAP(info->OutputFormat); cmsUInt32Number Reverse = T_FLAVOR(info->OutputFormat); cmsUInt32Number Extra = T_EXTRA(info->OutputFormat); cmsUInt32Number SwapFirst = T_SWAPFIRST(info->OutputFormat); cmsUInt32Number Planar = T_PLANAR(info->OutputFormat); cmsUInt32Number ExtraFirst = DoSwap ^ SwapFirst; cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 100.0F : 1.0F; cmsUInt16Number* swap1 = (cmsUInt16Number*)output; cmsFloat32Number v = 0; cmsUInt32Number i, start = 0; Stride /= PixelSize(info->OutputFormat); if (ExtraFirst) start = Extra; for (i = 0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; v = wOut[index] * maximum; if (Reverse) v = maximum - v; if (Planar) ((cmsUInt16Number*)output)[(i + start)* Stride] = _cmsFloat2Half(v); else ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v); } if (Extra == 0 && SwapFirst) { memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number)); *swap1 = (cmsUInt16Number)_cmsFloat2Half(v); } if (T_PLANAR(info->OutputFormat)) return output + sizeof(cmsUInt16Number); else return output + (nChan + Extra)* sizeof(cmsUInt16Number); } #endif // ---------------------------------------------------------------------------------------------------------------- static const cmsFormatters16 InputFormatters16[] = { // Type Mask Function // ---------------------------- ------------------------------------ ---------------------------- { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, UnrollLabDoubleTo16}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleTo16}, { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, UnrollLabFloatTo16}, { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, UnrollXYZFloatTo16}, { TYPE_GRAY_DBL, 0, UnrollDouble1Chan}, { FLOAT_SH(1)|BYTES_SH(0), ANYCHANNELS|ANYPLANAR|ANYSWAPFIRST|ANYFLAVOR| ANYSWAP|ANYEXTRA|ANYSPACE, UnrollDoubleTo16}, { FLOAT_SH(1)|BYTES_SH(4), ANYCHANNELS|ANYPLANAR|ANYSWAPFIRST|ANYFLAVOR| ANYSWAP|ANYEXTRA|ANYSPACE, UnrollFloatTo16}, #ifndef CMS_NO_HALF_SUPPORT { FLOAT_SH(1)|BYTES_SH(2), ANYCHANNELS|ANYPLANAR|ANYSWAPFIRST|ANYFLAVOR| ANYEXTRA|ANYSWAP|ANYSPACE, UnrollHalfTo16}, #endif { CHANNELS_SH(1)|BYTES_SH(1), ANYSPACE, Unroll1Byte}, { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(1), ANYSPACE, Unroll1ByteSkip1}, { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(2), ANYSPACE, Unroll1ByteSkip2}, { CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Unroll1ByteReversed}, { COLORSPACE_SH(PT_MCH2)|CHANNELS_SH(2)|BYTES_SH(1), 0, Unroll2Bytes}, { TYPE_LabV2_8, 0, UnrollLabV2_8 }, { TYPE_ALabV2_8, 0, UnrollALabV2_8 }, { TYPE_LabV2_16, 0, UnrollLabV2_16 }, { CHANNELS_SH(3)|BYTES_SH(1), ANYSPACE, Unroll3Bytes}, { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll3BytesSwap}, { CHANNELS_SH(3)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll3BytesSkip1Swap}, { CHANNELS_SH(3)|EXTRA_SH(1)|BYTES_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll3BytesSkip1SwapFirst}, { CHANNELS_SH(3)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll3BytesSkip1SwapSwapFirst}, { CHANNELS_SH(4)|BYTES_SH(1), ANYSPACE, Unroll4Bytes}, { CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Unroll4BytesReverse}, { CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4BytesSwapFirst}, { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll4BytesSwap}, { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4BytesSwapSwapFirst}, { BYTES_SH(1)|PLANAR_SH(1), ANYFLAVOR|ANYSWAPFIRST| ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollPlanarBytes}, { BYTES_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollChunkyBytes}, { CHANNELS_SH(1)|BYTES_SH(2), ANYSPACE, Unroll1Word}, { CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Unroll1WordReversed}, { CHANNELS_SH(1)|BYTES_SH(2)|EXTRA_SH(3), ANYSPACE, Unroll1WordSkip3}, { CHANNELS_SH(2)|BYTES_SH(2), ANYSPACE, Unroll2Words}, { CHANNELS_SH(3)|BYTES_SH(2), ANYSPACE, Unroll3Words}, { CHANNELS_SH(4)|BYTES_SH(2), ANYSPACE, Unroll4Words}, { CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Unroll3WordsSwap}, { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll3WordsSkip1SwapFirst}, { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|DOSWAP_SH(1), ANYSPACE, Unroll3WordsSkip1Swap}, { CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Unroll4WordsReverse}, { CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1), ANYSPACE, Unroll4WordsSwapFirst}, { CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Unroll4WordsSwap}, { CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Unroll4WordsSwapSwapFirst}, { BYTES_SH(2)|PLANAR_SH(1), ANYFLAVOR|ANYSWAP|ANYENDIAN|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollPlanarWords}, { BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYENDIAN|ANYEXTRA|ANYCHANNELS|ANYSPACE, UnrollAnyWords}, }; static const cmsFormattersFloat InputFormattersFloat[] = { // Type Mask Function // ---------------------------- ------------------------------------ ---------------------------- { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, UnrollLabDoubleToFloat}, { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, UnrollLabFloatToFloat}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, UnrollXYZDoubleToFloat}, { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, UnrollXYZFloatToFloat}, { FLOAT_SH(1)|BYTES_SH(4), ANYPLANAR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA| ANYCHANNELS|ANYSPACE, UnrollFloatsToFloat}, { FLOAT_SH(1)|BYTES_SH(0), ANYPLANAR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA| ANYCHANNELS|ANYSPACE, UnrollDoublesToFloat}, #ifndef CMS_NO_HALF_SUPPORT { FLOAT_SH(1)|BYTES_SH(2), ANYPLANAR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA| ANYCHANNELS|ANYSPACE, UnrollHalfToFloat}, #endif }; // Bit fields set to one in the mask are not compared static cmsFormatter _cmsGetStockInputFormatter(cmsUInt32Number dwInput, cmsUInt32Number dwFlags) { cmsUInt32Number i; cmsFormatter fr; switch (dwFlags) { case CMS_PACK_FLAGS_16BITS: { for (i=0; i < sizeof(InputFormatters16) / sizeof(cmsFormatters16); i++) { const cmsFormatters16* f = InputFormatters16 + i; if ((dwInput & ~f ->Mask) == f ->Type) { fr.Fmt16 = f ->Frm; return fr; } } } break; case CMS_PACK_FLAGS_FLOAT: { for (i=0; i < sizeof(InputFormattersFloat) / sizeof(cmsFormattersFloat); i++) { const cmsFormattersFloat* f = InputFormattersFloat + i; if ((dwInput & ~f ->Mask) == f ->Type) { fr.FmtFloat = f ->Frm; return fr; } } } break; default:; } fr.Fmt16 = NULL; return fr; } static const cmsFormatters16 OutputFormatters16[] = { // Type Mask Function // ---------------------------- ------------------------------------ ---------------------------- { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, PackLabDoubleFrom16}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFrom16}, { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, PackLabFloatFrom16}, { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, PackXYZFloatFrom16}, { FLOAT_SH(1)|BYTES_SH(0), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackDoubleFrom16}, { FLOAT_SH(1)|BYTES_SH(4), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackFloatFrom16}, #ifndef CMS_NO_HALF_SUPPORT { FLOAT_SH(1)|BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP| ANYCHANNELS|ANYPLANAR|ANYEXTRA|ANYSPACE, PackHalfFrom16}, #endif { CHANNELS_SH(1)|BYTES_SH(1), ANYSPACE, Pack1Byte}, { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(1), ANYSPACE, Pack1ByteSkip1}, { CHANNELS_SH(1)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack1ByteSkip1SwapFirst}, { CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Pack1ByteReversed}, { TYPE_LabV2_8, 0, PackLabV2_8 }, { TYPE_ALabV2_8, 0, PackALabV2_8 }, { TYPE_LabV2_16, 0, PackLabV2_16 }, { CHANNELS_SH(3)|BYTES_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesOptimized}, { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesAndSkip1Optimized}, { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesAndSkip1SwapFirstOptimized}, { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesAndSkip1SwapSwapFirstOptimized}, { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|EXTRA_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesAndSkip1SwapOptimized}, { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|OPTIMIZED_SH(1), ANYSPACE, Pack3BytesSwapOptimized}, { CHANNELS_SH(3)|BYTES_SH(1), ANYSPACE, Pack3Bytes}, { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1), ANYSPACE, Pack3BytesAndSkip1}, { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack3BytesAndSkip1SwapFirst}, { CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack3BytesAndSkip1SwapSwapFirst}, { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|EXTRA_SH(1), ANYSPACE, Pack3BytesAndSkip1Swap}, { CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack3BytesSwap}, { CHANNELS_SH(6)|BYTES_SH(1), ANYSPACE, Pack6Bytes}, { CHANNELS_SH(6)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack6BytesSwap}, { CHANNELS_SH(4)|BYTES_SH(1), ANYSPACE, Pack4Bytes}, { CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1), ANYSPACE, Pack4BytesReverse}, { CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack4BytesSwapFirst}, { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack4BytesSwap}, { CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack4BytesSwapSwapFirst}, { BYTES_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackAnyBytes}, { BYTES_SH(1)|PLANAR_SH(1), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarBytes}, { CHANNELS_SH(1)|BYTES_SH(2), ANYSPACE, Pack1Word}, { CHANNELS_SH(1)|BYTES_SH(2)|EXTRA_SH(1), ANYSPACE, Pack1WordSkip1}, { CHANNELS_SH(1)|BYTES_SH(2)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack1WordSkip1SwapFirst}, { CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Pack1WordReversed}, { CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1), ANYSPACE, Pack1WordBigEndian}, { CHANNELS_SH(3)|BYTES_SH(2), ANYSPACE, Pack3Words}, { CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Pack3WordsSwap}, { CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1), ANYSPACE, Pack3WordsBigEndian}, { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1), ANYSPACE, Pack3WordsAndSkip1}, { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|DOSWAP_SH(1), ANYSPACE, Pack3WordsAndSkip1Swap}, { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack3WordsAndSkip1SwapFirst}, { CHANNELS_SH(3)|BYTES_SH(2)|EXTRA_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1), ANYSPACE, Pack3WordsAndSkip1SwapSwapFirst}, { CHANNELS_SH(4)|BYTES_SH(2), ANYSPACE, Pack4Words}, { CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1), ANYSPACE, Pack4WordsReverse}, { CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Pack4WordsSwap}, { CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1), ANYSPACE, Pack4WordsBigEndian}, { CHANNELS_SH(6)|BYTES_SH(2), ANYSPACE, Pack6Words}, { CHANNELS_SH(6)|BYTES_SH(2)|DOSWAP_SH(1), ANYSPACE, Pack6WordsSwap}, { BYTES_SH(2)|PLANAR_SH(1), ANYFLAVOR|ANYENDIAN|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackPlanarWords}, { BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYENDIAN|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackAnyWords} }; static const cmsFormattersFloat OutputFormattersFloat[] = { // Type Mask Function // ---------------------------- --------------------------------------------------- ---------------------------- { TYPE_Lab_FLT, ANYPLANAR|ANYEXTRA, PackLabFloatFromFloat}, { TYPE_XYZ_FLT, ANYPLANAR|ANYEXTRA, PackXYZFloatFromFloat}, { TYPE_Lab_DBL, ANYPLANAR|ANYEXTRA, PackLabDoubleFromFloat}, { TYPE_XYZ_DBL, ANYPLANAR|ANYEXTRA, PackXYZDoubleFromFloat}, { FLOAT_SH(1)|BYTES_SH(4), ANYPLANAR| ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackFloatsFromFloat }, { FLOAT_SH(1)|BYTES_SH(0), ANYPLANAR| ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackDoublesFromFloat }, #ifndef CMS_NO_HALF_SUPPORT { FLOAT_SH(1)|BYTES_SH(2), ANYFLAVOR|ANYSWAPFIRST|ANYSWAP|ANYEXTRA|ANYCHANNELS|ANYSPACE, PackHalfFromFloat }, #endif }; // Bit fields set to one in the mask are not compared static cmsFormatter _cmsGetStockOutputFormatter(cmsUInt32Number dwInput, cmsUInt32Number dwFlags) { cmsUInt32Number i; cmsFormatter fr; // Optimization is only a hint dwInput &= ~OPTIMIZED_SH(1); switch (dwFlags) { case CMS_PACK_FLAGS_16BITS: { for (i=0; i < sizeof(OutputFormatters16) / sizeof(cmsFormatters16); i++) { const cmsFormatters16* f = OutputFormatters16 + i; if ((dwInput & ~f ->Mask) == f ->Type) { fr.Fmt16 = f ->Frm; return fr; } } } break; case CMS_PACK_FLAGS_FLOAT: { for (i=0; i < sizeof(OutputFormattersFloat) / sizeof(cmsFormattersFloat); i++) { const cmsFormattersFloat* f = OutputFormattersFloat + i; if ((dwInput & ~f ->Mask) == f ->Type) { fr.FmtFloat = f ->Frm; return fr; } } } break; default:; } fr.Fmt16 = NULL; return fr; } typedef struct _cms_formatters_factory_list { cmsFormatterFactory Factory; struct _cms_formatters_factory_list *Next; } cmsFormattersFactoryList; _cmsFormattersPluginChunkType _cmsFormattersPluginChunk = { NULL }; // Duplicates the zone of memory used by the plug-in in the new context static void DupFormatterFactoryList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsFormattersPluginChunkType newHead = { NULL }; cmsFormattersFactoryList* entry; cmsFormattersFactoryList* Anterior = NULL; _cmsFormattersPluginChunkType* head = (_cmsFormattersPluginChunkType*) src->chunks[FormattersPlugin]; _cmsAssert(head != NULL); // Walk the list copying all nodes for (entry = head->FactoryList; entry != NULL; entry = entry ->Next) { cmsFormattersFactoryList *newEntry = ( cmsFormattersFactoryList *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(cmsFormattersFactoryList)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.FactoryList == NULL) newHead.FactoryList = newEntry; } ctx ->chunks[FormattersPlugin] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsFormattersPluginChunkType)); } // The interpolation plug-in memory chunk allocator/dup void _cmsAllocFormattersPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsAssert(ctx != NULL); if (src != NULL) { // Duplicate the LIST DupFormatterFactoryList(ctx, src); } else { static _cmsFormattersPluginChunkType FormattersPluginChunk = { NULL }; ctx ->chunks[FormattersPlugin] = _cmsSubAllocDup(ctx ->MemPool, &FormattersPluginChunk, sizeof(_cmsFormattersPluginChunkType)); } } // Formatters management cmsBool _cmsRegisterFormattersPlugin(cmsContext ContextID, cmsPluginBase* Data) { _cmsFormattersPluginChunkType* ctx = ( _cmsFormattersPluginChunkType*) _cmsContextGetClientChunk(ContextID, FormattersPlugin); cmsPluginFormatters* Plugin = (cmsPluginFormatters*) Data; cmsFormattersFactoryList* fl ; // Reset to built-in defaults if (Data == NULL) { ctx ->FactoryList = NULL; return TRUE; } fl = (cmsFormattersFactoryList*) _cmsPluginMalloc(ContextID, sizeof(cmsFormattersFactoryList)); if (fl == NULL) return FALSE; fl ->Factory = Plugin ->FormattersFactory; fl ->Next = ctx -> FactoryList; ctx ->FactoryList = fl; return TRUE; } cmsFormatter CMSEXPORT _cmsGetFormatter(cmsContext ContextID, cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 cmsFormatterDirection Dir, cmsUInt32Number dwFlags) { _cmsFormattersPluginChunkType* ctx = ( _cmsFormattersPluginChunkType*) _cmsContextGetClientChunk(ContextID, FormattersPlugin); cmsFormattersFactoryList* f; for (f =ctx->FactoryList; f != NULL; f = f ->Next) { cmsFormatter fn = f ->Factory(Type, Dir, dwFlags); if (fn.Fmt16 != NULL) return fn; } // Revert to default if (Dir == cmsFormatterInput) return _cmsGetStockInputFormatter(Type, dwFlags); else return _cmsGetStockOutputFormatter(Type, dwFlags); } // Return whatever given formatter refers to float values cmsBool _cmsFormatterIsFloat(cmsUInt32Number Type) { return T_FLOAT(Type) ? TRUE : FALSE; } // Return whatever given formatter refers to 8 bits cmsBool _cmsFormatterIs8bit(cmsUInt32Number Type) { cmsUInt32Number Bytes = T_BYTES(Type); return (Bytes == 1); } // Build a suitable formatter for the colorspace of this profile cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat) { cmsColorSpaceSignature ColorSpace = cmsGetColorSpace(hProfile); cmsUInt32Number ColorSpaceBits = (cmsUInt32Number) _cmsLCMScolorSpace(ColorSpace); cmsUInt32Number nOutputChans = cmsChannelsOf(ColorSpace); cmsUInt32Number Float = lIsFloat ? 1U : 0; // Create a fake formatter for result return FLOAT_SH(Float) | COLORSPACE_SH(ColorSpaceBits) | BYTES_SH(nBytes) | CHANNELS_SH(nOutputChans); } // Build a suitable formatter for the colorspace of this profile cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat) { cmsColorSpaceSignature ColorSpace = cmsGetPCS(hProfile); cmsUInt32Number ColorSpaceBits = (cmsUInt32Number) _cmsLCMScolorSpace(ColorSpace); cmsUInt32Number nOutputChans = cmsChannelsOf(ColorSpace); cmsUInt32Number Float = lIsFloat ? 1U : 0; // Create a fake formatter for result return FLOAT_SH(Float) | COLORSPACE_SH(ColorSpaceBits) | BYTES_SH(nBytes) | CHANNELS_SH(nOutputChans); } lcms2-2.12rc1/src/cmsgamma.c0000644000175000017500000012523613775114656014646 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Tone curves are powerful constructs that can contain curves specified in diverse ways. // The curve is stored in segments, where each segment can be sampled or specified by parameters. // a 16.bit simplification of the *whole* curve is kept for optimization purposes. For float operation, // each segment is evaluated separately. Plug-ins may be used to define new parametric schemes, // each plug-in may define up to MAX_TYPES_IN_LCMS_PLUGIN functions types. For defining a function, // the plug-in should provide the type id, how many parameters each type has, and a pointer to // a procedure that evaluates the function. In the case of reverse evaluation, the evaluator will // be called with the type id as a negative value, and a sampled version of the reversed curve // will be built. // ----------------------------------------------------------------- Implementation // Maxim number of nodes #define MAX_NODES_IN_CURVE 4097 #define MINUS_INF (-1E22F) #define PLUS_INF (+1E22F) // The list of supported parametric curves typedef struct _cmsParametricCurvesCollection_st { cmsUInt32Number nFunctions; // Number of supported functions in this chunk cmsInt32Number FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // The identification types cmsUInt32Number ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN]; // Number of parameters for each function cmsParametricCurveEvaluator Evaluator; // The evaluator struct _cmsParametricCurvesCollection_st* Next; // Next in list } _cmsParametricCurvesCollection; // This is the default (built-in) evaluator static cmsFloat64Number DefaultEvalParametricFn(cmsInt32Number Type, const cmsFloat64Number Params[], cmsFloat64Number R); // The built-in list static _cmsParametricCurvesCollection DefaultCurves = { 10, // # of curve types { 1, 2, 3, 4, 5, 6, 7, 8, 108, 109 }, // Parametric curve ID { 1, 3, 4, 5, 7, 4, 5, 5, 1, 1 }, // Parameters by type DefaultEvalParametricFn, // Evaluator NULL // Next in chain }; // Duplicates the zone of memory used by the plug-in in the new context static void DupPluginCurvesList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsCurvesPluginChunkType newHead = { NULL }; _cmsParametricCurvesCollection* entry; _cmsParametricCurvesCollection* Anterior = NULL; _cmsCurvesPluginChunkType* head = (_cmsCurvesPluginChunkType*) src->chunks[CurvesPlugin]; _cmsAssert(head != NULL); // Walk the list copying all nodes for (entry = head->ParametricCurves; entry != NULL; entry = entry ->Next) { _cmsParametricCurvesCollection *newEntry = ( _cmsParametricCurvesCollection *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(_cmsParametricCurvesCollection)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.ParametricCurves == NULL) newHead.ParametricCurves = newEntry; } ctx ->chunks[CurvesPlugin] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsCurvesPluginChunkType)); } // The allocator have to follow the chain void _cmsAllocCurvesPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsAssert(ctx != NULL); if (src != NULL) { // Copy all linked list DupPluginCurvesList(ctx, src); } else { static _cmsCurvesPluginChunkType CurvesPluginChunk = { NULL }; ctx ->chunks[CurvesPlugin] = _cmsSubAllocDup(ctx ->MemPool, &CurvesPluginChunk, sizeof(_cmsCurvesPluginChunkType)); } } // The linked list head _cmsCurvesPluginChunkType _cmsCurvesPluginChunk = { NULL }; // As a way to install new parametric curves cmsBool _cmsRegisterParametricCurvesPlugin(cmsContext ContextID, cmsPluginBase* Data) { _cmsCurvesPluginChunkType* ctx = ( _cmsCurvesPluginChunkType*) _cmsContextGetClientChunk(ContextID, CurvesPlugin); cmsPluginParametricCurves* Plugin = (cmsPluginParametricCurves*) Data; _cmsParametricCurvesCollection* fl; if (Data == NULL) { ctx -> ParametricCurves = NULL; return TRUE; } fl = (_cmsParametricCurvesCollection*) _cmsPluginMalloc(ContextID, sizeof(_cmsParametricCurvesCollection)); if (fl == NULL) return FALSE; // Copy the parameters fl ->Evaluator = Plugin ->Evaluator; fl ->nFunctions = Plugin ->nFunctions; // Make sure no mem overwrites if (fl ->nFunctions > MAX_TYPES_IN_LCMS_PLUGIN) fl ->nFunctions = MAX_TYPES_IN_LCMS_PLUGIN; // Copy the data memmove(fl->FunctionTypes, Plugin ->FunctionTypes, fl->nFunctions * sizeof(cmsUInt32Number)); memmove(fl->ParameterCount, Plugin ->ParameterCount, fl->nFunctions * sizeof(cmsUInt32Number)); // Keep linked list fl ->Next = ctx->ParametricCurves; ctx->ParametricCurves = fl; // All is ok return TRUE; } // Search in type list, return position or -1 if not found static int IsInSet(int Type, _cmsParametricCurvesCollection* c) { int i; for (i=0; i < (int) c ->nFunctions; i++) if (abs(Type) == c ->FunctionTypes[i]) return i; return -1; } // Search for the collection which contains a specific type static _cmsParametricCurvesCollection *GetParametricCurveByType(cmsContext ContextID, int Type, int* index) { _cmsParametricCurvesCollection* c; int Position; _cmsCurvesPluginChunkType* ctx = ( _cmsCurvesPluginChunkType*) _cmsContextGetClientChunk(ContextID, CurvesPlugin); for (c = ctx->ParametricCurves; c != NULL; c = c ->Next) { Position = IsInSet(Type, c); if (Position != -1) { if (index != NULL) *index = Position; return c; } } // If none found, revert for defaults for (c = &DefaultCurves; c != NULL; c = c ->Next) { Position = IsInSet(Type, c); if (Position != -1) { if (index != NULL) *index = Position; return c; } } return NULL; } // Low level allocate, which takes care of memory details. nEntries may be zero, and in this case // no optimation curve is computed. nSegments may also be zero in the inverse case, where only the // optimization curve is given. Both features simultaneously is an error static cmsToneCurve* AllocateToneCurveStruct(cmsContext ContextID, cmsUInt32Number nEntries, cmsUInt32Number nSegments, const cmsCurveSegment* Segments, const cmsUInt16Number* Values) { cmsToneCurve* p; cmsUInt32Number i; // We allow huge tables, which are then restricted for smoothing operations if (nEntries > 65530) { cmsSignalError(ContextID, cmsERROR_RANGE, "Couldn't create tone curve of more than 65530 entries"); return NULL; } if (nEntries == 0 && nSegments == 0) { cmsSignalError(ContextID, cmsERROR_RANGE, "Couldn't create tone curve with zero segments and no table"); return NULL; } // Allocate all required pointers, etc. p = (cmsToneCurve*) _cmsMallocZero(ContextID, sizeof(cmsToneCurve)); if (!p) return NULL; // In this case, there are no segments if (nSegments == 0) { p ->Segments = NULL; p ->Evals = NULL; } else { p ->Segments = (cmsCurveSegment*) _cmsCalloc(ContextID, nSegments, sizeof(cmsCurveSegment)); if (p ->Segments == NULL) goto Error; p ->Evals = (cmsParametricCurveEvaluator*) _cmsCalloc(ContextID, nSegments, sizeof(cmsParametricCurveEvaluator)); if (p ->Evals == NULL) goto Error; } p -> nSegments = nSegments; // This 16-bit table contains a limited precision representation of the whole curve and is kept for // increasing xput on certain operations. if (nEntries == 0) { p ->Table16 = NULL; } else { p ->Table16 = (cmsUInt16Number*) _cmsCalloc(ContextID, nEntries, sizeof(cmsUInt16Number)); if (p ->Table16 == NULL) goto Error; } p -> nEntries = nEntries; // Initialize members if requested if (Values != NULL && (nEntries > 0)) { for (i=0; i < nEntries; i++) p ->Table16[i] = Values[i]; } // Initialize the segments stuff. The evaluator for each segment is located and a pointer to it // is placed in advance to maximize performance. if (Segments != NULL && (nSegments > 0)) { _cmsParametricCurvesCollection *c; p ->SegInterp = (cmsInterpParams**) _cmsCalloc(ContextID, nSegments, sizeof(cmsInterpParams*)); if (p ->SegInterp == NULL) goto Error; for (i=0; i < nSegments; i++) { // Type 0 is a special marker for table-based curves if (Segments[i].Type == 0) p ->SegInterp[i] = _cmsComputeInterpParams(ContextID, Segments[i].nGridPoints, 1, 1, NULL, CMS_LERP_FLAGS_FLOAT); memmove(&p ->Segments[i], &Segments[i], sizeof(cmsCurveSegment)); if (Segments[i].Type == 0 && Segments[i].SampledPoints != NULL) p ->Segments[i].SampledPoints = (cmsFloat32Number*) _cmsDupMem(ContextID, Segments[i].SampledPoints, sizeof(cmsFloat32Number) * Segments[i].nGridPoints); else p ->Segments[i].SampledPoints = NULL; c = GetParametricCurveByType(ContextID, Segments[i].Type, NULL); if (c != NULL) p ->Evals[i] = c ->Evaluator; } } p ->InterpParams = _cmsComputeInterpParams(ContextID, p ->nEntries, 1, 1, p->Table16, CMS_LERP_FLAGS_16BITS); if (p->InterpParams != NULL) return p; Error: if (p -> SegInterp) _cmsFree(ContextID, p -> SegInterp); if (p -> Segments) _cmsFree(ContextID, p -> Segments); if (p -> Evals) _cmsFree(ContextID, p -> Evals); if (p ->Table16) _cmsFree(ContextID, p ->Table16); _cmsFree(ContextID, p); return NULL; } // Generates a sigmoidal function with desired steepness. cmsINLINE double sigmoid_base(double k, double t) { return (1.0 / (1.0 + exp(-k * t))) - 0.5; } cmsINLINE double inverted_sigmoid_base(double k, double t) { return -log((1.0 / (t + 0.5)) - 1.0) / k; } cmsINLINE double sigmoid_factory(double k, double t) { double correction = 0.5 / sigmoid_base(k, 1); return correction * sigmoid_base(k, 2.0 * t - 1.0) + 0.5; } cmsINLINE double inverse_sigmoid_factory(double k, double t) { double correction = 0.5 / sigmoid_base(k, 1); return (inverted_sigmoid_base(k, (t - 0.5) / correction) + 1.0) / 2.0; } // Parametric Fn using floating point static cmsFloat64Number DefaultEvalParametricFn(cmsInt32Number Type, const cmsFloat64Number Params[], cmsFloat64Number R) { cmsFloat64Number e, Val, disc; switch (Type) { // X = Y ^ Gamma case 1: if (R < 0) { if (fabs(Params[0] - 1.0) < MATRIX_DET_TOLERANCE) Val = R; else Val = 0; } else Val = pow(R, Params[0]); break; // Type 1 Reversed: X = Y ^1/gamma case -1: if (R < 0) { if (fabs(Params[0] - 1.0) < MATRIX_DET_TOLERANCE) Val = R; else Val = 0; } else { if (fabs(Params[0]) < MATRIX_DET_TOLERANCE) Val = PLUS_INF; else Val = pow(R, 1 / Params[0]); } break; // CIE 122-1966 // Y = (aX + b)^Gamma | X >= -b/a // Y = 0 | else case 2: { if (fabs(Params[1]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { disc = -Params[2] / Params[1]; if (R >= disc) { e = Params[1] * R + Params[2]; if (e > 0) Val = pow(e, Params[0]); else Val = 0; } else Val = 0; } } break; // Type 2 Reversed // X = (Y ^1/g - b) / a case -2: { if (fabs(Params[0]) < MATRIX_DET_TOLERANCE || fabs(Params[1]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { if (R < 0) Val = 0; else Val = (pow(R, 1.0 / Params[0]) - Params[2]) / Params[1]; if (Val < 0) Val = 0; } } break; // IEC 61966-3 // Y = (aX + b)^Gamma | X <= -b/a // Y = c | else case 3: { if (fabs(Params[1]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { disc = -Params[2] / Params[1]; if (disc < 0) disc = 0; if (R >= disc) { e = Params[1] * R + Params[2]; if (e > 0) Val = pow(e, Params[0]) + Params[3]; else Val = 0; } else Val = Params[3]; } } break; // Type 3 reversed // X=((Y-c)^1/g - b)/a | (Y>=c) // X=-b/a | (Y= Params[3]) { e = R - Params[3]; if (e > 0) Val = (pow(e, 1 / Params[0]) - Params[2]) / Params[1]; else Val = 0; } else { Val = -Params[2] / Params[1]; } } } break; // IEC 61966-2.1 (sRGB) // Y = (aX + b)^Gamma | X >= d // Y = cX | X < d case 4: if (R >= Params[4]) { e = Params[1]*R + Params[2]; if (e > 0) Val = pow(e, Params[0]); else Val = 0; } else Val = R * Params[3]; break; // Type 4 reversed // X=((Y^1/g-b)/a) | Y >= (ad+b)^g // X=Y/c | Y< (ad+b)^g case -4: { if (fabs(Params[0]) < MATRIX_DET_TOLERANCE || fabs(Params[1]) < MATRIX_DET_TOLERANCE || fabs(Params[3]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { e = Params[1] * Params[4] + Params[2]; if (e < 0) disc = 0; else disc = pow(e, Params[0]); if (R >= disc) { Val = (pow(R, 1.0 / Params[0]) - Params[2]) / Params[1]; } else { Val = R / Params[3]; } } } break; // Y = (aX + b)^Gamma + e | X >= d // Y = cX + f | X < d case 5: if (R >= Params[4]) { e = Params[1]*R + Params[2]; if (e > 0) Val = pow(e, Params[0]) + Params[5]; else Val = Params[5]; } else Val = R*Params[3] + Params[6]; break; // Reversed type 5 // X=((Y-e)1/g-b)/a | Y >=(ad+b)^g+e), cd+f // X=(Y-f)/c | else case -5: { if (fabs(Params[1]) < MATRIX_DET_TOLERANCE || fabs(Params[3]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { disc = Params[3] * Params[4] + Params[6]; if (R >= disc) { e = R - Params[5]; if (e < 0) Val = 0; else Val = (pow(e, 1.0 / Params[0]) - Params[2]) / Params[1]; } else { Val = (R - Params[6]) / Params[3]; } } } break; // Types 6,7,8 comes from segmented curves as described in ICCSpecRevision_02_11_06_Float.pdf // Type 6 is basically identical to type 5 without d // Y = (a * X + b) ^ Gamma + c case 6: e = Params[1]*R + Params[2]; if (e < 0) Val = Params[3]; else Val = pow(e, Params[0]) + Params[3]; break; // ((Y - c) ^1/Gamma - b) / a case -6: { if (fabs(Params[1]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { e = R - Params[3]; if (e < 0) Val = 0; else Val = (pow(e, 1.0 / Params[0]) - Params[2]) / Params[1]; } } break; // Y = a * log (b * X^Gamma + c) + d case 7: e = Params[2] * pow(R, Params[0]) + Params[3]; if (e <= 0) Val = Params[4]; else Val = Params[1]*log10(e) + Params[4]; break; // (Y - d) / a = log(b * X ^Gamma + c) // pow(10, (Y-d) / a) = b * X ^Gamma + c // pow((pow(10, (Y-d) / a) - c) / b, 1/g) = X case -7: { if (fabs(Params[0]) < MATRIX_DET_TOLERANCE || fabs(Params[1]) < MATRIX_DET_TOLERANCE || fabs(Params[2]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { Val = pow((pow(10.0, (R - Params[4]) / Params[1]) - Params[3]) / Params[2], 1.0 / Params[0]); } } break; //Y = a * b^(c*X+d) + e case 8: Val = (Params[0] * pow(Params[1], Params[2] * R + Params[3]) + Params[4]); break; // Y = (log((y-e) / a) / log(b) - d ) / c // a=0, b=1, c=2, d=3, e=4, case -8: disc = R - Params[4]; if (disc < 0) Val = 0; else { if (fabs(Params[0]) < MATRIX_DET_TOLERANCE || fabs(Params[2]) < MATRIX_DET_TOLERANCE) { Val = 0; } else { Val = (log(disc / Params[0]) / log(Params[1]) - Params[3]) / Params[2]; } } break; // S-Shaped: (1 - (1-x)^1/g)^1/g case 108: if (fabs(Params[0]) < MATRIX_DET_TOLERANCE) Val = 0; else Val = pow(1.0 - pow(1 - R, 1/Params[0]), 1/Params[0]); break; // y = (1 - (1-x)^1/g)^1/g // y^g = (1 - (1-x)^1/g) // 1 - y^g = (1-x)^1/g // (1 - y^g)^g = 1 - x // 1 - (1 - y^g)^g case -108: Val = 1 - pow(1 - pow(R, Params[0]), Params[0]); break; // Sigmoidals case 109: Val = sigmoid_factory(Params[0], R); break; case -109: Val = inverse_sigmoid_factory(Params[0], R); break; default: // Unsupported parametric curve. Should never reach here return 0; } return Val; } // Evaluate a segmented function for a single value. Return -Inf if no valid segment found . // If fn type is 0, perform an interpolation on the table static cmsFloat64Number EvalSegmentedFn(const cmsToneCurve *g, cmsFloat64Number R) { int i; cmsFloat32Number Out32; cmsFloat64Number Out; for (i = (int) g->nSegments - 1; i >= 0; --i) { // Check for domain if ((R > g->Segments[i].x0) && (R <= g->Segments[i].x1)) { // Type == 0 means segment is sampled if (g->Segments[i].Type == 0) { cmsFloat32Number R1 = (cmsFloat32Number)(R - g->Segments[i].x0) / (g->Segments[i].x1 - g->Segments[i].x0); // Setup the table (TODO: clean that) g->SegInterp[i]->Table = g->Segments[i].SampledPoints; g->SegInterp[i]->Interpolation.LerpFloat(&R1, &Out32, g->SegInterp[i]); Out = (cmsFloat64Number) Out32; } else { Out = g->Evals[i](g->Segments[i].Type, g->Segments[i].Params, R); } if (isinf(Out)) return PLUS_INF; else { if (isinf(-Out)) return MINUS_INF; } return Out; } } return MINUS_INF; } // Access to estimated low-res table cmsUInt32Number CMSEXPORT cmsGetToneCurveEstimatedTableEntries(const cmsToneCurve* t) { _cmsAssert(t != NULL); return t ->nEntries; } const cmsUInt16Number* CMSEXPORT cmsGetToneCurveEstimatedTable(const cmsToneCurve* t) { _cmsAssert(t != NULL); return t ->Table16; } // Create an empty gamma curve, by using tables. This specifies only the limited-precision part, and leaves the // floating point description empty. cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsUInt32Number nEntries, const cmsUInt16Number Values[]) { return AllocateToneCurveStruct(ContextID, nEntries, 0, NULL, Values); } static cmsUInt32Number EntriesByGamma(cmsFloat64Number Gamma) { if (fabs(Gamma - 1.0) < 0.001) return 2; return 4096; } // Create a segmented gamma, fill the table cmsToneCurve* CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, cmsUInt32Number nSegments, const cmsCurveSegment Segments[]) { cmsUInt32Number i; cmsFloat64Number R, Val; cmsToneCurve* g; cmsUInt32Number nGridPoints = 4096; _cmsAssert(Segments != NULL); // Optimizatin for identity curves. if (nSegments == 1 && Segments[0].Type == 1) { nGridPoints = EntriesByGamma(Segments[0].Params[0]); } g = AllocateToneCurveStruct(ContextID, nGridPoints, nSegments, Segments, NULL); if (g == NULL) return NULL; // Once we have the floating point version, we can approximate a 16 bit table of 4096 entries // for performance reasons. This table would normally not be used except on 8/16 bits transforms. for (i = 0; i < nGridPoints; i++) { R = (cmsFloat64Number) i / (nGridPoints-1); Val = EvalSegmentedFn(g, R); // Round and saturate g ->Table16[i] = _cmsQuickSaturateWord(Val * 65535.0); } return g; } // Use a segmented curve to store the floating point table cmsToneCurve* CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]) { cmsCurveSegment Seg[3]; // A segmented tone curve should have function segments in the first and last positions // Initialize segmented curve part up to 0 to constant value = samples[0] Seg[0].x0 = MINUS_INF; Seg[0].x1 = 0; Seg[0].Type = 6; Seg[0].Params[0] = 1; Seg[0].Params[1] = 0; Seg[0].Params[2] = 0; Seg[0].Params[3] = values[0]; Seg[0].Params[4] = 0; // From zero to 1 Seg[1].x0 = 0; Seg[1].x1 = 1.0; Seg[1].Type = 0; Seg[1].nGridPoints = nEntries; Seg[1].SampledPoints = (cmsFloat32Number*) values; // Final segment is constant = lastsample Seg[2].x0 = 1.0; Seg[2].x1 = PLUS_INF; Seg[2].Type = 6; Seg[2].Params[0] = 1; Seg[2].Params[1] = 0; Seg[2].Params[2] = 0; Seg[2].Params[3] = values[nEntries-1]; Seg[2].Params[4] = 0; return cmsBuildSegmentedToneCurve(ContextID, 3, Seg); } // Parametric curves // // Parameters goes as: Curve, a, b, c, d, e, f // Type is the ICC type +1 // if type is negative, then the curve is analytically inverted cmsToneCurve* CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]) { cmsCurveSegment Seg0; int Pos = 0; cmsUInt32Number size; _cmsParametricCurvesCollection* c = GetParametricCurveByType(ContextID, Type, &Pos); _cmsAssert(Params != NULL); if (c == NULL) { cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Invalid parametric curve type %d", Type); return NULL; } memset(&Seg0, 0, sizeof(Seg0)); Seg0.x0 = MINUS_INF; Seg0.x1 = PLUS_INF; Seg0.Type = Type; size = c->ParameterCount[Pos] * sizeof(cmsFloat64Number); memmove(Seg0.Params, Params, size); return cmsBuildSegmentedToneCurve(ContextID, 1, &Seg0); } // Build a gamma table based on gamma constant cmsToneCurve* CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma) { return cmsBuildParametricToneCurve(ContextID, 1, &Gamma); } // Free all memory taken by the gamma curve void CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve) { cmsContext ContextID; if (Curve == NULL) return; ContextID = Curve ->InterpParams->ContextID; _cmsFreeInterpParams(Curve ->InterpParams); if (Curve -> Table16) _cmsFree(ContextID, Curve ->Table16); if (Curve ->Segments) { cmsUInt32Number i; for (i=0; i < Curve ->nSegments; i++) { if (Curve ->Segments[i].SampledPoints) { _cmsFree(ContextID, Curve ->Segments[i].SampledPoints); } if (Curve ->SegInterp[i] != 0) _cmsFreeInterpParams(Curve->SegInterp[i]); } _cmsFree(ContextID, Curve ->Segments); _cmsFree(ContextID, Curve ->SegInterp); } if (Curve -> Evals) _cmsFree(ContextID, Curve -> Evals); _cmsFree(ContextID, Curve); } // Utility function, free 3 gamma tables void CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]) { _cmsAssert(Curve != NULL); if (Curve[0] != NULL) cmsFreeToneCurve(Curve[0]); if (Curve[1] != NULL) cmsFreeToneCurve(Curve[1]); if (Curve[2] != NULL) cmsFreeToneCurve(Curve[2]); Curve[0] = Curve[1] = Curve[2] = NULL; } // Duplicate a gamma table cmsToneCurve* CMSEXPORT cmsDupToneCurve(const cmsToneCurve* In) { if (In == NULL) return NULL; return AllocateToneCurveStruct(In ->InterpParams ->ContextID, In ->nEntries, In ->nSegments, In ->Segments, In ->Table16); } // Joins two curves for X and Y. Curves should be monotonic. // We want to get // // y = Y^-1(X(t)) // cmsToneCurve* CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, const cmsToneCurve* X, const cmsToneCurve* Y, cmsUInt32Number nResultingPoints) { cmsToneCurve* out = NULL; cmsToneCurve* Yreversed = NULL; cmsFloat32Number t, x; cmsFloat32Number* Res = NULL; cmsUInt32Number i; _cmsAssert(X != NULL); _cmsAssert(Y != NULL); Yreversed = cmsReverseToneCurveEx(nResultingPoints, Y); if (Yreversed == NULL) goto Error; Res = (cmsFloat32Number*) _cmsCalloc(ContextID, nResultingPoints, sizeof(cmsFloat32Number)); if (Res == NULL) goto Error; //Iterate for (i=0; i < nResultingPoints; i++) { t = (cmsFloat32Number) i / (nResultingPoints-1); x = cmsEvalToneCurveFloat(X, t); Res[i] = cmsEvalToneCurveFloat(Yreversed, x); } // Allocate space for output out = cmsBuildTabulatedToneCurveFloat(ContextID, nResultingPoints, Res); Error: if (Res != NULL) _cmsFree(ContextID, Res); if (Yreversed != NULL) cmsFreeToneCurve(Yreversed); return out; } // Get the surrounding nodes. This is tricky on non-monotonic tables static int GetInterval(cmsFloat64Number In, const cmsUInt16Number LutTable[], const struct _cms_interp_struc* p) { int i; int y0, y1; // A 1 point table is not allowed if (p -> Domain[0] < 1) return -1; // Let's see if ascending or descending. if (LutTable[0] < LutTable[p ->Domain[0]]) { // Table is overall ascending for (i = (int) p->Domain[0] - 1; i >= 0; --i) { y0 = LutTable[i]; y1 = LutTable[i+1]; if (y0 <= y1) { // Increasing if (In >= y0 && In <= y1) return i; } else if (y1 < y0) { // Decreasing if (In >= y1 && In <= y0) return i; } } } else { // Table is overall descending for (i=0; i < (int) p -> Domain[0]; i++) { y0 = LutTable[i]; y1 = LutTable[i+1]; if (y0 <= y1) { // Increasing if (In >= y0 && In <= y1) return i; } else if (y1 < y0) { // Decreasing if (In >= y1 && In <= y0) return i; } } } return -1; } // Reverse a gamma table cmsToneCurve* CMSEXPORT cmsReverseToneCurveEx(cmsUInt32Number nResultSamples, const cmsToneCurve* InCurve) { cmsToneCurve *out; cmsFloat64Number a = 0, b = 0, y, x1, y1, x2, y2; int i, j; int Ascending; _cmsAssert(InCurve != NULL); // Try to reverse it analytically whatever possible if (InCurve ->nSegments == 1 && InCurve ->Segments[0].Type > 0 && /* InCurve -> Segments[0].Type <= 5 */ GetParametricCurveByType(InCurve ->InterpParams->ContextID, InCurve ->Segments[0].Type, NULL) != NULL) { return cmsBuildParametricToneCurve(InCurve ->InterpParams->ContextID, -(InCurve -> Segments[0].Type), InCurve -> Segments[0].Params); } // Nope, reverse the table. out = cmsBuildTabulatedToneCurve16(InCurve ->InterpParams->ContextID, nResultSamples, NULL); if (out == NULL) return NULL; // We want to know if this is an ascending or descending table Ascending = !cmsIsToneCurveDescending(InCurve); // Iterate across Y axis for (i=0; i < (int) nResultSamples; i++) { y = (cmsFloat64Number) i * 65535.0 / (nResultSamples - 1); // Find interval in which y is within. j = GetInterval(y, InCurve->Table16, InCurve->InterpParams); if (j >= 0) { // Get limits of interval x1 = InCurve ->Table16[j]; x2 = InCurve ->Table16[j+1]; y1 = (cmsFloat64Number) (j * 65535.0) / (InCurve ->nEntries - 1); y2 = (cmsFloat64Number) ((j+1) * 65535.0 ) / (InCurve ->nEntries - 1); // If collapsed, then use any if (x1 == x2) { out ->Table16[i] = _cmsQuickSaturateWord(Ascending ? y2 : y1); continue; } else { // Interpolate a = (y2 - y1) / (x2 - x1); b = y2 - a * x2; } } out ->Table16[i] = _cmsQuickSaturateWord(a* y + b); } return out; } // Reverse a gamma table cmsToneCurve* CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma) { _cmsAssert(InGamma != NULL); return cmsReverseToneCurveEx(4096, InGamma); } // From: Eilers, P.H.C. (1994) Smoothing and interpolation with finite // differences. in: Graphic Gems IV, Heckbert, P.S. (ed.), Academic press. // // Smoothing and interpolation with second differences. // // Input: weights (w), data (y): vector from 1 to m. // Input: smoothing parameter (lambda), length (m). // Output: smoothed vector (z): vector from 1 to m. static cmsBool smooth2(cmsContext ContextID, cmsFloat32Number w[], cmsFloat32Number y[], cmsFloat32Number z[], cmsFloat32Number lambda, int m) { int i, i1, i2; cmsFloat32Number *c, *d, *e; cmsBool st; c = (cmsFloat32Number*) _cmsCalloc(ContextID, MAX_NODES_IN_CURVE, sizeof(cmsFloat32Number)); d = (cmsFloat32Number*) _cmsCalloc(ContextID, MAX_NODES_IN_CURVE, sizeof(cmsFloat32Number)); e = (cmsFloat32Number*) _cmsCalloc(ContextID, MAX_NODES_IN_CURVE, sizeof(cmsFloat32Number)); if (c != NULL && d != NULL && e != NULL) { d[1] = w[1] + lambda; c[1] = -2 * lambda / d[1]; e[1] = lambda /d[1]; z[1] = w[1] * y[1]; d[2] = w[2] + 5 * lambda - d[1] * c[1] * c[1]; c[2] = (-4 * lambda - d[1] * c[1] * e[1]) / d[2]; e[2] = lambda / d[2]; z[2] = w[2] * y[2] - c[1] * z[1]; for (i = 3; i < m - 1; i++) { i1 = i - 1; i2 = i - 2; d[i]= w[i] + 6 * lambda - c[i1] * c[i1] * d[i1] - e[i2] * e[i2] * d[i2]; c[i] = (-4 * lambda -d[i1] * c[i1] * e[i1])/ d[i]; e[i] = lambda / d[i]; z[i] = w[i] * y[i] - c[i1] * z[i1] - e[i2] * z[i2]; } i1 = m - 2; i2 = m - 3; d[m - 1] = w[m - 1] + 5 * lambda -c[i1] * c[i1] * d[i1] - e[i2] * e[i2] * d[i2]; c[m - 1] = (-2 * lambda - d[i1] * c[i1] * e[i1]) / d[m - 1]; z[m - 1] = w[m - 1] * y[m - 1] - c[i1] * z[i1] - e[i2] * z[i2]; i1 = m - 1; i2 = m - 2; d[m] = w[m] + lambda - c[i1] * c[i1] * d[i1] - e[i2] * e[i2] * d[i2]; z[m] = (w[m] * y[m] - c[i1] * z[i1] - e[i2] * z[i2]) / d[m]; z[m - 1] = z[m - 1] / d[m - 1] - c[m - 1] * z[m]; for (i = m - 2; 1<= i; i--) z[i] = z[i] / d[i] - c[i] * z[i + 1] - e[i] * z[i + 2]; st = TRUE; } else st = FALSE; if (c != NULL) _cmsFree(ContextID, c); if (d != NULL) _cmsFree(ContextID, d); if (e != NULL) _cmsFree(ContextID, e); return st; } // Smooths a curve sampled at regular intervals. cmsBool CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda) { cmsBool SuccessStatus = TRUE; cmsFloat32Number *w, *y, *z; cmsUInt32Number i, nItems, Zeros, Poles; cmsBool notCheck = FALSE; if (Tab != NULL && Tab->InterpParams != NULL) { cmsContext ContextID = Tab->InterpParams->ContextID; if (!cmsIsToneCurveLinear(Tab)) // Only non-linear curves need smoothing { nItems = Tab->nEntries; if (nItems < MAX_NODES_IN_CURVE) { // Allocate one more item than needed w = (cmsFloat32Number *)_cmsCalloc(ContextID, nItems + 1, sizeof(cmsFloat32Number)); y = (cmsFloat32Number *)_cmsCalloc(ContextID, nItems + 1, sizeof(cmsFloat32Number)); z = (cmsFloat32Number *)_cmsCalloc(ContextID, nItems + 1, sizeof(cmsFloat32Number)); if (w != NULL && y != NULL && z != NULL) // Ensure no memory allocation failure { memset(w, 0, (nItems + 1) * sizeof(cmsFloat32Number)); memset(y, 0, (nItems + 1) * sizeof(cmsFloat32Number)); memset(z, 0, (nItems + 1) * sizeof(cmsFloat32Number)); for (i = 0; i < nItems; i++) { y[i + 1] = (cmsFloat32Number)Tab->Table16[i]; w[i + 1] = 1.0; } if (lambda < 0) { notCheck = TRUE; lambda = -lambda; } if (smooth2(ContextID, w, y, z, (cmsFloat32Number)lambda, (int)nItems)) { // Do some reality - checking... Zeros = Poles = 0; for (i = nItems; i > 1; --i) { if (z[i] == 0.) Zeros++; if (z[i] >= 65535.) Poles++; if (z[i] < z[i - 1]) { cmsSignalError(ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: Non-Monotonic."); SuccessStatus = notCheck; break; } } if (SuccessStatus && Zeros > (nItems / 3)) { cmsSignalError(ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: Degenerated, mostly zeros."); SuccessStatus = notCheck; } if (SuccessStatus && Poles > (nItems / 3)) { cmsSignalError(ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: Degenerated, mostly poles."); SuccessStatus = notCheck; } if (SuccessStatus) // Seems ok { for (i = 0; i < nItems; i++) { // Clamp to cmsUInt16Number Tab->Table16[i] = _cmsQuickSaturateWord(z[i + 1]); } } } else // Could not smooth { cmsSignalError(ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: Function smooth2 failed."); SuccessStatus = FALSE; } } else // One or more buffers could not be allocated { cmsSignalError(ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: Could not allocate memory."); SuccessStatus = FALSE; } if (z != NULL) _cmsFree(ContextID, z); if (y != NULL) _cmsFree(ContextID, y); if (w != NULL) _cmsFree(ContextID, w); } else // too many items in the table { cmsSignalError(ContextID, cmsERROR_RANGE, "cmsSmoothToneCurve: Too many points."); SuccessStatus = FALSE; } } } else // Tab parameter or Tab->InterpParams is NULL { // Can't signal an error here since the ContextID is not known at this point SuccessStatus = FALSE; } return SuccessStatus; } // Is a table linear? Do not use parametric since we cannot guarantee some weird parameters resulting // in a linear table. This way assures it is linear in 12 bits, which should be enough in most cases. cmsBool CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve) { int i; int diff; _cmsAssert(Curve != NULL); for (i=0; i < (int) Curve ->nEntries; i++) { diff = abs((int) Curve->Table16[i] - (int) _cmsQuantizeVal(i, Curve ->nEntries)); if (diff > 0x0f) return FALSE; } return TRUE; } // Same, but for monotonicity cmsBool CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t) { cmsUInt32Number n; int i, last; cmsBool lDescending; _cmsAssert(t != NULL); // Degenerated curves are monotonic? Ok, let's pass them n = t ->nEntries; if (n < 2) return TRUE; // Curve direction lDescending = cmsIsToneCurveDescending(t); if (lDescending) { last = t ->Table16[0]; for (i = 1; i < (int) n; i++) { if (t ->Table16[i] - last > 2) // We allow some ripple return FALSE; else last = t ->Table16[i]; } } else { last = t ->Table16[n-1]; for (i = (int) n - 2; i >= 0; --i) { if (t ->Table16[i] - last > 2) return FALSE; else last = t ->Table16[i]; } } return TRUE; } // Same, but for descending tables cmsBool CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t) { _cmsAssert(t != NULL); return t ->Table16[0] > t ->Table16[t ->nEntries-1]; } // Another info fn: is out gamma table multisegment? cmsBool CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* t) { _cmsAssert(t != NULL); return t -> nSegments > 1; } cmsInt32Number CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t) { _cmsAssert(t != NULL); if (t -> nSegments != 1) return 0; return t ->Segments[0].Type; } // We need accuracy this time cmsFloat32Number CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v) { _cmsAssert(Curve != NULL); // Check for 16 bits table. If so, this is a limited-precision tone curve if (Curve ->nSegments == 0) { cmsUInt16Number In, Out; In = (cmsUInt16Number) _cmsQuickSaturateWord(v * 65535.0); Out = cmsEvalToneCurve16(Curve, In); return (cmsFloat32Number) (Out / 65535.0); } return (cmsFloat32Number) EvalSegmentedFn(Curve, v); } // We need xput over here cmsUInt16Number CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v) { cmsUInt16Number out; _cmsAssert(Curve != NULL); Curve ->InterpParams ->Interpolation.Lerp16(&v, &out, Curve ->InterpParams); return out; } // Least squares fitting. // A mathematical procedure for finding the best-fitting curve to a given set of points by // minimizing the sum of the squares of the offsets ("the residuals") of the points from the curve. // The sum of the squares of the offsets is used instead of the offset absolute values because // this allows the residuals to be treated as a continuous differentiable quantity. // // y = f(x) = x ^ g // // R = (yi - (xi^g)) // R2 = (yi - (xi^g))2 // SUM R2 = SUM (yi - (xi^g))2 // // dR2/dg = -2 SUM x^g log(x)(y - x^g) // solving for dR2/dg = 0 // // g = 1/n * SUM(log(y) / log(x)) cmsFloat64Number CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision) { cmsFloat64Number gamma, sum, sum2; cmsFloat64Number n, x, y, Std; cmsUInt32Number i; _cmsAssert(t != NULL); sum = sum2 = n = 0; // Excluding endpoints for (i=1; i < (MAX_NODES_IN_CURVE-1); i++) { x = (cmsFloat64Number) i / (MAX_NODES_IN_CURVE-1); y = (cmsFloat64Number) cmsEvalToneCurveFloat(t, (cmsFloat32Number) x); // Avoid 7% on lower part to prevent // artifacts due to linear ramps if (y > 0. && y < 1. && x > 0.07) { gamma = log(y) / log(x); sum += gamma; sum2 += gamma * gamma; n++; } } // Take a look on SD to see if gamma isn't exponential at all Std = sqrt((n * sum2 - sum * sum) / (n*(n-1))); if (Std > Precision) return -1.0; return (sum / n); // The mean } // Retrieve parameters on one-segment tone curves cmsFloat64Number* CMSEXPORT cmsGetToneCurveParams(const cmsToneCurve* t) { _cmsAssert(t != NULL); if (t->nSegments != 1) return NULL; return t->Segments[0].Params; } lcms2-2.12rc1/src/cmspcs.c0000644000175000017500000006162613775114656014353 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // inter PCS conversions XYZ <-> CIE L* a* b* /* CIE 15:2004 CIELab is defined as: L* = 116*f(Y/Yn) - 16 0 <= L* <= 100 a* = 500*[f(X/Xn) - f(Y/Yn)] b* = 200*[f(Y/Yn) - f(Z/Zn)] and f(t) = t^(1/3) 1 >= t > (24/116)^3 (841/108)*t + (16/116) 0 <= t <= (24/116)^3 Reverse transform is: X = Xn*[a* / 500 + (L* + 16) / 116] ^ 3 if (X/Xn) > (24/116) = Xn*(a* / 500 + L* / 116) / 7.787 if (X/Xn) <= (24/116) PCS in Lab2 is encoded as: 8 bit Lab PCS: L* 0..100 into a 0..ff byte. a* t + 128 range is -128.0 +127.0 b* 16 bit Lab PCS: L* 0..100 into a 0..ff00 word. a* t + 128 range is -128.0 +127.9961 b* Interchange Space Component Actual Range Encoded Range CIE XYZ X 0 -> 1.99997 0x0000 -> 0xffff CIE XYZ Y 0 -> 1.99997 0x0000 -> 0xffff CIE XYZ Z 0 -> 1.99997 0x0000 -> 0xffff Version 2,3 ----------- CIELAB (16 bit) L* 0 -> 100.0 0x0000 -> 0xff00 CIELAB (16 bit) a* -128.0 -> +127.996 0x0000 -> 0x8000 -> 0xffff CIELAB (16 bit) b* -128.0 -> +127.996 0x0000 -> 0x8000 -> 0xffff Version 4 --------- CIELAB (16 bit) L* 0 -> 100.0 0x0000 -> 0xffff CIELAB (16 bit) a* -128.0 -> +127 0x0000 -> 0x8080 -> 0xffff CIELAB (16 bit) b* -128.0 -> +127 0x0000 -> 0x8080 -> 0xffff */ // Conversions void CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source) { cmsFloat64Number ISum; ISum = 1./(Source -> X + Source -> Y + Source -> Z); Dest -> x = (Source -> X) * ISum; Dest -> y = (Source -> Y) * ISum; Dest -> Y = Source -> Y; } void CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source) { Dest -> X = (Source -> x / Source -> y) * Source -> Y; Dest -> Y = Source -> Y; Dest -> Z = ((1 - Source -> x - Source -> y) / Source -> y) * Source -> Y; } /* The break point (24/116)^3 = (6/29)^3 is a very small amount of tristimulus primary (0.008856). Generally, this only happens for nearly ideal blacks and for some orange / amber colors in transmission mode. For example, the Z value of the orange turn indicator lamp lens on an automobile will often be below this value. But the Z does not contribute to the perceived color directly. */ static cmsFloat64Number f(cmsFloat64Number t) { const cmsFloat64Number Limit = (24.0/116.0) * (24.0/116.0) * (24.0/116.0); if (t <= Limit) return (841.0/108.0) * t + (16.0/116.0); else return pow(t, 1.0/3.0); } static cmsFloat64Number f_1(cmsFloat64Number t) { const cmsFloat64Number Limit = (24.0/116.0); if (t <= Limit) { return (108.0/841.0) * (t - (16.0/116.0)); } return t * t * t; } // Standard XYZ to Lab. it can handle negative XZY numbers in some cases void CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz) { cmsFloat64Number fx, fy, fz; if (WhitePoint == NULL) WhitePoint = cmsD50_XYZ(); fx = f(xyz->X / WhitePoint->X); fy = f(xyz->Y / WhitePoint->Y); fz = f(xyz->Z / WhitePoint->Z); Lab->L = 116.0*fy - 16.0; Lab->a = 500.0*(fx - fy); Lab->b = 200.0*(fy - fz); } // Standard XYZ to Lab. It can return negative XYZ in some cases void CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab) { cmsFloat64Number x, y, z; if (WhitePoint == NULL) WhitePoint = cmsD50_XYZ(); y = (Lab-> L + 16.0) / 116.0; x = y + 0.002 * Lab -> a; z = y - 0.005 * Lab -> b; xyz -> X = f_1(x) * WhitePoint -> X; xyz -> Y = f_1(y) * WhitePoint -> Y; xyz -> Z = f_1(z) * WhitePoint -> Z; } static cmsFloat64Number L2float2(cmsUInt16Number v) { return (cmsFloat64Number) v / 652.800; } // the a/b part static cmsFloat64Number ab2float2(cmsUInt16Number v) { return ((cmsFloat64Number) v / 256.0) - 128.0; } static cmsUInt16Number L2Fix2(cmsFloat64Number L) { return _cmsQuickSaturateWord(L * 652.8); } static cmsUInt16Number ab2Fix2(cmsFloat64Number ab) { return _cmsQuickSaturateWord((ab + 128.0) * 256.0); } static cmsFloat64Number L2float4(cmsUInt16Number v) { return (cmsFloat64Number) v / 655.35; } // the a/b part static cmsFloat64Number ab2float4(cmsUInt16Number v) { return ((cmsFloat64Number) v / 257.0) - 128.0; } void CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]) { Lab->L = L2float2(wLab[0]); Lab->a = ab2float2(wLab[1]); Lab->b = ab2float2(wLab[2]); } void CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]) { Lab->L = L2float4(wLab[0]); Lab->a = ab2float4(wLab[1]); Lab->b = ab2float4(wLab[2]); } static cmsFloat64Number Clamp_L_doubleV2(cmsFloat64Number L) { const cmsFloat64Number L_max = (cmsFloat64Number) (0xFFFF * 100.0) / 0xFF00; if (L < 0) L = 0; if (L > L_max) L = L_max; return L; } static cmsFloat64Number Clamp_ab_doubleV2(cmsFloat64Number ab) { if (ab < MIN_ENCODEABLE_ab2) ab = MIN_ENCODEABLE_ab2; if (ab > MAX_ENCODEABLE_ab2) ab = MAX_ENCODEABLE_ab2; return ab; } void CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* fLab) { cmsCIELab Lab; Lab.L = Clamp_L_doubleV2(fLab ->L); Lab.a = Clamp_ab_doubleV2(fLab ->a); Lab.b = Clamp_ab_doubleV2(fLab ->b); wLab[0] = L2Fix2(Lab.L); wLab[1] = ab2Fix2(Lab.a); wLab[2] = ab2Fix2(Lab.b); } static cmsFloat64Number Clamp_L_doubleV4(cmsFloat64Number L) { if (L < 0) L = 0; if (L > 100.0) L = 100.0; return L; } static cmsFloat64Number Clamp_ab_doubleV4(cmsFloat64Number ab) { if (ab < MIN_ENCODEABLE_ab4) ab = MIN_ENCODEABLE_ab4; if (ab > MAX_ENCODEABLE_ab4) ab = MAX_ENCODEABLE_ab4; return ab; } static cmsUInt16Number L2Fix4(cmsFloat64Number L) { return _cmsQuickSaturateWord(L * 655.35); } static cmsUInt16Number ab2Fix4(cmsFloat64Number ab) { return _cmsQuickSaturateWord((ab + 128.0) * 257.0); } void CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* fLab) { cmsCIELab Lab; Lab.L = Clamp_L_doubleV4(fLab ->L); Lab.a = Clamp_ab_doubleV4(fLab ->a); Lab.b = Clamp_ab_doubleV4(fLab ->b); wLab[0] = L2Fix4(Lab.L); wLab[1] = ab2Fix4(Lab.a); wLab[2] = ab2Fix4(Lab.b); } // Auxiliary: convert to Radians static cmsFloat64Number RADIANS(cmsFloat64Number deg) { return (deg * M_PI) / 180.; } // Auxiliary: atan2 but operating in degrees and returning 0 if a==b==0 static cmsFloat64Number atan2deg(cmsFloat64Number a, cmsFloat64Number b) { cmsFloat64Number h; if (a == 0 && b == 0) h = 0; else h = atan2(a, b); h *= (180. / M_PI); while (h > 360.) h -= 360.; while ( h < 0) h += 360.; return h; } // Auxiliary: Square static cmsFloat64Number Sqr(cmsFloat64Number v) { return v * v; } // From cylindrical coordinates. No check is performed, then negative values are allowed void CMSEXPORT cmsLab2LCh(cmsCIELCh* LCh, const cmsCIELab* Lab) { LCh -> L = Lab -> L; LCh -> C = pow(Sqr(Lab ->a) + Sqr(Lab ->b), 0.5); LCh -> h = atan2deg(Lab ->b, Lab ->a); } // To cylindrical coordinates. No check is performed, then negative values are allowed void CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh) { cmsFloat64Number h = (LCh -> h * M_PI) / 180.0; Lab -> L = LCh -> L; Lab -> a = LCh -> C * cos(h); Lab -> b = LCh -> C * sin(h); } // In XYZ All 3 components are encoded using 1.15 fixed point static cmsUInt16Number XYZ2Fix(cmsFloat64Number d) { return _cmsQuickSaturateWord(d * 32768.0); } void CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ) { cmsCIEXYZ xyz; xyz.X = fXYZ -> X; xyz.Y = fXYZ -> Y; xyz.Z = fXYZ -> Z; // Clamp to encodeable values. if (xyz.Y <= 0) { xyz.X = 0; xyz.Y = 0; xyz.Z = 0; } if (xyz.X > MAX_ENCODEABLE_XYZ) xyz.X = MAX_ENCODEABLE_XYZ; if (xyz.X < 0) xyz.X = 0; if (xyz.Y > MAX_ENCODEABLE_XYZ) xyz.Y = MAX_ENCODEABLE_XYZ; if (xyz.Y < 0) xyz.Y = 0; if (xyz.Z > MAX_ENCODEABLE_XYZ) xyz.Z = MAX_ENCODEABLE_XYZ; if (xyz.Z < 0) xyz.Z = 0; XYZ[0] = XYZ2Fix(xyz.X); XYZ[1] = XYZ2Fix(xyz.Y); XYZ[2] = XYZ2Fix(xyz.Z); } // To convert from Fixed 1.15 point to cmsFloat64Number static cmsFloat64Number XYZ2float(cmsUInt16Number v) { cmsS15Fixed16Number fix32; // From 1.15 to 15.16 fix32 = v << 1; // From fixed 15.16 to cmsFloat64Number return _cms15Fixed16toDouble(fix32); } void CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fXYZ, const cmsUInt16Number XYZ[3]) { fXYZ -> X = XYZ2float(XYZ[0]); fXYZ -> Y = XYZ2float(XYZ[1]); fXYZ -> Z = XYZ2float(XYZ[2]); } // Returns dE on two Lab values cmsFloat64Number CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) { cmsFloat64Number dL, da, db; dL = fabs(Lab1 -> L - Lab2 -> L); da = fabs(Lab1 -> a - Lab2 -> a); db = fabs(Lab1 -> b - Lab2 -> b); return pow(Sqr(dL) + Sqr(da) + Sqr(db), 0.5); } // Return the CIE94 Delta E cmsFloat64Number CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) { cmsCIELCh LCh1, LCh2; cmsFloat64Number dE, dL, dC, dh, dhsq; cmsFloat64Number c12, sc, sh; dL = fabs(Lab1 ->L - Lab2 ->L); cmsLab2LCh(&LCh1, Lab1); cmsLab2LCh(&LCh2, Lab2); dC = fabs(LCh1.C - LCh2.C); dE = cmsDeltaE(Lab1, Lab2); dhsq = Sqr(dE) - Sqr(dL) - Sqr(dC); if (dhsq < 0) dh = 0; else dh = pow(dhsq, 0.5); c12 = sqrt(LCh1.C * LCh2.C); sc = 1.0 + (0.048 * c12); sh = 1.0 + (0.014 * c12); return sqrt(Sqr(dL) + Sqr(dC) / Sqr(sc) + Sqr(dh) / Sqr(sh)); } // Auxiliary static cmsFloat64Number ComputeLBFD(const cmsCIELab* Lab) { cmsFloat64Number yt; if (Lab->L > 7.996969) yt = (Sqr((Lab->L+16)/116)*((Lab->L+16)/116))*100; else yt = 100 * (Lab->L / 903.3); return (54.6 * (M_LOG10E * (log(yt + 1.5))) - 9.6); } // bfd - gets BFD(1:1) difference between Lab1, Lab2 cmsFloat64Number CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2) { cmsFloat64Number lbfd1,lbfd2,AveC,Aveh,dE,deltaL, deltaC,deltah,dc,t,g,dh,rh,rc,rt,bfd; cmsCIELCh LCh1, LCh2; lbfd1 = ComputeLBFD(Lab1); lbfd2 = ComputeLBFD(Lab2); deltaL = lbfd2 - lbfd1; cmsLab2LCh(&LCh1, Lab1); cmsLab2LCh(&LCh2, Lab2); deltaC = LCh2.C - LCh1.C; AveC = (LCh1.C+LCh2.C)/2; Aveh = (LCh1.h+LCh2.h)/2; dE = cmsDeltaE(Lab1, Lab2); if (Sqr(dE)>(Sqr(Lab2->L-Lab1->L)+Sqr(deltaC))) deltah = sqrt(Sqr(dE)-Sqr(Lab2->L-Lab1->L)-Sqr(deltaC)); else deltah =0; dc = 0.035 * AveC / (1 + 0.00365 * AveC)+0.521; g = sqrt(Sqr(Sqr(AveC))/(Sqr(Sqr(AveC))+14000)); t = 0.627+(0.055*cos((Aveh-254)/(180/M_PI))- 0.040*cos((2*Aveh-136)/(180/M_PI))+ 0.070*cos((3*Aveh-31)/(180/M_PI))+ 0.049*cos((4*Aveh+114)/(180/M_PI))- 0.015*cos((5*Aveh-103)/(180/M_PI))); dh = dc*(g*t+1-g); rh = -0.260*cos((Aveh-308)/(180/M_PI))- 0.379*cos((2*Aveh-160)/(180/M_PI))- 0.636*cos((3*Aveh+254)/(180/M_PI))+ 0.226*cos((4*Aveh+140)/(180/M_PI))- 0.194*cos((5*Aveh+280)/(180/M_PI)); rc = sqrt((AveC*AveC*AveC*AveC*AveC*AveC)/((AveC*AveC*AveC*AveC*AveC*AveC)+70000000)); rt = rh*rc; bfd = sqrt(Sqr(deltaL)+Sqr(deltaC/dc)+Sqr(deltah/dh)+(rt*(deltaC/dc)*(deltah/dh))); return bfd; } // cmc - CMC(l:c) difference between Lab1, Lab2 cmsFloat64Number CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c) { cmsFloat64Number dE,dL,dC,dh,sl,sc,sh,t,f,cmc; cmsCIELCh LCh1, LCh2; if (Lab1 ->L == 0 && Lab2 ->L == 0) return 0; cmsLab2LCh(&LCh1, Lab1); cmsLab2LCh(&LCh2, Lab2); dL = Lab2->L-Lab1->L; dC = LCh2.C-LCh1.C; dE = cmsDeltaE(Lab1, Lab2); if (Sqr(dE)>(Sqr(dL)+Sqr(dC))) dh = sqrt(Sqr(dE)-Sqr(dL)-Sqr(dC)); else dh =0; if ((LCh1.h > 164) && (LCh1.h < 345)) t = 0.56 + fabs(0.2 * cos(((LCh1.h + 168)/(180/M_PI)))); else t = 0.36 + fabs(0.4 * cos(((LCh1.h + 35 )/(180/M_PI)))); sc = 0.0638 * LCh1.C / (1 + 0.0131 * LCh1.C) + 0.638; sl = 0.040975 * Lab1->L /(1 + 0.01765 * Lab1->L); if (Lab1->L<16) sl = 0.511; f = sqrt((LCh1.C * LCh1.C * LCh1.C * LCh1.C)/((LCh1.C * LCh1.C * LCh1.C * LCh1.C)+1900)); sh = sc*(t*f+1-f); cmc = sqrt(Sqr(dL/(l*sl))+Sqr(dC/(c*sc))+Sqr(dh/sh)); return cmc; } // dE2000 The weightings KL, KC and KH can be modified to reflect the relative // importance of lightness, chroma and hue in different industrial applications cmsFloat64Number CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh) { cmsFloat64Number L1 = Lab1->L; cmsFloat64Number a1 = Lab1->a; cmsFloat64Number b1 = Lab1->b; cmsFloat64Number C = sqrt( Sqr(a1) + Sqr(b1) ); cmsFloat64Number Ls = Lab2 ->L; cmsFloat64Number as = Lab2 ->a; cmsFloat64Number bs = Lab2 ->b; cmsFloat64Number Cs = sqrt( Sqr(as) + Sqr(bs) ); cmsFloat64Number G = 0.5 * ( 1 - sqrt(pow((C + Cs) / 2 , 7.0) / (pow((C + Cs) / 2, 7.0) + pow(25.0, 7.0) ) )); cmsFloat64Number a_p = (1 + G ) * a1; cmsFloat64Number b_p = b1; cmsFloat64Number C_p = sqrt( Sqr(a_p) + Sqr(b_p)); cmsFloat64Number h_p = atan2deg(b_p, a_p); cmsFloat64Number a_ps = (1 + G) * as; cmsFloat64Number b_ps = bs; cmsFloat64Number C_ps = sqrt(Sqr(a_ps) + Sqr(b_ps)); cmsFloat64Number h_ps = atan2deg(b_ps, a_ps); cmsFloat64Number meanC_p =(C_p + C_ps) / 2; cmsFloat64Number hps_plus_hp = h_ps + h_p; cmsFloat64Number hps_minus_hp = h_ps - h_p; cmsFloat64Number meanh_p = fabs(hps_minus_hp) <= 180.000001 ? (hps_plus_hp)/2 : (hps_plus_hp) < 360 ? (hps_plus_hp + 360)/2 : (hps_plus_hp - 360)/2; cmsFloat64Number delta_h = (hps_minus_hp) <= -180.000001 ? (hps_minus_hp + 360) : (hps_minus_hp) > 180 ? (hps_minus_hp - 360) : (hps_minus_hp); cmsFloat64Number delta_L = (Ls - L1); cmsFloat64Number delta_C = (C_ps - C_p ); cmsFloat64Number delta_H =2 * sqrt(C_ps*C_p) * sin(RADIANS(delta_h) / 2); cmsFloat64Number T = 1 - 0.17 * cos(RADIANS(meanh_p-30)) + 0.24 * cos(RADIANS(2*meanh_p)) + 0.32 * cos(RADIANS(3*meanh_p + 6)) - 0.2 * cos(RADIANS(4*meanh_p - 63)); cmsFloat64Number Sl = 1 + (0.015 * Sqr((Ls + L1) /2- 50) )/ sqrt(20 + Sqr( (Ls+L1)/2 - 50) ); cmsFloat64Number Sc = 1 + 0.045 * (C_p + C_ps)/2; cmsFloat64Number Sh = 1 + 0.015 * ((C_ps + C_p)/2) * T; cmsFloat64Number delta_ro = 30 * exp( -Sqr(((meanh_p - 275 ) / 25))); cmsFloat64Number Rc = 2 * sqrt(( pow(meanC_p, 7.0) )/( pow(meanC_p, 7.0) + pow(25.0, 7.0))); cmsFloat64Number Rt = -sin(2 * RADIANS(delta_ro)) * Rc; cmsFloat64Number deltaE00 = sqrt( Sqr(delta_L /(Sl * Kl)) + Sqr(delta_C/(Sc * Kc)) + Sqr(delta_H/(Sh * Kh)) + Rt*(delta_C/(Sc * Kc)) * (delta_H / (Sh * Kh))); return deltaE00; } // This function returns a number of gridpoints to be used as LUT table. It assumes same number // of gripdpoints in all dimensions. Flags may override the choice. cmsUInt32Number CMSEXPORT _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags) { cmsUInt32Number nChannels; // Already specified? if (dwFlags & 0x00FF0000) { // Yes, grab'em return (dwFlags >> 16) & 0xFF; } nChannels = cmsChannelsOf(Colorspace); // HighResPrecalc is maximum resolution if (dwFlags & cmsFLAGS_HIGHRESPRECALC) { if (nChannels > 4) return 7; // 7 for Hifi if (nChannels == 4) // 23 for CMYK return 23; return 49; // 49 for RGB and others } // LowResPrecal is lower resolution if (dwFlags & cmsFLAGS_LOWRESPRECALC) { if (nChannels > 4) return 6; // 6 for more than 4 channels if (nChannels == 1) return 33; // For monochrome return 17; // 17 for remaining } // Default values if (nChannels > 4) return 7; // 7 for Hifi if (nChannels == 4) return 17; // 17 for CMYK return 33; // 33 for RGB } cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, cmsUInt16Number **White, cmsUInt16Number **Black, cmsUInt32Number *nOutputs) { // Only most common spaces static cmsUInt16Number RGBblack[4] = { 0, 0, 0 }; static cmsUInt16Number RGBwhite[4] = { 0xffff, 0xffff, 0xffff }; static cmsUInt16Number CMYKblack[4] = { 0xffff, 0xffff, 0xffff, 0xffff }; // 400% of ink static cmsUInt16Number CMYKwhite[4] = { 0, 0, 0, 0 }; static cmsUInt16Number LABblack[4] = { 0, 0x8080, 0x8080 }; // V4 Lab encoding static cmsUInt16Number LABwhite[4] = { 0xFFFF, 0x8080, 0x8080 }; static cmsUInt16Number CMYblack[4] = { 0xffff, 0xffff, 0xffff }; static cmsUInt16Number CMYwhite[4] = { 0, 0, 0 }; static cmsUInt16Number Grayblack[4] = { 0 }; static cmsUInt16Number GrayWhite[4] = { 0xffff }; switch (Space) { case cmsSigGrayData: if (White) *White = GrayWhite; if (Black) *Black = Grayblack; if (nOutputs) *nOutputs = 1; return TRUE; case cmsSigRgbData: if (White) *White = RGBwhite; if (Black) *Black = RGBblack; if (nOutputs) *nOutputs = 3; return TRUE; case cmsSigLabData: if (White) *White = LABwhite; if (Black) *Black = LABblack; if (nOutputs) *nOutputs = 3; return TRUE; case cmsSigCmykData: if (White) *White = CMYKwhite; if (Black) *Black = CMYKblack; if (nOutputs) *nOutputs = 4; return TRUE; case cmsSigCmyData: if (White) *White = CMYwhite; if (Black) *Black = CMYblack; if (nOutputs) *nOutputs = 3; return TRUE; default:; } return FALSE; } // Several utilities ------------------------------------------------------- // Translate from our colorspace to ICC representation cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation) { switch (OurNotation) { case 1: case PT_GRAY: return cmsSigGrayData; case 2: case PT_RGB: return cmsSigRgbData; case PT_CMY: return cmsSigCmyData; case PT_CMYK: return cmsSigCmykData; case PT_YCbCr:return cmsSigYCbCrData; case PT_YUV: return cmsSigLuvData; case PT_XYZ: return cmsSigXYZData; case PT_LabV2: case PT_Lab: return cmsSigLabData; case PT_YUVK: return cmsSigLuvKData; case PT_HSV: return cmsSigHsvData; case PT_HLS: return cmsSigHlsData; case PT_Yxy: return cmsSigYxyData; case PT_MCH1: return cmsSigMCH1Data; case PT_MCH2: return cmsSigMCH2Data; case PT_MCH3: return cmsSigMCH3Data; case PT_MCH4: return cmsSigMCH4Data; case PT_MCH5: return cmsSigMCH5Data; case PT_MCH6: return cmsSigMCH6Data; case PT_MCH7: return cmsSigMCH7Data; case PT_MCH8: return cmsSigMCH8Data; case PT_MCH9: return cmsSigMCH9Data; case PT_MCH10: return cmsSigMCHAData; case PT_MCH11: return cmsSigMCHBData; case PT_MCH12: return cmsSigMCHCData; case PT_MCH13: return cmsSigMCHDData; case PT_MCH14: return cmsSigMCHEData; case PT_MCH15: return cmsSigMCHFData; default: return (cmsColorSpaceSignature) 0; } } int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace) { switch (ProfileSpace) { case cmsSigGrayData: return PT_GRAY; case cmsSigRgbData: return PT_RGB; case cmsSigCmyData: return PT_CMY; case cmsSigCmykData: return PT_CMYK; case cmsSigYCbCrData:return PT_YCbCr; case cmsSigLuvData: return PT_YUV; case cmsSigXYZData: return PT_XYZ; case cmsSigLabData: return PT_Lab; case cmsSigLuvKData: return PT_YUVK; case cmsSigHsvData: return PT_HSV; case cmsSigHlsData: return PT_HLS; case cmsSigYxyData: return PT_Yxy; case cmsSig1colorData: case cmsSigMCH1Data: return PT_MCH1; case cmsSig2colorData: case cmsSigMCH2Data: return PT_MCH2; case cmsSig3colorData: case cmsSigMCH3Data: return PT_MCH3; case cmsSig4colorData: case cmsSigMCH4Data: return PT_MCH4; case cmsSig5colorData: case cmsSigMCH5Data: return PT_MCH5; case cmsSig6colorData: case cmsSigMCH6Data: return PT_MCH6; case cmsSigMCH7Data: case cmsSig7colorData:return PT_MCH7; case cmsSigMCH8Data: case cmsSig8colorData:return PT_MCH8; case cmsSigMCH9Data: case cmsSig9colorData:return PT_MCH9; case cmsSigMCHAData: case cmsSig10colorData:return PT_MCH10; case cmsSigMCHBData: case cmsSig11colorData:return PT_MCH11; case cmsSigMCHCData: case cmsSig12colorData:return PT_MCH12; case cmsSigMCHDData: case cmsSig13colorData:return PT_MCH13; case cmsSigMCHEData: case cmsSig14colorData:return PT_MCH14; case cmsSigMCHFData: case cmsSig15colorData:return PT_MCH15; default: return (cmsColorSpaceSignature) 0; } } cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace) { switch (ColorSpace) { case cmsSigMCH1Data: case cmsSig1colorData: case cmsSigGrayData: return 1; case cmsSigMCH2Data: case cmsSig2colorData: return 2; case cmsSigXYZData: case cmsSigLabData: case cmsSigLuvData: case cmsSigYCbCrData: case cmsSigYxyData: case cmsSigRgbData: case cmsSigHsvData: case cmsSigHlsData: case cmsSigCmyData: case cmsSigMCH3Data: case cmsSig3colorData: return 3; case cmsSigLuvKData: case cmsSigCmykData: case cmsSigMCH4Data: case cmsSig4colorData: return 4; case cmsSigMCH5Data: case cmsSig5colorData: return 5; case cmsSigMCH6Data: case cmsSig6colorData: return 6; case cmsSigMCH7Data: case cmsSig7colorData: return 7; case cmsSigMCH8Data: case cmsSig8colorData: return 8; case cmsSigMCH9Data: case cmsSig9colorData: return 9; case cmsSigMCHAData: case cmsSig10colorData: return 10; case cmsSigMCHBData: case cmsSig11colorData: return 11; case cmsSigMCHCData: case cmsSig12colorData: return 12; case cmsSigMCHDData: case cmsSig13colorData: return 13; case cmsSigMCHEData: case cmsSig14colorData: return 14; case cmsSigMCHFData: case cmsSig15colorData: return 15; default: return 3; } } lcms2-2.12rc1/src/cmsps2.c0000644000175000017500000013747013775114656014273 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // PostScript ColorRenderingDictionary and ColorSpaceArray #define MAXPSCOLS 60 // Columns on tables /* Implementation -------------- PostScript does use XYZ as its internal PCS. But since PostScript interpolation tables are limited to 8 bits, I use Lab as a way to improve the accuracy, favoring perceptual results. So, for the creation of each CRD, CSA the profiles are converted to Lab via a device link between profile -> Lab or Lab -> profile. The PS code necessary to convert Lab <-> XYZ is also included. Color Space Arrays (CSA) ================================================================================== In order to obtain precision, code chooses between three ways to implement the device -> XYZ transform. These cases identifies monochrome profiles (often implemented as a set of curves), matrix-shaper and Pipeline-based. Monochrome ----------- This is implemented as /CIEBasedA CSA. The prelinearization curve is placed into /DecodeA section, and matrix equals to D50. Since here is no interpolation tables, I do the conversion directly to XYZ NOTE: CLUT-based monochrome profiles are NOT supported. So, cmsFLAGS_MATRIXINPUT flag is forced on such profiles. [ /CIEBasedA << /DecodeA { transfer function } bind /MatrixA [D50] /RangeLMN [ 0.0 cmsD50X 0.0 cmsD50Y 0.0 cmsD50Z ] /WhitePoint [D50] /BlackPoint [BP] /RenderingIntent (intent) >> ] On simpler profiles, the PCS is already XYZ, so no conversion is required. Matrix-shaper based ------------------- This is implemented both with /CIEBasedABC or /CIEBasedDEF depending on the profile implementation. Since here there are no interpolation tables, I do the conversion directly to XYZ [ /CIEBasedABC << /DecodeABC [ {transfer1} {transfer2} {transfer3} ] /MatrixABC [Matrix] /RangeLMN [ 0.0 cmsD50X 0.0 cmsD50Y 0.0 cmsD50Z ] /DecodeLMN [ { / 2} dup dup ] /WhitePoint [D50] /BlackPoint [BP] /RenderingIntent (intent) >> ] CLUT based ---------- Lab is used in such cases. [ /CIEBasedDEF << /DecodeDEF [ ] /Table [ p p p [<...>]] /RangeABC [ 0 1 0 1 0 1] /DecodeABC[ ] /RangeLMN [ -0.236 1.254 0 1 -0.635 1.640 ] % -128/500 1+127/500 0 1 -127/200 1+128/200 /MatrixABC [ 1 1 1 1 0 0 0 0 -1] /WhitePoint [D50] /BlackPoint [BP] /RenderingIntent (intent) ] Color Rendering Dictionaries (CRD) ================================== These are always implemented as CLUT, and always are using Lab. Since CRD are expected to be used as resources, the code adds the definition as well. << /ColorRenderingType 1 /WhitePoint [ D50 ] /BlackPoint [BP] /MatrixPQR [ Bradford ] /RangePQR [-0.125 1.375 -0.125 1.375 -0.125 1.375 ] /TransformPQR [ {4 index 3 get div 2 index 3 get mul exch pop exch pop exch pop exch pop } bind {4 index 4 get div 2 index 4 get mul exch pop exch pop exch pop exch pop } bind {4 index 5 get div 2 index 5 get mul exch pop exch pop exch pop exch pop } bind ] /MatrixABC <...> /EncodeABC <...> /RangeABC <.. used for XYZ -> Lab> /EncodeLMN /RenderTable [ p p p [<...>]] /RenderingIntent (Perceptual) >> /Current exch /ColorRendering defineresource pop The following stages are used to convert from XYZ to Lab -------------------------------------------------------- Input is given at LMN stage on X, Y, Z Encode LMN gives us f(X/Xn), f(Y/Yn), f(Z/Zn) /EncodeLMN [ { 0.964200 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind { 1.000000 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind { 0.824900 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind ] MatrixABC is used to compute f(Y/Yn), f(X/Xn) - f(Y/Yn), f(Y/Yn) - f(Z/Zn) | 0 1 0| | 1 -1 0| | 0 1 -1| /MatrixABC [ 0 1 0 1 -1 1 0 0 -1 ] EncodeABC finally gives Lab values. /EncodeABC [ { 116 mul 16 sub 100 div } bind { 500 mul 128 add 255 div } bind { 200 mul 128 add 255 div } bind ] The following stages are used to convert Lab to XYZ ---------------------------------------------------- /RangeABC [ 0 1 0 1 0 1] /DecodeABC [ { 100 mul 16 add 116 div } bind { 255 mul 128 sub 500 div } bind { 255 mul 128 sub 200 div } bind ] /MatrixABC [ 1 1 1 1 0 0 0 0 -1] /DecodeLMN [ {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.964200 mul} bind {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse } bind {dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.824900 mul} bind ] */ /* PostScript algorithms discussion. ========================================================================================================= 1D interpolation algorithm 1D interpolation (float) ------------------------ val2 = Domain * Value; cell0 = (int) floor(val2); cell1 = (int) ceil(val2); rest = val2 - cell0; y0 = LutTable[cell0] ; y1 = LutTable[cell1] ; y = y0 + (y1 - y0) * rest; PostScript code Stack ================================================ { % v [array] % v tab dup % v tab tab length 1 sub % v tab dom 3 -1 roll % tab dom v mul % tab val2 dup % tab val2 val2 dup % tab val2 val2 val2 floor cvi % tab val2 val2 cell0 exch % tab val2 cell0 val2 ceiling cvi % tab val2 cell0 cell1 3 index % tab val2 cell0 cell1 tab exch % tab val2 cell0 tab cell1 get % tab val2 cell0 y1 4 -1 roll % val2 cell0 y1 tab 3 -1 roll % val2 y1 tab cell0 get % val2 y1 y0 dup % val2 y1 y0 y0 3 1 roll % val2 y0 y1 y0 sub % val2 y0 (y1-y0) 3 -1 roll % y0 (y1-y0) val2 dup % y0 (y1-y0) val2 val2 floor cvi % y0 (y1-y0) val2 floor(val2) sub % y0 (y1-y0) rest mul % y0 t1 add % y 65535 div % result } bind */ // This struct holds the memory block currently being write typedef struct { _cmsStageCLutData* Pipeline; cmsIOHANDLER* m; int FirstComponent; int SecondComponent; const char* PreMaj; const char* PostMaj; const char* PreMin; const char* PostMin; int FixWhite; // Force mapping of pure white cmsColorSpaceSignature ColorSpace; // ColorSpace of profile } cmsPsSamplerCargo; static int _cmsPSActualColumn = 0; // Convert to byte static cmsUInt8Number Word2Byte(cmsUInt16Number w) { return (cmsUInt8Number) floor((cmsFloat64Number) w / 257.0 + 0.5); } // Write a cooked byte static void WriteByte(cmsIOHANDLER* m, cmsUInt8Number b) { _cmsIOPrintf(m, "%02x", b); _cmsPSActualColumn += 2; if (_cmsPSActualColumn > MAXPSCOLS) { _cmsIOPrintf(m, "\n"); _cmsPSActualColumn = 0; } } // ----------------------------------------------------------------- PostScript generation // Removes offending carriage returns static char* RemoveCR(const char* txt) { static char Buffer[2048]; char* pt; strncpy(Buffer, txt, 2047); Buffer[2047] = 0; for (pt = Buffer; *pt; pt++) if (*pt == '\n' || *pt == '\r') *pt = ' '; return Buffer; } static void EmitHeader(cmsIOHANDLER* m, const char* Title, cmsHPROFILE hProfile) { time_t timer; cmsMLU *Description, *Copyright; char DescASCII[256], CopyrightASCII[256]; time(&timer); Description = (cmsMLU*) cmsReadTag(hProfile, cmsSigProfileDescriptionTag); Copyright = (cmsMLU*) cmsReadTag(hProfile, cmsSigCopyrightTag); DescASCII[0] = DescASCII[255] = 0; CopyrightASCII[0] = CopyrightASCII[255] = 0; if (Description != NULL) cmsMLUgetASCII(Description, cmsNoLanguage, cmsNoCountry, DescASCII, 255); if (Copyright != NULL) cmsMLUgetASCII(Copyright, cmsNoLanguage, cmsNoCountry, CopyrightASCII, 255); _cmsIOPrintf(m, "%%!PS-Adobe-3.0\n"); _cmsIOPrintf(m, "%%\n"); _cmsIOPrintf(m, "%% %s\n", Title); _cmsIOPrintf(m, "%% Source: %s\n", RemoveCR(DescASCII)); _cmsIOPrintf(m, "%% %s\n", RemoveCR(CopyrightASCII)); _cmsIOPrintf(m, "%% Created: %s", ctime(&timer)); // ctime appends a \n!!! _cmsIOPrintf(m, "%%\n"); _cmsIOPrintf(m, "%%%%BeginResource\n"); } // Emits White & Black point. White point is always D50, Black point is the device // Black point adapted to D50. static void EmitWhiteBlackD50(cmsIOHANDLER* m, cmsCIEXYZ* BlackPoint) { _cmsIOPrintf(m, "/BlackPoint [%f %f %f]\n", BlackPoint -> X, BlackPoint -> Y, BlackPoint -> Z); _cmsIOPrintf(m, "/WhitePoint [%f %f %f]\n", cmsD50_XYZ()->X, cmsD50_XYZ()->Y, cmsD50_XYZ()->Z); } static void EmitRangeCheck(cmsIOHANDLER* m) { _cmsIOPrintf(m, "dup 0.0 lt { pop 0.0 } if " "dup 1.0 gt { pop 1.0 } if "); } // Does write the intent static void EmitIntent(cmsIOHANDLER* m, cmsUInt32Number RenderingIntent) { const char *intent; switch (RenderingIntent) { case INTENT_PERCEPTUAL: intent = "Perceptual"; break; case INTENT_RELATIVE_COLORIMETRIC: intent = "RelativeColorimetric"; break; case INTENT_ABSOLUTE_COLORIMETRIC: intent = "AbsoluteColorimetric"; break; case INTENT_SATURATION: intent = "Saturation"; break; default: intent = "Undefined"; break; } _cmsIOPrintf(m, "/RenderingIntent (%s)\n", intent ); } // // Convert L* to Y // // Y = Yn*[ (L* + 16) / 116] ^ 3 if (L*) >= 6 / 29 // = Yn*( L* / 116) / 7.787 if (L*) < 6 / 29 // // Lab -> XYZ, see the discussion above static void EmitLab2XYZ(cmsIOHANDLER* m) { _cmsIOPrintf(m, "/RangeABC [ 0 1 0 1 0 1]\n"); _cmsIOPrintf(m, "/DecodeABC [\n"); _cmsIOPrintf(m, "{100 mul 16 add 116 div } bind\n"); _cmsIOPrintf(m, "{255 mul 128 sub 500 div } bind\n"); _cmsIOPrintf(m, "{255 mul 128 sub 200 div } bind\n"); _cmsIOPrintf(m, "]\n"); _cmsIOPrintf(m, "/MatrixABC [ 1 1 1 1 0 0 0 0 -1]\n"); _cmsIOPrintf(m, "/RangeLMN [ -0.236 1.254 0 1 -0.635 1.640 ]\n"); _cmsIOPrintf(m, "/DecodeLMN [\n"); _cmsIOPrintf(m, "{dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.964200 mul} bind\n"); _cmsIOPrintf(m, "{dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse } bind\n"); _cmsIOPrintf(m, "{dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse 0.824900 mul} bind\n"); _cmsIOPrintf(m, "]\n"); } static void EmitSafeGuardBegin(cmsIOHANDLER* m, const char* name) { _cmsIOPrintf(m, "%%LCMS2: Save previous definition of %s on the operand stack\n", name); _cmsIOPrintf(m, "currentdict /%s known { /%s load } { null } ifelse\n", name, name); } static void EmitSafeGuardEnd(cmsIOHANDLER* m, const char* name, int depth) { _cmsIOPrintf(m, "%%LCMS2: Restore previous definition of %s\n", name); if (depth > 1) { // cycle topmost items on the stack to bring the previous definition to the front _cmsIOPrintf(m, "%d -1 roll ", depth); } _cmsIOPrintf(m, "dup null eq { pop currentdict /%s undef } { /%s exch def } ifelse\n", name, name); } // Outputs a table of words. It does use 16 bits static void Emit1Gamma(cmsIOHANDLER* m, cmsToneCurve* Table, const char* name) { cmsUInt32Number i; cmsFloat64Number gamma; if (Table == NULL) return; // Error if (Table ->nEntries <= 0) return; // Empty table // Suppress whole if identity if (cmsIsToneCurveLinear(Table)) return; // Check if is really an exponential. If so, emit "exp" gamma = cmsEstimateGamma(Table, 0.001); if (gamma > 0) { _cmsIOPrintf(m, "/%s { %g exp } bind def\n", name, gamma); return; } EmitSafeGuardBegin(m, "lcms2gammatable"); _cmsIOPrintf(m, "/lcms2gammatable ["); for (i=0; i < Table->nEntries; i++) { if (i % 10 == 0) _cmsIOPrintf(m, "\n "); _cmsIOPrintf(m, "%d ", Table->Table16[i]); } _cmsIOPrintf(m, "] def\n"); // Emit interpolation code // PostScript code Stack // =============== ======================== // v _cmsIOPrintf(m, "/%s {\n ", name); // Bounds check EmitRangeCheck(m); _cmsIOPrintf(m, "\n //lcms2gammatable "); // v tab _cmsIOPrintf(m, "dup "); // v tab tab _cmsIOPrintf(m, "length 1 sub "); // v tab dom _cmsIOPrintf(m, "3 -1 roll "); // tab dom v _cmsIOPrintf(m, "mul "); // tab val2 _cmsIOPrintf(m, "dup "); // tab val2 val2 _cmsIOPrintf(m, "dup "); // tab val2 val2 val2 _cmsIOPrintf(m, "floor cvi "); // tab val2 val2 cell0 _cmsIOPrintf(m, "exch "); // tab val2 cell0 val2 _cmsIOPrintf(m, "ceiling cvi "); // tab val2 cell0 cell1 _cmsIOPrintf(m, "3 index "); // tab val2 cell0 cell1 tab _cmsIOPrintf(m, "exch "); // tab val2 cell0 tab cell1 _cmsIOPrintf(m, "get\n "); // tab val2 cell0 y1 _cmsIOPrintf(m, "4 -1 roll "); // val2 cell0 y1 tab _cmsIOPrintf(m, "3 -1 roll "); // val2 y1 tab cell0 _cmsIOPrintf(m, "get "); // val2 y1 y0 _cmsIOPrintf(m, "dup "); // val2 y1 y0 y0 _cmsIOPrintf(m, "3 1 roll "); // val2 y0 y1 y0 _cmsIOPrintf(m, "sub "); // val2 y0 (y1-y0) _cmsIOPrintf(m, "3 -1 roll "); // y0 (y1-y0) val2 _cmsIOPrintf(m, "dup "); // y0 (y1-y0) val2 val2 _cmsIOPrintf(m, "floor cvi "); // y0 (y1-y0) val2 floor(val2) _cmsIOPrintf(m, "sub "); // y0 (y1-y0) rest _cmsIOPrintf(m, "mul "); // y0 t1 _cmsIOPrintf(m, "add "); // y _cmsIOPrintf(m, "65535 div\n"); // result _cmsIOPrintf(m, "} bind def\n"); EmitSafeGuardEnd(m, "lcms2gammatable", 1); } // Compare gamma table static cmsBool GammaTableEquals(cmsUInt16Number* g1, cmsUInt16Number* g2, cmsUInt32Number nG1, cmsUInt32Number nG2) { if (nG1 != nG2) return FALSE; return memcmp(g1, g2, nG1 * sizeof(cmsUInt16Number)) == 0; } // Does write a set of gamma curves static void EmitNGamma(cmsIOHANDLER* m, cmsUInt32Number n, cmsToneCurve* g[], const char* nameprefix) { cmsUInt32Number i; static char buffer[2048]; for( i=0; i < n; i++ ) { if (g[i] == NULL) return; // Error if (i > 0 && GammaTableEquals(g[i-1]->Table16, g[i]->Table16, g[i-1]->nEntries, g[i]->nEntries)) { _cmsIOPrintf(m, "/%s%d /%s%d load def\n", nameprefix, i, nameprefix, i-1); } else { snprintf(buffer, sizeof(buffer), "%s%d", nameprefix, (int) i); buffer[sizeof(buffer)-1] = '\0'; Emit1Gamma(m, g[i], buffer); } } } // Following code dumps a LUT onto memory stream // This is the sampler. Intended to work in SAMPLER_INSPECT mode, // that is, the callback will be called for each knot with // // In[] The grid location coordinates, normalized to 0..ffff // Out[] The Pipeline values, normalized to 0..ffff // // Returning a value other than 0 does terminate the sampling process // // Each row contains Pipeline values for all but first component. So, I // detect row changing by keeping a copy of last value of first // component. -1 is used to mark beginning of whole block. static int OutputValueSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsPsSamplerCargo* sc = (cmsPsSamplerCargo*) Cargo; cmsUInt32Number i; if (sc -> FixWhite) { if (In[0] == 0xFFFF) { // Only in L* = 100, ab = [-8..8] if ((In[1] >= 0x7800 && In[1] <= 0x8800) && (In[2] >= 0x7800 && In[2] <= 0x8800)) { cmsUInt16Number* Black; cmsUInt16Number* White; cmsUInt32Number nOutputs; if (!_cmsEndPointsBySpace(sc ->ColorSpace, &White, &Black, &nOutputs)) return 0; for (i=0; i < nOutputs; i++) Out[i] = White[i]; } } } // Hadle the parenthesis on rows if (In[0] != sc ->FirstComponent) { if (sc ->FirstComponent != -1) { _cmsIOPrintf(sc ->m, sc ->PostMin); sc ->SecondComponent = -1; _cmsIOPrintf(sc ->m, sc ->PostMaj); } // Begin block _cmsPSActualColumn = 0; _cmsIOPrintf(sc ->m, sc ->PreMaj); sc ->FirstComponent = In[0]; } if (In[1] != sc ->SecondComponent) { if (sc ->SecondComponent != -1) { _cmsIOPrintf(sc ->m, sc ->PostMin); } _cmsIOPrintf(sc ->m, sc ->PreMin); sc ->SecondComponent = In[1]; } // Dump table. for (i=0; i < sc -> Pipeline ->Params->nOutputs; i++) { cmsUInt16Number wWordOut = Out[i]; cmsUInt8Number wByteOut; // Value as byte // We always deal with Lab4 wByteOut = Word2Byte(wWordOut); WriteByte(sc -> m, wByteOut); } return 1; } // Writes a Pipeline on memstream. Could be 8 or 16 bits based static void WriteCLUT(cmsIOHANDLER* m, cmsStage* mpe, const char* PreMaj, const char* PostMaj, const char* PreMin, const char* PostMin, int FixWhite, cmsColorSpaceSignature ColorSpace) { cmsUInt32Number i; cmsPsSamplerCargo sc; sc.FirstComponent = -1; sc.SecondComponent = -1; sc.Pipeline = (_cmsStageCLutData *) mpe ->Data; sc.m = m; sc.PreMaj = PreMaj; sc.PostMaj= PostMaj; sc.PreMin = PreMin; sc.PostMin = PostMin; sc.FixWhite = FixWhite; sc.ColorSpace = ColorSpace; _cmsIOPrintf(m, "["); for (i=0; i < sc.Pipeline->Params->nInputs; i++) _cmsIOPrintf(m, " %d ", sc.Pipeline->Params->nSamples[i]); _cmsIOPrintf(m, " [\n"); cmsStageSampleCLut16bit(mpe, OutputValueSampler, (void*) &sc, SAMPLER_INSPECT); _cmsIOPrintf(m, PostMin); _cmsIOPrintf(m, PostMaj); _cmsIOPrintf(m, "] "); } // Dumps CIEBasedA Color Space Array static int EmitCIEBasedA(cmsIOHANDLER* m, cmsToneCurve* Curve, cmsCIEXYZ* BlackPoint) { _cmsIOPrintf(m, "[ /CIEBasedA\n"); _cmsIOPrintf(m, " <<\n"); EmitSafeGuardBegin(m, "lcms2gammaproc"); Emit1Gamma(m, Curve, "lcms2gammaproc"); _cmsIOPrintf(m, "/DecodeA /lcms2gammaproc load\n"); EmitSafeGuardEnd(m, "lcms2gammaproc", 3); _cmsIOPrintf(m, "/MatrixA [ 0.9642 1.0000 0.8249 ]\n"); _cmsIOPrintf(m, "/RangeLMN [ 0.0 0.9642 0.0 1.0000 0.0 0.8249 ]\n"); EmitWhiteBlackD50(m, BlackPoint); EmitIntent(m, INTENT_PERCEPTUAL); _cmsIOPrintf(m, ">>\n"); _cmsIOPrintf(m, "]\n"); return 1; } // Dumps CIEBasedABC Color Space Array static int EmitCIEBasedABC(cmsIOHANDLER* m, cmsFloat64Number* Matrix, cmsToneCurve** CurveSet, cmsCIEXYZ* BlackPoint) { int i; _cmsIOPrintf(m, "[ /CIEBasedABC\n"); _cmsIOPrintf(m, "<<\n"); EmitSafeGuardBegin(m, "lcms2gammaproc0"); EmitSafeGuardBegin(m, "lcms2gammaproc1"); EmitSafeGuardBegin(m, "lcms2gammaproc2"); EmitNGamma(m, 3, CurveSet, "lcms2gammaproc"); _cmsIOPrintf(m, "/DecodeABC [\n"); _cmsIOPrintf(m, " /lcms2gammaproc0 load\n"); _cmsIOPrintf(m, " /lcms2gammaproc1 load\n"); _cmsIOPrintf(m, " /lcms2gammaproc2 load\n"); _cmsIOPrintf(m, "]\n"); EmitSafeGuardEnd(m, "lcms2gammaproc2", 3); EmitSafeGuardEnd(m, "lcms2gammaproc1", 3); EmitSafeGuardEnd(m, "lcms2gammaproc0", 3); _cmsIOPrintf(m, "/MatrixABC [ " ); for( i=0; i < 3; i++ ) { _cmsIOPrintf(m, "%.6f %.6f %.6f ", Matrix[i + 3*0], Matrix[i + 3*1], Matrix[i + 3*2]); } _cmsIOPrintf(m, "]\n"); _cmsIOPrintf(m, "/RangeLMN [ 0.0 0.9642 0.0 1.0000 0.0 0.8249 ]\n"); EmitWhiteBlackD50(m, BlackPoint); EmitIntent(m, INTENT_PERCEPTUAL); _cmsIOPrintf(m, ">>\n"); _cmsIOPrintf(m, "]\n"); return 1; } static int EmitCIEBasedDEF(cmsIOHANDLER* m, cmsPipeline* Pipeline, cmsUInt32Number Intent, cmsCIEXYZ* BlackPoint) { const char* PreMaj; const char* PostMaj; const char* PreMin, * PostMin; cmsStage* mpe; int i, numchans; static char buffer[2048]; mpe = Pipeline->Elements; switch (cmsStageInputChannels(mpe)) { case 3: _cmsIOPrintf(m, "[ /CIEBasedDEF\n"); PreMaj = "<"; PostMaj = ">\n"; PreMin = PostMin = ""; break; case 4: _cmsIOPrintf(m, "[ /CIEBasedDEFG\n"); PreMaj = "["; PostMaj = "]\n"; PreMin = "<"; PostMin = ">\n"; break; default: return 0; } _cmsIOPrintf(m, "<<\n"); if (cmsStageType(mpe) == cmsSigCurveSetElemType) { numchans = cmsStageOutputChannels(mpe); for (i = 0; i < numchans; ++i) { snprintf(buffer, sizeof(buffer), "lcms2gammaproc%d", i); buffer[sizeof(buffer) - 1] = '\0'; EmitSafeGuardBegin(m, buffer); } EmitNGamma(m, cmsStageOutputChannels(mpe), _cmsStageGetPtrToCurveSet(mpe), "lcms2gammaproc"); _cmsIOPrintf(m, "/DecodeDEF [\n"); for (i = 0; i < numchans; ++i) { snprintf(buffer, sizeof(buffer), " /lcms2gammaproc%d load\n", i); buffer[sizeof(buffer) - 1] = '\0'; _cmsIOPrintf(m, buffer); } _cmsIOPrintf(m, "]\n"); for (i = numchans - 1; i >= 0; --i) { snprintf(buffer, sizeof(buffer), "lcms2gammaproc%d", i); buffer[sizeof(buffer) - 1] = '\0'; EmitSafeGuardEnd(m, buffer, 3); } mpe = mpe->Next; } if (cmsStageType(mpe) == cmsSigCLutElemType) { _cmsIOPrintf(m, "/Table "); WriteCLUT(m, mpe, PreMaj, PostMaj, PreMin, PostMin, FALSE, (cmsColorSpaceSignature)0); _cmsIOPrintf(m, "]\n"); } EmitLab2XYZ(m); EmitWhiteBlackD50(m, BlackPoint); EmitIntent(m, Intent); _cmsIOPrintf(m, " >>\n"); _cmsIOPrintf(m, "]\n"); return 1; } // Generates a curve from a gray profile static cmsToneCurve* ExtractGray2Y(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent) { cmsToneCurve* Out = cmsBuildTabulatedToneCurve16(ContextID, 256, NULL); cmsHPROFILE hXYZ = cmsCreateXYZProfile(); cmsHTRANSFORM xform = cmsCreateTransformTHR(ContextID, hProfile, TYPE_GRAY_8, hXYZ, TYPE_XYZ_DBL, Intent, cmsFLAGS_NOOPTIMIZE); int i; if (Out != NULL && xform != NULL) { for (i=0; i < 256; i++) { cmsUInt8Number Gray = (cmsUInt8Number) i; cmsCIEXYZ XYZ; cmsDoTransform(xform, &Gray, &XYZ, 1); Out ->Table16[i] =_cmsQuickSaturateWord(XYZ.Y * 65535.0); } } if (xform) cmsDeleteTransform(xform); if (hXYZ) cmsCloseProfile(hXYZ); return Out; } // Because PostScript has only 8 bits in /Table, we should use // a more perceptually uniform space... I do choose Lab. static int WriteInputLUT(cmsIOHANDLER* m, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsHPROFILE hLab; cmsHTRANSFORM xform; cmsUInt32Number nChannels; cmsUInt32Number InputFormat; int rc; cmsHPROFILE Profiles[2]; cmsCIEXYZ BlackPointAdaptedToD50; // Does create a device-link based transform. // The DeviceLink is next dumped as working CSA. InputFormat = cmsFormatterForColorspaceOfProfile(hProfile, 2, FALSE); nChannels = T_CHANNELS(InputFormat); cmsDetectBlackPoint(&BlackPointAdaptedToD50, hProfile, Intent, 0); // Adjust output to Lab4 hLab = cmsCreateLab4ProfileTHR(m ->ContextID, NULL); Profiles[0] = hProfile; Profiles[1] = hLab; xform = cmsCreateMultiprofileTransform(Profiles, 2, InputFormat, TYPE_Lab_DBL, Intent, 0); cmsCloseProfile(hLab); if (xform == NULL) { cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Cannot create transform Profile -> Lab"); return 0; } // Only 1, 3 and 4 channels are allowed switch (nChannels) { case 1: { cmsToneCurve* Gray2Y = ExtractGray2Y(m ->ContextID, hProfile, Intent); EmitCIEBasedA(m, Gray2Y, &BlackPointAdaptedToD50); cmsFreeToneCurve(Gray2Y); } break; case 3: case 4: { cmsUInt32Number OutFrm = TYPE_Lab_16; cmsPipeline* DeviceLink; _cmsTRANSFORM* v = (_cmsTRANSFORM*) xform; DeviceLink = cmsPipelineDup(v ->Lut); if (DeviceLink == NULL) return 0; dwFlags |= cmsFLAGS_FORCE_CLUT; _cmsOptimizePipeline(m->ContextID, &DeviceLink, Intent, &InputFormat, &OutFrm, &dwFlags); rc = EmitCIEBasedDEF(m, DeviceLink, Intent, &BlackPointAdaptedToD50); cmsPipelineFree(DeviceLink); if (rc == 0) return 0; } break; default: cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Only 3, 4 channels are supported for CSA. This profile has %d channels.", nChannels); return 0; } cmsDeleteTransform(xform); return 1; } static cmsFloat64Number* GetPtrToMatrix(const cmsStage* mpe) { _cmsStageMatrixData* Data = (_cmsStageMatrixData*) mpe ->Data; return Data -> Double; } // Does create CSA based on matrix-shaper. Allowed types are gray and RGB based static int WriteInputMatrixShaper(cmsIOHANDLER* m, cmsHPROFILE hProfile, cmsStage* Matrix, cmsStage* Shaper) { cmsColorSpaceSignature ColorSpace; int rc; cmsCIEXYZ BlackPointAdaptedToD50; ColorSpace = cmsGetColorSpace(hProfile); cmsDetectBlackPoint(&BlackPointAdaptedToD50, hProfile, INTENT_RELATIVE_COLORIMETRIC, 0); if (ColorSpace == cmsSigGrayData) { cmsToneCurve** ShaperCurve = _cmsStageGetPtrToCurveSet(Shaper); rc = EmitCIEBasedA(m, ShaperCurve[0], &BlackPointAdaptedToD50); } else if (ColorSpace == cmsSigRgbData) { cmsMAT3 Mat; int i, j; memmove(&Mat, GetPtrToMatrix(Matrix), sizeof(Mat)); for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) Mat.v[i].n[j] *= MAX_ENCODEABLE_XYZ; rc = EmitCIEBasedABC(m, (cmsFloat64Number *)&Mat, _cmsStageGetPtrToCurveSet(Shaper), &BlackPointAdaptedToD50); } else { cmsSignalError(m->ContextID, cmsERROR_COLORSPACE_CHECK, "Profile is not suitable for CSA. Unsupported colorspace."); return 0; } return rc; } // Creates a PostScript color list from a named profile data. // This is a HP extension, and it works in Lab instead of XYZ static int WriteNamedColorCSA(cmsIOHANDLER* m, cmsHPROFILE hNamedColor, cmsUInt32Number Intent) { cmsHTRANSFORM xform; cmsHPROFILE hLab; cmsUInt32Number i, nColors; char ColorName[cmsMAX_PATH]; cmsNAMEDCOLORLIST* NamedColorList; hLab = cmsCreateLab4ProfileTHR(m ->ContextID, NULL); xform = cmsCreateTransform(hNamedColor, TYPE_NAMED_COLOR_INDEX, hLab, TYPE_Lab_DBL, Intent, 0); if (xform == NULL) return 0; NamedColorList = cmsGetNamedColorList(xform); if (NamedColorList == NULL) return 0; _cmsIOPrintf(m, "<<\n"); _cmsIOPrintf(m, "(colorlistcomment) (%s)\n", "Named color CSA"); _cmsIOPrintf(m, "(Prefix) [ (Pantone ) (PANTONE ) ]\n"); _cmsIOPrintf(m, "(Suffix) [ ( CV) ( CVC) ( C) ]\n"); nColors = cmsNamedColorCount(NamedColorList); for (i=0; i < nColors; i++) { cmsUInt16Number In[1]; cmsCIELab Lab; In[0] = (cmsUInt16Number) i; if (!cmsNamedColorInfo(NamedColorList, i, ColorName, NULL, NULL, NULL, NULL)) continue; cmsDoTransform(xform, In, &Lab, 1); _cmsIOPrintf(m, " (%s) [ %.3f %.3f %.3f ]\n", ColorName, Lab.L, Lab.a, Lab.b); } _cmsIOPrintf(m, ">>\n"); cmsDeleteTransform(xform); cmsCloseProfile(hLab); return 1; } // Does create a Color Space Array on XYZ colorspace for PostScript usage static cmsUInt32Number GenerateCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, cmsIOHANDLER* mem) { cmsUInt32Number dwBytesUsed; cmsPipeline* lut = NULL; cmsStage* Matrix, *Shaper; // Is a named color profile? if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { if (!WriteNamedColorCSA(mem, hProfile, Intent)) goto Error; } else { // Any profile class are allowed (including devicelink), but // output (PCS) colorspace must be XYZ or Lab cmsColorSpaceSignature ColorSpace = cmsGetPCS(hProfile); if (ColorSpace != cmsSigXYZData && ColorSpace != cmsSigLabData) { cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "Invalid output color space"); goto Error; } // Read the lut with all necessary conversion stages lut = _cmsReadInputLUT(hProfile, Intent); if (lut == NULL) goto Error; // Tone curves + matrix can be implemented without any LUT if (cmsPipelineCheckAndRetreiveStages(lut, 2, cmsSigCurveSetElemType, cmsSigMatrixElemType, &Shaper, &Matrix)) { if (!WriteInputMatrixShaper(mem, hProfile, Matrix, Shaper)) goto Error; } else { // We need a LUT for the rest if (!WriteInputLUT(mem, hProfile, Intent, dwFlags)) goto Error; } } // Done, keep memory usage dwBytesUsed = mem ->UsedSpace; // Get rid of LUT if (lut != NULL) cmsPipelineFree(lut); // Finally, return used byte count return dwBytesUsed; Error: if (lut != NULL) cmsPipelineFree(lut); return 0; } // ------------------------------------------------------ Color Rendering Dictionary (CRD) /* Black point compensation plus chromatic adaptation: Step 1 - Chromatic adaptation ============================= WPout X = ------- PQR Wpin Step 2 - Black point compensation ================================= (WPout - BPout)*X - WPout*(BPin - BPout) out = --------------------------------------- WPout - BPin Algorithm discussion ==================== TransformPQR(WPin, BPin, WPout, BPout, PQR) Wpin,etc= { Xws Yws Zws Pws Qws Rws } Algorithm Stack 0...n =========================================================== PQR BPout WPout BPin WPin 4 index 3 get WPin PQR BPout WPout BPin WPin div (PQR/WPin) BPout WPout BPin WPin 2 index 3 get WPout (PQR/WPin) BPout WPout BPin WPin mult WPout*(PQR/WPin) BPout WPout BPin WPin 2 index 3 get WPout WPout*(PQR/WPin) BPout WPout BPin WPin 2 index 3 get BPout WPout WPout*(PQR/WPin) BPout WPout BPin WPin sub (WPout-BPout) WPout*(PQR/WPin) BPout WPout BPin WPin mult (WPout-BPout)* WPout*(PQR/WPin) BPout WPout BPin WPin 2 index 3 get WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin 4 index 3 get BPin WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin 3 index 3 get BPout BPin WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin sub (BPin-BPout) WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin mult (BPin-BPout)*WPout (BPout-WPout)* WPout*(PQR/WPin) BPout WPout BPin WPin sub (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin 3 index 3 get BPin (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin 3 index 3 get WPout BPin (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin exch sub (WPout-BPin) (BPout-WPout)* WPout*(PQR/WPin)-(BPin-BPout)*WPout BPout WPout BPin WPin div exch pop exch pop exch pop exch pop */ static void EmitPQRStage(cmsIOHANDLER* m, cmsHPROFILE hProfile, int DoBPC, int lIsAbsolute) { if (lIsAbsolute) { // For absolute colorimetric intent, encode back to relative // and generate a relative Pipeline // Relative encoding is obtained across XYZpcs*(D50/WhitePoint) cmsCIEXYZ White; _cmsReadMediaWhitePoint(&White, hProfile); _cmsIOPrintf(m,"/MatrixPQR [1 0 0 0 1 0 0 0 1 ]\n"); _cmsIOPrintf(m,"/RangePQR [ -0.5 2 -0.5 2 -0.5 2 ]\n"); _cmsIOPrintf(m, "%% Absolute colorimetric -- encode to relative to maximize LUT usage\n" "/TransformPQR [\n" "{0.9642 mul %g div exch pop exch pop exch pop exch pop} bind\n" "{1.0000 mul %g div exch pop exch pop exch pop exch pop} bind\n" "{0.8249 mul %g div exch pop exch pop exch pop exch pop} bind\n]\n", White.X, White.Y, White.Z); return; } _cmsIOPrintf(m,"%% Bradford Cone Space\n" "/MatrixPQR [0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296 ] \n"); _cmsIOPrintf(m, "/RangePQR [ -0.5 2 -0.5 2 -0.5 2 ]\n"); // No BPC if (!DoBPC) { _cmsIOPrintf(m, "%% VonKries-like transform in Bradford Cone Space\n" "/TransformPQR [\n" "{exch pop exch 3 get mul exch pop exch 3 get div} bind\n" "{exch pop exch 4 get mul exch pop exch 4 get div} bind\n" "{exch pop exch 5 get mul exch pop exch 5 get div} bind\n]\n"); } else { // BPC _cmsIOPrintf(m, "%% VonKries-like transform in Bradford Cone Space plus BPC\n" "/TransformPQR [\n"); _cmsIOPrintf(m, "{4 index 3 get div 2 index 3 get mul " "2 index 3 get 2 index 3 get sub mul " "2 index 3 get 4 index 3 get 3 index 3 get sub mul sub " "3 index 3 get 3 index 3 get exch sub div " "exch pop exch pop exch pop exch pop } bind\n"); _cmsIOPrintf(m, "{4 index 4 get div 2 index 4 get mul " "2 index 4 get 2 index 4 get sub mul " "2 index 4 get 4 index 4 get 3 index 4 get sub mul sub " "3 index 4 get 3 index 4 get exch sub div " "exch pop exch pop exch pop exch pop } bind\n"); _cmsIOPrintf(m, "{4 index 5 get div 2 index 5 get mul " "2 index 5 get 2 index 5 get sub mul " "2 index 5 get 4 index 5 get 3 index 5 get sub mul sub " "3 index 5 get 3 index 5 get exch sub div " "exch pop exch pop exch pop exch pop } bind\n]\n"); } } static void EmitXYZ2Lab(cmsIOHANDLER* m) { _cmsIOPrintf(m, "/RangeLMN [ -0.635 2.0 0 2 -0.635 2.0 ]\n"); _cmsIOPrintf(m, "/EncodeLMN [\n"); _cmsIOPrintf(m, "{ 0.964200 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind\n"); _cmsIOPrintf(m, "{ 1.000000 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind\n"); _cmsIOPrintf(m, "{ 0.824900 div dup 0.008856 le {7.787 mul 16 116 div add}{1 3 div exp} ifelse } bind\n"); _cmsIOPrintf(m, "]\n"); _cmsIOPrintf(m, "/MatrixABC [ 0 1 0 1 -1 1 0 0 -1 ]\n"); _cmsIOPrintf(m, "/EncodeABC [\n"); _cmsIOPrintf(m, "{ 116 mul 16 sub 100 div } bind\n"); _cmsIOPrintf(m, "{ 500 mul 128 add 256 div } bind\n"); _cmsIOPrintf(m, "{ 200 mul 128 add 256 div } bind\n"); _cmsIOPrintf(m, "]\n"); } // Due to impedance mismatch between XYZ and almost all RGB and CMYK spaces // I choose to dump LUTS in Lab instead of XYZ. There is still a lot of wasted // space on 3D CLUT, but since space seems not to be a problem here, 33 points // would give a reasonable accuracy. Note also that CRD tables must operate in // 8 bits. static int WriteOutputLUT(cmsIOHANDLER* m, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsHPROFILE hLab; cmsHTRANSFORM xform; cmsUInt32Number i, nChannels; cmsUInt32Number OutputFormat; _cmsTRANSFORM* v; cmsPipeline* DeviceLink; cmsHPROFILE Profiles[3]; cmsCIEXYZ BlackPointAdaptedToD50; cmsBool lDoBPC = (cmsBool) (dwFlags & cmsFLAGS_BLACKPOINTCOMPENSATION); cmsBool lFixWhite = (cmsBool) !(dwFlags & cmsFLAGS_NOWHITEONWHITEFIXUP); cmsUInt32Number InFrm = TYPE_Lab_16; cmsUInt32Number RelativeEncodingIntent; cmsColorSpaceSignature ColorSpace; hLab = cmsCreateLab4ProfileTHR(m ->ContextID, NULL); if (hLab == NULL) return 0; OutputFormat = cmsFormatterForColorspaceOfProfile(hProfile, 2, FALSE); nChannels = T_CHANNELS(OutputFormat); ColorSpace = cmsGetColorSpace(hProfile); // For absolute colorimetric, the LUT is encoded as relative in order to preserve precision. RelativeEncodingIntent = Intent; if (RelativeEncodingIntent == INTENT_ABSOLUTE_COLORIMETRIC) RelativeEncodingIntent = INTENT_RELATIVE_COLORIMETRIC; // Use V4 Lab always Profiles[0] = hLab; Profiles[1] = hProfile; xform = cmsCreateMultiprofileTransformTHR(m ->ContextID, Profiles, 2, TYPE_Lab_DBL, OutputFormat, RelativeEncodingIntent, 0); cmsCloseProfile(hLab); if (xform == NULL) { cmsSignalError(m ->ContextID, cmsERROR_COLORSPACE_CHECK, "Cannot create transform Lab -> Profile in CRD creation"); return 0; } // Get a copy of the internal devicelink v = (_cmsTRANSFORM*) xform; DeviceLink = cmsPipelineDup(v ->Lut); if (DeviceLink == NULL) return 0; // We need a CLUT dwFlags |= cmsFLAGS_FORCE_CLUT; _cmsOptimizePipeline(m->ContextID, &DeviceLink, RelativeEncodingIntent, &InFrm, &OutputFormat, &dwFlags); _cmsIOPrintf(m, "<<\n"); _cmsIOPrintf(m, "/ColorRenderingType 1\n"); cmsDetectBlackPoint(&BlackPointAdaptedToD50, hProfile, Intent, 0); // Emit headers, etc. EmitWhiteBlackD50(m, &BlackPointAdaptedToD50); EmitPQRStage(m, hProfile, lDoBPC, Intent == INTENT_ABSOLUTE_COLORIMETRIC); EmitXYZ2Lab(m); // FIXUP: map Lab (100, 0, 0) to perfect white, because the particular encoding for Lab // does map a=b=0 not falling into any specific node. Since range a,b goes -128..127, // zero is slightly moved towards right, so assure next node (in L=100 slice) is mapped to // zero. This would sacrifice a bit of highlights, but failure to do so would cause // scum dot. Ouch. if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) lFixWhite = FALSE; _cmsIOPrintf(m, "/RenderTable "); WriteCLUT(m, cmsPipelineGetPtrToFirstStage(DeviceLink), "<", ">\n", "", "", lFixWhite, ColorSpace); _cmsIOPrintf(m, " %d {} bind ", nChannels); for (i=1; i < nChannels; i++) _cmsIOPrintf(m, "dup "); _cmsIOPrintf(m, "]\n"); EmitIntent(m, Intent); _cmsIOPrintf(m, ">>\n"); if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { _cmsIOPrintf(m, "/Current exch /ColorRendering defineresource pop\n"); } cmsPipelineFree(DeviceLink); cmsDeleteTransform(xform); return 1; } // Builds a ASCII string containing colorant list in 0..1.0 range static void BuildColorantList(char *Colorant, cmsUInt32Number nColorant, cmsUInt16Number Out[]) { char Buff[32]; cmsUInt32Number j; Colorant[0] = 0; if (nColorant > cmsMAXCHANNELS) nColorant = cmsMAXCHANNELS; for (j = 0; j < nColorant; j++) { snprintf(Buff, 31, "%.3f", Out[j] / 65535.0); Buff[31] = 0; strcat(Colorant, Buff); if (j < nColorant - 1) strcat(Colorant, " "); } } // Creates a PostScript color list from a named profile data. // This is a HP extension. static int WriteNamedColorCRD(cmsIOHANDLER* m, cmsHPROFILE hNamedColor, cmsUInt32Number Intent, cmsUInt32Number dwFlags) { cmsHTRANSFORM xform; cmsUInt32Number i, nColors, nColorant; cmsUInt32Number OutputFormat; char ColorName[cmsMAX_PATH]; char Colorant[512]; cmsNAMEDCOLORLIST* NamedColorList; OutputFormat = cmsFormatterForColorspaceOfProfile(hNamedColor, 2, FALSE); nColorant = T_CHANNELS(OutputFormat); xform = cmsCreateTransform(hNamedColor, TYPE_NAMED_COLOR_INDEX, NULL, OutputFormat, Intent, dwFlags); if (xform == NULL) return 0; NamedColorList = cmsGetNamedColorList(xform); if (NamedColorList == NULL) return 0; _cmsIOPrintf(m, "<<\n"); _cmsIOPrintf(m, "(colorlistcomment) (%s) \n", "Named profile"); _cmsIOPrintf(m, "(Prefix) [ (Pantone ) (PANTONE ) ]\n"); _cmsIOPrintf(m, "(Suffix) [ ( CV) ( CVC) ( C) ]\n"); nColors = cmsNamedColorCount(NamedColorList); for (i=0; i < nColors; i++) { cmsUInt16Number In[1]; cmsUInt16Number Out[cmsMAXCHANNELS]; In[0] = (cmsUInt16Number) i; if (!cmsNamedColorInfo(NamedColorList, i, ColorName, NULL, NULL, NULL, NULL)) continue; cmsDoTransform(xform, In, Out, 1); BuildColorantList(Colorant, nColorant, Out); _cmsIOPrintf(m, " (%s) [ %s ]\n", ColorName, Colorant); } _cmsIOPrintf(m, " >>"); if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { _cmsIOPrintf(m, " /Current exch /HPSpotTable defineresource pop\n"); } cmsDeleteTransform(xform); return 1; } // This one does create a Color Rendering Dictionary. // CRD are always LUT-Based, no matter if profile is // implemented as matrix-shaper. static cmsUInt32Number GenerateCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, cmsIOHANDLER* mem) { cmsUInt32Number dwBytesUsed; if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { EmitHeader(mem, "Color Rendering Dictionary (CRD)", hProfile); } // Is a named color profile? if (cmsGetDeviceClass(hProfile) == cmsSigNamedColorClass) { if (!WriteNamedColorCRD(mem, hProfile, Intent, dwFlags)) { return 0; } } else { // CRD are always implemented as LUT if (!WriteOutputLUT(mem, hProfile, Intent, dwFlags)) { return 0; } } if (!(dwFlags & cmsFLAGS_NODEFAULTRESOURCEDEF)) { _cmsIOPrintf(mem, "%%%%EndResource\n"); _cmsIOPrintf(mem, "\n%% CRD End\n"); } // Done, keep memory usage dwBytesUsed = mem ->UsedSpace; // Finally, return used byte count return dwBytesUsed; cmsUNUSED_PARAMETER(ContextID); } cmsUInt32Number CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID, cmsPSResourceType Type, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, cmsIOHANDLER* io) { cmsUInt32Number rc; switch (Type) { case cmsPS_RESOURCE_CSA: rc = GenerateCSA(ContextID, hProfile, Intent, dwFlags, io); break; default: case cmsPS_RESOURCE_CRD: rc = GenerateCRD(ContextID, hProfile, Intent, dwFlags, io); break; } return rc; } cmsUInt32Number CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen) { cmsIOHANDLER* mem; cmsUInt32Number dwBytesUsed; // Set up the serialization engine if (Buffer == NULL) mem = cmsOpenIOhandlerFromNULL(ContextID); else mem = cmsOpenIOhandlerFromMem(ContextID, Buffer, dwBufferLen, "w"); if (!mem) return 0; dwBytesUsed = cmsGetPostScriptColorResource(ContextID, cmsPS_RESOURCE_CRD, hProfile, Intent, dwFlags, mem); // Get rid of memory stream cmsCloseIOhandler(mem); return dwBytesUsed; } // Does create a Color Space Array on XYZ colorspace for PostScript usage cmsUInt32Number CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen) { cmsIOHANDLER* mem; cmsUInt32Number dwBytesUsed; if (Buffer == NULL) mem = cmsOpenIOhandlerFromNULL(ContextID); else mem = cmsOpenIOhandlerFromMem(ContextID, Buffer, dwBufferLen, "w"); if (!mem) return 0; dwBytesUsed = cmsGetPostScriptColorResource(ContextID, cmsPS_RESOURCE_CSA, hProfile, Intent, dwFlags, mem); // Get rid of memory stream cmsCloseIOhandler(mem); return dwBytesUsed; } lcms2-2.12rc1/src/cmsmtrx.c0000644000175000017500000001306213775114656014547 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" #define DSWAP(x, y) {cmsFloat64Number tmp = (x); (x)=(y); (y)=tmp;} // Initiate a vector void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z) { r -> n[VX] = x; r -> n[VY] = y; r -> n[VZ] = z; } // Vector subtraction void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b) { r -> n[VX] = a -> n[VX] - b -> n[VX]; r -> n[VY] = a -> n[VY] - b -> n[VY]; r -> n[VZ] = a -> n[VZ] - b -> n[VZ]; } // Vector cross product void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v) { r ->n[VX] = u->n[VY] * v->n[VZ] - v->n[VY] * u->n[VZ]; r ->n[VY] = u->n[VZ] * v->n[VX] - v->n[VZ] * u->n[VX]; r ->n[VZ] = u->n[VX] * v->n[VY] - v->n[VX] * u->n[VY]; } // Vector dot product cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v) { return u->n[VX] * v->n[VX] + u->n[VY] * v->n[VY] + u->n[VZ] * v->n[VZ]; } // Euclidean length cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a) { return sqrt(a ->n[VX] * a ->n[VX] + a ->n[VY] * a ->n[VY] + a ->n[VZ] * a ->n[VZ]); } // Euclidean distance cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b) { cmsFloat64Number d1 = a ->n[VX] - b ->n[VX]; cmsFloat64Number d2 = a ->n[VY] - b ->n[VY]; cmsFloat64Number d3 = a ->n[VZ] - b ->n[VZ]; return sqrt(d1*d1 + d2*d2 + d3*d3); } // 3x3 Identity void CMSEXPORT _cmsMAT3identity(cmsMAT3* a) { _cmsVEC3init(&a-> v[0], 1.0, 0.0, 0.0); _cmsVEC3init(&a-> v[1], 0.0, 1.0, 0.0); _cmsVEC3init(&a-> v[2], 0.0, 0.0, 1.0); } static cmsBool CloseEnough(cmsFloat64Number a, cmsFloat64Number b) { return fabs(b - a) < (1.0 / 65535.0); } cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a) { cmsMAT3 Identity; int i, j; _cmsMAT3identity(&Identity); for (i=0; i < 3; i++) for (j=0; j < 3; j++) if (!CloseEnough(a ->v[i].n[j], Identity.v[i].n[j])) return FALSE; return TRUE; } // Multiply two matrices void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b) { #define ROWCOL(i, j) \ a->v[i].n[0]*b->v[0].n[j] + a->v[i].n[1]*b->v[1].n[j] + a->v[i].n[2]*b->v[2].n[j] _cmsVEC3init(&r-> v[0], ROWCOL(0,0), ROWCOL(0,1), ROWCOL(0,2)); _cmsVEC3init(&r-> v[1], ROWCOL(1,0), ROWCOL(1,1), ROWCOL(1,2)); _cmsVEC3init(&r-> v[2], ROWCOL(2,0), ROWCOL(2,1), ROWCOL(2,2)); #undef ROWCOL //(i, j) } // Inverse of a matrix b = a^(-1) cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b) { cmsFloat64Number det, c0, c1, c2; c0 = a -> v[1].n[1]*a -> v[2].n[2] - a -> v[1].n[2]*a -> v[2].n[1]; c1 = -a -> v[1].n[0]*a -> v[2].n[2] + a -> v[1].n[2]*a -> v[2].n[0]; c2 = a -> v[1].n[0]*a -> v[2].n[1] - a -> v[1].n[1]*a -> v[2].n[0]; det = a -> v[0].n[0]*c0 + a -> v[0].n[1]*c1 + a -> v[0].n[2]*c2; if (fabs(det) < MATRIX_DET_TOLERANCE) return FALSE; // singular matrix; can't invert b -> v[0].n[0] = c0/det; b -> v[0].n[1] = (a -> v[0].n[2]*a -> v[2].n[1] - a -> v[0].n[1]*a -> v[2].n[2])/det; b -> v[0].n[2] = (a -> v[0].n[1]*a -> v[1].n[2] - a -> v[0].n[2]*a -> v[1].n[1])/det; b -> v[1].n[0] = c1/det; b -> v[1].n[1] = (a -> v[0].n[0]*a -> v[2].n[2] - a -> v[0].n[2]*a -> v[2].n[0])/det; b -> v[1].n[2] = (a -> v[0].n[2]*a -> v[1].n[0] - a -> v[0].n[0]*a -> v[1].n[2])/det; b -> v[2].n[0] = c2/det; b -> v[2].n[1] = (a -> v[0].n[1]*a -> v[2].n[0] - a -> v[0].n[0]*a -> v[2].n[1])/det; b -> v[2].n[2] = (a -> v[0].n[0]*a -> v[1].n[1] - a -> v[0].n[1]*a -> v[1].n[0])/det; return TRUE; } // Solve a system in the form Ax = b cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b) { cmsMAT3 m, a_1; memmove(&m, a, sizeof(cmsMAT3)); if (!_cmsMAT3inverse(&m, &a_1)) return FALSE; // Singular matrix _cmsMAT3eval(x, &a_1, b); return TRUE; } // Evaluate a vector across a matrix void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v) { r->n[VX] = a->v[0].n[VX]*v->n[VX] + a->v[0].n[VY]*v->n[VY] + a->v[0].n[VZ]*v->n[VZ]; r->n[VY] = a->v[1].n[VX]*v->n[VX] + a->v[1].n[VY]*v->n[VY] + a->v[1].n[VZ]*v->n[VZ]; r->n[VZ] = a->v[2].n[VX]*v->n[VX] + a->v[2].n[VY]*v->n[VY] + a->v[2].n[VZ]*v->n[VZ]; } lcms2-2.12rc1/src/cmsnamed.c0000644000175000017500000007036513775114656014652 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Multilocalized unicode objects. That is an attempt to encapsulate i18n. // Allocates an empty multi localizad unicode object cmsMLU* CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems) { cmsMLU* mlu; // nItems should be positive if given if (nItems <= 0) nItems = 2; // Create the container mlu = (cmsMLU*) _cmsMallocZero(ContextID, sizeof(cmsMLU)); if (mlu == NULL) return NULL; mlu ->ContextID = ContextID; // Create entry array mlu ->Entries = (_cmsMLUentry*) _cmsCalloc(ContextID, nItems, sizeof(_cmsMLUentry)); if (mlu ->Entries == NULL) { _cmsFree(ContextID, mlu); return NULL; } // Ok, keep indexes up to date mlu ->AllocatedEntries = nItems; mlu ->UsedEntries = 0; return mlu; } // Grows a mempool table for a MLU. Each time this function is called, mempool size is multiplied times two. static cmsBool GrowMLUpool(cmsMLU* mlu) { cmsUInt32Number size; void *NewPtr; // Sanity check if (mlu == NULL) return FALSE; if (mlu ->PoolSize == 0) size = 256; else size = mlu ->PoolSize * 2; // Check for overflow if (size < mlu ->PoolSize) return FALSE; // Reallocate the pool NewPtr = _cmsRealloc(mlu ->ContextID, mlu ->MemPool, size); if (NewPtr == NULL) return FALSE; mlu ->MemPool = NewPtr; mlu ->PoolSize = size; return TRUE; } // Grows a entry table for a MLU. Each time this function is called, table size is multiplied times two. static cmsBool GrowMLUtable(cmsMLU* mlu) { cmsUInt32Number AllocatedEntries; _cmsMLUentry *NewPtr; // Sanity check if (mlu == NULL) return FALSE; AllocatedEntries = mlu ->AllocatedEntries * 2; // Check for overflow if (AllocatedEntries / 2 != mlu ->AllocatedEntries) return FALSE; // Reallocate the memory NewPtr = (_cmsMLUentry*)_cmsRealloc(mlu ->ContextID, mlu ->Entries, AllocatedEntries*sizeof(_cmsMLUentry)); if (NewPtr == NULL) return FALSE; mlu ->Entries = NewPtr; mlu ->AllocatedEntries = AllocatedEntries; return TRUE; } // Search for a specific entry in the structure. Language and Country are used. static int SearchMLUEntry(cmsMLU* mlu, cmsUInt16Number LanguageCode, cmsUInt16Number CountryCode) { cmsUInt32Number i; // Sanity check if (mlu == NULL) return -1; // Iterate whole table for (i=0; i < mlu ->UsedEntries; i++) { if (mlu ->Entries[i].Country == CountryCode && mlu ->Entries[i].Language == LanguageCode) return (int) i; } // Not found return -1; } // Add a block of characters to the intended MLU. Language and country are specified. // Only one entry for Language/country pair is allowed. static cmsBool AddMLUBlock(cmsMLU* mlu, cmsUInt32Number size, const wchar_t *Block, cmsUInt16Number LanguageCode, cmsUInt16Number CountryCode) { cmsUInt32Number Offset; cmsUInt8Number* Ptr; // Sanity check if (mlu == NULL) return FALSE; // Is there any room available? if (mlu ->UsedEntries >= mlu ->AllocatedEntries) { if (!GrowMLUtable(mlu)) return FALSE; } // Only one ASCII string if (SearchMLUEntry(mlu, LanguageCode, CountryCode) >= 0) return FALSE; // Only one is allowed! // Check for size while ((mlu ->PoolSize - mlu ->PoolUsed) < size) { if (!GrowMLUpool(mlu)) return FALSE; } Offset = mlu ->PoolUsed; Ptr = (cmsUInt8Number*) mlu ->MemPool; if (Ptr == NULL) return FALSE; // Set the entry memmove(Ptr + Offset, Block, size); mlu ->PoolUsed += size; mlu ->Entries[mlu ->UsedEntries].StrW = Offset; mlu ->Entries[mlu ->UsedEntries].Len = size; mlu ->Entries[mlu ->UsedEntries].Country = CountryCode; mlu ->Entries[mlu ->UsedEntries].Language = LanguageCode; mlu ->UsedEntries++; return TRUE; } // Convert from a 3-char code to a cmsUInt16Number. It is done in this way because some // compilers don't properly align beginning of strings static cmsUInt16Number strTo16(const char str[3]) { const cmsUInt8Number* ptr8 = (const cmsUInt8Number*)str; cmsUInt16Number n = (cmsUInt16Number)(((cmsUInt16Number)ptr8[0] << 8) | ptr8[1]); return n; } static void strFrom16(char str[3], cmsUInt16Number n) { str[0] = (char)(n >> 8); str[1] = (char)n; str[2] = (char)0; } // Add an ASCII entry. Do not add any \0 termination (ICC1v43_2010-12.pdf page 61) // In the case the user explicitely sets an empty string, we force a \0 cmsBool CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], const char* ASCIIString) { cmsUInt32Number i, len = (cmsUInt32Number) strlen(ASCIIString); wchar_t* WStr; cmsBool rc; cmsUInt16Number Lang = strTo16(LanguageCode); cmsUInt16Number Cntry = strTo16(CountryCode); if (mlu == NULL) return FALSE; // len == 0 would prevent operation, so we set a empty string pointing to zero if (len == 0) { len = 1; } WStr = (wchar_t*) _cmsCalloc(mlu ->ContextID, len, sizeof(wchar_t)); if (WStr == NULL) return FALSE; for (i=0; i < len; i++) WStr[i] = (wchar_t) ASCIIString[i]; rc = AddMLUBlock(mlu, len * sizeof(wchar_t), WStr, Lang, Cntry); _cmsFree(mlu ->ContextID, WStr); return rc; } // We don't need any wcs support library static cmsUInt32Number mywcslen(const wchar_t *s) { const wchar_t *p; p = s; while (*p) p++; return (cmsUInt32Number)(p - s); } // Add a wide entry. Do not add any \0 terminator (ICC1v43_2010-12.pdf page 61) cmsBool CMSEXPORT cmsMLUsetWide(cmsMLU* mlu, const char Language[3], const char Country[3], const wchar_t* WideString) { cmsUInt16Number Lang = strTo16(Language); cmsUInt16Number Cntry = strTo16(Country); cmsUInt32Number len; if (mlu == NULL) return FALSE; if (WideString == NULL) return FALSE; len = (cmsUInt32Number) (mywcslen(WideString)) * sizeof(wchar_t); if (len == 0) len = sizeof(wchar_t); return AddMLUBlock(mlu, len, WideString, Lang, Cntry); } // Duplicating a MLU is as easy as copying all members cmsMLU* CMSEXPORT cmsMLUdup(const cmsMLU* mlu) { cmsMLU* NewMlu = NULL; // Duplicating a NULL obtains a NULL if (mlu == NULL) return NULL; NewMlu = cmsMLUalloc(mlu ->ContextID, mlu ->UsedEntries); if (NewMlu == NULL) return NULL; // Should never happen if (NewMlu ->AllocatedEntries < mlu ->UsedEntries) goto Error; // Sanitize... if (NewMlu ->Entries == NULL || mlu ->Entries == NULL) goto Error; memmove(NewMlu ->Entries, mlu ->Entries, mlu ->UsedEntries * sizeof(_cmsMLUentry)); NewMlu ->UsedEntries = mlu ->UsedEntries; // The MLU may be empty if (mlu ->PoolUsed == 0) { NewMlu ->MemPool = NULL; } else { // It is not empty NewMlu ->MemPool = _cmsMalloc(mlu ->ContextID, mlu ->PoolUsed); if (NewMlu ->MemPool == NULL) goto Error; } NewMlu ->PoolSize = mlu ->PoolUsed; if (NewMlu ->MemPool == NULL || mlu ->MemPool == NULL) goto Error; memmove(NewMlu ->MemPool, mlu->MemPool, mlu ->PoolUsed); NewMlu ->PoolUsed = mlu ->PoolUsed; return NewMlu; Error: if (NewMlu != NULL) cmsMLUfree(NewMlu); return NULL; } // Free any used memory void CMSEXPORT cmsMLUfree(cmsMLU* mlu) { if (mlu) { if (mlu -> Entries) _cmsFree(mlu ->ContextID, mlu->Entries); if (mlu -> MemPool) _cmsFree(mlu ->ContextID, mlu->MemPool); _cmsFree(mlu ->ContextID, mlu); } } // The algorithm first searches for an exact match of country and language, if not found it uses // the Language. If none is found, first entry is used instead. static const wchar_t* _cmsMLUgetWide(const cmsMLU* mlu, cmsUInt32Number *len, cmsUInt16Number LanguageCode, cmsUInt16Number CountryCode, cmsUInt16Number* UsedLanguageCode, cmsUInt16Number* UsedCountryCode) { cmsUInt32Number i; int Best = -1; _cmsMLUentry* v; if (mlu == NULL) return NULL; if (mlu -> AllocatedEntries <= 0) return NULL; for (i=0; i < mlu ->UsedEntries; i++) { v = mlu ->Entries + i; if (v -> Language == LanguageCode) { if (Best == -1) Best = (int) i; if (v -> Country == CountryCode) { if (UsedLanguageCode != NULL) *UsedLanguageCode = v ->Language; if (UsedCountryCode != NULL) *UsedCountryCode = v ->Country; if (len != NULL) *len = v ->Len; return (wchar_t*) ((cmsUInt8Number*) mlu ->MemPool + v -> StrW); // Found exact match } } } // No string found. Return First one if (Best == -1) Best = 0; v = mlu ->Entries + Best; if (UsedLanguageCode != NULL) *UsedLanguageCode = v ->Language; if (UsedCountryCode != NULL) *UsedCountryCode = v ->Country; if (len != NULL) *len = v ->Len; return(wchar_t*) ((cmsUInt8Number*) mlu ->MemPool + v ->StrW); } // Obtain an ASCII representation of the wide string. Setting buffer to NULL returns the len cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], char* Buffer, cmsUInt32Number BufferSize) { const wchar_t *Wide; cmsUInt32Number StrLen = 0; cmsUInt32Number ASCIIlen, i; cmsUInt16Number Lang = strTo16(LanguageCode); cmsUInt16Number Cntry = strTo16(CountryCode); // Sanitize if (mlu == NULL) return 0; // Get WideChar Wide = _cmsMLUgetWide(mlu, &StrLen, Lang, Cntry, NULL, NULL); if (Wide == NULL) return 0; ASCIIlen = StrLen / sizeof(wchar_t); // Maybe we want only to know the len? if (Buffer == NULL) return ASCIIlen + 1; // Note the zero at the end // No buffer size means no data if (BufferSize <= 0) return 0; // Some clipping may be required if (BufferSize < ASCIIlen + 1) ASCIIlen = BufferSize - 1; // Precess each character for (i=0; i < ASCIIlen; i++) { if (Wide[i] == 0) Buffer[i] = 0; else Buffer[i] = (char) Wide[i]; } // We put a termination "\0" Buffer[ASCIIlen] = 0; return ASCIIlen + 1; } // Obtain a wide representation of the MLU, on depending on current locale settings cmsUInt32Number CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], wchar_t* Buffer, cmsUInt32Number BufferSize) { const wchar_t *Wide; cmsUInt32Number StrLen = 0; cmsUInt16Number Lang = strTo16(LanguageCode); cmsUInt16Number Cntry = strTo16(CountryCode); // Sanitize if (mlu == NULL) return 0; Wide = _cmsMLUgetWide(mlu, &StrLen, Lang, Cntry, NULL, NULL); if (Wide == NULL) return 0; // Maybe we want only to know the len? if (Buffer == NULL) return StrLen + sizeof(wchar_t); // No buffer size means no data if (BufferSize <= 0) return 0; // Some clipping may be required if (BufferSize < StrLen + sizeof(wchar_t)) StrLen = BufferSize - + sizeof(wchar_t); memmove(Buffer, Wide, StrLen); Buffer[StrLen / sizeof(wchar_t)] = 0; return StrLen + sizeof(wchar_t); } // Get also the language and country CMSAPI cmsBool CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu, const char LanguageCode[3], const char CountryCode[3], char ObtainedLanguage[3], char ObtainedCountry[3]) { const wchar_t *Wide; cmsUInt16Number Lang = strTo16(LanguageCode); cmsUInt16Number Cntry = strTo16(CountryCode); cmsUInt16Number ObtLang, ObtCode; // Sanitize if (mlu == NULL) return FALSE; Wide = _cmsMLUgetWide(mlu, NULL, Lang, Cntry, &ObtLang, &ObtCode); if (Wide == NULL) return FALSE; // Get used language and code strFrom16(ObtainedLanguage, ObtLang); strFrom16(ObtainedCountry, ObtCode); return TRUE; } // Get the number of translations in the MLU object cmsUInt32Number CMSEXPORT cmsMLUtranslationsCount(const cmsMLU* mlu) { if (mlu == NULL) return 0; return mlu->UsedEntries; } // Get the language and country codes for a specific MLU index cmsBool CMSEXPORT cmsMLUtranslationsCodes(const cmsMLU* mlu, cmsUInt32Number idx, char LanguageCode[3], char CountryCode[3]) { _cmsMLUentry *entry; if (mlu == NULL) return FALSE; if (idx >= mlu->UsedEntries) return FALSE; entry = &mlu->Entries[idx]; strFrom16(LanguageCode, entry->Language); strFrom16(CountryCode, entry->Country); return TRUE; } // Named color lists -------------------------------------------------------------------------------------------- // Grow the list to keep at least NumElements static cmsBool GrowNamedColorList(cmsNAMEDCOLORLIST* v) { cmsUInt32Number size; _cmsNAMEDCOLOR * NewPtr; if (v == NULL) return FALSE; if (v ->Allocated == 0) size = 64; // Initial guess else size = v ->Allocated * 2; // Keep a maximum color lists can grow, 100K entries seems reasonable if (size > 1024 * 100) { _cmsFree(v->ContextID, (void*) v->List); v->List = NULL; return FALSE; } NewPtr = (_cmsNAMEDCOLOR*) _cmsRealloc(v ->ContextID, v ->List, size * sizeof(_cmsNAMEDCOLOR)); if (NewPtr == NULL) return FALSE; v ->List = NewPtr; v ->Allocated = size; return TRUE; } // Allocate a list for n elements cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID, cmsUInt32Number n, cmsUInt32Number ColorantCount, const char* Prefix, const char* Suffix) { cmsNAMEDCOLORLIST* v = (cmsNAMEDCOLORLIST*) _cmsMallocZero(ContextID, sizeof(cmsNAMEDCOLORLIST)); if (v == NULL) return NULL; v ->List = NULL; v ->nColors = 0; v ->ContextID = ContextID; while (v -> Allocated < n) { if (!GrowNamedColorList(v)) { cmsFreeNamedColorList(v); return NULL; } } strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)-1); strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)-1); v->Prefix[32] = v->Suffix[32] = 0; v -> ColorantCount = ColorantCount; return v; } // Free a list void CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v) { if (v == NULL) return; if (v ->List) _cmsFree(v ->ContextID, v ->List); _cmsFree(v ->ContextID, v); } cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v) { cmsNAMEDCOLORLIST* NewNC; if (v == NULL) return NULL; NewNC= cmsAllocNamedColorList(v ->ContextID, v -> nColors, v ->ColorantCount, v ->Prefix, v ->Suffix); if (NewNC == NULL) return NULL; // For really large tables we need this while (NewNC ->Allocated < v ->Allocated){ if (!GrowNamedColorList(NewNC)) { cmsFreeNamedColorList(NewNC); return NULL; } } memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix)); memmove(NewNC ->Suffix, v ->Suffix, sizeof(v ->Suffix)); NewNC ->ColorantCount = v ->ColorantCount; memmove(NewNC->List, v ->List, v->nColors * sizeof(_cmsNAMEDCOLOR)); NewNC ->nColors = v ->nColors; return NewNC; } // Append a color to a list. List pointer may change if reallocated cmsBool CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* NamedColorList, const char* Name, cmsUInt16Number PCS[3], cmsUInt16Number Colorant[cmsMAXCHANNELS]) { cmsUInt32Number i; if (NamedColorList == NULL) return FALSE; if (NamedColorList ->nColors + 1 > NamedColorList ->Allocated) { if (!GrowNamedColorList(NamedColorList)) return FALSE; } for (i=0; i < NamedColorList ->ColorantCount; i++) NamedColorList ->List[NamedColorList ->nColors].DeviceColorant[i] = Colorant == NULL ? (cmsUInt16Number)0 : Colorant[i]; for (i=0; i < 3; i++) NamedColorList ->List[NamedColorList ->nColors].PCS[i] = PCS == NULL ? (cmsUInt16Number) 0 : PCS[i]; if (Name != NULL) { strncpy(NamedColorList ->List[NamedColorList ->nColors].Name, Name, cmsMAX_PATH-1); NamedColorList ->List[NamedColorList ->nColors].Name[cmsMAX_PATH-1] = 0; } else NamedColorList ->List[NamedColorList ->nColors].Name[0] = 0; NamedColorList ->nColors++; return TRUE; } // Returns number of elements cmsUInt32Number CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* NamedColorList) { if (NamedColorList == NULL) return 0; return NamedColorList ->nColors; } // Info aboout a given color cmsBool CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor, char* Name, char* Prefix, char* Suffix, cmsUInt16Number* PCS, cmsUInt16Number* Colorant) { if (NamedColorList == NULL) return FALSE; if (nColor >= cmsNamedColorCount(NamedColorList)) return FALSE; // strcpy instead of strncpy because many apps are using small buffers if (Name) strcpy(Name, NamedColorList->List[nColor].Name); if (Prefix) strcpy(Prefix, NamedColorList->Prefix); if (Suffix) strcpy(Suffix, NamedColorList->Suffix); if (PCS) memmove(PCS, NamedColorList ->List[nColor].PCS, 3*sizeof(cmsUInt16Number)); if (Colorant) memmove(Colorant, NamedColorList ->List[nColor].DeviceColorant, sizeof(cmsUInt16Number) * NamedColorList ->ColorantCount); return TRUE; } // Search for a given color name (no prefix or suffix) cmsInt32Number CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* NamedColorList, const char* Name) { cmsUInt32Number i; cmsUInt32Number n; if (NamedColorList == NULL) return -1; n = cmsNamedColorCount(NamedColorList); for (i=0; i < n; i++) { if (cmsstrcasecmp(Name, NamedColorList->List[i].Name) == 0) return (cmsInt32Number) i; } return -1; } // MPE support ----------------------------------------------------------------------------------------------------------------- static void FreeNamedColorList(cmsStage* mpe) { cmsNAMEDCOLORLIST* List = (cmsNAMEDCOLORLIST*) mpe ->Data; cmsFreeNamedColorList(List); } static void* DupNamedColorList(cmsStage* mpe) { cmsNAMEDCOLORLIST* List = (cmsNAMEDCOLORLIST*) mpe ->Data; return cmsDupNamedColorList(List); } static void EvalNamedColorPCS(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) mpe ->Data; cmsUInt16Number index = (cmsUInt16Number) _cmsQuickSaturateWord(In[0] * 65535.0); if (index >= NamedColorList-> nColors) { cmsSignalError(NamedColorList ->ContextID, cmsERROR_RANGE, "Color %d out of range", index); Out[0] = Out[1] = Out[2] = 0.0f; } else { // Named color always uses Lab Out[0] = (cmsFloat32Number) (NamedColorList->List[index].PCS[0] / 65535.0); Out[1] = (cmsFloat32Number) (NamedColorList->List[index].PCS[1] / 65535.0); Out[2] = (cmsFloat32Number) (NamedColorList->List[index].PCS[2] / 65535.0); } } static void EvalNamedColor(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe) { cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) mpe ->Data; cmsUInt16Number index = (cmsUInt16Number) _cmsQuickSaturateWord(In[0] * 65535.0); cmsUInt32Number j; if (index >= NamedColorList-> nColors) { cmsSignalError(NamedColorList ->ContextID, cmsERROR_RANGE, "Color %d out of range", index); for (j = 0; j < NamedColorList->ColorantCount; j++) Out[j] = 0.0f; } else { for (j=0; j < NamedColorList ->ColorantCount; j++) Out[j] = (cmsFloat32Number) (NamedColorList->List[index].DeviceColorant[j] / 65535.0); } } // Named color lookup element cmsStage* CMSEXPORT _cmsStageAllocNamedColor(cmsNAMEDCOLORLIST* NamedColorList, cmsBool UsePCS) { return _cmsStageAllocPlaceholder(NamedColorList ->ContextID, cmsSigNamedColorElemType, 1, UsePCS ? 3 : NamedColorList ->ColorantCount, UsePCS ? EvalNamedColorPCS : EvalNamedColor, DupNamedColorList, FreeNamedColorList, cmsDupNamedColorList(NamedColorList)); } // Retrieve the named color list from a transform. Should be first element in the LUT cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform) { _cmsTRANSFORM* v = (_cmsTRANSFORM*) xform; cmsStage* mpe = v ->Lut->Elements; if (mpe ->Type != cmsSigNamedColorElemType) return NULL; return (cmsNAMEDCOLORLIST*) mpe ->Data; } // Profile sequence description routines ------------------------------------------------------------------------------------- cmsSEQ* CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n) { cmsSEQ* Seq; cmsUInt32Number i; if (n == 0) return NULL; // In a absolutely arbitrary way, I hereby decide to allow a maxim of 255 profiles linked // in a devicelink. It makes not sense anyway and may be used for exploits, so let's close the door! if (n > 255) return NULL; Seq = (cmsSEQ*) _cmsMallocZero(ContextID, sizeof(cmsSEQ)); if (Seq == NULL) return NULL; Seq -> ContextID = ContextID; Seq -> seq = (cmsPSEQDESC*) _cmsCalloc(ContextID, n, sizeof(cmsPSEQDESC)); Seq -> n = n; if (Seq -> seq == NULL) { _cmsFree(ContextID, Seq); return NULL; } for (i=0; i < n; i++) { Seq -> seq[i].Manufacturer = NULL; Seq -> seq[i].Model = NULL; Seq -> seq[i].Description = NULL; } return Seq; } void CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq) { cmsUInt32Number i; for (i=0; i < pseq ->n; i++) { if (pseq ->seq[i].Manufacturer != NULL) cmsMLUfree(pseq ->seq[i].Manufacturer); if (pseq ->seq[i].Model != NULL) cmsMLUfree(pseq ->seq[i].Model); if (pseq ->seq[i].Description != NULL) cmsMLUfree(pseq ->seq[i].Description); } if (pseq ->seq != NULL) _cmsFree(pseq ->ContextID, pseq ->seq); _cmsFree(pseq -> ContextID, pseq); } cmsSEQ* CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq) { cmsSEQ *NewSeq; cmsUInt32Number i; if (pseq == NULL) return NULL; NewSeq = (cmsSEQ*) _cmsMalloc(pseq -> ContextID, sizeof(cmsSEQ)); if (NewSeq == NULL) return NULL; NewSeq -> seq = (cmsPSEQDESC*) _cmsCalloc(pseq ->ContextID, pseq ->n, sizeof(cmsPSEQDESC)); if (NewSeq ->seq == NULL) goto Error; NewSeq -> ContextID = pseq ->ContextID; NewSeq -> n = pseq ->n; for (i=0; i < pseq->n; i++) { memmove(&NewSeq ->seq[i].attributes, &pseq ->seq[i].attributes, sizeof(cmsUInt64Number)); NewSeq ->seq[i].deviceMfg = pseq ->seq[i].deviceMfg; NewSeq ->seq[i].deviceModel = pseq ->seq[i].deviceModel; memmove(&NewSeq ->seq[i].ProfileID, &pseq ->seq[i].ProfileID, sizeof(cmsProfileID)); NewSeq ->seq[i].technology = pseq ->seq[i].technology; NewSeq ->seq[i].Manufacturer = cmsMLUdup(pseq ->seq[i].Manufacturer); NewSeq ->seq[i].Model = cmsMLUdup(pseq ->seq[i].Model); NewSeq ->seq[i].Description = cmsMLUdup(pseq ->seq[i].Description); } return NewSeq; Error: cmsFreeProfileSequenceDescription(NewSeq); return NULL; } // Dictionaries -------------------------------------------------------------------------------------------------------- // Dictionaries are just very simple linked lists typedef struct _cmsDICT_struct { cmsDICTentry* head; cmsContext ContextID; } _cmsDICT; // Allocate an empty dictionary cmsHANDLE CMSEXPORT cmsDictAlloc(cmsContext ContextID) { _cmsDICT* dict = (_cmsDICT*) _cmsMallocZero(ContextID, sizeof(_cmsDICT)); if (dict == NULL) return NULL; dict ->ContextID = ContextID; return (cmsHANDLE) dict; } // Dispose resources void CMSEXPORT cmsDictFree(cmsHANDLE hDict) { _cmsDICT* dict = (_cmsDICT*) hDict; cmsDICTentry *entry, *next; _cmsAssert(dict != NULL); // Walk the list freeing all nodes entry = dict ->head; while (entry != NULL) { if (entry ->DisplayName != NULL) cmsMLUfree(entry ->DisplayName); if (entry ->DisplayValue != NULL) cmsMLUfree(entry ->DisplayValue); if (entry ->Name != NULL) _cmsFree(dict ->ContextID, entry -> Name); if (entry ->Value != NULL) _cmsFree(dict ->ContextID, entry -> Value); // Don't fall in the habitual trap... next = entry ->Next; _cmsFree(dict ->ContextID, entry); entry = next; } _cmsFree(dict ->ContextID, dict); } // Duplicate a wide char string static wchar_t* DupWcs(cmsContext ContextID, const wchar_t* ptr) { if (ptr == NULL) return NULL; return (wchar_t*) _cmsDupMem(ContextID, ptr, (mywcslen(ptr) + 1) * sizeof(wchar_t)); } // Add a new entry to the linked list cmsBool CMSEXPORT cmsDictAddEntry(cmsHANDLE hDict, const wchar_t* Name, const wchar_t* Value, const cmsMLU *DisplayName, const cmsMLU *DisplayValue) { _cmsDICT* dict = (_cmsDICT*) hDict; cmsDICTentry *entry; _cmsAssert(dict != NULL); _cmsAssert(Name != NULL); entry = (cmsDICTentry*) _cmsMallocZero(dict ->ContextID, sizeof(cmsDICTentry)); if (entry == NULL) return FALSE; entry ->DisplayName = cmsMLUdup(DisplayName); entry ->DisplayValue = cmsMLUdup(DisplayValue); entry ->Name = DupWcs(dict ->ContextID, Name); entry ->Value = DupWcs(dict ->ContextID, Value); entry ->Next = dict ->head; dict ->head = entry; return TRUE; } // Duplicates an existing dictionary cmsHANDLE CMSEXPORT cmsDictDup(cmsHANDLE hDict) { _cmsDICT* old_dict = (_cmsDICT*) hDict; cmsHANDLE hNew; cmsDICTentry *entry; _cmsAssert(old_dict != NULL); hNew = cmsDictAlloc(old_dict ->ContextID); if (hNew == NULL) return NULL; // Walk the list freeing all nodes entry = old_dict ->head; while (entry != NULL) { if (!cmsDictAddEntry(hNew, entry ->Name, entry ->Value, entry ->DisplayName, entry ->DisplayValue)) { cmsDictFree(hNew); return NULL; } entry = entry -> Next; } return hNew; } // Get a pointer to the linked list const cmsDICTentry* CMSEXPORT cmsDictGetEntryList(cmsHANDLE hDict) { _cmsDICT* dict = (_cmsDICT*) hDict; if (dict == NULL) return NULL; return dict ->head; } // Helper For external languages const cmsDICTentry* CMSEXPORT cmsDictNextEntry(const cmsDICTentry* e) { if (e == NULL) return NULL; return e ->Next; } lcms2-2.12rc1/src/cmscam02.c0000644000175000017500000003320113775114656014454 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // CIECAM 02 appearance model. Many thanks to Jordi Vilar for the debugging. // ---------- Implementation -------------------------------------------- typedef struct { cmsFloat64Number XYZ[3]; cmsFloat64Number RGB[3]; cmsFloat64Number RGBc[3]; cmsFloat64Number RGBp[3]; cmsFloat64Number RGBpa[3]; cmsFloat64Number a, b, h, e, H, A, J, Q, s, t, C, M; cmsFloat64Number abC[2]; cmsFloat64Number abs[2]; cmsFloat64Number abM[2]; } CAM02COLOR; typedef struct { CAM02COLOR adoptedWhite; cmsFloat64Number LA, Yb; cmsFloat64Number F, c, Nc; cmsUInt32Number surround; cmsFloat64Number n, Nbb, Ncb, z, FL, D; cmsContext ContextID; } cmsCIECAM02; static cmsFloat64Number compute_n(cmsCIECAM02* pMod) { return (pMod -> Yb / pMod -> adoptedWhite.XYZ[1]); } static cmsFloat64Number compute_z(cmsCIECAM02* pMod) { return (1.48 + pow(pMod -> n, 0.5)); } static cmsFloat64Number computeNbb(cmsCIECAM02* pMod) { return (0.725 * pow((1.0 / pMod -> n), 0.2)); } static cmsFloat64Number computeFL(cmsCIECAM02* pMod) { cmsFloat64Number k, FL; k = 1.0 / ((5.0 * pMod->LA) + 1.0); FL = 0.2 * pow(k, 4.0) * (5.0 * pMod->LA) + 0.1 * (pow((1.0 - pow(k, 4.0)), 2.0)) * (pow((5.0 * pMod->LA), (1.0 / 3.0))); return FL; } static cmsFloat64Number computeD(cmsCIECAM02* pMod) { cmsFloat64Number D; D = pMod->F - (1.0/3.6)*(exp(((-pMod ->LA-42) / 92.0))); return D; } static CAM02COLOR XYZtoCAT02(CAM02COLOR clr) { clr.RGB[0] = (clr.XYZ[0] * 0.7328) + (clr.XYZ[1] * 0.4296) + (clr.XYZ[2] * -0.1624); clr.RGB[1] = (clr.XYZ[0] * -0.7036) + (clr.XYZ[1] * 1.6975) + (clr.XYZ[2] * 0.0061); clr.RGB[2] = (clr.XYZ[0] * 0.0030) + (clr.XYZ[1] * 0.0136) + (clr.XYZ[2] * 0.9834); return clr; } static CAM02COLOR ChromaticAdaptation(CAM02COLOR clr, cmsCIECAM02* pMod) { cmsUInt32Number i; for (i = 0; i < 3; i++) { clr.RGBc[i] = ((pMod -> adoptedWhite.XYZ[1] * (pMod->D / pMod -> adoptedWhite.RGB[i])) + (1.0 - pMod->D)) * clr.RGB[i]; } return clr; } static CAM02COLOR CAT02toHPE(CAM02COLOR clr) { cmsFloat64Number M[9]; M[0] =(( 0.38971 * 1.096124) + (0.68898 * 0.454369) + (-0.07868 * -0.009628)); M[1] =(( 0.38971 * -0.278869) + (0.68898 * 0.473533) + (-0.07868 * -0.005698)); M[2] =(( 0.38971 * 0.182745) + (0.68898 * 0.072098) + (-0.07868 * 1.015326)); M[3] =((-0.22981 * 1.096124) + (1.18340 * 0.454369) + ( 0.04641 * -0.009628)); M[4] =((-0.22981 * -0.278869) + (1.18340 * 0.473533) + ( 0.04641 * -0.005698)); M[5] =((-0.22981 * 0.182745) + (1.18340 * 0.072098) + ( 0.04641 * 1.015326)); M[6] =(-0.009628); M[7] =(-0.005698); M[8] =( 1.015326); clr.RGBp[0] = (clr.RGBc[0] * M[0]) + (clr.RGBc[1] * M[1]) + (clr.RGBc[2] * M[2]); clr.RGBp[1] = (clr.RGBc[0] * M[3]) + (clr.RGBc[1] * M[4]) + (clr.RGBc[2] * M[5]); clr.RGBp[2] = (clr.RGBc[0] * M[6]) + (clr.RGBc[1] * M[7]) + (clr.RGBc[2] * M[8]); return clr; } static CAM02COLOR NonlinearCompression(CAM02COLOR clr, cmsCIECAM02* pMod) { cmsUInt32Number i; cmsFloat64Number temp; for (i = 0; i < 3; i++) { if (clr.RGBp[i] < 0) { temp = pow((-1.0 * pMod->FL * clr.RGBp[i] / 100.0), 0.42); clr.RGBpa[i] = (-1.0 * 400.0 * temp) / (temp + 27.13) + 0.1; } else { temp = pow((pMod->FL * clr.RGBp[i] / 100.0), 0.42); clr.RGBpa[i] = (400.0 * temp) / (temp + 27.13) + 0.1; } } clr.A = (((2.0 * clr.RGBpa[0]) + clr.RGBpa[1] + (clr.RGBpa[2] / 20.0)) - 0.305) * pMod->Nbb; return clr; } static CAM02COLOR ComputeCorrelates(CAM02COLOR clr, cmsCIECAM02* pMod) { cmsFloat64Number a, b, temp, e, t, r2d, d2r; a = clr.RGBpa[0] - (12.0 * clr.RGBpa[1] / 11.0) + (clr.RGBpa[2] / 11.0); b = (clr.RGBpa[0] + clr.RGBpa[1] - (2.0 * clr.RGBpa[2])) / 9.0; r2d = (180.0 / 3.141592654); if (a == 0) { if (b == 0) clr.h = 0; else if (b > 0) clr.h = 90; else clr.h = 270; } else if (a > 0) { temp = b / a; if (b > 0) clr.h = (r2d * atan(temp)); else if (b == 0) clr.h = 0; else clr.h = (r2d * atan(temp)) + 360; } else { temp = b / a; clr.h = (r2d * atan(temp)) + 180; } d2r = (3.141592654 / 180.0); e = ((12500.0 / 13.0) * pMod->Nc * pMod->Ncb) * (cos((clr.h * d2r + 2.0)) + 3.8); if (clr.h < 20.14) { temp = ((clr.h + 122.47)/1.2) + ((20.14 - clr.h)/0.8); clr.H = 300 + (100*((clr.h + 122.47)/1.2)) / temp; } else if (clr.h < 90.0) { temp = ((clr.h - 20.14)/0.8) + ((90.00 - clr.h)/0.7); clr.H = (100*((clr.h - 20.14)/0.8)) / temp; } else if (clr.h < 164.25) { temp = ((clr.h - 90.00)/0.7) + ((164.25 - clr.h)/1.0); clr.H = 100 + ((100*((clr.h - 90.00)/0.7)) / temp); } else if (clr.h < 237.53) { temp = ((clr.h - 164.25)/1.0) + ((237.53 - clr.h)/1.2); clr.H = 200 + ((100*((clr.h - 164.25)/1.0)) / temp); } else { temp = ((clr.h - 237.53)/1.2) + ((360 - clr.h + 20.14)/0.8); clr.H = 300 + ((100*((clr.h - 237.53)/1.2)) / temp); } clr.J = 100.0 * pow((clr.A / pMod->adoptedWhite.A), (pMod->c * pMod->z)); clr.Q = (4.0 / pMod->c) * pow((clr.J / 100.0), 0.5) * (pMod->adoptedWhite.A + 4.0) * pow(pMod->FL, 0.25); t = (e * pow(((a * a) + (b * b)), 0.5)) / (clr.RGBpa[0] + clr.RGBpa[1] + ((21.0 / 20.0) * clr.RGBpa[2])); clr.C = pow(t, 0.9) * pow((clr.J / 100.0), 0.5) * pow((1.64 - pow(0.29, pMod->n)), 0.73); clr.M = clr.C * pow(pMod->FL, 0.25); clr.s = 100.0 * pow((clr.M / clr.Q), 0.5); return clr; } static CAM02COLOR InverseCorrelates(CAM02COLOR clr, cmsCIECAM02* pMod) { cmsFloat64Number t, e, p1, p2, p3, p4, p5, hr, d2r; d2r = 3.141592654 / 180.0; t = pow( (clr.C / (pow((clr.J / 100.0), 0.5) * (pow((1.64 - pow(0.29, pMod->n)), 0.73)))), (1.0 / 0.9) ); e = ((12500.0 / 13.0) * pMod->Nc * pMod->Ncb) * (cos((clr.h * d2r + 2.0)) + 3.8); clr.A = pMod->adoptedWhite.A * pow( (clr.J / 100.0), (1.0 / (pMod->c * pMod->z))); p1 = e / t; p2 = (clr.A / pMod->Nbb) + 0.305; p3 = 21.0 / 20.0; hr = clr.h * d2r; if (fabs(sin(hr)) >= fabs(cos(hr))) { p4 = p1 / sin(hr); clr.b = (p2 * (2.0 + p3) * (460.0 / 1403.0)) / (p4 + (2.0 + p3) * (220.0 / 1403.0) * (cos(hr) / sin(hr)) - (27.0 / 1403.0) + p3 * (6300.0 / 1403.0)); clr.a = clr.b * (cos(hr) / sin(hr)); } else { p5 = p1 / cos(hr); clr.a = (p2 * (2.0 + p3) * (460.0 / 1403.0)) / (p5 + (2.0 + p3) * (220.0 / 1403.0) - ((27.0 / 1403.0) - p3 * (6300.0 / 1403.0)) * (sin(hr) / cos(hr))); clr.b = clr.a * (sin(hr) / cos(hr)); } clr.RGBpa[0] = ((460.0 / 1403.0) * p2) + ((451.0 / 1403.0) * clr.a) + ((288.0 / 1403.0) * clr.b); clr.RGBpa[1] = ((460.0 / 1403.0) * p2) - ((891.0 / 1403.0) * clr.a) - ((261.0 / 1403.0) * clr.b); clr.RGBpa[2] = ((460.0 / 1403.0) * p2) - ((220.0 / 1403.0) * clr.a) - ((6300.0 / 1403.0) * clr.b); return clr; } static CAM02COLOR InverseNonlinearity(CAM02COLOR clr, cmsCIECAM02* pMod) { cmsUInt32Number i; cmsFloat64Number c1; for (i = 0; i < 3; i++) { if ((clr.RGBpa[i] - 0.1) < 0) c1 = -1; else c1 = 1; clr.RGBp[i] = c1 * (100.0 / pMod->FL) * pow(((27.13 * fabs(clr.RGBpa[i] - 0.1)) / (400.0 - fabs(clr.RGBpa[i] - 0.1))), (1.0 / 0.42)); } return clr; } static CAM02COLOR HPEtoCAT02(CAM02COLOR clr) { cmsFloat64Number M[9]; M[0] = (( 0.7328 * 1.910197) + (0.4296 * 0.370950)); M[1] = (( 0.7328 * -1.112124) + (0.4296 * 0.629054)); M[2] = (( 0.7328 * 0.201908) + (0.4296 * 0.000008) - 0.1624); M[3] = ((-0.7036 * 1.910197) + (1.6975 * 0.370950)); M[4] = ((-0.7036 * -1.112124) + (1.6975 * 0.629054)); M[5] = ((-0.7036 * 0.201908) + (1.6975 * 0.000008) + 0.0061); M[6] = (( 0.0030 * 1.910197) + (0.0136 * 0.370950)); M[7] = (( 0.0030 * -1.112124) + (0.0136 * 0.629054)); M[8] = (( 0.0030 * 0.201908) + (0.0136 * 0.000008) + 0.9834);; clr.RGBc[0] = (clr.RGBp[0] * M[0]) + (clr.RGBp[1] * M[1]) + (clr.RGBp[2] * M[2]); clr.RGBc[1] = (clr.RGBp[0] * M[3]) + (clr.RGBp[1] * M[4]) + (clr.RGBp[2] * M[5]); clr.RGBc[2] = (clr.RGBp[0] * M[6]) + (clr.RGBp[1] * M[7]) + (clr.RGBp[2] * M[8]); return clr; } static CAM02COLOR InverseChromaticAdaptation(CAM02COLOR clr, cmsCIECAM02* pMod) { cmsUInt32Number i; for (i = 0; i < 3; i++) { clr.RGB[i] = clr.RGBc[i] / ((pMod->adoptedWhite.XYZ[1] * pMod->D / pMod->adoptedWhite.RGB[i]) + 1.0 - pMod->D); } return clr; } static CAM02COLOR CAT02toXYZ(CAM02COLOR clr) { clr.XYZ[0] = (clr.RGB[0] * 1.096124) + (clr.RGB[1] * -0.278869) + (clr.RGB[2] * 0.182745); clr.XYZ[1] = (clr.RGB[0] * 0.454369) + (clr.RGB[1] * 0.473533) + (clr.RGB[2] * 0.072098); clr.XYZ[2] = (clr.RGB[0] * -0.009628) + (clr.RGB[1] * -0.005698) + (clr.RGB[2] * 1.015326); return clr; } cmsHANDLE CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC) { cmsCIECAM02* lpMod; _cmsAssert(pVC != NULL); if((lpMod = (cmsCIECAM02*) _cmsMallocZero(ContextID, sizeof(cmsCIECAM02))) == NULL) { return NULL; } lpMod ->ContextID = ContextID; lpMod ->adoptedWhite.XYZ[0] = pVC ->whitePoint.X; lpMod ->adoptedWhite.XYZ[1] = pVC ->whitePoint.Y; lpMod ->adoptedWhite.XYZ[2] = pVC ->whitePoint.Z; lpMod -> LA = pVC ->La; lpMod -> Yb = pVC ->Yb; lpMod -> D = pVC ->D_value; lpMod -> surround = pVC ->surround; switch (lpMod -> surround) { case CUTSHEET_SURROUND: lpMod->F = 0.8; lpMod->c = 0.41; lpMod->Nc = 0.8; break; case DARK_SURROUND: lpMod -> F = 0.8; lpMod -> c = 0.525; lpMod -> Nc = 0.8; break; case DIM_SURROUND: lpMod -> F = 0.9; lpMod -> c = 0.59; lpMod -> Nc = 0.95; break; default: // Average surround lpMod -> F = 1.0; lpMod -> c = 0.69; lpMod -> Nc = 1.0; } lpMod -> n = compute_n(lpMod); lpMod -> z = compute_z(lpMod); lpMod -> Nbb = computeNbb(lpMod); lpMod -> FL = computeFL(lpMod); if (lpMod -> D == D_CALCULATE) { lpMod -> D = computeD(lpMod); } lpMod -> Ncb = lpMod -> Nbb; lpMod -> adoptedWhite = XYZtoCAT02(lpMod -> adoptedWhite); lpMod -> adoptedWhite = ChromaticAdaptation(lpMod -> adoptedWhite, lpMod); lpMod -> adoptedWhite = CAT02toHPE(lpMod -> adoptedWhite); lpMod -> adoptedWhite = NonlinearCompression(lpMod -> adoptedWhite, lpMod); return (cmsHANDLE) lpMod; } void CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel) { cmsCIECAM02* lpMod = (cmsCIECAM02*) hModel; if (lpMod) _cmsFree(lpMod ->ContextID, lpMod); } void CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut) { CAM02COLOR clr; cmsCIECAM02* lpMod = (cmsCIECAM02*) hModel; _cmsAssert(lpMod != NULL); _cmsAssert(pIn != NULL); _cmsAssert(pOut != NULL); memset(&clr, 0, sizeof(clr)); clr.XYZ[0] = pIn ->X; clr.XYZ[1] = pIn ->Y; clr.XYZ[2] = pIn ->Z; clr = XYZtoCAT02(clr); clr = ChromaticAdaptation(clr, lpMod); clr = CAT02toHPE(clr); clr = NonlinearCompression(clr, lpMod); clr = ComputeCorrelates(clr, lpMod); pOut ->J = clr.J; pOut ->C = clr.C; pOut ->h = clr.h; } void CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn, cmsCIEXYZ* pOut) { CAM02COLOR clr; cmsCIECAM02* lpMod = (cmsCIECAM02*) hModel; _cmsAssert(lpMod != NULL); _cmsAssert(pIn != NULL); _cmsAssert(pOut != NULL); memset(&clr, 0, sizeof(clr)); clr.J = pIn -> J; clr.C = pIn -> C; clr.h = pIn -> h; clr = InverseCorrelates(clr, lpMod); clr = InverseNonlinearity(clr, lpMod); clr = HPEtoCAT02(clr); clr = InverseChromaticAdaptation(clr, lpMod); clr = CAT02toXYZ(clr); pOut ->X = clr.XYZ[0]; pOut ->Y = clr.XYZ[1]; pOut ->Z = clr.XYZ[2]; } lcms2-2.12rc1/src/cmscnvrt.c0000644000175000017500000012532513775114656014717 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // This is the default routine for ICC-style intents. A user may decide to override it by using a plugin. // Supported intents are perceptual, relative colorimetric, saturation and ICC-absolute colorimetric static cmsPipeline* DefaultICCintents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number Intents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); //--------------------------------------------------------------------------------- // This is the entry for black-preserving K-only intents, which are non-ICC. Last profile have to be a output profile // to do the trick (no devicelinks allowed at that position) static cmsPipeline* BlackPreservingKOnlyIntents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number Intents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); //--------------------------------------------------------------------------------- // This is the entry for black-plane preserving, which are non-ICC. Again, Last profile have to be a output profile // to do the trick (no devicelinks allowed at that position) static cmsPipeline* BlackPreservingKPlaneIntents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number Intents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); //--------------------------------------------------------------------------------- // This is a structure holding implementations for all supported intents. typedef struct _cms_intents_list { cmsUInt32Number Intent; char Description[256]; cmsIntentFn Link; struct _cms_intents_list* Next; } cmsIntentsList; // Built-in intents static cmsIntentsList DefaultIntents[] = { { INTENT_PERCEPTUAL, "Perceptual", DefaultICCintents, &DefaultIntents[1] }, { INTENT_RELATIVE_COLORIMETRIC, "Relative colorimetric", DefaultICCintents, &DefaultIntents[2] }, { INTENT_SATURATION, "Saturation", DefaultICCintents, &DefaultIntents[3] }, { INTENT_ABSOLUTE_COLORIMETRIC, "Absolute colorimetric", DefaultICCintents, &DefaultIntents[4] }, { INTENT_PRESERVE_K_ONLY_PERCEPTUAL, "Perceptual preserving black ink", BlackPreservingKOnlyIntents, &DefaultIntents[5] }, { INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC, "Relative colorimetric preserving black ink", BlackPreservingKOnlyIntents, &DefaultIntents[6] }, { INTENT_PRESERVE_K_ONLY_SATURATION, "Saturation preserving black ink", BlackPreservingKOnlyIntents, &DefaultIntents[7] }, { INTENT_PRESERVE_K_PLANE_PERCEPTUAL, "Perceptual preserving black plane", BlackPreservingKPlaneIntents, &DefaultIntents[8] }, { INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC,"Relative colorimetric preserving black plane", BlackPreservingKPlaneIntents, &DefaultIntents[9] }, { INTENT_PRESERVE_K_PLANE_SATURATION, "Saturation preserving black plane", BlackPreservingKPlaneIntents, NULL } }; // A pointer to the beginning of the list _cmsIntentsPluginChunkType _cmsIntentsPluginChunk = { NULL }; // Duplicates the zone of memory used by the plug-in in the new context static void DupPluginIntentsList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsIntentsPluginChunkType newHead = { NULL }; cmsIntentsList* entry; cmsIntentsList* Anterior = NULL; _cmsIntentsPluginChunkType* head = (_cmsIntentsPluginChunkType*) src->chunks[IntentPlugin]; // Walk the list copying all nodes for (entry = head->Intents; entry != NULL; entry = entry ->Next) { cmsIntentsList *newEntry = ( cmsIntentsList *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(cmsIntentsList)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.Intents == NULL) newHead.Intents = newEntry; } ctx ->chunks[IntentPlugin] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsIntentsPluginChunkType)); } void _cmsAllocIntentsPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { if (src != NULL) { // Copy all linked list DupPluginIntentsList(ctx, src); } else { static _cmsIntentsPluginChunkType IntentsPluginChunkType = { NULL }; ctx ->chunks[IntentPlugin] = _cmsSubAllocDup(ctx ->MemPool, &IntentsPluginChunkType, sizeof(_cmsIntentsPluginChunkType)); } } // Search the list for a suitable intent. Returns NULL if not found static cmsIntentsList* SearchIntent(cmsContext ContextID, cmsUInt32Number Intent) { _cmsIntentsPluginChunkType* ctx = ( _cmsIntentsPluginChunkType*) _cmsContextGetClientChunk(ContextID, IntentPlugin); cmsIntentsList* pt; for (pt = ctx -> Intents; pt != NULL; pt = pt -> Next) if (pt ->Intent == Intent) return pt; for (pt = DefaultIntents; pt != NULL; pt = pt -> Next) if (pt ->Intent == Intent) return pt; return NULL; } // Black point compensation. Implemented as a linear scaling in XYZ. Black points // should come relative to the white point. Fills an matrix/offset element m // which is organized as a 4x4 matrix. static void ComputeBlackPointCompensation(const cmsCIEXYZ* BlackPointIn, const cmsCIEXYZ* BlackPointOut, cmsMAT3* m, cmsVEC3* off) { cmsFloat64Number ax, ay, az, bx, by, bz, tx, ty, tz; // Now we need to compute a matrix plus an offset m and of such of // [m]*bpin + off = bpout // [m]*D50 + off = D50 // // This is a linear scaling in the form ax+b, where // a = (bpout - D50) / (bpin - D50) // b = - D50* (bpout - bpin) / (bpin - D50) tx = BlackPointIn->X - cmsD50_XYZ()->X; ty = BlackPointIn->Y - cmsD50_XYZ()->Y; tz = BlackPointIn->Z - cmsD50_XYZ()->Z; ax = (BlackPointOut->X - cmsD50_XYZ()->X) / tx; ay = (BlackPointOut->Y - cmsD50_XYZ()->Y) / ty; az = (BlackPointOut->Z - cmsD50_XYZ()->Z) / tz; bx = - cmsD50_XYZ()-> X * (BlackPointOut->X - BlackPointIn->X) / tx; by = - cmsD50_XYZ()-> Y * (BlackPointOut->Y - BlackPointIn->Y) / ty; bz = - cmsD50_XYZ()-> Z * (BlackPointOut->Z - BlackPointIn->Z) / tz; _cmsVEC3init(&m ->v[0], ax, 0, 0); _cmsVEC3init(&m ->v[1], 0, ay, 0); _cmsVEC3init(&m ->v[2], 0, 0, az); _cmsVEC3init(off, bx, by, bz); } // Approximate a blackbody illuminant based on CHAD information static cmsFloat64Number CHAD2Temp(const cmsMAT3* Chad) { // Convert D50 across inverse CHAD to get the absolute white point cmsVEC3 d, s; cmsCIEXYZ Dest; cmsCIExyY DestChromaticity; cmsFloat64Number TempK; cmsMAT3 m1, m2; m1 = *Chad; if (!_cmsMAT3inverse(&m1, &m2)) return FALSE; s.n[VX] = cmsD50_XYZ() -> X; s.n[VY] = cmsD50_XYZ() -> Y; s.n[VZ] = cmsD50_XYZ() -> Z; _cmsMAT3eval(&d, &m2, &s); Dest.X = d.n[VX]; Dest.Y = d.n[VY]; Dest.Z = d.n[VZ]; cmsXYZ2xyY(&DestChromaticity, &Dest); if (!cmsTempFromWhitePoint(&TempK, &DestChromaticity)) return -1.0; return TempK; } // Compute a CHAD based on a given temperature static void Temp2CHAD(cmsMAT3* Chad, cmsFloat64Number Temp) { cmsCIEXYZ White; cmsCIExyY ChromaticityOfWhite; cmsWhitePointFromTemp(&ChromaticityOfWhite, Temp); cmsxyY2XYZ(&White, &ChromaticityOfWhite); _cmsAdaptationMatrix(Chad, NULL, &White, cmsD50_XYZ()); } // Join scalings to obtain relative input to absolute and then to relative output. // Result is stored in a 3x3 matrix static cmsBool ComputeAbsoluteIntent(cmsFloat64Number AdaptationState, const cmsCIEXYZ* WhitePointIn, const cmsMAT3* ChromaticAdaptationMatrixIn, const cmsCIEXYZ* WhitePointOut, const cmsMAT3* ChromaticAdaptationMatrixOut, cmsMAT3* m) { cmsMAT3 Scale, m1, m2, m3, m4; // TODO: Follow Marc Mahy's recommendation to check if CHAD is same by using M1*M2 == M2*M1. If so, do nothing. // TODO: Add support for ArgyllArts tag // Adaptation state if (AdaptationState == 1.0) { // Observer is fully adapted. Keep chromatic adaptation. // That is the standard V4 behaviour _cmsVEC3init(&m->v[0], WhitePointIn->X / WhitePointOut->X, 0, 0); _cmsVEC3init(&m->v[1], 0, WhitePointIn->Y / WhitePointOut->Y, 0); _cmsVEC3init(&m->v[2], 0, 0, WhitePointIn->Z / WhitePointOut->Z); } else { // Incomplete adaptation. This is an advanced feature. _cmsVEC3init(&Scale.v[0], WhitePointIn->X / WhitePointOut->X, 0, 0); _cmsVEC3init(&Scale.v[1], 0, WhitePointIn->Y / WhitePointOut->Y, 0); _cmsVEC3init(&Scale.v[2], 0, 0, WhitePointIn->Z / WhitePointOut->Z); if (AdaptationState == 0.0) { m1 = *ChromaticAdaptationMatrixOut; _cmsMAT3per(&m2, &m1, &Scale); // m2 holds CHAD from output white to D50 times abs. col. scaling // Observer is not adapted, undo the chromatic adaptation _cmsMAT3per(m, &m2, ChromaticAdaptationMatrixOut); m3 = *ChromaticAdaptationMatrixIn; if (!_cmsMAT3inverse(&m3, &m4)) return FALSE; _cmsMAT3per(m, &m2, &m4); } else { cmsMAT3 MixedCHAD; cmsFloat64Number TempSrc, TempDest, Temp; m1 = *ChromaticAdaptationMatrixIn; if (!_cmsMAT3inverse(&m1, &m2)) return FALSE; _cmsMAT3per(&m3, &m2, &Scale); // m3 holds CHAD from input white to D50 times abs. col. scaling TempSrc = CHAD2Temp(ChromaticAdaptationMatrixIn); TempDest = CHAD2Temp(ChromaticAdaptationMatrixOut); if (TempSrc < 0.0 || TempDest < 0.0) return FALSE; // Something went wrong if (_cmsMAT3isIdentity(&Scale) && fabs(TempSrc - TempDest) < 0.01) { _cmsMAT3identity(m); return TRUE; } Temp = (1.0 - AdaptationState) * TempDest + AdaptationState * TempSrc; // Get a CHAD from whatever output temperature to D50. This replaces output CHAD Temp2CHAD(&MixedCHAD, Temp); _cmsMAT3per(m, &m3, &MixedCHAD); } } return TRUE; } // Just to see if m matrix should be applied static cmsBool IsEmptyLayer(cmsMAT3* m, cmsVEC3* off) { cmsFloat64Number diff = 0; cmsMAT3 Ident; int i; if (m == NULL && off == NULL) return TRUE; // NULL is allowed as an empty layer if (m == NULL && off != NULL) return FALSE; // This is an internal error _cmsMAT3identity(&Ident); for (i=0; i < 3*3; i++) diff += fabs(((cmsFloat64Number*)m)[i] - ((cmsFloat64Number*)&Ident)[i]); for (i=0; i < 3; i++) diff += fabs(((cmsFloat64Number*)off)[i]); return (diff < 0.002); } // Compute the conversion layer static cmsBool ComputeConversion(cmsUInt32Number i, cmsHPROFILE hProfiles[], cmsUInt32Number Intent, cmsBool BPC, cmsFloat64Number AdaptationState, cmsMAT3* m, cmsVEC3* off) { int k; // m and off are set to identity and this is detected latter on _cmsMAT3identity(m); _cmsVEC3init(off, 0, 0, 0); // If intent is abs. colorimetric, if (Intent == INTENT_ABSOLUTE_COLORIMETRIC) { cmsCIEXYZ WhitePointIn, WhitePointOut; cmsMAT3 ChromaticAdaptationMatrixIn, ChromaticAdaptationMatrixOut; _cmsReadMediaWhitePoint(&WhitePointIn, hProfiles[i-1]); _cmsReadCHAD(&ChromaticAdaptationMatrixIn, hProfiles[i-1]); _cmsReadMediaWhitePoint(&WhitePointOut, hProfiles[i]); _cmsReadCHAD(&ChromaticAdaptationMatrixOut, hProfiles[i]); if (!ComputeAbsoluteIntent(AdaptationState, &WhitePointIn, &ChromaticAdaptationMatrixIn, &WhitePointOut, &ChromaticAdaptationMatrixOut, m)) return FALSE; } else { // Rest of intents may apply BPC. if (BPC) { cmsCIEXYZ BlackPointIn, BlackPointOut; cmsDetectBlackPoint(&BlackPointIn, hProfiles[i-1], Intent, 0); cmsDetectDestinationBlackPoint(&BlackPointOut, hProfiles[i], Intent, 0); // If black points are equal, then do nothing if (BlackPointIn.X != BlackPointOut.X || BlackPointIn.Y != BlackPointOut.Y || BlackPointIn.Z != BlackPointOut.Z) ComputeBlackPointCompensation(&BlackPointIn, &BlackPointOut, m, off); } } // Offset should be adjusted because the encoding. We encode XYZ normalized to 0..1.0, // to do that, we divide by MAX_ENCODEABLE_XZY. The conversion stage goes XYZ -> XYZ so // we have first to convert from encoded to XYZ and then convert back to encoded. // y = Mx + Off // x = x'c // y = M x'c + Off // y = y'c; y' = y / c // y' = (Mx'c + Off) /c = Mx' + (Off / c) for (k=0; k < 3; k++) { off ->n[k] /= MAX_ENCODEABLE_XYZ; } return TRUE; } // Add a conversion stage if needed. If a matrix/offset m is given, it applies to XYZ space static cmsBool AddConversion(cmsPipeline* Result, cmsColorSpaceSignature InPCS, cmsColorSpaceSignature OutPCS, cmsMAT3* m, cmsVEC3* off) { cmsFloat64Number* m_as_dbl = (cmsFloat64Number*) m; cmsFloat64Number* off_as_dbl = (cmsFloat64Number*) off; // Handle PCS mismatches. A specialized stage is added to the LUT in such case switch (InPCS) { case cmsSigXYZData: // Input profile operates in XYZ switch (OutPCS) { case cmsSigXYZData: // XYZ -> XYZ if (!IsEmptyLayer(m, off) && !cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl))) return FALSE; break; case cmsSigLabData: // XYZ -> Lab if (!IsEmptyLayer(m, off) && !cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl))) return FALSE; if (!cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocXYZ2Lab(Result ->ContextID))) return FALSE; break; default: return FALSE; // Colorspace mismatch } break; case cmsSigLabData: // Input profile operates in Lab switch (OutPCS) { case cmsSigXYZData: // Lab -> XYZ if (!cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocLab2XYZ(Result ->ContextID))) return FALSE; if (!IsEmptyLayer(m, off) && !cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl))) return FALSE; break; case cmsSigLabData: // Lab -> Lab if (!IsEmptyLayer(m, off)) { if (!cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocLab2XYZ(Result ->ContextID)) || !cmsPipelineInsertStage(Result, cmsAT_END, cmsStageAllocMatrix(Result ->ContextID, 3, 3, m_as_dbl, off_as_dbl)) || !cmsPipelineInsertStage(Result, cmsAT_END, _cmsStageAllocXYZ2Lab(Result ->ContextID))) return FALSE; } break; default: return FALSE; // Mismatch } break; // On colorspaces other than PCS, check for same space default: if (InPCS != OutPCS) return FALSE; break; } return TRUE; } // Is a given space compatible with another? static cmsBool ColorSpaceIsCompatible(cmsColorSpaceSignature a, cmsColorSpaceSignature b) { // If they are same, they are compatible. if (a == b) return TRUE; // Check for MCH4 substitution of CMYK if ((a == cmsSig4colorData) && (b == cmsSigCmykData)) return TRUE; if ((a == cmsSigCmykData) && (b == cmsSig4colorData)) return TRUE; // Check for XYZ/Lab. Those spaces are interchangeable as they can be computed one from other. if ((a == cmsSigXYZData) && (b == cmsSigLabData)) return TRUE; if ((a == cmsSigLabData) && (b == cmsSigXYZData)) return TRUE; return FALSE; } // Default handler for ICC-style intents static cmsPipeline* DefaultICCintents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { cmsPipeline* Lut = NULL; cmsPipeline* Result; cmsHPROFILE hProfile; cmsMAT3 m; cmsVEC3 off; cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut = cmsSigLabData, CurrentColorSpace; cmsProfileClassSignature ClassSig; cmsUInt32Number i, Intent; // For safety if (nProfiles == 0) return NULL; // Allocate an empty LUT for holding the result. 0 as channel count means 'undefined' Result = cmsPipelineAlloc(ContextID, 0, 0); if (Result == NULL) return NULL; CurrentColorSpace = cmsGetColorSpace(hProfiles[0]); for (i=0; i < nProfiles; i++) { cmsBool lIsDeviceLink, lIsInput; hProfile = hProfiles[i]; ClassSig = cmsGetDeviceClass(hProfile); lIsDeviceLink = (ClassSig == cmsSigLinkClass || ClassSig == cmsSigAbstractClass ); // First profile is used as input unless devicelink or abstract if ((i == 0) && !lIsDeviceLink) { lIsInput = TRUE; } else { // Else use profile in the input direction if current space is not PCS lIsInput = (CurrentColorSpace != cmsSigXYZData) && (CurrentColorSpace != cmsSigLabData); } Intent = TheIntents[i]; if (lIsInput || lIsDeviceLink) { ColorSpaceIn = cmsGetColorSpace(hProfile); ColorSpaceOut = cmsGetPCS(hProfile); } else { ColorSpaceIn = cmsGetPCS(hProfile); ColorSpaceOut = cmsGetColorSpace(hProfile); } if (!ColorSpaceIsCompatible(ColorSpaceIn, CurrentColorSpace)) { cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "ColorSpace mismatch"); goto Error; } // If devicelink is found, then no custom intent is allowed and we can // read the LUT to be applied. Settings don't apply here. if (lIsDeviceLink || ((ClassSig == cmsSigNamedColorClass) && (nProfiles == 1))) { // Get the involved LUT from the profile Lut = _cmsReadDevicelinkLUT(hProfile, Intent); if (Lut == NULL) goto Error; // What about abstract profiles? if (ClassSig == cmsSigAbstractClass && i > 0) { if (!ComputeConversion(i, hProfiles, Intent, BPC[i], AdaptationStates[i], &m, &off)) goto Error; } else { _cmsMAT3identity(&m); _cmsVEC3init(&off, 0, 0, 0); } if (!AddConversion(Result, CurrentColorSpace, ColorSpaceIn, &m, &off)) goto Error; } else { if (lIsInput) { // Input direction means non-pcs connection, so proceed like devicelinks Lut = _cmsReadInputLUT(hProfile, Intent); if (Lut == NULL) goto Error; } else { // Output direction means PCS connection. Intent may apply here Lut = _cmsReadOutputLUT(hProfile, Intent); if (Lut == NULL) goto Error; if (!ComputeConversion(i, hProfiles, Intent, BPC[i], AdaptationStates[i], &m, &off)) goto Error; if (!AddConversion(Result, CurrentColorSpace, ColorSpaceIn, &m, &off)) goto Error; } } // Concatenate to the output LUT if (!cmsPipelineCat(Result, Lut)) goto Error; cmsPipelineFree(Lut); Lut = NULL; // Update current space CurrentColorSpace = ColorSpaceOut; } // Check for non-negatives clip if (dwFlags & cmsFLAGS_NONEGATIVES) { if (ColorSpaceOut == cmsSigGrayData || ColorSpaceOut == cmsSigRgbData || ColorSpaceOut == cmsSigCmykData) { cmsStage* clip = _cmsStageClipNegatives(Result->ContextID, cmsChannelsOf(ColorSpaceOut)); if (clip == NULL) goto Error; if (!cmsPipelineInsertStage(Result, cmsAT_END, clip)) goto Error; } } return Result; Error: if (Lut != NULL) cmsPipelineFree(Lut); if (Result != NULL) cmsPipelineFree(Result); return NULL; cmsUNUSED_PARAMETER(dwFlags); } // Wrapper for DLL calling convention cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { return DefaultICCintents(ContextID, nProfiles, TheIntents, hProfiles, BPC, AdaptationStates, dwFlags); } // Black preserving intents --------------------------------------------------------------------------------------------- // Translate black-preserving intents to ICC ones static cmsUInt32Number TranslateNonICCIntents(cmsUInt32Number Intent) { switch (Intent) { case INTENT_PRESERVE_K_ONLY_PERCEPTUAL: case INTENT_PRESERVE_K_PLANE_PERCEPTUAL: return INTENT_PERCEPTUAL; case INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC: case INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC: return INTENT_RELATIVE_COLORIMETRIC; case INTENT_PRESERVE_K_ONLY_SATURATION: case INTENT_PRESERVE_K_PLANE_SATURATION: return INTENT_SATURATION; default: return Intent; } } // Sampler for Black-only preserving CMYK->CMYK transforms typedef struct { cmsPipeline* cmyk2cmyk; // The original transform cmsToneCurve* KTone; // Black-to-black tone curve } GrayOnlyParams; // Preserve black only if that is the only ink used static int BlackPreservingGrayOnlySampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { GrayOnlyParams* bp = (GrayOnlyParams*) Cargo; // If going across black only, keep black only if (In[0] == 0 && In[1] == 0 && In[2] == 0) { // TAC does not apply because it is black ink! Out[0] = Out[1] = Out[2] = 0; Out[3] = cmsEvalToneCurve16(bp->KTone, In[3]); return TRUE; } // Keep normal transform for other colors bp ->cmyk2cmyk ->Eval16Fn(In, Out, bp ->cmyk2cmyk->Data); return TRUE; } // This is the entry for black-preserving K-only intents, which are non-ICC static cmsPipeline* BlackPreservingKOnlyIntents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { GrayOnlyParams bp; cmsPipeline* Result; cmsUInt32Number ICCIntents[256]; cmsStage* CLUT; cmsUInt32Number i, nGridPoints; cmsUInt32Number lastProfilePos; cmsUInt32Number preservationProfilesCount; cmsHPROFILE hLastProfile; // Sanity check if (nProfiles < 1 || nProfiles > 255) return NULL; // Translate black-preserving intents to ICC ones for (i=0; i < nProfiles; i++) ICCIntents[i] = TranslateNonICCIntents(TheIntents[i]); // Trim all CMYK devicelinks at the end lastProfilePos = nProfiles - 1; hLastProfile = hProfiles[lastProfilePos]; while (lastProfilePos > 1) { hLastProfile = hProfiles[--lastProfilePos]; if (cmsGetColorSpace(hLastProfile) != cmsSigCmykData || cmsGetDeviceClass(hLastProfile) != cmsSigLinkClass) break; } preservationProfilesCount = lastProfilePos + 1; // Check for non-cmyk profiles if (cmsGetColorSpace(hProfiles[0]) != cmsSigCmykData || !(cmsGetColorSpace(hLastProfile) == cmsSigCmykData || cmsGetDeviceClass(hLastProfile) == cmsSigOutputClass)) return DefaultICCintents(ContextID, nProfiles, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); // Allocate an empty LUT for holding the result Result = cmsPipelineAlloc(ContextID, 4, 4); if (Result == NULL) return NULL; memset(&bp, 0, sizeof(bp)); // Create a LUT holding normal ICC transform bp.cmyk2cmyk = DefaultICCintents(ContextID, preservationProfilesCount, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); if (bp.cmyk2cmyk == NULL) goto Error; // Now, compute the tone curve bp.KTone = _cmsBuildKToneCurve(ContextID, 4096, preservationProfilesCount, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); if (bp.KTone == NULL) goto Error; // How many gridpoints are we going to use? nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigCmykData, dwFlags); // Create the CLUT. 16 bits CLUT = cmsStageAllocCLut16bit(ContextID, nGridPoints, 4, 4, NULL); if (CLUT == NULL) goto Error; // This is the one and only MPE in this LUT if (!cmsPipelineInsertStage(Result, cmsAT_BEGIN, CLUT)) goto Error; // Sample it. We cannot afford pre/post linearization this time. if (!cmsStageSampleCLut16bit(CLUT, BlackPreservingGrayOnlySampler, (void*) &bp, 0)) goto Error; // Insert possible devicelinks at the end for (i = lastProfilePos + 1; i < nProfiles; i++) { cmsPipeline* devlink = _cmsReadDevicelinkLUT(hProfiles[i], ICCIntents[i]); if (devlink == NULL) goto Error; if (!cmsPipelineCat(Result, devlink)) goto Error; } // Get rid of xform and tone curve cmsPipelineFree(bp.cmyk2cmyk); cmsFreeToneCurve(bp.KTone); return Result; Error: if (bp.cmyk2cmyk != NULL) cmsPipelineFree(bp.cmyk2cmyk); if (bp.KTone != NULL) cmsFreeToneCurve(bp.KTone); if (Result != NULL) cmsPipelineFree(Result); return NULL; } // K Plane-preserving CMYK to CMYK ------------------------------------------------------------------------------------ typedef struct { cmsPipeline* cmyk2cmyk; // The original transform cmsHTRANSFORM hProofOutput; // Output CMYK to Lab (last profile) cmsHTRANSFORM cmyk2Lab; // The input chain cmsToneCurve* KTone; // Black-to-black tone curve cmsPipeline* LabK2cmyk; // The output profile cmsFloat64Number MaxError; cmsHTRANSFORM hRoundTrip; cmsFloat64Number MaxTAC; } PreserveKPlaneParams; // The CLUT will be stored at 16 bits, but calculations are performed at cmsFloat32Number precision static int BlackPreservingSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { int i; cmsFloat32Number Inf[4], Outf[4]; cmsFloat32Number LabK[4]; cmsFloat64Number SumCMY, SumCMYK, Error, Ratio; cmsCIELab ColorimetricLab, BlackPreservingLab; PreserveKPlaneParams* bp = (PreserveKPlaneParams*) Cargo; // Convert from 16 bits to floating point for (i=0; i < 4; i++) Inf[i] = (cmsFloat32Number) (In[i] / 65535.0); // Get the K across Tone curve LabK[3] = cmsEvalToneCurveFloat(bp ->KTone, Inf[3]); // If going across black only, keep black only if (In[0] == 0 && In[1] == 0 && In[2] == 0) { Out[0] = Out[1] = Out[2] = 0; Out[3] = _cmsQuickSaturateWord(LabK[3] * 65535.0); return TRUE; } // Try the original transform, cmsPipelineEvalFloat(Inf, Outf, bp ->cmyk2cmyk); // Store a copy of the floating point result into 16-bit for (i=0; i < 4; i++) Out[i] = _cmsQuickSaturateWord(Outf[i] * 65535.0); // Maybe K is already ok (mostly on K=0) if (fabsf(Outf[3] - LabK[3]) < (3.0 / 65535.0)) { return TRUE; } // K differ, measure and keep Lab measurement for further usage // this is done in relative colorimetric intent cmsDoTransform(bp->hProofOutput, Out, &ColorimetricLab, 1); // Is not black only and the transform doesn't keep black. // Obtain the Lab of output CMYK. After that we have Lab + K cmsDoTransform(bp ->cmyk2Lab, Outf, LabK, 1); // Obtain the corresponding CMY using reverse interpolation // (K is fixed in LabK[3]) if (!cmsPipelineEvalReverseFloat(LabK, Outf, Outf, bp ->LabK2cmyk)) { // Cannot find a suitable value, so use colorimetric xform // which is already stored in Out[] return TRUE; } // Make sure to pass through K (which now is fixed) Outf[3] = LabK[3]; // Apply TAC if needed SumCMY = (cmsFloat64Number) Outf[0] + Outf[1] + Outf[2]; SumCMYK = SumCMY + Outf[3]; if (SumCMYK > bp ->MaxTAC) { Ratio = 1 - ((SumCMYK - bp->MaxTAC) / SumCMY); if (Ratio < 0) Ratio = 0; } else Ratio = 1.0; Out[0] = _cmsQuickSaturateWord(Outf[0] * Ratio * 65535.0); // C Out[1] = _cmsQuickSaturateWord(Outf[1] * Ratio * 65535.0); // M Out[2] = _cmsQuickSaturateWord(Outf[2] * Ratio * 65535.0); // Y Out[3] = _cmsQuickSaturateWord(Outf[3] * 65535.0); // Estimate the error (this goes 16 bits to Lab DBL) cmsDoTransform(bp->hProofOutput, Out, &BlackPreservingLab, 1); Error = cmsDeltaE(&ColorimetricLab, &BlackPreservingLab); if (Error > bp -> MaxError) bp->MaxError = Error; return TRUE; } // This is the entry for black-plane preserving, which are non-ICC static cmsPipeline* BlackPreservingKPlaneIntents(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { PreserveKPlaneParams bp; cmsPipeline* Result = NULL; cmsUInt32Number ICCIntents[256]; cmsStage* CLUT; cmsUInt32Number i, nGridPoints; cmsUInt32Number lastProfilePos; cmsUInt32Number preservationProfilesCount; cmsHPROFILE hLastProfile; cmsHPROFILE hLab; // Sanity check if (nProfiles < 1 || nProfiles > 255) return NULL; // Translate black-preserving intents to ICC ones for (i=0; i < nProfiles; i++) ICCIntents[i] = TranslateNonICCIntents(TheIntents[i]); // Trim all CMYK devicelinks at the end lastProfilePos = nProfiles - 1; hLastProfile = hProfiles[lastProfilePos]; while (lastProfilePos > 1) { hLastProfile = hProfiles[--lastProfilePos]; if (cmsGetColorSpace(hLastProfile) != cmsSigCmykData || cmsGetDeviceClass(hLastProfile) != cmsSigLinkClass) break; } preservationProfilesCount = lastProfilePos + 1; // Check for non-cmyk profiles if (cmsGetColorSpace(hProfiles[0]) != cmsSigCmykData || !(cmsGetColorSpace(hLastProfile) == cmsSigCmykData || cmsGetDeviceClass(hLastProfile) == cmsSigOutputClass)) return DefaultICCintents(ContextID, nProfiles, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); // Allocate an empty LUT for holding the result Result = cmsPipelineAlloc(ContextID, 4, 4); if (Result == NULL) return NULL; memset(&bp, 0, sizeof(bp)); // We need the input LUT of the last profile, assuming this one is responsible of // black generation. This LUT will be searched in inverse order. bp.LabK2cmyk = _cmsReadInputLUT(hLastProfile, INTENT_RELATIVE_COLORIMETRIC); if (bp.LabK2cmyk == NULL) goto Cleanup; // Get total area coverage (in 0..1 domain) bp.MaxTAC = cmsDetectTAC(hLastProfile) / 100.0; if (bp.MaxTAC <= 0) goto Cleanup; // Create a LUT holding normal ICC transform bp.cmyk2cmyk = DefaultICCintents(ContextID, preservationProfilesCount, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); if (bp.cmyk2cmyk == NULL) goto Cleanup; // Now the tone curve bp.KTone = _cmsBuildKToneCurve(ContextID, 4096, preservationProfilesCount, ICCIntents, hProfiles, BPC, AdaptationStates, dwFlags); if (bp.KTone == NULL) goto Cleanup; // To measure the output, Last profile to Lab hLab = cmsCreateLab4ProfileTHR(ContextID, NULL); bp.hProofOutput = cmsCreateTransformTHR(ContextID, hLastProfile, CHANNELS_SH(4)|BYTES_SH(2), hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); if ( bp.hProofOutput == NULL) goto Cleanup; // Same as anterior, but lab in the 0..1 range bp.cmyk2Lab = cmsCreateTransformTHR(ContextID, hLastProfile, FLOAT_SH(1)|CHANNELS_SH(4)|BYTES_SH(4), hLab, FLOAT_SH(1)|CHANNELS_SH(3)|BYTES_SH(4), INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE|cmsFLAGS_NOOPTIMIZE); if (bp.cmyk2Lab == NULL) goto Cleanup; cmsCloseProfile(hLab); // Error estimation (for debug only) bp.MaxError = 0; // How many gridpoints are we going to use? nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigCmykData, dwFlags); CLUT = cmsStageAllocCLut16bit(ContextID, nGridPoints, 4, 4, NULL); if (CLUT == NULL) goto Cleanup; if (!cmsPipelineInsertStage(Result, cmsAT_BEGIN, CLUT)) goto Cleanup; cmsStageSampleCLut16bit(CLUT, BlackPreservingSampler, (void*) &bp, 0); // Insert possible devicelinks at the end for (i = lastProfilePos + 1; i < nProfiles; i++) { cmsPipeline* devlink = _cmsReadDevicelinkLUT(hProfiles[i], ICCIntents[i]); if (devlink == NULL) goto Cleanup; if (!cmsPipelineCat(Result, devlink)) goto Cleanup; } Cleanup: if (bp.cmyk2cmyk) cmsPipelineFree(bp.cmyk2cmyk); if (bp.cmyk2Lab) cmsDeleteTransform(bp.cmyk2Lab); if (bp.hProofOutput) cmsDeleteTransform(bp.hProofOutput); if (bp.KTone) cmsFreeToneCurve(bp.KTone); if (bp.LabK2cmyk) cmsPipelineFree(bp.LabK2cmyk); return Result; } // Link routines ------------------------------------------------------------------------------------------------------ // Chain several profiles into a single LUT. It just checks the parameters and then calls the handler // for the first intent in chain. The handler may be user-defined. Is up to the handler to deal with the // rest of intents in chain. A maximum of 255 profiles at time are supported, which is pretty reasonable. cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags) { cmsUInt32Number i; cmsIntentsList* Intent; // Make sure a reasonable number of profiles is provided if (nProfiles <= 0 || nProfiles > 255) { cmsSignalError(ContextID, cmsERROR_RANGE, "Couldn't link '%d' profiles", nProfiles); return NULL; } for (i=0; i < nProfiles; i++) { // Check if black point is really needed or allowed. Note that // following Adobe's document: // BPC does not apply to devicelink profiles, nor to abs colorimetric, // and applies always on V4 perceptual and saturation. if (TheIntents[i] == INTENT_ABSOLUTE_COLORIMETRIC) BPC[i] = FALSE; if (TheIntents[i] == INTENT_PERCEPTUAL || TheIntents[i] == INTENT_SATURATION) { // Force BPC for V4 profiles in perceptual and saturation if (cmsGetEncodedICCversion(hProfiles[i]) >= 0x4000000) BPC[i] = TRUE; } } // Search for a handler. The first intent in the chain defines the handler. That would // prevent using multiple custom intents in a multiintent chain, but the behaviour of // this case would present some issues if the custom intent tries to do things like // preserve primaries. This solution is not perfect, but works well on most cases. Intent = SearchIntent(ContextID, TheIntents[0]); if (Intent == NULL) { cmsSignalError(ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported intent '%d'", TheIntents[0]); return NULL; } // Call the handler return Intent ->Link(ContextID, nProfiles, TheIntents, hProfiles, BPC, AdaptationStates, dwFlags); } // ------------------------------------------------------------------------------------------------- // Get information about available intents. nMax is the maximum space for the supplied "Codes" // and "Descriptions" the function returns the total number of intents, which may be greater // than nMax, although the matrices are not populated beyond this level. cmsUInt32Number CMSEXPORT cmsGetSupportedIntentsTHR(cmsContext ContextID, cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions) { _cmsIntentsPluginChunkType* ctx = ( _cmsIntentsPluginChunkType*) _cmsContextGetClientChunk(ContextID, IntentPlugin); cmsIntentsList* pt; cmsUInt32Number nIntents; for (nIntents=0, pt = ctx->Intents; pt != NULL; pt = pt -> Next) { if (nIntents < nMax) { if (Codes != NULL) Codes[nIntents] = pt ->Intent; if (Descriptions != NULL) Descriptions[nIntents] = pt ->Description; } nIntents++; } for (nIntents=0, pt = DefaultIntents; pt != NULL; pt = pt -> Next) { if (nIntents < nMax) { if (Codes != NULL) Codes[nIntents] = pt ->Intent; if (Descriptions != NULL) Descriptions[nIntents] = pt ->Description; } nIntents++; } return nIntents; } cmsUInt32Number CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions) { return cmsGetSupportedIntentsTHR(NULL, nMax, Codes, Descriptions); } // The plug-in registration. User can add new intents or override default routines cmsBool _cmsRegisterRenderingIntentPlugin(cmsContext id, cmsPluginBase* Data) { _cmsIntentsPluginChunkType* ctx = ( _cmsIntentsPluginChunkType*) _cmsContextGetClientChunk(id, IntentPlugin); cmsPluginRenderingIntent* Plugin = (cmsPluginRenderingIntent*) Data; cmsIntentsList* fl; // Do we have to reset the custom intents? if (Data == NULL) { ctx->Intents = NULL; return TRUE; } fl = (cmsIntentsList*) _cmsPluginMalloc(id, sizeof(cmsIntentsList)); if (fl == NULL) return FALSE; fl ->Intent = Plugin ->Intent; strncpy(fl ->Description, Plugin ->Description, sizeof(fl ->Description)-1); fl ->Description[sizeof(fl ->Description)-1] = 0; fl ->Link = Plugin ->Link; fl ->Next = ctx ->Intents; ctx ->Intents = fl; return TRUE; } lcms2-2.12rc1/src/cmstypes.c0000644000175000017500000054512413775114656014732 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Tag Serialization ----------------------------------------------------------------------------- // This file implements every single tag and tag type as described in the ICC spec. Some types // have been deprecated, like ncl and Data. There is no implementation for those types as there // are no profiles holding them. The programmer can also extend this list by defining his own types // by using the appropriate plug-in. There are three types of plug ins regarding that. First type // allows to define new tags using any existing type. Next plug-in type allows to define new types // and the third one is very specific: allows to extend the number of elements in the multiprocessing // elements special type. //-------------------------------------------------------------------------------------------------- // Some broken types #define cmsCorbisBrokenXYZtype ((cmsTagTypeSignature) 0x17A505B8) #define cmsMonacoBrokenCurveType ((cmsTagTypeSignature) 0x9478ee00) // This is the linked list that keeps track of the defined types typedef struct _cmsTagTypeLinkedList_st { cmsTagTypeHandler Handler; struct _cmsTagTypeLinkedList_st* Next; } _cmsTagTypeLinkedList; // Some macros to define callbacks. #define READ_FN(x) Type_##x##_Read #define WRITE_FN(x) Type_##x##_Write #define FREE_FN(x) Type_##x##_Free #define DUP_FN(x) Type_##x##_Dup // Helper macro to define a handler. Callbacks do have a fixed naming convention. #define TYPE_HANDLER(t, x) { (t), READ_FN(x), WRITE_FN(x), DUP_FN(x), FREE_FN(x), NULL, 0 } // Helper macro to define a MPE handler. Callbacks do have a fixed naming convention #define TYPE_MPE_HANDLER(t, x) { (t), READ_FN(x), WRITE_FN(x), GenericMPEdup, GenericMPEfree, NULL, 0 } // Infinites #define MINUS_INF (-1E22F) #define PLUS_INF (+1E22F) // Register a new type handler. This routine is shared between normal types and MPE. LinkedList points to the optional list head static cmsBool RegisterTypesPlugin(cmsContext id, cmsPluginBase* Data, _cmsMemoryClient pos) { cmsPluginTagType* Plugin = (cmsPluginTagType*) Data; _cmsTagTypePluginChunkType* ctx = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(id, pos); _cmsTagTypeLinkedList *pt; // Calling the function with NULL as plug-in would unregister the plug in. if (Data == NULL) { // There is no need to set free the memory, as pool is destroyed as a whole. ctx ->TagTypes = NULL; return TRUE; } // Registering happens in plug-in memory pool. pt = (_cmsTagTypeLinkedList*) _cmsPluginMalloc(id, sizeof(_cmsTagTypeLinkedList)); if (pt == NULL) return FALSE; pt ->Handler = Plugin ->Handler; pt ->Next = ctx ->TagTypes; ctx ->TagTypes = pt; return TRUE; } // Return handler for a given type or NULL if not found. Shared between normal types and MPE. It first tries the additons // made by plug-ins and then the built-in defaults. static cmsTagTypeHandler* GetHandler(cmsTagTypeSignature sig, _cmsTagTypeLinkedList* PluginLinkedList, _cmsTagTypeLinkedList* DefaultLinkedList) { _cmsTagTypeLinkedList* pt; for (pt = PluginLinkedList; pt != NULL; pt = pt ->Next) { if (sig == pt -> Handler.Signature) return &pt ->Handler; } for (pt = DefaultLinkedList; pt != NULL; pt = pt ->Next) { if (sig == pt -> Handler.Signature) return &pt ->Handler; } return NULL; } // Auxiliary to convert UTF-32 to UTF-16 in some cases static cmsBool _cmsWriteWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, const wchar_t* Array) { cmsUInt32Number i; _cmsAssert(io != NULL); _cmsAssert(!(Array == NULL && n > 0)); for (i=0; i < n; i++) { if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) Array[i])) return FALSE; } return TRUE; } // Auxiliary to read an array of wchar_t static cmsBool _cmsReadWCharArray(cmsIOHANDLER* io, cmsUInt32Number n, wchar_t* Array) { cmsUInt32Number i; cmsUInt16Number tmp; _cmsAssert(io != NULL); for (i=0; i < n; i++) { if (Array != NULL) { if (!_cmsReadUInt16Number(io, &tmp)) return FALSE; Array[i] = (wchar_t) tmp; } else { if (!_cmsReadUInt16Number(io, NULL)) return FALSE; } } return TRUE; } // To deal with position tables typedef cmsBool (* PositionTableEntryFn)(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Cargo, cmsUInt32Number n, cmsUInt32Number SizeOfTag); // Helper function to deal with position tables as described in ICC spec 4.3 // A table of n elements is read, where first comes n records containing offsets and sizes and // then a block containing the data itself. This allows to reuse same data in more than one entry static cmsBool ReadPositionTable(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Count, cmsUInt32Number BaseOffset, void *Cargo, PositionTableEntryFn ElementFn) { cmsUInt32Number i; cmsUInt32Number *ElementOffsets = NULL, *ElementSizes = NULL; cmsUInt32Number currentPosition; currentPosition = io->Tell(io); // Verify there is enough space left to read at least two cmsUInt32Number items for Count items. if (((io->ReportedSize - currentPosition) / (2 * sizeof(cmsUInt32Number))) < Count) return FALSE; // Let's take the offsets to each element ElementOffsets = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number)); if (ElementOffsets == NULL) goto Error; ElementSizes = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number)); if (ElementSizes == NULL) goto Error; for (i=0; i < Count; i++) { if (!_cmsReadUInt32Number(io, &ElementOffsets[i])) goto Error; if (!_cmsReadUInt32Number(io, &ElementSizes[i])) goto Error; ElementOffsets[i] += BaseOffset; } // Seek to each element and read it for (i=0; i < Count; i++) { if (!io -> Seek(io, ElementOffsets[i])) goto Error; // This is the reader callback if (!ElementFn(self, io, Cargo, i, ElementSizes[i])) goto Error; } // Success if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); return TRUE; Error: if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); return FALSE; } // Same as anterior, but for write position tables static cmsBool WritePositionTable(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number SizeOfTag, cmsUInt32Number Count, cmsUInt32Number BaseOffset, void *Cargo, PositionTableEntryFn ElementFn) { cmsUInt32Number i; cmsUInt32Number DirectoryPos, CurrentPos, Before; cmsUInt32Number *ElementOffsets = NULL, *ElementSizes = NULL; // Create table ElementOffsets = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number)); if (ElementOffsets == NULL) goto Error; ElementSizes = (cmsUInt32Number *) _cmsCalloc(io ->ContextID, Count, sizeof(cmsUInt32Number)); if (ElementSizes == NULL) goto Error; // Keep starting position of curve offsets DirectoryPos = io ->Tell(io); // Write a fake directory to be filled latter on for (i=0; i < Count; i++) { if (!_cmsWriteUInt32Number(io, 0)) goto Error; // Offset if (!_cmsWriteUInt32Number(io, 0)) goto Error; // size } // Write each element. Keep track of the size as well. for (i=0; i < Count; i++) { Before = io ->Tell(io); ElementOffsets[i] = Before - BaseOffset; // Callback to write... if (!ElementFn(self, io, Cargo, i, SizeOfTag)) goto Error; // Now the size ElementSizes[i] = io ->Tell(io) - Before; } // Write the directory CurrentPos = io ->Tell(io); if (!io ->Seek(io, DirectoryPos)) goto Error; for (i=0; i < Count; i++) { if (!_cmsWriteUInt32Number(io, ElementOffsets[i])) goto Error; if (!_cmsWriteUInt32Number(io, ElementSizes[i])) goto Error; } if (!io ->Seek(io, CurrentPos)) goto Error; if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); return TRUE; Error: if (ElementOffsets != NULL) _cmsFree(io ->ContextID, ElementOffsets); if (ElementSizes != NULL) _cmsFree(io ->ContextID, ElementSizes); return FALSE; } // ******************************************************************************** // Type XYZ. Only one value is allowed // ******************************************************************************** //The XYZType contains an array of three encoded values for the XYZ tristimulus //values. Tristimulus values must be non-negative. The signed encoding allows for //implementation optimizations by minimizing the number of fixed formats. static void *Type_XYZ_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsCIEXYZ* xyz; *nItems = 0; xyz = (cmsCIEXYZ*) _cmsMallocZero(self ->ContextID, sizeof(cmsCIEXYZ)); if (xyz == NULL) return NULL; if (!_cmsReadXYZNumber(io, xyz)) { _cmsFree(self ->ContextID, xyz); return NULL; } *nItems = 1; return (void*) xyz; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_XYZ_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { return _cmsWriteXYZNumber(io, (cmsCIEXYZ*) Ptr); cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_XYZ_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsCIEXYZ)); cmsUNUSED_PARAMETER(n); } static void Type_XYZ_Free(struct _cms_typehandler_struct* self, void *Ptr) { _cmsFree(self ->ContextID, Ptr); } static cmsTagTypeSignature DecideXYZtype(cmsFloat64Number ICCVersion, const void *Data) { return cmsSigXYZType; cmsUNUSED_PARAMETER(ICCVersion); cmsUNUSED_PARAMETER(Data); } // ******************************************************************************** // Type chromaticity. Only one value is allowed // ******************************************************************************** // The chromaticity tag type provides basic chromaticity data and type of // phosphors or colorants of a monitor to applications and utilities. static void *Type_Chromaticity_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsCIExyYTRIPLE* chrm; cmsUInt16Number nChans, Table; *nItems = 0; chrm = (cmsCIExyYTRIPLE*) _cmsMallocZero(self ->ContextID, sizeof(cmsCIExyYTRIPLE)); if (chrm == NULL) return NULL; if (!_cmsReadUInt16Number(io, &nChans)) goto Error; // Let's recover from a bug introduced in early versions of lcms1 if (nChans == 0 && SizeOfTag == 32) { if (!_cmsReadUInt16Number(io, NULL)) goto Error; if (!_cmsReadUInt16Number(io, &nChans)) goto Error; } if (nChans != 3) goto Error; if (!_cmsReadUInt16Number(io, &Table)) goto Error; if (!_cmsRead15Fixed16Number(io, &chrm ->Red.x)) goto Error; if (!_cmsRead15Fixed16Number(io, &chrm ->Red.y)) goto Error; chrm ->Red.Y = 1.0; if (!_cmsRead15Fixed16Number(io, &chrm ->Green.x)) goto Error; if (!_cmsRead15Fixed16Number(io, &chrm ->Green.y)) goto Error; chrm ->Green.Y = 1.0; if (!_cmsRead15Fixed16Number(io, &chrm ->Blue.x)) goto Error; if (!_cmsRead15Fixed16Number(io, &chrm ->Blue.y)) goto Error; chrm ->Blue.Y = 1.0; *nItems = 1; return (void*) chrm; Error: _cmsFree(self ->ContextID, (void*) chrm); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool SaveOneChromaticity(cmsFloat64Number x, cmsFloat64Number y, cmsIOHANDLER* io) { if (!_cmsWriteUInt32Number(io, (cmsUInt32Number) _cmsDoubleTo15Fixed16(x))) return FALSE; if (!_cmsWriteUInt32Number(io, (cmsUInt32Number) _cmsDoubleTo15Fixed16(y))) return FALSE; return TRUE; } static cmsBool Type_Chromaticity_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsCIExyYTRIPLE* chrm = (cmsCIExyYTRIPLE*) Ptr; if (!_cmsWriteUInt16Number(io, 3)) return FALSE; // nChannels if (!_cmsWriteUInt16Number(io, 0)) return FALSE; // Table if (!SaveOneChromaticity(chrm -> Red.x, chrm -> Red.y, io)) return FALSE; if (!SaveOneChromaticity(chrm -> Green.x, chrm -> Green.y, io)) return FALSE; if (!SaveOneChromaticity(chrm -> Blue.x, chrm -> Blue.y, io)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_Chromaticity_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsCIExyYTRIPLE)); cmsUNUSED_PARAMETER(n); } static void Type_Chromaticity_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigColorantOrderType // ******************************************************************************** // This is an optional tag which specifies the laydown order in which colorants will // be printed on an n-colorant device. The laydown order may be the same as the // channel generation order listed in the colorantTableTag or the channel order of a // colour space such as CMYK, in which case this tag is not needed. When this is not // the case (for example, ink-towers sometimes use the order KCMY), this tag may be // used to specify the laydown order of the colorants. static void *Type_ColorantOrderType_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt8Number* ColorantOrder; cmsUInt32Number Count; *nItems = 0; if (!_cmsReadUInt32Number(io, &Count)) return NULL; if (Count > cmsMAXCHANNELS) return NULL; ColorantOrder = (cmsUInt8Number*) _cmsCalloc(self ->ContextID, cmsMAXCHANNELS, sizeof(cmsUInt8Number)); if (ColorantOrder == NULL) return NULL; // We use FF as end marker memset(ColorantOrder, 0xFF, cmsMAXCHANNELS * sizeof(cmsUInt8Number)); if (io ->Read(io, ColorantOrder, sizeof(cmsUInt8Number), Count) != Count) { _cmsFree(self ->ContextID, (void*) ColorantOrder); return NULL; } *nItems = 1; return (void*) ColorantOrder; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_ColorantOrderType_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt8Number* ColorantOrder = (cmsUInt8Number*) Ptr; cmsUInt32Number i, sz, Count; // Get the length for (Count=i=0; i < cmsMAXCHANNELS; i++) { if (ColorantOrder[i] != 0xFF) Count++; } if (!_cmsWriteUInt32Number(io, Count)) return FALSE; sz = Count * sizeof(cmsUInt8Number); if (!io -> Write(io, sz, ColorantOrder)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_ColorantOrderType_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, cmsMAXCHANNELS * sizeof(cmsUInt8Number)); cmsUNUSED_PARAMETER(n); } static void Type_ColorantOrderType_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigS15Fixed16ArrayType // ******************************************************************************** // This type represents an array of generic 4-byte/32-bit fixed point quantity. // The number of values is determined from the size of the tag. static void *Type_S15Fixed16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsFloat64Number* array_double; cmsUInt32Number i, n; *nItems = 0; n = SizeOfTag / sizeof(cmsUInt32Number); array_double = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, n, sizeof(cmsFloat64Number)); if (array_double == NULL) return NULL; for (i=0; i < n; i++) { if (!_cmsRead15Fixed16Number(io, &array_double[i])) { _cmsFree(self ->ContextID, array_double); return NULL; } } *nItems = n; return (void*) array_double; } static cmsBool Type_S15Fixed16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsFloat64Number* Value = (cmsFloat64Number*) Ptr; cmsUInt32Number i; for (i=0; i < nItems; i++) { if (!_cmsWrite15Fixed16Number(io, Value[i])) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(self); } static void* Type_S15Fixed16_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsFloat64Number)); } static void Type_S15Fixed16_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigU16Fixed16ArrayType // ******************************************************************************** // This type represents an array of generic 4-byte/32-bit quantity. // The number of values is determined from the size of the tag. static void *Type_U16Fixed16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsFloat64Number* array_double; cmsUInt32Number v; cmsUInt32Number i, n; *nItems = 0; n = SizeOfTag / sizeof(cmsUInt32Number); array_double = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, n, sizeof(cmsFloat64Number)); if (array_double == NULL) return NULL; for (i=0; i < n; i++) { if (!_cmsReadUInt32Number(io, &v)) { _cmsFree(self ->ContextID, (void*) array_double); return NULL; } // Convert to cmsFloat64Number array_double[i] = (cmsFloat64Number) (v / 65536.0); } *nItems = n; return (void*) array_double; } static cmsBool Type_U16Fixed16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsFloat64Number* Value = (cmsFloat64Number*) Ptr; cmsUInt32Number i; for (i=0; i < nItems; i++) { cmsUInt32Number v = (cmsUInt32Number) floor(Value[i]*65536.0 + 0.5); if (!_cmsWriteUInt32Number(io, v)) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(self); } static void* Type_U16Fixed16_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsFloat64Number)); } static void Type_U16Fixed16_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigSignatureType // ******************************************************************************** // // The signatureType contains a four-byte sequence, Sequences of less than four // characters are padded at the end with spaces, 20h. // Typically this type is used for registered tags that can be displayed on many // development systems as a sequence of four characters. static void *Type_Signature_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsSignature* SigPtr = (cmsSignature*) _cmsMalloc(self ->ContextID, sizeof(cmsSignature)); if (SigPtr == NULL) return NULL; if (!_cmsReadUInt32Number(io, SigPtr)) return NULL; *nItems = 1; return SigPtr; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_Signature_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsSignature* SigPtr = (cmsSignature*) Ptr; return _cmsWriteUInt32Number(io, *SigPtr); cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_Signature_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, n * sizeof(cmsSignature)); } static void Type_Signature_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigTextType // ******************************************************************************** // // The textType is a simple text structure that contains a 7-bit ASCII text string. // The length of the string is obtained by subtracting 8 from the element size portion // of the tag itself. This string must be terminated with a 00h byte. static void *Type_Text_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { char* Text = NULL; cmsMLU* mlu = NULL; // Create a container mlu = cmsMLUalloc(self ->ContextID, 1); if (mlu == NULL) return NULL; *nItems = 0; // We need to store the "\0" at the end, so +1 if (SizeOfTag == UINT_MAX) goto Error; Text = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1); if (Text == NULL) goto Error; if (io -> Read(io, Text, sizeof(char), SizeOfTag) != SizeOfTag) goto Error; // Make sure text is properly ended Text[SizeOfTag] = 0; *nItems = 1; // Keep the result if (!cmsMLUsetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text)) goto Error; _cmsFree(self ->ContextID, Text); return (void*) mlu; Error: if (mlu != NULL) cmsMLUfree(mlu); if (Text != NULL) _cmsFree(self ->ContextID, Text); return NULL; } // The conversion implies to choose a language. So, we choose the actual language. static cmsBool Type_Text_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsMLU* mlu = (cmsMLU*) Ptr; cmsUInt32Number size; cmsBool rc; char* Text; // Get the size of the string. Note there is an extra "\0" at the end size = cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, NULL, 0); if (size == 0) return FALSE; // Cannot be zero! // Create memory Text = (char*) _cmsMalloc(self ->ContextID, size); if (Text == NULL) return FALSE; cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text, size); // Write it, including separator rc = io ->Write(io, size, Text); _cmsFree(self ->ContextID, Text); return rc; cmsUNUSED_PARAMETER(nItems); } static void* Type_Text_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsMLUdup((cmsMLU*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_Text_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsMLU* mlu = (cmsMLU*) Ptr; cmsMLUfree(mlu); return; cmsUNUSED_PARAMETER(self); } static cmsTagTypeSignature DecideTextType(cmsFloat64Number ICCVersion, const void *Data) { if (ICCVersion >= 4.0) return cmsSigMultiLocalizedUnicodeType; return cmsSigTextType; cmsUNUSED_PARAMETER(Data); } // ******************************************************************************** // Type cmsSigDataType // ******************************************************************************** // General purpose data type static void *Type_Data_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsICCData* BinData; cmsUInt32Number LenOfData; *nItems = 0; if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; LenOfData = SizeOfTag - sizeof(cmsUInt32Number); if (LenOfData > INT_MAX) return NULL; BinData = (cmsICCData*) _cmsMalloc(self ->ContextID, sizeof(cmsICCData) + LenOfData - 1); if (BinData == NULL) return NULL; BinData ->len = LenOfData; if (!_cmsReadUInt32Number(io, &BinData->flag)) { _cmsFree(self ->ContextID, BinData); return NULL; } if (io -> Read(io, BinData ->data, sizeof(cmsUInt8Number), LenOfData) != LenOfData) { _cmsFree(self ->ContextID, BinData); return NULL; } *nItems = 1; return (void*) BinData; } static cmsBool Type_Data_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsICCData* BinData = (cmsICCData*) Ptr; if (!_cmsWriteUInt32Number(io, BinData ->flag)) return FALSE; return io ->Write(io, BinData ->len, BinData ->data); cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_Data_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { cmsICCData* BinData = (cmsICCData*) Ptr; return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsICCData) + BinData ->len - 1); cmsUNUSED_PARAMETER(n); } static void Type_Data_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigTextDescriptionType // ******************************************************************************** static void *Type_Text_Description_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { char* Text = NULL; cmsMLU* mlu = NULL; cmsUInt32Number AsciiCount; cmsUInt32Number i, UnicodeCode, UnicodeCount; cmsUInt16Number ScriptCodeCode, Dummy; cmsUInt8Number ScriptCodeCount; *nItems = 0; // One dword should be there if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; // Read len of ASCII if (!_cmsReadUInt32Number(io, &AsciiCount)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); // Check for size if (SizeOfTag < AsciiCount) return NULL; // All seems Ok, allocate the container mlu = cmsMLUalloc(self ->ContextID, 1); if (mlu == NULL) return NULL; // As many memory as size of tag Text = (char*) _cmsMalloc(self ->ContextID, AsciiCount + 1); if (Text == NULL) goto Error; // Read it if (io ->Read(io, Text, sizeof(char), AsciiCount) != AsciiCount) goto Error; SizeOfTag -= AsciiCount; // Make sure there is a terminator Text[AsciiCount] = 0; // Set the MLU entry. From here we can be tolerant to wrong types if (!cmsMLUsetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text)) goto Error; _cmsFree(self ->ContextID, (void*) Text); Text = NULL; // Skip Unicode code if (SizeOfTag < 2* sizeof(cmsUInt32Number)) goto Done; if (!_cmsReadUInt32Number(io, &UnicodeCode)) goto Done; if (!_cmsReadUInt32Number(io, &UnicodeCount)) goto Done; SizeOfTag -= 2* sizeof(cmsUInt32Number); if (SizeOfTag < UnicodeCount*sizeof(cmsUInt16Number)) goto Done; for (i=0; i < UnicodeCount; i++) { if (!io ->Read(io, &Dummy, sizeof(cmsUInt16Number), 1)) goto Done; } SizeOfTag -= UnicodeCount*sizeof(cmsUInt16Number); // Skip ScriptCode code if present. Some buggy profiles does have less // data that stricttly required. We need to skip it as this type may come // embedded in other types. if (SizeOfTag >= sizeof(cmsUInt16Number) + sizeof(cmsUInt8Number) + 67) { if (!_cmsReadUInt16Number(io, &ScriptCodeCode)) goto Done; if (!_cmsReadUInt8Number(io, &ScriptCodeCount)) goto Done; // Skip rest of tag for (i=0; i < 67; i++) { if (!io ->Read(io, &Dummy, sizeof(cmsUInt8Number), 1)) goto Error; } } Done: *nItems = 1; return mlu; Error: if (Text) _cmsFree(self ->ContextID, (void*) Text); if (mlu) cmsMLUfree(mlu); return NULL; } // This tag can come IN UNALIGNED SIZE. In order to prevent issues, we force zeros on description to align it static cmsBool Type_Text_Description_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsMLU* mlu = (cmsMLU*) Ptr; char *Text = NULL; wchar_t *Wide = NULL; cmsUInt32Number len, len_text, len_tag_requirement, len_aligned; cmsBool rc = FALSE; char Filler[68]; // Used below for writing zeroes memset(Filler, 0, sizeof(Filler)); // Get the len of string len = cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, NULL, 0); // Specification ICC.1:2001-04 (v2.4.0): It has been found that textDescriptionType can contain misaligned data //(see clause 4.1 for the definition of 'aligned'). Because the Unicode language // code and Unicode count immediately follow the ASCII description, their // alignment is not correct if the ASCII count is not a multiple of four. The // ScriptCode code is misaligned when the ASCII count is odd. Profile reading and // writing software must be written carefully in order to handle these alignment // problems. // // The above last sentence suggest to handle alignment issues in the // parser. The provided example (Table 69 on Page 60) makes this clear. // The padding only in the ASCII count is not sufficient for a aligned tag // size, with the same text size in ASCII and Unicode. // Null strings if (len <= 0) { Text = (char*) _cmsDupMem(self ->ContextID, "", sizeof(char)); Wide = (wchar_t*) _cmsDupMem(self ->ContextID, L"", sizeof(wchar_t)); } else { // Create independent buffers Text = (char*) _cmsCalloc(self ->ContextID, len, sizeof(char)); if (Text == NULL) goto Error; Wide = (wchar_t*) _cmsCalloc(self ->ContextID, len, sizeof(wchar_t)); if (Wide == NULL) goto Error; // Get both representations. cmsMLUgetASCII(mlu, cmsNoLanguage, cmsNoCountry, Text, len * sizeof(char)); cmsMLUgetWide(mlu, cmsNoLanguage, cmsNoCountry, Wide, len * sizeof(wchar_t)); } // Tell the real text len including the null terminator and padding len_text = (cmsUInt32Number) strlen(Text) + 1; // Compute an total tag size requirement len_tag_requirement = (8+4+len_text+4+4+2*len_text+2+1+67); len_aligned = _cmsALIGNLONG(len_tag_requirement); // * cmsUInt32Number count; * Description length // * cmsInt8Number desc[count] * NULL terminated ascii string // * cmsUInt32Number ucLangCode; * UniCode language code // * cmsUInt32Number ucCount; * UniCode description length // * cmsInt16Number ucDesc[ucCount];* The UniCode description // * cmsUInt16Number scCode; * ScriptCode code // * cmsUInt8Number scCount; * ScriptCode count // * cmsInt8Number scDesc[67]; * ScriptCode Description if (!_cmsWriteUInt32Number(io, len_text)) goto Error; if (!io ->Write(io, len_text, Text)) goto Error; if (!_cmsWriteUInt32Number(io, 0)) goto Error; // ucLanguageCode if (!_cmsWriteUInt32Number(io, len_text)) goto Error; // Note that in some compilers sizeof(cmsUInt16Number) != sizeof(wchar_t) if (!_cmsWriteWCharArray(io, len_text, Wide)) goto Error; // ScriptCode Code & count (unused) if (!_cmsWriteUInt16Number(io, 0)) goto Error; if (!_cmsWriteUInt8Number(io, 0)) goto Error; if (!io ->Write(io, 67, Filler)) goto Error; // possibly add pad at the end of tag if(len_aligned - len_tag_requirement > 0) if (!io ->Write(io, len_aligned - len_tag_requirement, Filler)) goto Error; rc = TRUE; Error: if (Text) _cmsFree(self ->ContextID, Text); if (Wide) _cmsFree(self ->ContextID, Wide); return rc; cmsUNUSED_PARAMETER(nItems); } static void* Type_Text_Description_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsMLUdup((cmsMLU*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_Text_Description_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsMLU* mlu = (cmsMLU*) Ptr; cmsMLUfree(mlu); return; cmsUNUSED_PARAMETER(self); } static cmsTagTypeSignature DecideTextDescType(cmsFloat64Number ICCVersion, const void *Data) { if (ICCVersion >= 4.0) return cmsSigMultiLocalizedUnicodeType; return cmsSigTextDescriptionType; cmsUNUSED_PARAMETER(Data); } // ******************************************************************************** // Type cmsSigCurveType // ******************************************************************************** static void *Type_Curve_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt32Number Count; cmsToneCurve* NewGamma; *nItems = 0; if (!_cmsReadUInt32Number(io, &Count)) return NULL; switch (Count) { case 0: // Linear. { cmsFloat64Number SingleGamma = 1.0; NewGamma = cmsBuildParametricToneCurve(self ->ContextID, 1, &SingleGamma); if (!NewGamma) return NULL; *nItems = 1; return NewGamma; } case 1: // Specified as the exponent of gamma function { cmsUInt16Number SingleGammaFixed; cmsFloat64Number SingleGamma; if (!_cmsReadUInt16Number(io, &SingleGammaFixed)) return NULL; SingleGamma = _cms8Fixed8toDouble(SingleGammaFixed); *nItems = 1; return cmsBuildParametricToneCurve(self ->ContextID, 1, &SingleGamma); } default: // Curve if (Count > 0x7FFF) return NULL; // This is to prevent bad guys for doing bad things NewGamma = cmsBuildTabulatedToneCurve16(self ->ContextID, Count, NULL); if (!NewGamma) return NULL; if (!_cmsReadUInt16Array(io, Count, NewGamma -> Table16)) { cmsFreeToneCurve(NewGamma); return NULL; } *nItems = 1; return NewGamma; } cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_Curve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsToneCurve* Curve = (cmsToneCurve*) Ptr; if (Curve ->nSegments == 1 && Curve ->Segments[0].Type == 1) { // Single gamma, preserve number cmsUInt16Number SingleGammaFixed = _cmsDoubleTo8Fixed8(Curve ->Segments[0].Params[0]); if (!_cmsWriteUInt32Number(io, 1)) return FALSE; if (!_cmsWriteUInt16Number(io, SingleGammaFixed)) return FALSE; return TRUE; } if (!_cmsWriteUInt32Number(io, Curve ->nEntries)) return FALSE; return _cmsWriteUInt16Array(io, Curve ->nEntries, Curve ->Table16); cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_Curve_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsDupToneCurve((cmsToneCurve*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_Curve_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsToneCurve* gamma = (cmsToneCurve*) Ptr; cmsFreeToneCurve(gamma); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigParametricCurveType // ******************************************************************************** // Decide which curve type to use on writing static cmsTagTypeSignature DecideCurveType(cmsFloat64Number ICCVersion, const void *Data) { cmsToneCurve* Curve = (cmsToneCurve*) Data; if (ICCVersion < 4.0) return cmsSigCurveType; if (Curve ->nSegments != 1) return cmsSigCurveType; // Only 1-segment curves can be saved as parametric if (Curve ->Segments[0].Type < 0) return cmsSigCurveType; // Only non-inverted curves if (Curve ->Segments[0].Type > 5) return cmsSigCurveType; // Only ICC parametric curves return cmsSigParametricCurveType; } static void *Type_ParametricCurve_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { static const int ParamsByType[] = { 1, 3, 4, 5, 7 }; cmsFloat64Number Params[10]; cmsUInt16Number Type; int i, n; cmsToneCurve* NewGamma; if (!_cmsReadUInt16Number(io, &Type)) return NULL; if (!_cmsReadUInt16Number(io, NULL)) return NULL; // Reserved if (Type > 4) { cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown parametric curve type '%d'", Type); return NULL; } memset(Params, 0, sizeof(Params)); n = ParamsByType[Type]; for (i=0; i < n; i++) { if (!_cmsRead15Fixed16Number(io, &Params[i])) return NULL; } NewGamma = cmsBuildParametricToneCurve(self ->ContextID, Type+1, Params); *nItems = 1; return NewGamma; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_ParametricCurve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsToneCurve* Curve = (cmsToneCurve*) Ptr; int i, nParams, typen; static const int ParamsByType[] = { 0, 1, 3, 4, 5, 7 }; typen = Curve -> Segments[0].Type; if (Curve ->nSegments > 1 || typen < 1) { cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Multisegment or Inverted parametric curves cannot be written"); return FALSE; } if (typen > 5) { cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported parametric curve"); return FALSE; } nParams = ParamsByType[typen]; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) (Curve ->Segments[0].Type - 1))) return FALSE; if (!_cmsWriteUInt16Number(io, 0)) return FALSE; // Reserved for (i=0; i < nParams; i++) { if (!_cmsWrite15Fixed16Number(io, Curve -> Segments[0].Params[i])) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_ParametricCurve_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsDupToneCurve((cmsToneCurve*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_ParametricCurve_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsToneCurve* gamma = (cmsToneCurve*) Ptr; cmsFreeToneCurve(gamma); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigDateTimeType // ******************************************************************************** // A 12-byte value representation of the time and date, where the byte usage is assigned // as specified in table 1. The actual values are encoded as 16-bit unsigned integers // (uInt16Number - see 5.1.6). // // All the dateTimeNumber values in a profile shall be in Coordinated Universal Time // (UTC, also known as GMT or ZULU Time). Profile writers are required to convert local // time to UTC when setting these values. Programmes that display these values may show // the dateTimeNumber as UTC, show the equivalent local time (at current locale), or // display both UTC and local versions of the dateTimeNumber. static void *Type_DateTime_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsDateTimeNumber timestamp; struct tm * NewDateTime; *nItems = 0; NewDateTime = (struct tm*) _cmsMalloc(self ->ContextID, sizeof(struct tm)); if (NewDateTime == NULL) return NULL; if (io->Read(io, ×tamp, sizeof(cmsDateTimeNumber), 1) != 1) return NULL; _cmsDecodeDateTimeNumber(×tamp, NewDateTime); *nItems = 1; return NewDateTime; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_DateTime_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { struct tm * DateTime = (struct tm*) Ptr; cmsDateTimeNumber timestamp; _cmsEncodeDateTimeNumber(×tamp, DateTime); if (!io ->Write(io, sizeof(cmsDateTimeNumber), ×tamp)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_DateTime_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, sizeof(struct tm)); cmsUNUSED_PARAMETER(n); } static void Type_DateTime_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type icMeasurementType // ******************************************************************************** /* The measurementType information refers only to the internal profile data and is meant to provide profile makers an alternative to the default measurement specifications. */ static void *Type_Measurement_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsICCMeasurementConditions mc; memset(&mc, 0, sizeof(mc)); if (!_cmsReadUInt32Number(io, &mc.Observer)) return NULL; if (!_cmsReadXYZNumber(io, &mc.Backing)) return NULL; if (!_cmsReadUInt32Number(io, &mc.Geometry)) return NULL; if (!_cmsRead15Fixed16Number(io, &mc.Flare)) return NULL; if (!_cmsReadUInt32Number(io, &mc.IlluminantType)) return NULL; *nItems = 1; return _cmsDupMem(self ->ContextID, &mc, sizeof(cmsICCMeasurementConditions)); cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_Measurement_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsICCMeasurementConditions* mc =(cmsICCMeasurementConditions*) Ptr; if (!_cmsWriteUInt32Number(io, mc->Observer)) return FALSE; if (!_cmsWriteXYZNumber(io, &mc->Backing)) return FALSE; if (!_cmsWriteUInt32Number(io, mc->Geometry)) return FALSE; if (!_cmsWrite15Fixed16Number(io, mc->Flare)) return FALSE; if (!_cmsWriteUInt32Number(io, mc->IlluminantType)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_Measurement_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsICCMeasurementConditions)); cmsUNUSED_PARAMETER(n); } static void Type_Measurement_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigMultiLocalizedUnicodeType // ******************************************************************************** // // Do NOT trust SizeOfTag as there is an issue on the definition of profileSequenceDescTag. See the TechNote from // Max Derhak and Rohit Patil about this: basically the size of the string table should be guessed and cannot be // taken from the size of tag if this tag is embedded as part of bigger structures (profileSequenceDescTag, for instance) // static void *Type_MLU_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsMLU* mlu; cmsUInt32Number Count, RecLen, NumOfWchar; cmsUInt32Number SizeOfHeader; cmsUInt32Number Len, Offset; cmsUInt32Number i; wchar_t* Block; cmsUInt32Number BeginOfThisString, EndOfThisString, LargestPosition; *nItems = 0; if (!_cmsReadUInt32Number(io, &Count)) return NULL; if (!_cmsReadUInt32Number(io, &RecLen)) return NULL; if (RecLen != 12) { cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "multiLocalizedUnicodeType of len != 12 is not supported."); return NULL; } mlu = cmsMLUalloc(self ->ContextID, Count); if (mlu == NULL) return NULL; mlu ->UsedEntries = Count; SizeOfHeader = 12 * Count + sizeof(_cmsTagBase); LargestPosition = 0; for (i=0; i < Count; i++) { if (!_cmsReadUInt16Number(io, &mlu ->Entries[i].Language)) goto Error; if (!_cmsReadUInt16Number(io, &mlu ->Entries[i].Country)) goto Error; // Now deal with Len and offset. if (!_cmsReadUInt32Number(io, &Len)) goto Error; if (!_cmsReadUInt32Number(io, &Offset)) goto Error; // Check for overflow if (Offset < (SizeOfHeader + 8)) goto Error; if (((Offset + Len) < Len) || ((Offset + Len) > SizeOfTag + 8)) goto Error; // True begin of the string BeginOfThisString = Offset - SizeOfHeader - 8; // Adjust to wchar_t elements mlu ->Entries[i].Len = (Len * sizeof(wchar_t)) / sizeof(cmsUInt16Number); mlu ->Entries[i].StrW = (BeginOfThisString * sizeof(wchar_t)) / sizeof(cmsUInt16Number); // To guess maximum size, add offset + len EndOfThisString = BeginOfThisString + Len; if (EndOfThisString > LargestPosition) LargestPosition = EndOfThisString; } // Now read the remaining of tag and fill all strings. Subtract the directory SizeOfTag = (LargestPosition * sizeof(wchar_t)) / sizeof(cmsUInt16Number); if (SizeOfTag == 0) { Block = NULL; NumOfWchar = 0; } else { Block = (wchar_t*) _cmsMalloc(self ->ContextID, SizeOfTag); if (Block == NULL) goto Error; NumOfWchar = SizeOfTag / sizeof(wchar_t); if (!_cmsReadWCharArray(io, NumOfWchar, Block)) goto Error; } mlu ->MemPool = Block; mlu ->PoolSize = SizeOfTag; mlu ->PoolUsed = SizeOfTag; *nItems = 1; return (void*) mlu; Error: if (mlu) cmsMLUfree(mlu); return NULL; } static cmsBool Type_MLU_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsMLU* mlu =(cmsMLU*) Ptr; cmsUInt32Number HeaderSize; cmsUInt32Number Len, Offset; cmsUInt32Number i; if (Ptr == NULL) { // Empty placeholder if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 12)) return FALSE; return TRUE; } if (!_cmsWriteUInt32Number(io, mlu ->UsedEntries)) return FALSE; if (!_cmsWriteUInt32Number(io, 12)) return FALSE; HeaderSize = 12 * mlu ->UsedEntries + sizeof(_cmsTagBase); for (i=0; i < mlu ->UsedEntries; i++) { Len = mlu ->Entries[i].Len; Offset = mlu ->Entries[i].StrW; Len = (Len * sizeof(cmsUInt16Number)) / sizeof(wchar_t); Offset = (Offset * sizeof(cmsUInt16Number)) / sizeof(wchar_t) + HeaderSize + 8; if (!_cmsWriteUInt16Number(io, mlu ->Entries[i].Language)) return FALSE; if (!_cmsWriteUInt16Number(io, mlu ->Entries[i].Country)) return FALSE; if (!_cmsWriteUInt32Number(io, Len)) return FALSE; if (!_cmsWriteUInt32Number(io, Offset)) return FALSE; } if (!_cmsWriteWCharArray(io, mlu ->PoolUsed / sizeof(wchar_t), (wchar_t*) mlu ->MemPool)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_MLU_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsMLUdup((cmsMLU*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_MLU_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsMLUfree((cmsMLU*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigLut8Type // ******************************************************************************** // Decide which LUT type to use on writing static cmsTagTypeSignature DecideLUTtypeA2B(cmsFloat64Number ICCVersion, const void *Data) { cmsPipeline* Lut = (cmsPipeline*) Data; if (ICCVersion < 4.0) { if (Lut ->SaveAs8Bits) return cmsSigLut8Type; return cmsSigLut16Type; } else { return cmsSigLutAtoBType; } } static cmsTagTypeSignature DecideLUTtypeB2A(cmsFloat64Number ICCVersion, const void *Data) { cmsPipeline* Lut = (cmsPipeline*) Data; if (ICCVersion < 4.0) { if (Lut ->SaveAs8Bits) return cmsSigLut8Type; return cmsSigLut16Type; } else { return cmsSigLutBtoAType; } } /* This structure represents a colour transform using tables of 8-bit precision. This type contains four processing elements: a 3 by 3 matrix (which shall be the identity matrix unless the input colour space is XYZ), a set of one dimensional input tables, a multidimensional lookup table, and a set of one dimensional output tables. Data is processed using these elements via the following sequence: (matrix) -> (1d input tables) -> (multidimensional lookup table - CLUT) -> (1d output tables) Byte Position Field Length (bytes) Content Encoded as... 8 1 Number of Input Channels (i) uInt8Number 9 1 Number of Output Channels (o) uInt8Number 10 1 Number of CLUT grid points (identical for each side) (g) uInt8Number 11 1 Reserved for padding (fill with 00h) 12..15 4 Encoded e00 parameter s15Fixed16Number */ // Read 8 bit tables as gamma functions static cmsBool Read8bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsPipeline* lut, cmsUInt32Number nChannels) { cmsUInt8Number* Temp = NULL; cmsUInt32Number i, j; cmsToneCurve* Tables[cmsMAXCHANNELS]; if (nChannels > cmsMAXCHANNELS) return FALSE; if (nChannels <= 0) return FALSE; memset(Tables, 0, sizeof(Tables)); Temp = (cmsUInt8Number*) _cmsMalloc(ContextID, 256); if (Temp == NULL) return FALSE; for (i=0; i < nChannels; i++) { Tables[i] = cmsBuildTabulatedToneCurve16(ContextID, 256, NULL); if (Tables[i] == NULL) goto Error; } for (i=0; i < nChannels; i++) { if (io ->Read(io, Temp, 256, 1) != 1) goto Error; for (j=0; j < 256; j++) Tables[i]->Table16[j] = (cmsUInt16Number) FROM_8_TO_16(Temp[j]); } _cmsFree(ContextID, Temp); Temp = NULL; if (!cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, nChannels, Tables))) goto Error; for (i=0; i < nChannels; i++) cmsFreeToneCurve(Tables[i]); return TRUE; Error: for (i=0; i < nChannels; i++) { if (Tables[i]) cmsFreeToneCurve(Tables[i]); } if (Temp) _cmsFree(ContextID, Temp); return FALSE; } static cmsBool Write8bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsUInt32Number n, _cmsStageToneCurvesData* Tables) { int j; cmsUInt32Number i; cmsUInt8Number val; for (i=0; i < n; i++) { if (Tables) { // Usual case of identity curves if ((Tables ->TheCurves[i]->nEntries == 2) && (Tables->TheCurves[i]->Table16[0] == 0) && (Tables->TheCurves[i]->Table16[1] == 65535)) { for (j=0; j < 256; j++) { if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) j)) return FALSE; } } else if (Tables ->TheCurves[i]->nEntries != 256) { cmsSignalError(ContextID, cmsERROR_RANGE, "LUT8 needs 256 entries on prelinearization"); return FALSE; } else for (j=0; j < 256; j++) { val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]); if (!_cmsWriteUInt8Number(io, val)) return FALSE; } } } return TRUE; } // Check overflow static cmsUInt32Number uipow(cmsUInt32Number n, cmsUInt32Number a, cmsUInt32Number b) { cmsUInt32Number rv = 1, rc; if (a == 0) return 0; if (n == 0) return 0; for (; b > 0; b--) { rv *= a; // Check for overflow if (rv > UINT_MAX / a) return (cmsUInt32Number) -1; } rc = rv * n; if (rv != rc / n) return (cmsUInt32Number) -1; return rc; } // That will create a MPE LUT with Matrix, pre tables, CLUT and post tables. // 8 bit lut may be scaled easely to v4 PCS, but we need also to properly adjust // PCS on BToAxx tags and AtoB if abstract. We need to fix input direction. static void *Type_LUT8_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt8Number InputChannels, OutputChannels, CLUTpoints; cmsUInt8Number* Temp = NULL; cmsPipeline* NewLUT = NULL; cmsUInt32Number nTabSize, i; cmsFloat64Number Matrix[3*3]; *nItems = 0; if (!_cmsReadUInt8Number(io, &InputChannels)) goto Error; if (!_cmsReadUInt8Number(io, &OutputChannels)) goto Error; if (!_cmsReadUInt8Number(io, &CLUTpoints)) goto Error; if (CLUTpoints == 1) goto Error; // Impossible value, 0 for no CLUT and then 2 at least // Padding if (!_cmsReadUInt8Number(io, NULL)) goto Error; // Do some checking if (InputChannels == 0 || InputChannels > cmsMAXCHANNELS) goto Error; if (OutputChannels == 0 || OutputChannels > cmsMAXCHANNELS) goto Error; // Allocates an empty Pipeline NewLUT = cmsPipelineAlloc(self ->ContextID, InputChannels, OutputChannels); if (NewLUT == NULL) goto Error; // Read the Matrix if (!_cmsRead15Fixed16Number(io, &Matrix[0])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[1])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[2])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[3])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[4])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[5])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[6])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[7])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[8])) goto Error; // Only operates if not identity... if ((InputChannels == 3) && !_cmsMAT3isIdentity((cmsMAT3*) Matrix)) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_BEGIN, cmsStageAllocMatrix(self ->ContextID, 3, 3, Matrix, NULL))) goto Error; } // Get input tables if (!Read8bitTables(self ->ContextID, io, NewLUT, InputChannels)) goto Error; // Get 3D CLUT. Check the overflow.... nTabSize = uipow(OutputChannels, CLUTpoints, InputChannels); if (nTabSize == (cmsUInt32Number) -1) goto Error; if (nTabSize > 0) { cmsUInt16Number *PtrW, *T; PtrW = T = (cmsUInt16Number*) _cmsCalloc(self ->ContextID, nTabSize, sizeof(cmsUInt16Number)); if (T == NULL) goto Error; Temp = (cmsUInt8Number*) _cmsMalloc(self ->ContextID, nTabSize); if (Temp == NULL) { _cmsFree(self ->ContextID, T); goto Error; } if (io ->Read(io, Temp, nTabSize, 1) != 1) { _cmsFree(self ->ContextID, T); _cmsFree(self ->ContextID, Temp); goto Error; } for (i = 0; i < nTabSize; i++) { *PtrW++ = FROM_8_TO_16(Temp[i]); } _cmsFree(self ->ContextID, Temp); Temp = NULL; if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, cmsStageAllocCLut16bit(self ->ContextID, CLUTpoints, InputChannels, OutputChannels, T))) { _cmsFree(self ->ContextID, T); goto Error; } _cmsFree(self ->ContextID, T); } // Get output tables if (!Read8bitTables(self ->ContextID, io, NewLUT, OutputChannels)) goto Error; *nItems = 1; return NewLUT; Error: if (NewLUT != NULL) cmsPipelineFree(NewLUT); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // We only allow a specific MPE structure: Matrix plus prelin, plus clut, plus post-lin. static cmsBool Type_LUT8_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt32Number j, nTabSize, i, n; cmsUInt8Number val; cmsPipeline* NewLUT = (cmsPipeline*) Ptr; cmsStage* mpe; _cmsStageToneCurvesData* PreMPE = NULL, *PostMPE = NULL; _cmsStageMatrixData* MatMPE = NULL; _cmsStageCLutData* clut = NULL; cmsUInt32Number clutPoints; // Disassemble the LUT into components. mpe = NewLUT -> Elements; if (mpe ->Type == cmsSigMatrixElemType) { if (mpe->InputChannels != 3 || mpe->OutputChannels != 3) return FALSE; MatMPE = (_cmsStageMatrixData*) mpe ->Data; mpe = mpe -> Next; } if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { PreMPE = (_cmsStageToneCurvesData*) mpe ->Data; mpe = mpe -> Next; } if (mpe != NULL && mpe ->Type == cmsSigCLutElemType) { clut = (_cmsStageCLutData*) mpe -> Data; mpe = mpe ->Next; } if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { PostMPE = (_cmsStageToneCurvesData*) mpe ->Data; mpe = mpe -> Next; } // That should be all if (mpe != NULL) { cmsSignalError(mpe->ContextID, cmsERROR_UNKNOWN_EXTENSION, "LUT is not suitable to be saved as LUT8"); return FALSE; } if (clut == NULL) clutPoints = 0; else clutPoints = clut->Params->nSamples[0]; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) NewLUT ->InputChannels)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) NewLUT ->OutputChannels)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) clutPoints)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Padding n = NewLUT->InputChannels * NewLUT->OutputChannels; if (MatMPE != NULL) { for (i = 0; i < 9; i++) { if (!_cmsWrite15Fixed16Number(io, MatMPE->Double[i])) return FALSE; } } else { if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; } // The prelinearization table if (!Write8bitTables(self ->ContextID, io, NewLUT ->InputChannels, PreMPE)) return FALSE; nTabSize = uipow(NewLUT->OutputChannels, clutPoints, NewLUT ->InputChannels); if (nTabSize == (cmsUInt32Number) -1) return FALSE; if (nTabSize > 0) { // The 3D CLUT. if (clut != NULL) { for (j=0; j < nTabSize; j++) { val = (cmsUInt8Number) FROM_16_TO_8(clut ->Tab.T[j]); if (!_cmsWriteUInt8Number(io, val)) return FALSE; } } } // The postlinearization table if (!Write8bitTables(self ->ContextID, io, NewLUT ->OutputChannels, PostMPE)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_LUT8_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsPipelineDup((cmsPipeline*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_LUT8_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsPipelineFree((cmsPipeline*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigLut16Type // ******************************************************************************** // Read 16 bit tables as gamma functions static cmsBool Read16bitTables(cmsContext ContextID, cmsIOHANDLER* io, cmsPipeline* lut, cmsUInt32Number nChannels, cmsUInt32Number nEntries) { cmsUInt32Number i; cmsToneCurve* Tables[cmsMAXCHANNELS]; // Maybe an empty table? (this is a lcms extension) if (nEntries <= 0) return TRUE; // Check for malicious profiles if (nEntries < 2) return FALSE; if (nChannels > cmsMAXCHANNELS) return FALSE; // Init table to zero memset(Tables, 0, sizeof(Tables)); for (i=0; i < nChannels; i++) { Tables[i] = cmsBuildTabulatedToneCurve16(ContextID, nEntries, NULL); if (Tables[i] == NULL) goto Error; if (!_cmsReadUInt16Array(io, nEntries, Tables[i]->Table16)) goto Error; } // Add the table (which may certainly be an identity, but this is up to the optimizer, not the reading code) if (!cmsPipelineInsertStage(lut, cmsAT_END, cmsStageAllocToneCurves(ContextID, nChannels, Tables))) goto Error; for (i=0; i < nChannels; i++) cmsFreeToneCurve(Tables[i]); return TRUE; Error: for (i=0; i < nChannels; i++) { if (Tables[i]) cmsFreeToneCurve(Tables[i]); } return FALSE; } static cmsBool Write16bitTables(cmsContext ContextID, cmsIOHANDLER* io, _cmsStageToneCurvesData* Tables) { cmsUInt32Number j; cmsUInt32Number i; cmsUInt16Number val; cmsUInt32Number nEntries; _cmsAssert(Tables != NULL); nEntries = Tables->TheCurves[0]->nEntries; for (i=0; i < Tables ->nCurves; i++) { for (j=0; j < nEntries; j++) { val = Tables->TheCurves[i]->Table16[j]; if (!_cmsWriteUInt16Number(io, val)) return FALSE; } } return TRUE; cmsUNUSED_PARAMETER(ContextID); } static void *Type_LUT16_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt8Number InputChannels, OutputChannels, CLUTpoints; cmsPipeline* NewLUT = NULL; cmsUInt32Number nTabSize; cmsFloat64Number Matrix[3*3]; cmsUInt16Number InputEntries, OutputEntries; *nItems = 0; if (!_cmsReadUInt8Number(io, &InputChannels)) return NULL; if (!_cmsReadUInt8Number(io, &OutputChannels)) return NULL; if (!_cmsReadUInt8Number(io, &CLUTpoints)) return NULL; // 255 maximum // Padding if (!_cmsReadUInt8Number(io, NULL)) return NULL; // Do some checking if (InputChannels == 0 || InputChannels > cmsMAXCHANNELS) goto Error; if (OutputChannels == 0 || OutputChannels > cmsMAXCHANNELS) goto Error; // Allocates an empty LUT NewLUT = cmsPipelineAlloc(self ->ContextID, InputChannels, OutputChannels); if (NewLUT == NULL) goto Error; // Read the Matrix if (!_cmsRead15Fixed16Number(io, &Matrix[0])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[1])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[2])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[3])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[4])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[5])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[6])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[7])) goto Error; if (!_cmsRead15Fixed16Number(io, &Matrix[8])) goto Error; // Only operates on 3 channels if ((InputChannels == 3) && !_cmsMAT3isIdentity((cmsMAT3*) Matrix)) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, cmsStageAllocMatrix(self ->ContextID, 3, 3, Matrix, NULL))) goto Error; } if (!_cmsReadUInt16Number(io, &InputEntries)) goto Error; if (!_cmsReadUInt16Number(io, &OutputEntries)) goto Error; if (InputEntries > 0x7FFF || OutputEntries > 0x7FFF) goto Error; if (CLUTpoints == 1) goto Error; // Impossible value, 0 for no CLUT and then 2 at least // Get input tables if (!Read16bitTables(self ->ContextID, io, NewLUT, InputChannels, InputEntries)) goto Error; // Get 3D CLUT nTabSize = uipow(OutputChannels, CLUTpoints, InputChannels); if (nTabSize == (cmsUInt32Number) -1) goto Error; if (nTabSize > 0) { cmsUInt16Number *T; T = (cmsUInt16Number*) _cmsCalloc(self ->ContextID, nTabSize, sizeof(cmsUInt16Number)); if (T == NULL) goto Error; if (!_cmsReadUInt16Array(io, nTabSize, T)) { _cmsFree(self ->ContextID, T); goto Error; } if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, cmsStageAllocCLut16bit(self ->ContextID, CLUTpoints, InputChannels, OutputChannels, T))) { _cmsFree(self ->ContextID, T); goto Error; } _cmsFree(self ->ContextID, T); } // Get output tables if (!Read16bitTables(self ->ContextID, io, NewLUT, OutputChannels, OutputEntries)) goto Error; *nItems = 1; return NewLUT; Error: if (NewLUT != NULL) cmsPipelineFree(NewLUT); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // We only allow some specific MPE structures: Matrix plus prelin, plus clut, plus post-lin. // Some empty defaults are created for missing parts static cmsBool Type_LUT16_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt32Number nTabSize; cmsPipeline* NewLUT = (cmsPipeline*) Ptr; cmsStage* mpe; _cmsStageToneCurvesData* PreMPE = NULL, *PostMPE = NULL; _cmsStageMatrixData* MatMPE = NULL; _cmsStageCLutData* clut = NULL; cmsUInt32Number i, InputChannels, OutputChannels, clutPoints; // Disassemble the LUT into components. mpe = NewLUT -> Elements; if (mpe != NULL && mpe ->Type == cmsSigMatrixElemType) { MatMPE = (_cmsStageMatrixData*) mpe ->Data; if (mpe->InputChannels != 3 || mpe->OutputChannels != 3) return FALSE; mpe = mpe -> Next; } if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { PreMPE = (_cmsStageToneCurvesData*) mpe ->Data; mpe = mpe -> Next; } if (mpe != NULL && mpe ->Type == cmsSigCLutElemType) { clut = (_cmsStageCLutData*) mpe -> Data; mpe = mpe ->Next; } if (mpe != NULL && mpe ->Type == cmsSigCurveSetElemType) { PostMPE = (_cmsStageToneCurvesData*) mpe ->Data; mpe = mpe -> Next; } // That should be all if (mpe != NULL) { cmsSignalError(mpe->ContextID, cmsERROR_UNKNOWN_EXTENSION, "LUT is not suitable to be saved as LUT16"); return FALSE; } InputChannels = cmsPipelineInputChannels(NewLUT); OutputChannels = cmsPipelineOutputChannels(NewLUT); if (clut == NULL) clutPoints = 0; else clutPoints = clut->Params->nSamples[0]; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) InputChannels)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) OutputChannels)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) clutPoints)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Padding if (MatMPE != NULL) { for (i = 0; i < 9; i++) { if (!_cmsWrite15Fixed16Number(io, MatMPE->Double[i])) return FALSE; } } else { if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; if (!_cmsWrite15Fixed16Number(io, 1)) return FALSE; } if (PreMPE != NULL) { if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) PreMPE ->TheCurves[0]->nEntries)) return FALSE; } else { if (!_cmsWriteUInt16Number(io, 2)) return FALSE; } if (PostMPE != NULL) { if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) PostMPE ->TheCurves[0]->nEntries)) return FALSE; } else { if (!_cmsWriteUInt16Number(io, 2)) return FALSE; } // The prelinearization table if (PreMPE != NULL) { if (!Write16bitTables(self ->ContextID, io, PreMPE)) return FALSE; } else { for (i=0; i < InputChannels; i++) { if (!_cmsWriteUInt16Number(io, 0)) return FALSE; if (!_cmsWriteUInt16Number(io, 0xffff)) return FALSE; } } nTabSize = uipow(OutputChannels, clutPoints, InputChannels); if (nTabSize == (cmsUInt32Number) -1) return FALSE; if (nTabSize > 0) { // The 3D CLUT. if (clut != NULL) { if (!_cmsWriteUInt16Array(io, nTabSize, clut->Tab.T)) return FALSE; } } // The postlinearization table if (PostMPE != NULL) { if (!Write16bitTables(self ->ContextID, io, PostMPE)) return FALSE; } else { for (i=0; i < OutputChannels; i++) { if (!_cmsWriteUInt16Number(io, 0)) return FALSE; if (!_cmsWriteUInt16Number(io, 0xffff)) return FALSE; } } return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_LUT16_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsPipelineDup((cmsPipeline*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_LUT16_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsPipelineFree((cmsPipeline*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigLutAToBType // ******************************************************************************** // V4 stuff. Read matrix for LutAtoB and LutBtoA static cmsStage* ReadMatrix(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Offset) { cmsFloat64Number dMat[3*3]; cmsFloat64Number dOff[3]; cmsStage* Mat; // Go to address if (!io -> Seek(io, Offset)) return NULL; // Read the Matrix if (!_cmsRead15Fixed16Number(io, &dMat[0])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[1])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[2])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[3])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[4])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[5])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[6])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[7])) return NULL; if (!_cmsRead15Fixed16Number(io, &dMat[8])) return NULL; if (!_cmsRead15Fixed16Number(io, &dOff[0])) return NULL; if (!_cmsRead15Fixed16Number(io, &dOff[1])) return NULL; if (!_cmsRead15Fixed16Number(io, &dOff[2])) return NULL; Mat = cmsStageAllocMatrix(self ->ContextID, 3, 3, dMat, dOff); return Mat; } // V4 stuff. Read CLUT part for LutAtoB and LutBtoA static cmsStage* ReadCLUT(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Offset, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels) { cmsUInt8Number gridPoints8[cmsMAXCHANNELS]; // Number of grid points in each dimension. cmsUInt32Number GridPoints[cmsMAXCHANNELS], i; cmsUInt8Number Precision; cmsStage* CLUT; _cmsStageCLutData* Data; if (!io -> Seek(io, Offset)) return NULL; if (io -> Read(io, gridPoints8, cmsMAXCHANNELS, 1) != 1) return NULL; for (i=0; i < cmsMAXCHANNELS; i++) { if (gridPoints8[i] == 1) return NULL; // Impossible value, 0 for no CLUT and then 2 at least GridPoints[i] = gridPoints8[i]; } if (!_cmsReadUInt8Number(io, &Precision)) return NULL; if (!_cmsReadUInt8Number(io, NULL)) return NULL; if (!_cmsReadUInt8Number(io, NULL)) return NULL; if (!_cmsReadUInt8Number(io, NULL)) return NULL; CLUT = cmsStageAllocCLut16bitGranular(self ->ContextID, GridPoints, InputChannels, OutputChannels, NULL); if (CLUT == NULL) return NULL; Data = (_cmsStageCLutData*) CLUT ->Data; // Precision can be 1 or 2 bytes if (Precision == 1) { cmsUInt8Number v; for (i=0; i < Data ->nEntries; i++) { if (io ->Read(io, &v, sizeof(cmsUInt8Number), 1) != 1) { cmsStageFree(CLUT); return NULL; } Data ->Tab.T[i] = FROM_8_TO_16(v); } } else if (Precision == 2) { if (!_cmsReadUInt16Array(io, Data->nEntries, Data ->Tab.T)) { cmsStageFree(CLUT); return NULL; } } else { cmsStageFree(CLUT); cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown precision of '%d'", Precision); return NULL; } return CLUT; } static cmsToneCurve* ReadEmbeddedCurve(struct _cms_typehandler_struct* self, cmsIOHANDLER* io) { cmsTagTypeSignature BaseType; cmsUInt32Number nItems; BaseType = _cmsReadTypeBase(io); switch (BaseType) { case cmsSigCurveType: return (cmsToneCurve*) Type_Curve_Read(self, io, &nItems, 0); case cmsSigParametricCurveType: return (cmsToneCurve*) Type_ParametricCurve_Read(self, io, &nItems, 0); default: { char String[5]; _cmsTagSignature2String(String, (cmsTagSignature) BaseType); cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve type '%s'", String); } return NULL; } } // Read a set of curves from specific offset static cmsStage* ReadSetOfCurves(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number Offset, cmsUInt32Number nCurves) { cmsToneCurve* Curves[cmsMAXCHANNELS]; cmsUInt32Number i; cmsStage* Lin = NULL; if (nCurves > cmsMAXCHANNELS) return FALSE; if (!io -> Seek(io, Offset)) return FALSE; for (i=0; i < nCurves; i++) Curves[i] = NULL; for (i=0; i < nCurves; i++) { Curves[i] = ReadEmbeddedCurve(self, io); if (Curves[i] == NULL) goto Error; if (!_cmsReadAlignment(io)) goto Error; } Lin = cmsStageAllocToneCurves(self ->ContextID, nCurves, Curves); Error: for (i=0; i < nCurves; i++) cmsFreeToneCurve(Curves[i]); return Lin; } // LutAtoB type // This structure represents a colour transform. The type contains up to five processing // elements which are stored in the AtoBTag tag in the following order: a set of one // dimensional curves, a 3 by 3 matrix with offset terms, a set of one dimensional curves, // a multidimensional lookup table, and a set of one dimensional output curves. // Data are processed using these elements via the following sequence: // //("A" curves) -> (multidimensional lookup table - CLUT) -> ("M" curves) -> (matrix) -> ("B" curves). // /* It is possible to use any or all of these processing elements. At least one processing element must be included.Only the following combinations are allowed: B M - Matrix - B A - CLUT - B A - CLUT - M - Matrix - B */ static void* Type_LUTA2B_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt32Number BaseOffset; cmsUInt8Number inputChan; // Number of input channels cmsUInt8Number outputChan; // Number of output channels cmsUInt32Number offsetB; // Offset to first "B" curve cmsUInt32Number offsetMat; // Offset to matrix cmsUInt32Number offsetM; // Offset to first "M" curve cmsUInt32Number offsetC; // Offset to CLUT cmsUInt32Number offsetA; // Offset to first "A" curve cmsPipeline* NewLUT = NULL; BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); if (!_cmsReadUInt8Number(io, &inputChan)) return NULL; if (!_cmsReadUInt8Number(io, &outputChan)) return NULL; if (!_cmsReadUInt16Number(io, NULL)) return NULL; if (!_cmsReadUInt32Number(io, &offsetB)) return NULL; if (!_cmsReadUInt32Number(io, &offsetMat)) return NULL; if (!_cmsReadUInt32Number(io, &offsetM)) return NULL; if (!_cmsReadUInt32Number(io, &offsetC)) return NULL; if (!_cmsReadUInt32Number(io, &offsetA)) return NULL; if (inputChan == 0 || inputChan >= cmsMAXCHANNELS) return NULL; if (outputChan == 0 || outputChan >= cmsMAXCHANNELS) return NULL; // Allocates an empty LUT NewLUT = cmsPipelineAlloc(self ->ContextID, inputChan, outputChan); if (NewLUT == NULL) return NULL; if (offsetA!= 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadSetOfCurves(self, io, BaseOffset + offsetA, inputChan))) goto Error; } if (offsetC != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadCLUT(self, io, BaseOffset + offsetC, inputChan, outputChan))) goto Error; } if (offsetM != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadSetOfCurves(self, io, BaseOffset + offsetM, outputChan))) goto Error; } if (offsetMat != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadMatrix(self, io, BaseOffset + offsetMat))) goto Error; } if (offsetB != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadSetOfCurves(self, io, BaseOffset + offsetB, outputChan))) goto Error; } *nItems = 1; return NewLUT; Error: cmsPipelineFree(NewLUT); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // Write a set of curves static cmsBool WriteMatrix(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsStage* mpe) { cmsUInt32Number i, n; _cmsStageMatrixData* m = (_cmsStageMatrixData*) mpe -> Data; n = mpe->InputChannels * mpe->OutputChannels; // Write the Matrix for (i = 0; i < n; i++) { if (!_cmsWrite15Fixed16Number(io, m->Double[i])) return FALSE; } if (m->Offset != NULL) { for (i = 0; i < mpe->OutputChannels; i++) { if (!_cmsWrite15Fixed16Number(io, m->Offset[i])) return FALSE; } } else { for (i = 0; i < mpe->OutputChannels; i++) { if (!_cmsWrite15Fixed16Number(io, 0)) return FALSE; } } return TRUE; cmsUNUSED_PARAMETER(self); } // Write a set of curves static cmsBool WriteSetOfCurves(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsTagTypeSignature Type, cmsStage* mpe) { cmsUInt32Number i, n; cmsTagTypeSignature CurrentType; cmsToneCurve** Curves; n = cmsStageOutputChannels(mpe); Curves = _cmsStageGetPtrToCurveSet(mpe); for (i=0; i < n; i++) { // If this is a table-based curve, use curve type even on V4 CurrentType = Type; if ((Curves[i] ->nSegments == 0)|| ((Curves[i]->nSegments == 2) && (Curves[i] ->Segments[1].Type == 0)) ) CurrentType = cmsSigCurveType; else if (Curves[i] ->Segments[0].Type < 0) CurrentType = cmsSigCurveType; if (!_cmsWriteTypeBase(io, CurrentType)) return FALSE; switch (CurrentType) { case cmsSigCurveType: if (!Type_Curve_Write(self, io, Curves[i], 1)) return FALSE; break; case cmsSigParametricCurveType: if (!Type_ParametricCurve_Write(self, io, Curves[i], 1)) return FALSE; break; default: { char String[5]; _cmsTagSignature2String(String, (cmsTagSignature) Type); cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve type '%s'", String); } return FALSE; } if (!_cmsWriteAlignment(io)) return FALSE; } return TRUE; } static cmsBool WriteCLUT(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt8Number Precision, cmsStage* mpe) { cmsUInt8Number gridPoints[cmsMAXCHANNELS]; // Number of grid points in each dimension. cmsUInt32Number i; _cmsStageCLutData* CLUT = ( _cmsStageCLutData*) mpe -> Data; if (CLUT ->HasFloatValues) { cmsSignalError(self ->ContextID, cmsERROR_NOT_SUITABLE, "Cannot save floating point data, CLUT are 8 or 16 bit only"); return FALSE; } memset(gridPoints, 0, sizeof(gridPoints)); for (i=0; i < (cmsUInt32Number) CLUT ->Params ->nInputs; i++) gridPoints[i] = (cmsUInt8Number) CLUT ->Params ->nSamples[i]; if (!io -> Write(io, cmsMAXCHANNELS*sizeof(cmsUInt8Number), gridPoints)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) Precision)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; if (!_cmsWriteUInt8Number(io, 0)) return FALSE; // Precision can be 1 or 2 bytes if (Precision == 1) { for (i=0; i < CLUT->nEntries; i++) { if (!_cmsWriteUInt8Number(io, FROM_16_TO_8(CLUT->Tab.T[i]))) return FALSE; } } else if (Precision == 2) { if (!_cmsWriteUInt16Array(io, CLUT->nEntries, CLUT ->Tab.T)) return FALSE; } else { cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown precision of '%d'", Precision); return FALSE; } if (!_cmsWriteAlignment(io)) return FALSE; return TRUE; } static cmsBool Type_LUTA2B_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsPipeline* Lut = (cmsPipeline*) Ptr; cmsUInt32Number inputChan, outputChan; cmsStage *A = NULL, *B = NULL, *M = NULL; cmsStage * Matrix = NULL; cmsStage * CLUT = NULL; cmsUInt32Number offsetB = 0, offsetMat = 0, offsetM = 0, offsetC = 0, offsetA = 0; cmsUInt32Number BaseOffset, DirectoryPos, CurrentPos; // Get the base for all offsets BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); if (Lut ->Elements != NULL) if (!cmsPipelineCheckAndRetreiveStages(Lut, 1, cmsSigCurveSetElemType, &B)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &M, &Matrix, &B)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &A, &CLUT, &B)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 5, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &A, &CLUT, &M, &Matrix, &B)) { cmsSignalError(self->ContextID, cmsERROR_NOT_SUITABLE, "LUT is not suitable to be saved as LutAToB"); return FALSE; } // Get input, output channels inputChan = cmsPipelineInputChannels(Lut); outputChan = cmsPipelineOutputChannels(Lut); // Write channel count if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) inputChan)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) outputChan)) return FALSE; if (!_cmsWriteUInt16Number(io, 0)) return FALSE; // Keep directory to be filled latter DirectoryPos = io ->Tell(io); // Write the directory if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (A != NULL) { offsetA = io ->Tell(io) - BaseOffset; if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, A)) return FALSE; } if (CLUT != NULL) { offsetC = io ->Tell(io) - BaseOffset; if (!WriteCLUT(self, io, (Lut ->SaveAs8Bits ? 1U : 2U), CLUT)) return FALSE; } if (M != NULL) { offsetM = io ->Tell(io) - BaseOffset; if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, M)) return FALSE; } if (Matrix != NULL) { offsetMat = io ->Tell(io) - BaseOffset; if (!WriteMatrix(self, io, Matrix)) return FALSE; } if (B != NULL) { offsetB = io ->Tell(io) - BaseOffset; if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, B)) return FALSE; } CurrentPos = io ->Tell(io); if (!io ->Seek(io, DirectoryPos)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetB)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetMat)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetM)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetC)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetA)) return FALSE; if (!io ->Seek(io, CurrentPos)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_LUTA2B_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsPipelineDup((cmsPipeline*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_LUTA2B_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsPipelineFree((cmsPipeline*) Ptr); return; cmsUNUSED_PARAMETER(self); } // LutBToA type static void* Type_LUTB2A_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt8Number inputChan; // Number of input channels cmsUInt8Number outputChan; // Number of output channels cmsUInt32Number BaseOffset; // Actual position in file cmsUInt32Number offsetB; // Offset to first "B" curve cmsUInt32Number offsetMat; // Offset to matrix cmsUInt32Number offsetM; // Offset to first "M" curve cmsUInt32Number offsetC; // Offset to CLUT cmsUInt32Number offsetA; // Offset to first "A" curve cmsPipeline* NewLUT = NULL; BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); if (!_cmsReadUInt8Number(io, &inputChan)) return NULL; if (!_cmsReadUInt8Number(io, &outputChan)) return NULL; if (inputChan == 0 || inputChan >= cmsMAXCHANNELS) return NULL; if (outputChan == 0 || outputChan >= cmsMAXCHANNELS) return NULL; // Padding if (!_cmsReadUInt16Number(io, NULL)) return NULL; if (!_cmsReadUInt32Number(io, &offsetB)) return NULL; if (!_cmsReadUInt32Number(io, &offsetMat)) return NULL; if (!_cmsReadUInt32Number(io, &offsetM)) return NULL; if (!_cmsReadUInt32Number(io, &offsetC)) return NULL; if (!_cmsReadUInt32Number(io, &offsetA)) return NULL; // Allocates an empty LUT NewLUT = cmsPipelineAlloc(self ->ContextID, inputChan, outputChan); if (NewLUT == NULL) return NULL; if (offsetB != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadSetOfCurves(self, io, BaseOffset + offsetB, inputChan))) goto Error; } if (offsetMat != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadMatrix(self, io, BaseOffset + offsetMat))) goto Error; } if (offsetM != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadSetOfCurves(self, io, BaseOffset + offsetM, inputChan))) goto Error; } if (offsetC != 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadCLUT(self, io, BaseOffset + offsetC, inputChan, outputChan))) goto Error; } if (offsetA!= 0) { if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, ReadSetOfCurves(self, io, BaseOffset + offsetA, outputChan))) goto Error; } *nItems = 1; return NewLUT; Error: cmsPipelineFree(NewLUT); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } /* B B - Matrix - M B - CLUT - A B - Matrix - M - CLUT - A */ static cmsBool Type_LUTB2A_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsPipeline* Lut = (cmsPipeline*) Ptr; cmsUInt32Number inputChan, outputChan; cmsStage *A = NULL, *B = NULL, *M = NULL; cmsStage *Matrix = NULL; cmsStage *CLUT = NULL; cmsUInt32Number offsetB = 0, offsetMat = 0, offsetM = 0, offsetC = 0, offsetA = 0; cmsUInt32Number BaseOffset, DirectoryPos, CurrentPos; BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); if (!cmsPipelineCheckAndRetreiveStages(Lut, 1, cmsSigCurveSetElemType, &B)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &B, &Matrix, &M)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 3, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &B, &CLUT, &A)) if (!cmsPipelineCheckAndRetreiveStages(Lut, 5, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, &B, &Matrix, &M, &CLUT, &A)) { cmsSignalError(self->ContextID, cmsERROR_NOT_SUITABLE, "LUT is not suitable to be saved as LutBToA"); return FALSE; } inputChan = cmsPipelineInputChannels(Lut); outputChan = cmsPipelineOutputChannels(Lut); if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) inputChan)) return FALSE; if (!_cmsWriteUInt8Number(io, (cmsUInt8Number) outputChan)) return FALSE; if (!_cmsWriteUInt16Number(io, 0)) return FALSE; DirectoryPos = io ->Tell(io); if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (A != NULL) { offsetA = io ->Tell(io) - BaseOffset; if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, A)) return FALSE; } if (CLUT != NULL) { offsetC = io ->Tell(io) - BaseOffset; if (!WriteCLUT(self, io, (Lut ->SaveAs8Bits ? 1U : 2U), CLUT)) return FALSE; } if (M != NULL) { offsetM = io ->Tell(io) - BaseOffset; if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, M)) return FALSE; } if (Matrix != NULL) { offsetMat = io ->Tell(io) - BaseOffset; if (!WriteMatrix(self, io, Matrix)) return FALSE; } if (B != NULL) { offsetB = io ->Tell(io) - BaseOffset; if (!WriteSetOfCurves(self, io, cmsSigParametricCurveType, B)) return FALSE; } CurrentPos = io ->Tell(io); if (!io ->Seek(io, DirectoryPos)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetB)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetMat)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetM)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetC)) return FALSE; if (!_cmsWriteUInt32Number(io, offsetA)) return FALSE; if (!io ->Seek(io, CurrentPos)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_LUTB2A_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsPipelineDup((cmsPipeline*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_LUTB2A_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsPipelineFree((cmsPipeline*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigColorantTableType // ******************************************************************************** /* The purpose of this tag is to identify the colorants used in the profile by a unique name and set of XYZ or L*a*b* values to give the colorant an unambiguous value. The first colorant listed is the colorant of the first device channel of a lut tag. The second colorant listed is the colorant of the second device channel of a lut tag, and so on. */ static void *Type_ColorantTable_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt32Number i, Count; cmsNAMEDCOLORLIST* List; char Name[34]; cmsUInt16Number PCS[3]; if (!_cmsReadUInt32Number(io, &Count)) return NULL; if (Count > cmsMAXCHANNELS) { cmsSignalError(self->ContextID, cmsERROR_RANGE, "Too many colorants '%d'", Count); return NULL; } List = cmsAllocNamedColorList(self ->ContextID, Count, 0, "", ""); if (List == NULL) return NULL; for (i=0; i < Count; i++) { if (io ->Read(io, Name, 32, 1) != 1) goto Error; Name[32] = 0; if (!_cmsReadUInt16Array(io, 3, PCS)) goto Error; if (!cmsAppendNamedColor(List, Name, PCS, NULL)) goto Error; } *nItems = 1; return List; Error: *nItems = 0; cmsFreeNamedColorList(List); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // Saves a colorant table. It is using the named color structure for simplicity sake static cmsBool Type_ColorantTable_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) Ptr; cmsUInt32Number i, nColors; nColors = cmsNamedColorCount(NamedColorList); if (!_cmsWriteUInt32Number(io, nColors)) return FALSE; for (i=0; i < nColors; i++) { char root[cmsMAX_PATH]; cmsUInt16Number PCS[3]; memset(root, 0, sizeof(root)); if (!cmsNamedColorInfo(NamedColorList, i, root, NULL, NULL, PCS, NULL)) return 0; root[32] = 0; if (!io ->Write(io, 32, root)) return FALSE; if (!_cmsWriteUInt16Array(io, 3, PCS)) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_ColorantTable_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) { cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) Ptr; return (void*) cmsDupNamedColorList(nc); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_ColorantTable_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsFreeNamedColorList((cmsNAMEDCOLORLIST*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigNamedColor2Type // ******************************************************************************** // //The namedColor2Type is a count value and array of structures that provide color //coordinates for 7-bit ASCII color names. For each named color, a PCS and optional //device representation of the color are given. Both representations are 16-bit values. //The device representation corresponds to the header's 'color space of data' field. //This representation should be consistent with the 'number of device components' //field in the namedColor2Type. If this field is 0, device coordinates are not provided. //The PCS representation corresponds to the header's PCS field. The PCS representation //is always provided. Color names are fixed-length, 32-byte fields including null //termination. In order to maintain maximum portability, it is strongly recommended //that special characters of the 7-bit ASCII set not be used. static void *Type_NamedColor_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt32Number vendorFlag; // Bottom 16 bits for ICC use cmsUInt32Number count; // Count of named colors cmsUInt32Number nDeviceCoords; // Num of device coordinates char prefix[32]; // Prefix for each color name char suffix[32]; // Suffix for each color name cmsNAMEDCOLORLIST* v; cmsUInt32Number i; *nItems = 0; if (!_cmsReadUInt32Number(io, &vendorFlag)) return NULL; if (!_cmsReadUInt32Number(io, &count)) return NULL; if (!_cmsReadUInt32Number(io, &nDeviceCoords)) return NULL; if (io -> Read(io, prefix, 32, 1) != 1) return NULL; if (io -> Read(io, suffix, 32, 1) != 1) return NULL; prefix[31] = suffix[31] = 0; v = cmsAllocNamedColorList(self ->ContextID, count, nDeviceCoords, prefix, suffix); if (v == NULL) { cmsSignalError(self->ContextID, cmsERROR_RANGE, "Too many named colors '%d'", count); return NULL; } if (nDeviceCoords > cmsMAXCHANNELS) { cmsSignalError(self->ContextID, cmsERROR_RANGE, "Too many device coordinates '%d'", nDeviceCoords); goto Error; } for (i=0; i < count; i++) { cmsUInt16Number PCS[3]; cmsUInt16Number Colorant[cmsMAXCHANNELS]; char Root[33]; memset(Colorant, 0, sizeof(Colorant)); if (io -> Read(io, Root, 32, 1) != 1) goto Error; Root[32] = 0; // To prevent exploits if (!_cmsReadUInt16Array(io, 3, PCS)) goto Error; if (!_cmsReadUInt16Array(io, nDeviceCoords, Colorant)) goto Error; if (!cmsAppendNamedColor(v, Root, PCS, Colorant)) goto Error; } *nItems = 1; return (void*) v ; Error: cmsFreeNamedColorList(v); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // Saves a named color list into a named color profile static cmsBool Type_NamedColor_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsNAMEDCOLORLIST* NamedColorList = (cmsNAMEDCOLORLIST*) Ptr; char prefix[33]; // Prefix for each color name char suffix[33]; // Suffix for each color name cmsUInt32Number i, nColors; nColors = cmsNamedColorCount(NamedColorList); if (!_cmsWriteUInt32Number(io, 0)) return FALSE; if (!_cmsWriteUInt32Number(io, nColors)) return FALSE; if (!_cmsWriteUInt32Number(io, NamedColorList ->ColorantCount)) return FALSE; strncpy(prefix, (const char*) NamedColorList->Prefix, 32); strncpy(suffix, (const char*) NamedColorList->Suffix, 32); suffix[32] = prefix[32] = 0; if (!io ->Write(io, 32, prefix)) return FALSE; if (!io ->Write(io, 32, suffix)) return FALSE; for (i=0; i < nColors; i++) { cmsUInt16Number PCS[3]; cmsUInt16Number Colorant[cmsMAXCHANNELS]; char Root[cmsMAX_PATH]; if (!cmsNamedColorInfo(NamedColorList, i, Root, NULL, NULL, PCS, Colorant)) return 0; Root[32] = 0; if (!io ->Write(io, 32 , Root)) return FALSE; if (!_cmsWriteUInt16Array(io, 3, PCS)) return FALSE; if (!_cmsWriteUInt16Array(io, NamedColorList ->ColorantCount, Colorant)) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_NamedColor_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) { cmsNAMEDCOLORLIST* nc = (cmsNAMEDCOLORLIST*) Ptr; return (void*) cmsDupNamedColorList(nc); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_NamedColor_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsFreeNamedColorList((cmsNAMEDCOLORLIST*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigProfileSequenceDescType // ******************************************************************************** // This type is an array of structures, each of which contains information from the // header fields and tags from the original profiles which were combined to create // the final profile. The order of the structures is the order in which the profiles // were combined and includes a structure for the final profile. This provides a // description of the profile sequence from source to destination, // typically used with the DeviceLink profile. static cmsBool ReadEmbeddedText(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU** mlu, cmsUInt32Number SizeOfTag) { cmsTagTypeSignature BaseType; cmsUInt32Number nItems; BaseType = _cmsReadTypeBase(io); switch (BaseType) { case cmsSigTextType: if (*mlu) cmsMLUfree(*mlu); *mlu = (cmsMLU*)Type_Text_Read(self, io, &nItems, SizeOfTag); return (*mlu != NULL); case cmsSigTextDescriptionType: if (*mlu) cmsMLUfree(*mlu); *mlu = (cmsMLU*) Type_Text_Description_Read(self, io, &nItems, SizeOfTag); return (*mlu != NULL); /* TBD: Size is needed for MLU, and we have no idea on which is the available size */ case cmsSigMultiLocalizedUnicodeType: if (*mlu) cmsMLUfree(*mlu); *mlu = (cmsMLU*) Type_MLU_Read(self, io, &nItems, SizeOfTag); return (*mlu != NULL); default: return FALSE; } } static void *Type_ProfileSequenceDesc_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsSEQ* OutSeq; cmsUInt32Number i, Count; *nItems = 0; if (!_cmsReadUInt32Number(io, &Count)) return NULL; if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); OutSeq = cmsAllocProfileSequenceDescription(self ->ContextID, Count); if (OutSeq == NULL) return NULL; OutSeq ->n = Count; // Get structures as well for (i=0; i < Count; i++) { cmsPSEQDESC* sec = &OutSeq -> seq[i]; if (!_cmsReadUInt32Number(io, &sec ->deviceMfg)) goto Error; if (SizeOfTag < sizeof(cmsUInt32Number)) goto Error; SizeOfTag -= sizeof(cmsUInt32Number); if (!_cmsReadUInt32Number(io, &sec ->deviceModel)) goto Error; if (SizeOfTag < sizeof(cmsUInt32Number)) goto Error; SizeOfTag -= sizeof(cmsUInt32Number); if (!_cmsReadUInt64Number(io, &sec ->attributes)) goto Error; if (SizeOfTag < sizeof(cmsUInt64Number)) goto Error; SizeOfTag -= sizeof(cmsUInt64Number); if (!_cmsReadUInt32Number(io, (cmsUInt32Number *)&sec ->technology)) goto Error; if (SizeOfTag < sizeof(cmsUInt32Number)) goto Error; SizeOfTag -= sizeof(cmsUInt32Number); if (!ReadEmbeddedText(self, io, &sec ->Manufacturer, SizeOfTag)) goto Error; if (!ReadEmbeddedText(self, io, &sec ->Model, SizeOfTag)) goto Error; } *nItems = 1; return OutSeq; Error: cmsFreeProfileSequenceDescription(OutSeq); return NULL; } // Aux--Embed a text description type. It can be of type text description or multilocalized unicode // and it depends of the version number passed on cmsTagDescriptor structure instead of stack static cmsBool SaveDescription(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* Text) { if (self ->ICCVersion < 0x4000000) { if (!_cmsWriteTypeBase(io, cmsSigTextDescriptionType)) return FALSE; return Type_Text_Description_Write(self, io, Text, 1); } else { if (!_cmsWriteTypeBase(io, cmsSigMultiLocalizedUnicodeType)) return FALSE; return Type_MLU_Write(self, io, Text, 1); } } static cmsBool Type_ProfileSequenceDesc_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsSEQ* Seq = (cmsSEQ*) Ptr; cmsUInt32Number i; if (!_cmsWriteUInt32Number(io, Seq->n)) return FALSE; for (i=0; i < Seq ->n; i++) { cmsPSEQDESC* sec = &Seq -> seq[i]; if (!_cmsWriteUInt32Number(io, sec ->deviceMfg)) return FALSE; if (!_cmsWriteUInt32Number(io, sec ->deviceModel)) return FALSE; if (!_cmsWriteUInt64Number(io, &sec ->attributes)) return FALSE; if (!_cmsWriteUInt32Number(io, sec ->technology)) return FALSE; if (!SaveDescription(self, io, sec ->Manufacturer)) return FALSE; if (!SaveDescription(self, io, sec ->Model)) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_ProfileSequenceDesc_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) { return (void*) cmsDupProfileSequenceDescription((cmsSEQ*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_ProfileSequenceDesc_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsFreeProfileSequenceDescription((cmsSEQ*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigProfileSequenceIdType // ******************************************************************************** /* In certain workflows using ICC Device Link Profiles, it is necessary to identify the original profiles that were combined to create the Device Link Profile. This type is an array of structures, each of which contains information for identification of a profile used in a sequence */ static cmsBool ReadSeqID(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Cargo, cmsUInt32Number n, cmsUInt32Number SizeOfTag) { cmsSEQ* OutSeq = (cmsSEQ*) Cargo; cmsPSEQDESC* seq = &OutSeq ->seq[n]; if (io -> Read(io, seq ->ProfileID.ID8, 16, 1) != 1) return FALSE; if (!ReadEmbeddedText(self, io, &seq ->Description, SizeOfTag)) return FALSE; return TRUE; } static void *Type_ProfileSequenceId_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsSEQ* OutSeq; cmsUInt32Number Count; cmsUInt32Number BaseOffset; *nItems = 0; // Get actual position as a basis for element offsets BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); // Get table count if (!_cmsReadUInt32Number(io, &Count)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); // Allocate an empty structure OutSeq = cmsAllocProfileSequenceDescription(self ->ContextID, Count); if (OutSeq == NULL) return NULL; // Read the position table if (!ReadPositionTable(self, io, Count, BaseOffset, OutSeq, ReadSeqID)) { cmsFreeProfileSequenceDescription(OutSeq); return NULL; } // Success *nItems = 1; return OutSeq; } static cmsBool WriteSeqID(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Cargo, cmsUInt32Number n, cmsUInt32Number SizeOfTag) { cmsSEQ* Seq = (cmsSEQ*) Cargo; if (!io ->Write(io, 16, Seq ->seq[n].ProfileID.ID8)) return FALSE; // Store here the MLU if (!SaveDescription(self, io, Seq ->seq[n].Description)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_ProfileSequenceId_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsSEQ* Seq = (cmsSEQ*) Ptr; cmsUInt32Number BaseOffset; // Keep the base offset BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); // This is the table count if (!_cmsWriteUInt32Number(io, Seq ->n)) return FALSE; // This is the position table and content if (!WritePositionTable(self, io, 0, Seq ->n, BaseOffset, Seq, WriteSeqID)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_ProfileSequenceId_Dup(struct _cms_typehandler_struct* self, const void* Ptr, cmsUInt32Number n) { return (void*) cmsDupProfileSequenceDescription((cmsSEQ*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_ProfileSequenceId_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsFreeProfileSequenceDescription((cmsSEQ*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigUcrBgType // ******************************************************************************** /* This type contains curves representing the under color removal and black generation and a text string which is a general description of the method used for the ucr/bg. */ static void *Type_UcrBg_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUcrBg* n = (cmsUcrBg*) _cmsMallocZero(self ->ContextID, sizeof(cmsUcrBg)); cmsUInt32Number CountUcr, CountBg; char* ASCIIString; *nItems = 0; if (n == NULL) return NULL; // First curve is Under color removal if (!_cmsReadUInt32Number(io, &CountUcr)) return NULL; if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); n ->Ucr = cmsBuildTabulatedToneCurve16(self ->ContextID, CountUcr, NULL); if (n ->Ucr == NULL) return NULL; if (!_cmsReadUInt16Array(io, CountUcr, n ->Ucr->Table16)) return NULL; if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; SizeOfTag -= CountUcr * sizeof(cmsUInt16Number); // Second curve is Black generation if (!_cmsReadUInt32Number(io, &CountBg)) return NULL; if (SizeOfTag < sizeof(cmsUInt32Number)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); n ->Bg = cmsBuildTabulatedToneCurve16(self ->ContextID, CountBg, NULL); if (n ->Bg == NULL) return NULL; if (!_cmsReadUInt16Array(io, CountBg, n ->Bg->Table16)) return NULL; if (SizeOfTag < CountBg * sizeof(cmsUInt16Number)) return NULL; SizeOfTag -= CountBg * sizeof(cmsUInt16Number); if (SizeOfTag == UINT_MAX) return NULL; // Now comes the text. The length is specified by the tag size n ->Desc = cmsMLUalloc(self ->ContextID, 1); if (n ->Desc == NULL) return NULL; ASCIIString = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1); if (io ->Read(io, ASCIIString, sizeof(char), SizeOfTag) != SizeOfTag) return NULL; ASCIIString[SizeOfTag] = 0; cmsMLUsetASCII(n ->Desc, cmsNoLanguage, cmsNoCountry, ASCIIString); _cmsFree(self ->ContextID, ASCIIString); *nItems = 1; return (void*) n; } static cmsBool Type_UcrBg_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUcrBg* Value = (cmsUcrBg*) Ptr; cmsUInt32Number TextSize; char* Text; // First curve is Under color removal if (!_cmsWriteUInt32Number(io, Value ->Ucr ->nEntries)) return FALSE; if (!_cmsWriteUInt16Array(io, Value ->Ucr ->nEntries, Value ->Ucr ->Table16)) return FALSE; // Then black generation if (!_cmsWriteUInt32Number(io, Value ->Bg ->nEntries)) return FALSE; if (!_cmsWriteUInt16Array(io, Value ->Bg ->nEntries, Value ->Bg ->Table16)) return FALSE; // Now comes the text. The length is specified by the tag size TextSize = cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, NULL, 0); Text = (char*) _cmsMalloc(self ->ContextID, TextSize); if (cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, Text, TextSize) != TextSize) return FALSE; if (!io ->Write(io, TextSize, Text)) return FALSE; _cmsFree(self ->ContextID, Text); return TRUE; cmsUNUSED_PARAMETER(nItems); } static void* Type_UcrBg_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { cmsUcrBg* Src = (cmsUcrBg*) Ptr; cmsUcrBg* NewUcrBg = (cmsUcrBg*) _cmsMallocZero(self ->ContextID, sizeof(cmsUcrBg)); if (NewUcrBg == NULL) return NULL; NewUcrBg ->Bg = cmsDupToneCurve(Src ->Bg); NewUcrBg ->Ucr = cmsDupToneCurve(Src ->Ucr); NewUcrBg ->Desc = cmsMLUdup(Src ->Desc); return (void*) NewUcrBg; cmsUNUSED_PARAMETER(n); } static void Type_UcrBg_Free(struct _cms_typehandler_struct* self, void *Ptr) { cmsUcrBg* Src = (cmsUcrBg*) Ptr; if (Src ->Ucr) cmsFreeToneCurve(Src ->Ucr); if (Src ->Bg) cmsFreeToneCurve(Src ->Bg); if (Src ->Desc) cmsMLUfree(Src ->Desc); _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigCrdInfoType // ******************************************************************************** /* This type contains the PostScript product name to which this profile corresponds and the names of the companion CRDs. Recall that a single profile can generate multiple CRDs. It is implemented as a MLU being the language code "PS" and then country varies for each element: nm: PostScript product name #0: Rendering intent 0 CRD name #1: Rendering intent 1 CRD name #2: Rendering intent 2 CRD name #3: Rendering intent 3 CRD name */ // Auxiliary, read an string specified as count + string static cmsBool ReadCountAndSting(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* mlu, cmsUInt32Number* SizeOfTag, const char* Section) { cmsUInt32Number Count; char* Text; if (*SizeOfTag < sizeof(cmsUInt32Number)) return FALSE; if (!_cmsReadUInt32Number(io, &Count)) return FALSE; if (Count > UINT_MAX - sizeof(cmsUInt32Number)) return FALSE; if (*SizeOfTag < Count + sizeof(cmsUInt32Number)) return FALSE; Text = (char*) _cmsMalloc(self ->ContextID, Count+1); if (Text == NULL) return FALSE; if (io ->Read(io, Text, sizeof(cmsUInt8Number), Count) != Count) { _cmsFree(self ->ContextID, Text); return FALSE; } Text[Count] = 0; cmsMLUsetASCII(mlu, "PS", Section, Text); _cmsFree(self ->ContextID, Text); *SizeOfTag -= (Count + sizeof(cmsUInt32Number)); return TRUE; } static cmsBool WriteCountAndSting(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsMLU* mlu, const char* Section) { cmsUInt32Number TextSize; char* Text; TextSize = cmsMLUgetASCII(mlu, "PS", Section, NULL, 0); Text = (char*) _cmsMalloc(self ->ContextID, TextSize); if (!_cmsWriteUInt32Number(io, TextSize)) return FALSE; if (cmsMLUgetASCII(mlu, "PS", Section, Text, TextSize) == 0) return FALSE; if (!io ->Write(io, TextSize, Text)) return FALSE; _cmsFree(self ->ContextID, Text); return TRUE; } static void *Type_CrdInfo_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsMLU* mlu = cmsMLUalloc(self ->ContextID, 5); *nItems = 0; if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "nm")) goto Error; if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#0")) goto Error; if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#1")) goto Error; if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#2")) goto Error; if (!ReadCountAndSting(self, io, mlu, &SizeOfTag, "#3")) goto Error; *nItems = 1; return (void*) mlu; Error: cmsMLUfree(mlu); return NULL; } static cmsBool Type_CrdInfo_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsMLU* mlu = (cmsMLU*) Ptr; if (!WriteCountAndSting(self, io, mlu, "nm")) goto Error; if (!WriteCountAndSting(self, io, mlu, "#0")) goto Error; if (!WriteCountAndSting(self, io, mlu, "#1")) goto Error; if (!WriteCountAndSting(self, io, mlu, "#2")) goto Error; if (!WriteCountAndSting(self, io, mlu, "#3")) goto Error; return TRUE; Error: return FALSE; cmsUNUSED_PARAMETER(nItems); } static void* Type_CrdInfo_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsMLUdup((cmsMLU*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_CrdInfo_Free(struct _cms_typehandler_struct* self, void *Ptr) { cmsMLUfree((cmsMLU*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigScreeningType // ******************************************************************************** // //The screeningType describes various screening parameters including screen //frequency, screening angle, and spot shape. static void *Type_Screening_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsScreening* sc = NULL; cmsUInt32Number i; sc = (cmsScreening*) _cmsMallocZero(self ->ContextID, sizeof(cmsScreening)); if (sc == NULL) return NULL; *nItems = 0; if (!_cmsReadUInt32Number(io, &sc ->Flag)) goto Error; if (!_cmsReadUInt32Number(io, &sc ->nChannels)) goto Error; if (sc ->nChannels > cmsMAXCHANNELS - 1) sc ->nChannels = cmsMAXCHANNELS - 1; for (i=0; i < sc ->nChannels; i++) { if (!_cmsRead15Fixed16Number(io, &sc ->Channels[i].Frequency)) goto Error; if (!_cmsRead15Fixed16Number(io, &sc ->Channels[i].ScreenAngle)) goto Error; if (!_cmsReadUInt32Number(io, &sc ->Channels[i].SpotShape)) goto Error; } *nItems = 1; return (void*) sc; Error: if (sc != NULL) _cmsFree(self ->ContextID, sc); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_Screening_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsScreening* sc = (cmsScreening* ) Ptr; cmsUInt32Number i; if (!_cmsWriteUInt32Number(io, sc ->Flag)) return FALSE; if (!_cmsWriteUInt32Number(io, sc ->nChannels)) return FALSE; for (i=0; i < sc ->nChannels; i++) { if (!_cmsWrite15Fixed16Number(io, sc ->Channels[i].Frequency)) return FALSE; if (!_cmsWrite15Fixed16Number(io, sc ->Channels[i].ScreenAngle)) return FALSE; if (!_cmsWriteUInt32Number(io, sc ->Channels[i].SpotShape)) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_Screening_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self ->ContextID, Ptr, sizeof(cmsScreening)); cmsUNUSED_PARAMETER(n); } static void Type_Screening_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigViewingConditionsType // ******************************************************************************** // //This type represents a set of viewing condition parameters including: //CIE 'absolute' illuminant white point tristimulus values and CIE 'absolute' //surround tristimulus values. static void *Type_ViewingConditions_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsICCViewingConditions* vc = NULL; vc = (cmsICCViewingConditions*) _cmsMallocZero(self ->ContextID, sizeof(cmsICCViewingConditions)); if (vc == NULL) return NULL; *nItems = 0; if (!_cmsReadXYZNumber(io, &vc ->IlluminantXYZ)) goto Error; if (!_cmsReadXYZNumber(io, &vc ->SurroundXYZ)) goto Error; if (!_cmsReadUInt32Number(io, &vc ->IlluminantType)) goto Error; *nItems = 1; return (void*) vc; Error: if (vc != NULL) _cmsFree(self ->ContextID, vc); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_ViewingConditions_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsICCViewingConditions* sc = (cmsICCViewingConditions* ) Ptr; if (!_cmsWriteXYZNumber(io, &sc ->IlluminantXYZ)) return FALSE; if (!_cmsWriteXYZNumber(io, &sc ->SurroundXYZ)) return FALSE; if (!_cmsWriteUInt32Number(io, sc ->IlluminantType)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void* Type_ViewingConditions_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return _cmsDupMem(self->ContextID, Ptr, sizeof(cmsICCViewingConditions)); cmsUNUSED_PARAMETER(n); } static void Type_ViewingConditions_Free(struct _cms_typehandler_struct* self, void* Ptr) { _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigMultiProcessElementType // ******************************************************************************** static void* GenericMPEdup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsStageDup((cmsStage*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void GenericMPEfree(struct _cms_typehandler_struct* self, void *Ptr) { cmsStageFree((cmsStage*) Ptr); return; cmsUNUSED_PARAMETER(self); } // Each curve is stored in one or more curve segments, with break-points specified between curve segments. // The first curve segment always starts at -Infinity, and the last curve segment always ends at +Infinity. The // first and last curve segments shall be specified in terms of a formula, whereas the other segments shall be // specified either in terms of a formula, or by a sampled curve. // Read an embedded segmented curve static cmsToneCurve* ReadSegmentedCurve(struct _cms_typehandler_struct* self, cmsIOHANDLER* io) { cmsCurveSegSignature ElementSig; cmsUInt32Number i, j; cmsUInt16Number nSegments; cmsCurveSegment* Segments; cmsToneCurve* Curve; cmsFloat32Number PrevBreak = MINUS_INF; // - infinite // Take signature and channels for each element. if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) return NULL; // That should be a segmented curve if (ElementSig != cmsSigSegmentedCurve) return NULL; if (!_cmsReadUInt32Number(io, NULL)) return NULL; if (!_cmsReadUInt16Number(io, &nSegments)) return NULL; if (!_cmsReadUInt16Number(io, NULL)) return NULL; if (nSegments < 1) return NULL; Segments = (cmsCurveSegment*) _cmsCalloc(self ->ContextID, nSegments, sizeof(cmsCurveSegment)); if (Segments == NULL) return NULL; // Read breakpoints for (i=0; i < (cmsUInt32Number) nSegments - 1; i++) { Segments[i].x0 = PrevBreak; if (!_cmsReadFloat32Number(io, &Segments[i].x1)) goto Error; PrevBreak = Segments[i].x1; } Segments[nSegments-1].x0 = PrevBreak; Segments[nSegments-1].x1 = PLUS_INF; // A big cmsFloat32Number number // Read segments for (i=0; i < nSegments; i++) { if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) goto Error; if (!_cmsReadUInt32Number(io, NULL)) goto Error; switch (ElementSig) { case cmsSigFormulaCurveSeg: { cmsUInt16Number Type; cmsUInt32Number ParamsByType[] = {4, 5, 5 }; if (!_cmsReadUInt16Number(io, &Type)) goto Error; if (!_cmsReadUInt16Number(io, NULL)) goto Error; Segments[i].Type = Type + 6; if (Type > 2) goto Error; for (j=0; j < ParamsByType[Type]; j++) { cmsFloat32Number f; if (!_cmsReadFloat32Number(io, &f)) goto Error; Segments[i].Params[j] = f; } } break; case cmsSigSampledCurveSeg: { cmsUInt32Number Count; if (!_cmsReadUInt32Number(io, &Count)) goto Error; Segments[i].nGridPoints = Count; Segments[i].SampledPoints = (cmsFloat32Number*) _cmsCalloc(self ->ContextID, Count, sizeof(cmsFloat32Number)); if (Segments[i].SampledPoints == NULL) goto Error; for (j=0; j < Count; j++) { if (!_cmsReadFloat32Number(io, &Segments[i].SampledPoints[j])) goto Error; } } break; default: { char String[5]; _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown curve element type '%s' found.", String); } goto Error; } } Curve = cmsBuildSegmentedToneCurve(self ->ContextID, nSegments, Segments); for (i=0; i < nSegments; i++) { if (Segments[i].SampledPoints) _cmsFree(self ->ContextID, Segments[i].SampledPoints); } _cmsFree(self ->ContextID, Segments); return Curve; Error: if (Segments) { for (i=0; i < nSegments; i++) { if (Segments[i].SampledPoints) _cmsFree(self ->ContextID, Segments[i].SampledPoints); } _cmsFree(self ->ContextID, Segments); } return NULL; } static cmsBool ReadMPECurve(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Cargo, cmsUInt32Number n, cmsUInt32Number SizeOfTag) { cmsToneCurve** GammaTables = ( cmsToneCurve**) Cargo; GammaTables[n] = ReadSegmentedCurve(self, io); return (GammaTables[n] != NULL); cmsUNUSED_PARAMETER(SizeOfTag); } static void *Type_MPEcurve_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsStage* mpe = NULL; cmsUInt16Number InputChans, OutputChans; cmsUInt32Number i, BaseOffset; cmsToneCurve** GammaTables; *nItems = 0; // Get actual position as a basis for element offsets BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; if (InputChans != OutputChans) return NULL; GammaTables = (cmsToneCurve**) _cmsCalloc(self ->ContextID, InputChans, sizeof(cmsToneCurve*)); if (GammaTables == NULL) return NULL; if (ReadPositionTable(self, io, InputChans, BaseOffset, GammaTables, ReadMPECurve)) { mpe = cmsStageAllocToneCurves(self ->ContextID, InputChans, GammaTables); } else { mpe = NULL; } for (i=0; i < InputChans; i++) { if (GammaTables[i]) cmsFreeToneCurve(GammaTables[i]); } _cmsFree(self ->ContextID, GammaTables); *nItems = (mpe != NULL) ? 1U : 0; return mpe; cmsUNUSED_PARAMETER(SizeOfTag); } // Write a single segmented curve. NO CHECK IS PERFORMED ON VALIDITY static cmsBool WriteSegmentedCurve(cmsIOHANDLER* io, cmsToneCurve* g) { cmsUInt32Number i, j; cmsCurveSegment* Segments = g ->Segments; cmsUInt32Number nSegments = g ->nSegments; if (!_cmsWriteUInt32Number(io, cmsSigSegmentedCurve)) goto Error; if (!_cmsWriteUInt32Number(io, 0)) goto Error; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) nSegments)) goto Error; if (!_cmsWriteUInt16Number(io, 0)) goto Error; // Write the break-points for (i=0; i < nSegments - 1; i++) { if (!_cmsWriteFloat32Number(io, Segments[i].x1)) goto Error; } // Write the segments for (i=0; i < g ->nSegments; i++) { cmsCurveSegment* ActualSeg = Segments + i; if (ActualSeg -> Type == 0) { // This is a sampled curve if (!_cmsWriteUInt32Number(io, (cmsUInt32Number) cmsSigSampledCurveSeg)) goto Error; if (!_cmsWriteUInt32Number(io, 0)) goto Error; if (!_cmsWriteUInt32Number(io, ActualSeg -> nGridPoints)) goto Error; for (j=0; j < g ->Segments[i].nGridPoints; j++) { if (!_cmsWriteFloat32Number(io, ActualSeg -> SampledPoints[j])) goto Error; } } else { int Type; cmsUInt32Number ParamsByType[] = { 4, 5, 5 }; // This is a formula-based if (!_cmsWriteUInt32Number(io, (cmsUInt32Number) cmsSigFormulaCurveSeg)) goto Error; if (!_cmsWriteUInt32Number(io, 0)) goto Error; // We only allow 1, 2 and 3 as types Type = ActualSeg ->Type - 6; if (Type > 2 || Type < 0) goto Error; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) Type)) goto Error; if (!_cmsWriteUInt16Number(io, 0)) goto Error; for (j=0; j < ParamsByType[Type]; j++) { if (!_cmsWriteFloat32Number(io, (cmsFloat32Number) ActualSeg ->Params[j])) goto Error; } } // It seems there is no need to align. Code is here, and for safety commented out // if (!_cmsWriteAlignment(io)) goto Error; } return TRUE; Error: return FALSE; } static cmsBool WriteMPECurve(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Cargo, cmsUInt32Number n, cmsUInt32Number SizeOfTag) { _cmsStageToneCurvesData* Curves = (_cmsStageToneCurvesData*) Cargo; return WriteSegmentedCurve(io, Curves ->TheCurves[n]); cmsUNUSED_PARAMETER(SizeOfTag); cmsUNUSED_PARAMETER(self); } // Write a curve, checking first for validity static cmsBool Type_MPEcurve_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt32Number BaseOffset; cmsStage* mpe = (cmsStage*) Ptr; _cmsStageToneCurvesData* Curves = (_cmsStageToneCurvesData*) mpe ->Data; BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); // Write the header. Since those are curves, input and output channels are same if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; if (!WritePositionTable(self, io, 0, mpe ->InputChannels, BaseOffset, Curves, WriteMPECurve)) return FALSE; return TRUE; cmsUNUSED_PARAMETER(nItems); } // The matrix is organized as an array of PxQ+Q elements, where P is the number of input channels to the // matrix, and Q is the number of output channels. The matrix elements are each float32Numbers. The array // is organized as follows: // array = [e11, e12, ..., e1P, e21, e22, ..., e2P, ..., eQ1, eQ2, ..., eQP, e1, e2, ..., eQ] static void *Type_MPEmatrix_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsStage* mpe; cmsUInt16Number InputChans, OutputChans; cmsUInt32Number nElems, i; cmsFloat64Number* Matrix; cmsFloat64Number* Offsets; if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; // Input and output chans may be ANY (up to 0xffff), // but we choose to limit to 16 channels for now if (InputChans >= cmsMAXCHANNELS) return NULL; if (OutputChans >= cmsMAXCHANNELS) return NULL; nElems = (cmsUInt32Number) InputChans * OutputChans; Matrix = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, nElems, sizeof(cmsFloat64Number)); if (Matrix == NULL) return NULL; Offsets = (cmsFloat64Number*) _cmsCalloc(self ->ContextID, OutputChans, sizeof(cmsFloat64Number)); if (Offsets == NULL) { _cmsFree(self ->ContextID, Matrix); return NULL; } for (i=0; i < nElems; i++) { cmsFloat32Number v; if (!_cmsReadFloat32Number(io, &v)) { _cmsFree(self ->ContextID, Matrix); _cmsFree(self ->ContextID, Offsets); return NULL; } Matrix[i] = v; } for (i=0; i < OutputChans; i++) { cmsFloat32Number v; if (!_cmsReadFloat32Number(io, &v)) { _cmsFree(self ->ContextID, Matrix); _cmsFree(self ->ContextID, Offsets); return NULL; } Offsets[i] = v; } mpe = cmsStageAllocMatrix(self ->ContextID, OutputChans, InputChans, Matrix, Offsets); _cmsFree(self ->ContextID, Matrix); _cmsFree(self ->ContextID, Offsets); *nItems = 1; return mpe; cmsUNUSED_PARAMETER(SizeOfTag); } static cmsBool Type_MPEmatrix_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt32Number i, nElems; cmsStage* mpe = (cmsStage*) Ptr; _cmsStageMatrixData* Matrix = (_cmsStageMatrixData*) mpe ->Data; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->OutputChannels)) return FALSE; nElems = mpe ->InputChannels * mpe ->OutputChannels; for (i=0; i < nElems; i++) { if (!_cmsWriteFloat32Number(io, (cmsFloat32Number) Matrix->Double[i])) return FALSE; } for (i=0; i < mpe ->OutputChannels; i++) { if (Matrix ->Offset == NULL) { if (!_cmsWriteFloat32Number(io, 0)) return FALSE; } else { if (!_cmsWriteFloat32Number(io, (cmsFloat32Number) Matrix->Offset[i])) return FALSE; } } return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } static void *Type_MPEclut_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsStage* mpe = NULL; cmsUInt16Number InputChans, OutputChans; cmsUInt8Number Dimensions8[16]; cmsUInt32Number i, nMaxGrids, GridPoints[MAX_INPUT_DIMENSIONS]; _cmsStageCLutData* clut; if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; if (InputChans == 0) goto Error; if (OutputChans == 0) goto Error; if (io ->Read(io, Dimensions8, sizeof(cmsUInt8Number), 16) != 16) goto Error; // Copy MAX_INPUT_DIMENSIONS at most. Expand to cmsUInt32Number nMaxGrids = InputChans > MAX_INPUT_DIMENSIONS ? (cmsUInt32Number) MAX_INPUT_DIMENSIONS : InputChans; for (i = 0; i < nMaxGrids; i++) { if (Dimensions8[i] == 1) goto Error; // Impossible value, 0 for no CLUT and then 2 at least GridPoints[i] = (cmsUInt32Number)Dimensions8[i]; } // Allocate the true CLUT mpe = cmsStageAllocCLutFloatGranular(self ->ContextID, GridPoints, InputChans, OutputChans, NULL); if (mpe == NULL) goto Error; // Read and sanitize the data clut = (_cmsStageCLutData*) mpe ->Data; for (i=0; i < clut ->nEntries; i++) { if (!_cmsReadFloat32Number(io, &clut->Tab.TFloat[i])) goto Error; } *nItems = 1; return mpe; Error: *nItems = 0; if (mpe != NULL) cmsStageFree(mpe); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // Write a CLUT in floating point static cmsBool Type_MPEclut_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt8Number Dimensions8[16]; // 16 because the spec says 16 and not max number of channels cmsUInt32Number i; cmsStage* mpe = (cmsStage*) Ptr; _cmsStageCLutData* clut = (_cmsStageCLutData*) mpe ->Data; // Check for maximum number of channels supported by lcms if (mpe -> InputChannels > MAX_INPUT_DIMENSIONS) return FALSE; // Only floats are supported in MPE if (clut ->HasFloatValues == FALSE) return FALSE; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->InputChannels)) return FALSE; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) mpe ->OutputChannels)) return FALSE; memset(Dimensions8, 0, sizeof(Dimensions8)); for (i=0; i < mpe ->InputChannels; i++) Dimensions8[i] = (cmsUInt8Number) clut ->Params ->nSamples[i]; if (!io ->Write(io, 16, Dimensions8)) return FALSE; for (i=0; i < clut ->nEntries; i++) { if (!_cmsWriteFloat32Number(io, clut ->Tab.TFloat[i])) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(nItems); cmsUNUSED_PARAMETER(self); } // This is the list of built-in MPE types static _cmsTagTypeLinkedList SupportedMPEtypes[] = { {{ (cmsTagTypeSignature) cmsSigBAcsElemType, NULL, NULL, NULL, NULL, NULL, 0 }, &SupportedMPEtypes[1] }, // Ignore those elements for now {{ (cmsTagTypeSignature) cmsSigEAcsElemType, NULL, NULL, NULL, NULL, NULL, 0 }, &SupportedMPEtypes[2] }, // (That's what the spec says) {TYPE_MPE_HANDLER((cmsTagTypeSignature) cmsSigCurveSetElemType, MPEcurve), &SupportedMPEtypes[3] }, {TYPE_MPE_HANDLER((cmsTagTypeSignature) cmsSigMatrixElemType, MPEmatrix), &SupportedMPEtypes[4] }, {TYPE_MPE_HANDLER((cmsTagTypeSignature) cmsSigCLutElemType, MPEclut), NULL }, }; _cmsTagTypePluginChunkType _cmsMPETypePluginChunk = { NULL }; static cmsBool ReadMPEElem(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Cargo, cmsUInt32Number n, cmsUInt32Number SizeOfTag) { cmsStageSignature ElementSig; cmsTagTypeHandler* TypeHandler; cmsUInt32Number nItems; cmsPipeline *NewLUT = (cmsPipeline *) Cargo; _cmsTagTypePluginChunkType* MPETypePluginChunk = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(self->ContextID, MPEPlugin); // Take signature and channels for each element. if (!_cmsReadUInt32Number(io, (cmsUInt32Number*) &ElementSig)) return FALSE; // The reserved placeholder if (!_cmsReadUInt32Number(io, NULL)) return FALSE; // Read diverse MPE types TypeHandler = GetHandler((cmsTagTypeSignature) ElementSig, MPETypePluginChunk ->TagTypes, SupportedMPEtypes); if (TypeHandler == NULL) { char String[5]; _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); // An unknown element was found. cmsSignalError(self ->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown MPE type '%s' found.", String); return FALSE; } // If no read method, just ignore the element (valid for cmsSigBAcsElemType and cmsSigEAcsElemType) // Read the MPE. No size is given if (TypeHandler ->ReadPtr != NULL) { // This is a real element which should be read and processed if (!cmsPipelineInsertStage(NewLUT, cmsAT_END, (cmsStage*) TypeHandler ->ReadPtr(self, io, &nItems, SizeOfTag))) return FALSE; } return TRUE; cmsUNUSED_PARAMETER(SizeOfTag); cmsUNUSED_PARAMETER(n); } // This is the main dispatcher for MPE static void *Type_MPE_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt16Number InputChans, OutputChans; cmsUInt32Number ElementCount; cmsPipeline *NewLUT = NULL; cmsUInt32Number BaseOffset; // Get actual position as a basis for element offsets BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); // Read channels and element count if (!_cmsReadUInt16Number(io, &InputChans)) return NULL; if (!_cmsReadUInt16Number(io, &OutputChans)) return NULL; if (InputChans == 0 || InputChans >= cmsMAXCHANNELS) return NULL; if (OutputChans == 0 || OutputChans >= cmsMAXCHANNELS) return NULL; // Allocates an empty LUT NewLUT = cmsPipelineAlloc(self ->ContextID, InputChans, OutputChans); if (NewLUT == NULL) return NULL; if (!_cmsReadUInt32Number(io, &ElementCount)) goto Error; if (!ReadPositionTable(self, io, ElementCount, BaseOffset, NewLUT, ReadMPEElem)) goto Error; // Check channel count if (InputChans != NewLUT->InputChannels || OutputChans != NewLUT->OutputChannels) goto Error; // Success *nItems = 1; return NewLUT; // Error Error: if (NewLUT != NULL) cmsPipelineFree(NewLUT); *nItems = 0; return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // This one is a liitle bit more complex, so we don't use position tables this time. static cmsBool Type_MPE_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsUInt32Number i, BaseOffset, DirectoryPos, CurrentPos; cmsUInt32Number inputChan, outputChan; cmsUInt32Number ElemCount; cmsUInt32Number *ElementOffsets = NULL, *ElementSizes = NULL, Before; cmsStageSignature ElementSig; cmsPipeline* Lut = (cmsPipeline*) Ptr; cmsStage* Elem = Lut ->Elements; cmsTagTypeHandler* TypeHandler; _cmsTagTypePluginChunkType* MPETypePluginChunk = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(self->ContextID, MPEPlugin); BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); inputChan = cmsPipelineInputChannels(Lut); outputChan = cmsPipelineOutputChannels(Lut); ElemCount = cmsPipelineStageCount(Lut); ElementOffsets = (cmsUInt32Number *) _cmsCalloc(self ->ContextID, ElemCount, sizeof(cmsUInt32Number)); if (ElementOffsets == NULL) goto Error; ElementSizes = (cmsUInt32Number *) _cmsCalloc(self ->ContextID, ElemCount, sizeof(cmsUInt32Number)); if (ElementSizes == NULL) goto Error; // Write the head if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) inputChan)) goto Error; if (!_cmsWriteUInt16Number(io, (cmsUInt16Number) outputChan)) goto Error; if (!_cmsWriteUInt32Number(io, (cmsUInt16Number) ElemCount)) goto Error; DirectoryPos = io ->Tell(io); // Write a fake directory to be filled latter on for (i=0; i < ElemCount; i++) { if (!_cmsWriteUInt32Number(io, 0)) goto Error; // Offset if (!_cmsWriteUInt32Number(io, 0)) goto Error; // size } // Write each single tag. Keep track of the size as well. for (i=0; i < ElemCount; i++) { ElementOffsets[i] = io ->Tell(io) - BaseOffset; ElementSig = Elem ->Type; TypeHandler = GetHandler((cmsTagTypeSignature) ElementSig, MPETypePluginChunk->TagTypes, SupportedMPEtypes); if (TypeHandler == NULL) { char String[5]; _cmsTagSignature2String(String, (cmsTagSignature) ElementSig); // An unknown element was found. cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Found unknown MPE type '%s'", String); goto Error; } if (!_cmsWriteUInt32Number(io, ElementSig)) goto Error; if (!_cmsWriteUInt32Number(io, 0)) goto Error; Before = io ->Tell(io); if (!TypeHandler ->WritePtr(self, io, Elem, 1)) goto Error; if (!_cmsWriteAlignment(io)) goto Error; ElementSizes[i] = io ->Tell(io) - Before; Elem = Elem ->Next; } // Write the directory CurrentPos = io ->Tell(io); if (!io ->Seek(io, DirectoryPos)) goto Error; for (i=0; i < ElemCount; i++) { if (!_cmsWriteUInt32Number(io, ElementOffsets[i])) goto Error; if (!_cmsWriteUInt32Number(io, ElementSizes[i])) goto Error; } if (!io ->Seek(io, CurrentPos)) goto Error; if (ElementOffsets != NULL) _cmsFree(self ->ContextID, ElementOffsets); if (ElementSizes != NULL) _cmsFree(self ->ContextID, ElementSizes); return TRUE; Error: if (ElementOffsets != NULL) _cmsFree(self ->ContextID, ElementOffsets); if (ElementSizes != NULL) _cmsFree(self ->ContextID, ElementSizes); return FALSE; cmsUNUSED_PARAMETER(nItems); } static void* Type_MPE_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsPipelineDup((cmsPipeline*) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_MPE_Free(struct _cms_typehandler_struct* self, void *Ptr) { cmsPipelineFree((cmsPipeline*) Ptr); return; cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type cmsSigVcgtType // ******************************************************************************** #define cmsVideoCardGammaTableType 0 #define cmsVideoCardGammaFormulaType 1 // Used internally typedef struct { double Gamma; double Min; double Max; } _cmsVCGTGAMMA; static void *Type_vcgt_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsUInt32Number TagType, n, i; cmsToneCurve** Curves; *nItems = 0; // Read tag type if (!_cmsReadUInt32Number(io, &TagType)) return NULL; // Allocate space for the array Curves = ( cmsToneCurve**) _cmsCalloc(self ->ContextID, 3, sizeof(cmsToneCurve*)); if (Curves == NULL) return NULL; // There are two possible flavors switch (TagType) { // Gamma is stored as a table case cmsVideoCardGammaTableType: { cmsUInt16Number nChannels, nElems, nBytes; // Check channel count, which should be 3 (we don't support monochrome this time) if (!_cmsReadUInt16Number(io, &nChannels)) goto Error; if (nChannels != 3) { cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported number of channels for VCGT '%d'", nChannels); goto Error; } // Get Table element count and bytes per element if (!_cmsReadUInt16Number(io, &nElems)) goto Error; if (!_cmsReadUInt16Number(io, &nBytes)) goto Error; // Adobe's quirk fixup. Fixing broken profiles... if (nElems == 256 && nBytes == 1 && SizeOfTag == 1576) nBytes = 2; // Populate tone curves for (n=0; n < 3; n++) { Curves[n] = cmsBuildTabulatedToneCurve16(self ->ContextID, nElems, NULL); if (Curves[n] == NULL) goto Error; // On depending on byte depth switch (nBytes) { // One byte, 0..255 case 1: for (i=0; i < nElems; i++) { cmsUInt8Number v; if (!_cmsReadUInt8Number(io, &v)) goto Error; Curves[n] ->Table16[i] = FROM_8_TO_16(v); } break; // One word 0..65535 case 2: if (!_cmsReadUInt16Array(io, nElems, Curves[n]->Table16)) goto Error; break; // Unsupported default: cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported bit depth for VCGT '%d'", nBytes * 8); goto Error; } } // For all 3 channels } break; // In this case, gamma is stored as a formula case cmsVideoCardGammaFormulaType: { _cmsVCGTGAMMA Colorant[3]; // Populate tone curves for (n=0; n < 3; n++) { double Params[10]; if (!_cmsRead15Fixed16Number(io, &Colorant[n].Gamma)) goto Error; if (!_cmsRead15Fixed16Number(io, &Colorant[n].Min)) goto Error; if (!_cmsRead15Fixed16Number(io, &Colorant[n].Max)) goto Error; // Parametric curve type 5 is: // Y = (aX + b)^Gamma + e | X >= d // Y = cX + f | X < d // vcgt formula is: // Y = (Max - Min) * (X ^ Gamma) + Min // So, the translation is // a = (Max - Min) ^ ( 1 / Gamma) // e = Min // b=c=d=f=0 Params[0] = Colorant[n].Gamma; Params[1] = pow((Colorant[n].Max - Colorant[n].Min), (1.0 / Colorant[n].Gamma)); Params[2] = 0; Params[3] = 0; Params[4] = 0; Params[5] = Colorant[n].Min; Params[6] = 0; Curves[n] = cmsBuildParametricToneCurve(self ->ContextID, 5, Params); if (Curves[n] == NULL) goto Error; } } break; // Unsupported default: cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unsupported tag type for VCGT '%d'", TagType); goto Error; } *nItems = 1; return (void*) Curves; // Regret, free all resources Error: cmsFreeToneCurveTriple(Curves); _cmsFree(self ->ContextID, Curves); return NULL; cmsUNUSED_PARAMETER(SizeOfTag); } // We don't support all flavors, only 16bits tables and formula static cmsBool Type_vcgt_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsToneCurve** Curves = (cmsToneCurve**) Ptr; cmsUInt32Number i, j; if (cmsGetToneCurveParametricType(Curves[0]) == 5 && cmsGetToneCurveParametricType(Curves[1]) == 5 && cmsGetToneCurveParametricType(Curves[2]) == 5) { if (!_cmsWriteUInt32Number(io, cmsVideoCardGammaFormulaType)) return FALSE; // Save parameters for (i=0; i < 3; i++) { _cmsVCGTGAMMA v; v.Gamma = Curves[i] ->Segments[0].Params[0]; v.Min = Curves[i] ->Segments[0].Params[5]; v.Max = pow(Curves[i] ->Segments[0].Params[1], v.Gamma) + v.Min; if (!_cmsWrite15Fixed16Number(io, v.Gamma)) return FALSE; if (!_cmsWrite15Fixed16Number(io, v.Min)) return FALSE; if (!_cmsWrite15Fixed16Number(io, v.Max)) return FALSE; } } else { // Always store as a table of 256 words if (!_cmsWriteUInt32Number(io, cmsVideoCardGammaTableType)) return FALSE; if (!_cmsWriteUInt16Number(io, 3)) return FALSE; if (!_cmsWriteUInt16Number(io, 256)) return FALSE; if (!_cmsWriteUInt16Number(io, 2)) return FALSE; for (i=0; i < 3; i++) { for (j=0; j < 256; j++) { cmsFloat32Number v = cmsEvalToneCurveFloat(Curves[i], (cmsFloat32Number) (j / 255.0)); cmsUInt16Number n = _cmsQuickSaturateWord(v * 65535.0); if (!_cmsWriteUInt16Number(io, n)) return FALSE; } } } return TRUE; cmsUNUSED_PARAMETER(self); cmsUNUSED_PARAMETER(nItems); } static void* Type_vcgt_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { cmsToneCurve** OldCurves = (cmsToneCurve**) Ptr; cmsToneCurve** NewCurves; NewCurves = ( cmsToneCurve**) _cmsCalloc(self ->ContextID, 3, sizeof(cmsToneCurve*)); if (NewCurves == NULL) return NULL; NewCurves[0] = cmsDupToneCurve(OldCurves[0]); NewCurves[1] = cmsDupToneCurve(OldCurves[1]); NewCurves[2] = cmsDupToneCurve(OldCurves[2]); return (void*) NewCurves; cmsUNUSED_PARAMETER(n); } static void Type_vcgt_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsFreeToneCurveTriple((cmsToneCurve**) Ptr); _cmsFree(self ->ContextID, Ptr); } // ******************************************************************************** // Type cmsSigDictType // ******************************************************************************** // Single column of the table can point to wchar or MLUC elements. Holds arrays of data typedef struct { cmsContext ContextID; cmsUInt32Number *Offsets; cmsUInt32Number *Sizes; } _cmsDICelem; typedef struct { _cmsDICelem Name, Value, DisplayName, DisplayValue; } _cmsDICarray; // Allocate an empty array element static cmsBool AllocElem(cmsContext ContextID, _cmsDICelem* e, cmsUInt32Number Count) { e->Offsets = (cmsUInt32Number *) _cmsCalloc(ContextID, Count, sizeof(cmsUInt32Number)); if (e->Offsets == NULL) return FALSE; e->Sizes = (cmsUInt32Number *) _cmsCalloc(ContextID, Count, sizeof(cmsUInt32Number)); if (e->Sizes == NULL) { _cmsFree(ContextID, e -> Offsets); return FALSE; } e ->ContextID = ContextID; return TRUE; } // Free an array element static void FreeElem(_cmsDICelem* e) { if (e ->Offsets != NULL) _cmsFree(e -> ContextID, e -> Offsets); if (e ->Sizes != NULL) _cmsFree(e -> ContextID, e -> Sizes); e->Offsets = e ->Sizes = NULL; } // Get rid of whole array static void FreeArray( _cmsDICarray* a) { if (a ->Name.Offsets != NULL) FreeElem(&a->Name); if (a ->Value.Offsets != NULL) FreeElem(&a ->Value); if (a ->DisplayName.Offsets != NULL) FreeElem(&a->DisplayName); if (a ->DisplayValue.Offsets != NULL) FreeElem(&a ->DisplayValue); } // Allocate whole array static cmsBool AllocArray(cmsContext ContextID, _cmsDICarray* a, cmsUInt32Number Count, cmsUInt32Number Length) { // Empty values memset(a, 0, sizeof(_cmsDICarray)); // On depending on record size, create column arrays if (!AllocElem(ContextID, &a ->Name, Count)) goto Error; if (!AllocElem(ContextID, &a ->Value, Count)) goto Error; if (Length > 16) { if (!AllocElem(ContextID, &a -> DisplayName, Count)) goto Error; } if (Length > 24) { if (!AllocElem(ContextID, &a ->DisplayValue, Count)) goto Error; } return TRUE; Error: FreeArray(a); return FALSE; } // Read one element static cmsBool ReadOneElem(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, cmsUInt32Number BaseOffset) { if (!_cmsReadUInt32Number(io, &e->Offsets[i])) return FALSE; if (!_cmsReadUInt32Number(io, &e ->Sizes[i])) return FALSE; // An offset of zero has special meaning and shal be preserved if (e ->Offsets[i] > 0) e ->Offsets[i] += BaseOffset; return TRUE; } static cmsBool ReadOffsetArray(cmsIOHANDLER* io, _cmsDICarray* a, cmsUInt32Number Count, cmsUInt32Number Length, cmsUInt32Number BaseOffset) { cmsUInt32Number i; // Read column arrays for (i=0; i < Count; i++) { if (!ReadOneElem(io, &a -> Name, i, BaseOffset)) return FALSE; if (!ReadOneElem(io, &a -> Value, i, BaseOffset)) return FALSE; if (Length > 16) { if (!ReadOneElem(io, &a ->DisplayName, i, BaseOffset)) return FALSE; } if (Length > 24) { if (!ReadOneElem(io, & a -> DisplayValue, i, BaseOffset)) return FALSE; } } return TRUE; } // Write one element static cmsBool WriteOneElem(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i) { if (!_cmsWriteUInt32Number(io, e->Offsets[i])) return FALSE; if (!_cmsWriteUInt32Number(io, e ->Sizes[i])) return FALSE; return TRUE; } static cmsBool WriteOffsetArray(cmsIOHANDLER* io, _cmsDICarray* a, cmsUInt32Number Count, cmsUInt32Number Length) { cmsUInt32Number i; for (i=0; i < Count; i++) { if (!WriteOneElem(io, &a -> Name, i)) return FALSE; if (!WriteOneElem(io, &a -> Value, i)) return FALSE; if (Length > 16) { if (!WriteOneElem(io, &a -> DisplayName, i)) return FALSE; } if (Length > 24) { if (!WriteOneElem(io, &a -> DisplayValue, i)) return FALSE; } } return TRUE; } static cmsBool ReadOneWChar(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, wchar_t ** wcstr) { cmsUInt32Number nChars; // Special case for undefined strings (see ICC Votable // Proposal Submission, Dictionary Type and Metadata TAG Definition) if (e -> Offsets[i] == 0) { *wcstr = NULL; return TRUE; } if (!io -> Seek(io, e -> Offsets[i])) return FALSE; nChars = e ->Sizes[i] / sizeof(cmsUInt16Number); *wcstr = (wchar_t*) _cmsMallocZero(e ->ContextID, (nChars + 1) * sizeof(wchar_t)); if (*wcstr == NULL) return FALSE; if (!_cmsReadWCharArray(io, nChars, *wcstr)) { _cmsFree(e ->ContextID, *wcstr); return FALSE; } // End of string marker (*wcstr)[nChars] = 0; return TRUE; } static cmsUInt32Number mywcslen(const wchar_t *s) { const wchar_t *p; p = s; while (*p) p++; return (cmsUInt32Number)(p - s); } static cmsBool WriteOneWChar(cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, const wchar_t * wcstr, cmsUInt32Number BaseOffset) { cmsUInt32Number Before = io ->Tell(io); cmsUInt32Number n; e ->Offsets[i] = Before - BaseOffset; if (wcstr == NULL) { e ->Sizes[i] = 0; e ->Offsets[i] = 0; return TRUE; } n = mywcslen(wcstr); if (!_cmsWriteWCharArray(io, n, wcstr)) return FALSE; e ->Sizes[i] = io ->Tell(io) - Before; return TRUE; } static cmsBool ReadOneMLUC(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, cmsMLU** mlu) { cmsUInt32Number nItems = 0; // A way to get null MLUCs if (e -> Offsets[i] == 0 || e ->Sizes[i] == 0) { *mlu = NULL; return TRUE; } if (!io -> Seek(io, e -> Offsets[i])) return FALSE; *mlu = (cmsMLU*) Type_MLU_Read(self, io, &nItems, e ->Sizes[i]); return *mlu != NULL; } static cmsBool WriteOneMLUC(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, _cmsDICelem* e, cmsUInt32Number i, const cmsMLU* mlu, cmsUInt32Number BaseOffset) { cmsUInt32Number Before; // Special case for undefined strings (see ICC Votable // Proposal Submission, Dictionary Type and Metadata TAG Definition) if (mlu == NULL) { e ->Sizes[i] = 0; e ->Offsets[i] = 0; return TRUE; } Before = io ->Tell(io); e ->Offsets[i] = Before - BaseOffset; if (!Type_MLU_Write(self, io, (void*) mlu, 1)) return FALSE; e ->Sizes[i] = io ->Tell(io) - Before; return TRUE; } static void *Type_Dictionary_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsUInt32Number* nItems, cmsUInt32Number SizeOfTag) { cmsHANDLE hDict; cmsUInt32Number i, Count, Length; cmsUInt32Number BaseOffset; _cmsDICarray a; wchar_t *NameWCS = NULL, *ValueWCS = NULL; cmsMLU *DisplayNameMLU = NULL, *DisplayValueMLU=NULL; cmsBool rc; *nItems = 0; // Get actual position as a basis for element offsets BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); // Get name-value record count if (!_cmsReadUInt32Number(io, &Count)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); // Get rec length if (!_cmsReadUInt32Number(io, &Length)) return NULL; SizeOfTag -= sizeof(cmsUInt32Number); // Check for valid lengths if (Length != 16 && Length != 24 && Length != 32) { cmsSignalError(self->ContextID, cmsERROR_UNKNOWN_EXTENSION, "Unknown record length in dictionary '%d'", Length); return NULL; } // Creates an empty dictionary hDict = cmsDictAlloc(self -> ContextID); if (hDict == NULL) return NULL; // On depending on record size, create column arrays if (!AllocArray(self -> ContextID, &a, Count, Length)) goto Error; // Read column arrays if (!ReadOffsetArray(io, &a, Count, Length, BaseOffset)) goto Error; // Seek to each element and read it for (i=0; i < Count; i++) { if (!ReadOneWChar(io, &a.Name, i, &NameWCS)) goto Error; if (!ReadOneWChar(io, &a.Value, i, &ValueWCS)) goto Error; if (Length > 16) { if (!ReadOneMLUC(self, io, &a.DisplayName, i, &DisplayNameMLU)) goto Error; } if (Length > 24) { if (!ReadOneMLUC(self, io, &a.DisplayValue, i, &DisplayValueMLU)) goto Error; } if (NameWCS == NULL || ValueWCS == NULL) { cmsSignalError(self->ContextID, cmsERROR_CORRUPTION_DETECTED, "Bad dictionary Name/Value"); rc = FALSE; } else { rc = cmsDictAddEntry(hDict, NameWCS, ValueWCS, DisplayNameMLU, DisplayValueMLU); } if (NameWCS != NULL) _cmsFree(self ->ContextID, NameWCS); if (ValueWCS != NULL) _cmsFree(self ->ContextID, ValueWCS); if (DisplayNameMLU != NULL) cmsMLUfree(DisplayNameMLU); if (DisplayValueMLU != NULL) cmsMLUfree(DisplayValueMLU); if (!rc) goto Error; } FreeArray(&a); *nItems = 1; return (void*) hDict; Error: FreeArray(&a); cmsDictFree(hDict); return NULL; } static cmsBool Type_Dictionary_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, void* Ptr, cmsUInt32Number nItems) { cmsHANDLE hDict = (cmsHANDLE) Ptr; const cmsDICTentry* p; cmsBool AnyName, AnyValue; cmsUInt32Number i, Count, Length; cmsUInt32Number DirectoryPos, CurrentPos, BaseOffset; _cmsDICarray a; if (hDict == NULL) return FALSE; BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase); // Let's inspect the dictionary Count = 0; AnyName = FALSE; AnyValue = FALSE; for (p = cmsDictGetEntryList(hDict); p != NULL; p = cmsDictNextEntry(p)) { if (p ->DisplayName != NULL) AnyName = TRUE; if (p ->DisplayValue != NULL) AnyValue = TRUE; Count++; } Length = 16; if (AnyName) Length += 8; if (AnyValue) Length += 8; if (!_cmsWriteUInt32Number(io, Count)) return FALSE; if (!_cmsWriteUInt32Number(io, Length)) return FALSE; // Keep starting position of offsets table DirectoryPos = io ->Tell(io); // Allocate offsets array if (!AllocArray(self ->ContextID, &a, Count, Length)) goto Error; // Write a fake directory to be filled latter on if (!WriteOffsetArray(io, &a, Count, Length)) goto Error; // Write each element. Keep track of the size as well. p = cmsDictGetEntryList(hDict); for (i=0; i < Count; i++) { if (!WriteOneWChar(io, &a.Name, i, p ->Name, BaseOffset)) goto Error; if (!WriteOneWChar(io, &a.Value, i, p ->Value, BaseOffset)) goto Error; if (p ->DisplayName != NULL) { if (!WriteOneMLUC(self, io, &a.DisplayName, i, p ->DisplayName, BaseOffset)) goto Error; } if (p ->DisplayValue != NULL) { if (!WriteOneMLUC(self, io, &a.DisplayValue, i, p ->DisplayValue, BaseOffset)) goto Error; } p = cmsDictNextEntry(p); } // Write the directory CurrentPos = io ->Tell(io); if (!io ->Seek(io, DirectoryPos)) goto Error; if (!WriteOffsetArray(io, &a, Count, Length)) goto Error; if (!io ->Seek(io, CurrentPos)) goto Error; FreeArray(&a); return TRUE; Error: FreeArray(&a); return FALSE; cmsUNUSED_PARAMETER(nItems); } static void* Type_Dictionary_Dup(struct _cms_typehandler_struct* self, const void *Ptr, cmsUInt32Number n) { return (void*) cmsDictDup((cmsHANDLE) Ptr); cmsUNUSED_PARAMETER(n); cmsUNUSED_PARAMETER(self); } static void Type_Dictionary_Free(struct _cms_typehandler_struct* self, void* Ptr) { cmsDictFree((cmsHANDLE) Ptr); cmsUNUSED_PARAMETER(self); } // ******************************************************************************** // Type support main routines // ******************************************************************************** // This is the list of built-in types static const _cmsTagTypeLinkedList SupportedTagTypes[] = { {TYPE_HANDLER(cmsSigChromaticityType, Chromaticity), (_cmsTagTypeLinkedList*) &SupportedTagTypes[1] }, {TYPE_HANDLER(cmsSigColorantOrderType, ColorantOrderType), (_cmsTagTypeLinkedList*) &SupportedTagTypes[2] }, {TYPE_HANDLER(cmsSigS15Fixed16ArrayType, S15Fixed16), (_cmsTagTypeLinkedList*) &SupportedTagTypes[3] }, {TYPE_HANDLER(cmsSigU16Fixed16ArrayType, U16Fixed16), (_cmsTagTypeLinkedList*) &SupportedTagTypes[4] }, {TYPE_HANDLER(cmsSigTextType, Text), (_cmsTagTypeLinkedList*) &SupportedTagTypes[5] }, {TYPE_HANDLER(cmsSigTextDescriptionType, Text_Description), (_cmsTagTypeLinkedList*) &SupportedTagTypes[6] }, {TYPE_HANDLER(cmsSigCurveType, Curve), (_cmsTagTypeLinkedList*) &SupportedTagTypes[7] }, {TYPE_HANDLER(cmsSigParametricCurveType, ParametricCurve), (_cmsTagTypeLinkedList*) &SupportedTagTypes[8] }, {TYPE_HANDLER(cmsSigDateTimeType, DateTime), (_cmsTagTypeLinkedList*) &SupportedTagTypes[9] }, {TYPE_HANDLER(cmsSigLut8Type, LUT8), (_cmsTagTypeLinkedList*) &SupportedTagTypes[10] }, {TYPE_HANDLER(cmsSigLut16Type, LUT16), (_cmsTagTypeLinkedList*) &SupportedTagTypes[11] }, {TYPE_HANDLER(cmsSigColorantTableType, ColorantTable), (_cmsTagTypeLinkedList*) &SupportedTagTypes[12] }, {TYPE_HANDLER(cmsSigNamedColor2Type, NamedColor), (_cmsTagTypeLinkedList*) &SupportedTagTypes[13] }, {TYPE_HANDLER(cmsSigMultiLocalizedUnicodeType, MLU), (_cmsTagTypeLinkedList*) &SupportedTagTypes[14] }, {TYPE_HANDLER(cmsSigProfileSequenceDescType, ProfileSequenceDesc),(_cmsTagTypeLinkedList*) &SupportedTagTypes[15] }, {TYPE_HANDLER(cmsSigSignatureType, Signature), (_cmsTagTypeLinkedList*) &SupportedTagTypes[16] }, {TYPE_HANDLER(cmsSigMeasurementType, Measurement), (_cmsTagTypeLinkedList*) &SupportedTagTypes[17] }, {TYPE_HANDLER(cmsSigDataType, Data), (_cmsTagTypeLinkedList*) &SupportedTagTypes[18] }, {TYPE_HANDLER(cmsSigLutAtoBType, LUTA2B), (_cmsTagTypeLinkedList*) &SupportedTagTypes[19] }, {TYPE_HANDLER(cmsSigLutBtoAType, LUTB2A), (_cmsTagTypeLinkedList*) &SupportedTagTypes[20] }, {TYPE_HANDLER(cmsSigUcrBgType, UcrBg), (_cmsTagTypeLinkedList*) &SupportedTagTypes[21] }, {TYPE_HANDLER(cmsSigCrdInfoType, CrdInfo), (_cmsTagTypeLinkedList*) &SupportedTagTypes[22] }, {TYPE_HANDLER(cmsSigMultiProcessElementType, MPE), (_cmsTagTypeLinkedList*) &SupportedTagTypes[23] }, {TYPE_HANDLER(cmsSigScreeningType, Screening), (_cmsTagTypeLinkedList*) &SupportedTagTypes[24] }, {TYPE_HANDLER(cmsSigViewingConditionsType, ViewingConditions), (_cmsTagTypeLinkedList*) &SupportedTagTypes[25] }, {TYPE_HANDLER(cmsSigXYZType, XYZ), (_cmsTagTypeLinkedList*) &SupportedTagTypes[26] }, {TYPE_HANDLER(cmsCorbisBrokenXYZtype, XYZ), (_cmsTagTypeLinkedList*) &SupportedTagTypes[27] }, {TYPE_HANDLER(cmsMonacoBrokenCurveType, Curve), (_cmsTagTypeLinkedList*) &SupportedTagTypes[28] }, {TYPE_HANDLER(cmsSigProfileSequenceIdType, ProfileSequenceId), (_cmsTagTypeLinkedList*) &SupportedTagTypes[29] }, {TYPE_HANDLER(cmsSigDictType, Dictionary), (_cmsTagTypeLinkedList*) &SupportedTagTypes[30] }, {TYPE_HANDLER(cmsSigVcgtType, vcgt), NULL } }; _cmsTagTypePluginChunkType _cmsTagTypePluginChunk = { NULL }; // Duplicates the zone of memory used by the plug-in in the new context static void DupTagTypeList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src, int loc) { _cmsTagTypePluginChunkType newHead = { NULL }; _cmsTagTypeLinkedList* entry; _cmsTagTypeLinkedList* Anterior = NULL; _cmsTagTypePluginChunkType* head = (_cmsTagTypePluginChunkType*) src->chunks[loc]; // Walk the list copying all nodes for (entry = head->TagTypes; entry != NULL; entry = entry ->Next) { _cmsTagTypeLinkedList *newEntry = ( _cmsTagTypeLinkedList *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(_cmsTagTypeLinkedList)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.TagTypes == NULL) newHead.TagTypes = newEntry; } ctx ->chunks[loc] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsTagTypePluginChunkType)); } void _cmsAllocTagTypePluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { if (src != NULL) { // Duplicate the LIST DupTagTypeList(ctx, src, TagTypePlugin); } else { static _cmsTagTypePluginChunkType TagTypePluginChunk = { NULL }; ctx ->chunks[TagTypePlugin] = _cmsSubAllocDup(ctx ->MemPool, &TagTypePluginChunk, sizeof(_cmsTagTypePluginChunkType)); } } void _cmsAllocMPETypePluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { if (src != NULL) { // Duplicate the LIST DupTagTypeList(ctx, src, MPEPlugin); } else { static _cmsTagTypePluginChunkType TagTypePluginChunk = { NULL }; ctx ->chunks[MPEPlugin] = _cmsSubAllocDup(ctx ->MemPool, &TagTypePluginChunk, sizeof(_cmsTagTypePluginChunkType)); } } // Both kind of plug-ins share same structure cmsBool _cmsRegisterTagTypePlugin(cmsContext id, cmsPluginBase* Data) { return RegisterTypesPlugin(id, Data, TagTypePlugin); } cmsBool _cmsRegisterMultiProcessElementPlugin(cmsContext id, cmsPluginBase* Data) { return RegisterTypesPlugin(id, Data,MPEPlugin); } // Wrapper for tag types cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsContext ContextID, cmsTagTypeSignature sig) { _cmsTagTypePluginChunkType* ctx = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(ContextID, TagTypePlugin); return GetHandler(sig, ctx->TagTypes, (_cmsTagTypeLinkedList*) SupportedTagTypes); } // ******************************************************************************** // Tag support main routines // ******************************************************************************** typedef struct _cmsTagLinkedList_st { cmsTagSignature Signature; cmsTagDescriptor Descriptor; struct _cmsTagLinkedList_st* Next; } _cmsTagLinkedList; // This is the list of built-in tags. The data of this list can be modified by plug-ins static _cmsTagLinkedList SupportedTags[] = { { cmsSigAToB0Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutAtoBType, cmsSigLut8Type}, DecideLUTtypeA2B}, &SupportedTags[1]}, { cmsSigAToB1Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutAtoBType, cmsSigLut8Type}, DecideLUTtypeA2B}, &SupportedTags[2]}, { cmsSigAToB2Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutAtoBType, cmsSigLut8Type}, DecideLUTtypeA2B}, &SupportedTags[3]}, { cmsSigBToA0Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type}, DecideLUTtypeB2A}, &SupportedTags[4]}, { cmsSigBToA1Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type}, DecideLUTtypeB2A}, &SupportedTags[5]}, { cmsSigBToA2Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type}, DecideLUTtypeB2A}, &SupportedTags[6]}, // Allow corbis and its broken XYZ type { cmsSigRedColorantTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, DecideXYZtype}, &SupportedTags[7]}, { cmsSigGreenColorantTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, DecideXYZtype}, &SupportedTags[8]}, { cmsSigBlueColorantTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, DecideXYZtype}, &SupportedTags[9]}, { cmsSigRedTRCTag, { 1, 3, { cmsSigCurveType, cmsSigParametricCurveType, cmsMonacoBrokenCurveType }, DecideCurveType}, &SupportedTags[10]}, { cmsSigGreenTRCTag, { 1, 3, { cmsSigCurveType, cmsSigParametricCurveType, cmsMonacoBrokenCurveType }, DecideCurveType}, &SupportedTags[11]}, { cmsSigBlueTRCTag, { 1, 3, { cmsSigCurveType, cmsSigParametricCurveType, cmsMonacoBrokenCurveType }, DecideCurveType}, &SupportedTags[12]}, { cmsSigCalibrationDateTimeTag, { 1, 1, { cmsSigDateTimeType }, NULL}, &SupportedTags[13]}, { cmsSigCharTargetTag, { 1, 1, { cmsSigTextType }, NULL}, &SupportedTags[14]}, { cmsSigChromaticAdaptationTag, { 9, 1, { cmsSigS15Fixed16ArrayType }, NULL}, &SupportedTags[15]}, { cmsSigChromaticityTag, { 1, 1, { cmsSigChromaticityType }, NULL}, &SupportedTags[16]}, { cmsSigColorantOrderTag, { 1, 1, { cmsSigColorantOrderType }, NULL}, &SupportedTags[17]}, { cmsSigColorantTableTag, { 1, 1, { cmsSigColorantTableType }, NULL}, &SupportedTags[18]}, { cmsSigColorantTableOutTag, { 1, 1, { cmsSigColorantTableType }, NULL}, &SupportedTags[19]}, { cmsSigCopyrightTag, { 1, 3, { cmsSigTextType, cmsSigMultiLocalizedUnicodeType, cmsSigTextDescriptionType}, DecideTextType}, &SupportedTags[20]}, { cmsSigDateTimeTag, { 1, 1, { cmsSigDateTimeType }, NULL}, &SupportedTags[21]}, { cmsSigDeviceMfgDescTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[22]}, { cmsSigDeviceModelDescTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[23]}, { cmsSigGamutTag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[24]}, { cmsSigGrayTRCTag, { 1, 2, { cmsSigCurveType, cmsSigParametricCurveType }, DecideCurveType}, &SupportedTags[25]}, { cmsSigLuminanceTag, { 1, 1, { cmsSigXYZType }, NULL}, &SupportedTags[26]}, { cmsSigMediaBlackPointTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, NULL}, &SupportedTags[27]}, { cmsSigMediaWhitePointTag, { 1, 2, { cmsSigXYZType, cmsCorbisBrokenXYZtype }, NULL}, &SupportedTags[28]}, { cmsSigNamedColor2Tag, { 1, 1, { cmsSigNamedColor2Type }, NULL}, &SupportedTags[29]}, { cmsSigPreview0Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[30]}, { cmsSigPreview1Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[31]}, { cmsSigPreview2Tag, { 1, 3, { cmsSigLut16Type, cmsSigLutBtoAType, cmsSigLut8Type }, DecideLUTtypeB2A}, &SupportedTags[32]}, { cmsSigProfileDescriptionTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[33]}, { cmsSigProfileSequenceDescTag, { 1, 1, { cmsSigProfileSequenceDescType }, NULL}, &SupportedTags[34]}, { cmsSigTechnologyTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[35]}, { cmsSigColorimetricIntentImageStateTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[36]}, { cmsSigPerceptualRenderingIntentGamutTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[37]}, { cmsSigSaturationRenderingIntentGamutTag, { 1, 1, { cmsSigSignatureType }, NULL}, &SupportedTags[38]}, { cmsSigMeasurementTag, { 1, 1, { cmsSigMeasurementType }, NULL}, &SupportedTags[39]}, { cmsSigPs2CRD0Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[40]}, { cmsSigPs2CRD1Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[41]}, { cmsSigPs2CRD2Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[42]}, { cmsSigPs2CRD3Tag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[43]}, { cmsSigPs2CSATag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[44]}, { cmsSigPs2RenderingIntentTag, { 1, 1, { cmsSigDataType }, NULL}, &SupportedTags[45]}, { cmsSigViewingCondDescTag, { 1, 3, { cmsSigTextDescriptionType, cmsSigMultiLocalizedUnicodeType, cmsSigTextType}, DecideTextDescType}, &SupportedTags[46]}, { cmsSigUcrBgTag, { 1, 1, { cmsSigUcrBgType}, NULL}, &SupportedTags[47]}, { cmsSigCrdInfoTag, { 1, 1, { cmsSigCrdInfoType}, NULL}, &SupportedTags[48]}, { cmsSigDToB0Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[49]}, { cmsSigDToB1Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[50]}, { cmsSigDToB2Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[51]}, { cmsSigDToB3Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[52]}, { cmsSigBToD0Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[53]}, { cmsSigBToD1Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[54]}, { cmsSigBToD2Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[55]}, { cmsSigBToD3Tag, { 1, 1, { cmsSigMultiProcessElementType}, NULL}, &SupportedTags[56]}, { cmsSigScreeningDescTag, { 1, 1, { cmsSigTextDescriptionType }, NULL}, &SupportedTags[57]}, { cmsSigViewingConditionsTag, { 1, 1, { cmsSigViewingConditionsType }, NULL}, &SupportedTags[58]}, { cmsSigScreeningTag, { 1, 1, { cmsSigScreeningType}, NULL }, &SupportedTags[59]}, { cmsSigVcgtTag, { 1, 1, { cmsSigVcgtType}, NULL }, &SupportedTags[60]}, { cmsSigMetaTag, { 1, 1, { cmsSigDictType}, NULL }, &SupportedTags[61]}, { cmsSigProfileSequenceIdTag, { 1, 1, { cmsSigProfileSequenceIdType}, NULL }, &SupportedTags[62]}, { cmsSigProfileDescriptionMLTag,{ 1, 1, { cmsSigMultiLocalizedUnicodeType}, NULL}, &SupportedTags[63]}, { cmsSigArgyllArtsTag, { 9, 1, { cmsSigS15Fixed16ArrayType}, NULL}, NULL} }; /* Not supported Why ======================= ========================================= cmsSigOutputResponseTag ==> WARNING, POSSIBLE PATENT ON THIS SUBJECT! cmsSigNamedColorTag ==> Deprecated cmsSigDataTag ==> Ancient, unused cmsSigDeviceSettingsTag ==> Deprecated, useless */ _cmsTagPluginChunkType _cmsTagPluginChunk = { NULL }; // Duplicates the zone of memory used by the plug-in in the new context static void DupTagList(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { _cmsTagPluginChunkType newHead = { NULL }; _cmsTagLinkedList* entry; _cmsTagLinkedList* Anterior = NULL; _cmsTagPluginChunkType* head = (_cmsTagPluginChunkType*) src->chunks[TagPlugin]; // Walk the list copying all nodes for (entry = head->Tag; entry != NULL; entry = entry ->Next) { _cmsTagLinkedList *newEntry = ( _cmsTagLinkedList *) _cmsSubAllocDup(ctx ->MemPool, entry, sizeof(_cmsTagLinkedList)); if (newEntry == NULL) return; // We want to keep the linked list order, so this is a little bit tricky newEntry -> Next = NULL; if (Anterior) Anterior -> Next = newEntry; Anterior = newEntry; if (newHead.Tag == NULL) newHead.Tag = newEntry; } ctx ->chunks[TagPlugin] = _cmsSubAllocDup(ctx->MemPool, &newHead, sizeof(_cmsTagPluginChunkType)); } void _cmsAllocTagPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) { if (src != NULL) { DupTagList(ctx, src); } else { static _cmsTagPluginChunkType TagPluginChunk = { NULL }; ctx ->chunks[TagPlugin] = _cmsSubAllocDup(ctx ->MemPool, &TagPluginChunk, sizeof(_cmsTagPluginChunkType)); } } cmsBool _cmsRegisterTagPlugin(cmsContext id, cmsPluginBase* Data) { cmsPluginTag* Plugin = (cmsPluginTag*) Data; _cmsTagLinkedList *pt; _cmsTagPluginChunkType* TagPluginChunk = ( _cmsTagPluginChunkType*) _cmsContextGetClientChunk(id, TagPlugin); if (Data == NULL) { TagPluginChunk->Tag = NULL; return TRUE; } pt = (_cmsTagLinkedList*) _cmsPluginMalloc(id, sizeof(_cmsTagLinkedList)); if (pt == NULL) return FALSE; pt ->Signature = Plugin ->Signature; pt ->Descriptor = Plugin ->Descriptor; pt ->Next = TagPluginChunk ->Tag; TagPluginChunk ->Tag = pt; return TRUE; } // Return a descriptor for a given tag or NULL cmsTagDescriptor* _cmsGetTagDescriptor(cmsContext ContextID, cmsTagSignature sig) { _cmsTagLinkedList* pt; _cmsTagPluginChunkType* TagPluginChunk = ( _cmsTagPluginChunkType*) _cmsContextGetClientChunk(ContextID, TagPlugin); for (pt = TagPluginChunk->Tag; pt != NULL; pt = pt ->Next) { if (sig == pt -> Signature) return &pt ->Descriptor; } for (pt = SupportedTags; pt != NULL; pt = pt ->Next) { if (sig == pt -> Signature) return &pt ->Descriptor; } return NULL; } lcms2-2.12rc1/src/lcms2_internal.h0000644000175000017500000011533213775114656015776 0ustar martimarti // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #ifndef _lcms_internal_H // Include plug-in foundation #ifndef _lcms_plugin_H # include "lcms2_plugin.h" #endif // ctype is part of C99 as per 7.1.2 #include // assert macro is part of C99 as per 7.2 #include // Some needed constants #ifndef M_PI # define M_PI 3.14159265358979323846 #endif #ifndef M_LOG10E # define M_LOG10E 0.434294481903251827651 #endif // BorlandC 5.5, VC2003 are broken on that #if defined(__BORLANDC__) || (defined(_MSC_VER) && (_MSC_VER < 1400)) // 1400 == VC++ 8.0 #define sinf(x) (float)sin((float)x) #define sqrtf(x) (float)sqrt((float)x) #endif // Alignment of ICC file format uses 4 bytes (cmsUInt32Number) #define _cmsALIGNLONG(x) (((x)+(sizeof(cmsUInt32Number)-1)) & ~(sizeof(cmsUInt32Number)-1)) // Alignment to memory pointer // (Ultra)SPARC with gcc requires ptr alignment of 8 bytes // even though sizeof(void *) is only four: for greatest flexibility // allow the build to specify ptr alignment. #ifndef CMS_PTR_ALIGNMENT # define CMS_PTR_ALIGNMENT sizeof(void *) #endif #define _cmsALIGNMEM(x) (((x)+(CMS_PTR_ALIGNMENT - 1)) & ~(CMS_PTR_ALIGNMENT - 1)) // Maximum encodeable values in floating point #define MAX_ENCODEABLE_XYZ (1.0 + 32767.0/32768.0) #define MIN_ENCODEABLE_ab2 (-128.0) #define MAX_ENCODEABLE_ab2 ((65535.0/256.0) - 128.0) #define MIN_ENCODEABLE_ab4 (-128.0) #define MAX_ENCODEABLE_ab4 (127.0) // Maximum of channels for internal pipeline evaluation #define MAX_STAGE_CHANNELS 128 // Unused parameter warning suppression #define cmsUNUSED_PARAMETER(x) ((void)x) // The specification for "inline" is section 6.7.4 of the C99 standard (ISO/IEC 9899:1999). // unfortunately VisualC++ does not conform that #if defined(_MSC_VER) || defined(__BORLANDC__) # define cmsINLINE __inline #else # define cmsINLINE static inline #endif // Allow signed overflow, we know this is harmless in this particular context #if defined(__clang__) # define CMS_NO_SANITIZE __attribute__((no_sanitize("signed-integer-overflow"))) #else # define CMS_NO_SANITIZE #endif // Other replacement functions #ifdef _MSC_VER # ifndef snprintf # define snprintf _snprintf # endif # ifndef vsnprintf # define vsnprintf _vsnprintf # endif /// Properly define some macros to accommodate /// older MSVC versions. # if defined(_MSC_VER) && _MSC_VER <= 1700 #include #define isnan _isnan #define isinf(x) (!_finite((x))) # endif #if !defined(_MSC_VER) && (defined(__STDC_VERSION__) && __STDC_VERSION__ < 199901L) #if !defined(isinf) #define isinf(x) (!finite((x))) #endif #endif #endif // A fast way to convert from/to 16 <-> 8 bits #define FROM_8_TO_16(rgb) (cmsUInt16Number) ((((cmsUInt16Number) (rgb)) << 8)|(rgb)) #define FROM_16_TO_8(rgb) (cmsUInt8Number) ((((cmsUInt32Number)(rgb) * 65281U + 8388608U) >> 24) & 0xFFU) // Code analysis is broken on asserts #ifdef _MSC_VER # if (_MSC_VER >= 1500) # define _cmsAssert(a) { assert((a)); __analysis_assume((a)); } # else # define _cmsAssert(a) assert((a)) # endif #else # define _cmsAssert(a) assert((a)) #endif //--------------------------------------------------------------------------------- // Determinant lower than that are assumed zero (used on matrix invert) #define MATRIX_DET_TOLERANCE 0.0001 //--------------------------------------------------------------------------------- // Fixed point #define FIXED_TO_INT(x) ((x)>>16) #define FIXED_REST_TO_INT(x) ((x)&0xFFFFU) #define ROUND_FIXED_TO_INT(x) (((x)+0x8000)>>16) cmsINLINE cmsS15Fixed16Number _cmsToFixedDomain(int a) { return a + ((a + 0x7fff) / 0xffff); } cmsINLINE int _cmsFromFixedDomain(cmsS15Fixed16Number a) { return a - ((a + 0x7fff) >> 16); } // ----------------------------------------------------------------------------------------------------------- // Fast floor conversion logic. Thanks to Sree Kotay and Stuart Nixon // note than this only works in the range ..-32767...+32767 because // mantissa is interpreted as 15.16 fixed point. // The union is to avoid pointer aliasing overoptimization. cmsINLINE int _cmsQuickFloor(cmsFloat64Number val) { #ifdef CMS_DONT_USE_FAST_FLOOR return (int) floor(val); #else const cmsFloat64Number _lcms_double2fixmagic = 68719476736.0 * 1.5; // 2^36 * 1.5, (52-16=36) uses limited precision to floor union { cmsFloat64Number val; int halves[2]; } temp; temp.val = val + _lcms_double2fixmagic; #ifdef CMS_USE_BIG_ENDIAN return temp.halves[1] >> 16; #else return temp.halves[0] >> 16; #endif #endif } // Fast floor restricted to 0..65535.0 cmsINLINE cmsUInt16Number _cmsQuickFloorWord(cmsFloat64Number d) { return (cmsUInt16Number) _cmsQuickFloor(d - 32767.0) + 32767U; } // Floor to word, taking care of saturation cmsINLINE cmsUInt16Number _cmsQuickSaturateWord(cmsFloat64Number d) { d += 0.5; if (d <= 0) return 0; if (d >= 65535.0) return 0xffff; return _cmsQuickFloorWord(d); } // Test bed entry points--------------------------------------------------------------- #define CMSCHECKPOINT CMSAPI // Pthread support -------------------------------------------------------------------- #ifndef CMS_NO_PTHREADS // This is the threading support. Unfortunately, it has to be platform-dependent because // windows does not support pthreads. #ifdef CMS_IS_WINDOWS_ #define WIN32_LEAN_AND_MEAN 1 #include // The locking scheme in LCMS requires a single 'top level' mutex // to work. This is actually implemented on Windows as a // CriticalSection, because they are lighter weight. With // pthreads, this is statically inited. Unfortunately, windows // can't officially statically init critical sections. // // We can work around this in 2 ways. // // 1) We can use a proper mutex purely to protect the init // of the CriticalSection. This in turns requires us to protect // the Mutex creation, which we can do using the snappily // named InterlockedCompareExchangePointer API (present on // windows XP and above). // // 2) In cases where we want to work on pre-Windows XP, we // can use an even more horrible hack described below. // // So why wouldn't we always use 2)? Because not calling // the init function for a critical section means it fails // testing with ApplicationVerifier (and presumably similar // tools). // // We therefore default to 1, and people who want to be able // to run on pre-Windows XP boxes can build with: // CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT // defined. This is automatically set for builds using // versions of MSVC that don't have this API available. // // From: http://locklessinc.com/articles/pthreads_on_windows/ // The pthreads API has an initialization macro that has no correspondence to anything in // the windows API. By investigating the internal definition of the critical section type, // one may work out how to initialize one without calling InitializeCriticalSection(). // The trick here is that InitializeCriticalSection() is not allowed to fail. It tries // to allocate a critical section debug object, but if no memory is available, it sets // the pointer to a specific value. (One would expect that value to be NULL, but it is // actually (void *)-1 for some reason.) Thus we can use this special value for that // pointer, and the critical section code will work. // The other important part of the critical section type to initialize is the number // of waiters. This controls whether or not the mutex is locked. Fortunately, this // part of the critical section is unlikely to change. Apparently, many programs // already test critical sections to see if they are locked using this value, so // Microsoft felt that it was necessary to keep it set at -1 for an unlocked critical // section, even when they changed the underlying algorithm to be more scalable. // The final parts of the critical section object are unimportant, and can be set // to zero for their defaults. This yields to an initialization macro: typedef CRITICAL_SECTION _cmsMutex; #ifdef _MSC_VER # if (_MSC_VER >= 1800) # pragma warning(disable : 26135) # endif #endif #ifndef CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT // If we are building with a version of MSVC smaller // than 1400 (i.e. before VS2005) then we don't have // the InterlockedCompareExchangePointer API, so use // the old version. # ifdef _MSC_VER # if _MSC_VER < 1400 # define CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT # endif # endif #endif #ifdef CMS_RELY_ON_WINDOWS_STATIC_MUTEX_INIT # define CMS_MUTEX_INITIALIZER {(PRTL_CRITICAL_SECTION_DEBUG) -1,-1,0,0,0,0} #else # define CMS_MUTEX_INITIALIZER {(PRTL_CRITICAL_SECTION_DEBUG)NULL,-1,0,0,0,0} #endif cmsINLINE int _cmsLockPrimitive(_cmsMutex *m) { EnterCriticalSection(m); return 0; } cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m) { LeaveCriticalSection(m); return 0; } cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m) { InitializeCriticalSection(m); return 0; } cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m) { DeleteCriticalSection(m); return 0; } cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m) { EnterCriticalSection(m); return 0; } cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m) { LeaveCriticalSection(m); return 0; } #else // Rest of the wide world #include #define CMS_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER typedef pthread_mutex_t _cmsMutex; cmsINLINE int _cmsLockPrimitive(_cmsMutex *m) { return pthread_mutex_lock(m); } cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m) { return pthread_mutex_unlock(m); } cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m) { return pthread_mutex_init(m, NULL); } cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m) { return pthread_mutex_destroy(m); } cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m) { return pthread_mutex_lock(m); } cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m) { return pthread_mutex_unlock(m); } #endif #else #define CMS_MUTEX_INITIALIZER 0 typedef int _cmsMutex; cmsINLINE int _cmsLockPrimitive(_cmsMutex *m) { cmsUNUSED_PARAMETER(m); return 0; } cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m) { cmsUNUSED_PARAMETER(m); return 0; } cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m) { cmsUNUSED_PARAMETER(m); return 0; } cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m) { cmsUNUSED_PARAMETER(m); return 0; } cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m) { cmsUNUSED_PARAMETER(m); return 0; } cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m) { cmsUNUSED_PARAMETER(m); return 0; } #endif // Plug-In registration --------------------------------------------------------------- // Specialized function for plug-in memory management. No pairing free() since whole pool is freed at once. void* _cmsPluginMalloc(cmsContext ContextID, cmsUInt32Number size); // Memory management cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Interpolation cmsBool _cmsRegisterInterpPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Parametric curves cmsBool _cmsRegisterParametricCurvesPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Formatters management cmsBool _cmsRegisterFormattersPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Tag type management cmsBool _cmsRegisterTagTypePlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Tag management cmsBool _cmsRegisterTagPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Intent management cmsBool _cmsRegisterRenderingIntentPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Multi Process elements cmsBool _cmsRegisterMultiProcessElementPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Optimization cmsBool _cmsRegisterOptimizationPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Transform cmsBool _cmsRegisterTransformPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // Mutex cmsBool _cmsRegisterMutexPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // --------------------------------------------------------------------------------------------------------- // Suballocators. typedef struct _cmsSubAllocator_chunk_st { cmsUInt8Number* Block; cmsUInt32Number BlockSize; cmsUInt32Number Used; struct _cmsSubAllocator_chunk_st* next; } _cmsSubAllocator_chunk; typedef struct { cmsContext ContextID; _cmsSubAllocator_chunk* h; } _cmsSubAllocator; _cmsSubAllocator* _cmsCreateSubAlloc(cmsContext ContextID, cmsUInt32Number Initial); void _cmsSubAllocDestroy(_cmsSubAllocator* s); void* _cmsSubAlloc(_cmsSubAllocator* s, cmsUInt32Number size); void* _cmsSubAllocDup(_cmsSubAllocator* s, const void *ptr, cmsUInt32Number size); // ---------------------------------------------------------------------------------- // The context clients. typedef enum { UserPtr, // User-defined pointer Logger, AlarmCodesContext, AdaptationStateContext, MemPlugin, InterpPlugin, CurvesPlugin, FormattersPlugin, TagTypePlugin, TagPlugin, IntentPlugin, MPEPlugin, OptimizationPlugin, TransformPlugin, MutexPlugin, // Last in list MemoryClientMax } _cmsMemoryClient; // Container for memory management plug-in. typedef struct { _cmsMallocFnPtrType MallocPtr; _cmsMalloZerocFnPtrType MallocZeroPtr; _cmsFreeFnPtrType FreePtr; _cmsReallocFnPtrType ReallocPtr; _cmsCallocFnPtrType CallocPtr; _cmsDupFnPtrType DupPtr; } _cmsMemPluginChunkType; // Copy memory management function pointers from plug-in to chunk, taking care of missing routines void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr); // Internal structure for context struct _cmsContext_struct { struct _cmsContext_struct* Next; // Points to next context in the new style _cmsSubAllocator* MemPool; // The memory pool that stores context data void* chunks[MemoryClientMax]; // array of pointers to client chunks. Memory itself is hold in the suballocator. // If NULL, then it reverts to global Context0 _cmsMemPluginChunkType DefaultMemoryManager; // The allocators used for creating the context itself. Cannot be overridden }; // Returns a pointer to a valid context structure, including the global one if id is zero. // Verifies the magic number. struct _cmsContext_struct* _cmsGetContext(cmsContext ContextID); // Returns the block assigned to the specific zone. void* _cmsContextGetClientChunk(cmsContext id, _cmsMemoryClient mc); // Chunks of context memory by plug-in client ------------------------------------------------------- // Those structures encapsulates all variables needed by the several context clients (mostly plug-ins) // Container for error logger -- not a plug-in typedef struct { cmsLogErrorHandlerFunction LogErrorHandler; // Set to NULL for Context0 fallback } _cmsLogErrorChunkType; // The global Context0 storage for error logger extern _cmsLogErrorChunkType _cmsLogErrorChunk; // Allocate and init error logger container. void _cmsAllocLogErrorChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for alarm codes -- not a plug-in typedef struct { cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]; } _cmsAlarmCodesChunkType; // The global Context0 storage for alarm codes extern _cmsAlarmCodesChunkType _cmsAlarmCodesChunk; // Allocate and init alarm codes container. void _cmsAllocAlarmCodesChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for adaptation state -- not a plug-in typedef struct { cmsFloat64Number AdaptationState; } _cmsAdaptationStateChunkType; // The global Context0 storage for adaptation state extern _cmsAdaptationStateChunkType _cmsAdaptationStateChunk; // Allocate and init adaptation state container. void _cmsAllocAdaptationStateChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // The global Context0 storage for memory management extern _cmsMemPluginChunkType _cmsMemPluginChunk; // Allocate and init memory management container. void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for interpolation plug-in typedef struct { cmsInterpFnFactory Interpolators; } _cmsInterpPluginChunkType; // The global Context0 storage for interpolation plug-in extern _cmsInterpPluginChunkType _cmsInterpPluginChunk; // Allocate and init interpolation container. void _cmsAllocInterpPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for parametric curves plug-in typedef struct { struct _cmsParametricCurvesCollection_st* ParametricCurves; } _cmsCurvesPluginChunkType; // The global Context0 storage for tone curves plug-in extern _cmsCurvesPluginChunkType _cmsCurvesPluginChunk; // Allocate and init parametric curves container. void _cmsAllocCurvesPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for formatters plug-in typedef struct { struct _cms_formatters_factory_list* FactoryList; } _cmsFormattersPluginChunkType; // The global Context0 storage for formatters plug-in extern _cmsFormattersPluginChunkType _cmsFormattersPluginChunk; // Allocate and init formatters container. void _cmsAllocFormattersPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // This chunk type is shared by TagType plug-in and MPE Plug-in typedef struct { struct _cmsTagTypeLinkedList_st* TagTypes; } _cmsTagTypePluginChunkType; // The global Context0 storage for tag types plug-in extern _cmsTagTypePluginChunkType _cmsTagTypePluginChunk; // The global Context0 storage for mult process elements plug-in extern _cmsTagTypePluginChunkType _cmsMPETypePluginChunk; // Allocate and init Tag types container. void _cmsAllocTagTypePluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Allocate and init MPE container. void _cmsAllocMPETypePluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for tag plug-in typedef struct { struct _cmsTagLinkedList_st* Tag; } _cmsTagPluginChunkType; // The global Context0 storage for tag plug-in extern _cmsTagPluginChunkType _cmsTagPluginChunk; // Allocate and init Tag container. void _cmsAllocTagPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for intents plug-in typedef struct { struct _cms_intents_list* Intents; } _cmsIntentsPluginChunkType; // The global Context0 storage for intents plug-in extern _cmsIntentsPluginChunkType _cmsIntentsPluginChunk; // Allocate and init intents container. void _cmsAllocIntentsPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for optimization plug-in typedef struct { struct _cmsOptimizationCollection_st* OptimizationCollection; } _cmsOptimizationPluginChunkType; // The global Context0 storage for optimizers plug-in extern _cmsOptimizationPluginChunkType _cmsOptimizationPluginChunk; // Allocate and init optimizers container. void _cmsAllocOptimizationPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for transform plug-in typedef struct { struct _cmsTransformCollection_st* TransformCollection; } _cmsTransformPluginChunkType; // The global Context0 storage for full-transform replacement plug-in extern _cmsTransformPluginChunkType _cmsTransformPluginChunk; // Allocate and init transform container. void _cmsAllocTransformPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // Container for mutex plug-in typedef struct { _cmsCreateMutexFnPtrType CreateMutexPtr; _cmsDestroyMutexFnPtrType DestroyMutexPtr; _cmsLockMutexFnPtrType LockMutexPtr; _cmsUnlockMutexFnPtrType UnlockMutexPtr; } _cmsMutexPluginChunkType; // The global Context0 storage for mutex plug-in extern _cmsMutexPluginChunkType _cmsMutexPluginChunk; // Allocate and init mutex container. void _cmsAllocMutexPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src); // ---------------------------------------------------------------------------------- // MLU internal representation typedef struct { cmsUInt16Number Language; cmsUInt16Number Country; cmsUInt32Number StrW; // Offset to current unicode string cmsUInt32Number Len; // Length in bytes } _cmsMLUentry; struct _cms_MLU_struct { cmsContext ContextID; // The directory cmsUInt32Number AllocatedEntries; cmsUInt32Number UsedEntries; _cmsMLUentry* Entries; // Array of pointers to strings allocated in MemPool // The Pool cmsUInt32Number PoolSize; // The maximum allocated size cmsUInt32Number PoolUsed; // The used size void* MemPool; // Pointer to begin of memory pool }; // Named color list internal representation typedef struct { char Name[cmsMAX_PATH]; cmsUInt16Number PCS[3]; cmsUInt16Number DeviceColorant[cmsMAXCHANNELS]; } _cmsNAMEDCOLOR; struct _cms_NAMEDCOLORLIST_struct { cmsUInt32Number nColors; cmsUInt32Number Allocated; cmsUInt32Number ColorantCount; char Prefix[33]; // Prefix and suffix are defined to be 32 characters at most char Suffix[33]; _cmsNAMEDCOLOR* List; cmsContext ContextID; }; // ---------------------------------------------------------------------------------- // This is the internal struct holding profile details. // Maximum supported tags in a profile #define MAX_TABLE_TAG 100 typedef struct _cms_iccprofile_struct { // I/O handler cmsIOHANDLER* IOhandler; // The thread ID cmsContext ContextID; // Creation time struct tm Created; // Only most important items found in ICC profiles cmsUInt32Number Version; cmsProfileClassSignature DeviceClass; cmsColorSpaceSignature ColorSpace; cmsColorSpaceSignature PCS; cmsUInt32Number RenderingIntent; cmsUInt32Number flags; cmsUInt32Number manufacturer, model; cmsUInt64Number attributes; cmsUInt32Number creator; cmsProfileID ProfileID; // Dictionary cmsUInt32Number TagCount; cmsTagSignature TagNames[MAX_TABLE_TAG]; cmsTagSignature TagLinked[MAX_TABLE_TAG]; // The tag to which is linked (0=none) cmsUInt32Number TagSizes[MAX_TABLE_TAG]; // Size on disk cmsUInt32Number TagOffsets[MAX_TABLE_TAG]; cmsBool TagSaveAsRaw[MAX_TABLE_TAG]; // True to write uncooked void * TagPtrs[MAX_TABLE_TAG]; cmsTagTypeHandler* TagTypeHandlers[MAX_TABLE_TAG]; // Same structure may be serialized on different types // depending on profile version, so we keep track of the // type handler for each tag in the list. // Special cmsBool IsWrite; // Keep a mutex for cmsReadTag -- Note that this only works if the user includes a mutex plugin void * UsrMutex; } _cmsICCPROFILE; // IO helpers for profiles cmsBool _cmsReadHeader(_cmsICCPROFILE* Icc); cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace); int _cmsSearchTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, cmsBool lFollowLinks); // Tag types cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsContext ContextID, cmsTagTypeSignature sig); cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig); cmsTagDescriptor* _cmsGetTagDescriptor(cmsContext ContextID, cmsTagSignature sig); // Error logging --------------------------------------------------------------------------------------------------------- void _cmsTagSignature2String(char String[5], cmsTagSignature sig); // Interpolation --------------------------------------------------------------------------------------------------------- CMSCHECKPOINT cmsInterpParams* CMSEXPORT _cmsComputeInterpParams(cmsContext ContextID, cmsUInt32Number nSamples, cmsUInt32Number InputChan, cmsUInt32Number OutputChan, const void* Table, cmsUInt32Number dwFlags); cmsInterpParams* _cmsComputeInterpParamsEx(cmsContext ContextID, const cmsUInt32Number nSamples[], cmsUInt32Number InputChan, cmsUInt32Number OutputChan, const void* Table, cmsUInt32Number dwFlags); CMSCHECKPOINT void CMSEXPORT _cmsFreeInterpParams(cmsInterpParams* p); cmsBool _cmsSetInterpolationRoutine(cmsContext ContextID, cmsInterpParams* p); // Curves ---------------------------------------------------------------------------------------------------------------- // This struct holds information about a segment, plus a pointer to the function that implements the evaluation. // In the case of table-based, Eval pointer is set to NULL // The gamma function main structure struct _cms_curve_struct { cmsInterpParams* InterpParams; // Private optimizations for interpolation cmsUInt32Number nSegments; // Number of segments in the curve. Zero for a 16-bit based tables cmsCurveSegment* Segments; // The segments cmsInterpParams** SegInterp; // Array of private optimizations for interpolation in table-based segments cmsParametricCurveEvaluator* Evals; // Evaluators (one per segment) // 16 bit Table-based representation follows cmsUInt32Number nEntries; // Number of table elements cmsUInt16Number* Table16; // The table itself. }; // Pipelines & Stages --------------------------------------------------------------------------------------------- // A single stage struct _cmsStage_struct { cmsContext ContextID; cmsStageSignature Type; // Identifies the stage cmsStageSignature Implements; // Identifies the *function* of the stage (for optimizations) cmsUInt32Number InputChannels; // Input channels -- for optimization purposes cmsUInt32Number OutputChannels; // Output channels -- for optimization purposes _cmsStageEvalFn EvalPtr; // Points to fn that evaluates the stage (always in floating point) _cmsStageDupElemFn DupElemPtr; // Points to a fn that duplicates the *data* of the stage _cmsStageFreeElemFn FreePtr; // Points to a fn that sets the *data* of the stage free // A generic pointer to whatever memory needed by the stage void* Data; // Maintains linked list (used internally) struct _cmsStage_struct* Next; }; // Special Stages (cannot be saved) CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocLab2XYZ(cmsContext ContextID); CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocXYZ2Lab(cmsContext ContextID); cmsStage* _cmsStageAllocLabPrelin(cmsContext ContextID); CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocLabV2ToV4(cmsContext ContextID); cmsStage* _cmsStageAllocLabV2ToV4curves(cmsContext ContextID); CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocLabV4ToV2(cmsContext ContextID); CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocNamedColor(cmsNAMEDCOLORLIST* NamedColorList, cmsBool UsePCS); CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocIdentityCurves(cmsContext ContextID, cmsUInt32Number nChannels); CMSCHECKPOINT cmsStage* CMSEXPORT _cmsStageAllocIdentityCLut(cmsContext ContextID, cmsUInt32Number nChan); cmsStage* _cmsStageNormalizeFromLabFloat(cmsContext ContextID); cmsStage* _cmsStageNormalizeFromXyzFloat(cmsContext ContextID); cmsStage* _cmsStageNormalizeToLabFloat(cmsContext ContextID); cmsStage* _cmsStageNormalizeToXyzFloat(cmsContext ContextID); cmsStage* _cmsStageClipNegatives(cmsContext ContextID, cmsUInt32Number nChannels); // For curve set only cmsToneCurve** _cmsStageGetPtrToCurveSet(const cmsStage* mpe); struct _cmsPipeline_struct { cmsStage* Elements; // Points to elements chain cmsUInt32Number InputChannels, OutputChannels; // Data & evaluators void *Data; _cmsPipelineEval16Fn Eval16Fn; _cmsPipelineEvalFloatFn EvalFloatFn; _cmsFreeUserDataFn FreeDataFn; _cmsDupUserDataFn DupDataFn; cmsContext ContextID; // Environment cmsBool SaveAs8Bits; // Implementation-specific: save as 8 bits if possible }; // LUT reading & creation ------------------------------------------------------------------------------------------- // Read tags using low-level function, provide necessary glue code to adapt versions, etc. All those return a brand new copy // of the LUTS, since ownership of original is up to the profile. The user should free allocated resources. CMSCHECKPOINT cmsPipeline* CMSEXPORT _cmsReadInputLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent); CMSCHECKPOINT cmsPipeline* CMSEXPORT _cmsReadOutputLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent); CMSCHECKPOINT cmsPipeline* CMSEXPORT _cmsReadDevicelinkLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent); // Special values cmsBool _cmsReadMediaWhitePoint(cmsCIEXYZ* Dest, cmsHPROFILE hProfile); cmsBool _cmsReadCHAD(cmsMAT3* Dest, cmsHPROFILE hProfile); // Profile linker -------------------------------------------------------------------------------------------------- // Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point // compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS // after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1) cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], cmsHPROFILE hProfiles[], cmsBool BPC[], cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); // Sequence -------------------------------------------------------------------------------------------------------- cmsSEQ* _cmsReadProfileSequence(cmsHPROFILE hProfile); cmsBool _cmsWriteProfileSequence(cmsHPROFILE hProfile, const cmsSEQ* seq); cmsSEQ* _cmsCompileProfileSequence(cmsContext ContextID, cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[]); // LUT optimization ------------------------------------------------------------------------------------------------ CMSCHECKPOINT cmsUInt16Number CMSEXPORT _cmsQuantizeVal(cmsFloat64Number i, cmsUInt32Number MaxSamples); CMSAPI cmsUInt32Number CMSEXPORT _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags); cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space, cmsUInt16Number **White, cmsUInt16Number **Black, cmsUInt32Number *nOutputs); CMSAPI cmsBool CMSEXPORT _cmsOptimizePipeline(cmsContext ContextID, cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags ); // Hi level LUT building ---------------------------------------------------------------------------------------------- cmsPipeline* _cmsCreateGamutCheckPipeline(cmsContext ContextID, cmsHPROFILE hProfiles[], cmsBool BPC[], cmsUInt32Number Intents[], cmsFloat64Number AdaptationStates[], cmsUInt32Number nGamutPCSposition, cmsHPROFILE hGamut); // Formatters ------------------------------------------------------------------------------------------------------------ #define cmsFLAGS_CAN_CHANGE_FORMATTER 0x02000000 // Allow change buffer format cmsBool _cmsFormatterIsFloat(cmsUInt32Number Type); cmsBool _cmsFormatterIs8bit(cmsUInt32Number Type); CMSCHECKPOINT cmsFormatter CMSEXPORT _cmsGetFormatter(cmsContext ContextID, cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 cmsFormatterDirection Dir, cmsUInt32Number dwFlags); #ifndef CMS_NO_HALF_SUPPORT // Half float CMSCHECKPOINT cmsFloat32Number CMSEXPORT _cmsHalf2Float(cmsUInt16Number h); CMSCHECKPOINT cmsUInt16Number CMSEXPORT _cmsFloat2Half(cmsFloat32Number flt); #endif // Transform logic ------------------------------------------------------------------------------------------------------ struct _cmstransform_struct; typedef struct { // 1-pixel cache (16 bits only) cmsUInt16Number CacheIn[cmsMAXCHANNELS]; cmsUInt16Number CacheOut[cmsMAXCHANNELS]; } _cmsCACHE; // Transformation typedef struct _cmstransform_struct { cmsUInt32Number InputFormat, OutputFormat; // Keep formats for further reference // Points to transform code _cmsTransform2Fn xform; // Formatters, cannot be embedded into LUT because cache cmsFormatter16 FromInput; cmsFormatter16 ToOutput; cmsFormatterFloat FromInputFloat; cmsFormatterFloat ToOutputFloat; // 1-pixel cache seed for zero as input (16 bits, read only) _cmsCACHE Cache; // A Pipeline holding the full (optimized) transform cmsPipeline* Lut; // A Pipeline holding the gamut check. It goes from the input space to bilevel cmsPipeline* GamutCheck; // Colorant tables cmsNAMEDCOLORLIST* InputColorant; // Input Colorant table cmsNAMEDCOLORLIST* OutputColorant; // Colorant table (for n chans > CMYK) // Informational only cmsColorSpaceSignature EntryColorSpace; cmsColorSpaceSignature ExitColorSpace; // White points (informative only) cmsCIEXYZ EntryWhitePoint; cmsCIEXYZ ExitWhitePoint; // Profiles used to create the transform cmsSEQ* Sequence; cmsUInt32Number dwOriginalFlags; cmsFloat64Number AdaptationState; // The intent of this transform. That is usually the last intent in the profilechain, but may differ cmsUInt32Number RenderingIntent; // An id that uniquely identifies the running context. May be null. cmsContext ContextID; // A user-defined pointer that can be used to store data for transform plug-ins void* UserData; _cmsFreeUserDataFn FreeUserData; // A way to provide backwards compatibility with full xform plugins _cmsTransformFn OldXform; } _cmsTRANSFORM; // Copies extra channels from input to output if the original flags in the transform structure // instructs to do so. This function is called on all standard transform functions. void _cmsHandleExtraChannels(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride); // ----------------------------------------------------------------------------------------------------------------------- cmsHTRANSFORM _cmsChain2Lab(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number InputFormat, cmsUInt32Number OutputFormat, const cmsUInt32Number Intents[], const cmsHPROFILE hProfiles[], const cmsBool BPC[], const cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); cmsToneCurve* _cmsBuildKToneCurve(cmsContext ContextID, cmsUInt32Number nPoints, cmsUInt32Number nProfiles, const cmsUInt32Number Intents[], const cmsHPROFILE hProfiles[], const cmsBool BPC[], const cmsFloat64Number AdaptationStates[], cmsUInt32Number dwFlags); cmsBool _cmsAdaptationMatrix(cmsMAT3* r, const cmsMAT3* ConeMatrix, const cmsCIEXYZ* FromIll, const cmsCIEXYZ* ToIll); cmsBool _cmsBuildRGB2XYZtransferMatrix(cmsMAT3* r, const cmsCIExyY* WhitePoint, const cmsCIExyYTRIPLE* Primaries); #define _lcms_internal_H #endif lcms2-2.12rc1/src/cmsalpha.c0000644000175000017500000004447713775114656014660 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Alpha copy ------------------------------------------------------------------------------------------------------------------ // This macro return words stored as big endian #define CHANGE_ENDIAN(w) (cmsUInt16Number) ((cmsUInt16Number) ((w)<<8)|((w)>>8)) // Floor to byte, taking care of saturation cmsINLINE cmsUInt8Number _cmsQuickSaturateByte(cmsFloat64Number d) { d += 0.5; if (d <= 0) return 0; if (d >= 255.0) return 255; return (cmsUInt8Number) _cmsQuickFloorWord(d); } // Return the size in bytes of a given formatter static cmsUInt32Number trueBytesSize(cmsUInt32Number Format) { cmsUInt32Number fmt_bytes = T_BYTES(Format); // For double, the T_BYTES field returns zero if (fmt_bytes == 0) return sizeof(double); // Otherwise, it is already correct for all formats return fmt_bytes; } // Several format converters typedef void(*cmsFormatterAlphaFn)(void* dst, const void* src); // From 8 static void copy8(void* dst, const void* src) { memmove(dst, src, 1); } static void from8to16(void* dst, const void* src) { cmsUInt8Number n = *(cmsUInt8Number*)src; *(cmsUInt16Number*) dst = FROM_8_TO_16(n); } static void from8to16SE(void* dst, const void* src) { cmsUInt8Number n = *(cmsUInt8Number*)src; *(cmsUInt16Number*)dst = CHANGE_ENDIAN(FROM_8_TO_16(n)); } static void from8toFLT(void* dst, const void* src) { *(cmsFloat32Number*)dst = (*(cmsUInt8Number*)src) / 255.0f; } static void from8toDBL(void* dst, const void* src) { *(cmsFloat64Number*)dst = (*(cmsUInt8Number*)src) / 255.0; } static void from8toHLF(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = (*(cmsUInt8Number*)src) / 255.0f; *(cmsUInt16Number*)dst = _cmsFloat2Half(n); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } // From 16 static void from16to8(void* dst, const void* src) { cmsUInt16Number n = *(cmsUInt16Number*)src; *(cmsUInt8Number*) dst = FROM_16_TO_8(n); } static void from16SEto8(void* dst, const void* src) { cmsUInt16Number n = *(cmsUInt16Number*)src; *(cmsUInt8Number*)dst = FROM_16_TO_8(CHANGE_ENDIAN(n)); } static void copy16(void* dst, const void* src) { memmove(dst, src, 2); } static void from16to16(void* dst, const void* src) { cmsUInt16Number n = *(cmsUInt16Number*)src; *(cmsUInt16Number*)dst = CHANGE_ENDIAN(n); } static void from16toFLT(void* dst, const void* src) { *(cmsFloat32Number*)dst = (*(cmsUInt16Number*)src) / 65535.0f; } static void from16SEtoFLT(void* dst, const void* src) { *(cmsFloat32Number*)dst = (CHANGE_ENDIAN(*(cmsUInt16Number*)src)) / 65535.0f; } static void from16toDBL(void* dst, const void* src) { *(cmsFloat64Number*)dst = (*(cmsUInt16Number*)src) / 65535.0f; } static void from16SEtoDBL(void* dst, const void* src) { *(cmsFloat64Number*)dst = (CHANGE_ENDIAN(*(cmsUInt16Number*)src)) / 65535.0f; } static void from16toHLF(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = (*(cmsUInt16Number*)src) / 65535.0f; *(cmsUInt16Number*)dst = _cmsFloat2Half(n); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } static void from16SEtoHLF(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = (CHANGE_ENDIAN(*(cmsUInt16Number*)src)) / 65535.0f; *(cmsUInt16Number*)dst = _cmsFloat2Half(n); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } // From Float static void fromFLTto8(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0f); } static void fromFLTto16(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); } static void fromFLTto16SE(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); } static void copy32(void* dst, const void* src) { memmove(dst, src, sizeof(cmsFloat32Number)); } static void fromFLTtoDBL(void* dst, const void* src) { cmsFloat32Number n = *(cmsFloat32Number*)src; *(cmsFloat64Number*)dst = (cmsFloat64Number)n; } static void fromFLTtoHLF(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = *(cmsFloat32Number*)src; *(cmsUInt16Number*)dst = _cmsFloat2Half(n); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } // From HALF static void fromHLFto8(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0f); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } static void fromHLFto16(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } static void fromHLFto16SE(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = _cmsHalf2Float(*(cmsUInt16Number*)src); cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } static void fromHLFtoFLT(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT *(cmsFloat32Number*)dst = _cmsHalf2Float(*(cmsUInt16Number*)src); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } static void fromHLFtoDBL(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT *(cmsFloat64Number*)dst = (cmsFloat64Number)_cmsHalf2Float(*(cmsUInt16Number*)src); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } // From double static void fromDBLto8(void* dst, const void* src) { cmsFloat64Number n = *(cmsFloat64Number*)src; *(cmsUInt8Number*)dst = _cmsQuickSaturateByte(n * 255.0); } static void fromDBLto16(void* dst, const void* src) { cmsFloat64Number n = *(cmsFloat64Number*)src; *(cmsUInt16Number*)dst = _cmsQuickSaturateWord(n * 65535.0f); } static void fromDBLto16SE(void* dst, const void* src) { cmsFloat64Number n = *(cmsFloat64Number*)src; cmsUInt16Number i = _cmsQuickSaturateWord(n * 65535.0f); *(cmsUInt16Number*)dst = CHANGE_ENDIAN(i); } static void fromDBLtoFLT(void* dst, const void* src) { cmsFloat64Number n = *(cmsFloat64Number*)src; *(cmsFloat32Number*)dst = (cmsFloat32Number) n; } static void fromDBLtoHLF(void* dst, const void* src) { #ifndef CMS_NO_HALF_SUPPORT cmsFloat32Number n = (cmsFloat32Number) *(cmsFloat64Number*)src; *(cmsUInt16Number*)dst = _cmsFloat2Half(n); #else cmsUNUSED_PARAMETER(dst); cmsUNUSED_PARAMETER(src); #endif } static void copy64(void* dst, const void* src) { memmove(dst, src, sizeof(cmsFloat64Number)); } // Returns the position (x or y) of the formatter in the table of functions static int FormatterPos(cmsUInt32Number frm) { cmsUInt32Number b = T_BYTES(frm); if (b == 0 && T_FLOAT(frm)) return 5; // DBL #ifndef CMS_NO_HALF_SUPPORT if (b == 2 && T_FLOAT(frm)) return 3; // HLF #endif if (b == 4 && T_FLOAT(frm)) return 4; // FLT if (b == 2 && !T_FLOAT(frm)) { if (T_ENDIAN16(frm)) return 2; // 16SE else return 1; // 16 } if (b == 1 && !T_FLOAT(frm)) return 0; // 8 return -1; // not recognized } // Obtains an alpha-to-alpha function formatter static cmsFormatterAlphaFn _cmsGetFormatterAlpha(cmsContext id, cmsUInt32Number in, cmsUInt32Number out) { static cmsFormatterAlphaFn FormattersAlpha[6][6] = { /* from 8 */ { copy8, from8to16, from8to16SE, from8toHLF, from8toFLT, from8toDBL }, /* from 16*/ { from16to8, copy16, from16to16, from16toHLF, from16toFLT, from16toDBL }, /* from 16SE*/{ from16SEto8, from16to16, copy16, from16SEtoHLF,from16SEtoFLT, from16SEtoDBL }, /* from HLF*/ { fromHLFto8, fromHLFto16, fromHLFto16SE, copy16, fromHLFtoFLT, fromHLFtoDBL }, /* from FLT*/ { fromFLTto8, fromFLTto16, fromFLTto16SE, fromFLTtoHLF, copy32, fromFLTtoDBL }, /* from DBL*/ { fromDBLto8, fromDBLto16, fromDBLto16SE, fromDBLtoHLF, fromDBLtoFLT, copy64 }}; int in_n = FormatterPos(in); int out_n = FormatterPos(out); if (in_n < 0 || out_n < 0 || in_n > 5 || out_n > 5) { cmsSignalError(id, cmsERROR_UNKNOWN_EXTENSION, "Unrecognized alpha channel width"); return NULL; } return FormattersAlpha[in_n][out_n]; } // This function computes the distance from each component to the next one in bytes. static void ComputeIncrementsForChunky(cmsUInt32Number Format, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]) { cmsUInt32Number channels[cmsMAXCHANNELS]; cmsUInt32Number extra = T_EXTRA(Format); cmsUInt32Number nchannels = T_CHANNELS(Format); cmsUInt32Number total_chans = nchannels + extra; cmsUInt32Number i; cmsUInt32Number channelSize = trueBytesSize(Format); cmsUInt32Number pixelSize = channelSize * total_chans; // Sanity check if (total_chans <= 0 || total_chans >= cmsMAXCHANNELS) return; memset(channels, 0, sizeof(channels)); // Separation is independent of starting point and only depends on channel size for (i = 0; i < extra; i++) ComponentPointerIncrements[i] = pixelSize; // Handle do swap for (i = 0; i < total_chans; i++) { if (T_DOSWAP(Format)) { channels[i] = total_chans - i - 1; } else { channels[i] = i; } } // Handle swap first (ROL of positions), example CMYK -> KCMY | 0123 -> 3012 if (T_SWAPFIRST(Format) && total_chans > 1) { cmsUInt32Number tmp = channels[0]; for (i = 0; i < total_chans-1; i++) channels[i] = channels[i + 1]; channels[total_chans - 1] = tmp; } // Handle size if (channelSize > 1) for (i = 0; i < total_chans; i++) { channels[i] *= channelSize; } for (i = 0; i < extra; i++) ComponentStartingOrder[i] = channels[i + nchannels]; } // On planar configurations, the distance is the stride added to any non-negative static void ComputeIncrementsForPlanar(cmsUInt32Number Format, cmsUInt32Number BytesPerPlane, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]) { cmsUInt32Number channels[cmsMAXCHANNELS]; cmsUInt32Number extra = T_EXTRA(Format); cmsUInt32Number nchannels = T_CHANNELS(Format); cmsUInt32Number total_chans = nchannels + extra; cmsUInt32Number i; cmsUInt32Number channelSize = trueBytesSize(Format); // Sanity check if (total_chans <= 0 || total_chans >= cmsMAXCHANNELS) return; memset(channels, 0, sizeof(channels)); // Separation is independent of starting point and only depends on channel size for (i = 0; i < extra; i++) ComponentPointerIncrements[i] = channelSize; // Handle do swap for (i = 0; i < total_chans; i++) { if (T_DOSWAP(Format)) { channels[i] = total_chans - i - 1; } else { channels[i] = i; } } // Handle swap first (ROL of positions), example CMYK -> KCMY | 0123 -> 3012 if (T_SWAPFIRST(Format) && total_chans > 0) { cmsUInt32Number tmp = channels[0]; for (i = 0; i < total_chans - 1; i++) channels[i] = channels[i + 1]; channels[total_chans - 1] = tmp; } // Handle size for (i = 0; i < total_chans; i++) { channels[i] *= BytesPerPlane; } for (i = 0; i < extra; i++) ComponentStartingOrder[i] = channels[i + nchannels]; } // Dispatcher por chunky and planar RGB static void ComputeComponentIncrements(cmsUInt32Number Format, cmsUInt32Number BytesPerPlane, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]) { if (T_PLANAR(Format)) { ComputeIncrementsForPlanar(Format, BytesPerPlane, ComponentStartingOrder, ComponentPointerIncrements); } else { ComputeIncrementsForChunky(Format, ComponentStartingOrder, ComponentPointerIncrements); } } // Handles extra channels copying alpha if requested by the flags void _cmsHandleExtraChannels(_cmsTRANSFORM* p, const void* in, void* out, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, j, k; cmsUInt32Number nExtra; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; cmsFormatterAlphaFn copyValueFn; // Make sure we need some copy if (!(p->dwOriginalFlags & cmsFLAGS_COPY_ALPHA)) return; // Exit early if in-place color-management is occurring - no need to copy extra channels to themselves. if (p->InputFormat == p->OutputFormat && in == out) return; // Make sure we have same number of alpha channels. If not, just return as this should be checked at transform creation time. nExtra = T_EXTRA(p->InputFormat); if (nExtra != T_EXTRA(p->OutputFormat)) return; // Anything to do? if (nExtra == 0) return; // Compute the increments ComputeComponentIncrements(p->InputFormat, Stride->BytesPerPlaneIn, SourceStartingOrder, SourceIncrements); ComputeComponentIncrements(p->OutputFormat, Stride->BytesPerPlaneOut, DestStartingOrder, DestIncrements); // Check for conversions 8, 16, half, float, dbl copyValueFn = _cmsGetFormatterAlpha(p->ContextID, p->InputFormat, p->OutputFormat); if (copyValueFn == NULL) return; if (nExtra == 1) { // Optimized routine for copying a single extra channel quickly cmsUInt8Number* SourcePtr; cmsUInt8Number* DestPtr; cmsUInt32Number SourceStrideIncrement = 0; cmsUInt32Number DestStrideIncrement = 0; // The loop itself for (i = 0; i < LineCount; i++) { // Prepare pointers for the loop SourcePtr = (cmsUInt8Number*)in + SourceStartingOrder[0] + SourceStrideIncrement; DestPtr = (cmsUInt8Number*)out + DestStartingOrder[0] + DestStrideIncrement; for (j = 0; j < PixelsPerLine; j++) { copyValueFn(DestPtr, SourcePtr); SourcePtr += SourceIncrements[0]; DestPtr += DestIncrements[0]; } SourceStrideIncrement += Stride->BytesPerLineIn; DestStrideIncrement += Stride->BytesPerLineOut; } } else { // General case with more than one extra channel cmsUInt8Number* SourcePtr[cmsMAXCHANNELS]; cmsUInt8Number* DestPtr[cmsMAXCHANNELS]; cmsUInt32Number SourceStrideIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStrideIncrements[cmsMAXCHANNELS]; memset(SourceStrideIncrements, 0, sizeof(SourceStrideIncrements)); memset(DestStrideIncrements, 0, sizeof(DestStrideIncrements)); // The loop itself for (i = 0; i < LineCount; i++) { // Prepare pointers for the loop for (j = 0; j < nExtra; j++) { SourcePtr[j] = (cmsUInt8Number*)in + SourceStartingOrder[j] + SourceStrideIncrements[j]; DestPtr[j] = (cmsUInt8Number*)out + DestStartingOrder[j] + DestStrideIncrements[j]; } for (j = 0; j < PixelsPerLine; j++) { for (k = 0; k < nExtra; k++) { copyValueFn(DestPtr[k], SourcePtr[k]); SourcePtr[k] += SourceIncrements[k]; DestPtr[k] += DestIncrements[k]; } } for (j = 0; j < nExtra; j++) { SourceStrideIncrements[j] += Stride->BytesPerLineIn; DestStrideIncrements[j] += Stride->BytesPerLineOut; } } } } lcms2-2.12rc1/src/cmscgats.c0000644000175000017500000021710613775114656014663 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- #define MAXID 128 // Max length of identifier #define MAXSTR 1024 // Max length of string #define MAXTABLES 255 // Max Number of tables in a single stream #define MAXINCLUDE 20 // Max number of nested includes #define DEFAULT_DBL_FORMAT "%.10g" // Double formatting #ifdef CMS_IS_WINDOWS_ # include # define DIR_CHAR '\\' #else # define DIR_CHAR '/' #endif // Symbols typedef enum { SUNDEFINED, SINUM, // Integer SDNUM, // Real SIDENT, // Identifier SSTRING, // string SCOMMENT, // comment SEOLN, // End of line SEOF, // End of stream SSYNERROR, // Syntax error found on stream // Keywords SBEGIN_DATA, SBEGIN_DATA_FORMAT, SEND_DATA, SEND_DATA_FORMAT, SKEYWORD, SDATA_FORMAT_ID, SINCLUDE } SYMBOL; // How to write the value typedef enum { WRITE_UNCOOKED, WRITE_STRINGIFY, WRITE_HEXADECIMAL, WRITE_BINARY, WRITE_PAIR } WRITEMODE; // Linked list of variable names typedef struct _KeyVal { struct _KeyVal* Next; char* Keyword; // Name of variable struct _KeyVal* NextSubkey; // If key is a dictionary, points to the next item char* Subkey; // If key is a dictionary, points to the subkey name char* Value; // Points to value WRITEMODE WriteAs; // How to write the value } KEYVALUE; // Linked list of memory chunks (Memory sink) typedef struct _OwnedMem { struct _OwnedMem* Next; void * Ptr; // Point to value } OWNEDMEM; // Suballocator typedef struct _SubAllocator { cmsUInt8Number* Block; cmsUInt32Number BlockSize; cmsUInt32Number Used; } SUBALLOCATOR; // Table. Each individual table can hold properties and rows & cols typedef struct _Table { char SheetType[MAXSTR]; // The first row of the IT8 (the type) int nSamples, nPatches; // Cols, Rows int SampleID; // Pos of ID KEYVALUE* HeaderList; // The properties char** DataFormat; // The binary stream descriptor char** Data; // The binary stream } TABLE; // File stream being parsed typedef struct _FileContext { char FileName[cmsMAX_PATH]; // File name if being read from file FILE* Stream; // File stream or NULL if holded in memory } FILECTX; // This struct hold all information about an open IT8 handler. typedef struct { cmsUInt32Number TablesCount; // How many tables in this stream cmsUInt32Number nTable; // The actual table TABLE Tab[MAXTABLES]; // Memory management OWNEDMEM* MemorySink; // The storage backend SUBALLOCATOR Allocator; // String suballocator -- just to keep it fast // Parser state machine SYMBOL sy; // Current symbol int ch; // Current character cmsInt32Number inum; // integer value cmsFloat64Number dnum; // real value char id[MAXID]; // identifier char str[MAXSTR]; // string // Allowed keywords & datasets. They have visibility on whole stream KEYVALUE* ValidKeywords; KEYVALUE* ValidSampleID; char* Source; // Points to loc. being parsed cmsInt32Number lineno; // line counter for error reporting FILECTX* FileStack[MAXINCLUDE]; // Stack of files being parsed cmsInt32Number IncludeSP; // Include Stack Pointer char* MemoryBlock; // The stream if holded in memory char DoubleFormatter[MAXID];// Printf-like 'cmsFloat64Number' formatter cmsContext ContextID; // The threading context } cmsIT8; // The stream for save operations typedef struct { FILE* stream; // For save-to-file behaviour cmsUInt8Number* Base; cmsUInt8Number* Ptr; // For save-to-mem behaviour cmsUInt32Number Used; cmsUInt32Number Max; } SAVESTREAM; // ------------------------------------------------------ cmsIT8 parsing routines // A keyword typedef struct { const char *id; SYMBOL sy; } KEYWORD; // The keyword->symbol translation table. Sorting is required. static const KEYWORD TabKeys[] = { {"$INCLUDE", SINCLUDE}, // This is an extension! {".INCLUDE", SINCLUDE}, // This is an extension! {"BEGIN_DATA", SBEGIN_DATA }, {"BEGIN_DATA_FORMAT", SBEGIN_DATA_FORMAT }, {"DATA_FORMAT_IDENTIFIER", SDATA_FORMAT_ID}, {"END_DATA", SEND_DATA}, {"END_DATA_FORMAT", SEND_DATA_FORMAT}, {"KEYWORD", SKEYWORD} }; #define NUMKEYS (sizeof(TabKeys)/sizeof(KEYWORD)) // Predefined properties // A property typedef struct { const char *id; // The identifier WRITEMODE as; // How is supposed to be written } PROPERTY; static PROPERTY PredefinedProperties[] = { {"NUMBER_OF_FIELDS", WRITE_UNCOOKED}, // Required - NUMBER OF FIELDS {"NUMBER_OF_SETS", WRITE_UNCOOKED}, // Required - NUMBER OF SETS {"ORIGINATOR", WRITE_STRINGIFY}, // Required - Identifies the specific system, organization or individual that created the data file. {"FILE_DESCRIPTOR", WRITE_STRINGIFY}, // Required - Describes the purpose or contents of the data file. {"CREATED", WRITE_STRINGIFY}, // Required - Indicates date of creation of the data file. {"DESCRIPTOR", WRITE_STRINGIFY}, // Required - Describes the purpose or contents of the data file. {"DIFFUSE_GEOMETRY", WRITE_STRINGIFY}, // The diffuse geometry used. Allowed values are "sphere" or "opal". {"MANUFACTURER", WRITE_STRINGIFY}, {"MANUFACTURE", WRITE_STRINGIFY}, // Some broken Fuji targets does store this value {"PROD_DATE", WRITE_STRINGIFY}, // Identifies year and month of production of the target in the form yyyy:mm. {"SERIAL", WRITE_STRINGIFY}, // Uniquely identifies individual physical target. {"MATERIAL", WRITE_STRINGIFY}, // Identifies the material on which the target was produced using a code // uniquely identifying th e material. This is intend ed to be used for IT8.7 // physical targets only (i.e . IT8.7/1 a nd IT8.7/2). {"INSTRUMENTATION", WRITE_STRINGIFY}, // Used to report the specific instrumentation used (manufacturer and // model number) to generate the data reported. This data will often // provide more information about the particular data collected than an // extensive list of specific details. This is particularly important for // spectral data or data derived from spectrophotometry. {"MEASUREMENT_SOURCE", WRITE_STRINGIFY}, // Illumination used for spectral measurements. This data helps provide // a guide to the potential for issues of paper fluorescence, etc. {"PRINT_CONDITIONS", WRITE_STRINGIFY}, // Used to define the characteristics of the printed sheet being reported. // Where standard conditions have been defined (e.g., SWOP at nominal) // named conditions may suffice. Otherwise, detailed information is // needed. {"SAMPLE_BACKING", WRITE_STRINGIFY}, // Identifies the backing material used behind the sample during // measurement. Allowed values are "black", "white", or {"na". {"CHISQ_DOF", WRITE_STRINGIFY}, // Degrees of freedom associated with the Chi squared statistic // below properties are new in recent specs: {"MEASUREMENT_GEOMETRY", WRITE_STRINGIFY}, // The type of measurement, either reflection or transmission, should be indicated // along with details of the geometry and the aperture size and shape. For example, // for transmission measurements it is important to identify 0/diffuse, diffuse/0, // opal or integrating sphere, etc. For reflection it is important to identify 0/45, // 45/0, sphere (specular included or excluded), etc. {"FILTER", WRITE_STRINGIFY}, // Identifies the use of physical filter(s) during measurement. Typically used to // denote the use of filters such as none, D65, Red, Green or Blue. {"POLARIZATION", WRITE_STRINGIFY}, // Identifies the use of a physical polarization filter during measurement. Allowed // values are {"yes", "white", "none" or "na". {"WEIGHTING_FUNCTION", WRITE_PAIR}, // Indicates such functions as: the CIE standard observer functions used in the // calculation of various data parameters (2 degree and 10 degree), CIE standard // illuminant functions used in the calculation of various data parameters (e.g., D50, // D65, etc.), density status response, etc. If used there shall be at least one // name-value pair following the WEIGHTING_FUNCTION tag/keyword. The first attribute // in the set shall be {"name" and shall identify the particular parameter used. // The second shall be {"value" and shall provide the value associated with that name. // For ASCII data, a string containing the Name and Value attribute pairs shall follow // the weighting function keyword. A semi-colon separates attribute pairs from each // other and within the attribute the name and value are separated by a comma. {"COMPUTATIONAL_PARAMETER", WRITE_PAIR}, // Parameter that is used in computing a value from measured data. Name is the name // of the calculation, parameter is the name of the parameter used in the calculation // and value is the value of the parameter. {"TARGET_TYPE", WRITE_STRINGIFY}, // The type of target being measured, e.g. IT8.7/1, IT8.7/3, user defined, etc. {"COLORANT", WRITE_STRINGIFY}, // Identifies the colorant(s) used in creating the target. {"TABLE_DESCRIPTOR", WRITE_STRINGIFY}, // Describes the purpose or contents of a data table. {"TABLE_NAME", WRITE_STRINGIFY} // Provides a short name for a data table. }; #define NUMPREDEFINEDPROPS (sizeof(PredefinedProperties)/sizeof(PROPERTY)) // Predefined sample types on dataset static const char* PredefinedSampleID[] = { "SAMPLE_ID", // Identifies sample that data represents "STRING", // Identifies label, or other non-machine readable value. // Value must begin and end with a " symbol "CMYK_C", // Cyan component of CMYK data expressed as a percentage "CMYK_M", // Magenta component of CMYK data expressed as a percentage "CMYK_Y", // Yellow component of CMYK data expressed as a percentage "CMYK_K", // Black component of CMYK data expressed as a percentage "D_RED", // Red filter density "D_GREEN", // Green filter density "D_BLUE", // Blue filter density "D_VIS", // Visual filter density "D_MAJOR_FILTER", // Major filter d ensity "RGB_R", // Red component of RGB data "RGB_G", // Green component of RGB data "RGB_B", // Blue com ponent of RGB data "SPECTRAL_NM", // Wavelength of measurement expressed in nanometers "SPECTRAL_PCT", // Percentage reflectance/transmittance "SPECTRAL_DEC", // Reflectance/transmittance "XYZ_X", // X component of tristimulus data "XYZ_Y", // Y component of tristimulus data "XYZ_Z", // Z component of tristimulus data "XYY_X", // x component of chromaticity data "XYY_Y", // y component of chromaticity data "XYY_CAPY", // Y component of tristimulus data "LAB_L", // L* component of Lab data "LAB_A", // a* component of Lab data "LAB_B", // b* component of Lab data "LAB_C", // C*ab component of Lab data "LAB_H", // hab component of Lab data "LAB_DE", // CIE dE "LAB_DE_94", // CIE dE using CIE 94 "LAB_DE_CMC", // dE using CMC "LAB_DE_2000", // CIE dE using CIE DE 2000 "MEAN_DE", // Mean Delta E (LAB_DE) of samples compared to batch average // (Used for data files for ANSI IT8.7/1 and IT8.7/2 targets) "STDEV_X", // Standard deviation of X (tristimulus data) "STDEV_Y", // Standard deviation of Y (tristimulus data) "STDEV_Z", // Standard deviation of Z (tristimulus data) "STDEV_L", // Standard deviation of L* "STDEV_A", // Standard deviation of a* "STDEV_B", // Standard deviation of b* "STDEV_DE", // Standard deviation of CIE dE "CHI_SQD_PAR"}; // The average of the standard deviations of L*, a* and b*. It is // used to derive an estimate of the chi-squared parameter which is // recommended as the predictor of the variability of dE #define NUMPREDEFINEDSAMPLEID (sizeof(PredefinedSampleID)/sizeof(char *)) //Forward declaration of some internal functions static void* AllocChunk(cmsIT8* it8, cmsUInt32Number size); // Checks whatever c is a separator static cmsBool isseparator(int c) { return (c == ' ') || (c == '\t') ; } // Checks whatever c is a valid identifier char static cmsBool ismiddle(int c) { return (!isseparator(c) && (c != '#') && (c !='\"') && (c != '\'') && (c > 32) && (c < 127)); } // Checks whatsever c is a valid identifier middle char. static cmsBool isidchar(int c) { return isalnum(c) || ismiddle(c); } // Checks whatsever c is a valid identifier first char. static cmsBool isfirstidchar(int c) { return !isdigit(c) && ismiddle(c); } // Guess whether the supplied path looks like an absolute path static cmsBool isabsolutepath(const char *path) { char ThreeChars[4]; if(path == NULL) return FALSE; if (path[0] == 0) return FALSE; strncpy(ThreeChars, path, 3); ThreeChars[3] = 0; if(ThreeChars[0] == DIR_CHAR) return TRUE; #ifdef CMS_IS_WINDOWS_ if (isalpha((int) ThreeChars[0]) && ThreeChars[1] == ':') return TRUE; #endif return FALSE; } // Makes a file path based on a given reference path // NOTE: this function doesn't check if the path exists or even if it's legal static cmsBool BuildAbsolutePath(const char *relPath, const char *basePath, char *buffer, cmsUInt32Number MaxLen) { char *tail; cmsUInt32Number len; // Already absolute? if (isabsolutepath(relPath)) { strncpy(buffer, relPath, MaxLen); buffer[MaxLen-1] = 0; return TRUE; } // No, search for last strncpy(buffer, basePath, MaxLen); buffer[MaxLen-1] = 0; tail = strrchr(buffer, DIR_CHAR); if (tail == NULL) return FALSE; // Is not absolute and has no separators?? len = (cmsUInt32Number) (tail - buffer); if (len >= MaxLen) return FALSE; // No need to assure zero terminator over here strncpy(tail + 1, relPath, MaxLen - len); return TRUE; } // Make sure no exploit is being even tried static const char* NoMeta(const char* str) { if (strchr(str, '%') != NULL) return "**** CORRUPTED FORMAT STRING ***"; return str; } // Syntax error static cmsBool SynError(cmsIT8* it8, const char *Txt, ...) { char Buffer[256], ErrMsg[1024]; va_list args; va_start(args, Txt); vsnprintf(Buffer, 255, Txt, args); Buffer[255] = 0; va_end(args); snprintf(ErrMsg, 1023, "%s: Line %d, %s", it8->FileStack[it8 ->IncludeSP]->FileName, it8->lineno, Buffer); ErrMsg[1023] = 0; it8->sy = SSYNERROR; cmsSignalError(it8 ->ContextID, cmsERROR_CORRUPTION_DETECTED, "%s", ErrMsg); return FALSE; } // Check if current symbol is same as specified. issue an error else. static cmsBool Check(cmsIT8* it8, SYMBOL sy, const char* Err) { if (it8 -> sy != sy) return SynError(it8, NoMeta(Err)); return TRUE; } // Read Next character from stream static void NextCh(cmsIT8* it8) { if (it8 -> FileStack[it8 ->IncludeSP]->Stream) { it8 ->ch = fgetc(it8 ->FileStack[it8 ->IncludeSP]->Stream); if (feof(it8 -> FileStack[it8 ->IncludeSP]->Stream)) { if (it8 ->IncludeSP > 0) { fclose(it8 ->FileStack[it8->IncludeSP--]->Stream); it8 -> ch = ' '; // Whitespace to be ignored } else it8 ->ch = 0; // EOF } } else { it8->ch = *it8->Source; if (it8->ch) it8->Source++; } } // Try to see if current identifier is a keyword, if so return the referred symbol static SYMBOL BinSrchKey(const char *id) { int l = 1; int r = NUMKEYS; int x, res; while (r >= l) { x = (l+r)/2; res = cmsstrcasecmp(id, TabKeys[x-1].id); if (res == 0) return TabKeys[x-1].sy; if (res < 0) r = x - 1; else l = x + 1; } return SUNDEFINED; } // 10 ^n static cmsFloat64Number xpow10(int n) { return pow(10, (cmsFloat64Number) n); } // Reads a Real number, tries to follow from integer number static void ReadReal(cmsIT8* it8, cmsInt32Number inum) { it8->dnum = (cmsFloat64Number)inum; while (isdigit(it8->ch)) { it8->dnum = (cmsFloat64Number)it8->dnum * 10.0 + (cmsFloat64Number)(it8->ch - '0'); NextCh(it8); } if (it8->ch == '.') { // Decimal point cmsFloat64Number frac = 0.0; // fraction int prec = 0; // precision NextCh(it8); // Eats dec. point while (isdigit(it8->ch)) { frac = frac * 10.0 + (cmsFloat64Number)(it8->ch - '0'); prec++; NextCh(it8); } it8->dnum = it8->dnum + (frac / xpow10(prec)); } // Exponent, example 34.00E+20 if (toupper(it8->ch) == 'E') { cmsInt32Number e; cmsInt32Number sgn; NextCh(it8); sgn = 1; if (it8->ch == '-') { sgn = -1; NextCh(it8); } else if (it8->ch == '+') { sgn = +1; NextCh(it8); } e = 0; while (isdigit(it8->ch)) { cmsInt32Number digit = (it8->ch - '0'); if ((cmsFloat64Number)e * 10.0 + (cmsFloat64Number)digit < (cmsFloat64Number)+2147483647.0) e = e * 10 + digit; NextCh(it8); } e = sgn*e; it8->dnum = it8->dnum * xpow10(e); } } // Parses a float number // This can not call directly atof because it uses locale dependent // parsing, while CCMX files always use . as decimal separator static cmsFloat64Number ParseFloatNumber(const char *Buffer) { cmsFloat64Number dnum = 0.0; int sign = 1; // keep safe if (Buffer == NULL) return 0.0; if (*Buffer == '-' || *Buffer == '+') { sign = (*Buffer == '-') ? -1 : 1; Buffer++; } while (*Buffer && isdigit((int)*Buffer)) { dnum = dnum * 10.0 + (*Buffer - '0'); if (*Buffer) Buffer++; } if (*Buffer == '.') { cmsFloat64Number frac = 0.0; // fraction int prec = 0; // precision if (*Buffer) Buffer++; while (*Buffer && isdigit((int)*Buffer)) { frac = frac * 10.0 + (*Buffer - '0'); prec++; if (*Buffer) Buffer++; } dnum = dnum + (frac / xpow10(prec)); } // Exponent, example 34.00E+20 if (*Buffer && toupper(*Buffer) == 'E') { int e; int sgn; if (*Buffer) Buffer++; sgn = 1; if (*Buffer == '-') { sgn = -1; if (*Buffer) Buffer++; } else if (*Buffer == '+') { sgn = +1; if (*Buffer) Buffer++; } e = 0; while (*Buffer && isdigit((int)*Buffer)) { cmsInt32Number digit = (*Buffer - '0'); if ((cmsFloat64Number)e * 10.0 + digit < (cmsFloat64Number)+2147483647.0) e = e * 10 + digit; if (*Buffer) Buffer++; } e = sgn*e; dnum = dnum * xpow10(e); } return sign * dnum; } // Reads next symbol static void InSymbol(cmsIT8* it8) { CMSREGISTER char *idptr; CMSREGISTER int k; SYMBOL key; int sng; do { while (isseparator(it8->ch)) NextCh(it8); if (isfirstidchar(it8->ch)) { // Identifier k = 0; idptr = it8->id; do { if (++k < MAXID) *idptr++ = (char) it8->ch; NextCh(it8); } while (isidchar(it8->ch)); *idptr = '\0'; key = BinSrchKey(it8->id); if (key == SUNDEFINED) it8->sy = SIDENT; else it8->sy = key; } else // Is a number? if (isdigit(it8->ch) || it8->ch == '.' || it8->ch == '-' || it8->ch == '+') { int sign = 1; if (it8->ch == '-') { sign = -1; NextCh(it8); } it8->inum = 0; it8->sy = SINUM; if (it8->ch == '0') { // 0xnnnn (Hexa) or 0bnnnn (Binary) NextCh(it8); if (toupper(it8->ch) == 'X') { int j; NextCh(it8); while (isxdigit(it8->ch)) { it8->ch = toupper(it8->ch); if (it8->ch >= 'A' && it8->ch <= 'F') j = it8->ch -'A'+10; else j = it8->ch - '0'; if ((cmsFloat64Number) it8->inum * 16.0 + (cmsFloat64Number) j > (cmsFloat64Number)+2147483647.0) { SynError(it8, "Invalid hexadecimal number"); return; } it8->inum = it8->inum * 16 + j; NextCh(it8); } return; } if (toupper(it8->ch) == 'B') { // Binary int j; NextCh(it8); while (it8->ch == '0' || it8->ch == '1') { j = it8->ch - '0'; if ((cmsFloat64Number) it8->inum * 2.0 + j > (cmsFloat64Number)+2147483647.0) { SynError(it8, "Invalid binary number"); return; } it8->inum = it8->inum * 2 + j; NextCh(it8); } return; } } while (isdigit(it8->ch)) { cmsInt32Number digit = (it8->ch - '0'); if ((cmsFloat64Number) it8->inum * 10.0 + (cmsFloat64Number) digit > (cmsFloat64Number) +2147483647.0) { ReadReal(it8, it8->inum); it8->sy = SDNUM; it8->dnum *= sign; return; } it8->inum = it8->inum * 10 + digit; NextCh(it8); } if (it8->ch == '.') { ReadReal(it8, it8->inum); it8->sy = SDNUM; it8->dnum *= sign; return; } it8 -> inum *= sign; // Special case. Numbers followed by letters are taken as identifiers if (isidchar(it8 ->ch)) { if (it8 ->sy == SINUM) { snprintf(it8->id, 127, "%d", it8->inum); } else { snprintf(it8->id, 127, it8 ->DoubleFormatter, it8->dnum); } k = (int) strlen(it8 ->id); idptr = it8 ->id + k; do { if (++k < MAXID) *idptr++ = (char) it8->ch; NextCh(it8); } while (isidchar(it8->ch)); *idptr = '\0'; it8->sy = SIDENT; } return; } else switch ((int) it8->ch) { // EOF marker -- ignore it case '\x1a': NextCh(it8); break; // Eof stream markers case 0: case -1: it8->sy = SEOF; break; // Next line case '\r': NextCh(it8); if (it8 ->ch == '\n') NextCh(it8); it8->sy = SEOLN; it8->lineno++; break; case '\n': NextCh(it8); it8->sy = SEOLN; it8->lineno++; break; // Comment case '#': NextCh(it8); while (it8->ch && it8->ch != '\n' && it8->ch != '\r') NextCh(it8); it8->sy = SCOMMENT; break; // String. case '\'': case '\"': idptr = it8->str; sng = it8->ch; k = 0; NextCh(it8); while (k < (MAXSTR-1) && it8->ch != sng) { if (it8->ch == '\n'|| it8->ch == '\r') k = MAXSTR+1; else { *idptr++ = (char) it8->ch; NextCh(it8); k++; } } it8->sy = SSTRING; *idptr = '\0'; NextCh(it8); break; default: SynError(it8, "Unrecognized character: 0x%x", it8 ->ch); return; } } while (it8->sy == SCOMMENT); // Handle the include special token if (it8 -> sy == SINCLUDE) { FILECTX* FileNest; if(it8 -> IncludeSP >= (MAXINCLUDE-1)) { SynError(it8, "Too many recursion levels"); return; } InSymbol(it8); if (!Check(it8, SSTRING, "Filename expected")) return; FileNest = it8 -> FileStack[it8 -> IncludeSP + 1]; if(FileNest == NULL) { FileNest = it8 ->FileStack[it8 -> IncludeSP + 1] = (FILECTX*)AllocChunk(it8, sizeof(FILECTX)); //if(FileNest == NULL) // TODO: how to manage out-of-memory conditions? } if (BuildAbsolutePath(it8->str, it8->FileStack[it8->IncludeSP]->FileName, FileNest->FileName, cmsMAX_PATH-1) == FALSE) { SynError(it8, "File path too long"); return; } FileNest->Stream = fopen(FileNest->FileName, "rt"); if (FileNest->Stream == NULL) { SynError(it8, "File %s not found", FileNest->FileName); return; } it8->IncludeSP++; it8 ->ch = ' '; InSymbol(it8); } } // Checks end of line separator static cmsBool CheckEOLN(cmsIT8* it8) { if (!Check(it8, SEOLN, "Expected separator")) return FALSE; while (it8 -> sy == SEOLN) InSymbol(it8); return TRUE; } // Skip a symbol static void Skip(cmsIT8* it8, SYMBOL sy) { if (it8->sy == sy && it8->sy != SEOF) InSymbol(it8); } // Skip multiple EOLN static void SkipEOLN(cmsIT8* it8) { while (it8->sy == SEOLN) { InSymbol(it8); } } // Returns a string holding current value static cmsBool GetVal(cmsIT8* it8, char* Buffer, cmsUInt32Number max, const char* ErrorTitle) { switch (it8->sy) { case SEOLN: // Empty value Buffer[0]=0; break; case SIDENT: strncpy(Buffer, it8->id, max); Buffer[max-1]=0; break; case SINUM: snprintf(Buffer, max, "%d", it8 -> inum); break; case SDNUM: snprintf(Buffer, max, it8->DoubleFormatter, it8 -> dnum); break; case SSTRING: strncpy(Buffer, it8->str, max); Buffer[max-1] = 0; break; default: return SynError(it8, "%s", ErrorTitle); } Buffer[max] = 0; return TRUE; } // ---------------------------------------------------------- Table static TABLE* GetTable(cmsIT8* it8) { if ((it8 -> nTable >= it8 ->TablesCount)) { SynError(it8, "Table %d out of sequence", it8 -> nTable); return it8 -> Tab; } return it8 ->Tab + it8 ->nTable; } // ---------------------------------------------------------- Memory management // Frees an allocator and owned memory void CMSEXPORT cmsIT8Free(cmsHANDLE hIT8) { cmsIT8* it8 = (cmsIT8*) hIT8; if (it8 == NULL) return; if (it8->MemorySink) { OWNEDMEM* p; OWNEDMEM* n; for (p = it8->MemorySink; p != NULL; p = n) { n = p->Next; if (p->Ptr) _cmsFree(it8 ->ContextID, p->Ptr); _cmsFree(it8 ->ContextID, p); } } if (it8->MemoryBlock) _cmsFree(it8 ->ContextID, it8->MemoryBlock); _cmsFree(it8 ->ContextID, it8); } // Allocates a chunk of data, keep linked list static void* AllocBigBlock(cmsIT8* it8, cmsUInt32Number size) { OWNEDMEM* ptr1; void* ptr = _cmsMallocZero(it8->ContextID, size); if (ptr != NULL) { ptr1 = (OWNEDMEM*) _cmsMallocZero(it8 ->ContextID, sizeof(OWNEDMEM)); if (ptr1 == NULL) { _cmsFree(it8 ->ContextID, ptr); return NULL; } ptr1-> Ptr = ptr; ptr1-> Next = it8 -> MemorySink; it8 -> MemorySink = ptr1; } return ptr; } // Suballocator. static void* AllocChunk(cmsIT8* it8, cmsUInt32Number size) { cmsUInt32Number Free = it8 ->Allocator.BlockSize - it8 ->Allocator.Used; cmsUInt8Number* ptr; size = _cmsALIGNMEM(size); if (size > Free) { if (it8 -> Allocator.BlockSize == 0) it8 -> Allocator.BlockSize = 20*1024; else it8 ->Allocator.BlockSize *= 2; if (it8 ->Allocator.BlockSize < size) it8 ->Allocator.BlockSize = size; it8 ->Allocator.Used = 0; it8 ->Allocator.Block = (cmsUInt8Number*) AllocBigBlock(it8, it8 ->Allocator.BlockSize); } ptr = it8 ->Allocator.Block + it8 ->Allocator.Used; it8 ->Allocator.Used += size; return (void*) ptr; } // Allocates a string static char *AllocString(cmsIT8* it8, const char* str) { cmsUInt32Number Size = (cmsUInt32Number) strlen(str)+1; char *ptr; ptr = (char *) AllocChunk(it8, Size); if (ptr) strncpy (ptr, str, Size-1); return ptr; } // Searches through linked list static cmsBool IsAvailableOnList(KEYVALUE* p, const char* Key, const char* Subkey, KEYVALUE** LastPtr) { if (LastPtr) *LastPtr = p; for (; p != NULL; p = p->Next) { if (LastPtr) *LastPtr = p; if (*Key != '#') { // Comments are ignored if (cmsstrcasecmp(Key, p->Keyword) == 0) break; } } if (p == NULL) return FALSE; if (Subkey == 0) return TRUE; for (; p != NULL; p = p->NextSubkey) { if (p ->Subkey == NULL) continue; if (LastPtr) *LastPtr = p; if (cmsstrcasecmp(Subkey, p->Subkey) == 0) return TRUE; } return FALSE; } // Add a property into a linked list static KEYVALUE* AddToList(cmsIT8* it8, KEYVALUE** Head, const char *Key, const char *Subkey, const char* xValue, WRITEMODE WriteAs) { KEYVALUE* p; KEYVALUE* last; // Check if property is already in list if (IsAvailableOnList(*Head, Key, Subkey, &p)) { // This may work for editing properties // return SynError(it8, "duplicate key <%s>", Key); } else { last = p; // Allocate the container p = (KEYVALUE*) AllocChunk(it8, sizeof(KEYVALUE)); if (p == NULL) { SynError(it8, "AddToList: out of memory"); return NULL; } // Store name and value p->Keyword = AllocString(it8, Key); p->Subkey = (Subkey == NULL) ? NULL : AllocString(it8, Subkey); // Keep the container in our list if (*Head == NULL) { *Head = p; } else { if (Subkey != NULL && last != NULL) { last->NextSubkey = p; // If Subkey is not null, then last is the last property with the same key, // but not necessarily is the last property in the list, so we need to move // to the actual list end while (last->Next != NULL) last = last->Next; } if (last != NULL) last->Next = p; } p->Next = NULL; p->NextSubkey = NULL; } p->WriteAs = WriteAs; if (xValue != NULL) { p->Value = AllocString(it8, xValue); } else { p->Value = NULL; } return p; } static KEYVALUE* AddAvailableProperty(cmsIT8* it8, const char* Key, WRITEMODE as) { return AddToList(it8, &it8->ValidKeywords, Key, NULL, NULL, as); } static KEYVALUE* AddAvailableSampleID(cmsIT8* it8, const char* Key) { return AddToList(it8, &it8->ValidSampleID, Key, NULL, NULL, WRITE_UNCOOKED); } static void AllocTable(cmsIT8* it8) { TABLE* t; t = it8 ->Tab + it8 ->TablesCount; t->HeaderList = NULL; t->DataFormat = NULL; t->Data = NULL; it8 ->TablesCount++; } cmsInt32Number CMSEXPORT cmsIT8SetTable(cmsHANDLE IT8, cmsUInt32Number nTable) { cmsIT8* it8 = (cmsIT8*) IT8; if (nTable >= it8 ->TablesCount) { if (nTable == it8 ->TablesCount) { AllocTable(it8); } else { SynError(it8, "Table %d is out of sequence", nTable); return -1; } } it8 ->nTable = nTable; return (cmsInt32Number) nTable; } // Init an empty container cmsHANDLE CMSEXPORT cmsIT8Alloc(cmsContext ContextID) { cmsIT8* it8; cmsUInt32Number i; it8 = (cmsIT8*) _cmsMallocZero(ContextID, sizeof(cmsIT8)); if (it8 == NULL) return NULL; AllocTable(it8); it8->MemoryBlock = NULL; it8->MemorySink = NULL; it8 ->nTable = 0; it8->ContextID = ContextID; it8->Allocator.Used = 0; it8->Allocator.Block = NULL; it8->Allocator.BlockSize = 0; it8->ValidKeywords = NULL; it8->ValidSampleID = NULL; it8 -> sy = SUNDEFINED; it8 -> ch = ' '; it8 -> Source = NULL; it8 -> inum = 0; it8 -> dnum = 0.0; it8->FileStack[0] = (FILECTX*)AllocChunk(it8, sizeof(FILECTX)); it8->IncludeSP = 0; it8 -> lineno = 1; strcpy(it8->DoubleFormatter, DEFAULT_DBL_FORMAT); cmsIT8SetSheetType((cmsHANDLE) it8, "CGATS.17"); // Initialize predefined properties & data for (i=0; i < NUMPREDEFINEDPROPS; i++) AddAvailableProperty(it8, PredefinedProperties[i].id, PredefinedProperties[i].as); for (i=0; i < NUMPREDEFINEDSAMPLEID; i++) AddAvailableSampleID(it8, PredefinedSampleID[i]); return (cmsHANDLE) it8; } const char* CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8) { return GetTable((cmsIT8*) hIT8)->SheetType; } cmsBool CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type) { TABLE* t = GetTable((cmsIT8*) hIT8); strncpy(t ->SheetType, Type, MAXSTR-1); t ->SheetType[MAXSTR-1] = 0; return TRUE; } cmsBool CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* Val) { cmsIT8* it8 = (cmsIT8*) hIT8; if (!Val) return FALSE; if (!*Val) return FALSE; return AddToList(it8, &GetTable(it8)->HeaderList, "# ", NULL, Val, WRITE_UNCOOKED) != NULL; } // Sets a property cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* Key, const char *Val) { cmsIT8* it8 = (cmsIT8*) hIT8; if (!Val) return FALSE; if (!*Val) return FALSE; return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Val, WRITE_STRINGIFY) != NULL; } cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val) { cmsIT8* it8 = (cmsIT8*) hIT8; char Buffer[1024]; snprintf(Buffer, 1023, it8->DoubleFormatter, Val); return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_UNCOOKED) != NULL; } cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val) { cmsIT8* it8 = (cmsIT8*) hIT8; char Buffer[1024]; snprintf(Buffer, 1023, "%u", Val); return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_HEXADECIMAL) != NULL; } cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer) { cmsIT8* it8 = (cmsIT8*) hIT8; return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Buffer, WRITE_UNCOOKED) != NULL; } cmsBool CMSEXPORT cmsIT8SetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char* SubKey, const char *Buffer) { cmsIT8* it8 = (cmsIT8*) hIT8; return AddToList(it8, &GetTable(it8)->HeaderList, Key, SubKey, Buffer, WRITE_PAIR) != NULL; } // Gets a property const char* CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* Key) { cmsIT8* it8 = (cmsIT8*) hIT8; KEYVALUE* p; if (IsAvailableOnList(GetTable(it8) -> HeaderList, Key, NULL, &p)) { return p -> Value; } return NULL; } cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp) { const char *v = cmsIT8GetProperty(hIT8, cProp); if (v == NULL) return 0.0; return ParseFloatNumber(v); } const char* CMSEXPORT cmsIT8GetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char *SubKey) { cmsIT8* it8 = (cmsIT8*) hIT8; KEYVALUE* p; if (IsAvailableOnList(GetTable(it8) -> HeaderList, Key, SubKey, &p)) { return p -> Value; } return NULL; } // ----------------------------------------------------------------- Datasets static void AllocateDataFormat(cmsIT8* it8) { TABLE* t = GetTable(it8); if (t -> DataFormat) return; // Already allocated t -> nSamples = (int) cmsIT8GetPropertyDbl(it8, "NUMBER_OF_FIELDS"); if (t -> nSamples <= 0) { SynError(it8, "AllocateDataFormat: Unknown NUMBER_OF_FIELDS"); t -> nSamples = 10; } t -> DataFormat = (char**) AllocChunk (it8, ((cmsUInt32Number) t->nSamples + 1) * sizeof(char *)); if (t->DataFormat == NULL) { SynError(it8, "AllocateDataFormat: Unable to allocate dataFormat array"); } } static const char *GetDataFormat(cmsIT8* it8, int n) { TABLE* t = GetTable(it8); if (t->DataFormat) return t->DataFormat[n]; return NULL; } static cmsBool SetDataFormat(cmsIT8* it8, int n, const char *label) { TABLE* t = GetTable(it8); if (!t->DataFormat) AllocateDataFormat(it8); if (n > t -> nSamples) { SynError(it8, "More than NUMBER_OF_FIELDS fields."); return FALSE; } if (t->DataFormat) { t->DataFormat[n] = AllocString(it8, label); } return TRUE; } cmsBool CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE h, int n, const char *Sample) { cmsIT8* it8 = (cmsIT8*)h; return SetDataFormat(it8, n, Sample); } static void AllocateDataSet(cmsIT8* it8) { TABLE* t = GetTable(it8); if (t -> Data) return; // Already allocated t-> nSamples = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS")); t-> nPatches = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS")); if (t -> nSamples < 0 || t->nSamples > 0x7ffe || t->nPatches < 0 || t->nPatches > 0x7ffe) { SynError(it8, "AllocateDataSet: too much data"); } else { // Some dumb analizers warns of possible overflow here, just take a look couple of lines above. t->Data = (char**)AllocChunk(it8, ((cmsUInt32Number)t->nSamples + 1) * ((cmsUInt32Number)t->nPatches + 1) * sizeof(char*)); if (t->Data == NULL) { SynError(it8, "AllocateDataSet: Unable to allocate data array"); } } } static char* GetData(cmsIT8* it8, int nSet, int nField) { TABLE* t = GetTable(it8); int nSamples = t -> nSamples; int nPatches = t -> nPatches; if (nSet >= nPatches || nField >= nSamples) return NULL; if (!t->Data) return NULL; return t->Data [nSet * nSamples + nField]; } static cmsBool SetData(cmsIT8* it8, int nSet, int nField, const char *Val) { TABLE* t = GetTable(it8); if (!t->Data) AllocateDataSet(it8); if (!t->Data) return FALSE; if (nSet > t -> nPatches || nSet < 0) { return SynError(it8, "Patch %d out of range, there are %d patches", nSet, t -> nPatches); } if (nField > t ->nSamples || nField < 0) { return SynError(it8, "Sample %d out of range, there are %d samples", nField, t ->nSamples); } t->Data [nSet * t -> nSamples + nField] = AllocString(it8, Val); return TRUE; } // --------------------------------------------------------------- File I/O // Writes a string to file static void WriteStr(SAVESTREAM* f, const char *str) { cmsUInt32Number len; if (str == NULL) str = " "; // Length to write len = (cmsUInt32Number) strlen(str); f ->Used += len; if (f ->stream) { // Should I write it to a file? if (fwrite(str, 1, len, f->stream) != len) { cmsSignalError(0, cmsERROR_WRITE, "Write to file error in CGATS parser"); return; } } else { // Or to a memory block? if (f ->Base) { // Am I just counting the bytes? if (f ->Used > f ->Max) { cmsSignalError(0, cmsERROR_WRITE, "Write to memory overflows in CGATS parser"); return; } memmove(f ->Ptr, str, len); f->Ptr += len; } } } // Write formatted static void Writef(SAVESTREAM* f, const char* frm, ...) { char Buffer[4096]; va_list args; va_start(args, frm); vsnprintf(Buffer, 4095, frm, args); Buffer[4095] = 0; WriteStr(f, Buffer); va_end(args); } // Writes full header static void WriteHeader(cmsIT8* it8, SAVESTREAM* fp) { KEYVALUE* p; TABLE* t = GetTable(it8); // Writes the type WriteStr(fp, t->SheetType); WriteStr(fp, "\n"); for (p = t->HeaderList; (p != NULL); p = p->Next) { if (*p ->Keyword == '#') { char* Pt; WriteStr(fp, "#\n# "); for (Pt = p ->Value; *Pt; Pt++) { Writef(fp, "%c", *Pt); if (*Pt == '\n') { WriteStr(fp, "# "); } } WriteStr(fp, "\n#\n"); continue; } if (!IsAvailableOnList(it8-> ValidKeywords, p->Keyword, NULL, NULL)) { #ifdef CMS_STRICT_CGATS WriteStr(fp, "KEYWORD\t\""); WriteStr(fp, p->Keyword); WriteStr(fp, "\"\n"); #endif AddAvailableProperty(it8, p->Keyword, WRITE_UNCOOKED); } WriteStr(fp, p->Keyword); if (p->Value) { switch (p ->WriteAs) { case WRITE_UNCOOKED: Writef(fp, "\t%s", p ->Value); break; case WRITE_STRINGIFY: Writef(fp, "\t\"%s\"", p->Value ); break; case WRITE_HEXADECIMAL: Writef(fp, "\t0x%X", atoi(p ->Value)); break; case WRITE_BINARY: Writef(fp, "\t0x%B", atoi(p ->Value)); break; case WRITE_PAIR: Writef(fp, "\t\"%s,%s\"", p->Subkey, p->Value); break; default: SynError(it8, "Unknown write mode %d", p ->WriteAs); return; } } WriteStr (fp, "\n"); } } // Writes the data format static void WriteDataFormat(SAVESTREAM* fp, cmsIT8* it8) { int i, nSamples; TABLE* t = GetTable(it8); if (!t -> DataFormat) return; WriteStr(fp, "BEGIN_DATA_FORMAT\n"); WriteStr(fp, " "); nSamples = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_FIELDS")); for (i = 0; i < nSamples; i++) { WriteStr(fp, t->DataFormat[i]); WriteStr(fp, ((i == (nSamples-1)) ? "\n" : "\t")); } WriteStr (fp, "END_DATA_FORMAT\n"); } // Writes data array static void WriteData(SAVESTREAM* fp, cmsIT8* it8) { int i, j; TABLE* t = GetTable(it8); if (!t->Data) return; WriteStr (fp, "BEGIN_DATA\n"); t->nPatches = atoi(cmsIT8GetProperty(it8, "NUMBER_OF_SETS")); for (i = 0; i < t-> nPatches; i++) { WriteStr(fp, " "); for (j = 0; j < t->nSamples; j++) { char *ptr = t->Data[i*t->nSamples+j]; if (ptr == NULL) WriteStr(fp, "\"\""); else { // If value contains whitespace, enclose within quote if (strchr(ptr, ' ') != NULL) { WriteStr(fp, "\""); WriteStr(fp, ptr); WriteStr(fp, "\""); } else WriteStr(fp, ptr); } WriteStr(fp, ((j == (t->nSamples-1)) ? "\n" : "\t")); } } WriteStr (fp, "END_DATA\n"); } // Saves whole file cmsBool CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName) { SAVESTREAM sd; cmsUInt32Number i; cmsIT8* it8 = (cmsIT8*) hIT8; memset(&sd, 0, sizeof(sd)); sd.stream = fopen(cFileName, "wt"); if (!sd.stream) return FALSE; for (i=0; i < it8 ->TablesCount; i++) { cmsIT8SetTable(hIT8, i); WriteHeader(it8, &sd); WriteDataFormat(&sd, it8); WriteData(&sd, it8); } if (fclose(sd.stream) != 0) return FALSE; return TRUE; } // Saves to memory cmsBool CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded) { SAVESTREAM sd; cmsUInt32Number i; cmsIT8* it8 = (cmsIT8*) hIT8; memset(&sd, 0, sizeof(sd)); sd.stream = NULL; sd.Base = (cmsUInt8Number*) MemPtr; sd.Ptr = sd.Base; sd.Used = 0; if (sd.Base) sd.Max = *BytesNeeded; // Write to memory? else sd.Max = 0; // Just counting the needed bytes for (i=0; i < it8 ->TablesCount; i++) { cmsIT8SetTable(hIT8, i); WriteHeader(it8, &sd); WriteDataFormat(&sd, it8); WriteData(&sd, it8); } sd.Used++; // The \0 at the very end if (sd.Base) *sd.Ptr = 0; *BytesNeeded = sd.Used; return TRUE; } // -------------------------------------------------------------- Higher level parsing static cmsBool DataFormatSection(cmsIT8* it8) { int iField = 0; TABLE* t = GetTable(it8); InSymbol(it8); // Eats "BEGIN_DATA_FORMAT" CheckEOLN(it8); while (it8->sy != SEND_DATA_FORMAT && it8->sy != SEOLN && it8->sy != SEOF && it8->sy != SSYNERROR) { if (it8->sy != SIDENT) { return SynError(it8, "Sample type expected"); } if (!SetDataFormat(it8, iField, it8->id)) return FALSE; iField++; InSymbol(it8); SkipEOLN(it8); } SkipEOLN(it8); Skip(it8, SEND_DATA_FORMAT); SkipEOLN(it8); if (iField != t ->nSamples) { SynError(it8, "Count mismatch. NUMBER_OF_FIELDS was %d, found %d\n", t ->nSamples, iField); } return TRUE; } static cmsBool DataSection (cmsIT8* it8) { int iField = 0; int iSet = 0; char Buffer[256]; TABLE* t = GetTable(it8); InSymbol(it8); // Eats "BEGIN_DATA" CheckEOLN(it8); if (!t->Data) AllocateDataSet(it8); while (it8->sy != SEND_DATA && it8->sy != SEOF) { if (iField >= t -> nSamples) { iField = 0; iSet++; } if (it8->sy != SEND_DATA && it8->sy != SEOF) { if (!GetVal(it8, Buffer, 255, "Sample data expected")) return FALSE; if (!SetData(it8, iSet, iField, Buffer)) return FALSE; iField++; InSymbol(it8); SkipEOLN(it8); } } SkipEOLN(it8); Skip(it8, SEND_DATA); SkipEOLN(it8); // Check for data completion. if ((iSet+1) != t -> nPatches) return SynError(it8, "Count mismatch. NUMBER_OF_SETS was %d, found %d\n", t ->nPatches, iSet+1); return TRUE; } static cmsBool HeaderSection(cmsIT8* it8) { char VarName[MAXID]; char Buffer[MAXSTR]; KEYVALUE* Key; while (it8->sy != SEOF && it8->sy != SSYNERROR && it8->sy != SBEGIN_DATA_FORMAT && it8->sy != SBEGIN_DATA) { switch (it8 -> sy) { case SKEYWORD: InSymbol(it8); if (!GetVal(it8, Buffer, MAXSTR-1, "Keyword expected")) return FALSE; if (!AddAvailableProperty(it8, Buffer, WRITE_UNCOOKED)) return FALSE; InSymbol(it8); break; case SDATA_FORMAT_ID: InSymbol(it8); if (!GetVal(it8, Buffer, MAXSTR-1, "Keyword expected")) return FALSE; if (!AddAvailableSampleID(it8, Buffer)) return FALSE; InSymbol(it8); break; case SIDENT: strncpy(VarName, it8->id, MAXID - 1); VarName[MAXID - 1] = 0; if (!IsAvailableOnList(it8->ValidKeywords, VarName, NULL, &Key)) { #ifdef CMS_STRICT_CGATS return SynError(it8, "Undefined keyword '%s'", VarName); #else Key = AddAvailableProperty(it8, VarName, WRITE_UNCOOKED); if (Key == NULL) return FALSE; #endif } InSymbol(it8); if (!GetVal(it8, Buffer, MAXSTR - 1, "Property data expected")) return FALSE; if (Key->WriteAs != WRITE_PAIR) { AddToList(it8, &GetTable(it8)->HeaderList, VarName, NULL, Buffer, (it8->sy == SSTRING) ? WRITE_STRINGIFY : WRITE_UNCOOKED); } else { const char *Subkey; char *Nextkey; if (it8->sy != SSTRING) return SynError(it8, "Invalid value '%s' for property '%s'.", Buffer, VarName); // chop the string as a list of "subkey, value" pairs, using ';' as a separator for (Subkey = Buffer; Subkey != NULL; Subkey = Nextkey) { char *Value, *temp; // identify token pair boundary Nextkey = (char*)strchr(Subkey, ';'); if (Nextkey) *Nextkey++ = '\0'; // for each pair, split the subkey and the value Value = (char*)strrchr(Subkey, ','); if (Value == NULL) return SynError(it8, "Invalid value for property '%s'.", VarName); // gobble the spaces before the coma, and the coma itself temp = Value++; do *temp-- = '\0'; while (temp >= Subkey && *temp == ' '); // gobble any space at the right temp = Value + strlen(Value) - 1; while (*temp == ' ') *temp-- = '\0'; // trim the strings from the left Subkey += strspn(Subkey, " "); Value += strspn(Value, " "); if (Subkey[0] == 0 || Value[0] == 0) return SynError(it8, "Invalid value for property '%s'.", VarName); AddToList(it8, &GetTable(it8)->HeaderList, VarName, Subkey, Value, WRITE_PAIR); } } InSymbol(it8); break; case SEOLN: break; default: return SynError(it8, "expected keyword or identifier"); } SkipEOLN(it8); } return TRUE; } static void ReadType(cmsIT8* it8, char* SheetTypePtr) { cmsInt32Number cnt = 0; // First line is a very special case. while (isseparator(it8->ch)) NextCh(it8); while (it8->ch != '\r' && it8 ->ch != '\n' && it8->ch != '\t' && it8 -> ch != 0) { if (cnt++ < MAXSTR) *SheetTypePtr++= (char) it8 ->ch; NextCh(it8); } *SheetTypePtr = 0; } static cmsBool ParseIT8(cmsIT8* it8, cmsBool nosheet) { char* SheetTypePtr = it8 ->Tab[0].SheetType; if (nosheet == 0) { ReadType(it8, SheetTypePtr); } InSymbol(it8); SkipEOLN(it8); while (it8-> sy != SEOF && it8-> sy != SSYNERROR) { switch (it8 -> sy) { case SBEGIN_DATA_FORMAT: if (!DataFormatSection(it8)) return FALSE; break; case SBEGIN_DATA: if (!DataSection(it8)) return FALSE; if (it8 -> sy != SEOF) { AllocTable(it8); it8 ->nTable = it8 ->TablesCount - 1; // Read sheet type if present. We only support identifier and string. // is a type string // anything else, is not a type string if (nosheet == 0) { if (it8 ->sy == SIDENT) { // May be a type sheet or may be a prop value statement. We cannot use insymbol in // this special case... while (isseparator(it8->ch)) NextCh(it8); // If a newline is found, then this is a type string if (it8 ->ch == '\n' || it8->ch == '\r') { cmsIT8SetSheetType(it8, it8 ->id); InSymbol(it8); } else { // It is not. Just continue cmsIT8SetSheetType(it8, ""); } } else // Validate quoted strings if (it8 ->sy == SSTRING) { cmsIT8SetSheetType(it8, it8 ->str); InSymbol(it8); } } } break; case SEOLN: SkipEOLN(it8); break; default: if (!HeaderSection(it8)) return FALSE; } } return (it8 -> sy != SSYNERROR); } // Init useful pointers static void CookPointers(cmsIT8* it8) { int idField, i; char* Fld; cmsUInt32Number j; cmsUInt32Number nOldTable = it8 ->nTable; for (j=0; j < it8 ->TablesCount; j++) { TABLE* t = it8 ->Tab + j; t -> SampleID = 0; it8 ->nTable = j; for (idField = 0; idField < t -> nSamples; idField++) { if (t ->DataFormat == NULL){ SynError(it8, "Undefined DATA_FORMAT"); return; } Fld = t->DataFormat[idField]; if (!Fld) continue; if (cmsstrcasecmp(Fld, "SAMPLE_ID") == 0) { t -> SampleID = idField; } // "LABEL" is an extension. It keeps references to forward tables if ((cmsstrcasecmp(Fld, "LABEL") == 0) || Fld[0] == '$') { // Search for table references... for (i = 0; i < t->nPatches; i++) { char* Label = GetData(it8, i, idField); if (Label) { cmsUInt32Number k; // This is the label, search for a table containing // this property for (k = 0; k < it8->TablesCount; k++) { TABLE* Table = it8->Tab + k; KEYVALUE* p; if (IsAvailableOnList(Table->HeaderList, Label, NULL, &p)) { // Available, keep type and table char Buffer[256]; char* Type = p->Value; int nTable = (int)k; snprintf(Buffer, 255, "%s %d %s", Label, nTable, Type); SetData(it8, i, idField, Buffer); } } } } } } } it8 ->nTable = nOldTable; } // Try to infere if the file is a CGATS/IT8 file at all. Read first line // that should be something like some printable characters plus a \n // returns 0 if this is not like a CGATS, or an integer otherwise. This integer is the number of words in first line? static int IsMyBlock(const cmsUInt8Number* Buffer, cmsUInt32Number n) { int words = 1, space = 0, quot = 0; cmsUInt32Number i; if (n < 10) return 0; // Too small if (n > 132) n = 132; for (i = 1; i < n; i++) { switch(Buffer[i]) { case '\n': case '\r': return ((quot == 1) || (words > 2)) ? 0 : words; case '\t': case ' ': if(!quot && !space) space = 1; break; case '\"': quot = !quot; break; default: if (Buffer[i] < 32) return 0; if (Buffer[i] > 127) return 0; words += space; space = 0; break; } } return 0; } static cmsBool IsMyFile(const char* FileName) { FILE *fp; cmsUInt32Number Size; cmsUInt8Number Ptr[133]; fp = fopen(FileName, "rt"); if (!fp) { cmsSignalError(0, cmsERROR_FILE, "File '%s' not found", FileName); return FALSE; } Size = (cmsUInt32Number) fread(Ptr, 1, 132, fp); if (fclose(fp) != 0) return FALSE; Ptr[Size] = '\0'; return IsMyBlock(Ptr, Size); } // ---------------------------------------------------------- Exported routines cmsHANDLE CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, const void *Ptr, cmsUInt32Number len) { cmsHANDLE hIT8; cmsIT8* it8; int type; _cmsAssert(Ptr != NULL); _cmsAssert(len != 0); type = IsMyBlock((const cmsUInt8Number*)Ptr, len); if (type == 0) return NULL; hIT8 = cmsIT8Alloc(ContextID); if (!hIT8) return NULL; it8 = (cmsIT8*) hIT8; it8 ->MemoryBlock = (char*) _cmsMalloc(ContextID, len + 1); if (it8->MemoryBlock == NULL) { cmsIT8Free(hIT8); return FALSE; } strncpy(it8 ->MemoryBlock, (const char*) Ptr, len); it8 ->MemoryBlock[len] = 0; strncpy(it8->FileStack[0]->FileName, "", cmsMAX_PATH-1); it8-> Source = it8 -> MemoryBlock; if (!ParseIT8(it8, type-1)) { cmsIT8Free(hIT8); return FALSE; } CookPointers(it8); it8 ->nTable = 0; _cmsFree(ContextID, it8->MemoryBlock); it8 -> MemoryBlock = NULL; return hIT8; } cmsHANDLE CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName) { cmsHANDLE hIT8; cmsIT8* it8; int type; _cmsAssert(cFileName != NULL); type = IsMyFile(cFileName); if (type == 0) return NULL; hIT8 = cmsIT8Alloc(ContextID); it8 = (cmsIT8*) hIT8; if (!hIT8) return NULL; it8 ->FileStack[0]->Stream = fopen(cFileName, "rt"); if (!it8 ->FileStack[0]->Stream) { cmsIT8Free(hIT8); return NULL; } strncpy(it8->FileStack[0]->FileName, cFileName, cmsMAX_PATH-1); it8->FileStack[0]->FileName[cmsMAX_PATH-1] = 0; if (!ParseIT8(it8, type-1)) { fclose(it8 ->FileStack[0]->Stream); cmsIT8Free(hIT8); return NULL; } CookPointers(it8); it8 ->nTable = 0; if (fclose(it8 ->FileStack[0]->Stream)!= 0) { cmsIT8Free(hIT8); return NULL; } return hIT8; } int CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames) { cmsIT8* it8 = (cmsIT8*) hIT8; TABLE* t; _cmsAssert(hIT8 != NULL); t = GetTable(it8); if (SampleNames) *SampleNames = t -> DataFormat; return t -> nSamples; } cmsUInt32Number CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames) { cmsIT8* it8 = (cmsIT8*) hIT8; KEYVALUE* p; cmsUInt32Number n; char **Props; TABLE* t; _cmsAssert(hIT8 != NULL); t = GetTable(it8); // Pass#1 - count properties n = 0; for (p = t -> HeaderList; p != NULL; p = p->Next) { n++; } Props = (char **) AllocChunk(it8, sizeof(char *) * n); // Pass#2 - Fill pointers n = 0; for (p = t -> HeaderList; p != NULL; p = p->Next) { Props[n++] = p -> Keyword; } *PropertyNames = Props; return n; } cmsUInt32Number CMSEXPORT cmsIT8EnumPropertyMulti(cmsHANDLE hIT8, const char* cProp, const char ***SubpropertyNames) { cmsIT8* it8 = (cmsIT8*) hIT8; KEYVALUE *p, *tmp; cmsUInt32Number n; const char **Props; TABLE* t; _cmsAssert(hIT8 != NULL); t = GetTable(it8); if(!IsAvailableOnList(t->HeaderList, cProp, NULL, &p)) { *SubpropertyNames = 0; return 0; } // Pass#1 - count properties n = 0; for (tmp = p; tmp != NULL; tmp = tmp->NextSubkey) { if(tmp->Subkey != NULL) n++; } Props = (const char **) AllocChunk(it8, sizeof(char *) * n); // Pass#2 - Fill pointers n = 0; for (tmp = p; tmp != NULL; tmp = tmp->NextSubkey) { if(tmp->Subkey != NULL) Props[n++] = p ->Subkey; } *SubpropertyNames = Props; return n; } static int LocatePatch(cmsIT8* it8, const char* cPatch) { int i; const char *data; TABLE* t = GetTable(it8); for (i=0; i < t-> nPatches; i++) { data = GetData(it8, i, t->SampleID); if (data != NULL) { if (cmsstrcasecmp(data, cPatch) == 0) return i; } } // SynError(it8, "Couldn't find patch '%s'\n", cPatch); return -1; } static int LocateEmptyPatch(cmsIT8* it8) { int i; const char *data; TABLE* t = GetTable(it8); for (i=0; i < t-> nPatches; i++) { data = GetData(it8, i, t->SampleID); if (data == NULL) return i; } return -1; } static int LocateSample(cmsIT8* it8, const char* cSample) { int i; const char *fld; TABLE* t = GetTable(it8); for (i=0; i < t->nSamples; i++) { fld = GetDataFormat(it8, i); if (fld != NULL) { if (cmsstrcasecmp(fld, cSample) == 0) return i; } } return -1; } int CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample) { cmsIT8* it8 = (cmsIT8*) hIT8; _cmsAssert(hIT8 != NULL); return LocateSample(it8, cSample); } const char* CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col) { cmsIT8* it8 = (cmsIT8*) hIT8; _cmsAssert(hIT8 != NULL); return GetData(it8, row, col); } cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col) { const char* Buffer; Buffer = cmsIT8GetDataRowCol(hIT8, row, col); if (Buffer == NULL) return 0.0; return ParseFloatNumber(Buffer); } cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, const char* Val) { cmsIT8* it8 = (cmsIT8*) hIT8; _cmsAssert(hIT8 != NULL); return SetData(it8, row, col, Val); } cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, cmsFloat64Number Val) { cmsIT8* it8 = (cmsIT8*) hIT8; char Buff[256]; _cmsAssert(hIT8 != NULL); snprintf(Buff, 255, it8->DoubleFormatter, Val); return SetData(it8, row, col, Buff); } const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample) { cmsIT8* it8 = (cmsIT8*) hIT8; int iField, iSet; _cmsAssert(hIT8 != NULL); iField = LocateSample(it8, cSample); if (iField < 0) { return NULL; } iSet = LocatePatch(it8, cPatch); if (iSet < 0) { return NULL; } return GetData(it8, iSet, iField); } cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE it8, const char* cPatch, const char* cSample) { const char* Buffer; Buffer = cmsIT8GetData(it8, cPatch, cSample); return ParseFloatNumber(Buffer); } cmsBool CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample, const char *Val) { cmsIT8* it8 = (cmsIT8*) hIT8; int iField, iSet; TABLE* t; _cmsAssert(hIT8 != NULL); t = GetTable(it8); iField = LocateSample(it8, cSample); if (iField < 0) return FALSE; if (t-> nPatches == 0) { AllocateDataFormat(it8); AllocateDataSet(it8); CookPointers(it8); } if (cmsstrcasecmp(cSample, "SAMPLE_ID") == 0) { iSet = LocateEmptyPatch(it8); if (iSet < 0) { return SynError(it8, "Couldn't add more patches '%s'\n", cPatch); } iField = t -> SampleID; } else { iSet = LocatePatch(it8, cPatch); if (iSet < 0) { return FALSE; } } return SetData(it8, iSet, iField, Val); } cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample, cmsFloat64Number Val) { cmsIT8* it8 = (cmsIT8*) hIT8; char Buff[256]; _cmsAssert(hIT8 != NULL); snprintf(Buff, 255, it8->DoubleFormatter, Val); return cmsIT8SetData(hIT8, cPatch, cSample, Buff); } // Buffer should get MAXSTR at least const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer) { cmsIT8* it8 = (cmsIT8*) hIT8; TABLE* t; char* Data; _cmsAssert(hIT8 != NULL); t = GetTable(it8); Data = GetData(it8, nPatch, t->SampleID); if (!Data) return NULL; if (!buffer) return Data; strncpy(buffer, Data, MAXSTR-1); buffer[MAXSTR-1] = 0; return buffer; } int CMSEXPORT cmsIT8GetPatchByName(cmsHANDLE hIT8, const char *cPatch) { _cmsAssert(hIT8 != NULL); return LocatePatch((cmsIT8*)hIT8, cPatch); } cmsUInt32Number CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8) { cmsIT8* it8 = (cmsIT8*) hIT8; _cmsAssert(hIT8 != NULL); return it8 ->TablesCount; } // This handles the "LABEL" extension. // Label, nTable, Type int CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType) { const char* cLabelFld; char Type[256], Label[256]; cmsUInt32Number nTable; _cmsAssert(hIT8 != NULL); if (cField != NULL && *cField == 0) cField = "LABEL"; if (cField == NULL) cField = "LABEL"; cLabelFld = cmsIT8GetData(hIT8, cSet, cField); if (!cLabelFld) return -1; if (sscanf(cLabelFld, "%255s %u %255s", Label, &nTable, Type) != 3) return -1; if (ExpectedType != NULL && *ExpectedType == 0) ExpectedType = NULL; if (ExpectedType) { if (cmsstrcasecmp(Type, ExpectedType) != 0) return -1; } return cmsIT8SetTable(hIT8, nTable); } cmsBool CMSEXPORT cmsIT8SetIndexColumn(cmsHANDLE hIT8, const char* cSample) { cmsIT8* it8 = (cmsIT8*) hIT8; int pos; _cmsAssert(hIT8 != NULL); pos = LocateSample(it8, cSample); if(pos == -1) return FALSE; it8->Tab[it8->nTable].SampleID = pos; return TRUE; } void CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter) { cmsIT8* it8 = (cmsIT8*) hIT8; _cmsAssert(hIT8 != NULL); if (Formatter == NULL) strcpy(it8->DoubleFormatter, DEFAULT_DBL_FORMAT); else strncpy(it8->DoubleFormatter, Formatter, sizeof(it8->DoubleFormatter)); it8 ->DoubleFormatter[sizeof(it8 ->DoubleFormatter)-1] = 0; } lcms2-2.12rc1/src/Makefile.in0000644000175000017500000006463313775114656014765 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building lcms 2 library # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = liblcms2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am_liblcms2_la_OBJECTS = cmscnvrt.lo cmserr.lo cmsgamma.lo cmsgmt.lo \ cmsintrp.lo cmsio0.lo cmsio1.lo cmslut.lo cmsplugin.lo \ cmssm.lo cmsmd5.lo cmsmtrx.lo cmspack.lo cmspcs.lo cmswtpnt.lo \ cmsxform.lo cmssamp.lo cmsnamed.lo cmscam02.lo cmsvirt.lo \ cmstypes.lo cmscgats.lo cmsps2.lo cmsopt.lo cmshalf.lo \ cmsalpha.lo liblcms2_la_OBJECTS = $(am_liblcms2_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = liblcms2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(liblcms2_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cmsalpha.Plo \ ./$(DEPDIR)/cmscam02.Plo ./$(DEPDIR)/cmscgats.Plo \ ./$(DEPDIR)/cmscnvrt.Plo ./$(DEPDIR)/cmserr.Plo \ ./$(DEPDIR)/cmsgamma.Plo ./$(DEPDIR)/cmsgmt.Plo \ ./$(DEPDIR)/cmshalf.Plo ./$(DEPDIR)/cmsintrp.Plo \ ./$(DEPDIR)/cmsio0.Plo ./$(DEPDIR)/cmsio1.Plo \ ./$(DEPDIR)/cmslut.Plo ./$(DEPDIR)/cmsmd5.Plo \ ./$(DEPDIR)/cmsmtrx.Plo ./$(DEPDIR)/cmsnamed.Plo \ ./$(DEPDIR)/cmsopt.Plo ./$(DEPDIR)/cmspack.Plo \ ./$(DEPDIR)/cmspcs.Plo ./$(DEPDIR)/cmsplugin.Plo \ ./$(DEPDIR)/cmsps2.Plo ./$(DEPDIR)/cmssamp.Plo \ ./$(DEPDIR)/cmssm.Plo ./$(DEPDIR)/cmstypes.Plo \ ./$(DEPDIR)/cmsvirt.Plo ./$(DEPDIR)/cmswtpnt.Plo \ ./$(DEPDIR)/cmsxform.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblcms2_la_SOURCES) DIST_SOURCES = $(liblcms2_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ # CFLAGS = -pedantic -Wall -std=c99 -O3 includedir = ${prefix}/include infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign # Shared libraries built in this directory lib_LTLIBRARIES = liblcms2.la AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include liblcms2_la_LDFLAGS = -no-undefined \ -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) liblcms2_la_LIBADD = $(LCMS_LIB_DEPLIBS) liblcms2_la_SOURCES = \ cmscnvrt.c cmserr.c cmsgamma.c cmsgmt.c cmsintrp.c cmsio0.c cmsio1.c cmslut.c \ cmsplugin.c cmssm.c cmsmd5.c cmsmtrx.c cmspack.c cmspcs.c cmswtpnt.c cmsxform.c \ cmssamp.c cmsnamed.c cmscam02.c cmsvirt.c cmstypes.c cmscgats.c cmsps2.c cmsopt.c \ cmshalf.c cmsalpha.c lcms2_internal.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblcms2.la: $(liblcms2_la_OBJECTS) $(liblcms2_la_DEPENDENCIES) $(EXTRA_liblcms2_la_DEPENDENCIES) $(AM_V_CCLD)$(liblcms2_la_LINK) -rpath $(libdir) $(liblcms2_la_OBJECTS) $(liblcms2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsalpha.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscam02.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscgats.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmscnvrt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmserr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgamma.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsgmt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmshalf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsintrp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio0.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsio1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmslut.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmd5.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsmtrx.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsnamed.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsopt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspack.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmspcs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsplugin.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsps2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssamp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmssm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmstypes.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsvirt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmswtpnt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsxform.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cmsalpha.Plo -rm -f ./$(DEPDIR)/cmscam02.Plo -rm -f ./$(DEPDIR)/cmscgats.Plo -rm -f ./$(DEPDIR)/cmscnvrt.Plo -rm -f ./$(DEPDIR)/cmserr.Plo -rm -f ./$(DEPDIR)/cmsgamma.Plo -rm -f ./$(DEPDIR)/cmsgmt.Plo -rm -f ./$(DEPDIR)/cmshalf.Plo -rm -f ./$(DEPDIR)/cmsintrp.Plo -rm -f ./$(DEPDIR)/cmsio0.Plo -rm -f ./$(DEPDIR)/cmsio1.Plo -rm -f ./$(DEPDIR)/cmslut.Plo -rm -f ./$(DEPDIR)/cmsmd5.Plo -rm -f ./$(DEPDIR)/cmsmtrx.Plo -rm -f ./$(DEPDIR)/cmsnamed.Plo -rm -f ./$(DEPDIR)/cmsopt.Plo -rm -f ./$(DEPDIR)/cmspack.Plo -rm -f ./$(DEPDIR)/cmspcs.Plo -rm -f ./$(DEPDIR)/cmsplugin.Plo -rm -f ./$(DEPDIR)/cmsps2.Plo -rm -f ./$(DEPDIR)/cmssamp.Plo -rm -f ./$(DEPDIR)/cmssm.Plo -rm -f ./$(DEPDIR)/cmstypes.Plo -rm -f ./$(DEPDIR)/cmsvirt.Plo -rm -f ./$(DEPDIR)/cmswtpnt.Plo -rm -f ./$(DEPDIR)/cmsxform.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/cmsalpha.Plo -rm -f ./$(DEPDIR)/cmscam02.Plo -rm -f ./$(DEPDIR)/cmscgats.Plo -rm -f ./$(DEPDIR)/cmscnvrt.Plo -rm -f ./$(DEPDIR)/cmserr.Plo -rm -f ./$(DEPDIR)/cmsgamma.Plo -rm -f ./$(DEPDIR)/cmsgmt.Plo -rm -f ./$(DEPDIR)/cmshalf.Plo -rm -f ./$(DEPDIR)/cmsintrp.Plo -rm -f ./$(DEPDIR)/cmsio0.Plo -rm -f ./$(DEPDIR)/cmsio1.Plo -rm -f ./$(DEPDIR)/cmslut.Plo -rm -f ./$(DEPDIR)/cmsmd5.Plo -rm -f ./$(DEPDIR)/cmsmtrx.Plo -rm -f ./$(DEPDIR)/cmsnamed.Plo -rm -f ./$(DEPDIR)/cmsopt.Plo -rm -f ./$(DEPDIR)/cmspack.Plo -rm -f ./$(DEPDIR)/cmspcs.Plo -rm -f ./$(DEPDIR)/cmsplugin.Plo -rm -f ./$(DEPDIR)/cmsps2.Plo -rm -f ./$(DEPDIR)/cmssamp.Plo -rm -f ./$(DEPDIR)/cmssm.Plo -rm -f ./$(DEPDIR)/cmstypes.Plo -rm -f ./$(DEPDIR)/cmsvirt.Plo -rm -f ./$(DEPDIR)/cmswtpnt.Plo -rm -f ./$(DEPDIR)/cmsxform.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/src/cmsvirt.c0000644000175000017500000011203613775114656014542 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2_internal.h" // Virtual (built-in) profiles // ----------------------------------------------------------------------------------- static cmsBool SetTextTags(cmsHPROFILE hProfile, const wchar_t* Description) { cmsMLU *DescriptionMLU, *CopyrightMLU; cmsBool rc = FALSE; cmsContext ContextID = cmsGetProfileContextID(hProfile); DescriptionMLU = cmsMLUalloc(ContextID, 1); CopyrightMLU = cmsMLUalloc(ContextID, 1); if (DescriptionMLU == NULL || CopyrightMLU == NULL) goto Error; if (!cmsMLUsetWide(DescriptionMLU, "en", "US", Description)) goto Error; if (!cmsMLUsetWide(CopyrightMLU, "en", "US", L"No copyright, use freely")) goto Error; if (!cmsWriteTag(hProfile, cmsSigProfileDescriptionTag, DescriptionMLU)) goto Error; if (!cmsWriteTag(hProfile, cmsSigCopyrightTag, CopyrightMLU)) goto Error; rc = TRUE; Error: if (DescriptionMLU) cmsMLUfree(DescriptionMLU); if (CopyrightMLU) cmsMLUfree(CopyrightMLU); return rc; } static cmsBool SetSeqDescTag(cmsHPROFILE hProfile, const char* Model) { cmsBool rc = FALSE; cmsContext ContextID = cmsGetProfileContextID(hProfile); cmsSEQ* Seq = cmsAllocProfileSequenceDescription(ContextID, 1); if (Seq == NULL) return FALSE; Seq->seq[0].deviceMfg = (cmsSignature) 0; Seq->seq[0].deviceModel = (cmsSignature) 0; #ifdef CMS_DONT_USE_INT64 Seq->seq[0].attributes[0] = 0; Seq->seq[0].attributes[1] = 0; #else Seq->seq[0].attributes = 0; #endif Seq->seq[0].technology = (cmsTechnologySignature) 0; cmsMLUsetASCII( Seq->seq[0].Manufacturer, cmsNoLanguage, cmsNoCountry, "Little CMS"); cmsMLUsetASCII( Seq->seq[0].Model, cmsNoLanguage, cmsNoCountry, Model); if (!_cmsWriteProfileSequence(hProfile, Seq)) goto Error; rc = TRUE; Error: if (Seq) cmsFreeProfileSequenceDescription(Seq); return rc; } // This function creates a profile based on White point, primaries and // transfer functions. cmsHPROFILE CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint, const cmsCIExyYTRIPLE* Primaries, cmsToneCurve* const TransferFunction[3]) { cmsHPROFILE hICC; cmsMAT3 MColorants; cmsCIEXYZTRIPLE Colorants; cmsCIExyY MaxWhite; cmsMAT3 CHAD; cmsCIEXYZ WhitePointXYZ; hICC = cmsCreateProfilePlaceholder(ContextID); if (!hICC) // can't allocate return NULL; cmsSetProfileVersion(hICC, 4.3); cmsSetDeviceClass(hICC, cmsSigDisplayClass); cmsSetColorSpace(hICC, cmsSigRgbData); cmsSetPCS(hICC, cmsSigXYZData); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Implement profile using following tags: // // 1 cmsSigProfileDescriptionTag // 2 cmsSigMediaWhitePointTag // 3 cmsSigRedColorantTag // 4 cmsSigGreenColorantTag // 5 cmsSigBlueColorantTag // 6 cmsSigRedTRCTag // 7 cmsSigGreenTRCTag // 8 cmsSigBlueTRCTag // 9 Chromatic adaptation Tag // This conforms a standard RGB DisplayProfile as says ICC, and then I add (As per addendum II) // 10 cmsSigChromaticityTag if (!SetTextTags(hICC, L"RGB built-in")) goto Error; if (WhitePoint) { if (!cmsWriteTag(hICC, cmsSigMediaWhitePointTag, cmsD50_XYZ())) goto Error; cmsxyY2XYZ(&WhitePointXYZ, WhitePoint); _cmsAdaptationMatrix(&CHAD, NULL, &WhitePointXYZ, cmsD50_XYZ()); // This is a V4 tag, but many CMM does read and understand it no matter which version if (!cmsWriteTag(hICC, cmsSigChromaticAdaptationTag, (void*) &CHAD)) goto Error; } if (WhitePoint && Primaries) { MaxWhite.x = WhitePoint -> x; MaxWhite.y = WhitePoint -> y; MaxWhite.Y = 1.0; if (!_cmsBuildRGB2XYZtransferMatrix(&MColorants, &MaxWhite, Primaries)) goto Error; Colorants.Red.X = MColorants.v[0].n[0]; Colorants.Red.Y = MColorants.v[1].n[0]; Colorants.Red.Z = MColorants.v[2].n[0]; Colorants.Green.X = MColorants.v[0].n[1]; Colorants.Green.Y = MColorants.v[1].n[1]; Colorants.Green.Z = MColorants.v[2].n[1]; Colorants.Blue.X = MColorants.v[0].n[2]; Colorants.Blue.Y = MColorants.v[1].n[2]; Colorants.Blue.Z = MColorants.v[2].n[2]; if (!cmsWriteTag(hICC, cmsSigRedColorantTag, (void*) &Colorants.Red)) goto Error; if (!cmsWriteTag(hICC, cmsSigBlueColorantTag, (void*) &Colorants.Blue)) goto Error; if (!cmsWriteTag(hICC, cmsSigGreenColorantTag, (void*) &Colorants.Green)) goto Error; } if (TransferFunction) { // Tries to minimize space. Thanks to Richard Hughes for this nice idea if (!cmsWriteTag(hICC, cmsSigRedTRCTag, (void*) TransferFunction[0])) goto Error; if (TransferFunction[1] == TransferFunction[0]) { if (!cmsLinkTag (hICC, cmsSigGreenTRCTag, cmsSigRedTRCTag)) goto Error; } else { if (!cmsWriteTag(hICC, cmsSigGreenTRCTag, (void*) TransferFunction[1])) goto Error; } if (TransferFunction[2] == TransferFunction[0]) { if (!cmsLinkTag (hICC, cmsSigBlueTRCTag, cmsSigRedTRCTag)) goto Error; } else { if (!cmsWriteTag(hICC, cmsSigBlueTRCTag, (void*) TransferFunction[2])) goto Error; } } if (Primaries) { if (!cmsWriteTag(hICC, cmsSigChromaticityTag, (void*) Primaries)) goto Error; } return hICC; Error: if (hICC) cmsCloseProfile(hICC); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint, const cmsCIExyYTRIPLE* Primaries, cmsToneCurve* const TransferFunction[3]) { return cmsCreateRGBProfileTHR(NULL, WhitePoint, Primaries, TransferFunction); } // This function creates a profile based on White point and transfer function. cmsHPROFILE CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint, const cmsToneCurve* TransferFunction) { cmsHPROFILE hICC; cmsCIEXYZ tmp; hICC = cmsCreateProfilePlaceholder(ContextID); if (!hICC) // can't allocate return NULL; cmsSetProfileVersion(hICC, 4.3); cmsSetDeviceClass(hICC, cmsSigDisplayClass); cmsSetColorSpace(hICC, cmsSigGrayData); cmsSetPCS(hICC, cmsSigXYZData); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Implement profile using following tags: // // 1 cmsSigProfileDescriptionTag // 2 cmsSigMediaWhitePointTag // 3 cmsSigGrayTRCTag // This conforms a standard Gray DisplayProfile // Fill-in the tags if (!SetTextTags(hICC, L"gray built-in")) goto Error; if (WhitePoint) { cmsxyY2XYZ(&tmp, WhitePoint); if (!cmsWriteTag(hICC, cmsSigMediaWhitePointTag, (void*) &tmp)) goto Error; } if (TransferFunction) { if (!cmsWriteTag(hICC, cmsSigGrayTRCTag, (void*) TransferFunction)) goto Error; } return hICC; Error: if (hICC) cmsCloseProfile(hICC); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint, const cmsToneCurve* TransferFunction) { return cmsCreateGrayProfileTHR(NULL, WhitePoint, TransferFunction); } // This is a devicelink operating in the target colorspace with as many transfer functions as components cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID, cmsColorSpaceSignature ColorSpace, cmsToneCurve* const TransferFunctions[]) { cmsHPROFILE hICC; cmsPipeline* Pipeline; cmsUInt32Number nChannels; hICC = cmsCreateProfilePlaceholder(ContextID); if (!hICC) return NULL; cmsSetProfileVersion(hICC, 4.3); cmsSetDeviceClass(hICC, cmsSigLinkClass); cmsSetColorSpace(hICC, ColorSpace); cmsSetPCS(hICC, ColorSpace); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Set up channels nChannels = cmsChannelsOf(ColorSpace); // Creates a Pipeline with prelinearization step only Pipeline = cmsPipelineAlloc(ContextID, nChannels, nChannels); if (Pipeline == NULL) goto Error; // Copy tables to Pipeline if (!cmsPipelineInsertStage(Pipeline, cmsAT_BEGIN, cmsStageAllocToneCurves(ContextID, nChannels, TransferFunctions))) goto Error; // Create tags if (!SetTextTags(hICC, L"Linearization built-in")) goto Error; if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) Pipeline)) goto Error; if (!SetSeqDescTag(hICC, "Linearization built-in")) goto Error; // Pipeline is already on virtual profile cmsPipelineFree(Pipeline); // Ok, done return hICC; Error: cmsPipelineFree(Pipeline); if (hICC) cmsCloseProfile(hICC); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace, cmsToneCurve* const TransferFunctions[]) { return cmsCreateLinearizationDeviceLinkTHR(NULL, ColorSpace, TransferFunctions); } // Ink-limiting algorithm // // Sum = C + M + Y + K // If Sum > InkLimit // Ratio= 1 - (Sum - InkLimit) / (C + M + Y) // if Ratio <0 // Ratio=0 // endif // Else // Ratio=1 // endif // // C = Ratio * C // M = Ratio * M // Y = Ratio * Y // K: Does not change static int InkLimitingSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsFloat64Number InkLimit = *(cmsFloat64Number *) Cargo; cmsFloat64Number SumCMY, SumCMYK, Ratio; InkLimit = (InkLimit * 655.35); SumCMY = In[0] + In[1] + In[2]; SumCMYK = SumCMY + In[3]; if (SumCMYK > InkLimit) { Ratio = 1 - ((SumCMYK - InkLimit) / SumCMY); if (Ratio < 0) Ratio = 0; } else Ratio = 1; Out[0] = _cmsQuickSaturateWord(In[0] * Ratio); // C Out[1] = _cmsQuickSaturateWord(In[1] * Ratio); // M Out[2] = _cmsQuickSaturateWord(In[2] * Ratio); // Y Out[3] = In[3]; // K (untouched) return TRUE; } // This is a devicelink operating in CMYK for ink-limiting cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID, cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit) { cmsHPROFILE hICC; cmsPipeline* LUT; cmsStage* CLUT; cmsUInt32Number nChannels; if (ColorSpace != cmsSigCmykData) { cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "InkLimiting: Only CMYK currently supported"); return NULL; } if (Limit < 0.0 || Limit > 400) { cmsSignalError(ContextID, cmsERROR_RANGE, "InkLimiting: Limit should be between 0..400"); if (Limit < 0) Limit = 0; if (Limit > 400) Limit = 400; } hICC = cmsCreateProfilePlaceholder(ContextID); if (!hICC) // can't allocate return NULL; cmsSetProfileVersion(hICC, 4.3); cmsSetDeviceClass(hICC, cmsSigLinkClass); cmsSetColorSpace(hICC, ColorSpace); cmsSetPCS(hICC, ColorSpace); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Creates a Pipeline with 3D grid only LUT = cmsPipelineAlloc(ContextID, 4, 4); if (LUT == NULL) goto Error; nChannels = cmsChannelsOf(ColorSpace); CLUT = cmsStageAllocCLut16bit(ContextID, 17, nChannels, nChannels, NULL); if (CLUT == NULL) goto Error; if (!cmsStageSampleCLut16bit(CLUT, InkLimitingSampler, (void*) &Limit, 0)) goto Error; if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, nChannels)) || !cmsPipelineInsertStage(LUT, cmsAT_END, CLUT) || !cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, nChannels))) goto Error; // Create tags if (!SetTextTags(hICC, L"ink-limiting built-in")) goto Error; if (!cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) LUT)) goto Error; if (!SetSeqDescTag(hICC, "ink-limiting built-in")) goto Error; // cmsPipeline is already on virtual profile cmsPipelineFree(LUT); // Ok, done return hICC; Error: if (LUT != NULL) cmsPipelineFree(LUT); if (hICC != NULL) cmsCloseProfile(hICC); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit) { return cmsCreateInkLimitingDeviceLinkTHR(NULL, ColorSpace, Limit); } // Creates a fake Lab identity. cmsHPROFILE CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint) { cmsHPROFILE hProfile; cmsPipeline* LUT = NULL; hProfile = cmsCreateRGBProfileTHR(ContextID, WhitePoint == NULL ? cmsD50_xyY() : WhitePoint, NULL, NULL); if (hProfile == NULL) return NULL; cmsSetProfileVersion(hProfile, 2.1); cmsSetDeviceClass(hProfile, cmsSigAbstractClass); cmsSetColorSpace(hProfile, cmsSigLabData); cmsSetPCS(hProfile, cmsSigLabData); if (!SetTextTags(hProfile, L"Lab identity built-in")) return NULL; // An identity LUT is all we need LUT = cmsPipelineAlloc(ContextID, 3, 3); if (LUT == NULL) goto Error; if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCLut(ContextID, 3))) goto Error; if (!cmsWriteTag(hProfile, cmsSigAToB0Tag, LUT)) goto Error; cmsPipelineFree(LUT); return hProfile; Error: if (LUT != NULL) cmsPipelineFree(LUT); if (hProfile != NULL) cmsCloseProfile(hProfile); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint) { return cmsCreateLab2ProfileTHR(NULL, WhitePoint); } // Creates a fake Lab V4 identity. cmsHPROFILE CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint) { cmsHPROFILE hProfile; cmsPipeline* LUT = NULL; hProfile = cmsCreateRGBProfileTHR(ContextID, WhitePoint == NULL ? cmsD50_xyY() : WhitePoint, NULL, NULL); if (hProfile == NULL) return NULL; cmsSetProfileVersion(hProfile, 4.3); cmsSetDeviceClass(hProfile, cmsSigAbstractClass); cmsSetColorSpace(hProfile, cmsSigLabData); cmsSetPCS(hProfile, cmsSigLabData); if (!SetTextTags(hProfile, L"Lab identity built-in")) goto Error; // An empty LUTs is all we need LUT = cmsPipelineAlloc(ContextID, 3, 3); if (LUT == NULL) goto Error; if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3))) goto Error; if (!cmsWriteTag(hProfile, cmsSigAToB0Tag, LUT)) goto Error; cmsPipelineFree(LUT); return hProfile; Error: if (LUT != NULL) cmsPipelineFree(LUT); if (hProfile != NULL) cmsCloseProfile(hProfile); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint) { return cmsCreateLab4ProfileTHR(NULL, WhitePoint); } // Creates a fake XYZ identity cmsHPROFILE CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID) { cmsHPROFILE hProfile; cmsPipeline* LUT = NULL; hProfile = cmsCreateRGBProfileTHR(ContextID, cmsD50_xyY(), NULL, NULL); if (hProfile == NULL) return NULL; cmsSetProfileVersion(hProfile, 4.3); cmsSetDeviceClass(hProfile, cmsSigAbstractClass); cmsSetColorSpace(hProfile, cmsSigXYZData); cmsSetPCS(hProfile, cmsSigXYZData); if (!SetTextTags(hProfile, L"XYZ identity built-in")) goto Error; // An identity LUT is all we need LUT = cmsPipelineAlloc(ContextID, 3, 3); if (LUT == NULL) goto Error; if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, 3))) goto Error; if (!cmsWriteTag(hProfile, cmsSigAToB0Tag, LUT)) goto Error; cmsPipelineFree(LUT); return hProfile; Error: if (LUT != NULL) cmsPipelineFree(LUT); if (hProfile != NULL) cmsCloseProfile(hProfile); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateXYZProfile(void) { return cmsCreateXYZProfileTHR(NULL); } //sRGB Curves are defined by: // //If R'sRGB,G'sRGB, B'sRGB < 0.04045 // // R = R'sRGB / 12.92 // G = G'sRGB / 12.92 // B = B'sRGB / 12.92 // // //else if R'sRGB,G'sRGB, B'sRGB >= 0.04045 // // R = ((R'sRGB + 0.055) / 1.055)^2.4 // G = ((G'sRGB + 0.055) / 1.055)^2.4 // B = ((B'sRGB + 0.055) / 1.055)^2.4 static cmsToneCurve* Build_sRGBGamma(cmsContext ContextID) { cmsFloat64Number Parameters[5]; Parameters[0] = 2.4; Parameters[1] = 1. / 1.055; Parameters[2] = 0.055 / 1.055; Parameters[3] = 1. / 12.92; Parameters[4] = 0.04045; return cmsBuildParametricToneCurve(ContextID, 4, Parameters); } // Create the ICC virtual profile for sRGB space cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID) { cmsCIExyY D65 = { 0.3127, 0.3290, 1.0 }; cmsCIExyYTRIPLE Rec709Primaries = { {0.6400, 0.3300, 1.0}, {0.3000, 0.6000, 1.0}, {0.1500, 0.0600, 1.0} }; cmsToneCurve* Gamma22[3]; cmsHPROFILE hsRGB; // cmsWhitePointFromTemp(&D65, 6504); Gamma22[0] = Gamma22[1] = Gamma22[2] = Build_sRGBGamma(ContextID); if (Gamma22[0] == NULL) return NULL; hsRGB = cmsCreateRGBProfileTHR(ContextID, &D65, &Rec709Primaries, Gamma22); cmsFreeToneCurve(Gamma22[0]); if (hsRGB == NULL) return NULL; if (!SetTextTags(hsRGB, L"sRGB built-in")) { cmsCloseProfile(hsRGB); return NULL; } return hsRGB; } cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfile(void) { return cmsCreate_sRGBProfileTHR(NULL); } typedef struct { cmsFloat64Number Brightness; cmsFloat64Number Contrast; cmsFloat64Number Hue; cmsFloat64Number Saturation; cmsBool lAdjustWP; cmsCIEXYZ WPsrc, WPdest; } BCHSWADJUSTS, *LPBCHSWADJUSTS; static int bchswSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { cmsCIELab LabIn, LabOut; cmsCIELCh LChIn, LChOut; cmsCIEXYZ XYZ; LPBCHSWADJUSTS bchsw = (LPBCHSWADJUSTS) Cargo; cmsLabEncoded2Float(&LabIn, In); cmsLab2LCh(&LChIn, &LabIn); // Do some adjusts on LCh LChOut.L = LChIn.L * bchsw ->Contrast + bchsw ->Brightness; LChOut.C = LChIn.C + bchsw -> Saturation; LChOut.h = LChIn.h + bchsw -> Hue; cmsLCh2Lab(&LabOut, &LChOut); // Move white point in Lab if (bchsw->lAdjustWP) { cmsLab2XYZ(&bchsw->WPsrc, &XYZ, &LabOut); cmsXYZ2Lab(&bchsw->WPdest, &LabOut, &XYZ); } // Back to encoded cmsFloat2LabEncoded(Out, &LabOut); return TRUE; } // Creates an abstract profile operating in Lab space for Brightness, // contrast, Saturation and white point displacement cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID, cmsUInt32Number nLUTPoints, cmsFloat64Number Bright, cmsFloat64Number Contrast, cmsFloat64Number Hue, cmsFloat64Number Saturation, cmsUInt32Number TempSrc, cmsUInt32Number TempDest) { cmsHPROFILE hICC; cmsPipeline* Pipeline; BCHSWADJUSTS bchsw; cmsCIExyY WhitePnt; cmsStage* CLUT; cmsUInt32Number Dimensions[MAX_INPUT_DIMENSIONS]; cmsUInt32Number i; bchsw.Brightness = Bright; bchsw.Contrast = Contrast; bchsw.Hue = Hue; bchsw.Saturation = Saturation; if (TempSrc == TempDest) { bchsw.lAdjustWP = FALSE; } else { bchsw.lAdjustWP = TRUE; cmsWhitePointFromTemp(&WhitePnt, TempSrc); cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt); cmsWhitePointFromTemp(&WhitePnt, TempDest); cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt); } hICC = cmsCreateProfilePlaceholder(ContextID); if (!hICC) // can't allocate return NULL; cmsSetDeviceClass(hICC, cmsSigAbstractClass); cmsSetColorSpace(hICC, cmsSigLabData); cmsSetPCS(hICC, cmsSigLabData); cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL); // Creates a Pipeline with 3D grid only Pipeline = cmsPipelineAlloc(ContextID, 3, 3); if (Pipeline == NULL) { cmsCloseProfile(hICC); return NULL; } for (i=0; i < MAX_INPUT_DIMENSIONS; i++) Dimensions[i] = nLUTPoints; CLUT = cmsStageAllocCLut16bitGranular(ContextID, Dimensions, 3, 3, NULL); if (CLUT == NULL) goto Error; if (!cmsStageSampleCLut16bit(CLUT, bchswSampler, (void*) &bchsw, 0)) { // Shouldn't reach here goto Error; } if (!cmsPipelineInsertStage(Pipeline, cmsAT_END, CLUT)) { goto Error; } // Create tags if (!SetTextTags(hICC, L"BCHS built-in")) return NULL; cmsWriteTag(hICC, cmsSigMediaWhitePointTag, (void*) cmsD50_XYZ()); cmsWriteTag(hICC, cmsSigAToB0Tag, (void*) Pipeline); // Pipeline is already on virtual profile cmsPipelineFree(Pipeline); // Ok, done return hICC; Error: cmsPipelineFree(Pipeline); cmsCloseProfile(hICC); return NULL; } CMSAPI cmsHPROFILE CMSEXPORT cmsCreateBCHSWabstractProfile(cmsUInt32Number nLUTPoints, cmsFloat64Number Bright, cmsFloat64Number Contrast, cmsFloat64Number Hue, cmsFloat64Number Saturation, cmsUInt32Number TempSrc, cmsUInt32Number TempDest) { return cmsCreateBCHSWabstractProfileTHR(NULL, nLUTPoints, Bright, Contrast, Hue, Saturation, TempSrc, TempDest); } // Creates a fake NULL profile. This profile return 1 channel as always 0. // Is useful only for gamut checking tricks cmsHPROFILE CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID) { cmsHPROFILE hProfile; cmsPipeline* LUT = NULL; cmsStage* PostLin; cmsStage* OutLin; cmsToneCurve* EmptyTab[3]; cmsUInt16Number Zero[2] = { 0, 0 }; const cmsFloat64Number PickLstarMatrix[] = { 1, 0, 0 }; hProfile = cmsCreateProfilePlaceholder(ContextID); if (!hProfile) // can't allocate return NULL; cmsSetProfileVersion(hProfile, 4.3); if (!SetTextTags(hProfile, L"NULL profile built-in")) goto Error; cmsSetDeviceClass(hProfile, cmsSigOutputClass); cmsSetColorSpace(hProfile, cmsSigGrayData); cmsSetPCS(hProfile, cmsSigLabData); // Create a valid ICC 4 structure LUT = cmsPipelineAlloc(ContextID, 3, 1); if (LUT == NULL) goto Error; EmptyTab[0] = EmptyTab[1] = EmptyTab[2] = cmsBuildTabulatedToneCurve16(ContextID, 2, Zero); PostLin = cmsStageAllocToneCurves(ContextID, 3, EmptyTab); OutLin = cmsStageAllocToneCurves(ContextID, 1, EmptyTab); cmsFreeToneCurve(EmptyTab[0]); if (!cmsPipelineInsertStage(LUT, cmsAT_END, PostLin)) goto Error; if (!cmsPipelineInsertStage(LUT, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 3, PickLstarMatrix, NULL))) goto Error; if (!cmsPipelineInsertStage(LUT, cmsAT_END, OutLin)) goto Error; if (!cmsWriteTag(hProfile, cmsSigBToA0Tag, (void*) LUT)) goto Error; if (!cmsWriteTag(hProfile, cmsSigMediaWhitePointTag, cmsD50_XYZ())) goto Error; cmsPipelineFree(LUT); return hProfile; Error: if (LUT != NULL) cmsPipelineFree(LUT); if (hProfile != NULL) cmsCloseProfile(hProfile); return NULL; } cmsHPROFILE CMSEXPORT cmsCreateNULLProfile(void) { return cmsCreateNULLProfileTHR(NULL); } static int IsPCS(cmsColorSpaceSignature ColorSpace) { return (ColorSpace == cmsSigXYZData || ColorSpace == cmsSigLabData); } static void FixColorSpaces(cmsHPROFILE hProfile, cmsColorSpaceSignature ColorSpace, cmsColorSpaceSignature PCS, cmsUInt32Number dwFlags) { if (dwFlags & cmsFLAGS_GUESSDEVICECLASS) { if (IsPCS(ColorSpace) && IsPCS(PCS)) { cmsSetDeviceClass(hProfile, cmsSigAbstractClass); cmsSetColorSpace(hProfile, ColorSpace); cmsSetPCS(hProfile, PCS); return; } if (IsPCS(ColorSpace) && !IsPCS(PCS)) { cmsSetDeviceClass(hProfile, cmsSigOutputClass); cmsSetPCS(hProfile, ColorSpace); cmsSetColorSpace(hProfile, PCS); return; } if (IsPCS(PCS) && !IsPCS(ColorSpace)) { cmsSetDeviceClass(hProfile, cmsSigInputClass); cmsSetColorSpace(hProfile, ColorSpace); cmsSetPCS(hProfile, PCS); return; } } cmsSetDeviceClass(hProfile, cmsSigLinkClass); cmsSetColorSpace(hProfile, ColorSpace); cmsSetPCS(hProfile, PCS); } // This function creates a named color profile dumping all the contents of transform to a single profile // In this way, LittleCMS may be used to "group" several named color databases into a single profile. // It has, however, several minor limitations. PCS is always Lab, which is not very critic since this // is the normal PCS for named color profiles. static cmsHPROFILE CreateNamedColorDevicelink(cmsHTRANSFORM xform) { _cmsTRANSFORM* v = (_cmsTRANSFORM*) xform; cmsHPROFILE hICC = NULL; cmsUInt32Number i, nColors; cmsNAMEDCOLORLIST *nc2 = NULL, *Original = NULL; // Create an empty placeholder hICC = cmsCreateProfilePlaceholder(v->ContextID); if (hICC == NULL) return NULL; // Critical information cmsSetDeviceClass(hICC, cmsSigNamedColorClass); cmsSetColorSpace(hICC, v ->ExitColorSpace); cmsSetPCS(hICC, cmsSigLabData); // Tag profile with information if (!SetTextTags(hICC, L"Named color devicelink")) goto Error; Original = cmsGetNamedColorList(xform); if (Original == NULL) goto Error; nColors = cmsNamedColorCount(Original); nc2 = cmsDupNamedColorList(Original); if (nc2 == NULL) goto Error; // Colorant count now depends on the output space nc2 ->ColorantCount = cmsPipelineOutputChannels(v ->Lut); // Make sure we have proper formatters cmsChangeBuffersFormat(xform, TYPE_NAMED_COLOR_INDEX, FLOAT_SH(0) | COLORSPACE_SH(_cmsLCMScolorSpace(v ->ExitColorSpace)) | BYTES_SH(2) | CHANNELS_SH(cmsChannelsOf(v ->ExitColorSpace))); // Apply the transfor to colorants. for (i=0; i < nColors; i++) { cmsDoTransform(xform, &i, nc2 ->List[i].DeviceColorant, 1); } if (!cmsWriteTag(hICC, cmsSigNamedColor2Tag, (void*) nc2)) goto Error; cmsFreeNamedColorList(nc2); return hICC; Error: if (hICC != NULL) cmsCloseProfile(hICC); return NULL; } // This structure holds information about which MPU can be stored on a profile based on the version typedef struct { cmsBool IsV4; // Is a V4 tag? cmsTagSignature RequiredTag; // Set to 0 for both types cmsTagTypeSignature LutType; // The LUT type int nTypes; // Number of types (up to 5) cmsStageSignature MpeTypes[5]; // 5 is the maximum number } cmsAllowedLUT; #define cmsSig0 ((cmsTagSignature) 0) static const cmsAllowedLUT AllowedLUTTypes[] = { { FALSE, cmsSig0, cmsSigLut16Type, 4, { cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } }, { FALSE, cmsSig0, cmsSigLut16Type, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } }, { FALSE, cmsSig0, cmsSigLut16Type, 2, { cmsSigCurveSetElemType, cmsSigCLutElemType } }, { TRUE, cmsSig0, cmsSigLutAtoBType, 1, { cmsSigCurveSetElemType } }, { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 3, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType } }, { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } }, { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType, 5, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }}, { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 1, { cmsSigCurveSetElemType }}, { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 3, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }}, { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType }}, { TRUE , cmsSigBToA0Tag, cmsSigLutBtoAType, 5, { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType }} }; #define SIZE_OF_ALLOWED_LUT (sizeof(AllowedLUTTypes)/sizeof(cmsAllowedLUT)) // Check a single entry static cmsBool CheckOne(const cmsAllowedLUT* Tab, const cmsPipeline* Lut) { cmsStage* mpe; int n; for (n=0, mpe = Lut ->Elements; mpe != NULL; mpe = mpe ->Next, n++) { if (n > Tab ->nTypes) return FALSE; if (cmsStageType(mpe) != Tab ->MpeTypes[n]) return FALSE; } return (n == Tab ->nTypes); } static const cmsAllowedLUT* FindCombination(const cmsPipeline* Lut, cmsBool IsV4, cmsTagSignature DestinationTag) { cmsUInt32Number n; for (n=0; n < SIZE_OF_ALLOWED_LUT; n++) { const cmsAllowedLUT* Tab = AllowedLUTTypes + n; if (IsV4 ^ Tab -> IsV4) continue; if ((Tab ->RequiredTag != 0) && (Tab ->RequiredTag != DestinationTag)) continue; if (CheckOne(Tab, Lut)) return Tab; } return NULL; } // Does convert a transform into a device link profile cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags) { cmsHPROFILE hProfile = NULL; cmsUInt32Number FrmIn, FrmOut, ChansIn, ChansOut; int ColorSpaceBitsIn, ColorSpaceBitsOut; _cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform; cmsPipeline* LUT = NULL; cmsStage* mpe; cmsContext ContextID = cmsGetTransformContextID(hTransform); const cmsAllowedLUT* AllowedLUT; cmsTagSignature DestinationTag; cmsProfileClassSignature deviceClass; _cmsAssert(hTransform != NULL); // Get the first mpe to check for named color mpe = cmsPipelineGetPtrToFirstStage(xform ->Lut); // Check if is a named color transform if (mpe != NULL) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) { return CreateNamedColorDevicelink(hTransform); } } // First thing to do is to get a copy of the transformation LUT = cmsPipelineDup(xform ->Lut); if (LUT == NULL) return NULL; // Time to fix the Lab2/Lab4 issue. if ((xform ->EntryColorSpace == cmsSigLabData) && (Version < 4.0)) { if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocLabV2ToV4curves(ContextID))) goto Error; } // On the output side too. Note that due to V2/V4 PCS encoding on lab we cannot fix white misalignments if ((xform ->ExitColorSpace) == cmsSigLabData && (Version < 4.0)) { dwFlags |= cmsFLAGS_NOWHITEONWHITEFIXUP; if (!cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocLabV4ToV2(ContextID))) goto Error; } hProfile = cmsCreateProfilePlaceholder(ContextID); if (!hProfile) goto Error; // can't allocate cmsSetProfileVersion(hProfile, Version); FixColorSpaces(hProfile, xform -> EntryColorSpace, xform -> ExitColorSpace, dwFlags); // Optimize the LUT and precalculate a devicelink ChansIn = cmsChannelsOf(xform -> EntryColorSpace); ChansOut = cmsChannelsOf(xform -> ExitColorSpace); ColorSpaceBitsIn = _cmsLCMScolorSpace(xform -> EntryColorSpace); ColorSpaceBitsOut = _cmsLCMScolorSpace(xform -> ExitColorSpace); FrmIn = COLORSPACE_SH(ColorSpaceBitsIn) | CHANNELS_SH(ChansIn)|BYTES_SH(2); FrmOut = COLORSPACE_SH(ColorSpaceBitsOut) | CHANNELS_SH(ChansOut)|BYTES_SH(2); deviceClass = cmsGetDeviceClass(hProfile); if (deviceClass == cmsSigOutputClass) DestinationTag = cmsSigBToA0Tag; else DestinationTag = cmsSigAToB0Tag; // Check if the profile/version can store the result if (dwFlags & cmsFLAGS_FORCE_CLUT) AllowedLUT = NULL; else AllowedLUT = FindCombination(LUT, Version >= 4.0, DestinationTag); if (AllowedLUT == NULL) { // Try to optimize _cmsOptimizePipeline(ContextID, &LUT, xform ->RenderingIntent, &FrmIn, &FrmOut, &dwFlags); AllowedLUT = FindCombination(LUT, Version >= 4.0, DestinationTag); } // If no way, then force CLUT that for sure can be written if (AllowedLUT == NULL) { cmsStage* FirstStage; cmsStage* LastStage; dwFlags |= cmsFLAGS_FORCE_CLUT; _cmsOptimizePipeline(ContextID, &LUT, xform ->RenderingIntent, &FrmIn, &FrmOut, &dwFlags); // Put identity curves if needed FirstStage = cmsPipelineGetPtrToFirstStage(LUT); if (FirstStage != NULL && FirstStage ->Type != cmsSigCurveSetElemType) if (!cmsPipelineInsertStage(LUT, cmsAT_BEGIN, _cmsStageAllocIdentityCurves(ContextID, ChansIn))) goto Error; LastStage = cmsPipelineGetPtrToLastStage(LUT); if (LastStage != NULL && LastStage ->Type != cmsSigCurveSetElemType) if (!cmsPipelineInsertStage(LUT, cmsAT_END, _cmsStageAllocIdentityCurves(ContextID, ChansOut))) goto Error; AllowedLUT = FindCombination(LUT, Version >= 4.0, DestinationTag); } // Somethings is wrong... if (AllowedLUT == NULL) { goto Error; } if (dwFlags & cmsFLAGS_8BITS_DEVICELINK) cmsPipelineSetSaveAs8bitsFlag(LUT, TRUE); // Tag profile with information if (!SetTextTags(hProfile, L"devicelink")) goto Error; // Store result if (!cmsWriteTag(hProfile, DestinationTag, LUT)) goto Error; if (xform -> InputColorant != NULL) { if (!cmsWriteTag(hProfile, cmsSigColorantTableTag, xform->InputColorant)) goto Error; } if (xform -> OutputColorant != NULL) { if (!cmsWriteTag(hProfile, cmsSigColorantTableOutTag, xform->OutputColorant)) goto Error; } if ((deviceClass == cmsSigLinkClass) && (xform ->Sequence != NULL)) { if (!_cmsWriteProfileSequence(hProfile, xform ->Sequence)) goto Error; } // Set the white point if (deviceClass == cmsSigInputClass) { if (!cmsWriteTag(hProfile, cmsSigMediaWhitePointTag, &xform ->EntryWhitePoint)) goto Error; } else { if (!cmsWriteTag(hProfile, cmsSigMediaWhitePointTag, &xform ->ExitWhitePoint)) goto Error; } // Per 7.2.15 in spec 4.3 cmsSetHeaderRenderingIntent(hProfile, xform ->RenderingIntent); cmsPipelineFree(LUT); return hProfile; Error: if (LUT != NULL) cmsPipelineFree(LUT); cmsCloseProfile(hProfile); return NULL; } lcms2-2.12rc1/README.1ST0000644000175000017500000000221213775114656013400 0ustar martimarti About Little CMS Little CMS intends to be an OPEN SOURCE small-footprint color management engine, with special focus on accuracy and performance. It uses the International Color Consortium standard (ICC), which is the modern standard when regarding to color management. The ICC specification is widely used and is referred to in many International and other de-facto standards. It was approved as an International Standard, ISO 15076-1, in 2005. Conformance Little CMS 2.12 is a FULL IMPLEMENTATION of ICC specification 4.3, it fully supports all kind of V2 and V4 profiles, including abstract, devicelink and named color profiles. Check the tutorial for a exhaustive list of features. A bit of story Since the initial release, back in 1998, Little CMS has grown to become one of the most popular open-source color management libraries, and has been used in a large number of production projects, in areas as printer firmware, monitors, digital cameras, RIPs, publishing, scientific, and many others. You can find Little CMS in most Linux distributions, and it's released under an open source license. Please see the complete documentation in doc folder lcms2-2.12rc1/INSTALL0000644000175000017500000000005513775114656013146 0ustar martimarti Please see the documentation in doc folder lcms2-2.12rc1/utils/0000755000175000017500000000000013775114656013255 5ustar martimartilcms2-2.12rc1/utils/delphi/0000755000175000017500000000000013775114656014522 5ustar martimartilcms2-2.12rc1/utils/delphi/delphidemo.res0000755000175000017500000000155413775114656017357 0ustar martimarti   ( @wxx LLLx LLLLLLLx LLLLLLLLx LLLLLL@ LLw LLLLLLxwp LLLHLLxpx LLLLxwyHLćp LLLLGw{LćxxDDDDHw{ĄxDDDHxyĄDDDHHDDDDDDHHDDDDD@O?H?0MAINICON  lcms2-2.12rc1/utils/delphi/demo1.dfm0000755000175000017500000001046013775114656016223 0ustar martimarti TFORM10 TPF0TForm1Form1LeftTopCaptionLittle cms 2 Delphi demo ClientHeight ClientWidthColor clBtnFaceConstraints.MinHeight Font.CharsetDEFAULT_CHARSET Font.Color clWindowText Font.Height Font.Name MS Sans Serif Font.Style OldCreateOrder PixelsPerInch` TextHeightTImageImage1LeftTopWidth\Height Margins.Left Margins.Top Margins.RightMargins.BottomAlignalLeftStretch ExplicitLeftTImageImage2LeftfTopWidthjHeight Margins.Left Margins.Top Margins.RightMargins.BottomAlignalClientStretch ExplicitLeftn ExplicitWidthExplicitHeightP TSplitter Splitter1Left\TopWidth Height Margins.Left Margins.Top Margins.RightMargins.BottomBeveled ExplicitLeft ExplicitTopExplicitHeightTPanelPanel1LeftTopWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAlignalBottomConstraints.MinWidthhCtl3D ParentCtl3DTabOrder ExplicitTop DesignSizeTLabelLabel1Left(TopWidthGHeight Margins.Left Margins.Top Margins.RightMargins.Bottom AlignmenttaRightJustifyAnchors akLeftakBottomCaptionInput profile: ExplicitTopSTLabelLabel2Left%TopWidthWHeight Margins.Left Margins.Top Margins.RightMargins.Bottom AlignmenttaRightJustifyAnchors akLeftakBottomCaptionMonitor profile: ExplicitToppTLabelLabel3Left(Top6WidthdHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakRightakBottomCaptionRendering intent:LayouttlCenterTLabelLabel4Left%Top`WidthHeightAnchors akLeftakBottomCaption Adaptation state (abs col. only)TButtonButton3LeftTopWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akRightakBottomCaption...TabOrder OnClick Button3Click TComboBox ComboBoxInputLeftTopWidth(Height Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakRightakBottomCtl3D ParentCtl3DTabOrderTButtonButton2Left Top6WidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakBottomCaption Load &pictureTabOrderOnClick Button2Click TComboBoxComboBoxOutputLeftTopWidth(Height Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakRightakBottomTabOrder TCheckBoxWBCompensationLeft'TopWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakBottomCaptionBlack point compensationTabOrder TCheckBox NoTransformLeftTopWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akRightakBottomCaptionDon't transform at allTabOrder TRadioGroup RadioGroup1Left TophWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakBottomCaptionTroughput optimization ItemIndex Items.Strings &No optimize (top quality, slow)&More memory (quality)&Standard (Balanced)&Less memory (for previews)TabOrderTButtonButton1LeftTopWidthHeight) Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakRightakBottomCaptionApply profilesTabOrderOnClick Button1Click TProgressBar ProgressBar1Left TopWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akLeftakRightakBottomTabOrder TComboBoxComboBoxIntentLeftTop6Width2Height Margins.Left Margins.Top Margins.RightMargins.BottomStylecsDropDownListAnchors akLeftakRightakBottomTabOrderOnChangeComboBoxIntentChange Items.Strings PerceptualRelative colorimetric SaturationAbsolute colorimetricTButtonButton4LeftTopWidthHeight Margins.Left Margins.Top Margins.RightMargins.BottomAnchors akRightakBottomCaption...TabOrder OnClick Button4Click TScrollBar ScrollBar1LeftTop`WidthHeightAnchors akLeftakRightakBottomEnabledPageSizeTabOrder OnChangeScrollBar1ChangeTOpenPictureDialogOpenPictureDialog1FilterBMP files|*.bmpLeftTop TOpenDialog OpenDialog1 DefaultExticmFilter {E3F889E8-CB8A-49AE-8173-4DDA022466BE} delphidemo.dpr Debug DCC32 12.0 true true Base true true Base true vcl;rtl;vclx;vclimg;vclactnband;dbrtl;vcldb;vcldbx;bdertl;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;websnap;webdsnap;inetdb;inetdbbde;inetdbxpress;soaprtl;vclribbon;dbexpress;DbxCommonDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;DbxClientDriver;DataSnapServer;DBXInterBaseDriver;DBXMySQLDriver;dbxcds;DBXFirebirdDriver;DBXSybaseASEDriver;DBXSybaseASADriver;DBXOracleDriver;DBXMSSQLDriver;DBXInformixDriver;DBXDb2Driver;Rave77VCL 00400000 1 delphidemo.exe WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Windows;WinProcs=Windows;$(DCC_UnitAlias) x86 true false false false false false RELEASE;$(DCC_Define) 0 false DEBUG;$(DCC_Define) MainSource

Form1 Base Cfg_2 Base Cfg_1 Base Delphi.Personality.12 VCLApplication delphidemo.dpr False d:\lcms-1.13\delphi True False False False 1 0 0 0 False False False False False 3082 1252 1.0.0.0 1.0.0.0 Microsoft Office 2000 Sample Automation Server Wrapper Components Microsoft Office XP Sample Automation Server Wrapper Components False 12 lcms2-2.12rc1/utils/delphi/demo1.pas0000644000175000017500000001660013775114656016237 0ustar martimartiunit demo1; interface uses Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ExtDlgs, lcms2dll, ComCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Panel1: TPanel; Splitter1: TSplitter; Button2: TButton; ComboBoxInput: TComboBox; ComboBoxOutput: TComboBox; Label1: TLabel; Label2: TLabel; WBCompensation: TCheckBox; NoTransform: TCheckBox; RadioGroup1: TRadioGroup; OpenPictureDialog1: TOpenPictureDialog; Button1: TButton; ProgressBar1: TProgressBar; ComboBoxIntent: TComboBox; Label3: TLabel; Button3: TButton; Button4: TButton; OpenDialog1: TOpenDialog; Label4: TLabel; ScrollBar1: TScrollBar; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ComboBoxIntentChange(Sender: TObject); procedure ScrollBar1Change(Sender: TObject); private { Private declarations } function ComputeFlags: DWORD; public constructor Create(Owner: TComponent); Override; { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} CONST IS_INPUT = $1; IS_DISPLAY = $2; IS_COLORSPACE = $4; IS_OUTPUT = $8; IS_ABSTRACT = $10; VAR IntentCodes: array [0 .. 20] of cmsUInt32Number; FUNCTION InSignatures(Signature: cmsProfileClassSignature; dwFlags: DWORD): Boolean; BEGIN if (((dwFlags AND IS_DISPLAY) <> 0) AND (Signature = cmsSigDisplayClass)) then InSignatures := TRUE else if (((dwFlags AND IS_OUTPUT) <> 0) AND (Signature = cmsSigOutputClass)) then InSignatures := TRUE else if (((dwFlags AND IS_INPUT) <> 0) AND (Signature = cmsSigInputClass)) then InSignatures := TRUE else if (((dwFlags AND IS_COLORSPACE) <> 0) AND (Signature = cmsSigColorSpaceClass)) then InSignatures := TRUE else if (((dwFlags AND IS_ABSTRACT) <> 0) AND (Signature = cmsSigAbstractClass)) then InSignatures := TRUE else InSignatures := FALSE END; PROCEDURE FillCombo(var Combo: TComboBox; Signatures: DWORD); var Files, Descriptions: TStringList; Found: Integer; SearchRec: TSearchRec; Path, Profile: String; Dir: ARRAY [0 .. 1024] OF Char; hProfile: cmsHPROFILE; Descrip: array [0 .. 256] of Char; begin Files := TStringList.Create; Descriptions := TStringList.Create; GetSystemDirectory(Dir, 1023); Path := String(Dir) + '\SPOOL\DRIVERS\COLOR\'; Found := FindFirst(Path + '*.ic?', faAnyFile, SearchRec); while Found = 0 do begin Profile := Path + SearchRec.Name; hProfile := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Profile)), 'r'); if (hProfile <> NIL) THEN begin if ((cmsGetColorSpace(hProfile) = cmsSigRgbData) AND InSignatures (cmsGetDeviceClass(hProfile), Signatures)) then begin cmsGetProfileInfo(hProfile, cmsInfoDescription, 'EN', 'us', Descrip, 256); Descriptions.Add(Descrip); Files.Add(Profile); end; cmsCloseProfile(hProfile); end; Found := FindNext(SearchRec); end; FindClose(SearchRec); Combo.Items := Descriptions; Combo.Tag := Integer(Files); end; // A rather simple Logger... note the "cdecl" convention PROCEDURE ErrorLogger(ContextID: cmsContext; ErrorCode: cmsUInt32Number; Text: PAnsiChar); Cdecl; begin MessageBox(0, PWideChar(WideString(Text)), 'Something is going wrong...', MB_OK OR MB_ICONWARNING or MB_TASKMODAL); end; constructor TForm1.Create(Owner: TComponent); var IntentNames: array [0 .. 20] of PAnsiChar; i, n: Integer; begin inherited Create(Owner); // Set the logger cmsSetLogErrorHandler(ErrorLogger); ScrollBar1.Min := 0; ScrollBar1.Max := 100; FillCombo(ComboBoxInput, IS_INPUT OR IS_COLORSPACE OR IS_DISPLAY); FillCombo(ComboBoxOutput, $FFFF ); // Get the supported intents n := cmsGetSupportedIntents(20, @IntentCodes, @IntentNames); ComboBoxIntent.Items.BeginUpdate; ComboBoxIntent.Items.Clear; for i:= 0 TO n - 1 DO ComboBoxIntent.Items.Add(String(IntentNames[i])); ComboBoxIntent.ItemIndex := 0; ComboBoxIntent.Items.EndUpdate; end; procedure TForm1.ScrollBar1Change(Sender: TObject); var d: Integer; s: String; begin d := ScrollBar1.Position; Str(d, s); Label4.Caption := 'Adaptation state '+s + '% (Abs. col only)'; end; procedure TForm1.Button2Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); Image1.Picture.Bitmap.PixelFormat := pf24bit; Image2.Picture.LoadFromFile(OpenPictureDialog1.FileName); Image2.Picture.Bitmap.PixelFormat := pf24bit; end end; function SelectedFile(var Combo: TComboBox): string; var List: TStringList; n: Integer; begin List := TStringList(Combo.Tag); n := Combo.ItemIndex; if (n >= 0) then SelectedFile := List.Strings[n] else SelectedFile := Combo.Text; end; procedure TForm1.ComboBoxIntentChange(Sender: TObject); begin ScrollBar1.Enabled := (ComboBoxIntent.itemIndex = 3); end; function TForm1.ComputeFlags: DWORD; var dwFlags: DWORD; begin dwFlags := 0; if (WBCompensation.Checked) then begin dwFlags := dwFlags OR cmsFLAGS_BLACKPOINTCOMPENSATION end; if (NoTransform.Checked) then begin dwFlags := dwFlags OR cmsFLAGS_NULLTRANSFORM end; case RadioGroup1.ItemIndex of 0: dwFlags := dwFlags OR cmsFLAGS_NOOPTIMIZE; 1: dwFlags := dwFlags OR cmsFLAGS_HIGHRESPRECALC; 3: dwFlags := dwFlags OR cmsFLAGS_LOWRESPRECALC; end; ComputeFlags := dwFlags end; procedure TForm1.Button1Click(Sender: TObject); var Source, Dest: String; hSrc, hDest: cmsHPROFILE; xform: cmsHTRANSFORM; i, PicW, PicH: Integer; Intent: Integer; dwFlags: DWORD; begin Source := SelectedFile(ComboBoxInput); Dest := SelectedFile(ComboBoxOutput); dwFlags := ComputeFlags; Intent := IntentCodes[ComboBoxIntent.ItemIndex]; cmsSetAdaptationState( ScrollBar1.Position / 100.0 ); if (Source <> '') AND (Dest <> '') then begin hSrc := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Source)), 'r'); hDest := cmsOpenProfileFromFile(PAnsiChar(AnsiString(Dest)), 'r'); if (hSrc <> Nil) and (hDest <> Nil) then begin xform := cmsCreateTransform(hSrc, TYPE_BGR_8, hDest, TYPE_BGR_8, Intent, dwFlags); end else begin xform := nil; end; if hSrc <> nil then begin cmsCloseProfile(hSrc); end; if hDest <> Nil then begin cmsCloseProfile(hDest); end; if (xform <> nil) then begin PicW := Image2.Picture.width; PicH := Image2.Picture.height; ProgressBar1.Min := 0; ProgressBar1.Max := PicH; ProgressBar1.Step := 1; for i := 0 TO (PicH - 1) do begin if ((i MOD 100) = 0) then ProgressBar1.Position := i; cmsDoTransform(xform, Image1.Picture.Bitmap.Scanline[i], Image2.Picture.Bitmap.Scanline[i], PicW); end; ProgressBar1.Position := PicH; cmsDeleteTransform(xform); end; Image2.Repaint; ProgressBar1.Position := 0; end end; procedure TForm1.Button3Click(Sender: TObject); begin if OpenDialog1.Execute then ComboBoxInput.Text := OpenDialog1.FileName; end; procedure TForm1.Button4Click(Sender: TObject); begin if OpenDialog1.Execute then ComboBoxOutput.Text := OpenDialog1.FileName; end; end. lcms2-2.12rc1/utils/delphi/delphidemo.dpr0000644000175000017500000000026113775114656017342 0ustar martimartiprogram delphidemo; uses Forms, demo1 in 'demo1.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. lcms2-2.12rc1/utils/delphi/lcms2dll.pas0000644000175000017500000034267413775114656016763 0ustar martimarti// // Little cms DELPHI wrapper //--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2014 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // // Version 2.6 // UNIT lcms2dll; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} INTERFACE {$IFNDEF MSWINDOWS} USES LCLType, types; Type PWChar = PWideChar; {$ELSE} USES Windows; {$ENDIF} CONST LCMS2_SO = {$IFDEF DARWIN} 'liblcms2.2.dylib'; {$ELSE} 'lcms2.dll'; {$ENDIF} TYPE Uint8 = Byte; Int8 = Shortint; UInt16 = Word; Int16 = Smallint; UInt32 = LongWord; Int32 = Longint; TYPE cmsUInt8Number = Uint8; cmsInt8Number = Int8; cmsUInt16Number = UInt16; cmsInt16Number = Int16; cmsUInt32Number = UInt32; cmsInt32Number = Int32; cmsInt64Number = Int64; cmsUInt64Number = UInt64; cmsFloat32Number = Single; cmsFloat64Number = Double; LPcmsUInt8Number = ^cmsUInt8Number; LPcmsInt8Number = ^cmsInt8Number; LPcmsUInt16Number = ^cmsUInt16Number; LPcmsInt16Number = ^cmsInt16Number; LPcmsUInt32Number = ^cmsUInt32Number; LPcmsInt32Number = ^cmsInt32Number; LPcmsInt64Number = ^cmsInt64Number; LPcmsUInt64Number = ^cmsUInt64Number; LPcmsFloat32Number = ^cmsFloat32Number; LPcmsFloat64Number = ^cmsFloat64Number; // Derivative types cmsSignature = cmsUInt32Number; cmsU8Fixed8Number = cmsUInt16Number; cmsS15Fixed16Number = cmsInt32Number; cmsU16Fixed16Number = cmsUInt32Number; // Boolean type, which will be using the native integer cmsBool = Boolean; CONST // Some common definitions cmsMAX_PATH = 256; // D50 XYZ normalized to Y=1.0 cmsD50X = 0.9642; cmsD50Y = 1.0; cmsD50Z = 0.8249; // V4 perceptual black cmsPERCEPTUAL_BLACK_X = 0.00336; cmsPERCEPTUAL_BLACK_Y = 0.0034731; cmsPERCEPTUAL_BLACK_Z = 0.00287; // Definitions in ICC spec cmsMagicNumber = $61637370; // 'acsp' lcmsSignature = $6c636d73; // 'lcms' TYPE // Base ICC type definitions cmsTagTypeSignature = ( cmsSigChromaticityType = $6368726D, // 'chrm' cmsSigColorantOrderType = $636C726F, // 'clro' cmsSigColorantTableType = $636C7274, // 'clrt' cmsSigCrdInfoType = $63726469, // 'crdi' cmsSigCurveType = $63757276, // 'curv' cmsSigDataType = $64617461, // 'data' cmsSigDictType = $64696374, // 'dict' cmsSigDateTimeType = $6474696D, // 'dtim' cmsSigDeviceSettingsType = $64657673, // 'devs' cmsSigLut16Type = $6d667432, // 'mft2' cmsSigLut8Type = $6d667431, // 'mft1' cmsSigLutAtoBType = $6d414220, // 'mAB ' cmsSigLutBtoAType = $6d424120, // 'mBA ' cmsSigMeasurementType = $6D656173, // 'meas' cmsSigMultiLocalizedUnicodeType = $6D6C7563, // 'mluc' cmsSigMultiProcessElementType = $6D706574, // 'mpet' cmsSigNamedColorType = $6E636f6C, // 'ncol' -- DEPRECATED! cmsSigNamedColor2Type = $6E636C32, // 'ncl2' cmsSigParametricCurveType = $70617261, // 'para' cmsSigProfileSequenceDescType = $70736571, // 'pseq' cmsSigProfileSequenceIdType = $70736964, // 'psid' cmsSigResponseCurveSet16Type = $72637332, // 'rcs2' cmsSigS15Fixed16ArrayType = $73663332, // 'sf32' cmsSigScreeningType = $7363726E, // 'scrn' cmsSigSignatureType = $73696720, // 'sig ' cmsSigTextType = $74657874, // 'text' cmsSigTextDescriptionType = $64657363, // 'desc' cmsSigU16Fixed16ArrayType = $75663332, // 'uf32' cmsSigUcrBgType = $62666420, // 'bfd ' cmsSigUInt16ArrayType = $75693136, // 'ui16' cmsSigUInt32ArrayType = $75693332, // 'ui32' cmsSigUInt64ArrayType = $75693634, // 'ui64' cmsSigUInt8ArrayType = $75693038, // 'ui08' cmsSigViewingConditionsType = $76696577, // 'view' cmsSigXYZType = $58595A20, // 'XYZ ' cmsSigVcgtType = $76636774 // 'vcgt' ); // Base ICC tag definitions cmsTagSignature = ( cmsSigAToB0Tag = $41324230, // 'A2B0' cmsSigAToB1Tag = $41324231, // 'A2B1' cmsSigAToB2Tag = $41324232, // 'A2B2' cmsSigBlueColorantTag = $6258595A, // 'bXYZ' cmsSigBlueMatrixColumnTag = $6258595A, // 'bXYZ' cmsSigBlueTRCTag = $62545243, // 'bTRC' cmsSigBToA0Tag = $42324130, // 'B2A0' cmsSigBToA1Tag = $42324131, // 'B2A1' cmsSigBToA2Tag = $42324132, // 'B2A2' cmsSigCalibrationDateTimeTag = $63616C74, // 'calt' cmsSigCharTargetTag = $74617267, // 'targ' cmsSigChromaticAdaptationTag = $63686164, // 'chad' cmsSigChromaticityTag = $6368726D, // 'chrm' cmsSigColorantOrderTag = $636C726F, // 'clro' cmsSigColorantTableTag = $636C7274, // 'clrt' cmsSigColorantTableOutTag = $636C6F74, // 'clot' cmsSigColorimetricIntentImageStateTag = $63696973, // 'ciis' cmsSigCopyrightTag = $63707274, // 'cprt' cmsSigCrdInfoTag = $63726469, // 'crdi' cmsSigDataTag = $64617461, // 'data' cmsSigDateTimeTag = $6474696D, // 'dtim' cmsSigDeviceMfgDescTag = $646D6E64, // 'dmnd' cmsSigDeviceModelDescTag = $646D6464, // 'dmdd' cmsSigDeviceSettingsTag = $64657673, // 'devs' cmsSigDToB0Tag = $44324230, // 'D2B0' cmsSigDToB1Tag = $44324231, // 'D2B1' cmsSigDToB2Tag = $44324232, // 'D2B2' cmsSigDToB3Tag = $44324233, // 'D2B3' cmsSigBToD0Tag = $42324430, // 'B2D0' cmsSigBToD1Tag = $42324431, // 'B2D1' cmsSigBToD2Tag = $42324432, // 'B2D2' cmsSigBToD3Tag = $42324433, // 'B2D3' cmsSigGamutTag = $67616D74, // 'gamt' cmsSigGrayTRCTag = $6b545243, // 'kTRC' cmsSigGreenColorantTag = $6758595A, // 'gXYZ' cmsSigGreenMatrixColumnTag = $6758595A, // 'gXYZ' cmsSigGreenTRCTag = $67545243, // 'gTRC' cmsSigLuminanceTag = $6C756d69, // 'lumi' cmsSigMeasurementTag = $6D656173, // 'meas' cmsSigMediaBlackPointTag = $626B7074, // 'bkpt' cmsSigMediaWhitePointTag = $77747074, // 'wtpt' cmsSigNamedColorTag = $6E636f6C, // 'ncol' // Deprecated by the ICC cmsSigNamedColor2Tag = $6E636C32, // 'ncl2' cmsSigOutputResponseTag = $72657370, // 'resp' cmsSigPerceptualRenderingIntentGamutTag = $72696730, // 'rig0' cmsSigPreview0Tag = $70726530, // 'pre0' cmsSigPreview1Tag = $70726531, // 'pre1' cmsSigPreview2Tag = $70726532, // 'pre2' cmsSigProfileDescriptionTag = $64657363, // 'desc' cmsSigProfileSequenceDescTag = $70736571, // 'pseq' cmsSigProfileSequenceIdTag = $70736964, // 'psid' cmsSigPs2CRD0Tag = $70736430, // 'psd0' cmsSigPs2CRD1Tag = $70736431, // 'psd1' cmsSigPs2CRD2Tag = $70736432, // 'psd2' cmsSigPs2CRD3Tag = $70736433, // 'psd3' cmsSigPs2CSATag = $70733273, // 'ps2s' cmsSigPs2RenderingIntentTag = $70733269, // 'ps2i' cmsSigRedColorantTag = $7258595A, // 'rXYZ' cmsSigRedMatrixColumnTag = $7258595A, // 'rXYZ' cmsSigRedTRCTag = $72545243, // 'rTRC' cmsSigSaturationRenderingIntentGamutTag = $72696732, // 'rig2' cmsSigScreeningDescTag = $73637264, // 'scrd' cmsSigScreeningTag = $7363726E, // 'scrn' cmsSigTechnologyTag = $74656368, // 'tech' cmsSigUcrBgTag = $62666420, // 'bfd ' cmsSigViewingCondDescTag = $76756564, // 'vued' cmsSigViewingConditionsTag = $76696577, // 'view' cmsSigVcgtTag = $76636774, // 'vcgt' cmsSigMetaTag = $6D657461 // 'meta' ); // ICC Technology tag cmsTechnologySignature = ( cmsSigDigitalCamera = $6463616D, // 'dcam' cmsSigFilmScanner = $6673636E, // 'fscn' cmsSigReflectiveScanner = $7273636E, // 'rscn' cmsSigInkJetPrinter = $696A6574, // 'ijet' cmsSigThermalWaxPrinter = $74776178, // 'twax' cmsSigElectrophotographicPrinter = $6570686F, // 'epho' cmsSigElectrostaticPrinter = $65737461, // 'esta' cmsSigDyeSublimationPrinter = $64737562, // 'dsub' cmsSigPhotographicPaperPrinter = $7270686F, // 'rpho' cmsSigFilmWriter = $6670726E, // 'fprn' cmsSigVideoMonitor = $7669646D, // 'vidm' cmsSigVideoCamera = $76696463, // 'vidc' cmsSigProjectionTelevision = $706A7476, // 'pjtv' cmsSigCRTDisplay = $43525420, // 'CRT ' cmsSigPMDisplay = $504D4420, // 'PMD ' cmsSigAMDisplay = $414D4420, // 'AMD ' cmsSigPhotoCD = $4B504344, // 'KPCD' cmsSigPhotoImageSetter = $696D6773, // 'imgs' cmsSigGravure = $67726176, // 'grav' cmsSigOffsetLithography = $6F666673, // 'offs' cmsSigSilkscreen = $73696C6B, // 'silk' cmsSigFlexography = $666C6578, // 'flex' cmsSigMotionPictureFilmScanner = $6D706673, // 'mpfs' cmsSigMotionPictureFilmRecorder = $6D706672, // 'mpfr' cmsSigDigitalMotionPictureCamera = $646D7063, // 'dmpc' cmsSigDigitalCinemaProjector = $64636A70 // 'dcpj' ); // ICC Color spaces cmsColorSpaceSignature = ( cmsSigXYZData = $58595A20, // 'XYZ ' cmsSigLabData = $4C616220, // 'Lab ' cmsSigLuvData = $4C757620, // 'Luv ' cmsSigYCbCrData = $59436272, // 'YCbr' cmsSigYxyData = $59787920, // 'Yxy ' cmsSigRgbData = $52474220, // 'RGB ' cmsSigGrayData = $47524159, // 'GRAY' cmsSigHsvData = $48535620, // 'HSV ' cmsSigHlsData = $484C5320, // 'HLS ' cmsSigCmykData = $434D594B, // 'CMYK' cmsSigCmyData = $434D5920, // 'CMY ' cmsSigMCH1Data = $4D434831, // 'MCH1' cmsSigMCH2Data = $4D434832, // 'MCH2' cmsSigMCH3Data = $4D434833, // 'MCH3' cmsSigMCH4Data = $4D434834, // 'MCH4' cmsSigMCH5Data = $4D434835, // 'MCH5' cmsSigMCH6Data = $4D434836, // 'MCH6' cmsSigMCH7Data = $4D434837, // 'MCH7' cmsSigMCH8Data = $4D434838, // 'MCH8' cmsSigMCH9Data = $4D434839, // 'MCH9' cmsSigMCHAData = $4D43483A, // 'MCHA' cmsSigMCHBData = $4D43483B, // 'MCHB' cmsSigMCHCData = $4D43483C, // 'MCHC' cmsSigMCHDData = $4D43483D, // 'MCHD' cmsSigMCHEData = $4D43483E, // 'MCHE' cmsSigMCHFData = $4D43483F, // 'MCHF' cmsSigNamedData = $6e6d636c, // 'nmcl' cmsSig1colorData = $31434C52, // '1CLR' cmsSig2colorData = $32434C52, // '2CLR' cmsSig3colorData = $33434C52, // '3CLR' cmsSig4colorData = $34434C52, // '4CLR' cmsSig5colorData = $35434C52, // '5CLR' cmsSig6colorData = $36434C52, // '6CLR' cmsSig7colorData = $37434C52, // '7CLR' cmsSig8colorData = $38434C52, // '8CLR' cmsSig9colorData = $39434C52, // '9CLR' cmsSig10colorData = $41434C52, // 'ACLR' cmsSig11colorData = $42434C52, // 'BCLR' cmsSig12colorData = $43434C52, // 'CCLR' cmsSig13colorData = $44434C52, // 'DCLR' cmsSig14colorData = $45434C52, // 'ECLR' cmsSig15colorData = $46434C52, // 'FCLR' cmsSigLuvKData = $4C75764B // 'LuvK' ); // ICC Profile Class cmsProfileClassSignature = ( cmsSigInputClass = $73636E72, // 'scnr' cmsSigDisplayClass = $6D6E7472, // 'mntr' cmsSigOutputClass = $70727472, // 'prtr' cmsSigLinkClass = $6C696E6B, // 'link' cmsSigAbstractClass = $61627374, // 'abst' cmsSigColorSpaceClass = $73706163, // 'spac' cmsSigNamedColorClass = $6e6d636c // 'nmcl' ); // ICC Platforms cmsPlatformSignature = ( cmsSigMacintosh = $4150504C, // 'APPL' cmsSigMicrosoft = $4D534654, // 'MSFT' cmsSigSolaris = $53554E57, // 'SUNW' cmsSigSGI = $53474920, // 'SGI ' cmsSigTaligent = $54474E54, // 'TGNT' cmsSigUnices = $2A6E6978 // '*nix' // From argyll -- Not official ); CONST // Reference gamut cmsSigPerceptualReferenceMediumGamut = $70726d67; //'prmg' // For cmsSigColorimetricIntentImageStateTag cmsSigSceneColorimetryEstimates = $73636F65; //'scoe' cmsSigSceneAppearanceEstimates = $73617065; //'sape' cmsSigFocalPlaneColorimetryEstimates = $66706365; //'fpce' cmsSigReflectionHardcopyOriginalColorimetry = $72686F63; //'rhoc' cmsSigReflectionPrintOutputColorimetry = $72706F63; //'rpoc' TYPE // Multi process elements types cmsStageSignature = ( cmsSigCurveSetElemType = $63767374, //'cvst' cmsSigMatrixElemType = $6D617466, //'matf' cmsSigCLutElemType = $636C7574, //'clut' cmsSigBAcsElemType = $62414353, // 'bACS' cmsSigEAcsElemType = $65414353, // 'eACS' // Custom from here, not in the ICC Spec cmsSigXYZ2LabElemType = $6C327820, // 'l2x ' cmsSigLab2XYZElemType = $78326C20, // 'x2l ' cmsSigNamedColorElemType = $6E636C20, // 'ncl ' cmsSigLabV2toV4 = $32203420, // '2 4 ' cmsSigLabV4toV2 = $34203220, // '4 2 ' // Identities cmsSigIdentityElemType = $69646E20 // 'idn ' ); // Types of CurveElements cmsCurveSegSignature = ( cmsSigFormulaCurveSeg = $70617266, // 'parf' cmsSigSampledCurveSeg = $73616D66, // 'samf' cmsSigSegmentedCurve = $63757266 // 'curf' ); CONST // Used in ResponseCurveType cmsSigStatusA = $53746141; //'StaA' cmsSigStatusE = $53746145; //'StaE' cmsSigStatusI = $53746149; //'StaI' cmsSigStatusT = $53746154; //'StaT' cmsSigStatusM = $5374614D; //'StaM' cmsSigDN = $444E2020; //'DN ' cmsSigDNP = $444E2050; //'DN P' cmsSigDNN = $444E4E20; //'DNN ' cmsSigDNNP = $444E4E50; //'DNNP' // Device attributes, currently defined values correspond to the low 4 bytes // of the 8 byte attribute quantity cmsReflective = 0; cmsTransparency = 1; cmsGlossy = 0; cmsMatte = 2; TYPE // Common structures in ICC tags cmsICCData = PACKED RECORD len : cmsUInt32Number; flag : cmsUInt32Number; data : Array [0..1] of cmsUInt8Number; END; // ICC date time cmsDateTimeNumber = PACKED RECORD year: cmsUInt16Number; month: cmsUInt16Number; day: cmsUInt16Number; hours: cmsUInt16Number; minutes: cmsUInt16Number; seconds: cmsUInt16Number; END; // ICC XYZ cmsEncodedXYZNumber = PACKED RECORD X: cmsS15Fixed16Number; Y: cmsS15Fixed16Number; Z: cmsS15Fixed16Number; END; // Profile ID as computed by MD5 algorithm cmsProfileID = PACKED RECORD CASE Integer OF 1: (ID8: Array[0..15] OF cmsUInt8Number); 2: (ID16: Array[0..7] OF cmsUInt16Number); 3: (ID32: Array[0..3] OF cmsUInt32Number); END; // ---------------------------------------------------------------------------------------------- // ICC profile internal base types. Strictly, shouldn't be declared in this unit, but maybe // somebody want to use this info for accessing profile header directly, so here it is. // Profile header -- it is 32-bit aligned, so no issues are expected on alignment cmsICCHeader = PACKED RECORD size: cmsUInt32Number; // Profile size in bytes cmmId: cmsSignature; // CMM for this profile version: cmsUInt32Number; // Format version number deviceClass: cmsProfileClassSignature; // Type of profile colorSpace: cmsColorSpaceSignature; // Color space of data pcs: cmsColorSpaceSignature; // PCS, XYZ or Lab only date: cmsDateTimeNumber; // Date profile was created magic: cmsSignature; // Magic Number to identify an ICC profile platform: cmsPlatformSignature; // Primary Platform flags: cmsUInt32Number; // Various bit settings manufacturer: cmsSignature; // Device manufacturer model: cmsUInt32Number; // Device model number attributes: cmsUInt64Number; // Device attributes renderingIntent:cmsUInt32Number; // Rendering intent illuminant: cmsEncodedXYZNumber; // Profile illuminant creator: cmsSignature; // Profile creator profileID: cmsProfileID; // Profile ID using MD5 reserved: array [0..27] of cmsInt8Number; // Reserved for future use END; // ICC base tag cmsTagBase = PACKED RECORD sig: cmsTagTypeSignature; reserved: array[0..3] of cmsInt8Number; END; // A tag entry in directory cmsTagEntry = PACKED RECORD sig: cmsTagSignature; // The tag signature offset: cmsUInt32Number; // Start of tag size: cmsUInt32Number; // Size in bytes END; cmsContext = Pointer; // Context identifier for multithreaded environments cmsHANDLE = Pointer; // Generic handle cmsHPROFILE = Pointer; // Opaque typedefs to hide internals cmsHTRANSFORM = Pointer; CONST cmsMAXCHANNELS = 16; // Maximum number of channels in ICC profiles // Format of pixel is defined by one cmsUInt32Number, using bit fields as follows // // A O TTTTT U Y F P X S EEE CCCC BBB // // A: Floating point -- With this flag we can differentiate 16 bits as float and as int // O: Optimized -- previous optimization already returns the final 8-bit value // T: Pixeltype // F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla) // P: Planar? 0=Chunky, 1=Planar // X: swap 16 bps endianness? // S: Do swap? ie, BGR, KYMC // E: Extra samples // C: Channels (Samples per pixel) // B: bytes per sample // Y: Swap first - changes ABGR to BGRA and KCMY to CMYK FUNCTION FLOAT_SH(a: cmsUInt32Number): cmsUInt32Number; FUNCTION OPTIMIZED_SH(s: cmsUInt32Number): cmsUInt32Number; FUNCTION COLORSPACE_SH(s: cmsUInt32Number):cmsUInt32Number; FUNCTION SWAPFIRST_SH(s: cmsUInt32Number):cmsUInt32Number; FUNCTION FLAVOR_SH(s: cmsUInt32Number):cmsUInt32Number; FUNCTION PLANAR_SH(p: cmsUInt32Number):cmsUInt32Number; FUNCTION ENDIAN16_SH(e: cmsUInt32Number):cmsUInt32Number; FUNCTION DOSWAP_SH(e: cmsUInt32Number):cmsUInt32Number; FUNCTION EXTRA_SH(e: cmsUInt32Number):cmsUInt32Number; FUNCTION CHANNELS_SH(c: cmsUInt32Number):cmsUInt32Number; FUNCTION BYTES_SH(b: cmsUInt32Number):cmsUInt32Number; FUNCTION T_FLOAT(a: cmsUInt32Number): cmsUInt32Number; FUNCTION T_OPTIMIZED(o: cmsUInt32Number): cmsUInt32Number; FUNCTION T_COLORSPACE(s: cmsUInt32Number): cmsUInt32Number; FUNCTION T_SWAPFIRST(s: cmsUInt32Number): cmsUInt32Number; FUNCTION T_FLAVOR(s: cmsUInt32Number): cmsUInt32Number; FUNCTION T_PLANAR(p: cmsUInt32Number): cmsUInt32Number; FUNCTION T_ENDIAN16(e: cmsUInt32Number): cmsUInt32Number; FUNCTION T_DOSWAP(e: cmsUInt32Number): cmsUInt32Number; FUNCTION T_EXTRA(e: cmsUInt32Number): cmsUInt32Number; FUNCTION T_CHANNELS(c: cmsUInt32Number): cmsUInt32Number; FUNCTION T_BYTES(b: cmsUInt32Number): cmsUInt32Number; CONST // Pixel types PT_ANY = 0; // Don't check colorspace // 1 & 2 are reserved PT_GRAY = 3; PT_RGB = 4; PT_CMY = 5; PT_CMYK = 6; PT_YCbCr = 7; PT_YUV = 8; // Lu'v' PT_XYZ = 9; PT_Lab = 10; PT_YUVK = 11; // Lu'v'K PT_HSV = 12; PT_HLS = 13; PT_Yxy = 14; PT_MCH1 = 15; PT_MCH2 = 16; PT_MCH3 = 17; PT_MCH4 = 18; PT_MCH5 = 19; PT_MCH6 = 20; PT_MCH7 = 21; PT_MCH8 = 22; PT_MCH9 = 23; PT_MCH10 = 24; PT_MCH11 = 25; PT_MCH12 = 26; PT_MCH13 = 27; PT_MCH14 = 28; PT_MCH15 = 29; PT_LabV2 = 30; // Identical to PT_Lab, but using the V2 old encoding // Format descriptors TYPE_GRAY_8 = $030009; TYPE_GRAY_8_REV = $032009; TYPE_GRAY_16 = $03000a; TYPE_GRAY_16_REV = $03200a; TYPE_GRAY_16_SE = $03080a; TYPE_GRAYA_8 = $030089; TYPE_GRAYA_16 = $03008a; TYPE_GRAYA_16_SE = $03088a; TYPE_GRAYA_8_PLANAR = $031089; TYPE_GRAYA_16_PLANAR = $03108a; TYPE_RGB_8 = $040019; TYPE_RGB_8_PLANAR = $041019; TYPE_BGR_8 = $040419; TYPE_BGR_8_PLANAR = $041419; TYPE_RGB_16 = $04001a; TYPE_RGB_16_PLANAR = $04101a; TYPE_RGB_16_SE = $04081a; TYPE_BGR_16 = $04041a; TYPE_BGR_16_PLANAR = $04141a; TYPE_BGR_16_SE = $040c1a; TYPE_RGBA_8 = $040099; TYPE_RGBA_8_PLANAR = $041099; TYPE_ARGB_8_PLANAR = $045099; TYPE_ABGR_8_PLANAR = $041499; TYPE_BGRA_8_PLANAR = $045499; TYPE_RGBA_16 = $04009a; TYPE_RGBA_16_PLANAR = $04109a; TYPE_RGBA_16_SE = $04089a; TYPE_ARGB_8 = $044099; TYPE_ARGB_16 = $04409a; TYPE_ABGR_8 = $040499; TYPE_ABGR_16 = $04049a; TYPE_ABGR_16_PLANAR = $04149a; TYPE_ABGR_16_SE = $040c9a; TYPE_BGRA_8 = $044499; TYPE_BGRA_16 = $04449a; TYPE_BGRA_16_SE = $04489a; TYPE_CMY_8 = $050019; TYPE_CMY_8_PLANAR = $051019; TYPE_CMY_16 = $05001a; TYPE_CMY_16_PLANAR = $05101a; TYPE_CMY_16_SE = $05081a; TYPE_CMYK_8 = $060021; TYPE_CMYKA_8 = $0600a1; TYPE_CMYK_8_REV = $062021; TYPE_YUVK_8 = $062021; TYPE_CMYK_8_PLANAR = $061021; TYPE_CMYK_16 = $060022; TYPE_CMYK_16_REV = $062022; TYPE_YUVK_16 = $062022; TYPE_CMYK_16_PLANAR = $061022; TYPE_CMYK_16_SE = $060822; TYPE_KYMC_8 = $060421; TYPE_KYMC_16 = $060422; TYPE_KYMC_16_SE = $060c22; TYPE_KCMY_8 = $064021; TYPE_KCMY_8_REV = $066021; TYPE_KCMY_16 = $064022; TYPE_KCMY_16_REV = $066022; TYPE_KCMY_16_SE = $064822; TYPE_CMYK5_8 = $130029; TYPE_CMYK5_16 = $13002a; TYPE_CMYK5_16_SE = $13082a; TYPE_KYMC5_8 = $130429; TYPE_KYMC5_16 = $13042a; TYPE_KYMC5_16_SE = $130c2a; TYPE_CMYK6_8 = $140031; TYPE_CMYK6_8_PLANAR = $141031; TYPE_CMYK6_16 = $140032; TYPE_CMYK6_16_PLANAR = $141032; TYPE_CMYK6_16_SE = $140832; TYPE_CMYK7_8 = $150039; TYPE_CMYK7_16 = $15003a; TYPE_CMYK7_16_SE = $15083a; TYPE_KYMC7_8 = $150439; TYPE_KYMC7_16 = $15043a; TYPE_KYMC7_16_SE = $150c3a; TYPE_CMYK8_8 = $160041; TYPE_CMYK8_16 = $160042; TYPE_CMYK8_16_SE = $160842; TYPE_KYMC8_8 = $160441; TYPE_KYMC8_16 = $160442; TYPE_KYMC8_16_SE = $160c42; TYPE_CMYK9_8 = $170049; TYPE_CMYK9_16 = $17004a; TYPE_CMYK9_16_SE = $17084a; TYPE_KYMC9_8 = $170449; TYPE_KYMC9_16 = $17044a; TYPE_KYMC9_16_SE = $170c4a; TYPE_CMYK10_8 = $180051; TYPE_CMYK10_16 = $180052; TYPE_CMYK10_16_SE = $180852; TYPE_KYMC10_8 = $180451; TYPE_KYMC10_16 = $180452; TYPE_KYMC10_16_SE = $180c52; TYPE_CMYK11_8 = $190059; TYPE_CMYK11_16 = $19005a; TYPE_CMYK11_16_SE = $19085a; TYPE_KYMC11_8 = $190459; TYPE_KYMC11_16 = $19045a; TYPE_KYMC11_16_SE = $190c5a; TYPE_CMYK12_8 = $1a0061; TYPE_CMYK12_16 = $1a0062; TYPE_CMYK12_16_SE = $1a0862; TYPE_KYMC12_8 = $1a0461; TYPE_KYMC12_16 = $1a0462; TYPE_KYMC12_16_SE = $1a0c62; TYPE_XYZ_16 = $09001a; TYPE_Lab_8 = $0a0019; TYPE_ALab_8 = $0a0499; TYPE_Lab_16 = $0a001a; TYPE_Yxy_16 = $0e001a; TYPE_YCbCr_8 = $070019; TYPE_YCbCr_8_PLANAR = $071019; TYPE_YCbCr_16 = $07001a; TYPE_YCbCr_16_PLANAR = $07101a; TYPE_YCbCr_16_SE = $07081a; TYPE_YUV_8 = $080019; TYPE_YUV_8_PLANAR = $081019; TYPE_YUV_16 = $08001a; TYPE_YUV_16_PLANAR = $08101a; TYPE_YUV_16_SE = $08081a; TYPE_HLS_8 = $0d0019; TYPE_HLS_8_PLANAR = $0d1019; TYPE_HLS_16 = $0d001a; TYPE_HLS_16_PLANAR = $0d101a; TYPE_HLS_16_SE = $0d081a; TYPE_HSV_8 = $0c0019; TYPE_HSV_8_PLANAR = $0c1019; TYPE_HSV_16 = $0c001a; TYPE_HSV_16_PLANAR = $0c101a; TYPE_HSV_16_SE = $0c081a; TYPE_NAMED_COLOR_INDEX = $000A; TYPE_XYZ_FLT = $49001c; TYPE_Lab_FLT = $4a001c; TYPE_GRAY_FLT = $43000c; TYPE_RGB_FLT = $44001c; TYPE_CMYK_FLT = $460024; TYPE_XYZA_FLT = $49009c; TYPE_LabA_FLT = $4a009c; TYPE_RGBA_FLT = $44009c; TYPE_XYZ_DBL = $490018; TYPE_Lab_DBL = $4a0018; TYPE_GRAY_DBL = $430008; TYPE_RGB_DBL = $440018; TYPE_CMYK_DBL = $460020; TYPE_LabV2_8 = $1e0019; TYPE_ALabV2_8 = $1e0499; TYPE_LabV2_16 = $1e001a; TYPE_GRAY_HALF_FLT = $43000a; TYPE_RGB_HALF_FLT = $44001a; TYPE_RGBA_HALF_FLT = $44009a; TYPE_CMYK_HALF_FLT = $460022; TYPE_ARGB_HALF_FLT = $44409a; TYPE_BGR_HALF_FLT = $44041a; TYPE_BGRA_HALF_FLT = $44449a; TYPE_ABGR_HALF_FLT = $44041a; TYPE // Colorimetric spaces cmsCIEXYZ = PACKED RECORD X, Y, Z : cmsFloat64Number; END; LPcmsCIEXYZ = ^cmsCIEXYZ; cmsCIExyY = PACKED RECORD x, y, YY : cmsFloat64Number END; LPcmsCIExyY = ^cmsCIEXYY; cmsCIELab = PACKED RECORD L, a, b: cmsFloat64Number END; LPcmsCIELab = ^cmsCIELab; cmsCIELCh = PACKED RECORD L, C, h : cmsFloat64Number END; LPcmsCIELCh = ^cmsCIELCh; cmsJCh = PACKED RECORD J, C, h : cmsFloat64Number END; LPcmsJCh = ^cmsJCH; cmsCIEXYZTRIPLE = PACKED RECORD Red, Green, Blue : cmsCIEXYZ END; LPcmsCIEXYZTRIPLE = ^cmsCIEXYZTRIPLE; cmsCIExyYTRIPLE = PACKED RECORD Red, Green, Blue : cmsCIExyY END; LPcmsCIExyYTRIPLE = ^cmsCIExyYTRIPLE; CONST // Illuminant types for structs below cmsILLUMINANT_TYPE_UNKNOWN = $0000000; cmsILLUMINANT_TYPE_D50 = $0000001; cmsILLUMINANT_TYPE_D65 = $0000002; cmsILLUMINANT_TYPE_D93 = $0000003; cmsILLUMINANT_TYPE_F2 = $0000004; cmsILLUMINANT_TYPE_D55 = $0000005; cmsILLUMINANT_TYPE_A = $0000006; cmsILLUMINANT_TYPE_E = $0000007; cmsILLUMINANT_TYPE_F8 = $0000008; TYPE cmsICCMeasurementConditions = PACKED RECORD Observer: cmsUInt32Number; // 0 = unknown, 1=CIE 1931, 2=CIE 1964 Backing: cmsCIEXYZ; // Value of backing Geometry: cmsUInt32Number; // 0=unknown, 1=45/0, 0/45 2=0d, d/0 Flare: cmsFloat64Number; // 0..1.0 IlluminantType: cmsUInt32Number; END; cmsICCViewingConditions = PACKED RECORD IlluminantXYZ: cmsCIEXYZ; // Not the same struct as CAM02, SurroundXYZ: cmsCIEXYZ; // This is for storing the tag IlluminantType: cmsUInt32Number; // viewing condition END; // Context -------------------------------------------------------------------------------------------------------------- FUNCTION cmsCreateContext(Plugin : Pointer; UserData : Pointer) : cmsContext; StdCall; PROCEDURE cmsDeleteContext(ContextID: cmsContext); StdCall; FUNCTION cmsDupContext(ContextID: cmsContext; NewUserData: Pointer): cmsContext; StdCall; FUNCTION cmsGetContextUserData(ContextID: cmsContext): Pointer; StdCall; // Plug-In registering --------------------------------------------------------------------------------------------------- FUNCTION cmsPlugin(Plugin: Pointer): cmsBool; StdCall; PROCEDURE cmsUnregisterPlugins; StdCall; // Error logging ---------------------------------------------------------------------------------------------------------- // There is no error handling at all. When a function fails, it returns proper value. // For example, all create functions does return NULL on failure. Other may return FALSE. // It may be interesting, for the developer, to know why the function is failing. // for that reason, lcms2 does offer a logging function. This function will get // an ENGLISH string with some clues on what is going wrong. You can show this // info to the end user if you wish, or just create some sort of log on disk. // The logging function should NOT terminate the program, as this obviously can leave // unfreed resources. It is the programmer's responsibility to check each function // return code to make sure it didn't fail. CONST cmsERROR_UNDEFINED = 0; cmsERROR_FILE = 1; cmsERROR_RANGE = 2; cmsERROR_INTERNAL = 3; cmsERROR_NULL = 4; cmsERROR_READ = 5; cmsERROR_SEEK = 6; cmsERROR_WRITE = 7; cmsERROR_UNKNOWN_EXTENSION = 8; cmsERROR_COLORSPACE_CHECK = 9; cmsERROR_ALREADY_DEFINED = 10; cmsERROR_BAD_SIGNATURE = 11; cmsERROR_CORRUPTION_DETECTED = 12; cmsERROR_NOT_SUITABLE = 13; // Error logger is called with the ContextID when a message is raised. This gives the // chance to know which thread is responsible of the warning and any environment associated // with it. Non-multithreading applications may safely ignore this parameter. // Note that under certain special circumstances, ContextID may be NULL. TYPE cmsLogErrorHandlerFunction = PROCEDURE( ContextID: cmsContext; ErrorCode: cmsUInt32Number; Text: PAnsiChar); CDecl; // Allows user to set any specific logger PROCEDURE cmsSetLogErrorHandler(Fn: cmsLogErrorHandlerFunction); StdCall; // Conversions -------------------------------------------------------------------------------------------------------------- // Returns pointers to constant structs FUNCTION cmsD50_XYZ: LPcmsCIEXYZ; StdCall; FUNCTION cmsD50_xyY: LPcmsCIExyY; StdCall; // Colorimetric space conversions PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); StdCall; PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); StdCall; PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); StdCall; PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); StdCall; PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); StdCall; PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); StdCall; // Encoding /Decoding on PCS PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); StdCall; PROCEDURE cmsLabEncoded2FloatV2(Lab: LPcmsCIELab; wLab: Pointer); StdCall; PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); StdCall; PROCEDURE cmsFloat2LabEncodedV2(wLab: Pointer; Lab: LPcmsCIELab); StdCall; PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); StdCall; PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); StdCall; // DeltaE metrics FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall; // Temperature <-> Chromaticity (Black body) FUNCTION cmsWhitePointFromTemp(var WhitePoint: cmsCIExyY; TempK: cmsFloat64Number) : cmsBool; StdCall; FUNCTION cmsTempFromWhitePoint(var TeampK: cmsFloat64Number; var WhitePoint: cmsCIExyY) : cmsBool; StdCall; // Chromatic adaptation FUNCTION cmsAdaptToIlluminant(Result: LPcmsCIEXYZ; SourceWhitePt: LPcmsCIEXYZ; Illuminant: LPcmsCIEXYZ; Value: LPcmsCIEXYZ): cmsBool; StdCall; // CIECAM02 --------------------------------------------------------------------------------------------------- // Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing // conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag // cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions. CONST AVG_SURROUND = 1; DIM_SURROUND = 2; DARK_SURROUND = 3; CUTSHEET_SURROUND = 4; D_CALCULATE = -1; TYPE cmsViewingConditions = PACKED RECORD WhitePoint: cmsCIEXYZ; Yb : cmsFloat64Number; La : cmsFloat64Number; surround : Integer; D_value : cmsFloat64Number END; LPcmsViewingConditions = ^cmsViewingConditions; FUNCTION cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall; PROCEDURE cmsCIECAM02Done(hModel : Pointer); StdCall; PROCEDURE cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall; PROCEDURE cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); StdCall; // Tone curves ----------------------------------------------------------------------------------------- // This describes a curve segment. For a table of supported types, see the manual. User can increase the number of // available types by using a proper plug-in. Parametric segments allow 10 parameters at most TYPE cmsCurveSegment = PACKED RECORD x0, x1: cmsFloat32Number; // Domain; for x0 < x <= x1 PType: cmsInt32Number; // Parametric type, Type == 0 means sampled segment. Negative values are reserved Params: array [0..9] of cmsFloat64Number; // Parameters if Type != 0 nGridPoints: cmsUInt32Number; // Number of grid points if Type == 0 SampledPoints: LPcmsFloat32Number; // Points to an array of floats if Type == 0 END; LPcmsToneCurve = Pointer; LPcmsCurveSegmentArray = ^cmsCurveSegmentArray; cmsCurveSegmentArray = array[0..0] of cmsCurveSegment; LPcmsFloat64NumberArray = ^cmsFloat64NumberArray; cmsFloat64NumberArray = array[0..0] of cmsFloat64Number; LPcmsUInt16NumberArray = ^cmsUInt16NumberArray; cmsUInt16NumberArray = array[0..0] of cmsUInt16Number; LPcmsFloat32NumberArray = ^cmsFloat32NumberArray; cmsFloat32NumberArray = array[0..0] of cmsFloat32Number; LPLPcmsToneCurveArray = ^LPcmsToneCurveArray; LPcmsToneCurveArray = array[0..0] of LPcmsToneCurve; LPcmsUInt32NumberArray = ^cmsUInt32NumberArray; cmsUInt32NumberArray = array[0..0] of cmsUInt32Number; FUNCTION cmsBuildSegmentedToneCurve(ContextID: cmsContext; nSegments: cmsInt32Number; Segments: LPcmsCurveSegmentArray): LPcmsToneCurve; StdCall; FUNCTION cmsBuildParametricToneCurve(ContextID: cmsContext; CType: cmsInt32Number; Params: LPcmsFloat64NumberArray): LPcmsToneCurve; StdCall; FUNCTION cmsBuildGamma(ContextID: cmsContext; Gamma: cmsFloat64Number): LPcmsToneCurve; StdCall; FUNCTION cmsBuildTabulatedToneCurve16(ContextID: cmsContext; nEntries: cmsInt32Number; values: LPcmsUInt16NumberArray): LPcmsToneCurve; StdCall; FUNCTION cmsBuildTabulatedToneCurveFloat(ContextID: cmsContext; nEntries: cmsUInt32Number; values: LPcmsFloat32NumberArray): LPcmsToneCurve; StdCall; PROCEDURE cmsFreeToneCurve(Curve: LPcmsToneCurve); StdCall; PROCEDURE cmsFreeToneCurveTriple(Curve: LPLPcmsToneCurveArray); StdCall; FUNCTION cmsDupToneCurve(Src: LPcmsToneCurve): LPcmsToneCurve; StdCall; FUNCTION cmsReverseToneCurve(InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; FUNCTION cmsReverseToneCurveEx(nResultSamples: cmsInt32Number; InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; FUNCTION cmsJoinToneCurve(ContextID: cmsContext; X, Y: LPcmsToneCurve; nPoints: cmsUInt32Number ): LPcmsToneCurve; StdCall; FUNCTION cmsSmoothToneCurve(Tab: LPcmsToneCurve; lambda: cmsFloat64Number): cmsBool; StdCall; FUNCTION cmsEvalToneCurveFloat(Curve: LPcmsToneCurve; v: cmsFloat32Number):cmsFloat32Number; StdCall; FUNCTION cmsEvalToneCurve16(Curve: LPcmsToneCurve; v:cmsUInt16Number):cmsUInt16Number; StdCall; FUNCTION cmsIsToneCurveMultisegment(InGamma: LPcmsToneCurve):cmsBool; StdCall; FUNCTION cmsIsToneCurveLinear(Curve: LPcmsToneCurve):cmsBool; StdCall; FUNCTION cmsIsToneCurveMonotonic(t: LPcmsToneCurve):cmsBool; StdCall; FUNCTION cmsIsToneCurveDescending(t: LPcmsToneCurve):cmsBool; StdCall; FUNCTION cmsGetToneCurveParametricType(t: LPcmsToneCurve):cmsInt32Number; StdCall; FUNCTION cmsEstimateGamma(t: LPcmsToneCurve; Precision:cmsFloat64Number):cmsFloat64Number; StdCall; FUNCTION cmsGetToneCurveEstimatedTableEntries(t: LPcmsToneCurve): cmsUInt32Number; StdCall; FUNCTION cmsGetToneCurveEstimatedTable(t: LPcmsToneCurve): LPcmsUInt16Number; StdCall; // Implements pipelines of multi-processing elements ------------------------------------------------------------- TYPE LPcmsPipeline = Pointer; LPcmsStage = Pointer; LPLPcmsStage = ^LPcmsStage; // Those are hi-level pipelines FUNCTION cmsPipelineAlloc(ContextID: cmsContext; InputChannels, OutputChannels: cmsUInt32Number): LPcmsPipeline; StdCall; PROCEDURE cmsPipelineFree(lut: LPcmsPipeline); StdCall; FUNCTION cmsPipelineDup(Orig: LPcmsPipeline): LPcmsPipeline; StdCall; FUNCTION cmsGetPipelineContextID(lut: LPcmsPipeline) : cmsContext; StdCall; FUNCTION cmsPipelineInputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; FUNCTION cmsPipelineOutputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; FUNCTION cmsPipelineStageCount(lut: LPcmsPipeline): cmsUInt32Number; StdCall; FUNCTION cmsPipelineGetPtrToFirstStage(lut: LPcmsPipeline): LPcmsStage; StdCall; FUNCTION cmsPipelineGetPtrToLastStage(lut: LPcmsPipeline): LPcmsStage; StdCall; PROCEDURE cmsPipelineEval16(Inv, Outv: LPcmsUInt16NumberArray; lut: LPcmsPipeline); StdCall; PROCEDURE cmsPipelineEvalFloat(Inv, Outv: LPcmsFloat32NumberArray; lut: LPcmsPipeline); StdCall; FUNCTION cmsPipelineEvalReverseFloat(Target, Result, Hint: LPcmsFloat32NumberArray; lut: LPcmsPipeline): cmsBool; StdCall; FUNCTION cmsPipelineCat(l1, l2: LPcmsPipeline): cmsBool; StdCall; FUNCTION cmsPipelineSetSaveAs8bitsFlag(lut: LPcmsPipeline; On: cmsBool): cmsBool; StdCall; // Where to place/locate the stages in the pipeline chain TYPE cmsStageLoc = (cmsAT_BEGIN = 0, cmsAT_END = 1 ); PROCEDURE cmsPipelineInsertStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPcmsStage); StdCall; PROCEDURE cmsPipelineUnlinkStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPLPcmsStage); StdCall; // This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements // that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and // then a list of expected types followed with a list of double pointers to Stage elements. If // the function founds a match with current pipeline, it fills the pointers and returns TRUE // if not, returns FALSE without touching anything. // FUNCTION cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, n: cmsUInt32Number, ...): cmsBool; StdCall; // Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode // matrices with far more precision that CLUTS FUNCTION cmsStageAllocIdentity(ContextID: cmsContext; nChannels: cmsUInt32Number): LPcmsStage; StdCall; FUNCTION cmsStageAllocToneCurves(ContextID: cmsContext; nChannels: cmsUInt32Number; Curves: LPLPcmsToneCurveArray): LPcmsStage; StdCall; FUNCTION cmsStageAllocMatrix(ContextID: cmsContext; Rows, Cols: cmsUInt32Number; Matrix, Offset: LPcmsFloat64NumberArray): LPcmsStage; StdCall; FUNCTION cmsStageAllocCLut16bit(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; FUNCTION cmsStageAllocCLutFloat(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; FUNCTION cmsStageAllocCLut16bitGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; FUNCTION cmsStageAllocCLutFloatGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; FUNCTION cmsStageDup(mpe: LPcmsStage): LPcmsStage; StdCall; PROCEDURE cmsStageFree(mpe: LPcmsStage); StdCall; FUNCTION cmsStageNext(mpe: LPcmsStage): LPcmsStage; StdCall; FUNCTION cmsStageInputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; FUNCTION cmsStageOutputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; FUNCTION cmsStageType(mpe: LPcmsStage): cmsStageSignature; StdCall; FUNCTION cmsStageData(mpe: LPcmsStage): Pointer; StdCall; // Sampling Type cmsSAMPLER16 = FUNCTION (Inp, Outp: LPcmsUInt16NumberArray; Cargo: Pointer): cmsInt32Number; CDecl; cmsSAMPLERFLOAT = FUNCTION (Inp, Outp: LPcmsFloat32NumberArray; Cargo: Pointer): cmsInt32Number; CDecl; // Use this flag to prevent changes being written to destination Const SAMPLER_INSPECT = $01000000; // For CLUT only FUNCTION cmsStageSampleCLut16bit(mpe: LPcmsStage; Sampler: cmsSAMPLER16; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; FUNCTION cmsStageSampleCLutFloat(mpe: LPcmsStage; Sampler: cmsSAMPLERFLOAT; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; // Slicers FUNCTION cmsSliceSpace16(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; Sampler: cmsSAMPLER16; Cargo: Pointer): cmsBool; StdCall; FUNCTION cmsSliceSpaceFloat(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; Sampler: cmsSAMPLERFLOAT; Cargo: Pointer): cmsBool; StdCall; // Multilocalized Unicode management --------------------------------------------------------------------------------------- Type LPcmsMLU = Pointer; Const cmsNoLanguage = #0#0#0; cmsNoCountry = #0#0#0; FUNCTION cmsMLUalloc(ContextID: cmsContext; nItems: cmsUInt32Number): LPcmsMLU; StdCall; PROCEDURE cmsMLUfree(mlu: LPcmsMLU); StdCall; FUNCTION cmsMLUdup(mlu: LPcmsMLU): LPcmsMLU; StdCall; FUNCTION cmsMLUsetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode, ASCIIString: PAnsiChar): cmsBool; StdCall; FUNCTION cmsMLUsetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; WideString: PWChar): cmsBool; StdCall; FUNCTION cmsMLUgetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; FUNCTION cmsMLUgetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; FUNCTION cmsMLUgetTranslation(mlu: LPcmsMLU; LanguageCode, CountryCode, ObtainedLanguage, ObtainedCountry: PAnsiChar): cmsBool; StdCall; // Undercolorremoval & black generation ------------------------------------------------------------------------------------- Type cmsUcrBg = PACKED RECORD Ucr, Bg: LPcmsToneCurve; Desc: LPcmsMLU; END; // Screening ---------------------------------------------------------------------------------------------------------------- Const cmsPRINTER_DEFAULT_SCREENS = $0001; cmsFREQUENCE_UNITS_LINES_CM = $0000; cmsFREQUENCE_UNITS_LINES_INCH = $0002; cmsSPOT_UNKNOWN = 0; cmsSPOT_PRINTER_DEFAULT = 1; cmsSPOT_ROUND = 2; cmsSPOT_DIAMOND = 3; cmsSPOT_ELLIPSE = 4; cmsSPOT_LINE = 5; cmsSPOT_SQUARE = 6; cmsSPOT_CROSS = 7; Type cmsScreeningChannel = PACKED RECORD Frequency, ScreenAngle: cmsFloat64Number; SpotShape: cmsUInt32Number; END; cmsScreening = PACKED RECORD Flag, nChannels : cmsUInt32Number; Channels: Array [0..cmsMAXCHANNELS-1] OF cmsScreeningChannel; END; // Named color ----------------------------------------------------------------------------------------------------------------- LPcmsNAMEDCOLORLIST = Pointer; FUNCTION cmsAllocNamedColorList(ContextID: cmsContext; n, ColorantCount :cmsUInt32Number; Prefix, Suffix: PAnsiChar): LPcmsNAMEDCOLORLIST; StdCall; PROCEDURE cmsFreeNamedColorList(v: LPcmsNAMEDCOLORLIST); StdCall; FUNCTION cmsDupNamedColorList(v: LPcmsNAMEDCOLORLIST): LPcmsNAMEDCOLORLIST; StdCall; FUNCTION cmsAppendNamedColor(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar; PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; FUNCTION cmsNamedColorCount(v: LPcmsNAMEDCOLORLIST): cmsUInt32Number; StdCall; FUNCTION cmsNamedColorIndex(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar): cmsInt32Number; StdCall; FUNCTION cmsNamedColorInfo(v: LPcmsNAMEDCOLORLIST; nColor : cmsUInt32Number; Name,Prefix, Suffix : PAnsiChar; PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; // Retrieve named color list from transform FUNCTION cmsGetNamedColorList(xform: cmsHTRANSFORM ): LPcmsNAMEDCOLORLIST; StdCall; // Profile sequence ----------------------------------------------------------------------------------------------------- Type // Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others // come from Profile Sequence Identifier Tag cmsPSEQDESC = PACKED RECORD deviceMfg, deviceModel: cmsSignature; attributes: cmsUInt64Number; technology: cmsTechnologySignature; ProfileID: cmsProfileID; Manufacturer, Model, Description : LPcmsMLU; END; LPcmsSEQDESC = ^cmsPSEQDESC; cmsSEQ = PACKED RECORD n: cmsUInt32Number; ContextID: cmsContext; seq: LPcmsSEQDESC; END; LPcmsSEQ = ^cmsSEQ; FUNCTION cmsAllocProfileSequenceDescription(ContextID: cmsContext; n: cmsUInt32Number):LPcmsSEQ; StdCall; FUNCTION cmsDupProfileSequenceDescription(pseq: LPcmsSEQ):LPcmsSEQ; StdCall; PROCEDURE cmsFreeProfileSequenceDescription(pseq: LPcmsSEQ); StdCall; // Dictionaries -------------------------------------------------------------------------------------------------------- TYPE LPcmsDICTentry = ^cmsDICTentry; cmsDICTentry = PACKED RECORD Next: LPcmsDICTentry; DisplayName, DisplayValue: LPcmsMLU; Name, Value : PWChar; END; FUNCTION cmsDictAlloc(ContextID: cmsContext): cmsHANDLE; StdCall; PROCEDURE cmsDictFree(hDict: cmsHANDLE); StdCall; FUNCTION cmsDictDup(hDict: cmsHANDLE): cmsHANDLE; StdCall; FUNCTION cmsDictAddEntry(hDict: cmsHANDLE; Name, Value: PWChar; DisplayName, DisplayValue : LPcmsMLU): cmsBool; StdCall; FUNCTION cmsDictGetEntryList(hDict: cmsHANDLE): LPcmsDICTentry; StdCall; FUNCTION cmsDictNextEntry(e : LPcmsDICTentry): LPcmsDICTentry; StdCall; // Access to Profile data ---------------------------------------------------------------------------------------------- FUNCTION cmsCreateProfilePlaceholder(ContextID: cmsContext): cmsHPROFILE; StdCall; FUNCTION cmsGetProfileContextID(hProfile: cmsHPROFILE):cmsContext; StdCall; FUNCTION cmsGetTagCount(hProfile: cmsHPROFILE): cmsInt32Number; StdCall; FUNCTION cmsGetTagSignature(hProfile: cmsHPROFILE; n: cmsUInt32Number): cmsTagSignature; StdCall; FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): cmsBool; StdCall; // Read and write pre-formatted data FUNCTION cmsReadTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): Pointer; StdCall; FUNCTION cmsWriteTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer): cmsBool; StdCall; FUNCTION cmsLinkTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; dest: cmsTagSignature): cmsBool; StdCall; FUNCTION cmsTagLinkedTo(hProfile: cmsHPROFILE; sig: cmsTagSignature):cmsTagSignature; StdCall; // Read and write raw data FUNCTION cmsReadRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; Buffer: Pointer; BufferSize: cmsUInt32Number): cmsInt32Number; StdCall; FUNCTION cmsWriteRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer; Size: cmsUInt32Number): cmsBool; StdCall; // Access header data Const cmsEmbeddedProfileFalse = $00000000; cmsEmbeddedProfileTrue = $00000001; cmsUseAnywhere = $00000000; cmsUseWithEmbeddedDataOnly = $00000002; FUNCTION cmsGetHeaderFlags(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; PROCEDURE cmsGetHeaderAttributes(hProfile: cmsHPROFILE; Flags: LPcmsUInt64Number); StdCall; PROCEDURE cmsGetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; // TODO: // FUNCTION cmsGetHeaderCreationDateTime(hProfile: cmsHPROFILE; struct tm *Dest): cmsBool; StdCall; FUNCTION cmsGetHeaderRenderingIntent(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; Flags: cmsUInt32Number); StdCall; FUNCTION cmsGetHeaderManufacturer(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; PROCEDURE cmsSetHeaderManufacturer(hProfile: cmsHPROFILE; manufacturer: cmsUInt32Number ); StdCall; FUNCTION cmsGetHeaderModel(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; PROCEDURE cmsSetHeaderModel(hProfile: cmsHPROFILE; model: cmsUInt32Number ); StdCall; PROCEDURE cmsSetHeaderAttributes(hProfile: cmsHPROFILE; Flags: cmsUInt64Number); StdCall; PROCEDURE cmsSetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; PROCEDURE cmsSetHeaderRenderingIntent(hProfile: cmsHPROFILE; RenderingIntent: cmsUInt32Number ); StdCall; FUNCTION cmsGetPCS(hProfile: cmsHPROFILE):cmsColorSpaceSignature; StdCall; PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: cmsColorSpaceSignature); StdCall; FUNCTION cmsGetColorSpace(hProfile: cmsHPROFILE): cmsColorSpaceSignature; StdCall; PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: cmsColorSpaceSignature); StdCall; FUNCTION cmsGetDeviceClass(hProfile: cmsHPROFILE): cmsProfileClassSignature; StdCall; PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: cmsProfileClassSignature); StdCall; PROCEDURE cmsSetProfileVersion(hProfile: cmsHPROFILE; Version: cmsFloat64Number); StdCall; FUNCTION cmsGetProfileVersion(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; FUNCTION cmsGetEncodedICCversion(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; PROCEDURE cmsSetEncodedICCversion(hProfile: cmsHPROFILE; Version: cmsUInt32Number); StdCall; Const // How profiles may be used LCMS_USED_AS_INPUT = 0; LCMS_USED_AS_OUTPUT = 1; LCMS_USED_AS_PROOF = 2; FUNCTION cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; FUNCTION cmsIsMatrixShaper(hProfile: cmsHPROFILE): cmsBool; StdCall; FUNCTION cmsIsCLUT(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; // Translate form/to our notation to ICC FUNCTION _cmsICCcolorSpace(OurNotation: Integer): cmsColorSpaceSignature; StdCall; FUNCTION _cmsLCMScolorSpace(ProfileSpace: cmsColorSpaceSignature): Integer; StdCall; FUNCTION cmsChannelsOf( ColorSpace: cmsColorSpaceSignature): cmsUInt32Number; StdCall; // Build a suitable formatter for the colorspace of this profile FUNCTION cmsFormatterForColorspaceOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; FUNCTION cmsFormatterForPCSOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; Type // Localized info cmsInfoType = ( cmsInfoDescription = 0, cmsInfoManufacturer = 1, cmsInfoModel = 2, cmsInfoCopyright = 3 ); FUNCTION cmsGetProfileInfo(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; FUNCTION cmsGetProfileInfoASCII(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; // IO handlers ---------------------------------------------------------------------------------------------------------- Type LPcmsIOHANDLER = Pointer; FUNCTION cmsOpenIOhandlerFromFile(ContextID: cmsContext; FileName, AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; // FUNCTION cmsOpenIOhandlerFromStream(ContextID: cmsContext; FILE* Stream): LPcmsIOHANDLER; StdCall; FUNCTION cmsOpenIOhandlerFromMem(ContextID: cmsContext; Buffer: Pointer; size: cmsUInt32Number; AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; FUNCTION cmsOpenIOhandlerFromNULL(ContextID: cmsContext): LPcmsIOHANDLER; StdCall; FUNCTION cmsCloseIOhandler(io: LPcmsIOHANDLER): cmsBool; StdCall; // MD5 message digest -------------------------------------------------------------------------------------------------- FUNCTION cmsMD5computeID(hProfile: cmsHPROFILE): cmsBool; StdCall; // Profile high level functions ------------------------------------------------------------------------------------------ FUNCTION cmsOpenProfileFromFile(ICCProfile : PAnsiChar; sAccess: PAnsiChar): cmsHPROFILE; StdCall; FUNCTION cmsOpenProfileFromFileTHR(ContextID: cmsContext; ICCProfile, sAccess: PAnsiChar): cmsHPROFILE; StdCall; // FUNCTION CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; // FUNCTION CMSEXPORT cmsOpenProfileFromStreamTHR(ContextID: cmsContext; FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; FUNCTION cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; FUNCTION cmsOpenProfileFromMemTHR(ContextID: cmsContext; MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; FUNCTION cmsOpenProfileFromIOhandlerTHR(ContextID: cmsContext; io: LPcmsIOHANDLER): cmsHPROFILE; StdCall; FUNCTION cmsCloseProfile(hProfile: cmsHPROFILE): cmsBool; StdCall; FUNCTION cmsSaveProfileToFile(hProfile: cmsHPROFILE; FileName: PAnsiChar): cmsBool; StdCall; // FUNCTION CMSEXPORT cmsSaveProfileToStream(hProfile: cmsHPROFILE, FILE* Stream): cmsBool; StdCall; FUNCTION cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; FUNCTION cmsSaveProfileToIOhandler(hProfile: cmsHPROFILE; io: LPcmsIOHANDLER):cmsUInt32Number; StdCall; // Predefined virtual profiles ------------------------------------------------------------------------------------------ FUNCTION cmsCreateRGBProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY; Primaries: LPcmsCIExyYTRIPLE; TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; FUNCTION cmsCreateRGBProfile(WhitePoint: LPcmsCIExyY; Primaries: LPcmsCIExyYTRIPLE; TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; FUNCTION cmsCreateGrayProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY; TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY; TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; FUNCTION cmsCreateLinearizationDeviceLinkTHR(ContextID: cmsContext; ColorSpace: cmsColorSpaceSignature; TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: cmsColorSpaceSignature; TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; FUNCTION cmsCreateInkLimitingDeviceLinkTHR(ContextID: cmsContext; ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; FUNCTION cmsCreateLab2ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; FUNCTION cmsCreateLab2Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; FUNCTION cmsCreateLab4ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; FUNCTION cmsCreateXYZProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; FUNCTION cmsCreateXYZProfile: cmsHPROFILE; StdCall; FUNCTION cmsCreate_sRGBProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; StdCall; FUNCTION cmsCreateBCHSWabstractProfileTHR(ContextID: cmsContext; nLUTPoints: Integer; Bright, Contrast, Hue, Saturation: cmsFloat64Number; TempSrc, TempDest: Integer): cmsHPROFILE; StdCall; FUNCTION cmsCreateBCHSWabstractProfile( nLUTPoints: Integer; Bright, Contrast, Hue, Saturation: cmsFloat64Number; TempSrc, TempDest: Integer): cmsHPROFILE; StdCall; FUNCTION cmsCreateNULLProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; FUNCTION cmsCreateNULLProfile: cmsHPROFILE; StdCall; // Converts a transform to a devicelink profile FUNCTION cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; Version: cmsFloat64Number; dwFlags: cmsUInt32Number): cmsHPROFILE; StdCall; // Intents ---------------------------------------------------------------------------------------------- Const // ICC Intents INTENT_PERCEPTUAL = 0; INTENT_RELATIVE_COLORIMETRIC = 1; INTENT_SATURATION = 2; INTENT_ABSOLUTE_COLORIMETRIC = 3; // Non-ICC intents INTENT_PRESERVE_K_ONLY_PERCEPTUAL = 10; INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC = 11; INTENT_PRESERVE_K_ONLY_SATURATION = 12; INTENT_PRESERVE_K_PLANE_PERCEPTUAL = 13; INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC = 14; INTENT_PRESERVE_K_PLANE_SATURATION = 15; Type LPPAnsiChar = ^PAnsiChar; // Call with NULL as parameters to get the intent count FUNCTION cmsGetSupportedIntents(nMax: cmsUInt32Number; Codes: LPcmsUInt32Number; Descriptions: LPPAnsiChar): cmsUInt32Number; StdCall; Const // Flags cmsFLAGS_NOCACHE = $0040; // Inhibit 1-pixel cache cmsFLAGS_NOOPTIMIZE = $0100; // Inhibit optimizations cmsFLAGS_NULLTRANSFORM = $0200; // Don't transform anyway // Proofing flags cmsFLAGS_GAMUTCHECK = $1000; // Out of Gamut alarm cmsFLAGS_SOFTPROOFING = $4000; // Do softproofing // Misc cmsFLAGS_BLACKPOINTCOMPENSATION = $2000; cmsFLAGS_NOWHITEONWHITEFIXUP = $0004; // Don't fix scum dot cmsFLAGS_HIGHRESPRECALC = $0400; // Use more memory to give better accuracy cmsFLAGS_LOWRESPRECALC = $0800; // Use less memory to minimize resouces // For devicelink creation cmsFLAGS_8BITS_DEVICELINK = $0008; // Create 8 bits devicelinks cmsFLAGS_GUESSDEVICECLASS = $0020; // Guess device class (for transform2devicelink) cmsFLAGS_KEEP_SEQUENCE = $0080; // Keep profile sequence for devicelink creation // Specific to a particular optimizations cmsFLAGS_FORCE_CLUT = $0002; // Force CLUT optimization cmsFLAGS_CLUT_POST_LINEARIZATION = $0001; // create postlinearization tables if possible cmsFLAGS_CLUT_PRE_LINEARIZATION = $0010; // create prelinearization tables if possible // CRD special cmsFLAGS_NODEFAULTRESOURCEDEF = $01000000; // Fine-tune control over number of gridpoints FUNCTION cmsFLAGS_GRIDPOINTS(n: Integer): Integer; // Transforms --------------------------------------------------------------------------------------------------- type LPcmsHPROFILEArray = ^cmsHPROFILEArray; cmsHPROFILEArray = array[0..0] of cmsHPROFILE; LPcmsBoolArray = ^cmsBoolArray; cmsBoolArray = array[0..0] of cmsBool; FUNCTION cmsCreateTransformTHR(ContextID: cmsContext; Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; FUNCTION cmsCreateTransform(Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; FUNCTION cmsCreateProofingTransformTHR(ContextID: cmsContext; Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Proofing: cmsHPROFILE; Intent: cmsUInt32Number; ProofingIntent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; FUNCTION cmsCreateProofingTransform(Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Proofing: cmsHPROFILE; Intent: cmsUInt32Number; ProofingIntent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; FUNCTION cmsCreateMultiprofileTransformTHR(ContextID: cmsContext; hProfiles: LPcmsHPROFILEArray; nProfiles: cmsUInt32Number; InputFormat: cmsUInt32Number; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; FUNCTION cmsCreateMultiprofileTransform( hProfiles: LPcmsHPROFILEArray; nProfiles: cmsUInt32Number; InputFormat: cmsUInt32Number; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; FUNCTION cmsCreateExtendedTransform(ContextID: cmsContext; nProfiles: cmsUInt32Number; hProfiles: LPcmsHPROFILEArray; BPC: LPcmsBoolArray; Intents: LPcmsUInt32NumberArray; AdaptationStates: LPcmsFloat64NumberArray; hGamutProfile: cmsHPROFILE; nGamutPCSposition: cmsUInt32Number; InputFormat, OutputFormat: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; PROCEDURE cmsDeleteTransform(hTransform: cmsHTRANSFORM); StdCall; PROCEDURE cmsDoTransform(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number); StdCall; PROCEDURE cmsDoTransformStride(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number; stride: cmsUInt32Number); StdCall; PROCEDURE cmsSetAlarmCodes( NewAlarm: LPcmsUInt16NumberArray); StdCall; PROCEDURE cmsGetAlarmCodes(NewAlarm: LPcmsUInt16NumberArray); StdCall; // Adaptation state for absolute colorimetric intent FUNCTION cmsSetAdaptationState(d: cmsFloat64Number):cmsFloat64Number; StdCall; // Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed FUNCTION cmsGetTransformContextID(hTransform: cmsHTRANSFORM):cmsContext; StdCall; // For backwards compatibility FUNCTION cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM; InputFormat, OutputFormat: cmsUInt32Number): cmsBool; StdCall; // PostScript ColorRenderingDictionary and ColorSpaceArray ---------------------------------------------------- Type cmsPSResourceType = (cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD ) ; // lcms2 unified method to access postscript color resources FUNCTION cmsGetPostScriptColorResource(ContextID: cmsContext; RType: cmsPSResourceType; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; io: LPcmsIOHANDLER): cmsUInt32Number; StdCall; FUNCTION cmsGetPostScriptCSA(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number ): cmsUInt32Number; StdCall; FUNCTION cmsGetPostScriptCRD(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number): cmsUInt32Number; StdCall; // IT8.7 / CGATS.17-20$ handling ----------------------------------------------------------------------------- // CGATS.13 parser FUNCTION cmsIT8Alloc: cmsHANDLE; StdCall; PROCEDURE cmsIT8Free(hIT8: cmsHANDLE); StdCall; // Tables FUNCTION cmsIT8TableCount(hIT8: cmsHANDLE): Integer; StdCall; FUNCTION cmsIT8SetTable(hIT8: cmsHANDLE; nTable: Integer): Integer; StdCall; // Persistence FUNCTION cmsIT8LoadFromFile(cFileName: PAnsiChar): cmsHANDLE; StdCall; FUNCTION cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): cmsHANDLE; StdCall; FUNCTION cmsIT8SaveToFile(hIT8: cmsHANDLE; cFileName: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8SaveToMem(hIT8: cmsHANDLE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; // Properties FUNCTION cmsIT8GetSheetType(hIT8: cmsHANDLE): PAnsiChar; StdCall; FUNCTION cmsIT8SetSheetType(hIT8: cmsHANDLE; TheType: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8SetComment(hIT8: cmsHANDLE; cComment: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8SetPropertyStr(hIT8: cmsHANDLE; cProp, Str: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8SetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Double): cmsBool; StdCall; FUNCTION cmsIT8SetPropertyHex(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Integer): cmsBool; StdCall; FUNCTION cmsIT8SetPropertyUncooked(hIT8: cmsHANDLE; Key, Buffer: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8GetProperty(hIT8: cmsHANDLE; cProp: PAnsiChar): PAnsiChar; StdCall; FUNCTION cmsIT8GetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar): Double; StdCall; FUNCTION cmsIT8EnumProperties(hIT8: cmsHANDLE; var PropertyNames: LPPAnsiChar): Integer; StdCall; // Datasets FUNCTION cmsIT8GetDataRowCol(hIT8: cmsHANDLE; row, col: Integer): PAnsiChar; StdCall; FUNCTION cmsIT8GetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer): Double; StdCall; FUNCTION cmsIT8SetDataRowCol(hIT8: cmsHANDLE; row, col: Integer; Val: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8SetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer; Val: Double): cmsBool; StdCall; FUNCTION cmsIT8GetData(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar): PAnsiChar; StdCall; FUNCTION cmsIT8GetDataDbl(hIT8: cmsHANDLE;cPatch, cSample: PAnsiChar): Double; StdCall; FUNCTION cmsIT8SetData(hIT8: cmsHANDLE; cPatch, cSample, Val: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8SetDataDbl(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar; Val: Double): cmsBool; StdCall; FUNCTION cmsIT8SetDataFormat(hIT8: cmsHANDLE; n: Integer; Sample: PAnsiChar): cmsBool; StdCall; FUNCTION cmsIT8EnumDataFormat(hIT8: cmsHANDLE; var SampleNames: LPPAnsiChar): Integer; StdCall; FUNCTION cmsIT8GetPatchName(hIT8: cmsHANDLE; nPatch: Integer; Buffer: PAnsiChar): PAnsiChar; StdCall; // The LABEL extension FUNCTION cmsIT8SetTableByLabel(hIT8: cmsHANDLE; cSet, cField, ExpectedType: PAnsiChar): Integer; StdCall; FUNCTION cmsIT8FindDataFormat(hIT8: cmsHANDLE; cSample: PAnsiChar): Integer; StdCall; // Formatter for double PROCEDURE cmsIT8DefineDblFormat(hIT8: cmsHANDLE; Formatter: PAnsiChar); StdCall; // Gamut boundary description routines ------------------------------------------------------------------------------ FUNCTION cmsGBDAlloc(ContextID: cmsContext):cmsHANDLE; StdCall; PROCEDURE cmsGBDFree(hGBD: cmsHANDLE); StdCall; FUNCTION cmsGDBAddPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; FUNCTION cmsGDBCompute(hGDB: cmsHANDLE; dwFlags: cmsUInt32Number): cmsBool; StdCall; FUNCTION cmsGDBCheckPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; // Feature detection ---------------------------------------------------------------------------------------------- // Estimate the black point FUNCTION cmsDetectBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; FUNCTION cmsDetectDestinationBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; // Estimate total area coverage FUNCTION cmsDetectTAC(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; // Poor man's gamut mapping FUNCTION cmsDesaturateLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: cmsFloat64Number): cmsBool; StdCall; IMPLEMENTATION FUNCTION FLOAT_SH(a: cmsUInt32Number): cmsUInt32Number; begin FLOAT_SH := ((a) shl 22) end; FUNCTION OPTIMIZED_SH(s: cmsUInt32Number): cmsUInt32Number; begin OPTIMIZED_SH := ((s) shl 21) end; FUNCTION COLORSPACE_SH(s: cmsUInt32Number):cmsUInt32Number; begin COLORSPACE_SH := ((s) shl 16) end; FUNCTION SWAPFIRST_SH(s: cmsUInt32Number):cmsUInt32Number; begin SWAPFIRST_SH := ((s) shl 14) end; FUNCTION FLAVOR_SH(s: cmsUInt32Number):cmsUInt32Number; begin FLAVOR_SH := ((s) shl 13) end; FUNCTION PLANAR_SH(p: cmsUInt32Number):cmsUInt32Number; begin PLANAR_SH := ((p) shl 12) end; FUNCTION ENDIAN16_SH(e: cmsUInt32Number):cmsUInt32Number; begin ENDIAN16_SH := ((e) shl 11) end; FUNCTION DOSWAP_SH(e: cmsUInt32Number):cmsUInt32Number; begin DOSWAP_SH := ((e) shl 10) end; FUNCTION EXTRA_SH(e: cmsUInt32Number):cmsUInt32Number; begin EXTRA_SH := ((e) shl 7) end; FUNCTION CHANNELS_SH(c: cmsUInt32Number):cmsUInt32Number; begin CHANNELS_SH := ((c) shl 3) end; FUNCTION BYTES_SH(b: cmsUInt32Number):cmsUInt32Number; begin BYTES_SH := (b) end; FUNCTION T_FLOAT(a: cmsUInt32Number): cmsUInt32Number; begin T_FLOAT := (((a) shr 22) and 1) end; FUNCTION T_OPTIMIZED(o: cmsUInt32Number): cmsUInt32Number; begin T_OPTIMIZED := (((o) shr 21) and 1) end; FUNCTION T_COLORSPACE(s: cmsUInt32Number): cmsUInt32Number; begin T_COLORSPACE := (((s) shr 16) and 31) end; FUNCTION T_SWAPFIRST(s: cmsUInt32Number): cmsUInt32Number; begin T_SWAPFIRST := (((s) shr 14) and 1) end; FUNCTION T_FLAVOR(s: cmsUInt32Number): cmsUInt32Number; begin T_FLAVOR := (((s) shr 13) and 1) end; FUNCTION T_PLANAR(p: cmsUInt32Number): cmsUInt32Number; begin T_PLANAR := (((p) shr 12) and 1) end; FUNCTION T_ENDIAN16(e: cmsUInt32Number): cmsUInt32Number; begin T_ENDIAN16 := (((e) shr 11) and 1) end; FUNCTION T_DOSWAP(e: cmsUInt32Number): cmsUInt32Number; begin T_DOSWAP := (((e) shr 10) and 1) end; FUNCTION T_EXTRA(e: cmsUInt32Number): cmsUInt32Number; begin T_EXTRA := (((e) shr 7) and 7) end; FUNCTION T_CHANNELS(c: cmsUInt32Number): cmsUInt32Number; begin T_CHANNELS := (((c) shr 3) and 15) end; FUNCTION T_BYTES(b: cmsUInt32Number): cmsUInt32Number; begin T_BYTES := ((b) and 7) end; // FUNCTION cmsCreateContext(Plugin : Pointer; UserData : Pointer) : cmsContext; StdCall; external LCMS2_SO; PROCEDURE cmsDeleteContext(ContextID: cmsContext); StdCall; external LCMS2_SO; FUNCTION cmsDupContext(ContextID: cmsContext; NewUserData: Pointer): cmsContext; StdCall; external LCMS2_SO; FUNCTION cmsGetContextUserData(ContextID: cmsContext): Pointer; StdCall; external LCMS2_SO; FUNCTION cmsPlugin(Plugin: Pointer): cmsBool; StdCall; external LCMS2_SO; PROCEDURE cmsUnregisterPlugins; StdCall; external LCMS2_SO; PROCEDURE cmsSetLogErrorHandler(Fn: cmsLogErrorHandlerFunction); StdCall; external LCMS2_SO; FUNCTION cmsD50_XYZ: LPcmsCIEXYZ; StdCall; external LCMS2_SO; FUNCTION cmsD50_xyY: LPcmsCIExyY; StdCall; external LCMS2_SO; PROCEDURE cmsXYZ2xyY(Dest: LPcmsCIExyY; Source: LPcmsCIEXYZ); StdCall; external LCMS2_SO; PROCEDURE cmsxyY2XYZ(Dest: LPcmsCIEXYZ; Source: LPcmsCIExyY); StdCall; external LCMS2_SO; PROCEDURE cmsLab2XYZ(WhitePoint: LPcmsCIEXYZ; xyz: LPcmsCIEXYZ; Lab: LPcmsCIELab); StdCall; external LCMS2_SO; PROCEDURE cmsXYZ2Lab(WhitePoint: LPcmsCIEXYZ; Lab: LPcmsCIELab; xyz: LPcmsCIEXYZ); StdCall; external LCMS2_SO; PROCEDURE cmsLab2LCh(LCh: LPcmsCIELCh; Lab: LPcmsCIELab); StdCall; external LCMS2_SO; PROCEDURE cmsLCh2Lab(Lab: LPcmsCIELab; LCh: LPcmsCIELCh); StdCall; external LCMS2_SO; PROCEDURE cmsLabEncoded2Float(Lab: LPcmsCIELab; wLab: Pointer); StdCall; external LCMS2_SO; PROCEDURE cmsLabEncoded2FloatV2(Lab: LPcmsCIELab; wLab: Pointer); StdCall; external LCMS2_SO; PROCEDURE cmsFloat2LabEncoded(wLab: Pointer; Lab: LPcmsCIELab); StdCall; external LCMS2_SO; PROCEDURE cmsFloat2LabEncodedV2(wLab: Pointer; Lab: LPcmsCIELab); StdCall; external LCMS2_SO; PROCEDURE cmsXYZEncoded2Float(fxyz : LPcmsCIEXYZ; XYZ: Pointer); StdCall; external LCMS2_SO; PROCEDURE cmsFloat2XYZEncoded(XYZ: Pointer; fXYZ: LPcmsCIEXYZ); StdCall; external LCMS2_SO; FUNCTION cmsDeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external LCMS2_SO; FUNCTION cmsCIE94DeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external LCMS2_SO; FUNCTION cmsBFDdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external LCMS2_SO; FUNCTION cmsCMCdeltaE(Lab1, Lab2: LPcmsCIELab): Double; StdCall; external LCMS2_SO; FUNCTION cmsCIE2000DeltaE(Lab1, Lab2: LPcmsCIELab; Kl, Kc, Kh: Double): Double; StdCall; external LCMS2_SO; FUNCTION cmsWhitePointFromTemp(var WhitePoint: cmsCIExyY; TempK: cmsFloat64Number) : cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsTempFromWhitePoint(var TeampK: cmsFloat64Number; var WhitePoint: cmsCIExyY) : cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsAdaptToIlluminant(Result: LPcmsCIEXYZ; SourceWhitePt: LPcmsCIEXYZ; Illuminant: LPcmsCIEXYZ; Value: LPcmsCIEXYZ): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsCIECAM02Init(pVC : LPcmsViewingConditions ) : Pointer; StdCall; external LCMS2_SO; PROCEDURE cmsCIECAM02Done(hModel : Pointer); StdCall; external LCMS2_SO; PROCEDURE cmsCIECAM02Forward(hModel: Pointer; pIn: LPcmsCIEXYZ; pOut: LPcmsJCh ); StdCall; external LCMS2_SO; PROCEDURE cmsCIECAM02Reverse(hModel: Pointer; pIn: LPcmsJCh; pOut: LPcmsCIEXYZ ); StdCall; external LCMS2_SO; FUNCTION cmsBuildSegmentedToneCurve(ContextID: cmsContext; nSegments: cmsInt32Number; Segments: LPcmsCurveSegmentArray): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsBuildParametricToneCurve(ContextID: cmsContext; CType: cmsInt32Number; Params: LPcmsFloat64NumberArray): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsBuildGamma(ContextID: cmsContext; Gamma: cmsFloat64Number): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsBuildTabulatedToneCurve16(ContextID: cmsContext; nEntries: cmsInt32Number; values: LPcmsUInt16NumberArray): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsBuildTabulatedToneCurveFloat(ContextID: cmsContext; nEntries: cmsUInt32Number; values: LPcmsFloat32NumberArray): LPcmsToneCurve; StdCall; external LCMS2_SO; PROCEDURE cmsFreeToneCurve(Curve: LPcmsToneCurve); StdCall; external LCMS2_SO; PROCEDURE cmsFreeToneCurveTriple(Curve: LPLPcmsToneCurveArray); StdCall; external LCMS2_SO; FUNCTION cmsDupToneCurve(Src: LPcmsToneCurve): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsReverseToneCurve(InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsReverseToneCurveEx(nResultSamples: cmsInt32Number; InGamma: LPcmsToneCurve): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsJoinToneCurve(ContextID: cmsContext; X, Y: LPcmsToneCurve; nPoints: cmsUInt32Number ): LPcmsToneCurve; StdCall; external LCMS2_SO; FUNCTION cmsSmoothToneCurve(Tab: LPcmsToneCurve; lambda: cmsFloat64Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsEvalToneCurveFloat(Curve: LPcmsToneCurve; v: cmsFloat32Number):cmsFloat32Number; StdCall; external LCMS2_SO; FUNCTION cmsEvalToneCurve16(Curve: LPcmsToneCurve; v:cmsUInt16Number):cmsUInt16Number; StdCall; external LCMS2_SO; FUNCTION cmsIsToneCurveMultisegment(InGamma: LPcmsToneCurve):cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIsToneCurveLinear(Curve: LPcmsToneCurve):cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIsToneCurveMonotonic(t: LPcmsToneCurve):cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIsToneCurveDescending(t: LPcmsToneCurve):cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsGetToneCurveParametricType(t: LPcmsToneCurve):cmsInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsEstimateGamma(t: LPcmsToneCurve; Precision:cmsFloat64Number):cmsFloat64Number; StdCall; external LCMS2_SO; FUNCTION cmsGetToneCurveEstimatedTableEntries(t: LPcmsToneCurve): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsGetToneCurveEstimatedTable(t: LPcmsToneCurve): LPcmsUInt16Number; StdCall; external LCMS2_SO; FUNCTION cmsPipelineAlloc(ContextID: cmsContext; InputChannels, OutputChannels: cmsUInt32Number): LPcmsPipeline; StdCall; external LCMS2_SO; PROCEDURE cmsPipelineFree(lut: LPcmsPipeline); StdCall; external LCMS2_SO; FUNCTION cmsPipelineDup(Orig: LPcmsPipeline): LPcmsPipeline; StdCall; external LCMS2_SO; FUNCTION cmsGetPipelineContextID(lut: LPcmsPipeline) : cmsContext; StdCall; external LCMS2_SO; FUNCTION cmsPipelineInputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsPipelineOutputChannels(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsPipelineStageCount(lut: LPcmsPipeline): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsPipelineGetPtrToFirstStage(lut: LPcmsPipeline): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsPipelineGetPtrToLastStage(lut: LPcmsPipeline): LPcmsStage; StdCall; external LCMS2_SO; PROCEDURE cmsPipelineEval16(Inv, Outv: LPcmsUInt16NumberArray; lut: LPcmsPipeline); StdCall; external LCMS2_SO; PROCEDURE cmsPipelineEvalFloat(Inv, Outv: LPcmsFloat32NumberArray; lut: LPcmsPipeline); StdCall; external LCMS2_SO; FUNCTION cmsPipelineEvalReverseFloat(Target, Result, Hint: LPcmsFloat32NumberArray; lut: LPcmsPipeline): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsPipelineCat(l1, l2: LPcmsPipeline): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsPipelineSetSaveAs8bitsFlag(lut: LPcmsPipeline; On: cmsBool): cmsBool; StdCall; external LCMS2_SO; PROCEDURE cmsPipelineInsertStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPcmsStage); StdCall; external LCMS2_SO; PROCEDURE cmsPipelineUnlinkStage(lut: LPcmsPipeline; loc: cmsStageLoc; mpe: LPLPcmsStage); StdCall; external LCMS2_SO; FUNCTION cmsStageAllocIdentity(ContextID: cmsContext; nChannels: cmsUInt32Number): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageAllocToneCurves(ContextID: cmsContext; nChannels: cmsUInt32Number; Curves: LPLPcmsToneCurveArray): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageAllocMatrix(ContextID: cmsContext; Rows, Cols: cmsUInt32Number; Matrix, Offset: LPcmsFloat64NumberArray): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageAllocCLut16bit(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageAllocCLutFloat(ContextID: cmsContext; nGridPoints: cmsUInt32Number; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageAllocCLut16bitGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsUInt16NumberArray): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageAllocCLutFloatGranular(ContextID: cmsContext; nGridPoints: LPcmsUInt32NumberArray; inputChan, outputChan: cmsUInt32Number; Table: LPcmsFloat32NumberArray): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageDup(mpe: LPcmsStage): LPcmsStage; StdCall; external LCMS2_SO; PROCEDURE cmsStageFree(mpe: LPcmsStage); StdCall; external LCMS2_SO; FUNCTION cmsStageNext(mpe: LPcmsStage): LPcmsStage; StdCall; external LCMS2_SO; FUNCTION cmsStageInputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsStageOutputChannels(mpe: LPcmsStage): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsStageType(mpe: LPcmsStage): cmsStageSignature; StdCall; external LCMS2_SO; FUNCTION cmsStageData(mpe: LPcmsStage): Pointer; StdCall; external LCMS2_SO; FUNCTION cmsStageSampleCLut16bit(mpe: LPcmsStage; Sampler: cmsSAMPLER16; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsStageSampleCLutFloat(mpe: LPcmsStage; Sampler: cmsSAMPLERFLOAT; Cargo: Pointer; dwFlags: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsSliceSpace16(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; Sampler: cmsSAMPLER16; Cargo: Pointer): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsSliceSpaceFloat(nInputs: cmsUInt32Number; clutPoints: LPcmsUInt32NumberArray; Sampler: cmsSAMPLERFLOAT; Cargo: Pointer): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsMLUalloc(ContextID: cmsContext; nItems: cmsUInt32Number): LPcmsMLU; StdCall; external LCMS2_SO; PROCEDURE cmsMLUfree(mlu: LPcmsMLU); StdCall; external LCMS2_SO; FUNCTION cmsMLUdup(mlu: LPcmsMLU): LPcmsMLU; StdCall; external LCMS2_SO; FUNCTION cmsMLUsetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode, ASCIIString: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsMLUsetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; WideString: PWChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsMLUgetASCII(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsMLUgetWide(mlu: LPcmsMLU; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsMLUgetTranslation(mlu: LPcmsMLU; LanguageCode, CountryCode, ObtainedLanguage, ObtainedCountry: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsAllocNamedColorList(ContextID: cmsContext; n, ColorantCount :cmsUInt32Number; Prefix, Suffix: PAnsiChar): LPcmsNAMEDCOLORLIST; StdCall; external LCMS2_SO; PROCEDURE cmsFreeNamedColorList(v: LPcmsNAMEDCOLORLIST); StdCall; external LCMS2_SO; FUNCTION cmsDupNamedColorList(v: LPcmsNAMEDCOLORLIST): LPcmsNAMEDCOLORLIST; StdCall; external LCMS2_SO; FUNCTION cmsAppendNamedColor(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar; PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsNamedColorCount(v: LPcmsNAMEDCOLORLIST): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsNamedColorIndex(v: LPcmsNAMEDCOLORLIST; Name: PAnsiChar): cmsInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsNamedColorInfo(v: LPcmsNAMEDCOLORLIST; nColor : cmsUInt32Number; Name,Prefix, Suffix : PAnsiChar; PCS, Colorant : LPcmsUInt16NumberArray): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsGetNamedColorList(xform: cmsHTRANSFORM ): LPcmsNAMEDCOLORLIST; StdCall; external LCMS2_SO; FUNCTION cmsAllocProfileSequenceDescription(ContextID: cmsContext; n: cmsUInt32Number):LPcmsSEQ; StdCall; external LCMS2_SO; FUNCTION cmsDupProfileSequenceDescription(pseq: LPcmsSEQ):LPcmsSEQ; StdCall; external LCMS2_SO; PROCEDURE cmsFreeProfileSequenceDescription(pseq: LPcmsSEQ); StdCall; external LCMS2_SO; FUNCTION cmsDictAlloc(ContextID: cmsContext): cmsHANDLE; StdCall; external LCMS2_SO; PROCEDURE cmsDictFree(hDict: cmsHANDLE); StdCall; external LCMS2_SO; FUNCTION cmsDictDup(hDict: cmsHANDLE): cmsHANDLE; StdCall; external LCMS2_SO; FUNCTION cmsDictAddEntry(hDict: cmsHANDLE; Name, Value: PWChar; DisplayName, DisplayValue : LPcmsMLU): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsDictGetEntryList(hDict: cmsHANDLE): LPcmsDICTentry; StdCall; external LCMS2_SO; FUNCTION cmsDictNextEntry(e : LPcmsDICTentry): LPcmsDICTentry; StdCall; external LCMS2_SO; FUNCTION cmsCreateProfilePlaceholder(ContextID: cmsContext): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsGetProfileContextID(hProfile: cmsHPROFILE):cmsContext; StdCall; external LCMS2_SO; FUNCTION cmsGetTagCount(hProfile: cmsHPROFILE): cmsInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsGetTagSignature(hProfile: cmsHPROFILE; n: cmsUInt32Number): cmsTagSignature; StdCall; external LCMS2_SO; FUNCTION cmsIsTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsReadTag(hProfile: cmsHPROFILE; sig: cmsTagSignature ): Pointer; StdCall; external LCMS2_SO; FUNCTION cmsWriteTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsLinkTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; dest: cmsTagSignature): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsTagLinkedTo(hProfile: cmsHPROFILE; sig: cmsTagSignature):cmsTagSignature; StdCall; external LCMS2_SO; FUNCTION cmsReadRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; Buffer: Pointer; BufferSize: cmsUInt32Number): cmsInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsWriteRawTag(hProfile: cmsHPROFILE; sig: cmsTagSignature; data: Pointer; Size: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsGetHeaderFlags(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external LCMS2_SO; PROCEDURE cmsGetHeaderAttributes(hProfile: cmsHPROFILE; Flags: LPcmsUInt64Number); StdCall; external LCMS2_SO; PROCEDURE cmsGetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; external LCMS2_SO; FUNCTION cmsGetHeaderRenderingIntent(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external LCMS2_SO; PROCEDURE cmsSetHeaderFlags(hProfile: cmsHPROFILE; Flags: cmsUInt32Number); StdCall; external LCMS2_SO; FUNCTION cmsGetHeaderManufacturer(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external LCMS2_SO; PROCEDURE cmsSetHeaderManufacturer(hProfile: cmsHPROFILE; manufacturer: cmsUInt32Number ); StdCall; external LCMS2_SO; FUNCTION cmsGetHeaderModel(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external LCMS2_SO; PROCEDURE cmsSetHeaderModel(hProfile: cmsHPROFILE; model: cmsUInt32Number ); StdCall; external LCMS2_SO; PROCEDURE cmsSetHeaderAttributes(hProfile: cmsHPROFILE; Flags: cmsUInt64Number); StdCall; external LCMS2_SO; PROCEDURE cmsSetHeaderProfileID(hProfile: cmsHPROFILE; ProfileID: LPcmsUInt8Number); StdCall; external LCMS2_SO; PROCEDURE cmsSetHeaderRenderingIntent(hProfile: cmsHPROFILE; RenderingIntent: cmsUInt32Number ); StdCall; external LCMS2_SO; FUNCTION cmsGetPCS(hProfile: cmsHPROFILE):cmsColorSpaceSignature; StdCall; external LCMS2_SO; PROCEDURE cmsSetPCS(hProfile: cmsHPROFILE; pcs: cmsColorSpaceSignature); StdCall; external LCMS2_SO; FUNCTION cmsGetColorSpace(hProfile: cmsHPROFILE): cmsColorSpaceSignature; StdCall; external LCMS2_SO; PROCEDURE cmsSetColorSpace(hProfile: cmsHPROFILE; sig: cmsColorSpaceSignature); StdCall; external LCMS2_SO; FUNCTION cmsGetDeviceClass(hProfile: cmsHPROFILE): cmsProfileClassSignature; StdCall; external LCMS2_SO; PROCEDURE cmsSetDeviceClass(hProfile: cmsHPROFILE; sig: cmsProfileClassSignature); StdCall; external LCMS2_SO; PROCEDURE cmsSetProfileVersion(hProfile: cmsHPROFILE; Version: cmsFloat64Number); StdCall; external LCMS2_SO; FUNCTION cmsGetProfileVersion(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; external LCMS2_SO; FUNCTION cmsGetEncodedICCversion(hProfile: cmsHPROFILE): cmsUInt32Number; StdCall; external LCMS2_SO; PROCEDURE cmsSetEncodedICCversion(hProfile: cmsHPROFILE; Version: cmsUInt32Number); StdCall; external LCMS2_SO; FUNCTION cmsIsIntentSupported(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIsMatrixShaper(hProfile: cmsHPROFILE): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIsCLUT(hProfile: cmsHPROFILE; Intent: cmsUInt32Number; UsedDirection: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION _cmsICCcolorSpace(OurNotation: Integer): cmsColorSpaceSignature; StdCall; external LCMS2_SO; FUNCTION _cmsLCMScolorSpace(ProfileSpace: cmsColorSpaceSignature): Integer; StdCall; external LCMS2_SO; FUNCTION cmsChannelsOf( ColorSpace: cmsColorSpaceSignature): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsFormatterForColorspaceOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsFormatterForPCSOfProfile(hProfile: cmsHPROFILE; nBytes: cmsUInt32Number; lIsFloat: cmsBool): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsGetProfileInfo(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; Buffer: PWChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsGetProfileInfoASCII(hProfile: cmsHPROFILE; Info: cmsInfoType; LanguageCode, CountryCode: PAnsiChar; Buffer: PAnsiChar; BufferSize: cmsUInt32Number): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsOpenIOhandlerFromFile(ContextID: cmsContext; FileName, AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; external LCMS2_SO; // FUNCTION cmsOpenIOhandlerFromStream(ContextID: cmsContext; FILE* Stream): LPcmsIOHANDLER; StdCall; external LCMS2_SO; FUNCTION cmsOpenIOhandlerFromMem(ContextID: cmsContext; Buffer: Pointer; size: cmsUInt32Number; AccessMode: PAnsiChar): LPcmsIOHANDLER; StdCall; external LCMS2_SO; FUNCTION cmsOpenIOhandlerFromNULL(ContextID: cmsContext): LPcmsIOHANDLER; StdCall; external LCMS2_SO; FUNCTION cmsCloseIOhandler(io: LPcmsIOHANDLER): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsMD5computeID(hProfile: cmsHPROFILE): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsOpenProfileFromFile(ICCProfile : PAnsiChar; sAccess: PAnsiChar): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsOpenProfileFromFileTHR(ContextID: cmsContext; ICCProfile, sAccess: PAnsiChar): cmsHPROFILE; StdCall; external LCMS2_SO; // FUNCTION CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; external LCMS2_SO; // FUNCTION CMSEXPORT cmsOpenProfileFromStreamTHR(ContextID: cmsContext; FILE* ICCProfile, const char* sAccess): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsOpenProfileFromMem(MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsOpenProfileFromMemTHR(ContextID: cmsContext; MemPtr: Pointer; dwSize: cmsUInt32Number): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsOpenProfileFromIOhandlerTHR(ContextID: cmsContext; io: LPcmsIOHANDLER): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCloseProfile(hProfile: cmsHPROFILE): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsSaveProfileToFile(hProfile: cmsHPROFILE; FileName: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; // FUNCTION CMSEXPORT cmsSaveProfileToStream(hProfile: cmsHPROFILE, FILE* Stream): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsSaveProfileToMem(hProfile: cmsHPROFILE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsSaveProfileToIOhandler(hProfile: cmsHPROFILE; io: LPcmsIOHANDLER):cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsCreateRGBProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY; Primaries: LPcmsCIExyYTRIPLE; TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateRGBProfile(WhitePoint: LPcmsCIExyY; Primaries: LPcmsCIExyYTRIPLE; TransferFunction: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateGrayProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY; TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateGrayProfile(WhitePoint: LPcmsCIExyY; TransferFunction: LPcmsToneCurve): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateLinearizationDeviceLinkTHR(ContextID: cmsContext; ColorSpace: cmsColorSpaceSignature; TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateLinearizationDeviceLink(ColorSpace: cmsColorSpaceSignature; TransferFunctions: LPLPcmsToneCurveArray): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateInkLimitingDeviceLinkTHR(ContextID: cmsContext; ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateInkLimitingDeviceLink(ColorSpace: cmsColorSpaceSignature; Limit: cmsFloat64Number): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateLab2ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateLab2Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateLab4ProfileTHR(ContextID: cmsContext; WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateLab4Profile(WhitePoint: LPcmsCIExyY): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateXYZProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateXYZProfile: cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreate_sRGBProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreate_sRGBProfile: cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateBCHSWabstractProfileTHR(ContextID: cmsContext; nLUTPoints: Integer; Bright, Contrast, Hue, Saturation: cmsFloat64Number; TempSrc, TempDest: Integer): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateBCHSWabstractProfile( nLUTPoints: Integer; Bright, Contrast, Hue, Saturation: cmsFloat64Number; TempSrc, TempDest: Integer): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateNULLProfileTHR(ContextID: cmsContext): cmsHPROFILE; StdCall; external LCMS2_SO; FUNCTION cmsCreateNULLProfile: cmsHPROFILE; StdCall; external LCMS2_SO; // Converts a transform to a devicelink profile FUNCTION cmsTransform2DeviceLink(hTransform: cmsHTRANSFORM; Version: cmsFloat64Number; dwFlags: cmsUInt32Number): cmsHPROFILE; StdCall; external LCMS2_SO; // Call with NULL as parameters to get the intent count FUNCTION cmsGetSupportedIntents(nMax: cmsUInt32Number; Codes: LPcmsUInt32Number; Descriptions: LPPAnsiChar): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsFLAGS_GRIDPOINTS(n: Integer): Integer; begin cmsFLAGS_GRIDPOINTS := (((n) and $FF) shl 16) end; FUNCTION cmsCreateTransformTHR(ContextID: cmsContext; Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; FUNCTION cmsCreateTransform(Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; FUNCTION cmsCreateProofingTransformTHR(ContextID: cmsContext; Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Proofing: cmsHPROFILE; Intent: cmsUInt32Number; ProofingIntent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; FUNCTION cmsCreateProofingTransform(Input: cmsHPROFILE; InputFormat: cmsUInt32Number; Output: cmsHPROFILE; OutputFormat: cmsUInt32Number; Proofing: cmsHPROFILE; Intent: cmsUInt32Number; ProofingIntent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; FUNCTION cmsCreateMultiprofileTransformTHR(ContextID: cmsContext; hProfiles: LPcmsHPROFILEArray; nProfiles: cmsUInt32Number; InputFormat: cmsUInt32Number; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; FUNCTION cmsCreateMultiprofileTransform( hProfiles: LPcmsHPROFILEArray; nProfiles: cmsUInt32Number; InputFormat: cmsUInt32Number; OutputFormat: cmsUInt32Number; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; FUNCTION cmsCreateExtendedTransform(ContextID: cmsContext; nProfiles: cmsUInt32Number; hProfiles: LPcmsHPROFILEArray; BPC: LPcmsBoolArray; Intents: LPcmsUInt32NumberArray; AdaptationStates: LPcmsFloat64NumberArray; hGamutProfile: cmsHPROFILE; nGamutPCSposition: cmsUInt32Number; InputFormat, OutputFormat: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsHTRANSFORM; StdCall; external LCMS2_SO; PROCEDURE cmsDeleteTransform(hTransform: cmsHTRANSFORM); StdCall; external LCMS2_SO; PROCEDURE cmsDoTransform(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number); StdCall; external LCMS2_SO; PROCEDURE cmsDoTransformStride(Transform: cmsHTRANSFORM; InputBuffer, OutputBuffer: Pointer; size: cmsUInt32Number; stride: cmsUInt32Number); StdCall; external LCMS2_SO; PROCEDURE cmsSetAlarmCodes( NewAlarm: LPcmsUInt16NumberArray); StdCall; external LCMS2_SO; PROCEDURE cmsGetAlarmCodes(NewAlarm: LPcmsUInt16NumberArray); StdCall; external LCMS2_SO; // Adaptation state for absolute colorimetric intent FUNCTION cmsSetAdaptationState(d: cmsFloat64Number):cmsFloat64Number; StdCall; external LCMS2_SO; // Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed FUNCTION cmsGetTransformContextID(hTransform: cmsHTRANSFORM):cmsContext; StdCall; external LCMS2_SO; // For backwards compatibility FUNCTION cmsChangeBuffersFormat(hTransform: cmsHTRANSFORM; InputFormat, OutputFormat: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; // lcms2 unified method to access postscript color resources FUNCTION cmsGetPostScriptColorResource(ContextID: cmsContext; RType: cmsPSResourceType; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; io: LPcmsIOHANDLER): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsGetPostScriptCSA(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number ): cmsUInt32Number; StdCall; external LCMS2_SO; FUNCTION cmsGetPostScriptCRD(ContextID: cmsContext; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number; Buffer: Pointer; dwBufferLen: cmsUInt32Number): cmsUInt32Number; StdCall; external LCMS2_SO; // CGATS.13 parser FUNCTION cmsIT8Alloc: cmsHANDLE; StdCall; external LCMS2_SO; PROCEDURE cmsIT8Free(hIT8: cmsHANDLE); StdCall; external LCMS2_SO; // Tables FUNCTION cmsIT8TableCount(hIT8: cmsHANDLE): Integer; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetTable(hIT8: cmsHANDLE; nTable: Integer): Integer; StdCall; external LCMS2_SO; // Persistence FUNCTION cmsIT8LoadFromFile(cFileName: PAnsiChar): cmsHANDLE; StdCall; external LCMS2_SO; FUNCTION cmsIT8LoadFromMem(Ptr: Pointer; size :DWord): cmsHANDLE; StdCall; external LCMS2_SO; FUNCTION cmsIT8SaveToFile(hIT8: cmsHANDLE; cFileName: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SaveToMem(hIT8: cmsHANDLE; MemPtr: Pointer; BytesNeeded: LPcmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; // Properties FUNCTION cmsIT8GetSheetType(hIT8: cmsHANDLE): PAnsiChar; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetSheetType(hIT8: cmsHANDLE; TheType: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetComment(hIT8: cmsHANDLE; cComment: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetPropertyStr(hIT8: cmsHANDLE; cProp, Str: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Double): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetPropertyHex(hIT8: cmsHANDLE; cProp: PAnsiChar; Val: Integer): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetPropertyUncooked(hIT8: cmsHANDLE; Key, Buffer: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8GetProperty(hIT8: cmsHANDLE; cProp: PAnsiChar): PAnsiChar; StdCall; external LCMS2_SO; FUNCTION cmsIT8GetPropertyDbl(hIT8: cmsHANDLE; cProp: PAnsiChar): Double; StdCall; external LCMS2_SO; FUNCTION cmsIT8EnumProperties(hIT8: cmsHANDLE; var PropertyNames: LPPAnsiChar): Integer; StdCall; external LCMS2_SO; // Datasets FUNCTION cmsIT8GetDataRowCol(hIT8: cmsHANDLE; row, col: Integer): PAnsiChar; StdCall; external LCMS2_SO; FUNCTION cmsIT8GetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer): Double; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetDataRowCol(hIT8: cmsHANDLE; row, col: Integer; Val: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetDataRowColDbl(hIT8: cmsHANDLE; row, col: Integer; Val: Double): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8GetData(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar): PAnsiChar; StdCall; external LCMS2_SO; FUNCTION cmsIT8GetDataDbl(hIT8: cmsHANDLE;cPatch, cSample: PAnsiChar): Double; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetData(hIT8: cmsHANDLE; cPatch, cSample, Val: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetDataDbl(hIT8: cmsHANDLE; cPatch, cSample: PAnsiChar; Val: Double): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8SetDataFormat(hIT8: cmsHANDLE; n: Integer; Sample: PAnsiChar): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsIT8EnumDataFormat(hIT8: cmsHANDLE; var SampleNames: LPPAnsiChar): Integer; StdCall; external LCMS2_SO; FUNCTION cmsIT8GetPatchName(hIT8: cmsHANDLE; nPatch: Integer; Buffer: PAnsiChar): PAnsiChar; StdCall; external LCMS2_SO; // The LABEL extension FUNCTION cmsIT8SetTableByLabel(hIT8: cmsHANDLE; cSet, cField, ExpectedType: PAnsiChar): Integer; StdCall; external LCMS2_SO; FUNCTION cmsIT8FindDataFormat(hIT8: cmsHANDLE; cSample: PAnsiChar): Integer; StdCall; external LCMS2_SO; // Formatter for double PROCEDURE cmsIT8DefineDblFormat(hIT8: cmsHANDLE; Formatter: PAnsiChar); StdCall; external LCMS2_SO; FUNCTION cmsGBDAlloc(ContextID: cmsContext):cmsHANDLE; StdCall; external LCMS2_SO; PROCEDURE cmsGBDFree(hGBD: cmsHANDLE); StdCall; external LCMS2_SO; FUNCTION cmsGDBAddPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsGDBCompute(hGDB: cmsHANDLE; dwFlags: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsGDBCheckPoint(hGBD: cmsHANDLE; Lab: LPcmsCIELab): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsDetectBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsDetectDestinationBlackPoint( BlackPoint: LPcmsCIEXYZ; hProfile: cmsHPROFILE; Intent: cmsUInt32Number; dwFlags: cmsUInt32Number): cmsBool; StdCall; external LCMS2_SO; FUNCTION cmsDetectTAC(hProfile: cmsHPROFILE): cmsFloat64Number; StdCall; external LCMS2_SO; FUNCTION cmsDesaturateLab(Lab: LPcmsCIELab; amax, amin, bmax, bmin: cmsFloat64Number): cmsBool; StdCall; external LCMS2_SO; END. lcms2-2.12rc1/utils/jpgicc/0000755000175000017500000000000013775114656014514 5ustar martimartilcms2-2.12rc1/utils/jpgicc/jpgicc.10000644000175000017500000000555713775114656016051 0ustar martimarti.\"Shiju P. Nair September 30, 2004 .\"Thomas Weber April 23, 2014 .TH JPGICC 1 "September 30, 2004" .SH NAME jpgicc - little cms ICC profile applier for JPEG. .SH SYNOPSIS .B jpgicc .RI [ options ] " input.jpg output.jpg" .SH DESCRIPTION lcms is a standalone CMM engine, which deals with the color management. It implements a fast transformation between ICC profiles. .B jpgicc is a little cms ICC profile applier for JPEG. .SH OPTIONS .TP .B \-b Black point compensation. .TP .BI \-c\ NUM Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1]. .TP .BI \-d\ NUM Observer adaptation state (abs.col. only), (0..1.0, float value) [defaults to 0.0]. .TP .B \-e Embed destination profile. .TP .B \-g Marks out-of-gamut colors on softproof. .TP .BI \-h\ NUM Show summary of options and examples (0=help, 1=Examples, 2=Built-in profiles, 3=Contact information) .TP .BI \-i\ profile Input profile (defaults to sRGB). .TP .BI \-l\ link TODO: explain this option. .TP .BI \-m\ NUM SoftProof intent (0,1,2,3) [defaults to 0]. .TP .B \-n Ignore embedded profile. .TP .BI \-o\ profile Output profile (defaults to sRGB). .TP .BI \-p\ profile Soft proof profile. .TP .BI \-q\ NUM Output JPEG quality, (0..100) [defaults to 75]. .TP .BI \-s\ newprofile Save embedded profile as \fInewprofile\fR. .TP .BI \-t\ NUM Rendering intent .nf .RS 0=Perceptual [default] 1=Relative colorimetric 2=Saturation 3=Absolute colorimetric 10=Perceptual preserving black ink 11=Relative colorimetric preserving black ink 12=Saturation preserving black ink 13=Perceptual preserving black plane 14=Relative colorimetric preserving black plane 15=Saturation preserving black plane .RE .fi .TP .B \-v Verbose. .TP .BI \-!\ NUM,NUM,NUM Out-of-gamut marker channel values (r,g,b) [defaults: 128,128,128]. .SH BUILT-IN PROFILES .nf *Lab2 -- D50-based v2 CIEL*a*b *Lab4 -- D50-based v4 CIEL*a*b *Lab -- D50-based v4 CIEL*a*b *XYZ -- CIE XYZ (PCS) *sRGB -- sRGB color space *Gray22 - Monochrome of Gamma 2.2 *Gray30 - Monochrome of Gamma 3.0 *null - Monochrome black for all input *Lin2222- CMYK linearization of gamma 2.2 on each channel .fi .SH EXAMPLES .nf To color correct from scanner to sRGB: jpgicc -iscanner.icm in.jpg out.jpg To convert from monitor1 to monitor2: jpgicc -imon1.icm -omon2.icm in.jpg out.jpg To make a CMYK separation: jpgicc -oprinter.icm inrgb.jpg outcmyk.jpg To recover sRGB from a CMYK separation: jpgicc -iprinter.icm incmyk.jpg outrgb.jpg To convert from CIELab ITU/Fax JPEG to sRGB jpgicc -iitufax.icm in.jpg out.jpg To convert from CIELab ITU/Fax JPEG to sRGB jpgicc in.jpg out.jpg .fi .SH NOTES For suggestions, comments, bug reports etc. send mail to info@littlecms.com. .SH SEE ALSO .BR linkicc (1), .BR psicc (1), .BR tificc (1), .BR transicc (1) .SH AUTHOR This manual page was written by Shiju p. Nair , for the Debian project. lcms2-2.12rc1/utils/jpgicc/Makefile.am0000644000175000017500000000121713775114656016551 0ustar martimarti# # Makefile for building jpegicc # Written by Bob Friesenhahn, June 2003 # Bugs introduced by Marti Maria on October 2004 # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common if HasJPEG bin_PROGRAMS = jpgicc else bin_PROGRAMS = endif jpgicc_LDADD = $(top_builddir)/src/liblcms2.la @JPEGICC_DEPLIBS@ jpgicc_LDFLAGS = @LDFLAGS@ jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = jpgicc.1 EXTRA_DIST = iccjpeg.h $(man_MANS) lcms2-2.12rc1/utils/jpgicc/LICENSE_iccjpeg0000755000175000017500000000624213775114656017214 0ustar martimarti THIS LICENSE APPLIES ONLY TO iccjpeg.c file ----- In plain English: 1. We don't promise that this software works. (But if you find any bugs, please let us know!) 2. You can use this software for whatever you want. You don't have to pay us. 3. You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code. In legalese: The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. This software is copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. All Rights Reserved except as specified below. Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltmain.sh). Another support script, install-sh, is copyright by X Consortium but is also freely distributable. The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders. We are required to state that "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated." lcms2-2.12rc1/utils/jpgicc/jpgicc.c0000644000175000017500000010424113775114656016121 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // // This program does apply profiles to (some) JPEG files #include "utils.h" #include "jpeglib.h" #include "iccjpeg.h" // Flags static cmsBool BlackPointCompensation = FALSE; static cmsBool IgnoreEmbedded = FALSE; static cmsBool GamutCheck = FALSE; static cmsBool lIsITUFax = FALSE; static cmsBool lIsPhotoshopApp13 = FALSE; static cmsBool lIsEXIF; static cmsBool lIsDeviceLink = FALSE; static cmsBool EmbedProfile = FALSE; static const char* SaveEmbedded = NULL; static int Intent = INTENT_PERCEPTUAL; static int ProofingIntent = INTENT_PERCEPTUAL; static int PrecalcMode = 1; static int jpegQuality = 75; static cmsFloat64Number ObserverAdaptationState = 0; static char *cInpProf = NULL; static char *cOutProf = NULL; static char *cProofing = NULL; static FILE * InFile; static FILE * OutFile; static struct jpeg_decompress_struct Decompressor; static struct jpeg_compress_struct Compressor; static struct my_error_mgr { struct jpeg_error_mgr pub; // "public" fields void* Cargo; // "private" fields } ErrorHandler; cmsUInt16Number Alarm[4] = {128,128,128,0}; static void my_error_exit (j_common_ptr cinfo) { char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message) (cinfo, buffer); FatalError(buffer); } /* Definition of the APPn Markers Defined for continuous-tone G3FAX The application code APP1 initiates identification of the image as a G3FAX application and defines the spatial resolution and subsampling. This marker directly follows the SOI marker. The data format will be as follows: X'FFE1' (APP1), length, FAX identifier, version, spatial resolution. The above terms are defined as follows: Length: (Two octets) Total APP1 field octet count including the octet count itself, but excluding the APP1 marker. FAX identifier: (Six octets) X'47', X'33', X'46', X'41', X'58', X'00'. This X'00'-terminated string "G3FAX" uniquely identifies this APP1 marker. Version: (Two octets) X'07CA'. This string specifies the year of approval of the standard, for identification in the case of future revision (for example, 1994). Spatial Resolution: (Two octets) Lightness pixel density in pels/25.4 mm. The basic value is 200. Allowed values are 100, 200, 300, 400, 600 and 1200 pels/25.4 mm, with square (or equivalent) pels. NOTE - The functional equivalence of inch-based and mm-based resolutions is maintained. For example, the 200 x 200 */ static cmsBool IsITUFax(jpeg_saved_marker_ptr ptr) { while (ptr) { if (ptr -> marker == (JPEG_APP0 + 1) && ptr -> data_length > 5) { const char* data = (const char*) ptr -> data; if (strcmp(data, "G3FAX") == 0) return TRUE; } ptr = ptr -> next; } return FALSE; } // Save a ITU T.42/Fax marker with defaults on boundaries. This is the only mode we support right now. static void SetITUFax(j_compress_ptr cinfo) { unsigned char Marker[] = "G3FAX\x00\0x07\xCA\x00\xC8"; jpeg_write_marker(cinfo, (JPEG_APP0 + 1), Marker, 10); } // Build a profile for decoding ITU T.42/Fax JPEG streams. // The profile has an additional ability in the input direction of // gamut compress values between 85 < a < -85 and -75 < b < 125. This conforms // the default range for ITU/T.42 -- See RFC 2301, section 6.2.3 for details // L* = [0, 100] // a* = [-85, 85] // b* = [-75, 125] // These functions does convert the encoding of ITUFAX to floating point // and vice-versa. No gamut mapping is performed yet. static void ITU2Lab(const cmsUInt16Number In[3], cmsCIELab* Lab) { Lab -> L = (double) In[0] / 655.35; Lab -> a = (double) 170.* (In[1] - 32768.) / 65535.; Lab -> b = (double) 200.* (In[2] - 24576.) / 65535.; } static void Lab2ITU(const cmsCIELab* Lab, cmsUInt16Number Out[3]) { Out[0] = (cmsUInt16Number) floor((double) (Lab -> L / 100.)* 65535. ); Out[1] = (cmsUInt16Number) floor((double) (Lab -> a / 170.)* 65535. + 32768. ); Out[2] = (cmsUInt16Number) floor((double) (Lab -> b / 200.)* 65535. + 24576. ); } // These are the samplers-- They are passed as callbacks to cmsStageSampleCLut16bit() // then, cmsSample3DGrid() will sweel whole Lab gamut calling these functions // once for each node. In[] will contain the Lab PCS value to convert to ITUFAX // on PCS2ITU, or the ITUFAX value to convert to Lab in ITU2PCS // You can change the number of sample points if desired, the algorithm will // remain same. 33 points gives good accuracy, but you can reduce to 22 or less // is space is critical #define GRID_POINTS 33 static int PCS2ITU(register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) { cmsCIELab Lab; cmsLabEncoded2Float(&Lab, In); cmsDesaturateLab(&Lab, 85, -85, 125, -75); // This function does the necessary gamut remapping Lab2ITU(&Lab, Out); return TRUE; UTILS_UNUSED_PARAMETER(Cargo); } static int ITU2PCS( register const cmsUInt16Number In[], register cmsUInt16Number Out[], register void* Cargo) { cmsCIELab Lab; ITU2Lab(In, &Lab); cmsFloat2LabEncoded(Out, &Lab); return TRUE; UTILS_UNUSED_PARAMETER(Cargo); } // This function does create the virtual input profile, which decodes ITU to the profile connection space static cmsHPROFILE CreateITU2PCS_ICC(void) { cmsHPROFILE hProfile; cmsPipeline* AToB0; cmsStage* ColorMap; AToB0 = cmsPipelineAlloc(0, 3, 3); if (AToB0 == NULL) return NULL; ColorMap = cmsStageAllocCLut16bit(0, GRID_POINTS, 3, 3, NULL); if (ColorMap == NULL) return NULL; cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, ColorMap); cmsStageSampleCLut16bit(ColorMap, ITU2PCS, NULL, 0); hProfile = cmsCreateProfilePlaceholder(0); if (hProfile == NULL) { cmsPipelineFree(AToB0); return NULL; } cmsWriteTag(hProfile, cmsSigAToB0Tag, AToB0); cmsSetColorSpace(hProfile, cmsSigLabData); cmsSetPCS(hProfile, cmsSigLabData); cmsSetDeviceClass(hProfile, cmsSigColorSpaceClass); cmsPipelineFree(AToB0); return hProfile; } // This function does create the virtual output profile, with the necessary gamut mapping static cmsHPROFILE CreatePCS2ITU_ICC(void) { cmsHPROFILE hProfile; cmsPipeline* BToA0; cmsStage* ColorMap; BToA0 = cmsPipelineAlloc(0, 3, 3); if (BToA0 == NULL) return NULL; ColorMap = cmsStageAllocCLut16bit(0, GRID_POINTS, 3, 3, NULL); if (ColorMap == NULL) return NULL; cmsPipelineInsertStage(BToA0, cmsAT_BEGIN, ColorMap); cmsStageSampleCLut16bit(ColorMap, PCS2ITU, NULL, 0); hProfile = cmsCreateProfilePlaceholder(0); if (hProfile == NULL) { cmsPipelineFree(BToA0); return NULL; } cmsWriteTag(hProfile, cmsSigBToA0Tag, BToA0); cmsSetColorSpace(hProfile, cmsSigLabData); cmsSetPCS(hProfile, cmsSigLabData); cmsSetDeviceClass(hProfile, cmsSigColorSpaceClass); cmsPipelineFree(BToA0); return hProfile; } #define PS_FIXED_TO_FLOAT(h, l) ((float) (h) + ((float) (l)/(1<<16))) static cmsBool ProcessPhotoshopAPP13(JOCTET FAR *data, int datalen) { int i; for (i = 14; i < datalen; ) { long len; unsigned int type; if (!(GETJOCTET(data[i] ) == 0x38 && GETJOCTET(data[i+1]) == 0x42 && GETJOCTET(data[i+2]) == 0x49 && GETJOCTET(data[i+3]) == 0x4D)) break; // Not recognized i += 4; // identifying string type = (unsigned int) (GETJOCTET(data[i]<<8) + GETJOCTET(data[i+1])); i += 2; // resource type i += GETJOCTET(data[i]) + ((GETJOCTET(data[i]) & 1) ? 1 : 2); // resource name len = ((((GETJOCTET(data[i]<<8) + GETJOCTET(data[i+1]))<<8) + GETJOCTET(data[i+2]))<<8) + GETJOCTET(data[i+3]); i += 4; // Size if (type == 0x03ED && len >= 16) { Decompressor.X_density = (UINT16) PS_FIXED_TO_FLOAT(GETJOCTET(data[i]<<8) + GETJOCTET(data[i+1]), GETJOCTET(data[i+2]<<8) + GETJOCTET(data[i+3])); Decompressor.Y_density = (UINT16) PS_FIXED_TO_FLOAT(GETJOCTET(data[i+8]<<8) + GETJOCTET(data[i+9]), GETJOCTET(data[i+10]<<8) + GETJOCTET(data[i+11])); // Set the density unit to 1 since the // Vertical and Horizontal resolutions // are specified in Pixels per inch Decompressor.density_unit = 0x01; return TRUE; } i += len + ((len & 1) ? 1 : 0); // Alignment } return FALSE; } static cmsBool HandlePhotoshopAPP13(jpeg_saved_marker_ptr ptr) { while (ptr) { if (ptr -> marker == (JPEG_APP0 + 13) && ptr -> data_length > 9) { JOCTET FAR* data = ptr -> data; if(GETJOCTET(data[0]) == 0x50 && GETJOCTET(data[1]) == 0x68 && GETJOCTET(data[2]) == 0x6F && GETJOCTET(data[3]) == 0x74 && GETJOCTET(data[4]) == 0x6F && GETJOCTET(data[5]) == 0x73 && GETJOCTET(data[6]) == 0x68 && GETJOCTET(data[7]) == 0x6F && GETJOCTET(data[8]) == 0x70) { ProcessPhotoshopAPP13(data, ptr -> data_length); return TRUE; } } ptr = ptr -> next; } return FALSE; } typedef unsigned short uint16_t; typedef unsigned char uint8_t; typedef unsigned int uint32_t; #define INTEL_BYTE_ORDER 0x4949 #define XRESOLUTION 0x011a #define YRESOLUTION 0x011b #define RESOLUTION_UNIT 0x128 // Read a 16-bit word static uint16_t read16(uint8_t* arr, int pos, int swapBytes) { uint8_t b1 = arr[pos]; uint8_t b2 = arr[pos+1]; return (swapBytes) ? ((b2 << 8) | b1) : ((b1 << 8) | b2); } // Read a 32-bit word static uint32_t read32(uint8_t* arr, int pos, int swapBytes) { if(!swapBytes) { return (arr[pos] << 24) | (arr[pos+1] << 16) | (arr[pos+2] << 8) | arr[pos+3]; } return arr[pos] | (arr[pos+1] << 8) | (arr[pos+2] << 16) | (arr[pos+3] << 24); } static int read_tag(uint8_t* arr, int pos, int swapBytes, void* dest) { // Format should be 5 over here (rational) uint32_t format = read16(arr, pos + 2, swapBytes); // Components should be 1 uint32_t components = read32(arr, pos + 4, swapBytes); // Points to the value uint32_t offset; // sanity if (components != 1) return 0; if (format == 3) offset = pos + 8; else offset = read32(arr, pos + 8, swapBytes); switch (format) { case 5: // Rational { double num = read32(arr, offset, swapBytes); double den = read32(arr, offset + 4, swapBytes); *(double *) dest = num / den; } break; case 3: // uint 16 *(int*) dest = read16(arr, offset, swapBytes); break; default: return 0; } return 1; } // Handler for EXIF data static cmsBool HandleEXIF(struct jpeg_decompress_struct* cinfo) { jpeg_saved_marker_ptr ptr; uint32_t ifd_ofs; int pos = 0, swapBytes = 0; uint32_t i, numEntries; double XRes = -1, YRes = -1; int Unit = 2; // Inches for (ptr = cinfo ->marker_list; ptr; ptr = ptr ->next) { if ((ptr ->marker == JPEG_APP0+1) && ptr ->data_length > 6) { JOCTET FAR* data = ptr -> data; if (memcmp(data, "Exif\0\0", 6) == 0) { data += 6; // Skip EXIF marker // 8 byte TIFF header // first two determine byte order pos = 0; if (read16(data, pos, 0) == INTEL_BYTE_ORDER) { swapBytes = 1; } pos += 2; // next two bytes are always 0x002A (TIFF version) pos += 2; // offset to Image File Directory (includes the previous 8 bytes) ifd_ofs = read32(data, pos, swapBytes); // Search the directory for resolution tags numEntries = read16(data, ifd_ofs, swapBytes); for (i=0; i < numEntries; i++) { uint32_t entryOffset = ifd_ofs + 2 + (12 * i); uint32_t tag = read16(data, entryOffset, swapBytes); switch (tag) { case RESOLUTION_UNIT: if (!read_tag(data, entryOffset, swapBytes, &Unit)) return FALSE; break; case XRESOLUTION: if (!read_tag(data, entryOffset, swapBytes, &XRes)) return FALSE; break; case YRESOLUTION: if (!read_tag(data, entryOffset, swapBytes, &YRes)) return FALSE; break; default:; } } // Proceed if all found if (XRes != -1 && YRes != -1) { // 1 = None // 2 = inches // 3 = cm switch (Unit) { case 2: cinfo ->X_density = (UINT16) floor(XRes + 0.5); cinfo ->Y_density = (UINT16) floor(YRes + 0.5); break; case 1: cinfo ->X_density = (UINT16) floor(XRes * 2.54 + 0.5); cinfo ->Y_density = (UINT16) floor(YRes * 2.54 + 0.5); break; default: return FALSE; } cinfo ->density_unit = 1; /* 1 for dots/inch, or 2 for dots/cm.*/ } } } } return FALSE; } static cmsBool OpenInput(const char* FileName) { int m; lIsITUFax = FALSE; InFile = fopen(FileName, "rb"); if (InFile == NULL) { FatalError("Cannot open '%s'", FileName); } // Now we can initialize the JPEG decompression object. Decompressor.err = jpeg_std_error(&ErrorHandler.pub); ErrorHandler.pub.error_exit = my_error_exit; ErrorHandler.pub.output_message = my_error_exit; jpeg_create_decompress(&Decompressor); jpeg_stdio_src(&Decompressor, InFile); for (m = 0; m < 16; m++) jpeg_save_markers(&Decompressor, JPEG_APP0 + m, 0xFFFF); // setup_read_icc_profile(&Decompressor); fseek(InFile, 0, SEEK_SET); jpeg_read_header(&Decompressor, TRUE); return TRUE; } static cmsBool OpenOutput(const char* FileName) { OutFile = fopen(FileName, "wb"); if (OutFile == NULL) { FatalError("Cannot create '%s'", FileName); } Compressor.err = jpeg_std_error(&ErrorHandler.pub); ErrorHandler.pub.error_exit = my_error_exit; ErrorHandler.pub.output_message = my_error_exit; Compressor.input_components = Compressor.num_components = 4; jpeg_create_compress(&Compressor); jpeg_stdio_dest(&Compressor, OutFile); return TRUE; } static cmsBool Done(void) { jpeg_destroy_decompress(&Decompressor); jpeg_destroy_compress(&Compressor); return fclose(InFile) + fclose(OutFile); } // Build up the pixeltype descriptor static cmsUInt32Number GetInputPixelType(void) { int space, bps, extra, ColorChannels, Flavor; lIsITUFax = IsITUFax(Decompressor.marker_list); lIsPhotoshopApp13 = HandlePhotoshopAPP13(Decompressor.marker_list); lIsEXIF = HandleEXIF(&Decompressor); ColorChannels = Decompressor.num_components; extra = 0; // Alpha = None bps = 1; // 8 bits Flavor = 0; // Vanilla if (lIsITUFax) { space = PT_Lab; Decompressor.out_color_space = JCS_YCbCr; // Fake to don't touch } else switch (Decompressor.jpeg_color_space) { case JCS_GRAYSCALE: // monochrome space = PT_GRAY; Decompressor.out_color_space = JCS_GRAYSCALE; break; case JCS_RGB: // red/green/blue space = PT_RGB; Decompressor.out_color_space = JCS_RGB; break; case JCS_YCbCr: // Y/Cb/Cr (also known as YUV) space = PT_RGB; // Let IJG code to do the conversion Decompressor.out_color_space = JCS_RGB; break; case JCS_CMYK: // C/M/Y/K space = PT_CMYK; Decompressor.out_color_space = JCS_CMYK; if (Decompressor.saw_Adobe_marker) // Adobe keeps CMYK inverted, so change flavor Flavor = 1; // from vanilla to chocolate break; case JCS_YCCK: // Y/Cb/Cr/K space = PT_CMYK; Decompressor.out_color_space = JCS_CMYK; if (Decompressor.saw_Adobe_marker) // ditto Flavor = 1; break; default: FatalError("Unsupported color space (0x%x)", Decompressor.jpeg_color_space); return 0; } return (EXTRA_SH(extra)|CHANNELS_SH(ColorChannels)|BYTES_SH(bps)|COLORSPACE_SH(space)|FLAVOR_SH(Flavor)); } // Rearrange pixel type to build output descriptor static cmsUInt32Number ComputeOutputFormatDescriptor(cmsUInt32Number dwInput, int OutColorSpace) { int IsPlanar = T_PLANAR(dwInput); int Channels = 0; int Flavor = 0; switch (OutColorSpace) { case PT_GRAY: Channels = 1; break; case PT_RGB: case PT_CMY: case PT_Lab: case PT_YUV: case PT_YCbCr: Channels = 3; break; case PT_CMYK: if (Compressor.write_Adobe_marker) // Adobe keeps CMYK inverted, so change flavor to chocolate Flavor = 1; Channels = 4; break; default: FatalError("Unsupported output color space"); } return (COLORSPACE_SH(OutColorSpace)|PLANAR_SH(IsPlanar)|CHANNELS_SH(Channels)|BYTES_SH(1)|FLAVOR_SH(Flavor)); } // Equivalence between ICC color spaces and lcms color spaces static int GetProfileColorSpace(cmsHPROFILE hProfile) { cmsColorSpaceSignature ProfileSpace = cmsGetColorSpace(hProfile); return _cmsLCMScolorSpace(ProfileSpace); } static int GetDevicelinkColorSpace(cmsHPROFILE hProfile) { cmsColorSpaceSignature ProfileSpace = cmsGetPCS(hProfile); return _cmsLCMScolorSpace(ProfileSpace); } // From TRANSUPP static void jcopy_markers_execute(j_decompress_ptr srcinfo, j_compress_ptr dstinfo) { jpeg_saved_marker_ptr marker; /* In the current implementation, we don't actually need to examine the * option flag here; we just copy everything that got saved. * But to avoid confusion, we do not output JFIF and Adobe APP14 markers * if the encoder library already wrote one. */ for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) { if (dstinfo->write_JFIF_header && marker->marker == JPEG_APP0 && marker->data_length >= 5 && GETJOCTET(marker->data[0]) == 0x4A && GETJOCTET(marker->data[1]) == 0x46 && GETJOCTET(marker->data[2]) == 0x49 && GETJOCTET(marker->data[3]) == 0x46 && GETJOCTET(marker->data[4]) == 0) continue; /* reject duplicate JFIF */ if (dstinfo->write_Adobe_marker && marker->marker == JPEG_APP0+14 && marker->data_length >= 5 && GETJOCTET(marker->data[0]) == 0x41 && GETJOCTET(marker->data[1]) == 0x64 && GETJOCTET(marker->data[2]) == 0x6F && GETJOCTET(marker->data[3]) == 0x62 && GETJOCTET(marker->data[4]) == 0x65) continue; /* reject duplicate Adobe */ jpeg_write_marker(dstinfo, marker->marker, marker->data, marker->data_length); } } static void WriteOutputFields(int OutputColorSpace) { J_COLOR_SPACE in_space, jpeg_space; int components; switch (OutputColorSpace) { case PT_GRAY: in_space = jpeg_space = JCS_GRAYSCALE; components = 1; break; case PT_RGB: in_space = JCS_RGB; jpeg_space = JCS_YCbCr; components = 3; break; // red/green/blue case PT_YCbCr: in_space = jpeg_space = JCS_YCbCr; components = 3; break; // Y/Cb/Cr (also known as YUV) case PT_CMYK: in_space = JCS_CMYK; jpeg_space = JCS_YCCK; components = 4; break; // C/M/Y/components case PT_Lab: in_space = jpeg_space = JCS_YCbCr; components = 3; break; // Fake to don't touch default: FatalError("Unsupported output color space"); return; } if (jpegQuality >= 100) { // avoid destructive conversion when asking for lossless compression jpeg_space = in_space; } Compressor.in_color_space = in_space; Compressor.jpeg_color_space = jpeg_space; Compressor.input_components = Compressor.num_components = components; jpeg_set_defaults(&Compressor); jpeg_set_colorspace(&Compressor, jpeg_space); // Make sure to pass resolution through if (OutputColorSpace == PT_CMYK) Compressor.write_JFIF_header = 1; // Avoid subsampling on high quality factor jpeg_set_quality(&Compressor, jpegQuality, 1); if (jpegQuality >= 70) { int i; for(i=0; i < Compressor.num_components; i++) { Compressor.comp_info[i].h_samp_factor = 1; Compressor.comp_info[i].v_samp_factor = 1; } } } static void DoEmbedProfile(const char* ProfileFile) { FILE* f; size_t size, EmbedLen; cmsUInt8Number* EmbedBuffer; f = fopen(ProfileFile, "rb"); if (f == NULL) return; size = cmsfilelength(f); EmbedBuffer = (cmsUInt8Number*) malloc(size + 1); EmbedLen = fread(EmbedBuffer, 1, size, f); fclose(f); EmbedBuffer[EmbedLen] = 0; write_icc_profile (&Compressor, EmbedBuffer, (unsigned int) EmbedLen); free(EmbedBuffer); } static int DoTransform(cmsHTRANSFORM hXForm, int OutputColorSpace) { JSAMPROW ScanLineIn; JSAMPROW ScanLineOut; //Preserve resolution values from the original // (Thanks to Robert Bergs for finding out this bug) Compressor.density_unit = Decompressor.density_unit; Compressor.X_density = Decompressor.X_density; Compressor.Y_density = Decompressor.Y_density; // Compressor.write_JFIF_header = 1; jpeg_start_decompress(&Decompressor); jpeg_start_compress(&Compressor, TRUE); if (OutputColorSpace == PT_Lab) SetITUFax(&Compressor); // Embed the profile if needed if (EmbedProfile && cOutProf) DoEmbedProfile(cOutProf); ScanLineIn = (JSAMPROW) malloc((size_t) Decompressor.output_width * Decompressor.num_components); ScanLineOut = (JSAMPROW) malloc((size_t) Compressor.image_width * Compressor.num_components); while (Decompressor.output_scanline < Decompressor.output_height) { jpeg_read_scanlines(&Decompressor, &ScanLineIn, 1); cmsDoTransform(hXForm, ScanLineIn, ScanLineOut, Decompressor.output_width); jpeg_write_scanlines(&Compressor, &ScanLineOut, 1); } free(ScanLineIn); free(ScanLineOut); jpeg_finish_decompress(&Decompressor); jpeg_finish_compress(&Compressor); return TRUE; } // Transform one image static int TransformImage(char *cDefInpProf, char *cOutputProf) { cmsHPROFILE hIn, hOut, hProof; cmsHTRANSFORM xform; cmsUInt32Number wInput, wOutput; int OutputColorSpace; cmsUInt32Number dwFlags = 0; cmsUInt32Number EmbedLen; cmsUInt8Number* EmbedBuffer; cmsSetAdaptationState(ObserverAdaptationState); if (BlackPointCompensation) { dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; } switch (PrecalcMode) { case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; default:; } if (GamutCheck) { dwFlags |= cmsFLAGS_GAMUTCHECK; cmsSetAlarmCodes(Alarm); } // Take input color space wInput = GetInputPixelType(); if (lIsDeviceLink) { hIn = cmsOpenProfileFromFile(cDefInpProf, "r"); hOut = NULL; hProof = NULL; } else { if (!IgnoreEmbedded && read_icc_profile(&Decompressor, &EmbedBuffer, &EmbedLen)) { hIn = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen); if (Verbose) { fprintf(stdout, " (Embedded profile found)\n"); PrintProfileInformation(hIn); fflush(stdout); } if (hIn != NULL && SaveEmbedded != NULL) SaveMemoryBlock(EmbedBuffer, EmbedLen, SaveEmbedded); free(EmbedBuffer); } else { // Default for ITU/Fax if (cDefInpProf == NULL && T_COLORSPACE(wInput) == PT_Lab) cDefInpProf = "*Lab"; if (cDefInpProf != NULL && cmsstrcasecmp(cDefInpProf, "*lab") == 0) hIn = CreateITU2PCS_ICC(); else hIn = OpenStockProfile(0, cDefInpProf); } if (cOutputProf != NULL && cmsstrcasecmp(cOutputProf, "*lab") == 0) hOut = CreatePCS2ITU_ICC(); else hOut = OpenStockProfile(0, cOutputProf); hProof = NULL; if (cProofing != NULL) { hProof = OpenStockProfile(0, cProofing); if (hProof == NULL) { FatalError("Proofing profile couldn't be read."); } dwFlags |= cmsFLAGS_SOFTPROOFING; } } if (!hIn) FatalError("Input profile couldn't be read."); if (!lIsDeviceLink && !hOut) FatalError("Output profile couldn't be read."); // Assure both, input profile and input JPEG are on same colorspace if (cmsGetColorSpace(hIn) != _cmsICCcolorSpace(T_COLORSPACE(wInput))) FatalError("Input profile is not operating in proper color space"); // Output colorspace is given by output profile if (lIsDeviceLink) { OutputColorSpace = GetDevicelinkColorSpace(hIn); } else { OutputColorSpace = GetProfileColorSpace(hOut); } jpeg_copy_critical_parameters(&Decompressor, &Compressor); WriteOutputFields(OutputColorSpace); wOutput = ComputeOutputFormatDescriptor(wInput, OutputColorSpace); xform = cmsCreateProofingTransform(hIn, wInput, hOut, wOutput, hProof, Intent, ProofingIntent, dwFlags); if (xform == NULL) FatalError("Cannot transform by using the profiles"); DoTransform(xform, OutputColorSpace); jcopy_markers_execute(&Decompressor, &Compressor); cmsDeleteTransform(xform); cmsCloseProfile(hIn); cmsCloseProfile(hOut); if (hProof) cmsCloseProfile(hProof); return 1; } static void Help(int level) { UTILS_UNUSED_PARAMETER(level); fprintf(stderr, "usage: jpgicc [flags] input.jpg output.jpg\n"); fprintf(stderr, "\nflags:\n\n"); fprintf(stderr, "-v - Verbose\n"); fprintf(stderr, "-i - Input profile (defaults to sRGB)\n"); fprintf(stderr, "-o - Output profile (defaults to sRGB)\n"); PrintBuiltins(); PrintRenderingIntents(); fprintf(stderr, "-b - Black point compensation\n"); fprintf(stderr, "-d<0..1> - Observer adaptation state (abs.col. only)\n"); fprintf(stderr, "-n - Ignore embedded profile\n"); fprintf(stderr, "-e - Embed destination profile\n"); fprintf(stderr, "-s - Save embedded profile as \n"); fprintf(stderr, "\n"); fprintf(stderr, "-c<0,1,2,3> - Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1]\n"); fprintf(stderr, "\n"); fprintf(stderr, "-p - Soft proof profile\n"); fprintf(stderr, "-m<0,1,2,3> - SoftProof intent\n"); fprintf(stderr, "-g - Marks out-of-gamut colors on softproof\n"); fprintf(stderr, "-!,, - Out-of-gamut marker channel values\n"); fprintf(stderr, "\n"); fprintf(stderr, "-q<0..100> - Output JPEG quality\n"); fprintf(stderr, "Examples:\n\n" "To color correct from scanner to sRGB:\n" "\tjpgicc -iscanner.icm in.jpg out.jpg\n" "To convert from monitor1 to monitor2:\n" "\tjpgicc -imon1.icm -omon2.icm in.jpg out.jpg\n" "To make a CMYK separation:\n" "\tjpgicc -oprinter.icm inrgb.jpg outcmyk.jpg\n" "To recover sRGB from a CMYK separation:\n" "\tjpgicc -iprinter.icm incmyk.jpg outrgb.jpg\n" "To convert from CIELab ITU/Fax JPEG to sRGB\n" "\tjpgicc in.jpg out.jpg\n\n"); fprintf(stderr, "This program is intended to be a demo of the Little CMS\n" "color engine. Both lcms and this program are open source.\n" "You can obtain both in source code at https://www.littlecms.com\n" "For suggestions, comments, bug reports etc. send mail to\n" "info@littlecms.com\n\n"); exit(0); } // The toggles stuff static void HandleSwitches(int argc, char *argv[]) { int s; while ((s=xgetopt(argc,argv,"bBnNvVGgh:H:i:I:o:O:P:p:t:T:c:C:Q:q:M:m:L:l:eEs:S:!:D:d:-:")) != EOF) { switch (s) { case '-': if (strcmp(xoptarg, "help") == 0) { Help(0); } else { FatalError("Unknown option - run without args to see valid ones.\n"); } break; case 'b': case 'B': BlackPointCompensation = TRUE; break; case 'd': case 'D': ObserverAdaptationState = atof(xoptarg); if (ObserverAdaptationState < 0 || ObserverAdaptationState > 1.0) FatalError("Adaptation state should be 0..1"); break; case 'v': case 'V': Verbose = TRUE; break; case 'i': case 'I': if (lIsDeviceLink) FatalError("Device-link already specified"); cInpProf = xoptarg; break; case 'o': case 'O': if (lIsDeviceLink) FatalError("Device-link already specified"); cOutProf = xoptarg; break; case 'l': case 'L': if (cInpProf != NULL || cOutProf != NULL) FatalError("input/output profiles already specified"); cInpProf = xoptarg; lIsDeviceLink = TRUE; break; case 'p': case 'P': cProofing = xoptarg; break; case 't': case 'T': Intent = atoi(xoptarg); break; case 'N': case 'n': IgnoreEmbedded = TRUE; break; case 'e': case 'E': EmbedProfile = TRUE; break; case 'g': case 'G': GamutCheck = TRUE; break; case 'c': case 'C': PrecalcMode = atoi(xoptarg); if (PrecalcMode < 0 || PrecalcMode > 2) FatalError("Unknown precalc mode '%d'", PrecalcMode); break; case 'H': case 'h': { int a = atoi(xoptarg); Help(a); } break; case 'q': case 'Q': jpegQuality = atoi(xoptarg); if (jpegQuality > 100) jpegQuality = 100; if (jpegQuality < 0) jpegQuality = 0; break; case 'm': case 'M': ProofingIntent = atoi(xoptarg); break; case 's': case 'S': SaveEmbedded = xoptarg; break; case '!': if (sscanf(xoptarg, "%hu,%hu,%hu", &Alarm[0], &Alarm[1], &Alarm[2]) == 3) { int i; for (i=0; i < 3; i++) { Alarm[i] = (Alarm[i] << 8) | Alarm[i]; } } break; default: FatalError("Unknown option - run without args to see valid ones"); } } } int main(int argc, char* argv[]) { fprintf(stderr, "Little CMS ICC profile applier for JPEG - v3.3 [LittleCMS %2.2f]\n\n", LCMS_VERSION / 1000.0); fprintf(stderr, "Copyright (c) 1998-2020 Marti Maria Saguer. See COPYING file for details.\n"); fflush(stderr); InitUtils("jpgicc"); HandleSwitches(argc, argv); if ((argc - xoptind) != 2) { Help(0); } OpenInput(argv[xoptind]); OpenOutput(argv[xoptind+1]); TransformImage(cInpProf, cOutProf); if (Verbose) { fprintf(stdout, "\n"); fflush(stdout); } Done(); return 0; } lcms2-2.12rc1/utils/jpgicc/iccjpeg.c0000644000175000017500000002063613775114656016273 0ustar martimarti/* * iccprofile.c * * This file provides code to read and write International Color Consortium * (ICC) device profiles embedded in JFIF JPEG image files. The ICC has * defined a standard format for including such data in JPEG "APP2" markers. * The code given here does not know anything about the internal structure * of the ICC profile data; it just knows how to put the profile data into * a JPEG file being written, or get it back out when reading. * * This code depends on new features added to the IJG JPEG library as of * IJG release 6b; it will not compile or work with older IJG versions. * * NOTE: this code would need surgery to work on 16-bit-int machines * with ICC profiles exceeding 64K bytes in size. If you need to do that, * change all the "unsigned int" variables to "INT32". You'll also need * to find a malloc() replacement that can allocate more than 64K. */ #include "iccjpeg.h" #include /* define malloc() */ /* * Since an ICC profile can be larger than the maximum size of a JPEG marker * (64K), we need provisions to split it into multiple markers. The format * defined by the ICC specifies one or more APP2 markers containing the * following data: * Identifying string ASCII "ICC_PROFILE\0" (12 bytes) * Marker sequence number 1 for first APP2, 2 for next, etc (1 byte) * Number of markers Total number of APP2's used (1 byte) * Profile data (remainder of APP2 data) * Decoders should use the marker sequence numbers to reassemble the profile, * rather than assuming that the APP2 markers appear in the correct sequence. */ #define ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */ #define ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */ #define MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */ #define MAX_DATA_BYTES_IN_MARKER (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN) /* * This routine writes the given ICC profile data into a JPEG file. * It *must* be called AFTER calling jpeg_start_compress() and BEFORE * the first call to jpeg_write_scanlines(). * (This ordering ensures that the APP2 marker(s) will appear after the * SOI and JFIF or Adobe markers, but before all else.) */ void write_icc_profile (j_compress_ptr cinfo, const JOCTET *icc_data_ptr, unsigned int icc_data_len) { unsigned int num_markers; /* total number of markers we'll write */ int cur_marker = 1; /* per spec, counting starts at 1 */ unsigned int length; /* number of bytes to write in this marker */ /* Calculate the number of markers we'll need, rounding up of course */ num_markers = icc_data_len / MAX_DATA_BYTES_IN_MARKER; if (num_markers * MAX_DATA_BYTES_IN_MARKER != icc_data_len) num_markers++; while (icc_data_len > 0) { /* length of profile to put in this marker */ length = icc_data_len; if (length > MAX_DATA_BYTES_IN_MARKER) length = MAX_DATA_BYTES_IN_MARKER; icc_data_len -= length; /* Write the JPEG marker header (APP2 code and marker length) */ jpeg_write_m_header(cinfo, ICC_MARKER, (unsigned int) (length + ICC_OVERHEAD_LEN)); /* Write the marker identifying string "ICC_PROFILE" (null-terminated). * We code it in this less-than-transparent way so that the code works * even if the local character set is not ASCII. */ jpeg_write_m_byte(cinfo, 0x49); jpeg_write_m_byte(cinfo, 0x43); jpeg_write_m_byte(cinfo, 0x43); jpeg_write_m_byte(cinfo, 0x5F); jpeg_write_m_byte(cinfo, 0x50); jpeg_write_m_byte(cinfo, 0x52); jpeg_write_m_byte(cinfo, 0x4F); jpeg_write_m_byte(cinfo, 0x46); jpeg_write_m_byte(cinfo, 0x49); jpeg_write_m_byte(cinfo, 0x4C); jpeg_write_m_byte(cinfo, 0x45); jpeg_write_m_byte(cinfo, 0x0); /* Add the sequencing info */ jpeg_write_m_byte(cinfo, cur_marker); jpeg_write_m_byte(cinfo, (int) num_markers); /* Add the profile data */ while (length--) { jpeg_write_m_byte(cinfo, *icc_data_ptr); icc_data_ptr++; } cur_marker++; } } /* * Prepare for reading an ICC profile */ void setup_read_icc_profile (j_decompress_ptr cinfo) { /* Tell the library to keep any APP2 data it may find */ jpeg_save_markers(cinfo, ICC_MARKER, 0xFFFF); } /* * Handy subroutine to test whether a saved marker is an ICC profile marker. */ static boolean marker_is_icc (jpeg_saved_marker_ptr marker) { return marker->marker == ICC_MARKER && marker->data_length >= ICC_OVERHEAD_LEN && /* verify the identifying string */ GETJOCTET(marker->data[0]) == 0x49 && GETJOCTET(marker->data[1]) == 0x43 && GETJOCTET(marker->data[2]) == 0x43 && GETJOCTET(marker->data[3]) == 0x5F && GETJOCTET(marker->data[4]) == 0x50 && GETJOCTET(marker->data[5]) == 0x52 && GETJOCTET(marker->data[6]) == 0x4F && GETJOCTET(marker->data[7]) == 0x46 && GETJOCTET(marker->data[8]) == 0x49 && GETJOCTET(marker->data[9]) == 0x4C && GETJOCTET(marker->data[10]) == 0x45 && GETJOCTET(marker->data[11]) == 0x0; } /* * See if there was an ICC profile in the JPEG file being read; * if so, reassemble and return the profile data. * * TRUE is returned if an ICC profile was found, FALSE if not. * If TRUE is returned, *icc_data_ptr is set to point to the * returned data, and *icc_data_len is set to its length. * * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() * and must be freed by the caller with free() when the caller no longer * needs it. (Alternatively, we could write this routine to use the * IJG library's memory allocator, so that the data would be freed implicitly * at jpeg_finish_decompress() time. But it seems likely that many apps * will prefer to have the data stick around after decompression finishes.) * * NOTE: if the file contains invalid ICC APP2 markers, we just silently * return FALSE. You might want to issue an error message instead. */ boolean read_icc_profile (j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned int *icc_data_len) { jpeg_saved_marker_ptr marker; int num_markers = 0; int seq_no; JOCTET *icc_data; unsigned int total_length; #define MAX_SEQ_NO 255 /* sufficient since marker numbers are bytes */ char marker_present[MAX_SEQ_NO+1]; /* 1 if marker found */ unsigned int data_length[MAX_SEQ_NO+1]; /* size of profile data in marker */ unsigned int data_offset[MAX_SEQ_NO+1]; /* offset for data in marker */ *icc_data_ptr = NULL; /* avoid confusion if FALSE return */ *icc_data_len = 0; /* This first pass over the saved markers discovers whether there are * any ICC markers and verifies the consistency of the marker numbering. */ for (seq_no = 1; seq_no <= MAX_SEQ_NO; seq_no++) marker_present[seq_no] = 0; for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) { if (marker_is_icc(marker)) { if (num_markers == 0) num_markers = GETJOCTET(marker->data[13]); else if (num_markers != GETJOCTET(marker->data[13])) return FALSE; /* inconsistent num_markers fields */ seq_no = GETJOCTET(marker->data[12]); if (seq_no <= 0 || seq_no > num_markers) return FALSE; /* bogus sequence number */ if (marker_present[seq_no]) return FALSE; /* duplicate sequence numbers */ marker_present[seq_no] = 1; data_length[seq_no] = marker->data_length - ICC_OVERHEAD_LEN; } } if (num_markers == 0) return FALSE; /* Check for missing markers, count total space needed, * compute offset of each marker's part of the data. */ total_length = 0; for (seq_no = 1; seq_no <= num_markers; seq_no++) { if (marker_present[seq_no] == 0) return FALSE; /* missing sequence number */ data_offset[seq_no] = total_length; total_length += data_length[seq_no]; } if (total_length == 0) return FALSE; /* found only empty markers? */ /* Allocate space for assembled data */ icc_data = (JOCTET *) malloc(total_length * sizeof(JOCTET)); if (icc_data == NULL) return FALSE; /* oops, out of memory */ /* and fill it in */ for (marker = cinfo->marker_list; marker != NULL; marker = marker->next) { if (marker_is_icc(marker)) { JOCTET FAR *src_ptr; JOCTET *dst_ptr; unsigned int length; seq_no = GETJOCTET(marker->data[12]); dst_ptr = icc_data + data_offset[seq_no]; src_ptr = marker->data + ICC_OVERHEAD_LEN; length = data_length[seq_no]; while (length--) { *dst_ptr++ = *src_ptr++; } } } *icc_data_ptr = icc_data; *icc_data_len = total_length; return TRUE; } lcms2-2.12rc1/utils/jpgicc/iccjpeg.h0000644000175000017500000000523713775114656016300 0ustar martimarti/* * iccprofile.h * * This file provides code to read and write International Color Consortium * (ICC) device profiles embedded in JFIF JPEG image files. The ICC has * defined a standard format for including such data in JPEG "APP2" markers. * The code given here does not know anything about the internal structure * of the ICC profile data; it just knows how to put the profile data into * a JPEG file being written, or get it back out when reading. * * This code depends on new features added to the IJG JPEG library as of * IJG release 6b; it will not compile or work with older IJG versions. * * NOTE: this code would need surgery to work on 16-bit-int machines * with ICC profiles exceeding 64K bytes in size. See iccprofile.c * for details. */ #include /* needed to define "FILE", "NULL" */ #include "jpeglib.h" /* * This routine writes the given ICC profile data into a JPEG file. * It *must* be called AFTER calling jpeg_start_compress() and BEFORE * the first call to jpeg_write_scanlines(). * (This ordering ensures that the APP2 marker(s) will appear after the * SOI and JFIF or Adobe markers, but before all else.) */ extern void write_icc_profile JPP((j_compress_ptr cinfo, const JOCTET *icc_data_ptr, unsigned int icc_data_len)); /* * Reading a JPEG file that may contain an ICC profile requires two steps: * * 1. After jpeg_create_decompress() but before jpeg_read_header(), * call setup_read_icc_profile(). This routine tells the IJG library * to save in memory any APP2 markers it may find in the file. * * 2. After jpeg_read_header(), call read_icc_profile() to find out * whether there was a profile and obtain it if so. */ /* * Prepare for reading an ICC profile */ extern void setup_read_icc_profile JPP((j_decompress_ptr cinfo)); /* * See if there was an ICC profile in the JPEG file being read; * if so, reassemble and return the profile data. * * TRUE is returned if an ICC profile was found, FALSE if not. * If TRUE is returned, *icc_data_ptr is set to point to the * returned data, and *icc_data_len is set to its length. * * IMPORTANT: the data at **icc_data_ptr has been allocated with malloc() * and must be freed by the caller with free() when the caller no longer * needs it. (Alternatively, we could write this routine to use the * IJG library's memory allocator, so that the data would be freed implicitly * at jpeg_finish_decompress() time. But it seems likely that many apps * will prefer to have the data stick around after decompression finishes.) */ extern boolean read_icc_profile JPP((j_decompress_ptr cinfo, JOCTET **icc_data_ptr, unsigned int *icc_data_len)); lcms2-2.12rc1/utils/jpgicc/Makefile.in0000644000175000017500000005474313775114656016576 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building jpegicc # Written by Bob Friesenhahn, June 2003 # Bugs introduced by Marti Maria on October 2004 VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HasJPEG_TRUE@bin_PROGRAMS = jpgicc$(EXEEXT) subdir = utils/jpgicc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_jpgicc_OBJECTS = jpgicc.$(OBJEXT) iccjpeg.$(OBJEXT) \ ../common/xgetopt.$(OBJEXT) ../common/vprf.$(OBJEXT) jpgicc_OBJECTS = $(am_jpgicc_OBJECTS) jpgicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = jpgicc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(jpgicc_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = am__maybe_remake_depfiles = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(jpgicc_SOURCES) DIST_SOURCES = $(jpgicc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common jpgicc_LDADD = $(top_builddir)/src/liblcms2.la @JPEGICC_DEPLIBS@ jpgicc_LDFLAGS = @LDFLAGS@ jpgicc_SOURCES = jpgicc.c iccjpeg.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = jpgicc.1 EXTRA_DIST = iccjpeg.h $(man_MANS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/jpgicc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/jpgicc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ../common/$(am__dirstamp): @$(MKDIR_P) ../common @: > ../common/$(am__dirstamp) ../common/xgetopt.$(OBJEXT): ../common/$(am__dirstamp) ../common/vprf.$(OBJEXT): ../common/$(am__dirstamp) jpgicc$(EXEEXT): $(jpgicc_OBJECTS) $(jpgicc_DEPENDENCIES) $(EXTRA_jpgicc_DEPENDENCIES) @rm -f jpgicc$(EXEEXT) $(AM_V_CCLD)$(jpgicc_LINK) $(jpgicc_OBJECTS) $(jpgicc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../common/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../common/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/utils/tificc/0000755000175000017500000000000013775114656014516 5ustar martimartilcms2-2.12rc1/utils/tificc/tificc.10000644000175000017500000000566713775114656016057 0ustar martimarti.\"Shiju P. Nair September 30, 2004 .\"Thomas Weber April 23, 2014 .TH TIFICC 1 "October 23, 2004" .SH NAME tificc - little cms ICC profile applier for TIFF. .SH SYNOPSIS .B tificc .RI [ options ] " input.tif output.tif" .SH DESCRIPTION lcms is a standalone CMM engine, which deals with the color management. It implements a fast transformation between ICC profiles. .B tificc is a little cms ICC profile applier for TIFF. .SH OPTIONS .TP .B \-a Handle channels > 4 as alpha. .TP .B \-b Black point compensation. .TP .BI \-c\ NUM Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1]. .TP .BI \-d\ NUM Observer adaptation state (abs.col. only), (0..1.0, float value) [defaults to 0.0]. .TP .B \-e Embed destination profile. .TP .B \-g Marks out-of-gamut colors on softproof. .TP .BI \-h\ NUM Show summary of options and examples (0=help, 1=Examples, 2=Built-in profiles, 3=Contact information) .TP .BI \-i\ profile Input profile (defaults to sRGB). .TP .BI \-k\ inklimit Ink-limiting in % (CMYK only), (0..400.0, float value) [default 400.0]. .TP .BI \-l\ profile Transform by device-link profile. .TP .B \-m TODO: check if values outside 0..3 are possible SoftProof intent [defaults to 0]. .TP .B \-n Ignore embedded profile on input. .TP .BI \-o\ profile Output profile (defaults to sRGB). .TP .BI \-p\ profile Soft proof profile. .TP .BI \-s\ newprofile Save embedded profile as \fInewprofile\fR. .TP .BI \-t\ NUM Rendering intent .nf .RS 0=Perceptual [default] 1=Relative colorimetric 2=Saturation 3=Absolute colorimetric 10=Perceptual preserving black ink 11=Relative colorimetric preserving black ink 12=Saturation preserving black ink 13=Perceptual preserving black plane 14=Relative colorimetric preserving black plane 15=Saturation preserving black plane .RE .fi .TP .B \-v Verbose. .TP .BI \-w\ NUM Output depth (8, 16 or 32). Use 32 for floating-point. .SH BUILT-IN PROFILES .nf *Lab2 -- D50-based v2 CIEL*a*b *Lab4 -- D50-based v4 CIEL*a*b *Lab -- D50-based v4 CIEL*a*b *XYZ -- CIE XYZ (PCS) *sRGB -- sRGB color space *Gray22 - Monochrome of Gamma 2.2 *Gray30 - Monochrome of Gamma 3.0 *null - Monochrome black for all input *Lin2222- CMYK linearization of gamma 2.2 on each channel .fi .SH EXAMPLES .nf To color correct from scanner to sRGB: tificc -iscanner.icm in.tif out.tif To convert from monitor1 to monitor2: tificc -imon1.icm -omon2.icm in.tif out.tif To make a CMYK separation: tificc -oprinter.icm inrgb.tif outcmyk.tif To recover sRGB from a CMYK separation: tificc -iprinter.icm incmyk.tif outrgb.tif To convert from CIELab TIFF to sRGB tificc -i*Lab in.tif out.tif .fi .SH NOTES For suggestions, comments, bug reports etc. send mail to info@littlecms.com. .SH SEE ALSO .BR jpgicc (1), .BR linkicc (1), .BR psicc (1), .BR transicc (1) .SH AUTHOR This manual page was originally written by Shiju p. Nair , for the Debian project. Modified by Marti Maria to reflect further changes. lcms2-2.12rc1/utils/tificc/Makefile.am0000644000175000017500000000121013775114656016544 0ustar martimarti# # Makefile for building tificc # Originally written by Bob Friesenhahn, June 2003 # bugs introduced by Marti Maria # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common if HasTIFF bin_PROGRAMS = tificc else bin_PROGRAMS = endif tificc_LDADD = $(top_builddir)/src/liblcms2.la @TIFFICC_DEPLIBS@ tificc_LDFLAGS = @LDFLAGS@ tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = tificc.1 EXTRA_DIST = $(man_MANS) lcms2-2.12rc1/utils/tificc/tifdiff.c0000644000175000017500000004645013775114656016306 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "utils.h" #include "tiffio.h" // ------------------------------------------------------------------------ static TIFF *Tiff1, *Tiff2, *TiffDiff; static const char* TiffDiffFilename; static const char* CGATSout; typedef struct { double n, x, x2; double Min, Peak; } STAT, *LPSTAT; static STAT ColorantStat[4]; static STAT EuclideanStat; static STAT ColorimetricStat; static uint16 Channels; static cmsHPROFILE hLab; static void ConsoleWarningHandler(const char* module, const char* fmt, va_list ap) { char e[512] = { '\0' }; if (module != NULL) strcat(strcpy(e, module), ": "); vsprintf(e+strlen(e), fmt, ap); strcat(e, "."); if (Verbose) { fprintf(stderr, "\nWarning"); fprintf(stderr, " %s\n", e); fflush(stderr); } } static void ConsoleErrorHandler(const char* module, const char* fmt, va_list ap) { char e[512] = { '\0' }; if (module != NULL) strcat(strcpy(e, module), ": "); vsprintf(e+strlen(e), fmt, ap); strcat(e, "."); fprintf(stderr, "\nError"); fprintf(stderr, " %s\n", e); fflush(stderr); } static void Help() { fprintf(stderr, "Little CMS TIFF compare utility. v1.1\n\n"); fprintf(stderr, "usage: tiffdiff [flags] input.tif output.tif\n"); fprintf(stderr, "\nflags:\n\n"); fprintf(stderr, "-o - Output TIFF file\n"); fprintf(stderr, "-g - Output results in CGATS file\n"); fprintf(stderr, "\n"); fprintf(stderr, "-v - Verbose (show warnings)\n"); fprintf(stderr, "-h - This help\n"); fflush(stderr); exit(0); } // The toggles stuff static void HandleSwitches(int argc, char *argv[]) { int s; while ((s=xgetopt(argc,argv,"o:O:hHvVg:G:")) != EOF) { switch (s) { case 'v': case 'V': Verbose = TRUE; break; case 'o': case 'O': TiffDiffFilename = xoptarg; break; case 'H': case 'h': Help(); break; case 'g': case 'G': CGATSout = xoptarg; break; default: FatalError("Unknown option - run without args to see valid ones"); } } } static void ClearStatistics(LPSTAT st) { st ->n = st ->x = st->x2 = st->Peak = 0; st ->Min = 1E10; } static void AddOnePixel(LPSTAT st, double dE) { st-> x += dE; st ->x2 += (dE * dE); st->n += 1.0; if (dE > st ->Peak) st ->Peak = dE; if (dE < st ->Min) st ->Min= dE; } static double Std(LPSTAT st) { return sqrt((st->n * st->x2 - st->x * st->x) / (st->n*(st->n-1))); } static double Mean(LPSTAT st) { return st ->x/st ->n; } // Build up the pixeltype descriptor static cmsUInt32Number GetInputPixelType(TIFF *Bank) { uint16 Photometric, bps, spp, extra, PlanarConfig, *info; uint16 Compression, reverse = 0; int ColorChannels, IsPlanar = 0, pt = 0; TIFFGetField(Bank, TIFFTAG_PHOTOMETRIC, &Photometric); TIFFGetFieldDefaulted(Bank, TIFFTAG_BITSPERSAMPLE, &bps); if (bps == 1) FatalError("Sorry, bilevel TIFFs has nothig to do with ICC profiles"); if (bps != 8 && bps != 16) FatalError("Sorry, 8 or 16 bits per sample only"); TIFFGetFieldDefaulted(Bank, TIFFTAG_SAMPLESPERPIXEL, &spp); TIFFGetFieldDefaulted(Bank, TIFFTAG_PLANARCONFIG, &PlanarConfig); switch (PlanarConfig) { case PLANARCONFIG_CONTIG: IsPlanar = 0; break; case PLANARCONFIG_SEPARATE: FatalError("Planar TIFF are not supported"); default: FatalError("Unsupported planar configuration (=%d) ", (int) PlanarConfig); } // If Samples per pixel == 1, PlanarConfiguration is irrelevant and need // not to be included. if (spp == 1) IsPlanar = 0; // Any alpha? TIFFGetFieldDefaulted(Bank, TIFFTAG_EXTRASAMPLES, &extra, &info); ColorChannels = spp - extra; switch (Photometric) { case PHOTOMETRIC_MINISWHITE: reverse = 1; case PHOTOMETRIC_MINISBLACK: pt = PT_GRAY; break; case PHOTOMETRIC_RGB: pt = PT_RGB; break; case PHOTOMETRIC_PALETTE: FatalError("Sorry, palette images not supported (at least on this version)"); case PHOTOMETRIC_SEPARATED: pt = PixelTypeFromChanCount(ColorChannels); break; case PHOTOMETRIC_YCBCR: TIFFGetField(Bank, TIFFTAG_COMPRESSION, &Compression); { uint16 subx, suby; pt = PT_YCbCr; TIFFGetFieldDefaulted(Bank, TIFFTAG_YCBCRSUBSAMPLING, &subx, &suby); if (subx != 1 || suby != 1) FatalError("Sorry, subsampled images not supported"); } break; case 9: case PHOTOMETRIC_CIELAB: pt = PT_Lab; break; case PHOTOMETRIC_LOGLUV: /* CIE Log2(L) (u',v') */ TIFFSetField(Bank, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_16BIT); pt = PT_YUV; // *ICCSpace = icSigLuvData; bps = 16; // 16 bits forced by LibTiff break; default: FatalError("Unsupported TIFF color space (Photometric %d)", Photometric); } // Convert bits per sample to bytes per sample bps >>= 3; return (COLORSPACE_SH(pt)|PLANAR_SH(IsPlanar)|EXTRA_SH(extra)|CHANNELS_SH(ColorChannels)|BYTES_SH(bps)|FLAVOR_SH(reverse)); } static cmsUInt32Number OpenEmbedded(TIFF* tiff, cmsHPROFILE* PtrProfile, cmsHTRANSFORM* PtrXform) { cmsUInt32Number EmbedLen, dwFormat = 0; cmsUInt8Number* EmbedBuffer; *PtrProfile = NULL; *PtrXform = NULL; if (TIFFGetField(tiff, TIFFTAG_ICCPROFILE, &EmbedLen, &EmbedBuffer)) { *PtrProfile = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen); if (Verbose) { fprintf(stdout, "Embedded profile found:\n"); PrintProfileInformation(*PtrProfile); } dwFormat = GetInputPixelType(tiff); *PtrXform = cmsCreateTransform(*PtrProfile, dwFormat, hLab, TYPE_Lab_DBL, INTENT_RELATIVE_COLORIMETRIC, 0); } return dwFormat; } static size_t PixelSize(cmsUInt32Number dwFormat) { return T_BYTES(dwFormat) * (T_CHANNELS(dwFormat) + T_EXTRA(dwFormat)); } static int CmpImages(TIFF* tiff1, TIFF* tiff2, TIFF* diff) { cmsUInt8Number* buf1, *buf2, *buf3=NULL; int row, cols, imagewidth = 0, imagelength = 0; uint16 Photometric; double dE = 0; double dR, dG, dB, dC, dM, dY, dK; int rc = 0; cmsHPROFILE hProfile1 = 0, hProfile2 = 0; cmsHTRANSFORM xform1 = 0, xform2 = 0; cmsUInt32Number dwFormat1, dwFormat2; TIFFGetField(tiff1, TIFFTAG_PHOTOMETRIC, &Photometric); TIFFGetField(tiff1, TIFFTAG_IMAGEWIDTH, &imagewidth); TIFFGetField(tiff1, TIFFTAG_IMAGELENGTH, &imagelength); TIFFGetField(tiff1, TIFFTAG_SAMPLESPERPIXEL, &Channels); dwFormat1 = OpenEmbedded(tiff1, &hProfile1, &xform1); dwFormat2 = OpenEmbedded(tiff2, &hProfile2, &xform2); buf1 = (cmsUInt8Number*)_TIFFmalloc(TIFFScanlineSize(tiff1)); buf2 = (cmsUInt8Number*)_TIFFmalloc(TIFFScanlineSize(tiff2)); if (diff) { TIFFSetField(diff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); TIFFSetField(diff, TIFFTAG_COMPRESSION, COMPRESSION_NONE); TIFFSetField(diff, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField(diff, TIFFTAG_IMAGEWIDTH, imagewidth); TIFFSetField(diff, TIFFTAG_IMAGELENGTH, imagelength); TIFFSetField(diff, TIFFTAG_SAMPLESPERPIXEL, 1); TIFFSetField(diff, TIFFTAG_BITSPERSAMPLE, 8); buf3 = (cmsUInt8Number*)_TIFFmalloc(TIFFScanlineSize(diff)); } for (row = 0; row < imagelength; row++) { if (TIFFReadScanline(tiff1, buf1, row, 0) < 0) goto Error; if (TIFFReadScanline(tiff2, buf2, row, 0) < 0) goto Error; for (cols = 0; cols < imagewidth; cols++) { switch (Photometric) { case PHOTOMETRIC_MINISWHITE: case PHOTOMETRIC_MINISBLACK: dE = fabs(buf2[cols] - buf1[cols]); AddOnePixel(&ColorantStat[0], dE); AddOnePixel(&EuclideanStat, dE); break; case PHOTOMETRIC_RGB: { int index = 3 * cols; dR = fabs(buf2[index+0] - buf1[index+0]); dG = fabs(buf2[index+1] - buf1[index+1]); dB = fabs(buf2[index+2] - buf1[index+2]); dE = sqrt(dR * dR + dG * dG + dB * dB) / sqrt(3.); } AddOnePixel(&ColorantStat[0], dR); AddOnePixel(&ColorantStat[1], dG); AddOnePixel(&ColorantStat[2], dB); AddOnePixel(&EuclideanStat, dE); break; case PHOTOMETRIC_SEPARATED: { int index = 4 * cols; dC = fabs(buf2[index+0] - buf1[index+0]); dM = fabs(buf2[index+1] - buf1[index+1]); dY = fabs(buf2[index+2] - buf1[index+2]); dK = fabs(buf2[index+3] - buf1[index+3]); dE = sqrt(dC * dC + dM * dM + dY * dY + dK * dK) / 2.; } AddOnePixel(&ColorantStat[0], dC); AddOnePixel(&ColorantStat[1], dM); AddOnePixel(&ColorantStat[2], dY); AddOnePixel(&ColorantStat[3], dK); AddOnePixel(&EuclideanStat, dE); break; default: FatalError("Unsupported channels: %d", Channels); } if (xform1 && xform2) { cmsCIELab Lab1, Lab2; size_t index1 = cols * PixelSize(dwFormat1); size_t index2 = cols * PixelSize(dwFormat2); cmsDoTransform(xform1, &buf1[index1], &Lab1, 1); cmsDoTransform(xform2, &buf2[index2], &Lab2, 1); dE = cmsDeltaE(&Lab1, &Lab2); AddOnePixel(&ColorimetricStat, dE); } if (diff) { buf3[cols] = (cmsUInt8Number) floor(dE + 0.5); } } if (diff) { if (TIFFWriteScanline(diff, buf3, row, 0) < 0) goto Error; } } rc = 1; Error: if (hProfile1) cmsCloseProfile(hProfile1); if (hProfile2) cmsCloseProfile(hProfile2); if (xform1) cmsDeleteTransform(xform1); if (xform2) cmsDeleteTransform(xform2); _TIFFfree(buf1); _TIFFfree(buf2); if (diff) { TIFFWriteDirectory(diff); if (buf3 != NULL) _TIFFfree(buf3); } return rc; } static void AssureShortTagIs(TIFF* tif1, TIFF* tiff2, int tag, int Val, const char* Error) { uint16 v1; if (!TIFFGetField(tif1, tag, &v1)) goto Err; if (v1 != Val) goto Err; if (!TIFFGetField(tiff2, tag, &v1)) goto Err; if (v1 != Val) goto Err; return; Err: FatalError("%s is not proper", Error); } static int CmpShortTag(TIFF* tif1, TIFF* tif2, int tag) { uint16 v1, v2; if (!TIFFGetField(tif1, tag, &v1)) return 0; if (!TIFFGetField(tif2, tag, &v2)) return 0; return v1 == v2; } static int CmpLongTag(TIFF* tif1, TIFF* tif2, int tag) { uint32 v1, v2; if (!TIFFGetField(tif1, tag, &v1)) return 0; if (!TIFFGetField(tif2, tag, &v2)) return 0; return v1 == v2; } static void EqualShortTag(TIFF* tif1, TIFF* tif2, int tag, const char* Error) { if (!CmpShortTag(tif1, tif2, tag)) FatalError("%s is different", Error); } static void EqualLongTag(TIFF* tif1, TIFF* tif2, int tag, const char* Error) { if (!CmpLongTag(tif1, tif2, tag)) FatalError("%s is different", Error); } static void AddOneCGATSRow(cmsHANDLE hIT8, char *Name, LPSTAT st) { double Per100 = 100.0 * ((255.0 - Mean(st)) / 255.0); cmsIT8SetData(hIT8, Name, "SAMPLE_ID", Name); cmsIT8SetDataDbl(hIT8, Name, "PER100_EQUAL", Per100); cmsIT8SetDataDbl(hIT8, Name, "MEAN_DE", Mean(st)); cmsIT8SetDataDbl(hIT8, Name, "STDEV_DE", Std(st)); cmsIT8SetDataDbl(hIT8, Name, "MIN_DE", st ->Min); cmsIT8SetDataDbl(hIT8, Name, "MAX_DE", st ->Peak); } static void CreateCGATS(const char* TiffName1, const char* TiffName2) { cmsHANDLE hIT8 = cmsIT8Alloc(0); time_t ltime; char Buffer[256]; cmsIT8SetSheetType(hIT8, "TIFFDIFF"); sprintf(Buffer, "Differences between %s and %s", TiffName1, TiffName2); cmsIT8SetComment(hIT8, Buffer); cmsIT8SetPropertyStr(hIT8, "ORIGINATOR", "TIFFDIFF"); time( <ime ); strcpy(Buffer, ctime(<ime)); Buffer[strlen(Buffer)-1] = 0; // Remove the nasty "\n" cmsIT8SetPropertyStr(hIT8, "CREATED", Buffer); cmsIT8SetComment(hIT8, " "); cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_FIELDS", 6); cmsIT8SetDataFormat(hIT8, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8, 1, "PER100_EQUAL"); cmsIT8SetDataFormat(hIT8, 2, "MEAN_DE"); cmsIT8SetDataFormat(hIT8, 3, "STDEV_DE"); cmsIT8SetDataFormat(hIT8, 4, "MIN_DE"); cmsIT8SetDataFormat(hIT8, 5, "MAX_DE"); switch (Channels) { case 1: cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", 3); AddOneCGATSRow(hIT8, "GRAY_PLANE", &ColorantStat[0]); break; case 3: cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", 5); AddOneCGATSRow(hIT8, "R_PLANE", &ColorantStat[0]); AddOneCGATSRow(hIT8, "G_PLANE", &ColorantStat[1]); AddOneCGATSRow(hIT8, "B_PLANE", &ColorantStat[2]); break; case 4: cmsIT8SetPropertyDbl(hIT8, "NUMBER_OF_SETS", 6); AddOneCGATSRow(hIT8, "C_PLANE", &ColorantStat[0]); AddOneCGATSRow(hIT8, "M_PLANE", &ColorantStat[1]); AddOneCGATSRow(hIT8, "Y_PLANE", &ColorantStat[2]); AddOneCGATSRow(hIT8, "K_PLANE", &ColorantStat[3]); break; default: FatalError("Internal error: Bad ColorSpace"); } AddOneCGATSRow(hIT8, "EUCLIDEAN", &EuclideanStat); AddOneCGATSRow(hIT8, "COLORIMETRIC", &ColorimetricStat); cmsIT8SaveToFile(hIT8, CGATSout); cmsIT8Free(hIT8); } int main(int argc, char* argv[]) { int i; Tiff1 = Tiff2 = TiffDiff = NULL; InitUtils("tiffdiff"); HandleSwitches(argc, argv); if ((argc - xoptind) != 2) { Help(); } TIFFSetErrorHandler(ConsoleErrorHandler); TIFFSetWarningHandler(ConsoleWarningHandler); Tiff1 = TIFFOpen(argv[xoptind], "r"); if (Tiff1 == NULL) FatalError("Unable to open '%s'", argv[xoptind]); Tiff2 = TIFFOpen(argv[xoptind+1], "r"); if (Tiff2 == NULL) FatalError("Unable to open '%s'", argv[xoptind+1]); if (TiffDiffFilename) { TiffDiff = TIFFOpen(TiffDiffFilename, "w"); if (TiffDiff == NULL) FatalError("Unable to create '%s'", TiffDiffFilename); } AssureShortTagIs(Tiff1, Tiff2, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG, "Planar Config"); AssureShortTagIs(Tiff1, Tiff2, TIFFTAG_BITSPERSAMPLE, 8, "8 bit per sample"); EqualLongTag(Tiff1, Tiff2, TIFFTAG_IMAGEWIDTH, "Image width"); EqualLongTag(Tiff1, Tiff2, TIFFTAG_IMAGELENGTH, "Image length"); EqualShortTag(Tiff1, Tiff2, TIFFTAG_SAMPLESPERPIXEL, "Samples per pixel"); hLab = cmsCreateLab4Profile(NULL); ClearStatistics(&EuclideanStat); for (i=0; i < 4; i++) ClearStatistics(&ColorantStat[i]); if (!CmpImages(Tiff1, Tiff2, TiffDiff)) FatalError("Error comparing images"); if (CGATSout) { CreateCGATS(argv[xoptind], argv[xoptind+1]); } else { double Per100 = 100.0 * ((255.0 - Mean(&EuclideanStat)) / 255.0); printf("Digital counts %g%% equal. mean %g, min %g, max %g, Std %g\n", Per100, Mean(&EuclideanStat), EuclideanStat.Min, EuclideanStat.Peak, Std(&EuclideanStat)); if (ColorimetricStat.n > 0) { Per100 = 100.0 * ((255.0 - Mean(&ColorimetricStat)) / 255.0); printf("dE Colorimetric %g%% equal. mean %g, min %g, max %g, Std %g\n", Per100, Mean(&ColorimetricStat), ColorimetricStat.Min, ColorimetricStat.Peak, Std(&ColorimetricStat)); } } if (hLab) cmsCloseProfile(hLab); if (Tiff1) TIFFClose(Tiff1); if (Tiff2) TIFFClose(Tiff2); if (TiffDiff) TIFFClose(TiffDiff); return 0; } lcms2-2.12rc1/utils/tificc/tificc.c0000644000175000017500000010006013775114656016120 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // This program does apply profiles to (some) TIFF files #include "lcms2_plugin.h" #include "tiffio.h" #include "utils.h" // Flags static cmsBool BlackWhiteCompensation = FALSE; static cmsBool IgnoreEmbedded = FALSE; static cmsBool EmbedProfile = FALSE; static int Width = 8; static cmsBool GamutCheck = FALSE; static cmsBool lIsDeviceLink = FALSE; static cmsBool StoreAsAlpha = FALSE; static int Intent = INTENT_PERCEPTUAL; static int ProofingIntent = INTENT_PERCEPTUAL; static int PrecalcMode = 1; static cmsFloat64Number InkLimit = 400; static cmsFloat64Number ObserverAdaptationState = 1.0; // According ICC 4.3 this is the default static const char *cInpProf = NULL; static const char *cOutProf = NULL; static const char *cProofing = NULL; static const char* SaveEmbedded = NULL; // Console error & warning static void ConsoleWarningHandler(const char* module, const char* fmt, va_list ap) { char e[512] = { '\0' }; if (module != NULL) strcat(strcpy(e, module), ": "); vsprintf(e+strlen(e), fmt, ap); strcat(e, "."); if (Verbose) { fprintf(stderr, "\nWarning"); fprintf(stderr, " %s\n", e); fflush(stderr); } } static void ConsoleErrorHandler(const char* module, const char* fmt, va_list ap) { char e[512] = { '\0' }; if (module != NULL) { if (strlen(module) < 500) strcat(strcpy(e, module), ": "); } vsprintf(e+strlen(e), fmt, ap); strcat(e, "."); fprintf(stderr, "\nError"); fprintf(stderr, " %s\n", e); fflush(stderr); } // Issue a warning static void Warning(const char *frm, ...) { va_list args; va_start(args, frm); ConsoleWarningHandler("[tificc]", frm, args); va_end(args); } // Out of mememory is a fatal error static void OutOfMem(cmsUInt32Number size) { FatalError("Out of memory on allocating %d bytes.", size); } // ----------------------------------------------------------------------------------------------- // In TIFF, Lab is encoded in a different way, so let's use the plug-in // capabilities of lcms2 to change the meaning of TYPE_Lab_8. // * 0xffff / 0xff00 = (255 * 257) / (255 * 256) = 257 / 256 static int FromLabV2ToLabV4(int x) { int a; a = ((x << 8) | x) >> 8; // * 257 / 256 if ( a > 0xffff) return 0xffff; return a; } // * 0xf00 / 0xffff = * 256 / 257 static int FromLabV4ToLabV2(int x) { return ((x << 8) + 0x80) / 257; } // Formatter for 8bit Lab TIFF (photometric 8) static unsigned char* UnrollTIFFLab8(struct _cmstransform_struct* CMMcargo, register cmsUInt16Number wIn[], register cmsUInt8Number* accum, register cmsUInt32Number Stride) { wIn[0] = (cmsUInt16Number) FromLabV2ToLabV4((accum[0]) << 8); wIn[1] = (cmsUInt16Number) FromLabV2ToLabV4(((accum[1] > 127) ? (accum[1] - 128) : (accum[1] + 128)) << 8); wIn[2] = (cmsUInt16Number) FromLabV2ToLabV4(((accum[2] > 127) ? (accum[2] - 128) : (accum[2] + 128)) << 8); return accum + 3; UTILS_UNUSED_PARAMETER(Stride); UTILS_UNUSED_PARAMETER(CMMcargo); } // Formatter for 16bit Lab TIFF (photometric 8) static unsigned char* UnrollTIFFLab16(struct _cmstransform_struct* CMMcargo, register cmsUInt16Number wIn[], register cmsUInt8Number* accum, register cmsUInt32Number Stride ) { cmsUInt16Number* accum16 = (cmsUInt16Number*) accum; wIn[0] = (cmsUInt16Number) FromLabV2ToLabV4(accum16[0]); wIn[1] = (cmsUInt16Number) FromLabV2ToLabV4(((accum16[1] > 0x7f00) ? (accum16[1] - 0x8000) : (accum16[1] + 0x8000)) ); wIn[2] = (cmsUInt16Number) FromLabV2ToLabV4(((accum16[2] > 0x7f00) ? (accum16[2] - 0x8000) : (accum16[2] + 0x8000)) ); return accum + 3 * sizeof(cmsUInt16Number); UTILS_UNUSED_PARAMETER(Stride); UTILS_UNUSED_PARAMETER(CMMcargo); } static unsigned char* PackTIFFLab8(struct _cmstransform_struct* CMMcargo, register cmsUInt16Number wOut[], register cmsUInt8Number* output, register cmsUInt32Number Stride) { int a, b; *output++ = (cmsUInt8Number) (FromLabV4ToLabV2(wOut[0] + 0x0080) >> 8); a = (FromLabV4ToLabV2(wOut[1]) + 0x0080) >> 8; b = (FromLabV4ToLabV2(wOut[2]) + 0x0080) >> 8; *output++ = (cmsUInt8Number) ((a < 128) ? (a + 128) : (a - 128)); *output++ = (cmsUInt8Number) ((b < 128) ? (b + 128) : (b - 128)); return output; UTILS_UNUSED_PARAMETER(Stride); UTILS_UNUSED_PARAMETER(CMMcargo); } static unsigned char* PackTIFFLab16(struct _cmstransform_struct* CMMcargo, register cmsUInt16Number wOut[], register cmsUInt8Number* output, register cmsUInt32Number Stride) { int a, b; cmsUInt16Number* output16 = (cmsUInt16Number*) output; *output16++ = (cmsUInt16Number) FromLabV4ToLabV2(wOut[0]); a = FromLabV4ToLabV2(wOut[1]); b = FromLabV4ToLabV2(wOut[2]); *output16++ = (cmsUInt16Number) ((a < 0x7f00) ? (a + 0x8000) : (a - 0x8000)); *output16++ = (cmsUInt16Number) ((b < 0x7f00) ? (b + 0x8000) : (b - 0x8000)); return (cmsUInt8Number*) output16; UTILS_UNUSED_PARAMETER(Stride); UTILS_UNUSED_PARAMETER(CMMcargo); } static cmsFormatter TiffFormatterFactory(cmsUInt32Number Type, cmsFormatterDirection Dir, cmsUInt32Number dwFlags) { cmsFormatter Result = { NULL }; int bps = T_BYTES(Type); int IsTiffSpecial = (Type >> 23) & 1; if (IsTiffSpecial && !(dwFlags & CMS_PACK_FLAGS_FLOAT)) { if (Dir == cmsFormatterInput) { Result.Fmt16 = (bps == 1) ? UnrollTIFFLab8 : UnrollTIFFLab16; } else Result.Fmt16 = (bps == 1) ? PackTIFFLab8 : PackTIFFLab16; } return Result; } static cmsPluginFormatters TiffLabPlugin = { {cmsPluginMagicNumber, 2000, cmsPluginFormattersSig, NULL}, TiffFormatterFactory }; // Build up the pixeltype descriptor static cmsUInt32Number GetInputPixelType(TIFF *Bank) { uint16 Photometric, bps, spp, extra, PlanarConfig, *info; uint16 Compression, reverse = 0; int ColorChannels, IsPlanar = 0, pt = 0, IsFlt; int labTiffSpecial = FALSE; TIFFGetField(Bank, TIFFTAG_PHOTOMETRIC, &Photometric); TIFFGetFieldDefaulted(Bank, TIFFTAG_BITSPERSAMPLE, &bps); if (bps == 1) FatalError("Sorry, bilevel TIFFs has nothing to do with ICC profiles"); if (bps != 8 && bps != 16 && bps != 32) FatalError("Sorry, 8, 16 or 32 bits per sample only"); TIFFGetFieldDefaulted(Bank, TIFFTAG_SAMPLESPERPIXEL, &spp); TIFFGetFieldDefaulted(Bank, TIFFTAG_PLANARCONFIG, &PlanarConfig); switch (PlanarConfig) { case PLANARCONFIG_CONTIG: IsPlanar = 0; break; case PLANARCONFIG_SEPARATE: IsPlanar = 1; break; default: FatalError("Unsupported planar configuration (=%d) ", (int) PlanarConfig); } // If Samples per pixel == 1, PlanarConfiguration is irrelevant and need // not to be included. if (spp == 1) IsPlanar = 0; // Any alpha? TIFFGetFieldDefaulted(Bank, TIFFTAG_EXTRASAMPLES, &extra, &info); // Read alpha channels as colorant if (StoreAsAlpha) { ColorChannels = spp; extra = 0; } else ColorChannels = spp - extra; switch (Photometric) { case PHOTOMETRIC_MINISWHITE: reverse = 1; // ... fall through ... case PHOTOMETRIC_MINISBLACK: pt = PT_GRAY; break; case PHOTOMETRIC_RGB: pt = PT_RGB; break; case PHOTOMETRIC_PALETTE: FatalError("Sorry, palette images not supported"); break; case PHOTOMETRIC_SEPARATED: pt = PixelTypeFromChanCount(ColorChannels); break; case PHOTOMETRIC_YCBCR: TIFFGetField(Bank, TIFFTAG_COMPRESSION, &Compression); { uint16 subx, suby; pt = PT_YCbCr; TIFFGetFieldDefaulted(Bank, TIFFTAG_YCBCRSUBSAMPLING, &subx, &suby); if (subx != 1 || suby != 1) FatalError("Sorry, subsampled images not supported"); } break; case PHOTOMETRIC_ICCLAB: pt = PT_LabV2; break; case PHOTOMETRIC_CIELAB: pt = PT_Lab; labTiffSpecial = TRUE; break; case PHOTOMETRIC_LOGLUV: // CIE Log2(L) (u',v') TIFFSetField(Bank, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_16BIT); pt = PT_YUV; // *ICCSpace = icSigLuvData; bps = 16; // 16 bits forced by LibTiff break; default: FatalError("Unsupported TIFF color space (Photometric %d)", Photometric); } // Convert bits per sample to bytes per sample bps >>= 3; IsFlt = (bps == 0) || (bps == 4); return (FLOAT_SH(IsFlt)|COLORSPACE_SH(pt)|PLANAR_SH(IsPlanar)|EXTRA_SH(extra)|CHANNELS_SH(ColorChannels)|BYTES_SH(bps)|FLAVOR_SH(reverse) | (labTiffSpecial << 23) ); } // Rearrange pixel type to build output descriptor static cmsUInt32Number ComputeOutputFormatDescriptor(cmsUInt32Number dwInput, int OutColorSpace, int bps) { int IsPlanar = T_PLANAR(dwInput); int Channels = ChanCountFromPixelType(OutColorSpace); int IsFlt = (bps == 0) || (bps == 4); return (FLOAT_SH(IsFlt)|COLORSPACE_SH(OutColorSpace)|PLANAR_SH(IsPlanar)|CHANNELS_SH(Channels)|BYTES_SH(bps)); } // Tile based transforms static int TileBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes) { tsize_t BufSizeIn = TIFFTileSize(in); tsize_t BufSizeOut = TIFFTileSize(out); unsigned char *BufferIn, *BufferOut; ttile_t i, TileCount = TIFFNumberOfTiles(in) / nPlanes; uint32 tw, tl; int PixelCount, j; // Check for bad tiffs if (BufSizeIn > INT_MAX || BufSizeOut > INT_MAX) FatalError("Probably corrupted TIFF, tile too big."); TIFFGetFieldDefaulted(in, TIFFTAG_TILEWIDTH, &tw); TIFFGetFieldDefaulted(in, TIFFTAG_TILELENGTH, &tl); PixelCount = (int) tw * tl; BufferIn = (unsigned char *) _TIFFmalloc(BufSizeIn * nPlanes); if (!BufferIn) OutOfMem((cmsUInt32Number) BufSizeIn * nPlanes); BufferOut = (unsigned char *) _TIFFmalloc(BufSizeOut * nPlanes); if (!BufferOut) OutOfMem((cmsUInt32Number) BufSizeOut * nPlanes); for (i = 0; i < TileCount; i++) { for (j=0; j < nPlanes; j++) { if (TIFFReadEncodedTile(in, i + (j* TileCount), BufferIn + (j*BufSizeIn), BufSizeIn) < 0) goto cleanup; } cmsDoTransform(hXForm, BufferIn, BufferOut, PixelCount); for (j=0; j < nPlanes; j++) { if (TIFFWriteEncodedTile(out, i + (j*TileCount), BufferOut + (j*BufSizeOut), BufSizeOut) < 0) goto cleanup; } } _TIFFfree(BufferIn); _TIFFfree(BufferOut); return 1; cleanup: _TIFFfree(BufferIn); _TIFFfree(BufferOut); return 0; } // Strip based transforms static int StripBasedXform(cmsHTRANSFORM hXForm, TIFF* in, TIFF* out, int nPlanes) { tsize_t BufSizeIn = TIFFStripSize(in); tsize_t BufSizeOut = TIFFStripSize(out); unsigned char *BufferIn, *BufferOut; ttile_t i, StripCount = TIFFNumberOfStrips(in) / nPlanes; uint32 sw; uint32 sl; uint32 iml; int j; int PixelCount; // Check for bad tiffs if (BufSizeIn > INT_MAX || BufSizeOut > INT_MAX) FatalError("Probably corrupted TIFF, strip too big."); TIFFGetFieldDefaulted(in, TIFFTAG_IMAGEWIDTH, &sw); TIFFGetFieldDefaulted(in, TIFFTAG_ROWSPERSTRIP, &sl); TIFFGetFieldDefaulted(in, TIFFTAG_IMAGELENGTH, &iml); // It is possible to get infinite rows per strip if (sl == 0 || sl > iml) sl = iml; // One strip for whole image BufferIn = (unsigned char *) _TIFFmalloc(BufSizeIn * nPlanes); if (!BufferIn) OutOfMem((cmsUInt32Number) BufSizeIn * nPlanes); BufferOut = (unsigned char *) _TIFFmalloc(BufSizeOut * nPlanes); if (!BufferOut) OutOfMem((cmsUInt32Number) BufSizeOut * nPlanes); for (i = 0; i < StripCount; i++) { for (j=0; j < nPlanes; j++) { if (TIFFReadEncodedStrip(in, i + (j * StripCount), BufferIn + (j * BufSizeIn), BufSizeIn) < 0) goto cleanup; } PixelCount = (int) sw * (iml < sl ? iml : sl); iml -= sl; cmsDoTransform(hXForm, BufferIn, BufferOut, PixelCount); for (j=0; j < nPlanes; j++) { if (TIFFWriteEncodedStrip(out, i + (j * StripCount), BufferOut + j * BufSizeOut, BufSizeOut) < 0) goto cleanup; } } _TIFFfree(BufferIn); _TIFFfree(BufferOut); return 1; cleanup: _TIFFfree(BufferIn); _TIFFfree(BufferOut); return 0; } // Creates minimum required tags static void WriteOutputTags(TIFF *out, int Colorspace, int BytesPerSample) { int BitsPerSample = (8 * BytesPerSample); int nChannels = ChanCountFromPixelType(Colorspace); uint16 Extra[] = { EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA, EXTRASAMPLE_UNASSALPHA }; switch (Colorspace) { case PT_GRAY: TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); break; case PT_RGB: TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); break; case PT_CMY: TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); TIFFSetField(out, TIFFTAG_INKSET, 2); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); break; case PT_CMYK: TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 4); TIFFSetField(out, TIFFTAG_INKSET, INKSET_CMYK); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); break; case PT_Lab: if (BitsPerSample == 16) TIFFSetField(out, TIFFTAG_PHOTOMETRIC, 9); else TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_CIELAB); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3); TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); // Needed by TIFF Spec break; // Multi-ink separations case PT_MCH2: case PT_MCH3: case PT_MCH4: case PT_MCH5: case PT_MCH6: case PT_MCH7: case PT_MCH8: case PT_MCH9: case PT_MCH10: case PT_MCH11: case PT_MCH12: case PT_MCH13: case PT_MCH14: case PT_MCH15: TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_SEPARATED); TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, nChannels); if (StoreAsAlpha && nChannels >= 4) { // CMYK plus extra alpha TIFFSetField(out, TIFFTAG_EXTRASAMPLES, nChannels - 4, Extra); TIFFSetField(out, TIFFTAG_INKSET, 1); TIFFSetField(out, TIFFTAG_NUMBEROFINKS, 4); } else { TIFFSetField(out, TIFFTAG_INKSET, 2); TIFFSetField(out, TIFFTAG_NUMBEROFINKS, nChannels); } TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, BitsPerSample); break; default: FatalError("Unsupported output colorspace"); } if (Width == 32) TIFFSetField(out, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_IEEEFP); } // Copies a bunch of tages static void CopyOtherTags(TIFF* in, TIFF* out) { #define CopyField(tag, v) \ if (TIFFGetField(in, tag, &v)) TIFFSetField(out, tag, v) short shortv; uint32 ow, ol; cmsFloat32Number floatv; char *stringv; uint32 longv; CopyField(TIFFTAG_SUBFILETYPE, longv); TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &ow); TIFFGetField(in, TIFFTAG_IMAGELENGTH, &ol); TIFFSetField(out, TIFFTAG_IMAGEWIDTH, ow); TIFFSetField(out, TIFFTAG_IMAGELENGTH, ol); CopyField(TIFFTAG_PLANARCONFIG, shortv); CopyField(TIFFTAG_COMPRESSION, shortv); if (Width != 32) CopyField(TIFFTAG_PREDICTOR, shortv); CopyField(TIFFTAG_THRESHHOLDING, shortv); CopyField(TIFFTAG_FILLORDER, shortv); CopyField(TIFFTAG_ORIENTATION, shortv); CopyField(TIFFTAG_MINSAMPLEVALUE, shortv); CopyField(TIFFTAG_MAXSAMPLEVALUE, shortv); CopyField(TIFFTAG_XRESOLUTION, floatv); CopyField(TIFFTAG_YRESOLUTION, floatv); CopyField(TIFFTAG_RESOLUTIONUNIT, shortv); CopyField(TIFFTAG_ROWSPERSTRIP, longv); CopyField(TIFFTAG_XPOSITION, floatv); CopyField(TIFFTAG_YPOSITION, floatv); CopyField(TIFFTAG_IMAGEDEPTH, longv); CopyField(TIFFTAG_TILEDEPTH, longv); CopyField(TIFFTAG_TILEWIDTH, longv); CopyField(TIFFTAG_TILELENGTH, longv); CopyField(TIFFTAG_ARTIST, stringv); CopyField(TIFFTAG_IMAGEDESCRIPTION, stringv); CopyField(TIFFTAG_MAKE, stringv); CopyField(TIFFTAG_MODEL, stringv); CopyField(TIFFTAG_DATETIME, stringv); CopyField(TIFFTAG_HOSTCOMPUTER, stringv); CopyField(TIFFTAG_PAGENAME, stringv); CopyField(TIFFTAG_DOCUMENTNAME, stringv); } // A replacement for (the nonstandard) filelength static void DoEmbedProfile(TIFF* Out, const char* ProfileFile) { FILE* f; cmsInt32Number size; cmsUInt32Number EmbedLen; cmsUInt8Number* EmbedBuffer; f = fopen(ProfileFile, "rb"); if (f == NULL) return; size = cmsfilelength(f); if (size < 0) return; EmbedBuffer = (cmsUInt8Number*) malloc((size_t) size + 1); if (EmbedBuffer == NULL) { OutOfMem(size+1); return; } EmbedLen = (cmsUInt32Number) fread(EmbedBuffer, 1, (size_t) size, f); if (EmbedLen != (cmsUInt32Number) size) FatalError("Cannot read %ld bytes to %s", (long) size, ProfileFile); fclose(f); EmbedBuffer[EmbedLen] = 0; TIFFSetField(Out, TIFFTAG_ICCPROFILE, EmbedLen, EmbedBuffer); free(EmbedBuffer); } static cmsHPROFILE GetTIFFProfile(TIFF* in) { cmsCIExyYTRIPLE Primaries; cmsFloat32Number* chr; cmsCIExyY WhitePoint; cmsFloat32Number* wp; int i; cmsToneCurve* Curve[3]; cmsUInt16Number *gmr, *gmg, *gmb; cmsHPROFILE hProfile; cmsUInt32Number EmbedLen; cmsUInt8Number* EmbedBuffer; if (IgnoreEmbedded) return NULL; if (TIFFGetField(in, TIFFTAG_ICCPROFILE, &EmbedLen, &EmbedBuffer)) { hProfile = cmsOpenProfileFromMem(EmbedBuffer, EmbedLen); // Print description found in the profile if (Verbose && (hProfile != NULL)) { fprintf(stdout, "\n[Embedded profile]\n"); PrintProfileInformation(hProfile); fflush(stdout); } if (hProfile != NULL && SaveEmbedded != NULL) SaveMemoryBlock(EmbedBuffer, EmbedLen, SaveEmbedded); if (hProfile) return hProfile; } // Try to see if "colorimetric" tiff if (TIFFGetField(in, TIFFTAG_PRIMARYCHROMATICITIES, &chr)) { Primaries.Red.x = chr[0]; Primaries.Red.y = chr[1]; Primaries.Green.x = chr[2]; Primaries.Green.y = chr[3]; Primaries.Blue.x = chr[4]; Primaries.Blue.y = chr[5]; Primaries.Red.Y = Primaries.Green.Y = Primaries.Blue.Y = 1.0; if (TIFFGetField(in, TIFFTAG_WHITEPOINT, &wp)) { WhitePoint.x = wp[0]; WhitePoint.y = wp[1]; WhitePoint.Y = 1.0; // Transferfunction is a bit harder.... TIFFGetFieldDefaulted(in, TIFFTAG_TRANSFERFUNCTION, &gmr, &gmg, &gmb); Curve[0] = cmsBuildTabulatedToneCurve16(NULL, 256, gmr); Curve[1] = cmsBuildTabulatedToneCurve16(NULL, 256, gmg); Curve[2] = cmsBuildTabulatedToneCurve16(NULL, 256, gmb); hProfile = cmsCreateRGBProfileTHR(NULL, &WhitePoint, &Primaries, Curve); for (i=0; i < 3; i++) cmsFreeToneCurve(Curve[i]); if (Verbose) { fprintf(stdout, "\n[Colorimetric TIFF]\n"); } return hProfile; } } return NULL; } // Transform one image static int TransformImage(TIFF* in, TIFF* out, const char *cDefInpProf) { cmsHPROFILE hIn, hOut, hProof, hInkLimit = NULL; cmsHTRANSFORM xform; cmsUInt32Number wInput, wOutput; int OutputColorSpace; int bps = Width / 8; cmsUInt32Number dwFlags = 0; int nPlanes; // Observer adaptation state (only meaningful on absolute colorimetric intent) cmsSetAdaptationState(ObserverAdaptationState); if (EmbedProfile && cOutProf) DoEmbedProfile(out, cOutProf); if (BlackWhiteCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; switch (PrecalcMode) { case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; case 1: break; default: FatalError("Unknown precalculation mode '%d'", PrecalcMode); } if (GamutCheck) dwFlags |= cmsFLAGS_GAMUTCHECK; hProof = NULL; hOut = NULL; if (lIsDeviceLink) { hIn = cmsOpenProfileFromFile(cDefInpProf, "r"); } else { hIn = GetTIFFProfile(in); if (hIn == NULL) hIn = OpenStockProfile(NULL, cDefInpProf); hOut = OpenStockProfile(NULL, cOutProf); if (cProofing != NULL) { hProof = OpenStockProfile(NULL, cProofing); dwFlags |= cmsFLAGS_SOFTPROOFING; } } // Take input color space wInput = GetInputPixelType(in); // Assure both, input profile and input TIFF are on same colorspace if (_cmsLCMScolorSpace(cmsGetColorSpace(hIn)) != (int) T_COLORSPACE(wInput)) FatalError("Input profile is not operating in proper color space"); if (!lIsDeviceLink) OutputColorSpace = _cmsLCMScolorSpace(cmsGetColorSpace(hOut)); else OutputColorSpace = _cmsLCMScolorSpace(cmsGetPCS(hIn)); wOutput = ComputeOutputFormatDescriptor(wInput, OutputColorSpace, bps); WriteOutputTags(out, OutputColorSpace, bps); CopyOtherTags(in, out); // Ink limit if (InkLimit != 400.0 && (OutputColorSpace == PT_CMYK || OutputColorSpace == PT_CMY)) { cmsHPROFILE hProfiles[10]; int nProfiles = 0; hInkLimit = cmsCreateInkLimitingDeviceLink(cmsGetColorSpace(hOut), InkLimit); hProfiles[nProfiles++] = hIn; if (hProof) { hProfiles[nProfiles++] = hProof; hProfiles[nProfiles++] = hProof; } hProfiles[nProfiles++] = hOut; hProfiles[nProfiles++] = hInkLimit; xform = cmsCreateMultiprofileTransform(hProfiles, nProfiles, wInput, wOutput, Intent, dwFlags); } else { xform = cmsCreateProofingTransform(hIn, wInput, hOut, wOutput, hProof, Intent, ProofingIntent, dwFlags); } cmsCloseProfile(hIn); cmsCloseProfile(hOut); if (hInkLimit) cmsCloseProfile(hInkLimit); if (hProof) cmsCloseProfile(hProof); if (xform == NULL) return 0; // Planar stuff if (T_PLANAR(wInput)) nPlanes = T_CHANNELS(wInput) + T_EXTRA(wInput); else nPlanes = 1; // Handle tile by tile or strip by strip if (TIFFIsTiled(in)) { TileBasedXform(xform, in, out, nPlanes); } else { StripBasedXform(xform, in, out, nPlanes); } cmsDeleteTransform(xform); TIFFWriteDirectory(out); return 1; } // Print help static void Help(int level) { UTILS_UNUSED_PARAMETER(level); fprintf(stderr, "usage: tificc [flags] input.tif output.tif\n"); fprintf(stderr, "\nflags:\n\n"); fprintf(stderr, "-v - Verbose\n"); fprintf(stderr, "-i - Input profile (defaults to sRGB)\n"); fprintf(stderr, "-o - Output profile (defaults to sRGB)\n"); fprintf(stderr, "-l - Transform by device-link profile\n"); PrintBuiltins(); PrintRenderingIntents(); fprintf(stderr, "-b - Black point compensation\n"); fprintf(stderr, "-d<0..1> - Observer adaptation state (abs.col. only)\n"); fprintf(stderr, "-c<0,1,2,3> - Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes)\n"); fprintf(stderr, "\n"); fprintf(stderr, "-w<8,16,32> - Output depth. Use 32 for floating-point\n\n"); fprintf(stderr, "-a - Handle channels > 4 as alpha\n"); fprintf(stderr, "-n - Ignore embedded profile on input\n"); fprintf(stderr, "-e - Embed destination profile\n"); fprintf(stderr, "-s - Save embedded profile as \n"); fprintf(stderr, "\n"); fprintf(stderr, "-p - Soft proof profile\n"); fprintf(stderr, "-m - Soft proof intent\n"); fprintf(stderr, "-g - Marks out-of-gamut colors on softproof\n"); fprintf(stderr, "\n"); fprintf(stderr, "-k<0..400> - Ink-limiting in %% (CMYK only)\n"); fprintf(stderr, "\n"); fprintf(stderr, "Examples:\n\n" "To color correct from scanner to sRGB:\n" "\ttificc -iscanner.icm in.tif out.tif\n" "To convert from monitor1 to monitor2:\n" "\ttificc -imon1.icm -omon2.icm in.tif out.tif\n" "To make a CMYK separation:\n" "\ttificc -oprinter.icm inrgb.tif outcmyk.tif\n" "To recover sRGB from a CMYK separation:\n" "\ttificc -iprinter.icm incmyk.tif outrgb.tif\n" "To convert from CIELab TIFF to sRGB\n" "\ttificc -i*Lab in.tif out.tif\n\n"); fprintf(stderr, "This program is intended to be a demo of the Little CMS\n" "color engine. Both lcms and this program are open source.\n" "You can obtain both in source code at https://www.littlecms.com\n" "For suggestions, comments, bug reports etc. send mail to\n" "info@littlecms.com\n\n"); exit(0); } // The toggles stuff static void HandleSwitches(int argc, char *argv[]) { int s; while ((s=xgetopt(argc,argv,"aAeEbBw:W:nNvVGgh:H:i:I:o:O:P:p:t:T:c:C:l:L:M:m:K:k:S:s:D:d:-:")) != EOF) { switch (s) { case '-': if (strcmp(xoptarg, "help") == 0) { Help(0); } else { FatalError("Unknown option - run without args to see valid ones.\n"); } break; case 'a': case 'A': StoreAsAlpha = TRUE; break; case 'b': case 'B': BlackWhiteCompensation = TRUE; break; case 'c': case 'C': PrecalcMode = atoi(xoptarg); if (PrecalcMode < 0 || PrecalcMode > 3) FatalError("Unknown precalc mode '%d'", PrecalcMode); break; case 'd': case 'D': ObserverAdaptationState = atof(xoptarg); if (ObserverAdaptationState < 0 || ObserverAdaptationState > 1.0) Warning("Adaptation state should be 0..1"); break; case 'e': case 'E': EmbedProfile = TRUE; break; case 'g': case 'G': GamutCheck = TRUE; break; case 'v': case 'V': Verbose = TRUE; break; case 'i': case 'I': if (lIsDeviceLink) FatalError("Device-link already specified"); cInpProf = xoptarg; break; case 'o': case 'O': if (lIsDeviceLink) FatalError("Device-link already specified"); cOutProf = xoptarg; break; case 'l': case 'L': if (cInpProf != NULL || cOutProf != NULL) FatalError("input/output profiles already specified"); cInpProf = xoptarg; lIsDeviceLink = TRUE; break; case 'p': case 'P': cProofing = xoptarg; break; case 't': case 'T': Intent = atoi(xoptarg); break; case 'm': case 'M': ProofingIntent = atoi(xoptarg); break; case 'N': case 'n': IgnoreEmbedded = TRUE; break; case 'W': case 'w': Width = atoi(xoptarg); if (Width != 8 && Width != 16 && Width != 32) FatalError("Only 8, 16 and 32 bps are supported"); break; case 'k': case 'K': InkLimit = atof(xoptarg); if (InkLimit < 0.0 || InkLimit > 400.0) FatalError("Ink limit must be 0%%..400%%"); break; case 's': case 'S': SaveEmbedded = xoptarg; break; case 'H': case 'h': { int a = atoi(xoptarg); Help(a); } break; default: FatalError("Unknown option - run without args to see valid ones"); } } } // The main sink int main(int argc, char* argv[]) { TIFF *in, *out; fprintf(stderr, "Little CMS ICC profile applier for TIFF - v6.3 [LittleCMS %2.2f]\n\n", LCMS_VERSION / 1000.0); fprintf(stderr, "Copyright (c) 1998-2020 Marti Maria Saguer. See COPYING file for details.\n"); fflush(stderr); cmsPlugin(&TiffLabPlugin); InitUtils("tificc"); HandleSwitches(argc, argv); if ((argc - xoptind) != 2) { Help(0); } TIFFSetErrorHandler(ConsoleErrorHandler); TIFFSetWarningHandler(ConsoleWarningHandler); in = TIFFOpen(argv[xoptind], "r"); if (in == NULL) FatalError("Unable to open '%s'", argv[xoptind]); out = TIFFOpen(argv[xoptind+1], "w"); if (out == NULL) { TIFFClose(in); FatalError("Unable to write '%s'", argv[xoptind+1]); } do { TransformImage(in, out, cInpProf); } while (TIFFReadDirectory(in)); if (Verbose) { fprintf(stdout, "\n"); fflush(stdout); } TIFFClose(in); TIFFClose(out); return 0; } lcms2-2.12rc1/utils/tificc/Makefile.in0000644000175000017500000005467013775114656016577 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building tificc # Originally written by Bob Friesenhahn, June 2003 # bugs introduced by Marti Maria VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HasTIFF_TRUE@bin_PROGRAMS = tificc$(EXEEXT) subdir = utils/tificc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_tificc_OBJECTS = tificc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \ ../common/vprf.$(OBJEXT) tificc_OBJECTS = $(am_tificc_OBJECTS) tificc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = tificc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(tificc_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = am__maybe_remake_depfiles = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(tificc_SOURCES) DIST_SOURCES = $(tificc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common tificc_LDADD = $(top_builddir)/src/liblcms2.la @TIFFICC_DEPLIBS@ tificc_LDFLAGS = @LDFLAGS@ tificc_SOURCES = tificc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = tificc.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/tificc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/tificc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ../common/$(am__dirstamp): @$(MKDIR_P) ../common @: > ../common/$(am__dirstamp) ../common/xgetopt.$(OBJEXT): ../common/$(am__dirstamp) ../common/vprf.$(OBJEXT): ../common/$(am__dirstamp) tificc$(EXEEXT): $(tificc_OBJECTS) $(tificc_DEPENDENCIES) $(EXTRA_tificc_DEPENDENCIES) @rm -f tificc$(EXEEXT) $(AM_V_CCLD)$(tificc_LINK) $(tificc_OBJECTS) $(tificc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../common/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../common/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/utils/common/0000755000175000017500000000000013775114656014545 5ustar martimartilcms2-2.12rc1/utils/common/utils.h0000644000175000017500000000642113775114656016061 0ustar martimarti //--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- #ifndef _lcms_utils_h // Deal with Microsoft's attempt at deprecating C standard runtime functions #ifdef _MSC_VER # if (_MSC_VER >= 1400) # ifndef _CRT_SECURE_NO_DEPRECATE # define _CRT_SECURE_NO_DEPRECATE # endif # ifndef _CRT_SECURE_NO_WARNINGS # define _CRT_SECURE_NO_WARNINGS # endif # endif #endif #include "lcms2.h" #include #include #include #include #include #include #include #include // Avoid warnings #define UTILS_UNUSED_PARAMETER(x) ((void)x) // Init the utility functions void InitUtils(const char* PName); // Fatal Error (print the message and exit(1))--------------------------------------------- extern int Verbose; void FatalError(const char *frm, ...); // xgetopt() interface ------------------------------------------------------------- extern int xoptind; extern char *xoptarg; int xgetopt(int argc, char *argv[], char *optionS); // The stock profile utility ------------------------------------------------------- cmsHPROFILE OpenStockProfile(cmsContext ContextID, const char* File); // The print info utility ---------------------------------------------------------- void PrintProfileInformation(cmsHPROFILE h); // --------------------------------------------------------------------------------- void PrintRenderingIntents(void); void PrintBuiltins(void); // --------------------------------------------------------------------------------- cmsBool SaveMemoryBlock(const cmsUInt8Number* Buffer, cmsUInt32Number dwLen, const char* Filename); // --------------------------------------------------------------------------------- // Return a pixel type on depending on the number of channels int PixelTypeFromChanCount(int ColorChannels); // ------------------------------------------------------------------------------ // Return number of channels of pixel type int ChanCountFromPixelType(int ColorChannels); #define _lcms_utils_h #endif lcms2-2.12rc1/utils/common/vprf.c0000644000175000017500000002230213775114656015665 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "utils.h" int Verbose = 0; static char ProgramName[256] = ""; void FatalError(const char *frm, ...) { va_list args; va_start(args, frm); fprintf(stderr, "[%s fatal error]: ", ProgramName); vfprintf(stderr, frm, args); fprintf(stderr, "\n"); va_end(args); exit(1); } // Show errors to the end user (unless quiet option) static void MyErrorLogHandler(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { if (Verbose >= 0) fprintf(stderr, "[%s]: %s\n", ProgramName, Text); UTILS_UNUSED_PARAMETER(ErrorCode); UTILS_UNUSED_PARAMETER(ContextID); } void InitUtils(const char* PName) { strncpy(ProgramName, PName, sizeof(ProgramName)); ProgramName[sizeof(ProgramName)-1] = 0; cmsSetLogErrorHandler(MyErrorLogHandler); } // Virtual profiles are handled here. cmsHPROFILE OpenStockProfile(cmsContext ContextID, const char* File) { if (!File) return cmsCreate_sRGBProfileTHR(ContextID); if (cmsstrcasecmp(File, "*Lab2") == 0) return cmsCreateLab2ProfileTHR(ContextID, NULL); if (cmsstrcasecmp(File, "*Lab4") == 0) return cmsCreateLab4ProfileTHR(ContextID, NULL); if (cmsstrcasecmp(File, "*Lab") == 0) return cmsCreateLab4ProfileTHR(ContextID, NULL); if (cmsstrcasecmp(File, "*LabD65") == 0) { cmsCIExyY D65xyY; cmsWhitePointFromTemp( &D65xyY, 6504); return cmsCreateLab4ProfileTHR(ContextID, &D65xyY); } if (cmsstrcasecmp(File, "*XYZ") == 0) return cmsCreateXYZProfileTHR(ContextID); if (cmsstrcasecmp(File, "*Gray22") == 0) { cmsToneCurve* Curve = cmsBuildGamma(ContextID, 2.2); cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); return hProfile; } if (cmsstrcasecmp(File, "*Gray30") == 0) { cmsToneCurve* Curve = cmsBuildGamma(ContextID, 3.0); cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); return hProfile; } if (cmsstrcasecmp(File, "*srgb") == 0) return cmsCreate_sRGBProfileTHR(ContextID); if (cmsstrcasecmp(File, "*null") == 0) return cmsCreateNULLProfileTHR(ContextID); if (cmsstrcasecmp(File, "*Lin2222") == 0) { cmsToneCurve* Gamma = cmsBuildGamma(0, 2.2); cmsToneCurve* Gamma4[4]; cmsHPROFILE hProfile; Gamma4[0] = Gamma4[1] = Gamma4[2] = Gamma4[3] = Gamma; hProfile = cmsCreateLinearizationDeviceLink(cmsSigCmykData, Gamma4); cmsFreeToneCurve(Gamma); return hProfile; } return cmsOpenProfileFromFileTHR(ContextID, File, "r"); } // Help on available built-ins void PrintBuiltins(void) { fprintf(stderr, "\nBuilt-in profiles:\n\n"); fprintf(stderr, "\t*Lab2 -- D50-based v2 CIEL*a*b\n" "\t*Lab4 -- D50-based v4 CIEL*a*b\n" "\t*Lab -- D50-based v4 CIEL*a*b\n" "\t*XYZ -- CIE XYZ (PCS)\n" "\t*sRGB -- sRGB color space\n" "\t*Gray22 - Monochrome of Gamma 2.2\n" "\t*Gray30 - Monochrome of Gamma 3.0\n" "\t*null - Monochrome black for all input\n" "\t*Lin2222- CMYK linearization of gamma 2.2 on each channel\n\n"); } // Auxiliary for printing information on profile static void PrintInfo(cmsHPROFILE h, cmsInfoType Info) { char* text; int len; len = cmsGetProfileInfoASCII(h, Info, "en", "US", NULL, 0); if (len == 0) return; text = (char*) malloc(len * sizeof(char)); if (text == NULL) return; cmsGetProfileInfoASCII(h, Info, "en", "US", text, len); if (strlen(text) > 0) printf("%s\n", text); free(text); } // Displays the colorant table static void PrintColorantTable(cmsHPROFILE hInput, cmsTagSignature Sig, const char* Title) { cmsNAMEDCOLORLIST* list; int i, n; if (cmsIsTag(hInput, Sig)) { printf("%s:\n", Title); list = (cmsNAMEDCOLORLIST*) cmsReadTag(hInput, Sig); if (list == NULL) { printf("(Unavailable)\n"); return; } n = cmsNamedColorCount(list); for (i=0; i < n; i++) { char Name[cmsMAX_PATH]; cmsNamedColorInfo(list, i, Name, NULL, NULL, NULL, NULL); printf("\t%s\n", Name); } printf("\n"); } } void PrintProfileInformation(cmsHPROFILE hInput) { if (hInput == NULL) { fprintf(stderr, "*Wrong or corrupted profile*\n"); return; } PrintInfo(hInput, cmsInfoDescription); PrintInfo(hInput, cmsInfoManufacturer); PrintInfo(hInput, cmsInfoModel); PrintInfo(hInput, cmsInfoCopyright); if (Verbose > 2) { PrintColorantTable(hInput, cmsSigColorantTableTag, "Input colorant table"); PrintColorantTable(hInput, cmsSigColorantTableOutTag, "Input colorant out table"); } printf("\n"); } // ----------------------------------------------------------------------------- void PrintRenderingIntents(void) { cmsUInt32Number Codes[200]; char* Descriptions[200]; cmsUInt32Number n, i; fprintf(stderr, "-t rendering intent:\n\n"); n = cmsGetSupportedIntents(200, Codes, Descriptions); for (i=0; i < n; i++) { fprintf(stderr, "\t%u - %s\n", Codes[i], Descriptions[i]); } fprintf(stderr, "\n"); } // ------------------------------------------------------------------------------ cmsBool SaveMemoryBlock(const cmsUInt8Number* Buffer, cmsUInt32Number dwLen, const char* Filename) { FILE* out = fopen(Filename, "wb"); if (out == NULL) { FatalError("Cannot create '%s'", Filename); return FALSE; } if (fwrite(Buffer, 1, dwLen, out) != dwLen) { FatalError("Cannot write %ld bytes to %s", (long) dwLen, Filename); return FALSE; } if (fclose(out) != 0) { FatalError("Error flushing file '%s'", Filename); return FALSE; } return TRUE; } // ------------------------------------------------------------------------------ // Return a pixel type on depending on the number of channels int PixelTypeFromChanCount(int ColorChannels) { switch (ColorChannels) { case 1: return PT_GRAY; case 2: return PT_MCH2; case 3: return PT_MCH3; case 4: return PT_CMYK; case 5: return PT_MCH5; case 6: return PT_MCH6; case 7: return PT_MCH7; case 8: return PT_MCH8; case 9: return PT_MCH9; case 10: return PT_MCH10; case 11: return PT_MCH11; case 12: return PT_MCH12; case 13: return PT_MCH13; case 14: return PT_MCH14; case 15: return PT_MCH15; default: FatalError("What a weird separation of %d channels?!?!", ColorChannels); return -1; } } // ------------------------------------------------------------------------------ // Return number of channels of pixel type int ChanCountFromPixelType(int ColorChannels) { switch (ColorChannels) { case PT_GRAY: return 1; case PT_RGB: case PT_CMY: case PT_Lab: case PT_YUV: case PT_YCbCr: return 3; case PT_CMYK: return 4 ; case PT_MCH2: return 2 ; case PT_MCH3: return 3 ; case PT_MCH4: return 4 ; case PT_MCH5: return 5 ; case PT_MCH6: return 6 ; case PT_MCH7: return 7 ; case PT_MCH8: return 8 ; case PT_MCH9: return 9 ; case PT_MCH10: return 10; case PT_MCH11: return 11; case PT_MCH12: return 12; case PT_MCH13: return 12; case PT_MCH14: return 14; case PT_MCH15: return 15; default: FatalError("Unsupported color space of %d channels", ColorChannels); return -1; } } lcms2-2.12rc1/utils/common/xgetopt.c0000644000175000017500000000515513775114656016411 0ustar martimarti //--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // // xgetopt.c -- loosely based on System V getopt() // // option ::= SW [optLetter]* [argLetter space* argument] // #include #include int xoptind = 1; char *xoptarg; static char *nextArg = NULL; #define SW '-' int xgetopt(int argc, char* argv[], char* optionS) { unsigned char ch; char* optP; if (argc > xoptind) { if (nextArg == NULL) { if ((nextArg = argv[xoptind]) == NULL || *(nextArg++) != SW) goto end_eof; } if ((ch = *(nextArg++)) == 0) { xoptind++; goto end_eof; } if (ch == ':' || (optP = strchr(optionS, ch)) == NULL) goto end_error; if (*(++optP) == ':') { xoptind++; if (*nextArg == 0) { if (argc <= xoptind) goto end_error; nextArg = argv[xoptind++]; } xoptarg = nextArg; nextArg = NULL; } else { if (*nextArg == 0) { xoptind++; nextArg = NULL; } xoptarg = NULL; } return ch; } end_eof: xoptarg = nextArg = NULL; return EOF; end_error: xoptarg = NULL; return '?'; } lcms2-2.12rc1/utils/transicc/0000755000175000017500000000000013775114656015063 5ustar martimartilcms2-2.12rc1/utils/transicc/transicc.10000644000175000017500000000400313775114656016750 0ustar martimarti.\"Shiju P. Nair September 30, 2004 .\"Thomas Weber April 23, 2014 .TH TRANSICC 1 "MAY 30, 2011" .SH NAME transicc - little cms ColorSpace conversion calculator. .SH SYNOPSIS .B transicc .RI [ options ]\ [ CGATSINPUT ]\ [ CGATSOUTPUT ] .SH DESCRIPTION lcms is a standalone CMM engine, which deals with the color management. It implements a fast transformation between ICC profiles. .B transicc is a lcms ColorSpace conversion calculator. .SH OPTIONS .TP .B \-b Black point compensation. .TP .BI \-c\ NUM Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes) [defaults to 1]. .TP .BI \-d\ NUM Observer adaptation state (abs.col. only), (0..1.0, float value) [defaults to 0.0]. .TP .B \-e Encoded representation of numbers is not float (Option \fB\-w\fR=use 16 bits, Option \fB\-x\fR=hexadecimal). .TP .B \-g Marks out-of-gamut colors on softproof. .TP .BI \-i\ profile Input profile (defaults to sRGB). .TP .B \-l Transform by device-link profile. .TP .BI \-m\ NUM SoftProof intent (0,1,2,3) [defaults to 0]. .TP .B \-n Terse output, intended for pipe usage. .TP .BI \-o\ profile .p Output profile (defaults to sRGB). .TP .B \-q Quantize CGATS to 8 bits. .TP .BI \-s Bounded mode. .TP .BI \-t\ NUM Rendering intent .nf .RS 0=Perceptual [default] 1=Relative colorimetric 2=Saturation 3=Absolute colorimetric 10=Perceptual preserving black ink 11=Relative colorimetric preserving black ink 12=Saturation preserving black ink 13=Perceptual preserving black plane 14=Relative colorimetric preserving black plane 15=Saturation preserving black plane .RE .fi .TP .BI \-v\ verbosity Verbosity level, (0=None, 1=Normal, 2=High, 3=Very High) [defaults to 1]. .TP .B \-w Use 16 bits. .TP .B \-x Hexadecimal. .TP You can use '*Lab' and '*xyz' as built-in profiles. .SH NOTES For suggestions, comments, bug reports etc. send mail to info@littlecms.com. .SH SEE ALSO .BR jpgicc (1), .BR linkicc (1), .BR psicc (1), .BR tificc (1) .SH AUTHOR This manual page was written by Shiju p. Nair , for the Debian project. lcms2-2.12rc1/utils/transicc/transicc.c0000644000175000017500000010505413775114656017042 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "utils.h" #ifndef _MSC_VER # include #endif #ifdef CMS_IS_WINDOWS_ # include #endif #define MAX_INPUT_BUFFER 4096 // Global options static cmsBool InHexa = FALSE; static cmsBool GamutCheck = FALSE; static cmsBool Width16 = FALSE; static cmsBool BlackPointCompensation = FALSE; static cmsBool lIsDeviceLink = FALSE; static cmsBool lQuantize = FALSE; static cmsBool lUnbounded = TRUE; static cmsBool lIsFloat = TRUE; static cmsUInt32Number Intent = INTENT_PERCEPTUAL; static cmsUInt32Number ProofingIntent = INTENT_PERCEPTUAL; static int PrecalcMode = 0; // -------------------------------------------------------------- static char *cInProf = NULL; static char *cOutProf = NULL; static char *cProofing = NULL; static char *IncludePart = NULL; static cmsHANDLE hIT8in = NULL; // CGATS input static cmsHANDLE hIT8out = NULL; // CGATS output static char CGATSPatch[1024]; // Actual Patch Name static char CGATSoutFilename[cmsMAX_PATH]; static int nMaxPatches; static cmsHTRANSFORM hTrans, hTransXYZ, hTransLab; static cmsBool InputNamedColor = FALSE; static cmsColorSpaceSignature InputColorSpace, OutputColorSpace; static cmsNAMEDCOLORLIST* InputColorant = NULL; static cmsNAMEDCOLORLIST* OutputColorant = NULL; static cmsFloat64Number InputRange, OutputRange; // isatty replacement #ifdef _MSC_VER #define xisatty(x) _isatty( _fileno( (x) ) ) #else #define xisatty(x) isatty( fileno( (x) ) ) #endif //--------------------------------------------------------------------------------------------------- // Print usage to stderr static void Help(void) { fprintf(stderr, "usage: transicc [flags] [CGATS input] [CGATS output]\n\n"); fprintf(stderr, "flags:\n\n"); fprintf(stderr, "-v<0..3> - Verbosity level\n"); fprintf(stderr, "-e[op] - Encoded representation of numbers\n"); fprintf(stderr, "\t-w - use 16 bits\n"); fprintf(stderr, "\t-x - Hexadecimal\n\n"); fprintf(stderr, "-s - bounded mode (clip negatives and highlights)\n"); fprintf(stderr, "-q - Quantize (round decimals)\n\n"); fprintf(stderr, "-i - Input profile (defaults to sRGB)\n"); fprintf(stderr, "-o - Output profile (defaults to sRGB)\n"); fprintf(stderr, "-l - Transform by device-link profile\n"); PrintBuiltins(); PrintRenderingIntents(); fprintf(stderr, "\n"); fprintf(stderr, "-d<0..1> - Observer adaptation state (abs.col. only)\n\n"); fprintf(stderr, "-b - Black point compensation\n"); fprintf(stderr, "-c<0,1,2,3> Precalculates transform (0=Off, 1=Normal, 2=Hi-res, 3=LoRes)\n\n"); fprintf(stderr, "-n - Terse output, intended for pipe usage\n"); fprintf(stderr, "-p - Soft proof profile\n"); fprintf(stderr, "-m<0,1,2,3> - Soft proof intent\n"); fprintf(stderr, "-g - Marks out-of-gamut colors on softproof\n\n"); fprintf(stderr, "This program is intended to be a demo of the Little CMS\n" "color engine. Both lcms and this program are open source.\n" "You can obtain both in source code at https://www.littlecms.com\n" "For suggestions, comments, bug reports etc. send mail to\n" "info@littlecms.com\n\n"); } // The toggles stuff static void HandleSwitches(int argc, char *argv[]) { int s; while ((s = xgetopt(argc, argv, "bBC:c:d:D:eEgGI:i:L:l:m:M:nNO:o:p:P:QqSsT:t:V:v:WwxX!:-:")) != EOF) { switch (s){ case '-': if (strcmp(xoptarg, "help") == 0) { Help(); exit(0); } else { FatalError("Unknown option - run without args to see valid ones.\n"); } break; case '!': IncludePart = xoptarg; break; case 'b': case 'B': BlackPointCompensation = TRUE; break; case 'c': case 'C': PrecalcMode = atoi(xoptarg); if (PrecalcMode < 0 || PrecalcMode > 3) FatalError("Unknown precalc mode '%d'", PrecalcMode); break; case 'd': case 'D': { cmsFloat64Number ObserverAdaptationState = atof(xoptarg); if (ObserverAdaptationState < 0 || ObserverAdaptationState > 1.0) FatalError("Adaptation states should be between 0 and 1"); cmsSetAdaptationState(ObserverAdaptationState); } break; case 'e': case 'E': lIsFloat = FALSE; break; case 'g': case 'G': GamutCheck = TRUE; break; case 'i': case 'I': if (lIsDeviceLink) FatalError("icctrans: Device-link already specified"); cInProf = xoptarg; break; case 'l': case 'L': cInProf = xoptarg; lIsDeviceLink = TRUE; break; // No extra intents for proofing case 'm': case 'M': ProofingIntent = atoi(xoptarg); if (ProofingIntent > 3) FatalError("Unknown Proofing Intent '%d'", ProofingIntent); break; // For compatibility case 'n': case 'N': Verbose = 0; break; // Output profile case 'o': case 'O': if (lIsDeviceLink) FatalError("icctrans: Device-link already specified"); cOutProf = xoptarg; break; // Proofing profile case 'p': case 'P': cProofing = xoptarg; break; // Quantize (get rid of decimals) case 'q': case 'Q': lQuantize = TRUE; break; // Inhibit unbounded mode case 's': case 'S': lUnbounded = FALSE; break; // The intent case 't': case 'T': Intent = atoi(xoptarg); break; // Verbosity level case 'V': case 'v': Verbose = atoi(xoptarg); if (Verbose < 0 || Verbose > 3) { FatalError("Unknown verbosity level '%d'", Verbose); } break; // Wide (16 bits) case 'W': case 'w': Width16 = TRUE; break; // Hexadecimal case 'x': case 'X': InHexa = TRUE; break; default: FatalError("Unknown option - run without args to see valid ones.\n"); } } // If output CGATS involved, switch to float if ((argc - xoptind) > 2) { lIsFloat = TRUE; } } static void SetRange(cmsFloat64Number range, cmsBool IsInput) { if (IsInput) InputRange = range; else OutputRange = range; } // Populate a named color list with usual component names. // I am using the first Colorant channel to store the range, but it works since // this space is not used anyway. static cmsNAMEDCOLORLIST* ComponentNames(cmsColorSpaceSignature space, cmsBool IsInput) { cmsNAMEDCOLORLIST* out; int i, n; char Buffer[cmsMAX_PATH]; out = cmsAllocNamedColorList(0, 12, cmsMAXCHANNELS, "", ""); if (out == NULL) return NULL; switch (space) { case cmsSigXYZData: SetRange(100, IsInput); cmsAppendNamedColor(out, "X", NULL, NULL); cmsAppendNamedColor(out, "Y", NULL, NULL); cmsAppendNamedColor(out, "Z", NULL, NULL); break; case cmsSigLabData: SetRange(1, IsInput); cmsAppendNamedColor(out, "L*", NULL, NULL); cmsAppendNamedColor(out, "a*", NULL, NULL); cmsAppendNamedColor(out, "b*", NULL, NULL); break; case cmsSigLuvData: SetRange(1, IsInput); cmsAppendNamedColor(out, "L", NULL, NULL); cmsAppendNamedColor(out, "u", NULL, NULL); cmsAppendNamedColor(out, "v", NULL, NULL); break; case cmsSigYCbCrData: SetRange(255, IsInput); cmsAppendNamedColor(out, "Y", NULL, NULL ); cmsAppendNamedColor(out, "Cb", NULL, NULL); cmsAppendNamedColor(out, "Cr", NULL, NULL); break; case cmsSigYxyData: SetRange(1, IsInput); cmsAppendNamedColor(out, "Y", NULL, NULL); cmsAppendNamedColor(out, "x", NULL, NULL); cmsAppendNamedColor(out, "y", NULL, NULL); break; case cmsSigRgbData: SetRange(255, IsInput); cmsAppendNamedColor(out, "R", NULL, NULL); cmsAppendNamedColor(out, "G", NULL, NULL); cmsAppendNamedColor(out, "B", NULL, NULL); break; case cmsSigGrayData: SetRange(255, IsInput); cmsAppendNamedColor(out, "G", NULL, NULL); break; case cmsSigHsvData: SetRange(255, IsInput); cmsAppendNamedColor(out, "H", NULL, NULL); cmsAppendNamedColor(out, "s", NULL, NULL); cmsAppendNamedColor(out, "v", NULL, NULL); break; case cmsSigHlsData: SetRange(255, IsInput); cmsAppendNamedColor(out, "H", NULL, NULL); cmsAppendNamedColor(out, "l", NULL, NULL); cmsAppendNamedColor(out, "s", NULL, NULL); break; case cmsSigCmykData: SetRange(1, IsInput); cmsAppendNamedColor(out, "C", NULL, NULL); cmsAppendNamedColor(out, "M", NULL, NULL); cmsAppendNamedColor(out, "Y", NULL, NULL); cmsAppendNamedColor(out, "K", NULL, NULL); break; case cmsSigCmyData: SetRange(1, IsInput); cmsAppendNamedColor(out, "C", NULL, NULL); cmsAppendNamedColor(out, "M", NULL, NULL); cmsAppendNamedColor(out, "Y", NULL, NULL); break; default: SetRange(1, IsInput); n = cmsChannelsOf(space); for (i=0; i < n; i++) { sprintf(Buffer, "Channel #%d", i + 1); cmsAppendNamedColor(out, Buffer, NULL, NULL); } } return out; } // Creates all needed color transforms static cmsBool OpenTransforms(void) { cmsHPROFILE hInput, hOutput, hProof; cmsUInt32Number dwIn, dwOut, dwFlags; cmsNAMEDCOLORLIST* List; int i; // We don't need cache dwFlags = cmsFLAGS_NOCACHE; if (lIsDeviceLink) { hInput = OpenStockProfile(0, cInProf); if (hInput == NULL) return FALSE; hOutput = NULL; hProof = NULL; if (cmsGetDeviceClass(hInput) == cmsSigNamedColorClass) { OutputColorSpace = cmsGetColorSpace(hInput); InputColorSpace = cmsGetPCS(hInput); } else { InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetPCS(hInput); } // Read colorant tables if present if (cmsIsTag(hInput, cmsSigColorantTableTag)) { List = cmsReadTag(hInput, cmsSigColorantTableTag); InputColorant = cmsDupNamedColorList(List); InputRange = 1; } else InputColorant = ComponentNames(InputColorSpace, TRUE); if (cmsIsTag(hInput, cmsSigColorantTableOutTag)){ List = cmsReadTag(hInput, cmsSigColorantTableOutTag); OutputColorant = cmsDupNamedColorList(List); OutputRange = 1; } else OutputColorant = ComponentNames(OutputColorSpace, FALSE); } else { hInput = OpenStockProfile(0, cInProf); if (hInput == NULL) return FALSE; hOutput = OpenStockProfile(0, cOutProf); if (hOutput == NULL) return FALSE; hProof = NULL; if (cmsGetDeviceClass(hInput) == cmsSigLinkClass || cmsGetDeviceClass(hOutput) == cmsSigLinkClass) FatalError("Use -l flag for devicelink profiles!\n"); InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetColorSpace(hOutput); // Read colorant tables if present if (cmsIsTag(hInput, cmsSigColorantTableTag)) { List = cmsReadTag(hInput, cmsSigColorantTableTag); InputColorant = cmsDupNamedColorList(List); if (cmsNamedColorCount(InputColorant) <= 3) SetRange(255, TRUE); else SetRange(1, TRUE); // Inks are already divided by 100 in the formatter } else InputColorant = ComponentNames(InputColorSpace, TRUE); if (cmsIsTag(hOutput, cmsSigColorantTableTag)){ List = cmsReadTag(hOutput, cmsSigColorantTableTag); OutputColorant = cmsDupNamedColorList(List); if (cmsNamedColorCount(OutputColorant) <= 3) SetRange(255, FALSE); else SetRange(1, FALSE); // Inks are already divided by 100 in the formatter } else OutputColorant = ComponentNames(OutputColorSpace, FALSE); if (cProofing != NULL) { hProof = OpenStockProfile(0, cProofing); if (hProof == NULL) return FALSE; dwFlags |= cmsFLAGS_SOFTPROOFING; } } // Print information on profiles if (Verbose > 2) { printf("Profile:\n"); PrintProfileInformation(hInput); if (hOutput) { printf("Output profile:\n"); PrintProfileInformation(hOutput); } if (hProof != NULL) { printf("Proofing profile:\n"); PrintProfileInformation(hProof); } } // Input is always in floating point dwIn = cmsFormatterForColorspaceOfProfile(hInput, 0, TRUE); if (lIsDeviceLink) { dwOut = cmsFormatterForPCSOfProfile(hInput, lIsFloat ? 0 : 2, lIsFloat); } else { // 16 bits or floating point (only on output) dwOut = cmsFormatterForColorspaceOfProfile(hOutput, lIsFloat ? 0 : 2, lIsFloat); } // For named color, there is a specialized formatter if (cmsGetDeviceClass(hInput) == cmsSigNamedColorClass) { dwIn = TYPE_NAMED_COLOR_INDEX; InputNamedColor = TRUE; } // Precision mode switch (PrecalcMode) { case 0: dwFlags |= cmsFLAGS_NOOPTIMIZE; break; case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; case 3: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; case 1: break; default: FatalError("Unknown precalculation mode '%d'", PrecalcMode); } if (BlackPointCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; if (GamutCheck) { cmsUInt16Number Alarm[cmsMAXCHANNELS]; if (hProof == NULL) FatalError("I need proofing profile -p for gamut checking!"); for (i=0; i < cmsMAXCHANNELS; i++) Alarm[i] = 0xFFFF; cmsSetAlarmCodes(Alarm); dwFlags |= cmsFLAGS_GAMUTCHECK; } // The main transform hTrans = cmsCreateProofingTransform(hInput, dwIn, hOutput, dwOut, hProof, Intent, ProofingIntent, dwFlags); if (hProof) cmsCloseProfile(hProof); if (hTrans == NULL) return FALSE; // PCS Dump if requested hTransXYZ = NULL; hTransLab = NULL; if (hOutput && Verbose > 1) { cmsHPROFILE hXYZ = cmsCreateXYZProfile(); cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); hTransXYZ = cmsCreateTransform(hInput, dwIn, hXYZ, lIsFloat ? TYPE_XYZ_DBL : TYPE_XYZ_16, Intent, cmsFLAGS_NOCACHE); if (hTransXYZ == NULL) return FALSE; hTransLab = cmsCreateTransform(hInput, dwIn, hLab, lIsFloat? TYPE_Lab_DBL : TYPE_Lab_16, Intent, cmsFLAGS_NOCACHE); if (hTransLab == NULL) return FALSE; cmsCloseProfile(hXYZ); cmsCloseProfile(hLab); } if (hInput) cmsCloseProfile(hInput); if (hOutput) cmsCloseProfile(hOutput); return TRUE; } // Free open resources static void CloseTransforms(void) { if (InputColorant) cmsFreeNamedColorList(InputColorant); if (OutputColorant) cmsFreeNamedColorList(OutputColorant); if (hTrans) cmsDeleteTransform(hTrans); if (hTransLab) cmsDeleteTransform(hTransLab); if (hTransXYZ) cmsDeleteTransform(hTransXYZ); } // --------------------------------------------------------------------------------------------------- // Get input from user static void GetLine(char* Buffer, const char* frm, ...) { int res; va_list args; va_start(args, frm); do { if (xisatty(stdin)) vfprintf(stderr, frm, args); res = scanf("%4095s", Buffer); if (res < 0 || toupper(Buffer[0]) == 'Q') { // Quit? CloseTransforms(); if (xisatty(stdin)) fprintf(stderr, "Done.\n"); exit(0); } } while (res == 0); va_end(args); } // Print a value which is given in double floating point static void PrintFloatResults(cmsFloat64Number Value[]) { cmsUInt32Number i, n; char ChannelName[cmsMAX_PATH]; cmsFloat64Number v; n = cmsChannelsOf(OutputColorSpace); for (i=0; i < n; i++) { if (OutputColorant != NULL) { cmsNamedColorInfo(OutputColorant, i, ChannelName, NULL, NULL, NULL, NULL); } else { OutputRange = 1; sprintf(ChannelName, "Channel #%u", i + 1); } v = (cmsFloat64Number) Value[i]* OutputRange; if (lQuantize) v = floor(v + 0.5); if (!lUnbounded) { if (v < 0) v = 0; if (v > OutputRange) v = OutputRange; } if (Verbose <= 0) printf("%.4f ", v); else printf("%s=%.4f ", ChannelName, v); } printf("\n"); } // Get a named-color index static cmsUInt16Number GetIndex(void) { char Buffer[4096], Name[cmsMAX_PATH], Prefix[40], Suffix[40]; int index, max; const cmsNAMEDCOLORLIST* NamedColorList; NamedColorList = cmsGetNamedColorList(hTrans); if (NamedColorList == NULL) return 0; max = cmsNamedColorCount(NamedColorList)-1; GetLine(Buffer, "Color index (0..%d)? ", max); index = atoi(Buffer); if (index > max) FatalError("Named color %d out of range!", index); cmsNamedColorInfo(NamedColorList, index, Name, Prefix, Suffix, NULL, NULL); printf("\n%s %s %s\n", Prefix, Name, Suffix); return (cmsUInt16Number) index; } // Read values from a text file or terminal static void TakeFloatValues(cmsFloat64Number Float[]) { cmsUInt32Number i, n; char ChannelName[cmsMAX_PATH]; char Buffer[4096]; if (xisatty(stdin)) fprintf(stderr, "\nEnter values, 'q' to quit\n"); if (InputNamedColor) { // This is named color index, which is always cmsUInt16Number cmsUInt16Number index = GetIndex(); memcpy(Float, &index, sizeof(cmsUInt16Number)); return; } n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { if (InputColorant) { cmsNamedColorInfo(InputColorant, i, ChannelName, NULL, NULL, NULL, NULL); } else { InputRange = 1; sprintf(ChannelName, "Channel #%u", i+1); } GetLine(Buffer, "%s? ", ChannelName); Float[i] = (cmsFloat64Number) atof(Buffer) / InputRange; } if (xisatty(stdin)) fprintf(stderr, "\n"); } static void PrintPCSFloat(cmsFloat64Number Input[]) { if (Verbose > 1 && hTransXYZ && hTransLab) { cmsCIEXYZ XYZ = { 0, 0, 0 }; cmsCIELab Lab = { 0, 0, 0 }; if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, &XYZ, 1); if (hTransLab) cmsDoTransform(hTransLab, Input, &Lab, 1); printf("[PCS] Lab=(%.4f,%.4f,%.4f) XYZ=(%.4f,%.4f,%.4f)\n", Lab.L, Lab.a, Lab.b, XYZ.X * 100.0, XYZ.Y * 100.0, XYZ.Z * 100.0); } } // ----------------------------------------------------------------------------------------------- static void PrintEncodedResults(cmsUInt16Number Encoded[]) { cmsUInt32Number i, n; char ChannelName[cmsMAX_PATH]; cmsUInt32Number v; n = cmsChannelsOf(OutputColorSpace); for (i=0; i < n; i++) { if (OutputColorant != NULL) { cmsNamedColorInfo(OutputColorant, i, ChannelName, NULL, NULL, NULL, NULL); } else { sprintf(ChannelName, "Channel #%u", i + 1); } if (Verbose > 0) printf("%s=", ChannelName); v = Encoded[i]; if (InHexa) { if (Width16) printf("0x%04X ", (int) floor(v + .5)); else printf("0x%02X ", (int) floor(v / 257. + .5)); } else { if (Width16) printf("%d ", (int) floor(v + .5)); else printf("%d ", (int) floor(v / 257. + .5)); } } printf("\n"); } // Print XYZ/Lab values on verbose mode static void PrintPCSEncoded(cmsFloat64Number Input[]) { if (Verbose > 1 && hTransXYZ && hTransLab) { cmsUInt16Number XYZ[3], Lab[3]; if (hTransXYZ) cmsDoTransform(hTransXYZ, Input, XYZ, 1); if (hTransLab) cmsDoTransform(hTransLab, Input, Lab, 1); printf("[PCS] Lab=(0x%04X,0x%04X,0x%04X) XYZ=(0x%04X,0x%04X,0x%04X)\n", Lab[0], Lab[1], Lab[2], XYZ[0], XYZ[1], XYZ[2]); } } // -------------------------------------------------------------------------------------- // Take a value from IT8 and scale it accordly to fill a cmsUInt16Number (0..FFFF) static cmsFloat64Number GetIT8Val(const char* Name, cmsFloat64Number Max) { const char* Val = cmsIT8GetData(hIT8in, CGATSPatch, Name); if (Val == NULL) FatalError("Field '%s' not found", Name); return atof(Val) / Max; } // Read input values from CGATS file. static void TakeCGATSValues(int nPatch, cmsFloat64Number Float[]) { // At first take the name if SAMPLE_ID is present if (cmsIT8GetPatchName(hIT8in, nPatch, CGATSPatch) == NULL) { FatalError("Sorry, I need 'SAMPLE_ID' on input CGATS to operate."); } // Special handling for named color profiles. // Lookup the name in the names database (the transform) if (InputNamedColor) { const cmsNAMEDCOLORLIST* NamedColorList; int index; NamedColorList = cmsGetNamedColorList(hTrans); if (NamedColorList == NULL) FatalError("Malformed named color profile"); index = cmsNamedColorIndex(NamedColorList, CGATSPatch); if (index < 0) FatalError("Named color '%s' not found in the profile", CGATSPatch); Float[0] = index; return; } // Color is not a spot color, proceed. switch (InputColorSpace) { // Encoding should follow CGATS specification. case cmsSigXYZData: Float[0] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_X") / 100.0; Float[1] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_Y") / 100.0; Float[2] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "XYZ_Z") / 100.0; break; case cmsSigLabData: Float[0] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_L"); Float[1] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_A"); Float[2] = cmsIT8GetDataDbl(hIT8in, CGATSPatch, "LAB_B"); break; case cmsSigRgbData: Float[0] = GetIT8Val("RGB_R", 255.0); Float[1] = GetIT8Val("RGB_G", 255.0); Float[2] = GetIT8Val("RGB_B", 255.0); break; case cmsSigGrayData: Float[0] = GetIT8Val("GRAY", 255.0); break; case cmsSigCmykData: Float[0] = GetIT8Val("CMYK_C", 1.0); Float[1] = GetIT8Val("CMYK_M", 1.0); Float[2] = GetIT8Val("CMYK_Y", 1.0); Float[3] = GetIT8Val("CMYK_K", 1.0); break; case cmsSigCmyData: Float[0] = GetIT8Val("CMY_C", 1.0); Float[1] = GetIT8Val("CMY_M", 1.0); Float[2] = GetIT8Val("CMY_Y", 1.0); break; case cmsSig1colorData: case cmsSig2colorData: case cmsSig3colorData: case cmsSig4colorData: case cmsSig5colorData: case cmsSig6colorData: case cmsSig7colorData: case cmsSig8colorData: case cmsSig9colorData: case cmsSig10colorData: case cmsSig11colorData: case cmsSig12colorData: case cmsSig13colorData: case cmsSig14colorData: case cmsSig15colorData: { cmsUInt32Number i, n; n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { char Buffer[255]; sprintf(Buffer, "%uCLR_%u", n, i+1); Float[i] = GetIT8Val(Buffer, 100.0); } } break; default: { cmsUInt32Number i, n; n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { char Buffer[255]; sprintf(Buffer, "CHAN_%u", i+1); Float[i] = GetIT8Val(Buffer, 1.0); } } } } static void SetCGATSfld(const char* Col, cmsFloat64Number Val) { if (lQuantize) Val = floor(Val + 0.5); if (!cmsIT8SetDataDbl(hIT8out, CGATSPatch, Col, Val)) { FatalError("couldn't set '%s' on output cgats '%s'", Col, CGATSoutFilename); } } static void PutCGATSValues(cmsFloat64Number Float[]) { cmsIT8SetData(hIT8out, CGATSPatch, "SAMPLE_ID", CGATSPatch); switch (OutputColorSpace) { // Encoding should follow CGATS specification. case cmsSigXYZData: SetCGATSfld("XYZ_X", Float[0] * 100.0); SetCGATSfld("XYZ_Y", Float[1] * 100.0); SetCGATSfld("XYZ_Z", Float[2] * 100.0); break; case cmsSigLabData: SetCGATSfld("LAB_L", Float[0]); SetCGATSfld("LAB_A", Float[1]); SetCGATSfld("LAB_B", Float[2]); break; case cmsSigRgbData: SetCGATSfld("RGB_R", Float[0] * 255.0); SetCGATSfld("RGB_G", Float[1] * 255.0); SetCGATSfld("RGB_B", Float[2] * 255.0); break; case cmsSigGrayData: SetCGATSfld("GRAY", Float[0] * 255.0); break; case cmsSigCmykData: SetCGATSfld("CMYK_C", Float[0]); SetCGATSfld("CMYK_M", Float[1]); SetCGATSfld("CMYK_Y", Float[2]); SetCGATSfld("CMYK_K", Float[3]); break; case cmsSigCmyData: SetCGATSfld("CMY_C", Float[0]); SetCGATSfld("CMY_M", Float[1]); SetCGATSfld("CMY_Y", Float[2]); break; case cmsSig1colorData: case cmsSig2colorData: case cmsSig3colorData: case cmsSig4colorData: case cmsSig5colorData: case cmsSig6colorData: case cmsSig7colorData: case cmsSig8colorData: case cmsSig9colorData: case cmsSig10colorData: case cmsSig11colorData: case cmsSig12colorData: case cmsSig13colorData: case cmsSig14colorData: case cmsSig15colorData: { cmsUInt32Number i, n; n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { char Buffer[255]; sprintf(Buffer, "%uCLR_%u", n, i+1); SetCGATSfld(Buffer, Float[i] * 100.0); } } break; default: { cmsUInt32Number i, n; n = cmsChannelsOf(InputColorSpace); for (i=0; i < n; i++) { char Buffer[255]; sprintf(Buffer, "CHAN_%u", i+1); SetCGATSfld(Buffer, Float[i]); } } } } // Create data format static void SetOutputDataFormat(void) { cmsIT8DefineDblFormat(hIT8out, "%.4g"); cmsIT8SetPropertyStr(hIT8out, "ORIGINATOR", "icctrans"); if (IncludePart != NULL) cmsIT8SetPropertyStr(hIT8out, ".INCLUDE", IncludePart); cmsIT8SetComment(hIT8out, "Data follows"); cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_SETS", nMaxPatches); switch (OutputColorSpace) { // Encoding should follow CGATS specification. case cmsSigXYZData: cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8out, 1, "XYZ_X"); cmsIT8SetDataFormat(hIT8out, 2, "XYZ_Y"); cmsIT8SetDataFormat(hIT8out, 3, "XYZ_Z"); break; case cmsSigLabData: cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8out, 1, "LAB_L"); cmsIT8SetDataFormat(hIT8out, 2, "LAB_A"); cmsIT8SetDataFormat(hIT8out, 3, "LAB_B"); break; case cmsSigRgbData: cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8out, 1, "RGB_R"); cmsIT8SetDataFormat(hIT8out, 2, "RGB_G"); cmsIT8SetDataFormat(hIT8out, 3, "RGB_B"); break; case cmsSigGrayData: cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 2); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8out, 1, "GRAY"); break; case cmsSigCmykData: cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 5); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8out, 1, "CMYK_C"); cmsIT8SetDataFormat(hIT8out, 2, "CMYK_M"); cmsIT8SetDataFormat(hIT8out, 3, "CMYK_Y"); cmsIT8SetDataFormat(hIT8out, 4, "CMYK_K"); break; case cmsSigCmyData: cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", 4); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); cmsIT8SetDataFormat(hIT8out, 1, "CMY_C"); cmsIT8SetDataFormat(hIT8out, 2, "CMY_M"); cmsIT8SetDataFormat(hIT8out, 3, "CMY_Y"); break; case cmsSig1colorData: case cmsSig2colorData: case cmsSig3colorData: case cmsSig4colorData: case cmsSig5colorData: case cmsSig6colorData: case cmsSig7colorData: case cmsSig8colorData: case cmsSig9colorData: case cmsSig10colorData: case cmsSig11colorData: case cmsSig12colorData: case cmsSig13colorData: case cmsSig14colorData: case cmsSig15colorData: { int i, n; char Buffer[255]; n = cmsChannelsOf(OutputColorSpace); cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", n+1); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); for (i=1; i <= n; i++) { sprintf(Buffer, "%dCLR_%d", n, i); cmsIT8SetDataFormat(hIT8out, i, Buffer); } } break; default: { int i, n; char Buffer[255]; n = cmsChannelsOf(OutputColorSpace); cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", n+1); cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID"); for (i=1; i <= n; i++) { sprintf(Buffer, "CHAN_%d", i); cmsIT8SetDataFormat(hIT8out, i, Buffer); } } } } // Open CGATS if specified static void OpenCGATSFiles(int argc, char *argv[]) { int nParams = argc - xoptind; if (nParams >= 1) { hIT8in = cmsIT8LoadFromFile(0, argv[xoptind]); if (hIT8in == NULL) FatalError("'%s' is not recognized as a CGATS file", argv[xoptind]); nMaxPatches = (int) cmsIT8GetPropertyDbl(hIT8in, "NUMBER_OF_SETS"); } if (nParams == 2) { hIT8out = cmsIT8Alloc(NULL); SetOutputDataFormat(); strncpy(CGATSoutFilename, argv[xoptind+1], cmsMAX_PATH-1); } if (nParams > 2) FatalError("Too many CGATS files"); } // The main sink int main(int argc, char *argv[]) { cmsUInt16Number Output[cmsMAXCHANNELS]; cmsFloat64Number OutputFloat[cmsMAXCHANNELS]; cmsFloat64Number InputFloat[cmsMAXCHANNELS]; int nPatch = 0; fprintf(stderr, "LittleCMS ColorSpace conversion calculator - 5.0 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); fprintf(stderr, "Copyright (c) 1998-2020 Marti Maria Saguer. See COPYING file for details.\n"); fflush(stderr); InitUtils("transicc"); Verbose = 1; if (argc == 1) { Help(); return 0; } HandleSwitches(argc, argv); // Open profiles, create transforms if (!OpenTransforms()) return 1; // Open CGATS input if specified OpenCGATSFiles(argc, argv); // Main loop: read all values and convert them for(;;) { if (hIT8in != NULL) { if (nPatch >= nMaxPatches) break; TakeCGATSValues(nPatch++, InputFloat); } else { if (feof(stdin)) break; TakeFloatValues(InputFloat); } if (lIsFloat) cmsDoTransform(hTrans, InputFloat, OutputFloat, 1); else cmsDoTransform(hTrans, InputFloat, Output, 1); if (hIT8out != NULL) { PutCGATSValues(OutputFloat); } else { if (lIsFloat) { PrintFloatResults(OutputFloat); PrintPCSFloat(InputFloat); } else { PrintEncodedResults(Output); PrintPCSEncoded(InputFloat); } } } // Cleanup CloseTransforms(); if (hIT8in) cmsIT8Free(hIT8in); if (hIT8out) { cmsIT8SaveToFile(hIT8out, CGATSoutFilename); cmsIT8Free(hIT8out); } // All is ok return 0; } lcms2-2.12rc1/utils/transicc/Makefile.am0000644000175000017500000000116313775114656017120 0ustar martimarti# # Makefile for building lcms sample programs # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common bin_PROGRAMS = transicc transicc_LDADD = $(top_builddir)/src/liblcms2.la @LCMS_LIB_DEPLIBS@ transicc_LDFLAGS = @LDFLAGS@ transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = transicc.1 EXTRA_DIST = $(man_MANS) lcms2-2.12rc1/utils/transicc/Makefile.in0000644000175000017500000005476213775114656017146 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building lcms sample programs # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = transicc$(EXEEXT) subdir = utils/transicc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_transicc_OBJECTS = transicc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \ ../common/vprf.$(OBJEXT) transicc_OBJECTS = $(am_transicc_OBJECTS) transicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = transicc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(transicc_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = am__maybe_remake_depfiles = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(transicc_SOURCES) DIST_SOURCES = $(transicc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common transicc_LDADD = $(top_builddir)/src/liblcms2.la @LCMS_LIB_DEPLIBS@ transicc_LDFLAGS = @LDFLAGS@ transicc_SOURCES = transicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = transicc.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/transicc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/transicc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ../common/$(am__dirstamp): @$(MKDIR_P) ../common @: > ../common/$(am__dirstamp) ../common/xgetopt.$(OBJEXT): ../common/$(am__dirstamp) ../common/vprf.$(OBJEXT): ../common/$(am__dirstamp) transicc$(EXEEXT): $(transicc_OBJECTS) $(transicc_DEPENDENCIES) $(EXTRA_transicc_DEPENDENCIES) @rm -f transicc$(EXEEXT) $(AM_V_CCLD)$(transicc_LINK) $(transicc_OBJECTS) $(transicc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../common/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../common/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/utils/linkicc/0000755000175000017500000000000013775114656014671 5ustar martimartilcms2-2.12rc1/utils/linkicc/linkicc.c0000644000175000017500000002641313775114656016457 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- #include "utils.h" // --------------------------------------------------------------------------------- static char* Description = "Devicelink profile"; static char* Copyright = "No copyright, use freely"; static int Intent = INTENT_PERCEPTUAL; static char* cOutProf = "devicelink.icc"; static int PrecalcMode = 1; static int NumOfGridPoints = 0; static cmsFloat64Number ObserverAdaptationState = 1.0; // According ICC 4.2 this is the default static cmsBool BlackPointCompensation = FALSE; static cmsFloat64Number InkLimit = 400; static cmsBool lUse8bits = FALSE; static cmsBool TagResult = FALSE; static cmsBool KeepLinearization = FALSE; static cmsFloat64Number Version = 4.3; // The manual static int Help(int level) { UTILS_UNUSED_PARAMETER(level); fprintf(stderr, "\nlinkicc: Links profiles into a single devicelink.\n"); fprintf(stderr, "\n"); fprintf(stderr, "usage: linkicc [flags] \n\n"); fprintf(stderr, "flags:\n\n"); fprintf(stderr, "-o - Output devicelink profile. [defaults to 'devicelink.icc']\n"); PrintRenderingIntents(); fprintf(stderr, "-c<0,1,2> - Precision (0=LowRes, 1=Normal, 2=Hi-res) [defaults to 1]\n"); fprintf(stderr, "-n - Alternate way to set precision, number of CLUT points\n"); fprintf(stderr, "-d - description text (quotes can be used)\n"); fprintf(stderr, "-y - copyright notice (quotes can be used)\n"); fprintf(stderr, "\n-k<0..400> - Ink-limiting in %% (CMYK only)\n"); fprintf(stderr, "-8 - Creates 8-bit devicelink\n"); fprintf(stderr, "-x - Creatively, guess deviceclass of resulting profile.\n"); fprintf(stderr, "-b - Black point compensation\n"); fprintf(stderr, "-a<0..1> - Observer adaptation state (abs.col. only)\n\n"); fprintf(stderr, "-l - Use linearization curves (may affect accuracy)\n"); fprintf(stderr, "-r - Profile version. (CAUTION: may change the profile implementation)\n"); fprintf(stderr, "\n"); fprintf(stderr, "Colorspaces must be paired except Lab/XYZ, that can be interchanged.\n\n"); PrintBuiltins(); fprintf(stderr, "\nExamples:\n\n" "To create 'devicelink.icm' from a.icc to b.icc:\n" "\tlinkicc a.icc b.icc\n\n" "To create 'out.icc' from sRGB to cmyk.icc:\n" "\tlinkicc -o out.icc *sRGB cmyk.icc\n\n" "To create a sRGB input profile working in Lab:\n" "\tlinkicc -x -o sRGBLab.icc *sRGB *Lab\n\n" "To create a XYZ -> sRGB output profile:\n" "\tlinkicc -x -o sRGBLab.icc *XYZ *sRGB\n\n" "To create a abstract profile doing softproof for cmyk.icc:\n" "\tlinkicc -t1 -x -o softproof.icc *Lab cmyk.icc cmyk.icc *Lab\n\n" "To create a 'grayer' sRGB input profile:\n" "\tlinkicc -x -o grayer.icc *sRGB gray.icc gray.icc *Lab\n\n" "To embed ink limiting into a cmyk output profile:\n" "\tlinkicc -x -o cmyklimited.icc -k 250 cmyk.icc *Lab\n\n"); fprintf(stderr, "This program is intended to be a demo of the Little CMS\n" "color engine. Both lcms and this program are open source.\n" "You can obtain both in source code at https://www.littlecms.com\n" "For suggestions, comments, bug reports etc. send mail to\n" "info@littlecms.com\n\n"); exit(0); } // The toggles stuff static void HandleSwitches(int argc, char *argv[]) { int s; while ((s = xgetopt(argc,argv,"a:A:BbC:c:D:d:h:H:k:K:lLn:N:O:o:r:R:T:t:V:v:xX8y:Y:-:")) != EOF) { switch (s) { case '-': if (strcmp(xoptarg, "help") == 0) { Help(0); } else { FatalError("Unknown option - run without args to see valid ones.\n"); } break; case 'a': case 'A': ObserverAdaptationState = atof(xoptarg); if (ObserverAdaptationState < 0 || ObserverAdaptationState > 1.0) FatalError("Adaptation state should be 0..1"); break; case 'b': case 'B': BlackPointCompensation = TRUE; break; case 'c': case 'C': PrecalcMode = atoi(xoptarg); if (PrecalcMode < 0 || PrecalcMode > 2) { FatalError("Unknown precalc mode '%d'", PrecalcMode); } break; case 'd': case 'D': // Doing that is correct and safe: Description points to memory allocated in the command line. // same for Copyright and output devicelink. Description = xoptarg; break; case 'h': case 'H': Help(atoi(xoptarg)); return; case 'k': case 'K': InkLimit = atof(xoptarg); if (InkLimit < 0.0 || InkLimit > 400.0) { FatalError("Ink limit must be 0%%..400%%"); } break; case 'l': case 'L': KeepLinearization = TRUE; break; case 'n': case 'N': if (PrecalcMode != 1) { FatalError("Precalc mode already specified"); } NumOfGridPoints = atoi(xoptarg); break; case 'o': case 'O': cOutProf = xoptarg; break; case 'r': case 'R': Version = atof(xoptarg); if (Version < 2.0 || Version > 4.3) { fprintf(stderr, "WARNING: lcms was not aware of this version, tag types may be wrong!\n"); } break; case 't': case 'T': Intent = atoi(xoptarg); // Will be validated latter on break; case 'V': case 'v': Verbose = atoi(xoptarg); if (Verbose < 0 || Verbose > 3) { FatalError("Unknown verbosity level '%d'", Verbose); } break; case '8': lUse8bits = TRUE; break; case 'y': case 'Y': Copyright = xoptarg; break; case 'x': case 'X': TagResult = TRUE; break; default: FatalError("Unknown option - run without args to see valid ones.\n"); } } } // Set the copyright and description static cmsBool SetTextTags(cmsHPROFILE hProfile) { cmsMLU *DescriptionMLU, *CopyrightMLU; cmsBool rc = FALSE; cmsContext ContextID = cmsGetProfileContextID(hProfile); DescriptionMLU = cmsMLUalloc(ContextID, 1); CopyrightMLU = cmsMLUalloc(ContextID, 1); if (DescriptionMLU == NULL || CopyrightMLU == NULL) goto Error; if (!cmsMLUsetASCII(DescriptionMLU, "en", "US", Description)) goto Error; if (!cmsMLUsetASCII(CopyrightMLU, "en", "US", Copyright)) goto Error; if (!cmsWriteTag(hProfile, cmsSigProfileDescriptionTag, DescriptionMLU)) goto Error; if (!cmsWriteTag(hProfile, cmsSigCopyrightTag, CopyrightMLU)) goto Error; rc = TRUE; Error: if (DescriptionMLU) cmsMLUfree(DescriptionMLU); if (CopyrightMLU) cmsMLUfree(CopyrightMLU); return rc; } int main(int argc, char *argv[]) { int i, nargs, rc; cmsHPROFILE Profiles[257]; cmsHPROFILE hProfile; cmsUInt32Number dwFlags; cmsHTRANSFORM hTransform = NULL; // Here we are fprintf(stderr, "Little CMS ICC device link generator - v3.0 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); fprintf(stderr, "Copyright (c) 1998-2020 Marti Maria Saguer. See COPYING file for details.\n"); fflush(stderr); // Initialize InitUtils("linkicc"); rc = 0; // Get the options HandleSwitches(argc, argv); // How many profiles to link? nargs = (argc - xoptind); if (nargs < 1) return Help(0); if (nargs > 255) { FatalError("Holy profile! what are you trying to do with so many profiles!?"); goto Cleanup; } // Open all profiles memset(Profiles, 0, sizeof(Profiles)); for (i=0; i < nargs; i++) { Profiles[i] = OpenStockProfile(0, argv[i + xoptind]); if (Profiles[i] == NULL) goto Cleanup; if (Verbose >= 1) { PrintProfileInformation(Profiles[i]); } } // Ink limiting if (InkLimit != 400.0) { cmsColorSpaceSignature EndingColorSpace = cmsGetColorSpace(Profiles[nargs-1]); Profiles[nargs++] = cmsCreateInkLimitingDeviceLink(EndingColorSpace, InkLimit); } // Set the flags dwFlags = cmsFLAGS_KEEP_SEQUENCE; switch (PrecalcMode) { case 0: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; case 1: if (NumOfGridPoints > 0) dwFlags |= cmsFLAGS_GRIDPOINTS(NumOfGridPoints); break; default: { FatalError("Unknown precalculation mode '%d'", PrecalcMode); goto Cleanup; } } if (BlackPointCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; if (TagResult) dwFlags |= cmsFLAGS_GUESSDEVICECLASS; if (KeepLinearization) dwFlags |= cmsFLAGS_CLUT_PRE_LINEARIZATION|cmsFLAGS_CLUT_POST_LINEARIZATION; if (lUse8bits) dwFlags |= cmsFLAGS_8BITS_DEVICELINK; cmsSetAdaptationState(ObserverAdaptationState); // Create the color transform. Specify 0 for the format is safe as the transform // is intended to be used only for the devicelink. hTransform = cmsCreateMultiprofileTransform(Profiles, nargs, 0, 0, Intent, dwFlags|cmsFLAGS_NOOPTIMIZE); if (hTransform == NULL) { FatalError("Transform creation failed"); goto Cleanup; } hProfile = cmsTransform2DeviceLink(hTransform, Version, dwFlags); if (hProfile == NULL) { FatalError("Devicelink creation failed"); goto Cleanup; } SetTextTags(hProfile); cmsSetHeaderRenderingIntent(hProfile, Intent); if (cmsSaveProfileToFile(hProfile, cOutProf)) { if (Verbose > 0) fprintf(stderr, "Ok"); } else FatalError("Error saving file!"); cmsCloseProfile(hProfile); Cleanup: if (hTransform != NULL) cmsDeleteTransform(hTransform); for (i=0; i < nargs; i++) { if (Profiles[i] != NULL) cmsCloseProfile(Profiles[i]); } return rc; } lcms2-2.12rc1/utils/linkicc/linkicc.10000644000175000017500000000644513775114656016400 0ustar martimarti.\"Shiju P. Nair September 30, 2004 .\"Thomas Weber April 23, 2014 .TH LINKICC 1 "September 30, 2004" .SH NAME linkicc - little cms device link generator. .SH SYNOPSIS .B linkicc .RI [ options ] " profiles" .SH DESCRIPTION lcms is a standalone CMM engine, which deals with the color management. It implements a fast transformation between ICC profiles. .B linkicc is a little cms device link generator. .P Links two or more profiles into a single devicelink profile. Colorspaces must be paired except Lab/XYZ, that can be interchanged. .SH OPTIONS .TP .BR \-a\ NUM Observer adaptation state (abs.col. only), (0..1.0, float value) [defaults to 1.0]. .TP .B \-b Black point compensation. .TP .BI \-c\ precision Precision (0=LowRes, 1=Normal, 2=Hi-res) [defaults to 1]. .TP .BI \-d\ description Description text (quotes can be used). .TP .BI \-h\ NUM Show summary of options and examples (0=help, 1=Built-in profiles, 2=Examples, 3=Contact information) .TP .BI \-k\ inklimit Ink-limiting in % (CMYK only), (0..400.0, float value) [default 400.0]. .TP .B \-l Use linearization curves (may affect accuracy). .TP .BI \-n\ gridpoints Alternate way to set precision, number of CLUT points. .TP .BI \-o\ profile Output devicelink profile [defaults to 'devicelink.icm']. .TP .BI \-r\ profileversion Profile version. (CAUTION: may change the profile implementation), (2.0..4.3, float value) [defaults to 4.3]. .TP .BI \-t\ NUM Rendering intent .nf .RS 0=Perceptual [default] 1=Relative colorimetric 2=Saturation 3=Absolute colorimetric 10=Perceptual preserving black ink 11=Relative colorimetric preserving black ink 12=Saturation preserving black ink 13=Perceptual preserving black plane 14=Relative colorimetric preserving black plane 15=Saturation preserving black plane .RE .fi .TP .BI \-v\ verbosity Verbosity level, (0=None, 1=Normal, 2=High, 3=Very High) [defaults to 0]. .TP .B \-x Creatively, guess deviceclass of resulting profile. .TP .BI \-y\ copyright Copyright notice (quotes can be used) ["No copyright, use freely"]. .TP .B \-8 Creates 8-bit devicelink. .SH BUILT-IN PROFILES .nf *Lab2 -- D50-based v2 CIEL*a*b *Lab4 -- D50-based v4 CIEL*a*b *Lab -- D50-based v4 CIEL*a*b *XYZ -- CIE XYZ (PCS) *sRGB -- sRGB color space *Gray22 - Monochrome of Gamma 2.2 *Gray30 - Monochrome of Gamma 3.0 *null - Monochrome black for all input *Lin2222- CMYK linearization of gamma 2.2 on each channel .fi .SH EXAMPLES .nf To create 'devicelink.icm' from a.icc to b.icc: linkicc a.icc b.icc To create 'out.icc' from sRGB to cmyk.icc: linkicc -o out.icc *sRGB cmyk.icc To create a sRGB input profile working in Lab: linkicc -x -o sRGBLab.icc *sRGB *Lab To create a XYZ -> sRGB output profile: linkicc -x -o sRGBLab.icc *XYZ *sRGB To create a abstract profile doing softproof for cmyk.icc: linkicc -t1 -x -o softproof.icc *Lab cmyk.icc cmyk.icc *Lab To create a 'grayer' sRGB input profile: linkicc -x -o grayer.icc *sRGB gray.icc gray.icc *Lab To embed ink limiting into a cmyk output profile: linkicc -x -o cmyklimited.icc -k 250 cmyk.icc *Lab .fi .SH NOTES For suggestions, comments, bug reports etc. send mail to info@littlecms.com. .SH SEE ALSO .BR jpgicc (1), .BR psicc (1), .BR tificc (1), .BR transicc (1) .SH AUTHOR This manual page was written by Shiju p. Nair , for the Debian project. lcms2-2.12rc1/utils/linkicc/Makefile.am0000644000175000017500000000113113775114656016721 0ustar martimarti# # Makefile for building lcms sample programs # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common bin_PROGRAMS = linkicc linkicc_LDADD = $(top_builddir)/src/liblcms2.la linkicc_LDFLAGS = @LDFLAGS@ linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = linkicc.1 EXTRA_DIST = $(man_MANS) lcms2-2.12rc1/utils/linkicc/Makefile.in0000644000175000017500000005470413775114656016750 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building lcms sample programs # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = linkicc$(EXEEXT) subdir = utils/linkicc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_linkicc_OBJECTS = linkicc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \ ../common/vprf.$(OBJEXT) linkicc_OBJECTS = $(am_linkicc_OBJECTS) linkicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = linkicc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(linkicc_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = am__maybe_remake_depfiles = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(linkicc_SOURCES) DIST_SOURCES = $(linkicc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common linkicc_LDADD = $(top_builddir)/src/liblcms2.la linkicc_LDFLAGS = @LDFLAGS@ linkicc_SOURCES = linkicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = linkicc.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/linkicc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/linkicc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ../common/$(am__dirstamp): @$(MKDIR_P) ../common @: > ../common/$(am__dirstamp) ../common/xgetopt.$(OBJEXT): ../common/$(am__dirstamp) ../common/vprf.$(OBJEXT): ../common/$(am__dirstamp) linkicc$(EXEEXT): $(linkicc_OBJECTS) $(linkicc_DEPENDENCIES) $(EXTRA_linkicc_DEPENDENCIES) @rm -f linkicc$(EXEEXT) $(AM_V_CCLD)$(linkicc_LINK) $(linkicc_OBJECTS) $(linkicc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../common/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../common/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/utils/samples/0000755000175000017500000000000013775114656014721 5ustar martimartilcms2-2.12rc1/utils/samples/mktiff8.c0000644000175000017500000000725313775114656016444 0ustar martimarti// // Little cms // Copyright (C) 1998-2010 Marti Maria // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // Creates a devicelink that decodes TIFF8 Lab files #include "lcms2.h" #include #include static double DecodeAbTIFF(double ab) { if (ab <= 128.) ab += 127.; else ab -= 127.; return ab; } static cmsToneCurve* CreateStep(void) { cmsToneCurve* Gamma; cmsUInt16Number* Table; int i; double a; Table = calloc(4096, sizeof(cmsUInt16Number)); if (Table == NULL) return NULL; for (i=0; i < 4096; i++) { a = (double) i * 255. / 4095.; a = DecodeAbTIFF(a); Table[i] = (cmsUInt16Number) floor(a * 257. + 0.5); } Gamma = cmsBuildTabulatedToneCurve16(0, 4096, Table); free(Table); return Gamma; } static cmsToneCurve* CreateLinear(void) { cmsUInt16Number Linear[2] = { 0, 0xffff }; return cmsBuildTabulatedToneCurve16(0, 2, Linear); } // Set the copyright and description static cmsBool SetTextTags(cmsHPROFILE hProfile) { cmsMLU *DescriptionMLU, *CopyrightMLU; cmsBool rc = FALSE; DescriptionMLU = cmsMLUalloc(0, 1); CopyrightMLU = cmsMLUalloc(0, 1); if (DescriptionMLU == NULL || CopyrightMLU == NULL) goto Error; if (!cmsMLUsetASCII(DescriptionMLU, "en", "US", "Little cms Tiff8 CIELab")) goto Error; if (!cmsMLUsetASCII(CopyrightMLU, "en", "US", "Copyright (c) Marti Maria, 2010. All rights reserved.")) goto Error; if (!cmsWriteTag(hProfile, cmsSigProfileDescriptionTag, DescriptionMLU)) goto Error; if (!cmsWriteTag(hProfile, cmsSigCopyrightTag, CopyrightMLU)) goto Error; rc = TRUE; Error: if (DescriptionMLU) cmsMLUfree(DescriptionMLU); if (CopyrightMLU) cmsMLUfree(CopyrightMLU); return rc; } int main(int argc, char *argv[]) { cmsHPROFILE hProfile; cmsPipeline *AToB0; cmsToneCurve* PreLinear[3]; cmsToneCurve *Lin, *Step; fprintf(stderr, "Creating lcmstiff8.icm..."); remove("lcmstiff8.icm"); hProfile = cmsOpenProfileFromFile("lcmstiff8.icm", "w"); // Create linearization Lin = CreateLinear(); Step = CreateStep(); PreLinear[0] = Lin; PreLinear[1] = Step; PreLinear[2] = Step; AToB0 = cmsPipelineAlloc(0, 3, 3); cmsPipelineInsertStage(AToB0, cmsAT_BEGIN, cmsStageAllocToneCurves(0, 3, PreLinear)); cmsSetColorSpace(hProfile, cmsSigLabData); cmsSetPCS(hProfile, cmsSigLabData); cmsSetDeviceClass(hProfile, cmsSigLinkClass); cmsSetProfileVersion(hProfile, 4.2); cmsWriteTag(hProfile, cmsSigAToB0Tag, AToB0); SetTextTags(hProfile); cmsCloseProfile(hProfile); cmsFreeToneCurve(Lin); cmsFreeToneCurve(Step); cmsPipelineFree(AToB0); fprintf(stderr, "Done.\n"); return 0; } lcms2-2.12rc1/utils/samples/wtpt.10000644000175000017500000000147213775114656016005 0ustar martimarti.\"Shiju P. Nair September 30, 2004 .TH WTPT 1 "September 30, 2004" .SH NAME wtpt - Show media white of profiles, identifying black body locus. .SH SYNOPSIS .B wtpt .RI [ profile ] .SH DESCRIPTION lcms is a standalone CMM engine, which deals with the color management. It implements a fast transformation between ICC profiles. .B wtpt shows media white of profiles, identifying black body locus. .P If no parameters are given, then this program will ask for XYZ value of media white. If parameter given, it must be the profile to inspect. .SH NOTES For suggestions, comments, bug reports etc. send mail to info@littlecms.com .SH SEE ALSO .BR jpegicc (1), .BR tifficc (1), .BR icc2ps (1), .BR icclink (1), .BR icctrans (1) .SH AUTHOR This manual page was written by Shiju p. Nair , for the Debian project. lcms2-2.12rc1/utils/samples/mkcmy.c0000644000175000017500000000753113775114656016213 0ustar martimarti// // Little cms // Copyright (C) 1998-2003 Marti Maria // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THIS SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, // EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY // WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. // // IN NO EVENT SHALL MARTI MARIA BE LIABLE FOR ANY SPECIAL, INCIDENTAL, // INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, // OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, // WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF // LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE // OF THIS SOFTWARE. // // Version 1.12 #include "lcms.h" typedef struct { cmsHPROFILE hLab; cmsHPROFILE hRGB; cmsHTRANSFORM Lab2RGB; cmsHTRANSFORM RGB2Lab; } CARGO, FAR* LPCARGO; // Our space will be CIE primaries plus a gamma of 4.5 static int Forward(register WORD In[], register WORD Out[], register LPVOID Cargo) { LPCARGO C = (LPCARGO) Cargo; WORD RGB[3]; cmsCIELab Lab; cmsLabEncoded2Float(&Lab, In); printf("%g %g %g\n", Lab.L, Lab.a, Lab.b); cmsDoTransform(C ->Lab2RGB, In, &RGB, 1); Out[0] = 0xFFFF - RGB[0]; // Our CMY is negative of RGB Out[1] = 0xFFFF - RGB[1]; Out[2] = 0xFFFF - RGB[2]; return TRUE; } static int Reverse(register WORD In[], register WORD Out[], register LPVOID Cargo) { LPCARGO C = (LPCARGO) Cargo; WORD RGB[3]; RGB[0] = 0xFFFF - In[0]; RGB[1] = 0xFFFF - In[1]; RGB[2] = 0xFFFF - In[2]; cmsDoTransform(C ->RGB2Lab, &RGB, Out, 1); return TRUE; } static void InitCargo(LPCARGO Cargo) { Cargo -> hLab = cmsCreateLabProfile(NULL); Cargo -> hRGB = cmsCreate_sRGBProfile(); Cargo->Lab2RGB = cmsCreateTransform(Cargo->hLab, TYPE_Lab_16, Cargo ->hRGB, TYPE_RGB_16, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOTPRECALC); Cargo->RGB2Lab = cmsCreateTransform(Cargo ->hRGB, TYPE_RGB_16, Cargo ->hLab, TYPE_Lab_16, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOTPRECALC); } static void FreeCargo(LPCARGO Cargo) { cmsDeleteTransform(Cargo ->Lab2RGB); cmsDeleteTransform(Cargo ->RGB2Lab); cmsCloseProfile(Cargo ->hLab); cmsCloseProfile(Cargo ->hRGB); } int main(void) { LPLUT AToB0, BToA0; CARGO Cargo; cmsHPROFILE hProfile; fprintf(stderr, "Creating lcmscmy.icm..."); InitCargo(&Cargo); hProfile = cmsCreateLabProfile(NULL); AToB0 = cmsAllocLUT(); BToA0 = cmsAllocLUT(); cmsAlloc3DGrid(AToB0, 25, 3, 3); cmsAlloc3DGrid(BToA0, 25, 3, 3); cmsSample3DGrid(AToB0, Reverse, &Cargo, 0); cmsSample3DGrid(BToA0, Forward, &Cargo, 0); cmsAddTag(hProfile, icSigAToB0Tag, AToB0); cmsAddTag(hProfile, icSigBToA0Tag, BToA0); cmsSetColorSpace(hProfile, icSigCmyData); cmsSetDeviceClass(hProfile, icSigOutputClass); cmsAddTag(hProfile, icSigProfileDescriptionTag, "CMY "); cmsAddTag(hProfile, icSigCopyrightTag, "Copyright (c) HP, 2007. All rights reserved."); cmsAddTag(hProfile, icSigDeviceMfgDescTag, "Little cms"); cmsAddTag(hProfile, icSigDeviceModelDescTag, "CMY space"); _cmsSaveProfile(hProfile, "lcmscmy.icm"); cmsFreeLUT(AToB0); cmsFreeLUT(BToA0); cmsCloseProfile(hProfile); FreeCargo(&Cargo); fprintf(stderr, "Done.\n"); return 0; } lcms2-2.12rc1/utils/samples/Makefile.am0000644000175000017500000000117213775114656016756 0ustar martimarti# # Makefile for building lcms sample programs # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common bin_PROGRAMS = wtpt wtpt_LDADD = $(top_builddir)/src/liblcms2.la wtpt_LDFLAGS = @LDFLAGS@ wtpt_SOURCES = wtpt.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = wtpt.1 EXTRA_DIST = $(man_MANS) roundtrip.c mktiff8.c mkgrayer.c mkcmy.c itufax.c lcms2-2.12rc1/utils/samples/wtpt.c0000644000175000017500000001027113775114656016064 0ustar martimarti// // Little cms // Copyright (C) 1998-2015 Marti Maria // //--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2014 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- #include "utils.h" // The toggles stuff static cmsBool lShowXYZ = TRUE; static cmsBool lShowLab = FALSE; static cmsBool lShowLCh = FALSE; static void HandleSwitches(int argc, char *argv[]) { int s; while ((s = xgetopt(argc, argv, "lcx")) != EOF) { switch (s){ case 'l': lShowLab = TRUE; break; case 'c': lShowLCh = TRUE; break; case 'x': lShowXYZ = FALSE; break; default: FatalError("Unknown option - run without args to see valid ones.\n"); } } } static void Help(void) { fprintf(stderr, "little CMS ICC white point utility - v3 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); fprintf(stderr, "usage: wtpt [flags] []\n\n"); fprintf(stderr, "flags:\n\n"); fprintf(stderr, "%cl - CIE Lab\n", SW); fprintf(stderr, "%cc - CIE LCh\n", SW); fprintf(stderr, "%cx - Don't show XYZ\n", SW); fprintf(stderr, "\nIf no parameters are given, then this program will\n"); fprintf(stderr, "ask for XYZ value of media white. If parameter given, it must be\n"); fprintf(stderr, "the profile to inspect.\n\n"); fprintf(stderr, "This program is intended to be a demo of the little cms\n" "engine. Both lcms and this program are freeware. You can\n" "obtain both in source code at http://www.littlecms.com\n" "For suggestions, comments, bug reports etc. send mail to\n" "info@littlecms.com\n\n"); exit(0); } static void ShowWhitePoint(cmsCIEXYZ* WtPt) { cmsCIELab Lab; cmsCIELCh LCh; cmsCIExyY xyY; cmsXYZ2Lab(NULL, &Lab, WtPt); cmsLab2LCh(&LCh, &Lab); cmsXYZ2xyY(&xyY, WtPt); if (lShowXYZ) printf("XYZ=(%3.1f, %3.1f, %3.1f)\n", WtPt->X, WtPt->Y, WtPt->Z); if (lShowLab) printf("Lab=(%3.3f, %3.3f, %3.3f)\n", Lab.L, Lab.a, Lab.b); if (lShowLCh) printf("LCh=(%3.3f, %3.3f, %3.3f)\n", LCh.L, LCh.C, LCh.h); { double Ssens = (LCh.C * 100.0 )/ sqrt(LCh.C*LCh.C + LCh.L * LCh.L) ; printf("Sens = %f\n", Ssens); } } int main(int argc, char *argv[]) { int nargs; InitUtils("wtpt"); HandleSwitches(argc, argv); nargs = (argc - xoptind); if (nargs != 1) Help(); else { cmsCIEXYZ* WtPt; cmsHPROFILE hProfile = cmsOpenProfileFromFile(argv[xoptind], "r"); if (hProfile == NULL) return 1; WtPt = cmsReadTag(hProfile, cmsSigMediaWhitePointTag); ShowWhitePoint(WtPt); cmsCloseProfile(hProfile); } return 0; } lcms2-2.12rc1/utils/samples/roundtrip.c0000644000175000017500000000541013775114656017113 0ustar martimarti// // Little cms // Copyright (C) 1998-2011 Marti Maria // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION #include "lcms2.h" #include static double VecDist(cmsUInt8Number bin[3], cmsUInt8Number bout[3]) { double rdist, gdist, bdist; rdist = fabs((double) bout[0] - bin[0]); gdist = fabs((double) bout[1] - bin[1]); bdist = fabs((double) bout[2] - bin[2]); return (sqrt((rdist*rdist + gdist*gdist + bdist*bdist))); } int main(int argc, char* argv[]) { int r, g, b; cmsUInt8Number RGB[3], RGB_OUT[3]; cmsHTRANSFORM xform; cmsHPROFILE hProfile; double err, SumX=0, SumX2=0, Peak = 0, n = 0; if (argc != 2) { printf("roundtrip \n"); return 1; } hProfile = cmsOpenProfileFromFile(argv[1], "r"); if (hProfile == NULL) { printf("invalid profile\n"); return 1; } xform = cmsCreateTransform(hProfile,TYPE_RGB_8, hProfile, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE); if (xform == NULL) { printf("Not a valid RGB profile\n"); return 1; } for (r=0; r< 256; r++) { printf("%d \r", r); for (g=0; g < 256; g++) { for (b=0; b < 256; b++) { RGB[0] = r; RGB[1] = g; RGB[2] = b; cmsDoTransform(xform, RGB, RGB_OUT, 1); err = VecDist(RGB, RGB_OUT); SumX += err; SumX2 += err * err; n += 1.0; if (err > Peak) Peak = err; } } } printf("Average %g\n", SumX / n); printf("Max %g\n", Peak); printf("Std %g\n", sqrt((n*SumX2 - SumX * SumX) / (n*(n-1)))); cmsCloseProfile(hProfile); cmsDeleteTransform(xform); return 0; }lcms2-2.12rc1/utils/samples/mkgrayer.c0000644000175000017500000000476513775114656016722 0ustar martimarti// // Little cms // Copyright (C) 1998-2003 Marti Maria // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "lcms.h" static int Forward(register WORD In[], register WORD Out[], register LPVOID Cargo) { cmsCIELab Lab; cmsLabEncoded2Float(&Lab, In); if (fabs(Lab.a) < 3 && fabs(Lab.b) < 3) { double L_01 = Lab.L / 100.0; WORD K; if (L_01 > 1) L_01 = 1; K = (WORD) floor(L_01* 65535.0 + 0.5); Out[0] = Out[1] = Out[2] = K; } else { Out[0] = 0xFFFF; Out[1] = 0; Out[2] = 0; } return TRUE; } int main(int argc, char *argv[]) { LPLUT BToA0; cmsHPROFILE hProfile; fprintf(stderr, "Creating interpol2.icc..."); unlink("interpol2.icc"); hProfile = cmsOpenProfileFromFile("interpol2.icc", "w8"); BToA0 = cmsAllocLUT(); cmsAlloc3DGrid(BToA0, 17, 3, 3); cmsSample3DGrid(BToA0, Forward, NULL, 0); cmsAddTag(hProfile, icSigBToA0Tag, BToA0); cmsSetColorSpace(hProfile, icSigRgbData); cmsSetPCS(hProfile, icSigLabData); cmsSetDeviceClass(hProfile, icSigOutputClass); cmsAddTag(hProfile, icSigProfileDescriptionTag, "Interpolation test"); cmsAddTag(hProfile, icSigCopyrightTag, "Copyright (c) HP 2007. All rights reserved."); cmsAddTag(hProfile, icSigDeviceMfgDescTag, "Little cms"); cmsAddTag(hProfile, icSigDeviceModelDescTag, "Interpolation test profile"); cmsCloseProfile(hProfile); cmsFreeLUT(BToA0); fprintf(stderr, "Done.\n"); return 0; } lcms2-2.12rc1/utils/samples/itufax.c0000644000175000017500000001060213775114656016364 0ustar martimarti// // Little cms // Copyright (C) 1998-2003 Marti Maria // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "lcms.h" // This is a sample on how to build a profile for decoding ITU T.42/Fax JPEG // streams. The profile has an additional ability in the input direction of // gamut compress values between 85 < a < -85 and -75 < b < 125. This conforms // the default range for ITU/T.42 -- See RFC 2301, section 6.2.3 for details // L* = [0, 100] // a* = [-85, 85] // b* = [-75, 125] // These functions does convert the encoding of ITUFAX to floating point static void ITU2Lab(WORD In[3], LPcmsCIELab Lab) { Lab -> L = (double) In[0] / 655.35; Lab -> a = (double) 170.* (In[1] - 32768.) / 65535.; Lab -> b = (double) 200.* (In[2] - 24576.) / 65535.; } static void Lab2ITU(LPcmsCIELab Lab, WORD Out[3]) { Out[0] = (WORD) floor((double) (Lab -> L / 100.)* 65535. + 0.5); Out[1] = (WORD) floor((double) (Lab -> a / 170.)* 65535. + 32768. + 0.5); Out[2] = (WORD) floor((double) (Lab -> b / 200.)* 65535. + 24576. + 0.5); } // These are the samplers-- They are passed as callbacks to cmsSample3DGrid() // then, cmsSample3DGrid() will sweel whole Lab gamut calling these functions // once for each node. In[] will contain the Lab PCS value to convert to ITUFAX // on InputDirection, or the ITUFAX value to convert to Lab in OutputDirection // You can change the number of sample points if desired, the algorithm will // remain same. 33 points gives good accuracy, but you can reduce to 22 or less // is space is critical #define GRID_POINTS 33 static int InputDirection(register WORD In[], register WORD Out[], register LPVOID Cargo) { cmsCIELab Lab; cmsLabEncoded2Float(&Lab, In); cmsClampLab(&Lab, 85, -85, 125, -75); // This function does the necessary gamut remapping Lab2ITU(&Lab, Out); return TRUE; } static int OutputDirection(register WORD In[], register WORD Out[], register LPVOID Cargo) { cmsCIELab Lab; ITU2Lab(In, &Lab); cmsFloat2LabEncoded(Out, &Lab); return TRUE; } // The main entry point. Just create a profile an populate it with required tags. // note that cmsOpenProfileFromFile("itufax.icm", "w") will NOT delete the file // if already exists. This is for obvious safety reasons. int main(int argc, char *argv[]) { LPLUT AToB0, BToA0; cmsHPROFILE hProfile; fprintf(stderr, "Creating itufax.icm..."); unlink("itufax.icm"); hProfile = cmsOpenProfileFromFile("itufax.icm", "w"); AToB0 = cmsAllocLUT(); BToA0 = cmsAllocLUT(); cmsAlloc3DGrid(AToB0, GRID_POINTS, 3, 3); cmsAlloc3DGrid(BToA0, GRID_POINTS, 3, 3); cmsSample3DGrid(AToB0, InputDirection, NULL, 0); cmsSample3DGrid(BToA0, OutputDirection, NULL, 0); cmsAddTag(hProfile, icSigAToB0Tag, AToB0); cmsAddTag(hProfile, icSigBToA0Tag, BToA0); cmsSetColorSpace(hProfile, icSigLabData); cmsSetPCS(hProfile, icSigLabData); cmsSetDeviceClass(hProfile, icSigColorSpaceClass); cmsAddTag(hProfile, icSigProfileDescriptionTag, "ITU T.42/Fax JPEG CIEL*a*b*"); cmsAddTag(hProfile, icSigCopyrightTag, "No Copyright, use freely."); cmsAddTag(hProfile, icSigDeviceMfgDescTag, "Little cms"); cmsAddTag(hProfile, icSigDeviceModelDescTag, "ITU T.42/Fax JPEG CIEL*a*b*"); cmsCloseProfile(hProfile); cmsFreeLUT(AToB0); cmsFreeLUT(BToA0); fprintf(stderr, "Done.\n"); return 0; } lcms2-2.12rc1/utils/samples/vericc.c0000644000175000017500000000426113775114656016343 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2010 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- // #include "lcms2.h" #include #include static int PrintUsage(void) { fprintf(stderr, "Sets profile version\n\nUsage: vericc --r iccprofile.icc\n"); return 0; } int main(int argc, char *argv[]) { cmsHPROFILE hProfile; char* ptr; cmsFloat64Number Version; if (argc != 3) return PrintUsage(); ptr = argv[1]; if (strncmp(ptr, "--r", 3) != 0) return PrintUsage(); ptr += 3; if (!*ptr) { fprintf(stderr, "Wrong version number\n"); return 1; } Version = atof(ptr); hProfile = cmsOpenProfileFromFile(argv[2], "r"); if (hProfile == NULL) { fprintf(stderr, "'%s': cannot open\n", argv[2]); return 1; } cmsSetProfileVersion(hProfile, Version); cmsSaveProfileToFile(hProfile, "$$tmp.icc"); cmsCloseProfile(hProfile); remove(argv[2]); rename("$$tmp.icc", argv[2]); return 0; } lcms2-2.12rc1/utils/samples/Makefile.in0000644000175000017500000004613713775114656017001 0ustar martimarti# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building lcms sample programs # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria Oct 2004 VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = icctrans$(EXEEXT) wtpt$(EXEEXT) icc2ps$(EXEEXT) \ icclink$(EXEEXT) subdir = samples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_icc2ps_OBJECTS = icc2ps.$(OBJEXT) xgetopt.$(OBJEXT) icc2ps_OBJECTS = $(am_icc2ps_OBJECTS) icc2ps_DEPENDENCIES = $(top_builddir)/src/liblcms.la icc2ps_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(icc2ps_LDFLAGS) \ $(LDFLAGS) -o $@ am_icclink_OBJECTS = icclink.$(OBJEXT) xgetopt.$(OBJEXT) \ vprf.$(OBJEXT) icclink_OBJECTS = $(am_icclink_OBJECTS) icclink_DEPENDENCIES = $(top_builddir)/src/liblcms.la icclink_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(icclink_LDFLAGS) \ $(LDFLAGS) -o $@ am_icctrans_OBJECTS = icctrans.$(OBJEXT) xgetopt.$(OBJEXT) \ vprf.$(OBJEXT) icctrans_OBJECTS = $(am_icctrans_OBJECTS) icctrans_DEPENDENCIES = $(top_builddir)/src/liblcms.la icctrans_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(icctrans_LDFLAGS) \ $(LDFLAGS) -o $@ am_wtpt_OBJECTS = wtpt.$(OBJEXT) xgetopt.$(OBJEXT) wtpt_OBJECTS = $(am_wtpt_OBJECTS) wtpt_DEPENDENCIES = $(top_builddir)/src/liblcms.la wtpt_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(wtpt_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(icc2ps_SOURCES) $(icclink_SOURCES) $(icctrans_SOURCES) \ $(wtpt_SOURCES) DIST_SOURCES = $(icc2ps_SOURCES) $(icclink_SOURCES) \ $(icctrans_SOURCES) $(wtpt_SOURCES) man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT16_T = @INT16_T@ INT32_T = @INT32_T@ INT64_T = @INT64_T@ INT8_T = @INT8_T@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LCMS_PYEXECDIR = @LCMS_PYEXECDIR@ LCMS_PYINCLUDE = @LCMS_PYINCLUDE@ LCMS_PYLIB = @LCMS_PYLIB@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ UINT16_T = @UINT16_T@ UINT32_T = @UINT32_T@ UINT64_T = @UINT64_T@ UINT8_T = @UINT8_T@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include icctrans_LDADD = $(top_builddir)/src/liblcms.la icctrans_LDFLAGS = @LDFLAGS@ icctrans_SOURCES = icctrans.c xgetopt.c vprf.c icctrans_MANS = icctrans.1 wtpt_LDADD = $(top_builddir)/src/liblcms.la wtpt_LDFLAGS = @LDFLAGS@ wtpt_SOURCES = wtpt.c xgetopt.c icc2ps_LDADD = $(top_builddir)/src/liblcms.la icc2ps_LDFLAGS = @LDFLAGS@ icc2ps_SOURCES = icc2ps.c xgetopt.c icclink_LDADD = $(top_builddir)/src/liblcms.la icclink_LDFLAGS = @LDFLAGS@ icclink_SOURCES = icclink.c xgetopt.c vprf.c man_MANS = wtpt.1 icc2ps.1 icclink.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign samples/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign samples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done icc2ps$(EXEEXT): $(icc2ps_OBJECTS) $(icc2ps_DEPENDENCIES) @rm -f icc2ps$(EXEEXT) $(icc2ps_LINK) $(icc2ps_OBJECTS) $(icc2ps_LDADD) $(LIBS) icclink$(EXEEXT): $(icclink_OBJECTS) $(icclink_DEPENDENCIES) @rm -f icclink$(EXEEXT) $(icclink_LINK) $(icclink_OBJECTS) $(icclink_LDADD) $(LIBS) icctrans$(EXEEXT): $(icctrans_OBJECTS) $(icctrans_DEPENDENCIES) @rm -f icctrans$(EXEEXT) $(icctrans_LINK) $(icctrans_OBJECTS) $(icctrans_LDADD) $(LIBS) wtpt$(EXEEXT): $(wtpt_OBJECTS) $(wtpt_DEPENDENCIES) @rm -f wtpt$(EXEEXT) $(wtpt_LINK) $(wtpt_OBJECTS) $(wtpt_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icc2ps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icclink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icctrans.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vprf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wtpt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetopt.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-exec-am: install-binPROGRAMS install-html: install-html-am install-info: install-info-am install-man: install-man1 install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/utils/psicc/0000755000175000017500000000000013775114656014356 5ustar martimartilcms2-2.12rc1/utils/psicc/Makefile.am0000644000175000017500000000112113775114656016405 0ustar martimarti# # Makefile for building psicc # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common bin_PROGRAMS = psicc psicc_LDADD = $(top_builddir)/src/liblcms2.la @LCMS_LIB_DEPLIBS@ psicc_LDFLAGS = @LDFLAGS@ psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = psicc.1 EXTRA_DIST = $(man_MANS) lcms2-2.12rc1/utils/psicc/psicc.c0000644000175000017500000001512313775114656015625 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System // Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //--------------------------------------------------------------------------------- #include "utils.h" // ------------------------------------------------------------------------ static char *cInProf = NULL; static char *cOutProf = NULL; static int Intent = INTENT_PERCEPTUAL; static FILE* OutFile; static int BlackPointCompensation = FALSE; static int Undecorated = FALSE; static int PrecalcMode = 1; static int NumOfGridPoints = 0; static void Help(void) { fprintf(stderr, "usage: psicc [flags] []\n\n"); fprintf(stderr, "flags:\n\n"); fprintf(stderr, "-i - Input profile: Generates Color Space Array (CSA)\n"); fprintf(stderr, "-o - Output profile: Generates Color Rendering Dictionary(CRD)\n"); fprintf(stderr, "-t<0,1,2,3> - Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute)\n"); fprintf(stderr, "-b - Black point compensation (CRD only)\n"); fprintf(stderr, "-u - Do NOT generate resource name on CRD\n"); fprintf(stderr, "-c<0,1,2> - Precision (0=LowRes, 1=Normal (default), 2=Hi-res) (CRD only)\n"); fprintf(stderr, "-n - Alternate way to set precission, number of CLUT points (CRD only)\n"); fprintf(stderr, "\n"); fprintf(stderr, "If no output file is specified, output goes to stdout.\n\n"); fprintf(stderr, "This program is intended to be a demo of the little cms\n" "engine. Both lcms and this program are freeware. You can\n" "obtain both in source code at https://www.littlecms.com\n" "For suggestions, comments, bug reports etc. send mail to\n" "info@littlecms.com\n\n"); exit(0); } // The toggles stuff static void HandleSwitches(int argc, char *argv[]) { int s; while ((s = xgetopt(argc,argv,"uUbBI:i:O:o:T:t:c:C:n:N:-:")) != EOF) { switch (s) { case '-': if (strcmp(xoptarg, "help") == 0) { Help(); } else { FatalError("Unknown option - run without args to see valid ones.\n"); } break; case 'i': case 'I': cInProf = xoptarg; break; case 'o': case 'O': cOutProf = xoptarg; break; case 'b': case 'B': BlackPointCompensation =TRUE; break; case 't': case 'T': Intent = atoi(xoptarg); if (Intent > 3) Intent = 3; if (Intent < 0) Intent = 0; break; case 'U': case 'u': Undecorated = TRUE; break; case 'c': case 'C': PrecalcMode = atoi(xoptarg); if (PrecalcMode < 0 || PrecalcMode > 2) FatalError("ERROR: Unknown precalc mode '%d'", PrecalcMode); break; case 'n': case 'N': if (PrecalcMode != 1) FatalError("Precalc mode already specified"); NumOfGridPoints = atoi(xoptarg); break; default: FatalError("Unknown option - run without args to see valid ones.\n"); } } } static void GenerateCSA(void) { cmsHPROFILE hProfile = OpenStockProfile(0, cInProf); size_t n; char* Buffer; if (hProfile == NULL) return; n = cmsGetPostScriptCSA(0, hProfile, Intent, 0, NULL, 0); if (n == 0) return; Buffer = (char*) malloc(n + 1); if (Buffer != NULL) { cmsGetPostScriptCSA(0, hProfile, Intent, 0, Buffer, (cmsUInt32Number) n); Buffer[n] = 0; fprintf(OutFile, "%s", Buffer); free(Buffer); } cmsCloseProfile(hProfile); } static void GenerateCRD(void) { cmsHPROFILE hProfile = OpenStockProfile(0, cOutProf); size_t n; char* Buffer; cmsUInt32Number dwFlags = 0; if (hProfile == NULL) return; if (BlackPointCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; if (Undecorated) dwFlags |= cmsFLAGS_NODEFAULTRESOURCEDEF; switch (PrecalcMode) { case 0: dwFlags |= cmsFLAGS_LOWRESPRECALC; break; case 2: dwFlags |= cmsFLAGS_HIGHRESPRECALC; break; case 1: if (NumOfGridPoints > 0) dwFlags |= cmsFLAGS_GRIDPOINTS(NumOfGridPoints); break; default: FatalError("ERROR: Unknown precalculation mode '%d'", PrecalcMode); } n = cmsGetPostScriptCRD(0, hProfile, Intent, dwFlags, NULL, 0); if (n == 0) return; Buffer = (char*) malloc(n + 1); if (Buffer == NULL) return; cmsGetPostScriptCRD(0, hProfile, Intent, dwFlags, Buffer, (cmsUInt32Number) n); Buffer[n] = 0; fprintf(OutFile, "%s", Buffer); free(Buffer); cmsCloseProfile(hProfile); } int main(int argc, char *argv[]) { int nargs; fprintf(stderr, "Little CMS ICC PostScript generator - v2.1 [LittleCMS %2.2f]\n", LCMS_VERSION / 1000.0); fprintf(stderr, "Copyright (c) 1998-2020 Marti Maria Saguer. See COPYING file for details.\n"); fflush(stderr); // Initialize InitUtils("psicc"); HandleSwitches(argc, argv); nargs = (argc - xoptind); if (nargs != 0 && nargs != 1) Help(); if (cInProf == NULL && cOutProf == NULL) Help(); if (nargs == 0) OutFile = stdout; else OutFile = fopen(argv[xoptind], "wt"); if (cInProf != NULL) GenerateCSA(); if (cOutProf != NULL) GenerateCRD(); if (nargs == 1) { fclose(OutFile); } return 0; } lcms2-2.12rc1/utils/psicc/psicc.10000644000175000017500000000230413775114656015540 0ustar martimarti.\"Shiju P. Nair September 30, 2004 .\"Thomas Weber April 23, 2014 .TH PSICC 1 "September 30, 2004" .SH NAME psicc - little cms PostScript converter. .SH SYNOPSIS .B psicc .RI [ options ] .SH DESCRIPTION lcms is a standalone CMM engine, which deals with the color management. It implements a fast transformation between ICC profiles. .B psicc is a little cms PostScript converter. .SH OPTIONS .TP .B \-b Black point compensation (CRD only). .TP .BI \-c\ precision Precision (0=LowRes, 1=Normal, 2=Hi-res) (CRD only) [defaults to 1]. .TP .BI \-i\ profile Input profile: Generates Color Space Array (CSA). .TP .BI \-n\ gridpoints Alternate way to set precision, number of CLUT points (CRD only). .TP .BI \-o\ profile .p Output profile: Generates Color Rendering Dictionary(CRD). .TP .BI \-t\ intent Intent (0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute) [defaults to 0]. .TP .B \-u Do NOT generate resource name on CRD. .SH NOTES For suggestions, comments, bug reports etc. send mail to info@littlecms.com. .SH SEE ALSO .BR jpgicc (1), .BR linkicc (1), .BR tificc (1), .BR transicc (1) .SH AUTHOR This manual page was written by Shiju p. Nair , for the Debian project. lcms2-2.12rc1/utils/psicc/Makefile.in0000644000175000017500000005462413775114656016436 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building psicc # Originally Written by Bob Friesenhahn, June 2003 # Additions and bugs by Marti Maria VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = psicc$(EXEEXT) subdir = utils/psicc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_psicc_OBJECTS = psicc.$(OBJEXT) ../common/xgetopt.$(OBJEXT) \ ../common/vprf.$(OBJEXT) psicc_OBJECTS = $(am_psicc_OBJECTS) psicc_DEPENDENCIES = $(top_builddir)/src/liblcms2.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = psicc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(psicc_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = am__maybe_remake_depfiles = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(psicc_SOURCES) DIST_SOURCES = $(psicc_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign no-dependencies AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include \ -I$(top_srcdir)/utils/common -I$(top_builddir)/utils/common psicc_LDADD = $(top_builddir)/src/liblcms2.la @LCMS_LIB_DEPLIBS@ psicc_LDFLAGS = @LDFLAGS@ psicc_SOURCES = psicc.c ../common/xgetopt.c ../common/vprf.c ../common/utils.h man_MANS = psicc.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign utils/psicc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign utils/psicc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ../common/$(am__dirstamp): @$(MKDIR_P) ../common @: > ../common/$(am__dirstamp) ../common/xgetopt.$(OBJEXT): ../common/$(am__dirstamp) ../common/vprf.$(OBJEXT): ../common/$(am__dirstamp) psicc$(EXEEXT): $(psicc_OBJECTS) $(psicc_DEPENDENCIES) $(EXTRA_psicc_DEPENDENCIES) @rm -f psicc$(EXEEXT) $(AM_V_CCLD)$(psicc_LINK) $(psicc_OBJECTS) $(psicc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../common/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(AM_V_CC)$(COMPILE) -c -o $@ $< .c.obj: $(AM_V_CC)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: $(AM_V_CC)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../common/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-man uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/utils/matlab/0000755000175000017500000000000013775114656014515 5ustar martimartilcms2-2.12rc1/utils/matlab/howto.txt0000644000175000017500000000005313775114656016414 0ustar martimarti To compile for matlab use: mex @lcms_rsp lcms2-2.12rc1/utils/matlab/icctrans.c0000644000175000017500000004016113775114656016471 0ustar martimarti// // Little cms // Copyright (C) 1998-2010 Marti Maria, Ignacio Ruiz de Conejo // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the Software // is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "mex.h" #include "lcms2.h" #include "string.h" #include "stdarg.h" // xgetopt() interface ----------------------------------------------------- static int xoptind; static char *xoptarg; static int xopterr; static char *letP; static char SW = '-'; // ------------------------------------------------------------------------ static int Verbose ; // Print some statistics static char *cInProf; // Input profile static char *cOutProf; // Output profile static char *cProofing; // Softproofing profile static int Intent; // Rendering Intent static int ProofingIntent; // RI for proof static int PrecalcMode; // 0 = Not, 1=Normal, 2=Accurate, 3=Fast static cmsBool BlackPointCompensation; static cmsBool lIsDeviceLink; static cmsBool lMultiProfileChain; // Multiple profile chain static cmsHPROFILE hInput, hOutput, hProof; static cmsHTRANSFORM hColorTransform; static cmsHPROFILE hProfiles[255]; static int nProfiles; static cmsColorSpaceSignature InputColorSpace, OutputColorSpace; static int OutputChannels, InputChannels, nBytesDepth; // Error. Print error message and abort static cmsBool FatalError(const char *frm, ...) { va_list args; char Buffer[1024]; va_start(args, frm); vsprintf(Buffer, frm, args); mexErrMsgTxt(Buffer); va_end(args); return FALSE; } // This is the handler passed to lcms static void MatLabErrorHandler(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { mexErrMsgTxt(Text); } // // Parse the command line options, System V style. // static void xoptinit() { xoptind = 1; xopterr = 0; letP = NULL; } static int xgetopt(int argc, char *argv[], char *optionS) { unsigned char ch; char *optP; if (SW == 0) { SW = '/'; } if (argc > xoptind) { if (letP == NULL) { if ((letP = argv[xoptind]) == NULL || *(letP++) != SW) goto gopEOF; if (*letP == SW) { xoptind++; goto gopEOF; } } if (0 == (ch = *(letP++))) { xoptind++; goto gopEOF; } if (':' == ch || (optP = strchr(optionS, ch)) == NULL) goto gopError; if (':' == *(++optP)) { xoptind++; if (0 == *letP) { if (argc <= xoptind) goto gopError; letP = argv[xoptind++]; } xoptarg = letP; letP = NULL; } else { if (0 == *letP) { xoptind++; letP = NULL; } xoptarg = NULL; } return ch; } gopEOF: xoptarg = letP = NULL; return EOF; gopError: xoptarg = NULL; if (xopterr) FatalError ("get command line option"); return ('?'); } // Return Mathlab type by depth static size_t SizeOfArrayType(const mxArray *Array) { switch (mxGetClassID(Array)) { case mxINT8_CLASS: return 1; case mxUINT8_CLASS: return 1; case mxINT16_CLASS: return 2; case mxUINT16_CLASS: return 2; case mxSINGLE_CLASS: return 4; case mxDOUBLE_CLASS: return 0; // Special case -- lcms handles double as size=0 default: FatalError("Unsupported data type"); return 0; } } // Get number of pixels of input array. Supported arrays are // organized as NxMxD, being N and M the size of image and D the // number of components. static size_t GetNumberOfPixels(const mxArray* In) { int nDimensions = mxGetNumberOfDimensions(In); const int *Dimensions = mxGetDimensions(In); switch (nDimensions) { case 1: return 1; // It is just a spot color case 2: return Dimensions[0]; // A scanline case 3: return Dimensions[0]*Dimensions[1]; // A image default: FatalError("Unsupported array of %d dimensions", nDimensions); return 0; } } // Allocates the output array. Copies the input array modifying the pixel // definition to match "OutputChannels". static mxArray* AllocateOutputArray(const mxArray* In, int OutputChannels) { mxArray* Out = mxDuplicateArray(In); // Make a "deep copy" of Input array int nDimensions = mxGetNumberOfDimensions(In); const int* Dimensions = mxGetDimensions(In); int InputChannels = Dimensions[nDimensions-1]; // Modify pixel size only if needed if (InputChannels != OutputChannels) { int i, NewSize; int *ModifiedDimensions = (int*) mxMalloc(nDimensions * sizeof(int)); memmove(ModifiedDimensions, Dimensions, nDimensions * sizeof(int)); ModifiedDimensions[nDimensions - 1] = OutputChannels; switch (mxGetClassID(In)) { case mxINT8_CLASS: NewSize = sizeof(char); break; case mxUINT8_CLASS: NewSize = sizeof(unsigned char); break; case mxINT16_CLASS: NewSize = sizeof(short); break; case mxUINT16_CLASS: NewSize = sizeof(unsigned short); break; default: case mxDOUBLE_CLASS: NewSize = sizeof(double); break; } // NewSize = 1; for (i=0; i < nDimensions; i++) NewSize *= ModifiedDimensions[i]; mxSetDimensions(Out, ModifiedDimensions, nDimensions); mxFree(ModifiedDimensions); mxSetPr(Out, mxRealloc(mxGetPr(Out), NewSize)); } return Out; } // Does create a format descriptor. "Bytes" is the sizeof type in bytes // // Bytes Meaning // ------ -------- // 0 Floating point (double) // 1 8-bit samples // 2 16-bit samples static cmsUInt32Number MakeFormatDescriptor(cmsColorSpaceSignature ColorSpace, int Bytes) { int IsFloat = (Bytes == 0 || Bytes == 4) ? 1 : 0; int Channels = cmsChannelsOf(ColorSpace); return FLOAT_SH(IsFloat)|COLORSPACE_SH(_cmsLCMScolorSpace(ColorSpace))|BYTES_SH(Bytes)|CHANNELS_SH(Channels)|PLANAR_SH(1); } // Opens a profile or proper built-in static cmsHPROFILE OpenProfile(const char* File) { cmsContext ContextID = 0; if (!File) return cmsCreate_sRGBProfileTHR(ContextID); if (cmsstrcasecmp(File, "*Lab2") == 0) return cmsCreateLab2ProfileTHR(ContextID, NULL); if (cmsstrcasecmp(File, "*Lab4") == 0) return cmsCreateLab4ProfileTHR(ContextID, NULL); if (cmsstrcasecmp(File, "*Lab") == 0) return cmsCreateLab4ProfileTHR(ContextID, NULL); if (cmsstrcasecmp(File, "*LabD65") == 0) { cmsCIExyY D65xyY; cmsWhitePointFromTemp( &D65xyY, 6504); return cmsCreateLab4ProfileTHR(ContextID, &D65xyY); } if (cmsstrcasecmp(File, "*XYZ") == 0) return cmsCreateXYZProfileTHR(ContextID); if (cmsstrcasecmp(File, "*Gray22") == 0) { cmsToneCurve* Curve = cmsBuildGamma(ContextID, 2.2); cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); return hProfile; } if (cmsstrcasecmp(File, "*Gray30") == 0) { cmsToneCurve* Curve = cmsBuildGamma(ContextID, 3.0); cmsHPROFILE hProfile = cmsCreateGrayProfileTHR(ContextID, cmsD50_xyY(), Curve); cmsFreeToneCurve(Curve); return hProfile; } if (cmsstrcasecmp(File, "*srgb") == 0) return cmsCreate_sRGBProfileTHR(ContextID); if (cmsstrcasecmp(File, "*null") == 0) return cmsCreateNULLProfileTHR(ContextID); if (cmsstrcasecmp(File, "*Lin2222") == 0) { cmsToneCurve* Gamma = cmsBuildGamma(0, 2.2); cmsToneCurve* Gamma4[4]; cmsHPROFILE hProfile; Gamma4[0] = Gamma4[1] = Gamma4[2] = Gamma4[3] = Gamma; hProfile = cmsCreateLinearizationDeviceLink(cmsSigCmykData, Gamma4); cmsFreeToneCurve(Gamma); return hProfile; } return cmsOpenProfileFromFileTHR(ContextID, File, "r"); } static cmsUInt32Number GetFlags() { cmsUInt32Number dwFlags = 0; switch (PrecalcMode) { case 0: dwFlags = cmsFLAGS_NOOPTIMIZE; break; case 2: dwFlags = cmsFLAGS_HIGHRESPRECALC; break; case 3: dwFlags = cmsFLAGS_LOWRESPRECALC; break; case 1: break; default: FatalError("Unknown precalculation mode '%d'", PrecalcMode); } if (BlackPointCompensation) dwFlags |= cmsFLAGS_BLACKPOINTCOMPENSATION; return dwFlags; } // Create transforms static void OpenTransforms(int argc, char *argv[]) { cmsUInt32Number dwIn, dwOut, dwFlags; if (lMultiProfileChain) { int i; cmsHTRANSFORM hTmp; nProfiles = argc - xoptind; for (i=0; i < nProfiles; i++) { hProfiles[i] = OpenProfile(argv[i+xoptind]); } // Create a temporary devicelink hTmp = cmsCreateMultiprofileTransform(hProfiles, nProfiles, 0, 0, Intent, GetFlags()); hInput = cmsTransform2DeviceLink(hTmp, 4.2, 0); hOutput = NULL; cmsDeleteTransform(hTmp); InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetPCS(hInput); lIsDeviceLink = TRUE; } else if (lIsDeviceLink) { hInput = cmsOpenProfileFromFile(cInProf, "r"); hOutput = NULL; InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetPCS(hInput); } else { hInput = OpenProfile(cInProf); hOutput = OpenProfile(cOutProf); InputColorSpace = cmsGetColorSpace(hInput); OutputColorSpace = cmsGetColorSpace(hOutput); if (cmsGetDeviceClass(hInput) == cmsSigLinkClass || cmsGetDeviceClass(hOutput) == cmsSigLinkClass) FatalError("Use %cl flag for devicelink profiles!\n", SW); } /* if (Verbose) { mexPrintf("From: %s\n", cmsTakeProductName(hInput)); if (hOutput) mexPrintf("To : %s\n\n", cmsTakeProductName(hOutput)); } */ OutputChannels = cmsChannelsOf(OutputColorSpace); InputChannels = cmsChannelsOf(InputColorSpace); dwIn = MakeFormatDescriptor(InputColorSpace, nBytesDepth); dwOut = MakeFormatDescriptor(OutputColorSpace, nBytesDepth); dwFlags = GetFlags(); if (cProofing != NULL) { hProof = OpenProfile(cProofing); dwFlags |= cmsFLAGS_SOFTPROOFING; } hColorTransform = cmsCreateProofingTransform(hInput, dwIn, hOutput, dwOut, hProof, Intent, ProofingIntent, dwFlags); } static void ApplyTransforms(const mxArray *In, mxArray *Out) { double *Input = mxGetPr(In); double *Output = mxGetPr(Out); size_t nPixels = GetNumberOfPixels(In);; cmsDoTransform(hColorTransform, Input, Output, nPixels ); } static void CloseTransforms(void) { int i; if (hColorTransform) cmsDeleteTransform(hColorTransform); if (hInput) cmsCloseProfile(hInput); if (hOutput) cmsCloseProfile(hOutput); if (hProof) cmsCloseProfile(hProof); for (i=0; i < nProfiles; i++) cmsCloseProfile(hProfiles[i]); hColorTransform = NULL; hInput = NULL; hOutput = NULL; hProof = NULL; } static void HandleSwitches(int argc, char *argv[]) { int s; xoptinit(); while ((s = xgetopt(argc, argv,"C:c:VvbBI:i:O:o:T:t:L:l:r:r:P:p:Mm")) != EOF) { switch (s){ case 'b': case 'B': BlackPointCompensation = TRUE; break; case 'c': case 'C': PrecalcMode = atoi(xoptarg); if (PrecalcMode < 0 || PrecalcMode > 3) FatalError("Unknown precalc mode '%d'", PrecalcMode); break; case 'v': case 'V': Verbose = TRUE; break; case 'i': case 'I': if (lIsDeviceLink) FatalError("Device-link already specified"); cInProf = xoptarg; break; case 'o': case 'O': if (lIsDeviceLink) FatalError("Device-link already specified"); cOutProf = xoptarg; break; case 't': case 'T': Intent = atoi(xoptarg); // if (Intent > 3) Intent = 3; if (Intent < 0) Intent = 0; break; case 'l': case 'L': cInProf = xoptarg; lIsDeviceLink = TRUE; break; case 'p': case 'P': cProofing = xoptarg; break; case 'r': case 'R': ProofingIntent = atoi(xoptarg); // if (ProofingIntent > 3) ProofingIntent = 3; if (ProofingIntent < 0) ProofingIntent = 0; break; case 'm': case 'M': lMultiProfileChain = TRUE; break; default: FatalError("Unknown option."); } } // For multiprofile, need to specify -m if (xoptind < argc) { if (!lMultiProfileChain) FatalError("Use %cm for multiprofile transforms", SW); } } // -------------------------------------------------- Print some fancy help static void PrintHelp(void) { mexPrintf("(MX) little cms ColorSpace conversion tool - v2.0\n\n"); mexPrintf("usage: icctrans (mVar, flags)\n\n"); mexPrintf("mVar : Matlab array.\n"); mexPrintf("flags: a string containing one or more of following options.\n\n"); mexPrintf("\t%cv - Verbose\n", SW); mexPrintf("\t%ci - Input profile (defaults to sRGB)\n", SW); mexPrintf("\t%co - Output profile (defaults to sRGB)\n", SW); mexPrintf("\t%cl - Transform by device-link profile\n", SW); mexPrintf("\t%cm - Apply multiprofile chain\n", SW); mexPrintf("\t%ct - Rendering intent\n", SW); mexPrintf("\t%cb - Black point compensation\n", SW); mexPrintf("\t%cc<0,1,2,3> - Optimize transform (0=Off, 1=Normal, 2=Hi-res, 3=Lo-Res) [defaults to 1]\n", SW); mexPrintf("\t%cp - Soft proof profile\n", SW); mexPrintf("\t%cr<0,1,2,3> - Soft proof intent\n", SW); mexPrintf("\nYou can use following built-ins as profiles:\n\n"); mexPrintf("\t*Lab2 -- D50-based v2 CIEL*a*b\n" "\t*Lab4 -- D50-based v4 CIEL*a*b\n" "\t*Lab -- D50-based v4 CIEL*a*b\n" "\t*XYZ -- CIE XYZ (PCS)\n" "\t*sRGB -- IEC6 1996-2.1 sRGB color space\n" "\t*Gray22 - Monochrome of Gamma 2.2\n" "\t*Gray30 - Monochrome of Gamma 3.0\n" "\t*null - Monochrome black for all input\n" "\t*Lin2222- CMYK linearization of gamma 2.2 on each channel\n\n"); mexPrintf("For suggestions, comments, bug reports etc. send mail to info@littlecms.com\n\n"); } // Main entry point void mexFunction( int nlhs, // Number of left hand side (output) arguments mxArray *plhs[], // Array of left hand side arguments int nrhs, // Number of right hand side (input) arguments const mxArray *prhs[] // Array of right hand side arguments ) { char CommandLine[4096+1]; char *pt, *argv[128]; int argc = 1; if (nrhs != 2) { PrintHelp(); return; } if(nlhs > 1) { FatalError("Too many output arguments."); } // Setup error handler cmsSetLogErrorHandler(MatLabErrorHandler); // Defaults Verbose = 0; cInProf = NULL; cOutProf = NULL; cProofing = NULL; lMultiProfileChain = FALSE; nProfiles = 0; Intent = INTENT_PERCEPTUAL; ProofingIntent = INTENT_ABSOLUTE_COLORIMETRIC; PrecalcMode = 1; BlackPointCompensation = FALSE; lIsDeviceLink = FALSE; // Check types. Fist parameter is array of values, second parameter is command line if (!mxIsNumeric(prhs[0])) FatalError("Type mismatch on argument 1 -- Must be numeric"); if (!mxIsChar(prhs[1])) FatalError("Type mismatch on argument 2 -- Must be string"); // Unpack string to command line buffer if (mxGetString(prhs[1], CommandLine, 4096)) FatalError("Cannot unpack command string"); // Separate to argv[] convention argv[0] = NULL; for (pt = strtok(CommandLine, " "); pt; pt = strtok(NULL, " ")) { argv[argc++] = pt; } // Parse arguments HandleSwitches(argc, argv); nBytesDepth = SizeOfArrayType(prhs[0]); OpenTransforms(argc, argv); plhs[0] = AllocateOutputArray(prhs[0], OutputChannels); ApplyTransforms(prhs[0], plhs[0]); CloseTransforms(); // Done! } lcms2-2.12rc1/utils/matlab/lcms_rsp0000644000175000017500000000107713775114656016267 0ustar martimarti-v -compatibleArrayDims -O -I../../include icctrans.c ../../src/cmscam02.c ../../src/cmscgats.c ../../src/cmscnvrt.c ../../src/cmserr.c ../../src/cmsgamma.c ../../src/cmsgmt.c ../../src/cmsintrp.c ../../src/cmsio0.c ../../src/cmsio1.c ../../src/cmslut.c ../../src/cmsmd5.c ../../src/cmsmtrx.c ../../src/cmsnamed.c ../../src/cmsopt.c ../../src/cmspack.c ../../src/cmspcs.c ../../src/cmsplugin.c ../../src/cmsps2.c ../../src/cmssamp.c ../../src/cmssm.c ../../src/cmstypes.c ../../src/cmsvirt.c ../../src/cmswtpnt.c ../../src/cmsxform.c ../../src/cmshalf.c ../../src/cmsalpha.c lcms2-2.12rc1/m4/0000755000175000017500000000000013775114656012435 5ustar martimartilcms2-2.12rc1/m4/ax_check_compile_flag.m40000644000175000017500000000640213775114656017147 0ustar martimarti# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 4 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS lcms2-2.12rc1/m4/ltsugar.m40000644000175000017500000001042413775114656014361 0ustar martimarti# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) lcms2-2.12rc1/m4/ltversion.m40000644000175000017500000000126213775114656014725 0ustar martimarti# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) lcms2-2.12rc1/m4/lt~obsolete.m40000644000175000017500000001375613775114656015265 0ustar martimarti# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) lcms2-2.12rc1/m4/ax_append_compile_flags.m40000644000175000017500000000565413775114656017534 0ustar martimarti# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # For every FLAG1, FLAG2 it is checked whether the compiler works with the # flag. If it does, the flag is added FLAGS-VARIABLE # # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. # CFLAGS) is used. During the check the flag is always added to the # current language's flags. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: This macro depends on the AX_APPEND_FLAG and # AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with # AX_APPEND_LINK_FLAGS. # # LICENSE # # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([AX_APPEND_COMPILE_FLAGS], [AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) for flag in $1; do AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4]) done ])dnl AX_APPEND_COMPILE_FLAGS lcms2-2.12rc1/m4/libtool.m40000644000175000017500000105721713775114656014360 0ustar martimarti# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS lcms2-2.12rc1/m4/acx_pthread.m40000755000175000017500000002662113775114656015173 0ustar martimarti##### http://autoconf-archive.cryp.to/acx_pthread.html # # SYNOPSIS # # ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. # It sets the PTHREAD_LIBS output variable to the threads library and # linker flags, and the PTHREAD_CFLAGS output variable to any special # C compiler flags that are needed. (The user can also force certain # compiler flags/libs to be tested by setting these environment # variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). # (This is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these # flags, but also link it with them as well. e.g. you should link # with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS # $LIBS # # If you are only building threads programs, you may wish to use # these variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute # constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to # that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # ACTION-IF-FOUND is a list of shell commands to run if a threads # library is found, and ACTION-IF-NOT-FOUND is a list of commands to # run it if it is not found. If ACTION-IF-FOUND is not specified, the # default action will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or # if you have any other suggestions or comments. This macro was based # on work by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) # (with help from M. Frigo), as well as ac_pthread and hb_pthread # macros posted by Alejandro Forero Cuervo to the autoconf macro # repository. We are also grateful for the helpful feedback of # numerous users. # # LAST MODIFICATION # # 2006-05-29 # # COPYLEFT # # Copyright (c) 2006 Steven G. Johnson # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # # As a special exception, the respective Autoconf Macro's copyright # owner gives unlimited permission to copy, distribute and modify the # configure scripts that are the output of Autoconf when processing # the Macro. You need not follow the terms of the GNU General Public # License when using or distributing such scripts, even though # portions of the text of the Macro appear in them. The GNU General # Public License (GPL) does govern all other use of the material that # constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the # Autoconf Macro released by the Autoconf Macro Archive. When you # make and distribute a modified version of the Autoconf Macro, you # may extend this special exception to the GPL to apply to your # modified version as well. AC_DEFUN([ACX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C acx_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) AC_MSG_RESULT($acx_pthread_ok) if test x"$acx_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt lpthread pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" ;; # The HP-UX compiler just warns about options it does not understand # but it needs -mt. *-hpux*) acx_pthread_flags="-mt $acx_pthread_flags" ;; esac if test x"$acx_pthread_ok" = xno; then for flag in $acx_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) if test x"$acx_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include ], [pthread_t th; pthread_join(th, 0); pthread_attr_init(0); pthread_cleanup_push(0, 0); pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], [acx_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($acx_pthread_ok) if test "x$acx_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$acx_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r case "${host_os}" in aix* ) if test x"$GCC" != xyes; then case "$CC" in *xlc ) AC_CHECK_PROG(PTHREAD_CC, xlc_r, xlc_r, ${CC}) ;; *cc ) AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) ;; esac fi case "$CXX" in *xlC ) AC_CHECK_PROG(PTHREAD_CXX, xlC_r, xlC_r, ${CXX}) ;; esac ;; esac fi if test "${PTHREAD_CC}x" = "x" then PTHREAD_CC="$CC" fi if test "${PTHREAD_CXX}x" = "x" then PTHREAD_CXX="$CXX" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) AC_SUBST(PTHREAD_CXX) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$acx_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else acx_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl ACX_PTHREAD lcms2-2.12rc1/m4/ltoptions.m40000644000175000017500000003007313775114656014735 0ustar martimarti# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) lcms2-2.12rc1/m4/ax_require_defined.m40000644000175000017500000000230113775114656016515 0ustar martimarti# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_require_defined.html # =========================================================================== # # SYNOPSIS # # AX_REQUIRE_DEFINED(MACRO) # # DESCRIPTION # # AX_REQUIRE_DEFINED is a simple helper for making sure other macros have # been defined and thus are available for use. This avoids random issues # where a macro isn't expanded. Instead the configure script emits a # non-fatal: # # ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found # # It's like AC_REQUIRE except it doesn't expand the required macro. # # Here's an example: # # AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) # # LICENSE # # Copyright (c) 2014 Mike Frysinger # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 1 AC_DEFUN([AX_REQUIRE_DEFINED], [dnl m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) ])dnl AX_REQUIRE_DEFINED lcms2-2.12rc1/m4/ax_append_flag.m40000644000175000017500000000533113775114656015631 0ustar martimarti# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_append_flag.html # =========================================================================== # # SYNOPSIS # # AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) # # DESCRIPTION # # FLAG is appended to the FLAGS-VARIABLE shell variable, with a space # added in between. # # If FLAGS-VARIABLE is not specified, the current language's flags (e.g. # CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains # FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly # FLAG. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 6 AC_DEFUN([AX_APPEND_FLAG], [dnl AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) AS_VAR_SET_IF(FLAGS,[ AS_CASE([" AS_VAR_GET(FLAGS) "], [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], [ AS_VAR_APPEND(FLAGS,[" $1"]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) ], [ AS_VAR_SET(FLAGS,[$1]) AC_RUN_LOG([: FLAGS="$FLAGS"]) ]) AS_VAR_POPDEF([FLAGS])dnl ])dnl AX_APPEND_FLAG lcms2-2.12rc1/m4/ax_gcc_func_attribute.m40000644000175000017500000001665013775114656017231 0ustar martimarti# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html # =========================================================================== # # SYNOPSIS # # AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE) # # DESCRIPTION # # This macro checks if the compiler supports one of GCC's function # attributes; many other compilers also provide function attributes with # the same syntax. Compiler warnings are used to detect supported # attributes as unsupported ones are ignored by default so quieting # warnings when using this macro will yield false positives. # # The ATTRIBUTE parameter holds the name of the attribute to be checked. # # If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_. # # The macro caches its result in the ax_cv_have_func_attribute_ # variable. # # The macro currently supports the following function attributes: # # alias # aligned # alloc_size # always_inline # artificial # cold # const # constructor # constructor_priority for constructor attribute with priority # deprecated # destructor # dllexport # dllimport # error # externally_visible # flatten # format # format_arg # gnu_inline # hot # ifunc # leaf # malloc # noclone # noinline # nonnull # noreturn # nothrow # optimize # pure # unused # used # visibility # warning # warn_unused_result # weak # weakref # # Unsuppored function attributes will be tested with a prototype returning # an int and not accepting any arguments and the result of the check might # be wrong or meaningless so use with care. # # LICENSE # # Copyright (c) 2013 Gabriele Svelto # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 3 AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [ AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1]) AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([ m4_case([$1], [alias], [ int foo( void ) { return 0; } int bar( void ) __attribute__(($1("foo"))); ], [aligned], [ int foo( void ) __attribute__(($1(32))); ], [alloc_size], [ void *foo(int a) __attribute__(($1(1))); ], [always_inline], [ inline __attribute__(($1)) int foo( void ) { return 0; } ], [artificial], [ inline __attribute__(($1)) int foo( void ) { return 0; } ], [cold], [ int foo( void ) __attribute__(($1)); ], [const], [ int foo( void ) __attribute__(($1)); ], [constructor_priority], [ int foo( void ) __attribute__((__constructor__(65535/2))); ], [constructor], [ int foo( void ) __attribute__(($1)); ], [deprecated], [ int foo( void ) __attribute__(($1(""))); ], [destructor], [ int foo( void ) __attribute__(($1)); ], [dllexport], [ __attribute__(($1)) int foo( void ) { return 0; } ], [dllimport], [ int foo( void ) __attribute__(($1)); ], [error], [ int foo( void ) __attribute__(($1(""))); ], [externally_visible], [ int foo( void ) __attribute__(($1)); ], [flatten], [ int foo( void ) __attribute__(($1)); ], [format], [ int foo(const char *p, ...) __attribute__(($1(printf, 1, 2))); ], [format_arg], [ char *foo(const char *p) __attribute__(($1(1))); ], [gnu_inline], [ inline __attribute__(($1)) int foo( void ) { return 0; } ], [hot], [ int foo( void ) __attribute__(($1)); ], [ifunc], [ int my_foo( void ) { return 0; } static int (*resolve_foo(void))(void) { return my_foo; } int foo( void ) __attribute__(($1("resolve_foo"))); ], [leaf], [ __attribute__(($1)) int foo( void ) { return 0; } ], [malloc], [ void *foo( void ) __attribute__(($1)); ], [noclone], [ int foo( void ) __attribute__(($1)); ], [noinline], [ __attribute__(($1)) int foo( void ) { return 0; } ], [nonnull], [ int foo(char *p) __attribute__(($1(1))); ], [noreturn], [ void foo( void ) __attribute__(($1)); ], [nothrow], [ int foo( void ) __attribute__(($1)); ], [optimize], [ __attribute__(($1(3))) int foo( void ) { return 0; } ], [pure], [ int foo( void ) __attribute__(($1)); ], [unused], [ int foo( void ) __attribute__(($1)); ], [used], [ int foo( void ) __attribute__(($1)); ], [visibility], [ int foo_def( void ) __attribute__(($1("default"))); int foo_hid( void ) __attribute__(($1("hidden"))); ], [warning], [ int foo( void ) __attribute__(($1(""))); ], [warn_unused_result], [ int foo( void ) __attribute__(($1)); ], [weak], [ int foo( void ) __attribute__(($1)); ], [weakref], [ static int foo( void ) { return 0; } static int bar( void ) __attribute__(($1("foo"))); ], [ m4_warn([syntax], [Unsupported attribute $1, the test may fail]) int foo( void ) __attribute__(($1)); ] )], []) ], dnl GCC doesn't exit with an error if an unknown attribute is dnl provided but only outputs a warning, so accept the attribute dnl only if no warning were issued. [AS_IF([test -s conftest.err], [AS_VAR_SET([ac_var], [no])], [AS_VAR_SET([ac_var], [yes])])], [AS_VAR_SET([ac_var], [no])]) ]) AS_IF([test yes = AS_VAR_GET([ac_var])], [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1, [Define to 1 if the system has the `$1' function attribute])], []) AS_VAR_POPDEF([ac_var]) ]) lcms2-2.12rc1/config.guess0000755000175000017500000012367613775114656014454 0ustar martimarti#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configuration will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lcms2-2.12rc1/plugins/0000755000175000017500000000000013775114656013576 5ustar martimartilcms2-2.12rc1/plugins/Makefile.am0000644000175000017500000000002513775114656015627 0ustar martimartiSUBDIRS = fast_float lcms2-2.12rc1/plugins/README.1ST0000644000175000017500000000035313775114656015065 0ustar martimarti IMPORTANT: Before adding those plug-ins to your commercial project, please check licenses for each plugin. LittleCMS core is released under MIT, but plug-ins may be released under other license. fast_float, for example is GPL3 lcms2-2.12rc1/plugins/fast_float/0000755000175000017500000000000013775114656015720 5ustar martimartilcms2-2.12rc1/plugins/fast_float/Projects/0000755000175000017500000000000013775114656017511 5ustar martimartilcms2-2.12rc1/plugins/fast_float/Projects/VC2019/0000755000175000017500000000000013775114656020335 5ustar martimartilcms2-2.12rc1/plugins/fast_float/Projects/VC2019/lcms2_fast_float_plugin.vcxproj.filters0000644000175000017500000000506613775114656030230 0ustar martimarti {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hpp;hxx;hm;inl;inc;xsd {7d5b1769-2be4-46f2-9e35-6260eea79d7f} {012df308-35db-4909-b035-b1cd5fd1ee5b} Header Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files Source Files doc doc lcms2-2.12rc1/plugins/fast_float/Projects/VC2019/lcms2_fast_float_plugin_testbed.vcxproj.filters0000644000175000017500000000170113775114656031732 0ustar martimarti {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms Source Files lcms2-2.12rc1/plugins/fast_float/Projects/VC2019/lcms2_fast_float_plugin.vcxproj0000644000175000017500000002376313775114656026565 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {71dede59-3f1e-486b-a899-4283000f76b5} {AD9FF79B-CF6E-4971-A7CF-DAA47D636676} Win32Proj fast StaticLibrary true Unicode v142 StaticLibrary true Unicode v142 StaticLibrary false true Unicode v142 StaticLibrary false true Unicode v142 AllRules.ruleset $(Platform)\fast_float_plugin_$(Configuration)\ ..\..\..\..\Lib\MS\ AllRules.ruleset $(Platform)\fast_float_plugin_$(Configuration)\ ..\..\..\..\Lib\MS\ $(Platform)\fast_float_plugin_$(Configuration)\ ..\..\..\..\Lib\MS\ $(Platform)\fast_float_plugin_$(Configuration)\ ..\..\..\..\Lib\MS\ Level4 Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) ..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories) Fast Windows true Level4 Disabled WIN32;WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions) ..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories) Fast Windows true Level4 MaxSpeed true true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) ..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories) MultiThreaded false AnySuitable Speed true true Fast true Windows true true true true Level4 MaxSpeed true true WIN32;WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions) ..\..\include;..\..\..\..\include;%(AdditionalIncludeDirectories) MultiThreaded AnySuitable Speed true true true Fast Windows true true true lcms2-2.12rc1/plugins/fast_float/Projects/VC2019/lcms2_fast_float_plugin_testbed.vcxproj0000644000175000017500000002041313775114656030264 0ustar martimarti Debug Win32 Debug x64 Release Win32 Release x64 {7629D670-C419-402B-8A90-747952EE9FC0} Win32Proj fast_testbed 10.0 Application true Unicode v142 Application true Unicode v142 Application false true Unicode v142 Application false true Unicode v142 true $(Platform)\testbed_$(Configuration)\ $(ProjectDir)..\..\testbed\ true $(Platform)\testbed_$(Configuration)\ $(ProjectDir)..\..\testbed\ false $(Platform)\testbed_$(Configuration)\ $(ProjectDir)..\..\testbed\ false $(Platform)\testbed_$(Configuration)\ $(ProjectDir)..\..\testbed\ Level4 Disabled WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) ..\..\..\..\include;..\..\include;..\..\src Console true Level4 Disabled WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) ..\..\..\..\include;..\..\include;..\..\src Console true Level4 MaxSpeed true true WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) ..\..\..\..\include;..\..\include;..\..\src MultiThreaded Console true true true Level4 MaxSpeed true true WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) ..\..\..\..\include;..\..\include;..\..\src MultiThreaded Console true true true {71dede59-3f1e-486b-a899-4283000f76b5} {ad9ff79b-cf6e-4971-a7cf-daa47d636676} lcms2-2.12rc1/plugins/fast_float/include/0000755000175000017500000000000013775114656017343 5ustar martimartilcms2-2.12rc1/plugins/fast_float/include/Makefile.am0000644000175000017500000000015313775114656021376 0ustar martimarti# # Makefile for include directory include_HEADERS = lcms2_fast_float.h EXTRA_DIST = lcms2_fast_float.h lcms2-2.12rc1/plugins/fast_float/include/lcms2_fast_float.h0000644000175000017500000002200413775114656022734 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #ifndef _LCMS2_FAST_FLOAT_H #define _LCMS2_FAST_FLOAT_H #include "lcms2_plugin.h" #ifndef CMS_USE_CPP_API # ifdef __cplusplus extern "C" { # endif #endif #define LCMS2_FAST_FLOAT_VERSION 1400 // Configuration toggles // Uncomment this if you want to avoid SSE2 entirely. // Default is commented out. There are two kernels, one is vectorized and the other is not. // On inizialization, there is a SSE2 detection. If the SSE2 detection succeeds, then the vectorized code is selected. // If the CPU is old and does not support SSE2, then the non-vectorized code is used. // If you define the toggle, there is no detection and the non-vectorized kernel is always used. // #define CMS_DONT_USE_SSE2 1 // The one and only plug-in entry point. To install this plugin in your code // you need to place this in some initialization place: // // cmsPlugin(cmsFastFloatExtensions()); // CMSAPI void* CMSEXPORT cmsFastFloatExtensions(void); // New encodings that the plug-in implements #define BIT15_SH(a) ((a) << 26) #define T_BIT15(a) (((a)>>26)&1) #define DITHER_SH(a) ((a) << 27) #define T_DITHER(a) (((a)>>27)&1) #define TYPE_GRAY_15 (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|BIT15_SH(1)) #define TYPE_GRAY_15_REV (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1)|BIT15_SH(1)) #define TYPE_GRAY_15_SE (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_GRAYA_15 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|BIT15_SH(1)) #define TYPE_GRAYA_15_SE (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_GRAYA_15_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_RGB_15 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|BIT15_SH(1)) #define TYPE_RGB_15_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_RGB_15_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_BGR_15 (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1)) #define TYPE_BGR_15_PLANAR (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_BGR_15_SE (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_RGBA_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|BIT15_SH(1)) #define TYPE_RGBA_15_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_RGBA_15_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_ARGB_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)|BIT15_SH(1)) #define TYPE_ABGR_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1)) #define TYPE_ABGR_15_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_ABGR_15_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_BGRA_15 (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1)) #define TYPE_BGRA_15_SE (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1)) #define TYPE_CMY_15 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|BIT15_SH(1)) #define TYPE_YMC_15 (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1)) #define TYPE_CMY_15_PLANAR (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_CMY_15_SE (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_CMYK_15 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|BIT15_SH(1)) #define TYPE_CMYK_15_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|BIT15_SH(1)) #define TYPE_CMYK_15_PLANAR (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1)|BIT15_SH(1)) #define TYPE_CMYK_15_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_KYMC_15 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|BIT15_SH(1)) #define TYPE_KYMC_15_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1)|BIT15_SH(1)) #define TYPE_KCMY_15 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)|BIT15_SH(1)) #define TYPE_KCMY_15_REV (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1)) #define TYPE_KCMY_15_SE (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1)|BIT15_SH(1)) #define TYPE_GRAY_8_DITHER (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|DITHER_SH(1)) #define TYPE_RGB_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DITHER_SH(1)) #define TYPE_RGBA_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|DITHER_SH(1)) #define TYPE_BGR_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|DITHER_SH(1)) #define TYPE_ABGR_8_DITHER (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|EXTRA_SH(1)|DITHER_SH(1)) #define TYPE_CMYK_8_DITHER (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DITHER_SH(1)) #define TYPE_KYMC_8_DITHER (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1)|DITHER_SH(1)) #define TYPE_AGRAY_8 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(1)) #define TYPE_AGRAY_16 (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(2)) #define TYPE_AGRAY_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(4)) #define TYPE_GRAYA_FLT (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(4)) #define TYPE_AGRAY_DBL (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|DOSWAP_SH(1)|BYTES_SH(0)) #define TYPE_ACMYK_8 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1)) #define TYPE_KYMCA_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_AKYMC_8 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(1)|DOSWAP_SH(1)) #define TYPE_CMYKA_16 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(2)) #define TYPE_ACMYK_16 (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1)) #define TYPE_KYMCA_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1)) #define TYPE_AKYMC_16 (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|EXTRA_SH(1)|BYTES_SH(2)|DOSWAP_SH(1)) #define TYPE_AGRAY_8_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1)|SWAPFIRST_SH(1)) #define TYPE_AGRAY_16_PLANAR (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1)|SWAPFIRST_SH(1)) #define TYPE_GRAYA_FLT_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(4)|PLANAR_SH(1)) #define TYPE_AGRAY_FLT_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(4)|PLANAR_SH(1)|SWAPFIRST_SH(1)) #define TYPE_GRAYA_DBL_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(0)|PLANAR_SH(1)) #define TYPE_AGRAY_DBL_PLANAR (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(0)|PLANAR_SH(1)|SWAPFIRST_SH(1)) #define TYPE_ARGB_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)|PLANAR_SH(1)) #define TYPE_BGRA_16_PLANAR (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1)) #ifndef CMS_USE_CPP_API # ifdef __cplusplus } # endif #endif #endif lcms2-2.12rc1/plugins/fast_float/include/Makefile.in0000644000175000017500000004204413775114656021414 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for include directory VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/fast_float/include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(includedir)" HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ include_HEADERS = lcms2_fast_float.h EXTRA_DIST = lcms2_fast_float.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign plugins/fast_float/include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign plugins/fast_float/include/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-includeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/plugins/fast_float/doc/0000755000175000017500000000000013775114656016465 5ustar martimartilcms2-2.12rc1/plugins/fast_float/doc/LittleCMS floating point extensions 1.4.pdf0000644000175000017500000145027313775114656026335 0ustar martimarti%PDF-1.5 % 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 5 0 R/Group<>/Tabs/S>> endobj 4 0 obj <>/F 4/A<>>> endobj 5 0 obj <> stream xUn1G?Ed5Bh!H=@s8D% &'񗌽IfUӱ~~3c/fx ITFPYVY6)j7g<O~{1rQ?#{C,7b{[,6,d}ƯeN5VfdNls_pAuZ))D0܈#`_1Z%=mV)FVo׫"H8~R )M]dK@[_]k5u8&-3> :aŶ@QVׅuzn+)n,U1"ʿ]{&w 4W t``BSF]p(dUodnO ^\/;r:}r+&.O甋n%zZ^8R(|OQ9NNܩh²kc E=;)tT[Yp="W59@.ùN5dF:̓y QIn ӂ+OQm9,̗{ٲq:J Vy\(lkž3B>=H8چ )%r+ȝhqM1v'm2TFJ^Y+_c )y˰ pJg> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 14 0 obj <> stream x tL}<2+Ąd*!%ԫ\Jhm?)T<$q^uRrKzBգ+KfF19sΙ3s&>{}&6T*V5 ̟H=(hh6L'O~Ǜ7oZ,رcكh4R-Zdddoo"I(JNN޶m[ee%`ٳ<3 nݺ۷j j7oLJJz*@޽ۑ`v%'N[dIEETmժURO >}"S`'S4YgS3gJ=Egϝ;`wI=K7rԩS}dlzP|j;wzO>lb 4HI[ի׭[\M +55UEرSwDٳZ=kO b4˗Mϟ2eܹsҥK8 jaiƍӨQT*ϵk׸@܋Bq0JKKӵZmUK,ÇK%[dM_|ETTTu:u⵸@5 &h0aq}zzz ˦}:)..M|w|VPP|7^ZZ+Dfs߾}mFQצ;NbJݻw͑7xfoL6 믿x 7Gves9M3fMwСnH/r6{2el2<n1VԩSZ$ĉ])IYf Φ 6`"f2*++bѣGNhM|$c^Q]Y``b|gjZ{JJJⵌ߿fL6eee ΦziΝd̘15?.׭['8;'=%&&zZt/Tm۶ Φ'NF iӄ ={VV ӧq<,**l6s>$ Φ3g`K=iڵbL=zTp6J:upSF6[n`ddsg&`1sLbZNLJJ***M?SPPS7RxmNm6S{/_MN zRRR S:%&&>Bp6=z7|'ܓ?OKKX,СCx؅ݻw{?~\F{{{K=ipw邳O?TJ=cpw4M&o)ܹ#w۰aCXXҥKq-p$˯]lZӧOiZ@ѽ{wfSeeȑ#%3ikWIIO?-d.\pR6ݸqsROlbR/&&F@kr~ᇐ'ՁDϦ}J=34iR^^.n6mٲEVK=3+b0YLx ZpXTYY9vX' Eɦ;w0Գۻl|rBBԳGgCCC 4F%v‰ ۟?ޑ`˕JShew?l 1kB^ 9dkmܓ+*=1ؔKrxjMUW Z|(.]txĤS+kG 7aT[ xbZ"SSkҺ&?`f;H; QӲ&_{ Gׯz6Qo1;)ݷS/];7$Nj^OLpyV%bpl6|4+7^uV&ꫯ21'l! |fk6֓NIp x(`yT]_^o ꍶm۞:ulb9rD@+EdSrx*'ek,!ox]lj7t(j%%%gĉR &W>Z f\) EDƌxrv<;NyTWK)ooQӻwo>9T`.q%zۍ?yWpCOIqd'yqf kFyNBWsɊ)^9Tpe3VOƒ+,,7jɓ'SSSZ;yh|WDe O-5D J 2%T+[jj:`Zq9<ޖ2̴;ZaĴL@/͇xΎ\;rg~0U+#Œ*2,^^k҈Fŋf'eSMEEEoVppԓzMr\n*i1kխ?H"nd^MXtn!6qY'8nbmA xzkLь_U_ehjSsq0dZݛRdSۧԭ:8~=Ƈ)~>pđxN D^!xՐMl"F< pLQQC6YYYݓ0]~]RQ/ޝ_տќ>9:>ۉ~iyscr=&@ETE\%W4K64*aci,T*Յ ?̛7O܋LYi^ዝq"SŮ-b^җCRxH.,&ك2!2ƛ$xNO'a4{lC?CBB>4Ma7_x8* "|yo7OH382NDyɘ@;OC;)X۹'HѸI/Vic]gϦSv8$Aav s䬊/6 c/%KfY] 2DMVUlbС!ix*{6E/H=LS K VqrŁӀDxl6`D_|7PN>=n8i86ji30K6 vcyP@-bS$5|/BRN>AOlϞ6YF@d2/c*M6t֭[;xfnAI{g_NȆK<F`^ו!r^FO}(4J6ZnŊ\rÇV-//w<Μ9םi+cd%(9J ?z^Vba/N%d49*^(ϯ=G6m(L5JY K<`@.Gr(E/>f?6 %RTjT2֕ eeeӦMS*kcٳ%S%I=F;8ck5E8eqWBS(Ċ'yT3NѪ)6L>|V|Tc#3fp0yOܟG@8U!xjF='墻.~f5^xRLmn ӦRuh%S[K.5;wnРA,&'';M˱0ԦOOkw^OCn՞g/OxbWpԃw^=5{nO@<F]#$|*Rٻ΋'&UfJ- KZ,dZwڅ{zE,^',}rR֒diJ]sjݑDP d%rKDC<1X=VGt{=';Ӥ"J<}f{L2x*dp_PᢔwerMwVh!;Otαt"bStO4KP65ɩ۶xcB1-f/lad)Jn0tSi큸DPL*ۧ$΢al/%RyOktTw>9TUkHND|^9z&[+/^o6>a.w3MdLv Ss5 `tN'q&/vU^^vur|b{Z-z Vk(S1ڻ;!^I.l*^b 9ۨZ*ZՃR3|~+m1u@=E{j}{}g\n`Yu)e"m~ EH􂡪 |ߐ2>I<h(F۳-&Db[1x|>[s\e2I[@l4/dұA2-Du! Qy'ӽνkk߽\ÕU/zfЀQ%Wɼ-UA-LXLC)Tp|hV&}Z :>lNRZA endstream endobj 15 0 obj <> stream xw`s% #M@@| * rRMAi&E4W(-t@zKݙunoCW2;377;EJWoЬ}a㦅4&FP0r u;uÌL .AX+Ĵ=rʗwt/=Nm_bQ{ᑈi2KD.W쾒-,&S^;bS G'_WDW?Z\rZ膥dpF&&`}z iy$_WDj|td31:adQ,uLLwJLN&^WTV&^שE&3se5 M2Ӿhr$u3 g]17|ܻvh.]!<몙x&TI+},9nHW<V늘F$eѽ)[E7._H)-+iXmvX 8wkWvm#!Mh\E6x 9aaY+,D&lEB2g O,?!,Wh;0dsa* ߷N}hI)#?eTY( y_h>úhEK8EȘc}ShrВ3'ًL6[L9wm50+7q-06Shr54U-U[%dcԂZ>Y0&PY+'X4e啣LhjP\2I(_,e2 e-Ch]sڳv6DmNxQXxbXy(#\|qj>Hq8H MpڌK4djwDқ)fVw4OBrWG}UV3 !oM 2Td~S˦=b)Br&5WE^KWzL4]ǐ\I'!Ќ|>ULag-)e'N /W{a| X-v_0:D"=i U^hl+Dn2h"PWՔs_CCkաYh4bܨ!OyO4 iB3 n _t.S\+rJl*wb}jAf=Mw&xWhg(֒'#$u E@wj -4p@R+v?%T #Hw)K PV5FW\m.2JOŊ^Tc)C .@۹dzwcI#eJMZhraMiZŘ't땫d|ðUK_;F ooa0 +dՖƗH'?Nh?Uƪ p'wjY+'b# ][rdG4;Q{,.+;,4 MD-~8iOkjeYh46)*Ԍ·gN([t Yhl j+jL*^WZ@F++Fk? ]eqŽ*j,4~\NeGz C2)mMC RRNUWC2ݺ0 TE PiJ{:\x8 -4 4찢NKSwFy8Ms..4Dp7+4i>ӦH*Vۤ>VFh“NpQ"?'*a}u$Jf KT]OҒEBӈW f$M| 8K$CSk#"˦ra#4Exqo;E! 虴D!2?Ql`zXR;5q-.\jJ|f\vʁ]* n kt)mk|׸>mT9NSeBUKw{:Y%N@ysG4z#+B5ƛC$vN-  `v6g!/W4 ŧ^7s3{*SH/2 /Pm—fO&s7be}7$Ox؟f+j/h6O=з@EP{FBc]CJx 6] %)6fM|7DˋbJX 3g|18++Bn4>zFM{ωzg;ZMK@-̤xs@F/">r̦ _)㑻' "`$f3j#NlU.3ߤ)|3XmaR/ۺ,P[1S$bdx(fj`m2l`6s\L,1?[_w@U`DbyР؛CE%!z/F`xl5+-|ÅP6Ԃ[ߍ_VuS(.kڹRvp'*kFBi) <Agbm}.1"3 [էy͡orUvh#$(e'L/Z>'>eЌbaR`;c1f0;u& `{c+ȶf}@#3X@?b1^ O3{F%s 1l]z_%Fbo>}-cEItq9bR3τF v|e$ @f$l wy&Mpf8^!MDiW=¶Ǟk2lB&Z;gLd^mXIlg>"^mohQ:j),m8fXw^moGdGt֧2)|4},M` Vvi,P7[ j|C)l* #4h vYL<`S[TiK诣1ܬ4M8pmd8oK߫mB(sj| >.4dh,LR&R`Zn]tZ;e0DQ&GXxm ]^5/5UG`vDfBWYP34Njy2P}x^u+gCc}W[6mJ֧Ց@A†Zʼ /R ۺNnkLp`}2sj"h#_c#A]~C3znH AI h1!6֨ÒuŸc=eƺm pÀr>0QM#*"7~NO̱&3615 "U)C/G&N][fD5,&)AM4I\$tDOQ`j?3l,KX.#e&PoQFǑ3Zdk2NXè_Z`\*LNuO-<2袛Ɔ:IO ].FX/6b ʞ_A…xoJq#~.ͫrȭn-0!h|92/&yb [Hq5X,@b?u P?c 5de4Ce W{+(<`WC2 .sx ſ"@hV|a9"Q#bfwwA[: $;vB!d$1Ѐ 9(`J1[ێ_AOކ\nVQjO\2QjnbvŲH/43@.׈=>Dp:ܖF3-waAV˜cF&+5<;#F>;$BS jB'9?pn|ae"ѧ  ;WAS6NR: Uğ񃆚 No9e5RKGVKGcv˞뇠Ӡ /+O |/?jh -.,Hc:WWPA]?Xs(O <)[ӄ!J(.{Vb?i 4@P]TiXh#le :UG`55DǠ5:o$ {|Zs j!SWp-BEC|[y/7׵񗒑3$6_êH 4%[gofCAePeܿm{e.0)e 7!!(<=is(2 +긏~淗sLiFR 7 A kz\im_&PhJA9ősFu @j@];STe̯,RbuAӌ QnJ& x% 4SN0];5_},?.5kRR.)p”74qlN!-e@Gal üU;Z3# P{x/LM0 q$ 5n {i&*-) -J MI0dYJ8:78 @<_P,؝hiidqHi;?T9B5āe?Id-rѦ8PsuQW1弊K>*ޢDLX'׳& pi[8mUq2m v)e3S >[8u_x("$fF*~ޏ 4PMN@y DrARNGg7ߖ 72CgO5oz3w -YTp))9=A{' km+hQJ:ָG5$JslB7'ۺqWN>Aͺ@yKD+Kwq8J]'Α AhJYM;6V 0qa-%-e"!cq+ަiJPLrOҐfTOi.5D~+s(;@/pnG+J6yZUQZ)PFZmMJ%XX@{5 :u9vpkyĉ˔K0伤} w_ac5jf۱@Th(1,DQY4b'֛ji9~3WjE|}Sg`Jv0c'd8]gXH^^S*'9.$:eAAkLg87NdE68'VQ}dBPHfxO]LYKSHچľlJny>yLPN rɓ=.>F8ՙәh|џs$3rmX +IgqB lD:W#\; _d6NjLC-wDߡxpvz":ޫNl=E4gCDh2v9@`9ⅳWo)drb>l;i`6l;q*˽JZR5^Dj㏜|(4DՇ)yI !4YyXxõlKA?H+  M"ۍ~ϙݿ}~OT/B:i1YۉB52  '-E / Q(ZN{sGnL`S.Xd>>ИdljmCШb o̬U[_/+nLѨ<2lKd-|/AK?VzLOO^JФVQf|Yx W&U7 DNv Mг;>a5b~IWLpq?)体ߩKW9j dSW1evѳJwAfzPgD3ԩ,İ(DZOX` *^vto*{Kf6ۗ( Kw+[h(Qb;w@ =]iX.Kkt=cǤEAK󚘳n&Bbc&y_%BJ`ua'*E_slbPPk2sp7j '6FLqsʛA%:{IC?[>Ԝ#iI cvmSxK5&#Ro=O~2jP/ԩe'&2pMLLLLLLLLLLLL<b{ endstream endobj 16 0 obj <> endobj 17 0 obj [ 18 0 R] endobj 18 0 obj <> endobj 19 0 obj <> endobj 20 0 obj <> endobj 21 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 25 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 33 0 R 36 0 R 38 0 R 39 0 R 41 0 R] /MediaBox[ 0 0 595.32 841.92] /Contents 22 0 R/Group<>/Tabs/S>> endobj 22 0 obj <> stream xKo6t0W|bv:H]?~Pv2MQ ~(8? 9|:ITVUW-ij24Uw5y:N?L^5 SV\2j: A&FlP߬ fSV0/B}Depb *=t%4Va_8D Y?]6]3]#=-wO opl}6u[Ʉod RiǸEV"NΏnݨzjSnKh@G(\J@¯]qPh>73Uw7L]H dY$.H!hs%YZ!x5_l'!*$gGG*I%TEa'0Հtv0lVBe3wr9]x˸;1rW !6ȶ>J&LjZ78r[F 44/" [\,"%󝋞5̺mwg[ɰGiGm h`ʼn# }R𶲌Ls,HL;@mkv8X!_qπ A{D@jX,-jC!RP H)nZ``&C~M)4c^eh'ָ)0~:^,4-6>_>zP"˧+!efK y!6!6SektُA ,.w#%hϗJ&i-BIG0&X3.#kE/KRΣPRI\C ?؈߀Ǯᇥ>a-X>4>7[ц65 "59&GDEG06 "R%t7:CYE~uޒ*0 a6zhf[w [4M˖+ܾwmZWA%2uXnZwoHyN#3RVx[R@YV1NlO ""ib["wKH"R}7}&57<ߩt-%Nt?~n+h*ܬ&`GhVx2rm?]BeXol˔P^hZ&l)砛 5<ȨTa;BJR.d\232 HO^d[OUXܼrRⓧR:r OU ^ŁCᎶ:}ȳU0[\?i$i*zUi׳&a?Fl> endstream endobj 23 0 obj <> endobj 24 0 obj <> endobj 25 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 771 0] >> endobj 26 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 46 0 R 52 0 R 53 0 R 54 0 R] /MediaBox[ 0 0 595.32 841.92] /Contents 43 0 R/Group<>/Tabs/S>> endobj 27 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 618 0] >> endobj 28 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 456 0] >> endobj 29 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 372 0] >> endobj 30 0 obj <>/F 4/Dest[ 26 0 R/XYZ 82 239 0] >> endobj 31 0 obj <>/F 4/Dest[ 32 0 R/XYZ 82 771 0] >> endobj 32 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 60 0 R/Group<>/Tabs/S>> endobj 33 0 obj <>/F 4/Dest[ 35 0 R/XYZ 82 771 0] >> endobj 34 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 61 0 R/Group<>/Tabs/S>> endobj 35 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 62 0 R/Group<>/Tabs/S>> endobj 36 0 obj <>/F 4/Dest[ 37 0 R/XYZ 82 771 0] >> endobj 37 0 obj <>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 63 0 R/Group<>/Tabs/S>> endobj 38 0 obj <>/F 4/Dest[ 37 0 R/XYZ 82 579 0] >> endobj 39 0 obj <>/F 4/Dest[ 40 0 R/XYZ 82 771 0] >> endobj 40 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 64 0 R/Group<>/Tabs/S>> endobj 41 0 obj <>/F 4/Dest[ 42 0 R/XYZ 82 771 0] >> endobj 42 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/MediaBox[ 0 0 595.32 841.92] /Contents 69 0 R/Group<>/Tabs/S>> endobj 43 0 obj <> stream xko=T{n\w/E,mْkIM_ߙ!"dlrgÙȜ_cU-˛VVU L*]\>-K|{wzr5(>=yt}z |T᷑x4`h5i ++S0QIU<'7?*Xт`$b;`痛U(f* [ `{qs ː/Rn+H*;"w`j/R1B4/`(j0-` ?լd;"8vjU랩wNdڔtD*80I7dHI?C kraiV+Bq(^luey<{ʽ[%[g3uhsԶ6@ \4)PP2;,`.3)MXYfbp[- =x\Wf~CoQK'Gdp-ڜ~io3ZT$fA֛P$&,K.Qw`ee-k0bXW5[\ i 1^M%InFYVJVYyF"|Un?UKS쯳5Z2. nf& u <+t´;{{5.2|`mO\/a0E-[$!{$w6^ $-zFԁvTƴ7dޘ#H98Tn[ʊtM!sSE%kjIyb hH1Q)QYkI99Gbt&9tg t],iUΕi7p텟3.2'\B3L^(UĈC_!B=♭t&xu7aLMQ}On̯!$6LybטM}8NwmB#I5`3u] J6V.MD#E&^=1h؏3=s@ޤFh1> ŢB_aZ&ۦbjJJTI&hW't#v2Yiu=:.g]TQj?9s A{ 3I;{\l+ IckY)ѕž_òKf0HgTK;$6R[<"v.TObX@@g;Ɂ&W-9G5XWFsy#!ATE;Hh]7k9\'ÊQg%N`mD 4pf pK$ R\)&sx- 5V84p<7 f iwT ρ\Fzj&n/[#$q;}^& xQ[Sa5SBЍu"{IQQi'O~vl*L;% 96p.8tGnVjѦYmӥ͔7!_ߔe.~8''k-жa# @(pLpD1YRt -DYUڛoFrΉU:77cwH]+:I_CȻE8ec?LJ""c{N&"*K6g )0: <5²Ĥ(Alrށ='B6G-]ɘIa:5a$ѝٻ1m5\J7 5*?u% 9*A@^Rt(s:_K7B91W3@I 'qI'XԕNNGᖒ$FV|Jn]y[ӥ9eiI'b.{ȩ$˻s:VEm7;8g; E`vva" RI\v[]LRջ`ŊYJ*q衻s4h )#!Y)az441ܴē׻1帘bgXʹg7Kh2ydnA@Sc"1x78F>*';1K6Kv3-(,M۷ϫ cS0Up,BۤH-Xlw1b{&2@OC cN7837> endobj 45 0 obj <> endobj 46 0 obj <>/F 4/A<>>> endobj 47 0 obj <> endobj 48 0 obj [ 49 0 R] endobj 49 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 52 0 obj <>/F 4/A<>>> endobj 53 0 obj <>/F 4/A<>>> endobj 54 0 obj <>/F 4/A<>>> endobj 55 0 obj <> endobj 56 0 obj [ 57 0 R] endobj 57 0 obj <> endobj 58 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <> stream x]ێ}i^h98 EH`؁V@Uv%X$=*VڲjXSuS$ɳǏ~)մvGj׺n>w~~ݽ=~~wٟ?}4}:NhaLcG_ ،`ocͿ]V}fɳ|wcI{ +Do3m܅wKSVwYVғY}t6[7 paV5XךF` ~⻕sgnՍJNc|YW~sEQuj A}bܿ:(W ;CA ׇ\]A _9(arm.o]/_/wO{@&ht*ih0} Lp=ton m:ݨqt3謻a4X0mnxɈpL^Îg]o{Z~tn\?_+W]i`mæz-[x+7v*F-6c~zPnZ(6CTHrw)mr{;?.?AtNQͥkkݪ61^P{ rꀱ[GAo^,ͻfh/=f];5Әypsø$^ Ve(i$Ӯ'xCWun  |Oz'ݏnR\S8OUicL-1ɪˆ(f˝lܒPTF>99n[KJf'3vi)*VdfOf\oR'%| H\\r 9Nﯡo5,t D|ARRm9&rI( <$4`0LB ɀemG2Izu::wrWgٟJC 7XsDFէAC)6]tZM.QAǂ^F,2ĦXTUD5 zǴ0tri&qlXM!6vb9<$%4arA |v0R`*_=#q*Mu`g(Kڡ)IRh菛A_O +sJ65v`L g)xݞN^'dÝ`Xα!ԊKhV Ww"s;J`I*nӹmi$Rz:JO꩜fZ3r6jکz1JBUMDcP4HhVP~ #ĐL%YB]$ PrB *,!rFn-Pr|v#vzˀntCp #Ʊ&{rw]`]H`v 8=vw 24pPWe_gy< ɣ4bn,o8/㧢Hz=uj>fM*|XљT%a)냑'A Xybt6er{֝a-Yb(:CP -ql)ù=]GR!,达yP[<IK;G.uo4dMwi6&`;* M{pLWiMf[ehqV%]k yuRauI54Z~( %mmh)P# bd*h$#`wBAmb`oxg1(38PTυ@ b ƾvO~9\7_ˈ r^ߨp^Iۑ6TH=JKX# i1N2`I.iC4g;l18krPrx377| KƖw8RԍVk_+|R^]Fc?*<1I=f/ es~2γ6i'p[F# ?9W;W!x‰_W"QdN% y4OFJ(Fz&؈8q`H"rzv9r`/~IJ,y߼=L1'4Ve\IvŠh[uAO6˭a-{̠B"A=E(s9)=u-'|[J,8Avf=.&C6km:Rb#Z=Ubgvdz! `K/OF1WZz1N2`zDy LnnɻXz顃wo<ojbja;@"e i-)&W0 532|AI -u=I |[)4'c۶JSKSX!cT雾m.H lk6^C=.'!l7. Y,Cqb`|C TNh1R$#q#"@icYu<,I?ռIFB8ɀ-vh04~Q'؍Fbb'w񂮀-@v02&뗀"R/h$/+B*H"eU#c[7GK"_ī;w%$BKS7R`zxC&rQ'Avi;rvc#Gxjo\/ζJ3—$G*J/n~^.y#P [؈>5tDhRa"OSoRae"/F1N2` I6{n<4Xp>EHeYzE 6 <XtV6|[Qwqť|p~ wQ!a`Xt* u光"ZCϷSNp*9usׯw[zf7T|'OfÄ&'l ~ Ҍ3&&6Tx<[Gv90Tr`O6wڮ'?l+$Zߚ@8р1AM6-[e1=mJo# b9SqqMUB+B#kbh$_[cISlZ+bJj"M*"8͛TDfÉLZc!J*#IR|f)6WZNkP9MR(R C$(xe)Fa)FreyeeQVg,g+r IS-?~&d$v&dz&cXΝW]{ouYT™3hJ`+}1¨)3'iJqܠ) q0i\F5TK CĒR JJA]!5$e0'XBkYRՆ sVHwZV"ӐeJT0W8? 5VB0'i$6TC&SO>Op)w%0vo**lL@3Pq"1D(@ +(ݐ{n 8b±5G Ih'4ts_Pg<$+T4L+lv4i%a&% bd境iVq'rVtB=3m)oIO՟=*,k>]|{??nw䐵"2Ş.mR؎Ԥ~stE&d16N9h΢QapWj9Ң8#@LRZYۃf0p0;7Iu|3LBԋ|ћU0w>w3?z _@=4& &fն7iZx#Z\LT)4+B lu}Iee$ 䇛fChs}, /K`+dUȗ.c6!VdVO endstream endobj 61 0 obj <> stream xMo0 t )QǥkarZwڀFv#DZ6XWxH9tuuuK Uc]APL>28+~宮6uu#Ճl-'Q3Y\DQ ^{]=^I" ILج|~UP6>yFΩ "1e}\d:dj꾏pThRgrQ:0s!1P`QFC֠2u]P{ukLɐ Ƀuam۵<76kKl[nv5˓ĜYOto&5mX ~u=;/'|@sY*QC.# s05r/Obz->[`*=qY*!,cJ&^%Cz}0K s3W_Fr& 2r2}ljA~‹%c%=%؝by{l,XNP0k#d A \V)eڅo.IHrlaD1]cFvorDL|:?K 3 endstream endobj 62 0 obj <> stream x\ko AE͊OIg tbg&hXyx&NLEUtQc{HK_^]^GH)Z\}M ɦBG`k//3tyۦ]^¶^;#;@[ CAtC5R cŧW Gc<57e(eN`/&Vv¹og/ ]+ +oCNe>MQ~̒<3"~~No,4>l4lwne+vonRnOD!z3w'㴖mPnJpD iBNvk?6۝ڼߺWö040"qOn-=|!9뼛ʶBἇo84(G/= ý'w /Vvyoe sLoAaUvgZjhpBJ; Sձ8EF!_͗0p^N=|,׷PxAx_1Mjo=oaP'gbiEɹ?\ GsѧF^CD 8paaM?R>(&6Ho| aH#ΣoÌA?tɫ{pOg<0rTۼ>G(t pyJks;o^Z,j1v&78dMp]<Gx:Dh!TV:|E6 }1zBuCx!^-\?݆/`jrEHU46(7|>*KI+oJ6I1>3hFv9tDM߇j! of >FQZڡ{NRu%B0MT>Jk8E0YjV,G$Rv)ñ:Ӭ|3e]y꣬Iyբ `Y ZKVh O74LEpv1\4sX8KYJsUhT"en5fSW5QV=hEUž'׋ziӪѣK \LX̯D)eyvRdvdE%%l G׿0b5V516O %V9OnY簝v1GI_0Wh"NUG)䘘Gi+56fDf0"10lz]:ZiNhePJ_ٌ&F朹%( }t>)s4j[Os~y[.~֝b`Lwm+O rPR'8ff鏵0IdW˂7<ÊHXٖ$pүؤQv3ҋx\lsP ״"] z @#5u3tpDb 8\<%sUd%Y%'Xr2InJZ㌒; BGʋN.tZpJ4?g?Gp/GJkBSs)s#%soXZZ#_ZUW Xy+K+XZ3ҵҺ"v(دf"Ж\C\ !%ךtNҚEc9],zK+XZ3K+;Y, J9 ˥8˅KkjJ+nek񸈬lXgll9Wr˧7Es]5.e- h ץ8Şn^g^u#P^GxSxYtyk 0]TZ-ʮ")eWEIr6ɸbW/5ٕ|&ِe5e\lfH3D׋Ҫ")iU'U%mUVgS\qeUЊpEƼf8VȌ+$;i, IKsAZ]T.!.tlu:ݧÀ\V4Eci-|͡Ԙ> Ge 9vҨ%,[I;]T.!.tpNtT lDUY5k3o庌M|\%^VL[HŭRҭBG $c9wf@Ʋ<˯^I6Ku\eTW-yl!OIqʦT\H>v>aϝyNjeG|Qty]/_Xq,G5ic\H[iM/šΜOwzP ߍ AzUcS~S]w<$I"^MqYHv:YL>#k˲/t6AVVpT3z%VtEuSBOK @.Y!Pg[r)ϓޯٍ؝ ewXWvWvxl !KqH !l.hZX* TMFԊ"^ctG8 d2&L`}GT.!.\К4ù{ʥ5>~ ByVv^Rޒ`ۊHRBGʥ5b?Z#ouy內wnjщ^'c{uUlߜ/@f;d3' =!/HSp<>gY#xjp>ݮf ðyY7C2@*2š*egѰvʰT8Ə6QlRDypI@q'dO&qmE&L٩Ac JvBnC.lW+'=Ǯ8Thķ+Ts|y0.r,ym)oIx0Ӧ"/!:RN5±d!b53Ȏav\e\y;QD%~,BZŎVUc{]9ޚ{?> vަhS.xG[H\RLHRBO%> ΅ EgQt7|Wӄ4`ۊ"]HȦvJ6.C}~VxOCdw«TZ>ٱNdוb=T^SIxR^C /$9于eD{btJQ>Cg?,V('+eJ<ƣXڢW endstream endobj 63 0 obj <> stream x[monÙrȢ`;z-3\dsDUrM}gf_)jIۇD<쒾9=ywUen>,end/'epzrgg7>=gQpYRZlҒePjQBlמ|\AE'A2.)IUb$vqLJeuYME3udo_qXXB}6Tof@w2;dX)rvp] (Wlq&OOW VϏy!lM.sPn|`e#6ZkeɋJv %)\ʺ`()*V@W):W 3pO_X=G&63 ^8G:EjTX]EP,NlvQMlRB |H7:h! G&{4 -]TyZ?k t4mA~ДZ`YRTu, h)ed7Kt2(UZ G"'“U.}[7cAo4nX]3#q.T_tѶf>rQW+Rw>guE.6qLnw`6#x zbSВ0ak \(<]ӏ.8x. 5hܵ N Xc%K"Sv ť3 H + A֥jYe?K{"l7!aH @ݘ|u! J˔VD~wTX#_wbS^v/EfB S7m0&&m:ksF@ #:"`.MrnVhhydk[prAnr / h~-Ӛr2\L݅}C}^cv}O\]:\ɴ EgYݥ. lh6מ 'GZ\}i(Mvy_ZdapB ]n͝>zZ$[HPh"+L\* >SIxBCˮp5Q֫Gƻ.wxq-ҳ޵G۬{&S=%b皼:ฯۍ]an'NYb/ [٦<<9÷qLߣ] E.mO QhVxY=9F?Ffg0o)d66<%લ:<i7zCܶ}ImrqdPݺ,Ńh %f>Rʪ :aQۡ;r b* JlU< l%+ٰa8π]M{( +BeW]1<q~$P)fZU[|"䣞{:M`^jGA ܍:_6Twfl`wsk>:LB(o\}:ɞ0ݯvPYB{[FTv9mgA;0 .Z?n|\DVw谵Y2C1xYE.ĉ_h7h# xϫ7 >?Ei=}lsvcm-̎!C%+*[O8OnWMc 2W6$Dֻ&.ECQ2 }@u9d4^&#v޴w$+jCwŹ: tϲ&}$cROu8٢qU ^Ӝuzpbp d ԩ~o\ W5MdU#s ?M XJm*"+:\TLWwoۙv=/ix8w܇cMd#-v="7]|.ӭ{8<|>XʫJ-W >utRd@ uP1"pp-c־LY SҌH1M!8dje'7I= ˖AYOl‚qG0Q Ѣ^DZdeÖGIs0KQH0_ڍ9 =yGai\STEɆ%APll٦  GD87h+ gNOEhs6V mzޒhot2?Y=|=<6k~<X G'6^S#np*cw؁ >wy%Jp<[!9|l!HξbFYul^sxA> stream x[KsFJaD0x÷(o^T + A&nowTvm62E==蹸:?e8]ݞq?Ϊˌ 9\uT֬ʢ4rknP$+HS!IMF4?=cCUXTI6"2伌Uq Q .,_>I y3 YGxIEndiYG<!w]Ww.\$!Lwa-{.` `k>q5D a#K=U,įn%_4 mno#FnR|C Yij-< .2pH$rnFOSf»J7?X5$&;]JpIhkȨ!p#i6=~N+v %D:I,&!lWl~EK-kHFգ6SO MZF.lYU4~Gی2:PE`aǛI]wZ͆U 5*&L9T,ȲTO E}$:3a |^eĠUG݁EEVt:s. G@A@aJY6!7?22T5vy2vn DHD˶Ctc yLl_o@#lDVؚ}#KR-?!*F pg\B 6ZIe=^.+XˮXohr7a 90N38akC2>6+iLvW2kHӪY{c)VBnڶ1Ć1V$Q:ƊT)u(yL j[wS}u '' XaQj"wfӼ ,Ĝ?,r5T‚E'L8ye& U!F^Z*(mGTj$Ja5J>Im b2"3#/Ҹc܇(QJeq *WK%󦲼\bqRw^H^í~'j' F>w" 5ꢌ\P6 E% ęT_]7!O/~xo=2W4pl!U`zQS;,fG@$|}LDwdYէC7V'up/`BTC\Ey*> WZM{9?r/c|<4|ljC)6< 7̊0-l^<-G'Ǟ cTcSAhEO>ܝ+SO} x"!S#Y|f+ZG iU6~O[NjNX{E;*Ǥu\"\q~l7,%wL~~ΐLjtƹ Z5XXDQ3xb&eyO~~ϐA~zQ+2 %pGcSNùcGJ*oPu)3 `k.Cv^ xs 9 _1$ۚ,$}"ͨ'!}PgIr?e-?}?gH&\'vYJm?>fq,_75a9K|p?e-?}?gH&O<ց kO7$GG  h 5}×V)n5o(}o C ޛZe1k$OO>Tׯ !B@l^ff#"c9) NVu=2»hBMoOP5-"P/=nxE f(&l-hmoUf-k)ز{/[jyoZư3uxqhfy7h!YK1)$D0t_P4߈QO5-xnLE^KO#hÌI<"ZضYa2{*VBIy6#,[ܫnuT'_[*#bLwt`ظE5n,L\QUKe~GͮZ Sz>A ^!F~leqdfǀAvTc .#vfz3mۋ?ZTQ]mP#FoOBU:]m28 >a϶g]w>iWMƘrľgVK׼ 2T׼4NY[ֺ̌ʧd}#_7kٿQ --yZ,,4Qk::6 7}n䍛Uy[Mn\γQ:ͩnfq/JZ2iҖM7)9?WMW؁=oSͦ'yt7)m`A4[ۋŒG8#|N߹cPM?P70qm"C<493.]+ Vͣ>R=TyM2=%+ʪE*FYVwY\:|$l|.|p+qQs_9 0qN|lQ DT]c?0 ff4OF ڔcĢSZ蠟86У XJ `c*AzL81\88Ok2LklEټ2gԟTTMq6Q kAz/'s8 BYǓԈNQ|=r=a{ {q,H6{i endstream endobj 65 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 69 0 obj <> stream xko<k>ĩ:>LJPĀ#dҠ,$d^2;!$yf&O>oI"gjOIi*2&3#@і8jқO3\Ng'"˄rRJy We Pu@#sdLNEpYЛcgzffnqr k$ ^!mk|1J}zC^S`hz0vXqfy gm$$]s4(}12K҈Ԗ&\@zvtȖ 5&W2- 'W*g9RLpDǚqjL.Db +%mtH$4zE׳( " Z QdsDkT%f#4TH_4s#|i[ ]ӫF_B+H-_W96cIs|s /V.$c y. yc7D` =c('QZ=d-kd W"[lgw!6X4ɐŒs(DQ;+7/OX}K[>1!xv^JKcΛ1N,ePB$'@q8Md  gh!~0X)+?H~U~1]αih8CjcƤ\6/\QSHa~& "@}/ge}5"].71URd܄d0ȓaTFfIdTFA,<:ȐDdK ևε[ϝg+{r_o~v+Euakg tUUql /jjnVeS u='D3#d#JQj#!pU|fQQ*с튚=.zRC((TH@`; p570 +1 (A6$Z.KMp{P ]L{gqe4(h > 5n0sRY<6^,qkRÆqAp͘C*UL;̡:FAMZ>A@M^Z.4ߴ4IQFFZFC P7ܾ?‚kwxHΪmbCV[m.5C28~@jb2Z|Alh27]%&@tdn *Xx =,7lnyOšƎcYAq& N_{z2P8 W1?5 *D,NKHyztIS DW,JbJ~b]fuPUI]Wuˌ^DmTh:ػE*LcIi1k S5nzM=^@H9|װ}vnev HtVYy$ECFco,=ZS#"}̧m\ ykFsI㵣`slR& vKld%6BvRvc׋.˺dN'xrBէ1+}Aoso)Hig9_=|ԒJ8W2Nۆ9.a~b%mjg(ޮdH|co_WRY"QC\4Waq fgp@Ha47< MIZF4U/Ek]T'G+2q1*ؚ?1F=_@i vg\)ĢV& -:N*پ|0[(YHs{ Dz"[9O-|q۱A=,2OnBz K;pw 9 c uK@!<&}sYnM}hޠn}mb+1 {Pi> endobj 71 0 obj [ 220 0 0 0 0 0 0 0 0 0 0 0 0 0 199 466 0 0 0 0 0 0 0 0 0 0 259 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 433 0 457 0 0 530 271 0 0 267 799 0 507 527 0 0 382 345 0 0 728] endobj 72 0 obj <> stream x{ tWz]*-*RKnZRK-ٖdmnY-;mN$$JlǦb9$!$#”!`B|0 Canj0$[C?'U{w뾻n pMbl W>2sߵr`~j'n6RrӷU`0[o`^@c{[^b }q|o߻cgOf/sz;:a7&&Ռ|t8>㲩o6,ۯzO#y;>O^5>Ç`о{솽\qwO}~힜Kp=k PWO_|,5yVKAh{C{W_Ӎ zz`?ϟ:Aq:F= +vXDus7A_%*OuΤY RJc`Uf^,5yRi̘~k0#Wo;dV\jӼ r# Pj5lȎRXP*3W5ο!+y~2ܜUZ~6;;xqL>v l&)s*\7:[ dq5Io_Rc_R8>H~ĜȩG'11OI9|R^{#Obx#-{7C4wķ >ra1<3R[jKF¿7KhK,,:{ԖR[jKm-ԖR[jKm-Ԗ_߇8M\l (*+ S6aZk?K1> ~/?߯,_v<أ*BZ` LN {a?\3%cyy1V)HUp[0V~'濌~g78+w2Ş}_sWٝrΩ''ƷmݲytȆ[weOsֺaY}.T*2Ǘr^tmVd3uZZEX%w%$d\{nMH;l|4`I>902bS\/EY+5.^ݒʏ )04F*8*cd@S $ש4!|qHa<~9&?} kuΘ9Hh@V)DFؓAHbICb\ků^i 'v ;Q2=HǧЈ-]>1SGk|Z?țPs #'Y"CF'eo+8G;g13P$Q:vJm8G1۸O ttvƵLgg'ԛo;wmloCtzFkʨ5B86c9B{ VR`LYd J\k01?14*1p*wiCSn+ &.7ı =Nï-=ԯ8:.il̿o/5c$B;|7?E-\.+ 2E2&wEm5i4[O  w/25?+4 XPg! m´jtt&%ˍcdNOS-QUcǚ؉-c'#?S1Jza'P>~"NiP{[$&2uyvdFzSҎéah]UrI8)E:ÉUhIE^^ TۂCR7G#Aj=)| ?>dMҞ") ۑDO`cA1IhNPg 5z镓M rLc"}ʣ*HRBJ=|9U}ޠ06ڥ&3;HRIZ,c0For9DIRߜ |] Y458(D"*NA۬_ȿWdLYhg!yfH.E*V%y$R.0eB䬒9?st 7[JM _q{ ox&7wMM_w=v[*]]疫 _t؅;69&+ȿ||b_3>Ehn^35_駞r8ds\QG9Sf~dhO,bfAʪf zCl~8slP,tҗ彇[୷0oQd&r_YC0LL~62 锟mL`g=3 ;o.16s.o˵ewY.cKqi.rAkE2:0jFf0*3 f`^jIgxƙ0zWjWKU8VAK`.,%fjXmF!ϨD65d%y> !F[4yG,a>N6#Z^ӌv 1UN3f1t3f /+ZZh-o-k-m[[VojiշjZI+0# >s} "TF}qJQՆ%Qta޵q)&NԀ"EE>E:RܿnѱnP[5}kn{L t'r!&\Y4ʙtD3W^C<0I}6%8j؄GN`zX> zd|Hy?nCC5~yXI9?<VzKgǟk=]{n@{t;| ;b\= O$q8 'ڧs:`#< _~x@YYkۂԡwQ]- >(*ke \~r hU*8ա 47M58;QE:=6nWC 0&:NsFc`0lzb]YFhQ^*p9y$ZS؛CvO46)^5A$,ogɲrje Ѻbā\lb52O9gY·vZZr~7sob~vU䇢BߐڢhOey{[O"P#WU]m1w9jc\=m_U5|\}QG (O=k+.ޒiYXo91[mAUMmM;x;6;x(57ۛ`4fBil6;ӌO!8' {XK's?TV{JL^3>Ԋh4.ۣ FeBͥS ؊FC,+qqfY^zo^yy} `.jnJ7Np@'?L>f0ɫ":g`C˻ kHDÅMm|1tj,ak!?ob?uͮJtpKJtD0F UDu\,RXb˪mJtt k-:T^T' FCY5xN+G-V';Is J5qlѣѠ1/SGDE/Pp[hm[瞙_vX#闎Vn(^6xcW2\nxxת^~cYh ,iP gQ Ke7/ +tO$Dێ^K皪+[殒P]uokGRsUWGTqۣ3/=yhm~Iڕ\ϮQط`uCcm BM{!v}H;Hьhq8"@e ED <+dHJOO`4xÌ7$,&(*(TZY4 9;Ӊ$'' m_7oԲ4I\NOh߮էѐGl߽̓_5mJW謰47-h+Wnz֞[֟g6_[4JamAFgr4RpFl T,2rѝK^l  nf-GegK& 4(OH+Jt'2zr](ϧ~9ig,%94Np2՛ͮpsMO2L^4^hy¸屑 A j{bnIS]_WSn*eTʝzGIMMx c@ ȑc؋85 *bbŽ k![ '획-Ƽ٘1>,9GQ2JϤ;ڤ6iD:*]F+4fŧHZ.8?0lHoc=g!kq]a?)2}z7̑O$a\٘ ٘!gpLjgglҐو3!ny̻.t*3oN#6sM|'1wpþrRZLbP~9 6i*ETEkcMfK2fO݂ eHN1Y+O$blRYR++PC}i-d2\$_dxbts& º]]MO^DcMOާ*#W:ݜ`0ku7^\ownݜcom+ܘ^>X\Xb! ލ޹+gPsN(ksto9XXX:(qy%丘gFEo(X#x'<&S,(Gu*B3aݮt[B͝y:RHit}#O~up֌OLvCr'ӟG#=D^=BcSA1n;J?kzDI:٬1r gB#7+Y@e媇R9<򤲜%-}ezrBE˦j&BiCvU>mP~.8vXֻYmPw Eߵ=\_ gBpkƸΫˣ'ߕ50u˚+ɻNt}߽L 7N \3zig x+OBV=$zʹrQc-fck!KQq A[4j1ҟ9""" g) Z=ZbT~&*ޡ+-ؾkeW~:xs+ w\KzKD9Jt~+H;J枩<'ѩ\~8Y] o/*NTﭞVIu%KBVډn/ EyqxCuJ>[W_v_q 9"ZǓvrTʻ\.eW!F.+nfdӲR{oPuJql|7VDcmpɛk8(t:+=X`=ԸbEj7V̪QVjű1X;:ms[uzMtlvQ+nzp'DSpg /M)"aoBTY3TRow*%RZ'$Sg 2h9v5:DTHg?:]S-SL;\",Z;zj|2c-jm۶>#m+{ϩO>|*\65Sq|_W9B[Fo/M]@DiR _\kXe2u#sk%ɷyY1Aˬаةe7,GarBUWؼg{{^c4w՚w H]1]=H>?97"ON8=lf͆v\}ïb%ePU[\1b_d/F s^s{ֳ{8&;aRSC+ vBꃎ 31yk(.!πŬA{ѢI@vE\k[ 4"h]hbBjxLPB "ίU_FFA:4V8<ŕ~o̅*+1ŏ1>Q¿6ܼו[H56 u{JOz(] }r:i4&WxH4eywF<JJc@/)h/xD>JxgSTr_iϻvo~5w֎6WvF6Vn OxurrK5Rk/}:ky~(ѹct0n@k`P>XZZ|Txpʟu(э?Xe=E" /ti (sn]4Ғ"We6' 4Cb,[˞DnSM6޷GU]dN&!䝐L ! bD'$2g&P_T/Z)ET-RlVED>O*]{3 ecZ{}2E&"B Jo"氰_URR@9;?cN}NpbyP1E4wLqS'`/SsM8xXIeTܢM5=S5.08*_2p ~>EV#Y8 wf!%8-4 yY ~Rt<55%E GcpӝXE-BxTJՓQX_?RwY"ߒ;y<(eŗryj*fd#Jk]U5ޔS6zDkf Y ȺNލbA [ҳS| 孊<ʰֈ~Ӫ":1}4(vt2V_Fu=ovH[:oB8Gho-3.xkوjP1dϕ=iQ4Ty,=vxSaPqLho"E!sb#iJ:}>kĪRYWZ2tvKBYyb`mdSDbJɝX[LCxɔI4SS"H"M 1`kO'i/OH%%KJ~&eYzRSr懮>9{l1];m;`IGԎ*x=y~$% ̿{駴Vѵ8C )yiyԜ=*:c%P/,y[dĴHs'\sk_tV^.yc߷4 YXxz C95k\@[$d#WfL:bC pÀQIEWL*zWcLz׭9 vDQ d[9#Bb:a5ԉPuZUX]yq6՘XR$5I ò Kwu>+X\4-H4п n$BUo1VC`1gb]{e C]QI8p>?W6Kv~P:dJ4%K(rL%SIQfRP XF \\\촪8eӪ#GON=/ⷵ=7\`EcuS>ClSC )g, cxd=j3QvX0#>-݊6[x >|il~>!_J&{3^ͺ̼ эreN:[~LǦܧ.* {BiOez8gD8i~ן`) 1FWdܐjaYHr'ޚ:0pf:k7ǛԚUH!QQȽ*k>>yČthÐ;?J )kTQ/3GǙBşZ ;!C~p꥟8R 'u!áp2q S>)_X[})b9'rb+ʢ ehcH'b*bͱc}ݩ_KS%oJ'/%D]Kt.%D]Kt.%_ ߛ#ˈ\->ɿEKEyggP=f RR[t'Z}-{+U4\*;_\[!{DVkjQ._CB5>-Q.%F_8oƟ8>XwL]i!oNpi 2PTZc %1Ct,CF+h^>\؀GXU\jbQ}e߁R2$GJxQ أcoX:VЈ:A1aPF@tI`P9QF٪0'![$g kzְg kzְg kzְg kzְg kzְg kzְg Ȏ~"7lj m [Vo>z: żzяxyӮӹkkm:.]pQ~|4N kk\y1up/s ̨MGP:kW{jZa.ξt8ʆ9m^S#qzGKgX|D[Oڴ Z롦MhY&KmUn+(BZ5|xOg>-4P;ĮkVhZmй"6AW(l>>Qh ڡֿ~/`hkHu3 E *FBG~md:hR{>m=0 g|{MxAù8{EЦ Az-u'P3F}mz1Vr|ir,5N~u sz|JV[N<EU +h-|f;9[Ӳtzgywj'pp!F4 5z{oM nGf=~86kX>?KߕZ!CRlM`ש\bgj{ D=Qή<r6DmXMD&3-X0cWcGHS+ךB;zGkբǞ\&,[;.ԌpwjZTX'"K;gۏ~;{c< ŚxOyUЊWXE;{ĭž%і1 "';1s.|(/UvWKuPc^q9V1MXV[K_:x6MHjF]/6E}Wu,st.:^+}=EV]r͏b;pbݪ+^GQ>s[#z ✖=ʯ'-#م]EΥo @VE${ C1B*#'9Wï!e8v1}h#2MGX~m׭ģnS& ]>A9f\i}8,%=矾ܞ1jl󸼮qVht]ub%bzm6>K?& }A+km:oou9tIƃ6v[9raWؽ-/Ƚikvm%n <` s )>Lo)Zzjy ǭ=V7sN;xd8*}x3=.s ԂO5{|>wyQQ[[[aU!p(qF^Tk}ֻzvaz|l}y5ϖo{k{ @ 8wvm7~sr^n>Cڀ .ϣc 5 &]hMmρRMa|#ڶO l;H1<6MkϪ`_KD/YnZ6Lާpk] "b^k /5X ^|g<Խ HE&tw~⩣Sp"p@xQ,"x#-9D}__G@?|!1 G#ӏB?|) zg3'IA|kt$hu)) % Ӏk׀Q7oo6,m99"m'm&u\/J/Bi$Ќ"B҇I$}ccH>.) I>)p;-3RWW £?J?I 9K]г[F]O10``$F52&E61h 8eXx8%NdXd ?8Ne 8Ng3XL x8efـsX\ 8g XBV.fŰA +a%PSJ2`CCP0p6H6p<<f1l ԌvW)\AA(R(Uqq(TKOWF(7)K`4e=h|6ƃ1~42~4k|aaao74xѣIVO%ֵ{(ckFp|vWLA⫦5XQcDg HEГN:ObLd;BMA|7XFa(Z G1(XCEy(:QEtvQ%N墼ED2E٢,HQT/k_+uu2X9-Vڊ`BiĿ5P2xp| Z֡Mh7:/QF!߂Wux@fw!f73OCnk as}u򇂯|}USksۛSVpUo nÔ|?S7s:vB;ډ nO=  ʼh4\g8G08*$jlTuTC;jEs@cMȔ LU3ʹشڴmn/&7Pu NڬM0wCI iZPF F9E5$MIIJGڂ iS5i52UiS2fe3r=@)c^DY#"e#{i师 QȦS֊wٌ=}rzNgmN)!%%%%CJJԔ_Yjɾ񥵥K@iPz iNtָ_HC`N1q*k^-JzXfҦ 'TĨ7N 7F3bg̜nFkom]>#ss:s~0ow~nfcsTs|sV0)-] \\]k]vmur1xZu@6C=nmZz֓NKѶ _5矘 6.xuH榹@oZhȂos?[n۲v0sa  = /e.\ pXv_(dQ⢲EcU/Th֢EEEG*[tjqբY@ū,j%dIĒ%%4-YduK^cɞ%o-9T##cHȎq5:nhptx:=7;vMڮsNcNQu!ZO}MA^~ߤyz1ꌪ"_C Fm"Ӯs&ל3U-UMF/c[M'Dk #q:U]K`jCoz34#ߩe-N qKߐNphCȿs֖_ﮮ!z%pϡt-otd?*b>htdAAOZ6i]P;[|%2Y\gs,كx_؟V㻧rmp_V˾M2DCZl_|ʉ7iqx)"i7AV {@ 9\t@&]#hk1y906d#m%d~iU<@ME~WЂo97]Ys̪ZȩZ~]s+ Z,h-w ȟe"jT&rQ@!@"Tr]Tg)"4tOejӦ/ͽo}WeZ/_qlu!wO}` hZ#Cv#cٵn>f|l5AId1?)pN#Wn6 F41EQ+݀?f&68Gq4F?X~Ix4:'+q:[@܆"OO$L|;֯u,JQp3 %FF°#DH#&b­$y$6L|A2-d·l|R22E #OƓ x5D5d5 2LVBxq7~xwi/wd!Y_!wx܏5d #yniKԮ*ݬSI*o+oK)(H #vrLZ||,-V+IKB;BC߆TL:C!K< laa2hh6xy6װk6hxvv2%ëexͰ^7gmd0m8n6|ba#{mfXeljP lFG(5=ƪ l_j:ۨ7jZ6%j){U3:ZͶc1lZVej5{ANd;KRVQaSoPj5իz~UmcoS.R7.W=u ;>>>P׫ϰFvJݤnbfvFݢna_;՝+%G˾S_W~TPΩwy!V?Q?qhy8VN^?{3-8YA Vp@Ԡ P%J֨D!8b5RK**mtCܛփ["#s}zz]Z{]Z;{^z+.Hs+҇T\Q1/}.vٔ>bwy#=nwwy7}Ԯ]+ҟvц01*8z3%h B/ZGԅܓS(D3+&E wDPt_11#>[Gץ Fz{ҥ#{Qc\sp!.Bnū+Y~2Ea>ObӺ]QNCӣ.MR֡6S]z׹unVP՘n#R0"Jc]X߰==o=Z]QSqx4jV^,YkVZjU92MCύff 5XBZ- Gcm']iƆؽI4RVZk1OAhg;~ WģQ:lrWI }c苎Tv> )Tb*0s8`.E<.e\+0O_a̢+5Xkq XE.ƍXunrܡ Wk_=X~^|!|5GXOS_+oх;x%i:7c3`+aocgy}| Ci0#–D R/'X )J\]z܀XŸ}Kpf41}=:o[ <4ր[-@ m]pJibrdؘ{c {cЗcɰ%y{N4Qړӥg*~g<#i<#i<#i< ]ŠR, mɻAS阁13Sԅ/ac>G)NpS4Z,F,24njj/Ax&}TJ:L=ZLb'lMğgw#K)b^+IR"I5Xi}|@s$2(GE(w 鏹%}!iGxLqmҧIOǧ]JH4HU0k:\X6%0ic q3s܊Ӵ9M4H 4Hc6| HKYROۮ#.Q/ω χ ny/I؄JD[27GhˌΒa6生 0">Q0OFʰ% Ŝw[rw%\hϽ+N 1ڪ8B8 &TXEP1=|>qW ?R{Y`7쎑h6NE1im_C>xx4p 80#0.Dq6?i/st&XqDSp*0 t|՘3p&j0YZsa\˼\4r\yu>qw W,,"c7b e qqj- nKZoE 'sWޑ.b:'>n72,򉃔,=0#0%B{UKpf4ᥰ02^(*ERL &Ѥ0я[ x؎w{xC@q2=f #À4 2 L"Ӏ4 2 L"""h\r:gB>Y,٘Zs1 E;(m0oh0E3Q"c):KYRt:|Qi@T>uIx4 r\ys2(eDQk@D bQhIr܌[@O)ϔjV~t܅| `v^&>&yk7{7fc>6ã]qi8`5<<3~N,"N1ЋkaY-yJ=<`P&͙R>sDXDEXEXE8sI\ԧ7Q(+h\h\2tlu[Q:m&Kgm(_H!@ex==bpnmoG3Sxk~¯V~y莮I==NGK'Es^MϊO.i*3C:wT{cX#-^`Ѥ܏ݩ:/`mθnC>]aK:&zwq4NƕNƕNƕ`74lKo=FOΙ3W,qw.[/>3wۅ|[ y6no{D2+Q{\N\ ͭ/$:V[VIQhlřu9QBiy|爣vc;3@o>뷎;Gťoxf}-lVl .CiC:_?x`.eChg6&O4Q&B ؝~=tΔsx9xsF7 ғqlLљxpa,זοuo_ism\;εsFڍεk7:nt]\ֹvsZ QxvmlٶwgؙvЙt7lt_Αsd;GȍΑk#:Gnt!Rx<9c#ȟA;;_]ˍ~QݮG+\uV*o'_@h&ɖ}{\e3-,&Qu>:o[+ O^h{xC~cB,Ul"[V-U/B,UGR~F[ X^xG#?WF;/Z/Wիs^_o^kZxM;i5״v^kZw՘ĉ(,Dt7T;Ob'?1Ob؉-QԆ_hI~cqA8Pqq$'0qtT1M{2q8'`qOS>YzJh-51qrD^{}|C}jSe+vtRf啻]o=}L(CDuzo>W1ؤMؤrIC]#x8qqIqI;j;1II5n)2&OyJH)0iiꝮO{꜁3Иqg]D:C?ύf/{.E.WKp).\ W`<'rո p-Sv~n ^ŸKp:q3p nm]͸w B %=oW\>܏ X.ocֺx}7=w8wħ8 Ũw. 6%>p3Ų|nhqV"εsyq.[%qs s?sNCK<>ǖ涄bdKŧ+(^v]gˣq38Gz߳Pbh^ ͋ҷ CkEڢ j1%C7h4.*rIeeѸ$GU}bUXX'V >~7}_J>khKFzUж3}3E_4CJg܋};u3~E_CgUvmշxĠb mPozӠ0AjuPZ҉_30Bˈ:㚐[UgVIY_8X8|\9Ny{q6aC\0 h J{OG ,?+>[rXϱc=zZRԯ~-k_KZFji6ii6ii6 +-l&-l&-l&-l&-l27n7/}NNdCOb^&`"'Q8<|Ũ%N=aOrR\h02 X_:ob >'S*}2c41gD:t'>^O&t}!8pq1qnqF6KeR^)& Ϡ3Y18bVN7J_E^7Cw&f20zRUրqެ#rTa$Fco;Ę-?tPZo:z#7Bz#7BF%Ip>|gl98aE%ՔWJ/ĕ xEX=]%&ϼ7 -KIܮ;J;a:/*&Qbhs:nqJ0fuY]oVכfuY]oVכfuY]oV'8qUؖ a1zG.υmE{N/*QGͺ#"6enEIԖWo+.}!Da[&u ]C:2{v%o\ Cq]df'0vәc09Sp"h#CJL8^2"af2N' dh'3 d'#gh(CCYq> 2|*sq.-`EXQ=VTO2WQٕkaidqyeOEɰ9K;Luj~Ӣ;U~A8Pq9eښ\+0OшE_K 7a9ngn*Ns}C/Zmx5[x;k;khj=Z`,ZEkh vX`5a ƥ[ˌAA2[61L(;&*^*z5aeVV=%}~,~^[X9bku/X7я[ x؎w>aZr_3| f8 gc&jq,,",ƒ0nM ԅab"ԇiKBWʰ9uwi utzHuץO't?O3zو_ ΧZau5KcЩQ>y'%_)")("DGt"hE_jZ֊ZZkڬk-bkmhZgE:+Z[q6Vx(%l k2º@y;L Vg 3}|3!F33ea|vD>ЗM"U<ԩ쮡912,Ff?B}v}W1"q?Pp0 wX=\# '(R;(l2U~㕟|s=YSp S˜i3ݽgHL֩;[c{О=}3QZ:c6fWm]ջXz?ic.ij+B<)}U5 xя[ x؎w.!T!W~uXQ~Mh._֔_:˯ 3ʯosʭau, , oRp 0p8ܺa[9tW :Yj9t,psZ5rg9\'p-sZw[9ípMp9Y:9\ kppõpfWj9n kp]ur5r.9\-pM&[Ùlgo&j=C,v:ܺa{íp8\p9xurNVpzW;p\02̺aYet.Se \t4raYequ\4s\f:9H8T?\:^wL7ǹ>^ w>Y)8uiӔӮ1]ȯ3>W,l)?"yK/Ք_Օ_]\~ ˯f_/]$Te~$m-n5.-Ɨ\ߣ WR^+W>,G5׏XTN G =Q8PG uPE 5PE 50fRB%QB%PB((((((&PB%QB%TQB %TQB5%L*J:JJ*J:JJ*J:JJjJ@ UPG uPE 5PE Ք0(j()a%TQB%QB%PB%TSJ:JJJJJ:J*J*JI uPG UPC 0((((*)*)((((*)*)((AxѶ:3o;4dsD^C,j-"Vg6|,5FhwF66{oڨWٕvnmj#n0341;v^=W9F}QbmXv630 L[7" 32~ȬZۭvΛfQa yLZۭjk{`437%Vk;om(b0SҴZyk;oVFc2![km[yk;oEZ=n f|2ìO_W_iv #I-%LCvjhJ^mm7SGuRd=&om)y8RTj9txmk{5̡3exm[ᵽnT4nW[۫jiT5vET6oJNIPŗQ҂V F@b[50E J:zzNNiDevݎeƴRh^AF,P~0w=|;{o=+-xEըnQpƶF٨0GoYgjYìC Y2(sQF(Pfe֠L7܌2[Ql9eއ2(eQff2'5(Ӎ2(ef(sQ<2(Ӎ2 Qf9DÍfQh@+Pf!\2G(\4tL7,D(3e7jQeQf!,G(sQӬ6jPeu62(iY2L9ee.a9f(e(3eEن2WL?tE2Ǣ\C5(mG(s,F Y2(s3lEQDyt} QD޻[*WBTUFQ{wnTFDQUQU0V/lT9UAnCŨ2UZנ0 rWl@}׊Z Q^)+۱Я:?+Guƻ~TFuaTFu娮սQՅQ]ՠ:7+GuŨn,{Օͨյ:N)+DucQՅQ]ՠ:7+GuŨn,0 TFu娮ՍEurTFuaTFuQ]9+6*QrTWÛP] 0ZbCu[Q Cuu{:x׺ ՅQ]ywQ]PY+ΏJQ\^x#PI(~5d}(ŵ8>N)+DqcQŅQ\ՠ(UV:}RWh[܄(.<(n +Gq"4Ldi)S|NJpv~&)RȲZa\ Wd EpȲ-J1ɶSxDrt*R(B('`\24C l𭌤^8*ݰB%|]pkH7j-!8 G1@Q,lVa V`4 a L# GɈH?'\%J\/*?~.R?,(?&ך,|aWFå0Qv*Wʷp%\'Jm#ž Gݚ[[[n+Ӵiz?t6/dЁWR/c;v^%U%v\ޠ@?fM-ҧ=nr f9qe.1@C<} Lesu% AP !q+ykJ}GR@;;sBj't.r.ul.~x` ,zZ0<(RXXXYXW*X-_ րIO^dZb%eV G#6h: !C>N>]9tBbڻa8/K tאo | =p腣p >ԣL0R]45[\ S:MlCƯm.ÿp'̃ @b~B NXP Gr: RpNSv1W!11vcUOŌJ8ĘI0^b$8I0N30f:D5y\,A,A,A,a>9ĕ 2LTʐ;)I+5gc_;o1 % T71Q*D|gxMvE6Bxs o;"ϵ nI>'~ x ~ <( 5!&ׄ^kBxM 5!&ׄ^kBxM 5!&ׄ^kBxM %!rMa69&0flrMy&1<ćC|x!><ćC|xA?A?A?A?Stݰz:y.ϫ%PO0:י9"fNéb8U T1*SpNéb8U T1*SpNéb8U T1*SpNéb8U T1*Sp.?B'usḥNBr 2:T}t36SSo1N!t4]H 3Ee){ĈyK`)h2P׀^e9WՂWѸ&~nߌ7Sq~?tgmYqf}68k3Q8jG a5q0Q8jG a5q԰MmfHA`T 0` aglȀ0F(8΅|1\B0.KaL .+`L+*Y a mӹz1ZQb[ya]/.&E|<~fuM&@=}=j *Tjjq?zUU9Gofl砝1ŹrZΥ\*Υ;:CguʋʋʋʋʋʋʋʋʋʋʋʋJ{*űrq\trq\rq\*V.ա:tW]CwuRq+Rq+Rq+Rq+Rq+Rq+Rq+Rq+ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ ݺЭ jJ{&neAW|u ܭ#B"D.B_Vßal7?MxKC$DLB$DLB$DLB$dAA" v§ϡx-F1V\A!2!2!2!2!2!2!2!2mLQ%Y0pLip6ddBs㐑2 2 2 2 2 2 2 2 2 2 2 2 2̈́/IhC=X8 j#D^} 6G_Dq-Q7洵0XOb=Q'D(zXOb=Q'D(zXOb=Q'D(zXsB| ۠ ;S v QV ":j6S @mξ|l0O%wݠE\5mΥ.CL3T 8i_FD7HtD7HtD7HtD7HtD7HtD7HtD7HtD7HtD7HtD7HtD7HtD7Ht}wޅ-@#Z`+/5nҢ:pbi~|F ȧTVQ]TVP*'ՓIeRQYTTV**+JEeRQYTTV*NsRTcڨ9*Cl@ .o=Ӳ.Dbnk`!?Ϣ5j2QB3Q~"U4 b4-)sJ"SDpN!}R'k ^Cʫo][ت<6; {gPuY]Ty|kw}Jl G =Odω1SL']|Wb}h5w!}Lg"y=.R/'_-6u{-j_ܧu6 )}lv~۰IaSy_h_Dv/% |׌+0]ZP&gRyhuٚ3不c[a ,q=+4 Ha,bkT5m`g}(a}0}lG9͵)crn*ױ,i}; `,%r})<OpnǪ`eߎ/3i!_8ל G5‚WX ^aS9Mb(g:M>bdflLV֐5db NJJJJDx:_c+*)6e·3 TSOzx.ݓo`*_w!^?v %Н>cK(XYBZ!Y#^Ew=`=hm z҆=hzIzIZIZIHHZHr_J^_uz>TPF""$c6M8a0ufMvTMT"8PYY[5i:1!9Tk0dyyQ1!>9'tNw"biw>Χ5.'ˉr" m~nnL7ct')(G<͜*x'.>"x_&qEkX s"> }F~b%Ŕdh1_+6M ^FӼ zoԿy8&4y!.OO^~^"LXL0KE)Xn-,-SG.3OO3L7+*h-zgC_}>|}b?!'COV~J$Z+}ibiF,WUr[ی*-LHa̸LN ؔ'ySKnW/ ^EH}JUl:(v"[xaFnF2^k`!*ia/\he5q(%ġ3ܽLlD5%y6&yI5gwZ%lC#pTpZ\ZN~jc_ZO*X,~MPWq.[sB4_8[+~hً}l.8IZ4e7L MYzEɠp ])"bc{6.f;s%_WZowݨ/X/~r?-h2 R@r+ax*Qx qZֹ~;&zqc}rٿՃ_nT&hF~z#?#yK'ڈkq^8/b2C\P80>۟Nomc҆< -,Wbr%Tl1j}̥>JOzJmRhSޖS۱v4wm`ljP4ӨvVՎ6C%ܽէ$^#|b}ET[7&lW bJg lW3s(xF sOC7>*Չ5=1Fmb8zbN ۉa1+5ˎqur*}k?"w2\a/Oȓ6rMmOi'6vmմvn[hN5L[?іsm9WDaJ"Z*xxzʨN}'|+ |+8_T7CM?qgVixZVpOkoy2~cg3{W)c%DhTjGNs'~g нVvntAw~/;*=j2̯Rgl'[3Y47=ku'OyXCh% p3~ QN6̔M!0, k-j O9cīīq (%2LʫʫYI^J"2m::f8UA+. X5cJ~L[dکLCv kg׎*hP+n^ͽ'k<9e>ZcS%U׷@BEBH ŽȾ( QGDDĕeGp7- *.d }/˞Tr_um]]9՝%~.:W˥qq:\?T Lh\Hfd,i,i,i,iV,ޝ]AE귲mLjeaa@Y۬ UrB(U"'ض1!$Mӗa n噕 IY,C 'ImSX=M*g_e_aNE_~\~\dT??9H;zw؍w9~uNl83t;?݁rPBJA 'Nu)M.abZ ;!\}_ Y\t }4հEWwȾK ;?v~zs6|Ww%U8±k1d|=k1zvΧc,-I:jkC-ZZi%tԒZ`QŢ/J_ҿA(}7e𪒶iٳ<γW.[&#f)u2+lsp.lmI_0,ң%36Lm/^j;̑$c{fy99yy:;~?Q8WC/D/D@@@@ Q~U6xj ?֢浨y-j^Z־/j]Zע־/MlԼ5gH<5Ɲ}so`,u Kc/$0f4Z1Ak5zrZ њhMcfZ IFk1.FkКeh2{&i.̝waߍɅ@2-k%ehD}hbQģe˂u wDѲt,tѿVh1ՄV3w"f:tٚW-n%?9%sn<5/ѫmS;~JF?%mo>^?k[n D{@W*^_筂9϶R}ḿl^ ?[u\/Uwpp }P] vn^T8}%I1gޕ݃މ߂;b@:u:_ἅt/ĆJ9kqYw%W;xۼɫ>:'==BEΕ'??[IWy&\]_cC^yu,7~Nx[9~G{aM U&[6Nߎ8ފc~h ~mk) MY)l=;o#ONpo)6 }_^N/{5`M/1ǁJ[R;Bi*Ű2yxTkJT'Hek+UnRD[I"%g{/sJo9qMb}}%m 5~+V5u-J^w!GK/1UW2-em"ErAߝf,/ɛP+c=?|n/_Qlucۅu[UR}X~њU66K=eTgx5=YF6*P8#oC)m͗-dz_P{!)d$ Uw6V0/?|4\ m, PSNcE\b/' VQ,Th&D{8\_ؚu%qʻ^Y{:lho:y#^S| CZsoo FQԶwq0l9T#~w?x Mn ^a)S4[dK_(~nϛOi)̹3m'+'!'sȕxԺlXW<VUŌ&PÔs%d+OQJ:Wr+V#EpDUJ+.: }\z0e9Z?GQ#GEqgzTu`E0Y*Ye)5Vs<>"ǕvJϻ%?Wk;Jƶ~ZY[d.=_}\*/غG<ꝬB-kPPѲJ }N'o*(?ObKy/yjٛ hVy/{aA_{O7̻ϛ-n.R^k)nY(r\b9bRvxcN܇hn *{ݽ8w%aaWXzٚ4@OLƂ hw"郞r;>y 3Xy l_bj-#m?=29Jܽl\ּ~sԦE?I_8;Nj 6q\i#*>G+5H:qdžNE x#>jD{߆!ISI Ǐ֢,Tby>.|-x) 3InRtXskBĔ;B=^mO^)F4 F(zQŴc7yPO]mޗ?-|l+12? >|Lvupn6p9YgrvEK@}\8=h^Fvy ȡ ,t8[`=RۋѣOkyck1ǁQRs@[kVDL[Uz.X-Okt-G`'kLh|sx *KnX~߹V(Czx[wt%_dP\ϡKuJVr6߻]\ĔX1}T?-)]=rZ-qgxC?9(ō%CS@D}h͢~tm)M: I;%WQMD'j.B~bHF ׈41I!ŕbIL'nR.>@FPV"%bYC5eMKCsitoiΗVe Vok<l )Pkli]b]*Ӭˬd;JkloͰncrd~߭FuJk*)Sr#(ɏT[UJf*]RU{21Yu'C QCb5Nzju&FzF=c TϩA%1\^3Fƅm޸H1F{%jl\>Pcc\}n\+1AVGi͸EqmQƝv ;xcTxf_eh37?S훌]--OL{۞c3؋E>wߝ3"㰻}8}8.s' ww]7NݍƟfw~~d)M2-_||a>>fooЬwwY81jR Ro^?GGN:c+yk񻁱TRpg-HRNHG].|7G>|SfhU_ߔD-ѪTj2E:57C}і~աmQַhpF16Q4d"MAKnih4nC@_g! 4>ŸCNDߜO[= t/|߂Ogbw$z-=FK!=LAOv==J+qIZzgђ ^EkJ^Go}o͈B%'G`B@hEЪaBJC+ҟ$ jk"P$-l0FpC5+\R'|&a\صj! "bD S+0bD-Qڢ6uDj Dŋ.ezuE}*Hċxj"hI %YBKQZ1 OGh@1mmE8L@K.c2q_.І+hq 0ILEnQ-V{zg{y%O\<.M- %IJSBOoGQ8D}aqCqҾ ⏉c?.#NtMFK!8?şG1OH! iPOiJ%-J*ȶ!cs,B,d"1Pk=@q:D)LIa:kf5mV7mւ\یf]J0-)L5[A>lGf{2;]<r/73I\u%42'R-Z7'7@bNFæQGffJ7ө;Q|s>%Y =Q,f>Z(o<@5Hf8;FխGX#BB#BBjJWYWQ{k5"xJ<y5:XXנkkQ$k25n FFaui4{5ifX3PLk&Jպgg[)ƺÚ\syu5eeݍXR=>~Z^h-E"d12@ Z%5iKdYZRt y[QHoȻZDU*?e=XϠgPH zUU\k[h\;{}k3bXZ"g6֗( eXZ?%;Іܩgnp:˱̣Q J8fCǭui~~E-@* \+,(UO\jFIQ](]cjٚ&T*T-U )kzxmRj#}%7U 8L5CLJDiUsI*S4E*h:WF6-Ui*1@KHQuDL 4Uwj!jUCsiFK?ZsuRP pwگQC 8;EME;oR!ߢf!~%W{BJSHzu=E2 ropZO'rz*<ZdzyԻFA Hz^BzF{TS=oTz Ә25j|ڬ6# ȏhGMB"w;@? ūjbjjڏ2HsX uqrB'oHJ4ʣTa\%II !5Hav)۱éaGP#;ҎD|5vu:E1(]ibXcA-qvoh7F&vNDli0;N%U3N(ݓjٽݗ(s= QH{=21Xl_f_N]++Po}h=) O'=עI$|}J޾O'# R5nFLmP=מK-y<CS04P;*H!4b (]kE]4! 5ؚ46[S{݌p1@ @);}}!wuξ.ҧ7Nm}=|=(ד}Σ# L !!;7Z#w!K| ߥKz&#hьȫ3fhΌk1h;힌2nh;Ѷh;X}Qь;1z2znǸ9qs2P3EVNe GC8x.Oa(9QrFi%g^!$ $ uToC D]'enOތ-@ Cd>hS|Fǟçy| J])?{i?pyp!0C!ROR}r  ߞr;~@0O㣀}5vؽBףG2^bxcwaލzq7Fo$"r|/Qrh ә 44.Dk`z 9hzD@@(\t֏]EW`n⻋@=D=E}E?`CP1 pqr#Hvhp(pq qRf'D'\kJ1PS\+`׉)oe ,'f蓙`(nCϼ"y+9 0vP}? e03a ? g0P? b0`? b0`?gЏC?2JM2 r ) _/u_'!f\w;L+EInBsDvr7g:GGq<S˰ F$55(:߈5b!70 L4q6HԅF 54n7ncj Nl.T]pzTANjfJ-VWIW"5XV+3LȝR:/uj rw'^f/jo8X_01L4G9TmFs EcAoN<l- lpkj]od7łM8Fz:3KcWӜcC%1knod [43 kdߺZUg1uXc5Ku5`>L,X-fb fbwE[Y(SLZ̲j1jl*yT4̣2GTgN;eZ+( ܩ.sLfM̑E3̧33Z|2̧'3|0iVs Oi`5PTlC3I!2If"T9sRsjl N VvZ0iSȾ8O;i!WcVvTf;vPf VvZ0ilvvU1̜'c9O+<Tiz(C6~<>xvZ} B?^}9U8s N%~F™YEY@Ap(GpuTYVd>:I \+RSW83f\0d6)W Ɍ+W\sA*ҮmFWqA*U8H$rv2p-V$sp}.vkr{H]]!kUWMf\̸0ƌ38f\q8Ҽ&n̻:HfY!OR=͞,V*`oCTf"6}rYDg")g3۔lt6R==țlFW48{9 9Qc7uFP7ʍd7ލGL39n %68MCLp;C!t;Eܱet;ս 13ͽ if kex{7jƸC?(}y2wd۸ϹS &;77nr7Qsns1o~w? jxkr -&cE׺{W~`GAXBQ4/l:G)ߌ ~r[Q4Q̏ʑ&{Zw1yZT[1P%{N؏ B}' z/VuK1. -Rs^=RK9zs:t8=JJ YZZ|W_X{~#p[ueavq}+O'{2+ch< uB[o|=:s>*w~˚JUw*S&xz.,%ޱʾ,ܻ%꼥^נ_7x!o$w! Ko@VʗSm'/w0P={[oZ{뷉C}73)C{^wQNM~99ݫ[*;MyFlrymNo^x9q>SMyJ@]F_w },~-8SJ]+Օ~?~+nezW4# o [J~ݻU+3VU3r%/-7*C}"mRwwUTlHYq2p밼ϒ}.$eClBv1eL"K&˔Η0V#;Ȏ=eO&AT](DQrՐcdqr<ɉr"1d9)r ˛MPNө!gRc9KAMyL3H.D\BIa0>r|R SV>-t|:> VDe|:7ԕwt4&zȯpI#x%kRyP12Goң0 PFQ&QF4M5j4ͨmtQfFS|ѹG]XR65ywdI c42#Hmi&ky6QۖGm68G|8 9_B{*h[||;ߣ]nq~Tg;QAz'FK'A l:Tz{cː&14&oM$94$M$II#IЄ&9R9IH$9ߵv{~y>؟kzֵϱ˃ʠ]/bδJvV? l04T[e4FibhCX^BzRvͰt2{vm@gƤwmJȶ-mK^˪\:{fd;Jr7ۍRvl/ۋ`c?-JOs%Ɏr-w*4c"=>;]l:vN)Q#X%M(;44ò*4Öͳ|6Nmf[fhY0cb72SyUw[{-߽ ݫmnW{5%߽lw +9Y67 &f?Yg$͹v)D# h*<,a $--J?@ *4"& hqRX6B-B;1X NZ -IlbrhY#C<&#u+%퇆J0a-R`-R`-Ra-2a-Eb?g'R6NmH88V!V!V!t؆t؆ư5l%˱BMXt A:AM؃:%A-ـ8D] KKP6A@wq&,Űu`j\6fff4OҼ9^@y1 ؀`T hzU$` x%Hx$!tl*=OdOǽFd`QWmeyYq":0L+fX ovRӐ%;ُׄBd#]u% DžO߇ > WE4|-|#|3|+\%~drNreiSʕ/Ǻ}OK+e[N2MJҽEא/$rTpz zzz FG1/Y\(J(ZwajSޝ ?@秲f$]5Tƽ#qⴲ[+޿T6"YFGլe7.fQ Q}KGmvt=ut{dp/ax#ޘ<ŻZxކ{X⭫\~u7>#:;"^ĮC֕#Y7>O`2[\vҟ1Aݠ.|\p Y>ɭ5sd%ji}QDz|om4 앶_h[|1ͷv?ECN]vOؙ}Ѿ/م]l [j_v-ܮ+Bwa"n?~l =)Shޢu}h*:źzΎ-n"zn.bwcb-ؽbE~#A1gLnˍr!,'iyy_%T*K5W9*KPU']d?(Pめ`X02w=L 3ٮU`^(XJiW)n)վ^mG;cj6NO^ VjK^SWu6CȏEy2!Ƞ:4z4F%vJؕ}ǮI1ljr{P=7D̏%biZz,+\|Ep+ܫ?pacȿDf@?ک>|88)wAl |#(mTH:4_b w"=ZIMAJ[xs( Tj J`-|.ǁq:q䉱FCSLg_P![@̀~/+حV|&#w|9<Vr^.Z/ E^4 \y.I^ M7qnQЯg i [ K+?ήS稭^kL .Fcu%KQh^&O@ CsČDn _& HqO4͍O_"{/uzmvCA Ƈ'rh40uS{Cu=x/=k@pA.4p@h"7{o#%f-q>2J(?\=ZO`VQQ5P銜g!@<2 o5#xU&-5k4ծuP¹OlQG Î(X"7h> M=છ Q*߀jByF܂ z.¢jм`y ~1zˀ YMF"g1_G#J!߈*pU4*_|wPDJ# - 2| jCGY!4E80y<ӬF l{ =Ruv2ZkDydC~00蹘 ,-Ɠ%͑rU`;ه\zY-j.)V;n $C)Z5# U]CG]v-zёn`y2v[WAt4dd#hƱ1_ʗ&"]\͚kDk]mYO1f^ye4O*6L&/A .JaieTʊ!'7GbcH5-VG5Z=^Uc z ߉\I=^wP/MZa {O?g/lR>' Ub̻fnf>d g1AIP¾BL`*ξv`oKZe*8Pp;Îz=/f1"GDw'|Q(P1BqDL3K E)*F蚭tNf8 Sc8#*\ORϊ^Wy)&QeP#LTLZ^k5^O{@o7IDMfxytuat-`[J׮V{k foGw?袗)*9;+2N=\,R̖Ѳ-);ȮKe';D$Jd 9D1ƕ 'ir#%r\)ro=!}QEjB&Zbi#G5;G\T{YCtr1R:sAE_qf˶Лȋ"/N=.HKo\B=ZuTb.Qz>7_5Ks _I]1:ݨb'@vf\ͣ%m;Ļ4a͊YQο_AL~Mo2`5 "Պai_94׹1''0h^w&g?>?zoãDѪH |ҷP\+NannD)YNkQr慠u-U܆Rn܁<Ő‡ i. ?Qi~z]SN456{Vڰ+=y7W'=VȦvPҴtd]tlM%|mA(`mBJ'ꨖ{ m&BOVΆ#ϻ+'yn*g]AɏBrVU]h&QQyڣ#5k>{"\o*7J(Vx7dVdOPϸܭ&kyA0Z{Xa[zH3hGʩ|CB?-4o"ר]Zk +JpRIb$Hc)$WiٕMQfq O hV_b(d:|wy<sPd5W2^K5s{y}_ K#Xv;1!KCȤ+/P);(fG\m$z%+! 8/Ml{ރpރ$PZ7y.'o:@-RJQSp\T,FMT~4N\ȷIrMsI#=^@{=ԇusZF:Nƻj| x Ԋڧ'y sȧIګN^GDbQ$:NV VAQVQ/zy׽o#[ U1Ѻ[,jtAjX ̓KևV}a!wuQ|p4Qك E^f(4X{J *o_kd0{"$f"Ѫ7o nzL2 g+JHv!Z%z<hǀ@$sgS .U*OSi|<'Hw CW蚓tJ_jIWkLYNUz>rX+j C5/ H@7jMrk|X:߇J@1&0 i6vjF9dif&Cv3Mj ]9jbuԮq\ [@t<'z9G}&ArVV.`%H滑]y$Sh_L!תtףCU&w Î7t-D ?Bv G&Fm+Ԉ@u $((+J~?+;t2bWp #+TY+:TFLL,-iĦ+H|O*g؍JVѺ').&w=ClKyn]H-5ՠ]W]䕹|>!`+.bŽЌ8x8_# P <8g_ Vъ9vIֱ˜\#dOh/ vՀ7O_F;?"UB1G<`Exw\5.ZIG c!F, R(,|J;.(7s y93 y=M! & r 2rb8bLy)(: Jrk(vU&vD?-@|\;14Uʒܤ$/t.)&o xK Uϴ^5;0g<8X¡Bkh<-GǑ?!&;j%O bc']+"Q3@D%2do[E,Lhǁ#Xr*[!(Gd"uF;d:(BT| s7wEh16\h ѮvrzOw2k(!5Ij".%ƶY!9X"b/M)bZx_ӋH^ra=pd (E>:$!d4E֤1/z(WᎿw4Hg[(%Fݎu=&.& V,}ڬ稃}稇}KÑ`OgYZte[Kǵ"ڑmcY'[ r=-] ֍KX_ޘ7fQAA,{K!ϟP/cð2;.SD[сM|Ny%Gg -)St^ϱ؏ٌ؏9o:GKA|,\.­(<.~?P<ţQ=U^m"**Q׸X o5vnw~.; *-.r{Y{nP}y TvA|} dG j>/Vb> :NgU'i5FY:\ \|/tt_qVPb;%|m*xR |oeV}+_o׷=v~M/kz_VwO Do_&?q0 SguP^i0G4 "p !fn&ib%"|hhjs|#Z#uɊnLtq{`z&b8.#z1퍉noL-۬&~|l7Xm`(p߉ vDaYnMv & ~N"Z'Chxн*vk FZm(c6fb{/U)6Umm1Eē.$&h&¶OV}G!3lg]</lc>b.{b8.$xE"-h;NfINv}Fڙb}<@lvbb}׾'ڿ +Ěڏ!ٽ):K@GXXNkwBAa1edD"=Kd=]sBJu^Јܤz>c4 #\cM.5]fM4MMK.c3 ӌ4xS 33(mYjVf`6vg9e~Oku~c?o;]~_?,򇘖p?ƟOgij&Kt_㯣O7:[$%~?7Q?M~̢VP/hd̓}A /䛁4ދ4ދq4'ӃY`ςR?5(3*W`*X 6}TE`. ˃Xp28C#•.*J[ݦ ?ƩM%.'tmvY]Uo߿D CS1FJ)iJ#RLJ#FISDFDnDa""VD"EDDE#"M)24u7ǛO}>[S:ވFm˼ow;NmY]uxSE9ž9#?p4?~,CHS#:4k_C'u4)\_B,Wkaz]ow{aw?[I;/50ŁDobC,';K:O&ޞpKB?moV&è_$# {>lj2&J&$ɔ>u$39| 9jH^E47i04YT$뒍>lOv&{8Pr(9KSx_f'璎3H'S-ZZiӾetu[!iy:2M;{ӚtR,:*1-mHgs颸+] J+$]O79`j]J@Ǧd¿m?%u"ēɽnKR//®P<Bbeb€A&vCJ k-]:HMD` Ϡ Tf J0&| 4T%ҟՐe|x% C~W7#X.!= XwŗH3>:Tb/8XGi=Sۣ7rK |_{W"wDȊXZ`C\9b<v}&((CCy 0oOsӘ Pf,eQCBc* D;O)f+[1^AekW@"G%@!~AY̋즥$U%Wp_D{s b|1LaoKl&|Y,c"1Wt;ۛL % X3?A*-B,4/fǐQ ,:,9رMY0b0!#Pb9s zEA( 럒 ~WLԖٴE3%JEb#qbև"YaQgAC& VH"%G Fe$E (RliY  ثm-׃6ZrJDDu6C2'h.;QK[?yCfd`]5`"7'`N9;鵬?zndPI\D-=Y)VqA-UC:8w}.j(*3* %: DMe`Y 6. wjKSv/# h{uuRERYE΂ЖLYq5Yu J"$&Ԁ@pr+=CZ( #,*<@o[r?-QƂRA#etC~VǯXg(~ I*)XȗV*%2uRAf!5D9YHE&P0JPxSKe"1ĺ+8AY%&{.xPbA5YHV9y^6-{怘ˢenG1:E < VKʙh Fi1;f^-n:v-u-GcP6aآ&yY/gv{չ#ôŽjd;<$w0h732έs'46VQ)nyƧ\9MXf]FZm䶘svcl\UwXeFQÂSs_jgUA:8k# _u{Y'X#94t«:͢ssGgi^+hThok.s=f.y칬`$͠^Jv\x&{ 费IK*ۜ=_yKhcPs(kqm%67NĚ,׺G !wX>j{% _~s(wY3AAg,g`p0,Ow־k}639%+>҈`;}v{^C<-9݂O"0G¾YIH/xSdz7'M<+Kh /czIkPr S4qWB&9Pȟ̝ԕ2\R(C~F(و@~^|(G< G]+x=ҷ؁ G7"هS بBݡ0jJyPT *AH"\9Jam8 _lAAc6eܻ3%H%8v%l!@ E,jZq_EnFNryT߇֝:2)HìBd攠'Ҽ %]/-a`Sf'V,Luyg.bq7QgfєGA"Xk5=X bD \~>Α=dvAz(Hڅ\܄ O`S@}d|8Z"J-Dr5rDc-U@ok,\˝ddBNDH 2cI6Ŧ%}(}Y5J0ȘC^\PhrHA%jhHG!.Qn ' VRMpjHX 6x}=ܖ6bj¨@@В~[}`\K"AYHD ekF>Pb6aQ%LKb]Ƃº'bb!xKam."3SbhͽX$6Fx XM0 ^4a%ʢgaR'HthƼ;Yf\f&9%h)OxŖ,vϹG!Cc Kv)g ͘bo?JZXuEø 3]Q??;v艹 [@QO}Gjz$~!zf:~QϪS󼺨^TWT3&2ļm kEk2XTާ}[*?]@=NnX>DX>KyðL=_Mu3< XWu ֕º9XW֕J3+º֕/ Gn1FVXN~^yq8Hb^ ]?a@w'> F{}0CyA3^)VwQ`c[^lKѧ A>d#p98OGOYw_[z6Pq;_1/߼`ODloG;wY_`~Ѻ" Q(F#4B-F̖c4[Z;hT2f6Nb|m,xeQG;ƽ@%.dXv;{ www$sr{xhMxhMʜ?zF&or![Zrliɽ-->liɽ--^m:ngK}lcɍeKNmƱ%~Sޕ\?;?{qxJg==,ƿ97زg {"'Rif^ltۓ:ǭDqZog.r-Y369[pvrawg~[+n=L=<`;M^ =-c.=s3aӎXN!7SLw*Git荤ih].QIؽ8Kv1^vjYM ^@m*7sm^9)uxd/Ui]Utfv}298(Q}3}\{gwn?{Aih 9ѣ#̒ l~0e,e;u:E j{ _ipdmootzCh˃+HٚP -gsabΰ,XHPNKc95̮핇tK]I̶ָ^iv뜡a30?bmgoL+/KuC)n% 1:YA+s]|i:|iAs0r9 i-u ~θf؆z|qi5vn8i {(Q%h٨:MShDSQc4;5E݁RJVyhC9E}`t$:=qDmbt9U0%j̿8qg8q?@w(a~W˼း"WZ/ AxNO†l|Λwĝ^Y|%h&qGb%A%}ɀ8);2_ G~/+=/'72Md<dRRԅi9ߝ4$p.h>NfSI's~I\,ri֟,OV_&=ɦd;Sݪxhʓ]x[I(Rrfu,r8yYK379JZiNuvcI68kvRrթS. :r֦QZKi py:(J}QOGiePO5stb:t]N μtzژNMbn c;!]LW'H7U4tҵ醰fli98n : #t_z0^XFyg陠3m4f<=Oe:֕vo+^>q8pgCIYka6_O$5|}z=cItIC9ؘ_mͷJR__Hkw% g{~g~O~Ph2YOOSs;¹-,o :+ͧ.3Nxe N(*wk|~-'mYߘ?tXeChݎ j &˜u Ytkk{mX0SRK +):`{(n,X^4`SRjF$*O.H?r~ !@ R-z%3蚽&PV{J%~lE3=\%ȟ9wgo!gw 7 ׻/4JP&>_?!Gl,Qv0X/CJTQH'* 6Nųh8yHA^{$ֱփH[2Ǖ9 1H NBXAEDb9w+98@:r̢Ŋ0e P>^pYtTԅz m"j|F-Zc+ Y2(#HDah`\-lJf6H`3ˊp5:Gr7w_~mD+IJGm0"ÞJf 8\ڰe(sAYIܬ*ёH~5@ ji Z#!%sEN ԗ1%3(sK6;o3v@LɍB,3fJm Zm5=$'c"x0wfanuOBG _83%Wf@.|+d'>#gA'lJWٻ[*ص@y/xR䈗=Hh]  D''1P H=:c7!W*_Qkx 2x P5xW!i3j7hQW!#ݐSroO·əOGə O=LN^= GO`{fgF>{f]ў`ό(ף@@h/ K^e`]/37vE-RZy**ïR _-ï6UJq!*q;UuRuЬu6ЬuЬ:hO:hևf]4뗀f]Ξ!w`Q+`QY`QOW_ np&hL+b1r1&0L0W(g"{> )ffn^0/W-r*YEV5j FY8ښhM40[&Y+Œݠ۠Uvɯ7`vjqXetN 3A{?coWXz g_Pvg`g _㬴5v=slesؼsN:VÝ(kX]jd`~af9V8W{x(qnul9LWԟԮިw;&}Asgܶ堋 ҩ0o5Ѯgvmëb *t[_ltl7z@ ^n@:3gs^iUF)o3Pk ?Īda/`ڟe  o;{x x20A0C`. Ac0;49Kzx SoL fkp] Q+3@tȌqvwDž_.xP<4qqu<ѽ'S-7ŋ 6ěy^s-kh|<~&>ì5ϪNO#Q0$yɰpL kMg^\ Y4'˒d0DKr*9V[ҙ\I57qsZwml%?j G5ӟHғ5mO/ҫy#|a47/_/ʗA=krz*f۰ycР-^n|uX!w;z =xI'R!g֦1seW^z"+k=\[obĦ 7@ Ҳ3M{ G+AMgIUoſnL#e< _uSKbW::E3ZO|kfvz֍1"= r$B>o4>`G8m8am|=s#8{/r<:\v=M8ڤ ИǠ[Hȿ!-GYJm\?~L7r,^OW7F@N :iXg4|$l~u2.hQg'VA*oeQbs?V6׺3R*ޯql2]w?M;7ѺAzS~tgpTC=fE{8]- j@<$K, nu+cKv<ޜx o'zUۯ Gf2poFRt\m ZT>^:4ЖE\;4~K2C59ygH}GF%}?gq y"]}='8_LG_1ތ}Rc<7V!iȳvsÆ0 egtc kHn^eBϊfb.h` ` )B?F;a6X~G7>PѲ7ݼe񚏶 KObk1>Zv]I>з_C~4FEnA=[I [77n+s.ݬ9oYO&6S95L.و12S0^?Ay0h`/XOrYie9QV?G׬Dnљ*\ۆ7oxJ釻  8w}~܏ZEȵC?v"r?)ǯ7r+bOu1?n)܃, C3w)qc3CPjo~~ N{6skïno"~j[yq3&R]Sާd#ݟaˉgO|*>FܫϺua7֡Xvh&ʙ/tL駺'ﳿ@?܍2 5O}}ͻW6$]j?O)䫐Jrq=_F G1R?z~qe\Fctַr_Ec= V}eLf}k|e, (z~;Vc'Ylݔ^@Ln0?gJ9mLeT's;\f uwPoo`%z.۹뱂ƭPj?DV߃RE.<<>y;K D</˼[{ kl'Ac o+кq Su <Gț,^_ܳ yu)֨SMU?=YOR#fNJ?7zMǽ`8XR|-&-<Wu :WZv*4W8@**QX:heK_k,l7Ef-s`9ŷlXςx$3YA+DAZK*9wx/ W{7[ bކ^"$z߶G/L Ȃ7" ވ,2 iNC~^u-b9a>}Ețc-tv:>Ǿ3gt'){ 2Couq;4,ڽ tcw6;ۂ U3bDelS؋Xj%V^|oڿ5UdUVscĘAt!C1#FHG,DD[HG#b1""1"ƈ1bDusCjok+{[U{o'z^Stp7m5Pv3nwSyvGgpCVNW }vY.}^_nqvQ׈}#-^%E;Y kcvF}zQ#5ޞQ?KGE9k#(F}WDfz@d]H-iGMp;iYQ]44摽4>őNsrzF"5>jDaDͲ(++ZD'FSoOxy=z=DgE5R^yRAY䣻v3'gjQZ/SO~]b @EW]TJw ឋp؏LŽ@;K#ΊXX鱪 Zq%ٔ>9[[[Ti}ls9w9UNi켳4vQc5r>v1b>>.RG`E F+4.^ZA6s5(Dc]UU G|宴;}ƽ{i8M?΍__rNc$ꑵ GCb'deNIRՉy4SQDSO,wZt+s ZQMWOlNltIHЊMיhN':.*q*M o">=DoO#W7#I͓dc˽>{/Uɩ-K/O.v%jľ^#˓k듛[YGNZhYtݔ<'ٻXy tZCRtcꔟJjFk~B NijfNe]{'dSZIu<*6!Hjכz4QڕY.LNOLNMq$ԙԹԅ">O suwlRiO3i][l:nM^ta8=1]WKrjg8hyiY}!ݘnJ/O7Wyf3v$һӭEt[=Owҧb݉tO7ݗH%oGdwF8 3-d3E^)T٭ٱL.Y쌬/ŗd}ΡBgjFdۭ4"ӒYYԈ}wdjfSْޘN&fvfdeded2Ǽ z33gBק_g.fr[˙+kMwR6䎣9_UY8h9M MI4oي4PvfvNvnv_DfdZ Jf&E8`afVoJ32$ЧڲH?ncNUO+23ErVxa൘OVFS8?0̤"xfi0TrЍYnF1 !f޾v'/ɨ~ w4$c6dƨK)0ɜ.e^%l0B eÑH{F/31~f#,Jؾ3`UZ52Xg$?PMU3/<`"\#yWLN2,0nsm_s'%P1yQ60<4?be1U,Ÿ֓X<\W iHTC0sb-K޳yc3_螱xu3c8vfN1h5T7XPe1=!{q- ?p(ϑ>cqweđP18:rFn]8Y }p?~eYyrwZ='9Qj>TK73*f娓ľWOF?aof_*~G|f f`eAt[X R }H|3~Ye+M^Syj u pp~ oe<{> ,:GwQRy ҼQ\EKi%qB=yjlc9* wWh6Ao&jo*cQquK_̈ba4?}*C0ax *)ȇ !fX…d/2ߩIنUrlXCK9Xth vqc+0> 6f{Cj(mq6kxA#h5$|l!q@ǚ7PC}Y1'O#zw FTnB\7܏ vxn*昞Zx.3ב3;ËFԏȠd.ॖ^Ql[ uBZ=MLa[XNWߊH#Q-1DG̽ ^_M@$K*}Hهs!yM)ۅP+U1DQe8VX Ɍh9g#tydna| 9CI"iC j=YV6);xq!fO9b qUwIqmlR]kGǯ1 vhM~s~W* x8m,ΩwMoGx0bV*B~D>ZDZg"왨@Aq&*c0W<>ih3Qqa0j<ȯ<y/d!Hjk |#ߢGbQ8T~(AcF?c.B(F(yW7xiguYwYHhe*~0cslLA{ ɗҜdTƩ'>!R!+dd CP2f CϥV<޵rjC/%Psh]zӍMGB m}8{;<4a>`37%ƋIK2xQaQikT/3&M{it}+W5715375>ajg77ڌ1CUxqe0e1h 6~kW$*VO<,֋Mr|-_-jFVΕe_Ηou^I.o -r|@.FVXM.&vTwk|\''.)[~Z{ge|L%*;*o ;yS^ޒ#*J(r*ҪT\MUTVsjSoTMLC}^ ~~~oknk^kzO#WN 5 M-mCG֏KKfgpqut:O8ǜ9ǝ;]77zWNiIs9|qw~:>G{~\q~ ;v:q9\w~p~n}[~>jvC/G'c.7ݓ)iI{w4{^^=yeZsk^'9l0&sl6י6sl5vtfy6{^c蘫t *?bBT'(j^qEDrQ%b6}jD bTR-bXO0׉MtmG5[6]Kl;^G3qH qZE,k IeIlI9\. rԪFKN3^Zsiϧf2RkB}![4ґAyXIyFsD^n%7KtyU7r8mj\$n89(FCmTmOuL>Vu2TYVvJYՃ1)SU/gRkc"z_t{\#]>b;ͥޥ4>WdHG3_z޺(2 e5sGQ/?͍͊ur.萊:lOOTNQAԆ^Fާ2doеڏΧAk v>Dn;"i0i^;iJ;rSh-f _ىB̶a qcZSHH߇4 Z E(:2?ːΠ<[YZ*&& 95c-lU?h?c?!4bwZx% 7PO NoygC6eQ~ Yٱv,Sh:T-,ܷٴ0!llZk GmZ@y83t>wM_YRxPFz>FmZA{X0O^yRK;8jj y!"+HsW#d@FE-&\o!q]㭐͐|y8O3Y3 rGgL|I38[l +N swp?6^Gc,EBFXO#+E08ꥐ(IZ;!@~-ˑ~$Vu HOUޅ } -PHSMCkkڕ_JcEƶ`ŁƻH5Bc+9hоG0O#@η2WH_ZROI847_ ? wυχ{{?6O̟?3nB}bh7~1@n ~LɌ,ϑϕϓϗ/#_(_$_,_"/JNSTz.=y_?Qڒ?[?<Hi˟Avt!үHgm&ma8!Avs$Xf=[fS>k=-uZ7*ՠ갛bknZ&Sہ]~M%7Iwm!MMtN}'Ǔu𐬠4s)n9B}!tpW/i߭reЦrJRntQoX;笝V\M}+ bFWPR E\3d̑Aґɠ3(_NޭPP5FkZJ汙zܪYCוqQ5@oVדV~tUɩ]b }ojS=j`6˭C#ӛi|΋ZUݬPK˥uR.XGz8Yqs"=JԚ!s*HjݿzPfs3嵙7*9fb:aklq2iRGbՋl!еV?Nzrc2k(6`vӼV=bN{!08x_;-yTjn͗.1{2&`RcNUfk8$OMy_e֓0bVu1k[ h &tUH :^HdnYfemqN<Lո4H!ȕ/zُ7F4dC>kL6˕p"0f·ČW&Of [:<i-ݩ76Qv9J= "G|T}ŘƄ1kdXZ X#9h _`2 턹;i4+ ruHCבǘoAHʜ#3Wu,㡼nx}2tW41bQXFrBfFy dTӝy'c sEi&蜯AFNCܘ>@9V|{p"֪>3@̺c#(׏+ׅOǟY⧓>]B_ZE2k IۼjVFh&HV*CSa{@q,OنYKKҰxJhֺRI.$qQ]?~E;ը|:O_QըQJ6R^XQaIW#"nuE]&h{ K^ݧ=6quKfͺ{]=9l֑נu=璦wC{Y /z 9+\ {~]BK C:Vvh8-׫z8O5ys`C5{ 9ڂ}ĶL`YY__ ǽWR~WK _a,lh6 v`{1I>A-i~l0O_DX7g}|ŏcγ}A~Dk*x#Jֽ(c ;`P|d?{ƵH3J-Kq7kiɱ/Ga&9{h7 q]WWas`FaZ;C+̚A={ٳΖ3cʾgHHU$`J9A7Z~9s@`3P&|UAod*5Y,s\=s2뻀ΗX餿ՍzlQk/@`FcM?FbB+OQ9mR3;{8deS˦WǦNe 2 9eyB&9(GQT^1kT(ӺkSճwr.^u[ IXZK"Gpɸ5 55 9Ni41IruVF9٬u<]s[o5G;%pI =CU[f{fPwYUn,洫b:N'=zT;]4Gs4tfҿ95gHj6wlNtiשj;fUCsJ5>[gfvg^w=?4^=ݢ*gw1;ͮ,'W/hw]t^Aϻ*;I97ܧK+JԐjJOmMqʶx4zLgxU7YXi Sٹ|e~oY7E[bTLz+ifUnSiOo3[4^I#Es;8+"uV[8O5x'i.TQ ,I[9֨j椿 ztV7λe:eι}4#i>j~zgRk3~'Z-~_دTCNVS=>,gٚޟ7ϯs[~݇wnIv:H_7̋)>oC޺Iw~}}t^IrNF7{^&5߽7:ߐ~3~ wFK4wd{d NgQH*oDjO2f·gҨWZ&őwG[J";#{"%ϻ9@#oil,^c+dw"ȪF{>4V4*ӬOBL(k˺,3LrIfe4ٮ|x6~5mpTp=!Wp} pP&bo54!K`5Ӑs ?v!߄Hw5QdעA9-_ p鵐[ o@HQHx9;mxiAs}kT vUwCLd=uuOohZn7 xB®Q -qcbG ,=y-m Cj3 xשZ=Hpݛ6w5򧐟d6G jNZ== E9{@ރ_!߅0|Atm>׎@r< Kw[Ū ay3 x~OV+f g^аyOY` B6x?=bZ30e >ms$x6 9*Gz$v0k!kJMq 5q[AjLduEy_J9Hx_,cxNG-Xi9 +VZ!p"dž| X*VE W`=iYQuY^[ ZS oF6$M.q?`΃dJQڌa||c) l 1gﶇH /3a` ڈ]yV᝖#l=l^Wf恀7口ad{>4%X8 {k!mpzGč91K2+潔a23w|mY+]5ƣ.`pd Fhf`l7ڢXyAQ &2R\fҰJ܉-*|.]&LLtYqٽvf0ܑg`LŚs3sbtcf0?x8\o(y y(y/J]XOLGi`'9S~GdKd*4N͍nKOMN-eU+`ͩGdk0h73KՙݔiwFeָ33" 2[vX8>7sٔ9Bg>9 h`d_Pd6Ls٤&;]d'1ovfv[AO".ΉiOvQvIvYveDeWe&dfoGdz'n`Mʞ#{.{!{)~!oOtVЕind[FΉь(H'SPXP)XPVPL).*.0 ҝM˓K Ӎ l/l.V`wAkAO% : :ӧ F9)^ =yX+~K^b[)-,33ԇ2z9ό2. 'OεzHeu>i}*@Qeq,kzci&<\uyFqTDTlaFA\3Q+Q>Rq%E[l ]G-9'_̤'1FI䇿"6b2j j9Vr+$x*X `<01WY\زed&|Z6V̟7¨rrfb~3'.|5g a 0u&ΌaR_@Ia$%J~O06Gy,X$F x_0oDVff`6 .ܓձb]H ]0*"-]}0jE-`=XX7fd. 6|Dzl~Ư jX`Q 0A4l|&G1%‚H)[-3'1 6>c{_S5=c>y>$I2󔐄cv̒$$U IB(T$$Iƒ$I*I:gmo}ߵk~5=ϳg*Hw)M(O}06w{zAgqۍ]qu\߮Yvd\nNu͛rs)xԣN%bS{,~;kuhӭrz^n\vdc%4}1u+ @ J%SNsqs9H@s/,jrVz-(O!7ҥg~pnnWV=E'['5sR꦳[ᬽ d0 vRq2X֥/Ҍ\Mm::5drv8p ]w#.g]tMn%h7UA܁L-^+rd}3n1YUr^ n0']O)МJk8Bۆγ>BH%3e%w#9+)Muפ8S\h Kǻ=*'$)FL\ lS}j?X洦 hgWrhDKIuYhڍgϓ%XWޔPt58K:j%l ]T76frc} Oڍ8iꝦ%6pީ?r#nWf7F/V٘q"~bTFÝxµnN2F\jwt>vd]N-jBOQ,T@_H؝vFti΋R:UStVe_ֳ,KgٛrDM|ur9헡(J8\w;04\=rC;mInmo4vsmv&P|.Wųꤓyo^ ^(ײ>64lϵ[W췊/߶+X׶e]W4a=/Jwl!l篸w=k¡F9:xFN Ր i9H쁾sPJ7@y(  P Ü@ PoomG5^|$ZOi2H59i:B~vTg~N;*kֲzrՃvb{ӐV{ij(%,AT 3枵m11H`=>ݬؾƱ(kgҷR]6s-!p[4r\Ϥ|UfmJ~ s{VD"SY1%dTJdeTMUUuP *g6?L(}?1 ]{ ub~EӠ;[2vw->X*<nd[v<]lۏgbv­ tc>a\>sc\Ĝ:ӕey4FxvJ[n{UӖ@\Zq~*-/#C҈ Rs 63OFzJqD/<a-M:{|Q>OqPGg8!NSi|V>'W%AG1B~)O3Q$i RYUʡr<*AWUaUTW%UiUVW FuYݢnUl35|ykng]Pl -o,+*Wk~Ӛu`w?fc}l:DVmZ6/ȺkӴ MȎ2c8j@XMe6#iQdi  jF-Awr`beY5V5FUXo6Ql< 0%ܬ+ʱYք5g;Xw̆lf*$> G'J8+[01p1J— LS%<@xis eV[v'cr"Ts.$\JnIr ?#kޟ':*鿗N'gM[%}zB 9W~l ?"W: ]du)Pԫcٲ{ι; t 5{6=ՉBbrXVl'f!JRRT)CY>KfOQ3)ٛDm4j/)G;r+qtgx'+3̵;6Q^ k`A"OzvS9_?6IiVuPj\/fu1QS)mחE@B Y oWX+b-F`A@k-F1f V Kbb.X' 6Ŕ`sZ3.1+8ߋ[""#HHk!-XHbakX)GzGzoFK{{Ċ^2/O</VEDXX]Y WmI }oEҮz-LĶ0k GB[^23h[R`-)Ŗx͖jK x3|@3hSo)߳)<<ra[D٦Sbx9sV\JpֆJ1岆I j/Jv%` l3^co cvq7Ef;:<&cuXN1a]BA(XCE^[ ա[u1 ͠{ ZA+BeAwA_Ύ0UyU=sޑ'^>P{(q|]|d!?Q_!? yE!QDQQeD(2"@MM Ͳ&eO*{$G_ n5^T=֩jfY𦚣65W͇2*TշpXg <ί ܺ.t1]ץt^HWUy]]W牺+N;.&U=!Hy/}X)5H;Xh6_h|LS/5M+Ѵ1a0μn %K=U{^c1߻~7YOSd?ܿOʹrD>*#r\>្i* ABO 䚠PPD JȗRAy!H kAǠt ׃ I zmAߠ|; ;a0>֮(On-j LlQP3v(Y{Xf9`4+ʉOSYIn`y4ˇ&A QparՈ]94TjX[@ 0lmrXQى N ;}GYxf%y"֣Zo;G|6K]x/>c >/K*2֢|7 ?Sq"ȏuH'/ )"^ZSVTE=LE,{d1]O%bX{y bX#6╝bJrS✸(9CGe%YM֑MdIvdrd+V"9["oZ-t7vr7E&wsd["Z]t7c]nGnrDNk݂)!#{"؎#O'n wKSr_lcDw!9D5r8HHѐc!}}u<닐/CNt}u*됮oB΄t}u6뻐C~1|HO!]W#'D9琮!]t] 5+e.ߢrG_T8UvtE+;+qtEhfvtE8Y]l!]TkQtE;9]ќh.GW4+7+!+_HW!]B tq-W,xH_!}Bʄt *U>+o! \&*tU !rH׍!]7tU 9ZH-!]tU+vHWݐz!]C0QH_㐾&!}MC*DWu5lc;R%o"Wx³<mX Ab"ldžn1R=تc85>j{6K N.siM1Lgq :Nl]]&$l){^#~G ,_Tls$l:gb'(,CT{бX Qc3xW2rp֐XV̅}bE_TQ b%#scbr1i4qJbX/GY+ꋆ1rh{ԻZ>ǚZZuK5DS\m3W)FfV6a7_D55R1j1j1jm!]1'ƘE &L#5㘇o0-YXv}>a_kMowٯױ-u;u+~c_ů!`@b 3d !;䀜 rC CY UB1(%:LY($&S p#T*܌- 5&Ԃ(ՅzP@Ch>sC hNkB; :Twt; ܅O7^C2jAa !(0#P' P10x$ ϣ?'JtQ<@nJ}CP‡(ݍ2(>߃ơD8Od < ..y ?#<@DPꋡ,IdYDV e(DnGE0ʉDAU"(:()JXr tT6e RQk+d{y ;w,]](ve!{4[}e?_&r `9Tar!Ge^7UIo[kz~][z~[]KwzP}cx>c3>'XձeI_?}ISua GKe4_j_8d6YLVě&ir&fM!S1EM1Sܔ0%M)Sڔ1eM9ST0dn@FSdM5snn55LMS6uL]S7 LC46MLS47-LKʴFign3h:;Lgsb2]M7$e3 23ԤafkL>6}L_7G17_Xќ4_Sks|cx{ǽ/ޗI+w;}y{?x?z罟 >/}k~̏3,~V?s<~^?K~_/Woo7Uj-~uV_˯7~o[6~[޿w;w]~FP3uzAA0h4MfAE2hmvmAꪝ;A.Qgkwu~A ց`p0$:< F{{1`\0>MxLdLtļĢX~)9\?lj߲pgk2Ƨgk)/ONuz^oQoNx1*z]O}^7GEcDSXX>d2\UevEyY^[(u+G*jX-րF߁5󾡑x (e~Et&#~mB~]~=ą~S o;V/!+XK[8\a!,ě6&Mh ~f/q1뿗][m6gNf;r I=\g9uyw£ȡ2!o+]n۸(yj+H'A(x+#,} %2/#1?ɟgG9\ro W$>X&~_/Ol"+v+b o"v"edةOq,x@~Yۭavl'vȃ%Nt `cy-^ y+6,ޞwnqē=?2l>(RQ}@~h5FƩqੋ*|4 2iȦ:Yt5 ucn[@SJȿBk_:x^WbFef+=f `ƙL4ZN.a36v|h~A `W%C^+y[o+o&/us0%FEEѳы|qR4?WĎcc+ _zQ`r|PNr%#r|TΕyor|\>! Sr\$}0La:<3`&̂a6<sQ <̇ x 1^L$1Y'TtmxPLG:th+c[V[m/؍^4e7!>U(><*QLa&0dS[▕raxY^gAgaךz{Ufg0 s37 ! ) *"!^1ETTR妠") / yˌ|=;GSy?}׬Zk> gΦ6ކۮ6^/TOzQ ^׳Xj0ލ 2dGP&R^JKE-h9%ݳnL9\xGτüÔDy?R=c!'+ȷS]LzՋ  5FLMY5@Fe+*5tc*z+ }YHW"ңz07xߋyx'(+ wqϣpk%ooz@Ms~wݔ/?J[5i~l?迢a{#/u-IWZʥ;`* gmgpoUFK,`KcSo6'YѸPLO=nw_<~u:Dj#Q "Ox> y6jq?zƇ{ kv⺹n8SO}L6NrߤstT4t L,nw P&o>!Odod_ t$08 =ĕ {|S;p_Ƒ dRRYe.[U~޽d)tlYl,W/[-+UȶvʪddGeS3fY슬MvSvWΖ"L{UxyC>G@TB^,_+ "WkuyI~^~I~M~C~[~_QR_R)!ኑE"U1M1[XU?| ޷7*#[;oLM7{ߢx4dx_Q BUZ0e2R9@9D9\9RLT*)g+˕RerrrrAyF٢TRReT9TnUWUOUj*F*^JUMSVerUժ2UjjJu@u\ՠ:jQ]Rn)5Wjڪvu`uUxu:M=K^^.T՛ջ{Շ 3fuM}S}WCi?T56M&L魉 jFi4IT4M&WS)Քk6kkh55:)YM枖hZVj]Z6B_;X}U;F;^M.hkeJmE{A{U{]{K{Ou"Lu6].L륋 Fu]n.S[[+֭UvNNZttWu7tu@/+zUһ]=!X}>E/-J}F_o7W l 2 j`3 ^HQrfF Ca!ӐmXjXa(66* UC:)YCទmEFQm4m`c1i`bni7&SY,cqqܸŸӸxxxxxb`jnegb&IfR&)f 72EFMSi)ӔmZjZa*65m0m1UM5:Sdj5]505Ԭ66s9ne40174Ǜ)t,s9ۼԼ\l^k0o71077Ϙ[̗m[{oYdhY-apK/Keeee%ޒhI[fY2-ٖbZKeRc4X-MKkۖVU`XVluXC=QցaX(k5ɚjfmͲ.Z󭫭e VNkzzlm^YoYqDA }-($kPAÂbF%%M 8(7(?huPyЖA{jN5t-F6M`6lsBlm=lmQaX([-ɖjfm˲VVm[l;m{m5:[d;odfamov]av=aoljcoOgsR{}}}}~~~~~v"̡v6G#1111ޑHspq,p8V8 k=Gq뤌NST8N3ur&8F4g3Y\pnwqV;kugyyyyyyq \¥u]W+55Jp%R]\]YŮ\WkUrpuջNθ]+6MTnYh$^ 'G:_O@ "ÁZs x [wq #Pgc=C#ȇF>~ ~uh'H#7RAf#4C$!S՛ǩ]^+% eL~Z#j9}BCDI;J{y$z%!OIv3q^ϥ r/*]] (PCHV!**9\IlhÜaP=ʤBK5`S&%:ؘ ,чdS[bʇJa'+$&]KaI\+%ҙd5jy#rd{mdt-Zy@]tf|y}N&rƧoYXlWdX5KJEd4"\L"ӈ.As0Sb"$Jd,2efN{;;hr/ }SCY I|/*ZD*@Mj q?HN a҅=-/E/E+l+d1ZUW^.E&^RZ*%4^%`$I52j K2F KC~%Bzwy ȍ,F8/crcH6r}-----:$$72\K/{A2+- +- |ڗ @yA{\GG>ݞ8-.!2f!wdF xRX$A2X^,I!+^Zt, !OeYJ&2hEX d.QFф T^*&3Ou+^_ KѠZ1tu=׸ w`C-]@.ft-dwX \ ,ˁ"*d-^Z,eʵLYƔLYΔoh, @~fț!oFoheF+3Zߌf-顙顙顙顙顙顙顙顙=tЁ:Cz@ |p3d|\ .hp mQۉr` @b+Xz=@zC?>#q3=`!x?D|A?A h %ȿhh-]| X $E÷h     m mXf>2)O|eS,3b̧Xf>2)O /%_K /%6Mw3f̸;qw0D!}HD}"O;~'A> IOB* * 6iHMb3g$IL?~&y'~X\\ $~$d w2N;LLfK2`1~i iiНiА Otv:Nwәwb d:<O2-2-2-2-2-2-`( f21`( f21c1FxQ<(cOALTʔk) )70e쥓k2`Xb%2Z,c,g L鵗 {ٰ {ٰ {ٰ {ٰay{ƞay{ƞW {ŰW {ŰW {ŰW {Ÿ6;wo X|S]$aV`9j O#^ķuA#g3rso3=_~aJ|O~Hh'lGZ1CV|@2k3~@QT9ðZ6m/]v";NcOχCt_?AnCڿPiǎsg̏Վb)/`gXԶfU>u|V}~Hq|VWVDk6{.<~+jɈ}{omz⧹tx{[_>Tl˜=R5Ci?`Ģs^}y_Y~ޠmJ@{+N_9I>Cw:w;G+3gMN#`qs.X/~Yj___xszҋI*}rJk} Xf|鈴sDGv!Y]]2vWTqG3K1tҭȔY:zXTLG|(vgE efILOOѩشI)dIRߘHR&'L>ӣa$A'e-];𳛝ݓ10}20.ќ qdT:},mٳ3Jv 17[CI"?Kөug>j\y7t|-~vǶG+)qߜwC>czXJvG=jɝmN*_ 7V&:9gtL]}uL/s꘹rv_S&LOOD^xp5xgn|yW?g1b_eW˫5/o-U5•țk+Ny~^ t3ZF')sU숨dٝͿc;xӫ؜Zpۼ'qRhd3CCus飳w1;SjoW}{>n==L*޾qücSѼ鿎e -gD֋ ?-s zm ߏ#ZKrMݙXO| 7n޶L:(*)LհWs !g~kN9dgs>Ӊ;ڏq¥AԯGׇnH yǚ\}0ymg^1f4VŰF-KLvw粦[z6š~ͥ#]nr^.< S$vү}:T¶dJCP; JOe9ldzƥ3>?5=qrdmwwswv{Búx$Q G|A}ߞ5w[?jeȶo7}>p[#˘ ۋGmMW2_[.__rǺh͍2./]<-ԨNUFpT$9*2EGT}kK/GE^swΙ>+Iv]?5xs _p (`?oֺ?<>kn!%qGQ%jю1>x>tɒor}{N%;Y ciw>Mnۇ.[2lO=/sIr+-˔f=^t1(;At+6!>=$3)(۸m؛q!ދ ~e}ʞ~?N-. B~jt%E9GFDv]ۦk9tkGHM x@;U!F?l Y[G v;+{7>uV[wo-W\,×op;-!e5qޅBZS!H+Z߽tBcCEWG>(~\+OvdivHk_w5 rUaԻ~}DFct]oƸ2&Yo=?aN,>9t5[l5x%' Y/޹7lNR5؛mZÖjTYVP.ALSZ{(uZT:fg2\_:犖Uk{L?Ϟof:XugGҳKOە>~ץCZN߿FH~Sutqwe]3b5>_řy8g4dM4~3!KYfOcidbp,%[kfif8%keQ} Rr PGEnX^g Vwqwf*OJg)N;ZyȮ*.H<$=8Ye ;cҩ}g7P׮ 2.zDNz_SPi V 9,-?Ί/,b4i"#E8|*znC;x{ y()jPPuG~I3;X1`DPʵ0LXv1Bl@4uE8t0u: YK?ve*7KVy\ywlxbkĵ%Z@97Q6y\j^*M,-5.yfrs6ձjgu#;qP2hLv{^+\^%tJsZU)%HԾî͘lǗ%^cuEF/t P /r:حL9>ӹ&)htgyʁK`JB.u,DaRRiL=5N=?b ^q': ro}@h; d痱l~ˈyG䥎@o QtbAJH' \Љ Z5Scs|kdT(.!W-my/uAM\(;1-ޠ$iDkƊ?y'Y'QhINcjDbm܂񁡏ZU8WtyF>zjƧ=+Yk:pAt\|;#c ڝYv52`4qVTwVM:ZT9;sZ N\&uUXBD_dH @YXR׷[*a}gs"x]wFg٭skR`k+ax6r0ԚeضaPCa a0%^bI dں輙DomCp`3"SDRVk6Y+(&F˟FY-aͳF{̣3ޙp6E|lK 4B,B?)M.ڻǘ8۽6zl] 2s7mn/P;us'A&6sL<A nDIfkqCZju 9=ׯLh c,u^wǦ6W 45et8kX'_vOhB8id0{o#`aFh~7#:۶tD$Vy642PTTT*_E$0Wi8 V (~f 2mĊJ2=a@ i1$FDד=rZG6b"xDktq#歠xiB xpGo0! Jnj|{fV%{6?Ӱx %6n DlwKB!YXm ˺/(*u{{yyZNV($M$"$9-.]?W% e_! N?tlyB$0H"OX􎱊^k#V{ Mkc~? endstream endobj 73 0 obj [ 226 0 0 0 0 0 0 0 0 0 0 0 250 306 252 0 507 507 507 507 507 507 507 507 507 507 0 0 0 0 0 0 0 0 0 533 0 0 459 0 0 252 0 0 0 855 0 0 517 0 0 459 487 0 0 0 0 0 0 0 0 0 0 0 0 479 525 423 525 498 305 471 525 230 0 0 230 799 525 527 525 0 349 391 335 525 452 0 0 453 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 834] endobj 74 0 obj <> stream x}|T{w7n $YnXJ = =$ 5! ED: E@(>{G$`C>lObC!ܳIΙ3̽3wD&/)j\M`X~鼪+HLV0ltCkE/:U+UY;>с/.v{-?Y7kDu2fU.;}V튙mx;ޮ]SY~E}pضv׻γ-^(HA4gܚKH']PUk9IU.˴G=fqnZT|y57<0c-XI?[XS7Sj;.9ɹ ֍Ӧ >@IVv+FѲq?~;k,d! YB,d! YB,d! YB,d! YBvbk{ d!M%)р0İcyl)uLHyTHE4S)͡:ZJ+hE[v^)R Ivw{g2% 9ԃ(J9ɱ}6rrFhyeo'-051J;=Ckg|uDJkYC06h6//ԯ}BQDdQt$1U,KRJ\ .ŵb-&)d5"L(-2D.r(p_BY /Nn/+=& }~8bt3+9O؍_̈my1jqmanbfhc5FI.^=}Y3kgL6uIeҒ Ǎ3zȢ 9u) /+gi=\{-2"f1tMPOa۟^7{F)˞J8*8*n +0ё^D<&ˑHaw={ 5FFyj"zƈHH(WO]:DBZ0Q#M^֯TV;SS <=G.t7pQfTdDU{+J4j n|3?JĐk=< z7={q2豤rӄz }C1Tٗ 4}q4 oVF_5UMOԫTy *Kg'g{iFۯW̨-VZCx+c-hB|e1GNCq?S 8))3TQl*ȗr4Tse.OqNӲԇR쇿]nJzACYLYs̙c=e5.yn{qTF+h,GfuiN\-8܅  ;nQwt`wp UR=-oeӼTt9omGk:'GusQI*oUa§!w12O܃g;LMεqGxFO*3v))=9\S*UA3XT(7ʭTjWCCu#iQv6 C.,(gdxRe?{hRTjiEj!;Oa/† ^oC]AAX OI` egk(1tRi4#/nK&/- hB˫Vue;x^MzSܲ 3M@j;wzZ0U͂ UU5kҍ y.j6qWEೲ˚] l$'aZ(ͦaJ+.Ć j6lD Y7{;LVz.$x##M*k"7>1Lx>)pWoe솊r{P;<~B~3=D#<5aҟ+H|NfMƒ+ך.S[ZJRs/OZL*gfNpWU~L K+*ǺT RG`DmzC*p.JFmlA4 tt,TwuB{ D 67OQ%,l:8X(`Z&!0Y9œBq7Aa4.QԺ,㩓]6;V46#jUepڂW8*%օÃDr8rw,5Չv9S)_y<'GN*N^L3+k%J(QbJWbch%F)1R"%F(1\B% W"OaJ U«DC8UJ %*%+OJQV"KL%z*C %+MJtQ"]4%:+QJp)Q%:(T"Y$%hD;%W"NX%JؕQ"Z QJD*DV%”(aV¤PB(qXCJOJTJߔAJ|wJ|7J|WJ|~%Ps%gJ|_DH@}JU}%S]%;J[JJkJ+JKJ J`Ǵgz29-.Fi'^cz0Ӌ|Yg?1='`zic(a0= ;`iNf3mcj &L2ôi f_8˝LwpL1G[nft't=]t-5LWst%LseLrFK.ftG^ȥ gZϴ.P ZH:iM a&\s >P} 8;i7_b:3P Z͗3-cZʴi1"NTH-d9rS-\әpLg3y S5GV1`d`4={6i2z. 1ݝqR LŁx/h| ^^a\ ^>ck@c=A9d@<K#0T_ğ ׃b ACLLCxS48(4(@c8h@QpL㺾L}+8b= =28Ywn+StCRg&9S9:rLNd}*(1`jOcJ`gcn`gg S4)##92LV0& G9NIcLm8S:S' w~o{E7( || sπODr}=!wQ3m-M\^j]]/Cdp<{6 ~vIٮm\{1{xCQgZ?jkWbN}vmC]|FpykkJזU͑]wwwwEt #p 9u7C_\"5u5|WWW@KocX%\GrmuQz<=ǵF\;۷ʷz*_*ʹjԪVm^*o%bLY--߼̷K[G3LK,^Dl^"%B%%%zbBߢ }pS .hhnݴٱ]f/<÷Wyoy99|7̩lUUTLM<7%goI2iSm.&l. QћGFmS+੃n=!::vwv1ɮd[L$$tIBM֣0 oU{S}Bjgon'ȱSZhpn>s~X]<1 "&| ֑.Bt+bWg&!6Riƨf+M巎J䧷xr|&5 qq; xK%Fy 2l?,oڔ2|^j-RB3-Z({*9:v _k11"&%FƠ1ѮhM~D^ cl.&?Zlz; 9.QK c"]/7r\+F.88cڢ7Jb,fH^e(SI@+⓷݁}ڢG\8X Vgg+2`)X ,|`P NYL@%PLS)d`PP b`<0 F@0@> ^  N`^@6d=@t@T @ p@ @<р " a0- QO???~___/ρ>>>>>{w?oooo////O]NlM@h=V`   #p p3   p)\\4uZZ/ֿX_` /ֿX_` /ֿX`=@`=@`=@`=@`!{ { { _` /־Xk_` }/}-Z`&-q4" eG(tZDZG2zޡD]GOƯ?-^aGQPQom<gr[2".]a̫63sQXtV*-Ьn2t[V C)fwНXwfڂ#bwO&چ;yf@g'!zEP |=MiX3'SmjeYˏ)Jq܂.OD E>x>هoi5/c)KWf=@6R }{B~gC8hJBycLmGrrgG?Q,zn ۀy=uwY}WlQ<;j #Wz H|Yg MFvrHu-NZ.=D7)Z3|}Qg&BICm'wbsxŬuH98^29mpfJfְuU[0GJBX56]B#;ߚ3tn9eJngfX;&&u?%hbLgw:O9.!!sC*[6E;bYo@d4|dc_7E/ )~DE.zJLԏEfcD܆WK}L~cjbjMKo=ƕ35M³?ע%~Of=->f- 9Q/g~1%Wtv VnFZ{;c Umҭ"la0[^k;9S[{fw&9>0Ņ'-Xr;rۏko{)8z ];e1&>,,2x: 'w\ om(Ƨ&>'OJ&[d^Z2pw벗^{Ő!-;}VVDfbbr&nrɸYގ{EEE$ec#"9"jMܿ82-+Wյc͍m?c}58ގ>VxjV>>r͑x$QSѺT]稛.竽#SgɰƻڧY}ȄAR;.s;sbXf"]IbqQGfxOE&l8״o9*;vO KI-WȓdΖ[n N%8[䴷w9Osb)nԥ_[!GZhX<")8y՘V{ck  ]?c)ot˝EһlRc=Y$t3gnO9mj;~Ylv k;eiN}]W޲_2R*ge' mt[] A2ؘZoFoo\c:;ʙ(:C8ܥOfX|_?Ge/H{_#h7Xn@Cn%EF36w 1վ.^N9O|,Wl)i#Y5viwy2qll2uF0=2MXsͳIG},˲dI^M&ɲv;$^ ;$4, r[hr;t.#hYәHvA ]'Y } 'v/ϜiZ*'pl9 e|RТ;( JI嘀R"_= ~j;$N1 xK1?VOzl )3n<(;Ctd,pԇ>P(9퍢!,BhӸ%f~P6me~ǽg(B瘹"$FPCC [ZqĹ(#=oh z<d(owTI)!g%7t*+巤 )R rM )$wUdpo_rt'ڰyl1a|`7!ʭ?45сW{ eD!F7 6#,3K'c >9R>7Xi'I.#ޞX?Sz_M߱AoE?TakW<02 GUI:c'hge(hAp~J"$O9 :Aj曈&'\H#kjp=yg.דllaE˃lnhCl:X=v]s~E .+b.StD8VBJU"N!QP/Y"+\ >5 ;Q~uczpG{8 ;Ms_2B@5^ֹu`Pl@9@lx<\*uAYp/Aɕ,!^@hi9M68)(Li ZԒ4ci, ]'d>l-z2>.0MtQ1QgM7c5,8M}ȢVXxG܎/!ʃ̀\Tݕ% ciI?8Cee;,"vy=񝼆n8#c %}>9w At9ָIKƷ ^Ls\Rp-m-Mݥ _ܞjq{_F7]!|G o_K @n=]q" ¤K?z1HLUikhH)p/; ]̽4J[DA Kb"qx \ߌdi0 t9 ~z8G#]*/xQW\zU: ) Փ tnZc$ ۆw`gYWEޔ ͳQtg72a)[ R&`@- Ǿp!c2_%A4G&[K/Q:]+%+ ZX\Z:hf] ,)=UO3MFrY;^^W^7q5vƦH*av١z.!F[*z?gL?7EA:巩~:,sP yOv'Aưse$)@ZC ;|郝weOzMN>s%*16AFnP=׺qGs x2_ _^hT%2R?{ =2rO<[BX*OXbpgoapr%`J+k0pReVEpir:BMLQ] TDB!?F*t"Ndu"x`gdl}?iL\xr"LDmZ]ܦMԖC&^JK]cPܐߴuS4hmvFC/upG0 'dwÌѢ0lIG1T ؗkGނQ4)D'mt,/Xr+^=V*Z)XC] x.jpKF,|9x78d$d9fζ BN/DZrx䑧c;]hkztt:#ѹƿ;ےsI, G{A^6I,T=ȑR())WAF"iҷ-2%̫mFprUoV*pߌAđ*\sfvN,|//;]zy,ߺ.޺E,@%zD?p>7+UK F\Z/HbR[1\.1Gf%RSJS e t3*,Rc5MRs ~dӳXIϤp,R=gpF^^/xbb|7+*=[S0BQSRnSgY8 hd1/n7ƢekI)XwE8~!fL'2y##L9 cY]F{GiMk`Bw|j^Ƶ= ]fB,V(6er|Oiȥ6dKmqX}];֝5E3xo?q_`XLyZ[ _pkFRo9"Z8]PX0heADEOSJ'D("LiY4w^ܩ"x.aJM< nbQ`8hDAə"\HvX@ʵBnǗ&06dفPV ڭOߓ7KV"jG 5G~p.m}or||s M@n֌ !՗y?/_ ?^߄'2U\Y+o5کTYe$ 02Ǧ8IKY #fu&-r "d\EեkO3*^Q\r"94\sϞ#f*աd:23/Fi 8كOzOt0VY3kC.OG&#OspRVtv+"0= ogOBy:)/3#D-R>zbm줷*Y"2P%3I~?5kXL4\ս) yuJLPh,^ k ;d\%9dMH|APa&CHu[+Cy S3)o>8 AN"&l(ҕ2MZG@Ͳ_^chЙMh*ɖD=D.![? Rg*Ur9.N>cc*,;{mi5޲IDUJ޳D?-`w`/,ۿsFPhQ 1+Ov%G~}ptcc 'eUWXu*:WPR Qk(*L0ρU=#Yfk,-J\\fU2ۢÒ2 .3`m9`4+F{+c'6ըo|x|cWa0L~A"IZe%lsZKI~K7\hqƥ"BPڪF"8t#1D%[waq8LKeRʬuzJ9ڻ2]hфJk5 ̤M msƂX1L.!Hy4LX+ b"x @YH o2''Ol&sIհ: nq\tʄ%\TsXt2$(2T H䣴Ʈ+gKxhzHֻ`~@|tes!o>rbǾrv Hw H8`v,[kɴ,:tnڡ4Y((@Dx?x-3 WHQ| xWQPOOg( ({`6բPIߴ$w{n]w.AV'^ˀ_oQjReڹbuS ]壓hvv0iIeÞwni̮EM޾kK g VYJZ!uû\+DGAľ#"6f㉜7\@!^8sीܒP"\l]+$SV"+xǢjE"sUݼe\Q mpm[uN"s03t'@^uÉFΤIRsr} ibj}JBg(Hj ;"D} -۲w502ȱlJtd 9gol/R%)%HP=D y![inh8+ +:, cdH#b񧓴#aq;H$Zx{m\(ᕊ8:emKM*5n+.\, v|q{FHzB}'ۮEgI(ϒk]UۦS4M$26ҷV{ {رǠO.nt i]\?@mϺu£r3G +,m, 2rYڇEtVeKE$$_B!~skYxjW>YxAxDV\ܬ~b\>MyV5/Xug}(o~MLŨ:d) J"ȇhLĐɀi@Ҩ$^ RbpYWX>uΎWюeJz֙-j+]GWK):: 3cG-q?FkWbd)?^)gr>c.K1oR&BJI ގ$e)tV7/GF_*-{?wwܧTױ4g1n 3 ~gbvc"$p&VpoNga K7X΅־p-XJ`~: +Ch>71,d^1vUO bN zXR>+ʃqrB;4zd!CNG$Bg(^G M& 5`h'hz#E*>l<)YIT.!$ӵkA9.5L5V-<%k?iC[(uo+E}dy0u}dIv5`=/sL/_r`}e68Yfx}2[qE$'Zb\G=5b:+5̄trKpPiT*"dJZk :JX z #\&t-v#ҷɠnZ|Pt26ӕ3yGd,ЪXSP.% :\ +bg p -7ǍC1W6NrJ1Kvj[,ֹq(HG.y |~\}\T#Ѫ,##@;ܷ恀(e,5#3i]c9܉EpRB+bqç ,qWX]M0ƎO +PD}bIbRssd,(Baz8[HۍѲ=_ecA P@[DB5jfh+[-p ̢Q̼a"+gybZ2L~7K $Dk9IDgxkկQRYٸJmW4pUJWeSBeTRq`hBiE>uw[שЖ-JV#uzbJ+ ݉5EB޽M5B5wĦ tP ZL, kf~~eZ(h&p'Y:XUB#)#ӵtT/~MʸrY"х)Wc<,>bZ@_mp8 2"Skz}_Llo"R3\\y?3Fm4ftx)̜,fWz*Z4bq2IӰ͠3Y%xM6RbM$ĤMrPiö6B#|s/ŕ#TkVWi?"B*a,|÷Ķݛ_b% 4b˟rw)wFSM1B4>=;l󹡹nO60jFBFx6vt/o d7.*x*n6XqZhk{X:CO#ލ擀}TuO8B4T*,g'ulm0ѽIznx9+qj*d]80*kΌShOJY_Id~J~`8ѭyEs:aDئ$(1Lwg|>$LPj(֠T3z,:k\i.|kRLZ3N Ԇ`,=Xc=X;ڙ^ʨY#̯<9_Ù&9ddX.u֣hџr1~I-xf枬DQFVȨc4W&c+2C\LBIM/Զ_QQ 3`;b߈oG)#/'"2ek|؃1'M D̕g f, ~~D3k',S,wsuBw_)]CG{JdAp&\N`IߠNk5WJl1JB huEZ}܂3r-}Z6 D/TZ;QIJi1 \2ߋcxٚoV4Ng[reȹ`wz-\[;[ӡLH@{3Pяz!zݹh`TuJݦB_xB(ڕvb;TAؕÙ9jl{#$R:1QaclkL7l7:q&::O|nе~'ַ5S_Ph=AZWsZxR[r'd""$ߟ!a,ZuARPa%9! Fl9ܺJUA}ct0A]y)µ0^<ă <(4^Oaw !N^Ncw,8y:!pdL{!Pzz(W\q~Z /uZ^ Ns˰Sв*-Xu. sǟdqJennI^{[fHaW?<:{-^ ޑNM.ޞNm= wr%=!zZdx[ 8(#CAQ2f 3j[F2z [e[{lZ:\Y' I2 j܏oWPzC Bw {ݳ:*=y89.6A5/R5/I Z5/s5˂ApƠ1+x +j{Pxcg]NDЁ2vH3Ww\WwT"19KwzPP$N0:5RTo,~}HKHMJd2 \&~d23[НCl >hbIr o d~,6tE|i\Q|_A(*{KVM! ~ wi(_猵J?lwFi[CH~ߢ"W}Ieɭ'Fwvd6'lPx6ĝebe0V cdz!\5+1Y~6Mk Su.o{Cg(FJ6Z:_js{;a6EE Wֵ/cs l?;x/Ҵ-=s=:Z3G ߍ ,ʷڶ 5vl886<Ux=7|l)6RQk8:QųZ.grM+phnuYBcC@3c̘{ h]kW x׳ˬ q<h8>R>}~MJ}ߚU 9E+\u<+X{u}q!!&osV7ڛ-rdءu}0R_5rZ(s6٢u_߶ڷbs!ػ0tWM#֎ݏ3i|Qe=^\3[غU )OZaZVn( Ʋ8dXJ |<ߣ j~5evda2+ >HV,*oL }#qT<&Oa iD mَls!Gxy次n^ue'z^^/m^.oo:f$1h~?lْ,[dt;6NhX mB$Npav?Jm^nkR(93#Yv4739{|46Xx`XXiVg6@@WKWC+օu k .dTh CZ~sLt aQЙ ]LF]a H0:i+4s7D5ص V\SI;-%r#.xX';k4nFCI^2U7-?/-o@|yGGZLm/ݨ٣Y,l`(p\ "9|t-=;b@eWE9(D^8SIpBxr;o翖~%8Nڬs U2uPrunqd6;u( ]otM6yx*,H H9Q"XA"-'+=9A8LMjp\OVAeu;]}]U]ᰫ.V " %u= )nT:: .]F $,߆@FN1뼉]bnah , XEOwt:DIa^ .aU'L-xSˢ 2h@=!pɃ<MQu G]υn 7(Yce3Jpg ϯݡn7m 1%["n!!tvd]LoKiA1_-!#dTw^R(jrrYR?yܗ)4ES1\Tد`^D)>S))E0(╜؎- ԪC%H rnݜ3p-$c1, Z|QPg7d;fօ)7p 0G xJtd-*Ktִ~Tf$!k) dEilB g7^ٵ'rڙ \EbNJsutJTaJ< 7JUB)1WJa6a#.JQşʩJ ZL!MmmD)dt1-eqHWɵŒ'C!*G<`g%Z<1;@ H ~#^!.0,k ̣[2&Ī?(#]p%_v5<)dR)&/e#6VsɹfxZwi>Lθdb-i]Y*)Jj]{uyY{Ƨdl*h`[lfJI913P؞d;zM!>iCfˤ!nΰ|w|61w70CLq>;\+R03Jsnxr&#q2lXJ&{iT7UFFGaj^|> ^[n㓵R6 8R~<ۈ!ې_! !:t=F VomeqH?fVd#9ΦBCg3uFuZI U\t u u'-̈4c ))» B8s!M*%;?`:C tN ̜$BxLv 3oSŽRuJ7: ۣV4 gR\Gjlޮ-pfOj[xߨY5UID?{^9}t-jebt@}/tA{lnO@nHyS_6N l(=L8l55jsgBS(8F%#T,ih(ɅR̉(yi)V÷ (ōX9RQ2pR=Ѹ*C!_5ʝ3an/0" dO0EUA+kިX2y,+z38߽)#R7s*HpbBx Zkd@qŗz/S𓒑$,Dv" y5~\1IshV0D?*HI`8񴂔nG?~P2x.[h@Ŏ`3yɕ^LCyzxٴiJHJ 0H"1{@z'W8p6, ׮(i=u͹a}88۴QVށ)) 3EJZEX_N>Y[L>r]?JYAd<ТU2qZJUt(~AN #M#*$T >3G*qUE@53BO/Đdt(.E/s\h/sν{չwܽp.Jkeuo"J-\V !;j#W*f 9bfYTaڬ^B42^˜ΐY-ħᯩt*$ǔ;lik4ӴzQC:Apną5){˼Y㥚EkFʐ(K}6G/W*90)hb('.{i>he.E~QɆ01W x3ZKn|ܿV_YSZoֳ& =@>guD*@*?auAyaC0M),Y4 Pfp豖~HG#Pg4nhGքhNN/&9H^lBoׁ @? :d-KK^@?a|/%h)%ZL'q3X@pFs$cx-i n6(W »|c l]\Z ]Bdzdֽm`󏪜`?j`()_yA|b 6(WeFr扆\7o'VZWE*dxGuNwc&[6EjmKcU:znKZũNX 8N -XZ%d+wY;,e(t%bǍY蹹v*ssBh}Zz}}wm m?2ǿw4_|3[.Lgٲ x}1R:QC=Y GWlۀM  ?26\N ‹hA$EO_L12LH Wa"d\by,`VB+)|YZvU rN@̧6#GD}aUIc.W:2:(G/ck26c.ե]\ ;]΁^}xC9Vެ%ysur83\ozk;y Q1ƣMש0"0z%H9ތy dH:qlo xv5i᰷}_{z<yʲn8׍&[TG5'wlrz{6&6NlmJ9O,>4]MIC"d7}7=y2@T5KR E0BCbT /XM"vUV|PភֵU)R(CTbͱCgG5fEODe{\- #{)F[?3_9uG6?}c_9q1 ih v`Ƅ&l0IĄ51 M&ĿW^];'^S t`go^.'aCoALwLJ/L'^Ǿ XYYkC"ǖau4x ^V8P@X?.2 ,*OS5Ë?KRj\E$PHfv:ޥ# u tVF&gi;ɽJeԋr$^zIcw\ßR>$J0%4,-@S2:,\KKU-aT Q+) {F]MzjVMo}`kVPjȘXqܰPo.[gR(3` h ɨ62@> brI-voXrQѢл;) pfh14y`pVA2a-pw=`$QPf(Q?`1k7ζHCԺWkt8cӼ:u(z2[k˺NZ+ǚt*g]򚡃PG )n_F& ) "F zM(c`ë9%P6NѠ;лo{Utǜ3 2oD ':LW}rT'ༀ?'B *@|u@C*8: @rSë9ߍvG!o wkmL0YTy灮HpM46A+͠۽ݱR?7U3j5kauVVav=;NJH`-z k.-qz1i4|4Mi&hzkT6S t2&N@Z^FPJ;bjWi U/}UR,FDv \7-`Q]P_ʁ@$%oнM~F{q ]!SaېM,߸'Wiז|C6~n$R~ &ێ ,8]}cK;bfSΚGz[fi=/hMDs~(,(3K!}^Pv ]T9Wbi%/kXN!6tϋg <=T5p8;{|k0>;>= =th L@Oko`p`nFF}ԝzc5;[4Z}V#Z _#լY{TS=jxiWr闦ˡΝm{Z=Ν {籾}<ڗGOe aJdA-R^_mb-*m٤ npep&QKƨ"p֛:ya‡(Lm7&V%{J\őFd'=-x|kUsdd/t&. %RNݽ5eNR-1FgoHZxRcTSm`lToL$#SɁO/:$F٤AHP[=XFm`Ռnݝ={jA0&[ng2\@/ }$R{,A \G\o}iv{w}Mgǚ6:\m:R+r5[}y6Z=^ 7ej*s$*dz>\f,l=b&5fά!,2WmoXY52jflojp<pu`ԘՍ\ ̕4 m`/;0?>#7897-_Cڵ) ;<NdY,:6=?/,`ƛ4[<&gغşA>8PV ^(bzͣLFUO(*v%t.t`r ]~-5zF.I8η~islsk Ug3GNdXdJ2?6Yv%[ҬY1i,Ǻ+GplVH+(4qx~ @/D?o,%/y =J*Ng~oȗ r"_z߇9^"ܶ7Xzt{fCah3 *[>0Ō=Ϭ4Pct ytc;j{: 19e< TT6RG֍SfCOǸf%nuD,W55 jZf%2 5,~mC1c*&lfopCr0Q"GEo /V{3e8!MX$v'Mgi 7~/gKtWەٕn5~)D@r;wsfv8h}x[|͆ `L`-.sH6 M[Fn #2Ns*[Q'ώօ{ 6[c %Kܨ6UTRڴڥnԋz^-l,6fMš ĎmH~ 8?'0B92Iɜ0I^V`&3T}~;j\LS%>= ђ݅$oY [rl_pWahTZ O%ZP gM?߮H) uCpƘom@Tt˾9:)Iuu45rp7+o߻D[u<Y6nqojE^q ZUږ7hPH,?xVW=ixR4[fQqFa!HG ʍj 5mg*V2 CEvlvnwK;Ǔ-sIDž^w1\B?w/}n#1^9G]p4At“Ň׾Dd%bهj ?#@T3ʳO ͐o7hh*SP>K]("v.od[@Bew>Uw57SJU5"*sAJgOP4NWjc2Dj$\M.Oҩ;5ix^~dfl ^GـΏ7\TH_zfŪv"]B?:B>]Ixnh[eжC6U\wvot#>(Z:^{u:ުgZJYnI!ٟ( fڇ +}v35y[lmWݸ4򎵝W]3mH4OMmR~Qڼcp<ݛ{RKm֮EMM`ԭ){[xst&cY5wdɸ:dyZ 'tX;v]^/UximQZ,K.ە[BmyP)ȩq%-#%W>9]wh_s+&[Gl ci)[iTFB)7؇@lbroai% j@X8>j>҃`!6\b“'0:,VG'd}7U~ >Qa'>Q.f1O<?~nW\3쉌Y~͈?|M}7|غG<åp|Hq3ƾ\ӯH4NÔB5OiԊB4  Wcvl;7>֪y'!w&y'|\9hY}z2$d#τd +<rΊԇvj*LI\S:޵&aW$r vQMqNi2i lF^oȣq5ھ=u G$Vjγj2j3ae^Zd@^Z.lρ=by+" ɍԼ넾 YlwwMvv,ܶiNZc)oyE y#9GkX%' _dBA%uik'6. OVL4Ծ lXtQVB/KZٷ묾H']Dp5f-,(9Itm$vk@AdG('Ke@ADA?Ӧ8-8l?SJ-r E ""wG&qHqI{$M]>Na ~[~ORȍ>Q.ԩ9Z?p63)%ë9;hݱTh}{}jh`#7›QdACr@p;SoFh_ ݭn9{[.~մvH#P@^8&Eb9ɫoU1H/Q(7k#KN̆H |Hh( ;|[cnFSv][ f5#;awcف M%*+;ʅ%tJ@S(bQd^Di1'8@ 35Jh0J>}#jL#:H!6!:1('y5/#+~ jo%/k\YZpRe.Yvg/ ^4FNgcWJO˼K|>0P+`CQCil4vRkQk)E0ZFq䂰Jő#EW.]iCWaddy 4d#I[+,72d HBUFƧhI^s/$ls `Bչv_8R%.7r +bpt@,Ӳ܀VWD*d@JFT~q5RV\ $@0BM A|0  hA=0 ~ـ4 չ4n47F7'ECzI/ɞHp3>*;`  {BQrH r($ c!LQIPa@ÞT00$rXGqn/mg>5h MNO}7~ g\ E pE'U8[#%:Z@YJBHsSjXg,iXU*F.Ku4:YKza-RH+|ЫGs:)Es:9@^^4*B-/m_0`x :.}њmEE[7 ?X}ߎ#VQlvdGhp{<ڃۥ6R*|)>!mgx~ yjwcOTS䥘yW QC 4&RO DzV1CI\oiUK"kƷ6mZş-'3xwV^ nYiՆMoTi"BVuU.]tߦFDPidڽt(*ZI(hi0ܹåM,4=Bc93dިW&h,0-޻EZf%|±.~Z ~Yf_VL7-c|ˉ;d%)XxvagXsrNH˺RWN֗ 5kBcWeWO.jq#)Q3=EKԠFBXL{r'HMSi0ر16 mn S kvAϷ8nN+F]J4& ZƤsN8e8R)wOu3xPud{_,~JݯA.8`-E;jJ-WXAO', f%FIbյ/k,:jtA,%EǛQ_MoXm|PP(!et&C] >6 +^q:ń{7]Sx_)Vб;ҩ#5U:~2a|VZЏZff:9MFIsgZc͞hhVUd۳i4x9UpeprW٦q_1bJFTQX5R6=:w.u@(e-->3ڲaYWTi4FoВ*Z;޼O4V5, d58^G֫Zj*"'NFczP)f"`wHޥJZ +tA`~IVI_pWZċ_}š6PU[w1si+r* 8Uh 8^bq>>{p-"(>N>]bQ|BM!;mn46y/#+-Aw[oN碡ek,wL`E y/74h#ɂi$ﴦ 'є}n'W%2I);l[`k!SJ:⾕1Ė]e\ 50?K-n~~t2?[Γs3Bzh /yƕ=lIx )Zgl]h X?:O.[˺JFG (OeԼVZmY?)lLkUb e힜O4V) o=9 c#oM>=/c;V'?>|nwe띜9y8ї.-=2X~rDw:op&L܌B o+~<<mi>H'.nV6h%P jMƕ sk 6'"{ u| 6o@%U_%, '"^2Ogh|\B]q(;|%kdY;8,EEyٍiG{\yŲz9cxI ɽWO.'hyRRXM_`C67gA( nvRV٣mQ_ nε:rR H,,m31>9:Xm8n-;"%9UhDjTk-#qְ՟o94v[ * Ɛ͕Geu><\h'Ddb"#"k0#r`kj!5PP?:lYZGşX{/{;T5\>)&iݿ"~;Vr)Ice4h< 7hOOh޳9sW`Hh%ri|>_]2ZMp43Cfbdr+aTMbܕ &`j4SLrmk&.VK)5Fk:29V7;;1B<GU~v 7m4Ұm@P8Lrn~NP΅ڠ©*>~م\ 궋 `#{׵ow8ǂ "zKĚ5o_5ݑlsuYgt?OtbFoJR s^(3p:*Ip @8 %bn^/k0 @8jA"}#ъtn۞WgFD8\Z'z^g5hW5*pp QXY,`{k[0= 31Y:Br!含 t=ЁA^K!롆l]Ё^( xݽ{Cm|ΔWtMm}_O6}75]ڞ weX9jOE %Δ+rcRE#>WB,ٗDժӘm.wt1(>bnbQ(5%6h5ywkɹbvk2߲H1-s[h`4Q֖ᤞwǬC#+]B:pJS$7XbKqT(UTbKa\uD"`I\*xUT&`T.`[*q؊RL+0 c1\$ւubbl9ۆƮE52Y)\s}+5s߬\Y{\*U߷yQo.׻h+}j}c=0cW.몵ε)^Pvф.வSD]SA,J^N(gn @W $t+1sioQa7fBQ&X;O-?G:;l6&LofݑT*J|엹T.@ 1}XV)(]^~3MҶtsZo;9'oC)AjZ&MHjmsRENWTj;Jq]g4% j]M-R*E;Ǜn4ֵ/ʩuX'ےE[-ɀ3 1vh(n⺍_z}:p)wmj-G#Җw]0Ԣ eӓZ^qWiu^bZ6fM۬duINPS8]ia%U"M $u !}IvМ:U\;C[Jmk:AMqRҠ)K@f[>ghQcb)dv 3=h ,\0l;lR۽3`***8ػr $O YXrx0M( SmP -V{'ԗXj7>˿'|)0_թ!aιg`1aHwPMs꼻ǒ5iVgѪjMePF3@qfMn 3J0XaZԨ§9g@ 7B_n5Ͼk+$5"Y1;π9dDcR6iƣ|+Z#|fDnG/􃁁}*RVQ[k i^AqcS_hOyâW肅| kf?2rWe¼r L gSf^)v>ԡϢݧtp˙ o}R(+$67d H*%N>ĚXU#I`6eZO Q\!Y'+,{`$S3cMWk{s,Ք Ʀnx W}mw{M뿶;WOF#4Esb'&Ton$̢;8G[-d\U!񂖙YsI#Gk^VY-l_]w AEhGWC:^Qj/od "y%Y^%|DN`?>ҩŁ0.}vU]m'|;?5P,hPm] YxAWbCXۉt[t^+< uyu^%XR_WCX+z~d׫߂ZbduɌ5>?((Tl|WM*39o>U>m8ZKSg ف eVS*=.1j5-Fj2™_۶!ԓp'ۇd 28g1Iѣ+0Al0@3y@NuI!|;s R*G-gy-;xn4 b DQISd ĤN OsҼonhF[ TuK@|`֥TQ'zkwmhs AZ,3chPvo0:VA%Ӌ ื}9lC Spǰvx硴tɻ;#W-uvIԔo]eƙ=6h)54+ῼo]e/,ZWpwuHeٝ[VtJ켊V,@)jtWT' Ⓤpe8AQNTVlu=E%Q}K2,1@xQ@$ÖB@Lf&df$/ДBKUk[{ƋZmRBժmUU%!Po易g99y睌 6W\ד3{ɜKff^:pL.W]VM]]_P)k]ⷋYÝ6ԇux0^{NΫp+n9}ߒac:iFvI8 _oɝc5,S}DE󾙥:+G:KwAH4  omz:,{ޢ/\2a Knd٬%͋/t)VLym3/ozKj_:xEٓlǴٳ7\aOMoJZ`yEoe c/82>,2]N)s\iK&_uMSݵex2O/,xw5+VQ!czKMrmS&;@D VZ{5k&k笽pۺvYiF 6m)Wrw5m_tPc:~ˎ:Nǩ fgm|>JCQ?|AY Q:%T^ży-+o(? eaQB.ke>_9>CN; <z/db^ʼZw|hT ʳySʏ 7 2ey9a#~lR |2Q V!*d[lmBUȶ V!*d[lmBUȶ V!jy3l (5Ktmf};M6q6q6q6q6q6q6q6q6qyU?UW~^ϫyUjW ^5xځqC}Q˕+g/W^\9{rry˕yܩCE{[pqDly6oP. #MB.ke_= /Ja5p'T@ߠl(?ʫy~m]K2_˼WUð{-b8`1AQEyַs 8^*= aB.keLS+?Q~HphIgx!sR2a~HyC~TyrD,1rTQ{q(IS3QQlb`F>f?@&iS^mUch;ĸ!%qh;'`zN@7XmJ'8IuOPS·6@  y ~~.U^_A /)x{9O+W3 b-B7~T n:y]㺌XG}wC˚GqYǣS?|g/C+B%3_}Xzq Y˵V7䄮mmE+y_)±x=ZT1Ƥ 2"{d+QS=g#9QrgLj,\Qhuk*2V' k^1VUQTa1XԽ{FTBV«>Ⱥa?ƽ :^jT+jǶ%"Qu*-xfskc 8.MwZ% j^"\ qEhT{4(zic@fh %7׈}cpO^)2!^>ZũOˆGylUqfRj97~';||No' ?g_dՍ1H5׌;;k7yZ$|JKO|;: pJ>%wM&簈ĻxߗR!a~zMaUvS'rz9,2]Hckzë(So5Vcߘm.R<26q#vX= ~㕍9էnO;"~ˤ?)cWEPsեu%(Wiwk:&Ae cL)ڂUa # ѪLu=TvT-o3dZ7BX[MF5d ^|ĊJ/ڵ| J}Q݉mzU㞭C g}aۍ ?k4O+8FBY 'Frl162̫Xa٥aUD|k3"G¿PUǠIƯߛ_6!r KR3UhDTE ^DZhOJ*4^ɑk➚Jql1jWb5KU0DpǫSєjO6՗xU#|3"^1~&,M3J.-=P4+Cp(CA\-XTnE}וQMa_m['7cr ȞPx[D撅\mi{:wlPoPF^TEȚEȄ`T#,c>y]}Q29ɾ.uT?, /Jw n/F%}6y?+Gb ? aeЋDH%n;E(1Dhqh%}? >_Q_Dp$lo=m{\v{b?(DcBrb\s^Tsɞ~T[/ GGED}>?,@cF  Ѐ䖑>Ֆ(O;|W?$,nLHe DŽ>q{}}SD<,=!}QWC,ʵP(eސ'ꋯtaAql[8q{PgB~; "J? G̹䍡~Dl܏b"6+h&4cF_A]6F/G uBљQ~OH5q^7ų0z *?_)p.o]ZGޣߣda\2@V'Q; ޱsBe'0NO2@xlDq.vUq?^?&Χ6EHrGk(8)I(jtmo}^^1$ΔH/fCp4!!`^ `p=&E("9Q< x=E{YBF\u ѐ}#+s?cʭI|˧ )V>>NUBWD`7@X$r〄(捊AJ>qD~D=ꆇIuhf'΁QlHX73} ,Y(~7^Z8|)n0[F=6V+E7fSFh G7Ϲ []TQR-׷-M뫪y+;dHT4mjƍƪ"zCsKuk"ׯknX}ceC{U}cpc'Bi[, j[u-uVooX$Է5 5PZ!7WW7T-M0_5-R Wn#ȭu l޷M亦j gUSUPQHXWQ[ͫ4:y*_e[}SQւnP%vԷV-" 5-MP/‰MU-"@D[TUW4@WX*H,XC66J4р??"A<: ?&cMw \&zIBp2H$Oa=+0 #|F|峲w:|峳|/9IƂ rQ\yH"R+,ꖜhO@?'5ӗMtB#~! KzSK>( KNi4MzH'HI5}ԡ ]H>-ۥ iHI[~Qc7׿-=uһ:~Tg׿\G7,xO=g;<;߁$<<Q@ ,<x Ā:<W3 cz2O%S<=Oyx~<]:-d<xځyx19_oY;Id1 'l1slhZ$b^d8en۳g5Csb$iTV_&d2 3(VwXd2H&cXh E@{F-JʏLΡc(.b&d}ɽxZU^ Lzd8.sH@fC ҷd2,˖dn&Ӑ^G|HK?$`8Kw\;mrNyGoTXryX4QS 9b)-@Qiv‰8tdї(G,&J@*=GqX%LJ}ĉPEb5JV6JLj%Q&bs0e2QĕMP(VI&|"jqZ>qbJgUW L_kɪA'Y5<U :ɪA'Y5"͉3Q31USnԓ0#Z d5KV pr ~M:FO1YMP0{nuP )b5|کF,0"6d@'Ŕz `Ծ$-wn3͘rH! ѹ{VIC6I% z7JlH[7[U?XiZ]q[T~yDT1Z +@ pBERȚMٌס:ˇt^2 4.2fRHc0fsd&iQת{ZɣڜEIy39iēJhZPjjIЂrK 'jSnP@vX=:Glf]Y"Xpؒ6>Iws뎛 δ9XNf&%QuN-H$E֝Y;3L\xv<3vھkjǗ])^'\vo=kg%KC6l9Qڬ'Dw6mn^./vUX;;1;ȰaYO(@X-6"٭rA;yRtNN:{dɽ:᮷\oejt]ԢdU"dOJղ䰪xx}γ:jlM-Y#&kXŹk8v,^CIr%KwF^Zq )ͪR{r!*Ү"53QM壪EULfX鴧v5sM\F.VY!92guv{uȝ38Sq֒a-1?6MQ:2)1i쪪 ʔ՚EZgm~ʒԔ( 7#YR)Qj[*9l3)xw-0N9Xs2tRad(RIyY5WG^+98u[Bws{#e_ ;|$Q< >!"7h7L]ʪ4i%U<|{Htc\P et)8^|dHƑ Mnjip23Zy-8Ej\*< c29rK:&՗I4Υn HKkb .sQih790XR$Y%ši _"^#ht;KJ?PT {+׋vEU$WDErHH0G|h[HnpǂN=mSɍ4׍R+HK/BZnrmhiͺ2Zd $24Z@+h--t=B?ѯH2tYo=|O nBoxb$4h6|!z~Kt%Ɇd_BH7)>I_;s:Bod›& }GIz~GoZY!EO;&Ѩd#'V7TڲZ|L&'#PtUt5]K[in/}z~A/ߤD2-JL~0M71=O/џ}ɮ(%}-j }>E_p>M 2&h*]L?DOW?[8~Iw褔Js.4l*>Knҗ`__\GkZֲVFTH9z.]JS-m 7]G3tOߦgzޥSR<*:H]ϴ>+9y<2Mvk=L'"Fi)[ɣ&\નֿf=Y=f#w̌J=]H<5򘙙I Pɼ̌$#333#33DCԌe]U1[O|;}ۿgd D}2%#;r4rGHy 2٦C9;" !{" #S}Jsf# g >b>4ȤO&#Eurd*)u Aa1)y%5Jf"CQȆFOnC@CvBvCFDf GHMDNE!g#  -D.'YF6:nD#KSR3雐}C d-B)n @ d&m8dKdA#;!=Ad:rr$299 9c\"RdrY28=)ս ?ͷyyyyGNH FF  oBނl7%@!g!K53(-VNȞdqÐSyC&KEUdr rېA}ӌ]Ccȳ>B{YlE#[##;#!{! d6r4rY1#xNFy1y^ Ɖz%LNSPLAv{ {qoRS Vt]=+wi^ ҍ<*W~zW_2îU(R쫒kPRCnU]wuRr4@42 O9}{N%/yd>) O{&s WB(Ҹ&E&!!O!# "F !Sig! d&2 99 9|9r$rr4r r,ydrrf}Sߤj+hoi4߾ yA~;eEتҿw5*>ȸlt\K۞4_jT !eBw;}ivO~NW~;N|G~өiRK­\Ovp2QD]JRBI%EQS S)K;GHvqI]mC?CÖvRXp$&&H͓zGH[o,},}L^1 |G?g"g}S>ϩNAFIk^P^D1^T3D&u)&e ar:T[-<Ҵ,}J.uӛHl"G,"{aHK8C,͐WG ًrLyLyV\gõm]wfuҡ fK`09 fp [-[-{=>+xv#7bh#պ댷#cε=zD9-$" Is$"NŖɲtmRsdߌ}5N߮ 8?cy}&ٷh3Q9LĥRO6~c$?dO;Nm0:<߷,}+/~B/~!?d¨-+,QgK+cRn3/ϏV:|@݋Z9䝵tfX:H *Y;(.A&)iIڑ+A2[9<,tnK[/G|y'̗gܮ`oqk{mMo2-_y]/a9.ju6}l:}߷^^xK-}[i\yw.Z+eiS|Weߓ5ry-2WAu׬X)UޅCZKW5.~>?U8žlղw>QO XfbY ҚEߚĪ2lgQ"G9lkwEW_ϱů#d.t-ʶ]/+%nH\ZTs,njI=f7/57t7޲JoʬuTy䭗=^wv7xETy}&JyV)nkgG*vd{n_?GUhn18{x]0ߪkܿW^}Rss9bԥʑKWoe$_q,GdEs:m&*t% _K TRClY~<5l2ȑ.J\#R 3KIAE/՚(TT v 3T\u+j,V[+VR1^ R{HrIY%v5*1Qq-8g@qJf˔:Z5*ZTk$Qlֈωa cu'r.H-zR3Ҥ.j#561ZYbtC ryFe~om~?-~~ JWf*!~>۟(!fJ-~>Cc=YdQ2>:6(Ti|o[Pg{s eq\gy}\?~~>D<䷾߰a1M,ݼqЕn{5oM079rkM5-~~?}-m>ޞ)v,}v}[)o)~>;$}~/N~~?;]~~/k?kZ^kq居v*N(]/42v~>v?s=A#XǸ ƹ@ϵtN/N _`k}IohOmͱiv|n:I,9[z]ho/}H5~+S%J?߷~TWN}<5A$@x)/83S+'Sޖ߃}h}?)U`8)_RF5jzz{ w%=!*^ߚ>'RH^J*+I1) !BzW;gj?"GQB%XyP!Woxυ<]@K/y!/V|!_"h/6|)_ m{=h=$p/c'/Ёk>):|=7 Љoo|+ gЅ? ʷ0wB"w#|/ ~qO?OA^kq~FC!2n5nCoxhf4>F+hg#0`tFG#(5ay<e!l0j(7aYc&y6c_L*5:ow2|%_?eiDķ ^ɷ*{~~n|\J?À[N?eFQ[_88}R*MJKQ*j>@%]VƊ:#W,P+˕U:eM٣RjJسD)W*]Ar^mh0ڀ6UE چv]hwڛitM)4D^4,:R,Jg|.+h1-tO,!C 4XEPA`KnG+HN=! R F@L< `5r Q0bXĒM !8JUF &jSNvU{d59h pLg6jYԡfW#Q3P3QcP:)ApCtGrN@$4Kl75js jEԡΗMCpEr:9Pv`s`sPtUq-Ƹޓq-q/*q} PƵRG2U2e|e|e\kd\ke\d\ʸJe\e\d\22M22e  *㪐q}&㪔q}.BU%.!)-#+mK~AW2e\2od\e\ʸ`\0]k0d\Gd\Ge\d\e\˸Nʸ~qqqqqqq(IuQV|pϥX d|5 51v'mtdx 02a( @}0^Ջbtj÷P߉(pNC-q~Xp?tc^? ]|Y0L~#a109bX@1X+FOClF1n-M}yA !8S #|㋐B|B,eFr7:cp !j-k6"Z=|hTob5@ej#[媡yIηU&VmKXׂBX$FwZ0c7 o›lކ Fb# _%ڀx&Sl-z{3[(c,%ęnŃ+ omJl%ȑJv=_K^!yd:Af"d55%ȧ'ed)'&l![IT6""#_9H"פ|CoI !G1r7~I9ENZr%y#@~",.:>D҇i"}vz1ڃ>N{'D/Q]J\T#_@lvnQ}%pRV[/*uCݩRw{Խ>Kuz@=~RVojzD=S'Փ)ZQϪ'zIp;X[֎ؽ='c{uf.!֕=#{ugq֓=zIև?SgȞf)lKeY{!,e,6 cYc#(6ac,c6Mb l {Me/ie^ayl:fYU6as<[^gmÖw2[gE}V*1[>al +ak:)+eYFmf[VV>cs}vdneؗl?;!5f߰[VþcGQvg'$bُ]d?Kr Tl!{-bo4egYv55ܕz5kkkkkyWkk6B{NFkcZ6^M&i)ڋT%m6[i|@{M[joh 7E[bmmL{O[ihkmNT+ke&mU>*ϵmZ]ۡҾҾ־Ѿվӎjk?hZvV;~.h?iKeNuUݡ_7a[FN?ՏI~ZgsyG~QY_vnpn;܁nܺnm= qw;}wFM9y||w5B7݋ĸ{4AYk'LvBx^/3ޗidTcȅ\5̂YZ961|٦w>$Gp?ޥT>3å:L܁OE|pXa,N9OHO&Pzõ6Ӧ>!]In9=! B87]>t>7Q{{&Ot#E^ix@"Er,m|ApV.[(Wۂw v# n־ܪL;ۆC|Pg\\]K \b. %$·Dt)ڳ&{͉|ĒX2ϞŗfD֙9g~0LqeLk&9ou3^[QY ]DU)~czb&.R.ɋt='уtCP=L#H=J z~~~Ho7j&w\ʝŵ?Q\SM"nʵ_\59vWR;K!<q20#)_yOC}PJ=1P`Hn߁6Rz)ߔH3e2)O+HseMZ(#$A/>"{U}Mg=UL8D BAB74(wDDd#Fw8DcYo5,Scd6&? qlvH[|{u/Ҁ~Z?M#3Zr4ZxxV2fsi#ϘO H~8`L;C6acK{C3C?ѕKBM1f od30ufF_0tafЗ̦fSق43LOٞlv2;9f}aA0ӷVzg G(zʵr7 ^N/Wo+7HWѫhqz 'U}o7[0}У]zG =I?я'SjzZ^=UϩӈF5d^]6bH IßkkE:N)2J;UȽ4>@}D2q~ Jg{~} gpJglְxhFhHFx%YiDX[XSit!ko-VX+Ujuz:bk޳[Z mlZh٢0b׶UUkhW Z EZOYk*OϬϭShqG)ٟC/c.Z(CϮRCy!D #!G\QAڹ4!W+O 0IV \ׁ4) oL4(DOlt"&x%ݔn#nF<-'[[H8`Ǔ0JIlk8)cimvd|AҬӤ[ABOL~t [d>;d d+mPPPPB(O.!?'쁞+z˳ r?91($MNAO%_AtQH Ջy{Tz2#BOX2Þ-iFqmg^Zܮ7p^(ї5%YK0{ҧ#jyUˊR-]_؊ߞ`juG W&$&'B- +_pkO"VES,V|J9CST%]idB-tW*a0KLQj õJKsPf*ybe^٢*CrJF9Ր \y,McQhi*.Ꞵ^>4 uu_m?mzmzmz(9[ZGYHZGjcY N3uYYF}>o2aQ7(,:Ȫ4dȿ1dOMٛ&CkKAArmo !ȡ9a%4dm r.u@nLB)O NSYh Ϛ.Ly3(7 JșUը5{е{ҧPPOEףK7G7o 5XtfEԅ捨ϚP3oB}ތ]^^^^~$z< BCA;Nz,zNi\."-j Zwl䪲 ekE,M?Z@,9P72|Ye-J\p"F̌ 2;b4$~ځvδ#hu*'E;}Pׇ~6\yh[ " kZ kzo=g.\ Wõp=wGu:&n~={{{Q\cfV6vNw#'ܧ_<'cy'SSyjxjz= DO'SۓIyx= =Fƞ&R,߇ /^.m,o~ m~|G;a?}z[<6꽱Wpz{!HΕ+?JBofˢ#1籘dy[y{g:[tK/o$σ JKkc{jJKUp:a}p,L( |6b7Ѡ֍6+tG/]n? pݧ e]]8WT~Fq\{!篠] W#-K\- Fo#Gp;ҮfٵdbױSv#nj7-v+;ngw{`cB)%cDqZM ë2/"\QZj_Y8Sfaz!vO<3L {}+pv=Gw۾Ӿ88n'=ɞDړ)=͞Cn쥤Lku Yvl;Hcw#vV=՞JTr|~Z+Cnr׋ סzz"w;#D\g˝a4t7H˽!˥m0ٍ6ͥf6;hm@ Ŗ/AWD{ _D=;n{o{kp&% iSߛ^}U՗kJn0ħ5Id(K.nhMKsHOs\-p~*#*y=*ױ%Bdp9W~L WN}PpO]{ii];+P_.D(d:w# dĦk&y%*i{Q%#-`}udG;~ĽP^:̅EIȽ$ߒ -͹0 wiD+($c584xm 9lgAV_F&9! A]b"Hn#}& By;k09FN49G5jQ|*I4Ӧ4fδ;Ka4E')t:eGՑve(QvU @VAFAV*v 2֎gYî 2N`'L$"gT@&۵AֶS@+v]uz Aַ@ @6A A63@f؍@6!J>) -@TVPw;5(ǧ:`̱bwbw:@͚ rj~[ݼPl݉]RГRJh]@ZZ@ ~zGIz~K) J$+iJS%K;Rd5Mmfj65WNVsjV-P AzT=RUi Z%kiZS-Kukixm6]-ZVjIvN7pݧWУ8=YOӛYzG_M}x ,ҿEƁ{lwIv;i4v'۝f4v;ɂCb95?3t%:FKR@'k {k-6ZG;Πk}OFƃKM=Y=<5tHT[Vۨm^vK+ڛiG㠏W?-o3:}Nt +.Wҫc5N-uhD9;C[z>B:WK~A>Cz/@_\_o^ߢޡޯe~a~ KЧo3O bF8h >Q tE#ʈm4A'F:4ts#h:ltm b=5=֘`L=xz1=X`,XnXol]`0m7^qka o@m6΁ѥL @.WEWHW&8W+t+t+ t+tGWWWo=]]C@v szkS\]@tu-=ϵصtkk=u\]AszAkàtu}Wuh*D5ig٦eڦ0#UiFjƙI3 t=3ÄQ4A1;]A=ao3GcA1Ǜ@O4AO5gsA1癋A/2ՠWmnЅ>̃k_14>b7?}揠τ0aZfaaV5 hŖTDٟB) Dٷ2($QHTARI$UTERI5$ՐTC$I4H#$I $Hb"C$I $5@RIM$5#G$I$H$"IB$ I-$B$I2Hj#$I $uARI*T$H".zH!>H#IC$ I$ 4@$I:H"i$I $4BIc$4FI$M4EIS$͐4C Is$͑4GI $-DIK$B I&L$Hd!B$I6vH!iH: A$I$]tAIW$]tC I7$=@IO$=DIo$AI$}EI?$C2$ D2@$ B2`$ F2$C܊V$"d(H!dH#d$HF"d4Hr"Er;ۑ܎d 1H H@r';܉dqH!d$!$SLA2T$SLC2 4$ӑLG2CHBHf a$#yL$3DGH Yd!H"YdEH@',Fb$K,AR$K,E$I>eH!Yd9H#YdHV"Yd%UHV!Yd5HV#Yd 5H"Yd-<)$됬CHF4H#Yd H6 وd#H6!لd$H lFf$[lAV$[lE 6$ېlGv$;@N$;DRI!]Hv!مd7Hv#كd)I)R$RߠnN2IҞt&]IOJFY0ޓ#f9s"g,)$6ܭ_&[oXgWhv5֡9C GzdhO$d:#R&Ie.Ƣ}v?(EH4׾ݾFӖOgEO)/@-mACo_X\diHe<:D`ͷKZno(LF]ɺ+~\BiWګ  sb(=|ZeC 9_W<\O.%H>\r͖?<_#{sH>^s5{噏+F|6&WehȐ3Hv{S6N%uʷgj#2647Zc+$>/5O_+a~vX3jh;ԂPZ\nc >k(E/n폽\^7Aun+_>oS=U`8|R Q_kwV[$nlq;VٹCF@ )^Ylux%w޿{7D)#cK҆t$`/bZe~BX+KLŢ0;l+~o?ΨאW]'d>;Jt|G|8k>7g2 {qg< ,#x9ZWq<_c]AFwyYo;IO< 4}-C.z&:Km+-ARƎ#~Dkw3wN(IP"H7=~W^GȲ~=OHI5 66Jsy7.φ_IIv^+Rq{h v B)jP' 䫓}UY+[QʔPj%R+ ڎ66E7K#.B*>Wv|*U޻Żջͻݻû[}ƻw9/IZ@@JN 5PS9"[ s$BzorN8 {>Tbq|VM/" ]bob+! GeC06`#(6mevdl=<{^*׸ &ws/yins/gs#yeūy qyo›f9o[V'{D>1Ǘ|_ɟ|?)O/+P*4 C4ET4E R76D{At9b.Fb-rϚ$.&bX*bX.VЗm~n-}o8$oa8"GŻxOq҉p:NsSɹɉt*;QNS͉vbNMx6?\? x J֏= ;JnDޘN)/ }* /PoCD/:Nd"zG_K}!@k2] "ڳV<+^'ć;ǩT'8NyՉwBF@9x!y;p0p x88DB L%yl [ʞdl[Vl[ְ)=ֳ l# f}þe߱{v~dg9vNo|G|s!>?gG,/O|;y!w=|/}~OG,? "!jx E%Em"TQWEh EC!n`71D*nCbGL<'bX$FI8aS wJ;u8)SI <x)rീ]+K`;XUSa)7RRn<Ky P,XwaiN|K,9XvbŲ{Lk*&6q:{`6fsأl.{<6-` "[e{8{`C}>e)}x_ޏ@>C ʧ|!_ğo|3·mu~om~Ï{~eE9Q^T7FQI$"Ee%Eq-/Nq'Ƌa1S<"fbxTOu]b8-gGqVPGqTGstp\$:I]݁= x(AA/ {Cg| PalxRfy'䝑<}*[3YO+Mtm 8!nS#H)VH&I|Y,'j 6K!72kƚ*$XTg#N~$is:glDq6?I N0cJ%b 8w8p$dmPL\\/bKZ'W1±Pўג}E;]s_diذ$ ȝb`=Ngw<މǻx<&E{  %ЯBC_ڑ7гo%'C:C~~/Ly4#Ӝ,3R}Y"9bv߸+?̃a<;LOz]p\4S|'o' ⲌXN*By%IЕuK0}֯C! Egu|?٢q/7'd4<ؼ1H"D@ن=) 1gGR"g 9qT/WI%2#1͝ q>>E**nE*|U}Ѿ_ _/W˗K 'hU58x'p4nX8/! 5_^DSb]ଥ 8da č3C_gƺme˖e_1PQ/Q!C<r12Ky>JR^п9cz OI|d_7nSJKG<-_VÇFcie <'h?xMgZ&Z'ˆhOQSbq{Bd.sOd[枔'^{⓹'~{'dɍ2&{RYT'dIu{+sOd[ej+Ca6ʲrX2RY}Z5kڲ>o@~bAl0nea-xy"D"$ҿAM/Q_UrMD?0c`,ݎy/g dX,V`w^'9Fu$rqW"BK,\%H`KQDE[T./9 0I@n5ɷkxի]rv9] u]î!okIvˮgדz FRn*wͥtY.s9ۤLC#?/eG MT&jRWET-D"7sy7^kz| I:+"= 4]7&Yv^_oMoL6`4ڨ޸@/!nyIphq߼XnI-p[!-v@$n= mi=_?eu .ʷ3$-YTyyImy#g\=]^)=NZB~Ow y^3Y_bfrgUX"(I1}~f2@s9m1sͱ8s9|dN6LasYUG-Ե|N3 uNИz~S0wZ $m6æP+X+>ozjgXO#EC:ɴIT_$׈f?@af1_Båݲ2V:<i\F8é>!k@q'n')R'X~J?,a9$J{Hr9lqGl/{ ]m^>.KI Y w\dwKeI2kj;}m+%>{'rzy=^}$Um μ` 4FNtv0 i]DfrJ;gsBe%*iՌj,ȩf!Э&!% -vA)>n4܏k6*2Rzԃ: Fc;ıI;Cqa_)HMvt/SGvUkb:KPPP7>Ӡok; ܍60.wLɭ/W+n@}*ִͺf=3hv5 `fO/\RH~eO+h=Ɨ\2(XicˌKCjbk9ωKWsTxܔ?-ԑrJ8Oն ltsW:EM#ަtC\ΑcI-cqV4yKlY܃σdʽ.-EziE~NvZkUTrmc% ṥcj(Oi١lS fX͍c^>VEiiױhVn w0ZjЎvng,d-1gc]gXmClB&F*aאQ4*%Yd$f3cE}]g\Yֈ5b"tt5ǚ[=hƽi|ohg!5cqE?t8 VY{Yݼk5syRs$Ws\o>O FMm`n3;̝'4m1a'y7͓s\ Q' Qy3xfh>iXS=q<%ƿ/| ll0f{.i\j/Քlt땨f(7R?Q/(Emᕢk|{u ufM>c6EĬB1=<Ϙ~`}Rxso""^t?Eq9ֻY,潋Ɓ_Hlj%Zw׾Xq.wʊ2~6QBe>L KB?G1_(.T3ts[{j\Ĭpc}D!|[-ʵ1K#gSdཌ!p*_t Nf5w[cHgbHw9$b$}=OQV?FVjPʿCۘ ID{9]bSidU݄Uמ|-wqb9|'m#Z3Km*؂3:RkîMa׳qaצY3v׊&q'D'T(Zqqtƅ***學 ZOpyg`ĮFH7*\+OtЂЊZ}>Ƈ/\D(rqe!P-+*:ޓ^Z_==T~pĄhF۠vikj't< 2E!.47>SEظ:[\5 emV^bY6S_Elt^9|(\|- Spz]UG쒳B/L7wDzULsakЮB9d~䅡E|Ѓ0L:7aY"ϿaX4_[dsE{=Mhә7?y2?_8ǓBSB |-GZΟX 75/(*g?_WYg͛isXt+qioWio^fQF]qht>g%]V ] }Qeΰ^]o̴H'S&pf93f+/(@R1inJÍ,XZ"Yc-/RykTY8Ŏ:EP! {άOLPI;O+]Z^.*H*;ZѺ<ċ1;:γ\LṅgOK]ְ }vr/iZ씤H1R@2RTEJjJuRcBj#:]:9͸>ҩ?Nc$Kђ*tTQ*U'TMAXCMX[1Q۔t'R+VR{R.R2aF&efJII GKc J 'J`%I4H3i.\qzv%*lm`m&o~~=_}>+b[37Moo(;·{'ppIw ?r{ܱp[s=p 5Qpw4w;1J=)#p+?~u Nڀ>K]Ŗl cH&1rz.dm:*u2 \ 1QnYFbH$V,\Nk[%=~~ĞeϵS*{p"Wu}"-۫>0E-%'V眒OAEɴhXN3XNM(K,:.(R.,ZkMqmi(®H lcTTg``G`;sanbŬ!X갘lYX̖lyXikfi-|Ż Xo?Gc)GrdD9NIt(nxkI=˂eyRފŽ({YRn>I8$kL-(QNV޵Ĕ+}uVK!R ݾs>B+m{\Ǭk64M̶ff0ͻ^fo3L73u׵`K;ow lϻK_  -\^g8)O:m ε^ZmG/_s5.j.ւK9æTK+WASt O͹-ߪfձZQaZh=n-R kzZa=mVY5Zkzz`{R}F x98="uQ_9j8gGQq~8鬧>O}*9gG -V'3Cc $ n~h>v wN^FO`&i*iW؍$IfOcf>'[n%ۘ5$ ܂5")$n͚pi̚<ȚLI:ƺ\=[)oDߊ.8xVxT"Ƥ)gRT Zk{gi.1ЃWCoi.0m6NU۫Ҏ>}yyͥJ qB5A}~D?͝4-J_L ZC=kwZgm󂳙7r A&'ir:&;-4 ͉pӁsW/p>p(p1#қ'T{|>_F"|4 "\@ "QP*AE"H"QPDP*AEJ9k:ӳ  P* ⱓD$NB$NB$NS%=\+׻]pwW@>l0|`hgSpMf'Qʽ9>W܇Pz(F' wB{'wF N;;;;;Iq@.OD ו\w#w7u H؍vOY>i;O;bw'WS4w7vw88=\3sSSRʔre'rz"ȡ'r np4pp1p p*SSuul< ޢ{-꺷ިkIA)H;lbp"NiSD)H$Q^mq 7Q&·Gwg< ɆѰg*<{{ٟ/($[*'UZRCRj/uR,Xo6139e)V|ʭ݇ ݩu §OLqO>M8D.1[SڏQH/|D ~tq+} e rjc qw&\6^v⩭Vo+· oAAOrTHTHTr@./R $R!z*4Th BI*4TBItM*44i@Nr*i" T4P*nivݥ" T4P&H&~BIǘґ[:d~:MLbgcg!bT t=/~ W*WAȧF~D!~f?$l< A2)FL1d$Sh")FG{䞅ܳ{\!y @{=K%rgyCE ]7v6hȆ~ =h"Pp0@ЃB(4>Ggss;:Idg3ՙ&WŘ`cSc qW͘qT~N>vRa4Zahڒtx60}wo,Sy3D.eYo Jh/jK,̿3h___)7fXsxӧ g*I~5tq-x݉ e0JhG'ι:|YZ"s fl`Ql(fG<-9o/Sy3vEPw?pQm|AP=`ݨ_jkHWSr|7.G*dac5{4K<@6 hJo.NQTZdUѳRN3NssӨ6Y˥-hڐrg:"hoFפSZUvx*hM~}_2߸}M&X6A`#b 5a}!P}~Ck*wY|K/ <fq*`9$%r?.O={=?3b0ݩ`YSA"`^:4Րc.6/IfխwY Lg^LJ -1*g y."<4ŦR/6x|)qjP/ưx;~x?~%[6M ^x/]x_(Ca r٣ZE&vmM;fH22X}q29L{LLgaEI›y0cHMky}3G7ZFw9Z)$פ|$K}TSS''JuF]>nT_V77Էw-VuSHݥUόRR_ߩۨT^[Y; \RYJ}k_uRۼSHVK_ ;*WokӯM/Qn-;]^r!f$~+R]Y[\|5)r5# _ů/*Y.Lq ^ET2re*|\N+%ҋiRK$\ZC=MLd^܊6r%%ŢNr'VJ*we1ro7}>,VΖ51c:25fT(V:f\4(+(f .EV+A|??OOarj6C6S3{ +7w؋?%AA${Kظ lW쵱Uj) ;jcMC[r+s̏S/60>2 wi>/EȻ@V`w1E`G9[P Aw0~Z~,IކoH U$57jn   t:`f`--:΄;K tŽs_ч+N3SHE&;R%ŲIti4_ʓI+uiE.}"}.}+~LɱrHrrE*b-rKrW Gɹy<lUsFyV؞{|D>QȞvآ 2=<<=c== |88888pp!q`p1p 'ˀO> \ | ,9z/7_HrHh0?x,x^^W_GgfggvgY퇧Ne>N聪P]=u~Ts$1 UaxP5#3:pi|sp/@i[!Pou^O^O*?48uO2_hfmD g1yt&)`f03{ aj~0Ș3caj0 b&DW3`jn053y)a1gJ0˙2+1eL9af% p3\! .Fٱ}01}}H*{ Gr!4nųz&e=""jh5kt cƨ$LPVshW~]yX|'SEr|&_&/2Ak!d' 0ME~&M%Cϓeo+oQx5' q;ľu;'hg $CYZ2ss?553aD7q8K\ .cĤnҹt\b j:fveOiM| K+Dwlj~VZꖰ/sr/_)_)_)SuNrN79+9Gsʿ)_)SS}NzN9屜s7r)Qfs >QzfܨQS9lj>8ʑF+2_W۽+Gv/fwC1h  gC/hqP-^_E-N#Z/k7ZjqTU-kZkZxC4V^SG@Uy4ѯԕKĨR[nJ}18u ,-UjMnRo6(5IתԝvA]_wAwI73 :sPիi"# _21sG.կ2xgd^szf5 جg__&u_⤶gjHiq-Gߦ"UEFa-⻴8OZ|HkQ-kIOiZMiY-~Em-jũ~NN)QzjGMh59r(RLľ^d_Qμ0dPVF)\P^|B,?ќGy9OBԩ5Q֕+ㄟuu!G:E:M:LiT*mJˠVWkPͺ=6uСu)^]B F6uݸnBi%&zAi)///חWɞE_oԷ%~Aa}^!_}fpXg;">p6hM  ZAht`10&  .Ke`)p! |,? +GJc<| ;8NVԃ~ :vNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ"E8-iNpZ'%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-i NKpZ%8-ipDutvF|X:b&D72?zӓĄ.Na^'x["t0JnT6+:t;W'+KaQ5|Yj3 ?!=$񿇔51PҾ׷0Z|K=+'틧1`=5M[amI5*X6ۮ6ֶ4F WZk7kEOJ 0=ߍ053B" D 2EԣTnX/Oa1~J5ĸF5:ȝ858>5j,<}^[y,<}>bk-$Z8s7}gTYQ͢zTӭ9||Koo&-iIGػE{W}J_R>2DuqPkAbDZ$=Iݓx7d(E0׶QuUkkN9|&%+GA3U#&P%2\%Ɣr2μ7)fZH)z>U)P7MfvY)sjو(jQҢ(2 TEi7-D-D-D-D-D2m/m:SIij v<9O`ʜܧq:f:˜nNaKLnëo8voU UWn_}:}HWO5wм<{*2.6)WyY:_m[(~ <~T5Xn?n񾇙ϨS=s^CJ+P[3LgM_60}a ~jQs0-L=M=QsTԌAn߳jUDѩ>Or H$)0lOV V"XGH;J`3*6u]구/GHg%(źʺFӪMޗ:]|3lvowaiwQE-oxE(c)$Y0s4Әʕ7ItK#Jjf-lf2ۙ.e}`1Gq$s9 0C% sb 6-dkc=lku:lZ[ǭ6Vd38[66߶ȶԶVn[e[c6ٶmV^do;h;l#JlA[Vlg[h[b+*l*zF[`k5l[cmaۈmv6n"v.9Er*{ƾɾ^ooﴷ%~Aa{2Qb/W+UZ{doﱷN{kﳟ}>; Es8Cp$sKU5jGcchuuHÎn1 )YyEeUǘcҙE8 &Gcpt:=^G㌣1v8F Y,r䝂3\\\,wrqV;k[FNgsSrwtvv;9O8O9:;/8/:/;:ǜ7e?'9~/%r_ů~|+A0Oy_/77G,>Ržeվu ;]oO ||W||7|?_H}V^;;]]]]n&yY~o~ğ///oooog? €!lO ~Aa? PK"T`n`A`q`Y`E`e`u`m`]`C`s`k`{`G`W GG'  A&h z`,X\\, +DIl|Bbrj`,p30 RAK#TpnpApqpYpEpepupmp]pCpspkp{pGpW0GGǃ' !&d yBP,TZZ* *BPm.j"J7Ь\!(JVVVֆօ66vv2}!9t t(t$t4t1\ 7=p{# {}3`x( /   ooo o gr@PHhxdt\x <!"ˆ"H0GEFDJ#eHe*>1R4D"͑=H{#Dz#}3`d82\G&hQDEȁȡȑȹ@d(r)r%r-r#r+JDQE=`4-΋..FˢhUt}tc6Zm6E{mhG3Fgpt$:NXQbb $*GDEDFGOFOGECK+k[1"+) -cXql^lalI4VUƪbccXC)k:bXO7; Ɔc#xl"ċ8wOŗƗ㫈ع@l(v)v%v-v#v+NqCx0ƗKexe*>1^7ě=x{#{}3`|8>_'DA(aJp GODbNb~bQbiby<*&QIlJlI'O& &aKxD,QXX(M%*Dm.ѐhJ4'$퉎Dg+ѓM%$Hb4q=1Hɢ)%I>)$9Eɥdu&)%YlLL&&a$iKzd,Y\\,M%+ɪdm.ِlJ6'$ےɎdg+ٓM%$Hr4y=9HS)ť)>%9EԪԚTu&)%UjLLTwXDTl|QZ*M*RTm.ՐjJ5RTg+ՓMΤSHj4u=5H颴)ͥi>-9Etu&)%]nLLtwXDTl|Bbrjz,}3=YG7kutS9'ݖnOw;]to/}&ݟLG{}c_r]nUeoշ[u~vs k:}ݾ^_o7&}S߬o޷[}m߮ow;}W[_~OiYwU?~o;^?'S޿_m?W@i"P 2@'.h__-p ʃ`MjƠ- `:Xl ۃ`o?8ǃLp68\ .Wvp7< O-[Vl-K$K4aY6rl̶l;Ž,N;.YհFƺelĶl' ;̎$;ΰ<.:n>{9{ކJCPm!*DOguD&Ãhx<< τgrx5 owq4| FJ#Hm*BG<6pHs-D"Hd,2#!2Y,EV"kVd'9EN"guT-VF(UEQ>2F#jd=َF#i6bsRl%ۈmvb{Q$v]exeqU\ę/'xc%~7~/~? 0(XV;ǮbxE:^'dqO\!owĻ=@|(>Ot\KZ|#߉GY"~% $&T }’`D8LĽăģēijċ+Y}6A$'DC9іHt%z}Pb$1H鄐K,$+Fb+K$'E:)K%+HM%$}p2%-ɻ{ɇG'ɧgɗW7ɷwɏd<%ɶdG+ٓK$#ɱDON'\r!\I%7[ɝ^ ymI3i_:NstKn^~AaQqIiYyEeUuMm]}CcSsKk[2}g3U d4N Bz)^Ko;A(}>K_3LY2dЌ*X2LƗ g\1Ӓyyyyyyyyyyyyyyyyprj8pFƹ\$Ϭe62[^ s9ɜe.2ל+*9C9,0r\#qC{=qϹK{ýqG}qMV-VekxV5fmYW6fٺlS5۞vg{AY=wquV-Vf,UeYKl26f[wOOϲϳ//oo__߲ٛ+/ʗu|[!2R$v~>~Apُ~1PĎ8eF2600 +Ҍtv#bTq# ?I ! 'ȟ!_!@$TA!5ZHi!  B!!0d2AC6@6B-l#d B#d;?Av@{ YL ϐאk1qd ;RŔL-<4y0̓iL`<4y0̓iL`<4y0̓iL`<4y0̓iL`<4y0̓iL`<4y0̓iL`<4y0̓iL`<4y0̓iL`<4y0̓iL`<4/`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:`:i ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` 0-iL `Z0-iL `Z0-iL `Z0-iL `Z0-iL `Z0-iL `Z0-iL `Z0-iL `Z0-iL `Z0-iA4*de%w]N|o~78x߾*?8PUU5Sޟ~A|/y+ڎ;Hd(;|;_|*Q jDm Q4֡Mh+ڎvh/ڏ(:NtO*n.)z^gR\- dMa4X,qX֌aXփaؐ*/]j\Q/LS?ekTƢa4>MX4]=}C#YX}>W_o5 MVChH 5 k8MYӦtiz4}͐fD3i,h4+5͆fKh4'3ͅZ+Ӗi+ۆVk-ZFӆImNۨm>>>>>>>>׾оkZBKj)-hYm\i6mKۣh#1턖NkvA]Ѯi7[@{=ўi/פ,#+IDI'-$C0$sd#B%C|B>%K|C%ߑz%$G6dAv=d9@#9A4)sDkE{yDgyt:MTuº.kԵ^^^^>>>>.e.]O7ҍt:^7tsݒnEmvt{ݑDw]e2}^|#׫zE}>-{G'gW7wO/oKAn(7Tj A#Oy^K~CGBm ĀTb` >Cؐ4 ]=}C#cS3s K+k[;{G'gW7å(75Fܨ160FicްbX3l ;=Ápb83\2cRjTF1acҘ36[wOOόύ//oo__ߌTn2՘pd4L.S5Mu&Si6e#xa6LeJbBM*d11&)lJrFStCɩrpJC)TJSuTJST7KS05JS5#*)B),C0rT#BݥQCzB=QϩKzCQGB}QԍYn.7Wk̸Yc6mf9`:sn4w{Ays؜4̍]=}C#cS3s K+k[;{G'gW7"[,5ܢ-6D-iKjitZ-~ˠe2jLZ,3Y˼eѲlY[6-ۖ]˾rl9-,-,-,-O,O-,-/,/-,-o,o-,-,-,-_,_-,ZnXqjڬ.ku&kiZau:iXgEuպnݴn[wCznJmj[[ZY[_X_Z_Y_[XZY[?X?Z?Y?[XZY/76Ve6h\-jKlMV[mmöQ۸m6eme۪mݶi۶mc۩ve+Z;a'픝{=nd7wO϶/oKۍ]n/Wk]c7mv=`:{nw{A}>nOgy}پj_oڷ}~j?_oRki&iiqfOVolbjfrkhFFtDt'M =L$=Eг}Hӧ9}E:JjGpA;<wpGr8!Ljc1ӲzGQasGԑv9vGw :qǤc1u;ˎUǺcӱu;ǎSǹq˔2L5S P x343mL0}3Č0c3ӌ1 ¬1z(f&ig:ngafg&)feEfYe֙MfeC9eΙ+YpV;ktRNqθs68mgp9Gc 'v 9sɹ\sn8;=y<;۝ng9v:ǝ)s9\t.;WMs׹q/SGx$eE{սtowC}rzJ=jOC{<pOx<!ψg3=3Y,yV<xߕɀ.ኙ~绮#xzL:ғSt1]OLIK/L/I/OJMoHPdv:5=>}[;3t5Nߝ' 8,2&>)-#+'/->}0}$}cL$όɤ2AfBfRfJfZ&)fꙙ9y%U Lf 3 gtfPhDddv̌L>Sʹ3wg,,,ˬ̬ɬllȌ|8i̗3f9s%ƳclMgzvfvNv^vavIvyvUvmvC/۟fYݟ==========]]]]]]ݔݖݑݕݓݗY===0q/_g~1sJ.R 7!7)7%7-sܜܼܒܪ܆\_?7 s:?w(w4w"w2w*w:w&w6w.w>w!w1w)w5ߕOEfvvd>}4y׹os~1T>OOOO˧|=?3?'?/0$<*6!ߗC͟ȟ̟ʟΟɟ͟˟____-tqBP8i9) c BPPTRVHzafaNa^aaaIayaUamaC_(  ]_8T8Z8Q8Y8U8]8S8[8W8_PXTZ*&c㊽ʼnũl\lgWDf,|]}υ+H1^SLbX,֋3s Kˋk}@q8T.RW)Y[W-M,M.M-M/eKR444;2)KcJRPPTRVJzifiNi^iaiIiyiUimiC_( J%]_:T:Z:Q:Y:U:]:S:[:W:_PXTZ*'cʽl\ngWWו7wwGʶ|||AdvyJyZ9].9y%U ry|QMʼʒʪʆJ_2P U+rrrrrrrrrrrrrrUMVVU{SӫjڬΪέί..nnnTm@pXGOU~U]Okhmtj_:PUzzzzzzzzzzzzzzUKzkkkSkkZ֬ͪͭͯ--mmml@pXGOjվ}U]O˵kh}tmwϨ#kkjGk'j'kjkgjgkjkjkjW]d}l}\>>>>H׏?TYWoT\ֈ6F7nmoָqGƌFQmw7i,h,n,̮____mt5qFQn4sK+[;{# 888Qg/_5i|SrZ3ݼ9y[;3fnݼ+2qL665{Sӛfljmo.j.mhnknlninolnm4m@pXGO5h~]Okhktm[wlh[Vuwւֲֶ֦֚֎֮֞־l֑VUn5[Zs[[ZK[+Z[Z[[Z[;[[{[#-:::Qg/Z_i}SrZ;ݾ=}[;3vnݾ-۾}}}a_nT"'uKxI/=1''56 0R'5.~^zR/= zKO78&ԟғғғ^zRKOKOғғ^zR^zR^zR3KOғʄT6 'U /=rxIUKOKOjfxI/=KOjNxImxI^zR^zRKOKOj~xICxI-/= /='ғZ^zR^zRKOKOjIxIKxI- /==KOϿ+ᥧ?KOs-.FKO^zzKOo4KOg v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ`g v&ؙ FFEfEn̋,,,lE#Pd8##"G#'"'#"#g"g#"#"#"WGuJ;jܨ듊Z_nף nz>cOy;},w9>O tw%~}gzׇ׮wTW/뻮~u;=ݷu}G3vt/^ܽ{eݛuս{_tO?o+H4MEh:Z֣3s Kˣk}@t0:XW,MMMMecX36+676?(4":.1%=3;76ñcb>}"Uwb?.Ǯţ[o3>#W{ +k;{2G?BGHfG[V>ISt;},It@w/ӽJkTRE55RG=}oMzEѷa=BߥG{}7Fpqa^ (o^%zyK+zyW]˻wE/^+zyW[;بcr l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F lM l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F l$F ltc>OWj ]Ckt} 1>N7ʹ>AЭt}ӧv4AY>Gw }/=%:D_{+t}T%UTSC-u~=@ߤ[}#]zGqH`#qF l$F l$F l$F l$F l$F l$F l$ l$بc_$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6 $6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$61{ z]I匿t5}ѵa>BGHfG[V>ISt;},It@w/ӽJkt z*:t?}o҃-zMw.=Jߣ8 m$i#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6Hb#$6؈'$6HvlԱ/F )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF quF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF )lF ݘtU>HЇZ0]Gt}nMt3O-t+F)>Mwg}]y:H_t}ї^ G_5:BPKuA7A=Dߦ;}c}z6RHݴF )lF )lF )lF )lF )lF )lF )l3F )l:6`#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#7i#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#nL^GW*]MkCt-}Q>F7&'nO~N;3t>Kw.</EDt/}aJlz:Oߠ }ozK1>=NCiloHc#46Hc#46Hc#46Hc#46Hc#46Hc#46Hc#46a#46ul FldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFܴFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldFldF7&~/]A+t}5!>LGz(@tLt J'i?}nO:@;st}n"C_CeBW0}PA%UTORG=}oMzEѷa=BߥG{} 627mdFldFldFldFldFldFldFܰFF?p:{syn[pjOS|N;g<<|~A67>y_;D_ h/_|}z;vڎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;{ӎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ZhŎ;ޘtU>HЇZ0]Gt}nMt3O-t+F)>Mwg}]y:H_t}ї^ G_5:BTQM uA7A=Dߦ;}c}zv޴c z'F-vbG-vbG-vbG-vbG-vbGvbGs~6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6r(|_6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#6r+}t%A>D҇:]Oct#}ni}n[6$Oi>Ct'}AM_{KtLW>**jj7 zIҷ!6=LߡG(}4F6ra#6ra#6ra#6ra#6ra#6ra#6ra#6ra#ױQFyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑FylMyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyl䱑Fyltc>OWj ]Ckt} 1>N7ʹ>AЭt}ӧGUΜ} MلcDc@"h!<QBb1ƈ135EE\˥R.R"עU"*R9ğG;={.\>ւuc"qp1|\ >.π 9p%< |\ _/@ *|||l__ׁo F pF pQܨn7j5F pQܨn7j5F pQܨn7j5F pQw n7j5F?ѿ                                         ]v#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7p#7r8p<8'np*xX NNg3j~p85|p|Eb p $| \> .gsJyp|\6SWW&Z5u p&| n$FB             HOnIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIYj7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p# 7p#牏ǃJp"8 NU4gtp8g9\ApX>  GZQ| \>.OKer|\>W/5K`(@Y(|||l__ׁo Fn$IIIIIIIIIIIIII H$HF?ѿ)))))))))))))))))))))))))))))))))))))))))]v#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7r8p<8'np*xX NNg3j~p85|p|Eb p $| \> .gsJyp|\6DWW&Z5u p&| &Hi7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#7Rp#)GvZ@O`ϲ_ID${ޒ86ro$IʉܖL `y=R~Ik%\F{'I08'BrE_m$=r`V#Ȥ7|o13-<8ޚFΗ8kyK.O\<6'ߓ3Yg`oϾE/EXcd4xz!FƸ6Sq3OQAXny<5EOA'TH0O~˨ߞw~.ϥrwygs94o`ϼf7yɋPfzyGS;{_A?}󽛩+ﯨQ2Ko.f"3b&LbfxŌFfƿ+o YmaeZthZj.aFBNf& MJa è?a=A|zEzz YYseyy /YT),a Z/[/_^%_^'[ čF/_7[4G-Vk+qNa cCi$vw[{=Ľ^>kqx:@%w~w@;;(q0K+chL:,@ccP|Ȣ~Pk'.~b(I꧆BO ~f(mCYԿ8t1['tI=C +CWQ T@NԿ:ԅ]Cݨ=ԝk߃u/ ]O^/SO/o[_FO5D:cBs|edyP=7d*7dSyC ^f^&֑gyCoQxɤNØb}cñ 'Q?H5ǧK(2S1UMbƍW5v"{*vtiS8<}/b5u28+%bY8gW.M¬X:X:ڰzv)ij{<$e)E-֚ey:LvL:&]y<|C-]oOIJu/.a)̼qР~,Y,hMYZ}/Kf9*})RVX*k:Oe3q{MVp ~4qlMp?!)x<~iz0ytD3 VUfpxľm]&x;y;{s4>h(q+ƺBv dY9*XvGN9Ul̦T:u1̨hƪ~\i3flOUױ"v=zbևe7~l *`VZ^VfފY݊jٿZ[*XUDljhݿ+[oH72aEqMhE$I|*%NM)L)I)KLNMOiL٘#eSpjnjajIjYjejujmj}jcS P.9U Re:TK.::H 7´ʴڴz~1mGip8. •pm>>>HWWצק7oLߑ?p@F8#70$,2:6>1ccƎ3N mSئMY6՘?wږ^Gy+MaL~'ΉGC+:/-·oϨΫ?gճV"Ѱ;:͞I1ib=NܘGUk#rI/ :wx9G*Bw8qc/gbfRHs)l:El[X[6ml'OQ}tRmN=1KǑ:Vɉtw-qqKuw'8HE:tӾ[F|lZJʕSbleKX=[l#vl?fǩ:q#`$a#5 BQb3;7;qҽt|cU^grb2V:ї}rxĉ'PN< :ֵ4ggF?oװYձl[^al+{aﳃ;N#Fl0PcQaL2Xj0댷;}q8aǃ<3NәNGOxyf;Ν'=Dsg[9w8<:wb3>y\+h;9Փ':#'eTdg>881թvLq'7:1ݙ<ùo~6o;";1K\NpglKN߿k?N◗E[13j*W^WD<_ JDINz trӾtnѩj%÷gU::+g^:l.+uϽk@"G߇+f6=MS(pr2;#t|aeD)?:&7:Uoc11? 7hs}G+GN];q7;;gc:!z 1ʔ[6n-tyݢ|WgyZxҷu,Qx fzFeF?wF'6e9~S1^Ɵb1sz,"]o:D]XzykSKutIIWM+[-zq''yg՝Eя+yPOZyMQCz.Mײ t<uwhY؈L?p{T~G1v[/uMR/?uo:bWs"ѕOSQsYc^=wdUYN6mǝ:ygzG23uYKG}VPG]nA4Nt*i̎Nxautt}Hq]5QbNGM3cX`~stxǦLK_q:'&8ݼ(A:WE2/ȉiQ`,#ml=±(ϴ\yGWߕOr\ZWskVݚӶTjW mifYq[G,=V5bKn:\_q_ qd+{{ :tIPǢ(0/ۭZ[Q '1[|\ :0ҕ'e|ruG W~0:Q}yumE0Bs{yQ.j>/Ȉƹ#O(畮<;s嵮|+!kî+u|t(s\yW^ʗGov凢Kp]\(W^]Ww2:1^켕+6=E/w]y+_7ΟDW>Е/uϿ+w兮ؕv%#\q]ygWÕHɡ[mg>xy^`[h!/ b c{\B\;J9u|ŭV|5ȷ7u htko-vZ^2KNL9ۙ -ڨԦPs-4TZ%o.t4lqv[njkBuS39ю-3Ŗ9|ʜyMؚh~ms 5=l햶|vs=+=+%H ~634vX~5vX{mm;.WwNuEhyZm~Qp+yUN- \ЏZyN!jWPkSN@¾z,z.Au9-`hGʊ @dI-Ч7ݴ{ 7Ł^7qA\4x;"-mO}ډhau,mO,{Ԋ 1݆{^B=^>|(m/[nM؈ٴaˈ}Ç5ݞ3jcL.aJ)#)SjN6e{8#sFьCgX<9ռyC筜C|hWUSSV3fÞK^q󛾧Vգj3υfבg.4|ܓ=Ob9Wy"ZtXsaAj8n}'qjަ6Q}=RNL74`ک\j^sGڵvu}AzTYΖ\N:ѯwa8i^uoUj\σO'UBz>yٵɩ?N}s]Om˹xR˔ #.<k-(gUJۚ:m>&DTld]m^SuhrhiuzuAI^Ycɰ:HkVZ3_}(9^۰w1ނWh/Pu0H͜Iۊ3ǣW/+}-X5ϭVΩtuu2jcF\=mߝpSƵz}{(rƞL3R:l*AOӾMo}˳O J2,(qv~*viv\Pry]bYrcUh nX?Ԉ|{lz=ߚjXt;b_s)_ǿae #Q"Zwhw?ך5>zW [\f[z_]aQ#Zf[*V;fsz۬P 58QNfY<7cgtz辇,~C ƳnDbfVmEͰBx^ݚJm]ȚuIoFhvpA5xNk_Nܑ2^ܲ۹+y芝+-mst>s^\lD#A^g'chMڮo:ˮnbCU ٭.փgu-bnml3'-a=>a_H7n#Ӹk7>30`GF˜dLa7~f,g'zjactc% CFc{-}_-0yWB _gtyѝ}kx?~у">1o3nw;~5n8&>O1*>(3ˌI|9ƘFߐ_37o[xfnj8Y2i6fhc͠L1̋lcc^j3/3;͎Ɵ++̫C,41>1{5"of/q,6s9,3'IdYe̜e>s9eӼd6\cͷ̷x '} ~ƗKg}!_i.u2}Wm|]}7}+}]|5H#G;|7}Oc|O202'^hN{ɜ{yoms?}[9mߚGaߟ|%RSO63?72ͭ"?<l~j7?0?WG̣jl=?߿{ZD OyOпƿƓTiJ{ _<<**Օ*ETPT\PG2".FPd7PQvC $BM[ IHuI2>;Ͻꮪs*xzK漏{}{ @}~~~~>D>oRG跨9u~~:NZV}NOQ'S$}>S_U_iB}:C_/RsJuF}E_U_Թz~Bۺ.Qflz=^uq^]1*sn5;{ހww oP {>~};N;DDuww%tO"Sa? ^0^W5 `:OK n]p'AqWѕJ~+X2]nJH#{OQC!D~R]j!fFJ,qևGXW{ 0A&6hhM֋-ԋ'9z3Oyy2ϝs+(w3Wr#`>&ǘ5+ 1\尬cuJj=&)mɬ}5ȬfɌm?#SyÉr5u3tβB%f0+*saHGlvn{aBB .8ep0TġV lHC=8t\oSpEJ%}d ǀ< ! EP %B z RXP UpjkQ)g=Cn!G& K`),cw8>Wy-#yȃGG<c0瘌yRXP)x8תjxIs;hxܼ\X@ w,}Ʒv#Y godf̌123Ff#3cdf̌qwLs4Ls4Ls4,Ș4&cdLb?D0"dM51&FȚY#kbdM51&iLdcù4p-[iJT WbCuTwPAuU-TP4iMb ӨC*2[*gO'~I?t){eOʞl!5[HRԬMԬMԬ~ڊSqj6NƩY7oN˩2괜:-SF^#0Vb>ڕ}3{gw;~N?{gSqj1N-ƩBjϦ Bj.gk~j%goI!_H9_N׊' y~?cZl|pbN|yd > JTʸR*a\ mc1v?g0vc0&2^5=B)|՘3efzp}׋>^t30Ӆ<'7-梫> O < yx+OLf<2Fe=ص);w'{(I:1Vr#LٽqOgXq#;}F׍+:ά3+:ά3+:3 #1 #eF4i2dH&#MF4ً1#/ʌ4i0`H# F4i44r /oFpb(|wp˳g7/S^Dk\zî>΃\B.0.Ka\0jp\`(p pȁ[-X xރaC O3Xs0|_q,u !~_9EF][av!v.}<($+l `;쀝22RjmQ @myTP>51|_q~3G6_GF_<9 Ά ;pQϹ[z!<6X\y\wú*d!Lh͡ ZqĭN:qĭwXu֯~ݡskX2_97!1=}O@Mi0fBί,?'P9[vfln+fw#^t u\BPDž:.FPDž:.q WKh v:@G3C @/8zyp> ?\0%p) rÕp\ op 0n9p+&n;N F TYaL,xfxxp.]o"X oX -zJ' `5|;k | Z>u@uk]_ ^ ~͐ ۠vaHt+kUx*Ot/ m{dٻ\#f5kYKkskahrpSc\qv. {yxӊ8W,3>%;fkk8΢΢΢:!Ml򈧙4:zOG %+t^ \Ĺ9vYu]anP! 4`B3h-%FxC3t֩NuSCw=8WVv> Γ~݉Rq{~+np+Xc]]]}Le `:Wm?ӵr\μ+-X 1w_9.]Û2X+-X  V˔qL #y';`o~}~}=We5]_sNw,0a&6lb&6lb&6lb&6lb&6lb&6lb&6lb$}7-0rV nn YC;_^_sUyľb_CyĞGyĞGyĞ,y_!^XWc]y+u屮<֕Ǻĵ8ā k 'Ƞ:YJJXI2:e63]LOvՑ]uՕVWJX] q&3A Lg8ę q&3A Lg8ę q&3A Lg8ę q&3A Lg(P%(P%(P%(P%8ףBx =LE9DֹM}Q* @v06چWjjFjFjFjP#F5@jP#F5@jP#F5@jP#F59999r "~'q+"FDG4G|)B"th??u"Q:XG(bEZ ʏՉ~q#!HC{sCrESaL 3!e FGo}FGo}FG_}E}G_}E}Y6xGkmjj7NƩ8vf6kYmnv۬f6kYmnv۬f6kYmnv۬f6kYmnv۬gWjL\LDaz=nƍӸq{˸W^% /^7_q4&0Q2La e(D&0Q2La e(D&0Q2La e(D&0Q2La e(D&ʰHBxo l%GT@HfI̴o ,kkmŻxV UBD"Q*DT! UBD"Q*DT! UBD"Q*DT! UBD"Q*DT! Q#3u|QnߜŬK#ޝĻXwW[bj˕%ijxvNI<;枀I$y=/K,.{RᎴ{2̒Ql0zL ӽ\r|S@,:d|` ͠9 ZCh =t :*4B*4B*4B*4]!Õp\ op 0Fǣ<O@0q4<xx 0&dx B%s~T,w/5,YKԋpp1q8iH;L&fIäaҨ;;;;;;~7~7~7~7˥riv4\]..fK:렮:렮:렮:렮:렮:D4{h}g82=ɝ[Ѻ+S>UcT-oo>>Dƽ@nb* (v~ţ(E(G58(:4sph[Wo68 MdB;snLk]@&5ZZZZZZZZZZZZT%9UINUST%9UINUS@'= tO{@'= tO{@'= tO{8'D"O6U#Zܛx,g5PB/XOX-O3z\0/9d^|/!P/mdo&ofOΏ;MMeΑu|y\+`75ZOj%ViT=%Z'PUQ3Y(YxmTQFJ,Eb,FR,F,AR,KQ+QKPKQ+Q*QlԳQlQF)lDZEZEZEZEZ*nR*QF)lݟ_Q*BBQA8y6}LCvI2l<>g>g>gp}~J?Cψ.eѾQ=UC!:b#:&j&jb_j-5zK ]Coau^QCWԸb.p/rol[슿,8BrDNp&tB pPqq< ycdK؝`y|] 5|2HoC.sPwӣvOq4r.pCcRɶ,>k)lȧ29ZA9lF#[V:IJgu^ϱ;sJ/ |'G>Lg rq-rʥ3.39^tJWT0e㩌gT$>Ayr7S#(cy*9E,BN%dI.Ykr}&k0O3XK8}9`|;)=Xl9l §JU eN撁<fn|%g_7ܷs?pߏ|} 2o]>[qdw.U;8(rNzQC Α9hH1gyhX@ǡj#7'g39 3;SMc@@`|Ϧ{x4 gЌ͡[B+h6l|#tޮ\~~;tt 5v&^xm9|-\:P:P:P@.jyźaU̿|N_dv3/t5UƞkS?QT^*HnS1_U*OD[e^.5=;m6s-_=عY3^b";nۈKqqEeEQ>PP!p7ED!"!K K'T:˄@ө$$!q@p|?@@"m`oV7+`YϕJJJJ2X$=/KT%7+fYd,"|.>luu5"'m`X_...CZ kbmXW%k 2J2\#b} >Ph;#Ɏdg3tv{d Y` jrԱ/Fu)̪ΎJaG>ggkkn 3t sQ.c.f1u,V|hG\c5T80] Wms;U5~tǞ:YCaMO(pI=n(g&djՋwG0L'{;('PFs/~<c~"w6cl؁ ;uwGtRݍ=؋8.2Y51-¦CTMTa} ; }C[A[AWA_Us>*T޾wey5="O2яEωÈwzB[yHӍvVъKiog#zjk:L&uz/Fbw-72k ^Z{R22V=⭥o[,rR^Tn>ǻx7]UC=Fcj$ C)+ 5CT83a'&$S֒)kɔ,ߡxa2]LWKEבh:t&#Ւjn:twV0laI%Ԓ]jU<KMrЫ mGx}֚HrDAVRՌCͣЏ\g?~ZgOV{<њtq,-xD}5f@+F^ȫQgp̄,ȇ`tU3jՕv=2z(Om ݋okNrn?+u|ޓu`5քOejD-%>ĦV )b~V*PF&3 bVQGuzBv} nB& fB!J&1CEEBQP!Śz#VOo7;wؘ᷃y<gRݕrÇ~\K|-(Opb iSL;eZ1^+kxOcb?*#xobQ7F1(x/bPUY c!cbƘc6JZuٌ'UFUK!Zٌ%d$Ì#qd3BPC6cȶ/ݪJQe.T<0J%E28LzA42G2}p!\a .7p +*D-\ {\Op7ƪOg9l/`m]| 62zބtw`(u7EFeQnT-P,Tw2.3aygdx2dKy{C bί;$;F\BXŜ`μ!y*Us~T9%#N(8b\<:4 C h 7gq|clx }|j)U+ 6m7΃F p [63FVVV 5E0<tIe5SYͩT/lsa |x2{ޔTf}{v@! ~Ap/ăA{ ?x#s 8^: F0 VVVV V 0^VPj܃o

5>5>5>5>5>NM e||||zB5SOS4<s</&YmRΌNgF3Tf4MeFSTezIfVdf5YMv&9Ű^e o۰ށ.JxVZXHjpL?Jzr>VwοxfA!Sm7hws"_kS%SPn-SֲQ9TʧJ-Rh8cj隢Z< `:$c 3`&, ċ ċ ,̕ ȁ\ A ړYĚ$w aO'LpW(%D|nP-<<-t2ӏX%S&x.xI"~$?Iďďďqďq֒g:<$xρ"d$̂a,2od*>~k33IVx U>UZKN\HC[5[5 ݡ{yh93%'!92w$xL`7>}c7`6́x}/+0^R`a ,ހ7-xf$x a|Ƿo?vӏ~c;N?vӏ~lcF?6Q?O5k>vJ)d}H[#D3htN4~wN,҉f 4DQA@DQA@DQA"_+"_+@%F Qa@%F Qa@%F ccc8; <a<e,u"u"u"u"u"t0t0t0t0t0G4M}DSG4M}DSG4w Ȼny[@-P;Ra%T{"o{I5ɿ&$_kMI5ɿ&$DIDIDI l9 J0 CpXWWWWWէէէէէ 47@hzMo 47@hzMo 47@hzMo 47@hzMo 47@hzMo8nQ p+k D2QL D2QL D2QL D2QL D2QL D2QL %Ҩ%RKlJ-Zb+DDDDD[snأ|d1,t Q;d!d!v6!hKv;)9'Hv5mj28j9dYmϵUS3LlՖ,&i^Madd)J'd9,tNr:YN'd9,(0J:(0J:(0J:îbR`a ,a &s&sJJJ#Ȣ>,#Ȣ>,#Ȣ>,CgLi3Mt4љ&:DgLi3Mt骑(B1hF`OǐdIAgPAJR%dbR)d1d1nlrc}0]jpt2NERQ(d~̯SY,N=s'罀XKD Fg ZQuQQ:G#HRy<(1(1(1(1⨇8!z&*cQcQQQg D%n#Sg|`+Sg ICe<%uU (#8ii[@[ӼW*5quI]`R&uA*euI]`V&V&y.)ӨLx>0&·qQ;P;&p|&5}/*hz|&I=aROi *=uQ[&ImaR[& i i i iw?.@QM QM QM+PM+PKPKPK+PKPK>j}Zߠ7 j}Zߠ7 j}Zߠ7 j}Zߠ7 j}Z@uP]TW@uP]TW@uP]TW@uP]TW@uP]t1\!iqn}/>kc8/qQhZ3s.mSekJ>5b+ 3VF|Iv3 !(!;D| N(ŧtQ|:OG(>ŧtQ|:OG(>ŧtQ|:OG~kfU&(uo{U/?α0V.6 cI+І5"v@iS ZzB.jvtZ%Y ľ 2~o?c% U0D/WTmlѶшl >vMOsV&}ϡw_*N-˵ lײ^-[6iʕ|b!:u|m_ݴ^H$-+<'vk琽wD&+c(:y͹SRERg j]$h[NvRjZf|@v(# bZդ#;URr&x!~С 4fE5A'dzxxfM6K) \x!~h͡V@v:C \='p:­p0f,xO< 0WexëJs^0T>r>'AdcV"F:f"5֨k:jZX4_k=}/Z"]h#׺uEk]|O<.KDW7 #(LA2̀ކw!V{ އհ:'46GRa lm1|g9l/ Kֹ!9 {<B>@s7&_[xZrlݡ %s9гR8gwxx)\_bX 0GW<*t|߽L)~}w~}/ls{}/+0^R`a ,ׁ1ހ7-x:$n` PHA2̀0 $<O3,< "a̅X)H>ϓuM壦>GEXGk9BrzUM* d~R?Ag٤~6Mg٤~6Mg٤~6Mg٤~6Mg٤~6Mg٤~6Mg٤~6Mg٤~6Mg٤~6Mg٤~6M[_bNPFY#Ԭjuh uh ug6ug6ugs>:笕}d3,Xۣ/`/R-[L .B  S)HdR3L&5IdR3HS,&YL ¤FPꀈA[Z>h 85ѿ&D_kM5ѿ&D_kM5ѿ&z5^WM4j$n*woMi7#O%FSfRπRޤk tǹSNutY]mQwiKOU;Q%]v!zup }K-:sJZziϲϣd_\ǽq-)׾lcJ====<;;z;MPT(h0o3L>DV0)d3vmeMTKGTH;ZP#w̍gַiK@]-TӏLDɬq]xkfsJOVvOMbdv'OEQ8!yh^?*4~ h@xZR (Re覇ɚӇ%a֛q3❖"vFjFjFjFjFjFjFjF&SrZ=;Y`c#q6]S;OugO%fm-kxc7Vxv(6F0Zx'J~<ĝ)=Oc'd#O65l`W~(zV1hF0e$ZܥFqjay[{u@pϠAdRZS.튂:0Fޅ9%*Us"kkkkPFu`A2P=Or,7^JzOX;Y׳Noޓy2D֐,kQWAAp-S]oj]1±S=}2nLAêu㌭=WCri^kk&-?I6+c|t;`%_1^%]O6>jr+U>r o-Ҏn$6|/]n.siϸɕLgM5%3W*Z2JDzRVcYD@O6k#8>sA ncZ7gE "cK oyQWQg]5RiE밣P*'Ow H7Et-ҟ -NKA|1y̏֞ڞe>qD_'m9USWkj}ՁuNhsܙ{]w.zpޓ{כ|r%CGvؓ9]9pБwuzwz:aVc-w.'w\ \i TgkI22WWwsރ6=֋Ͻ{SRAco.~kNWw񧝌5a%`s;ہtd;9ָ߅].{p'{q7cMޛնNr!wJ\ssgtMWwsiӝ6=hӋ6l<_۩ay;Zc;t۷r`65+J![q*fS5o?ZT_6xnOZ#|F_Z_ oѯ^y֌ucG>hH:Ӊvv,ZET }FպuѨQ&W|{?&2&u% r#x|<^x3׻Ю+mw]]/fS\{}V(ߠvٿ[hc1Jqz7R%ڟE"QKT?a~^ꉳu?9?v|*Oo+QNV)>f)9-XJ3;T_.a/vv筻ayV{`)W!'iŁNjf%xb4g[)SyC =x6Ɵ8޺ R;;|ZP(*(wTG֙0wռߖ;JGOWByGnvB/u wݒa{YH eLI~<1z>EN{:*_AVЗ v0N}ꇶߞ %TSwX'ؕjF~"r3.],лT3TqiG$3Oxܪ]cmfw]Iy}l^/Nړ~_R-_lN}:5{ڝ4#Ox?~[Eּ?Ҏ+~d58UucVkE_?s4x7jr";7v.{+b=wY%5D2Y)`Vu}vgT>Ɠ>nvHZ!agN?MRBkdoX?(3fG*CdkA{GVKNTw'ԋ|XY]6@)/SU\2u:pQhΡ[s>ss4Jv;K g\= ;+Գ*wyQgzlP)5Gsjy5zEuQ)ڝ]j6JG-v}P-ueDnnllPmnO@ex#*;u*'exoU۽ؾU]U3S=aKI2*`)3+bBJPA#>1`P0QE$@̮ħ7w+LթsK'-'Si>SEs>__E?~ZE_V}.Hԣҷ"w =AOz$=Uiz_cV4t$1&.N1$&䈳L'zBSIg*BŚ2s9[\n*3 t3]\'kĠćbʹb}>*fevxl79WY|a$2bQJ,MeafXQ|:, +5a尦Xk»ûpN 2K&NVHxrSWV}qc$zX(qt41z4'I?Q88z;>}D/ VZ@K1ƖU#~-^gH5h^5Bh+zdbH=ҢG^@BK2rU BʑʓKRʗ_+q-B92?ԝ$,ƏO^ 8qIT;zi>]t1BoUP?먲LU-W_̽{1b)Wwҝ(;.CWts>>BAFqRђh9Bc&1ӋɔOѧP-}*FQ,E|@_4>L_FR՗+(JF5_G= y !H3TC7:RD(= FHsqzZ2^G 'D9D䚤'!~rH9MOC̣z:>~̳E"z&Z~}S2?3>/QWzUՋ2|'_P =U?&ԫIWh:)Ao@F-٤A_Qo7YoEoA[Vt ء ,h 4M`&@X ءf(I);L!0,0?@tBe.ļ&HL292ʱ_ۯ)~c~kv](߮+* ?!ji~?#ήBn@vjfJح6I_~l0ƩBHiÐ*rVBnTV[VBa UQN:5H_30>ND-{kr8%O CCRCCb=FQxyp!ctSnn>F{>)nn@3g3l}6lo!aˁt1OCRp vHgc_a6<8k*~Ujů_; >D|P|bnH1)$#NXiصȒ dو& eSb;L У $H6H.$a 9a^4;rUQ %8fdbv܃2'kJ855$fkonE]_8>[#yxowڭp~Ͽ*GiO֢_FKۮo=nPjr|֞˔gxhufF.[+Ds>'PzT]MG5tՅ梵ђ \nbOUmIrhW^grhU}uxgFf^ ۽P0BӔ,7GV=_s][Kq E)PwW_^^t+7mWm&_K;1 G4a/2AyK.`(1ua~Cy۴OE/GOrIg=3X܄IbN orHV@k1}vDq);'~Kkmx,s^4%0V>ew:s~/|/H-nw(?[ 岽Dzڸv]&mn\ك>sO.mq[΍>{#y;Bj]0~L.y@]{?~e)Kq܋Z\syc׎?ٜocL:RX n?1<=HZ)?NR/A랊b>>=B\o 'Pl6P}/ve=J۠C~k9FiEYvYB2q#uHzeD>9g]c2]J{[ ̌AkODE"F}QoƇ[0݇yV4!7֟ ѽӳFa\ͅLܖe4~Iw1oS:ewm;K<]|.qx;Vc]\ǝ?v_ǶJ}? ?gJwwy';e)FDq}S&=_޻z&;Yeѷ y~o-aNjp;b]prKhOx g+֧A\ g#Kѕѹ{QW?Vݫ1)i7}yDSAM:v>__},hWs>bRI1]\} ?W>[ˏ\qԝe`GbbUB+h~*nzkۻ5+ݣ+wtݐën(S+:e{Ǽ[@z9<-gJvU%ݯ=*iy"wWۗ.SL?w_LKߖ];v !tVR; Aޱ(Yf*M֪*Q/ؖPi'8;1z_f+;|?v?՝힣ZR4+K1uЮrgC~/-yZjviDG˞K#Hi~X֎۵ݯo{pP J[vo]ۅ><򪕛 l6^ /yFɠvyߓ-!u6j,kM1'P8nԘvt'#VNGEWFFo@==Q,yØ]hvS;[]==42Gk'ւ}};E+Ds7y4+=zӭ۶){Ain{ta4(>z`o?ML[{3K1#z6z&=kԄ.qPv6kA/OV{V+}=qѺUNzj?}AZ4,)EԾ?u>~ܪC]{rݿs +Q hϪox6)g Zқl:3Ow*$=1{+~+QTEPNK}h s.:.J?%܈sҒ~m@uylzucM}E嶹tMmWO֍_w\ jKpޖ& })O={"t%*Ft8\ACEwq,,N'(q8nqƋbMwE1ALbH/#f&)} [Vl+y<>NaƘ1)3-6 f&g%#6s<9|a \.1+rYoˍf$7(&/1?1-1D V cUcUXX]/7 +55ZZzUccjA^XX'aKPQk$vD,3/eXuj>~LDcia!GWo{?/ (%MMsOy33/{[m3mV%V}{׶m{C~;ʎ+1v؎U}>j }Yvj;'aSεG/"X.O Aptxp~xgxaR&Q&dU(Y_ܘ_AHR,%2(eQ6a1wk!6^`4(# м\[+Ltɘɘ˘~0c~m+*i1&3Wg  ?ʌ5닁_ʌk-BmFuT+ WR'7 a&[׫\WKs,ĸggg`HCH`Eh,S?ɔ?FtY*Č5_n^n^! :YA5u 5)yggT5̥`^0 0Ĝ`b IEdb, PI9 ) `E13@"XW?QN:XMynBl6PI1؈m 6= k+¿` Jު$(Ot T@3&LPb*N*),PT*4U9ț* o*@BUD٪*FɕUe䭦VWQB UkH_KEz>䫆!%U#C& Jk"M3 yd݌Zֈo"e;%W(PUg좺VC(|q(duj?]ZT砜|.PSGu/WWAJPW~TQ]AkkYP 5% VQzJ Fu#ܤnB-`T5M-5;@puONPw&۾W ;YG5P45 Q^z:'Փ()4P39W/"LRR5j&RoQcw].bS!CH}|>A9jZ mR#5Oͣs9 B%/RkZҾS#_#Fmۤ6S1<&D89Tsuź*5˩Cu]]ujꆈiD7A MuSl!MsW[hhGpnۢvҷqD.S@8DggggggggBǙq&Xp&j8Lq&*g@MG4`N`N1'j %`zTt1eK̥H`QBu(g`3`Thҏ4#eF!x5qΌ7w#yu=dB ӂӂӂӂ]aЁfYZ~6?.jX‘Gu LÚ1$$lF o,3IbYlr},7Kcb$V1X Q(VpX%R+ʱʈC-vt 1?6~,q>>~<==WDu1CSI?0H4$ɄLRI: b{=ړɔeOP{=jiTݞnO'ϞaF{Hs= T^d/B%Hl_ fy%⯲W!;^K@{U`^7QP;1#(c`o#X;moǣ;]mF v{PD;W'ITkzR]0שoN0GfaORC} Wsyo_/"f]X]WkT˾ng#Mm߲o!m1OP&0ʟkγ#͗+\o磜v!‹"j-KT\y0U o!%0 G#JxKx bFcAx[xur|1iu|ӰӰӔ45| iL:śKII:$3Cwefpf13gf\PO{ O{'`= O{  O7ߓ{`=G쿧)SO7"d^@-E(vL zwj\q8񎋷s/^!7#o F>JŇ!<\ Gz[#X3ϊg 1CU{2 ?Yx'f›,+ǿ=ݍY0䳇,0*,G1G_7rM3uTO>^^y-fu{=oūO' {-*_`"X!{u/ f\|UfF5rοQmFEy9+vȭ2'<{T a:{?%b23oƼ"oϫ ߘW^Cئ^sj%6^j=И@S=@c@@@cVDZ8qg ,%'R63|fE3ہϦ }:yr>ɔ>r'SV]Y tdLXC5P4k$??:,`9bWweƟ͌?A.X8}9}6s.Rټf6_ uL=z.5|]š{Uc0r\uEy̭[0{.P#p[-`=e^UcsKfD5p̕+#%D=A.ǒ[1K>,y}\r%u5%@zǕ[1K.b܆Yr N̒;2Kn,Yrfɝ%T \u8Ō[j5b?n-cV 1̌Kvs⎺E13̸'3ベwdܓyp'En pgf@(2sr]n.͕J 0)iڦ=7bjnu:3`ӊNd&!fڝjy<\NcHyi(Yh~͓`sk:%;f~çs'<YgӊN[V;b!N{(, +Yt©G(6mX=SԇI@ϴmk [ ` KK!P/Ǧ*9IsfL: ~^< ^%}}a/,Ež*/ .}eX(JT]GXTp@E8 Ӏ5L={64L5{=LjX@\%R(+qZ^v T'X4`}Rf J*iG"' v,>}r'Js듔2ʤl'NS`2ih0IS(GNMX4eeҜI (}vR`_@'ٗOۗ˸:ʤ kIp}2in9H4I _A4&YBTfe.Q'XgYp<ַؐەqUv5_`mX6d_`GZn[`6`A&9 ¾I+7bMZ} f 7i0f 9q^벗*a~X`C5X} e_5au\ukqfx^xUc%V Jl+1pH8 m(W-V_Yw ucԄW.칰=6dυusam\CY -IybXC$֋ $ů7E$)HE1}K )(dEʐA9 pCPa'*R$^T%Y5yUMHDG&OMHhpJz2*JK4EIBm(PTgp:n[(9the"N󄅺D p)*'NE%qICP1^PWS_.pׁ_)_O7Y?!Y FYb[b4f=G^,W OO^bbjmkOUUGWm,փ{_U'.$Td%u#{^+aVZRd]ݚ?Eo)ʬL'߅%qjݥvڜDJUCm55=535'5?$rjK:jPTuh64j&R;@jǩuP;E9j26 _~2Im $ jS{24G4YD-_Z&UϧG%ݠnT7 KxO7ل9E*ЬwW#\TBZNF_n7[2#[NA?=D&!cOE!]4h!a^Pd%tcEiŠeE+U4Um*RT_Xp$< dѢEz̿\tZHѭIB7 Y\CѠ}D vB!D7V2%\oH}7 { ͆C/1CYi2 Q8m]=\sb'O,.'\Zpu: 5uk[[/(>U]|p8Ttۚl{mtY~[m;g@m@?m6lwmnۄm6mdK x盼v}}=ϮVi{}}eA}ලھɾdIѾӾ۾~~~f?i?mﱟ/j 7دگG;n̑Xw:w8{^reJr1pruwltPlcݱ˱̫8ew: ;.Gq1u;n;:9朂3ۙ\T9bLuS(t Ÿq& ˝K)\:W;W8978k:6gsK8[T#1r+f턝DtH}=辪tp8bj wԻDlE)"xyTyR\{gav=IړӞr3i]z|Y~U\_qҧ}>×|q_ҨX[[67ʷٷ4[f15;;k:}]^_o =7|qm]=M+ᾹLCh+èf/060m/zٸ;D#IH|WWq]i6fiFי;(? FПc[G;^BCa}g?%,S%Fhev ^W)1KMx]* +Jl,YIo1d JLIu&K^ɖzKOIcNL}%K,9]Srrk%#%J&m%wJf%@VIO`AI 7- @Y2<*VY_X l ll t7{́C@{S?Oz}Kh`+昡+G)w/EP!rPuLSe m &]=P=o  , nUd~::o]] ] n`h2t'48 /):fʠ!dӍ^:\zttttt62]Dx^\7ĭqw<2ʨ&Ux}13;/~0~8~4??/ǯįG;,UҟX%Ohk2hL؋ o"'U͉ĮĞDsP5q,ўLt&z}ĥ`jF"1ߛON.q/1䢤*ONB2L&˓K+sNrYI%%w${-#cɎdg]\>9J'o&ǒɩ.+9&eHYSn'HŢSTEjYr*RZJU6SԾxUTphԗ:iLNΧSSWRR#[DYy u>~`o C:?F8*~e~ v}1Fem~c-&B7d,yE,OLfYk:ZB>Q~ |M`^ۀg xi hדKcܗ]}?u< ؏s} 'Zx xOaXOX2=@ZJ^CPj ='Wv}EX.33-OFk߁(l8U(L0Jg3wA ,G/=Jd>~E(eLɕMF *7(cI+D[ m#Ц}HS}ŌҏD$L^/bOc1ǧ1l#Sƪ/hei)S}]fQYx-=,1}}kP4`%3"c.%@w˒^;.Fi^HYgї 3lQ2n9*18F.r0F'2?̞쮃u[(= ʱsat3y q }UxeI 2z=^/׳ }YC^Z Z ({vnqv{"95i`}c6XGFi4A2 ˱ yc`<8dN@CXmFiF_ YE+1̫E`'ۇۉ&Gd?{{I*{S\ Ogp}}{%f824Rx%XAQ~h;#I>Κ[k"7G1|a8f aIYRNf(p^<(z)vbT#y>Fdup^!y]!B߫" m*ha A}~t-Zρ~@LX510#Sހcۀh9M.{F~{yo4,A|ED'mJއ/bOnggIFWE?A?H |uarDE\q^?| f_oC7v|i["UkAEF\9N,? 30J_5, 722 7mzI8maH8dq)sD|8P"2Gq/hvgju?vWGXӏOo_1d~,ʼnÍ8̡uи /}Q2ayaP؎|n#a>yux_!|=Qf1QR/s9b#4Ko0RՂaH^/;~:;aNB$f뷰1E"ip<%o=F GoDg}#M^ihhN,}{쯗QyW\Zuw7+?Js򦝌b͚џ:S|\N;vC}߬waa3,|W m 61 y"\YF%lfI[ڂvg0*>FCA75!g@?̷ betX7@ Ie:!f^X-,dWaFg  %Mk2(bsn3_D:!9cK3U=?'0f {29o3ȩ_C ""Q7zb;mi^翃 s(gVF7-^.>q_}zСF.qaaCșOw?^oFhxU(VXج2^DD M2jFT9Y_^ W1[UO3-[=o ~ߕ3|`zx5爫ZL?Py `aI.4, 9> ӄlFY NB);٥AY.^4DŊ۸"%}'r|ĊE( HqiF>b!#L d#*vF!b/F p][e^+3{~PqW*n(",DOṛVa' r}3]M7uF֣E | e%=.?H!Tx(P 4V,o}[%|,9`#_!6$FӉ1Q\+Q\+3ʽx"ǐrȇ1Ne2@}?8# 1??`F_H8Ci>%,Z7aMX+ {1b/b&C{ث?<1J8tmB\}c༄j!pFՌk|ᰆׄb$:aɯ?a[z@5"=h;*TbzvW0w+Qwd;#b5W% JȴT6/зPie(#2F+{4E 2["5Q /cv3B_ l[pl&HCuؿzg54vCHK\~A2=W]D]KN;YiKQQsB ܫ= O*_w@\4k府„:ԊX|kP~^=8LzC](r,40vŃ9C6jAos:-4İKXtL'd3\ϢB]l֠w, #}?n'9 p 9,#]'є #6bĜThwDWcVN 1NsQ;~K9"11[ٝE$g)"*g͊cY.%ˇXCm߃>A%Mz28mZX`r@$O& <yDPV,Z3n>;,͗MF!'z}h2鿇;;YWJ'Jv!:SBo|R1Q'^AçT^lp~Q { _ՐԈ4$x Ԣ7l5'e!9?9j8Aoͳ]z!E\q)Sl#: m߆^I~ 8pZ8B\uiEa ,T=GdOCZ OSFX15j55{?FͰy{س__Y^2,F8^{.co7wkv- Ŀ -#dl ވ㝥=VZ3quqk}P$o+5h蔿kg x/ſ-ۍ nO ,sFx+XM#-+R]ybVO.',z8;/`WK|k#Nr+8!hY':P# 1EȕQﲌ+y'7_z!S=5PW6J˔56: U0 QڤE>^B*r?b?GGUJ}TnU #`: "41"""b3ɤ ba H03iDhc#2AD& +b4,tSH \[Kwf}gSoԸ̿rj<N!dCPA~iGyv#p^D?ɴ] N\7M^߁z>k@r1"4gӜOsd*g%Pl\>f52 o+1{y _Zmm"?)`|iN3h;Ukő>||N̲Բ JШU) sJڢ@é'.4J0e} z%pe_[{+|hO.4ϠA͟gdCb|5l<]g"8O=ծT^]_⌟qQ?V/nΥӵ|:Ҙ wCksLr ߉\SS47$)!N7=MeNC׭s2~zy{eW%)YRF!sZAǷYVSzhG,- zmXdmVki>}\-ik˴k+/R?=wҞvX{Q7vR;K ?~]~~i Lݢ%~=a1yz>H_B_W5zir }^zI߮_~P??wzyi>-NNyzz?k#oyk6mۚהל;oomyu]y.]nG7(mw""EHid"ّyPЛȒȲ,4<E##";"-â589t<NEDG.AO*p=r+Z?ƣ@aLN}ztftN2 (8tGWED{t'+'?zlRJ/zcnqCq@Hw;-q'l;ͭpg ,tk:~X jw@6u;.^v{Q`\so37X*;lTNc3bcpU[7A6$,rbbC-Z|{/d|PHxq͌I:b|&v>NKbɟ܏]UUzt=l[tsOw*x ^/O%>9>ܶx%"U÷S[29=3+?}??u'gW}Z'?OpO/G:ֳѴ~/ɟ:lJY ctBofMQk׉n k2 y;=˼q뙗 ^.zZQ A Xc3Bڼk dƬ52N*ouB^h=f sEߚ߄{sm?,=3+\~we1a^?0oi|Ϳ3}QHx1/2 ɶXCI/[ȯ|5x^)?tLybTh ?|KM&&%wىyᗨ Du6T˔Wdɨ:q=3x3_&4Rhb3>2, =>H%;=M% ľāđ%ё888?FDW̞ i%ϰ|]2,H&Sӓ3sEɥU5؏)y7S&y~\5w}0èXrKr;w;2YۃSaEmKIduȾ.ދe0xO٣ 7Kwo{]Y{,+LO-ɣUdtf<¾(#K`NNilO~exΑ=ISTԘT #{&HMKU}fRS G2R5:S+2sDjujmjCjyښjjNNMړ?cq?qSTWfNgSkg˾(͓F(?I{3*#GԲZ8b ֌4se̟Ofq|D|~E恷63H3lv8w‚bGǂqlrTQ0`&9 ol575sۚǨfOf{xws_ ~cs~x~3 g~3y[|ȬQD-uxs[V0\32f]*. /549up|˅fI*8W p0Ǽ´yEh~j~02mF~퇶~S!39Ŵa ͐ ΗBi1F-4jR-)8Kt)]\ sp j2Fh-pf)4~Aϫ*B!$!:XW -}uA={lPn@ tHmx6h@h h*m͗!2߀A2 g 5Yz,:H+Y= cZ??Ǹ=4? t VЭ>=/AK?߂Xk?yؤ4 H:E_' ȿ:'@~FIt1xhz3π ^z/,,$AM)(pP.ՆzZ6fГ@O=ȣg<$DoEoEY 2{Ah}yau&>k?>,K:诃~;跃w2-Ȼt;v't.佁.~)<DB|hɈxyW#j/A%L@Ao`nF" /<#?c4h}"m#kB} ].G?GίBW! ??oAgy44F+Mx`cgbX~ʗDY߃ Y%x}(4A X,Y0mﵐEͱ*`Uo{FB~ ?Lh3R^+h hYa?Ǭz h[12_C>3-[ c喢>=mFݬ3yGALX &h6@oCOBO}Q݋݋џ>?E^HFăP%eǚA[N vOէk>GR*}^ߨo:w{A'iu/+z~CmhHc1c1ŘfT \1˘k753$zAT*ZKG!?sGp`72_Z/f~v8p[pb,4\aSm7pΥRyn8Ōiuqv'h\كO-8-gpɭ hCns#_C6^kv|zky7jbnqjAr=j5q? We!C30Vj <(-6uu<23m$ͮifY5),G8ʹxZE d<7 4 DcoAh`Z${txs)B& %HxbZv7 _O%+;fU6pUoY;]ȿ\[O V{z7е6Nkmy]]..{{_.1K \|E;*Mʔ+ʽ7}\3|}|P^j_-K8 }o%A]|tm&\ejkhOP \}NeD:;O^}=[ҾS1p????tLuWеȿ K_k_VWyR__]__6=NNǿ˿5,ſc4) }IUi;S|h/P//+>Mdm۾F4G DHߎ@ ՘;0D# L T.h$e{e1"i4X +k1 llh9fk@J6v t4j \ t:M8_:Ao 44Z`*8*XD=/:K}$|)X [0Ɗ"^ fPGy<8/X, V`Cp˞`#{psp[pG% 1#[[Dtu̟cʣoeH)>AOSa11MYfn\i0y 8{ TzS1~wL)j#1H kbhГѮjpvszDhuע&P_>ñNO#ݎbpJ8,Boq d54}Վrj̈;=.W{\mUۙz.@S ws^\Q@:+o3m,I# N^)LyYH'S vmJAa9ZT,sVqNs*V< aڞ 8z9U uY渚:s7hclciT"\@W~J@߄d;4lY"p~OsڞH)}Ƈ=*PhůP<Xk]0r[!˧aЌu1"H/r1s9Zq?u~Xc?:,D$F2M:,@ A2R<\ٮlނ5pK9џ"s\ے|BWS4\Js `Q!]~ڇ嚻psmiEa\hXL/d ~ZQ෠ugAz FRu%Rièa>Zdy`Ȉ YuCm+ː: ,v-=6˴4nM0G}S t!pUpN+S|czFkVԤV ֹdV0S00ֽY*l3^\> +vO?m>Bϻzt; -Fi?4c"-He":zIs<۟;ƅ+5=dV^xAxa1a)a`-`N®~ GNIiY…appGA-ȣ m# 3%)io Y s ABZaM꾕Dh&{ mCJ1vB t sG2w\#`ÀEbhxJeY(BFf&#Teju},!, 4 λHجޤ>oaJ7  ‘,ߝo3RtLgTV[2W-^3269Ms9חus"iQ+ ?²Dʷs{ޣ-$K{𗬓LJNIC$dW':Yf3Y$:YKUӠ1XS2㔖1\mUV+yh[U`}Z_ faY/'d"|Z8:|w Z|!^y̷(>(#1Ԧo̧()Eyh9[UƿdVZYkeEi_=+R_G/)ޠ@Sd2ugP7+~ql_#WmQ|tpx|K6mK6&}6[Kv莹'pK?; ܉FrLerYTe~ȭS3/ON 7GK@땿=0.ޏ+︫HaEms*ޔ,T {auȾ.,7wu-|wߕǪQy{dn:MwX.S&E9Y-4Ƕ˼bÝnid7]|۩+v>uQsXsTkp:W5Nso;KHhB a"aJ}000PC#VV66̈́ { mCcvB'pM}5u56o{ [Sl"0Vʧ$2m'Ǟ-Ujů%,!,JBaBhU}Yuߡz~A8E8C8OxbL_\'ܒc;ى'GyY;Ʋ[&xSp)$k5Usbn7w=~y}dX;S5}}[J{,OWS)&x&kzqy>K9 zx;x[ Mf%, [ '2$3wgM\ .c_|#\I<*5*aZ8ΔW2y []A_yiz𺼜%'@8p5G@8C8^i1dᣄ .%\N,j2ũ_pSp>#!/SC ^^@ R >>G?)8!C[a2dxJr}V"!vNbM!>9%Fk>A&,Mc!ǶːՄekTaT@Zp8GVP]a`;'DTW'@8pHHiUQ!-Ox=!pCs%\@0CJ(LAoX+ T ރd5# W ".ς {=WUޫί\+xW= 2;[7 zwwf<<<ڭtޟ?j+Sv&R3%rjj\XVaab.wFU^9}|[-⤃t&9.OSC+(]}03Q_2t-{j?tj uU}Y B)Qh?CyL ]*JiE[ѶB^__|ddU_XU),{OlG^h yOc^UnqZZ džKO^3cB͢?3E].m+9@1"y-< &NL>, :`88W 9TkH="CA1q ~TD& e_.?-F͟ ճY_!WXWEki]@Z! I:u.:(C:*ʫPEbRrVyu|B>|\pE{t#%OGI 鞱t,rAk#LBԺyZ9QCQhVD7KW!kPK5q~fBQ;'_TfZ6 j{$d u\!dGy>ZGu*|җr9z 9$?׀R" (oIfH[8ᣇNj0_IX T f0soT**y9ќjo6癋̥3*sdc~`n3?76MZ):jl5ZZmvVG H_5?c&Xi k5Zl-VXe:ukj}h}j}aM;ώ Ԯo7OVbdw{+!p{=־ݾ˞l}hOg~p{~^iA̗7=nkoc;tCGgW~5""Haһ#HH^)2]"EGEZFDezG:FDzFf^3k <,/ֈԣ>Bɑu/q~+op]ăG2*=mc2p~Cl O]C~/h o_[Sǻ&ːw /dz® 9%yV΅ڪ-wރ7zChwA"i|joewI+q#CRB˙ ß'9F@k<=!-ux9h"Ql !jO) P-ޥVͧB8VB٫_ G37-Hr/Rs,WM-ׅ}` ,oBn ! +..yt]6U=;kR7kÑ6"1Y1YT ,$ҩr+pN˚eWfy칤pn9w۱:reC%Tþz]J9ԛ[[\T>KN-|TNOs;Añ9KO/=5wS=5w*pަb:#y|B)ԏ4?XyF;##FG:EEzE_ lHdxdTdld3 푻"#gFv>,,<2&r}2-|:=jxQY6D=hk-LWk,:~((}ttSu.뢳izFFqvDWizFF__bF7E߉~My8ykZKD^pW~sRyRy =QPy)< 5υ7R%< j:ٜ77~>:iZ 3;mYNfy;W|V1]%>/ߌ.R;ʃyO uG3x:ũ¿HiK9./A{QpQӜn̟?}W̟ p< zd)pZQrQyo:)s/ASׂ4} s*('X tkDY}dz5sr7"|ju Nw|jϻ'cN]Wgu>gDǢO3eH'!~ʷD{Z'Oor' Y7O^\"b٥ğbkk 1x!\o NM>8'ɽ1"r#УlkJo THL|J}y^qsr)}>-&w@YC^ +jU֐9,AgL39:!*js91CϦV;s_䏢6GgQD 8QZ3{r,-" uC TK2Goj=r6 QpOvJÚe~V~on?2}*^q7ΙDozVޏL_v'`NU7Qvaj~ꙖM&Nuk.ˌ!O8 1F7E|̱38Uv'ȞI9M[PsWHW 9aT-ѵ̌{xqL3Vs֙q?{HESu8)G gQa-F0w -ȝ5j?T8.5 ŵ!~H~Uu۹iyF##apJ R@P߲tReʱGYZ(embPIyWŇh;I)t;D=էS5c^3o!jakhpj6hR=*F4jqZ.ɲv]YJVϥ<];DMQk5 1)h[)O Z1@w#z،V$M]l>g@3bXuPi/^7L'eU -ߖR&nɎăNȱq* K¿Ěfh_@?)ojS}RzSq.Od(];k><2G_#^5#*WmXk{k*X9QxmorfyeW6s*i0 s2i0VWvv*m&͎CkYoELZ9Q_zXvmܴJպ.'Ge,~0.jC̩# t8|&,k+XFעg>:ֶn̊ʨEOy+FpLmGZCΖX59=RVM[)=Nim˨+=TQ{[[ި&e;'ƓfN嬙I95r朲o=8vFGk7Ìc1dL3fsbcˌuca|of3fYlh`61̶f{e34[(syyW_ߜlN7g %SJs lin4/oYL37Ӗm ,iy֑1V#o[-֬wXw,H̳[ˬ;m UFXUݕW88k5Ue)K[Ih%qdhPG%i)Xړ-Hu +`o]ZxƔd'eҒEKTfkw*07}јwidnB1qhBo,}=3^pmØa[2%WЦm%og|-a a+b*M4ںED6"Y\, d̻"e)mK[2ytSVLͲ~pI2diCHRHO,}6(YdтdI8-hY=S)]T}W&:uIj֕| ^`c<.D񔝝YIZDϺB}~r^M+eIbf9unufOV@"ri)M;O]:KMi;!Shi;<̰rJG̈}x z#PRa}Hx1OT:: FңҔxiq M{Z;iʓrH+<}J^yVN`eG֏m"|:\ƺަZR-dؖc`OwO(EΡWh𿲑70 *ԉ1<:>l^͟Ṛ q9 5J4OPL6[8BZY+NS hN* 3ZlB&jl^*zF;h@ܗ]E[>>gRߧS>U_m))Y#SN+QjZMa?-P\r"MY::ĕQX'~6.!'%C:dHs~ݲ&+ߴ-md,>S6Jm״JzJSKSLS#-r*o ;z;%d9%mgBYjP眵c}o{oBpz s8/)Nq:KV;<>86|pl\(Y f e3Fopdhnx|B5غp9W_?v~,.xUt#E~<o#.xx7%Rbؔ<)Y\!F&H^!$$7'oI>*ƥV^ e2Xoc%*p3aWGu<-y0OzG~_iN]vBL ӛC FBf!^-| ? M sMyrvwN"en.K}gN +Cy-Ke=#IpB𰧃Hap}rDH`vdf縻8u- JMUVWWKpN*]5}VU_*zW7ʬvހU-BkktSvp~8té$8up~p*p=OLQ?@PHJ#(h>IINNSk0/H̑~H7~J7e[u53go(-QL./ ŷWo / DR%.Lt~Q藸1M܍II''ޗ@ DAbqb R}'PJwY( &O/)sɖɖil:M}lD%J>y'fs+,I^YLNFCCpp7 L.J># &W_|?drSrN~%^uz7{v.ػp9Y"Y~ח|dJf<.J/y_)gW n{K/^|5*zQ'!FMMS\OzWxSGIR ח+~G;;]D&>s^ܽʿ w" jTHU5|1BM&oo#?!?E^_Z 4Rj~5:+EOn\rn3\FUq]K28uUqA+<+}CЁs<ʨ'e밙z Y9(yzBQsԜMD$ICV*oJ rzsq)[,Ȗ'WWB yڽqC_Cp׹#_Lg<,dySV^Jd-(LJ(2ayQpsD9QQQ96@rGA5[J-oߟmwwpm6 W;Ѐ0+w4k*: 9<)*\n8rtani1>t S.Ԛns{3oou9lg T.ΚhAGәq4 V /@Dh 1V/H^1HvK^1-^sLL^gĹu x7/xݽ~ { xw ỹ|_^|{ pxzOZp.r>+|V:`u"EFQ,XD_!ubEQ,W@_Bzz,fW0ڕ~W V=>a~qAsOOkk|L@ɥ! >=4Vmb' $)RFyCT\o<@ro,(} =}r1λ/H]|lE˱3AbsV<0o:g4U Ķg!M!I1ڔo-_c}COx{GoHIY%C־} }n=GG7]w{שpӦ_NJ*< w(R*/ J2g4'VWqn{%&v|N33E܍XEq]W䃖I̼%n=BG 6)D$'znsq{Rr%~GınG7xO/ZRG䃛8[{q`q0“T~UQ+V,۶_B}nIKAk*Cu/iXpHւJN8$u%y)QO@ ߔ b]pG|.)њAEMgr_0mnI~LdI&%SJ[2-?S_'MԿS婴oQ?/u"_ž_GG _kO'q jfrm 4(rmۂ`{yQpr00=/8&X4.}z1ۖOO{i|%rc;bW;1FkȘק{;OA {І@lDbI</,J#7?6~BQqvtK^%&|%_|Uu(*r󛒽gdRĘҔ")M)RnDȉ94HSH)M))RLi~iD)).r(F1"4"M$.=xm[7of7dgӉX/$'^LHD?x(s5͐sM~s έ!?g]gx Y:hY@<{'v7,R2`{6F bś7 IPo'Vz`^MsҴ'#JSl3ޏs=ޟTz`/sf`dLL(QܜYqeN*a\'/B)eXySoѓ*ƻW9V2W|vb;/kS)z{'NHr:OHv~r{~ybŸ](#e|7.||V\R-NjI=iv~Q_檒ҥ`&YR癌8{=H$׃oYO3c\&}$'C'U9nNr;J]5!lߋt@S9<4gBl C1DHی0Ѐ`Bڇ͡ЄPih P Lfρ~^|qa i"6TJn ~ N5&V 6"A9#vg:hGcqD`0J^,{P=p* m;=~?.8ԅﴏǻ'PE;e_ @Ik} G2>p Oʀi@Ix0;\ApKj`Ex5ËP&ソ]xc@pEn .KQ"#H,I\Iɇ~0824R) RƧD# W5HPlVF; Aw8iN?iEU Q7'aNF1>&:|bt{Tgs G@ X -67 b> ǣ'3&FOwыp>zED('7?6c#c?p<:XYl0g@lo)PpEl5F`QlS1= @0&h...8@!pz':b0`g(ySİ `ۙ pJcMN3|3`3Jg{BSj:ʩw6m 6=zݨs9GVU vUpW8î؍F>wGc8w"~8+Le, ݹ|w!xw0X.s'2\h2*}̒] lp7[mNCwG~'ѝΓ_tSq=# ϊ }:yx `0I`4P&1^F`Z|U+ @u|}|#Mv`S|W|/&@f%~?2 cY z>^ e8|gJCvo⠄rOG8Yf004(*F8|BV))Yd˪gUe \۞U*Ϊ˪ߜؑ;kƒYGe`x Ṭ֬6*u$ܬٽ #Q>~ٳfK|.X,V|-ht;d>}4xI>}*=,'z& D_<[9]xZq> i6[bC$||NۗgR{ 9Xy^Hߋe{2e&'dOSІ鉥ݿw}ʿ6=nw'D @`4$̱z;M өG`5{j^(gށ,'%LJTjNQ3oq%="9wP>MY41ZԔSc|j4J4MlZٞ5l4&QZUj2h#yRFQ3r25?N Rk[(FkDjn$fJ/ ,MrWIjLȵkoO>~~=$=oR~}*T;5(?L}KH~圧 jK?yw{p.@L̇su*%昚KkSgEʸyF"ʽ)?GSG͝䟠~穩b-#Y~Q~9L9!(ow%5?UWe^B{( +oC3HY xKx=u7KGi&)!m;|Jrd5l .>zyhQ)cn>eyrw(2O\3!?cS`?|r'e:[vvoe8b |Q}Lϑ5e#mŔ\Lːd?AAVL9GD1 A+N}K\+7SߏrL^X£A=%gklD.M?9#=\vKB I;tpc.%iM׿.&vYz]EHRSG7J %S Q/OHoYOϲ%ϧ|Iѓ3Mq;<(_B꫸Jqd`]Wxj5ROe$]ެ^Ky 뺅u{Uaş Yk R~XN83*#ڿS2 ζYAdZ Tr B^Qiqa؋-yYu+A4iJ*e5h&(\bʳwD'Jɮ쏖drPԚ7 Y3M̛|.%Ԙ$s'ˬ,d}ρq``2~#+m*K͌iHN?1Ľ{%ԧ_LQ$&UOMM9>J]uL? %MUw[{i]]t^)W~zKQk诗oGW#sW3f%L%RP<4` 0 f{s`a(X NSӃ39<`JX T5uz`3ǀ>>o  @`. C!>c/>945TLC _, -VІP%-3'?t(t4%t<88t2t:t)[{;+Xk힡`'tcBoÁhx`PfO~3v}Rڮ@ 8!:)V (BM5ۑ½0}MH AFL.fmF>_E'eKjM,Іf9 ǀDW8a>0J}!p1X`B"K٦# e|&PL-ce3b juf A#c O9υ[CP5[+xn%26b#. m} ,z텴I;7}?GF2JY.R7`0Fxd\dDdbd2H9Y\{D>?0|Yd9"ka[GOdv L%rFD%d?\β16AKX Á*x`PLpjW/@d@Jx=R@ 䓸*#%]$ҏ(BE:uv߅p/p8D߄r8 7#m3ILt!6QFСb@㙋0 ؊BI1X`?K٦`,$>(Nʖtw2^2ׅNGF'ӑ󑋑Хػ xT#r֣ +>@_pWh(/ZLY4`FΊΎV0\~UE]*aX]&Xpn4?죉a3=`K/EC0~en{`G/b@BxtP~8+ӌU&X>0bp7@!yQ]1])0|zlfl0Gelq V:>9: G"1{7b)\Wa[aR6|[ T51컱}Aػܚ |{$/v,uHAp.2"֊-BG@6Ncp<3}@ހ B9ΰP?g0s&:N3˙yș,t8˜*gip8ۜ!s9v;=܈d>} w;Hwt^J$̝pgwԭvWFwp;w{amv[3zI#.v{80޽=n_+75k#`_VN{R҇SF"5ZxyHr%RKEO zo\R㟏G]';ٱ̀~BOu⃄XEiwBON|"%gdՐWq'JrLYˇD1-j)txKoN\');飽}-OgUڟb;'UJ,r2,<+-. g\JfJK..W^`pO\z3r9zO* oe߹矾HyRwQ.νw7(^s_$P|y~nxٔb)_|i=I%FygM~y &t齯v'$a_3_\sRG)J1笰5ų_SzdOӔY<9FW--AQ:YA)At%-9{^V9r}R_4;|;?RZujZHyyƾjD_qN}/ϩ_ަ|S J{~Mc=˔IJ꽼O˿[p?_BhMߴdYvz;D|{] .Z) ˾aZ}75U`^3J~Aс>" ݕotֶ?z{L1-rs~ hj:WkVm!ρ5 N=@65Qn"z䵤4%O[3.9"񴢯liqYϖ6͆*m3FJ6c͸]fKsDJې~\M _I}pmiJی96Ag9^~ F\0?I͟hmSKKQzxDz\RL B uyW]w+gFi2{^Ou\/ݵڨdb2wf, w̑^u?q?O?vw]utn|]`t`\40-0+0/(,2Ph QꪽԾ@u:RNPru@]֨ fuG=6's%Ml-i(m6I*ZB[kNmvX;.h)=C=<}>Dt}>__W:}M߭Џ'3EC5F7Ì"ĘhL1fsJcܨ56[^qh1miF3ohsYjN3gE2sl0u`YChhxkc55 2聍)ts5l"zf5oN3j{4GZR5XU䗟0IFo#?@-2]dl0iWl+U0\UlYz!֠w<Κ_;k:Ƴl*t5 l5۪ͳ*_e`Kj)zêϱ-cU[+e`5J[e5[6zk#uVW Z@zk<ϒks/.;V`JC,*UFk55*Y1+ValU z+&z(Y\k>]m9 f*0*UXXFEz6X i&$7 h?QHg-tZz<~?cv\7bes`?]U~~ g,kū;GwEV'L7mQXo#BYܲ31Fs\ፂYr "X`2+bBs5Y{ӺfɌ5kQo57`F6#xl7~xU2sǐm%`B6Jul-Żj֚uY7y%cc3Vm@OM5#/.vn ߑdʞu?{ v0Xd/ڵ&[SͲoYxFfbVyk_+`z 3_9 +Udu/3ۑ0[͔͓yOwy<ɒff3zҪfy.s*sklZ% "k9ij+ZTj;jVUر f_#\ͮ9/9 {܎+`@4ߔS܀@tRM1CUxdI^JWC_MKIˆ|yFnf.Q'[>YWi0.ɻzA΀_BehK 0/WG4Hix˨ԞW7*%cOn*'ipKy}hK&qH.2 !~|.,K[!'7?f ^M.#Cץmh }+ߑco*A%:99 ϕY~DO\4E<5%ok_ [gb*hS՜)"z|k~]bdߖ^M[zտ(_/[9RoJS]σlg{JFu<3T8pAB= sRN-; 9;'~S#>=޷WU\c$>si@#"Ɣ))R|4"rcR"|RĀH)"UJinHQKCrk}NNN'Tb2ffy={?+u/: F& yLgyyIRZ:ƻuvv{yHppD"zMFp2p[p_)p s6qh}=ֳoo}[ 7q<7q\ϥo}K1"K(a+thluv6>HU뻨A`[ D),2R&qX'q^\B$[IK:"^ !r!|9QNd,sY*2R&U>yP<% J)RVn]t,,!˅r-Rs1rȒF. Z.bRxY:Z.1ۓ$2GbN){~2.3!gNe~LYb,3SʩO'L)֤SĚ|ɋ,?aUp$?凲9y<GTۜVo0I% \QCx٧nEj?Ry,mvb`cQ.ݜOj1ae[A˱BVi;3 ѱ:2G_wqܸ?xnR$tuҝ̋MMz|}K7ݻ#G(E bv)N%N)N%Jf-,ӛ{94D*zjqۧZ:V9lrpp~3KPg7|Q~Eԭ^!bƾ"_LŴfk~e-hy)>n=T5;vE\YH AW!BtԑQB;fڬdq&}UEq6g_ |U=>o7LձVGa}t^/OQjZ uI;R^ӧ#gL0 ) Ӎlc )u]mF|GrLy^xg.o; yq HS_s7> ̥îzkX[(֕F st|󌑺8F\.oɏį웮G,0ዸt(%nltDؤ(EN3nIEANz{#ӎ-P{ᛢ+:H%$M%Pz*Q%F QPPΪj@TUw>zQU+=B g߉7zݤުzd T+JyQ t/*aTH.G2.%NuG;W/ۢpQVj!HâdKiz`DAM;F8GE:!ZP=)/^ -܅2eJ <373;SΣ P3N_ \n;qaPG 50_T4ȊSW ZYV֣1# Lj65:3!i9 {3YNR1شfV.3 .32;T}dD|Q,3Ȑe;4uu2bm"2rJZH:'@BJDGSd%_GHSyZn$ʣM*mXvWh*ǜ42eF.${c{ˊaI2.g(GkcZ#$ZJ4s3&n O3 }4KnʚQųǎoٷ|𶑯ٓ{l}7YO'_AN<=/sί+UK2{Lb柯Pb8"#xA+h! fMN:yc߈ E .&~MǸwf *]d+xXz%r)+U"JQo z z> P2c8i*3c晓̹rsy< Yi7OΚ>̓ysX \cQlyĹ,(0|iXNf3q.' ^ L!$- 2~[ʨeReu>5qVET%zqL u>a9TH9Cguzf<|؊Kky,90ky J0Ǫ4 .ւѫG:`4S|Ul]j~wWrksqzp6R-zFP6΃QnS{Pa~BASz'ʥg*ϻG8dcppk3g<,wjp)q.@ij\-W"`1q.g)ʅj*8[ 9QNm4 S%њvF,#3ʐY,dN.iLsPn-<ȉr-] ͌pRġPV =@iEyA1y8 ZR (ڿ>P ZZZkQ}SA>3VT=%M4ꯓ"jfg7ifG.[58do7?"޸-q#{[pR :)k^?F:Ŕzl4 {t?(]anP*VͧVdm_|&ΌdzCVͥS4\&KU)e(d!&.TTF;.T>9r|IO݉–frw(ֳLzF- vH6ߝfY@jvgqr٫ jad~p=>?E3bcJd/+ d1>yB L~*lL6tWsW?ܠiމu?m}Whe>H/[iEstF̟9MЧKæB*;wa[oCU@?Z}أ o3w)yŃ_XC7'2G:¦{1~ Vu 6ަLV 6^6M@TҫR zҋ0R-h J/h@ j/sK`ؕr |\nry\Eg.anNUh^A07WUT=CV*=KV MRG$l* 1yLOTsS JЃG{FI;Kz0GWP5]¦}b̐0\Ks7]ԽULj4d l+UX惖t Jhtsav$~g[+,B¦RҊBQmȳlbUZZK+# bކ_bWdw\dSmk# U;|A6UtZƫ/3bZ.N :d\ $uFY飙7.6>})✐U~QT18.*5yZFVbSLOsyٙVlj s/}CWG5dy^l}3|^)\~yj06љ>464ZQwJF$5jVwjnZQiE7twM93Zy?Ռkȶ~dj7\(wEA2YIи[J zUZKeEN6#֔ Jb>L~dI2Lv{hy'RN彬JvYBc忐b ϳ\3LP+jepTw =<';_w.dc" ]D >y)ͥX.97?5Q" AO7]tӝ:NO+ 2M>eu] 'i㕐u! ӣ%*˩ʫi͵X (-Ŋ(ݥXe`a|:K4T̻$Wp=9!oq䟯o[9^ۢw^q[n0[TOY]Ƀ!-\\-Zd\$g "Wi|y3_ YQ\%Lf3 <БsGr\ZO!4o}>_M$9fott@NqηUK*YB8: <Ǵ;r{#WDV[gVjeZ};~@k9+׺ʳ Btjx+o5zʚbO /ڏۅa}9?ǠbbOC;B;C?_&tX|#T:.3G :-u!x.| 7;)YzX)/g-VZ/[XW%]eWC_7?ٟ[[Cv~?{o;YW|ڇo/f0cM\mk-J&cǞF8|4k5z^ PJA|1GݾR]V Ya~`~h~da'39/yO&M={7etW|3|/V{ٷm,˾j_ ,s}}׾gd+qԭIX1ϲ Cw+ۯȆֱb\&bL<R`jˁfX(ehZ}N{o fo ~.xpTptpLplc'OF'c!Fb4mCD&y,uD:OyZv:*&$B: ³ٯNѝ:V+ ߒRkOz_0gyPCQB`b%{I.,ʹ{ˏ@Sh]Nfr:%)VFJKJZmIlp{>ݕ:R֝fWT7McyiN \[hLtYP u9;%iA;Y\]XZIᅡBVԋI\ow,[!wGEyt4-륹!iZ_{/Վt\\SR} kcl?޷(NR^OGuPZ)ܫRo}ı8q^no=q=-腟z}~gF:XsNG ^;{e*>?ǂ/|7KΣjk2mgM?'q.nM56MDf\*NeJb8ߨ(6skmgrFpmiH_XOzvt’[+;9/*M!hDgZզ:OC ~"xKτhsRwۿ C* =\$LstvC>@m2%|=i?itcI.Ƌ-ZGS2!nLcuJӭ?m,SQz'W>bsOE-E-v4Z&ZQW_o)\FL5{!ꁨgS\3wDRJ|>VYSYצZN|dHoh6P}dn(RӰf;6/M+aj?h=_QX-\ RT.Moc?ޢ6:9rݗi$O32Z('a4ݰH0J$5`391;ǝ MĎf) nOE8.N₨t( P)<='E/~)=%ѻeNĻoonq[D;C!ĽĽĻ $ޏ:7~w}{m|wGfwFƇ-M8h6;ۿ*{vCcVCaڞvc؍c;jI_i5Q*m`n(D ƅ¸}B/Qk([y Pp[6W)D\S $ES_+ +O )ֲRhX~"koܚH{GYWE|©Bڴw@.2x9 ߶0OdiiYNR=SgiI|9y'\/wnp:Ng[[86xԹ+spEgsxܹO8sƈ'ymaV:B<nZUX:/wz(424*4&ph\Єc/&M =z:4-L5l+90ˎʌ-#0/PBT+ 4QVЛf6m}reϢ>G72BQmNtdR2@\Aݣ؝k`\{q k`\C8k(c( \ NX5p\p |k\hc߅e1^w7@F"eepbߠ˱(DΑ%r\X!Wup[(r n<CWw~vJYʑ딀!T5@ %jnыGzLkeb H[8>V-_VwZ/+&Uj\;%-SesĶ[^B g 4}+:U׶*~LfU+OEƔOAٸd<> N(5#U01Lyω-i ^ЍtFػw.Lfw9&\ceo:Ĵ-XLfW:tRJKݼ bN8lҖ4ۥyo͔~ok^ӴΘIyyo|P/ݰ*2MfYU'.={5~_ ,>\:0vStL16LBT,*Mg,D9OpxO?*N iȝ;9tռWOmN˔jo7§ wk\FhQ3tbb5f(SVLxH[;aepn'1;[~˻O!gB.91|ؤӽ]JKr벖Kq)rSy \s(|uLJ~)gdea.3JU_EsOS].,;ɢGaE/*FKosUO!; F]i"Fe=r[d u︣9ՠXwokR"ƽ|bjh~̉ 'B͢͡stwC!%WcoOc@I慑^&9n7ՑZu~׈;J~owa'ԥфԕ7>X}KO_CHXF!OXJ5drDŽ%T귚IUhU?ğ>A{D ;A§X?لϱJE9ᓬ\gY?_>Pݏ>a_'Z?̅^z5b a)yDH\'W-3#/L;|\_5cCA UF\Xץ>B(/ifz:ꁰ勍kguܟSSnow ww w 3=Ùw 焇sß ?~ <<`xLO'igj7@Z=?bAh s0Ra"" )d3LM@;uФ/|hh B]G"Z6t҂- }&,~?\y‡<ǙK5+p]X{Jc}I_aw83 I,W:}8b @\svee%ʲepF4PKk/^n Hvq,}J;4 ָ-˴Ҁ2$lw(enV‚ӼR m 3FYPG!žZbk#BmgM m8aGIY[*,7;P4uaO ܣkm %3-],GY=Oi1\HX`U'cvE(`Tksifk[|^P8bU8Ow^QИ9,qHc6,zg_βi#3= Z*|nb \^c O퐌u!퀥(8Mːl\qXؚPq1$+Z-샇GgOĢ94,־ ( wQ!izX ] /t&T qH;Ymf*Z!(PqO+xd;y .}0m\֡W𛑢g돿=^$#mUq1o,ba(B}h,l_ͱoف)0*m9fɰ,$<3r#GZ. 7V,2.NkE?^>MϪUIw(M({ X6]Fi#9dg6M"%d6DHJ)l )Ŧܮ tR@Df,R}> :6꣇́s\bd<ă} U@mO٧ē-//V(Z3f+JRbHE&>l [C*l-ֱuėgIm UFTc&R%$Rmf}Nj-l g[VR} fm#l;NٗK+v$d;I"un=l a{^R%dRcKl?Oyv" ,4b߰oȫ0;L#iŽP[Ҕo}4gi,`߳k$; h8NY:K'iGkGҖ]!JJ~bH G4BtDD b@tBĸbک v;b8zDDq@8ql c1T1&R$WDOiDƦb8 zt=>dV8z7cB0DL.Vŀ/-pT@TD J*!J*#J|%U%U%>j_DIuDQQEdTd0D-Ą1D4#j&> _D5DĄ/b.}αsK (x~g Y6iBXۥX~܆{=ߧ@v(P=垄ʽH"Q(9VBJaM.Edmmbߑ%x9D)OIYy _G97vGrJ&cNIEy(>4iSLL)ŤB+DZ9! ÷DYKNs*^a1CbtaqA}6%0#9/bS0$NYTF>p)ւ~?"*y ;bx8℺!Bx 9N4#ŰG )W$&ՐwC)Qrb +GMLKSeԛR?HCh(mB[jڍ&gh@oyt49DǑt/t6 p;{-MC&mPʮ\!a߈ǐ.DG<"P.OcEa{N7MZBЍ_((r?zL(eYH3QfNd!DB4$ )GaxF3Qofd!DB4) i&jULԭ,aYH3Qϲfe!DB4/ )aйLԶ,mYH3Yk> X|Yo}TvlM+:}:M x}OSQygs1$AB;>E+ȳDSJջu:U aQAs EUgLhuV[u6&AGTU]EDE" kTfՈ~Fj)M[Ӥ7j#̌{-YV«@{NqTdъG||+aNsSmO?DqtLՐX.b t3FKTd_\U.אkr*"*wߔ?U2>#Tm@ KMq _#Rڈhࢾ΢ǁN; 5v6^8̽uhn| fX AYzC@>yjz pE~g s2D] EFep"ꪄ|3qKę%ʍ޿|U7"eSW hWC-z&zz՟Yg0w\lC`?=z`-l;\]\3pLL»ǵA</!Gʭ'9⪏c턄Q%6@s[G- Zb=C:!R5a&k9lt_$=+DUqLP{B]k>!9.HqUkuOLAzu:[6H$yzb{ wŌ~0 h#?{"FJ@>@Ta:V?@} B# ZIG_Zz !8sG2#EGVrγ, [ODGBA  'IGC 4ۓpcg2e"cƁ]xPu--d) c:k:~{Ҁ{)>SJ;׍rA o88B!v !|W[P ('>U>cH+W}69}~!y)CLyq_ ;.ohH"颉-Pu[w2t?Wg q;wNĤC~~"OO%B__BAE##г66x<+)cmMtDox61&&a13# 4$% { {4" ׈!p==Hm!NzzK7b8z88tHWww{)R@7ֽ-B@7o}744w qQm=c1qX hG2TT?y@*;[9 L9$-ਂr\9iJO*' YH#qS)爬\T.rURN LmLm)FLn '%LLHiS7S7RԝM=M=)OE!@@M!H94 R7 '^Evdp}N5_v=;P-f ͩ:{u6KeG"E_7ryٽfiiCJGKãٗs,9_IȖyAc F:utqCuE7F_Wd ]&Ȩ1hL?"“|,Ex~b 4q91r+B0RFB6^FC8ʠXrƚF 0CrS r8)YC(w;rOGd+AQrI `r %MN&g"\L.D44$.&W+ћLnDgM:YIO\MF&"i* /1**7S%S%@EeSeb 10㽍O :3WZzb^S1%ĕ .,+)x QƁB 4gxBm(s4o_WlS /bEwXGNPD?9Z5S#zQ)j/_u9iy@<EB Q(qWXAi$='KJb;M6y:߸06x9^:*NRI*UT>q>EʷlW"T>] |6=TyWM:NѸa w@^ǝ6Ϻ+)[wNha=?)B=5OB=%த߆^S2wl}0gCw=]9&q]a%=*Lo? gj'qκ.mN˓+A~]gk-v@eN=Ny}Q=}/kYRlb7`;t}^u,y*Dӗjlsݛ=Cann%u.~en~>F?o3`>SK??IYO3waV7nύ[a^%0xǸ>a~҃TBb<*-Kx+|Q?ÿ7-BJ>m s {1cD+O7_0Â[bHJ\1W\ͬW$ ɟ.ͷ5J$4`I%hol0 5/\ lZO-) 3/b=L-g3w/(zZ,r>1Oŕ $B>\]bN_aT1Z֡6^''I}&lT~A+AqٕR49J_")zŝrxpRD(Ք @) C VBH/xD**ITiFהd ͅg5@.x!9vi~RiOڄ/ڱpegȕ[TpQwN1/Ets?I%IrEry$CRPӲpVU!/Dӆm?N;K80uyBi[nƶBa\407>H#vBqщ.0%LǑ^F[ ulʆN!j0<:??ZdqH"9dYBVp$/)0$N.k0^y\ˑ(1u)J7K'Y<A 4S1QLs%H6doj0ObL16e/)c^ojjMLYc ty?~JޥOIv9{v; )\"u/t~Y@? / ?oƧ qOg_t=O-Z4rwڮ1}XR'aIB'PP\ѡFiQ`ѥ#8 t03p.+?,i@ڒd%H$+ 6I;NoxwKViQ% JGst [" T=FK(!UZrD1Ŏ^!@o.o.o?:&*>6&@6L'SȾcc7utb{7;W|43)oq]sRǃԜ3XŘ..i9F~ɴzUwrV_KKlZNr߹?؀ühy--`.MZ.N30)1iέн n%C|$>t?Źh`ă-5f ͯ-iתg 'vpќ[+nhl}ղv#ED@?$1wrttppTjenin{o&5 9rd~D}Jf=T쒛B%o.o1rX9cgixJSVw tpa7imԲW/w2r>qd/76E٩ç6L𭫃ݴv}ۣ>ǡwT}]((aZ=[Qd°.>P{ T535^}>xoI¦{w=0@حyzeϸoNp`kcR;aKm`jU6owȕ2@s@Z`sH@@ ՚ݚD>-^|B|(qꗕ8\0-Cߞ&}ĹͶ/?cJ05^ G.p_~|T.=KŘYQ/\4Qw/s>$.< MK_۷gRGF|sgG#OL9ko_]֐S~Q93o6ͳ6o}:g2jyKƐGuQn-ڢr:W:fYz'zK?:**2'T:fH̸;3%͵FEƨ277֑3jhc]z-Q\~=.#-Zё&o5k5z׉U3^ACjԮXoH~"0zWbÅlPq \ǀb0oNjkC1ؘkRD\OEuJݽ~xcXOeFq7ݧo!5é#~eB&;4_\V~~g> x2eMk>szGxfmnxXLo+άr U^WnJ KݺVXěS>}ݪm*pB7^3%g+vkt Zo+έ{+eM=n3p NrnkJnu9|=aiӃs;e9强%r^6oX<̈́}:Vj|QK S~/z\_+ꓽCc_Dl{W![moF}yMgcfp16oص|͍X1]in>lPNо {e{Ymgl?ESRmSL29%?6 v<;ɝ96'@7_t^ލ7`sv@`z`𶶙]}_t ?]}@O/|v>aSTr͚BUztn3gE+yxj rV}./L?c4̔Y]MInpLi]%9TUZ$5#Qԙ$-o֩%/S n4O3[ϮA "n`oȖ~Wqu.%/\r6Jkv)10#. |%D ɹcz L} "GV2q-"* Av ¦;k>; hϪ] ܱ̎yr53|+S (!K* BJy79^%ѿγJj[\WPtb4R҇[jbfJlhl`t`NaD>ύrMn#MRxStJ5}!ԋZ\VxL+ o9 sNTCB6`a)QIO!j Lu2]?"*zk:vL1|uCMl\oԪPlrCy ]??ӆfZkxfsOS1meUGX ΚˠD8+7EOWYĻzU.p0gh3Qp.ְEAgD01m፭u6MɧҴMVu0uue K_sR6+u0WƜ$7@ |a- ^2@l1n円ԸS.6gɣZ ?±p2ˮe(+Ј7O2vx5lS]3~B4_m/=1-L3?S]]AV;ܖ//.0P(e,@\?NG".> (S췠(UV@` %%6?]EQj=16IcIEXGVFtH>q~x. f>,>] !LEc0yjB*!ZފX,H@ 'iE endstream endobj 75 0 obj <> stream x}Rj0+tL_R'N?֩vӴII ;3HնRW3&vJp&;1]o[q=j/ϙfdfb$N⽬-ZBjbWLBk=5([Vֻi^Z0k`!bNa aԍӨxy`W]JcR[dGaP z$&'T"^:~W{#'xE¦ޞGd>" Q* e"Ŀ4H9jlZ7ɖhM.oJYF81vppw Tn8 endstream endobj 76 0 obj <> stream x|y|TEp]N'C:Kwn IgYIH6QDAQp "0 `n .q1Q|$HMխ:Uuԩm %@7 ?1e^6!M[]aZA7z|񰷆O'Kh1=пvܺ9Cox3{,O̚3ݝ7-o[:y!V̞Y7#B πs-5(0W!o7Clb̭[2?U=xusg՛`[S 3a~/_0s&!:4S#}Ňwٞ>GğW~!l}`@Ҿ5!`³ PڡKt 'qjΟ"c}FJdR} Χ5Dy nvc,nz؂+%h"l',$%c}d27`_e Oi<Woei<8_kH8%) CpRI&L%ɯ=N3dc0H'@'#8udi t~eWwvew.Z %gEođOOD #zXW$b$&b&b%6b'Q;f$]G"IܓI*I#]N$Y$\xjmb'\ %zg= ט%&WV:j$ykJ-I;YR[.*KNHu27mLÄ.k0'IujO(ɴ4]@)@@(H>YoMo C' 4Jjt93F--%3%3fdZpAՇ{d|M^_˺4LJd.1Lm@>`{0mhKnCm.\J* Ig#!f R"!(ls"K"bg-x(<(.m iL$FO#i07yy͞Fs sQӨi <y?vsG<<<< sc1O1`n=A?<0mxH][( J9)MNMpQ~|BW)AJS*Sk[\ٔq3<X!!JR= zDR(hՈЕ7j iܔbƋ-M(|TOPqx΁׭8.B cst!2'a\D=ux @\;S "i_B{P yp176&&&>&>./nAf2;c s͹<{{$3{ ;?\6-WBiPjq~<˦5KEʞEJ mgQ/aUpu𡣼V!W#[%n3K4ٝ7)eVTl\[MEG3[>T>W>#߿GLKS&<015⅊ϼ13M'X柣 6\#r@x"B.k^%ѽPlN0BkI3绌 <.dLMʨghzXGAn{St9i4Exn bu1^PXNsvoYL$[~|z6L]MV6x 7  =C 0PO/*:nO+ ˆpBQ O#CܭL.S:Fװ*\:s!i.[-(Qz;?b-$Đy#e caJ`W} _񱒠ԅԣ^O?6̓ Ui18l, mFs9ƼBT`hry *U{o^aϊ[jTP>ώҢh~㾣EWzwFC B-<ݛ~=ں_jF:qEB sM_>ս%bٷEى# Αr 'ܺWlhq+&-^"Sr2H'A!}TՓ`EjѰ VP֪ ӫFݽ7Z:6Љj;#l%rJ%S-Msm9*48ӍyH@P B$j}J2%cܶ/2-NS~ǯL>8-KYLsX7gђwrcYQC=v(_7k`A2rp 3H񏖊b ebU+s"U(`;41]4'#OXí;[q")2}c ŝlYNq !, ֠-;Afa)X)JU.QgIYY ѐ>DS 4'q&&D 8܃͒Q}p:sss%$&wްs7>;ױcpNz-PSrAo(e>9* fruW`<4CAf2 =N$цDp"%ZKA_B5I؅2p׵O &]8׌ 9Hn!$&9ƝD'& 7UMb40MnA~!SnꕯO*]ݽaC\1>kr^ir;4BÞ3.}n?u*4x8|䐍9Il':^PT$XMD<ٱx k䕮./̳z(C@+w[{w:N̳JBߢGgzjWJˉQvLd;DIw=LN+څ;[;įMqTXv,XXK˂*b0W%tWW&\V'Lg=Uǒɜ`:ڥ \'fVh(G РIj"EJi=v(oZe (<<4x(Dhݮ`^5g^ ?!#(!B#4\LKEl1p~0Z/QʎWjm {|VWP#h";{re8u(@,IAzp/@`'gXY$hپOk?/k;ŋ-MJ^%BXA P2SE4ꊈv#Ԝ^\3 nRw#écoz.8/ D":*Z,Qh <'YTP YqS]lt9P䚮^p ]7U@\(O0UNz@\9fW>58$f}o(Ry%[5ƈ`cW=TV'Oac]'';bK.n'v5ԍIX$uRǸ71nѡ|} ֕ǽ!o>\aFaڸq B1 5Iy#յw V/ a3<E\mZnE z#XۂmVI=z\|*Q%Fi34EPnzE((K%SwK/81<LVH7Lb]PdE-vD]Lv_*j8xC$~m1~\)l쵨qG2 G+G#|n1xa OlRȋtu||gKǕSNtM 5\z.t wJ8EQ&(KTCՏ9r@; lՎǻ%5=Ӏ\9 ܦ'J ~"恧Ŗ_ٱQ8r]/X6_,a|LLES~ƍF lJaR")zCtMP9A6Q@8Iqu!JChuw9ha-,ds&uFXĂܞ=sߚ; 3e| z팁w+E']S:Vɕ,yЍ߯vt# j;/kM\sl0/b4[n?l p2np\fetɔ!:H 5hd )M4򁑣?qj 5̞*oXtMUkǾVmύsInNR'?)~xGݖL(^?v_/F% _%K*[K0[n-(Xv-,ф|b|M1- %F4gl/7؉m25eeS["z0pk%q`wHunLr~t 1)(k5+s%bK?e"m@F<8c=DiEw8H^JV"V8#Z脷M1-j=ӎst+|q< -9p(K'EeԏĻp:zу7i@Pf d:A>Eʽ3x|@kqY+gWC/4R!-N HH=nM  s9gN`w}cUs6˕X%`"(tJOl񍍌GaMU_Gm4 q:Ƒ,h@ \Wо\pX} lQ +\YI4y'5\KK 9c dL51#Bʷ "z 9Zpi Aޮ{͆ggF1K`j}u!QwaE DzF\ 7 /3=팋qD\ZCZ"a]EhaÆd0Zh L=ꚝ3wZv5mbCE.O,Ӟ3z7B \oM ߽ɼJ\=*Oۆ ұ9&W5ŒwحVmzL3!Ii>yJ#IQ)a &!Ms!e'kg`lcekgCkk O/_&LI,Flj|M˂ps r~ao0,w߈U߯!G߾DMMܝ>Z}יWhYMV$:[ p6H,Y r$In Am<[ul * hOtRM]חVpj ^\ܰ]^Z_5xC;\:{'_?~50/n${iȦ54:[h1LL7pgf!>굢$ ~ +&". MMLpz9Ʈhtp,ɥm\ӻ Lou!Ҩ=n^UNJRF_GP1g|m#╛ *gT@k(G.MdW}0EkA^*sUП ~,w%go(ƌL9Z[ /HBX6194شI,ΛqOrtkg`/I: sZ - MT g-z52Ke^`ш!*^p¤^1@HjU%IDK\Eq%sSމ)lJnA+px-H![au+w]z֩+5aa\#GD2ΥQZ͝p#qٿ*'|X\XݎWU pEoi'~I,ȞN1Gcn=LVF\q٪Tl~#x[F*p':ݑ 77Fj57C(kayyd40QZyVE*6zB1WnGVß+1MM/&I n2Y> EުaJ,f-z݂H#F׫ZtDdIJ4.ϼ Ļ4]J;5MF~t#oU LYWTebeG_R5oD {/xwdo LM^ pcE\T*Kqh"]V N\ OBU2mZh@ތQtRG˒௒PfKe5-}غlnqAyؤ7cU#YP CT2jbY12g岟~?mé`ݫ!sIДq9bTaXm"5,؂e|oFr(܁I ڂv{ 9co!^&˴c&$tό->EלnYX-| -=L+'fM0,klyaكs*xSc3=e<|ꃝ܏_oPq"HjEP-ViDALO2۲k/"y KsbQ0,k:߹kl I lb,,n-O>r}?8r7[Ӯ}CQ1CώC%},ɋbiQW:տ la \ βJq1Z8Þx%lJ , xCuaz,t'ٰZfθ?H-(f؍c$)ńIUlUGTϮ}⢄\76. ,,/i-y(udjx=Q2Zxh\FL&%&")O.) tU'ewɴm{]KkՓ4_(lx5Y ƧܷYދ&͂scyUvO{m܂YSSn}8oLoOx^ߗⳮgnhKܲ)ފ`8lfVlBӞ 3!aP˫x^p͞U[K&-W{WuF-m<`<{|UH> $cgNi?yGFʚGky{_=s(Smo_}Ő6^<1KLN`!F>U,,4JL켇͟!5ԖI6?[&-V?}}V~7-IcyŰU4d#a0̞nUZN,vͰ-Ǘ+6Rg0^o7ĘS|Ei ~5l8%, ,2 θ!Y,Al"4&c4 \*ǂKqI`\Վ7PܺܜQYYI$6-Ӥecȿy"%uw %F[eW>l\gbW (aT!J'琦1\] qWV,GOPa >pxq&_p)bqkMbƈIQG&ET6Trdw(Mkfj3MЯkmA.ti6/DX7 M yP;K9Keky\Q+eoH1[c>͋]8[#q}q}W+{2AAO$Op!mOz99/yO%T%&+t֙yX򌳙{3,kGֹQy umFM;sfht0j\QBHusi0hxJC&ebX+0__DsݬtP`-GO`=,^N` -W`>WyvČl&OT(WI~+a<*٥7L$5-]s@|>Unbnx>|X%S.:Cg"s\1tr!v|"ň\BVw"KM"^OMk_oװ-sY,eL^z@5®KH5֮Q~G'J/!\BN&`$q*O#gA0t΁Fc ,Ghwyq-\_>S.82R~9;;m7^/׹QMvy4:ounQ un24^gӰ`e$C:M{v [硽>>6SHRF& إCI fzS&c57֑R ;*l_l!R.Nƶh7i;ed^*>`b7Ф>QWsic[2اa)נC'L-d w_ ([>RaӉmif@_$ll9BJV|3jamw`'wcrKAKZzGh6ж{.%O!R}>HAR=C#v K%?lH Wc涆"\YҤQ<+ǃ3'mW8b^}bLɔO7P1݈$񕙩8c!D UuGh_,$y d= lbS!h+bo<>jTOQ%KۣhijW˺3[~I_[tJ_tެd|.sX &Z!6 Z@{e HBr+MK}W=7VGZ6q,s^GVo=?|Jt# ~ endstream endobj 77 0 obj [ 0[ 634] 3[ 278 278 355 556] 11[ 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556] 27[ 556 556 278 278 584 584 584] 36[ 667 667 722 722 667 611 778 722 278] 46[ 667 556 833 722 778 667] 53[ 722 667 611 722 667 944] 60[ 667] 62[ 278 278 278] 66[ 556] 68[ 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556] 85[ 333 500 278 556 500 722 500 500 500 334] 96[ 334] 1679[ 556] 1688[ 333 333] ] endobj 78 0 obj [ 278 278 355 556 0 0 0 0 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 0 556 556 278 278 584 584 584 0 0 667 667 722 722 667 611 778 722 278 0 667 556 833 722 778 667 0 722 667 611 722 667 944 0 667 0 278 278 278 0 556 0 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 500 334 0 334] endobj 79 0 obj <> stream x]j0^, "/zj 1^kusm4x3o^*a`Áv0HE Ni8sF)KlJOObFjϺu.ZҐTлDLhs#\\<U# ̚q0L @Н7w*J3z 8nj䂔HiGrO VſُfGWμW|,w(7/2Gqnq /ƸppȤczқk?l endstream endobj 80 0 obj <> stream x|y|TEN/읽$$7!!$@ A1@p}#2h - >QT`AQq0.??gykݪ[U,uM#Meɻ\Uw׭|` XG+|:۝Ԩq e p<=Γ'k֩:KwC8~Ԯyߕ&^1w&=pz{ɺ Ďi Sq<y<>;;f[pI$|> `p֜mVAoitj(aomv{] `Eſ:2/@;m'Λ;_Y*=ɑE?QV{%噣;guBI2 "q˒"[ @ h='=b ͜ ,(SƇJLS΅7"P(~ @>yb2vS}N\Λ3z?lkH8 {\B m-@̿ejIz!=BIb0zk.4о zplاހv[uϵ'Lc!*,K X/ü_Ye4Ř8+ O- JPJCi( 4PJCi( 4PJCi( 4+ 4|Bc(rlWG e ذ" YyP0fB ı6H4ñ8v$6c ŕ??__ޮ $wDKB>IB #,o)4֢0Gc61'$#N6#|"JQU"ՈuPah} E|gi{z=!"DChwT-3mrG{f+bM}Rh-oM}f,>bЎ^^*v򫥡ww+q{?Ųv%\M :^S pfPhW/i]2.LF[Gy}rECkY3o epa oli H\@ $B?X39:uUVy}Bh=~({@OSQCZ6رV,̲yKϺ?Oa..dKBkf2)bOYm'p5KŎաąlYg;SE)-YINu|unqRq.P~hx>!@&{rj1uu΢?a*vg ~<4C &hk:HkH18FDC<$Tzr#Y d9J/HRCuzwS+T Okybz7 }10-n\| ɐńAg2Jl=l胾⃽|gcxI6) d R8&wH& Ivar\3%ҩ6j!^`-It:]K @oЧ3,bl,;Nd;6v?w;v@'Y. yIT&͕$iԭ; #2j#@ݰO L > .xauYZNgpL%{3ibJ(8,GӔE.0쳊( Ҝ.(P$]Ƽy |{Heawa@L4IPY<hfH'N]{n4?)Jߖ|YzvxF|cV.;PO^<57mtNxoF@g<~`0̬'3,Ex^ʘR:'&dAHA· 1MbH\AOtcVGv$M'[%Z?+XL&J"UGWf{0َ+<%j6%lt@ { }q N1{j -A_DZiH$VH)^..<D7Hpf.G||"I,lQ$բiH @*i\e v{\< ţhu>Ś׳2I A?IZq])Rv'> J *SժU1*kd`V&']ze?>GܥnF<-]66d+J3ƻ\sTTJYKp9vd}S䍚LCg2UYB=^?R~AeK7_%Q\wC ;/7ё 1IN6cJ§gas'ɨܕ+{`wr[Sd?:Apdffv<`Aqˬ3cP%:8:'KQ#__uf#C.ZNG{*Igm^`іPe׌6}x_ӏR;;m9K.;]\zN^ō=&cf)7qDBe旈ӑdYKs0=ſ6-~'PRJ `;0?pq^4sE,-D}n IY]$rPOZM< jM*jlo~ 1JNjv1Z+0J4߱fW:uưH%Iiy83[M5/mw}s,%;eTB= T5IEK` _&E҇}j¬jfSj(̀.FÄXTWRT$0V1M^fo SzoII1 C/;:NvByH92R}M_vUNƜ/)I"< G昦|ST]Oy(cӱ&O"YTV֕ZhQK-HofԾ1,i}hE3^$(`u!A2ݗM]vZ2o/h2R@g39|I@0!!tg 8jy`!Wv77!F0`_dO@{7e[ٙd*ך koĝ ]VuJd)uXiLQj;:}k2? B~2{p29-CQDHPp3+AjeK :JPC&G=q|ۄ,d!*eeEJ,^ɯQ rj=ɥ\8Pş}IΥCrdrV-3˓-K;):4OV$/̈́vBUծ5g}pFvVhIHuEa!piDw6>:R:\ZJ:VkRhYA1EFݑfX Ys)P {EN" -0QsИDEf6F_')3" )^A8 |B,ruL<2jEQ)R&L"S(DFYJ*sJn؅kH@<+Ff⽢j'"e_A+ Gq Rqa3 _#(-hvN 1 ;Z3G-=-5Hy,Xe^9./Wz k;uyht9N~IL$Ço?rd;F~/w㧟n$Eh@Q>wDΝOϿG'?~FZ%`4bD9c#ThRtJ$e8xASC5сACZt# g#,O>ݟNGͼ|s;QGX5▁LY.M4+͑F1q=bFdM!ɒf(bxpnIs#ՠU&.̕V2SMǖzh4U1hek,Y|0gfI֟B7K pb[hxG0Oy/F Va, Em⸕lZMl5fU8/Om=zS$w#wA$gNSjm8'xm'"IB`Gy)NE$)RQ=O(M\bw@@ 0H\`U|paȟ{!VJRGGF:1N Nڲ0bB<<Y$]]+k1잋]k+or-}_zśBC9ěqX MKMeP4% hh,6,o^Q' )=j=n !Lv/jRC8@1xJ 0dPB*/!YII_|PGzKӑ$f$f L2!&:mUPe+.cX^JqR.3Bjk}"|SESÒ&ϐuƲ ]aWhgt!z0Eǡ{WhXRchu(}7 2%aeiZlW9H+,6Yl-W\V I(t]$aT0`7Z#g?srP<t?$v*{p jVj{NRp=dvw7K;hGih0:5R"ΩPh*nbGkm0W|"[0,7 'OM <+mP/!^TʖGG1^"rVa-lv/'rUAGF}X-=Xc=8r||MsԬ`j Vs9ՓsԴZ#q&إF]Z2|㢄V8)zu\{A8[=!8|ޖ[đ1Zj5"W" 94[MvJ]HWRhI[&o8xC_Dn9֓oj[R{̶iO 1$#dS U;`J=DCr  q? Q2c,X[ 7Yѧm9 j8ޢ¾a]e_h! 9˫#/G=9TvZinΝ' γي޺0=˦ e|svWڐ-\mb 0LI![P$RHD.I I(B!~1@&Z13{Ua9_M^C{z0Jrpp]!!?ysI?%KI%qw(}nE F=8EBI$:Z ElWvg,Fom ZSVs|BM%ǟ jqEO+W^c>UV`\\dK_Z+4^赸r^jۗ-P+r_pիν9E9;Sݳ <y"`sN_}-g[gyoμ;5t ;0_oՖd\b8>Ie6jU5/%99v*bk+7Nܭc)=<*nNVҿZRfq~>ꎚI ƱYYdZݖ5 Ҋ`6XpAgzl[,ե:dSNfU.FgYSU-TKX o4"OIiL:L!Awofu9!ob*9VDMA̹wes۬Y덍 a8-kW̞/n:[rdztq.\m<_Q9遷/H激J"mW6옣8%Zނn jf©I׉هy,lΣormxWm~SgDsl\?%5kVm vH߼q<7yal}o+|ѣTiCRT~zڭS^rZO6!>PI'b~TT$"~[E%wKro;HD?*屇cbH͍fla{v>ÊpdTa1?,ކx*/ >/CcWd獓wk|p% " Lp I%^UId&V*u1Y&{~zA,P r&QdK0Q2\0gU͙s1Idf #LJUdZ003ZdD& wQc [muO7,?gi*p Wa:g" ;vv ;~Pv4%enG"nk4 ;!8O ip}u8'z߃0 FݨUSbJV4-gk9<2R*lOYд4&iVeIy&e6shSӭ`'(O*Ns17nX?_Ak'Nz16]P[>* 8=wNy9O*&8 >$}V{pvSDb=xe#YZw+IޱƯb{LӸ=)13Чe9EY6)'ħ? wq 6Hse%wB|< z(Qj-RN-yB5Oa`i,u3,aCiOn/#/{y'ዿxx)>x0DpA'+Q<gA񊜴Y6-VƞʻDe+Ҍ@fQ[p AUb4O-'pQ9[2%r>ѝ?ԕ)]Nԅ'6:@cxL hV}@@cJ*yA1$bl'Tizdd5L3Vj]i}z#[ R¡:9N9sriiiii6N4licB^~ J4>FfHILbݰB| 9K_Y30C + uр2ȷ qY` SXlڎ33d` l(0m 1'e}f`r/ Mvl { ~uU[ 30C[>iN`+ׁl70 :6na`7wRL&h50vsLG | _9b`;s1d`#8=Ɇ :^3Ls{ӨnVr>}" 9 |- Y٢nT*Co5 dO '>ZM)U/UUrB[ kݝ=[^miW[+ZcGWw^3Tf;5'*4#юVOkz} ,Ңpgkf{c5j#Z_ k]%9%5>h"QSuF QԁP+7蝴_Q;e{ax2nT!/ ?*-O@䕋B%p@KtҶ}^QoN;%8n  })J@:m./A="gXvTt2]6ql<.Z 5tB;_BF&I~J>!?atPX 8_o "ԂNHm9ܥ %W~*h_iJ6'xVUX%piʿ+*hЧϨwOnᒄMe}Mdн!$_r-<[jM+]VlO\ۦh+׋v3jhNhaǠG7|lUb%P;vJ?P>2tiM“nsT gGczsᗓ_ۦ,}/l\%I<{!?_N/6uf!oM-V+Ž$G]T Y@ýo%p6@CBI]LIcVhHeW$FW$<$q b@aV6ch ‡_*~aG$o" o$ϐ39d{=@>||\kk*+ HRڔ6!%8@_I}ӳ|a#40 4̌46#{5څk߂po"%GlDp`ܯy!~t>xޏ_GINwVa(/W|3Hύw*ANuyOK( y2J 'lbPg:DľDN C)d9ˁ-W@Q%5{x>6H3ԁ~/AC~5FD꠴pc2Z#P[;fԬKjhofm?رau!g!8q6 g -QQANXL=Wf:-Y"O\X)ފHXOov>RO9D-^@|-( xzD,z?k*fv}ƮQ"l3[¬p-H+)VR e=l;q-H9RNѫHDvHQ!3}͔%WjEZC+D_Ng6U_[F6 endstream endobj 81 0 obj [ 0[ 726] 3[ 278] 15[ 278 325 278 278] 20[ 556] 22[ 556] 24[ 556] 27[ 556] 35[ 967 721] 38[ 715] 40[ 667 613 778] 44[ 277] 47[ 613 833 722 778 659] 54[ 672 612 722 667] 68[ 558 613 556 611 579 332 611 610 277 277] 79[ 278 890 610 611 613 611 387 556 332 610 556 778 554 555] 1685[ 281] ] endobj 82 0 obj [ 278 0 0 0 0 0 0 0 0 0 0 0 278 325 278 278 0 556 0 556 0 556 0 0 556 0 0 0 0 0 0 0 967 721 0 715 0 667 613 778 0 277 0 0 613 833 722 778 659 0 0 672 612 722 667 0 0 0 0 0 0 0 0 0 0 558 613 556 611 579 332 611 610 277 0 0 278 890 610 611 613 0 387 556 332 610 556 778 554 555] endobj 83 0 obj [ 278] endobj 84 0 obj <> stream x]j0 ~ CqK{cClJfXd8d/t0 }i'7'8-B'uyv2QiuN84UנE{r!{ayqBJP x5.ؾus|068ȆFTu%@*($Oߨ~_xX{,yJCT>?!oP endstream endobj 85 0 obj <> stream x\ \T?a :,( %0(03lQI_Vji5h&ʴ6J-Sxs }}|w9{@ Aܢ :i|hRqYrp):4(9tǏ Ҏ3r'4 Z9ᮄNl{֙o]\JsU #N!a~sbpVbJp:p7@ UW.0< Sc#,?2ܷaފZ낰75&Ӈg~uku ̜ʏPkV? Pu@S5>^⸚M(_5o7gl{d4y PI;Lo;="Guƈb(I3fY}p8k$ɞ9ÁcyT ӑAއ- RPH7J0i[tRʯ'=##]5)KzJ%oA#~'C 5Ƀ!7J;InYj⟂2 ^ug[?p?rD'RuGrgo 09!*A Έ."v+";p=< }W HA$^!01BxB!Q1 !Q j7HBb 1q/H@L$$HFLfxR 1R M< 鐎P0@`8#fB #a$bd?u0 qF Z'" ِ8 @s!1"q3'D|G'C#)0q*Li q:O z(A,RR3a=,0F#~s t:oʑփ*cJJBj#"E<`b Bx ̈f 97A=b=C X`El q4!6? ůa!Ûf[V[6``1bhFl%WRX #.+`%JX%~ nG8Ոk` ZCVV9w]H݈w#~"3" 7&Mp)܇#lFz3lAz lE ">!xaxc㈏6m <cO"$<4m&~mq'B >nxY؃a/^o<<<>x؏p"KpP!C2" !5x 7M70ax -xm8"0<" {>.|G> A7#cD<1c)|_ ~@|×H _!~逯'oO1÷w=p4A~߄33?1~A/p,߀spҿw "%DN'tADDq?쬔ӠՓOnI2bi-tpuQZtpW$? u8[R&*w5?OrAL A:{:xy8kOrkX$oWAvg;I45}PU_7\ b^a U[+ wp|}Cj~>`/A7U}rͫ|:8_!U}r)R8HI?۳O*w02@ @ܮ }JꝮ! b-l-bg:`~1UL!*_J77a  |}9҈j*_?{H\\C \;H'1p?Ps)?7wW1n)v߿ O 2p[WYUb_H2p=EJ2p?qrTQqoQ?['7l~?se7H 2Di^r ߮hg5w% h?3g&8Sf( sqxѣ9"sxMrRbB|\lLtTd:G]Ds2b ۹lY%SѶh0:k3EJyʃv69ƕђ%>iɢejgb)z|G؈Ei3K2m{+ijRt=i&2rz%aMU6ގʰA6jVqCLۈ}}siQ`I_y.ykBzuu5I/oFȽ MP* Bnho>dF8t`(86/>/Cm_.ۉgVCl_<6<>].2mJY[\-^\NDZD^ D\&,-G{90r6=QĺKNNEmeVme\`=E%'KmKɮڅ4 xn_o[T.mݎUVO[mȵiչB[~lun,+.i[5fu{ŭ3ܪB)cvGG,Xψkiqq-q-@[F3 ZҦ1sĹ( +2b32֠I<\soZMahu:2,_qG 1Ey\z${ܢ R !p*w]i/8y"D=7u.։َԇJW6jSVxk f9}GW QP JXZl4"I5yrҩyqy.n;esJ#Tq3 0`FtkjEmˆ܏A Gk$ђd:C'ϒvy|Kr0.rUrks/(>'JtAr&PrFrV%$NYb8R,׈xBз oՠVf &2xmG,/w(|} _ҷ8T?FI :28OdYK6ncej8+ns7sk&n/w;3!2 ~_o=^~3_pzIAӒW%KI5ґl}2OY,]V$kM.BDVi'I^/s%3w4K!8Yk~F {\דhfRIfA~"֑"~*"z$=:i -|'mjX&7("sY+ \d/bH;L~s_E w-/qǵU=19&uOc[`yIK22{L\~p_tztfs9q'GXuA}1j^#FpsTqČ Ux~FjCdr==JT\\'_:53@u>k3 Fguf;EV%KV Az%S=@\jr3)*vuQHҽVǫwtvtYgffKG MTL.*IdKĤlRə4iR@ŃIIIZ--x/uM;i8 K% MTf)')g+k7+ePR&w]$x+eJp<$H+dR4>JMyQI.r P<}-xztVVVf2M")~-V$̤')@҈yIն}՝Uo\JFɚߟN;C~0>&K>y~d:)<5-1.N P0ohRΙh$v"ߓR8*919*`x湰jfɧϞVu(fѓO>}ZL"*:ʾW60xRؗ0?奥dX$qCIX-3ٓ]߼\x{rx ?'Z}¡' (ݗ{MNJ]5귺>?c3, 1U,qVzw[ d)bۉ[Z\#;PUUꏪ3=hi&D+"#ã"]b"Yv"I7BsD$ S!zGz We1Y&7i=}EE XRA.)aU93+^7BȔͯ|9iic4ԼGg[RC3~]ɭtɃn޵2kUMm}T]:YwsO3o\dӵ\\̟\-ח[ps{u S=AsA9f;hI:R\s68h8h'rJ"RYi\v%RI`H-b1ZV0zO\:́tP:AKzՑi-U(v:h%vPA@+ʯt`˻Vґ$rMdK/]c:^H{mݫ`mkƲܫNh/:_DF̊^8/n2*uzM(6Mu&+STMuF$ꬺ?]S#`17TtQT[nF7[hݔ 3٨7YLBCUC~xh&drqX(^gn2Fc]0҈jd,6ZJSU#uXkFT lj,B15:!A4V5rŨ uzk]S`6 FkAjj zVdjuX`jMPsb}^I0yzbZ:}XFCՈJ yk5k5 J0Q4`%c`bm]}3%j5HNnllLu2 {I$Zk-s$Q [4jk`MzfW4Q@}$Ԁ5 gPt}AgEW-]SS\ot#U6kV+vWĴi}aE@:J:B}Z1כ*:)Mm@c5Vս$kAu CeMu5MB1V0Ԗ,c&-^AgZod~syڼ1Fj+ވVjLMnꘘPaj:Նs_& uMtBCO܈2\lơLPx(gʡ\CpS^V|Ab=T6~P=Xǧ.ƣ2'cO79o3C򍬆lT.rOC,DN 4`ojڄ:#c~SP (m=X^bUЀf\z(`GQ/EMW=;Wcj ^^#TmT2 LL7YeEJtjD .g#bekkM35O̙%՟֡VO`}w.gu >̩Àj֯9yٳZљv>LbZм[:J^$6mxlul{٥6c^/]48z22kY^BufZq]$Ȯ$챯_&9dIfkqdD+1hsHSz`(\Ti |o鬖2[ 9V3/1ߠ_YlhbY4cM{3lfUꐮ=5^#?p*{tH[{cf lC=4MJ g?5:45_T0==mSèO$]._+zְ=Y]7i=&v]l4ڿ] QXd]USx=Zx9~RZYt =O5[??$y[瘙˽w뫽, Ͽ/ptNw8 }8,IB$)|8uX[֡vei1?\@D&bo/^?i~H|_]|7Z9BR5N2iJA)eDB38"RI`Ȣ!'xMA[X50ˏ&Wgmc44͒f~#畆"qKyQWvk\{%ROȼE)^Qx)Yq3m5ե4n)*pZB9J/˻^G֔0M(-/ӃbbUWkdkB\Si25)C^Y]\5δK2y”hM=Rc4ӽznQWT0b4MvzbFJzzJFmhHO} m/nj&;vo'~/Xpӳsw+3^}b ƎkuzۄcVYcnY0W^s'Rr穗n|xCC&NiF/ʞz!sw;f[Xƚ^uNe /|e[ud{t/}5i蛍,TwYAoo}yY6sb0w0 ۧWp2Мs2XZig9a%NyrUYm~۳ >CnfqK}u E"n%E&P\J(›&_ v4\i-VMZq26O@@~!K'BeܯɲvZbDq©Pw2tb]RɃB8E6^IJ;D܆OeTc իjԫ;D *787Qf{7h@Mb->Ȃ+[=*wXb $ً$6NG w&se۞t;xh:MkyELun7" :8_J;w)WU=2#DpˡV\*sճ[&k(:*$|jgF;+;3P{ #);뺬9I]q--tHq2"u9|dODM4 ='e-*ςjٟWYh_b[È~Z!aU/1TK,W]S 儋}2Lq M{ߥ_? Z%_njG B˜9>\TWr5Ӕz4^g1'f#|<,huUj7ASM`4j}@cNCp2IϹcXՌvko4Ձ7fy_V9LE-.k̩ 08^GՈ_zjmz! (6u2lpwʆۦ?UJĥUWXsާV5滤&GT .$&NF0ـT@Jl!R;9O,~]>#bCIts;)U||h* D[uD(@@@^ D\<7$" H"' ߦ1K[mwv3cg-+0 ɉ> :[ɢv{ oIџq-(}\lțEzx6)C95@u|EalREiĪ੒ql( VJ &5+^4\w/Yfz :CHuk_k,EB|~<,%_DAXݖiz 몢O 6KWT .\JKפ\;3Ձ`^>6˽.CM}bSHEAbkLbλ{w(ɣ4([k5?L%q3*QagqxZ5fLԣJȲ/˓>!bl[}iPzH#v^MGy*4Qm6YO+"P wUg)np}:!w\6fQ:#Uh-yϱKNT~!g'&|\mjicÍx1<+J J -0W.jjU5Ws- թWϋ:P Аr0O1bI~D]ɉT+1ޢ{!pi{4g:1`)n#T `w`8/'?](?}el@A.MαsCFjWbBKCm 3t!w6yҩ2ۃz)r*]۔ڇxJ{-H~x̴.㒼ĀzP5>GJm sJ`R0ToxހiaۏԒE,Z%H1h&Ѩ*[Xbe0J99YhZV)-TQ)SP!(қڪjʺAɱ3v,;X$ "a8-k$ 6D.t.1?)wϚ*!#+0>  ¦ˌƒن$X1][m=\[]nk=a-Z g]pkn)'&"Ed2?i$Y]Ib)Lm5.DDPܐ]E ܨ` ?rt5f =VL0 ˡ"|]_6ɈXsȯ:Ylak^B mo\߆xmlzo endstream endobj 86 0 obj [ 0[ 600] 120[ 460] ] endobj 87 0 obj [ 278 0 0 0 0 0 0 0 333 333 389 0 278 0 278 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 667 667 722 722 0 611 0 722 278 0 0 556 0 722 778 667 0 0 667 611 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 556 556 278 556 556 222 222 0 222 833 556 556 556 0 333 500 278 556 0 722 500 500 0 334 0 334] endobj 88 0 obj [ 278 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 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 667 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 0 556 0 0 0 0 0 0 0 889 611 0 0 0 389 556 333 611] endobj 89 0 obj <<1E1E759155BD904C97EB7D5BADA16BE4>] /Filter/FlateDecode/Length 290>> stream x%ѻ/CaSK0Q"!QS[q$ZKY%  5h6MD"asw8ycoat$xL1X 5q!(Pfo@@ԈKztB7A߇ 0c0 BuVp &30_/ r_hZ Du!J?XڄZj$;- nCM| <1E1E759155BD904C97EB7D5BADA16BE4>] >> startxref 411743 %%EOF xref 0 0 trailer <<1E1E759155BD904C97EB7D5BADA16BE4>] /Prev 411743/XRefStm 411252>> startxref 413701 %%EOFlcms2-2.12rc1/plugins/fast_float/COPYING.GPL30000644000175000017500000010451213775114656017462 0ustar martimarti GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .lcms2-2.12rc1/plugins/fast_float/Makefile.am0000644000175000017500000000003613775114656017753 0ustar martimartiSUBDIRS = src include testbed lcms2-2.12rc1/plugins/fast_float/testbed/0000755000175000017500000000000013775114656017352 5ustar martimartilcms2-2.12rc1/plugins/fast_float/testbed/test5.icc0000644000175000017500000000625013775114656021101 0ustar martimarti lcmsmntrRGB XYZ  1acspMSFT-lcmscprtP#desctwtptTbkpthrXYZ|gXYZbXYZdmnddmdd8tvuedview4$lumiXmeasl$tech rTRC gTRC bTRC textNot suitable for real usedesc,Test profile, not suitable for real use-Test profile, not suitable for real useXYZ QXYZ XYZ o8XYZ bXYZ $desc Little CMS Little CMSdesc2.x 2.xdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmlcms2-2.12rc1/plugins/fast_float/testbed/Makefile.am0000644000175000017500000000104213775114656021403 0ustar martimarti# # Makefile for building fast_float_testbed # # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign AM_CPPFLAGS = -I$(builddir)/../include -I$(srcdir)/../include -I$(srcdir)/../src \ -I$(top_builddir)/include check_PROGRAMS = fast_float_testbed fast_float_testbed_LDADD = $(srcdir)/../src/liblcms2_fast_float.la fast_float_testbed_LDFLAGS = @LDFLAGS@ fast_float_testbed_SOURCES = fast_float_testbed.c EXTRA_DIST = test0.icc test1.icc test2.icc test3.icc test5.icc check: ./fast_float_testbed lcms2-2.12rc1/plugins/fast_float/testbed/test2.icc0000644000175000017500000237624013775114656021111 0ustar martimarti lcmsprtrCMYKLab 5acspMSFT-lcms desccprt#wtptA2B0,_fA2B2,_fA2B1a_fB2A08B2A18B2A22d8gamt kdmnd dmdd ,tdesc,Test profile, not suitable for real use-Test profile, not suitable for real usetextNot suitable for real useXYZ IÂmft2 -Ge % M u EtHHt !"$,%Z&'(*+E,s-.0132e345728]9:;=>;?i@ABD"EPFzGHIKLCMjNOPRS&TKUjVWXYZ\]*^F_b`abcdf g&hAi]jyklmnp q-rMsntuvwxy{ |"}9~Phʄ*AXoĐؑ.<=<:852/+'# ׮ϯǰo]K9'ǼȪɗʄp\H3ҵӒnI#تـT'ݘg5e0[%k&V7Yy.Pw/P^X"7Ni * Jl.[8^!"+#V$%&())*S+~,-/011a23467;8e9:;=>J?z@ABD!EGFlGHIKL$MGNjOPQRSUV5WRXoYZ[\^ _%`>aXbrcdefgij;k[l|mnoprst5uPvkwxyz|}"~Ca{˄8Rmӏ,9FR]hr{|wroljiijkmosvspmkihfeeeeeeeefeedb`]O?.ժ֏rS3ܟuJZ&Br,T t(=KT\ fnf>j#6Ld~  5RpAa / S!x"#$&'#(E)g*+,-/0>1`23457889]:;<=?@A:BUCqDEFGHJ K#L:MPNgO}PQRSTVWX3YDZU[f\x]^_`abdef5gKhcizjklmnpq0rLsituvwxz{2|O}l~Á6Rm֌2G\oəٚ $'+/38=BGMSZ`gnu|“ÚĢŪƬǧȢɜʖˏ̆}sgZL=+بٍqS4ߩS!K_!_Mt*Jf8T[:i&8Ng *@Vl $<T m!"#$%&().*E+\,s-./0124 5"687M8c9x:;<=>?A BC4DHE\FpGHIJKLMOPQ-R@SRTeUwVWXYZ[\^ _`.a@bRcdduefghijkmno"p3qCrTsdttuvwxyz{|},:IWftȍ֎ $0|7{̑|֩ڽ|}|u|YԢ|1|,.||/iG|=TN|A;|z3}ط}7u`|є|ɲ|OC|.za|f{Q{ר9&{pjx$N~~"dVfqth}^E2#TCG.c0ϽaĨ܄s>ӄ]LDq#߅f{s]jY dǂcA4QVBւ3mr!.\NDO$D텃_/ {͂S_ꏙTmpځG[~C$H4끃 \ ف~O0ׂ΀oZ1C$[$u:{s6Eƾǡ㵏Xo2ߚ풪vmlmY"|8A "(爂.jJ*֐=?~^vk[WC䓒?5pS%;|=FrG7碽|)\itU{S3='?~t >X ٝ$yRgG^SS~ӛe;~wV}rƂུ˜@47w%%n yې_3I-U kꞝ` JxCfbSP"<9كXܸ{Ĩ(٩J'vZڜd.Q:ƀNGؑא$W ΰ^|NڃxtblȞ>Od8D~ZՒt3YmلÂGaqhP~_v2L57 |ٍӟ%p|~?u"ҐQMo ]L+I;3-~Y{'|c|䏆}s}Ԍg~*~|щjV(L@*Մ!ڈfS؃Rʂˋ劁{SL ikPUՇ?b!፳5)*,5f61Fy戻h-Tdž߇>[!ЎbIc!sΌ\Ysx[%vfۇ$S@=񅨊!͏ӊmF8זɐvڇme.RK=J!}ېaџbj̜̋>͔bÈTtԇcQ.>;ÄGlʑY͐=m ⌢@ WrrayOR{90ɐn=fЌ{lҦ{݉iGpn;p_M 7ǂϕm+ܐ¼.h?Gĭu娼~]n+堓]u1KipU5#gyS˺N0?uغxD+{=SkZ„PH)2X~3g}aRyދ %PyG!1i@m\X_F=0(⠐|γ{!{|*E|}_x~'vQe׀TS =!?#ق۔trdӓL͎̄~uAĂkdcD#Q_< É7Ay3*7pՇˇ,c3sՌ;c! PމF;9 ɉ``,LёCZ[/)dErJa͊,O͈H;" JǗ7Ɖ󈲐(ӛs )]xwjt[.J~7ǑQ`O2o󟉘avh@UYh$.Hv5HX6d*O9~$Wt8_fsՔ_WfG3q AԞlH`=LTdrFdqpU9E\V1u6<j2$' ;~@9pcbKS^֛QC?/2@N4ƥjf_ѕW{2m_ƌ٣PK@m(,U}̱NSry-kݏ`]MNe5=̥)8 -czJJzH{L{[|~w}Wi~hZ\Iߐ5X\Ў06#4ϣBSdZ€xv hU8qYLuHΏb 51DOWݛsg~Sə-ta}fX(.GɎq4tщ@v"Ǣrћˉƀrψ\eVҐ"FŎ3ŒPMc51ў{/P~ygqfCjd|U>E΍wm3gp'{3P|oԐb6aSݏpDNQ1%8|f-աԝؔ qaę/zlm}`4RQ#Ba/ mϫsᤓ[졞x+k-^Q?P$@ыF-gT߯ I .vi\IpN7>x+KϚ tTF_fz-tQgZڥ@Y搼K;(fEQ ЇǦWȼ?dʚ³re\ĬWː ILg9jͥ=%Ǚ QkLZ7z!0z{ JM{||&p8}c~TȕE#1Ƒ ^ƪfǢznSaMSP-Dn1;UbuƄnUyTm$`qRoC _0drL) C>Tġwkbt_KQ0B/lE5/ǎf==v\6jҋQ]OsA&qR/*Bb=ì(ԕq`ztѐhSc][֖hNV?8-N3_lƢ\ϝZDL~v%r*fuY@L}=e+q0稲 *}EpJdĘ'X0MpJ˒dѕ,,GGτܑ:Pr|.hqكe7Y Lv=-q,rM'W0dDNzo=dTXF}KEW=y+vՐ&G\Ve yDn'bgVJRM<+΋g*㏁ȘIůҫwlD>aLLUCfH΍:ȓ?Y):`nyvcșIٗ"vvejء_MdScFۖd9Ǒ'{6 ߉Leﯿժt?~iHk]Q普E=7W% 뉣bwӥS~Nzs+g\xP"m7Cb5~#;u հn|ةDq6He¡Z kN KPA H2Ÿ| 8<PE{U݆JV`{ocdXSa L3/>`00r} .{lҺ{D{u {jI|7`|T~ G枰9P'wZ~. sOi^æ(S܀Fݝ8Κ&'j  ؽˆ츽9}[rͮ>huɂ]mR]%eEޝ38 [&U0E^,{q2g"\:†VQuoDŜ|K7DF&>cggڷz6KpGhOeƨZZ#OɟΉC͊:6݋&.j3Z|ylԐndRkYkNJJ.BFBz5@G$͓` ǏQXQxm?bݧWGL@ӑ3͒"ѓ3 S^I5=vڱUl9lal=VKF ?BUIG=(09 H |x~sX iBX^kSrqDgf\VpZK마?!-2"N څuT8|Ƅlr޻i<ƒ_kU_Jߦ;?S1 R!D 񕫈{Y(qXh%^`T'υI+>O1S/!~G ?NH*B3zp鹻go].R#UHxJU=ˊ=0a!AZ xeѓ y*oعAe[QG";Ѡ3/ /djxȖHnǸ㔋dóZP[#EƤD:jG.B,HL>ywsmbc1YO(D۔9P,ϗW,PvmldbX\pMxC7 *͚me݊XO4uVpfkP_a0V]LbdAw5w(|l4f~7Wt#qj'\`穖UNKT3@u.3%^t|' ]|{\|||};|e}}db~~!~~ډun_F}E;" {d {˃+|7|}A^X}ɃXn~\ntC~^>Ƅ!E>"ڃYz;zC{?{ω|lƙ}'}Rs$~J]BDj K#vy6ޗyɓ'zdϻ{{O!|Fх|jq}N\@~hxCd`#RYxdyxy&zA2z`{΄|=p|[H}ČwHӲx.4xа]y (ya y8{ zj%h>zޞS{K;{4zk5x=lx ]xy=ygyUx^z9ezQzŠ;8zx3xTy38y-Byg+yyڷvz Ccz9NzFw6yy$Mwڌ`z0͂~zɃ5{ׂ ||}Xk~,Epς/[YBmH!v;x́sdǁBR,S+]с%Co|"ZtBAC!"wř^ VFxSHhnjΆIYp1iA݇J!ҌH)GÍг&Y摌ފm Xi@ [!ł_~~i~ٖձ4~ߔ~m~x2kxWoߋ@Onp!ہ]~nϷ~k[@~d~e m~d~}||f~i~U9>ဂ~|͑~s~6~~<~z~*sg~VT~6<~Ӑ~,c~}K}ͨ}1}7w}Oe}ӘR?}:~?4}y ~a^F~(~}" } f}|ㆯ}h;u}^c}cP }g8}=r{׶~ʜ~k ~ }ָ8}l}N2r}#`}MP|5|upz]կt ~ ~^ܣz}{}}7Wj݄V?pqL QVڄKH^|М˄wH {ՃiuUg>M F0ؔ!SWӍ֪LŋkՃ\mzIhOʈT>Z <֚x]ז )$xĂWg$USa=^;m 3Ԏ %>jOЃVh.ǖ܂4/vɑe/Qpb;ہs%ҝĩ'#sGޟzAτŘtrQ%cP#̑9؀v|Ѳi(d;肖ϒBۂtbSrMaN_/Z7ΔdT~؏v(>3xR1*p ^LB5}*gwaȄҬpR}mu?o\@Iw`2~C4{ʋj ;Ȅ ცÜ<ڋ[ {tԲk/YUF~0l}zұDxrx7qy~Gzј!{ȉ'|x>}gF4S=xjJыUێL|–Q楢ˉi`WzwcTeRņdE6ۂ}J=Ɗ!o'ņ<{ԅ4l/\=UJr4聭uBO3 eOy3j\ОZ⛠HX$2+~IG PeƈǶMd)w'gуWt}Eu/(H}!UQʶ6Ɉxc 5te?WU"!C-Ym {∬wNx1ky 2zĎ{ |$r}`b[s~Pt:ʈ}E F~:~~~Ȝޏrsxcq{a ЁNĂ9.dÅ -'=Ҩ͐Wv5F*~pc_lj1M׈h9l\ߍ[>SH菰I:|u}.(n^nLo8IfE׎ٿ͓qQm鍟{l]K̊7{ޏ rϰ~Vpyw k[QUYJ%(59 s;3S`ߎnΓ)ƚU\wBhوYI˒ HN3g.2K6CBQގ:"Hru2/fχ/W^IFp1탙EGseَ-](zs CdC3U=՚Drc/ؘkKڻqV͌i~͊kppb%cRnA,ڂa ~^5`W_~{ӌt|Wlnw_񆩪PV=?2qJ*Kh <}?bvٙwwxFyzz{lÏ2|]~{KЌ 7pˌӹ}<9+}ږ}~Hd~ybvPkO[Ɍ3JZ6R¸ уv}@H]w׏փ!igZHI/5'b/Q՗ՉQ^~@ v-5'hbTY4H4ӉΈpKƛʎtÒS㐅6t\fጴW?Gz`E40|-S@+fPĒ>ސ rd*V$oE툿32]j5x^/f&O,} pv7bዴT+GD#0=%z󠹈Ñ{Ï^gn|P`DRMjBB],.ʕqM_Rc䧅ʑ^y%6llq^ӊP8@H ,B {}s۞ wu jҤ\dM=)h] d䇳KA(uzh fZ@P{Kg?; $&Ѓ> #~.BvuEwa)xYyyFz>sZ{`f?|Wh~PF3Db'|{|i}V}~~1r~dْVV(8E;2rچ 3͂ Ղny\rO}XrFpzcT􏔃Dߍ1S R#4o:ɛØv {φojSbDS놝CՌۇ0M7󏙩֝& ߋz 3mwˊY`jRgEBٌ3#0;o։pahYN%rAt x"kM^⍛PAW.֏DҍN%^l$Q*Jv%fmi\ŏrNҍ5?e,@|x0 9tJgZ M=܊s'*X Ʌ%RUȝҙ~ġr_(eˑHX뎱KV1;͉(U Mr۠ݝOIϙ|̨p8ϥcVmHe9 %pPϟև ܴzǖհnVAa~T1QFX6""ˆeSj㪄v}4wG[x{!xxByl8{ _|kQn~ B5~/cPT| ڦE|`5|j}(v/}ję?~Z^c[MPA+E.U7IvkmuFyi^]KOaH@--e騈Lʊ+QF~s݅gٗr[ N"g'?/ۇy,@{ "{9K}kr$?f[LIZCbLꑾ0>=. ,H/Ik*ۆW{Vp\Ɏ+d΍PXیKJ/x<Ǝ*vZy~yRXߗ4yɔTnrbnVpIz;^( FϧzƝكܛx5lș#`T GÐE9^@&o ɆՇK.ɤhݟšvybfj _&֛SwEԏ嘚7T *$bq?uή:ިti hg] FP̒Ck 4!mߖW~IrΜqg,ڪ[1NْO=AHU*2RU&Θ3&v܎Nwvxz1.xo̢dydzX||>Kg~<*5k{b|&B4|]x٥t|ne}8c72}W~Jy<)ߒTƁ 䬸𨂀wm a蝁9VkI~;)9ʼn.İ+Mɀ݅AvkI`zфUfHNG:.A(ۊM$Et|Hj_*aSSG$9M( %-PLܫ.}ڎs hy,]lBR2E 7&o` Iݯo}|qlfȞӑH[JUPWȏC䔓66k$~ɔ$ FZDěVzQ`ore4ZNhBD'4픾"([uՃqx4.nPK"cQ(XfL|@kϘP2 )zT) ˪רtw/֐4E(Ղl&77uWGjU`>uTIŦY< \9-ZOpX)wcxzQxpy1fjy\q}zQ|KD~!6Ҁ%;oK //=t|8]|]y6|oz|e}.[5}PU~CR6$u JOĀY%x[nPd~܀ZO4B5A+b$+ c `B|@vޮm kuc)$0X8LMYAܚͅ4r`# zo÷.u "kǩňa٥wWiL@ʚ3#; `}$}wtSj`J`bUK0g?^}2_!˓0 ӎZQؕ#|'r=hd^㤕;TdI =ʙ0Ǖxzozx,{iYqg3]~>R>H E7c~;00 |wf|nܷ|eг|\O}R}H̥~=/ܝǃsAӊ? (A1l*.v'mcdز?L[vEQ GŤp<4/1߅Ì ]T~uɻtl:JczZP?F߄_;7ۅ.k *u}tω4kSbŇYZBO9Er:=-ܛ+/:ɐ Ć}\sGj״az7XaN:D8t,ٗ,|F듹rْwi2`Gʐ%Vͪ(L{B7+,Ζ 0{(.q幍h1_)gU{KAa6%)~BϖgMzpǹ_g1]'TYFLJP͗?[4<#'ҙ/^̏rx߾OoSMf*P\R):H¥>@=2y$r%$ˌwwnUIIdܨ[_mQGh<á&S0"%\/qybvۢyw6zyg{5z,Z{{X||ph}u}q~R~\ cCف lwwfٛx3ykzz/@z{΀|apo}Z~BQ vזww3xVy1kzpz{Do7|ׅ"Y}ez*U{"Zm|X}*@~k 䀽ktQuxtv{!woxn ybGoz`l{^W|x@V}6 TsϢ tџuߜp.v֙wӖ֎xŔ]}VyjzVP{Í>|׌ ~[@sLt[.uwܭvjWw^njAxGzy6hzTt{B<{|Ls5<̏t'u"ҫsvv/wџJxxxfyRzb;{ mzېMsG]t#u%uٯovwbvyxNdSyPy(8z+'GycإsXtkL0u8uQv w^_sx MaxMy 6)yAcRwڌcֆt,Թt ujvv v'w>cqw̮_PxBK_x 3x\v֊Lu[Yvgx9"ygzb{ڀL}m%~[XTy@E6ՈY޲}}X~$~Z~P~Ȱ7~2K~&~kڀ jW8W?}Ã1ܲ|†+^}ǽ}MbX}}Ύ~J}"~ȄjOV)>-Vڤ{|O| N|eX|}\}A{~}iH~U@> )(-،zіA{/{e{D|I| z}Ag}֋eT~_=fj7$(ez/l z·z{X}{$u|"w|f!}/R}؍n;~ƎeZy"z$>zz{@{u|[d|P}$9}~ y ©yzBzz֡{4s{,b| .N|ww8|2Q|6yyy쵭z"Cz]1zzࣆq@{6x_{L{֘5{ݗzzgBz-mzLBzm-z  z`nz]9{J{7p3!zO5yWzV+z:Tzu䜲z{2zwq|zDlizEZzGz0zO x?MՓHt(v"„Nwoۃxʃyg{7zM|h]}T=zj>+ӟ|7}уG}~)~HVyg:St<kѧ_B$܂U×1郤ԃw҃eR`,;߂ÆˋϨ:@Fҁ{J!LPvd-BQMq@;!n͢*/C𒏰ـߢ:n{^:PtOcQrPI:q:=LˋF_%{D͓bra~͎EN8`+=ɐWŞb^C{pC0!_j9LUW6s_"ȩ{1v9L~}~қn&~]t~@K!~4~o-}J ±ƨ USYP~~?{g~|k~L[N~-I ~ G2}|"|,mu  ~vx~GPii}NX}FR}l"0 |3z‰xJĚԅ~v~g0}Vn}P1C|٥O-{ݞ ygbt!`ufvRvqwHyQY zt܆{|c}PɅm:Hȋ={c Q{Y|}<|}݂F~s]vbobtO19ԅtLoƦ6'[uƆq a*pNwL9C*ļR6_م LtZćp_J_ЃMs87ۈ&"-ʇIFȅ9} n׃^;Li 7|Jx‡ @4;N^KՄ{u'lۂ\~JقV5A=҆&۞{jϕOn yZjoZAI3T; Wȓͅ0wBhXtYGD1j7=@f¦du6fuVE1X/}&Ѫօ׶#ǩrVc.TBz,~ O|RN׆ƻ!~󂪲pŭaрݪBQЀl@ 0*n}Ŝ zنſ;sx!tvHwTx}z o{^}1MJ97,,`xzHُ$zM{1j|N.}| }m~]@Kڇ7[؋! @0wсCj_Dizt`l4f=\YJԃ6/z׎̈,s چq/xjZ؆I5ZLj6'QQ񑷊" wKiY&CHm04 ]o`P?Гfu \g&\W܅F)2/YF)-8V㛈yy>y>5e-rie֑UބmE)}0CDH$Nx0wO~Zpކskc X?S[wCk[..Y.0QHt m|FKnȆ`@QٙAY,z .~ڈs@7ز~B1y#lqפd^nOed>,)ـN }R#ѿEV-P?Xwgjd\g6M+<7'LĚT|s @tHuQ9vڃmx0vŽyiR{.YȌ|HΊ4Xa\Yyi"z!zَd{A|Ru(}J'+ݎTVzחʓؘWL}+rVq'eYAKH<#) 91Þ+džٕm{]oʐƖcŎdWkI֊“:ψ', 0dƥ4F'ym吀aێ]Ux>G݊K8ƈO%;_/m֎F4MNwuܥkɐ]_$S6Et6ɝ"T6䗦.t[t;WIuҭWi>}]ɍ5Q:CQ3LՕiCmrٓHsIu(~vXswhVyy\MzN|?S ,T-qIxSy֞y}&zrh@{Lf䖼|NZF}Ml>A E+҅>l-}ΐm'~T~e{F~peYLA_=;I*o,1yorNL/z%o^ȃ$cI\XBփK<6)!AǗ߉.fЈ0#x܇mԗUb.Vݒ8Iɏ臡;>ӈ)GV?iX6u#LvǙZ}l `”0U#H+J9č('c < /ɒtoj2"D^擓aSG F\Ď8"% *ܡ웾lɚ~}MsHhv•'](,QDEv6X#MօM0䢗z|ORXqoef|[VܘO>B֗*4Rj!9;vrЃm çzdV3ocd`YBM}@`w1i>s\;F7_.䯘x]mݘZ_bFWogK>H"/-|~ےAs*t!l uuv:kjwh`֜_xUczyH|q:)L'ʒ ̐ͬnx2dx~;yet3zj=z_|{TT}6G~9)O' }9%}t|äv}rס.~h~{^/)SFr@n83&RP KjoJ{Q,qbr4gl"J\ƚQŗ)3EC}>7?%1 cfˇEyoejC[ccJPshD<6V5%\t wBPvxUn[<dWߊrYӊ&NӕҊB ~4鐋#u@ 57pv0lڏbvXe2M^@ؒ36f!Xے؉7MZ ~楳u4ߖ k%a|VcKl?5&1dJ%(O"C}[siJ(_Z՘TxI=]/Y猁JR{rq֡Yg<]uRG];p,܎ыu2σ{uz pCf2[͚PeEĔ&9**h$o+s}رtuUul "v~b`wXȡxN=}z}Bm|4Q"w q_x\|ɰExt2ysjLzazW{M}@~3:!Օއ0 ~|{~}4s>}qi}}`n~*VbJ~K?Ё^2a!: rほzqƪ|hw_U}0J>"1o ? n\9ygKpɅg5]Ԣ1S՞IN=Ϙ80J )x#o)Beƥu\XRV$fH|6{߰ܣeril=_֤`V&uKbAWSo5P a'Ϛ8zuq*C3E&Frb􉩀ssTjϴVb5Y=CP1蕐F6<1wJq$'•Kr@Ƞi0`دfWϫvNvDG:Ȝ/]&!𗬖qh\_DYV(MXVC9a`-} k> v#rxwswumxvyx zy{{{m||X~:~p@^o~tzqu{lv|Dw|x}Wy~fz:lO|W}j?}w^s 2`t9&uu*v9wx}zk {KJV||>~6qJۗq6st^u7Hvʈmw| y@/iz{Ug{ֆn>}^k_p|qԺs\tau+wzwxhhhUyDT`{A=m|e~Ao;q%θNrFsu/vmxawfxxRzN\;{}b}vo &~prUsbtuޖvwHdZxQPy9z| {ҟnɯP3p/eqOr棟Qt%݄OuW{sv)bZw3O5x̓p8yylnp 0ZqodrsѦt{qv`.w!M$x5xx1np7}qKrvsvtXo u]vJuwYU3Tw*v䊩oYͰp|ɬq!r ?sT}yu5\uɹvvuvwzyx{jxxYNyFyi0AyF x^*us:ui}vv߆w[wwͯ9gx>W x-DlxO-x8 EwḘprY`^t3Iu9wSÁOxvzd|1QWw~:bʰ5xR 4y=r4z9T:{C| l|t~ cV'P.9ۂȬ~)|"ju;OUv@s߁bG9O܃9˄΄_1ƞ}͇}.o~&}~LPm~q~q `x}M8:&TĎ|ҏx}Wt}<.}k*})}ފMo~7_Y~LP7}$L^n|e|R:|Ù_|Ē h|}|}5 m}]}~K[~54}dh{yx{ȝ|s|H3|nz|k|[}SQI}Ď3~+{~پ){?װ{xƢ{{֞{x|+6i|kY|xG}2}$s |{,a{Rܠ{s{{vX{Şg{Wz|&'E|N/| {&{T#{iS{w.k{|3X{t0s{e{ T{C{-{ uyƇ{٪ {G{;]{m@{M:q{D1b{8cR{'c@z*z >x?zp>qŨ9s&u8v_xapz_{M}7oۈyj()wD\xEyWRzIH{F}|No}y^~LjR6j56~qp~Ϥ6)a|)fm]`KJ#6>vt)0քOzdQl2\3J,[m5HنËͺ@=͂HZx!judZk6I 4 =¸.Qh$ZEc vٍhX߀GӋ&25ŜAV~.s1 Z*/txQyf_#VE 0߀:"S :8/a̞KscrmЗd`nToCK9.~7s%SL4)}pSh)bGR~ߘFA~,~ |΁Q f{m_~Px~Z=?L}䜾)| z{iڿ > y]k~ޫ>]~Z NH}ॼ<}<\'s{暬Uy݄nvorgq?Pr [tlfv3xwjy[Ib{Iއ}5)Y`EvUHw]ÊCxtD`yt~zwM{is|Y~KHD40{ʈĊ-.}ȊA}L~~u~w~uhRFXց1G}3C;6ۊ1Pʙe)ătftWI JFf2ăd*Yۣx0ʆd_rZOd愺UJEP145C򈲑א#h}WPQp]gb T,C2/ǍX,+\k{4ВjnD`vR:뎷Aj-؂Q$𠿝|,@y6XlM_2PdI@2+ր0 بݏ kw.jG1k\k1N`j>)W) }نԥև̆ލ٪f٧tǤhZ[K3t;J&~"|S,Ɉ*cЇ ̅ԳyrHfVXÌ.9$$8}}{ìoO~$pqr)t!~ꍾur;wse ZyJV:d{ 7*ڎui}ڊ5r4ʖfvYqg KW<D(Z8 |(d򒯌颕|V0{p@od+W{IȖ:R&;_Kw@_J~yʉˤn7VaކܠU9G1F7n#2;}Ѓ뎟鎸ƃBwl4_򆗧S=&EϤ5R <|}dښ)o&np&re.sw'?uk:w4^ЏyP{A}-,_Պa>"tԗvwF5xSucyhiz]l7| O}?ዳ,HgkM2z֔34{}$|.~Y|t}khC~4\r)NHh>ʊ9+Պg~?זӡ o34~pr-ysoVu6d1vXxKLz6N$O ·Ϛ%z yHo!veZڐOC 4"k])ܜJs)xZn/cLY'M AU$37E T  }g"#(X~vؚlnoKb(WMǖL?p13?ɂU"r~|tšjvO`%ǞU>IC=.E. 4ҁ,2|Jrh4^cHSoHH ;ģ","z*OYovҥKpz#+rpKsgAfu\ۙvQ'|O~(C3k54c #YV _ʥ~~Ѣ~u lecXܗRqN=ρHB48"j g}ktуk#aWL@ȅ3GȇN!⎈C Epq4{erD7ҏ( )W} ns٠GjamW^!M&B;_5̢̎'R.gpox>q-p7rggss^FuTՙz1=]}R?TNc9t|w&ueovSfDwK]jbxOS]yIk{)=ʘ}#0NwH2n~D_yuymާzHez\7{R|H}<ʗ/iV2BW}$}t˩~lC~icŢ~Z럫A8"}6#)[]щJwރrB}=j}zb୾}Z~Rx&~I~a@":}5*.>(nF,op:qHi|aϬY QYGHbƂ? [44P-'ј$djpD*8:Ď/֙}#_Blֳ*dɯ-\ͫ T\BIKףhB㒾9#lf.#|?iVl@nC%:pqs(CtuUvI&cw݈_Py:{a~̰k̾NmKo( 6pOhr\ssCuzbwOFx9z_:|rHʀj{lܭxn"pqLsHptܑ`v]Mpw97yBAKzDy#j=al 5m좺oq%z~rnt<^ u@Kw50x%xj{kŮmGo)׋np|=r7ls[u IvE+3ww0åj.%kҷmopDyqBjsGWYetqGui0~uÙ \ufj_ƶk[mSolp`uwqgr㩢W+sDt.(t 'tͪxblyn(yq'zRszu"V{vv|xe}zQ |:܀F˓vt߽w{v+0xSwyxēyzz{8t{|}c|}P~-69ف*Utu|һv}a1w }!w~xysz;bi|Og}Q9~G =Jsڹt„uބ} vԄ\ w̄E|F)|J ,{3|!Ț|'|'|"v'|i"|[|tL|v<{ݛ&{Zz+|;0|*|{t*{٫eg"{ŨkY{J{}9{$myĘx@eKkmoȌLqstAufwWyF|72U{qFxrS>Rsu261v=wrlLyTezV*|Ex~1Oox_#yʕ;zo${{}|Rpڄ]}7c~;TބjDM0S؇ot KE%{o(oKb:Sy&C#:/d2!| Ch2y˅m~`ZRNBkJ.֋}v|GVً탲v9wkʉ^zP_5@uQ,݁Պ3ߊǃ|@?H󁜁uvi*\덛N{Č>*U ׀o4+Eǘa\sg}Z؀HL <Ґ(p- ~XjbEo}qzeXJh:&r~@2|ޝvMҒBө0N{}ʤoǀ5cuAVH6Hh~ԛ8W~r0t&{$upaveB'xhYizK{<ȊV~W)ӊp݉{`Iv񍒑w,xyyopzcҌA{X%},J9~;~(݉9 x1D|Ӌِ}a*7}w؍~~mw bFWV?Ii[:B'󈕆 􉙈“\Ԋ'݂{Pv5;k_`ŠrU5]H#9|օ' {$p"P$~ptXB%j^SvF} 7%iP f c?~|rl6hQ]!QD6+(q#<v j愛z⌕p4fMʑ[FO҇fB\4wXs! pсރALՂΛXy =nʊԘjds_YmMAl2wR1QÍwl bb]WV›Kӆl>ƅ+/܃ϛ ʂ'Z.~㍚|u4njmz`٤UqMI S(7HVѓ< D._G0&wRnڑe<[FQ+[F:_9ˆ+cxJMv.m!åAcȣYÍmOOܡD^70s)D0D_k|m\tž(o kɛpbƙFrX—txNAvB7x4D{" υ`Tp{qsosAjrtaiUuWs.wM yW@W{o31~:!4$Quz9v}r&wwixv`lyV1KzKޓ>|/?ۑ{}2* QH&.^zxɝ{5p<{g|^}DTؔ_~.JRJ>1$ xTwZ oa]f8]J-SxIUj=0*F~5ͅuĜKmvdS([GQŅG<.x]|1t/Ck-bЖ͉YؔaP;E&:=X,팵ɐ'vʁ{ ǐrIj#1a/RX-%NlD=8+>1{א4р#yoyph{Y_Vs4LOBs)64);J"wNvo&ǜEf$%]%T;KJ@`4rf&v3me9[%R͒VH됱=>`2l:^$%pzMl$rmko9bpZP rPutcGv};x.Q|Ɂ ry+pqoqiߣs#atlYuOƛwRE y!:{R-U ~W攴&ۑ5Iwup8vhw`MxW*yNz[D${9},d4j"v ynzpgQ{&^ {V=|Ml}CǗ7~8v+sKPNOluw9~m(~f]].UcWUL6ɁBQ 7i6*j:6ttlBvdU\6Sٚ;JAr5{) iݐ6rեۈjۢ߈qbˈjZWR1"RI?c4=f'j⍄䎍S 8qWjiaiaOPYPGm=Ȕ!2O%Đ/;og8`W!ODEÖ<&0Бӓ#|Snb՚GfRיu^UUϛM0Cؖb:̘.o!-V ӌYlndᡰh\۞TGKȞB( /8;},˔ W凫nڳZlgįn`۬PoRY3pQrdHӢt6?vI4x( |)Sn=pf⮿q_5rX9t%PzumGΡv>x3ќ{''-~v85[bm?teu^:vW1wOtxFԠy=Ɲ{{2!}&U{j8kXydɬy]MzZV {NR{E|<~b10[%zƗI߁jjy}gc}\n~>T~M4^DC;Ёu1ID$$}3SVibwD-[OcSkK͡C::</#LXnJvT]ha>Y(R JHAy8]-B!8Flg__*XNPƣ`-H۠'@07],or 01f(+>^ÐWJAJO]G[>35k5* C dݗG]R}Uɦ.MEm<Ŝh_3mt(`͘$qZ \Tc\FQTvϜLY{D4;&-199&W` 'ohbpk4r[mڣksp&u rvrtvwvdyxQf{{:T~}^v mqZo-rptrKv7sw'uay twzcTx|P5z}9o|vmkyJ6mz4oO{1p{kr|ԂtT}s v~obwDOyˀG8{Ƃj k򁹫m㝑oqz'sxT)OxxZyxtpqrçsvUtCiPuX[v&#Lv؛<w[&v7x pkqrysh1tRt6gNtYuGJv2c9vk$?ukyQg1jIlʍoqVtCsguW:xFz1}aۮ}nףH~p~Qrr ~t~us/weey%VgEzEc*}0Oֆ!|Nu̡V|v|x,>}Ty<~E}zUqt~{ld!~|UT}D8:/FSz|؟T{P}c"{}U|*~|s|o}b}HS~`CN2.̀-oyTz3z{{z{n|`|RT}r`A~h-lOsix$2yycz,}xzl{6_{Ո!P|@d}s,Q~u<qjĤ`wtxNUx4>yw'vyj z}/]{RN{>|vm*@} I~V#w wkxLʀ=x͕7tyHhy͒4[:zXLz<{8(C{q|wvwBȉwҝ~5xMrx™fywBmzu.օ} }!n8|Poq̄sqyVu%mv`QxQ zA~|-DŽWu3tu#w6xWwykz^{P}o@J,ăՇơG{a|5|}[u怜~ i݀~]YO9(?b+΂6MΟK9VdJt+h:[BM݀:>D„*火s承8~撳~G~3}G~r3~fU~ՇUY-L*V8<̇):|| ?H@}Ԑ}ӎ4}{9}Sp,~d\~X~AIJS~}:~̋'( 0Ɔ6}! }9>}OlyO}V'nF}Wb}kVE}H} 97}ӎ% }n}фY||ǜȂA|֛wY|ؙQlV|ϗ`|ؖTa|┰F|퓷7>|哗"|O9 |||q|b|Cu/|5j/|s1^v|hbR:|YDl|@4{zɕ|S|lGk|j~$|bEsK|IhN| \|PU{ܢBk{2q{ay8/ =g?$ikgl8~ˈnbtphkr\7&u%New>zZ+h}]׆3ndm}osqC}rrrtf݆v[Zʆ-x;Mz;=|*V N sЏyuv^{ldwpօxe^z Yj8{qK҅}<#)O1 pVĆz܆DzȄ{yJ|Qo"}cÄ|}W:~Jx ;Y9(U鄂 _]䅠W)Kw=@myɁb/{VnAyI%1/:=U['j ͅ|ꄱƊDSӆzudXk@`[7TeIG{N8`j%Ȋ P!~U""ti?^s늟ŔMEwJ6b#nρNP/()|t&r+)ǵ4\<]Q 鎨CY54k!n 2R֍Q6xz zpGeZπO6FB39~}N悤:2xjǟzn-Ecր1X7M?>R0~+}& Ђ\$Ev:lWLb[}VТ KC<=~.e}|{;Ygi΀̎lv؍un=l׌fpjaՋrVOtI("wa:RzK'B~C ύmHUlo 2IpuFJrkHPt9`\|uTwG2y9$|&7_ <ɆDr5tH} us/viÊBx)^{y~SzFF|8~%7 $xĄy{ʋzr{kh(6|I]mv}9R:~LEfR6$B 17c~.&zpaf1[vPӆ΁D#a5φ1;#]芉R%x;+nFdƇ^Z,1O{B4E@O!vӅOzkvQHlbކXMrME>c@2Jo,I&ΆÉc}ՐtjՆHaVJ K?0̓ZHّ--݉P+{crj i_ATI{=+5.тs܁)yyp f,~]6)?RFEGa:,A׀ ꧃wԇnцIe.[lѡlPݠÊT8\)񀨜\~8 _gixknӒnep![8rNPd}tC荌w+5z6# ~.l~nvphm\mr dsYՎuOwBy4|z" Tυr9}iVsutkݐZv%bwvXxMzvA|V3~!)Ww{˒@xshyjLPzla${cW|rL}@S42g%j KA} z4<}q֏~IhȎQ~_yU/K5 ?Â:1]=?ւxudp =gv]SIÄ=酈/׈P<d1Svkn6@Ve)߈9\s(R <5Go;'$.e;/yj*}tt7lycnEMZS،PfFo:k-,]~5{#s Oj/aɒXVND2֑c83 *]'|4yΏҜq:` hݚ _pV=LBH5 'ÄSQwom&{gB]!,TʼnLJˈ5@IƟ3gt%hݙK5~IgvƜ/io kfm]oTDUr Jth>Cbv0zz(h% }HluinZmpe+q\ sNRVuHꑹw%=#nyr/|jl ZH{՛qsrlKt.c˕uy[>vQ\xNGĐy< |.~zzavrwj̖xbWyYؓzPiY{F}:䎅~-]冼Pzx{q |SiY|`}X}~mOZLEFǀZ9,ۉVdςKwPokKg_C# Vё:}MxC83+ˇN̋χ݁9uɘ=Vm˖Uce`{]~UKAݍW6p)@&Pt(lċdGˋ[֑eSUCIXO@,4ËS'Dre>;jpQbTZ!tQDH:Ԑ&>b*c2芬%@Qph`_X:O&LF:c:3|&ߐJcmrEf^PWDO/eFe'=#)2.J%j ylфDdh]UUmM}VoDF;fK0ta#4B勫Ѐj>c Չ[КZSKĉC9.Ώ!g"h;i ɏsa`#ZARIJzP{H|~@}7י--V9$ ̄hc8}\x~8Uۢ~N%qGD['? ؁6]oh+rizL\!?b U[/-ThDME=iB4܅*0ψ&,( RqT݀`k]Y̤uSKD-2&;ޙ3R(6 s su_e錬XtQ3J&|B:7A{1S܎&pw^!W gPPHu,]@ʛe8J擨/?}$]d \}Wsvntw^vyKy${{5{}x4ځgtA,j uvl7w 7nx:p yo{qzms{\u|Jkx"~.4?z(1e|jhF}Wj}7l~)n~yp5kkr[HtۀNIJw3sy}kd6fOi.jIkSE&mv!xCoiqYs̓H8v2xyQ|" %bȪeN g/j5flhv2ngp5X'rχFu 18w1 z|iax Yd.giJk'smeo͌V1qߋwDsz/Lu8 x͈`l cYVf!4hk+jqlϓ2cnSTXpCCr6-vt= wIUJ`b£_Teugƞ}njZolan1wR[pTAUq֒+grYiu_xbǔe8gjc{i9m~kQ_gmPo9>p1(pIu`@_θJbVd.gyi%ktk ]_lpMnifxihtxkHynt0zqf{sW|vE~dx02{XtQku_mvyoNweq8xPs0ryTue zuw U{xD}[{#/=z}["ermrPsstuAuv}wwpx&y=cyazTxz| C_|U}.S~[Dpyrznsv{Dt|| u|oOv}bxE~gSyLB;{Os-u}?!J*Ϩ%op:rs sXzDtmuՂ`w-ZQxA&zPD,|- †mqoSprIRx4sktن^v2oPwK?y=a+z؇W }lnK^pqiv r3isf\uRN$v=x )yM |*kΗ_m|0Ho:p>t qgs+zZty8L\u6<3w'(wzegVk:=l❧0n}oqq8erwXs:Jpt:Eu %vAxjln={ioopecnq=Vs :H't7tƘ5"Zt3cI|#jɱ-lUDmYyso%mpIa~q_eTrg9F#s85srC~i{c|fc|i2r|kz}VnJnz}pa{~sIRmuBx-G{ yyjz;l znȄ{{py:| rl|t`}uvQi~cx@z,F} أwqaxrގ-yltnzuwzw6k\{x^|azP#}\{?~}}+Q` U ~v"xPwy59xz( x{uy{iz^|]{F}N|N~>}**hD: 'φRotJuTv >w_tx\hy</Mr{E=|)~0 ākjHs_Sty(8u}1vrw\f-xAYy5KzD;{ '|ׇ 7rFxszÆt{udpvd)wg,WxSIyMd:8z`{%{E/}qݎ{rs钁yt֑Unu*bEvUwx)H*x]|8yDQ#y{Ӄp𜀌frۂsJ6wt1lu `UuwTvFFw}!6x,!wY|p4qrztsĞxit{^/uLQvDv4&w7v s=N~peh(qz}rzss`h t\LtġPue-B u؟1ust <yc?f>)h_%kit6mhfpe\ZrNR/u>~x]*c{ Љ-:~jfAlbn=}p)rr"g%:tZv*M%xH=Iz)V} ;t}Tp{}q~s{~iuq>~vxewYyK{-<}=(Ty օ{w|Aw|yz"}#yo}|zd }{X~n} Jh~E:'^^W -U̖zX}z~{~~xa{m|Obw|ʀ!V}YI~ 9~&wJ y&HyȄIzrRvgzTk{R_`{τvT|]Go}8S}ޅ$~ˁExxӊ~yt^ziz{F^zR{wE| 6|*"}Vslw^ x4|xȐKryyBehy\z#Q*zC{4{ {/}%ЎVvǙmwvzx+pxnf'y"ZynOQyՑBz8l2zQy\e4v_/gwzxwȝnix0(d xXxؙ*M7y&?ya0wya |x v$fvɧvwrlwˣb4x WxNCK^x.=x.=xGrv .ccf+.hx k2mׅ=mbpVrI!uG:xx@& { QYi؄~k}^mve/ol=qa'sUuHNw9Dz%Ӆ}@zo q7~rttJju_wRT>xGz8} $̄߀:7euʆ4v|큶wsyiz^({0Rˁ|hE‚}6#у8C|d]|{+{}GqRy}glp~\6Q\Dy5߁_"悩0DUnHy7woj|evZfOB`4Vtv!0Oms~ }~]|w;~Cmt~ c~X~M~·A2Q 逃}dw~}uZ}؎)k}a}ڌW3}kL}?c~0~3~8~l|ɖn|}asr};[i}?V_}1]U`}0JF}-=}/.}|_|\zz|qZ|՛/g|̙]|ST|H7||;^|X,p{zr|x|JUo|{e|d.\|1Q| Ff{ٞM9m{*0z霆xԎ.cË|f*yhppkfpm\SoQ>yrxDyOu5x," |oiQkVx]empnoXe^Fw4Ç}z}!~JĈAnhpvr.mSscu5YvN\xBAzt3u| )}vt}Futw k_x(bRyMX zMFE{@˅4}e2l,ȇv;nzx{ {=sS|j7|`˄}Vn~_K0Q?)1ui<pn ԅRizqt9h?A^́TڃziJ9:=+/V\=ʄ+_px7soچfYs~]SHi^<29./:atN~vO_vm!d[X;`QE%F:O,!(} {tnĒk|b‚UYOz.'Dɏ8rT*HW{rpUi`W Mu8Bހ6(~{}y#Llp#h^*UKTAp4~ѝ%}~S|= ecyFf.q%hhŏ j_m*wl0w9oϊ:jgƉv_.VMjB*7K)ZTʌTv?Hm~f ]uىT҆KNAL`5Ɗ(Jw It@l4dE[98S EIr?3˃&CAr]9djJtbQ YkQG֔=x1#x3ԉpޞh`@XJXOU\Gw dpe|f@hh`͔djXlOCo^EnUq9яt,ZAw]|@\+vhn#jgl_v-nzW;pdMsrnDAIt8}w"+A0z<_ uTmmo+f5jp^rKUsLƏ`uC@w7wy*3!|isrlsdAu \vJTxwKsDyAލ*z6vf|)%A~aqwjxc8(yz[7zpS+_{uJ%-|@}5SX(# .)pR|hڑ}ka<~Y~Qw{HFQ?+X3NJe&RΊĀnđg6q_ʏuWŎ;OF>=?e 2n$E~nm?e^#VfN'E ̈~;0]#-afkMcяi\r#NTjˍ%LMaCN%I9ˈ.鏡!' !i;0q3{tx&eww}.߀lShegj^lbW n4OfEpFr= tX2sv%]z.рkmdn]^p>UїqN7)s`Eu<w1uyl$^|Di|qbr[t@TyuLvD`zx_;Tz0^|1#]yH؅h:cv@aYwKZxcS(ynKzC'k{:)}>/K&"hm'-kFxfb{_Ԙ{Y |Q}J~[A^8-Ǐl mƉ~eT|^PWl6O/HYe[?ېՃ'6ڏ\=, 5'x yc`\U=NYFF>;&E52B*bpTo 5b-![-iTKL4El<3n (\O`!YR9Js C0F:1^g&< wVI_DW񕒗P՗IQ A*8׎|/֚$-mvJZzbϨ:d\yfVQehoOV jvHQl@-n7zqV,ҙbt% w ~78ah[hjIUEkNImG>o?&q6s+Kvz K`lZFXnT'oM3qF1qr>(mt~5v*:y$| XY }_UpY 8qRsIKtE[u=Yw4|yn)*{1P Vπ^ ntWơ#uQwJƜxpؚhrjt7 lutowUfq]xW5sz[Ev5{/x} ~m_aw%d8xfy%iz4kz{ rm{e>p |Ur}Du~.w |V!_&rb[veΊg~lj iqVlocn T~qUWCrs.2v\ {u˫]"4`džɔcrf@ |XhхoZkCamKRp1Arń,u( yۅP\r1_k&[bMe!+z)gGm@j7s_lPo@?qZ*sSr x<R[kU^\7ag$:dx fkHi5]kUO$n>p?(qIvƄp Z]`bc8Pveޗ:iEhTI[jÓeM=l Ń~Bk?fϡNli4nkpm~qpJq7serucu-tTwvCTydy-|{h hnY:jplqEnxs|fpEu6orvbUtxgSAvyB1xE{,z} /HfuhwjxXly'znz`r|KQt}VAw"~+y l~d}g~ i[~{kc~xmnilVoq_HqWPs@vo+*xer R}Acc1/eg]jvl8jcnG]opdNry>t̄)vޅM {ˡaߖd@f֋E/itk*hSm>U[so[MqjLzp{)|} ܂Q$kt̕muoHw px4trZy^hszz\Fu{MwK|=yK~H({ WYj|k|0m}.~8oV}s.p~Yg@r~ZtOLvDgQnIxwn_dxbQxea~yh-szMkh{*m[|'pM}asV=rvI(|yiZ5u+fvhrwj}wm rGxohfyqZSzsLE|rpiedka^ulݣ_kn~aoMVtpk3Jqy=Rr?-rxpr|z_t|bIF}=e's9ށiv"%yzш,zWeÉzh{zjyva| ll,|na}Qq-Ua~sG~u8Cx$i{_zqxflym~yotzq{j{CsA_|uT|vF}x7{#"}僶vr,wks|xJuryvbhyw^ zyR{zgEp|{6b}}"ۀEkčtxIuy{vzq>w{pgYx|L\ys}(Q3zl~D*{#5K|ـ}!~6su?t}yu=oKvwevwaZxOpOzyIBzZ3{ }Dir,-;sN wtxmGunc}v]XwIMx9@y5M2 zE{;~JՇbq9~-rUusxketpraudWvLKw2S?xZ0`x y 0Qpo/|+q7srDi{sZ_tzU/ujJv@)=Gw.vwvڐ32oڛz plpr#gbr]sՖS#tH u^;u,v7tՏKotxpOoqerj+[s.QXs朻F }K/~2]Rzi€Gwxxoy`2fyQ]pzp}SLzH{bbre)iԆVg`jnVmLo?Cr1ZucyqUfe;y3g|qLihOk_En4UCprJr>luT02x= {#ŀH |7=|4;1|!#{ϕ@4{`q{6Di {cLa{kX{O{FM{y<#{^/{!b!8zrv zzz-_rubpjebgZj1PlF~o:rv,ˊ̓O2„%- nifӃG_^WE8OZsFQnt30wC%zN׎+Vրl`nqeLo^b(qjVNrO wtFRv*=:w1يz$N|")jōshct\uULw M;xXEy;Љ{?0}#|3ibxbyl[.z^S{PK+|TC_}n:6~/(f!#?gO}`f~^YmQ׉ J6?vAR8qg-j 62 eaX^WÈ P.&mH]?톴6Ɔv+1m ŇCc/\މ0ފG534)넨Wu=ǃb-[ tj,v!z( /rb'm}\`oUqpNؒ1r&Gs?ou{6wf+ˎy| ԐaurZs]T7tM}vF[wb>.x5tz*t| 6_铳vY^nwR&xKz D{-<|p3ߌ})&gY Ӌ^l{W̑r|QL:}gJ.~;C :׌02'csGt Džq\V*{O]H6Ab ^91E0m)%TLkӄW[oTʆN#Fv?I7xF.VS#Ӊ=^H*YrSwRЏ+LHE΍I=̋5,!{C,lWʏ˓Q0%JoWCw8<3ƉҖX*mٕ@y\*`VGbPӞgdJ'gClis;^k3n(]jq6 u6{}[ldrUvfcOhZILj^BNls:w%n2 q&'e@s2w_, ~ӀZ<]hlTJj$NkG mA8_o9pq1s&uv_6yۀX lzRHnM3oFq)?-r8?t/v%cy4t|ƒ6WpQ qKTs\EXt>v;7 w.˓dy$Q|:KׄV7uP;v3JbMw]CЖx=-y5}{E-8u}"ő]?xTyNЙ zHЗl{B.|;}=}3Ò~+n  G茍ST~MB20GO@9u2 !)84.HyQԙ KxE•䄱?UZ8=00fll'=_BqրPRgAJ ܉DMC=?6Z.k%ŏ юC TFNԏHOBzƐk;.A4,#܎ѕ peZREgY]•i(a`-kd}?lhpbnkbqnBSsoqBjvKt ,yvK!z^bb"*ddޓfgQijO{xk4lnmiogasoqR_r4tDABuv+Kx5xka| _ib7ldn$ogpyirm&ks`nmuQpw@&syl*v{+}~u]-qΙ_s#bte5uwgw1k}jhxr^{myOoz?r|J)u\}|8%Zy]zU`{cj{v7f7|ih}+\k}NsnV~>q=>) szӁAXk}[с^aށt7dŁgg[4jKLm>iIhhS}uV+Yĥ_u>\j/_^Jb"bQdpCf!3,gњf=iZ kw]hlamndwpgklqj^snOup?xjs)1{v{硦g)ahd~jgtNljvnllipVo]r^qN~tt=w$v(Rz0x}vd}i[fkhhmjot_lqhNnsd[quRM=sTw1~;Xb~e~d~gb~si{4ik^umRoE5qŁ5t!;uH/|'Ia(0c{eqh)gjP\l^PnnCtpr4 r{U;s~[_⌂pbCyd:of䊥eiZk(Om83Ao$2vp5Lq ^ܔZa9wcmeҐchXj MNl@mڍ0oSn^+-`]ubke{ag Vi KGj=l\.Imfl]U}&_psb3id=_f<#UhI~i嚛< kx|s0z:~6|Zq=)mUzyyn{TppG|gq|^{s}nTHtX~,Iu=w&.x,zY2k0w|mT_nnep\\qĂ*RjsGto;Luă,w"Ywo~juwllm}co SZp7Pq.Fs.F9tf+2u9u| is~k ;klbnXozNpČ=DKq 7sH)Qsۍt hyh2qhjA>hkӔT_m0}VnLo,BKp֑5qU&rrwh4otigk^'lbUmKn@o3pc$p%|q|[W{.}@^Mr}a]i~dA`Y~~g:V#jKcm$>p0r6s]U5v za,yo{#cq{fDh|Jh^|k-T}mJ!~up==wr/JuCxxtgwy(iolyk4ftzm4]m{hoBSo|8qMH}su<~*u..xC;"{^~7vlluwEnmx%p;dxq[ys}Rzu#G{v;X|x-~4z>}|Strtut&kvzudchoXjO]mUDo8r*̓uyw}f}o~Ihh4~j_ lW@xnMpCs7āVuT)xz{v|ln=|{mf|or^+}qqU}rL`~tBn&vV6xM(-z~NtHz=qlzrd{YtW\{uTV|svK}xXA*}y5k~{p'})MrdxwjjyEx\cyyZZzzKR{{IIZ{|P?|l}v3}<~&~Mipw1}?hw}a)x~tXyG PyGzi={(H2-{܂u$c|}~ _nucfv_^wpW8xOxhEyV<#yn0z"{ |-Ylte u]veUnw }M>wDx7:ex$.y)R yc zjtctΐ)[uStvKGvnB$w"8hw!,wǑBw ay/Xhsma9tUYtQuFRIu@iv b6vj*vpkuYxr[k1g^cac[ӆdSfJi@̆l5#Vo'Xrvq `icDbmjeZlShR]DjzIDRl?o4r8&<8uPyÀodehg`惼jXlQ n'H pA>}1r2t%)w{mk(fj l_InWw2p@ONrFs=;u1ƃ]w$kzs߇~kLpldŀkq]s-UtN4vE`w{;jy0z#}I,j,~ub~v[)wT?VyLz#C{P:c|/~9! hs}f{Ha8}|Z}|Rm~"}J~V~bA~I8~݀`-bF~ Wf|4_e|yXb|P|iH}1@E}k6}x+}(~H /d{'*]{oDV{mN{G?| >|OZ5=|x,)|)| }pbzJ[zTzԍMzEP{<{663={EJ'{=zב@|)`yYyҔ|Rz9KUz (Cz*Z:z1#1xz#%yjyzi\bȍ^\saXTcMhfDeit;!l_/֋/oY"=tr Lvh)`a`ZcZebSK_gKƉjC,l:o.q!&u Ǝ(yfel_≨gjYO8irQkwJmARo8Bq-tr w} |e jj@^SkWŇmPyXogI q6@s7u,7wJ;z, Xcjo(\ĆwpVE'rO szGąu?fv6sxU+nzR} 0aPt2[uUTvM[wFXx=DŽ=zK4݄:{)愂}Sz ]`yPY_z3R̃{#Kh|DR3} <~$3 t()6JDŽ.^?~WiQ y IIBj:XN1p}&v3 \z̈́U⁢OhvCH6C@ 78/5$瀟kzZTŠM+FNR|? 6̌-"lJ~퍔qX׀;RGKÑDv=Q4~ɓ+~h f}}p~`]O\BZR^SӒYa[L֑~cEʐf=i24l)oTrTpUx#^`XbReKg`DBi`d8 Ċ80='Dq 'PxhOJDΎD&0=R6Z.EE%h. ڂVe\nPV^K$a,Dc>1f!6th. k#5FnrOOqyU`KOmbsI旀dCXf= Ai 5\ek-n"4pCt T|SSۘ}d=N3Cf.Hh%BYj&;l64Mn`,p!;sPCvp~RhJLjG[kA m:oy3qq*ؑ,s `vEy~oQ$ltK\mF;o?.q-9]*r1אht)vy W|6O'pIr#Dps>#t7Ðvk0=Hx ( yj|U9NHu 0J?( bڌG~UAdj<r05yI.{'$]jْˉXxaU\cYe\ng`zt+i{dgkge[+mjLpcm;sip%wsgtxmr^]``ccB}eMfr|ghfjikYl\nnKQnq:qs%uSu~zv4[Cd]g`i{ckpemdh;pXpjr?J mtJ9p|vk$Xsx?}|]X lc[n^!oy`qro cscWfxtViCv:Hl w8nyU#qz{~#U>t X|u"[vFx(^wMmqaxYadyVUgzZGj}{P7mz|V#p%}]Fz?”jR{yVD|&Y|v#\}$k`}_c~Sf ~Fh6Yk!mҀZz9PTPTU.~X! t[^i^^"aRdDpgX4i j~O &R]||Vr*Yщ+g]\e`PxcBeʇ%3LhhT M QizzU3p=Xe[nZ^ÍlNa}A7d91f"jf}LPo@xTT6n*Wu@cZX]fL`N-?AbM/[cӑF;dUQL[OfvpSPslZVb"YV\hK=^=`-aa}cutfUĎZgY[]iJ]yj`nld c/nsgLVpyjHrm8sup"y8syHb\Pd_xfc whemHjhalkhUnn+Gqap7`t!s{"wqu^{"_dDNbfddiv2fkIkhm`CkoT?mqF[os6Yrv7!$~}g\k?_]mP~botcdpj fr{^i^tRkuE!nhw[5Rqy sz?}L Yr2\t|_uLrbtvjhmew]?gxQ{j9yClz4Yo|r}dX| Wz- Zzz]{sp`| fc\|[}e}EOh}Bkk<~2mLYot~.rU}X́x\*n_da΁YdyNg!"@ia1gkflބ(*SW/svZl]qb`JDWbLqe?7h/jjCRm}U؏tY6j\`^V(a8Jd5=fk.)hD`hQ@{TܖrX;h[q^]˓m}/p~qZl{]Pr`Fi)bĀS_e5UgIiׁM=l-no?u[X͆y|[p^SgNa1]cSYfHWhQ;zjc,mlxm;9BWtwxZ[ln]Oen_֌[bN{QdFfڊ9hu*i$k~VvuYYZl\Jcc^ZaOcJDeaC7f3(_gSj+|Us`Xij[[a]XE_uMb xCc5eGE&ReiϊnVcoYwp]Cmr`csJcY9tfMv9j5@xmN1tzmp~ s{|k\~m_unbl-pe_b}qwh!WsjLtm?vp90`xs|2u~rhca|jet l[hjmjPaolVqanKvs5q>{u#sA/VwYuzMx$ f'izh$kr>j-mhloY_mq%U orJ.qt=Ssv}.Nuxx_zcpyeqphsAgKj t^luSmw)Hox<3qy-Tt-{gvv}katw/wcx nf1xekhEy\f1g"f" QlT?sVytYpt]Mgu`t^YvcT xfI.yViEtt9w9vd|njf|fVh}]j}Ulx~>KXn~Ao5qO~&ruEftclre'd{gX[i,S@j2Ilu?}n*3oo%psramjc̉"beZg̈QuixGk#k=l1mЉ(#CnY r=p`h|b`dڏ`XfOzh>oEi6;kJ/k2 k Cp㇝nt_Mfa—Y^cҖsVNezMg D8h_:i-jXi6 8pj<zwVrOxxZ j2y*]_ajy`oXzcN{~fDO|i8}l)p1s1xu\pv _rhwb;_wdW.xgMryj!C){l7|to(~Lr"uwvrbnsdgtg^vviQUwkL9xHmByp5zrw'|u"wup&h`m&qj5e[rl\tmTkuPoJvq@ws4yUu&{ w4~zs.mnCkdo^ocpq6[jr7rS st#Itu?v8w.3wx%yfzZ|`}q;kt'tz2Xu|9$Ew}}zmobizNgkz_m}{Wn|OO|pT}F>q}H}i>(~rl2WoK$>urFR9u}oFwbgxd\`DyyfX+zBhP{kF{mV=|o1Q~!r#5t}-x5mungfvqiz^w}kgVxcm?NyHo$EzjWc_Z\Q@]Ti`bLcSCǂf=:6iE.lK o hs;h\a_4ZEaS6dTKmfBgiv9 l)-nq 0ugX}Ma`R}cYo~Tf$Q~hSJ(AjAjl8o(,qCtg ?xe{"f^{hW|gjP^|lxH}nf@(~"pW6~rc+tw -|cyl]ymV\zo-N{"pG{{rc>|lt5}1u*o~8wz g~b%w/qP[QwrTxsMAyzu%Ezvz=Szw42{yT(|{}}^̀u`du|vYv]wRwExKswyD xz;yL{2vy}'Az~\{b=~8^{s|fWt} Qu}Iv}~fBZw(!9w0xl%yyp|Ã@\rSUswOQtnHu }@u80vT/vօ#w1wr'C{A4ZqYSrHM_s9 Fs؉N>t^6Btъr-u#!u):ul}XpeR,qBKrDgr=s04sc;+Ws~)st8b&W[lZUR]Mч3`IF|c!=7t`^\Z%a_SjaLldE~+e| _}2G}suTxNykmH{y AzC:zf2wz̃^){{6qP{8 RwLx;TFx?x[8y%0yH*'yP ;y'` zXYQvJw*Dw'=wȍ6wَ.wא'%w0*w xYX5SeGZM[]F`9?9b7 e.Ih#zMkv)naǏuX\iR`^L aKEKc>uf%6kh-kC"umvpcxV`PbJReD g==Fip5Ok,Kn!w:psQ{wU*eO)gIKhBfj;Jl4an+wq _sTv'~SiMkMGmATn:p~2مrI*Kt7IvZyE\rQ7nBL 2oF<1q7?$r9t51?_8b0ܑe?([h j[m'xNNؒ\.IY^Cv`=c.7c[e/h'G1jbm# pE{*My`H Yb7BdZi4"k-fm% ,pHrm jv!ӀJahPEVj@gk9m3oQ,(fq.#֋s0ƌul I)yI)lCQn>qo8O{q52 r*t"12vk2x }yGEpBr>H{9N |3 },Ćs~%$JeI8„˃Bn<'7L1*4s#qO(ׄ> Ă@`/:ą5Έ/NoL("!@ тN]fJ]PIs_|T,a6X7uAc#[je__ gOcURifDl^j:4oms8owYWЇl\[}^7^ls`a~ibd]e^gQgjCjml3mp;,prZxV*_LlXa|[Cdq]gg`i\ScjlP|f@nnBip2ksntzRfƃQUhhz XYjp [Ple^VnZaLpOdKriAg3t41jv lw||^iOnA2R8oxUwqn>Xr{dF[sYP_#u1MbCv@geEw0h,y_jz3(}KuOuvvSwflKVnxcN{/e|ih}HI=}.|M }gsP}jSTo}`W~UU[A~J^|=vaU~.2cf\G8zKkqN7h~R{ ^VTKYhI\<_Y,a(dE/xIOpM(fPŊG]-T_RWGZۈ:]JS+$^WncOdD.vGnKǑdO[[XRPVEX<8Z) Zgkb`}IC(,tFԚlIJ=cN YQzObTYD`W:y7&XS'(Xy1daP1c:TydXoofh\eh!_Zj"cHNlQfA1nj1aqm]uoygc^WՁ#_[xa^KncaWd edrY'h2gcMjj`@m&m30eop sHr@{9CZd^*\av0^dqt|%Vf.})Yvh)tM\&j2j^l&aa{n(Vdd)p Kfq=is.l:uo w_~SmZ{$VqnrtYhpNi \Kq__5s3Tb tIdvH>km;Dmp+prst[Fe}w]g~n`iefb_k\&dmQg,oGiq~:.lsl+nur rw5}XlSuZml]Zogc_pZbrtPesEguo9j$v*lxq\pdy{]UAs#sXt*jZu8a]vCX`pwWNcxaDWeyv7hz(j2{n}IyTRzqUzhX{`[{W,^n|w6PoSgV^PY@Ux\smK_A4a4cr%d`kdu1N‡m"QЇe1Tb\WćSZI];?_3,as $-aň)j)?sML[kP[c)Sl ZV6tQXH'[e=]]1@^!^5 lqLJi*O =a\R9XTSP9WVFY<3[/\o\h of~iQvNjU"mkXdmJ\7[:n_Pp?cF rfm9Jt:i*Qvl{1o}|fQWtxg[liF^!cja YldOnWfDpSi8Br{l)Qtoy"qizc^_rd`jjfcazh{eXsjghlNqlljCnmI7Epo([s r;(w6tTx_dpafhch_fjW h6lM+j^nBlp6ScvkJYfxfw|2Jhi}#i~_p6SpUQiX La]ZX][Py_-Fb5Hopo22qr{#stxwpYapjOhc~ka!emXgoa_4bĊb(c;!dЍvdUp7]?WVZN[E]ܐ><_aV30`u ''`@c\)1xprRpirUaHsYXt\JP]u_FvbnbVp:eMqgDsBi:tld.vn xqp }trkii1ccje\lVgTmiLokClq0m9ro-tqvt7 D{woif]iTbBhk[ilS9kngKFm[pBIoq8ps,ruItPw% zzgco5`lepYLgqQips%Ik@t@lu76nwF+pLxOqzs ^x2~9eaWu'^cjv WmevOgcwGi9x>jy5l{)m|cn~7vOc_A{T\aY{Ucv|`Me[|F%g5}=Wh~V3j_2(dkkk&lZgu.Ta]fZ_}SaL+csJDee@;f΃23h&hŅAjSw̓G_[Ј\X]؈AQ_ވ1J6a6BqcLV9d0;ey$eehьBz^Z_W\S9P ^BH~_鎰@am7b.{c,V"bTgύk}ivRb&wTUZwYERx\dJy_Azb7{e,2}hk *o}gsX*`tZYxu]Qv`IwcN@xf6zh+={k~nhr3f:p]|_ r_Ws'bfP;tSdHfug)?vi5xKk*Pynn{p递u-dsn#b]`omdVlpgNr iGsek0>Ytm>4v@o^)Uwq~ysX~xvbkuh][ljTnVkMnomEq6o\=6rq3t#r(autwdv}{`hmYjoRS+lpKmr%D?os;pu2mrv&sex tz{:~_fsX+hRtQUjuIkvBvmw9nx0ozD%Op{ri}Zy_ ]#dyrVOfBz$OhzH:i{@k|d8Glq}F/m~S#nqUpczʂ[>bTyddMf OFzg? iH6j[-bk^!k[n· }%$YJa RbKdbMDeΆ= g4h$+ihʈhmFWl_~Pa!JbBd ;me6?2e)f7f lub{S1[)|V@Tm|tY\L|\aEY}_q<~cbr3%e'&h|kc-xp#`xX3YylZSz]Kz`RD!{c;{|e2&}hp&Bk#mZs^v],X5v_QwaJUxdLByf:fzi 10{kx%}Xmp[4_v_]6smb=VtgdJP$uff`HvkhmAw{j9p}Lsāy[pg^U qi!Ns jGt(l@juLn8vtpL/wr+#yt { v]|kYnvlSLonLpoErq>s5r6t]t-uu"j<7k0n/k_&wl/lEc ^q]PodKJ+f;iCg=hs 6 i<-i$i~j1 kp ZQSSVMDYoF\X?_M7.b6.e-"n7hgjV#q`X~5X6R~ZLw~]yEyp`>\b6eM-g!yJjrYm tWO{\Q|2_&K|aD,}[c=,~ f)4~h, j UmGowUyaOycIzneB{&g;{i3|k*}n6p2r~W(zTvfQNwbhH1x!iA}xk:ym2zos){q^}sJ]ut}MRUt]k8L[u,lFunV?vo9wqz1xs(Qytzv},yJPr=p8JsqDtr> tt7Guuo/Ovv&wsx_=xFz@ {}Np'uHqvBr w<]rx5sy-tz$uE|Qu~o y=Ln@{Go7{A:p,|:q}e3q~P+rvo#rsO wJlEms?>n^88o1o)p$#!p#%>q3JvfIjwC?k=}lf6mH'08mÊ;(2mی1mPo6u3RTSLkVFY@\W9C_+11`a(G7d'gm [MjxuPX-K7ZEVZ]L>„_8 b]0 d'6ig|>i lxBOu\rI^D:a=cZ6߃e.g&.jEKl 4ol{8MW`H1bBd<'rg5i-k/%mKz/o_ *rx}LJ}e2F}dgA4}h:~Ej4X~l,n#{p~irl uJziE{Bkn?{m91|Cn2|p`*}r "J~rsu byHxntCOyBo=yqT7bzer0zt&)!{u s|nwJ}dyV r~GvslAw\t<wu5xv//y&x2'hyyzT{-{E}}E4tx?uy:1vz3v{-cwB|%w~ w#yHY{惞C,r~7=s8t51t+Yu3A#u^u#nwOszOUANq ;qE6Hri"0r݇;)s1!s r u|>I"T DgV?;Ys9 f\!2k^*a"8d4 f~֑+jycHVWCZo=a\7Ŋc_[1za)ŠdI!f3h@l|.G[AÈu^+<^`m6ob0Ld(g* iaKkfo~ES_@pFb;E@d56]f/h1'[j:lDՊ-n3(sDTd!? e9g3Ai-{k&mn|oVqAvBhY=ii8? k29YmO, o$o7pʄ)r2vtuz@l; n6jOo0`q*,r"~t-ւNum$x{h~c>~q$9~Drn4~s.~u(cBvt wZy ΁}'`<|Lu7|w2|xI,}y}&~}}z}|b~~ ~ Հ:zq{:5z|Z0z}*{+~$I{~Y{e~{ |8xSF3xS.y(yM"My|y8iyD{mft2 -Ge % M u EtHHt !"$,%Z&'(*+E,s-.0132e345728]9:;=>;?i@ABD"EPFzGHIKLCMjNOPRS&TKUjVWXYZ\]*^F_b`abcdf g&hAi]jyklmnp q-rMsntuvwxy{ |"}9~Phʄ*AXoĐؑ.<=<:852/+'# ׮ϯǰo]K9'ǼȪɗʄp\H3ҵӒnI#تـT'ݘg5e0[%k&V7Yy.Pw/P^X"7Ni * Jl.[8^!"+#V$%&())*S+~,-/011a23467;8e9:;=>J?z@ABD!EGFlGHIKL$MGNjOPQRSUV5WRXoYZ[\^ _%`>aXbrcdefgij;k[l|mnoprst5uPvkwxyz|}"~Ca{˄8Rmӏ,9FR]hr{|wroljiijkmosvspmkihfeeeeeeeefeedb`]O?.ժ֏rS3ܟuJZ&Br,T t(=KT\ fnf>j#6Ld~  5RpAa / S!x"#$&'#(E)g*+,-/0>1`23457889]:;<=?@A:BUCqDEFGHJ K#L:MPNgO}PQRSTVWX3YDZU[f\x]^_`abdef5gKhcizjklmnpq0rLsituvwxz{2|O}l~Á6Rm֌2G\oəٚ $'+/38=BGMSZ`gnu|“ÚĢŪƬǧȢɜʖˏ̆}sgZL=+بٍqS4ߩS!K_!_Mt*Jf8T[:i&8Ng *@Vl $<T m!"#$%&().*E+\,s-./0124 5"687M8c9x:;<=>?A BC4DHE\FpGHIJKLMOPQ-R@SRTeUwVWXYZ[\^ _`.a@bRcdduefghijkmno"p3qCrTsdttuvwxyz{|},:IWftȍ֎ $0=_u{|;n`S7Tҽb5%bŪ=җ#-x{+Sam@\_:RZ⁨5bI /M]ׇVy1 k~^m~VQ~ᯃp T%=}vC9Ywx~j~đ/]5~P~賋}s슒}AK~3z6~̇5N\Abrtc]wUVƒS΄^o2K""Ճo$q?cOeU\V'.aDZ쉪CTGq b{KUagsԛ{zZjb` bٚ҄K˃҈~0p^Ib(Ufᡉو"ؕ<ޒyސ/j싘V}o1bBUj9JʈϢ.󇷞%|ry뎒|EPnljqt>7h\Q{섺̺(֍ϋP]_"aG}~L5rhfō[GP*_ 24t]W|pςyey Z}bP!DC{őJ||i})f}œHh~~ŊvPzh]҄Sςʄ5v➌̍5VF}rÇ{hM]pHSw`Yy_R<ݒqR |qMLg'\S|k7Qn5M1-UCwz-`p*ދf[񃋆R%[Jǘ5ޜߙbS⃄Sy!ʏnwe:[?QF .&NPӡyڑΝ\=rwqmUcڋZPo h!ϡ^ӎϘ{{)|}"m}|~rBg]"`RfŻ6.]:ݛG1S:a;'{" qm?g_W\R؄ᢡ I~gzDpVf{Ⴭ\g6R̃$"ˆq&ޑ 7yoɋ8ef\ʄRGP7\\ԡJB&njؓIxڍneX[˅e!RxΡĪԓ,S&@wmފ>d~[R"w[pڔJK͐ev#.lΊ#c1Z9}_Q?t靜l& G|~WPtԌ=@kebDYePq[c@{_ 㚪Ē@|spBj>0azDEXzvOu陓[ߞZ{9ɖqӋJh`>W\AOͮ6]ԣ?&՘pǍܡ胜 yɎpmI0g\U^ą!Vd`NYرzԧ{N~{̔ŝ|YJ|}x*T~nudb [2hQτۃ簢wȦΥGĝ@Ҋ逇Z>w6mF`dUׂ4Z⇜Q̄vㄫ.O[`IizvN+l󍻂c̊SUZ&QɄAhhw+ǟΆ̇х~V*]uNl*.cCӄsZQeQƃi:~ABۛGOzC}:tSkf4bÉZZPQÃkgg!受wߍ΅ό{{s" jd*a㆘Yp܅Q<§9-ᖷ~ 8qzqݏiHCarXd!PjmYHB_biiH_yQWPph?L`6WׄOƧ@ȔOD\۔xonSg_-V"OӦ}5_H7u].КWyvʔmet]·8qUNpߥ <wlz~%=u36l_dq1\ڋAUMÄXm{Px{䦷{,|`|{ڙL}s\ ~jb Y@vPυImyϦx|zܘr}gyi]6a]YPՄ37"cƥfՂt;WyGqɂXi@ǂa ҃)XÈPڄ[yڇΆנ8܁T!xUp*Jh1+`L1XPP߄*Fo^E;;wۖoג;g֎`%΅/XW?PلmIT܍ڇ4?v7WnŒ f_rR,WdžDžfPianØ$gDڏ^}ƚYuNjme񍦈w^݇!WLOքʠ2T񨒗Hs|tial&e7]։oVNنdNU؞ҕ!qQz{ntsA kō`cϋ \UiN[䝰ѣYeS:zE,qȒ j5nbjN[T:MӁ}aɓ" kX'{xpǔ i"asZ.mSM^$<|!4j|Mz|w|}֡},v}ng~f?^܎W*!O兯% pی|u#m1me򒕁,^wV(OINٵjh؃As|tP@l薃ea^rVԉPtүxΩĆƤV{ esf.lՃd‘P]VCP U􊟉/Tԣ6zrQkI/d'5]__V;P>s$Aܨˣyy 4qWpj]ac`'\ŋۅV AOĄΘΓʐ0ЇըWxpڊ{ijb\ ]U^>N6ܗ׏mۨ~ˢw Rrohvha/[_釁TƆ'NQy׎ɘԧɖ}Ǣhkv n ag='`׎Š ZvCTPM‚?dU|?3t m|Rf~卮_Z?YZSԆMDׄ@ϭ ]{s꜎Ple^BXWRKh7L؁}PF}g\}CR}~}Cw1}zpCD~i~b[ؐN2U2%O B}ʋYwu}Mvoonhab!ρ$[U5O"huՄ1փs˯|=unמhKHaT[G UO7GA_4 {̩,tߣWn gza!nZtT퉞7OJiƂORn{~Zt SmF+fՅ`DŽZ焥Tى-O[̐ʺBŋYz.s3lsf3_,ZwȦ[p͠jcՕ]א/|݇w}u~~&t_ydUvك>y*zG$z{,|4P|؊} ~/sj~#d8UwxOyoz4jSz{|EX|3 }r~cIUxtqyyƜ}%́px)k^OR߀!4g߃zܢЪ^=NV]ovÀ[jj)^ 臻QX ضӨiy!l%me7♵cu= i nj\uQ)Tx+3 .k9Be4Ý/sjɒgvz[:&Pt~\KDi.8N J^ti~mqf6Z~O~xy1z8{tf|e_}Yo}~_{*lm℟`ЃÁT9:FX識-ۈQFz8}m*! `cNT)8҉KAŘӉ1_eJe+jyQl|_ރvTwՋRƷYgІ͈NIӇZކrx^kЃ2_uIT .׵iiߨSO=XGЄW3wsk.ÆS_ESkNuX`޳/ΐN@ԎJv-j8S^S[˗g"ұšdIx(owE~pti]2Rb2ɷnټ دƇ,[΅) | shHh s\ȇ[QQ튖ʭ}]9nݗ}kѓ|qf΁'[iPm"],dDߟ{ p4qe5ԌZ_PNUlŷCC˯ZNnQͣkyXunc7cҀYOĉ>On~>xFxy짏 zۛȌ>{׏Ċ|ރވ}w$kxi_sSFɴ~e ~~W:Nptvj…_.S͂߃O0"SE\aᤂH+v u׆}j1^XS}ƅ캃箴È٢_mшSdtil^7TS"0&3ޡd^ފ[\݈@t~ h̄(]܂S΃1r)Ǖ-Oϒן 1n匧}erȅg݃5]R]epyʊєa5,|O0qkfȃD\' QQ݄1k泭nTRCم%zԅp%1eĂ܉[CQeKvަ<_a|lڕyF?nՎ`d~ZI;PLbCE"f Tl|]`wIm"c &Y߈6OxHov{l;ڊ[ߋyCqvu􄰖k4a؍)XO Gwx锆y1zy {x|2}s|~hۇwQ]΅S63E}=Y}٩t~/{~7~ԍv~sh-]cSJlјOŕ ɝboi}qwrBugy\CR郡WCDjjHVj{q]f:\bKۊ4X݂CO[gL|ݑĎqTߚo}7usYi]`׃|EWOz W(ZL:ewˋ{]rh b_(?VŁ`HNUw=cxsm,ynUMz^yl{U^|jzl }p,~~fK[݆R+[|}Ms}~#0~3 ykyoZegl[~Ră3Ɂ&˂xvnjRdч[%:Qcòh};a7YX߅qP%9žu ,y<ֈp鍰h`t߅XC8 PmVۢenƒAщ8*whbo$B`{'>~NՃevT 8nN$fȍ>_%AwWpP,%Έ`S(C}=0)uYemŐf+^„wW:XPSk^&׋Q| t7هl!e;,^CvVOnިkUAwւY0zϗ7s dkdD)]9ʆnU񅝅lN삌Aђ ǔ"X?yю-qLj7c_\xZXUB(NC c)4ԣʀZ=x~pӒjiӌ5b^L$[2T]M,q(̙K~Hw)DSoRhIwa$iZZwSDM,7èFT^@ND鄕:_khp{k tDVmIf}`5ZȆS Mh2Mdʕܣyzh=sClQe@_V5@YITSMٜ>BwNy@r!Tk6\nkޛd]e͖l_ڂYʍK*S߃N^hLDž[dž~wޤޅLqvk#Ge$΄_,1YSm2NHH2}ũw>pjS-db+^#Y/S{넨NḮ@⮴6|v1boŞmiuc]א GXnRcM@8F Ng|*uj.Zg (7a9F:[fV$/P/L(Ї|C]yrҢOlqJfB؎`sxZDNUGNP=~yKȁ=ywXzqxx{y{zİ|q{衞}*|k}~~sFc΀xTvTxq?yDBz 5zҀ9?{y6|vđ=}Q~+jrcfTrlwUxdx.ry>y􅭭z{Ȅ|1}q~jcTtvHvqw:Ɂx7ry+z)`{|T}4q$~ b&T=lucm{vc Ǜwoxpay{bz~g{v |p{}bS~ĄTX]tßWeuМ2zvw_x z:{}|"ot}AWa~ZT$rtO<^uj4Ovw?;xtyz|{;n?|ى`}S'[t>Ou@GFvMBwK?xO 'yQ\zZz{d}m|y_}R?~`tTPuBC>v:gw*?x">yszqy {k|% ^}7Qt~Z4]t:u%voszwJDx)!y /ypw)zj{ގ]2|kP~ _ju.YNu %vwe-x/pKx҂yלSuzh{\|(P%}ƄZvԯhwƵvxz {]L|<}z~pǀbJgT2>~"~~N~~{~~J~? ~ p yaT1v} }J>$}е9}su~1~΋ }~Po[!a{T/3| 7-|gF|Ɗv}!}~}~o|~naT.$F{?O{v| |oͤ:|֌}Q;U}ډ{~onC`T-XfLz3N{ij{{K|ZN|؎}cxzV}'m~`FSmz?WzS{3D{>{|zl}Ox}Uk~9^_~نR~cz- Xz]z+{K V{+|#I|$wk}:yj}֊^~siQuz@bhzBhzӧ{&j{y%U{療|du|퐑iz}G]~2P~-zazȳŵLz{9S{teN{͝ |6t|g}4[}ƈP?~dSϔ{{Cs{$h{I{o{y~| |r|xfh| Z}~O~u؋uh[wuxMHuy@z͖|}J|v~nTa`тSS˂La|ɦT}e}篡~dV~蕕%u{!ꀪm߁P`e܁SႬ􂲃dw؃B1Bukz9blc_kS|"΋-PJ #C׀܆z@҅yBׅl=]_S6JHؐhouOyvA=xTQ6kv_FSǃtc"[Uw -4ՏǍ{ŋcw ܉[jQ^/qR[͖vv̙=yiׁcuvmi]GR ˙ Σ1*Vuk%+7: t=thr4/\TQ0uɸɩ`k,1~훺i~ϗ~~er~ŏng7~ۋ[~Pn&̀c׺2攓~ڟx~|~q ~qe~Zq~O~IλހAg@7~ʣ~{~Qo~@TdD~CYf~T#O/~lgZ^u$*Uvk5Awĩ^yzS{Q|xa~Bk_g8Si̪O{\|g_} a}b~55~܄,mwՀRk2D^SRG\jχ{VᆐB΅т2#r)ق=vσN`jǂ^PS< 7 F$ԇ|(˙cjхAuނÄyiقM^.惟S(Huُ]9x'£wmʊ47ހt>i8ۅh]ԁhS1šY5N%C3VsƈhGg]5Rw0񫬄[׃rBʈ΂YQ}͌rV[g23\$QDAمѩJW,~|#miq sf.[D/PЃ(쩷 fP'iɂ[dzoNd2ZM͇jOh I+"$"\!}b!؎<-x΀ؔjmQ1c|݌ Y$sOM ?|dZn/9!قWwDl b,0X#$N~YAt_uwBaxyތ7{6w|uDK~i$^S ¬zٷnu{p|31|ږ&D}~J׆!tZhᄡ]R킦֌ ً((S$oŃyK%o)ue" d[IdQTr0l4ܐs>ȎfC_Ŋ·|܉+x6nMMdZAQ8\Д_1MdvYm/cZ?˄QJ˱ }giFVGG~و;juukbY^P{PmKy+nЍKɐɋj5 }kՏ1t"2jфaÃ:IX݆!OvPW576.;{rӎiL&`ՉcWtN#𑗧Lev~Ή8zP;q.~2h_PuwVENV:BӬԟlVۛexGoх3Df̓O^sUM_O^'tRݘuv"]x7ڐyIzw[|Zn+}d\{Z'QTOyzeS{6֒{􉗐7|%}v拾~mGctZAtQ:,~٤* Ej_TKu(l Mc(YQ#%cC؄ÖAܙ,7f݃+}ጯtk| br(YVQ ȃט=P]'ݎؐ%ώ9k|sEjb QYC+PsũYŎڕ&QoXۄ[{brjxiއnva=}XPnc^ȑ6ϏzڍHyqeh`RW̃7IOwO@Ӕ_bSvxp.g_uW ÅN!ė1PnIs wKW3n)f#$^s0V3XnN@9-@:nz{T:~x_uNJmsяe%Œ](ȉU4M'OfP2|k nϜ}.twЕ$l0cl\ lTWeM3Єbtuvx'}yj{zss|Gj}aɉd}Xف;P\aU)y^zfz؋˖{q|^z}Kr0~PiՋoa9؀XZPLT o~A~g+~ UTyOqXi `QX@アP<䞽=I^Vq$dVxϏ\pth`Z`+΂WrJP.5"r*VwÎoЌPgɄB_RW P!߃Hsod:S̔%O~/NvqknņfC^ԅWOh@'F і!g}K.u\;τz=Cerԑ kdc]HVOZCxЈƀb@yqanj'cA\/UmdN˄!YiN›`A$̊w֔7p刦ib[ևTN4C9ٓK/}bvnjZosh7Ya-[?T9vqMńOӢ[_|Ηulndg΋ `É=Z>·SMUc⊟9{xؓt=&wm!f^n_TYX\RULt3_њezOsl ueR[^X!Q݃+LRu֌XvÅw~xxyq{jU |c;8~ \?lU?|N,i yzJϣLz}؟/{w%|DpE.}/iR~6bd[؋ЀU 7N_}}ȃ뢀~|f~\vLS~oqBhb 耸[v;TׇNXɐժdj`dӏZ^;X׈1RʅR?LdTƄԒ}3w pyڍ/j{c1]׋`X,R!݅L|uȨ(V| u⚽oXhlbގ͋p\͋/WQRg LI |y{t䚀Nn_AgM5au[ϊV#HgPdK򄓉v!w}ͩ5xUwy:qʟz,kD{`eЖ|_[~4YS{MꅇV-zYHz}V{ v{q|[km}>e8~?_ oY/RSV"2MU}nn}|iw}v?~3p^~jbd9^X㌵S2M#{u|oDiρdt]^4N1zAns䠆nЅ9h2ab]MW֋,R)3MzRVyIy4=sJm+E^g_Նa咆\njpW@vQMeP~ThxcSq Mrt!Uu|vܐ8Qx5 yzzm1|kG`}Ӆ3SXF+prs4uנvuZwё?y5yzl|_ }g$Ri~ڃjpRq̥ksX;t!vwsNxؑwz8j{o^!} Q~upIq+s1AtNuߝvw4xqvy(i{H]|P~pýq̵sTteuۡЍwxi_tSy`h zs[|XP#}ʄ pr+jswæAttuצw 7xC-ryzxfzZ|rO}4%|4r~|t|uֲb}\wg:}y~Bzb~| ||}rn1~`܀ES@zy{Yzн{{|h||}Sc}~2~6~{~m`mnGSv=Xyb)z:s&z灈{%|! |ӁÈ}z~\m.+`ASjׂkhxyDy8JzRPz{_ |!o|y}̄Fl}~_2S`xvw(exW}y-)yɞzg5{w|Xx}@k~9A_J*SV wvԗrdw7wx詨y[Νzvz􌳄{ڊwk|Ɉj}Ɔ^~R9ΔvEmw3gx+x󕳛yݎz/V{uu|ai}YX]~KQBśvܿlv vwОEx6yZz1{Nt| h|\}ㆹP~׃ʉvyvШ~wxaXyAy!z͓ s&{gv|<[}PA~xȆv4nvŮnwqxfnPydyΚ};zqn{o6e|KZ}1HO~"Ɛvw*wѮxj5yoly{znzo{50d|Y|O }؄*kzq Xs5uZ|v?xz$=+{yKU}=lC~_k̀NSΜ0xK/y2.zހ2{8|WW}~~xXfk X^UCR<"%w<]AV<qŐ Ewp2j؀^1RD~侱~1^~aզ~^~莢~Evyj* e^/vRҀ}!μ}[}X}̊4$~E~N~ui]ԀR "|v|}ǣ }@U}{"}ˋj~)tK~ h!Y]R(!FP{v|EЭ||ۓm}}e~s}Ìar~3g~\*,QC{K{<#|%|EJ|R|'} |}cq}Ќf{~I4[L~kPr7a{A{I|ӝx|G|uw|M{[}p7}{eO}튋ZZ~_)O~҃׿m{կH{קH|~|>|Z|y|ٔCn}3 c}Y7~O~x|q|%|'B|6B|BÂ|mx |m%|b}OX;}N~)!ΆqTs5stv6Xx9yт{xu4}i~^ WRxxywxz({|=2} ~ui8e1]6@R[Wy~~΃Qs-NP΂Ct/)h䁦]- Rf5$ɫv҂f)ɂ݉Ӄ~ks?>gg\ɁWRKOʂ}Xi?P_ʈK-}}rVLg@|\mR3ekt"5׋.|q$xRfVz[QS/ZԁNÚ̀oc>QzEoӀ EeLGZ̀^PA]ѣ瀮ۘ_!*uېsyn-dRYOiI,r!zؗ*"]rǖ܁w`:mFHc2'הg1:znmrPi`s\XZP=<՛בpNM+eς-ryÄ(qXhʆ`fX pP$4o'Tފ%ȎS"ֈyĊxU4p*g̅c_{WkOq֐i>Ode Oxvmn2f^VNف5-&KRˍ{<} uNm>e]ꃍU^N'ܞ-ȏߗ֍T|ы|tgxl{#Q{€|ny1}r}k$~c^\U NT\~ˍu.+@ x+q"3KjUic=^\K UJNT; o}`w-Sp<|ib![އU>TN]O˛!ǃڗՆ?|ʔŅvLo(h%aʉL[8 TN-א֋}W{Ftϑ6nb ga`Zw Sل?vM󏖝xψZ8sizgҋs}lGf0`YÆ$S8DŽL~ S2;2ry8ur\kፃaeĉ_-LXRTtLb%8Ǚ~ؖSw0qA j(d\]]W7QKꀭ9W}!v’p%ǑiُcZ(][V͈xQzKKWKir‡#t ȠEuX{Jvuxn{yh5 {Wa}ZN~TTNvCwbxzoyt6'zmŔ{gM}`~yZTN |EGzd2m{{y|Psd[|m}f搘~`wTZ+S2Nxɥw~5E~~x $r{l=,f4ހ_ꌬ0YˉSMפU~!w]qʁkvme)F_b YpSLMR҉Ԥ݃M>~}W!vp&ij̄+d^vX{S MكޣH{ш;u5oiE+c]݊X7RlVLR 7AgzXMt1n"hɈb捋,]uSWzQۄL^Մ$N)yRsSm^gZb\M{VۇUQ;&=Kg8{?xŚir~l[f`G[LUㆋPzKqKyN}ewšgSqk e`QZo+U "OԃNK[Rstz.*ut~w4ox{iaycᔦ{^ }OXX&R"M`F5w4~wy|Ʀ4wC+q:lDWNfԕia\JWyt뉀o idk_g?ZZBUą!PcK߂&8?Iy`~sʟw2n/Fhߗc2^iYɆTKP KjK~V7xprӟm8eg閱bÊe] XSTцOTzfKU[}uw7qlcgTaܒc\􎔊QW툱SAg'NJiځsn)u#pvUsw|uoxvyx̊{6z|||Bn~}`}S]+ؘr`vTsw=uy;vnzWw{xy$|Vz}{|~n }`}SO֜p~kmrg~ؼksOJumRv2xeV.yz{qmU}P`~SB/ԏo rq6rPt{꠭vw$yByzۃcl|_~"S6ς0҅n`ŀp q\s6uC MvxxzIk|_P}S+w{nmuFloNPqsϖuۀwOtyyhzʼn\\|yVP~9KFl?TRn{p qɞYsbuDdwms1xgzk[|.P/}݃;lar=n5zZpaqˣLs}u%}x}vz yBzz{|k|}Fx}~ak~_ 퀒RÁ}v'}/w"}x%~:y~ztYuɗW vMzx4`}'y}sqzċf|[Z}UPM~Sqŧs tZѝu>vZw딽{y/#pgzpe|{5Zl|O~:qծIxsȧt\/u|ːHvawĘyxnz,d{cYP|N}ヹrs0ʥt` urjvMGwZxGxʖtm]yb{X[|PVNy}0~n)~Op7H~r`~tV-~v[bIx=z(v{/{j:}^IR[ہ\|u}vh}_wҤ }y~z` ~{|u~ i3c]πR=qĄ{`{{||R}Z~.O~[w:ڭwvxyI'yO}zx{bm|,cq|Y}ʆO~wC7w/xy3 Iy͚$zuEvk{'ol{䎧b |X }pDNv~8wkw֟$xJy|y*zLWtzj{|`|]#W} M}߿#*mfor$]tz'v x~ysT{g}\&QAhtbuɨRwAdxIy7E{5}N|rie}gHH\EQ؁󻤀zȱ{|X y} t}~r|y0qf[؁9}Qu;,GHio#́{Qp9e򀂂/[r˂WQy ~~O~~υ~zWz.Yo eR [f%Q[Â.}ˍʫ}{~!~3h~TH~3x~ч n)dpZaPǀPi}.}b9}mV}M}4~NwX~^mN~cp^YsO΃/w|ؚ,}ϝ}*h}P}t}fu} l%~Ib~XO2Ub|?F|ŝG)|E}N}&Q~2}\lt}j}싽ao~EW~;N~郏|{e؃\}[qQs̴sЪ[u<v+!xtyptzy|Bo[3}e'/ZQF8ԅyƩ Oz{z=|B}CR}x~ndMZ uQׂX(dXڀ:+fu񀴀wyICmcف́Z*DP{q셤zPRL2Zvalxc=TAYˁ:Pс&ӭ5͊aՇ~KSuAkkbdׄYP> JJCҘځTZ!q|̀ۊ sj{yEan[XCAOo(;#@ޕ 8xˁ{jkrv0id`)WzʅGNi_Ş؁--6ǔ\\yq(ҍKh8_ZV_N :b?ǁ{t(xmҒofR^=&U~My~փW73|ˀwrnhEe5]"~ՊT~!L~~׭&^m֤+oЛDqܒsɉuʇwvym{c}YPǃ ;sitؙԉvTw͇y~zu| l2}b%"Y\P=+x yԘ\zďT{|}~}htA~^kfn^bBqY!wPq?}z.~q,~ϖӈ$202:|JbQsjׁ7aXz:PJ₺UWǕXT~g|zW{7riEaXeP&7aS ʇbnyƄqY`rh`C%=WO$ $5]_N.cxap䇲g@_ZzVcNҀQ凨'pŐ܎Cw)npf̈C^1V.N {9fr|r5uo~vuÂʎ?m e}e]LJU`0M}~PņURO4̈́Vq|XtJlLFd1 \TeToʆBL3ćO֔*EՅ0Pc+{5"sBkpWc[GSqLy~ۃޤ6moۏ"rusMuzʊ_wrlyiw{a}XKO݃.ɑs&t(v'5wxyzhq4{h}`u#WBOoYx9y94@zA{,C|x}p~h3@2_]ẂO揘}N}ӏ̌f~]~zIw%oۀUgn_TvW0[;OvNsĂ^L3krz[(y~wvn~n1f^̓V߂OXiʌ쉉},uFׅ(meP^ yVCxNց~Kw{\Mxnwt {ćsYlj#d]3U@NsӍ^ŋ%zv(rBkOc\h-T΁|MsxC˖FDAf;y"Ɏqj)Ib)[7T rL߀#̆zv. wp 0Ch݃aĊZ]=S,L\ؕ ,O@}ۇ˗ZveEznꑠg`qlY`J)RjCwKM8n]p:}r!Vs}1uu+wng0yfF{^c}VO`st^uՐqwZ|^xthz@m~{eЈ}q^,#V_N~wCx&yz{}{t|lÉ}e& ]HJV N˃ٗd|]|}~zb~s @kdti]$nU2ri~x;t2wvqwjWycF{\Q~U"~EN;S<s0t:u}{VwLvxp3@z3i{bx}r[Ԉ*/TՅN%ʐ"wg|x_'yZ|y~zZv {]o`|zh"}b~[^BT|Nu{\|6:|{k}ru~n~h iat4kZQTGAM8ڙχ?& oFzgဈt Xm gb|`܈Z~TTM살i#xƃy6;r|l]hfp[`WY݆[SoM};v!͕䇞~r:wqʎ+k{؅ei%_-Y#ZRރLہ#]kl}A}vӐ3pjq]dv$^Z Xu KRCLG:ψޗN #| SuɌsoB"i`cy]vZW.QKƀ̃里pz%tYugnG药h-bXHW\f&VP؂4|KTk?;uy”Ts8,-m0g#6a_[|U҃P/υJoq]}^rw.trvflx?fz+_ԍ|/Y2~IStfxMst}gv,wDwqK+xkH.zUet@{_Pd}YMNS4܁Mv<􇸡"wLȝxJ|(yIv4hzGpY{Fji|hd܎}^ҋ~XJRYMg΃*Ƞ:{֜{{2|muM}o}iՐ~d4^^LIXpCRނLMYg\ɟl~ߜ%0zDtmnْ7iހc]ʊtX/0RlMM~ћqy3)sdmےh.8bz]߂W]!RbL炏Ğ S}Ț҆xrN`l̑g0aҋn\NW7VՄ QdLO ̂-|Nxw qM kӐOfF*`s[مlVdWPdKŁ灉{ߌvpFjѐeR`ZƈbU߅P`tKL#gÑzz5tזAo .Wi"d>I{_YχTDžhO?J„WQyq@{sԕn"ۏhɎ cOF^0(XS4OJn%p{r-vsq\Qu.l_vgxa{zn\|jW;~}QDL݅t zuIuvpp^wkxf~+zwas|\L}VlQ?LԄewsz)xWu;$y9pzz2k{-e]|U`}[~V[SQ,L˄N~zy`{ctpB|oH|ja}ieM~A`m1([I(VJā6QUWLÃ~}Ϥ~x5~nsl~n3i1dƀ&_xZ݌J_V7 Q-5LU|=twwrǜmhڕ|c_,ӂDZBUPƅUL]܃|+vݟՄqڜYl˜r#gc ^_BYTP?'KςW{<*u?pz kᆂgTb?]!XTrO„AKNރz\}upkbf;Ԉaiy<\ٍ?X9SчCO95J݁ryyt&Wo|j Ie>a`t[ƇWYRNDžJy$x/sDn@8i.dd _[%\RG@NgZJ%4q-jdrm %soucrbvtkxKvFyxyR{zlL}K|_8~RfπoarF‘pskruê t?wJuxؑgw|zKy-{xVz}k|~z^~RUbmyozʴqk{as(|Tt}Uv~x~wfzV{j|9,^\~RE]lCpn:pCr!tɎuӂwҁvhyj${]}R7j꼿mBo/q(+s'?@u|w!ury#6i{{7w]};R)DƻiӐ>lծn_bpmRr~t<vt/xhz\|˃Q~ۂRhwkSDmÓo_qʉt~Nv(rx9gwzQ\|[P~l hj՛m:o^ꓐq sK|uqwՊfvy3[+{P ~hCjlTvjkvl8wo|xqҚyt9Gzvk|xvV}Czj~|]~Q=YtQqutsbvu3wv̘xxmz y`{S{}ub||i\~~i]`lQȀҁ+irxҸtyЭumzۢYv{× w|yB}Dz~aty|1h}\~QlqqXr΀2tQuuw @xxyNs{twg}\~Q zp;q8sHtv4-w}yG8rz߃gX|+\6~Qxo@pnjŨCr*tvKuSEw2|mxq]z^fo|[}PIinHƱNpߦEq;s"ouVvzxKp yeg{}i{m oCprzyt utwPjx`z0W {ćM}azjW{SlǪa{oU~|[q|t}v;~~>xyse zg|\v~Q_y5q!-yrߨzt{CvTX{ww|y}}{3ry~g|g8]~W\KQ@=U wwڱjxx yqz bz:{{|7{|||}q}~f~[րQ#ف+vo~we~JxaSyDnz({d{v|!p}1e~Qg[6gQ{FuG/vR飙we+x^]yWz`zP{xo|1e@}ւZ~P$9StVuyʡvۗ`wFx yɇ"xz8n|Ld`}[ZZ,~lPdys(tɐvw%fx5݁ayPZwtzvmW{Scb|YT~IO8òvstOTuvwxߍvz jl-{;Mbv|v1X}N~Ńr̞˦Is>u5vPL=wix~Uxtyjzߋ8aj|W}[qqs,4v{yx]pfzé7|[(~P +~p~Wrn~tI~u w`yEyzo-|e~HZ$P||v}xI}vyN_}z]~'{p~|{x }n~ds!ZMP@ɱ{}9${}|p~J|~ċ=}MAm}w~[3m~c1Y@Pz%zoomz[{}JK{.|~,}v}l~cc2#YڂtP[TFyz$2z7{N={ۆ~|yu`}#kk}݄bZ~XbIOҀx͏y|Rez.zƋ{Ys}.{.s|j}dah~*`X~O ԪxXy—yAzHz{{:r|8]i|`}WN~oNZxzS3xz0o{2f|D2^F|6U}HM3~Tpwxwny ՉVy8\z$w^zn{Xze{]1|[T}VL~˄zjYlo*Fpqo# suw?xEmxzcy|Ym PskU)pDr !sقgu˂5wJnxv7zl|rc~:Y|PG|v!dwWxmny~Rz~HI|u}v#>}~}vj}ύn3~e~A]~jUY~ɅVMAI<} Ȗ}**}I}Z}J}h;t}l}d}D\~,Tn~hL~tr}%}}#Ԅ},{}2ss}MCk}pct}[~}ډS~LF~JY`j݈lוo:qvCs{usdxDjmUza|XF-O͂ԁ̈pc^qϔJsĆuWx[wzބxrm6zi|^`6~9XʀOkϣ:uuCv؅xny6@}zkyʃ{q|h܃~.`RWUOxz\9{Y|d*}}x6~p@hz_*WU恗OQTƀJ؄HɀćPׁ.wxbo%gF_,VQO.Tl9^R/~Q/v?ل7nbfNW^h+XV_N܂ɜփF㔣W|ၧtTm0 'eEօ]]U~MSŐ(b>CJ{)s؉lWdO^ \2TzMKԃ/udOsԁ1z1ĎrpsKj,|cH[ƆT(Lc[0eÁ˘$d?x~Jq %i֌bVZdSH1L7~e-5~ွwg@MohaGY R~؆?K~Zj͖*mouڊq@^swH>vos&x^gGz_7}V*XNG%o͋qksuD~{vv@qxnnzfx|^^~EV"N˂ۂ tjv>wix|zuD{`m|eل~^V23NtHyzɊ{"|x{Ά}Ct8~l҅~e;]xU܂N$~琝Pezjs4#kVdg}]UXPNm4ڏ7·5ŀDy]TrejރFc+\RvTۃMC%4q xʆpÃi<[b[>TDWMH$" }ą3vJoshÇcaZZŁ{YS݄SL@Pd񃢅|lˍuzpnlgXa`Y dRmL#уwb[!h<o[z_tdmffdo_GkX܀mRyKnˇ3ć7e4 y@rڃJ.kreWT^WA\QdKCtkDxms͏o=qy錉srv1k\xvdGz]d}!UrN#,XoAqsxFu*x݋vqȊ xjވz|c4|^\x~QUANC:ݑBtuׅsw1~]xzwڊypZ{j|b}[CzTɄMڂy?yz4z}_}{vˉ|o}iJ5~bQ[yT|M҂v?Q}x~,(~|B)uƉ)o ̀haT'[9T5&NM܎7Pqkzytm+g炣`؄ĂZ[SMKֆZ\FۆyfsJQl†fqd_B;Y0S$LGN3ZҊq~Qxhrpk%Beut_ɅX肶Rg/Lo⏟dm}?w'qpjdp{N^,XXBQ8K7(h|:uň*oiQTcJ8]舊WΆPʅ?K)փ\L0Ӗ@zE>t͒'nsVh?bL\.VCgPUiJ͍k̖tm+pzrtt5n vcg׋xa:zZ}KSMg+既p cq$syu/svmLxg#z`|mZB~hSVeMQktGbu~ؒ/vxx8r ylzfx)|``S}YІ}S_ׁM<7xtoye}GzYw8{Lqˍ0|@kF}Bel~L_gYaS_M)тr|h}/|l}vc~\p_~jߊe 3^ XzR߃PMs7.ʀ{t3u|goȋi܉ہd#^,zSX^RcqLA .#z2tC]n 0hƉPc&]TWlQƂ탂Lxh~hys"ImgňΆ#b=\zW Q6rKn*}ywюq&lk$1fY:aJG[ZVNzwPKБ |*vlpk2e_`80 ZUbZO灏J5ȀՑzt?u]]o_j#ed[_K̊Yׄ&T&OK,tJYl&5nylpt\rotiZzvcҍx]}{3XG}R^LtZp|~C/r$yfssuqn?+whxc<2z]|Ww~R0L›t>}T1ux4tvrx5m}Rygzby|c]&}WQ䅬1LҁȚw|]?yw@zq֒{lx{gF} b~&\}RW#PQ0L$Ú{{d_|ivS}p%}k䏧~nfL%as\ ܀VʆɁyQzVLă:@tzTuA7omje6`e[`EVDug7pΌ7kSfό aԊ]dX[ŋWkS?jNكJuBpݙloqGgݓscF_*Z ]VrRNZ>J@8t,okpfߒ/b`^79ZUQ}]MăI܃sojfjaN]fɉ1YTU- Q;MCIncfN{pi7qlHssonuqMvt@xvuzry"il|{}]~}P lkm๠n]p]p_r@r2t*t vuw~wyty{}h{}6\~ ~P4aju^lvnx'6qyW s zu{bw%|sy?}h{n~\O}P̀ h|ȵkL}Zm}o~rr~Ht:a~2vlrx5g[z逕[}&Pl gpilɝnރq(Tsi} uqxfzk3[|Pvf8?h[ks nDpoZrĆ{u"pweyZ|MPa~лe4Eh jmmSoo݋r@%zto`wdy|gZ{ڃO~>*d&gmڣ-jTVlג4oV߃qōxt9Zn-v#cyYZ{qN}؂}d;gOi薌lsn|qhw3sߎlvH5bxbX{NX}}Ǵd"nfПKiџ"lO(nǗq0NusknuMax\WznM}, d+f訦iLl.n~9p~t.scXj'u?`gx3Vzt0M]|Drfm:tAiDul?vnwq yBt.~!zvr|*y gU}{[i}P06qmqrot'qޝ'usҒvu·xew}yyq{{`f}@}1[`~~PqEo]tqu;rwqtfx1uzw{:{y;|rpz}e|~Z~vPbtLauvNdkxNnbzSzX|GNf~9riPȥHk(\m~Wo܇q4}s폗tujrwiayWM{XM}ڂԭsi'Rkqƙlm˜}{oș@q|srui wi_yCVZ{$MM}{i,1|keOmfo@qzsxq?un gw]E^yNU{BL}:I.wf xmiQ0yRl<znߏzq{tz|vo}yeK{ZD}P vf\um7SvoSwqxsyuzwky|y_o}A{Ad~}-Z~O ót%sҩuhuEvvȖwxXxy{_zzx{Y|nB|}cc}~YQO݀rzgt{-@u{uv|x}vyL~)wpz~m_|cZ}y?YZ~OȀHnqTr tv6uЁSw%qxv\yl{lb|Y~zO񁺭p?D0q˚sQ9u ӇvrS~dwuyZOkpza|~3Xe~O: oVZqhrEvto,z_z}q{h|B` }W/~ׂN$t^Duivꉌ)w򈮁xxypp{g|-_*}CGVo~Y[Ngmsˑu TvSIwbՀ+xi^wywo=zzf{ ^W|υU}%M`~򂱠s^Ә'tݏuv~xv;ynz&e{D]j|iT}~L~ s#oWteuj`v}wLtxǏly֍8dXz\C| T}!LW~,#:s tB]u}уv{wssxknysc?zW[D{>S]|φ7K}ۃRhf瞴iNlVnq|4t s|'vjbYy'aY{X~>O.7̥"l'`nהq1su{*wrhyi{`})Wg#O ρ}r~t ]~xu~wxyVzq{hҀ}`~~WUNlkm|hxD|y@}dzDj}{3C~|$x~}p~~hs~_VNȁ{:}f{~iX|b~ |I}Aw}o~E}g>~ۀ^|CVNz@z烀{m|O~|0vm}nz}fG~M^;~V mN1E>Syh z({zڄ{x5}{u|mE}$Be>}ʄ]c~xUQ8M~x֎\ytzTO~z{{ss| l&|dH}P\\~-T~LFxby"Ny吤zzz[{5r{~j|=cC|[}^S~=L`~قx>xޗFylz6xz~q({NFi{b|Z}9S}݅SK~x+Awnaxyo yUwzwo{h{1a |>hY|戡R]}K~$V}ig9~iԏτlDŽVo qw܃to߃Ovgy?_J{V̂~hNl nspㆁAr~΂tv͂vnyfȂi{^J}5Vi9BNn4Rar|sfu8;=v}x}]az&}ksS}nlb}Ge}^}ڊ{X ~ QV~LK ~e%gGYj5ElفoRzqsw)tPl3ovdyk]&|UM~MD-lnňdpȆryʅtrSvk`yc{$\}OTlMyqsBPtvyxxqyj{0cB||\~T3M<ՓGRv1wkNx~cz w2{'p|Ci@}fb~[{TS'Mq܂؅>{wׄ|3$[|}6}vZ~Eo~h邌a=C[T MZUUOU_{߃$uMXnDgaZet'S?\L ܃7FztPmQf؁d`)%YRRွLXˍApERy9ŕ?l7/eۀ_QXvnRHDK̀j!~ٌowwEqkd׀q^j8X.{QքRKT/* 0wȑ}1vp?iڀYec ]\Ј)W5PqJGY͗ {9uJϑo]hȀb\suV^BuPFjJ~~h6j׌}m+|A5ouro:t}hwăqy[d|4Sh~Lz^lӇ㌉n܁ap{31rttnXvgy a-{2Z}gSL ȍqYirStz"9v3swmyfg9{`%|Z=~SNgQLՂ `uc[wXVxWyJyr=zlF{ftY}!_~hYS LÂ=KnUzd&_{6~-i| wh|qe}k}~ce._]Y+-RɂLႆm~߂ΈL|݇vp҅xjҀdĄ1^LXROYLQl?z̓G{Rum Go;i@,căw]ŃW߂ QKĀB.KzF\t>tmn{hwb؂\GW:Q( KCu#ڇ|~dž3yۊcs mWgAaむ\ӅV2P.JӀ NhQ}]IwxqlPfVՊ`Ђ[c`UÆ O3JptƔ|vi ;p7kIeTv"_ばuZAT̀bOI؅1J_h9kC|k{mvoprQjPte"wB^!yX熤|kR8 LJ܁mۑo{ngqusptj.{w dxy%^jv{PXv }R;L=isq9ďrze`tqtv o40wipyMc׈7{]|X w~Q1sL0?G~uZ~vyOgwsynLOzWh{c'x|]W)~MWQL$|{yt}zZxB}{Br|%mkx}g݈}b{~\΅WBcQHL9܎}|P#~w~q9*l\ff/a\=VفQɂYKĂ耰ʁ{guڋpik=$:e߆҂[`|[OiVRPFK=E`y…ptg>oSj4dHw_ׅ6ZU}ՃP ̓JŀуC~x8ssn8yi'.cʆ^􄔅ỸrHTЂ`O^ J]jj|ό&wfˌrHqmgb܅U]X߂S셔NހJ{‘vv:hq-k􇥍af:a]FXS>bNRIizl u甄nGpNpk͐rfu0ahw[z$V|Q OK7~ޗmyЕozurqloNsWk 3uAeލ'wH`ً'y^[7{V?V}P΅K/}閵qEx唐rt.rto!]vjQQwe{%d:|*_i}@[#~ZWSP߀ÓK Ӄs{Zod| k|g]u}cg~Z_= [@|WZRPNK_JÂ^2r~nj6fsĀ b^w^iZ~aV`ˁReĂdN>ǂJQYq]miIe!ga‚]Yˉ^UɇFQC3MփN\Iq}p0lʔS hۑd`ڍ3\ۊZYل0U%DŽQe˃MdރI p3vkؓψgߑscď _茬[p X9QT`F*PSLނu5I@ojXg"bT_6[0WۆSՆ(P]LkHiнkbTmeToghq>kʒsnuq} w tqyUw}f{z8[ ~ |OtTii|kk&mnop"rsCut+u|{vcwpxye{&{Z}}OĹgzpܮiralFthnvpw3sHy/zuzp x|.e?z}ZM}~O.exh:yjzKme{ 9o{re|yt}o#ww~dzRY|O=c@fiՖlEnTqxt.nEvڀdyY|?O~ b6e˟h`k^'n"!pׄwFsm,vO c3yY {́O/~}Q)al dgNJ%jpm~pE~usikuԅKbGx%XJ{YN~`cՑSg #vicl匡~otr&juaiakx1WzM}`1..cTʙf]i}>lr|oQ-s6r/iut`qwχVzMX}Sg_u3cqfSeiBd~l0azo jqquh^t_:wyUz=L}_覣]bf$TOi kyn˔pqqg2thi^-w-U ybLv|pbmqyerhtkkunwqyy0to/{wd|zTY~|O,mi`ok֠3qgnfCsptsvuZxxqwnOz`yc|k{Yk~k}O$rlpGmr osqu3swEXuxwwz{myy|cT{}Y}O ajAw#:lnx4nyP.pzYr{it|dvv}^ly ~Jb{Z5X}Oh}pk~N,mk~o#hq~tuv;m_Ão͋Gzr5qtJhw_ypEVk{ƒMa~*=elgTjm8l oYyqȌpWt:glv^y U{aL}yIdНjgz6j1 2l_qowq| nscf"vP]x T{ `Le}]ddO\gVili|nі=v;q8msev\xgMTzL}QtZbupeΛvizwkSxoyqvr{Htl|wb~>zpX}NFҬrYiFAskKun=v_pwr~yu4unzwk|yb}|X8C~Nڀ5po¡rqssju)u!vv}x3xtwyz:j{m{au}"}W~Nunv8pw\rext yZuz|PwU{sny|j z~ `|W~\ Nmi|oK}q5}r~3t~{&v;rmxMiUz,)`P|W;}N>"l,ʜLn2p@rsyu҂yq6wchTy=_{V}}NQVk"䚅mI4oyRqlހsWy!;^{U}Mx~ځajk䘶lSnƌfpƋ)wrvtnvmf=x)]zUJ|L~lAilnD"3pIP}rK}utImvHe,xF]zF4T|.^Lc~ ix"k͘npb|jqt-sl)uQcw[y쇆S{օ#K}̛i~pk(TmŚ=oQ{ qirsjubwZyS {K}hxc Gygfz%i7zl${o{|qs}iti~iw`~zWq}INU Hvi0wkZxn#ypvXzrz{ur|wti"}y`1~|W~>N?>kuoE v;qwas^x{tł!yvyzxEq4{zhb}{_~`}V,N*ـásuVgtvNv'wوwcy xzFxsy{up:{%|g|y}_ }~Vc-N{r${Os{u|v[}Vw}wXy ~oFzl@f{^}YeV~ŀN%cBp* rI"tlu~&vv x]n ýe{M]|ׁU~LMoYqtssPitӅ|vOtwɄlyD6dz˃\|X1T}ςL8 o@p틚rt.{Cuskw?kxņczR\5{ℂT5}[nLn~łVn phHrqsyu@r$v͊rjxYbyU[Z{zS|.K~_ng2pqѓ}samx^t_pvuNi\x@ay#ZL{R|K~ؕXn8ፓoMq~qs&wtov&hBwp`y?Ycz̈(R|IK&}}cl}gf`}ij~+lJ~o7wrotgTw^zV[X}sME{Bi+ {kz|dn ~|p]~}rv~!un~wgfky^g!|U~]Mׁpynڔzdp{r4{tm}|v=u}Bxm~ye~{]}Ud>M7x2t yuՋyw.zxw|d{yt|h{ m}A|Te#~#}]M ~UOMځ?*vzwz*x{y|{8z}Hs{~ l,|~dl}\~:UMruv刖w/xsyy怸rbzk{4c|f\~ TwM"ՕtŅ?u†w-xv}tgw֍mgxfz6_{#aX|DQ}RK~Rr𙼇t'|u`Byvvs*wlCxeyK^zЉW{Q"}KJ~bpcofljہoilrl{@voisr~QU~O~YJ1!o|e|t|v|鐄p}kX}=Je}s`!} Zg}PT~AO1~I~҃Dze&g}܈jwƇmQq/pkÆireu_\xjYb{KRf~$KB k ipRl|ŇnYvÆpq6rjuyTey`szyn4x{h}|b}]d~W^QhK$(H{}t|Fx}rr}m~hg]b \`̀mVρPdKa7d݃e|*3vĂɀq7nk$fria#z[@V.5PrnJ怺m8zׂa&upɃj߁wey1`FZۀeUAOkJvH wyɇtVnY*؆=T:N4I8|N,v{q؀8l]g bsЊE]X`wSc\NGJIv<^N'e|hw쌑k+rPmmYplgֈs!bwu\xW{Q~gK7I4j{팙lYvnnqEpl sguiaنw\$K#V|}4zewqP{?rn|m|h}c~_)ZZc+UOۂ!Jف{UV~WvF~q_lgFc:^J$YVցT6O_kJgz_uǂ}phk/fbb]}XSSN*JxˆHs(oJejz{eՅ.a0!\wWلJOu&ycqyz_mJX{Yh|Hd}1`\e~\#1 WSCNJ]݂tF|pn}l<~WgF~cȇ_yŀ[WVDRqNAekIes{o[-k?Jf򈝁b^^1Z=V^~REMځIr΄5nN0j>H,ea̓]҅YلUQ~MjtIBHq?m2ni$d~`DE\X eTQ oLH@mpl‹:l*h.Gd`̈_\XBTDPm-LvńWHshowj]kWlgݒ0odq_ҍt"[vWXy|S|CNnJLrڗlkUnKmmk68og2$qcds_Iv[P(x]V>zRe};NIJԁr ?nn$0ptj/rDf*t"b͎1u^njDwZiyV|Ru~)N' =JchЎheQ4at^1Z"W, S*P-LLw;\HckqgڎVWdW?`]J.YVd R愓JO-LӃHjfˈ$c|_bD\YRURJKOÄKx,HjGi]k ax\me-ohq)ls^o[xurmx,ucszxX}{NQH~fe/$hhkDjmmwop^rirwtulwxbzHzXz}|NY.dglcFfn}ippl3rnt{qzvvt(xlvzlb:y|LX*|}N`qbPs|me-tܚHhvHjwmx~@pzGtsa{kCvB|ay6}W|! Ng `uzqc{(f{bi|]l}D}o}sr~jvuaxW{ Nm~k^9b6DeQh[kӁg{njrqiiwuW`Zx6;W{GN ~Pا]ߝa4 dg=k]z>nFqmqm)het_wV^zӂMp}G\ŽI`A Uc͋ˊlg"juWxmp?pght^wJSUzhL}%\"@_c4ڈfJi)wm;Qo p~yf[s]vU z Lf}* 0[К[_Ub敱fEH~ivlwmp*e%s`\v6T8yK|܂]H[j_ j2bjej}IiXltlrloގds[vHSyvK|m!^onapfe~rh؇slD~3uotwrkKyua|yW~`{M瀲~$je> lh ;njpm9rpV}trsvuj}y,xa{zWT}}MDnBhlMjn&m%pYo[rcqtv{svosv+xlixzZ`qz|PW}k~M٦]fri4t1ku,nwpxzryrud{Khw|_zv}V|M}=ydyXgz+ej[{l{тSo~|yr }cqt~$h*wD~_]yzVu|M$cÙf^iB-k`nxJqOosg6v^yt U| M~bD 4eKh\!{k*Qm]vpnspf0v2]xUD{L~Kiaq(hdz&Ig"jm$}mJ&up"mrekr'ct[6wˆS7zK}6oK`G~0cQΉ^fb"\iDsyl!qniq؍rbtZNw~RzAPK0|@q5^蜟rbJLseʋu5i@vlozx#oqyrh{{v_}Yy/V5|5MCuoeVphr7jDsmuzpMykw0rpxuhzx&_A|zV8~}v}ex~]{1[UZ}gMhǜDh~UAj~l o;d|qtsm"vaexS\zT|M !'fHiylănr{lp΃Yss" kuudwЂ\7z0KT4|wLz~fhPJkBmzp'r]r'jtZcwW[yS|K~Aerď%h pjm(xooq ritb&v_ZyVR{K}8eDggkjT~~lϏw;oCoqht$(a v=YxPR={PcK }SdߚgsDj }lun(nq`gzsҌf`vBXxQ{J}DuF_gzvCbwBf"xQi\~yelvzon{s ff}'v,^~y\U{|lM!xs4ertsh.Muj_vm}xIpPuyrm{ue|{x7]~zU'}fM )qRkm^rmtBoτuq|w7ttxvmzBx*e{z=\}s|\T~XMHtoqbq>rgrttv!{av/wswy=l3y{zdN{.|K\}|}T~@LInw>5oxGqyWysqz\z;u5{crv|akXx}_cz~P\|i=TK~5Ll|n}yep}r~xxtb~qv;mjLxbyI[Z{倩S}LM]kmołv~qlw|sdpwlexQhMy7kz&myu{pWr|rj}ucT~xJ[0zT'J}Lh"uk6rvmawoWxqxezsq+{-uj|Nxb}uz7[]~|dS~tL{spȋuFrk'vt~wuwIy wWp3zIxiJ{zb||+Z~}SaQLΑtrvFzswhuZx|vyv6xzoCym{h~z}af|.~Zl}!SK~!L}Qq>{r|MOtW|{~u}tw@~5n"x~gzi`{Y}|R~~L!߁p8p Yqρs~/zu Qsvvlxfuy_{ Y|R:}KbȌoQ*q[rmxtU rdu넯kwwLe}x^z~Xp|Q}K$~nY|yR~LgxupGyTqz3syf{ u\s/{w l|xf_}zh_~i|Y2E}Rw'mL $wuex v~y wxEyyr/zzRk{{e||_#}}X~R72KNuzq>v{7}6x |vy|pz}j{!~Bd|$~^`}/X.~;ZQBK@tcu{w8uxUJoykiz}c{%]|cW}Q6~K"{sLNu5"znvut`wnxǃhypbz>\|V}:P~KJMwvwӎvqxAlyfgz b]z≏]m{UX@|oS8}=N}RI?~ b~exhs kmƄenhqbt\w.VTzSPЃ,}rJу i]f|i2wkr.nSlbpgX,szav \4xV{P~>J͂)k{m>vonq8qlisfPuaX;x$[,zjV-"|P^%Jɂ1;぀oz|qMuxsp6ttk-qveځrxl`wz7[2| Ú}P*JŁ΁~9sy]MuRtkavo=sxjOyez` |CZ}Ur  O=kJs}GxCxDyKs5nzTn{TiG|Sd.}M_? ~DZ D;T1O"J} |~|v~]}*q~}l~~nh0c2;^bs/YRTdPO%AJSz}Fu} p}ہKk~}g.~^bJ~]~X/4S|_N͂}IyN|tU|o}7j}wf+}˄Da_~ \~bW~SH `NAeIaw{s|Znc| i|ve}F`\}L[}酴W~F R~_M Ifv{q{&mG|>:h|Ed|҉W_}}'][}~gVi}VQ~PBM?~/H+|ߊGcwuesShn[ki"n~deqt_tyZZ wU,yzO}J1j{ψg+virfrl&mnhՆ#q)cޅs_v_Y\yTЃ{Ojd~J4-zhk9um]qnDolqh-sc9v^+x?YtzTzD|O<7J6xyoLtօqpi#rktgC8vbxX]gz/X |T$~OgJ9&xfsTsĄwtolv=jӃwfxOy,aӂz]V|Xe}SԂ)NJ;Ɂw1wSrsxtnP#yi˂ze{`<|\}WSa#Ny5IZ?v {7qz|m/R|h}d~O` [ʁdWE:yR߁1N)I䂀tȁ0pPl g\gc)_: [ ՁyVRf.MŀyIFxs< o,k 'f+b-^_o+ZIP)V:$Qڀ(MY HrTm}iYMe/a]oEYoτU<Ä{Q+ LHŃq(lڀhۉCd`\q3X^T\PcLlo H~}Fv@dqlfm׌=iiyl`eVo(`߈r \tW܆wSB{NZ~IuGCgq$jEm lho*dq`Ft)\ vWvyjR|"N4"~IKhtLkpml+ogqct _vA[,xzWJzRp}*NvI݁sOo.o&qkDrg$tc?v_6xe[ hzCV|5Rc~-M%IvrKrn4tejbufXwvb(x^tezZ|VF}RW$MЂI/q8svm*wibxehz1a]{a]|Yׄ}Ub~Q̀!M7LImp/}z l#{h\{doY|`}\؄~YjcU Ԁ?QCEM%I25o }k~HgfM~cl_\muXk݀TP{PցɂLˁGvĤm3j ?xflb_ l&[L܂UWVS҂PYVLjނHol҅?h􄣄eY ap^ڄlZoNGV̄!SCSO僸K}yH`:kgdi\`]JZY҆ VCSR O1{K(H+փ^oeLkڑwghtjtdNm"a1o]V.rYu|U-xtQu{yM/a~pIVnhkXQ\ `mc׋z+grQk1fjnЇbrj[u[S.yK}fW[_=c{8xg0Wqj֋xinsarZ%uRvy;K#|Wh^[f_d~c(0w~fߐoj[hn `qYRucQxJ|u]CjGZwl ^:mb oeĀqizx7hn>yBkHqnJjqij{sJmsuJpl/wYsd"yvp\*{yoT~%|OLZ~-igkj&mlpozr&qyrtXskivv4cxx[{E{S}}RLZgom]ioÈ)lbqns}yrq uVqsfw"juxbx;z[=z|S}=~KL[!eshCuNjvkm~wxXoy.pr}zjit{b=w|Zz:~S`|5L[_W_cy"fz2i{s}lw|+wo|oq}htQ~Farw~Z7yR|`)L ~be僢hр|k=unUmnq gs`vxYy8Rb{K~,aedυ +g{0jτPtxmmpkfs/1_uXxĂgQ{zK~E`߇VdgD$yj0>s;m Xlloqer^uX:x`QR{J}ꌏ`|(c"fߍvxaiˌqlk5o~LdrT]u2zWYx Pz˃J^}i:`7R.cbv}fwipplDj)o"cq]t)Vw†:PzQJ}"q[Ȏs3_]^tc ufxw$jq`xmjz*qb{t[}xSbp{LJRoaqAdrg~tmjwumpvwpi]y_sa{,vZ}yS~|KpmgoojqMl}sovtqjovshxv3aWzxZ#|z{R~z}{Kyӑkmw mo`QoqR|Zqs2usunuvgwx`yzY{|R~ ~gK1gis6l.tn~v{.pw`trxmtzg%w{f`)y6|YL{n~Rh}FKÀh`xԆjym[zyo{lsgq|Clt}f9vU}_jx~XzpQ}).KU*g~Qqi~lg~xonJrq"ksre:uD^xXzgQu|K"~߁Q~fhփ}kXw%n'ppnjr҂dOu,]w]Wy(P|=J~re`ih!:|:j݇umdooچ0isrJ~c^t]w VykPs{܂JV~?dgzjotslnuohbhHq݈8bQtI\vVy3O{yJ}OdbgUCygjs>lmYoegFq{ahs'[Evm{UGxON{A%I}su\}v_Twc{uxftyjtmzmgK|*qV`V}stY~xMRy1{KLYsbte v/hzXwqjsxmm#zpf{_s_|vY~3yR4|K8qg/s/jtly>v-nrwq`lUysezv7_;|xX}{2Q;}KԀ Jomqo~sSqxtrqvtk}x.ve=yx^{szX>}|Q~~Kvdn(rz]ps}NrunwsvpuxOjwHydy{(^%z|W|}Q~aVK %lwƁnx{pyurzot{iv|cxR}]pz0~oWR|SQ}4K2kw|mm}jz}o}tgq~]ns~huRbw\y:V{P}iJ5sj ~lقy(o#s-q6mys8gu2aw"[yV({P!|JX~Ł̃iʆ}l#~wnvqplUrft`v[*xUz O|I~biD| kvdmppkr*elt4*_v4@ZCxCJTzMSO |UڀzCP@}AJvAyg{zzjCv.{lp|>o&kn|qe}s`~pvqZ0xU{OՀ~Jrx:lzBy:nuz7po{rj{te4|v`}xZ~zU'b|OO~Jn<~kvqGywrsxtnyvizwd{yF_m|zZ}|mT~~OyJj0}uvuwvwrwxWmy yhzzc{#{^|,|Ys}@~T^~S=O!haJ*u{tWzgvtu{5qw|lqx<|gyY}bzw~B]{~X|S}̀qN~'IzDse~u'tKpUv<k\wzfxPayր] zX!|)BS^}RNO~wIq$xrNstAo(u5jEvփex`yH\@zwWt{R|悩M~I$0iwrrs(muivPmr`lhncq^tYiKwTPzN}I؂g{7~ hv8~xjrq~ll;oFgqbt^BvXy"S{Ń}~PIہy|lqu}nypz}pk~rg~tb;v]xxXzSv|NIށ)x{ps{rvo||utj}ufN}wma~#y]~zX$O|cSd~NI@owyurzvcnZ{owi|xe[|z9`}^{{\I~|W~}Rd9N1|IӁvExyAqyz2m/z{#h{J|dY{|_|}[}d~V~!R~ހ]M7IP_ tw}zpax~ly~gz ck{L_|Z|ҀwVX}R~dpMr/ISsw o2xjy fyb{z^*{*Z|KBU}!\Q}vM~˂Hr]vkmwvaixy-eyUavz#]>zaY5{̄T|P}yL~r!H~DqulvhwKdx؇`y\sziX{\TX|KPV}<_L1~%HI~wd`2rcBnfTj|ine&lao\rWÃovKSNyN<}I=4{vzdOqgm˃iiKSl|e"o7`yr \tW_wRÂzMꂳ}IH€uhGhZqFjlFmh~8o~dU(q_tS[vWy[R|{MȂ2~IQVtIlconokpxgrc(t_E9v[LxVgzR6}MCIZfs0penrksf؀ub2w=^]xZzV8|gQ~&MIIbr ~Nt\m~ui~w!e%xb[y]{3Y|U&}Qv=MFπI2)p}HZmGzՃid{de{탳a|[^e|Z}.W}uSM~XO~9K$H#lzKQhSz܆d{ga{׆:]|?Y|rVh}' R}O(~EKr~փG_qbahmd]iʈ gOeŇpjOamN]ކpkYysUvQ`iz*L}xHpelcgijoeMmaTo]Q6rYqu\U?:xGQ!{@Lփj~.Hă ohkφk(h4mdY;o`r?\̄[tYwT냑yP5|ML~HԂXn(lpjng\pc)r` t\;{vX/xT{P}TLnHAmpjqfhsb܃"uq_ew.[xXpzT8D|Pu~NLHlshu>elva;x,^ yZ{Wy|oS}PPLWHƁw$kwFgx|dyasz]T{Z2=|V΁*~S51OLL `H~gjzf{c|`3}`\~#Y}~V/RqO\8KHRQ*MWJzG3kbh'xee xhHafk-^ZZnZˈMqWWIt*SWw^OͅvzK償}H5ـjfgd%hdS>k`Hm]ȈXpXZNisVuS=xO{KՄ~HLbGi݊iSfkcm`X=pG]=brY؆uVwoRyOjB|Kǃ%Haiyle܈nbp_1r\ktYTvV"yRV{RO:}KHuh7?oeqb.s_/uW\ ~wXӄxUFzRW|O+~vKMH*gHs;d/taRvO^9Kw[QyTX- zU(|VQ}N‚bKy-HdQf`vacHw`ly]az@Z{sWz{|T}QlNgIK0uH"ReU"ybWz_H{\|YσT}VԂ~hSxJP 6N!JEGdSK|ah}^~A[̃"~YV+N#Sg쀺P}WM1J|GcB`c:w]Z}LX?UoRWBOM/JGGK&b4!_pF\JjZ 상WT́1R3ԃOmLX}I-dG_ LcUf Yˍh.^ jb}mf)udojmKrnduq\xuT|eyK}a\c` \f$cNhf|~kj_thnml}qqd=ttP\x\wS{zL~C^VcoaDfVd2i1gKk{bjmnswmqIkpsctXv[wyfS{p|L~g[jR_lpZb[nepz.i+rrqltjpvbsy[?wH{S{}L2~Ykp]rx`tLdHu{ygvqokxmjoGyb\s{QZv|SWz~"LD~`|W{wiD[`xM7_Ay5~czwfzpQj{in|aro}ZIvI~fRz+2K}U}Z}^1~,}db5~}vlf*~o/j%hnu`qYuRhy?K}}T̃Yo ]<*| aZu:ejn$iwag;my`qwYuhQyX;K}3HS~SXD\z`t dՆJmhyfWm_NqXku Qdy(J|߁dSW͍)\qyZ`Jrdtkh{e_l+^mpWthPxJ[|ċS=j8W}~[x(_qdk h;JdlD|]p`VtzP>xJ|SSgV}iiZ:kH^mbbzofr@qjyjtzndbwBr?[z.v/S#}>zK\}~d]g`qidc5kgcedf\Xgi1~jDkwm nproqVi6rt auvZ0yyR|I|:K~ߓ_jbl4en`}hpvkronthorva uGyYx{0R{}EK$N>]pe5`qzd s|rghuujvnmx0gqAy`xt{EVQuOyI|߇WaC[Pz_0tbtnfhbjz>bTn+[qUuWOtyGI|.kWNl[5nf_7}[p;cvbrgo&t7jhvqn`xrY{jv{R:~zVKC~> h]j`؃la{|\e0|Jvhl|pk}zin~cq~]8u3Vx;P{YLJ~Yԇ#]h`Ԁ{d4tgnjՀhnbqO \tVowǁ'P3z4JJ}A\x`ycu!sf݄mj5>gmapу^[t!Uwf{Oz I}["}_9x7cSrFfkilifm`pjZsƄUwO,zII}Gn["|_!vbYq fkiXel3`)pZ;sviTlvӄNzIg}C;nX%op [qx_y3scrtglv~kBezxjo^z{rX|vQ[~zJ~l9^maJ~odxqgqsyk k6un\dwq^3ytW| xVQ%~]{J~ic̃kf}un iVwp/l prTnjutqzd>vt8]y'wWW{{yP}|JLegi4jk|0lvmunp2oq1rkistcvv];xyyVz{ZP}t}JȆeo/hipzjrtmtVopv hrwbu6yk\w{Vzm|P} ~wJ#^d)tWfuyiwslwxSmo'ygqzb4t~{\ w4}V/y~

|fJ)bz}ezx=h{irak|lnV|fq}aVs~B[lv~UyeO|RJK~LaI|yd|vgq4jkmfptS`sDZvU(xOe{0I~Kd`ńQ{cufpijlCeo_r‚Zu~Tx?N{PI}큿I`-9ycZtFfwniiyluadom^rTY?uMq%ptkruf#tw`w)yLZy_{ U\{|O}~JUfhKszju.um+v}oowjqye>t*za_vn{Z\x|T{ ~0Op}RuJQfxytiyt0l$znn{ciq |;dDsr}_u}Yx+~TizO|ՀXI #}e}xh~Ark4~mm~hpKTc\r^Su1YwnSz N|c,I~|dvgqjrlmggoPbpr3:]t%Xbw-SfyN9|IK~>zd[`u_g(phiSkIlflo$Eajq\t5BWvȃRyP:M{I}'y:ctfo@ikj8lern `qH[sΆ1Vvo?RyNMK{oWH}iHuZ|pv]vwaKq#xdkyhezl4`p|=oZ}sUH~wrO^{EJ.)s_-{?tbTuvep9wUhjxkeIzn_{ur9ZX|uT~SxOg|1J)kqd>zsfttioNvl]jwody#q_lztY|@wXT}z9O8d}J$~1oiIxqlkssmn\tpiLv{rUdx/t^yvY{y8TQ}6{O ~}JA|mnBwoprqqmtsshulucawAwh^hy y;Y'z{ T||N~~JP{slos%vJntqlpul]rwUgtxbvoz]xS{yXz@|S|'~/N~Iz*kwumZxp/oyk6qzfs{au|\w}Wy~S&{yN3}iIkTxj |sl`}on}j%p~er~`u!\'wW[y$(R{%M}3I4~w^i0+rwk9mmHip&\drSr_ty[bvVxR4zMu|H~uhq%jAlmQgocwqɄA^sZvUxAMQzfL|lH~HGth ojv!klΈ_fobqP^ s&YuuUNw䄻PzL|&AHz}|yG[wy^r|zb'mC{pehK|3i9c}l^~ pkXtSʀ wN#{IB{wB_vpx7bqy)flkz&i3g{ lIbx|/on]}ArXt~YuS}py3N_|IzhubduUvgIpwjkxlfzoWa{Lr]|tX}wS5~zN9$}^Im8y"siGt/ukovYmjwp(fyrmaFz\t\{wW}yaR~O{N~+I wqmssonuqivseawuz`yqwZ\'zy9WY|W{R}|ME~Ivprqr>tmlsuhuvdwwxo_xy[|z'{XV{|RL}A~s{ gruV{cyv|_x}e[yg~+X z~T|PN}ML=~SHX΂nq~Ajs~fjtbv^wj[ xπQWaz(S{$O|⁓K~5Ht[lp.hruEeKs[auqj]vׂxZ6xCVyR{OQ|K}G$kp?gqޅdRsni`t]$vVY~wȄVy.2R[zN|-K1})G~r]im`jce܀gCaj]>nY~q}UPHd[lxqpi/ysezstb{EvW^|wZ|yWT}{%S~|OQ~^L)HskwuGh#xvdywazly.]{LzmZ |/{V} |S}~3O|~vKH3jvy(gwzcx{ `?y{\z|Ym{}V|x~R}kO&~V|K|EeG)Ciu|fv}bw~_]x~\"y7XzUt{PR |N}vK1~G҂hQudv(awA'^fxSg[CyXWzbT{b Qq|t?N=}pJ~Gg=tO$cu`v]wȃZx҃WHyT1z郟P| wM}+MJ~BGsBl6^i9aeуeb&hG^xk~ZVnWP:r2Sd/uO.yJK>|GփVbkbyhgeZe~h5a}vk^qmZrppVrtS~w+O_zeK}G့kf'g+hdT@kN`ԁ[m]upzYs!VuRӁxO2{wK{4~JHtj"iflcnh`#:p\qrYxuNV!wR+z Ol|Kp~HPi%~5mne~owb~qx_z#sy\ZtupXwpU+ykR>{vN܀}KfLH-h!|qd}^ra}t^~1v3[~wXV yU0}{*Q|N_~K7Հ9HHg-{tc|Yv `|wu]}`xZ}z'W~b{T~|Q]b~-NAJ_GՀ݂)fzx&b{ryC`|zX\|{cZ}1|cV}}gT ~S~eP~oMfxJzG|mey{az|c_&{B}*\${}YS|~VT}0ISx}Px~bM~_Jt Gt'cy`y^"z[8{GwX{U|@R}6O}M~HJ:GL܂bxN__y&]AyZmzW{kT| RN|Os}sL~1I~G* g`dqc+af+^]iG[l^XV_oU*rQvQN4,yJ}HG_f͆vcc͆fQa i ]5k[nWzqTʄ tQdwNzJX}G}-f fcii`akk]`"nrZpWpsTndv7Q#,yM{J~GAeKj;baol_9n\ qYsGVuT wP߂zYMɂi|J\M|Mj]~JvuhGbt_u]Q%wZCxxX _yUF{PR|Oр~)MJ;G'Ta~w=^&xw\}RyYzWZ{T}R~)Ol@PLՀetJGRȂ`~z]]~X{S[~|@Y~}"V}TV~QNvL~IIŀ4G)u_}E}\}~:Z}~X.~(U~zSd~Q~1N~?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~O3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBRRScUuWY[\]_ޟa۞bٝdלe՛fћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjO3PBQQSbUtWYZ[\]ߣ_ݣ`ڢaءbԟdҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgҝgO3PAQQSbUsVXYZ[\ߨ[ۧ\إ^ԢbҠdўfўfўfўfўfўfўfўfўfўfўfўfўfўfўfўfўfO3OAPPRaTrVXYZZY۪Yب[ԥ_ңbѡdРfРfРfРfРfРfРfРfРfРfРfРfРfРfРfРfРfN2OAPPR`SqUWXYXܬVجWԩ\Ҧ_ѤbУdСfСfСfСfСfСfСfСfСfСfСfСfСfСfСfСfСfN2O@POQ_SpTWXWޭUذRԭXҪ\Ѩ`ЦbϥdϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeϣeN2N@OOP^RnU}WWUٴOԱSѮYЫ]ϩ`ΨbΧcΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeΦeM2M?NNO]RlUyVUܳPշMѲTϯYέ]ͫ_ͪaͩc̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨d̨dM1M>MLN[RhTxT߱Q׿FѸOϴUͱZ̯]̮_ˬa˫c˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪d˪dL1L=LKNXRdSzRھGHκP̶V˴Zʲ]ʱ_ɯ`ɮbɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcɮcK0J+"?,Q6_>iDqJvPzS}UVWXYYZZZZZZZZZZZZZZZZZJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P9QGSWUhWxZ\]^behjmoޖsۗtٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvٗvJ*P8QGSWUgWwY[]^`dgilߙoۘrؘu֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙w֙wK*O8PGRVTfVvYZ\]_behkܜn؛rԛuқvқvқvқvқvқvқvқvқvқvқvқvқvқvқvK*O8PFRVTfVvXZ[]^adgݢj١mӞrϝuΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvΞvK*O8PFQUSeVuXY[\^adݪh٩iԧlͤqɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuɢuK*N7OFQUSdUtWYZ\_bޱfڰfհgЫiʧkťoŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsŦsL*N7OEQTScUsVXZ]`a۷cֶeѱfͬgʧhťkĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnĦnL*N7OEPSRbTqVY[]]ܹ]ֹ_ѴbαḓfʩgƧiħkħkħkħkħkħkħkħkħkħkħkħkħkħkħkL*N7NDPSQaSpV|YZZݸYּYҸ]δ`̰cʭeɪfȩhƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjƨjM)M6NDORQ`SnVyYYߵXٿTҼXη\̴`ʱbɮdȬfȪgƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiƪiM)M6MCNPP^TkWuWW۾RSϻX̷\ʴ_ɲaȰcǮeǬgĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhĬhL)L5LBMOP\TgVuU޹SLS̼Xɸ\ȶ_dzaƲcưdůfîgîgîgîgîgîgîgîgîgîgîgîgîgîgîgK(K4K@KMPXTbTxREMSɽXǺ\Ʒ^Ŷ`ŴbijdòefffffffffffffffK(J3I>LIQRSeQzDENTƿYļ\ú^ù`÷b¶cdeeeeeeeeeeeeeeeI'H1G;MDPQPhF|IPUY\^_`bbcccccccccccccccE"B*H.K@GW/k6{AJQVY[]_``abbbbbbbbbbbbbbbAB"H,FC*X2j:wCKQVY[]^^_`aaaaaaaaaaaaaaa>DD/$E-W6f>rEzLRVXZ[[\]^_______________>A/2'E1T:aAjGqMvRzT|V~WXYZ[[\\\\\\\\\\\\\\\>5 !2+B5O=YDaIgLkOnQpSrUsVtVuWuXvYvZwZwZwZwZwZwZwZwZwZwZwZwZwZwZwC#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#P0Q>RMU\WkZz\^`eimprtuwyߔ|ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}ޔ}C#O0P>RLT[WkYy[]_dhlprtvxߔ{ܔ۔۔۔۔۔۔۔۔۔۔۔۔۔C#O0P=RLT[VjXx[]^bgkpruwޕz۔ؕוווווווווווווC#O0P=QKSZViXwZ\^`ejpsuݖyڕ֗ӗҗҗҗҗҗҗҗҗҗҗҗҗҗD#N/O=QKSYUhWvY[]_diosݛwٙ~ԘљΚΚΚΚΚΚΚΚΚΚΚΚΚΚD#N/OH/[7j>vFNSWZ]^_`abcddddddddddddd=BE!?6)I2Z:gAqHxO~TWY[\]^_`aaaaaaaaaaaaaa=A?$#7-I6W>bDjIpOuSyU{W}X~YZ[\]^_____________==&'70F9Q@ZFbKgMkPnRpTqVrWsXtYuZu[v\v\w\w\w\w\w\w\w\w\w\w\w\w\w; '+54AOKQWTcVnYx]bf߶iֽn̴sĭy=J'L2M>OJQVSbWlZu^|ceglƻpv|=K&L2M=NIPUT`WiZq_wc}޾dfimrx=K&K1LK&K1K;LFPQTZXa[g]t]`cegjlotz>J%J0J:LDPNTVW[XjXwV\bdfhjlot{>I%I/I8LBQJTPV^TmK{SY^bdfhjlpuyyyyyyyyyyyy>H$H-H6L>QDSQRbGpI}QW\`ceghjmrtttttttttttt?G#F+H3M9PAPTGe@sHPV[_adeghjnpppppppppppp@E!E(I.M1NDGW:g?uHPVZ^`cdefhkmmmmmmmmmmmm@CE$I'K4GH3Y:h@uH~PUZ]`acdegijjjjjjjjjjjjBAEH#F7-J5[fDoKvQ{UXZ\]_`abdeeeeeeeeeeee< A A0*)<1K:WAaFiKoQsTwVyX{Z|[~\]^`abbbbbbbbbbbb<> 5",,;5HOHSRV[Yc^icp߽dgmrx7CJ)J2L=OFSPVXY^_cao`ekpu|7CI(J1L;ODSMVTZX_]_n^~chmrx7CI'I0L9OBSIVNZT\aYl]|bfimqw}7DH&H/L7O>SDUJVXSdUp]{adgjmpu{7DF%H-L4O:S=SMO[JhQtY~^cfhjmptzƒ7EE#H*L0O3P@MPA_GkOvV[`dfhkmqv|ŁŁŁŁŁŁŁŁŁŁŁ7ED!H&L*M3LD9S@aFmMxTZ^befhkmqv{{{{{{{{{{{8BDH!K$J68G9V@cFnMxSY]`bdfhkmquuuuuuuuuuu8@DHG'<92I:X@dFnMvS|X\^`bdfhjmppppppppppp9 @DE>*,<4K;XBbGkMrSwW{Z~\^`bcegilllllllllll: @ B >$-.=6K=VD_IfMlRpUtXvZx\z]{_|a}b~dfhhhhhhhhhhh;?='.0<8H?REYJ`MdPhSjUmWnYp[q\r^r_satcudvdvdvdvdvdvdvdvdvdvdv:; *.3:;DALFRHWK[N^Q`SbUcWdXeZf[g\g^h_iajajajajajajajajajajaj7'# .+65==@DCJENHQKSNUPWRXSYUYVZW[Y[Z\~[\|]]|]]|]]|]]|]]|]]|]]|]]|]]|]]|]].'1'7/96=@3"!,/4;;FBOHVL\OaRdUgXjZk]m_naocpeqgr~js|lt|lt|lt|lt|lt|lt|lt|lt|lt|lt5<6$"..79>CDJGPIULYP\S^V`XaZc\d]e_faf~cg|ehzgizgizgizgizgizgizgizgizgizgi56 (!1,95>=ACDHFLJOMRPTRUTVVWXX~ZY|[Z{][z_[xa\wb]wb]wb]wb]wb]wb]wb]wb]wb]wb]1  !+4(70;6>;A@CCGEJGLI}OJ|QKzRLyTMxUMvWNuXNtZOs\Pr]Pr]Pr]Pr]Pr]Pr]Pr]Pr]Pr]Pr]P  $*."2)6.:2=6@8|C:zFuL?sN@rO@qQApRAoTBnUBmWClXDlXDlXDlXDlXDlXDlXDlXDlXDlXDc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzuc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzuc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzuc. t5=F(M3S>XI[R^[ebkgpkuoyq}s}t{uzvzvywywywyvzvzuzuzuzuzuzuzuzuzue- v5=F(N3T>XH[R^[ebjhplupxr}t~v|w{w{xzxzxzxzx{w|w|w|w|w|w|w|w|w|wg- x4=F(N2T=WHZR][bbiiontrxt}wx}y}z|{|{{{|{|z}yzzzzzzzzzzzzzzzzzzi- z4=F'N2SVHYQ\Z_cgkorޘv{ؒэ̉džÄs+ 3=H"L+O4S=VEYN\W`_ggߤmrמw{ϗɓďt* 3=H!L*O2S;VCYK[Sa[eg٪lrФt|ȝ|™v* 3=H!K(O0R8V@YH\OaWݵcfҲjrɩq|yw* 3=H K'O/R6U=XC\I_W`e͸grðn|v~x* 3>GK&O-R3U9X?\D[U^deql{szy) 3>GK$O+R0U5X8ZCTT\ccpj{pw{) 3>GK"O(R,U0X1VASSZbaogznt|}) 3>GK N$R'T(U0L?QQY`_mexkry~yx}) 3@GKN Q!R(J3L?POW^]kcviov|ˉvɔqǠmƬsx{{{{{{{{{( 3 AGKNOI+A7ICPNV\\hasf{lryzՂtӌoҗjҤhаmǰp°p°p°p°p°p°p°p°p°(2 CGJLH!8.?;FGMRR]Zf`newi}ms~yx؁t֊p֔m֟g֬eԵeԵeԵeԵeԵeԵeԵeԵeԵ'3 C GIG/%72>>DJKUP^Wf]mbsfxj|ns}yy݀v݈sݑoܛkۡkۡkۡkۡkۡkۡkۡkۡkۡ'5B F F7.(65=ADLJUO^VeZj^obsfvjyn{~r}zx~w}usq~q~q~q~q~q~q~q~q~&8BD<%.+77=BDLJTO\TaXf\j_mcpfrit}muzqwwuxuzxrxqxqxqxqxqxqxqxqxqx%<A=& 0,88>BEJJRMWR\V`Yc\f_hbiek}hlzknwoourprwpq{qq{qq{qq{qq{qq{qq{qq{qq{q&<< )!2-97@?EGHMKROUSXV[Y]\__`}aa{dcyfdvietlfrofprgprgprgprgprgprgprgprgprg$9# !+!4+<4?;BAEFIJLMPPSRUS}XU{ZVy]Ww_XuaYtdZrf[pi[nk\nk\nk\nk\nk\nk\nk\nk\nk\,  %.4(8/;5?:B>FAID~LF{OGyRIwTJvVKtXLrZMq\Mo^Nn`OlcPkePkePkePkePkePkePkePkePkeP %*/#4)8.;2?5|B8yF:wI;uKpQ?nS@mUAlWAjYBi[Ch]Cg_Dg_Dg_Dg_Dg_Dg_Dg_Dg_Dg_D  $).!3%|7)w:+t>-qA/oD0mF1lH2jJ3iL3hN4gP5fQ5eS6cU6bW7aY7aY7aY7aY7aY7aY7aY7aY7aY7X+h0u7? G*M4R=WF^MeS|lXyr\vx_t}arbpcodnenenenememendndndndndndndndndndX+h0u7? G*M4R=WF^MeS|lXyr\vx_t}arbpcodnenenenememendndndndndndndndndndX+h0u7? G*M4R=WF^MeS|lXyr\vx_t}arbpcodnenenenememendndndndndndndndndndZ+i0w7? F*M4R=WF]NdT~kY{q]xw`u}bscqeoeofogogngngnfofoeoeoeoeoeoeoeoeoe\*l/z7? F)M3R=WF[NcTjZ}p^zwaw}dufsgqhqipipipioiphphpgnhnhnhnhnhnhnhnh])n/|6>F)M2RF(M2R;WEZM`Uh[n`ud}{gzixkulsmrmqnqmqmrlpmlnkokokokokokokokoa(r. 6>F'M1S:WD[L^Tf[mateyi}kzmwnuorprpqoropomplrlrlrlrlrlrlrlrlrc't- 6>F&N/T9WBZK^Td[lasfxjm}oyqvrsrqrrqpqnsntoupvpvpvpvpvpvpvpve'v- 5>G%O.S7WAZJ]RbZkarfwkoqzsvtruovnvqurwsxsytytytytytytytytyf&x- 5>H$P-S6V?YH\P`Yj`qfvlptyvuxtyszszuzv{w{x|x|x|x|x|x|x|x|x|h%z, 5>I#O+S4VJ"O)R2V:YB\K^Sg[oeْxmҌs̈xDŽ|~~}~k$}, 5?K O(R/U7X?[G^OeZٟmeИvnʓ~tĎz~l$+ 5@KO&R-U4X<[C^LܫcZҥkeʞsn˜{u{m$+ 4AKN$R+U1X8Z>߳\Kճ`Y̫heäpnxu{n#+ 4AKN"R(U.W3Y:ڿWJϹ^XƱfdmnuv}|p#+ 4BKN Q%T*W-W9SI\Wdckmruz|q"* 5CKNQ"T%V'P7QHZVbcimouw|s"* 5EJNQSS#G6OFXU`aflmtt{|~z|u!* 6 FJMPRK!G4NEVS]`djksqzyzuqrvz||||||||w!)7 FJMOKA#H2MBTQ[]bhhpowv}~xÈrmihlqrrrrrrrrz )9 F JL J5?&H1M?SNZZ`efmmt}tzv|~o҆jБeΞa̫^ʺbļghhhhhhhh~):F I I ;4=*E5L@RKYV_`dhjozqtsxyl|gb]ߦX޵X\^^^^^^^^*=EG? *4"<.C9ICOMWU]]bcgi~lmxrqryulwhydyay]yW{V{V{V{V{V{V{V{V{+@DA*3%;1B;HEMMTTYZ^`cdghzlkurmpxolpiqfqcp`q^r^r^r^r^r^r^r^r,@@%!+4(;2BGCLGPJ~TL{WOxZPu^RraTpdUmhVkkWioXfsYcyZb{Zb{Zb{Zb{Zb{Zb{Zb{Zb{Z  '04&8-<3@8D<H?{LAxPCvSEsVGqYHo\Im_JkbKieLghMekNboOaqOaqOaqOaqOaqOaqOaqOaqO  %+0"5(9,=0|A4xE6uI8rL:pO;nQhY?g\@e_AcaBbdC`hC_iD_iD_iD_iD_iD_iD_iD_iDӾ %+0!}4%w8(s<*p@,nD.kG/iJ1hL2fN2eQ3cS4bV5`X5_[6]]7[`7[a8[a8[a8[a8[a8[a8[a8[a8 %y*s/n3j7!g;"e>$cA%bC&`E&_H']J(\L([O)YQ*XS*WV+UX+UY,UY,UY,UY,UY,UY,UY,UY,R,Z, h2r:xA!{H*zN3wV:u^@rfFomJktMi|OfQdRbS`S_T_T_T_T_T_T`S`S`R`R`R`R`R`R`R`RR,Z, h2r:xA!{H*zN3wV:u^@rfFomJktMi|OfQdRbS`S_T_T_T_T_T_T`S`S`R`R`R`R`R`R`R`RS+[+ j2t:zA!}H*|N2yT:v]AseFplJmtNj{PgReScTaT`U`U`U`U`U`UaTaTaSaSaSaSaSaSaSaSU+^+ l1v9}@!G*M2|S:y[AvdGskKosOlzQjShUfVdVbWaWaWaWbWbWbVbVbUbVbVbVbVbVbVbVW*`* o1y8@ F)M2R:|ZAybGvjLrqPoySmUjWiXfXdYcYcYcYcYcYdXdWbYbYbYbYbYbYbYbYX)c)q0|8? F)L1R:XA}`HyhMvpQrwToWmXkZi[f[d[d\d[d[eZfYd[a\a\a\a\a\a\a\a\Z(e(t07>F(M0R9WA_H}gMynRvvVs}XpZn\k]i]f^e^e^f]g\d]c_b`b`b`b`b`b`b`b`]'h(w/7>F'M/R8W@\GeN}mSytWv|Zs\q^n_k`i`f`g`g_f_eadcedededededededed_'j'y.6?G%N.S6W?[FcMkS}sXz{[w^s`pbmbjcibgbgbfdgehfigigigigigigigiga&m&|.6?H$O,T5X=[EaLjSrX~z\z`ubqdnfkgighhigkhkiljmkmkmkmkmkmkmkmkb%o&- 6@I"P*U2Y;\C_KiRrXz]|bweshqjoknlmlnlolpmqnqnqnqnqnqnqnqnqnd$q%- 7AJ!R(U0X8[@^HgPpXۆy_Հd|hykwmuotpsprptpuquqvqvqvqvqvqvqvqvqf$s$, 7BKR&U-X5[=^EeOْnXҌw`̇fǃjn}p{rysxtxtytytztzszszszszszszszsg#u$, 7CMQ#U*W1Z9]BڟcNјkXʒt`č|gloruv~w}w~w~v~v~u~u~u~u~u~u~u~ui#w#, 8DNQ!T'W-Y4ݪZAӥ`N˞iXØqaygmqtwyzzyyxwwwwwwwwj"x#, 8ENQT#V)X1زT@ͪ]MŤfXnavh~mrvx{||{{zxxxxxxxxk!z", 9FNQSU$ݴS0ҸR?Ȱ[LdWl`sh{nrwz|}~}|{zzzzzzzzm!|"- : GMPRTG.̿P>¶YKbVi`qgxnsw{}~|{{{{{{{{o ~!-: IMPQ޹OD-NIKJ5 ;A'I6QDYP`Zgbniuo{~ttxo{j}f~c~d}h}l|l{l{l{l{l{l{l{x/@HH>/;C$H3PAWM^We_lfysls{pmɅtgǐwbŜz^é{[{Zz^zbybybybybybybyby|/BFB" /9B%J0O=VI\RcZ{jasqglykf܃o`ڎr[כtWԨuSҸuQuTuXvXvXvXvXvXvXvXv0CB"$ /8A)H3N}PBxUEtZHp^KmcMigOflQbrR^yTZTWUSUPUPUPUPUPUPUPUPU! */4#9)>/B4}G8xL;tQ>pU@mYBj]DhaFeeGbjI^oJ[tKX{LTLQMQMQMQMQMQMQMQM պ %+0 5%:*z?.vD1rH4oL6lP8iT9gX;d[]g?Zk@WoATtBQ{CQ{CQ{CQ{CQ{CQ{CQ{CQ{Cش &,~1 w6#r;'n?)kD+hG-fK.dN/bR1`U2^X3\\4Z_5Wc5Ug6Sk7Po8Oo8Oo8Oo8Oo8Oo8Oo8Oo8ϼ !z't,n1i5f: d>"aA#_D$]H%\K&ZM'XQ(VT)TW)RZ*Q^+Oa,Me,Le,Le,Le,Le,Le,Le,Le, |u o i&e+`/]3[7Y:W=U@TCREQHOKMNLQJTIW G[!G[!G[!G[!G[!G[!G[!G[!K,R,Y. d6j=lD!kL(jV/h^4eg8ao;^x>\@YAVBTCQCPCNCNDODPCPCQCQBRBSASASASASASASAL,S,[. e5k=mD!lK(kU/i^4ff9co<`w?]@ZBXCUCSDQDODOEPDQDQDRDRCSBTBTBTBTBTBTBTBN+V+]- h4n<pC!oJ(nS/l\5ie9fm=cu@`}B]CZDXEUFSFRFQFRFRFSFSETEVDVDVDVDVDVDVDVDO*X*`, k4q;sB!sI(qQ/o[5lc:ik>etAc|C`E]FZGXGVHTHSHSHTHTGVGWFXFTGTGTGTGTGTGTGQ)Z)c+ m3t:wA wH(tO/rY5ob;lj?hrBezEcF`H]I[IYJWJUJUJUIWIXHYGVIUJUJUJUJUJUJUJT(\(f* q2x9{A |H'zO/vW5s`;oh@lpCixFfHcJ`K^K[LYLXLVLXKZKYJWKVMVNVNVNVNVNVNVNV'_'i) t1|9@G&N.zT5w^;sf@pnElwHiJfLcMaN^N]N[NZNZMZLYNXPXQXRXRXRXRXRXRXRX'b&l( x09@G%M-S4{[;xdAtmEpuIl~LiNfOdPbQ`Q_Q]P]O[PZR[T\U]V]V]V]V]V]V]V[&d%p'|09@G$M+S3X:}b@xkFttJp}MmPjQgReScTaT_T^T^U_W`XaYbZbZbZbZbZbZbZ]%g$s&/9AG"M)R1W9_?}iExsJt|NpQlTjVgXeYdYcZcZdZe[f\f]g]g]g]g]g]g]g]_$i#v%/ 9AH N'S/W6]>gD~qJx{PtTqWnZm\k]j^i_h_i^j_k`k`l`l`l`l`l`l`l`a#l"x$/ 9BIO$S,W3\;eCڄnK~xRzVwZu]s_qaobncncncococpcpcpcpcpcpcpcpcb"n!{$0 :BJP!U(X/Z8ّbCъkL˅tSƁ}X}\{`ybwduftgsgsftftftftftftftftftftfd"p }$0 :CLSV$X+۞X8җ`CʑiLČqSyY^b~e}g{iyjxjxjxixixhxhxhxhxhxhxhxhf!r$0 : DNSU ߥU)դT7̝]BėfLnTvZ_cfikl~m}m}l}k}j}j}j}j}j}j}j}jg s$0; EPRSڭL(ϩQ6Ƣ[AdKlTtZ|`dhkmnoonmlkkkkkkki u$0; G OQPԶD'ʮO4YAbKiSqZy`eilnpqqponmmmmmmmjw$0< I N O۵GϻC%ŴM3W?_JgSoZv`~eimpqrrqponnnnnnnly$0=K M L 4A$K2U>]IeRlZt`|ejmpr{sxsxrzq}p~o~o~o~o~o~o~on|#0>KK޸D2?"I0R=[HcQjYq_yeim|pwrstptosrrupwowowowowowowop~#0>IG$0< G.P;YF`OgWo^vchyltporkshsfsjqmpoooooooooooooos#0?Gߺ;%/:E+N8VC^MeUl\~taw|frjlnhpcq`r^qapdofofofofofofofov"/?A&3 :C(L5T@\JcQ}jXvr^pzcjgej`l\nXnVnWm[m]m]m]m]m]m]m]mz -;޿+'4>D%K1SHG?C?@@=@=@=@=@=@=@=@ѷ"(.w3p8!k>$gC'dH)aM+^Q,\V.YZ/V_1Sd2Pj3Kp4Hw5D~6A6>7>7>7>7>7>7>7Ӳɾ  {"t(n.h3d9a=^B![F"YJ#WN%TR&RV'O[(M`)Je*Fk*Cp+@v,>{,>{,>{,>{,>{,>{,>{,˺~ wp j"d(`-\2Y7W;T?RBPFNJLMJQHVEZC_ @d =i!;m!;m!;m!;m!;m!;m!;m!ÿzpj d_Z V& R* P/N2L6J9H<F@ECCGAK?O>S;W9\7_7_7_7_7_7_7_E-L,P-U2 [:]B^K]U$[_(Yh,Vq/Rz0O2L3I4G4E4D5B5@5?5?4@4A4C3D3F2F2F2F2F2F2F2G,N+R,W1 ^8`@`J`T$^])\f-Yo0Ux2R3O4L5J5H6F6D6C6A6A6B5D5E4G4G3G3G3G3G3G3G3H+O*U+Z0 a7c?cHcR%a\)^e-[n0Xv3U4Q5O6L7J7I7G8E8D7C7D7F6H6I5F5F6F6F6F6F6F6J*R)W*]/ d6g>fGfP%dZ*ac.^l1[u4X~6T7R8O8M9K9J9H9G9F9G8I8J7H7G8G9G9G9G9G9G9M)T(Z)a- h5k=kEiN%hX*ea/bj2_s5[|7X9U:S:Q;O;M;L;J;J:K:J9J9I:HJ@J@J@J@J@J@J@R'Z&a&i* q4u<vCtJ$pS*n\0jf4gn8cw:`<]>Z?X?V@U@T?T?R>Q=N?MANCODODODODODODODT%]$e%n* v3z;{BzI#vP)rZ/oc4kl9gua@^A\B[BZBXBWAVATBRDSFTGUHUHUHUHUHUHUHW$`#h#r)z2:AH!}N(wV/ta4pj9lt=h~@eBbC`D_E\FZGYGYGYGXIYJZK[L[L[L[L[L[L[LY#c"l"v)2 :AGM&~T-y^3th9pr=l|AiDfGdIbJaK`L_L^L^L]N_O_P`P`P`P`P`P`P`P["e!o!z(2 :@GL$R+[1|f8vo>qyCnGlJjMhNgPeQdQdRdQcRdSeSeTeTeTeTeTeTeT]!h r }(1 9@FL Q'Y/ڂc8|l?xuEt~JrMpPnRlTkUjViViViViVjWjWjVjVjVjVjVjV_ ju '1 9 @FKO#ڏV/щ`8˃i@qF{zKxOvRtUrWqXoYoZnZnZnZnZoYoYoYoYoYoYoYa lw '19 @FKܛJ"ҕS.ː]8Êf@nGvL~Q|TzWxZv[u]t]s]s]s\s\s[s[s[s[s[s[s[cnz&09 A GK֡E!͛Q-ĕZ7c@kGsM{RVY}\|^z_y`x`w_w_w^w]w]w]w]w]w]w]ep|&09A H ܦEѦC ǠN,X7a@iGqMxRWZ]`a~b}b|b{a{`z_z_z_z_z_z_z_fr~%09AI ױ5̫A¥L+V6_?gGnMvS~W[^acdddcb~`~`~`~`~`~`~`ht%/9AߪFҶ3ǰ?J)T5]>dFlMsS{X\_bde|fze|d}cbaaaaaajv$.8Aڵ5ͼ1=H(R3Z=bFjMqSyX\`c|exfugrftevdxcybybybybybybly#-6=. ;F&P2X<`DgLoRvW\~`yctepgmgkglfodqcrcrcrcrcrcrcn|!*1ܷ+, 9D$M0V:^CeJlPtV||[v_qbmeifegcfcegdjcjcjcjcjcjcjcq%% ) 6A"K-T7[@cHjNzqTtyYo]j`ecae^e[e[d^cacbbbbbbbbbbbbt &3?H*Q4Y=aEyhKsoPmwUhYc]^_ZaVbSbRaUaXaY`Y`Y`Y`Y`Y`xٴ*4=F&O0W9x_@qfFlmLfuPa~T\ʼnWWÕZR\O]L]K\L\O]P]P]P]P]P]P]} ѹ ,7 >E"M+yU3r]:kd@ekE`sIZ|MUևPPԔSLҡTIϱUFUEUDVGWHWHWHWHWHWHWձ˿ , 5<C~L&wT-pZ3ja8dh=^oAXxDSGNIJKGLDLBK?L@N@O@O@O@O@O@O ٪θ * 29?xG%rO*lV/g\3bc6]i9WqM@HAEBCABA@AfD!bJ$^P&ZU(V[*Sa,Nh.Ip/Dy1?2;3734323232323232323اʹ¿ ~ v&o-h2c8_>\DXIUN!QS"NX#K^%Fe&Am'=v(9)5*1*.+-+-+-+-+-+-+ϰżyrk f'`-[2W7T<QANEKJHOETCZ>a:i7q 3x 0!-!,!,!,!,!,!,!Ǹulf`[V% R* N/ K4I8F<D@BE@J>O;T7[4a1h.n+v+x+x+x+x+x+xvkb[UOJG D$B)@->1=5 ;9 9= 7B 5G 2L /R ,W *] 'c'd'd'd'd'd'dA-F,I-K0L7 P@QJQTO^Lh!Hq#E{$B%?&='<':'8'7'5'4'4'3'3&3&5%4$3$3$3$3$3$3$B,G+K,M/O5 S?TISSQ]Of!Kp$Hz%E&B'@(>(<(;(9(8(7(7(6(6'6'5&5%5&5&5&5&5&5&D+I*N+P.R4 V=WGVRU[Re"On%Kx&H(E(C)A)?*>*<*;*:*:)9)9(8(6'7'7(7(7(7(7(7(E*L)Q)S,V2 Z<[EZPXY Vc#Sl&Ov(L)I*G+E+C+A+@+?+>+>+=*<*:)9)9*8,8,8,8,8,8,H(O'T(W*\1 _:_C_M]W Za$Wj'Ts)P}+M,K,I-G-E-D-D-C-C-A,@+?+<-;.;/;/;/;/;/;/K'R&X&\(a0 e9eAcJbT _^%\g(Yq*Uz,R-P.N/L/J/I/I/H/G.E.E-A/?1>2@3@3@3@3@3@3N&U$\$a'g/ k7k?iGfQ d[%ae)^n,Zx.W/T0R1Q1P2O2N1L1L0K/H1E4D6E7G8G8G8G8G8G8P$Y#_#f&l- p6q=oElN iX%fb)bl-_u/\1Y2W3V4U4T4R4Q4O4O4M7L9K:L;M[?Z@Z@Y@YAXBXCYCZDZDZDZDZDZDX!bjs$z*2 9@F}N yY&tc.om3lv8i;g>e@dBcCaD`E_E_E_E^F^G_G`G`G`G`G`G`GZdnw#~)18 >DLـV&z`.vi4rr:oz=mAkCjEhGgHfIeJdJdJcJdJdJdJdJdJdJdJdJ\gqz"(06 <AڌHцR&ʁ\.}f5yn;vv?sCqFoHnJmLkMjNiNiMhNiMiMiMiMiMiMiMiM^it}"&.5: ޖ=ӒDʍP%ÈZ.c5k;|s@y{DwHuJsMrOpPoQnQnQmQmPmPmOmOmOmOmOmO`kv!%-37؜6͗BŒM$W-`5hI"S,\4d;kArFzJNQTV}X|X~{X}zW~yVyUxTxTxTxTxTxTeq}!$%Ԯ ɫ/ <G!Q+Z3b;iApFxKORUW|YyZvYuXw~Wx}Vz|Uz|Uz|Uz|Uz|Uz|Ugsݫϳİ- :EO)X2_:g@nFuK~OS}VyXuZr[o[nZpXrWsVsVsVsVsVsVivճ ʹ+8CL(U1]9e?lEsJ{OzRvVqXnZj[h[gZhYkXlWlWlWlWlWlWlyتϷÿ(5@J&S/[7c>jD}qIxyNsRoUjXfZc[`[_ZaYcXeWeWeWeWeWeWo| ҮȻ$2>H#Q-Y5`<|gBwoGqvKlPhScV_X[YYYWXXX[W]V]V]V]V]V]Vr֧ͳ / ;E N)V1{^8ue>plDjtHe}LaP\SXUTVQVOUOURUUUUUUUUUUUUUvѬǸ+ 8BK&zT-t\4nc:ij?drC_{GZKUNQPMQJQHPHPJQLQLQLQLQLQLQ{  զ˱ *5?zI!sQ(mZ.ga4bi9]p=XyAS˃DOʏGKȝHGūJDþJCIBJBKDKDKDKDKDKDK ڠϬŸ +5 |>tFmO"gW(b_-]f1Xn5Sv8N߁;Jݍ>Fܛ?Bڪ@@ؽA>@=@;B6<588696969696969סͮù'x/ p6j>eF`M\T!XZ#Sa&Ni(Jr*E|,A-=.;.9.8.7-5-5-5-5-5-5-ܜЩƵ ~w#p+ i2c9_@[FWLSSOYK` Gh"Bp$>{%9&5'3'1(0(/'/'/'/'/'/'Ҧɲ{ smg% a, \3X9T?QEMJJPGVC]?e:n6x2.+ ) ( ( ( ( ( ( ˯{qib]X%S+ O1 L7 J<GADFAL>R:Y6`2i.s*}'$""""""Ķ}pg_YSMI"F'C,A1>6<; :@ 7E 4K 0R ,Y )a %j "s{sf]VOJ FB>;!9&6*4.22/7-<)A&H"OV^ekkkkkk<,@,C-C0B6A> CICTA^=h:r7|531/.,++**)((&$$#####>+B+D,E/E4E= FHFRD]Af=p:z86421/..-,,,*((&%%%%%?*D*G*H-H3I< JFJQH[EeAn>x<9864322110/-,+('''''A)F(J(L+L1M: ODNNMXJbFlCv@><:8776655220-+ * * * * * D'J&N'P)R/S7 TATKRVO`LiHsE}C A ?!=!=!YHWSU]RgNpKz!H"F"D#C#C#B#A"A"?">!= :#7%7&6'6(6(6(6(6(J$P#V"[%^,`3 `;_E]OZZWdTm!Qw"N#L$J%I%I%H%G$F$E#D"A%@'>)>+=,=,=,=,=,=,M#T!Z `$d*f1g9 eAbL`V]aYj"Vt$T~%R&Q'P'O'M(K(J(I)I)H*G,F.E/E0E0E0E0E0E0O!W^e#j)l.m7 l?hGeRb]_h"\r%Z{'W)U*T,S-R-Q.P.O/O/O/M1L3L4L4M4M4M4M4M4R [bj"o'r-t4 s<pDlNiZfd#bn'_w*]-\/[0Y1X2W3V4U4U4U4T6S7R8S8S8S8S8S8S8U^fn!t&w+z2z9 x@tKpVl`$ij)fs-d{0b2a4`6_7]8\9[9Z:Z:Z:Y;Y`>_>_>^?^?_?_?_?_?_?_?Ycmv|#',2܇9 уD~OzY%vb+sk0ps4n{7m:ki@gAfBeBdBdBcBcBcBcAcAcAcAcA[epy"$(-ԍ5 ˉAÅLV%}_+yh1vo5tw9r

n@mBlDjEiEhEhAh=h9g6g5g5g5g5g5[enx "Ԕ,ɏ;GR#\*d0|l5yt:w|=u@tBrEpFoHmHlHlEl@l{AyDwFuHsJrKqKpHpB~p>}o:}n9}n9}n9}n9}n9_is}Ԟɞ&6 BM!W)`0g6o:v>B~E|HzJxL|wLyuMwtJxuEwt@wrpv=pv=pv=pv=pv=bm y ߖҟɧ !1 >IS'[/c5k:r?zC}FyIuLqNnOkOiNjHj}Cj{?j{>j{>j{>j{>j{>ep {  ֚͢¬/ <GQ&Y-a4h9p>{xBvFrInLjNfOdOaOcIcDcAc?c?c?c?c?gr  ەўȧ,9DN$W+_2~f8yn=tuAo~EkIgKcN_O\OZN[I\E\A\@\@\@\@\@j v ֙͢ë(6AK!T)}]/wd5rk:ms?h|CdF_I[LWMTMRLSHTDUAU@U@U@U@U@m zܔўȧ #2 >H|Q%vZ,pb2ki7fq;az?\CXFTHPIMJKIKFLBM?N>N>N>N>N>q֙ͣí.:{EtN oW'i_-dg2_o6Zx:U=Q@LBIDFDDCDAE>F;>:>8?6?6?6?6?6?6}̥֚¯z%r1k<eF_PZYUa"Qj&Lt*H-Dڍ/@؜1=խ2;29190808/8.8.8.8.8.ܕТƬ{s!k,c6 ^@XJTSO\KeGoCy"?$<%9&7&5%4%3%2%2%2%2%2%2%Ԟʩ{skd']0W9 SB NKJSF\Bf>p:}7420/.,,,,,,ٚͦırj c\ V)P1L9HA EI AQ =;D7L3T /^ +j &x "         ɭwj^VP KFA=$:*70461=-D)L$V bo~´zl_TLFA= 9520#-(*.'4#:BLVb nzqdWKC=951. +)&$ !%+17@ IR[dggggg6+9*:+:.733:-D'O![gs     7*;(<)<,:1681B,M'Y"eq|   9(='?'?*=/966@2K-W(c $n !y          <&?%A%B(@,=3<=9H4T /` ,k )v & $ $ # " " ! >%B#E#F%E)D1B:@E

KI GU D`Ak@v>=<<;;99776666666666G MRUY"Z)Y1U: RE OQL]JhHrG|FEDCBA@????????????JQV[` b'a.^6Z@ WLTYRdPnOxMLKKJ I!H!G!G!F!GGGGGGGGGMTZ`fh%h+f3c< `H^U[`YjWtV|!T"S$R%R&Q'P'O(N(M(N%N#N!NNNNNNPW^ekn"o(n/k7iD fPc\af_o"]w$\'[(Z*Y+X,V-U-T.T.T+T(U%U$U"U"U"U"U"RZaios u%u+t3q@ nLkXib fk$ds'c{*a,`._/^1]2[2Z3Y3Z0Z-Z*Z'Z&Z&Z&Z&Z&U]dmsx{!|%|.y< vIrTo^!mg%ko)iw,g/f1e3d4b5a6`7_7^5^1_-_+_)_)_)_)_)W_gpw|ރ҃*ǀ9 }FyQv[!sd&ql*os.m{1k3j5i7g9f:d:c:b9c4c1c.c,c,c,c,c,Yaj sz؉ˉ'7 CN|X!ya'vi+tp/rx2q5o7m9l;jmt9mt6mr3mr3mr3mr3mr3`ju  ӏʖ-:EOX%`*g/n3}v7y~;u>q@nBk}Dh{DezDfy?fy;gx7gw5gw5gw5gw5gw5b lxٌϓŚ*8 CMV$^)e.{l3wt7s|:o>k@gCdDaD^D^@_<`~8`}6`}6`}6`}6`}6e o{Ԑ˘'5 @JS"[(zc-uj1qr6lz9h=d@`B\CYDWCW@XY@UARBPBO?Q;Q8R6R6R6R6R6kx֐̚¡.:}DwNqV"l^'hf,cn0^v4Z7V:Q=N>K?H>H1<1;0;/;-;,;,;,;,;,|ތјȢxoj)e6_A ZKVTQ]MfIpE{"A·$>͖&;˦'8ɻ(7'6'6&5&5%5%5%5%5%ה̟©qic$]/W:SE OO KXGaCk?v<964210/.....ݏМƧwic\V)Q3M<IEEO AX =b:m6y31.-+*((((((ԙɥ|naZ UO!J*F2B;?C;L7U3_ /k +y ( & $ # " ! ̣íqdXRLGC ?(;/865>1F-O(Z$f uŬtgZOIC?;74#1)./+6&>!FQ^l} xi\PG?;62 /,)&!#' -4<G S`n~}oaTH>72-*&#! #* 1;EQ]gppppp2+4*4+3-/3):"CNZf r|3)6(6)5,21-8&A LXdo z 6(8&9'8)5.05,?'I!Ualw     8&;$<$<&9+523</G*R%^!it~  ;$>"@"?#='==<;::99988888888GMQUZ[$Z+V3R>OJ LV KaIkHuG}GFEEDCBBAAAAA@@@@@JPU[`b!a(^/Z8XE VR T]RgQpPxONNMLKJIHHHHHHHHHHMTY`egh$f*b3a@_M ]X[bYkXsW{VU T!S"R#Q#P$O$N#O OONNNNNOV\ dilml$k.i<gIeTc^ag_o^w ]~"\$Z%Z&X'W(V)U)T(T%T"T TTTTTRY` hmprqr*q8nElPiZgcfk ds#cz%a'`(_*^+],[-Z-Y-Y)Y&Y#Y!X!X!X!X!T[ c kqtv wy&x5uBrMpWm`kh!jo$hw'g)f+d-c.a/`0_1]0],])]&]$]$]$]$]$V^ f n t x {}#~3{? xJuTs]qe"ol%mt(l{*j-i/g1f2d3c3}b3|a0|a,{a){a&{a&{a&{a&{a&X` iq w|Ѐǃ 0= ~H{RxZvb"ti%rq(px+o.m0l2~j4{i5yg6vf6uf2uf.ue+te(te(te(te(te(Yblt{ԁ˅.; FO~X{`"yg&wn)uv,s~/~r2{q4wo6tm7rl7pk7nj4oj0oj-oi*oi)oi)oi)oi)[ dnw~ЅNJ+8 CMV^"~e&|l)~zt,{y|0xw2tv5qt7nr8kq9ip9ho6hn1in.im+im+im+im+im+] fqzւ͉Ž(6 AKT\!c%|j)yr-uz0q}3n{5kz7gx9dw:bu:at7bt3bs/br,br,br,br,br,` it~ӇɎ%3?IRZ {a$wh(sp,ox0k3h5d8a9^}:[{:Zz8[y3\x0\x-\x-\x-\x-\x-bmxڂϋŒ "0< F~OyWu_#qf'mn+iv.e2a5]7Z8W9T9S8T3U0U~.U~-U~-U~-U~-eq|Շː-9 ~CxMsUo]!jd%fl)bt,^}0Z3V5S7O7M7L6M2M0N-N-N-N-N-iu݂эǕ(}5w@qJmRhZdb"`j%[r)W|,S/O2K3H4F4E3E0F.G,G+G+G+G+m{؈͓Û{#u1p< jFfOaW]_Yg!Tp$Pz'L*H,E.B/?/>.?,?*?(?(?(?(?(sҏșxqm+g7cB ^KYTU]QeMnIx!E#B%>';(9'9'8&8%8$8$8$8$8$zڊ͖ğsfb!^0Y;UF QO MYIbFkBu?ł;Ð86433222222Ғȝ|l^WS&P3L>IIES B] >g;r85؎2֟0Գ..,,+++++؎̛¥seXRMI*E5B?>I;S8]4h1u / , * ) ' % $ # # # # # Иƣxj]QK FB!>+;38<4E0O-Z)g%t#!ɢ|naUJD?:7 4'1/.7)?%I!Taq     ªqdWLB;73 /,)!&(#/7@KY i|ugYMC:3/+'# !&- 6AO^n{l_RF;2+&"  #+6BP]jwyyyy.*/).*+-&2 9B MYeo{0)1(1(.+)0#7@J Wbmx2'3%3&1(--&4"=HT_ jt4%6#7#5%1),1*;$EP\gq {    7"9 : 9!6%4.27.B(M#Xcmw          : =>=<"<*:47>2I-T)_&i$s#|""!! =ACCDD'B0?:;E6P3[0f.o.x--,,+**)'''('''&&&&@EGHLL$J,F5C@?K>=<;;;::9 9 9 9 GLPUYZY#U+P4OAMNMY Lc KkJsJ{IIHGFEDCCCBBBBBBBIOS Z^`^[$X/X<WIVT U^TgSoRvQ~POONMKJIIIIHHHHHLR X_ cdc_a)a8`E ^P ]Z[cZkYrXyWVUTSR P O ONNNNNNNNU [c g h g fi%i5gA eLcVb_`g_n^v]}\[!Y"X#W$U$T$T"SSSSSSSQW_fjlmmp"o1m> kIiSh\fdekcrbz a"_#^%]&['Z'Y'~X%}X"}X|W|W|W|W|WS Zbinqss uu.s;qF oPmYkajhhogw!e#d%c'b(~`*{_*y]*w\(v\%v\"u\ u[u[u[u[U \elqvxy{{,y9vD tNrVp^nemlkt"j|$h'|g)zf*we,tc,rb,p`+p`'p`$o`"o_ o_ o_ o_ V ^gouz~)~6|A yKwTu\scqj pq"|ny%ym(vl*sk,pi-nh.lf.je-je)jd%jd#jc"jc"jc"jc"X`jry&4? I|RzZxa}wh yuo#vtw&sr(pq+mo-jn.gl/ek/cj/di*di'dh$dh#dh#dh#dh#[cmv~ƃ#1= GPW{~_w|f t{m#qyu&mx~)jv+gu-dt/ar0^q0]o0]n+^m(^m%^l$^l$^l$^l$]fpz͂È /: D~MzUv]rdnk#ks&g~|)d}+a{-]z/Zx0Xv0Vt0Ws,Wr(Xr&Xq%Xq%Xq%Xq%_itʇ,8~B yKtSp[lbii!eq%az(^*Z-W.T/Q}0O{/Py,Px(Qw&Qw%Qw%Qw%Qw%bnyЄƌ(}4x? sHnQjYf`bh_o#[x&W(S+P-M.J.H-I*I(J&J~$J~$J~$J~$fr̉‘|#v1q<lE hNdV`^\eXnTw"P%L'I)F*C*B*B(B&C$C#C#C#C#jxӅȏysn+i7eA aK \SY[UcQlMuI F#B$?%=%<%;#<"N^m|))))()$,18ALWcnx+(,'*'&* /6 >IU`kt~.&/$.%*'$+2< FR]hq{1#1"1".$('#/ 9CN Ydnw3!542-#+,)6#@JU`j s { 68865 4(12-<'F"Q\fow 9<=;<<%:.681B,M(X&b$l$t$|##""!!  =@ABDC!A)=39=5H2T0^0h/q/y/////..-,,+++*****@CEHKKH$D-?7== < < ; ; ; ; FJ NT WVSLN*O8PEOPNZ Nb Mj LqLyKJIIHGFEDCCBBBBBHMRY[ [ V TW%Y4XAWLVV U^ TfSmRtR|QPONMLJIIHHGGGGK PV]`_^\_!`0`=_H]R \[[cZjYqXxWVUTRQONNN~M}M}M}M}MM RZ`cffd fg-f:eE cO bWa__f^m]u\}[YXW~V{TySxSwRwRvQvQvQvQOU]chkljlm*l7jBiL gUf\ddcjbr`y_~^{] y\!vZ"tY"rW"qWqWpVpVpVpVpVQW`flprpqr'q4p?nI lRjZiaghfo}ewzdxc ua"r`#p_$n]$k\$k[ k[jZjZjZjZjZSZcjquwvww$v2u=sG qPoWm_}lezkmwjtth}rg!of#le$jc%gb&e`%e`"e_e^e^e^e^e^U]fnuy||||!|/z;xE vMtU{r\xqcupkrnrom{ll"ik$fj%ch&ag'_e&_d#_c _c_b_b_b_bW_iry~ -8}B ~{KyzSvxZrwbouiltpisy fq"cp$`o&]m'[k'Yj'Yh$Yh!YgYfYfYfYfYcmv~*6}@ xI tQq~Xm}`j{ggzncyw`w"]v$Zt&Ws'Tq'So'Rn%Sm!SlSkSkSkSk\fq{Ń&}3w=sF oOkVh^deam]uZ~!W}#S{%Py&Nw'Lv&Lt$Ls!MrMqMqMqMq_kv̀{"v/q:mD iL eTb\^c[kWtT~P!M#J$G%E}$E{#Ez FxFwFwFwFwcp|Ȇy so+k7f@bI _Q[YXaTiQrM|IF C!A"?!> ??????iw΃Črjg%c2_<[FWN TV Q_MgJpF{C?=:98888888o~ʊma ]Y+V7SAOJLS I\ Fd Bn?y<96432211111xІő{jYQN"K/I:FDCN@W=a;k 8v 5 20.,,+*****ׂʏteUF@>"3+ (% #* 4?LYiz  vh[NC8.&" %.9 ETfyzk^QF;2)  &1=M`upaTG=3+" (4DWlvhZM@5+#  *:L_s%($(!)+07@IV`kv''&%$&)- 4<GS]hr{*$)#'#"%*0:DOZenw,", * %"%-7 AKVajs{/0.*#!"*3=G R]fow~232.,+&'/!9CNX b k s z 676343"0++5%> IT^gow~9;: ;<:7&2/-9(D&O%Z%c&l&s'z''''''&%%$$##""""<> > B CA<7(22/>1J2U3_3g4o4v4}44332210/..--,,,?B CH I GA:8+;9=E>P>Z>b>j>q>x===<;; 9 8 8 7 655555B EHMNK D @D&G4HAHLHUG^GeFmFt E{ E D D C B A @ ? > = < < ; ; ; E HMRSQNJN!P0Q<PGPQOZNa Ni Mo Lw L~KJIHGFDDCBB A A A GJQVXZXT VX,X9XDWNVV U^ Te SlRsQzQPONL~K|IzIyHxHxGwGwGwGIMUZ^`_\]_)_6^A]J\S [[ Zb YiXpWwVU}T{SyQvPtNsNrMqLqLqLqLqLKPX^cffbce%e3d>bGaP `X __]f\m~[t{Z}yYvXtWrVoTmSlRkQkQkPkPkPkPMS[bhklhij"j0i;gEfM dU c\}bczajx`ru_zs^p]n\kZiYgWfVeVeUeTeTeTeTOV^flpqnn oo-n9lBkK ~iS zhZwgaufhreopdxmbjah`e_c]a\`[`Z_Y_Y_X_X_XQYbjqtvts tt+s6q@}oI ynQ umXrl_pjfmimjhvggefbe_d]b[`Z_Z^Z]Z]Z\Z\Z\S\fouy{zyyy(x4|v>wuF tsN prVmq]jpdhokentbl~_k\jYhWgUeTcTbTbUaU`U`U`V_jsz~~~${~1v|;r{DoyL kxT hw[evbbuj_sr\r|YqVoSnQlOjNiNgOfOfOeOeOeXcoxz!u.q9mBiJ fR c~Y`}`\{hYzpVyzSwPvMtKrHqHoHmHlHkIkIkIk\ht}y so*k5g?cG`O ]W Z^VfSoPxMI}G|DzBxAvAtBsBrBqBqBqanzÃrkg%d1`;]DYLVT S\ PdMmIwFC@><;;|;{;y;y;y;yguʀnb^[,X7U@RIOQLZ Ib FkBu?<:765544444n|ƈ}jZTQ$O0L;IDFMDVA_>h ;s 8 531//.-----w̅wfVI EC'A3?==G:Q8Z6e3p0}., * ( (' & & % % % ҁƎpaRC8 53'220=.H-S+^)k'y%#!ˋxi[M?2' $"#!/:FSaṕ˔ɪŕ~oaSF:/$*6C Q asޜܴseXK?4*! %0=M_rxi[NB8.%  )6FZp}m_QE:0'  .>SitfXJ>2(   %5I_t ''(*/5=GS^js|"%!$%' ,29EO[fpx%##""$(.6BLWblt|( &## +4>HS^hpw~+*' '1:DOYcksz..+%# #-5 ?JU_gou|11.++)$(1:E P Z c k r x  55 3 3 30+"%+4?KU^fmt{88 7:: 60)""-$9'E)P+Y,b,i,p-w-~--,,+*))(''&%%%; <=@@; 2*/'245@6K7U7]7e7l7r7y7766543210//...>?BFEA;7;!>0?<@G@P@Y@a@h@n@u?}?>>=<;99876555@BGJKLGB EG+I8ICILHUH]HdGjGqFxF E D C B A ? }? |> z= z< y< y< y< CDKOSTRLMO'P4P?PIOQOYN`MgMn Lu K} K J ~I{HyFwEuDtC sB rA rA rA rA DHOUZ[ZTUV$W1W<VFUNUVT]Sd Rj Qr }Qz zPxOvNtMqKoJnImHlGlF kF kF kF FKSZ_a`Z[\ ].\9\C[KZSYZ }Xa {Wh xVo vUwtUqToSmQkPiNgMfLfLeKeJeJeJINW_dffaa bb+b6a@`I}_Pz^W w]^ u\e r[lpZunY~kXiWgVdUbSaR`Q`P`O_O_O_OJR[chkkhf gg(f4e>{dFxcNubU ra\ o`c m_jk_rh^|f]c\a[^Y\W[V[U[TZSZSZSZSLU_gmppnlkl%~k1zj;viDshLpgS mfZ jea hdhecpcbz`a^`[_Y]W\UZUYUXUWUWUWUWNXckquvtqp~p"yp.uo9qnAnmIklQ hkX ej_ cig`io]hx[fXeUdSbQ`O_P]P\P[P[P[P[P\gpvy{zv}vxvsv+pu6lt?isGfrOcqV `p] ]oe[nmXmvUlRjOiMgKfJdJbJaJ`J`J`J`Talu{}w| q|n|(j{3g{=czE`yM]xT [w[ Xvc UtkRsuOrLqIoGmElDjDhDgDfDeDeDeYfqzqkg$d0`:]BZJWRU~Y R}a O|jL{sIy~FxCvAu?s=q=o>m>l>k>k>k_lw~nc_\+Y6V?SGQONWK_ Hh Eq B}?=:}8{7y7w7u7t7s7s7sfs~|j[VS%Q1N:LCILFTD]Af>p ;{ 9 64211 0~ 0} 0{ 0{ 0{ n{yfVKHF*D4B>@G>P;Y9c7m4y1/ - + * * ) ) ) ) ) vȃtcRC<: 8,665@3I2T0^-i+v)'%##"!!!!!΀Œ}m^N@2-+ )+'5&@$K#V!c pNJufWI;/#'2>JXgw  {l^PC7+! !-:HXh{ѐΦqcUH<1' '5DVh}ufYK?4*!  .>Rf|zk\NB7-#  &7LbyrcUG;/% 0DZp&%&)-2:EQ]hqy$## %*/7BNYdmu} !  !%*4>JU`iqx#  (1;FQ\eltz&$ %-6ALW`hou{)'" )2<GR[cjpv|-+& # "$-7BLV^elrx0. *+)%& 0 ; FPYahnu{3 2020* !(5@ K"T#\#c$j$q%w%~%%%$#""!! 65685-&!&#*0,;-F.O/X0_0f0m0s1z000/.-,+*)((((98<==;5/ 25+778B9K9T:[:b:i9o9w9~98875432}1|0|0{/{/;;ACGFB;<?'@3A>BGBPBWA^AeAl@s@{@?>~=|<z;x:v8u7t6s6s6s6=?EKOOLEEG#H/I:IDILHTH[GbGhFoFw|EzExD vC tB r@ p? n> m=m<l;l;l;@CIQUVTNLNO,O7OAOINQNX~M^|LeyLlwKtuK} sJ qI nH lG jE iD hC gB fA f@f@f@BGOW[][US TU)U4U>TF}SNzSUwR\uQbsQjqPq oOz lO jN hM fKdJbHaG `F `F `E `E `E CJT[`ba[YZZ&Z1~Z;zYDwXKtWRqWYoV`mUg kUo iTx gS dRbQ`P^O\M[L[K [J ZI ZI ZI EMX`egfb___#|_/x^8u^Aq]Io\Pl[Wj[^hZe fYm cYv aX ^W\VZTXSVQVPVO UN UM UM UM FQ\dikkhdc{d wd,sc6ob?lbFjaNg`Ue`\c_c `^k ^^t \]Y[WZTYRWQUPTPSPR PQ PQ PQ IVahmppni{huiqh)nh3jg<hgDefLbfS`eZ^da [ci Ybr Va}T`Q_O^M\KZKYKWKV KU KU KU MZemruutpvn pnln&hm1em:cmB`lJ]kQ[kXXj` Vih Shq Qg{NfKdIcGaE_E^E\E[EZ EZ EZ R_jqwz{zwptitft"bt-`s7]s?ZrGXrOUqVSp^Pof Mno Kmz HlEjCiAg@e?c?b?` @_ @_ @_ Weow|~~m|b{_{\{*Yz4Wz=TyERyLOxTMw\JvdGum Dtx Bs ?q=p;n:l9j9h 9g 9f 9e 9e ^ku}{j\ WT%R0O9MAJJHRFZCbA~l>|w ;{ 9z 7x 5v 3t 3r 3p 3n 3m 3l 3l eq{xgWNKH*F4D=BE@N>W<`9j7u420. -~-{,x,v ,u ,u ,u lyucSD @>#<-:78@7I5R3\1g/r,*('%%%$$$$uÁp_O@4 20%./-8+B*L(W&b%n#}!zjZK=/$ " $.8CNZhwÉrcTF8,   + 7 BO^mxi[M@3('3@O`qņÛ}n`RE9.# ".<M_s܊ڣսsdVH=1' (7I^twhZL@4)  !2D[q~oaRE7,! +?Ul%$$'*08DP\gow~"! !$&,5@LXckry "(1<HT^gnt{%.8DOYbiou{! "*4?JT\djpv|$   %/9DNW^ekqw}'$  )3>HQY`gmrx* '!" !,7BKT [ b i o u | .*))$  %1<FOW^dkqx0-//+(!!,$7%A&J'R(Y(`)g)m)t)|)))('&%$#"!~!~!3056861( *-'/20=1F2N2V3\3c3j3p3x32210}/{.y,w+v*v)u)u)55:@BB=657"9.:9:B:J;R;Y;_;f:m:t:}}9z9x8v7t6r4q3o2n1n0n0n07:@GKKG@=?@*A5A>BGBNAUA\}Ac{Ajx@qv@zt?r?p>n=l;k:i9h8g7g6f5f59>FMQROIE FG'H2H;HD|HKzGRwGYuG`sFgqFnoEwmEkDiCgBeAc?b>a=a<`;`:`:;ALSWXVPLLM$M/|N8yMAvMHsLOqLVoK]mKdkKliJtgJeIcHaG _E ]D \B[A[@Z?Z?Z?=FQX\]\VRRR!zR,vR6sR>pRFnQMkQTiPZgPbeOicOraN|_N ]M [K YJ WH VG VE UDUCUCUC?JU\aba]W~WyWtW)qW3nW<kVChVJfUQdUXbU``Tg^Tp\SzZR WQ UP SN RL QK PJ PH PHPGPGCOY`egfc]y\ s\o\&k\0i[9f[Ac[HaZO_ZV]Y^[YfYXnWWy TW RU PT NS LQ KO KN KM KL KKKKFS^eikkidtanaja#fa.ca7a`?^`F\`MZ_UX^\V^dT]mQ\w O[ LZ JY HW GV FT FR FQ FP FP FP JXbinpqo~joghfdf af+^f4\f<YfDWeKUeSSdZPcbNckLbuIa G` E^ C] A[ @Y @W @V @U @T @T P]gnsvvu|qmnal^l[l'Xl1Vl:TlBQkIOkQMjXKiaHijFhtCg Ae ?d =b ;a ;_ ;] ;[ ;Z ;Z ;Z Vclty|}{zyjv[t WsTs$Qs.Os6Ms?KrFIrNGqVDp_Bph@or=n;l9k 7i 5g 5e 5c5a5`5`5`\irzxh~W|N{L{I{)G{3Ez;DzCBzK@yT>x\;xf9wq7v}4t2s0q/o/m.j.i.g.g.gcoyudTF B@$>.<6;?9G7P6Z4d1o/|-}+|)z(x(u's'q'o'o'okwq`QA864'2009/B-K,U*`(k&y%#! |zxxxt}m\L>/)(&($1#;!D OZgu~wgWH:-(1;FS` n  o`QB5)%0;GUduufXJ=0%#.:GWh{{k]OB6*   *7FXlсϙ̱paSF:.$ #2CXnteWI=1& ,>Un|m^PB4) ':Pi#"#$(.7CO[elsz!  !$)3?KW`hou|$/;GR[cjpw|"+6BMV^ekqw| '1=GPX`flqw|  ",6AJSZaglrw}!  %0;DMT[bgmsy$ *4>GOV]ciou|'! " - 8AJQX_ekry*$'&'$ (3<E M T![!a!g"n"u"}""! ~|zyxxx,*,242-$#&#(.)8*A*H+P+W+],c,j,q,z,}+{+y*w)u's&q%p$p#o#o#./5<>=82-01*243=3E3L4S4Y~4`|4gz4nx4vv4t3r3p2n0m/k.i,i+h*h*h*/3=CFFB<6 79&:0:9:A};Iz;Px;Vv;]t;dr:kp:sn:}m9k9i8g7e5c4b3a1a0a0a019CJMMJD>>?"@-{@6xA>uAEsALq@So@Zm@ak@hj@qh?{f?d>b=`<^:]9\8[6[6Z5Z54>IOSSQKED}ExF*uF3rF;oFCmFJkEPiEWgE^eEfcEnaDx_D]C[BYAX?W>V<U;U:U9U97CMTXYWQL|JvKrK'oK0lK8iK@gJGeJNcJUaJ\_Jd^Il\IvZHXHVGTERCQBP@P?P>P=P=;HRY]^\XRwP qOmP$iP-fO6dO=aOD_OK^OR\OZZNbXNjVNtTMRLPKNJLHKFKEKCKBKAKA?MV]acb^XrUkTgU!dT+aT3_T;\TB[TIYTPWSXUS`SSiQRsOR~MQKOINGLFJFIFGFFFFFFDQ[bfggd}_mZfZbZ^Z(\Z1ZY9XY@VYGTYORYVPX^NXgLWqJV}GUETCSBQAOAMALAKAJAJIV_fjllj{elb`_\_Y_%V_.T_6R_>P_EO_MM^TK^]H]eF\oD\{B[@Y>XbzjY0 -+!**(2';&D$N"X!dq~{yvtrqqs}zjYJ;-! "+4=GS_m} ~ |{{|tdTE7*  ! + 5?KXfv|l]N?2&   *5@N]lsdUG9-!  (3@OasxiZL?2'%1?PcyŒî}m_PC7+   !.>Qf~rcTF:.# *<Qhyj[L>1&$8Oh!!!"%,5BOYbipw}  &1>JT]elrx~"-9EOX`gmsx~ )4?IRZagmsx~ $/:CLT\bhmrx~  )3=FNV\bhmsx#-7@HPW]chnsz '1:CJRX^diov} *4=E L S Y _ e l sz  } | |{!"#  $.8@GNU[ahow~|zxvtsrrq#")/0.(! *"3#<#C$J$Q$W%]~%d|%kz%sx%|v%t$r$p#n!m kjjii$(28:94.& (*%+/,8,?~,F{-My-Sw-Zu-as-hr-pp-yn-l-j,h+f)e(c'b&b%a$a$&0:@CA=8002!2+{34x4<u4Cs4Jq4Po4Wm4]l4ej4mh4vf4d3c3a2_0]/\-[,[+[*[*+7@FIIE@97|8w9(t91q:9o:@l:Fj:Mh:Tg:[e:bc:ja:t_:^9\8Z7X6W4V3U1U0U/U/.<FLOOLGAz= u>q>$m?.k?6h?=f?Dd?Jb?Q`?X_?`]?h[?rY?}X>V=T<R:Q9P7P6O5O4O44AKQTURMHuC oCkC!gD+eD3bD:`DA^DG\DN[DVYD^WDfVCpTC{RBPBN@L?K=K;J:J9J8J89FOVYZXS~NpIiHeHbI(_H0\H7ZH>XHEWHLUHTTH\RHdPHnNHyLGKFIEGCFAE@E>E=E<E<=JTZ^_]Y{TlOdM`M\M%YM.WM5UM<SMCRMJPMROMZMMcKMlILxGLEKCIBHAF@D@B@A@@@@BOX^bdc_yZjV^S ZSWS"TR+RR3PR:NRAMRHKRPIRXHRaFRkDQvBP@O>N=LVu^T<]^;]h9\s7[5Z3Y2W1U1S1Q1P1O1NS_gnrttrtoflUhGe CeAe"?e*=e21lF0lO.kY-kc+jo)i~'h&f$e#c$`$^$\$[$[altzo~_{Oy?v2u 0u.u!,u*+u2)t:(tB'tK%sU$sa"rm q{pnljhedcbis{}l[K<-%#"~$ ~,~4~=}F}Q|]|j{xywuspnlkkq{wgVG9*%-6@ K X et|ywutt{qaQB4' %.8CP^myiZK<0# $/:FUdvpaRD6*#.:IYkvfWI</#   +9J^r{k\M@4((7J_xדկpaRC7+   %6JbzvgXI:." #5Jc| #*4ALV_fmsy$0=GQZahotz +7BLT\ciotz  '2<FOW]dintz  !,6@IPW^dinty &0:BJRX^cintz  *4<DLSY^cinu|$.7?FMSY_djpw  '09AHNTZ`flt|~|zxwvuu   *3;BIOV\bi~p|yzwusqpnml l k &+,*% %.7>E~K|QyXw^vetmrvpnljhfedccc&/5750*"!# $*|%3y%:w&At&Gr&Np&To'[m'bk'ii'rg'}e'c&a%`$^"]!\ [[[ .7=?>94-){+w,&t,/q-7o-=l-Dj-Jh-Qg.We._c.ga.p`.{^.\-Z,Y+W)V(U'U%U$T$&4>CFEA<6y1 t1p2#m2+j33h3:e3Ac3Ga3M`4T^4\\4d[4mY4xW3V3T2R0Q/P-O,O+O*N)-:CIKKHC=s7m7i8f8(c80a87_9>]8D[8KY9RX9YV9bU9kS9vQ9P8N7L5K4J2J1I/I/I.2?HNPQNI}Do=g<c=`=%]=-[=4Y=;W=AU=HT=OR=WQ>`O>iM=tL=J<H;G:E8E7D5D4D3D27DMRUVTOzJkDbA^BZB#WB+UA2SA8QA?OAFNBMMBUKB^JBhHBsFBEAC@A>@<@;@9?8?7?6<HQWZ[YUwPiK]G XFUF RF(PF/MF6LF=JFDIGKHGSFG\EGfCGqAF~?E>DKpQG=QP;QY:Qc8Qn7P{5O3N2L1J1H1G1E1D1CKW_eijjgsde`U\FX CW@W >W(=W/;W6:W>8WE7WN5WW4Wa2Vl1Vz/U-T,R+P+N+L+J+I+HQ]ekoppnrkdhSdB`;^9^7^%6^,4^33^;1^C0^K/^U-]_+]k*\x(['Z%X$V$T%R%P%O%NXckquwwupraoPk@h3f 1f/f .f(,f0+e7)e?(eH'eR%e\#dh"cv ba_]ZXWUU_jrw{~~~|my]wMs=q.o'n&n$n##n+!n3 n;mDmNmYlfktjhgdb`^]\gqyziY~I|:z,yx www&w.w6w?vJvUub tp s qomj h f e dpyudSE6(  '0:DP]~k}|{yvtqonmy~n^N@2%  (2=HVev|zxxvgWH:-  )4?M]n}m^OA3' (4AQcwsdUF9,   '4CUjyiZK=1% #2EZq΋ͦ~n^OA4( 1D]xsdTE7+ 0E]x '3?IS[cjpv{".:DNV^ekqv{)4?HQY_ekpv{ $/9BKSY`ekpu{  )3<ELTZ`ejou{ #-6?FNTZ_diou|'09AHNTZ_djpw~ !*3;BIOTZ_ekrz~|{{z #,5<CIOUZ`fnv|zwutrqpoo &/7 > D J P~ V| \y cw ju ss}q o m k i h gfee #()&! !*2|9y@wFuLsRqXo_mgkoiygeca`^]]\\$-231-'|x%u.r5p<n Bl Hj Nh Uf!\d!cb!l`!v^!] [ YWVVUUU,5:;:60)y# t$p%!m%*j&1h'8f'>d'Db'K`'Q^(X\(`[(iY(tW(U'T'R%P$O"O!N NN%2;@BA=82s+l*i+e,&c,.`-5^-;\-AZ-GY-NW-VV.^T.gR.qP.~O-M-K+J)I(I'H%H$H$,8AFHGD?|9n3f0b1_2#\2+Z22X28V2>T2ER2KQ3SO3[N3eL3oJ3|I2G2F0D/C-C,C*C)C)1=EKMMKEy@k:`6 \6Y6 V7(S7/Q75O7;N7BL7IK7QI8YH8cF8nE8zC7B6@5?3>2>0>/>.>-6BJORRPKvFh@[< V;S;P;%M;,K;3I;9H;@G;GE<=;;9:8969493:2:1;FOTWWVQsLfGXBP@M@J@#H@*F@1D@7C@>B@E@AM?AV>A_5<5:58575655?KSX\\[WrSeNVIKEGEEE CE(AE.?E5>E<0=0;0:09EPX]aa`]qYdUUPFK AK?K=K%;K,:K38K:7KA6KI4KR3K\1Kg0Jt.J-I+G*E*C*A+@+>+>JU]bfgf~dp`c]TXCS;Q9Q7Q"5Q*4Q02Q71Q?0QG.QP-QZ+Pf*Ps(O'N%M$K$I$F%E%C%CP[bhkml}jogbdR`A[4X 1X0X.X&-X.+X5*X<)XD'WN&WX$Wd#Vq!V TSQNLJIHWainrss|qnn_kOg?d/`)_'_&_"$_*#_1"_9 _A_K^U^a]o\[YWUSQPO^houxzz{yku[rKo0$  #.;J\oqbRD6)".<NbzwgWH;."  .>Riǃß|l\M>2%-AXqqaQB5( +@[x%0;FOX`fmrx} +6@JSZagmrx} &1;DMT[bgmrw}  !+5>GNV\bglqw}&/8AHPV\afkqw~ !*2;BIPV[`ekpw$-5<CJPUZ`ekry '/7>DJPUZ`flt}~{ywvuuu  !)18?EJPU[a}h{pxyvtqonlkjii #+39~@|EzKwQuWs]qdolmvkigecb``__ %%#  { &w -u4r;pAnFlLkSiYgaeicsa_][YX W W V V "*/0-)#z uq!n)k0i7g=eBcHaO_V^]\fZpX|VTRQPOOON*27862-&slif%c ,a 3_!9]!?[!EY!KW"RV"ZT"cR"mP"yO"M!K JIHHHH$19=?>:5{/n(e$a%^&![&)Y&0W'6U'<T'BR'HP'OO(XM(aK(kJ(wH(F'E&C$B#B!B BB*6>CEDA<w6k0_+ Z+W+U+&R,,P,3O,9M,?K,EJ-MH-UG-^E-iD-uB-@,?+=)=(=&=%=$=#0;CHJJGBt=g7Z1T0Q0N0#L0*J00H16F1<E1CD1JB2SA2\@2g>2s<2;1:08.8,8+8)8(8'5@GLOOLGrBe=W8N5K5H5 F5'D5-B53A5:@6A>6H=6Q<6[:7e97r76654433313/3.3,3+:DLQTTR}MpHcDV>I: E:C:@:%?:+=:1<:8::?9;F8;O7;Y5;d4;p2;1:/9.7.5.3.2/0/0>IQVXYW|SoObKTEE@ @?=?;?"9?)8?/6?65?=4@E3@M1@W0@b.@o-?~+>*=);(9)8*6*5*4CNU[]^]{YnVaRSMDH:D7D5E 4E'2E-1E40E;.EC-EK,EU*Ea)Em'D|&C$B#@#>$<$:%9%8ISZ`cdc{`m\aYSUBO4K 1K/K.K$,K++K2)K9(K@'KI%KS$K_"Jl!JzIGECA?>=OY`ehjizglc`aP\@W1S*R(R&R!%R($R/"R6!Q> QGQQQ]PjPyOMKIGEDCU_flopoynlk]hMc=_.\"Y YYY$Y+Y3Y;YDXNXZWgWwVT R P MKJI]fmruwwxuiqYnJk:g,ecbaa a'a/a7 a@ `K `W_d^s][YWUSQPemty}~~u|dxTvEr6p(nl k kkj"j*j3j<iGiSh`gofdb_][YXmv|p_O}@z2y$wv uuuut%t-t7sAsNr\qko|nkifdbav~yiYI;-  '0;~G}V|ezwyvtromlrbRC5( (3@N_q~|{zyiYI;." )5CTg}o_PA4' )7H[qtdUF8+(8Kc}zjZJ</" );Qj߅ۤo_O@3& (>Wq"-8BKT[bintz (3=FNV]cinty  $.7@HPW^cinsy(2:BJQX]chmsy#,5=DKQW]bglry '/7>EKQW\afls{!*18?EKQV[afmt}~}{{z$,3:@FKPV[agox}zxusqpooo &-4:@FK~Q|Vy\wcujssp~nlihfeddc  '|/z5w;uAsFrLpQnXl_ifgoezca_]\[ZYY""  }xt"q)n0l6j <h Ag Ge Mc T` [^ c\ mZ xX V U S RQQPP (,-*& tmjg$d+b1`7^=]C[IYPWWU`SjQuONLJIIHH H (0453/*z#nea^ \'Z.X4V:T?RFQLOTM]KgJsHFDCBBBAA#/7:<:72v,j%_ ZW T $R *P!1N!6M!<K!CI"JH"QF"[D#eC#pA#~?">!=;;<<<)5<@BA=8s3g-Z'S%P%M%!K&'I&-G&3F&9D'@C'GA'O@(X>(c=(o;(}:'8&7%6#6!6 66/:AEGFC}>p:d4W.M* J*G*E+$C++A+1?+7>+==,D<,M:,V9-a7-m6-{4,3+2)1'1&1$2#2"4>EJLLI{Dn?b:U5H0 D/A/?/"=/(;/.:/480;70B61K51T31_21k01y/0./-.,,,*-(-'-&8BINPQNzJlEaAS;E6>4;49474&64,44235925@15I06R.6]-6j+5x*5)4'2'0'.(-(+)*=GNSUVTyPlK`GRBD=99 694929$19*/90.:7-:>,:G*:Q):\':h&:v%9#8"7!4"3#1#/$.BLSXZ[YxVkR_NRJCE4? 0>.?,?!+?(*?.(?5'?<&?E$?O#?Z"?g ?u>=;97543GQX]`a_w\jY_VRRAL2G)E(E&E%E%#E,"E3!E:ECEMEXDeDsCB@><:98MW^cegfwcj`_]OY?T0O#L LLL"L)K0K8K@KJKVKcJqIHF DB@>=T]dilmlvjjh\dL`<[-X USSSS&S-S5S= RG RS R`QnPOMKHFD C[dkpstsvrgnXkHg9c*`^\ \ \["[)[1[:[DZPZ]YkX|VTROMLKclrwz{zsxbuSrCn5k'ig feeee%d-d6d@cLbYah`x_\ZWVSRltz~m~]{Mx>v0t#rqpp ooo n(n1n;mGlTkcjthfdb^]\u}wgWG9~+}|{zzz zyy"y+y5xAwOv^uosrnljifo_O@2%  $.9GWi}~}ywutwgWG9, $/=Nau}m]M?1$ $1ATirbSC6( #3F\uxhXH:, #5JdҁѠο}m]M=0# %9Qk*5>GOW^djpu{ %09BJRY_ejou{  !*4<DLSY_djou{%.7?FMSY^cint{  )19@GMSX]bhnt}$,3:AGLRW\bgnv &.5;AGLQV\bhox}zxwvut!(/5;AFKQV\c|jzrw}trpnljiii #*06}<{AyFwKuQsWr^oemnkxhfdb`_^^^ ~y$v+s1q6o<mAlGjLhRfYdaaj_t][YWVUTTSw rnk%h,f2d7b=aB_H]N[UY]WfUqR~QOMLKKJJ&)*'#zogc ` ^ '\ -Z 3X 8V >TDRJQROZMdKoI|GED C B BBB&.120,'u!j_ ZWU#S)Q/O4M:L@JGHNFWEaClAz?><;;;;; "-48973~/r)f#ZROMK%I+G1F7D=BDAL?T>_<j:x97655556(3:=?>:{5o0c*W$M HF D "B (@ .?!4=!:BDC@y;m6a1T+H&B$@%=%;%%:%+8%17&86&?5'G3'P2'[1'f/'t.',&+%*#*!+++3<CGIIEwAk<_7R2E-<):)7)5)#3)(2*/1*50+=/+E.,N-,Y+,e*,s(+'*&)%'%%&$'"'!7AGLMNKvFjB^>Q9D48/ 4.2.0. /.&-/-,/3+/;*0C)0L'0W&0c$0q#0"/!- + *!("&"%<ELPRSPuLiH]DQ@C;55.3,3+3)4$(4+'41&49$5A#5J"5U 5b5o4320.,+*@JQUWXVtShO]KPGCB4=)9 '9%9$9""9)!9/ 97:?:H:S:`9n9~86420/.FOVZ]]\tYhV]SPOAI2D$@ ??? ?&?-?4?=?F?Q?^?l>}=; 9 7543LU\`ccbt`h]]ZNV>P0L"HFFFF#F*F2F:FD EO E\ EjDzCA?=; 9 8R[bfijisghdZaK\;X-TQN M M M M'M/M7MAMLLYLgKwIHECA?>ZbimpqpsnekVhFc8_)\YWVVVV$V,U4U>UITVSdRtQOMJHFEbjptwx~wqu`qQnBj3g%ec a` `__ _(_0^:^E]R\a[pZXUSPNMjrx||~l{[xKt=r/p!nlkjjjii#h+h5hAgNf\emcb^\ZXVs{ueTE|7z)ywvuut ttts&s/s;rHqWphn{lkgecb}~m]M>0#  (3A~P|b{uywuqonteTE7) +8GYm~}{j[K<."  ,;Nd|p`PA3& .@UmvfVF8*0F_zșŷ{k[K;.! 3Kg '1;CKSZ`flqw}  ",5>FNU[afkpv}'08@HOU[`ejpv}"*3;BIOUZ_djov~ &-5<CINTY^cipw (/6=CHMRX]cipy~|{ #*17=BGLRW]cjs}|zwusqpoo %,17=BG~L|QzWx]vetmqwoljhfedcb&|,y2w7u<sBqGoLnRlXj`gherc~`^\ZYXXX   }xs!p'm-k2i7g=fBdGbM`T^[[dYnWzUSQPONNN zr mie"b(`-^3\8Z=YCWIUPSXQaOkMwKIGFEEED$''$ uj b ]ZX#V)T.R4P9N?MEK LI TG ^E iC uA @ >==<<<%+//-)|$qf[S P N L$J*H/F5E;CABI@Q>[<f;s9765 5 5 5 5!+25640y,n&b WL HFD!B&@,>2=8<>:F9O7Y5d4q21/..///'17;<;7w2k-`(T"HA?=;#9)8/655<4C2L1V/b.o,+)(()**-6<@A@=u8j3].Q)E#< 864 3 &1 ,0 2/!9.!A-"J+"T*"`("m'"}%!$ ##$%%1:ADFEBs>h9\5P0D+8% 2$0$.$,$#+$)*%0)%7(&?'&H&'R$'^#'l!'| &$"   6?EIKJHrCg?[;O6C26,-)+)))')!&)'%*.$*5#*=!+F +Q+]+j+z*)'%#" ;CINPO~MrIfE[BO=B964(/ %.#.".!.% /,/3/;/D0O0[/i/x.-+)'&%?HNSUU}SqPfLZIODB@4:&64444#4*41494B5M4Y4g4w3 2 0 .,*)DMTXZZ}YqVeSZPOLAG2A$=: :::!:':/:7:@ :K :W :e9t87531/ .JSY]``|_q]eZ[WMS>M/I"EA @ @ @ @% @,@4@>@H@U@b?r><;8643QY`dfg|fqdfaY^IY:T,PMJH HHH"H*H2H;GFGRF`EoECA><:9X`fkmn|mqkdhUdE`6\(XUSR QQQP'P/P8OCOON]MlL~KHFCB?`hnruu|tor_nPj@g2d$a^ ]\ [ZZY#Y+Y4X?XLWZViT{SPNLIHipvz||z{jxYtJq;n-lihffe eddc&c0b;bGaV`f^x\[WUTRry~sc~R{Cx5v'tr qppoo onn!n*m5mBlPkaitgeb`^]{|k[K<.!}|{{{zzz zzz#z.y;xJw[vntqpljirbRC4'  %2ARg~}zwyhYH:,'6I]tn^N>1# ):OhtdTC5'  ,@XsyiYI9, .Gc  $.7?HOV\bgmrx )2:BJPW\bglrx#,5=DJQV\afkqx '/7>EJPUZ`ekqy#*18>DJOTY_dkr{ %,29>DINSX^dkt~}{yxvu '-39>CHMRX^~e{nywvtqomkjih "(.3}8{=zBxGvLtRrYp`nhkri~fdb`^]\\ }y#v)s.p3n8m=kBjGhMfSd[ac_m\xZXVTSRQQ  }wrnk#h)e.c3b8`=^B\HZOXVV_ThQtOMKJIHGG um hc`]$Z)X/V4U9S>QDOJMRK[IeGqECA@??>>!$$"{pf ] XURP%N*L/J4I:G@EGCNAX?b=n;|:877666#),,*&x!mbWN JHF D&B +@ 0? 6= << C: K8 U6 `4 l3 {1 0 ///// */331-u)j#_SHA?<;"9'8-62593@2I0S/^-k+z*('' ( ( )&/58984s/h*\%QE; 8542$1*/0.6->+F*P(\'i%x$"!!"## ,4:=>=}:q5f1Z,O&C!81/-,!*')-(4';&D$N#Z!g v09>BCB|?p;e6Y2N-B)7$, )'%$$# +" 1!!9 !B!L"X"e!t! 5=CFHG{EoAd<X9M4A/6+*& #$!$ $$"$)%/%7&@&J&V&d&s%$" 9AGKMLzJnFcBX?M;A662)-) ))) )'*-*5*>+H+U+b*q * ( ' % # !>FLPRQzPnMcIXFMBA>59'4/ ..//$/+/3/< 0F 0R 0`/o/-,)'&$CKRUXWyVnScPXMMIAE2?$:75 5 5 5" 5)515:5D5P5^4m4~21/,*)IQW[^]y\nZcWYUMP=K/F!B> < <<< <'FLRX]chms{  )19@FLRW\agmt| $,3:@FLQV[`fmt~ &.4:@FKPUZ`fmv~| "(/5:@EINTY_goy|ywtrqpo $*/4:?CH~M|SzYx`uisrp~nkigedcb%|*y/w4u9s>qCpHnMlTj[hcelcx`^\YXWVV |xsp%m*j/i4g9f>dCbH`O^V[^YgVsTRPNMLKK xr mie b%_*]/\4Z9X>VCTJRQPYNcKnI|GEDBBAA{phc^ZW T%R*Q/O4M9K?IEHMEUC_Ak?x=;:9988!!wlaY TPMJ!H&F+E0C5A;?A>I<R:\8h6u4321100!'*)'#si^S J FC@>"=';,91876>4F3O1Z/f-s,+*))))(-00.|*q&f![PE< 97 5 4 #2 (0 ./ 4- ;, C* M( X' d% s$ # " """"%-3664z1o-d(Y#NB81 .-+*%(*'1&8%@#J"V bq   *28;<:y7n3c.W)L$A 6, (&$#""(!. 6>HTao /7<?A?x=l8b4V0K+@'5"+" %,4<FR_n3;ADEDxBl>a9V6K2@-5)*$ # * 2!:!D!P!] !l !}    8?EHJIwGkD`@V=K8@450*,'$$$$!%(%0 &8 &B &N&[&j%{$#!<DJMOOwMkJ`FVCK?@;57'2-* * * * *&+.+7+@+L+Y+h*x)'%#! AIOSUTvSkPaMVJLGAC2=%84 1 0000%1,151>1J0W0f/v/-+(&%GOUY[[vYkWaTWRLN=H/C!?;8 8777"7*737<7H6U6d5t420.,)NV[_aav`l^b\WYHT9O+JFCA@ ??> >(>0>:=E=S`/]"YWTSR QPPO!O*N4N?MML\KmIHECA?fmquwwwvfrVnFj8g*db_^]\[ [ZYY%X0X;WIVYUjS~QOLJHouz}~~o{_xNu@q1o$mj iggffe edd c*c6bDaT`f^{\ZXTSx~xhW~G{8x*wusrqqqqpp ooo#o/n=mNlajvhfdb^o^N>0#}}||||||| |||'|5{FzYyowtrpoueTD6'  +<Pf|kZJ;, 1E\vq`O?1#"5MivfUD5' '=WtΕʽ'08@GNTZ_djov}"+3;BHNTY^ciov~ &.5<BHNSX]bhow!(06<BHMRW\bhpy #*16<AFKPU[ahq{~|zxw%+16;@EJOU[b~j|tyvsqnlkjj  &+0~6}:{?yDwIvNtUq\odmmjyheca_]]] }y!v's+q0o5m:k>jCiIgOdVb^`h]sZXUTRQPP|wrnj"g'e+c0a4`9^>\DZJXQUYSbQnO{LJHGFEE {sl hc`\"Z&W+V0T4R9P?NEMLJTH^FiDvA?>=<;;  vld^ YUQO"M&K+I0G5F:DABH@P>Z;e9r8654332}rh ]TP KHEC"A'?,=1;6:=8D6M4W2b0o/-,++++%''$z!oeZP FB><97#6(4-2319/A-I+T*`(m&}%$$###&+..+x(m$cWMB 9 530.-$+)*/(6'>%G#Q!^ k{$+1342w.k*a%U!K@6- ) ' & $ # &! , 3 ; DP\j {  )16897v4j0`,T'I"?5+" #)19BN[iz    .5:=><u:i6_1S.I)>%4 *  '.7@L Y g w 29?BCAt?h;^7S4I/>+4'*#  % , 5 >JWeu6>CFH~GtDhA^=S:I6?25.+*%    #!+!3"="H"U"c!s!;BHKM~LsJhG^CTAJ=?966(0,'%&&&"&)'1';'F'S'a&q%#"@HMPR}RsPhM^JTHJDAA3;%62 .- ,,, ,',0,9,D,Q,_+p*(&$" FMSVX}XsWiT_RUOLL=F/A!=964 3333%3-372B2O2^1n0/,*'&LTY]^}_s^i[`YVWGQ8L*GC@=< ;::9#9+959@8M8[7l6520.+T[`de}ftejcaaQ\BW4R&NK HFED CBA A(A2@=@J?Y>j=};9753\cgkm}mtlkj[fKb<^.Y VSQONM LKJJ%J/I:HGHVFgEzCB><:dkost}tuteoTlEh6d(a^\ZYXWV UUT S*S6RCQRPdNxLKIEDmsx{|~{nx^uMr>n0k"igeccbba` __^%^1]>\N[`YtWUSQNw|vf}U{Ew6u)sqonmmmllkkjjj*i8hHgZfoda_^[~m]L=.}!|{yyxxxxwwwwww"w0v@uSthromkjtcRB3%  &6J`y}{zziYH9*+?Uoo^M=/!1IctdSB3%"8QpÓ#,5<DJPV[`ekqx '07>DJPUZ_djqy"*18>DIOTY^djr{ %,28>CHMRW]cks~ &-38=BGLQV]dlv}zxvtrq "'-27<AEJP}Vz]xeuos{pnkhfedd#}(z,x1v6u;s@qEpJnPlWj_ghetb_]ZXWVW |wtp#m(k,i1g5f:e?cDaJ_Q\YZcWnT{RPNLKJK~wq lheb#_'],\0Z5X:V?TERLOTM^KiIvGDBA@??vmhc^ZWT#Q'O,N0L5K:I@GGEOBY@d>q<:86655 | qg_Y TPLJG"E'C,B1@6><<C:K8U6`4m2|0/.--- xnd YPK GC@=;#9(7-62483?1H/Q-]+j)y(&&%%%#$$!vkaVLC> :7420$.)-.+5)<(D&N$Z#g!v $)++)t%i!_TI? 62 .+)' &%$+#1!9 ALXet"*/11~/s+h(^#RH=4+ & # "(.6?J V ds'/467}5r1g.\)Q%G =3)      % , 4= H T b r    ,38;;|:q7f3\/Q+F'<#3)     " ) 2;FR`p   18<?@|?q<e8[5Q2G-<)3%)!    (09DP_n 5<ADE{DpBe>[;Q8G4=04-+)% &.7BO]m:AEIJzIpGfD[AQ>H;>754)/*%" """"$",#6#@#M#["k!} ?FKNOzOpMfJ\HREIB@?3:%50 ,) ((((#(+(4(>(K(Y'i&|%"!DLQTUzUpTfQ]OSMJJ=D/?!:631 0/..!.).2.=.I-X-h+z*(&$!KRW[\z\q[gY^WUTGO8J*EA=:87 6555&505:4G4U3f2x0/,*(RY^bczcqbh`__PZAU3P%LH EBA@ ?>==#<-<8@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./012456789:;<=>?@ABCDEFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~񪌫ۊa۶iUֆAaߖg\;~cibvBAj+0}" d[dgܿδӟr<@\12d&(WuD{ܳX7pѣxWH;_¸ܼаaDXhC9sB6 ix qjbT$WЧwF$Gۯ[?)7ܽkZS̾ҳǢhM3ڪ~V3c҆S%FB -bznTcYQ^G HÝdG3 AƲp[M;Aô˪x_GGϟuR3%j;|UbjI4c"8dy5qmUA1!n׼zk\PD3nȻë~eLqѢzY=# Xܓ]0 79/Ps`N(>R0{#O/  {ri_TE4Ӽy]絎oU=% a4uu+Vy: ! I|qnb Y;QpM JQHE?Ȩ|viYIݴz`I3ByI#%+_|kT@.En1`1|=#)wƼxT7!)w=Ia/TtDxoi\ Q0FZ=5.[*%rVh%;Oe~ܱ{tomlls~6Pj[R;&Ft6^KB p(Cb󒡶aF2# REypbUAJg@6.I%|,y M?8Z#7I\q˭uja[UPKJLQ`xW/8#?}'Pv%P}'a) x 0Ga}ŻuYC1"&/u2g_[QF6=]4+*"[ hG5PnFASdv鼟}qg^XRMIGDGRd3 ;n%Kp6aW-8T$5H]tǽy_L=0' &O>}s;gc]T$KIBq8%-V!%2Lv-C\wlhzƥ|tmhc^YVTV\l0@O{>c9c* &?k$=XwK9J[lŽxcUIB<72.*'%&+4Kpf4\ -wRmyb;-Iq /JjH+;MavԪ~|{}E6,$  BwP+{(Mq,R"Bc/LmS ,>Qhu}tmhda_^]^chv) %[J q*N7q@e8 <[h );Pgdx˽aZUQONMMORZez)JPjt*Qt6?gY5Sv(1EZsltPLIGHIJLSYh|<.\`Ak߂) 9VwK/CXp҄xUIJMRY^pV0Jhp>^y򣅦desc Little CMS Little CMSdesc2.x 2.xlcms2-2.12rc1/plugins/fast_float/testbed/.deps/0000755000175000017500000000000013775114656020363 5ustar martimartilcms2-2.12rc1/plugins/fast_float/testbed/test1.icc0000644000175000017500000210074013775114656021076 0ustar martimartilcmsprtrCMYKLab )5acspMSFT-lcms desccprt#wtptA2B0,A2B2,A2B14B2A0F<8B2A1~8B2A28gamtXdmnddmddltdesc,Test profile, not suitable for real use-Test profile, not suitable for real usetextNot suitable for real useXYZ Zg0mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{T?~ò~i~L}~cbA~Dad~ty~W~O>~\/~|~`Cx}%H}1X}%z}K} {N}׋<_~7A~-ψ||Dz|+E|[s|z} ^}wO@}-~ċ {Gu{Dz{]Ĭ{f{Zx|[]|ϕM?}R<}Ǝz]YzHħz|z={LNw{\|=>|v|ېI8z/r z;bz'sMzd6zɬqv{D[{0> |;|yyaIy?yazYvzݮ[{^=c{ФI{R*y߄yfUy`VyyuKzZi{ <{z%zȎ~+~}͇}W0}3}HtЄ}Zk}=~zɇ}!~Єd*s}Y<9wpSwuuVrUW؈|;,뇔{RsѲ;:8q)PCV:4.8Ȅ2񡂡?Up Vu9S c bփR.ՁNn U388A/ͬδz6߆өn1T\e7݀tXT)$̯̕6;eCʷˆ imw3SƀV7M \lGNػځNāa5tNzlߴS<H6*-N}o2ن N%է>w֣A}⇤\fXMݘ2, KԐ3g°[} 0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~ ~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;'\A*ىJ nyg؜(VN#q6\DՊB*|i˽?zzhzMџzEzrn8zY,{dBS| '|⃔*Z Ђ`>mۘ:Xc€A'4 uh¨h$nk)l]'Wf@&8[/Թ|zY9_N3kV41@49%wUh 3?Vkؔ.Uٓ|??R~%nVӎȩ5U.k~j9V"U"똬>Ð?%' Ȃ}ˡWml}ʗiRT>OlT$iƝaʚ=\},?iT- =$e0yYq,<-A_|?h@SG=ҩ$leLy)yywydGzPOsz:{ )|qʬί(h䁙~ڀvcc&OS#9tL߮=.v10b䞼 N8ՙ,K.Fpj癪7̥0uPhbQM88Ajʗ׋xAʜڨ†󤔗tuϔaMKMB=(7kua ,̘/1Hsʠ5`\Lk7M (_XĀ⫹}£rs@C`)6OLA;6}Ȕ@(Bat{C rȟH_֧Kť6#̕O&3"^ļ֢qrb_cKu6{ݤ < (ytյy:}Ѱy2ldygZ8dyF冷zj1{r{(B€}b kYdrFl1l;nˉՍވI|ϯkUYz4EƄ0ˀh|RjΌcX}-EYW0,\>շFiba{{4j$W]D?50>R*>6Ā;ٱџziWyZD}p/'g^ȶ6pDzi/W%ԞD9I/Ĝ' J״"ԯzWhy1VߣKC/1ŀٵ˰tzhVﭠCߟ8//)cyxr|xaixPqyS> sy)zjfY{ C7ċ恶q¹JaJm~P ~=_~)]f2ÀDÒG'q^`۳uOY=RZ)#JNO©k#_p鷼`k&O:%=j(Hڧ,O[pt` N֐&<èi(ץc^PbB7pM@s_ϱ ,N&q<Е(¤+8fը*p_oN<}:(nN&Q̺o_Nw }gu~_jx&thxQy7Qẙzi%u7{Z{=v|k|v՟wӾ xѦx Ryosz'kYuzیM1<} #}oha}?'O|}g3}f }É\}Y}|ȸזP|D|mg|˨N|3,}X S}(d}5<|0|nƕ|4~|8f|eNT|2|L |Qvww~~x }1xfyzM(zI28%{1 ։$|y<Ǽ|>ډcΒhU~|nWdQL\15 쇋Z⊩!_+7/0 zXcⅩFK&0D!D $~uI&%ڏ͆.yl bDŽ̋vJQ/nFY k솷&ڸWlΆN]xa„I.~ ҃ᆤh/jhwo`ӃX^H.Е QLr71Nu vf`ҟGHUXu-{8IF,mźg߄ދuނ_gfGǁ-pȑ=ͅtؠ/IzKhu5^ՂGJ,^&J5uYv vw6rw]xEry+Nz|},SP~˛S~~~Sr ~O\~mD΋o~*'C~,lWح46uxp[(/C񊁃)cM &oA(7ȍpofZ0C(e_׃GgϐNanً(AY@RBS( Ѓj<ŏJmQXm@A<'|;Ȇ<[9%_5,~4m,WƈA' U<ϻ6ʱ^ly0W(W@@&֚$`|źm[xR`k7NV@-&H;/ݲàztáHuNvz t9t|uOqEu^sJvJw5Wxk@kx0| |$p|spv4|p]ڜ9|J"|4}-И5}ls?䄅lfo1]Μ=*ڙʜ]1zlʫrզЮb*|Pܟ s>Ԧ*d0vsQysjٶCt+['tJu8vF$R+v Xw {.yzj `xbiAY3I?N7#ףV> J߻bSxPgi5YuߓHU7]ӑ#âk t€ޢ_x ڟdhY9>kH§79,# MbwյZhưkYeH^7 # { >w9hX#H97# `- a{n1rmŶs7_XsPst'@t/E!udukoMw${h@zmz_^kyPpIy@z /RzVG1z_ /|F"{rmÞ_G=PN @}:m/PGw}Iu!{pm}s_gP%ԅ@^/Jn{[emep^P‹@Oߊ/P܊߫Ћ0${9%mT^PՑ@O/aґ {ńumGꜳ^`GP f@[%]/yyK!;΄7z0m?[^,Pa@guY/Vx@jzĝ>m>᫓_ 8[P*̦3@פ/E1gȥFvpswKsxt̢*xu$yvqczwW{Ox;/|1y}!yt~hku~v|}we}ʈxK}p.y3}V[z}:z~ {T}1r̚td_u Fv ~wnxBU>xy8yĂyՂ iq8rsltюLuvmvT*w!7xxpu2q/r+sŖՄtl|viS#w 7wwq?lo pqˣrzwtkXu53R.vA6BvvKNn뷌p[q1r0z̓0!{ ){ͮwӹx*NxelxTyZy,4byqJz!K/z\r zˇ6wswwܳ5x'xx ay'Iyk.yN Bz-Uw>JwQ#_wwwwx$/a x{ITy'.}yAo y~p3qrrڌsvGu `\v5HwU-ńxR܆Oy`Fzꅻzs {u{Wu{_[| Gh|i,؃|/}u\1_rك,tT^QkFǂD+n9 ­Ǐ*1ɂ|q|sB6]5kEՁJ+,x~(Ta؂ uz)Qr-\5TEh*x }0@Wd8EqZ[QDD)D=DI7ˀNdK [p=DZC~")Q~B?θڬ&2`Nos~NY~C ~wp(~^~ܾxӾc$~5n~@IYE~ sB~0(y}^~&\Wo5p!rs.lˋtTWu@v&;w*$yXySCGyyz?k֊_zVf{$@ {%{ۈ}iI ]~׊Sij̉7UJ?6$΀,Mԋˋ>j}*iT·>>k $PYفKIŠ˔8o-|:7h1kS߆a=#ċ%ʁs Y{ygʆq[S1<#,!V5q zٟg՜{Rj"0Ճ'=r'@ zVfQPQƄ;Ο_"a?) Œn;y]eQD;d1!"ospA(~|݈C|BxGgtXUѕB{5.l ʓ@lןzwߕWfɗ/SU/B{@. 'F΀F(wD f9tTAA-ma8KΞNvҤeTQA-X9ub;k)v"xFeAS*A/:-}v 4n~W{oo]p/_yqKNrhSU7Ct214+}pO@bqSb&C%1#!}ip aƫɗRB1Ҡޔz~.Nx}joدPa=RB\p1Jf|yv}6GoЯ+Va]RdB1vɔŅ(rHlemX9nIӷo:up)S4q-p)t{rwtpeÿtX:tIu@:vu)v!uxr:{er{EX&zIֵ$z:{){8n{}.re&WjBIҀ:f)0!rvҊ e_WEIu:QsQ)GIUrQheJWNTIg":Al^)!'XPr0Pe?bW Icϓ:?)8`-!GrӠ`e=̞W՛Id:::ҙ)}yM:qv6eCPWC(Ikwk:E)Q)ЧʜERٵqlrn7touIq-vkrjwtRxu6zyvzyv׷oWwppxGIrAxKsy4ttyivzQPw4z5hx!{>xzmogp–rIs^htOuJ4lvwA"kJmo:pu~r1gWsvNt3uru0zjo;l@̩Tm֔?o^}Rp⏔f%r^Ms2tGtԆ&ik8#lϝan\Q|o*e qh?Lr1s? eshԻjgk+Im{od&p3Lq1:rZ sGhi˶ kSÐ^l֫z/njcWomKpqC0q grybιg`ia}ajںclM`ymmڮbohJpP0p q%Zyk}zdmKzn{hptyU{qb||sJ}t/}v 9dv7wv{>${* I|}9z Xz Əy|zhz1Tzy>z$zjR{݂\y yVy|yh9ySyA=z|$ y͘_{^؋iڜk~mpyofipQbr$; s!tNw$setU u2x?veqvQw;xx jx{j|ۚՇ{|ن} w}!dq4}FP)}u:Qr} U}~цZ>vScyO\yI98ƃoÏۘ"ubgbo֊dNkuJ82n2f{.י~~0\to3a0Mx8EERX 2ȃEvsš`ā7&M͕7ǀvQlWJ#&r&`VLS977ߛD-`3^|r<_|Kz6Xy iNԓ&k#yln̐nj\oIqt3֍rrz쓔rZsM't3mu[čXuHUEv3(ww~{Nb{}~!{mX{Z |G|_2~c|~||lZ+ |~5l YւXFΉӂ 10&,{^kY-F1YPƇXRQ?{7~j5X^ՏFEmԍ0ˇ)MIZ0zy͚iz^=W! DՇ[0^Wh̉إy܊Dh܈ɟWD@I/慽)aV{yVܫ9hNRVCՆ/8kH(؞ĥלLjsߚl4cėmR oI?씆p+Jqlq/}А@qcHrQsˑ{@*Y{q/{%Ϛ̂=nq-ya&P{7>*)ޏ
ґƗYp`O֑ =z)w>{UƓGxp<@` O33`=%j)"]Ƙ~ϙo_z`Nu<(όؒikU~"RCo^͜Nܚ<&O(k8KW=}Ôn^VM[Q;όƠ(!7h7vm\-=nknlpvZoRiʯ(p\WpMTq>p^r-:Isj㣧sF7uav |vi`w\Gw`Mw>(x--xxT^zXu~]h}~[w}M4}=Ǣ},Рj}Z}~uDhX.[τLm=rd,2kٞ;th(urZXL_yX=h,_hҝ#te=gZn#CL<ԟ,0;ڜYVjBt]םg-;Z2VKآ<억+뜓vƐSdt.~gZ.K]<{)+뛾њ|j2f]λ@hP㷖ipC#j4*k#>l!Hksi=n2]Ϻ9nPBoCEwpn4[.q1#sJqpx)iͼud]uPմuC&v4Qv|#vv&|"ir|k]af|P]{Bw{4-{#{g{hiz1]5#PVKB+4#0liN<]PDB 3#:槫i)]GP?Bl3񨛍#2E"Y߀i Y]PDYUBM3ǔ#^?YHh]#IPQ|B%3 n#"V PlmfDn0huojqcl{rndUtOp}LlurP1vs x1s\iqTXkrgmmswogtyquc>rvKasw0txU vtwɈg|`i|\k|_&m|}xoV|bp|JYro}/s+} !t|ǻePh Pj `kw*m̓`o/ITq.q vsdF4)f|Th~juln_nCH`oˆA.p+ rxRc!e?p8gUiS tkG^m!3Gn)-in hq öad@*fUhTksjR]l3FmT,m˒ pa< cĜSeLgri\kmF$l,Ol٘\ pj`b盲d%fNrhکs\]j¥>El7>+l mp_te`uglvqiwZkrxBm\Zy,oESzq+zs}s}Fr=osfq;Zturpuvsqvst[jwquDvx]v*8yw{[xp.zk>qrzrz?s{Bot{ZDu{Csv|2)XwN|?zy|l)n]ʨo31p샖rnxsOY'txBun(u.x1lя)'n2Ôo|PlpmFqXs4RAt-;'tDywdlxklmnM#Col0pِW)r@s'>rVgvރjl$mTInkGoV`q.V@>r8&qޒ#'wJ|i߮>kLl~vmϣjwo"aUpn7?q]&IpwYVib$jɴ#k}m/>inzUoţg?p %pw=p|dM}g}TiW|}kgh}meTD~VoS>~q$r&gtSzn3{'p{zqh{u{rg|:sSS|u=8},v#C}vxqxxyMyyyzKz&zfzzvRf{z*:FEeWqcbEa?b!PX>V e*5qE|czieYlDgx\dirLIkM:6 l%ّ8n ZduΤ[fˌWg/GR6Ґě.'K͒F؋RFn9ab]cU:eGi;gW8Mh'6j*inbmi?ajTFkG@m*87`nS'?1oq-n-simpa9qsTr7Fޢs7ퟹs'rt.sx0lx`xSS,xFjzx73yA&ݜyl2x0|cl(l`8PS+E&71~&p~~k_٣wS%DžE P6؛&o(ƀkd}_ҍRߟ猲E:6&;%Jۀk$_T&R3D_Y6@%a'j𤡝_VRD؛V63%j a|`U|bRIde`"m$gsinji]plFrEo,s&p v*q d%jѭKflhn,jorFlq`\nrEpItS+pu] mthukIaud vNf}vshwpjx\[lyDnpy+nz rz-w_K]aCdlȃfoiiZRkMCl)*Bl~vq~]U `ܕbie nRgbY5iBk9)krY?q[^pa-1cm-fX\Zyc]Vj_1bpl=dޕ1WjgAqh(`h|sYY\b|^_avknc眙Vf,@gɗ''f"Ds XԵ~[?^D~`!jcVe`~@Mf'neș_t̳7n_GpOb1qd~hrgwjt?iUulM?vnw&wZo2{ ql,i{mkoPmP}kpnir pUsxr2>ts%Wutxyruɰ1isk~tߎ{m u{nvhzp0w`Sqx.=rx$ry&yzFg~&if~-k!~.zl~)g8ni~0Ro~;=q~<#p~[zS~+eGgliiy.k flхQnlgonp,\qEUIrL64rcqˈKmkUܐHH;ʂ9V)07vdh'mO'aՊUTEG9vv(ϋQu߀mB a5UyGiӏ8t(pnjрla_}TԘ_G 8r(9ŕ'Ɏ0'ebW[Z^M#`e@[b1dh e emdc'YdMmf@l{hV1Ҝi j Oird+juY kMl?n1o Кo }lo{wcqXkrzLhs?y0z' M-z1 z*b,VWqaKuH>|0UN % b&-WyK$>(܆f/2mD t ΀a՜^+V̚JJӘ=ؕ/Dv~ %z!a˖V$Jŗl=(/Jg[ 숟Y#ZdNR\Bd^5`',b#abhEcZqXpga}McB#jd5.f:':g`gpҦhQvXhhMJ iAЩj588k'l sl|9mxgzWo:Lߪ&oAWp4Uqm&ߣq Nq\rA~WRvLvAv4w3&wm ]w)Ÿx>V}#LP*}J@դ}N4^7}?&t}3}~^V-L)@u4Al&t4G->!zVҋCL2@g42&]!6MVb4~L z"@U4.#&g/&jp&aSYc]6f/`7hqcLkjfFW(li%A*nbk'nmtnų*]daq`fc6h~Kekjh m(Vj@o.@5kq'lr^cu5sANZo]pJM`q|c&rinet TguC?>ivV&Qiew ux"tWy[y܍^ z9{Y`zhc{Se{k>Ng{%f{v$|UxFX΃u[y^łyfaRd=veʁX$dvmRSvfVZx] je_(Qbp pE [pqL.~sǤbmdo7fpxshqa8js&Mlti8mu|m.u~-xe4_wbPx0dxr_fyQ_hyLjzc7kzjz~T|f]}``]-b|&pd^fဤKhԀw6jKkht~uԠc[{+^B `oc ]e@Jg56ChXf~_Yt2\̀_>oa$]coJe܌5fe3~Xas[Y^ [nJ`l\ZbaIhdi57e7:d6~Wة6Z ~]#m_{N[aĜXHcš4dc x~ɀ|6pXq\`}gr_ltbZuDedGvgh2whj`^wkZrmbne|1pAgikqiYrkFtm28to`tovȘjl ?l@m{moUjo&pXpr(Fqst1rt|cr&tzhuiv~ykgwFi:lwWnlxEoyA0pyoy~qeggyl*zGn@{mzsj~t lyp{tn`uoP2vq>w]r]* wsE=yr}ps}kqto)ru_svOOtzwK=guOw)uxivwnk||Po}n p}W^q}zN]r}h-jKO0j,lksjgg>i[ kfM#l=xnd-o}oNq6rp?ofqYr8LJs>=4pt#,mt6t] vq}BwexYy"K]yh[img"ndgQf7\@gPPiCk=4l#mn^l^sf~qm[^nObp*Beq<3슀r #or7rxe}uLZvNvA.wP3fw#w SwN|d|Y0}KNg}{A }2އ}"ن} }dZYRwMh /@vT2Z"X3!GcއEY M/$@?,;2/g"6僠c|X!|L˅MS?O1sn"*ۂ] \URBYXF[E9]+}_I`JamI\]QY_UF7ay9cr+Qe Peߘer1[_dCPeEg9i&*jV&jjwZ@kZP8lDѕm8jan*joݔ3o.p#{eZ LrOs[D0t7ƒ|t*u-u!1*u.YsyO}zCC.z7Qz)zq-z;{XkN>;CL#6폗). PX\`N/:;B66(܍~sG+X7N rBÏ6o(WrT PaTMFbV;M Y=.[i \]`|q.Oƨ[*EĦ]7:_2.` [mb+ǥbleuO=SaE-c:Ae.~fy gVѢg iz<NǤ hDYi9k-IllƠ?l(wo+}NK oqD+kpN93q-+Lqqq5u Mנjv`Cʞv8(wU,뛞wXw؛w^qzTMs}UC}8},7}&]}љ} ~M$YCJsq82, w{{L)C(8dЋ,ٗDݏgZS]W|`[5wPc,^debCPhe;ih#%ipjygl˧V^ Y`\cv _fxcbiOe"k:fm"eeolyqgRhGVUjsYlLt\nb2_oNb^q9ds!btyvbOSrݔzS sڄ| X_|VEb(|1c|cD|dQGg{Q*gh{4jz{oY|\jn^_eaFO'cgd=e ;*Me$,h;WO{Z}m]^_Ndax"W`ixGkZyT6lxy#ml9z qze~bYr7d9dfVpgFiT6j_"i p}`(&q^bZddL4Uf F=g5ph"g nτC} ^p`ԏcdbЎU dkEfP4g ".e؋ m<|]Wp2_ baJTcdaE)d4xe!dbQ knd xyRmzbV` {YQ{])BG|h`0}Ab~ld#dy wv`[Hkw(^/_w`PxcAy}e0tzGg{h~)i|v}s cjte]u gOui@vk/w}m5wm{nuDpkisq:m}\rOnOsEp`?t.q/!trtryt(tmWt7hKnu:[ovNpv?jo}.pR}o}x<~r:i3fjZl Lxm%"=n-nnumx8qgFfiCYxjKk=(l,l߉+kx:qfqehXip"KejŒ\]2D^$g`Oؔ`ԑ biqRˑ ^?Hܐy`g> bm1؏d9#䏯eeggvRBe@Hf=(Kh1/i#TjJjl{<Q9lUGDimߡ;Md|Qg"lUAi{[ XkH[m4\o]Jq$}KtEERހC2SXW)} :qJ@wEhIW;ME\P{2.Q5!gUʆ}08?e=vvBgnG5VKDNԌ1O1T|436;vqABgF KVlJ?cDMY1M^PSϏ|8ZMC]aR v[_V9f}bZ/Ud]C=ga/Oh@diufTmґyUWXZu-[^Je^avTa1dxBcjgJ.d]iNf`jrPaITmcsWfPdZhSV]jAc_m-`ncowbLjGPslqTnVbWRoR)ZYqx@j\r-] t8ats{vHt~Lu{pPvca`T,wW~+V ^dXB[|~G nKDm_OOR~C>XTԄ+TLU]?{DʏmI0J_M&OP=R܊+-RG*]뉛>{C mVG^KNO E=QE*P^i@aN zdRlf&V]h9YMVj.];k`'lcpdhq'\WyH_Zwkca]\{dQ`LYfrc:h)fu'BhhCnhvhnXb`Fw[[bj-^ec[\`gKibj: dl &dmkmzT0iivWykBhZtm Z]0nJ?_pJ9aUq%`r ixr~#2PkrtSsgAW)tXZuI\\v8L^Kwq%g]x ~i1x:M!{sP|f6TG|oWWV|H{Y|7[}C$Z} Ri|~ ~JMrNYa.Yy@[tӄypqsMerQXxsUUJuX;v-\ *wC^x0`~bZxolUcnjYW_o\.Iq6_!; rja*RsZdCt d~g!|mh]bRjx`V6l#cHmei:&ng)oi7p}i~l*l5df`fhThiGj6k9FkmM(ln]mnn~eqja#nF_cfoSedpFgr8hns"(mhsjs~.wi^v^`vwPRbwEd\x7ey'eyxhyg~0{h[K~]]~R` E6a 7c+'Gb/qff$~h%Y]D[Qy^ D_ㅉ6a)&`a&eTD0}gW-\Z3P\^6D"^2"6 _?j&g^ad8~5dz MZYzPN{TA|dW2t}LZ!~] ̀]xe{cEuTXvXLw[@*x]1y`S!zgb |b=jH~aq\W]r_Kta?/uc0ue vxg |yAgoV`md2VoQf4Jph>7qi0r~kYrl? 0vXl t_j\kUlm_Imin=,no/xoOpKoq sqny^vgFsTitHjutX\L`NOCS>7 Va(YVZ\q[i5~WxNS|MVBy`Yq6,\(^I3_C`nmVH{ZZLT|]@A{|_5>}_a'S~ck~d/eVs$U+waK1xc@VyUe4Xyg&zhzi/s}jox Tt9iGJ)uRj?Uv/l63bvml%w7nXGwn^Z{io|rS&q,pICroq>sdr2tsg%7t=stsbyCuRQnwx Hsox=py1qyk$qyr&yxJ{sQl'tGm=Xn1o$eoRBp:\x'Q%j?GolM|np3}6oh(q}}p"}pl ~pvUFy1t]=z-u3\zu'{vrzv |6vl{GFOv{lAUx5:W+>Z:[\Ґ^.i#yt=o}[4P]*_gd`a*c:nV}X<b3tid&)Det"fKfght;ˇi]2j(kkBk?kn0y;;)p)1p'wqyq熮qtS}:|w 1]w|'vew.wIwnz+: ~'0~O' ~1~\~.~mft2 $i 6 1^ 2Wy%Y !"#%#&D'f()*+-.(/H0i123457859Q:m;<=>?AB)CBD\EuFGHIJLM,NCOYPoQRSTUVX Y#Z:[Q\f]x^_`abcdfgh#i3jBkRl^mgnqozpqrstuvwxyz{|}~ˀɁǂф{pdXL@3& ֜ȝ|jWE3 תū}kYG6$ڷȸ~kYG5"ŵƣǑ~lYD.оѧҐyaI1ڲۘ}bG,{W3qHvU3sIa)\ Z,      !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acdeefghijklmnopqrstuvwxyz{|z}o~dXMA5)ۈʉq`N=, ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/h 2 R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 ::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}v~oiaZQH>5+! ؎͏Ðxpjc^YURPOOPRUY_fnx̰߱ 8Ql»!Ceª9^ɂʦ2TtҔӲ6Lat݇ޘߧoX\[VL=*b/fMq T p_L7! }tfUA, !"#$%z&d'N(9)%**+,-./01y2g3U4D526"7889:;<=>?@}AoBbCUDIE~% ہ‚rW; ϊ}bG-ޒēx`G/Ԝq_O?0"۬խЮ˯ǰı²µŶȷ͸ӹۺ 0@RfzƏǦȾ *GcЀџҿ'LsٛFsM6+1MZ:{OX͙~ʹ~y~eL~j~Qc=9~|4~cl@~]̳~nf~C~لOiZ/gP8v}6q}0}>ϲ:}i^},~"hN~uO 7A胬|.A|33|M|WE|ߓ}OgV}ьN~|M6g\7{cߥ{fǪ{ `{ɞi|+~|fn}CAN.}{5~zʸU/zDzCz{,a{}|$Ye|ȕM}5[~_wzRêzF2 z] z;{|{d|`L}5P4~=cyy@yz:z$| {[@dH|Lo|4}uyZy2yƔyj;zdj{w{ @c{̡L |34=}S~6׆}}p}UR*}u{}că~5Lx~5(=}p@kcyԃ-bKÂ4؂zGetMڽos ČX9wxʂʈaiJ͂&L43oۅO_tz莴r wA`ցNjdJh3\lԟ[7—vx`9Iue3${K͂:X2-{6 uȀ_JH䀯:2ՃsV/&ĤuU^THiS2`rփȥ$ƁWSJЀatk.\^)H;20T7Yn#s]ƞGЕV1||c|:;h|G|rʼni} ]}G{~2Q9*ǔR<6W[䂶q҈=\+3F遢1˄ڣ9Wr݌>WpxpЇh[HwFF1T4B،lkȉR9oهZ؊&Eo0샠ᤔÇ [ޘ:OnkY΅J4D=[05 ֵK\wʤĘRL~nY+ΒDsЌ0EڇDէи\Qڗݧ*mwzXbDsl0VŒj¦ψԖч{Ά=[l)X6NC'/тNA̩ՊMĠ'-7lgWԃٜmCx/O{Y{Q{F '{s~{ju|wV"}9B~P/BB̝ҹ<Ւ4 $~ӁiڍcUƋY1A7.zB!DE.Z.7} }iцJUAtp .!c˒ɒW|-Qh )TX@ۆ.e^fDi{ 3gQSm@]a..4ت`"סp 91zL fS6t@0-؆d VבAȣyf cRƈ?熏 -؄.eNĠ!|iDxFeDRk6?A -LŅq͒rƋwx{(e R?p-@ zɠz|zzur{Vb| P*[|=~ ,j;ӽp|Μsn%tŕb ǀO=n5,IY6ܟn웅φAusPaRPNل[= ,,ĻݔОD[ٚ̏~sd`TNf4<,è靎e!4ڔ&rٹޔVj)0Jp ^*L ;+Ņ􈉰(z&z ~z}HzjlJ!z[{J |9j})Ћį\RfԨف|PZk2"Z}Iʀ69!K)k9wkR{|GsGk]HYEsI 8䎛)ςϝ.4js2{{5j\pYTH`8n)GɬjԋIz,iX͕HTŊV8q*фDb7ɥR zi#fXVQH0k8Z* nԫ^D-yhTWGŐM8>*håڊʨly1hTW|Gj8*5%*؇TLdWɴ艴ux՜MAhF WxKGn/38*yǓyqb -RƇC`q:5ل(!ރ,ǘiq[LOa3R#C'Ή@4C(HaB%7y֙paDQ՚~UB84폿(in.֮z@ILp5`%QB֔4Ff(/\ ̀Ҥp^`žQqBT4(YϞM g<4˨s0p(Wd`PQ[HB 4ꎶ( Qy2yPxybiy[gzhL죡{O>|b1}%to<&؆ѻxE\i[~L,>1%܍2k3w+;iM"AZLb>-1@K&68P.TwOh~_t1S&HNBHƸyw3hzZ%XeK'T>k<1˒3&Nj„B]{vᖛhfғYK֟}>_ 1ݒU&RN:hvıQh?AKYإ/KĞ>X-1܉e',ƓM v͡Fh,YɤRK>UD1q'QZtvQh'9Y̤,KǞW>n20'onщ$yp{6y(nfhy/`췎ySxzND~}46~}y-z4*z{;24{Ё||vBd}.MU~6:hxYjxyxҪ^zzɈ}{d{c|_L}}[5L~?w31֮wȗxhبyyTzAzb{K|G4~ ivGUvޢrwާwxAMyy(zrb {K|,o4$}uoӿv'vͦצ7wϏ/xnxyia9z|J_{m3}u{ҝuv7$v=w䣍wQxs`z I{K33M|ˆhtqѰu'u¸{7v+`wqvx_yI^z2|t'tUAtɛLujnv$wux+_jy[Hz2|6♄x͍xxx8yd \z uz_{IU|3|~uႎ\?(e+kt 9^sHu2ZIQAAًnŀM>.s)]5GdX2Vݿ(%ǔ|B\PtKnr\1\Gņt1݀4DBAdz~{~ҝ~JA~q~[~ F{9m1t0~t~1c}X}Ӟņ=}ߚHp~ [9~V6E~Œ;1Q~2l}~\}^ǚ}C!^}Zo}Z}E~\0~ }Ė}:||ͭM|禛o9}-Z}E!~+0~f}J|'|5D|o;|Xn|դ`Y};D}ȓ=0c~tvٿ|wW-wݗ_x|yCmцz4Y{FD{|0Z~kud5<іZelgX@{C̄,/n*&T5ɇʕ4ЅkWm,C+w/ԁΉB7Ώˍvj3V|Bۅ/9K]́ih"4Ɇ~d1jUދBPy.ӄ[iLz6W b}yiGU]TA؋.l f3D^'DŽΧɃڢ|hsTفݓ=AWr~.'ʠǼcՐj{wh 2TiA .VΈ uͷ6,ׁEخ|lKe}v̊ c)bP‡>P,ńK'&t1uegFU7}EqЄ6L(z򂅤j?tqdȖJJTȊ;E%6(d(pcc`OޗCtN<9d<7TJ8DԎ'6ه(ϣ奖ԜVsϘcƕ"S푟 D5g(Nz]s]F+c_gSAD`5ۊ n([B?Hjr>c eSWD3_5ĉό(ٙltiNw@2Ǐ&z)"{ɪ{.ZblYLJ]b?N@GԄ2҃&GΓ\rys᥎qup[wF\x됔1zf۳n#o²apݻr;su~p`u [vwEx1Qza rÚs9(tN@uhdvpbw[3yNF>z1~|գ}f|r}|h}|}|~|oi~m}OZQ~}Ef]~71!~#{|(|`R|(e}kn\}pYq}D~p0uҞztDzi`{5n{.|mU|%X}%fD}焋0/~܂g.yƽyͩz9ݕz{-l[{tW|sC}L/~Ux٦y0ymByؚZzd}kw{W-{َC|ȊI/}ax5Lxz}xǦy4'y˜jzV{VmB|W/W}9whxxGx~ayKjzmVzBR{)/&}0ͯwj^\w_w趔xEZ}x$iyUz^- dƵ*% -6 v2~ٟxcG~̙P~Ҕ>p,Qtո1~_u~ob~iP[~}>2~,չwpFqLrІtsъiunaZvOx=Pz+|~Dy,yzC7zrJ{6`{Nl|[OLR;a^+ s6Z IMȈ 9-ەo`]L$;و4+ mvUjF|n)j] )FK2:؂fh*|HwT̡n\gK]Ғ :^*Rb!8†­)lmNj\a0K :kĎ *ځZo#+q NrQ{ҒsjCuYߎvIxf8dzs)|쪓xqx狏yX{eyj:/zYA{KH|,8H}B)5~×C,؀^z:Oir)X H7)'Ֆ+ňzey[HOh6YW*kG}7) ߁+KА]qxtfgOW`YG5X7]) Uܧ*rߗ1 וpwg) t%lǎۢv}Tf UF/Ґ 7) /ʥ#ޖ<׮ֆIjuNeD'UbsE놁6ۄ) wͣ o[pqq™ssJb4StR#vpCJx>4hqz_&|6w'xp}xq<`y'aByRzB{4A}&ˈ~Ďjiǚ`"pLa:~Q$BF4&H⟲ƍ~~[oՖI`sHQ CXB>&3'T"Ϗᛞ~,Hos_ߒkPxxAi3L9'*BD}ƒn~T_WPHhA3ɈH'@y̚Vn}2)m^ݑO.)A|,39#'S3~DZi|şPm^sO’AAŎG3ԉ'b@8Įڊ<|9n@m$H^FOJaAq3!'nߐo~pBvqhrYڜtKWv9=ʓx0ezN$|ېvڃlwCuʣwgɟxxYqyPKWDzR={r0j|$Љ~hy~yr~)uUk}gMl}Y`~KA~Z=m~03%ӏ`P^t_fĝadXeJTM=;0q%Q6vX¤yt?f1X7qJY%=Y0%=ÔGɒsːKe͎WЗ͋J‰<쏦0rl%!:-$0s>1+e[22W|5:Iݓ-<<׏30%҆צǟseW7.I_<0|%cōrjrrY?dΚ=V7IqD7<:01&WFnxaokƬq&^rQt1Eu8 w,8z="'|҄nvxJvxkw^ͦwQСxDky8{-%'|#0~SLM};w}|kh|^|Q}/DЛU}8~&-N3~#xX(.w\Mj~^-QJDVM8-o[#͉热0wChjF]̣QDvt8 -$YuvjSʍ]ԋP˝ˊDS@8do-$Rz嘞vj+P]N/P*D6 h8-i/$ ްivi릧|] PnDF8zB-ό$Yv;i5i]PX D 8ό-⌛$͇my0nem}oaεJpV r=JG\s>u3ʜw)z1 |yiuomua3vQV"GwJ_x'>ۡyg4z*|q!~>y>|m{aֲ{V {JU|R>j|4(}*U~" ym\aɁU׀JRX4EY*π~"y߀xm?saaUɅQJ-k>Y4`ɂ*ґH"֊8xƻ&Dm-gat؋UJ"ňG>y4zK+R##xlm$apU%2J >ʉ4Nq+2Q#b:]x am"]jasPU6Jn4>;?4ɉY+VB#݃x{&m'ꝑa|UJ$/?4Y+m臉#yڥqm*ƦsQnIJ+tpW uq釴w0sr&xuB\ywGm{y#2}{ضoxqkxrytOyuz4q"w=z[x{Fz|2%|}n[oQDqT{rށ5WtopvZwр=Ey1{4lnE ocqք sCunu Zv鄶EZx81D{QzӢkG}mŬ nprr;mt!Y?vDxJX0z2XjIlvmɛȖTo#q_lsVXuoGD?wJ0z;PikI mXMnşpl-r2WtڑCCw60[yφ"Јhjwlhqn'p kxr+-WUtdCovΎ{0'yuSh|jSHkēm8ojqVsgCvv/y,Szl$zm{(o,{qT"|Ls j|tV}vB~y/{`x/v}xw0Rx?z>-| 'qro(ksKLt?xufFdvRx11?y؍*-{®q*r ٝrܰsƪ'wotd]vL!QwΖS?=y$-{n`{kR݂m?o ^pvrcȁxtQrv>x,{Iuɀvc_vڈKFwu;xbDyP[]z>|,y}&~٪~ƙX~~6~~t~~b ~OZ~=,FII}t6}}}s}ᄯa0~%N~{=~,||9|`|{r|䊜`^}ENb}<~O+v{{ꕦ{'{ГOq|s_|M} <]}c+~жzؤzz͂{q{n_{1Me|x<}@+~- zK8fzZzdDCzfpSzᛂ^p{kL| `;|ۋ+}׆yWy*zy}zozk]zL{F;|+}ׯf;jNlYn~pGn)r#\)t#KWQvI:@x){sjt]u~vmOw[y JAzJ9ك{)}m |H}#[%}>}V}blo}[,}J-D~;9~)ւR (`)ᄡ|kqDZۂIX 95i)Ɓc,/͌ {qjzYUI#8J)v9?^zCi聱XY">H=8o)_ǚv͊{Hyi9X"HYT8o8)0w%dۂԁáyH hX .(G鏆8AҊ)ۅeăd<}E`UxhbWG48C))jNl?--nuvoeqUm sELv6 x'v{5s>teu t:vdꋍw?TډxE=y5dž{~'}Yl){I`{Ń{t|Ed(d|T<}DD}5~<'@~zۃHrtns$҂jcdPS؁DC_45Y'rX\#_r@ψbP6SC䅑5,CC'ȝ͍ڔ.Ӏڊqb\R0*C4'z)/[-rpވYbapLR+C͉1(%ۄyHgАvY4hPZckLA'>Ԇ1%3c0 v?th:YَK⊋=>g8o1&ƃ'惆uʑ4|gYRJK>)ċ1y"&$lO]Ψ?/^ugѠKgFEY*IKD=c-1c@&4%􈀦li|Qkom]bvIoGUqPG)s:fu.;x#!{Wql{rsoGsb#tTvG_w:Cy>.Oo{#y}1 x{kyEn̝Dyaz2TWfzG{:`8|.\z}#Ƈ~ĀJz͟ln a SMFƑ:7G.e$zf P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i 9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy }>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzrt?s^auQOw+T=y>,{¹luSmoou{psGrlatqOvk?=txj,{ @k mܖnlprxqؔM`WsNuȌ=&x,zj׫4lgmomqq0_s*9N uI_|2so|u]}@vLO}xT;"~z-*|Ly(x*yyr z$yzz~n{D{]{{K||r:}}?* ~%FwzKxx~yDQmz\'z݀K{Ҁw:^|0*~Tۮvvfw`\}xlx[^yᅜJzV:|<*}ktufvV|wkwZyRJz79{*}1Ь&tt̛ku}l{vDEjw7ZxUIy|9{*u|sh$ t$tӟ{2ujYvVYwɓI7y9Kz*h|ersMtTzuuiv>YwKHx9 zL*^|쥋|e;gȈDj,xl{hQnW3qWGrs7rv(jz\nSoqtwƂ\rg~tW v4Fw7#y(k|>wEhpx #xvyofz/VZ{Fh{6ۀ|(k~#H߀ SuezUF6(k^~ˆK~/Y~sIt~]Jd~dMU ~XE}~σY6_5G(k}\}1q}uvs}jd9}~Tv}E~6(~(k8e|ٚR|˜ |vs>|c|S} D}k 5~ (k~ǃJ|4ȑ|$|Cr{c|$Ss|Dj|5}(k~k{{ {4{r{yb{_S|D|5}By(k~!E1d鋩gl}݋hio:Al(`nPއq As3rv%zajmy!o}pnrE_zsPYuAw3Fy&!|0u߉v|1twmkx_^ÆkyFO˅zzDA6{U3|&>}ݖ"#~~G{& ~_lن~q^.~OJ[~@惑~2%&XIf5ˆWȅzG҅+ln]| NۃV@P2&nȔkɎcэZyދkIV\σ)NZ|)@Gꅎ2y&Dž xzj3 \7qMЋ@C2& G_2yxhj~[Ԓ!MnF?ƋJ2x&K:Ʉw i[SOdM#ǒ?Y2m-&(dg sYieߐkXnWJpc{"r}~zsIzgh{L[p{O|4B+|7;S}o,Ox~0"Յ~~vrf=BZܒNـB*7ij,\P#;}}~r4fxO"ZhNMBe@(78,iA#FaN}qǖ*lf Zۋ M2HB-7߅,yY#p9|qeےNYƐ*M}"A튘6؈U,ۅ#||(qW,esY!MANJje6Ç,}#5tPcjOf=_`rhTkHm=op2s(Hv "zbtu5k#jl_-$nnSjpDHrB=tytn2ݑOv)yL |triIs ^ٟtSuSHt#v=_.x02y)B{! }~st(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2u6x)Gz_юzb〾eqhbmk~Rր$nCq4u7&y7}Gh}kj}lp}oa~8qR7~sTC#*u4xA' {*{&q{{r~{t&o|2ug`|vQ}AxB}y4N~{.'|y6z?wyz}z!{Loz{`{?|9Q{|BZ|}R4%}}',~w݊|x%|xnnyH _JzP]zLA{3}'9~u)vNovꊍ{wqm9x+2^xOyA{^3|f'C}䁀uA؈u5zvElw>&]xOXy,ABz\3{Ѕ+'L}lltq5u#zUuŖkv{]cwhNx@yҊv3{U'S} sڤtyu01kvu:\vҕ8Nx*@y\3Wz'Y|u_wbviehͅhoZRkXLEni>[Wq0u<$yB˅h.j@ul^h,n{YpKуXr>ul0Ђx $ւ{!pQVqtՂs!g"yK펭gXwOiknjk_EmRekp'E$r9u&-Jw"ք{1ov勋pkTr ^!sQuE"v8腦x-Pz#|`vvwj/xV]y'QTzDąz8{-S}#U~Aq~0uQh~ri\~]BR~PM~Dzk~8"-Z\# ވ9tCLh?\8 PyBXDKh8-]r#LFt5^ hwZ\?O@OgC邡N8Z-ZqW#Ӂ ~؆'sh[ԃ4OC8 ^^-Y#~se"g[uOOCWq8-Sf$QUx3f_)m2bb!dW:gKoj?ln4}q})鉪u= hyPwfmFhbNjVmm͉/}4/U4+d *u"5wtjCԉ _w TYI=6>gg4+* "cjt<ѐlj)(_?JtTO}I o>-4* "(5sIi^SىHӇ؍"> %3*R"ӂmBo^cxaYZdcNgbDLj9ѓAm/qi&όKuByTlec4gYPj#NDlD6 o 9ؑq0[t'w{l1:lbnXoN^qCsp9ŐOu01 w'az|k|s0bt9XuLM"vwCw9y#09z'|A W}k8yalzJWzM{PCv{9~|09}j'~E "jʚրKa=LRWX:M@C69h0<'އ p0jm醤`f,WtMɄB9F0G!n'k!%j'*`V֓iLƑ Bǎ-^9]07(݃+!R|i`"IV˓Y;L`Bōu9*s0Pg(6oZ!v%pb^Y}s`P7cFѠf=ij48m+wqM#uETyUbdY/"fPgi0F\k=q nb4_qK+tZ$hhw-zak$XԥtlOšnxFpj=]wr4mt,1w@$Ō,y|sapqVX}rsOisFS#u =;v4mx=,W_z%{ }a#wxX8Ax!O)xFy=%z~4l}{,vG|%Q#}K~`ݤ]}X }Oq}E~= ~J4ui~,Q%Rυ`fzWANuEO<4u,~E% `v*W؟ON囨xE֗ĆJ<̅/4hׄ*,ۃ>%W D`YWӞNEӗp?|sk2}v%z0xtkumwvoiVw(qh[3xVsCLyu7?){#wI1|y%~|Eqtrruutvh{uUwZyvxLrxy{1{|U& }}Ǝo|q}Strh}gts}YuH~Kw~M>ox~1z~&%}=T"n!Hot pyfruXt4KSu> w1z:^&9|Zl΍|)nTrsVo͋!eqZXis(Ju=w-$1ky&J|$k•vmWrnڑempr/WrFJntYl=v1Wy{&X{Tj&lrAndogWq"J$s=[v1/x&c{imZ{8]o\2a\b~DdU/^h G΁k:o~.2s#lxA~bz~einh aAjTmcGfp=:Js@.|v#z.|`jy|lm}n`}\pS}rF~Qt:^~v.pyU#〽{z.rxztl{uM`.{v~SK|4wFt|y :}zn.g~{$}xDzwx{Ykyu{_Uz|ERz|F{};9|}.c}~f$<*vvwqkxS^xɁR&yEzF9{À.P}$_~XauzNv&vAjWv^wjQx@3P5i+U"Mv~h"la~sa~[VP~<"K~AG?~oy5L~+Z3"ǁ v)}rk}a}zU}bJ}tW?}5~,+_~"Zu|k|ד/`|ʑU|J`|ˌ?[}5}U+W~;#pu^Zf]p\ms`Qd6Fzg;ϊk1zMox'هsqxZo4a`fd [䍉fQL$iFtl};9o1r(pve >z#nheUj[LlPĊQnFq;|s1gv(B;x j1{n;odqZrP7t Eou;:Jwd1o-y9(b+{5 H}@m,vpc=w^Y6xAOy EI z:{1\|0(}=}_!~l䈺}McY}Yh}O-~D~U:~1\~(nZ!@lZbԆƒX׃YNڂDX:1nF(!qQkubXNUDu:I1K(Á*!kᐿbI9XmSNMHDA[:m1F(р!-eޛ1Y\\S`AI픟c@"gh6fkL-Wo_%Wsxbe"G`}\k?c)S.eIh?Xk6jo+-Wr%[vJzd'g,[ԕ?iLR3kI=m?pJ6VDr-u%x{dm[8KoPRYpH͏=r?d t62v-x%܆zc}csWt3ZuIQv`HXwz?$x6z-{d&|~[bzZ=K{:Q7u{Hw|+>p|5r}T-~&(~8rbY5PgGm>v~5؇n-n&Hi 7_b*φYSPG}>n5Ճ=- &h} f6$aYoP㊄Gf݈>r85Ɔ-̄lq& ځ[\XSP\1J垦_BHic&9f1',k )_koL"^s^xhZڢ_pRԟbJ}dBh9 kG1=|n)r`"ϋGv:>zZkeR^gJ!j8Al9^dom1ArM)׍ZuK#-xw†{Z kQmI1o[ApqR91sq1&ـX/zP[Hޔ8@ő=e8Ў1108*_K_$J[cXoP͖)aHɓ~S@8֍z1E*t$c,4i\U+2_Y&c]}Lf0`litd[lhK;pm(;tq,xv媋X_a\ob`3_eW|'cWhLkfkIZjnaJnq:s4u4+wy>UgiY>k\m~z`ojxdqYhsIm7v :@qx+w{vR=ssKVct&Zduy^lviSbwYgy I:kz]9p{+v7}BOw}BS}nX"}x4\d}h[`}XIe~>Hj~9o~+unM Q†=V8w=Zg}_]WdQEH8i9To +t"K)sOׅT*vzY@uf^WcCGhV9"nt+tiIN$!SMuXfD]7VbeGg8m+t+Hp7M{RK\upW!e\;8VXaGDgb8mr+scU5fiY:Ih]'ukxaeqn,dUqhF/t(m77+wq)[{Xw +`0^呣caEeetc0QgCnll05q)|v#bQ1MU"|YnM]Џ_b,,Qf֊Ckp5p)vMUPjT|Xsm\*_OaZPf!Bk)O5zp)uR[k5UVmYV{'n]=mpa^gsdOuLiASwmI3vzq&}w+g^jbiazl dlnLg]pjOsIn@vqk3Fy/u'&|yQdagx fixialkknB\npNuqpr@tut3#wx<'{{Satpad@qwfsWiit[lv5Mow@ s4yb2v{1'*z}.^y.[ayvfdzhg{%[j{Mng|l?r }&2u}'>z~ގ\ƁR_uwc h f1gZYi"Lm+?Rq2u)'Oyk]Zi{^MtagWdԇmYh]IL!l()?p* 2t}']x聫Y\t`L/fc'Y3g`!KkU>o}2ts'ix}ƌX|Y[7s_YvfJbҒXfKdj>n2Ks'rx'rU~LsYqqu)]Odva#WFx eIyiOr7)t.̂wY&y߂=|eǀq,\rS€t JWuz@߀w7sx.zN&Ł | *l}e~w\M5xS3OyIXzf@{j{77R|.}&E~ i dv}d~}[}~R~~Im~!@$~P07(~_.~' +c|([j|Rq|*I>}{@}U7}[.~='~k c{*[{ʊOR|#H|Q?|U6}.}'$~x W^㓈TVXN \fE%`a<~d3h*ˊm#Mr&w^[U^MwvbDep;ȋyi 3 l*dp#u yU]XgbUEddL=gD:jb;}md2.p+s#wl&z\hT jLClCȈo6;+q2̆t.+zv$0{y|e\ oT&pKErECKAs:5u28w+$Fy$aw{}[u uaS{~v|KGwBx:y2z+17|@$}+~Z{S |'Js|B|:n}w2~+GM~$<gZFpRJhTB\:4݀2P7+?$ہ2 Z3HHR'Jy B_τ:b2ZM+|߂$/TܜT#MZWE [>_6&d.`5h'Emm| r҈~wToRaX1R^DteA6lC*sJ>9Dz|JoP`V+R]LD,d}b6k^*rރK(f9k'y7oԃ-}t$ysyTJnXc]EXa@`MUeBj]7`o7-ct@>$ywlsQltWU+buYdVwU]KBxb?zf4|k*W~p!dvuoXkp\La.r_VtscJvbgC?Vx~k04zoO*l}Ds!xtkq`jmcj`4ofVUAqiKJtlX>vo4Oy!r*u{v" ~z{sLhh9igjju_llT|odnIlqqS>{ts4!wve*zy8"M}|/re)ohRgqs^ jsSmBtHpv)>*s2w4vfy*y{"} }q!bwvgexa]phy7RkpzH^nz=q{3uK|*x}"|`pS`k~fc\f5Rei@Gm1W=yp3tW*x("{р8o^f4a\AeAQh3Gxl=!oɂ3sY*w"{]2o9]$e`[deQgG.k%`[nb 5f,Mk$bCq5ՄvaCjWY[OPGJ^G6b=f4Ձ{j,[o8$sRqx`C|^X |aO}dF~.g=~kC4n,Z\rv$OvaIz[_Tye^W"zgN{j_E{l=|o4T}r,N~u% xI{^pvOlVNwnMxoEFyq<{t4|Nv6,B}x%0zkn}G]srUult!MGvunDx!vb.8XfH0j(fo "5sxV]IO;`uGc?vg7(j/nX(Ճr6"vFgzLUҁcNvfSF܂7i?#4k7P(n/,q(?u%"rxЂ{U)j Ml&F9nL>1p7 ar/u_(w"`z)}T_|p[M}qE~sz>-~|u6~v/Mx(z#t|ts~;SzvyL{wEB|{xt=} yn6{}z/k~2{)~|#D~!{3SAx|YLz/|D{&}-={}6@|}/:}R~x)~#o~RwqKxDz=qzX6U{/h||)'}c#~~NؓOHJSAqX:=\2av+#f%AzkqovM̐UGRY}@]_9}?aq2le+jO%lo RsGxM[F,_?Ռ)b8f2i+y1m%q [v/; z>LxaE|d?1g8{j1ɇm+eoqF%jt xM{Kڈ^gESj!>{l8o1q+\t%τwb }zA|KAmDƅo>@qn7Ąs^1s9up+cw%y!&| aN~JsDL t=v"7w{1Lx+Zmz&|![}~JLy/C炗y=z7V^{X1-|2+E} &2~!~ځ,I|~CR~=U~71l~1$0+T|&(!ĀTmft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92FJM`LrLڨPϦYǥdħoxƶ˳Я֫ݥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗92EJL`KqJڪMϩVȨaŪk¬u}ŶʲЫ֤ܚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚᚚ82EJK`IqHۭJЬRɬ]ƯgñqyIJˬХ՝ړޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ82EJJ_HpFܯGҰNʱWȶbźlxŭ˧ϠӘ׏ڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏڏ82DKI_FoDݳCӶH̷Q\lxƩʢΛєԌ׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌׌72DKG^DnA߸>ֽBJ¾\lxƥɞ̘ϑҊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊԊ72DKF^Bm>};yN_kzpwtuwsyr{q}poˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀoˀ )A$U5eFpTy{avhrnoqmtkwjyizh|g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~g~9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@PUPeQuSڢ[РeȝpŜ{œºŸɶ̳ϲҭӭӭӭӭӭӭӭӭӭӭӭӭӭӭ9*F@OTNdOuQڥXѢbɟmşwžùǶ˳ϱԮקէէէէէէէէէէէէէէ9*F@NTMdNtOۧUҥ_ʣiŢt¡}øȵͱӮاڡ֡֡֡֡֡֡֡֡֡֡֡֡֡֡9*F@MTLdLtNܪSҩ[˦fƥpåzøɳϰիڠܛ؛؛؛؛؛؛؛؛؛؛؛؛؛؛8*E@LTKcKsLݭPԬX̪bǪlĪv~¸ɳϬգښܖؖؖؖؖؖؖؖؖؖؖؖؖؖؖ8*E@KSJcIrJްMհUΰ^ɰhƲsò|ɮϥ՜ڕّّّّّّّّّّّّّّܑ8*E@JSHbHqH߳JֵQжZ̸eʽq{ȦΝԔ؎یٌٌٌٌٌٌٌٌٌٌٌٌٌٌ8*E@ISGaFpFGٻNӿWcpyǠ͗Ҏׇه؇؇؇؇؇؇؇؇؇؇؇؇؇؇7*D@HREaDoC}DJTbnxǛ̓Њԃւււււււււււււււ7*DAFRD`BnA{BFRamxƘʐΈтӀӀӀӀӀӀӀӀӀӀӀӀӀӀӀ7*DAEQB_?l>x@FQ`mxŕȎˇ΂6*CACP?]Rcpzċņǂ5*BA?7J0R/U,h0BWgs|2*8=/E)H%R)l1EZit|~~~~~~~~~~~~~~~0*/8&<;#W*o5J]ku{~}{zyyyyyyyyyyyyyyy.*%0-A#Z.o<O_lt~x{{y}xvāuÃtÄs†s†s†s†s†s†s†s†s†s†s†s†s†s†s†$%#,F&[5lDzSb|lxquusxqzp|o~ǹm̂l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄l˄ 1G,Y]?fCmMoNYfqyĆǀ|zyyyyyyyyyyyyy5"B7AE=P;Y69A4H3M6P6g;{HXgr{|zzzzzzzzzzzzzz2":43=.B/A.U3k;~J[is{}{ywwwwwwwwwwwwww1"31+6&6&A,Z3n=M^ktz}|zywussssssssssssss.!*+",-#G+]6oB}R`l~s{wx{v~tǀsƂqńpćnĊnËnËnËnËnËnËnËnËnËnËnËnËnË* "3#J.^FJFVHbKmOwU^lȷqw}Ɣɐˌ̊ɊƊƊƊƊƊƊƊƊƊƊƊ6C.F>EJEUFaIkNtU{ajĺpu{ŎȊʆˆɆƆƆƆƆƆƆƆƆƆƆƆ5B.E=DICTD_GhMpVudzinty~ĈDŽɀʁȂƂƂƂƂƂƂƂƂƂƂƂ5B.D=BHASB]FeMkXmazgmrw}Â}z{}}}}}}}}}}}}5B.B<@G>Q@YD`NcYg`yfkpv{}xvuwwwwwwwwwwww4A.@;=E;N>UDYOZQlZ}biqw~|yvtrrrrrrrrrrrr3A/=::C8J;OENF_KqR[fpx|ywvtttttttttttt3>.975?5D9EBHDRHZNaVgbmgmrx~‚ƒ3A&B3@=@GBOGWM]X``lf~kqv|}{}3A&A2?<>EAMESNVZW^kd}jotzzwtwzzzzzzzzzzz3A&?1<:IDMOMWV]jc{hmsx~ytqnqttttttttttt3@&<0989?%9.656::WEgKuS^h|qxwt}pȂnLJkŋiĐhĖfÞeåeåeåeåeåeåeåeåeåeåeå//*"$!# -55I4N?\JfUoy^urd{nk~jphueyc}bځ`ڄ_ه]؋\א[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔[֔  !.,?7MDXOaxYhq_mjdqgjtdowbty`xz_{{]~|\}[~ZYXXXXXXXXXXX   $//==IIRxTZpZ_i_ddegaji^nk\rm[vnZyoX|pW~pVqUrTsStStStStStStStStStStSt'-49~BCwMJnSPgYUb^X^d[[h]Yl^Wp`VsaUvbTxbS{cR}dQdPeOfOfOfOfOfOfOfOfOfOfOf*(~82vD:mKAeQF_WI[]LXbNUfPSjQRmRPpSOrTNuTMwUMyUL{VK~WJWJWJWJWJWJWJWJWJWJWJW->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;WH\Tb`jkrv|䅄|yvsqonmlklţnƢnƢnƢnƢnƢnƢnƢnƢnƢnƢ->L.S;VG[Ta`hkpuz䇃߂~zwtrpnmll¤nĤoĤoĤoĤoĤoĤoĤoĤoĤoĤoĤ->K.Q:TGXS^_djluv~䊀߅ۀ|yvsqonmn§p§q§q§q§q§q§q§q§q§q§q§->J-O:QFVR[^aihtq~|߉ۃ{wtrpooqrssssssssss->J-M9OESQX\^herm|wߌۇց}yurporstuuuuuuuuuu->I-L9NDQPV[\fbqi{s}ۊքzvsqqtuvwwwwwwwwww->I,J8LCOOTZYe_ofyoyێևҁ|xussuwxyyyyyyyyyy->H,H7JBMMRXWc]mcwkuܒ~ӌ̆ƀ|yvvwyz{{{{{{{{{{->G,G7HAKLPVUa[kati~ޟsԘ}ˑĊ|zyz{}}}}}}}}}}}->F+F6GAIKNUS^Yh`qhz٥s͜zŕ~}}~->E+D5E@HILSR\Xe_mްivҩqȠx~-=D*C5D>FHKQPYWa^iڴisͬo¤v|-=C*B4B=EFJOOVV]`dԸgrȯmtz-=A*@3A2?;BBGINOWS^_˾dqjpv|~,=?(=1>9A@FEMIXK\^cphntz{xwz||||||||||,==';0<7?)F:MKUZ\hbwgm~svypŁjĉfÒbÜ`æ_ô_¨aaaaaaaaaa,51 .#-"3:.B@IPN_Ul\wc~jvqoyk΀g̈dʐbɘ`ɡ_ɫ_ɹ\â\â\â\â\â\â\â\â\â\â,0,'&- 73>EETLbRnXx}`vipqkxheцbύ`Δ^Λ]ͣ\ͭ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ[ͷ,+$+&48>KGV}Q^vYen_jhendkraqt_vv]{x[yYzX|W}V~TSSSSSSSSSS   +06=@H}KQuTXmZ]g`bcfe_kg\piZtkXxlW|nUoTpSqRqQrPsPsPsPsPsPsPsPsPsPs־ "!..9:|DCtNJlTPeZT`_X]eZZj\Wn^Ur_Tv`RyaQ}bPcOdNdMeLfLfLfLfLfLfLfLfLfLf %1*|<4sF;jLAcSF^YIZ^LVcNThPRlQPoROrSNvTLyUK|UJVIWHXGXGXGXGXGXGXGXGXGXGX'{3$q<,hC2aJ7[P;VV=S\@P`ANdCLhDJkEInFHqFGtGFvHEyHD|ICIBJBJBJBJBJBJBJBJBJBJ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9H%O1V=\IcTj^qhzp|wx}tqomkihgfeŒe͒fђhҒhҒhҒhҒhҒhҒhҒhҒhҒ( 9G%N1U=[HaSh^ohxp~xz~vspnkjhgffǔfДhГiДiДiДiДiДiДiДiДiД( 9F$M0T >(@0C8H?NEUK޻^TдdeŬksqx~' 7=='?/B6G0C4L6R?YQ¾`bfpl}rx~}xustwx¨x¨x¨x¨x¨x¨x¨x¨x¨' 588#9(<,B.L-O=WP^`doj|pv||vrommp§r§r§r§r§r§r§r§r§r§& 466!6%9'@&I(NNLVY]eco~jxvpnwhc·_ΐ[͚YͥWβV“VДWϕWϕWϕWϕWϕWϕWϕWϕWϕ& ,& '4#=3EBKPR\Xf|_ntfulmzfua}]܆ZۏX٘VءTجTطSɋS֋S֋S֋S֋S֋S֋S֋S֋S֋$ &  &2(;8CFKRR\|Yds^kjdpeluatx^|{[}YVߒUޚSޢRݪQݶQݿQݿQݿQݿQݿQݿQݿQݿQݿ!   &1,;:DGLQ|SZsY`k_fefjamm]tpZzsXtVvTxSyQzP{O|N|N|N|N|N|N|N|N|N|  ' 2.=;EE{MNrTUkZZd`_`gb\meYrgWxiU~jSlQmPnNoMpLqKrKrKrKrKrKrKrKrKr )!4.?9{GAqNHjTNcZR^`VZfXWlZUq\Sv^Qz_O`NaLbKcJdIeHfHfHfHfHfHfHfHfHfͻ, 7+zA4pG;hMAaTE\ZIX_KUeMRjOPnQNrRLwSK{TIUHVGWFWDXDYDYDYDYDYDYDYDYDY".y8%n>-fE2_L7YR;UX>Q]@ObBLfCJjDInEGrFFvGEzHC~HBIAJ@K?K?K?K?K?K?K?K?K?K $w-l3c:$\B(VI,QO/NU1KZ3H^5Fb6Df7Ci8Al8@p9?s:>w:={;<~<:<:=:=:=:=:=:=:=:=:=u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁u$v5wCJ'R3Y>`HhR|oZwybshonlrjugxezd|b}a~`_À_ˁ^Ձ`ہbށc߁c߁c߁c߁c߁c߁c߁c߁v$w5yBI'Q2X=_HfQ~nZywbuiqnmskvhyf{d}cba`Ă_΂_׃aۃc݃d݃d݃d݃d݃d݃d݃d݃d݃w$x5|AH'O2V=]GdQlZ|tbxitoptlxj{g~fdba`Dž`Ӆbمd܅eۆeۆeۆeۆeۆeۆeۆeۆeۆx$x5~@G&N1U<[FbPiYqb{{ivprunyk}ifecbaˇbՇdڇeوgىg؉g؉g؉g؉g؉g؉g؉g؉y#y4?F&M0S;ZE`OgYna~xiyptvp{mjgedbÉbЊd؊f؊g׋h֌i֌i֌i֌i֌i֌i֌i֌i֌y#z4>E%L/Q:WD]NeXkati|pwvs|okhfdcnjcԌf֌hՍiԎjԎkԎkԎkԎkԎkԎkԎkԎkԎz#{4=D$J.N8TBZLaVi_phzp{wv|qmjgfeǎfԏhӏjӐkґlґmґmґmґmґmґmґmґmґ{#|4<C$H-L7RAXJ_Tf]nfwo态v{}uqnkihhϓkѓlГmДoГoѓoѓoѓoѓoѓoѓoѓoѓ|#}4;A#F,K5P?VH]Qc[kdumކ~u؀|zvromlkȖmϖoΖpϖqϕrϕrϕrϕrϕrϕrϕrϕrϕ|#}4:@"E+I4NEK2TC[Saahmnwtz{upmjiÜk˛n̚o̙o̙o̙o̙o̙o̙o̙o̙!+ 3214;?I0RBYQ`_fklur~xztojgdcd͘g͘h͗h͗h͗h͗h͗h͗h͗h͗!) 0.,/8 =H.P@XO^]dhjrpz{vt}nhda^]]Д`ДaДaДaДaДaДaДaДaД!( , (& (2 >G,O=VL\Ybehn{ovtu|m|hc_[YXWԎYӏZӐZӐZӐZӐZӐZӐZӐZӐ!'' !  0=F,N:UH[Ua`|gitnpmuvg|{b˄~^ʍZʗWʣUʯT˾SՆTوUىUىUىUىUىUىUىUى% /:"C1J>PJWT|^]tedlljftoa|s\لvYَyU٘{Sڣ|Qڰ}P۾}P|P~QQQQQQQQ  .9'B5IAPK{WSr]Zjc`dje_ri[zlWnSqPrNtLuKvJvJvKuKuKuKuKuKuKuKu !.9*B6JA{RIrWPi\VccZ]i^YpaUwcRfOgMiKkJlImHmGnFnFnFnFnFnFnFnFnӺ "/:+C5zL>qQEhVKa[O\bSWhVToXQuZN|\L]J_H`GaFbEcDdCdCdCdCdCdCdCdCdֲľ %2<)yE2oJ9gO?_UCZ[GUaJRgLOlNMrOKxQI~RGSETCUBVAW@X@X@X@X@X@X@X@X@XƸ  (4w<%mB,eG2]M6WS:SY=O_?LdAJiCHnDFsEDyFB~GAH?I>J=K$[D)TJ,PQ/LW2I\3F`5De6Bi7An8?s9=w:<|;;<9=8=7>6>6>6>6>6>6>6>6>|q$ h+_2W9Q?LF!HM#ER%BW'@[(>_)vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj$i2 l>vF{M)|U3z]=vfFqnMmyTjZf_cbae_h^j\k[lZnYnXoXpXpYpZp]p]p]p]p]p]p]p]pj#i1 n>wE|M(~T3|\E%L.S8ZAaKiS|q[v|bqhmmiqfucxaz`{_|_}b}c~df߀g߀g߀g߀g߀g߀g߀g߀g߀o!o0 ~6<D$L-R6Y@`IfRnZ|yawhrnmsjwgze|c~bÀbӁd߁eނg݂h݃i݃i݃i݃i݃i݃i݃i݃i݃p!r/ 4;C"K+Q4W=]FdOkXu`|hwnrtnyk}hfee˄f܄hۅiۅkۅlۅlۅlۅlۅlۅlۅlۅlۅq!t. 3:C!I)N2T;[DbMiUs^ۂ|f|owurzoljiiĈi؈kوlوmوoڇoڇoڇoڇoڇoڇoڇoڇq v, 2:B G'L/R8X@_IgRڏp\чxfʁo|vw|tqomllϋn׋o؊p؊qىqىqىqىqىqىqىqىr x+ 09AE%J-P4V<\EܛeOғm\ʌufÆ}ov|}xusqppɍqՍs֌t֋t؊t؊t؊t؊t؊t؊t؊t؊s z* /9?C#H*N1T8\@՟bN˘k[Ñrfzow}}ywuttŏuԎvՍwՍw֋w֋w֋w֋w֋w֋w֋w֋s |) /8=A!F'L-R3ܪY?УaMƜiZpewov}~{yxxyӐzԏzՍ{֌{֌{֌{֌{֌{֌{֌{֌t~( .8<?D$J)Q.֮W>˧_MgZneun|v}~}}~Б~ӏ~Ԏ~Ս~Ս~Ս~Ս~Ս~Ս~Ս~Սt'.7:=B H$߷N,ѱU=Ǫ^LeYldsnzv|̑ӐԏՍՍՍՍՍՍՍՍu&- 68;?FڻK+ʹT<®\KcXjcqmwu~|}{ɑ|Ӑ|ԏ}Ս}Ս}Ս}Ս}Ս}Ս}Ս}Սu%- 568=EվI*ȸS;[JbWhbolut|{|yvtƑuӐvԏxՍxՍxՍxՍxՍxՍxՍxՍv$, 235:?H)ĻQ9YH`Ugamktszz{vronÐnӏpԎrՍrՍrՍrՍrՍrՍrՍrՍw", 0 /17 ;F'P8XG_Te_kirqxx~ztoliggՎiՍl֌l֌l֌l֌l֌l֌l֌l֌x!+, * + 29E%N6VE]Rc]igpovvy}|snieca`ҋc׋e؊e؊e؊e؊e؊e؊e؊e؊z )'$$'7C#L4TB[ObZhdnlytrs{xm}hc_][ZЇ\ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ_ڇ~& %5A!K1R?YL`Wf`zlgssmlzsgwb{^~ZXVUρVނX݂X݂X݂X݂X݂X݂X݂X݂ &6@I-Q;XH^R{eZskalrgfylaǁp]ƊtYƔvVşxSƬyRƻzQyQzS|S|S|S|S|S|S|S| &4? G-O9VD{]LsdTlkZfr_ayd\ԂgXԋjUԕmRԠnPԭoNռpMoMpNrNrNrNrNrNrNrNrع  ' 4>$G0N:zTCqZJiaPdhU_pYZx\V_SbPdMeKgJgIgHgJgJgJgJgJgJgJgJg ۱ʽ (5?&G1yN9pT@hZFa`K]gOXnRTuUQ}WNYK[H\F^D_C_B`A`A`A`A`A`A`A`A`ާ˶ +6@&xH/oM6gS<`X@[_DVeGRlIOrKKyMHOEQCRAS?T=U=VLh@InAFuCC|D@F=G4>3?3?3?3?3?3?3?3? y o( g0_7X>RDLJ"HP$DU&AZ'>_);d*:i+8n,6t-4z.3/1000.1-2-2-2-2-2-2-2-2 ujb!Z) S1M8H>CD?JwFxN(wV1t_:nhAjsHf~NbS_V\ZZ\X^W`UaTbScSdRdTdVdXdYeZfZfZfZfZfZfZfb$^/j5 t<zD|L'{T0w\9reAloHh{NdS`X][[^Y`XbVcUdTeSfTfVfYfZg[h\h\h\h\h\h\h\hc$_.m3 w:}BJ&R0|[8wcAplHlwOgTcY`\]_[bYdXfWgVhUhViYh[i\j]k^k^k^k^k^k^k^kd#a-p2 {8@I%Q.Y7|a@viHpsOlUhZd^aa_d]f[hZjYkYkYk[l]m^n_n`o`o`o`o`o`o`oe#d+s0 ~6?H$O-W6^>|fFvpNq{UmZi_ecbf`i^k]l\m\n]n^o_qaqbrcrcrcrcrcrcrcrf#g)w. 5>G"N+U3\_JeUl^sfzlrw|{wtrƒrڃsށt߀uuuuuuuo#+,,16ɻCM.V<]IdTj]qexkqvyzu~qnlkՂmށo߀pppppppq!)'&*5ĿAL-T;[GbRi[ocvj~|oxtsyo|khfeрfh~j~j~j~j~j~j~j~u % "3 @J+S9ZEaPgYm`~tgxzmrrmvhyd|a~_~_~_}b}c|c|c|c|c|c|c|x0 >H(Q6XB_MeVk]xrdryilngrbu_x\zZzYzXz[z]y]y]y]y]y]y]y} . ;F%O3V?]IcRxjYqp_kwdfiam]pYrVtTtStStTuVuVuVuVuVuVuVuٸ +9D"M/T;[DxbMqiSkoYev^`~b\‡fXhUkRlPmOmOlOnPoPoPoPoPoPoPoگͻ +9CK*S5yZ?qaFjhLeoR`vV[~ZWχ]Sϑ_PϜaNϩcLϸcKcLbJeKfKfKfKfKfKfKf ަδ¿ - 9B J*wP3oX;i_AcfF^nJZuNV}QR߆SOߐVMߛWKXIYHYHYGYF[F[F[F[F[F[F[ѭ¸ .:C!vJ*nP1fV7`\<[d@WkCSrFPzIMKJMHNEPCQBQARAR@Q@Q@Q@Q@Q@Q@QԥIJ$1~;tB lH'eO-^U1Y[5Ub8Qh;Mo=Jv?G~ADCBE@F>G4>3?3?3?3?3?3?3? v$n- f5_<XCSINO!JU$F[&C`'@f)>k*;r+9y-6.4/1001.2-3,3,3,3,3,3,3,3}rha'Z/ T7N>IDEJAO>U;Y9_6d4i2p /w!-"+#($'%&&%&%&%&%&%&%&%&xo d\T N'H/C6 ?< sHrQ&oZ.jc6enxqFs{MnSjXg]e`ccae`g_h_i`iajbjcjdieieieieieiei^#i"v#, 6>EL"S*Z2߅e;~mExvMtTpZl^ibgeehdjckclcldmflglhkhkhkhkhkhkhk_#k y"+4 <CJP&X.׊a:΄jE~sMy{Uu[q`ndlgjjhlgngogohoiojnkmkmkmkmkmkmkm_#n{!*2 :AGM!ږU-Ϗ^9ȉgDoM~wUy[v`sephnllnkpkqkrlqmpmpnonnnnnnnnnnnna!p~ )1 8 >DߠJӚR+ʓ\8dCmMtT~|[zawetirmpporosospsprqqqpqpqpqpqpqpqpc r'/6 ;@ڤFΞQ*ŗZ7bBjLrTy[`|eyjwmupssstsutttsuruqupupupupupupet&-4 7 =ԧDɡO)X6`BhKoSvZ~`e}j{nyqxswuwvxuxtxsxqxqxqxqxqxqxqgw$+03ܮ7 ϪCťN(W5_AfJmStZ{`ejn~q}t|u}|v|}v|}t}|s}|r}|q}|q}|q}|q}|q}|qiy#),/ײ4 ˭AL'U4]@dIkRrYy_dimq|tyvwvvvvtwsxrxqxqxqxqxqxqk{!&'ߴ)ҵ2 ǰ@K&S3[>cHiQpXw^~di~mzqvssuqvovptqsrrsqsqsqsqsqsqm~" ں!͸1 ´>I$R1Z=aGhOnWu]|c}hxltpprmtjuiuitksmqmqmqmqmqmqmqpӽȻ/<G#P0X;_EfNlUs[}zawfrjnnjqfsdscscreqgpgpgpgpgpgpgpsپ -:F!O-V9^CdLjS|qYvx_qclhhkdn`p^q]q]p^p`oaoaoaoaoaoaow׵ *8DM+U6\@bI|iPvoVpv[k}`fdbg^j[lXmWmWlWlZlZlZlZlZlZlZl| ح ͸ '6AK(S3Z<}aEvgKpmQjtVe|[`_\bXeUfSgRgRgQhShThThThThThTh ۥαŻ#3 ?H$Q.}X8v_?ofFilKdsP_{T[XW[T]Q_O`M`M_LaMbMbMbMbMbMbMb Ъŵ / <F~O)vV2o^9hd?ckD^sIZzLVʃORʍROʘTMʥVKʳWJWIVIXGYHZHZHZHZHZHZԢǯ !0 ;}DuM$nU+g\2bd7]k;Yr?UzCRڃENڍHLژJIڥKH۳LGLFLFLDOCOCOCOCOCOCOۚʩ %3 {<sDkK"dR(^Y-Y`2Uh5Ro8Ow;L=I?GADBBCAD@D@D@D@C@C@C@C@C@Cͣ (x2 p;iCbJ\P#VW'R^+Oe-Ll0Is2F{4C6A7>9=:;;:<9<8<8<8<8<8<8<8<|t&l0 e8^@XGSMOT KZ"Ha%Eg&Bm(@u*=}+:-8.6/40312212121212121212yog"`,Z4 T<OCJIGOCU@[>a;f9m6t 4}!1#/$-%,&+&*')')')')')')'~ukb[T&N.I5E< AC >H;N8S5X3^1d.j,r*z'%$#"!!!!!!~pg^ VOI C'?.:47:3?0D.I ,N )S 'X %^ #d !l t }L*H3O4T7ZA\JZTW`$Tk*Px/M3J6G9F;EC?B?B@AAAAABABABBADAFBGBGBGBGBGBGBM)J2Q2W6\?^I]SZ^$Wi*Su/P4M7J:HFNW&~a1xj:ssBo|HlMiQfUdXcZa\`^`_`_a_a_c_d_d^d^d^d^d^d^[ ht~#+4 ;CJڊT%Ѓ]0~g:xoBtxHqNnRkViZg\e_dadbdbdbebfag`h`h`h`h`h`h`]jw!)18 ?ݔGҎQ$ʈ[/ƒd9~lAytHu|NrSoWm[k^j`hchdhehdidjckbkakakakakaka_mz'.5; ֘C̓O"čX.a8iA~qHzyNwStXq[o_nbmdlflflfmendncnbnbnbnbnbnbao|$+1ݠ6 ќAǗM!V-_7g@nH~vN{}SxXv\t_rbqepgphpgqfrerdrcrcrcrcrcrccq!',ؤ2̟@ÚK U,]7e?lGsM{S}Wz\x`vcuftgththugvfueududududududet#ߦ&ҧ0ȣ>IS+[6c?jFqMxRW\}`{czf~yh{yizyiyzhzzfzyezydzydzydzydzydzydgv۫Ϊ/Ħ=HQ*Y4a>hEoLvR}W[_~czfw~hu}is~is~ht~ft}eu|du|du|du|du|du|dixծʭ-;FP)X3_bpC^wGZKVNSPPRMTLTKTKTJUJVJVJVJVJVJV֘ɥ(6 AyJrR&lZ-fa2ah7\oqHjPdX%__*[g/Wn3Sv6P9Lӈ;JӔ>GӠ?EԮ@DԿAC@D@BBADADADADADADјå }&u2n<gEaM\U W]$Td'Pk*Ms-J|0H2E4C5A6@7?7?7?6=8=8=8=8=8=8ơyq'j2d; ^CXKSRPYL` Ig#Go%Dw'A)?*=,;-9.8/7/7/6/6/6/6/6/6/{tmf&_/Z8 T@PGLNHUE[Bb@h=p:x8 6"4#2$1%0&/&.&.&.&.&.&.&yphaZ#T+O3J;FB CI @O=U:[8a5h3o0x.,*)('&&&&&&xlc\UOI&D.@4<;9A6F3L1Q .W ,] *d (l %u #! yk^VO IC> 9'5-23.8+=(B&G$L"Q W^enx        B-B2H2L6N<PGPRN_KkHw$E'B*A,?.?/>0=1=2<2<3;3;4;4;4<3<3=4?5?5?5?5?5?5C,D0J0N4Q:SFRQQ]Ni Kt$H(E+C-B/A0@1?2?3>4>4>5=5=5>5>5?4?6A7A7A7A7A7A7D,G.M.Q2T9WDVOTZQf Nr%K})H,F.E0D2C3B4B5A6A6@7@7@7@7A6A7A8C9D9D9D9D9D9E+I,P,U/Y7\B[MXWVc Ro%Oz*L-J0H2G4F5E6E7D8D8D9C9D9D9D9D:E;FH?J@J@J@J@J@J@G*P'X&^*c3f= fGdQ`[ \g&Yr+V}/S3Q5P7N9M;LK>L=K?KAJBLCMCNCNCNCNCNCJ(T$\#c(h0l; lDjNfXab%^m+[x0X4V7T9S;Q=Q>P?O@O@OAOAOCNENFPFQGQGQGQGQGQGM%W!` h&n.r8 rApKmTh^$di*at0^~4[8Y;W>U@TBSCRDRERFRFRHRIRJTJUJUJUJUJUJUJP#[dm$s+w5x>wGtPoZ"ke)go/cy5`:]>[AYCXEWGVIVJUKUKVLVMVMXMYMYMYMYMYMYMS ^hq"x(|1~: }CzLvWra(mk/it6e};b@`C^F]H[KZLYNYOYOZPZPZP[P\P]O]O]O]O]OValu |%.7 ?H}Sw]'rg0np7jxHQ%X._5f<}mAxtFs{KoOkRgUdXaY_Z_Y_Y_XaWaWaWaWaWaWo  ߍҘʢ© /<FO#V,]3}d9wk?rqDnyHiLePaS^U[WZXYWYWYV[U[U[U[U[U[Us ̜ؑå ,9DM T)}\0wb6qi|HuP!oX'j_-ee2`l6\t:X|>UAQDNFLHJHIHIHHIHJHJHJHJHJHJΔ¡ /{; tEnNhV!c]'^d+Zk/Vr3S{6O9LG?F@E@E?DACBCCCCCCCCCC֍ƛ y*r7lBfKaS\[Xb#Ti'Qq*Mz-J΃0HΎ2EΚ4CΨ5Bθ6A5A5@7?9>9>9>9>9>9ʖx sn&h3b> ]HYPUXQ`NgKo Hx#Fށ%Cތ'Aޘ)?ަ*>ߵ*=*=*<+;-:.:.:.:.:.vnic'^2X;TD OLLSI[FbDjAr?{<: 8!7"6#5#4#4#4#4#4#4#4#uid^Y&T0O8K@GG DN AU?\A;G8N5T 3Z 1a /i ,r *} (&%$#""""""sgYSMHC?&:-73390?.D+J)P'V$]"e ny         tgXMGB <840%,+)0%5#: ?DIOV^hr~      9/<0A1D4D:DEEQ C]Ai>v<:9 8!7#7#6$6%6%5&5&5&5&5&6&6&6&6'6(6(6(6(6(9/>/D/F2H8HCHO G[DgBs?=$=%=&<'<(;);););*;*;)<)<*;+;,;-;-;-;-;-<-D)J)N,Q4R>RJ PUMaJmHxE"C$B&A'@(@)?*?+?+?+?,?,?+?,?->/>0?0?0?0?0?0@*H&N&R)V2W<WG UQR]PiMt J#H&G(F)E*D+D,C-C-C.C.C.D-C0B1B2B3C4C4C4C4C4C'K#R"X'\/]9^C [NXXUdRo Pz$M'L)J+I-I.H/G/G0G0G0H0G2G4F5F6F7H7H7H7H7H7F$O V]$a,c5d@ bJ^T[_Xk Uu%S(Q+O-N/M0L1L2K3K4J5K5K6J8J:J:K;L;L;L;L;L;J!S[b"g)i2j< hFePa[^f [q%X{)V,T/R2Q4P5O7N8N9N:N:O;N=N=N>O>P>P>P>P>P>MV_g l&o.p8oB lKiWebal%]v*[~/Y2W5V7T9S;SR?R?R?RARASASATATATATATAPZdlq#u*v3v= sGoSk^fg&cq+`y0^4\7Z:YW@VBVCUCVDVDWDWDXDXDXDXDXDXDS]hpv z&|.|8zD uOpZlc&hl,fu1c}5a9_<]?\A[CZEZFYGZGZG[G[G\F\F\F\F\F\FU`ktz")ނ3@ zLvVq`%nh,kq2hy6f:d=b@`C_E^G^I]J]J^J_I_I`H`G`G`G`G`GXcnw~#և.̃= I{Sv]%se,om2mu7j|;h>fAeDcGbIbKaLaLbLcKcJdIdIdIdIdIdIZfqz݋Ћ,Lj; GQ{Z$wb+tj1qr6oy;m?kBiEhHfJfLeMeNfNgLgKhKhJhJhJhJhJ\ht}֏ˎ*Œ8 DOX#|`+xh1uo6sv;q}?oBmElHkKjMiNiOjOkNkLkKkKkKkKkKkK^kv ۏ Вǒ'6BMV"^*}e0zl5ws:u{>sBrFpIoLnN}nO{mPznPyoNyoMyoLyoKyoKyoKyoKyoK`m y ۋ ԑ ̕•%4AKT!\)c/~j5|q9zx=xBvEuI|sLyrNvrPurPsrPtsOtsMtsLtsLtsLtsLtsLtsLbo { ކՎϔ ǘ#2?IR Z(a.h4o9v=}~A}{EzyIvxLswNqwPovPnwPnwOnwNnwMowLowLowLowLowLd r ~ڈАʗ›!0=GPX'_-f3m8t={{AxEtHq}Km|Nk|Oi{Ph|Ph|Oi|Ni|Mj{Lj{Lj{Lj{Lj{Lf uԋ˓Ě.; ENV%],d2k7zrmBiFeIbK_M^N\N]M]L]K^K^K^K^K^Km|Ոʒ )6 AJR!~Z(y`.tg3on8kuQ@OBMCLCLCKCKDKDKDKDKDKD}ϋ–-}9 wCqLkSfZ"ba&^h+Zo.Vw2S5O8L:JE?E?E?E?E?ڃǑ {(u5o@ iIdQ_X[_ Wf$Tn'Qv*M-J0H2E4C4B5C4B5A7@7@7@7@7@7΋{tp"k0f<aE \NXVT]QdNlKt"H~$EȈ'Cȕ(AȢ*?ȱ+>+>*>+=-<.<.<.<.<.ē{pg d`*\6XATJ PR MZJbGiErB|@؇=ؓ<ء:ٰ 9 9 9 8"7#7#7#7#7#{pe]ZV'R2N<JDGMEU B\ @d>l;v9754221111111{ocXTQM&I/E8A?>G94 0,)&""',16<AHOW a l y 116.:/;2;9;C9O8\ 6h 4t2100//.........//......3/9,=->0?6?A=M<<;::9999999:9!9#9$9$9%9%9%9%<'C#H"L&O/P9NCLO J[HfEqC|BA@?? > >!>!>!>!>!?!>#=%='=(=(=(=(=(=(?#G LQ$U,V5U?SJ PVNbKmIwGFE D!C"C#C#B$B$C$C$C%B(B*B+A+A,A,A,A,A,C JPW![(\2[;YF VQT]QhOrM|K J!I#H$G&G'F(F(F)F*G*F,F.F/F/F/F/F/F/F/FNV\`%b-b7`A]L ZXXcUnRwP"O$M'L(L*K+J,J-J.J/K/J1J2J2K3K3K3K3K3K3JRZaf!h)h2g<dH aT^^[iXr V{$T'R*Q,P.O/O1N2N3N4N4N5O6O6O6O6O6O6O6O6MU_fkm$n,m6kCgOdZ`d]m"[v&Y~)W,V/U1T3S4R6R7R8R8R9S9S9S9T8T8T8T8T8OYcjort&t1q?mKiVf`ci"`q'^y+\.[1Y3X5W7W9V:V;VZ?Z?[>[>\=\<\<\<\<\`>`=`=`=`=Wb l t z ~ ҁȁ'6|B xMuVr_"of'ln,ju0h|3g6e9db@bBbBbCcBcAd@d?d?d?d?d?Yd n w}Ԃ ̄Å$4@ |KyTv\!sd&qk+or/my3k6j9h I}RzZ wa&uh+so/qw3o~6n:m=k?|kByjCxjDvjEvkCvkBvkAvl@vl@vl@vl@vl@] it|ЃɈÊ /< GP~X|_%yf*wm.ut2t|6r9|q=yp@voBtnDrnEpnEpoDpoCqoAqo@qp@qp@qp@qp@_kvˆŋ -: ENV]$~d)|k-zr2}xy5zw9wvf~Ac~Ca}D`}D_}C`}B`}Aa}@a}@a}@a}@a}@gtLj&3? HPX z_%ve*rl.ns2j{6f9c<`?]A[BZCZBZA[@[@[?[?[?[?jx̓Œ#1< FNzVu]#pc(lj,hq0ey4a7^:Z=X?V@T@T@T?U?U>U>U>U>U>o|ȇ .9 CyLtSoZ ja%fh)co-_w0[4X7U9R;P=O=O,=-=-=-=-=-ljsj gc(_5[?WH TP PXM_JfHnExBÂ@Î>Ü<ë ;ü!:!;!9"8$8$8$8$8$uj^YW!U.Q9NCKLISF[ Cc Ak>u<р:ь8њ6ѩ5ѻ45433333uj^TL JH&F2D<BE?M=U;]9f7o 5z 3 1 0..--,,,,,vj^SIEB@$=.:68>6F3M1U/]-e+p){(&%$#""""""wj]QF?<96 3(10.6+=)D'J%R#Z cn{xj]PD:52 .+(!&'#- 39?EMU_jx       yk^PC8/+'$!#(-28? F OYer,/0,2,30160A/M-Z+f)s(~ ' ' ' & &&&&&&&&&&''&&&&&&.,3)5*6-645?3K2W0d.p ,{ , + +****)))))**+***))))1)6&9&:);2;=9H7T5`3l 2w 0 0//.........//.......4&9#=#>&A/A9?E=P;\9h 7s 6~5443333333334332322228#= AE#G,G6F@DLAX?d >o>=========< qInRl[ibgj"fq%dx(c+a.`0_3_5^6^8^8_7~_6~`5~`4~`4~`4~`4~`4U`ipuxz{z/x<uF sPpXn`kg!jn%hu(g|+f.d1c4c6|b7zb9yb9xc8xc7xd6xd5xd5xd5xd5xd5Wblsx{} ~~,|9yD wNtVr]pd nk$lr(kz+j.~i1{h4xg6vf8tf9sf:rf9rg8rg7rh6rh5rh5rh5rh5Yenv{ *7}B {KxTv[tb ri$qp'~ow+{n.xm1vl4sk6pj8nj:mj:lj:mk8mk7mk6mk6mk6mk6mk6[gqy~ (5@ I}R{Yy`wg#|un'ytu*vs}.sr1pq4mp6ko8io:ho:go:go8ho7ho6ho6ho6ho6ho6^jt|%3> GPW~^{|e"xzl&tys*qx{-nw0kv3hu6ft8ds9bs:bs:bs8cs7cs6cs6cs6cs6cs6amw#0<ENU{\wc!sj%oq)l}y,i|/f{2cz5`y7^y8]y9\y9]y8]x7^x6^x5^x5^x5^x5dpz .9C LzSuZqa nh#jo'gw+c.`1]3[6Y7W8W7W7X~6X~5X~5X~5X~5X~5ht~+7A yItQpXl_hf!em%at(^},[/X1U3S5R5Q5Q5R4R4R3R3R3R3ly '~4y>sG oOjVf]cc_j"\r%Y{(U+R.P0N1L2L2L2L2L1L1L1L1L1q~|#w0r;mD hLdT`Z]aYhVp!Sy$P'M)J,H-G-F-F-F.F.F.F.F.F.w}wso,j7eAaI ]QZXW_SfPnMvJ!H$E&C'B(A'A'@(@)@)@)@)@)~ul ie'a3^=ZFVN SU P\McJkGtE~B@> < < < ;!:":#:#:#:#yma]Z X-T8QBNJLRIY F` DhAq?|<:8767554444{ocXP ML%J1G;EDCLAT>\=<&;19;8E6M5V3^1h0s.,ۍ*ܝ)ܭ(('&& & & & ~qeYMC:5 31 0*.3-<+D*L(T']%g#s" reYLA8/- +(&$$+"2!9AIQZersfYK@5,&$ !"(.5<CL V b ougZK?3)!  # (.5=FQ]k{',**+**.&4%?#K!X dp{     )*,'.'-*,2+=)I'U%a#m"x"!!!!!!!!!!!!!"" " ! ! ! ! ! ,&0$1#1&2/1:/F-R+^)i(u''&&&& & & & & & & & ' ' & & & &&&&/#3 57#8,876B4N2Z0e.p-{-, , , + + + + + + , , , , ,,,,,,,37:= ?(?2=>;I9U7a5l4v3 2 2 2 1 1 1 1 1 1 2 2 2111111117;?CF$F.D9BD?P=\FJDVCbAl @u ?~ >==<<<;;;<<<<<<<<<<>DJOQR#Q-O8MEKQI\Gf FpExDCBBAA@@@@AAAAAAAAABG OSVWV%U1S?RLPW Na LjJrIzHGGFFEEEEE F!F!F"F!F!F!F!F!EK S W Z[ZZ+Z;XHVS T\ RePmOuN|MLKJJ!I"I#I$J$J$J%K$K$K$K$K$K$H OV[ ^ ^ _`'_6^C[N YXWaUiTpSxRQP O"N#N%N&N'N'N'O'O'P&P&P&P&P&J SZ_bc ce#e2c@aK ^T\][eYlXsVzU T"T$S&R'R)R*R*S*S)T)T(T(T(T(T(LV]cghhj i/h<eG cQ aZ_a^i\p[wZ~!Y#X%W'W)V+V,V,W,W+X*X*X)X)X)X)OY`gjllmn,l9jDhN fWd^be`l_s^{!]$\&[([*Z,}Z-|Z.zZ.z[-z\,y\+z\*z\*z\*z\*Q[djnpp qq)p7nBlK jTh\fceicpbx!a$`&}_){_+x^-v^.u^/t^/t_.t_,t`+t`+t`+t`+t`+S^gmqss uu't4r?pI nRlYj`ighnfu!}e}$zd&wd)uc+rb-pb/ob/nb/nc.nc-nc,nc+nc+nc+nc+U`iptwwxy$x2v=tG rOpWo^md}lkzks wjz#ti&rh)og,mg.kf/if0if0ig/ig-ig,jg+jg+jg+jg+Xclsxzz{|"|/z;xE wMuUs\{rbxpiuop rnx#om&ml)jl+hk.fk/dj0ck0ck/dk-dk-ek,ek,ek,ek,[fov{~~-9}C {K ~zSzxZvwasugptnmsv"jr&hq(ep+bp-`o/_o/^o/^o/_o-_o,`o,`o,`o,`o,^iry+6@~I yQu}Xr|_n{ekzlhyt"ex}%bw'`v*]u,[u.Zt/Yu/Yt.Yt-Zt,Zt+Zt+Zt+Zt+amv} (4~>yG tOpVm]icfjcr `~z#]}&Z|)X{+V{,T{-S{-Tz-Tz,Ty+Uy*Uy*Uy*Uy*eqz $}1x;sD oL kTgZdaah^p[x!X$U&R)P*O+N+N+N*O*O)O)O)O)ju{!w-r8mBiJ eQbX^_[fXmUvR!O#M%K'I(H(H'I(I'I'I'I'I'o{~wso)k5f?bG_O \VX\UcSkPsM}JG!E#D#C#C#C$C$C$C$C$C$utn jf%c1_;[DXKUS RZ OaMhJqG{DB@>====<< < < |{oc_\Z+W6T@QHNOKW I^ Ff DnAx?<:988776666sgZS QO$M0J:HCFKDRAZ?b=k :u 8 64321100000ui^SGCB@'?2><5-% $#"%!. 7@JS^jx{naTH=3*" &-5=FP[i x }obUG;1'  # ) 08ALXfwqcVH:/% #*2<GTcs")#'#( +1=IVbnx$'&$&$$'"/ :FS_ju'#) ) (#)-'7%C#O![fq{+--. /)/4,?*K(W&b%m$w############$$$$$ $ $ $ $ .1256%6/4:1F/R-],h+r*{***)))))***** + * * * * * * 258;= <*;59A6M4X3c2m2v11000//// 0 0 1 1 111111169>ACB#A.>:=Ft ={ = < <<;;;;;;<<<<<<<<= BH K LLJJ,K;JHHSG]Ff Dn Cv C}BAA@@@@@@AAAAABBB@ FLOP O OQ'Q6PCONMXLa Ji IpHxGGFFEEEEEEFFFFGGGBJPTVU UV"W2V?TJSTQ] PdNlMsLzLKJJIIIIJJKKKKKKEMTY[[Z[\.[;ZFXPVY U`ShRoQvP}PONNNN N!N!O O OPPPPGQX]``^ `a*`7^C]M[U Y]XdWkVrUyTSSRR!R"R#}R#|S"|S!{T!{T {T {T {T JT\addc de'd4c@aJ_R ^Z]a[hZoYvX}XW}V {V"yV#wV$vV$uW$uW#uX"uX!uX!uX!uX!MW_dghghi$h2g=eGdO bW a^_e^l]s}]z{\y[v[!tZ#rZ$qZ%pZ%o[%o[#o["o["o[!o[!o[!OZbgkljkl!l/k:iDhM fU e\db}bizbpxaxu`s_p_!n^#l^%k^&j^&i^%j_$j_#j_"j_"j_"j_"R]eknonopp,o8mBlK jR ~iY{h`wffufnreupd~mckc"ib$gb%eb&db&db&eb$ec#ec"ec"ec"ec"U`hnqsqrst*s6r@pH}oP ymWvl^skdpjlmiski|hhfg!dg#bf%`f&_f&_f&`f$`f#`f#af"af"af"Xckquwuv wx'w3v=|uFxsN urUqq\npckojinqfnzcmal!_k#]k%[k&Zk&Zk%[k$[j#\j"\j"\j"\j"[fnty{yz {|$|1|{;wzDsyL pxS lwZivaguhdtoasx^r\q Zq"Xp$Vp%Up%Up%Up$Vo#Vo"Wo"Wo"Wo"_irx}~!{.w9rBnJk~Q h}Xd|_b{f_zm\yuYxWxTw!Rv"Qv#Pv$Pv#Pu#Qu"Qt!Qt!Qt!Qt!cmv}}yu+q6m?iGeO bV _\\cZkWsT}QO~M~ K}!J}"J}!K|!K{ K{ K{ K{ K{ gr{|vrn'j2f<cD`L\S ZZ WaThQqOzLJHFEEEEEEEEmxtn if"c.`8\AYIVPTW Q^ NfLnIxFDB@????????s~{le`][)X4U=REPMMTK[ Hc Fk CuA><:99998888zuh[V SQ#O/L8JAHIFPCXA_?h=r :} 8 6433322222ymaUKGED'B2A;?C=K;S9[7d5n3y1/.- ,, + + * * * }qdYMB; 875)423;2D1L/U.^,h*t)'&$###""""sg[OD:0* ('&'%0$9#B"K!U _lz͊͜ήuh\PD90(  "+4=HS_m~ߑ wj]PD8.%   ! ) 1 ;EQ^nyk^QC7-#  %.7BN]n{m`RD7+!  !)3>K[l&$%'.:G S _ k u           #!!$,7DP\gr{""! )4@LXcnw%&$%&%$0!;HT_is|)*),,!,+)7'C%O#Z"d!n!w!!!    !!!!""#######,.0332%00.<,I*U*_)i)r(z(((((((((()****** * * 02 6 8975(352B2O1Z1d0m0u0|/////////00 0 0 0 0 0 0 0 3 6< > =<99-:<:I9T9^8g7o7v6}6655 5 5 5 5 5 6 6 6777777;@BB ?>@'A6ADAO@Y?a>i=q=x< < ; ; ; ; :;;;<<<<<<<:@EHHF EG"H1H?GJFTE]DdClBs Bz A A @@@@@@@AAABBBB<DJNOMKMN-N:MFLOKXJ`Ig Hn Gu F|FEEEEEEEFFFGGGG?HOSUSQ RS)S6RBQKPTO\Nc Mj LqKxKJJIIIIJJ~K~K}K}K}K}KCLSXYXV WX%X2W>VHUQTXR_ Rf QmPtO{ONN}N{MzNxNwNwOvOvOvOvOvOFPW\^]Z[\"\/[;ZEYMXUW\ Vc UjTq~Tx|SzRxRvRtRrRqRpRpSpSpSpSpSpSISZ_ba^_``,`8^B]K\R[Y Z` }Yg{XnxXuvW}tWrVoVnVlVkVjVjWjWjWkWkWkWLV^beebbcd)c5b?aH`P}_W z^] w]d u\ks\rp[{n[lZjZhZfZeZeZeZeZeZeZeZeZOYafhief gh'g2f=eF{dMxcT ub[ raa paim`pk_yi_g^e^c^a^`^`^`^`^`^a^a^a^R\dillij jk$k0~j:ziCvhKsgRpgY mf` kefhdnfdvdcbc`b^b\b[b[b[b[b\b\b\b\bU_glpolmno!}o-yo8unArmInlPkkW ik^ fjedilait_h~]g[gYfWfVfVfVfWfWfWfWfWfYbjpsspqr|sxs*ts5ps?mrGjqNgqU dp\ boc_oj]nrZm|XmVlTlRkQkQkQkRkRjRjRjRj\fntwvuvzwvxry'oy2kx<hxDewLbwS_vZ ]ua ZuhXtpUsySsQrOrMqLqKqLqLpMpMoMoMo`jrx{zzz{t| o~l~$i/f9bB_~I]}PZ}W W|^ U|e R{nPzwNzKyIyHxFxFxFwGvGvGuGuGueow}~sl he b,_6\?YFWNTUR\ Oc Mk KtHFDBA@AA~A}A}A}A}ju}yjd`]['X2U;SCPJNRLYI`Gh Er B}@><;:;;;;;;q{se\W TR"P-M6K?IGGNEUC]Ae>o <:9)827;5C4K2S1\/f-q+*('&&%%%%%xk_SH=4/-, +)*2):(C'L&U$_#k"x {nbVJ?5,$ &/8AJUaoƑǤǹ~qdXK@5+#   ! * 4 > I U brԄԘԫsfYL?4*!    (1<GTctuhZM@3(  %.9ESdvwj\O@3'  *5CRcv#!! $ +7DQ]hr{ ) 4 AMYdnw%0=I U ` j s |   ",8DP[fow""!"" '2>KV`jrz&% ( )(& $+!8 DP[emu}   !"""#####) *./ -+("&/&='J'U(_(h(o'w'~''''''((())******-0342 .,.(/70D0O0Y0b0j/q/x///...///00011111058:95 46"818?8J8T7]7d6l6s6y55555555 5 6 6 7 7 7 7 7 3:?BB>;>?,?:?E?O>X=_=g^qF\pMYpTWp[UobSoj Pns Nn~LmJmIlHlGlGlHkHkHjHjHj^gnrrqzqqrktfucv`w(^w3[x<YwCVwKTwRRvYPv`NuhKuq It| GtEsCsBsAsBrBrBqCpCpCpclsvuvuvixcz^|\}Y~$W/U8S@PHN~OL~VJ~]H}eF}nC|y A| ?{ >{<{<{v;9 8 6 6 6 6 6 6 6 6 ox~wk^UNJHG%E/D8B@@G?O=V;_9h7s5310////// / v}peZOFA >=;(:19:7B6J5R3Z1d/o-{,*)(''''''~vj^TI@7210!.*-2,:+C*K)T(^&i%v#" }ocWMC80($#!! )1:BLVao~uh[PE;1' &.7ALW e t zl`SG<1' $,6@LYhy̌˟˳|obUH;0&  "*4?KZj}ݑݤ޶qdVI</$  '1=KZltfXK=/$  #.;J[m  (5ANZenw %1>JVaks{  "-9FQ\fow~( 4 ALWajrz   ".:F R \ e m u |   &3?KV_how}""%$! *8EPZbjqx~   !!""#####%(*+(! !$$%2&?'J'T']'d'l'r'y'''''(((()******(.353-*-.,/:/E0O/X/_/f/m/s.z.....///0011111-5:=<73 46'747@7J7S6Z6a6h5o5u5|555555566777772;ADC?; ;<"=0=;=E=Nk >k `inmmxmlnap[rVt RuPvNw'Lw1Kx9IxAHxIFxPDwWBw_@wh>ws<83245*555@5I5P5W5^5d4k4r4y4~4}4{5y5x5w6v6t7t7t7t7t75=BDB>98::&;1;;;D;L;S:Z~:`}:g{:ny:uw:~v:t:r:q:o;n;m;m<l<l<l<l<9BGHFC?> ??!@-@7@@}@H{@Oy@Vw?]u?cs?jq?rp?zn?l?k?i?h?g@f@f@e@e@e@e@>FKLJGCCCD~D){E4yE=vEEtDLrDSpDYnD`lCgkCoiCwgCfCdCbCaD`D`D_E_E`E`D`DAINOMKGGG|HxH&uI0sI:pIBnIIlHPjHVhH]fHdeHlcHuaG`G^H]H[H[H ZHZIZIZHZHZHELRQPNJJzKvLrL#oL-mM6jL?hLFfLMdLSbLZaLa_Li^Lr\L|ZLYLWLVLUL UL ULULULVLVLHPUTSQMzNuO pOmP jP*gP3eP<cPCaPJ_PQ]PX\P_ZPgYPpWPzUPTPRPQP PP PP PPQPQOQOQOKSWVUT|PuQpR kShTeT'bT1`T9^TA\THZTOYTVWT]VTeTTnRTxQTOTNTLTLT KT LTLSLSMSMSNVZYXWwTpUjVfWbW`X$]X.[Y7YY?WYFVYMTYTSY[QYcOXlNXvLXJXIXHXGXGXGXGWHWHWHWQY\[[}ZrXkYeZ`[]\Z\!X]+V]4T^<S^DQ^KP^RN^YL^aK]jI]tG]E]D]C]B]B]B\B\C[C[C[U]_^^x]m\e]__Z` WaUbRb(Qc1Oc9NcALcHKcOIcVGc^EcgDcqBc}@b?b>b=b`>`>`Yaaaataia_bYdTf QgNgLh$Ki-Ii6Hi>FjEEjLCjTBj\@ie>io=:731 12 3+353>}3F{3My3Tw3Zv3at3gr4oq4wo4n4l4j5i5h5g6f6f6f6f6f67>BA?<8677|8'z81w9:u9Bs9Iq9Pp9Wn9]l9dk9ki9th9~f9d9c:b:a:`;_;_;_;_;_;;BEDC@=;};y<u=#s=-p=6n=?l=Fk=Mi=Sg=Zf=ad=hc=qa>{_>^>\>[?Z?Z?Y?Y?Y?Y?Y??FHGFD@|?w@ s@oA lA*jA3hA;fBCdBJcAPaAW`B^^Be]Bn[BxZBXBWBVCUCTCTCTCTCTCTCBIKJIG}CvCqD mDjEgE'dE0bE8`E?_EG]EM[ETZF[YFcWFlVFvTFSFRGPGPGOGOGOGOGOGPGEMMLKJxFqGlGhHdHaI$_I-]I5[I=YIDWIJVIQUJYTJaRJiQJtOJNJMJLKKKJKJKKKKJKJKJHPOON{MsIlJgKbL_L\M!ZM*XM2VM:TMASNHRNOPNWON_NNgLNrKN}INHNGOFOFOFOFNFNGNGNLRQQQwPnLgNbO]P ZPWQUQ'SQ0QR8PR?NRFMRMLSUJS]ISeHSoFS{ESCSBSASASASARBRBRBQOTTT}SsSiQbR\SXT TURUOV$NV-LW5KW<JWDHWKGXRFXZDXcCXmAXy@X>X=Xc>=cEg4*!  "+5@N]nvgZNB7,"   )4BQbuɊɟʱn`SF:/$  (4CTg|fYL?2$ '5FXk,9EPZckrx~ (4ALV_fmtz "/;GQZbiouz )6AKT\cjpu{ "/;ENW^djpu{'3>HQX_ejpv|   ,7BJRY_ekqw~   $0;DLSZ`flry!%"*5>GNU[agmt|~}|zyxxx"),*'#$/9AIPV\bi} p| xz y!w!u"t"s#r#p$o$o$n$n$)020.*'# #$%*%4&=}&D|&Kz&Rx&Xw&^u&et'lr'tq'}o(n(l(k)j)i*g*g+f+f*f*/66540-*)*|+%y+/w,8u,@s,Gq,Mp,Tn,Zm,ak-hj-ph-zg.e.d.b/a/a0`0_0_0_0_04;::8520{/w0t0!q1+o14m1<k1Cj1Jh2Pg2We2]d2eb2ma3w_3^3]4[4Z5Z5Y5Y5X5X5Y58>>=<:}7x4t4 p5m5j5'h60f68d6?c6Fa6M`6S^7Z]7b\7jZ8tY8W8V9U9T9S:S:S:S:S9S9<A@@?~=x:s8n9j9g9d:$b:,`:4^:<];C[;JZ;PX;WW;_VN>N>M>N>N=N=?CCCBz@s=m<h=d=a>^>!\>)Z>1X>9W>@U?FT?MS?UR@\P@eO@oNAzMAKAJAIBIBIBIBIAIAIACEEEEvCo@h@cA_A \AYBWB&UB.SB6QB=OBCOCKNCRMDZLDcJDmIExHEGEEEEFDFDFDEDEEEEEFHHH{GrFjBcC^DZE VETFQF#OF+NF3LG:KGAJGIIHPHHXGHaFIkDIvCIBIAI@I?J?J?I@I@H@HIJJJwJnIeE^GYHUIQJOJLJ!JK)IK1GK8FL?ELFDLNCMVBM_AMh@Mt>M=MQS=R\U+=V24\F3]N1]W0]a/]l.]z,]+]*]*])]*\*[+[+ZUUUrUgV^VTWLYE[?]:_6` 4a2b1b#0b+/c2.c:-cB,cJ*dS)d](di'dv&d%d$d#d"d#c#b$a$aXXzYnYcYZZP\H^A`:c4f/h ,i*i)j(j&'j.&k5%k=$kF#kO"lY lelrlllkkjihh\\u\i]_]V^LaCdk7n0q)u"x{}}}~"~*~1~:~DNZh x  ~ ~ } } | { zewejeafVhLkBo9s1w*z#~    # + 3=HTaq~jqjgk[lPpFtQez)5AMV_fmty $1=HRZbiouz +7BLU]djpuz%1<GPW^ejpuz +6@JRY_ejouz$/:CLSY_djou{  (3=EMSY_djpv~   ,6? G N T Z _ e k r y  }|{{{ %/9AHOU[agnu}~|zxwutsqqqp%%#! )3<C~J|PzVy\wbvitqszqonlkjihhgg&***(%"|$z.w6v>tErKqQoXn^lek mi vh!f!e"c"b#a#`$`$_$_$_$,///-*(}$z" v#s# q$)o$2m$:k%Aj%Gh%Mf%Te%Zd&ab&ia&r_'}^']([)Z)Z*Y*X*X*X*X*13332/y-u*r( o(k)i)%g*-e*5c*=b*C`*J_+P^+W\+^[,fY,oX-zW-V.T.S/S/R/R/R/R/R/66665y3s1o/k.h-d.b.!`/*^/1\/9[/@Y/FX/MW0SV0[T1cS1lR2wQ2O3N3M3M4L4L4L4L4L39999|9t7n4i3e2a2 ^2\3Z3&X3.V35U4<S4CR4JQ4PP5XN5`M6jL6uK7J7I8H8G8G8G8G8G8G8;<<<x<p:j7d6`6\6 Y7V7T7#R7+P72O89M8@L8GK8NJ9UI9^H:hG:sF;E;D<C<B<B=B<B<B<B;=>>>u>l=f:`9[:W:S;Q;N; L;(K;/I<6G<=G\C>fB?qA?~@??@>@=@=@=@=@>?>?@@A|AqAh@a<[=V>R>N?L?I?G@%F@,D@3C@:BABAAI@AQ?BZ>Bc=CoE8=E?*VF)VO(WY'Wd&Wr%W$W#W"W"W"W#V#U$UMNuNiN_OVOMPER?S9V3X/Z+[*[(\'\$&\+%\3$]:#]C"]L!]V ^a^n^~^^^]]\[[Q~QpQdR[RRSJTAW;Y5[.^(`$b "c!cd d'd.d6e>eGeQe]ejezeeeedcbbTxUkU`VWVOWFY=\6_0b)d#gjllmm!m)m0m9nBnLnXnenu n n m m l k k jYrYfY\ZTZJ\A_9c1f*i$loru www w# w* w3 w< wGwRw_wowwvvuttt{]m]b^Y^N`EcM]pduWyK~?4)  &3ARdy\PD8,!  &5EWkӂӗөҸUI=0%  '8J]r &2=HRZbiouz !,8CMU]djpuz '2=GPX_ejpuz!-7AJRY_ejotz &1;DLSY_diotz  +5>FMTY_dinu{$.7@GNTY^diov~   '19AHNTY_dkrz~}{yxvuu t s s    * 3 ; B I~ O} T{ Zz `x gw nu vt r p omlkjiii~${-y6w=vDtJsPqVp\nbmjksi}hfecbba```"#$#" ~|z wtq(o0n8l?kEiKhQfXe^cfbo`y_]\[ZYXXXX'((('{%v#s q nki#g,e3c:bA`G_M^T\[[bY kX vV!U!T"S"R#Q#Q$Q$Q$Q#+,,-|,t*o(k%i"f!c"a"_#']#/\#6Z#=Y$CW$JV$PU$WS%_R%hQ&sO&N'M(L(K)K)J)J)K)K)./00w/o.j+e*c'_' \'Z'X($V(+U(2S(9R)@P)FO)MN)TM*\L*eJ+pI+|H,G-F-E.E.E.E.E.E-123|3r3k1e/`-],Y, V,T,R, P,(N-/M-6L-<J-CI-JH.QG.YF/cE0mC0zB1A1A2@2?2?2@2@2@2355y6n5f5a2\0W0T0Q0N0L1J1%H1,G12F19D1@C2GB2OA3W@3`?4k>5x=5<6;6;6:6:6;6;6;6678u8k8c7]6W3S4O4K4 I4F5E5"C5)A5/@56?6=>6D=7L<7U;8^:8i99v897:7:6:5:6:6:697989~:r;h;_:Y9S6N7J8F8 D9A9?9>9&<9-;:4::;9;B8;J7;S6<\52>1>1>1>1>2=2=;<{<n=d=\=U<N:I;E<A=>=<=:>9>#7>*6?15?84?@3@H2@P1@Z0Ae/Ar.B-B-B,B+B,B,B-A-A=>w?k?a@Y?R?I>D?@@K9L3N.P(S$T "U UVV$V,V3W;WDWNWYXfXuXXWWWVUUItJfK\KSKKLDM[6_.b&fjmps vx xyyyz&z/z9zDzPz_zpzzzyxxwj[_[V[L\B`9c0h(l ptw{ ~  (1<IWh{e`\`QaFdPdz͑ͤʹMA5) !1CVk !-8CMU]ciotz (3>HPX^djotz#.8BKRY_ejotz (2<EMSY_dintz",6?GMTY^chntz &08@GNSX]chnt| )2:AHMSX]ciow~}{zyxwxx  #,4;BHNS}X|^{dyjxrv{tsqpnmmlll  ~%|.z6x<wCuHtNsTqYp_nfmnkxjhg e d c c b b b }|| x u r (p 0o 7m >l Dk Ji Oh Ug \e cckbu`_]\[ZYYYY~xtqq oli"g*f2d9c?bE`K_Q]X\_ZhYrW}VTSRQQQQQ ""#w"p!ligfca_&]-\4Z;YAXGVMUTS\RdQnOzNMKJJIIIJ$%&{'q&j%f#b!`^ [YW"U)T0S7Q=PCOJMQLXKaIkH wG F!D"D"C"C#C#C#C"')*v*m*e)`'\%Y#W!U!R!P!N!%M",L"3J"9I"@H"FG#ME#UD$^C$iB%u@&?&>'>'='=(=(='>'*+-r-h-a,\+X(T&Q&N% L%J&H&"G&)E&/D&6C'<A'C@'K?(S>)\=)f<*r;*:+9+8,7,7,8,8,8,,.{/o0e0]/X.S+P*L*I* F*D*B*A*%?*,>+3=+9<+@;,H:,P9-Y8.d7.p6/5/4030202030304//1w2k2b2Z2T1O/K-G.D.A.?.=.;."9/)8//7/660>50F51N41W32b22n13}03/4.4-4-4.4/3/313t4h5^5W4Q4K2F1B2?2<2 938363 43&33-24414;05C05L/6U.6`-7l,7{+7*8)8(8(8)8*7*745q6e7[7T7M6G6B5=6:677 472718/8$.8+-92,99+9A*:I*:S);^(;j';y&<%<$<#<#<$<%;%;6|8m9b9X:Q9J9D9=99:5;2;/<-=,=*=!)=((>/'>6&>>%?G$?P#@["@h!@v @AAAA@@ ?9x:i;^<U<M<G<@<8=4>0@-A*B 'B&C$C#C%"C,!D3 D;DDENEYEeEtEFFFEEDD<s=f>[?R?J?D?=@6A1C,D'F$G !H III"I)J0J8JAJKKUKbKqKKKKKJJI?o@aAWBNBGBAB:C2E-G(I#KMO PPPP%P,Q4Q=QGQRQ_RmR~ Q Q Q Q P POyCjD]DSEKEDE>F6H/J)L$OQSV WXXX X( X0 X9 XC XN XZXhXyXXXWWWVsFdGYHPHHHAI:J2M+P%R UXZ] ` ` ```#`+`4`=`I`U`c`s`___^^^lJ_KUKLLEL=N5P.S'V Y\_b eg ghhhi&i.i8iCiOi]imiihhgfffOZOQOJOAQ8T0W([!^beh knp p qqrs!s(s1s<tHsVsfsyssrqqpaSVSOSEU;X2\*`"dhlo rvyzz {|}~"*5AO_q~~}\XTXIZ?]5a,e#josw { ",8FVh~Y]N_Cb8f.l$qw| #.<L^tSdGhHPW^dioty$.9BKRY_dinty )3=EMSY_dinsy #-7?GNSY^chmsz '09AHMSX]bgms{ !*3;AHMRW\agnu~~}}}} $-4;BGMRW\~b}h{pzyxvutrqpppp'}.|6z<yBwGvLuRsWr]qcokntl~kihgfeeee  ~| ywu!s)q0o6n<lBkGjMiRhXf_egcpbz`_^\\[[[[|vsr q nli#g*f1d7c=bCaI_N^U]\[ cZ mX xW V T S R R Q Q Q }tmjggf c a _ %] ,\ 3[ 9Z ?X EW KVQUYSaRkPvNMLKJIIIIvmfb_^^ [YW U'T.S4Q;PAOGNNLUK^IgHsFEDCBBBBB }!q"h"a!\YWUTQON#L*K0J7I=GCFJERCZBdAp?}>=<;;;;<!#x$l%c%\$W#S QOM KHG E&D-C3B9@@?G>O=X<b:m9{8 7!6!5!5!5!6!6!#&t'h(_(X'S&O$L"I G DB@ ? #> )< /;!6:!=9!D8"L7"U6#_4#k3$y2%1%0%0&/&0&0&1%&(q*e*\*U*O)K(H%D$A$?$ =$;$9$7$&6$,5%34%:3&A2&J1'S0']/(i.)w-),)+*****+*+*,)(|*m,b-Y-Q-L,G+C(?(<(9( 7(5(3(2(#0()/)0/*7.*?-+G,+Q+,[*,g)-u(-'-&.%.%.&.&.'-+x-j._/V/N/H.C-?,;,7,4, 2,0-.--- +-'*.-*.5)/=(/E'0N&0Y%1e$1s#1"2!2!2 2!2"1"1-u/g0\1S1K1E1@0;0603001-1 +1)2(2'2$%3+%32$3:#4C"4L!5W 5c5q666666650q2c3Y4P4I4B3=37314.5+5(6 %7$7"7!8" 8(80879@9I:T:`:n:;;;;::9}2m4`5U6M6F6@6:646.8*9&:#; <===>%>->4>=?G?Q?^?l@|@@@@??>y5i7\8R9J9C9=9791:+<'="?AB CCDD"D)D1D:ECENE[EiEy E E E E E D Dt9e:X;O;G<@<:<4<.>(@#BDFHJ JJKK% K- K6 K@ KJ KV KdKtKKKJJJIn<`=T>K>D>=>7?1@*B$EGILNQ Q Q QQ"Q)Q2R;RFRRR_RoRQQQPPPh@[APAHAAA;B4C-E&H KMPSU X XXYYY%Y-Y6YAYMZZZiY|YYXXWWcDVEMEEE?E7G/I(L"ORUX Z ]_ ` `aab b'b1b;bGbUcdbvbbaa``]HRIJHCH:J2M*P#SWZ] `cfgh ijklm"m*m4m@mNm]momllkkjXMNMHL>N5Q,T$X\`d gknprrs uvwxy#z-z9zGzVyhz|yxxwwTQLQBR8U/Y&^bgk oswz|~ %0>M_sRVGWr2x'  #5I^uیܟܫ $/9CKRY_dinsy*4=EMSY^chmsy $.7@GNSY^chmsy(1:AHNSX\aglsz "+3;BHMRW[afmt}%-5<BGLQV[`gn~w}{zxwvvvuu  '/5}<|A{FyKxPwUv[tasiqqp{nmkjjiiii{ ywv"t)s0q6p<oAmFlKkPjVh\gdeldvca`_^^^]] | wtq omki#h*g1e6d<cAbF`L_R^X]_[hZrX~WVUTTSTT zrli g f db`^%]+\1Z7Y<XBWGVNUTS\ReQoO{NMLKJJJJ~sjd`^] ] ZXV U'S-R3Q8P>O DN JL QK YJ bH mG zF D C B B B B B xlc]YVTTS Q O M "L (K .J 4I :GAFGEODWBaAl?y>=;;:::;sg^XSPNLL JHFE$D*B0A7@=?D=L<T;^9i8v76443344|nc Z S NJHFECA?> =';-:39:8A7I5Q4[3f2s0/.---..x j"_#V#O"J!F CA?= ;976#5)40361>0F/O.Y-d,q+*)( ' ' ( ) t#g$\%S%L%G$B#?!=:7 5310 /&.--3, ;+ C*!L)!V("b&"o%#$###"$"$"$#$$##q%c&Y'P(I'C'?&;$8"5"2"0" .","*")"#(#*'#1&$8%%A$%J#&T"&`!'m '}'((((('~%n'`)V)M*F*A)<(7'4&0&-&+' ('''%'$'!#('"(.!)6 )>*H*R+^+k+{,,,,,++z'j*]+S,J,C,>+9+4*0*+*)+&+#,", ,,-%-,-3.<.E/P/\/i0y000000/v*g,Z-P.H.A.;.6-1-,-'/$/!01 1222"2)31393C4M4Y4g5w5555444r,c.W0M0E0>08030/0)1$2!356 77888&8.969@9K9W:d :t : : 9 9 9 9 8n/_1S2J3B3;36312,3'4!689;= >>>># >* >3 >< ?G ?R?`?o???>>>>i3[4P5G5?59545.5)7#8;<?AC D D DD D'D/D8EBENE[EjE|EDDDDCd6W7L8C8<87818+9%; =@BDG I J KKKK#K+K4K>LILWLfLwKKKJJJ_:R;H;@;:;4;.<'>"ACFIK NPQ QRSSS&S/S9SESRSaSrSRRQQQY>N>E>>>8>0@)B#DGJMP SUWX YZZ[\!\*\4\?\M\[\l\[[ZZYTBJBBB^2c'jpx  &8Kaz7j+p x ,@WnԆԛӫ *4=FMSY^chnsy %.8@GNTY^cgmsz )2:BHNSX]bgls{ #,4<BHMRW[`flt}&.5<BGLQUZ`fmv}|||||  (/6<AFK}O|T{Zy`xgvpuzsqponnnnn~|{y"x)w0u6t;r@qEpJoOmTl[kbijhtfecbaaaaa~yuq omlk$k*i0h6f;e@dEcJaO`V_]]e\oZzYXWVVVVVzrligd ca`_%^+]0[6Z;Y@XEWKVQUXSaRjPvONMLLLLL | p h b _ ]\ ZXWV U&S+R1Q6P;OANGMMKUJ]IgGsFEDCCCCC ti`ZVT S S QONL!K'J,I2H7G=ECDJCQBZ@d?p>~=<;::::|nbZTPMKK J IGED#B(A .@ 3? 9> @= G< O: X9 c8 o6 ~5 4 3 2 2 2 2 wi^UOJGECCB @ ? = < $; *9 0877=6E5M3W2b1n/}.-,+++,rdYQKFB?><; :875!4'3-230:/B.K-T+_*l){('&%%%&~n`VMGB>:8754 20/-#,*+0*7)?(H'R&]$j#y"!   zj]S J D >:7420. ,*)' &&%-$5#="F!P [hwwg Z!P"H"A";"7!3 0-+(&%#!!$ *2:C M!Y!f!u"""""!!s d"W#M$E%>$9$4#0",")!&!$!"! !!""!"(#/#8$A$K%W%d&s&&&&&%%p"a$T&J&B'<&6&1%-%)$&$"%%& &''''%(-(5)>)I)U*b*q*** * * *)l$]&Q(H(@)9(4(/(+'''"()*++ ,,,-#-*-2.<.F .R ._ /n / / / .. . .h'Z)N*E+=+7+1*-*)*$* +-./1 222 2 2' 2/ 38 3B 3N3[4j4{333332d*V,K-B-:-4-/,+,&,"-/1246 8 8 888$8,848>9J9W9e9w988887_-R.H/?08/2/-/)/$013579 ;= >>>>!>(>1?;?F?S?a?s?>>===Z0N2D2<25201+1&2 468;= ?AC CDEEE$E-F6FBFNF]FnEEDDCCU4J5A59534.4(5"7:<?A DFHI J KLMN N(N2M=NJNXMiM}LLKKJP8F8=87817*9$;=@CF IKNPQR STUVW#W,W8WDWRVcVwVUTSSK<B<;;5;-<&?BEHK OQTWXZ[\ ]_`bb&b1b>aLa]ap``_^]G@??:?1@)C!FJNQ UX[^acdegh jlno o*o6nEnUnhmmlkjDD>C5D+G#KOTX\`dgkmoprtuw y|~".=~M}a}w|{zyCG9I/L%PU[`ejnrvy|~ %3DWm=N2Q(V\bhnty~ ):Mb{6W,\!bipw~ 0CXp0b%ipx  %8Ne~͖̩ %/8@HNTY^chmsz )3;BHNSX]bgmt{ $,5<CHNRW\agmt}'/6<BGLQUZ`fnv !(06<AFKOTZ`g~o|zzxwutsttt#*}0{6z;x@wEuItNsTqZpanimskihgfeffg|vt rqpp$n*m0k5j:i?hDgIeNdTc[ac`m^y][ZYYYZZ{snjgedccb%a*_0^5]:\>[DYIXOWVV^ThSsQPONNNNO{phb_][ YXWW V%U*S0R4Q9P?ODNKMRKZJcIoG|FEEDDDEq f ^ Y UTRP ONML K&J+I0H5G:F@EFCNBVA_@k>x=<<<;;; x j_WQM K JI H FEDC!B&A+?1>6=<<C;J:R9\8h6u5443333 qdYQKGDB A A ?><;:"9(8-72695?4G3P1Z0f/s.-,++++}l_TLFB><:: : 8 654 2 $1 )0 // 6. =- E, N+ Y) e( s' & % $ # # # xh[QHB=975332 0 / - , !+ '* -)4(;'D%N$Y#e!s sdWME?:520.-, +)(&%$$*#1"9!B KVcqp`TJB<62/,*(&% #" !'.6?ITapl]QG?94/+(&$"  $,4=GR_niZNE= 61-)%#  ")1:EP ] l | eWL!B!:!4!/!* &#    !!"""&#/#7 #A $M $Y $g $x$$$$##bT!I#@#8#2#,#("$!!!!!#$%& ' ' ' '# '+ (4(>(I(U)d)t))((('^"Q$F%=%5%/%*$&$"##$%&() , ,,,,!,(-0-:-E-R.`.q---,,,Z$M&C':'3'-'(&$&!&&')+, . 0 11222%2-263B3N3]3m322111V'J)?*7*0*+)'(#()*,.0 1 45 67888"8*939>9J9Y9i9}88776Q+F,<,4,.,*+%+ ,-/13 5 7:; < =>?@@%@/@:@F@T@e?x?>>==M.B/9/2/-.(."/0257 : <>ABC D FGHH!H*H5HAHOH`GsGFEEDH2>26201+1%2469< ?BDFHJKL NOQRR%R0R<QJQZQmPONMMC6;645/4'5!8;>A DGJMOQSTUW Y[]]]*]6\D\T[g[~ZYXW?98938+9#<?CG JNQTWZ\]_`bd fhkk#j.j<jMi_hugfed==7<.=%@DIM QUZ]`cfhjkmoqt vy{{'z5yExYxmwvut_C^H]N[UZ]XgWrUTSRQQRR|qid`^\ [[ZZY%W*V/U4T8S=RCPIOPNXMbKmJzIHGGFGG~pf^YVSRP OONN M%L*J.I3H8G>FDEKDSC]Ah@u?>====>uh]UPLJIG FEEDC B%A*@/?4>:=@;G:O9Y8d7q6544445~m ` V N H D B@?> =<;;:!9%7*60554<3C2L1U0`/m.}-,,,,,w g ZPIC> ; 9 8 76 54321"0'/,.2-8,@+I*R)](k'z&%%%%%r bVLD>9631 0 0 / .,+*)#()'/&5%=$F#P"\!i ym^RH@:51.,** ) ( ' %$# " &! , 3 ; D O [ i y      iZNE=71-*(&$## "     # * 2:DP\j{eWKB:4/*'$"   !(09CNZiy    bTI?71,($! &-6ALW e u    _QF=5/*%"  # * 3 < G S aq\NC:3,'#      '/9CP^nXKA80*%!   !!!$","5"@#M#Z#k#~#""!!UH> 5 . ( #   " $ % %&&&!')'2'='I(W(g'{''&&%Q E!;"2","&!"!   "# % &( ) +,,,,&-/-9-F-T-d-w,,++*M"A$8$0$)$$#!"""#$& ( *,. / 02333"3+363B3P3`3s22100I%>&4'-'(&#%$%&(* , .0245 7 8::::':2:>:L:\:o98876D):)1)+)&("'()+. 0 2579;<> ? ACCC#C.C9CGBWBjA@?>>?,6,/,*+%*+-/2 58:<?ACEFH JLMMM(M4LBLQKdK{JIHG;03/-/(-"/147 :=@CFHJLNOQS UXYX"X.W<WKV^VsUTRR8312,1%258< @DGJMPSUWYZ\^a dfgf'f4eDdWdkba`^5705(7 :=B FJOSVY\_adegilnq tww v-v=uOtcs{rpo5:+;"?CH MRW\`dhknqsuwz| $3E[r/@%DIN TZafkoty} );Pg)INT[bipw} 0E\t"T[bjs{ &:Qhˁʖ %.6>DJOTY^cipx  (07>DINSW]biqz "*18=CHLQV\bir}zx $+17<AFKPU[bk~u|zxwvurnl %~+|1z6y;w@vDuIsOrUp\odmnlzjhgfeda`}wspoooom%k*i0h4g9f>eCcHbNaU_^^g\s[YXWWWVTulhda` ____]%\*[/Y3X8W=VCUISPRXQaPmN{MLKJJJJrg_ZWUSR RRRQO$N)M.L3K8J=ICHJFRE\DgCuBA@@?@@tg]UOLJHG G FFFED$C)B-A3?8>>=E<N;W:b9o8766666|k^TMGCA?>= =<<<:9$8)7.635:4A3I2S1^0k/{.----.sdWMF@;87654 44321 0$/)./-6,=+E*O)Z(g'w&&%%%&m^ R H @ : 6 2 0..- , ,+*)( '%&+%2$9#B"K"W!d sh Y M C<61 - * ( ' && %$$"!!" (.6?ITapc UI@82-)&# "    %+3<FR_n_QF<5/*&"          " ) 1 : E Q _ n  \NC:2,'#        ( 0; F Q ^ m   XK@70)%!      % - 6 A MZj|UI>5-'"       "*3>JXgzRF;2+%!   '0;GUdwOC90)#    $-8DRbuL@6-&!      !!"!*!5"A"O"_"r!! H=3+$   !" $ &&&''''2'>'K'\'n&&%$#D90(#  !"$&(* + ----$...:.H-X-j-,+*)@ 6!-!&!! ! " $&(+-/0 2 4555 5*565C5S4f4|3210<#2$*$$# "!!#% ' )+.02468: < >>>>&>1>?=N=a@BD F IIH!H,G:GIF[EqDCBA4*,*'("'(*- 0 369<>ACFHJLNP STTS'S4SCRUQjPOML0-+,&+,.2 59=@CFILNQSUWY\_ bccb,a<`N_b^{\[Y/0*/"037;?DHLORUX[]`bdfimp tts%r4rEpYoqmkj.3%58<AGLQUY]aehkmortwz~ +=Rg~): =BHNTZ`dinrvz} !3G^w#CHN U\cjqv{ (<RjNT \dlt|1H_vȎ  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗 :`˺2ƷPh{ĵ˳Ѱխ٫ܪި᧙㥗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗  9` ˻0ƸOg{ĵ˲ѯխ٫ܩާख़㡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘䡘  9` ˼.ŹMfzŵ˱Ѯլ٪ܧޥ࢚➙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙㞙  9` ˾,ŹLg{Ŵ̰ѭի٨ۥݣߟᛙ⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙⛙  9 ` ˿+ĺLg{Ŵ̰Ѭթئۣݠޝᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚᘚ  8 _ )¹Mh{Ƴ̯Ѫէؤڡܞݚޕ  8 _ )Ni|Ʋ̭ѩԥעٟڛܗݓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓޓ  7 ^ ǿ+Pj|ư̫Чԣ֟؜٘ڔܐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ  7 ^ ľ-Qj|Ʈ̩ХӠ՝ّ֙ؕڎێێێێێێێێێێێێێێێێ  6 _ 0Sl}Ǭ˧ϢўӚՖ֓׏؋ًًًًًًًًًًًًًًًً  5 b 3Um}ƪˤΟЛҗӓԐՌ։׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉׉  7 e 8Xn}Ƨɡ̜ΗϓѐҍӊӇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇԇ  : h>[o}ģǝʘ˓͐΍ϊχЅхххххххххххххххх  > mD^p}ßřǔɐʍˊˈ̅̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓̓  B rI`p}ÕđƍNJLjȆȄɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂɂ H xGbq|ÊĈĆńŃŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁŁſ% N p9Xlz€€€€€€€€€€€€€€€€€1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ1 S(|̨Dƥ]£pùƷʵͳбҰԯ֮ح٬ڬڬڬڬڬڬڬڬڬڬڬڬڬڬ0 S'|̨Dƥ]¤pùǷʵγбӰկ׭٭ګګګګګګګګګګګګګګګ0S&|˩CƦ\¤o~ùȶ̳ϱҰծ׭٬ܫݧۧۧۧۧۧۧۧۧۧۧۧۧۧۧ0S%|˩BƧ[¥n~ĸɵͲѰԮ׭ګܩߨߣܣܣܣܣܣܣܣܣܣܣܣܣܣܣ0S$|˩AƧZ¥m}ķɴαӯ֭ګܩߧ⤑ࠎܠܠܠܠܠܠܠܠܠܠܠܠܠܠ0S#|˪AƨY¦m}ŷʳϰԮثܩߧ⥗栖ݜݜݜݜݜݜݜݜݜݜݜݜݜݜ 0S"|ʪ@ƨX¦l|Ŷ˳аխڪݧच⟘㝚ᙗݙݙݙݙݙݙݙݙݙݙݙݙݙݙ 0S!|ʫ?ƩW§k{Ŷ˲ѯ֫ڧݤߠ◚ᗜޗޗޗޗޗޗޗޗޗޗޗޗޗޗ /R |ʫ>ƪV¨kyŶ̲Ѭ֨٤ܡݜޗޒޒޒޒޒޒޒޒޒޒޒޒޒޒ /R|ʬ<ƫU¨jwŵ̯Ҫ֥ءڝۙݔސގݎݎݎݎݎݎݎݎݎݎݎݎݎݎ /R|˭:ƬT©is~Ų̬ѧբמؚږۑ܍܋܋܋܋܋܋܋܋܋܋܋܋܋܋܋ /R|˯8ƭR«fo~ưͪѤӟ՛ًُ֗ؓڈڈڈڈڈڈڈڈڈڈڈڈڈڈڈ .Q|˰5ǯOð`l~ǭ̧ϡҜӘԔՐ֍׉؇؇؇؇؇؇؇؇؇؇؇؇؇؇؇ .Q|̳0DZLĸVnǩˣΞϙѕґӎԋԈՅՅՅՅՅՅՅՅՅՅՅՅՅՅՅ  -P|̶*ȷDYpªǦʠ͖̚ΒϏЌщч҅҅҅҅҅҅҅҅҅҅҅҅҅҅҅  ,O{ͼ"¼<^r¦Ţǜɗʓː͈̍͋Ά΄ττττττττττττττ  + N zFbtÞřǔȐɎʋˉˇ̅̃̃̃̃̃̃̃̃̃̃̃̃̃̃̃  ) L ~%OfuÖőƎNjljȇɆɄɂʂʂʂʂʂʂʂʂʂʂʂʂʂʂ ( R -WhuÌĊňņƄƃƁǁǁǁǁǁǁǁǁǁǁǁǁǁǁ - Y +Pgu~ˆ†…ÃÂÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ 4 [v%E]ny~~~~~~~~~~~~~~~:Uh-x@Vgs~x{|ywÂu„t…srrqqqqqqqqqqqqqqq'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~'*F6iާBǛběr›úƸȷʶ̵ʹϳгѲѰ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~Ѱ~')F5iިAǜaĜq›~ĹǷʵ̴γвұӱԮԬҬҬҬҬҬҬҬҬҬҬҬҬ'(F4jݨ@ǝ`Ĝqœ|ºŸɶ̴ϲѱӰկ֯תէӧӧӧӧӧӧӧӧӧӧӧӧ'(F3jݩ?ǝ`ĝpž{¹Ƿʵγѱӯ֮ح٪٥դԤԤԤԤԤԤԤԤԤԤԤԤ''F2jݩ>Ǟ_ĝoyøȶ̳бӯ֮ج۫ܦڢ֠ԠԠԠԠԠԠԠԠԠԠԠԠ&&F1jݪ=Ǟ^ĝoxĸɵͲѰծج۪ިߢڞ֜ԜԜԜԜԜԜԜԜԜԜԜԜ&&F0jݪ<Ǟ]ĞnvķʴϱӮ׬۪ި⤐ۚיՙՙՙՙՙՙՙՙՙՙՙՙ&%F0jܫ;ǟ]ğlt~ŷʳаխ٪ި⥗柕ۗזՖՖՖՖՖՖՖՖՖՖՖՖ&%F/jܫ:ǟ\Ġjs|Ŷ˳ѯ֬ۨߤ៙㜚ᗖܔؓ֓֓֓֓֓֓֓֓֓֓֓֓ &$F.jܫ:Ǡ\ġhqzŶ̲Ѯשۤޠᖛᕛݒؑבבבבבבבבבבבב &#F-jܬ9Ǡ[ģfnxŶ̰Ҫצڡܛޖߑߑݏُ׏׏׏׏׏׏׏׏׏׏׏׏ &"E,jܭ7ǡZťc©kuų̭ҧ֢؝ژےݎ݌܍ٌ׌׌׌׌׌׌׌׌׌׌׌׌ %"E+jۭ6ǢYŧ_­fp~ưͪѤԞُ֙ؔڋۈۈ؈׈׈׈׈׈׈׈׈׈׈׈׈ % E*jۯ4ȤUƫXó_n~Ǭ̦РқԖՑ֍׉؆؄ׄքքքքքքքքքքքք %E'j۰1ȨMDzNXpǩˢΝЗђҎӋԈՄՂՁՁՁՁՁՁՁՁՁՁՁՁՁ $D%jڲ.ʯ@Ƚ=]r©ƥɟ˙͔ΐόЉц҄ҁҀҀҀҀҀҀҀҀҀҀҀҀҀ $D!jڴ)ͼ(CasšǛɖʑˎ͈̋Ά΃΁πππππππππππππ #Ci#LeuÝŗƓǏȌɉʇʅʃˁˀˀˀˀˀˀˀˀˀˀˀˀˀ "Bh /Thv”ÐčŊƈƇƅǃǁǀǀǀǀǀǀǀǀǀǀǀǀǀ @ _ 4Zkw‰ˆÆÅÃĂāāāāāāāāāāāāā  = c3Sgt}€€€€€€€€€€€€€  Aax2L_nx|}|{zyxxxxxxxxxxxxxx " BZ(j9wI[i|qyvvzt}rqȁpǃoDžnƆmƈlŊlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋlŋ &=N/[?gNq{[yveqlnrkwizg~fՀeԂdԄcӆbӉaҋaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌaҌ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ #1:>YKyٚ\ȕrŕ}×»ĺŹƹǸȸ~ɷ}ʷ|ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ʴ{ "0:=YJy؛[Ǖrŗ{ØúŹǸɷʶ˶~̵}̳|ͯ|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯|˯| !/:}֨DɨOǰSŸYm}Ƭ˥ϟјӒՌ׈ׅ׃քԄффффффффффф%91Z<~׬;ʭDɹEYo~ƨʡ͛ϕЏҊӆԃԁԀӀррррррррррр$9/Z9~ٴ/̸2½@]q~Ťȝʗ̒΍ωЅЂр~}}}}}}}}}}}}"9-Z0z!Hbs~àƙȔɏʋˈ̅͂̀~||||||||||||8)Z$t*Oet›ÖőƍNJȇɅɂʀ~|||||||||||| 7%Zh 2VhuÌĉņńƃƁ}}}}}}}}}}}}6P f6Vjv~†„ƒÁÀ~~~~~~~~~~~~ 4 Eh7Ser{~}||||||||||||  ' Ie%x9O`mux}{z}yĀwÁvƒu„tsrqqqqqqqqqqqq  ,H\1kBvP~~_{iwntsqwpzn}mĺk̓j̅i̇hˉgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌgʌ -A(P9\Hf|Tnw^uqezmk~jphufxe{c~bځaك`م`؇^؊^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍^֍ (7.C=N|KWwV_o]ehbjdinaoq_ss]wu\{v[~wZxYyXzXzW{V|V|V|V|V|V|V|V|V|V|V|V|'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'6/DJRe_~ܓnϒxƒĒÑ~}¼{¼züyøy¸y¸y¸y¸y¸y¸y¸y¸y¸y¸y'5/DJQe^~۔mϒwŒēÒ¼~¼}û{Ļzĺyĵyõyõyõyõyõyõyõyõyõyõy&4/CJPe]ڕi͔tŔ~ĕ•ûĺ~ź}ƺ{ƹzƵzƱzızızızızızızızızızız%4/BJOf\ږf̕qŕ|Ė—úŹƹǸ}ȸ|ɵzɰ{Ǭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{Ŭ{$3/AJOf[٘c̖oŖy׺ŹǸɷʶ}˶|˰{ʬ|Ȩ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}Ũ}$2/AKNgYٙa˗mŗwÙĹǸɶ˵ʹ~α|ά}˨}ɥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~ƥ~#2/@KMgWٚ^˘jřtÚ}ºŸȶ˴γвѬ~Ϩ~̤ɡơơơơơơơơơơ#1/?KMgUٜ\ʙhŚrÜzùǷ˴βѱӬӧФ͠ʞƞƞƞƞƞƞƞƞƞƞ"1/?KLgSٝYʛeŜoÝxĸɵͲѰծקԣџ͜ʚǚǚǚǚǚǚǚǚǚǚ"0/>KKhQٟVʜbŝlßu~Ʒ˳ϰԭ٨ڢ՞ћΙʗǗǗǗǗǗǗǗǗǗǗ"0/>KKhO٠Sʞ_Ɵiár|ǵͲҮتߢܜ֙җΕʔǔǔǔǔǔǔǔǔǔǔ!//=KJhM٢Pˠ\ơeänx¸ȴΰիݥ曑ݖהӒϑːȐȐȐȐȐȐȐȐȐȐ!//PUQhS{WԞ_ʛkśuÛ~ŷʴϲҨϣˠǝś™%4%C>NUNhPzRա[˞fƝqÞz¹ǵΰԩ֡Н˚șŗ–%4%B>LULgMyNդV̡aơlâv÷ʲҬؚ۠ї̕ȔœÒ$3%B>JTJfJxK֨Qͦ[ǥeħpzö˯֥族ړґ͐ɐƏÏ$3%A>HTGfGwG٭KϬTȬ^Ưh±s}˥Քޏڍӌ΋ʋNjČ$2%A>FSDdCuB۴DҵJ˷Sʾ_n|©˜ҍ؆هӇχˇȈňˆˆˆˆˆˆˆˆˆ#2%@>CRAc?s=޾;?J]o}ãɖΊӁՁ҂ς̃ɄƅÅÅÅÅÅÅÅÅÅ#1%?>@Q>;O7]3j1u)8Ocsďȇʀ|zyz|}}}}}}}}}}!.%<>6L0Y,b'm&jNCdTH^YL[_OXdRUiTSmURqWPtXOxYN{ZM[L\K]I^H_H_H_H_H_H_H_H_H_H_$y3"p;*hB1aJ6\Q;WW?S]BPbDNgFLlHJpIItJHwKF{LEMDNCNBOAPAPAPAPAPAPAPAPAPAP' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K/YCdTkcrq|}ㆄނ}zxwutrqppopqqqqqqqqq' ;K0YCcTidprz~≂܅؂}{ywvtsrqqsttttttttt' ;K0YD`UfdmswጀۈՅ҂}{ywvutsuuvvvvvvvvv' ;K0YD^Udejts}ًԈЅ͂}{yxvuvwwxxxxxxxxx' ;J0XD\Uaegtpߏz؍ҋ·˄ȁ}{ywvxxxyyyyyyyyy' ;J1UDYU^edtlޑv؏э͊ɇƄā~{ywxxyyzzzzzzzzz& ;I1SDWU[eathޓr֑{ЏˍNJĆÃ{ywxyyz{{{{{{{{{& :I1QDTTXd]tcޖm֓wБʏƍɄ{yxyz{{|||||||||& 9H1ODRTUcZs_ޙi֖rϓ|ʑŐË{yz{{|}}}}}}}}}}& 9G1MCOSRcVr[ߝdךmЗwʔŒŽ{ijzī{¦|}~& 8G1KBMRPbSqW^؞gЛqʘ{ŕ’ŷ|ɫ|Ǥ}à~& 8F2IBJQM`PoT}Xڤbҡk˝uƚ˜¶ˬ}΢ɝĚ& 7F2GAHPJ_LmP{Tܫ\ԩeΦoȣzßİΠљʖŔ& 7E2E@FOG]IkLxOߴUٵ_ӵiεv|ġΔҐˏƎŽ& 6D1C?CND[EhHtL~Q[kƽqxÔ͉҇̈ljÉ& 6B1@>@L@YAdDoIwR|bhnvπ̂ǃĄ& 5?0==hOCbUG]ZKY`MVePSjQQnSOrTNvUL{VKWIXHYGZF[E\E\E\E\E\E\E\E\E\ ~)u5#l<*dC/^J4XP7TV:Q[Kd@JhAHlBFpCEtDDxEB}FAG@H?I=J=J=J=J=J=J=J=J=J| q$g,_5Y=!TE&OK)LR,HW/F]0Da2Bf3@j5?n6=s7KKPXUdZpa{iޚsו~Ўʅ}xy{}~ 4B$C0E=HILUQaWl]wcm֞y˕~|~ 4A#A/B;EGISN^ShZra{ۯn̦v~ 4?"?.@:BEFPKZRcYk߽drѶlĬsz4=!<-=8@BDLIUQ\Zaboɼipw4; 9+:5=?BGHNQR[Y`mgmt}x|386)82:;?AGETEWX^kd~krzvorwz}~353'4/65=8H8MEVV\ib{howxnhiosvxz{{{{{{{{300#/)2-;,@:HLN\Vl]zem}vsălgefknqstttttttt1-*)"-!3,XFeOpXzzdsmmvhdЈ`ϒ^Ν\ͩ[ιYȚZʜ\ɝ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ^ɞ  "'-96J?XHcRmz\urd{mmhud~`؆]֏Z՘XԢWԮVԼV͐VђWѓWѓWѓWѓWѓWѓWѓWѓ   #*.;8IBUL_zVgs^mkdrflwbtz_|}\ZߋWޓUݜTܥRܯRܻQ̅RڅRڅRڅRڅRڅRڅRڅRڅ  $*09:EFOzQXrX^k^ceeh`lk]rnZypWrUtSvQwPxNyMzMzLzLzLzLzLzLzLzLzظ '(35??yJGpQNiWSb]W^d[Zj^Wp`TvbR|dPeNgLhKiJjIkHlGlGlGlGlGlGlGlGlݯż *#~6-vA6mHk2CE@K=P;U9Y7^!5b"4g#2l$1r%/w&.}'-(+)+)+)+)+)+)+)+)+)vs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvs r1 qCqP&uY3ub?sjIptSn~[kaiggkencqbsau`v^w^x]y\z[z]z^y`y`y`y`y`y`y`y`yvst1 rBtO'xX3y`?wiJsqTq|\nckiimgqetdvbxay`{_|^}]}]}_}`|b}b}b}b}b}b}b}b}wtu1 sBwM'{V4|_@zgKwoUsz^qenkkpisgweyd{b}a~`_ŀ^Ё_ڀaހb߀c߁d߁d߁d߁d߁d߁d߁d߁xuv1 tBzL'U4]@~eLznVvw_tfpmmrkviyg|e~cba`DŽ_ӄaڄc݃d܄e܄e܄e܄e܄e܄e܄e܄e܄yvw0 vB~K'S4\@dLlVzt`whsoptmyk|hfecbaɇaՇdڇeڈfوgوgوgوgوgوgوgوgوzxy0 xAI'R3Z@bLiW~qa{{iwqswp|mjhfdcb΋d֋f֋g֌h֌i֌i֌i֌i֌i֌i֌i֌i֌{yz0 |?H&P3X@_LgWnaxj{rwys~oljgedďdҏgӏhӐjӐkӐlӐlӏlӏlӏlӏlӏlӏlӏ|z{0 >F&N2V?]KdVkask~s{zvrnkhfeʓhѓjДkДlДmДnѓnѓnѓnѓnѓnѓnѓnѓ}{|/ <E%M1S>YJ`Uh`pjyt|zuqmiggΗk͘l͘n͘o͘pΗqΖqϖqϖqϖqϖqϖqϖqϖ~|~/ ;C$K0P(B2G;MDTM[UܰeaΨlqßt|§åţƢȟȟȟȟȟȟȟȟ- 49<&@/E8K?SF\MӶb`ƭipqy¨æŤƢȠȟȟȟȟȟȟȟ+ 279$=,B3I9R>XL̺`_gon~v~~¨æŤƢȠȟȟȟȟȟȟȟ* 146!:(@-H1Q7VK^]enl}s{ytwz§|å}ţ~ơȟȟȟȟȟȟȟȟ( 1236"=&G&L5TI\[cljzqywpln§ræuĤwƢxǡzȟzɞzɞzɞzɞzɞzɞzɞ& /./2:DJ3RGZYaigxnvyohdeŤjţmƢpǡrȟtɝuʝuʝuʝuʝuʝuʝuʝ$ + )),7AI0QDXV_fetl|tqib^]ɞbȟfȟiɞkʝn˛n˛n˛n˛n˛n˛n˛n˛#' " $ 0=$F4NDVR]acokztsk~bȌ\ȜYȱWΖ[͘^̙a̙d͙g͘g͗g͗g͗g͗g͗g͗g͗!  .:)C9JHPVWb_lvhulr}c~\،W؝TװT͌UӏWґZѓ\ѓ_ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ`ѓ  ,7.@=HJOVV`v^ilepdpw^||YVޗSݦQܸQԄSڇT؉V׊X֋Y֋Y֋Y֋Y֋Y֋Y֋Y֋ ٿ ,!70@>HJPTwW]m]defj_pnZzrVvSyQ{O|M|M|P|QRށSށSށSށSށSށSށSށ ۷ ,#71A=IGxQPnWWe^\`fa[oeVxhSkPmNoLqJrIrHrKrNsNtNtNtNtNtNtNt ެ˺!.#9/B9wJBmPIeVN_^SZeVUmZRu\O~_LaJbHdFeEfDgCgEgFgFgFgFgFgFgFgʹ $0 ~;*tB2kH9cN?]UCX]GSdJPkMMrOJyQGSETCVAW@X?Y>Z>Z=Z=Z=Z=Z=Z=Z=Zҭ &|1q8"h>)`E/ZL3TS7PZ:L`Fm@DtBA{C?E=F;G:I9J8J7K7K7K7K7K7K7K7K w# m*d1\8U@"PH&LO)HU+D[-Ba/?g1=m2;s39z5765738291:0;0;0;0;0;0;0;0;| of^! V)P2K:FABH?N5D2I0N.S,X*])c'i%o$w"~!hd#_/^@cKgT%h]/fg9drAb}H`N]R[VZYX[W]V_U`TaTbScRcRcScTcVbWcWcWcWcWcWcWcie#`._@fIjS%k\0ie:gpBd{IbO_T]X[[Z]X_WaVbUdUeTeSfSfUfVeXeYfYfYfYfYfYfYfjf"a.`?iHmQ&n[0ld:inCgyKdQaV_Z]][`ZbYdXeWgVhUhTiUiWhYhZi[i[i[i[i[i[i[ijg"b.c>lFqP&rY1pb;lkDivLgRdXa\_`]b[eZgYhXiWjVkUlWlYk[k\l]l]l]l]l]l]l]lkh!c-g<pEtN&vW1t`;piEmsMj~TfZc^ab_e]h\jZlYmXnWoWoYo\n]o^p_p_p_p_p_p_p_pli!e-k:tCyL&zU1y]\IdSk]vfoxwr~mjhhЌkՍmՍo֌p֋q؊qىrڇrڇrڇrڇrڇrڇrڇspu&, 6@F'L1R;YE`OhYߎscՆ}nxxsomlȑnґpӐrԏsՍt֌t؊uىuىuىuىuىuىuىtqx$+ 5>C$I.P7VA]JߝgTԕobˍxnÅyyurqsДtђvґwӏwՍw֌x؊x؊x؊x؊x؊x؊x؊ur{#) 4<A"F*M3T<[DףcS̚lb“un~y{xvwϖyДzђzӐzԏzՍz׋z׋z׋z׋z׋z׋z׋us}!) 49>D&J.R5ܯYAϨaRŠiarnzy~|}͗~ϕ~Г~ґ~ӏ}Ս}֋}֋}֋}֋}֋}֋}֋vt ( 37;A"H(P.ԴV@ɭ_Qg`omwx˘ΖДҒӐԎ֌֌֌֌֌֌֌wt'2 48=F!ܿL,ιT?ñ]Pe_lltw|}zǘ|Ζ}Д~ҒӐԎ֌֌֌֌֌֌֌xu&/ 04:DH+ȽS=[Nc]jjqvzytqØsϖvДxґyӐzՎ{֌{֌{֌{֌{֌{֌{֌xv%+ , /6<G)Q;YLa[hhotw~yqlikДnђqґsԏuՍv֋v֋v֋v֋v֋v֋v֋yx#&%(07E'O9WJ_Xfemqu{z~qjebcґgӐjԏmՍn֌p؊p؊p؊p؊p؊p؊p؊{|! $5C$M6UG]Udbkm{svr|~jc^[[Ս_Սc֌f׋h؊jوjوjوjوjوjوjو|%6A!K3SCZQb]~igtqpk{xd~]XVUۆXڇ\ڇ_ڇaۆcۅcۅcۅcۅcۅcۅcۅ~ھ %5@!I/R>YK`Wvhampiezp^̆uX̕yȚ{Qͼ|P|SU߀XށZށ\߁\߁\߁\߁\߁\߁\߁ ۵ % 3>%G2N?UIv]Smf[eoa^zgX܆kSܕoPݦqM޻rMqNtPwRxSyUzUzUzUzUzUzUz ݫ͸ % 3='F3N>vUGl[NdcU]mZXw^SbNeJgGiFiHiKjLmNoOpOpOpOpOpOpOp б '4>'G2vN;lTBdZH]bMWkQRuUMXHZE\B^A_@`C`G_HaIcIcIcIcIcIcIcԩµ )5~@%tF-kL5cR:\Y?V`CPhGLqJG{LCN@P>R=T;U;UA;C9E8F6G5H5I4I7I7I7I7I7I7I7Iɫ~u' l/d7\>VE"PK%KR(FX+A_->g/;o18x364361708/:.;.;-<-<-<-<-<-<-<yne^' W0Q7K>FEAL=R9X6_!4f"1n$/w%-&+())(*'+&,&-&-&-&-&-&-&-}ui _WPI&D. ?6 ;= 7C3I0O.U,[*b'i%r#{!|peZQ IC=8&4-03-9*>'C%I #N !T Z a i r |  \W&Q2N<WE[N\X"[c+Yo2Wz8T=RAPEOGNIMKLLKMJNIOIPHPHPIPKPMOOPOPOPOPOPOPOP\X&R2Q:ZC_M_W#^a+\m3Yy:W?TCRGPIOKNMMOLPKQKRJRISJSKSMRORPSQSQSQSQSQSQS]Y&S1T9]BbKbU#`_,_k4\w;Y@VETHRKQNPOOQNRMSLTKUKULUMUPTQURVSVSVSVSVSVSV^Z%T1X7a@eIfS#d]-bh5_t<\BYGVKTNSPQRPTOUNVMWMXLXNXPXSXTYUYUYUYUYUYUYUY_[%U0\4e=jGkQ$iZ-fd6cp=_|C\IYMWPUSSURWQYPZO[N[O\Q[T[U\V]X]X]X]X]X]X]X]`\$V/`2j;oDpN#oW-ka6gl>cxE`K\OZSWVVYT[S\Q^P_P_R_U_W`XaYb[b[b[b[b[b[b[ba]#Z-e/o8tAvK#uT-q]6lg?hsFdL`R]VZYX\V_T`SbRcScUcXdZe\f]f^f^f^f^f^f^f^fb^#^*i-t5z>|H"{Q,xZ6sc?mmGizNdT`X]\Z`XbVeUfTgVgZg\i]j_j`jajajajajajajajc`"b'n*y2<F!O+X5{`>uiGotNjUf[b__c\fZiYjXkZk]m_naobocndndmdmdmdmdmdmda"f%r'~0 ;EM)U3^=}fFvpNr|Um\hbdfaj_m]o]p^p`rbsdsesfrgqgpgpgpgpgpgpeb!i#w%/ 9CL&S0[:cDlMywUt]nciifncqatauavdwfwhwivjujsksksksksksksfc!m {#. 8AJ#Q-Y7`AiJ߁tSz~]teolkqhufxeze{h{j{kzlxmwmvnunununununugd p~", 7@H N)U3]<ݏfGӈoSˁy^{funqtnxk|j~jl~m}o|pzpypwqwqwqwqwqwqwhd s +5>DK%R-ߝZ7ӕcFʎlSÇu^~g{owuszp~ooʂpށq߀r~s|szsysxsxsxsxsxsxifv*4 ;AH O'آV6̚`EÓiRr^zgo}vy|vttńu݃vށvw}w{vzvyvyvyvyvyvyiix(2 7=DݭK$ЦT5Ɵ^DfRo]wgow~}{zyz܄z݂z߀z~z|yzyyyyyyyyyyyyjk{&03 9AֱG#ʫR4\CdQl\tf}ov}ۅ݃ށ~}}}{|z|z|z|z|z|zkm~$,/4 ݺ:еF!ůQ2ZBbOj[reznv||ywׅx݃zށz{}|{|z|z|z|z|z|zkp"&)/ֿ6ʺD O1X@`NgZodwmu{ztqoхq݃s߁u~v}w{wzwzwzwzwzwzls !&4 ľBM/V>^LeWmbuk~ryyr~mig̓iނl߀o~p|rzryryryryryrymv2 @K,T<\IcUk_rhy{orvk{fb`ʀbe~h|j{lymxmxmxmxmxmxn{ڻ / =I)R8ZFaQh[zpdrykkqdv_z[|Y|Z{^{azcyfwfwfwfwfwfwfwp ٳ Ͼ ,;F&P5XA_M|gVso^kwedk^pYsUuTuSvWvZv\u_t`t`t`t`t`t`tr ٩ε )7D!M0U<}]GtePlmWev^^ācYÎhTÝkQîlOmNmPoSpUpXpYpYpYpYpYpYpwޠϮĹ )7BL)T5u\?mdHelO_vTYҁYTю]Pѝ`MҰbKbJbKfMhOiQiRiRiRiRiRiRi ҦIJ * 7B}J)tQ3kY:daA^kGXuKSOOSKUIWGWFWFYG\I^J`K`K`K`K`K`K`ٞǬ , 9|AsI'jP/bW5\_:Vh?RqBM|FIIFKCM@N?O>NBOCQDSETETETETETET˦ . y7p?hF"`M(ZT-T\1Oe5Km8Gw;C=??D>F>F>F>F>F>FП{t* l3d;]CWJ QQ$LX'H`*Dh,@q.<{192543617/8.9-919393939393939}vme$^- X6R=LEHLCS?Z>>>=>=?>>@>C=D>F?F?F?F?F?F?P K*E5J8M=QHRRQ^Oj%Mw+J/H3F6D8C:B@?@@?@?@>A@@B@E@FAHAHAHAHAHAHAQL)G4M6Q;UFVPU\Rh&Pt,M1J5H8F;EC?CABAABAC@C@CCCFBHCIDJEJEJEJEJEJERM)J2P3U9YCZMYX Vd'Sq-P}3M7K:I=G?FAEBDDDECEBFBFCFFFIFKGLHMHMHMHMHMHMHSN(N/T0Z6^@`J^U [`(Xm/Ty4Q9N=L@JBIDHFGGFHEIDJEJGJJIMKNLOLQLQLQLQLQLQLTP'R,Y-_2d<fGdR a\(]h0Zu6V;R?OCMELHJIIKHLHMHMHNKMNOPPRPSQTQTQTQTQTQTQUQ'V)^*d/j:lElO hY(dc0`p7\|=XBUFSIQKOMNOMPMQLQMQPRRTTUVUWUXUXUXUXUXUXUWR&Z&b&j,q7sBsLpV(k`0fk8cw>_D[HXLVOUQSSRTQUQURVTXVYXZZZ[Y\Y\Y\Y\Y\Y\YXS%^#g#p*w5 z@zJxS&s\/nf7ir?e~EaJ^N\RYUXWWXVYVYV[X]Z^\^]^^]_\_\_\_\_\_\YV#b l u(}3 =GP${Y-vb6qm>lyEhKdQaU^Y\[[^Z_Z`Za\b^b`baabac_c_c_c_c_c_ZY!fpz&1 ;DM!V+~^4yi=ttEoLjSfXc]a`_c^d^e_f`fbfdeedecfbfbfbfbfbfb[\iu~$.8BJR'[0݁f:zpEuzNpUl[i`fddgcibjcjdjfighhgifidididididid[_ly!,6 ?GO"܎X-҇b:ʁlE{uNvVr]nbkfijglgngnimjlkjlilglflflflflflf\bp|)3 <DߚKӔU,ʍ_9‡iEqO|{Wx^tcqhnllolplqmonnolojoiogogogogogog]dr&08 ?؟G͙R+Ē]9fDnNwW}^ydvismqqqrqsrqsosmsksjrhrhrhrhrhrh^gu#,3ݨ9 ѣEǝP*Z8cDlNtW|^d|jynwrvtvtwrwpwnvlvjvivivivivivi^ix',֬4 ˧CN)X6aCiMqVy^djo}r|t}|u|}s||q|{o}zm}yk}yi}yi}yi}yi}yi}yi_k{ ݰ$а2 ƬAL'V5_AgLoUw]din|rwtuutsuqvow~mx}kx|ix|ix|ix|ix|ix|i`n~ֶ˴0?K%T3]@eJlSt[}bhymtqptmtmsoqpormsktitititititiaq ٵ ϹŸ.=I#R1[>cHjQrYz`xfrlmoirfserhpjnllmkninininininicu ܢԭ ϸ ɽ+;G!P/Y;aFhOpWxx^rdkifmbo_p^o`ncmfkgjihihihihihihgy ߚӦ̱ǻ(8DN,W8^BfKxmSqvZk`ed`h[kYlXkYk\j_iahcfcfcfcfcfcfk~ ̪֞Ĵ$5 BL(T3\>ydFqkNktTd~Z__ZbVeSfReRfUfXfZe\d\d\d\d\d\dp ݖΣĮ 1 >I#R.zZ8rb@kjGdsM^|SYWT[P]N^M]K_N`Q`S`U`U`U`U`U`U`wӛƨ ,:FzO'rX1j`8dh?^rEX|ITɈMOɕQLɥSJɹTISGUHXJYLZNZNZNZNZNZNZܓʢ ,9yCqM jV(c_/]g5Xq:S{>OوBKٖEH٦GFںHEGDIBMDOEPGRGRGRGRGRGRϛ~-v8nAfJ_R#Y[)Ud-Pm1Lx5I8F:C<@>?>>>=?=B?D@F@F@F@F@F@F֓ģyq+j6 c?]GWORW!M`$Ii(Fs*B~-?/<1:38465655476989898989898Ȟyskd'^1X; SCMKISEZAc>l;v!7#4%2'0(.)-*,*,*/*/*/*/*/*/*um e^W#R,L4H< CD ?L94%0,,2(8%>"DJQYcn|  rdTKD=7 1,($" ',16<BI Q Z fsD$?.<6@8A=AEAQ @]?j4B6D;DCEO D[Ah?u4@4A4A4A4A4A4G"A,E/I0L5M=NHMTKaHn E{%B(?+>.=/<1<2;3:4:5:5:5:5:5>5A7B8D8E8E8E8E8E8H"C,H,N-Q1S9UESQQ]Nj!Kw&H+E.D0B3A4A6@7?8?8?9?9?9@8C:EH@JAKAMAMAMAMAMAMAJ H'Q%X%]*`3c?bJ`U\a#Ym)Uy.R3P6N9L;K=J?J@I@IAJAJBJDLEOFPFQFQFQFQFQFQFL L$U!]!c'g1j< jGgRc\#_h*\t0Y5V9TeDbI`M^P]S[U[V[V\W]W^V`U`TaSaSaSaSaSaSPZepx$.8 BKW#yb/tl8ov@lFhKfPcSaV`Y_Z_[`[aZcYdXdWeUeUeUeUeUeUP]it}!*4= ܋HхT#^.zh8uq@qzGnMkRhVfYe\d^d^d^f]g\hZhYhWhVhVhVhVhVR_lx%/ޕ8 ӐEʋQ"…[.e8{nAwwHtNpSnWk[j^i`hai`j_k]k\lZlXkXkXkXkXkXTbo{(ؙ3̕BĐN!Y-b7k@|sHy|NvTsXq\o`nbmcnboao_o]o[oYoXoXoXoXoXVdr~ݞ ў1ǚ@L V,`7h@pH~yN{TxYv]tascrdsdtbt`s^~s\~rZ~rY~rY~rY~rY~rYXgu֣ˡ/ž>JT+]6f?nGvNT~Y{]ya}xdzxeyxexybyx`yw^yv\yuZyuZyuZyuZyuZyuZZix ݚ ٢ Цƥ,<HR)[4c>kFsM|SX]zav~ds}eq~eq~cr}`s{^tz\ty[uyZuyZuyZuyZuyZ]l { ܓ՝ ѥ ʪ*:FP(Y3a]xCXGTKPNMPKPKPJQLRNRPRQQQQQQQQQQv݉ʗ%4 |@uJmS#g\*ad0\m6Wv:S?OBKEHFGFGFDIEJGKILJLJLJLJLJLѐž y.r< lGeP_Y!Zb'Uk,Qu0Mρ4Iώ7Fϝ9DЮ;B;C:@>>@@BACBDBDBDBDBD݈ǘx tn+h7aB\MWVS_Oi"Ks%G~(D+B-?/>/>/<19496:8;9;9;9;9;9͒~tnhb*]5W? RHMQJZFcCm@x=!:#8$6&5&4&4&2(2+3,3,3,3,3,}qgb\W'R1M:HB DK AT>\;e8o5{20.,+********{oc[UPK#F,B4><:C7K4S1[ .d +o (| &$"! {n`TNIC?:%6,23/:+A(H%O"W `ly         |m_QGA< 72.*#&)"/5;BIQZf t   }m_PB:5/* &"#(-3 9 AIS^l|9'3254868;6C3N1[ /h -v+))((('''''''''(+-/////:'4181;4;9:A7K5X 3e1s/--,,++++* * * * + +,/!1"3"3"3"3"3";&50;/>1?6>=k;x977 6!5"5#4$4%4%4&4&4&5%5&6(8):)<*<*<*<*<*=%=*C(G)I-J6JAIM GZEgBt@> ="<$;&;':(:(:):):):);):+;-=.?.A.A.A.A.A.>%A&H$L%O)R3Q>QI OVLbJoG{ E#C%B'A)A*@+@,?-?-@-@-@/?1A2C3D3F3F3F3F3F3@$E#L R!V&Y/Y:YF VQT]QjNu!L%J(I+G,G.F/E0E1E1F1F2E5D6G7H8J8K7K7K7K7K7A#IQW\#`,`6`A ^M[XXdUp#S|'P+O.M0L2L3K4K5K5K6J8J:JO@OAQAR@S@T?T?T?T?T?FPYbhl$o.o8nDkNh[dg#`q*]{/[4X8W;U=T?SASBSCSDSETEVDWDXCXBXBXBXBXBHS]fmr!u)v3v> sJoWkb#gl+dv1a7^;\>[AYDXFWGWHXHXIYHZH[G\F\E\E\E\E\EKWakrx{$}-~9{FvSq^$mh,jq3g{8d=bA`E^G]J\K\L\M]L^L_J`I`H`G`G`G`G`GNZdov}'ۄ4ЁC|OxZ#sd,pm3lv:j?gCeGcJbMaO`P`PaObNcLdKdJdHdHdHdHdHP\h rzފ Ҋ0Ɇ@M}W#ya,uj4rr:o{@lDjHhLgOfQeReSfQgPgNhLhKgIgIgIgIgIR_k u ~ ֏̎.Ë= JU"~^+{g3wo:tx@rEoImMlPjSjTjTkSlQlOkMkLkJkJkJkJkJTa n x ܉ ؏ ГƓ+; HR!\+d3|m:yu@w}EuJrNqQoToU}oV|oT|pR{pP{oN{oM{nK{nK{nK{nK{nKWc p|܅ԌГ ʖ)9 FP Z*b2j9r?|zEzJxNvQ{uTxtVvtVutUuuSutQusOvrMvqLvqLvqLvqLvqLYfsֈϐʖĚ&7 DNW(`1h8p?xDI}}Mx{QtzTqyVoyVnzUnzSoyQpwOqvMquLquLquLquLquL[iw݂Ћɓę$4ALU'^/e7m=uC{~HvLrPnSkUhVgUhSi~Qj|Ok{MlyLlyLlyLlyLlyL^ lzֆˏė!2?JS%\-c5k;zsAu|FpKkOgRdTbUaTaRcPeOfMg~Lg~Lg~Lg~Lg~La o~ЉƓ /=HQ"Y+a2yi9tq?oyDjHeLaO^R[RZR[P\O^N`LaKaKaKaKaKdtڂˎ,: EOW(y_/sf5mn;hw@cE_I[LWNUOTNTNUMXLYK[J[J[J[J[JhyчŒ(6 BLxT#r\*ld1gl6bu;]@YCUGQIOJNININIPIRHTGTGTGTGTGnʍ#2~>wIqRkZ%eb+`j0[s5W}9S=O@LBJCIBHCGDIDKDMDMDMDMDMDu҆Ó {-u: oEiOcW^_#Yh(Uq-Q{0M4J7G9E:D9C;B=B>D>E>E>E>E>E>}ɍytp&k5e@ `K[TW]ReNo#Kz&GȆ)DȔ,BȤ.@ȸ/?/?0=3;5<6=7=7=7=7=7цxne c`-[:WF SP OYKbGlDwAׄ>ؓ <أ!;ٷ":":#7'6)4+6-6-6-6-6-ŐwlbZXT)P5L?HIES B\ ?fC;K8T6]3h 0t . ,*(''&&%%%%%vi]QIFB>!;*734:0B-J+S(\%f"s         vi[NC>: 62/#+*(1$7!?FNXcpwhZL@72.*&# &+28@H R ]k}xi[K>2+&!  $ *07@JVdu/++2/104/9+A'L#X!f t    !""""/+.02/3126/>+I)V'c%q$~ # #"""""""""""###$&''''0*1-5+7-624:2E/R-`,m *z )(((''''''''(((')+,,,,1)4)9(;*<.:69B7O5\3i 1v0/..--------..--/122223)8&=$@%A)B3A>?J=W ;d 9p7}655443333345433 6!7!8!8!8!8!5'="B F H%J/I:GFER C_ Ak?w=<<;;:::::;:!:#:%:%<&=&>&>&>&>&9$AGKO"Q+Q6OALM KZIfGrE}CBBA A!@"@"@#A#A$@'@)?*@*B*C*C*C*C*C*< EKQVX'X1W<UH RTPaNmLxJI H"G$G%F&E'E(E)F*E-E.E/F/H/I.I.I.I.I.@IPV\_#`,_7]BZO X\VhSrQ} O$N'M)L+K-J.J/J0K0K2J3K3L3M3N2N2N2N2N2CLT\aef'f1e=cJ `W]bZmWw#U'T+R.Q0P2O4O5O6O6O7P8P8Q7R6S5S5S5S5S5FPX `fjl!m+l7jE gRc^`h ^r&\{*Z.X1W4U6T8T:S;S;TX?X@Y?Y?Z>[<[;[:[:[:[:[:LV ` h o swyy.w> tKpVm`!ji(gr-ez2c6a9`<^?]A]B]C]C^A_@_>_=_<_;_;_;_;NX clsx{ ~~+|;yHvSr]!of(mn.jw3h7f;e>cAbCaEaEbEbCcBc@c>c=c|g=|g=|g=|g=R]irzʃņ&6CN|X y`'wi-tp3ry7pwj>wj>wj>T _lv}Ƀć#4ALU^&|f-yn2wv7u;t?|rCxqFupHsoIqpIqpGqqDrpBroArn?rn>rn>rn>rn>V boýŇ 1? JS\%d,k1}s6~{|;zy?vwBrvEouHluIkuIkuGkuEluCmsAmr?mr?mr?mr?mr?Yer|DŽ /< HQZ$b*i0|q5xz:t>p}Bl|Ei{GfzHd{Hd{Ge{DfzCgxAhv?hv?hv?hv?hv?[iv̀È ,: EOW"_({g.vo3rw8m_A\DZEXEXDXCYA[@]>]>]>]>]>bq~È%4@ JyStZ#ob(jj.fr2a|7]:Y>V@SARBRAR@R?U>V=W=W=W=W=gvɃ!0< xGsPmXh`$dg)_p.[y2W6S9P;N=L=L2@2A2A2A2A2|Š|phfc-^9ZDVN RWO_KiHsE~B ?"=#<#<#:&8(7)8*8+8+8+8+Ʌ|qf[WV#S2P>MHIRF[ Ce@o>{;ω9ϙ7ϫ664210!/!/!/!/!}qf[PG FE'D5A@?K=U:_8i5v 3 1 / .--+*)((((~qeYND? =;#9.684B1K/U-_*k(x&%#""!!     qdXLA85 30.'+0(8&@#I!R]iyrdVI>4.+ (%"&-4<DNYg w   sdVH;0'#  !' . 6>HTbsteVG9-#   &.7AM\m$/%/(/'1$6 >IVdr    %.)-+,+.)3$;FSan{       &-,).(/*-/)7'C$P"] jw             !!!!**/&2$3%2*14/?-L*Y(f&r%~%% % % % $ $ % % % % & & &%%&''''.&4"7 9!8%9/8;5G3T1a/m.y - - , , ,,,,,,---,,,-....2#8<>@"A+@6>B xJuSs\qd"ol'mt+l|/j2i5|h8yg:vf;tf#="=#<%;&;&;&;&;&;&zui^[Y$V1S=PGMPJY Gb DlAw><98775433 3 3 3 vk_TL KI(H5E@CJ@S>];g9s 7ǀ 4ǐ 2ǡ1ȵ00.-,++++xk`TJ@:98(756@4K3U1`/l-z+؋*؝(ٱ''& % $ # # # # yl`TH>5- ,+)*(5'?&J$U#a!n ~zl_SG<2*% #!"+4>HR_n      |m_RE9/&!(0 9 C N\l}n`RC7+"  "*3=IWi~paRC5)  #+6CSez/ ,!,.3<F T a o {                      -#)$)"+08CP^kw#*&&(%''#+3@MZgs~&&*", +"(&'0$<"IUbnz     *".000"0,.7+D(Q&]$i#u#########$$%%$ % % $ $ $ $ $ .35588'734?2K/X.d-o,z,,,,,,,, , -- , -,,,,---27:<?@">-<9:E8R7^6j5t5~44 4 4 3 3 3 3 4 44444344446;> CFFF&D2B?@L?Y>d=o}H |Q{zYwy`swhovp!lux%it(fs+cr.`q/^q0]q0]q.^q,^p+_p)`o(`n(`n(`n(Ubmu{.;~E zNuVq^n}fj|m g{v#cz'`y*]x,Zw.Xw/Ww/Ww.Xv,Xv*Yu)Zt(Zt'Zt'Zt'Yfqz +}8xBtL oTl[hcdkat!]}$Z(W*U~,R~-Q~-Q},R}+R|)S{(Tz'Tz'Tz'Tz'^kv~~{'v4r?mI iQeYb`^hW{!T$Q'O)M*K*K)L)L(L'M&N&N&N&cp{zur"o0j;fEbN _V[]XeUnQxN K#I$G&E&E%E%E%F$F$F$F$F$iv~pkhf*b7_A[JXR TZQbNkKuHEB@ ? ?? >!>!?!?!?!?!p}wi`][$Y1V<SEPNMW J_ GhDsA><:998777777xznbUPNM(K5I?FIDRA[?d+<6;A9K7T5_3j1w/-+**) ( ' ''''rfZOD:0.-,)+5+@*J(V'a&o$#ϑ!ϥ н tg[NC9/' &1<HUbrvh[NB7-$&0: F S b txi[M@4*!  $,7BPauyj\N?2'  '1>M_u|l]N?1%  !+9J]s,)(+0 8DQ^lx)&%',4 @N[ht&!" !#'0<J W c o z                ""$$"",8ER^ju&((&&&(#4 @MYepz*---.-",.):&G$T#`"k"u"~""""""###$$%%%%$$$$.12 4553'14/A-N,Z,e,p+y++++++++,-- - - - - , , , , 15 6: <;97+695G5T5`5j4s4|4433 3 3 3 3 4 4 4444444458<@A A?<"=1>A>O>Z=d=nCKQTTRQS"U3TATLSVQ_ PgOoNwNMLLKKKKLLLMLLLL@GPVYZXWYZ/Z=YIXS W[ VdUkTsS{RQQPP P!P!~Q }Q}Q}Q}Q}Q}Q}QBJTZ^_^\ ^`+`:_E^P \X [`ZhYpXwWVV~U!{U"yT#xU#wU"vV vVvVvVvVvVvVENX^bdcacd(e7dCcMaU `]_e^l]t~\}|[yZ wZ"tY$rY%qY%pZ#oZ"oZ pZpZpZpZpZHR[bfhhfgi%i4h@gJfS e[db~cj{brxazv`s_!p^#n^%l]%j^&i^$i^"j^ j^j^j^j^j^JU_ejlljkm"n1m=lGkP jX|h`xggvgosfxpemd!jc#hb%fb&db&db%db#db!ebebebebebLXbinppnprr.r;qE}pN znVvm^slepkmmjujigi!eh#bg%`g&_g&^g%^g#_g!_f`f`f`f`fO\emrutst vw+w8|vCxuL ttT qs[nrckqkhpseo|bn _m"]l$Zl%Yl%Xl%Yl#Yk!Zk[k[j[j[jS`iqvyywy {|({|5w{@szIoyQ lxYhwaevhbup_tz\tZs!Wr#Ur$Sr$Sr$Sq"Tq TpUpUoUoUoWdmu{~}}|x$u2q=mFiO fV c~^`}f]|nZ{wWzTzQy!Oy"Ny"Mx"Mw!NwNvOuOuOuOu\hrzytq n.j9gCcL`S ][ZcWkTuQNKIH GGH~H}I|I|I|I|anx{pk hf)b5_?\HYPVX S`PhMrJ}HECBAAAABBBBgt~uga^\#Z/W:TDRLOTL\ Ie GoDzA?=;;:::::::n{{nbWRQO(M4K>IGGPDXBa?k =w : 86544333333wsg[OGDCA+@7?A=J;S9\7g5s20.- ,, + * * * * * xk_SH=6 43!2,170A/K.U,`*m){'%$##"!!!!!{naUJ?4+$ ""!* 4?JVcsDžǙȮ}pbVJ>4*" %0<H V e x ֍ ؤ ؾ   rdWI=2(  $.:GVg{teWI<0%  !+7EVh~vfXJ;.#  '4CUixhYK;-! "0@Si(%% '-5AO\it~%"!# (0=KXdpz"" ,9FS`kv(4 A N[fqz     !! $/<IUaku~%%$ ##")5CO[fpy() (+ +)&"#.!; I U `!j!t!|!""""###$%%%%%%%%%, -.11 /+)%(3(B*O+Z+e+n,v,~,,,,,,,--....----/15763/.1,3<4I5U5_5h5p4x444444 4 4 5 5 5 5 5 5 5 5 5 35:>@=7 8:&=6>D>P=Z=c=kGPVXYVSTV%W4W@WJVSU[ Tc TjSrRz}R{QxPvPtPsPqPpQpQpQpQqPqPqP@KTZ]^[XY["\1\=\G[PZX Y` ~Yg{XoyWwvVtVrUoUmTlTjUjUjUjUjUkUkUkUCOX]ab`\^`a.a:`E`N~_V {^] x]ev\ls\tp[}nZkZiYgYeYdYdYdYdYeYeYeYeYFR[aefcabde+e7eB|dKxcSuc[ sbbpajm`rk`{h_f^c^a]`]_]_]_]_]`]`]`]`]JV^eiigef hi(~j5zi?viIshQpgY mg` kfghepedycd`c^b\bZbYbYbZbZa[a[a[a[aMYbhmmkik m|n%xn2un=qnFnmOklV hl^ ekecjm`iv]i[hXgVgUgTgTgTfUfUeVeVeVeQ]flqpon}pxrus!rs/os:lsDirLfrTcq[ `pc ]pk[otXnUnSmQmOmNmNlOkOkPjPjPjPjUajqutt|svuqwoxly+iy7fy@cyI`xQ]wX [w` XvhUuqRu|PtMtKsIsHsIrIqJqJpKpKpKpZfovyxxwyo|j} g~d&b2_=\FZNWUT~] R}e O}oL|yJ|G{E{D{C{CzCyCxDwDvDvDv_kt|~}~rfa^\!Z.X8UBSJPRNZKb Il Fw CA?=<<<===~=~=~fq{ym_XTRP'O3M=KEINFVD_Bh?s = : 8 766555666myrfZPI GE D+C6A@@H>QKZj~̫̔|n`RE9.#  '1>K[nބߛߴpaSE8,!  $/<K]qrcTF7*  +9J^tteVG8*  (7J^v$" !$)2>LYepz! #-:HUalv )6CP\gqz $0>KWblu~ + 8EQ\fpx   $0> J V a j s { " ! ! (6COZdmu}&%&'%! -<I U!_"h"p#x###$$$$%%&&&&&&&&)(-0/+" #&'(6*D+O,Y,b,j-r-z--------..//....,.5996/-0!214>5J5T5]5e5m5t5|554445556666555/4<AB@:69;,<:=F=P=Y=a=h @B'C5DBDLDUC]CdCkBsB{B A A A A~A|AzB yB xB xB xB xA xA 6@HMNMIEFH#I2J>JHJQIYI`IhHoHw G }G zGxFvFuFsFrGqGqG qG qG qF qF 9DLQSRNJKM O.O:OEONOVN]~Nd|Ml yMt wL} uLsLqKoKmKlKkLjLjLjK jK jK jK =HPUXVSOPRT+T7TBTK|TSzSZxSbuRi sRq qQz nQlPjPhPfPePdPdPdPdPeO eO eO ALTY\ZWTU WX'Y4}Y?zYHwXPtXXrW_oWf mVn kVw hUfUdTbT`T_T^T^T_T_T_S _S _S DPX]_][XZ [}\$z]1w]<t]Fq]No\Ul\]j\d h[l eZu cZaY^Y\X[XYYYXYXZXZXZW ZW ZW HS[aba_\^{_xa!ub.rb9obClaKjaSgaZe`b c`j `_s ^^}[^Y]W]U]T]T]T]U\U\U[V[ V[ LV_dedcaybudreof+lg7jg@gfIefQbeX`e`]dg [dp Yc{VcTbRbPbObObOaOaP`P`P` P` OZcihggyesgoiljik(gl4dl=blF_kN]kVZj]Xje Vin Six QhNhLgKgIgIgIfJfJeKe Kd Kd T^gmlkkskmmhn epbq$`q0^q:\qCYqKWqSUpZRpbPpk Nou Ko InGnEnDnCmDlDkEk Ej Ej Ej Xclqpozonpes`u]v[wYx+Wx6Ux?SxHQxOOwWLw_JwhHvs Ev Cu Au?u>u=u>s >r >q ?q ?p ?p ^iquttutiv^yX|T}R~Q&O1M;LCJKHTF\CeAp?~|<~ :~ 9~ 7~ 7} 7{ 7z 7y 8x 8x 8x doxyy{ypzd|XPK HG E+D5C>AG@O>X4*!! + 6 A N \ l teWK@5*!  "+6BP_qćĝĵxj\OA5)  !*5CRcxՏէ{l^PB4(  '3BTg~}n_QB4'  $1AUjqaRD4&!/AVm  %.;IVbmv  *7EQ^hrz%2@LYcmu}  ,:GS^gpx  &3@MXajrz  +9FQ[dlt{   " 0 > J U ^ gov~ (7DOYaiqx"!'*)$"1 >!I"S#\$d$l$s$z%%%%&&&''((''''&)1440)#&(+*8+D,N-W-_-g-n.u.}......////////)18<<92- /1&344@5J5S5[5b5i5q5y5555556}6{6{6z6z6z5z5-7?CD@:679":/<;h >g >f?e?e?d?dWaihg{gqgeh\jXlTnRoPo$Np.Mp8KqAJqIHqQFqYDpbBpl@px>p0$  !,:J]rzk\M?0# +:Maym^O@1"  );Of"+8FS^irz&4BNZdmu} ".<IT_hpx   (6CNYbkry "/<HS\elsz  (5ALV_fnt{  -:EPYahov}   $ 2 >IS[cjqx#%$+8CMV]els{       &-0.(" &!3">#H$Q$Y%`%g&n&v&&''''((~)})|(|(|(|($.5861,&&(!*.+9,D-L-T.\.c.j.r.z//}/{/z/x/v0u0s0s0s/s/s/*5;?<83/.02)354?5I5Q5X~5_}5f{6ny5vx5v5t5r6p6o6m6l6k6k6j6j5j50:ACA>:65 78%:1;<|;Ez"z?.x@8uABsAJrAQpAYnA`lAgjAphAygAeAcAaA`A^A^A]A]@]@]@]@9CJKIGDA~AzBvCtE*qE5oF?mFGkFOjFVhF]fFedFmbFv`F^F\E[EYFXFXFWEWEWDXDXD=GNNLKI}ExFtGpHnI'kJ2jK<hKDfKLdKSbKZ`Kb_Kj]Kt[JYJWJUJTJSJRJRJRIRIRHSHAKQPON~LxHrJnK kMhN$fN/dO9bOBaPI_PQ]PX[O`YOhWOrUO}SORNPNNNMNMNMNMMMMNLNLDNTSRQzPrMlOhP eQcR!aS,_S6]T?[TGZTNXTVVT]TTfRSoPS{NSLSKSISHSHRHRHQIQIPIPHRWVUTvSlQgSbT_V]W[W)YX3XX<VYDUYLSYSQY[OXdMXmKXxIXGWEWDWCXCWCVCUDUDTDTLVZYX{XqWfVaX]YYZW[U\&S]0R]9Q^AO^IM^QL^XJ^aH]kF]vD]B]@]?]>]=\>[>Z>Z>Y?YPZ]\[v[m[a[[]V^R` PaNb"Mb,Lc5Jc>IcFGcNFcVDc^Bch@cs>co=o"JV`hpx~ +8EPZckry  %2?JT]elsz  ,8CNW_gmtz  $1<GQY`gnt{  )5@JS[bhou}  !.:DMU \ c j q x  ! &3>GPW^els|#)*&"!-8BKRY`gow~ } { y!w"v"u"t!t!t!!+11.*&! !(#3$=$F%N&U&\~&c|'k{'sy'|x(v(t(r(q)o)m)l)k)k)k(k((28752-)' (*#+/~,9|,Bz-Jx.Qw.Xu.`s/gr/op/yo/m/k/i/h0g0e0d0c0c/c/c/.8=<:730. /{0x2+v35t3>r4Fp4No5Um5\l5dj5lh5ug5e5c5a6`6_6]6]6\6\5\5\43<A@><96{4w5t7q8'o92m9;k:Cj:Kh;Rg;Ye;ac;ib;r`;}^;\;[;Y;X;W;V;V;V:V:V97ADCB@~>y;t:q:m<k=$i>/g?8e?@d@Hb@Oa@W_@^]@f\@oZ@zX@V@T@S@R@Q@P@P?P?Q>Q>;EGFEDyBt>o?k@ gAeB!cC+aC5_D>^DE]EM[ETYE\XEdVEmTExREQDODMELEKEKDKDKCLBLB?HJIH}GuEnBiCeD bE_F]G(\H2ZH;YICWIJVIRTIYSIaQIkOIvMIKIJIHIGIFIFHFHGGGFGFCLLLKyJpIiFdG_I\JZKXL%VL/UM8SM@RMHQNOONWNN_LNiJNsHMFMEMCMBMAMALALBKBJBJGOONNuMlLcJ^LZMVNTORP"QQ,OQ5NR=MRELRMJRTIR]GRfERqCR~AR?R>R=RW{?\F>]O=]W;]a:]l8]y6]4]3]1]1\1[1Z1Y2Y2XTYXXsWiW`XTYN[H]C_@`>a=a ;b):b29b:8cB7cK6cT4c]3ch1cv/c.c,c+c*c*b*`+_+_+^Y\\{[o[e[\\Q^I`CbKYi{w}uptbuUxI|?4+" "+5BP_q}x|i|[NA6,#  "+7ETf{qaSF9.#  !+8HZnyhYK=1%  +:L`wؒجp`QC5(  *<QggXI:* ,?Un%2?KV`hpx -:FQ[cksy  (5@KU^fmtz ".:EOX`gmtz'3>IRYagmsz !,8BKSZagmtz%1;EMU[bhnu|   )4>GOV\cipx   " . 8 A J Q X ^ e lt}~}zxwwww!$# '2<DLSZ`~h}o{xyxvtsronmmmm )+*($  "-~7|@zHyOwUv\tcskq tp n!l!k!i"h"f"e#d#d"d"d!&/10.+($ ~ {"x#)u$3s%<q%Cp&Kn&Rm'Yk'`j'hi(qg({e(d)b)`)_)^*\*\)\)\)\(,55431-|+y(v'r)p*%m+/k,8j,@h-Gg-Ne.Ud.]c.ea/n_/x^/\/Z/Y/X0V0U0U/U/U.U.1:9876z2u0r.n. k/i0!f1+d24c2=a3D`3K_4R]4Z\4bZ4kY5uW5U5T5R5Q5P5O5O5O4O4O36=<<;{:t7o5l3h4 e5b6`7(^71]8:[8AZ9HY9PW9WV:_T:hS:sQ:O:N:L:K:J:I:I9I9I8J8:@??>w=p;j8f8b9_:\;Z;%Y<.W=7V=>T>FS>MR>UQ>]O?fM?pL?}J?H?G?E?D?D>D>D=D=E<>CBB}As@k?e<`<\>Y>W?U@"SA+RA4PB<OBCNBKMCRKCZJCdHCnGC{ECCCBC@C?C?C?B?A@A@@AEEEyDoDgB`?[AWBTC QDOENE(LF1KF9JGAIGHHGPFGXEGaCHlBHx@H>HCKFBLMALV@L_>LjPC%cG#cQ"d\!didyddddca``_YX{XmXbXYXPYG[>^7`1c*f$i !j jj k(k0k9kBlLlXleltllllkihhg]]u\h\^\U\K^Ba9d2g+j$mps ttt!u)u2u;uFuRu_ un u u ut t s q q pbapadaZaObEe2' $1@Re}o_QC6*  $3DXnшФgWI;.! $6I_x_PB4& %9Og"/;GR[dlsz *6ALV_fmtz $0;FPY`gntz *5@JRZagmsz#.9CLT[agmsz (3=FMU[agmsz!,6?GOU[agnu}   %09AIPV\bipx~}|{{{{  )3<CKQW^dl}t|~z x w u s r p p o o o    # - 6~>|F{MySxZvauhsqq{pnlkihfeeee$$#!|y(v1t:rAqHoOnVl]kdimhwfdca`^]\\\\%*))(%}"yxvro#m-k5i=hDfKeRc Yb aa i_!s]!\!Z"Y"W"V#U#T#T"T"T"+...-|+v(r&o#m! j"g#e$)c$1b%9`&A_&H]&O\'V[']Y'fX(pV(|T(S)Q)P)O)N)M)M)M(N(02221v0p-k+h)f( c(`)^*%\+.[+6Y,=X,DW-LU-ST-[S-cQ.nP.zN.L/K/I/H/H/G/G.G-H-4555{5r4k2f/b._-\.Z/X0"V0+U13S1:R2BQ2IP2PN3XM3aK3kJ3wH4G4E4C4B4B4B4B3B2B28888w8m7f6a3]2Y2W3 T4R5Q5(O60N68L7?K7FJ7NI8VG8_F8iD8uC8A9@9>9=9<9<8=7=7=6;;;;s;j:b9]7X6T7Q8 O9M9K:%J:-H;5G;<F=<=:=9=8=7=7<8;8;8:=>>|>o>f=^=X;S:O;L<I=G>F?"D?*C?2B@:A@A@@I>AQ=AZ@@@xAlAb@[@T?N?J@FADBBC@C?D'>D/:EF9EN8FX6Fb5Fn3F|1F0F.F-F-F-E.D.C.CCCCtChC_CWCPCHCDEAF>G nJnWnenvnmmllkjjZtZfZ\YSYHZ?]6`.c&gjmqt w wwww$x-x7xCxPx^xoxxwvuutt~_n_b^Y^M_Bb9e0h'lptw {~ &0;HWh|weid_cRdGgGNU[agmsz#.7@HOU[`fls{ '1:BIOU[`gmu~ !*3<CIPU[ahp~y|{yxvusssss   $.6>}D|KzQyWw]vdtlsuqonlkihhggg  |y(w0u8s @r Fp Lo Sm Yl aj ii rg ~f d b a ` ^]]]]{xxw sp"n+l3j;iBgIfOdVc]af`o^{\[YWVUTTTT""##"y!sonm jge'c/a7`>^E]K\RZZYbWlVwTRQONMLLMM&''({'r&l$h!fdb_]#[+Z3X:WAV HT OS WQ!_P!iN!tM!K"I"H"G"F#E#E"F"F!*++,v+m*f)b&_$]"[!X"V#T$(S$0R%7P%>O&EN&LL&TK'\I'fH'qF'E(C(A(@(?(?(?(@'@'-./}/q/h.a-]+Z(W'T' R(P)N)%M*,K*4J+;I+BH,IF,QE,ZD,dB-o@-}?-=-<-:-:-:-:-:,:,012y2m2d2]1X/U,Q,O- L-J.I/"G/*F01E08C0?B1GA1O@1W>1a=2m;2{928262524242515150345u5i5`5Y4T3P0L1I1G2E3C3B4'@4.?56>5==5D<6L:6U96_76k66x472717/7/7/6050504667r8f8]7V7P6K4G5D6A7 ?8>8<9$;9,:939::8:B6:J5:S4;]2;h0;v/;-;,;*;);*:*:+9,889|:n:c:Z:S:M:F8B:?;<< :<8=7=!6>)4>03>72??1?G0?P.?Z-@f+@t)@(@&@%@$@$?%>&=&=;<x=j=_=V=O=I=B=<>9?6A4A2B1B/C%.C--C4,D<+DD*DM(DX'Ec%Eq#E"E EEDDC B!A>?t@g@\@S@L@F@>A8C4E0F-G +H*H)H"(I)'I1%I9$IA#JJ"JU JaJoJJJJJIHGGBBpCcCXCPCICBD;E5G0I+K&M $N"N!O O%O,O5O=PGPQP]PkP|PPPPONMME{FkF_GUGMGFG?G7J1L+N&P SU VVV V'V0V9WBWMWYWhWyW W W V V U TSIvJgJ[JQJJJCJ;L3N,Q&T!VY\^ ^^^"^* ^3 ^= ^H ^T^b^s^^^]]\[[NpNbNWNNNGN>O6Q.T'W!Z]`c f gggg$g-g7gBgNg\gmgffeeddczRjS]RTRKRBS9U0X([!_beh kn ooopp'q0q;qHqVqfqyqpoonmmsXeWZWQVFWHRZbiou{ !,8CLT\ciou{ '2<FNV\chnt{!+6?HOV\agmsz %/8AHOU[afls{)2:BIOUZ`flt} #,4<CIOTZ`fnw~|{zxxxxx &.6=C~I}O|Uz[yawiuqt|rqonmlkkkk  | z(x0v8t>sDqJpPnVm]ldjmhwgedca`````| y x usp#n+l3j9i@gFfLeRcYba`j_t]\ZYWV V U U V vqnm m j g e &c .b 5` <_ B^ H\ O[ VY ^XhVsUSQPNMMMMMwoifddb_]![)Z1X8W>VETLSSQ[PeNpL}KIGFEEEEE!"|"q"h!b_\[Z WUT%R-Q4O;NBMHKPJXHbGmEzCB@?>=>>>#$%w&l&c%]$Y"VTS QNM"K)J1I7G>F EE MC UB _@!j?!w=!;!9!8"7"7"7"8!8!&')s)g)_)X(T&Q#O"L"J"H"G#E$&D$.B$4A%;@%C?%J=&S<&\:&g9&u7'5'4'2'1'1'2&2&3%)*},o,d-[,U+P*L(J&G'D' B(A(?)#>)+=)2<*9;*@9*H8+P6+Z5+e3+r1+0,.,,,+,,,,+-*-*,-y.k/`/X/Q.L.H,E+A+?, =,;-:.!9.(7./6/65/>4/E3/N10X00c.0p,0*0)0'0&0&0'/(/(..0v1h2]2U2N1H1D0@/<0:1 71625233%23,13304;/4C-4L,4V*5a)5n'5~%5#5"5!5!4"4#3#213r4e4Z5Q5K4E4@4:374452607/7.7"-8)+81*88)9@(9I&9S%9_#9l!:| :::9988746n7a7W7N7H7B7<75829/:,; *<)<(=&=&%=.$=5#>=">F >P>\?i?y???>>=<<7z8j9^:S:K:E:?:9:2<.>)@&A$B"B!B C#C*C2C:DCDMDYDgDwDDDDCBBA;v<f=Z=P=H=B=<=6>/@*B%D!FH IIII&I.J6J@JJJVJdJtJ J J J I H G G>q?b@V@M@E@?@9A2B+E&G!IKNPPPP!P)P1 P; QF QQ Q_ QoPPPPOONM}BkC]DRDJDCCGOW]ciou|"-7@IPW]chnu| &0:BJPV\agmt| *3;CIOUZ`fmt} $,5<CIOTZ_fmv~&.6=CINTY~`|gzoyzwutrrqpppq !})|0y7x=vCtIsNrTpZobmjktjhgeeddccd~{wurq#o+m2l8j>iDgIfOeVc]be`o_{]\[YYXXXY }v q om kige&c-a3`9_?]E\K[RZYXbWlUxSRQPONNNNtlgec c a^\![(Y/X5V;UBTHSOQVP _N iM vK I H G F E E E E xme_\ZZZ W U S $R +P 1O8N>MEKMJUH^GhEuCA@>====>rg_YUSRR PNL J'I.H4G;EBDICRA[?e>r<:8755667{ m!b!Z!TPMLKIGED$B*A1@8??=F<O:X9c7o5~320///00"w#i$^$V$P#K"H FEC A?>!<';.:59<7D6L4 V3 `1 m/ |-!,!*!)!)!)!* + "%s&e'['S'L&G%D$B!?!=! ;!9"8"6#%5#+4$23$92$A0$J/%S-%^+%k*%z(%&%$%#%#%$%%$%$%'o)b*W*O*I)D(@'=&:%7&5&4'2'1("0()/(0-)7,)?+)G))Q(*\&*i$*x#*!****) )!((|*l+_,T,L,F,A+<+8*5*2+0+ .,-,,,*-&)--(-4'.<&.E$.O#.Z!/g/v////..--+x-h.[/Q/I/C/>.9.4.0.-/+0 )1'1&1%2#$2*#21!39 3B3L3W3d4t44333321.t/e1X1N2F2@1;16111+3(4%5#6 !6 77 7'8.868?8I9U9b9q999888761p2a4U4K4D4=48434-5(7$9 :; <===#=+>3><>F>R>_>o> > > > = = < ;}4k6]7Q7H7A7;75707*9%; =?AC CCCD'D/D9 DC DN D[ DjD|DCCCCBAx8g9Y:N:E:>:8:3:-;'=!@BDFI J J J J#J+J4J>JIJVJeJwJJIIIHHr<b=U>J>B=<=6=/>)@#BEGJL O P QQQQ&Q/Q9QDRQR`QrQQQPPOOl@]AQAGA@@9@2A*C$FHKNQ SVW XXYZ!Z)Z3Z?ZLZZZlZYYXXWWeEXEMEED>D5E-G%JMPSV Y\^_ ` abcd#d-d8dEdTdfd{ccbaa`_JSJJICH9I/L'ORUY ]`cfhij k mnpq&q1p>pNp_psoonmllZOPNHM=N3Q)T X\` dhkortuwx z |}(5EVk~}|{zVTNSBT7V,Z"_ch mrvz} ,;MbzUYHZ;]/a$flr w} !1CWpNa@d3i'nu| %7LdFk9p+w +@XtӒҰ>y1# 3Kd )4?HPX^ekqw~ #.9BJRX^djpv} (2;DKQX]chov~"+4=DKQV\agnv %.6=DJOUZ`fnw'/7=CINTY`goz~|zyxwxxwu !)07}=|CzHyMwSvYtariqsomljihiiii|ywvt#s+q1o7n=lCkHjNhTg[eccmbx`_]]\\\\\xtpm kihf%e,c2b8`=_C^I\O[VZ^XhWsUTRQQQQQR ~ s l heca _]\!['Y-X3V9U?TESKQRPZOdMoL}JIHGGFGG ukc^[ Z Y WUSR#Q)O/N5M;LAJHIOHWFaEmCzB@?>===>|nd\VSQP P OMKI%H +G 1F 8D >C EB M@ U? _= k< y: 8 7 5 5 5 5 6 vi^VPMJIIH F D C!B(@.?5><=C;K:T8^6k4y21/---./qdYQLGDCBA @><;%:+82796@4H3Q1\0h.w,*('&'()}m`VNHC@>=;9865"3(2/160=.F-O+Y*f(t&$"! !"#yi!\"R"J"D!?!< 9854 20/.%-,+3*;)C'M&W$d"r  u"e#Y$O%G%A$<#8#5"3 0 .! ,!+!*"("#'")�%#8##A"$J!$U$a$p$$$$$$##"q$b&V'L'D'>'9&5&1%.$+%)%'&%&$'#' "''!(. (6(>(H)S)_)n))))((('%n'_(S)I*B);)6)2(.(*(&)$*"+ +,,,$-+-3-<-E.P.].l.~.. - - -,,|(j*[+P,F,?,9,4+/+++&,"./0 1112!2(20293C3N3[3i 3z 3 3222 1 1w+f-X.M/C/<.6.1.-.).#02356 7778$8,85 8? 8J 8W 8e8v8877766s.b0T1I1A19141/0+0%2 368:< = = = =! =)=1>;>F>R>a>r>===<<<m2]3P4F4>47423-3'4"68:=? A C DDDD$D-D6DADND\DmDDCCBBBh6X7L8C8;75606)7#9;=@B EGI IJKK K(K2K=LILWKhK}KJJIIIb:T;I;@;9:39,:%<?ADG ILOP P QRTT#T,T7TDTRTcTwTSRRQQ\?O?E?>>7=/>'@ CFIL ORTWXY Z[]^_&_1^=^L^]^q]]\[ZZVDKCCBFLRX]cipx &/7?EKQV\ahpy  (08>DJOUZahq{|{y "*18>CHNT~Z|azixsvusqpoooml ~}|$z+w1u7t=rBqHoMnSlZkbilgxfdba`aaa`|wrp nllk%i,g1f7d=cBbH`N_U]]\fZrYWVUTTTUUunifc a`_^ ]&[,Z2X7W=VCUISPRXQaOlNzLKJIIIIJtjc^[YW VTSR"Q(P-N3M8L>KEJLHTG]FhDuCA@@??@@ y l a Z U R PON LKJI#G)F/E4D:BAAH@P>Z=d<r:9876667 re[SNJH G G EDBA @%>+=1<7;>:E9N7W6b4p210/..-.}l_UNHDA@@ @ > < ; 9 "8 (7 .6 55 ;3 C2 L0 V/ a- o+ * ( ' % % & ' wg[QIC?<:998 7542%1,02/:-B,K*U(a&o$#! scWME@;85432 1/-,"+)*0(7'?&H$S"_ m~o_SJB<741/.,+)(' %&$-#4"= FQ]k|}k\P G ? 941-+)'% $"! #*2:DN[izzgY!M"D"<"6"2!.!* ' $"  !!!"!"'"/"8#A#L#X#g#x# # # # " " !vd"V#K$A$:$4$/#+#(#$# #$%& &&''%','5(?(J(V (d (t ( ('''&&q"`$S&H'?'7&1&-&)%%%"%'(*+ ,,,,",)-2 -; -F -R-`-p--,,,++m%]'O(E)<)5)/(+(''#'(*,.01 1 1 1 1&2.272B2N2\2l2211000h)X*L+A,9,2+-+)*%* +,.024 7 7777"7*838>8J8X8h8|776665c,T.H/>/6.0.+-'-"-/1357 :; <=>>>&>/>:>F>T>d>w>==<<;^0P1D2;241.0)/$02469 ; =@A B CDEF"F+F5FAFOF_FsEEDCCBX4K5A59524-3&4 58:= @ BEGHJ KLNOO%O/O<OJOZNmNMLKKJS9G9>97817)7!9<?B EHJMOQRT UWYZY)Y6YDYTXgXWVUTTN=C=<<5;,<$>ADH KNQTWY[]^` bdgg"f.f<fMe`ewdca`_IBAA:?0@&CFJN RVZ]`cegikmo ruwv&v5uFtYtosrponFF@E5F*H LQV Z_chkoruwy{} +<OfFK:L.O#SX^ diotx| !1D[v?R2U&Z`g mt{ &9Pj7\+ahp x.E_~ɞȾ/i#py #:Tr !+5>GNU[afms{ $.8@HNTZ_ekr{(19@GMSX^dks| !*2:@FLQV\cjs~}| #+29?DJOU[ckv~|zywrpo %,28}={CyHxNvTu[scqnozmljihgedc{xv utsr%p,n2l7j<iBhHfNeUc]bf`r^][ZYYYXXyqmif edcc a&`,^1\7[<ZBXHWOVWT`SlQyPONMMMMMukd`]ZX WVVU!S'R,Q1O7N=MCLJJRI[HfFsEDCBBBCCxjaZURPN M LKJI"H'G-E2D8C>BEAM?V>a=n;~:988899o b X Q LIGFD CBAA?#>)=.;4::9A8I7R6]4j3z210///0 x h \RKE A ? >=< ;:98 6%5+40372>1F/P.Z-g+w*)('''' rcVME@<97 6 6 54210"/(..-4+<*D)N'Y&e$u#"  m^RHA;74200 0 / - , * ) %( +' 2& :$ C# M! X e u       {iZNE=830-+**) (&%$##)!1 9BLXfvweWKB:40,)'&%# "!  '.6@JVdt  saSH?72-)&$"  $+4=HTbr       o^PE<5/*&#! ")1;E Q ^ m k[MB:2-($! !!!!"& ". "7 "A "M"Z"i"|""!! gWJ!@!7"0!*!& "  !#$& & & & &"&*'3'='I'V'f'y'&&%%$c T"G#=$4$.#(#$"!"!"#$&( * ++++,',0,:,E,S,c,v,++**)_#P%D&:&2&+&&%#$$$%')+ -/ 00111#2,262B2O2_2r1100//Z'L(@)7)/))(%'!&'(*,. 024 5 6788 8(829=9K9[8n877655U*H,=,4,-+(*$)*+-/ 1 468:; = >@@@$@.@9@G@V@i@?>=<<P/C/9/2/,-', -/13 6 8;=@ACE FHJJJ(J4IBIQIdH{HGFEDJ3?36301*0#1358 ;>ACFHJLNO QTUU"T.T<TKS^StRQPONE7<756/4&57:= ADHJMPSUWX[] _bbb'b4aE`W`m_]\ZYA<:;49*:!<@C GKOSVY\_acegjm psr r-q=pOoenmkih?@9>.?$BFJ OTX]aehknqsux{~ $4F]v~|z?D3E(HLR W]chmqvz~ )<Rl8K,N SY `gntz 0F`~1U$[aiqy %;TqȒų)biq{ /Ie&0:BIPV\bhov  *3;CIOU[`gnv #,4;BHNSY_fnw~%-4;AFLQW^eny|vsr &-4:?EJPV^f~q|}ywusrnige  }&z-w3u8t>rCpIoOmVl^jhhugedba`\[Z~xsom lkkj h&f,e2c7b<`B_H]O\WZaYmW{VUSRRPOOxngc`]\ [[[Z!X&V,T1S6R<QBOINQM[KfJtIHGFFEEExlb[VSQOO NNML!J&I,H1G7E=DDCLBU@`?n>~=<;;;;<~naXQLIGED CCCB@"?'>,=2;8:?9G8P7[5h4x3211123vfYPIC@><;: :9976#5(4.342;0C/L.W-d,s+*))))*n_ S J B = 9 6543 2110/.$,*+0*7)?(I'T&`$o#"!!!!"{ h Z NE=8 3 0 . - -, +*)('!&'%-$4#="F!Q]lu dUJ@93/,)' ' ' & %$"! $+2:DO\k}q_QF=60+(%#"! !     " ) 1 9 C O \ k ~  m\NC:2-(%"  !(09DP] k |  iXK@70*&" %.7 @ K X gxeUH=4-(#   " ) 2 <GTcuaRE;2+%!   &/8DQ`r^OB8/)#     !#!+!5!@!N!]!o! ZK?5-'" ! " # $%%& &(&2&=&J&Z&l&%%$##UG ;N;`:w98765G);*2*+)%'!&'(*, /1468;=?A CEEE!E,D9DHD[CqBA@?>B-8./-)+$**,. 1 47:<?ADFHJL NPPP'O4OCOUNjMLJIH>251./). .137 :=@DGILOQSUXZ ]_^ ^,]<\N[cZ~XWUT:634-2$369=AEILPSVY[]`behk oon%m4mFk[juhfdb8927(9;?DIMRVZ^behkmpsvy} ,>~T~k{zwu8=,>"AFKQW\bfkotx{~ !3Ib1D%HMSZahnty (>Vs*OT[ bjs{2KfƇ©"[b kt}'?[z ",5=ELRX^djrz %.7>EKPV\bjr|'/7=DIOU[ais{vt  (/6<BGMSYaju|smjh !(/5:@E~K|RzYxbvltyrqomle`^\|zx wxwt!r'p-n3l8k>iDhJfQdZcdap_^]\[WTRQtnjfec ccca!_'],\2Z7Y=WCVKUSS\RhPwONMLKIGG|ne^YWUTS STRQ!O&N+L1K7J=IDGLFVDaCpBA@??>=>ocYQMJHGG FFGED!B&A+@1>7=><G:P9[8i7z6554445teXOHC?=<<; ;;:97!6&5,42391A0K/V.c-s,,++++,l]QH@;74322 2 110/-",(+.*5)=(F'Q&^%n$##""#$weVKB:50-,+*) ))('&%$$*#1"9!C NZi|p_Q F = 5 0 + ( %$## " "!  &.6?JWfxk[ M B 9 1 , ' # !     #+3<GTcug W I>5.($           ! ( 0 : E R a s      c SF;2+%!        ' / 9 E Q ` q      _PC8/(#      $ , 6AN]o\M@6-&!      !)3>KZlXI=3+$     '0;HXjUF:0("     $-8FUg}QC7.&         !!*!5!B!R d zM?4+$  !# %&&&'''2'?&N&`&w%$#"!H<1("  !#%') , ....#...;.J-\-r,+*)(D 8!.!&!  !#%'),.03 5 6666)666E5W5m4210/?$4$+$$#!  !# %(*-/2479;> @AA@%@1@@?R>g=<:98:(0()'#%#$%( *-0368;>@BEGJ MMLL+K:JLIaH|GECB6,-+')#'(*- 037:=@CFHKMPSVY [[Z%Y4XFWZUtTRPO30,.',-/2 6:?BFILORUXZ]`cgk lkk,i=gRfjda_]13,1"259 =BGLPTX[_behknquy} $~5|I{axvsp16&8;@ EKQV[`einrvy|~+@Ys+> AG MT[ahnsy~!5Mi#HNT\dmu| )A\|U\enw6Qn߱  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C#K2UE^Zepl׺p̲tëvy·}˱ӫܥ楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗楗%0:C"K2TE]Zdqjo˸r±twĴ{ͫԢۙᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚᙚ%0:C"K1TE\[cqimɿpruëxʢ|љؐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐݐ%0:C"K1SE[[argknqsvȚyΒ~ԉ؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉؉%0:C!K1RDZZ`rejmprtĔwʋ{τԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄԄ%0:B!J0RDXZ^rdiloprvƆz%09B J/QCWZ\qdiknoqtx{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}$0 9BJ/PBUY[pchkmoqt}ww|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|w|$0 9BJ-O@SY[ocgjmoqszwt{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{t{$/ 8AI+M@RXZmbgjmoq{tvwq{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{q{$/ 8AI(L@QWYkazgknp}sxusxn|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|n|$/ 8AF(LAPUXfatg~korzuuxq{l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~l~#- 6 =F*K@OQX`akhtm{qytuxr{n~kւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւkւ#,/;E+I=NLWXaaiionytruwuqzwn}yk{i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|i|""':B*F9MEVObV~j\wp`sucoxem|gjhhjfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfkfk& :>'D3K=UE|aKujOppRluTjyVh|WfXdZc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[ & 6;#A,J4xS:q_?liChoEetGcwHb{Ia~J_J^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K^K"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8AI+S<]Ofcowuؤ{Λȓŷ˴}ϮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮyѮy"- 8@I+R<\Oedmxsըy̟}ŗŶ̲ү֧~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~ӧ~"- 7@I+R<[Pddlyrӭwʤzœ~÷ʲҮئڡաաաաաաաաաաաաաա"- 7@H+QG(N9TNYe`{fjmoruxz}tqqqqqqqqqqqqqqq!, 5>G'M8RLWd_zfjloqt|wv|qnnnnnnnnnnnnnnn!, 5>F%M6OLUc_xeiloq~txws{nkkkkkkkkkkkkkkk!, 5>F"K4OLTb^tdimorzttxp{khhhhhhhhhhhhhhh!+ 4 =EI5NLS_]pd}inq{tvwqym}iŁfąfąfąfąfąfąfąfąfąfąfąfąfąfąfą *3 <BI5MJR[]ietj}o|swwszo}lрhЄeχeχeχeχeχeχeχeχeχeχeχeχeχeχeχ )13 B!H5LFQU]`ejlq}qvwvzsy}o|l߀iރg݇e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉e܉%"2A"E3JAQM]Vf^}ndvshrxkn|mlojpgresctctctctctctctctctctctctctctct1>"B/H:PD\K{gQtnVosYlx[i|]g^f_d`baababababababababababababababab 2:?*F3O:x[@qfElmHhsJfwLd{MbNaO`P^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q^Q  05<$|D+sM1lX5gc9ck;aq=_u>]y?\|@[AZAYBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>G&Q4[EeWohxyےԋυˀ|yvtqooooooooooooo+ 6>F%P4ZEdWmiw{}ٖюˈǂ~zwuµqórrrrrrrrrrrrr* 5=F%O4YFcXlku}ߣ{՛͒Nj…|ùyǵvʭuƫvīvīvīvīvīvīvīvīvīvīvīvīv* 4=F%N4XFaYjlsݨxӟ~ʖĎŷ˴|ϫxϥyȤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤyƤy* 4=E%N4WF`YimqܬvФ{Țŷ˴βѤ|џ}ʞ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}Ȟ}* 4<E$M4WF_YgnoڱtϨyş}Ƶ˯ϪҞә̘ʘʘʘʘʘʘʘʘʘʘʘʘ* 4<E$M3VF^Zfomٶsͭwĥ{Ʈ̨ϢҙӔ͓˓˓˓˓˓˓˓˓˓˓˓˓* 3<E$L3UF]Zeolػq̲uí|ƨˡЛӔԏΏˏˏˏˏˏˏˏˏˏˏˏˏ* 3<D#L3UE\ZdojoʹtzƢ˛ϕҏԊΊ̊̊̊̊̊̊̊̊̊̊̊̊* 3<D#L2TE\Zbphmżsx}ŝ˕ϏҋӆΆ̆̆̆̆̆̆̆̆̆̆̆̆) 3;D#L2SEZZ`pflqw|ŗʐΊхҁ΁́́́́́́́́́́́́) 3;D"K1RDYY_pdjoty}Ðȉ̃~}|||||||||||||) 2;D!K1QCWY]ocimptx†}ƀzvvwwwwwwwwwwwww) 2;C K/PBVW[nchlnqt~xw|rmmnnnnnnnnnnnnn) 2:CJ.O@RWZmbgknqtywt{njgfffffffffffff) 1 :BJ+L?QVYka|gknq{tuxp{lhdccccccccccccc(0 9BG(L@QUXhawglo~sxvryn|ifbaaaaaaaaaaaaa'/ 8 AF*L@PSWcapg{mqzutyp|lh̃dˈaʍ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ`ɏ&-4<F+J>OOW\ahhqnx{s}uxq{mjڃgنd׋a֐`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց`Ց#&)<D+H;MIWTa]je|pjvvnqzqm~tkvhwfycza|`|`|`|`|`|`|`|`|`|`|`|`|`|( ;A)F6LAVKaR{kWtq\ov_l{aicgdefcgah_i_j_j_j_j_j_j_j_j_j_j_j_j_j ) 9>&D0K9T@xaFrjJlpMivPf{QdScTaU`V^W]X\X\X\X\X\X\X\X\X\X\X\X\X\X )4:!A)zI0rR6l^:hh=do@atA_yC^}D]E\E[FZGXGXHXHXHXHXHXHXHXHXHXHXHXHXH* 06w>"nG(fP,aZ/]d1[l3Yq5Xu6Vy6V|7U7T8S9R9R9R9R9R9R9R9R9R9R9R9R9R9R9) 5;D!N-YFI3NIT]\nc}imq{usxn|ieb_^^^^^^^^^^^^$,4 =BI3NHRZ[icvio~swwq{lhʃdɈaǎ^ƕ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ\ƛ#*25 BH4LFQU[bdmkvp}yuszn~kׂgՆdԋaӐ^і\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ\ћ!&%3B!G3KBPO[Zecljzrptxto|wlzh|f}c`^ߖ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ\ޚ3@"D0I=PH[PeWzm]tsaoydk~ghifjdlbm`n]p\q\q\q\q\q\q\q\q\q\q\q\q 3< B,H6O?ZFxeKqmOlsRiyUf~WdXbYaZ_[^\\][^[^[^[^[^[^[^[^[^[^[^[^  39?&F.zN5sX:mc?ilBerDbwF`|G_H]I\J[KZLXMWMWMWMWMWMWMWMWMWMWMWMWM! .4; vC'mL,fT0b`3^i5\o7Zt8Yy9X}:W;V;UR>R>R>R>R>R>R>R>R>R>R>" )~0s8i@bI#[Q&WZ(Ub*Ri+Qo,Ps-Ow.Nz.N}/M/L0K0K0K0K0K0K0K0K0K0K0K0K0K0(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(4:BK'W4bBmOx\gq삓y|xtqomlk˜i̚e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛e˛(39BK'V4aBmPw]hr냒{}xtronlk›iʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜfʜ'28AJ'T4_CjQt_~l펈x燏―{wtqomlægæiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡiǡ'1 7@I'S4]ChSrb|pꔅ}㋋݄~zuromikmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥmĥ'0 7@H&R4\DfTpdys瘂ߏوҁ{vspmknppppppppppp&0 6?H&Q4[DdUnewvܔԌ΄}xutpoqsssssssssss&/ 6?G&P4YDcUlgux|٘ѐʇł|ztrtvvvvvvvvvvv&. 6>G%O4XDaVjhszz͔֝ƍ}yvxyyyyyyyyyyy&. 5>F%N3WD`Vhip{ުwП|Ǘ~y{}}}}}}}}}}}&- 5>F$M3VD_Vgin}֬sʣz~&- 5=F$M3UD]Vej߸k~ЯqŦx~%, 5=E#L2TC\Vcjڻi~̲pv|‹Š%, 4=E#L2SC[VajԿh~Ƕntz†„%, 4<D"K1RBYU`jf}¹lrx~€%, 4<D!K0QAXT^ie|kpv|}{yzzzzzzzzzzz%+ 3<D J.P?VS]hc{iotzzwtsttttttttttt$+ 3 ;CJ,O=UQ[gbzgmrx~ytpnmnnnnnnnnnnn$*2 :BI)L;SQZe`xfkpv|xrmjgghhhhhhhhhhh#)1 :BG%K;QPYc_tejosuxn}iea__bbbbbbbbbbb!(08 @E&K;OOW`_of|lqzuszlgDŽcƊ_đ\ęZäZİZİZİZİZİZİZİZİZİZİZİ &.3<E(J;NLV[_hgsm|~rvxp}kԂf҇cь_ϒ\ΙY΢XͫXͫXͫXͫXͫXͫXͫXͫXͫXͫXͫ#&);D)I:MHUU_`hhopxuurzym}ie߉bݎ_ܓ]ۙZڡX٨X٨X٨X٨X٨X٨X٨X٨X٨X٨X٨) ;C(G6LCUM_Vi]ypbsvgn|jjmgodqar_t]uZwXxXxXxXxXxXxXxXxXxXxXx ) ;@&E2KG"R-]:iGtS~_ir}yxtpmkjiȓfϕdѓeԎeԎeԎeԎeԎeԎeԎeԎeԎeԎ&0 5=F!P-[;fHqV|bmw耕zuromkiɞeɞg͘iѓiѓiѓiѓiѓiѓiѓiѓiѓiѓ&/ 4=F!O-Z;dIoXyeqꋌ|䃒}xtpmkf§hƢj˛lΖlΖlΖlΖlΖlΖlΖlΖlΖlΖ&. 4<E M-X;bJlYvhu珉ڀzupmkhkæmȟo̙o̙o̙o̙o̙o̙o̙o̙o̙o̙%- 3<D L-W;`KjZtj~y䓆܋Ճ|wtspknpƢrʜrʜrʜrʜrʜrʜrʜrʜrʜrʜ%, 3;DK,U;_Kh\qlz|ߗՎͅǀ{xvupqtĤuɞuɞuɞuɞuɞuɞuɞuɞuɞuɞ%+ 2;CK,T;]Kf\onvՙ}̑Ŋ|zytuwæyǠyǠyǠyǠyǠyǠyǠyǠyǠyǠ%* 2:BJ+S;\Kd]loۥsΝzŕ~}zy{|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ|Ƣ%* 1 :BJ+R:ZKb^jpөpȠw~}ţţţţţţţţţţ$) 1 9BI*P:YKa^ܵgqάoäu|ĥĥĥĥĥĥĥĥĥĥ$) 1 9AI)O9WJ_]ֹfpɰmszææææææææææ$) 0 9AH(N8VJ^]Ѽeoijkqw~ææææææææææ$(0 8@H'N7UH\\̿coipu{~{}}§}§}§}§}§}§}§}§}§}§$(/ 8@G&M5TF[[bnh~nsz~zxuwx§x§x§x§x§x§x§x§x§x§#'/ 7?F#L2REYZ`lf|lrx~}xtqopr§r§r§r§r§r§r§r§r§r§"'. 6>F K.PDXX^kezjpu|}vqmjijkækækækækækækækækækæ &-5 =DH-OBVV]hcxhnt}zvpkgecdeŤeŤeŤeŤeŤeŤeŤeŤeŤeŤ%,3 <@H.MBUT[eatfl~rvyoƁjʼneŒbĝ_ħ]Ĵ^Ĥ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ_Ƞ#)14 AG.LASRZaanhynzur|k҂eψ`͏\̗ZˠX˫W˺Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙Y̙ %$2 @G/K?QNZZbejn}ruux{o~i݄dۊ`ّ]ؘZ֠X֨VմTTTTTTTTTT1@E.JC+H7OAYI}cPwmVptZkz^hadcae_g]hZiXkVlTmTmTmTmTmTmTmTmTmTm 2;A'G1N9zX?sbEnlIisLfzOcQ`S^T\UZWYXWYUZT[T[T[T[T[T[T[T[T[T[Ϳ!17>"}E)uM0nU5i`9ej_w@\~BZCYDWEVFUGSHRIQJQJQJQJQJQJQJQJQJQJϸ#-3y;pC"iJ'bR*]\-Ze0Xm1Vs3Ty4S~5R6P7O8N8M9L:K:K:K:K:K:K:K:K:K:K:"( v/m7e?^GXN!TW#Q_%Ne&Ml'Kq(Jv)I{*H*G+F+E,D,C-C-C-C-C-C-C-C-C-C-t# i*`2Y:SBNIKQHXF]DcCgAl@p?t >x =| qJ}U^g{nvsrxo}ligƆeψb׊aوb݂ccccccccc}y&|. 2:CL'X3c?nLzWbk~syztpljhƏfђbђdՌeۆf݂f݂f݂f݂f݂f݂f݂f݂f݂}z&, 1 :BK&V3a@lMvZfp삔y{uqmkișd˛eΗgґh؊iۆiۆiۆiۆiۆiۆiۆiۆiۆ~{&+ 1 9BJ&T3_AiOs]~j쌈u煑~xrmlkŠgǠh˛jДlՍlىlىlىlىlىlىlىlىlى~{%* 0 8AI&R3]AgPq_{m參zއ~xtqonkţkȟm͘oґp֌p֌p֌p֌p֌p֌p֌p֌p֌|%)/ 8@H%Q2[AdQnavpܑ~҉˂}xusrpæoƢq˛sГtԎtԎtԎtԎtԎtԎtԎtԎtԎ|%(/ 7?G$O2YAbRkbޞrsҕzʍÇ}ywvvsåuɞwϖwґwґwґwґwґwґwґwґwґ}%'. 6?G#N1WA`Rhd֢pt̙wÒ~{zywyǠz͘{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ{ѓ~$&. 6>F#M0V@^RݮfdХnsƝu|~}{}Ƣ~̙ДДДДДДДДД~$&- 5=E"L0T@]Qײdc˩lsszŤ˛ϕϕϕϕϕϕϕϕϕ$%- 5=E!K.R?[Qѵccƭjrqw~ĥʜΗΗΗΗΗΗΗΗΗ#%, 4 <DK-Q=ZP͸abhqo~u|æɝ͘͘͘͘͘͘͘͘͘"$,3 <CJ+Q;XOȼ`agpm}sy|zzæ{ɞ|͘|͘|͘|͘|͘|͘|͘|͘|͘!$+3 ;BI(O9WN^`eok|qx~}xussæuɞv͙v͙v͙v͙v͙v͙v͙v͙v͙ #*2 :AH%M8UL]^cnj{ov|{vqnlmæoɞp͘p͘p͘p͘p͘p͘p͘p͘p͘")08@F K6TK[\blhxnsz{uokhffŤhʜi͗i͗i͗i͗i͗i͗i͗i͗i͗!'/6 >CJ4RHZZ`ifvlr{xtnieb`_Ša̚bϕbϕbϕbϕbϕbϕbϕbϕbϕ %+18C I3QFXW^edrj||ptwn~hÇc_\[³ZŚ[ϕ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ\ґ!"%7C"H3ODVS]`ck~juup}nwgbЇ^БZМXЧVеUǑVԎV֋V֋V֋V֋V֋V֋V֋V֋V֋&7B#G2L@UM]Xeaylirtol|tgxb{^~[XߧUޱS޾R҃Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂Q܂ &8@"F0K!D,J5S>y]ErfJmoNhvRd~UaW_Z\[Z]W^U`SaRaPbPbPbPbPbPbPbPbPb ָ ) 5;B&}I.uQ4o[:ie>enAbuD_|F\HZIXKVLUMSNQOPPOQOQOQOQOQOQOQOQOQگƼ+ 18y@ pG&iO+cX/_b2\k4Zr6Xx8V9T;RN>M?K@JAJAJAJAJAJAJAJAJAȵ & -u5l=eD^L"XT%U]'Re)Pl*Ns+My,L-J.I/H0G0E1D2C2C2C2C2C2C2C2C2C2 }!r( h0`8Z@THOOLWI]Gc Ei Do!Bt"Az"@#?$>$=%<%;&;&;&;&;&;&;&;&;&znd# \+ U3O;IBFIBO@U>Z<_;d9h8m7r6w5|43222222222pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl)i3 r7 y>}GQ!~_)|m2y{9v@sEpJnNkQiShUfWcYa[_\^]\^[_Y`Y_Y_Y_Y_Y_Y_Y_Y_pl(k1 u6 {<FP!^*~k3{x;xBuHrMpQmTkWiZg\e^b_`a^b\c[dZdZbZbZbZbZbZbZbZbqm(n0 x4 ;DN![+h4u=|EyLvRrVoZm^jahcfecgai_k]l[m\h\g\g\g\g\g\g\g\grn(q. {2 :CL!Y+e5r?~H|PyVu\r`ndlhikgmdpar_s\t\q^l^k^k^k^k^k^k^k^kso't-~1 9BK!V+c6oA{KS|[xatgpkmojshvexbz_|]{_v`p`n`n`n`n`n`n`n`ntp'v+/ 8@I!T,`7lCwMW`zgvnrsnxk|hf͂b؄_܅`azctcrcrcrcrcrcrcrcrtp&y*. 7?H R,^8iDtP[e}nwur|njgeʍbԎb؊c܄e~fxfvfvfvfvfvfvfvfvuq&|(- 6>G P+[8fEpR{_ꅅj~tx}rmjhhÑgђeԏgىh݂i|jyjyjyjyjyjyjyjyvr&', 5=FN+Y8cFmTwboڀ{zuqnlkk˕iДkՍlۆmm|m|m|m|m|m|m|m|vs%&, 4<DL*W8aGjVre،{sυ|zvspooĘm͘oӐp؉qނqqqqqqqqwt%%+ 3 ;CK)T8^GgWڙogϑxsNJ}zwtsrr˚sГt֌u܄uށuށuށuށuށuށuށuށxv$#*2 :BJ(R7\GޥdXѝmfȕus|}{ywvwʜwϖxԎxۆx݃x݃x݃x݃x݃x݃x݃x݃xx##*1 :BI'P6ZFةcW̡kfšrrz|}{{{ƞ{͘|Ӑ|و|܅|܅|܅|܅|܅|܅|܅|܅yz"")1 9AH&O4ߴYEҭaVǥieprw|~ž̚Ғ؉ۆۆۆۆۆۆۆۆy{!"(0 8@G$N3۸WDͰ`V©gdnqu{|˛ѓ؊ڇڇڇڇڇڇڇڇz} !(/ 7?F"N0ռVCȴ^Ufclps{z~~ʜД֋ووووووووz!'.6 >EL/пTBķ]Sdbjoqzw~}zxwʝyϕy֌y؉y؉y؉y؉y؉y؉y؉y؉{ &-5 =DI.SA[Rbainoxu|{wsqpȝrϕsՌt؉t؉t؉t؉t؉t؉t؉t؉|%,3 ;BH,R@ZQa_glmwtzzupljiślДm֌m؉m؉m؉m؉m؉m؉m؉m؉}#)18 :F*P>XO_]ejktq}xztnifcbØeѓf֋gىgىgىgىgىgىgىgى~!&,19D(N;VL]Zcgiqoyzvs}mhc`^\”^Ӑ_ى`چ`چ`چ`چ`چ`چ`چ`چ  ,;D%L8TI[Wachl{nusu{l|gb^ZXWX׋Y܅Y݃Y݃Y݃Y݃Y݃Y݃Y݃Y݃,;D%K5RDYR`]|fftmnlttf|yaͅ}\̎Y̙V̥T̳SąS݃S~T}T}T}T}T}T}T}T} , <C%H3P@YK~`Tvh\oobhwhcl^ވpZޑsWޛuTާwRߴxPxOxOuOtOtOtOtOtOtOtOt۸ - ;A$G/N:~XCwaJpiPjqUeyYa\]_ZaWcUeRfQgOhNhMhMhMhMhMhMhMhMh ݮ̼ / 9?!F*|M2uW9n`?iiCdqGayJ]LZOXQVRSTQUPVNWMWLWLWLWLWLWLWLWLWδ / 6=xD$pL*jT/e^3ag7]o9ZvV?SAQBPCNEMEKFJGIGIGIGIGIGIGIGIGѮ"+ ~2u:lBeI"_Q%ZZ(Wc+Tk-Rr/Py0O1M2K4J5H5G6F7D8D8D8D8D8D8D8D8D8{' q.h6a>ZFUMQUN] Kd"Ik#Gq$Fx%D&C'A(@(?)=)<*<*<*<*<*<*<*<*<*wm"d* \2U9PAKHHOEVB\@a>guEqKoPlTjXh[f]d`ab^c\e[fZc[`][][][][][][][][ie(n+x. 6?HS%`/l8|yAxItPqVnZk_hbfedhbk_m]n[m\h^d________________jf(q){, 5 >GP%]/i:uD|MxUs\oblgikfocrau`w\x^r_m`hbcbcbcbcbcbcbcbckg't'+3 <EN%Z0f;qF|Q|Zvbqilphudzb~aa_~awbrcmdgdgdgdgdgdgdgdglj&w&*2 ;CL$W0bF M-X<٠aL͘jYőreznv}}ywuttƏu֋v݃v|vtvtvtvtvtvtvtvtou%-5 =EL+߫W;Ҥ_KȜhYodwnv}~{yxxzՍzۅz~zvzvzvzvzvzvzvzvpv%,4 <CK)گU:ͨ^J fXmdun|v}~}}ӏ~ڇ~~w~w~w~w~w~w~w~wpx$+2 :BJ'ԳS9ȫ\IdWkcrmyu|Αو߁yxxxxxxxqz#)1 9@ݼH%϶R8ï[HbVjbplwu~||{ˑ|؉}ނ}z}y}y}y}y}y}y}yq|"(/7 ?F$ʺP7YGaUhankut|{|xvtȑv؊w݂wzwzwzwzwzwzwzwzr &-5 <D#ŽO5XF_Tf`mjsszzzuromŐp؊p݃q{q{q{q{q{q{q{q{s$*15B!M4VD^Rd^khqqxx~ytokhgŽi؊j݂k{k{k{k{k{k{k{k{t %*2 AL1TB\Pb\ifonvuy}{smheb`bوcށezezezezezezezezv0 ?J/R?ZMaXgbmkytqr{wl|gb^\Z[ڄ]^x^x^x^x^x^x^x^xz / =H,P;XI_Te^ylfrrlkzrfvaz\}YWUUVzXuXtXtXtXtXtXtXt 1 =F'N7VD]OzdXrj_kreeyj`ɂo[ɋrWȖuTȢwRȯxQxPwQsRoRoRoRoRoRoRoRo ߮м 1 =D&L3T>{\GscOkjVer\`z`[كdWٌgSٗjP٣lNٱmMmLlMjNgNgNgNgNgNgNgNg Ѵſ"3;B$I.{S6s\>ldDglIbtM^|QZTVVSYQZN\M\L]K]J\J\J\J\J\J\J\J\Ԭŷ$2:A xH'pP.jZ4ec8`k<]t?Y|BWDTFQHOJMKKLJMIMHMHMHMHMHMHMHMHMڣDZ'/ }7t?lG fN%`W)\`-Yi0Vq2Sx4Q6O7M9K:I;HD>D>D>D>D>D>D>ˬ$z, p4h<aD[KVS S["Pc$Mk&Ks'Iz)H*F+D,B-A.@.?/>0>0>0>0>0>0>0>0 v l( d0 ]8W@QGMNJVG\DcBi@p?x=; :!8"7"6#5#5#5#5#5#5#5#5#} rh_#X+ Q3 L: GACH@N=T;Z9_7e5k3r1z/.,+********xn cZRK$F,A3 <: 9@ 5E 2J 0P .T,Y*^(d&j%q#x" \"W-X3_6 c= eFfPe^dn"a|'_+^.\1[3Z5Y6X7X9W9V:U;TU>T?S?R@R@R>R>R>R>R>R>R>]!X,\0d3 h: kClNlZjj$gx)d.b2a6_8^:]<\>[?ZAYBWCVDUDTETETDTBTBTBTBTBTBTB^!Y,_.f2 l8 oAoLqWng%ku+h0e5d9b<`>_A^B]D\FZGYHWIVJUJUJVGVEVEVEVEVEVEVE^!Y+b-j0o6 r@tJuUrd&or-l3i8fxHyRw`'tn.p{5m;jAgEeIcLaN`Q^S]U[VZXXYYVZS[O[M[M[M[M[M[M[M` ])h)q+x3 |<}F~P}](yj0uv8q?mEjKgOeSbV`Y_\]^\`ZaZ`[[\W]S^Q^Q^Q^Q^Q^Q^Qa`'k&u)|1 :DMY(f2zr;u~CqKmQiVf[c_`c^f\i[kZk\f^a_\`XaUaUaUaUaUaUaUbc%o$y(0 9BKV(b3n=zyGuPpXk^fdci`m_o^p^q]q_kafbac\cXcXcXcXcXcXcXcf#r"}'. 7@IS(_4j?tKx~Ur^mejjgmepcsbtauavcqdjeef`g\g\g\g\g\g\g\ch!u %-5 >GO([4fAoN}yXw`sgollpisgvfxeyeyfvhoiiicj_j_j_j_j_j_j_dk x$,4 <EM'Y4bB׉lN΃uX}~axhtmprnulxj{i|i}jzlrllmfnbnbnbnbnbnbnbem{#*2 ;CK%V3ږ`AώiNLjrXza}hynusrwpzn}m~mn~pupoqhqdqdqdqdqdqdqdeo~")1 9AI#ޡT1Қ^@ȓgMoXwah}nzswxt{s~qqr؁txtqukufufufufufufuffq!(/7 ?H ئR0̞\@×eMmWta|hn~t{xy|wvuvтxzxsxlxhxhxhxhxhxhxhgs &.5 =߯FҩQ/ǢZ?cLjWr`yhntx}||zzz̓|||u|n|i|i|i|i|i|i|igu%,4 ;۳DͭO.æY>aKhVp_wg~nsx|ʄ}vojjjjjjjhx#*19 շBɰN-W=_JgUn_uf|msx|}{yDŽz{w{p{k{k{k{k{k{k{kiz!'.޽5 к@ĴL,V;^IeTl]sfylrw|{wtrăttxuqvlvlvlvlvlvlvlk}#)0 ˽?J*T:\GcRj\qdwkq~vy{t~pmkmnxoqplplplplplplpln!-=I(R8ZEaQhZobui~|oxtsyn|jgeehxiqjljljljljljljlq+;G&Q6XC`NfXm`~sgwzlrrlvhyd|`}_~^}avbpclclclclclclclt (9E#O3W@^KdT~k\wqcqxikmfrau]x[yYyXyZs\n]j]j]j]j]j]j]jy ܮһ %6B L/T<\GbPwiWpp^jwceh`l\oXqUsSsRsToVjWgWgWgWgWgWgWg ҳɾ#3 @J*R7ZAxaJphQjoWdv\_`ZňdVĒgSĞiPĬjOļkNjOhPdQaQaQaQaQaQaQa Ԫȶ %5 >H%P0xX:p_BigIcnO^vSYWUӉZRӓ]OӠ_Mӭ`KԾ`J`K^L\LZLZLZLZLZLZLZڢʯ (4=D"wN*oW2i_8cg=_oBZwEVISKPNMPKQIRHRHRHQHOHOHOHOHOHOHOͩ *3|;tClK#fT)a]-]f1Yn5Vv7S:PK@IAGBFCECDCDBDBDBDBDBDBDBѢ (y1 p9iAbI\P WY#Tb&Qj(Os*L{,J.H/F1D2C3A4@4?4?5?5?5?5?5?5?5Ī~u%l- d6]>XERMOUL\IdGkDs B|"A#?$=%;&:&9'8'8(8(8(8(8(8(8(zpg!_)X1 R9 MAIHEOBU@\=b;i9p7y5320//.......vlbZS$M+G3 C: ?A ;G 8M 5S3X1^/d-k+s)|'%$#"""""""~pg] TMGA$<+72480=-C*H (M &R $W "] c k s |          R%M/Q2W5Z< [EZOY]XmV{U"S%R'Q)P*P+O,O-N.N.N/N/M0M0L0L0L/L/L/L/L/L/L/S$M/T0Y4]: _C^N]Z[jZy!X$V'U)T+S-R.R/Q0Q1P2P2O3O3N4N4M4N2N2N2N2N2N2N2S$N.V/\2`8 bAbL`X_h]v"[&Y)X,V.U0U1T3S4S5R6R7Q7Q8P8O8O7P5P4P4P4P4P4P4T#P-Y-_0c6 f@fJeUceas#^(\,[/Y1X4W5V7U8U9T:T;SkHjShafp%c}*`/^3\6[8Z:XW?VAUBUCTDSDTAU?U\A[CYEXGWHVJVKULVJWFXCY@Y?Y?Y?Y?Y?Y?W"Y'c&k(q0t9 uCuMuY!qg)mt0j6fHR!~_+yk5su>nFiMeTaY_\]_\a[b[cZc\`_Z`UaQbMbKbKbKbKbKbKY!b nx#+3 <EN![+~f6xpArzKmRiXf\d_bb`d_f^g^h_fc_dYeUePeOeOeOeOeOeOZ eq|")1 :CL X+b7~lCxvLsSoYk^ibfeehcjbkblbkfdg]hXiSiRiRiRiRiRiR[ gt '/7 @IU*ۊ_7фiC}rLx{TtZq_ndkgijglfnfofojhkal[lVlUlUlUlUlUlU\jw%-5 >FޖR)Ґ\7ʉfBÃoL~wTy[u`rephmllnkpjqjqnkodo^pXpWpWpWpWpWpW^lz#+3 ;EכP(̔Z6čcBlLtT~|[z`wetirmppornsosrnsfs`sZsYsYsYsYsYsY_n}")09 ޥCџN'ǘX5aAiKqTy[`|eyjvmuqssstsuvpwhwbw\wZwZwZwZwZwZaq &.6 ة@̣L&œV4_@gJoSvZ~`e}j{nyqxtwuwvzr{j{d{]{\{\{\{\{\{\cs#*2Ҭ>ǦK$U3^?eJmRtY{`ejn~q}t|v}|v}~ske~^~]~]~]~]~]~]eu &۴.ί=êI#S1\>dIkQrYy_dinq|tyvwvvtylyfz_z^z^z^z^z^z^gw!շ*ɳ;H"R0Z=bGiPpXw^~di~myqvsrupvousmsft`t_t_t_t_t_t_izݹϺ(ķ9F P/X;`FgOnVu]|c}hxlsporltjuiulmmgn`n_n_n_n_n_n_l} տʾ&7DN-W9^DeMlUs[|zawfrjmniqfscsbsflgfh`h_h_h_h_h_h_o ڭ Ӹ #5BL*U7\AcJjR|qYvx^pckggkcn_p]p\p_kaeb`b^b^b^b^b^b^s ۥѱ˻ 2 @J'S4Z>aG|hOuoUovZj}_ecag]jYkWlVlXhZc[^\]\]\]\]\]\]x ߜҩɴ¾/ =H#Q/X:|_CufJomPitUd|Z_^[aWdTeRfQfRcT_U[VZVZVZVZVZVZ~ ֡ʭ +:EN*}V4u]=neDhlIcsN^{SYVUYR\O]M^L^L\NYOUPUPUPUPUPUPUݘͦ (7B}K$uT-m\5gc*=+;+;+:+:+:+:+:+:+:+~wog&`/Y7 T?OGKNGVD]Bd@l=u;~9765332 2 2 2 2 2 2 {r jaZ"T*N2I: EA AH >N;U8[6b4i2r/{-+*)('''''''zmd\TMH$B,>3:96@3E0K .Q +W )] 'd $l "v yk_VN GA<7$2*/0+6';%@"E JPV\dmw         I'D1K1P4R:RC QNO\MkLyKIHH G!G"F#F#F$F$F%F%F%F%F%F%F$F#F#F#F#F#F#I'F/M/R2U9UB TMRYPhOwNLK!J"J#I$I%H&H&H'H'H(H(H(H(H(H'H&H&H&H&H&H&J'H-P-U0X6Y@ XKUVTfRtQO!N#M%M&L'K(K)K*J*J+J+J,J,J,J+J)J(J(J(J(J(J(K&K+R+X.[4]> ]IZTYbWqU~ S#R&Q(P*O+N,N-M.M/L0L0L1L1L1M/M-M+M+M+M+M+M+K&N)V)\+`1b; bF`Q^_\mZz#X&V)U,S.R0Q1Q3P4O5O6N7N8N8O5P3Q1Q/Q/Q/Q/Q/Q/L%Q'Z&`(e/h9 hCgNeZbh _v%]*Z.X1W4U6T8S:R;Q=Q>P?P@Q>S;T8U5U3U3U3U3U3U3M$T$]#e%j-m6 n@mKkVhd!eq(b}-_2\6Z:X=W@UBTDSFRHQIRHTDV@X=Y:Y8Y8Y8Y8Y8Y8N$X!a j#p+s4 t>tHrRo_#kl*gw1c7`=]AZEXIVLTNTPTPSQTNWJZE\B\>\<\<\<\<\<\HT"~_.xi8ss@n|GkLhQeTcWbZ`\`^_^__bYeSgNgJgFgFgFgFgFgFWdp{"*2; DފQ!Ԅ\-~f8xoAtwHpMmRjVhYf\e_d`cacbe]iWjQkLkIkIkIkIkIkIYgs~ '/8 B֏N ̉Y-Ńc7}k@ytHu|NrSoWm[k^i`hcgdgdiamZnTnOnKnKnKnKnKnK[iv$,4ܚ?ϔLƎW,`7i@~qHzyNwStXq\o_mbldlfkfmdq\rVrQrMrMrMrMrMrM]ky!(0՞=ʘJT+^6f?nG~vN{}SxXv\t_rcqepgpgpft^vXvRvNvNvNvNvNvN_n{#ݥ+ϡ;ŜHS*\5d?lGsMzS}Wz\x`vcufthththx`zYyTyOyOyOyOyOyOap~ר(˥9FQ)Z4b>jFqLxRW\}`{czf}yh{yizyi||a~~Z~}U~}Q~}Q~}Q~}Q~}Q~}QcrߪѬ&Ǩ7 DO'X3`=hEoLvR}W[_~czfw~hu~is~ivbx[xVyQyQyQyQyQyQeuٯ̯$«5 CN&V1^;fDmKtQ{V[|_xbteqhnimiocr\sVsRsRsRsRsRsRhx ޠ ֩ Ҳ Dz"3 AL$U0]:dBkIrPyU{Zv^rbnekghhghicl\mWmRmRmRmRmRmRk{ ֣Ь ˵ 1 ?J"S.[8b@iHpNzwSu~Xp\l`hcdebf`fbbe\gWgRgRgRgRgRgRn ٛϦɯĹ/=H Q+Y5`>gEznKtuQo|UjYf]b`^b\cZc[`_[`VaRaRaRaRaRaRr ߓџɪ,:EO(W2^:yeBslHnsMizQdV_Y\\X^V_U_U]XXZT[P[P[P[P[P[Pw֘ˤ(7CL$U.y\6rc=mjCgqHbyL^PZTVVSXPYOYOXQTSPTMTMTMTMTMTM}ߏΝè#3 ?IyR(rZ0ka7fh.=.=.=.=-=-=-=-=-=-şztm f*_4Z= TEOLLUI]FeDnAw?=; 9!8"7"6"6"6"6"6"6"6"6"wo g`Z'T0O8J@ FH CO@V=^;e8n6w420/.-,,,,,,,uia [TN"I+D2@:+C(I%O#V!]eoz           ugXNHA ;61-")(%-"28=BHNU]g r }        ?*?0D0H3I9HBFM E[CiAw@?>>====<<<<<==========@*A.G.J1L7K@JK HYFgDuCBAA@@??????????@@@@@@@@*C,I,M/O5P>NI LVJdHrGFEDDCCBB B B!B!B!B!B!C CCCCCCCA)F*L)Q,S2T<TG QRO`MoL|JIHG!G"F#F#F$E%E%E&E&E&E&F$F#G!G!G!G!G!G!B(I'P&U(X/Z9ZD WOU\SjQwON!M#L%K&J'J)I*I*H+H,H,H,I*J(J'K%L%L%L%L%L%C(M$T#Z%^,`6`A ^L[WYfWrU~"S%Q(P*O,N.M/L0L2K3K4J4K3M0N-O+P)P)P)P)P)P)F%P!X _!d*f3f= eHbS`a]m Zy%X)V-T0R3Q5P7N9N;MR@QAPBPCPDPCR?U;W7X4Y2Y1Y1Y1Y1Y1M W`io%r-t7sAqKnXjd$en+ay3^8\IS'[0b8i>pDxI~MzQvUrXoZl\k\kYnRqMrHrGrGrGrGrGf u܏Ҙ̡Ȩ-<GQ%Y/`6g=nC}vHy}LtPpTlWiYf[e[eYhRkMlHlGlGlGlGlGi x֒͜Ƥ+:EO#W-_5f;}lAxsFs{KnOjRfUcX`Y_Z^XbRdMfHfGfGfGfGfGl|ފЖȟ(7 CM!U*\2|c9wj>rqDmyHhLdP`S]UZWYWXV[P]L_G`F`F`F`F`Fp֏ʚ$4 @JS'|Z.va5ph;ko@gwDbH^LZOWQTSSSRRUNWJYFYEYEYEYEYEuϓğ 1=H|P"uX*o_0jf6em;`u?\~CXGUJQLOMMMMMNIPFRCRBRBRBRBRB|׌ș ,: {DtNnV$h]*cd0_l4Zt9V|K=K=K=K=K=͒&z5sAlJfSa[#\b(Xj,Tr0P|3Mņ6JĒ9Gğ;EĮ#<$;$:$9$9#9$9$9$9$9$9$~si d_ Y+T5O>KF GN DWB_?g=p:{8653211111111~qe^ YSN'J0E9A@>H;O 8W 6^ 3g 1p .|,+)(''&&&&&&~pdXR MGC">*:2793?0F-M+T([&c#m!y            ~pcUKF@;73#/)+0(5%;"AGNU^htpbTF?94 /+'#!%*/4:@FN V `lx6-9.>.@2@8>A@J>W *C*F-G2F<EHCU Ab ?p=}<;;::::99999::::::::::9+A'F'J)K/L9KEHQ F^DlByA@@??>>>>==>>>>???????=(E$J#N%Q,R6QAOM LZJgHtGFEDCCBB B B!A!B"B"B CCDDDDDD@%H!O S!W)Y3X>VI RUQcOoM{KJI!H"G$G%F&F'E(E)E)F(G&H$I"I IIIIIC"LSY]&_0_:]E ZPX^UjSvQ!O$M&L)K+J,I.H/H1H1H1I.K+L)M&N%N#N#N#N#N#GPW^c#f,f6dA bL_Y\eYp V{%T)Q-P0O2N3M5M6L7L8L8M5O1Q.R+S)S'S'S'S'S'JT\ci l)m2l= iGfTc`_k"\u(Y-W0U3T6S8R:Q;PU?UATBTBUAW[AZCYDYEXFXF[@^;_7`3a1a1a1a1a1S]hpw|$-;zIuTq_$mh+jp1gy6e:c=a@`C^E^G]H]I\I_Db>c9e6e3e3e3e3e3U`kt{އ'ф7F{Qv[#re+om1lu6j|:h>fAdDcGbIaKaLaLcGeAgm:n7n7n7n7n7Ye q z ݎϏ ƍ2AMV"|_*xg0uo6sv:q}?oBmFlIjKjMiOiOjLmEo?p;q8q8q8q8q8[gs}ކٌ Ց ʒ0?JT!])}e0zl5ws:u{>sBrFpIoLnN|mO{mPznM|qF~sAt=u:u:u:u:u:]jvىҏϔ Ŗ.= HR [(c/~j5|q9zx=xBvEuI|sLyrNvrPtrPtrOvuGxwBzx>{y:{y:{y:{y:{y:_ lyރӋ͒ɗ,; GPY'a.h4o9v=}~A}{EyzIvxLswNpwPnwPmwOpyHr{Ct|>u};u};u};u};u};a o|نώȕÚ*9 ENW&_-f3m8t={{AwEtHp}Km|Nj|Oh|Pg|Pj~ImCn?olBhFeIaK^M]N\M^H`Cb?cHQ ~Y'x`-sg2on7ju];];];];];n~΋ĕ .; F~NxV#r]*md/ik4ds8`{<\?YBUESGQGPGQDS@UΨ&<κ&<&<%;%;%;%;%;%;%;%Óyod ^[ W-S:PDLN IW F_ChAq>|<߉:87665444444ymbXUQ M+I5E>BG?O=X :` 8j 6t 320.--,,,,,,,yl`UN JFC'?0;88@5G3O0W._+i)t' % $ # " ! ! yl_RHC?;7!4)00-7*>'D%K"S \frzl^PD<73 /+(!%'!-28?FMV`l {    {l^OB61,'# !&,1 7 >FOYft./3,7-80764?1K/X,f*t ) ( ( ( ( ' ' ' ' ' ( ( ( ( ( ) ) ) ( ( ( ( ( 0-6*9*;.:48<6I3V1c /q -~ - , , , , , , + , , , , , , - - - , , , , , 2+9(=(?*>0=:}==<<;;;;;;;;;<<======="DIMP&Q0P;NFKS H`FlExDCBAA@@????@@ABBBBBBB@HNRV#X,W7UBRM PZMgLrJ}HGFE D"D#C$C%C&C&D$E"F GGHHHHHDLRX]_(^2]=ZI WUUbRmPwNL"K$J&I(I)H*H+H,H,H+J(K%L"M MMMMMGOV^be$e-d8aC _Q\]XhVrT{"R&P(O*N,N.M/L0L1L2L1N-P*Q'R$R"R"R"R"R"JS[bhjk(k2i>fL bX_c\m Zv$X~(V+U.S0R2R3Q5Q6P7P7R3T.V+W(W%W%W%W%W%MV_ glpq"q,p:lH hTe_bh!_q&]y*[-Z0X3W5V7V8U:U;U;V7X2Z.[+\(\(\(\(\(PY c k ptvw%v6rD nPk[gd!em'bu+`|/_2]4\7[9Z;Y=Y>Y>Z;]5^1_-`*`*`*`*`*R\ f n t x{| {3wA tMpXla!ji'gq+ex/d3b6a8_;^=^?]@]A^?a8b3d0d,e,e,e,e,U_irx|  ́0|? xKuUq^!nf&ln+ju/h}3g6e9db@aBaBbAd;f5g1h.i-i-i-i-W alu{ӀЃ Dž-< }HyRv[ sc&pk+nr/my3k6i:hyn8zo4{p0|p0|p0|p0|p0[fr{ςɇĊ(8DNW|_$yf*wm.ut2t|6r9|q=yp@voBsnDqnEpnErp?sr9us5vt1vt1vt1vt1vt1]it}˅Ċ&5BLU]$~d)|k-zr2}xy5zw9vv HQY!`'{g+wn0su4o}7k;h>eAb~C`~D_~D`@b:d6e3f2f2f2f2dr~LJ .; FOWz^%ue*ql.ms2i{6f9b=_?\AZBYBZ?\:^6_2_2_2_2_2hv͂Œ +8CLyTt\"pc'kj,gq0dy3`7\:Y=W?T@S@T=V9W5Y2Y1Y1Y1Y1m{ȇ'5@ yJsRnYi`$eg(ao,^w0Z3V6S9Q;O&=&=&=%=$=#=#=#=#=#Ljsh`^[,W8TCPLMU J]GfDoAy?ȅ<ȓ:Ȣ9ɳ887766666th]S OM"K0I<FFDOAX?a5;>9G7P4Y2b0m.y,+ ) ( ' ' ' & & & & & th[OE> <96%4.17.?,G)O'W%a#l!zugZMB851.+)&%-#4 ;CKS]jxvgZL?5-*& # #)/5=E N XetwhZK>2'#   "(.5=GR^m~*-.+0+0..5)=%I#W!dr,+0(3(3+11-:+G(T&a$o"|""!!!!!!!!!""""""""""".(3%6%7'5-482D/Q,^*k)w('' ' ' ' ' ' ' ' ' ' '(((((((((2%7":!;#;);49@6M4Z1f0s. . . - - - - - - - - - . . . . . . . . . . 5";?@B&B1@<>H;U9b7n 6y 5 4 4 43333333444455 5 5 5 5 9?CFI#I-H8EDCP@] >i =t <;;::9999999::;;;;;;;=CHLOP(O3M?JJGW Fd DoCyBA@??>>>>>>?@@AAAAAAAGLRVW$V.T9QEOR M^ KiItH}FEEDDCC C!C!C!DEFGGGGGGDKQW[]]([3Y?WMTY RdPnNwLKJ J!I#H$H%H&H'G'I%J"KLLMMMMGO V \`bc!b,`:^H[T X_ViTrRzQ!P#O%N'M(M*L+L,L,M*O&P#Q RRRRRJR Z ` eghg$f5dDaP ^[\dZmXu W}#U%T(S*R,R-Q/Q0Q0Q/S*U&V#V!WWWWM U]di k lml1j@gL dWa`_i]q!\x$Z'Y*X,W.V0U2U3U3U3W-Y)Z%[#[![![![!O Wahmpp rq.o=lI iTg]debm!at%_|(^+]-[0[2Z4Y5Y6Y6\0]+^(_%_#_#_#_#Q Zdlqtu vv*t:qF nQkZibgi!eq%dx(b+a.`1_3^5^7^7^8_3a-b)c&d%d%d%d%S]gotxyzz(x7vD sNpWm_kg!jn%hu(g}+e.d1c4b6|b8zb9yb9yc4ze/{f+|g(|g&|g&|g&|g&U`jrx{}~~%}5zA wLtUr]pd nk$lr(kz+j.~i1{g4xg6vf8tf9sf:sg6ti0uj,vk)wk'wk'wk'wk'Wcmu{#2~? {JySv[tb ri$qp'~ow+{n.xm1ul4sk7pj9nj:mj:mk7om1pn-qn*qo(qo(qo(qo(Yepx~ 0=H}Q{Yy`wg#|un'ytu*vs}.sr1pq4mp7jo9ho:go:gp7iq2kr-ls*ls(ls(ls(ls(\hs{ .;EOW~^{|e"x{l&tys*qx{-nw0kv3hu6et8ct9at:at8cv2ev.fw+gw)gw)gw)gw)_lv +8C LUz\vc!sj%oq)l~y,h}/e|2b{5_z7]z8\z9\z7^{2_{.`|+a|)a|)a|)a|)boz(6A JzRuZqamh#jo'fw+c.`1]4Z6X7V7V6X1Y-[*[)[)[)[)fs~$2> yHtPoWk^he!dm%`u(]~+Z.W1T3R4Q5P4R0S,T)U(U(U(U(kxƒ ~/x;sE nMiUe\ac^j![r%W|(T+Q.N0L1K1J1L-M*N(N&N&N&N&p}~ zu*p7lA gJ cR_Y[aXhTp Qz#N&K)H*F,E,E+E)F'G%G$G$G$G$w„tol$h2d=_F [O XVT^QfNnKxH E"C$A%@%?%?#@"@!@ @ @ @ ~wjca^,Z8WBSKPS M[JcGkDuB?=;:99999999ymbVSR#P0M;JEGNEWB_ @h =r ;~8Ì6Û5ë333221111{ncXMD CB%@2?==G;P9Y6c4n2z0҈.Ҙ -ө ,Ӿ , + * ) ) ) ) ) |ocWLB9 542'120=.G-P+Z*e(q&%#"!  }pcVK@6/-+)"'+%4#<!ENXdqqcVI=3*&$ !")19AJUa o   rcVH;0&  $ + 2;DO\k}sdVG:.# $+3=IVfx%+()))(,#2;GUbp|()+&,&+)(/"8 DR_ly*&.#/"/%,+*5'A$N"[ ht."243 2&22/>,J*W'd&p%{$$$$$$$$$$$$%%%%%%%%%2688:#9-8:5F2R0_.k-v,,+++++++++,,, , ,,,,,,5:=?AA)@4=A:M8Z6e5q4{3 3 2 2 2 2 2 2 2 2 2 3 3 3 3 4 4 4 4 4 9>AEHH$G/D;BG?T>`>>>>>>?@@AAAAA@F K Q STT"R-P;OIMUK` IjHsG{FEEDCCCCCCEEFFGGGGDJPU X YXW$W5UDTPR[ PeNmMvL}KJIIH H!H"H"H"IKKLLLLLG MTZ]] \]]0\?ZLXW V`TiSqQxPOO N!M#M$M%L&L&N"OPQQQQQIPX^bca bc,b;`H]S [\ZdXlWtU{T T"S$R%Q'Q(Q)Q*R&T"UVVVVVLS\bfhggh(g8eEcP aY_a]h\pZwY!X#W%W'V)V*U+V,W)X$Y ZZZZZNW_fjlklm%l5jBgM eVc^be`l_t^{!]$\&[(Z*Z,}Z-|Z.{[+|\&|]"}^}^}^}^}^PYcjnpppq"p2n?lJ jSh[fbeicpbx!a$`&}_){^+x^-v^.u^/t^-u`'va#wb wbwbwbwbR\fmrtttut/r=pG nQlYj`ighnfu!}e}$zd'wc)uc,rb.pb/ob/nb.od(pe$qf!qfqfqfqfT_ipuxxx yx-w:uE rNpVo^md}lkzks wj{#ti&rh)og,lf.jf/if0hf/jh)ki%li"lj lj lj lj Wblsx{|| }|*{8yC wLuTs[{rbxpiuop rnx#om&ll)jl,gk.ek/dk0bk/dl*fm&fm#gn gn gn gn Yeov|(5~A|J ~zRzxYvw`svgptnmsv#jr&gq)dq+bp-`p/^p/]p/_q*`q&ar#br br br br \irz%3>~H yPu~Wq}^n{ekzlhyt"ex}%bw(_v*\v,Zu.Yu.Xu.Yv*[v&\w#\w \w \w \w `lv~!0~;yE tNpUl\icfjbr _{#\~&Y})W|+U|,S|-R|-S|)U|%V|"W| W| W| W| dpz},x8sBnK jSgZca`h]pZy!V$T&Q(O*M*M*M'O$P"PPPPiu~ yu(q5l?hH dP aW]^ZfWnTwQ N#K%I&H'G'G$H"I JJJJn{upm#i0e;aE]M ZT W\TcQkNtKHE C!B"A"A BBCCCCuyjec`+]6Y@VISQ PY M`JiGrD}B?=<;;;;<<<<|}qdZWU#S0P;MDKMHUE] Ce @o >z;97655444444th\PI HF'E3C=AG?P=X:a8k6w4 2 0 / . . - , ,,,,vj^RG=876'534=3G1Q0[.e,q*)̐'̡&ʹ%%$#####xk_RG=4+ &%%%$0#;#E"P![ hvއߙ߬yl_RF;1)!'09CNZgw {m_RE9/% % - 5 ?JWfw}n`RD7,"  '0:ESbupaSC6*  !)4@N^r )"'"'*09E S ` m y             #&%$%$#',5BP]jv         &#( ( &""( 2?LYeq|*,,+)$(/%;"HTamw-0101 0*.6+C(O&\$g#r#|""""""""""###$$$$$$$146798%613=1J.V-b,m+w+*********++,,,,,,,,59: >@? =*;78D6Q5\4g3r3{222111 1 1 1 2 2 3 3 3 3 3 3 3 3 9= @ D FED#A/?<>J=W>>>>>>?@@@@AAA? DJNPO LLM0M?LLKWIa Hi GqFyFEDDCCCCCDEFFFFFFBGOSUUR ST+T;RHQRP\ Nd MlLtK{JJIIHHHHIJKKLLLLEKSX[[XXZ'Z7XDWOUX T` ShQoPvP~ONNMMM M MOPPPQQQGOW]``^]_#_3^@\KZT Y\XdVkUrTzTSRRQ!Q"Q"~R!~S~T~U~U~U~U~UJR[adecbc c0b=aH_Q ^Y \a[hZoYvX~WW}V!{V"yV#wV$vV$vWwXwYwYwYwYwYLV_ehihg hh-g:eEcN bW a^_e^l]s~\{{\y[vZ!tZ#rZ$qZ%oZ%p[ q\q]q]q]q]q]OYbhlmlk ll*k7iChL fT e[cb}bizapxaxu`s_p^"n^$l^%k^&i^&j_!k`kalalalalaQ\ekoqqoop'o5n@lIjR ~iY{h`wffufnrevpd~mckc"ib$fb%eb&db&dc"edfdgdgegegeS_hosuusst$s2r>pG}oO ymWvl^skdpjlmjski|hhfg"cg$af%`f&_g&_g"`hahbhbhbhbhWbkrwyywxx!x/w;|uExtM trUqq\npckojhnqfnzcm`l!^l#\k%Zk&Yl&Zl#[l\m]m]m]m]mZfov{~~||}}-||9wzCsyK pxS lwZivafuhctoasx^r[r Yq"Wq$Uq%Tq%Tq"VqWqWqXqXqXq^isz {)v6r@nIj~P g}Wd|^a{f^zm[zvYyVxSx!Qw"Pw#Ow#Ow!PwQwRwRwRwRwbnw} xt&p2l=hFeN aU ^\[cYkVtS~PNL J!I!I~J~K~K~L~L~L~gs||uom!i.e9bB^K[R XY VaShPqM{JHFDCCDDEEEEmxylfca)^5Z>WGUORV O^ LfJoGyDB@>===>>>>>ssd\ YW"U/R9PCMKJSHZEc Cl @v>;9877666777{wk_RMKJ'H3F=DFBN@V>_;h9s7 4 2 1 0 0 / / / / / / {ocWKA>=;):49>7G6P4Z2d0o.|,*)(('&&&&&~qeYMB8/ -,+)*3)=(G'Q&\%h#v"Ɔ ƘƫsgZNB8/& %/:DP]k|׏ؤٻuh[NB7-$ # - 7 B O ]mwi[NA5*!  "*4?L\myj\N@3(  &0<IZm{l]O@2&  !+7FXk&$$'- 6CP^kv#!!#)2 @ MZgs}""!$/<IV b n y         %&%! !+7EQ^it})*)'(''#3 ?LXdnx-.. //.!,-)9&F$S"^"i!s!|!!!!!!!!""##$$$$$$$02 36 652%02-?,L+X+c*m*v**********++,,,,,,,4 69<< ;85)473F4R3]3g3p2x222211122 2 3 3 3333337:>AA? <:;1<@DGHF@ BD+D;DHCSB\BeAl@t @{ ? ? >>>>>>??@@ A A A A =CINONIIJ&K6KCJNIWH`Gg Fo Fv E}EDDCCCCDEFFF F F F @GOSUTPOP"Q2Q?PJOSN\Mc Lj Kq JyJIIHHHHHJJKKKKKCKSXZZWTVV.V;UFTPSXR_ Qf PmOtO|NNM~M|MzMyMxNxOxOxPxPxPxPFOW\__\Y Z[*[8ZCYLXUW\ Vc UjTqSy}SzRxRvQtQsQqQqRqSqTrTrTrTrTHS[`cca^ __'_5^@]J\R[Y Z` }Yg{XnxXuvW~tVrVoVnUlUkVkVkWkXlXlXlXlXKV^dghfbcd$c2b=aG`O}_V z^] w]d u\ks\sp[{n[lZjZhYfZeZeZe[f[f\g\g\g\NYagjljggg!g/f;eD{dMxcT ub[ raa paim`pk_yi_f^d^b^a^_^_^`_a_a_b_b_b_Q\djnpnkjkk,~k8zjBviJshRpgY mf` keghdnfdwdcac_b]b[bZbZb[c\c\c]c]c]cU_hnrtsoo o}p)yo5un?rmHnlPklW ik^ fjedilaiu_h\hZgXgVgUgUgVgWgWhXgXgXgXckrvxwss |txt&tt2ps=msFjrNgqU dp\ apc_oj\nsZn|WmUlSlQlPlOlQlQlRlRlRlRl\gov{||xzyuyrz#nz/ky:hyCdxKawR_wY \v` YuhWtpTtzRsOsMrLrJrJrKrLrLrMrMrMr`kt{z~snkh,e7b@_H\~PY~WW}^ T|f Q|nO{xL{JzHzFzEzDzEyFyFxGxGxGxepywkf c`'^3[<XEVMSTP[Nc Kl IvFDB@?>??@@@@kvse] ZX!V-S8QANILPJXG`Ei Bs @ ><:98889999r}zm_TONL'J2H<FDDLBT@\>f;p9|7 5 3 2 2 1 1 1 1 1 1 zrfZNE B@?*>4<>;G9O7X5a3l1y/-,+**)))))vj^RF<5 32!1+/5.>-H,Q+[)g't&$#"!!  zm`UI>3*$ "! !* 3=GR^l|}obVJ>3*! %/:F R ` p ΃ Η ά qdWJ>2(  $.9ERbsވߝ߳seXJ=1&  "+6CRbvugYK</$  '3@QcwwhZL<."  #/>Obw#!!$*3AN\ht~  %0=KXdpz! , 9FS_ku~ (4 A N Zfpy ##!#/;IU`jt|'' % & %# (5BOZenw+ ++- ,)& #-!:HT _ h q!y!!!!!"""##$$$$$$$$//232/+'"'2)A*N*Y*b*k*s*z******+++,,,--,,,238995. /1,3;3H4S3\3e3m3t2{222222223344444458>BB?88:&;6EIJGA?A!B1C>CIBSA[Ab@j@q?x?? > > > > >?? @ @ @ AAA<CJOPNIFHI,I:IEHNGWG^FeFlEs E{ D D DCC~C|D{DzE zF zF zF zF zF >HOTUTPL MN(N6NAMKMSLZKaKhJo Jw ~I |IzHxHwHuHtIsIrJrJ rJ rJ rJ rJ BLSXZYVRRS$S2S>RGQPQWP^~Oe{Ol yNs wN{ uMsMqMoMnMlMlMlNlOlO lO lO lO EPW\^^[VVW!X/W;VDVM|UTzT[wTbuSh sSp qRx oRmQkQiQgQfQeReRfSfS fS fS fS ISZ_bb_ZZ[[,[8}[AzZJwYQtXXqX_oWf mWm kVv iVgUeUcUaU`U_U`V`VaWaW aW aW LV^cffd^^__)|_5x_?t^Gq]Oo\Vl\\j[c h[k fZs dZ}bZ_Y^Y\Y[YZY[Z[Z\Z\Z \Z \Z OYafijhbb ~czc&vc2sc<obElaLjaTg`Ze`ac_i a_q _^{]^Z^X]W]V^U^V^V^W^W^ W^ W^ S]djmnmg~g xgtg#qh/ng9kgBhfJefRceX`e_^dg \do ZcyXcUbSbRbQbPbQbQbRbRb Rb Rb V`hnqsqkxkrknlkl,hl7fl@ckH`kO^jV\j]Yie Wim Uiw ShPhNgMgKhKhKgLgLgMg Mg Mg Zdlrvwvyqqqkqhqfr(cr4`r=^rE[qMYqTWp[TpcRok Pot MnKnInGmFnEnFmFmGmGl Gl Gl _iqw{|{uxkwew ax_x$]y0Zy:XyBVxJSxQQwXOw`LvhJvr Hu} EuCuBu@u@u@t@tAs As As As dnv|re]YW U+S6Q>OFMNKUI]FfD~pB~{ ?~ =} <} :}:~ :| :{ :{ :z :z :z it|{n`UPNM&K0I:HBFJDRBZ@c=m;x97 5 4 3 3 3 3 3 3 3 pzuhZOG DCA*@4?==E;M:V8_6i4u20.-,,+++++xzmaUI?976"4,352>1G0P.Z-d+q)'&$###""""reYNB7.)('"&,%5$?#H"S!^ jyuh\PD9/&!*4>ITbq yk^RF:/%   (2=IWfwƋƠŶ{m`SF:.$ '1<IXi|ֿ֧֒~oaTF9-"  $.:IYkqcUG9,  !+8HZmteVH9+  (6GZn  !'0>LYepz!-:HUalv (6CP\gqz  $0>KWblu}  * 8EQ\fow !  #0>J V ` i q y %##$! '5COYcks{('**'" -< I S!]!e"m"t"|"""####$$%%%%%%%,-243.% %'')6*C+N+W+`+g+o+v+}++++++,,---.---03:=<91.0!203=3I3R3Z3b3i3p3w2222223344444443:ADDA;789+:8;D;M:V:]:d:k9r9z9999999:}:|;|;|;|;|;7@GJKIC> ?@&A4A?AIAQ@Y@`@g?m?u?}>}>{> z> x> w? u? t@t@t@s@s@s@;ELOPOJDEF"F0G<FEFNFUE\~Ec|DjzDqyDywDuC sC qC pC nD mD mE lElElElElE?IPTUTPJIJK,L8KBKJ|JRyJXwJ_uIfsImqIvoHmH lH jH hH gH fI fI fI fJfIfIfICMSXYXUNNOO)P5{P?xOGvOOsNUqN\oMcmMjkMriM|gL eL cL bLaM`M`M `N `N `N`N`NGPW[]]ZSR S|S%yT1uT<sSDpSLmRSkRYiR`gQheQpcQyaQ `P ^P \P[QZQZQ ZR [R [Q[Q[QJSZ_aa^WV zWvW"sX.pW9mWAjWIhVPfVWdV^bUe`Um^Uw\U ZU YU WUVUUUUU UU VU VU VUVUMW^beec\{[u[q[n\+k\6h[?e[Gc[NaZU_Z\]Zc[ZkYYuWY UY TY RYQYPYPY QY QY QY QYQYQZafhig}`u_o_k_h`(f`3c`<a`D__L\_S[_ZY_aW^iU^sS^~ Q] O] M] L^K^K^ L^ L] L] L]L]T^ejmmlxeodidedbd%`e0^e:\eBZeJXdQVdXTd_RdgPcqNc{ Lc Jc Hc Gc Fc Fc Fb Gb Gb GbGbXbinqrqtkiici _i\j!Zj-Xk6Vk?UkGSjNQjUOj]MjeJinHiyFi Di Ch Ai @i @h Ah Ag AgBgBg]fmsvwvpreq\pXpVpTq(Rq3Pq<OrDMqKKqSIqZGqbEplCpwAp?p=o ;p ;p :o ;n;n;m;m;mbksy{|{|mz`xVwPwNxLx$Ky.Iy7Hy@FyHDyOByWAy`?xiC=K;S9\7f5q310.----~-}-}-}nx}pcUKA;98"7,654=3F2O1X/b-n+{*(&%%%%%%%vvi\PD:1-,+$*-)6(?'H&R%\#h"w zmaUI=3*! $-6?JUapqdXL@5*" "+ 5 @ K X gxugZNA5+!  "+6AN\mxj\OB5*   "+5AP`rχϝϳzl^PB5) (4AQcw|n`QC5(  $1ASf|paSE6'  !.@Sh  $.<JVcmw *7ER^ir{ %3@MYdmv}  -:GS^hpx  &4AMXbjry  ,9FQ[dlsz   " 1 > J U^fmt{" #$! )7DNW`gnu|&'-/-'"1 =!H"R"Z#b#i#o#w#~#$$$$%%&'''''')06872+%')+*8*C+L+U+\+c+j+q,x,,,,,,-.....~.~..7=??<5/ /1&232>3H3P3X3^3e3l3s3|333}3|3z3y4w5v5u5u5u5u53=CEFC=668!9.999C9L9S9Z9a~9h|9oz9wy9w9u9t9r9q9o:n:n;m;m;m:m:9BHKKID><=>*?5??~?H|?Oz?Vx?]v>dt>kr>sp>|o>m>k>j>i?g?g?f@f@f@f?f?=FLOPOJDA BC&}D2zD<wDDuDLrDSpCYoC`mCgkCoiCyhCfCdCcCaC`D`D`D_D_D`D`DAJPSUSOIG }GyG"vH.sH8qHAnHIlHPjHVhH]fGdeGlcGvaG`G^G\G[HZHZHZIZIZHZHZHDMSWYXTN}KwKsLpL+mL5kL>hLFfLMdLSbLZaLb_Lj^Ls\K~ZKXKWLVL UL TLTMULULULULHQW[\\YSwOqOnPjP(hP2eP;cPCaPJ_PQ]PX\P_ZPgXPqWP{UPSPRPPP PP OPPPPPPPPPPPKTZ^``]|WrTlShTeT$bT/`T8^T@\THZTOYTVWT]UTeTTnRTyPTNTMTKTKT JTKTKTKTKTKTNW^bddbw[mXfX bX_X"]Y,[Y6YY>WYFVYMTYTRY[QYcOYlMYwKXIXHXGYFYEYFYFXFXGXGXR[afhigr`h^a] \]Z]W])V^3T^;R^CQ^JO^RN^YL^aJ^jH^uF^D]C^A^@^@^@]A]A]A\A\V_fjmmlogdd[bVbTbRc%Pc/Nd8Md@KdHJdOHdWFd_EdhCdsAc?c=cr@=rH;rP:rY8rc6rm4rz3r1r/r.r.r.q.p.o.o.ofovz|~}r}d|W{LzBy)G(P'Z&f$s#! t}~qeXL@6,% #"!% .6@IT`n~}wi]PE9.% $-7ALXg w {m`TH<0& $.8DP^nqcVJ=1&  %/9FTdvtfXK>1&  $.:GWi}ɔȪwhZM?1%  "-9IZn߅ߜ߲yk\N@1$   +:K^sm^PA2$ ):Mbx!+9GT_js{ '4BO[env~  "/=JU`iqy  )7DPZcksz "0=IT]emsz  (6BMW_fmtz -:FPX`gnu{   %2?IRZahov}#(*'!,8CLT\bipw     $,131-%  &!2"="G#O#V#]$d$k$r$z$%%%&~&}'{'y(x(x(x(x(+39;:6/('( )-*8+B+J+R+X,_,f,m},u{,~z,x,v-u-t-r.q.p/o/o/n/n/1:?AA>81./0(132=2F}2M{2Ty2[w2au2it2pr2yp3o3m3l3j4i4h5g5g5f5f5f46?DGGD?94 56$|7/y79w8Bt8Ir8Pq8Wo8^m8el8mj8uh8g8e8d9b9a:`:`:_:_:_:_:;CIKLJE?: {:w; t<+r<5o=>m=Fk=Mi=Sh=Zf=ad=ic=ra=}`=^=]>[>Z>Z?Y?Y?Y?Y?Y>?GLPPOKEz@u?q@m@(kA2iA;gABeAIcAPaAW`A^^Af]Bo[BzZBXBWBUCTCTCSCSCTCTCTCBJPSTSPJuEnCkDgE$eE.bE7aE?_EF]EM[ETZF[YFcWFlVFwTFSFQFPGOGNGNGNGNGOGOGFNTWXWT{NpJiH eHbI!_I+]I4[I<YICWIJVIRUJYTJaRJjQJuOJNJLKKKJKIKIKIKJKJKJKIQW[\\YvSkNdM _L\MZM(XM1VM:TMASNHRNOPNWON_MNhLNsJOIOGOFOEODPDOEOEOENENLU[^``^rWgS^QYQWQTQ%RR/QR7OR?NRFMSMLSUJS]ISfGSpES}DSBSAT@T?T?T@S@S@S@RPX^bee}bn\cYYVTVQVOV"MW,LW4JW<IXDHXKGXSEX[DXdBXn@X{?X=X^a<^l;^x9^7^6^5^4_4^5]5]5\5\Yaglnnvlgi\fQdHb DbBbAc$?c->c5=d=s4r 1s0s/s#.s+-t4,t<+tD)tM(uW'uc%uo$u"u!u uutsr q qksy|~tgZM~C~8}/}(} &}$}#~%"~-!~6!~?HR^kz~|{{{rz{m`TH<2( &.7ALXeu {seYLA4*!   & / 9 DP^nwj]PD8,"  '1<HVew{m`SF9-#   (2>L[lqcUG:-"  '2@O`tËáøseWI;-! &2ASf|ٔ٫vgYK<.!  $2CVkj[L>/   #3FZq(7DQ\fow~$2?LWajry ,:FR\eltz  &4@LV_gnt{  -:EOX`hnt{  %2>IRZahnt{  *7BKT[bhnu{  !.: D M U \ b i o v ~  $%" '3>GOV\cipx}||{{!)-/,' !-8AIPW^dks|}|zxwv t!r!q"q!q!q!(05751+# !'"2#<#D~#K|$R{$Yy$_w$fv%nt%ws%q&o&n&m'l'j(i)h)h)h(h(.6;==93-' '("|)-y*7w*?u*Gs+Nq+Tp+[n+bl+jk,ri,}h,f-e-d.c.a/`/`/`/`/`.4<ACC@:4.z-w.s/)q03o0;m0Ck1Ji1Qg1Wf1^d1fc2oa2y`2_2]3\3[4Z4Y5Y5Y4Y4Y48@EHHF@;y5s3o4l4%i5/g57e6?c6Fb6M`6T_6[]7c\7k[7vY7X8V8U8T9S9S:S9R9S9S9<DILLKF}@s;l8 h9e9"c:+`:4^:<]:C[:JZ;PX;XW;`V;hUM>M>M>M>M=M=@HMPQOKyEn@f= b=_=\>(Z>1X>8W>@U?FT?MS?UR@]P@fO@pN@|LAKAJAIBHBHBHBHBHAHADKPTTSPuJjFaB\AYBWB%UB.SB5QB=OBCOCKNCRMDZKDcJDnIEzGEFEEFDFCFCFCFCFCECEGOTWXX~UqOfJ\FWFTFQF"OF+NF3LG:KGAJGIIHPHHXGHaEIlDIxBIAI@J?J>K>J>J>I?I?IJRX[]\{YmSbOWLQJ NJLKJK(IK0GK8FL?ELFDLNCMVBM_@Mj?Mv=NRT2]F1^N0^W/^b-^n,_}*_)_(_'_'_'^'](](\\djnoyonn`kTiIg?e5c 2c0c/d!.d)-d1,d9+eB*eJ(eT'e_&fk$fz#f"f fff e d c!cbjpsuuuit\rOqDo:n0m)l 'l&l%m$$m,#m4"m=!nF nPn[ngnvnooonmlkkiqvy|{q{d{WzJy?x5x+w"vvwww&w.w7x@xJxVxcxrxxxxwvuutqx|wj]PD8.$ '0 9 D P ] l~y~}obUI=1&  )2=IVevtfYL@4(  "+5@N\nxj\OB6) "+6DScw{m_QD6*  !+8GXk~pbSF8*   +:K^sҋҤӻsdVG9* *<Od|fXI;+  +>Sj&4AMXbksz !.<HS]fmu{  )6BNW`hov| #0<GQZbiov|)5AKT\ciou{ ".:DMU\ciou{ '2=FOV\chou|  *5?HPV\ciov  !  # . 8 A I P W ] c jqz~|{zxvuttt&**(#'2;CKQ~W|^{eylwtv~trqonmkjjjj&-131,& "~,{6y>wEuLsSqYp`ngmpkzjhge d!c!b"a"a"a"a",48985/(!{ w!t"'q"1o#9m#Ak#Hi#Nh$Uf$[e$cc%kb%ua%_&^&]'[([(Z)Y)Y)Y)Y(29=??<60y*r&n'k(#i(,f)5e)<c)Ca*J`*Q^*W]*_\+hZ+rY,}X,V-U-T.S.R/R/R.R.R.6=BDDA<{7r1k, g-d-a.(_.1].9\/@Z/FX/MW/TV0\U0dS1nR1zQ1P2N2M3M4L4L4L4L3L3:BFIIGBw=m7d2 `2]2Z2%X3-V35U3<S4CR4JQ4QP4YO5aM5lL6wK6J7H7G8G8F8F8F8F8F7>EJMMK~GsBi=_7Z6W7T7"R7*P72O89M8@L8GK8NJ9VI9_H:iG:uE;D;C<B<A=A=A=A<A<A<BINPQP{LoFeBZ=T;Q;O;M;'K;/I<6G<=G\C>gB?s@???>@=@Ce=Cq;C:D9D8E7E7E7E7D8D8CIPUXYXvVhP]LSHJE FDDDBD"AE)?E1>E8=E?I=I;J&:J.9J58K=7KD6KM4LV3L`2Ll1Mz0M.M-N,N,N,M-M-L-LPX]ab{ap_b[XXNUCQ;O 8O6O5O#4P+3P22P:1PB0QJ.QS-R],Ri+Rx)R(S'S&S&S&S'R'Q'QU\bfgxfme`aU^J[?X5V1U0V.V-V',V/+W6*W>)WG(WP&XZ%Xg$Xu#Y!Y YYYX X W!WZbgkluljk]hQeFc;`1^*] (]&]%^#$^*#^2"^:!^C _L_W_c`q`````_^^]`hnp|rrrfqXnLlAk6i-g#fffff%f-g5g>gHgSh_hnhhhhhgfeegosvxxmx`wSvFt;s1r'qqp pppq'q/q8qBqN q[ qi qz qqqppo n nouy~|t~f~Y~M~@}5}*|!||| | | ||!|)|2|=|H|U|c|t|{{zyyyxw|yl^QE9-#  #,6BN]m~~qcVI<0$  $.9FUexugYL?2&  %/<K[nxj\NA3&  $0?Pbx{m_PB4&  $2CUj̜̃˵paRD6' $5H\scUF8(%8Mc|#0=IT^fnv|  +8DOYaipw}%2>IS\cjqw}  ,8CMV]dkqv|%1<FOW^djpv| *5?HPW^diou|#.8AJQW]ciov} &1:CJQW]cipw~}{zzyxx  )3<DKQW]c}j{rz|x v t s q p o nmmm#&&$   " ,~ 5|=zExKwQuXs^qepnnwlkihfedccbb$*./-("}yv's0q8o?mFlLjShYgaeidrb~a_^\\ZZYYY*15641+%ysol"i+g3e;dAbH`N_U]\\d[nYyXV U T!S!R"R#R#R"R"/6:<;82z-r&j f c!a!&_"/]"6["=Z#DX#JW#QU#XT$aS$jQ%vP%O&N'L'L(K(K)K(K(K(4;?A@>9u3l-c'^&\&Y'"W'+U(2T(9R(@Q(FP)MN)UM)]L*gK*sI+H+G,F-E-E.D.D.E-E-8?CEEC{>q9g4^.X+U+R,P,'O,/M-6L-<J-CI-JH.RG.ZF/dE/pC0~B0A1@2?2?3?3?2?2?2<CGIIHxDm>c9Z4R0 O0L0J0$I1+G12F19D1@C2GB2OA3X@3b?4m>4{=5<6;6:79797:7:6:6@FKMNLuHjC`>V9M5 I4G5E5!C5(A5/@56?6=>6E=7M<7U;8`:8k99y897:5:5;4;4;5;5:5:CJNQR~PsMgH\DR?H:D9A9?9>9&<9-;:4::;9;B8;J71>0?/?/?/?0?0>0>GMRUV|UqRdLYIOEE@?> <>:>9>#7>*6?15?84?@3@H2@Q1A[0Ag.Bu-B,C+C*C)D*C*C+B+BJQVYZyZnWaRWNMKCG:C 6C4C3C 2D'1D/0D6/E=-EF,EO+FY*Fd)Gr(G&G%H$H#H$H%G%G&GOUZ^_w^k\_XUUKQ@M5J0I.I-I,I$+J+*J3(J;'KC&KL%KV$Lb#Lp!L MMMNMLL KSZ_c~dtcia\^R[GXf3e)c a` ````&`.a7a@aKaX af bv b a aaa ` _ _fmq~suujt\sOrCp8o-n$lkkj j j j! j) j2j<kGkSkakqjjjiiihhmsw{zp{c{VzIz=y1x'wvvv v vvvv$u,u6uAuNu\ulu~ttssrrquz~vi[NA5)  &/;GUex~}}|{n`RE9,!  (2?M]prdVH;." )5CTf{ugYK=0# )8HZoxj\M?1# +<NbzƔƭl^OA2$  -@Tk`RC4%  1F\t ,9EPYbjqw~'3?JT]dkrx~ ".9ENW^elrw~ (3>HQX_ekqw} "-7AJRY_ejpv} &1:CKRX^dipv~  *4<DKRX]cipw  #,5>EKQW]cjqz}{ywutrrrqq  %/7>~E}K{QyWx]vdtkrtpnlkihgff e e  ##  |y(v0t8r ?p Eo Lm Rl Xj _h gg pe zc b ` _ ^ \\[[[!(++)${u q n!k*i2g9e@dFcMaS_Z^b\k[vYXVUTSRRRR(.221-'z!rk gda%_-]4\;[BYHXOVVU^SgRrPONLKKJJJJ-47874}/t)l#d^[Y!W)U0T7R=QDOKNRMZKcJnI|GF E!D!C"C"C"C"C"28<>=:y5o0f*^$W T Q O!%N!,L!3K":I"@H"GG"NF#WD#`C$kB$yA%?&>&='='=(=(='='6=@BB?v;l6b0Y*Q% M%K%I%!G&(E&/D&6C&=B'DA'K?(T>(]=)i<)v;*9+8+7,7,7,7,7,8,:@DFF}Ds@h;_6U1L+G)E*C*A*%?*,>+3=+9<+A;,H:,Q9-[8.f6.s5/4/30201111212030>DHJJ{IpEe@[;R6H1B. ?.=.;."9/)8//7/660>50F41O31Y22d12q03/4.4,5,5,5-5-4.4AHLNNyMnJbEX@N<E7=3 93736343&33-24414<05D/5L.6V-6b,7o+7*8(8'9&9'9(9(8)8EKORSwRlO_IVFLBB=88482818/8$.8+-92,99+:A*:J);T(;_'!>"=#=#<IOSVWuVjS]OSLJH@D6@/= -=+=*>!)>((>/'>7&??$?H#@R"@]!Aj AzABBBBBAAMSX[}\r[gX[TQRHN=J3G*C &C%C$C#D%"D,!D4 E<EEEOFZFhFxGGGHGGFFRX]`zap`e^YZOXDT9Q/N&K JJJJ!K(K0K8KBLLLWLeMuMMMNMMLLW]bewfmfcdVaJ^?[5X+V"TR RRRR$R,R4R>SHSTSb Tr T T TT T S R R]dh~ktlkl_jRgEd:b0`&^][Z ZZ [ [' [0 [: [E[Q[^[m[[[[ZZZYdkn{prrgqYpLn@l5k*i!gff e eedd#d,d5d@dLdZdid{dccbbbalquxwmx`wRvFu9t.t#rqq qqp ppoo&o0o;oGoTodounmmlkkksx}{s}e~X~K~>~2~&}|| |}}| ||||!|)|4{@{N{^{ozzyxwvvzxk]OB5)  ",8FVh|}oaSE8+  ".=M^srdVH:,  #1ASgugYJ<-   $5G[rj[M>/! '9Md~ܙܰ]O@2" *?Um  (4ALU]elrx~#/;FPX_flrx~ *5@JRY`flrx~$/9CLSZ`fkqw~ )3=EMTZ_ejpw",6>FMSY^djpw &/7?FLRX]cjqy~|zxxwww (19@FLRW}]{czkxsv}tqpnlkjjjj !~*{2y9w@uFsLrQpWn^mekniwgecb`__^^^  ~ yur#o+m3k:i@gFfLdRcYa`_i^s\ZYWVU T T T T %((%!{tn if d %b -` 4^ :] @[ GZ MX TW \U dT oR {PONLLKKKK&+//-)}$tle_\ZX'V.T5S;RBPHOPNWL`KkIxHFEDCCCCC+14541x+o&f ^W TQO#N*L1K7I>HDGLETD]CgAt@?=<;;<<<069;:~7s2j-a'Y!Q LJHF&E-C3B:AA@H>P=Y<d;q987 6 5!5!5"5!6!4:>??{<p8g2]-T(L"FCA?"> )= 0; 6:!=9!E8"M7"W6#b4#n3$~2$1%/%/&/&/&0&0&8>BCCxAn=c8Z3Q.H(@$ =#;$9$8$&6$,5%34%:3&B2&J1'T0'_/(l.({,)+***)*)+*+**+*<BFGGvElBa=W8N3D.<) 7(5(3(2(#0()/)0/*7.*?-+H,+R+,]*,j(-y'-&.%.$/$/%/%/&.?EIK~LtJjG^BT=K9A48/2- 0-.--- +-'*..).5)/=(/F'0O%0[$1h#1w"2!23333 3!2CIMO|PsOhL\FRCI??;66.2 +2)2(2&2$%3+$32#4:"4C!5M 5X6e6u77788877GMQS{TqSfPZLPIGE=A3=*9 %7#7"8!8" 8(80989A:K:V;c;r;<<==<<;KQUXyYnXdVXQNOEK:G0C'@ > >>>>%>-?5?>?H@S@`ApAAABBAA@PVZ]v^l]b[VWLUAQ6N,K#HE DDEE"E)E1E;FEFPG^ Gm G G GGG G F FU[`}bscjb`aS^GZUJVWVeUwUUUTTSSbhlwnoocnVlIj=h2f'ecba `` ____&_/_:_E_S_a^r^]]\\[[jo}rutju]tOsBr6p+o nml lkk jjjj!i*i4i@iNi\imhhgfeedqvzyp{b{U{Hz;z/z#yxw wwwwv vvvv#v.u:uGuVuht|tsrqppy}vhZL?2%  &2?O`u~~zl^PB5'  (6EWk~paSE7)  *:L`xsdVG9* .@TjgXJ;,  2F]vԒի[L=/ $8Ng $0<GQY`gmsy  +7BKS[agmsy&1;EMU[aglrx  *5>GNU[aflrx $.8@HNTZ_ekqx (19AHNSY^djqz~ "*2:AGMRX]dks}}{xvusqpppp  $,3:}A{GyLwRvWt]rdpmovljigedccbc ~zv%t-q4o:n@lFjLiRgXf_dgbq`|^\[YXXXWW~ w rnjh'e.d4b;`@_F]L\SZZXbWlUwSRPONMMMM"%%"}un g c_]![(Y/W5V;TASGQNPUN^MgKsI H G E D D C C D $),,*&w!nf_Y U S Q "O )M /L 6K <I BH IF QEZDdBp@?><;;;;<)/221|-r(i#aYQLJHF$E+C1B7A>@E>M=V<a:m9|76543444.4786x4n.e*\$TLF B@? ='<-;49:8B7J6S5^3j2y0/.---..28;<<v9k4b/Y*P%G@ <:86#5)40372>1G/P.[-g,v*)(' & ' ( ( 6<?A}@t>i:_5V0M+D%; 6320 /&.--4, ;+ D*!N)!X'"e&"t%###"$!$!%"%"$#$:?CE{DrCg?]:S6J1A,8&1# .","*")"#(#*'#1&$9%%A$%K#&V"&c!'r'(())))(>CGIzIpGfDZ?Q;G7>25-,( ('''%'$'!#('"(.!)6 )?*I*T+`+o,,------AGKMxMnLdIXDO@F==834*/$, !, ,--%-,.4.</F/Q0^0m11122211EKOQvRmPbNVIMFDC;?1:'62 2222"3)314:4D4O5\5k6}66 7 7 666IOS~VuVjU`SUOLLBI8E.A$=:88899&9.97:A:L ;Y ;h ;z ; <<<< ; ;NTX|[r[hZ^XSUIR>N4K*G!DB@ ??? @# @+ @4 @> AJAVAeAvAAAAAA@TY^y`p`f`]^Q[EW:T/Q%OLJH GGGG H(H1H;HGHSHbHsHHHGGGGZ`cwenfefYdL`@]5[*Y WUS RQ PPPP%P.P8PCPPP^PoPOONNMMaf}itllmakSiFg:d/c$a_^ \\[ ZZZY!Y)Y3Y?YLYZYkX~XWWVUUhmzprrgrZqLp?n3m(kjh ggff e eddd$d.d:cGcUcfczba`__^otxwnx`xRwEw8v+v tssrrrqq qpppp'p3o@oPo`ntnmlkjiw|{s}e~WI</"~~~~~~ ~ ~~~ ~+}9}H}Y|m|{zyxwwi[M?2$ "/?Pd{{m^PB4& $4FYppaSD6' '9Md~dUG8),@Vǫ͋XI:,2H`{ !,8CLT[bhntz '2=FOV\bhnsy",7@IPV\bgmsy &0:BJPV[aflrz *3;CIOUZ_ekr{ #,4<CINSY^dks}}{yxwwu&-5<BGMR}X{^yexmvvsqomljihhi  |'z.w5u;tArGpLoRmXk_ifgpe{cb`^]\\[[  { wso!l(j/h5g;eAcFbL`R_Y]a[jYuWUTSQPPPP wqkgda"^)]/[5Y;XAVFUMSTR\PeNpL}KIHGFFFE ""woh a ]YVT#R*P0O5N;LAKHIOGWFaDlCyA@>=<<<<"'))'{#qiaZ S OLJH$G*E0D6C=AC@K> S= ]; h: v8 7 5 4 3 3 3 4 ',//.w*m%d \TLF C A ? > %< +; 2: 88 ?7G6P4Z3f1t0.-,+,,-,145}4t1j+`'X!OG@ ;976!4'3-241;0C.M-W,c*q)'&%$%&&169:{9q6g1]-T(L"C;5 21/.$,*+1*8)@(J'T&`$o#!   4:=>y=o;e7[2R-I(@#80 ,*)' &'%-$5#>"G!R ^l~8=ABwBm@c<Y7O3F.=)5$- ' %#!!$ +2;E O!\!j"{""#####<ADFuFlDbAW<M8D4<03+*&#" !!""!"(#0#8$B%M%Y&h&y&'''(''@EH}JtJjI`FUAL>C::612(- ) ''''(%(-(6)@)K*W*f+w+ , , , , , +DIL|NsOiN^KSGJDB@9=/8%40- ,---#-*.3.= /H /U 0c 0t 0111100HMQzSqTgR]PRLIJ@F5B+>":74 33 3 3 4( 41 5;5F5R6`6q6666665MRVxXoYeX[UQRGOHPW]ciot{#.8BJQX]chnt{ (2<DKQW]bgmt{"+5=EKQV[afmt| %.6>DJPUZ_flu~~| '/7=CINSY_em~w|zxusrqppn !)07}={ByHxMvRtXr_qgopl{jhfecbaaa|xu#r)p0n6m<kAiGhLfRdYc`ai_t][YWVUUTU  {u plhf#c*a0`6^;]A[FZLXSV[TdRnQ{OMLKJIIIy qke a]ZX$V*T0S6Q;PANGMNKVI_GiFvDCA@??>?zrjb\WSPNL%J+H0G6F<DBCIAQ?Z>e<r:9866555 $&&$u ld\T N JGDB @%?+>1<7;>9E8M6V5a3n1~0/-,,,,%*,-{+r'h"_WOHA >;98!6&5,322 91 A/ I. S, ^+ l) |( & % $ # $ % */22y1o.e)\$SKC<5 3 1 / . "- (+ .* 5) ='F&P$\#j"{ /367v6m3c/Y*P%H ?80,*('%$$*#2":!C NZhx37:~;t;k8a4W/N+E&=!4-& #" !'/7AKWev6;>|?s?i=_9U5L0C,:'2"*" $,4>IUct  :?B{DqChB^>S:J6A29-1)(%  ")2<F S a !q ! " " " " " !>CFyHpHgF\DR?I;@884/0','# !!"" "'#/ $9 $D %P %^ &o&&&&&&&BGJxLoLeK[HPDGA?>7;-6$1-*( ' ( ( (% )- )7*B*N+\+l++++++*FKOvQmQcPZMOJGG>D3@)< 841 / ..//#/+050?0L1Y1i1|11000/KP}TuVkVbUXSNPEM:I/E%B>;9 7 6666 6)627=7I7W7g7y766655PV|Zr[i[`[WYLV@R5N*K HFC A@ ?>>>>&>/>:>F>T>d>v==<<;;W\y_paha_aT^G[:W/U%RPM KJI H GGFF"F,F7FCFQF`EsEDDCBB]bwenggh[fNcAa4^)\ZWVTSRQ QPOOO'O2O?OMN]NoNMLKJJe|itlmnbmTkGi:g-e"db` _^^]\[ ZZYY"Y-Y:YHXXXkWWVUTSlypsshsZrLq?p2o%nlk jjiihgff feee'd4dCdSdec{ba`_^}twwny_yQyCy6x)xwv uuuvuttsss rrr r,r;qLq_qtponlk{{r~d~UG9+  #2CVl~}|vhYK<.   '8Lb|j\M?0! -@Vo_PA3# 3Ib~SD5& %;Snߌݩ$/:CKRY^diou| )4=ELSX^cinu} #.7?FMRX]bhnu~'08@FLQV[agnv !)29?EJPUZ`gox}|{zwu #+28>DINS}Y{`yhwqu|spomkjiig }$z+x2v8t=rBqHoMmSlYjahjftda_^\[[ZZz uqnk%i+g1f7d<cAaG_M^S\[ZdXnV{TRQPONNM |unieb_]%[+Y1X6V;UASGQNPUN^LhJuHGEDCBBB{ sle_ [WTQO%N+L0K6I<HBFHEPCYAc?o>~<;:9888uld ]VQ MJGE D&B+A1?6>=<D;K9T7_6k4z210//.."$$z!qg_WP IE A><:!9&7,62483?1G0P.[-g+v*('&%%%#(**w(m%d [RKC = 96310"/'--,4*;)C(M&X%e#t"  (-/~/t.j+a&X!OG?81 .+)('#%)$ 0# 7! @ J U b r       -14|4r3h1_,U'L#D<4-& $ " !   % , 4=GSaq158z9p8g6]2S-J(B$91*# !)1:EQ_o     59<x=o=e:[7R2I.@*7%/!(  &.8BO \ l   8=@wAmAd?Z<P8G3>06+.''# # , 5 @ L Zi|<ADuElEcDYAO=F9>652..%*%!    "*3 > J!W!g!y!!!!! @E}HtJkJbIXFNBE?=<59+4"/+( $ ###$ $(%1%<%H&U&e&w&&&&%%EI{MsOjO`NWKMHDEO2L(HEB@=<; :999 9)949@9N9]9o887765UZv]m_e_]_R\DX8U-R"OLJ HFED C BAAA&A1A=AJAZAl@??>=<\|`scledfYdKa>^2[&YVT RQONML KKJJ"J,J9JGJVIhI~HGFEDcygrjkl`kRiDf7d*b`^ ][ZYXWVV UTTT'T4TBSRSdRyRQPON~jwnpqfqXpJoK=S;]9i7x6432211zph_ XQL HDA?=!<&:,91776>4F3O1Y/e.s,+*)((( !!ulcZR KD@ <8643!1'0,.3-:+B*K(U&a%p$"! "&(|'r%i"_WNF? 84 1.,*)"'(&.$6#>"G R^m~'+-y-p+f(]$TKC;4 - ) &$"! $*2:DO\j| +/1w2n1d.[*Q%I @81)#    ' . 7 A M Z i { /36v6l5c3Y/P+G&>!6.'       # + 4? J X g y37~:t;k:a8X5N0E,='5#-&    ( 2 <HUev6;|>s?j?`=W9M6D1<.4*,&%"   &/:FSbt:?{BrChC_BV?L;C7;430,,$)$   $-8DQ`r>CyFpHhH^FUDK@C=;:37*2 -)% "   " +!6!A!O!^"p"!!! CHxKoLfM]KTIJFBC:@/;%73/ ,)' &%&&!&)&3'?'M'\'m''&%%$HLvPnQeR\QSOJLAI5D+@!<96 20/ .----'-1-=-J-Y-k-,,+**M}RuUlWcW[VSUGQ;M0I%FC? =:87 6 5444$4.4:4G4W4h4}32110S{Xs[j]b][]OZBV6R*O LIGDBA?> ==<s0r#qo nmmmmlkjiiih hhg!g/g?fRffedcbawxmz_zPzBz3{%{zyyyyzzzxxwwwwwwww&v6vIu_uwtsrqq~cTE6(,?UmfWH9*!3IbZK<- '=UpM?/  /HbЀНи  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~ݯŌh̜λŽzې[=eu4TӔ~I,Nʳ~emŮ滑tcĚsE&4}U0 `t5 R4Oi  R;5L[ML^`6`ʼϚmZF|>&T<.Sm1 aZ]5\} T}EDd/"7IXkA(?cղ廗wb۞g6 ?^ف9/Z$^w%j}[+L<0 -a''U'%ʝv]J<2-,09GԻ縏jK/og4<ւ;1oBPi7/"y4Ftjc)"aW7hӮ|uqprwۺiiȓe=ێLn|,E*"D}6jXFG5% ' p pUB3& &ӼҩeH,q<O5u#gCH.8thB`z]a$fɬ}vqligfgkpzŪyawݦwP, 1Np`o7@r_M;*3^+ ƣhM2|Fq|/;d tjK0/Ryt6m|i hpaPliZI9X)V/)G .>RhҰw]B( J}EP h6HuiR>3+X"\Jzwz LWhtңzX:)#RiC4yO]:*Ot3grD\A_KW $1?N`t¾~S?0# vuFNDkyf!SJ?w+ EM.*-E`ct˷|xtplhejH- 1B)kZN4 =eNCzt _t,8ESbrٲymd]VQKFA<82-(#K% f=3l 5[/^w^C@^N,>Rj|þm[L@7/(" 4v$Q|yfQ#:62/.1%B} 9b"Hri(N\3.2Rwr/BXpon~dVKC<60+'" RmQ:B#h >m7/Ptr*AZuXDTdu{xvtrsuxO:0(! #i 9c4[I9]{ !8RoX)9IZl~wqlhda^[YXWWY^eq1 V/W|7+a ,Pv0 #;Wvc*;L_tſld^YUQOLJHGFHKPYf&VP:y !2X1Z'KqI/Jhu&8J^urZSOKHFDCBABCGNYi}.VA{ 4`?%Jqf*Db5+>QhvPJGEDDDEFGKQZhA6ce 'Ls/*DbP6Ja{҇|SGIMQV`sV5Pmo>_{desc Little CMS Little CMSdesc2.x 2.xlcms2-2.12rc1/plugins/fast_float/testbed/test3.icc0000644000175000017500000006750413775114656021110 0ustar martimartioDlcmsspacRGB Lab  1 acspMSFT-lcmsdescA2B060B2A0760wtptncprtn,#dmndnPdmddntdesc,Test profile, not suitable for real use-Test profile, not suitable for real usemft1  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ymb XPIC$<+6209+?%FLR z {~ ~sh^VN$G*@0963<-B'I!OUopt|yq!~g%^)U-M2E7>=7B1H*M$SY,i-j-m/q{1uq3zg6^:U>MBEF=K6O/T)Y"_=d>e>g?jAm{CrpEvgG{^JUNMQEU=Y6]/b(f!N`NaObPdQgRjzTnpVsgXx^[}U^MaEd=h5l.p'^[^\_]__`aadcgydkofpfht]kyUm~LpDs=w5z.nWnXnYoZo\p^qasexthovlfxq]zuU}zLD=5}S}S}T~U~WY\_bwfnien]rTvL{D=OOPQRTVY\_vcngek\oTsLwDKKLMNOQTVY~]v`mddh\lTpLG©GHIJKMOQTW}Zu]lade\iTCƷDķDEFGHJLOQT}Wt[l^cb[@@@ABCDFHJLOR|UsXk\c<<<=>?@ACEGJLO{RsVj8899:;<=?ACEGJMzPr{od ZRKD&>-731:+@%G MS ~ uj`W O%H+A1:74=.C'I"OUtvy~ }s#h&_*V/N4F9?>8C1I+N%TY.m.n/q0t|2xr5}h7_;V?MCFG>K7P0U)Z#_>g?h?j@lBp{DtqFxgH}^KUNMREV=Z6^/b(g"ObOcPdPfQiSlzTppVtgYy^[~U^MaEe=h6l/p(_]_^__``acbeciyempgqgiu^kzUn~MqEt=w6{.nYnYoZo[p]q`rbsfxuiovmfxr]{vU}{ME=5}T}U~U~VXZ]_cwfnjfn]sUwL{E=PPQRSUWZ]`wcngek]oTtLxDLLMNOPRTWZ]vamdeh\lTpLH©HIIJLMORTW~Zu^lade\iTDƷDŷEEFGIKMORU}Xt[l_db[@@AABCEFHJMOR|UsYk\c<===>?@BDFHJMP{SsVk999::;<>?ACEHJMzPr ~ r g]UM#F)?/963<-B'H!NTxmcZ#R(J.C4<95?/E)K"QV }!~"$u&j)a-X1P6H;@@9E2J,O&UZ0t0u1v3y~4|s7i9`=W@ODGH?M8Q1V*[$`@lAmAnBqCt|EwrG{hJ_MVPNSFW>[7_0c)h"PfPgQhRjSlTo{VsqXwhZ{_\V_NbFf>i6m/q(```a`bacbechdkzfophsgjw^l{VoMrEu>x6{/o[o\p\p^q_qbsethyukpwogys^{wU~|ME=6~V~W~WXZ\^adxholfp]tUxM}E=RRSTUWY[^awenhel]pUuMyENNNOPRTVX[^vbmeei]mTqLI©JJKLMOQSVX~\u_mbdf\jTEǷEŸFFGIJLNPSV}Yt\l`dc\AABBCDFGIKNPS|VtYk]c=>>>?@ACDFIKNP{SsWk:::;;<=>@BDFHKNzQrxlcZ#Q(J-B3<95?/E(K"PV}q!g$^(U-M2E7><7B1G*M$SX%&')x+n.d1[5R9J>BB;G4L-Q'W!\4|4}5~68u:k=b@YCPGHKAO9T2X+]%bCsCtDuEwFy~H|tJjLaOXROUGY?]8a1e*i#RlRlSmToUqVt|XwrY{i\~`^WaOdGg?k7n0r)aebebfchcjdlfo{grqivhkz_m~WpNsFv>y7|/p_q`q`qarcsethukzwnpxrgzv_}zV~NF>6ZZ[\]_adgxjongr^vVzM~F>UUVVXY[^`dwgojfn^rUvMzEPPQRSTVXZ]`wdngek]oUsMLêLLMNOQSUWZ~]v`mdeh]kTGǸGŸH¸HIJLNPRTW}Zu^lade\CCDDEFGIKMORT|Wt[l^d???@ABCDFHJLOR{UsXk;;;<==>@ACEGJLOzRr~ s"h&_*V.N3F8?=8C1H+N%SY"#$&w(l+b/Y3Q7IMBEF>K6P0T)Y"_99:;nAeD[GSJKNCR;V4[-_&d G{G|H}H~JKvMlOcRZUQXI\A_:c2g+k%UsUsVtVuWwYy~Z|t\k^aaYcPfHi@m9p1t*dkdkdlemfogqht|iwskzim~`oXrOuGx@{8~1rdresesfthujvlwo{xrqzuh|y`~}WOG?7^__`acehkynpqhu_yW|NF?YYYZ[]_adgxjomgq^uVxN|FSTTUVWY[]`cwfojfm^qUuMOëOOPQRTUXZ]`vcnfej]mUJǹJŹJ¹KLMNPRTWY~\u`mcef]EFFFGHJKMOQTV}Yt\l`dAABBCDEFHJLNQS|VtYk===>??@BCEGIKNQ{Ts''(*y,o/e2[6S:K>CCZ6^/c(g"KLLMNOyQoSeV\YT\K_CbXAOEGI@N8R1W+\$a56689w;m>cAZDQHILAP:T3Y,^%c<<=>@{ApDgF]IUMLPDT=X5].a(f!FFFGHJvLlNbQYTQWI[A^9b2f+k$QQRRSU|VrXhZ_]W`NcFf>j7n0q)]^^^_`bycoefh]jUmLpDs=v5z.jzkzkzk{l|m~npwqmsdu\wSzK}C;4xqxrxrysytzv{x|z~~|ulcZRJB:jjkkmnprt|wszj}bYQIAccdefghjmo{rruixa{XPH]]^^_`bdfhkymqpht`wWzOWĮW®XXYZ[]_adfxiolgo_sWRɼRǼRüSSTVWY[]`bwenhfl^LMMMNOPRSUWY\~_vbneeHHHHIJKLNOQTVY}[u^mCCCDDEFGIJLNPSU|Xt<<=>?{ApCgF]IULLPDT=X5\.a'f!??@AB}DrFhI_LVONRFV>Z7^/c)g"EEEFHIuKkNbPYSQVHZ@^9b2f+j$MMNNOQzSpUfW]ZU]L`Dc=g5k.o'WWXXYZ\v^l`cbZeQhIkAn:r2u+bcccdeg|hrjil`nWqOtGw?z7}0oooppqrtyupwgy^{U~ME=6{y|y|y|z}{~|~~wne\TLDxxyyz{|~wne]ULEppqqrsuvxz~|uld\SKiæijjklmoprt|wsyk|cZRbdzbijccdefgikmo{rrujwazY\\\]]^_abdfhkymqpis`VVVWWXYZ\^_bdfxiplgPPQQRRSTVWY[]`bweoKKKLLMNOPRSUWY\~^vPPPQRT|UrWhZ_\V_NbFe>i7m/q(RRSSTV}WsYj\a^XaOdGg?k8n0r)VVWWXZ[v]l_caZdQgIjAn9q2u+\]]^^`aycoefg]iTlLoDrw6{/eeeffgi~jtlknbpYsPuHx@{91lllmmnoqxrotfv]yT{L~D<5uuuuvwxy}zt|j~aYQHA9~~ypg^VNF>vmd\SKC|sjbYQI yqh`WOwƬwìwwxyz{}~wof^VoɸoǹpĹpqqrsuvxz~|umeĄ]hhhiijklmoqsu|wtyl|caabbccdeghjknp{rruj[[[\\]^_`acegikymqUUUVVWWXZ[\^`bdgxccddefg}itjjmaoXqPtHw@z8~1eeefghi~julknbpYsQuIxA|91hhhijklmvomqds[uRxJ{B~:3mmmnnopryspufw]zU|ME=5ssttuvwx}ys{j}aXPH@8{{||}}~wne]TLD<|sjbYQIAypg_VNFvmd\TLĤ¥|skbZR~ǰ~Ű~°~zqi`Xv˼vɼvżwwxyz{}~ÂwĄoņglj_ooooppqrtuwxz~|vmҁehhhhiijklnoqsu|wtylaaaabccdeghjlnp{rs[[[[\\]^_`bcegikylĹmijmīmġnėoōpŃqyspufw^yU|M~E=5n¹n³n¬o¢pØpÎrĄsztpvgx^{V}ME=6qqqrrstu{wryi{`}WOG?7uuuvwwxz~{t}kbZQIA9{{{||}~xne]TLD<|riaXPH@wne]TLD|sjbYQIĞypg_WOƩĩvme]TɴǴĴ|skcZ}Ϳ}}~~€‚ÃĄņƈzNJqɌiʎauuvvvwxyz{}~р҂xԄoՆgnnnooppqrtuwxz~|vnggghhiijkmnoqsu|wt`aaaabcdefgijlnp{vȼvȷvȰvȦwȜxɒyɈz|u}lcZRIA:wƽwƷwǰxǧxǝyǓzȉ{}v~lc[RJB:yĽzĸzızĨ{Ğ|Ŕ}Ŋ~Ɓwne\TKC<}~~~ƒypg^VME>|sjaYPH@wne\TLD‘{ri`XPHĚwne]ULƤä|skbZRɮƮ®yph_W˸ɹƹvm™eě]ÄÄĄĄąąņŇƈljȋɌʎ|ːt͑kΔc|||}}~~рҁӃԄՆֈz׊q،iuuuuvvwxyz{}~ကxpmnnnnoppqstuwyz~|vggggghiijkmnpqsu|̴̻̫͎͘͡΄zqh_WNF>˻˴ˬˢ̘̎̅{ri`WOG?ȼɵɭɣəʏʆ|sjaXPH@ŽŶŮťƛƑLj~ulcZRJB‹Šxnf]ULDÑ{ri`XPHĘvmd\TLƠàzqi`XPȩƩªvne]U˳ɳų|skbZͽ˽Ƚþ™ÚĜyŝpǟhȡ`ȋȋȋȋȌɌɍʎʏː̑͒Δ~ϕvїnҙeӃӃӃӄӄӄԅԆՇֈ։׊،َ|ۏtܑk{{|||}}~ဤၛ⃓ㄊ䆂zrttttuuvwxyz{}~xmmmmnnoppqstuwyz~ÈпиаѦѝѓ҉Ҁvmd\SKCÉϿϹϰϧНГЊрwne\TLDċ͹ͱͨΞΔ΋ρxof]UMEĎʺʲʩʠ˖ˍ̃zqh_WNFœżŴūƢƘǏDž|sjbYQIƘ؈vme\TLǟğzqh`XOɧƧ§~umd\T˯ɯİzqi`X͸˸ǹ¹vn­eĮ]ššššÛÛÜĜŝƞƟǠɢ|ʣs˥kͧc͓͓̒̒̒͒ΔΔϕϖЗљҚӛy՝p֟h׊׊׊׊׋؋،،ٍڎڏۑܒݔ~ߕvnㄽㅶ䆮䇦初払犍茄|t{{{{{||}~zsstttuuvwxyz{}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !!"#$%&'()*+,-../0123456789:;<<=>?@ABCDEFGHIIJKLMNOPQRSTUVVWXYZ[\]^_`abccdefghijklmnoppqrstuvwxyz{|}~~  !!"#$%&'()*+,-../0123456789:;<<=>?@ABCDEFGHIIJKLMNOPQRSTUVVWXYZ[\]^_`abccdefghijklmnoppqrstuvwxyz{|}~~kP7kP7kP7kP7kP7kP7kP7kP7kP 7 !!!!!!!!!k Q$7- 111111111k*Q68< ?????????-l>QF8K!MMMMMMMMM.ElPQW8Z"\\\\\\\\\-JYlbRg9j#kkkkkkkkk(NallsRw9y${ { { { { { { { { Qgu~mR:%|` F ,  |` F ,  |` F ,  |` F ,  |` F ,  |` F ,  |`F-|aF-|aF$-+--------}a/F8-=>>>>>>>>}8aDGJ.NOOOOOOOO?}NaWG\/^________DW}bbiHm/oppppppppG^l}ub{H~0Heu~bI1 j~~cI2/0011q2V2;2!22222222/0011q2V2;2!22222222/0011q2V2;2!22222222/0011q2V2;2!22222222./001q1V1;1!11111111*+,,-q-V-;-!--------%&'((q(V);)") ) ) ) ) ) ) ) !!q"V"<"""(")")")")")")")"r$V3<:#=>>>>>>>.r@VI';`tsX?(e|ˌsY@) ˢtZA+BCCDDDfDJE/EEEEEEEEBCCDDDfDJE/EEEEEEEEBCCDDDfDJE/EEEEEEEE@AABBBfCJC/CCCCCCCC=>>??@f@J@/@@@@@@@@9:;;<S SSSSSSSNOOPPPwPZP>Q!QQQQQQQJJKLLLwLZL>M!MMMMMMMDEEFFFwGZG?#G"*G,G,G,G,G,G,G<==>>?w2?[???F?#I?J?J?J?J?J?J?/122)3E3wR3[Z4@_4$a4b4b4b4b4b4b46Rb xk \q!@u!%v!w!w!w!w!w!w!?^o{x\A' Dg{y]B( Goҕy]C*uӬz^D,z_F. {`G0ijjjkkkjkLk.kkkkkkkghhiiiijjLj.jjjjjjjffgggghjhMh.hhhhhhhccddeeejeMe/eeeeeee_``aaaajbMb/bbbbbbbZ[\\\]]j]M]0] ]]]]]]TUUVVVVk%WN3W0:W =W=W=W=W=W=WKLMMN(NBNkNNNUN1YO[O[O[O[O[O[O?@AB=BUCcClkCOpC2sCtCtCtCtCtCtC-./L0e1s1}2l2P232222222WqƂ m P 5  _|ƜmQ6eƴnR8oS:!pU;$ qV=(}}}~~~~z~\~=~~{{{||||z}\}=}}}}}}}xyyyzzz{z\z=zzzzzzzuuvvvww{w]w>wwwwwwwqqrrrss{s]s>ssssssslllmmmm{n]n? nnnnnnneefffgg|5g^Cg@JgMgOgOgOgOgOg\\]]^;^R^|^^^f^@j^l^n^n^n^n^n^PPQ!RPRfRsS||S_SAS!SSSSSS??5@`AwABB}B`CBC#CCCCCC @!m#$ٕ%&'}'`'D(&((((((Xwٰ~aE(bF+ cH-dJ0fL3lL(lL(mM)mM*mN+}}~~~~n N&,046666vvvwww-wFxnSxOZx-^xaxaxaxaxaxmmmn nMnbnooowoP{o/~ooooooaaa>bcbwcccocQc1ccccccPQPQtRR̗SSSpSRT2TTTTTTW7^89::̳;;#vZ@'}\8}\9}]:}]:~^;~(^;p stttt~~~~<_s`?rrrVrvs߉ssttat@ttttttPbPbhbccߪddddbeBeeeeeeLLLMNNOOOcODOOOOOO""#%&(())d*F*#*****eH'gJ+hL/ jN3lImImJnKnL>oNMW"\^___)Shtp}N$SqфpO'>>>lѨqP*…ÅÅÅÅttttuuuvvrvRv-vvvvv___``aaabsbSb0bbbbb???@ABBCCuCUC3DDDDDvW6wY:y[=z]@"Ο}Z-˟~Z/Ơ~[0\2\3(15667R`]i5orsttDfy^7/h䖢â`9xxx亖Ė˖ЖaԖ<֖זؖؖؖχڇ⇤臃b>rrrrssttttdtAt tuuuWWWWXXYYYYeYCZZZZZ!"$$%&g&F&&'''iI$kL*mO/kA߱ߏkBڲڏlCղՐmDβΑm6FDLOQQNdzeǑsn|G[xՋoIeeee|մĴpɴK̴δϴддͨרިrMʘʘʘʘ՘sOtQ%lllllmmnnnvnTn*nnnnDDDDEEFGGGwGVH/HHHHyX4{[9}^=|S|T}U~W;PX\!cgij>>>>pƩѤс[)Ƥǂ\-Һ^1`5b9d=______``aaafaAabbb iD kHlJf1f3g5i7"2Ufjr:y}Vw؊푡k=xxxxxػm?ٶٓnBͷ͔pEqHsKuOwwwwwwwxxxxwyRyyyyMMMMMMNOOPPyPUP&PPPMMMMMMNOOPPyPUP&PPPMMMMMMNOOPPyPUP&PPPxHyIzK{M4BIMQk||OKKKKKKnǫ}Q~SV ߦXѧу[ ](`/a1a1a1a1\^_EaWahk?jفc ھe&g,i1k6m;׻ؖo?׻ؖo?׻ؖo?׻ؖo?׻ؖo?׻ؖo?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~XYZ MtextNot suitable for real usedesc Little CMS Little CMSdesc2.x 2.xlcms2-2.12rc1/plugins/fast_float/testbed/test0.icc0000644000175000017500000000107013775114656021067 0ustar martimarti8lcms0mntrRGB XYZ  :acspMSFT-lcms desc4cprt<Lwtptchad,rXYZbXYZgXYZrTRCgTRCbTRCchrm$mluc enUSRGB built-inmluc enUS0No copyright, use freelyXYZ -sf32 J*XYZ OXYZ &0-XYZ 42para3chrmT{5&f\lcms2-2.12rc1/plugins/fast_float/testbed/Makefile.in0000644000175000017500000004645513775114656021435 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building fast_float_testbed # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = fast_float_testbed$(EXEEXT) subdir = plugins/fast_float/testbed ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_fast_float_testbed_OBJECTS = fast_float_testbed.$(OBJEXT) fast_float_testbed_OBJECTS = $(am_fast_float_testbed_OBJECTS) fast_float_testbed_DEPENDENCIES = \ $(srcdir)/../src/liblcms2_fast_float.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = fast_float_testbed_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(fast_float_testbed_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/fast_float_testbed.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(fast_float_testbed_SOURCES) DIST_SOURCES = $(fast_float_testbed_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign AM_CPPFLAGS = -I$(builddir)/../include -I$(srcdir)/../include -I$(srcdir)/../src \ -I$(top_builddir)/include fast_float_testbed_LDADD = $(srcdir)/../src/liblcms2_fast_float.la fast_float_testbed_LDFLAGS = @LDFLAGS@ fast_float_testbed_SOURCES = fast_float_testbed.c EXTRA_DIST = test0.icc test1.icc test2.icc test3.icc test5.icc all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign plugins/fast_float/testbed/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign plugins/fast_float/testbed/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list fast_float_testbed$(EXEEXT): $(fast_float_testbed_OBJECTS) $(fast_float_testbed_DEPENDENCIES) $(EXTRA_fast_float_testbed_DEPENDENCIES) @rm -f fast_float_testbed$(EXEEXT) $(AM_V_CCLD)$(fast_float_testbed_LINK) $(fast_float_testbed_OBJECTS) $(fast_float_testbed_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_testbed.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/fast_float_testbed.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/fast_float_testbed.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile check: ./fast_float_testbed # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/plugins/fast_float/testbed/fast_float_testbed.c0000644000175000017500000022075013775114656023360 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" #include #include // Some pixel representations typedef struct { cmsUInt8Number r, g, b; } Scanline_rgb8bits; typedef struct { cmsUInt8Number r, g, b, a; } Scanline_rgba8bits; typedef struct { cmsUInt8Number c, m, y, k; } Scanline_cmyk8bits; typedef struct { cmsUInt16Number r, g, b; } Scanline_rgb16bits; typedef struct { cmsUInt16Number r, g, b, a; } Scanline_rgba16bits; typedef struct { cmsUInt16Number c, m, y, k; } Scanline_cmyk16bits; typedef struct { cmsUInt16Number r, g, b; } Scanline_rgb15bits; typedef struct { cmsUInt16Number r, g, b, a; } Scanline_rgba15bits; typedef struct { cmsUInt16Number r, g, b, a; } Scanline_cmyk15bits; typedef struct { cmsFloat32Number r, g, b; } Scanline_rgbFloat; typedef struct { cmsFloat32Number r, g, b, a; } Scanline_rgbaFloat; typedef struct { cmsFloat32Number c, m, y, k; } Scanline_cmykFloat; typedef struct { cmsFloat32Number L, a, b; } Scanline_LabFloat; // 15 bit mode. <=> 8 bits mode #define FROM_8_TO_15(x8) (cmsUInt16Number) ((((cmsUInt64Number)x8 << 15)) / 0xFF) #define FROM_15_TO_8(x15) (cmsUInt8Number) (((cmsUInt64Number) x15 * 0xFF + 0x4000) >> 15) // Floating point acuracy for tests #define EPSILON_FLOAT_TESTS 0.005 // The callback function used by cmsSetLogErrorHandler() static void FatalErrorQuit(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text) { UNUSED_PARAMETER(ContextID); UNUSED_PARAMETER(ErrorCode); printf("** Fatal error: %s\n", Text); exit(1); } // Rise an error and exit static void Fail(const char* frm, ...) { char ReasonToFailBuffer[1024]; va_list args; va_start(args, frm); vsprintf(ReasonToFailBuffer, frm, args); FatalErrorQuit(0, 0, ReasonToFailBuffer); // unreacheable va_end(args); } // Creates a fake profile that only has a curve. Used in several places static cmsHPROFILE CreateCurves(void) { cmsToneCurve* Gamma = cmsBuildGamma(0, 1.1); cmsToneCurve* Transfer[3]; cmsHPROFILE h; Transfer[0] = Transfer[1] = Transfer[2] = Gamma; h = cmsCreateLinearizationDeviceLink(cmsSigRgbData, Transfer); cmsFreeToneCurve(Gamma); return h; } // Check for a single 15 bit Photoshop-like formatter static void CheckSingleFormatter15(cmsContext id, cmsUInt32Number Type, const char* Text) { cmsUInt16Number Values[cmsMAXCHANNELS]; cmsUInt8Number Buffer[1024]; cmsFormatter f, b; cmsInt32Number i, j, nChannels, bytes; _xform_head info; UNUSED_PARAMETER(id); memset(&info, 0, sizeof(info)); info.OutputFormat = info.InputFormat = Type; // Get functions to go forth and back f = Formatter_15Bit_Factory(Type, cmsFormatterInput, CMS_PACK_FLAGS_16BITS); b = Formatter_15Bit_Factory(Type, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS); if (f.Fmt16 == NULL || b.Fmt16 == NULL) { Fail("no formatter for %s", Text); return; } nChannels = T_CHANNELS(Type); bytes = T_BYTES(Type); for (j = 0; j < 5; j++) { for (i = 0; i < nChannels; i++) { Values[i] = (cmsUInt16Number)(i + j) << 1; } b.Fmt16((struct _cmstransform_struct*) &info, Values, Buffer, 1); memset(Values, 0, sizeof(Values)); f.Fmt16((struct _cmstransform_struct*) &info, Values, Buffer, 1); for (i = 0; i < nChannels; i++) { if (Values[i] != ((i + j) << 1)) { Fail("%s failed", Text); return; } } } } #define C(a) CheckSingleFormatter15(0, a, #a) // Check for all 15 bits formatters static void CheckFormatters15(void) { C(TYPE_GRAY_15); C(TYPE_GRAY_15_REV); C(TYPE_GRAY_15_SE); C(TYPE_GRAYA_15); C(TYPE_GRAYA_15_SE); C(TYPE_GRAYA_15_PLANAR); C(TYPE_RGB_15); C(TYPE_RGB_15_PLANAR); C(TYPE_RGB_15_SE); C(TYPE_BGR_15); C(TYPE_BGR_15_PLANAR); C(TYPE_BGR_15_SE); C(TYPE_RGBA_15); C(TYPE_RGBA_15_PLANAR); C(TYPE_RGBA_15_SE); C(TYPE_ARGB_15); C(TYPE_ABGR_15); C(TYPE_ABGR_15_PLANAR); C(TYPE_ABGR_15_SE); C(TYPE_BGRA_15); C(TYPE_BGRA_15_SE); C(TYPE_YMC_15); C(TYPE_CMY_15); C(TYPE_CMY_15_PLANAR); C(TYPE_CMY_15_SE); C(TYPE_CMYK_15); C(TYPE_CMYK_15_REV); C(TYPE_CMYK_15_PLANAR); C(TYPE_CMYK_15_SE); C(TYPE_KYMC_15); C(TYPE_KYMC_15_SE); C(TYPE_KCMY_15); C(TYPE_KCMY_15_REV); C(TYPE_KCMY_15_SE); } #undef C static cmsInt32Number checkSingleComputeIncrements(cmsUInt32Number Format, cmsUInt32Number planeStride, cmsUInt32Number ExpectedChannels, cmsUInt32Number ExpectedAlpha, ...) { cmsUInt32Number nChannels, nAlpha, nTotal, i, rc = 0 ; cmsUInt32Number ComponentStartingOrder[cmsMAXCHANNELS], ComponentPointerIncrements[cmsMAXCHANNELS]; va_list args; va_start(args, ExpectedAlpha); _cmsComputeComponentIncrements(Format, planeStride, &nChannels, &nAlpha, ComponentStartingOrder, ComponentPointerIncrements); if (nChannels != ExpectedChannels) return 0; if (nAlpha != ExpectedAlpha) return 0; nTotal = nAlpha + nChannels; for (i = 0; i < nTotal; i++) { cmsUInt32Number so = va_arg(args, cmsUInt32Number); if (so != ComponentStartingOrder[i]) goto Error; } for (i = 0; i < nTotal; i++) { cmsUInt32Number so = va_arg(args, cmsUInt32Number); if (so != ComponentPointerIncrements[i]) goto Error; } // Success rc = 1; Error: va_end(args); return rc; } #define CHECK(frm, plane, chans, alpha, ...) if (!checkSingleComputeIncrements(frm, plane, chans, alpha, __VA_ARGS__)) { printf("Format failed!\n"); return 0; } // Validate the compute increments function cmsInt32Number CheckComputeIncrements(void) { CHECK(TYPE_GRAY_8, 0, 1, 0, /**/ 0, /**/ 1); CHECK(TYPE_GRAYA_8, 0, 1, 1, /**/ 0, 1, /**/ 2, 2); CHECK(TYPE_AGRAY_8, 0, 1, 1, /**/ 1, 0, /**/ 2, 2); CHECK(TYPE_GRAY_16, 0, 1, 0, /**/ 0, /**/ 2); CHECK(TYPE_GRAYA_16, 0, 1, 1, /**/ 0, 2, /**/ 4, 4); CHECK(TYPE_AGRAY_16, 0, 1, 1, /**/ 2, 0, /**/ 4, 4); CHECK(TYPE_GRAY_FLT, 0, 1, 0, /**/ 0, /**/ 4); CHECK(TYPE_GRAYA_FLT, 0, 1, 1, /**/ 0, 4, /**/ 8, 8); CHECK(TYPE_AGRAY_FLT, 0, 1, 1, /**/ 4, 0, /**/ 8, 8); CHECK(TYPE_GRAY_DBL, 0, 1, 0, /**/ 0, /**/ 8); CHECK(TYPE_AGRAY_DBL, 0, 1, 1, /**/ 8, 0, /**/ 16, 16); CHECK(TYPE_RGB_8, 0, 3, 0, /**/ 0, 1, 2, /**/ 3, 3, 3); CHECK(TYPE_RGBA_8, 0, 3, 1, /**/ 0, 1, 2, 3, /**/ 4, 4, 4, 4); CHECK(TYPE_ARGB_8, 0, 3, 1, /**/ 1, 2, 3, 0, /**/ 4, 4, 4, 4); CHECK(TYPE_RGB_16, 0, 3, 0, /**/ 0, 2, 4, /**/ 6, 6, 6); CHECK(TYPE_RGBA_16, 0, 3, 1, /**/ 0, 2, 4, 6, /**/ 8, 8, 8, 8); CHECK(TYPE_ARGB_16, 0, 3, 1, /**/ 2, 4, 6, 0, /**/ 8, 8, 8, 8); CHECK(TYPE_RGB_FLT, 0, 3, 0, /**/ 0, 4, 8, /**/ 12, 12, 12); CHECK(TYPE_RGBA_FLT, 0, 3, 1, /**/ 0, 4, 8, 12, /**/ 16, 16, 16, 16); CHECK(TYPE_ARGB_FLT, 0, 3, 1, /**/ 4, 8, 12, 0, /**/ 16, 16, 16, 16); CHECK(TYPE_BGR_8, 0, 3, 0, /**/ 2, 1, 0, /**/ 3, 3, 3); CHECK(TYPE_BGRA_8, 0, 3, 1, /**/ 2, 1, 0, 3, /**/ 4, 4, 4, 4); CHECK(TYPE_ABGR_8, 0, 3, 1, /**/ 3, 2, 1, 0, /**/ 4, 4, 4, 4); CHECK(TYPE_BGR_16, 0, 3, 0, /**/ 4, 2, 0, /**/ 6, 6, 6); CHECK(TYPE_BGRA_16, 0, 3, 1, /**/ 4, 2, 0, 6, /**/ 8, 8, 8, 8); CHECK(TYPE_ABGR_16, 0, 3, 1, /**/ 6, 4, 2, 0, /**/ 8, 8, 8, 8); CHECK(TYPE_BGR_FLT, 0, 3, 0, /**/ 8, 4, 0, /**/ 12, 12, 12); CHECK(TYPE_BGRA_FLT, 0, 3, 1, /**/ 8, 4, 0, 12, /**/ 16, 16, 16, 16); CHECK(TYPE_ABGR_FLT, 0, 3, 1, /**/ 12, 8, 4, 0, /**/ 16, 16, 16, 16); CHECK(TYPE_CMYK_8, 0, 4, 0, /**/ 0, 1, 2, 3, /**/ 4, 4, 4, 4); CHECK(TYPE_CMYKA_8, 0, 4, 1, /**/ 0, 1, 2, 3, 4, /**/ 5, 5, 5, 5, 5); CHECK(TYPE_ACMYK_8, 0, 4, 1, /**/ 1, 2, 3, 4, 0, /**/ 5, 5, 5, 5, 5); CHECK(TYPE_KYMC_8, 0, 4, 0, /**/ 3, 2, 1, 0, /**/ 4, 4, 4, 4); CHECK(TYPE_KYMCA_8, 0, 4, 1, /**/ 3, 2, 1, 0, 4, /**/ 5, 5, 5, 5, 5); CHECK(TYPE_AKYMC_8, 0, 4, 1, /**/ 4, 3, 2, 1, 0, /**/ 5, 5, 5, 5, 5); CHECK(TYPE_KCMY_8, 0, 4, 0, /**/ 1, 2, 3, 0, /**/ 4, 4, 4, 4); CHECK(TYPE_CMYK_16, 0, 4, 0, /**/ 0, 2, 4, 6, /**/ 8, 8, 8, 8); CHECK(TYPE_CMYKA_16, 0, 4, 1, /**/ 0, 2, 4, 6, 8, /**/ 10, 10, 10, 10, 10); CHECK(TYPE_ACMYK_16, 0, 4, 1, /**/ 2, 4, 6, 8, 0, /**/ 10, 10, 10, 10, 10); CHECK(TYPE_KYMC_16, 0, 4, 0, /**/ 6, 4, 2, 0, /**/ 8, 8, 8, 8); CHECK(TYPE_KYMCA_16, 0, 4, 1, /**/ 6, 4, 2, 0, 8, /**/ 10, 10, 10, 10, 10); CHECK(TYPE_AKYMC_16, 0, 4, 1, /**/ 8, 6, 4, 2, 0, /**/ 10, 10, 10, 10, 10); CHECK(TYPE_KCMY_16, 0, 4, 0, /**/ 2, 4, 6, 0, /**/ 8, 8, 8, 8); // Planar CHECK(TYPE_GRAYA_8_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 1, 1); CHECK(TYPE_AGRAY_8_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 1, 1); CHECK(TYPE_GRAYA_16_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 2, 2); CHECK(TYPE_AGRAY_16_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 2, 2); CHECK(TYPE_GRAYA_FLT_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 4, 4); CHECK(TYPE_AGRAY_FLT_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 4, 4); CHECK(TYPE_GRAYA_DBL_PLANAR, 100, 1, 1, /**/ 0, 100, /**/ 8, 8); CHECK(TYPE_AGRAY_DBL_PLANAR, 100, 1, 1, /**/ 100, 0, /**/ 8, 8); CHECK(TYPE_RGB_8_PLANAR, 100, 3, 0, /**/ 0, 100, 200, /**/ 1, 1, 1); CHECK(TYPE_RGBA_8_PLANAR, 100, 3, 1, /**/ 0, 100, 200, 300, /**/ 1, 1, 1, 1); CHECK(TYPE_ARGB_8_PLANAR, 100, 3, 1, /**/ 100, 200, 300, 0, /**/ 1, 1, 1, 1); CHECK(TYPE_BGR_8_PLANAR, 100, 3, 0, /**/ 200, 100, 0, /**/ 1, 1, 1); CHECK(TYPE_BGRA_8_PLANAR, 100, 3, 1, /**/ 200, 100, 0, 300, /**/ 1, 1, 1, 1); CHECK(TYPE_ABGR_8_PLANAR, 100, 3, 1, /**/ 300, 200, 100, 0, /**/ 1, 1, 1, 1); CHECK(TYPE_RGB_16_PLANAR, 100, 3, 0, /**/ 0, 100, 200, /**/ 2, 2, 2); CHECK(TYPE_RGBA_16_PLANAR, 100, 3, 1, /**/ 0, 100, 200, 300, /**/ 2, 2, 2, 2); CHECK(TYPE_ARGB_16_PLANAR, 100, 3, 1, /**/ 100, 200, 300, 0, /**/ 2, 2, 2, 2); CHECK(TYPE_BGR_16_PLANAR, 100, 3, 0, /**/ 200, 100, 0, /**/ 2, 2, 2); CHECK(TYPE_BGRA_16_PLANAR, 100, 3, 1, /**/ 200, 100, 0, 300, /**/ 2, 2, 2, 2); CHECK(TYPE_ABGR_16_PLANAR, 100, 3, 1, /**/ 300, 200, 100, 0, /**/ 2, 2, 2, 2); return 1; } // Check 15 bit mode accuracy static cmsBool Valid15(cmsUInt16Number a, cmsUInt8Number b) { return abs(FROM_15_TO_8(a) - b) <= 2; } // Check the test macros itselves static void Check15bitMacros(void) { int i; printf("Checking 15 bit <=> 8 bit macros..."); for (i = 0; i < 256; i++) { cmsUInt16Number n = FROM_8_TO_15(i); cmsUInt8Number m = FROM_15_TO_8(n); if (m != i) Fail("Failed on %d (->%d->%d)", i, n, m); } printf("ok\n"); } // Do an in-depth test by checking all RGB cube of 8 bits, going from profilein to profileout. // Results should be same except for 2 contone levels allowed for roundoff. Note 15 bits is more // precise than 8 bits and this is a source of discrepancies. Cache is disabled static void TryAllValues15(cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { Scanline_rgb8bits* buffer8in; Scanline_rgb15bits* buffer15in; Scanline_rgb8bits* buffer8out; Scanline_rgb15bits* buffer15out; int r, g, b, j; cmsUInt32Number npixels = 256 * 256 * 256; // All RGB cube in 8 bits cmsHTRANSFORM xform15 = cmsCreateTransformTHR(0, hlcmsProfileIn, TYPE_RGB_15, hlcmsProfileOut, TYPE_RGB_15, Intent, cmsFLAGS_NOCACHE); cmsHTRANSFORM xform8 = cmsCreateTransformTHR(0, hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, Intent, cmsFLAGS_NOCACHE); // Transforms already created cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); if (xform15 == NULL || xform8 == NULL) { Fail("NULL transforms on check for 15 bit conversions"); } // Since this is just a test, I will not check memory allocation... buffer8in = (Scanline_rgb8bits*)malloc(npixels * sizeof(Scanline_rgb8bits)); buffer15in = (Scanline_rgb15bits*)malloc(npixels * sizeof(Scanline_rgb15bits)); buffer8out = (Scanline_rgb8bits*)malloc(npixels * sizeof(Scanline_rgb8bits)); buffer15out = (Scanline_rgb15bits*)malloc(npixels * sizeof(Scanline_rgb15bits)); // Fill input values for 8 and 15 bits j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { buffer8in[j].r = (cmsUInt8Number)r; buffer8in[j].g = (cmsUInt8Number)g; buffer8in[j].b = (cmsUInt8Number)b; buffer15in[j].r = FROM_8_TO_15(r); buffer15in[j].g = FROM_8_TO_15(g); buffer15in[j].b = FROM_8_TO_15(b); j++; } cmsDoTransform(xform15, buffer15in, buffer15out, npixels); cmsDoTransform(xform8, buffer8in, buffer8out, npixels); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { // Check the results if (!Valid15(buffer15out[j].r, buffer8out[j].r) || !Valid15(buffer15out[j].g, buffer8out[j].g) || !Valid15(buffer15out[j].b, buffer8out[j].b)) Fail("Conversion failed at (%d %d %d) != (%d %d %d)", buffer8out[j].r, buffer8out[j].g, buffer8out[j].b, FROM_15_TO_8(buffer15out[j].r), FROM_15_TO_8(buffer15out[j].g), FROM_15_TO_8(buffer15out[j].b)); j++; } free(buffer8in); free(buffer15in); free(buffer8out); free(buffer15out); cmsDeleteTransform(xform15); cmsDeleteTransform(xform8); } // Convert some known values static void Check15bitsConversions(void) { Check15bitMacros(); printf("Checking accuracy of 15 bits on CLUT..."); TryAllValues15(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); printf("Ok\n"); printf("Checking accuracy of 15 bits on same profile ..."); TryAllValues15(cmsOpenProfileFromFile("test0.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL); printf("Ok\n"); printf("Checking accuracy of 15 bits on Matrix..."); TryAllValues15(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL); printf("Ok\n"); printf("All 15 bits tests passed OK\n\n"); } // Next test checks results of optimized 16 bits versus raw 16 bits. static void TryAllValues16bits(cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsContext Raw = cmsCreateContext(NULL, NULL); cmsContext Plugin = cmsCreateContext(cmsFastFloatExtensions(), NULL); Scanline_rgba16bits* bufferIn; Scanline_rgba16bits* bufferRawOut; Scanline_rgba16bits* bufferPluginOut; int r, g, b; int j; cmsUInt32Number npixels = 256 * 256 * 256; cmsHTRANSFORM xformRaw = cmsCreateTransformTHR(Raw, hlcmsProfileIn, TYPE_RGBA_16, hlcmsProfileOut, TYPE_RGBA_16, Intent, cmsFLAGS_NOCACHE| cmsFLAGS_COPY_ALPHA); cmsHTRANSFORM xformPlugin = cmsCreateTransformTHR(Plugin, hlcmsProfileIn, TYPE_RGBA_16, hlcmsProfileOut, TYPE_RGBA_16, Intent, cmsFLAGS_NOCACHE| cmsFLAGS_COPY_ALPHA); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); if (xformRaw == NULL || xformPlugin == NULL) { Fail("NULL transforms on check float conversions"); } // Again, no checking on mem alloc because this is just a test bufferIn = (Scanline_rgba16bits*)malloc(npixels * sizeof(Scanline_rgba16bits)); bufferRawOut = (Scanline_rgba16bits*)malloc(npixels * sizeof(Scanline_rgba16bits)); bufferPluginOut = (Scanline_rgba16bits*)malloc(npixels * sizeof(Scanline_rgba16bits)); // Same input to both transforms j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { bufferIn[j].r = FROM_8_TO_16(0xf8); bufferIn[j].g = FROM_8_TO_16(0xf8); bufferIn[j].b = FROM_8_TO_16(0xf8); bufferIn[j].a = 0xffff; j++; } // Different transforms, different output buffers cmsDoTransform(xformRaw, bufferIn, bufferRawOut, npixels); cmsDoTransform(xformPlugin, bufferIn, bufferPluginOut, npixels); // Lets compare results j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { if (bufferRawOut[j].r != bufferPluginOut[j].r || bufferRawOut[j].g != bufferPluginOut[j].g || bufferRawOut[j].b != bufferPluginOut[j].b || bufferRawOut[j].a != bufferPluginOut[j].a) Fail( "Conversion failed at [%x %x %x %x] (%x %x %x %x) != (%x %x %x %x)", bufferIn[j].r, bufferIn[j].g, bufferIn[j].b, bufferIn[j].a, bufferRawOut[j].r, bufferRawOut[j].g, bufferRawOut[j].b, bufferRawOut[j].a, bufferPluginOut[j].r, bufferPluginOut[j].g, bufferPluginOut[j].b, bufferPluginOut[j].a); j++; } free(bufferIn); free(bufferRawOut); free(bufferPluginOut); cmsDeleteTransform(xformRaw); cmsDeleteTransform(xformPlugin); cmsDeleteContext(Plugin); cmsDeleteContext(Raw); } static void CheckAccuracy16Bits(void) { // CLUT should be as 16 bits or better printf("Checking accuracy of 16 bits CLUT..."); TryAllValues16bits(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); printf("All 16 bits tests passed OK\n\n"); } // -------------------------------------------------------------------------------------------------- // A C C U R A C Y C H E C K S // -------------------------------------------------------------------------------------------------- // Check result accuracy static cmsBool ValidFloat(cmsFloat32Number a, cmsFloat32Number b) { return fabsf(a-b) < EPSILON_FLOAT_TESTS; } // Do an in-depth test by checking all RGB cube of 8 bits, going from profilein to profileout. // Values with and without optimization are checked (different contexts, one with the plugin and another without) // Results should be same except for EPSILON_FLOAT_TESTS allowed for accuracy/speed tradeoff. Cache is disabled static void TryAllValuesFloat(cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { cmsContext Raw = cmsCreateContext(NULL, NULL); cmsContext Plugin = cmsCreateContext(cmsFastFloatExtensions(), NULL); Scanline_rgbFloat* bufferIn; Scanline_rgbFloat* bufferRawOut; Scanline_rgbFloat* bufferPluginOut; int r, g, b; int j; cmsUInt32Number npixels = 256 * 256 * 256; cmsHTRANSFORM xformRaw = cmsCreateTransformTHR(Raw, hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, Intent, cmsFLAGS_NOCACHE); cmsHTRANSFORM xformPlugin = cmsCreateTransformTHR(Plugin, hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); if (xformRaw == NULL || xformPlugin == NULL) { Fail("NULL transforms on check float conversions"); } // Again, no checking on mem alloc because this is just a test bufferIn = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat)); bufferRawOut = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat)); bufferPluginOut = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat)); // Same input to both transforms j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { bufferIn[j].r = (cmsFloat32Number)r / 255.0f; bufferIn[j].g = (cmsFloat32Number)g / 255.0f; bufferIn[j].b = (cmsFloat32Number)b / 255.0f; j++; } // Different transforms, different output buffers cmsDoTransform(xformRaw, bufferIn, bufferRawOut, npixels); cmsDoTransform(xformPlugin, bufferIn, bufferPluginOut, npixels); // Lets compare results j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { if (!ValidFloat(bufferRawOut[j].r, bufferPluginOut[j].r) || !ValidFloat(bufferRawOut[j].g, bufferPluginOut[j].g) || !ValidFloat(bufferRawOut[j].b, bufferPluginOut[j].b)) Fail("Conversion failed at (%f %f %f) != (%f %f %f)", bufferRawOut[j].r, bufferRawOut[j].g, bufferRawOut[j].b, bufferPluginOut[j].r, bufferPluginOut[j].g, bufferPluginOut[j].b); j++; } free(bufferIn); free(bufferRawOut); free(bufferPluginOut); cmsDeleteTransform(xformRaw); cmsDeleteTransform(xformPlugin); cmsDeleteContext(Plugin); cmsDeleteContext(Raw); } static void TryAllValuesFloatAlpha(cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent, cmsBool copyAlpha) { cmsContext Raw = cmsCreateContext(NULL, NULL); cmsContext Plugin = cmsCreateContext(cmsFastFloatExtensions(), NULL); Scanline_rgbaFloat* bufferIn; Scanline_rgbaFloat* bufferRawOut; Scanline_rgbaFloat* bufferPluginOut; int r, g, b; int j; cmsUInt32Number npixels = 256 * 256 * 256; cmsUInt32Number flags = cmsFLAGS_NOCACHE | ( copyAlpha? cmsFLAGS_COPY_ALPHA : 0); cmsHTRANSFORM xformRaw = cmsCreateTransformTHR(Raw, hlcmsProfileIn, TYPE_RGBA_FLT, hlcmsProfileOut, TYPE_RGBA_FLT, Intent, flags); cmsHTRANSFORM xformPlugin = cmsCreateTransformTHR(Plugin, hlcmsProfileIn, TYPE_RGBA_FLT, hlcmsProfileOut, TYPE_RGBA_FLT, Intent, flags); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); if (xformRaw == NULL || xformPlugin == NULL) { Fail("NULL transforms on check float conversions"); } // Again, no checking on mem alloc because this is just a test bufferIn = (Scanline_rgbaFloat*)malloc(npixels * sizeof(Scanline_rgbaFloat)); bufferRawOut = (Scanline_rgbaFloat*)malloc(npixels * sizeof(Scanline_rgbaFloat)); bufferPluginOut = (Scanline_rgbaFloat*)malloc(npixels * sizeof(Scanline_rgbaFloat)); memset(bufferRawOut, 0, npixels * sizeof(Scanline_rgbaFloat)); memset(bufferPluginOut, 0, npixels * sizeof(Scanline_rgbaFloat)); // Same input to both transforms j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { bufferIn[j].r = (cmsFloat32Number)r / 255.0f; bufferIn[j].g = (cmsFloat32Number)g / 255.0f; bufferIn[j].b = (cmsFloat32Number)b / 255.0f; bufferIn[j].a = (cmsFloat32Number) 1.0f; j++; } // Different transforms, different output buffers cmsDoTransform(xformRaw, bufferIn, bufferRawOut, npixels); cmsDoTransform(xformPlugin, bufferIn, bufferPluginOut, npixels); // Lets compare results j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { if (!ValidFloat(bufferRawOut[j].r, bufferPluginOut[j].r) || !ValidFloat(bufferRawOut[j].g, bufferPluginOut[j].g) || !ValidFloat(bufferRawOut[j].b, bufferPluginOut[j].b) || !ValidFloat(bufferRawOut[j].a, bufferPluginOut[j].a)) Fail("Conversion failed at (%f %f %f %f) != (%f %f %f %f)", bufferRawOut[j].r, bufferRawOut[j].g, bufferRawOut[j].b, bufferRawOut[j].a, bufferPluginOut[j].r, bufferPluginOut[j].g, bufferPluginOut[j].b, bufferPluginOut[j].a); j++; } free(bufferIn); free(bufferRawOut); free(bufferPluginOut); cmsDeleteTransform(xformRaw); cmsDeleteTransform(xformPlugin); cmsDeleteContext(Plugin); cmsDeleteContext(Raw); } // Next test checks results of optimized floating point versus 16 bits. That is, converting the float to 16 bits, operating // in 16 bits and back to float. Results again should be in range of epsilon static cmsBool Valid16Float(cmsUInt16Number a, cmsFloat32Number b) { return fabs(((cmsFloat32Number)a / (cmsFloat32Number) 0xFFFF) - b) < EPSILON_FLOAT_TESTS; } // Do an in-depth test by checking all RGB cube of 8 bits, going from profilein to profileout. 16 bits temporary is used as reference static void TryAllValuesFloatVs16(cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut, cmsInt32Number Intent) { Scanline_rgbFloat* bufferIn; Scanline_rgb16bits* bufferIn16; Scanline_rgbFloat* bufferFloatOut; Scanline_rgb16bits* buffer16Out; int r, g, b; int j; cmsUInt32Number npixels = 256 * 256 * 256; cmsHTRANSFORM xformRaw = cmsCreateTransform(hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, Intent, cmsFLAGS_NOCACHE); cmsHTRANSFORM xformPlugin = cmsCreateTransform(hlcmsProfileIn, TYPE_RGB_FLT, hlcmsProfileOut, TYPE_RGB_FLT, Intent, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); if (xformRaw == NULL || xformPlugin == NULL) { Fail("NULL transforms on check float vs 16 conversions"); } // Again, no checking on mem alloc because this is just a test bufferIn = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat)); bufferIn16 = (Scanline_rgb16bits*)malloc(npixels * sizeof(Scanline_rgb16bits)); bufferFloatOut = (Scanline_rgbFloat*)malloc(npixels * sizeof(Scanline_rgbFloat)); buffer16Out = (Scanline_rgb16bits*)malloc(npixels * sizeof(Scanline_rgb16bits)); // Fill two equivalent input buffers j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { bufferIn[j].r = (cmsFloat32Number)r / 255.0f; bufferIn[j].g = (cmsFloat32Number)g / 255.0f; bufferIn[j].b = (cmsFloat32Number)b / 255.0f; bufferIn16[j].r = FROM_8_TO_16(r); bufferIn16[j].g = FROM_8_TO_16(g); bufferIn16[j].b = FROM_8_TO_16(b); j++; } // Convert cmsDoTransform(xformRaw, bufferIn16, buffer16Out, npixels); cmsDoTransform(xformPlugin, bufferIn, bufferFloatOut, npixels); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { // Check for same values if (!Valid16Float(buffer16Out[j].r, bufferFloatOut[j].r) || !Valid16Float(buffer16Out[j].g, bufferFloatOut[j].g) || !Valid16Float(buffer16Out[j].b, bufferFloatOut[j].b)) Fail("Conversion failed at (%f %f %f) != (%f %f %f)", buffer16Out[j].r / 65535.0, buffer16Out[j].g / 65535.0, buffer16Out[j].b / 65535.0, bufferFloatOut[j].r, bufferFloatOut[j].g, bufferFloatOut[j].b); j++; } free(bufferIn16); free(buffer16Out); free(bufferIn); free(bufferFloatOut); cmsDeleteTransform(xformRaw); cmsDeleteTransform(xformPlugin); } // Check change format feature static void CheckChangeFormat(void) { cmsHPROFILE hsRGB, hLab; cmsHTRANSFORM xform; cmsUInt8Number rgb8[3] = { 10, 120, 40 }; cmsUInt16Number rgb16[3] = { 10* 257, 120*257, 40*257 }; cmsUInt16Number lab16_1[3], lab16_2[3]; printf("Checking change format feature..."); hsRGB = cmsCreate_sRGBProfile(); hLab = cmsCreateLab4Profile(NULL); xform = cmsCreateTransform(hsRGB, TYPE_RGB_16, hLab, TYPE_Lab_16, INTENT_PERCEPTUAL, 0); cmsCloseProfile(hsRGB); cmsCloseProfile(hLab); cmsDoTransform(xform, rgb16, lab16_1, 1); cmsChangeBuffersFormat(xform, TYPE_RGB_8, TYPE_Lab_16); cmsDoTransform(xform, rgb8, lab16_2, 1); cmsDeleteTransform(xform); if (memcmp(lab16_1, lab16_2, sizeof(lab16_1)) != 0) Fail("Change format failed!"); printf("Ok\n"); } static cmsBool ValidInt(cmsUInt16Number a, cmsUInt16Number b) { return abs(a - b) <= 32; } static void CheckLab2Roundtrip(void) { cmsHPROFILE hsRGB, hLab; cmsHTRANSFORM xform, xform2; cmsInt8Number* lab; cmsInt32Number Mb, j; cmsInt32Number r, g, b; Scanline_rgb8bits* In; Scanline_rgb8bits* Out; printf("Checking lab2 roundtrip..."); hsRGB = cmsCreate_sRGBProfile(); hLab = cmsCreateLab2Profile(NULL); xform = cmsCreateTransform(hsRGB, TYPE_RGB_8, hLab, TYPE_Lab_8, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE|cmsFLAGS_BLACKPOINTCOMPENSATION); xform2 = cmsCreateTransform(hLab, TYPE_Lab_8, hsRGB, TYPE_RGB_8, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_BLACKPOINTCOMPENSATION); cmsCloseProfile(hsRGB); cmsCloseProfile(hLab); Mb = 256 * 256 * 256 * sizeof(Scanline_rgb8bits); In = (Scanline_rgb8bits*)malloc(Mb); Out = (Scanline_rgb8bits*)malloc(Mb); lab = (cmsInt8Number*)malloc(256 * 256 * 256 * 3 * sizeof(cmsInt8Number)); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt8Number)r; In[j].g = (cmsUInt8Number)g; In[j].b = (cmsUInt8Number)b; j++; } cmsDoTransform(xform, In, lab, 256 * 256 * 256); cmsDoTransform(xform2, lab, Out, 256 * 256 * 256); cmsDeleteTransform(xform); cmsDeleteTransform(xform2); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { // Check for same values if (!ValidInt(In[j].r, Out[j].r) || !ValidInt(In[j].g, Out[j].g) || !ValidInt(In[j].b, Out[j].b)) Fail("Conversion failed at (%d %d %d) != (%d %d %d)", In[j].r, In[j].g, In[j].b, Out[j].r, Out[j].g, Out[j].b); j++; } free(In); free(Out); free(lab); printf("Ok\n"); } // Convert some known values static void CheckConversionFloat(void) { printf("Crash test."); TryAllValuesFloatAlpha(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL, FALSE); printf(".."); TryAllValuesFloatAlpha(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL, TRUE); printf("Ok\n"); printf("Crash (II) test."); TryAllValuesFloatAlpha(cmsOpenProfileFromFile("test0.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL, FALSE); printf(".."); TryAllValuesFloatAlpha(cmsOpenProfileFromFile("test0.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL, TRUE); printf("Ok\n"); // Matrix-shaper should be accurate printf("Checking accuracy on Matrix-shaper..."); TryAllValuesFloat(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL); printf("Ok\n"); // CLUT should be as 16 bits or better printf("Checking accuracy of CLUT..."); TryAllValuesFloatVs16(cmsOpenProfileFromFile("test5.icc", "r"), cmsOpenProfileFromFile("test3.icc", "r"), INTENT_PERCEPTUAL); printf("Ok\n"); // Same profile should give same values (we test both methods) printf("Checking accuracy on same profile ..."); TryAllValuesFloatVs16(cmsOpenProfileFromFile("test0.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL); TryAllValuesFloat(cmsOpenProfileFromFile("test0.icc", "r"), cmsOpenProfileFromFile("test0.icc", "r"), INTENT_PERCEPTUAL); printf("Ok\n"); } static cmsBool ValidFloat2(cmsFloat32Number a, cmsFloat32Number b) { return fabsf(a - b) < 0.007; } static cmsFloat32Number distance(cmsFloat32Number rgb1[], cmsFloat32Number rgb2[]) { cmsFloat32Number dr = rgb2[0] - rgb1[0]; cmsFloat32Number dg = rgb2[1] - rgb1[1]; cmsFloat32Number db = rgb2[2] - rgb1[2]; return dr * dr + dg * dg + db * db; } static void CheckLab2RGB(void) { cmsHPROFILE hLab = cmsCreateLab4Profile(NULL); cmsHPROFILE hRGB = cmsOpenProfileFromFile("test3.icc", "r"); cmsContext noPlugin = cmsCreateContext(0, 0); cmsHTRANSFORM hXformNoPlugin = cmsCreateTransformTHR(noPlugin, hLab, TYPE_Lab_FLT, hRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); cmsHTRANSFORM hXformPlugin = cmsCreateTransformTHR(0, hLab, TYPE_Lab_FLT, hRGB, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOCACHE); cmsFloat32Number Lab[3], RGB[3], RGB2[3]; cmsFloat32Number maxInside = 0, maxOutside = 0, L, a, b; printf("Checking Lab -> RGB..."); for (L = 4; L <= 100; L++) { for (a = -30; a < +30; a++) for (b = -30; b < +30; b++) { cmsFloat32Number d; Lab[0] = L; Lab[1] = a; Lab[2] = b; cmsDoTransform(hXformNoPlugin, Lab, RGB, 1); cmsDoTransform(hXformPlugin, Lab, RGB2, 1); d = distance(RGB, RGB2); if (d > maxInside) maxInside = d; } } for (L = 1; L <= 100; L += 5) { for (a = -100; a < +100; a += 5) for (b = -100; b < +100; b += 5) { cmsFloat32Number d; Lab[0] = L; Lab[1] = a; Lab[2] = b; cmsDoTransform(hXformNoPlugin, Lab, RGB, 1); cmsDoTransform(hXformPlugin, Lab, RGB2, 1); d = distance(RGB, RGB2); if (d > maxOutside) maxOutside = d; } } printf("Max distance: Inside gamut %f, Outside gamut %f\n", sqrtf(maxInside), sqrtf(maxOutside)); cmsDeleteTransform(hXformNoPlugin); cmsDeleteTransform(hXformPlugin); cmsDeleteContext(noPlugin); } // -------------------------------------------------------------------------------------------------- // P E R F O R M A N C E C H E C K S // -------------------------------------------------------------------------------------------------- static cmsFloat64Number MPixSec(cmsFloat64Number diff) { cmsFloat64Number seconds = (cmsFloat64Number)diff / (cmsFloat64Number)CLOCKS_PER_SEC; return (256.0 * 256.0 * 256.0) / (1024.0*1024.0*seconds); } typedef cmsFloat64Number(*perf_fn)(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut); static void PerformanceHeader(void) { printf(" MPixel/sec. MByte/sec.\n"); } static cmsHPROFILE loadProfile(const char* name) { if (*name == '*') { if (strcmp(name, "*lab") == 0) { return cmsCreateLab4Profile(NULL); } else if (strcmp(name, "*xyz") == 0) { return cmsCreateXYZProfile(); } else if (strcmp(name, "*curves") == 0) { return CreateCurves(); } else Fail("Unknown builtin '%s'", name); } return cmsOpenProfileFromFile(name, "r"); } static cmsFloat64Number Performance(const char* Title, perf_fn fn, cmsContext ct, const char* inICC, const char* outICC, size_t sz, cmsFloat64Number prev) { cmsHPROFILE hlcmsProfileIn = loadProfile(inICC); cmsHPROFILE hlcmsProfileOut = loadProfile(outICC); cmsFloat64Number n = fn(ct, hlcmsProfileIn, hlcmsProfileOut); printf("%-30s: ", Title); fflush(stdout); printf("%-12.2f %-12.2f", n, n * sz); if (prev > 0.0) { cmsFloat64Number imp = n / prev; if (imp > 1) printf(" (x %-2.1f)", imp); } printf("\n"); fflush(stdout); return n; } static void ComparativeCt(cmsContext ct1, cmsContext ct2, const char* Title, perf_fn fn1, perf_fn fn2, const char* inICC, const char* outICC) { cmsHPROFILE hlcmsProfileIn; cmsHPROFILE hlcmsProfileOut; if (inICC == NULL) hlcmsProfileIn = CreateCurves(); else hlcmsProfileIn = cmsOpenProfileFromFile(inICC, "r"); if (outICC == NULL) hlcmsProfileOut = CreateCurves(); else hlcmsProfileOut = cmsOpenProfileFromFile(outICC, "r"); cmsFloat64Number n1 = fn1(ct1, hlcmsProfileIn, hlcmsProfileOut); if (inICC == NULL) hlcmsProfileIn = CreateCurves(); else hlcmsProfileIn = cmsOpenProfileFromFile(inICC, "r"); if (outICC == NULL) hlcmsProfileOut = CreateCurves(); else hlcmsProfileOut = cmsOpenProfileFromFile(outICC, "r"); cmsFloat64Number n2 = fn2(ct2, hlcmsProfileIn, hlcmsProfileOut); printf("%-30s: ", Title); fflush(stdout); printf("%-12.2f %-12.2f\n", n1, n2); } static void Comparative(const char* Title, perf_fn fn1, perf_fn fn2, const char* inICC, const char* outICC) { ComparativeCt(0, 0, Title, fn1, fn2, inICC, outICC); } // The worst case is used, no cache and all rgb combinations static cmsFloat64Number SpeedTest8bitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgb8bits *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGB_8, hlcmsProfileOut, TYPE_RGB_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_rgb8bits); In = (Scanline_rgb8bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt8Number)r; In[j].g = (cmsUInt8Number)g; In[j].b = (cmsUInt8Number)b; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static cmsFloat64Number SpeedTest8bitsRGBA(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgba8bits *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGBA_8, hlcmsProfileOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_rgba8bits); In = (Scanline_rgba8bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt8Number)r; In[j].g = (cmsUInt8Number)g; In[j].b = (cmsUInt8Number)b; In[j].a = 0; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } // The worst case is used, no cache and all rgb combinations static cmsFloat64Number SpeedTest15bitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgb15bits *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGB_15, hlcmsProfileOut, TYPE_RGB_15, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_rgb15bits); In = (Scanline_rgb15bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt16Number)r; In[j].g = (cmsUInt16Number)g; In[j].b = (cmsUInt16Number)b; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static cmsFloat64Number SpeedTest15bitsRGBA(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgba15bits *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGBA_15, hlcmsProfileOut, TYPE_RGBA_15, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_rgba15bits); In = (Scanline_rgba15bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt16Number)r; In[j].g = (cmsUInt16Number)g; In[j].b = (cmsUInt16Number)b; In[j].a = 0; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static cmsFloat64Number SpeedTest15bitsCMYK(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_cmyk15bits *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_CMYK_15, hlcmsProfileOut, TYPE_CMYK_15, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_cmyk15bits); In = (Scanline_cmyk15bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt16Number)r; In[j].g = (cmsUInt16Number)g; In[j].b = (cmsUInt16Number)b; In[j].a = (cmsUInt16Number)0; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } // The worst case is used, no cache and all rgb combinations static cmsFloat64Number SpeedTest16bitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_rgb16bits *In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_rgb16bits); In = (Scanline_rgb16bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsUInt16Number)FROM_8_TO_16(r); In[j].g = (cmsUInt16Number)FROM_8_TO_16(g); In[j].b = (cmsUInt16Number)FROM_8_TO_16(b); j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static cmsFloat64Number SpeedTest16bitsCMYK(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_cmyk16bits* In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_CMYK_16, hlcmsProfileOut, TYPE_CMYK_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 256 * 256 * 256 * sizeof(Scanline_cmyk16bits); In = (Scanline_cmyk16bits*)malloc(Mb); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].c = (cmsUInt16Number)r; In[j].m = (cmsUInt16Number)g; In[j].y = (cmsUInt16Number)b; In[j].k = (cmsUInt16Number)r; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 256 * 256 * 256); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static void SpeedTest8(void) { cmsContext noPlugin = cmsCreateContext(0, 0); cmsFloat64Number t[10]; printf("\n\n"); printf("P E R F O R M A N C E T E S T S 8 B I T S (D E F A U L T)\n"); printf("==============================================================\n\n"); fflush(stdout); PerformanceHeader(); t[0] = Performance("8 bits on CLUT profiles ", SpeedTest8bitsRGB, noPlugin, "test5.icc", "test3.icc", sizeof(Scanline_rgb8bits), 0); t[1] = Performance("8 bits on Matrix-Shaper ", SpeedTest8bitsRGB, noPlugin, "test5.icc", "test0.icc", sizeof(Scanline_rgb8bits), 0); t[2] = Performance("8 bits on same MatrixSh ", SpeedTest8bitsRGB, noPlugin, "test0.icc", "test0.icc", sizeof(Scanline_rgb8bits), 0); t[3] = Performance("8 bits on curves ", SpeedTest8bitsRGB, noPlugin, "*curves", "*curves", sizeof(Scanline_rgb8bits), 0); // Note that context 0 has the plug-in installed printf("\n\n"); printf("P E R F O R M A N C E T E S T S 8 B I T S (P L U G I N)\n"); printf("===========================================================\n\n"); fflush(stdout); PerformanceHeader(); Performance("8 bits on CLUT profiles ", SpeedTest8bitsRGB, 0, "test5.icc", "test3.icc", sizeof(Scanline_rgb8bits), t[0]); Performance("8 bits on Matrix-Shaper ", SpeedTest8bitsRGB, 0, "test5.icc", "test0.icc", sizeof(Scanline_rgb8bits), t[1]); Performance("8 bits on same MatrixSh ", SpeedTest8bitsRGB, 0, "test0.icc", "test0.icc", sizeof(Scanline_rgb8bits), t[2]); Performance("8 bits on curves ", SpeedTest8bitsRGB, 0, "*curves", "*curves", sizeof(Scanline_rgb8bits), t[3]); cmsDeleteContext(noPlugin); } static void SpeedTest15(void) { printf("\n\nP E R F O R M A N C E T E S T S 1 5 B I T S (P L U G I N)\n"); printf( "===============================================================\n\n"); PerformanceHeader(); Performance("15 bits on CLUT profiles ", SpeedTest15bitsRGB, 0, "test5.icc", "test3.icc", sizeof(Scanline_rgb15bits), 0); Performance("15 bits on Matrix-Shaper profiles", SpeedTest15bitsRGB, 0, "test5.icc", "test0.icc", sizeof(Scanline_rgb15bits), 0); Performance("15 bits on same Matrix-Shaper ", SpeedTest15bitsRGB, 0, "test0.icc", "test0.icc", sizeof(Scanline_rgb15bits), 0); Performance("15 bits on curves ", SpeedTest15bitsRGB, 0, "*curves", "*curves", sizeof(Scanline_rgb15bits), 0); Performance("15 bits on CMYK CLUT profiles ", SpeedTest15bitsCMYK, 0, "test1.icc", "test2.icc", sizeof(Scanline_rgba15bits), 0); } static void SpeedTest16(void) { cmsContext noPlugin = cmsCreateContext(0, 0); printf("\n\n"); printf("P E R F O R M A N C E T E S T S 1 6 B I T S (D E F A U L T)\n"); printf("=================================================================\n\n"); PerformanceHeader(); Performance("16 bits on CLUT profiles ", SpeedTest16bitsRGB, noPlugin, "test5.icc", "test3.icc", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on Matrix-Shaper profiles", SpeedTest16bitsRGB, noPlugin, "test5.icc", "test0.icc", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on same Matrix-Shaper ", SpeedTest16bitsRGB, noPlugin, "test0.icc", "test0.icc", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on curves ", SpeedTest16bitsRGB, noPlugin, "*curves", "*curves", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on CMYK CLUT profiles ", SpeedTest16bitsCMYK, noPlugin, "test1.icc", "test2.icc", sizeof(Scanline_cmyk16bits), 0); printf("\n\n"); printf("P E R F O R M A N C E T E S T S 1 6 B I T S (P L U G I N)\n"); printf("===============================================================\n\n"); PerformanceHeader(); Performance("16 bits on CLUT profiles ", SpeedTest16bitsRGB, 0, "test5.icc", "test3.icc", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on Matrix-Shaper profiles", SpeedTest16bitsRGB, 0, "test5.icc", "test0.icc", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on same Matrix-Shaper ", SpeedTest16bitsRGB, 0, "test0.icc", "test0.icc", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on curves ", SpeedTest16bitsRGB, 0, "*curves", "*curves", sizeof(Scanline_rgb16bits), 0); Performance("16 bits on CMYK CLUT profiles ", SpeedTest16bitsCMYK, 0, "test1.icc", "test2.icc", sizeof(Scanline_cmyk16bits), 0); } // The worst case is used, no cache and all rgb combinations static cmsFloat64Number SpeedTestFloatRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; void *In; cmsUInt32Number size, Mb; cmsUInt32Number inFormatter=0, outFormatter=0; cmsFloat64Number seconds; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); switch (cmsGetColorSpace(hlcmsProfileIn)) { case cmsSigRgbData: inFormatter = TYPE_RGB_FLT; break; case cmsSigLabData: inFormatter = TYPE_Lab_FLT; break; default: Fail("Invalid colorspace"); } switch (cmsGetColorSpace(hlcmsProfileOut)) { case cmsSigRgbData: outFormatter = TYPE_RGB_FLT; break; case cmsSigLabData: outFormatter = TYPE_Lab_FLT; break; case cmsSigXYZData: outFormatter = TYPE_XYZ_FLT; break; default: Fail("Invalid colorspace"); } hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, inFormatter, hlcmsProfileOut, outFormatter, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); j = 0; if (inFormatter == TYPE_RGB_FLT) { cmsInt32Number r, g, b; Scanline_rgbFloat* fill; size = 256 * 256 * 256; Mb = size * sizeof(Scanline_rgbFloat); In = malloc(Mb); fill = (Scanline_rgbFloat*)In; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { fill[j].r = (cmsFloat32Number)r / 255.0f; fill[j].g = (cmsFloat32Number)g / 255.0f; fill[j].b = (cmsFloat32Number)b / 255.0f; j++; } } else { cmsFloat32Number L, a, b; Scanline_LabFloat* fill; size = 100 * 256 * 256; Mb = size * sizeof(Scanline_LabFloat); In = malloc(Mb); fill = (Scanline_LabFloat*)In; for (L = 0; L < 100; L++) for (a = -127.0; a < 127.0; a++) for (b = -127.0; b < +127.0; b++) { fill[j].L = L; fill[j].a = a; fill[j].b = b; j++; } } atime = clock(); cmsDoTransform(hlcmsxform, In, In, size); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); seconds = (cmsFloat64Number)diff / (cmsFloat64Number)CLOCKS_PER_SEC; return ((cmsFloat64Number)size) / (1024.0 * 1024.0 * seconds); } static cmsFloat64Number SpeedTestFloatCMYK(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number c, m, y, k, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; Scanline_cmykFloat* In; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_CMYK_FLT, hlcmsProfileOut, TYPE_CMYK_FLT, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); Mb = 64 * 64 * 64 * 64 * sizeof(Scanline_cmykFloat); In = (Scanline_cmykFloat*)malloc(Mb); j = 0; for (c = 0; c < 256; c += 4) for (m = 0; m < 256; m += 4) for (y = 0; y < 256; y += 4) for (k = 0; k < 256; k += 4) { In[j].c = (cmsFloat32Number)c / 255.0f; In[j].m = (cmsFloat32Number)m / 255.0f; In[j].y = (cmsFloat32Number)y / 255.0f; In[j].k = (cmsFloat32Number)k / 255.0f; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, 64 * 64 * 64 * 64); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static cmsFloat64Number SpeedTestFloatLab(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; void* In; cmsUInt32Number size, Mb; cmsUInt32Number outFormatter = 0; cmsFloat64Number seconds; cmsFloat32Number L, a, b; Scanline_LabFloat* fill; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); if (cmsGetColorSpace(hlcmsProfileIn) != cmsSigLabData) { Fail("Invalid colorspace"); } switch (cmsGetColorSpace(hlcmsProfileOut)) { case cmsSigRgbData: outFormatter = TYPE_RGB_FLT; break; case cmsSigLabData: outFormatter = TYPE_Lab_FLT; break; case cmsSigXYZData: outFormatter = TYPE_XYZ_FLT; break; default: Fail("Invalid colorspace"); } hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_Lab_FLT, hlcmsProfileOut, outFormatter, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); j = 0; size = 100 * 256 * 256; Mb = size * sizeof(Scanline_LabFloat); In = malloc(Mb); fill = (Scanline_LabFloat*)In; for (L = 0; L < 100; L++) for (a = -127.0; a < 127.0; a++) for (b = -127.0; b < +127.0; b++) { fill[j].L = L; fill[j].a = a; fill[j].b = b; j++; } atime = clock(); cmsDoTransform(hlcmsxform, In, In, size); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); seconds = (cmsFloat64Number)diff / (cmsFloat64Number)CLOCKS_PER_SEC; return ((cmsFloat64Number)size) / (1024.0 * 1024.0 * seconds); } static void SpeedTestFloat(void) { cmsContext noPlugin = cmsCreateContext(0, 0); cmsFloat64Number t[10] = { 0 }; printf("\n\n"); printf("P E R F O R M A N C E T E S T S F L O A T (D E F A U L T)\n"); printf("==============================================================\n\n"); fflush(stdout); PerformanceHeader(); t[0] = Performance("Floating point on CLUT profiles ", SpeedTestFloatRGB, noPlugin, "test5.icc", "test3.icc", sizeof(Scanline_rgbFloat), 0); t[1] = Performance("Floating point on Matrix-Shaper ", SpeedTestFloatRGB, noPlugin, "test5.icc", "test0.icc", sizeof(Scanline_rgbFloat), 0); t[2] = Performance("Floating point on same MatrixSh ", SpeedTestFloatRGB, noPlugin, "test0.icc", "test0.icc", sizeof(Scanline_rgbFloat), 0); t[3] = Performance("Floating point on curves ", SpeedTestFloatRGB, noPlugin, "*curves", "*curves", sizeof(Scanline_rgbFloat), 0); t[4] = Performance("Floating point on RGB->Lab ", SpeedTestFloatRGB, noPlugin, "test5.icc", "*lab", sizeof(Scanline_rgbFloat), 0); t[5] = Performance("Floating point on RGB->XYZ ", SpeedTestFloatRGB, noPlugin, "test3.icc", "*xyz", sizeof(Scanline_rgbFloat), 0); t[6] = Performance("Floating point on CMYK->CMYK ", SpeedTestFloatCMYK, noPlugin, "test1.icc", "test2.icc",sizeof(Scanline_cmykFloat), 0); t[7] = Performance("Floating point on Lab->RGB ", SpeedTestFloatLab, noPlugin, "*lab", "test3.icc", sizeof(Scanline_LabFloat), 0); // Note that context 0 has the plug-in installed printf("\n\n"); printf("P E R F O R M A N C E T E S T S F L O A T (P L U G I N)\n"); printf("===========================================================\n\n"); fflush(stdout); PerformanceHeader(); Performance("Floating point on CLUT profiles ", SpeedTestFloatRGB, 0, "test5.icc", "test3.icc", sizeof(Scanline_rgbFloat), t[0]); Performance("Floating point on Matrix-Shaper ", SpeedTestFloatRGB, 0, "test5.icc", "test0.icc", sizeof(Scanline_rgbFloat), t[1]); Performance("Floating point on same MatrixSh ", SpeedTestFloatRGB, 0, "test0.icc", "test0.icc", sizeof(Scanline_rgbFloat), t[2]); Performance("Floating point on curves ", SpeedTestFloatRGB, 0, "*curves", "*curves", sizeof(Scanline_rgbFloat), t[3]); Performance("Floating point on RGB->Lab ", SpeedTestFloatRGB, 0, "test5.icc", "*lab", sizeof(Scanline_rgbFloat), t[4]); Performance("Floating point on RGB->XYZ ", SpeedTestFloatRGB, 0, "test3.icc", "*xyz", sizeof(Scanline_rgbFloat), t[5]); Performance("Floating point on CMYK->CMYK ", SpeedTestFloatCMYK, 0, "test1.icc", "test2.icc", sizeof(Scanline_cmykFloat), t[6]); Performance("Floating point on Lab->RGB ", SpeedTestFloatLab, 0, "*lab", "test3.icc", sizeof(Scanline_LabFloat), t[7]); cmsDeleteContext(noPlugin); } static cmsFloat64Number SpeedTestFloatByUsing16BitsRGB(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM xform16; Scanline_rgbFloat *In; Scanline_rgb16bits *tmp16; cmsUInt32Number MbFloat, Mb16; UNUSED_PARAMETER(ct); if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); xform16 = cmsCreateTransformTHR(0, hlcmsProfileIn, TYPE_RGB_16, hlcmsProfileOut, TYPE_RGB_16, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); MbFloat = 256 * 256 * 256 * sizeof(Scanline_rgbFloat); Mb16 = 256 * 256 * 256 * sizeof(Scanline_rgb16bits); In = (Scanline_rgbFloat*)malloc(MbFloat); tmp16 = (Scanline_rgb16bits*)malloc(Mb16); j = 0; for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In[j].r = (cmsFloat32Number)r / 255.0f; In[j].g = (cmsFloat32Number)g / 255.0f; In[j].b = (cmsFloat32Number)b / 255.0f; j++; } atime = clock(); for (j = 0; j < 256 * 256 * 256; j++) { tmp16[j].r = (cmsUInt16Number)floor(In[j].r * 65535.0 + 0.5); tmp16[j].g = (cmsUInt16Number)floor(In[j].g * 65535.0 + 0.5); tmp16[j].b = (cmsUInt16Number)floor(In[j].b * 65535.0 + 0.5); j++; } cmsDoTransform(xform16, tmp16, tmp16, 256 * 256 * 256); for (j = 0; j < 256 * 256 * 256; j++) { In[j].r = (cmsFloat32Number) (tmp16[j].r / 65535.0 ); In[j].g = (cmsFloat32Number) (tmp16[j].g / 65535.0); In[j].b = (cmsFloat32Number) (tmp16[j].b / 65535.0); j++; } diff = clock() - atime; free(In); cmsDeleteTransform(xform16); return MPixSec(diff); } static void ComparativeFloatVs16bits(void) { printf("\n\n"); printf("C O M P A R A T I V E converting to 16 bit vs. using float plug-in.\n"); printf(" values given in MegaPixels per second.\n"); printf("====================================================================\n"); printf(" 16 bits tmp. Float plugin\n"); fflush(stdout); Comparative("Floating point on CLUT profiles ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, "test5.icc", "test3.icc"); Comparative("Floating point on Matrix-Shaper ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, "test5.icc", "test0.icc"); Comparative("Floating point on same MatrixSh ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, "test0.icc", "test0.icc"); Comparative("Floating point on curves ", SpeedTestFloatByUsing16BitsRGB, SpeedTestFloatRGB, NULL, NULL); } typedef struct { Scanline_rgba8bits pixels[256][256]; cmsUInt8Number padding[4]; } padded_line; typedef struct { padded_line line[256]; } big_bitmap; static cmsFloat64Number SpeedTest8bitDoTransform(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b, j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; big_bitmap* In; big_bitmap* Out; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGBA_8, hlcmsProfileOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); // Our test bitmap is 256 x 256 padded lines Mb = sizeof(big_bitmap); In = (big_bitmap*)malloc(Mb); Out = (big_bitmap*)malloc(Mb); for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In->line[r].pixels[g][b].r = (cmsUInt8Number)r; In->line[r].pixels[g][b].g = (cmsUInt8Number)g; In->line[r].pixels[g][b].b = (cmsUInt8Number)b; In->line[r].pixels[g][b].a = 0; } atime = clock(); for (j = 0; j < 256; j++) { cmsDoTransform(hlcmsxform, In->line[j].pixels, Out->line[j].pixels, 256 * 256); } diff = clock() - atime; free(In); free(Out); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static cmsFloat64Number SpeedTest8bitLineStride(cmsContext ct, cmsHPROFILE hlcmsProfileIn, cmsHPROFILE hlcmsProfileOut) { cmsInt32Number r, g, b; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; big_bitmap* In; big_bitmap* Out; cmsUInt32Number Mb; if (hlcmsProfileIn == NULL || hlcmsProfileOut == NULL) Fail("Unable to open profiles"); hlcmsxform = cmsCreateTransformTHR(ct, hlcmsProfileIn, TYPE_RGBA_8, hlcmsProfileOut, TYPE_RGBA_8, INTENT_PERCEPTUAL, cmsFLAGS_NOCACHE); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); // Our test bitmap is 256 x 256 padded lines Mb = sizeof(big_bitmap); In = (big_bitmap*)malloc(Mb); Out = (big_bitmap*)malloc(Mb); for (r = 0; r < 256; r++) for (g = 0; g < 256; g++) for (b = 0; b < 256; b++) { In->line[r].pixels[g][b].r = (cmsUInt8Number)r; In->line[r].pixels[g][b].g = (cmsUInt8Number)g; In->line[r].pixels[g][b].b = (cmsUInt8Number)b; In->line[r].pixels[g][b].a = 0; } atime = clock(); cmsDoTransformLineStride(hlcmsxform, In, Out, 256*256, 256, sizeof(padded_line), sizeof(padded_line), 0, 0); diff = clock() - atime; free(In); free(Out); cmsDeleteTransform(hlcmsxform); return MPixSec(diff); } static void ComparativeLineStride8bits(void) { cmsContext NoPlugin, Plugin; printf("\n\n"); printf("C O M P A R A T I V E cmsDoTransform() vs. cmsDoTransformLineStride()\n"); printf(" values given in MegaPixels per second.\n"); printf("====================================================================\n"); fflush(stdout); NoPlugin = cmsCreateContext(NULL, NULL); Plugin = cmsCreateContext(cmsFastFloatExtensions(), NULL); ComparativeCt(NoPlugin, Plugin, "CLUT profiles ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, "test5.icc", "test3.icc"); ComparativeCt(NoPlugin, Plugin, "CLUT 16 bits ", SpeedTest16bitsRGB, SpeedTest16bitsRGB, "test5.icc", "test3.icc"); ComparativeCt(NoPlugin, Plugin, "Matrix-Shaper ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, "test5.icc", "test0.icc"); ComparativeCt(NoPlugin, Plugin, "same MatrixSh ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, "test0.icc", "test0.icc"); ComparativeCt(NoPlugin, Plugin, "curves ", SpeedTest8bitDoTransform, SpeedTest8bitLineStride, NULL, NULL); cmsDeleteContext(Plugin); cmsDeleteContext(NoPlugin); } static void TestGrayTransformPerformance() { cmsInt32Number j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; float *In; cmsInt32Number pixels; cmsUInt32Number Mb; cmsToneCurve* gamma18; cmsToneCurve* gamma22; cmsHPROFILE hlcmsProfileIn; cmsHPROFILE hlcmsProfileOut; gamma18 = cmsBuildGamma(0, 1.8); gamma22 = cmsBuildGamma(0, 2.2); hlcmsProfileIn = cmsCreateGrayProfile(NULL, gamma18); hlcmsProfileOut = cmsCreateGrayProfile(NULL, gamma22); cmsFreeToneCurve(gamma18); cmsFreeToneCurve(gamma22); hlcmsxform = cmsCreateTransform(hlcmsProfileIn, TYPE_GRAY_FLT | EXTRA_SH(1), hlcmsProfileOut, TYPE_GRAY_FLT|EXTRA_SH(1), INTENT_PERCEPTUAL, 0); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); pixels = 256 * 256 * 256; Mb = pixels* 2*sizeof(float); In = (float*) malloc(Mb); for (j = 0; j < pixels*2; j++) In[j] = (j % 256) / 255.0f; atime = clock(); cmsDoTransform(hlcmsxform, In, In, pixels); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); printf("Gray conversion using two gray profiles\t %-12.2f MPixels/Sec.\n", MPixSec(diff)); } static void TestGrayTransformPerformance1() { cmsInt32Number j; clock_t atime; cmsFloat64Number diff; cmsHTRANSFORM hlcmsxform; float *In; cmsInt32Number pixels; cmsUInt32Number Mb; cmsToneCurve* gamma18; cmsToneCurve* gamma22; cmsHPROFILE hlcmsProfileIn; cmsHPROFILE hlcmsProfileOut; gamma18 = cmsBuildGamma(0, 1.8); gamma22 = cmsBuildGamma(0, 1./2.2); hlcmsProfileIn = cmsCreateLinearizationDeviceLink(cmsSigGrayData, &gamma18); hlcmsProfileOut = cmsCreateLinearizationDeviceLink(cmsSigGrayData, &gamma22); cmsFreeToneCurve(gamma18); cmsFreeToneCurve(gamma22); hlcmsxform = cmsCreateTransform(hlcmsProfileIn, TYPE_GRAY_FLT, hlcmsProfileOut, TYPE_GRAY_FLT, INTENT_PERCEPTUAL, 0); cmsCloseProfile(hlcmsProfileIn); cmsCloseProfile(hlcmsProfileOut); pixels = 256 * 256 * 256; Mb = pixels* sizeof(float); In = (float*) malloc(Mb); for (j = 0; j < pixels; j++) In[j] = (j % 256) / 255.0f; atime = clock(); cmsDoTransform(hlcmsxform, In, In, pixels); diff = clock() - atime; free(In); cmsDeleteTransform(hlcmsxform); printf("Gray conversion using two devicelinks\t %-12.2f MPixels/Sec.\n", MPixSec(diff)); } // The harness test int main() { printf("FastFloating point extensions testbed - 1.3\n"); printf("Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved\n"); printf("\nInstalling error logger ... "); cmsSetLogErrorHandler(FatalErrorQuit); printf("done.\n"); printf("Installing plug-in ... "); cmsPlugin(cmsFastFloatExtensions()); printf("done.\n\n"); CheckComputeIncrements(); // 15 bit functionality CheckFormatters15(); Check15bitsConversions(); // 16 bits functionality CheckAccuracy16Bits(); // Lab to whatever CheckLab2RGB(); // Change format CheckChangeFormat(); // Floating point functionality CheckConversionFloat(); printf("All floating point tests passed OK\n"); SpeedTest8(); SpeedTest16(); SpeedTest15(); SpeedTestFloat(); ComparativeFloatVs16bits(); ComparativeLineStride8bits(); // Test gray performance printf("\n\n"); printf("F L O A T G R A Y conversions performance.\n"); printf("====================================================================\n"); TestGrayTransformPerformance(); TestGrayTransformPerformance1(); printf("\nAll tests passed OK\n"); return 0; } lcms2-2.12rc1/plugins/fast_float/src/0000755000175000017500000000000013775114656016507 5ustar martimartilcms2-2.12rc1/plugins/fast_float/src/fast_8_matsh.c0000644000175000017500000003175513775114656021246 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- // Optimization for matrix-shaper in 8 bits. Numbers are operated in n.14 signed, tables are stored in 1.14 fixed #include "fast_float_internal.h" typedef cmsInt32Number cmsS1Fixed14Number; // Note that this may hold more than 16 bits! #define DOUBLE_TO_1FIXED14(x) ((cmsS1Fixed14Number) floor((x) * 16384.0 + 0.5)) // This is the private data container used by this optimization typedef struct { // Alignment makes it faster cmsS1Fixed14Number Mat[4][4]; // n.14 to n.14 (needs a saturation after that) void * real_ptr; cmsContext ContextID; cmsS1Fixed14Number Shaper1R[256]; // from 0..255 to 1.14 (0.0...1.0) cmsS1Fixed14Number Shaper1G[256]; cmsS1Fixed14Number Shaper1B[256]; cmsUInt8Number Shaper2R[0x4001]; // 1.14 to 0..255 cmsUInt8Number Shaper2G[0x4001]; cmsUInt8Number Shaper2B[0x4001]; } XMatShaper8Data; static XMatShaper8Data* malloc_aligned(cmsContext ContextID) { cmsUInt8Number* real_ptr = (cmsUInt8Number*) _cmsMallocZero(ContextID, sizeof(XMatShaper8Data) + 32); cmsUInt8Number* aligned = (cmsUInt8Number*) (((uintptr_t)real_ptr + 16) & ~0xf); XMatShaper8Data* p = (XMatShaper8Data*) aligned; p ->real_ptr = real_ptr; return p; } static void free_aligned(XMatShaper8Data* a) { _cmsFree(a->ContextID, a->real_ptr); } // Free the private data container static void FreeMatShaper(cmsContext ContextID, void* Data) { UNUSED_PARAMETER(ContextID); if (Data != NULL) free_aligned((XMatShaper8Data*) Data); } // This table converts from 8 bits to 1.14 after applying the curve static void FillFirstShaper(cmsS1Fixed14Number* Table, cmsToneCurve* Curve) { int i; cmsFloat32Number R, y; for (i=0; i < 256; i++) { R = (cmsFloat32Number) (i / 255.0); y = cmsEvalToneCurveFloat(Curve, R); Table[i] = DOUBLE_TO_1FIXED14(y); } } // This table converts form 1.14 (being 0x4000 the last entry) to 8 bits after applying the curve static void FillSecondShaper(cmsUInt8Number* Table, cmsToneCurve* Curve) { int i; cmsFloat32Number R, Val; cmsInt32Number w; for (i=0; i < 0x4001; i++) { R = (cmsFloat32Number) (i / 16384.0f); Val = cmsEvalToneCurveFloat(Curve, R); w = (cmsInt32Number) (Val * 255.0f + 0.5f); if (w < 0) w = 0; if (w > 255) w = 255; Table[i] = (cmsInt8Number) w; } } // Compute the matrix-shaper structure static XMatShaper8Data* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3]) { XMatShaper8Data* p; int i, j; // Allocate a big chuck of memory to store precomputed tables p = malloc_aligned(ContextID); if (p == NULL) return FALSE; p -> ContextID = ContextID; // Precompute tables FillFirstShaper(p ->Shaper1R, Curve1[0]); FillFirstShaper(p ->Shaper1G, Curve1[1]); FillFirstShaper(p ->Shaper1B, Curve1[2]); FillSecondShaper(p ->Shaper2R, Curve2[0]); FillSecondShaper(p ->Shaper2G, Curve2[1]); FillSecondShaper(p ->Shaper2B, Curve2[2]); // Convert matrix to nFixed14. Note that those values may take more than 16 bits as for (i=0; i < 3; i++) { for (j=0; j < 3; j++) { p ->Mat[j][i] = DOUBLE_TO_1FIXED14(Mat->v[i].n[j]); } } for (i=0; i < 3; i++) { if (Off == NULL) { p->Mat[3][i] = DOUBLE_TO_1FIXED14(0.5); } else { p->Mat[3][i] = DOUBLE_TO_1FIXED14(Off->n[i] + 0.5); } } return p; } // A fast matrix-shaper evaluator for 8 bits. This is a bit ticky since I'm using 1.14 signed fixed point // to accomplish some performance. Actually it takes 256x3 16 bits tables and 16385 x 3 tables of 8 bits, // in total about 50K, and the performance boost is huge! static void MatShaperXform8(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { XMatShaper8Data* p = (XMatShaper8Data*) _cmsGetTransformUserData(CMMcargo); cmsS1Fixed14Number l1, l2, l3; cmsS1Fixed14Number r, g, b; cmsUInt32Number ri, gi, bi; cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { // Across first shaper, which also converts to 1.14 fixed point. 16 bits guaranteed. r = p->Shaper1R[*rin]; g = p->Shaper1G[*gin]; b = p->Shaper1B[*bin]; // Evaluate the matrix in 1.14 fixed point l1 = (p->Mat[0][0] * r + p->Mat[1][0] * g + p->Mat[2][0] * b + p->Mat[3][0]) >> 14; l2 = (p->Mat[0][1] * r + p->Mat[1][1] * g + p->Mat[2][1] * b + p->Mat[3][1]) >> 14; l3 = (p->Mat[0][2] * r + p->Mat[1][2] * g + p->Mat[2][2] * b + p->Mat[3][2]) >> 14; // Now we have to clip to 0..1.0 range ri = (l1 < 0) ? 0 : ((l1 > 0x4000) ? 0x4000 : l1); gi = (l2 < 0) ? 0 : ((l2 > 0x4000) ? 0x4000 : l2); bi = (l3 < 0) ? 0 : ((l3 > 0x4000) ? 0x4000 : l3); // And across second shaper, *rout = p->Shaper2R[ri]; *gout = p->Shaper2G[gi]; *bout = p->Shaper2B[bi]; // Handle alpha if (ain) { *aout = *ain; } rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; if (ain) ain += SourceIncrements[3]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (aout) aout += DestIncrements[3]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // 8 bits on input allows matrix-shaper boost up a little bit cmsBool Optimize8MatrixShaper(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* Curve1, *Curve2; cmsStage* Matrix1, *Matrix2; _cmsStageMatrixData* Data1; _cmsStageMatrixData* Data2; cmsMAT3 res; cmsBool IdentityMat = FALSE; cmsPipeline* Dest, *Src; cmsContext ContextID; cmsUInt32Number nChans; cmsFloat64Number factor = 1.0; // Only works on RGB to RGB and gray to gray if ( !( (T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3) || (T_CHANNELS(*InputFormat) == 1 && T_CHANNELS(*OutputFormat) == 1) )) return FALSE; // Only works on 8 bit input if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE; // Seems suitable, proceed Src = *Lut; // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for if (!cmsPipelineCheckAndRetreiveStages(Src, 4, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE; ContextID = cmsGetPipelineContextID(Src); nChans = T_CHANNELS(*InputFormat); // Get both matrices, which are 3x3 Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1); Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2); // Input offset should be zero if (Data1 ->Offset != NULL) return FALSE; if (cmsStageInputChannels(Matrix1) == 1 && cmsStageOutputChannels(Matrix2) == 1) { // This is a gray to gray. Just multiply factor = Data1->Double[0]*Data2->Double[0] + Data1->Double[1]*Data2->Double[1] + Data1->Double[2]*Data2->Double[2]; if (fabs(1 - factor) < (1.0 / 65535.0)) IdentityMat = TRUE; } else { // Multiply both matrices to get the result _cmsMAT3per(&res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double); // Now the result is in res + Data2 -> Offset. Maybe is a plain identity? IdentityMat = FALSE; if (_cmsMAT3isIdentity(&res) && Data2 ->Offset == NULL) { // We can get rid of full matrix IdentityMat = TRUE; } } // Allocate an empty LUT Dest = cmsPipelineAlloc(ContextID, nChans, nChans); if (!Dest) return FALSE; // Assamble the new LUT cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)); if (!IdentityMat) { if (nChans == 1) cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 1, (const cmsFloat64Number*) &factor, Data2->Offset)); else cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)); } cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)); // If identity on matrix, we can further optimize the curves, so call the join curves routine if (IdentityMat) { Optimize8ByJoiningCurves(TransformFn, UserData, FreeUserData, &Dest, InputFormat, OutputFormat, dwFlags); } else { _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(Curve1); _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(Curve2); // In this particular optimization, cach does not help as it takes more time to deal with // the cach that with the pixel handling *dwFlags |= cmsFLAGS_NOCACHE; // Setup the optimizarion routines *UserData = SetMatShaper(ContextID, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves); *FreeUserData = FreeMatShaper; *TransformFn = MatShaperXform8; } *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; cmsPipelineFree(Src); *Lut = Dest; return TRUE; } lcms2-2.12rc1/plugins/fast_float/src/fast_float_tethra.c0000644000175000017500000002516713775114656022357 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // Optimization for floating point tetrahedral interpolation typedef struct { cmsContext ContextID; const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. } FloatCLUTData; // Allocates container static FloatCLUTData* FloatCLUTAlloc(cmsContext ContextID, const cmsInterpParams* p) { FloatCLUTData* fd; fd = (FloatCLUTData*) _cmsMallocZero(ContextID, sizeof(FloatCLUTData)); if (fd == NULL) return NULL; fd ->ContextID = ContextID; fd ->p = p; return fd; } // Sampler implemented by another LUT. static int XFormSampler(CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], CMSREGISTER void* Cargo) { cmsPipelineEvalFloat(In, Out, (cmsPipeline*) Cargo); return TRUE; } // A optimized interpolation for input. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static void FloatCLUTEval(struct _cmstransform_struct* CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { FloatCLUTData* pfloat = (FloatCLUTData*)_cmsGetTransformUserData(CMMcargo); cmsFloat32Number r, g, b; cmsFloat32Number px, py, pz; int x0, y0, z0; int X0, Y0, Z0, X1, Y1, Z1; cmsFloat32Number rx, ry, rz; cmsFloat32Number c0, c1 = 0, c2 = 0, c3 = 0; cmsUInt32Number OutChan; const cmsInterpParams* p = pfloat->p; cmsUInt32Number TotalOut = p->nOutputs; cmsUInt32Number TotalPlusAlpha; const cmsFloat32Number* LutTable = (const cmsFloat32Number*)p->Table; cmsUInt32Number i, ii; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* out[cmsMAXCHANNELS]; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; TotalPlusAlpha = TotalOut; if (ain) TotalPlusAlpha++; for (ii = 0; ii < TotalPlusAlpha; ii++) out[ii] = (cmsUInt8Number*)Output + DestStartingOrder[ii] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { r = fclamp(*(cmsFloat32Number*)rin); g = fclamp(*(cmsFloat32Number*)gin); b = fclamp(*(cmsFloat32Number*)bin); rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; px = r * p->Domain[0]; py = g * p->Domain[1]; pz = b * p->Domain[2]; x0 = _cmsQuickFloor(px); rx = (px - (cmsFloat32Number)x0); y0 = _cmsQuickFloor(py); ry = (py - (cmsFloat32Number)y0); z0 = _cmsQuickFloor(pz); rz = (pz - (cmsFloat32Number)z0); X0 = p->opta[2] * x0; X1 = X0 + (r >= 1.0 ? 0 : p->opta[2]); Y0 = p->opta[1] * y0; Y1 = Y0 + (g >= 1.0 ? 0 : p->opta[1]); Z0 = p->opta[0] * z0; Z1 = Z0 + (b >= 1.0 ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { // These are the 6 Tetrahedral c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } *(cmsFloat32Number*)(out[OutChan]) = c0 + c1 * rx + c2 * ry + c3 * rz; out[OutChan] += DestIncrements[OutChan]; } if (ain) *out[TotalOut] = *ain; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } #undef DENS // -------------------------------------------------------------------------------------------------------------- cmsBool OptimizeCLUTRGBTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* OriginalLut; int nGridPoints; cmsPipeline* OptimizedLUT = NULL; cmsStage* OptimizedCLUTmpe; cmsColorSpaceSignature OutputColorSpace; cmsStage* mpe; FloatCLUTData* pfloat; cmsContext ContextID; _cmsStageCLutData* data; // For empty transforms, do nothing if (*Lut == NULL) return FALSE; // Check for floating point only if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE; // Only on floats if (T_BYTES(*InputFormat) != sizeof(cmsFloat32Number) || T_BYTES(*OutputFormat) != sizeof(cmsFloat32Number)) return FALSE; // Input has to be RGB, Output may be any if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE; OriginalLut = *Lut; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(OriginalLut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } ContextID = cmsGetPipelineContextID(OriginalLut); OutputColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*OutputFormat)); nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigRgbData, *dwFlags); // Create the result LUT OptimizedLUT = cmsPipelineAlloc(cmsGetPipelineContextID(OriginalLut), 3, cmsPipelineOutputChannels(OriginalLut)); if (OptimizedLUT == NULL) goto Error; // Allocate the CLUT for result OptimizedCLUTmpe = cmsStageAllocCLutFloat(ContextID, nGridPoints, 3, cmsPipelineOutputChannels(OriginalLut), NULL); // Add the CLUT to the destination LUT cmsPipelineInsertStage(OptimizedLUT, cmsAT_BEGIN, OptimizedCLUTmpe); // Resample the LUT if (!cmsStageSampleCLutFloat(OptimizedCLUTmpe, XFormSampler, (void*)OriginalLut, 0)) goto Error; // Set the evaluator, copy parameters data = (_cmsStageCLutData*) cmsStageData(OptimizedCLUTmpe); pfloat = FloatCLUTAlloc(ContextID, data ->Params); if (pfloat == NULL) return FALSE; // And return the obtained LUT cmsPipelineFree(OriginalLut); *Lut = OptimizedLUT; *TransformFn = FloatCLUTEval; *UserData = pfloat; *FreeDataFn = _cmsFree; *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; return TRUE; Error: if (OptimizedLUT != NULL) cmsPipelineFree(OptimizedLUT); return FALSE; } lcms2-2.12rc1/plugins/fast_float/src/fast_16_tethra.c0000644000175000017500000003623713775114656021500 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // lcms internal CMSAPI cmsBool CMSEXPORT _cmsOptimizePipeline(cmsContext ContextID, cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); // Optimization for 16 bits, 3 inputs only typedef struct { cmsContext ContextID; const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. } Performance16Data; // Precomputes tables for 16-bit on input devicelink. static Performance16Data* Performance16alloc(cmsContext ContextID, const cmsInterpParams* p) { Performance16Data* p16; p16 = (Performance16Data*) _cmsMallocZero(ContextID, sizeof(Performance16Data)); if (p16 == NULL) return NULL; p16 ->ContextID = ContextID; p16 ->p = p; return p16; } static void Performance16free(cmsContext ContextID, void* ptr) { _cmsFree(ContextID, ptr); } /** * Because cmsChangeBuffersFormat, we have to allow this code to output data in either 8 or 16 bits. * The increments are already computed correctly, but the data may change. So, we use a macro to * increase xput */ #define TO_OUTPUT_16(d,v) do { *(cmsUInt16Number*) (d) = v; } while(0) #define TO_OUTPUT_8(d,v) do { *(cmsUInt8Number*) (d) = FROM_16_TO_8(v); } while(0) #define TO_OUTPUT(d,v) do { if (out16) TO_OUTPUT_16(d,v); else TO_OUTPUT_8(d,v); } while(0) #define FROM_INPUT(v) (in16 ? (*((const cmsUInt16Number*)(v))) : FROM_8_TO_16(*((const cmsUInt8Number*)(v)))) static void PerformanceEval16(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt16Number r, g, b; int x0, y0, z0; cmsS15Fixed16Number rx, ry, rz; cmsS15Fixed16Number fx, fy, fz; cmsS15Fixed16Number c0, c1, c2, c3, Rest; cmsUInt32Number OutChan, TotalPlusAlpha; cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; Performance16Data* p16 = (Performance16Data*)_cmsGetTransformUserData(CMMcargo); const cmsInterpParams* p = p16->p; cmsUInt32Number TotalOut = p->nOutputs; const cmsUInt16Number* BaseTable = (const cmsUInt16Number*)p->Table; const cmsUInt16Number* LutTable; cmsUInt8Number* out[cmsMAXCHANNELS]; cmsUInt16Number res16; cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; int in16, out16; // Used by macros! cmsUInt32Number nalpha, strideIn, strideOut; cmsUInt32Number dwInFormat = cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number dwOutFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo); _cmsComputeComponentIncrements(dwInFormat, Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(dwOutFormat, Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); in16 = (T_BYTES(dwInFormat) == 2); out16 = (T_BYTES(dwOutFormat) == 2); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; TotalPlusAlpha = TotalOut; if (ain) TotalPlusAlpha++; for (OutChan = 0; OutChan < TotalPlusAlpha; OutChan++) { out[OutChan] = (cmsUInt8Number*)Output + DestStartingOrder[OutChan] + strideOut; } for (ii = 0; ii < PixelsPerLine; ii++) { r = FROM_INPUT(rin); g = FROM_INPUT(gin); b = FROM_INPUT(bin); rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; fx = _cmsToFixedDomain((int)r * p->Domain[0]); fy = _cmsToFixedDomain((int)g * p->Domain[1]); fz = _cmsToFixedDomain((int)b * p->Domain[2]); x0 = FIXED_TO_INT(fx); y0 = FIXED_TO_INT(fy); z0 = FIXED_TO_INT(fz); rx = FIXED_REST_TO_INT(fx); ry = FIXED_REST_TO_INT(fy); rz = FIXED_REST_TO_INT(fz); X0 = p->opta[2] * x0; X1 = (r == 0xFFFFU ? 0 : p->opta[2]); Y0 = p->opta[1] * y0; Y1 = (g == 0xFFFFU ? 0 : p->opta[1]); Z0 = p->opta[0] * z0; Z1 = (b == 0xFFFFU ? 0 : p->opta[0]); LutTable = &BaseTable[X0 + Y0 + Z0]; // Output should be computed as x = ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)) // which expands as: x = (Rest + ((Rest+0x7fff)/0xFFFF) + 0x8000)>>16 // This can be replaced by: t = Rest+0x8001, x = (t + (t>>16))>>16 // at the cost of being off by one at 7fff and 17ffe. if (rx >= ry) { if (ry >= rz) { Y1 += X1; Z1 += Y1; for (OutChan = 0; OutChan < TotalOut; OutChan++) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c3 -= c2; c2 -= c1; c1 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); TO_OUTPUT(out[OutChan], res16); out[OutChan] += DestIncrements[OutChan]; } } else if (rz >= rx) { X1 += Z1; Y1 += X1; for (OutChan = 0; OutChan < TotalOut; OutChan++) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c2 -= c1; c1 -= c3; c3 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); TO_OUTPUT(out[OutChan], res16); out[OutChan] += DestIncrements[OutChan]; } } else { Z1 += X1; Y1 += Z1; for (OutChan = 0; OutChan < TotalOut; OutChan++) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c2 -= c3; c3 -= c1; c1 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); TO_OUTPUT(out[OutChan], res16); out[OutChan] += DestIncrements[OutChan]; } } } else { if (rx >= rz) { X1 += Y1; Z1 += X1; for (OutChan = 0; OutChan < TotalOut; OutChan++) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c3 -= c1; c1 -= c2; c2 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); TO_OUTPUT(out[OutChan], res16); out[OutChan] += DestIncrements[OutChan]; } } else if (ry >= rz) { Z1 += Y1; X1 += Z1; for (OutChan = 0; OutChan < TotalOut; OutChan++) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c1 -= c3; c3 -= c2; c2 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); TO_OUTPUT(out[OutChan], res16); out[OutChan] += DestIncrements[OutChan]; } } else { Y1 += Z1; X1 += Y1; for (OutChan = 0; OutChan < TotalOut; OutChan++) { c1 = LutTable[X1]; c2 = LutTable[Y1]; c3 = LutTable[Z1]; c0 = *LutTable++; c1 -= c2; c2 -= c3; c3 -= c0; Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); TO_OUTPUT(out[OutChan], res16); out[OutChan] += DestIncrements[OutChan]; } } } if (ain) { res16 = *(const cmsUInt16Number*)ain; TO_OUTPUT(out[OutChan], res16); out[TotalOut] += DestIncrements[TotalOut]; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } #undef DENS // -------------------------------------------------------------------------------------------------------------- cmsBool Optimize16BitRGBTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* mpe; Performance16Data* p16; cmsContext ContextID; _cmsStageCLutData* data; cmsUInt32Number newFlags; cmsStage* OptimizedCLUTmpe; // For empty transforms, do nothing if (*Lut == NULL) return FALSE; // This is a loosy optimization! does not apply in floating-point cases if (T_FLOAT(*InputFormat) || T_FLOAT(*OutputFormat)) return FALSE; // Only on 16-bit if (T_BYTES(*InputFormat) != 2 || T_BYTES(*OutputFormat) != 2) return FALSE; // Only real 16 bits if (T_BIT15(*InputFormat) != 0 || T_BIT15(*OutputFormat) != 0) return FALSE; // Swap endian is not supported if (T_ENDIAN16(*InputFormat) != 0 || T_ENDIAN16(*OutputFormat) != 0) return FALSE; // Only on input RGB if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE; // If this is a matrix-shaper, the default does already a good job if (cmsPipelineCheckAndRetreiveStages(*Lut, 4, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, NULL, NULL, NULL, NULL)) return FALSE; if (cmsPipelineCheckAndRetreiveStages(*Lut, 2, cmsSigCurveSetElemType, cmsSigCurveSetElemType, NULL, NULL)) return FALSE; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(*Lut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } ContextID = cmsGetPipelineContextID(*Lut); newFlags = *dwFlags | cmsFLAGS_FORCE_CLUT; if (!_cmsOptimizePipeline(ContextID, Lut, INTENT_PERCEPTUAL, // Dont care InputFormat, OutputFormat, &newFlags)) return FALSE; OptimizedCLUTmpe = cmsPipelineGetPtrToFirstStage(*Lut); // Set the evaluator data = (_cmsStageCLutData*)cmsStageData(OptimizedCLUTmpe); p16 = Performance16alloc(ContextID, data->Params); if (p16 == NULL) return FALSE; *TransformFn = PerformanceEval16; *UserData = p16; *FreeDataFn = Performance16free; *InputFormat |= 0x02000000; *OutputFormat |= 0x02000000; *dwFlags |= cmsFLAGS_CAN_CHANGE_FORMATTER; return TRUE; } lcms2-2.12rc1/plugins/fast_float/src/fast_float_separate.c0000644000175000017500000001575213775114656022673 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // Separable input. It just computes the distance from // each component to the next one in bytes. It gives components RGB in this order // // Encoding Starting Increment DoSwap Swapfirst Extra // RGB, 012 333 0 0 0 // RGBA, 012 444 0 0 1 // ARGB, 123 444 0 1 1 // BGR, 210 333 1 0 0 // BGRA, 210 444 1 1 1 // ABGR 321 444 1 0 1 // // // On planar configurations, the distance is the stride added to any non-negative // // RGB 0, S, 2*S 111 // RGBA 0, S, 2*S 111 (fourth plane is safely ignored) // ARGB S, 2*S, 3*S 111 // BGR 2*S, S, 0 111 // BGRA 2*S, S, 0, 111 (fourth plane is safely ignored) // ABGR 3*S, 2*S, S 111 // //---------------------------------------------------------------------------------------- // Return the size in bytes of a given formatter static int trueBytesSize(cmsUInt32Number Format) { int fmt_bytes = T_BYTES(Format); // For double, the T_BYTES field returns zero if (fmt_bytes == 0) return sizeof(double); // Otherwise, it is already correct for all formats return fmt_bytes; } // RGBA -> normal // ARGB -> swap first // ABGR -> doSwap // BGRA -> doSwap swapFirst // This function computes the distance from each component to the next one in bytes. static void ComputeIncrementsForChunky(cmsUInt32Number Format, cmsUInt32Number BytesPerPlane, cmsUInt32Number* nChannels, cmsUInt32Number* nAlpha, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]) { int extra = T_EXTRA(Format); int channels = T_CHANNELS(Format); int total_chans = channels + extra; int i; int channelSize = trueBytesSize(Format); int pixelSize = channelSize * total_chans; UNUSED_PARAMETER(BytesPerPlane); // Setup the counts if (nChannels != NULL) *nChannels = channels; if (nAlpha != NULL) *nAlpha = extra; // Separation is independent of starting point and only depends on channel size for (i = 0; i < total_chans; i++) ComponentPointerIncrements[i] = pixelSize; // Handle do swap for (i = 0; i < total_chans; i++) { if (T_DOSWAP(Format)) { ComponentStartingOrder[i] = total_chans - i - 1; } else { ComponentStartingOrder[i] = i; } } // Handle swap first (ROL of positions), example CMYK -> KCMY | 0123 -> 3012 if (T_SWAPFIRST(Format)) { cmsUInt32Number tmp = ComponentStartingOrder[0]; for (i = 0; i < total_chans-1; i++) ComponentStartingOrder[i] = ComponentStartingOrder[i + 1]; ComponentStartingOrder[total_chans - 1] = tmp; } // Handle size if (channelSize > 1) for (i = 0; i < total_chans; i++) { ComponentStartingOrder[i] *= channelSize; } } // On planar configurations, the distance is the stride added to any non-negative static void ComputeIncrementsForPlanar(cmsUInt32Number Format, cmsUInt32Number BytesPerPlane, cmsUInt32Number* nChannels, cmsUInt32Number* nAlpha, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]) { int extra = T_EXTRA(Format); int channels = T_CHANNELS(Format); int total_chans = channels + extra; int i; int channelSize = trueBytesSize(Format); // Setup the counts if (nChannels != NULL) *nChannels = channels; if (nAlpha != NULL) *nAlpha = extra; // Separation is independent of starting point and only depends on channel size for (i = 0; i < total_chans; i++) ComponentPointerIncrements[i] = channelSize; // Handle do swap for (i = 0; i < total_chans; i++) { if (T_DOSWAP(Format)) { ComponentStartingOrder[i] = total_chans - i - 1; } else { ComponentStartingOrder[i] = i; } } // Handle swap first (ROL of positions), example CMYK -> KCMY | 0123 -> 3012 if (T_SWAPFIRST(Format)) { cmsUInt32Number tmp = ComponentStartingOrder[0]; for (i = 0; i < total_chans - 1; i++) ComponentStartingOrder[i] = ComponentStartingOrder[i + 1]; ComponentStartingOrder[total_chans - 1] = tmp; } // Handle size for (i = 0; i < total_chans; i++) { ComponentStartingOrder[i] *= BytesPerPlane; } } // Dispatcher por chunky and planar RGB CMSCHECKPOINT void CMSEXPORT _cmsComputeComponentIncrements(cmsUInt32Number Format, cmsUInt32Number BytesPerPlane, cmsUInt32Number* nChannels, cmsUInt32Number* nAlpha, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]) { if (T_PLANAR(Format)) { ComputeIncrementsForPlanar(Format, BytesPerPlane, nChannels, nAlpha, ComponentStartingOrder, ComponentPointerIncrements); } else { ComputeIncrementsForChunky(Format, BytesPerPlane, nChannels, nAlpha, ComponentStartingOrder, ComponentPointerIncrements); } } lcms2-2.12rc1/plugins/fast_float/src/fast_float_cmyk.c0000644000175000017500000003337213775114656022030 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // Optimization for floating point tetrahedral interpolation typedef struct { cmsContext ContextID; const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. } FloatCMYKData; // Precomputes tables on input devicelink. static FloatCMYKData* FloatCMYKAlloc(cmsContext ContextID, const cmsInterpParams* p) { FloatCMYKData* fd; fd = (FloatCMYKData*) _cmsMallocZero(ContextID, sizeof(FloatCMYKData)); if (fd == NULL) return NULL; fd ->ContextID = ContextID; fd ->p = p; return fd; } static int XFormSampler(CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], CMSREGISTER void* Cargo) { // Evaluate in 16 bits cmsPipelineEvalFloat(In, Out, (cmsPipeline*) Cargo); // Always succeed return TRUE; } cmsINLINE cmsFloat32Number LinearInterpInt(cmsFloat32Number a, cmsFloat32Number l, cmsFloat32Number h) { return (h - l) * a + l; } // To prevent out of bounds indexing cmsINLINE cmsFloat32Number fclamp100(cmsFloat32Number v) { return v < 0.0f ? 0.0f : (v > 100.0f ? 100.0f : v); } // A optimized interpolation for 8-bit input. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static void FloatCMYKCLUTEval(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsFloat32Number c, m, y, k; cmsFloat32Number px, py, pz, pk; int x0, y0, z0, k0; int X0, Y0, Z0, K0, X1, Y1, Z1, K1; cmsFloat32Number rx, ry, rz, rk; cmsFloat32Number c0, c1 = 0, c2 = 0, c3 = 0; cmsUInt32Number OutChan; FloatCMYKData* pcmyk = (FloatCMYKData*) _cmsGetTransformUserData(CMMcargo); const cmsInterpParams* p = pcmyk ->p; cmsUInt32Number TotalOut = p -> nOutputs; cmsUInt32Number TotalPlusAlpha; const cmsFloat32Number* LutTable = (const cmsFloat32Number*)p->Table; cmsUInt32Number i, ii; const cmsUInt8Number* cin; const cmsUInt8Number* min; const cmsUInt8Number* yin; const cmsUInt8Number* kin; const cmsUInt8Number* ain = NULL; cmsFloat32Number Tmp1[cmsMAXCHANNELS], Tmp2[cmsMAXCHANNELS]; cmsUInt8Number* out[cmsMAXCHANNELS]; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM) CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM) CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { cin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; min = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; yin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; kin = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[4] + strideIn; TotalPlusAlpha = TotalOut; if (ain) TotalPlusAlpha++; for (ii = 0; ii < TotalPlusAlpha; ii++) out[ii] = (cmsUInt8Number*)Output + DestStartingOrder[ii] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { c = fclamp100(*(cmsFloat32Number*)cin) / 100.0f; m = fclamp100(*(cmsFloat32Number*)min) / 100.0f; y = fclamp100(*(cmsFloat32Number*)yin) / 100.0f; k = fclamp100(*(cmsFloat32Number*)kin) / 100.0f; cin += SourceIncrements[0]; min += SourceIncrements[1]; yin += SourceIncrements[2]; kin += SourceIncrements[3]; pk = c * p->Domain[0]; // C px = m * p->Domain[1]; // M py = y * p->Domain[2]; // Y pz = k * p->Domain[3]; // K k0 = (int)_cmsQuickFloor(pk); rk = (pk - (cmsFloat32Number)k0); x0 = (int)_cmsQuickFloor(px); rx = (px - (cmsFloat32Number)x0); y0 = (int)_cmsQuickFloor(py); ry = (py - (cmsFloat32Number)y0); z0 = (int)_cmsQuickFloor(pz); rz = (pz - (cmsFloat32Number)z0); K0 = p->opta[3] * k0; K1 = K0 + (c >= 1.0 ? 0 : p->opta[3]); X0 = p->opta[2] * x0; X1 = X0 + (m >= 1.0 ? 0 : p->opta[2]); Y0 = p->opta[1] * y0; Y1 = Y0 + (y >= 1.0 ? 0 : p->opta[1]); Z0 = p->opta[0] * z0; Z1 = Z0 + (k >= 1.0 ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Tmp1[OutChan] = c0 + c1 * rx + c2 * ry + c3 * rz; } LutTable = (cmsFloat32Number*)p->Table; LutTable += K1; for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Tmp2[OutChan] = c0 + c1 * rx + c2 * ry + c3 * rz; } for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { *(cmsFloat32Number*)(out[OutChan]) = LinearInterpInt(rk, Tmp1[OutChan], Tmp2[OutChan]); out[OutChan] += DestIncrements[OutChan]; } if (ain) *out[TotalOut] = *ain; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } #undef DENS // -------------------------------------------------------------------------------------------------------------- cmsBool OptimizeCLUTCMYKTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* OriginalLut; int nGridPoints; cmsPipeline* OptimizedLUT = NULL; cmsStage* OptimizedCLUTmpe; cmsColorSpaceSignature OutputColorSpace; cmsStage* mpe; FloatCMYKData* pcmyk; cmsContext ContextID; _cmsStageCLutData* data; // For empty transforms, do nothing if (*Lut == NULL) return FALSE; // This is a loosy optimization! does not apply in floating-point cases if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE; // Only on 8-bit if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE; // Only on CMYK if (T_COLORSPACE(*InputFormat) != PT_CMYK) return FALSE; OriginalLut = *Lut; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(OriginalLut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } ContextID = cmsGetPipelineContextID(OriginalLut); OutputColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*OutputFormat)); nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigRgbData, *dwFlags); // Create the result LUT OptimizedLUT = cmsPipelineAlloc(cmsGetPipelineContextID(OriginalLut), 4, cmsPipelineOutputChannels(OriginalLut)); if (OptimizedLUT == NULL) goto Error; // Allocate the CLUT for result OptimizedCLUTmpe = cmsStageAllocCLutFloat(ContextID, nGridPoints, 4, cmsPipelineOutputChannels(OriginalLut), NULL); // Add the CLUT to the destination LUT cmsPipelineInsertStage(OptimizedLUT, cmsAT_BEGIN, OptimizedCLUTmpe); // Resample the LUT if (!cmsStageSampleCLutFloat(OptimizedCLUTmpe, XFormSampler, (void*)OriginalLut, 0)) goto Error; // Set the evaluator, copy parameters data = (_cmsStageCLutData*) cmsStageData(OptimizedCLUTmpe); pcmyk = FloatCMYKAlloc(ContextID, data ->Params); if (pcmyk == NULL) return FALSE; // And return the obtained LUT cmsPipelineFree(OriginalLut); *Lut = OptimizedLUT; *TransformFn = FloatCMYKCLUTEval; *UserData = pcmyk; *FreeDataFn = _cmsFree; *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; return TRUE; Error: if (OptimizedLUT != NULL) cmsPipelineFree(OptimizedLUT); return FALSE; } lcms2-2.12rc1/plugins/fast_float/src/fast_float_sup.c0000644000175000017500000001071613775114656021671 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // This is the main dispatcher static cmsBool Floating_Point_Transforms_Dispatcher(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { // Try to optimize as a set of curves plus a matrix plus a set of curves if (OptimizeMatrixShaper15(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize by joining curves if (Optimize8ByJoiningCurves(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; #ifndef CMS_DONT_USE_SSE2 // Try to use SSE2 to optimize as a set of curves plus a matrix plus a set of curves if (Optimize8MatrixShaperSSE(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; #endif // Try to optimize as a set of curves plus a matrix plus a set of curves if (Optimize8MatrixShaper(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize by joining curves if (OptimizeFloatByJoiningCurves(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize as a set of curves plus a matrix plus a set of curves if (OptimizeFloatMatrixShaper(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize using prelinearization plus tetrahedral if (Optimize8BitRGBTransform(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize using prelinearization plus tetrahedral if (Optimize16BitRGBTransform(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize using prelinearization plus tetrahedral if (OptimizeCLUTRGBTransform(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize using prelinearization plus tetrahedral if (OptimizeCLUTCMYKTransform(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Try to optimize for Lab float as input if (OptimizeCLUTLabTransform(TransformFn, UserData, FreeUserData, Lut, InputFormat, OutputFormat, dwFlags)) return TRUE; // Cannot optimize, use lcms normal process return FALSE; } // The Plug-in entry points static cmsPluginFormatters PluginFastFloat = { { cmsPluginMagicNumber, REQUIRED_LCMS_VERSION, cmsPluginFormattersSig, NULL }, Formatter_15Bit_Factory }; static cmsPluginTransform PluginList = { { cmsPluginMagicNumber, REQUIRED_LCMS_VERSION, cmsPluginTransformSig, (cmsPluginBase *) &PluginFastFloat }, // When initializing a union, the initializer list must have only one member, which initializes the first member of // the union unless a designated initializer is used (C99) { (_cmsTransformFactory) Floating_Point_Transforms_Dispatcher } }; // This is the main plug-in installer. // Using a function to retrieve the plug-in entry point allows us to execute initialization data. void* CMSEXPORT cmsFastFloatExtensions(void) { return (void*)&PluginList; } lcms2-2.12rc1/plugins/fast_float/src/Makefile.am0000644000175000017500000000170413775114656020545 0ustar martimarti# # Makefile for building lcms2_fast_float library # # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign includedir = ${prefix}/include # Shared libraries built in this directory lib_LTLIBRARIES = liblcms2_fast_float.la LIBRARY_CURRENT = 1 LIBRARY_REVISION = 1 LIBRARY_AGE = 0 AM_CPPFLAGS = -Ofast -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/../include -I$(builddir)/../include liblcms2_fast_float_la_LDFLAGS = -no-undefined \ -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) liblcms2_fast_float_la_LIBADD = $(LCMS_LIB_DEPLIBS) $(top_builddir)/src/liblcms2.la liblcms2_fast_float_la_SOURCES = fast_8_curves.c fast_8_matsh_sse.c fast_8_matsh.c fast_8_tethra.c \ fast_16_tethra.c fast_float_15bits.c fast_float_15mats.c fast_float_cmyk.c fast_float_curves.c fast_float_matsh.c \ fast_float_separate.c fast_float_sup.c fast_float_tethra.c fast_float_lab.c fast_float_internal.h lcms2-2.12rc1/plugins/fast_float/src/fast_float_lab.c0000644000175000017500000003303113775114656021613 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" #define SIGMOID_POINTS 1024 // Optimization for floating point tetrahedral interpolation using Lab as indexing space typedef struct { cmsContext ContextID; const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. cmsFloat32Number sigmoidIn[SIGMOID_POINTS]; // to apply to a*/b* axis on indexing cmsFloat32Number sigmoidOut[SIGMOID_POINTS]; // the curve above, inverted. } LabCLUTdata; typedef struct { LabCLUTdata* data; cmsPipeline* original; } ResamplingContainer; /** * Predefined tone curve */ #define TYPE_SIGMOID 109 // Floating-point version of 1D interpolation cmsINLINE cmsFloat32Number LinLerp1D(cmsFloat32Number Value, const cmsFloat32Number* LutTable) { if (Value >= 1.0f) { return LutTable[SIGMOID_POINTS - 1]; } else if (Value <= 0) { return LutTable[0]; } else { cmsFloat32Number y1, y0; cmsFloat32Number rest; int cell0, cell1; Value *= (SIGMOID_POINTS - 1); cell0 = _cmsQuickFloor(Value); cell1 = cell0 + 1; rest = Value - cell0; y0 = LutTable[cell0]; y1 = LutTable[cell1]; return y0 + (y1 - y0) * rest; } } static void tabulateSigmoid(cmsContext ContextID, cmsInt32Number type, cmsFloat32Number table[], cmsInt32Number tablePoints) { const cmsFloat64Number sigmoidal_slope = 2.5; cmsToneCurve* original; cmsInt32Number i; memset(table, 0, sizeof(cmsFloat32Number) * tablePoints); original = cmsBuildParametricToneCurve(ContextID, type, &sigmoidal_slope); if (original != NULL) { for (i = 0; i < tablePoints; i++) { cmsFloat32Number v = (cmsFloat32Number)i / (cmsFloat32Number)(tablePoints - 1); table[i] = fclamp(cmsEvalToneCurveFloat(original, v)); } cmsFreeToneCurve(original); } } // Allocates container and curves static LabCLUTdata* LabCLUTAlloc(cmsContext ContextID, const cmsInterpParams* p) { LabCLUTdata* fd; fd = (LabCLUTdata*) _cmsMallocZero(ContextID, sizeof(LabCLUTdata)); if (fd == NULL) return NULL; fd ->ContextID = ContextID; fd ->p = p; tabulateSigmoid(ContextID, +TYPE_SIGMOID, fd->sigmoidIn, SIGMOID_POINTS); tabulateSigmoid(ContextID, -TYPE_SIGMOID, fd->sigmoidOut, SIGMOID_POINTS); return fd; } static void LabCLUTFree(cmsContext ContextID, void* v) { _cmsFree(ContextID, v); } // Sampler implemented by another LUT. static int XFormSampler(CMSREGISTER const cmsFloat32Number In[], CMSREGISTER cmsFloat32Number Out[], CMSREGISTER void* Cargo) { ResamplingContainer* container = (ResamplingContainer*)Cargo; cmsFloat32Number linearized[3]; // Apply inverse sigmoid linearized[0] = In[0]; linearized[1] = LinLerp1D(In[1], container->data->sigmoidOut); linearized[2] = LinLerp1D(In[2], container->data->sigmoidOut); cmsPipelineEvalFloat(linearized, Out, container->original); return TRUE; } // A optimized interpolation for Lab. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static void LabCLUTEval(struct _cmstransform_struct* CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { LabCLUTdata* pfloat = (LabCLUTdata*)_cmsGetTransformUserData(CMMcargo); cmsFloat32Number l, a, b; cmsFloat32Number px, py, pz; int x0, y0, z0; int X0, Y0, Z0, X1, Y1, Z1; cmsFloat32Number rx, ry, rz; cmsFloat32Number c0, c1 = 0, c2 = 0, c3 = 0; cmsUInt32Number OutChan; const cmsInterpParams* p = pfloat->p; cmsUInt32Number TotalOut = p->nOutputs; cmsUInt32Number TotalPlusAlpha; const cmsFloat32Number* LutTable = (const cmsFloat32Number*)p->Table; cmsUInt32Number i, ii; const cmsUInt8Number* lin; const cmsUInt8Number* ain; const cmsUInt8Number* bin; const cmsUInt8Number* xin = NULL; cmsUInt8Number* out[cmsMAXCHANNELS]; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { lin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) xin = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; TotalPlusAlpha = TotalOut; if (xin) TotalPlusAlpha++; for (ii = 0; ii < TotalPlusAlpha; ii++) out[ii] = (cmsUInt8Number*)Output + DestStartingOrder[ii] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { // Decode Lab and go across sigmoids on a*/b* l = fclamp((*(cmsFloat32Number*)lin) / 100.0f); a = LinLerp1D(((*(cmsFloat32Number*)ain) + 128.0f) / 255.0f, pfloat->sigmoidIn); b = LinLerp1D(((*(cmsFloat32Number*)bin) + 128.0f) / 255.0f, pfloat->sigmoidIn); lin += SourceIncrements[0]; ain += SourceIncrements[1]; bin += SourceIncrements[2]; px = l * p->Domain[0]; py = a * p->Domain[1]; pz = b * p->Domain[2]; x0 = _cmsQuickFloor(px); rx = (px - (cmsFloat32Number)x0); y0 = _cmsQuickFloor(py); ry = (py - (cmsFloat32Number)y0); z0 = _cmsQuickFloor(pz); rz = (pz - (cmsFloat32Number)z0); X0 = p->opta[2] * x0; X1 = X0 + (l >= 1.0f ? 0 : p->opta[2]); Y0 = p->opta[1] * y0; Y1 = Y0 + (a >= 1.0f ? 0 : p->opta[1]); Z0 = p->opta[0] * z0; Z1 = Z0 + (b >= 1.0f ? 0 : p->opta[0]); for (OutChan = 0; OutChan < TotalOut; OutChan++) { // These are the 6 Tetrahedral c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } *(cmsFloat32Number*)(out[OutChan]) = c0 + c1 * rx + c2 * ry + c3 * rz; out[OutChan] += DestIncrements[OutChan]; } if (xin) *out[TotalOut] = *xin; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } #undef DENS /** * Get from flags */ static int GetGridpoints(cmsUInt32Number dwFlags) { // Already specified? if (dwFlags & 0x00FF0000) { return (dwFlags >> 16) & 0xFF; } // HighResPrecalc is maximum resolution if (dwFlags & cmsFLAGS_HIGHRESPRECALC) { return 66; } else // LowResPrecal is lower resolution if (dwFlags & cmsFLAGS_LOWRESPRECALC) { return 33; } else return 51; } // -------------------------------------------------------------------------------------------------------------- cmsBool OptimizeCLUTLabTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* OriginalLut; int nGridPoints; cmsPipeline* OptimizedLUT = NULL; cmsStage* OptimizedCLUTmpe; cmsColorSpaceSignature OutputColorSpace; cmsStage* mpe; LabCLUTdata* pfloat; cmsContext ContextID; _cmsStageCLutData* data; ResamplingContainer container; // For empty transforms, do nothing if (*Lut == NULL) return FALSE; // Check for floating point only if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE; // Only on floats if (T_BYTES(*InputFormat) != sizeof(cmsFloat32Number) || T_BYTES(*OutputFormat) != sizeof(cmsFloat32Number)) return FALSE; if (T_COLORSPACE(*InputFormat) != PT_Lab) return FALSE; OriginalLut = *Lut; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(OriginalLut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } ContextID = cmsGetPipelineContextID(OriginalLut); OutputColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*OutputFormat)); nGridPoints = GetGridpoints(*dwFlags); // Create the result LUT OptimizedLUT = cmsPipelineAlloc(cmsGetPipelineContextID(OriginalLut), 3, cmsPipelineOutputChannels(OriginalLut)); if (OptimizedLUT == NULL) goto Error; // Allocate the CLUT for result OptimizedCLUTmpe = cmsStageAllocCLutFloat(ContextID, nGridPoints, 3, cmsPipelineOutputChannels(OriginalLut), NULL); // Add the CLUT to the destination LUT cmsPipelineInsertStage(OptimizedLUT, cmsAT_BEGIN, OptimizedCLUTmpe); // Set the evaluator, copy parameters data = (_cmsStageCLutData*) cmsStageData(OptimizedCLUTmpe); // Allocate data pfloat = LabCLUTAlloc(ContextID, data ->Params); if (pfloat == NULL) return FALSE; container.data = pfloat; container.original = OriginalLut; // Resample the LUT if (!cmsStageSampleCLutFloat(OptimizedCLUTmpe, XFormSampler, (void*)&container, 0)) goto Error; // And return the obtained LUT cmsPipelineFree(OriginalLut); *Lut = OptimizedLUT; *TransformFn = LabCLUTEval; *UserData = pfloat; *FreeDataFn = LabCLUTFree; *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; return TRUE; Error: if (OptimizedLUT != NULL) cmsPipelineFree(OptimizedLUT); return FALSE; } lcms2-2.12rc1/plugins/fast_float/src/fast_float_15mats.c0000644000175000017500000003116713775114656022177 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- // Optimization for matrix-shaper in 15 bits. Numbers are operated in 1.15 usigned, #include "fast_float_internal.h" // An storage capable to keep 1.15 signed and some extra precission. // Actually I use 32 bits integer (signed) typedef cmsInt32Number cmsS1Fixed15Number; // Conversion to fixed. Note we don't use floor to get proper sign roundoff #define DOUBLE_TO_1FIXED15(x) ((cmsS1Fixed15Number) ((double) (x) * 0x8000 + 0.5)) // This is the private data container used by this optimization typedef struct { cmsS1Fixed15Number Mat[3][3]; cmsS1Fixed15Number Off[3]; // Precalculated tables for first shaper (375 Kb in total of both shapers) cmsUInt16Number Shaper1R[MAX_NODES_IN_CURVE]; cmsUInt16Number Shaper1G[MAX_NODES_IN_CURVE]; cmsUInt16Number Shaper1B[MAX_NODES_IN_CURVE]; // Second shaper cmsUInt16Number Shaper2R[MAX_NODES_IN_CURVE]; cmsUInt16Number Shaper2G[MAX_NODES_IN_CURVE]; cmsUInt16Number Shaper2B[MAX_NODES_IN_CURVE]; // A flag for fast operation if identity cmsBool IdentityMat; // The context cmsContext ContextID; // Poits to the raw, unaligned memory void * real_ptr; } XMatShaperData; // A special malloc that returns memory aligned to DWORD boundary. Aligned memory access is way faster than unaligned // reference to the real block is kept for later free static XMatShaperData* malloc_aligned(cmsContext ContextID) { cmsUInt8Number* real_ptr = (cmsUInt8Number*)_cmsMallocZero(ContextID, sizeof(XMatShaperData) + 32); cmsUInt8Number* aligned = (cmsUInt8Number*)(((uintptr_t)real_ptr + 16) & ~0xf); XMatShaperData* p = (XMatShaperData*)aligned; p->real_ptr = real_ptr; p->ContextID = ContextID; return p; } // Free the private data container static void FreeMatShaper(cmsContext ContextID, void* Data) { XMatShaperData* p = (XMatShaperData*)Data; if (p != NULL) _cmsFree(ContextID, p->real_ptr); } // This table converts from 8 bits to 1.14 after applying the curve static void FillShaper(cmsUInt16Number* Table, cmsToneCurve* Curve) { int i; cmsFloat32Number R, y; for (i = 0; i < MAX_NODES_IN_CURVE; i++) { R = (cmsFloat32Number)i / (cmsFloat32Number) (MAX_NODES_IN_CURVE - 1); y = cmsEvalToneCurveFloat(Curve, R); Table[i] = (cmsUInt16Number) DOUBLE_TO_1FIXED15(y); } } // Compute the matrix-shaper structure static XMatShaperData* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3], cmsBool IdentityMat) { XMatShaperData* p; int i, j; // Allocate a big chuck of memory to store precomputed tables p = malloc_aligned(ContextID); if (p == NULL) return FALSE; p->ContextID = ContextID; p->IdentityMat = IdentityMat; // Precompute tables FillShaper(p->Shaper1R, Curve1[0]); FillShaper(p->Shaper1G, Curve1[1]); FillShaper(p->Shaper1B, Curve1[2]); FillShaper(p->Shaper2R, Curve2[0]); FillShaper(p->Shaper2G, Curve2[1]); FillShaper(p->Shaper2B, Curve2[2]); // Convert matrix to nFixed14. Note that those values may take more than 16 bits if negative for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { p->Mat[i][j] = DOUBLE_TO_1FIXED15(Mat->v[i].n[j]); } } for (i = 0; i < 3; i++) { if (Off == NULL) { p->Off[i] = 0x4000; } else { p->Off[i] = DOUBLE_TO_1FIXED15(Off->n[i]) + 0x4000; } } return p; } // A fast matrix-shaper evaluator for 15 bits. This is a bit ticky since I'm using 1.15 signed fixed point. static void MatShaperXform(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { XMatShaperData* p = (XMatShaperData*)_cmsGetTransformUserData(CMMcargo); cmsS1Fixed15Number l1, l2, l3; cmsS1Fixed15Number r, g, b; cmsUInt32Number ri, gi, bi; cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { // Across first shaper, which also converts to 1.15 fixed point. r = p->Shaper1R[*(cmsUInt16Number*)rin]; g = p->Shaper1G[*(cmsUInt16Number*)gin]; b = p->Shaper1B[*(cmsUInt16Number*)bin]; if (p->IdentityMat) { l1 = r; l2 = g; l3 = b; } else { // Evaluate the matrix in 1.14 fixed point l1 = (p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b + p->Off[0]) >> 15; l2 = (p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b + p->Off[1]) >> 15; l3 = (p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b + p->Off[2]) >> 15; } // Now we have to clip to 0..1.0 range ri = (l1 < 0) ? 0 : ((l1 > 0x8000) ? 0x8000 : l1); gi = (l2 < 0) ? 0 : ((l2 > 0x8000) ? 0x8000 : l2); bi = (l3 < 0) ? 0 : ((l3 > 0x8000) ? 0x8000 : l3); // And across second shaper, *(cmsUInt16Number*)rout = p->Shaper2R[ri]; *(cmsUInt16Number*)gout = p->Shaper2G[gi]; *(cmsUInt16Number*)bout = p->Shaper2B[bi]; // Handle alpha if (ain) { memmove(aout, ain, 2); } rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; if (ain) ain += SourceIncrements[3]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (aout) aout += DestIncrements[3]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // 15 bits on input allows matrix-shaper boost up a little bit cmsBool OptimizeMatrixShaper15(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* Curve1, *Curve2; cmsStage* Matrix1, *Matrix2; _cmsStageMatrixData* Data1; _cmsStageMatrixData* Data2; cmsMAT3 res; cmsBool IdentityMat = FALSE; cmsPipeline* Dest, *Src; cmsContext ContextID; cmsUInt32Number nChans; // Only works on RGB to RGB and gray if (!(T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3)) return FALSE; // Only works on 15 bit to 15 bit if (T_BYTES(*InputFormat) != 2 || T_BYTES(*OutputFormat) != 2 || T_BIT15(*InputFormat) == 0 || T_BIT15(*OutputFormat) == 0) return FALSE; // Seems suitable, proceed Src = *Lut; // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for if (!cmsPipelineCheckAndRetreiveStages(Src, 4, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE; ContextID = cmsGetPipelineContextID(Src); nChans = T_CHANNELS(*InputFormat); // Get both matrices, which are 3x3 Data1 = (_cmsStageMatrixData*)cmsStageData(Matrix1); Data2 = (_cmsStageMatrixData*)cmsStageData(Matrix2); // Input offset should be zero if (Data1->Offset != NULL) return FALSE; // Multiply both matrices to get the result _cmsMAT3per(&res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double); // Now the result is in res + Data2 -> Offset. Maybe is a plain identity? IdentityMat = FALSE; if (_cmsMAT3isIdentity(&res) && Data2->Offset == NULL) { // We can get rid of full matrix IdentityMat = TRUE; } // Allocate an empty LUT Dest = cmsPipelineAlloc(ContextID, nChans, nChans); if (!Dest) return FALSE; // Assamble the new LUT cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)); if (!IdentityMat) { cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*)&res, Data2->Offset)); } cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)); { _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*)cmsStageData(Curve1); _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*)cmsStageData(Curve2); // In this particular optimization, cach does not help as it takes more time to deal with // the cach that with the pixel handling *dwFlags |= cmsFLAGS_NOCACHE; // Setup the optimizarion routines *UserData = SetMatShaper(ContextID, mpeC1->TheCurves, &res, (cmsVEC3*)Data2->Offset, mpeC2->TheCurves, IdentityMat); *FreeUserData = FreeMatShaper; *TransformFn = MatShaperXform; } cmsPipelineFree(Src); *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; *Lut = Dest; return TRUE; } lcms2-2.12rc1/plugins/fast_float/src/.deps/0000755000175000017500000000000013775114656017520 5ustar martimartilcms2-2.12rc1/plugins/fast_float/src/fast_8_curves.c0000644000175000017500000003573613775114656021444 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // Curves, optimization is valid for 8 bits only typedef struct { cmsContext ContextID; int nCurves; cmsUInt8Number Curves[cmsMAXCHANNELS][256]; } Curves8Data; // Evaluator for RGB 8-bit curves. This are just 1D tables static void FastEvaluateRGBCurves8(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; Curves8Data* Data = (Curves8Data*)_cmsGetTransformUserData(CMMcargo); _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { *rout = Data->Curves[0][*rin]; *gout = Data->Curves[1][*gin]; *bout = Data->Curves[2][*bin]; // Handle alpha if (ain) { *aout = *ain; } rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; if (ain) ain += SourceIncrements[3]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (aout) aout += DestIncrements[3]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Do nothing but arrange the format. RGB static void FastRGBIdentity8(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { *rout = *rin; *gout = *gin; *bout = *bin; // Handle alpha if (ain) { *aout = *ain; } rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; if (ain) ain += SourceIncrements[3]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (aout) aout += DestIncrements[3]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Evaluate 1 channel only static void FastEvaluateGrayCurves8(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* gin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* gout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; Curves8Data* Data = (Curves8Data*)_cmsGetTransformUserData(CMMcargo); _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { gin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; gout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { *gout = Data->Curves[0][*gin]; // Handle alpha if (ain) { *aout = *ain; } gin += SourceIncrements[0]; if (ain) ain += SourceIncrements[1]; gout += DestIncrements[0]; if (aout) aout += DestIncrements[1]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } static void FastGrayIdentity8(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* gin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* gout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { gin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; gout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { *gout = *gin; // Handle alpha if (ain) { *aout = *ain; } gin += SourceIncrements[0]; if (ain) ain += SourceIncrements[1]; gout += DestIncrements[0]; if (aout) aout += DestIncrements[1]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Try to see if the curves are linear static cmsBool AllCurvesAreLinear(Curves8Data* data) { int i, j; for (i=0; i < 3; i++) { for (j = 0; j < 256; j++) { if (data ->Curves[i][j] != j) return FALSE; } } return TRUE; } static Curves8Data* ComputeCompositeCurves(cmsUInt32Number nChan, cmsPipeline* Src) { cmsUInt32Number i, j; cmsFloat32Number InFloat[3], OutFloat[3]; Curves8Data* Data = (Curves8Data*) _cmsMallocZero(cmsGetPipelineContextID(Src), sizeof(Curves8Data)); if (Data == NULL) return NULL; // Create target curves for (i=0; i < 256; i++) { for (j=0; j Curves[j][i] = FROM_16_TO_8(_cmsSaturateWord(OutFloat[j] * 65535.0)); } return Data; } // If the target LUT holds only curves, the optimization procedure is to join all those // curves together. That only works on curves and does not work on matrices. // Any number of channels up to 16 cmsBool Optimize8ByJoiningCurves(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* Src = *Lut; cmsStage* mpe; Curves8Data* Data; cmsUInt32Number nChans; // This is a loosy optimization! does not apply in floating-point cases if (T_FLOAT(*InputFormat) || T_FLOAT(*OutputFormat)) return FALSE; // Only on 8-bit if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE; // Curves need same channels on input and output (despite extra channels may differ) nChans = T_CHANNELS(*InputFormat); if (nChans != T_CHANNELS(*OutputFormat)) return FALSE; // gray and RGB if (nChans != 1 && nChans != 3) return FALSE; // Only curves in this LUT? for (mpe = cmsPipelineGetPtrToFirstStage(Src); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) != cmsSigCurveSetElemType) return FALSE; } Data = ComputeCompositeCurves(nChans, Src); *dwFlags |= cmsFLAGS_NOCACHE; *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; *UserData = Data; *FreeUserData = _cmsFree; // Maybe the curves are linear at the end if (nChans == 1) *TransformFn = (AllCurvesAreLinear(Data) ? FastGrayIdentity8 : FastEvaluateGrayCurves8); else *TransformFn = (AllCurvesAreLinear(Data) ? FastRGBIdentity8 : FastEvaluateRGBCurves8); return TRUE; } lcms2-2.12rc1/plugins/fast_float/src/fast_float_15bits.c0000644000175000017500000004344313775114656022174 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" //--------------------------------------------------------------------------------- // The internal photoshop 16 bit format range is 1.15 fixed point, which goes 0..32768 // (NOT 32767) that means: // // 16 bits encoding 15 bit Photoshop encoding // ================ ========================= // // 0x0000 0x0000 // 0xFFFF 0x8000 // // A nice (and fast) way to implement conversions is by using 64 bit values, which are // native CPU word size in most today architectures. // In CMYK, internal Photoshop format comes inverted, and this inversion happens after // the resizing, so values 32769 to 65535 are never used in PhotoShop. //--------------------------------------------------------------------------------- // This macro converts 16 bits to 15 bits by using a 64 bits value cmsINLINE cmsUInt16Number From16To15(cmsUInt16Number x16) { cmsUInt64Number r64 = (((cmsUInt64Number)x16 << 15)) / 0xFFFFL; return (cmsUInt16Number)r64; } // This macro converts 15 bits to 16 bits by using a 64 bit value. It is based in fixed 1.15 math cmsINLINE cmsUInt16Number From15To16(cmsUInt16Number x15) { cmsUInt64Number r64 = ((cmsUInt64Number) x15 * 0xFFFF + 0x4000L) >> 15; return (cmsUInt16Number)r64; } // Specialized 1-channel formatters static cmsUInt8Number* Unroll15bitsGray(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); Values[0] = From15To16(*(cmsUInt16Number*)Buffer); return Buffer + 2; } static cmsUInt8Number* Pack15bitsGray(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); *(cmsUInt16Number*)Buffer = From16To15(Values[0]); return Buffer + 2; } // Specialized 3-channels formatters static cmsUInt8Number* Unroll15bitsRGB(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); Values[0] = From15To16(*(cmsUInt16Number*)Buffer); Buffer += 2; Values[1] = From15To16(*(cmsUInt16Number*)Buffer); Buffer += 2; Values[2] = From15To16(*(cmsUInt16Number*)Buffer); return Buffer + 2; } static cmsUInt8Number* Pack15bitsRGB(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); *(cmsUInt16Number*)Buffer = From16To15(Values[0]); Buffer += 2; *(cmsUInt16Number*)Buffer = From16To15(Values[1]); Buffer += 2; *(cmsUInt16Number*)Buffer = From16To15(Values[2]); return Buffer + 2; } static cmsUInt8Number* Unroll15bitsRGBA(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); Values[0] = From15To16(*(cmsUInt16Number*)Buffer); Buffer += 2; Values[1] = From15To16(*(cmsUInt16Number*)Buffer); Buffer += 2; Values[2] = From15To16(*(cmsUInt16Number*)Buffer); return Buffer + 4; } static cmsUInt8Number* Pack15bitsRGBA(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); *(cmsUInt16Number*)Buffer = From16To15(Values[0]); Buffer += 2; *(cmsUInt16Number*)Buffer = From16To15(Values[1]); Buffer += 2; *(cmsUInt16Number*)Buffer = From16To15(Values[2]); return Buffer + 4; } // Specialized 3 channels reversed formatters static cmsUInt8Number* Unroll15bitsBGR(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); Values[2] = From15To16(*(cmsUInt16Number*)Buffer); Buffer += 2; Values[1] = From15To16(*(cmsUInt16Number*)Buffer); Buffer += 2; Values[0] = From15To16(*(cmsUInt16Number*)Buffer); return Buffer + 2; } static cmsUInt8Number* Pack15bitsBGR(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); *(cmsUInt16Number*)Buffer = From16To15(Values[2]); Buffer += 2; *(cmsUInt16Number*)Buffer = From16To15(Values[1]); Buffer += 2; *(cmsUInt16Number*)Buffer = From16To15(Values[0]); return Buffer+2; } // Specialized 4 channels CMYK formatters. Note Photoshop stores CMYK reversed static cmsUInt8Number* Unroll15bitsCMYK(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); Values[0] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer); Buffer += 2; Values[1] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer); Buffer += 2; Values[2] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer); Buffer += 2; Values[3] = From15To16(0x8000 - *(cmsUInt16Number*)Buffer); return Buffer + 2; } static cmsUInt8Number* Pack15bitsCMYK(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { UNUSED_PARAMETER(CMMcargo); UNUSED_PARAMETER(Stride); *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[0]); Buffer += 2; *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[1]); Buffer += 2; *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[2]); Buffer += 2; *(cmsUInt16Number*)Buffer = 0x8000U - From16To15(Values[3]); return Buffer + 2; } // This macros does all handling for fallthrough cases cmsINLINE cmsUInt16Number UnrollOne(cmsUInt16Number x, cmsBool Reverse, cmsBool SwapEndian) { if (SwapEndian) x = (x << 8) | (x >> 8); if (Reverse) x = 0xffff - x; return From15To16(x); } cmsINLINE cmsUInt16Number PackOne(cmsUInt16Number x, cmsBool Reverse, cmsBool SwapEndian) { x = From16To15(x); if (Reverse) x = 0xffff - x; if (SwapEndian) x = (x << 8) | (x >> 8); return x; } // Generic planar support static cmsUInt8Number* Unroll15bitsPlanar(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number wIn[], CMSREGISTER cmsUInt8Number* accum, CMSREGISTER cmsUInt32Number Stride) { _xform_head* head = (_xform_head*) CMMcargo; int nChan = T_CHANNELS(head->InputFormat); int DoSwap = T_DOSWAP(head->InputFormat); int Reverse = T_FLAVOR(head->InputFormat); int SwapEndian = T_ENDIAN16(head->InputFormat); int i; cmsUInt8Number* Init = accum; UNUSED_PARAMETER(Stride); if (DoSwap) { accum += T_EXTRA(head->InputFormat) * Stride * 2; } for (i = 0; i < nChan; i++) { int index = DoSwap ? (nChan - i - 1) : i; wIn[index] = UnrollOne(*(cmsUInt16Number*)accum, Reverse, SwapEndian); accum += Stride * 2; } return (Init + 2); } static cmsUInt8Number* Pack15bitsPlanar(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number wOut[], CMSREGISTER cmsUInt8Number* output, CMSREGISTER cmsUInt32Number Stride) { _xform_head* head = (_xform_head*)CMMcargo; int nChan = T_CHANNELS(head->OutputFormat); int DoSwap = T_DOSWAP(head->OutputFormat); int Reverse = T_FLAVOR(head->OutputFormat); int SwapEndian = T_ENDIAN16(head->OutputFormat); CMSREGISTER int i; cmsUInt8Number* Init = output; if (DoSwap) { output += T_EXTRA(head->OutputFormat) * Stride * 2; } for (i = 0; i < nChan; i++) { int index = DoSwap ? (nChan - i - 1) : i; *(cmsUInt16Number*)output = PackOne(wOut[index], Reverse, SwapEndian); output += (Stride * sizeof(cmsUInt16Number)); } return (Init + sizeof(cmsUInt16Number)); } // Generic falltrough static cmsUInt8Number* Unroll15bitsChunky(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { _xform_head* head = (_xform_head*) CMMcargo; int nChan = T_CHANNELS(head->InputFormat); int DoSwap = T_DOSWAP(head->InputFormat); int Reverse = T_FLAVOR(head->InputFormat); int SwapEndian = T_ENDIAN16(head->InputFormat); CMSREGISTER int i; UNUSED_PARAMETER(Stride); if (DoSwap) { Buffer += T_EXTRA(head->OutputFormat) * 2; } for (i = 0; i < nChan; i++) { int index = DoSwap ? (nChan - i - 1) : i; Values[index] = UnrollOne(*(cmsUInt16Number*)Buffer, Reverse, SwapEndian); Buffer += 2; } return Buffer; } static cmsUInt8Number* Pack15bitsChunky(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { _xform_head* head = (_xform_head*)CMMcargo; int nChan = T_CHANNELS(head->OutputFormat); int DoSwap = T_DOSWAP(head->OutputFormat); int Reverse = T_FLAVOR(head->OutputFormat); int SwapEndian = T_ENDIAN16(head->OutputFormat); CMSREGISTER int i; UNUSED_PARAMETER(Stride); if (DoSwap) { Buffer += T_EXTRA(head->OutputFormat) * 2; } for (i = 0; i < nChan; i++) { int index = DoSwap ? (nChan - i - 1) : i; *(cmsUInt16Number*)Buffer = PackOne(Values[index], Reverse, SwapEndian); Buffer += 2; } return Buffer; } // Generic N-bytes plus dither 16-to-8 conversion. static int err[cmsMAXCHANNELS]; static cmsUInt8Number* PackNBytesDither(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { _xform_head* info = (_xform_head*)CMMcargo; int nChan = T_CHANNELS(info->OutputFormat); CMSREGISTER int i; unsigned int n, pe, pf; UNUSED_PARAMETER(Stride); for (i = 0; i < nChan; i++) { n = Values[i] + err[i]; // Value pe = (n / 257); // Whole part pf = (n % 257); // Fractional part err[i] = pf; // Store it for next pixel *Buffer++ = (cmsUInt8Number) pe; } return Buffer + T_EXTRA(info->OutputFormat); } static cmsUInt8Number* PackNBytesSwapDither(CMSREGISTER struct _cmstransform_struct* CMMcargo, CMSREGISTER cmsUInt16Number Values[], CMSREGISTER cmsUInt8Number* Buffer, CMSREGISTER cmsUInt32Number Stride) { _xform_head* info = (_xform_head*)CMMcargo; int nChan = T_CHANNELS(info->OutputFormat); CMSREGISTER int i; unsigned int n, pe, pf; UNUSED_PARAMETER(Stride); for (i = nChan - 1; i >= 0; --i) { n = Values[i] + err[i]; // Value pe = (n / 257); // Whole part pf = (n % 257); // Fractional part err[i] = pf; // Store it for next pixel *Buffer++ = (cmsUInt8Number)pe; } return Buffer + T_EXTRA(info->OutputFormat); } // The factory for 15 bits. This function returns a pointer to specialized function // that would deal with the asked format. It return a pointer to NULL if the format // is not supported. This is tha basis of formatter plug-in for 15 bit formats. CMSCHECKPOINT cmsFormatter CMSEXPORT Formatter_15Bit_Factory(cmsUInt32Number Type, cmsFormatterDirection Dir, cmsUInt32Number dwFlags) { cmsFormatter Result = { NULL }; UNUSED_PARAMETER(dwFlags); switch (Type) { // Simple Gray case TYPE_GRAY_15: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsGray : Pack15bitsGray; break; // 3 channels case TYPE_CMY_15: case TYPE_RGB_15: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsRGB : Pack15bitsRGB; break; // 3 channels reversed case TYPE_YMC_15: case TYPE_BGR_15: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsBGR : Pack15bitsBGR; break; // 3 Channels plus one alpha case TYPE_RGBA_15: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsRGBA : Pack15bitsRGBA; break; // 4 channels case TYPE_CMYK_15: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsCMYK : Pack15bitsCMYK; break; // Planar versions case TYPE_GRAYA_15_PLANAR: case TYPE_RGB_15_PLANAR: case TYPE_BGR_15_PLANAR: case TYPE_RGBA_15_PLANAR: case TYPE_ABGR_15_PLANAR: case TYPE_CMY_15_PLANAR: case TYPE_CMYK_15_PLANAR: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsPlanar : Pack15bitsPlanar; break; // Falltrough for remaining (corner) cases case TYPE_GRAY_15_REV: case TYPE_GRAY_15_SE: case TYPE_GRAYA_15: case TYPE_GRAYA_15_SE: case TYPE_RGB_15_SE: case TYPE_BGR_15_SE: case TYPE_RGBA_15_SE: case TYPE_ARGB_15: case TYPE_ABGR_15: case TYPE_ABGR_15_SE: case TYPE_BGRA_15: case TYPE_BGRA_15_SE: case TYPE_CMY_15_SE: case TYPE_CMYK_15_REV: case TYPE_CMYK_15_SE: case TYPE_KYMC_15: case TYPE_KYMC_15_SE: case TYPE_KCMY_15: case TYPE_KCMY_15_REV: case TYPE_KCMY_15_SE: Result.Fmt16 = (Dir == cmsFormatterInput) ? Unroll15bitsChunky : Pack15bitsChunky; break; case TYPE_GRAY_8_DITHER: case TYPE_RGB_8_DITHER: case TYPE_RGBA_8_DITHER: case TYPE_CMYK_8_DITHER: if (Dir == cmsFormatterOutput) { Result.Fmt16 = PackNBytesDither; } break; case TYPE_ABGR_8_DITHER: case TYPE_BGR_8_DITHER: case TYPE_KYMC_8_DITHER: if (Dir == cmsFormatterOutput) { Result.Fmt16 = PackNBytesSwapDither; } break; default:; } return Result; } lcms2-2.12rc1/plugins/fast_float/src/fast_8_matsh_sse.c0000644000175000017500000003177413775114656022121 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- // Optimization for matrix-shaper in 8 bits using SSE2 intrinsics #include "fast_float_internal.h" #ifndef CMS_DONT_USE_SSE2 #ifdef _MSC_VER #include #else #include #include #endif #include // This is the private data container used by this optimization typedef struct { // This is for SSE, MUST be aligned at 16 bit boundary cmsFloat32Number Mat[4][4]; // n.14 to n.14 (needs a saturation after that) void * real_ptr; cmsContext ContextID; cmsFloat32Number Shaper1R[256]; // from 0..255 to 1.14 (0.0...1.0) cmsFloat32Number Shaper1G[256]; cmsFloat32Number Shaper1B[256]; cmsUInt8Number Shaper2R[0x4001]; // 1.14 to 0..255 cmsUInt8Number Shaper2G[0x4001]; cmsUInt8Number Shaper2B[0x4001]; } XMatShaper8Data; static XMatShaper8Data* malloc_aligned(cmsContext ContextID) { cmsUInt8Number* real_ptr = (cmsUInt8Number*) _cmsMallocZero(ContextID, sizeof(XMatShaper8Data) + 32); cmsUInt8Number* aligned = (cmsUInt8Number*) (((uintptr_t)real_ptr + 16) & ~0xf); XMatShaper8Data* p = (XMatShaper8Data*) aligned; p ->real_ptr = real_ptr; return p; } static void free_aligned(XMatShaper8Data* a) { _cmsFree(a->ContextID, a->real_ptr); } // Free the private data container static void FreeMatShaper(cmsContext ContextID, void* Data) { UNUSED_PARAMETER(ContextID); if (Data != NULL) free_aligned((XMatShaper8Data*) Data); } // This table converts from 8 bits to 1.14 after applying the curve static void FillFirstShaper(cmsFloat32Number* Table, cmsToneCurve* Curve) { cmsInt32Number i; cmsFloat32Number R; for (i = 0; i < 256; i++) { R = (cmsFloat32Number)(i / 255.0); Table[i] = cmsEvalToneCurveFloat(Curve, R); } } // This table converts form 1.14 (being 0x4000 the last entry) to 8 bits after applying the curve static void FillSecondShaper(cmsUInt8Number* Table, cmsToneCurve* Curve) { int i; cmsFloat32Number R, Val; cmsInt32Number w; for (i=0; i < 0x4001; i++) { R = (cmsFloat32Number) (i / 16384.0f); Val = cmsEvalToneCurveFloat(Curve, R); w = (cmsInt32Number) (Val * 255.0f + 0.5f); if (w < 0) w = 0; if (w > 255) w = 255; Table[i] = (cmsInt8Number) w; } } // Compute the matrix-shaper structure static XMatShaper8Data* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3]) { XMatShaper8Data* p; int i, j; // Allocate a big chuck of memory to store precomputed tables p = malloc_aligned(ContextID); if (p == NULL) return FALSE; p -> ContextID = ContextID; // Precompute tables FillFirstShaper(p ->Shaper1R, Curve1[0]); FillFirstShaper(p ->Shaper1G, Curve1[1]); FillFirstShaper(p ->Shaper1B, Curve1[2]); FillSecondShaper(p ->Shaper2R, Curve2[0]); FillSecondShaper(p ->Shaper2G, Curve2[1]); FillSecondShaper(p ->Shaper2B, Curve2[2]); // Convert matrix to float for (i=0; i < 3; i++) { for (j=0; j < 3; j++) { p ->Mat[j][i] = (cmsFloat32Number) Mat->v[i].n[j]; } } // Roundoff for (i=0; i < 3; i++) { if (Off == NULL) { p->Mat[3][i] = 0.0f; } else { p->Mat[3][i] = (cmsFloat32Number)Off->n[i]; } } return p; } // A fast matrix-shaper evaluator for 8 bits. static void MatShaperXform8SSE(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { XMatShaper8Data* p = (XMatShaper8Data*) _cmsGetTransformUserData(CMMcargo); cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number nalpha, strideIn, strideOut; __m128 mat0 = _mm_load_ps(p->Mat[0]); __m128 mat1 = _mm_load_ps(p->Mat[1]); __m128 mat2 = _mm_load_ps(p->Mat[2]); __m128 mat3 = _mm_load_ps(p->Mat[3]); __m128 zero = _mm_setzero_ps(); __m128 one = _mm_set1_ps(1.0f); __m128 scale = _mm_set1_ps((cmsFloat32Number)0x4000); cmsUInt8Number buffer[32]; cmsUInt32Number* output_index = (cmsUInt32Number*)(((uintptr_t)buffer + 16) & ~0xf); _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; /** * Prefetch */ __m128 rvector = _mm_set1_ps(p->Shaper1R[*rin]); __m128 gvector = _mm_set1_ps(p->Shaper1G[*gin]); __m128 bvector = _mm_set1_ps(p->Shaper1B[*bin]); for (ii = 0; ii < PixelsPerLine; ii++) { __m128 el1 = _mm_mul_ps(rvector, mat0); __m128 el2 = _mm_mul_ps(gvector, mat1); __m128 el3 = _mm_mul_ps(bvector, mat2); __m128 sum = _mm_add_ps(el1, _mm_add_ps(el2, _mm_add_ps(el3, mat3))); __m128 out = _mm_min_ps(_mm_max_ps(sum, zero), one); out = _mm_mul_ps(out, scale); /** * Rounding and converting to index. * Actually this is a costly instruction that may be blocking performance */ _mm_store_si128((__m128i*)output_index, _mm_cvtps_epi32(out)); // Handle alpha if (ain) { *aout = *ain; } rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; if (ain) ain += SourceIncrements[3]; /** * Take next value whilst store is being performed */ if (ii < PixelsPerLine - 1) { rvector = _mm_set1_ps(p->Shaper1R[*rin]); gvector = _mm_set1_ps(p->Shaper1G[*gin]); bvector = _mm_set1_ps(p->Shaper1B[*bin]); } *rout = p->Shaper2R[output_index[0]]; *gout = p->Shaper2G[output_index[1]]; *bout = p->Shaper2B[output_index[2]]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (aout) aout += DestIncrements[3]; } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } static cmsBool IsSSE2Available(void) { #ifdef _MSC_VER int cpuinfo[4]; __cpuid(cpuinfo, 1); if (!(cpuinfo[3] & (1 << 26))) return FALSE; return TRUE; #else unsigned int level = 1u; unsigned int eax, ebx, ecx, edx; unsigned int bits = (1u << 26); unsigned int max = __get_cpuid_max(0, NULL); if (level > max) { return FALSE; } __cpuid_count(level, 0, eax, ebx, ecx, edx); return (edx & bits) == bits; #endif } // 8 bits on input allows matrix-shaper boost up a little bit cmsBool Optimize8MatrixShaperSSE(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* Curve1, *Curve2; cmsStage* Matrix1, *Matrix2; _cmsStageMatrixData* Data1; _cmsStageMatrixData* Data2; cmsMAT3 res; cmsBool IdentityMat = FALSE; cmsPipeline* Dest, *Src; cmsContext ContextID; cmsUInt32Number nChans; // Check for SSE2 support if (!(IsSSE2Available())) return FALSE; // Only works on 3 to 3, probably RGB if ( !( (T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3) ) ) return FALSE; // Only works on 8 bit input if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE; // Seems suitable, proceed Src = *Lut; // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for if (!cmsPipelineCheckAndRetreiveStages(Src, 4, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE; ContextID = cmsGetPipelineContextID(Src); nChans = T_CHANNELS(*InputFormat); // Get both matrices, which are 3x3 Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1); Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2); // Input offset should be zero if (Data1->Offset != NULL) return FALSE; // Multiply both matrices to get the result _cmsMAT3per(&res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double); // Now the result is in res + Data2 -> Offset. Maybe is a plain identity? IdentityMat = FALSE; if (_cmsMAT3isIdentity(&res) && Data2->Offset == NULL) { // We can get rid of full matrix IdentityMat = TRUE; } // Allocate an empty LUT Dest = cmsPipelineAlloc(ContextID, nChans, nChans); if (!Dest) return FALSE; // Assamble the new LUT cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)); if (!IdentityMat) { cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)); } cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)); // If identity on matrix, we can further optimize the curves, so call the join curves routine if (IdentityMat) { Optimize8ByJoiningCurves(TransformFn, UserData, FreeUserData, &Dest, InputFormat, OutputFormat, dwFlags); } else { _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(Curve1); _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(Curve2); // In this particular optimization, cache does not help as it takes more time to deal with // the cache that with the pixel handling *dwFlags |= cmsFLAGS_NOCACHE; // Setup the optimizarion routines *UserData = SetMatShaper(ContextID, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves); *FreeUserData = FreeMatShaper; *TransformFn = MatShaperXform8SSE; } *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; cmsPipelineFree(Src); *Lut = Dest; return TRUE; } #endif lcms2-2.12rc1/plugins/fast_float/src/fast_float_matsh.c0000644000175000017500000002662613775114656022205 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- // Optimization for matrix-shaper in float #include "fast_float_internal.h" // This is the private data container used by this optimization typedef struct { cmsFloat32Number Mat[3][3]; cmsFloat32Number Off[3]; cmsFloat32Number Shaper1R[MAX_NODES_IN_CURVE]; cmsFloat32Number Shaper1G[MAX_NODES_IN_CURVE]; cmsFloat32Number Shaper1B[MAX_NODES_IN_CURVE]; cmsFloat32Number Shaper2R[MAX_NODES_IN_CURVE]; cmsFloat32Number Shaper2G[MAX_NODES_IN_CURVE]; cmsFloat32Number Shaper2B[MAX_NODES_IN_CURVE]; cmsBool UseOff; void * real_ptr; } VXMatShaperFloatData; static VXMatShaperFloatData* malloc_aligned(cmsContext ContextID) { cmsUInt8Number* real_ptr = (cmsUInt8Number*) _cmsMallocZero(ContextID, sizeof(VXMatShaperFloatData) + 32); cmsUInt8Number* aligned = (cmsUInt8Number*) (((uintptr_t)real_ptr + 16) & ~0xf); VXMatShaperFloatData* p = (VXMatShaperFloatData*) aligned; p ->real_ptr = real_ptr; return p; } // Free the private data container static void FreeMatShaper(cmsContext ContextID, void* Data) { VXMatShaperFloatData* d = (VXMatShaperFloatData*)Data; if (d != NULL) _cmsFree(ContextID, d->real_ptr); } static void FillShaper(cmsFloat32Number* Table, cmsToneCurve* Curve) { int i; cmsFloat32Number R; for (i = 0; i < MAX_NODES_IN_CURVE; i++) { R = (cmsFloat32Number) i / (cmsFloat32Number) (MAX_NODES_IN_CURVE - 1); Table[i] = cmsEvalToneCurveFloat(Curve, R); } } // Compute the matrix-shaper structure static VXMatShaperFloatData* SetMatShaper(cmsContext ContextID, cmsToneCurve* Curve1[3], cmsMAT3* Mat, cmsVEC3* Off, cmsToneCurve* Curve2[3]) { VXMatShaperFloatData* p; int i, j; // Allocate a big chuck of memory to store precomputed tables p = malloc_aligned(ContextID); if (p == NULL) return FALSE; // Precompute tables FillShaper(p->Shaper1R, Curve1[0]); FillShaper(p->Shaper1G, Curve1[1]); FillShaper(p->Shaper1B, Curve1[2]); FillShaper(p->Shaper2R, Curve2[0]); FillShaper(p->Shaper2G, Curve2[1]); FillShaper(p->Shaper2B, Curve2[2]); for (i=0; i < 3; i++) { for (j=0; j < 3; j++) { p->Mat[i][j] = (cmsFloat32Number) Mat->v[i].n[j]; } } for (i = 0; i < 3; i++) { if (Off == NULL) { p->UseOff = FALSE; p->Off[i] = 0.0; } else { p->UseOff = TRUE; p->Off[i] = (cmsFloat32Number)Off->n[i]; } } return p; } // A fast matrix-shaper evaluator for floating point static void MatShaperFloat(struct _cmstransform_struct* CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { VXMatShaperFloatData* p = (VXMatShaperFloatData*) _cmsGetTransformUserData(CMMcargo); cmsFloat32Number l1, l2, l3; cmsFloat32Number r, g, b; cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { r = flerp(p->Shaper1R, *(cmsFloat32Number*)rin); g = flerp(p->Shaper1G, *(cmsFloat32Number*)gin); b = flerp(p->Shaper1B, *(cmsFloat32Number*)bin); l1 = p->Mat[0][0] * r + p->Mat[0][1] * g + p->Mat[0][2] * b; l2 = p->Mat[1][0] * r + p->Mat[1][1] * g + p->Mat[1][2] * b; l3 = p->Mat[2][0] * r + p->Mat[2][1] * g + p->Mat[2][2] * b; if (p->UseOff) { l1 += p->Off[0]; l2 += p->Off[1]; l3 += p->Off[2]; } *(cmsFloat32Number*)rout = flerp(p->Shaper2R, l1); *(cmsFloat32Number*)gout = flerp(p->Shaper2G, l2); *(cmsFloat32Number*)bout = flerp(p->Shaper2B, l3); rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (ain) { *(cmsFloat32Number*)aout = *(cmsFloat32Number*)ain; ain += SourceIncrements[3]; aout += DestIncrements[3]; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } cmsBool OptimizeFloatMatrixShaper(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsStage* Curve1, *Curve2; cmsStage* Matrix1, *Matrix2; _cmsStageMatrixData* Data1; _cmsStageMatrixData* Data2; cmsMAT3 res; cmsBool IdentityMat = FALSE; cmsPipeline* Dest, *Src; cmsContext ContextID; cmsUInt32Number nChans; cmsFloat64Number factor = 1.0; // Apply only to floating-point cases if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE; // Only works on RGB to RGB and gray to gray if ( !( (T_CHANNELS(*InputFormat) == 3 && T_CHANNELS(*OutputFormat) == 3)) && !( (T_CHANNELS(*InputFormat) == 1 && T_CHANNELS(*OutputFormat) == 1))) return FALSE; // Only works on float if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE; // Seems suitable, proceed Src = *Lut; // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for if (!cmsPipelineCheckAndRetreiveStages(Src, 4, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType, &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE; ContextID = cmsGetPipelineContextID(Src); nChans = T_CHANNELS(*InputFormat); // Get both matrices, which are 3x3 Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1); Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2); // Input offset should be zero if (Data1 ->Offset != NULL) return FALSE; if (cmsStageInputChannels(Matrix1) == 1 && cmsStageOutputChannels(Matrix2) == 1) { // This is a gray to gray. Just multiply factor = Data1->Double[0]*Data2->Double[0] + Data1->Double[1]*Data2->Double[1] + Data1->Double[2]*Data2->Double[2]; if (fabs(1 - factor) < (1.0 / 65535.0)) IdentityMat = TRUE; } else { // Multiply both matrices to get the result _cmsMAT3per(&res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double); // Now the result is in res + Data2 -> Offset. Maybe is a plain identity? IdentityMat = FALSE; if (_cmsMAT3isIdentity(&res) && Data2 ->Offset == NULL) { // We can get rid of full matrix IdentityMat = TRUE; } } // Allocate an empty LUT Dest = cmsPipelineAlloc(ContextID, nChans, nChans); if (!Dest) return FALSE; // Assamble the new LUT cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)); if (!IdentityMat) { if (nChans == 1) cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(ContextID, 1, 1, (const cmsFloat64Number*) &factor, Data2->Offset)); else cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)); } cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)); // If identity on matrix, we can further optimize the curves, so call the join curves routine if (IdentityMat) { OptimizeFloatByJoiningCurves(TransformFn, UserData, FreeUserData, &Dest, InputFormat, OutputFormat, dwFlags); } else { _cmsStageToneCurvesData* mpeC1 = (_cmsStageToneCurvesData*) cmsStageData(Curve1); _cmsStageToneCurvesData* mpeC2 = (_cmsStageToneCurvesData*) cmsStageData(Curve2); // In this particular optimization, cach does not help as it takes more time to deal with // the cachthat with the pixel handling *dwFlags |= cmsFLAGS_NOCACHE; // Setup the optimizarion routines *UserData = SetMatShaper(ContextID, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves); *FreeUserData = FreeMatShaper; *TransformFn = MatShaperFloat; } *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; cmsPipelineFree(Src); *Lut = Dest; return TRUE; } lcms2-2.12rc1/plugins/fast_float/src/fast_float_internal.h0000644000175000017500000002353513775114656022706 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #ifndef _FAST_INTERNAL_H #define _FAST_INTERNAL_H #include "lcms2_fast_float.h" #include #define REQUIRED_LCMS_VERSION 2120 // Unused parameter warning supression #define UNUSED_PARAMETER(x) ((void)x) // For testbed #define CMSCHECKPOINT CMSAPI // The specification for "inline" is section 6.7.4 of the C99 standard (ISO/IEC 9899:1999). // unfortunately VisualC++ does not conform that #if defined(_MSC_VER) || defined(__BORLANDC__) # define cmsINLINE __inline #else # define cmsINLINE static inline #endif // A fast way to convert from/to 16 <-> 8 bits #define FROM_8_TO_16(rgb) (cmsUInt16Number) ((((cmsUInt16Number) (rgb)) << 8)|(rgb)) #define FROM_16_TO_8(rgb) (cmsUInt8Number) ((((rgb) * 65281 + 8388608) >> 24) & 0xFF) // This macro return words stored as big endian #define CHANGE_ENDIAN(w) (cmsUInt16Number) ((cmsUInt16Number) ((w)<<8)|((w)>>8)) // This macro changes the polarity of a word #define REVERSE_FLAVOR_16(x) ((cmsUInt16Number)(0xffff-(x))) // Fixed point #define FIXED_TO_INT(x) ((x)>>16) #define FIXED_REST_TO_INT(x) ((x)&0xFFFFU) #define cmsFLAGS_CAN_CHANGE_FORMATTER 0x02000000 // Allow change buffer format // Utility macros to convert from to 0...1.0 in 15.16 fixed domain to 0..0xffff as integer cmsINLINE cmsS15Fixed16Number _cmsToFixedDomain(int a) { return a + ((a + 0x7fff) / 0xffff); } cmsINLINE int _cmsFromFixedDomain(cmsS15Fixed16Number a) { return a - ((a + 0x7fff) >> 16); } // This is the upper part of internal transform structure. Only format specifiers are used typedef struct { cmsUInt32Number InputFormat, OutputFormat; // Keep formats for further reference } _xform_head; #define MAX_NODES_IN_CURVE 0x8001 // To prevent out of bounds indexing cmsINLINE cmsFloat32Number fclamp(cmsFloat32Number v) { return v < 0.0f ? 0.0f : (v > 1.0f ? 1.0f : v); } // Fast floor conversion logic. cmsINLINE int _cmsQuickFloor(cmsFloat64Number val) { #ifdef CMS_DONT_USE_FAST_FLOOR return (int)floor(val); #else #define _lcms_double2fixmagic (68719476736.0 * 1.5) union { cmsFloat64Number val; int halves[2]; } temp; temp.val = val + _lcms_double2fixmagic; #ifdef CMS_USE_BIG_ENDIAN return temp.halves[1] >> 16; #else return temp.halves[0] >> 16; #endif #endif } // Floor to word, taking care of saturation. This is not critical in terms of performance cmsINLINE cmsUInt16Number _cmsSaturateWord(cmsFloat64Number d) { d += 0.5; if (d <= 0) return 0; if (d >= 65535.0) return 0xffff; return (cmsUInt16Number)floor(d); } cmsINLINE cmsFloat32Number flerp(const cmsFloat32Number LutTable[], cmsFloat32Number v) { cmsFloat32Number y1, y0; cmsFloat32Number rest; int cell0, cell1; if (v <= 0.0) { return LutTable[0]; } else if (v >= 1.0) { return LutTable[MAX_NODES_IN_CURVE - 1]; } v *= (MAX_NODES_IN_CURVE - 1); cell0 = _cmsQuickFloor(v); cell1 = (int)ceilf(v); // Rest is 16 LSB bits rest = v - cell0; y0 = LutTable[cell0]; y1 = LutTable[cell1]; return y0 + (y1 - y0) * rest; } // Some secret sauce from lcms CMSAPI cmsUInt32Number CMSEXPORT _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags); // Compute the increments to be used by the transform functions CMSCHECKPOINT void CMSEXPORT _cmsComputeComponentIncrements(cmsUInt32Number Format, cmsUInt32Number BytesPerPlane, cmsUInt32Number* nChannels, cmsUInt32Number* nAlpha, cmsUInt32Number ComponentStartingOrder[], cmsUInt32Number ComponentPointerIncrements[]); // 15 bits formatters CMSCHECKPOINT cmsFormatter CMSEXPORT Formatter_15Bit_Factory(cmsUInt32Number Type, cmsFormatterDirection Dir, cmsUInt32Number dwFlags); // Optimizers // 8 bits on input allows matrix-shaper boost up a little bit cmsBool Optimize8MatrixShaper(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); // 8 bits using SSE cmsBool Optimize8MatrixShaperSSE(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool OptimizeMatrixShaper15(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool Optimize8ByJoiningCurves(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool OptimizeFloatByJoiningCurves(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool OptimizeFloatMatrixShaper(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool Optimize8BitRGBTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool Optimize16BitRGBTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool OptimizeCLUTRGBTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool OptimizeCLUTCMYKTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); cmsBool OptimizeCLUTLabTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags); #endif lcms2-2.12rc1/plugins/fast_float/src/fast_float_curves.c0000644000175000017500000004076513775114656022400 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" // Curves, optimization is valid for floating point curves typedef struct { cmsFloat32Number CurveR[MAX_NODES_IN_CURVE]; cmsFloat32Number CurveG[MAX_NODES_IN_CURVE]; cmsFloat32Number CurveB[MAX_NODES_IN_CURVE]; void* real_ptr; } CurvesFloatData; // A special malloc that returns memory aligned to DWORD boundary. Aligned memory access is way faster than unaligned // reference to the real block is kept for later free static CurvesFloatData* malloc_aligned(cmsContext ContextID) { cmsUInt8Number* real_ptr = (cmsUInt8Number*)_cmsMallocZero(ContextID, sizeof(CurvesFloatData) + 32); cmsUInt8Number* aligned = (cmsUInt8Number*)(((uintptr_t)real_ptr + 16) & ~0xf); CurvesFloatData* p = (CurvesFloatData*)aligned; p->real_ptr = real_ptr; return p; } // Free the private data container static void free_aligned(cmsContext ContextID, void* Data) { CurvesFloatData* p = (CurvesFloatData*)Data; if (p != NULL) _cmsFree(ContextID, p->real_ptr); } // Evaluator for float curves. This are just 1D tables static void FastEvaluateFloatRGBCurves(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM) CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM) CMMcargo); CurvesFloatData* Data = (CurvesFloatData*) _cmsGetTransformUserData(CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii = 0; ii < PixelsPerLine; ii++) { *(cmsFloat32Number*)rout = flerp(Data->CurveR, *(cmsFloat32Number*)rin); *(cmsFloat32Number*)gout = flerp(Data->CurveG, *(cmsFloat32Number*)gin); *(cmsFloat32Number*)bout = flerp(Data->CurveB, *(cmsFloat32Number*)bin); rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (ain) { *(cmsFloat32Number*)aout = *(cmsFloat32Number*)ain; ain += SourceIncrements[3]; aout += DestIncrements[3]; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Do nothing but arrange the RGB format. static void FastFloatRGBIdentity(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* rout; cmsUInt8Number* gout; cmsUInt8Number* bout; cmsUInt8Number* aout = NULL; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM) CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM) CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; rout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; gout = (cmsUInt8Number*)Output + DestStartingOrder[1] + strideOut; bout = (cmsUInt8Number*)Output + DestStartingOrder[2] + strideOut; if (nalpha) aout = (cmsUInt8Number*)Output + DestStartingOrder[3] + strideOut; for (ii=0; ii < PixelsPerLine; ii++) { *(cmsFloat32Number*)rout = *(cmsFloat32Number*)rin; *(cmsFloat32Number*)gout = *(cmsFloat32Number*)gin; *(cmsFloat32Number*)bout = *(cmsFloat32Number*)bin; rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; rout += DestIncrements[0]; gout += DestIncrements[1]; bout += DestIncrements[2]; if (ain) { *(cmsFloat32Number*)aout = *(cmsFloat32Number*)ain; ain += SourceIncrements[3]; aout += DestIncrements[3]; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } // Evaluate 1 channel only static void FastEvaluateFloatGrayCurves(struct _cmstransform_struct* CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* kin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* kout; cmsUInt8Number* aout = NULL; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo); CurvesFloatData* Data = (CurvesFloatData*)_cmsGetTransformUserData(CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { kin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; kout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; if (nalpha) { ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1]; aout = (cmsUInt8Number*)Output + DestStartingOrder[1]; } for (ii = 0; ii < PixelsPerLine; ii++) { *(cmsFloat32Number*)kout = flerp(Data->CurveR, *(cmsFloat32Number*)kin); kin += SourceIncrements[0]; kout += DestIncrements[0]; if (ain) { *(cmsFloat32Number*)aout = *(cmsFloat32Number*)ain; ain += SourceIncrements[1]; aout += DestIncrements[1]; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } static void FastFloatGrayIdentity(struct _cmstransform_struct* CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* kin; const cmsUInt8Number* ain = NULL; cmsUInt8Number* kout; cmsUInt8Number* aout = NULL; cmsUInt32Number InputFormat = cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number OutputFormat = cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo); cmsUInt32Number nchans, nalpha; cmsUInt32Number strideIn, strideOut; _cmsComputeComponentIncrements(InputFormat, Stride->BytesPerPlaneIn, &nchans, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(OutputFormat, Stride->BytesPerPlaneOut, &nchans, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { kin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; kout = (cmsUInt8Number*)Output + DestStartingOrder[0] + strideOut; if (nalpha) { ain = (const cmsUInt8Number*)Input + SourceStartingOrder[1]; aout = (cmsUInt8Number*)Output + DestStartingOrder[1]; } for (ii = 0; ii < PixelsPerLine; ii++) { *(cmsFloat32Number*)kout = *(cmsFloat32Number*)kin; kin += SourceIncrements[0]; kout += DestIncrements[0]; if (ain) { *(cmsFloat32Number*)aout = *(cmsFloat32Number*)ain; ain += SourceIncrements[1]; aout += DestIncrements[1]; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } #define LINEAR_CURVES_EPSILON 0.00001 // Try to see if the curves are linear static cmsBool AllRGBCurvesAreLinear(CurvesFloatData* data) { int j; cmsFloat32Number expected; for (j = 0; j < MAX_NODES_IN_CURVE; j++) { expected = (cmsFloat32Number)j / (cmsFloat32Number)(MAX_NODES_IN_CURVE - 1); if (fabsf(data->CurveR[j] - expected) > LINEAR_CURVES_EPSILON || fabsf(data->CurveG[j] - expected) > LINEAR_CURVES_EPSILON || fabsf(data->CurveB[j] - expected) > LINEAR_CURVES_EPSILON) { return FALSE; } } return TRUE; } static cmsBool KCurveIsLinear(CurvesFloatData* data) { int j; cmsFloat32Number expected; for (j = 0; j < MAX_NODES_IN_CURVE; j++) { expected = (cmsFloat32Number)j / (cmsFloat32Number)(MAX_NODES_IN_CURVE - 1); if (fabs(data->CurveR[j] - expected) > LINEAR_CURVES_EPSILON) return FALSE; } return TRUE; } // Create linearization tables with a reasonable number of entries. Precission is about 32 bits. static CurvesFloatData* ComputeCompositeCurves(cmsUInt32Number nChan, cmsPipeline* Src) { cmsUInt32Number i, j; cmsFloat32Number InFloat[3], OutFloat[3]; CurvesFloatData* Data = malloc_aligned(cmsGetPipelineContextID(Src)); if (Data == NULL) return NULL; // Create target curves for (i = 0; i < MAX_NODES_IN_CURVE; i++) { for (j=0; j CurveR[i] = OutFloat[0]; } else { Data->CurveR[i] = OutFloat[0]; Data->CurveG[i] = OutFloat[1]; Data->CurveB[i] = OutFloat[2]; } } return Data; } // If the target LUT holds only curves, the optimization procedure is to join all those // curves together. That only works on curves and does not work on matrices. cmsBool OptimizeFloatByJoiningCurves(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeUserData, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* Src = *Lut; cmsStage* mpe; CurvesFloatData* Data; cmsUInt32Number nChans; // Apply only to floating-point cases if (!T_FLOAT(*InputFormat) || !T_FLOAT(*OutputFormat)) return FALSE; // Only on 8-bit if (T_BYTES(*InputFormat) != 4 || T_BYTES(*OutputFormat) != 4) return FALSE; // Curves need same channels on input and output (despite extra channels may differ) nChans = T_CHANNELS(*InputFormat); if (nChans != T_CHANNELS(*OutputFormat)) return FALSE; // gray and RGB if (nChans != 1 && nChans != 3) return FALSE; // Only curves in this LUT? for (mpe = cmsPipelineGetPtrToFirstStage(Src); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) != cmsSigCurveSetElemType) return FALSE; } Data = ComputeCompositeCurves(nChans, Src); *dwFlags |= cmsFLAGS_NOCACHE; *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; *UserData = Data; *FreeUserData = free_aligned; // Maybe the curves are linear at the end if (nChans == 1) *TransformFn = (KCurveIsLinear(Data) ? FastFloatGrayIdentity : FastEvaluateFloatGrayCurves); else *TransformFn = (AllRGBCurvesAreLinear(Data) ? FastFloatRGBIdentity : FastEvaluateFloatRGBCurves); return TRUE; } lcms2-2.12rc1/plugins/fast_float/src/fast_8_tethra.c0000644000175000017500000004502513775114656021414 0ustar martimarti//--------------------------------------------------------------------------------- // // Little Color Management System, fast floating point extensions // Copyright (c) 1998-2020 Marti Maria Saguer, all rights reserved // // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // //--------------------------------------------------------------------------------- #include "fast_float_internal.h" #define PRELINEARIZATION_POINTS 4096 // Optimization for 8 bits, 3 inputs only typedef struct { cmsContext ContextID; const cmsInterpParams* p; // Tetrahedrical interpolation parameters. This is a not-owned pointer. cmsUInt16Number rx[256], ry[256], rz[256]; cmsUInt32Number X0[256], Y0[256], Z0[256]; // Precomputed nodes and offsets for 8-bit input data } Performance8Data; // Precomputes tables for 8-bit on input devicelink. static Performance8Data* Performance8alloc(cmsContext ContextID, const cmsInterpParams* p, cmsToneCurve* G[3]) { int i; cmsUInt16Number Input[3]; cmsS15Fixed16Number v1, v2, v3; Performance8Data* p8; p8 = (Performance8Data*) _cmsMallocZero(ContextID, sizeof(Performance8Data)); if (p8 == NULL) return NULL; // Since this only works for 8 bit input, values comes always as x * 257, // we can safely take msb byte (x << 8 + x) for (i=0; i < 256; i++) { if (G != NULL) { // Get 16-bit representation Input[0] = cmsEvalToneCurve16(G[0], FROM_8_TO_16(i)); Input[1] = cmsEvalToneCurve16(G[1], FROM_8_TO_16(i)); Input[2] = cmsEvalToneCurve16(G[2], FROM_8_TO_16(i)); } else { Input[0] = FROM_8_TO_16(i); Input[1] = FROM_8_TO_16(i); Input[2] = FROM_8_TO_16(i); } // Move to 0..1.0 in fixed domain v1 = _cmsToFixedDomain(Input[0] * p -> Domain[0]); v2 = _cmsToFixedDomain(Input[1] * p -> Domain[1]); v3 = _cmsToFixedDomain(Input[2] * p -> Domain[2]); // Store the precalculated table of nodes p8 ->X0[i] = (p->opta[2] * FIXED_TO_INT(v1)); p8 ->Y0[i] = (p->opta[1] * FIXED_TO_INT(v2)); p8 ->Z0[i] = (p->opta[0] * FIXED_TO_INT(v3)); // Store the precalculated table of offsets p8 ->rx[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v1); p8 ->ry[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v2); p8 ->rz[i] = (cmsUInt16Number) FIXED_REST_TO_INT(v3); } p8 ->ContextID = ContextID; p8 ->p = p; return p8; } static void Performance8free(cmsContext ContextID, void* ptr) { _cmsFree(ContextID, ptr); } // Sampler implemented by another LUT. This is a clean way to precalculate the devicelink 3D CLUT for // almost any transform. We use floating point precision and then convert from floating point to 16 bits. static int XFormSampler16(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUInt16Number Out[], CMSREGISTER void* Cargo) { // Evaluate in 16 bits cmsPipelineEval16(In, Out, (cmsPipeline*) Cargo); // Always succeed return TRUE; } // A optimized interpolation for 8-bit input. #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) static void PerformanceEval8(struct _cmstransform_struct *CMMcargo, const void* Input, void* Output, cmsUInt32Number PixelsPerLine, cmsUInt32Number LineCount, const cmsStride* Stride) { cmsUInt8Number r, g, b; cmsS15Fixed16Number rx, ry, rz; cmsS15Fixed16Number c0, c1, c2, c3, Rest; cmsUInt32Number OutChan, TotalPlusAlpha; cmsS15Fixed16Number X0, X1, Y0, Y1, Z0, Z1; Performance8Data* p8 = (Performance8Data*)_cmsGetTransformUserData(CMMcargo); const cmsInterpParams* p = p8->p; cmsUInt32Number TotalOut = p->nOutputs; const cmsUInt16Number* LutTable = (const cmsUInt16Number*)p->Table; cmsUInt8Number* out[cmsMAXCHANNELS]; cmsUInt16Number res16; cmsUInt32Number i, ii; cmsUInt32Number SourceStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number SourceIncrements[cmsMAXCHANNELS]; cmsUInt32Number DestStartingOrder[cmsMAXCHANNELS]; cmsUInt32Number DestIncrements[cmsMAXCHANNELS]; const cmsUInt8Number* rin; const cmsUInt8Number* gin; const cmsUInt8Number* bin; const cmsUInt8Number* ain = NULL; cmsUInt32Number nalpha, strideIn, strideOut; _cmsComputeComponentIncrements(cmsGetTransformInputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneIn, NULL, &nalpha, SourceStartingOrder, SourceIncrements); _cmsComputeComponentIncrements(cmsGetTransformOutputFormat((cmsHTRANSFORM)CMMcargo), Stride->BytesPerPlaneOut, NULL, &nalpha, DestStartingOrder, DestIncrements); if (!(_cmsGetTransformFlags((cmsHTRANSFORM)CMMcargo) & cmsFLAGS_COPY_ALPHA)) nalpha = 0; strideIn = strideOut = 0; for (i = 0; i < LineCount; i++) { rin = (const cmsUInt8Number*)Input + SourceStartingOrder[0] + strideIn; gin = (const cmsUInt8Number*)Input + SourceStartingOrder[1] + strideIn; bin = (const cmsUInt8Number*)Input + SourceStartingOrder[2] + strideIn; if (nalpha) ain = (const cmsUInt8Number*)Input + SourceStartingOrder[3] + strideIn; TotalPlusAlpha = TotalOut; if (ain) TotalPlusAlpha++; for (OutChan = 0; OutChan < TotalPlusAlpha; OutChan++) { out[OutChan] = (cmsUInt8Number*)Output + DestStartingOrder[OutChan] + strideOut; } for (ii = 0; ii < PixelsPerLine; ii++) { r = *rin; g = *gin; b = *bin; rin += SourceIncrements[0]; gin += SourceIncrements[1]; bin += SourceIncrements[2]; X0 = X1 = p8->X0[r]; Y0 = Y1 = p8->Y0[g]; Z0 = Z1 = p8->Z0[b]; rx = p8->rx[r]; ry = p8->ry[g]; rz = p8->rz[b]; X1 = X0 + ((rx == 0) ? 0 : p->opta[2]); Y1 = Y0 + ((ry == 0) ? 0 : p->opta[1]); Z1 = Z0 + ((rz == 0) ? 0 : p->opta[0]); // These are the 6 Tetrahedral for (OutChan = 0; OutChan < TotalOut; OutChan++) { c0 = DENS(X0, Y0, Z0); if (rx >= ry && ry >= rz) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z0) - DENS(X1, Y0, Z0); c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (rx >= rz && rz >= ry) { c1 = DENS(X1, Y0, Z0) - c0; c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X1, Y0, Z1) - DENS(X1, Y0, Z0); } else if (rz >= rx && rx >= ry) { c1 = DENS(X1, Y0, Z1) - DENS(X0, Y0, Z1); c2 = DENS(X1, Y1, Z1) - DENS(X1, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else if (ry >= rx && rx >= rz) { c1 = DENS(X1, Y1, Z0) - DENS(X0, Y1, Z0); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X1, Y1, Z1) - DENS(X1, Y1, Z0); } else if (ry >= rz && rz >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z0) - c0; c3 = DENS(X0, Y1, Z1) - DENS(X0, Y1, Z0); } else if (rz >= ry && ry >= rx) { c1 = DENS(X1, Y1, Z1) - DENS(X0, Y1, Z1); c2 = DENS(X0, Y1, Z1) - DENS(X0, Y0, Z1); c3 = DENS(X0, Y0, Z1) - c0; } else { c1 = c2 = c3 = 0; } Rest = c1 * rx + c2 * ry + c3 * rz + 0x8001; res16 = (cmsUInt16Number)c0 + ((Rest + (Rest >> 16)) >> 16); *out[OutChan] = FROM_16_TO_8(res16); out[OutChan] += DestIncrements[OutChan]; if (ain) *out[TotalOut] = *ain; } } strideIn += Stride->BytesPerLineIn; strideOut += Stride->BytesPerLineOut; } } #undef DENS // Curves that contain wide empty areas are not optimizeable static cmsBool IsDegenerated(const cmsToneCurve* g) { int i, Zeros = 0, Poles = 0; int nEntries = cmsGetToneCurveEstimatedTableEntries(g); const cmsUInt16Number* Table16 = cmsGetToneCurveEstimatedTable(g); for (i=0; i < nEntries; i++) { if (Table16[i] == 0x0000) Zeros++; if (Table16[i] == 0xffff) Poles++; } if (Zeros == 1 && Poles == 1) return FALSE; // For linear tables if (Zeros > (nEntries / 4)) return TRUE; // Degenerated, mostly zeros if (Poles > (nEntries / 4)) return TRUE; // Degenerated, mostly poles return FALSE; } // Normalize endpoints by slope limiting max and min. This assures endpoints as well. // Descending curves are handled as well. static void SlopeLimiting(cmsUInt16Number* Table16, int nEntries) { int BeginVal, EndVal; int AtBegin = (int) floor((cmsFloat64Number)nEntries * 0.02 + 0.5); // Cutoff at 2% int AtEnd = nEntries - AtBegin - 1; // And 98% cmsFloat64Number Val, Slope, beta; int i; if (Table16[0] > Table16[nEntries-1]) { BeginVal = 0xffff; EndVal = 0; } else { BeginVal = 0; EndVal = 0xffff; } // Compute slope and offset for begin of curve Val = Table16[AtBegin]; Slope = (Val - BeginVal) / AtBegin; beta = Val - Slope * AtBegin; for (i=0; i < AtBegin; i++) Table16[i] = _cmsSaturateWord(i * Slope + beta); // Compute slope and offset for the end Val = Table16[AtEnd]; Slope = (EndVal - Val) / AtBegin; // AtBegin holds the X interval, which is same in both cases beta = Val - Slope * AtEnd; for (i = AtEnd; i < (int) nEntries; i++) Table16[i] = _cmsSaturateWord(i * Slope + beta); } // -------------------------------------------------------------------------------------------------------------- cmsBool Optimize8BitRGBTransform(_cmsTransform2Fn* TransformFn, void** UserData, _cmsFreeUserDataFn* FreeDataFn, cmsPipeline** Lut, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags) { cmsPipeline* OriginalLut; int nGridPoints; cmsToneCurve *Trans[cmsMAXCHANNELS], *TransReverse[cmsMAXCHANNELS]; cmsUInt32Number t, i, j; cmsFloat32Number v, In[cmsMAXCHANNELS], Out[cmsMAXCHANNELS]; cmsBool lIsSuitable, lIsLinear; cmsPipeline* OptimizedLUT = NULL, *LutPlusCurves = NULL; cmsStage* OptimizedCLUTmpe; cmsColorSpaceSignature OutputColorSpace; cmsStage* OptimizedPrelinMpe; cmsStage* mpe; Performance8Data* p8; cmsUInt16Number* MyTable[3]; cmsContext ContextID; _cmsStageCLutData* data; // For empty transforms, do nothing if (*Lut == NULL) return FALSE; // This is a loosy optimization! does not apply in floating-point cases if (T_FLOAT(*InputFormat) || T_FLOAT(*OutputFormat)) return FALSE; // Only on 8-bit if (T_BYTES(*InputFormat) != 1 || T_BYTES(*OutputFormat) != 1) return FALSE; // Only on RGB if (T_COLORSPACE(*InputFormat) != PT_RGB) return FALSE; OriginalLut = *Lut; // Named color pipelines cannot be optimized either for (mpe = cmsPipelineGetPtrToFirstStage(OriginalLut); mpe != NULL; mpe = cmsStageNext(mpe)) { if (cmsStageType(mpe) == cmsSigNamedColorElemType) return FALSE; } ContextID = cmsGetPipelineContextID(OriginalLut); OutputColorSpace = _cmsICCcolorSpace(T_COLORSPACE(*OutputFormat)); nGridPoints = _cmsReasonableGridpointsByColorspace(cmsSigRgbData, *dwFlags); // Empty gamma containers memset(Trans, 0, sizeof(Trans)); memset(TransReverse, 0, sizeof(TransReverse)); MyTable[0] = (cmsUInt16Number*) _cmsMallocZero(ContextID, sizeof(cmsUInt16Number) * PRELINEARIZATION_POINTS); MyTable[1] = (cmsUInt16Number*) _cmsMallocZero(ContextID, sizeof(cmsUInt16Number) * PRELINEARIZATION_POINTS); MyTable[2] = (cmsUInt16Number*) _cmsMallocZero(ContextID, sizeof(cmsUInt16Number) * PRELINEARIZATION_POINTS); if (MyTable[0] == NULL || MyTable[1] == NULL || MyTable[2] == NULL) goto Error; // Populate the curves for (i=0; i < PRELINEARIZATION_POINTS; i++) { v = (cmsFloat32Number) ((cmsFloat64Number) i / (PRELINEARIZATION_POINTS - 1)); // Feed input with a gray ramp for (j=0; j < 3; j++) In[j] = v; // Evaluate the gray value cmsPipelineEvalFloat(In, Out, OriginalLut); // Store result in curve for (j=0; j < 3; j++) MyTable[j][i] = _cmsSaturateWord(Out[j] * 65535.0); } for (t=0; t < 3; t++) { SlopeLimiting(MyTable[t], PRELINEARIZATION_POINTS); Trans[t] = cmsBuildTabulatedToneCurve16(ContextID, PRELINEARIZATION_POINTS, MyTable[t]); if (Trans[t] == NULL) goto Error; _cmsFree(cmsGetPipelineContextID(OriginalLut), MyTable[t]); } // Check for validity lIsSuitable = TRUE; lIsLinear = TRUE; for (t=0; (lIsSuitable && (t < 3)); t++) { // Exclude if already linear if (!cmsIsToneCurveLinear(Trans[t])) lIsLinear = FALSE; // Exclude if non-monotonic if (!cmsIsToneCurveMonotonic(Trans[t])) lIsSuitable = FALSE; if (IsDegenerated(Trans[t])) lIsSuitable = FALSE; } // If it is not suitable, just quit if (!lIsSuitable) goto Error; // Invert curves if possible for (t = 0; t < cmsPipelineInputChannels(OriginalLut); t++) { TransReverse[t] = cmsReverseToneCurveEx(PRELINEARIZATION_POINTS, Trans[t]); if (TransReverse[t] == NULL) goto Error; } // Now inset the reversed curves at the begin of transform LutPlusCurves = cmsPipelineDup(OriginalLut); if (LutPlusCurves == NULL) goto Error; cmsPipelineInsertStage(LutPlusCurves, cmsAT_BEGIN, cmsStageAllocToneCurves(ContextID, 3, TransReverse)); // Create the result LUT OptimizedLUT = cmsPipelineAlloc(cmsGetPipelineContextID(OriginalLut), 3, cmsPipelineOutputChannels(OriginalLut)); if (OptimizedLUT == NULL) goto Error; OptimizedPrelinMpe = cmsStageAllocToneCurves(ContextID, 3, Trans); // Create and insert the curves at the beginning cmsPipelineInsertStage(OptimizedLUT, cmsAT_BEGIN, OptimizedPrelinMpe); // Allocate the CLUT for result OptimizedCLUTmpe = cmsStageAllocCLut16bit(ContextID, nGridPoints, 3, cmsPipelineOutputChannels(OriginalLut), NULL); // Add the CLUT to the destination LUT cmsPipelineInsertStage(OptimizedLUT, cmsAT_END, OptimizedCLUTmpe); // Resample the LUT if (!cmsStageSampleCLut16bit(OptimizedCLUTmpe, XFormSampler16, (void*) LutPlusCurves, 0)) goto Error; // Set the evaluator data = (_cmsStageCLutData*) cmsStageData(OptimizedCLUTmpe); p8 = Performance8alloc(ContextID, data ->Params, Trans); if (p8 == NULL) return FALSE; // Free resources for (t = 0; t <3; t++) { if (Trans[t]) cmsFreeToneCurve(Trans[t]); if (TransReverse[t]) cmsFreeToneCurve(TransReverse[t]); } cmsPipelineFree(LutPlusCurves); // And return the obtained LUT cmsPipelineFree(OriginalLut); *dwFlags &= ~cmsFLAGS_CAN_CHANGE_FORMATTER; *Lut = OptimizedLUT; *TransformFn = PerformanceEval8; *UserData = p8; *FreeDataFn = Performance8free; return TRUE; Error: for (t = 0; t < 3; t++) { if (Trans[t]) cmsFreeToneCurve(Trans[t]); if (TransReverse[t]) cmsFreeToneCurve(TransReverse[t]); } if (LutPlusCurves != NULL) cmsPipelineFree(LutPlusCurves); if (OptimizedLUT != NULL) cmsPipelineFree(OptimizedLUT); return FALSE; } lcms2-2.12rc1/plugins/fast_float/src/Makefile.in0000644000175000017500000006201213775114656020555 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Makefile for building lcms2_fast_float library # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/fast_float/src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = liblcms2_fast_float_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/liblcms2.la am_liblcms2_fast_float_la_OBJECTS = fast_8_curves.lo \ fast_8_matsh_sse.lo fast_8_matsh.lo fast_8_tethra.lo \ fast_16_tethra.lo fast_float_15bits.lo fast_float_15mats.lo \ fast_float_cmyk.lo fast_float_curves.lo fast_float_matsh.lo \ fast_float_separate.lo fast_float_sup.lo fast_float_tethra.lo \ fast_float_lab.lo liblcms2_fast_float_la_OBJECTS = $(am_liblcms2_fast_float_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = liblcms2_fast_float_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(liblcms2_fast_float_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/fast_16_tethra.Plo \ ./$(DEPDIR)/fast_8_curves.Plo ./$(DEPDIR)/fast_8_matsh.Plo \ ./$(DEPDIR)/fast_8_matsh_sse.Plo ./$(DEPDIR)/fast_8_tethra.Plo \ ./$(DEPDIR)/fast_float_15bits.Plo \ ./$(DEPDIR)/fast_float_15mats.Plo \ ./$(DEPDIR)/fast_float_cmyk.Plo \ ./$(DEPDIR)/fast_float_curves.Plo \ ./$(DEPDIR)/fast_float_lab.Plo \ ./$(DEPDIR)/fast_float_matsh.Plo \ ./$(DEPDIR)/fast_float_separate.Plo \ ./$(DEPDIR)/fast_float_sup.Plo \ ./$(DEPDIR)/fast_float_tethra.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblcms2_fast_float_la_SOURCES) DIST_SOURCES = $(liblcms2_fast_float_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = 0 LIBRARY_CURRENT = 1 LIBRARY_REVISION = 1 LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = ${prefix}/include infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7 foreign # Shared libraries built in this directory lib_LTLIBRARIES = liblcms2_fast_float.la AM_CPPFLAGS = -Ofast -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/../include -I$(builddir)/../include liblcms2_fast_float_la_LDFLAGS = -no-undefined \ -version-info $(LIBRARY_CURRENT):$(LIBRARY_REVISION):$(LIBRARY_AGE) liblcms2_fast_float_la_LIBADD = $(LCMS_LIB_DEPLIBS) $(top_builddir)/src/liblcms2.la liblcms2_fast_float_la_SOURCES = fast_8_curves.c fast_8_matsh_sse.c fast_8_matsh.c fast_8_tethra.c \ fast_16_tethra.c fast_float_15bits.c fast_float_15mats.c fast_float_cmyk.c fast_float_curves.c fast_float_matsh.c \ fast_float_separate.c fast_float_sup.c fast_float_tethra.c fast_float_lab.c fast_float_internal.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign plugins/fast_float/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign plugins/fast_float/src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblcms2_fast_float.la: $(liblcms2_fast_float_la_OBJECTS) $(liblcms2_fast_float_la_DEPENDENCIES) $(EXTRA_liblcms2_fast_float_la_DEPENDENCIES) $(AM_V_CCLD)$(liblcms2_fast_float_la_LINK) -rpath $(libdir) $(liblcms2_fast_float_la_OBJECTS) $(liblcms2_fast_float_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_16_tethra.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_8_curves.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_8_matsh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_8_matsh_sse.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_8_tethra.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_15bits.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_15mats.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_cmyk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_curves.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_lab.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_matsh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_separate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_sup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast_float_tethra.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/fast_16_tethra.Plo -rm -f ./$(DEPDIR)/fast_8_curves.Plo -rm -f ./$(DEPDIR)/fast_8_matsh.Plo -rm -f ./$(DEPDIR)/fast_8_matsh_sse.Plo -rm -f ./$(DEPDIR)/fast_8_tethra.Plo -rm -f ./$(DEPDIR)/fast_float_15bits.Plo -rm -f ./$(DEPDIR)/fast_float_15mats.Plo -rm -f ./$(DEPDIR)/fast_float_cmyk.Plo -rm -f ./$(DEPDIR)/fast_float_curves.Plo -rm -f ./$(DEPDIR)/fast_float_lab.Plo -rm -f ./$(DEPDIR)/fast_float_matsh.Plo -rm -f ./$(DEPDIR)/fast_float_separate.Plo -rm -f ./$(DEPDIR)/fast_float_sup.Plo -rm -f ./$(DEPDIR)/fast_float_tethra.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/fast_16_tethra.Plo -rm -f ./$(DEPDIR)/fast_8_curves.Plo -rm -f ./$(DEPDIR)/fast_8_matsh.Plo -rm -f ./$(DEPDIR)/fast_8_matsh_sse.Plo -rm -f ./$(DEPDIR)/fast_8_tethra.Plo -rm -f ./$(DEPDIR)/fast_float_15bits.Plo -rm -f ./$(DEPDIR)/fast_float_15mats.Plo -rm -f ./$(DEPDIR)/fast_float_cmyk.Plo -rm -f ./$(DEPDIR)/fast_float_curves.Plo -rm -f ./$(DEPDIR)/fast_float_lab.Plo -rm -f ./$(DEPDIR)/fast_float_matsh.Plo -rm -f ./$(DEPDIR)/fast_float_separate.Plo -rm -f ./$(DEPDIR)/fast_float_sup.Plo -rm -f ./$(DEPDIR)/fast_float_tethra.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/plugins/fast_float/Makefile.in0000644000175000017500000004566313775114656020003 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins/fast_float ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src include testbed all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign plugins/fast_float/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign plugins/fast_float/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/plugins/Makefile.in0000644000175000017500000004561113775114656015652 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = plugins ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = fast_float all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign plugins/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/AUTHORS0000644000175000017500000000147713775114656013176 0ustar martimarti Main Author ------------ Marti Maria Contributors ------------ Bob Friesenhahn Kai-Uwe Behrmann Stuart Nixon Jordi Vilar Richard Hughes Auke Nauta Chris Evans (Google) Lorenzo Ridolfi Robin Watts (Artifex) Shawn Pedersen Andrew Brygin Samuli Suominen Florian Hch Aurelien Jarno Claudiu Cebuc Michael Vhrel (Artifex) Michal Cihar Daniel Kaneider Mateusz Jurczyk (Google) Paul Miller Sbastien Lon Christian Schmitz XhmikosR Stanislav Brabec (SuSe) Leonhard Gruenschloss (Google) Patrick Noffke Christopher James Halse Rogers John Hein Thomas Weber (Debian) Mark Allen Noel Carboni Sergei Trofimovic Philipp Knechtges Special Thanks -------------- Artifex software AlienSkin software Jan Morovic Jos Vernon (WebSupergoo) Harald Schneider (Maxon) Christian Albrecht Dimitrios Anastassakis Lemke Software Tim Zaman lcms2-2.12rc1/ChangeLog0000644000175000017500000002224213775114656013671 0ustar martimarti ----------------------- 2.12 Maintenance release ----------------------- Added new build-in sigmoidal tone curve Added XCode 12 project Addes support for multichannel input up to 15 channels Fix LUT8 write matrix Fix version mess on 10/11 Fix tools & samples xgetopt Fix warnings on different function pointers Fix matlab MEX compilation plugin: cleanup and better SSE detection plugin: add lab to any on float plugin: it can now be compiled as C++ recover PDF documentation, but try to keep it under a resonable size. Prevent a rare but possible out-of-bounds read in postscript generator ----------------------- 2.11 Maintenance release ----------------------- Fixed __cpuid() on fast float plugin to allow gnu gcc Fixed copy alpha bounds check Fixed data race condition on contexts pool Fixed LUT16 write matrix on multichannel V2 profiles ----------------------- 2.10 Featured release ----------------------- Added a compilation toggle to remove "register" keyword in API. Previously commercial, fast_float plug-in is now released as open source under GPL3 license. MD5 functions are now accesible through plug-in API. Added support for Visual Studio 2019 Bug fixing. ----------------------- 2.9 Maintenance release ----------------------- Several fixes related with security, and therefore not detailed here. C++ compiles now without warnings Added OSX and clang in travis Added a travis-ci test matrix for many compilers and OS. Thanks to Thomas Weber (debian) for this great improvement. testbed can now work with dynamic versions of library Fixed wrong planar formatters regarding linestride interpretation ----------------------- 2.8 Featured release ----------------------- Changed ChangeLog direction Fixed many typos in comments, thanks to Stefan Weil for doing that. Fixed localization bug, added a new test case crayons.icc thanks to Richard Hughes for providing the profile. Fixed a bug in optimizer that made some formats (i.e, bits planar) unavailable Fixed misalignment problems on Alpha. The compiler does not align strings, and accessing begin of string as a uint16 makes code to fail. Added some extra checks to the tools and examples. Fixed a bug that prevented to read luminance tag BIG amount of functionality contributed/Sponsored by Alien Skin Software: TransformStride, copyAlpha, performance plug-ins. Fixes some warnings as well. Added an extra _ to _stdcall to make it more portable Fixed a bug in transicc for named color profiles Fixed several compiler warnings Added support for Visual Studio 2015 Fixed for XCODE project ----------------------- 2.7 Maintenance release ----------------------- Added a version retrieval function Added an option in transicc for working in bounded mode Fixed wrong handling of extra channels in some formatters. Added a project for VS2013 Added license for iccjpeg.c New project for mac Added a global optimization that merges consecutive matrices in pipelines. Fixes loss of precision in some transforms Added a flag to clip negative values in unbounded transforms (only gray, rgb, cmyk) Move unused var suppresor before the `return` statements. Remove dead code. Add missing comma in CGATS parser utils/jpgicc/iccjpeg.c: Fix check if unsigned variable 'total_length'… … Some maintenance fixes Remove unused vcproj files Added a function to retrieve the iohandler of a given profile object Added a safety check on named color lists Fixed a macro clash on SNONE. Fixed a possible segmentation fault in a non-happy path ----------------------- 2.6 Featured release ----------------------- Added pthread dependency. From now lcms supports multithreading Fix for delete tag memory corruption Added directories for tiff, jpeg in configure script New locking plug-in, from Artifex Big revamp on Contexts, from Artifex Fixed memory leaks on error handling Changed endianness detection for PowerPC Added a way to retrieve matrix shaper always, no matter LUT is present Fixed a bug in PCS/Colorspace order when reading V2 Lab devicelinks Fixed some indexing out of bounds in floating point interpolation Fixed a double free in recovering from a previous error in default intent handler. ----------------------- 2.5 Maintenance release ----------------------- Added some checks for non-happy path, mostly failing mallocs Transform2Devicelink now keeps white point when guessing deviceclass is enabled Rendering intent used when creating the transform is now propagated to profile header in cmsTransform2Devicelink. This is because 7.2.15 in spec 4.3 Added a simple project for cppcheck Added support for VS2012 Remove spurious tabs added by git merge of pull request Fixed a bug in parametric curves Added some fixes from XhmikosR Added TIFF Lab16 handling on tifficc More changes from Artifex Added identity curves support for write V2 LUT Added a way to read the profile creator from header Added a reference for Mac MLU tag Fixed devicelink generation for 8 bits Several minor issues found by cppcheck Several improvements in cgats parser. Fixed some bugs on floating point curves. Fixed a bug on big endian platforms not supporting uint64 or long long. Added error descriptions on cmsSmoothToneCurve Added new cmsPlugInTHR() and fixed some race conditions (thanks to Artifex) update black point detection algorithm to reflect ICC changes Fixed some 64 bit warnings on size_t to uint32 conversions Fixed a multithead bug on optimization (StageDEF) RGB profiles using same tone curves for several channels are storing now only one copy of the curve (saves space) User defined parametric curves can now be saved in ICC profiles. -------------------- 2.4 Featured release -------------------- Added a check for maximum input channels Fixed an uninitialized read on PatchLUT Fixed a bug in XYZ floating point PCS added half float variants (ABGR and so) Added formatter resolution after xform optimization plugin Fixed a bug in transicc when clot tables are present Added a conditional compilatio flag for "half" support Fixed a bug on named color profiles. Fixed a typo on tificc and jpgicc names, thanks to Elle Stone for reporting. Added half float support Increased security checks, thanks to Mateusz Jurczyk, from Google. Fixed a bug on IT8 reading of negative numbers. Fixed a bug on ending zero when saving a IT8 to memory Internal stage structs are now accessible through plug-in API Added a new plug-in type Added getPipelineContextID Fixed a bug in pipeline duplication gamma 1.0 can now operate in unbounded mode Exposed internal overview table for tone curves Added a new plug in entry for full transform Added support for transforms on planar data with different stride Added black point detection algorithm from Adobe paper Fixed a bug in black preservation checking Added performance improvements from several contributors, mostly Artifex Fixed uint64 to work in systems without long long native type Fixed a bug in the named color devicelink generation ----------------------- 2.3 Maintenance release ----------------------- Added compatibility with Argyll's CGATS parser Updated to ICC spec 4.3 Adding a memory alignment macro for CGATS parser Fixed a bug on the range of data in transicc, when colorant tag is specified Fixed Absolute colorimetric intent issues Fixed encoding for floating point tags in Lab/XYZ Fixed a 0 byte allocation issue in _cmsCreateSubAllocChunk ----------------------- 2.2 Maintenance release ----------------------- Pascal unit now is supported by Free Pascal Compiler Fixed a bug on ReadRAWtag Added dictionary metatag support Fixed a bug in black preservation and slightly non-monotonic curves Added named color functionality Fixed a bug that made crash black preservation on CMYK2CMYK devicelinks Added functions to retrieve formatters from transforms Profiles with weird curves are not prone to p`relinearization optimization. changed memmove to memcpy in cache for xput improvement Fixed GBD bug (out of bounds memory overwrite) Fixed some potential issues as NULL dereferencing Updated linkicc to 2.1, cleanup Removed pthreads need Fixed severa bugs in absolute colorimetric intent ----------------------- 2.1 Maintenance release ----------------------- Added bound check in floating point interpolation Fixed a bug on curve reversing when source curves have few points Added Duotone support (Bilinear interpolation) Fixed delphi interface linkicc now stores the rendering intent in the profile header Fixed several integer overflow and other integrity checks, thanks to Chris Evans Fixed an issue on curve inversion Fixed memory leaks on when recovering from errors Fixed a bug in psid and profile sequence tags Fixed a bug in device link creation on v4 profiles Fixed a bug in tificc in floating point formats Peliminary Delphi wrapper Fixed some typos in error messages Added cmsTagLinkedTo Fixed VC2010, VC2008 projects Added a check on jpgicc for NULL transforms Added UTILS_UNUSED_PARAMETER for samples Added cmsChangeBufferFormat for backwards compatibility Fixed a bug on Lab + Alpha float formatters, added such predefined formatters as well Fixed a bug on transicc that made profiles with output colorants info to malfunction Fixed a bug that prevented linkicc to work Fixed a bug on V2 CHAD construction, affects absolute colorimetric intent ----------------------- 2.0 Major version bump ----------------------- lcms2-2.12rc1/install-sh0000755000175000017500000003452313775114656014130 0ustar martimarti#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: lcms2-2.12rc1/configure.ac0000644000175000017500000002454013775114656014410 0ustar martimarti# # LittleCMS 2 configure script # AC_PREREQ(2.60) # # Set the package name and version # AC_INIT(lcms2,2.12) # Specify directory where m4 macros may be found. AC_CONFIG_MACRO_DIR([m4]) # # Libtool library revision control info # LIBRARY_CURRENT=2 LIBRARY_REVISION=12 LIBRARY_AGE=0 AC_SUBST(LIBRARY_CURRENT)dnl AC_SUBST(LIBRARY_REVISION)dnl AC_SUBST(LIBRARY_AGE)dnl # Obtain system type by running config.guess AC_CANONICAL_HOST AM_INIT_AUTOMAKE([foreign 1.9 tar-ustar no-define dist-zip subdir-objects]) # Check for programs AC_PROG_CC_STDC AC_PROG_CPP AC_PROG_CXX #AM_PROG_LD #AC_SUBST(LD) #AC_PROG_INSTALL #AC_PROG_MAKE_SET #AC_PROG_LN_S # # Tests for Windows # AC_EXEEXT AC_OBJEXT # Configure libtool AC_ENABLE_SHARED AC_ENABLE_STATIC AC_LIBTOOL_WIN32_DLL AC_LIBTOOL_SETUP AC_PROG_LIBTOOL AC_SUBST(LIBTOOL_DEPS) LIB_PLUGINS = '' # Add configure option --enable-maintainer-mode which enables dependency # checking and generation useful to package maintainers. This is made an # option to avoid confusing end users. AM_MAINTAINER_MODE # If the C compiler supports the keyword inline, do nothing. Otherwise # define inline to __inline__ or __inline if it accepts one of those, # otherwise define inline to be empty. AC_C_INLINE AC_SUBST(inline) # Check if the C compiler supports the "visibility" function attribute # If supported, defines HAVE_FUNC_ATTRIBUTE_VISIBILITY AX_GCC_FUNC_ATTRIBUTE(visibility) # Check if the compiler supports "-fvisibility=hidden" and if yes, add it to CFLAGS # This means that symbols that are not marked explicitly for export (CMSAPI) # will not be reachable in the shared library. AX_APPEND_COMPILE_FLAGS(["-fvisibility=hidden"]) # If words are stored with the most significant byte first (like # Motorola and SPARC CPUs), define `WORDS_BIGENDIAN'. AC_C_BIGENDIAN # Point to JPEG installed in DIR or disable JPEG with --without-jpeg. AC_ARG_WITH(jpeg, AS_HELP_STRING([--with-jpeg=DIR],[use jpeg installed in DIR]), [ if [ test "x$withval" = "xno" ]; then [with_jpeg='no'] else if [ test "x$withval" != "xyes" ]; then with_jpeg=$withval JPEG_DIR=$withval CPPFLAGS="$CPPFLAGS -I$JPEG_DIR/include" LDFLAGS="$LDFLAGS -L$JPEG_DIR/lib" fi [with_jpeg='yes'] fi ], [with_jpeg='yes']) # Point to TIFF installed in DIR or disable TIFF with --without-tiff. AC_ARG_WITH(tiff, AS_HELP_STRING([--with-tiff=DIR], [use tiff installed in DIR]), [ if [ test "x$withval" = "xno" ]; then [with_tiff='no'] else if [ test "x$withval" != "xyes" ]; then with_tiff=$withval TIFF_DIR=$withval CPPFLAGS="$CPPFLAGS -I$TIFF_DIR/include" LDFLAGS="$LDFLAGS -L$TIFF_DIR/lib" fi [with_tiff='yes'] fi ], [with_tiff='yes']) # Disable ZLIB AC_ARG_WITH(zlib, [ --without-zlib disable ZLIB support], [with_zlib=$withval], [with_zlib='yes']) #fast_float plugin: AC_ARG_WITH(fastfloat, AS_HELP_STRING([--with-fastfloat], [build and install fast_float plugin, use only if GPL 3.0 is acceptable]), [ with_fastfloat='yes' LIB_PLUGINS="$LIB_PLUGINS -llcms2_fast_float" ], [ with_fastfloat='no' ]) # # Determine POSIX threads settings # # Enable support for POSIX thread APIs AC_ARG_WITH(threads, AS_HELP_STRING([--without-threads], [disable POSIX threads API support]), [with_threads=$withval], [with_threads='yes']) have_threads=no if test "$with_threads" != 'no' then ACX_PTHREAD() if test "$acx_pthread_ok" = yes then have_threads=yes DEF_THREAD="$PTHREAD_CFLAGS" CFLAGS="$CFLAGS $DEF_THREAD" CXXFLAGS="$CXXFLAGS $DEF_THREAD" if test "$CC" != "$PTHREAD_CC" then AC_MSG_WARN([Replacing compiler $CC with compiler $PTHREAD_CC to support pthreads.]) CC="$PTHREAD_CC" fi if test "$CXX" != "$PTHREAD_CXX" then AC_MSG_WARN([Replacing compiler $CXX with compiler $PTHREAD_CXX to support pthreads.]) CXX="$PTHREAD_CXX" fi fi fi # # Find math library # LIB_MATH='' AC_CHECK_LIB(m,sqrt,LIB_MATH="-lm",,) LIBS="$LIB_MATH $LIBS" AC_SUBST(LIB_MATH) # # Find Posix threads library # LIB_THREAD='' if test "$with_threads" != 'no' && test "$have_threads" = 'yes' then for lib in pthread pthreads do if test "x$PTHREAD_LIBS" = "x" ; then AC_CHECK_LIB([$lib],pthread_mutex_lock,[PTHREAD_LIBS=-l$lib],,) fi done LIB_THREAD="$PTHREAD_LIBS" LIBS="$LIBS $LIB_THREAD" AC_DEFINE(HasTHREADS,1,[Define if you have pthreads library]) else AC_DEFINE(HasTHREADS,0,[Define if you don't have pthreads library]) fi AC_SUBST(LIB_THREAD) # # Check for JPEG # have_jpeg='no' LIB_JPEG='' if test ! "$with_jpeg" = 'no' then AC_MSG_CHECKING([for JPEG support]) AC_MSG_RESULT() failed=0; passed=0; AC_CHECK_HEADER(jconfig.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_HEADER(jerror.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_HEADER(jmorecfg.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`,[#include ]) AC_CHECK_HEADER(jpeglib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_LIB(jpeg,jpeg_read_header,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) # Test for compatible JPEG library if test ! "$ac_cv_jpeg_version_ok" = 'yes' ; then AC_CACHE_CHECK(for JPEG library is version 6b or later, ac_cv_jpeg_version_ok, [AC_TRY_COMPILE( #include #include #include , changequote(<<, >>)dnl << #if JPEG_LIB_VERSION < 62 #error IJG JPEG library must be version 6b or newer! #endif return 0; >>, changequote([, ])dnl ac_cv_jpeg_version_ok='yes', ac_cv_jpeg_version_ok='no')]) if test "$ac_cv_jpeg_version_ok" = 'yes' ; then AC_MSG_RESULT(yes) passed=`expr $passed + 1` else AC_MSG_RESULT(no) failed=`expr $failed + 1` fi fi AC_MSG_CHECKING(if JPEG package is complete) if test $passed -gt 0 then if test $failed -gt 0 then AC_MSG_RESULT(no -- some components failed test) have_jpeg='no (failed tests)' else LIB_JPEG='-ljpeg' LIBS="$LIB_JPEG $LIBS" AC_DEFINE(HasJPEG,1,Define if you have JPEG library) AC_MSG_RESULT(yes) have_jpeg='yes' fi else AC_MSG_RESULT(no) fi fi AM_CONDITIONAL(HasJPEG, test "$have_jpeg" = 'yes') AC_SUBST(LIB_JPEG) # # Check for ZLIB # have_zlib='no' dnl TIFF may require zlib so enable zlib check if TIFF is requested if test ! "$with_zlib" = 'no' || test ! "$with_tiff" = 'no' then LIB_ZLIB='' AC_MSG_CHECKING(for ZLIB support ) AC_MSG_RESULT() failed=0; passed=0; AC_CHECK_HEADER(zconf.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_HEADER(zlib.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_LIB(z,compress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(z,uncompress,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(z,deflate,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(z,inflate,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(z,gzseek,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(z,gztell,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_MSG_CHECKING(if ZLIB package is complete) if test $passed -gt 0 then if test $failed -gt 0 then AC_MSG_RESULT(no -- some components failed test) have_zlib='no (failed tests)' else LIB_ZLIB='-lz' LIBS="$LIB_ZLIB $LIBS" AC_DEFINE(HasZLIB,1,Define if you have zlib compression library) AC_MSG_RESULT(yes) have_zlib='yes' fi else AC_MSG_RESULT(no) fi fi AM_CONDITIONAL(HasZLIB, test "$have_zlib" = 'yes') AC_SUBST(LIB_ZLIB) # # Check for TIFF # have_tiff='no' LIB_TIFF='' if test ! "$with_tiff" = 'no' then AC_MSG_CHECKING([for TIFF support]) AC_MSG_RESULT() failed=0; passed=0; AC_CHECK_HEADER(tiff.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_HEADER(tiffio.h,passed=`expr $passed + 1`,failed=`expr $failed + 1`) AC_CHECK_LIB(tiff,TIFFOpen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(tiff,TIFFClientOpen,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_CHECK_LIB(tiff,TIFFIsByteSwapped,passed=`expr $passed + 1`,failed=`expr $failed + 1`,) AC_MSG_CHECKING(if TIFF package is complete) if test $passed -gt 0 then if test $failed -gt 0 then AC_MSG_RESULT(no -- some components failed test) have_tiff='no (failed tests)' else LIB_TIFF='-ltiff' LIBS="$LIB_TIFF $LIBS" AC_DEFINE(HasTIFF,1,Define if you have TIFF library) AC_MSG_RESULT(yes) have_tiff='yes' AC_CHECK_HEADERS(tiffconf.h) fi else AC_MSG_RESULT(no) fi fi AM_CONDITIONAL(HasTIFF, test "$have_tiff" = 'yes') AC_SUBST(LIB_TIFF) # Libraries that the LCMS library depends on LCMS_LIB_DEPLIBS="$LIB_MATH $LIB_THREAD" LCMS_LIB_DEPLIBS=`echo $LCMS_LIB_DEPLIBS | sed -e 's/ */ /g'` AC_SUBST(LCMS_LIB_DEPLIBS) echo "LIB_PLUGINS: $LIB_PLUGINS" AC_SUBST(LIB_PLUGINS) # Libraries that the jpegicc program depends on JPEGICC_DEPLIBS="$LIB_JPEG $LIB_MATH $LIB_THREAD" JPEGICC_DEPLIBS=`echo $JPEGICC_DEPLIBS | sed -e 's/ */ /g'` AC_SUBST(JPEGICC_DEPLIBS) # Libraries that the tifficc program depends on TIFFICC_DEPLIBS="$LIB_TIFF $LIB_JPEG $LIB_ZLIB $LIB_MATH $LIB_THREAD" TIFFICC_DEPLIBS=`echo $TIFFICC_DEPLIBS | sed -e 's/ */ /g'` AC_SUBST(TIFFICC_DEPLIBS) LIBS='' # # Perform substitutions # AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([lcms2.pc]) AC_CONFIG_FILES([include/Makefile]) AC_CONFIG_FILES([src/Makefile]) AC_CONFIG_FILES([utils/tificc/Makefile]) AC_CONFIG_FILES([utils/transicc/Makefile]) AC_CONFIG_FILES([utils/linkicc/Makefile]) AC_CONFIG_FILES([utils/jpgicc/Makefile]) AC_CONFIG_FILES([utils/psicc/Makefile]) AC_CONFIG_FILES([testbed/Makefile]) AM_CONDITIONAL([COND_FASTFLOAT], [test "x$with_fastfloat" = "xyes" ]) AC_CONFIG_FILES([plugins/Makefile]) AC_CONFIG_FILES([plugins/fast_float/Makefile]) AC_CONFIG_FILES([plugins/fast_float/src/Makefile]) AC_CONFIG_FILES([plugins/fast_float/include/Makefile]) AC_CONFIG_FILES([plugins/fast_float/testbed/Makefile]) AC_OUTPUT lcms2-2.12rc1/config.sub0000755000175000017500000010622313775114656014104 0ustar martimarti#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-12-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: lcms2-2.12rc1/lcms2.pc.in0000644000175000017500000000040713775114656014067 0ustar martimartiprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @PACKAGE@ Description: LCMS Color Management Library Version: @VERSION@ Libs: -L${libdir} -llcms2 @LIB_PLUGINS@ Libs.private: @LIB_MATH@ @LIB_THREAD@ Cflags: -I${includedir} lcms2-2.12rc1/Makefile.in0000644000175000017500000007135513775114656014175 0ustar martimarti# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Top-Level Makefile for building LittleCMS 2 # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = lcms2.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = src include utils/tificc utils/transicc utils/linkicc \ utils/jpgicc utils/psicc testbed plugins am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/lcms2.pc.in AUTHORS \ COPYING ChangeLog INSTALL compile config.guess config.sub \ depcomp install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip GZIP_ENV = --best DIST_TARGETS = dist-gzip dist-zip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGICC_DEPLIBS = @JPEGICC_DEPLIBS@ LCMS_LIB_DEPLIBS = @LCMS_LIB_DEPLIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBRARY_AGE = @LIBRARY_AGE@ LIBRARY_CURRENT = @LIBRARY_CURRENT@ LIBRARY_REVISION = @LIBRARY_REVISION@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_JPEG = @LIB_JPEG@ LIB_MATH = @LIB_MATH@ LIB_PLUGINS = @LIB_PLUGINS@ LIB_THREAD = @LIB_THREAD@ LIB_TIFF = @LIB_TIFF@ LIB_ZLIB = @LIB_ZLIB@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFFICC_DEPLIBS = @TIFFICC_DEPLIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ acx_pthread_config = @acx_pthread_config@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ inline = @inline@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Don't require all the GNU mandated files AUTOMAKE_OPTIONS = 1.7.2 dist-zip foreign ACLOCAL_AMFLAGS = -I m4 @COND_FASTFLOAT_TRUE@USER_PLUGINS = plugins # Directories containing Makefiles to 'make' SUBDIRS = src include utils/tificc utils/transicc utils/linkicc utils/jpgicc utils/psicc testbed $(USER_PLUGINS) # Additional files to distribute EXTRA_DIST = AUTHORS COPYING ChangeLog doc Projects include bin Lib INSTALL README.1ST autogen.sh lcms2.pc.in plugins pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = lcms2.pc all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): lcms2.pc: $(top_builddir)/config.status $(srcdir)/lcms2.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool clean-local cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA .PRECIOUS: Makefile # Make sure get rid of VC stuff... clean-local: rm -rf autom4te.cache find Projects -name "*.user" | xargs rm -rf find Projects -name "Release" | xargs rm -rf find Projects -name "Debug" | xargs rm -rf find Projects -name "*.aps" | xargs rm -rf find Projects -name "*.suo" | xargs rm -rf find Projects -name "*.log" | xargs rm -rf find Projects -name "*.sdf" | xargs rm -rf find Projects -name "*.opensdf" | xargs rm -rf find Projects -name "ipch" | xargs rm -rf # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcms2-2.12rc1/compile0000644000175000017500000001624513775114656013500 0ustar martimarti#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End:

oAnBlDkEiFiFhEgEgDgDgDgDgDgDgD]gr| "#ە%ϓ2 ŏ?JT$]+e1|m6zt:w|=u@tBrEqFoHnHmHlHkGkGkFkFkFkFkFkF_iu~՚!ʘ0 <GQ$Z+b1j6q:}y>{AyDwFuHtJrKqKpJpIoHoGnGnGnGnGnGalwݚОŜ.:EO#X*`1h6o:v>B~E|HzJxL|wLzvMxuLxtKysJzrIzrIzrIzrIzrIzrIcny֟ ˢ+8CM"V)^0f6m:t?|BFI|Kx~Mu|Ns{NqzNqyLrxKtwJtvJtvJtvJtvJtvJep|ٚУŧ)6AK T(\/d5k:r?zC}FyIuLrNnOlOjOj~Ml}Lm|Kn{Kn{Kn{Kn{Kn{Kgsԝ˦&4 ?IR'Z.b4i9p>{xBwFsIoLkNhOeOcOcNeMgLgKgKgKgKgKiv٘ϡŪ#1 =GP%X,`3g8zn=uuAp~ElHhKdM`O^O\O[N]M_L`K`K`K`K`Kly Ԝʥ . :DM#V*~]0xe6sl;ns?j|CeGaI]LYMVNTMTLULXKXKXKXKXKXKp } ڗϡŪ+7AK }S'w[-qb3li8hq|HvQ#pY)k`.fg3ao7\w;X>SAODKEHFFEFEEEGFHFHFHFHFHFyږϡū !/ {;tEnNiV$d^)_e-Zm1Vu5Q8M;I=E>C?A?@>??>@?@?@?@?@?@Ԝʧ {+t7 mAgJbS]["Xc&Tk*Os-K}0G҉2CЗ4@Υ6>̷6<6<5:7888989898989ڗΣĮ|u*n4 h>cG^PYWT_Pg!Lo$Hy&D)A*=+;,9,8+6-4/3/3/3/3/3/ҟȪ}un'h0b9 ]AYIUPQXM`IhDq@| =":#8#6#5"4!1$0$0$0$0$0$֛˧²~t mg"a+[3 W; SBPILPHWD^@g6H3S 1^ .h ,r)|'%$""   9+<*>+>.<3<<:G7Q 5\ 2f0p-z+)'&%$$##"!!;*?)A)A,@2@;>D =O :Z 7d5n2x0.,+*)((''&$#" =(A'C'D*E0E8CB BL @W=a:k7u5~310/..--,+))&#!     @&D%G%I'J.K6I? HI FTC^@h=r;{97655443210.+(('''''B$H#L#N%Q,Q3O< NF LQJ[GeDoAx?><<;;:98762100/////F#K!P T#X*X1U8TB SMPXMbJlHuF~DCCBA@?>=<:98 8!7"7"7"7"7"I!OTZ"^(_.]5Z> YIVTS_PiNrL{KJIGFEDDCCB!A#@$?%?&?&?&?&?&LSY`!d&e,d2b: _D\PZ[WfUoRxQP O!N"M#L#K$K$J$J$I&H(G)F)F*F*F*F*F*OV]ei$k*k/i6f@ dLaW^b\kZs X|#W$V&U'T(S(R)Q*P*P*O+N,N-M-M.M.M.M.M.QYbin"q'r,q2o< lHhSf]cf ao#_w&^(\)[+Z,Y-X.W/V/V/U/T0T1S1S1S1S1S1S1T\ems v$x(x.v8 sDpOmYjb!gk%es(d{*b-a.`0_1^2]3\3[4[4Z4Y4Y4Y4Y4Y4Y4Y4V_iqw{!}$(}4z@vLsVp_"ng&ko*jw-h/g1e3d4c6b7a7`8_7^7^7]7]7]7]7]7]7Xaktzօ#̄1À>}IySv\"td'ql+os.m{1l3k5i7h9f:e;d;c;b:b:b9a9a9a9a9a9Zcnv}݇Њ Ɖ/;FP|Y"ya'wi+tp/sx2q5o7n9l;kg=g=fzj=zi=zi=zi=zi=zi=^hs|ڊѐƓ*7 BKT!\'d+k/|r3zz6y9w<u>|t@yrAvqBtpAso@sn?tn?tm>tm>tm>tm>tm>`ju~ Վ̔'5 @IR Z&b+i/p3x7~:||=xz?uyArwCovCmuCmtBmsAmr@nq?nq?nq?nq?nq?bmxڊВǘ%2 =GPX%`+g/n3}v7y~:v>r@oBk}Ci{DgzDfyCfxBgwAhv@hv@hv@hv@hv@dp { ֎̕œ"0;ENV$^*e/|l3wt7s|:o=l@hBeDbD`D_C_~B`}Ab{@b{@b{@b{@b{@f s ~ Ғș -9CLT#\(zc-vj2qr6mz9i=e?aB^C[DYDXCXBYA[A[A[A[A[Ai v ٍΖÞ*6 @J~R yZ&ta+oh0kp4gx7c;^>Z@WBTBRBQBQAQ@S@S@S@S@S@mzӒɛ&3 >}GwPrX#m_(if,en1`v4\8X;T=P?M?K?J?J?I>K>K>K>K>K>rڌϗĠ!/}: vDqMlUg]$bd(^k,Zs0U}3Q6M8J:F;D;D:C:B;C;C;C;C;C;wԒʝ|*u6 o@jJeR`Z\b#Wi&Sq*O{-K0G2D3A4?4>4=4<5;6;6;6;6;6~ۍϙţxr$m1g< bF]OYWU_QgMo"Iy%EDŽ(AƑ*>Ġ+<°,:,9+8,7.6/6/6/6/6/ԕɠ|pje,`7[A VJRSN[KcGlCv@ہ<ڎ!9؞"7֮"5"4"3#2$1&1&1&1&1&ڐ͝ħtke_(Y2U;QD NM JUF]Ce@n[ :d7n3z0.,*)((((((ʣ~pd\ VQL$H,D3A:>@;G8O4W1` -k *w & $ " !      ītg[TN JEA#>);/855;2A.H+Q&Z"eswj^RKFA =:64#1(/.,3)9%@ HQ\hu {m`TJC>962 /,*(!%%"*06>G Q[envvvvv3,5+6,4/15.=+G&R"]hr|    5*7)8*7-433<0E+P'[#f!py            7)9(:(:+818:5C1N,Y)c'm%w # !              9'<%=&=(=.=7;A8K3V0` .j +t )} ( ' & % % $ $ # # !          <%?#A#A%C,C4A>>H:R7] 5g 2p 1y / . - , , + + * ) ( ' % " !      >#B!E G#J*J2H:EDAO >Y |=<<;;98766543222222EJNTX%X,V3R<OF MQ J\ HgFpEyDCBAA@??>>=<;::9999HNSZ^#_)]/Y7VATM RY OcNlLtK|KJIIHGFEEDCBA A A A A A KQX_c!e&d+a3^=\I YTX^VgToSwRQPOONM L K K!J"I#H$H$G$G$G$G$NU]dhj"j'h-f8dD aO_Z]c\kZsYzX W!V"U#T$S%R%Q%Q%P&O'N'N'N'N'N'N'PXahloo!n'm4k@ iKfVd_bg`o_v!^~#]$\&['Z(Y)W*V*V*U*T*T+S*S*S*S*S*SZdkprsu"t1r= oHmRj[hcfk er#cz%b'a)`*_,^-\-[.Z.Y.Y.X-X-W-W-W-W-U]gnsvw zz.x: uErOpXn`lh!jo$iv'g~)f+e-c.b0a0_1^1^1]0\0\/\/\/\/\/W` iqvy} ǀ+~7 {BxLuUs]qe"ol%ms(l{*j-i/h1f2e3d4~b4}b3|a2{a2{`1{`1{`1{`1{`1Yb lsy ~͂…(5@}J{Sx[vb"tj&rq)px+o.m0l2~k4{i5yh6wg6vf5ue4ue3td3td3td3td3td3Zd n v |Ђdž&3> HQ}Y{`"yg&wn)uv,s~/~r1{q4xo6un7rl7pk7oj7oi6oi5nh4oh4oh4oh4oh4\ g q yր̆‹#1< ENW^"~e&|l)zt,{y|/xw2uv5qt7ns8lq9jp9io8in7hm6il5il5il5il5il5^ i s |҄Ɋ .: CLT\!c%}j)yq-u~z0r}3n{5kz7hx9ev:cu:bt9bs8br7bq6cq6cq6cq6cq6a lvψŎ ,7 AJRZ {a%wh)so,pw/l2h5e7b~9_}:]{:\z9[y8\x7\w7\v6\v6\v6\v6cozքˌ)5?HPzXu_#qf'mn+ju.f~2b4^7[8X9V:U9U~8U}7U|7U|6U|6U|6U|6fs~҈Ǒ%2< ~FyNtVo]!ke%gl)ct-`}0\3X5T7Q8O8N8N7N6N6N6N6N6N6jwڃ΍Ö!.~9 xCrLnTi[ec"aj&]r*Y{-U0Q2N4K5H5G5G4G4F4F4F4F4F4o|ԉɓ}*v6q@ lIgQcY_`[h"Wp%Sy(O+K.G/D0B1A0@0@1?1?1?1?1?1u܃Ϗřyt%o2j< eF`N\VX^TePm Lv#I%E(B)?*<+;*;*:+9,9,9,9,9,|Պʖ~p kf,a7]A YJ URQ[McJkFtC? <"9#7#6"6"5$3%3%3%3%3%݅ϒŝwh_\$X0T;PEMN IV F_Cg@q=|:Έ7͗4˧2ɻ110.....ԎɚpbXTP)L4I>FGCP@Y=b :k 8v520.ߵ,+*)))))͘ãvh[S OJ#F,C5@==E:N7W4`1k.w , ) ( & % $ # " " " " ơzm`TMHD@$=,:37:4A1I-R*\'h#t ~pdWMFA =96!4(1..4+:'B#KUao     tgZOE>95 2/,*!'&$,!29BL X fuxj]QG>62.+' %" #)0 8ANZfq}.+0*/+,.'4$<FQ\f p y0*2)1)/,*1):%D OZdnw        2(4&4'2*//.8,B'L!Wakt}   5%7$7$5&5-562?.I)T%^!hqz       8#:!;!:#<*<39<6F1P-[*e'n%w%~$$#""!!     :!=>@!B'B0@9=B9L5W2a/k.s-{-,,++*)('&%% $ # # # # # # =ACGI%I,G5D>@Hu =| = < < < ; : : 98876554444DINTW W%T,P4M>KJIUH_ Gh Fp FwEEDDCBAA@?>==<<<<<GLSY\\!Z&W.U9TERP QZ PcOkNsMzLKKJIHGFFEDCCBBBBJOW]aa_]']4\A[L YVW_VgUnTvS}RQPPONLLKJIIHHHHLR [aeecd"e0d=bH `R^[]c[kZrYyXWVUT S!R!Q!P!O"N"N"M"M"M"M"OV _ehh h kk-j9hD fNdWc_ag`n^u]}\ [!Z"Y#X$V%U%U%T%S%S$R$R$R$R$QY b h k mn pq*p6nA lKjTh\gdekdrby a"`#_%^&\'[(Z(Y(~X'}W'|W&|W&|W&|W&|W&S [ d j nrsvw'u4s> qHoQmYlajhhogv!e~#d%c'b(~a*{_*y^*x]*w\*v\)v[(u[(u[(u[(u[(U ^g mrvxz{${1y< vFtOrWp^nemlkt"j|$i'}g)zf*we,uc,rb-qa,p`+p`+p_*o_)o_)o_)o_)W `iov{}!/~:{D yLwUu\scqj pq"|ny%ym(vl*tk,qi-nh.lg.ke.je-jd,jc+jc+jc+jc+jc+Yclsz ,8A ~J|RzZxa}wh zuo#vtw&sr(pq+no-kn.hm/fk/ej/di.dh-dg,dg,dg,dg,dg,[fnw~ *5? HPX{~_x|f t{m#qyu&nx~)kv+hu-es/br0`p0^o0^n/^m.^l-^l-^l-^l-^l-]hq{Ȃ'3= F~NzVv]rdok#ks&h~|(e|+b{-^z/\x0Yv0Xt0Xs/Xr.Xq.Xq-Xq-Xq-Xq-`kuŇ$0; ~DyLtTp[mbii!fq%bz'_*[,X.U~/S|0Q{0Qy/Qw.Qv-Rv-Rv-Rv-Rv-coz̄ -~8xA sJoRkYg`ch `o#\x&Y(U+R-O.L.K.K-J~-K}-K|,K|,K|,K|,hsȉ })w5r? mGiOeWa^]fZm Vv#R&O(K*H+F,D+D+D+D+D+D+D+D+myυďzu%p1k;gD bM^U[\WdSkPtL~!H$E&B'@'>'>&='='='='='='sրʌ|qlh,c7_A[I XQTYPaMiIrF|B? @;"9,754>2G0Q-[+f(r&$"!àwi\PE=963"1*.2+9(B%K"V bp{m`TI?830-*'%%,!2:DO\ k {qdWLB91-)& # $*2 ;FTbsugZND;2+&"  ")2<IWfs)*))'*#-3;D OZdnv~+(,'*(&+ 09BM X bkt|.&.%-%)(&.%7 @JU_ h qy0$1"0"-$-++4)=#GR\env} 3!443!4(310:+D&N"Xbksz6879;&:-764@/J+T(^&g$p$w#~"""!  9;<@A"A*>2;;6E3P0Z/d.l-t-|,,,,++**)))('' & & & & <?BFHG%D-@6=@9K8V7`7h7p7w7~6666554322 1 0 0 / / / / ?CGLNM I'E0B:BFBQA[Ad@k@s@y ? ? > > = = < ; : : 9877777BFMRSRNJ(K5LAKLJVJ_ Ig Hn Gu G| FFEEDCBA@??>====EI Q VXVPR#T1T=THRRQ[ Pc OjNqNxMLKKJIHGFEDDCCCCHMU Z [ YW Z\-\9[DZN XW W_VfUmTtS{RQPPNMLKJJIHHHHJ QY ]^`_ ac)c5a@`J ^S ][\c[jYpXwWVUTSRQPO~N~N}M}M}M}ML T\`dfegi&h2g=eG dP bXa_`f^m]t\|[ZYX~W{U yT xSwSwRvRvQvQvQNW_chkjln#n/l:kD iM gUf]ddcjbqay`~^{] y\!w["tZ"sX"rX"qW!qV pV pV pV pV PZagmppqr r-q8pB nK lSjZiaghfo}ewzdxc ub!sa#p_$n^$l]$l\#k[#kZ"kY!kY!kY!kY!R\dkqtuv ww*v6t?rH qPoXm_}lezkmwjtth}rg!of#me$jd%hb&fa&f`%e_$e^#e]"e]"e]"e]"T^fntxz{||({3y=wF uNtV{r]xqcupkrnrom{ll"ik$gj%dh&bg'`e'`d&`c%`b$`b#`b#`b#`b#Vajry}%1~;|D ~{LzyTvx[svbouimtpjry gq"dp$ao&^m'\k'Zj'Zi'Zh&Zg%Zf$Zf$Zf$Zf$Ydmv}".9}B yJ tRq~Ym|`j{ggzndxvaw"^v$[t&Xr'Vq'To'Tm'Tl&Tk%Tj$Tj$Tj$Tj$]gr{+}6x?sH oPlWh^eebl^u[~~!X|#Uz%Ry&Pw'Nu'Ms&Nr&Nq%Np$Np$Np$Np$`kwƀ |(w3r=nE jMfUc\_c\jYsU|R!O#L%I~%H|%Gz%Gy$Gw$Gv$Gv$Gv$Gv$eq|Åzu$p0l:hCdK `S]ZYaViSqO{LI!F"C#A#A"A"@"@~"@~"@~"@~"jwʂzrmi,e7a@]H ZP VWS_PgLoIyFB@=;;::::::p~ʼnvjd`&]2Y<VDSMOU L\ IdFmCw@=:865544444yˆtcZVS,P6M@KHHPEYBa ?j &H$S#_!lzߞݲtfYMB7-* '% #( 09CO\jz xj]QF<2)%" "*2< HUev}naTI?5-% "*3?N^pseXKA7/'   !+6DUfv$)#(),19CMXaks{&'%&"&).7 AJU_hqx)%(#%# %,5> GR\enu|,"+ ( #!#)!2;EO Xbjry..,*+&)/%8AKU^go v | 11/12#0+-3(=#FQZcksy454887&3//8*B'L%V$`#h#o$v$}$$$$$##"!!!!!    78;>> = < < ; : 9 8 8 8 8 @ DK N M GEIK-L9LDLMKVJ^IeIl Hr Hy G F F E DCBA@??>>>>C HORQQN QS(T5T@SIRRQZPa Oh No Nu M}LKKJIHFFEDCCCCELRUXYVXZ%[1Z<YFXOWW V^ Ue TkSrRyQQPON~L|KzJyJxIxHwHwHwHGOUZ^_]^`!a.`9_C^L\T [[ ZbYhXoWvVU}T{SxRvQtPsOrNrMqMqLqLqLIRX^ceccef+e6d@cIaQ `X __^f]m~\t{[|yZvYtXrWpUnTmSlRkQkQkPkPkPJT[cgjii jj(j4i=gFfN eU c\}bczajx`qu_zs^p]n\l[jYhXgWfVfUfUfTfTfTMW_flnnmno&n1m;lDjL ~iS zhZwgaufhreopdwmckbh`f_d^b\a[aZ`Y`Y`X`X`XPZbjprsrss#s/r9qA|oI ynQ umXrk_pjfmimjhuhgefce`d^b\a[_[^[][][\[\[\S]fntwwwxx x,w6|v?wtG tsO qrVmq]kpdhokemsbl}`k]j[hXgWeVdVbVaV`V`V`V`V`jrx|||}}}){|4w{=szEoyM lxTiw[fubcti`sq]r{ZpWoUnSlQjPiPgPfPePePePeYdow} z&v1q;mCjK f~R c}Y`|`]{hZypWxyTwQuOtLrKpJnJmJkJjJjJjJj]is|yt#p.l8hAdIaP ^W [^XfUnRwN~K|I{FyDwCuCsCrCqCpCpCpbnyzrmi+e5a>^F[N XU U\RdOlLuHEC@>=}={=y=x=w=w=whutk ea&^1Z:WCTKQRNZ Kb HjEsB~?=:97777777o|pc\X U,R6P?MGJOGWE_ Bg ?q <|97532210000wDŽ}n_S NK%I0F9DBBK@S=[;d8n6y 3 1 / - , , + * ***̀Œzk[LB@='<2:;8D6M4V2_0i.u,)(&%%$####NJsdVH;31/&-0,9+C)M(W&b$n"} zk]PC7,# !"+5?KWdrӃҖЪ pcVI>3)  '0: F TcsuhZNB8.%  !)4@O_qzl^QF;2)!  ",8GYlpbUH>4+#  $0?Qdv'''*/6@JU_hpx~!%$%',4>GR\fmu{##!!!#* 2;EOYbjqx~% #'/ 8AKU_gnuz)'"! $,4= GQ[cjqw},*&(( %( 09CMV _ g n t z /--/.+#&+!3=HR[cjpv|21 4 540+$$,"7$B%M&V'^(f(l(s(y(((((''&%%$$####5 49 ; 94,+%.20=2H2R3Z3b3h3o3u3{222210/..--,+++8 9?@=526 9-;9CDCA= @B(D4D?DIDQDYC`CgBmBtB{AA@? > = < ; ; : 9 9 9 9 =BGILKGHK$L0L;LEKNKUJ]IcIjHpHw G F F E D C B }A {@ z? y> y> y> y> >FKPSSNPR S-S8RARJQRPYO`Nf Nm Mt L| L K }J{IxHvGuFtEsDrCrCrCrCAINUYZUVXY*Y5X>WGVOUVT]Sc Sj Rq |Qy zPxPvOsNqLoKnJmIlHlHlGlGlGCLSZ^_\\ ]^&^2];\D[LZSYZ }Xa {Wg xVn vVvtUqToSmRkQiOhNgMfLfLfKfKfKFOW^cdaabc$b/b9aA`I}_Qz^X w]^ u\e r[lpZtnY}lXiWgVeUcTbRaQaPaPaOaOaOIR[bghfefg!g,f6e?{dGxcNubU ra\ o`c m_jk_ri^{f]d\a[_Y]X\V\U[T[T[S[S[SLU_fklkjkkk*~k4zj=viEshLpgS mfZ jea hdhfcpcbyaa^`\_Z^X\WZVYVXVWVWVWVWOYcjopono o}p'yo1uo:qnBnmJklQ hkX fj_ cifahn^gw[fYeWdTbS`Q_Q]Q\Q[Q[Q[Q[R]gotssst }txu$tt/pt8ls@irHfrOcqV ap] ^oe[nlYmuVkSjQiOgMeKdKbLaL`L_L_L_Ublsxwwx~ywzrz!nz,kz6gy>dyFaxM^wT [v[ Yuc VtkSssPq~NpKnImGkFiFhFfFeFdFdFdZgpx|{|~xplh)e3a<^D[KY~RV}Y S|a P{iMzrKx|HwEuCtAr@p@n@l@k@j@j@j`lv~}rj ea%^/[9XAUHRPPWM_ Jg GpEzB?}=|;z:x:v:t:r:q:q:qfr|{nc]Y V+S5Q=NELMIUG\De An >x <975444|3{3z3z3zmyyj^T PM%K0H9FADIBQ?Y=b;k8v5 3 1 / . . - - - - - vugZMFC@)?3=<;D9L7U5^3h1s/,*)'''&&&&reVI<75!3*240</E-N,X*b(n&{$"!ˆ|oaRD8, )' %)$2";!EOZftvhZL?4)$-7BN [ i yŊÝ|n`RF:/% '2>KZiz׍ԡҶseWK?4+!  +8FVhzxi\OC8.% $1@Rdw}n`RF;1( )9K_q&% %(+4=HS]fnu{#""$)2;EPZckqw}! '/8BLW`gnty~  %,4>HS\cjpv{"!)0:DNW_flrw|%"$, 5?IS[bhnty(% % &#&/ 9 C MV^dkqv|+ (+ , )"'3>HQY`g m s y  .-21, $ ""&.(9)C*L*U+\+c+i+o+u,|++++*)(('&&%%%13762/* .1)243>4H4P5X5_5e5k4r4x44433210/.----38;<>;68:$<0<:=D=L=T=[=by=w<v;t:t9s9s9s98@EKNMHHIK(K3K<KEJMITI[HaHhGn~Gv|F~yFwE uD sC qB pA n@ m? m> m> l= l= ;CJQTSNN PQ%Q0Q9PBPJOQNX}N^{MeyLlwLsuK| sK pJ nI lH jG iE hD gC gC fB fB fB >FPVZXTTUV"V-V7U?UG|TNySUwR\uRbsQiqPq nPy lO jN hM fLdKcJbIaH aG aF aF aF AJT[^]ZYZZ[*[4}Z=zYDwXKtXRqWYoV`mUg kUo iTw gT eSbR`Q^O]N\M\L\K[J[J[JDNX_a`^]^__'{_1x^:t^Bq]Io\Pl[Wj[^hZe fYm dYu aX _W]V[UYSXRWPWOWNWNWMWMGR\cedbbb czc$vc/sc8ob?laGjaNg`Ue`\c_c a^k ^]s \]~Z[XZVYTWRVRTRSRRRQRQRQJV`ghgffgzhuh!qh,ng5kg=hgEefLceS`eZ^da \ci Ybr Wa|U`R_P]N\MZLYLWMVMUMUMUN[dkkkjk|lulpmlm)im3fl;clC`lJ^kQ[jXYi_ Vhg Tgp RfzOeMdKbIaG_G]G\G[GZGZGZS_ionnn~ovqorjrfr&cr0`r9^rA[qHXqOVpVTo^Qne Omn Llx IkGjEhCfBeAcAaB`B_B_B_Xdmrrrryupvix dx`y#]y-Zy6Xy>UxFSwMPwTNv\KudItl Fsv Dr Ap?o=my ;x 9v 8t 6r 6q 6n 6m 6l 6k 6k epy{zz|rh\U QN%L/I7G?EGCOAW?_ ;8#7,553=2E0N/W-a+l)x'%$"!"!!!!}wj^QE8/-+$*-(5'>%G$P"[!fssg[NA5) "+4=GR^k{ }pdWI<1&   '1;FR`oyk]OC7,"",7CQ`qʄȗƫpbTH<1'  &1>N_qߛݬ۾ugYL@5+" +9J]ozk]PC8.%  $4EXk}$ ##$)1;FR\dkqw|!  !&/9CNX`gmsx}$,5@KT]djouz~!)2<FPX_fkqv{  %.7AKS[bgmrw|   (2<ENV]cinsx~!   !+6@IQY_e k p v { $ #!  $/:CLT[agmrx&&)% * 5!>"G"O#V#]#c#i$o$u$|$$$##"! ),.--*$ &)%+0,:,C-K-R-Y-_.e.k.r.y.---,+*)(~(}'}'}'+12896103 4+565?6G6N6U6\6b6h5o5v5~554}3{2z1x0v/u.u.u-u-/5:@B?:9;<'=2=;=C=K=R=Y<_l=j<i;h:g9g8g8g86=GMNLHGHI I+I4I=~ID|HKyHRwGYuG_sGfqFmoFumEkEiDgCeBdAb@b?a>a=a=a=9CLRRQLLMNN(N1{N:xNBuMIsMOqLVoL]mKdkKkiJsgJ}eIcIaH _G ^E \D \C \B[A[A[A<GQVVURQR R}S%yS.vS7sR?pRFnQMkQSiPZgPaeOicOqaO{_N ]M [L ZK XI WH WF WE VE VD VD ?KUYYXVUV |WwW"tW,pW5mW<kVChVJfUQdUXbU_`Tg^To\SyZR XQ VP TO SM RL RJ RI RH RH RH BPY\\\ZZ~[w[r\o\)k[2h[:f[Ac[HaZO_ZV]Y^[YeYXnWWw UW SU QT OS NQ MP MN MM ML ML ML GT]___^^y_r`m`i`&f`0d`8a`?_`F\_MZ_TX^\V^dT]lR\v P[ NZ LY JW HV HT HR HQ HP HP HP LXabccb{csdme hede$ae-^f5\e=ZeDXeKUdSSdZQcbObjMatJ` H_ F^ E\ CZ BY BW CV CU CT CT Q]effffvhnigj bk^k [k*Yk3Wk;TkBRkIPjQNiXLi`JhhGgrEf~ Ce Ac ?b >` =^ =\ =[ =Z =Y =Y Vbiiiijrminap\qXqUq'Sq0Pq8Nq@LqGJpNHpVFo^DngAmp?l|=k ;j 9h 8f 7d 7b 8a 8` 8_ 8_ \gmmmm}noqet[wUx QxNx#Kx-Ix5Hx=FxDDxLBwS@v\>vd;un9tz7r5q3o2m1l1i1h1f1f1fcnqqqqyskwbyW}MHFC)B1@9>A=H;P9Y7~b5}l3|x1{/y-w,v+t+q+o+n+m+mjuvuuvvxi|^SH?=:#9,745<4D2L1U/_-i+u*(&%$}$z$x$w$v$vr{zzz~{rfZOD820/&-.+6*>)F'P&Z$d"q!{zncVK@4) %#"& /7?IS^kywk_SG<1& %-6? J V cqsh\PD9.# !*4>JXfv}qfZL?4)  '1<IXiz|m_QE9.$!,9HYj}ԒӧжrdVI=2( &4DWkwi[MA5+! /?Sh|"!!"%/:EPYagmsx} #,7BMU]djoty~ !)3>HQY`fkpuz~&/9CLT[bglqvz  !*4>GOW]chmrv|  $/8AJQX^dinsx~ (2<DLTZ`ejou{  !, 6 ? G OV\aglry  &1:BJQW]ciou}$$))&"!#,$5%>%F&M&S&Z&_&e&k&r'z'&&&~%|$z#x"w"w!v v $(/330,)+-'.1.:.B.I.P/V/\/b/h/o/w}/{/y.w.u-s,r*p*o)o(n'n')-7;;852 35#5-666>6E6L6S~6Y|6_{6ey6lw6tu6}s5q5o4m3l2j1i0h/h.g-g-,5>AA?<9:;<)<2<:~`=^<];\:\9[8[7[73@IJJIFEE FzF#wG,tG4qG<oFCmFJjFPiEWgE^eEecEmaEv_D]D\CZBX@W?W>V=V<V;V;8DMNNMJIJyKuK qK)nK2kK9iK@gKGeJNcJTaJ\_Jc^Jk\IuZIXHVGUFSDRCQAQ@Q@Q?Q?<IPQQQONzOtOpPlP&iP/fO7dO>aOD_OK^OR\OZZNaYNjWNsUM~SLQKOJNHMGLELDLCLCLCAMSTTTS}RuSoTkTgT$dT,aT4_T;\TB[TIYTPWSXUS_SShRRqPR|NQLOJNIMHKGIGHGGGFGFEQVWXWWxWqXjX fYbY!_Y*\Y2ZY9XY@VYHTYORXVPX^NWfMWpKV{IUGTESDQCOCNCLCKCJCJJUYZ[ZZs[l\e]`^\^Y^'W^0U^7S^>Q^FO^MM^TK]\I]eG\nE[yCZAY@X?V>T=R>Q>P>O>OOZ]]^^|^n`fa`cZcVdSd$Qd-Od5Md<KdCJdKHdRFcZDbcBbl@aw>`<^;]9[8Y8W8V9U9T9TT_`aaaxbkebfZhTi PjMj!Kj*Hj2Gj9EjACjHBjP@iX>iaq>=qE;qM:pU8p^6oh4ns2m0l/j-h-f-d-b-a-`-`ahhhh{ipken[qRsGw@y=y;y"9y+8y26y:5yA4xI2xR1w[/we-vq+u~)s(r'p&n&l&j&h&g&ghlllmxmnoatWwNzC}9 421&/..6,=+E)N(W&b%m#~{!| {yvtrqoopqqqqurju_zT~I?4+ (& %(#0"7!?HR]iw}{zxxwvvv|vryg}[PE;0% (08AKWc q }|{{z}ncXLA7,"  '09CN[hxvk`TI>3)  %.8CP^nsh]QF;0& "+6BQas~rf[NB6+!  (3AQcvʋɢǸ}paSF:/%  #0?QdxufXJ>2( ,=Pdx #-9DMV]djoty}!*5@IRY`fkpuy~'1;EMU\bglquz #-6@HPW]chlqv{  '1:CKRX^chmqv|  ",5=EMTY_dimrx~&/8@HOUZ`ejou{  )2;CJPV\afl r y   #-6>ELRX]ciov~}{zyxx $#!(19AHNTZ_e l s {} { ywusrqppp"+--+'" $%#&,'5'='D'J(P(V~(\|(bz(ix(pv(yt(r(p(o'm&k$j$i#h"h"h!!+24420,,-.(/1/9~/@{/Fy/Mw/Su/Yt/_r/fp/nn/vm/k/i/g.f-d+c*b)a)a(a(%29::863344$|5-y55v5<t5Cr5Ip5Pn5Vm5]k5di5kg5tf5~d5b4`4_3]1\0\/[.[-[-+8=??>;99 }9y:!u:*r:2p;9n:@l:Fj:Mh:Sf:Ze:ac:ia:r_:|]:\9Z9Y7W6V5V3V2U2U21=ACCB?>|>w?s?o?'l?/j?6h?=f?Dd?Jb?Q`?X_?_]?g[?pY?zX>V>T=S<R:Q9P8P7P6P66BEFGFC~BwCrCmDjD$gD,dD3bD:`DA^DG\DN[DUYD]XDeVDnTCyRCQBOAN@L>L=L;K:K:K9;FHJJIGyGrGmH hHdH!aI)_I1\H8ZH>XHEWHLUHSTH[RHcQHmOHwMGKFJEHDGBGAG?G>G=G=?IKMMM~KtKnLhL cM_M\M'YM.WM5UM<SMCRMJPMROMYMMbLMkJLvHLFKEIDHCFBDBCBBBABACLNOPPzOpOiPcQ^RZRWR$TR,RR3PR:NRAMRHKRPJRXHR`GQiEQtCPAO@N?L>J=I=G>F>E>EHPQSSSvSkTdU^VXWUWQW"OW*MW1KX8IX?HXFFXNEWVCW^AVh@Vr>U]\<\f:[q9[}7Y5X4V3U3S3Q3O4N4NSWXYYzZoZc]\_SaMbHcEcCc$Ac,?c3=d:j;j!:j)8j06j75j>4jF2jN1iW/ia.hl,gy+f)e(c'a'_']'[(Z(Z^_``}`rahc^fUhLkBn9q 5r3r2r%0r,/r3-r;,qB+qK)qT(p^&pi%ov#n"l!j hf d c a accddydoeegZkQnHq>t4x,z*z(z 'z(&z/$z6#z>"zF yPyZxfwsvtrpnljiihhhhviljbmWqMuDx:{0% ")19AKVbo~ ~ | y w u s r qmmm}msnip_tTxI|@6,"" * 2 : DO[hw~}|{srrzrqtfx[}PE;2( !*2<GSaoyxxyxm}bWMB7.$  )2<IWfvvj_TI?4*! &1<JZk~sh]RG<2'  ".:K]q~rg\PC7,! +9J^s܉ڞگٽ~sdUG;/$(8J_s",7AJRZ`fkpty~(3=FNV\bglpuz%.8AIQW]chlquz  *3<DLSY^chlqv{  $.6?FMTY_chlqw} (19AHOUZ_chmrx#,4<CJPUZ_diou|%/7>EKQV[`fkry}||| ) 2 9 @ G M R X ]cipx~|zx v u s s r r  #,5<BINTZ~_|fzmxuv~trpomlkjii%''&#( 0 8!>}!Ez!Ky!Pw!Vu!\s"cq"jp"rn"{l"j!h!f eccbba',..-+'%&'$|(,y(4w(;t(Ar(Gp(Mo(Sm(Yk)`j)gh)pf)yd)b)`(_']&\%\$[#["["#.24421., {-w. t.(r.0o.7m.>k.Di.Jh/Pf/Vd/]b/ea/m_/w]/[/Z.X-W,V*U)U(U(U'*3689754z3u3q3n4%k4-i44g4:e4Ac4Ga4M_4T^4[\4cZ4kY5uW5U4T3R2Q1P/P.O-O,O,/7:<=<9z8t8o8k8h8"e9*b91`97^9>\9D[9JY9QX9YV9aU9jS9tQ9P9N8M7L5K4J2J1J1J04;>?@?}=u<o<j< f=b=_=']=.Z=5X=;W=AU=HS=OR=WQ>_O>hN>rL>~K=I<H;G9F8F6E5E5E49>ACCCy@q@jAeA`A]BZB$WB+UA2SA8QA?OAFNBMMBULB]JBfIBqGB}EAD@C?B=A<A:A9A8A8=ADEF~FuDlDfE`F[FXFUF"RF)PF0NF6LF=JFDIGKHGSFG[EGeDFoBF{AE?D>C=A<@<>===<=;ADGHI{IqHhHaI[JVK RKOKMK'JK.HK4GL;ELBDLICLQALZ@Lc?Kn=KzQOW09WE8WM7VV5V_4Vj2Uv1T0S/Q.O-M.L.J.I.HLOQQ{RqRfS\VUWMYE[@\ =\;]9]&7]-6]44];3]B2]J1\S/\].\h,[t+Z*Y)W(U'S(Q(O(N)NPSTUwUmVcWYZR[J]B`:c6c4d2d#0d*/d1-d8,c?+cG)cP(cZ'be%ar$a#_"^!\ Y!W!V"U"TUWXXsYjY`[W^O`Fc>e5i.k+k*k(k&'k-%k4$k<#kD!jM jWibioh}fec`^\[[Z[\{\p]g^]`ScKfBi:l0o&r"s ss"s)s0s7s?rIrSq_qkpznlj hfdcb_``v`madbZePiGl>o5s,v"y| |||#|*|2|: {C {N zZzfxuwuspnmlkde~dsejebhWlLpCs:w1z(~ $,4=GS`o}{xvutjiziqjik^oSsIx?|6,#$,5?KXgwooxopoesZyP}E;1( #,6AO^ouuwumyb~WLA7-$ !+6CRcv||uj_TI?4*! )6DVi}si^RG=3( &4EZn҄ИЪϹ~sh^SE8-!  #3DZq*4=FNU\bglquz&/9AIQX^chlquz !+4<ELSY_chlqu{  &/8@GNTZ_chlqv| !*3;BIOUZ^cglqw~ %-5=DJPUZ^chmsz (08?EKPUZ_diov~"*3:@FLQV[`els{~{yxwvuu  %-5<BHMRW]c}i{py yw usqpnmlll  (07>C}I{NyTwZv`tgrnpwnljhgedcc c  ""!#|+z3x9v?tErKpPnVm]kdilgueca`^]\[[["&))(&# {w t!'r!/p"6n"<l"Bj"Gh"Mf"Se"Zc#aa#i_#r]#}\#Z#X"W VUUTT!(,..-,|)x&t&p'm'$j(+h(2f(8d(>b(Da(J_)P])W\)_Z)gX)pV){U)S)R(P&O%O$N#N"N!&-0231|0v.r,m, j-f- d-(a-/_.5^.;\.AZ.GX.MW.UU.\T/eR/oP/zO.M.L-J,I*I)I(I'I&+14665x4r2l1h2 d2`2]2%[2,Y22W28U2>T2DR3KQ3RO3ZN3cL3mK4xI3H3F2E0D/D-D,D+D+/479:|9t7m6g6b6^7[7X7"U7)S7/Q75O7;N7BL7IK7PJ8XH8aG8kE8wD8C7A6@4?3?1?0?/@.38:<<x<p9i9c:];Y;U;R;P;&M;-K;3I;9H;@G;GF;=:<8;7;5;4;3;26;=??u?l=d=^>Y?T? P@M@J@$H@*F@1D@7C@>B@EA@L?AU>A^=Ah;@t:@9?8>7<6;69787776:=@A|BrBiA`AYCTCODKDGEEE!CE(AE/?E5>E<=ECADFGuHkHaHWJQKKMDN?O y4}+" '0:GVfxlulnldpYuOzD:0' &0<K\n}surlua{VKA7,# $0>Nav}yu|j_TI?4*!  "0@Rg}ȒƦŸsi^SH>4* /BWl'/8AIQX^chmqv{ "+4=EMSZ_dhmqv{  '08@HOUZ_dhlqv|#+3;CJPUZ_chlqw~ &/6>EKPUZ^cglrx!*19?FKPUY^chmt| $,4:@FKPUY^cipx~|{zzz '.5<AGLPUZ`fl}t{~ywusrqppo !)07=BH}L{RzWx\vctjsrq{omkihgfff  $~,{ 2y 8w >v Dt Ir Nq To Zm `k hi qg {e c b ` _ ^]]\  {xu's.q4o:m@kEjKhQfWd^bf`n^y][YXVVUUU!#$#~!yvspm#j*h0g6e<cBaG`M^T\[ZcYlWwUSRPONNNN"'()(x's%o"l i f!c!&a"-_"3]"9\"?Z"DX#JW#QU#XS#aQ$jP$uN$L#K#J!H HHHH!'+--z,s+n)i'f& b&_'\'#Z'*X'0W'6U(;S(AQ(HP(NN(VM)_K)hI)sH)F)E(D'C%B#B"B!B!%+.01v0o.i-d,`,\,Y,V, T,&R,-P,3N,9L,?K-EI-LH-TG.]E.fD.qB.~A-@,>+>)=(='>&>%).13{4r3k2e0_0[0W0 S0P1N1$L1*J10H16F1<E1CD1JB2RA2[@2e>2p=2}<2;1:/9.9,9+9*9),146x6o6h5a3[4V5Q5 N5K5H5!F5'D5-B53A5:@6A>6H=6P<6Y;7c97o86|76655342404/5.5-0478u9l9d8\7V8Q9L9H9E9C:A:%?:+=:1<:8;:?9:F8;N7;X6;b5;m3;z2:1907060402011137:};r;i<a<X;R<L=G=C> @>=>;?#:?)8?/7?65?=4?D3?L2?V1?`0?l.?y->,=+;+:+8+6,5,46:<z>o>f>^?T?M@GABB>C :C8D6D!4D'3D-1D40D;/DB.DJ-DT+D^*Dj)Cw(C'A&@&>&<&:'9'8:=?w@lAcAZBPCJDDE>G9H4I2J0J/J%-J+,J2+J8)J@(JH'JR&J\$Ih#Iu"H!F E C A!?!>"=>@BsChD_DWEMGGHAI;K4M.O ,P*P(P"'P)%P/$P6#P="PF POPZOfNsMLJHFDCBBD|FoFeG\HTHKKEK>M8P0R(V$W"W!WW%W,W3W:WCVLVWUcUqTRPNLJIHFHwIkJaJYKQLINBP;R4U,X$[^ ^^^"^(^/^7^?^I]T ]` \n [} Y WUS Q P OKLsMhM^NVONPFS?U8X0[(^ adff f f$ f+f2e;eDeOd[cibxa_][XWVO{PnQdQ[RTSLUCY;[4_,b$ehkn nnnn&n-n6m?mJlVkcjrigeca`_TvUjUaUYVRXH[?`7c/f'ilo ruuvww w(w0w9vCvPu]tms~qomkih~ZqZgZ_ZX[N_Dc;h3k+n"ruwz}~ ~")2<HVf~x|{xvutx_m_e___UcKg@l7q.u&x{~  "*5@N^ptdkded\gQlGr=w3|)   *5CTf{rjljdmYrNxC~9/% *8I[osplraxVK@6," *9Lawtyj_TI?4*  +<Pf{ߐݠ۬ #,4=EMSY_dhmqv|  (09AHOUZ_dhmrw}#,4<CJPUZ_dhmrw~ '/7>EKPUZ^chlry#+29@FKPUY^cgms{ &-4:AFKPTY^chnv!(/6;AFKOTY^djrz}{ywvutts #*17<AFK~P}U{Zz`xfvntwrpnmlkjji %~,|2z8y=wBvGtLsQqWo]nclkjthfecba```  ~{x u's.q4p9n>mCkHjNhTfZeacias_~][ZYXWWW{wv s p m "k )i /h 5f ;e@cEaK`Q^X\`ZhXrV~TSQP O O O O ztpmk hfc%a+_1^7\<[BYHWNVUT]RfPpN|MKIHGGGG!#}$u$o"j gda^\!Z(X.V4U9S?QEPKNRL[KdInGzFDCBAAAA"%'y(p(j&e%a#^![ X!U!S!%Q!+O!1N"6L"<J"BI"IG#PF#XD#bC$lA$y@#>#=!< ;<<< &)+u+m+f*a(\'X&U& Q&O&L&!J&(I&.G&3E'9D'?B'FA(N@(V>(`=(k;(w:(9'8&7%6#7!7 7 #),|.r.i.b.],X*S+O+L*I+F+D+%B++A+0?+6>+==,D<,L:-U9-^8-i6-v5,4,3*2)2'2&3%3$'+.y0o1f1_1Y/S.N/J/F/ C/A/?/"4;494 74&64,44235925@15H05Q/5[.5g-5s+5*4*2)1)/)-*,*+-13s5i6`6Y6R6J6D7@7<888694929$19*/90.97-:>,:F+:O*:Z):e'9r&9%8%6$5$3%1%0&/14}6p7f8]9V9N9E:@;;<7<3= 1>/>->",>(*>.)>5(?<'?D%?M$?X#>c">p!= <;975 4!347y9m:c;Z;R;K<C>>>9?3A.C +C)D'D&D&$D,#D3"D:!DB DKDVCaCnB}A@>;:987:v<j=_=W>O>H?@A;B6C/F)H$J"J JJ#J)J0J7J?JHJSI_IlH{GECA?=<;>r?f@\@TALAEC>D9F3H,J%MP QQQ Q&Q-Q4Q<PFPPP\ Oi Nx M K I G E C B?{AmBbCYCQDJEBF[5_-c%fil ortvw wxyz${,{5{AzNz]xnwutqonnWdW\WVWM[C_:d0i(l psvy{~ %.9FVg{||j\b\\\T_Id?i5o,s#w{~ %0=M^ribcb[dPiFo;u1{'  %1@Sg~jhcjXpMvC|8.$&5G[qkpavV}K@6+!  &7JaxҏѡϬ  (09AHOUZ_chmrw} $-5<DJPVZ_cgmrx (07?EKQUZ^bgmry $+3:@FKPUY]bgms{'.5;AFKPTX]bhnv ")06<AFKOSX]ciqz~}{zyyy $+17<AFJOSX~^|ezlxuvtsqponnm&,~2}7{<zAxFwJvOtTsZqaohmqk{jhfeddcc |zx!v(t.s3q8p=nAmFlKjQiWg^eecnay_^\[ZZZZ ~ y wt rpm#k)j/h4g9e>dCbHaM_T^[\cZlXwVUSRRQQQ ~wqnl khfc%b+`0^5]:\?ZEY KW QU YS aR kP vN L K JIIIH xpkgdca ^\ Z'X,W2U7T=RBQHOOMWK`IjHuFDCBA A A A }s kfa^\Y WUS#Q)O.N4L9K?IEGMFUD^BhAt?><;;;;; y#o#g#a#\!YVS PNL J&H+F1E6C<BC@J?R=\<f:r98665556 $v&k'c']&X$T"P!M!J G E C #A!(@!.>!4=!:<"@:"H9#P8#Z6#e5#q3#~2"1!0 0001$'r(h)`*Y)T(P%K%G%D% A%?%=% ;%%:%+8%17&76&>5'F3'N2(X1(c0(o.(}-',&,$+"+ ,-"&|)o+e,],V,P+K)F)B)?)<)9)7)5)#3)(2*/1*50+</+D.,M-,W,,b+,n),|(+(*'('&'$(#("%)y,l-b.Z.S.M.G-B->-:.7. 4.2.0.!/.'-/-,/3+/:*0B)0K(0U'0`&0l%0{$/#.","*"(#'$&',v.j/`0W1P0J0D0=1925222 /3-3+3*3%(4+'41&48%4@$4I#5S!4^ 4k4y320.,+**.s1g2]3T3M3G3@3955507-7)8'8&9$9"#9)"9/ 969>9G9Q9]9i8x76420/..~1o3d4Z5Q5J5D6=77839.:(<$= !> >> >&>->4><>E>O>Z=g=v<:975321z4l6`7W7N8G8A8::5;0<+>%@C DDDD$D*D1D9DBDLDX Ce Bs A @ > < : 8 75u7h9]:S:K:E;>;8=3>-@(B!EHK KKK! K' K. K6 J?JIJTIaHoGEDB@>=9q;d<Y=P=I=B>M^q~{zyw`UYUTTLWB\8a.f%kor vy|~  *6EVi_ZZZS\Ha>g4m*r w|!,;L`va`ZaPgEm:t0z&  .?SjbgXmMsB{8-#!2F]sɉɝǫ $-5<DKPV[_chlqx!)18?FLQVZ^cglry $,3:@GLQUY^bgls| (/5;AGKPTX]bgmv #*17<AFKOSX]bhpy%,27<AEJNSX]cj}t{~yxvutssr  '-27<}@|E{IyNxSwYu_sfqooynljihggg~ |zx"w(v.u3t7r<q@oEnJlOkTi[hbfkduba`^]]\\|yusqom#l)j.i3h8f<e@dFcKaQ`W^_\h[rY~WVUTSSS { t omk hgec%b*`/_4^8\=[BZGXMWTU\SeRpP|NMLKJJK ~tmhd ca `^\ Z&X+W0U5T:S?QDPKNRMZKdInG{FECCBBB xnga^[Z YVTR"Q (O -N 2L 7K <J BH IF QE YC cA n? {> = < ;;;;sib\XUSQPMKJ$H*F/E4D:B@AG?O=X<b:m8z76544 4 4 |oe^XSPMKH FDB!A&?,>1=7;=:D8L7V5`4l2y10/..//xl!b"Z"T"O KHEB @><:#9)7.645;3B2J1T/^.j-w,**))**u"i$_%W%Q$K#G"C @ = :864 3 &1 ,0 2/!9.!@-"H+"R*#])#i("v&"%!%$$%%!r$f&\'T'M'H&C%?$;$8$5$ 2$0$.$,$#+$)*%0)%6(&>'&F&'P%'[$'g"'u!&!% # ! ! }$o&c(Y)Q)K)E)@(;(6(3(0(-)+)))')!&)'%*.$*5#*<"+E!+N +Y+f*s*)'%#"!#z&l)`+V+N+H+B+=+7+1,.,+-(- %.$.".!.% .,/3/:/C/M/X/d/r.-+)'&%%w)i+]-T-L-E-?-:-4.//+0&1#2 3333#3*40484A4K4V3b3p21/-+*)(s,f.Z/Q/I0B0<07012-2(3$578999!9'9.969>9H9T 8` 8n 7} 6 4 2 0 . -,o/b0W1N2F2@2:253/4+5&7!9;> ??? ?% ?+ >3 >;>E>P=\=j @CE HK KKKK%K,K4K=JHJTIcHrGFCB@>p7b9V9M:E:?:::5;.>(@"CFILOP QRRS!S(S0R9RDRPQ^PnOMLIGFj;]<R=I=C===9=1@*D$GJMP RUW X XYZ[$[,[5[?ZKZYXiW{UTRPOe@Y@O@G@A@=@5C.G&K NQT WZ]__ `abcd&e/e9dFdTccav`^\[X_DTDLDFDAC:G1K)O"SVZ ]`beghi jklm!o)p4o?oNn^lpkigfeZIQIKHFH?J6O-T$Y\` cgiloqrst vwy{"}+~7}E|V{hy}wusrWNPMLLDO;T1Y(^cg knrtwy|} #/=M`uVSRRKTAZ7_,e#jpsw{~ &4DWlXXRYG_=e2l(rx}  *:MbzY_OdDk:r/z%,?Um!)18?FLQV[_chmsz %-4;AGLQVZ^chnt|!(/6<BGLPUY^bhnv $+17=BFJOTX]bipy&,28=AEINSX]cjs}~|zyyxx !'-27<@DI~M|SzXy^weunsxqonllkkk~|{"y(x.w3v7u<t@rDqHpMoSmZlajihsfdcaa``_}xu rpon$m)l.k3j7i;h?gDeIdOcUa]_e^o\|ZYWVVUUysoki gfec%b*b.`3_7^;]@\EZKYRWYVaTlRxPONMLLLzqjeca_]\[ Z%Y*W/V3U8T<RAQGONNVL^KiIuGFEDDCC t j c^ [ YX VUSR"P&O+M0L4K9J>HDGKESD\BgAs?>=<<<< znd]XTR P O NLJI#G(F,E1C6B<AB?I>R<[;f9r8665555 ui`YSOLJH G E C B @ %? )> /< 4; :: A8 H7 Q5[3g2s0/ . . ...qe\UOJFDBA?=;:!8'7,62483?1G0P.Z-e+r*)('' ( ( |nbYQKFB?=;9 7532$0)//.5-<+D*N)X'd&p%$#"""#yk_V N H C>;853 1/-,!*')-(3':&B$L#V"b!o~vh\!S"K"E"?!;!7 30.+ )'%$$# *" 1!!8 !A!J"U"a!n!} se"Z#P$H$B$=$8#4#/#,#)#&# ##"$ $$"$(%/%6%?&H&S&_%m%|$" o!b$W%M&F&?&:&5&1%,&''$'!(())) )&)-*4*=*F*Q*^*k)z(&% "! | l$_&T'K(C(=(7(3(.())%*!+,- ....$.+/2/;/D /O .[ .h -w ,+)'% $y#i&\)Q*H*@*:*5*0*,+&,#,.02 34 4 3" 3( 30383A3K3X3e2t1/.,*(t&e)X+N,E,>,8,3,.,*-%.!0246 9 9999&9-949=8H8T8b7p6531/.p*a-U.J.B/;/6/1/-/(0#2468 ;> >???#?*>1>:>E>Q=^ @C DDEE E&E.E7EADMDZCjB{@?<;:f1X3M4D4=47434/4(6"9<>A DGIJ KKLM#M*M3M=LHLVKeJwHFEBA`6T7I7A7;76626,9%<?BE HKMPQ RSTUV&V.V8UCTQTaRsQOMLJ[:O:F:?::969/<(?!CFJ MORUWXZ [\]^!`)`3_>_L^[]m[YWVUU>K>C>>=:<3?+C$GKO RUX[^`abd efhi$k-k8jEiUhgf|eca`QBHBBA?@8C/G'LQUY\_begiklno qsuw&y1x>wNv`utrpomNGHFDE=G4L+R!W\`dgjmpsuwxz|~(5EWk~MKIJCL9Q/W&]ch lotwy|  -<NczOPJQ@W5]+d!jp uy} $3EZpQVG\==<<vi ` Y U QONL KJIH"G&F+E/C4B9A>@E>M=V;`:l8y766555p d[TNK H GF DCBA?#>'=,<1;69<8B7K5T4^2j1w0//...y k`WOIEB@ ? > =<:9 7$6)5.443:1A0I/S- ^, j*w)((((( ug\SKEA=;98 7 5 4 2 1 "0 '/ ,- 2, 9+ @)I(T&_%k#z" " ! """ rdYOHB=964310.,+*$(*'0&7$?#H"R ]jx   naVLE?:620-+) (&$#""(!. 5=FP\iw|k^SIB<73/,)&$" %,3;DOZgvxh[PG?940,)%! # * 1 9!B!M!Y!f t      ueXM D!=!7!2!. * & " ""# #$$$!$(%/ %7 %@ %J %V %b$q$" qbV!K"B#:#5#0#+"'"$"#$%'( ) ) ) )%),)4)<)G)R)_)n(~'%#!n_"R#H%?%8%2%-%)$%$"%&'(* - ....#.).1.:.D.O.\-k,{+)'&$j"[$O&E'<'6'0'+''&$' ')+,/1 2333 3'3.373@3L3Y2h1y0/,*)e%W'K(A):)3).)*)&)#)+-/1 36 7 8999$9+949=9H8V8e7v5430/a)S*H+>,7,1+-+)+&+ -024 69;< =>?@!@(@0@:@E?R>a=s<:985\,O-D.;.5.0.,-)-#/257 9<?AB DEFGH$H,H6GAGNF]EnCA?>>V0J1@19131/0,/&2 58;=@CEHIK LMOP Q(Q2P<PIOXNiL~KIGFQ4F4=47423/2)5"8<?B EHKNPQST VWY[#[-[7ZDZSXdWxUSQOL8B8;86736-8&<@DG KNQTVYZ\]_ aceg'g1g>fLe^cra_]\G<@<:;7:1<)@!DIN RUX[^acdfhik mor!u+t7sFrXqkoljiE@??<>6@-E$JOT Y]`cfilnprtvxz |#/>Ocy}{yDEACCHMQUY^djs~ '-39>BGKOTY^dkv~| "(.49=AEJNSX^en{~|{yvsq#).38<@D~H|M{SyYx`vhtsrpomkjhg|y xwvu$u)u.t3s7r;q?oCnHmMkTj[hcgme{cba_^]\ysomkjih h%g)g.g2f6d:c>bCaH_O^V\^[gYuWVUSRRRvnhdb` ^^]] \%\)\-Z1Y5X:W?UDTJSQQZPcNpM~KJHHGGyme_[XVU TSRR Q%Q)P-O1N5M:K@JFIMGVF_DlCyA@?>>>pf]VRONL KJIIH!H%G)E-D2C6B<@B?J>R=\;h:v977666zj_WPKHFDC BA@??!>&=*<.;3:98?7G6O5Y3e2r10//..sfZ Q J E A ?=<; :9877"5'4+30261=0D/M-X,c+p*)((((n a VMF@<9 7 654 3210/$-(,.+3*:)B(K'V%b$o#~""!""{j ^RIB<8420 / . . ,+)(!'&&+%2$9#A! K U b o~w gZOF?941.+)( ( & % # " ! $ * 1 8ALWdq  t dWLC<61-*'%#"  #)07@JVbp  qaTI@93/*'$!  '.5>IT ` m }     m^RG>71,($!  $ + 3 ; EP]jzj[OD;4/*&"   "( 0 8 B M Z hwgXLA92,($  ! ####$&$-$5$?$J$W$e#u"!cUI? 6 0 * &" ! # %' (())#)*)3)<)G)T(c(s&%$! `RF!<"4"-"("$!!!  "#% ')+ ,-..!.(.0.9.D.Q-`-p+*('$[ N"B#9$1$+$&### ""$&' ),.0 12444%4-464A4N3]2m1/-,,W#J%?&6&/&)&%%"% $&(* ,/145 7 8:;;";*;3;>:J:Y9j8}6421R'E(;)3)-(((%'#&)+-0 257:;= >@BCC&C/B:BFAU@f?z=;:8L+A+8,0+++(*&) +.14 69;>ABDE GIKM"M+L5LAKPIaHuGDBAG.=/5//.+-),#.158 ;=@CFHJLNP RTVW&W1V=UKT[RpQNMKB29232/1,/'1 59= @CFILORTVWY[ ^`c!d+c7cEbU`i^\YX>6763503+5#9=B FJMQTWZ\^`bdfh knq%r1q?oOnblxjhf<:794809'=BH MRVY\`cfhjlnprux {)7G[}pzyu<>9<5=,B"HNTZ^cfiloruwy|~  .?Rg~>A;A1G'NU[agkpswz} $4G]sAF7L-T#[b iouy~+>Si %,39?DIMRV[`flt~!'.4:?DHLQUZ`fnw~ #)/49>BGKOTZ`hp{}xt$*/48=AEJOTZa}j|uzxvutqmj ~||{%{*{/{3{7y;x?wDuItNrTq[odmnlzjhgfeb`}wsponmm m%m)l.l2k6j:h>gCfIdOcVa^`h^t][ZYXVUxojfcb a``` `%`)`-_1^5\9[>ZCYJWQVYTcRoQ}ONMMKJwld^[XVV UUTT T$S(R-Q1P5O9N?LEKLJUH^GjFwDCBBA@|nd[UQNML JJIII I$H(G,F1E5D;BAAH@Q>Z=f<s::9877tg\SMIFDBA A@@@? ?$>(=-<1:79=8D7M6W5b4o210///naVMFA><;:9 88776!5%4)3.231:0A/J.T-_,l+}*)(((yi\QHA<854321 00/.-",&+++0*7)>(G'Q&\%k$z#"!""teW L C < 7 3 0 .,+* ) )('&&#%($-#4"<!E OZhwpaS H @93/, ) ' % $$ #"!  %+2:CMZgvl^ PE=60,(%"    #)09 B M Y gui [ MB:3-)%!       " ) 1:D N Z g v  f XK@70+&"    ' . 6?JVds  cUH=5.($    $+3<GTbq`RE;3,&"   !(1:EQ`o]OB80*$   &. 7 B O^mYK?6.'"   ! "#$$$$,$5$@$L$Z#k"}!VH<3+%  !# % ')))")))3)=)J)X(i'{%$"!QD90)# "$&(* ,.///'0/0:/F/U.e-y,*(&M@ 6!-!'!"  ! #%'),.0 2 4677#7,666C5Q5a3u20.-H"<#2$+$%#!"! !$& (+-02468 : <>? ?)>3>>=M<];q9864C%8&/&(&$%!$#$'* ,/2479;=?A CFII$H/H:GHFYDkB@>=>)4*-)'($'"&'*- 1469<?ACEGJL NQT S*R6QDPTOfM}KJG9-1-+,'+%) *.2 59<?BEHKMOQSVY \_a$`0_=^M\`ZuXVT61/0+/)-$.27 ;?BFJMPSUXZ\^acfimo*n7mGlYkmhfd44/3-1)2 7<AFKNRVY]`bdgiknqtw{#0@~R{fx~vt4826.6%;AGMSX\`cfimortvy|(7J^u7;4:*@!FM U[afimqtwz}.@Uk:?0E&LT[bintx| $6J`u  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./012456789:;<=>?@ABCDEFGHIJKLMNOPRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~Q՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԛfԜfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԜgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՛eԜfԜfԜfԜgԜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՜eԜfԜfԜfԜgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՜eԜfԜfԜfԜgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՛e՜eԜfԜfԜfԜgԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՜e՜eԜfԜfԜfԜfӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՜eԜeԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgQ՛d՛d՜eԜeԜeԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgQ՛d՜d՜dԜeԝeԝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgR՛d՜d՜dԝdԝeԝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgR՜c՜d՝dԝdԝeӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgR՜c՝c՝cԝdӝeӝfӝfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMgY՛e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛fԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛fԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMhY՛e՛e՛eԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMiY՛e՛e՛eԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMiZ՛e՛e՛eԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMjZ՛e՛e՛eԛfԛfԛfԛgԛgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMjZ՛e՛e՛eԛfԛfԛfԜgԜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMkZ՛d՛e՛eԛfԛfԜfԜfԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgMkߜZ՛d՛e՛eԛfԛfԜfԜfԜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgLlޜ[՛d՛e՛eԛfԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgLnۛ]՛d՛e՛eԜfԜfԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgLo؛a՛d՛e՛eԜeԜeԝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgLr՛d՛d՛e՜eԜeԝeӝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgKu՛d՛d՜d՜dԝdԝeӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgK}՛c՜d՜dԝdԝeӝeӝfӜfӜfӜfӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgL՛c՜c՝cԝdӝeӝeӝfӜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgM՜c՝bԞcӝdӝeӝeҝfҝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJNT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJOT՚e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՚e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJPT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJQT՛e՛e՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgJQT՛e՛e՛eԛfԛfԛfԛfԛgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgIQT՛e՛e՛eԛfԛfԛfԜfԜgԜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgIRT՛e՛e՛eԛfԛfԜfԜfԜfԜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgIRT՛e՛e՛e՛fԛfԜfԜfԜfԜgӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgISU՛e՛e՛e՛eԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgITU՛d՛e՛e՜eԜeԜfԜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgHVU՛d՛e՛eԜeԝeԝeӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgHWU՛d՛d՜dԝdԝeӝfӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgGZU՛d՜d՝dԝdӝeӝfӝfӜfӜfӜfӜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgI]V՛d՜cԝcӝdӝeӝfӝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgJfߞX՜cԞbӝdӝeӝeҝfҝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgKqP՞`ԞcӝdӝeҝeҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH:QiZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QjZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QjZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QkZ՚e՚fԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgH;QlZ՚e՚fԛfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgHQr[՛e՛f՛fԛfԛfԜfԜfԜgԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgG>Qs[՛e՛e՛fԛfԜfԜfԜfԜfӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF?Qtߛ\՛e՛e՛eԜfԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF?Qvܛ^՛e՛e՛eԜeԜeԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgF@Py؛b՛e՛e՜eԜeԝeԝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgEAP|՛d՛e՜d՜dԝdԝeӝfӜfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgDCP՛d՛d՜d՝dԝdӝeӝfӝfӜfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgDDP՛d՜c՝cԝdӝeӝeӝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgEFP՜c՝bԞcӝdӝeҝeҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgGMMߥOԞbӝdӝeҝeҝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgHWH#6BʻLʷRʴWʲZʱ\ʰ^ʯ_ʯ`ʯ`ʮaʮaʮbʮbʮbʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcʮcG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OPW]՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OQW^՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhG+OQWߙ_՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgG+ORWޙ`՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgG+OSWݙa՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OSWܙa՚fԚfԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OSWۙb՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OTWښb՚fԚfԛfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OTWٚc՚fԚfԛfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,OTWؚd՚fԚfԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,NUW֚d՚f՚fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF,NUW՚e՚f՚fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF-NUW՚e՚f՛fԛfԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgF-NVW՚e՚f՛fԛfԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE-NVW՚e՚f՛fԛfԛfԛfԛfԜgԜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE-NWW՚e՚f՛f՛fԛfԛfԜfԜfԜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE.NXW՚e՚e՛e՛fԛfԜfԜfԜfԜfӜgӜgӜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE.NYW՚e՛e՛e՛eԜfԜfԜfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD.NZW՚e՛e՛e՜eԜeԜfԝfԜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD/M\W՚e՛e՛e՜eԜeԝeԝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgC0M^W՛e՛d՜d՜dԝdԝeӝfӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgC1M`X՛d՜d՜dԝdԝeӝeӝfӜfӜfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgB2LdX՛d՜c՝cԝdӝeӝeӝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg@3LhT՜c՝bԝcӝdӝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgA4JiNۧKԞcӝdӝeҝeҝfҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgC6Jhߴ@+;DKǽQǻUǹXǸZǷ\Ƕ]Ƕ^ǵ^ǵ_Ƶ`Ƶ`ƴ`ƴaƴaŴbŴbŴbŴbŴbŴbŴbŴbŴbŴbŴbŴbE==]o)w3}TeZۙcԚfԚfԚfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM>TfZٙd՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM>TgZؙd՚fԚfԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM?ThZ֚e՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhFM?ThZ՚f՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM?TiZ՚f՚fԚfԛfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM@TjZ՚f՚fԛfԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM@TjZ՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgEM@Tk[՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE LATl[՚f՚f՛fԛfԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛgE LATl[՚f՚f՛fԛfԛfԛfԛfԜgԜgӜgӛgӛgӛgӛgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgE LATm[՚f՛e՛f՛fԛfԜfԜfԜfԜgӜgӜgӛgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD LBTo[՚e՛e՛e՛eԛfԜfԜfԜfԜgӜgӜgӜgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD LCTp[՚e՛e՛e՛eԜfԜfԜfԜfӜfӜgӜgӜgӜgӜgӜgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgD!LCTr[՚e՛e՛e՜eԜeԜfԜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgC!KETt[՛e՛e՜e՜eԝeԝeӝfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgC!KFTw[՛d՛d՜dԝdԝeӝeӝfӜfӜfӜfӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgB"KHT{Z՛d՜d՝dԝdӝeӝeӝfӜfӜfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgA#JJSX՜c՝cԝcӝdӝeӝfӝfҝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg@#ILO{S՜bԞbӝdӝeӝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg?$HPLvLحBԢ\ӝdҝeҝeҝfҝeҞeџeџeџeѠeѠeРeСeСeСeСeТeϢeϢeϢeϢeϢeϢeϢeϢeϢeϢe<%FFGp(0>FLQTVÿXÿZþ[¾\¾]¾]¾^^___```````````?#CF`#o.x6|>EJNRTVWXYYZ[[\]^^^^^^^^^^^?$ = K+S4X;^@dDiHmIpLsNuPwQxRzTzU{V|W}W}X~Y[[[[[[[[[[[;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_ؙfԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SHXi\_՚fԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚh;M+SIXk\_ԚfԚgԚgԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԛhԛhԛhԛhԛhԛhԛhԛhԛhԛhԛh<M,SJXl\`ԚfԚfԚgԚgԚgԚgԚgԚgԚgԛgԛhԛhԛhԛhԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛh=M,SKXn\aԚfԚfԚgԚgԚgԚgԚgԛgԛgԛgԛgԛhԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh=L-SLXo\aԚfԚfԚgԚgԚgԛgԛgԛgԛgԛgԛgԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh>L-SLXp\ޘbԚfԚfԚfԚgԛgԛgԛgԛgԛgԛgԛgԛgԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh>L-SMXq\ۙc՚fԚfԚfԛgԛgԛgԛgԛgԛgԛgԛgԛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh?L.SNXr\ٙd՚fԚfԚfԛgԛgԛgԛgԛgԛgԛgԛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh?L.SNXt\֚e՚fԚfԛfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh?L.SOXu\՚f՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh@L.ROXv\՚f՚fԚfԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh@L/RPXv\՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhAL/RPXw\՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhAL/RQXx\՚f՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛgӛgӛgӛgӛhӜhӜhӜhӜhӜhӜhӜhӜhӜhAK/RRXz\՚e՚f՛fԛfԛfԛfԛfԛgԜgӛgӛgӛgӛgӛgӛgӛgӛgӜgӜhӜhӜhӜhӜhӜhӜhӜhӜhӜhBK0RRX{\՚e՛e՛e՛fԛfԜfԜfԜgԜgӜgӛgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgBK0RSX|\՚e՛e՛e՛eԜfԜfԜfԜfԜgӜgӜgӛgӛgӛgӛgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgCK1RTX~[՚e՛e՛e՜eԜfԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgӜgDK1RUW[՛e՛e՛e՜eԜeԜeԜfӜfӜfӜgӜgӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgCJ2RWW[՛e՛d՜eԜeԝeԝeӜfӜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgCJ3RYVZ՛d՜d՜dԝdԝeӝeӝfӜfӜfӜfӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgBJ4Q[TY՛d՜c՝cԝdӝeӝeӝfӜfӜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgBI5O[QV՜c՝cԝcӝdӝeӝfҝfҝfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgAH7KXL|P՝aԞbӝdӝeӝeҝfҝfҝfҝfҜfҜfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg?G9GNL{߭Gֶ<ҫOѦZѤ^ѤaУbФbФcϤcϤcϤcϥdΥdΥdΥdΦdΦeͦeͧeͧeͧeͧeͧeͧeͧeͧeͧeͧe>@/HNAr2>GMQTWYZ¿[¿\¿]^^__``aaaaaaaaaa;B*>Ja(n1w9|@GKORTUVWXXYZ[\\^^^^^^^^^^;;*>$L/T7Z=^BbFeGgHiIkKmMoOpPqQrSsTtUuVuWvYwZx[x[x[x[x[x[x[x[x[x9".*63;9@;D=I?MAQCTEVGXIZK[M\N]P^Q_S`TaUaWbYcZcZcZcZcZcZcZcZcZc. ?O4WM[f]_cݗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. ?O4WM[f]_cݗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. ?O4WM[f]_cݗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. ?O4WM[f]_cۗfԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. @P5WN[h]_c՚gԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚiԚi. AQ6WP[j]_ߗdԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚiԚi/ AR6WQ[l]_ۘeԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhԚhԚhԚiԚiԚiԚiԚiԚiԚiԚi/ BR7WR[n]_יfԚfԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԚhԚhԚhԚhӛhӛhӛhӛhӛhӛhӛhӛhӛh0 BR7WSZp\_ԚfԚfԚgԚgԚgԚgԚgԚgԚgԚhԚhԚhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh0 CR8WTZr\`ԚfԚfԚgԚgԚgԚgԚgԛgԛgԛgԛhԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh0 D R9WUZt\`՚fԚfԚfԚgԚgԛgԛgԛgԛgԛgԛhԛhԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh1 D R9WVZv\ߘa՚fԚfԚfԚgԛgԛgԛgԛgԛgԛgԛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh1 E Q:WVYw\ݙb՚fԚfԚfԛfԛgԛgԛgԛgԛgԛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh1 E Q:WWYy\ۙc՚fԚfԛfԛfԛgԛgԛgԛgԛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh2 F!Q;WXYz\ٙd՚f՚fԛfԛfԛgԛgԛgԛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh2 F!Q;VYY{[֚e՚f՛fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛgӛgӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛhӛh2 F!Q;VZX}[՚e՚f՛fԛfԛfԛfԛgԛgӛgӛgӛgӛgӛgӛgӛgӛhӛhӛhӜhӜhӜhӜhӜhӜhӜhӜhӜh3 G!QT]WZ՚e՛e՛e՜eԜeԜfԜfԜfӜgӜgӜgӜgӜgӜgӜgӜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh4 J"Q?T]VZ՛e՛d՛e՜eԜeԝeԜfӜfӜgӜgӜgӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg5 J#Q@S^UY՛d՛d՜d՜dԝeԝeӝfӜfӜfӜgӜgӜgӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg6 J#PAR^TW՛d՜d՜dԝdԝeӝeӝfӜfӜfӜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg7I$OAP]QU՜c՜c՝cԝdӝeӝeӝfӜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg9I%L@L[MzQ՜b՞aԝcӝdӝeӝfҝfҝfҜfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg;H&I=HSMzMڪHԞaӝdӝeҝeҝfҝfҝfҝfҜfҜfҜfҜgҜgҜgҜgҜgҜgҝgҝgҝgҝgҝgҝgҝgҝgҝg>G&C6IOIwܹ<5ϸEγOͰU̯Y̮[̭]˭^˭`˭`˭aʭbʭcʭcʭdɭdǭdƮeĮfĮfĮfĮfĮfĮfĮfĮfĮf?@ C+EP3n!1>FLPTWYZ\]^^_`abcddddddddd=;A.,J!^,k4t;zB~HMPSTVWXYZ[\]_`bbbbbbbbb3<+,>(K2S9Z?_DcFfHiIkKmMnOoPpRqSrTsVtWtYuZv\v^w_w_w_w_w_w_w_w_w8.#$.-65=:BWWZr\^ޘcԚfԚgԚgԚgԚgԚgԚgԚhԚhԚhԚhԛhӛhӛiӛiӛiӛiӛiӛiӛiӛiӛiӛiӛi~%7G)U?WXYt[]ۙcԚfԚfԚgԚgԚgԚgԚgԛhԛhԛhԛhӛhӛhӛhӛiӛiӛiӛiӛiӛiӛiӛiӛiӛi%7G)U@WYYu[]ؙd՚fԚfԚgԚgԛgԛgԛgԛgԛhӛhӛhӛhӛhӛhӛhӛiӛiӛiӛiӛiӛiӛiӛiӛi&7H)T@VZXv[]՚f՚fԚfԚfԛgԛgԛgԛgԛgӛhӛhӛhӛhӛhӛhӛhӛhӛiӛiӛiӛiӛiӛiӛiӛi&8H*TAVZXwZ]՚f՚fԚfԛfԛgԛgԛgԛgӛgӛgӛhӛhӛhӛhӛhӛhӛhқiқiқiқiқiқiқiқi&8H*SAU[XxZ]՚e՚fԛfԛfԛfԛgԛgԛgӛgӛgӛgӛhӛhӛhӛhӛhқhқhқhқhқhқhқhқhқh&8I+SAU[WyZ\՚e՛e՛fԛfԛfԛgԛgӛgӛgӛgӛgӛhӛhӜhӜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh&9I+RBT\WzY\՚e՛e՛eԛfԛfԛfԜgӛgӛgӛgӛgӜgӜhӜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh'9J+RBT\VzY\՛e՛e՛e՛eԜfԜfԜfӜgӛgӛgӜgӜgӜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh':K,QBS\UzX[՛d՛d՜eԜeԜeԜfӜfӜgӜgӜgӜgӜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh':L,PBR\TzWZ՛d՛d՜dԜeԝeԝfӜfӜgӜgӜgӜgҜgҜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜhҜhҜh(;M,OBQ[SyUY՛d՜d՝dԝdԝeӝfӜfӜfӜgҜgҜgҜgҜgҜgҜgҜgҜhҜhҜhҜhҜhҜhҜhҜhҜh(<N,NAOZPvSW՜c՝cԝcԝdӝeӝfӜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜhҜhҜhҜhҜhҜhҜhҜh)=L+L@LWMqPR՝bԞbԝdӝeӝeҝfҝfҜfҜfҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜgҜg*>J*H=HQMnOߩLبKӞcӝdӝeҝeҝfҝfҜfҜfҜfҜgҜgҜgҜgѝgўgϠhΡhΡhΡhΡhΡhΡhΡhΡh+@F(D7IILoH0ҸAаNϬWϩ[Ϩ^Χ`ΧaΧbͧcͧdͧd̨ęf˩fʪgȫhūi¬j¬j¬j¬j¬j¬j¬j¬j-CA#C-ILDl0>GǿNǼSƻWƺZŹ\Ÿ^Ÿ_ķa·abcdfgikkkkkkkk/@;D-@Le'v0=.F%X/e7n=tByH}MQSUVXY[\^`bdgiiiiiiii47:+";,H4Q;X@]EbGeHhJjLlNnQoRpTqVrXsZt\u_vavdwfwfwfwfwfwfwfwfw07"'.067=;B=G?KANCPESFTIVKWMXOYQZS[U\X]~Z^|\^z__yb`yb`yb`yb`yb`yb`yb`yb`4 !*,%/*2.427598<:><@=~B?|D@zFAxHBwJBuLCtODrQEqSFoVGnXGl[Hl[Hl[Hl[Hl[Hl[Hl[Hl[H  "%)-"z0$w3%s5'q7(o9)m<*l>+j@,iB-hD.gG/fI0dL1cN1bQ2`T3`T3`T3`T3`T3`T3`T3`T3h#g+ m9qD$yM4UE[U`cdogyjlnoqqrsstuvwyyzzzzzzzzh#g+ m9rD%zM4UE[U`ddpgzjlnoqqrsstuvwyyzzzzzzzzi#h+ n9sD%}N5VG\X_gctf~ikmopqrrstuvwxyzzzzzzzzi#j+ p9tE&N7VI\Z^jbwehkmnpqqrstuvwxyzzzzzzzzj"k+ q9vE'O8WK\]^m`{dgjlnopqrrstuwxyyzzzzzzzk"l, s9xE(O:XM\_^p_cfikmnpqqrstuwwxyzzzzzzzl"n, t:|E)P;YO[b]s_behjlmnpqrstuvwxzzzzzzzzm"o, v:F*QXSZh\}]_begݗhڗiؘiטi֘j֘jטlؗnؗpؗrؗtؗvؗyؗ{ؗ{ؗ{ؗ{ؗ{ؗ{ؗ{o!s- z;H,U?WTYj[]^beܗfؘgԚgԚhԚhԚhԚhԚiԚiӚjԙmՙpՙsՙvՙxՙxՙxՙxՙxՙxՙxp!t- {;H,T@VUYk[\^aݘe֙fԚgԚgԚgԚhԚhԚiԚiӚiӚiӚiӚkӚoӚsӚuӚuӚuӚuӚuӚuӚuq!u- |;I,S@VUXlZ\^aٙeԚgԚgԚgԚgԚhԚhԚhӚiӚiӛiӛiӛiқlқpқrқrқrқrқrқrқrr!v- ~<J-S@UVWlY[]ߙa՚fԚfԚgԚgԚgԚhԚhӛhӛiӛiӛiӛiқiқiҜnќqќqќqќqќqќqќqr!w- <K-R@TVWmY[]ݙa՚fԚfԚfԚgԛgԛgӛhӛhӛhӛiӛiқiқiқiќmќoќoќoќoќoќoќos x. <L-Q@TVVmXZ\ܚa՚f՚fԛfԛgԛgӛgӛhӛhӛhӛhқiқiқiқiќmНoНoНoНoНoНoНos y. <L-Q@SVUmWY[ښa՛e՛fԛfԛfԛgӛgӛgӜhӜhҜhҜiҜiҜiҜiНmОoОoОoОoОoОoОot z.=N-P@RUTlVXZٛa՛e՛e՛eԜfԜfӛgӜgӜhҜhҜhҜhҜiҜiҜiОmϟoϟoϟoϟoϟoϟoϟou {.=N,O?QTSkUWYٜ`՛d՜dԜeԝeӜfӜgӜgҜgҜhҜhҜhҜhќiѝjϟnΠpΠpΠpΠpΠpΠpΠpu |.>M,N?OSQiSUWڝ\՜c՝cԝdӝeӜfҜgҜgҜgҜgҜhҜhҜhѝiϠl͢p̢q̢q̢q̢q̢q̢q̢qv ~/>L+L=MQOfP{RTܡV՝bԞcӝeӝeҜfҜgҜgҜgҜgҜgҜhѝhϠḳn˥rʦsʦsʦsʦsʦsʦsʦsw /?J*J;KNMaPwQQۧNա\ӝdӝeҝfҝfҜfҜgҜgҜgОgΠi̢jʥmȧpŪu«x«x«x«x«x«x«xy0AH)G8HINZOyNܰGմBҬQѧ[Ѥ`ѢcТdТeϢeϣfΤg˥hȦiƨlêo˿rɻwƹzĹzĹzĹzĹzĹzĹzz0BE&C3I@M]KyݸB5нBͷM̳T̰Y˯]˭`ʭbʬcɬeƭfĮhƿjźlķp´sy{{{{{{{|1DA!C+IAI^ݿA*2C#X,g4s:|CJOSWZ[]_bdgkotxzzzzzzz!46=0*?)O2[9d?kDpIuNxP{S~UWZ\_behlpvxxxxxxx /9/'%7.B6L<@=~C?{F@yHBwKCuNDsPEqSFoWGmZHk]IjaJheKggKggKggKggKggKggKggK  $(,"~0$y3&u6(r8*p;+n>,l@-jC.iF/gI0eK1dO2bR3`U4^Y5\]6\^6\^6\^6\^6\^6\^6\^6  { up l$i(f+c.a0_3^6\8[;Y>WAVDTG SK QN!OR"NT"NT"NT"NT"NT"NT"NT"]%W*T3 Y?eG"oN0vV=z\H|aR~fYj`md~ph}rk}tm|wn{yo{{pz}qzryrxrxqxpxoxnylylylylylylyl]%X*V3 Z?hF$sN1yU?}[JaTe]iclholqotqvs~xt~zu}|v|v|v{vzv{u{s|rzqzqzqzqzqzqzq^$Y*W3 ]>lF%vN3|T@[M`We`igllopqssvuwwyyz{z~{~{~{}z~y~w~v{v{v{v{v{v{v{v_$Z*Y3 a>oF&zN4TBZO`Zecijlpntqxszu|v}xz}}|{|{|{|{|{|{|{|{`$[)Z3 e=tF'~N6UDZQ`]dghnkunyp}rtuwy|~󁍁}}}}}}}a$\)\3i=xF(N7UF[T^`ckgsjzmoqstvxz}󉃉񆈈b#])^3m=}F)O9VH\W^daofxilnqrstvxz{}툈녎肕肕肕肕肕肕肕c#^(`3r<F*P:WJ[Y]g_sd}hknpqstvxy{|鎁苇戎䅗䅗䅗䅗䅗䅗䅗d#_(b3v<G+Q;XKZ[]i^vafjmoqrtvxy{}厄㋋ቓ߆߆߆߆߆߆߆d#`(f3z<G+RL*N9PIRZTkV{XY[\^۞cћjОmΟr͡vˡ{Ȣšßj!g&}1>K)L8NHPXRhTwUWYYުXԨ]Сf̢jʥqɥvŦ}¥k!g&1?J(K6LENTPcSpU|VUܲQӳRϬ]ͧeɦiŨnvʼƻk!i&1@H&H4IBLOQ\SkSRڼHҾJͶU˱]ʬcƫgʿlɺsƵ}òl!l%1AF$F1G=MHPXQnN>BMɻVǶ]Ƴbf»kqym q%1BC!B,I6MEN\Jp/:ENVü\¹aeinvo v$1 B?C%I1KHE^+p1=GPV\`cgms{p |#2 >=DG4AJ(^/n6{@HPV[_bfkqxŁƌǙƣr"29 >C >6$J,[4i:sA|IPVZ]adiov}͇ΑΝyϫyϫyϫyϫyϫyϫyϫt!28>;#7(H0V8a>jDqJwP|TWZ^bflrz؂׋y֕t֡t֡t֡t֡t֡t֡t֡|199##4,B4N;WA_FeKjMnQqTtXw[y_{c|h}n~u~~}}{|v~ppppppp27!(/0:8D>KCQEWG[J^MaQdTfXh\j`kdl{inxonuvns}nqmnmnmnmnmnmnmnm3 "+'4097;==B@GCJEMIPLRPTSU}WWz[Yw_Ztd[qi\no]ku]h{]f]f]f]f]f]f]f]   $)-#0)4.73:6=9@;}D=zG?wJAuNBrQDpUEmYFj]HhbIehJbmK_rK\zK\zK\zK\zK\zK\zK\zK  !&*/#{2%v6(r9*p<+m@-kC.iF/gJ1eM2bQ3`V4^[5[`6Ye7Vj8Rp9Rp9Rp9Rp9Rp9Rp9Rp9Կ  zto$k(h,d/b2_6^9\<Z@XC VG!TK"QP#OU$MZ$K_%Ge&Ge&Ge&Ge&Ge&Ge&Ge&}slg b^[ X U# S& P) O-M0K3J7H:F?DCBH@M>RmF%sM0vU;x[EyaMyfSxkXxo\ws_vwbu{ct~esfrfpfpfqfqercockchcgcgcgcgcgcgcV%Q+K1 Y6h>rF&yM2{S=}ZH~`P~eW}j]}na{rezvgxziw}kvlultmtlulujuipjljiihihihihihihiW%R+O0 _5n=xE'M4S?XJ_Td[ibmgqj~um}xp||qzrysxsysyrzpuqqqmpkpjojojojojojoX%S*S. d4s<~E(M5SAYM]Wc_hfllpptswv{x~y}z|z}y~wzxuxqxowlvkukukukukukuY$T*W, i3x<E(M5TBYN]Yabgjkqousyv|z~~zvs~p}o{nznznznznznzZ$U*Z+m2}<E(N6UCZO\[_edniun{ruy~􆆆逗zwttt€tttttt[$V)^*r2;F(O6VCYP[\^gapgxlqtx}򊁍팄膐‡{yyyyyyyyyy\$W)a(v1;F(Q5TBWPZ\\h_rd{kpsw{捇ڀ~~~~~~~]#X)e'y1<G'P4SAVOX\[h]s`}hpsy}䑂ފׄх̆ȅĄ„]#Z(h'}0<H&O3Q@TMWZYg\r^}eotz㐁܎Ӊ͊ȋŋŠ^#\'k&0<I%M1O>RKUXWdZp]{`lt~؍ΏȐĐ_#^&n%0<J$K/MDG'K1N9R@UFVUTcTr^el}a"h#{#0 >CG#K*N0P;PKFZFiOwYaitˆb"k!"0 ?BGK"L/K?9O>^DlLxV_fo~ǐãc!o "/> BGH!F2/C7R>`DlLwU]dkw̘ͅzȩe!t /> B DB$)50E7S>_EjLtU|\ahqӍwҠrͰw{~g!z0=A>!'*72E9R@]FfLnTuY{_elw܅wړm٦hԸmȹpsuuuuuum3<; #(,74D;OBXH`MgRlWq\vbyi|q~{|}x|ofੁ`ݾbf€hhhhhhu38 &(/57?=ICQHWK]ObTfYj_meo{lqwursrpphs`uYvYvZvZvZvZvZvZv~0& )%2099?ABHDMHRLVQYV\[_|aawgcsnenwfjefdae[gTiQiQiQiQiQiQi   #, 4)70:7=<@ADEHHMK|RNxVPu[RqaTmgUioWdxW`W\WYVTWQXQXQXQXQXQX ֿ  !'+ 0&4+80<3~?7zD9vHpQ@lVAi[CfaEbgF^oGYxHUHQHMHKGKGKGKGKGKGغ  "',{0"v5%q8(n=*kA,hE-fJ/cN0`S2]Y3Z_5Vf6Qn7Mw8I8E8C9C9C9C9C9C9ڴ} vq"l'h,d0a4^8\<Z@WD UI!RO"OU#L[%Hc&Dk'@s'<}(:(:(:(:(:(:(Ͻyojea] Y V$ S( P,N0L4J9H=FBCHAO>V:]6d3l1r1r1r1r1r1rznf_YT PLIFC@">&<):.83684>2D .K +R (Y '] '] '] '] '] '] G)B0<7>9A> KFROVW"W^(Xe-Xl1Wr4Vx6T~8R9Q:O;M;KP>M?K?K?L>L>M=M5B7H< RDXL\T%^\,_c1^j6]p9\vY?W@UASBQBNBOBOBPAQ@Q?Q>N>M?L?L?L?L?L?J(D/A4E5M: WB]J`S'bZ.cb4bh9an=`t@^zB]C[EYEWFTGSGSGTFTEUDVBRCQDPDPDPDPDPDPDK(E.D2I3 R8\@bH eQ)gX1g`7gf=fmAdsDbyFaH_J]K[KYLXLXLYKZJZHXHUITJQJPJPJPJPJPJL'F.H0M0 X6b>gF"kN+lV3m^:le@jkEiqIgwKe}MdObP`Q]Q]Q^Q^P_O^NZOYPUPSPSPSPSPSPSPM'G-K.R. ^5h=nE#qL-rT5r[=qbDpiInoMluPj|ShUfVdWcWcWcWdVdT_V]WYWXVWVWVWVWVWVWVN'H-P,W,d3n<uC$xK.xQ7xY@w`GugMsmRqtUozXlZk\h]i]h]i\i[e\b]^]]]\\[[[[[[[[[[[[O&J,T*\*j2t:{B$J.P8~VB}^J{ePykVvrZty^q`obmcmcmcnbkbgccdadacabbabababababaP&M*X(a(p1{:B$J.P9UC[KcSjY|p^xxbuerhqiqiqhpgjjfjejfighgggegegegegegeQ&P)\'e'u09A#I.P8UCZL`Uh\ob}wgykumtotoumnojpjqkplnlmlklilililililiR%T'_&j&z/8A"J,P7VBZL]Ue^nevk~oyrwtvsstnvowpvqtrrrpqnqlqlqlqlqlqlS%V&b$n%~.8A J+R6U@YK\Ua^kftm}s}wwywxr{t|u|vzwxwvwsvquouououououoS%Y%e#r$. 8BL)Q3U>XH[R_\ifro|v~|txz{|€}~|{|x{vzszqzqzqzqzqzqT%[$h"u#- 7DM&Q0T:WDZN^Xfcrnٍz̈́~zxu}r}r}r}r}r}rU$^#k!y", 8FL#P,T5W>ZG^Pd^եnoȚ|||yvssssssU$`"n |!, :HLP'S.V6Y=\J^]dzinu}}zwttttttV$b!q ,<HLO!S&U+W3OHY[dmo|~{xuuuuuuW$e t-> HKOQR!G0MDVX`jkzyt{yvvvvvvX#hw.A G KML<&F2MATT]fgvus͌gɫox~{yvvvvvv["k{/BGIF0:*B7JDRQ\`dpp}r܂eڠaϺkrx}~{xvvvvvv^!o0BEC $/!8.@:GGNSX_ajktwy|mb઀^elqv|yz{w~u~u~u~u~u~uct0@@% %/$80?xNBsTEn[HibKdkM^uOWOQOLNGPESFTGVGVGVGVGVGV ݳ #)/!4&9+y=/uC2pI5lO8hU;d\=_c?ZlASxBMCGCBB?AAD?F?F?F?F?F?FѼ !'z-t2 n7#j=&fB(cH*`N,\T.X[0Tc2Nm3Hy4B5<67545747474747474ӷ~x ql$g*b/_4[:X?UDRJ OQ!KX"Ga$Al%;y&6'1(-()()()()()()(ճɾulg b]Y U% R* O/L4J9G?DEAL>T9]4h/u*'""""""˻ujb[V QLHEA!?&=+;0866<3C /L *V &` "k w       wkaZTNJG C@=;9 6$4)1..4+:&A!JS[ffffff>,9267999=8C %<&:'8(6(4)1)/).)/(0(2'3&4%4%3%2&2&2&2&2&?+:2:4=6>9?? EIHRI[Ic Hk#Ft&C}(A)>*<+:+7,5,2,3,4,6+7*8):(8)5*3*3*3*3*3*@+;1=2A4B7D= JFMONXNa"Nj&Kr)I{+F-C.A/>/<0908090;/-;.8/8/8/8/8/8/A*<1A0D1F5J; PDSMTV T_%Tg)Rp-Ox/L1I2F3C4@5=5?5@4A4B3C2D2A3=4<4<5<5<5<5<5B*>/D.I/K1P8 VAYJ[S"[\(Ze-Xm1Uv3R6N7K8H9D:D:E:G9H9I7J7G9C:B:A;A:A:A:A:A:C)A-H,N,Q.X5]=`FaP$aY+`b0^j4[s8X}:TI?J?L?M?N>PI@GAGAFAG@G@G@G@G@D)D+M*S*W,_3e;gChL&gU-f_3dh8`q<]z?YAUCPDODPEQDRDTBRDNFMGLGMGNFOFOFOFOFOFE)H)Q(X(^)f1l9oAoH'nQ.l[5jd;fn?cwC`F\HXITJUJWJWHWISLRMSMTMULVKVKVKVKVKVKF(L(U&]&c'm/ s7w?xG'vN/tX6qa=njBjtGfJcM^NZOZO[N\NXQWSYSZS[R\Q\P\O\O\O\O\OG(O&Y$b$i%s- {6>F&M.|T7y^>ugEqqJm|NiQdS`T]T_R\U\X_Y`YaXbWbUbTbSbSbSbSbSH(R%]#f"n#z+ 6>F$M-S6Z>}dExnLszQnUiXeYbX`Yb]d^f_g^g\h[hYgWgVgVgVgVgVI'U#`!j s!+ 6?G!N*S4XהfL͌rXņah|myoxoynymyjxhwevbu`t^s]s]s]s]s]O$] iu+8 DOSU#W-֧V=˟bLmXzckqttrpm~j|g{dybx_w^w^w^w^w^Q#_lx+9G OQSغG+̲R;]KiXudmtxxurolhe}c|`{_{_{_{_{_S"bo|+:KM N ۽EB(½O9ZIeWpc~muy|zwtpmjfda~`~`~`~`~`V!dr+;IJߺE2?%K6VFaUlayltvzo{sxzu~qnjgebaaaaaX gv*<FA'4="H3SC]Qi^uiurkwcygwnttqxn|khecaaaaa[kz&:?(6?G.P>ZMfYwrdkǃmaÚrXtZscripomsjvgye{c|a|a|a|a|a_o 1) 5?H)P9XG|cSop]c݁eX٘kPӶmOlWm^mdkiimfpdrbtatatatatact ) 4=!F+M6V@{`JnkTb{\V`NbIcMfSgYg_ecdgbi`k_k_k_k_k_iz  պ*4<"B+I5Q=w[ElfLasRVVLWHVG[J^O`T`Y_\^_]a\a\a\a\a\o ֳ!+28!>)D1{M8rV>j_DbkIXzLNOFODNCSEVJXNXQXTXVWVWVWVWVWvڬϺ&-39&{@,tH1mP6gY;`c?XoBODFF?FAD?I@LDNGOIOKPKPKPKPKP Ҵ !(.z4 r;%lB)gK-bS1\\4Vf6Nr9F;=<7<:::=;@AF>N9X3d-t& бŻ|oe^WQ LHC?$<*:0774?0G +R %_ n        ǹrf\UOJF B>;85$2*/0+6'>!HTcr ui]SMHD@= :742/,#*)&/#6?IT _krrrrr6.0526382<0B+I&S&] %h#r!|  6.1545565:3@/H+Q +[ *f(p%{#  7.246384886>3E2O 2Y0c.n+x(%"  8-5291<2<5;;8B 9L 9V7`4k1v.+(%"!$'#"!9-80=.@/A2@8=? ?I@T?^/.?-=/<2<3?4@4B4B3B3B3B3B3=*F'N%T$X&Z)^1 a:aD`O_Y$]c)Zn,Vy/R1N3K4H4F4F3C2C3A7C9F:H:I:J9K8K8K8K8K8@)J%R#Y"^#b'g/ j8jAhJgU%e`+bj/^u3Z5V7S8P9O8L8K7G;J>M?O@Q?Q?R>R=R=R=R=R=C'M#V!^ d i%o- s7t?rGoQ%l\+ig1er5a9];Z|EyM$tX+pd2lo7g};c?`B]D[EZFYGZI\J]J^I_H_G^E^D^D^D^D^DH$S ^gov#}+4 <DK!T)z`1tl9ny?kEhIeLcMbNaNbOcPdOdMdKdJcHcFcFcFcFcFJ#Vakt|")3 ;CIQ%څ\1~g:xsCtIpNnRkTjUiTjUjTjRjPiNhLhJgHgHgHgHgHM"Ydnx!(2; BGؕK$ΏX0ʼnc;nD~zLzRwVtYrZqZqYpWpUoSnPmNlLjJjJjJjJjJO![gr| &09@ ڣ<ΞG"ĘT0_;jEuNTZ}]z_x_w]vZuXsUrRpPoNnLnLnLnLnLQ ^ju#.7ݩ:Ь7ƦD Q.\:fEqN~V\`bb~`|]zZxWvTtQrOqMqMqMqMqMS`my(.Ժ"ȵ3AM,X9cDmNyV]b{dudxb|^~[}XzUxRvPtNtNtNtNtNVcp}ؾ 0 >J*U7`BjMvU]wboejembr_v\yY{V}|S~zQxOxOxOxOxOXfsֳ, :F&R4\?gJ~rSu[l`ed_dbbh_m\qYtVvTwRy}Oy}Oy}Oy}Oy}O\jw֫θ'6C#N0Y;~dFtoOk}Wc][`UaV_^^c[hYlVnTpRrPrPrPrPrP_n| ٥бȾ'3?K*V6ua@lmIc{QZVRZM[LZSZYY_WcUfShQjOjOjOjOjOdr ҫʷ)6 >H$wS/n_9djA[yHRӋNKϢQFRCRITOUUTYS]Q_PbNbNbNbNbNix զͲþ(3<}FtQ'k\0ag8Xt>OCHFCG=G@KEMJNONSMVLXKXKXKXKXKoڠϭƸ%/8v@nK#fU*_a/Vm4M~8E;A;=:8@>A?C?C?C?C?C?֣̰º}u% m-f5`>ZGTQN["Fi%>y'6)/*,*,)/,1042649595959595۟Ϭŷw pjc& ]-W6R>MGGQA]9k2}* #! !& (!)$+&.(.(.(.(.(ѩǵuld \WQ$L, H4 D< ?E;O4[,j%~!"""""Ԧɲui`XR LGA ='9.561?,J%W g }         ˰xk_UNID ?;74"0),0(8#AN^ rö|nbWLGB>:6 30-)#&)"19DRdxrfZPGA=962/ ,*'$!#*1; GUcq-1*5-5-7+;'A!HR]iu.1,4/305.9*?%FP[ gs  /1/2213327.<*D"MXdp }    00205/606439/A)J!Ua m y          105-9,;-:0865=0F(Q'] %h #t    3.9+=)?*?->1;87B5M 4X 1d/o,{)'%#!  6,<(A'D'E)D-B4@> @H ?T=_:j7u420.,+**(%#')+,,,,9)@&F$J$L%K)K0J: JE JPH[EfBq?|<:766531,'!,#0$3$5$6$7$7$7$7$<'D$J"O!R"T&U-S5 S@ SKRWObLmHxF C!A!@!?!>!< 9!4%5'9)<*>*?)@)@)@)@)@)?%G"OUX\$^+]2]< \GZRX^UiQt!O#L$K%J%H%G$E$A)?,A.D/F/G/H.H-H-H-H-H-B$K SZ_d"g(g/g8 eBcM`Z]e Zq$W~&U(S*P,O-M-M-K0I3K4M4O4O3O2O1O1O1O1O1D"NW^ek n&p,q5 p>lHiUfb!bm'_y+]/[1Y3W5V6U6T7S9U9V9V8V7V6U4U4U4U4U4G!Q[bkqu$x*z1z: wDtPo]#lh*hs/f4c7b:`<^=]=\=[>\>\=\<\:[8[7Z6Z6Z6Z6JT^fov{!&-5 ڂ?~LyX$uc,qn2ny8lf=ei=i=i=i=S_iu  ՚Σæ 1 >J!U+`4j{l>{l>{l>Ual x ֗ϟƩ-;GR)]3g;qB{~HtMnQiSeRfPkMn|JqxGsuDtsBuq@vp?vp?vp?vp?Xdp} ړќɥ)8DO&Z0d9zn@rzGlLeP`R[R\ObMfJi~Gl{EnxBovApu@pu@pu@pu@[h tԘ̡ê%4 AL#W,ya5ql=jxCcI\MVORORNXL]JaGeEg~Ci{Aiz@iz@iz@iz@_l yڔϞǧ0 =HyS(q^0ii8bu>[DTHNJJJHJOITHYF\D_BaAb@b@b@b@cpԚʤ*8xDpP"i[*af1Zs7SF>J>M=O=Pg8x1.+)$(!+$.%0'1'1'1'1'ԝɩ{ne^WQ%L/G8CC >N 8Z1i+{%""%&&&&ڙ̧±}pd[T NHC$>-:56?0J*W$h |       ϤŰqeYOJD ?:6 2(.0*9#CQc z    ǮtgZNE@:61 -)& "(1; HZqxk_SH>940-)%"!*3?Oc~}ocWLC:40-)&# # ,6DUh{%4&4'4&5#:?G P\gs&3(2*2)4&7!=ENYeq~'2+0-0-1*5%:BK Vcp{*0/.1-1./2*7%>GS _kw..2+5*5+3.03+:#CNZfr ~  1+6(9':'9*6.15.?*J%V bmx          4)9%=#>#>%<);19;6F1Q-]+h )s '~ % $ # " ! !        7&=#A!D D!D%D.B7@A<:9!;!=!>!> > > > > @ HOTY^`$_+]3Y=WI UVSbQnOyNMLK J H!H!F#D%D&E&F&F%F$F#F#F#F#CLSY`dg!h'f.c7bD _Q]][hYsX}!V#U%T'R(Q(P(O*M+M+M*N)M(M'L&L&L&L&FOV]ejmo"o(n1l? jLgXecbn"`x&_)]+\-Z.Y/W/V/U0U/T.T-S+R*Q)Q)Q)Q)HRZa iosuww,v; sHpTm_ ki%is)g~-e0c2a4`5^5]4[4[3Z1Y/X-W,V+V+V+V+KT] e msx{~ˀ(7 |DyPv[!se&po+nz0l3j6h8f9d9b9a7`6_4^1\/[.Z-Z-Z-Z-MW_ i q x }Ղ͆É$4AM~X!{b'xk-uv2r6p9n;l=j=|h<{g:|e8|d6}b3}`1}_0}^.}^.}^.}^.OYblu |փΈō 0>JT _'h-|r3y}7w;~u>yr?up@sn?rmlp;nm9pk6qi4rg2se1se1se1se1T^ ht}Ն̎”*8 DOY%c,}l2ww7r_AZBWAW?\~=`y:bu8er5fp4gn2gn2gn2gn2Yeq}ֈ̑™ !1=IzS t]'ng-gr3a8\S5A6F5J4M3O2Q1Q1Q1Q1fs߃ґǛztn.h; bG\SV_Pj Kw%E(@+<,:,8-7/<0@0D0F/H/H/H/H/l|ٌ̘âshc%^4YA SNNZHgCu>φ:Κ!6˳"4!2$/'2)7*:+<+>+>+>+>+tѕǠ{la[U,P:LGGT Ba>o962/,((,"0#2$4$4$4$4$~א˝rdZ TO%I1E<@I;V7d 2t .+('""%(****ދϛŦvi\RLGB'>19<4G/U*d%w!    ӘȤyk_RID?:6%2..8(C"Qbw   ʣ{maTJ@;61-) %(!1<J \tìqcVJ@72-)$ ! ) 3AUmuh[OD:0)%   *8Kczm`TI?6.&" %1AUl 4"2!248>EOYeq|"2$0$0"26; BLWbo{$0'.'-&/"38?IT_lw(.++++*,&/ 4< DP\gs~++.)0'/(++&07@K Wbny/)2%4$3$1&,+(3%=GR^i t~2&6"8 8 6!3&3/08,C&N!Ydoy          5#9<=<<"<+:47>2I.T*`(k&u&&%%$#"      ! ! ! ! 8 =ABCFE'C/@9=D9P6[4g3q3{2210/.-- , *((*+,,,,;AEHKNN#L*I4F?CK@W?c>m >w > = = <;:997544555555>EILRVVT%Q-N8LEKRK] Jh IrI{HGGEDCB@?==>>====AHMR Y\][Y%W1W?WL VX UcSmRvQPONMKJIGEEEDDCCCDKQ W ^ aba_b,b;aH _T^^\h[qZ{XW V"T#S#Q#P#N#L"L!K JIIIIFNT\b f gghk(k7jD hOfZddbmaw _#^%]&[(Y(W(V(T'S%R$P"O!N NNNHP W`fjmopt$s3r@ pLmVl`jjhs#f}&d(b*a,_,],}[+{Z*zX(zW&zU$zT#zS!zR!zR!zR!KS Zdjotvx { {0y= wHuSs]pf np$lz(j+h-}g/zd0vc0ta.s_,s^*s\(tZ&tX$tW#tW"tW"tW"MU]gnuz}-: ~E|PyZwc!um%rw)}p,yn/um1qj2nh2lg1ke.lc,ma)n^'o\&o[$oZ$oZ$oZ$OXakszƀ)7CMW~a ~{j%zyt)uw-qu0ms2iq4eo4dm2ck0eh-ge+hc(ia'j_%j^%j^%j^%Q Zdnx̀†%4@ JT|^wg$rq)n|-i|0ez3`x4]v4[t3[r1]n.`k,bh)ce(dc&ec&ec&ec&T ]hs}ȅ !0= HzRu[pe#kn'fz,a/]2X4U}4S{3Sx1Vu.Yq,[m*]j(^h'_g&_g&_g&Wamy΃ċ,9 yDsOnYib dl%_w)Z-U0P2M2K1K0N{.Qv,Ts*Vp(Xn'Xm'Xm'Xm'[erʉ}'w5rA lLgVb`\j!Wu%R)M,I.E.D-C-E,I~+Ly)Ov(Qs'Qr&Qr&Qr&_jyІŐy t!o0j<dH _RZ]UgPs K#F&B(>(=';)<)@(D'F~&Iz&Iy%Iy%Iy%dq؁ˍpie)a7\CWN RYMdHpC~?; 8!7 4"3$7$;$=$@#@#@#@#izщƕ|k] YV.R<MHIT E` @m<{8521.,-146777rل˒ufVKH"E1B??M;Z8h4w 1Љ .Ϡ+̼* '$#'*,---~юƛ{l^QC?;%936A3O/],m)&$"  !"""׊ʙqdVJ>941'.3*?&M"]o    ΗâugZNC82-*&$"/:IZ o ơxj]PE;1*&" (4BUl|m_RF<3*"  +:NgreXK@5+" "1E_xj]QF<2*!  *<Tr20026<CLWbnz0..049@IT_kw!.",!+-0 5=FP\gr}$+&)%("),28BLXbmx((*&*$'%!',4=HS^is|,%.".!,!'" &09D NZdnw/#120,*#(,%5?IU_ i s { 2 565342'/0*:%E!P[eox59;:;<:"7+45/@,K*W)a)k)u)~))))(('&%$" ! ! " # # # 8<?? CDB>$;.795E5R6]7g7p7y77766432 1 / - , - - - - - ;@C EJ KID?%?2A@CLCXCbCkCt B} B A A @ > =<:97555555>CFKP Q N HGL,N;OGNSN] Mf Lo LxKJIHGEDB@>=<<;;;AF JQUVURSW'X6XCXNWY VbUkTtS}RQONLJIGEDCB~A~A~ACIMUZ\^]\`#a2a?`J _U ]^\g[pZzXWVTRP}O{MyKxJxHxGwFwFwFEKQY^cfee hi/h;gG fQd[cdam`v^][ |Z!yX!vV!tT sSrQrOrMrLrKrKrKG NU]dilmlop+o8nD lNkXiagjfs~d}{c!wa#t_$q]$n[$mZ"kX kVkTlRlPlOlOlOJ PXaiortsuv(v5tA sKqUo^~ng{lpwjz sh"pg$le&ic&fa&e_$d]"d[ eXfVgUgTgTgTLS\entxzz|}$|2{>yI wR|v[xtdtrmppw lo#hm&ek'ai(^g'^e%]c#^`!_]a[aYbXbXbXNU`jsy~!/;F z~Pu}Yq{bmykiwu eu#at&]r(Zo(Wm(Vk&Vh$Wf"Yc [`\]\\\\\\QXdox,~8xC sMoVk_fhbr^}~"Z{%Vy'Rv(Ot'Oq&On$Pk"Sg UdVbWaWaWaT\iu~|'v5q@mJ hSd]_f[pW| R#N%K~&H|&Gy%Gu#Hr"Km NjOgPfPfPfWbo{Äxs"o0j<fF aP]ZXdTnOzK G"C#A"@"?~!@z CuFqHnIlIlIl[hvʂ{ojf+b7^BYM UWQaLlHxD@<:987;~>y@uAsAsAs`o~ʼnzh_[#X1T=QHMS I^ EiAv=96331/2589|9|9|gxˆvdTOL(I5FBCM@Y<)977D5Q2_/m,~*'%$" !$%%%}ˍvgYK=0 ,*((6&D%T#d!uӊѣ    Љŗ|m_QD8,# !'4BSf{     ɕqcVI>3( $0 >Qf~ tfYLA6,# *9Ldxi[NC8.%  "2F`~oaTG;0&  *>Z}ugZNB8.% "7Su0.. 049@IT`lx.,,-16=FP]it}+))* -28BLXdox!(!&%&).4=GS_js{$%$""!!$ (09CNZdnv~("(&!#,5?IU_iqy+,+& (0 :DPZdmt|.0.+)(%# ,5?J U _ h q y       133 /21-(%"/9EP[dm u!}!!"!!47779 83-'&%2)?+K-V/`0i0q0y000//-,+*(&$#$$$7: :>@>8 //4,7::F;Q;[DFCA;=A'D5EBFMFWF`EiEqEz D D C A @ > = ; 9 7 5 4 ~4 ~4 ~4 = @BIKNMIHL"N1O>OIOSO\Ne Mm Mv L KJHGEC|Bz@y=x<w; v: v: v: ? BGNSVWTR UW-X:XEWOVY Ua Tj SrR|QP~O{MxKvItHrFqCpBp@p?p?p?AEKRY]_]Z]_*_6_B^L]U \^ [fZoYx|WyVvUsSpQnOlMkKjIjGjEjDjDjDCGOW_cedbde&f3e?dIcR b[~ad{`lx^vu]q\nZkXhVfTeRdPdNdLdJeIeHeHEJS]diljhjl#l0k<jFiP {hXxgatejqdsnc~jag`d^a\_Z^X^U]S^Q_O_M_M_MGKWbioqpop rr-r9}pCyoM unVqm^nkgjjpgh{dg`e]cZaX_X]WZWXXUYSZQZQZQJO\gntvuuw xx*{x6wwAsvJ otS ks\hredpn`oy]mYkViSgQdQbQ_Q]SZTWUUUUUULTaltz{{|}~~y&u3p~>l|Gh{Q ezYayb]wlZuwVtRrOpLmJkJhJeJcL_N\OZOZOZOYfqz~vr"n/j:fDbN ^W Z`WjS}tO{KyHwEuCrCoClCiEeGbI_I_I_R_mwwn if*b6^A[KWT S] OgLrHDA>~<{l@iBfBfBfVfs~sf`\$Y1V<SGOQL[ He DpA~=:7654}4y6t8p:m:m:m]n{paU QO*L6IAFLCW@b:;537":0<<=G>P>Y>b>j>r>z==<;97~6|4z2x/w-w,v,v,88<@FHGA> BD+F8GCGMGVG^FfFnEwED C }B z@ x> u< s: r8 p6p4o3o2o2:;@GNQPKHKM(O4O?OIORN[NcMkLt }K~ zJ wI tH rF oD mB k@ j> i< i9i8h8h8<=DNUXWTQSU$V1V<VFUOUX~T`{Sh xRq uQ{ rPpOmMjLgJfHdF cC cA b? b> c= c= >?IT[^]ZXZ[!\.]9\C}\Lz[UwZ] tYf qXn nWxkViTfScQ`O_M^K]I \F \D ]B ]B ]B @COY`cb`_` bc+~c6zbAwbJtaRq`[ n_c k^lh]ve[bZ_Y\VYTXRXPWMWK WH XG XF XF BGT^ehgfef g|h'xi4th>qgGnfPkfX hea ecjbbt^a[_X^U\SYRWQUQRQORM RK SJ SJ DKYcjlkkklzmvn$rn0on;kmDhlMelV bk^ ^jg [hqXg}UeRcOaL_K\KZKWKTLR MP MO MO FP^hppppqzrstot lu-ht8etBbsK^rS[q\ Xpe UnoQm{NkKjHgFeEbD`D]EZFW GU HT HT IWdnuutuwsyl{ h{d{)a{4^{>[zHXyQUxZ Qwc Nvm KtyGrDqAo?l>i>f>c>`?] AZ AY AY M]jt{zyz||ne_\$Y0V;TDQNMWJaG~k D|w @{=y:w8t8q7m7j7g8c :a ;_ ;_ Tdq{yj^VSP*M6K@HJESB^?hD!K Xgx{wj]O@3& %2?M ] n   ƇteVH;." "0>N`tyj\MA4),<Nbzԗи}n`RE9-"  '8LdqcUG;0&!4JexiZL>2'  /Gf~pbTG;/$)De +)**-2:DQ]hqy( &&'*.6@MYdlt{%#"$%)0;HT_gou}"  #,7CNYaipw}'2=IS[cjqw}#-8CMV^ekrx~  '1<FPX`fmsz#   +6@JS[biov~& $ #/:D M V ^ elt| ) '"$  (4>HQZaip x ,*)*,+' ""%/':)D*M+V,^,e-m-u-~-,+*('}%{#y!xwww/,/3884/*.1*364@5J6R7Z7b7j7r7{665|3z2w0t.r,q)p'o%o$o$1.4<BB?:68;&=2><?F?O?W?_?g?o}>x{>x=v<s;q9n7l5j2i0h.h,g+g+32:DJIGB@AC"E.F9GCGLGT}F\zFdxFluEusDpCnBkAi?f=e;c8b6a4a2a1a156AJPONKHIKL+M6~N@{NIxMQvMYsLaqLjnKslJ}iI fH dF aD _B ]@\>\;[9[7[6[67:FPUTSQOP R~S({T3xT=uTFrSOoSWmR_jRghQpeP{ bO `M ]L ZJ XG WE VCV@V>U<V:V:8>LVZYXWUW}XxY%uZ1rZ;oZDlYLjYTgX]dWebVn _Uy \T YS WQ TO RL QJ QG PEPBP@P?P?:CQ[^^]\[}]w^r_"o_.l`8i_Af_Jd^Ra^Z^]c\\l Y[w VY SX PV NT LQ KO KL KIKGKEKCKC<IV`bbaa~awcpdleie*fe5ce>`eG^dO[dXXcaVbj S`u P_ M] J\ GY FW ET EQ EN ELEJFHFH?O\effffxgqijj fkbk'`k2]k;ZkDXjMUjURi^OhhLfs Ie Fd Cb A_ ?] ?Z ?W ?T ?Q?O@M@MDUbkjjjjtmkocq^r[r#Xr.Vr8SqAQqJNpSKo\HnfFmqCl~ @j =h ;f 9d 9` 9] 9Z9W9U:S:SK\hponnoqrgu\xVySyPy)Ny4Ky=IxFGxPDwYAvc>uoL<V9a7~l4|z2{/y-v+t+p+l*h+e+c,`,`\kvzyxxxyl}^SF>;9(725<4F2Q0].i,w)'%#}#y#u"q#n"l$i$ies~}~thZNB5/-+*)5(?&J$V"d!r{xusso}}pdWJ>1$ +6AN\l~  ~~zyl`SF:.!  *6CRbtui]PC6*)6DUg}sgXJ=0$ '5DXmdžĥzk\NA5) "2DZto`QD8,"  -B\zteVH:/$(>]{m^QC7+$<[('&')08CP\dmt{ %$##%+3>KV_hov| "  %-9FQZbipv} )4@KT\djpw} $/:DNV^dkqw} )3>GPW_ekqw~  #-7AIRY`flsy   '1;DLT[bhnu}  +5>GOW^dkr{"  $ /9BKSZahpx}{y y x x $ $'&"*4 >"G#O#V$^$e%m%u%%$}#z"x usqppoo'!&031.*# &)%*0,:-C.K.S/Z/b/j~/r{/|y/v.t-q+o)m(j%i#h ggg)'09;:74002!4,566?7H~7P|8Xy8_w8gu8ps7zq7n6l5i3g1e/c-a*a(`&`$`$*+8ABA?<99;<)~=3{><y>Ev?Mt?Ur?]p?en>ml>wi=g<d;b:_7]5\3[0Z.Z,Z*Z*,1>GGGEB@A B{C%xD0uE9rEBpEJnERlEZiEbgDkeDubC`B]A[?X=W;V8U5T3T1T/T/.7DLLLKIFHyIuJ"qK-oK7lK@jLHhKPfKXcK`aJi^Js\IYHWFTDRBQ@P=O:O8N6N4N4/=JPPPPNLyNsOoPlQ*iQ4gQ=dQEbQM`QV]P^[PgYOqVN}SMQKNILGKDJBI?I<I:I8I82BOTTTTSzRsTmUiVfW'cW1aW:^WC\WKZVSXV\UUeSToPS{MRKPHOFLEIDGDDDAD?D=D<6HTXXXXXtXmZg[ c\`\$]].[]8Y]@V]IT\QR[ZO[cMZmJYyGXDVBT@Q?O?L?I?F?C?B?A=MY\\\\}\o^g`aa\bYb!Vc+Tc5Rc=PbFNbNKaWIaaF`kD_wA]>\)H(S&~_$}m"|} {xvrnjgdbbdrutsrvsku_yR}H<0& #"# -7AMZhx|wtpnlkn{{yx}xryf}ZNC8,  $.9 E Raq~zxwvy~{nbVJ>3($/;HWh{wk_RG;0$ $/<K]pth\OD8,!  !-<NczsfYJ=1%+;Pg҄Ϩ|l]NA4) );RnqbRD7+  %;Utyj[M@2&  9X|&###'-6BMW`hpv}#!"'0=HR[cjqw}!+7BLU]dkqw}&1<ENW^dkpv}  !+5?GPW^ejpv}  %/8AJQX_ekpw~  )2;DKSY_ekry #-6>FMT[agnu} &09AIPW]cjrz~|{{{    *4 < D L SZahpy|y w u srqqp "  %/8@HOV]e~m|vywtromkihhg g %*,+(% "+$4%<&D}&L{'Sy'Zw'bu'js'sp'~n'l&i%g#e!ca``__ .3431.*(*,'|-0z.9w/Au/Is0Pq0Xo0_m0hk0qi0|f/d.a-_+])['Z$Y"YYX )69:98531 }3x4#u5-r66p6>n7Fl7Mj7Uh7]f7ed7ob7z_6]5Z4X2V0T-S+S(R%R$R#!0<>??>;9{9v:r; o<*l=3j=;g=Ce>Kd>Sb>[_>c]=m[=xY<V;T9R7P5N3M0M-M+M)M(%6ACDDC@{>u?p@lAiB'fC0dC9aDA_DI^DP\DYZCaWCkUBvSAP@N?K<I:H8H5H2G0G.H-*;EGHHG~FvDoEjF fGcH$`I.^I6\I>ZIFXINVIVTI_QHiOHtMGJEHDEAD?C<C9B7B4B2B11AIKLLKzKpJjKdM `N]N"ZN+XO4VO<TODROLPOTNN]LNgIMrGLDKBI@G>D>A=>=;>9>7>66FMOOOOvOkOdQ^SZSWTTT(RT1PT9NTALTJJTRHT[FSeCRqAQ~>P`D<`M;`V9_a6^m4]z2\0Z.X-U-Q,N-K-H-F-EJXZ[[[u[k\__WaNdEg@g=g;g&9g/8g76g@4gI3fS1f^/ej-dx+c)a'_&\&X&U&Q&O&M'LR__`_|_q_ha\dSfJi@l7o 4o2o!0o*.o3-n<+nE)nO(mZ&mg$lu"j ifc`\XVTRZddddxdndeeYiOlFo;r0v)x'w%w$#w-"w6 w@vJvVuctrsqnkgda^\[djjihuhliakVoKrAv7y,} &09DP~^ }m |zwtp l i g e dmpon}mrmio]rRvFz<~2''2<IWfx~zwspnmxwutzspsewY{NB7-" (3@N^o|zy~|zzzm}aUI>3( )5BSf{vi]QF:/$ (5EXntg[OC8-!  %5H_yĘsfZK>1%"3Ie~n^O@4( 3LjvgXI;.! 4Pq"  #*4>IS\ckqx~#.9CLU]dkqw}(3=FNW^ekqw} #-6?HPX_ekpv} '09BJQX_djpv}  !+3<DKRY^djpw%.6>FMSY_ekqy  (19@GNTZ`fmu~~~ "+4;CIPV\biq{|ywvttss   &/7>ELRY`g}o{ yx vsqomkjiii   *2:A}H{OyVw]uesmqwnljgeca ` ``` $&%# %|.y6v>tErLp Sn Zl bj kh uf ca^\[YXXXX )+--*(%" {#w$!s%+q&3n';l(Bj(Ih(Pf)Xe)`b)i`)s^)\(Y'W%U"S!RQQQQ(/2331/|-x+s+o,l-'j.0g/8e/?c0Fa0M_0U^0]\0fY0qW0}U/R.P,N)M'L%K"K KK/47887}4w3q2m2i3f4$c5-a65_6<]6D[6KY6SW6[U6eS6oQ6{O5L4J2H/F-F*E(E%E#E!$59;<<;x9q7l8g9 c:`;"];*[<2Y<:Wl<f>a?]@Z@WA(UA0SA8QA?OBGMBOLAWJAaGAlE@xC?A>?<=9<7;4;1<.<,<+1=ACCDxCpBgBaC[EWETFQF%OG-MG5KG=IGDHGMFGUDG_BFj@Ew=D;C9A7>7;786673717/6BEFGGuGlGaG[IVJQK NLKL"IL+GL3EM:CLBBLJ@LS>L]R7=R?;RH9RQ8R[6Qf4Ps2O/N-L,I+F,B,?,<-:-9BJMNNxNnOdOZRSSKUDX?X=Y;Y$9Y,7Y46X<4XE2XN1XX/Wd-Vq+U)T'R%O%L%H&E&B&@'>IOQRRtRjSaTWVPXGZ?]7_ 4_2` 1_(/_0._9,_A*_K)^U'^a%]o#\~!ZXUROK H F DQTVV|VqVgW^XTZL]C_:b1f+g)g'g#&g,$g4"f=!fGfRe^dkc|a_\YUROMKYZ[[x[mZd[[\Q`Hb?e6h,k!o ooo&o/o8nBnMmZlhkx i g d a ] Z WUS_``_t_j_b_XbMfDh;k1o'rux y x x( x2w<wGvTubtrrpmifc_]\ffe}dqdhd_eThIl?p6s,v"z} !+5@M\~l}zwspljgfmlkyjoigi[mPqEu:y1|' ",8ETey{xtsqtrqwooocrWwL{@6,!  #.:J\p}{ywxvly_~SG<1'".=Od}vi\PD9.# !/@Umtg[NB8-" /C\y؜th\L>1%  -EdsdTE7).Hj '1:CLU]elrx~!)3=FOW_flrx~$-7@IQX_fkqw~  (1:CKRY_ejpw~ #,4=DLRX^djpw &/7?FLRX^dipx!)19@GMSX^djrz$,4;BHNSY_fmv}{yyxwv '/6=CIOU[b~i|rz}xvsqpnmlll !*28?~E|KzQxXv_tgrppzmkigecbbaa %|-y 4v ;t Bs Hq Oo Vm]kfiofzda _ ] [ZYXXX ~ zv s)p1n8l>jEhLfSd[bc`m]x[YVTRQQP P P "%''%}#x urnk%h-f 5d ;b!B`!I^"P\"XZ"aX"jV"vT!Q OMKJJIII#(+,,~+w)r'n%j$ g%d&"a'*_(2](9[(?Y)FW)NU)VS)_Q)hO)tM(J'H&F#D!DCCCC)-011y0r.m-h+d, `,]-[.'X./V/6T/=S/DQ/KO/TM/]K/gI/rF.D-B,@)>'>$>">>>$-145~5u5n3h1b1^2Z2W3T4%R4,P54N5;M5BK5II5RG5[E5eC4q@4>3<1:/9,9)9'9$9"9 +1589z9q8j8c5]7X8T8Q9O9"L:*J:1H:8G:?E:GC:PA:Y?:c=9o;9}987654414.4+4)4&5%059;<w<n<f<]:X<S=N> K>H?F?'D?/C?6A@=?@E=?Mn5>|3<1;08.6/3/0/-0+0)59=>?t@j?b@X@RAMBHCEDBD@E$>E,=E3;E;9EC8EK6EU4D`2Dl0Cz.A,@*=):)8*5*2+/+.9>@B|CpCgC_CTENFHHBI>JBDFxFmFdG[GQJKKDL=O7P 4Q2Q0Q&/Q.-Q5,Q=*QF(PP&P[%Oh#Nw!MKHEB?< 9 8CFIItJiJ`JXKNNHOAQ9S0W,X*X(X"&X*%X2#X:"WC WMVYVeUtSQOLHEB@>IKM~NqNfN]NUOLQES=V5Y,\#_ ___%_-_6_?^I^U]c\rZ X V S OLIGENQRyRmRcRZRRSIVAY9[0^'behhg g(g1 g: fE fPe^dmb`^[WTPNMUVWuWiV`VXVPXE\=_4b+e"hk oppp"o+o4o?nJmXlhkyifc`\YWU\\\q[g[^[V[K_Ac8f/i&mpsvx xyy$y.y8xDwRvbussqnjfca_bbzan`e`]`RcGg}3)  (5FZqw~uvtkv^{QF:/%(8Le}uh\OC8-"  );Sn̒ȿth[OB8-" *@[{wl`PA1$ )De%,4=GPX_fmsy%.8AJRY`flry   )2;DLSZ`ekrx $-5>FMSY_djqw '08?FMSX^cipx"*29@GMRX]cjqy %-4:AGMRX]dks~~|{z (/6<BHMSX_fn}x{ywusrqppo "*17=C}I{NyTx[vbtjqtomkihffeee ~%{,y3v9t?sEqKoQmXk_iggqe}ca_]\[ZZZ  ~{yu r(p/m5l;jAhHfNdUb]`f^p\}YWUTRRQQQyus q m j $h+f2d8b?`E^L\SZ\XeVpS|QNLJ I IIII  !!x rnki eb `(^/\5Z<XBVITQRYPcNmKzIGDCBBB B B !%&{'s&m$h"d a^[Y %V!,T!3S"9Q"@O"GM"NK#WI#aG"lD"yB!@ ><<<<<<!')+w+n+h)c'^&[%X%U&R'"P')N(0L(6J(=H)DG)LE)UC)_@(j>(w<':&8$6!66677 &+-~/s/j/d.^,Y+U+Q, N,L-J-&H.-F.4D.;B.BA.J?.S=.];.h9-u6,4+2)1&1$1!122%*/1{2o2g2`2Z1T0O1L1 H2F2D3$B3+@32>39=4@;4H94Q73[53g32t11/0-.++,),&-#-!.).24w5l5d6\5V5O5J6F7B7@8>8!<8):9099679>59F49O28Y08e.7s+6)5(3&0&-'*(((%)#-257t8i9`9Y9R9I:D;@<<= :=8>6>&4>-3>41></>D.>M,=X*=c(m?c?Z?R@JACC=D7F0H,J*J(J &J'%J.#J6"J? IHISH_GmF~DB?<9642;?AvBjB_BWCOCGEAF:H3J,M$P !Q QQ#P+P3P;PEOPO]NkM|K I F B?<:8@CErFfF\FTFLGEH>J7L/O(RVXXXX'X/X8 WA WL VYUgTwRPMIFC@?FH|InJbJYJQJJJBM:O3R+U#X[_ ```"_*_3_<^H]T\c[sZWUQNKHFLMwNjN_NVNONHO>R6U.Y&\_b eg hhh$g-g7gBfOe]dnb`]ZWSQORSrSfS\RURNRDV:Y1])`!cfiln oppq'q1q<pHoWnil|kge`]ZYY|YnXcX[WTVJZ?^5b,e$iloruwx yz{ |)}4|A|Pzbyvvtpmhfd_w_k^b][\P_Ec:h0l'psv y| !,9HZo~{xtpfseiccbXeLiAn6t+x!|  #/>Qg}mrkkialTqHv<|1& "1CZu|ttrkt^yQE9.# #4Kg|v}i]QD7,! $8Rrvk_TG;-"&>] (09BKS[agmsz !*3<EMU[aglry  %.7?GNU[`fkqx  )19@HNTZ_djpx#+3:AGMSX^djqz &-4;AGMRW]cjr~ (/5<AGLRW]dlw~{yxvvuts #*06<AGL}R{Xy_wguqr}pnlkjiihh~%|,z2x8v=tBsHqNoTm[kcimfxdba_^]]^^| xvt!q'o.n4l9j>hDfJdPcWa`_i]u[YWUTTTTT { v sp nki#g*d0b6a;_A^G\NZUX^VgTsQOMLKJJJJ {snjh gda_&],[ 2Y 8W >V ET LR TP ]N gK sI F D CBBABBumhc`_]ZX"U)S/R6P<NBLJJRH[FfCrA?<;: : :;; {!p!h!b ^ZXUSPN&L-J3H9G@EGCPAY?d<p:8643445 5 !$v%l&d%]%Y#U!RO L J G!#E!*D"0B"7@">?"E="M;"W9"b6"n4!}2 0...//0 %'s)h)`)Y)T'P%L%I%F&C&A'!?''>'.<(5:(;9(C7(K5(U3(`1'm.'|,%*$)!()**+$(}+o,e,],V,P+K*G*C+@+=,;,:-%8-,6-25-93-A1-J/-S--_+,k),{'*%(#&##$!%&&"(+y.l/b/Y/R/M/F/A/=0:1 715242#22)120/27-2?,2H*2R(2]&1j#0y!/ -+(% "! "&+/v1i2_2V2O2I2B3<4854617/7.7 ,7'*7.)75'7=&7E$7P"7[ 6h5x42/-*'$"*/2r4f5\5S5L5F6>7984:/;+< )='=%=$$=+"=2!=:=C4?.A'D GJ JJJ%I,I4I> IH HT GaFpEC@=:74 29<u=g>[?R?J?D?>?7A1D*F#ILP Q Q Q!P(P0P9ODOPN]MlLIGD@=;8>@pBcBXBOBHBBB;C3F-I&LOR UX XXX$X,W5W?VKVYUhS{ROLHEB@D|ElF_FUFMFFE@F8I0L(O!RVY\^ __``'`0`:_F_T^d\vZYUQNJIJuKgK[KRJKIFI^C\J[QYYWbUmSzQOMLKKKM w pkhe ca_]%[*Z0X5W:U@SGRNPVN_LjIwGEDCBBCC zphc_ ]\ ZXV!T'R-P2O8M=KDILHTE^CiAv?=<:::;; tjb]YVU T Q O M $K *I 0G 6F <DCBK@T>^<j9w7 5 4 33334 }oe]XSPNL JHF!D'B-@3?9=A;I9R7\5h2v0.,+ , ,-.xk a!Y S NKHFCA?=$<*:1877>5F3P1Z/g,u*(&%&'( ( u"h#^$V$O#J#F!C@= ; 9 7!"6!(4!.2"51"</"D-"N+"Y)!e'!s% #!  "#$#q%d&Z'R'L&G&B%>$;%8%5&3&1&0&&.',-'3+':)'B''L%'W#'d!&r%#!"}&n(a)W*O*I)C)>)9)5*2*/+-+,,*,#(,*',1%,8#,@",J ,U+b+p)(&#  %z)k+^,T,L,F,@,;,4.0/-/*0 '1%1$1!"1'!1.161>1H1T0`/o.-*'%"$)v,g.[/Q/I/C/=/8011-2)4$5 6677%7,746<6F6R5_5m 3~ 2 0- * '$"(,r/d1X2N2G2@2;253/4+5&7 :< <<<"<)<1<: 48536-7(9";>A C C C B&B-B6B?AKAX@f>w=;952/-2z5j6\8Q8H8A7;76819*;$>@CFI JII"I*I2H;HGGTFbEsDB?;8637u9e;X;N;F;?:::5;->'@ CFI LO PPQQ%Q.P7PBOON^MpKJFD@<;<o>`?U?K?C>>=9=1@)D#FJM PSUV WXY!Y)Y2Y=XJXZVlURQMJEB{BjC\DQCIBBA>@5C-G%KNQ UW[]^ `abc#d-c8cEbUaf_}]ZVSPMtHdHXHOGHFCE:H1K(P SWZ^`dfgi jkmn&o1o>nNmakwifd_\YmN`NUMNLIJ?L5Q,U"Z^aehjnqrtv wy{~)6~F|YzoxtqliehT]TUROPFR;W0\&afimqtwz}!-=Qgxte[\YWWNYA^6d+i ot w{ $3G^zda__W`Jf=l1s&x~ (;SphgagTmHs2& 1Nq  (09AIQX^djpv~  "+3<CJQW]ciov~ &.6=DJPU[agnv (07=DIOTY_fnw ")07=CHMRX^foy|zz $*17<AGLQW^gq}}zwtsponn%+17<}A{FzKxQvXt`rjpumkigedcbc{ xwu t&s,r1q7o;m@lFjLiRgZedcoa}_\[YXXXYxsomkih"g'f-e2c7b<`A^G]N[UY_WjUwSQONMMNO~tmiec a_^]#[)Z.X3W8U=TCRJPRO[MfKrIGEDCCDEvkd`]ZX WUS R%Q*O/N4L:K@IFGOFXDbBp@><;;;;<| o e ] X U SQ ONLJ"I'G,F1D7C=AD?L>V<`9m7|6433334 vi_XRNL J I HEDB$@*?/=5<;:C8K6U4`2m0|.-,+,,- qd[SMIFDBA ? = < !:'9-745:3B1K/U-a+n)~' & %%%&& }m`WOIDA>=; 9754%2+01/8-@+I)S'_%m"}   !yi]SLE@=:7531/.",(*/)6'>%G#Q!]k{  uf Z!P!H!B!=!9 5 2/- + ) ( &!&%!-#!4!!< !E!P!\ jzq c#W#M$E$?$:$6#2#-$*$(%%%#&"& &$&+&2&:&C&N&Z%h$y# !   n#`%T&J&C&<&7&3&/')(%)"*+ +++"+(+0+8+A+L+Y *f )v '&#   |#k&\(Q)G)@):)5)0),*&+#,.0 0111&1-15 0> 0I0U/c.r-+(%""x'g)Y+N+D,=+7+2+.,),%. /146 6 6 6#6*626;5E5R4`3p21.*'%"&s*c-U.J.B.;.5.0.,.'/"1368< <<< <'AK@Y?j>}<;751.{0i3Z4N5D4<47323.3'5!8;=@CFG HIJJ'J0J:IFIUHeFzDB>;86u5d7V8J8A8:76625+8#;>AD GJMN OQRS"S+S6SARPQaOvMJIDB>n;^<Q<G<?;::69.;'>BEI LORUWX Y[\^&^0]<]K\\ZpXVRPKIh@YANAE@>>;=3?*C"GKO RUX[^`ac dfh j*j6iEhWfkda^\VTbFUFKEDD@B8D.H%MQU Y]_cfiklnp rtw#y/x=wOuds~plig`\LRKKJFG>I3N)SY] aeiloruwy{~ &5G\v~yvpYRRPMNEP9U.[#`f joswz}+=SmYXUUMVA\4c)iou{~!2Hc]]V^Jc?j3p'w~ '=XyaeUkJq@x4),Hi  $-5=ELSY^djqy'/7?FLRX]bhox!)18?EKQV\bhoy #+28>DJOUZ`gpz~}| %+28>CHMSY`hrytqoo&,17<AFLRY}a{jyuvtqolhfed }|{ z&y,x1w7u<sAqFpLnSlZjdhnf~dba_\ZZZxtqomkj!j'i,i1g6e;d@bFaM_U]^[hYwWUTRQPPP|rlheb `_^^"](\-[1Y6W<VATHSOQYOcMqKJHFEEFFqhb^[XV UTSR#Q(P-N2M7K=JDHKGTE^ClA|?=<<;<>wi`ZURON LKJI H%G*E/D4B:A@?H>Q<[:h8w6543346oc Z S MJHFE CBA@">'=,<1:79=7E6N4Y2e0t.-,+,,.zj ^UMHD A ??=<:97$6)5.342;0C/L-W+c)r'&%%%%%u fZPIC>;98 8 6531!0'/ ,- 3, :* B( L& W$ c" r   qbVLE?:74321 /-,*%)+'2%9#B!LXet   m^SIA;730.,* )'&$##)!07@JVds {i[OF>840-*'%# !  '.5>IUbr       wfXLC<61-)&"      % , 4!< G R _ntcU I!@!9!3!.!* ' #!"#$%%%%"&) %1 %9%C%O$\$k"}!p_!R"F#=#6#1#,#(#%#!#%&(* * ** *&*.*6*@*L)Y)h(z&$!l!\$O%C&;&4&/%*%&%#%&()+ . 0000#0+03/=/H/V.e-x+)&$ z!h%X'K(@(8(2(-(('%'"'*+- 034556 6(505:5E4S4c2v1/-)&$u%c)T*G+=+6+0*+*')$)+.02 589 :;<<$<-<6? @BCE D)D2D>CKB\Ao?=:942i/Y1K2@28120./+.$0369 ;>ADFH IKMN$N.M9LGKWJkHFCA<:c4S5G6=56413.1(3 7:= @CFIMOPR TVXY)Y4XBWRVfT~QNKIC\:N:C:;96735,7#;?C FIMPSVXZ\^ `ce#f/e<dLba`x]ZVTQV?J?A>;<7:0<'?DI MQTX[^adfhjl oru't5sEqYoqmiea]REHDAB=?6A+F!KP UY^adgjnpruwz|  -=QjzvqlOJHHDF=G1L&RX^cgkoruy|~ $5Ia}OPKMDM8S,Z `g mrv{ *>WuSTMTAZ6a*gnu|3Lj‘W\LaAg6n+u|(A`ڻ  (08?GNU[`fls{ "+2:AHNSY^eks} $,3:@GLRW]ckt}| &-39?EJPU\ckv{urq  '-38>CHNT[cmy~{ytnigf !'-27<}A{FyMwTu\seqqomkhea^]\|ytsrqp!o'o,o1m6l;j@iFgMeUc_ai_w][YXURRR|snife cbba"a'a,_1]6\;Z@XGWOUXScRpPNLKIHHH|pga]ZXW VUTS"S'R,P1O6M<LBJIHSG^EjDzBA?>>>?rf]WSPNL JIIHH#G(F,D2C7A>@E>N=Y;e:t8764467zk_VOJGECA A@?? >$<);.:48:7A6J4U3a1o/.,,,-/sdYOHC?=;:9 8776!5&3+2017/>.G-Q+^)m(&%$%%'n`S J C = 9 6543 210/.#,(+.*4);'E&O$["j!{!|i [ OE>94 1 / . -, +*)'!&&%,$2":!CMZhzwe WKB:50-*)( ' & $# "  $ * 1 9 B N Z hys bTH?72-*'$#"  #*1:DO\ j z   o^QE<5/*'#!!(/8 A LXfw  k[MB92,($!  % , 4=HUdt |hXJ?60*%" " ) 1 : ERas wdUG<4-(#  !#$$$ $'$/$8$B$O#_#p!s`QD : 1 + & "! #%' ()**$*,*5*@)M)\(n&%"n\M!A"7#/#)"$" !  !#% '*, -/00!0)020=/J/Y-l,*'&!i X#I$=%4%,%'$#$ #"#%( *,/13 4677&7/696F5V4i31/,*&c%S'E(:(1(+'&'"% $&(+ -/2579 ;=??"?+?6>C=R@B DGII'H2H?GNE`CxB?<97W.H/=/4/-.),'*!,/2 58;>ADFIKM PRU"T-T9SIQ[OsMIFB@Q3D4:322-0+.$037 ;>ADHKNQSUXZ ]`b'a4`C^V\lYWSPJK8@88725/3)4 8<AEILPSWZ]_bdgjmq r-q<oOmeifb^XG>>=8;58.9$=CHMRUZ]adgjloqtx{&5G]|zxsohDC>A;>5>)DJPV[`dhkorux{~-?Vr{EHAECHNU]g}t{xusleb`_}{zzy"x'w,w2v7t<rApGoNmVk_ikfzedb_YVUTxqnkj hgff"f'f,e1d5b:a@_G]P[YYdXqUTRRMKKJ}qhc_]ZY XXWW"W'V,U0S5R;PAOIMSK]JjH|GEDBA@@qe]VSOMLK KKJJ"J'H,G1F6D<CCAL@X>d<u;:98778vg\SMGECA@ @@?>=#<(;,92887?6G5S4_3o10/...0n`TKD?<:876 55543$2)1.04/;-C,O+[*k)}(&&%'(yhYNE=8521/. . ---+ *%)+(1'8&@%K$W"g!y "tcTI?83/,*((' '&&%$"#(".!5 =HTcto_PD ; 4 / * ' $#"! !   %+3;ERask[L A 8 1 + & #    #)1:DP_ p  {gW I>5.(#          ! ( 0 9 D Q _ o wd TF;2+%!     '.7AN\m r ` PC8/(#   $+4?KZk o ]M@5-&!   ")2<IXj~ kYJ=3*$  '/:FUf}gUF:0("  ! #$$$$%-$7$D$S#e!{ bQB7-&  !#% (***"***4*A)P)b'x&#!]M?3 * # !$&)+- /111(111>1L0^/t,+'$#XH!;"0#(""!  "%'),/13 68::$:.::9H8[6p42/,)R#C%7&-&&%!$" !# &(+.1479<> ADE D*C6BDAW@l>;852L(>)3*+)%(!&#$' *-0369<?ADGJ MPP%P1O?MRKgIFC?;F-:.0-),%*#'(,/369=@CFILORUX\_ ^,]:[MYaW{SPKFA262.1*/',",159=ADHKORUX[^ae imp&n4lFj[gtb_[S<746/4-1'16;@EINRVY]`cehkorw {->S{lvrod:<5:27-7"<B HNTX\aeiloruy| %6Kdx;@8=4<(BIPX^dilquy}-B\|?D@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"$%&()*+-./02346789;<=>@ABDEFGIJKMNOPRSTUWXY[\]^`abcefgijklnopqstuwxyz|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mft1!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~  !""#$$%&&'())*+,--./01223456789:;<=>?@BCDEFHIJLMOPRSUWXZ\^`bdfhjmoqtvy|~' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06='D8LLTaZu`d޾fڹgִhԭiѦjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћjћj' * 06<'D8KLSaYv]`aѻa̴bƭccѻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻdۻd' * 06<&C7KLRaWv[]^Ǽ_`aıa̩cԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩcԩc' * 06<&C7JKQaUwY\]^__`ǟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟbΟb' * 06<%C6IKOaTvX\]]^_`—bȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗbȗb& ) 06<$B5HJN`SuX[\]^_`bbbbbbbbbbbbbbbbb& ) 07<#B4GIL_SsWZ\]^_accccccccccccccccc&* 17EFTOaTlYt\z_~a{cwfrhrhrhrhrhrhrhrhrhrhrhrhrhrhrhrhrh$,550 71=ADONZTcYj\o_r{buwdxsfzpi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|pi|%.4*. 5/;7G={OAvUErZGp\Im^JkaKicMheNheNheNheNheNheNheNheNheNheNheNheNheNheNheNheNheN# &-!4(;.xC3sK6oQ9lV:jYe_?da?da?da?da?da?da?da?da?da?da?da?da?da?da?da?da?da?}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww}' ) .4:#C2LCUV^hfynu{⟀ߚۖՑwwwwwwwwwwwwwww~' ) .4:"C1KCTV\id{krvzܞ~ؙϑ~īwīwīwīwīwīwīwīwīwīwīwīwīwīwīw& ) .4:"B1JCSV[jb|hmqݨtڢw֝{˒}ɯ|yͧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}ǧ}& ) .4:!B0ICRVYj`}ei޴kۭnاpԡr̛xήvФ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|ʤ|& ( .4:!A0IBQVXk^beۺfشgԮjϪnɦsЮuҡz̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z̡z& ( .4: A/HBPVVk[_aӽ`ͶcǰehʺlаtӠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠyΠy&( .4: @/HAOVUlY\^Ⱦ__a³cɬfϤmҟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟxΟx&( .4:@.GANVSkX\]^^^_Ǡb͙hЕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕrΕr%( . 4:@-G@MURkW[\]]^_`ȏe̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l̋l%( . 4:@,F?LTQjV}Z\]]^_aeŃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃjǃj%' . 4:?+F=JTPiU{Y\\]^`be}i}i}i}i}i}i}i}i}i}i}i}i}i}i}i$' . 5:?)C=HSOgUyX[]^_ac|fxixixixixixixixixixixixixixixi$'/ 5;>(@=GRNeTuX[]_`b}dwgsjsjsjsjsjsjsjsjsjsjsjsjsjsjsj#(/ 6<;(>=DQMbSpW|[^`b}dwfsiokokokokokokokokokokokokokokok#(07 96)==GFPNVT|[Xw_[tb^qe_ngalicikdgmegmegmegmegmegmegmegmegmegmegmegmegmegmegme"*%!(.#5-<5D=MCzTGuZJr]Mo`OlbPjdQhfSfiTekUekUekUekUekUekUekUekUekUekUekUekUekUekUekU!#%+2&9-~@3wJ8rQ;nW=lZ?j]Ah_BfaCecCceDbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfEbfE  !'. 6%u<*nD-jL0gQ2dU3cX4bZ5a\5`^6_`7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7^a7v' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrv' ( ,29A,K;UK_[ijsv|𖄉쓌萓匘≝ކ}trrrrrrrrrrrrrw& ( ,28@+J;TK^\gkpyy闉哐⎕ߋօzqpppppppppppppx& ( +28@+I:SL\]enm|u}朄▊ߒێ̃wsttttttttttttty&( +28?*H:QLZ^cojry~ܕؑ€twxxxxxxxxxxxxxz&' + 28?*H:PLX_`qgntyޞ}ژӒy{|||||||||||||{%' + 28?)G9OLW_^rekoߩrۣv՟}ϛèà|%' + 28>)F9NLV_]schjܰn֫sЧyʣ¸ĥŜ}%' + 28>(E9MLU`[s`dݾgֹkѳpʮué{÷ƢƘ~%' + 28>(E8LKT`Yt^aeϽhȸl³qwõ~ơǕ~%& + 28='E8LKR_Xt[_bľehlpéwƟ~Ȓ$& + 28=&D7KJQ_VtZ]_bdgkžqƘzǎŒ$&+ 28=%D6JIP^UsY\]^`cfkčsƊˆ$&, 28=$C4IHN^TrX[\\]^bfn{$%, 28="C2GHM]SpWZ\]^_aeyjutuyuyuyuyuyuyuyuyuyuyuyuyuy#%, 3 8= @2DGK[RmW}Z\^_aczftjoqntntntntntntntntntntntntnt#%,3 9<<2CFJYQiVwY\_aczetholjqisisisisisisisisisisisisis"%-4 :8;2@EHVPeVqY{]`bzeugpjkmgrfsfsfsfsfsfsfsfsfsfsfsfsfs!&.672 92?BGQO^UiZq]xa}zcvfqhmkindsctctctctctctctctctctctctct &/5.1!80=?EKNVU_Zf^l{bpvdsrgvoixklzho|dr~cscscscscscscscscscscscscs'0.'/ 6-<9CDLMTTZZ{^^vbaredohfljhiligokcrmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsmcsm',&,3)93@;JCRHyXMt]Pq`RncTkeVihWgjYemZbp[bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\bq\$ #)0$7,=2}G8wO&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysoooooooooooop' {( + 07>&I3TA_Oj\ugpw}󇚁쁦|ysooooooooooooq&}( * 06>&H3SB]Ph^rj|t|􎏂쇝鄣恨yqmmmmmmmmmmmmr&~' * 06=%G3QB[Qe`omxy𒊊돒狙䇟~unqqqqqqqqqqqqs&' * /6<%F2OBYRcblqt}}옆甎䏔مzqrttttttttttttu%& ) /6<$E2NBWSadisqy鞁嘈܍͂wrvxxxxxxxxxxxxu%& ) /5<#D2MBVS^efunu|✂ޕؒȈ~wz||||||||||||v%& ) /5;#D1LBTT\fdwkrwߡ}؝љĐ|~w%& ) /5;"C1KAST[fbxhms٨zТʞx$&) /5;"C0JARTYg`yejܶpҮvʧ}ãy$%) /5;!B0IAQTXg^zbhֽn̴sĭyy$%) /5; B/I@PSVg[{aglƻpv|z$%) /5; A.H?OSUgY{_dhmrx{#%) / 5;A-G>NRSgXz]aehmrw}#$) 0 6;@+G=LQReWxZ^adglqx~~~~~~~~~~~~~#$)0 6;@)F;JPQdVvY\]`cfkq{zyyyyyyyyyyyyy"$)0 6;@'B;HOPbUsX[]^`b{fvkqsnpppppppppppp"#*1 7<<'@;FNO`ToX}[^`b{dugpkkqgyffffffffffff!#*18 :7(>:DLM\SjXv[^a|dvgpilmgqcxa~a~a~a~a~a~a~a~a~a~a~a~ #+28 46(=9BILWScXn\v_}~bwerhnkinds`x^}^}^}^}^}^}^}^}^}^}^}^}#,43 -5(;7AEJQR[Xd\k`pycusfxoi{kl}hods_w]{]{]{]{]{]{]{]{]{]{]{]{$,1& ,3'93??HIQRWY\_yactdfpgimjkjlmgoocrq`ws]zt]zt]zt]zt]zt]zt]zt]zt]zt]zt]zt]zt$+'#*1$7/=8FAOGVMx\Qt`UpcWlfZji[gk]en^bq`_ua]xb]xb]xb]xb]xb]xb]xb]xb]xb]xb]xb]xb"$!'- 4);1B7|L.rG2nO5jU7gY9e];d__f>]i?\l@ZoAZoAZoAZoAZoAZoAZoAZoAZoAZoAZoAZoA  &-y4!q:%jB(fH*cN,aS-_V.]Z/\\0\^0Z`1Yb2Xe2Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3Wg3  "y)q0j6d<aB!^F"\J#ZN$YP$XS%WU%VW&TY&S\'R^'R^'R^'R^'R^'R^'R^'R^'R^'R^'R^'R^'i't( ~* .5'F6MHU[[nbiѼpDzu|v#$&- 39>&E5LGSZYn`~gmrxw##&- 39>%E4KFRZWm^~ekpu|x"#'- 39>$D3JDPXVl\|bglrx~~~~~~~~~~~y"#'- 39="C0HCNWUjZ{^chlrxxwwwwwwwwwww{!"'.4 9>B/FCMVShXy[_cglq~xyurqqqqqqqqqqq}!"'.4 9==/DBKTReWuZ\_cgxksqnxk‚iÒkġkġkġkġkġkġkġkġkġkġkġ !'.5 :9cInTy]djos{vxyu{r}n~ih}iyiyiyiyiyiyiyiyiyiyh%t%~' + 28@&K2V?`KkWvaiqv{~{wrmjlm}m}m}m}m}m}m}m}m}m}i%u%' + 18?%J2T?^LiYsd}nv}쁥}yrlmoppppppppppk$w%& + 17>%H1R?\Nf[phzs|쌍臖䂟~{upqsttttttttttl$x$& + 17>$G1P?ZNd]mkvw叇ۈօςzuuwxxxxxxxxxxm$y$%+ 17=#F0O?XOb_jnr|zޕؒю̋ljzy{||||||||||n#{#%+ 17<"E0N?VO_`gpnޢw֝ϘɔÑ}o#|#%+ 16TO]adrlשtΣ}Ǟp#}#$+ 16SO[abr۸jЯrȨyq""$+ 16<B-J=QNYa`qhʶov~r""$+ 1 6;B+I;PMW`_qf~Ľls{s""$+1 6;A*H:NLU_]pd}jqw~u!!$+1 6;@'G7LJS^[na|hnt{{zzzzzzzzzzzv!!$+1 7;@%D6KIR\Ym_zekrxƀÉ}usssssssssssx  $+27<=#B5HHPZWk\xaflry}ɁwnjsǗn¡lllllllllll{%,28 :8$@5FGOXUgYu]bg~lwrqylʂhʍeʙeɩeeeeeeeeee~%,3848$?5DEMTTbYn\y`|ctgmmgsc{_΄]Ϗ\Р]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ]ӯ%,33 .7$=3BBKOS[Yf]oavwe|pijmdr_x[׀W։T֖T٢T٢T٢T٢T٢T٢T٢T٢T٢T٢%,1% .5$;1A>IIRSX\^czbisfnmjrhnvcsy_x{[~}W~SPPPPPPPPPP$*&# ,3#9.?9GBPJXQ{]Wub\og`jkcfofbsh_xj[}lWnToQpQpQpQpQpQpQpQpQpQp"## *0 6*=2E:NAzVFt\JoaNkeQgiTdmVaqX^uZ[z[X]U^R_R_R_R_R_R_R_R_R_R_  &,3$:+~A1wK6qS:mY>i^@fbCcfEajF^nH\qIYuJWzLTMRNRNRNRNRNRNRNRNRNRN  "(/~6$t=(mE,iN/eT1cY3a]5_a7]d8[h9Yl:Wp;TtP~>P~>P~>P~>P~>P~>P~>P~>P~>  $}+t2l9 g@#cF%`L']Q([U)YY*W]+Ua,Td-Sg-Qk.Op/Mt0Mt0Mt0Mt0Mt0Mt0Mt0Mt0Mt0Mt0ۼ   } t'l.f4a9]?ZDXHVLTP SS QV!PY"N\"M`#Kd#Ig$Ig$Ig$Ig$Ig$Ig$Ig$Ig$Ig$Ig$} s k"e)_.[3W8U<S@QCPFNIMLLNKQITHWFZFZFZFZFZFZFZFZFZFZ[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T[(e(m* s-x2z:~C!|Q)y^1vk8rw>pBnFmIlKjMiNgOePcQaR`S_S]T\T\T\T\T\T\T\T\T\T](g'o) v, z2}9B!O*}\2zi:uu@sEqIpMnOmQlSjTgUeVcWbX`Y^Y]Y]Y]Y]Y]Y]Y]Y]Y]Y_'i'r( y+ ~18@!M*Y4f<{rDx~JvOtSsVqXpZm\j^h_f`daba_b```````````````````&k&t' |* 07?!K+W5c>oG}{NzTxYw\u`sbpdmfkghiejcjcgcececececececececeb%m%v' * 07>!I+U6`@lJwRY|^zcxgujrlpnmpiqfreqflgigigigigigigigigid%o%y& ) 06= H+S6^BiLtV^d}jznwrturwnyj{gzhvipjmjmjmjmjmjmjmjmjme$p${%) /6< F+Q7\CfOqY|ckq}wy{urokj€lzmumqmqmqmqmqmqmqmqmqf$r#}%) /5<E*O7ZDdQn]xh튂q鄌y~{yxvpnpqyquququququququququh#t#$( /5;C)M7WEaSk`tl}wሆ܅ւр~|vstu}uyuyuyuyuyuyuyuyuyi#u"$( / 4:B)L6UE_ThcpqߖyzّҌ̉ȆÄ|wyy€y|y|y|y|y|y|y|y|y|j"w"#( . 4:A(J5SE]Ueenr؝w{Зɓď|}}~~~~~~~~~~~~~~~~~~l"x"#(. 4:@&I5QDZUceګkrФt{ɝ|™m"z!"(. 49?%G3ODXU޻aeӲiqʪq{£yn!{!"(. 49>$F2NBVT_d͹gqİn{v~o!| "(. 49>"E0L@TS]cepl{szp ~ "(. 4 9> D-J?RR[bcoizpw~~}}}}}}}}}r "(/4 9=C*H=PPYa`ngymt|{vvvvvvvvvvvt"(/4 9=>)G;ONW_^lewkqy~ysooooooooooov")/59 9=)E:MLU\\jbuh~ov{̉uʕpȡlŬgghhhhhhhhhx")/56 4<)C9KJSYYg_rezj~qwypՃkӎgҚcҧ`̱``````````|")/4, 3;)A8IGQTXa\l`u{f|sklrfza؄]؏ZלWةXջX̾X̾X̾X̾X̾X̾X̾X̾X̾").,)29(?6FBONWY]b}ajufpmjvgozav~[}V߆SޑPޝP஀Q~Q~Q~Q~Q~Q~Q~Q~Q~!&)(07'=2D=NGVP\Wwb]qgbklgeqj`vn[}pWrStPtMuKtKtKtKtKtKtKtKtKt"'.4$;.A7K?TFx[KqaPlfTgjXco[_u][{_WaTcQdMeKeKeKeKeKeKeKeKeKe$+1 8(>/|H6vQ;pY?l^CgcFdhI`mK]rMZwOV~PTRQSNTLULULULULULULULULU !'-4"{;(qC,lM0hU3e[6b_8_d:]hWr?Tx@R}BOCMDKDKDKDKDKDKDKDKDKD  "){0r7 j>#fF&bM(_S*\Y,Y^-Xb/Vf0Sk1Qp2Ou3Mz4J5I5I5I5I5I5I5I5I5I5   z%q,j2d9`?\EYK WO!UT"SX#Q\$Oa%Me&Ki&In'Gt(Ex(Ex(Ex(Ex(Ex(Ex(Ex(Ex(Ex(ջ y p i'c-]3Z8W=TBRFPJNMMQKUIXG\F`CeBhBhBhBhBhBhBhBhBhyph b" \' W,T1Q5O9M=K@JCHFGIFLDOCRAV?Y?Y?Y?Y?Y?Y?Y?Y?YU)^(e* j- m2n:oCoQ#l`)ik.ex2c5b8`:_;^=]>\>\?Z@W@VAVAUATASASASASASASASASAU)^(e* j- m2n:oCoQ#l`)ik.ex2c5b8`:_;^=]>\>\?Z@W@VAVAUATASASASASASASASASAU)^(e* j- m2n:oCoQ#l`)ik.ex2c5b8`:_;^=]>\>\?Z@W@VAVAUATASASASASASASASASAV(_(g) l, p1q9rBsO#p^*lj/iv4f8d;c=b?a@`A_B^C\DZDYEXEWEUFUFUFUFUFUFUFUFUFX'a'i( o+ t0v8w@xL$v[+rg2ns7k!H.R;\JfXodڑymҌs͇xȄ{Á~}}wv|vvwpvmvmvmvmvmvmvmvmg!s !&, 27= G-P;ZJcYڟmdјumʒ~tĎy}}{€{y{s{p{p{p{p{p{p{p{ph!u !&, 27=E+N:WJݬaXӥjdʞrnØ{u{|ussssssssj v &,1 7<C)L8UIִ_XͫhdĤpnxu{xuuuuuuuuk x&,1 6;B'J6SHк]WDzecmmuu}|zwwwwwwwwly&,1 6;A%H5QG[Vcckmruz||yyyyyyyyn{&,1 6;?!E3OEYUabhlouw|{zz}z{z{z{z{z{z{z{z{o}&,16 :>D1MDVS_`fkmtt{|}yssss|s|s|s|s|s|s|s|q&,16 9:C/LBTQ\^dijrqzyytplkkk}k}k}k}k}k}k}k}t&,1529B-J?ROZ\aghpowv}}wĉqlhdccd}d}d}d}d}d}d}d}v%+1//8@,H+E9NGUT\^cgzinrpslxxf|`~[ WੀU຀S~TyTwTwTwTwTwTwTwTw~#%"-5<*B6KBTL[Vza^rgeklkdro^zsXuTwPwNwMvMrMqMqMqMqMqMqMqMq# ,39'@1I;RD{ZKtaQmfWgl[br_]ycWfShOiLjIjHhHhHhHhHhHhHhHhHh ! )06#=,F4zP:sY@n_EidIdjM_pP[wRWUSWOXLYJZGZFZFZFZFZFZFZFZFZ &,3:&wA+pK1kU5g\8ca<`g>\mAXsCUzEQFNHKIIJFKEKEKEKEKEKEKEKEK ־ !(/x6n=#iF'dN*`U-]\/Za1Xg3Um4Rs6Oz7L8I9G:D;C;C;C;C;C;C;C;C; ٷ #w*o1g8b?^F [M"XS$UX%R^&Pd(Mi)Ko*Hv+F|+D,A-@-@-@-@-@-@-@-@-߱п  v n%g,`2\9X?UDRIPNNSLXI]GbEgBm @s!>{!=}!=}!=}!=}!=}!=}!=}!=}!Һ um f _& Z,V1R7P;M@KDIHHLFPDTBX?]=b;g:j:j:j:j:j:j:j:jul e^Y! T& P* M/ K3 I6 G:E=D@BD@G?K=N;R9V8X8X8X8X8X8X8X8XN)V)\*a- b2b:`C]R]`![l%Xx(V*T+S-R.Q.Q/P/O0O0M0J0J0I0I0H0H0H0H0H0H0H0H0N)V)\*a- b2b:`C]R]`![l%Xx(V*T+S-R.Q.Q/P/O0O0M0J0J0I0I0H0H0H0H0H0H0H0H0O)W(^*b- e2e9cBaP`_"^j&[w)Y,W.V/U0T1S2R2Q3Q3O3M3L4L4K4K3K3K3K3K3K3K3K3Q(Z'a(f+ h0i7h@gMe]#ch(`t,^/\1Z3Y4X5W6V7V8T8R9Q9P9P9O9O9O9O9O9O9O9O9O9S'\'c'i* l/ m6m?mJkZ$hf*eq.b~2`5^7]9\:[;ZU>T?T?S?R?S=S=S=S=S=S=S=S=U&^&f&l) p. r5r=sGqW%mc,jo1g{5d9c`?^A]B\CYDXEXEVFUFVDVAVAVAVAVAVAVAVAW&`%i%o( t- v4w<yEwS&ta-ol4lw9i=gAeDdFbHaI^K]L\M[MYNYLZIZFZFZFZFZFZFZFZFY%c$k$s' x, {3}:C}P'z]/vi7qt=nBlGiJgMePdRaS`U_V]W\U]R^N^K^K^K^K^K^K^K^K[$e#n#v%|+ 29AM(Z1}f9xqAt|HqMnRkViYf[d^b`aa``a[aWbTbPbPbPbPbPbPbPbP]#h"q"z%+ 18?K(W2b<mE{xMvTrZn_kciehfhfgfefebf]fYfTfTfTfTfTfTfTfT_"j!t!}$* 17>H(T3_>jHtR{}[watergpinkmkmkkkjgjbj^jYjXjXjXjXjXjXjXa"l v $* 0 6=F'Q3\?gKpW݃z^c{hykvmtosprpqpologobn\n\n\n\n\n\n\n\b!n y $*0 5;D&O2Y@cMۑmWӋw_͆eǂjm}pzrysxtwttqtksfr`r`r`r`r`r`r`r`d p{$*/ 5;B$M1W?ܞaMӘjW˒s`ō|fkoruv}w}wxuxoxiwcwcwcwcwcwcwcwce q}#)/ 4:A"J/߬T>ե_L̞hWĘp`ygmqtwyzz}y}r|lzezezezezezezezegs#)/49? H-ڳR=ϫ\KŤfWn`vg~mrvy{||{un~h~h~h~h~h~h~h~hhu#)/3 8>F,ӺP<ɱZKcVk`sh{nrwz|}~}wqjjjjjjjjjv#).3 7<C*N;÷XIaVi_qgxnsw{}y~s}l}l}l}l}l}l}l}lkx#).37 :A)L:VH_Tg_ngun~sx{~~z€w{wtvmvmvmvmvmvmvmvmmz#(.25 4?'J8TG\Sd]kfsm{sw{~~yur€o|ovooooooooooooooooo}"(-123>%H6RDZQb\idpkxqv|zv}qmjg|hvhphohohohohohohor"'+-'4<"F3OBXN_Ygbniuoz~tsxn{i}d~a~_{`v`o`o`o`o`o`o`o`ou!%''4=E/M>UK]Ud^lexskq|pk˅tfɑwaǞy\ĬzY½zWxWsXnXnXnXnXnXnXnXnx!( 2:B,K:SFZPbYwi`ppeiyjc߃n^ݏqY۝sUثtQսtOsPoQjQjQjQjQjQjQjQj} ' 08?*H5P@~XIv_RofXhm^bvb\fWhRjNkKkIjIgJdJdJdJdJdJdJdJd & .5<&D/N8wV?p^FieKdlP^sTX}XS[O]K^H_E_E]E[E[E[E[E[E[E[E[ؼ # +29"}@)uJ/oT5i\:db>`iB[pEVyHRJNLJNGOEPCPAOAOAOAOAOAOAOAO   '.~5t<"lE'gN+bW/_^2[e4Wl7St9O|;L=H>E?C@AA>A>A>A>A>A>A>A>Aһ  #~*u1l8f?aH"]O$YV&U](Rd*Ok+Lt-H|.E/B1@1=2;3;3;3;3;3;3;3;3Ե} t%l,e2_9Z@VGSMPSMYJ` Gg!Dn"Aw#>~$<%:%7&7&7&7&7&7&7&7&װ̽ |rj c% ],X2T8P>NCKHINFSDXA_>e;l9s6{33333333ι{q ib\ V% Q* N0 K5 I9F>DBBF@K>P;U9Z6`4e1m1m1m1m1m1m1m1mƾ|qha ZUPL#I(F, D0 B3 @7 >: <> ;B 9F 7J 4O 2S /Y /Y /Y /Y /Y /Y /Y /Y H*O*T+W. X3 V:TERRO_LlJxG F!D!C"B"B"A#@#@#@#>#<";";":":":":":":":":"I*P)U*Y- Z2 X9VDTQQ^OkLwJ!H"G#F#E$D$D$C$B$B$@$>$>$=$<$<$<$<$<$<$<$<$J)R(X)\, ]1 \8ZAXNU\SiQu!O#M%K&J&I'I'H(G(G(F(C(C(B(A(A(A(A(A(A(A(A(A(L(T'Z(^+ `/ `6^?[LY[Xg Ur#S&Q'P)N*N*M+L+K,K,H,G,G,F,E,E,F+F+F+F+F+F+F+N'V&]'b)d. e5c>`H^X]d"[p&X|)V+U,S.R/Q/P0P1N1L1K2K2J2J2J0K/K/K/K/K/K/K/P&Y%`&e(h, j4i<gEeUcb$`m(^y,[/Z1X2W4V5U6T7Q7P8P8O8N8O7O5P4P4P4P4P4P4P4S%\$c$i&m+ o2o:nClQ j_&gj+cv0a3_6]8\:ZU?T@S@SAT?TI'ޝT5ԗ^ȂhKŋqSyY^b~e|gziyjxjwiudt_sYrVrVrVrVrVrVrVcny!',1 6<G%إR4͝\AŗeKnSvZ_cfik~l}m}lzhxbw\vYvYvYvYvYvYvYdp| &,05;ݰD$ѪO3ǣZ@cKkSsZ|`dhkmnook}d{_z[z[z[z[z[z[z[fr~ &+04 9ظA"̰M2X?aJiSqZy`eilnpqqmga~]~]~]~]~]~]~]gt %*/2 5Ѿ?!ƶK0U>^IgRnZv`~eimpqrr|o{izcy_y_y_y_y_y_y_iv %*-0/=I/S<\HdQlYt`|ejmprzswstqtkses`s`s`s`s`s`s`kx$(++, ;G-Q;ZFbPiXq_yeim{pvsrtotlrlllflblblblblblblbm{"%%* 8D+O8WD_NgWn^vc~hylspnrjsgsdrdlefebebebebebebebp~ + 7B(L6UB]LeTl[}taw|fqjkmfpbq^q\p\k]f^b^b^b^b^b^b^bs - 6@$J2S>[HbP|jWuq]ozbiÃfcj^lZmVnTmTiUdVaVaVaVaVaVaVaw , 6> G.P9XC{`KsgRmoXgx\aԂ`\ҎdWϛfRͩgO˻hLgMdN`N]N]N]N]N]N]N]{ع * 3;D)M3zU7<7:797979797979797٫θ z$ q+i3b:]BYIUQRX N_"Jg#Gp%Cy&@'=(:)8*6*5*5*5*5*5*5*5*ܦѴǿyp h& a-[3W:SAOGLNITF[Bb?k;u8~530///////Ӱɻx ng_ Y% T+ O2 L7I=FBDHAN>T:[7c3k0t.}+)))))))˸vld ]WQM#I)F. C3 A7 ?< <@ :E 8K 4Q 1W .^+e)l'r'r'r'r'r'r'rýylc\U PKGD!A%?)=-;194785=2A0F-L *Q 'V &Z &Z &Z &Z &Z &Z &Z C+H*M+O.N3 M; JEGQD^@k=w;98765543330/..,,,,,,,D*J)O*Q-Q1 P9 MCKOH\DiAu?=<;:99887643311111111E)L(Q)T+U0 S7 QBONLZHgFsCA@?>==<<;987665555555G(N'T(W*X/ W5 U?SKPXMeJqH}FED C B!A!A!@!?!=!\AZCXDXDWEVEWCX?YeCcEbGaI_J^K]K]K\J^F^B^?_<_;_;_;_;_;_;X bks z&,2 9AM#}Z,xd5so=pyBmFjIhLgNeOdPcPbQbPcLcGdDc@c?c?c?c?c?c?[enw~%+1 7?J"V,݁a6|k>wuDt~IqMoOmRlSjTiUhUgUhQhLhHgDhChChChChChC]gqz%*0 5<G ݎS,ԉ^7̓h?~qFzzKwOuRsUrWpXoYnZmYmVmPlLlHkGkGkGkGkGkG^is}$).4 :EՖQ+͐\6Ŋe?nFvL~Q{TyWxYv[t\s]r]rZqTpPoKoJoJoJoJoJoJ`kv#(-2 8ڡBϜN*ƖY6c?kGsM{RVY}\{^z_y`x`v^uWtSrNrMrMrMrMrMrMbmx#(,05ԧ@ɡL)W5`?hGpMxRWZ]`a~b|b{ayZwUvPvOvOvOvOvOvOcoz"&*.۲0 έ>ĦJ(U4^>fFnMvS~W[^acddc~]~|W|zR|yQ|yQ|yQ|yQ|yQ|yQeq}!%()պ- ɳ;H'R3\=dFlMsS{X\_bdf|fyex_wYv~Tv~Sv~Sv~Sv~Sv~Sv~Sgs #$޺!* Ĺ9F%P2YI+R6Z?bGiNyqSsyXn]i`dc`d\eYdYaZ\[W[V[V[V[V[V[VqԶ /;F'O2X;`CxgJroPlwUfYa\\_XaTaQaQ^RZSVSUSUSUSUSUSUu خϻ "/ 9C#M-~U6w]>peEjmJduO_SYȊVUƗYPæ[M[J[IYJVKRLQLQLQLQLQLQz ҳ"- 7@~I'vR0o[7ic>cjC]sGX}KRۉNNٗQJ֦RFԷSDSCQDOELEKEKEKEKEKEK լ̹ * 3~;uE!nO(hW/b_5\g:Wo>RyAMDHFEGBH@H>G>E?D?C?C?C?C?C?C٧ϳſ' /u7l@fI!aS%\\)Wd-Sl0Nt3J6F8B9?:=;;::999999999999999ѮȺ# v+ n3f:`C[LWTS\"Ne$Jn&Gw(C*?+<-:-8-6-5-5-5-5-5-5-5-ԩ˶ vm& f- _4Z<UDQLNSJ[FcBl>v;7 5!3"1"0"/"/"/"/"/"/"إͲü~tld ^' W- S4 O;KBHHEOAV=^:g6q2|/,*(((((((ϯŹ~rj b[UP%K+H1 E7 B= ?B ,;0956:4@1F-M )T %\ "e l v y y y y y y vi^VOJ FB?<9"7&5*3.02.7+<(B$H!NT[]]]]]]>+C*F+G.G3D; AD >P:]6i2u0.,+*))((''%#"" @*E)H*J,I2G9 DC AN=[:g6t420/.--,,++(''%$$$$$$$A)G(K(L+L0J7 HA EMBY>e;q8~654322100/-,+*)))))))C(I'M'P)P.N5 L? JJGVCc@o={<:987766632100///////E&L%Q%T'U,T3 R< PHMTI`FlDxB@?>>=<<:987666666666H%O$U$X%Z)Z1 X9 VDSQP]MiKuIGFE D C!C!B!@!?!>!>!> >>>>>>>>K$R"X"]#`(a/ `7 \@YMVZTfRqP|!N#M$L%K&J'I'G(F(E(D(E'E&E$E#F"F"F"F"F"F"N"V \ a!f&g- g5 d=`H^V\cZn"Wx%U(T*R,Q-P.N/M0L1K1K0L.L,M*M(M'M'M'M'M'M'P!Y`fk%n,n3 l;iDgRd_!aj&^u*\.Z1X3V5U6T7S7R8Q8Q8R5S2S/T-T,T,T,T,T,T,S \djp$t*u1 t8rApNm[#if)fp/bz3`6_9]:\<[=Z>Y>X>W>X;Y8Z5[2Z0Z0Z0Z0Z0Z0U_gou#y){/ |6 {>yJuW$qb+ml2jv6h:e=d?cAaB`C_D^D]D]A_=`:_7_5_5_5_5_5_5Xajsz"~(.4 ;G~S$z^,uh3qr9nz=l@jCiEgFfHeIdIcIcGdBd>e;d8d8d8d8d8d8Zdmv~!',2 9ߋDՆP#́[-|e4xn:uv?rBpEoHmJlKjMiMhMhLiGiBh?hǓK"V,_4h;pAxE|IzLxOwQuRsSrTqSrNpIoEnAnAnAnAnAnA_ju"%(أ-˞<H!S+]4e;mAuF}JM~P|SzUxVwVvVvQtKsGrDrDrDrDrDrDalw !ߥ!Ѩ+ƣ:FQ*[3c;kArFzJNQTV}X|X}{X|zS{xNzwIyvFyvFyvFyvFyvFyvFcnyڮ̭(8DO)Y2a:iApFxKORUX|YxZvYuUt}Ps{KszGszGszGszGszGszGep|Ӵdz&5BM(V1_9f@nFuK~OS|VxXtZq[nZnWmQmMmImImImImImIgrլ̺ #3@J&T0]8d?lEsJ{OzSuVqYmZi[g[fXfRfNfJfJfJfJfJfJiu٥а0 =H$R.Z6b=iD}qIxyNsRnUiXeZb[_Z^X_S_N_K_K_K_K_K_Klx  өʵ- :E!O+X3`;{gAvnFpvKkOfSbV]XZYWYUWWRWNXJXJXJXJXJXJo} ףήĺ)7BL'U0z]7te=nlCitHd}L_OZRVTRUOUMTOOPLPIPIPIPIPIPIs  Ҩɴ$3>I"yR+sZ2mb8gj=brB\{FWJSLNNKOHOFNGKHHIFIFIFIFIFIFx֣ͮù$0 ;yEqO%kX+e`1`h6Zp;Uz?PЅBLΒDH̡FDʲGBGAFADABB@B@B@B@B@B@~۝ЩǴ"- x7qAjKdT$^\)Ye.Tm2Ow5J8F:BWGSPOXJaFjBt >!;#8$6$4$3$2#1#1#1#1#1#1#ݛѨdzy pia'[/ U7 Q?MFINEVA^=h:s620.,+++++++ԥʰxog`Y S'N.J5 G< CC @J *@+@.?3<:7D 3O .\ *h &t # !            ;*?)B*B,A1>9:B 7N 2Z .f +r '~ % # # " !               =(A(D(E+D0A7?@ AI >U 9a6m3y1//.-,,++)('%$## # # # # # A&G$K$M&M*K2J< HF DR@^=j:u8765443310/.-,,,,,,,,D$J#O"R$R'S/Q8 NC KOH[EgBr@}>><<;;:8765555555555G#N!S W!Y&Z-X5 U? RKOWLcIoHyFEDCBB@?>====>>>>>>>J!RW[_$a+`3 ]< YGVTS`QkPuNL K!J#I#H$G%F%E%D%E$E"F!FFFFFFFMU[`e#h*h1e9 aB_O\\ZgWq!U{$S&R(Q)P*O+N,M,L,L,L*M(M&M$N#N"N"N"N"N"PX_ek"n(o.m6 j>hKeXbc _m%]w([+Z-X/W0V1U2T2S3R3R1S.T+T)T'T'T'T'T'T'S[cjp t&u,u3 s;qGnTj_"gi'es+b|/a1_3^5]6\7[8Z8Y8X8Y4Z0Z.[+[+[+[+[+[+U^fnuy$|*}0|8 zDvPr[#oe)ln.iw1g4f7d9c:bh?fAeAdBcBd=d9e6d3d2d2d2d2d2Yclu| $(ۍ/ω=ƅIU#|^*yg0vo5tw8r

|t]哸V3l]*GQ4{<9Hxh&m+&NeJ ϧz^*um"VDJk֙jm2J[WbP9[gR8^#T$.#W֙lID[xT4f ~ƴiy} 5%> stream x\mo6nA}z6O| vE$EǑc]gw=!%Q%='[I9 #G= ,Wr'9˓J3JYn*˓tMdLf?=>^A鼀Rd Z,Is&R ɲ߻:#D$ "h~.Tʥ&ѬCK$ V$s3ڙʙ*|!3#(69[;T<4;M:S:;Tis7vAPz _uÜMjVo#fYZs/ \7[<ش|^1! &?D.jӧtn2!RirYЊcKa@NiRH@d U 4PbJ!97:nQ~Io7gUpB3"=g^6`].>'C\j>g\l[6 O@}?jp tzqĹ68u?92-mO ,6_eveVY9uK3mȰZwښ3oF.6 ^G!n 0VUЬUzy2{Or\5]A yE?/3]e^Z>ɼ 5mUW[+MYƐ/ nBrV]iSXmyGE00a*N7v -SPu3I; jYN3qQ W6_ !$ ;8b&(beʛ/` AEza&CcxqV8]oR#ՊARWUEKzYt4DŽ9 JYfa 1MljL#&4cbhb%Ӯ*(fa2|d,ɳǘ\14Omd P~M^ʿ{&)Jج$'4Jٵ Yn1 dGI8vL|0bN=N?fjϓ+x`L>;+fy"C/\Ja:e-)?Z]{M Z!к'sp]O>sX$a01Wqp$F: U{`TkZOIFZ(FVֱ=Ԙz.֘ 6CxlmpC6LP0k0%.Sn"Ht> +cgA J֎.47..|E5˱ /x \JBr^ 0iqj_7{sI rC[|O;kӧDp:^j -ޝ!M^N6]%Z"L0ˇ&LX?wB㭐KVֻw3_ή= g&BNU'Z\0Q>z.a&'34ݭtcʣ+,moNRދ1Uu&j?P6)zjǾ;Wҙ55_ET1T>mCO`dpDhΏ^@/D^Ylap/9 M[C* ޼:ctr}6?/ڐ fhMhhb. *ʨL\'3}7} ETҝ_ |Y-ޟ?nc+`>,?˼)'a5ZdM J*vO ~9!9RB%WH .J1]_߶:_ 6)uɏU*Dw&< +>1]L"fGk A,/bWvӸI15ke] UJ .*-_{= s B4?wy>^/N`u img1ޑmCcR+xF%e&r[r<_.kͧJ2Ur=ɿ{yʂhBg:Yw Me퐄ɪ 5D5@ߋ\ |tTȯԮ=MRKTC$u2XwlŌrK?3ltT9ɇwpGn\[1 GIčo~z0Q wўT(&ig"X͑D~LѺ_x&(-h~~?8v Ās}Ăt15o^?#tCS ֪}GKٟMЮ_hR86|0I wC41 O{D&Rq&\,RX:5׾ٛHb*JSQ6dݎ7=`8!9yz-; 9Jqorc^"u(sKG?]{M T|F85ӌᗳkSbtD:* ۬,X2Cڽ%SYϔ^]~]ibt]]Qq_ǬNIuҵtIQ'ctR Z1Z?ß<8v}toBԇMNVQr.|ؖu]s64E@vDbGҼrΎ n~Vwe('D3LZ/GڳfpjOl} BaK'{Og.Ŝth&V`9tiIeM0uw7/{ .9>e؇U~q&,q^cjDX741瘽c.oz r>co|9;Ӄ-dWq kȺݐj0|Ҝ_3[_#*m]vY- yΔ}Q6OO.Ġ~uaJs;4t5xpuןic{Ԋ*9^wך$x)xư-l) yc-H؄uҝԻF6\s~0wjN9DZ< ūƘ9InFn;oҚ=ݳEL{>.ƾ>,yX-tYl]) endstream endobj 155 0 obj <> stream xks6g|؉I؍[wrM]&DǞ:jJMrv H%icK.ž]= cY.#KJ1*Q|?$럏^oGo`"\B/\%3^&*0i<6G21A@BPE@dCI`g=JL < M3!I݄,oԙ*izHv %ˆdv[A1>$.|>hM*=f%DPjɟtu叓UG%6.:3 _|Nôjѩ'ϫc?t_--ejvMmfS+(?MMZ$9Ö֯,:1pL]=%Ԫ?h+ k4|AHEC\֔t5BUenOwDX!=$5n ;M;Ӓ[7i9WnjOfJΛcCk<>$m5]Ok*UUՖ-Ng4@tvlB8F?$ZP <[8=r`J@Ŷ~l'P;w$ OHסm (lCiƊ_O1AU䦔OVkWD;P_)ř"J"Dmm†ܞ|b4[ .([w 2JmSFj (lEO;6mkȷ'vm`ճ2_nFvB 6ގ3!BqXp{*F@hbaiѮh¿N"n]f5pN֫!c*+XUd$ $Ic~&{i*G*-s@׉%Lʗv yva⤾羵=%Q."IUn[5.X0X=e (R;@t= &y }YdNPm] L2|-lujyzWi9fdF<B·B\,4H Q1eƶ^jEQ5`VLG@KCe%gv؅X+t>zzfeyDzuopxD'ln{?Q =;!/}H#js/mRO^3YdC >L¹WOc^[bWcGs6Nʤ `vmWۥKmKxie@0륳 S&PI|IX9Sc?Pu5d;Č+Uw _\ &zO㉏)5I#]y&ZĶ{w 6K4z ss!>bKH4 pzH{hx#]\s+U!rZI7Ċ*PXK[ y90ZnI Lc~FvF|ʝqzӂ`8V)]*,TǸcv?4QT||D,ߩLxlٙH t65׼{<.y;ܯO{z<0EW'1$Bd.rtpOnJ:I7]U)yG r=M$,? endstream endobj 156 0 obj <> stream x[msN/õXnUVM펇hKE|I}pI){yn]vGfL[B!ٟtsM4EM>o8szEV#q1^9JRժRTfv]fg|@.oau'$ہnR&_2d`8ҖQp 5Z~gxp }.ԩ.;_H#aYFmf& L=gW` Wqv6xo,y ;C Uc^\x%YYj\1 AwӸ6;AH# MM@B! *s؆A3XP֖r BwWv u&$G$"Cku^2DdA#(+?Wێ#EERW(RSP 0poTRj&M%{n_u:2 =H'OWLu::ԩ쾌GmakeqBrYƁPot/}7'"!RM6̭fsvЕ^DaUY+yMvrVݔOtMA޸]Ƿ3ۖԆRwD_sP;*0tmJ[~Q-HXau8lRtp 5g0zT]!8 "q(YɓV8A(R=aejňnM+<&>W:4w V2"ZL(KbK4:«M3EqATlJD] enp8MTfM(亏5)mA\k.?|T̓hm-"2\Wԗkgq纪2I(rJ Fx μ! @UOwF*U(c}v-h?W#4|"=d qMp5ci$9.>puxyoxV78gdZ$W`2]N0NjZMpf[zeU[m 4,Y?uf;,PM @%wku\k:%hlW}+A|Y8ޕ܃Ȳ 0cf .:IO7"'@JZH? eT$E}%V߆2$M"[4ZYjwQflaٴ8p`s:եmS,lW3Oti Tyyؓ{{?b0?N>yܱXw(E]I KEUWwY qv =l뺬ڴ94[QQaypQM 5\܄M>V:NBn&1wuf% HbPAp;O\U3S0FFHgiyi䔏Rp>U3_ <1k'A!z  nq BְB]6h1< zT/ 0 3jpk5fot+;J(/C" pϤȁӨ ă,|8Vl~˶~276ގU21⒌ (}oc5%N p_^o4FR2Ө~_.BVH71ś~o&zVgO PC,v$ endstream endobj 157 0 obj <> stream xZ_s6ߎ<H:d7I8enܛ,)RH"(]۩+Kbӓ~B$WNOXR,Q2g2WIY?=N?NO^L_NO@^$,*[ lC뼐I-D\˄vyzXIDeED7ɪ>}WJd)y^WKa(r^S<_{kyx*jWw*9B|hCAڗwDE,LPr0ʋCs<~=oV ˞٩~&!K0oca~/d:C9%i] &Bf>xyI";2<2M`:Wn;çUiO!m>ztymvïHIn[jbOKnգ\i"!0<G)!ˋ2&Ʋ /}Mv~ʾjsfI"ș iW̚vvxC@IPNոWU:ܲ"={@g m# XU PvXV^ML7òBd![y@e2t;ym_&4@[-sB[*H[l\ yX8E,ZHJ`k\ArP-4riS._CM?5. eX R&fJPHLpoZkd' :97NS 1w2Y)o% /^apn"D3ß`<}z:|.:° ,\U@B ?1*1f bҎYhr@b͂*GiXėَ,sf2y9yTej-R[']CDKU6_l q/nΣӟS@{ >Zr3BY,7Vtpc$SL A{VU^T,>w똋hHo]df8ӏ!}O #Xe8ۛH[\o-7L!bjw0~/I1Fx5Q[<(bQ fO4] n֣63۬  &%;`Ou.~4Vf- /$xb Y/v+Ys3e'z}bCI֐y,QKK.4R<'XOi_bQ<__֟IsFiG~G/^mZ(܅yb=1 Dž1cp7=.6+>מ0lo8wZX^ƼC+]Z1t7rּyhO V(hؗʔ4_*(4{ =6$LyBwYvbјa<%z5Fr/r\t=*a~1FԷb˼.CQ=lN(0uO9(D;RwJ-rSȁ)4^4MA)GPK~|lwKhy;L=M%n~N{,6b/#]~t76gy;_ioBWڋ |aB ={n?g;]DUp)QTpK:4r۞{:[)(xtrcV!mJEm,XBܥf6އynux^ܖN1Y4iV+DZ:hԇ粛t͗(>,S9G]CLVA76')Έ]MjSӖ+TR*5;n_ϑn D:4v=b펑)=!<"Ww'u{v<(KS:0A\ȼ_)"9W ]]?U :|I߾#%ҫM1=EsEm,󡹪b/KT>٤' /]* H#~26ݘۃO0 Ӭkw1asxb͏ ixX[HJujbzCuƄ>UȦڟ顷]^j4}'hS!fS>#k?r#ߏA@UrPЛiqoe m""ȴIpՔ2 F$4 ~s(`Z.+loQu=2[ݺ> ppLaocv4*sL3,3Fk*tc)ۜn<|3_sỴц`6A!He4Wr~"/rӈ5c)jkaHi؆ j ]ղyw/ uY :SғŅ[3lzČvѽ_h  mmPAj$B 5ù-gv "l_X _pyF.&^0GBGhv1POάT]B+yAY(nlŃ]v\{@=r'ۻjko?[>m[pl%`Ur7s;Ew4RrBy\!nJ@ƴ=`:1a3,?!YM-M2W_w%̈́w#EMIKPzڈ!Vz!+t^{'Z 6pV6Vao;G2> stream x\mo8 A^sœ "gNr2Q$bN`N/4$"QIDD/CC|BuJZ*&^<#8Qd"^tyTtySy=Rmҹţ19 XVUkn= Vod ߂˧Q%ď@ˎY\C@ט=\W/[󒕛^w `@1#8%SF1rtrd|,oJӐf(wXNF@3Vc9Z'rT%dzgWqļ6hCma×&CRw:10/q 3j7+;:/7m4'3 !+V9u Vl3ii ,{eOcswIU5Wy>eH1\i=hm⣕fƾlK{L#`EC#QDLUk̹S8`Yfq6$sshRq\k&Hr4#ES+R9,%luGI4d3S@;HSh'K:DQJG%2I;qx-ʕZ+l=jת$ ؤ 2xƀ3Re/6rn\ ’~OT{%W|F]ŝ%_/ j(fUV'4ϥo9ni\]y4o^hu֢ Oߨ.DVmxލj.eq38Ϯ]eTm1 gA*ς#Ko󭪋4uʲ7uĽxAj]h 0I HX]Z[]9P3lT=Lۥ2|*XӸUor]hϿ؆ę pl4S|2~Y65& ѡf_?!>pӲirE+]'dWn/7ߦafTbAgq1cO03u3٫EN&hmag|P;oRlbVO]@J=U/oce3ȄoIv 8'eJ0R9XU9lpb=R9Vi#_suiW %ď4na$! t4Er0Z&c1m/dSzegѼcA>R5iJ`"( E%Ҵ( x&R¦'Z,lBnNC9ғ4Wޏ'!7 ?O+$6P8cu"J4L1`(dEfjbM=ABSkLT>g](` 6> !C W O3VuU!(Cev ؏$w84 '+F!&JB0:ӹ?F!SRuT3gVt"&70m!i$driG1`\w /B2[R0KfpU'/(Hq, G#Ǟ-5Bw) #7 -}z!2 C#h@o; CYPf?gfd3FhOzRkl!ID~J1}wQ}Jb'@%B[="O!Ks_^@1À1!bTJN<OS!B >ֹ<&7ꆒ;H;KIFD&OFar S$#B'#H2X<>w᳾M 1@!F3onnn9z1!zltC? hF#e/ƨa`]`*H7?cH 1fP4F3P|L tCRh GàFap|B'Qvǧ7^*ƻVL.v> stream xr]U_B$sɊWVR k ^}{Z;Z? cY. _EU%Nn^^ˋVI/`OC&`eV%$K]*ˋ*I-3U$geˋi11A@$ E@v>T-`7@xU%'y'VLzwyag2+gze@2{,;ug!eA [8wغ)cJA!FRg-_RV<삩L:{*7rF {oHҿƋHcz]ަ,OVppsd5f}SZDLFS,/Cؿ_ŋ,I//>@HE2R sNlXY ]*ǔ!ֿƨy oHaw$Cis,tae,]?4';.} 3~kbŖ!! p jt{ 1vYJTvo-ޡ bgʼ@imz]Z8(~Ko'y;;" Іѥ53'VKCXv#|WFrp+ӤnRa_-bl_ܘ/I s=ZoGC8qYɀ1"ۨTK* QQeK }tYNIr(:csbPD fg+Q``mUШUD@| XC#٩k !-dqK-sm$xï{`z\;oaw̬=scdq6 dӊ\zhsk/V1*R{hym$=\5o(J@\Yȑ{wH+E4urMuUX\5, l6GpѶ/Li%6dP䈾֌x-0S24f|>kvIZIw'!֋IBKMM'&1arz&D]RJS". 99v!/}yE#n0Cxj F&&K\B*?X&?O+Հ~M77/DRE SDp*%MR,j)Yfq%z:GPQ3xkӱ'oÜߕղIe*{tPsdKHpFv;GH օ\ ԺёQ\{GUb @Q`YrCоݢWv(VkͣS2cO{;wF*~L$@X )ʣs*1x\2{R?v'Tw1я'YvL ?qU=ZZ$fǗł7:܀1pҋU,QE+$ذAB# fEaf(`أ0~0{g^BH+oC`q5p1,E㰯2O.<}ys0KWT$rKW(k?Ο2uP2Gaѯrr|q3,YB)};3!Ul³g=;B9sn4IU(ƄP砖x3P Fgc 9ѹ?> :FڞC\ʏ8h>׹ǭJCuލ.sU m|Ҕ* @6_뎒+I1]+Gˎ  l(h[TA6͉Jb*HR,(@@oҠ6^2$i|pǰ?| pgҨhB>!B _`8rEoLm{hpjX!XOKcA!ϭ_|b9&Eʩ\m6$ה'i^z<amjĸb޽H5zxݾ9;Y7]*gGY? c)FĐ(7$7/TU3Ep>ͻawܱcW N`!)7Ma<8˪Sƣ1cSx} bv{h-&j\+/Bl&¤̀DD4Y[M݇R흽=I'җd@|d??paH s3m2kx6*\72Qk #Xl̙*?`c8(쵌`Iy*"gEZWo&SqhHK;m+2 u,rI^2ֳlR-'_v7ϥ|ƨC .NE6Kt2Sfc)E!jK"G-oH/b<{5,ϸ >5`HX_n6<%#Ng,qbo9"gd|uũFvC3Qs-<$56|ЮEEm6/y1)D&jyٔ-钇^H;u&{B F'&#~c0 `x(8xHL0 'ͅęɅE N O&b/At M]7܇mQ9a[}"2>GG*N>v ;YԊt5څB DLgcX7C]V-s6oX"(? `5siBװFAތXR2^-%ۃFmDdϻG\FctvȮAEHIÅQSX=|h r#Đm]FAV8(xSUD"z޴$KGJvx6FTҳ:GQ~ RX W4ݵȰpN蠲gXQ=vҺhtF\}3(+&M0oI(:A _̱Eg:wZax7<4S/f"G0G LsU6,, BXlZ%/qk mڑQ P.Vu({`X)ЈQlV_virϊ:˓誓F b=3g+>K8i+q$tá"ds endstream endobj 160 0 obj <> stream xYmo6 AfE[a`˰a[>8r5\n;R$RvC[&9Գɋ,<-NOh?iA( ).fwӓ4ƏOO.(+zz|9=9 "R hhIEDJ4'FD)Mqzxf#fI 2d1>V Qf>DIxFh?EIJRY4_Trm$BչWn^ڳ碅cvpScm2qmJб‒ ZoˇW ف]ySoJn} wsHw?1mB?x{lYT˛U2au2q] q4_m4nEw-:1)ڦuvV43'i8-HegEYD}B2~z cǿ$ ؏[\ЫBbXvT`a}O9#Шʺ ;$0:[ J. eqHXoARB1²N&"UΪ\1.k&1qsgmgΡ+7 }vW;HZr hq`h>!y1Ct/p"yv˟-5oħnƮ|~[h,e5en{+c xm'nq2Tٝ9\A@lA&ھ.mpS8v?/P5]Ca{TmhUv4í^"& fgh-R5 6άXmU;9_F)ۡ*8j?m Ѕ7M~ϲB[A;ƉUބ7 7a4o 8 ,3)B}?Vc5.A_L4X&9R S!xyɽ2eEx1% iw~[._}2+ endstream endobj 161 0 obj <> stream x]s6=3>Q%HbiڤmRw:7=jS(H(mRX^\_<'eLo/$YRRJկUr]<˓;xuC\p%ųw D>Kɒ=@+^fJJgJ*i0*7n i"߿NJPΡ, grg9xr;˻,2U+;d٩3;^xPlYCJf%Jê.~byzd2G$e>3/u})bLMi$-cWf3&JWh T7+N%JեJ@[K pt, \|4MHtͦG봤u+&<܆ {7G:ۍ--՘%y$|m[j׊)O+o=OBZݚe w,81'QgwwIt2ef$o:JbFaV:zt:v ^Kr` euY$ŋBTYwG͛fi6IE?4+=h  r&.:??rE3zQ`4zo@@JNteP'" WcZc ̀$%2H x6fG!FlCRȉxywo^]L>bNDP?6_;c AVLk[n)Bii^ϫ*f=k{y\;Y3D4l Ih.Ma@Kx v>/,+BJtUUQ#qaXh1m6BLNۃ^(;AFW*E??g!dO>fgpsf 3Y+Ė ),'zy:Ueo ѱ1"Fu`%KV`2ZOi5=N6<ӠϘ9Q!+\n}Q&'tr2왰Ex8a21v6Ya}R=m6uBeA5Mjz)*D( E [I[Ѳ3d֐O.BU95Q 'u= |Gw)GTыԳLQ&!mbԐ\c[e%%N%y|iE'g U_f:'Z*GlA~*2.E"A+!BsS,nV$>n݊X 佨% ߛ7dB>V"`=Go'!sԫPǫRcu~`F`iN`ޫ/R|965ѭ-JlflXwf A)v#;׸,/}FP'2)H+>l5ʠ_u.=$BB^Yy`*ŃJWcOzpE3¹A;4Os"hw4xYNo,p>^'ct=KsV0..^zKIVȆEŤFgypc[=we[-XZ7'uc,>98[VKm]&qS=V` JO`LYBF'lt |F R|K{*^<~ c=kqNҷ)Q͆T q2Cp5&Ԋd*U6L!mP|#Q=87ڙvgf"b!O[,R `-w|^"V'tW}MgX+/8|H)[j `,HG>:훮i{%r綖`\Բ69@kKf_yX[aVLEp&#hggO$uD%^9袻p4r68Ds;QQi x-`]6BLpc3DSnº0`F+(w$Hmܻ>= ;v+J]vvcDbV*0n;Kb9RQ !1/`d_7V8^9~n)h H,#^g#')J 6!#ST}RDbQ˟yds: 7_70@ WC8AW`MݸkY35n }/&=e' ;T[֥+p]JS]had:9'`ļ5|wdsrmFq j:%dCa>Dpo8[iWvxѪHp") 0J :=|v(9]qnF.>OyK2'[[ҲCY|ݖKfT*Xq,mC?x=Ҧ`a7<- x%`D+\(@f|?>Xa1&^D?9:vV,HtD'6I0 ϡ9w}D)}אvcg[y3E-j !$xg<5ϥ>#PG-wB.O T^R o܉դ Lq?B˅{}M;Qcm"S[7nVn8hzaJQИx.f'Lʮz̎#Vt0+dDWԕAFg SA-*zě8&ZRy~5 m =G/b^,]BQ\ÇS3mqE8qD΀r5jv{y:W|T~Ԛg6tABn5 y!ţbbǙʡP#iZ·}Ii8XjOFB;b"4>P;*_MvƦ7LtϰmPc8o1`ldQml~efܿ(w۠zN 6g eLeR\d u  endstream endobj 162 0 obj <> stream x\oܸ `ė@s9<+Il֛ĸx])RҒ+ +p~pHw=Eww"kL!QMdg@EܽSfN(wW,Wvwyn)+ȮuQ6e!Ek2!d˻w}CH("RDD4&[y*R5zHvw(](E]QvEaYLA_}Y[*L&Pµ(vPZˆPEgW\?HuϮ׹(gCgX6?gs!f fD[z`c݄\3j'ku~M9[rC71*j-fv]C2 l[e۰W(.Ӣ&I_-蜤H>}bRe^PzX䮓em޳H=%=X#VЅ6nPU'%òiKC[jҘ\Z4WVI G(6,M#Gl.(ָ @m|q ?0C: %щ3h*'`,n*o HYeu@Ϛv@QdiMEͤ*LmB>mς@*;o}-G{.ش #t`SsnD:1}"e_zމ[0պU_}4ZF-OA s붨Fyۘ{+`jȖ$~>Z pN('ɹJޣ0`ZmnM` QQO?Ȣ ÈI<V "TDFCX˫هh[`ѧ Xg ,;[S Ȝӡ{ܼF5V*g'^Hy_А=GOG.%`qvv$&_ bRj`nܞf-]9C7"AxS4Sd|**9wO?x?D?S4SYR݄a"V 5(z5c&4krsF/œ990>ZK^b;.8"Њ^DYQ=+v` p؁d-a8ٲiM?`|=àVqL]"DUcϗ^f R Lr2 @"3K䢚=Ł⠻n(MYHr $)1+N bmHm/u=ξ.^}0"[?Cv/^Yq ))PV6qDuY(=a0B{E~L(^>?.}w OӡEYŕuǵ+O+zH=.^"k:E۠j:{1b1h`ڢQה8hۅ؈2ml׶e)D$nmSjMV:*'qt-" wkPNdGCP皓"F6E;w?vY/sg |)G\s.`*Ӌ3cĖVp8EO0mGK} N`2 ڐH:V]ۭ@=919uWXoT@e vb_k#X_ЪOdyN'=[T'*a±Dr|W>:_sTGGG 9:DSQi(T75m@3rwO4܊Pp33k'[_{\tOQ>9jNQI#3U5[^j55YG u u;D踓y©`f(wݵZ&:e%fB'5Q`^+-k9*>S5~{Hln<&["Y[77-%~>JMr0dQxV(w;Go:~uwUAt."M/+˛@b. ~C/sO4 ;+SK;=%6YKTzcW%«ڔ8;(-%v ݊Sz[nB<Vt b=$k&]F? jv(.}I hwz O$!C#dw&" :͑Xg:G7Gm**\HХW X%]UlƄ Z"=ю.}y| bq.*5d޷[6LL'xn!S4S,Ț"11vdž|F߄ۜd&LṚ=L c $agZ#&&Ư%E'R{҈[mGqē4SSUv"LH$& ń@O?Ǧdpn˪)LăVn\!ZeFtU2rŷt@Xt:D(zYppιɴ j_ζiƴ'ht YN7liLo؞eSWˆrvĦA 2_{ha>9K O t[@bbH;9M 4NO*Y /==y,$$?$=OrLaJ_=L"˚B˩S 0 S?%->QXdZ_#5hik^؆29F=O^I@Yi=?ApqhbmSWR4pUbjĄ\DLQVa6X",E0Wii9tÉř7^o\jGW?` ؇m,+E2F!A,η t};}hU|OIцH#0`o l;eF/$lk.Ŧ!5Sqp)C‚%t+W:FA\MPwܩ́=T\틣su$QJ) #j\(W+)X8I)/]וTK;jvץdBv_7OxIb1uk1;-@tI="v$L<'fka2WcduhtIߚ*KJԩ\g):|S?[$qg i ]Npgu̻;g<ڝㇽ5xNhnna7kW4w]+4_.>pi@!y Wa41;QI م`ɄFTDZCAG:;YmFqeu*{#0;8㶠7'xb'2XW4Gp|9ż/esd!?<D28Lmg5r=ecZz|Z *v}x7?w0w+6 q&MX:K4Z["gliXvNòs,>MzQրg5`ݟp_q8nvӄWF/u@# ֖yv~"j,: T/ '8o 0Yt"7ܸ9p6w>@P5fƿt9AMe3@++^؈ +p ԡvi.0{OYQ!XCW^㏍pRƿt%nqEr ]pvI38M`´"i]R:!Ŝߞ30,ٹ Z=IZddWh~jpw^7Ls䔲 x|1 endstream endobj 163 0 obj <> stream xks۸g8bF ɾfI:swxd3ܽ4I';} 62 *QL%ʘ(RJ%\0Uw# (T"Y4P2*eaI/X'p?9XK\>Mxy{IT{>-P %gxvj xRpxHc*'uOfwL:26=rS_N6a1yL97[z*aW;ۖ);47V/H gӯJ|rrOJKrbQRu L i3rdlk@W@ ;|*^YRVnۭ.ECe JRcX -BTE&)W!FkXٲ4QaF7`$cUS8lz3Z6n$\op5iTecB[ѭY/ѲprKw>"ͅ,HS-.H X/*%ʐ>$c 3΁̗@tG8%C{XpLeY#4%㪽V6Tw)/!Eэ ظj`#`U6Z0!>YM}%G"0CI*|s<ۆiaIrFjuo< 8o^yJ k0e jV !B>Z?@bkgݖ, 1 ɸe|HMVSgU 'gKw1$|*A} ΃NĭvLKd ,Z;51C2g&rVsw:Vl#o^;CQ4uGdre1u>.RǒM5Q3O2ąBsMQ1B:BdQP~ׂγ#iVA.-LT&(Sw@5 FQ3bh() J9-Eaa+"%*S\pwӨT` c 3y&rs397gQ/Mғg8 ]{$riZj'bp* Q_Eˆ'md'ig@Ei$P ՎMX)I }cX99}xO8>:Y{}zr$E4qnJ-N :~e+uer,Hz/c񡍑HM>Uxh/J!k;O/8KEfީ$ /&w3Y?˶HtP2bjƭ%SNmCX%F7o̧N`&iCnxƝ/7 S=LR叞J9!VmDB;3. J /YV-v- T-+"O^`[ =>X4Åqxz0i"yYb&~&1.D#ϧ`~_-=s=9d=X4ÅGK1>!BI1c'$̫'jW[ 0[Fp'3iwҒty:QpxJQ"3bsB!ƮgU T+*V ú¦f"u!~Zn3Sː.vu '+I"a@8X@*L>dDF4uxz>k>́k(-uu`4Xi23]*樘v e_^Ģ+ Ы9|re;1_&lUx{es(Bx]P*C' SE45*nIjm`WjŤPuKw3YYL@l|{|ffEU`ݫLlWCl.TEGhS d;ԭҭTUU]z([PAP *g @]O $((u IA]Щz99T"ICDM/W.W0x_ƝoUy{h(t\ Nj6#O [_јH"H tpLn;D=i܍m\<ޠ6սmMէe2OtoY/m4N{WwKkڳ\~ȭ~l疏!z@9,ӵgjXf:Nr_b "jm'EoJ.BJ㮘$|Co;XrQ[1W^34WsYӹMw[%kHl.;:*E3oH}v1;ͷjK 1 k:-\ o 7&6.^qc+2ncy;dRA(VU6x\} ,hFQ2cB.y)[ ,*Ga9_cAn)'MH};C-Qo=w(A` )*DOn_ g PRx|GOn8+e.,"dw3/{ahWmev {+~Cf]K_w[..:,wnYxsGv)QQGrx=7IܾdX7y ;}rd<*W=68.RIKZћ{]B2-7dRteoa@w/}@YĢ]fD/ $<L' G.~0uj>|}F7zy2+ru ._Qm;dS!oQ (·##)k)FB> stream JFIF``6ExifMM*&C   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( (QP ?Tj(. qҝV3c48l~犩F[s`i5tW4! 8rx;GW_R1<6(ۍZQA,٩-5+{"&2*Kz`ڝH(((((((*)gH*7c5q-515ݴfTP`x*ߩ)%52G$l9V=ƥ7DU@F·~k+7>n%9h_ {kRgF1m2[obMů2<JI?-Q's!#/$ze/")2s '.#7PGm4Rs'a՟fVƭgkj$ vlPܜsTep`~3|浣Rd^5^,ɋL>c_$2 *&v(Ǥ[.OƴUе^V˫7,y+TYXDA?zSkKس3ϥ[MS8!B?Ơ07uPFv}7fƒgE J<`X=+Iέ;Ijf╟s\ǿr=8ٽQUbBY3 ( ( ( ( (J#W7n*;REzs~0kI<-BϷ=vD-4%0۟=yuM2x\,G[޻0q?Wl|ױ@spk'y{He˒椹ߍ^c#r/'h3ivHu$|DTS`^4pw\J5Z=6R#Vψm-o$9;?J!,T*QqM9DR"$$?/#*mJ+m=v򳢞Iɩa71Tw~1 K|z˱H<5hR9Rk~pbHNկ,p: yWL{[|[0`}G҇>諙jJiH*铦%|C =REcc2GBI(loZ3؈|Νvŵ[cE[x =ec=GUDt/sN&=K_.kmaT6}s]}gA"[\$zv0nȫ֥R0qsKY3EH֐9]((((zt֭-{Eq\j%ed_p:oM8vy:?ƳDo%HUxM\Ql6EG'#^S[E )9;VB 9Mosw⨡ veŒ3c'TI2@;i^vi7e~_:2蚘֮.n-l<7ӧhH =OVl[;&V")\ OgXvaOI#c"+r+x:my3/s # "#$2,s*4Nۣ1|K=Eʃm7_q 'LJu=P/"LtUݪs9>Yn%%xfѴ7{xTnc'Us$kG85k(5@8qwc s!G>m}X5 EK PU_] YJ&N jyp8hX݇V*_ ?c^{Kjr0Bt#\'kUZuA?Y9B(((( oG. /z>+ XТOqe;A2hizƨ$z}i>n֘G ۂOSZny`a\7p_ T^Zpo֦.DԴ"ã'%8p$"ȟ)SM_7 Y~Faҕ΄d#GE4&A r"O!x;33!B@f~BߝSBMzi?N\JgMZi 6}y7s0WLscubn xMx/JLӦYm*7kEkۋ;DRIPcМM[AK]6 2A?wQ}͢M +{-vd?%Wk",B n0r&hO]U &d2ƍ:+KePs 6YHֽݸn($Jw@6lpkC@Iffaۏ^7CFM{T'a,=+N;W*~nb-FS4Z+{ilf#'' (ΟNNXMorH,[;PJ7l;uTӌD'֭@QEQEQEQExXōa$ O#' =;ԓ^}1q,HZkv 2JGKkO iwt<وG5Jj)%?Nk7Z&3)  ;g'}zW1u~"1`;Gk~rF pg@iMbVXċl:D.icK6tOvTQCx"*-c?kLմI5c9X9X`jG{awc xc5k_cd臷^Jj۝7V1¸8} r&zHRB>jҦ/g8t%8[RX'N=\垲w+4# xNOhu$"2ܒ~v?b%F#KNU5#ע}GI[@de]x \loz+9x³,ZNar1z QU;r1J&n:-Y#tT1.¹aF $k&.0#3V-"]J39+\Qd$5=.6{d}JAkH+Ce:0%Ulu8QVݛ䓐)Be c Cm$dg63%p ^Zkԓ@ x!N^*KlLw"#vv^Kr)Bz\Ӓ̊s:ӳPuvF֛qf$!PֺU9P}ַXg?J֝u91Qj{袊((()."Efͅ^ʡDLo #2#id5 P`{P;mt[%Eb0ڴq$k*mqYwnLEYbW]>͵~^svid`­oz:3hTbͺNiuHf:m(C)j#K$4Y \1zK|qV$w4Lpzt~*O ^l*F$S:Ոm"fPYA+T|Im;ʲFX?/P}U*ƒ"17xvEUEPEPEPEPEPH@`A˺h$|W +r]Yg2D9 ֢zS?tz{8kPUiAgx l N,R͝ J9Lm7V[ףd1?z橅Rw_0*UC4{\ޥow$]݄ Һ1X*1!>PQBzmWu%h#( ((((((( V7̼?Z2Q=rIמt4aGMw $ãzkJDQN.芔Qr³ե욀!GoVM G" !#+"Lx#R1Rz'Ev2D^WRgUtҥ$`G1Ƅ䐤t,E f9DL%LqbCeN麕r/C=y$T9P4l0A;Om۩/Ҝ8Je 0E:!FzTY]ƭ<+kx0c'CٶrՉ3 ( ( ( ( ( ( ( ( ( (}ՙRdu( 50V՘/JY$k)P:)%c}<{զP0:Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ endstream endobj 165 0 obj <> stream xko6};)"E;H|i6u؇!ZZwP|iEåE]r8377g_}B$7XR,id`2oG{u$vgE򁾱Ru~.M'7ߟ y rYT,B뼐I-7I#V&LgXI@eE@-?%.T#`/nd)y^W'[a*5m7+ي!G'lUfO}V!ڼ3 ق6m[!N6`QOQ0b U:O3#qF[mrE4Daag3p/CF:[tte2'FL[| Hlŋ%kdΥC(6J h- 5?ƒ%  u6 P:I~ hUĐcMhlU会X)Tȫ*ؼQ䬙UBJk5 ҀmYZFȵgxZsd"0J/Neݪ)!ذ5؛lՠBc0II񟊳FɝU;~j}U ,58}x@*EPDU.ZwaJLUݸKF16.G+!Ao oYBw}e>,3|@(i5W-$ DzKIJVsK͞Si`p[εiOoF AOᐚĸvaΡk zw4TjPn{TdwHC2pqGDKr`YؽB g2?%X$:(k1HK+ jZE_z,jϪ49Xj_0 "y ,w@;3d*Tt7~IJ8GuY)3 DTOZ=,|1/l5B )n QwC9 sbaq#[Cvfrn1x igFOEթO;U&S1L2W KրzXg96&]}ʇ2x :ҧ8ɪnre;Y5X2nuJ{܎j>re DA Vf:\@E)QcQzA{zU'~N%`ޣ?n(5xx(:a{Z5V}`_Jf!dkw'O U:GZͼek fb\X-a$}~n(-!vVJå63ް3I)yibBQZBz?i͒rv>m)Ua@R4Žd#Y(ⓀP_F!ԬB~Re "*@꼬]'t,NbcIͪB8&ʹbkuT{, U*I}G|-@abmKh!Y 2Su Tvyy:Q`AҢ0Khr5M/4K3b FG͒aR!]'u֝.Dwu:ܩ*}tDqʝ4螌x,iBFd kP72|PFu噳0 $zb$9q V3E7Tƛ %{-̊[a째nWGB ث # G{"E``AZ;;;<^nesJH~t2tP. GHI=|nLB)-vBlI57uRivO CڧS8}}4ǧ0 P9 4Xi+0icBGBђEI TFj)_󺣧> ԏk. {lRO8xY ŭE1.bv\"ޢj EGޤ6&KU!ڼl|<`P{5ͤ䵹+HJסN. ,1ԻtUWfۺ$C}bC<ȪPCp^/tLSϤ$Ee`hCqGtں{Kx4Z x;>yu\uix}3]W̗"|0ɐ۩=]+=s!hͽ`\J9YRJ%lW{Ggol2ZߊfxBs Ey5-2jZd<doyœu5Au t4-ڜ:H@_tx3&&d#ژVqߩgΫ0xXu *u- cD?7)ic»ҙFMfpCw \(dp䝊 0Wm v հdϺO(E@v#~Ԫ 1(/\q\hQ9ñElo^pvB#Bo`$+x-F }MaO~xRb?HEacwiT t' "C55q`͢]9]Km6*͸ɴIaכp.-pN.d`bjLCé:7N}Zr"ڛ(&Qcm*:4J;rSg b<flG$dulՌX«MQS7GEM=.7F0ws"3.Yp9:Z6Ndf(nTҌkY.}35gYg2.E# dKP3rFx^N}We?}y-/`QxDW؉P켗ɫuܚ@+LvOۇA?jg MUUzB1iNRurddkʣV bLLJ>3.{Z_:vh6-1z^->/?)x g/]=S~\cC/R" 7A?0>ʸ [od̓HuBvgbqkT^`=[\R E6^e%jGF:|I^loZNGB> endobj 167 0 obj [ 168 0 R] endobj 168 0 obj <> endobj 169 0 obj <> endobj 170 0 obj <> endobj 171 0 obj <> stream x[mo6nB lu)|A㸸9A^^]wכ73%J\ZqHp8:9?<ϒ ίK x^- a7K(EÃ0o+Is-:2I4`eʄYʖ3DBʈ$"36oKU>y+R4WH/yLE?;Nx" ΧLY7xZl7v Ը3h-6Y*CKSA滈:zbMgqM :wE,:>:¦;W8b!LՆve,%/6usB %uV&%[1ph={tftYB /c/i!>.'Uj3B\XWjAVj9ܲ*O{Vvs%XVhoв@eWgU-`r )xu_lڡP!LGs;ArrI&Et2n^Ҡ?bLf_?ƅ;]cue;/pkYzj> 7e[8\Htr]\!Պp)үꯞdx![ѱ:f[**AB$y~|k s;\#BY%jĢyI!)Dw7E8NM]2:,DAV' {tMnY@Q*!f*Hq5N p" 'O[( 3P@Vξλs~1AOA|;+y֛{2}ZVWjHSXj~Qr'"m8kkr?ㆊ&VF!5 P!վ:s:4+2P[>E x_ѦCKv7(uC1MZs<4K 5>Rgv͈n\ęްux4ھRԘidپC^W'n)0YRlutdn o4DKY I" H6Xx aҢ.ieޗHh]d]e쒪yNn܆'dFǗi|0" $7.zk̞ I8{Ҏʞ PYIm ͈ЃaL}0fXB'v֬ -.rpČܻw;H3F*޽x). 7$ %}θ7ߴdeaЩ/g3D3FN;ZNAf@5|@X-nA 7V&p#I4+SB~f].U h)1p8hHD!!C4c (ʙn|IL’@́Nuz{Kֵ-0Tĸ#&sОFMF[|-A 0 ,4W :$ ܦُMh!1?}:ը8n0Ơ߳~HdNߙBg ,gM$0J 4h65ݚB4c,QXx%."?Yۊ($( 41A(r#eļ;p=85, 0Sb|[GaʖaH j6|m|Օ|^tWLR!CG(8s>_&XT4V_7IjnjZ/h? endstream endobj 172 0 obj <> stream xZmoFnOd7q6Zm]l'Jiof*JQ&;;̮ܜ}3Jf7wg,?d0HU}fYه<+oRjj#Y7eFU%oV/kmh21AD&ﲕ!U+donJJR =/tb CYUVCY˻?K֥jmβ@3AJVٺ%b䐜r> ?BcQT3۬ VwŌ?=¿!&R0'{VNl64ˆUԴ.u_? '  XkoaZHnwnͱMbMW65KѶѱ\ӚM3l)f"F$./oY?S,_ZinHV-j 1|Znqΐ-փWb\cC|%inXY۪RBÿJ]]sI*q1S) ./hHuUK W"13P\KZC៫ ^qak.f,,hi8TF P:Tc*ǟx:dloB浱t!%`&_% R3T_ƼH?}m, ^#um9<2u]k-J[8jcC8bCxF4c4=N+6T|g܈l X-nSQN4u/Zt3y*o\RYȤұT)3`M_@oqқ®7fu3atȔ0qrb&dA_fM) 4sqY&XO_a eiI(FqoXVt"WA_CNxnJv"VóxՔ YetbT) (9FE#a=BImKUGaDU #F[\N&~0N G_2wKčx_Ԑ :hT* M_`nFUd 3 ``{ Ɩu w.-qp h3= u3"0O<p5֌ "Q.0BzNJV#$5'B,yL7΀F_ݣ5m(I>NGGSb]̰^#ORiqX̹{g22nJ未-&&%8lUHKM]jW%yzxB{}KVyasHgso/Rdu)'H%A =+ű_i+7h/Ѓ&K}B:]৹ƛ`=I!7UoA‘taC|3HTc<6 1{?ʬX"e" Mʫ` .b;l*B5@RK7cκ P^d>Zgi@ =uG8Gvu"(@cbqB@bׅoʓ} *blC7,M>~_Ocp:ͷ=aT!uLx-ĥ`iz6șlb~6SuSz98`\[ӔCv|@'wiT#|93^~XAP&zLPѫɧA {hMPIċ6kٟA3nan\K*!TLF[1d5-׈vdE#MOsB%T=bǯ[V|{*¤,T9NƜhH; =xDM3:飃Z˺@ cS6k̂9dp.Φv;n9׍B/2, m=VxPw+\cˆҝz X|3{HUf IJ("ՙ =smP3DLһJh28? `SJ»8`@G<0//RREȪRi^5aXpQa~ҿXg#Az*o∋;ր1U{7^p@'#W;sw+Q߬;M?ez ;}uݣ<.|%0,$R\6'd= @0n%eE'aQhd#I;{uZw?<<'3zgaIpGJ&Q  4HnVc?ړq/#V_Y> 2mt e:8HƎMqwN:Vʬ1-̕w+w-Uj}Oq$ژׅ }~oM[`?@NSTwƪmTZw*ݸr7߅< endstream endobj 173 0 obj <> stream xr6=3N_V,Aݧ&MlIv:nh=({.$$c {?I#!DEgoQETfBeqetݿDWE;:{?dqY(m:K8ɢ"KⴌJWY$8Ϣms0 I@2'ѺR.T`udRӸi!Htĉ(luHSg-/l.Y9=ϫf d03(%5Y8Pb8.$Zl\n٢~́S۶K,.OZwDiF \2Qŕ lٌ̛fHtn4 V.i]:pg8_Y-p$[@ UƠWRŶ},,!hpYͫ2ybS\w<-7% jF@vq,Sz+jFvKCB-b-"ijDjW #"0aHRWp;L !*!T`-wE$%qU%2Rݢ RqF*#҈)>"$`$ :oW]<{4ZiV hK:[5CT@4_4T0WdX;gG Q0oْw'!W ehG9MWm`*mB2 狪*?@|E@sPAp9zSG@c n'K=m* PiMʲ72b|=5D.s(NBnG J>WhVcRLrE£2ۛLTOYIzP=,zZ6Ku9Fk;n({*1frtn83OCt.迖8P`t}P @*qR3Y%F^SnʑJ2(z7Ue,bk 3 Ί+u7ύ2#R <@*w"wuHsn{xjǁZ#3Dp4Db*?AY{4)ĢeSѬ$Sn.ח s b`.ECOVPq:f롸㠘x/QEs.5^fS3gtvGmw7ȉfmB僑pg|J q.|nǜ _)6[1w0`'N5(R1ìz,K5]; ~kz9]Q/eI;Nh$O.ga^ڔi›Tlx;$L;0OV;a4|2`ZWxZ~v_((^2/bR`:-8L0>jRTӉgFiTg㘑YF5FVoWܠ6a!x~=`wXX)|zWKtIf> ,0r0_w۰z|JZ.} Ռ]/Yn"AkUwE}4qۑiíGoq^9/4);NwbP_rޖAzXE75vyK@>U+Sg>=rxZtX͌в ]jΪ2um"vZ-Je+:$ AuK}Gt#¤R9gm1H`UˊIRKgFhFˡE4Vg nʂIxnp}yII cخtKn zF m*Bأ[^U5U嘑#vaY(J=*'2Kd_VT2e@!qLUD9Y+`ʵC'SZDIx91''N7X-S/k2+"[s\'f@H $.J{<6|(C+Nh ga),mf Euţ~BN#KwAHk 7]@~ٳ\4 邑ekVUW.u8brt;"<3 [DB,{VdC`}hRY,:] Ri+r(qF@v!eS@4ۈD$pi-cgBcbX0}n 0l*' xI7(%LbNI{WۑK?sɚS&k(}}(6vr,ꤰlerzx@qI BnPyR:Aj^jJ:"aյ5W''|؛y`h"lCZQ ꠺7n;#J͊WDAJ:VfjE@7\W>ylMx)CM'm[-+2~xe5p/0&k;J& ={:k d 3I`*Ə*$v=< ,,E:tU`͕}cvy:05,|ݛ9hD.zcG5!d SI,F̒;W K |($=dX>d؞%9&? o! (x#H*ST"A QJ!7| uJ0?JҹqSG7IS͡1 e!“c _eƜ8 fy,a0ZG' *\)};J%e0TWrX |ό$FPfu&^otc(.̎bU0ȼ̠aϬn3?%;CM辙zyݰ8:pWnUlZ:_Zqb"j g:_,=hI)TD`_ 1?>k<;)ŋ_OJe!1A-SHv3>/!'Y Ug  f:_)w0GV x;c`sj~=ry>F>hw).` H>G~6D0cc$"'I'[$8t >POŎK֌/FÚeML&&Cw|9kFNY#ѫ'$eI~'.PUf#EPŒf l_ E>G#-k#9ţt#zN$SXj^@H[fU!YAiꢮYџ|$ȁ@a1jվv;ʞ(`%[=zWt|[˔ endstream endobj 174 0 obj <> stream x[mo6nA_['%MܵI bw]HI䮍Ep8#__ cy!ϧ',)_4UQ-I.&OO~1n~9=Lߧ'_NO@΁[^>k-L:/lFm2UNO>H8qID-͏/@%\F^^ [9җy-iO P ֔2-[Kȼju,gf!X>gc%+AL?f"tOwY.f:guƊsvDC_.eu1&=Uy+f%9iqRV=9<@Vx.] peΧ9ISO Pp`hӃ0Q`Y :eC2gu|h< !k/}\1v-w.piuÖfL߃9~#va+e`%⮠beꆯ{j2A@Mد28 ;#=>`mBy7fO1"d x2=9t \๯ci!Ə46o7 k[pzƕjZhD!nP hOt\=j% _ %uRZZ $gODXMBidŞk'(,9p 9E1a.O#,V0OBa:bUZZ~u6O&1rRhW hab0E"$uJY:WQA)fS [Y?~=~} Oӷ4Iݫ-j Nf&R(MA>r\\(6)o #|S^4ʨN d>ຂhgUSzH:ZWЗ6Ux{unFMl;xt]=TKsޛN7ؑrIziȗB5zfCƮwP'vc=]G6dY`aZ+ T} ikC;{GU;j}. ^ΌRtZZSBKb"u+Vunbf9Da=Y+JrR%Eg%!|Cy`p3> stream xYmo6nA⋨\.6-k^|>wxjҦ__w3CVKl]ǨETF7gUM3DrBҷ1 Ҋmt@;Px|`PUC+h 4oݧ%EL#Yl@٠n B'[ak@+VHce8 KFp%($Qie$5Z>.X 3ߣ Yd)4QI ~\@4.lZSqX5  (p$ucme]QHyi?ssF|-"2[ KY'1zѮ{>v.akAR֪yʤMZD `lEmR}G#4 5&Wiz_b4Hc>vP/8 %TO2I!;OSƟÑzq<5X<% J^z|2I,C!İ(]cfq8uB%BՈ}LQԕ UTTr*WbK4 ^"7o+/J>;pVh9SLf 4DZ1OVNu;EaL}p7O[I,:NWv P:&BFC݇_G~xtD/R]S-S.hJ,~) ;-ۼC }'qlM6oajF.Bm30ZIvXb-N#rf@<͆R,. 5e@x|z8TTyIp#?~ 4YGKѕs*7 ![OS [1aH &|Mʴw"|+MhvdQSFpV`D7 wfZc3`8pr}DsS3gySk0~~)9B.IHUt}!Dn ru.9KSBx;[XH[Cq9r 9>!^\N{xN^Q}bO+>D7TE-"0%Κ· |1~Ds}-!>v"%U k?-$~p'R`.N焚ٕ$VP5j(#"ڧ#ZnG UȮ grri r }no1>!~mӣRôn,ma>$1?$?팽ٕx{2۲ý$4h- ݱvP\㥻J*i=VJ5Xχ_GxOz^]Pr*4xUf]75׊ЊG+į^栌_wk-yI!|4VZԬ+גxۼdgP&ANmo~IEoW2>m]@۾o ggyP5+;mw|`ɰ{췾iԵxUhK;?}n,_u/KdI=k( l#$> fL|Q endstream endobj 176 0 obj <> stream x]sܶ]3>3C|DdN۲>؝ s%M}.}w $id, Xg~Ʋ\&./X,TƠ* }Jˋ<ŻU+ Xd&*^fJJgJ*i0*74?I*9{v;,'0?ʳU<][qp"Sy\8(q0Hɲs<;xPlY,>wש\+j۔Շ ~>jMXݟK+3- >!Sƌ02"gIMdT7&JRZ`}x6 YtE@@?uyB 3l*Ϫ" ,lTx{L!2k#t%)V/13ޢ?`ߘ{ $PҠhqyj6"tX 1"~*rѫ1LS1dNEt8cM FbA%ןp`)43Pb[:Tݧz.e&O_\ppf g Ic*{(KUekX*Vȸ|=V*m6ǏY}РdwuDee3[~K,A\V]NJ+>yUwyGCV`O :8bH~i͆ydF-9n~v ÔGO*2_tǸ7pZfi{Z{]/x2mwH9XnM`blǚuRa`Â/9l?CGR _b]H*]k702=v .(h4#+ dW)A40'ߒ<44%hz ) JwR)F< mܭ=ۺv v@cb6,imj LmI f73c!,hݙ3iU,+9ݔJR/\AnmVk8vx/cI "pj|p{DiGͱ$:D4&쏸>XAt1X5w(UՊ+/]S C7a_^y|۱T i$s3!&rkD#X&pܘ$90$shjS ]X`*'%Bc96n\/9r^ 'LV6CakS<\b Do=z~՛Xs 7ke[šKMu܀hH2i1P';lOl2af8ib?*;!s:Po(^a 4zr0ُܺ ,u̘ɒR~gtCC(fkd6:(\է*d~L1_eG*вmx'VIwHMn3$2d(ƼrX0V]ݝ́" G)ɳJ~ ~j >PDˬt'i.YI\c?;_7޿>+@9LW%h~Z20R(C_h2#By2٧ i })Қ6Vm(UAqnxPvxS`| $Yc˛|5n9 2*GԽjn^Dpq7 -@=1ڦQr ^~(<D$:Ko"ld ϫYVtG<+`o rY(xNe-j{;08[өV DAtN[@ +Yb Th3v^AB<2WxRͪ҈1~|BS0 Tɵ˼ŪiV@Wx:P4n~Cg 7cӭkTx\0Kt IvVNWoPz4|f=ӕkDrTn\nXS<Ŗ 9-/+TV!})%/dټ(NS4|E~NcF=:yjH:~|BS0KT/ORs@ _;ox{w&{"_b*,O퇠+(s0C?>aS0KA\A p# 9ִ (K="$v(XɊ,4"O렴Һݥ tP pe߸L 5c|ŪY:fy^ C"^u]%7mVZe銱כF6'Qř)RٕfJ~Gv5c4NeVPj֮fnoGp~j a UA;VKGK ȫ9٪ |K A瑇^r7Miّ` +mۋ^bN֯$'d~=䱋 ,yQe,+Hc~>BuN^:BڬwC }/0\ʝӌ־1"m/Rl0)?&' zПf G3/̻QũyLJca{\򜂗k)\>2 ?Q|i «⏀L Zx#@ {(b,XXˆaqR߮`Œaޗs{+mׇ$tη35ǰZg?4M/zO%C*!{uHʸAL*@Ţ4)}>X w,čb1%HcuZ"<r,a˧)?φ"Kw.([4I%aE.vخ $5n~i6}B*EKOl"H8raʷכ$#k0Jp endstream endobj 177 0 obj <> stream JFIFExifMM*>b?rQQQz&u0`:pC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?(Z`r#:U.H*-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEo$B.I]#Ѕn~MZ: ( ( *).8OBoeV1ݐEu-UVwZ'ޅRf q{2Z(h ke&"ʟz i\a[&v;zJkI'.Jj;+3Iˠ)*DPwIE 4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV\G ߬ȹ'tB u6?k(3U.'9(j[|Tz=iG=jPQEr3)hcWNQܫpEi ƑgSCMm?sZD~^n̟ƬfC0%'T PO"ݬ8`H9= kZZ;RTd}g//XGvGi[jpxgOo)U[toh$q$Mrf;I4QEQEQEQXSxH 1[ ! Bqu[\ۣYg@њJ/QL!v[>gS(5r9}*R}V/حXv.qJЏQDcC6>N;RLFjZ2o&U#4u{wï>X’ dSУ5WPa}}Q)m-∈XIBMmiњM\I^$H[!=HS'6CcbJ}xU{)-̍3Y2f(cdI0O?lf;s֔*гEVeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@`xE?H!@_ScVAN*+xxOz ơUB-YmB+34X\gwc3"ƸmsҴ1\VmrsZ]Ilmn69z𫯦Ʒq<[q}kRbחM?BFèY嶄a#ks5[^,"T\1F)*V9!s ?E 76 i#y1ÎVH9  aw6itqT'MY爘4ۈg= kQSew%|9ۘ4 ˞9zx7vAc4L)`>QNkX֢G?5NK&KnPt"ymtn$vxTγy_aQEbPQEQEQEQEQEQEQEQEQEQEV\G ߬ȹ'tB u6?k*eUΐeUc Ѱ(rQJ (hbQKIJ9>o.I0ǚYu=NsͰ}b+QqhR(3lݧQAkWGգF3XU?֢9DĄAӴ3Wݖ]沵[ib\tFV5+=I;rHm^%\|}?bG$1km{GGީYjwMБS*q+(D =Ӡ.@q(Wu]e T S((((((((((((((((((+.I]#Ѕo\G ݏZ: u6CcY~sZV5791T(s-TؠZV؞ŸTi<.LlLJ̧<Z5WJS?[&lNKE@RS)h>_8^ذzH?Ƶt}Z;I*I}>gYJ&[ viG~5y}loG} )*|FPrf;I4(((jbgrʸAǀ?2).MEuhn`ʒlmK,C̑Ss\dhfm6ɖHE;r>is5}%܍4׋ |xAWc®{_O'쩋4M3ĮDe4'VŒ WϽ1:Σ$2onާJh?.uTW+%!ul7Yձ.A';Tf ;OX[a$FJ06ia|n>ݟjfcϛCT?-.Cn<}7bZV}q\-++|nB=@MWӡu8`\ }k?S[툂C*p_M>-D2>ldQ=[Ν]]C#R29|>MԪcjҮYǖN=AETQEQEQEQEQEQEQEQEV\G ߬ȹ'tB u6?kunXJ{U߾QEgcVQE-KE Y>'|h2 XVai}߂j^1ؕ}()J)hRRnbQkHģzÛBIU/ᾈe]N6Vk9Ef&6SIY4}a}b.Ө 5H%C#nj*ϾL/XGvף{?r{~GE=7LkGգ r$mMmFq;j)sLK"Ey*.V8¿SQ T;k=?1^{6qI4{'0|#ZH@R֎wVJȎH"y#VhPMUFxݼ6:ZEẐ]BKdiAqJK&S,jIVqO `+xVcTx RQKk24$HRZ#%TX(QSbu??5\|IV]ZIQEKF!KE6--TR\|ۭFsծJt,@ROe=ef&7tR\v0*Z) FzMguORHz'Iy<&S?Lmj?JZ&-SHRolཀp{Y]\irKv8=޶Ȩ9h@H^=>d$q/\51٩#FXјqV"Yc` .*tR>ߞw6C&NrNq[GFzԁ@)kr+jb%QݙRy}bB]:vt֦)2FPb &~}SoȺ5-:"t}Y/'\đka5'}QME 4(()Quf8Y"H/2G,7?Jq璋-^jP[Xy <I87]Gmqi5˟,0 a0@8j]…C>`;Um&t{n2u{E4WvMP[(p}O&uSO#Č mǵgZGaiqau4,I.?JrMJ֤2Ֆ@QL A REQEQEQEQEQEQEQEQEQEQEo$B.I]#Ѕn~MZ:#f5~QU ;X E%- R4R ZJZFys[qOZ x>@~5~+|Fu^(RJZV2(ACmbGj?}S ~?ֵ5aJ)1J+Y"y<R40kmmA ==k:wbKQ"˟ҲtDw~,nW>\ebh}i*ov՛W_C@ SGjPE ieQ{Vu2MK+k^NUgvDz겂5r-Xj&YM~E<8SVBW%W+Krk) 0zkp;4(RK1I=X7QӤiEuƮ_F~Sv}4C ͗#! ƿ(WrAz6+c%Kܟpڻ,qꞟSڣ]?1fa?yOt0{W+GH}P 92 ( ( (I>+޺[]Ks:j=`~mIO83Gtu}_[_/2ntW7pf]Zϖ7 (*ie9&$DlWa?.t4V~u%m<}kJ&uy {)N >e#\}ukW7Rd  ~nV>u!H;zW,,ݶ_?\AEs1="~ni=Еa %vW3kM>K8U'aLsԲӥvX Kz*M:CEajz vj3':S.5d+c ;&c0$z;Ԭ<ú7NtIr8]ktg9S;EVc ( H![o$B7cVAN~@ ~QZDd=Mi Zm-[G Zm-KCс |II<#δk3G>l%x\551࢖T7}i*,R(xs粚{~Y Fi~DvUmF; S+~TAqqP!Ly"AsP]:R>f13#z,~kLm2h#G#b`rX*֝j,!QF~ꮡYR'QTkB^Zi@b0TWȦwZ6g'lْ'@JkBQ1NՇF_mMG"F*FAѳ%k.jNn^tEܡa:wo+UzUUZKK-b=!2OjΛOUl/U=M巼zt+RFaD >9aVWJX3+SdyE#i:^A9&ꦯ 4yEtv?gS}93S5Tc3HَL'}Q=斘U jtSIl\T w& / $( )kp~SKtsAZ ^+S䊲ՙfq`~Z!_%AorŨ˶aRN{f(y߯2s\(n`s3OZ\O?Ԣp v0QYwH3;Oמ)Fc*DxnJY:1-4w{e2%qֵOAde.V?Fܯr9#j帻ݘv;TTm6 !.~o wg~S/]8>QPԡƑ s5U>O֝eJiiX cҵ"cB Y-V )'\4\BV8Y5-+1.&OZSluZdRbE&+ ", P< 72o4I~~5`O 0{hbjl f9NOIF.|VO4?V1{h "%׿*- wccR[ݧ0aC5빪E[{DҬ};~!5;5H֢nb=Z[IB<,ƹG_w#M>FoHK~[5T s'$M M0 Њ֡[b5+y8J?}kt߳ߐEU Y;m7>oj.5^AQ!wS]F J=[݌تeF)z_qbHy?Sn TQ 4U%ZV97-:-S ((((((((((+.I]#Ѕo\G ݏZ: uBگuEaE8SE- X';ԀudO͆k\V6OKFj'cR(R1)h +*%^C?jɳ/QC(:^`YFI~VZD{t!CU6**t$7/qH>ky["%(E&i{[9<y+\Yk+ÊePq]d~B=r)TY46Ȧ"Q&N(We@\Gn3?ƪ+ 2ږìLC}u-o?xʹaQ{=glW8Ὓ. ҟG'[ $㰷[,yfBGqkcE"_.TdSQ  ͽNL?)1TΥexrf5)2IuS[15'}QOE 9EPEPEPEPEPEPEPEPEPEPX6rO+~|b?ѱ?mM.!R+6"ɢZ)@ 6s'DPQ{TmXE cY+nSLx5I8T1wf0y>U%zj] sq-zzٻtAvk uΟ9x#gvs &?9OkXW:t2BJ{S@J$R?q/ǡ".d\]jU^0?)WP%CH۪cT..ȄNǤOܞߑ5s{c"5ڼZ$đkj93^w~RZ(((((((((+.I]#Ѕo\G ݏZ: u95=G8,=rfgQEp )i-b?8[e?f}6\?g3:4%-QhGBxVQ6PE!Y ;knָQcOLceD8b/{XQG#[zn`~)XMU %r?z^pMU|M c'޴XҼ*}G\5hD]GđڕJ_j+"i;q}$-XQrq$MMbTXn͂\Qǡ.%'w= 93S\E~IS#=TrdW<4QEQEQEQEQEQEQEQEV\G ߬ȹ'tB)կSa#ږ<(6ޙ]hށKIJ(;yz%SGYA15R'gim]Wz$-QScZ(##Q@z.O8ȏ)[=kxƯ2l?u랫[u?OU+*[KK 5̍1z~V-aEd@>Yfyku?i]ζ5-T=nii$n +GEsPS BP( ROT4ia(Mb5D#TMY8!Q5HT1&45D1F5T865SڣjDU#vJu+/"O)e*x Bnr?TU#+RAdZkH,\)Rj[Vie~Lhqlu.j=Թc2LmR#L5fxYuEOԵ/i1]~(@~?¨Q Vf|KRGԵ=Y W.Ş=$SڤU喜6OWI˺ҡGX{yj xJƋRPi@h(x54jZ6%FE3Tli\MR4.%65 5LH&fjZTDQSj&ZT1f05 Pjf٨llMCB1٨bj&jTfO$SGwlo )}*fjψZюI~KʗsXJnl9N=ݥWqCyOQSVuݞ>nTZ[R7z{v"sMgvve;85hz:;d^$S^kmxg-dV n[lvqkjSpdsbkkK=z7Lku5[a$glzv M;2z)- ( ( ( ( ( H![o$B7cVAN~@Q@{֥gݍkMaYir*_&y7*j4;:9]<"cWP[xqn'v&isQ,f|6Vk1ϛX 52FMQ"?="p>,}Oz6D:"KZk+K?koo(G^O]}MaGiU4! ory5-jidhN NHp54jZ6%v*-ئQ67T;O(00FZD2.&q-!6jijajMFؤ-L-PZB2ZZL;5FVmŕj&ZT2D`9$JY0Y϶yB6'.GrM'M3^^ y\r~Q{Twq W=sTxt6dw95+-Fc)Ov]!=XM)⬲L/S EY [G(;85j%u3My[\cvUGSFy?=92*`s\惭ډ#;d^3Mn&kvdRZQEQEQEQEo$B.I]#Ѕn~MZ: ( |u PݮO5Pv3fK`mktCw@?u%s+K4$(jV%,ݱUnw9,\T4ђj͸#y cJ|-bl%~@l␵0e(\tB0-8a56Dl-LZcYj-DV6 F¤17kwhe^ף:3ׇS^lF)W7+uje^qkju-<~V^ҟT;pjH#=TrfϛifME 9AEPEPEPX6rO+~0dQEQEQEo$B.I]#Ѕn~MZ: ( (3!'KmM94u􋙇Xз\N6i5a5o{u<滬qf D 8V)s8;hL IۃkV4gBեɈ<>˻6Kd;FzL,d?482_GT7m$ ZѬ¼P*:̳7bM/SHR/Q6D۩wTwQcxDun%Fq}ol34<ªh\qgh|m#x|}T޹_EbwxΥȍa'Mh)]RoXw )yVhNn/oh,mHvղJQtk¡-Y\6PQ 2TBci}{U{[{E1{R~ZáTxD?3*kcXK^SKSKS Rh!ũԴhԄIh-M&Yj*쐚a>yq#G5Lm8-5)`LAQ<,kk`6Ƥ+R;oAPyu*:-a$ۧv~;_j3͔ٟQUXHA%8ڭ*e .((QEQEQEV\G ߬ȹ'tB u6?k((Wo1ՂX\ClHÊ5ybVR`M`׸ЗI!NuKe=+Kv+/HɂKӹõ\gp%ИiQn9M.7T;9s,SMnk[ ApIz}vWzI^X4uL*~U(]V;uk?fyV'Tҩrzk7qG~+TRhRqǡk؏xR}|IBKDt+V&UI[$CV5cuˉXL1= zjSZݦIXOO NGw:aPأuEV:wQH*)g`:iX&I$ $p:k-9'cz[RŦ M}!S+>k ]:˧EwQz}2p]~]'i{>4QI4BiѲBM&Bj- &M#0Q@RKm3? ϥe&LME,»pRo'`OE:tVQ#o y5v1'Pxm 7mM.W֝Ӷ#~ճii؟Es}VYq[ 變"PG\ڰrpޑ̶H* mW2Iz[*<.( R@ Z((((((((Z~O(T<ڱr]im diNZS**aZzMM=<\Ӝ#njNzgFiںB*@jV9'Z٪( aVzU &+#ڥX@PEPEPEPEPEPEPEPEPEPEPX6rO+~j=q +xDGz4҃Z(Ӂ\̲5XK/~Ne:in,95^]F#7ݏTss;8#D =XC?="hۥ-3zV:(*$NZəJ+|` ",p&,= G"H竗oͶ'oATN\c8JɳOu.$kPqOB 7}ޥn#s#;Iuu"/ˆ-cd[Zs]M %F\v䚳`3ۛɡS] Y0QMS.W}_SXVhW,qZE\hÚ 4d%}:PV:ZݒI!3.Xcɫ XXյ (~T($đEbZI3m6ct>=km,QaXOAKc܏mtl߽h,`SŠivg)nBR((((((((((((((((ȹ'tBX6rO(v?kl)QEWo7R&$u8jhՕXNԲXZ6Z= U?ye,UzK?xXz 4ql$Jvg9 r|[[GlD U9Ԕ&Km~F&9Ï#Vs^1Hԭ%lz5h+5o 2l?~U{kӤ7c0rE 9cGS[w^\#~ue. SƼVN9;]#PX)zB-|1j7,ӿ j"2oZ1:}<?1c]:;r/`^R>K!V*).ZRUf8Y*b{[6> 7߭uIƚkHsZ:=Z{=&#nM_ 㩌Qe[ay T` S)NSwb(( dAȥMcijMW]џ#󮂩j=hFwTڜݹї-V[u{fɦQE((((((((((((((((+.I]#Ѕo\G ݏZ: uQE`;7s /4av\g,|\*ۥ֯TnZUȭb*RD;e㗚p8UVԐbڱ-+Zگoa! (l=*[ڭ,`v X@N{xB e=O(kj?sVEm݀QE((((4Q@K ܾ~5Fj ec : 29e$+w#4(l\gԷEW73$SV]_Pi֌S qu )K]ŀ_\HQMޛwn}sAu{#f=rN)۲uq`zЮN 4BCöyimx4v@MEP"m)ad.7SZ_Avbq!pj9Gt+hX)u ziDOS }uU&FA"'& %Xp5^+E$+@@O%6 2K=M5 =h??RH wA#V{-Z Ȅ8$`x8Sѥ(&,a!x94VANtI.6&wh{w<Ϯl/7h<]>_&6yEXgKx}tMo8(w<ϮW=}tMoKCEsoK}tMt4W=}tMoKCEsoK}tMt4W=}tMoKCEsoK}tMt4W=}tMoKCEsoK}tMt&[9.5U G4 *8m7fbr}:5yϊ]e2h'l W|4I5{0)I:H (ʄ=oLmW0,1- ۑ~*>Ť_ |VlWjGs Y0@٣*1|;Z}j6I3,֦V4 \yezWj> JNo6Ѐ[C>FW Zqe=OiOk]R<%d%5kHQn<=?φ(H:<|L#> Tye}%qӷ}4_,M_ֿ^,r]_|D s)/*?{xs_5($#i9=3ަabcF 2?UşfKgh=WzV_AbJf1o~] M5Hk }{ul|V뵬_C+4-Pi@Wk:i[X^V~< (oN6{6<G9)`e:+Ӽ?dҳ]_=%߅Ʈi6xeʟFֱ4dӨJ 1M}tM ijMg ܐqS*6H>]'=X&D&wmqR?%N^I`;_ьZi\t5Ħn\UZ}OsoW.NFo>~w<Ŗ|4[&_޿U,]{WPS lLl-ɎuW''UP1T{Jegk) i{_ZK~-~r\$ 9AҲk(ۃ:Ք>,vJM Z1eA=HqV*Fi6"OwiwmB/,ێJ[ŌMT_7B=$(W;ۯ9M!GARW=}tM]\ijp٤xL3 WwՔjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE endstream endobj 178 0 obj <> stream xYmsF >tI@ i!aNE!,ݽ;I'd0[wzϮ_=;"Y*˛#GbR""'Ņ}v|tGG/ȯG` 8Tg.y*Y\,+BREc&8QhYtY]ř񒚩b;/V 8wl-*>%KfC9}WoLMp$3KTH?mPƊ[o>,|N / H-f=.3y\9mpAkh-~F>hmHPӪn-r*fhߤo-=+E[ѷO[iwIJ10&S!rJ0GuAC$8-[=%@ߟeq(X|`$A.S4,.) De>}rdJ JffC)r"]%.=kkX bm~s׋ }p]?֮(ECA'5]H#U!Ks {{?k9Rx[~ mzcˎ'o|i-X٠x ' L`G&.ĺ@jtYj6] A6 YwPv*]'A Lm Ut\>w PYy\O#3HiS^ h2rxE9^#/7vE_cF,FV} *ӛز} ܞ>07ۿi0>UGD*U,WVH2")_EaHdՕLy'd2]nT11ig imH%uHdPNWr23bS${!YB{k UI(ʡvuՁSDom"t\Ѡ_y}~6Y) tYkiF4xX1t~^9g8x^%YӥgrlnYUn~d&x2Xr .H;HHP A"u哙t:? IqD()8Eg  +feu3öB3gyuu ǺqVQ#Ã\[k'4n#yqw¡v[CS5f|'hv˽X(wCoeP*ߺi7<7Ch<fݢ^#:p@DS;|퐲x67="tB3FٟI(|{iжn;X=,Q|46OlǢӡ9ŽS(ʂiӢ^҂ʹ>S1zքkȸ~-uwL- (* '_u܅33hznB3s)@<8 > stream xr]3Ș^Kmĵ:҇Cv= Pt1%,Ξw7M2!xV7e#XPb[}Şۛ=ѓw7 Kq{W@;xsU,E%K)VˊUk7tDN@&oX;@c8DRys$@QVD%}r$˻?F\U󴦺zHEP2+1ܥEIUbVEx~o2&]I҈BAT']Bm:)PJTĦ29 1XNj ;fq*HІM9pTLݽӺx=?({C,_M{_T bDxO >|F6GtHTr6:獑5TTpvo&2=U.>ܟ(i(Od0BsuH@JԤY`g9| iԲ ea>![)Bb6㔂h#" bPۢ-4b*KDb| ^L A$2^Sd'r)l?]Wg4\ &?q5 REc5A<h_)(_VR] N㭰EUy^Y+%4 V!'I]x:gJXU޿5{zԿK5y9<χK`c) JѷE10󄞐½АQ ;^ ?Bz,~mb3 Ve@4(obTF/`mR?Z"ISQt)gAL⌺e4r)uƽ,C^'s٩БѿX;igټl *z.(o\){}@u['(F9=K^mĔa&tkq*Ʒ;SĐtrY.>gydWk|0Cmݴ1bМƒ% ߿΍?3 XE`޺zo6!It3Rc)h]reεHL颧Y(sc4!nO$2]brraQ@hZߛb {pe66/-X ޱenZB۠#*,ج [m>|]9_:cI|k !aٱwzڎܾ2^ 1̺bvYwJ| 4ljS-UIMUlH$}͸CrޘKLNATtx)-H,tx~b]KUmPbm Q hTo@[}^3ۮ "ٛ46a q޸oW~a:~gHaЦawi OW^Yr- hb2wwi We>˂2V!z,=+1 [+ Y (PkFmHl \M|*9o7_eMR3-$eImbQs,/! Cץd!7E{0_:nD` endstream endobj 180 0 obj <>/Font<>/XObject<>>>/BBox[ 0 0 679.73 409.69] /Matrix[ 0.10592 0 0 0.17574 0 0] /Filter/FlateDecode/Length 6587>> stream x]]$q}_`<@7|$ȃCV f-KaߧdUWu_έ ŏӣ_޿s=o!o77oݏݾַXHp\3! rM"KRpL!Jpn 66tǦF†UIISPDI04^ڲWV8%ةip$jEb :U ma9ު|TV[[Q-gm)P'5fc^NjyzQ6pP]lM)u^ʖ̅d^ ; p4j9Eijmsa9RՎ!BHpkIz+d]GՒ$ĵ&q-פD0BP!pm'v[ivr]Y cؽ'.ܢ{5+{4+2rqZ/ZQ.9'&p:6]qj`֖Z0ZᜭnW<b9.e1ݤXKQˈSpNkRDŶ6ڲb:.Fqq1:.ԇqpvX>Q>KRT*ղ:a5R8'a@yO'"vpFjO3*v/e,+~'nn˝bz۷o,9f߻=~/[lOőC]%!~= !) a% !% a% !% a% a% !) a! aI!-Ic-I-I-IMI Ic Ic-I-I-Ic-I-I-IMI Ic-I-I-IdS`K`K`K`KB`KXK`K`K`KB`S`K`K`K`K¤0ؒ0ؒ0ؒ0$$$$$$$$$$$$$$$$$$$Dḍo@.cV'l}morX;J0>>biĘu! /K*`yfx8`^^˱^1nrT;հWKdhRQϩ%|\`-.L' [pU!!{M',t{2lQ> e8-G* D4żN\H Ev/ #:lXbie={T`O08 Us:APyffԳ' N76s~`cE~s¥EPtq9g.j։xw+S8&MT j t~97.k3]Y-I,ख,)vL%DNFP{.z8'#hv<3 ž?`2U:%&1@ wK9HZݤxMsڡxxjޒ9\XBM/Ӗq^V.P,G)CV41띜AN.3eEs1+1b9*eu ˖T86weQdĥEErtq5UqF%Tmq:ZDErZ'+Ӏv68NK|rMnQQsZYOb86pPbf}@ʇ+ m*=n zxXV֖)XYﶠ(,PP [ AQ ZշV7d.#^V''++ RorM8AmIxwWp(R=(NfN9uj">hQ[y"8i|Ԋĸ,`Jnd=NYRwHP; ;Epafub8҃K)J]mPV@H4XVvSݕ8t)'sq .$ amYr0~* p>1UՁ|t٣hzc0{\ l rNt _x0wmN9@pAK倧βB5 ҩ6tdE3X*STy> K1PzƄ7ekSu !M [,(XkQآ`aE`& ƾ`!EX - , 6(XkP0֢`aEB` - [,6)XlP0֢`aE`em [, (XlQ0آ`!EX - [,6)XlQ0آ`aE`٢`aE` _WԤ`aE` M [, (XlQؤ`aE`& - ,(XkR0آ`ag+XDW/,$`J `l0 !IC` M0  -0 `l$aE` c-[0l0"aAX& A` `j0 aE` M[0 `l0"!I` -[0`l0"aE`& -.aE`& 0`l0"!I` -[0`k060 6`k0 X aM05 `&$!IC` a 0l$!IC`& M 6 `k$!IC`fMš06 `l"!A36 M06`j$ IC`& M0 `(7 ``fp]"RE'K9& \,0\ `I3r[0$9 F́lRzN] $ Y)r9"(Hc[;JWWJ%9KLX+ ebCQsyD*p /_&#x>-:IגX#63}~[K g[=4 531a99>E\ g5~H]Y%CY%kp5eӚbRińv3 Zq}n&f,enԀ 6j/a i؀GCD^qy4tGv#RPِ3M{C؈b*g*T>H6E6hƿ Pp;d, )R!Tr%ki*llwmeUo` ~@rB25{B<>s!9 d<Zbs;wd4YUOF4Wtإ < .8J)I+DʣLV8Z-˭ 4csMɱξ :Ƭֹo`.A qF~aQۼS1SE`0=| \; xC U}|kF3bŽg09q(Aǚ3Gi߼h(‡딹7t c'Xpil3F\$h36; +Ppf{xce_탄xwwܥaKnԐGzuyf|K68m3G;b`QC7t*>լ]z!. iG?Xq gzW~6`rz# y~m1םzCCz0ȟGaB6L`6vj8!`[7(G:޵eގw|Dގ+59pŐ1D.#+s)=G6GB?#ِìM^IaNqdgd/&󄅌$O[nINj3 $ON~#Dq`fdanz gĦs =!a,r歿yyyc?~ CUtʕ׌{qqm/'6a 3ԘI,:Ov"σ)PX Au9_` `׿*\`8v|7"=c 76 ~jakTpo%-_?|AoT|tށvag|￘gR/;}i:8QCُLQņ;oc酆L ƽUf[Ъ'fa06](EzUf. lCE'"3~:sN̵R< ܰ96PeOvB]^Kr?vFf;i{OQ׳*aXHȥatm('൙y+ݺgdл6|SdD mYMKF. CҥmvMay. l.M?̋ endstream endobj 181 0 obj <> stream xΡ0 İSgP<$IN@ !d!a; yK endstream endobj 182 0 obj <> stream xϱ <;+0tBp$kxB MW$C H佬^@>0r! endstream endobj 183 0 obj <> stream x10 @T,R ]3 <l!;Rr5S(JeE)f endstream endobj 184 0 obj <> stream xWnF}Gҍ+8 *zq l )5wfˋ%q!@ gvϜr>H2!xz>,`>-v|f> ߏˀO{|v\lDc-X F<2,6 K4O [b>> c E e 0G!*Oa%4W<@WgG"l_2rҖdZc+h->}X(jnĐ28 u E:XW c l}+| *X),^;z)OR D8x'"*3R{\%)W<!x)X.lP<66wr˫ЭP\z|9t\YFÐy$ M!SwS 72-ОW̷MP6Ѫ)b=:z_TaȭE4m];Ryی=S}"ohC `8c^LTJa1Z$%oU3U1q^a0Dr o+'ʺ>[]Oba2l|ڄ :.:~'W|EߧXIkǴ n63x:!uj=XdC JAH7]쮶#fx(|T;` V]7>#*e180_ Wrx̀ X*Oly֝bضzuMv^( |nłxNm4[;iK˺!dͻ3ꭟ= ^`#B#7~rڟNriwnE_*"%icE\'k0Jí#Qki9S#Ef& MSQISqDϠ:)iqf{~fمJ`vo=2]{\ħ/~NSC)SpXmߦBw~a|` endstream endobj 185 0 obj <> stream xZoܸnSEs.NsMKpHAޕzvK΃j9$jH΋3*R&>>IdRBPe Q'@Nn<7㣏i;,AhXMy WF&+XJERPuRT,Uw|t&#DK"jh~},G*RfrFhW*I&H?9E.k\> dy2({źz@K1Rٙ%0 }L2."mgi 1:]e:.?gRw@N+uOkh[9-d#ӧ:#)k/"TeC^tl*IjTIj(.S:(/3ހ6C>CT.E݄<}a=OtS 2a^KeBw׳@Y.砊qEwiw=EVG,/Y#[| d}R?wJ *!_QUӶ:eeZp%S8S 5E'HSrgQ9ܙm0ڦ-2?vL[.gtyn3Z8o ٝxe H +)ŅP3$%E)c Ɉ!-y:aw]nx g=rޯXVe3:ihu!P0ʤ~tΆNͺ w[SQs=W"K'淳&엳@{D봫vhSLO{z;R;蘿+i_*fdSY;tY`|'>]{q%5%~yN ~mUlv|(y]9/oP${Bhj!-Y݆8_Zؚ L4*Ɣ 7#N4SU#LE#r Oh:?CMFkv\.jی ũ6 g\<08S1sg *}iQ ۭ,}{.Lh[}#M'X`RE gֹ)A/X^R ,׆0ԋLPKfq}?a` 1c\E[9&R pδ0kU@+?HnCM[YGx$DIÆ2kHI }\:?H9`w1"7EG1h{;ГR[(h;>&mԎ:*K>GW"Si @oWB:!uEw<"@<:hgoB'fh9dcGpCxpb{ꛅ>DUIQC=l`# #! H2zvb-셩)mQ U=[ pOai1s+%ftsH{=Oy B_I3I%]DڽHOOi9"\KB=wj쫱)!.D5iТ"HeZۆk_6diCCt9 '[?Xd4E3wҚDmJ~ aWɿ8.EebiYI-{ 'zNjb(ufbĶr3c~MTft8K.]+)Qm[60sl{e׌UHh|ex.]6w=F!>x yLtMkG/)wOrv؈[op6R<%=(4 .{_:F#Җ]:x/u6$>Q#|cv?4rvM飏IYe! @bFc:/0h9];g^ pŝ`v+3*;,v`~{M«Z3s䢨";ܿnQ;lby .x=mUNG uDA4j%rx[ tH{FC?] 2* cgnn}]?rpK6t_@mKc ݌dGY9Mp1hr7ˎBM"(4;ڜ5;u ~9%R)~INh*]Er1C5qS|n] ziY V'ƭ2}d{N Qm F>/F 4/A<>>> endobj 187 0 obj <> stream JFIFC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ@" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?uh1+ =9$z]k|P?*OٴI?;@YPQjÝ'dz<= h/YNݴ㺷YV 2 q[ĐN775_^0[}d{Ҥom)>Xai !ꐨb>w,xߡW33I$,4!$akI4=zE:\lc3Sh-֥)gmw/$aT~92Ia{V-zz!F{S[:J:tNJY5ǯ^A{-.A.$73O}r4y'kbqڨ,Мu?SjW.RpJmk +;%n̪ǯ=.+UYXB ukڴ*йM_2My¯N0 Ijwx9YavO5 ~,Atd @92VᲫU[P{ukxAVni"}ymό4lK6IO=*6񮒷[irv0=[G%Q*+ $ց?h,hGf?%t Ռj\cM; l1n>gRCgz> hfsƭg? ϐ'K\j0,&\ka,6nfSjMwo+AI yWԏ GL-kU}$hpT=Hkq$q-.U|ǤEB`dO(ʆ|ǫ̤y&{`8!F?j>\pTy'VNL8y:R`~sҟi mcלCo[bcd@!evϸqs3t`1݇ #ۚEqn\z[@Dڧ"%-2Gs[uGԝ8fzS|CБeHU)?.?*BĤH>xP;Cv"OqK>cG /xRZZG4bxIu, Ƽ> yo}Fk"kF:>MYE-F{`AW2dc >԰8 ǔ1\w5 ts)csepz¹~"gLOeY\QZ~urs} 'SCХg#k֖nXܠnzV~yc[:g ezE?us*7'_[]fr$;H}sUƧYXA,t„amDU6'#Y$8a t5=̑i<9<?ZM.!Y?JCOHp?*.KAyH7dMj΂vpZe*,}ׯ5cQ_asmjZC3IffwMP }j;*G% F:a5YH%V|%Ũ*8#Uz!nx:d*[蝧 6F*#[9-6GQ:l'b \v9M?5Чw Kqm)&yR:TF~۸ƙ>F1r.? IKFo5vՋHCKnk6HEMFU!0LZf Wni.-'i>Y9l 8]IŶucJڽ6M\uwқ$^tqɺo,A)"4[!VwtYH!@$gQ֨m,dEʩ)cؼ>Y@GZ..ć&BMky{RNm@")#XJK[h`LLRO |̋By䵷#f%`^[m0ſNXNe'Ԟ*Ȯw9. VEY\ ^ԚB#gN%,J~ʊIˍpzt2y"_,%WU_^T!nzMW9^uZijml8 uɳ{i4+-O:/.@'(/# vBF{W/Y'#<+zS:K t52MZy'%bIo5$÷ֵmKq 9mRttnci-v#޺;GMhZ[)3JyTCf F]cg9oJ}c)5)[юօ˛^/>A'Xfdi7d*qRYU9"[(92)F}W&LmIrpG9Mv&.Z0Lz0c[֪^ib# ^C3nR+D[8RݥGYJ&5"xӿay>٩|}L˥KV 2j-{cܧVLE;adQ= #iW{hF@݂}&|4պ4'95<Fj٤X~fluP0? mR0D&QmۂNjEjY}J|0ۧ;HZ)͒r0[ڴI-ߟ$' ?u> PBO=xVCGڡOz溟 Ȟ)c"XY<|,Ktz W)R$-u HE lI)%Մ?՜OnJ Iyd8۾itKK{2!ʒ1"Nf#26h#[ȷ 3oDT:1, dRW\O]'RVU'HE[QJn6yV郇fJ@=\msK} #|u%=P3Փϸ[Y!"oi6o' `zT:L\H\K9MA,i) >;[3JѩQܲҢwWSSvFR9R: bvk9kkV]*IkYd9fB .uqpv$3II qLj/j6&ZHL:ocF0Y@9R8ɮ$9'yב M}>2M-զݭXVfq{顥ũYM( 1$A( $fpOT^-/ `o+Ǚ n棒I\8XZOq1 cvpIAD0r8R;r*3Ol#hL`}3Ҭk~[6$B6`OҎmX1\V5?kϐ( OfMoDZ$,~E*+2}3?Bd,Z]'r9&X:.=C7` Ʃٯ"uVG)ngEJVV )28ڄG4̥ubZ9r,dl%~ \6~mqZLl}2$5&`*myɧ>DlqSaJO#$=H|#$M$֢2h9ڄ>3/A.`{~A#b1d1Gz=$!x[cQݱ'ƛ ܋s;Kt FTgqJȫl\:\s!Ei)aS>OF9:KX9 s]5}ȃl^fߜt<ӕك$&VsAj(u#:S b3Zk$ɳnx68^Q4\UhVnhohpdKf'MZ>/8Ik>ZM¸|g3EX±#:Quܚ=oKY%/52[fĺbB9R 2Ouc?Z|b]_NӉ$ق :?ipSx o`@KMXa{D>d,t;U`)$sָ^:OJ݌j;$ͱkK.KR$[v }j7<;d'Ђ:qUل]|E*܅'vl,wmkw<Hbsr*.rNuvLMsK_m>GCfE`OӠ)5$;D~ԢH|׍f]f4)!XՁ+dw  ۹]"6qO bP&)9QEpF%򣃞2 û-y Ekح> 98֯0,}Ì鎰H7!L<399Z#ؐ#î,+5}F069O_jVRZ4hk}^iCĬ pv:R?:ɁXcb`]G$ ?ʵ`xZɣE'7R6t*Ŧysf5hԘwk?-R4,3ڔ]RVGI'p@#B8cCIIx#B @ؼ`ޯ[.\~S[8mYfS扣Rb^ޤM9v];B6P dA]4jAv7$+)8aT[9IC(mǩяڡMP0Hr`[qY=E78HV[HC_)rP lgky 60 r+-t,93ZK>=1ԩA;!\bֵf2H9;TzqE@:4dC"F?#g#kHb.3xYZJlOFrWV:$ᔝ`]Q zHW1J ^e7q^y~E G_=% \倱K:qGugu=E"WU|<9<& 3֭$7,qƈ:Oҭ5Sh#o☃jp@ɧؚz:ibe1s^sks{Gu̺ IG 1ڿ:|zUYveG3o7O]olF:9%*t˹S:WI cÑN[{: ffi`w`Ք]˼.t4RQ\A?4)OdW\8#"o>u-6# Q;}Oqmp:mo),d. PMgk0KLg_j3کJ2ZW[!-=3Z'e6&8"#G}Vf`4bFO[o(QWC+25qG#泄H@S:e턛fqըF%哤`:ϗ7q=*zdүL^sjZ`r9K?^~^]SJ]"P6AħPn #ݐbX9dlvF(&ӈMԑ*UdQe#B Vg bxT!\l"dc׳ҮI5&$֓fT/!Oq!ܱu ۟YkTV7('`X$Ѥ阯Lk><ɒUe=i-ɗ4_5GrG"E8#%vPǀ:F0"!PH4B0Ǝ[,ͼ;2G *5dGf21N 㵒K{)#}'?CWӘU%܈U]9ۃpcNS=jyhXEQ)%!7vn?y䲜'ݟ̲\`;t5rk[c3ҳ-kKے>Whzڸ`u1Jsj:2; ȳF:.~}js|׬F~νُ&]<"Ŭ71/!Sl.gmvPKs턁QtMec-3Kn9ҴuxͲ c\lJWKR xZ[['<\toz$2X–Gǘ֦߶7*(MȠa7]i(Y>mz :l&EH w})Y6^ʇZ.kTw}r9 .y[9k\,[ax6: 4qE " c9YpzV?Db[ޮͩYE>]MX,/#gP=*旫qh Ӣʜ0'Zgqo,Pfq W?"=\|[ nn򚺭ݕV>TOҲm-n휦+1;[L^.\C9nsCv `(i8-5*S;kD_o a;'/ALO\$=fkaw]26Zz2trJGysuO;Dvwb)@`zVţ@XGq$I=Nz/ј?Ž$g5A;K.҄Id#Ȓ6` jZgH֠\ړ3qF=KidedT-I96_6QIEsWGwVUy˞pGҮk.ikpry'9VѤy#cy ^Zřy漗]%ʅ:t[o}A, m#h)Ӿsjnǒ$ĭ')]-u)67ta߰ڴL~_QvF$ۡ8Rc$0]&٘J 0n^ }Om,_s=B2*" *Ŕ2pc|ǮSGffi?cTM4"2~u5kxѬ2 sUP2Ɓ0.܁%UUiB6xf{-O6jH{sY)Zo6.ISi_}S`z֗$iJ9+.Ic+0GFȘo-sJl8wQEq+BZYF lc$yX ]aN3+P"C+$AT0)iǮjy2έ+&|:DD`C  8:Φ\%6!B}JӼԑIzΗp+ YT4@,x֍Īv[mCrx~u>GU*?tQEr$R>|Kfc>V—>|Kfo//Qe>pߥ Eb}~)?/U(}~(ϲ8?Y[>} K?o~*\,Te+NA~*\,Vϲ8?__4QqXe>“>}-Zo//Qe>p߱f.+Ke>pߥ Ec[__>|c*\V+gϤ“6|ZOKYϤ¬EoYϜO8"FPS@X((Q*mBܓz3F]$b=6*HsUUK^s 2s1@QUX[s06)l'w9Ϗv7sn+8i3d 4Tu qE9ixL-`c' sOSq]+@QUmǎ2Ԩ#dr*OCO8 sHp3{TBxMsJҢ,8IEU 򑏘J#ǯ¥32L8'pTM4ksHEUPw(]=8޻1 (ĨͰ:i?n ^5][bD2na+.yKx"K[۾:t ^3"^zȌ=(QEVƛD8v?ҳ$.ۙ,ddڒL8$sڳ-""3J"R7?^N3gJлӒʤB/˜gXh+F2o"/qJ5d0oHdt1*j8nqTj>}r 1.3Ӡ#0FXZ vf^h2}YYE0ay?7_nnmi<TH?)$vZ!(PC'Ҁ&mdO.c3KujMIrWd pLgZ:)IDnU99RV,尅A{PB- d2#̍6BV wFY"ƨ"'<9$(pǶbXEȒP7H!Rvdt*2CgUn,QcGTn50^ݪ@g98'#Q.Y|G.wuzM=uc. O+ <1# P0D˃0wHb OS\xuVAf 3Ϸ9*Ŭz\ŝ0叮~UEήM$by?xʥV>08\X:~0<0x}FxXÞ0Auj$.<ϖWhM>OS:7ך+r͆ $F\6Q~ gYԧqo,~vn,~悗Z7%yS/~8_Sj6Jg%6S!Λ:,7*yqze}|v}jЏfLxsuR'ē Hsj?jQ]Gn7DV5s|o==h q'9rۚ,X _r:\Sj-y^0<{u }nEZD2|j;wD{aKoJ-2(I9 *WXc{`HJGP1p=Z}>K%g$7RǷ'փG Ku-0]Y5M-/4CbO8n4Ak߸&dRVf`֖Mw,.H/~fOͲaUYHy${Pu3pI"r9>>kͺm;NXq>CNutDF_$N1:u&_݂`zFts7f# a,N1@ ]^GBd}?wIu$7Eq5;.7oWS%)D?+,ON9?B[6/秽] thr ^uU_3 Q$ zhE-s!=qLK[+f?i_nBz{8MRGZ'ّXpqL~뽊UݞQihB6c8jV(n]-Y XA$}ZAvmȿZ0D2Q sMmCIUO'!#4U@ȑ˗\ۏ?%XrܐrONE]K2ǹWpsUT0dPa$F쑎9eֶ0HXR]jF9Nc*t 9Svman"LHvL?)g~tX~q$Jn\n'3*Ն# kirif'M A:p֗\^pWw8hEP2]P:q#Ux4;0. 9hk!&9#O60 (,0z~5feH*1{,[o. H#9*eau ī gВ*z-QcRxր4IX$o*D C~z$2f8p>՛&[l;a\v#9I֦ Rye6RG=9[Olw\(r9=jimUI#$"P d~6%(d9KG<.(zz48as5}Y?>4[xALy`c'yYhr@lt84j{8&t>g2R1cSxҬTL 0Ve y{AS.oQc?3y`nYR21w@cm- 9>jO1l;W&"2̊qƪZ\y!@2'O?*V6wE!0G? gb\ą|agV_Z:э0|}H4yC*.e8 99]k[vu;ʹ - l̛RH$YcDtW$C!gO?bU\qm?J]jn*߼cs'fi+1&Dϼ[|.28 i|0!U#'rzhw$'-Ԣ(?TiB[AmqYڤD$g;$>n}+WQ8R \A>ҩYfˆ0Jl'sV[ %ذ<[v~Yb!!ܰ ȑ#;H;UmM../!8,A]-f?I Efʕ pEMEp>ʌjŜy'?jutHV5ܖVon2z:mny$x۔׏Ɨb?S#6Qo)u<0$),;C=ܚKj#oV<~8?{o2HT:0jjK$I;?)V ٠XnӁM3m銬j#R$k}Au,ԟgCsjkeTϓ'U{-vi^55-< p*[ϙI@r1>8,٤>gʝ1>-m,lAHqs/4ys+yypqgc5!MCc /py2hu怖dWdL s<ԃWuWs7 0OD"MInFd%عsԯs&%1,Y';q3S&k,+u85H@7m <M6sIBÒ+xD{g%iBA;OQOwPRՐmr; G۩Yr *v[|@$6^tnO H/%ʲGOZ3QmBY. J9 S3m.6e;=%KY ngQOM6@uPdUmj1m'BfՑ@;ݶd~OgS%gTQHxgq5n$vĨRsA_2s$yjϽWkE,pJyv3*v6ׯ4 dmHVmq>hm@{Ef`nIn's {K q=WJTpfu;FrҀ%ۥ϶kIПN}IE?Pee;gۭ@im&k{i0t,U(:$%[,FgE ~2d¸cUm}sHi kO*GcMKz;QI=<=~R1ϯ>%!J84 iPeDg֬$haq]•99&>s"e (EH\0r>g@zr=M&,#dF}J%ʨ?рl*gLMq3a$ޣjr3rjпv#lCcj\`t [淎D#s*xobn!5qd#ԳiqoE䜂譟\UC>ggeLe\QB@Lr+C[BFo3A !LNFyih t={'548O(({<PI;n 7eʝ{Z"KG_ vKE1Sȧ 1OaMoYa"p;m.[F+;S>[29P2*\7E-C3pJ(*O,LNf2"_NzPWU@f@ 0>yL:L6|py'^ddE @SyYdumۃ29c(m/pL˖ 'ߌu!޻NGA*̎% nUXcmXCq@ ?Chvbmcm=i Br"lQǤ9Yp\21 ,\g90|ـXn*2qR[do<9sl#'=DC,=̌X2 ?sU4Y,Vm'6hQENkyr=8#βFXnuoHz-.~3F:}x=4{XbV@on~VʷD:q(,kTAVѷRw,h ry]( heGLq24{ܫY{i41aћlCq+MX"scnuiܨ$j{'}W1F(h((((((((((( endstream endobj 188 0 obj <>/F 4/A<>>> endobj 189 0 obj <> stream JFIFC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ@" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?) $$^(5*,yeQ֤R]db@r)rֈk.)C#a$V8 Q@Q@RPQǍ쫞8gc}pW{i"."a![V7r$˜\4 ((&3awthZ)auHSTYlGڱ%Z@hQURfo $$Յ_8N>((((((XڞǞ_m޸V6OJ%aŴ*n_:ch>gess y~Tu._?]f kV Y5>+mkԏv9ǹ}>+7_O?3HW7L,2@d{4%w2ZKK+NX :Ku?]f[gnZ=y=>EȓQNR屿HMy%Ƨ{4y,& `tz[xJ^2ӄyݑ3$nz]l T1Euv7gw~+Qqs33? ؼ'cҩ趚`KoU,#ca1vNsj'%|H=sV#lRy$ y|G.5IRkdQ ;E\zneRs^)s^[GRŗ(V4fK361RjG٥zM勨r cɹ W?[emKvSI-Viy/lgub}_ K#3ֿ 2o 㱮[]W$y-~hkU؊Zjz4AEݻwki~64ʷ_^a]1lq^u Vv4TFp)aܹ7ˡWʖ9~۝_\~5mo}6J-{Lvf8aUS\m|ܴ{tc҉IL#t7m-M^2.0 GӞQҘ[w2)oQ5Q݄S(bZI#ц`2\p:mZ ͷ8<ث{ǤQ+ɼC]ou}.c[Vo&#;qjڴT!K ~#$n#45{idDW9EɎ~NCWxmjSe=ϐ̡BϴtPOqi8ӻWKgz}E\.%m=&istY7/O|CVw/S97Ң[2\Һ@??O_v+?c\SVI^)ԓ?3N rLdr}'?$3Wo?±jr:[.>gUu(#t>'Ծky=fQocT_Kͅ4᥉YaF}*Ğ$`M;Vz}Z%cb0HaEq9jxOu 9hY./IտҝuJnVJC׏kg'5/!ybxy qXE9Y?W$695Tcqusۙ$,T8<{f@BGoƷ񞚗Z.LBB. s!֭u(UA;Z)o6u{5#d_?]$vrٔckn`,dvQ+¢:)k7Mՠ|%$_/UM4heK7oyHT7_'SЅ,:9SmE4>A,C \a;ݮ~r3'> ⓗ,{CLТ_\ǎmMjI?5=t&hn U$q5 F~v$b2%{g֮U%ME [*5XĞc>ZllJAʳ֭m»yYP+9??V#2YFD}>UUZE;YxLCr#:6oG\UWϒͰuxV7|9Lj(+/qO9tn΋[t?譊u>#u 4+3C6Dv}3ߘgO\(jFTgTS`)]iw'srGl1ǃu5jIZɟeơms6Ǩ}A|n^5ުwfxKDk6_v,Oܓ׽XdK~Z(N ۈPK>o~Μ)!ӭmZ(WɫRZl]Je3eXXLec'q<~5E Kۨɟeơms>ǨkDZoUfUb?i.+fm={?4Y-g]krO]Lֳ.|3^wLH%nfhgn<[7I>ZZ(nĮrFjә-viBa\c\OE&- '$+Yً7$5,^ҡ\Gmעml _FT~H["ǻͷü<1749\q֮jZ>ognsֱ$o'c>WO֢eic48,? sXɎϧz,/|=kiw 1( #CF31zbO.%\hqַT;4܊~eC62O?ҬoE f޻%ׅkZY;㽹U:t]%'mki C m%=SEĕ)6A:גFw%1. v\J/\宷s*D)yǰ))hQI(4q\~{o280 c=菼Qocbrsڥ'uqhQEQEQIZ)3K(4@Q@Q@RPRTZAiut~s$ASSSH(%eavJ!O.&&Vs*e["cv]-ޭ΄"U3"HcX:`3]%io2(rxT:`$׭4gff@s]^8$m g_>NW |.23[^,42`y0OiKথMs֜cYPidxVn7o3;v(>\̞2| t5F|Ւ>~JK-Q$Cu2Đ\nw" 8;yx5+o܉""ka˛Ȓyh6`vStR}MhxJ^Qˆĩ&FFSBʜj3RcDs?XjKkIȡ d\$"~~cnэA]6imw$QRy w兜"MNӮCp˸Q>Ԗ1ӯ%1 !w|:~u¤7n%[S2'Ls>'5[_[Y\<~4ʥԪ2]Ih$͟c}W1ֹ k9k$[ؗR#8F}3͹+I7ђlt,Tߍ\Pmam%t6ZiqȮKKkvHР-PM*%MyyBIN8;鶷 ]^QqZ:o%՘&biaQpGͺBN;Vi[K[sOMMξ^3@>j[T@ y82ͿRFg2mmNSVO\t#wGD$.Ei(7'B_ 3V N޹/Z8 Q4 Oҭf2X qW$ȻmXO5,f奌J(sPtow|/+(]D3t:P#5݇n"{su9nq%=g2_}t83]'ۋoCiwᐐF 5MTc[]cLg{r埓ħ`o2ܠҤX&p>]j𱐶F)bvh}~f시tN2|_Եjf^@ujmǓLNhl$~s*ҼZzu#kg$}5F Er6rjQfiSex»^+ONq9p.9O^ҝ5bI):֗?Cg8/Fh%Ŝ~hQ1 X9T|G_#Z,DUFr{~T>JVuR-ST5Ώ}X~]3ū)2cuzuJz*ö䞧S8itʄfr> m~keAq^$еF?5%y3ދ7"V®RJWs]N\%wWw&7>0;7身ۏ@VM%/MrՈӽ).Q =AuKXN~^9?²lz-(Dr͵<ǧzw;sz9J?&;f͹<9hؼWMݜ+Dup,`IG,ylZNK 1EPbR@ 1KE&(-RbLQZ(1F)h RfBFk|:s@4(rLA,*~)jVBbRHbbR@ l+?|=z$Tvp3v+W+Q(-bLQZ(1F)hbJdQ0TQbxT?5-JkZ^n=R~UhW<gW}ҵyXKݛ)3Fj-U廷[c s+ETRfIOmszK\i]ؘM}E+ӵ_;_f1ni(؈KaԆvQ0[Ι#qjtoA kweڃJ>rWZbcQ%}.U>$ _7~DǾkXoaz\ɿ#sh8'5 ޫKP]kYDyT5=#}B^܌#SڂOq~0_/WHtNk% K8=F?;+gnn\[NK\B\c5,[pIS]hZQ<6$c''E%Zkȡt62nz~fYmu}_׮SCJo wOZ(nVs]Ex9GfBvRQ[?mt`|;w1iiy˟_z5|Cz}ݦz>gCm-@c20]̎%vo@kҿixؔtƩXO鰖)̫T s]i-p#CYg#YeNN"P6c;ºoXCoZ5 (#ly{wu hm9<)˩+Ӎ}^gԞY$B}GjK-W%HH `ɧF2K5#y)ƍtr9cb^]vZjo|ULkxa} >Fx6oJ,j˙ ͩ+4Z]oWjʏS]r;r:'ݝ_X: +.VgcZ]~dz ѥ-9t B)IsV T&&ME:-a&5VZ1}N0=^q[ [)C$r99?I3 {.94?:MóH|"bNO=k*u/s ڒCF2)M{/T}ۖ1k}FJyUv$]S-N 8w$ӋJdu?:7^GܮtZ4Lf{+.=TI?:58eȫ& Ruk.5dS03I%&nٽr>Z|!^wkY7pBQ^o]OtRT]S:e~Q#4wDT7kUR3VR/S,F=m͋I41q  ͜;]^cxjͼgt{WWmVsV:|&&a,۶}WCً{))Ȯ'ƶg M &Ivr1қ*R+-vT?m?ZYvT-k֟a?/SUPJaWBE*eT NU{qj9́7)̨ ^xN=+"b5`\-oo߿1W~f,>Uc=栩ٓK0sj#oz9^ƮhږO0o/lps?֏}OO7ve cMĽS{F`g3ÚVqcgOrz_mbf3F</9V=\v".呮@'<i?a5tkͼSy<ЅuC{KR;)qs£hkT|ޙ%SǹOXh/~5cxByW~c٪տq󼩜X۝Ďo&Z\NdH.],vxWC;1jK#Uq5`7/<.SۅsXN ŤTefZ]?MrMKwp5mn9۟\}?J_~nsgzaj;-8|c^or)ߝJы] n؆ٓ-7Oe{聐L@˕Һg"ᬲ?q׷,-+>Ō VZQܚS̓PnmmDW$ ɪ~H۶wz/ 0\ay߸ǷR,gnا'dk)#޶+ B8Ϸk y;󎦻 >O:1qUu\4)RҴͿjo# fKX#bHQcQPASKϸ˗\iҸճg },eF̾iCh@qZZ}(E䧔m5lQp좬@ F)h [\K@q?gЫRR#I 'B r9E7CLݟlPᴷϓq@X(*IYJ0ji_ +Z4P[C\iW D֐c C6(Gi#Q%դ8+8- ilgf6#ޛkn%0oZ:gnzI rUI]k r}LBQJRKcoR0 >Zm=IE=.c6<(7F)ek[Ƹ@0*(ϥi.$W0p?r l1W(]"dS`O[ o*6ګ.ZMD bX(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE endstream endobj 190 0 obj <> stream xJCH&ILv|ďl.8F<;DJf\ n4M_~xWĘ_I I CuE;Ӿc;_*'wdj}'w_}/ƚ)J7i\YTE&*֯_~AqiRiRGhΟl,jpHmQh?]Um$5IUMW4엟QAJ^g{$~;3@40^\J)u9>tp ټ3<>(Vu3__JRHPi+@/L`L`{=}Hh`w0_̸ _0G4wdfC䁥)sςɅe#LN9j駙1LUظAe8Gv ܛ. A;/n73oep?{HH"# O8Ƽ<{s؜d9Uk<|D  I~i1{XQen) dg^ۍ M?aN>ÿ6[p po~SψMІ.$*> [ $itPNd'oGEũg!9d\25Ҹܮf'mӝy,lEwba~PX+F(+8OK/\1@0m$):C?Cd$}2ga7G KE_hXn @ǛL$;i߃j.,X(ۢa\dd7zDLxE@4M=~R-aq'%ŀ7\l`1nʲ0eY:E ?GWe};|~{1oi{W^ӿ:7 |嚋˰0&8[1T^^]lc,NGk^pas $UU[}uaq-cʔ'dїhȿMQU2 lï2?:'.sr e mr>}Y(,_ý P]۲ K]zo|p-[M05^m3i+ƈ l!VE0}fGw̛#`8aS'aӛY3>WM8EUCm:3\ B׭ kϠ]C"69jW3n(Xg}ꢖ۰Zޣ z4 /dI__uR QYEoh@5*l>oɰs^ňO$lj=z q8^!X8TOY.+yBfNIER$){r`w!!Db{GDyθv1 .պ4k4Q]ԽRthT^CùUg TU>9< B 4&ƎEOQ.;q * AMTY6^T$B4fӼ?K l! %kNw݀Yc/ǟc˪jt#2^ 8tx]g4\iMx\GE=zs:r!3 hL/ d_cO-F3C3 zF9'105Z:rF0?jO "3jveQփ$8,ۙMDuh娉Mocyv_83 zód<)M[_4 :1gZItaKi,Ř}]RoB)J{(zbŠ)}q\;a2SG, y%^GX=A [p;޷mFA%)(쩾@oE?S<r7^R=#v;|sNe:ٺ+.IR%64Y,hn)z 9#*e)D{f* 4}a^l k m=fa?4E6$Rog6z!/HR:L(>Mz=NY7@$)05b#nU2Vi!.Fuw1PFwH}4m81 ѐ(T HlP4%Xnw |aG=Ypї멥b,0hAzqp)ﳊnۢmBaNƸi{?q+5}@s fXM(w6%(d^:ꙑ 8R+EP&72nlɲI05/PQuَAX]oLfdD;7E)NP@#2%/fJ y-@/nIl BQ|Nwв ~cqBɸP}]'S2+քLu6&0%AA9aYl`a@}VpYA=nXӔs$B\R9!PF }y2/VF:$C=-Yxn]aJkGHT$P.TZZC]EξaT5]=B@6d{STG%\\1Lw}aI#=}0w8WcKfK;k:oP+WXuĵ IMU4"FVTv&FecGFsaJÓҒmkX!1.}h(#_z e(qHG4XI ųU8!Eμ9L5d9gfO%pĞc)Ϟ^mb_hlG(W u٤'NvB?_s, c.VE.Vqwu>=s#|I{ƢRpMʶ 4Rvj"Y|ALn` Q1d.:Gw]k4iMr.s}>^!Afg_FvesOUQa8pe(xFT)\¹-:K`iR"b.K崉 Bv&W1I6V:2+Ӯ(MƨTY а4 ?%I~UmKK6Sa3s6P&L.ᕦ&%}3,1l:Hviw -Ӄ&41Qd\leN wPS1ũZ]]R&"Cc|nD\K]f 7 ۢjN-;K] S|`̥wm}p!֥Pz N{'IذCCJ)y g?jK(u=Ms&-Z2 wZ]n@颼||:pOƿ`Aw *Mi|]_9}ӵEKۯ1e'/kBT+'k=7Xf(娝#M?ESH[Zng;JVfuEKODZ6F=v $mH`J[3U:Rs~{41fCkPmIOsg[=7L9U?XXDR{YqI1}xR PB۹8UJHw?RFc3~LԄ,o| Ө3 6a lmb%| .IO4bh x'{F.BY-cs^vG,81~S3J1GIM^a4-V]0Cg$MF?ӻ?o2e+&?2!~YxU&A>$`fߝϻI/ co[h*I96IPByhM)kڕĚg*ʇjq}DGҦK Z!<ZAZVdyu/z%CMuG*뤱뷑mo(nnhүچOߣӷ|~=\Z.[n\* TPW>}v'|semV~I{<D_#k]<8Ϧ욢l0BRԔ`S GcF}qqVF$fbmh`P)/=F75ꐌ^<AH:Ō3ֶ@J nM86d~Ɣ'~3 Zލn]-bTAc/<Ws-k|>n0ZNEڴmgQU \:݂nş>رT5Vl=~| endstream endobj 191 0 obj <> stream x;rXr?2.^{)&y`IYR\ds}oo^2(uv+_d)ܪ)+&_*{$ׯ>濲=,ׯ~ SV";‹FEiڔlFɄ,*ׯ|G/#P*j `~.;(C5z &d.ˢ&?ۖE)?JDKWiGr\9X"(6jB3s~fpܴVf-pufa#T~OogD[(3-i;M/i{R"V ujI{wL}\49"**F XHIo^?(&ePHJn ̩ΑZ_g%P5eTvB68'y$mH OH'5=UxzwvE 9$D*#^_rMMz.:]Oo\QįzRm4C# [" aqp|Wl]+ao&ق\:9ƂbW'r_Nޮtc"h 3(ت)jRn[r/Us&-trܾqS_E?gNZkUȤ;dx^fU3|,6#~!#6T^2\`{pɕ|}[:V1:IL/_}F4ևˈ Ça؇l$Opø0!)pՒ3,UJPbDh$2L[HY(@:M-JnNu;)?cX=#VgϧOGwwـQd}=tmKTE)/~mA{6 g[/'%TZD8K0w:F33uF{EzL/GH-)Z eXLpŒ(= sUm X ~{iTd4E,DoHȽ<9/o)`(aޢ!O[k?X5/d)%*HW/#s"LM!YI3QE#t.mkN},lUSklр6j) tJ E4$y,EᄏWzu9y4֡#t6l?crR _AC2|P_QuúT-4,6v||ٸ $g}va7$w6Ȱa8YQ@c?/S5AZFXXڷ.P߸% ggƭ ρɔTFsf-.4.R,iB*Â䎘 -]&{KfP.B)`%U].$i)ߟeN9E (b"' >| ؙFJ1sf8'ëWW.x,c -R߁g’VSẌ%?2ywDCgs5Xge8lB|]vc>3ԑ Dy<:DdnA6s,zɞrY2B/#@v۔e!E {G K3<4\9t2+I>eR!Z8 e$'%8 Useɔti|GPa2+뢰@G>1:MJ-";rmaﶈ'eshRBG@ĥny A7:|U.I˳uQG]Y-%̡lRX0+@^| K.% dSIwzh ~ n-=k䐁g $u.ULuUSOa"TXضHeB/ZTaX0-Ahq'H\A~D.\Z Ns xyB(pe,71W]be3~!Fբ(k`nW J|A@FIL:uΗ l+^a Ц-b-nM aJ§lٴy@&DC*#8l]:[>D|Ys>y| |}{Օ.d4^˂Wj)-r~Yr~yjuW|A5W-}A.8(ΪCY,lU3iG۶_D@4UAASA"Az|GwOXq+jT햃pڐkO-a0M#/)K%ᇕT`J- IEUԺډXhlf 2 /Ӻ| U) ItHpȢ;璊^?wEqqӞ=DžfڣF5ddǤt|U 8jtNv侮v3\c|kSmK|WZ>g]WAʴωP^q#+hHMpɗgvqXLF&oFOA;G;7`K'Rq:qc#IVv~FOݸ jl=%xg ąm4X-\& o-H5fB_b|i5y<".a܂rRjEcݍ(dkU/95 tRhNwli:>`>={;yͭEd$ƶfyX233%[̳KOQYj&y 2L9#=86jv"%=s5={81c;] X% os#d GU> x3hMFcڮMMD°l'e`f6ฝy ˈ=xu4Es S{BýJ$Ѝ\_hو!~,D+јPBm%!A8sKo$^By'acz73+.ڜN:#g5w,^?M6@g'FHԜ#eT˺`0 yGfs}}@`6ފlZU? ^i3<*:MVD-}٣f4ӡ*̵XHjH%9bYEZvycfMG;j@6n:*r ? 2b;ҿa]ht'TS: *QVUQԻ-bhG.d`#w _Q=LعB܆b\Ln+6TuɫQEUwuJ*""zsOE(B(ΰo oCT%| ]*wQj =$ЋUMkj?pPe$ù=d['1ϹR {]!9_r0)x'lpm `{8'6~ "EE$y[+ .Bi6*yTzl[zݘPwBgm{ ݕ_e뿭|tg Z-kV.wZS^F4ćfIJ(3@_E]w.}ܗ+iهNqtl1& endstream endobj 192 0 obj <> stream xoo6wлJEHI{fcw8Fko3C␫ z%硨Y8?>̄(:;||$ եSM6;ۏmv;>:?~{|)ϊf:>z ]u|. z+ue೩EZ6eFWl.; YmG(Dʐ#i~1TXOe/·!iU l IPTe%Z_}ʕ<[)u;mk?Vzq[kQNJ~L7¸YoFT0Pq%2ӚRqeUM&M۶2QkTiRéFLַ?o(t#d ~YqR_#+t߂]!ptWaS|[4V/ĸ}B{ӹ?On YadZ U_, #rgwL-x..f\/+|Zvhw$m6۬4^knBD R% $C4Txn!n ،'anug&';Q'5&m W;.0x҆ҝ¬la:||.|+z5UW2 hMUrJ?xWaZ_XIRh,}N\ %-+`umK;@bVfHs_r8@ViUx3ݳN{vesa&0q|G瞻a W~I%g jon 7;8/ojLx;3Fyè}K`sإb٧z#tϛۨvmw>n;d.6WxC)7ZߍIV,cWwwHu\Yhޭ~w /&dE_ ^ /!b UsN[/RYuw.-hc)e=}Ĺ1LkޜV[w*Cn`o%j0E~b؉ [t(ܮ6.]}0>`aZP|D'sLV9"d FdQRAsg"D9aH ="d  BC',BJ!)u(Bwal9#R|ap(5nAjsԤgd5}05`aXx`uQj%b8\r瓀nC>􈴒'33Ϙ'5>3rT"-X@$ DZJ,(=łx/A%T 8YiLy@1ɗ Dl e)h٠ AT6]ZـeBVLa3f%Cq$91XY[M,I1YWXVHU\@$ 0INXڴ \AXR|[C)jw:_|{EumҘS!Yڤ:+6Vm1Zj |u{ͷfa: `@k I3(huw)G|Wz˗۳L%0$B5I V%mڭ.Hqc`8ӱ Y/:a9z$h0Jk5c7\^LW^__eAfz/ۊZi\tQ.\Ԑf%2^X^؈TO2+g;/^{3}dӄ|e9w7Nlʭ}ʂod4 KO_a=JFE>~> stream xr]UeW;9X%і͔#ڕH VT=} ,HEp3tL'_əegOYŬ5W6e;xI5/>,ff 'ACgi>-f6)+3kLUv33!6'ןQgTM@̟?Z"o.˲~ vRhbyY(廏åҴøR^}P wà(DA1:TP $.ݼ-vt77f4m.Tq=?Xf~wzEj E7CaoXةѕ!w_JtN)QuGj{$/nw7?i \8Q^Od& 3fkxe'zw|0.Y,Kd\RwR˲f_UYKR3nu]o@]݁z S-+S3#CTڨR~Ĵ]\l-$tWdKVg>m[ݕNq=Z6̊ǸYK::RA#.9[HWִłA}z3|/XݕJT K,~.LqKʿe4[F ` 5FmU~dUW5~NߺJ0 PS}x/qSeGP1>~Zap@_r_̈ShpzE_$3"T8Ul;%#FsT< jh⡝nLZY8"HwM8  s8-0Ϡ&<'&o\YFRe^d Ѽ]vFBۛ@jE]Bu2*fjUgg[MW6޺+[{&2/8e6Cu#Ka"Pzm=nr\S AIS<#eUW%㓟&GJ k`XWre(yáA9X DS"i3=eCɁQ(¾몬՞ɇVm۲Kt@ }:QxDSy@ +b9'aݍ;][l;YQ菪e0 ˷$@PZc0SĥiA,.٧Wq0Mpd%l!o@N Ũ)Q91r#r"'ZrңbRMiO*0T1KHwn<̺^e'GɼtNT@# S)N6:YJ38Eg{-hiwsxa1&/ҥR1b> ϷYA%q; 2e/\bfKN8遯 de ̆*ZGb2tntJAulH ơ<g'ߜF@¥}DXPͫUۖS<]1޿Y i|6A'&|1ۡuS>f4+CO 'iI`!)C%ԛ16}.9~N79<|1T@^9fFsoEAۛ>$ D;9+SvH3{)ݖf?%$`?v %Ktxr2x#”ZkR߂x=8tVn#tU1A_} >B{ wV~.[#blFW F}<;Ԁx='w&븯VͷfW!3xGMe9s d"ƛMS*b,&}ν?Bx㰋-e2N-v)y@_;o+/OUG%R51GՑٚB{>"ZGգdžʟB${&vbPrjxH8*Wi. h dPC;=R¯};{@A/0x oKo2mQd1Glq fdL΅Lrb*%Q@k th\d̉8&Y< j# ,6F# HF@Xq/dl1ZTKYmX6n>VLȆ~Lhg6^4eq`Q|=ZߌYT,K?b¥ՙiϾv$_tԏl#Mobto2ك>43e0]4+n7 hPZ֎Υרb,GU]C{~"C%2BO@ ԏYQȌ T;UIoBԛPdTݴv_ Y۲/[uUH7>8AuU=Ȫ-Drp@}UV97*2>`M\}zkA䚆)Q4_ct }z vG씯1H;궣$-UB녫Č B׸lKXq@gba?*lӋbttWN{Fwn/!~-zl+W=skn IɋCZ6s{B|9WbdMj_/V7|HԲ%עVXÑ]_p-Ee X 89k-"rϿӆ.AWlaNP†0I, 1s7?U#>ԯd/S#,o}@> stream xr63i@2LĉwzqZ؞&+ AX!o 'H>$XRʔBȴLe-=>%$W8>z;>zi3S)-K6-yf2)d2)EZɄTd}zF+`,YP‡*>ث}4Gxg?C,Xɓ,-m/RY{r`VᑫA2Y^lu;5{7g/7|ju+Vh('P|,3>_P$J +RiQiDEH#Mjǜ1G<͸t\B.N X+4aXڠl'A2-.l14 U`HTU\9Xþ. Shy)ޝ'.R+:]ޡjON)r IiNy"ne%Mju>Ri?}i emwJ20UT/A+V \03IW Q/w*0C rz^ \ˀ Y&3.2:%S7U>r&l-Bß<2`xv#H1/LLD=͠=&.Y*!>n+o*xQ)^f3 fCҀ] OyeKaQy f-O4p E,#L4g^*󟛝2CފljD^/p v}]n̼D2S%aϫP&*[G Okڅm<5n14O#Ql# $5m396Ӥx۬HXț0?5-}]z>|is1M$xXd~Τґ7YxE"̪Q=İH_sVR#>F?iZM\i T/1<y+ &ޤp ,{:!F,ُPPxMݙtV ̖/{01ʎ@ۀ%iDl}9 w͠R Aҕc,5>ګ^+ $^5x@ i ro^7S &` e('R1 xA /dSu/5 ʲqBe!|=XZEZL+5DdU ]G! h4G% M oPv3 &1 w`/t'S#.ٮol{Ѱ EbvCD\moUmD1"T.,nl 4uVs&vS!f}xEL*.,r'&= Z8P%bʖaჷ3wն"0& *SBbJݵ+{kǏF'!h]V#;gC{u}Uf f΁;3Ѱ`6?{;n_iTtyEQtI4ne_߅lޛщcVu<26i,m8֝~_̥́}l3 K!Ke:5Jy2B8kx{]'^8i&f>q&N1捸x MxOWPF?/VOܶ)A5N <Ȼ7lm)X'\low` ?L\|;tv[3J[bYaG(3L ܿ]芾n2&t @W'˻췉#LBRPT-פ4] Sb[ҩP _wkzzOᙀǃQ k%#Ld _z4 4_&cz .d`^'FA[*;uc yI hqUƍGT&3Eeر-~[vB!w0:1emTb,dJt?i{n1cd Ga&c8w^0o?2p endstream endobj 195 0 obj <> endobj 196 0 obj [ 197 0 R] endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 200 0 obj <> stream xZYܸ~`-Ob1F- 2cTCj1d,V}g?S31˳Z*:~8?c >~=?8e׿ϿB—f%<+ų-PkQLgfZθ(Jm/?H%ɒ""< j5${zREQ?G9]Zd׋3TYz|)PΠ/lUPٯ.׳M.5+r%jm~!gOzE_H )ouCKӼ)5c>%HšrҬ)x15#=/v K6v|)55Eٷp. Q,tj?5/w]WrI{S|ߢ{p.6lc)4[@ؓǷs34 =<̄8}7iwϹ&٣t7 ʮzvzbe>(E^B'㊲.+L "+y0+b|~d[ m*!8jZ>(Nn#1θhdQ6}cMyD{$['X\Ϯ[#vAX^}`UlL?#W\DACJh-gҦQFwr0&P,fN8C /2@zWe}9n] BkDn~nݞ[~7 ><;,ZW䔪M;0/rp-3wFx nzYἻȌZgRVpG8dtpLBlC!VԺR75<ɹTMQZ* AUTb"&JQBDl'EoS-/rJw} ` V4 [ } o$w|}W/eoiZEuMQУkABLdUHrAݝ2zZjjr+h~gIѼ EuCqqmh}x!>f߬qdäe8>oH~7>r?.^Yő { I z P`( S0X A$F)bMTz~X;mA"͏Rq78Hѵmp`AJ"6иaJt`0fu1!ijQao9nq+ V4?aS4atX;٘$5$ܢL2#""K87d2XAMQANJv}qg)*cI4ٜIUͧa&{4(=DmlѮҕ 2>n5$#= 4go_YA^=Clz>G@J^A2T!u_FJgY,ueڔ!1> $$GCȚ273B<E[$ [A=.!^~J~ǭҁd/<-B /CΦҭ9&x9ESIiˤkHG(j(Y"*mRhS%`OL L#4 ӮH@Ȏ|44U ;Pm/扑fJRAKҺS!]BT =< }?0%藃Ëhg8lp{ly]RrXM'4{Jg,#'3%\_V4魔&!.A0qNSY Fvqh'HN/Ow 2Dʂ<Z@&J]phMxpIx hݫO)j*jU!#5uVp& | յK49 {Y#<FBUL*/ןW} YP_*.2vjJmW 9e`+SsvbKw@_lCxЛ{lxVg8h>VUw>2T 5&‰JBWl2brRC? ԑ'I-Ƚ{fCGw 8Q3 hJ,'QQ dh_&RR$iʚE"̤;yJ7xSIU #琾?~9HN9LH8,00{ Pww_]ƆjnW,~šjPU~ls9sL)0^34\ǮE]96\Rrgg,nw*rK=Ÿ?$Y&y5v{3 g|XFƅcIoJf>ϴt f_S8R:7;f1v#e cTs4o{7V9;cUH!N.*KxRu (ZmF* qUAHtgj5zݭ\9ػĕ endstream endobj 201 0 obj <> stream xrFU` *eg$>ʃ0KXBV3 vgxXQ',+?jU0xTIU'ev?<}q.K'E!`dJ dRe* ^g,1^hmO|G "_V j9;WByQi! Nˢd5.Bky撺P\1޹) %+D@9:(\tۼ^l&WU.4w32X&?[h֏ZhFXi@K G|ccXS4rbi='&5zR˦`Vv{{XXt9\ެy*\\H2Ӻbb<]3?y8u{Iz}ΪCo9c+dvمyvXaHH/pgt.{|Jqa0YS0]x6 nҝ?L<{*2ؗ>"uC1؅D7n o BmS+* К (`# 7..*wC OwCyU" C'wfiPOA^X.Di':콨|ʿؠ{\嚴u~v'S!:dڇ(tl!]HwxfTn7zi~8*KbXGmOkjN"R.@Vifk7s15fdYH4f$p/- G Hm+_}^ Kn8ۊx`P@^5ٯ-[KUĬ<b( tP%P{gR"%.}dJajHi"&HՐͦN 1 A=M 8XI6$/h~__  WFTMu6Ա^ۆsFra Q@wOLpitHLS ㌃= ͔bZJ*0P0jD|:}q!iO'ro.|s=>b|}flqu\œˮ }ܞw5 ԊkI\,tU[0nR _x`k^Ba/TěO:T)hT 0F;ޖJQe <.Lu hl?IkFCdHưꟀ_6 =t΅I_)nL]V ,}O,5M~h#|3Z!nKʆׯ3Jy4rV p|s;uSdRGdxk`fv9%;&&چ/G# Gm5u,Sz/,Z֍^~@oPmAb@='nD0oNn1W{2wExp땃\zyu͚!C/7qpuД1>@73%&>sxvp*]?gbAh~9Q8`LI}& tN7ߦ._VXpF;Hq Rr]Alt&Vۼ1W+oy 6Ė'*++!% r{`ysC84ha2arAv=&eH֞ R?Û{MnT,KQ$r4>=I"qOh endstream endobj 202 0 obj <> endobj 203 0 obj [ 204 0 R] endobj 204 0 obj <> endobj 205 0 obj <> endobj 206 0 obj <> endobj 207 0 obj <> stream xk۶g-ă4s3k'ml_&ӹE^~}w@Qvu$X,v}Ϯ?2a,/DruK %4UBur ~xW'wGErGo?N__?z( tP[ la,I%ZZ&̕LGOh01N@\& IDU1س~I#|Wp) OE^L)e}|!޸) ˏى%bSttu<6[m2HWд-<}ɘ4MƊ6[0%P2kqC=#e%kuTY 3Gu-I _]BMP]b@up!N)Uj/0s "^"]aL{ۺ$uc)53~Bn]VF@z5ZhL=wÉv_Ik6ii ,dck@H?;P rGV.Z` C(gxÈu|n#'2Od^گW0턘uvr0<6CPܥX˄ه7޶P` Ivj2C5ԛfB<}\2+_-$Jkx` ֻ#;Z{icvOe %CR6?nD鷔 $/sQ*AC5A7a8I&@xJDpDzXd4 /r6u4fMړմd UN)Iw+`x E*'Pη@/@z[<tx^Iu^`!'UpȈh+#opB#%8|!])&G'qYzlcF VĺD9y١d,lQ;IG'0uЄAY).A|'hoDk~!uxHIyvҞ#삇[ 1i xOX$D} VT;uR?楃^uzZx$X1r` i0+;Լ?U'=KY7d%Ҟɖ 5:[Hӷ~/!+eۑwyaAy~?/|Նwѝlc^ӝ!ճ )y` q*qS!=3MdSGGx@7ML@̰\ZbtAw^;N/3,C(m' Dxb!'1h@߶$\PwuLQ,I}4GUl+oO |h*{'81$/ 1YƈCDq H +PsW&4:@|Du".$|2KҤI+ [ !&v;Ҧ[x/)' 6V)c@qO&{Tۜ!knn>Fۗzkk n!Mړ g* S%j悦34Dl7Jc+DAhzUiAM56 %5wrt{ qh`y8A]1c]Nۛ!Yf6 ni~W` pqh7W^83Dž9%rr:}ǥk'Fq ـDE/x||(GaR4~$̌p~'Sq;b(`!'2nd":qP ؾbOD3n%8J̲VxLJ eĕ&W.*{tX 'Yx˫3wEa/%CI$7#d U)GWQN6l\leY1׳sU%|"Ҧpp)W $d[e!$A0tQ(\Y P&D.^FZ,ǭw~CfB!crgB,fCx1|ootCFP=D:$`s۱w{NHR2? εE\}Kŕ76߶GV.qQ(H`aYf*C .k?8Mbilz?p6mۇLi/Tzl.lP^|W7gF, xҵ; Ɵ"PYe4p>ln'HRJdӒ# c`6cPgȳ[t6|@+vc!2T,Sp.'NnUG#B endstream endobj 208 0 obj <> stream xے۶3>J.M\IvNtd>$}j]M"JNܯ$@Dp.8We&D^"+?U&&/`I*{/_Ȗ70ӯ/_/r䦰Yjae^4E.ym2!sk}Ňh0 E@PM@ﯲCJ s2/-"gE^Jfw h67Z1~K _AkO@sxhSچx~^-ovTv)`tӲ^ .kDzbSa~Q熽%UUKK!ATPmM*xo%f]3ES0헷fAenNmtɞXʼѨf !E4+YP٣Y!'v[m)̢S>ǥe5:A>GG=\%oaiZak7Θ;⻵Nz}⧥َ~kzhqzٵ7 ~`za 52ly+=}E$ q~Ŏ}wȢ|hqTGk xqG<9Rӌos\Z01ܖ1HeL#qEf=ڜPrzZɳDͲB=nWkcP0,!sT=ᦠ۷].Ӯ 8 Fg<; rrRFDDsX29khWM]eVx@6tnK&d8g @YG';aDr!BE_EYy<['ZE\WePȺ5ig/ "g7U.嗒 p?@;y&k2f)+rd,3̀X: pURfcF8GtŭfSJ8.gĞ8Uk* i[[U/.nfWWd?yI#꽘,m,rxēqGIw}@_Qph)qd1Oݚ\y&l}4w0Pݲ& ͸.V;z*CdsQ[pގ LnKRIj}CZ!m :=LIq>#_ 6+"FaI#.h{'q)iCXxN}gʳx(iSj vb>Cm K|Aˌ *Fv1B`"Nf-j($g>YK.!ֳwX#U(@zODJB4m 'K2ao;rTK"TJ*|f60ҹQ1:2.M {YisM ~ZTZcOyC+.pQϸPPF0 6|><,)PQ_ӝƥqoS@l ׈22 /})-J$f8]aNm uOV[4vL֐\(^ïLiu<͈i:S$lL3*ӧM*0s@:;=#|a:5,r:C˧^%ɣ-^=犟w+j*~>)l.PzUư+$*ṇ)ꉵ~H/[jA2v `nEnasA#O4Sb菣;B/ J6u :+؟r0WApUa n`4tJ# _W> v*HP!ɭx=Fo-؎I3/IȢv^՟7Dw~kmp 'P2NӪבRTUzh,U$|*Ai*M|SmƲ7z܁zWq?)WD$Dzf5t(=;V- $08ٯ(:̸7nF|DYRlb4|N*5/;>ۻ"m5,YpC|S2V l;1ho5K5leёnAvʠkR'J0[NGxǶ5F~ogzCa='M!>gfKNHHC7dJ༇TrGl!lDht"M m3̭UyкԄ0g/d.UL|xe!b^wsmڪI՗z|s2r4v;_m YX:ʽ]`,aVcH2,G"=a9S : DXW)% 1ؓ7s*eh]sRksUy`%డa-oyDXDIl2]RB+dB Y@^Ϋ-ZD+daB Y] Y+dQ^/SYg/2կҾJF#̜LxVS[u"j ~@K ~`DXMaWH^! {"P_dT[V';-Z4PtY+(*YM eRR+ h y;* V<0Ie`+/tYH. ɳl2l#uzj}z,  'B(Lz0P?j|^qE^e1xww[f\/8ÃRnQ/ȹn$;/dD{F(͋ >Zy?"A`sdXTcUBh. s"ſ{#`8UΕ%2݅{';nsj {2^uܸ? [HcZ[] v;@%H i`Fc9KpUϨ~ endstream endobj 209 0 obj <> stream x\o n>ҳy4@rȫh<\ť(u,ߗVNJs x ɡ(___^|-/jY\]^YaU}-ˋ]^忊^^|~y|Q XRF7U ʪQV3njDL8"QͯRY9&H+" g(qUW5޾ۈfOԕ{)nffq)Y5sb@!USI=ans]^a_ͮd$ClvDmkFl;|a5woApϊeһ/jmr昙i̛(F;`.h`HJvf2t߁R/ 6v_z2u/wxP2ia#^2!`s:s*RGҔ[SxϞ|`RڇR!W WuW&zjdҝn_mCT֢S4Ti*!:ƴ_.ډD4$g[.Ɯޘm(ple3mD*9|cڿ,6b,Qάdhiޣj[$%e_MzHkG"RSBcB|le]Bf׍#sgPLlr\췯\f<̫l&sjjgj"--󏘍c"Qo^j<|'or]R؆VعYŴ{Xisˠ;3mƱݹCɌ'}$<,ŖU-R{E)`^LlZcL hK|FAcϡgVgC+ecW,:^ .]J}L4ݦlw3JI#%˚s=z2|뒆o]Ґld|2ah]5kB P8CsU)L Rթ&V*li-v hc3HCxh VJ] ,d2 3X , IT5 vŹ&}#Sg4)׌Фەؤ! XnRUmRJ>a#6)ƺ Ԥ$&%ֵhIIu1"-hII&%5)iIIuMJ"m: ҤbU-ŸfZ̶8v2ZAk1JtQ?c RYp qacseHI;MXPW5#6Xp.WN-TҁH7m髱n"=qíya]HӜMj*fR~)䅪DW@#I߼{x/e/8q/Nܰoe;ۇЯwnd?ϡ}x|P \0ai56+yuOŇD@:Ʒ{ݸׇៅ=]qyx1?@ҋ3ɽE7q P`Kgc|#3no;7J>܃ 0[\oAN^C&W~?l\q> y̶}}@ۿ m> #4 aYCdQ7j L_m]u㭍_6QGcjO΅D<~]\amäO7N@?F!n=֛ C?yV:ᣧqEo$~!.:/YFV&bD |8|džۡ,21^:C`{ɬKߔ2 DW&.Lr{H}s|y^W-$!+ޟAgl1~U.jovd[0yM:g!<ZqB7l߾,,KT2Qv-Hnz:v;>A0$DhJÝWptui16nS+&:O~lrʠa 9.q9#1S]-vcP%|u;⍇\?zZ J"6]1l{;Q+`-f^0Q+,gSHV=&;,u[,3Oño}/PqR*d0/ݏӊP&›'OǦ} K<轞(N!(=sJ Av%>):EI1z/mwsUvs`VC|K=wai~bп|~hk[ in\9q~,N=Scit׹0M*^NB'byXL.$$._*AN8i/jXH_=ϓ?2giq&nk|F endstream endobj 210 0 obj <> stream x[YF~7G)I2X `;vfcDg=#*d[G))EMh`aAH1AZUQhO6W(uΒB,(QAGu-#E==IY`GSϟHd+t(v7S۬;\M%Śڏn4zl?kPֆXL%G)WUucwakBP[rt (B4mGp=+V Dt B4$K$J,mD C9@paW<G1LLv.pP0ॎ)TaY: !*~C(31cPѡxWD)clNe;?۳'>[wu[8MŔuTr]i*3%-m6yi9F&qp{[.gU{~+*c^ W˨CR$PhY \?92h$Nb ~(mD|eJp~ ܕ.:1w0X-F[f3F[ӯoy qO|P@wZ1F]Qt_wO! cB4!'qD%bv>w^{vOWSBK<`a6ϭwx$O*w Y.=-DqΡ)x WՔn&S?Oµڬ8pX%'09fMx}IC>:cUyT>N+xOFhàօ! ntoaʍ#J=8uGxEkn5JfD}b_͎< I)Z.)iGtr;Z$Nˏ` ~*#"W7;+.QZ/uxM$+I-lM=C0U&1EmrNr!E,HIe"%i8Zq>1mUņRkjQHph%|_Ra>>P>I1pp%=-f#Xh}BGTpc&4v|.0 _`(ed.-i!O^s  8|Y-aGY il&'QeD|d[l0R84(쉀o9$/8'c5kOčb*mSA``7bku)Qײַ+Ţ@Cs>N;E~ k}8@nҤd,QH}WIbMmΐ>,n'R(ͦs"v+Hu.|-<ڈH3,}P1wS6ngwOOdam.t\K5U.ˠ;Nd[l}ş&~Pk9=,d>y F[t|pAyV!K;:E;O|7L`|T;gktR@Jtڄ:ƺ8W]YT\ȫb~}#gni(v$p 7B'zčQIiIYU*t $IWpmb]2z(^*^PU![JK,.͈_*Bٌ;3szfgɝAހ1FL?\yQW=]MݢZ|MT9AH\Vp^?UVB+\QFִdȪEz)G'c|/47: 㵙=,X%bqiz@]Jf,K $,zSr)#I*Q=Zop0XiIRB+'qTrQzBN 5~]:) z> 1A\roewdi?> stream x[YoF~7G11"00$ rA& K(efVUXׯIWm#$D^6J3-:zu{73lB8T@:ףN7W7vdNaӪE1_Ej5ѺG}2ǝ/R=*%h.WL:T@{"g+3ˠ59"Ǝy[?D[ FZVބJcxB0'C+3#|vvUFڬWK3;>o IYk#3vlB)bhMA؛Y~k4"r$^;| |3lJ#QC,?AOQ01 ?M"ˁ=%r"' -*;dO.o#z4.J '#S ho?0l)JuhOF(QWR* Q1r'GD\:_fq>kNn(k+ۙ|T$5 8dRm*IoGOF`%8BsJr"ؾ[LM^U[^TRgTSyߜhh"m[rrb6(.0BUUwGlal qoK}O{n<%G0LY,A2*hH4UIx) B9\>9_%=Ksū",>|'G\D6#1"'|Q*R"PSvwGQ vC7h3 AnwJ6h!V ;I?INjfEevX!~%0#O{K1VLݸ>XYOm-e,l O =SҩFMX̣ipnE9"TxF/ݸcܠv>":jzMGh,;Z Y-DqMЫZkRd|m &hǰ~߶KosP7aӬ*Dc{D Zbj<~12g=& 丝a.RMHViVO&5# =LgJL99>ow QI<_R{X+,>Y]=gMI^8ShqgubMX4R?=)4* 8,"4l8düU52!txpڬ):o' SLRɄs*"eR˕)|2rLɁiGJs GEIa-f$юu:a`ڍjn#r޵J^'T&YT n <],$hFԟ$ IRXl8F'tӵ`Ƞg.uC{Ԣ-7R!#g ^^hje>F攊*ڸ/HSPrE;1i!~/" ԲnOأ d++Y( gv%tqjs%acz]_9kOjY0rM@V?1tr{ı!S)A)_)`)Q`yxlL(hRoׂ"kݮ1iY S\11{Ur>R07:c}|^r9yK,HKB:iZEgs0BּLzaC-ai4$6t(dGŻ 0d}nޓ5R萣:O,pZxS<ͺab) Dž3 hcL .. fyT)OɣATM`|b{f kIBGhOlhLȃiށ$o͟,|r V_M嫖a!JAm01@Ğlv=f;Ent-iT V:iӧ#Z'JM#lrhj{[䑞 r%T#!rgՐA&)~d^s%O- S,) /X]_ d/Ka /+{ Sɢ^tEiVTOnXW ƔE#kw`Q DO.8~/h9>m`4Fx#6{OI$4RKǐ{|0}E%y(kw^*];YW'k"Kw5k&Eý8y6u_vkaûF *)@|7Yg'ɚz_s:FUs\9`] {?X endstream endobj 212 0 obj <> stream xZ[o~GDRc[tStA8Jv;38 1$rH}>͇Y9KE}Q xTJa~ۛ4z7no(3|{#lg`9d<` ʨ)ʨϘ<|CD+"hMtOU9I$ #} E2q#&e)/h"db\>+g{jlIfkGeLr2]DD.'xQq}6pMI4'AB"-d}Rfވi" p=8u(> Q.11QG OxlR* CO)IcX2yך)R*>5RH HQb`5}kGbjٞ&Z+N<8uN#UJ-V쾄:.: #O 8 4K>evy/S}V)3)jd0Suru%/v(ems$1H2 MN'B61Y KVf 贩sŝgXxFIMwPrʛv+r;aVk)]H)ZJR' S: s:"UJVZõ9&wẙ0lD'.hxbaT,E+oWš'(d"dE6Aܻ;Kkan-\9-@f*n2-BR]_9T >0)fJYO=e3 8ǓRllAq_{j` Moag@ L^Vx%GUzTa&tf;ژtUe*..C6v !FZG7<xQfnl倫SK7= #{,JTn5+jR>e)eL"6K]3CΙ(V\HqktySruiL/0s4 }2"&tZK΍1˛ t3!Mx5(_(mr̡ʼׇ<>։LM5FfipYezZwr>oREsl2YWC8 U xǿ#'XxMH O6-F+Z$BS4H~wp~D2G$|, (G)C76 QhPվ/$9mO0& endstream endobj 213 0 obj <> stream xZrܸ}WJB+ʛٔ*WʮdidxѮOwS.Dh9}as^]8g.nxV?Y8ܪf6bom>ÃM^Ò&a5K#LԢb*]2a3q{xp{DQK ̯GC'B)b.#iDy*Cgxg'%+&W28˻ vz5[yRM%)=*B=MBυɿn ?'2mqU }q{᭧]꣹cNM36+&XYŸYZ&_ .e8k?gW2 Ǧ+0=T~ oቸ@a^.6S0N"+[SLS]3rfSE=ǔ7=ԥ#g h1q[\ߟv46+,**B ^#$؛lFWc3 gDW CH-Ol)K bmKf&VUxB?!R RUf'_o?OjBtme,y" R$j2ZqDJxEB>XPT inyW`N ΧE!DB0e!@O{ GrLTuή;V⤂ئ?Cs]\=qD=YW8O,M؟scϲ!Yh$ф@yt& gaR=--JC6EU:Gsf)3ZF[֭HzqX3KD+1H٘fGbP V:iqyx:{pf_7?}z`49ekHJ~/heHOxh$ CRbD Lo2cwMʿ]զHnav5(DalpoD?[ *=e9]iIDNh5a޾mR [ 9s (',Z z%{`O< jJGsī? ljeSRf 2 ?(xvvB/:dt~w_T~Oc?Y-ƛ \@ ԑQZmN6C Mct%`aCCK;KJf ]Jì\Nal ]1U>NcK 84d!7L~i5˳3\cjcPCPRy@jJ, ;Os{9N(T\CG$|zw4(GqvHfdS0sPfBՍǡJ, \US`a-Rwi!o\󐝢2wn`2<,VN Vʭn`m)%@U<q]CDUe:"-h .LD=4R]OdjH6ێ"p1vF]]B)7f(Jh46owM |v2%rP $y6ڽ v#Uf׏~c0E1҉UVmߢېiV/ykO!uN3&=Že1|I1W(c*2J^y98  %7gP%y9[,)exo~5bKI%,ֵNr*jYVhaob{2I[|9ckoxH4BK*,oHChP|z?BkzxX˕8mqy<|j~REaeo޸G N,#!5Tk!$AwC04זݮ4k2 7xv<zJf `AkLsx--*&Pd^-#}+*ǿ=V{]"kD"[y83Yӎ'XYN=uCpJV5!NzDݙ!4K@ G[0)% 23- ,[t fF+*%PWl -^j[0SO~ީ̌T`6[0p`d)AD` >U`:BД`K?ҬLl endstream endobj 214 0 obj <> stream xYnF}7#[Oq.RN-Hr;]$RJ4F;;sffU$HM49=Q 2*p+7V^+Iӓ8J~f?=NO.aAhP!lgndir(PETl$lNOnftFBHhJTab6(DQ tT*W1X.̖Ʉ-cuL 2X0F}1.:RrPqvKxU%:,3Ho3kN]~xm"%-9{ʙz` `s`ŌepZXPRAZ\cfs[ `uQ *Qb9BƐc{_ġTJidŻ5P=gN ]=˚ a"^hu\ xSbToY=ڍDfLNIIfE5sfc"-/ e1TV- ݼ/n)}Dz2vW2SyRᅭR^VppU% 婽q`jAwD*CCZB`΢ >Re\@9.TV 7䬀ݵ .+sAV>~V/̌%r.h}%Cp="weY7Gj#m2@Mm&h\cbX-Ź`A`[hr_ANULlXf3PHym*ɧ r@O ǕO%r1zcnϞDŽQRgID;wmLȊU$HTc ^=3%Ox2NX#S_jRϴt>n~`雘sQóDFcN -)(*|0fWUsz60w \LUEnj ҭ=_^ Mc"{ ;:_z1NzԾj97xQj* `6.0[' zgLJ},Jb<}'O~NcJ0n HSX;N\fPj%ɝUuT1"zY&%;hgB?xOG@VM*!݀%8! Co`gk_RQ;<ěsD;|2b @c3Q}qَ*Ж(~~:>x+_1[P'aFmO44?k1tt"z@Li|2ǐZvI5Sj,pJo@Ң(Ht׽#Dqh..A bdBg I:a4ܟUZ5pV?Q>t;06C@wBzsn͚iF(Mϖ'@B-.Pgq8w; j-u}?7nv2h1Yc;r) Z[%A+,d &g9 @(;q ߬O)c;M@/S |xpLL`9 > stream JFIF``ZExifMM*JQQQC   !(!0*21/*.-4;K@48G9-.BYBGNPTUT3?]c\RbKSTQC''Q6.6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?tsA 2@5SRREPR( ZI~UgԢ؎5q[v$uf8(+OθOZd/RO&(2,?Zi$?tj2}8J+C1٣4JIE6((UFX=M-U8dU[a-iB(XJՊ>VjU+Z{V6W P1?8-5.$Y|c#{SVLFA>#֧[vd9&[xNEbHttXdr y>bI5v)?xtZH>i(7Qm`p?ںJ;q1Iv)0Rb INHiRbF(SH ! ݵW?tV;4QT3LZ)@KF(PKEC-ݼ?~QAɤ[5,!kc,3Q"uV˺y18d\xJ$ܫ^qu\MM3ǩc$ʯb[= kBٿXOiA0skc (ޯZ$cJR}WEY14 +nױEݚlSrU.Rv >+Eu>J`&))ؤAŠn)I@ "~)Ȧi"-S$i+-N J)ZZ)iʐ`󬫭BI~Tiu7*1r/}$;k:{8 }p9>u9֔M!wwWT[+v((=ӸQɮ3X7WlO(E(sKQN\4+f皏>*0{I Q9)s:jXIgyGzz0e탞CB4T׸czV= Vpb$+NH3J"cvx5YW`~  gqIأ:Epk70SlֽUDcڝʍ}RLJJu&(IHb6*(@ S)hQ@2Yr5VPTÆ?+5٥mśԚ]GH_rh<n}y0JOSQFs?*3H7#NqבU@IȩU\${7^%=W>jbxMsPRXt+4[3pG9R'(\WMj- UAa'tSmn!8\Jg2%fqNV v>oHWalWGk޵l-RBtf]ĮrM:ȹFR*,uyfʟB:YcCy*7vF[(BqGjZJ`&=))}h :Wn7T,( )E%(d79Ǡ%?U-Kwڒ|Hy;׬vv,YRj0S5R6Jګʌ5iQT% fC<ajweaS_c'8ss)Ă<9+#1RnMĪd~*˷ЏCȪ”6)XN%=OS#sT2jHmOJrM XV[MK9Yz].cآ,䓜:V2i6B9MKжQ[%&mxr[ԪO;Ό?=릴}+}:"GFS[=ß?zTѨ '9O>w)5Нb))hM&)Ԇ)hDB)uJ) 2IV$==hT79{53.:j/T/ҹU.,V$jPQS =\MqQsSCȬw6T@5y&'5vsޱ/dX+ZJ䌊&rI$А F=B%2!-H9ZwOQNxupQ`5ql$(zMJb;xw5Q՗nV2:Zq+ֹ+6S~7a)xwe s𣠪+]ϷE\E`W jiǫi4(906#~R՛0@p=.wb>7cSyqr7?ݭc\ۙ_ 03[QWw(d`ҴzD.G` L}ˀDu".2*'s=h9QUed ǽy VrRcYqyh8sjݳ򏡩dqYc=J7ThE5IP:T6i_fXWgyܬ225{sC'Pr{cUW. UkO`%LӷH$?MbǙ.}EitAQL)ȌVm" bp[F~f裰mT隉46٣5L6iѾ sO;y3ԞJ kJ,*+2w|չd\Swv:`SS*M@ZE$I=2 pO|m슊YSڱ[ًgjr~vtԽr$ȭhBnaݹТoo$c,I jRnnJsYީp`6d(:(F9 :be(i=:o J-6-/㕛5|VeޜO9#WLq3L٥ 6MR[tw`n$~GҶoVkF75j13WW`Tx=*FrjulT ަB7=qոЃҳjg;b.I{0#QN9oCdpj.+vYx'_'A~wX3vlMX$&ֳ- wPʳFNs^UkQނ9 q^)Fy5amQӻdRWQ%%;0kq=&i ey3?Ұ5 { {8vg8}Ma+ɮj%vhY.z=j+Ugq ;D}Z*UjH Ҳ rjąm5{9C_BiFg^ʍr ޭu27AV5m Qh$v[EUAҭӀAL7*ݼBVz)air<#y^?:ü^fTb\@IىxuvvAYCyewso,t9݈Ym\{7Z2Z|gf/\VMK^yĤx0 # v IpӚE4+DNlS6.ryݪR|<*ʄ}j)1߁TGAL8#FDHRz (KWA_ ͳh% ~)s$c?)"ݮzW=I[?0 zq,az̏*qvIKEjA{_8on; j)ҳVeT?Sv$\ ǗoYPmǠ\gSY S\udTyy⬢^1PF ҭW!/Aq ^$7U.)>IMB}*j:?=Q4iy=@^aJKiyIU?4{q# Oq(І Dqh% d[{݀~iI/@;A2߯N fII>dv-=M{uqZƬ!vvGjpG m0۩j/nœ&/wU/c@?JksNW;GҬ`*p+:6V%RċGi+Y27=gL?ҦB3Fҭ ʍեnIJ79ƠWÎ fJa2)+.SLJ7 ҹ]_Fچfe`{U:gXet4Kwj2~aC]霣M'ju'J`'EEQ&_*"ߗ֔VΫ(7l+]1HBz/$2Llj= ԙoI좹vmZF_VU؀5JiۺSȭjT@'p88ۊF2RpTZɚFX sѠؤҫ$i2(4+L\.pi,Sn9>b vv#].ٴ_~/$lukő:-i<'n2/[޺' ד:>+[y]T¾Ȟ$ 8׾uV?2/ϕWE᫽ xn wP+WFwF ޔyWG?dZڇy~V#0!2#raSY:W/k SyPC]^knUQ3j܄W GUb>;ULdjQ̡6Ajϸq=*ʄV613"|88^g7$#1Nz;"_t*z1'5$RRPf^\(T-ܮi!PO8 (=*7Z}5хy5>Jcn{61^y;A=vU( Mw?,Xk0,*>G#cԷd)h$Ԕa4zqg?@j+[\0i(ݞuIʸުޜ$#R]*U|UZ=*(qH$vaTU@ڲqxN~-Pا8~cEj4 lcVN4#Qn wo.q^y?QEwѕQYI["hSf9d&cQ>6OCd NӾKHi&֦DV=+2 Ҷks \TsLFmq}=5xCt9ׇțEi5}rp穧 g* l\Nyfi˵pxP ܘ=:@KZya r!1D)uKY 1X2H#co+,Hϩ Ԃ=A6jyJ6ɮU՘*S5&^ HN{Tk'QM6xlB֜ g5@9&cq䟧NMª;mIuUe;KsמP(c.Yn>*RyH$Zb g-J\O>~~"d; +|8oS+UBEoEy?U8q~B(VsZCxӰQcV;uqYzSΣ30 3jQqsfn;1\5w:i 83VL+|VH# e]Y?-j#=&A@R5E;cQڰ6/uL]#EɏQ@vCFz]l{V<in8T2! $z⚈Xޣ+qUϧ4~c$zta[\usBxNkMi!HràKR]uq 98ǭp7MJhW jͦ!IwSiDOSU܌/N+qgB' hRjx)X9@Vb>d І7U|g Oj~6ҹڙ$BbnCR\]MZP?j:VgY-VgXZ鞛f5X)EhW<¦d?O+Mwt|>BV؉ 7od/LFuاۊ572/-s͉Zrp Ze[fbMqHF\jSQŝa)ϗs:mr1eH;xUD^^He]'\^9 J_UC0 ֠|֔X1QaXh׵1DoH,Y7cҠHp $f